2010-07-14 61 views
0

有没有办法在messages.properties文件中自动清除/显示未使用的属性,该文件是巨大的atm,但系统已经改变了很多,其中一些没有被使用,手在代码检查中需要很长时间,并且我个人不喜欢浪费,有任何建议?clean messages.properties

把你的背景IM在接缝项目的工作,但是这可能是有效的其他Java项目

回答

2

不,没有。是的,这确实是您获得报酬的任务/责任之一。

为了方便现在和将来的维护,我自己在消息密钥中使用了一个面向树的约定,这样我(和我的后继者)就可以轻松地关联消息在视图方面的位置/使用。有点在pagename.parentid.childtype.childname.attributename

风格的样式一个home.login.label.username.tooltip键指向一个home.jsp

<form id="login"> 
    <label for="username" title="${text['home.login.label.username.tooltip']}"> 

保持对公约一致,你会发现它变得更容易把所有维持这个。

日志记录属性访问不会是一个快速的帮助。你最终会浪费更多时间。

1

我没有找到这方面的任何工具,我不相信他们的存在,正确率为100%。你可以编写你自己的解析器来搜索所有源文件中的所有消息密钥。正如你找到它们,你可以从列表中删除,以更快地进展。

那些仍然应该手动验证。

但是,这会节省很多时间。

+0

这是我将使用的方法,但它不会考虑的一件事是消息密钥是动态构建的情况 – 2010-07-14 14:21:07

+0

通过使用其他消息密钥动态构建,对吧?在这种情况下,如果似乎使用了“子密钥”,那么构建的消息也应该保留。我错过了什么吗? – thelost 2010-07-14 14:29:29

2

我想要走的路将是围绕Properties对象编写一个包装,以便您可以仪器(即记录)对该对象属性的所有访问。通过正常操作运行程序,然后分析日志以找出实际使用的属性。

作为一种改进,您可以使用记录本身的用法的Tally扩展Properties对象,以及将所有使用的属性写入文件以供您按需使用的方法。这将使您无需摆弄日志文件。

+1

除了按体积计算外,属性的最大用途是消息外部化(与给定提交者的文件名“messages.properties”有关),并且其中大部分通常是错误消息。所以通过“正常运行”来运行你的程序将是极其不足的。 – 2010-07-14 14:46:05

0

如果您有权访问bash(在Windows上,如果您在Mac/Linux上安装Git,您已经拥有了它),那么这个小小的一行就可以完成缩小搜索范围的一半体面工作:

YOURPROPS=messages.properties 
SRCDIR=src 
egrep -v "($(
    cut -s -d = -f 1 <$YOURPROPS | 
     while read prop; do 
      grep -q -d recurse '"'"$prop"'"' $SRCDIR && echo "$prop"; 
     done | xargs echo | sed 's/ /|/g'))" $YOURPROPS | cut -s -d = -f 

(这是假设所有的属性都这样写name=value没有多余的空格周围等号,您使用等号,而不是冒号或分隔空间等)

它将输出所有属性这些文件在$SRCDIR的任何文件中都没有用双引号括起来。这意味着它可能会带来一些误报。举例来说,如果你有这样的事情:

String msg = I18n.getString("foo.bar." + "baz"); 

...它会认为物业foo.bar.baz没有出现在源目录中。但正如我所说,这有助于缩小搜索范围。

0

这是我的开源项目,围绕着语言文件的概念。您将维护一个包含所有翻译的结构化XML文件。 i18n-maven-plugin会自动创建属性文件。您也可以创建一个Java访问器类来访问这些密钥。您可以使用其他代码检查工具来查找未使用的访问器方法。 请参阅:https://github.com/hoereth/i18n-maven-plugin/blob/master/doc/README_JAVA.md