Multijazyčné stránky

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
BigCharlie
Člen | 283
+
0
-

Ahoj,

mám několik dotazů k využití více jazykových verzí:

  1. Podle doporučení se snažím navrhnout a otestovat aplikaci tak, abych routování řešil až jako poslední. Jakým způsobem ale řešíte přepnutí jazyků v ještě „neroutované“ aplikaci? Mám v odkazu prosté „?lang=en“, což přepne jazyk (lang je perzistentní, takže se mi aktuální jazková verze uchováv napříč celou aplikací). Jenže při skoku na další stránku přirozeně takový odkaz ukazuje na root jazykové verze, nikoliv na stránku v konrétním jazyce. Jak zobrazit správný odkaz včetně jazkové varianty?
  2. V presenteru na základě aktuálního jazyka volím šablonu přepnutím view, protože mám jen pár stránek. Ale nepřipadá mi to moc inteligentní, když těch stránek bude víc. Nějaké postřehy k lepšímu (ideálně geniálnímu) řešení?
  3. v souvislosti s tím jsem zkusil v presenteru tohle:
$this->setView('en.stranka');

a k tomu mám drobný postřeh, že zde nefunguje, že by šablona byla uložena v podadresáři EN/stranka.phtml, musí mít název en.stranka. Což mě ale neudivilo.

nAS
Člen | 277
+
0
-

1. Když budeš mít ve společném předkovi odkazujícího i odkazovaného Presenteru persistentní parametr lang, tak se ti bude automaticky přenášet. Pokud ho chceš přenášet pouze v jednom Presenteru, tak stačí označit jako persistentní v něm. Pokud budeš mít navíc v action{Neco} parametr lang tak se ti automaticky vyplní. A pokud chceš jazyk změnit, tak takhle:

{plink Default:default array('lang' => 'cs')}

Doufám, že něco z toho je to, na co jsi se ptal.

2. Prostuduj si toto vlákno, snad pomůže.

Editoval nAS (5. 2. 2009 15:14)

BigCharlie
Člen | 283
+
0
-

koukám, že jsem se ne zcela přesně vyjádřil. Tak to upravím a doplním:

AD 1) díky za nakopnutí, netušil jsem, co přesně hledám, byť jsem hledal. Hledal jsem způsob, jak odkázat na aktuální presenter a view a současně přidat argument. V tom jsi mě nasměroval. Budiž pro ostatní zaznamenáno:

{plink this array('lang' => 'cs')}

Vytvoří odkaz na aktuální presenter:view a přidá proměnnou.

AD 2) odkaz jsem četl už před tím, ale není to přesně to, co jsem hledal. V článku se řeší ukládání dat více jazykových verzí. Já řeším více jazykových verzí šablon.

Jod
Člen | 701
+
0
-

A prečo nepoužívaš translate? gettxt?

nAS
Člen | 277
+
0
-

Pokud potrebujes u kazdeho jazyka slozite zmeny, tak bych to resil to zmenou sablon, jak jsi psal. Pokud potrebujes pouze prekladat texty, tak jednoduse pouzij translator, ktery je popsany v tom vlakne co jsem odkazoval. Presne jak pise Jod.

{_"Text na prelozeni"}
BigCharlie
Člen | 283
+
0
-

Opravdu potřebuji dostatečně velké změny na to, abych měnil šablony. Gettext mi v tomto případě nevyhovuje. Ten můj původní dotaz mířil na způsob, jakým nejlépe změnit šablonu. Připadá mi nepraktické měnit konkrétní šablonu v presenteru, protože těch šablon bude víc pro každý jazyk.

Zdálo by se ideální v předkovi všech presenterů změnit aktuálně využívaný adresář šablon podle jazyka (vlastně úplná „skinovatelnost“ aplikace v praxi :-)), aby všechny šablony jednoho jazyka byly pohromadě (se zachováním struktury podadresářů)

Teď mě zajímá jak to provést, nebo zda existuje lepší způsob, který mě nenapadl. Je to srozumitelnější?

Mas3r
Člen | 116
+
0
-

Uprav v předkovi presenterů metodu formatTemplateFiles, ve které použiješ proměnnou s jazykem.

PetrP
Člen | 587
+
0
-

BigCharlie napsal(a):

Opravdu potřebuji dostatečně velké změny na to, abych měnil šablony.

Co takhle zaexperimentovat z děděním šablon (sám sem s tím zatím nepracoval, jen jsem něco zahlídl na fóru).
Tedy mohlo by to fungovat např takto.

view.phtml:

<head>
	<title>
		{_"Text na přeloženi"}
	</title>
</head><body>

{_"Nějaký defaultní text na přeloženi"}
{block #menu}
	{_"část z velkýma změnama která se bude přepisovat, ale mela by třeba svůj defaultni obsah, která by se zobrazila v případe že není potřeba pro některý jazyk složitěji něco měnit"}
{/block}

view.cs.phtml:

{extends 'view.phtml'}
{block #menu}
	a přepíšeme si tuto část jen pro tento jazyk
{/block}

V presenteru si pak menit view dle potreby:

if (existuje šablona $view.$lang.phtml) $this->template->setView("$view.$lang");
// jinak se použije defaultni $view.phtml
BigCharlie
Člen | 283
+
0
-

Mas3r napsal(a):

Uprav v předkovi presenterů metodu formatTemplateFiles, ve které použiješ proměnnou s jazykem.

To vypadá dobře, díky, vyzkouším.