让I18n在没有Rails环境的情况下工作有麻烦:
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是什么,所以我不会 为每个翻译YAML / Ruby文件提供完整路径?
感谢。
答案 0 :(得分:16)
您已使用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)。
答案 1 :(得分:3)
好像你的load_path设置不正确。
尝试包含整个目录,如果成功,您应该通过调用I18n.load_path
来查看:sk和:en文件。
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版本等。项目本地的文件会更好。< / p>
答案 2 :(得分:-1)
您需要安装rails-i18n
gem才能获取本地化数据。
使用此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