如何在客户端处理动态错误字符串以进行国际化

时间:2013-03-12 10:53:06

标签: java templates frameworks

我正在使用REST服务器端。

我会在响应客户端时更新HTTP标头中的 error_codeerror_message。 这一点很好,直到error_message是静态的。

e.g. error_code    : PC_USER_007
     error_message : You are logged out!

客户端将查看error_code(PC_USER_007);在相应的属性中,他们将进行本地化。 因此,如果用户属于中国,GUI现在将以中文显示相同的error_message。

如果是动态错误字符串,如下所示,

e.g. error_code    : PC_USER_008
     error_message : You have tried 2 attempts; only 1 attempts is remaining. 
Here 2, 1 are dynamic values..

现在GUI方面我们如何将此错误消息转换为其他语言。

任何框架(struts,spring ......)已经支持这种本地化了吗?

这与How to replace a set of tokens in a Java String?

的问题完全相反

服务器端我按照上面的链接;现在我想在客户端遇到相反的情况。

4 个答案:

答案 0 :(得分:6)

让服务器传递完整的error_message是不合适的。

通常服务器传递error_code和一组错误值。 e.g。

error_code: PC_USER_008
error_values: "42", "a value"

客户端以多种语言保存该error_code的模板,如

"This is argument {1} and arg {2}" 
"Ceci est argument {1} et arg {2}"

等。

然后客户端使用接收到的值

执行占位符{1} ... {n}的简单字符串替换

答案 1 :(得分:1)

如果我是你,我首先将错误代码从HTTP标头移动到响应内容中的结构(比如json)。标题不是分层的,没有结构。最好将它们包含在具有适当状态代码的响应中。

对于本地化消息及其模板,我没有遇到任何REST服务,它返回错误响应而没有错误消息。例如,查看zohodjango(REST API),S3。它们都返回代码和消息。

  1. 没有返回消息的问题是您的客户端永远不会立即知道问题是什么。这使得调试 更难。
  2. 客户端也无法访问您稍后在服务器代码中引入的新错误代码,从而强化了#1。
  3. 不再控制弃用错误代码或更改错误消息。
  4. 实现模板,但在服务器端执行。要求客户端向您发送一个标识其区域设置的ID。根据区域设置,可以更改错误消息。由于服务器端更改,您的客户永远不必更新其代码,并且您将始终向客户端显示正确的本地化消息。

答案 2 :(得分:0)

通常,如果您正在处理多语言应用程序,则应使用ID在服务器和GUI中标识文本,并且应在error_message字段中使用文本ID。有一些框架用作英文文本ID。

答案 3 :(得分:0)

在响应标头中发送整个错误消息不是一个好习惯。您可以发送错误代码并为这些代码实现特定于语言环境的消息。

在成功请求后的javascript中,使用回调方法来跟踪失败响应代码。创建一个包以读取特定区域设置用户的不同属性文件,并读取键值并显示正确的错误消息。

例如:

Properties file/ JS file
1. EnglishLabels.properties
2. MexicanLabels.properties
3. JapaneseLabels.properties

var bundle = read the specific property file and save the map (key : 0001 , value : Invalid Login)
在成功请求之后

,使用回调方法显示特定于语言环境的错误消息。

此致 Punith