I18n без рельсов?

Просто проблемы с тем, чтобы заставить 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!!

Кроме того, каковы значения по умолчанию для load_path I18n, поэтому я не буду беспокоиться о том, чтобы указывать полные пути к каждому файлу перевода YAML/Ruby?

Благодарю.

3 ответа

Вы уже задали путь поиска для определений языка с помощью I18n.load_path,

Кажется, этого достаточно при использовании рельсов. Без рельсов, вы также должны загрузить определения языка с 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')))

(Вы также можете использовать здесь-документ или направить рубиновый хэш).

Похоже, ваш load_path не установлен правильно.

Попробуйте включить весь каталог, и если он успешен, вы должны увидеть ваши файлы:sk и:en, вызвав 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, поскольку путь может отличаться от одного компьютера к другому с разными версиями ruby ​​и т. Д., Файл, локальный для проекта, был бы лучше.

Вам нужно будет установить rails-i18n драгоценный камень просто, чтобы получить данные о локализации.

С этой установкой 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
Другие вопросы по тегам