如何创建可翻译的成功通知?

时间:2011-08-17 19:00:30

标签: ruby-on-rails ruby-on-rails-3 internationalization

我正在努力创建一个可翻译的成功通知。成功调用创建和更新操作将调用此通知。

这是我到目前为止所做的:

#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}已成功创建。”我该如何说:“地方已成功创建。”?

2 个答案:

答案 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

类似地,如您在示例中看到的,您还可以指定属性名称,这将在表格,错误验证和其他地方有用。