summaryrefslogtreecommitdiff
path: root/app/Console/LocaleSyncCommand.php
diff options
context:
space:
mode:
Diffstat (limited to 'app/Console/LocaleSyncCommand.php')
-rw-r--r--app/Console/LocaleSyncCommand.php53
1 files changed, 53 insertions, 0 deletions
diff --git a/app/Console/LocaleSyncCommand.php b/app/Console/LocaleSyncCommand.php
new file mode 100644
index 00000000..11cfbde0
--- /dev/null
+++ b/app/Console/LocaleSyncCommand.php
@@ -0,0 +1,53 @@
+<?php
+
+namespace Kanboard\Console;
+
+use DirectoryIterator;
+use Symfony\Component\Console\Input\InputInterface;
+use Symfony\Component\Console\Output\OutputInterface;
+
+class LocaleSyncCommand extends BaseCommand
+{
+ const REF_LOCALE = 'fr_FR';
+
+ protected function configure()
+ {
+ $this
+ ->setName('locale:sync')
+ ->setDescription('Synchronize all translations based on the '.self::REF_LOCALE.' locale');
+ }
+
+ protected function execute(InputInterface $input, OutputInterface $output)
+ {
+ $reference_file = 'app/Locale/'.self::REF_LOCALE.'/translations.php';
+ $reference = include $reference_file;
+
+ foreach (new DirectoryIterator('app/Locale') as $fileInfo) {
+ if (! $fileInfo->isDot() && $fileInfo->isDir() && $fileInfo->getFilename() !== self::REF_LOCALE) {
+ $filename = 'app/Locale/'.$fileInfo->getFilename().'/translations.php';
+ echo $fileInfo->getFilename().' ('.$filename.')'.PHP_EOL;
+
+ file_put_contents($filename, $this->updateFile($reference, $filename));
+ }
+ }
+ }
+
+ public function updateFile(array $reference, $outdated_file)
+ {
+ $outdated = include $outdated_file;
+
+ $output = '<?php'.PHP_EOL.PHP_EOL;
+ $output .= 'return array('.PHP_EOL;
+
+ foreach ($reference as $key => $value) {
+ if (! empty($outdated[$key])) {
+ $output .= " '".str_replace("'", "\'", $key)."' => '".str_replace("'", "\'", $outdated[$key])."',\n";
+ } else {
+ $output .= " // '".str_replace("'", "\'", $key)."' => '',\n";
+ }
+ }
+
+ $output .= ");\n";
+ return $output;
+ }
+}