在我的应用程序中,我使用三种语言:
- 英语
- 俄语
- 爱沙尼亚语(例如)
通过转到以下结尾的链接来更改语言:******/?lang=en, ******/?lang=ee, ******/?lang=ru。
选择其他语言或编写随机变量时,我的页面被翻译成“默认语言”(我在中配置WebMvcConfig.java),但是(在胸腺中)的变量${#locale.language}与URL中指定的变量保持不变,也就是说写在 URL..../?lang=random中,在 -attribute 中会是<html ... lang="random">这样
问题:如果用户在 URL 中为变量输入随机值,我怎样才能做到这一点lang,我的程序会为这个变量分配默认语言(在我的情况下为 - ru)?
WebMvcConfig.java:
public class WebMvcConfig implements WebMvcConfigurer {
@Bean
public MessageSource messageSource() {
ReloadableResourceBundleMessageSource messageSource = new ReloadableResourceBundleMessageSource();
messageSource.setBasename("classpath:local/messages");
messageSource.setDefaultEncoding("UTF-8");
return messageSource;
}
@Bean
public LocaleResolver localeResolver() {
SessionLocaleResolver resolver = new SessionLocaleResolver();
resolver.setDefaultLocale(Locale.forLanguageTag("ru"));
return resolver;
}
@Bean
public LocaleChangeInterceptor localeInterceptor() {
LocaleChangeInterceptor localeInterceptor = new LocaleChangeInterceptor();
localeInterceptor.setParamName("lang");
return localeInterceptor;
}
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(localeInterceptor());
}
}
主.html:
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:th="http://www.thymeleaf.org"
th:lang="${#locale.language}">
如果您需要更多信息 - 在评论中写下它。

基于 LocaleChangeInterceptor 或 HandlerInterceptorAdapter 实现自己的拦截器。添加它来代替默认的 LocaleChangeInterceptor。
您将需要像这样重写 preHandle 方法:
从示例中可以看出,您可以通过重写 preHandle 方法来指定您需要的逻辑(替换语言和使用变量)。
答案很简单:
我们创建一个单独的文件。比方说
LanguageHandler.java。我们在其中写下以下内容:在您的配置中添加以下行:
现在一切都将在 HTML 文件中正常工作。
这是 Thymeleaf 的示例 HTML 代码: