You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter应用繁体中文(传统)国际化失效问题求助

Flutter繁体中文国际化失效的解决步骤

1. 明确Flutter的Locale规则

Flutter的Locale基于语言代码+地区/脚本代码组合:

  • 地区代码(如TW、HK)是标准国家/地区标识,可直接用普通Locale构造函数
  • Hant是繁体中文的脚本代码,不能直接传入普通Locale构造,需用Locale.fromSubtags方法创建

2. 修正ARB文件命名

两种方案任选其一:

方案A:按地区区分繁体(推荐,符合标准)

将app_zh_Hant.arb改为对应地区的命名:

  • 台湾繁体:app_zh_TW.arb
  • 香港繁体:app_zh_HK.arb
  • 澳门繁体:app_zh_MO.arb

方案B:统一所有繁体变体

若想用一套翻译覆盖所有繁体地区,保留app_zh_Hant.arb,但需修改l10n.yaml配置添加脚本支持:

arb-dir: lib/l10n
template-arb-file: app_en.arb
output-localization-file: app_localizations.dart
supported-locales:
  - en
  - zh  # 简体中文(默认)
  - zh_Hant  # 繁体中文

3. 配置App支持的Locale列表

在MaterialApp中更新supportedLocales:

对应方案A(地区版):

supportedLocales: [
  Locale('zh', 'CN'), // 简体中文
  Locale('zh', 'TW'), // 台湾繁体
  Locale('zh', 'HK'), // 香港繁体
  Locale('en'), // 英文
],

对应方案B(统一繁体版):

supportedLocales: [
  Locale('zh'), // 简体中文
  Locale.fromSubtags(languageCode: 'zh', scriptCode: 'Hant'), // 繁体中文
  Locale('en'), // 英文
],

4. 正确切换Locale

方案A切换代码:

// 切换到台湾繁体
setState(() {
  _selectedLocale = Locale('zh', 'TW');
});

方案B切换代码:

// 切换到统一繁体
setState(() {
  _selectedLocale = Locale.fromSubtags(languageCode: 'zh', scriptCode: 'Hant');
});

5. 重新生成本地化代码

修改配置和文件后,必须运行生成命令确保代码更新:

flutter gen-l10n

常见排查点

  • 检查l10n.yaml的supported-locales与ARB文件名大小写、格式完全匹配
  • 确认MaterialApp的locale属性已绑定切换后的Locale值(通过状态管理或setState更新)
  • 测试时优先用APP内手动切换Locale,避免系统Locale fallback干扰测试结果

内容的提问来源于stack exchange,提问作者Sasitha Dilshan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 09:55:16