Cra*_*ees 5 dart flutter flutter-intl
已转移到 Flutter 2,并正在将我们的翻译直接转移为 .arb 格式,正如现在建议的那样。然而,遇到了一个问题,即生成的本地化翻译文件无法理解何时应该使用类型double,而是使用int,这会在代码中使用时导致类型错误。似乎没有任何方法可以指定特定占位符替换是 adouble而不是int。
ARB 翻译文件
"hours": "{hours,plural, =1{Hour}other{Hours}}",
"@hours": {
"placeholders": {
"hours": {}
}
},
Run Code Online (Sandbox Code Playgroud)
尝试向占位符添加类型信息,但似乎对生成影响不大(使用flutter gen-l10n脚本)
"hours": "{hours,plural, =1{Hour}other{Hours}}",
"@hours": {
"placeholders": {
"hours": {
"type: "double" <========== THIS SEEMS TO HAVE NO IMPACT (and/or may not be valid)
}
}
},
Run Code Online (Sandbox Code Playgroud)
生成本地化翻译.dart
/// In en, this message translates to:
/// **'{hours,plural, =1{Hour}other{Hours}}'**
String hours(int hours); <========== THIS NEEDS TO BE A DOUBLE
Run Code Online (Sandbox Code Playgroud)
代码使用
AppLocalizations.of(context)!.hours(1.0)
Run Code Online (Sandbox Code Playgroud)
在之前使用 Intl 库的方法中(这仍然是一个选项,但ARB 生成工具已经过时和/或多阶段,因此尝试放弃),这相当容易,因为我们控制了类型
String HOURS([double hours = 0]) => Intl.plural(
hours,
one: 'Hour',
other: 'Hours',
name: 'HOURS',
args: <Object>[hours],
locale: localeName,
);
Run Code Online (Sandbox Code Playgroud)
我们当然可以在翻译中使用多个字符串,并手动处理复数,但考虑到 中复数的力量intl,感觉这应该是可能的?有什么建议吗?
当您需要占位符类型为 时double,还必须添加该format参数。一些可能的值:“compact”、“currency”、“decimalPattern”(最通用)。
您可以在这里找到更多内容:https://localizely.com/flutter-arb/
本地化示例:
"validation_errors_min_value": "The value must be greater than {min}",
"@validation_errors_min_value": {
"placeholders": {
"min": {
"type": "double",
"format": "decimalPattern"
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5151 次 |
| 最近记录: |