全局化:如何在视图中显示当前的区域设置信息

时间:2014-11-03 12:40:01

标签: ruby-on-rails-4 globalize

我目前在使用Globalize gem时遇到了一些问题。

我解释目前的情况: 我有一个叫做问题的模型。在创建它之后,没有存储任何数据,我将以下行添加到模型中:

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'参数。 现在当前的问题:由于我输入的网址是http://localhost.com/es/questions/,因此该视图仍然会以英语显示西班牙语时显示的信息。

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

1 个答案:

答案 0 :(得分: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

这使它成功。