本文转载自 - http://lavasoft.blog.51cto.com/62575/184605/ 从其中学习到了好多
一、认识国际化资源文件
在java中java.util.ResourceBundle使用详解
这个类提供软件国际化的捷径。通过此类,可以使您所编写的程序可以:轻松地本地化或翻译成不同的语言一次处理多个语言环境以后可以轻松地进行修改,支持更多的语言环境
说的简单点,这个类的作用就是读取资源属性文件(properties),然后根据.properties文件的名称信息(本地化信息),匹配当前系统的国别语言信息(也可以程序指定),然后获取相应的properties文件的内容。
使用这个类,要注意的一点是,这个properties文件的名字是有规范的:一般的命名规范是: 自定义名_语言代码_国别代码.properties,
如果是默认的,直接写为:自定义名.properties
比如:
myres_en_US.properties
myres_zh_CN.properties
myres_zh_CN.properties
myres.properties
当在中文操作系统下,如果myres_zh_CN.properties、myres.properties两个文件都存在,则优先会使用myres_zh_CN.properties,当myres_zh_CN.properties不存在时候,会使用默认的myres.properties。
没有提供语言和地区的资源文件是系统默认的资源文件。
资源文件都必须是ISO-8859-1编码,因此,对于所有非西方语系的处理,都必须先将之转换为Java Unicode Escape格式。转换方法是通过JDK自带的工具native2ascii.
请看一下测试代码
创建一个web项目TestResourceBundle在classpath(src)目录下创建一个文件包configures在再其下创建一个子包lang这是公司项目文件的标准配置
在lang目录下创建三资源文件(返回接口的各种状态值)
statusCode_en_US.properties statusCode_zh_CN.properties statusCode.properties
资源的内容是
10000=success 20000=falure
二 代码演示
创建一个工具类:ResourceBundleUtils.java 把类文件初始化的时候都以map键值对的形式存储在内从中, 这样读取任何资源文件只需要在此类中配置下,并在classpath下增见一个相应的资源文件即可。以下注释是自己测试过的结果
package com.piano.project.junit; import java.util.HashMap; import java.util.Locale; import java.util.Map; import java.util.ResourceBundle; /** * @Title: BundlesUtils.java * @date 2015-1-13 下午09:17:30 * @version V1.0 */ public class ResourceBundleUtils { public static Map<String,ResourceBundle> pro = new HashMap<String,ResourceBundle>(); /** * 在中文操作系统当指定 Locale.CHINA 或者 Locale.getDefault() * 如果有 statusCode_zh_CN.properties 存在则读这个文件 * 如果有statusCode.properties 存在则读这个文件 * 如果 statusCode_zh_CN.properties,statusCode.properties都存在则statusCode_zh_CN.properties优先级高 * 反之在英文系统同理 */ static{ //也可以这样获取资源文件 ResourceBundle bundle = ResourceBundle.getBundle("configures.lang.serviceCode", Locale.CHINA); //Locale locale = new Locale("zh", "CN"); //pro.put("zh", ResourceBundle.getBundle("resource/configures/lang/statusCode",locale)); pro.put("zh", ResourceBundle.getBundle("resource/configures/lang/statusCode",Locale.CHINA)); pro.put("en", ResourceBundle.getBundle("resource/configures/lang/statusCode",Locale.ENGLISH)); pro.put("defult", ResourceBundle.getBundle("resource/configures/lang/statusCode",Locale.getDefault())); } }
然后创建一个单元测试类 Test5.java
package com.piano.project.junit;
import java.util.Locale;
import java.util.ResourceBundle;
import org.junit.Test;
/**
* @Title: Test5.java
* @date 2015-1-13 下午09:13:37
* @version V1.0
*/
public class Test5 {
@Test
public void testCN(){
ResourceBundle ResourceBundle = ResourceBundleUtils.pro.get("zh");
System.out.println(ResourceBundle.getString("10000"));
}
@Test
public void testEN(){
ResourceBundle ResourceBundle = ResourceBundleUtils.pro.get("en");
System.out.println(ResourceBundle.getString("10000"));
}
@Test
public void testDefault(){
ResourceBundle ResourceBundle = ResourceBundleUtils.pro.get("defult");
System.out.println(ResourceBundle.getString("10000"));
}
@Test
public void testLocale(){
Locale locale = new Locale("zh", "CN");
//使用 getCountry 可获取 ISO 国家代码
System.out.println(locale.getLanguage());
//使用 getLanguage 则获取 ISO 语言代码
System.out.println(locale.getCountry());
//使用 getDisplayCountry 来获取适合向用户显示的国家名
System.out.println(locale.getDisplayCountry());
//使用 getDisplayLanguage 来获取适合向用户显示的语言名
System.out.println(locale.getDisplayLanguage());
}
其中testLocale方法中输出的结果是 zh 国家代码 CN 语言代码 中国 国家名 中文 语言名
这样就解释了在资源配置文件的配置方式 如:statusCode_zh_CN.properties,这是标准的资源文件配置方式,所以在有国际化的时候如有可以配置多国语言,系统会更具操作系统来判定加载那个对应国家的资源文件,只需要在ResourceBundleUtils类中 加载一次 例如
pro.put("defult", ResourceBundle.getBundle("resource/configures/lang/statusCode",Locale.getDefault()));
三、认识Locale
Locale 对象表示了特定的地理、政治和文化地区。需要 Locale 来执行其任务的操作称为语言环境敏感的 操作,它使用 Locale 为用户量身定制信息。例如,显示一个数值就是语言环境敏感的操作,应该根据用户的国家、地区或文化的风俗/传统来格式化该数值。
使用此类中的构造方法来创建 Locale:
Locale(String language) Locale(String language, String country) Locale(String language, String country, String variant)创建完 Locale 后,就可以查询有关其自身的信息。使用 getCountry 可获取 ISO 国家代码,使用 getLanguage 则获取 ISO 语言代码。可用使用 getDisplayCountry 来获取适合向用户显示的国家名。同样,可用使用 getDisplayLanguage 来获取适合向用户显示的语言名。有趣的是,getDisplayXXX 方法本身是语言环境敏感的,它有两个版本:一个使用默认的语言环境作为参数,另一个则使用指定的语言环境作为参数。
补充:JDK中资源加载说明:
getBundle
public static final ResourceBundle getBundle(String baseName, Locale locale)
getBundle(baseName, locale, this.getClass().getClassLoader())
,
不同之处在于要使用 ResourceBundle
的安全特权来运行 getClassLoader()
。有关搜索和实例化策略的信息,请参阅 getBundle
。
baseName
- 资源包的基本名称,是一个完全限定类名
locale
- 资源包所需的语言环境NullPointerException
- 如果 baseName
或 locale
为 null
MissingResourceException
- 如果未找到指定基本名称的资源包getBundle
尝试搜索属性资源文件。它从候选包名称生成一个路径名,用 "/" 替换所有的 "." 字符,并添加字符串 ".properties"。baseName
参数应该是一个完全限定类名。但是,为了与早期的版本兼容,Sun 的 Java SE Runtime Environment 并不对此进行检查,所以可通过指定路径名(使用 "/")而不是完全限定类名(使用 ".")来访问PropertyResourceBundle
。
如需获取更消息的信息请参见JDKjava.utilResourceBundle 详细API 有些我也没有测试到,希望大家指出其中的不足,愿意和大家一块学习进步
相关推荐
本文将深入探讨如何使用Java读取资源文件,特别是properties类型的文件。 资源文件通常存储在项目的类路径(classpath)下,可以是.properties、.txt、.xml等形式,它们提供了与代码分离的配置选项。对于....
Java读取Excel文件-附件资源
Java 读取 XPS 文件是将 XML Paper Specification (XPS) 文件内容提取并处理到 Java 应用程序中的过程。XPS 是一种基于 XML 的文件格式,主要用于创建、查看和打印文档,它与 PDF 类似,但主要在微软环境中使用。在 ...
在Java编程中,读取...总结来说,Java中读取服务器上的UTF-8 BOM文件,需要正确设置字符编码,检测并处理BOM,同时注意异常处理和资源释放。通过掌握这些知识点,开发者可以编写出稳定、高效的代码来处理这类问题。
### Java读取文件方法大全:读取File流等技术 在Java中,读取文件是一项基本且重要的操作,它可以通过多种方式实现,如字节流、字符流和基于行的读取。下面将详细介绍这些方法: #### 字节级读取:`...
这里提供的jar文件`hdf5-3.3.2.jar`是Java接口库,它封装了对HDF5文件的操作,使得Java程序员可以通过调用Java API来实现读写HDF5文件。而`libjhdf.so.3.2.1`和`jhdf5.dll`分别是Linux和Windows平台的动态链接库,...
Java读取GRIB2文件是气象和气候数据处理中常见的任务,因为GRIB(General Regularly-distributed Information in Binary form)格式是世界气象组织(WMO)推荐的标准数据存储格式,广泛用于气象预报和气候模型输出。...
### Java读取资源文件时内容过长与换行的处理 在Java开发过程中,经常会遇到需要读取资源文件的情况,比如配置文件、属性文件等。这些文件中的内容有时会非常长,或者为了提高可读性,需要进行换行处理。本文将详细...
### Java大文件读取技术详解 #### 一、引言 在进行数据处理时,经常会遇到需要从大文件中提取特定信息的需求。对于超过几百兆甚至更大的文件,传统的逐行读取方法可能会导致性能问题或者内存溢出。本文将详细介绍...
2. Java类库(.jar文件),这些包含了JavaCV的API,供Java项目导入使用。 3. 可能还有示例代码或者测试程序,帮助开发者了解如何使用JavaCV。 使用JavaCV时,开发者可以通过添加对应的依赖到项目中,然后就可以调用...
以上就是使用Java读取TXT文件并将其内容存入数据库的基本步骤。根据实际需求,可能还需要处理异常、优化性能(如批处理SQL)、验证数据格式等细节问题。在处理大规模数据时,考虑使用多线程或者流式处理来提高效率。
要实现Java读取局域网共享文件,主要涉及以下步骤和知识点: 1. **网络路径表示**:Java中,网络路径通常以UNC(Universal Naming Convention)格式表示,形如`\\hostname\shared_directory\file.txt`。这里`...
本文将详细解析如何使用Java读取文本文件,基于提供的代码示例,深入探讨其工作原理及最佳实践。 ### Java读取文本文件的基础 在Java中,读取文件主要依赖于`java.io`包中的类,如`FileReader`和`BufferedReader`...
Java读取mat文件-附件资源
`mpxj`是一个开源的Java库,专门用于读取和写入Microsoft Project文件,包括MPP格式。这个库提供了丰富的API,使得开发者可以在Java应用中方便地操作这些项目管理文件。 首先,让我们详细了解一下如何在Java中使用`...
总结来说,这个压缩包提供了一个处理跨域请求的Filter实现,结合了对Java属性文件的读取工具,以便于在Tomcat服务器上配置和管理CORS策略。开发者可以利用这些工具轻松地控制跨域访问,提升Web应用的交互性。
本篇文章将重点讲解如何使用Java读取NetCDF文件以及生成等值线的实现方法,主要涉及两个关键库:netcdf-4.3.22.jar和wContour.jar。 首先,`netcdf-4.3.22.jar`是Unidata开发的Java NetCDF库,它提供了全面的功能来...
`ResourceBundle`是Java提供的一种国际化的资源管理工具,也可以用来读取配置文件。它支持多种语言环境,适合处理多语言配置。不过,它默认只支持.properties格式: ```java ResourceBundle bundle = ...
在Java编程中,读取资源文件是一项常见的任务,特别是在开发应用程序时,我们可能需要加载配置文件、图片、音频或视频等资源。在这个场景下,我们将深入探讨如何在IntelliJ IDEA(Idea)环境中读取资源文件,特别是...
在Java编程语言中,按顺序读取文件是基础且重要的操作。这通常涉及到使用I/O流(Input/Output Stream)来处理文件数据。本篇文章将深入探讨如何在Java中实现按顺序读取文件,以及涉及的相关知识点。 首先,Java提供...