I18N键用于模块中分组的导轨型号

Dor*_*ian 15 ruby-on-rails internationalization ruby-on-rails-3 ruby-on-rails-3.1

我有几个模型分组在这样的模块中:

  #/app/models/blobs/small_text.rb
  class Blobs::SmallText < ActiveRecord::Base

        #.. class implementation

  end
Run Code Online (Sandbox Code Playgroud)

我想用法语将人类名称设置为"Texte Court":

  I18n.locale = "fr"
  Blobs::SmallText.model_name.human # should return "Texte Court" 
Run Code Online (Sandbox Code Playgroud)

我遇到了类定义的模块部分以及它应该如何包含在语言环境文件中的问题.我在我的语言环境文件中尝试了几种组合但是没有用.以下是我尝试过的一些组合:


  # /config/locales/models/blobs.fr.yml

  # first attempt (does not work)
  fr:
    activerecord:
      models:
         blobs_small_text: "Texte Court"
Run Code Online (Sandbox Code Playgroud)
  # /config/locales/models/blobs.fr.yml   
  # second attempt(does not work) 
  fr:
    activerecord:
      models:
         blobs:
           small_text: "Texte Court"
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?感谢:D.

Dor*_*ian 35

好.我发现了答案.当您不知道类密钥时,只需在rails控制台中运行以下指令:

 Blobs::SmallText.model_name.i18n_key  # this returns :"blobs/small_text"
Run Code Online (Sandbox Code Playgroud)

现在我可以相应地更新我的语言环境文件:

# /config/locales/models/blobs.fr.yml
# last attempt (it works)
fr:
  activerecord:
    models:
       blobs/small_text: "Texte Court"
Run Code Online (Sandbox Code Playgroud)

所以现在它有效.但是,它只是我或这个命名约定不尊重Ruby on Rails中的一般命名约定?

  • 调用`i18n_key`是一个很棒的技巧.我打开blobs/small_text命名空间的票证,这肯定应该是blobs.small_text (4认同)