了解国际化
国际化也简称i18n,是因为Internationalization这个单词太长18位,取头和取结尾一个字母这样i18n这个国际化简称就产生了。 国际化是指让产品或是程序在无需做出改变的情况下就能够适应不同语言和地区的需要 。通常运用在有国际化需求产品上面。那么对于国际化的系统应用需要注意哪些问题,有哪些参考的技巧,下面会罗列在一些场景下国际化的方式。为后续有国际化需求的项目系统设计提供一些参考思路。
一般国际化
首先我们对于国际化的认知就是系统能在不同浏览器上面根据语言类型进行切换,有中文界面、英文界面,如果仅是这样我们可能会看到如下系统将面临的需求。
国际化操作界面
那么除了正常的前端界面国际化满足基本需求以外,以下场景实现国际化也是可以有一些方法的。
- 数据库设计的菜单数据需要国际化。
- 数据库表数据是否需要国际化。
- 字典参数是否需要国际化。
- 程序的提示信息是否需要国际化。
国际化数据分类
一、系统需要
应用国际化,一般是给操作人员基于系统操作层面上的,只需展示界面为特定语言满足操作即可。
1、前端界面国际化
在 Java 中实现国际化主要是借助一个工具类 ResourceBundle ,核心的思想就是 ,对不同的语言环境提供一个不同的资源文件
资源文件
2、后端信息数据国际化
同样是把后台的一些信息配置到资源文件里面,AcceptHeaderLocaleResolver 对国际化提供了支持。
/**
* 获取i18n资源文件
*
* @author Bill Li
*/
public class MessageUtils {
/**
* 根据消息键和参数 获取消息 委托给spring messageSource
*
* @param code 消息键
* @param args 参数
* @return 获取国际化翻译值
*/
public static String message(String code, Object... args) {
MessageSource messageSource = SpringUtils.getBean(MessageSource.class);
return messageSource.getMessage(code, args, LocaleContextHolder.getLocale());
}
}
调用方式:MessageUtils.message("user.login.success")
二、业务需要
业务国际化,一般是业务数据是有多语言版本,数据需要支持多种语言。
1、数据库数据国际化
通过增加国际化字段,返回ORM层或者应用层的时候结合资源文件翻译即可。
2、业务多语言
通过增加多语言对应表,针对的配置不通过的语言版本,业务增加语言过滤。
配置多语言3、利用JSON存储做简单实现
数据库情况List<DemographyDto> list = JsonUtil.toJsonListObject(langCodes, DemographyDto.class);
public static <T> List<T> toJsonListObject(String json, Class<T> valueType) {
try {
JavaType getCollectionType = MAPPER.getTypeFactory().constructParametricType(List.class, valueType);
List<T> list = MAPPER.readValue(json, getCollectionType);
return list;
} catch (IOException e) {
logger.error(e.getMessage(), e);
}
return null;
}
方法是死的,好用方便满足需求即可(不过要优雅)。
网友评论