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

本文共 5309 字,大约阅读时间需要 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

 

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

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

 

转载于:https://www.cnblogs.com/GoodHelper/p/6824492.html

你可能感兴趣的文章
《java入门第一季》之面向对象(修饰符的概念和总结)
查看>>
VM虚拟机-Windows
查看>>
css 命名规范
查看>>
电梯调度(一)
查看>>
js的异常捕获
查看>>
关于F12的有效利用
查看>>
设计模式之结构型(7)-代理模式(Proxy)
查看>>
RESTful API
查看>>
七牛及阿里云OSS图片旋转问题
查看>>
C语言中可变参数函数实现原理
查看>>
stdarg.h头文件源代码分析
查看>>
Linux quota磁盘配额
查看>>
jstl之核心标签
查看>>
我和Django那些事儿(7)----debug设置成false后再说静态文件
查看>>
Java操作MySQL应用实例
查看>>
Java 数据库操作类
查看>>
快速切换公司双线网络的批处理文件
查看>>
登录之后更新导航
查看>>
SharePoint【ECMAScript对象模型系列】-- 01. ECMAScript对象模型的引入
查看>>
离线数据分析流程介绍
查看>>