美文网首页
23 springboot国际化

23 springboot国际化

作者: lijiaccy | 来源:发表于2018-05-20 19:49 被阅读0次

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

    整体项目结构

    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

    <!DOCTYPE html>
    <html lang="zh">
    <body>
        my name is <@spring.message "myname"/>
    </body>
    </html>
    

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

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


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



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

    如果是从后台设置呢?

    会话区域解析器之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国际化

          本文链接:https://www.haomeiwen.com/subject/cdgedftx.html