问题
荣耀手机中,语言设置中,简体中文为第一位,繁体中文为第二位时,软件内字体为繁体,手机上的软件名为简体,但后台中的软件名为繁体。并且从系统获取的信息都是简体的。
原因
从荣耀手机获取的 systemLocales 中,languageCode 和 countryCode ,简体繁体都一样,zh,CN,只有 scriptCode 不一样,Hans和Hant。所以要通过 scriptCode 来区分。但有些手机(比如小米 9)的 scriptCode 都为 null,那就要靠地区 countryCode 来区分了。
但还不清楚一开始会是繁体的原因。
解决方案
根据从系统获取到的信息,加些条件以确定使用哪种语言:
// 以下代码应用在组件MaterialApp中
localeListResolutionCallback: (systemLocales, supportedLocales) {
// 获取系统首选语言
final systemPrimaryLocale = systemLocales?.first;
print('语言代码: ${systemPrimaryLocale?.languageCode}'); // zh
print('脚本代码: ${systemPrimaryLocale?.scriptCode}'); // Hans(对应简体) 或 Hant(对应繁体)
print('地区代码: ${systemPrimaryLocale?.countryCode}'); // CN
print('完整标识: ${systemPrimaryLocale.toString()}'); // zh_Hans_CN 或 zh_Hant_CN
// 如果系统语言是繁体中文
if (systemPrimaryLocale?.languageCode == 'zh') {
if (systemPrimaryLocale?.scriptCode == 'Hant') {
return const Locale.fromSubtags(languageCode: 'zh', scriptCode: 'Hant', countryCode: 'TW');
} else if (systemPrimaryLocale?.scriptCode == 'Hans') {
return const Locale.fromSubtags(languageCode: 'zh');
} else {
// 如果 scriptCode 为 null,看地区
if (systemPrimaryLocale?.countryCode == 'CN') {
// 大陆用简体中文
return const Locale.fromSubtags(languageCode: 'zh');
} else {
// 香港,澳门,台湾都用繁体中文
return const Locale.fromSubtags(languageCode: 'zh', scriptCode: 'Hant', countryCode: 'TW');
}
}
}
// 其他语言走默认逻辑
return basicLocaleListResolution(systemLocales, supportedLocales);
},
1154

被折叠的 条评论
为什么被折叠?



