多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
[TOC] # 创建资源包和资源文件 一个资源包中的每个资源文件都必须拥有共同的基名。 除了基名,每个资源文件的名称中还必须有标识其本地信息的附加部分。 例如:一个资源包的基名是“MessageResource”,则与中文、英文环境相对应的资源文件名则为: “MessageResource_zh.properties” , “MessageResource_en.properties” ![](https://box.kancloud.cn/b7ef9fa16871e0ec9d8ce80a4b26d1d3_886x288.png) 每个资源包都应有一个默认资源文件,这个文件不带有标识本地信息的附加部分。 若ResourceBundle对象在资源包中找不到与用户匹配的资源文件,它将选择该资源包中与用户最相近的资源文件,如果再找不到,则使用默认资源文件。例如:MessageResource.properties # 资源文件的书写格式 资源文件的内容通常采用”关键字=值”的形式,软件根据关键字检索值显示在页面上。一个资源包中的所有资源文件的关键字必须相同,值则为相应国家的文字。并且资源文件中采用的是properties格式文件,所以文件中的所有字符都必须是ASCII字码,属性(properties)文件是不能保存中文的,对于像中文这样的非ACSII字符,须先进行编码。 例如: 国际化的中文环境的properties文件 MessageResource_en.properties ~~~ username=username password=password submit=submit ~~~ MessageResource_zh.properties ~~~ username=\u7528\u6237\u540d password=\u5bc6\u7801 submit=\u63d0\u4ea4 ~~~ java提供了一个native2ascII工具用于将中文字符进行编码处理,native2ascII的用法如下所示 ![](https://box.kancloud.cn/f1dd8ca3ee8c873409379e9041aaa8a3_780x436.png) # 固定文本的国际化 在JavaAPI中提供了一个ResourceBundle类用于描述一个资源包,并且 ResourceBundle类提供了相应的方法getBundle,这个方法可以根据来访者的国家地区自动获取与之对应的资源文件予以显示。 ResourceBundle类提供了一个静态方法getBundle,该方法用于装载资源文件,并创建ResourceBundle实例: ~~~ Locale currentLocale = Locale.getDefault(); ResourceBundle myResources =ResourceBundle.getBundle(basename, currentLocale); ~~~ * basename为资源包基名(且必须为完整路径)。 * 如果与该locale对象匹配的资源包子类找不到。一般情况下,则选用默认资源文件予以显示 加载资源文件后, 程序就可以调用ResourceBundle实例对象的getString方法获取指定的资源信息名称所对应的值。 ~~~ String value = myResources.getString("key"); ~~~ 范例:根据国家地区自动获取与之对应的资源文件 ~~~ public static void main(String[] args) { //根据资源包基名和语言环境加载对应的语言资源文件 ResourceBundle bundle = ResourceBundle.getBundle("com.jdxia.resource.MessageResource", Locale.CANADA); String username = bundle.getString("username"); String password = bundle.getString("password"); System.out.println(username); System.out.println(password); } ~~~ # web中使用 ~~~ //获取浏览器端的国家语言信息 Locale locale = request.getLocale(); ~~~ ~~~ //获取浏览器端的国家语言信息 Locale locale = request.getLocale(); //根据资源包基名和语言环境加载对应的语言资源文件 ResourceBundle bundle = ResourceBundle.getBundle("com.jdxia.resource.MessageResource", Locale.CANADA); String username = bundle.getString("username"); String password = bundle.getString("password"); System.out.println(username); System.out.println(password); ~~~ # jsp中使用 使用jstl标签,导入标签 ~~~ <%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %> ~~~ ~~~ <!-- fmt标签默认使用浏览器的locale --> <!-- 设置基础文件名 --> <fmt:setBundle basename="com.jdxia.resource.MessageResource" /> <fmt:message key="username"></fmt:message> <br> <fmt:message key="password"></fmt:message> <br> ~~~ # 占位符 properties ~~~ info= \u6b22\u8fce ${0} \u56de\u6765 ~~~ jsp ~~~ <fmt:setBundle basename="com.jdxia.resource.MessageResource" /> <fmt:message key="info"> <fmt:param>${param.username}</fmt:param> </fmt:message> ~~~ # 日期国际化 ~~~ <fmt:setBundle basename="com.jdxia.resource.MessageResource" /> <!-- type属性可以不写,type写上是加时分秒的 dateStyle可以不写, 写上full是加星期的 2018年8月14日 星期二 写上short是不加日期的精简 18-8-14 timeStyle可以不写, 写long是这种形式 上午12时16分29秒 写full是这种形式,加上时区 上午12时17分22秒 CST --> <fmt:formatDate value="<%=new Date() %>" type="both" dateStyle="short" timeStyle="full"></fmt:formatDate> ~~~