专栏首页吉林乌拉Spring框架中的国际化支持

Spring框架中的国际化支持

我们在开发项目时,常常会需要支持多国语言,这时就会要求我们的程序支持国际化,也就是可以根据客户端系统的语言类型显示相应的文案与界面。在spring中可以很方便的开发出支持国际化的Web项目。除了spring为我们开发国际化提供了支持,在java中也为我们提供了相应的API。例如java.util.Locale类。Locale类是表示语言和国家/地区信息的本地化类,也就是通过语言和国家或地区,来确定该系统的国际化版本。这时可能有人会想为什么要通过两个参数来确定,单纯的通过语言确定不了吗?答案当然是不能的。例如我们知道,美国和英国的母语都是英语,所以这两个国家的语言类型都是英语类型,在Locale类中用cn表示。既然它们的语言类型是一样的,所以我们并不能通过一个参数来确定。下面是一些国家的语言代码和国家或地区的代号。

下面我们简单看一下Locale类的基本使用。

下面我们看一下Locale类的简单应用。我们知道不同的国家的货币符号和日期类型是不同的,所以接下来我们将通过Locale类来定制化的显示不同国家或地区的货币符号和日期类型。

Locale类除了有上述的作用外,还可以为我们开发国际化程序时提供筛选定制化文件的功能,也就是通过Locale类来为我们选择不同语言和国家的语言文件。但在开发国际化程序时除了需要上述的功能外,还需要通过配置文件中的文案显示不同的内容,也可以理解为配置文件中的文案为模板,而不同用户访问程序时,提示的信息是不同的。这时我们就需要动态更改配置文件中的文案的功能 。在Java中我们可以用占位符来解决。但在本篇中我们将使用spring为我们提供了工具类来实现上述的功能,也就是MessageFormat类。因为MessageFormat类比Java为我们的提供的API提供了更加强大的占位符功能。下面我们看一下MessageFormat类使用。

在开发国际化程序时除了动态选择不同语言的文件外,还需要的一个功能就是读取文件中的属性。在Java中我可以通过File类来读取配置文件中的属性。虽然这么做是可以的,但是这样不是很方便的获取我们想要的属性。Java为了方便我们获取配置文件中的属性,于是为我们提供了ResourceBundle类。下面我们看一下ResourceBundle类的使用。

上述的功能基本能够实现我们开发国际化程序的需求,但是spring为了我们更方便的使用,于是提供了MessageSource接口。spring为这个接口提供了很多种实现类,我们可以通过spring.xml的方式来选择不同语言的配置文件。

spring除了提供ResourceBundleMessageSource类外还提供了ReloadableResourceBundleMessageSource类来加载国际化文件。它们的区别是后者支持定时的刷新国际化文件,也就是在程序不重启的情况下,可以设置刷新的周期,以达到动态更新文件的功能。具体的配置如下。

本文分享自微信公众号 - 吉林乌拉(jilinwulacom)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-08-07

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • JavaScript糟粕部分

    JavaScript有两组相等的运算符:===和!==,以及他们邪恶的孪生兄弟==和!=。===和!==运算符能够按照你期望的方式工作。如果两个运算数类型一致且...

    嘉明
  • Java系列 | 十分钟学会JAVA IO

    不知道大家在学JAVA IO的时候,有没有被各种五花八门的构造函数之间的组合和嵌套弄得头昏脑涨,比如BufferedReader br=new Buff...

    月小水长
  • 算法:有效括号

    版权声明: ...

    Fisherman渔夫
  • Java-正则表达式学习总结

    版权声明:署名,允许他人基于本文进行创作,且必须基于与原先许可协议相同的许可协议分发本文 (Creative Commons)

    Fisherman渔夫
  • Java Concurrent AQS原理&源码概要(Java 10)

    开始说AQS之前,继续说上一篇没说完的建议,相对于看一些不知道时效性的blog,说实话,理解一个知识点最简便的方式就是看论文及源码实现了,解决一个问题最好的方式...

    邹志全
  • Java-ThreadLoal案例以及分析

    版权声明:署名,允许他人基于本文进行创作,且必须基于与原先许可协议相同的许可协议分发本文 (Creative Commons)

    Fisherman渔夫
  • 一张图看懂JVM(升级版)

    JVM总体上是由类装载子系统(ClassLoader)、运行时数据区、执行引擎、内存回收这四个部分组成。其中我们最为关注的运行时数据区,也就是JVM的内存部分则...

    用户5927304
  • Java Concurrent 偏向锁&轻量级锁&重量级锁

    再说偏向锁之前先来看一下Java 对象头,Java 对象是分为 对象头、实例数据、对齐填充三部分,创建一个Java 对象所消耗和占用的cpu和内存代价都是很高的...

    邹志全
  • java在调用System.out.println()打印一个新new的对象时,为什么会调用toString方法?

    版权声明:署名,允许他人基于本文进行创作,且必须基于与原先许可协议相同的许可协议分发本文 (Creative Commons)

    Fisherman渔夫
  • Java并发编程实战-内置锁不是重入的,那么这段代码将发生死锁-以及书籍勘误

    版权声明:署名,允许他人基于本文进行创作,且必须基于与原先许可协议相同的许可协议分发本文 (Creative Commons)

    Fisherman渔夫

扫码关注云+社区

领取腾讯云代金券