vytvoření překladu v komponentě

vlkodlak
Člen | 160
+
0
-

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 | 761
+
+1
-

@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 | 1176
+
+3
-

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)

vlkodlak
Člen | 160
+
0
-

@MarekBartoš je to přesně jak pišeš takto to funguje … jinak by z prezenteru se předal „osetřeny“ text proti útokum a text vypada nepřeloženě tj zpracování je třeba řešit o krok dřív.

Děkují oběma @m.brecher a @MarekBartoš za vaši pomoc