这是我在springboot测试国际化出现的问题。
实现国际化的步骤分为三步:
创建一个MyInternationa类来继承LocaleResolver类,
public class MyInternationa implements LocaleResolver {
@Override
public Locale resolveLocale(HttpServletRequest request) {
String lang = request.getParameter("lang");
// 国际化
Locale locale = Locale.getDefault();
if (!StringUtils.isEmpty(lang)){
String[] s = lang.split("_");
//切割为 语言 国家
locale = new Locale(s[0],s[1]);
}
return locale;
}
@Override
public void setLocale(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Locale locale) {
}
}
HTML中转化路径`
<a class="btn btn-sm" th:href="@{/index.html(lang='zh_CN')}">中文</a>
<a class="btn btn-sm" th:href="@{/index.html(lang='en_US')}">English</a>
自定义Bean,交给spring托管
@Bean
public LocaleResolver localeResolver(){
return new MyInternationa();
}
但是在中英文转化的时候出现404错误。
从地址栏可以看出,参数是没有错误的,
从这里可以看出点击中英文转换的时候没有跳转index.html界面
仔细检查了一遍和各处debug,终于发现静态资源是默认跳转static的,并不会默认跳转templates,(这是一个坑)
但是*.HTML文件是放在templates文件下,要想跳转templates文件下,必须自己自定义跳转界面。
解决方法:
创建自定义跳转,
@Configuration
public class MyConfig implements WebMvcConfigurer {
@Override
public void addViewControllers(ViewControllerRegistry registry) {
registry.addViewController("/index.html").setViewName("index");
}
意思就是地址栏是index.html的就要跳转到index.html中、
问题就是这样解决了。
注意:要想springboot自行跳转的话,就需要把html文件放在static文件下,如果不是,就需要自定义跳转。
这样国际化跳转404就解决了。