3

Are there any tools (free/commercial) that can audit an application for internationalization? (or localization-readiness, if you prefer)

Primarily interested in:

Mulitlingual Implementation tests

    Examples:  
    * [javascript] alert('Oops wrong choice!');  
    * [java] String msg = resourcebundle.getString("key.x").concat("4");  
    * [jdbc] String query=".. order by abc"; //should be NLS_SORT or equiv.  

Date Implementation tests

    Examples:  
    * SimpleDateFormat used without Locale  
    * Apache's DateFormatUtils used  

Numeric Implementation tests

    Examples:
    * NumberFormat used without Locale  

javascript-validation tests

    Examples:
    * [javascript] checkIsDecimal { //decimal point checked against "." }  
    * [javascript] hardcoded character range [A-z]  

Cheers.

4

3 回答 3

2

看看 Globalyzer - http://lingoport.com/globalyzer- 就是这样,一个专门为国际化对代码进行静态分析的工具。它也适用于各种编程语言。支持检测和纠正嵌入式字符串(字符串外部化功能)、潜在的语言环境限制方法/函数/类,具体取决于编程语言和要求,以及其他问题,如编程模式和嵌入式图像。有默认的“规则集”可以为您提供良好的开端,然后您可以自定义规则以检测和过滤问题。此外,还有一个底层数据库可以帮助您在处理 i18n 问题时标记或跟踪它们。有一个服务器组件,您可以在其中创建规则集并与团队成员共享,

于 2009-12-09T23:08:45.727 回答
1

根据您的示例,您最想诊断产生输出的函数,其输入没有以某种方式国际化。

因此,对于警报情况,您希望找到任何获取字符串的打印调用,该字符串不是由可能几个众所周知的翻译例程之一生成的。

对于 jdbc 案例,您想要识别不是特定于区域设置的排序约束。

对于各种日期情况,您需要已知的日期例程来生成特定于语言环境的答案。

javascript 验证更难猜测意图;大概您想诊断已知连接到特定语言环境的功能;这看起来很像约会案例。对于范围检查,您希望捕获将一个字符与另一个字符进行比较小于或大于的任何内容。

对于有线语言环境函数,似乎只知道它们的名称就足够了(尽管可能必须有一些重载决议,例如,通过参数的数量),所以 NumberFormat(?,?) 不好,而 NumberFormat(?, ?,?) 没问题。

为什么你不能编写一个正则表达式来(启发式地)查找坏情况?

对于范围情况,您只需要识别 [exp] < [literal-char] 或 [exp] < [literal-string] 形式的表达式。只查找“< '.+”的正则表达式似乎就足够了。

是否存在这些会遗漏的常见情况?

编辑(来自下面的评论:“我一直在使用正则表达式,但是......”)如果你想要一个比正则表达式更深的工具,你几乎必须进行语言解析、名称/类型解析和数据流分析会有帮助的。由于您要处理多种(计算机)语言,因此该工具必须具有多语言能力。您似乎希望能够对其进行自定义以检查与您的应用程序相关的特定案例。

DMS Software Reengineering Toolkit具有所有这些 属性,包括 Java、JavaScript 和 SQL 解析器。它是为定制而设计的,因此您必须在使用它之前进行定制。

于 2009-07-23T06:11:31.960 回答
0

我研究过 IntelliJ IDEA 的代码分析器,它确实有你要求的那些。它是一个商业 IDE,专门用于 java,但也知道其他语言。

http://www.jetbrains.com/idea/

于 2009-07-07T06:13:31.240 回答