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

Posted

技术标签:

【中文标题】有没有办法用rails引用yaml中的常量?【英文标题】:is there a way to reference a constant in a yaml with rails? 【发布时间】:2011-11-02 09:42:05 【问题描述】:

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

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

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

I18n.t("foo.bar")
->  "I love ***.com so much!"

?

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

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

I18n.t("foo.bar")
->  "I love ***.com so much!"

【问题讨论】:

github.com/markbates/yamler 另见:***.com/questions/41620674/use-placeholders-in-yaml 【参考方案1】:

I18N 字符串工具支持interpolation:

I18n.t('foo.bar', :baz => '***.com')

然后在en.yml:

foo:
  bar:
    I love %baz so much!

只是不要尝试将%default%scope 用作字符串中的变量,I18n.translate 会将它们用于其他用途:

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

这通常不适用于 YAML,但您的问题似乎专门针对翻译文件。

【讨论】:

我试着找到这个插值的东西,很高兴有链接。 嗯..好的。我希望有一种简单的方法可以自动插入值,而不必将它们作为参数提供给对 I18n.translate 的调用... @patrick:这会导致各种疯狂的非本地行为和奇怪的错误。太多的魔法是一件坏事。

以上是关于有没有办法用rails引用yaml中的常量?的主要内容,如果未能解决你的问题,请参考以下文章

Rails 将 YAML 加载到散列并按符号引用

有没有办法在 YAML 中对数组进行别名/锚定?

有没有办法引用从未定义/声明的C常量?

AngularJS 中有没有办法用其他常量定义常量?

在Rails 6中默认清除blobs。

兔子监听器注释从 yaml 获取队列名称