8

Tôi đang sử dụng Rails 3 với Globalize3 0.2.0.beta4Có thể làm cho đường ray i18n miền địa phương dự phòng với nhau không?

Lý tưởng tôi cần: fr để dự phòng: vi và ngược lại.

Có những trường hợp chỉ có bản dịch tiếng Pháp và tôi cần hiển thị nó ngay cả khi ngôn ngữ là: vi.

tôi đã cố gắng

config.i18n.fallbacks = { :fr => :en, :en => :fr } 

nhưng hơi gì ngạc nhiên nó gây ra một chồng mức lỗi quá sâu.

Trả lời

1

Nếu bạn chuyển một loạt các ngôn ngữ, chúng sẽ được đặt làm dự phòng mặc định cho tất cả các ngôn ngữ.

config.i18n.fallbacks = [:en, :fr] 

Thật không may, tôi chưa tìm cách thiết lập hai miền địa phương để quay lại với nhau.

1

Cuối cùng, con khỉ đã vá Globalize3. Không tuyệt vời như tôi phải cập nhật các bản vá bất cứ khi nào trang web cần một miền địa phương mới, nhưng hey, nó làm việc.

module Globalize 

    class << self 

    def fallbacks(locale = self.locale) 
     case locale 
     when :en then [:en, :fr] 
     when :fr then [:fr, :en] 
     end 
    end 

    end 
end 
5

Tôi đang thay đổi câu trả lời của mình.

Để kích hoạt fallbacks, thêm dòng sau vào tập tin environment.rb của bạn:

#support for locale fallbacks 
require "i18n/backend/fallbacks" 
I18n::Backend::Simple.send(:include, I18n::Backend::Fallbacks) 

Sau đó, bạn có thể bật fallbacks tròn như bạn đang cố gắng, ví dụ:

config.i18n.fallbacks = {'en' => 'fr', 'fr' => 'en'} 

Trong trường hợp này , nếu một cái gì đó bị thiếu trong miền địa phương, nó sẽ kiểm tra miền địa phương fr, và sau đó là cách khác. Tôi không gặp bất kỳ lỗi nào khi chạy điều này.

Nguồn: http://batsov.com/articles/2012/09/12/setting-up-fallback-locale-s-in-rails-3/

0

Trong mới nhất ngọc i18n (0.7.0) Tôi đã tìm thấy cần xác định ngôn ngữ dự phòng như thế này (trong config/application.rb):

# Custom I18n fallbacks 
config.after_initialize do 
    I18n.fallbacks = I18n::Locale::Fallbacks.new(at: :"de-DE", ch: :"de-DE", gb: :"en-US") 
end 

Bạn cũng cần đặt config.i18n.fallbacks = true trong tất cả các tệp config/environments/*.rb.

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