在Java中,国际化(Internationalization,通常简称为i18n)是一个过程,它允许应用程序适应不同的语言和地区设置,从而能够支持全球用户。Java平台为国际化提供了强大的支持,包括Locale类、ResourceBundle类以及用于格式化日期、数字和货币的类。
1.支持多语言:
应用程序可以显示多种语言的文本,包括但不限于英文、中文、法文等。通过使用ResourceBundle,可以为每种语言提供独立的资源文件(通常是.properties文件),其中包含该语言的文本。
2.自动选择语言:
Java的Locale类允许应用程序根据用户的偏好或系统设置自动选择适当的语言。例如,如果用户的操作系统设置为法语,那么应用程序将尝试加载法语的资源文件。格式化日期、数字和货币
3.用户手动切换语言:
应用程序通常还允许用户手动切换语言,即使他们的系统设置或浏览器默认语言不是他们想要使用的语言。这可以通过在应用程序中提供语言选择界面或设置选项来实现。
4.前后端文字、校验、消息提醒的国际化:
国际化不仅限于用户界面上的文本,还包括后端代码中的字符串、错误消息、验证提示等。通过使用外部化的字符串和消息,可以确保整个应用程序的文本都是可翻译的。
5.通过AOP切面实现多语言的配置:
这是一个高级特性,允许开发人员使用面向切面编程(AOP)来自动处理对象的字符串属性,并根据配置文件中的语言设置进行替换。
这种方法可以确保即使在复杂的业务逻辑中,字符串也能被正确地翻译成用户所需的语言。
配置文件命名规则:
在Java国际化中,配置文件必须遵循特定的命名规则,以便Java能够正确识别。
例如,一个名为“messages”的资源束文件可以有以下命名的资源文件:messages.properties(默认)、messages_en_US.properties(英语(美国))、messages_fr_FR.properties(法语(法国))等。
在src/main/resources目录下新建一个文件夹,用于存放国际化配置文件。
例如,您可以创建一个名为i18n或messages的文件夹。
3.2.1选择ResourceBundle进行添加配置文件
3.2.2配置要添加的语言配置文件
在i18n或messages文件夹下,为每个要支持的语言和地区添加.properties文件。文件名的命名规则通常是basename_language_country.properties,其中basename是您的基本文件名(如messages),language是ISO639语言代码(如en代表英语),country是ISO3166国家代码(如US代表美国)。
例如:
messages_en_US.properties(美国英语)messages_en_GB.properties(英国英语)messages_zh_CN.properties(简体中文)messages_zh_TW.properties(繁体中文,台湾)
(会有一个Defaultlocale默认的语言配置文件)
3.2.3、在对应的配置文件添加对应的语言信息
1.zh_CN:(中文)
sys.config.newParameters=新增参数sys.config.changeParameters=修改参数sys.config.newParametersExists=失败,参数键名已存在2.en_US:(英文)
sys.config.newParameters=Newparameterssys.config.changeParameters=Modifyparameterssys.config.newParametersExists=Failed,parameterkeynamealreadyexists
importorg.springframework.context.MessageSource;importorg.springframework.context.i18n.LocaleContextHolder;/***获取i18n资源文件**@authorcccl*/publicclassMessageUtils{/***根据消息键和参数获取消息委托给springmessageSource**@paramcode消息键*@paramargs参数*@return获取国际化翻译值*/publicstaticStringmessage(Stringcode,Object...args){MessageSourcemessageSource=SpringUtils.getBean(MessageSource.class);returnmessageSource.getMessage(code,args,LocaleContextHolder.getLocale());}}
importlombok.extern.slf4j.Slf4j;importorg.springframework.context.annotation.Configuration;importorg.springframework.web.servlet.config.annotation.InterceptorRegistration;importorg.springframework.web.servlet.config.annotation.InterceptorRegistry;importorg.springframework.web.servlet.config.annotation.WebMvcConfigurer;/***国际化(i18n)配置类*/@Configuration@Slf4j//实现WebMvcConfigurer接口,用于自定义SpringMVC的配置publicclassI18nConfigimplementsWebMvcConfigurer{/***添加拦截器到SpringMVC的拦截器链中**@paramregistry拦截器注册器,用于添加和配置拦截器*/@OverridepublicvoidaddInterceptors(InterceptorRegistryregistry){//创建一个自定义的国际化拦截器实例MyI18nInterceptormyHandlerInterceptor=newMyI18nInterceptor();//使用拦截器注册器注册自定义的国际化拦截器InterceptorRegistrationloginRegistry=registry.addInterceptor(myHandlerInterceptor);//设置需要拦截的路径模式,这里配置为拦截所有路径("/**")loginRegistry.addPathPatterns("/**");}}
@Log(title="参数管理",businessType=BusinessType.INSERT)@GetMapping("/add")publicAjaxResultadd(){returnAjaxResult.success(MessageUtils.message("sys.config.newParameters"));}此处截取的是请求头的Language参数,那么我们在请求的时候添加一个Language参数(具体的截取字段名自行配置)