本地化 (i18n)
Finch 支持两种语言字符串管理方式:JSON 文件和 Dart 定义的字符串。两种方式都支持变量替换和复数形式。
选项 1:JSON 文件(默认)
结构
将语言文件放在 languagePath 中(默认:lib/languages/):
lib/languages/
en.json
zh.json
fa.json
JSON 文件示例
{
"welcome": "欢迎使用 Finch",
"greeting": "你好,{name}!",
"items_count": "{count} 项 | {count} 项"
}
配置
FinchConfigs(
languageSource: LanguageSource.json,
languagePath: pathTo('./lib/languages'),
)
选项 2:Dart 字符串
直接在 Dart 中定义所有语言字符串:
// lib/languages/lang.dart
Map<String, Map<String, dynamic>> languageDart = {
'en': {
'welcome': 'Welcome to Finch',
'greeting': 'Hello, {name}!',
},
'zh': {
'welcome': '欢迎使用 Finch',
'greeting': '你好,{name}!',
},
};
FinchConfigs(
languageSource: LanguageSource.dart,
dartLanguages: languageDart,
)
.tr 扩展
在 Dart 代码中,对字符串使用 .tr 扩展:
var msg = 'welcome'.tr(rq);
var greeting = 'greeting'.tr(rq, params: {'name': user.name});
writeArr
对数组字符串使用 writeArr:
var features = 'features'.writeArr(rq); // List<String>
在模板中使用 $t 翻译
<h1>{{ $t('welcome') }}</h1>
<p>{{ $t('greeting', {'name': user.name}) }}</p>
切换语言
Finch 自动从 URL 路径检测语言(/zh/users、/en/users)。手动设置:
rq.setLanguage('zh');
或通过查询参数(如果已配置):
/page?lang=zh
TString
TString 支持内联多语言字符串:
TString(en: 'Hello', fa: 'سلام', nl: 'Hallo')
.get(rq.currentLanguage)