diff options
author | Frederic Guillot <fred@kanboard.net> | 2015-06-21 15:45:26 -0400 |
---|---|---|
committer | Frederic Guillot <fred@kanboard.net> | 2015-06-21 15:45:26 -0400 |
commit | 9b78126289703b222a19dcd1fcc16bca66993c20 (patch) | |
tree | 79feedc76847f642138467cd807ba9374fa9b6ce /app/Console/LocaleComparator.php | |
parent | ff7189971e6685118f41e3567cefae7c333202de (diff) |
Add cli command to compare locales + cleanup translation files
Diffstat (limited to 'app/Console/LocaleComparator.php')
-rw-r--r-- | app/Console/LocaleComparator.php | 82 |
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; + } +} |