【问题标题】:How can I call a translation with the translation key being a variable?如何使用翻译键作为变量来调用翻译?
【发布时间】:2021-01-20 09:57:27
【问题描述】:

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

在我的模型中,我有:

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

我的代码返回:

Topic Birds
Topic Trees

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

【问题讨论】:

  • 什么不起作用? yml 应该(按照约定)由语言命名,例如en.yml,并且文件应该完全嵌套在语言键中。 en:,以及嵌套在该键/对象中的所有内容。 (所以YML中全限定翻译key是en.topic_birds,调用是t('topic_birds'),而I18n.locale = :en
  • @wyattisimo 打败了我 :)。他准确地回答了我要做什么!

标签: ruby iteration translation


【解决方案1】:

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

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

<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 设置语言环境。

【讨论】:

  • 你让我走上了正轨,语言文件中的键有错字,呃。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-11-09
  • 2019-07-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-08
  • 1970-01-01
相关资源
最近更新 更多