/ / Como configurar aliases de localidade usando i18n & rails? - ruby-on-rails, trilhos-i18n

Como configurar aliases de localidade usando o i18n & rails? - ruby-on-rails, trilhos-i18n

Eu estou trabalhando em um aplicativo de trilhos (3.2.13) que está sendo traduzido em várias línguas, incluindo (um dos 3 sabores disponíveis de) norueguês. Em páginas públicas, o aplicativo usa as configurações de idioma do navegador para definir a localidade.

A maioria dos navegadores oferece 3 códigos de acesso noruegueses separados: no, nb E nn. As traduções que temos estão em nb, mas acho que seria melhor se no E nn também padrão para nb. Dessa forma, se as preferências de idioma do navegador de um usuário estiverem definidas como no então en, o aplicativo tentaria fornecer nb Primeiro norueguês, em vez de pular direto para o inglês.

É possível configurar uma lista de "aliases de idioma" para a gem i18n, algo assim?

 config.i18n.available_locales = [:sv, :en, :nb, :da, :fi]
config.i18n.aliased_locales = [:nb <= :no, :nb <= :nn]

Respostas:

3 para resposta № 1

Resposta curta

Dê uma olhada nos fallbacks

Crie um arquivo em initializers gostar i18n_fallbacks.rb

config.i18n.fallbacks = {:no => [:nb], :nn => [:nb]}

Aqui a referência

Coisas relacionadas

Você pode até definir vários fallbacks e eles serão feitos na mesma ordem especificada:

por exemplo:

config.i18n.default_locale = :de
config.i18n.fallbacks = {:de => [:en,:es]}

de.yml

  :de:
greeting: Hallo

en.yml

  :en:
foo: bar

es.yml

  :es:
bar: baz

Você recebe o seguinte:

I18n.t :greeting # found in de.yml, no fallback
# => "Hallo"

I18n.t :foo # not in :de, try in :en and found
# => "bar"

I18n.t :bar # not in :de, try in :en and in :es
# => "baz"

I81n.t :other # not found anywhere, note the message delivers not found for the current locale:
# => "translation missing: de.other"

0 para resposta № 2

No mais recente i18n gem (0.7.0) eu achei necessário definir locais de fallback como este (em config/application.rb):

# Custom I18n fallbacks
config.after_initialize do
I18n.fallbacks = I18n::Locale::Fallbacks.new(at: :"de-DE", ch: :"de-DE", gb: :"en-US")
end

Você também precisa definir config.i18n.fallbacks = true Em tudo config/environments/*.rb arquivos.