diff --git a/dev/translation/langAutoParser.class.php b/dev/translation/langAutoParser.class.php
index 2f5e303bd93..e18f6e89a8a 100644
--- a/dev/translation/langAutoParser.class.php
+++ b/dev/translation/langAutoParser.class.php
@@ -14,10 +14,12 @@
class langAutoParser {
private $translatedFiles = array();
- private $destLang = string;
- private $refLang = string;
- private $langDir = string;
- private $limittofile = string;
+ private $destLang = '';
+ private $refLang = '';
+ private $langDir = '';
+ private $limittofile = '';
+ private $time;
+ private $time_end;
private $outputpagecode = 'UTF-8';
//private $outputpagecode = 'ISO-8859-1';
const DIR_SEPARATOR = '/';
@@ -46,42 +48,77 @@ class langAutoParser {
if ($this->limittofile && $this->limittofile != $file) continue;
$counter++;
$fileContent = null;
- $this->translatedFiles = array();
$refPath = $this->langDir.$this->refLang.self::DIR_SEPARATOR.$file;
- $destPath = $this->langDir.$this->destLang.self::DIR_SEPARATOR.$file;
- $fileContent = file($refPath,FILE_IGNORE_NEW_LINES |
-FILE_SKIP_EMPTY_LINES);
- print "Processing file " . $file . ", found ".sizeof($fileContent)." records
\n";
- // Check destination file presence
- if ( ! file_exists( $destPath ) ){
- // No file presente generate file
- echo "File not found: " . $file . "
\n";
- echo "Generating file " . $file . "
\n";
- $this->createTranslationFile($destPath);
- }
- // Translate lines
- $fileContentDest = file($destPath,FILE_IGNORE_NEW_LINES |
-FILE_SKIP_EMPTY_LINES);
- $newlines=0;
- foreach($fileContent as $line){
- $key = $this->getLineKey($line);
- $value = $this->getLineValue($line);
- if ($key && $value)
+ $fileContent = file($refPath,FILE_IGNORE_NEW_LINES|FILE_SKIP_EMPTY_LINES);
+ print "Processing file " . $file . ", with ".sizeof($fileContent)." lines
\n";
+
+ // Define target dirs
+ $targetlangs=array($this->destLang);
+ if ($this->destLang == 'all')
+ {
+ $targetlangs=array();
+
+ // If we must process all languages
+ $arraytmp=dol_dir_list($this->langDir,'directories',0);
+ foreach($arraytmp as $dirtmp)
{
- $newlines+=$this->translateFileLine($fileContentDest,$file,$key,$value);
+ if ($dirtmp['name'] === $this->refLang) continue; // We discard source language
+ $tmppart=explode('_',$dirtmp['name']);
+ if (preg_match('/^en/i',$dirtmp['name'])) continue; // We discard en_* languages
+ if (preg_match('/^fr/i',$dirtmp['name'])) continue; // We discard fr_* languages
+ if (preg_match('/^es/i',$dirtmp['name'])) continue; // We discard es_* languages
+ if (preg_match('/ca_ES/i',$dirtmp['name'])) continue; // We discard es_CA language
+ if (preg_match('/pt_BR/i',$dirtmp['name'])) continue; // We discard pt_BR language
+ if (preg_match('/^\./i',$dirtmp['name'])) continue; // We discard files .*
+ if (preg_match('/^CVS/i',$dirtmp['name'])) continue; // We discard CVS
+ $targetlangs[]=$dirtmp['name'];
}
+ //var_dump($targetlangs);
}
- $this->updateTranslationFile($destPath,$file);
- echo "New translated lines: " . $newlines . "
\n";
- #if ($counter ==3) die('fim');
+ // Process translation of source file for each target languages
+ foreach($targetlangs as $mydestLang)
+ {
+ $this->translatedFiles = array();
+
+ $destPath = $this->langDir.$mydestLang.self::DIR_SEPARATOR.$file;
+ // Check destination file presence
+ if ( ! file_exists( $destPath ) ){
+ // No file present, we generate file
+ echo "File not found: " . $destPath . ". We generate it.
\n";
+ $this->createTranslationFile($destPath,$mydestLang);
+ }
+ else
+ {
+ echo "Updating file: " . $destPath . "
\n";
+ }
+
+ // Translate lines
+ $fileContentDest = file($destPath,FILE_IGNORE_NEW_LINES|FILE_SKIP_EMPTY_LINES);
+ $newlines=0;
+ foreach($fileContent as $line){
+ $key = $this->getLineKey($line);
+ $value = $this->getLineValue($line);
+ if ($key && $value)
+ {
+ $newlines+=$this->translateFileLine($fileContentDest,$file,$key,$value,$mydestLang);
+ }
+ }
+
+ $this->updateTranslationFile($destPath,$file);
+ echo "New translated lines: " . $newlines . "
\n";
+ #if ($counter ==3) die('fim');
+ }
}
}
- private function updateTranslationFile($destPath,$file){
+ private function updateTranslationFile($destPath,$file)
+ {
+ $this->time_end = date('Y-m-d H:i:s');
- if (count($this->translatedFiles[$file])>0){
+ if (count($this->translatedFiles[$file])>0)
+ {
$fp = fopen($destPath, 'a');
fwrite($fp, "\r\n");
fwrite($fp, "\r\n");
@@ -90,16 +127,16 @@ FILE_SKIP_EMPTY_LINES);
foreach( $this->translatedFiles[$file] as $line) {
fwrite($fp, $line . "\r\n");
}
- fwrite($fp, "// STOP - Lines generated via autotranslator.php tool (".$this->time.").\r\n");
+ fwrite($fp, "// STOP - Lines generated via autotranslator.php tool (".$this->time_end.").\r\n");
fclose($fp);
}
return;
}
- private function createTranslationFile($path){
+ private function createTranslationFile($path,$mydestlang){
$fp = fopen($path, 'w+');
fwrite($fp, "/*\r\n");
- fwrite($fp, " * Language code: {$this->destLang}\r\n");
+ fwrite($fp, " * Language code: {$mydestlang}\r\n");
fwrite($fp, " * Automatic generated via autotranslator.php tool\r\n");
fwrite($fp, " * Generation date " . $this->time. "\r\n");
fwrite($fp, " */\r\n");
@@ -108,15 +145,17 @@ FILE_SKIP_EMPTY_LINES);
}
/**
- * Put in array translation of a key
+ * Put in array translatedFiles[$file], line of a new tranlated pair
*
- * @param unknown_type $content Existing content of dest file
- * @param unknown_type $file File name translated (xxxx.lang)
- * @param unknown_type $key Key to translate
- * @param unknown_type $value Existing key in source file
- * @return int 0=Nothing translated, 1=Record translated
+ * @param $content Existing content of dest file
+ * @param $file Target file name translated (xxxx.lang)
+ * @param $key Key to translate
+ * @param $value Existing value in source file
+ * @param string Language code (ie: fr_FR)
+ * @return int 0=Nothing translated, 1=Record translated
*/
- private function translateFileLine($content,$file,$key,$value){
+ private function translateFileLine($content,$file,$key,$value,$mydestLang)
+ {
//print "key =".$key."\n";
foreach( $content as $line ) {
@@ -125,16 +164,24 @@ FILE_SKIP_EMPTY_LINES);
// If translated return
//print "destKey=".$destKey."\n";
if ( trim($destKey) == trim($key) )
- { // Found already existing translation
- return 0;
+ { // Found already existing translation (key already exits in dest file)
+ return 0;
}
}
- // If not translated then translate
- if ($this->outputpagecode == 'UTF-8') $val=$this->translateTexts(array($value),substr($this->refLang,0,2),substr($this->destLang,0,2));
- else $val=utf8_decode($this->translateTexts(array($value),substr($this->refLang,0,2),substr($this->destLang,0,2)));
-
if ($key == 'CHARSET') $val=$this->outputpagecode;
+ else if (preg_match('/^Format/',$key)) $val=$value;
+ else if ($value=='-') $val=$value;
+ else
+ {
+ // If not translated then translate
+ if ($this->outputpagecode == 'UTF-8') $val=$this->translateTexts(array($value),substr($this->refLang,0,2),substr($mydestLang,0,2));
+ else $val=utf8_decode($this->translateTexts(array($value),substr($this->refLang,0,2),substr($mydestLang,0,2)));
+ }
+
+ $val=trim($val);
+
+ if (empty($val)) return 0;
$this->translatedFiles[$file][] = $key . '=' . $val ;
return 1;
@@ -162,8 +209,15 @@ FILE_SKIP_EMPTY_LINES);
return $files;
}
- private function translateTexts($src_texts = array(), $src_lang,
-$dest_lang){
+ /**
+ * Return translation of a value
+ *
+ * @param $src_texts Array with one value
+ * @param $src_lang
+ * @param $dest_lang
+ * @return string Value translated
+ */
+ private function translateTexts($src_texts = array(), $src_lang, $dest_lang){
$tmp=explode('_',$src_lang);
if ($tmp[0] == $tmp[1]) $src_lang=$tmp[0];
@@ -175,9 +229,9 @@ $dest_lang){
$lang_pair = $src_lang.'|'.$dest_lang;
$src_texts_query = "";
- foreach ($src_texts as $src_text){
- $src_texts_query .= "&q=".urlencode($src_text);
- }
+ $src_text_to_translate=preg_replace('/%s/','SSSSS',join('',$src_texts));
+
+ $src_texts_query .= "&q=".urlencode($src_text_to_translate);
$url =
"http://ajax.googleapis.com/ajax/services/language/translate?v=1.0".$src_texts_query."&langpair=".urlencode($lang_pair);
@@ -185,6 +239,8 @@ $dest_lang){
// sendRequest
// note how referer is set manually
+ //print "Url to translate: ".$url."\n";
+
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
@@ -196,24 +252,16 @@ $dest_lang){
$json = json_decode($body, true);
if ($json['responseStatus'] != 200){
+ print "Error: ".$json['responseStatus']." ".$url."\n";
return false;
}
- $results = $json['responseData'];
+ $rep=$json['responseData']['translatedText'];
+ $rep=preg_replace('/SSSSS/','%s',$rep);
- $return_array = array();
+ //print "OK ".join('',$src_texts).' => '.$rep."\n";
- foreach ($results as $result){
- if ($result['responseStatus'] == 200){
- $return_array[] = $result['responseData']['translatedText'];
- } else {
- $return_array[] = false;
- }
- }
-
- //return translated text
- #return $return_array;
- return $json['responseData']['translatedText'];
+ return $rep;
}
}