有没有办法用轨道引用yaml中的常量?

pat*_*ick 6 ruby yaml localization ruby-on-rails internationalization

有没有办法让我的en.yml文件包含一个常量?

# en.yml
foo:
  bar:
    I love BAZ so much!

# initializers/constants.rb
BAZ = "stackoverflow.com"

I18n.t("foo.bar")
->  "I love stackoverflow.com so much!"
Run Code Online (Sandbox Code Playgroud)

如果没有,有没有办法自我引用yaml文件?

foo:
  bar:
    I love *baz* so much!
baz:
  stackoverflow.com

I18n.t("foo.bar")
->  "I love stackoverflow.com so much!"
Run Code Online (Sandbox Code Playgroud)

mu *_*ort 8

I18N字符串工具支持插值:

I18n.t('foo.bar', :baz => 'stackoverflow.com')
Run Code Online (Sandbox Code Playgroud)

然后在en.yml:

foo:
  bar:
    I love %{baz} so much!
Run Code Online (Sandbox Code Playgroud)

只是不要尝试在字符串中使用%{default}%{scope}作为变量,I18n.translate将其用于其他事情:

如果翻译使用:default:scope作为插值变量,I18n::ReservedInterpolationKey则会引发异常.

这一般不适用于YAML,但您的问题似乎是关于翻译文件.

  • @patrick:这将导致各种疯狂的非本地行为和奇怪的错误.太多的魔法是一件坏事. (2认同)