在对flutter应用接入国际化的时候,我们需要获取到当前设备的语言以用于根据系统语言来加载对应的应用语言版本。
在MaterialApp中可以通过LocaleResolutionCallback回调来获取系统的语言:
localeResolutionCallback: (deviceLocale, supportedLocales) {
print("当前系统语言:------>${deviceLocale!.countryCode}");
if(deviceLocale.countryCode=="US"){
Map? language = SpUtil.getObject(Config.language);
if(language == null){
// Get.updateLocale(Locale("en","US"));
language={};
language["key"]="en";
language["code"]="US";
SpUtil.putObject(Config.language,language);
LanguageUtils.language="en";
}else{
}
}
else if(deviceLocale.countryCode=="CN"){
Map? language = SpUtil.getObject(Config.language);
if(language == null){
// Get.updateLocale(Locale("zh","CN"));
language={};
language["key"]="zh";
language["code"]="CN";
SpUtil.putObject(Config.language,language);
LanguageUtils.language="zh";
}else{
}
}else{
Map? language = SpUtil.getObject(Config.language);
if(language == null){
// Get.updateLocale(Locale("en","US"));
language={};
language["key"]="en";
language["code"]="US";
SpUtil.putObject(Config.language,language);
LanguageUtils.language="en";
}else{
}
}
},
但是有时候获取到的系统语言为空,所以最好是通过插件用源生方法获取到系统语言,实现如下:
Android实现:
Locale locale = activity.getResources().getConfiguration().locale;
result.success(locale.getLanguage());
iOS实现:
NSString *identifier = [[NSLocale currentLocale] localeIdentifier];
result(identifier);