【问题标题】:How to get iso2code from a country name by locale如何通过语言环境从国家名称中获取 iso2code
【发布时间】:2013-12-10 12:11:32
【问题描述】:

我有一个用户输入国家名称的表单,然后我必须将其转换为 iso2 或 iso3 代码。

这怎么可能?我不喜欢使用地图,因为它似乎没有在我的 Android 应用上运行。

此代码用于将 iso2 转换为实际名称,我希望反过来:

Locale l = new Locale("", "CH");
System.out.println(l.getDisplayCountry());

【问题讨论】:

  • @Ricardo 谢谢,但它返回国家名称。例如,我需要一些东西将法国转换为 FR。
  • 阅读我链接的文档:“返回此语言环境的国家/地区代码”。
  • @Ricardo 我知道,但在实际程序中并没有这样做。这是我的代码,请检查它是否是您的意思:Locale l = new Locale("", "France");System.out.println(l.getCountry()); 对于此代码,结果是 FRANCE,应该是 fr

标签: java android locale iso


【解决方案1】:

你试过 Locale.getISO3Country() 吗?

要实际进行转换,您可能需要遍历所有可用的语言环境并查找其 getDisplayCountry() 与您输入的国家/地区名称匹配的语言环境。

听起来效率不高(但你说不要使用地图),但你可以尝试类似的方法:

Locale convertCountryNameToIsoCode(String countryName)
    for(Locale l : Locale.getAvailableLocales()) {
        if (l.getDisplayCountry().equals(countryName)) {
            return l;
        }
    }
    return null;
}

http://docs.oracle.com/javase/7/docs/api/java/util/Locale.html#getISO3Country()

但是,如果输入来自网络表单,则将国家代码直接设置为网络表单输入值会更容易。如果输入来自 Android 原生应用程序,那么我不确定,但我敢打赌您可能会遇到类似情况

【讨论】:

  • 感谢您的帮助。用这个方法应该是对的:convertCountryNameToIsoCode(France)??
  • 如果您让我知道与地图类似的解决方案,那将非常有帮助。也许我的地图代码是错误的。
  • @user3026034 好吧,您可以定义Map<String,String> countryCodes,在初始化期间的某个时刻您应该执行相同的循环,但您应该执行if (...) 而不是countryCodes.put(name, l.getISO3Country())。请注意,地图将区分大小写
猜你喜欢
  • 2020-12-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多