Vice jazycny web s ITranslator
- saimons
- Člen | 293
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?
- 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?
- 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?
- Nikde jsem nenasel jak ma vypadat prekladovy soubor? Je na to nekde naka specifikace, nebo z ceho ty vychazi?
- frosty22
- Člen | 373
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
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
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
- Tomáš Votruba
- Moderator | 1114
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.