我正在实现一个php接口来处理一个.php文件,该文件包含一堆定义句子的定义句子,文本值由某人翻译。
输入被逐句解析并显示在翻译人员的界面中,翻译人员将在html textarea中输入翻译并将其发送到服务器
在流程结束时,将生成一个输出文件,与输入的.php文件相同,只有转换的定义值。
E.g。像这样处理输入文件'eng.php':
<?php
define ("SENTENCE_1", "A sentence to translate");
?>
会像这样给出翻译后的输出文件'spa.php':
<?php
define ("SENTENCE_1", "The same sentence translated to spanish");
?>
为此,我想知道:
解析输入文件以获取数组中常量名称和值的最佳方法是什么? (类似$var[0]['name']
的内容将是“SENTENCE_1”而$var[0]['value']
将是“要翻译的句子”)
是否可以将输入文本区域中显示的谷歌翻译器的翻译作为编辑翻译人员的建议?怎么样? (我读谷歌翻译api v1已不再可用,v2仅作为付费服务提供。有免费替代品吗?)
答案 0 :(得分:2)
答案 1 :(得分:2)
get_defined_constants并未准确提供您所要求的结构,但它应该足够了。
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中将定义此请求。
答案 2 :(得分:1)
使用get_defined_constants()获取所有已定义常量的列表。
专门为用户定义常量
$allconstants = get_defined_constants(true);
print_r($allconstants['user']);
答案 3 :(得分:1)
如果有人需要将给定.php文件中定义的常量名称和值读入变量数组而不实际定义这些常量(例如,如果之前定义了一些具有相同名称的不同常量,则会在出现错误时发出错误用include
或require
处理文件,这就是我做的方法(警告:我还没有遇到任何麻烦,但是没有经过彻底的测试,所以它可能有问题)。
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表示法指定为字符串值(在单个(')或double(“)之间引号。)
此外,转义引号(\“或\”)暂时转义为\ q(\“)或\ s(\'),以正确匹配未转义的引号,然后像往常一样转义回来在非转义者之间分配$ name和$ value。
使用微软翻译api解决了google api问题(免费最多2.000.000个字符/月):http://msdn.microsoft.com/en-us/library/ff512421.aspx#phpexample