在Rails 3应用程序上工作,我想在输出之前检查翻译是否存在,如果不存在,请回退到一些静态文本。我可以做类似的事情:
if I18n.t("some_translation.key").to_s.index("translation missing")
但是我觉得应该有比这更好的方法。如果将来Rails将“缺少翻译”更改为“找不到翻译”怎么办。或者,如果由于某种奇怪的原因,该文本包含“翻译缺失”,该怎么办?有任何想法吗?
Answers:
您也可以使用
I18n.exists?(key, locale)
I18n.exists?('do_i_exist', :en)
I18n.exists?('key')
似乎是核心评估。如果未设置键值,则已在helper_methods中将其用于后备操作,例如title = I18n.exists?('page_title.default') ? t('page_title.default') : "Fallback title..."
:default
并非总是解决方案。将其用于更高级的情况:
helpers / application.rb:
def i18n_set? key
I18n.t key, :raise => true rescue false
end
任何ERB模板:
<% if i18n_set? "home.#{name}.quote" %>
<div class="quote">
<blockquote><%= t "home.#{name}.quote" %></blockquote>
<cite><%= t "home.#{name}.cite" %></cite>
</div>
<% end %>
这是一个把戏,但我认为有时可能有用。
假设您的i18n文件中包含以下内容:
en:
key:
special_value: "Special value"
default_value: "Default value"
您可以这样做:
if I18n.t('key').keys.include?(:special_value)
I18n.t('key.special_value')
else
I18n.t('key.default_value')
end
# => "Special value"
if I18n.t('key').keys.include?(:unknown_value)
I18n.t('key.special_value')
else
I18n.t('key.default_value')
end
# => "Default value"
注意:这仅在您正在测试除根密钥以外的任何东西的情况下才有效,因为您正在查看父项。
实际上,有趣的是,当您请求父密钥时可以得到什么...
I18n.t('key')
# => {:special_value=>"Special value", :default_value=>"Default value"}
I18n.t('key.special_value', default: I18n.t('key.default_value'))
滑轨4
我正在遍历陪审团成员的一些网址。网址的最大数量为2,default_lang为“ de”。这是我用过的yaml
de:
jury:
urls:
url0: http://www.example.com
name0: example.com
url1:
name1:
en:
jury:
urls:
url0:
name0:
url1:
name1:
这是我检查是否提供了url的方法,如果不存在另一种语言,则将回退到I18n default_lang“ de”。我使用了@albandiguer的答案,效果很好。
我希望这可以帮助别人:
<% 2.times do |j| %>
<% if I18n.exists?("jury.urls.url#{j}", "de") &&
I18n.exists?("jury.urls.name#{j}", "de") %>
<%= "<br/>".html_safe if j == 1%>
<a href="<%= t("jury.urls.url#{j}") %>" target="_blank">
<%= t("jury.urls.name#{j}") %>
</a>
<% end %>
<% end %>
以前的某些版本有一种更简单的方法,即i18next文档> API> t:
您可以将一个键指定为字符串,也可以将多个键指定为字符串数组。第一个解决的将被返回。
例:
i18next.t ( ['unknown.key', 'my.key' ] ); // It will return value for 'my.key'
您也可以使用Contexts。t
如果未找到,则指向上下文的键将返回默认值。