Spring Boot国际化支持

文章目录

Spring Boot国际化支持

国际化支持应该是所有的做国际化网站都需要考虑的一个问题,Spring Boot为国际化提供了强有力的支持,本文将会通过一个例子来讲解Spring Boot的国际化。

添加Maven支持

Spring Boot本身就支持国际化,我们这里添加一个模板支持来通过页面来展示,我们这里添加thymeleaf模板:

1<dependency> 2 <groupId>org.springframework.boot</groupId> 3 <artifactId>spring-boot-starter-thymeleaf</artifactId> 4</dependency>

LocaleResolver

我们需要为系统指定一个默认的LocaleResolver:

1@Bean 2public LocaleResolver localeResolver() { 3 SessionLocaleResolver slr = new SessionLocaleResolver(); 4 slr.setDefaultLocale(Locale.US); 5 return slr; 6}

上面的例子中我们自定义了一个SessionLocaleResolver,并且指定了默认的Locale。

LocaleChangeInterceptor

接下来,我们定义一个LocaleChangeInterceptor来接收Locale的变动。这里我们通过lang参数来接收。

1@Bean 2public LocaleChangeInterceptor localeChangeInterceptor() { 3 LocaleChangeInterceptor lci = new LocaleChangeInterceptor(); 4 lci.setParamName("lang"); 5 return lci; 6}

当然,我们需要将这个Interceptor注册到SpringMVC中:

1@Override 2public void addInterceptors(InterceptorRegistry registry) { 3 registry.addInterceptor(localeChangeInterceptor()); 4}

定义Message Sources

默认情况下,Spring Boot会在src/main/resources查找message文件,默认的message文件是messages.properties,如果指定了某种语言,那么就是messages_XX.properties,其中XX是Local code。

messages.properties是key value的格式,如果在对应的local文件中没找到相应的key,则会在默认的messages.properties中查找。

我们默认定义英语的messages.properties如下:

1greeting=Hello! Welcome to our website! 2lang.change=Change the language 3lang.eng=English 4lang.fr=French

同时我们定义一个法语的message文件messages_fr.properties :

1greeting=Bonjour! Bienvenue sur notre site! 2lang.change=Changez la langue 3lang.eng=Anglais 4lang.fr=Francais

Controller文件

我们定义一个跳转的controller文件:

1@Controller 2public class PageController { 3 4 @GetMapping("/international") 5 public String getInternationalPage() { 6 return "international"; 7 } 8}

html文件

相应的html文件如下:

1<!DOCTYPE html> 2<html xmlns:th="http://www.thymeleaf.org"> 3<head> 4 <meta charset="ISO-8859-1" /> 5 <title>Home</title> 6 <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script> 7 <script> $(document).ready(function() { $("#locales").change(function () { var selectedOption = $('#locales').val(); if (selectedOption != ''){ window.location.replace('international?lang=' + selectedOption); } }); }); </script> 8</head> 9<body> 10<h1 th:text="#{greeting}"></h1> 11 12<br /><br /> 13<span th:text="#{lang.change}"></span>: 14<select id="locales"> 15 <option value=""></option> 16 <option value="en" th:text="#{lang.eng}"></option> 17 <option value="fr" th:text="#{lang.fr}"></option> 18</select> 19</body> 20</html>

运行应用程序

好了,接下来我们可以运行了。

如果我们访问http://localhost:8080/international?lang=en , 则会读取默认的英语资源:

通过切换到法语环境:http://localhost:8080/international?lang=fr, 我们可以看到:

环境已经切换过来了。

本文的例子可以参考:https://github.com/ddean2009/learn-springboot2/tree/master/springboot-Internationalization

更多教程请参考 flydean的博客

点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

MySQL部分从库上面因为大量的临时表tmp_table造成慢查询

背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_

皕杰报表之UUID

​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

2020年前端实用代码段,为你的工作保驾护航

有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )

Spring Boot国际化支持 - HelloWorld