将语言映射到Java中的国家?

时间:2011-03-13 09:51:07

标签: java icons flags

我有famfamfam国家图标,现在我想在我的应用程序中显示语言标志。有没有办法将语言映射到国家?我知道可能有许多国家/地区使用相同的语言或国家/地区可能会使用多种语言。但是很有可能所有语言都在某些国家/地区使用,那么有没有办法将语言映射到各个国家/地区,因此我可以为语言显示标志图标?

3 个答案:

答案 0 :(得分:2)

JRE以平台无关的方式为您提供当前安装的默认Locale信息。你有关于国家和语言的信息。用户可以根据需要调整此设置。

所有其他方法是将country_language代码映射到imgae文件(例如DE_de.jpg)。

答案 1 :(得分:1)

首先,不要这样做。 Country flags are no good language indicators,它们是国家/地区指标,如果使用其他国家/地区的国旗来表示他们的语言,您经常会冒犯您的用户 - 或者这个国家/地区使用的不同语言有多个相同的标记(在亚洲)这将是经常)。

只有极少数语言实际上有自己的标志,如世界语。


如果你真的想这样做,有一些方法:

  • 自己创建一个语言/国家的数据库,例如Johan表示。或者更好的是,数据库语言=> flag,因为这是你真正想要的(这也支持世界语标志)。

  • 您可以向Java JRE询问受支持的语言环境(Locale.getAvailableLocales),按语言对它们进行排序,并从该语言支持的国家/地区变体列表中获取一个随机国家/地区。通常只有一个,因此没有问题。对于英语,阿拉伯语,西班牙语,法语等较大的语言,您可以随机选择一个国家/地区标志。

答案 2 :(得分:0)

听起来enums可能有用,例如

enum Language {
   Swedish(Country.Sweden), 
   English(Country.England, Country.USA), 
   German(Country.Germany);

   private Country[] countries;
   Language(Country... countries) {
       this.countries = countries;
   }

   public Country[] getCountries() {
       return this.countries;
   }
}

enum Country {
   Sweden, 
   Germany, 
   England,
   USA;
}

可以使用:

Language lang = Language.English;
lang.getCountries(); // England, USA

下一个建议是让CountryFlag作为构造函数参数(就像Language采用Country一样)。然后你可以使用类似的东西:

for(Country c : Language.English.getCountries()) {
    System.out.println(c.getFlag());
}