20

Tôi có vấn đề này i18nlàm thế nào để sử dụng đường ray dự phòng i18n tính năng

activerecord: 
    notices: 
    messages: 
     success: 
     create: "Something was created" 
    models: 
     user: 
     success: 
      create: "Thanks for registration" 

I18n.t("activerecord.notices.models.user.success.create") 
# => "Thanks for registration" 


I18n.t("activerecord.notices.models.book.success.create") 
# => "translation missing: de, activerecord, notices, models, book, success, create" 

Tôi không biết tại sao mô hình cuốn sách không được massage dự phòng. Tôi đã đặt config.i18n.fallbacks = true. Tôi đang sử dụng Rails 3

+0

cuốn sách quan trọng là không có mặt trong tập tin. Nhìn giống nhau và thử lại bằng cách thêm khóa sách. –

+0

có nó không có, nhưng đó là lý do chính để sử dụng một dự phòng. bạn không cần fallbacks nếu bạn xác định mọi thứ. nhưng tôi không thể làm điều đó. công việc vô dụng của nó đối với tôi. – antpaw

+0

Sẽ rất tuyệt nếu bạn chỉnh sửa câu hỏi để làm rõ thêm. Bạn đang sử dụng miền địa phương nào và bạn muốn dự phòng miền địa phương nào? (có vẻ như bạn có ngôn ngữ Đức của riêng bạn, nhưng tại sao bạn viết tiếng Anh trong đó?) – lulalala

Trả lời

22

Khi một : tùy chọn mặc định được đưa ra, giá trị của nó sẽ được trả lại nếu dịch là mất tích:

I18n.t :missing, :default => 'Not here' 
# => 'Not here' 

Thông tin thêm here

+0

ok cảm ơn, điều này dường như làm việc cho tôi "I18n.t (" activerecord.notices.models. # {object.to_s.downcase }. # {type} ",: default => I18n.t (" activerecord.notices.messages. # {type} "))" – antpaw

17

Bạn đã kích hoạt fallbacks cho phụ trợ của bạn? Giả sử nó là đơn giản (dựa trên yml trong ví dụ):

đặt điều này trong một initializer:

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

https://github.com/svenfuchs/i18n/wiki/Fallbacks

+0

Đối với đường ray, chỉ cần đặt nó vào một tệp như config/initializers/i18n_fallbacks.rb –

+0

Điều này làm việc cho tôi trên Rails 2 – lobati

+0

Điều này làm việc cho tôi trên Rails 2 - sau khi bao gồm cả đá quý 'i18n'. –

82

tôi đặt trong config/application.rb thường

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

Vì vậy, bạn có thể giảm tốc độ của dự phòng.

Nhưng hãy chú ý trong một số môi trường/*. Rb cấu hình bị ghi đè.

+15

Đây phải là câu trả lời được chấp nhận. – samvermette

+1

Điều này ** không nên ** là câu trả lời được chấp nhận, OP yêu cầu cho dự phòng quan trọng (mặc định AKA), không phải cho dự phòng ngôn ngữ. – rewritten

+0

@rewritten bạn có thể làm rõ thêm một chút không? Tôi cảm thấy tôi không thể phân biệt hai điều này rất rõ ràng và cũng không thể tìm thấy thảo luận trực tuyến về nó. – lulalala

16

Trong ray 3+, điều này được quy định trong config/môi trường tập tin:

# Enable locale fallbacks for I18n (makes lookups for any locale fall back to 
    # the I18n.default_locale when a translation can not be found) 
    config.i18n.fallbacks = true 
+0

Đây không phải là ở đó theo mặc định nữa, nhưng vẫn có thể được thêm vào. – tybro0103

4

Tôi tin rằng cách tốt nhất để xử lý một chuỗi mất tích, là để hiển thị một miền địa phương mặc định, chứ không phải là một thông báo lỗi .

Thêm dòng này trong application.rb để dự phòng cho ngôn ngữ tiếng anh.

config.i18n.fallbacks = [:en] 

Trong trường hợp bạn muốn chỉ định fallbacks miền địa phương cụ thể, bạn có thể sử dụng như sau:

config.i18n.fallbacks = {:de => [:de,:en], :en => [:en,:de]} 

Ngoài ra, lưu ý rằng bạn có thể kích hoạt và vô hiệu hóa fallbacks dựa trên môi trường của bạn. Vì vậy, trong khi phát triển nó có thể làm cho tinh thần để có một lỗi hiển thị, bạn có thể bật fallbacks trong environments/production.rb của bạn như sau:

config.i18n.fallbacks = true 
+1

Hiện tại tôi không đồng ý. Nếu một nhà phát triển đồng nghiệp thay đổi hoặc xóa khóa dịch và sau đó ứng dụng triển khai, bạn có thể nhận được chuỗi ngôn ngữ mặc định và không có kiến ​​thức về lỗi, sau đó khách hàng phàn nàn. Nó có thể là tốt hơn để tạo ra một đặc tả kiểm tra để đảm bảo tất cả các phím cho một ngôn ngữ nhất định được đặt ra –

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