如何在Rails中使用控制器中的I18n

Ivá*_*ero 12 controller ruby-on-rails internationalization rails-i18n

我有一个PetsController,其中设置了一条flash消息.像这样的东西:

class PetsController

  ...

  def treat_dog
    #do somthing
    flash[:success] = 'Your dog is being treated.'
  end

  ...

end
Run Code Online (Sandbox Code Playgroud)

此控制器属于Admin,因此它位于:app/controllers/admin/pets_controller.rb.我将使用I18n,所以我用控制器替换了字符串t('controllers.admin.pet.treated'),然后,我写了这个yml:

en:
  controllers:
    admin:
      pet:
        treated: "Your dog is being treated."
Run Code Online (Sandbox Code Playgroud)

位于:config/locales/controllers/admin/pet/en.yml它没有用.我试图找到它config/locales/controllers/admin/pets/en.yml,config/locales/controllers/admin/en.yml config/locales/controllers/en.yml 并且没有一个工作,没有找到翻译.

如何使用此控制器的翻译?

Mah*_*esh 18

在控制器中你可以像这样使用它

I18n.t 'controllers.admin.pet.treated'
Run Code Online (Sandbox Code Playgroud)

  • 如指南http://guides.rubyonrails.org/i18n.html#lazy-lookup中所述,您可以通过使用类似“ t('。aged')这样的帮助程序的惰性查找来简化此操作。 (2认同)
  • 请记住, I18n.t 'key' 和 t('key') 都可以在控制器中工作,但只有 t('key') 助手支持通过 t('.key') 快捷方式进行延迟加载。 (2认同)