Как перевести комментарии в *.php файлах ?

Достался в наследство проект который писали бравые китайцы. Порядка 200х файлов и все комментарии сделаны на китайском :).

Как все эти комментари автоматически ( может быть с помощью гугл транслейт) перевести на английский. Понятно что перевод будет кривой, но это лучше чем китайские комменты :)
  • Вопрос задан
  • 2962 просмотра
Пригласить эксперта
Ответы на вопрос 7
@egorinsk
Хороший повод выучить китайский, не?
Ответ написан
Комментировать
difiso
@difiso
В параллельной вселенной я космонавт
Я думаю что проще всего, на таких объемах, выучить китайский написать скрипт: выдираем коммент, спрашиваем гугл и ответом гугла заменяем или дополняем коммент в файле.
Ответ написан
Aco
@Aco
Заклинатель кода
Попробуйте так (убедитесь что у Вас включен tokenizer):
<?php

const SCRIPTS_DIR = '/data/www/framework/lib';

$dir = new RecursiveIteratorIterator(new RecursiveDirectoryIterator(SCRIPTS_DIR));

$replace = array(
	'<hh user=param>' => '#PARAM#',
	'<hh user=return>' => '#RETURN#',
	'<hh user=desc>' => '#DESC#',
	'<hh user=throws>' => '#THROWS#',
	'<hh user=see>' => '#SEE#',
	'<hh user=link>' => '#LINK#',
	'<hh user=access>' => '#ACCESS#',
	'<hh user=since>' => '#SINCE#',
	'<hh user=static>' => '#STATIC#',

);

foreach($dir as $source) {
	if($dir->isDot()) {
		continue;
	}
	$file = file_get_contents($source->getPathname());
	$tokens = token_get_all($file);

	foreach($tokens as $token) {
		if(!is_array($token)) {
			continue;
		}
		if(in_array($token[0], array(T_COMMENT, T_DOC_COMMENT))) {
			$text = preg_replace('![\n\r][\t ]*\*!sSim', "\n", $token[1]);
			$text = str_replace(array_keys($replace), array_values($replace), $text);
			$translate = Yandex::translate($tokens[1]); //
			$translate = str_replace(array_values($replace), array_keys($replace), $text);
			$file = str_replace($tokens[1], $translate, $file);
		}
	}

	file_put_contents($source->getPathname(), $file);
}
Ответ написан
EugeneOZ
@EugeneOZ
Сочувствую.
Если точно нет шансов переписать это с нуля, то могут пригодиться:
php.net/manual/ru/reflectionclass.getdoccomment.php (для описания классов)
www.php.net/manual/ru/reflectionfunctionabstract.getdoccomment.php (для методов)
Ответ написан
Комментировать
Fesor
@Fesor
Full-stack developer (Symfony, Angular)
Выдрать комментарии, как уже писали выше, можно через рефлексии. Правда это особо не поможет их заменить.

А вот обработать комментарии можно так:
function translateComments($file)
{
     $expr = "/((?:\/\*(?:[^*]|(?:\*+[^*\/]))*\*+\/)|(?:\/\/.*))/";
     $source = file_get_contents($file);
     preg_match_all($expr, $comments, $source); //capture the comments
     
     foreach($matchs[0] as $id => $phpdoc){ 
          $source = str_replace($phpdoc,  translateText($phpdoc), $source); // replace the scores of empty 
     }

     file_put_contents($file, $source);
}


Пример абстрактен, но суть должна быть ясна. Хотя логично эту регулярку через preg_replace_callback прогнать.
Ответ написан
eaa
@eaa
дык… тут по идее писать-то не сильно долго:

— берем файлик.
— вытаскиваем регэкспом коммент.
— отдает гугле.
— получаем ответ.
— запихиваем вместо того, что было.

вряд ли кто именно такое писал, тут слишком специальное решение, а я делал так на перле, как описал парой строк выше, правда не текст переводить надо было, а кое-что другое подменять в тексте.

для особо любителей можно sed использовать.
Ответ написан
Комментировать
@Vampiro
Мне кажется можно скармливать всю страничку, указав перевод с китайского на английский.
Хотя сложно сказать как он будет на регулярки реагировать.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
YCLIENTS Москва
от 200 000 до 350 000 ₽
Ведисофт Екатеринбург
от 25 000 ₽
ИТЦ Аусферр Магнитогорск
от 100 000 до 160 000 ₽
26 апр. 2024, в 10:21
1200 руб./в час
26 апр. 2024, в 10:10
1000 руб./за проект