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
相关产品推荐
相关产品推荐

