我正在尝试创建一个可翻译的成功通知。成功调用create和update动作将调用此通知。
这是我到目前为止:
#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}已成功创建。”。我该怎么说:“地方成功创造了。”?
你需要使用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转换(来自scope activerecord.models。{model_name})
你可以简单地写:
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
的翻译,现在你只需要本地化模型名称,这非常简单,通过在model
中添加activerecord
部分来完成,所以你的语言环境yaml文件将如下所示:
activerecord:
successful:
messages:
created:
enqueued: "La creazione del %{model} è stata messa in coda con successo"
error_header_message:
one: Un errore ha proibito il salvataggio di questo %{model}
other: "%{count} errori hanno proibito il salvataggio di questo %{model}"
models:
article: articolo
attributes:
article:
user_id: Autore
title: Titolo
published: Pubblicato
text: Testo
同样,正如您在示例中所看到的,您还可以指定在表单,错误验证和其他位置中有用的属性名称。