2008-09-03 51 views
9

我试图将我编写的任何应用程序中使用的所有字符串(以及其他常量)进行外部化,原因很多,可能是大多数堆栈溢出器的第二性质,但有一件事我希望能够自动化拼写检查任何用户可见的字符串。这带来了几个问题:将拼写检查器与构建过程结合的最佳方法

  • 并不是所有的字符串是用户可见的,这是不平凡的spearate他们,并保持该分离到位(但可能
  • 大多数,如果不是我使用的所有字符串外部化方法都涉及不会通过拼写检查程序的重要文本,例如aspell/ispell(例如:theStrName =“some string。”和注释)
  • 许多拼写检查程序(再一次,aspell/ispell)不要处理很多单词(通常是技术术语,专有名词,或只是'新'术语,如元数据)。

如何将这样的东西加入到构建过程/测试套件中?在某个应用程序每次更改时手动拼写检查所有字符串是不可行的 - 并且没有机会他们将在第一次拼写正确。

+1

我从来没有见过这种自动化的,但如果你这样做,使它成为一个建立警告,而不是一个错误。你想在你的手中的最后一件事是构建失败,因为有些字典只知道“电子邮件”,而不是“电子邮件” – slf 2009-09-09 15:35:37

+0

啊,非常好点! – rcreswick 2009-09-09 23:44:07

回答

1

我们手动完成,如果在测试过程中没有找到错误,那么它们会被质量检查团队或翻译人员在本地化过程中或在本地化质量检查过程中收集。然后我们提出一个错误。

我们的大部分开发人员不是英语为母语的人,所以对我们来说这并不罕见。穿过裂缝的数量非常少,这对我们来说是一个令人满意的解决方案。

没有超过几百行是完全没有错误的(好吧......也许是一块奇怪的嵌入式代码),只要把错误看成错误,不要浪费太多时间就可以了。

只要您的应用程序成熟,超过90%的字符串在发布之间不会发生变化,并且比较两个版本的资源,找出新的(先检查它们)是一个相当简单的练习,什么改变/更新(检查下一个)和什么没有改变(不需要检查这些)

所以想想它更像是我需要手动检查所有这些,第一次,我只会去下次必须检查其中的10%。现在问自己,你是否真的需要自动化拼写检查。

-1

使用aspell。这是一个程序,它可用于unixoids和cygwin,它可以运行多种源代码。用它。

-2

第一点,不要把它放到你的建造过程中。如果我(意思是我的电脑)每次尝试调试或构建新功能时都必须拼写检查网站上的所有内容,我才会成为报复性编码器。我甚至不认为这种操作属于单元测试(你正在测试人机界面,而不是电脑化的)。

第二点,不要写脚本。你将会有太多的误报会通过人们会停止阅读报告的裂缝,而且你比起步时好不了多少。

第三点,这可能是最容易通过人类来解决的问题:QA团队,复制作家,测试人员,翻译人员等。我建立的所有拥有国际化内容的大型网站都有相同的流程:我们从副本编写者那里获得副本,将其发送给翻译服务/代理机构,将其放入持久层并部署。测试人员(QA,开发人员,PM,设计师等)会发现拼写或语法错误并提交错误报告。 有太多的繁文and节和眼睛,许多拼写/语法错误滑过。

第四点,您的网页上总会出现拼写和语法错误。即使是主要的报纸网站也没有涉及到这一点,他们的整个办公楼都是编辑。

1

我能想到的两种方法这个半自动化的方法:

让编译器帮你其他地方使用的UI使用的字符串和字符串之间进行区分。根据它的用途重载字符串数据类型的不同变体,并将输出方法重载为只接受该类型 - 这样您就可以创建一个仅输出UI字符串的假UI,并对其进行拼写检查。

如果这是可行的,当然取决于平台和应用程序的整体架构。

另一种方法可能是简单地将更新拼写检查器数据库与出现在代码中的所有字符串 - 注释,xpaths,表名称,您的名称 - 并将它们视为完美córiculent。这当然会降低拼写检查的精确度。

1

关于字符串外化的第一件事 - GNU GetText(如果使用正确)创建的字符串文件几乎不包含文本,除了字符串的实际内容(有一些头文件但很容易导致拼写检查程序忽略他们)。

第二件事,我会做的是在持续集成环境中运行拼写检查器,并且可能通过Web界面向外部提供错误,但电子邮件也可以工作。然后,开发人员可以查看错误,要么解决这些问题的代码或使用一些简单的界面,让拼写检查知道,一个拼写错误应该被忽略(网络接口可以整合两种错误观点和拼写检查器接口)。

1

如果您正在使用java并将您的本地化字符串存储在资源包中,那么您可以检查Bundle.properties文件并验证包字符串。您还可以添加一个特殊注释注释,您的处理器可以使用它来确定是否应该跳过一个条目。

此方法将允许您提供有关语言环境的提示,并提供在一个构建过程中检查多种语言的方法。

我不能回答你将如何执行实际的拼写检查本身,但我想我已经提出了将你的GUID作为进行拼写检查的方法是什么。