ISO_3166-1 国家名称和 java.util.Locale

ISO_3166-1 Country Names and java.util.Locale

我正在尝试将 ISO 分配的国家/地区名称转换为其 ISO_3166-1 alpha 3(3 个字母)代码。我已经在此处看到了实现该效果的代码片段。

但是,getDisplayCountry 方法返回的字符串与 the ISO website 上显示的 分配的名称 似乎有所不同。例如,对于 Alpha 3 代码 "RUS",getDisplayCountry"Russia" 而 ISO 分配的英文名称(又名英文简称)如下所示。

我该如何解决这个问题?特别是如果我不想维护一个单独的查找文件——这破坏了使用内置 java class.

的全部意义

Locale.getDisplayCountry() returns 国家/地区名称以适合在其区域设置中显示给用户的形式:

Returns a name for the locale's country that is appropriate for display to the user. If possible, the name returned will be localized for the default DISPLAY locale. For example, if the locale is fr_FR and the default DISPLAY locale is en_US, getDisplayCountry() will return "France"; if the locale is en_US and the default DISPLAY locale is fr_FR, getDisplayCountry() will return "Etats-Unis". If the name returned cannot be localized for the default DISPLAY locale, (say, we don't have a Japanese name for Croatia), this function falls back on the English name, and uses the ISO code as a last-resort value. If the locale doesn't specify a country, this function returns the empty string.

ISO 网站仅以英文和法文列出了国家/地区。看起来 Java 可能使用不同的(或更改的)国家/地区名称来源,因此这些名称不能保证与您所指出的 en_US 语言环境匹配。

如果您需要匹配的只是显示名称(并且您的显示名称在整个数据集中都已标准化),您可以创建列表之间的映射。本质上,您将下载 ISO 列表并使用 2 位或 3 位国家/地区代码创建一个包含 ISO 显示名称到 Java 显示名称的查找 table。从那里您可以映射您的数据。