Przy okazji ostatniej większej zmiany wyglądu strony pisałem o „szablonach potomnych” w WordPressie… Wtedy też  (zmiana szablonu, nie pisania artykułu ;-)) wystąpił „mały zgrzyt” z brakiem tłumaczeń niektórych tekstów, a to oznacza dobrą okazję do napisania tekstu na ten temat… :-)

gettext, czyli proste i wygodne tłumaczenie

Sposób tłumaczenia szablonu i/lub wtyczki zależy od tego, czy autor przygotował go/ją pod obsługę plików językowych (gettext). Najprościej to rozpoznać patrząc do dokumentacji, bądź bezpośrednio do kodu szablonu/wtyczki – jeśli znajdziemy tam fragmenty podobne do:

printf( __( 'All posts by %s', 'twentyfourteen' ), get_the_author() );

To znaczy, że szablon i/lub wtyczką obsługują pliki językowe (gettext) i możemy przystąpić do następnych kroków.

W innym wypadku prawdopodobnie zostaje nam bezpośrednia edycja tekstów w kodzie…

.po/.mo czy functions.php?

Korzystając z „gettext” możemy do tłumaczenia podejść na 2 sposoby:

  • Tworząc/edytując plik .po (edycja) i .mo (zapis)
  • Korzystając z funkcji w pliku functions.php

Druga metoda (functions.php) sprawdzi się najlepiej przy małej ilości tekstów do przetłumaczenia, gdy zabawa w tworzenie i/lub edycję plików .po/.mo może być nieopłacalna. Przy większej ilości tekstów (lub gdy sami tworzymy szablon/wtyczkę do publikacji) do tłumaczenia zdecydowanie warto skorzystać z plików .po/.mo

WordPress/WooCommerce: Tłumaczymy szablon lub wtyczkę za pomocą plików .po/.mo

Jeśli do szablonu lub wtyczki dołączony jest plik .po lub .pot (szablon) to sprawa jest prosta – kopiujemy go pod nową nazwą, zazwyczaj:

  • pl_PL.po
  • nazwa-pl_PL.po

Edytujemy np. w programie Poedit:

poedit02

Po czym zapisujemy – przy okazji wygeneruje się też plik .mo, i oba te pliki kopiujemy tam gdzie trzeba – więcej o tym za chwilę…

A gdy nie ma pliku .po(t)

W takim przypadku mamy 2 możliwości:

  • Tworzymy samodzielnie plik .po i dodajemy ręcznie kolejne frazy do przetłumaczenia
  • Pobieramy (automatycznie) frazy z plików wtyczki/szablonu

W pierwszym przypadku tworzymy nowy plik tekstowy, znajdujemy na stronie nieprzetłumaczony tekst, i dodajmy go do naszego pliku w formacie:

msgid "Tekst do przetłumaczenia"
msgstr "Tekst przetłumaczony"

Całość zapisujemy jako plik z rozszerzeniem .po, i otwieramy np. w programie PoEdit, który resztę (łącznie z nagłówkami) zrobi za nas.

Metoda prosta i szybka, choć sprawdzi się raczej w przypadku prostych tekstów. W przypadku „zmiennych” mogą się pojawić problemy – dlatego lepiej potraktować ją jako uzupełnienie metody polegającej na wyciągnięciu danych ze źródeł:

Sięgamy do źródeł…

Czasem się zdarza, że wprawdzie autor przygotował swój szablon lub wtyczkę pod obsługę plików językowych, ale nie udostępnił plików od których moglibyśmy zacząć naszą pracę. W takim przypadku musimy sięgnąć do analizy źródeł – w tej pracy warto wspomóc się np. wspomnianym powyżej programem Poedit, który sporą część pracy z tym związanej wykona za nas.

Uruchamiamy program Poedit, i wybieramy:

  • Plik > Nowe…

A następnie:

 Język tłumaczenia: polski (Polska)

I:

Wyodrębnij ze źródeł
Konfiguruj kod źródłowy wyodrębniania we właściwościach.

poedit01

Pojawi się nowe okno, w którym w zakładce „Źródła słuch kluczowych” dodajemy:

__
_e

poedit_tworzenie-ze-zrodel_zrodla-slow-kluczowych01

Następnie klikamy OK, i zapisujemy plik, np. jako:

  • pl_PL.po

Lub:

  • nazwa-pl_PL.po

Po tej operacji kolejny raz wybieramy:

Wyodrębnij ze źródeł
Konfiguruj kod źródłowy wyodrębniania we właściwościach.

Tym razem przechodzimy do zakładki „Ścieżki źródeł” i wskazujemy ścieżkę do katalogu ze skórką:

poedit_tworzenie-ze-zrodel_sciezki-zrodel01

Po chwili (zależnie od ilości plików i tekstów w nich) pojawi się nam ekran ze znalezionymi tekstami, gotowymi do tłumaczenia:

poedit02

Dalej postępujemy tak samo, jak w przypadku wcześniejszej edycji plików .po/.pot

Gdzie i pod jaką nazwą zapisać pliki?

Tu nie ma jednej odpowiedzi – sporo zależy od tego, jak to sobie wymyślił autor szablonu/wtyczki, ale są pewne standardy, i jest duża szansa, że… :-)

Głównym katalogiem z plikami językowymi w WordPressie jest katalog:

  • wp-content/languages

Znajdziemy tu m.in. pliki językowe samego WordPressa.

Innymi popularnymi katalogami – odpowiednio dla szablonów i wtyczek – są:

  • wp-content/languages/themes
  • wp-content/languages/plugins

We wszystkich tych katalogach – z racji tego, że są to katalogi wspólne – zazwyczaj pliki językowe są zapisywane w formacie:

  • [nazwa]-pl_PL.po
  • [nazwa]-pl_PL.mo

Zdarzają się sytuacje, gdy pliki językowe należy umieszczać bezpośrednio w katalogu szablony lub wtyczki, często w podkatalogu „languages”:

  • wp-content/themes/[katalog szablonu]/languages
  • wp-content/plugins/[katalog wtyczki]/languages

Wtedy zazwyczaj zapisuje się je w formie:

  • pl_PL.po
  • pl_PL.mo

W razie wątpliwości warto poszukać na forum pomocy danego szablonu lub wtyczki, bądź w samym kodzie…

WordPress/WooCommerce: Tłumaczymy szablon lub wtyczkę za pomocą funkcji w pliku functions.php

Na wstępie  dodam, że wprawdzie można modyfikacji dokonywać na oryginalnych plikach szablonu, to zdecydowanie polecam skorzystać z „szablonów potomnych” (child themes), które od dawna świetnie sprawują się w WordPressie…

Zaczynamy od utworzenia – jeśli jeszcze go nie ma – pliku functions.php w katalogu naszego szablonu, o takiej zawartości:

<?php

Prawda, że nić trudnego? ;-)

Gdy już mamy przygotowany plik, wpisujemy po „<?php” np. taki kod:

function translate_text($translated) {
$translated = str_ireplace('Submit a Comment', 'Napisz komentarz', $translated);
return $translated;
}
add_filter('gettext', 'translate_text');

Przy większej ilości tekstów do przetłumaczenia również możemy skorzystać z tej metody odpowiednio zwielokrotniając jedną z linijek:

function translate_text($translated) {
$translated = str_ireplace('Submit a Comment', 'Napisz komentarz', $translated);
$translated = str_ireplace('Posted by %1$s in %2$s', 'Opublikował %1$s w kategoriach: %2$s', $translated);
return $translated;
}
add_filter('gettext', 'translate_text');

Ale osobiście w takim przypadku polecam skorzystać z tabeli – będzie znacznie przejrzyściej:

function translate_text( $translated ) {
$text2translate = array(
'Submit a Comment' => 'Napisz komentarz',
'Posted by %1$s in %2$s' => 'Opublikował %1$s w kategoriach: %2$s',
);
$translated = str_ireplace(  array_keys($text2translate),  $text2translate,  $translated );
return $translated;
}
add_filter( 'gettext', 'translate_text' );

Na koniec zapisujemy nasz plik i to wszystko…

Jak utworzyć i edytować plik?

Plik możecie utworzyć z konsoli (jeśli macie do niej dostęp), czyli np.:

sudo nano /var/www/[domena]/public_html/wp-content/themes/[katalog_z_szablonem]/functions.php

Choć ja polecam skorzystać np. z programu WinSCP (do zarządzania plikami i katalogami) oraz Notepad++ (do edycji plików).

(!) Zgłoś błąd na stronie
Potrzebujesz profesjonalnej pomocy? Skontaktuj się z nami!
Spodobał Ci się artykuł? Zapisz się do naszego Newslettera - ZERO SPAMu, same konkrety, oraz dostęp do dodatkowych materiałów przeznaczonych dla subskrybentów!
Na podany adres e-mail otrzymasz od nas wiadomość e-mail, w której znajdziesz link do potwierdzenia subskrypcji naszego Newslettera. Dzięki temu mamy pewność, że nikt nie dodał Twojego adresu przez przypadek. Jeśli wiadomość nie przyjdzie w ciągu najbliższej godziny (zazwyczaj jest to maksymalnie kilka minut) sprawdź folder SPAM.
Monika ćwiczy przed kongresem ko..., ale dzięki motywowa Divi od Elegant Themes chyba nawet ona da radę...
WebInsider poleca księgowość wFirma
WebInsider korzysta z VPSa w HitMe.pl
WebInsider poleca VPSy DigitalOcean
WebInsider poleca serwis Vindicat
Napisz komentarz
wipl_napisz-komentarz_01Jeśli informacje zawarte na tej stronie okazały się pomocne, możesz nam podziękować zostawiając poniżej swój komentarz.

W tej formie możesz również zadać dodatkowe pytania dotyczące wpisu, na które – w miarę możliwości – spróbujemy Ci odpowiedzieć.
Linki partnerskie
Niektóre z linków na tej stronie to tzw. „linki partnerskie”, co oznacza, że jeśli klikniesz na link i dokonasz wymaganej akcji (np. zakup/rejestracja) możemy otrzymać za to prowizję. Pamiętaj, że polecamy tylko te produkty i usługi, z których sami korzystamy, i uważamy, że są tego na prawdę warte… :-)
Znaki towarowe i nazwy marek
W niektórych wpisach (oraz innych miejscach na stronie) mogą być przedstawione/użyte znaki towarowe i/lub nazwy marek, które stanowią własność intelektualną tych podmiotów, a zostały użyte wyłącznie w celach informacyjnych.
Monika ćwiczy przed kongresem ko..., ale zapisała się do Newslettera WebInsider.pl, choć... i tak nic nie widzi