Rails I18n, 번역이 있는지 확인 하시겠습니까?
번역을 출력하기 전에 번역이 존재하는지 확인하고, 존재하지 않는 경우 일부 정적 텍스트로 돌아가는 rails 3 앱에서 작업합니다. 다음과 같이 할 수 있습니다.
if I18n.t("some_translation.key").to_s.index("translation missing")
하지만 그보다 더 나은 방법이 있어야한다고 생각합니다. 앞으로 rails가 "번역 누락"을 "번역을 찾을 수 없음"으로 변경하면 어떻게 될까요? 또는 이상한 이유로 텍스트에 "번역 누락"이 포함되어 있으면 어떻게됩니까? 어떤 아이디어?
설명한 내용에 따라 다음과 같이 작동합니다.
I18n.t("some_translation.key", :default => "fallback text")
자세한 내용은 설명서 를 참조하십시오.
당신은 또한 사용할 수 있습니다
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?
그냥 기분이 나아진 것 같아 번역이없는 것 같아
주의 사항 : 의도적으로 번역 값으로 빈 문자열이있는 경우 작동하지 않습니다.
사용 : 기본 매개 변수 :
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
이것은 속임수이지만 가끔 유용 할 것 같습니다.
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"}
레일스 4
배심원들의 URL을 반복하고있었습니다. 최대 URL 수는 2 개이고 default_lang은 "de"입니다. 제가 사용한 얌은
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 %>
Some versions ago there is a easier way i18next documentation > API > t:
You can specify either one key as a String or multiple keys as an Array of String. The first one that resolves will be returned.
Example:
i18next.t ( ['unknown.key', 'my.key' ] ); // It will return value for 'my.key'
Also you can use Contexts. t
if not found a key into a context returns the default value.
참고URL : https://stackoverflow.com/questions/12353416/rails-i18n-check-if-translation-exists
'Programing' 카테고리의 다른 글
유효한 날짜와 일치하는 정규식 (0) | 2020.11.29 |
---|---|
Node.js에서 로컬 IP 주소를 얻으려면 어떻게해야합니까? (0) | 2020.11.29 |
확장 가능한 ListView Android에서 선택한 그룹을 제외한 모든 그룹 축소 (0) | 2020.11.29 |
메서드 선언으로 이동 (0) | 2020.11.29 |
URL 문자열이 절대적인지 상대적인지 테스트하는 방법은 무엇입니까? (0) | 2020.11.29 |