如何修复 ICU Lexin 错误:Flutter 中出现意外字符

Dec*_*oth 7 dart flutter flutter-localizations

我正在使用flutter_localizations本地化我的应用程序。

自从更新到Flutter 3.7以来,我收到此错误:

ICU 语法错误:应为“标识符”,但找到了“}”。

这显然 =|(){}[]

This =|\(){}[] obviously是我的.arb文件中的文本。

我知道花括号“{}”有特殊含义,应该转义,但我找不到正确转义它们的方法,有人设法这样做吗?


重现该问题的一种简单方法是按照此处添加本地化支持的步骤操作,然后编写包含字符“”的任何内容,而不是hello world{字符串。


PS: Github 上有一个相关的问题尚未解决。请务必去那里检查更新!

小智 5

有一个转义语法已实现,但默认情况下未启用,因为它是一项新功能,与现有 ICU 消息字符串不完全向后兼容。

首先,将以下内容添加到您的l10n.yaml文件中:

use-escaping: true
Run Code Online (Sandbox Code Playgroud)

然后,这将允许您将部分字符串用单引号括起来,以忽略单引号内的任何语法;要正常使用单引号作为字符而不是转义符,请使用双单引号。例如,

{
  message: "This '{isn''t}' obvious"
}
Run Code Online (Sandbox Code Playgroud)

变成

String get message => "This {isn't} obvious";
Run Code Online (Sandbox Code Playgroud)

有关语法的信息,请参阅此处。稍后我会将其添加到文档中。