只是在没有 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 的默认加载路径是什么,所以我不会 为每个翻译 YAML/Ruby 文件提供完整路径而烦恼?
谢谢。
最佳答案
您已经使用 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')))
(您也可以使用此处文档或直接使用 ruby-hash)。
关于ruby - 没有 Rails 的国际化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12917329/