diff options
Diffstat (limited to 'cli/i18n/I18nIgnoreFile.php')
| -rw-r--r-- | cli/i18n/I18nIgnoreFile.php | 64 |
1 files changed, 64 insertions, 0 deletions
diff --git a/cli/i18n/I18nIgnoreFile.php b/cli/i18n/I18nIgnoreFile.php new file mode 100644 index 000000000..714e000ca --- /dev/null +++ b/cli/i18n/I18nIgnoreFile.php @@ -0,0 +1,64 @@ +<?php + +require_once __DIR__ . '/I18nData.php'; +require_once __DIR__ . '/I18nFileInterface.php'; + +class I18nIgnoreFile implements I18nFileInterface { + + private $i18nPath; + + public function __construct() { + $this->i18nPath = __DIR__ . '/ignore'; + } + + public function dump(I18nData $i18n) { + foreach ($i18n->getData() as $language => $content) { + $filename = $this->i18nPath . DIRECTORY_SEPARATOR . $language . '.php'; + file_put_contents($filename, $this->format($content)); + } + } + + public function load() { + $i18n = array(); + $files = new DirectoryIterator($this->i18nPath); + foreach ($files as $file) { + if (!$file->isFile()) { + continue; + } + $i18n[$file->getBasename('.php')] = (include $file->getPathname()); + } + + return new I18nData($i18n); + } + + /** + * Format an array of translation + * + * It takes an array of translation and format it to be dumped in a + * translation file. The array is first converted to a string then some + * formatting regexes are applied to match the original content. + * + * @param array $translation + * @return string + */ + private function format($translation) { + $translation = var_export(($translation), true); + $patterns = array( + '/array \(/', + '/=>\s*array/', + '/ {2}/', + '/\d+ => /', + ); + $replacements = array( + 'array(', + '=> array', + "\t", // Double quoting is mandatory to have a tab instead of the \t string + '', + ); + $translation = preg_replace($patterns, $replacements, $translation); + + // Double quoting is mandatory to have new lines instead of \n strings + return sprintf("<?php\n\nreturn %s;\n", $translation); + } + +} |
