作为一个团队,我目前正在致力于国际化一个非常大的 Perl/ Mason Web 应用程序(这是否使这成为死亡行军??)。该应用程序已接近 20 年,并且是用相对老式的 Perl 风格编写的;它不使用 Moose 或其他 OO 模块。我目前正计划使用Locale::Maketext::Gettext进行消息查找,并使用 GNU Gettext 目录文件。
我一直在尝试开发一些工具来帮助从我们的 bigass 代码库中提取字符串。目前,我所拥有的只是一个相对简单的 Perl 脚本,用于通过源代码解析以查找字符串文字,提示用户一些上下文以及是否应将字符串标记为翻译,如果是则标记它。
我需要标记的字符串与我可以忽略的字符串相比,噪音太大了。源中的许多字符串不是面向用户的,例如哈希键,或类型比较,例如
if (ref($db_obj) eq 'A::Type::Of::Db::Module')
我确实对每个提议的字符串应用了一些启发式方法,看看我是否可以立即忽略它(例如,我忽略了用于哈希查找的字符串,因为在我们的代码库中,99% 的时间这些字符串不是面向用户的)。然而,尽管如此,我的程序显示给我的大约 90% 的字符串是我不关心的。
有没有更好的方法可以帮助自动化我的字符串提取任务(即比从源代码中获取每个字符串文字更智能的方法)?是否有任何商业程序可以同时处理 Perl 和 Mason 源代码?
另外,我有一个(相当愚蠢的)关于一个优秀工具的想法,我把它的工作流程放在下面。是否值得付出努力来实现这样的事情(这可能会很快处理 80% 的工作),还是我应该接受一个费力、烦人的手动字符串提取过程?
- 首先从源中提取每个字符串文字,并将其放入 Gettext PO 文件中。
- 然后,编写一个 Mason 插件来解析应用程序所服务的每个页面的 HTML,目的是记录用户正在查看的字符串。
- 使用该应用程序并尝试涵盖所有用例,建立一个面向用户的字符串存储。
- 给定用户看到的字符串存储,对目录文件中的字符串进行模糊匹配,并跟踪与 UI 匹配的目录条目。
- 最后,目录文件中未匹配的任何内容都可能不是面向用户的,因此请从目录中删除这些内容。