Gettext w PHP
14 July 2008
Comments
Gettext to system obsługi wielojęzycznych interfejsów stosowany w wielu aplikacjach desktopowych. W naszym przypadku potrzebujemy PHP, które posiada wsparcie dla gettext (sprawdź w phpinfo()):
GetText Support enabled
Przygotowujemy plik PHP, np.:
<?php
// ustawiamy język
putenv("LANGUAGE=pl_PL");
// nazwa pliku gettexta dla danej strony / ścieżka
bindtextdomain("pliczek", "/home/piotr/html/skrypt");
textdomain("pliczek");
// tłumaczenia będą szukane w /home/piotr/html/skrypt/pl_PL/LC_MESSAGES/pliczek.mo
// przykładowe stosowanie gettexta
echo gettext("Translate me");
echo '<br />';
echo _("I'm a string:");
xgettext -n nazwa_pliku.php
Co stworzy nam plik messages.po, który kopiujemy jako pliczek.po. Jest to plik tekstowy i otwieramy go w edytorze tekstowym. Zawartość będzie mniej więcej taka:
# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR, YEAR. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION " "Report-Msgid-Bugs-To: " "POT-Creation-Date: 2005-09-30 01:30+0200 " "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE " "Last-Translator: FULL NAME " "Language-Team: LANGUAGE " "MIME-Version: 1.0 " "Content-Type: text/plain; charset=CHARSET " "Content-Transfer-Encoding: 8bit " #: gettext.php:15 msgid "Translate me" msgstr "" #: gettext.php:18 msgid "I'm a string:" msgstr ""
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR, YEAR. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: Tłumaczenie czegoś " "Report-Msgid-Bugs-To: " "POT-Creation-Date: 2005-09-30 01:30+0200 " "PO-Revision-Date: 2005-09-30 01:34+0200 " "Last-Translator: Piotr M. " "Language-Team: Polish " "MIME-Version: 1.0 " "Content-Type: text/plain; charset=UTF-8 " "Content-Transfer-Encoding: 8bit " #: gettext.php:15 msgid "Translate me" msgstr "Przetłumacz mnie" #: gettext.php:18 msgid "I'm a string:" msgstr "Jestem łańcuchem"
msgfmt pliczek.po -o pliczek.mo
I wynikowy plik *.mo umieszczamy w miejscu na tłumaczenia - w podkatalogu /pl_PL/LC_MESSAGES/ od katalogu podanego w:
bindtextdomain("pliczek", "/home/piotr/html/skrypt");
By ustawić inny język należy przygotować dla nich tłumaczenia a następnie edytować wartość putenv("LANGUAGE=pl_PL"); z pl_PL na np. de_DE, en_EN itd.By zaktualizować stary plik *.po z tłumaczeniem o nowe frazy / usunięcie już nieistniejących wystarczy wydać polecenie:
msgmerge stary.po messages.po --output-file=nowy.po
Gdzie messages.po to świeżo wygenerowany nieprzetłumaczony plik po.
RkBlog
Comment article