/** * Test parsing a file with message context on some msgid values. * * This behavior is not ideal, but more thorough solutions * would break compatibility. Perhaps this is something we can * reconsider in 4.x * * @return void */ public function testParseContextOnSomeMessages() { $parser = new PoFileParser(); $file = APP . 'Locale' . DS . 'en' . DS . 'context.po'; $messages = $parser->parse($file); I18n::translator('default', 'en_US', function () use($messages) { $package = new Package('default'); $package->setMessages($messages); return $package; }); $this->assertTextEquals('En cours', $messages['Pending']); $this->assertTextEquals('En resolved', $messages['Resolved']); }
/** * Returns correct plural form of message identified by $singular and $plural for count $count. * Allows you to override the current domain for a single message lookup. * The context is a unique identifier for the translations string that makes it unique * within the same domain. * * @param string $domain Domain. * @param string $context Context of the text. * @param string $singular Singular text to translate. * @param string $plural Plural text. * @param int $count Count. * @param mixed $args Array with arguments or multiple arguments in function. * @return string|null Plural form of translated string. * @link http://book.cakephp.org/3.0/en/core-libraries/global-constants-and-functions.html#__dxn */ function __dxn($domain, $context, $singular, $plural, $count, $args = null) { if (!$singular) { return null; } $arguments = func_num_args() === 6 ? (array) $args : array_slice(func_get_args(), 5); return I18n::translator($domain)->translate($plural, ['_count' => $count, '_singular' => $singular, '_context' => $context] + $arguments); }
/** * Tests that it is possible to register a generic translators factory for a domain * instead of having to create them manually * * @return void */ public function testFallbackTranslatorWithFactory() { I18n::translator('default', 'fr_FR', function () { $package = new Package('default'); $package->setMessages(['Dog' => 'Le bark']); return $package; }); I18n::config('custom', function ($name, $locale) { $this->assertEquals('custom', $name); $package = new Package('default'); $package->setMessages(['Cow' => 'Le moo']); return $package; }); $translator = I18n::translator('custom', 'fr_FR'); $this->assertEquals('Le moo', $translator->translate('Cow')); $this->assertEquals('Le bark', $translator->translate('Dog')); }