springboot国际化
springboot国际化
这里通过session,cookie,拦截三种方式实现国际化,语文学的不好,有表述不清楚的欢迎批准,以下亲测好使。
新建国际化文件
在i18n中新建->Resource Bundle->叫做messages
新建三个properties文件,第一个就是默认的
随便选一个进去,选择Resource Bundle,然后新建一个自己需要的,后面就会有默认,中文,英文的,自己添加OK
配置文件
application.properties中添加国际化配置
spring.messages.basename=i18n/messages
spring.messages.encoding=UTF-8
freemark引入
页面中引入<#import “/spring.ftl” as spring/>
使用标签获取到国际化资源信息:
<@spring.message code=“label.pm.project.taskStage.pageTitle.list”/>
基于session、cookie、拦截实现国际化
新建配置文件I18nConfig
package com.yishi.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.LocaleResolver;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import org.springframework.web.servlet.i18n.CookieLocaleResolver;
import org.springframework.web.servlet.i18n.LocaleChangeInterceptor;
import org.springframework.web.servlet.i18n.SessionLocaleResolver;
import java.util.Locale;
/**
-
@Auther: zst
-
@Date: 2019-4-18:17:54
-
@Description:
/
@Configuration
public class I18nConfig implements WebMvcConfigurer {
/*-
session区域解析器
-
@return
*/
@Bean
public LocaleResolver localeResolver() {
SessionLocaleResolver resolver = new SessionLocaleResolver();
//这里通过设置China.US可以进行中英文转化
resolver.setDefaultLocale(Locale.CHINA);return resolver;
}
/**
- cookie区域解析器
- @return
/
/ @Bean
public LocaleResolver localeResolver() {
CookieLocaleResolver slr = new CookieLocaleResolver();
//设置默认区域,
slr.setDefaultLocale(Locale.CHINA);
slr.setCookieMaxAge(3600);//设置cookie有效期.
return slr;
}*/
-
// @Bean
// public LocaleResolver localeResolver() {
// FixedLocaleResolver slr = new FixedLocaleResolver ();
// //设置默认区域,
// slr.setDefaultLocale(Locale.US);
// return slr;
// }
@Bean
public LocaleChangeInterceptor localeChangeInterceptor() {
LocaleChangeInterceptor lci = new LocaleChangeInterceptor();
// 设置请求地址的参数,默认为:locale
lci.setParamName("lang");
return lci;
}
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(localeChangeInterceptor());
}
}
将选中的中英文属性值放到session
@RequestMapping(value = “/changeLang”)
@ResponseBody
public String changeLang(String lang, HttpServletRequest request,HttpServletResponse response, Model model,HttpSession session) {
ResultMsg resultMsg = new ResultMsg(“success”);
LocaleResolver localeResolver = RequestContextUtils.getLocaleResolver(request);
if (“zh”.equals(lang)) {
localeResolver.setLocale(request, response, new Locale(“zh”, “CN”));
resultMsg.setCode(“zh”);
} else if (“en”.equals(lang)) {
localeResolver.setLocale(request, response, new Locale(“en”, “US”));
resultMsg.setCode(“en”);
}
System.out.println(session.getAttribute(LOCALE_SESSION_ATTRIBUTE_NAME));
return JSONObject.toJSONString(resultMsg);
}
页面写法
页面中英文切换就是自己的逻辑了,我这里献丑把我的贴出来,需要的自己照着敲吧,当时写文档的时候截的图,哎!!
在登录成功后会获取语言、如果没有值,则放默认语言 传到页面进行判断