23 springboot国际化

业务需要,所以看了一下国际化。我还是用的是freemarker做的

23 springboot国际化_第1张图片
整体项目结构

pom文件就不说了,加一个freemarker包。

配置文件application

server.port=8081
spring.messages.basename=i18n/messages
spring.freemarker.settings.auto_import=/spring.ftl as spring

然后在resouces下建立i18n文件夹。里面三个文件messages.properties,messages_en.properties,messages_zh.properties
里面样式为中文的是myname=李甲,英文的是myname=lijia。这个key是后面页面上需要调用的。

下面有个spring.ftl,这个是


拷贝出来的。对应application里面的 spring.freemarker.settings.auto_import

然后就是启动类

APP.java

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;


@SpringBootApplication
@Controller
public class App {
    public static void main(String[] args) {
        SpringApplication.run(App.class,args);
    }

    @RequestMapping("/login")
    public String login(){
        return "login";
    }
}

页面login.ftl




    my name is <@spring.message "myname"/>


启动程序输入 http://localhost:8081/login(我用的是火狐,google我这还需要重启)

然后更换火狐显示语言,在选项里面的语言栏。把英语移上去


23 springboot国际化_第2张图片

再刷新刚刚的页面,会发现变成英文的



这实现了简单的页面国际化。

如果是从后台设置呢?

会话区域解析器之SessionLocaleResolver

@Bean
public LocaleResolver localeResolver() {
    SessionLocaleResolver sessionLocaleResolver = new SessionLocaleResolver();
    sessionLocaleResolver.setDefaultLocale(Locale.US);
    return sessionLocaleResolver;
}

上面的Locale.US用的就是上面messages_en.properties文件的语言,如果改成Locale.CHINA就会使用messages_zh.properties文件的语言。
但是动态切换。添加配置类

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.WebMvcConfigurerAdapter;
import org.springframework.web.servlet.i18n.LocaleChangeInterceptor;
import org.springframework.web.servlet.i18n.SessionLocaleResolver;

@Configuration
public class I18nConfig extends WebMvcConfigurerAdapter {
     @Bean  
        public LocaleResolver localeResolver() {  
            SessionLocaleResolver slr = new SessionLocaleResolver();  
            slr.setDefaultLocale(Locale.SIMPLIFIED_CHINESE);  
            return slr;  
        }  

        @Bean  
        public LocaleChangeInterceptor localeChangeInterceptor() {  
            LocaleChangeInterceptor lci = new LocaleChangeInterceptor();  
            lci.setParamName("lang");  
            return lci;  
        }  

        @Override  
        public void addInterceptors(InterceptorRegistry registry) {  
            registry.addInterceptor(localeChangeInterceptor());  
        }  

}

然后在前台url上面加上?lang=en_US或者?lang=zh_CN来动态切换语言。
只是做个记录。

你可能感兴趣的:(23 springboot国际化)