- 中英文切换
- 页面国际化实现
- 注意点
中英文切换
页面国际化实现
IDEA配置文件编码为UTF-8
创建目录i18n,创建国际化配置文件
i18n是国际化单词的缩写,来由:i到n有18个字母,类似的有:k8s,kubernetes,一个开源容器编排系统
创建目录i18n,创建登录页国际化配置文件 login.properties
创建中文/中国配置文件 login_zh_CN.properties,自动生成上级目录Resource Bundle 'login'
创建英文/美国配置文件 login_en_US.properties
打开可视化配置
添加配置
添加配置值
配置后三个配置文件自动填充
添加其他配置
国际化自动配置类
配置国际化配置文件路径在application.properties
根据MessageSourceProperties的变量配置,如:basename
thymeleaf中国际化使用 #{},如:th:text="#{login.tip}"
登录页国际化
原页面
修改标题
修改其他
国际化解析器 LocaleResolver
自定义国际化解析器
package com.qing.config;
import org.springframework.web.servlet.LocaleResolver;
import org.thymeleaf.util.StringUtils;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.Locale;
/**
* 自定义国际化解析器
*/
public class MyLocaleResolver implements LocaleResolver {
/**
* 解析请求中自定义的语言/国家
* @param request
* @return
*/
@Override
public Locale resolveLocale(HttpServletRequest request) {
// 默认的语言/国家
Locale locale = Locale.getDefault();
// 获取请求中的参数:语言/国家
String language = request.getParameter("l");
// 如果请求参数中传了语言_国家,使用传参,否则使用默认的
if (! StringUtils.isEmpty(language)) {
// zh_CN,语言_国家
String[] arr = language.split("_");
locale = new Locale(arr[0], arr[1]);
}
return locale;
}
@Override
public void setLocale(HttpServletRequest request, HttpServletResponse response, Locale locale) {
}
}
配置类MyConfig中注册自定义国际化解析器,交给Spring容器管理
@Configuration 用于定义配置类
@Bean 注解的方法放入其中,就可以注册Bean
package com.qing.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.LocaleResolver;
import org.springframework.web.servlet.config.annotation.ViewControllerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
/**
* 保留Spring Boot MVC功能,并且扩展其他MVC配置
*/
@Configuration
public class MyMvcConfig implements WebMvcConfigurer {
/**
* 将请求映射为视图,又因为thymeleaf默认提供的视图解析器,映射到template目录下
* / 映射为 index 再映射为 /templates/index.html
* /index.html 映射为 index 映射为 /templates/index.html
* @param registry
*/
@Override
public void addViewControllers(ViewControllerRegistry registry) {
registry.addViewController("/").setViewName("index");
registry.addViewController("/index.html").setViewName("index");
}
/**
* 注册自定义国际化解析器,交给Spring容器管理
* @return
*/
@Bean
public LocaleResolver localeResolver() {
return new MyLocaleResolver();
}
}
中英文切换按钮添加 href
thymeleaf中链接使用 @{},传参使用 (),如:th:href="@{/index.html(l='zh_CN')}"
测试国际化:中英文切换
注意点
需要配置国际化配置文件i18n
需要自定义按钮切换语言/国家,如:zh_CN,en_US
需要自定义国际化解析器 MyLocaleResolver
需要将自定义的国际化解析器注册到Spring容器中
@Bean注解的方法 添加到 @Configuration注解的配置类中