在php中搜索函数调用以生成翻译文件

Mat*_*Mat 4 php grep pattern-matching

我正在开发一个需要多语言的php网站.出于这个原因,我实现了一个具有以下标题的翻译功能:

function t($string, $replace_pairs = array(), $language = NULL)
Run Code Online (Sandbox Code Playgroud)

基本上,这个函数在我的项目的多个文件中被调用如下:

echo '<p>' . t('Hello world!') . '</p>';
$hello_String = t("Hello @name!", array('@name'=>$username));
Run Code Online (Sandbox Code Playgroud)

我还没有生成翻译字符串,我想自动生成多个翻译文件(每种语言一个).

我正在寻找的是一个bash程序(或单个命令,例如使用grep),它将查找对此t()函数的每次调用并生成具有以下结构的php文件:

<?php
/* Translation file "fr.php" */
$strings['fr']['Hello world!'] = '';
$strings['fr']['Hello @name!'] = '';
Run Code Online (Sandbox Code Playgroud)

有没有人遇到这种情况,可以帮助我吗?

非常感谢你.

亲切的问候,

马蒂厄

dec*_*eze 11

是的,你并不是第一个遇到这个问题的人.:)

你可以使用古老的gettext系统,你不需要发明自己的函数.然后你就可以使用xgettext,这是一个命令行实用程序,可以使用该_()函数提取字符串.

如果你想出于任何原因推出自己的系统,最好的办法是编写一个PHP脚本,用于token_get_all标记源代码,然后通过标记查找T_FUNCTION带有值的s t.

  • 你可能总是需要`func('String%var',$ var)`的语法.做一些像`func(_('String%var'),$ var)`的事情并没有那么复杂.你可以决定`func`应该做什么.它可以是`strtr`,`sprintf`或其他任何东西.BTW,`sprintf`允许使用`%1 $ s%2 $ s`语法完全正确地重新排序参数. (2认同)

nic*_*kl- 2

无需重新发明轮子

Drupal 使用相同的 t() 函数进行本地化,并且potx模块是您的朋友。

如果您还没有或想要安装 drupal 实例,您可以查看potx.inc文件并在脚本中重用它。

以下是翻译模板提取器的完整API 文档。