ruby - 没有 Rails 的国际化?

标签 ruby internationalization i18n-gem

只是在没有 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/

相关文章:

ruby-on-rails - 如何使用 `attribute_names` 方法访问 Rails 模型中的 attr_accessor

ruby - 为什么在继承内部调用基类方法?

ruby-on-rails - 如果使用提示,Rails datetime_select 无法设置默认日期

php - 如何使用 PHP 从 $_SERVER ['HTTP_ACCEPT_LANGUAGE' ] 获取语言值?

android - 多语言支持

ruby - 在 ruby​​ 中编写嵌套 "for"的另一种有效方法?

java - 前端或后端的 api 错误消息的国际化?

php - gettext() 中的多个复数形式

中间人和 I18n : having some issues

ruby-on-rails - 将 gem 中的 I18n 翻译动态加载到 Rails 引擎中