如何将翻译键作为变量来调用翻译?
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_birds
和 topic_trees
键在不同的语言环境中定义应用程序中设置了什么。
例如,如果您有一个如下所示的 en.yml 文件:
en:
topic_birds: 'Birds'
topic_trees: 'Trees'
...但是应用程序的语言环境设置为 de
,那么您将遇到您所描述的问题。
您可以使用 I18n.locale = :en
设置语言环境。
我想显示一个翻译,其中迭代中的当前项目是翻译键。
在我的模型中我有:
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_birds
和 topic_trees
键在不同的语言环境中定义应用程序中设置了什么。
例如,如果您有一个如下所示的 en.yml 文件:
en:
topic_birds: 'Birds'
topic_trees: 'Trees'
...但是应用程序的语言环境设置为 de
,那么您将遇到您所描述的问题。
您可以使用 I18n.locale = :en
设置语言环境。