Rails 3アプリで作業して、出力する前に翻訳が存在するかどうかを確認し、存在しない場合は静的テキストにフォールバックします。
if I18n.t("some_translation.key").to_s.index("translation missing")
しかし、私はそれよりも良い方法があるべきだと感じています。 Rails将来、「翻訳が見つかりません」が「翻訳が見つかりません」に変更されます。または、何らかの奇妙な理由でテキストに「翻訳が見つかりません」が含まれる場合はどうなりますか?
あなたが説明したことに基づいて、これは動作するはずです:
I18n.t("some_translation.key", :default => "fallback text")
詳細については documentation をご覧ください。
使用することもできます
I18n.exists?(key, locale)
I18n.exists?('do_i_exist', :en)
: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.t('some_translation.key', :default => '').empty?
翻訳がないのように気分が良くなったと思う
警告:変換値として意図的に空の文字列を使用している場合は機能しません。
:default param:を使用します
I18n.t("some_translation.key", :default => 'some text')
時々、翻訳でもっとしたいことがありますが失敗します
v = "doesnt_exist"
begin
puts I18n.t "langs.#{v}", raise: true
rescue
...
puts "Nooo #{v} has no Translation!"
end
Rails 4
Ju審員のURLを何度も繰り返していました。 URLの最大数は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 %>
これはトリックですが、時々役立つかもしれません...
国際化ファイルにこれがあると仮定します:
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"
NB:これは、親を見ているため、ルートキー以外をテストする場合にのみ機能します。
実際、面白いのは、親キーを要求するときに取得できるものです...
I18n.t('key')
# => {:special_value=>"Special value", :default_value=>"Default value"}
以前のバージョンでは、もっと簡単な方法がありました i18next documentation> API> t :
1つのキーを文字列として指定することも、複数のキーを文字列の配列として指定することもできます。最初に解決されるものが返されます。
例:
i18next.t ( ['unknown.key', 'my.key' ] ); // It will return value for 'my.key'
また、 Contexts を使用できます。 t
が見つからない場合、keyto acontextデフォルト値を返します。