Vícejazyčný web – spousta textů

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

Ahoj lidičky,

chtěl bych se vás zeptat jak byste postupovali při vytvoření vícejazyčného webu.

Na webu by bylo použito několik šablon, ale obsahují více textů. Každá vždy několik odstavců.

Nebylo by lepší udělat kopie šablon např.: cs__onas.latte, en_onas.latte, de_onas.latte a vhodně nastavit bootstrap.php.

Prosím jak byste toto řešili?

Mooc díky

iguana007
Člen | 970
+
0
-

Dal bych texty do databáze a vybíral je podle toho na jaké jazykové verzi se uživatel nachází + měl pro články jednu šablonu :)

kralik
Člen | 230
+
0
-

iguana007 napsal(a):

Dal bych texty do databáze a vybíral je podle toho na jaké jazykové verzi se uživatel nachází + měl pro články jednu šablonu :)

Ahoj a kdybych nechtěl použít DB.

Lze nějak vytvorit kopie šablon a nastavit bootstrap?
Mooc díky

kralik
Člen | 230
+
0
-

voda napsal(a):

Podobné téma: https://forum.nette.org/…ejazycny-web

tak jsem to pročetl a zkouším to ale zatím nic moc :-(

Zeptám se asi na triviální otázky:

Musím v tomto případě používat jen jeden presenter?

Členění šablon je možné nějak do složek např.

  • CS-home.latte, onas.latte, atd.
  • EN-home.latte, onas.latte, atd.

Případně je možné rozčlenit nějak presentery?

Prozatím moc nerozumím jak toto mohu nastavit v bootstrapu.php?

Mooc díky

EDIT:
tak už se mi to povedlo.

Ještě, ale nevím jak tvořit odkazy

<?php
<a href="{link Kontakty:default}"
?>

nevím jak do tohoto odkazu mám začlenit $lang?

Píše mi to:

error: No route for Kontakty:default(lang=cs)

Routa v bootstrap.php

<?php
$router[] = new Route('<lang cs|en>/<action>', array(
            'lang' => 'cs',
            'presenter' => 'Home',
            'action' => 'default',
));
?>

Editoval kralik (20. 10. 2011 13:38)

Davem
Člen | 1
+
0
-

ad lang:
Ten se hodi nastavit v presenteru (nejlepe v nejakem BasePresenter) jako persistentni promnennou, ktera se pak bude predavat automaticky, pokud ji sam nebudes chtit implicitne zmenit.

/** @persistent */
public $lang;

Editoval Davem (20. 10. 2011 13:58)

kralik
Člen | 230
+
0
-

Davem napsal(a):

ad lang:
Ten se hodi nastavit v presenteru (nejlepe v nejakem BasePresenter) jako persistentni promnennou, ktera se pak bude predavat automaticky, pokud ji sam nebudes chtit implicitne zmenit.

/** @persistent */
public $lang;

tuto proměnou v presenteru mám.

BasePresenter

<?php
    /** @persistent */
    public $lang;
?>

ale právě mi to píše ten error s routou viz. výše

nevím tedy jak musím upravit odkazy či přidat nějaké další routery?

mooc díky

Milo
Nette Core | 1283
+
0
-

kralik napsal(a):

$router[] = new Route('<lang cs|en>/<action>', array(

Routa neobsahuje presenter
<lang cs|en>/<presenter>/<action>

Editoval Milo (20. 10. 2011 15:49)

kralik
Člen | 230
+
0
-

Milo napsal(a):

kralik napsal(a):

$router[] = new Route('<lang cs|en>/<action>', array(

Routa neobsahuje presenter
<lang cs|en>/<presenter>/<action>

bohužel stejně nejde překliknout např. na Kontakty

vygenerovaný odkaz: /web/www/cs/kontakty/

a chyba: Page not found. Missing template ‚..web\app\templates\Kontakty\default.latte‘

Potřeboval bych to dostat do tvaru s cs tedy:

..web\app\templates\Kontakty\cs\default.latte

případně

..web\app\templates\cs\Kontakty\default.latte

Strukturu šablon mám :

Home

  • CS – default.latte
  • EN – default.latte

Kontakty

  • CS – default.latte
  • EN – default.latte
kralik
Člen | 230
+
0
-

kralik napsal(a):

Milo napsal(a):

kralik napsal(a):

$router[] = new Route('<lang cs|en>/<action>', array(

Routa neobsahuje presenter
<lang cs|en>/<presenter>/<action>

bohužel stejně nejde překliknout např. na Kontakty

vygenerovaný odkaz: /web/www/cs/kontakty/

a chyba: Page not found. Missing template ‚..web\app\templates\Kontakty\default.latte‘

Potřeboval bych to dostat do tvaru s cs tedy:

..web\app\templates\Kontakty\cs\default.latte

případně

..web\app\templates\cs\Kontakty\default.latte

Strukturu šablon mám :

Home

  • CS – default.latte
  • EN – default.latte

Kontakty

  • CS – default.latte
  • EN – default.latte

jsem trouba, stačilo změnit funkci formatTemplateFiles() v souboru /libs/Nette/Application/UI/Presenter.php

změnil jsem na: „$dir/templates/$presenter/$this->lang/$this->view.latte“

takže už to funguje super.

Měl bych, ale ještě jednu otázku.

Nedědí se mi na presentery proměnná $lang i když všechny Presentery extends BasePresenter

Chtěl bych abych měl $lang dostupnou ve všech presenterech, které dědí od BasePresenteru, proměnou nemám dostupnou přes $lang ale přes $this->lang, nevím proč

BasePresenter

<?php
    /** @persistent */
    public $lang;
?>
Michal Vyšinský
Člen | 608
+
0
-

IMHO – že by to bylo proto, že jsi v OOP a v OOP se k členským proměnným přistupuje přes $this->variable ??