/** * 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; }
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); }
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()); }
public function testPluralRuleSetter() { $domain = new TextDomain(); $domain->setPluralRule(PluralRule::fromString('nplurals=3; plural=n')); $this->assertEquals(2, $domain->getPluralRule()->evaluate(2)); }