Làm thế nào để quốc tế hóa hoạt động trong JavaScript?


143

Tôi đang tự hỏi làm thế nào để đối phó với quốc tế hóa trong JavaScript. Tôi googled nhưng tôi không nhận được câu trả lời thuyết phục cho:

  • JavaScript có hỗ trợ riêng cho quốc tế hóa không?
  • I18n trong JavaScript là gì?
  • Làm thế nào để đối phó với lịch, tiền tệ, ngày, vv?

Tôi đã đọc Quốc tế hóa trong JavaScript .


Microsoft gần đây đã phát hành một plugin toàn cầu hóa jquery. Chi tiết tại đây
Adeel

Câu trả lời:


161

Hỗ trợ bản địa hóa trong các trình duyệt cũ. Ban đầu, điều này là do các cụm từ trong thông số ECMAScriptngôn ngữ trông như thế này:

Number.prototype.toLocaleString ()
Tạo một giá trị chuỗi đại diện cho giá trị của Số được định dạng theo các quy ước của ngôn ngữ hiện tại của môi trường máy chủ. Hàm này phụ thuộc vào việc triển khai và được cho phép, nhưng không được khuyến khích, để nó trả về điều tương tự như toString .

Mỗi phương thức bản địa hóa được xác định trong thông số kỹ thuật được định nghĩa là "phụ thuộc vào việc thực hiện", dẫn đến rất nhiều sự không nhất quán. Trong trường hợp này, Chrome Opera và Safari sẽ trả lại điều tương tự như .toString(). Firefox và IE sẽ trả về các chuỗi được định dạng cục bộ và IE thậm chí bao gồm một nghìn dấu phân cách (hoàn hảo cho các chuỗi tiền tệ). Chrome gần đây đã được cập nhật để trả về một chuỗi phân tách hàng nghìn, mặc dù không có số thập phân cố định.

Đối với các môi trường hiện đại , thông số API quốc tế hóa ECMAScript , một tiêu chuẩn mới bổ sung cho đặc tả Ngôn ngữ ECMAScript, cung cấp hỗ trợ tốt hơn nhiều cho việc so sánh chuỗi, định dạng số và định dạng ngày và giờ; nó cũng sửa các chức năng tương ứng trong Spec Spec. Một giới thiệu có thể được tìm thấy ở đây . Triển khai có sẵn trong:

  • Chrome 24
  • Firefox 29
  • Internet Explorer 11
  • Opera 15

Ngoài ra còn có một triển khai tương thích, Intl.js , sẽ cung cấp API trong các môi trường không tồn tại.

Xác định ngôn ngữ ưa thích của người dùng vẫn là một vấn đề vì không có thông số kỹ thuật để có được ngôn ngữ hiện tại. Mỗi trình duyệt thực hiện một phương thức để có được chuỗi ngôn ngữ, nhưng điều này có thể dựa trên ngôn ngữ hệ điều hành của người dùng hoặc chỉ ngôn ngữ của trình duyệt:

// navigator.userLanguage for IE, navigator.language for others
var lang = navigator.language || navigator.userLanguage;

Một cách giải quyết tốt cho vấn đề này là chuyển tiêu đề Ngôn ngữ chấp nhận từ máy chủ sang máy khách. Nếu được định dạng dưới dạng JavaScript, nó có thể được chuyển đến các hàm tạo API quốc tế hóa, nó sẽ tự động chọn ngôn ngữ tốt nhất (hoặc được hỗ trợ đầu tiên).

Nói tóm lại, bạn phải tự mình đưa vào rất nhiều công việc hoặc sử dụng khung / thư viện , vì bạn không thể dựa vào trình duyệt để làm việc đó cho bạn.

Các thư viện và plugin khác nhau để bản địa hóa:

  • Khác:

Hãy thêm / chỉnh sửa.


13
Cảm ơn tất cả mọi người đóng góp; Tôi chưa bao giờ nghĩ rằng tôi có thể học được điều gì đó bằng cách đọc câu trả lời cũ của tôi. Tôi rất vui khi thấy bản cập nhật cho thông số API quốc tế hóa trong đó, điều đó thực sự tuyệt vời và tôi vừa phải lái thử nó trong Chrome.
Andy E

1
Cảm ơn đã biên soạn tuyệt vời. Trên một lưu ý tích cực, có vẻ như Mozilla có thể sớm gửi một toLocaleString () hiện đại - có thể là FF28: bugzilla.mozilla.org/show_orms.cgi?id=769871
Chris Adams

1
i18next.com hiện đi kèm với quản lý dịch được xây dựng trên top locize.com - đây có thể là một chiến thắng lớn nếu bạn cần giải quyết quy trình dịch hoàn chỉnh - không chỉ là công cụ mã cho i18n. Plus có một tính năng Incontext Editor rất hay ...
jamuhl

12

Mozilla gần đây đã phát hành L20n hoặc bản địa hóa 2.0 tuyệt vời. Nói theo cách riêng của họ L20n là

một nguồn mở, ngôn ngữ kịch bản dành riêng cho địa phương hóa được sử dụng để xử lý giới tính, số nhiều, cách chia và hầu hết các yếu tố kỳ quặc khác của ngôn ngữ tự nhiên.

Việc thực hiện js của họ là trên kho lưu trữ github L20n.


Tôi đã bắt đầu một dự án cần nội địa hóa và chúng tôi cũng đã quyết định sử dụng L20n;). Vì vậy, tôi đã viết phiên bản đầu tiên của Plugin L20n cho RequireJS ( github.com/fernandogmar/L20n-RequireJS ) trong trường hợp bạn sử dụng RequireJS Tôi hy vọng nó cũng hữu ích cho bạn. Bất kỳ đề nghị sẽ được hoan nghênh.
Fernando Gm

0

Một số trong đó là bản địa, phần còn lại có sẵn thông qua các thư viện.

Ví dụ Datejs là một thư viện ngày quốc tế tốt.

Đối với phần còn lại, đó chỉ là về dịch thuật ngôn ngữ và JavaScript hoàn toàn tương thích với Unicode (cũng như tất cả các trình duyệt chính).


0

Bạn cũng có thể thử một thư viện khác - https://github.com/wikidia/jquery.i18n .

Ngoài việc thay thế tham số và nhiều dạng số nhiều, nó còn hỗ trợ giới tính một tính năng khá độc đáo của các quy tắc ngữ pháp tùy chỉnh mà một số ngôn ngữ cần.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.