⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 msg.java

📁 java版本的MSN,供大家交流学习使用
💻 JAVA
字号:
/* * @(#)Msg.java * * Copyright (c) 2002, Jang-Ho Hwang * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 	1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 	2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * 	3. Neither the name of the Jang-Ho Hwang nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * *    $Id: Msg.java,v 1.10 2004/05/31 06:21:02 xrath Exp $ */package rath.jmsn.util;import java.io.ByteArrayOutputStream;import java.io.InputStream;import java.net.URL;import java.text.MessageFormat;import java.util.Properties;import java.util.Locale;import java.util.HashMap;import java.util.Set;import java.util.Iterator;import rath.msnm.util.StringUtil;import rath.jmsn.MainFrame;/** * * @author Jangho Hwang, rath@linuxkorea.co.kr * @version 1.0.000, 2002/03/13 */public class Msg{	static Properties current = null;	static Properties usProp = null;	static Locale currentLocale = null;	static HashMap localMap = new HashMap();	static	{		/*			Can't fully enumerate available locales on Windows XP, JDK 1.4	    Locale ls[] = Locale.getAvailableLocales();		for(int i=0; i<ls.length; i++)		{			String code = ls[i].getLanguage();			String country = ls[i].getCountry();		    URL url = Msg.class.getResource("/resources/text/message.properties." + code + "_" + country);			Properties prop;			if( url!=null && (prop=getMessageBundle(url,ls[i]))!=null )			{				localMap.put( ls[i], prop );			}		}		*/		Locale korea = new Locale("ko", "KR", "");		localMap.put( korea, getMessageBundle(Msg.class.getResource("/resources/text/message.properties.ko_KR"), korea) );		Locale koreaUTF8 = new Locale("ko", "KR", "UTF-8");		localMap.put( koreaUTF8, getMessageBundle(Msg.class.getResource("/resources/text/message.properties.ko_KR.UTF-8"), koreaUTF8) );		Locale english = new Locale("en", "US", "");		localMap.put( english, getMessageBundle(Msg.class.getResource("/resources/text/message.properties.en_US"), english) );		Locale fr = new Locale("fr", "FR", "");		localMap.put( fr, getMessageBundle(Msg.class.getResource("/resources/text/message.properties.fr_FR"), fr) );		Locale it = new Locale("it", "IT", "");		localMap.put( it, getMessageBundle(Msg.class.getResource("/resources/text/message.properties.it_IT"), it) );		Locale de = new Locale("de", "DE", "");		localMap.put( de, getMessageBundle(Msg.class.getResource("/resources/text/message.properties.de_DE"), it) );		Locale def = Locale.getDefault();		String encoding = System.getProperty("file.encoding").toLowerCase();		if( encoding.equals("utf8") || encoding.equals("utf-8") )			currentLocale = new Locale(def.getLanguage(), def.getCountry(), "UTF-8"); 		else			currentLocale = new Locale(def.getLanguage(), def.getCountry());		usProp = (Properties)localMap.get(english);		Properties defProp = (Properties)localMap.get(currentLocale);        if( defProp==null )        {            current = (Properties)localMap.get(english);            currentLocale = english;        }        else            current = defProp;	}	private static Properties getMessageBundle( URL url, Locale locale )	{		Properties prop = new Properties();		String variant = locale.getVariant();		try		{			ByteArrayOutputStream bos = new ByteArrayOutputStream();			InputStream in = url.openStream();			int buf;			while( (buf=in.read())!=-1 )			{				if( buf==10 ) // message.properties's editor is me! so only use LF					{					byte[] b = bos.toByteArray();					bos.reset();					String line = null;					if( variant==null || variant.equals("") )						line = new String( b );					else						line = new String( b, variant );					if( line.trim().length()==0 || line.charAt(0)=='#' )						continue;					int i0 = line.indexOf('=');					if(i0 != -1)					{						String key = line.substring(0, i0).trim();						String value = line.substring(i0+1).trim();						value = StringUtil.replaceString(value, "\\n", "\n");					    prop.setProperty( key, value );					}				}				else					bos.write( buf );			}			in.close();			return prop;		}		catch( Exception e ) { e.printStackTrace(); }		return null;	}	/**	 * 瘤盔登绰 Locale阑 馆券茄促. 措脚 Country code啊 鞍篮 Locale甸篮 吧矾柳促.	 * @return	 */	public static Set getAvailableLocales()	{		return localMap.keySet();	}	public static synchronized void setLocale( Locale locale )	{		Locale.setDefault(locale);	    Properties prop = (Properties)localMap.get(locale);		currentLocale = locale;		current = prop==null ? (Properties)localMap.get(new Locale("en", "US", "")) : prop;		MainFrame.INSTANCE.updateUIAll();	}	public static Locale getCurrentLocale()	{		return currentLocale;	}	public static String get( String key )	{		String msg = current.getProperty(key);		if( msg==null )			msg = usProp.getProperty(key);	    return msg;	}	public static String get( String key, String param )	{		return MessageFormat.format( get(key), new Object[]{param} );	}	public static String get( String key, String param1, String param2 )	{		return MessageFormat.format( get(key), new Object[]{param1, param2} );	}	public static String get( String key, Object[] params )	{		return MessageFormat.format( get(key), params );	}}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -