翻译Api / back end错误消息以显示给用户

时间:2015-09-07 12:30:15

标签: javascript jquery ajax validation error-handling

我正在处理一个同时显示实时和前端(javaScript)验证的表单。但我也希望向用户显示后端错误消息,以便前端验证允许请求通过。

我的后端错误消息是英文atm,我想知道如何翻译它们。我不想在后端翻译它。

示例:

后端回复:

{   "errors": [ {"code": 409, "message" : "An Application has already been created. "}] }

采取"消息"并翻译字符串,以便我可以在页面上的元素中打印它。

我现在的表现如何:

var ErrorStatusHandler;

ErrorStatusHandler = (function() {
  function ErrorStatusHandler() {}

  ErrorStatusHandler.prototype.errorMessage = function(e) {
    var responseText, translatedResponseText;
    responseText = e.slice(12, -2);
    if (responseText === "An Application has already been created.") {
      translatedResponseText = responseText.replace("An Application has already been created.", "En ansökan med detta personnummer existerar redan.");
    } else {
//* some other error
      translatedResponseText = responseText;
    }
    return translatedResponseText;
  };

  return ErrorStatusHandler;

})();

但我确信有更好的方法可以做到这一点,我似乎无法找到一个。 P.S我宁愿不使用插件,但如果没有任何好的解决方案,我可能不得不这样做。

2 个答案:

答案 0 :(得分:0)

使用jQuery $.ajax()可以实现使用statusCode:处理程序,对于api将返回给客户端的每个状态代码,您可以使用statusCode处理程序来处理它们。像这样的404

价:http://api.jquery.com/jquery.ajax/

JS CODE:

$.ajax({
  statusCode: {
    404: function() {
       alert( "page not found" );
    }
  }
});

您还可以在ajax调用的error:回调处理程序中处理状态代码,Check here @ JSFiddle

答案 1 :(得分:0)

这是一种简单的方法。

var errorMessages = {
    'en':{
        '409':'An Application has already been created.'
        '404':'Not Found'
    },
    'fr':{
        '409':'En ansökan med detta personnummer existerar redan.'
        '404':'Frogs are not only the proof that french people will put anything into their mouths, but also they are amphibians'
    }
};
var currentLanguage = 'fr';
var ErrorStatusHandler;

ErrorStatusHandler = (function() {
  function ErrorStatusHandler() {}

  ErrorStatusHandler.prototype.errorMessage = function(e) {
    var responseText, translatedResponseText;
    //responseText = e.slice(12, -2); - not sure if this is required
    var response = JSON.parse(e); //assuming e is your response.
    var errors = response.errors;
    translatedResponseText = errorMessages[currentLanguage][errors[0].code];
    return translatedResponseText;
  };

  return ErrorStatusHandler;

})();

说明:

对象errorMessages包含每个code的消息翻译。 然后,您将当前语言设置为currentLanguage varible。

收到回复后,您将其解析为JSON.parse()的JS对象 然后根据code的值使用经过翻译的字符串。