PD: El texto original se publicó por primera vez en la cuenta pública de WeChat: Jongxingzhi (jzman-blog)
Los artículos anteriores han probado el desarrollo de la interfaz, las plantillas Thymeleaf, la sintaxis común y el diseño de la plantilla. Puede leer los artículos anteriores antes de leer este artículo:
Antes de leer este artículo, puede leer los primeros artículos:
- Desarrollo de una interfaz en la serie Spring Boot
- Empezando con la plantilla Thymeleaf de la serie Spring Boot
- Thymeleaf sintaxis común de la serie Spring Boot
- Diseño de plantilla Thymeleaf de la serie Spring Boot
La internacionalización del proyecto Spring Boot es muy sencilla de implementar. Para asegurar la continuidad de la serie Spring Boot, la internacionalización del proyecto es también un artículo aparte. Los contenidos principales son los siguientes:
- Resolver de zona
- Crear perfil de internacionalización
- Crear clase de configuración
- Efecto de prueba
Resolver de zona
Spring proporciona un analizador regional para identificar el área de usuario, para realizar la internacionalización de las aplicaciones web, el analizador regional debe implementar la LocalResolver
interfaz se puede implementar para implementar la interfaz para crear su propia área de analizador
AcceptHeaderLocaleResolver
: El solucionador de zonas predeterminado, que resuelve zonas mediante el parámetro accept-language de la solicitud HTTP;SessionLocaleResolver
: Válido en la sesión actual, de lo contrario se restaurará al estado predeterminado;CookieLocaleResolver
: Válido dentro del período de validez de la Cookie actual, de lo contrario se restaurará al estado predeterminado;FixedLocaleResolver
: La configuración es fija yLocal
no es conveniente cambiarla dinámicamenteLocal
;- Utilice
LocaleChangeInterceptor
el área de usuario de resolución del interceptor.
A continuación se LocaleChangeInterceptor
muestran los interceptores y SessionLocaleResolver
un ejemplo para internacionalizar el proyecto Spring Boot.
Crear perfil de internacionalización
Spring Boot admite la internacionalización y es más conveniente de usar. Cree un proyecto de Spring Boot, cree una carpeta llamada i18n en recursos, luego haga clic con el botón derecho y seleccione Nuevo-> Paquete de recursos para crear un archivo de configuración correspondiente al idioma de inicio. El archivo de propiedades es el siguiente:
Application.properties luego se elimina en el archivo de configuración en la Message
ruta del archivo de la siguiente manera:
# Message路径
spring.messages.basename=i18n.home
Cómo obtener el valor en el archivo de propiedades home.properties, de la siguiente manera:
mMessageSource.getMessage("home.title", null, LocaleContextHolder.getLocale());
Crear clase de configuración
Se proporciona el uso de LocaleChangeInterceptor
interceptores y SessionLocaleResolver
parámetros correspondientes a Local
lo siguiente:
/**
* I18nConfig
*/
@Configuration
public class I18nConfig {
@Bean
public LocaleResolver localeResolver (){
return new SessionLocaleResolver();
}
@Bean
public WebMvcConfigurer webMvcConfigurer(){
return new WebMvcConfigurer() {
@Override
public void addInterceptors(InterceptorRegistry registry) {
LocaleChangeInterceptor changeInterceptor = new LocaleChangeInterceptor();
changeInterceptor.setParamName("lang");
registry.addInterceptor(changeInterceptor);
}
};
}
}
Código de caso
I18nController
como sigue:
@Controller
public class I18nController {
@GetMapping(value = "/i18n")
public String il8n() {
return "i18n";
}
}
El archivo de plantilla es el siguiente:
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>Spring Boot I18n Sample.</title>
<script>
/**
* 页面加载完成后调用
*/
onload = function() {
let href = window.location.toString();
let suffix = href.substring(href.length - 2, href.length);
let lang = document.getElementsByClassName("lang");
console.log("--suffix--" + suffix);
switch (suffix) {
case "CN":
setStatus(lang[0], lang[1], lang[2]);
break;
case "TW":
setStatus(lang[1], lang[0], lang[2]);
break;
case "US":
setStatus(lang[2], lang[1], lang[0]);
break;
default:
setStatus(lang[0], lang[1], lang[2]);
}
};
/**
* 设置语言标签状态
* @param show 已选择的语言标签
* @param def1 未选择的语言标签
* @param def2 未选择的语言标签
*/
function setStatus(show, def1, def2) {
show.style.color = "rgb(0,0,255)";
def1.style.color = "rgb(0,0,0)";
def2.style.color = "rgb(0,0,0)";
}
</script>
</head>
<body>
<h3 th:text="#{home.title}">default</h3>
<p style="font-size: 12px">
<a class="lang" href="i18n?lang=zh_CN"> 简体中文 </a>|
<a class="lang" href="i18n?lang=zh_TW"> 繁体中文 </a>|
<a class="lang" href="i18n?lang=en_US"> English</a>
</p>
</body>
</html>
Efecto de prueba
El efecto de la operación es el siguiente:
Puede seguir la cuenta pública [Jianxingzhi] para intercambiar y aprender, y responder a la palabra clave [Spring Boot] para obtener el enlace fuente del caso correspondiente.