- 浏览: 125587 次
- 性别:
- 来自: 山东
最新评论
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 374工作几年,零零散散也整理了不少东西,但都是东一榔头西一棒槌的, ... -
JavaMail(一)
2011-04-26 18:04 1237浅谈邮件传输协议 SMTP(Simple Ma ... -
Tomcat配置SSL的双向认证
2011-04-26 16:58 2428证书保存在服务器端,用户通过浏览器访问时,需要 ... -
Tomcat配置SSL的客户端认证
2011-04-26 16:41 2447证书保存在服务器端,用户通过浏览器访问时,需要 ... -
Java动态编译(二)
2011-04-19 17:16 2279在上一篇(Jav ... -
Java动态编译(一)
2011-04-18 18:10 7124一般情况下对java源文件的编译均是在代码完成 ... -
Java抽象类和接口
2011-04-18 15:34 2075一个Java接口(Interface)是一些方 ... -
Java线程(三)
2011-04-15 11:51 1218浅谈synchronized应何时使用 ... -
Java线程(二)
2011-04-15 10:23 985浅谈synchronized应用于类方法和类字面量之上 ... -
Java线程(一)
2011-04-14 11:29 966线程同步:synchronized方法和syn ... -
ClassLoader
2011-04-12 16:58 1179当运行Java程序时,首先运行JVM(java虚拟 ... -
NIO第二部分复用和编码
2011-04-08 14:46 828public abstract class Sel ... -
NIO第一部分缓冲区和通道
2011-04-08 14:40 1409系统运行的性 ... -
CLASSPATH和PATH
2011-04-06 13:45 2033J2SDK(Software Devel ...
相关推荐
Java实现国际化是一个重要的技术主题,尤其对于开发面向全球用户的软件来说。这个过程涉及到将应用程序的文本、日期格式、数字格式等本地化,以便适应不同国家和地区的语言与文化习惯。在Java中,这一功能主要通过...
Java 实现国际化是一种重要的软件开发技术,特别是在构建多语言支持的应用程序时。国际化(i18n)使得软件能够适应不同国家和地区的语言环境,包括中文和英文。在这个主题中,我们将深入探讨如何使用Java和JSP进行...
总结来说,Java实现国际化涉及到创建资源bundle、配置Struts以使用这些资源,以及在Action和视图层正确引用本地化字符串。这个源码示例应该包含了上述步骤,供学习和参考。通过理解和实践这些技术,开发者能够为全球...
Java 实现国际化(I18N)是为应用程序提供多语言支持的过程,使得软件能够适应不同国家和地区的用户。I18N 是 "Internationalization" 的缩写,因为 "i" 和 "n" 之间有18个字母,这个术语在编程领域广泛使用。在这个...
下面我们将深入探讨Java中实现国际化程序的步骤和关键概念。 首先,我们需要理解`ResourceBundle`类,它是Java i18n的核心。`ResourceBundle`用于存储特定语言或区域的字符串和其他可本地化资源。这些资源通常保存...
在实现国际化时,可能会涉及到对搜索关键词的处理,比如拼音转换、词语切分等。这些功能可能与特定的区域设置有关,例如,中文搜索可能需要考虑词语的顺序、全角/半角字符的转换等问题。 在源码中,我们可能会看到...
这是利用java Annotation实现的菜单和工具栏国际化的实例,是《java学习脚印: 反射与注释(Annotation)》一文中综合实例的例子。博客参见:http://blog.csdn.net/wangdingqiaoit/article/details/20130539
本篇将深入探讨Java中实现国际化的必备工具以及相关的编码转换问题。 一、Java中的国际化 1. **资源绑定文件(Properties文件)** 在Java中,我们通常使用`.properties`文件来存储不同语言的文本资源。例如,`...
4. 如何设计和实现国际化服务,例如`I18NService`,以便在代码中调用。 5. Spring框架提供的国际化支持,如`MessageSource`和`@MessageSource`注解。 通过理解并熟练应用这些知识点,开发者可以构建出能够适应全球...
在Java中,国际化主要通过java.util包下的Locale、ResourceBundle和Format类来实现。 首先,Locale类代表一个特定的语言环境,包括语言、国家和变体。例如,"zh_CN"代表简体中文,"en_US"代表美式英语。开发者可以...
在Java中,国际化功能主要通过java.util包中的类来实现。最核心的类之一是java.util.Locale类,它表示一个特定的地理、政治或文化地区。Locale类的实例用于定义应用程序的本地化属性,如语言、国家和地区信息。通过...
在Java中,资源包(Resource Bundle)是实现国际化的核心。资源包是一系列键值对,存储了应用程序中的文本和其他可变内容,比如错误消息和用户界面字符串。通过使用`ResourceBundle`类,我们可以根据用户的`Locale`...
用Java写的一个国际化语言配置模块,可实现简单的国际化配置。
研究方法主要包括两个方面:一是利用Java内置的`ResourceBundle`及其子类,它们是Java实现国际化的核心工具,用于管理不同语言版本的文本资源。`ResourceBundle`允许开发者将字符串和其他资源存储在property文件中,...
在编程领域,实现一个国际象棋游戏是一种经典的挑战,它涉及到复杂的...以上就是“JAVA实现国际象棋算法”项目中涉及的主要知识点。通过这个项目,开发者不仅可以深入理解JAVA编程,还能提升逻辑思维和问题解决能力。
通过这个Java程序国际化教程源码,你可以看到如何组织和使用这些组件,以及如何在实际项目中实现国际化。它将涵盖如何创建和管理资源包,如何根据用户locale切换界面,以及如何处理格式化文本、日期、时间和货币等...
在Java中实现国际化通常涉及以下几个步骤: 1. 创建资源包:资源包通常是`.properties`文件,如`messages.properties`(默认语言)和`messages_de.properties`(德语版本)。每个文件包含键值对,键用于在代码中...
在这个项目中,Java是实现国际象棋游戏的主要工具。 2. **面向对象编程(OOP)**:Java基于OOP原则,将数据和操作数据的方法封装在类中。在这个项目中,可以预见会定义如`ChessBoard`、`ChessPiec`等类,分别代表...