9

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のデフォルトのload_path(s)は何なので、すべての変換YAML / Rubyファイルへのフルパスを提供する必要はありませんか?

ありがとう。

4

3 に答える 3

17

言語定義の検索パスは、ですでに設定されていますI18n.load_path

レールを使用する場合はこれで十分なようです。レールがない場合は、言語定義もでロードする必要がありますI18n.backend.load_translations

要約すると、2つのステップが必要です。

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')))

(ヒアドキュメントを使用するか、ルビーハッシュを指示することもできます)。

于 2013-01-02T21:15:55.993 に答える
3

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 gemからの翻訳を含めることはお勧めしません。パスはマシンごとに異なり、rubyバージョンが異なる場合などです。プロジェクトのローカルファイルの方が適しています。

于 2012-10-17T09:38:29.247 に答える