%PDF- %PDF-
Direktori : /home/vacivi36/intranet.vacivitta.com.br/protected/humhub/commands/ |
Current File : /home/vacivi36/intranet.vacivitta.com.br/protected/humhub/commands/MessageController.php |
<?php /** * @link https://www.humhub.org/ * @copyright Copyright (c) 2017 HumHub GmbH & Co. KG * @license https://www.humhub.com/licences */ namespace humhub\commands; use Yii; use yii\helpers\Console; use yii\helpers\FileHelper; use yii\helpers\Json; use yii\base\Exception; /** * Extracts messages to be translated from source files. * * @inheritdoc */ class MessageController extends \yii\console\controllers\MessageController { /** * Extracts messages for a given module from source code. * * @param string $moduleId */ public function actionExtractModule($moduleId) { $module = Yii::$app->moduleManager->getModule($moduleId); $configFile = Yii::getAlias('@humhub/config/i18n.php'); $config = array_merge([ 'translator' => 'Yii::t', 'overwrite' => false, 'removeUnused' => false, 'sort' => true, 'format' => 'php', 'ignoreCategories' => [], ], require($configFile)); $config['sourcePath'] = $module->getBasePath(); $this->config = $config; FileHelper::createDirectory($config['sourcePath'] . '/messages'); $files = FileHelper::findFiles(realpath($config['sourcePath']), $config); $messages = []; foreach ($files as $file) { $messages = array_merge_recursive($messages, $this->extractMessages($file, $config['translator'], $config['ignoreCategories'])); } // Remove unrelated translation categories foreach ($messages as $category => $msgs) { $categoryModule = $this->getModuleByCategory($category); if ($categoryModule == null || $categoryModule->id != $module->id) { unset($messages[$category]); } } foreach ($config['languages'] as $language) { $dir = $config['sourcePath'] . DIRECTORY_SEPARATOR . 'messages' . DIRECTORY_SEPARATOR . $language; FileHelper::createDirectory($dir); $this->saveMessagesToPHP($messages, $dir, $config['overwrite'], $config['removeUnused'], $config['sort'], false); } } /** * @inheritdoc */ protected function saveMessagesToPHP($messages, $dirName, $overwrite, $removeUnused, $sort, $markUnused) { $dirNameBase = $dirName; foreach ($messages as $category => $msgs) { /** * Fix Directory */ $module = $this->getModuleByCategory($category); if ($module !== null) { // Use Module Directory $dirName = str_replace(Yii::getAlias("@humhub/messages"), $module->getBasePath() . '/messages', $dirNameBase); preg_match('/.*?Module\.(.*)/', $category, $result); $category = $result[1]; } else { // Use Standard HumHub Directory $dirName = $dirNameBase; } $file = str_replace("\\", '/', "$dirName/$category.php"); $path = dirname($file); FileHelper::createDirectory($path); $msgs = array_values(array_unique($msgs)); $coloredFileName = Console::ansiFormat($file, [Console::FG_CYAN]); $this->stdout("Saving messages to $coloredFileName...\n"); $this->saveMessagesCategoryToPHP($msgs, $file, $overwrite, $removeUnused, $sort, $category, $markUnused); } } /** * Returns module instance by given message category. * * @param string $category * @return \yii\base\Module */ protected function getModuleByCategory($category) { if (preg_match('/(.*?)Module\./', $category, $result)) { if (strpos($result[1], '-') !== false || strpos($result[1], '_') !== false) { // module id already in correct format (-,_) return Yii::$app->moduleManager->getModule($result[1], true); } else { $moduleId = strtolower(preg_replace("/([A-Z])/", '_\1', lcfirst($result[1]))); try { return Yii::$app->moduleManager->getModule($moduleId, true); } catch (Exception $ex) { // Module not found, try again with dash syntax $moduleId = strtolower(preg_replace("/([A-Z])/", '-\1', lcfirst($result[1]))); return Yii::$app->moduleManager->getModule($moduleId, true); } } } return null; } /** * Collects all translated strings and stores it in a archive.json file. */ public function actionBuildArchive() { // Get Message Folders $messageFolders = [Yii::getAlias('@humhub/messages')]; foreach (Yii::$app->moduleManager->getModules(['includeCoreModules' => true, 'returnClass' => false]) as $id => $module) { $messageFolders[] = $module->getBasePath() . '/messages'; } foreach (Yii::$app->params['availableLanguages'] as $language => $name) { print "Processing " . $language . " ..."; if (!is_dir(Yii::getAlias("@humhub/messages/" . $language))) { print "Skipped (No message folder)\n"; continue; } // Load Archive $archive = []; $archiveFile = Yii::getAlias('@humhub/messages/' . $language . '/archive.json'); if (file_exists($archiveFile)) { $archive = Json::decode(file_get_contents($archiveFile)); } // Loop overall messages foreach ($messageFolders as $messageFolder) { if (is_dir($messageFolder . '/' . $language)) { foreach (glob($messageFolder . '/' . $language . '/*.php') as $messageFile) { $messages = require($messageFile); foreach ($messages as $original => $translated) { // Removed unused marking if (substr($translated, 0, 2) == '@@' && substr($translated, -2, 2) == '@@') { $translated = preg_replace('/^@@/', '', $translated); $translated = preg_replace('/@@$/', '', $translated); } if ($translated != '') { if (isset($archive[$original]) && !in_array($translated, $archive[$original])) { $archive[$original][] = $translated; } else { $archive[$original] = [$translated]; } } } } } } // Save file_put_contents($archiveFile, Json::encode($archive)); print "Saved!\n"; } } }