玩转spring boot——国际化
前言
在项目开发中,可能遇到国际化的问题,而支持国际化却是一件很头疼的事。但spring boot给出了一个非常理想和方便的方案。
一、准备工作
pom.xml:
- <?xml version="1.0" encoding="UTF-8"?>
- <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
- <modelVersion>4.0.0</modelVersion>
- <groupId>com.example</groupId>
- <artifactId>spring-boot-14</artifactId>
- <version>0.0.1-SNAPSHOT</version>
- <packaging>jar</packaging>
- <name>spring-boot-14</name>
- <description>Demo project for Spring Boot</description>
- <parent>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-parent</artifactId>
- <version>1.5.3.RELEASE</version>
- <relativePath/> <!-- lookup parent from repository -->
- </parent>
- <properties>
- <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
- <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
- <java.version>1.8</java.version>
- </properties>
- <dependencies>
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-thymeleaf</artifactId>
- </dependency>
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-web</artifactId>
- </dependency>
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-devtools</artifactId>
- <scope>runtime</scope>
- </dependency>
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-test</artifactId>
- <scope>test</scope>
- </dependency>
- </dependencies>
- <build>
- <plugins>
- <plugin>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-maven-plugin</artifactId>
- </plugin>
- </plugins>
- </build>
- </project>
pom.xml
App.java:
- package com.example;
- import org.springframework.boot.SpringApplication;
- import org.springframework.boot.autoconfigure.SpringBootApplication;
- @SpringBootApplication
- public 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
- @ComponentScan
- public 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/
- *
- */
- @Controller
- public 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:
- <!DOCTYPE html>
- <html xmlns:th="http://www.thymeleaf.org">
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
- <title>玩转spring boot——国际化</title>
- </head>
- <body>
- <h1>玩转spring boot——国际化</h1>
- <h4>
- <a href="http://www.cnblogs.com/GoodHelper/">from 刘冬的博客</a>
- </h4>
- <br />
- <br />
- <a href="/?lang=en_US">English(US)</a>
- <a href="/?lang=zh_CN">简体中文</a>
- <br />
- <h3 th:text="#{hello}"></h3>
- <br />
- <br />
- <a href="http://www.cnblogs.com/GoodHelper/">点击访问原版博客(www.cnblogs.com/GoodHelper)</a>
- </body>
- </html>
项目结构如下:
运行效果:
三、后端渲染
修改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/
- *
- */
- @Controller
- public 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:
- <!DOCTYPE html>
- <html xmlns:th="http://www.thymeleaf.org">
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
- <title>玩转spring boot——国际化</title>
- </head>
- <body>
- <h1>玩转spring boot——国际化</h1>
- <h4>
- <a href="http://www.cnblogs.com/GoodHelper/">from 刘冬的博客</a>
- </h4>
- <br />
- <br />
- <a href="/?lang=en_US">English(US)</a>
- <a href="/?lang=zh_CN">简体中文</a>
- <br />
- <h3 th:text="#{hello} + ' , ' + ${world}"></h3>
- <br />
- <br />
- <a href="http://www.cnblogs.com/GoodHelper/">点击访问原版博客(www.cnblogs.com/GoodHelper)</a>
- </body>
- </html>
一个使用了#{}标签直接调用messages的内容,另一个使用了${}标签来获取后台的值
运行效果:
总结
国际化就已经实现了,然而更完美的做法是当第一次请求时,在后台通过Request获取到一个初始的语言。当获取到的语言和用户所需要的语言不一直时,才需要在前端UI再去设置哪个语言是用户所需要的。
代码下载:https://github.com/carter659/spring-boot-14.git
如果你觉得我的博客对你有帮助,可以给我点儿打赏,左侧微信,右侧支付宝。
有可能就是你的一点打赏会让我的博客写的更好:)
玩转spring boot——国际化的更多相关文章
- 玩转spring boot——快速开始
开发环境: IED环境:Eclipse JDK版本:1.8 maven版本:3.3.9 一.创建一个spring boot的mcv web应用程序 打开Eclipse,新建Maven项目 选择quic ...
- 玩转spring boot——开篇
很久没写博客了,而这一转眼就是7年.这段时间并不是我没学习东西,而是园友们的技术提高的非常快,这反而让我不知道该写些什么.我做程序已经有十几年之久了,可以说是彻彻底底的“程序老炮”,至于技术怎么样?我 ...
- 玩转spring boot——结合redis
一.准备工作 下载redis的windows版zip包:https://github.com/MSOpenTech/redis/releases 运行redis-server.exe程序 出现黑色窗口 ...
- 玩转spring boot——AOP与表单验证
AOP在大多数的情况下的应用场景是:日志和验证.至于AOP的理论知识我就不做赘述.而AOP的通知类型有好几种,今天的例子我只选一个有代表意义的“环绕通知”来演示. 一.AOP入门 修改“pom.xml ...
- 玩转spring boot——结合JPA入门
参考官方例子:https://spring.io/guides/gs/accessing-data-jpa/ 接着上篇内容 一.小试牛刀 创建maven项目后,修改pom.xml文件 <proj ...
- 玩转spring boot——结合JPA事务
接着上篇 一.准备工作 修改pom.xml文件 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi=&q ...
- 玩转spring boot——结合AngularJs和JDBC
参考官方例子:http://spring.io/guides/gs/relational-data-access/ 一.项目准备 在建立mysql数据库后新建表“t_order” ; -- ----- ...
- 玩转spring boot——结合jQuery和AngularJs
在上篇的基础上 准备工作: 修改pom.xml <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi=&q ...
- 玩转spring boot——MVC应用
如何快速搭建一个MCV程序? 参照spring官方例子:https://spring.io/guides/gs/serving-web-content/ 一.spring mvc结合thymeleaf ...
随机推荐
- 【Java学习笔记之十三】初探Java面向对象的过程及代码实现
理解Java面向对象的重要知识点: 一. 类,对象 类?首先举一个例子:小李设计了一张汽车设计图,然后交给生产车间来生产汽车,有黑色的.红色的.白色的... 这里,汽车设计图就是我们说的类(class ...
- poj_2528Mayor's posters(线段树)
poj_2528Mayor's posters(线段树) 标签: 线段树 题目连接 Mayor's posters Time Limit: 1000MS Memory Limit: 65536K To ...
- 机器学习笔记5-Tensorflow高级API之tf.estimator
前言 本文接着上一篇继续来聊Tensorflow的接口,上一篇中用较低层的接口实现了线性模型,本篇中将用更高级的API--tf.estimator来改写线性模型. 还记得之前的文章<机器学习笔记 ...
- [国嵌攻略][173][BOA嵌入式服务器移植]
1.解压boa嵌入式web服务 tar zxvf boa-0.94.13.tar.gz 2.进入src目录生成配置文件 ./configure 3.修改生成的Makefile CC=arm-linux ...
- Web前端:改变鼠标样式
<span style="cursor:auto">浏览器设置的光标</span><br /> <span style="cur ...
- 把VueThink整合到已有ThinkPHP 5.0项目中
享 关键字: VueThink ThinkPHP5.0 Vue2.x TP5 管理后台扩展 VueThink初认识 VueThink,是一个很不错的技术框架,由广州洪睿科技的技术团队2016年研发( ...
- OpenCV3.4两种立体匹配算法效果对比
以OpenCV自带的Aloe图像对为例: 1.BM算法(Block Matching) 参数设置如下: ) + ) & -; cv::Ptr<cv::StereoBM> b ...
- CCF系列之窗口(201403-2)
试题编号: 201403-2时间限制: 1.0s 内存限制: 256.0MB 问题描述 在某图形操作系统中,有 N 个窗口,每个窗口都是一个两边与坐标轴分别平行的矩形区域.窗口的边界上的点也属于该窗口 ...
- eclipse导入项目之后有感叹号
说明项目的编译过程报错.导致原因:项目引入后,需要重新配置jar包路径. 1.右击你的项目-->Build Path-->Configure Build Path.... 2.在弹出的对话 ...
- jQuery给input绑定回车事件
dataInput为Span元素ID <script type="text/javascript" src="Scripts/jquery-1.6.2.js&quo ...