`
ukn660dm
  • 浏览: 15354 次
最近访客 更多访客>>
社区版块
存档分类
最新评论

构建JAVA应用的国际化

 
阅读更多

构建JAVA应用的国际化
2011年05月25日
  我们上国际性的网站,一般都能看到站点的某个地方可以选择对应自己国家的语言环境,从而达到切换语言的功能。
  可能很大的一部分都是站点做了镜像或是分布式(判断你的IP地址,之后将你重定向到对应的区域站点)。这种技术还是相当常用的。
  不过分布式的坏处就是内容冗余与不同步(两个不同语言站点之间的信息无法同步,内容重复但是又有部分的区别),浪费资源。
  所以对于一般的非分布式WEB应用(或者桌面应用)来说,只需要开发单个应用,却拥有语言切换(即国际化)的功能是最好的了。
  很幸运,JAVA本身提供了RESOURCEBUNDLE这个类来支持国际化。调用方法为
  ResourceBundle rb = ResourceBundle.getBundle("...properties文件名(无扩展名)", locale(区域信息));
  但是这个类本身能力有限,它的一个巨大缺点就是,所有的资源束必须放在classpath下面。这对于应用的灵活性是一个巨大的危害。一般的应用肯定预先定义了一个文件夹来统一存放资源束,便于统一维护。
  为此,我专门写了一个扩展jar包。这个包很简单。下载地址为:http://u.115.com/file/aq2sofi9
  下面简单讲述一下使用方法。
  public class Test {
  public static void main(String[] arg) throws FileNotFoundException, IOException {
  ResourceLoader.loadAll("C:\\strings");
  String msg = MessageMgr.getString(resourceName, key, locale);
  msg = MessageMgr.getString(resourceName(根据文件夹结构来定义,比如刚才载入的是c盘下的strings文件夹下的所有资源束,在strings文件夹下又有一个文件夹叫com,里面有test.properties与test_zh_CN.properties两个资源文件,那么这个值就是com.test,类似于java中的package), key(资源文件中定义的字段), args(资源替换字段), locale(区域对象));
  }
  }
  主要就是这2条代码了。
  下面讲述一下资源束的概念以及如何整合至j2ee应用中。
  资源束:顾名思义,就是预定义了一些字串的资源文件。
      比如说目前有一个名为test的资源束,那么对应的就是test.properties与test_zh_CN.properties这2个文件了。而在这个资源束中都定义了一个字段键值为MSG_HELLO,于是在test.properties里面有MSG_HELLO=hello,而在test_zh_CN.properties里面就有MSG_HELLO=(你好to UTF-8/转为UTF-8的中文字――你好),注意test之后的_xx_xx就是对应的区域信息,默认是没有的,而中文对应_zh_CN,像美国的话就是_en_US了。想对区域了解更多的可以google搜索下。理论上同一个资源束都是应该放在相同目录下面的。这点切记!
  J2EE整合:
      拿到这个工具包之后,我们可以在工程的web.xml里面定义一个listener,它的作用就是在应用启动的时候将所有的资源文件全部载入内存当中。(好处就不用我说了吧,内存访问与文件访问,哪个快?)
  public class TestListener implements ServletContextListener {
  @Override
  public void contextDestroyed(ServletContextEvent arg0) {
  }
  @Override
  public void contextInitialized(ServletContextEvent arg0) {
  ResourceLoader.loadAll("...");
  //在启动环境的时候载入
  }
  }
  由于web应用访问者每个都有一个session,所以将用户选择的区域对象保存至session当中,很简单
  Locale locale = new Locale...//用户设定的语言区域信息
  session.setAttribute("_locale", locale);
  好了,重点来了,某个页面中或是某个请求中需要返回给用户一个多国化的字串,代码就这么写,
  Locale locale = session.getAttribute("_locale");
  String msg = MessageMgr.getString("com.test", "MSG_HELLO", locale);
  之后将这个msg返回给客户端,就达到了多国化的目的
分享到:
评论

相关推荐

    Flex2 发现之旅:构建多语言本地化Flex应用

    这样估计以后会有中文版的Flex2 了...),使用Flex2的本地化特性我们可以很容易创建多语言本地化的Flex应用,为我们的Flex应用打入国际市场添威助力,不过不像Java的 本地化资源动态获取的方式,目前Flex2的本地化...

    开源的Java Web应用开发平台

    WebBuilder是一款跨平台、数据库和浏览器的可视化Web应用开发平台。WebBuilder使用了多项最新的技术,使Web应用的开发更快捷和简单。 ...国际化开发支持 解决不同区域的文字、日期和数字等的差异。

    JAVA_API1.6文档(中文)

    java.util 包含 collection 框架、遗留的 collection 类、事件模型、日期和时间设施、国际化和各种实用工具类(字符串标记生成器、随机数生成器和位数组)。 java.util.concurrent 在并发编程中很常用的实用工具类...

    知识图谱的构建java源码-NOUS:使用知识图谱构建、查询和推理

    知识图谱的构建java源码NOUS:动态知识图中的构建、查询和推理 知识图谱 (KG) 的自动构建仍然是一项昂贵的技术挑战,大多数企业和学术机构都无法实现。 NOUS 是一个端到端框架,用于为任意应用程序域开发自定义知识...

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part2

    第21章 中文乱码问题与国际化 610 21.1 中文乱码问题产生的由来 610 21.1.1 常用字符集 610 21.1.2 对乱码产生过程的分析 612 21.2 中文乱码问题的解决方案 614 21.3 使用过滤器解决中文问题 616 21.4 让...

    Java 1.6 API 中文 New

    java.util 包含 collection 框架、遗留的 collection 类、事件模型、日期和时间设施、国际化和各种实用工具类(字符串标记生成器、随机数生成器和位数组)。 java.util.concurrent 在并发编程中很常用的实用工具类。...

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part3

    第21章 中文乱码问题与国际化 610 21.1 中文乱码问题产生的由来 610 21.1.1 常用字符集 610 21.1.2 对乱码产生过程的分析 612 21.2 中文乱码问题的解决方案 614 21.3 使用过滤器解决中文问题 616 21.4 让...

    Java Server Faces编程

    内容简介:通过本书的学习,读者能够最大限度地应用Java Server Faces和创建专业的JSF程序,以实现快速构建Java wed应用的基本架构。书中首先对度层和相关技术进行了综述,接着介绍了如何编写并部署JSF应用程序,...

    软件工程师Java班课程

    Java应用构建工具:Apache Ant / … 掌握JSP 1.3/2.0和Servlet 2.3/2.4编程及其在Web层 Java B/S商务项目开发(基于JSP/Servlet,全真案例第二个项目) 2人左右为一个项目组,项目大小为10人*工作日左右 熟练使用...

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part4

    第21章 中文乱码问题与国际化 610 21.1 中文乱码问题产生的由来 610 21.1.1 常用字符集 610 21.1.2 对乱码产生过程的分析 612 21.2 中文乱码问题的解决方案 614 21.3 使用过滤器解决中文问题 616 21.4 让...

    java api最新7.0

    java.util 包含 collection 框架、遗留的 collection 类、事件模型、日期和时间设施、国际化和各种实用工具类(字符串标记生成器、随机数生成器和位数组)。 java.util.concurrent 在并发编程中很常用的实用工具类。...

    基于AOP的动态数据国际化框架的设计与实现

    本文旨在总结灵活、高效的方法,将国际化相关的共性操作抽取出来,对其加以ORM配置封装和国际化过滤等功能,在业务逻辑层和数据访问层实现动态元素国际化框架,生成一种基于J2EE架构的Web应用动态数据国际化框架。...

    JavaAPI1.6中文chm文档 part1

    java.util 包含 collection 框架、遗留的 collection 类、事件模型、日期和时间设施、国际化和各种实用工具类(字符串标记生成器、随机数生成器和位数组)。 java.util.concurrent 在并发编程中很常用的实用工具类...

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part5

    第21章 中文乱码问题与国际化 610 21.1 中文乱码问题产生的由来 610 21.1.1 常用字符集 610 21.1.2 对乱码产生过程的分析 612 21.2 中文乱码问题的解决方案 614 21.3 使用过滤器解决中文问题 616 21.4 让...

    基于JAVA-JSP的现代数字化电子政务网管理系统论文-20240424更新

    尽管我国政府信息化建设已取得一定进展,但当前仍面临信息系统孤立导致的“信息孤岛”问题,这严重制约了电子政务的深入应用。为了克服这一难题,亟需构建一个集成化的电子政务“一站式”服务平台。 本文详细介绍了...

    达内java培训目录

    Struts2 Struts2核心控制流程、Ognl、Action、Interceptor、Result、FreeMarker、Struts2标记库、Struts2扩展、Struts2应用技巧(输入验证、消息国际化、文件上传和下载、防止重复提交等)。 熟练掌握Struts2核心...

    Java EE Web开发实例精解完整光盘

     除了对JAVA EE Web编程基本技术的讲解淙外,还针对Web应用开发中如打印、图表、日志、上传、下载和国际化等常见功能特性的实现,综合运用多种JAVA EE开发技术,提出多种解决方案,并深入讲座分析,对开发人员动手...

    JavaAPI中文chm文档 part2

    java.util 包含 collection 框架、遗留的 collection 类、事件模型、日期和时间设施、国际化和各种实用工具类(字符串标记生成器、随机数生成器和位数组)。 java.util.concurrent 在并发编程中很常用的实用工具类...

    java jdk-api-1.6 中文 chmd

    java.util 包含 collection 框架、遗留的 collection 类、事件模型、日期和时间设施、国际化和各种实用工具类(字符串标记生成器、随机数生成器和位数组)。 java.util.concurrent 在并发编程中很常用的实用工具类...

Global site tag (gtag.js) - Google Analytics