【发布时间】:2023-02-03 08:46:57
【问题描述】:
更新到 Flutter 3.7.0 后,我在构建应用程序时收到此错误消息:
[app_en.arb:scanCode_fieldNotMatched] ICU 语法错误:预期 “标识符”但发现“0”。 要匹配的字段是“{0}”
变量在 .arb 本地化文件中的写入方式似乎发生了变化。
【问题讨论】:
标签: flutter dart messageformat
更新到 Flutter 3.7.0 后,我在构建应用程序时收到此错误消息:
[app_en.arb:scanCode_fieldNotMatched] ICU 语法错误:预期 “标识符”但发现“0”。 要匹配的字段是“{0}”
变量在 .arb 本地化文件中的写入方式似乎发生了变化。
【问题讨论】:
标签: flutter dart messageformat
如果您尝试在字符串中使用字符 {、}、'(或与此相关的任何其他语法字符),那么您将不得不对它们进行转义。为此,通过添加以下内容来启用 use-escaping 标志l10n.yaml
use-escaping: true
现在使用成对的单引号来转义语法字符,例如“{”。要转义单引号,您只需将其写成双单引号,如下所示:
{
"some_text": "Using the '{' character '{isn''t}' trivial?"
}
flutter docu 中的更多详细信息。
按照this issue中的详细信息。
我发现这个错误的原因是颤振 3.7
国际化支持已经完全改进! [他们]已经完全重写了 gen-l10n 工具......
如 release post 中所述。
以前我在我的.arb文件如下
"scanCode_fieldNotMatched": "field to match is "{0}"",之后我将
{0}替换为其他值。好吧,现在
gen-l10n工具似乎将括号之间的内容作为特殊参数,并且名称"0"不被接受所以我不得不将我的字符串更改为"scanCode_fieldNotMatched": "field to match is "{value0}"",
AppLocalizations现在可以称为:AppLocalizations.of(context)!.scanCode_fieldNotMatched("something here to replace value0!")可以在此处找到有关此的更多详细信息:Placeholders, plurals, and selects in Flutter。
【讨论】:
...=|\(){}[]... 的东西,但现在不允许这样做了,因为我们在那里有 {}
就我而言,这是由于我的arb 文件中的 i18n 包的翻译字符串。我有:
"{x, plural, =1{item}, other{items}}"(在以前的版本中工作正常)
这在 Flutter 3.7 中被打破了。我的解决方案是删除逗号:
"{x, plural, =1{item} other{items}}"(适用于 Flutter 3.7)
【讨论】: