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

问题描述 投票:3回答:2

我正在尝试创建一个可翻译的成功通知。成功调用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}已成功创建。”。我该怎么说:“地方成功创造了。”?

ruby-on-rails ruby-on-rails-3 internationalization
2个回答
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转换(来自scope activerecord.models。{model_name})


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的翻译,现在你只需要本地化模型名称,这非常简单,通过在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

同样,正如您在示例中所看到的,您还可以指定在表单,错误验证和其他位置中有用的属性名称。

© www.soinside.com 2019 - 2024. All rights reserved.