Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/89.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 翻译Api/后端错误消息以向用户显示_Javascript_Jquery_Ajax_Validation_Error Handling - Fatal编程技术网

Javascript 翻译Api/后端错误消息以向用户显示

Javascript 翻译Api/后端错误消息以向用户显示,javascript,jquery,ajax,validation,error-handling,Javascript,Jquery,Ajax,Validation,Error Handling,我正在开发一个具有实时和前端(javaScript)验证的表单,该表单显示得非常好。但我还想向用户显示后端错误消息,因为前端验证允许请求通过的情况很少 我的后端错误信息是英文atm,我想就如何翻译它们提出一些建议。我不想在后端翻译它 示例: var ErrorStatusHandler; ErrorStatusHandler = (function() { function ErrorStatusHandler() {} ErrorStatusHandler.prototype.er

我正在开发一个具有实时和前端(javaScript)验证的表单,该表单显示得非常好。但我还想向用户显示后端错误消息,因为前端验证允许请求通过的情况很少

我的后端错误信息是英文atm,我想就如何翻译它们提出一些建议。我不想在后端翻译它

示例:

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;

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

{   "errors": [ {"code": 409, "message" : "An Application has already been created. "}] }
获取“message”并翻译字符串,这样我就可以将其打印到页面上的一个元素中

我现在怎么样:

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;

})();
$.ajax({
  statusCode: {
    404: function() {
       alert( "page not found" );
    }
  }
});
但我确信有更好的方法,我就是找不到。 P.S我不想使用插件,但如果没有任何好的解决方案,我可能不得不使用。

使用jQuery

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

参考:

JS代码:

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;

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

您还可以处理ajax调用的
错误:
回调处理程序中的状态代码,

下面是一个简单的方法

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
变量中设置当前语言

收到响应后,使用
JSON.parse()

然后根据
代码的值使用traslated字符串。

为什么不使用翻译文件,如:{“已创建应用程序”:“En ansökan med detta personnumer existerar redan.”,“foo”:“bar}等等。你也可以添加没有被翻译的参数,这听起来是个不错的建议。你有关于最佳实践的文档链接吗?谢谢!你的代码中的参数
e
是什么。在我看来,你不需要做像
e.slice
这样的花哨动作,尤其是当你可以
JSON时。解析(e)
然后以
var errors=JSON.parse(e);
的形式访问您的响应文本,然后使用
errors[0]。message
e参数是message对象:
{“message”:“已经创建了一个应用程序”。}
。哦,好的,我会研究一下。谢谢您刚才检查了,JSON.parse(e)和e都记录了相同的消息。e:`{“message“:“已创建应用程序。”}JSON.parse(e):对象{消息:“已创建应用程序。”}。我用slice去掉了所有的括号和分号。是的,我知道这是可能的,但是我创建了一个单独的类来处理它的原因是为了避免每个请求都有大约20条翻译错误消息。编辑:可能误解了你的意思。这是否意味着你需要一个通用的方法来处理连续的ajax调用。我认为您仍然可以通过调用带有当前
状态代码的外部方法来实现它,如果有的话&在那里处理它。不,ajax调用返回错误。我从后端抛出了一组不同的e,这取决于出错的地方。它们都是英文的,我只想找到一种方法将它们翻译成另一种语言,并向用户显示。是的,但这会使我的请求很大,因为我想翻译约20条错误消息。不要将翻译内容放入您的
回复中。在client.hmmm上维护translations对象,在这种情况下,我建议您在客户端使用一些插件,否则当您需要用不同的语言处理错误消息时,事情会变得一团糟,这正是我一直试图避免的。但我想我可能也有。对好的插件有什么建议吗?对我来说,这个插件看起来不错,翻译的质量也不错