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


Find all source hardcoded strings within PHP Files - Translation Purpose

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

你知道一个脚本或软件可以帮助我在整个源代码目录中找到它们吗?最好的是它还允许我更改它们

参见是否有一种半自动的方法来执行i18n的字符串提取?用一种自动化的方法来处理这个问题。虽然链接到的答案是特定于Java的,但相同的引擎/方案也适用于PHP。

如果这太多了,我们的源代码搜索引擎(SCSE)可以识别这些琐碎的字符串,让您决定如何处理每个字符串。

SCSE是一种基于语言结构而不是原始字符文本进行操作的超级grep。查询是根据语言标记而不是字符串来声明的。SCSE对源代码库的许多文件的所有标记进行索引,然后使用该索引来优化搜索。因为它使用语言精确的词法分析器,所以它理解字符串、注释、数字、关键字和空格的精确边界。查询对(语言)空白不敏感。因此,要查找中间有"foo"的标识符被赋常量的所有位置,可以编写如下查询:

I=*foo* '=' N

,其中查询说,"使用通配符约束查找I(标识符),后跟language token =,后接任意N(数字)

这与查找程序中所有字符串字面值的简单查询都是相关的:

S

的意思是,找到所有不受任何类型和语法约束的字符串(PHP有许多类型的字符串)。

结果命中可以显示在UI中,但是对于OP的目的,可以打开日志记录并让工具通过精确的文件和行号提供命中和它们的位置。

SCSE有针对PHP和许多其他语言的扫描器

我想到了几个选项:

如果您使用的是IDE,比如Eclipse,通常会有一个搜索特性,允许您搜索所有的源代码。在Eclipse中,你可以点击'Search' -> 'File'。

如果您没有使用带有搜索功能的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'