我有一个PetsController,其中设置了flash消息。像这样:
class PetsController
...
def treat_dog
#do somthing
flash[:success] = 'Your dog is being treated.'
end
...
end
此控制器属于Admin,因此它位于:app/controllers/admin/pets_controller.rb
。我将使用I18n,所以我用t('controllers.admin.pet.treated')
替换了控制器中的字符串,然后,我写了这个yml:
en:
controllers:
admin:
pet:
treated: "Your dog is being treated."
位于: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
并且没有一个工作,没有找到翻译。
如何使用此控制器的翻译?
答案 0 :(得分:14)
在控制器中你可以像这样使用它
I18n.t 'controllers.admin.pet.treated'
答案 1 :(得分:0)
def treat_dog
#do somthing
flash[:success] = t('controllers.admin.pet.treated')
end
答案 2 :(得分:0)
将它放入config/locales/en.yml
并且它应该可以工作(您可能需要重新启动服务器)。
本指南应该有助于清除I18n的头脑。我将链接到相关部分,但请完整阅读:http://guides.rubyonrails.org/i18n.html#adding-translations
如果您坚持使用嵌套文件,则需要启用它。文档说:
Rails中的默认语言环境加载机制不会在嵌套字典中加载语言环境文件,就像我们在这里一样。因此,要实现这一点,我们必须明确告诉Rails进一步:
# config/application.rb
config.i18n.load_path += Dir[Rails.root.join('config', 'locales', '**', '*.{rb,yml}')]
答案 3 :(得分:0)
In callback it should be:
add_breadcrumb proc{ I18n.t('home_page') }, :root_path