帮助客户全球化 IBM Lotus Notes 应用程序

实现 IBM® Lotus® Notes® 应用程序全球化可以很简单。和 Lotus Notes and Domino 一起发行的 IBM Lotus Domino® Global Workbench 可以帮助客户快速、轻松地全球化他们的应用程序。在版本 8.5 中,Lotus Domino Global Workbench 提供了一个新特性,该特性将字符串提取到属性文件中,从而为翻译提供更大的灵活性。

Tony Kuo, 专职软件工程师, IBM

Tony Kuo 是位于台北市的 IBM 中国软件开发实验室的一名专职软件工程师。他擅长的领域包括软件全球化、全球化和测试。他领导从事 IBM Lotus Notes 和 Lotus Domino 全球化和全球化验证测试的团队。



Pei-Yi Lin, 专职软件工程师, IBM

Pei-Yi Lin 是位于台北市的 IBM 中国软件开发实验室的一名专职软件工程师。她是 IBM Lotus 的 Language Engineering and Client Platform 团队的成员。从 2004 年加入 IBM 以来,她参与了 IBM Lotus Notes 和 IBM Lotus Domino 的一些全球化项目,并担任过自动化测试工程师和模板开发人员。



Alex Liu, 软件工程师, IBM

Alex Liu 是位于台北市的 IBM 中国软件开发实验室的一名软件工程师。他在 IBM Lotus Notes 和 Lotus Domino 全球化团队工作。目前,他领导一个为 IBM Lotus Notes 和 Lotus Domino 实现模板全球化的团队。



2009 年 6 月 19 日

对于全球化有很多不同的定义。按照 IBM 的定义,全球化是指使应用程序无缝地使用用户偏好的语言和文化的过程。全球化对于成功创建随需应变的业务十分关键。创建全球化应用程序最容易的方式就是使用设计良好的全球化架构和良好的全球化开发指南从头开始创建。

全球化 Lotus Notes 应用程序对于很多客户来说是一个挑战。Lotus Notes 应用程序的代码和可翻译字符串是按照它们的特性结合在一起的。开发人员通常用一个语言开发 Lotus Notes 应用程序,然后使用 Lotus Domino Designer client 直接对字符串进行翻译。结果,每当应用程序被更改或升级时,需要逐一使用每种语言修改数百个设计元素。处理变更、管理版本控制、更新设计和修复问题都需要付出大量的努力。

本文是关于全球化的分两部分的系列文章的第一篇。

第 1 部分 “帮助客户全球化 IBM Lotus Notes 应用程序” 涉及以下话题:

  • Lotus Notes 应用程序的全球化过程
  • Lotus Domino Global Workbench version 8.5 中将属性文件用于应用程序全球化的新特性
  • 全球化 Lotus Notes 应用程序和升级多语言应用程序的经验

第 2 部分 “开发便于全球化的 IBM Lotus Notes 应用程序的最佳实践” 涉及以下话题:

  • 从全球化角度出发的 Lotus Notes 应用程序开发指南
  • Lotus Notes 应用程序中不同控件的全球化考虑

Lotus Notes 应用程序的全球化过程

全球化 Lotus Notes 应用程序的概念很简单。Lotus Domino Global Workbench 将 Lotus Notes 应用程序中的可翻译字符串提取到一个称作词汇表(glossary)的 Lotus Notes 数据库中。翻译者可以在英文(基本语言)字符串上附加不同语言的翻译。然后,Lotus Domino Global Workbench 基于词汇表中的翻译构建语言应用程序。在对语言应用程序进行测试和微调之后,Lotus Notes 应用程序全球化就完成了。图 1 描绘了全球化过程。

图 1. 全球化过程
全球化过程

接下来的小节介绍如何全球化 Lotus Notes 应用程序,以及全球化过程中每个阶段的最佳实践。但是,这里没有包括逐步的说明,因为 Lotus Domino Global Workbench 帮助文件中已有提供。


分离可翻译字符串

在第一步中,需要将所有可翻译字符串从 Lotus Notes 应用程序中分离出来。这个过程被称作标记(tagging)。

这里需要一个词汇表数据库来存储要翻译的英文字符串。Lotus Domino Global Workbench 附带了词汇表数据库的模板。可以从模板创建新的词汇表数据库。

如果应用程序不是第一个发行版,那么应该使用原始的词汇表,而不是创建新的词汇表,以便当前版本可以重用所有之前的翻译。只需在词汇表中创建新的或更改过的字符串,从而减少翻译工作和成本。

对源应用程序进行标记处理后,所有新的字符串被添加到词汇表数据库中。这样可以得到一个独立于语言的数据库(标记数据库),其中只包含应用程序设计和词汇表数据库中字符串的链接。Lotus Domino Global Workbench 之后使用标记数据库生成语言应用程序。

提示:如果使用已有的词汇表,可以在第三个面板 Lookup 中选择最后一个选项 Mark Terms during tagging。选择该选项后,对于每个术语会添加一个字段,以便看到哪些术语仍然存在于当前版本的应用程序中。完成全球化过程后,可以删除已经不用的术语。

图 2. Create Tagged Database 窗口的 Lookup 面板
Create Tagged Database 窗口的 Lookup 面板

如图 3 所示,在第 5 个面板 Tagging 中,可以选择要标记的选项:

  • Database title
  • Formulas
  • LotusScript®
  • JavaScript
  • HTML
  • XML
  • Links
  • Template name
  • Database class name
  • Graphics
  • Inherited design elements
  • Hidden design elements
  • Private design elements
  • Java
  • MIME
  • External LSS scripts
  • Design element comments
图 3. Create Tagged Database 窗口的 Tagging 面板
Create Tagged Database 窗口的 Tagging 面板

单击 Set Settings As Default 保存选择的设置。


标记 Do Not Translate 字符串

完成标记后,便将所有新的字符串添加到了词汇表数据库中。有些字符串,例如关键字(如表单类型)是不能翻译的。因此,需要将这些字符串标记为不可翻译。我们称之为 Do Not Translate(DNT)字符串。标记这些字符串可以防止它们被翻译,并防止全球化后出现潜在的缺陷。

例如,可以在 Lotus Domino Address Book 应用程序的 ($InternetSites) 视图中看到如图 4 所示的代码部分。这个视图中的字符串应该在词汇表中被标记为 DNT,因为表单名称应该保留为英文。翻译这个视图中的字符串会导致功能错误。

图 4. ($InternetSites) 视图
($InternetSites) 视图

图 4 显示了 DNT 字符串的一个例子,以及一种很好的关键字表达方式,这种方式将单词组合成字符串,中间不留空格(例如 WebSite 通常是关键字)。还可以使用大小写混合形式表达关键字。图 5 是从 (Notice) 表单 Mail8.ntf 中截取下来的。在此,“update” 被写成 upDatE ,以标识 DNT 字符串。

图 5. DNT 字符串
DNT 字符串

翻译

词汇表数据库中有很多英文字符串需要被翻译,如图 6 所示。翻译可以在内部完成,也可以由外部的翻译器完成。翻译器需要打开词汇表数据库,复制英文字符串,翻译字符串,然后将用新语言表达的字符串存储到词汇表数据库。

提示:在翻译之前,要记得在词汇表数据库中运行检索功能,以减少未翻译的字符串的数量。检索功能可以从其他词汇表或词汇表数据库本身提取已有的翻译。

图 6. 词汇表数据库
词汇表数据库

构建语言应用程序

至此,已经有了一个标记数据库和一个包含英文字符串和翻译后的字符串的词汇表。Lotus Domino Global Workbench 通过将标记数据库与词汇表数据库中的翻译合并,创建本地化的 Lotus Notes 应用程序。

提示:在 Build Options 窗口的 Basics 面板中,选择 Errors/Warning Level 的所有选项,并确保 Omit locale identifier 选项被选中。当标识符包含国家代码,例如 pt-BR、zh-CN 和 zh-TW 时,不要选择 Omit locale identifier 选项。标识符在本地化应用程序中创建一个由 4 个字符组成的 $Language 字段。以 Brazilian Portuguese 为例,它必须与 Iberian Portuguese 区分开来,后者有一个标识符 pt。如图 7 所示。

图 7. Build Options 窗口的 Basics 面板
Build Options 窗口的 Basics 面板

提示:在 Build Options 窗口的 Options 面板中,选择以下选项:

  • Copy ACL from source database
  • Replace fonts
  • Preserve layout on update

这些选项适用于大多数 Lotus Notes 应用程序设计。所有的 Lotus Notes 模板,例如 mail8.ntf,都使用这些选项进行全球化。

单击 Set Settings As Default 保存设置,以便将来使用。

以上描述了全球化 Lotus Notes 应用程序的标准过程。在接下来的小节中,我们将分享更多预防全球化错误的经验。


将字符串和翻译存储在属性文件而不是词汇表数据库中

在 Lotus Notes and Domino 8.5 之前,使用词汇表数据库来存储从英语翻译过来的其他国家语言的术语。然后,将翻译导入到 Lotus Domino Global Workbench 中以构建语言应用程序。为了显著减少这种应用程序全球化中的人为工作,从 Lotus Notes and Domino 8.5 开始,属性文件替代词汇表数据库成为翻译储存库。本节简要描述一下这个重要的变化。

我们来看看下面列出的词汇表数据库与属性文件之间几个较大的不同点,这些不同点说明了为什么属性文件更适合存储翻译:

  • 格式。词汇表数据库是专用的特定于 Lotus Notes 的格式,只能使用 Lotus Notes client 打开它们。而属性文件是纯文本文件,可以使用任何文本文件编辑器打开它们,它们使用可以被大多数计算机辅助翻译工具识别的标准格式。
  • 内容。词汇表数据库包含应用程序中可提取的所有字符串,包括不可翻译的字符串。而在属性文件中,可翻译字符串和不可翻译字符串分放在不同的文件中。
  • 文件大小。词汇表数据库比较大,因为它们是数据库。而属性文件则小得多,因为它们是文本文件。

在接下来的小节中,我们介绍 Lotus Notes and Domino 8.5 中新的应用程序全球化过程,并提供关于如何使用属性文件和 Lotus Domino Global Workbench 8.5 创建语言应用程序的逐步说明,另外还讨论这种新过程的优点。


新的应用程序本地化过程

如果使用新的过程,需要遵循以下步骤将英语应用程序全球化为指定的语言:

  1. 从应用程序中提取将放入到属性文件的所有可翻译字符串,并将它们放入到各自的文件夹中。例如,将 pubnames 模板的属性文件提取到一个名为 pubnames 的文件夹中,该文件夹在文件系统中一个指定的位置。将 resrc8 模板的属性文件放入 resrc 文件夹中;注意,这里去掉了模板版本号,以确保与将来的版本兼容。在属性文件夹中,每个设计元素都有它自己的属性文件,并且文件名遵从以下模式:

    Form.Switcher_Form_for_Calendar.Properties

    这个文件名告诉我们该文件包含表单 Switcher Form for Calendar 的属性。这个属性文件中的条目采用以下格式:

    type.title.subtype.subtitle.original_string=translated_string

    例如,可以有一个这样的条目:

    Form.Switcher_Form_for_Calendar_|_
    SwitcherForm_Calendar.Action_Label_Formula.Calendar_Archive=Calendar Archive

    从这些例子中可以看出,属性文件的名称和条目名称都是自描述的,因此翻译者和工程师更容易找到需要的属性文件。

  2. 提取和检查 DNT 字符串。Lotus Domino Global Workbench 8.5 可以直接从应用程序提取 DNT 字符串,并将这些字符串放入 DNT 属性文件中。当一个字符串既在 DNT 中又在可翻译属性文件中时,Lotus Domino Global Workbench 将它视作 DNT 字符串。为了避免混淆,需要仔细检查字符串,确保可翻译属性文件中没有 DNT 字符串,而且 DNT 文件中也没有可翻译字符串。在检查 DNT 字符串后,如果需要在 DNT 属性文件中添加或删除条目,可以直接在 DNT 属性文件中做出必要的更改。

    提示:在从旧过程到新过程的过渡阶段,我们使用代理从词汇表数据库提取 DNT 字符串,并将它们放入到属性文件中,每个应用程序使用一个 DNT 属性文件。

  3. 将属性文件翻译成不同的语言。翻译者可以使用常见的翻译工具,例如使用 Trados 直接在这些文件上执行翻译工作。
  4. 用翻译好的属性文件构建语言应用程序。由于属性文件比词汇表数据库小得多,因此构建语言应用程序所需的时间更短。当构建大型应用程序,例如 mail 和 pubnames 时,节省的时间和翻译成本特别显著。
  5. 根据需要调整语言应用程序中的布局。在某些情况下,字符串被翻译成其他语言后,会被截短或拉长。虽然通常布局对功能没有任何影响,但是可能会使一些用户不快。

使用属性文件的优点

使用属性文件代替词汇表数据库存储翻译后的内容,可以得到以下好处:

  • 成本的节省。由于属性文件的格式可以被常见的计算机辅助翻译工具接受,因此可以避免为维护词汇表数据库而开发特定于 Lotus Notes 和 Lotus Domino 的工具所带来的额外成本。也就是说,需要访问属性文件的用户不需要使用 Lotus Notes client 来处理词汇表数据库,因而可以显著减少相关的成本。
  • 翻译质量的提高。由于采用了翻译工具友好的属性文件,翻译者可以轻松地知道之前哪些翻译已经被应用到某个特定的英语术语。因此,他们可以重用那个术语的适当翻译。所以,同一英语术语的翻译更加一致,从而提高了 Lotus Notes 应用程序的整体质量。
  • 之前为特定语言所做的工作得以保留。Lotus Domino Global Workbench 8.5 可以导出和导入布局属性,这意味着之前发行版中为每种语言花费不少时间进行的布局更改可以保留下来,并在后面的发行版中重用。保留和重用还意味着每当发行应用程序的新版本时,不需要做重复的工作。
  • DNT 字符串管理的简化。在新的过程中,DNT 字符串保存在单独的文件中,而没有与可翻译字符串混在一起。因此,翻译者可以确信在属性文件中看到的全部条目都是需要翻译的,这样可以减少管理术语的复杂性,并避免翻译者不经意间处理了不该翻译的字符串。
  • 性能的提高。由于是文本文件,因此属性文件比词汇表数据库小得多。这不仅可以减少构建应用程序时 Lotus Domino Global Workbench 用于装载翻译的时间,而且使存储和转移属性文件变得很容易。

使用 Lotus Domino Global Workbench 8.5 创建属性文件和构建应用程序

本节展示如何使用 Lotus Domino Global Workbench 8.5 创建语言应用程序。

从英语应用程序创建属性文件

遵循以下步骤:

  1. 启动 Lotus Domino Global Workbench 并创建一个新项目后,选择窗口中的 Click Here to Choose the New Source Database 区域。然后选择需要用于生成属性文件的源英语数据库。单击 Done。如图 8 所示。

    图 8. 选择 Lotus Notes 数据库
    选择 Lotus Notes 数据库
  2. 选择窗口中的  Click Here to Choose the Properties Files Dir for(应用程序名称)区域,并选择存放生成的属性文件的文件夹。单击  OK。如图 9 所示。

    图 9. 选择存放属性文件的文件夹
    选择存放属性文件的文件夹
  3. 单击 Create Properties 按钮,如图 10 所示。

    图 10. Create Properties 按钮
    Create Properties 按钮
  4. 如图 11 所示,在显示的窗口中,单击黄色的文件夹按钮,让 Lotus Domino Global Workbench 知道这个应用程序的 DNT 属性文件存放在文件系统中的位置。单击 OK。

    图 11. Create Properties File 窗口
    Create Properties File 窗口
  5. 输入 Lotus Notes 密码,开始创建过程。

    注意:如果在同一个 Lotus Domino Global Workbench 会话中已经为其他任务输入了密码,可能不会显示提示输入密码的窗口。

  6. 生成的属性文件被放入到步骤 2 中指定的文件夹中。

构建语言应用程序

遵循以下步骤构建语言应用程序:

  1. 启动 Lotus Domino Global Workbench 并创建一个新项目之后,在显示的窗口中选择 Click Here to Choose the New Source Database to Be Localized 区域,并选择要本地化的英语应用程序。单击 Done,然后选择源 English 模板。单击 Select。如图 12 所示。

    图 12. 选择英语应用程序
    选择英语应用程序
  2. 在显示的窗口中选择 Click Here to Choose the Properties Files Dir for(应用程序名称)区域,并选择存放生成的属性文件的文件夹。单击 OK。

    图 13. 选择属性文件目录
    选择属性文件目录
  3. 选择 File - Add an Existing Tagged Database。
  4. 在显示的窗口中,单击 Browse,然后再次选择要本地化的英语应用程序(步骤 1 中选择的应用程序)。单击 Done。然后,再次选择源英语模板。单击 Select。如图 14 所示。

    图 14. 选择 tagged 数据库
    选择 tagged 数据库
  5. 在显示的窗口中单击 Choose Languages 按钮,并选择要将英语应用程序翻译成何种语言。如图 15 所示。

    图 15. Choose Languages 窗口
    Choose Languages 窗口
  6. 在显示的窗口中单击 Build Language Database 按钮。这时会显示一个标题为 Create Language Database 的新窗口。单击黄色的文件夹按钮,输入用于本地化应用程序的文件名。单击 Done。

    图 16. Create Language Database 窗口
    Create Language Database 窗口
  7. 在 Create Language Database 窗口的 Basics 面板中,选择用于错误和警告级别的选项。单击 OK。
  8. 在 Create Language Database 窗口的 Options 面板中,选择属性选项。单击 OK。
  9. 输入 Lotus Notes 密码,开始该过程。

    注意:如果在同一个 Lotus Domino Global Workbench 会话中已经为其他任务输入了密码,可能不会显示提示输入密码的窗口。

本地化应用程序现在已经在步骤 6 指定的文件夹中。


得到的教训:防止全球化问题

除了我们讨论的全球化过程外,我们还发现一些技巧,这些技巧可以帮助您防止全球化错误。

  • 编程时记录 DNT 信息。有时候,很难判断一个字符串是否是可翻译的。因此,最佳实践是在编程阶段添加注释。

    可以在 DNT 字符串前添加如下所示的注释:

    REM {DO NOT TRANSLATE! THIS IS AN ALIAS};

    还可以用混合大小写字母的形式拼写字符串。

    提示:不要试图翻译别名,例如表单别名或代理别名,因为这些名称不需要翻译(虽然它们是可翻译的)。但是要记住,用户界面中显示的元素名称是可翻译的。

  • 考虑单个可执行的设计。对于任何受支持的语言,应该考虑一个可在全球执行的设计。避免翻译后修改不同语言应用程序中的代码。

    糟糕的设计会导致翻译应用程序后要做额外的工作。下面是这类问题的一个例子。

    常用于减少代码行数和重复表达的串联字符串对于开发人员来说可能比较方便,但是有时候会导致全球化阶段需要付出更多的努力。

    在图 17 显示的示例公式中,一个名为 (emailHelper) 的代理显示一个窗口,该窗口的标题为一个变量字符串 sys+" Mail System"。这个字符串在英语中看上去是正确的,但是在德语中,正确的表达是 Mail system: sys,因此需要额外的工作来修复新的语言出现的问题。

    图 17. 示例公式
    示例公式

    更好的设计是尽可能构造完整的句子,并使用 @Replace 替代关键字。在这里,可以像清单 1 那样更改代码。

    清单 1. 更正后的示例公式
     REM {END variables to translate}; 
     REM {Display the helper form - results are returned to current document}; 
     @If(helper != ""; @DialogBox(helper; [AutoVertFit]:[AutoHorzFit]:[NoNewFields] : 
     [SizeToTable]; @Replace("sysTxt Mail System";sysTxt; sys)); "");

    标记后的字符串变成 sysTxt Mail system,而不是 Mail system。这个步骤可以帮助翻译者提供更适合的翻译。

  • 为本地化应用程序使用常见的布局。很多翻译问题出现在用户界面上。字符串长度可能因语言的不同而变化。例如,德语的单词长度大于很多其他语言。因此,可能需要调整 UI 中组件的宽度或长度。

    以 mail 模板为例。在英语环境中,DeleteCSPref 文本字段在 UI 中可以很好地显示。但是,在德语环境中,这个文本字段使用了更长的字符串标签,这可能导致截断问题,如图 18 所示。

    图 18. 使用德语时用户界面中的截断问题
    使用德语时用户界面中的截断问题

    在设计阶段需要预留一些空间,以防翻译后出现布局问题。


结束语

本文是关于全球化 Lotus Notes 应用程序的分两部分的系列文章的第一篇,文中概述了 Lotus Notes 应用程序的全球化过程,讨论了 Lotus Domino Global Workbench version 8.5 中将属性文件用于应用程序全球化的新特性,并分享了我们在全球化 Lotus Notes 应用程序和升级多语言应用程序时得到的教训。

参考资料

学习

获得产品和技术

讨论

条评论

developerWorks: 登录

标有星(*)号的字段是必填字段。


需要一个 IBM ID?
忘记 IBM ID?


忘记密码?
更改您的密码

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件

 


在您首次登录 developerWorks 时,会为您创建一份个人概要。您的个人概要中的信息(您的姓名、国家/地区,以及公司名称)是公开显示的,而且会随着您发布的任何内容一起显示,除非您选择隐藏您的公司名称。您可以随时更新您的 IBM 帐户。

所有提交的信息确保安全。

选择您的昵称



当您初次登录到 developerWorks 时,将会为您创建一份概要信息,您需要指定一个昵称。您的昵称将和您在 developerWorks 发布的内容显示在一起。

昵称长度在 3 至 31 个字符之间。 您的昵称在 developerWorks 社区中必须是唯一的,并且出于隐私保护的原因,不能是您的电子邮件地址。

标有星(*)号的字段是必填字段。

(昵称长度在 3 至 31 个字符之间)

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件.

 


所有提交的信息确保安全。


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=10
Zone=Lotus
ArticleID=398388
ArticleTitle=帮助客户全球化 IBM Lotus Notes 应用程序
publish-date=06192009