2012-10-16 29 views
9

chỉ gặp rắc rối để làm cho i18n để làm việc mà không cần môi trường Rails:I18n không có 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> 

Tôi đang làm gì sai? Sk.yml DOES chứa phần tử sk.time.formats.default !!

Ngoài các load_path mặc định của I18n là gì, vì vậy tôi sẽ không bị làm phiền cung cấp đường dẫn đầy đủ cho mọi tệp dịch YAML/Ruby?

Cảm ơn.

Trả lời

3

Dường như load_path của bạn không được đặt chính xác.

Hãy thử bao gồm toàn bộ thư mục và nếu thành công, bạn sẽ thấy: sk và: en tệp bằng cách gọi I18n.load_path.

I18n.load_path = Dir['/usr/lib/ruby/gems/1.9.1/gems/rails-i18n-0.6.6/rails/locale/*yml'] 

Đặt đường dẫn tệp trực tiếp có thể hơi khó hiểu vì I18n sẽ không gây ra lỗi nếu tệp không tồn tại. Là một lưu ý phụ, tôi khuyên không nên bao gồm các bản dịch từ đá quý rails-i18n vì đường dẫn có thể khác với một máy khác với các phiên bản ruby ​​khác nhau, vv .. một tệp cục bộ cho dự án sẽ tốt hơn.

15

Bạn đã đặt đường dẫn tìm kiếm cho các định nghĩa ngôn ngữ bằng I18n.load_path.

Dường như, điều này là đủ khi sử dụng đường ray. Nếu không có đường ray, bạn cũng phải tải các định nghĩa ngôn ngữ bằng I18n.backend.load_translations.

Nói tóm lại, bạn cần hai bước sau:

I18n.load_path = Dir['*.yml'] 
I18n.backend.load_translations 

Các bộ từ điển được định nghĩa với chính ngôn ngữ, ví dụ như:

en: 
    hello: "Hello world" 

Nếu bạn muốn xác định bạn en.yml mà không cần chìa khóa ngôn ngữ, bạn có thể tải chúng qua

I18n.backend.store_translations(:en , YAML.load(File.read('en.yml'))) 

(Bạn cũng có thể sử dụng một ở đây-tài liệu hoặc chỉ đạo một ruby-băm).

Các vấn đề liên quan