0

我目前对 Globalize gem 有点问题。

我解释了当前的情况:我有一个名为 Question 的模型。创建它之后,没有存储任何数据,我在模型中添加了以下几行:

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

之后,我实现了 Ruby on Rails 指南中指定的“ Locale from Url Params ”,这意味着第一个 URL 参数是 ':locale' 参数。现在是当前的问题:视图仍然以英语显示信息,但它应该以西班牙语显示,因为我输入的 URL 是http://localhost.com/es/questions/

如何让它在视图中显示西班牙语信息?

4

1 回答 1

0

我的错。我从文档中解释了用于设置 url 的代码块(在 application_controller.rb 中):

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

这使它工作。

于 2014-11-03T13:48:24.230 回答