我在使用 flutter_localizations 为我的 flutter 应用程序配置默认语言时遇到一些麻烦。目前,我有两种语言:瑞典语和英语。如果手机语言设置为瑞典语,则应用程序为瑞典语,英语也相同。然而,当它不是这两种语言时,应用程序只会求助于以前使用的任何语言。相反,我希望当手机的语言既不是英语也不是瑞典语时,应用程序始终使用英语。根据我的理解,flutter_localizations 应该从一开始就默认使用英语,或者根据我的supportedLocales 列表的排序方式,排序如下:['en', 'sv,]。有人遇到过同样的问题或知道解决方法吗?感谢任何帮助:)
localizationsDelegates: [
AppLocalizations.delegate,
GlobalMaterialLocalizations.delegate,
GlobalWidgetsLocalizations.delegate,
GlobalCupertinoLocalizations.delegate,
],
supportedLocales: [
const Locale('en', ''),
const Locale('sv', ''),
],
您可能已经找到了答案,但如果情况并非如此,请尝试将以下回调添加到您的 MaterialApp 中
localeResolutionCallback: (locale, supportedLocales) {
for (final supportedLocale in supportedLocales) {
if (supportedLocale.languageCode == locale.languageCode) {
return supportedLocale;
}
}
return supportedLocales.first;
},
希望以下代码片段对您有所帮助。
if(PhoneLang == "sv"){
//Select Language Swedish
}else{
//In any other cases Select Language English
}
为未来的读者提供有关此问题的更多背景信息。当您将设备区域设置更改为另一种语言(en 或 sv 都不是)时,android 会将这个新区域设置推送到您支持的区域设置列表的顶部。
一个例子: A) 您的初始设备语言(按偏好顺序排列):[en、sv、de] B) 当您选择“de”时您的新设备语言:[de, en, sv]
Flutter 将分析整个设备语言列表,并选择您的应用程序支持的第一个语言。在示例中,如果您选择了“de”,flutter 将回退为“en”。同样,如果您的设备列表是 [de, sv, en],flutter 会选择“sv”。
一般来说,保留 flutter 处理它的方式是一个好主意,因为从用户的角度来看,它最有意义。
如果您设备的语言在受支持的区域设置列表中没有单个区域设置(例如 [de、ar、bn]),flutter 将默认为受支持的区域设置列表中指定的第一个区域设置(在您的情况下为“en”) 。 如果您想在索引 0 处使用不同的区域设置,您可以手动重新排列支持的区域设置列表,或者如果您使用的是 l10n,则可以通过指定以下方式让 flutter 为您完成任务:
preferred-supported-locales: - en
在您的 l10n.yaml 文件中