Рельсы 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. И я могу заверить вас, что код, который вы предоставляете, работает из коробки с конфигурацией по умолчанию.