Proyecto de internacionalización de Spring Boot Series

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:

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:

  1. Resolver de zona
  2. Crear perfil de internacionalización
  3. Crear clase de configuración
  4. 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 LocalResolverinterfaz 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 y Localno es conveniente cambiarla dinámicamente Local;
  • Utilice LocaleChangeInterceptorel área de usuario de resolución del interceptor.

A continuación se LocaleChangeInterceptormuestran los interceptores y SessionLocaleResolverun 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:

Practicalo

Application.properties luego se elimina en el archivo de configuración en la Messageruta 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 LocaleChangeInterceptorinterceptores y SessionLocaleResolverparámetros correspondientes a Locallo 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.

Supongo que te gusta

Origin blog.csdn.net/jzman/article/details/110209501
Recomendado
Clasificación