【问题标题】:How to externalize error messages如何外部化错误消息
【发布时间】:2011-08-01 14:38:41
【问题描述】:

这是一个外部化错误消息的最佳实践问题。

我正在开展一个项目,我们在代码、简短描述和严重性方面存在错误。我想知道将此类描述外化的最佳方法是什么。我想到的是将它们放在不好的代码中,将它们存储在数据库中,将它们放在属性文件中,或者可能有一个加载了描述的静态类。我想我会选择属性,但也许有更好的方法。

谢谢

【问题讨论】:

  • 你应该使用 ResourceBundle ...见@justkt 答案。

标签: java error-handling


【解决方案1】:

使用ResourceBundle 来存储这些消息(以及其他用户界面消息,例如按钮和标签文本、加速器、快捷方式等)。这是一个简短的示例,假设您有一个名为 ErrorMessages 的包,其中包含一个名为 error.NameOfErrorMessage 的错误,并且变量 frame 中有一个 JFrame。

ResourceBundle errorMsg = ResourceBundle.getBundle("ErrorMessages");
String currError = errorMsg.getString("error.NameOfErrorMessage");
JOptionPane.showMessageDialog(frame, currError);

有关更多信息,您可以在国际化教程中查看About the Resource Bundle Class

【讨论】:

    【解决方案2】:

    我想有很多方法可以正确地做到这一点。 我看到的最常见的方式是使用外部文件,这些文件将您的实际代码中的内部错误代码和类似的描述联系起来

    error.123="Error with data X"
    warning.1="You must use ..."
    

    要更改应用程序上的文本错误,您只需更改此文本文件。这就是国际化的工作方式

    error.123="Error con el dato X"
    warning.1="Deberías usar ..."
    

    【讨论】:

      【解决方案3】:

      我们遇到了类似的问题。你是对的,在代码中包含消息是一个糟糕的选择。我们发现有几个因素会影响哪种替代方案更好。在我们的例子中,我们需要在客户端用 Java 处理相同的错误代码,在服务器端用 SQL 和 Perl 代码处理。我们发现有一个中心定义很有用,所以我们使用了一个数据库。

      如果您只需要在 Java 中处理错误代码,属性文件或资源包可能是最灵活的,因为它们允许本地化和/或国际化。我会远离静态课程;虽然它比内联错误描述要好,但它仍然相对不灵活。

      【讨论】:

      • 使用数据库解决方案,您仍然可以创建自己的 ResourceBundle 子类,在 db 中查找其值,从而提供使用 ResourceBundle 的定位和 i18n 优势。
      • @justkt - 你可以这样做,但是以这种方式子类化 ResourceBundle 需要做很多工作。另一种方法是从数据库生成一个属性文件,然后可以将其作为 PropertyResourceBundle 加载。
      猜你喜欢
      • 2021-12-07
      • 2016-08-01
      • 2011-03-03
      • 1970-01-01
      • 2018-06-18
      • 1970-01-01
      • 1970-01-01
      • 2011-09-14
      • 2018-06-11
      相关资源
      最近更新 更多