Рельсы i18n 4 производственная ошибка. не развитие

Я разрабатываю приложение rails 4 с поддержкой i18n. Я установил i18n gem. В моем файле application.rb у меня есть этот код

config.i18n.enforce_available_locales = true
config.i18n.available_locales = [:es]
config.i18n.default_locale = :es

В режиме разработки все работает без нареканий, но при переходе на производство все выдает "перевод отсутствует". Я пробовал разные решения, такие как написать этот код в config/ initializers/ locale.rb

I18n.load_path += Dir[Rails.root.join('config', 'locales', '*.{rb,yml}')]
I18n.default_locale = :es

А также напишите это в config/ environment.rb

I18n.reload!

Ничего не сработало. Переход в консольный режим показывает это так же, как при открытии приложения в веб-браузере.

user@opendraft:/home/user/www/awesomeapp# RAILS_ENV=development bundle exec rails c
Loading development environment (Rails 4.0.1)
irb(main):001:0> I18n.t('btn_login')
=> "Acceder"
irb(main):002:0> exit
user@opendraft:/home/user/www/awesomeapp# RAILS_ENV=production bundle exec rails c
Loading production environment (Rails 4.0.1)
irb(main):001:0> I18n.t('btn_login')
=> "translation missing: es.btn_login"
irb(main):002:0> exit

Мой файл config/ locales/ es.yml:

es:
  btn_login: "Acceder"
  reset: "Reinicializar"
  login: "Acceso"
  sign_up_candidate: "Candidatos"
  sign_up_company: "Empresas"
  sign_up_teacher: "Profesores"

2 ответа

Решение

Все переводы с config/locales/* загружаются автоматически, в соответствии с комментариями на application.rb,

У меня есть несколько приложений, использующих только :es как локаль, и единственная конфигурация в application.rb является:

config.i18n.default_locale = :es

Ничего больше.

редактировать

Проверяя мое приложение, я вижу, что

config.i18n.available_locales = [:es]

необходимо, если вы хотите удалить любую ссылку на :en локали. Вы можете проверить это с этим:

I18n.locale_available?(:en) # => false

К вашему сведению, в приложении Rails 3 используется только :es как локаль, у меня тоже есть эта строка:

I18n.config.enforce_available_locales = false

Просто чтобы избежать предупреждения об устаревании:

[deprecated] I18n.enforce_available_locales will default to true in the future.
If you really want to skip validation of your locale you can set
I18n.enforce_available_locales = false to avoid this message.

Вам нужно удалить config/initializers/locale.rb из вашего приложения. Конфигурация по умолчанию выглядит так:

# The default locale is :en and all translations from config/locales/*.rb,yml are auto loaded.
# config.i18n.load_path += Dir[Rails.root.join('my', 'locales', '*.{rb,yml}').to_s]
config.i18n.default_locale = :en

так что рельсы уже загружают все в config/locales/*.rb,yml. И я могу заверить вас, что код, который вы предоставляете, работает из коробки с конфигурацией по умолчанию.

Другие вопросы по тегам