2012-03-30 23 views
5

Trước tiên để xác nhận là tôi sẽ không cung cấp bất cứ điều gì trong cơ sở dữ liệu với nhiều ngôn ngữ. Tôi chỉ đang nói về văn bản trên trang.Cách đường ray được đề xuất cho I18n trong Rails 3

Tôi là một chút nhầm lẫn về báo cáo kết quả trong Rails Guide:

Thư viện i18n mất một cách tiếp cận thực tế để phím locale (sau khi một số cuộc thảo luận), chỉ bao gồm các miền địa phương (“ngôn ngữ”) một phần, như: vi,: pl, không phải phần khu vực, như: en-US hoặc: en-GB, được sử dụng theo cách truyền thống để tách “ngôn ngữ” và “cài đặt vùng” hoặc “tiếng địa phương”. Nhiều ứng dụng quốc tế chỉ sử dụng phần tử "ngôn ngữ" của một ngôn ngữ như: cs,: th hoặc: es (cho tiếng Séc, tiếng Thái và tiếng Tây Ban Nha). Tuy nhiên, cũng có những khác biệt về khu vực trong các nhóm ngôn ngữ khác nhau có thể quan trọng. Ví dụ: trong ngôn ngữ: en-US, bạn sẽ có $ làm biểu tượng tiền tệ, trong khi ở: en-GB, bạn sẽ có £. Không có gì ngăn bạn tách các cài đặt khu vực và các cài đặt khác theo cách này: bạn chỉ cần cung cấp đầy đủ ngôn ngữ "tiếng Anh - Vương quốc Anh" trong từ điển: en-GB.

Giả sử tôi muốn có bộ ngôn ngữ tiếng Anh hoàn chỉnh, bao gồm phần của Hoa Kỳ và phần GB.

Vì vậy, tôi cần phải có en.yml, en-US.ymlen-GB.yml, 3 file trong thư mục locale,

-- Rails Root 
    |-- config 
    |-- locale 
     | 
     |-- en.yml 
     |-- en-US.yml 
     |-- en-GB.yml 

và khi tôi đặt I18n.locale = 'en-US' sau đó nó sẽ sử dụng các bản dịch văn bản trong en-US.yml. Đó có phải là cách được khuyến nghị để làm I18n trong đường ray 3 không?

Và tốt nhất là tôi giữ phần giống nhau trong en.yml (như Thứ Hai Thứ Hai, chúng giống nhau ở Hoa Kỳ và GB) và giữ những thứ khác nhau (giống như ký hiệu tiền tệ) trong các tệp được phân tách en-US.ymlen-GB.yml? có thể là đường ray có thể tự động tìm phần giống hệt nhau trong en.yml không? Như tôi đã thử nghiệm, nó không được hỗ trợ ra khỏi hộp

+2

http://stackoverflow.com/a/7886246/772874 –

Trả lời

5

Để tránh có bản sao của tất cả các bản dịch en-US và en-GB có chung, bạn có thể xác định tuyến đường dự phòng tùy chỉnh cho các bản dịch khác nhau.

I18n.fallbacks.map(:"en-GB" => :"en") 

hoặc

I18n.fallbacks[:"en-GB"] # => [:"en-US", :en] 

Vì vậy, nên en-GB không có một bản dịch nào đó bạn có thể rơi trở lại en.yml hoặc en-US.yml. Bằng cách đó bạn có thể giữ các bản dịch theo vùng cụ thể trong en-US.yml và en-GB.yml, trong khi mọi thứ chúng có chung có thể ở trong en và có hai bản dịch trở lại khi bạn không thể tìm thấy bản dịch cụ thể trong en-US.yml hoặc en-GB.yml.

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