在 Java 包中访问国际化资源包的语法是什么?

问题描述 投票:0回答:1

我正在寻找有关 IntelliJ 2023.1 中 semeru-18 SDK 中 Java 应用程序国际化的帮助

按照教程和其他教程(仅使用所有国际化的默认包),我在我最喜欢的 IDE 中添加了一个 Java 资源包,并尝试为国际化字符串加载它。

static ResourceBundle messages = ResourceBundle.getBundle("<Program>Strings", Locale.getDefault());

java.util.MissingResourceException: Can't find resource for bundle java.util.PropertyResourceBundle
例外

输出目录的应用程序在类目录的根目录下启动,但 IDE 在某些示例中使用了“资源”标签预设,但并非所有示例。也是一个错误。

回到重复演示,我将 Java 文件移动到根目录。

ResourceBundle messages = ResourceBundle.getBundle("<Program>Strings", Locale.getDefault());
System.out.println("ProgramName");

输出复制了演示。在资源目录中创建并行资源文件,为每个包镜像我的包目录结构我现在得到错误

java.util.MissingResourceException: Can't find bundle for base name ProgramStrings, locale en_US

虽然资源存在,但确认使用文件编辑器手动检查目标目录。

我有多种包类型,每个项目只有几个包类型,我想要一个全局可翻译文件的便利,使用包是必不可少的。假设问题是资源路径是相对于当前包的,那么纠正我的相对包位置/资源文件位置和默认包教程之间访问资源包的差异的语法是什么?

将资源放在源目录时会出现同样的错误,但资源文件不会复制到目标文件夹,在这种情况下必须手动插入。

java internationalization resourcebundle
1个回答
0
投票

使用资源类:

  • 默认值:
    src/main/java/my/app/MyResources.java
    • class MyResources extends ResourceBundle
  • 英语:
    src/main/java/my/app/MyResources_en.java
    • class MyResources_en extends MyResources
  • 法语:
    src/main/java/my/app/MyResources_fr.java
    • class MyResources_fr extends MyResources
  • 德语:
    src/main/java/my/app/MyResources_de.java
    • class MyResources_de extends MyResources

使用属性文件:

  • 默认值:
    src/main/resources/my/app/MyResources.properties
  • 英语:
    src/main/resources/my/app/MyResources_en.properties
  • 法语:
    src/main/resources/my/app/MyResources_fr.properties
  • 德语:
    src/main/resources/my/app/MyResources_de.properties

然后在您的代码中使用完全限定的资源名称引用它

ResourceBundle.getBundle("my.app.MyResources");
。将使用默认语言环境。

© www.soinside.com 2019 - 2024. All rights reserved.