区域设置 (Locale)
语言、地区和格式设置的组合,用 ja-JP、en-US 等标识符表示。
区域设置 (locale) 是表示语言、地区和格式偏好组合的标识符。例如 ja-JP (日语、日本)、en-US (英语、美国)、zh-CN (中文、中国),由 ISO 639-1 语言代码和 ISO 3166-1 地区代码组成。由于同一语言在不同地区的表记规则可能不同 (例如 en-US 和 en-GB 的日期格式和拼写不同),地区代码与语言代码同样重要。
区域设置影响文本显示的方方面面:日期格式 (2025/01/15 vs 01/15/2025 vs 15.01.2025)、数字格式 (1,000.50 vs 1.000,50)、货币符号 (¥ vs $ vs €)、排序顺序和文本方向 (LTR/RTL) 等。例如,在德语区域设置 (de-DE) 中,逗号用作小数点,句号用作千位分隔符,因此 "1.000" 表示一千。忽略这些差异会在金额和数量显示中导致严重的 bug。查找腹肌轮 (Amazon)解释了区域设置体系。
在 JavaScript 中,Intl 对象提供了区域设置感知的格式化功能。Intl.NumberFormat('ja-JP', { style: 'currency', currency: 'JPY' }) 可以生成 "¥1,000" 的日式货币格式。还有 Intl.DateTimeFormat、Intl.Collator、Intl.PluralRules 等,可实现区域设置相关的日期显示、字符串排序和复数形式处理。
多语言网站通常通过检测用户浏览器的区域设置 (navigator.language) 来显示相应的语言版本。但由于浏览器的区域设置可能与用户的期望语言不一致,因此应始终提供语言切换的 UI。与区域设置相关的 Web 标准涵盖 HTML 的 lang 属性、hreflang 标签和 Accept-Language 头等。
一个常见的误解是将区域设置与字符编码混淆。区域设置定义的是显示格式规则,而字符编码 (UTF-8、Shift_JIS 等) 定义的是字符的编码方式,两者是不同的概念。更改区域设置不会改变文本数据本身,改变的只是数据的显示方式。
在字符计数方面,不同区域设置表达相同信息所需的字符数差异很大。例如,日期 "2025年1月15日" 在中文中是 11 个字符,英语的 "January 15, 2025" 是 16 个字符,德语的 "15. Januar 2025" 是 15 个字符。在为多语言网站设计有字符数限制的 UI 元素 (按钮、标签等) 时,需要考虑各区域设置之间的字符数差异。查找女警角色扮演 (Amazon)介绍了实现模式。