Ruby on rails 仅使用默认语言环境的Rails模型 我有一个带有自定义验证的模型。我返回验证 使用AJAX将视图转换为JSON时出错 我需要显示错误 具有正确区域设置的消息,但消息 以英语(默认)显示每个区域设置。 当我返回I18n.locale时 无论设置的区域设置是什么,它都会显示“en”,而不是消息(用于故障排除) 控制器或视图中的I18n按预期工作,此问题 仅在模型中发生 我所做的关于区域设置的唯一配置是在应用程序配置中设置默认区域设置,并在应用程序控制器中的每个操作之前设置区域设置 我注意到的另一件事是,当我使用root_path而不提供区域设置时,它使用的是默认区域设置,而不是像应该的那样保留当前区域设置。我认为这些问题是相互关联的
编辑:Ruby on rails 仅使用默认语言环境的Rails模型 我有一个带有自定义验证的模型。我返回验证 使用AJAX将视图转换为JSON时出错 我需要显示错误 具有正确区域设置的消息,但消息 以英语(默认)显示每个区域设置。 当我返回I18n.locale时 无论设置的区域设置是什么,它都会显示“en”,而不是消息(用于故障排除) 控制器或视图中的I18n按预期工作,此问题 仅在模型中发生 我所做的关于区域设置的唯一配置是在应用程序配置中设置默认区域设置,并在应用程序控制器中的每个操作之前设置区域设置 我注意到的另一件事是,当我使用root_path而不提供区域设置时,它使用的是默认区域设置,而不是像应该的那样保留当前区域设置。我认为这些问题是相互关联的,ruby-on-rails,ruby,model-view-controller,model,internationalization,Ruby On Rails,Ruby,Model View Controller,Model,Internationalization,编辑: 当我在controller#create中打印locale参数时,得到nil。由于某种原因,我根本没有locale参数 模型文件: validate :relevant_date_time def relevant_date_time errors.add(:date_error, I18n.t("validations.date_error")) unless date_time_is_relevant? end 应用程序控制器: before_action :set_
- 当我在controller#create中打印locale参数时,得到nil。由于某种原因,我根本没有locale参数
validate :relevant_date_time
def relevant_date_time
errors.add(:date_error, I18n.t("validations.date_error")) unless date_time_is_relevant?
end
应用程序控制器:
before_action :set_locale
def set_locale
I18n.locale = params[:locale] || I18n.default_locale
end
# e.g. app/controllers/users_controller.rb
# user_params = { email: test@mail.com, password: 12345678 }
User.new(user_params.merge(locale: I18n.locale))
def default_url_options(options={})
{ locale: I18n.locale }
end
我忘了什么吗
我审查的资料:
attr\u accessor:locale
,然后在控制器中创建/更新区域设置时传递区域设置:
before_action :set_locale
def set_locale
I18n.locale = params[:locale] || I18n.default_locale
end
# e.g. app/controllers/users_controller.rb
# user_params = { email: test@mail.com, password: 12345678 }
User.new(user_params.merge(locale: I18n.locale))
def default_url_options(options={})
{ locale: I18n.locale }
end
然后,在验证方法中,您可以使用locale
访问当前区域设置,因此您只需将其传递给I18n.t
:
errors.add(:date_error, I18n.t("validations.date_error", locale: locale)) unless date_time_is_relevant?
如果在application_controller.rb上设置locale,它将只在所有控制器和视图中具有作用域,而不在模型中 所以您也必须在模型内部设置区域设置。和你在控制器上做的一样 At控制器
Model.new(params.merge(locale: I18n.locale))
内部模型
attr_accessible :locale
before_validation() do
I18n.local = locale
end
def relevant_date_time
errors.add(:date_error, I18n.t("validations.date_error")) unless date_time_is_relevant?
end
通过在应用程序控制器中添加以下方法解决:
before_action :set_locale
def set_locale
I18n.locale = params[:locale] || I18n.default_locale
end
# e.g. app/controllers/users_controller.rb
# user_params = { email: test@mail.com, password: 12345678 }
User.new(user_params.merge(locale: I18n.locale))
def default_url_options(options={})
{ locale: I18n.locale }
end
现在就试过了,因为某些原因它仍然显示英语!它不起作用。仍然显示区域设置为en。由于某些原因,我的控制器中根本没有locale参数!你知道为什么会这样吗?