我目前在使用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/,因此该视图仍然会以英语显示西班牙语时显示的信息。
如何让它在视图中显示西班牙语信息?
答案 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
这使它成功。