分享
 
 
 

J2ME中的字符串管理和多语言支持

王朝java/jsp·作者佚名  2006-01-10
窄屏简体版  字體: |||超大  

作者:黑洞 文章来源:http://www.j2medev.com/Article/ShowArticle.asp?ArticleID=880

近期学习j2me开发,也谈谈我对字符串管理的一个方案。

字符串管理的目的是字符串的资源化管理。

1。这个系统应该可以通过静态方法访问;

2。字符串保存在资源当中;

3。可以方便的切换各种语言以达到多语言支持;

4。字符串资源有一个名字,通过名字访问该资源;

5。名字的规则应该是类名+内部名称。

下一个问题就是资源以何种格式存储的问题:

按理说xml是理想的方式,但是考虑到j2me系统的特殊性,采用plain text更为合适

格式是string-name string-value

name和value之间以空格或\t分割,不同的字符串之间以\n分隔。

内部采用hashtable存储。

通过以上的分析,可以写出如下的StringManager

package vmlinux.app;

import java.io.*;

import java.util.*;

public class StringManager {

String lang_;

String name_;

Hashtable strings_;

boolean loaded_;

public StringManager(String lang)

{

lang_=lang;

loaded_=false;

}

public void setLang(String lang)

{

if(lang_==lang)

return;

lang_=lang;

loaded_=false;

}

public void load(String name)

{

if(name==name_ && loaded_)

return;

if(strings_==null)

strings_=new Hashtable();

else

strings_.clear();

InputStream is=this.getClass().getResourceAsStream("/strings/"+name+"."+lang_);

try

{

byte[] buf=new byte[1024];

int c=is.read(buf);

StringBuffer o=new StringBuffer();

String key=null;

do{

String data=new String(buf,0,c);

int s=0;

for(int i=0;i<data.length();++i)

{

char x=data.charAt(i);

if(s==0 && (x==' ' || x=='\t'))

{

key=o.toString();

o.delete(0,o.length());

s=1;

}

else if(s==1 && x=='\n')

{

if(key!=null && key.length()>0)

strings_.put(key,o.toString());

key=null;

o.delete(0,o.length());

s=0;

}

else

o.append(x);

}

}while((c=is.read(buf))>0);

if(key!=null && key.length()>0)

strings_.put(key,o.toString());

is.close();

}

catch(Exception ex)

{

}

name_=name;

loaded_=true;

}

public String getString(String name)

{

Object o=strings_.get(name);

if(o==null)

return name;

else

return (String)o;

}

}

为了实现通过静态方法访问,修改一下,增加一段代码

static StringManager instance;

public static String get(String name)

{

return instance.getString(name);

}

public static StringManager getInstance(String lang)

{

if(instance!=null)

{

instance.setLang(lang);

}

else

{

instance=new StringManager(lang);

}

return instance;

}

并把构造函数改为private。

有了这样一个StringManager,就可以方便的实现midlet内部的字符串管理了。

初始化管理器: StringManager.getInstance("zh_cn").load("mystrings");//载入/strings/mystrings.zh_cn

使用字符串: StringManager.get("TestMIDlet.Exit");//退出命令

/strings/mystrings.zh_cn文件可以是这样的

TestMIDlet.Exit 退出

TestMIDlet.Done 完成

这种设计的缺点是同一时间只能使用一个资源。

有意见或建议请联系vmlinuxx@gmail.com,共同学习,共同提高:)

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有