Locale
Sự kết hợp của ngôn ngữ, khu vực và cài đặt định dạng, được xác định bởi các mã như ja-JP, en-US.
Locale là định danh đại diện cho sự kết hợp của ngôn ngữ, khu vực và tùy chọn định dạng. Ví dụ bao gồm ja-JP (tiếng Nhật, Nhật Bản), en-US (tiếng Anh, Hoa Kỳ) và zh-CN (tiếng Trung, Trung Quốc), bao gồm mã ngôn ngữ ISO 639-1 và mã khu vực ISO 3166-1. Vì quy ước định dạng khác nhau ngay cả trong cùng ngôn ngữ theo khu vực (ví dụ: en-US và en-GB khác nhau về định dạng ngày và chính tả), mã khu vực quan trọng không kém mã ngôn ngữ.
Locale ảnh hưởng đến mọi khía cạnh hiển thị văn bản: định dạng ngày (2025/01/15 so với 01/15/2025 so với 15.01.2025), định dạng số (1,000.50 so với 1.000,50), ký hiệu tiền tệ (¥ so với $ so với €), thứ tự sắp xếp và hướng văn bản (LTR/RTL). Ví dụ, trong locale tiếng Đức (de-DE), dấu phẩy được dùng cho dấu thập phân và dấu chấm cho phân cách hàng nghìn, vì vậy "1.000" nghĩa là một nghìn. Bỏ qua sự khác biệt này có thể gây lỗi nghiêm trọng trong hiển thị tiền tệ và số lượng. Sách lập trình quốc tế hóa giải thích hệ thống locale.
Trong JavaScript, đối tượng Intl cung cấp định dạng nhận biết locale. Intl.NumberFormat('ja-JP', { style: 'currency', currency: 'JPY' }) tạo ra "¥1,000" trong định dạng tiền tệ Nhật Bản. Intl.DateTimeFormat, Intl.Collator và Intl.PluralRules cũng có sẵn cho hiển thị ngày theo locale, sắp xếp chuỗi và xử lý dạng số nhiều.
Đối với trang web đa ngôn ngữ, phát hiện locale trình duyệt của người dùng (navigator.language) và hiển thị phiên bản ngôn ngữ phù hợp là thực hành tiêu chuẩn. Tuy nhiên, vì cài đặt locale trình duyệt có thể không luôn khớp với ngôn ngữ ưa thích của người dùng, UI chuyển đổi ngôn ngữ nên luôn được cung cấp. Các tiêu chuẩn web liên quan đến locale bao gồm thuộc tính HTML lang, thẻ hreflang và header Accept-Language.
Một quan niệm sai lầm phổ biến là nhầm lẫn locale với mã hóa ký tự. Locale định nghĩa quy tắc định dạng hiển thị, trong khi mã hóa ký tự (UTF-8, Shift_JIS, v.v.) định nghĩa cách ký tự được mã hóa thành byte. Thay đổi cài đặt locale không thay đổi dữ liệu văn bản; chỉ cách hiển thị dữ liệu đó thay đổi.
Đối với đếm ký tự, số ký tự cần thiết để biểu đạt cùng thông tin thay đổi đáng kể theo locale. Ví dụ, ngày "January 15, 2025" là 16 ký tự trong tiếng Anh, trong khi "2025年1月15日" là 11 ký tự trong tiếng Nhật, và "15. Januar 2025" là 15 ký tự trong tiếng Đức. Khi thiết kế phần tử UI giới hạn ký tự (nút, nhãn, v.v.) cho trang web đa ngôn ngữ, sự khác biệt số ký tự theo locale phải được xem xét. Sách phát triển web đa ngôn ngữ bao gồm các mẫu triển khai.