Thực sự có một giải pháp thay thế cho cách tiếp cận i18n rườm rà. Dung dịch được gọi là Tr8n.
Mã trên của bạn sẽ đơn giản là:
<%= tr("You have {num || kid}", num: 1) %>
Đó là nó. Không cần trích xuất các khóa từ mã của bạn và duy trì chúng trong các gói tài nguyên, không cần triển khai các quy tắc đa dạng hóa cho từng ngôn ngữ. Tr8n đi kèm với các quy tắc ngữ cảnh số cho tất cả các ngôn ngữ. Nó cũng đi kèm với các quy tắc giới tính, quy tắc danh sách và các trường hợp ngôn ngữ.
Định nghĩa đầy đủ của khóa dịch ở trên thực sự sẽ như thế này:
<%= tr("You have {num:number || one: kid, other: kids}", num: 1) %>
Nhưng vì chúng ta muốn tiết kiệm không gian và thời gian, num tự động được ánh xạ tới các quy tắc số và không cần cung cấp tất cả các tùy chọn cho các giá trị quy tắc. Tr8n đi kèm với các bộ phân cực và bộ cảm biến sẽ làm công việc cho bạn một cách nhanh chóng.
Bản dịch cho khóa của bạn bằng tiếng Nga, sẽ đơn giản là:
"У вас есть {num || ребенок, ребенка, детей}"
Nhân tiện, bản dịch của bạn sẽ không chính xác bằng các ngôn ngữ có quy tắc cụ thể về giới tính. Ví dụ: bằng tiếng Do Thái, bạn thực sự sẽ phải chỉ định ít nhất 2 bản dịch cho ví dụ của mình, vì "Bạn" sẽ khác dựa trên giới tính của người dùng đang xem. Tr8n xử lý rất tốt. Đây là bản chuyển ngữ của các bản dịch tiếng Do Thái:
"Yesh leha yeled ahad" with {context: {viewing_user: male, num: one}}
"Yesh leha {num} yeladim" with {context: {viewing_user: male, num: other}}
"Yesh lah yeled ahad" with {context: {viewing_user: female, num: one}}
"Yesh lah {num} yeladim" with {context: {viewing_user: female, num: other}}
Vì vậy, khóa tiếng Anh duy nhất của bạn, trong trường hợp này, cần 4 bản dịch. Tất cả các bản dịch được thực hiện theo ngữ cảnh - bạn không cần phải ngắt câu. Tr8n có cơ chế ánh xạ một khóa cho nhiều bản dịch dựa trên ngôn ngữ và ngữ cảnh - tất cả đều được thực hiện nhanh chóng.
Một điều cuối cùng. Điều gì sẽ xảy ra nếu bạn phải làm cho phần đếm được in đậm? Nó chỉ đơn giản là:
<%= tr("You have [bold: {num || kid}]", num: 1, bold: "<strong>{$0}</strong>") %>
Chỉ trong trường hợp bạn muốn xác định lại "chữ đậm" của mình sau này - sẽ rất dễ dàng - bạn sẽ không phải xem qua tất cả các tệp YAML của mình và thay đổi chúng - bạn chỉ cần thực hiện ở một nơi.
Để tìm hiểu thêm, vui lòng xem tại đây:
https://github.com/tr8n/tr8n_rails_clientsdk
Tiết lộ: Tôi là nhà phát triển và là người duy trì khuôn khổ Tr8n và tất cả các thư viện của nó.
"#{....}"
không cần thiết trong đoạn mã trên.