Autor Zpráva
MiK
Profil *
Zdravím, překládám původní českou PHP aplikaci do dalších jazyků a narazil jsem na problém s gettextem. Nepřekládají se mi řetězce, které v msgid obsahují nějakou diakritiku.

Příklad .po:
msgid "Zákaznická podpora:"
msgstr "Customer support:"

Příznaky:
php skripty i .po soubory jsou v UTF-8
kompilace z .po do binárních .mo proběhně vpořádku
na localhostu (Fedora Core 3, Apache 2.0, PHP 4.3, gettext-0.14.1-12) funguje vše bez problémů
na serveru (Debian 3.1, Apache 2, PHP 5, gettext-0.14.2) se výše uvedený řetězec zobrazí v Češtině
řetězce, které neobsahují diakritiku (ale např. i řetězce s "ě") se přeloží i na serveru -> gettext funguje, má správný soubor, cestu i locales

Info:
Apache byl po nahrání .mo souboru restartován (viz. PHP manuál gettextu)
locales nastavuji en_US, ale i en_US.UTF-8 (samotné en nefunguje) - viz PHP manuál
nastavuji příkazem setlocale(LC_MESSAGES, $text_lang);
chování (funkčnost na localhostu a probémy na serveru) nezmění ani příkazy:
putenv('LC_ALL='.$text_lang);
putenv('LANG='.$text_lang);
putenv('LANGUAGE='.$text_lang);
(viz. PHP manuál)
Debian na serveru podporuje locales cs_CZ (iso i UTF) a en_US (opět iso i UTF), výchozí je en_US.UTF-8

Podle [1] v msgid být diakritika nesmí.
Na [2] řeší stejný problém s tím rozdílem, že používají iso8859-2. Radí mu převod zdrojáků do UTF-8 jako řešení.
V manuálu [3] doporučují používaat pro msgid US-ASCII, nicméně nikde nepíšou, že tam US-ASCII být musí.
Na Internetu jsem nalezl několik zpráv, že podobné problémy se řeší už od r.2002, především v Asijských zemích. Nicméně jsem nenarazil na žádné řešení, které by mi pomohlo.
Na mém Linuxu to prokazatelně funguje OK, takže je záhadou, proč by to na jiném stroji jít nemělo.
Nemáte s tím podobné zkušenosti? Co jsem přehlédl?


[1] http://interval.cz/discussion-read.asp?disc=3811#story36336
[2] http://lists.gnu.org/archive/html/bug-gnu-utils/2004-08/msg00048.html
[3] http://www.gnu.org/software/gettext/manual/html_mono/gettext.html#SEC1 49
Toto téma je uzamčeno. Odpověď nelze zaslat.

0