9

只是在没有 Rails 环境的情况下无法使 I18n 工作:


irb> require 'i18n'
=> true
irb> I18n.load_path=Dir['/usr/lib/ruby/gems/1.9.1/gems/rails-i18n-0.6.6/rails/locale/en.yml']
=> ["/usr/lib/ruby/gems/1.9.1/gems/rails-i18n-0.6.6/rails/locale/en.yml"]
irb> I18n.load_path+=Dir['/usr/lib/ruby/gems/1.9.1/gems/rails-i18n-0.6.6/rails/locale/sk.yml']
=> ["/usr/lib/ruby/gems/1.9.1/gems/rails-i18n-0.6.6/rails/locale/en.yml", "/usr/lib/ruby/gems/1.9.1/gems/rails-i18n-0.6.6/rails/locale/sk.yml"]
irb> I18n.locale=:sk
=> :sk
irb> I18n.default_locale=:sk
=> :sk
irb> I18n.l Time.now
I18n::MissingTranslationData: translation missing:
sk.time.formats.default
  from /usr/lib/ruby/gems/1.9.1/gems/i18n-0.6.1/lib/i18n.rb:289:in
`handle_exception'
  from /usr/lib/ruby/gems/1.9.1/gems/i18n-0.6.1/lib/i18n.rb:159:in
`translate'
  from
/usr/lib/ruby/gems/1.9.1/gems/i18n-0.6.1/lib/i18n/backend/base.rb:55:in
`localize'
  from /usr/lib/ruby/gems/1.9.1/gems/i18n-0.6.1/lib/i18n.rb:236:in
`localize'
  from (irb):11
  from /usr/bin/irb:12:in `<main>'
irb>

我究竟做错了什么 ?sk.yml 确实包含 sk.time.formats.default 元素!

此外,I18n 的默认 load_path(s) 是什么,所以我不会费心为每个翻译 YAML/Ruby 文件提供完整路径?

谢谢。

4

3 回答 3

17

您已经使用 设置了语言定义的搜索路径I18n.load_path

看来,这在使用rails时就足够了。如果没有 rails,您还必须使用I18n.backend.load_translations.

总之,您需要两个步骤:

I18n.load_path = Dir['*.yml']
I18n.backend.load_translations

字典是用语言键定义的,例如:

en:
  hello: "Hello world"

如果你喜欢定义你的en.yml无语言键,你可以通过加载它们

I18n.backend.store_translations(:en , YAML.load(File.read('en.yml')))

(您也可以使用 here-document 或直接使用 ruby​​-hash)。

于 2013-01-02T21:15:55.993 回答
3

似乎您的 load_path 设置不正确。

尝试包含整个目录,如果成功,您应该通过调用I18n.load_path.

I18n.load_path = Dir['/usr/lib/ruby/gems/1.9.1/gems/rails-i18n-0.6.6/rails/locale/*yml']

直接设置文件路径可能会有点混乱,因为如果文件不存在,I18n 不会引发错误。

作为旁注,我建议不要包含来自 rails-i18n gem 的翻译,因为路径可能因一台机器与另一台机器不同,具有不同的 ruby​​ 版本等。项目本地的文件会更好。

于 2012-10-17T09:38:29.247 回答
0

您需要安装rails-i18ngem 来获取本地化数据。

使用此 gem 安装,可以使用以下命令在 sk 本地化中打印月份名称:

require 'rails-i18n'
I18n.load_path += $LOADED_FEATURES
                    .select  {|f| "rails-i18n.rb".in? f }
                    .collect {|f| f.sub('lib/rails-i18n.rb', 'rails/locale/sk.yml') }
I18n.locale = :sk
puts I18n.t('date.month_names').compact

这产生:

 Január
 Február
 Marec
 Apríl
 Máj
 Jún
 Júl
 August
 September
 Október
 November
 December
于 2018-06-12T20:03:06.400 回答