yml with tutorial spanish rails i18n example ruby-on-rails internationalization rails-i18n

ruby-on-rails - tutorial - rails i18n with parameters



Rieles I18n, comprobar si existe traducción? (8)

Trabajando en una aplicación de Rails 3 donde quiero comprobar si existe una traducción antes de publicarla, y si no existe, retrocede a un texto estático. Yo podría hacer algo como:

if I18n.t("some_translation.key").to_s.index("translation missing")

Pero siento que debería haber una mejor manera que esa. ¿Qué pasa si los rieles en el futuro cambian la "falta de traducción" a "no se encuentra la traducción". O qué sucede si, por alguna extraña razón, el texto contiene "falta traducción". ¿Algunas ideas?


A veces quieres hacer más cosas en las traducciones falla

v = "doesnt_exist" begin puts I18n.t "langs.#{v}", raise: true rescue ... puts "Nooo #{v} has no Translation!" end


Basado en lo que has descrito, esto debería funcionar:

I18n.t("some_translation.key", :default => "fallback text")

Consulte la documentation para más detalles.


Esto es un truco pero creo que puede ser útil a veces ...

Asumiendo que tienes esto en tu archivo i18n:

en: key: special_value: "Special value" default_value: "Default value"

Usted puede hacer esto:

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: Esto solo funciona si está probando algo más que una clave raíz, ya que está mirando al padre.

De hecho, lo interesante es lo que puede obtener al solicitar una clave principal ...

I18n.t(''key'') # => {:special_value=>"Special value", :default_value=>"Default value"}


Que hay de esto

I18n.t(''some_translation.key'', :default => '''').empty?

Simplemente creo que se siente mejor, más como si no hubiera traducción

Advertencia: no funciona si intencionalmente tiene una cadena vacía como valor de traducción.


Rieles 4

Estaba iterando sobre algunos urls de miembros del jurado. La cantidad máxima de urls era 2, y default_lang era "de". Aquí está el yaml que utilicé.

de: jury: urls: url0: http://www.example.com name0: example.com url1: name1: en: jury: urls: url0: name0: url1: name1:

Aquí es cómo comprobé si había una url dada y si no existía para otro idioma, se recurriría al I18n default_lang "de". Utilicé la respuesta de @albandiguer que funcionó muy bien.

Espero que esto ayude a alguien:

<% 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 %>


También puedes usar

I18n.exists?(key, locale) I18n.exists?(''do_i_exist'', :en)


uso: param predeterminado

I18n.t("some_translation.key", :default => ''some text'')


:default no siempre es una solución. Use esto para casos más avanzados:

helpers / application.rb:

def i18n_set? key I18n.t key, :raise => true rescue false end

cualquier plantilla ERB:

<% if i18n_set? "home.#{name}.quote" %> <div class="quote"> <blockquote><%= t "home.#{name}.quote" %></blockquote> <cite><%= t "home.#{name}.cite" %></cite> </div> <% end %>