博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
玩转spring boot——国际化
阅读量:5930 次
发布时间:2019-06-19

本文共 5255 字,大约阅读时间需要 17 分钟。

前言


在项目开发中,可能遇到国际化的问题,而支持国际化却是一件很头疼的事。但spring boot给出了一个非常理想和方便的方案。

 

一、准备工作


 

pom.xml:

4.0.0
com.example
spring-boot-14
0.0.1-SNAPSHOT
jar
spring-boot-14
Demo project for Spring Boot
org.springframework.boot
spring-boot-starter-parent
1.5.3.RELEASE
UTF-8
UTF-8
1.8
org.springframework.boot
spring-boot-starter-thymeleaf
org.springframework.boot
spring-boot-starter-web
org.springframework.boot
spring-boot-devtools
runtime
org.springframework.boot
spring-boot-starter-test
test
org.springframework.boot
spring-boot-maven-plugin
pom.xml

 

App.java:

package com.example;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplicationpublic class App {    public static void main(String[] args) {        SpringApplication.run(App.class, args);    }}
App.java

 

创建国际化配置文件:LocaleConfig.java

 

package com.example;import java.util.Locale;import org.springframework.boot.autoconfigure.EnableAutoConfiguration;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.ComponentScan;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@EnableAutoConfiguration@ComponentScanpublic class LocaleConfig extends WebMvcConfigurerAdapter {    @Bean    public LocaleResolver localeResolver() {        SessionLocaleResolver slr = new SessionLocaleResolver();        // 默认语言        slr.setDefaultLocale(Locale.US);        return slr;    }    @Bean    public LocaleChangeInterceptor localeChangeInterceptor() {        LocaleChangeInterceptor lci = new LocaleChangeInterceptor();        // 参数名        lci.setParamName("lang");        return lci;    }    @Override    public void addInterceptors(InterceptorRegistry registry) {        registry.addInterceptor(localeChangeInterceptor());    }}

 

MainController.java:

package com.example;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.GetMapping;/** * 控制器 博客出处:http://www.cnblogs.com/GoodHelper/ * */@Controllerpublic class MainController {    @GetMapping("/")    public String index() {        return "index";    }}

 

在resources目录增加两个properties文件,分别为:

messages_en_US.properties:

hello=hello

messages_zh_CN.properties:

hello=\u4F60\u597D

 

二、前端调用


 

在thymeleaf模板引擎中使用#{}的标签就能调用messages中的内容

index.html:

玩转spring boot——国际化

玩转spring boot——国际化

from 刘冬的博客

English(US) 简体中文

点击访问原版博客(www.cnblogs.com/GoodHelper)

 

项目结构如下:

 

 

运行效果:

 

 

三、后端渲染


 

 

修改MainController类:

package com.example;import java.util.Locale;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.context.MessageSource;import org.springframework.context.i18n.LocaleContextHolder;import org.springframework.stereotype.Controller;import org.springframework.ui.Model;import org.springframework.web.bind.annotation.GetMapping;/** * 控制器 博客出处:http://www.cnblogs.com/GoodHelper/ * */@Controllerpublic class MainController {    @Autowired    private MessageSource messageSource;    @GetMapping("/")    public String index(Model model) {        Locale locale = LocaleContextHolder.getLocale();        model.addAttribute("world", messageSource.getMessage("world", null, locale));        return "index";    }}

其中,MessageSource类可以获取messages的内容。

 

index.html:

玩转spring boot——国际化

玩转spring boot——国际化

from 刘冬的博客

English(US) 简体中文

点击访问原版博客(www.cnblogs.com/GoodHelper)

 一个使用了#{}标签直接调用messages的内容,另一个使用了${}标签来获取后台的值

 

运行效果:

 

 总结


 

  国际化就已经实现了,然而更完美的做法是当第一次请求时,在后台通过Request获取到一个初始的语言。当获取到的语言和用户所需要的语言不一直时,才需要在前端UI再去设置哪个语言是用户所需要的。

 

代码下载:https://github.com/carter659/spring-boot-14.git

 

如果你觉得我的博客对你有帮助,可以给我点儿打赏,左侧微信,右侧支付宝。

有可能就是你的一点打赏会让我的博客写的更好:)

 

你可能感兴趣的文章
阿里开发者招聘节 | 面试题14:如何实现两金额数据相加(最多小数点两位)...
查看>>
企业分布式微服务云SpringCloud SpringBoot mybatis(八)消息总线(Spring Cloud Bus)
查看>>
logback pattern
查看>>
推荐的JVM参数
查看>>
PHP类UTF8编码内的繁简转换-繁体-简体
查看>>
晒晒工作中的静态文件大小控制制度
查看>>
当存储已成白菜
查看>>
Starting httpd: (13)Permission denied: make_sock: could not bind to address 0.0.0.0:9000
查看>>
vim编辑C++代码寻找标准库中结构的的定义
查看>>
CSS3 Flex布局(容器)
查看>>
Apache 重写机制
查看>>
Zabbix中禁用guest用户
查看>>
我的友情链接
查看>>
21.Azure备份Azure上的虚拟机(下)
查看>>
物理主机虚拟化环境ESXI支持VLAN
查看>>
linux备份
查看>>
TP-LINK TL-WVR300版无线路由器手工设置
查看>>
我的友情链接
查看>>
java基础(四)常用类/算法
查看>>
获取三个数的最大乘积 Maximum Product of Three Numbers
查看>>