Nette Translator chyba pri zápise v latte
- Marek Bartoš
- Nette Blogger | 1289
Jakou chybu?
Můžeš použít formátování kódu, ať je jasné, že máš v pořádku
syntaxi?
- Richard17
- Člen | 21
Marek Bartoš napsal(a):
Jakou chybu?
Můžeš použít formátování kódu, ať je jasné, že máš v pořádku syntaxi?
Prepačte
Latte\CompileException
Unexpected tag {_}, did you mean {=}? (in '…\Front/@layout.latte'
on line 15 at column 5)
<p>{_'hellow_world'}</p>
Editoval Richard17 (5. 6. 2024 14:35)
- Marek Bartoš
- Nette Blogger | 1289
Používáš pro překlad nějaké rozšíření, které by makro
{_}
přidávalo?
Přes $this->template->setTranslator($translator)
se
přidává jen filtr |translate
, žádné makro pro překlad
přímo v Nette není
Editoval Marek Bartoš (5. 6. 2024 14:41)
- Marek Bartoš
- Nette Blogger | 1289
@MajklNajt To je zastaralé. Tady se píše, že makro _ se
používalo dřív. A malá oprava předchozího tvrzení, makro pro překlad
v Latte je, ale od Latte 2.11 se jmenuje {translate}, ne {_}
https://doc.nette.org/…on/templates#…
Editoval Marek Bartoš (5. 6. 2024 16:33)
- Marek Bartoš
- Nette Blogger | 1289
Pro překlad úseku šablony existuje párová značka {translate} (od Latte 2.11, dříve se používala značka {_})
Tak je jen trochu nejasná textace, od verze 2.11 jsou tam opravdu obě https://github.com/…reMacros.php#…
- David Grudl
- Nette Core | 8247
@Richard17 musíš aktivovat translator, postup je popsaný tady https://doc.nette.org/…on/templates#…
(koukám že se tu sešla úplná sbírka nesprávných odpovědí :-)
- Richard17
- Člen | 21
David Grudl napsal(a):
@Richard17 musíš aktivovat translator, postup je popsaný tady https://doc.nette.org/…on/templates#…
(koukám že se tu sešla úplná sbírka nesprávných odpovědí :-)
Takto mam services.neon
- services
- App\Core\RouterFactory::createRouter
myTranslator: App\UI\Accessory\MyTranslator(defaultLang: %defaultLang%)
nette.latteFactory:
setup:
– addfilter(‚translate‘, [@myTranslator, ‚translate‘])
search:
formuláře:
in: %appDir%
classes:
– *Factory
– *Facade
model:
in: %appDir%
classes:
– *Manager
Takto mam Class MyTranslator
namespace App\UI\Accessory;
use Nette\Localization\Translator as Translator;
class MyTranslator implements Translator
{
public function __construct(
private string $defaultLang,
) {}
public function setLang(string $lang): void
{
$this->defaultLang = $lang;
}
public array $tranlationMapper = [
"hellow_world" => [
"sk" => "Ahoj Svete ",
"en" => "Hello Worlds",
],
];
/**
* @inheritDoc
*/
function translate(\Stringable|string $message, ...$parameters): string
{
$mess = $this->tranlationMapper[$message] ?? $message;
if(is_string($mess)) {
return $mess;
}
return $mess[$parameters['lang'] ?? $this->defaultLang];
}
}
a takto mam hlavný presenter
<?php
declare(strict_types=1);
namespace App\UI\Accessory;
use Nette\Application\Attributes\Persistent;
use Nette\Application\UI\Presenter as UIPresenter;
use Nette\DI\Attributes\Inject;
use Nette\Localization\Translator;
class Presenter extends UIPresenter
{
#[Persistent]public string $lang;
#[Inject] public Translator $translator;
protected function startup()
{
parent::startup();
if ($this->translator instanceof MyTranslator) {
$this->translator->setLang($this->lang);
}
}
}
a nejde to ani tak.. Nechápem
Editoval Richard17 (7. 6. 2024 18:58)
- Marek Bartoš
- Nette Blogger | 1289
@Richard17 Mrkni na ten postup v dokumentaci co psal David. Ty si v konfiguraci nastavuješ jen filtr, ne makro. Extension ti nastaví oboje
Btw, editor má tlačítko jen na php a html kód, ale stejným způsobem jde označit i neon a další jazyky :) A funguje i markdown syntaxe
hello:
world: "It's a me, Mario!"
Editoval Marek Bartoš (7. 6. 2024 22:19)
- m.brecher
- Generous Backer | 882
@Richard17
a nejde to ani tak.. Nechápem
Jak psal @DavidGrudl je potřeba podle dokumentace „nastavit šabloně translator“, vyzkoušel jsem a funguje to:
services:
myTranslator: App\Model\MyTranslator(defaultLang: 'sk')
nette.latteFactory:
setup:
- addFilter('translate', [@myTranslator, 'translate'])
latte:
extensions:
- Latte\Essential\TranslatorExtension(@myTranslator)
Sample code nastavení translátoru jako extension Latte je ale v dokumentaci nedostatečný – chybí popis, že je potřeba předat jako první parametr konstruktoru translator: https://doc.nette.org/…on/templates#…
Služby v Nette obvykle není potřeba pojmenovávat, stačí je volat jednodušeji typehintem jako anonymní služby takto:
services:
- App\Model\MyTranslator(defaultLang: 'sk')
nette.latteFactory:
setup:
- addFilter('translate', [@App\Model\MyTranslator, 'translate'])
latte:
extensions:
- Latte\Essential\TranslatorExtension(@App\Model\MyTranslator)