【问题标题】:Error handling from backend to fronted (javascript) using enums, where do I put translations?使用枚举从后端到前端(javascript)的错误处理,我在哪里放置翻译?
【发布时间】:2012-09-09 18:14:12
【问题描述】:

我正在修改一个错误系统,我使用枚举来识别错误。枚举包含在服务器端并转换为 JS 对象,但我不知道在哪里保存错误消息。

错误枚举

public enum MyError
{
    InvalidThingFormat = 1001,
    AllowedThingsExceeded = 1002
}

生成的 JavaScript“枚举”

var MyError= {InvalidThingFormat :1001,AllowedThingsExceeded:1002};

然后做检查

switch(data.error) {
    case MyError.InvalidThingFormat:
        alert("Format validation failed");
        break;
    // etc.
}

到目前为止,我喜欢这种感觉,但我不喜欢硬编码的错误消息;那么我将把人类可读错误消息的本地化/国际化放在哪里呢?

是否还应该有一个后端翻译集,我在 JS 中推出,或者翻译应该只在 JS 端,由其他方法处理?代码会是什么样子; Error.GetMessage(MyError.AllowedThingsExceeded)?

【问题讨论】:

  • 从 JS 的角度来看,我更希望将错误消息与代表您的错误的 json 一起返回。数字代码对客户端重要吗?
  • 我相信一个常见的模式是将每个本地化存储在一个单独的文件中,并在必要时包含它。因此,您无需在错误处理方法中使用硬编码消息,而是从在单独脚本中设置的对象中查找值。
  • 最终我只是按照@Jørgen 的建议做了。对于嵌入到 JS 中的翻译,我只是决定将它们存储在资源文件中,并直接在其中生成带有翻译的 JS。这可能是缓存的问题,但我并不在意。

标签: c# javascript error-handling translation


【解决方案1】:

您将拥有多个 javascript 文件,每个文件都以其本地化命名。即:

zh-cn.js:

var ErrorMessages = {
    "1001" : "Invalid thing",
    "1002" : "Too many things."
};

es-mx.js:(注意,我实际上不懂西班牙语)

var ErrorMessages = {
    "1001" : "Cosa no válido",
    "1002" : "Demasiadas cosas"
};

如此等等。

因此,您可以将 en-us.js 作为默认值包含在内,然后再包含任何适当的本地化。

然后你可以像这样使用它:

 var errMsg = ErrorMessages[MyError.InvalidThingFormat];

 var errMsg = ErrorMessages["1001"];

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-10-31
    • 1970-01-01
    • 2017-05-14
    • 1970-01-01
    • 2019-12-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多