2

最终,我想使用 Inflector.parameterize 为其中包含一堆 unicode 字符的文章标题创建 slug(例如“Ḥ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"

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

"ḤellẒ no".parameterize
# => "ell-no"

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

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

"ḤellẒ no".parameterize
# => "hellz-no"

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

即使有人给出了答案,作为一个 Rails 菜鸟,我也想知道通常将第二个块之类的代码放在哪里来手动设置 I18n.backend.store_translations?

4

2 回答 2

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"

仍然回答问题的第二部分,像 I18n.backend.store_translations(:en,... 这样的代码应该在 Rails 3 应用程序中的什么位置?

于 2011-02-12T03:35:22.850 回答
1

[...] 像 I18n.backend.store_translations(:en,... 这样的代码应该存在于 Rails 3 应用程序中的什么地方?

我知道。我可能有点晚了,但我会把它放到一个初始化文件中:config/initializers/i18n.rb

于 2013-05-03T15:05:56.660 回答