sapphire01 发表于 2007-11-14 17:31:20

国际化 Eclipse 插件(3)

第 6 步:准备和发送本国语言材料以供翻译
准确的翻译需要专门技能,而您必须为此付钱。(虽然您在高中里学了四年德语课,可惜还不合格!)有许多公司都乐意提供具有专业水准的翻译。
对于 Eclipse Platform,这一步分两个阶段完成。第一阶段涉及将所有外向化的文本发送到翻译中心。第一遍翻译是在“脱离环境”的情况下完成的。翻译人员没有看到运行中的产品,也没有特定的产品经验。他们拥有的工具有助于提高翻译速度和保证一致性,但最终还要依赖翻译测试人员来验证以目标语言运行的的产品(第二阶段)。
即将发表的文章(“测试国际化的 Eclipse 插件”)中将讨论脱离环境的翻译带来的风险和后果,其结果有时非常好笑。
第 7 步:重新封装和验证已翻译的材料
翻译了文件之后,我们将它们重新组合到相应的目录/JAR 文件中,这些目录/JAR 文件已在第 5 步 创建初始已翻译插件片段中描述过了。NL1 Fragment 文件夹包含了各种语言版本的 plugin.properties 文件。在将 HelloWorld.properties 文件翻译成德语之后,我们将它重命名成 HelloWorld_de.properties,并将它存储到 NL1 Fragment 源文件夹中。注:nl\de(德语)文件夹是新的,它并不是由 PDE 创建的,而是手工创建的。当我们不断添加各种翻译时,这些特定语言的文件夹隔离了各个版本的非特性文件(如下面显示的 hello.xml)。

图 14. 重新组装的片段项目
http://www.ibm.com/developerworks/cn/linux/opensource/os-i18n/part1/nav3.jpg
请注意已翻译的特性文件很可能包含与代码页相关的重音字符,因此必须将特性文件转换成 PropertyResourceBundle 类所希望的 ISO 8859-1 代码页。native2ascii 实用程序(请参阅 参考资料)会处理代码页转换并插入任何必需的 Unicode 转义符(Unicode escape)。
需要详细说明一下术语 Unicode 转义符。Java SDK 包含的 native2ascii 转换实用程序允许进行源码编码,生成以 ISO 8859-1 编码的输出,并且它将此代码页之外的字符转换成叫作 Unicode 转义符的表示法。这种表示法是 \udddd,其中 dddd = Unicode 代码页中期望字符的代码点。
下面是一个示例。考虑一下法语短语“Son père est allé à l'hôtel”(他父亲去旅馆了)。它包含了四个不属于 Latin-1 代码页的重音字符。用 native2ascii 实用程序转换这条短语会得到: Son p\u00e8re est all\u00e9 \u00e0 h\u00f4tel
现在不再有任何重音字符,而且组成字符串的所有字符所拥有的代码点都可以在 ISO 8858-1 中找到。但替代用的 \u00e8 、 \u00e9 、 \u00e0 和 \u00f4 是什么呢?它们是以 \udddd 表示的重音字符的 Unicode 代码点。
关于使用 native2ascii 实用程序,有一个小的告诫:它假设源码编码与执行它的机器的活动代码页相同。但是,翻译人员通常会用其缺省国家或地区代码页保存翻译,而在每个国家或地区以及每个操作系统中,这个代码页是不同的。因此,负责集成翻译的人需要 (a) 知道翻译人员用哪种代码页保存文件,或者 (b) 要求他们用公共代码页保存文件。当调用 native2ascii 时,可以用指定 -encoding 参数指定源代码编码。
提示:如果不能确定源码代码页,可以对照本文后面的 表 3. 常见重音拉丁字符的 Unicode 代码点来抽查 native2ascii 的输出。如果在转换的文件中找到该表中没有的 \udddd 表示法(如 \u0205),那可能是您指定了错误的源码编码。DBCS 语言中没有同样的抽查,实际上已转换文件中的所有字符都是 Unicode 转义符。只要仔细一点,对照正在运行的产品进行验证。
会有一篇专门的文章介绍测试翻译。请等待后续文章(“测试国际化的 Eclipse 插件”),这篇文章将描述在最近的 Eclipse Platform 翻译验证期间学到的经验教训,而且会讨论执行特性文件翻译的快速检查(当然,是 Eclipse 插件)。
第 8 步:部署各个片段
片段源代码与插件源代码相似,也可以封装在 JAR 文件中。使用 PDE 生成 JAR 包,选择“fragment.xml”文件,并从弹出菜单中选择“ Create Fragment JARs...”。向导会指导您创建一个构建脚本以便为片段生成所有必需的 JAR。

图 15. 选择 fragment.xml 文件
http://www.ibm.com/developerworks/cn/linux/opensource/os-i18n/part1/image28.jpg
要部署这个示例片段,将 fragment.xml、\nl 目录和 JAR 复制到插件目录的 com.jumpstart.example.helloworld.nl1 子目录中。这样就完成了我们的示例以及国际化的步骤。下一节将具体介绍 Eclipse Platform 的可翻译元素、如何组织它们,以及引入另一种语言需要什么。

sapphire01 发表于 2007-11-14 17:32:34

Eclipse Platform(V 1.0)的国际化
本节的重点不是 Eclipse 国际化的“详细指导”,而是回顾版本 1.0 实现及其与翻译相关的构建过程。在这些主题中,有一些是专门针对平台自身的,它们描述的过程与那些只希望用本地语言启用平台的插件的开发人员无关。本节针对的读者是那些希望了解如何使平台支持本地语言并且要浏览许多构成已翻译产品的文件、子目录和 JAR 的人。
Eclipse Platform 已经实现了国际化,它拥有输入双字节字符和支持双向数据的能力。它提供了以下语言版本:
[*]巴西葡萄牙语[*]法语[*]德语[*]意大利语[*]日语[*]韩国语[*]简体中文[*]西班牙语[*]繁体中文在 IBM,把这些语言统称为 第一集团语言。
已翻译的各种元素是什么,在哪里?
Eclipse Platform 依赖于 Java SDK 中提供的国际化框架。因此,大多数可翻译文本位于 *.properties 文件中。但还有其它文件格式包括可翻译信息,如 HTML、XML 和位图(已在 表 2. Eclipse 特有的(非 Java)可翻译资源中概述)。
翻译是一门艺术,需要均衡时间、精力和成本。它考虑到开发产品的速度以及产品投入市场的速度。关于 必须翻译什么以及翻译成什么 好,始终都有分析和协调决策。
简而言之,Eclipse 将其翻译集中到三个主要领域:
[*]插件[*]联机帮助[*]欢迎视图涉及的文件有:
[*]*.properties 文件[*]*.html 文件及其相关的“支持”文件[*]welcome.xml 文件Eclipse 插件:.properties 文件
在 Eclipse 中,每个产品插件都包含特性文件。翻译插件就意味着翻译其特性文件。处理特性文件有两个主要步骤:
与字体相关的 .properties 文件
每个操作系统都使用不同的字体集,某些语言有其自己的字体集(最显著的就是 DBCS 语言)。操作系统推荐缺省字体,但页面设计人员的最佳布局却依赖于特殊字体,因此使用缺省值字体的结果可能会产生格式很差的页面。为了确保正确显示已翻译的文本,Eclipse Workbench 使用特殊的与每种语言/操作系统组合一致的字体集。
注:只有那些正在添加新操作系统或语言的支持的 Eclipse Platform 开发人员才需要创建新的 jfacefonts* 特性文件。切勿修改另一个插件的子目录的内容,包括 Eclipse Platform 附带的 JFace 特性文件中指定的字体。
各种 Eclipse 字体都在 JFace 插件中定义。可以在以下位置找到缺省 Eclipse fonts.properties 文件:

缺省 Eclipse fonts.properties 文件的位置
eclipse\plugins\org.eclipse.ui\workbench.jar    org\eclipse\jface\text\JFaceTextMessages.properties    org\eclipse\jface\resources\jfacefonts.properties (OS 缺省值)    org\eclipse\jface\resources\jfacefonts_linux.properties    org\eclipse\jface\resources\jfacefonts_windows2000.properties    org\eclipse\jface\resources\jfacefonts_windowsnt.properties
每种语言都有四个 org.eclipse.ui jfacefonts 特性文件,都存储在同一个本地语言片段 JAR <eclipse_root>\fragments\org.eclipse.ui.nl1\nl1.jar 中。
例如,意大利语有 jfactfonts_ it.properties、jfactfonts_linux_ it.properties、jfactfonts_windowsnt_ it.properties 和 jfactfonts_windows2000_ it.properties。西班牙语有 jfactfonts_ es.properties、jfactfonts_linux_ es.properties、jfactfonts_windowsnt_ es.properties 和 jfactfonts_windows2000_ es.properties,等等。
要添加对新语言的支持,复制上述的基本 jfacefonts 文件,添加国家或地区代码(如 jfactfont_linux_ xx.properties,其中 "xx" 是国家或地区后缀),将新的 jfacefonts 文件插入本地语言片段 JAR 中。
最终用户 messages.properties 文件
要翻译插件的最终用户消息:
[*]翻译 .properties 文件。[*]将特性文件从本地编码的代码页转换成 PropertyResourceBundle期望的编码。[*]遵循 Java 资源命名约定,使用正确的语言环境重命名文件(例如,en = 英语、de = 德语、fr = 法语、it = 意大利语)。[*]将特性文件插回到用 PDE 创建的本地语言片段 JAR 的源目录中。Java 资源文件命名约定考虑到了语言、地区和变体( basename_language_region_variant),而 Eclipse 只指定语言,只有三种情况例外(葡萄牙语、中文/中国和中文/中国台湾):
   <name>_<locale>_<region>.properties
PropertyResourceBundle 在运行时会自动查找与当前语言环境相应的资源文件。例如,以德语为例,最初会将英语 plugin.properties 复制成 plugin_de.properties,以供翻译。
Eclipse 联机帮助:.HTML 和 .properties 文件
Eclipse 有五个联机帮助。基本语言文档是作为插件在其自己的子目录中交付,而翻译版本则作为插件片段交付。“文档”插件的位置如下:
表 1. Eclipse 文档插件的位置
联机帮助 位置 Workbench User Guideeclipse\plugins\org.eclipse.platform.doc.userJava Development User Guideeclipse\plugins\org.eclipse.jdt.doc.userPlatform Plug-in Developer Guideeclipse\plugins\org.eclipse.platform.doc.isvJDT Plug-in Developer Guideeclipse\plugins\org.eclipse.jdt.doc.isvPDE Guideeclipse\plugins\org.eclipse.pde.doc.user
上述每个目录中的插件清单文件 plugin.xml 都定义了帮助组成部分。在同一个目录中还定义了必需的帮助 信息集和 接线文件。要翻译联机帮助:
[*]翻译每个联机帮助的 doc.properties 文件。[*]根据本地编码的代码页转换已翻译的 doc.properties,并根据语言环境特定的资源文件命名约定进行重命名。[*]将特性文件插回到用 PDE 创建的本地语言片段 JAR 的源目录中。[*]翻译联机帮助的 *.html 文件。[*]将已翻译的 .html 放入相应的插件片段目录。如果将联机帮助翻译成多种语言,必须创建一个语言目录结构来保存针对国家和地区翻译的 HTML。这些文件就象特性文件一样,也不是语言环境敏感的,因此必须保留它们原来的文件名和扩展名。例如,要区分日语 .html 文件集和德语文件集,必须将它们保存在不同的目录名下,每个目录表示一个国家或地区。
例如,Workbench User Guide 的德语 *.html 文件集存储位于 eclipse\fragments\org.eclipse.platform.doc.user.nl1\nl\ de中。日语 welcome.xml 位于 eclipse\fragments\org.eclipse.platform.doc.user.nl1\nl\ ja中。
Eclipse 的“Help >Welcome”菜单选项:welcome.xml 文件
welcome.xml 是在 Workbench 第一次打开或用户选择 Help > Welcome时显示的介绍性视图。它在 eclipse\plugins\org.eclipse.sdk_1.0.0 中。
以下是翻译 welcome.xml 文件的步骤:
[*]翻译 welcome.xml 文件。[*]将翻译保存成 UTF-8 格式(例如,使用记事本)。如果忘了将它保存成 UTF-8,XML 解析代码在遇到重音字符时(即,一个不属于 UTF-8 代码页的代码点)会显示一个错误。[*]就象 .html 文件一样,如果将 welcome.xml 翻译成许多语言,就需要将每个 welcome.xml 保存到语言环境特定的目录名下。例如,德语的 welcome.xml 在 eclipse\fragments\org.eclipse.sdk_1.0.0\nl\ de 中,而日语的 welcome.xml 在 eclipse\fragments\org.eclipse.sdk_1.0.0\nl\ ja中。

sapphire01 发表于 2007-11-14 17:33:44

结束语和其它参考资料
让您的产品进入国际市场只是为了增加经济效益。上面的步骤表明这个过程比较简单。以下是我们在介绍时提到的测验:
真或假:IBM 遍及全球的软件销售收入的主要部分来自于美国。假。实际上,IBM 软件收入中超过 50% 来自美国以外。
幸好,使用基于 Eclipse Platform 的产品的那些开发人员可以从已经翻译的基本产品中受益。剩下的就是遵循本文中概括的明确步骤,将您的基于 Eclipse 的产品推向国际市场!
Eclipse 特有的(非 Java)可翻译资源
以下是前面提到的可翻译资源列表的摘要,以及如何处理它们的简要说明。
表 2. Eclipse 特有的(非 Java)可翻译资源
已翻译的内容 必需或可选 高级步骤 插件文件必需 [*]打包插件 *.properties 文件并发送它们以供翻译,包括 plugin.properties[*]转换已翻译的 *.properties 文件[*]将已转换的文件插入本地语言片段的插件目录插件“关于”文件可选[*]打包插件 about.html,并发送以供翻译(从 Help > About > Plugin Info... > More Info...中显示)[*]可以参考外部网站。可能需要更新 about.html 来传送语言指示符或引用国家或地区特定的网站联机帮助必需 [*]打包 *.html 文件并发送它们以供翻译。[*]打包联机帮助的 *.properties 文件并发送以供翻译,包括 doc.properties[*]转换已翻译的 *.properties 文件[*]将 *.html 打包到 doc.zip 中,然后将它、*.xml 接线文件和 *.properties 文件复制到本地语言片段的联机帮助中Splash*可选要本地化闪屏(splash screen),需要在 eclipse/splash 下创建语言环境子目录。这些目录的名称要遵循标准 Java 语言环境命名约定。例如,平台寻找美国英语语言环境(en_US)的闪屏的方式如下: [*]eclipse\splash\en_US\<image file>[*]eclipse\splash\en\<image file>[*]eclipse\splash\<image file>其中 <image file> 是闪屏文件的名称(例如,splash_full.bmp 或 splash_full.xpm)。 产品配置*可选[*]eclipse\install\install.properties(表示主要应用程序)[*]eclipse\configurations\configuration_n\install.xml[*]eclipse\dominant_application_plugin_directory\platform.ini(不变的)[*]eclipse\dominant_application_plugin_directory\platform.properties(不变的)插件产品文件*必需 [*]翻译 eclipse\dominant_application_plugin_directory\product.properties[*]翻译 eclipse\dominant_application_plugin_directory\welcome.xml[*]将已翻译的 welcome.xml 保存成 UTF-8 格式(例如,使用记事本)[*]将已翻译的 welcome.xml 插入本地语言片段许可证*可选[*]打包许可证和注意事项,并发送以供翻译:(eclipse 目录中的 license.html、notice.html、cpl-v05.html 和 about.html)[*]将它们放到本地语言片段的根目录和插件目录中
有关可翻译资源的更多信息,请参阅 eclipse.org 网站上由 Greg Adams 撰写的文章“Creating Product Branding”(请参阅 参考资料)。
常见重音拉丁字符的 Unicode 代码点
表 3. 常见重音拉丁字符的 Unicode 代码点
字符 \u00e0带沉音符号的 a\u00e1带尖音符号的 a\u00c0带沉音符号的 A\u00c1带尖音符号的 A\u00c2带音调符号的 A\u00e2带音调符号的 a\u00c3带腭化符号的 A\u00e4带分音符号的 a\u00c4带分音符号的 A\u00e8带沉音符号的 e\u00c8带沉音符号的 E\u00e9带尖音符号的 e\u00c9带尖音符号的 E\u00ea带音调符号的 e\u00eb带分音符号的 e\u00cb带分音符号的 E\u00ea带音调符号的 e\u00ca带音调符号的 E\u00ef带分音符号的 i\u00ec带沉音符号的 i\u00ed带尖音符号的 i\u00cc带沉音符号的 I\u00cd带尖音符号的 I\u00ee带音调符号的 i\u00ce带音调符号的 I\u00f6带分音符号的 o\u00d6带分音符号的 O\u00e3带腭化符号的 a\u00f4带音调符号的 o\u00d4带音调符号的 O\u00f2带沉音符号的 o\u00d2带沉音符号的 O\u00f3带尖音符号的 o\u00d3带尖音符号的 O\u00f5带腭化符号的 o\u00d5带腭化符号的 O\u00f1带腭化符号的 n\u00d1带腭化符号的 N\u00f9带沉音符号的 u\u00d9带沉音符号的 U\u00fa带尖音符号的 u\u00da带尖音符号的 U\u00fb带音调符号的 u\u00db带音调符号的 U\u00fc带分音符号的 u\u00dc带分音符号的 U\u00df带升半音符的 s特殊符号 \u00ba阳性序数指示符\u00a7章节符号\u00aa阴性序数指示符\u00ac非符号\u00b9上标 1\u00b2上标 2\u00b3上标 3\u00a3英镑符号\u00a2分符号\u00b0度数符号
词汇表
代码点(Codepoint)
可以由一个或多个字节信息表示的字符。代码点是分配给每个图形字符的十六进制值。
代码页(Codepage)
代码页是一个图形字符集或一组图形字符集中的每个图形字符的代码点的规范。在一个给定代码页中,代码点可能只有一个特定含义。可以用 CHCP 命令显示 Windows&reg; 操作系统上的活动代码页(在任何给定时刻,只有一个代码页是活动的)。
编码(Encoding)
与一段给定数据相关的代码页。只能以一个给定代码页对文件“编码”;例如,缺省情况下,在美国英语机器上,记事本以代码页 437 对其数据进行编码。 Save As对话框允许用户选择几种其它可能的编码,其中最著名的是 Unicode 和 UTF-8。
国际化(Internationalization)(有时缩写成“I18N”)
国际化是指在预先不知道要处理的语言、文化数据或字符编码方案的情况下开发程序的过程。在系统术语中,它是指提供一些接口,这些接口可以在运行时使国际化的程序更改其行为以适合特定语言操作。
单字节编码字符集(Single-Byte Coded Character Set (SBCS))
在单字节编码字符集中,单字节代码点表示集合中的每个字符。通常,SBCS 用于表示英语、欧洲语言、西里尔语、阿拉伯语、希伯来语等语言的字符。
双字节编码字符集(Double-Byte Coded Character Set (DBCS))
在双字节编码字符集(DBCS)中,双字节代码点表示集合中的每个字符。实质上,这些语言是由表意字构成,如日语、汉语、韩国语,它们拥有的符号超出了 256 个代码点可以表示的范围,因此需要双字节编码字符集。
本地化(Localization)(有时缩写成“L10N”)
本地化是指在特定于每种受支持的语言、文化数据和编码字符集组合的计算机系统中建立信息的过程。
混合字节字符集(Mixed-Byte Character Set)
混合字节编码字符集是包含单字节字符和双字节字符的字符集合。在 MBCS 中,必须检查数据的每个字节,看看它是双字节字符的首字节还是单字节字符的首字节。如果字节在某个范围中(例如,大于 X'80'),那么它就是双字节字符的首字节。
NLS
本地语言支持。
Unicode
直接出自 http://www.unicode.org:“无论是对于何种平台、何种程序、何种语言,Unicode 为每个字符提供了一个唯一的编号。” 注:虽然 Java 文本操作类确实是以 Unicode 为核心的,但存储在程序的保护之外的数据通常却不属于这种情况。必要时,Java 程序员必须考虑通过执行本地代码页到 Unicode 转换进行数据编码。
页: [1]
查看完整版本: 国际化 Eclipse 插件(3)