从每个定义中读取名称和值(';name';,';value';);php文件中


Read name and value from every define('NAME','VALUE'); inside a .php file

我正在实现一个php接口来处理一个.php文件,该文件包含一堆定义常量的语句,这些常量具有要由某人翻译的文本值。

输入被逐句解析,并显示在翻译人员的界面中,翻译人员将在html文本区域中输入翻译并将其发送到服务器

过程结束时,将生成一个输出文件,与input.php文件相同,只是转换了define值。

例如,处理输入文件"eng.php",如下所示:

<?php
define ("SENTENCE_1", "A sentence to translate");
?>

将提供翻译后的输出文件"spa.php",如下所示:

<?php
define ("SENTENCE_1", "The same sentence translated to spanish");
?>

为此,我想知道:

  1. 解析输入文件以获得数组中的常量名称和值的最佳方法是什么?(类似于$var[0]['name']的内容是"SENTENCE_1",$var[0]['value']的内容则是"要翻译的句子")

  2. 是否可以从谷歌翻译器获得显示在输入文本区域的翻译,作为为翻译人员编辑的建议?怎样(我读到谷歌翻译api v1不再可用,v2只能作为付费服务使用。有免费的替代方案吗?)

http://php.net/manual/es/function.get-defined-constants.php

那呢?

get_defined_contents并没有提供您所要求的结构,但它应该足够了。

define('MY_CONSTANT', 'something');
define('MY_CONSTANT_2', 'another');
$constants = get_defined_constants(true);
$constants = $constants['user'];
print_r($constants); 
/**
 * array(
 *  'MY_CONSTANT' => 'something',
 *  'MY_CONSTANT_2' => 'another'
 * )
 */

请注意,这将是当前作用域中定义的所有常量,在PHP中,当前作用域将是此请求中定义的任何常量。

使用get_defined_contents()获取所有已定义常量的列表。

获取用户定义的常量,特别是

$allconstants = get_defined_constants(true);
print_r($allconstants['user']);

如果任何人需要将给定.php文件中定义的常量名称和值读取到变量数组中,而没有实际定义这些常量(例如,如果以前定义了具有相同名称的不同常量,因此在使用includerequire处理文件时出错),以下是我的操作方法(警告:我还没有遇到任何问题,但它还没有经过彻底的测试,所以可能有问题)。

if (file_exists($filename)){
    $outf=fopen($filename,'r');
    while (($line=fgets($outf))!==false){
        if (strpos($line, 'define')!==false){
            $parts=explode("'"",implode("'"",explode("'",implode("''q",explode("'''"",implode("''s",explode("'''",$line)))))));
            $name=implode("'''",explode("''s",implode("'''"",explode("''q",$parts[1]))));
            $value=implode("'''",explode("''s",implode("'''"",explode("''q",$parts[3]))));
            $outconstants[$name]=$value;
        }
    }
}

您可以看到,我假设每行不超过1个define句子,并且常量的名称和值使用PHP表示法(在单(')或双(")引号之间)指定为字符串值

此外,转义引号(''"或''')会临时转义为''q(''")或''s('''),以正确匹配未转义的引号,然后在将未转义引号之间的内容分配给$name和$value后,再像往常一样转义回来。

谷歌api问题是使用微软翻译api解决的(每月最多释放2.000.000个字符):http://msdn.microsoft.com/en-us/library/ff512421.aspx#phpexample