网站内容建设和运营工作哈尔滨新闻头条最新消息
2026/2/22 15:44:54 网站建设 项目流程
网站内容建设和运营工作,哈尔滨新闻头条最新消息,电子商务网站开发设计报告,昆明网络推广哪家好JAVA i18n国际化语言配置 一、简介二、功能三、Java配置国际化步骤四、Java国际化配置工具类五、Spring Boot配置六、测试 一、简介 在Java中#xff0c;国际化#xff08;Internationalization#xff0c;通常简称为i18n#xff09;是一个过程#xff0c;它允许应用程…JAVA i18n国际化语言配置一、简介二、功能三、Java配置国际化步骤四、Java国际化配置工具类五、Spring Boot配置六、测试一、简介在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法语(法国)等。三、Java配置国际化步骤3.1 创建资源文件夹在src/main/resources目录下新建一个文件夹用于存放国际化配置文件。例如您可以创建一个名为i18n或messages的文件夹。3.2 添加语言文件3.2.1 选择Resource Bundle 进行添加配置文件3.2.2 配置要添加的语言配置文件在i18n或messages文件夹下为每个要支持的语言和地区添加.properties文件。文件名的命名规则通常是basename_language_country.properties其中basename是您的基本文件名如messageslanguage是ISO 639语言代码如en代表英语country是ISO 3166国家代码如US代表美国。例如messages_en_US.properties美国英语messages_en_GB.properties英国英语messages_zh_CN.properties简体中文messages_zh_TW.properties繁体中文台湾(会有一个Default locale默认的语言配置文件)3.2.3、 在对应的配置文件添加对应的语言信息1.zh_CN:(中文)sys.config.newParameters新增参数 sys.config.changeParameters修改参数 sys.config.newParametersExists失败参数键名已存在2.en_US:(英文)sys.config.newParametersNew parameters sys.config.changeParametersModify parameters sys.config.newParametersExistsFailed, parameter key name already exists四、Java国际化配置工具类4.1、创建MessageUtils工具类MessageUtils 工具类在国际化i18n应用中扮演着非常重要的角色它封装了与消息资源相关的常用操作使得在应用程序的不同部分中都能够方便地获取和格式化本地化消息而无需重复编写代码通过key来获取目前系统语言的value值。import org.springframework.context.MessageSource; import org.springframework.context.i18n.LocaleContextHolder; /** * 获取i18n资源文件 * * author cccl */ 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()); } }4.2、添加国际化i18n配置类import lombok.extern.slf4j.Slf4j; import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.config.annotation.InterceptorRegistration; import org.springframework.web.servlet.config.annotation.InterceptorRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; /** * 国际化i18n配置类 */ Configuration Slf4j // 实现WebMvcConfigurer接口用于自定义Spring MVC的配置 public class I18nConfig implements WebMvcConfigurer { /** * 添加拦截器到Spring MVC的拦截器链中 * * param registry 拦截器注册器用于添加和配置拦截器 */ Override public void addInterceptors(InterceptorRegistry registry) { // 创建一个自定义的国际化拦截器实例 MyI18nInterceptor myHandlerInterceptor new MyI18nInterceptor(); // 使用拦截器注册器注册自定义的国际化拦截器 InterceptorRegistration loginRegistry registry.addInterceptor(myHandlerInterceptor); // 设置需要拦截的路径模式这里配置为拦截所有路径/** loginRegistry.addPathPatterns(/**); } }4.3、添加国际化i18n拦截器import com.github.pagehelper.util.StringUtil; import lombok.extern.slf4j.Slf4j; import org.springframework.context.i18n.LocaleContextHolder; import org.springframework.web.servlet.HandlerInterceptor; import org.springframework.web.servlet.ModelAndView; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.util.Locale; /** * i18n拦截器用于从HTTP请求头中获取国际化参数并设置当前线程的Locale。 */ Slf4j public class MyI18nInterceptor implements HandlerInterceptor { /** * 在请求处理之前进行调用。 * * param request HttpServletRequest对象提供对客户端请求信息的访问 * param response HttpServletResponse对象提供对HTTP响应的控制 * param handler 被调用的处理器通常是HandlerMethod * return 如果返回false则请求处理流程将被中断并返回给客户端如果返回true则继续执行后续流程 * throws Exception 抛出异常将中断请求处理流程 */ Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { // 假设请求头中存储语言信息的键名为Language final String key Language; // 从请求头中获取语言信息 String language request.getHeader(key); // 使用自定义的字符串工具类判断语言信息是否非空 if (JoventStringUtils.isNotEmpty(language)) { // 假设语言信息格式为zh_CN或en_US这里通过下划线分割获取语言和地区信息 String[] languageParts language.split(_); // 确保分割后有两个部分 if (languageParts.length 2) { // 创建Locale对象 Locale locale new Locale(languageParts[0], languageParts[1]); // 设置当前线程的Locale LocaleContextHolder.setLocale(locale); } else { // 如果格式不正确可以记录日志或进行其他处理 log.warn(Invalid language format: {}, language); } } // 继续执行后续流程 return true; } /** * 在请求处理之后进行调用但是在视图被渲染之前Controller方法调用之后 * 通常用于处理一些需要在请求处理之后、视图渲染之前执行的逻辑 * * param request HttpServletRequest对象 * param response HttpServletResponse对象 * param handler 被调用的处理器 * param modelAndView 如果处理器方法的返回值是ModelAndView类型则为该方法的返回值否则为null */ Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) { // 可以在这里添加处理请求处理之后、视图渲染之前的逻辑 } /** * 在整个请求结束之后被调用也就是在DispatcherServlet渲染了对应的视图之后执行主要是用于进行资源清理工作 * * param request HttpServletRequest对象 * param response HttpServletResponse对象 * param handler 被调用的处理器 * param ex 如果在请求处理过程中发生异常则为该异常否则为null */ Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) { // 可以在这里添加请求处理完毕后的清理逻辑例如关闭资源等 } }五、Spring Boot配置spring: # 资源信息配置 messages: # 国际化资源文件的基础名称不包含文件后缀Spring将会在这个基础上添加语言代码和地区代码例如messages_zh_CN.properties来查找具体的资源文件 basename: i18n/messages # 国际化资源文件路径 # 当找不到特定Locale的资源文件时是否回退到系统默认的Locale。如果设置为true并且找不到特定Locale的资源文件Spring将尝试使用系统默认的Locale来加载资源文件 fallback-to-system-locale: true # 回退到系统Locale # 指定资源文件的编码格式。在读取资源文件时Spring将使用此编码格式 encoding: UTF-8 # 编码格式 # 国际化资源文件的缓存时间以秒为单位。在这段时间内相同的资源请求将不会再次加载资源文件而是从缓存中获取。设置为-1将禁用缓存 cache-duration: 3600 # 缓存持续时间秒六、测试6.1、接口Log(title 参数管理, businessType BusinessType.INSERT) GetMapping(/add) public AjaxResult add() { return AjaxResult.success(MessageUtils.message(sys.config.newParameters)); }此处截取的是请求头的Language参数那么我们在请求的时候添加一个Language参数 (具体的截取字段名自行配置)6.2 、英文请求(en_US)6.3 、中文请求(zh_CN)

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询