/** * 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; } elseif (file_exists($file . 'mo')) { $localization = Locale::readMo($file . 'mo'); } elseif (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; }
public function testReadMo() { $l = Locale::readMo('tests/_data/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/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('Jivoo\\I18n\\LocaleException', function () { $l = Locale::readMo('tests/_data/I18n/da.po'); }); // not a MO file: // TODO: why does this not work? // $this->assertThrows('Jivoo\I18n\LocaleException', function() { // $l = Locale::readMo('tests/_data/I18n/notafile'); // }); }