Flutter Intl.message方法的参数顺序如何确定?
Flutter Intl.message 参数顺序问题
问题背景
我尝试直接使用Intl.message方法,实现类似Flutter Intl包自动生成L10n代码的定制化多语言功能。现有两份ARB文件,其中person和food参数在中日两种语言的文案里出现顺序完全相反:
日文ARB文件(intl_ja.arb)
{ "@@locale": "ja", "text1": "{food}を食べるのは{person}", "@text1": { "placeholder": { "food": { "type": "string" }, "person": { "type": "string" } } } }
英文ARB文件(intl_en.arb)
{ "@@locale": "en", "text1": "{person} eats {food}", "@text1": { "placeholder": { "food": { "type": "string" }, "person": { "type": "string" } } } }
代码与异常现象
我用以下代码获取本地化字符串:
final translated = Intl.message('', name: 'text1', desc: '', args: ['banana', 'gorilla'])
实际结果完全不符合预期:
- 英文显示:
banana eats gorilla(预期应为gorilla eats banana) - 日文显示:
gorillaを食べるのはbanana(预期应为bananaを食べるのはgorilla)
疑问点
Intl.message的args参数顺序是由什么规则定义的?- 如果说参数顺序是基于ARB文件里的参数出现顺序,为什么实际生效的是英文ARB的顺序?
- 我没找到类似iOS本地化中的基准语言优先级设置,Flutter Intl这部分的逻辑是怎样的?
补充配置信息(Update1)
我的l10n.yaml配置内容如下:
arb-dir: lib/l10n template-arb-file: intl_ja.arb output-localization-file: l10n.dart output-class: L10n
内容的提问来源于stack exchange,提问作者Takeshi Yokemura
相关产品推荐
相关产品推荐

