Ejemplo n.º 1
0
 /**
  * load(): defined by FileLoaderInterface.
  *
  * @see    FileLoaderInterface::load()
  * @param  string $locale
  * @param  string $filename
  * @return TextDomain|null
  * @throws Exception\InvalidArgumentException
  */
 public function load($locale, $filename)
 {
     $resolvedIncludePath = stream_resolve_include_path($filename);
     $fromIncludePath = $resolvedIncludePath !== false ? $resolvedIncludePath : $filename;
     if (!$fromIncludePath || !is_file($fromIncludePath) || !is_readable($fromIncludePath)) {
         throw new Exception\InvalidArgumentException(sprintf('Could not find or open file %s for reading', $filename));
     }
     $messages = [];
     $iniReader = new IniReader();
     $messagesNamespaced = $iniReader->fromFile($fromIncludePath);
     $list = $messagesNamespaced;
     if (isset($messagesNamespaced['translation'])) {
         $list = $messagesNamespaced['translation'];
     }
     foreach ($list as $message) {
         if (!is_array($message) || count($message) < 2) {
             throw new Exception\InvalidArgumentException('Each INI row must be an array with message and translation');
         }
         if (isset($message['message']) && isset($message['translation'])) {
             $messages[$message['message']] = $message['translation'];
             continue;
         }
         $messages[array_shift($message)] = array_shift($message);
     }
     if (!is_array($messages)) {
         throw new Exception\InvalidArgumentException(sprintf('Expected an array, but received %s', gettype($messages)));
     }
     $textDomain = new TextDomain($messages);
     if (array_key_exists('plural', $messagesNamespaced) && isset($messagesNamespaced['plural']['plural_forms'])) {
         $textDomain->setPluralRule(PluralRule::fromString($messagesNamespaced['plural']['plural_forms']));
     }
     return $textDomain;
 }
Ejemplo n.º 2
0
 public function testMergingIncompatibleTextDomains()
 {
     $this->setExpectedException('Zend\\I18n\\Exception\\RuntimeException', 'is not compatible');
     $domainA = new TextDomain();
     $domainB = new TextDomain();
     $domainB->setPluralRule(PluralRule::fromString('nplurals=3; plural=n'));
     $domainA->merge($domainB);
 }
Ejemplo n.º 3
0
 public function testMergingTextDomainWithoutPluralRuleIntoTextDomainWithPluralRule()
 {
     $domainA = new TextDomain();
     $domainB = new TextDomain();
     $domainA->setPluralRule(PluralRule::fromString('nplurals=3; plural=n'));
     $domainA->merge($domainB);
     $this->assertEquals(3, $domainA->getPluralRule()->getNumPlurals());
     $this->assertFalse($domainB->hasPluralRule());
 }
Ejemplo n.º 4
0
 public function testPluralRuleSetter()
 {
     $domain = new TextDomain();
     $domain->setPluralRule(PluralRule::fromString('nplurals=3; plural=n'));
     $this->assertEquals(2, $domain->getPluralRule()->evaluate(2));
 }