/** * 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']); }
/** * 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')); }
/** * Loads the translation file and parses it. Returns an instance of a translations * package containing the messages loaded from the file. * * @return \Aura\Intl\Package * @throws \RuntimeException if no file parser class could be found for the specified * file extension. */ public function __invoke() { $package = new Package('default'); $folders = $this->translationsFolders(); $ext = $this->_extension; $file = false; $fileName = $this->_name; $pos = strpos($fileName, '/'); if ($pos !== false) { $fileName = substr($fileName, $pos + 1); } foreach ($folders as $folder) { $path = $folder . $fileName . ".{$ext}"; if (is_file($path)) { $file = $path; break; } } if (!$file) { return $package; } $name = ucfirst($ext); $class = App::classname($name, 'I18n\\Parser', 'FileParser'); if (!$class) { throw new RuntimeException(sprintf('Could not find class %s', "{$name}FileParser")); } $messages = (new $class())->parse($file); $package->setMessages($messages); return $package; }