当前位置: 首页 > news >正文

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

作者:黑洞 文章来源: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,共同学习,共同提高:)

相关文章:

  • 深入学习之图片延迟加载
  • 深入学习之加载机制
  • 封装MathFP和FloatBox
  • 深入学习之事件兼容2 以及二级事件
  • 看了网友Roy的评论,研究了一下用filter来解决Struts中文乱码的问题!
  • 深入学习之h5 以及媒体查询
  • 保护自己的MIDlet程序之二:TimeProtector
  • 深入学习之动画
  • 保护自己的MIDlet程序之三:SNProtector
  • 深入学习之前端递归应用
  • 深入学习之浅拷贝
  • 保护自己的MIDlet程序
  • 深入学习之非关系数据库
  • 深入学习之http
  • 实战程序管理器和多语言程序
  • python3.6+scrapy+mysql 爬虫实战
  • ➹使用webpack配置多页面应用(MPA)
  • - C#编程大幅提高OUTLOOK的邮件搜索能力!
  • Docker下部署自己的LNMP工作环境
  • FineReport中如何实现自动滚屏效果
  • HTML5新特性总结
  • HTTP--网络协议分层,http历史(二)
  • idea + plantuml 画流程图
  • java8 Stream Pipelines 浅析
  • JS 面试题总结
  • JWT究竟是什么呢?
  • Linux后台研发超实用命令总结
  • PHP面试之三:MySQL数据库
  • Spring Cloud Alibaba迁移指南(一):一行代码从 Hystrix 迁移到 Sentinel
  • ubuntu 下nginx安装 并支持https协议
  • vue和cordova项目整合打包,并实现vue调用android的相机的demo
  • weex踩坑之旅第一弹 ~ 搭建具有入口文件的weex脚手架
  • 创建一种深思熟虑的文化
  • 从输入URL到页面加载发生了什么
  • 关于使用markdown的方法(引自CSDN教程)
  • 海量大数据大屏分析展示一步到位:DataWorks数据服务+MaxCompute Lightning对接DataV最佳实践...
  • 学习HTTP相关知识笔记
  • Java总结 - String - 这篇请使劲喷我
  • ​​​​​​​​​​​​​​Γ函数
  • #QT(TCP网络编程-服务端)
  • #传输# #传输数据判断#
  • #我与Java虚拟机的故事#连载11: JVM学习之路
  • ()、[]、{}、(())、[[]]等各种括号的使用
  • (¥1011)-(一千零一拾一元整)输出
  • (C语言)逆序输出字符串
  • (delphi11最新学习资料) Object Pascal 学习笔记---第2章第五节(日期和时间)
  • (非本人原创)史记·柴静列传(r4笔记第65天)
  • (考研湖科大教书匠计算机网络)第一章概述-第五节1:计算机网络体系结构之分层思想和举例
  • (每日持续更新)jdk api之StringBufferInputStream基础、应用、实战
  • (一)ClickHouse 中的 `MaterializedMySQL` 数据库引擎的使用方法、设置、特性和限制。
  • (原创)Stanford Machine Learning (by Andrew NG) --- (week 9) Anomaly DetectionRecommender Systems...
  • (原創) 未来三学期想要修的课 (日記)
  • (转)IOS中获取各种文件的目录路径的方法
  • (转)linux自定义开机启动服务和chkconfig使用方法
  • .net core 连接数据库,通过数据库生成Modell