WordPress: Jak przetłumaczyć motyw/wtyczkę

Spis treści

WordPress został przetłumaczony na dość sporo języków, w tym też i na język polski. Niemniej jednak, pliki bazowe to nie to samo co pliki różnych dodatków. Dlatego też czasem po zmianie języka na polski, nie wszystkie elementy naszego bloga są przetłumaczone. Nie ma przy tym znaczenia czy ustawialiśmy język podczas instalacji WordPress'a, czy też później z poziomu panela administracyjnego. Taki stan rzeczy nie wygląda zbyt estetycznie i przydałoby się coś z tym zrobić. Jeśli zajrzymy do katalogu wtyczek czy motywów, to zwykle znajdziemy tam pliki .mo oraz .po , które są używane przy tłumaczeniu tekstu z wykorzystaniem gettext. Jako, że motyw, który jest wykorzystywany na tym blogu nie jest przetłumaczony, to postanowiłem go przetłumaczyć i przy okazji opisać ten niezbyt skomplikowany proces.

Pliki .mo i .po

By zrozumieć różnicę między tymi plikami .mo i .po , trzeba zagłębić się nieco w proces translacji tekstu w WordPress'ie. Najprościej jest to wytłumaczyć na przykładzie standardowych plików językowych, które można pobrać bezpośrednio ze strony WordPress'a. W paczce mamy kilka par plików MO/PO. One zawsze występują w parach. Skróty oznaczają: Machine Object (MO) oraz Portable Object (PO). Różnica między nimi jest taka, że ten drugi jest w formie zrozumiałej dla człowieka i ten plik będziemy poddawać edycji. Następnie plik .po będzie kompilowany do postaci binarnej, czyli otrzymamy plik .mo , który zostanie wykorzystywany przez WordPress w procesie tłumaczenia tekstu.

Pliki .po można tworzyć i edytować ręcznie. Niemniej jednak, trzeba mieć instrukcję, w oparciu o którą będziemy wiedzieć jaki tekst w ogóle podlega tłumaczeniu. Nie możemy sobie po prostu od tak napisać, że dana fraza ma w języku polskim być zapisana w jakiś konkretny sposób. Ta instrukcja zawarta jest zwykle w pliku xx_XX.pot , który jest dostarczany w paczce z motywem czy wtyczką. Jest to zwykły plik tekstowy, który zawiera wpisy podobne do tego poniżej:

# ../functions/init.php:67
msgid "Footer"
msgstr ""

Wystarczy ten plik skopiować i nazwać odpowiednio. Na warunki polskie jest to pl_PL.po . Wszędzie tam, gdzie mamy msgstr , musimy wpisać polski odpowiednik wiadomości, która figuruje w msgid . Z kolei komentarz w pierwszej linijce informuje nas, gdzie względem pliku tłumaczenia znajduje plik, który zawiera powyższą frazę. Zatem w tym przypadku jest to plik theme/functions/init.php , a liczba 67 orientacyjnie wskazuje nam linijkę, w której ta fraza figuruje. Komentarz pełni rolę jedynie informacyjną i jego obecność nie wpływa na przebieg tłumaczenia.

Narzędzie poedit

Nie musimy ręcznie tworzyć i edytować pliku .po , czy też kompilować pliku binarnego .mo przy pomocy narzędzi dostarczanych w pakiecie gettext . Mamy do dyspozycji lepszą alternatywę w postaci pakietu poledit . W nim znajduje się graficzny edytor plików, który pomoże nam się uporać z tłumaczeniem. Odpalamy zatem terminal i wpisujemy w nim poledit . W okienku, które nam wyskoczy, przechodzimy do menu, z którego to wybieramy File > From POT/PO File. Wskazujemy lokalizację pliku .pot lub .po . Po chwili plik powinien zostać załadowany, a my poproszeni o wybór języka:

poedit-tlumaczenie-theme-plugin-wordpress-gettext

Teraz wystarczy już uzupełnić odpowiednio prawą kolumnę w oparciu o tekst, który widnieje w lewej:

poedit-tlumaczenie-theme-plugin-wordpress-gettext

Gdy skończymy, zapisujemy. Oba pliki zostaną utworzone, a WordPress automatycznie dobierze sobie nazwę pliku binarnego .mo w oparciu o ustawienia językowe określone w panelu administracyjnym.

Jak przetłumaczyć niepełny projekt

Wtyczki i motywy mają do siebie to, że nie zawsze są one w pełni dostosowane pod kątem tłumaczenia. Chodzi generalnie o kod PHP. Jeśli ten kod dostarczony nam nie zawiera odpowiednich wywołań, to bez jego poprawy nie damy rady przetłumaczyć danego projektu. Na szczęście edycja kodu PHP w kwestii dostosowania na potrzeby tłumaczenia nie jest rzeczą trudną. Musimy tylko w pliku motywu czy wtyczki znaleźć tę część kodu, która odpowiada za wypisanie konkretnej frazy na stronie bloga. Dla przykładu weźmy sobie ten poniższy kod:

if ( is_day() ) {
    echo "<strong>";
    printf( 'Daily Archives: ' . get_the_date() );
    echo "</strong>";
}

Wypisze on statyczny tekst Daily Archives: i dołączy do niego to co zostanie zwrócone przez get_the_date() . Ten tekst będzie po angielsku bez względu na to jaki język ustawimy w WordPress'ie. Jeśli chcemy, by podlegał on tłumaczeniu, to musimy go owinąć w __( ) . Powinno to wyglądać mniej więcej tak:

if ( is_day() ) {
    echo "<strong>";
    printf( __( 'Daily Archives: %s', 'theme' ), get_the_date() );
    echo "</strong>";
}

Fraza theme jest dowolna. Jest to tzw. Text Domain, która w obrębie kodu danego motywu czy wtyczki powinna zostać taka sama. Zatem jeśli musimy przetłumaczyć jakieś dodatkowe frazy, to upewnijmy się, że ta domena się zgadza z tą już wykorzystaną w kodzie.

Teraz możemy włączyć tę frazę do pliku .pot lub .po , z tym, że nie wiem czy da radę to zrobić przy pomocy poedit . U mnie zwyczajnie po przeskanowaniu katalogów nic nie znajduje. Pozostaje mi zatem ręczne dodanie określonej frazy:

msgid "Daily Archives: %s"
msgstr "Archiwum z dnia: %s"

W przypadku, gdy tłumaczona fraza zawiera na końcu spację, ją również musi uwzględnić.

Mikhail Morfikov avatar
Mikhail Morfikov
Po ponad 10 latach spędzonych z różnej maści linux'ami (Debian/Ubuntu, OpenWRT, Android) mogę śmiało powiedzieć, że nie ma rzeczy niemożliwych i problemów, których nie da się rozwiązać. Jedną umiejętność, którą ludzki umysł musi posiąść, by wybrnąć nawet z tej najbardziej nieprzyjemniej sytuacji, to zdolność logicznego rozumowania.