【问题标题】:Find all source hardcoded strings within PHP Files - Translation Purpose查找 PHP 文件中的所有源硬编码字符串 - 翻译目的
【发布时间】:2011-11-18 03:31:34
【问题描述】:

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

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

【问题讨论】:

  • 字符串是什么样的?它们是否传递到函数中?
  • like $var = "一种字符串";或 $var = '另一种类型的字符串';或 $var = "另一个" 。 $类型。 “字符串”;或 t("又一个");
  • 您使用什么样的开发环境?

标签: php string drupal language-translation


【解决方案1】:

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

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

SCSE 是一种超级 grep,它根据语言结构而不是原始字符文本进行操作。查询是用语言标记而不是字符串来表示的。 SCSE 索引源代码库的许多文件的所有标记,然后使用该索引来优化搜索。因为它使用语言准确的词法分析器,所以它理解字符串、cmets、数字、关键字和空格的精确边界。查询是(语言)空白不敏感的。因此,要查找中间有“foo”的标识符被分配了一个常量的所有地方,可以编写一个查询:

I=*foo* '=' N

其中查询说,“查找具有通配符约束的 I(标识符),后跟语言标记 =, 后跟任意 N(数字)。

这对于在你的程序中使用简单的查询来查找所有字符串文字都是相关的:

S

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

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

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

【讨论】:

    【解决方案2】:

    我想到了几个选项:

    如果您使用的是 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'
    

    【讨论】:

    • 这将帮助我找到一个特定的字符串,但我的目标是检索每个 php 字符串内容。
    • 其实如果你使用的是Eclipse,那么搜索功能可以使用正则表达式。您可以创建一个正则表达式来捕获单引号和双引号之间的所有内容。
    • 您也可以在 grep 和 sed 中使用正则表达式。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-04-22
    • 1970-01-01
    • 2015-08-28
    • 2015-07-24
    • 2016-06-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多