国际化程序实现
所谓的国家化应用指的就是根据当前的语言环境读取指定的语言资源文件。
如果要想实现国际化的操作,那么首先要解决的问题就是如何读取资源文件的问题;所谓的资源文件 就是指文件后缀名称为:“*.properties”,里面保存的内容按照“key = value”的形式保存。
定义一个 Message.properties
info = 中华人民共和国
但是在properties文件中保存也并不是这样,而是会将中文转成UNICODE编码
info = \u4E2D\u534E\u4EBA\u6C11\u5171\u548C\u56FD
这里的 info 是这个信息的 key ;以后可以根据这个 key 取得对象的 value
资源读取
java.util.ResourceBundle类
在对properties文件进行资源读取的时候就需要使用 ResourceBundle 类
ResourceBundle是一个抽象类,类中有一个方法用于取得本类对象:
根据当前语言环境取出:
public static final ResourceBundle getBundle(String baseName);
根据指定语言环境取出:
public static final ResourceBundle getBundle(String baseName , Locale locale);
读取内容
简单读取:
public final String getString(String key);
格式化文本:(java.text.MessageFormat)
public static String format(String pattern , Object … argume)
实例分析:(简单读取)
package helloworld;
import java.util.ResourceBundle;
public class TestDemo {
public static void main(String [] args) {
ResourceBundle rb = ResourceBundle.getBundle("Message");
// 访问资源文件properties时,只需要提供文件名即可不要后缀格式名
System.out.println(rb.getString("info"));
}
}
实例分析:(格式化文本)
修改 properties 文件内容
info=\u4E2D\u534E\u4EBA\u6C11\u5171\u548C\u56FD
msg =\u59D3\u540D{0}\u5F53\u524D\u65F6\u95F4{1}
现在的 properties 文件中出现了{*}占位符,因为format()方法传可变长参数。
package helloworld;
import java.text.MessageFormat;
import java.util.Date;
import java.util.ResourceBundle;
public class TestDemo {
public static void main(String [] args) {
ResourceBundle rb = ResourceBundle.getBundle("Message");
// 访问资源文件properties时,只需要提供文件名即可不要后缀格式名
String str = rb.getString("msg");
System.out.println( MessageFormat.format(str,"王宇阳",new Date()));
}
}
如果需要根据国家语言不同输出不同的资源内容,则需要 Locale 类
Locale类保存的是一个国家的区域和语言编码,例如:中国 zh_CN
在定义资源文件的时候加上指定的语言编码
范例:定义中文的资源文件
Messages_zh_CN.properties
msg = 欢迎 {0} 光临
范例:定义英文的资源文件
Messages_en_US.properties
msg = Hello {0}
设置的baseName(区域和语言编码)一定是Messages,所有的语言代码由 Locale类 设置
构造方法:
public Locale (String language , String country);
取得当前语言环境:
public static Locale getDefault();
实例:读取中文的资源文件
public class TestDemo {
public static void main(String [] args) {
Locale loc = new Locale("zh","CN"); //明确定义国家的语言
ResourceBundle rb = ResourceBundle.getBundle("Messages",loc);
// 访问资源文件properties时,只需要提供文件名即可不要后缀格式名
String str = rb.getString("msg");
System.out.println(MessageFormat.format(str, "王宇阳"));
}
}
实例:读取英文的资源文档
public class TestDemo {
public static void main(String [] args) {
Locale loc = new Locale("en","US"); //明确定义国家的语言
ResourceBundle rb = ResourceBundle.getBundle("Messages",loc);
// 访问资源文件properties时,只需要提供文件名即可不要后缀格式名
String str = rb.getString("msg");
System.out.println(MessageFormat.format(str, "yuyang_Wang"));
}
}
在上两则实例中,我们通过对 Locale类对象 loc设置了指定的国家和区域,properties资源会根据 Locale 设置的baseName来进行调用指定的baseName的资源文档。
总结
资源文件:文件名称的每个单词首字母大写,后缀为:*.properties
通过ResourceBundle类可以读取在指定的CLASSPATH下的资源文件
Locale 类用于指定读取的资源文件的语言环境
Java国际化(i18n)
Java国际化(i18n) 最近在做一个网站国际化的功能.用Java做开发,使用spring+velocity. Java提供了对i18n的支持,spring对其做了集成,可以很方便的配置.主要思想就 ...
Java 国际化 语言切换
Java国际化 我们使用java.lang.Locale来构造Java国际化的情境. java.lang.Locale代表特定的地理.政治和文化.需要Locale来执行其任务的操作叫语言环境敏感的 ...
java——国际化详解
深入理解Java国际化 假设我们正在开发一个支持多国语言的Web应用程序,要求系统能够根据客户端的系统的语言类型返回对应的界面:英文的操作系统返回英文界面,而中文的操作系统则返回中文界面--这便是典型 ...
Java国际化号码验证方法,国内手机号正则表达式
Java国际化号码验证方法,国内手机号正则表达式 中国电信号段 133.149.153.173.177.180.181.189.199 中国联通号段 130.131.132.145.155.156.1 ...
Java 国际化
国际化英文单词为:Internationalization,又称I18N,I为因为单词的第一个字母,18为这个单词的长度,而N代表这个单词的最后一个字母.国际化又称本地化(Localization,L ...
(转)JAVA国际化
转:http://www.cnblogs.com/jjtech/archive/2011/02/14/1954291.html 国际化英文单词为:Internationalization,又称I18N ...
java国际化
import java.util.Locale; import org.junit.Test; /** * 使用指定的国际化文件 */ public class Demo { @Test public ...
42、Java国际化
简介 国际化的英文单词是Internationalization,有时检测I18N,类似于I18N还有L10N,是Location本地化的简写. Java或计划主要通过如下三个类实现 1.java.u ...
java国际化之时区问题处理
原文:https://moon-walker.iteye.com/blog/2396035 在国际化的项目中需要处理的日期时间问题主要有两点: 1.日期时间的国际化格式问题处理: 2.日期时间的时区问 ...
随机推荐
hibernate+mysql的连接池配置
1:连接池的必知概念 首先,我们还是老套的讲讲连接池的基本概念,概念理解清楚了,我们也知道后面是怎么回事了. 以前我们程序连接数据库的时候,每一次连接数据库都要一个连接,用完后再释放.如果频繁的 ...
Flapper Bird的学习笔记(二)
因为有一个超屌的梦想,所以就绝不会做一个孬种的追梦人! 本章节主要目的: 实现小鸟的飞行. 实现管道的随机出现. 实现相机跟随. 上次主要是场景的布置,这节全力拿下代码. 1.小鸟飞行(一种制作2D动 ...
Sping中的事务配置
关于Spring的事务配置,主要的配置文件如下(使用了C3P0连接池): <?xml version="1.0" encoding="UTF-8"?> ...
转载-python学习笔记之输入输出功能读取和写入数据
读取.写入和 Python 在 “探索 Python” 系列以前的文章中,学习了基本的 Python 数据类型和一些容器数据类型,例如tuple.string 和 list.其他文章讨论了 Pytho ...
ByteBuffer解析
一.前言 前一篇文章我们介绍了Android中直播视频技术的基础大纲知识,这里就开始一一讲解各个知识点,首先主要来看一下视频直播中的一个重要的基础核心类:ByteBuffer,这个类看上去都知道了,是 ...
ASP.NET MVC5 高级编程 第5章 表单和HTML辅助方法
参考资料第5版 第5章 表单和HTML辅助方法 5.1 表单的使用 5.1.1 action 和 method 特性 默认情况下,表单发送的是 HTT ...
使用link在两个容器之间建立连接(mysql)
在使用Docker的时候我们会常常碰到这么一种应用,就是我需要两个或多个容器,其中某些容器需要使用另外一些容器提供的服务.比如这么一种情况:我们需要一个容器来提供mysql的数据库服务,而另外两个容器 ...
激光三角法点云重建分享——halcon 方法
如今视觉应用方面单纯依靠2D图像解决问题存在很多问题.稳定性差.定位不准确.还有配合机器人抓取方面只能抓高度一致的物品.其实在Halcon算法库有非常强大的三维算法.包括点云重建.激光三角法(2D相机 ...
SAP NUMBER RANGE维护配置object FBN1 Deletion only possible if status is initial
背景: 错误日志: SAP FBN1 Deletion only possible if status is initial 场景: 如果目标机已有NUMBER RANGE 不为0,需要删除配置年为9 ...