Dnes jsem poprvé použil nástroj Kdyby\Translation, neboť Gettexttranslator záhadně přestal existovat. Nerad se pouštím do práce s novými nástroji, jsem v tomto dost konzervativní. Člověk nakonec může skončit po pár hodinách pokusů a nikam se nedobrat.
Tohle ovšem není případ Kdyby\Translation, s ním to šlo jako po másle. Postupoval jsem podle detailní dokumentace, jen s drobnými úpravami:
Instalace bez Composeru
Stačilo stáhnout závislosti (Symfony\Translation a Symfony\Config) a umístit do složky libs.
Jde to i bez persistentního $locale
Nástroj záhadným způsobem detekuje jazyk pomocí $_GET proměnné locale. Já jsem ho implementoval do rozdělaného projektu a nechtělo se mi kvůli tomu přejmenovávat svoje proměnné. Naštěstí to není potřeba. Stačilo do BasePresenteru přidat na vhodné místo tento řádek:
$this->translator->setLocale($this->lang->shortcut);
Když nenačítá soubor s překlady / načítá jen messages.en_US.neon
S tímhle problémem jsem se potýkal asi nejvíc. Když nenajde soubor s překlady, poznáte to podle toho, že v panelu hlásí chybu a na místech překladů zobrazí názvy proměnných (např. homepage.sidebar.kontakt). Zkoušel jsem soubory různě přejmenovávat, až se nakonec chytil na verzi en_US – akorátže locale bylo nastaveno na německou verzi.
Důvod je prostý, aktuálně chybí v návodu informace o nové funkci – whitelistingu. Do config.neon je třeba přidat řádku s povolenými jazyky:
translation:
whitelist: [ ‚cs‘, ‚en‘, ‚de‘ ]
Nepřišel jsem na způsob, jak whitelistovat dynamicky (seznam jazyků mám uložen v databázi a může se v administraci měnit).
Ahoj, pokud chceš whitelistovat „dynamicky“, doporučoval bych generovat nějaký app/config/translator.neon a přepisovat jej když se nastavení změní. Mohl bys v něm mít ty jazyky vypsané.
Co se týče problému s načítáním překladů, je v nejnovější translatoru vylepšený panel, který ukazuje jaké slovníky jsou načtené a pomáhá tedy debugnout chybějící slovníky 🙂