静态分析工具,用于检测国际化问题

时间:2009-07-07 05:04:01

标签: java internationalization code-analysis

是否有可以审核国际化申请的工具(免费/商业)? (或者如果您愿意,可以使用本地化准备)

主要感兴趣:

多语言实施测试

    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.  

日期实施测试

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

数字实施测试

    Examples:
    * NumberFormat used without Locale  

javascript-validation测试

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

干杯。

3 个答案:

答案 0 :(得分:2)

看看Globalyzer - http://lingoport.com/globalyzer - 正是这个,一个专门针对国际化进行代码静态分析的工具。它也适用于各种编程语言。支持嵌入字符串的检测和校正(字符串外部化功能),潜在的语言环境限制方法/功能/类,具体取决于编程语言和要求,以及编程模式和嵌入式图像等其他问题。有一些默认的“规则集”可以帮助您获得良好的开端,然后您可以自定义检测和过滤问题的规则。此外,还有一个底层数据库,可帮助您在使用时标记或跟踪i18n问题。有一个服务器组件,您可以在其中与团队成员创建和共享规则集,然后在计算机上本地运行的桌面和命令行客户端分析您的源,因此您不会发送任何代码或报告本地计算机。

答案 1 :(得分:1)

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

因此,对于警报情况,您要查找任何打印呼叫 获取非生成的字符串 可能是几个众所周知的翻译例程之一。

对于jdbc情况,您希望识别排序约束 这不是特定于语言环境的。

对于各种日期案例,您需要日期例程 众所周知,它会产生特定于语言环境的答案。

javascript验证更难以猜测; 大概你想要诊断已知的功能 连接到特定的区域设置;这看起来很像 日期的情况。对于范围检查,您需要捕获任何内容 将一个字符与另一个字符进行比较的次数小于或大于。

对于有线语言环境功能,它似乎只是知道它们 名字就足够了(虽然可能需要一些重载决议, 例如,通过参数的数量),所以NumberFormat(?,?)是坏的, 和NumberFormat(?,?,?)没问题。

为什么你不能写一个正则表达式来查看(恶意)的坏情况?

对于范围情况,您只需要识别表达式 形式为[exp]< [literal-char]或[exp]< [文字串。 寻找“<'。+”的正则表达似乎已经足够了。

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

编辑(来自下面的评论:“我一直在使用正则表达式但是......”) 如果你想要一个比regexp更深的工具,你几乎就是这样 必须去语言解析,名称/类型解析,并具有 数据流分析会有所帮助。既然你想要处理 多种(计算机)语言,该工具必须具有多语言能力。 并且看起来您希望能够自定义它以进行检查 与您的申请相关的具体案例。

DMS Software Reengineering Toolkit 拥有所有这些属性,包括 解析Java,JavaScript和SQL。它旨在定制, 所以你必须在使用它之前这样做。

答案 2 :(得分:0)

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

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