学习目标

  • 快速学会如何在工程中支持国际化语言。

快速查阅

专题阅读:《SpringBoot 布道系列》

源码下载:springboot-locale-i18n

— Hey Man,Don't forget to Star or Fork . —

项目结构:

 
 

使用教程

一、后台国际化

1、配置国际化参数

默认解析器:LocaleResolver 用于设置当前会话的默认的国际化语言。

默认拦截器:LocaleChangeInterceptor 指定切换国际化语言的参数名。例如?lang=zh_CN 表示读取国际化文件messages_zh_CN.properties

  1. /**
  2. * 配置国际化语言
  3. */
  4. @Configuration
  5. public class LocaleConfig {
  6. /**
  7. * 默认解析器 其中locale表示默认语言
  8. */
  9. @Bean
  10. public LocaleResolver localeResolver() {
  11. SessionLocaleResolver localeResolver = new SessionLocaleResolver();
  12. localeResolver.setDefaultLocale(Locale.US);
  13. return localeResolver;
  14. }
  15. /**
  16. * 默认拦截器 其中lang表示切换语言的参数名
  17. */
  18. @Bean
  19. public WebMvcConfigurer localeInterceptor() {
  20. return new WebMvcConfigurer() {
  21. @Override
  22. public void addInterceptors(InterceptorRegistry registry) {
  23. LocaleChangeInterceptor localeInterceptor = new LocaleChangeInterceptor();
  24. localeInterceptor.setParamName("lang");
  25. registry.addInterceptor(localeInterceptor);
  26. }
  27. };
  28. }
  29. }

2、添加国际化文件

首先在配置文件 application.yml 填写国际化文件的相对路径,表示读取classpath:/static/i18n/messages_language_country.properties 。例如:

  1. spring:
  2. messages:
  3. basename: static/i18n/messages #相对路径 开头请勿添加斜杠

然后在 classpath:/static/i18n 目录中添加如下国际化文件:

默认文件:messages.properties

  1. #这里填写默认翻译,内容可以留空,但文件必须存在。

美式英语:messages_en_US.properties

  1. #这里填写英语翻译。
  2. user.title=User Login
  3. user.welcome=Welcome
  4. user.username=Username
  5. user.password=Password
  6. user.login=Sign In

中文简体:messages_zh_CN.properties

  1. #这里填写中文翻译
  2. user.title=用户登陆
  3. user.welcome=欢迎
  4. user.username=登陆用户
  5. user.password=登陆密码
  6. user.login=登陆

中文繁体:messages_zh_TW.properties

  1. #这里填写繁体翻译
  2. user.title=用戶登陸
  3. user.welcome=歡迎
  4. user.username=登陸用戶
  5. user.password=登陸密碼
  6. user.login=登陸

3、代码国际化

通过工具类的静态方法MessageUtils.get("user.title") 快速获取当前国际化的翻译值。


  1. /**
  2. * 国际化工具类
  3. */
  4. @Component
  5. public class MessageUtils{
  6. private static MessageSource messageSource;
  7. public MessageUtils(MessageSource messageSource) {
  8. FastLocale.messageSource = messageSource;
  9. }
  10. /**
  11. * 获取单个国际化翻译值
  12. */
  13. public static String get(String msgKey) {
  14. try {
  15. return messageSource.getMessage(msgKey, null, LocaleContextHolder.getLocale());
  16. } catch (Exception e) {
  17. return msgKey;
  18. }
  19. }

二、页面国际化

首先在pom文件引入ThymeleafWeb依赖,然后在页面中只需通过th:xx="#{x.label}"即可获取对应的国际化翻译值。

  1. <dependency>
  2. <groupId>org.springframework.boot</groupId>
  3. <artifactId>spring-boot-starter-web</artifactId>
  4. </dependency>
  5. <dependency>
  6. <groupId>org.springframework.boot</groupId>
  7. <artifactId>spring-boot-starter-thymeleaf</artifactId>
  8. </dependency>

例如:

  1. <title th:text="#{user.title}">用户登陆</title>

三、JS国际化

首先在pom文件引入jQueryjquery-properties-i18n等依赖,然后在初始化后即可通过JS函数获取对应国际化文件的内容。

  1. <dependency><!--webjars版本定位器 用于省略版本号-->
  2. <groupId>org.webjars</groupId>
  3. <artifactId>webjars-locator-core</artifactId>
  4. </dependency>
  5. <dependency><!--jQuery前端依赖-->
  6. <groupId>org.webjars</groupId>
  7. <artifactId>jquery</artifactId>
  8. <version>3.3.1</version>
  9. </dependency>
  10. <dependency><!--jQuery国际化插件-->
  11. <groupId>org.webjars.bower</groupId>
  12. <artifactId>jquery-i18n-properties</artifactId>
  13. <version>1.2.7</version>
  14. </dependency>

例如:为了提高可用性 这里提供了获取当前国际化语言和获取国际化翻译的方法。

  1. <!DOCTYPE html>
  2. <html xmlns:th="http://www.thymeleaf.org">
  3. <head>
  4. <title th:text="#{user.title}">用户登陆</title>
  5. <script th:src="@{/webjars/jquery/jquery.min.js}"></script>
  6. <script th:src="@{/webjars/jquery-i18n-properties/jquery.i18n.properties.min.js}"></script>
  7. <script th:inline="javascript">
  8. //获取应用路径
  9. var ROOT = [[${#servletContext.contextPath}]];
  10. //获取默认语言
  11. var LANG_COUNTRY = [[${#locale.language+'_'+#locale.country}]];
  12. //初始化i18n插件
  13. $.i18n.properties({
  14. path: ROOT + '/i18n/',//这里表示访问路径
  15. name: 'messages',//文件名开头
  16. language: LANG_COUNTRY,//文件名语言 例如en_US
  17. mode: 'both'//默认值
  18. });
  19. //初始化i18n函数
  20. function i18n(msgKey) {
  21. try {
  22. return $.i18n.prop(msgKey);
  23. } catch (e) {
  24. return msgKey;
  25. }
  26. }
  27. //获取国际化翻译值
  28. console.log(i18n('user.title'));
  29. console.log(i18n('User Login'));
  30. </script>
  31. </head>
  32. <body>
  33. <div class="logo_box">
  34. <select id="locale">
  35. <option value="zh_CN">中文简体</option>
  36. <option value="zh_TW">中文繁体</option>
  37. <option value="en_US">English</option>
  38. </select>
  39. <h3 th:text="#{user.welcome}">欢迎登陆</h3>
  40. <form>
  41. <div class="input_outer">
  42. <span class="u_user"></span>
  43. <input id="username" name="username" class="text" type="text" th:placeholder="#{user.username}">
  44. </div>
  45. <div class="input_outer">
  46. <span class="us_uer"></span>
  47. <input id="password" name="password" class="text" type="password" th:placeholder="#{user.password}">
  48. </div>
  49. <div class="mb2">
  50. <a class="act-but submit" th:text="#{user.login}">登录</a>
  51. </div>
  52. </form>
  53. </div>
  54. <script th:inline="javascript">
  55. //选中语言
  56. $("#locale").find('option[value="' + LANG_COUNTRY + '"]').attr('selected', true);
  57. //切换语言
  58. $("#locale").change(function () {
  59. $.get(ROOT + '/?lang=' + $("#locale").val(), function () {
  60. location.reload();
  61. });
  62. });
  63. </script>
  64. </body>
  65. </html>

关于i18n插件的更多配置项请查阅 jquery-properties-i18n 官方文档

四、语言切换

很多新人配置好之后不懂得如何切换国际化语言,其实很简单,由于在前面已经配置了拦截器LocaleChangeInterceptor ,此时我们只需在任意请求中附上语言参数lang即可,当然也通过AJAX来快速切换。

例如:
默认英语:http://http://127.0.0.1:8080?lang=en_US
中文简体:http://http://127.0.0.1:8080?lang=zh_CN
中文繁体:http://http://127.0.0.1:8080?lang=zh_TW

五、工程演示

英文界面

 
 

中文界面

 
 


好用的框架随处可见,高效的整合万里挑一,关注作者,关注SpringBoot,让Java编程更简单!!

作者:yizhiwazi
链接:https://www.jianshu.com/p/e2eae08f3255
来源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

SpringBoot 快速支持国际化i18n的更多相关文章

  1. Spring使用拦截器支持国际化(转)

    Spring使用拦截器支持国际化很方便,使用时只需要两个步骤: 一.spring配置 具体配置方式如下: <!-- 资源文件绑定器,文件名称:messages.properties(没有找到时的 ...

  2. springMVC项目国际化(i18n)实现方法

    SpringMVC项目国际化(i18n)实现方法 按照作息规律,每周五晚必须是分享知识的时间\(^o^)/~,这周讲点儿啥呢,项目需要逼格,咱们国际化吧(* ̄rǒ ̄)~,项目中碰到这类需求的童鞋可能并 ...

  3. SpringData 基于SpringBoot快速入门

    SpringData 基于SpringBoot快速入门 本章通过学习SpringData 和SpringBoot 相关知识将面向服务架构(SOA)的单点登录系统(SSO)需要的代码实现.这样可以从实战 ...

  4. springboot快速使用

    1.编写SpringConfig 用于实例化Spring容器 @Configuration //通过该注解来表明该类是一个Spring的配置,相当于一个xml文件 @Bean // 通过该注解来表明是 ...

  5. 使用Springboot快速搭建SSM框架

    Spring Boot设计目的是用来简化Spring应用的初始搭建以及开发过程.该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置. 一.环境准备 Idea 2017 或 201 ...

  6. 让QT/Embedded支持国际化

    让QT/Embedded支持国际化 环境配置: Qt/Embedded ,在主机和目标板上存放路径都为:/root/qt-embedded-free- Qt/X11 3.3 (主要用到其中的lupda ...

  7. spring 国际化i18n配置

    i18n(其来源是英文单词 internationalization的首末字符i和n,18为中间的字符数)是“国际化”的简称.在资讯领域,国际化(i18n)指让产品(出版物,软件,硬件等)无需做大的改 ...

  8. spring 国际化-i18n

    i18n(其 来源是英文单词 internationalization的首末字符i和n,18为中间的字符数)是“国际化”的简称.在资讯领域,国际化(i18n)指让产品(出版 物,软件,硬件等)无需做大 ...

  9. SPRING-BOOT系列之SpringBoot快速入门

    今天 , 正式来介绍SpringBoot快速入门 : 可以去如类似 https://docs.spring.io/spring-boot/docs/2.1.0.BUILD-SNAPSHOT/refer ...

随机推荐

  1. 【leetcode】1039. Minimum Score Triangulation of Polygon

    题目如下: Given N, consider a convex N-sided polygon with vertices labelled A[0], A[i], ..., A[N-1] in c ...

  2. VM虚拟机中MAC OS调整磁盘大小

    1.打开终端,输入diskutil list: 2.从显示的列表中找到你需要扩展的分区(是分区不是磁盘,分区的ID一般为diskXsX): 3.然后输入 diskutil resizeVolume d ...

  3. 【CF1243A】Maximum Square【贪心】

    题意:给你n个长度为ai的木板,求最大能拼成的矩形为多大 题解:显然贪心每次选最大的进去拼,那么剧需要枚举矩形长度x,看最长的k个能够拼出长度为x的矩形即可 #include<iostream& ...

  4. 在getview方法中有三个参数,起到优化的部分为ViewHolder的使用,主要方法setTag(),getTag()

    适配器代码如下: public class Myadapter extends BaseAdapter { List<String> date; Context context; //构造 ...

  5. 腾讯云服务器centos通过yum安装mysql数据库

    安装mysql有两种: 1-可以使用yum安装, 2-可以自己下载安装包安装mysql, 腾讯云的centos系统自带了yum,所以用yum安装方便点 安装步骤 1-查看yum源中是否有mysql y ...

  6. 关于C(n,m) 的奇偶 ,与C(n,0),C(n,1),C(n,2)…C(n,n).当中有多少个奇数

    (n & m) == m  为奇数 C(n,0),C(n,1),C(n,2)…C(n,n).当中有多少个奇数 第一种想法是Lucas定理推导,我们分析一下 C(n,m)%2,那么由lucas定 ...

  7. WCF Error Handling

    https://docs.microsoft.com/en-us/dotnet/framework/wcf/wcf-error-handling The errors encountered by a ...

  8. undo管理

    undo segments的extents 的状态共有四种,free ,active , inacitve, expired  SQL> select SEGMENT_NAME,TABLESPA ...

  9. Java多线程,实现卖电影票的业务

    本篇重点:多线程共享资源时发生的互斥问题 一般的我们售卖电影票或者火车票时会有多个窗口同时买票, 我们来看测试代码:主方法new一个Ticket(一个堆),之后三个线程来启动(三个窗口买票) clas ...

  10. read_ila

    close all; clc; %clear; %点数 %point=40960; fft_point=200; show_point=200; end_point=1024; FS=30.72;%% ...