vytvoření překladu v komponentě
- vlkodlak
- Člen | 175
Zdravím pánové
řeším drobné překlady v komponentě a šablonách a došel jsem do bodu, kde bych rád požádal o pomoc.
Vytvořil jsem jednoduchý translátor, zaregistroval jsem ho jako službu a toto funguje:
default.latte
Tento text je určen pro {_forUser}, který bude dal s ním pracovat
to mi správně zamění {_forUser} za očekávaný překlad
ALE neumím překonat pokud dany řetězec chci vložit z presenteru nebo pomoci komponenty. např.
default.latte
{$predanyRetezec}
HomePresenter.php
use Nette;
final class HomePresenter extends BasePresenter {
public function renderDefault (){
$this->template->predanyRetezec="Tento text je určen pro {_forUser}, který bude dal s ním pracovat";
}
}
vloží se mi text „Tento text je určen pro {_forUser}, který bude dal s ním pracovat“ … bez náznaku spuštěni překladu u řetezce {_forUser}
zkoušel jsem kombinovat různé {…|noescape}, {_forUser|translate}, {translate}…{/translate} … ale výsledek žadný uspokojivý
Mám tyto otázky:
- mám to provést překlad již na úrovní presenteru a předat již přeložený text? byď zde bychrád předal jentext a aby šablona sama zajistila / spustila překlad
- pokud text bude generovat komponenta jak se předa do ní překladač?
- pokud mate tip jak na to lépé? děkují
- m.brecher
- Generous Backer | 873
@vlkodlak
aby šablona sama zajistila / spustila překlad
Šablony Latte zajistí překlady statických textů, které zkompilují do jazykových verzí php šablony. Pokud se do šablony vypisuje proměnná, typicky z databáze, je nevhodné tyto překlady řešit v šabloně a nevím, jestli to vůbec jde. Překlady textů v proměnných je potřeba řešit v databázi. Pokud z presenteru předáváš do šablony text zapsaný jako string, pak by měl dodávku jazykových verzí zajistit presenter – ideálně ne sám, ale pomocí překladače.
Do presenteru, nebo komponenty si předáš překladač jako službu v konstruktoru – běžný standardní postup, překladač musíš zaregistrovat v konfiguraci jako službu.
- Marek Bartoš
- Nette Blogger | 1280
Proč ti to nefunguje – jakákoli proměnná vypsaná v šabloně je prostý, escapovný text. Kdyby Latte obsah proměnné vykreslovalo jako Latte soubor, tak z toho máš slušný bezpečnostní problém :)
Když překlad řešíš v PHP a ne v Latte, tak bys měl překládat spíš takto
$this->template->predanyRetezec="Tento text je určen pro {$this->translator->translate('forUser')}, který bude dal s ním pracovat";
Editoval Marek Bartoš (4. 7. 2023 21:19)