0

在我的 java 项目中,我在一个messages.properties文件中外部化了一堆字符串。在其各自Messages.java的文件中,我有相同数量的公共静态字符串类型属性,因此我可以访问这些外部化文本。

然后,我实现了一个名为 的方法getString,它接收常量的名称作为其参数并返回所需的文本。这样,就无需在Messages.java文件中声明所有公共静态字符串类型的属性。

但是在这样做之后,我的日志中充满了“ NLS 未使用的消息”消息。

您知道是否有办法防止记录这些警告消息?

提前致谢。

4

3 回答 3

5

你的Messages课——听起来像是在扩展org.eclipse.osgi.util.NLS

如果是这种情况,它旨在满足要求:

  • 提供编译时检查消息是否存在。
  • 避免同时包含键和值的映射的内存使用(在资源包方法中就是这种情况)。
  • 良好的 i18n 支持。

即 NLSMessage.staticVariable使用staticVariable在 messages.properties 中找到的值填充 的值。

警告日志提供有关文件Messages.javamessages.properties文件之间不匹配的信息。

您的getString()方法听起来好像没有使用 NLS 的任何优点,因此正如其他人所建议的,您最好使用 ResourceBundle。

于 2009-01-07T12:58:06.860 回答
3

Messages 听起来像是您编写的一个类,因为我在我的 JDK 6 javadocs 中没有看到它。

听起来您已经尝试重新发明 java.util.ResourceBundle。我建议改用它并放弃你的课程。它将具有正确处理 I18N 的额外优势。

我没有看到硬编码类中的公共静态消息密钥有任何价值。这只是您必须维护的另一件事。如果我理解您的操作正确,我会丢弃您的 Messages 并改用 ResourceBundle。

于 2009-01-07T12:39:52.293 回答
0

正如jamesh所说,duffymoMessages是我写的一个类,它扩展了org.eclipse.osgi.util.NLS. 它有一个私有的静态属性,它的类型是……ResourceBundle!

jamesh,感谢您详细介绍 NLS 的工作方式。

根据您的回答,我Messages从项目中删除了我的类,并在需要使用外部化字符串的类上添加了一个 ResourceBundle 类型的属性。另外,我这样做的方式是不需要更改访问外部化字符串的行。

我们项目中的文件数量减少了,代码保持和以前一样干净,并且没有更多的日志警告。

谢谢你们。你摇滚。

于 2009-01-07T14:04:20.173 回答