summaryrefslogtreecommitdiff
path: root/app/Console
diff options
context:
space:
mode:
authorFrederic Guillot <fred@kanboard.net>2015-06-21 15:45:26 -0400
committerFrederic Guillot <fred@kanboard.net>2015-06-21 15:45:26 -0400
commit9b78126289703b222a19dcd1fcc16bca66993c20 (patch)
tree79feedc76847f642138467cd807ba9374fa9b6ce /app/Console
parentff7189971e6685118f41e3567cefae7c333202de (diff)
Add cli command to compare locales + cleanup translation files
Diffstat (limited to 'app/Console')
-rw-r--r--app/Console/LocaleComparator.php82
1 files changed, 82 insertions, 0 deletions
diff --git a/app/Console/LocaleComparator.php b/app/Console/LocaleComparator.php
new file mode 100644
index 00000000..6eec42dc
--- /dev/null
+++ b/app/Console/LocaleComparator.php
@@ -0,0 +1,82 @@
+<?php
+
+namespace Console;
+
+use RecursiveIteratorIterator;
+use RecursiveDirectoryIterator;
+use Symfony\Component\Console\Input\InputInterface;
+use Symfony\Component\Console\Output\OutputInterface;
+
+class LocaleComparator extends Base
+{
+ const REF_LOCALE = 'fr_FR';
+
+ protected function configure()
+ {
+ $this
+ ->setName('locale:compare')
+ ->setDescription('Compare application translations with the '.self::REF_LOCALE.' locale');
+ }
+
+ protected function execute(InputInterface $input, OutputInterface $output)
+ {
+ $strings = array();
+ $it = new RecursiveIteratorIterator(new RecursiveDirectoryIterator('app'));
+ $it->rewind();
+
+ while ($it->valid()) {
+
+ if (! $it->isDot() && substr($it->key(), -4) === '.php') {
+ $strings = array_merge($strings, $this->search($it->key()));
+ }
+
+ $it->next();
+ }
+
+ $this->compare(array_unique($strings));
+ }
+
+ public function show(array $strings)
+ {
+ foreach ($strings as $string) {
+ echo " '".str_replace("'", "\'", $string)."' => '',".PHP_EOL;
+ }
+ }
+
+ public function compare(array $strings)
+ {
+ $reference_file = 'app/Locale/'.self::REF_LOCALE.'/translations.php';
+ $reference = include $reference_file;
+
+ echo str_repeat('#', 70).PHP_EOL;
+ echo 'MISSING STRINGS'.PHP_EOL;
+ echo str_repeat('#', 70).PHP_EOL;
+ $this->show(array_diff($strings, array_keys($reference)));
+
+ echo str_repeat('#', 70).PHP_EOL;
+ echo 'USELESS STRINGS'.PHP_EOL;
+ echo str_repeat('#', 70).PHP_EOL;
+ $this->show(array_diff(array_keys($reference), $strings));
+ }
+
+ public function search($filename)
+ {
+ $content = file_get_contents($filename);
+ $strings = array();
+
+ if (preg_match_all('/\b[et]\((\'\K.*?\') *[\)\,]/', $content, $matches) && isset($matches[1])) {
+ $strings = $matches[1];
+ }
+
+ if (preg_match_all('/\bdt\((\'\K.*?\') *[\)\,]/', $content, $matches) && isset($matches[1])) {
+ $strings = array_merge($strings, $matches[1]);
+ }
+
+ array_walk($strings, function(&$value) {
+ $value = trim($value, "'");
+ $value = str_replace("\'", "'", $value);
+ });
+
+ return $strings;
+ }
+}