如果想要获取相关的源码,笔记,和相关工具,,增加需求,代码重构,关注我并私信!!!
一 实现国际化配置
1 需求
在前面已经编写的UserServiceImpl类中的insertSysuser()方法中的给用户提示的信息硬编码了,不利于系统维护,如图:
如果提示的信息变化了,就需要手动找到该类中所有的提示信息来修改,很麻烦,不利于系统维护。
那么,就需要使用国际化类来把提示信息提取出来!!!
2 java基础知识
2.1 概念
国际化英文单词为:Internationalization,又称I18N,I为因为单词的第一个字母,18为这个单词的长度,而N代表这个单词的最后一个字母
2.2 Java国际化使用的类
Java国际化主要通过如下3个类完成:
java.util.ResourceBundle: 用于加载一个资源(配置文件)
java.util.Locale: 对应一个特定的国家/区域、语言环境。
java.text.MessageFormat: 用于将消息格式化
2.3 国际化资源文件
资源文件的命名可以有3种格式:
1)XXXX_language_country.properties:这种方式的资源文件会优先加载,因为它与当前环境(语言_国家)相匹配。
例如:language_country
2) XXXX_language.properties
3) XXXX_properties
例如:
messages_zh_CN.properties (中文,中华人民共和国)
messages_en_US.properties(英语,美国)
messages.properties
3 ResourcesUtil工具类的介绍
ResourceUtil.java文件由老师提供,把该文件复制的位置如下图:
需要先定义一个资源文件messages.properties,该资源文件所在位置scr/main/resources/resources
默认情况下在properties资源文件中写中文的话只会显示UNICODE编码,如果想要显示中文,需要装一个转中文的插件,
具体可以参考“开发环境.doc文档”中的“properties插件按照”一节。
安装好后,messages.properties文件中的内容如下:
注意:102的值带有参数{0}和{1}
测试代码如下:
public static void main(String[] args) { // 根据当前的操作系统环境获取语言环境 Locale locale = Locale.getDefault(); System.out.println(locale.getCountry());// 输出国家代码 System.out.println(locale.getLanguage());// 输出语言代码 // 加载国际化资源(classpath下resources目录下的messages.properties,如果是中文环境会优先找messages_zh_CN.properties)。Resources是目录名称。Messages是资源文件的文件名,该文件名默认的扩展名是properties ResourceBundle rb = ResourceBundle.getBundle("resources.messages", locale); String retValue = rb.getString("101");// 101是messages.properties文件中的key System.out.println(retValue); // 信息格式化,如果在messages.properties资源文件中有{}的参数,则需要使用MessageFormat格式化,Object[]数组表示接收传递的参数,数量根据资源文件中的{}个数决定 String value = MessageFormat.format(retValue, new Object[] { 100, 200 }); System.out.println(value); } |
4 工具类ResourcesUtil的使用
测试中的代码写起来很麻烦,因此ResourcesUtil.java就封装了这些代码。它提供了两个静态方法来从资源文件中读取配置信息,这两个重载方法如下:
4.1 方法1:public static String getValue(String fileName, String key)
如果.properties资源文件中没有参数的话,那么就使用如下的方法来获取配置信息中的内容:只需根据key来获取信息
4.2 方法2:public static String getValue(String fileName, String key, Object[] objs)
如果.properties资源文件中有参数的话(例如:{}),就需要传参数来取配置信息中的内容!该方法如下:根据key获取信息且传入动态参数,使用object[] 数组来接收参数:
至于传不传参数取决于实际应用中的资源文件中的定义!!!
4.3 工具类ResourcesUtil的测试
调用上面两个重载方法即可,如下:
.................................................... public static void main(String[] args) { //从资源文件取配置信息,不用传参 System.out.println(getValue("resources.messages", "101")); //从资源文件取配置信息,需要传参 System.out.println(getValue("resources.messages", "102",new Object[]{100,200})); |
5 本系统国际化配置的实现
5.1简述
对于“国际化配置的实现”这一节中的内容,就是对结果信息的一步步的封装,因此,只有在看完“基础配置类Config”一节的内容后,最终的结果代码才是最终的版本!!!
注意:本系统没有实现国际化,也不需要实现国际化,只是把相关的提示信息配置在了资源文件中,然后使用java提供的国际化技术来获取资源文件中配置的信息,这样做是为了利于系统维护,避免硬编码!!!
5.2 定义国际化资源文件messages.properties
将本系统中所有的提示信息--->包括:操作成功的信息、操作异常的信息、提示信息.............等,统一配置在资源文件,在本系统的java代码中只需要调用工具类ResourcesUtil.java(上面讲过的),就可以从资源文件properties中取出配置信息,从而避免硬编码.
该资源文件所在的目录如图:
messages.properties的内容如下:
默认情况下在该资源文件中写中文的话只会显示UNICODE编码,如果想要显示中文,需要装一个转中文的插件,具体可以参考“开发环境.doc文档”中的“properties插件按照”一节.
当然,你也可以针对下面的提示信息,给客户准备一份“代码大全”。作为一个大型的系统平台,这是很有用处的!!!
title=药品集中采购系统 #通用,规律:都是以数字9开头 900=出现未知错误,请尝试重新操作! 901=输入数据项为空 902=操作对象在系统中不存在 906=操作成功 907=操作成功{0}条,失败{1}条 908=操作成功{0}条,失败{1}条,<a href=\"{2}\" target=\"_blank\">点击查看失败信息</a> 909=请确定年份 910=请选择操作的记录 #用户登录 100=登录系统 101=登录用户不存在 102=登录用户不属于任何角色 103=登录用户无任何操作权限 104=登录用户无任何管理区域 105=没有操作权限 106=此操作需要登录后进行 107=欢迎{0}登录系统! 110=请输入用户账号 111=请输入密码 112=请输入验证码 113=验证码输入错误 114=用户名或密码输入错误 ......................................................................................................................................................... ....................................................................................................................................................................................................... |
5.3 国际化资源文件messages.properties的使用
在UserServiceImpl.java中使用工具类ResourcesUtil.java从资源文件中获取配置信息,如图
但是,在实际使用时需要将从资源文件中取出的配置信息填充到ResultInfo.java中的,这么看来&#x