diff options
author | sgiehl <stefan@piwik.org> | 2014-04-22 01:54:44 +0400 |
---|---|---|
committer | sgiehl <stefan@piwik.org> | 2014-04-22 01:54:44 +0400 |
commit | a24594f869cdfb7f74b68fe747ff5d9c244ded84 (patch) | |
tree | 6d2b3c25b159bcc511837fecd595956829b4ac68 /plugins/LanguagesManager/Commands | |
parent | cff9fdf22cba8d5ffadb29d97e376f53aa83cd76 (diff) |
added console command to compare keys defined on oTrance with those available in local translation files
Diffstat (limited to 'plugins/LanguagesManager/Commands')
-rw-r--r-- | plugins/LanguagesManager/Commands/CompareKeys.php | 111 | ||||
-rw-r--r-- | plugins/LanguagesManager/Commands/FetchFromOTrance.php | 7 |
2 files changed, 116 insertions, 2 deletions
diff --git a/plugins/LanguagesManager/Commands/CompareKeys.php b/plugins/LanguagesManager/Commands/CompareKeys.php new file mode 100644 index 0000000000..a26f9bd7b1 --- /dev/null +++ b/plugins/LanguagesManager/Commands/CompareKeys.php @@ -0,0 +1,111 @@ +<?php +/** + * Piwik - Open source web analytics + * + * @link http://piwik.org + * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later + * + */ + +namespace Piwik\Plugins\LanguagesManager\Commands; + +use Piwik\Plugin\ConsoleCommand; +use Piwik\Translate; +use Symfony\Component\Console\Input\ArrayInput; +use Symfony\Component\Console\Input\InputInterface; +use Symfony\Component\Console\Input\InputOption; +use Symfony\Component\Console\Output\OutputInterface; + +/** + */ +class CompareKeys extends ConsoleCommand +{ + protected function configure() + { + $this->setName('translations:compare') + ->setDescription('Updates translation files') + ->addOption('username', 'u', InputOption::VALUE_OPTIONAL, 'oTrance username') + ->addOption('password', 'p', InputOption::VALUE_OPTIONAL, 'oTrance password'); + } + + protected function execute(InputInterface $input, OutputInterface $output) + { + $dialog = $this->getHelperSet()->get('dialog'); + + $command = $this->getApplication()->find('translations:fetch'); + $arguments = array( + 'command' => 'translations:fetch', + '--username' => $input->getOption('username'), + '--password' => $input->getOption('password'), + '--keep-english' => true, + ); + $inputObject = new ArrayInput($arguments); + $inputObject->setInteractive($input->isInteractive()); + $command->run($inputObject, $output); + + $englishFromOTrance = FetchFromOTrance::getDownloadPath() . DIRECTORY_SEPARATOR . 'en.json'; + + if (!file_exists($englishFromOTrance)) { + $output->writeln("English file from oTrance missing. Aborting"); + return; + } + + $englishFromOTrance = json_decode(file_get_contents($englishFromOTrance), true); + + Translate::reloadLanguage('en'); + $availableTranslations = $GLOBALS['Piwik_translations']; + + $categories = array_unique(array_merge(array_keys($englishFromOTrance), array_keys($availableTranslations))); + sort($categories); + + $unnecessary = $outdated = $missing = array(); + + foreach ($categories AS $category) + { + if (!empty($englishFromOTrance[$category])) { + foreach ($englishFromOTrance[$category] AS $key => $value) { + if(!array_key_exists($category, $availableTranslations) || !array_key_exists($key, $availableTranslations[$category])) { + $unnecessary[] = sprintf('%s_%s', $category, $key); + continue; + } else if (html_entity_decode($availableTranslations[$category][$key]) != html_entity_decode($englishFromOTrance[$category][$key])) { + $outdated[] = sprintf('%s_%s', $category, $key); + continue; + } + } + } + if (!empty($availableTranslations[$category])) { + foreach ($availableTranslations[$category] AS $key => $value) { + if(!array_key_exists($category, $englishFromOTrance) || !array_key_exists($key, $englishFromOTrance[$category])) { + $missing[] = sprintf('%s_%s', $category, $key); + continue; + } + } + } + } + + $output->writeln(""); + + if (!empty($missing)) { + $output->writeln("<bg=yellow;options=bold>-- Following keys are missing on oTrance --</bg=yellow;options=bold>"); + $output->writeln(implode("\n", $missing)); + + $output->writeln(""); + } + + if (!empty($unnecessary)) { + $output->writeln("<bg=yellow;options=bold>-- Following keys might be unnecessary on oTrance --</bg=yellow;options=bold>"); + $output->writeln(implode("\n", $unnecessary)); + + $output->writeln(""); + } + + if (!empty($outdated)) { + $output->writeln("<bg=yellow;options=bold>-- Following keys are outdated on oTrance --</bg=yellow;options=bold>"); + $output->writeln(implode("\n", $outdated)); + + $output->writeln(""); + } + + $output->writeln("Finished."); + } +} diff --git a/plugins/LanguagesManager/Commands/FetchFromOTrance.php b/plugins/LanguagesManager/Commands/FetchFromOTrance.php index fc4704026b..c6bee90cc3 100644 --- a/plugins/LanguagesManager/Commands/FetchFromOTrance.php +++ b/plugins/LanguagesManager/Commands/FetchFromOTrance.php @@ -26,7 +26,8 @@ class FetchFromOTrance extends ConsoleCommand $this->setName('translations:fetch') ->setDescription('Fetches translations files from oTrance to '.self::DOWNLOADPATH) ->addOption('username', 'u', InputOption::VALUE_OPTIONAL, 'oTrance username') - ->addOption('password', 'p', InputOption::VALUE_OPTIONAL, 'oTrance password'); + ->addOption('password', 'p', InputOption::VALUE_OPTIONAL, 'oTrance password') + ->addOption('keep-english', 'k', InputOption::VALUE_NONE, 'keep english file'); } protected function execute(InputInterface $input, OutputInterface $output) @@ -126,7 +127,9 @@ class FetchFromOTrance extends ConsoleCommand $unzipper = Unzip::factory('tar.gz', self::getDownloadPath() . DIRECTORY_SEPARATOR . 'language_pack.tar.gz'); $unzipper->extract(self::getDownloadPath()); - @unlink(self::getDownloadPath() . DIRECTORY_SEPARATOR . 'en.php'); + if (!$input->hasOption('keep-english')) { + @unlink(self::getDownloadPath() . DIRECTORY_SEPARATOR . 'en.php'); + } @unlink(self::getDownloadPath() . DIRECTORY_SEPARATOR . 'language_pack.tar.gz'); $filesToConvert = _glob(self::getDownloadPath() . DIRECTORY_SEPARATOR . '*.php'); |