`
lclcr
  • 浏览: 125587 次
  • 性别: Icon_minigender_1
  • 来自: 山东
社区版块
存档分类
最新评论

Java实现国际化

    博客分类:
  • JAVA
阅读更多
       1.根据不同语言环境使用不同文件
       我们可以准备多个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>>
分享到:
评论

相关推荐

    java实现国际化

    Java实现国际化是一个重要的技术主题,尤其对于开发面向全球用户的软件来说。这个过程涉及到将应用程序的文本、日期格式、数字格式等本地化,以便适应不同国家和地区的语言与文化习惯。在Java中,这一功能主要通过...

    java 实现国际化 中英文语言切换

    Java 实现国际化是一种重要的软件开发技术,特别是在构建多语言支持的应用程序时。国际化(i18n)使得软件能够适应不同国家和地区的语言环境,包括中文和英文。在这个主题中,我们将深入探讨如何使用Java和JSP进行...

    java实现国际化源码

    总结来说,Java实现国际化涉及到创建资源bundle、配置Struts以使用这些资源,以及在Action和视图层正确引用本地化字符串。这个源码示例应该包含了上述步骤,供学习和参考。通过理解和实践这些技术,开发者能够为全球...

    java实现国际化I18N简单实例,没用任何框架.zip

    Java 实现国际化(I18N)是为应用程序提供多语言支持的过程,使得软件能够适应不同国家和地区的用户。I18N 是 "Internationalization" 的缩写,因为 "i" 和 "n" 之间有18个字母,这个术语在编程领域广泛使用。在这个...

    JAVA_国际化程序实现

    下面我们将深入探讨Java中实现国际化程序的步骤和关键概念。 首先,我们需要理解`ResourceBundle`类,它是Java i18n的核心。`ResourceBundle`用于存储特定语言或区域的字符串和其他可本地化资源。这些资源通常保存...

    java国际化实现框架底层源码

    在实现国际化时,可能会涉及到对搜索关键词的处理,比如拼音转换、词语切分等。这些功能可能与特定的区域设置有关,例如,中文搜索可能需要考虑词语的顺序、全角/半角字符的转换等问题。 在源码中,我们可能会看到...

    java Annotaion实现菜单和工具栏国际化

    这是利用java Annotation实现的菜单和工具栏国际化的实例,是《java学习脚印: 反射与注释(Annotation)》一文中综合实例的例子。博客参见:http://blog.csdn.net/wangdingqiaoit/article/details/20130539

    国际化 必备工具 java编写

    本篇将深入探讨Java中实现国际化的必备工具以及相关的编码转换问题。 一、Java中的国际化 1. **资源绑定文件(Properties文件)** 在Java中,我们通常使用`.properties`文件来存储不同语言的文本资源。例如,`...

    java国际化组件

    4. 如何设计和实现国际化服务,例如`I18NService`,以便在代码中调用。 5. Spring框架提供的国际化支持,如`MessageSource`和`@MessageSource`注解。 通过理解并熟练应用这些知识点,开发者可以构建出能够适应全球...

    Java国际化编程及其实现.rar

    在Java中,国际化主要通过java.util包下的Locale、ResourceBundle和Format类来实现。 首先,Locale类代表一个特定的语言环境,包括语言、国家和变体。例如,"zh_CN"代表简体中文,"en_US"代表美式英语。开发者可以...

    java国际化官方指南

    在Java中,国际化功能主要通过java.util包中的类来实现。最核心的类之一是java.util.Locale类,它表示一个特定的地理、政治或文化地区。Locale类的实例用于定义应用程序的本地化属性,如语言、国家和地区信息。通过...

    Java 程序国际化教程+源码

    在Java中,资源包(Resource Bundle)是实现国际化的核心。资源包是一系列键值对,存储了应用程序中的文本和其他可变内容,比如错误消息和用户界面字符串。通过使用`ResourceBundle`类,我们可以根据用户的`Locale`...

    Java国际化配置

    用Java写的一个国际化语言配置模块,可实现简单的国际化配置。

    Java开题报告(模板)

    研究方法主要包括两个方面:一是利用Java内置的`ResourceBundle`及其子类,它们是Java实现国际化的核心工具,用于管理不同语言版本的文本资源。`ResourceBundle`允许开发者将字符串和其他资源存储在property文件中,...

    JAVA实现国际象棋算法

    在编程领域,实现一个国际象棋游戏是一种经典的挑战,它涉及到复杂的...以上就是“JAVA实现国际象棋算法”项目中涉及的主要知识点。通过这个项目,开发者不仅可以深入理解JAVA编程,还能提升逻辑思维和问题解决能力。

    Java程序国际化教程源码下载

    通过这个Java程序国际化教程源码,你可以看到如何组织和使用这些组件,以及如何在实际项目中实现国际化。它将涵盖如何创建和管理资源包,如何根据用户locale切换界面,以及如何处理格式化文本、日期、时间和货币等...

    java国际化i18n

    在Java中实现国际化通常涉及以下几个步骤: 1. 创建资源包:资源包通常是`.properties`文件,如`messages.properties`(默认语言)和`messages_de.properties`(德语版本)。每个文件包含键值对,键用于在代码中...

    国际象棋 java 实现 可视化界面

    在这个项目中,Java是实现国际象棋游戏的主要工具。 2. **面向对象编程(OOP)**:Java基于OOP原则,将数据和操作数据的方法封装在类中。在这个项目中,可以预见会定义如`ChessBoard`、`ChessPiec`等类,分别代表...

Global site tag (gtag.js) - Google Analytics