65.9K
CodeProject 正在变化。 阅读更多。
Home

pseudoLocalizer——用于辅助国际化应用程序开发和测试的工具

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.50/5 (7投票s)

2004年10月7日

7分钟阅读

viewsIcon

50662

downloadIcon

1781

解释了为什么要进行伪本地化,以及一对用于“翻译”成有用的伪本地语言的工具。

Windows pseudolocalization tool

引言

伪本地化是验证软件翻译准备情况的一种技术。它允许您使用明显非英语但仍可读的字符串来运行和测试您的软件。遗留的硬编码英语字符串会被暴露。对特定英语值的逻辑依赖变得显而易见。对话框大小问题清晰可见。一次伪本地化可以通过任何编辑器完成,但拥有一个一致的转换,您可以在构建和测试周期中重复应用,这很有用。

背景

(对于阅读本文的非英语优先开发者,我深表歉意。本文和工具主要面向准备将其软件面向非英语市场的英语开发者。我相信伪本地化的概念无论您从哪种语言开始都很有用,但这个工具可能不会。)

创建软件国际版有两个基本步骤:全球化和本地化(包括翻译)。全球化涉及设计和构建代码,以便字符串与源代码分离,并且所有关于数字、日期、时间、单位格式的假设都可以在构建时或运行时更改。本地化涉及将字符串发送出去进行翻译,在翻译字符串返回后将其合并回来,解决对话框大小问题(非英语字符串通常比原始字符串长得多),并使所有数字、日期、时间、单位格式真正正常工作。

在实践中,特别是如果您正在尝试国际化一个庞大的代码库,这些步骤是迭代完成的。预先识别您所做的所有母语假设非常困难!真正没有替代方法可以替代看到您的产品以另一种语言运行;它会让问题跳到您眼前。但是,等到您有一个翻译承包商介入并花费您的钱才开始迭代,这是一种花费过多的好方法。使用伪本地化,您可以在将实际字符串发送到翻译公司之前很久就开始构建、运行和测试产品的非英语版本。它对那些烦人的日期、时间、数字和单位格式问题没有帮助,但它可以让您确信您已隔离了**所有**字符串资源,因此您的第一次翻译可以是一次完整的翻译。虽然彻底目视检查您所有发布语言版本的屏幕是必不可少的,但伪本地化字符串可以帮助您识别并清理最严重的对话框问题,在发布结束时时钟滴答作响之前。

这里使用的伪本地化是《开发国际软件,第二版》(Microsoft Press,2003年)第372页中概述的一种变体。字符串用花括号 ({}) 括起来,以便您可以一目了然地看到字符串是否被截断。每个元音的第一次出现都会变为双倍的非英语变体(例如,'a' 变为 'ââ'),这会引起字符集问题**并**适当地延长每个字符串。选定的其他字符会转换为非英语变体(例如,'n' 变为 'ñ')。并且,模仿法语,在选定的标点符号前插入空格。{Théé resüültííñg striñgs ââre distiñçtively ñóóñ-ÉÉñglish but still quite readable !}(翻译后的字符串明显是非英语,但仍然可读!)

使用该工具

我提供了 C# 和 Python 源代码以及 C# 可执行版本,用于伪本地化程序的两种变体。Python 最初被选为实现语言,因为它易于实现本地化转换且简洁。(读作:我喜欢使用它。:-))但是本地化引擎(_pLocalize.py_)可以很容易地用任何支持正则表达式的语言重写。另外两个模块是简单的包装器,可以用您习惯使用的任何语言重新实现。因此,当“编译后的 Python”可执行文件太大而无法上传到 CodeProject 网站时,我只是用 C# 重新编写了。

_pLoc.exe_ 是一个命令行工具,可用于翻译通过命令行传递的单词或短语,或作为文件中文本行传递。键入 'pLoc /?' 以获取语法说明。为了有用,您必须将输出重定向到文件。(请注意,输出在 DOS 框中看起来像垃圾,但如果将其重定向到文件并通过记事本或其他编辑器查看,则显示正常。欢迎来到不兼容字符集的奇妙世界。)

_pLocWin.exe_ 是一个 GUI 工具,可以独立使用,很像 _GuidGen.exe_,用于将单词或句子翻译成文本,然后可以复制到剪贴板。它还可以添加到 MSVC IDE 的工具菜单中,用于翻译您在编辑器中突出显示的字符串。

要将 pLocWin 作为工具添加到 IDE,请从“工具”菜单中选择“外部工具”。使用“添加”按钮,并在命令编辑框中添加可执行文件的完整路径。在参数编辑框中,添加:"$(CurText)"。(双引号是您需要键入的内容的一部分——它们允许处理多词短语和句子。)您突出显示的文本将显示为“要翻译的文本”。按下翻译和复制按钮,然后最小化 pseduoLocalizer 以返回到 IDE。按下 CTRL-V,伪本地化文本将替换原始文本。

关注点

“编译后的 Python”发行版生成的 zip 文件太大了,本网站无法处理或发布。唉。但是,既然我认为用任何处理正则表达式的语言重写所有组件会非常容易,我决定将其视为一个挑战,我迅速将代码移植到了 C#。

我必须说,在 MSVC IDE C# 环境中制作 GUI 应用程序是一种乐趣。它具备了制作 VB6 应用程序的所有便捷,却没有那种普遍存在的代码巫术感。(或者也许,我只是习惯了这么多事情都为我做好了!)C# 版本没有我的原始 Python 版本经过那么多测试;如果您遇到问题/疑问,请务必告诉我。

可能有用的变体

这种伪本地化有很多可能有用的变体。

您会注意到,我只翻译/双写了每个元音的第一次出现(大小写版本被视为单独的实例)。我的经验是,这提供了足够的字符串长度,足以暴露您在法语和德语翻译中发现的对话框大小调整问题。但是,如果您想进一步强调字符串长度问题,您可能希望将元音的转换扩展到第二次出现或所有出现。在 Python 正则表达式语法中,通过将 RawFindReplaceList 元组的第三个成员更改为 2(转换第一次和第二次出现)或 0(转换所有出现)可以轻松实现。

如果您要翻译的字符串包含在运行时用于填充可变文本的 C++ 或 Python 格式说明符,那么用括号将这些说明符括起来会非常有用。例如,将所有 "%s" 实例转换为 "<%s>"。(我将它们从我的转换中省略了,这样它们就可以保持语言中立。)

突出显示替换项很有用,因为它们本身很难正确翻译。词序因语言而异,因此将变量在字符串中的顺序硬编码的替换项会使翻译人员难以处理。(尽管,这是经验丰富的翻译人员习惯处理并可以解决的问题。)更麻烦的情况是,文章、介词或形容词被硬编码在可变名词前面。我们的英语单词“the”、“of”、“quick”和“red”无论后面跟着什么名词都是一样的,但在法语、德语或西班牙语中则不然。

历史

  • 2004 年 10 月 7 日 -- 初始版本。
  • 2004 年 10 月 12 日 -- 新的可下载 C# 可执行文件和匹配的源代码。
© . All rights reserved.