flutter应用跟随系统语言的问题

问题

荣耀手机中,语言设置中,简体中文为第一位,繁体中文为第二位时,软件内字体为繁体,手机上的软件名为简体,但后台中的软件名为繁体。并且从系统获取的信息都是简体的。

原因

从荣耀手机获取的 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);
},
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值