From 3a2bfb0e865655f45a54fb83d05e0656b001043b Mon Sep 17 00:00:00 2001 From: Thomas Steur Date: Mon, 11 Nov 2013 00:22:54 +0000 Subject: refs #4241 moving translation commands to LanguagesManager --- .../LanguagesManager/Commands/SetTranslations.php | 108 +++++++++++++++++++++ 1 file changed, 108 insertions(+) create mode 100644 plugins/LanguagesManager/Commands/SetTranslations.php (limited to 'plugins/LanguagesManager/Commands/SetTranslations.php') diff --git a/plugins/LanguagesManager/Commands/SetTranslations.php b/plugins/LanguagesManager/Commands/SetTranslations.php new file mode 100644 index 0000000000..62db2ee4e5 --- /dev/null +++ b/plugins/LanguagesManager/Commands/SetTranslations.php @@ -0,0 +1,108 @@ +setName('translations:set') + ->setDescription('Sets new translations for a given language') + ->addOption('code', 'c', InputOption::VALUE_REQUIRED, 'code of the language to set translations for') + ->addOption('file', 'f', InputOption::VALUE_REQUIRED, 'json file to load new translations from') + ->addOption('plugin', 'pl', InputOption::VALUE_OPTIONAL, 'optional name of plugin to set translations for'); + } + + protected function execute(InputInterface $input, OutputInterface $output) + { + $dialog = $this->getHelperSet()->get('dialog'); + + $languageCode = $input->getOption('code'); + $filename = $input->getOption('file'); + + $languageCodes = API::getInstance()->getAvailableLanguages(); + + if (empty($languageCode) || !in_array($languageCode, $languageCodes)) { + $languageCode = $dialog->askAndValidate($output, 'Please provide a valid language code: ', function ($code) use ($languageCodes) { + if (!in_array($code, array_values($languageCodes))) { + throw new \InvalidArgumentException(sprintf('Language code "%s" is invalid.', $code)); + } + + return $code; + }); + } + + if (empty($filename) || !file_exists($filename)) { + $filename = $dialog->askAndValidate($output, 'Please provide a file to load translations from: ', function ($file) { + if (!file_exists($file)) { + throw new \InvalidArgumentException(sprintf('File "%s" does not exist.', $file)); + } + + return $file; + }); + } + + $output->writeln("Starting to import data from '$filename' to language '$languageCode'"); + + $plugin = $input->getOption('plugin'); + $translationWriter = new Writer($languageCode, $plugin); + + $baseTranslations = $translationWriter->getTranslations("en"); + + $translationWriter->addValidator(new NoScripts()); + if (empty($plugin)) { + $translationWriter->addValidator(new CoreTranslations($baseTranslations)); + } + + $translationWriter->addFilter(new ByBaseTranslations($baseTranslations)); + $translationWriter->addFilter(new EmptyTranslations()); + $translationWriter->addFilter(new ByParameterCount($baseTranslations)); + $translationWriter->addFilter(new UnnecassaryWhitespaces($baseTranslations)); + $translationWriter->addFilter(new EncodedEntities()); + + $translationData = file_get_contents($filename); + $translations = json_decode($translationData, true); + + $translationWriter->setTranslations($translations); + + if (!$translationWriter->isValid()) { + $output->writeln("Failed setting translations:" . $translationWriter->getValidationMessage()); + return; + } + + if (!$translationWriter->hasTranslations()) { + $output->writeln("No translations available"); + return; + } + + $translationWriter->save(); + + $output->writeln("Finished."); + } +} \ No newline at end of file -- cgit v1.2.3