SpringBoot + Thymeleaf se da cuenta de la internacionalización

Prefacio

SpringBoot configura automáticamente los componentes que administran los archivos de recursos internacionalizados

@ConfigurationProperties(prefix = "spring.messages")
public class MessageSourceAutoConfiguration {
    
    
/**
Comma-separated list of basenames, each following the ResourceBundle convention. 
Essentially a fully-qualified classpath location. 
If it doesn't contain a package qualifier (such as "org.mypackage"),
 it will be resolved from the classpath root.
*/
//我们的配置文件可以直接放在类路径下叫message.properties
private String basename = "messages";
@Bean
	public MessageSource messageSource() {
    
    
		ResourceBundleMessageSource messageSource = new ResourceBundleMessageSource();
		if (StringUtils.hasText(this.basename)) {
    
    
		    //设置国际化资源文件的基础名
			messageSource.setBasenames(StringUtils.commaDelimitedListToStringArray(
					StringUtils.trimAllWhitespace(this.basename)));
		}
		if (this.encoding != null) {
    
    
			messageSource.setDefaultEncoding(this.encoding.name());
		}
		messageSource.setFallbackToSystemLocale(this.fallbackToSystemLocale);
		messageSource.setCacheSeconds(this.cacheSeconds);
		messageSource.setAlwaysUseMessageFormat(this.alwaysUseMessageFormat);
		return messageSource;
	}
}
	

Operación específica

1. Cree un archivo de configuración internacional y colóquelo en una carpeta debajo de los recursos (aquí solo se configuran en chino e inglés)
Inserte la descripción de la imagen aquí
2. Abra el archivo de configuración login.properties, seleccione Paquete de recursos en la esquina inferior izquierda de la parte central y luego seleccione la parte central de la esquina superior izquierda del signo "+", cree un parámetro de referencia y luego haga clic en el parámetro para configurar el contenido que muestra el navegador

Inserte la descripción de la imagen aquí
3. En el archivo de configuración application.properties, importe el archivo de configuración login.properties

spring.messages.basename=login/login

4. Escribir páginas html
Primero introduzca el motor de plantillas de thymeleaf en las etiquetas html de la página html.

<html lang="en" xmlns:th="http://www.thymeleaf.org">

Luego escriba los parámetros de login.properties en el cuerpo

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8"/>
    <title>Title</title>
</head>
<body>
<div th:text="#{login.top}">hello world</div>
<div th:text="#{login.username}">username</div>
</body>
</html>

Escriba un HelloController y visite la página html

@Controller
public class HelloController {
    
    

   //查询数据在html页面展示
    @RequestMapping("/login")
    public String success(){
    
    
        return "login";
    }
}

Por lo tanto, si el idioma del navegador es chino, se mostrará la información de configuración en chino y la información de configuración en inglés se mostrará en inglés.
Inserte la descripción de la imagen aquí

Si el chino muestra caracteres confusos, debe modificar parte de la configuración de idea.

Inserte la descripción de la imagen aquí

principio:

Locale internacionalizado (objeto de información regional) tiene un componente LocaleResolve (obtención de información de objeto regional);

		@Bean
		@ConditionalOnMissingBean
		@ConditionalOnProperty(prefix = "spring.mvc", name = "locale")
		public LocaleResolver localeResolver() {
    
    
			if (this.mvcProperties
					.getLocaleResolver() == WebMvcProperties.LocaleResolver.FIXED) {
    
    
				return new FixedLocaleResolver(this.mvcProperties.getLocale());
			}
			AcceptHeaderLocaleResolver localeResolver = new AcceptHeaderLocaleResolver();
			localeResolver.setDefaultLocale(this.mvcProperties.getLocale());
			return localeResolver;
		}
		//默认的就是根据请求头带来的区域信息获取Locale进行国际化

Inserte la descripción de la imagen aquí

Haga clic en el enlace para cambiar de internacionalización

1. Cree un componente MyLocaleResolver para permitirle heredar LocaleResolver y luego reescribir el método dentro

/**
 * 可以在连接上携带区域信息
 */
public class MyLocaleResolver implements LocaleResolver {
    
    
    @Override
    public Locale resolveLocale(HttpServletRequest request) {
    
    
        //获取参数的值
        String l = request.getParameter("l");
        Locale locale = Locale.getDefault();
        //如果不为null
        if (!StringUtils.isEmpty(l)){
    
    
            String[] split = l.split("_");
            locale = new Locale(split[0],split[1]);
        }
        return locale;
    }

    @Override
    public void setLocale(HttpServletRequest request, HttpServletResponse response, Locale locale) {
    
    

    }
}

2. Escriba una clase de configuración MyMvcConfig para que este componente sea efectivo

@Configuration
public class MyMvcConfig {
    
    
    @Bean
    public LocaleResolver localeResolver(){
    
    
        return new MyLocaleResolver();
    }
}

3. Mejora la página html

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8"/>
    <title>Title</title>
</head>
<body>
<div th:text="#{login.top}">hello world</div>
<div th:text="#{login.username}">username</div>
<a th:href="@{/login.html(l='zh_CN')}">中文</a>
<a th:href="@{/login.html(l='en_US')}">英文</a>
</body>
</html>

Haga clic en chino o inglés para cambiar el contenido correspondiente
Inserte la descripción de la imagen aquí

Supongo que te gusta

Origin blog.csdn.net/javaasd/article/details/113971016
Recomendado
Clasificación