存档
-
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
hello2009年9月15日 | 归档于 Shell标签: 国际化