From 9d49715a9a81d40d66556bc93d6889220fee20f2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ale=C5=A1?= Date: Fri, 29 Mar 2019 10:32:25 +0100 Subject: [PATCH] absolute translation / prefixed translation support --- src/Translator.php | 42 ++++++++++++++++++++++++++++++++++++++++-- src/latte/Macros.php | 8 ++++---- 2 files changed, 44 insertions(+), 6 deletions(-) diff --git a/src/Translator.php b/src/Translator.php index 5a7a82d..5f069ab 100644 --- a/src/Translator.php +++ b/src/Translator.php @@ -21,6 +21,7 @@ * @property-read bool $debug * @property-read Translette\Translation\Tracy\Panel|null $tracyPanel * @property array|null $localesWhitelist + * @property string|null $domain * @property-read array $availableLocales * @property string|null $locale * @@ -52,9 +53,11 @@ class Translator extends Symfony\Component\Translation\Translator implements Net /** @var array|null */ private $localesWhitelist; - /** @var array */ - private $resourcesLocales = []; + /** @var string|null */ + private $domain; + /** @var array @internal */ + private $resourcesLocales = []; /** * @param Translette\Translation\LocaleResolver $localeResolver @@ -153,6 +156,25 @@ public function setLocalesWhitelist(?array $whitelist): self } + /** + * @return string|null + */ + public function getDomain(): ?string + { + return $this->domain; + } + + + /** + * @param null|string $string + * @return self + */ + public function setDomain(?string $string): self + { + $this->domain = $string; + return $this; + } + /** * @return array */ @@ -243,6 +265,22 @@ public function translate($message, ...$parameters): string // @comment } + /** + * {@inheritdoc} + */ + public function trans($id, array $parameters = [], $domain = null, $locale = null) + { + if (is_string($domain) && Nette\Utils\Strings::startsWith($domain, '//')) { + $domain = Nette\Utils\Strings::substring($domain, 2); + + } elseif ($this->domain !== null) { + $domain = $this->domain; + } + + return parent::trans($id, $parameters, $domain, $locale); + } + + /** * {@inheritdoc} */ diff --git a/src/latte/Macros.php b/src/latte/Macros.php index b7f177e..ef89811 100644 --- a/src/latte/Macros.php +++ b/src/latte/Macros.php @@ -53,10 +53,10 @@ public function macroTranslate(Latte\MacroNode $node, Latte\PhpWriter $writer) // return $writer->write('echo %modify(($this->filters->translate)(%node.args))'); if (Translette\Translation\Helpers::macroWithoutParameters($node)) { - return $writer->write('echo %modify(call_user_func($this->filters->translate, (isset($_translatorDomain) ? $_translatorDomain : "") . %node.word))'); + return $writer->write('echo %modify(call_user_func($this->filters->translate, %node.word))'); } - return $writer->write('echo %modify(call_user_func($this->filters->translate, (isset($_translatorDomain) ? $_translatorDomain : "") . %node.word, %node.args))'); + return $writer->write('echo %modify(call_user_func($this->filters->translate, %node.word, %node.args))'); } } @@ -70,7 +70,7 @@ public function macroDomain(Latte\MacroNode $node, Latte\PhpWriter $writer) { if ($node->closing) { if ($node->content !== null && $node->content !== '') { - return $writer->write('unset($_translatorDomain);'); + return $writer->write('$this->global->translator->domain = null;'); } } else { @@ -78,7 +78,7 @@ public function macroDomain(Latte\MacroNode $node, Latte\PhpWriter $writer) throw new Latte\CompileException('Expected message domain, none given.'); } - return $writer->write('$_translatorDomain = %node.word . ".";'); + return $writer->write('$this->global->translator->domain = %node.word;'); } } }