在PHP文件中查找所有源硬编码字符串 - 翻译目的

时间:2011-11-18 03:31:34

标签: php string drupal language-translation

我必须将我的网站(用PHP编码)翻译成另一种语言。我一直在使用Drupal及其函数来处理这个问题,但仍然存在一些硬编码的字符串。

您是否知道可以帮助我在整个源代码目录中找到它们的脚本或软件?最好的是它也允许我改变它们。

2 个答案:

答案 0 :(得分:1)

请参阅Is there a semi-automated way to perform string extraction for i18n?以了解处理此问题的自动方法。虽然链接答案是特定于Java的,但相同的引擎/方案对PHP来说可以正常工作。

如果这太过分了,我们的Source Code Search Engine (SCSE)可以轻易识别这些,让您决定如何处理每个字符串。

SCSE是一种超级grep,它使用语言结构而不是原始字符文本。查询以语言标记而不是字符串表示。 SCSE索引源代码库的许多文件的所有标记,然后使用该索引来优化搜索。因为它使用语言准确的词法分析器,所以它理解字符串,注释,数字,关键字和空格的精确边界。查询是(语言)whitesphace不敏感。因此,要查找中间标记为“foo”的所有位置都指定了常量,可以编写查询:

I=*foo* '=' N

其中查询说“找到带有通配符约束的I(dentifiers),然后是语言标记=, 其次是N(数字)。

这对于使用普通查询查找程序中的所有字符串文字都非常重要:

S

这意味着,无论类型和语法如何,都可以找到没有任何约束的所有文字S(trings)(PHP有很多类型的字符串文字)。

生成的匹配可以在UI中显示,但是出于OP的目的,可以打开日志记录并让工具通过精确的文件和行号提供命中和位置。

SCSE拥有PHP和许多其他语言的扫描程序。

答案 1 :(得分:0)

我想到了几个选项:

如果您使用的是IDE,例如Eclipse,通常会有搜索功能,您可以搜索所有源代码。在Eclipse中,您可以转到“搜索” - > '文件'。

如果您没有使用具有搜索功能的IDE,但您可以在基于unix的服务器上访问命令行,则可以使用递归grep。例如:

grep -r "sometext" /path/to/code

如果要从命令行执行递归查找和替换,可以使用find和sed的组合:

find /path/to/code -type f -print0 | xargs -0 sed -i 's/sometext/newtext/g'