R18 I18n,检查翻译是否存在?

agm*_*eod 61 ruby-on-rails internationalization rails-i18n

在rails 3应用程序上工作,我想在输出之前检查翻译是否存在,如果它不存在则回退到某些静态文本.我可以这样做:

if I18n.t("some_translation.key").to_s.index("translation missing")
Run Code Online (Sandbox Code Playgroud)

但我觉得应该有比这更好的方法.如果将来的rails将"缺少翻译"更改为"未找到翻译",该怎么办?或者,如果出于某种奇怪的原因,文本包含"翻译缺失".有任何想法吗?

Chr*_*erg 108

根据你所描述的,这应该工作:

I18n.t("some_translation.key", :default => "fallback text")
Run Code Online (Sandbox Code Playgroud)

有关详细信息,请参阅文档


alb*_*uer 58

你也可以使用

I18n.exists?(key, locale)
I18n.exists?('do_i_exist', :en)
Run Code Online (Sandbox Code Playgroud)


Now*_*ker 34

:default并不总是一个解决方案.用于更高级的案例:

佣工/ application.rb中:

def i18n_set? key
  I18n.t key, :raise => true rescue false
end
Run Code Online (Sandbox Code Playgroud)

任何ERB模板:

<% if i18n_set? "home.#{name}.quote" %>
  <div class="quote">
    <blockquote><%= t "home.#{name}.quote" %></blockquote>
    <cite><%= t "home.#{name}.cite" %></cite>
  </div>
<% end %>
Run Code Online (Sandbox Code Playgroud)


Jer*_* F. 18

那这个呢 ?

I18n.t('some_translation.key', :default => '').empty?
Run Code Online (Sandbox Code Playgroud)

我觉得它感觉更好,更像是没有翻译

警告:如果你故意将空字符串作为翻译值,则不起作用.


小智 11

使用:默认参数:

I18n.t("some_translation.key", :default => 'some text')
Run Code Online (Sandbox Code Playgroud)