我必须将我的网站(用PHP编码)翻译成另一种语言。我一直在使用Drupal及其函数来处理这个问题,但仍然存在一些硬编码的字符串。
您是否知道可以帮助我在整个源代码目录中找到它们的脚本或软件?最好的是它也允许我改变它们。
答案 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'