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



我正在寻找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.PropertyResourceBundleException

在输出目录中,应用启动时的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");中使用完全限定资源名引用它。将使用默认的区域设置。

相关内容

  • 没有找到相关文章

最新更新