/** * Finds language files (*.lng.php) in a directory. * @param string $dir Directory path. * @return \Jivoo\Core\I18n\Locale[] Array of localizations indexed by their * language code. */ public function findLanguages($dir) { $files = scandir($dir); $languages = array(); if ($files !== false) { foreach ($files as $file) { $ex = explode('.', $file); if (count($ex) == 2) { $tag = $ex[0]; if ($ex[1] == 'po' or $ex[1] == 'pot') { $locale = Locale::readPo($dir . '/' . $file); } else { if ($ex[1] == 'mo') { $locale = Locale::readMo($dir . '/' . $file); } else { continue; } } if (!isset($languages[$tag])) { $languages[$tag] = array('locale' => $locale, 'po' => false, 'mo' => false, 'pot' => false); } $languages[$tag][$ex[1]] = true; } } } return $languages; }
public function testReadMo() { $l = Locale::readMo('tests/_data/Core/I18n/da.mo'); $this->assertEquals('juni', $l->get('June')); $this->assertEquals('d/m/Y', $l->shortDate); $this->assertTrue(isset($l->shortTime)); $this->assertEquals('Der er 0 brugere', $l->nget('There are %1 users', 'There is %1 user', 0)); $this->assertEquals('Der er 1 bruger', $l->nget('There are %1 users', 'There is %1 user', 1)); $this->assertEquals('Der er 2 brugere', $l->nget('There are %1 users', 'There is %1 user', 2)); // big endian file: $l = Locale::readMo('tests/_data/Core/I18n/da.be.mo'); $this->assertEquals('juni', $l->get('June')); $this->assertEquals('d/m/Y', $l->shortDate); $this->assertTrue(isset($l->shortTime)); $this->assertEquals('Der er 0 brugere', $l->nget('There are %1 users', 'There is %1 user', 0)); $this->assertEquals('Der er 1 bruger', $l->nget('There are %1 users', 'There is %1 user', 1)); $this->assertEquals('Der er 2 brugere', $l->nget('There are %1 users', 'There is %1 user', 2)); // not a MO file: $this->assertThrows('ErrorException', function () { $l = Locale::readMo('tests/_data/Core/I18n/da.po'); }); // not a MO file: $this->assertThrows('ErrorException', function () { $l = Locale::readMo('tests/_data/Core/I18n/notafile'); }); }
/** * Load a localization for the current language from a directory. * @param string $dir Directory path. * @param bool $extend Whether to extend the existing localization object * (true) or replace it (false). * @return bool True if language file found, false otherwise. */ public static function loadFrom($dir, $extend = true) { $file = $dir . '/' . self::$language . '.'; if (isset(self::$cache)) { $cached = self::$cache->getItem($file); if ($cached->isHit()) { $value = $cached->get(); if (is_array($value)) { $localization = new Locale($value); self::load($localization, $extend); return true; } else { self::$cache->deleteItems(array($file)); } } } if (file_exists($file . 'pot')) { return true; } else { if (file_exists($file . 'mo')) { $localization = Locale::readMo($file . 'mo'); } else { if (file_exists($file . 'po')) { $localization = Locale::readPo($file . 'po'); } else { return false; } } } if (isset(self::$cache)) { // self::$cache->set($file, $localization->getMessages(), 3600); $item = self::$cache->getItem($file); $item->set($localization->getMessages()); $item->expiresAfter(3600); self::$cache->save($item); } self::load($localization, $extend); return true; }