0

我正在创建一个游戏,一开始我要求用户输入 1/2/3 数字以确认语言选择(1 表示荷兰语,2 表示法语,3 表示英语)。我已经有 3 个属性文件作为资源包,但现在我不知道如何将它们加载到我的游戏中。因此,当用户在我的 JOptionPane 中输入 1 时,应该有一个方法(或其他东西?)将“语言”设置为荷兰语(因为插入了 1 号),或者如果插入了 2 则为法语或英语为 3。

这必须适用于几个应用程序类,startPlayerApp,startWorldMap 等......例如,在 startPlayerApp 中,我要求用户在语言选择后输入他的名字,所以如果他选择荷兰语,它应该问“Wat is uw naam ?”,如果他选择英语“你叫什么名字?” ETC...

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

如果有人能尽快帮助我(最好甚至在本周末之前:p),那将是一个了不起的姿态!这是一个学校项目:(!!

4

2 回答 2

0

命名您的资源文件以反映语言:

myresource.properties
myresource_fr.properties
...

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

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

最后,要获取您需要的消息,请使用:

Messages.resources.getString(identifier);

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

于 2013-05-08T13:58:35.343 回答
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。对于给定的 locale 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以获取更多信息。

于 2013-05-08T14:04:36.167 回答