springboot国际化i18n
springboot国际化
支持多国语言展示
1、自动式国际化:通过浏览器发送请求头携带的信息自动使用国际化
2、手动式国际化:通过点击按钮,动态更改国际化
由于springboot自动配置中已集成国际化,直接使用即可
1、创建语言包:(文件编码为:ascii)
/src/main/resources/
static/i18n/messages.properties 默认配置
static/i18n/messages_zh_CN.properties 中文配置
static/i18n/messages_en_US.properties 英文配置
static/i18n/messages_zh_TW.properties 中文繁体
2、配置文件内容:(可以为空,但key不能不写)
messages_zh_CN.propertiesuser.title=用户登录user.welcome=欢迎使用messages_en_US.propertiesuser.title=User Loginuser.welcome=Welcome
3、初始化配置:
spring.messages.basename=static/i18n/messages
4、取国际化内容:
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"%><fmt:message key="user.welcome" />
注:
此种方法是根据浏览器请求中的Accept-Language决定的
Accept-Language:zh-CN,zh;q=0.8,en-US;q=0.6,en;q=0.4
切换语言:
谷歌--设置--高级--语言--等
2.1
通过点击按钮,动态更改国际化
1、增加自定义区域解析器
import java.util.Locale;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.util.StringUtils;
import org.springframework.web.servlet.LocaleResolver;/*** @title: 自定义区域解析器* @time: 2019年11月19日** <msg>* SpringBoot默认的Locale解析器是根据请求头的区域信息进行解析的(浏览器语言)* 使用自定义的Locale解析器对url的区域信息进行解析达到点击切换区域效果* 一旦我们自定义的区域解析器注册到Spring容器中,则SpringBoot提供的将不自动注册* </msg>**/public class LocaleResolverConfig implements LocaleResolver {/*** 获取页面传输信息,执行对应的国际化*/@Overridepublic Locale resolveLocale(HttpServletRequest request) {String lang = request.getParameter("lang");if (!StringUtils.isEmpty(lang)) {String[] langSplit = lang.split("_");return new Locale(langSplit[0],langSplit[1]);}return Locale.getDefault();//使用默认配置}@Overridepublic void setLocale(HttpServletRequest request, HttpServletResponse response, Locale locale) {// 增加新语言时使用//SessionLocaleResolver localeResolver = new SessionLocaleResolver();//localeResolver.setDefaultLocale(Locale.SIMPLIFIED_CHINESE);}}
2、将自定义区域解析器注入容器
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.LocaleResolver;
/**** @title: 初始化自定义bean* @time: 2019年11月19日**/@Configuration
public class InitLocalConfig {/*** 注入-自定义区域解析器* @return*/@Beanpublic LocaleResolver localeResolver() {return new LocaleResolverConfig();}}
3、通过点击,使用对应的国际化
<a href="<%=request.getContextPath()%>/?lang=zh_CN" >中文简体</a>
<a href="<%=request.getContextPath()%>/?lang=zh_TW" >中文繁体</a>
<a href="<%=request.getContextPath()%>/?lang=en_US" >English</a>
存在的问题一:
存在iframe跳转时,请求中的Accept-Language会改变原来解析,利用session转存即可
import java.util.Locale;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.util.StringUtils;
import org.springframework.web.servlet.LocaleResolver;
import com.axa.pricingplatform.constants.CommonConstant;/**** @title: 自定义区域解析器* @time: 2019年11月19日** <msg>* SpringBoot默认的Locale解析器是根据请求头的区域信息进行解析的(浏览器语言)* 使用自定义的Locale解析器对url的区域信息进行解析达到点击切换区域效果* 一旦我们自定义的区域解析器注册到Spring容器中,则SpringBoot提供的将不自动注册* </msg>**/public class LocaleResolverConfig implements LocaleResolver {/*** 获取页面传输信息,执行对应的国际化*/@Overridepublic Locale resolveLocale(HttpServletRequest request) {String lang = request.getParameter("lang");if (!StringUtils.isEmpty(lang)) {request.getSession().setAttribute(CommonConstant.LOGIN_LANG, lang);String[] langSplit = lang.split("_");return new Locale(langSplit[0],langSplit[1]);}lang = (String) request.getSession().getAttribute(CommonConstant.LOGIN_LANG);if(!StringUtils.isEmpty(lang)){String[] langSplit = lang.split("_");return new Locale(langSplit[0],langSplit[1]);}return Locale.getDefault();//使用默认配置}}
问题二:
jstl在单独的js文件中,获取不到国际化的值
原因:
jstl、el的标签会转化为服务器端的代码执行,而js代码则在客户端执行
如果是单独的js文件,jstl、el表达式是不起作用的,
jstl、EL表达式是在服务端执行的,服务端执行完成后再传给客户端的,js是在客户端执行的,el在js前就被执行了
解决办法:
将单独的js合并至对应的jsp页面即可
springboot国际化i18n相关推荐
- springboot 使用i18n进行国际化
1.i18n介绍 i18n(其来源是英文单词 internationalization的首末字符i和n,18为中间的字符数)是"国际化"的简称.在资讯领域,国际化(i18n)指让产 ...
- SpringBoot RESTful 风格 API 多语言国际化i18n解决方案
文章目录 1 摘要 2 核心代码 2.1 多语言枚举类 2.2 多语言处理工具类 2.3 多语言的API返回状态码枚举类 2.4 多语言 API 接口返回结果封装 2.5 i18n 国际化多语言配置文 ...
- springboot配置i18n国际化
springboot实现i18n国际化,无需引入其他jar包,springboot已经内置了,只需要配置即可. 国际化主要是根据不同的国际语言来决定返回数据的语言. 添加properties文件,作为 ...
- springboot+jsp中文乱码_【spring 国际化】springMVC、springboot国际化处理详解
在web开发中我们常常会遇到国际化语言处理问题,那么如何来做到国际化呢? 你能get的知识点? 使用springgmvc与thymeleaf进行国际化处理. 使用springgmvc与jsp进行国际化 ...
- springboot国际化04
springboot国际化 1 文件结构 2 messages.properties 3 优先级 4 在application.yml中配置 5 其他文件使用 6 浏览器渲染乱码 1 文件结构 Res ...
- springboot整合i18n
springboot整合i18n-通过请求头传递参数 springboot2.0可以自动化整合i18n 一.配置文件 需要在classpath:下放置国际化文件 默认文件:messages.prope ...
- springMVC项目国际化(i18n)实现方法
SpringMVC项目国际化(i18n)实现方法 按照作息规律,每周五晚必须是分享知识的时间\(^o^)/~,这周讲点儿啥呢,项目需要逼格,咱们国际化吧(* ̄rǒ ̄)~,项目中碰到这类需求的童鞋可能并 ...
- javaweb学习总结(三十一)——国际化(i18n)
一.国际化开发概述 软件的国际化:软件开发时,要使它能同时应对世界不同地区和国家的访问,并针对不同地区和国家的访问,提供相应的.符合来访者阅读习惯的页面或数据. 国际化(internationaliz ...
- Python中国际化(i18n)完整指南
这是一个完整的指南,展示了如何为一个Python应用程序进行国际化(i18n).当我在handroll项目中添加i18n时,我很难找到支持其他语言的明确建议.这是我个人的一点经验,解释了我是如何做到这 ...
最新文章
- R语言write.xlsx函数将数据写入Excel文件:写入Excel文件并自定义表单的名称、将数据写入Excel文件新的表单(sheet)中、将文件保存为xls文件格式(而不是xlsx)
- 让人失望透顶的 CSDN 博客改版
- 随机取6位数字或字母方法
- Windows安装Python包下载工具pip遇到的问题
- 03.三月风雨愁断肠,学习大数据特别忧伤——谈谈AKS创建SQL Server大数据群集创建愁断肠
- 电商产品页多种出彩表现设计手法!
- python环境配置(二)——centos6+ 安装python3.6以及pip3
- java实验总结_Java实验总结——初学(上)
- 问题二十三:C++中debug简单的运行死机问题
- dwg文件打开的步骤具体是什么
- dnf剑魂buff等级上限_DNF:剑魂最强武器,比星之海伤害更高,无神话红10都能8000亿...
- Excel批量选中表格中所有图片
- react native Android端保持APP后台运行--封装 Headless JS
- 【企业数智化转型】知识图谱(Knowledge Graph)
- 怎么把图片的文字提取出来?
- nginx整合fastdfs出现2个master进程没有worker进程的原因以及解决方法
- Java--计算奇数和偶数例子
- 以世界杯为主题的营销活动|运营策略
- 【Hive】hive基本操作 ddl dml
- JAVA毕业设计数字家谱管理系统设计与实现计算机源码+lw文档+系统+调试部署+数据库