仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1422|回复: 18
打印 上一主题 下一主题

[学习教程] JAVA网页设计用Java办理国际化成绩

[复制链接]
分手快乐 该用户已被删除
跳转到指定楼层
#
发表于 2015-1-18 11:40:36 | 只看该作者 回帖奖励 |正序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
先谈谈我对java的一些认识。我选择java,是因为他语法简单,功能强大,从web,到桌面,到嵌入式,无所不能。但当我进一步了解了java后,感叹,java原来也有许多缺点。办理|成绩假如使用体系是面向多种言语的,编程时就不能不想法办理国际化成绩,包含操纵界面的作风成绩、提醒和匡助言语的版本成绩、界面定制本性化成绩等。
因为Java言语具有平台有关、可移植性好等长处,而且供应了壮大的类库,以是Java言语能够帮助我们办理上述成绩。Java言语自己接纳双字节字符编码,接纳年夜汉字字符集,这就为办理国际化成绩供应了良多便利。从计划角度来讲,只需把程序中与言语和文明有关的部分分别出来,加上特别处置,就能够部分化决国际化成绩。在界面作风的定制方面,我们把能够参数化的元素,如字体、色彩等,存储在数据库里,以便为用户供应友爱的界面;假如某些部分包括没法参数化的元素,那末我们大概不能不分离计划,经由过程有针对性的编码来办理详细成绩。
Java类包
在用Java办理国际化成绩的过程当中,大概使用到的次要的类都是由java.util包供应的。该类包中相干的类有Locale、ResourceBundle、ListResourceBundle、PropertyResourceBundle等,其承继干系以下图所示。

个中各种供应的次要功效以下:
Locale:该类包括对次要地舆地区的地区化特性的封装。其特定对象暗示某一特定的地舆、政治或文明地区。经由过程设定Locale,我们能够为特定的国度或区域供应切合外地文明习气的字体、标记、图标和表达格局。比方,我们能够经由过程取得特定Locale下的Calendar类的实例,显现切合特定表达格局的日期。
ResourceBundle:该类是一个笼统类,必要经由过程静态办法ResourceBundle.getBundle()指定详细完成类或属性文件的基础称号。基础称号会协同指定的或默许的Locale类,决意详细挪用的类或属性文件的独一称号。比方:指定基础类或属性文件称号为TestBundle,而指定的Locale是CHINESE,那末最合适婚配的类称号为TestBundle_zh_CN.class,而最好婚配属性文件称号为TestBundle_zh_CN.properties。依照JavaDoc和相干文档的请求,假如该类或属性文件没有找到,体系会查找近似婚配(主文件名顺次为TestBundle_zh和TestBundle的类或属性文件)。该类供应的getKeys()办法用于取得一切成员的键名,并供应handleGetObject办法取得指定键的对应元素。
ListResourceBundle:该类承继ResourceBundle类,次要是增添了一些便于操纵的成份,但仍是笼统类。假如但愿利用类的体例完成详细的ResourceBundle,一样平常情形下最好承继这个类。
PropertyResourceBundle:该类也承继ResourceBundle类,能够实例化。该类的举动特性好像java.util.properties类,能够从输出流中取得详细属性对。
假如触及日期和工夫显现等成绩时,能够使用java.text包和java.util包中的TimeZone、SimpleTimeZone和Calendar等类举行帮助处置。
参数化办理办法
在详细使用时,能够把详细国度或区域特性中能够参数化的部分放在经由特别定名的属性文件中,在断定详细的Locale后,经由过程PropertyResourceBundle类读取响应的属性文件,完成国际化特性。
利用PropertyResourceBundle类取得外地版本的国际化信息,部分代码以下:
  ……
  publicstaticfinalStringBASE_PROP_FILE=
“DISP”;
  publicstaticfinalStringSUFFIX=
“.properties”;
  locale=Locale.getDefault();
  StringpropFile=BASE_PROP_FILE+“_”+locale.toString()+SUFFIX;
  ResourceBundlerb;
  try{
   Filefile=newFile(propFile);
   if(file.exists()){
   is=newFileInputStream(file);
  rb=newPropertyResourceBundle(is);
  if(rb==null)System.out.println(“NoResource”);
   }
  }catch(IOExceptionioe){
   System.out.println(“Erroropenfilenamed”+propFile);
  }
  Enumeratione=rb.getKeys();
  while(e.hasMoreElements()){
   key=(String)e.nextElement();
   value=(String)rb.handleGetObject(key);
   System.out.println(“KEY:”+key+
“                Value:”+value);
  }
  ……
  DISP_zh_TW.properties文件的详细内容以下:
  Key1=u53efu4ee5
  Key2=u64a4u9500
等号前面是使用native2ascii程序转化后的繁体汉字,假如不举行转化,体系大概显现乱码。
处置提醒和匡助
关于提醒言语和匡助文件部分,能够把言语映照放在属性文件大概ListResourceBundle类的子类中。上面程序是一个Servlet,它经由过程承受客户真个选择,把特定言语和字符版本的信息前往到客户端。
  ……
  publicclassProcessServletextendsHttpServlet
  {//默许言语为中文
   publicstaticfinalStringDEFAULT_LANGUAGE=“zh”;
   //默许字符集为简体中文
   publicstaticfinalStringDEFAULT_COUNTRY=“CN”;
   publicvoidservice(HttpServletRequestreq,
HttpServletResponseres)throwsIOException,ServletException{
  HttpSessionsession=req.getSession(true);
  //从客户端收到的指定言语和字符的参数应该与Sun公司相干划定分歧
  Stringlang=req.getParameter
(“language”);
  Stringcountry=req.getParameter
(“country”);
  if(lang==null)
    {
//假如没有收到参数,就试图从Session里取得
  lang=(String)session.getAttribute
(“language”);
  country=(String)session.getAttribute
(“country”)
  }else{
  session.setAttribute(“language”,lang);
  session.setAttribute(“country”,country);
  }
  if(lang==null)
    {
//假如没法从上述手腕失掉言语和字符信息,就利用默许值
  lang=DEFAULT_LANGUAGE;
  country=DEFAULT_COUNTRY
  session.setAttribute(“language”,lang);
   session.setAttribute(“country”,country);
  }
  Localelocale=null;
  ResourceBundlebundle=null;
  try{
  locale=newLocale(lang,country);
  }catch(Exceptione){
  System.out.println(“Nolocalewith”+
country+“_”+lang);
  locale=Locale.getDefault();
  }
  try{
  bundle=ResourceBundle.getBundle(
“DisplayList”,locale);
  }catch(MissingResourceExceptione){
  System.out.println(“Noresourcesavailableforlocale”+locale);
  bundle=ResourceBundle.getBundle
(“DisplayList”,Locale.US);
  }
  res.setContentType(“text/html”);
  PrintWriterout=res.getWriter();
  out.println(“<html>”);
  out.println(“<head>”);
  Stringtitle=bundle.getString(“title”);
 Stringwelcome=bundle.getString
(“welcome”);
  Stringnotice=bundle.getString(“notice”);
  out.println(“<title>”+title+
“</title>”);
  out.println(“</head>”);
  out.println(“<bodybgcolor=”
white“>”);
  out.println(“<h3>”+welcome+
“</h3>”);
  out.println(“<br>”);
  out.println(“<b>”+notice+
“</b>”);
  out.println(“</body>”);
  out.println(“</html>”);
   }
  }
上述Servlet利用的属性文件(DisplayList_zh_CN.
properties)内容以下:
title=中文版
welcome=这是简体中文版面
notice=简体中文测试乐成
注重:该文件间接接纳了中文,而不是经由转化的Unicode编码,这是因为年夜多半Web服务器不必要上述转化。
在实践利用中,假如Web服务器撑持Servlet2.3标准(如jakarta-tomcate4.0),那末下面提到的Servlet应该略加改动,以作为其他Servlet的处置器利用。别的,假如把ResourceBundle的特定版本寄存在无形态会话Bean中,就能够在必定水平上进步程序效力。
小结
笔者在实践测试中发明了以下成绩,个中部分成绩失掉懂得决:
1.关于显现字符呈现乱码的成绩,假如是经由过程属性文件完成国际化办理计划,那末多是间接在属性文件中写进了非尺度ASCII笔墨。办理办法是使用JDK供应的工具native2ascii.exe扫描一切属性文件,用扫描了局掩盖原有文件内容。假如我们是使用类文件完成转换计划,那末必要从头编译相干类文件,并在编译时指定编码集。比方,编译利用国标码的类文件,接纳的编译命令以下:
javac-encodingGB2312your_java_file
2.固然Sun传播鼓吹,在ResourceBundle类的实例化过程当中,该类会查找与指定的基本类相对婚配和只管与指定的Locale属性相婚配的类。比方:假如我们指定ResourceBundle基本类为TestBundle,而Locale中指定利用zh_CN(中国年夜海洋区简体中文),那末假如体系找不到TestBundle_zh_CN,体系应该依次查找TestBundle_zh、TestBundle。可是笔者在体系开辟过程当中发明,该婚配没有发生任何实践效果。
笔者的测试平台是Windows2000Server,没有设置任何ServicePack,利用的JDK版本是1.3.0版本。笔者试图经由过程检察JDK目次下src.jar中附带的源码找到引发成绩的缘故原由,可是发明有关的操纵被封装在sun.misc包中,而src.jar文件没有供应该包中任何类的源码。本文把这个成绩提出来,但愿与有关开辟职员一同切磋。

手机用到的是用j2me所编出来的小程序。
深爱那片海 该用户已被删除
18#
发表于 2015-6-28 21:10:46 | 只看该作者
是一种由美国SUN计算机公司(Sun Microsystems, Inc.)所研究而成的语言
因胸联盟 该用户已被删除
17#
发表于 2015-6-12 03:07:33 | 只看该作者
至于JDBC,就不用我多说了,你如果用java编过存取数据库的程序,就应该很熟悉。还有,如果你要用Java编发送电子邮件的程序,你就得看看Javamail 了。
第二个灵魂 该用户已被删除
16#
发表于 2015-5-1 22:54:55 | 只看该作者
在全球云计算和移动互联网的产业环境下,Java更具备了显著优势和广阔前景。
飘灵儿 该用户已被删除
15#
发表于 2015-4-21 22:09:35 | 只看该作者
如果你学过HTML,那么事情要好办的多,如果没有,那你快去补一补HTML基础吧。其实JSP中的Java语法也不多,它更象一个脚本语言,有点象ASP。
只想知道 该用户已被删除
14#
发表于 2015-4-18 03:50:23 | 只看该作者
是一种突破用户端机器环境和CPU
透明 该用户已被删除
13#
发表于 2015-4-5 16:22:03 | 只看该作者
你可以去承接一些项目做了,一开始可能有些困难,可是你有技术积累,又考虑周全,接下项目来可以迅速作完,相信大家以后都会来找你的,所以Money就哗啦啦的。。。。。。
乐观 该用户已被删除
12#
发表于 2015-3-22 04:09:35 | 只看该作者
另外编写和运行Java程序需要JDK(包括JRE),在sun的官方网站上有下载,thinking in java第三版用的JDK版本是1.4,现在流行的版本1.5(sun称作J2SE 5.0,汗),不过听说Bruce的TIJ第四版国外已经出来了,是专门为J2SE 5.0而写的。
老尸 该用户已被删除
11#
发表于 2015-3-21 14:50:40 | 只看该作者
所以现在应用最广泛又最好学的就是J2EE了。 J2EE又包括许多组件,如Jsp,Servlet,JavaBean,EJB,JDBC,JavaMail等。要学习起来可不是一两天的事。那么又该如何学习J2EE呢?当然Java语法得先看一看的,I/O包,Util包,Lang包你都熟悉了吗?然后再从JSP学起。
分手快乐 该用户已被删除
10#
 楼主| 发表于 2015-3-19 23:26:03 | 只看该作者
让你能够真正掌握接口或抽象类的应用,从而在原来的Java语言基础上跃进一步,更重要的是,设计模式反复向你强调一个宗旨:要让你的程序尽可能的可重用。
小女巫 该用户已被删除
9#
发表于 2015-3-19 20:51:15 | 只看该作者
J2SE开发桌面应用软件比起 VC,VB,DEPHI这些传统开发语言来说,优势好象并不明显。J2ME对于初学者来说,好象又有点深奥,而且一般开发者很难有开发环境。
若天明 该用户已被删除
8#
发表于 2015-3-17 22:00:40 | 只看该作者
在全球云计算和移动互联网的产业环境下,Java更具备了显著优势和广阔前景。
蒙在股里 该用户已被删除
7#
发表于 2015-3-16 21:18:52 | 只看该作者
在全球云计算和移动互联网的产业环境下,Java更具备了显著优势和广阔前景。
愤怒的大鸟 该用户已被删除
6#
发表于 2015-3-9 09:30:37 | 只看该作者
是一种使网页(Web Page)由静态(Static)转变为动态(Dynamic)的语言
变相怪杰 该用户已被删除
5#
发表于 2015-2-27 21:38:15 | 只看该作者
Java是一种计算机编程语言,拥有跨平台、面向对java
柔情似水 该用户已被删除
地板
发表于 2015-2-17 03:43:47 | 只看该作者
自从Sun推出Java以来,就力图使之无所不包,所以Java发展到现在,按应用来分主要分为三大块:J2SE,J2ME和J2EE,这也就是Sun ONE(Open Net Environment)体系。J2SE就是Java2的标准版,主要用于桌面应用软件的编程;J2ME主要应用于嵌入是系统开发,如手机和PDA的编程;J2EE是Java2的企业版,主要用于分布式的网络程序的开发,如电子商务网站和ERP系统。
不帅 该用户已被删除
板凳
发表于 2015-2-6 16:16:38 | 只看该作者
应用在电视机、电话、闹钟、烤面包机等家用电器的控制和通信。由于这些智能化家电的市场需求没有预期的高,Sun公司放弃了该项计划。随着1990年代互联网的发展
小妖女 该用户已被删除
沙发
发表于 2015-2-1 07:30:30 | 只看该作者
多重继承(以接口取代)等特性,增加了垃圾回收器功能用于回收不再被引用的对象所占据的内存空间,使得程序员不用再为内存管理而担忧。在 Java 1.5 版本中,Java 又引入了泛型编程(Generic Programming)、类型安全的枚举、不定长参数和自动装/拆箱等语言特性。
山那边是海 该用户已被删除
楼主
发表于 2015-1-21 12:35:15 | 只看该作者
是一种简化的C++语言 是一种安全的语言,具有阻绝计算机病毒传输的功能
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-12-22 22:00

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表