# 国际化
在1.10.0
版本后端
增加了国际化支持
# 配置
在每个maven模块的resources
下增加文件i18n/{path}/{name}_{lang}_{region}.properties
:
- {path}为子目录名,可建立多级.
- {name}为文件名,不能包含下划线(_)
- {lang}为语言,如: zh,en
- {region}为地区,如: CN,US
例:
--resources
-----|---i18n
-----|----|---module1
-----|----|----|--messages_zh_CN.properties
-----|----|----|--messages_en_US.properties
WARNING
不同的模块使用的路径+文件名
不能相同.
文件内容格式:
validation.username_must_be_not_empty=用户名不能为空
validation.data_does_not_exist=数据不存在,ID:{0}
# 异常
在API请求抛出异常时,message
设置为对应的key
,如:
throw new IllegalArgumentException("validation.username_must_be_not_empty");
在需要参数化动态生成消息的时候,需要使用实现I18nSupportException
的接口.并传入args
,如:
throw new I18nSupportException("validation.data_does_not_exist",id);
# 枚举
在API调用时,平台会将实现了EnumDict
接口的枚举序列化为一个对象:
{
"value":"枚举标识",
"text":"说明"
}
text
支持使用国际化来展示.
使用: 枚举实现接口I18nEnumDict
即可.在序列化时,会使用{className}.{enumName}
作为key
进行转换.
例如:
com.domain.dict.DeviceState.java
package com.domain.dict;
@AllArgsConstructor
@Getter
@Dict("device-state")
public enum DeviceState implements I18nEnumDict<String> {
notActive("未启用"),
offline("离线"),
online("在线");
private final String text;
@Override
public String getValue() {
return name();
}
}
resources/i18n/my-module/message_zh_CN.properties
com.domain.dict.DeviceState.notActive=未启用
com.domain.dict.DeviceState.offline=离线
com.domain.dict.DeviceState.online=在线
# jsr303
正常使用jsr303相关注解即可.
如果注解中指定了message
,并且没有使用jsr303的国际化,则会使用这个message作为key进行国际化.
如果没有指定message
,则使用validation.property_validate_failed={0}{1}
进行国际化提示.
{0}
为实体类属性名,{1}
为jsr303的消息.
如果需要将实体类属性名也进行国际化,需要在启动参数中添加-Di18n.validation.property.enabled=true
.
然后在国际化配置文件
中增加{className}.{property}
的key即可.
# 编程式使用
具体查看工具类 LocaleUtils (opens new window).