Posterous theme by Cory Watilo

Poedit, gettext a Háefko

Jedná se repost článku ze starého blogu.

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“.

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!

Poedit-klice

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í.

Poedit-plural

Restart Apache

Nevím proč, ale když aktualizuji svůj „.mo“ soubor s překladem, musím restartovat Apache, aby se změny projevily.
Tento problém na starém blogu komentoval Roman Sklenář:

To 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/konstruk­toru třídy nastavím jméno .mo souboru na nějaký random a na konci ho nastavím na originál.

| Viewed
times
Filed under: