如何在Rails 3应用程序中自定义音译?

Jin*_*Kim 2 unicode inflector ruby-on-rails-3

最后,我想使用Inflector.parameterize为文章标题创建slug,其中包含一堆unicode字符(例如"ḤellẒno"=>"hellz-no").根据http://api.rubyonrails.org/classes/ActiveSupport/Inflector.html#method-i-transliterate,它说它们将它们放在locales/en.yml文件中.

# Store the transliterations in locales/en.yml
i18n:
  transliterate:
    rule:
      ?: "h"
      ?: "z"
Run Code Online (Sandbox Code Playgroud)

我试过了,但以下不起作用:

"?ell? no".parameterize
# => "ell-no"
Run Code Online (Sandbox Code Playgroud)

但是,当我像第二段建议的那样在Ruby中更改它时,它可以工作.

I18n.backend.store_translations(:en, :i18n => {
   :transliterate => {
     :rule => {
       "?" => "H",
       "?" => "Z"
     }
   }
})

"?ell? no".parameterize
# => "hellz-no"
Run Code Online (Sandbox Code Playgroud)

我想我想知道为什么在locales/en.yml中放置自定义音译不起作用.

即使有人给出答案,作为一个Rails noob,我也想知道通常把代码放在第二个块的位置来手动设置I18n.backend.store_translations?

Jin*_*Kim 5

呃,我有一部分答案.与http://api.rubyonrails.org/classes/ActiveSupport/Inflector.html#method-i-transliterate上的文档不同,yml文件仍应指定语言 - 即de:

# Store the transliterations in locales/de.yml
de:
  i18n:
    transliterate:
      rule:
        ü: "ue"
        ö: "oe"
Run Code Online (Sandbox Code Playgroud)

仍然回答问题的第二部分,I18n.backend.store_translations(:en,...等代码应该放在Rails 3应用程序中?