Poedit, gettext a Háefko
Po večeru hledání se mi konečně podařilo zprovoznit poedit, aby dokázal pořádně „vysosnout“ překlady. A co to má společného s Háefkem?
Díky skvělému editoru Poedit můžete jednoduše upravovat vlastní překlady. Komplikací je, že pokud něco přiděláte, nebo odděláte, je nutné to upravit v překladu hned, než na to zapomenete. Poedit nabízí velmi pěkné řešení, proskenuje váš php kód a všechny výskyty volání funkce gettext zaeviduje a vytvoří vám normální seznam klíčů pro překlad. Rád bych vám dnes ukázal řešení dvou problémů. 1) nastavit poedit, aby kód proskenoval 2) zprovoznit parsování i na jiných voláních funkce pro překlad.
Po instalaci si otevřete „Soubor → Konfigurace …“ a přejděte na záložku „Parsery“, zde editujte parser PHP. Upravte následující vstupní pole:
- Seznam koncovek oddělených středníky:
*.php;*.phtml; - Příkaz ke spuštění parseru: xgettext –force-po -o %o %C %K %F -L php
V české překladu je u příkladu koncovek chyba! V příkladu jsou koncovky odděleny čárkou, ale jednotlivé přípony oddělujte středníkem! Než jsem na toto přišel, tak mi to trvalo asi hodinu!
Dále si vytvořte / otevřete katalog. Přejděte na „Katalog → Nastavení“ a záložku „Cesty“. Buď vyplňte základní cestu, a pak přidejte požadované adresáře, nebo rovnou přidejte kompletní cestu k jednomu požadovanému adresář. Dále přejděte na záložku „Klíčová slova“.
V Háefku se k překladu používají dvě základní funkce, které jsou aliasy k volání statických metod třídy L10n.
<?php echo __('Translate me!!!'); echo L10n::__('Translate me!!!'); echo __n('%d comment', '%d comments', $comments); echo L10n::__n('%d comment', '%d comments', $comments);
Nyní je třeba nastavit Poeditu, že má parsovat také tyto funkce. Přidejte proto tyto klíče:
____n:1,2
Díky tomuto budou již přeparsovány i tyto volání funkce!
Gettext a množné číslo
Možná jste se lekli, že funkci pro překlad množných čísel předáváme jen dva tvary. Čeština má přece tři! Ale ano, i na toto gettext myslí. Nutno ale podotknout, že je třeba aplikaci vyvíjet v en. V Poeditu pak třeba při vytváření katalogu vyplnit kolonku „Forma plurálů“ tímto obsahem:
nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;
Toto je definice českých plurálů. Nyní se vaše aplikace stává lehce lokalizovatelnou pro veškeré jazyky. Poedit vám pak nabídne vstupy pro překlad všech tří českých verzí.
Restart Apache
Nevím proč, ale když aktualizuji svůj „.mo“ soubor s překladem, musím restartovat Apache, aby se změny projevily.
RomanSklenar
02:33 - 23.11.08 - #1To restartování apache je velký neduh gettextu :( Asi jediný způsob jak to alespoň částečně obejít, je přejměnovat .mo soubor a tím Apache oblbnout a donutit ho načíst a nakešovat novou binárku.
Možná by mohlo fungovat i toto: na začátku skriptu/konstruktoru třídy nastavím jméno .mo souboru na nějaký random a na konci ho nastavím na originál.