Posterous theme by Cory Watilo

Filed under: php

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.

PhoB - podpora pro reverzní řazení

Do PhoBu přibyla jedna malá novinka. Nyní lze nakonfigurovat reverzní řazení. Stáhněte si nejnovější verzi ze stránek projektu a v index.php už uvidíte naznačenou konfigurační direktivu:

 $phob->config = array(
     'siteName' => 'PhotoBrowser',
     'skinName' => 'default',
     'showDirup' => true,
     'showExif' => true,
     'reverseOrder' => false,
 );
 

Jednoduše změňte hodnotu klíče reverseOrder na true a PhoB bude řadit fotografie a adresáře pozpátku.

PhpEd - normalizace phpdoc komentářů a whitespace

PhpEd považuji za zřejmě nejlepší vývojové prostředí pro PHP aplikace. Suverénně nejlepší debugger, prostředí dělané jenom pro PHP a tak podobně. Ale také má mnoho much, naštěstí, dají se celkem vyřešit. Co mi v PhpEdu chybí, je automatické odstraňování bílých znaků na konci řádků a hnusný formát automaticky generované syntaxe phpdoc bloků.

PhpEd nabízí možnost (od verze professional) možnost vytvořit si php skript a sním "něco" provést. Tento PHP skript lze namapovat také na klávesovou zkratku. Dnes vám představím můj skript, který mi odstraní bílé znaky z konce řádků a dále převede tento škaredý formát phpdoc na ten "hezčí".

// starý formát
/**
* @param string $test
* @return string
*/

// nový formát
/**
 * @param string $test
 * @return string
*/

Jednoduše vytvořte na disku php skript s tímto obsahem:

<?php
$input = file_get_contents('php://stdin');
 
function deleteWhitespace($content)
{
    $lines = array();
    foreach (explode("\n", $content) as $line) {
        $lines[] = rtrim($line);
    }

    return implode("\n", $lines);
}

function insertSpacePhpdoc($content)
{
    return preg_replace('#^(\t+)?\*#m', '\\1 *', $content);
}

$input = deleteWhitespace($input);
$input = insertSpacePhpdoc($input);
echo $input;
?>

Následně otevřete menu Settings / Tools / Integration, vytvořte New menu s nějakým rozumným názvem. Nastavte Execute na Shell, do Command vložte:

@php5@ -n -f "d:\www\cesta\k\vasemu\skripu.php"

a dále zatrhněte volby jako je níže na obrázku:

Phped_vlastni_script

Volitelně vložte klávesovou zkratku. Po přiřazení klávesové zkratky nezapomeňte zkontrolovat/odstranit její vazbu na jinou akci. A to by mělo být vše.