Skip to main content

国际化支持

框架对国际化支持主要通过i18n模块对文本消息进行动态转换,只需要两步就可以实现多语言支持。

i18n资源定义#

  1. i18n资源文件命名
    i18n资源文件名必须严格按要求定义,由2部分组成,第一部分为资源名称,默认为i18n,可以通过配置修改,通常默认即可,不建议修改。 第二部分为语言代码,为浏览器支持的国际语言编码,例如en_US,zh_CN等。完整文件名看起来像下面这样:
  • i18n_en_US.properties
  • i18n_zh_CN.properties
  1. 词典定义

在资源文件中按key=value的键值对方式定义语言词典,例如:

i18n_en_US.properties
welcome=welcome !
today=today is %s

上面是英文版本,下面是中文版本

i18n_zh_CN.properties
welcome=欢迎 !
today=今天是 %s

还可以再添加其他语言版本,只需要另外建立一个后缀名和语言代码对应的资源文件即可。

  1. 状态消息
    本框架对状态消息有统一管理要求,状态消息包括正常提示、警告或错误消息等,每个消息都需要有消息编码和http状态码。 默认以status.yml文件名进行存储,每个应用还可以自定义扩展状态消息,以应用名加status后缀命名,例如:Main-status.yml。 这类状态消息默认以英文存储,然后通过上面的资源文件支持多语言转换。此类状态消息在资源文件中的键名需要加上status前缀,例如:
Main-status.yml
---
SUCCESS20200:
httpCode: 200
code: SUCCESS20200
message: SUCCESS
severity: NA
description: "The request is handled successfully! Time: %s"
ERROR20750:
httpCode: 400
code: ERROR20750
message: "PARAM_PARSE_EXCEPTION"
description: "Can not parse the parameter %s to %s type."

上面是状态消息,里面包含有成功提示和错误消息,需要通过下面的方式实现多语言支持:

i18n_en_US.properties
status.SUCCESS20200.message=SUCCESS
status.SUCCESS20200.description=The request is handled successfully! Time: %s
status.ERROR20750.message=PARAM PARSE EXCEPTION
status.ERROR20750.description=Can not parse the parameter %s to %s type.
i18n_zh_CN.properties
status.SUCCESS20200.message=成功
status.SUCCESS20200.description=请求处理成功! 时间: %s
status.ERROR20750.message=参数解析异常
status.ERROR20750.description=无法将参数 %s 解析为 %s 类型

开启i18n支持#

开启国际化支持很简单,只需要加载i18nServerModule模块即可,见下面实例:

public class Main extends Application {
@Override
protected void initialize() {
// 通过下面的方式加入i18n模块,对国际化进行支持
handler().addHandler(new String[]{"/**"}, new RequestMethod[]{RequestMethod.GET, RequestMethod.POST, RequestMethod.PUT, RequestMethod.DELETE}, false, bean().get(I18nServerModule.class));
}
public static void main(String[] args) {
Ready.For(Main.class).Work(args);
}
}

i18n应用实例#

上面讲解了分2步实现国际化支持,具体实例可以参考examples下的i18n演示项目,针对系统内部、json/xml输出、模版文件输出等各类场景进行了多语言支持的演示。 需要提示的是,在请求的时候系统会自动识别浏览器的语言来切换初始语言,后续切换语言需要在url后面带入参数,例如:?_locale=zh_CN,?_locale=en_US,每次切换会自动记忆当前语言,如果需要再此切换可以再次带入参数。

更多i18n国际化支持的设定和应用文档将在后续不断完善,重点内容将以专题形式提供。