我正在努力创建一个可翻译的成功通知。成功调用创建和更新操作将调用此通知。
这是我到目前为止所做的:
#config/locales/en.yml
activerecord:
models:
place: "Place"
successful:
messages:
created: "%{model} was successfully created."
updated: "%{model} was successfully updated."
#app/controllers/places_controller.rb
def create
...
format.html { redirect_to(@place, :notice => "#{t 'activerecord.successful.messages.created'}") }
问题是这会显示消息:“%{model}已成功创建。”我该如何说:“地方已成功创建。”?
答案 0 :(得分:10)
你需要使用i18n的插值函数(参见http://guides.rubyonrails.org/i18n.html#interpolation)做类似的事情
t('activerecord.successful.messages.created', :model => @my_newly_saved_object.class.model_name.human)
其中model_name
返回所创建对象的类的名称(请参阅http://api.rubyonrails.org/classes/ActiveModel/Name.html)。在此对象上调用human
将返回模型名称的i18n转换(来自范围activerecord.models。{model_name})
答案 1 :(得分:0)
您可以简单地写:
format.html do
redirect_to(
@place,
notice: t('activerecord.successful.messages.created', model: :place
)
end
(请注意,这是在places_controller.rb
文件中编写的,因此您知道它将被保存为place
,不需要@place.class.model_name.human
冗长的内容。)
这将告诉i18n使用哪个model
的翻译,现在您只需要本地化模型名称,这非常简单,只需在{{1 }},因此您的区域设置yaml文件如下所示:
model
类似地,如您在示例中看到的,您还可以指定属性名称,这将在表格,错误验证和其他地方有用。