Vice jazycny web s ITranslator

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

Potreboval bych radu ohledne vytvoreni multijazycneho webu s ITranslator. Ruzne jsem hledal na foru, ale mam v tom totalni zmatek. Neexistuje nekde naky uceleny priklad nebo navod, jak to cele pouzit?

  1. Vytvoreni routy <lang>/<foo> to bych jeste asi chapal. Jakym zpusobem pak zpracuji jazyk a predam ho spravne aplikaci, aby se poznalo co se ma nacist? Predpokladam, ze se zaregistruje naka sluzba v configu a pak se ji to preda nekde v basepresentru?
  2. Registrace prekladu v configu, tam si uz nejsem vubec jsit, protoze se tam vyskytuje cs_CZ atd, ale v url budu predavat max cs/en .. tak nechapu vubec jak se to cele preda aplikaci?
  3. Nikde jsem nenasel jak ma vypadat prekladovy soubor? Je na to nekde naka specifikace, nebo z ceho ty vychazi?
frosty22
Člen | 373
+
0
-

ITranslator je pouze rozhraní (https://doc.nette.org/…on/templates#…) musíš vytvořit vlastní překladový systém, alternativně můžeš zkus například https://forum.nette.org/…i-lokalizace

saimons
Člen | 293
+
0
-

Aha, uz mi je to trochu jasnejsi diky za linky.

Barda
Člen | 11
+
0
-

Ahoj. Jsem úplně zmatený :-( Vůbec nevím co si stáhnout kam co nahrát , kde co napsat. Nemáte nějakou kuchařku na překlad webu z cz do aj a sk. Moc děkuji za odpovědi, už mi hoří koudel u zadku :-(

saimons
Člen | 293
+
0
-

Ja pouzivam neco takoveho, neni to moc sofistikovane reseni, ale zatim mi to dostacovalo:

namespace Translator;

class MyTranslator extends\Nette\Object implements \Nette\Localization\ITranslator {

    private $lang; // Aktualni jazyk
    private $debugMode = FALSE; // FALSE:TRUE
    private $doplnovani = TRUE;

    public function __construct($lang) {
        $this->lang = $lang;
    }

    /**
     * Translates the given string.
     * @param  string   message
     * @param  int      plural count
     * @return string   translated string
     */
    public function translate($message, $count = NULL) {
        $filePath = LANG_DIR . $this->lang . '.php';
        $filePath2 = LANG_DIR . 'en.php';

        if (File_Exists($filePath))
            require ($filePath);
        else
            return $message;

        $messageOut = isset($_LANG[md5($message)]) ? $_LANG[md5($message)] : $message;

        //doplnovani
        if ($this->doplnovani)
            $this->doplnovani($message, $filePath2);

        //debug mode
        if ($this->debugMode)
            $messageOut = $messageOut . '__' . md5($message);

        return $messageOut;
    }

    /**
     * Dolni neprelozene retezce do souboru
     * @param string $message retezec pro prelozeni
     * @param string $filePath2 cesta k souboru
     */
    private function doplnovani($message, $filePath2) {
        if (File_Exists($filePath2))
            require ($filePath2);
        if (!isset($_LANG[md5($message)])) {
            $file = fopen($filePath2, 'a');
            $data = '
$_LANG["' . md5($message) . '"] = ""; // ' . $message;
            fwrite($file, $data);
            fclose($file);
        }
    }

}

preklady:

$_LANG = array();
$_LANG["5a1f2cddc8438194692e0fc5a62698fb"] = "Publication date"; // Datum vydání
Tomáš Votruba
Moderator | 1114
+
0
-

V kuchařce to je, jen ji musíš otevřít :)

Barda
Člen | 11
+
0
-

Ke kuchařce je připojeno sposty souborů, které nevím kam nahrát :-( Jsem opravdu začátečník…prosím polopaticky :-)

Tomáš Votruba
Moderator | 1114
+
0
-

A zkoušel jsi je někam umístit vůbec? Neboj se dělat nejisté kroky, ideálně dokud neuvidíš laděnku křičet ;).

„Kam“ doplněno

Barda
Člen | 11
+
0
-

tak jsem to vyzkoušel a laděnka háže neočekávaný znak „,“ v příkazu:

- addFile(%appDir%/lang, front) \--

Editoval Barda (13. 3. 2012 8:22)

2bfree
Člen | 248
+
0
-

Zkusil bych v config.neon napsat

- addFile('%appDir%/lang','front')

Ale neručím

Tomáš Votruba
Moderator | 1114
+
0
-

Barda napsal(a):

tak jsem to vyzkoušel a laděnka háže neočekávaný znak „,“ v příkazu:

- addFile(%appDir%/lang, front) \--

Mně to funguje i bez uvozovek. Ještě ověř, zda je %appDir% definován.