- 浏览: 124680 次
- 性别:
- 来自: 山东
最新评论
1.根据不同语言环境使用不同文件
我们可以准备多个string_zh_CN.properties、string_en_US.properties等,然后根据Locale去判断当前用户的语言环境,根据不同的语言环境来使用不同的资源文件。
然后我们就可以按照如下代码所示来选择配置文件了
结合FreeMarker一起使用,见FreeMarker部分。
2.java.util.ResourceBundle
资源包包含特定于语言环境的对象。当程序需要一个特定于语言环境的资源时,程序可以从适合当前用户语言环境的资源包中加载它。
注意:
(1).将UserInfo_en_US.properties、UserInfo_zh_CN.properties放在类文件同级目录下(也可以放在其他包下面,只是在ResourceBundle.getBundle时指定其所在的全限定名即可)。
(2).中文资源文件(UserInfo_zh_CN.properties)编码方式的选择,默认是ISO-8859-1,此时需要使用java自带的工具native2ascii将中文汉字转换为ascii字符。如将"用户名"转换成"\u7528\u6237\u540d",也可以将资源文件另存为时选择编码,比如我现在的是UTF-8。
(3).java中从资源文件中读取时采用的是ISO-8859-1编码,若已经采用(2)的方式使用了native2ascii工具则直接读取即可,否则的话要根据资源文件的编码方式进行转换。如我的中文资源文件编码为UTF-8,则读取用户名后需要重新编码name = new String(name.getBytes("ISO-8859-1"), "utf-8");
(4).生成some.jar(TestResourceBundle、UserInfo_en_US.properties、UserInfo_zh_CN.properties),指定jar文件的main-class(bundle.TestResourceBundle), 将该jar文件拷贝到d:\test下
3.java.util.PropertyResourceBundle
PropertyResourceBundle 是 ResourceBundle 的一个具体子类,它使用属性文件中的静态字符串集来管理语言环境资源。
4.参数化提示信息java.text.MessageFormat
MessageFormat 提供了以与语言无关方式生成连接消息的方式。MessageFormat 获取一组对象,格式化这些对象,然后将格式化后的字符串插入到模式中的适当位置,使用运行时指定的参数替换一个消息字符串中的一部分。消息中的占位符字符串{0}用第一个运行时参数替换,{1}用第二个运行时参数替换,以此类推。
5.更新配置文件
在项目中,我们可以在服务器启动的时候读取配置文件中的内容到一个MAP或Cache中,当在程序中使用时就可以直接取,而不用每次都从配置文件读取,从而提高效率。
当我们在后来的某个时候修改了配置文件的话,我们就可以按照如下方式保存一个新的配置文件。实际上,我们保存过配置文件后,应该执行一次reload()方法,将现在新的配置文件的值从新加载到当前系统中。
我们可以准备多个string_zh_CN.properties、string_en_US.properties等,然后根据Locale去判断当前用户的语言环境,根据不同的语言环境来使用不同的资源文件。
public class TestLocale { public static void main(String[] args) { Locale locale = Locale.getDefault(); System.out.println(locale.getCountry()); //CN System.out.println(locale.getDisplayCountry()); //中国 System.out.println(locale.getDisplayName()); //中文(中国) System.out.println(locale.getLanguage()); //zh System.out.println(locale.getDisplayLanguage()); //中文 } }
然后我们就可以按照如下代码所示来选择配置文件了
Locale locale = Locale.getDefault(); String lan = locale.getLanguage(); String country = locale.getCountry(); String propsFile = "string" + lan + "_" + country + ".properties"; File file = new File(rootDir, propsFile); FileInputStream fis = new FileInputStream(file); Properties props = new Properties(); props.load(fis); props.getProperty(key);
结合FreeMarker一起使用,见FreeMarker部分。
2.java.util.ResourceBundle
资源包包含特定于语言环境的对象。当程序需要一个特定于语言环境的资源时,程序可以从适合当前用户语言环境的资源包中加载它。
UserInfo_en_US.properties username=username password=password UserInfo_zh_CN.properties username=用户名 password=密码
package bundle; public class TestResourceBundle { public static void main(String[] args) { /** * ResourceBundle resource = ResourceBundle.getBundle("bundle.UserInfo", Locale.US); * * remind : 为了能够输出username,资源文件必须有UserInfo_en_US.properties,否则总是使用中文资源文件 */ ResourceBundle resource = ResourceBundle.getBundle("bundle.UserInfo", Locale.CHINESE); String name = resource.getString("username"); try { name = new String(name.getBytes("ISO-8859-1"), "utf-8"); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } System.out.println(name); } }
注意:
(1).将UserInfo_en_US.properties、UserInfo_zh_CN.properties放在类文件同级目录下(也可以放在其他包下面,只是在ResourceBundle.getBundle时指定其所在的全限定名即可)。
(2).中文资源文件(UserInfo_zh_CN.properties)编码方式的选择,默认是ISO-8859-1,此时需要使用java自带的工具native2ascii将中文汉字转换为ascii字符。如将"用户名"转换成"\u7528\u6237\u540d",也可以将资源文件另存为时选择编码,比如我现在的是UTF-8。
(3).java中从资源文件中读取时采用的是ISO-8859-1编码,若已经采用(2)的方式使用了native2ascii工具则直接读取即可,否则的话要根据资源文件的编码方式进行转换。如我的中文资源文件编码为UTF-8,则读取用户名后需要重新编码name = new String(name.getBytes("ISO-8859-1"), "utf-8");
(4).生成some.jar(TestResourceBundle、UserInfo_en_US.properties、UserInfo_zh_CN.properties),指定jar文件的main-class(bundle.TestResourceBundle), 将该jar文件拷贝到d:\test下
D:\test>java -jar some.jar 用户名 D:\test>java -classpath some.jar butterfly.TestResourceBundle 用户名 D:\test>
3.java.util.PropertyResourceBundle
PropertyResourceBundle 是 ResourceBundle 的一个具体子类,它使用属性文件中的静态字符串集来管理语言环境资源。
FileInputStream fis = new FileInputStream(file); PropertyResourceBundle resource = new PropertyResourceBundle(fis); System.out.println(resource.getString("username"));
4.参数化提示信息java.text.MessageFormat
MessageFormat 提供了以与语言无关方式生成连接消息的方式。MessageFormat 获取一组对象,格式化这些对象,然后将格式化后的字符串插入到模式中的适当位置,使用运行时指定的参数替换一个消息字符串中的一部分。消息中的占位符字符串{0}用第一个运行时参数替换,{1}用第二个运行时参数替换,以此类推。
String messageOne = "This is the {0} directory"; System.out.println(MessageFormat.format(messageOne, "'base'")); String messageTwo = "There is {0} files under directory {1}"; System.out.println(MessageFormat.format(messageTwo, new Object[] { 4, "'base'" })); //System.out.println(MessageFormat.format(msg, new Object[] { "'luchunli'", "'用户'" })); System.out.println(MessageFormat.format(msg, "'luchunli'", "'用户'")); //输出同上,format支持可变参数
5.更新配置文件
在项目中,我们可以在服务器启动的时候读取配置文件中的内容到一个MAP或Cache中,当在程序中使用时就可以直接取,而不用每次都从配置文件读取,从而提高效率。
当我们在后来的某个时候修改了配置文件的话,我们就可以按照如下方式保存一个新的配置文件。实际上,我们保存过配置文件后,应该执行一次reload()方法,将现在新的配置文件的值从新加载到当前系统中。
public class TestPropertiesTwo { private static Map<String, String> map = new HashMap<String, String>(); static { map.put("default_password", "luchunli"); map.put("min_password_length", "5"); map.put("max_password_length", "20"); } public static void main(String[] args) { String rootDir = "d:\\test"; File file = new File(rootDir, "properties.txt"); File temp = new File(rootDir, "temp.txt"); FileInputStream fis = null; FileOutputStream fos = null; try { fis = new FileInputStream(file); BufferedReader br = new BufferedReader(new InputStreamReader(fis)); fos = new FileOutputStream(temp); PrintWriter pw = new PrintWriter(fos); StringBuffer sbf = new StringBuffer(128); String line = null; while ((line = br.readLine()) != null) { System.out.println(line); if (line.startsWith("#")) { pw.println(line); continue; } int s = line.indexOf('='); if (s == -1) { pw.println(line); continue; } String key = line.substring(0, s); String key0 = key.replace('.', '_'); String value = (String) map.get(key0); if (null == value || "".equals(value)) { pw.println(line); continue; } sbf.setLength(0); sbf.append(key); sbf.append('='); sbf.append(value); pw.println(sbf.toString()); } pw.flush(); pw.close(); br.close(); } catch (IOException e) { e.printStackTrace(); } finally { if (null != fis) { try { fis.close(); fos.close(); } catch (IOException e) { e.printStackTrace(); } } } file.delete(); temp.renameTo(file); } }
<<OVER>>
发表评论
-
闷葫芦的世界
2016-01-09 22:57 307工作几年,零零散散也整理了不少东西,但都是东一榔头西一棒槌的, ... -
JavaMail(一)
2011-04-26 18:04 1193浅谈邮件传输协议 SMTP(Simple Ma ... -
Tomcat配置SSL的双向认证
2011-04-26 16:58 2389证书保存在服务器端,用户通过浏览器访问时,需要 ... -
Tomcat配置SSL的客户端认证
2011-04-26 16:41 2401证书保存在服务器端,用户通过浏览器访问时,需要 ... -
Java动态编译(二)
2011-04-19 17:16 2236在上一篇(Jav ... -
Java动态编译(一)
2011-04-18 18:10 7084一般情况下对java源文件的编译均是在代码完成 ... -
Java抽象类和接口
2011-04-18 15:34 2033一个Java接口(Interface)是一些方 ... -
Java线程(三)
2011-04-15 11:51 1176浅谈synchronized应何时使用 ... -
Java线程(二)
2011-04-15 10:23 950浅谈synchronized应用于类方法和类字面量之上 ... -
Java线程(一)
2011-04-14 11:29 930线程同步:synchronized方法和syn ... -
ClassLoader
2011-04-12 16:58 1146当运行Java程序时,首先运行JVM(java虚拟 ... -
NIO第二部分复用和编码
2011-04-08 14:46 762public abstract class Sel ... -
NIO第一部分缓冲区和通道
2011-04-08 14:40 1383系统运行的性 ... -
CLASSPATH和PATH
2011-04-06 13:45 2000J2SDK(Software Devel ...
相关推荐
java实现国际化中英文语言切换 java语言切换JSP国际化 java实现国际化中英文语言切换 java语言切换JSP国际化
java实现国际化I18N简单实例,没用任何框架.zip java实现国际化I18N简单实例,没用任何框架.zip
NULL 博文链接:https://yuyu456.iteye.com/blog/903505
java做的实现国际化的一个简单源码,供参考!
一个详细讲解JAVA_国际化程序实现的例子 希望可以帮助到你 。
公司的,来自不易,给分。谢谢!java国际化实现框架底层源码
用Java写的一个国际化语言配置模块,可实现简单的国际化配置。
国际象棋java实现
java 电商源码 企业级开发
这是利用java Annotation实现的菜单和工具栏国际化的实例,是《java学习脚印: 反射与注释(Annotation)》一文中综合实例的例子。博客参见:http://blog.csdn.net/wangdingqiaoit/article/details/20130539
软件的国际化:软件开发时,要使它能同时对世界不同地区和国家的访问,并针对不同地区和国家的访问,提供相应的、符合来访者阅读习惯的页面或数据。
本Demo使用配置文件实现java语言的国际化,没有过多的花哨,简易明了,稍微知道点java语言的同学都可以看得明白,有不明白的地方可随时留言,
国际象棋 java 实现 可视化界面.zip
java国际化实例,内置源码,还有说明文档。源码包里有编译好的jar文件,已经可以执行,可以实现中文和英文界面的切换,无需要安装插件,调用系统资源,有需要的朋友们请下载吧。 个人体会:做项目时需要用到国际化的...
实现国际化功能最直接的方法就是为每一个国家或地区的用户单独设计页面,但这样做工作量会很大,也不易维护和升级。为了解决这个问题,现在普遍的做法是将需要国际化的资源信息保存在资源文件中,并根据本地信息来...
java国际化 里面含有代码 文档 以及实现的步骤 比较清楚明了
程序类型: 源代码...
struts2实现国际化,这是单位技术培训时的源程序,和大家共享
相信干开发这行,很多人都会用到国际化。即使你以前没用过国际化,好好看看里面文档,相信也能学会如何国际化!!!