为什么PHP intl v1.1.0调用\Locale::getDisplayRegion传'-SV'返回El Salvador
问题原因解答
- 核心认知修正
你混淆了两类不同的ISO编码标准:sv是ISO 639-1 两位语言代码,代表瑞典语- 瑞典的ISO 3166-1 alpha-2 两位国家/地区代码是
SE,而非你以为的SV SV是萨尔瓦多的ISO 3166-1两位国家代码,和瑞典语的语言代码刚好字符串重合,是导致混淆的根本原因
Locale::getDisplayRegion('-SV', 'en')返回萨尔瓦多的原因
PHP的Locale系列方法底层依赖ICU国际化组件,getDisplayRegion的作用是提取传入Locale标识符中的国家/地区代码段,返回对应国家的本地化名称。你传入的-SV是不完整Locale,缺少语言段,ICU会直接把SV识别为国家代码,匹配到萨尔瓦多,返回El Salvador属于预期行为。- 传入
es-SV返回瑞典的异常原因
正常调用\Locale::getDisplayRegion('es-SV', 'en')会返回El Salvador,你拿到瑞典的结果大概率是以下两类错误导致:- 调用方法错误,比如误用了
getDisplayLanguage等获取语言名称的方法,或是参数顺序传错 - 传入的Locale字符串格式错误,比如把语言段和国家段位置写反,或是错误拼写了Locale内容
- 调用方法错误,比如误用了
- 正确调用示例
- 获取瑞典的国家英文名称:
\Locale::getDisplayRegion('sv-SE', 'en'),返回值为Sweden - 获取萨尔瓦多的国家英文名称:
\Locale::getDisplayRegion('es-SV', 'en'),返回值为El Salvador - 获取瑞典语的英文名称:
\Locale::getDisplayLanguage('sv', 'en'),返回值为Swedish
- 获取瑞典的国家英文名称:
内容的提问来源于stack exchange,提问作者Narc0t1CYM
相关产品推荐
相关产品推荐

