多例模式与应用程序国际化
来源:互联网 发布:淘宝卖一分钱壁纸违规 编辑:程序博客网 时间:2024/05/17 06:11
多例模式,使得一个类负责创建自己的多个实例,外界调用获取这个类的实例只需要通过GetInstance来实现,这样类自身的
构造函数设置为私有的,对外界隐藏,只留一个GetInstance供外界使用,而由GetInstance负责调用自己的构造方法.对于要创建自己的多个实例就需要通过在类内部声明自己的静态私有的若干个该类的对象,这些对象通过自己的构造函数的调用已经生成.
而外界通过向GetInstance传如一个指定的参数来获得某一个对象.
在应用程序国际化的过程中,通过一个资源包类ResourceBundle,这个ResourceBundle其成员共享一个公共的基本名称,但是名称中还有标识其语言环境的其他组件。例如,某个资源包系列的基本名称可能是 "MyResources"。该系列应该有一个默认资源包,其名称与其系列名相同( "MyResources"),此系列可根据需要提供特定于语言环境的成员,例如一个名为 "MyResources_de" 的德语资源包。
当程序需要特定于语言环境的对象时,它使用 getBundle方法加载ResourceBundle类
ResourceBundle myResources = ResourceBundle.getBundle("MyResources", currentLocale);import java.util.HashMap;
import java.util.Locale;
import java.util.ResourceBundle;
这里定义了一个语言资源包类
public class LingualResource {
private String language="en";
private String region="US";
private String localCode="en_US";
private static final String FILE_NAME="res";//公共的基本名字
private static HashMap instance=new HashMap(19); 建立影射表来存储键到键值的对应
private Locale locale=null;
private ResourceBundle resourcebundle=null;
private LingualResource lnkLingualResource;
private LingualResource(String language,String region)
{
this.localCode=language;
this.region=region;
localCode=makeLocaleCode(language,region);
locale=new Locale(language,region);
resourcebundle=ResourceBundle.getBundle(FILE_NAME, locale);//找到本地化的资源包
instance.put(makeLocaleCode(language,region), resourcebundle);//将语言_地区字符串和相应资源包的对应存储在映射表中
}
public synchronized static LingualResource getInstance(String language,String region)
{
if(instance.containsKey(makeLocaleCode(language,region)))//隐射表中已有该资源包直接从映射表中返回
return(LingualResource) instance.get(makeLocaleCode(language,region));
else //没有就创建一个,调用构造函数
return new LingualResource(language,region);
}
public String getLocaleString(String code)
{
return resourcebundle.getString(code); //获取code 在相应语言环境下的表示
}
private static String makeLocaleCode(String language,String region)
{
return language+"_"+region;
}
}
一个测试的函数
public class LingualResourceTester {/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
LingualResource ling=LingualResource.getInstance("en", "US" );
String usDollar=ling.getLocaleString("USD");
System.out.println(usDollar);
LingualResource lingZH=LingualResource.getInstance("zh", "CH" );
String usDollarZH=lingZH.getLocaleString("USD");
System.out.println(usDollarZH);}
}res_en_US.properties存储
USD=US Dollar
JPY=japanese yen
res_zh_CH.properties存储
USD=美圆
JPY=日圆
打印结果:
US Dollar
美元
- 多例模式与应用程序国际化
- 设计模式 第5篇 多例模式 Muititon Pattern 与 JAVA资源国际化处理
- Android应用程序的国际化与本地化
- Android应用程序的国际化与本地化
- Android应用程序的国际化与本地化
- Android应用程序的国际化与本地化
- Android应用程序的国际化与本地化
- 国际化应用程序
- 应用程序国际化
- 应用程序国际化
- 应用程序国际化
- IOS 多语言支持,应用程序国际化
- iOS -- 应用程序国际化(多语言)
- Android中实现应用程序的国际化与本地化
- android多语言与国际化
- Android多语言与国际化
- android多语言与国际化
- Android多语言与国际化
- To do list in my lifetime
- 设计模式笔记--行为型模式之五--中介者
- (转)oracle10G下在isqlplus中启用sys账户的解决办法
- 深天健高管:为什么你就那么贱(非健康的健)?!
- c++流缓冲学习---rdbuf()
- 多例模式与应用程序国际化
- 随思
- 数据库还原出错
- Ext2.2与Struts2集成,使用Json数据格式传输数据问题
- J2ME GUI实战之六 ----------LWUIT的Label、CheckBox、RadioButton
- 男人懒惰的N个好处
- AlphaComposite的使用
- 常用正则表达式集合
- 添加右键打开cygwin窗口