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