博客
关于我
强烈建议你试试无所不能的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

你可能感兴趣的文章
8lession-基础类型转化
查看>>
FlashCS5作成SWC,在Flex4中使用(1)
查看>>
vue-cli目录结构及说明
查看>>
JS 数据类型转换
查看>>
WeQuant交易策略—RSI
查看>>
osgearth将视点绑定到一个节点上
查看>>
PHP 当前时间秒数+数值,然后再转换成时间。
查看>>
数据交互 axios 的使用
查看>>
bootloader,kernel,initrc
查看>>
Java中jshell脚本
查看>>
performSelector的方法
查看>>
redis
查看>>
BZOJ1645 [Usaco2007 Open]City Horizon 城市地平线
查看>>
配置IIS
查看>>
单例模式详解
查看>>
电商项目(下)
查看>>
[NOIP2015] 子串
查看>>
NSSet和NSArray区别与方法总结
查看>>
Python列表 元组 字典 集合
查看>>
foreach遍历数组、数组的转置与方阵的迹
查看>>