Глобализация: как показать в представлении информацию о текущей локали

В настоящее время у меня есть небольшая проблема с гемом 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

Это заставило это работать.

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