Чтение имени и значения из каждого определения («ИМЯ», «ЗНАЧЕНИЕ»);внутри файла .php - PullRequest
2 голосов
/ 30 марта 2012

Я реализую интерфейс php для обработки файла .php, содержащего набор определений предложений, определяющих константы с текстовыми значениями, которые кто-то переводит.

Входные данные анализируются по предложениям и отображаются в интерфейсепереводчику, который будет вводить перевод в текстовой области html и отправлять его на сервер

. К концу процесса будет создан выходной файл, идентичный входному файлу .php, только с определенными значениями.переведенный.

Например, обработка входного файла '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. Можно ли получить перевод от переводчика Google, показанного вввод текстовой области в качестве предложения для редактирования для человека, который переводит это?Как?(Я читаю переводчик Google api v1 больше не доступен, а v2 доступен только как платный сервис. Есть ли бесплатные альтернативы?)

Ответы [ 4 ]

2 голосов
/ 30 марта 2012

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 голосов
/ 30 марта 2012
1 голос
/ 31 марта 2012

В случае, если кому-то нужно прочитать имена и значения констант, определенные в данном файле .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 (между одинарными (') или двойными (") кавычками.)

Кроме того, экранированные кавычки (\ "или \ ') временно экранируются как \ q (\") или \ s (\'), чтобы должным образом соответствовать не экранированным, а затем возвращаются обратно.как обычно, однажды то, что находится между неэкранированными, присваивается $ name и $ value.

Проблема с API API Google вместо этого была решена с помощью API-интерфейса перевода Microsoft (бесплатно до 2.000.000 символов / месяц): http://msdn.microsoft.com/en-us/library/ff512421.aspx#phpexample

1 голос
/ 30 марта 2012

Используйте get_defined_constants () , чтобы получить список всех определенных констант.

Чтобы получить пользовательскую константу специально

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