一直在迁移到 Flutter 2,并且正在将我们的翻译直接转换为 .arb 格式,正如现在建议的那样。但是遇到了一个问题,即生成的 l10n 翻译文件无法理解何时应该使用类型double
,而是使用int
,这在代码中使用时会导致类型错误。似乎没有任何方法可以指定特定的占位符替换将是 adouble
而不是int
.
ARB 翻译文件
"hours": "{hours,plural, =1{Hour}other{Hours}}",
"@hours": {
"placeholders": {
"hours": {}
}
},
尝试将类型信息添加到占位符,但似乎对生成影响不大(使用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)
}
}
},
生成 l10n translations.dart
/// In en, this message translates to:
/// **'{hours,plural, =1{Hour}other{Hours}}'**
String hours(int hours); <========== THIS NEEDS TO BE A DOUBLE
代码使用
AppLocalizations.of(context)!.hours(1.0)
在以前使用 Intl 库的方法中(这仍然是一个选项,但ARB 生成工具是陈旧的和/或多阶段的,因此试图移开),这相当容易,因为我们控制了类型
String HOURS([double hours = 0]) => Intl.plural(
hours,
one: 'Hour',
other: 'Hours',
name: 'HOURS',
args: <Object>[hours],
locale: localeName,
);
我们当然可以在我们的翻译中有多个字符串,并手动处理复数,但鉴于复数 in 的力量intl
,感觉这应该是可能的吗?有什么建议吗?