使用多个ResourceBundles

时间:2013-05-08 13:53:59

标签: java eclipse resources

我正在创建一个游戏,并且在开始时我要求用户输入1/2/3数字来确认语言选择(荷兰语为1,法语为2,英语为3)。我已经有3个属性文件作为resourcebundles但现在我不知道如何将它们加载到我的游戏中。因此,当用户在我的JOptionPane中输入1时,应该有一个方法(或者什么?)将“语言”设置为荷兰语(插入cuz nr 1),或者如果插入2则为法语,或者为英语设置为3。

并且必须在几个app-class,startPlayerApp,startWorldMap等上工作...例如,在startPlayerApp中,我要求用户输入他的名字,在选择语言之后,如果他选择了荷兰语,那么应该问“Wat是不是纳姆?“,如果他选择英语”你叫什么名字?“等...

现在一切正常,但是我在普通荷兰语的字符串中“硬编码”了它,所以它现在只与unilanguage兼容,而不是多语言:(

如果有人能够尽快帮助我(最好是在本周末之前:p)这将是一个惊人的姿态!这是一个学校项目:(!!

2 个答案:

答案 0 :(得分:0)

将资源文件命名为反映语言:

myresource.properties
myresource_fr.properties
...

然后使用ResourceBundle让它检测语言并加载相应的文件:

ResourceBundle.getBundle("myresource", Locale.getDefault());

最后,要获得所需的信息,请使用:

Messages.resources.getString(identifier);

请注意,我没有将_fr传递给它,如果是这种情况,它将自动添加。如果请求的语言不可用,则默认为myresource.strings,因此您应该在那里放一个英文翻译。

答案 1 :(得分:0)

根据用户的语言选择创建一个Locale对象,例如英语Locale("en")

switch (selection) {
  case 1:
    locale = new Locale("nl");
    break;
  case 2:
    locale = new Locale("fr");
    break;
  case 3:
    locale = new Locale("en");
    break;
  default:
  locale = Locale.getDefault();
}

然后使用locale.properties加载相应的classpath文件。

ResourceBundle localizedMessages = ResourceBundle.getBundle("messages", locale);

上面传递的第一个参数叫做 basename 。对于给定的区域设置xx,资源包将加载basename_xx.properties文件。因此,请创建.properties文件并将其放在classpath

messages_en.properties

askForName=What is your name?

messages_nl.properties

askForName=Wat is uw naam?

将其中一个文件复制为messages.properties,以便从那里提供默认语言环境。 (您可以删除_xx文件作为默认值,但我建议保留它;有助于轻松切换默认值。)

通过所有这些设置,用她的语言向用户询问她的名字就像

一样简单
localizedMessages.getString("askForName");

注意:我们稍微简化了区域设置。我们也可以指定国家/地区代码,例如Locale("en", "UK"),以满足不同国家/地区语言使用方式的差异。

查看Javadocs了解详情。