summaryrefslogtreecommitdiffstats
path: root/core/Command/L10n
diff options
context:
space:
mode:
authorLukas Reschke <lukas@owncloud.com>2016-04-06 10:40:55 +0200
committerLukas Reschke <lukas@owncloud.com>2016-04-06 11:00:52 +0200
commita4b19a5b1e4079752e33d6eb75c72a47ce048bde (patch)
treedb63cde4a4c0c69fd7c284331ba84367a93279f6 /core/Command/L10n
parent046506dd146f823499098d0d2b0042072e436469 (diff)
downloadnextcloud-server-a4b19a5b1e4079752e33d6eb75c72a47ce048bde.tar.gz
nextcloud-server-a4b19a5b1e4079752e33d6eb75c72a47ce048bde.zip
Rename files to be PSR-4 compliant
Diffstat (limited to 'core/Command/L10n')
-rw-r--r--core/Command/L10n/CreateJs.php137
1 files changed, 137 insertions, 0 deletions
diff --git a/core/Command/L10n/CreateJs.php b/core/Command/L10n/CreateJs.php
new file mode 100644
index 00000000000..c2cfc5d0934
--- /dev/null
+++ b/core/Command/L10n/CreateJs.php
@@ -0,0 +1,137 @@
+<?php
+/**
+ * @author Morris Jobke <hey@morrisjobke.de>
+ * @author Thomas Müller <thomas.mueller@tmit.eu>
+ *
+ * @copyright Copyright (c) 2016, ownCloud, Inc.
+ * @license AGPL-3.0
+ *
+ * This code is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License, version 3,
+ * as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License, version 3,
+ * along with this program. If not, see <http://www.gnu.org/licenses/>
+ *
+ */
+
+namespace OC\Core\Command\L10n;
+
+use DirectoryIterator;
+
+use Symfony\Component\Console\Command\Command;
+use Symfony\Component\Console\Input\InputInterface;
+use Symfony\Component\Console\Input\InputOption;
+use Symfony\Component\Console\Output\OutputInterface;
+use UnexpectedValueException;
+
+class CreateJs extends Command {
+
+ protected function configure() {
+ $this
+ ->setName('l10n:createjs')
+ ->setDescription('Create javascript translation files for a given app')
+ ->addArgument(
+ 'app',
+ InputOption::VALUE_REQUIRED,
+ 'name of the app'
+ )
+ ->addArgument(
+ 'lang',
+ InputOption::VALUE_OPTIONAL,
+ 'name of the language'
+ );
+ }
+
+ protected function execute(InputInterface $input, OutputInterface $output) {
+ $app = $input->getArgument('app');
+ $lang = $input->getArgument('lang');
+
+ $path = \OC_App::getAppPath($app);
+ if ($path === false) {
+ $output->writeln("The app <$app> is unknown.");
+ return;
+ }
+ $languages = $lang;
+ if (empty($lang)) {
+ $languages= $this->getAllLanguages($path);
+ }
+
+ foreach($languages as $lang) {
+ $this->writeFiles($app, $path, $lang, $output);
+ }
+ }
+
+ private function getAllLanguages($path) {
+ $result = array();
+ foreach (new DirectoryIterator("$path/l10n") as $fileInfo) {
+ if($fileInfo->isDot()) {
+ continue;
+ }
+ if($fileInfo->isDir()) {
+ continue;
+ }
+ if($fileInfo->getExtension() !== 'php') {
+ continue;
+ }
+ $result[]= substr($fileInfo->getBasename(), 0, -4);
+ }
+
+ return $result;
+ }
+
+ private function writeFiles($app, $path, $lang, OutputInterface $output) {
+ list($translations, $plurals) = $this->loadTranslations($path, $lang);
+ $this->writeJsFile($app, $path, $lang, $output, $translations, $plurals);
+ $this->writeJsonFile($path, $lang, $output, $translations, $plurals);
+ }
+
+ private function writeJsFile($app, $path, $lang, OutputInterface $output, $translations, $plurals) {
+ $jsFile = "$path/l10n/$lang.js";
+ if (file_exists($jsFile)) {
+ $output->writeln("File already exists: $jsFile");
+ return;
+ }
+ $content = "OC.L10N.register(\n \"$app\",\n {\n ";
+ $jsTrans = array();
+ foreach ($translations as $id => $val) {
+ if (is_array($val)) {
+ $val = '[ ' . join(',', $val) . ']';
+ }
+ $jsTrans[] = "\"$id\" : \"$val\"";
+ }
+ $content .= join(",\n ", $jsTrans);
+ $content .= "\n},\n\"$plurals\");\n";
+
+ file_put_contents($jsFile, $content);
+ $output->writeln("Javascript translation file generated: $jsFile");
+ }
+
+ private function writeJsonFile($path, $lang, OutputInterface $output, $translations, $plurals) {
+ $jsFile = "$path/l10n/$lang.json";
+ if (file_exists($jsFile)) {
+ $output->writeln("File already exists: $jsFile");
+ return;
+ }
+ $content = array('translations' => $translations, 'pluralForm' => $plurals);
+ file_put_contents($jsFile, json_encode($content));
+ $output->writeln("Json translation file generated: $jsFile");
+ }
+
+ private function loadTranslations($path, $lang) {
+ $phpFile = "$path/l10n/$lang.php";
+ $TRANSLATIONS = array();
+ $PLURAL_FORMS = '';
+ if (!file_exists($phpFile)) {
+ throw new UnexpectedValueException("PHP translation file <$phpFile> does not exist.");
+ }
+ require $phpFile;
+
+ return array($TRANSLATIONS, $PLURAL_FORMS);
+ }
+}