语言代码中的分隔符使用 ”-” 或 ”_” 是由不同标准或历史惯例决定的,主要涉及以下两个规范:
1. ISO 639-1 (语言代码) + ISO 3166-1 (国家/地区代码)
- 格式:
语言代码-国家代码
(用连字符-
分隔)
- 例如:
en-US
(英语-美国)、zh-CN
(中文-中国)。
- 例如:
- 来源:遵循 IETF(互联网工程任务组)的 BCP 47 标准,这是现代Web和国际化开发中的主流规范。
- 常见场景:HTTP头、HTML标签、操作系统API(如Linux/Windows本地化配置)、编程语言库(如Java的
Locale
类)。
2. Unix/Linux 系统的传统环境变量
- 格式:
语言_国家.编码
(用下划线_
分隔)
- 例如:
zh_CN.UTF-8
、en_US.ISO-8859-1
。
- 例如:
- 来源:早期Unix系统(如POSIX标准)的环境变量命名习惯,用于设置本地化参数(如
LANG
,LC_ALL
)。
- 常见场景:Linux/Unix系统的命令行环境、服务器配置。
为什么两种形式并存?
- 历史兼容性:
- Unix系统使用
_
的传统延续至今,而Web和国际化标准更倾向于-
。
- Unix系统使用
- 标准差异:
- BCP 47(现代Web标准)明确要求用
-
,而POSIX规范沿用_
.
- BCP 47(现代Web标准)明确要求用
- 实际应用中的灵活性:
- 大多数现代框架和库能自动识别两种格式(如JavaScript的
Intl
API、Python的locale
模块)。
- 大多数现代框架和库能自动识别两种格式(如JavaScript的
如何选择?
场景 | 推荐格式 | 示例 |
---|---|---|
Web开发、HTTP头部 | zh-CN , en-US |
HTML的 <html lang="zh-CN"> |
Linux系统环境变量 | zh_CN.UTF-8 . |
export LANG=zh_CN.UTF-8 |
Java/Python等编程语言库 | 通常兼容两者 | Java: new Locale("zh", "CN") |
若需进一步标准化处理,可以使用工具库(如JavaScript的RFC 5646解析器),或在代码中显式转换分隔符。
内容由零声教学AI助手提供,问题来源于学员提问