2012-04-11 32 views
6

Tôi đang sử dụng I18n-js và tất cả các cuộc gọi I18n.t phía khách hàng của tôi đều trả về một bản dịch bị mất khi đang chạy trong sản xuất.Đường dẫn tải I18n không được đặt khi chạy "tài sản bin/cào: biên dịch trước"!

Tất cả đều ổn trong quá trình phát triển và thử nghiệm.

Gốc của vấn đề này dường như nằm trong đường ống nội dung.

I18n.load_path không chứa bất kỳ các bản dịch của tôi (khi chạy tài sản bin/rake: tiền biên dịch) nó chỉ chứa các đường dẫn sau:

["/home/chris/.rvm/gems/[email protected]/gems/activesupport-3.2.3/lib/active_support/locale/en.yml", 
"/home/chris/.rvm/gems/[email protected]/gems/activemodel-3.2.3/lib/active_model/locale/en.yml", 
"/home/chris/.rvm/gems/[email protected]/gems/activerecord-3.2.3/lib/active_record/locale/en.yml", 
"/home/chris/.rvm/gems/[email protected]/gems/actionpack-3.2.3/lib/action_view/locale/en.yml"] 

Những trông giống như activesupport mặc định, activemodel, activerecord và actionpack bản dịch từ đá quý ...

đường dẫn dịch của tôi làm tuy nhiên được thiết lập như mong đợi khi chạy bin/ray console trong việc phát triển và sản xuất:

1.9.3p125 :002 > I18n.load_path 
=> ["/home/chris/.rvm/gems/[email protected]/gems/activesupport-3.2.3/lib/active_support/locale/en.yml", 
"/home/chris/.rvm/gems/[email protected]/gems/activemodel-3.2.3/lib/active_model/locale/en.yml", 
"/home/chris/.rvm/gems/[email protected]/gems/activerecord-3.2.3/lib/active_record/locale/en.yml", 
"/home/chris/.rvm/gems/[email protected]/gems/actionpack-3.2.3/lib/action_view/locale/en.yml", 
"/home/chris/.rvm/gems/[email protected]/gems/carrierwave-0.6.1/lib/carrierwave/validations/../locale/en.yml", 
"/home/chris/.rvm/gems/[email protected]/gems/devise-2.0.4/config/locales/en.yml", 
"/media/sf_code/Project/config/locales/active_record.en.yml", 
"/media/sf_code/Project/config/locales/project.en.yml"] 

Thật vậy, trạng thái tài liệu I18n: "Ngôn ngữ mặc định là: vi và tất cả các bản dịch từ cấu hình/ngôn ngữ/*. Rb, yml được tải tự động".

Tôi cũng đã cố gắng xác định trong application.rb

config.i18n.load_path += Dir[Rails.root.join('config', 'locales', '*.{rb,yml}').to_s] 

Nhưng vẫn không có niềm vui.

Bất cứ ai có bất kỳ ý tưởng nào có thể khiến I18n.load_path không được đặt chỉ khi chạy tài sản: biên dịch trước?

Cảm ơn mọi ý tưởng

Trả lời

0

Bạn đã xác định ngôn ngữ mặc định? Nếu không, bạn có thể làm điều đó thêm dòng này trong cấu hình của bạn/application.rb

config.i18n.default_locale = :fr 

Có lẽ bạn nên thêm dòng này quá trong production.rb của bạn để cho phép fallbacks locale cho i18n:

config.i18n.fallbacks = true 

Sau đó, hãy cẩn thận rằng bạn không có thụt lề tab trong tệp ngôn ngữ của bạn nhưng chỉ có dấu cách của dấu cách.

Miền địa phương không phải là nội dung, nội dung chỉ là js, css và hình ảnh để không có liên kết giữa việc biên soạn nội dung và ngôn ngữ.

3

Điều này thực sự là do cờ cấu hình nội dung mà bạn có thể đã đặt trong config/application.rb của mình.

config.assets.initialize_on_precompile = false 

Tài sản cào: nhiệm vụ cào trước kiểm tra cờ này và nếu phát hiện sai, chỉ tải nhóm tài sản và không khởi tạo đầy đủ ứng dụng. Đổi lại, miền địa phương ứng dụng không được thêm vào I18n.load_path.

0

Điều này là do i18n.js không được biên dịch và xử lý theo public/assets để làm như vậy, bạn phải thêm dòng sau trong config/environments/production.rb

config.assets.precompile += %w(i18n.js en_locale.js fr_locale.js) 

Sau đó chạy rake assets:precompile bạn sẽ thấy rằng public/assets/i18n-MD5.js bây giờ tồn tại và sẵn sàng để được phục vụ .

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