You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 18:16:08