Spring Boot中支持i18n简明教程

原创 2017年09月27日 18:37:32

引言: 本文将介绍如何在spring boot支持i18n的最简单设置。

1 环境介绍

JDK 8, Spring Boot 1.5.6.Release, IDE: STS

2 MessageSource的基本设置

名称: spring.messages.always-use-message-format
值类型: boolean, 默认值:false
描述信息: Set whether to always apply the MessageFormat rules, parsing even messages without arguments.
MessageFormat定义了如何展示信息的格式

baseName:

名称: spring.messages.basename=messages
值类型: 位置类型的字符串
描述: Comma-separated list of basenames, each following the ResourceBundle convention; 定义了属性文件所在路径

cache-seconds:

名称:spring.messages.cache-seconds
值类型:数字类型
描述: 重新加载资源文件的时间频度;Loaded resource bundle files cache expiration, in seconds. When set to -1, bundles are cached forever.

encoding:

名称: spring.messages.encoding
值类型: 格式编码,例如:UTF-8
描述: 定义资源文件内容的编码格式, Message bundles encoding.

fallback-to-system-local:

名称: spring.messages.fallback-to-system-locale
值类型: boolean, 缺省值:true
描述: 当在获取message之时,如果没有特定的locale,则默认使用当下系统的设置;Set whether to fall back to the system Locale if no files for a specific Locale have been found.

这些配置都是在application.properites的文件中。
这里给出一个示例:

spring.messages.basename=classpath:i18n/messages
spring.messages.cache-seconds=3600
spring.messages.encoding=UTF-8

注意: 这里的18n/messages需要添加classpath进行路径的配置,否则,依然会报出资源信息无法找到的错误信息。

3 Spring Boot中支持i18n

3.1 application.properties中设置

spring.messages.basename=classpath:i18n/messages
spring.messages.cache-seconds=3600
spring.messages.encoding=UTF-8

注意basename的使用设置,在项目中i18n是其中的文件夹名称,messages只是默认的文件前缀,而非文件夹的名称。
具体的路径截图如下:
这里写图片描述

3.2 定义资源文件

根据上述的截图定义的路径i18n,我们这里定义了支持中文和英文两种Locale的资源文件,在其中,我们定义了一个message: login.failure.msg。
如果其信息是中文的话,则默认会被转码成项目制定的编码格式:

login.failure.msg=\u767B\u5F55\u5931\u8D25\uFF0C\u8BF7\u7A0D\u540E\u91CD\u8BD5\u3002

这里的中文意思是: 登录失败,请稍后重试。
在资源文件中也支持,动态的参数信息,比如:

welcome.message=welcome.msg={0},\u6B22\u8FCE\u767B\u5F55\u7CFB\u7EDF\uFF0C{1}

{0}, {1}: 即允许用户通过参数传入message之内的变量。

4 使用Message展示信息

4.1 引入MessageSource

@Autowired
private MessageSource messageSource;

通过Spring提供的annotation方式引入messageSource对象。

4.2 获取message

    public Map<String, String> testCode(HttpServletRequest request) {
        Locale locale = RequestContextUtils.getLocale(request);

        log.info("Locale:" + locale.getLanguage());
        String msg1 = this.messageSource.getMessage("login.failure.msg", null, Locale.CHINA);
        log.info("Msg:" + msg1);

        String[] params = {"Jack Zhang", "今天是星期一"};
        String  msg2 = this.messageSource.getMessage("welcome.msg", params, locale);

        Map<String, String> infos = new HashMap<String,String>();
        infos.put("msg1", msg1);
        infos.put("msg2", msg2);

        return infos;
    }

在这段代码中,我们演示了两种message的使用方法。
运行结果如下:
这里写图片描述

关于Locale是基于用户请求所在的机器的Locale,通过从Request中获取对应的Locale信息。

5 总结

在Spring中提供了一套关于i18n的解决方案,可以方便地进行展示信息的替换和更新,同时也支持针对不同的语种locale的解决方案。通过i18n的方案,我们的代码中再也不用出现类似的硬编码信息了。

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

58. Spring Boot国际化(i18n)

国际化(internationalization)是设计和制造容易适应不同区域要求的产品的一种方式。它要求从产品中抽离所有地域语言,国家/地区和文化相关的元素。换言之,应用程序的功能和代码设计考虑在不...

Spring i18n

  • 2012-09-16 22:59
  • 5.57MB
  • 下载

Spring 的MVC I18N-国际化相关配置

一、基于浏览器语言的国际化配置  使用Spring的MVC,并且配置中有配置Resource文件  资源文件绑定器 -->         "messageSourc.....

Spring之i18n配置与使用

Spring的i18n配置: classpath:com/hupu/nac/i18n/message Spring的i18n使用:package com.j...

《Spring MVC I18N 配置说明》

一、基于浏览器语言的国际化配置 使用Spring的MVC,并且配置中有配置Resource文件 1 2 3 4 5 "messageSou...

spring mvc annotation and i18n configure

<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSc...

spring中MessageSource实现国际化i18n

Spring定义了访问国际化信息的MessageSource接口,并提供了几个易用的实现类。首先来了解一下该接口的几个重要方法:   String getMessage(String code, ...

Spring3.1.0实现原理分析(二).国际化(i18n)

今天和大家一起分析下Spring国际化模块的结构。什么是国际化呢? 我想引用李刚老师曾说过的一句话:“所谓国际化其实就是字符串的查找和替换过程”。查找就是根据code去资源文件中获取value,替换就...

spring mvc i18n设置

在实际的生产环境中,我们经常会使用国际化,我们使用spring mvc设置i18n。spring-mvc.xml <bean class="org.springframewo...

SPring MVC i18n 国际化使用流程Demon(Maven项目的搭建和web、spring框架的添加)

spring MVC测试国际化,Maven项目的搭建以及web、spring框架的整合。
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)