动态网站制作指南 [  QQ表情  ]
[ 投票调查 ]
[ 企业邮箱 ]
[ 网站空间 ]
网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
ASP源码 | .Net源码 | PHP源码 | JSP源码 | JAVA源码 | CGI源码 | VB源码 | C++源码 | Delphi源码 | PB源码 | VF源码 | 汇编 | 服务器
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > J2EE/J2ME教程
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
网络编程:ASP教程,ASP.NET教程,PHP教程,JSP教程,C#教程,数据库,XML教程,Ajax,Java,Perl,Shell,VB教程,Delphi,C/C++教程,软件工程,J2EE/J2ME,移动开发
文章搜索服务
邮件订阅
输入你的邮件地址,
你将不会错过任何关于:
[ J2EE/J2ME教程 ]的信息

本月文章推荐
.下载和显示PNG图片.
.ibmwebsphere5.0教材+试题.
.无线标记语言(WML)基础之程序结构.
.Java中关于XML的API一瞥.
.J2ME是什么含义?.
.Java远程方法调用(二).
.使用platformRequest()自动更新M.
.jBPM在流程中间增加变量.
.J2EE 应用服务器技术.
.快速创建Webapp.
.什么是EnterpriseJavaBeans组件?.
.WebLogicServer9.0应用的配置管理.
.TOMCAT3.1的安装与配置.
.使用Timer制作动画效果.
.J2ME与WebService-KSOAP的罗曼史.
.J2ME设备的实际性能.
.BlueTooth探索系列(五)—J2ME蓝.
.EJB3.0概览.
.使用Filter访问Session信息.
.使用 MIDP 列表组件.

使用JSR-238更快地全球化您的应用程序

发表日期:2007-12-23 |


2007 年 1 月 25 日

     国际化不仅仅是一个趋势 —— 它已经成为应用程序开发的必要需求。JSR-238 的目的是帮助 Java™ Platform,Micro Edition(Java ME)开发人员利用 Mobile Information Device Profile(MIDP)/Connected Limited Device Configuration(CLDC)将其国际化工作减至最少。通过这篇文章发现一种国际化 MIDlet 的更便捷方法。

简介

    您是否曾尝试过国际化 MIDlet,却以失败告终?使用 MIDP/CLDC 本地化 MIDlet 需要完成大量的工作,Java Platform,Standard Edition(Java SE)以成熟的 API 简化国际化工作。CDC Foundation 提供了大量 API 来完成国际化和本地化工作。而如果使用 MIDP/CLDC 来完成这些工作,将是一次非常痛苦的经历;甚至没有一个可用的 ResourceBundle 类。还好有另外一个选择 —— JSR-238 提供了可直接用于资源本地化和数据格式化的类。

    作为开始,看一下 Java SE 和 Java ME 对全球化支持的对比,如 图 1 所示。(本图是从 “Considerations of Globalization Solutions in J2ME” 文中转载的。参见 参考资料 中的链接。)



图 1. Java SE 和 Java ME 全球化支持的对比
使用JSR-238更快地全球化您的应用程序(图一)

    图 1 显示出,编写一个支持全球化的 Java SE 应用程序是十分简单的;Java SE 提供了开发全球化应用程序所需的几乎所有东西。CDC Foundation 提供了一些用来编写全球化应用程序的 API ,但不是全部。然而建立在 MIDP/CLDC 基础上的应用程序仅提供有限的日历和时区的相关类,您需要亲自编写几乎所有的全球化类。

全球化应用程序的历史

    要本地化 MIDlet,通常需要使用 MIDP 核心类编写 ResourceBundle 和 Locale。有很多关于如何完成这一任务的文章,包括 “Globalize Your Embedded Apps”(参见 参考资料)。

    为了实现国际化功能,就是说根据不同的地区显示其当地语言,您需要编写自己的 ResourceBundle 类,这对检索本地化字符串是很必要的,例如面向不同地区的 “Hello” 和 “Bonjour”。对于数据格式化,例如 Currency、Numbers 和 DateTime,您也需要实现这些程序。这将耗费大量的精力,因为您不得不收集大量的地区数据信息,还必须熟知具体的文化差异。

JSR-238 Mobile Internationalization API 简介

    国际化 MIDlet 是接触更广阔市场的一个关键条件。新的 JSR-238 Mobile Internationalization API 提供了一种标准方法帮助您更快、更轻松地实现 MIDlet 国际化,还提供了用 MIDP/CLDC 实现 MIDlet 国际化的基础 API。

    请注意:JSR-238 API 是一个可选的软件包。开始向其部署 JSR-238 MIDlet 之前,必须确保您的设备支持它。

使用JSR-238更快地全球化您的应用程序(图二)

JSR-238 目标声明

此声明引自 JSR-238 规范:

“Mobile Internationalization API 的目标是为运行在 CLDC 上 MIDP 中的 Java MIDlet 提供国际化服务。Java 2 Standard Edition 提供对国际化的广泛支持,JAVA 2,Micro Eition 更具局限性的设置和配置文件并不包括这种支持。”

这种 API 被设计为以简洁通用的形式提供服务。在国际化方面,它使 MIDP 应用程序达到一个与桌面应用程序类似的级别,从而扩充了 MIDP 应用程序平台。

JSR-238 包,javax.microedition.global 提供的一些重要类如下:

  • ResourceManager 类:管理应用程序资源
  • Formatter 类:创建数据项特定于地区的翻译
  • StringComparator 类:使用特定于地区的规则比较两个字符串

    我将具体讨论这些类,但在此之前您必须了解,您将需要使用 Sun Java Wireless Toolkit 2.5 for CLDC Beta、Nokia JSR-238 RI 或 Eclipse 来配合 JSR-238 开发 MIDlet。本例将使用 Eclipse。

    首先,您需要获得 JSR-238 库,它是随 Sun WTK 2.5 Beta、Nokia 的 JSR-238 RI 一起提供的。IBM® 在 WebSphere® Everyplace Micro Environment 移植包中提供了 JSR-238,IBM 业务合作伙伴都可以使用。


    如果您现在使用的是 WTK 的老版本,其中不包括 JSR-238 库,您需要自己添加 JSR-238。您依然可以在 Eclipse 编写和编译,但由于类加载器的限制,Eclipse 是无法启动的。要配置 Java ME 项目以包含 JSR-238 支持:

  1. 启动 Eclipse。
  2. 创建一个新的 Java ME 项目,如 图 2 所示。在这个例子中,我把它命名为 “Simple Globalization Midlets”,单击 Finish。

    图 2. 创建一个新的 Java ME 项目
    使用JSR-238更快地全球化您的应用程序(图三)
  3. 在 Package EXPlorer 视图中展开 “Simple Globalization Midlet” 项目(如 图 3 所示),请注意 JSR-238 库不在这里。

    图 3. 项目树
    使用JSR-238更快地全球化您的应用程序(图四)
  4. 选中 Java ME 库节点,右击并选择 Build Path > Configure Build Path...
  5. 单击 Add External Jars...,选择已下载的 JSR-238 jar 文件,然后单击 OK。

    图 4. 将 JSR-238 jar 添加到构建路径中
    使用JSR-238更快地全球化您的应用程序(图五)

就是这样!您已经将 JSR-238 库添加到开发环境中可,现在就可以开始编写 MIDlet 国际化程序了。

 

进入讨论组讨论。

使用 ResourceManager

现在我将演示如何使用 ResourceManager 来管理不同地区的资源文件。

    要用不同的语言来显示本地字符串,就需要准备不同地区的资源文件。资源文件包括要本地化的字符串,如果有图片的话,也要将其包含在资源文件里面。资源文件就像 Java SE 的属性文件,但是是二进制格式。它有以下优点:

  • 部署到设备时占用较少的存储空间。
  • 装载时需要较少内存。
  • 它可以包含嵌入的新行。

对于条件有限的设备来说,这些优点是十分重要和有效的。

    现在让我们编写一个简单的 MIDlet,根据地区显示字符串和图片。图 5 显示了资源文件结构。在以下步骤中,我将使用 WebSphere Everyplace Micro Environment 6.1 和 IBM WebSphere Everyplace Micro Environment 移植包的 JSR-238 库。

使用JSR-238更快地全球化您的应用程序(图二) 编写 MIDlet 程序之前需要知道的标准。

  • 地区标识符 地区标识符必须符合 MIDP 2.0 规范定义的格式,使用短横线而不是下划线(例如,“en-US”)。
  • 基本名称 使用基本名称将相关资源分组(例如,“labels” 和 “messages”)。
  • 资源文件结构 必须将不同地区的资源文件放到 /global/{地区标识符}目录下。


图 5. 资源文件结构
使用JSR-238更快地全球化您的应用程序(图六)

步骤 1:准备资源文件

    二进制的资源文件必须遵守严格的格式。(参考 JSR-238 规范)。可以使用任何一种二进制文件编辑器或者 Nokia JSR-238 RI 创建资源文件。

    为演示起见,我使用 Nokia JSR-238 RI 来创建二进制资源文件,如 图 6 所示。我想为 zh-TW,de-DE 和 es-ES 这几个地区显示 “Welcome” 字符串和一幅图片。可以阅读 Nokia 238 RI 的自述文件了解相关步骤,但基本上,您需要为字符串和图片编写一个 XML 资源文件,运行 ResourceMaker 工具获得二进制文件。



图 6. Nokia JSR-238 RI 示例资源文件
使用JSR-238更快地全球化您的应用程序(图七)


步骤 2:将二进制资源文件放在正确的文件结构中

    在 图 7 中,采用当地语言的字符串存储在一个地区文件夹中,图片的二进制文件存储在 \global\WelcomeMidlets.res 中。您不会希望图像的二进制文件存储在每一个资源文件中!



图 7. 将资源文件放到正确的结构中
使用JSR-238更快地全球化您的应用程序(图八)

步骤 3:编写 MIDlet

为了从资源文件检索字符串和图片,您需要执行下列步骤:

  1. 构造一个 ResourceManager 实例。您可以指定一个地区,也可以使用系统默认的地区。表 1 介绍了可用于构建一个 ResourceManager 实例的两种方法。第一种方法只要求基本名称,它将使用系统默认的地区。第二种方法要求基本名称和特定地区。



表 1. ResourceManager 方法
public static final ResourceManager getManager(java.lang.String baseName) public static final ResourceManager getManager(java.lang.String baseName, java.lang.String locale)

以下代码返回具有 “WelcomeMidlet” 基本名称以及系统默认地区的 ResourceManager 实例:

res = ResourceManager.getManager("WelcomeMidlet");
            

使用以下代码检索字符串:

//STRING_WELCOME is the resource id in the resource file; in this case 1
StringItem desc = new StringItem(res.getString(STRING_WELCOME),"");
            

使用下列代码检索图片:

//IMAGE_EILEAN is the resource id in resource file, in this case 111
byte[] imageData = res.getData(IMAGE_EILEAN);
            

清单 1 演示了这些步骤。



清单 1. 字符串和图片检索

    
try
{
  //Get the resource manager with the base name and default systemlocale
  res = ResourceManager.getManager("WelcomeMIDlet");
  //Retrieve the welcome string
  StringItem desc = new StringItem(res.getString(STRING_WELCOME),"");
  fmMain = new Form(res.getString(STRING_WELCOME));
  fmMain.append(desc);
  //Retrieve the Eilean image
  byte[] imageData = res.getData(IMAGE_EILEAN);
  Image eilean  = Image.createImage(imageData, 0, imageData.length);
  fmMain.append(eilean);
}catch(ResourceException re)
{
  System.out.println("Exception when retrieving resources");
  re.printStackTrace();
}
      

  1. 运行 MIDlet。我在 Eclipse 中使用 IBM J9 仿真器运行它。

表 2 展示了在 zh-TW 和 de-DE 地区显示 “Welcome MIDlet” 的结果。



表 2. Welcome MIDlet
zh-TW 地区 de-DE 地区 使用JSR-238更快地全球化您的应用程序(图九) 使用JSR-238更快地全球化您的应用程序(图十)

进入讨论组讨论。

     就是这样!使用资源文件管理不同地区的本地化字符串,将图片的二进制文件转换为所有地区都可以使用的通用资源。ResourceManager 类将根据系统默认地区或您在构造函数中指定的地区来装载资源文件。现在您可以使用一种更快、更简单的方法来本地化菜单、按钮和消息了。


数据格式化

     每一个地区都有自己的文化,都采用自己的方式显示日期、时间、数字、百分数和货币数据。Formatter 类可以满足格式化此类数据的全部需求。表 3 显示了它所提供的类。



表 3. 数据格式化方法
日期和时间 formatDateTime(java.util.Calendar dateTime, int style) 数字和百分比 formatNumber(double number)
formatNumber(double number, int decimals)
formatNumber(long number)
formatPercentage(float value, int decimals)
formatPercentage(long value) 货币值 formatCurrency(double number)
formatCurrency(double number, java.lang.String currencyCode)

现在将编写一个简单的 MIDlet 程序来显示日期、时间、数字、百分比和货币数据。

使用JSR-238更快地全球化您的应用程序(图二) 您需要了解的知识

  • 货币代码必须遵守 ISO-4217 货币代码标准。
  • MIDP 规范允许您列入一个空地区。如果您在 Formatter 构造函数中为一个地区使用了空值或空字符串,它将保留为中立格式(Neutral formatting)。参阅 JSR-238 规范以获得更多细节。

步骤 1:构造一个 Formatter 实例

您可以指定地区,也可使用系统默认地区。下面是所需要的代码:

//Using system default locale
Formatter fmt = new Formatter();
//Specify the locale
Formatter fmt = new Formatter("zh-TW");
            

步骤 2:创建可编辑文本字段。

    您希望创建可编辑的文本文件以使用户输入数字、百分数、货币数据等等。您需要这些文本字段的内容和对其进行格式化的 Formatter 类方法,如 清单 2 所示。



清单 2. 数据格式化

    
public String formatNumber(double number){
     return fmt.formatNumber(number);
  }
  public String formatPercentage(float number, int decimals){
     return fmt.formatPercentage(number,decimals);
  }
  public String formatCurrency(double number){
     return fmt.formatCurrency(number);
  }
  .....
  //Process events
  public void commandAction(Command c, Displayable s)
  {
   if (c == cmExit)
   {
     destroyApp(false);
     notifyDestroyed();
   }
   else if( c == cmFormat)
   {
     //Number formatting
     double num = Double.parseDouble(tfNumeric.getString());
     siResultNum.setText(this.formatNumber(num));
     //Percentage formatting
     float percentage = Float.parseFloat(tfPercentage.getString());
     siResultPercent.setText(this.formatPercentage(percentage,2));
     //Currency formatting
     double curr = Double.parseDouble(tfCurrency.getString());
     siResultCurr.setText(this.formatCurrency(curr));
     //Display the result
     displayResult();
   }   
               

现在运行 MIDlet。表 4 显示了应获得的结果。(注意:我为 zh-TW 使用了一种不同的字体。)



表 4. Formatter MIDlet
zh-TW 地区 de-DE 地区 使用JSR-238更快地全球化您的应用程序(图十一) 使用JSR-238更快地全球化您的应用程序(图十二)

进入讨论组讨论。


格式化日期/时间的不同风格

Formatter 类支持以下风格:

  • 仅 short date
  • 仅 long date
  • 仅 short time
  • 仅 long time
  • short date 和 time
  • short date 和 time

Formatter 类为不同的风格定义了字段。例如,对于仅 short date 这种风格定义了 Formatter.DATE_SHORT,您在 formatDate 方法里使用这些风格就可以了。

清单 3 给出了一个简单的 MIDlet,它示范了日期格式化。



清单 3. 日期格式化 MIDlet

    
public String formatDateTime(Calendar c){
  //Short date format
  String result = fmt.formatDateTime(c,Formatter.DATE_SHORT);
  String result_set = "";
  result_set= result_set+"\n"+"formatDateTime(Calendar, DATE_SHORT) returns:"+result;
  //Long date format
  result = fmt.formatDateTime(c,Formatter.DATE_LONG);
  result_set = result_set+"\n"+"formatDateTime(Calendar, DATE_LONG)returns:"+result;
  //Long date and time
  result = fmt.formatDateTime(c,Formatter.DATETIME_LONG);
  result_set = result_set+"\n"+"formatDateTime(Calendar, DATETIME_LONG)returns:"+result;
  //Short date and time
  result = fmt.formatDateTime(c,Formatter.DATETIME_SHORT);
  result_set = result_set+"\n"+"formatDateTime(Calendar, DATETIME_SHORT) returns:"+result;
  //Long time
  result = fmt.formatDateTime(c,Formatter.TIME_LONG);
  result_set = result_set+"\n"+"formatDateTime(Calendar, TIME_LONG) returns:"+result;
  //Short time
  result = fmt.formatDateTime(c,Formatter.TIME_SHORT);
  result_set = result_set+"\n"+"formatDateTime(Calendar, TIME_SHORT) returns:"+result;
  return result_set;
}
  //Called by the application manager to start the MIDlet.
public void startApp()
{
  display.setCurrent(fmMain);
}
public void pauseApp()
{}
public void destroyApp(boolean unconditional)
{}
//Process events
public void commandAction(Command c, Displayable s)
{
  if (c == cmExit)
  {
    destroyApp(false);
    notifyDestroyed();
  }
  else if( c == cmFormat)
  { //Get the current system date and time
    Date dt = new Date();     
    Calendar cal = Calendar.getInstance();
    cal.setTime(dt);
    siResult.setText(this.formatDatetime(cal));
    displayResult();
  }
}
      

表 4 展示了 DateTime format MIDlet 在 zh-TW 和 de-DE 这两个地区的显示结果。



表 4. DateTime format MIDlet
zh-TW 地区 de-DE 地区 使用JSR-238更快地全球化您的应用程序(图十三) 使用JSR-238更快地全球化您的应用程序(图十四)

另一个有用的类

可以使用 StringComparator 执行字符串的排序和比较操作。相关的排序编程示例,请参考 JSR-238 指南。

结束语

    JSR-238 提供了一种更快、更简单的方法,利用 MIDP/CLDC 来国际化您的 MIDlet。使用 javax.microedition.global 包中的 ResourceManager、Formatter 和 StringComparator 类来进行本地化工作以及特定于地区的数据格式化。提醒一下,JSR-238 是一个可选包;务必确保您的设备支持它。现在您应该熟悉了 JSR-238,可以去更出色地完成开发工作了!


关于作者

使用JSR-238更快地全球化您的应用程序(图二)

使用JSR-238更快地全球化您的应用程序(图十五)

使用JSR-238更快地全球化您的应用程序(图二)

Meng Li 是位于台北的中国软件开发实验室的一名软件工程师。她致力于 Test Automation 和 WebSphere Everyplace Micro Environment 项目。她的兴趣爱好包括 Java 编程、旅游、音乐。

进入讨论组讨论。

(出处:http://www.knowsky.com)


上一篇:在NetBeans 4.1中使用Swing组件 人气:989
下一篇:MIDlet国际化——JSR238 人气:730
浏览全部J2EE/J2ME的内容 Dreamweaver插件下载 常用网页广告代码全集
  最新网站源码 最新软件下载
2008-12-2 OpenPNE中文 v2.12.5 for win 中
2008-12-2 晴天电影系统(带一键迅雷/自定义
2008-12-2 QQip138闪字程序
2008-12-2 SmartWeb企业智能建站系统 v1.0.2
2008-12-2 梦想不死个人主页 v2009
2008-12-2 开良ASP小偷程序生成器 v1.1
2008-12-2 toolxp.cnalexa世界排名查询 php
2008-12-2 腾讯留言板 v1.3
2008-12-2 OpenPNE中文 v2.12.5 for linux
2008-11-29 Tencent Traveler 4.4
2008-11-29 龙卷风网络收音机 v3.0.0.0
2008-11-29 Intel Chipset Software Install
2008-11-29 TweakVI 1.0 Build 1100
2008-11-29 Opera 9.62 Build 10469
2008-11-29 MPlayer WW编译版 SVN-r28044(20
2008-11-29 NetTools网络工具v1.0.0破解版
2008-11-29 3DGallery三维体验1.1破解版
2008-11-29 SecretBook保密本v1.0破解版
  发表评论
姓 名: 验证码:
内 容:
站长工具:网站收录查询 | Google PR查询 | ALEXA排名查询 | CSS在线编辑器 | OPEN参数生成器 | 弹出式窗口代码产生器 | 密码登录生成器 | 在线按钮生成器 | Meta标签生成器 | 多色彩特效字代码生成器 | 网页代码调试器 | 在线FTP登陆 | Flash取色器 | 配色代码对照表 | 配色辞典 | CSS生成器 | 广告代码 | 框架网页代码生成器 | js/vbs加密 | md5加密 | 进制转换 | UTF-8 转换工具 | 在线调色板 | Html转换js | Html转换asp | Html转换php | Html转换perl
实用工具:汉字翻译拼音 | 拼音字典 | 符号对照表 | 个税计算 | 实时汇率查询换算 | 经典小工具 | 汉字简繁转换 | 普通单位换算 | 公制单位换算 | 生辰老黄历 | 国内电话区号 | 国家代码与域名缩写 | 文字加密解密 | 元素周期表 | 健康查询 | 世界时间 | 万年历 | 二十四节气 | 汉字横竖排版 | 手机号码查询 | 计算器 | ip搜索
业务联系 | 广告刊登 | 频道合作 | 投稿荐稿 | 联系方式 | 加入收藏 | RSS订阅
Copyright © 2000-2009 www.knowsky.com All rights reserved | 沪ICP备05001343号
ホームページ制作 不動産検索システム 求人情報
防水工事·改修工事 フットサル大会 探偵
SEO対策 中国語教室 ホームページ作成