在導軌3應用程序上工作,我想在輸出前檢查翻譯是否存在,如果不存在,則回退到某些靜態文本。我可以做這樣的事情:Rails I18n,檢查翻譯是否存在?
if I18n.t("some_translation.key").to_s.index("translation missing")
但我覺得應該有一個比這更好的方法。如果將來rails會將「翻譯缺失」更改爲「找不到翻譯」,會怎麼樣?或者,如果出於某種奇怪的原因,該文本包含「翻譯缺失」。有任何想法嗎?
在導軌3應用程序上工作,我想在輸出前檢查翻譯是否存在,如果不存在,則回退到某些靜態文本。我可以做這樣的事情:Rails I18n,檢查翻譯是否存在?
if I18n.t("some_translation.key").to_s.index("translation missing")
但我覺得應該有一個比這更好的方法。如果將來rails會將「翻譯缺失」更改爲「找不到翻譯」,會怎麼樣?或者,如果出於某種奇怪的原因,該文本包含「翻譯缺失」。有任何想法嗎?
根據您所描述的內容,這應該工作:
I18n.t("some_translation.key", :default => "fallback text")
有關詳細信息,請參閱documentation。
使用:默認PARAM:
I18n.t("some_translation.key", :default => 'some text')
這是怎麼回事?
I18n.t('some_translation.key', :default => '').empty?
我只是覺得這感覺更好,更像沒有翻譯
警告:如果您有意有一個空字符串作爲平移值不起作用。
:default
並不總是一個解決方案。使用此爲更加先進的案件:
傭工/ 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 %>
有時候,你希望做翻譯更多的事情失敗
v = "doesnt_exist"
begin
puts I18n.t "langs.#{v}", raise: true
rescue
...
puts "Nooo #{v} has no Translation!"
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"
NB因爲你正在看父母。
事實上,有趣的是請求父鍵時,你可以得到什麼?
I18n.t('key')
# => {:special_value=>"Special value", :default_value=>"Default value"}
您還可以使用
I18n.exists?(key, locale)
I18n.exists?('do_i_exist', :en)
軌道4
我迭代在一些評審團成員的網站上。網址的最大數量是2,而default_lang是「de」。下面是我用
de:
jury:
urls:
url0: http://www.example.com
name0: example.com
url1:
name1:
en:
jury:
urls:
url0:
name0:
url1:
name1:
的YAML這是我如何檢查是否有獲得一個網址,如果它沒有爲另一種語言存在,它會回退到的I18n default_lang「德」。我使用了@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 %>
這實際上是工作。該方法沒有記錄,但只是在這裏提到:http://www.rubydoc.info/github/svenfuchs/i18n/master/I18n/Backend/Base#exists%3F-instance_method – Cristian
'I18n.exists?('key' )似乎是核心評估。如果沒有設置鍵值,我已經在helper_methods中將其用於回退操作,例如, 'title = I18n.exists?('page_title.default')? t('page_title.default'):「後備標題...」 –