在I18n插值中使用另一个I18n键

Aar*_*ron 29 interpolation ruby-on-rails internationalization rails-i18n

这可能是I18n-ception,但我可以说我有一个en.yml文件如下

en:
  my_var: Foo
  my_message: "This is a message where I'd like to interpolate I18n's %{my_var}"
Run Code Online (Sandbox Code Playgroud)

有没有办法向I18n表明%{my_var}应该是my_var关键en.yml

我知道我可以通过做类似的事情来实现它

I18n.t 'my_message', :my_var => I18n.t('my_var')
Run Code Online (Sandbox Code Playgroud)

但我希望I18n有办法自我引用键.

tig*_*ish 35

这实际上是一个很常见的问题,但简短的答案是否定的,不幸的是,这是不可能的:(

  • 不幸的是,这是正确的答案.有关@Aaron的参考,请参阅SO问题/答案[此处](http://stackoverflow.com/q/13055753/567863)和[此处](http://stackoverflow.com/q/13937891/567863). (4认同)

odk*_*odk 5

目前我正在努力争取......最后我创建了一个自定义 yaml 类型。

在初始化部分。

Psych.add_builtin_type('i18n') { |_type, value|
  ->(_key, _options) do
    value.gsub(/%\{([\w.]+)\}/) do |match|
      key = $1.to_sym
      if I18n.exists?(key)
        I18n.t(key)
      else
        match
      end
    end
  end
}
I18n.reload!
Run Code Online (Sandbox Code Playgroud)

在 en.yml 中

en:
  my_var: Foo
  my_message: !!i18n "This is a message where I'd like to interpolate I18n's %{my_var}"
Run Code Online (Sandbox Code Playgroud)

!!i18n应用自定义内置类型。