如何将翻译键作为变量来调用翻译?

How can I call a translation with the translation key being a variable?

我想显示一个翻译,其中迭代中的当前项目是翻译键。

在我的模型中我有:

def self.topics                                                                                                                   
    [ "topic_birds", "topic_trees"  ]
end

在我看来:

Book.topics.each do |topic|
    ...
    <p><%= t(topic) %></p>
    ...
end

在我的 YML 文件中

topic_birds: 'Birds'
topic_trees: 'Trees'

而不是返回:

Birds
Trees

我的代码returns:

Topic Birds
Topic Trees

所以翻译函数似乎没有在我的 each 语句中正确接受或解释变量 topic。相反,它 returns 密钥的格式化版本(大写首字母和空格)而不是 YML 文件的翻译。

当在您的语言 yml 文件中找不到指定的键时,Rails 翻译助手的默认行为是使用指定的键作为值。这似乎就是您遇到的情况。

如果您检查视图的 HTML 输出,您会看到“已翻译”值包含在一个具有特殊 translation_missing class 和标题的元素中,例如:

<span class="translation_missing" title="translation missing: en.topic_birds">Topic Birds</span>

提示: 您可以通过设置 ActionView::Base.raise_on_missing_translations = true.

导致缺少翻译引发错误

根据您提供的信息,我猜测语言 yml 文件的结构正确,因此可能的问题是 topic_birdstopic_trees 键在不同的语言环境中定义应用程序中设置了什么。

例如,如果您有一个如下所示的 en.yml 文件:

en:
  topic_birds: 'Birds'
  topic_trees: 'Trees'

...但是应用程序的语言环境设置为 de,那么您将遇到您所描述的问题。

您可以使用 I18n.locale = :en 设置语言环境。