Como usar os recursos de fallback do Rails i18n
-
26-09-2019 - |
Pergunta
Eu tenho esse problema i18n
activerecord:
notices:
messages:
success:
create: "Something was created"
models:
user:
success:
create: "Thanks for registration"
I18n.t("activerecord.notices.models.user.success.create")
# => "Thanks for registration"
I18n.t("activerecord.notices.models.book.success.create")
# => "translation missing: de, activerecord, notices, models, book, success, create"
Não sei por que o modelo de livro não recebe a massagem por fallback. Eu arrumei config.i18n.fallbacks = true
. Estou usando o Rails 3
Solução
Quando um :predefinição A opção é fornecida, seu valor será retornado se a tradução estiver faltando:
I18n.t :missing, :default => 'Not here'
# => 'Not here'
Mais informações aqui
Outras dicas
Eu defini em config/application.rb geralmente
config.i18n.fallbacks =[:de, :fr, :en]
Assim, você pode desacelerar a ordem do fallback.
Mas mantenha a atenção em alguns ambientes/*. RB A configuração é substituída.
Você ativou fallbacks para o seu back -end? Supondo que seja simples (baseado no YML no exemplo):
Coloque isso em um inicializador:
require "i18n/backend/fallbacks"
I18n::Backend::Simple.send(:include, I18n::Backend::Fallbacks)
No Rails 3+, isso é definido nos arquivos de configuração/ambientes:
# Enable locale fallbacks for I18n (makes lookups for any locale fall back to
# the I18n.default_locale when a translation can not be found)
config.i18n.fallbacks = true
Acredito que a melhor maneira de lidar com uma string ausente é exibir um local padrão, em vez de uma mensagem de erro.
Adicione esta linha no Application.rb ao fallback ao local em inglês.
config.i18n.fallbacks = [:en]
Caso você queira especificar fallbacks específicos de localidade, você pode usar o seguinte:
config.i18n.fallbacks = {:de => [:de,:en], :en => [:en,:de]}
Além disso, observe que você pode ativar e desativar fallbacks com base no seu ambiente. Portanto, enquanto no desenvolvimento pode fazer sentido ter um erro exibido, você pode ativar fallbacks em seu environments/production.rb
com o seguinte:
config.i18n.fallbacks = true