Localization 使用或不使用错误代码

Localization 使用或不使用错误代码,localization,coding-style,Localization,Coding Style,因此,我一直在工作中从事一个新项目,今天有一位同事向我提出,我的异常甚至返回的错误消息应该完全本地化。我想这也许是个好主意,但他说我应该只返回错误代码。我个人不太喜欢错误代码的想法,因为它也会让其他程序员产生错误 在错误代码不适合的地方重用错误代码,因为它们不想添加另一个错误代码 他们倾向于使用错误的错误代码,因为可能会定义太多错误代码 所以我的问题是,其他人都做了些什么来处理这种情况?我愿意接受各种各样的建议,包括那些认为错误代码是解决问题的方法的建议 根据您的编码语言,可能存在文化差异 例如

因此,我一直在工作中从事一个新项目,今天有一位同事向我提出,我的异常甚至返回的错误消息应该完全本地化。我想这也许是个好主意,但他说我应该只返回错误代码。我个人不太喜欢错误代码的想法,因为它也会让其他程序员产生错误

  • 在错误代码不适合的地方重用错误代码,因为它们不想添加另一个错误代码
  • 他们倾向于使用错误的错误代码,因为可能会定义太多错误代码
    所以我的问题是,其他人都做了些什么来处理这种情况?我愿意接受各种各样的建议,包括那些认为错误代码是解决问题的方法的建议

    根据您的编码语言,可能存在文化差异

    例如,在Java中,数字错误代码使用得不多


    关于例外情况,我认为这只是一个技术工具。 重要的是你的信息是针对用户还是开发人员。 对于用户来说,如果出现多种语言,本地化消息非常重要,或者能够在不重新编译的情况下更改消息(在客户端之间进行自定义,以适应不断变化的用户需求……)


    在我的项目中,我们的文化是使用(java)枚举来处理所有固定值的集合。 错误也不例外。 错误的枚举可以提供:

    • 强类型(您不能将其他内容传递给需要错误代码的方法)
    • 简单本地化(一个简单的实用程序方法可以自动查找与每个方法对应的消息,例如使用“SimpleClassName”。“INSTANCE_NAME”模式;您还可以在每个枚举上公开getMessage()方法,将实现委托给您的实用程序方法)
    • 验证本地化文件(单元测试可以针对代码和文件中的每种语言进行循环,并找到所有不匹配的值)
    • 错误级别功能性(我们使用与日志记录相同的级别:致命、错误、警告;日志记录决策很容易实现!)
    • 为了便于其他开发人员找到适当的错误,我们使用了几个枚举(可能在同一个包中),根据错误的技术或功能领域对错误进行分类

    要解决您的两个问题:

  • 添加一个只需要向枚举添加一个实例,并在本地化文件中添加一条消息(但如果忘记了,测试可以捕获后面的消息)
  • 使用多个枚举中的分类,可能还有javadoc,引导他们使用正确的错误

  • 我不会使用错误代码进行本地化。可能有充分的理由使用错误代码(例如,能够测试发生了哪种特定类型的错误),但本地化不是这些原因之一。相反,使用与消息本地化其余部分相同的框架,也用于异常。例如,如果您在其他地方使用gettext,也可以在例外情况下使用它。这将使翻译人员的工作更轻松。

    您可以在异常中包含错误代码,从而充分利用两者

    旧式函数返回错误代码的一个常见错误原因是在继续执行后续代码之前未能检查错误代码。不能隐式忽略异常。消除错误源是一件好事

    错误代码允许:

    • 调用代码以区分不同类型的错误
    • 当非UI、非本地化代码中出现错误时,UI组件将构造的消息
    • 编写用户文档或故障排除指南时可能有用的代码错误列表
    我发现一些有用的指导方针:

    • 只有UI体系结构层才能构造和本地化发送给用户的消息
    • 当非UI层通过异常传递错误时,这些层可能会选择性地携带错误代码和在构建消息时对UI有用的附加字段
    • 在Java中,当在UI层枚举中定义错误代码时,可以通过枚举器本身访问错误消息格式字符串。它们可能包含错误中携带的附加数据的符号
    • 在Java中,在原始语言的格式字符串中的格式说明符中包含参数索引,以便翻译人员可以在本地化消息中移动动态数据