我正在寻找IntelliJ 2023.1中semu -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
Exception
在输出目录中,应用启动时的bundle位于类目录的根目录,但是IDE在一些示例中使用了预设的"resources"标签,但不是所有示例。也是一个错误。
回到重复演示的位置,我将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");
中使用完全限定资源名引用它。将使用默认的区域设置。