【问题标题】:How to specify, which resource file to be used while running?如何指定,运行时使用哪个资源文件?
【发布时间】:2021-10-22 15:24:14
【问题描述】:

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

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

【问题讨论】:

    标签: java properties localization resourcebundle


    【解决方案1】:

    如果您的文件整理得很好,那么正确的国际化应该会自然而然地发生,具体取决于您的语言环境。如果您想在您的软件中测试其他支持的语言环境,请设置相应的系统属性:

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

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

    【讨论】:

    • 就像我在印度一样,它应该提取 label_hi_IN,但它没有提取那个。当我在 IDE 中运行应用程序时。它只保留在设置标签文本时提到的内容,例如在问题的描述中,我在图像中提到了 ...label.code。它将 label_text 的值设置为来自label.properties 而不是来自label_hi_IN.properties 的值。
    • 如何以及在何处设置此属性java -Duser.country=IN -Duser.language=hi。 @g00se
    • 在运行命令中。你将如何运行你的应用程序?
    • 我通过 Netbeans IDE 中的运行按钮运行它。就像我在 UI 中有语言选项一样,我们可以在这里更改语言。所以我希望它根据所选语言工作。 @g00se
    • 不要关心 Netbeans。这是为了开发程序,而不是为了运行它们,尽管可能有一些运行配置您可以使用(在开发时运行)来设置我提到的系统属性。不过,您应该习惯于在开发环境之外运行应用程序
    【解决方案2】:

    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,这样所有英语语言环境都将使用该文件

    【讨论】:

    • 我有一个配置菜单,用户可以在应用程序运行时选择印地语或英语语言。所以我希望应用程序根据所选语言使用资源包。如果用户选择了印地语,则使用 label_hi.properties,否则使用 label.properties。最终我的意思是说程序化如何强制使用该特定资源文件,例如如果印地语是用户的偏好,那么它使用 label_hi 而不是 label.properties。
    • ResourceBundle 中有很多getBundle 方法。您需要调用采用 Locale 参数的 getBundle 方法之一,例如 this one
    • 根据您的说法,我们可以使用Locale locale = new Locale("hi","IN"); ResourceBundle resource = ResourceBundle.getBundle("src/Resources/label",locale); String str = resource.getString("code"); 这将在我们在java lbl.setText(str); 中一一设置标签时起作用,但是如果我在JLabel 本身的属性中设置了此文本(就像我有在有问题的第二张图片中提到)。那么它如何知道要使用哪个资源包呢?它将仅使用上面提到的 label.properties 而不是 label_hi_IN.properties 的分配时间。那怎么办?
    • locale 不应是局部变量。它应该是您班级中的一个实例字段。每个菜单项的 Action 或 ActionListener 都应该更新该字段。
    【解决方案3】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-01-14
      • 1970-01-01
      • 2015-10-20
      • 1970-01-01
      • 1970-01-01
      • 2017-07-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多