我正在寻找有关 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
虽然资源存在,但确认使用文件编辑器手动检查目标目录。
我有多种包类型,每个项目只有几个包类型,我想要一个全局可翻译文件的便利,使用包是必不可少的。假设问题是资源路径是相对于当前包的,那么纠正我的相对包位置/资源文件位置和默认包教程之间访问资源包的差异的语法是什么?
将资源放在源目录时会出现同样的错误,但资源文件不会复制到目标文件夹,在这种情况下必须手动插入。
使用资源类:
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");
。将使用默认语言环境。