如何指定运行时使用哪个资源文件?

How to specify, which resource file to be used while running?

我希望我的应用程序同时使用印地语和英语,所以我创建了一个名为 Resources 的 ResourceBundle。在这个目录中,我创建了 label.properties、label_en_US.properties 和 label_hi_IN.properties,这些文件已经放置了一些值,例如 ab=xy_default、ab=xy_in_en 和 ab=xy_in_hindi 分别.

现在我打算将它们用作标签文本,所以在该标签的 属性 中我提到了默认标签,就像这样
这里代码是关键,在 label_defualt 中是 code=Code :,在 label_en_US 中是 code=Code :,在 label_hi_IN 中是 code=कोड :。如何指定 label.properties 中的哪一个用于标签,label_en_US 或 label_hi_in。我在我的数据库中存储了用户偏好,比如使用哪种语言。
我想知道如何强制或告诉它在 main 函数或其他地方使用标签之外的特定文件,label_en_US、label_hi_IN。
因为现在它只从 label.properties 文件中获取值,如果用户希望它是印地语那么我们如何在内部强制使用那个 label_hi_IN.properties 文件。

如果您的文件已妥善整理,正确的国际化应该会自然发生,具体取决于您的语言环境。如果您想在您的软件中测试其他受支持的语言环境,请设置适当的系统属性:

java -Duser.country=IN -Duser.language=hi …

java -Duser.country=US -Duser.language=en …

ResourceBundle 使用“回退”策略。如果用户的当前语言环境是 hi-IN:

  • ResourceBundle.getBundle 将查找 label_hi_IN.properties(如果该资源存在)
  • 如果找不到该文件,ResourceBundle.getBundle 将查找 label_hi.properties(如果该资源存在)
  • 如果找不到该文件,ResourceBundle.getBundle 将查找 label.properties(如果该资源存在)

这意味着您应该执行以下操作:

  • 如果 label.properties 包含英文条目,请从您的项目中删除 label_en_US.properties
  • 如果 label.properties 包含印地语条目,请从您的项目中删除 label_hi_IN.properties
  • 重命名 label_hi_IN.properties,如果它仍然存在,则重命名为 label_hi.properties,这样所有印地语语言环境都将使用该文件
  • 重命名 label_en_US.properties,如果它仍然存在,则重命名为 label_en.properties,这样所有英语语言环境都将使用该文件

终于明白了,我们只需设置默认语言环境即可。

Locale locale = new Locale("hi","IN");
Locale.setDefault(locale);