From 94d5b9789ef1c6f5a317daa5032059a35b5d823a Mon Sep 17 00:00:00 2001 From: wangyidong Date: Mon, 1 Jul 2019 15:06:14 +0800 Subject: [PATCH 1/2] * change for task #5825. --- module/translate/model.php | 125 ++++++++++++++++++++++++++++++------- 1 file changed, 102 insertions(+), 23 deletions(-) diff --git a/module/translate/model.php b/module/translate/model.php index ff629d91d1..5a3d6be512 100644 --- a/module/translate/model.php +++ b/module/translate/model.php @@ -34,25 +34,7 @@ class translateModel extends model { $moduleName = basename($modulePath); $this->initModuleLang($moduleName, $data->code, $data->reference); - - $mainLangFile = $modulePath . DS . 'lang' . DS . $data->reference . '.php'; - if(file_exists($mainLangFile)) - { - $targetFile = $modulePath . DS . 'lang' . DS . $data->code . '.php'; - if(!copy($mainLangFile, $targetFile)) dao::$errors[] = sprintf($this->lang->translate->notice->failCopyFile, $mainLangFile, $targetFile); - } - - $extLangPath = $modulePath . DS . 'ext' . DS . 'lang' . DS . $data->reference; - if(is_dir($extLangPath)) - { - mkdir($modulePath . DS . 'ext' . DS . 'lang' . DS . $data->code); - $extLangFiles = glob($extLangPath . DS . '*.php'); - foreach($extLangFiles as $extLangFile) - { - $targetFile = $modulePath . DS . 'ext' . DS . 'lang' . DS . $data->code . DS . basename($extLangFile); - if(!copy($extLangPath, $targetFile)) dao::$errors[] = sprintf($this->lang->translate->notice->failCopyFile, $extLangFile, $targetFile); - } - } + $this->buildLangFile($data->code, $moduleName, $data->reference); } return true; @@ -314,7 +296,7 @@ class translateModel extends model $moduleRoot = $this->app->getModuleRoot(); $newLangFile = $moduleRoot . $module . "/lang/{$language}.php"; $translations = $this->dao->select('*')->from(TABLE_TRANSLATION)->where('lang')->eq($language)->andWhere('module')->eq($module)->fetchGroup('mode', 'key'); - $newContent = "getTranslatedLang($mainReferLangFile, $translations) . "\n"; @@ -323,7 +305,35 @@ class translateModel extends model $extLangFiles = glob($moduleRoot . $module . "/ext/lang/{$referLang}/*.php"); foreach($extLangFiles as $extLangFile) $newContent .= $this->getTranslatedLang($extLangFile, $translations) . "\n"; } - file_put_contents($newLangFile, $newContent); + if(!empty($newContent)) + { + $translateInfo = $this->getTranslateInfo($translations); + $newContent = " $translatedItems) + { + foreach($translatedItems as $key => $translation) + { + $translators[$translation->translator] = $translation->translator; + $reviewers[$translation->reviewer] = $translation->reviewer; + if(empty($lastReviewTime)) $lastReviewTime = $translation->reviewTime; + if($lastReviewTime < $translation->reviewTime) $lastReviewTime = $translation->reviewTime; + } + } + + $translateInfo = "/**\n"; + $translateInfo .= " * Translators : " . join(' ', $translators) . "\n"; + $translateInfo .= " * Reviewers : " . join(' ', $reviewers) . "\n"; + $translateInfo .= " * Last Review Time : " . $lastReviewTime . "\n"; + $translateInfo .= " */\n"; + return $translateInfo; } public function getTranslatedLang($referLang, $translations) @@ -392,7 +402,76 @@ class translateModel extends model $value = $translation->value; if($this->checkNeedTranslate($value) and strpos($value, 'array(') === false) { - $value = '"' . addslashes($value) . '"'; + if(strpos($value, '.') === false) + { + $value = '"' . addslashes($value) . '"'; + } + else + { + $parts = explode('.', $value); + $value = ''; + $isJoin = false; + $preFirst = ''; + $preLast = ''; + foreach($parts as $part) + { + $part = trim($part); + if(empty($part)) continue; + + $firstLetter = $part{0}; + $lastLetter = $part{strlen($part) - 1}; + /* Item like "a" or 'b'. */ + if($firstLetter == $lastLetter and ($firstLetter == '"' or $firstLetter == "'")) + { + $isJoin = true; + $value = empty($value) ? $part : $value . " . $part"; + } + /* Item like $test or $test). */ + elseif($firstLetter != $lastLetter and $firstLetter == '$') + { + $isJoin = true; + if($lastLetter == ')') $part = "'$part'"; + $value = empty($value) ? $part : $value . " . $part"; + } + /* Item like or $test . exec(). */ + elseif(($preLast and strpos('\'|"', $preLast) === false or $preFirst == '$') and strpos('\'|"', $firstLetter) === false) + { + if($preFirst == '$') + { + $isJoin = true; + $value .= " . '" . addslashes($part) . "'"; + } + else + { + $value .= '.' . $part; + } + } + /* Item like "aaa" . exec() or $test . exec(). */ + elseif(($preLast and strpos('\'|"', $preLast) !== false or $preFirst == '$') and strpos('\'|"', $firstLetter) === false) + { + $isJoin = true; + $value .= " . '" . addslashes($part) . "'"; + } + /* Item like `echo test`. */ + elseif($firstLetter == $lastLetter and strpos('\'|"', $firstLetter) === false) + { + $value = empty($value) ? "'" . addslashes($part) . "'" : $value . " . '" . addslashes($part) . "'"; + } + elseif($lastLetter == ')') + { + $part = "'" . addslashes($part) . "'"; + $value = empty($value) ? $part : $value . " . $part"; + } + else + { + $value = empty($value) ? $part : $value . ".$part"; + } + + $preFirst = $firstLetter; + $preLast = $lastLetter; + } + if(!$isJoin) $value = '"' . addslashes($value) . '"'; + } } $content .= $key . " = $value;\n"; } @@ -409,7 +488,7 @@ class translateModel extends model { $result = true; if($value == 'new stdclass()') $result = false; - if(strpos($value, '$') === 0 and strpos($value, '$lang->productCommon') === false and strpos($value, '$lang->projectCommon') === false and preg_match('/["\'] *\.[^\.]/', $value) == 0 and preg_match('/[^\.]\. *["\']/', $value) == 0) $result = false; + if(strpos($value, '$') === 0 and strpos($value, '$lang->productCommon') === false and strpos($value, '$lang->projectCommon') === false and strpos($value, '.') === false) $result = false; if($value == '$lang->productCommon' or $value == '$lang->projectCommon') $result = false; return $result; From 731b395734a770e5a44331b4a885fc4845e3dddc Mon Sep 17 00:00:00 2001 From: wangyidong Date: Mon, 1 Jul 2019 15:17:12 +0800 Subject: [PATCH 2/2] * finish task #5828. --- module/translate/css/choosemodule.css | 1 - module/translate/view/choosemodule.html.php | 40 +++++++++++++-------- 2 files changed, 25 insertions(+), 16 deletions(-) delete mode 100644 module/translate/css/choosemodule.css diff --git a/module/translate/css/choosemodule.css b/module/translate/css/choosemodule.css deleted file mode 100644 index cefcc63707..0000000000 --- a/module/translate/css/choosemodule.css +++ /dev/null @@ -1 +0,0 @@ -td .item{float:left; margin-right:20px;} diff --git a/module/translate/view/choosemodule.html.php b/module/translate/view/choosemodule.html.php index 51c71158e6..d48dfba46d 100644 --- a/module/translate/view/choosemodule.html.php +++ b/module/translate/view/choosemodule.html.php @@ -17,19 +17,23 @@ - + - + + translate->needReview):?> + + translate->needReview):?> - + + - + dev->groupList as $group => $groupName):?> @@ -37,22 +41,28 @@ - - - - - - - - + + + + + translate->needReview):?> + + + + translate->needReview):?> + +
translate->group;?>dev->moduleList;?>dev->moduleList;?> translate->allTotal;?> translate->translatedTotal;?> translate->changedTotal;?>translate->reviewedTotal;?> translate->translatedProgress;?>translate->reviewedProgress;?>actions;?>actions;?>
-
+
+
dev->tableList, $module, $module);?>count;?>translated + $moduleStatistics->reviewed;?>changed;?>reviewed;?>translated + $moduleStatistics->reviewed) / $moduleStatistics->count, 3) * 100) . '%';?>reviewed / $moduleStatistics->count, 3) * 100) . '%';?>dev->tableList, $module, $module);?>count;?>translated + $moduleStatistics->reviewed;?>changed;?>reviewed;?>translated + $moduleStatistics->reviewed) / $moduleStatistics->count, 3) * 100) . '%';?>reviewed / $moduleStatistics->count, 3) * 100) . '%';?> +
createLink('translate', 'module', "language=$language&module=$module"), $lang->translate->common); - if(common::hasPriv('translate', 'review') and $config->translate->needReview) echo html::a($this->createLink('translate', 'review', "language=$language&module=$module"), $lang->translate->review); + if(common::hasPriv('translate', 'module')) echo html::a($this->createLink('translate', 'module', "language=$language&module=$module"), $lang->translate->common, '', "class='btn btn-sm'"); + if(common::hasPriv('translate', 'review') and $config->translate->needReview) echo html::a($this->createLink('translate', 'review', "language=$language&module=$module"), $lang->translate->review, '', "class='btn btn-sm'"); ?> +