1、国际化
国际化(internationalization)也称作i18n,源于英文单词 internationalization的首末字符i和n,18为中间的字符数。由于应用发行在不同国家和地区,需要根据不同语言展示不同的提示文本。应用提供这种能力、实现这种能力的过程可称为国际化。
2、Spring国际化:
Spring框架通过MessageSource接口来实现国际化,允许在应用程序中通过配置文件管理多语言和本地化资源。
官方文档:
public interface MessageSource Strategy interface for resolving messages, with support for the parameterization and internationalization of such messages. Spring provides two out-of-the-box implementations for production: · ResourceBundleMessageSource: built on top of the standard ResourceBundle, sharing its limitations. · ReloadableResourceBundleMessageSource: highly configurable, in particular with respect to reloading message definitions.
|
Spring提供两种开箱即用的MessageSource实现:
ResourceBundleMessageSource
ResourceBundleMessageSource是标准实现,允许通过资源名加载国际化资源。因此可以将不同语言版本的资源存储在不同的Properties文件中,并根据对应语言加载对应的Properties文件。
ReloadableResourceBundleMessageSource
ReloadableResourceBundleMessageSource提供了一种运行时重载的能力,即定时刷新。允许在不重启应用程序的情况下更新资源信息。
3、SpringBoot国际化实践
3.1、创建资源文件
文件命名格式为 自定义名称_语言_国家.properties,比如messages_zh_CN记录的是中文的资源信息。
3.2、记录请求的locale信息
为了能够从网络请求中获取到地区语言信息,应用自定义约定的请求头,从头部获取对应的locale信息,从而加载对应地区语言的文本信息。
通过ThreadLocal缓存请求总获取的locale信息
通过拦截器,从请求头中,获取到locale信息
3.3、工具类封装与使用
编写MessageSource配置类
指定资源配置文件的路径
封装工具类,提供国际化能力。
通过I18nMessageUtil.get(key)方法获取对应地区语言的文本信息
得到的返回结果类似这样: