Struts辅助开发工具RBManager(2)
2008-02-23 09:49:15来源:互联网 阅读 ()
使用 Translator 类
/**
* This function illustrates how a resource bundle is utilized in a Java application.
* The following method is a trivial and illustrative only. It returns three
* entertainment options according to a passed in locale.
*/
public static String[] getEntertainmentOptions(Locale myLocale) {
Translator.setLocale(myLocale);
String options[] = { Translator.getTranslation("theater"),
Translator.getTranslation("opera"),
Translator.getTranslation("orchestra")};
return options;
}
处理上下文翻译
在精心制作译文文件时,所有文件的大小并不总是相同。迄今为止,示例还只是处于单词级。假设程序需要与用户交互以首先确定他们的姓名,然后确定年龄。最简便的方法是定义两个资源对。前者可以由 name_question=What is your name? 表示。后者可以由 age_question=How old are you? 表示。然后这两个短语可以相应翻译到各个资源文件中。但是,假设开发者决定使用第一个问题中获取的信息来使第二个问题更个人化。如果将用户的姓名插入第二个问题,应该放在哪里呢?如果是英语,我们知道应该插在哪里,但其它语言也许将姓名放在不同的位置。
这里就要使用 java.text 包了。这个包(自 JDK 版本 1.1 之后就是它的标准部件)提供一种将上下文插入文本消息的方法。现在,第二个英语资源可以更改成 age_question=How old are you, {0}? 。花括号括起的数字表示有一些未知信息将替换括号和数字。如果需要多个输入项,那么编号是很重要的。
Translation 类的代码需要扩展成处理上下文信息。应该添加以下方法:
上下文翻译代码
// Returns contextually specific translations
public static String getTranslation(String key, String[] lookups) {
if (key == null ) return "";
if (resource_bundle == null) initBundle();
try {
String retStr = resource_bundle.getString(key);
return MessageFormat.format(retStr, lookups);
} catch (Exception e) {
return key;
}
}
介绍 RBManager
项目经理和小组负责人自然倾向于开发者友好的平台。虽然 Java 平台为开发者提供了简洁的国际代码,但隐藏的问题将会在所有环境中影响本地化效果。
从事项目的开发者很少会说应用程序将翻译成的每种语言。要应用程序包含所有必需的资源束,但又要使其大小和复杂程度达到最小,这就形成了前面提到的问题。RBManager 是 IBM 开发的一个基于 Java 的 GUI 应用程序,目前仍是 alpha 版,它给出了一般情况下资源束状态的瞬时视图,并提供了快速且详尽的方法来创建和维护资源束。
在任何时间查看所有文件
开发者在维护资源束时遇到的第一个困难就是过程中涉及的文件数量。一个小组通常采用两种方法中的一种。在第一种方法中,开发者访问所有资源文件,并使用开发者最熟悉的语言将资源插入每个资源文件。然后,资源文件的管理员定期复查它们的文件是否有更改。在第二种方法中,开发者只将资源更新插入基类文件,让管理员自己查找差异。当然,这是个费时的过程,并且容易出错。
RBManager 可以通过一个图形界面将多个文件的多个输入项调整为一个输入项。 图 1 中显示了 RBManager 的图形,它说明了如何用树型视图表示组成资源束的所有资源文件。图中管理的资源束是 RBManager 直接使用的资源束。树型表示反映了翻译查找表的回退顺序。顶层是基类,往下依次是语言、国家层和派生层。
资源文件维护有两个级别:更改会影响资源束包含的每个文件,或者它们只影响一个语言文件。影响每个文件的实例是将新的资源插入资源束。需要在每个资源文件中反映出这个插入,于是这些文件的管理员可以翻译这些资源,或者如果不需要更改,则将它们标记为已翻译。RBManager 能处理这两种情况。如果选择了资源束树的根,则所有更改会在所有文件中反映。如果选择了树中的单一资源文件,则只对该文件进行更改。
在资源进入各个资源文件后,除了基类文件,它将在文件中被标记为未翻译。各个语言文件的管理员可以立即使用 RBManager 查看所有标记为未翻译的资源,不论它们在文件中处于什么位置。
使每个文件立即可用的另一个优点是可以检查错误,如有重复的查找表名称,或者遗漏翻译。使每个语言文件可用确保了在开发周期内没有遗漏任何文件。
图 1. RBManager 的资源束
将元数据添加到资源描述
在传统开发过程中,只有资源文件中包含的数据才是资源,并且有一些常规注释插入到文件中。RBManager 扩展了为每个资源存储的信息,以更准确地反映开发者的意图。这对翻译人员进行正确翻译有很大的帮助,因为他们需要上下文信息,而资源文件通常没有提供这些信息。
RBManager 允许开发者在创建资源时,传达所创建的资源的含义和上下文。要为资源存储以下信息,如文本放在什么位置、具体含义是什么、每对花括号定义什么,以及该资源是否已经翻译。除了这些信息,每个资源被分配给一个组。所添加的资源组的层次结构使资源束的结构更易于理解和浏览。翻译使用 图 2 中显示的窗口来编辑个别资源文件(包含许多资源)中的资源。
图 2. 资源名称、值和元数据
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
上一篇:浅谈java程序员面试
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash
