我们的一些开发人员(包括我在内)并不总是认真将文本放在本地化文件中,结果是有很多硬编码的文本分散在很多视图中。 我想知道是否有人有自动搜索视图中硬编码文本的想法? 是否有任何工具或方法可用于检查此类问题? 我想到了一个聪明的bash脚本是否可以完成这项工作,但我有些迷茫从哪里开始。 非常感谢您的任何帮助。
编辑:虽然不完全准确,但对我来说最好的答案是Andi的答案,因此我接受了他的答案。
我们的一些开发人员(包括我在内)并不总是认真将文本放在本地化文件中,结果是有很多硬编码的文本分散在很多视图中。 我想知道是否有人有自动搜索视图中硬编码文本的想法? 是否有任何工具或方法可用于检查此类问题? 我想到了一个聪明的bash脚本是否可以完成这项工作,但我有些迷茫从哪里开始。 非常感谢您的任何帮助。
编辑:虽然不完全准确,但对我来说最好的答案是Andi的答案,因此我接受了他的答案。
cat $(find . | grep .html.erb) | grep -v '[=<>{}$/;]' | grep '\w \w'
这是基于有些字符不常见于文本的想法来查找文本的。
grep -v '[=<>{}$/;]'
grep '\w \w'
这可能不是百分之百准确的,但是这是一种快速简便的方式,可以快速检查硬编码文本。
grep '\(\w\+\s\)\{2,\}'
。这只是一个良好的起点,可以进行优化。例如,将 2
更改为 4
然后看看会发生什么。 - Andigrep
命令吗?你能发布你的最终解决方案,这样我就可以编辑答案并添加它了吗? - Andi我受到Andi回答的启发,但也希望有一种简单的方法可以直接跳转到文件和行号(并且可以搜索以大写字母开头的单词)。
grep -r -n ".\+[ >^=]\([A-Z][a-z]\+\b\)" .
./interviews/show.html.erb:17: Your interview has been scheduled
./interviews/show.html.erb:49: Click the button below to add this event to your calendar.
^(?!.*(<(style|script|title).*?<\/\1>|<.*?>)).*$
在i18n-tasks的自定义任务页面中提到了一些“提取器”。
它们可以自动将视图中的硬编码文本提取到您的Yaml文件甚至数据库中(Lost In Translation)。
大多数似乎都提供交互模式,因此即使您不想自动提取文本,也可以使用它们来识别硬编码文本。
我没有尝试过它们,因此无法评论它们的有效性。
strings -n [number]
来查找具有特定字符数的任何文本。 <html> |
<head> |
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
|
<title>Example Page</title> |
|
</head> |
|
<body> |
<h1><%= @page.name %></h1> |
<p> |
This is a piece of hard coded text which must be found.
</p> |
</body> |
</html> | 40 characters
$ cat $(find . | grep .html.erb) | strings -n 40
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
This is a piece of hard coded text which must be found.
它应该在查找硬编码文本方面相当准确。