Yii: Eksik Tercüme Mesajlarını Tespit Eden Betik (how to detect missing translation messages)

Nedir?

Bu betik, Yii framework ile geliştirilmiş projelerde, belli dile ait eksik tercüme mesajlarını tespit eder ve eksik olanları @@@ olarak işaretler.

Parametreler

Parametre
Zorunlu mu?
Örnek
Açıklama
yii-msg-dir-path Evet –yii-msg-dir-path=”/var/www/html/panel/protected/messages” Projede “messages” dizin yolu
correct-lang-dir-name Evet –correct-lang-dir-name=”tr” Tam tercüme mesajlarını içeren dilin dizin adı
missing-lang-dir-name Evet –missing-lang-dir-name=”de” Eksik tercüme mesajlarını içeren dilin dizin adı
overwrite Hayır –overwrite

Eksik tercüme mesajları içeren dosyanın üzerine yazmasını sağlar

*** varsayılanda üzerine yazmaz; .new uzantılı dosyaya yazar

 

Örnek Kullanım

$ php missing-yii-translation-detector.php --yii-msg-dir-path="/var/www/html/panel/protected/messages" --correct-lang-dir-name="tr" --missing-lang-dir-name="de" --overwrite

Betik Dosyasını İndir

İndir: missing-yii-translation-detector.php

Betik Kodları

<?php

/**
 * Detects missing Yii translation messages based on language.
 *
 * - Needs write permission for apache to create target language-spec. directory OR
 * 	create yourself.
 *
 * @author Erman Gülhan
 * @date 2014-06-03
 */

$args=getopt('',array('yii-msg-dir-path:','correct-lang-dir-name:','missing-lang-dir-name:','overwrite'));

if(empty($args['yii-msg-dir-path']) || empty($args['correct-lang-dir-name']) || empty($args['missing-lang-dir-name']))
	showUsage();

$yiiMsgsDir=$args['yii-msg-dir-path'];
$correctLangDir=$args['correct-lang-dir-name'];
$missingLangDir=$args['missing-lang-dir-name'];
$overwrite=isset($args['overwrite']) ? true : false;
$targetFileSuffix='new';

$msgLinePatt="/^\s*['\"](.*)['\"]\s*=>/";
$_sourceDir=$yiiMsgsDir.'/'.$correctLangDir;
$_targetDir=$yiiMsgsDir.'/'.$missingLangDir;

// Needs write permission for apache
if(!file_exists($_targetDir))
	mkdir($_targetDir);

foreach(glob($_sourceDir.'/*.php') as $file)
{
	$curFileName=pathinfo($file);
	$curFileName=$curFileName['basename'];
	$_targetFile=$_targetDir.'/'.$curFileName;
	$isExist=file_exists($_targetFile);
	$_targetMsgArr=$isExist ? include($_targetFile) : array();
	$handle=fopen($file,'r');
	$targetFileContent='';
	while(($line=fgets($handle,4096))!==false)
	{
		if(preg_match($msgLinePatt,$line,$m))
		{
			$msgKey=$m[1];
			$targetContent=array_key_exists($msgKey,$_targetMsgArr)
				? "'$msgKey'=>'".$_targetMsgArr[$msgKey]."',"
				: "'$msgKey'=>'@@@',";
			$targetContent="\t".$targetContent.PHP_EOL;
		}
		else
			$targetContent=$line;

		$targetFileContent.=$targetContent;
	}

	$newFile=$isExist && !$overwrite ? $_targetFile.'.'.$targetFileSuffix : $_targetFile;
	file_put_contents($newFile,$targetFileContent);
}


function showUsage()
{
	echo PHP_EOL.'USAGE: '.PHP_EOL;
	echo basename(__FILE__).' --yii-msg-dir-path="/var/www/html/panel/protected/messages" --correct-lang-dir-name="tr" --missing-lang-dir-name="de" --overwrite'.PHP_EOL.PHP_EOL;
	echo '*** overwrite parameter is optional.'.PHP_EOL.PHP_EOL;
	exit;
}

?>