存档

  • JSF国际化

    这几天都在忙于看一个工作流程序,其后台运用了JSF编写。大学时期对JSF的学习比较少,所以对后台的一些扩展感到有些迷茫,比如说jsf的国际化问题。
    开始研究的时候,我本以为只要运用编码相同既可以显示中文字符,但事实证明是不可以的......于是自己开始拆解工作流程序的jar包,仔细研究到底是怎么回事,突然发现一个名为I18NTools的API。在Linux下,I18N即多语言的扩展,估计这个也是一回事。由此顺藤摸瓜之下,我得知其后台运用JSF国际化。

    JSF的国际化(Internnationalization)信息处理是基于Java对国际化的支援,您可以在一个信息资源档中统一管理信息资源,资源文件的名称是.properties,而內容是名称与值的配对,例如:

    messages.properties
    title = Towards Open Source
    name = eric_zhyd

    资源档名称由basename加上语言与地区来组成,例如:

    basename.properties
    basename_en.properties
    basename_zh_CN.properties

    沒有指定语言与地区的basename是预设的资源档名称,JSF会根据浏览器送來的Accept-Language header中的內容来決定该使用哪一个资源档名称,例如:

    Accept-Language: zh_CN, en-US, en

    如果浏览器送来这些header,则预设会使用简体中文,接著是美式英文,再来是英文语系,如果找不到对应的信息资源档,则会使用预设的信息资源档。
    由于信息资源档必須是ISO-8859-1编码,所以对于非西方语系的处理,必须先将之转换为Java Unicode Escape格式,例如您可以先在信息资源档中写下以下的內容:

    messages_zh_CN.txt
    title = 走向开放源码
    name = 钟艺东

    然后使用JDK的工具程式native2ascii来转换,例如:

    native2ascii -encoding gb18030 messages_zh_CN.txt messages_zh_CN.properties
    转换后的內容会如下:
    messages_zh_CN.properties
    title = \u8d70\u5411\u5f00\u653e\u6e90\u7801
    name = \u949f\u827a\u4e1c

    (所有资源文件放入你的JFS应用的WEB-INF/classes目录下)

    接下来您可以使用标记來指定载入信息资源,一个例子如下:

    <%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
    <%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
    <%@page contentType="text/html;charset=UTF8"%>
    <f:view>
    <f:loadBundle basename="messages" [...]

    2009年9月24日 | 归档于 JAVA
    标签: ,
  • 基于本地浏览器语言实现国际化

    在编写基于jsp的工作流程序时,遇到中文乱码的问题。目前尝试过许多网上的方法均无果,仍在苦恼当中。不过,我学习到一个好方法。那就是基于浏览器语言实现程序的国际化;
    String locString=request.getLocale().toString();
    if(locString.equalsIgnoreCase("zh_CN")||locString.equalsIgnoreCase("en_US"))
    {
    response.setContentType("text/html; charset=gb2312");
    …………
    } else {
    response.setContentType("text/html; charset=utf-8");
    …………
    }

    2009年9月21日 | 归档于 JAVA
    标签: ,
  • [转]用gettext实现shell脚本国际化

    shell脚本也可以用gettext实现国际化. .很简单很强大.. 看下面的例子...
    $ cat test.sh
    #!/bin/bash
    export TEXTDOMAINDIR=/usr/share/locale
    export TEXTDOMAIN=test.sh
    echo "$(gettext -s hello)"
    编辑一个po文件:
    $ cat test.sh.po
    msgid "hello"
    msgstr "你好!"
    编译成mo文件:
    $msgfmt -o test.sh.mo test.sh.po
    复制到/usr/share/locale/zh_CN/LC_MESSAGES/
    $cp test.sh.mo /usr/share/locale/zh_CN/LC_MESSAGES/
    中文:
    $ export LANG=zh_CN.UTF-8
    $ ./test.sh
    你好!
    英文:
    $ export LANG=en_US.UTF-8
    $ ./test.sh
    hello

    2009年9月15日 | 归档于 Shell
    标签:
文章标签 ‘国际化’