springboot国际化

这里通过session,cookie,拦截三种方式实现国际化,语文学的不好,有表述不清楚的欢迎批准,以下亲测好使。

新建国际化文件

在i18n中新建->Resource Bundle->叫做messages
新建三个properties文件,第一个就是默认的
随便选一个进去,选择Resource Bundle,然后新建一个自己需要的,后面就会有默认,中文,英文的,自己添加OK

springboot国际化
springboot国际化
springboot国际化
springboot国际化

配置文件

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”/>
springboot国际化

基于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 {
    /
    *

    /**

    • 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);
}

页面写法

页面中英文切换就是自己的逻辑了,我这里献丑把我的贴出来,需要的自己照着敲吧,当时写文档的时候截的图,哎!!
springboot国际化
springboot国际化
springboot国际化
springboot国际化
在登录成功后会获取语言、如果没有值,则放默认语言 传到页面进行判断
springboot国际化

相关文章: