Глобализация: как показать в представлении информацию о текущей локали
В настоящее время у меня есть небольшая проблема с гемом Globalize.
Я объясняю текущую ситуацию: у меня есть Модель с названием Вопрос. После его создания без каких-либо данных я добавил в модель следующие строки:
class Question < ActiveRecord::Base
translates :wording, :answer1, :answer2, :answer3, :answer4
end
Затем я создал миграцию для создания таблицы переводов
class CreateTranslationsTable < ActiveRecord::Migration
def up
Question.create_translation_table! :wording => :string, :answer1 => :string, :answer2 => :string, :answer3 => :string, :answer4 => :string
def end
def down
Question.drop_translation_table!
def end
Моя локаль по умолчанию:en. После этого я добавил некоторые данные.
Если я пойду казнить rails c
и поставить команду Question.first.wording
все отлично работает Хотя, когда я исполняю в 'rails c' I18n.locale = :es
а потом я делаю Question.first.wording
по-прежнему отображается английский текст, который я положил в начале.
Я попробовал одну вещь, которая, как мне показалось, помогла мне: я отбросил все переведенные столбцы (как указано в документации по Globalize после переноса данных. В моем случае у меня не было данных для переноса в начале). После этого я сделал откат (который вернул столбцы, которые я удалил из модели Вопроса), затем выполнил Question.first.wording
с I18n.locale = :es
получил это работает. Который означает, что Question.first.wording
возвращается nil
,
После этого я реализовал " Locale from Url Params", как указано в руководстве по Ruby on Rails, что означает первый параметр URL si ":locale". Теперь текущая проблема: представление по-прежнему отображает информацию на английском языке, когда оно должно отображаться на испанском языке, поскольку введенный мной URL-адрес был http://localhost.com/es/questions/.
Как я могу сделать так, чтобы отображать в представлении испанскую информацию?
1 ответ
Виноват. Я интерпретировал из документации, что кусок кода (в application_controller.rb), который работает для установки URL:
def default_url_options(options={})
{ locale: params[:locale] }
end
фактически установит переменную 'I18n.locale'. Я сделал следующее, чтобы обойти это (в application_controller.rb):
before_action :change_to_current_locale
def change_to_current_locale
I18n.locale = params[:locale]
end
Это заставило это работать.