Plu*_*Dev 4 variables internationalization arb dart flutter
我实现了 Flutter 的新(官方)本地化(https://pascalw.me/blog/2020/10/02/flutter-1.22-internationalization.html),一切正常,除了我不知道如何获取变量键的翻译。
翻译位于 ARB 文件中,但我如何访问它?
通常我使用 访问翻译Translations.of(context).formsBack,但现在我想获得 的翻译value["labels"]["label"]。
类似的东西Translations.of(context).(value["labels"]["label"])当然行不通。
小智 5
我认为这是不可能的gen_l10n。生成的代码gen_l10n如下所示(有些缩写):
/// The translations for English (`en`).
class TranslationsEn extends Translations {
TranslationsEn([String locale = 'en']) : super(locale);
@override
String get confirmDialogBtnOk => 'Yes';
@override
String get confirmDialogBtnCancel => 'No';
}
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,它不会生成任何代码来执行动态查找。
对于大多数情况,这样的代码生成是一个很好的优势,因为您可以获得自动完成和类型安全,但这确实意味着适应这些类型的动态用例更加困难。
你唯一能做的就是手动编写一个查找表,或者选择另一个支持动态查找的 i18n 解决方案。
查找表可能看起来像这样。只需确保始终传入当前构建上下文,以便 l10n 代码可以查找当前语言环境。
class DynamicTranslations {
String get(BuildContext context, String messageId) {
switch(messageId) {
case 'confirmDialogBtnOk':
return Translations.of(context).confirmDialogBtnOk;
case 'confirmDialogBtnCancel':
return Translations.of(context).confirmDialogBtnCancel;
default:
throw Exception('Unknown message: $messageId');
}
}
}
Run Code Online (Sandbox Code Playgroud)