Jak przetłumaczyć motyw (skórkę) WordPressa – tutorial

Jak przetłumaczyć motyw WordPress - tutorial
Znalazłaś/eś skórkę idealnie odpowiadającą Twoim potrzebom. Jest tylko jeden mały problem. Szablon jest po angielsku. I choć treść bloga uzupełnisz w swoim ojczystym języku, anglojęzyczne Categories, Archive, Posted by… nie dają Ci spokoju. Znasz angielski na tyle, żeby je spolszczyć, tylko nie wiesz, jak się do tego zabrać.

Jest dobra wiadomość: nie musisz być programistą ani biegłym webmasterem. Ten tutorial pokaże Ci krok po kroku, jak szybko spolszczyć wybrany motyw WordPress’a.

Cel tutoriala:

Spolszczenie skórki WordPress’a za pomocą programu poedit na przykładzie jednego z najpopularniejszych darmowych motywów EvoLve.

Spolszczenie skórki WordPress
Motyw przed spolszczeniem
Spolszczenie skórki WordPress
Motyw po spolszczeniu

Na rysunkach obok pokazano stronę główną skórki „EvoLve”, gdzie za pomocą ramek zaznaczono napisy w oryginalnej wersji językowej (obrazek 1) oraz napisy po polsku (obrazek 2), wykonane po przejściu tego tutoriala.

Na czym polega spolszczenie motywu

Spolszczenie skórki WordPress
Pliki .po i .mo

Proces ten, nazywany również lokalizacją, w WordPressie sprowadza się do utworzenia tzw. plików .po i .mo (dla tłumaczenia polskiego będą to pliki pl_PL.po oraz pl_PL.mo) i umieszczeniach ich w katalogu motywu. Pliki te – mówiąc w uproszczeniu – są listą napisów w języku oryginalnym motywu (najczęściej angielskim) i ich odpowiedników w języku lokalnym (np. polskim).

Na rysunku obok pokazano listę plików .po i .mo w katalogu languages dla jednej z najpopularniejszych darmowych skórek WordPress’a „Evolve”. Jak widać, motyw ten jest dostępny m.in. w języku francuskim, rosyjskim, niemieckim, ale nie w polskim.

Przykładowy plik .po (pl_PL.po)
Plik pl_PL.po w poedit.

Na obrazku obok pokazano widok pliku pl_PL.po w programie poedit.

WordPress skorzysta z utworzonego przez nas pliku .mo (plik .po jest jego odpowiednikiem, w postaci zrozumiałej dla człowieka), kiedy w plikach źródłowych motywu napotka napis zapisany w postaci wywołania funkcji __ (podwójne podkreślenie) lub _e. Na przykład: _e( ‚Categories’, ‚evolve’ ), _e(‚Posted in’, ‚evolve’ ), __( ‚Leave a Comment’, ‚evolve’ ). W przykładach jako identyfikator motywu użyto napisu evolve, w każdej skórce będzie to inny tekst.

Spolszczenie skórki – kroki:

  1. Ściągnięcie motywu (skórki) lokalnie na komputer
  2. Sprawdzenie czy motyw (skórka) jest przygotowany pod tłumaczenie
  3. Utworzenie plików .po i .mo
  4. Wgranie plików .po i .mo na serwer do katalogu motywu

1. Ściągnięcie motywu (skórki) lokalnie na komputer

Ściągamy wybrany motyw do siebie lokalnie na komputer. Katalog dowolny, nie musimy mieć lokalnie postawionego WordPress’a. Robimy to tylko na potrzeby translacji. Plik zip rozpakowujemy.

2. Sprawdzenie czy motyw (skórka) jest przygotowany pod tłumaczenie

Dobrze napisany motyw zawsze tworzony jest z góry z myślą, że będzie tłumaczony. Dzięki przygotowaniu skórki pod tłumaczenie osoby nietechniczne nie muszą modyfikować źródeł, żeby podmienić tytuły angielskie na polskie (lub na dowolnie inny język).

Nie każdy programista motywu o to zadbał, dlatego najpierw sprawdźmy pod tym względem nasz nabytek. O tym jak rozpoznać gotowość motywu do tłumaczenia (ang. translation-ready) przeczytasz tutaj.

3. Utworzenie plików .po i .mo – na przykładzie programu poedit

Niezwykle pomocny w utworzeniu plików .po i .mo będzie darmowy i prosty w obsłudze edytor tłumaczeń poedit.

Spolszczenie skórki WordPress krok 3.1
Krok 3.1 (powiększ)

3.1. Ściągnięcie i instalacja programu poedit
Program Poedit jest darmowy. Możemy go pobrać ze strony http://www.poedit.net/download.php

Spolszczenie skórki WordPress krok 3.2.1
Krok 3.2.1 (powiększ)

3.2. Konfiguracja programu poedit
3.2.1 Założenie katalogu
Rozpoczynamy od założenia i skonfigurowania tzw. katalogu w programie poedit. Z menu górnego wybieramy
Plik -> Nowy katalog…

Spolszczenie skórki WordPress krok 3.2.2
Krok 3.2.2 (powiększ)

3.2.2 Ustawienia -> zakładka „Informacje o projekcie”. Obowiązkowo należy zaznaczyć pole Kodowanie UTF-8. Pozostałe pole nie są wymagane. Po uzupełnieniu tej zakładki nie wciskamy OK lecz przechodzimy do kolejnej (Ścieżki).

Spolszczenie skórki WordPress krok 3.2.3
Krok 3.2.3 (powiększ)

3.2.3 Ustawienia -> zakładka „Ścieżki”.
Podajemy ścieżki plików, które mają być przeszukane w celu znalezienia tekstów do tłumaczenia. Jest to ścieżka względem położenia pliku .po.
Nasz plik .po będzie docelowo zapisany w katalogu ze skórką, w podkatalogu languages, dlatego jako ścieżkę podajemy .. (dwie kropki). Oznacza to, że pliki źródłowe będą wyszukiwane w katalogu nadrzędnym dla katalogu languages, czyli w katalogu z plikami motywu.

Jeśli chcemy plik .po zapisać bezpośrednio w katalogu z motywem zamiast dwóch kropek podajemy jedną, oznaczającą katalog bieżący.

Spolszczenie skórki WordPress krok 3.2.4
Krok 3.2.4 (powiększ)

3.2.4 Ustawienia -> zakładka „Słowa kluczowe”.
W tej zakładce chcemy poinformować program poedit jakie napisy ma wyciągnąć automatycznie do tłumaczenia. Dodajemy (za pomocą ikonki z prostokątem i żółtą gwiazdką) dwa napisy: __ (podwójne podkreślenie) oraz _e. W WordPressie w ten sposób oznaczone są wszystkie napisy przygotowane (przez autorów motywu) do translacji (patrz wprowadzenie wyżej).

Jeśli w tej zakładce były już zdefiniowane jakieś inne słowa kluczowe, można je usunąć (ikonka z krzyżykiem). Po uzupełnieniu słów kluczowych wciskamy OK.

Spolszczenie skórki WordPress krok 3.2.5
Krok 3.2.5 (powiększ)

3.2.5 Utworzenie pliku .po.
Pora na utworzenie naszego pliku .po. Dobrą praktyką jest umieszczenie go w katalogu motywu, w podkatalogu languages. Jeśli taki podkatalog nie istnieje, należy go wcześniej utworzyć. Jeśli dotychczas wykonywaliśmy polecenia zgodnie z tutorialem, po uzupełnieniu wszystkich ustawień i naciśnięciu przycisku OK w poprzednim kroku zobaczymy okno jak pokazano na obrazku obok. Jako nazwę pliku podajemy PL_pl (program poedit sam dopisze rozszerzenie po).

Spolszczenie skórki WordPress krok 3.2.6
Krok 3.2.6 (powiększ)

3.2.6 Automatyczne wyszukanie fraz do tłumaczenia.

Teraz następuje najciekawszy moment. Program poedit automatycznie wyciąga wszystkie napisy przygotowane (przez autorów motywu) do tłumaczenia. Nie musimy ręcznie wyszukiwać tekstów do tłumaczenia! Na ekranie zobaczymy wykaz wszystkich fraz motywu, którym wystarczy podać odpowiedniki polskie. Zobacz rysunek z przykładem obok. Wciskamy OK.

Spolszczenie skórki WordPress krok 3.2.7
Krok 3.2.7 (powiększ)

3.2.7 Tłumaczenie fraz na lokalny język

Klikamy każdy z wierszy i w okienku na dole wpisujemy odpowiednik danej frazy w języku polskim. Zapisanie zmian automatycznie tworzy plik .mo (odpowiednik pliku .po zrozumiały dla WordPress’a). Nie musimy od razu przekładać na j. polskich wszystkich haseł. Te nieprzetłumaczone zostaną wyświetlone na stronie w oryginale.

4. Wgranie plików .po i .mo na serwer do katalogu motywu

Kiedy katalog languages z plikami pl_PL.po i pl_PL.mo jest już gotowy, przenosimy go do katalogu motywu na serwerze. Jeśli wszystko wykonaliśmy poprawnie, po wyświetleniu strony powinniśmy zobaczyć wszystkie teksty w ojczystym języku. Oczywiście, przy założeniu, że posiadamy WordPress’a w polskiej wersji językowej lub przynajmniej w pliku wp-config.php (w głównym katalogu WordPress’a) widnieje linia define(‚WPLANG’, ‚pl_PL’);.

To już wszystko. Komentarze mile widziane.

Inne wpisy o podobnej tematyce:

171 myśli do „Jak przetłumaczyć motyw (skórkę) WordPressa – tutorial”

  1. Świetny poradnik. Rzeczywiście tą metodą tłumaczy się dużo szybciej. Dodatkowo nie zmienia się nic w oryginalniej kodzie skórki i można ją uaktualnić jeśli autor opublikuje nowszą wersję.
    Dla mnie pare rzeczy jest nie jasnych.
    Większość skórek nie jest przygotowana pod tłumaczenie, nie mają __ i _e – co by znaczyło, że trzeba je tłumaczyć ręcznie. W przypadku takich skórek rozwiązanie opisane powyżej nie działa.

    Znalazłam skórki, które maja plik po. Jak się postępuje jak opisano wyżej to nie można zapisać pliku PL-pl bo wyskakuje jakiś błąd. Gdy otworze plik po tej skórki to rzeczywiście pojawia się lista słów do tłumaczenia. Jak je przetłumaczyłam na próbe i kliknęłam zapis to pliki PL-pl.po się utworzyły i po przegraniu na serwer skórka jest po polsku. Chociaż nie wsyztko zostało przetłumaczone.

    Natomiast jak otworzylam istniejący plik po i przetłumaczyłam na probe pare tekstow i kliknęlam zapis to niestety plik PL_pl się nie utworzył.

    Proszę o punkt 3.2.5 bardziej łopatologicznie.

    Zrobienie skórki do WP jako takiej jest w sumie proste i wcale nie trzeba znać php. Ale jak ją przystosować do tłumaczenia bez znajomości php?

  2. Dziękuję za komentarz.

    Tak, zgadza się, opisana metoda nie pomoże skórkom nie przygotowanym na tłumaczenie i wtedy trzeba męczyć się ręcznie. Pobierając wątki z http://wordpress.org/extend/themes nie tylko możemy od razu sprawdzić, czy dana skórka jest zaopatrzona w tag translation-ready, ale mamy też większe szanse, że motyw służy temu czemu ma służyć. W tym temacie polecam artykuł Why You Should Never Search For Free WordPress Themes in Google or Anywhere Else.

    Piszesz, że znalazłaś skórki, która mają plik po. Nie wiem, czy o taki przypadek chodzi, ale dajmy na to motyw Delicate posiada już swój plik po (delicate.po), na bazie którego tworzymy swój własny plik pl_PL.po, czyli:
    1. otwieramy plik delicate.po w programie poedit
    2. tłumaczymy frazy w programie poedit pracując na tym pliku
    3. I teraz, uwaga! Wykonujemy „Zapisz jako…” (nie Zapisz) podając jako nazwę docelową pl_PL (pl_PL.po) w tym samym katalogu gdzie znajdował się plik delicate.po
    4. przerzucamy plik pl_PL.po oraz pl_PL.mo na serwer.

    Odpowiadając na ostatnie Twoje pytanie. Przystosowanie skórki do tłumaczenia nie wymaga dobrej znajomości php, ale bez zmian w plikach php się nie obejdzie. Jakich, o tym traktuje np. ten tutorial.

  3. Bardzo wartościowy tutorial. Też zajmuje się tłumaczeniem dodatków i skórek, korzystam z podobnych rozwiązań przedstawionych w niniejszym poradniku. Poedit jest jednym z najlepszych programów, choć początkowo do translacji, a raczej konwersji pliku POT/PO do postaci binarnej MO używałem konsolowej wersji interpretatora gettext.

    PS. Stronę Twoją dodaję do zakładek, zawiera dużo ciekawej treści. Hehe zapewne gdybyś nie napisała komentarza u mnie na blogu nie dowiedziałbym się o Twojej stronie, więc promocja poprzez komentarze popłaca 🙂

    Pozdrawiam serdecznie, Mariusz
    http://techformator.pl

  4. Tak, gettext to już dla profesjonalistów, ale nic dziwnego, że używasz – międzyczasie zdążyłam się zorientować, że to Ty jesteś autorem spolszczenia wtyczki CommentLuv. I chwała Ci za to.

    No jasne, że promocja przez komentarze popłaca 🙂 Dlatego niedługo mój blog też dołączy do tych, co korzystają z wtyczki CommentLuv. Przy okazji przetestuję na żywo Twój tutorial w tym temacie.

  5. Ano tak wyszło, początkowo na własny użytek, a później zdecydowałem się na udostępnienie spolszczenia, lecz obecna wersja która dołączona jest do najnowszego wydania nie jest zaktualizowana. Na blogu publikuję zawsze aktualną wersję spolszczenia, choć dla wersji 2.818 jeszcze nie wypuściłem aktualizacji. Niestety to wina braku pliku POT/PO, głównego szablonu. Andy Bailey zapewne zapomniał go zaktualizować więc trzeba będzie na własną rękę odszukać dyrektywy _e w plikach PHP ComLuv i uzupełnić plik PO. Kilka istotnych zmian było, między innymi manipulacja atrybutami linków oraz tekst promujący przyszłe wydanie oraz kilka innych drobnych rzeczy. Mimo to jednak ostatnia wersja 2.817 jest o wiele bardziej przyjazna od tej dostarczonej pierwotnie (dla 2.815), która znajduje się domyślnie w paczce redystrybucyjnej. Jak uporam się z aktualizacją podeślę ją autorowi wtyczki.

    Pozdrawiam, MK

  6. Zgadza się, ściągnęłam najnowszą wersję CommentLuv (2.81.8) i pobrałam Twoje tłumaczenie. Poedit pokazał mi brak nowych fraz w Twoim pliku commentluv-pl_PL.po w stosunku do pliku pot i 9 nowych w stosunku do plików źródłowych.

  7. Chciałabym się tego nauczyć ale przyznam że takie tłumaczenie jest niby łatwiejsze ale jednak chyba bardziej upierdliwe.
    Co zrobić jeśli nie wszystko zostało przetłumaczone?

    Dzięki za wyjaśnienie. Jeśli skórka ma już plik .po to trzeba go po prostu otworzyć, a nie tworzyć katalog. Teraz już rozumiem.

    Czy jeśli się pomylę to po prostu otwieram plik PL_pl jeszcze raz, poprawiam i zapisuję?

    Przetłumaczyłam jedną skórkę na próbę. Zajęło to jakieś 15 minut. Ale cała strona komentarzy nie jest przetlumaczona. I co teraz?

  8. Małgosiu, pisząc „jeśli nie wszystko jest przetłumaczone” albo „cała strona komentarzy nie jest przetłumaczona” nie jestem pewna, o jaki przypadek Ci chodzi, czy:
    1. niektóre frazy angielskie występują w źródłach, ale nie są przygotowane na tłumaczenie, czyli nie są zapisane za pomocą użycia funkcji __ oraz _e? A więc program poedit ich automatycznie nie wyłapuje.
    2. w katalogu skórki jest już plik po (ewentualnie pot), ale mimo wszystko w plikach źródłowych php są frazy po angielsku, których brakuje w pliku po. Podobną sytuację opisał Mariusz wyżej.
    Ad 1. wówczas pozostaje nam ręcznie podmienić teksty angielskie na polskie bezpośrednio w źródłach.
    Ad. 2 otwieramy istniejący plik po za pomocą poedit. Z menu górnego wybieramy Katalog->Aktualizuj ze źródeł. Program poedit wychwyci wszystkie niezgodności. Tłumaczymy je i zapisujemy plik .po (Plik->Zapisz, czyli pod tą samą nazwą, pod którą go otworzyliśmy). Poedit wtedy utworzy również automatycznie plik mo. I przerzucamy oba pliki: po i mo na serwer.

    Czy jeśli się pomylę to po prostu otwieram plik PL_pl jeszcze raz, poprawiam i zapisuję

    Tak, dokładnie. Zostanie wówczas zaktualizowany plik mo, który również trzeba przenieść na serwer docelowy.

    Cieszę się, że próbujesz się przekonać do poedit. Myślę, że jak już go całkiem polubisz, to nie będziesz potrafiła się bez niego obejść 🙂

    1. Panel mam po polsku – przetłumaczyłem angielską wersję. Ale to już nie ważne.
      Wielkie dzięki za pomoc.
      Ostatecznie rozwiązałem problem wyrzucając z panelu motyw, który chciałem przetłumaczyć, wyrzuciłem również jego pozostałości na dysku i zająłem się sprawą od nowa.
      Najpierw zainstalowałem swój motyw ponownie na WordPress, a następnie ściągnąłem jeden z plików .po z serwera i przetłumaczyłem go korzystając z programu poedit. Przy tłumaczeniu zauważyłem, że pojawiły się inne sentencje do tłumaczenia niż kiedy robiłem, to ze ściągniętym motywem, ale z innego źródła. Spodziewam się więc, że problem polegał na niekompatybilności motywów, chociaż jest to bardzo dziwne, bo jestem niemal przekonany, że w WordPress i tym samym na serwerze miałem dokładnie tą samą wersję co ta ściągnięta z zewnątrz. W każdym razie problem ostatecznie rozwiązany.
      Jedziemy dalej 😉

      1. Ten tutorial jest stary ale jary i chyba jedyny po polsku.
        Znowu po niego sięgnełam i podzielę się wrażeniami.

        Posanowiłam uzupełnić mój motyw o własne typy wpisów i ambitnie przygotowane do tłumaczenia. Trzeba było je przetłumaczyć na polski.

        Otwieram poedit.
        Otwieram plik PL-pl
        Wchodzę do zakładki Katlog i w ustawieniach dodaję ścieżki i słowa kluczowe jak wyżej. Ale trzeba też dodać kodowanie źródla – bez tego wyskakiwał błąd.
        Klikam Akutalizuj u źródeł.
        Potem ręcznie tłumaczę wszystkie nowe frazy jakie zostały wyszukane i zapisuję.
        Można to robić kilka razy jak zapomnę przystosować tłumaczenia jakichś fraz to mogę je poprawić i przepuścić przez poedit jeszcze raz.
        W sumie łatwo i prosto – ale na początku namęczyłam się że zgroza żeby dojść do tego.

  9. Nie działa link http://wpmedia.pl/2009/09/07/tworzenie-motywu-z-mozliwoscia-tlumaczenia/

    Tam było napisane jak tworzyć skórkę tak aby była przygotowana do tłumaczenia. Czy może wiesz gdzie szukać tych informacji?

    Myślę o tworzeniu skórek do WP ale chciałabym żeby były profesjonalnie zrobione.

    W ogóle myślalam żeby robić skórki tylko dla Polakow i od razu przetłumaczyłam całość na polski. A okazuje się, że profesjonalna skórka powinna być po angielsku przygotowana do tłumaczenia. Z drugiej strony czy jest sens robić skórki na rynek zagraniczny. Oni są zawaleni tym towarem!

    1. Robi się to następująco:
      1. W pliku function.php dodajesz taki kod:

      load_theme_textdomain( 'nazwa_motywu', TEMPLATEPATH.'/languages' );
      $locale = get_locale();
      $locale_file = TEMPLATEPATH."/languages/$locale.php";
      if ( is_readable($locale_file) )
          require_once($locale_file);
      

      2. W plikach php Twojej skórki wszystkie napisy muszą być obleczone w funkcję __( lub _e(
      np.
      Zamiast:

      <p>Read more</p>                                   
      

      piszesz:

      <p><?php _e('Read more', 'nazwa_motywu'); ?></p>                                   
      

      drugi parametr (nazwa_motywu) musi być zgodny z tym, co podało się w punkcie 1.

      3. Zakładasz katalog languages (w katalogu z motywem) i do niego wrzucasz pliki po i mo z przekładem na inny język, np. pl_PL.po, pl_PL.mo albo fr_FR.po, fr_FR.mo itd.

      4. Można też (ale niekoniecznie) w katalogu languages utworzyć plik pot (za pomocą programu poedit), nazwać go tak samo jak nazywa się motyw i dać rozszerzenie pot i w nim (automatycznie, również za pomocą programu poedit) umieścić wszystkie frazy przeznaczone do tłumaczenia. Wówczas, każdy kto będzie chciał przetłumaczyć skórkę na jeszcze inny język, swoje pliki po i mo utworzy właśnie w oparciu o tej plik pot, bo tak jest najprościej.

      Racja, że skórek po polsku brakuje, a anglojęzycznych jest od groma. Ale zgadzam się z tym co piszesz, profesjonalna skórka powinna być po angielsku. Jeśli dołożysz do niej polskie tłumaczenie w postaci plików po i mo, to polski użytkownik i tak nie zauważy, że oryginał jest po angielsku i będzie miał od razu to, czego oczekuje. Oczywiście, jeśli ma zainstalowanego WP w polskiej wersji językowej (albo zmienną define(‚WPLANG’, ‚pl_PL) w wp-config).

  10. Spolszczyłam ostatnio parę skórek i chcę je umieścić w sieci jednak mam pytanko. Gdzie podać jakieś info o autorze spolszczenia. Można to gdzieś wklepać w kod. Lokalizuje skórki z plikami po na razie.

    1. Tak, w pliku po są takie pola:
      Last-Translator (imię i nazwisko + adres email) oraz Language-Team. Jeśli korzystasz z programu poedit, to „Imię i nazwisko” wpisujesz w Plik->Ustawienia, pierwsza zakładka (Personalizacja), a nazwę zespołu wpisujesz w Katalog->Ustawienia, zakładka „Informacje o projekcie”.

  11. Pod waszym wpływem zachciało mi się stworzyć profesjonalny motyw, przystosowany do tłumaczenia, żeby ktoś z Górnej Wolty sobie w enigmatycznej przyszlości ściąngał mój motyw i przetłuamczył na swój jezyk.
    Siedzę nad tym od 4 godzin i mam dość.
    Namęczyłam się niesamowicie, wszystkie napisy wcześniej przetłumaczone, pozmieniałam spowrotem na angielski, dodałam odpowiednie formułki. Wszystko ładnie działa. Wygenerowałam sobie plik .po, który ładnie odczytał wszystkie teksty angielskie. Wszystko dotąd jest OK.
    Teraz trzeba plik .po przetłumaczyc na polski.

    ten tutorial powyżej jest tak napisany, że nic nie można z niego zrozumieć.
    Kiedyś tą metodą tłumaczyłam cudzie motywy i jakoś szło. Minęło trochę czasu, troche zapomniałam i znowu czytam ten tutorial i nic z niego nie rozumiem.
    Otworzyłam poedit, wyswietlił mi się plik z angielskimi napisami, przetłumaczyłam je na polski, zapisałam jako pl_PL.po, wgrałam na serwer.
    i tu jest proble
    blog nie czyta polskiego tłumaczenia, jak był angielski tak jest
    sprawdzam wszystko dziesięc razy, miałam jakieś blędy, wszystko poprawiłam
    wszystko jest jak sie wydaje dobrze, formułka w functions.php jest.
    Dlaczego motyw nie czyta tłumaczniea???????

    1. mnie się nawet nie udało dojść do etapu zapisania katalogu. Cały czas mam błąd zapisu.
      Osoby niewprawione nie zrozumieją z tego tutka nawet połowy. Porażka.

    2. Zdaje się, że programem poedit trzeba zapisywać pliki w dwóch rozszerzeniach, a mianowicie .po oraz .mo i te dwa pliki wrzucać na serwer to wówczas powinno pomóc

      1. Żeby tłumaczenie się wyświetliło, wystarczy tylko plik mo, ale warto zawsze mieć przy nim plik po wg k†órego powstała skompilowana wersja „mo” zrozumiała dla WP.

  12. Ta cała metoda jest do chrzanu. Znacznie prościej tłumaczyć ręcznie.
    O co chodzi z tym katalogiem. Może tego katalogu nie zrobiłam.
    Co mogłam zrobić źle????

    1. Małgosia, świetnie że Ci się zachciało i masz rację, że myślisz o tych z Górnej Wolty, bo dobrze napisany motyw, to taki który jest ‚translation-ready’ (taki właśnie tag znajdziesz przy większości dobrych motywów w repozytorium).

      Ciężko mi ocenić, w czym problem nie widząc plików źródłowych, ale sprawdź po kolei następujące rzeczy:

      1. czy w pliku function.php masz następujące linie:

      load_theme_textdomain( 'bursztynowy-motyw', TEMPLATEPATH.'/languages' );
      $locale = get_locale();
      $locale_file = TEMPLATEPATH."/languages/$locale.php";
      if ( is_readable($locale_file) )
          require_once($locale_file);
      

      gdzie ‚bursztynowy-motyw’ jest nazwą, która jakoś nawiązuje do nazwy Twojego motywu.

      2. znajdź przynajmniej jedną wyświetolaną frazę z pozostałych plików źródłowych, np. ze stoopki (footer.php) i spawdź czy wygląda tak:

      <p><?php _e('Theme author: Maggie', 'bursztynowy-motyw'); ?></p>
      

      3. Sprawdź, czy w katalogu z Twoim motywem, masz:
      a) katalog languages
      b) w katalogu languages są pliki pl_PL.po i pl_PL.mo

      a w pliku po fraza ‚Theme author: Maggie’ ma swoją polską parę/polski odpowiednik: ‚Autor motywu: Maggie’

      4. Upewnij się, że Twój WordPress jest zainstalowany w polskiej wersji językowej lub przełączony na polską wersję (w katlogu wp-config.php musi być linia:

      define('WPLANG', 'pl_PL');
      

      Jak Ci się uda i motyw, który tworzysz jest bezpłatny, to możesz podać tutaj link do niego.

      1. Odpowiadam:
        1. Tak – plik functions.php jest jak trzeba
        2. nie rozumiem co to znaczy wyświetlona fraza. Pracowicie zmieniałam w motywie żeby wszędzie było to _e. Motyw czyta się poprawnie, nie ma żadnych błędów czyli jest dobrze.
        3. katalog languages jest, pliki pl_PL.po i pl_PL.mo są. Otworzyłam te pliki w notatniku – tłuaczenia na polski są.
        4. wordpress jest w wersji polskiej, a w pliku wp-config jest ta linia.

        Tłumaczenie się nadal nie odczytuje i blog jest nadal po angielsku.

        Czy jest jakieś rozwiązanie tego problemu czy dać sobie spokój?

        Koszmar po prostu.
        Tyle się nad tym namęczyłam i wszystko na nic.

        1. Pisząc „fraza”, mam na myśli jakiś tekst, zlepek słów do przetłumaczenia, tworzących pewną całość. W powyższym przykładzie frazą jest „Theme author: Maggie”. Przykładowy wykaz fraz po pol. i odpowiedników po ang. widać na tym obrazku.

          Diabeł tkwi w szczegółach i pewnie chodzi o jakiś drobiazg.

          Ale mam inny pomysł, spróbuj zrobić tak:

          1. Wejdź do motywu TwentyTen albo TwenttEleven, do katalogu languages i przekopiuj z niego pliki pl_PL.mo i pl_PL.po do katalogu languages w Twoim motywie. Nic w nich nie zmieniaj, po prostu swoje pliki pl_PL.mo i pl_PL.po nadpisz tymi (zachowaj sobie oczywiście kopię tych swoich na boku).

          2. Wjedź do pliku footer.php w Twoim motywie i napisz tak:

          <p><?php _e('Comments are closed.', 'bursztynowy-motyw'); ?></p>
          

          w miejscu ‚bursztynowy-motyw’ wpisz to co podałaś wcześniej pliku functions.php jako pierwszy parametr funkcji load_theme_textdomain

          3. Zapisz zmiany i wyświetl motyw. W stopce powinnaś zobaczyć tekst „Możliwość komentowania jest wyłączona.” a nie „Comments are closed.”
          Jeśli tego nie widzisz, to znaczy, że problem jest w deklaracji w pliku functions.php.

          Daj znać, czy się udało.

  13. Zrobiłam jak radzisz powyżej ale nie zadziałało.

    problem rozwiazalam!

    tylko nie wiem jak!!!!

    plik pl_PL.mo był zapisany w Ansi, spróbowałam go zapisać jako utf-8. Przesłałam na serwer i fajnie – zadziałało. Tyle ze w utf zapisał się plik z rozszerzeniem txt, czego nie zauwazyłam. Czyli wysłałam na serwer ten sam plik nie zmieniony. Musi być w ansi, jak się okazuje. Czyli zadziałało od samego otwarcia w notatniku? Dziwne to jakieś!

    1. Super, że działa. Ja zawsze zapisuję pliki „po” z kodowaniem UFT-8, takie kodowanie mają też pliki „pl_PL.po” w tłumaczeniach motywów TwentyTen i TwentyEleven.

  14. Sorki że tak wałkuję tę sprawę, ale pewnie innym też się te informacje przydadzą.
    Otóż mam pytanie: czy można to powielać? Jak zrobić drugi motyw przygotowany do tłumaczenia.

    Stworzyłam drugi motyw, który ma pliki źródłowe dokładnie takie same – zmieniając css mogę zrobić tyle motywów najróżniejszych ile chcę z tego jednego.
    Teoretycznie tekst jest dokładnie taki sam. Czy można użyć tych samych plików po i mo?

    Czy tworząc nowy motyw muszę nadać mu nazwę, tę nazwę poumieszczać wszędzie w nawiasach tam gdzie są angielskie napisy, wygenerować nowy plik po, potem go przetłumaczyć przy pomocy poedit (choć napisy są dokładnie takie same), wgrać na serwer i godzinami się męczyć bo nie działa.

    Czy nie ma jakiegoś szybszego sposobu? Najprościej byłoby skopiować po prostu, ale nie wiem czy tak można.

    1. Teoretycznie możesz użyć tych samych plików, ale ja bym dla każdego motywu dawała jednak inną nazwę identyfikacyjną, zgodną z nazwą motywu.

      Ja bym zrobiła tak, że bym po prostu skopiowała wszystkie pliki źródłowe php starego motywu (ze starą nazwą w funkcjach _e), a potem zrobiła automatyczny „replace” starej nazwy na nową w plikach tego nowego motywu. Taką podmiankę w więcej niż jednym pliku na raz możesz zrobić np. programem mreplace

  15. Jasno i przejrzyście napisany poradnik. Chętnie bym z niego skorzystał ale swój blog mam na wordpress.com a oni nie pozwalają na takie „majdrowanie”. Wielka szkoda, że muszę mieć takie angielskie wstawki na swej stronie. Pozdrawiam i dziękuję.

    1. Dziękuję za miły komentarz. Zawsze można przenieść blog z wordpress.com na własną domenę, ale są tego plusy i minusy. A pozostając na wordpress.com można też poszukać motywów w pełni spolszczonych. Chociaż „Blog Dziadeczka” ma bardzo ładną szatę graficzną i ja bym już nie majstrowała 🙂

      1. Pani Ago, miła, bardzo dziękuję za radę – pozostanę na .com i majstrował nic nie będę bowiem moja wiedza w tym temacie jest żadna a percepecja ma już 70 lat z okładem. Zastanawiałem się nad hostingiem i domeną – ale poczytałem ile to problemów mają inni przy stawianiu wordpressa i doszedłem do wniosku (w którym mnie Pani utwierdziła), że opieka nad moim blogiem powinna być sprawowana przez specjalistów z wordpress.com . Z atencją się kłaniam, pozdrawiam i po cichutku liczę na przysłowiowe dwa słowa komentarza, którym będę zaszczycony.

        1. To zaszczyt dla mnie gościć na blogu kogoś, kto z takiej perspektywy czasu patrzy na świat i przy tym podąża za duchem czasu, prowadząc również swój blog. Z przyjemnością poczytam Pana artykuły i dorzucę swoje trzy grosze tam, gdzie będę mieć coś ciekawego do powiedzenia.

  16. Hej,

    Dopiero zaczynam swoją przygodę z wordpress.org i mam problem, który dotyczy stricte tego właśnie tematu. Stworzyłem zgodnie z instrukcją pliki PL_pl.mo i .po (początkowo miałem jeden błąd, gdzieś zabrakło %, ale później grzecznie się zapisały). Kodowanie ustawiłem takie jak trzeba – UTF-8. Oba pliki elegancko zamieściłem na serwerze w pod-pliku mojego motywu – „languages” i już miałem cieszyć się w pełni polską wersją swojego wykluwającego się dopiero bloga, a tu BENC.. Nici, żadnego efektu. Gdzie może być błąd? Będę wdzięczny za pomoc.

    1. Dobrze że próbujesz i szukasz przyczyny błędu zamiast np. się zniechęcać. Rozumiem, że tłumaczysz istniejący motyw, który jest gotowy do tłumaczenia? Wejdź do pliku functions.php (w katalogu wp-content/themes/twoj-motyw, znajdź fragment podobny do tego:

      load_theme_textdomain( 'nazwa-motywu', TEMPLATEPATH.'/languages' );
      
      $locale = get_locale();
      $locale_file = TEMPLATEPATH."/languages/$locale.php";
      if ( is_readable($locale_file) )
      	require_once($locale_file);
      
      

      i wklej go tutaj do komentarza, dobrze? Cały ten blok wklej między znaczniki [php] oraz [/php]

      1. /* Load Theme TextDomain */
        		load_theme_textdomain( 'brunelleschi', TEMPLATEPATH . '/languages' );
        		$locale = get_locale();
        		$locale_file = TEMPLATEPATH . "/languages/$locale.php";
        		if ( is_readable( $locale_file ) ) { require_once( $locale_file ); }
        
        1. Dzięki. Rozumiem, że masz zainstalowanego WP w polskiej wersji (w pliku wp-config.php jest linia

          define('WPLANG', 'pl_PL');

          )?

          Widzę, że motyw ten ma już pliki językowe dla fr_FR. Otwórz za pomocą poedit plik fr_FR.po, wejdź (z poziomu poedit) w Katalog->Ustawienia (z górnego menu) i zmień język na Polish, a kraj na Poland. Zapisz plik pod nazwą pl_PL.po. Plik pl_PL.mo utworzy się automatycznie. Przegraj te dwa pliki do katalogu languages na serwer. W tym momencie powinieneś zobaczyć stronę po francusku. Będzie to test, czy wszystko działa. Potem wystarczy że zamiast francuskich fraz wpiszesz polskie.

          1. Zainstalowałem najnowszą wersję angielską, a później przetłumaczyłem ją sobie wstawiając tą właśnie linię:

            define('WPLANG', 'pl_PL');

            Zgadza się motyw posiada plik fr_FR, jednak po wykonaniu tych działań język wciąż się nie zmienił. Nie wiem z czego to wynika. Czy może to być wynik tego, że serwer z dużym opóźnieniem się aktualizuje? Na razie korzystam z wersji testowej eHosta, dopiero dzisiaj za nią zapłacę. Ale tego typu ograniczenia w wersji testowej serwera są chyba nie możliwe… Co robić w takim razie?

          2. A jaki masz interfejs w panelu admina: polski czy angielski? To znaczy widzisz napisy „Add post”, „Add page”, „Comments” itd. czy wszystko jest po polsku? Instalacja WordPressa (nie mylić ze spolszczaniem motywu) w danej wersji językowej wymaga skopiowania odpowiednich plików do katalogu wp-content/languages (nie mylić z katalogiem wp-content/themes/motyw/languages).

  17. Teraz już wiem, jak przygotować sobie anglojęzyczną wersję. Nawet nie wiedziałem, że to tak banalnie proste jest. Poza samym żmudnym klepaniem kodu z palca oczywiście. Poedit używam generalnie do tłumaczenia wtyczek na język polski.

    1. Na początku nie wiedziałam, do czego dokładnie się odnosisz w tym komentarzu. Pomyślałam: skoro już używasz programu poedit do tłumaczenia wtyczek, to ten tutorial nie wnosi nic nowego. Teraz przyszło mi do głowy, że być może odpowiadałeś na któryś z komentarzy, gdzie pokazywałam, jak samemu napisać motyw w wersji ang. i przygotować od razu jego polską wersję. A Twój komentarz wyświetlił się już niżej z powodu tego, że liczba zagnieżdżeń tego motywu jest ograniczona. Czy to właśnie tak było?

      1. Zaskoczę Cię Agnieszko. O ile mogę się zwracać per Ty. Nie miałem pojęcia o tym, że można przygotowywać szablony do WordPress w taki sposób, jak opisany jest w tym artykule. Myślałem, że tłumaczenie dotyczy tylko wtyczek. Nie potrafię wyjaśnić, dlaczego nie dotarłem wcześniej do informacji o tym, że można używać Poedit do tłumaczenia całości. Wiem, że są wtyczki do tłumaczenia stron, wiem, że można zrobić też tłumaczenia bez wtyczek korzystając z opcji „Multisite”. Jednak zastanawiałem się nad opcją ustawienia ręcznie w plikach konfiguracyjnych możliwości przełączania sobie w jednej instalacji Worpdress języka w panelu admina. Na zasadzie wybierania języka z rozwijanej listy, tak, aby tłumaczył panel admina. Czemu o tym piszę? Ponieważ załóżmy, że przygotowuję kilka wersji językowych strony, np. słowacką, czy czeską i nie znam tych języków, więc zatrudniam kogoś, aby wprowadzał mi teksty czeskie, czy słowackie, bazując na poprawnej treści w języku angielskim. W tym przypadku przydałaby się możliwość przełączenia języka w panelu admina na ten, który jest najlepiej znany takiej osobie tłumaczącej treści. Taka dygresja. Problem w tym, że nie mam pojęcia jak to ugryźć na chwilę obecną. Pomysł wpadł mi do głowy dzisiaj, gdyż robię właśnie tłumaczenie dla firmy i oni cały panel zarządzania CMS mają po słowacku. W tym przypadku to nie jest jeszcze problem dla mnie, ale gdyby to był hebrajski, japoński albo arabski, to wiem, że poległbym na dzień dobry.

          1. Dokładnie o to mi chodziło. Będę musiał to przetestować. WordPress coraz bardziej zaskakuje mnie w pozytywny sposób.

          2. To działa tak (mowa cały czas o WordPress Multisite), że w momencie, kiedy wybierzesz dany język z listy rozwijanej, skutek zmiany języka jest widoczny niejako w dwóch obszarach:
            1. w części widocznej dla odwiedzającego witrynę wszystkie frazy zostaną przetłumaczone na przełączony język (pod warunkiem, że motyw posiada pliki po i mo danego języka)
            2. cały interfejs w panelu administratora zostanie wyświetlony w danym języku (bez względu na to, czy mamy w motywie pliki po i mo danego języka – tutaj wykorzystane są pliki po i mo zawarte w katalogu wp-content/languages)

  18. Witaj Aga,
    Czy mogę poprosić o poradę.

    Chodzi mi o to, że robie nowy motyw wordpresa. Kopiuje wszystkie pliki ze starego, wszystkie nazwy motywu w plikach zmienianiam na nowe tam gdzie ma być tłumaczenie. Sprawdzam czy nazwa motywu jest w pliku css i functions. Wszystko jest OK.
    Zrobilam kilka motywów tą metodą i w jednych tłumaczenie na polski działa a w innych nie.
    Co mogłam źle zrobić?
    Dlaczego w niektórych przypadkach tłumaczenie nie działa?

    Te motywy przerobiłam na CMS tak żeby nie było elemnentów blogowych. Ale to chyba nie powinno wpłynąć na tłumaczenie.

    Teoretycznie można olać sprawę bo tych napisów i tak nie widać ale chce żeby było to profesjonalne i perfekcyjne.

    Przy okazji dzięki za ciekawą wiedzę na blogu. Zamierzam wszystko przeczytać bo akurat potrzebowałam wiedzy na temat przerabiania WP na CMS.

    Będę wdzieczna za wskazówke.

    1. Małgosia,
      pewnie gdzieś chodzi jakiś drobiazg.

      Sprawdź jeszcze raz, wg wskazówek z tej części komentarza. Dodatkowo otwórz plik pl_PL.po w poedit, wejdź w Katalog->Ustawienia i sprawdź, czy jest kodowanie UFT-8.

      Ale przyczyny mogą być różne, przeczytaj sobie wyżej komentarze Motywatora, miał podobne problemy i w końcu to rozwiązał i opisał tutaj.

      A udostępniasz gdzieś ten motyw? Jeśli tak, to sobie go ściągnę i zobaczę, co nie gra, bo tak na sucho, ciężko zgadywać. Jak chcesz, możesz mi również wysłać pliki motywu na maila.

      P.S. Dzięki za miłe słowa odnośnie bloga, ja na Twojego też zaglądam i dużo ciekawego wyczytałam.

  19. Rozwiązałam problem metodą prymitywną – podmieniłam pliki z innego motywu. W innym przypadku zapisalam plik .mo w utf-8 i zadziałało.

    Używam notatnika lub notepad++ i filezilli – może któryś z nich zmienia cos w kodowaniu plików.
    Powielam dokładnie ten sam motyw, tylko zmieniam arkusz stylów i zmianiam położenie widgetów. coś musi być z kodowaniem bo dlaczego jeden motyw czyta tłumaczenie a drugi nie.

  20. Witam serdecznie! Baaaaardzo dziękuję! Świetny tutorial i równie pomocne odpowiedzi w komentarzach. Pozdrawiam i dołączam do grona stałych czytelników 🙂

  21. Największym „koszmarem” (czytaj czasochłonną pracą) jest przerabianie, lub pisanie skórki pod tłumaczenie. Dorwałem fajną skórkę florascent i poprawiam jej kod, robiąc tłumaczenie Poedit.

  22. Moja radość nie trwała długo:( na jednej stronie wszystko się udało, tłumaczenie śmiga jak należy. Natomiast na drugiej po wgraniu na serwer plików pl_PL.mo i .po tłumaczenie pojawia się, ale na dole strony wyskakuje błąd o treści:

    Warning: Illegal offset type in isset or empty in /home/users/blog/public_html/wp-includes/pomo/translations.php on line 59

    Próbowałam już wgrywać wszystko od nowa, instalowałam ponownie poedit, przerzucałam pliki z tłumaczenie do głównego katalogu… skończyły mi się pomysły co może być nie tak.

    Dodam, że obie strony są na tym samym szablonie, tłumaczenie robiłam w ten sam sposób, zupełnie nie wiem dlaczego na jednej wszystko działa na innej nie.

    Nie wiem czy to jest potrzebne ale plik function wygląda u mnie następująco:

    require_once( dirname( __FILE__ ) . ‚/lib/init.php’ );
    load_theme_textdomain( ‚inLine’, TEMPLATEPATH.’/languages’ );
    $locale = get_locale();
    $locale_file = TEMPLATEPATH.”/languages/$locale.php”;
    if ( is_readable($locale_file) )
    require_once($locale_file);

    Będę niezmiernie wdzięczna za pomoc:)

    1. Najprawdopodobniej ten warning nie ma nic wspólnego z wgrywaniem tłumaczenia. Proponuję wpisanie jego treści w google i poczytanie, co ludzie piszą na ten temat. Okaże się, że przyczyny bywały różne. Możesz też spróbować wyłączyć chwilowo wszystkie pluginy i sprawdzić czy błąd pojawia się nadal.

      1. Dzięki za szybką odpowiedz. Warning znika jak usuwam pliki z polski tłumaczeniem, wydawało mi się oczywiste, że problem tkwi właśnie w tym, ale w takim razie popróbuje z wtyczkami, choć przy wcześniejszej stronie miałam zainstalowane dokładnie te same :/

        Jeśli ktoś ma jakieś pomysły co może być nie tak proszę piszcie.
        Dzięki.

          1. To może napisz jeszcze tak:
            a. jakiej wersji WP używasz?
            b. jakiego motywu używasz?
            c. czy funkcję require_once( dirname( __FILE__ ) . ‘/lib/init.php’ ); wstawiałaś do functions.php sama czy była dostarczona razem z motywem

          2. W przypadku tego motywu robisz tak:
            1. Wchodzisz do katalogu z motywem, do podkatalogu lib, a następnie language (najlepiej to zrobić na lokalnej kopii motywu)
            2. Znajdziesz tam już gotowy plik inline.po. Zrób jego kopię i zapisz w tym samym katalogu pod nazwą pl_PL.po.
            3. Otwórz plik pl_PL.po w poedit, wybierz z menu Katalog->Ustawienia ustaw Język na Polish, Kodowanie na UTF-8, Kodowanie źródła UTF-8
            4. Przetłumacz na polski na próbę jedną lub dwie frazy, np. Continue Reading i zapisz plik w poedit (Plik->Zapisz). Poedit wówczas utworzy Ci plik pl_PL.mo
            5. Przerzuć pliki pl_PL.po i pl_PL.mo na serwer. Wszystko powinno śmigać, sprawdzałam u siebie.

          3. rozwiązanie problemu: jest to błąd WordPressa – sprawa została skierowana do firmy hostingowej, jedyne co mogli zrobić to przypiąć „łatkę” w miejscu, w którym wyświetlał się warning.
            Niektóre serwery mają po prostu inną/starszą wersję plików do php, która nie wyświetlała warningu, w przypadku mojego serwera warning był widoczny

            🙂 jeszcze raz dzięki za chęć pomocy.

  23. Witam,

    Wszystko fajnie opisane, ale od godziny nie mogę ustawić poedit, żeby chciał działać.

    Mam plik po i mo w katalogu „languages”. Katalog „languages” znajduje się w katalogu ze wszystkimi plikami wordpress. Jak to powinienem poustawiać w poedit, żeby chciał przygotować odpowiednie pliki?

    Kolejne pytanie – czy poedit tłumaczy też wyrażenia oznaczone przez „_x” jak ma to miejsce w skórce twentyeleven?

    Proszę o pomoc i pozdrawiam

    1. Żeby poedit uwzględnił tez wyrażenia zaczynające się od _x trzeba mu w ustawieniach Słów kluczowych podać _x:2c,1

      Daj znać dla jakiego motywu próbujesz ustawić poedit, to Ci napiszę, jak to ustawić.

      1. Motyw własny. Problem mam cały czas z ustawieniem katalogów, tak podejrzewam i widzę z opisu błędu. Niby odpowiednio kropki dodaję, ale ciągle lipa jest. Ścieżka główna to 1 kropka, poniżej kolejna ścieżka do 2 kropki i nie działa. Podpowiesz coś?

        1. To znaczy, masz problem z zaczytaniem/załadowaniem fraz z Twoich plików do poedit tak? Innymi słowy, nie możesz otrzymać ekranu jak na rysunku do kroku Krok 3.2.7, tak?

          Jaką masz strukturę katalogów w katalogu z Twoim motywem? Gdzie siedzą wszystkie pliki php a gdzie katalog languages?

          1. Dokładnie, do tego ekranu nie mogę dojść. Budowa skórki:
            – katalog ze skórką (w nim pliki php),
            — w katalogu ze skórką mam katalog languages (w nim pliki tłumaczeń),
            — w katalogu ze skórką mam jeszcze katalog library (w nim funkcje skórki).
            Po zmianie w plikach skórki chciałbym, by POEDIT dodał nowe wyrażenia do tłumaczeń w obecnym pliku po z tłumaczeniami. Ale POEDIT nie chce cały czas nic zczytać.

          2. Motyw własny, to znaczy Ty go piszesz, tak?
            Czegoś tu nie rozumiem. Jakie pliki tłumaczeń masz w katalogu languages skoro jeszcze nie doszedłeś do tego kroku, żeby poedit cokolwiek zaczytał?

          3. Wcześniej już go tłumaczyłem, właśnie w poedit. Wtedy dzięki stronie http://www.icanlocalize.com/tools/php_scanner i spakowanemu katalogowi skórki otrzymałem plik po. Następnie w poedit przetłumaczyłem plik po. Na tej stronie można również zaktualizować plik po gdy zajdą zmiany w skórce. Ale niestety ta strona nie obsługuje wyrażeń zaznaczonych przez _x. Dlatego chciałem to samo zrobić w poedit, ale ten nie chce nawet stworzyć mi pliku po od początku, a co dopiero zaktualizować istniejący. Mam nadzieję, że udało mi się wszystko wyjaśnić, cały ten galimatias 🙂

          4. Czyli już masz plik po i chcesz go po prostu uaktualnić o nowe frazy, które pojawiły się w źródłach? Jeśli tak, to musisz zrobić tak:
            1. Otworzyć plik pl_PL.po w poedit
            W oknie jak na rysunku „3.2.7 ” powinieneś zobaczyć zawartość pliku po. (nie będzie tam jednak nowych fraz, które dodałeś później).
            2. Skonfigurować program poedit (Katalog->Ustawienia) w taki sposób, żeby ścieżka prowadziła do katalogu z plikami php motywu, czyli u Ciebie będzie to pewnie .. (dwie kropki, katalog nadrzędny, no chyba że gdzieś jeszcze mas pliki php)
            W zakładce „Slowa kluczowe” trzeba podać _e oraz __ (podwójne podkreślenie) oraz _x:2c,1
            3. I teraz uwaga: Naciskamy Katalog->Aktualizuj ze źródeł. Poedit znajdzie sobie wszystkie linie z frazami, których jeszcze nie zna. Pozwól mu na ich dodanie i wówczas już będziesz je mógł tłumaczyć.

            Czy to o to chodziło?

          5. No i walczyłem z tym i nadal nic. Cały czas pokazuje, jakbym miał źle ustawione ścieżki do katalogu. Jak powinienem je ustawić? Obojętnie gdzie i ile kropek nie wpiszę, zawsze jest źle. Powinienem ustawić ścieżkę podstawową .. (dwie kropki), a poniżej dodać ścieżkę . (jedna kropka)? Tak powinno być właściwie, gdy plik po znajduje się w katalogu languages, a pliki php w wyższym katalogu skórki?

          6. Ścieżki ustawiamy względem miejsca, gdzie jest zapisany nasz plik pl_PL.po. A ścieżka ma prowadzić do miejsca, gdzie znajdują się pliki php (bo to w nich siedzą frazy do przetłumaczenia). Czyli jeśli mamy wszystkie pliki php bezpośrednio w katalogu z motywem i nigdzie więcej, a dodatkowo w nim podkatalog languages, w którym siedzi plik pl_PL.po, to wystarczy w ustawieniach ścieżki podać katalog nadrzędny, czyli dwie kropki. W ten sposób mówimy poeditowi, który został otwarty dla pliku pl_PL.po: przeszukaj frazy w katalogu wyżej.

            Ale może u Ciebie jest inny problem? Czy Ty masz w pliku functions.php coś takiego:

            load_theme_textdomain( 'twoj-motyw', TEMPLATEPATH . '/languages' );
            
            	$locale = get_locale();
            	$locale_file = TEMPLATEPATH . "/languages/$locale.php";
            	if ( is_readable( $locale_file ) )
            		require_once( $locale_file );
            
  24. Zgrabny poradnik. Przetłumaczyłem motyw Suffusion w wystarczającym dla siebie zakresie.

    Natknąłem się przy tym na jedną niedogodność. Obecna wersja Suffusion to 4.0.2. Teksty do tłumaczenia są zebrane w pliku suffusion.po. Dodatkowo na stronie motywu (http://aquoid.com/news/themes/suffusion/translating-suffusion/) znajduje się tłumaczenie polskie ale do wersji 3.6.9. Starsza wersja działa dobrze, ale naturalnie niektóre nowe elementy nie są przetłumaczone.

    Czy jest jakiś prosty sposób aby przenieść już przetłumaczone elementy ze starszej wersji pliku pl_PL.po do właśnie tłumaczonego najnowszego suffusion.po?

    Na razie poradziłem sobie w ordynarny sposób; otwarłem obydwie wersje plików .po obok siebie i robiłem copy paste pole po polu do nowej wersji ale jest to głupia i czasochłonna operacja. Przy każdej nowej wersji motywu będzie podobny problem.

    Jakieś pomysły?
    Pozdrawiam,

    Gr.

    1. Trzeba zrobić tak:
      1. skopiować istniejącą wersję z tłumaczeniem (pliki pl_PL.po i pl_PL.mo) do katalogu z tłumaczeniami motywu, w przypadku motywu suffusion będzie to katalog nie languages, lecz translation
      2. otworzyć przekopiowany plik pl_PL.po w programie poedit
      3. Wybrać z menu Katalog->Ustawienia i w zakąłdce ścieżki podać .., w zakładce słowa kluczowe podac _e oraz __ (podwójne podkreślenie)
      4. wybrać z menu Katalog->Aktualizacja ze źródeł
      Poedit zaciągnie wszystkie nowy frazy, wykryje również stare, nie uzywane
      5. wybrać z menu Plik->Zapisz

  25. to ja jestem jakaś ciemna. Utknęłam już na dodawaniu jakieś ścieżki. 20 kombinacji nie dało nic!. Porażka 🙁

    1. Aniu, pomogę Ci, napisz proszę, w którym miejscu utknęłaś i w czym jest dokładnie problem. Jaki motyw tłumaczysz?

  26. Twój tutorial jest drugi jaki przeczytałam… I niestety. PoEdit na samym końcu wywala piękny błąd – problem tym, że kolumna z opisem błędu jest tak wąska, że nie mogę przeczytać dokładnie co jest źle.
    Skorzystałam z tego serwisu http://www.icanlocalize.com/tools/php_scanner – bo już mnie szlag trafiał, jak robiłam wszystko wg zaleceń, a dostawałam ucięty komunikat o błędzie.
    Używam wersji 1.4.6 na maka.

    1. Nie bardzo wiem, jak mam pomóc. Masz jakiś pomysł? Może podasz nazwę skórki, której używasz, zobaczę, czy ja też dostają jakiś błąd?

  27. Cześć!

    Ja krótko… 🙂

    Mój motyw to OXYGEN.
    Próbuję wszystko jak w tutorialu i… nie działa.
    „Poedit” nie wyszukał mi niestety też tych wszystkich drażniących „recent articles”, „more articles”,”Apologies, but no entries were found.”…

    Jakieś sugestie?
    Z góry dziękuję!
    Adam

    1. Nic dziwnego, że Ci się nie udaje. Motyw jest nie do końca dobrze przystosowany do tłumaczenia. Wprawdzie posiada pliki po i mo, część fraz poedit zaczytuje automatem, ale nie ma wśród nich tych, na których Ci zależy. Rozwiązanie? Albo przetłumacz je ręcznie (są w pliku page-template-front.php) albo znajdź je w tym pliku i dostosuj do tłumaczenia, a potem póść automatyczne zaczytanie w poedit jeszcze raz.

    2. SUUUPER! 🙂
      Działa.

      Dzięki za NATYCHMIASTOWĄ odpowiedź!

      Ale cały czas nie mogę znaleźć – „Apologies, but no entries were found.”…

      Adam

  28. Nie sądzę, aby ten program był niezbędny w tłumaczeniu skórki. Osobiście otwieram pliki w zwykłym notatniku i tam tłumaczę. Dla osoby, która ma już w tym wprawę nie jest to jakiś duży problem.

    1. Denis, masz rację, program nie jest niezbędny i sposobem, który podajesz też osiągnie się cel. Jednak robienie tego „zgodnie z zasadami sztuki”, czyli za pomocą narzędzi tego typu ma sporo zalet. Wypiszę kilka z nich:
      – nie musimy sami wyszukiwać fraz do tłumaczenia – program robi to za nas i to za pomocą jednego kliknięcia! Dzięki temu większe szanse, że niczego nie pominiemy.
      – w programie widzimy pary: frazę oryginalną i po przetłumaczeniu – nie nadpisujemy starych wartości, zawsze możemy do nich wrócić
      – frazy pozostałe do przetłumaczenia są zgrupowane razem – w ten sposób szybko widzimy, co już mamy gotowe, co nie
      – nie nadpisując oryginalnych wartości w źródłach możemy dostosować skórkę do wielu języków
      – nie nadpisując oryginalnych wartości w źródłach unikniemy kłopotów podczas aktualizacji motywu (bądź wtyczki, jeśli tłumaczymy wtyczkę)
      – mając zebrane wszystkie frazy w jednym miejscu (w edytorze) bardzo szybko jesteśmy w stanie wyszukać tej, która nas interesuje
      – gdy robimy witrynę wielojęzyczną nie możemy nadpisywać fraz w źródłach, lecz zachować osobne wersje językowe jednocześnie

      Czy to Cię przekonuje?

      1. Jeśli robimy stronę w wielu językach i boimy się, że coś pominiemy to rzeczywiście program jest idealny co mnie automatycznie przekonuje.

        Pozdrawiam i dziękuję za odpowiedź. 🙂

  29. ..zanim tu sie znalazlem zastosowalem rozne rozwiazania jak i te ktore sa powyzej..i..efekt jest jalowy..
    moja skorka nie posiada katalogu languages, ani nie zawiera typowych plikow fr_FR etc…dopisalem w pliku functions regule oraz otagowalem angielskie pliki jako _e z uzyciem php..w poedit w nazwie projektu podalem np nazwe pliku zrodlowego z rozszerzeniem php (przykladowo footer.php)..ustalilem sciezki..i…poedit po zaznaczeniu opcji aktualizacji zrodla wyswietla mi jedynie angielskie frazy..bez ich tlumaczenia..zrobilem wczesniej reczne tlumaczenie plikow..ale slowo home wyswietla mi jako `strona gwna`…a znaki diakrytyczne kategoryzuje w kwadratach..musialbym zmienic tutaj kodowanie..tak aby napis home mial tlumaczenie strona główna..ktos potrafi sie do tego ustosunkowac?
    co z tym fantem zrobic..juz teraz chetnie rzucilbym tym wszystkim o sciane..i zaczal budowac od zera nowa templatke..

    1. To, że próbujesz działać to już dobrze świadczy. Wyjdziemy na prostą. Na początek potrzebuję link do motywu. Jeśli motyw mogę pobrać gdzieś z sieci, to podaj proszę linka.

  30. 12:57:46: xgettext: Non-ASCII string at ../comments.php:7.
    12:57:46: Please specify the source encoding through –from-code.
    12:57:46: Wpisy w pakiecie są prawdopodobnie niepoprawne.
    12:57:46: Aktualizacja pakietu się nie powiodła. Naciśnij przycisk „Szczegóły »”, aby zobaczyć szczegóły.

    Wyskakuje mi taki błąd i nie wiem co robić. ;]

        1. A patrzyłeś (zgodnie z komunikatem 12:57:46: xgettext: Non-ASCII string at ../comments.php:7.) do pliku comments.php do wskazanej linii?

          I dwa, ustawiłeś kodowanie na UTF-8?

          1. Tak. W linii 7 jest pierwsze wywołanie funkcji _e() a kodowanie jest ustawione na UTF-8 bez BOM (w edytorze Notepad++).

          2. Damian, polskich znaków można używać w kodzie, chociaż lepszą praktyką jest pisanie w kodzie tylko po angielsku i potem zrobienie plików po i mo z tłumaczeniem. Ale jak zrobiłeś odwrotnie to tez przejdzie, tylko upewnij się co do dwóch rzeczy: 1) że w poedit masz UTF-8 w ustawieniach w kodowaniu źródła 2) polskie znaki zapisywałeś w źródle przy ustawionym UTF-8.

          3. UTF-8 jest w poedit i w źródle. A jak bym zrobił angielskie napisy to jest możliwość automatycznego tłumaczenia na polski?

          4. Teraz sprawdziłam. Na rysunku w tym tutorialu pole dotyczące kodowania źródła nie jest zaznaczone. Ale to dlatego, że tutorial dotyczy przekładu ang na pol i nie jest potrzebne, a Ty masz odwrotnie. Wiesz o które pole mi chodzi?

    1. Witaj, czy chodzi Ci o motyw Evolve? Pisałam ten artykuł ponad rok temu, już kilka razy robiłam czystki u siebie na dysku 🙁

      1. Dokładnie o Evolve:) Kurcze, szkoda, bo to bardzo dobry motyw, te podstawowe rzeczy takie jak odpowiedzi w komentarzach, wiadomosci nt. postów i jeszcze kilka rzeczy które od razu rzucają się w oczy, to przetłumaczyłem ręcznie w plikach php., ale nie wiem co może jeszcze wyskoczyć w innych miejscach.

    1. Marzena, ten motyw ma plik (w katalogu languages) o nazwie adventurejournal_1.7.po. Wystarczy, że go otworzysz w poedit, podasz polskie odpowiedniki i zapiszesz pod nazwą pl_PL.po. Przed zapisem w ustawieniach zmień tylko język na polski (zakładka Informacje o projekcie). Po wykonaniu save’a skopiuj oba pliki na serwer, powinno działać.

        1. Marzena, zakładka Informacje o projekcie to pierwsza zakładka widoczna po wybraniu z menu górnego w poedit: Katalog, a potem Ustawienia.

          Plik mo powinien powstać podczas zapisu pliku po. Tak właśnie robisz?

  31. Używam obecnie motywu który nie jest przystosowany do tłumaczenia. Nie posiada __ i _e. Jak ten motyw zmienić, aby wykorzystywał .po .mo. W poedit wiem jak edytować. Od czego powinienem zacząć?

    1. Jakbu, zacznij od wstawienia do functions.php lini:

      load_theme_textdomain( 'nazwa_motywu', TEMPLATEPATH . '/languages' );
      
      $locale = get_locale();
      $locale_file = TEMPLATEPATH . "/languages/$locale.php";
      	if ( is_readable( $locale_file ) )
      		require_once( $locale_file );
      

      potem załóż katalog languages, w nim plik pl_PL.po z poziomu poedit (poedit trzeba skonfigurować jak w tutorialu).

      A następnie czeka Ci żmudna robota, bo miejsca typu:

      <h1>Jakiś tytuł</h1>
      

      musisz zamienić na:

      <h1><?php _e( 'Search', 'nazwa_motywu' ); ?></h1>
      

      a miejsca typu ‚some other text’ na

      __('some other text', 'nazwa_motywu'),
      
  32. Dziękuję za ten świetny przewodnik!

    Ponieważ ja dużo pracuję na urządzeniach przenośnych (iPad), znalazłam sposób na tłumaczenie plików bez potrzeby ściągania programu.

    Możesz zrobić to na Poeditor.com – wystarczy założyć darmowe konto (nie bój się:) Wymagane jest imię i mail). Strona ładnie wygląda, a tłumaczenie przebiega niezwykle sprawnie.

    Safari ma to do siebie, że nie pozwala uploadować pliku. Jednak z pomocą spieszy iCab Mobile (przeglądarka).

    Polecam tym, którzy nie mają dostępu do PC.

  33. Właśnie udało mi się poprawnie przetłumaczyć motyw 😀 jako pierwszy i z powodzeniem. Dziękuję o/ 😀
    PS.
    W punkcie 3.2.5 chyba powinna być nazwa pliku pl_PL, a nie PL_pl. Byłoby to analogiczne do wyżej zaprezentowanego obrazka z listą tłumaczeń.

  34. Ja nie wiem jak to jest – cały czas mi wyskakuje że plik źle zmodyfikowany i nie da się aktualizować – pobieram plik i otwieram w programie i tłumaczę a nasętpnie zapisuję i wrzucam na serwer – i lipa nie ma tłumaczenia, czyta to co było

    1. Kamil, nie pozostaje nic innego jak podmieniać teksty w kodach źródłowych. Mi się zawsze zapala lampka, jeśli motywu jest nie przygotowany do tłumaczenia. Bo to najczęściej bardzo źle świadczy o jego autorze, czytaj, inne rzeczy też się mogą w nim sypać. Przygotowanie motywu na tłumaczenie to pewien rodzaj podstawczaka.

        1. Najlepiej jakbyś to zrobił na plikach motywu na dysku lokalnym, a potem (po zrobieniu zmian) przeniósł na stronę (przez ftp). Wówczas bardzo łatwo wyszukasz odpowiednich fraz w plikach. Dobrze się sprawdza stary poczciwy Total Commander. Funkcja Alt-F7 pozwoli Ci przeszukać cały katalog w poszukiwaniu plików zawierających odpowiedni ciąg znaków: zaznaczasz checkboksa przy polu „Find text” i wpisujesz słówko po angielsku np. comment. Po znalezieniu wchodzisz do wskazanego pliku źródłowego i pomieniasz frazę na polski. I tak z każdym po kolei.

          1. Dziękuje. Znalazłem pierwszy plik i widzę, że są zapisane w php. Ale co ja mam tam zmienić. To jest kilka stron kodu!

          2. Jeśli rzeczywiście motyw nie jest dostosowany do tłumaczenia za pomocą plików po/mo, to nie pozostaje nic innego, jak znaleziony w kodzie tekst zamienić na polski. Nie jest to elegancka metoda. Jeśli autor wypuści kolejną wersję motywu, to nie będziesz mógł zrobić upgrade’u albo stracisz wszystkie zmiany. Co to za motyw? On jest gdzieś w sieci za darmo? Zerknę.

  35. Bardzo dziękuję za poradnik 🙂 W końcu skórka mnie nie irytuje, a do tej pory to wszystko (tłumaczenie) wydawało mi się zadaniem mocno karkołomnym.

      1. To mi miło, że miło :))) Przekopuję teraz Waszego bloga i szczerze powiedziawszy nie wiem kiedy skończę, bo mnie wciągnęło strasznie 🙂

  36. Niestety przy zapisywaniu w poedit, pojawia się następujący komunikat:

    /languages/PL_pl.po:824: `msgid’ and `msgstr’ entries do not both end with ‚n’
    msgfmt: found 1 fatal error

    Co zrobiłem nie tak?

    Pliki wgrywam na serwer i niestety nie działają…

    1. Taki błąd wyskakuje wtedy, gdy oryginalny tekst był zakończony nową linią, a w tłumaczeniu tej linii nie podałeś albo na odwrót.

      Druga sprawa, plik powinien nazywać się pl_PL.po a nie PL_pl.po.

      1. Jak znaleźć ten błąd? Wyszkiwanie w poedit jest bardzo ubogie.
        Dziwią mnie też numery wierszy – co kilka numerów, a nie po kolei. Nie można ich tez uporzadkować wg kolejności ani znaleźć przez wyszukiwanie.
        Nazwę pliku zaraz zamienię.

  37. Witam! „Walczę” z tłumaczeniem motywu Prospect (http://wpbusinessbundle.com/themes/prospect/). Motyw jest przygotowany do tłumaczenia – są pliki percivale.po i percivale-1.po. Tłumaczyłam percivale.po programem Poedit, zapisałam tłumaczenie pl_PL i NIC!!! Zmieniłam przetłumaczony plik na percivale-pl_PL później prospect-pl_PL, bo podglądałam w innych motywach, że przetłumaczone pliki są różnie zapisywane i już brak mi pomysłu. Mogę prosić o pomoc?

    1. Hania, motyw nie jest z repozytorium WordPressa, więc może zrobiono w nim coś niezgodnie ze standardami, stąd Twoje kłopoty. Czy problem jest aktualny? Zerknę na to w wolnej chwili i odpowiem tutaj.

  38. Witam. Tłumaczenie działa ale tylko częściowo – sklep WordPress e-commerce.
    Gdzie moze lezec przyczyna? Wszystko zostało zrobione zgodnie z instrukcją.

    1. Sywlia, a co to znaczy „częściowo”. Możesz podać link do strony, o której piszesz? Na podstawie tych informacji co podałaś nie jestem w stanie nic więcej ocenić.

    1. Wystarczy, że zmienisz w wp-config.php (katalog główny) define(‚WPLANG’, ‚pl_PL’) na define(‚WPLANG’, ‚en_BG’). Wówczas WordPress nie będzie zaczytywał polskiego tłumaczenia.

  39. Bardzo fajnie jest, że komuś się chce pisać ogólnodostępne tutoriale 🙂 Od opublikowania tego konkretnego minęło już nieco czasu, ale absolutnie się nie zestarzał – o czym świadczą choćby daty ostatnich komentarzy. Chciałbym pochwalić Autorkę bloga i podziękować jej nie tylko za publikowane treści, ale także za obsługę komentarzy: jest lepsza niż na większości forów i grup dyskusyjnych, gdzie liczba pytań wielokrotnie przewyższa liczbę odpowiedzi.

    Teraz o moim problemie: próbuję (nawet z niezłym skutkiem) spolszczyć dla siebie motyw Retro-fitted (http://wordpress.org/themes/retro-fitted). Jest on „translation-ready”, ale gdy zaczynałem zabawę, nie wiedziałem, co to znaczy, nie miałem o tych rzeczach pojęcia, więc pracowicie w folderze „child” przerabiałem ręcznie pliki php. (Jako że nie znam języka php, edytuję pliki całkowicie „na czuja”, korzystając z intuicji i jakiej-takiej znajomości html i JS.) Potwierdzam to, co napisała w tutorialu Aga: zawiadywanie tłumaczeniem niekoniecznie musi odbywać się przez plik function.php (w motywie Retro-fitted funkcja load_theme_textdomain jest zawarta w głęboko schowanym pliku hybrid.php).

    Gdy z tutoriala dowiedziałem się, jak łatwa może być lokalizacja motywu, zaraz ściągnąłem poEdita i, postępując dokładnie według wskazówek Agi, wziąłem się do roboty. Niestety, Wiele razy próbowałem zdobyć przy pomocy poEdita materiał do tłumaczenia, za każdym razem program wyświetla mi komunikat o błędzie:

    17:12:34: W przeszukiwanych katalogach nie znaleziono żadnych plików.
    17:12:34: Wpisy w pakiecie są prawdopodobnie niepoprawne.
    17:12:34: Aktualizacja pakietu się nie powiodła. Naciśnij przycisk „Szczegóły »”, aby zobaczyć szczegóły.

    Próbowałem umiejscowić pliki .po i .mo w tym samym folderze (.) i piętro wyżej (..), próbowałem szukać różnych słów kluczowych (w tym dla pewności również domyślnie sugerowanych przez program) – bez skutku. Otwarcie istniejącego pliku .po i praca z nim jest możliwa, ale nowych fraz z plików php wyciągać nie mogę. Próbowałem znaleźć pomoc w Internecie, ale mało jest informacji, jak używać poEdita; wytłumaczenia mojego problemu nie znalazłem nigdzie 🙁 Przyjdzie mi dalej edytować pliki php metodą prób i błędów…

    Przy okazji pytanie: czy folder „languages” jest obowiązkowy, czy to tylko kwestia porządkowa, a pliki .po i .mo mogłyby być umieszczone gdziekolwiek, bo WP i tak je znajdzie? A ich nazwa: ma jakiejkolwiek znaczenie dla WP, czy jedynie dla grzebiących w nim ludzi?

    1. Hej Jaime, dzięki za krzepiący komentarz i miłe słowa pod moim adresem. Aż chce się takim ludziom jak Ty pomagać.

      Jeśli działasz na child theme (i słusznie), robisz tak:
      1. W katalogu child theme zakładasz podkatalog languages
      Musi się on nazywać languages, bo w pliku i18n.php (wp-contentthemesretro-fittedlibraryfunctions) w liniach 32-34 autor napisał:

      * The function first checks if the parent theme or child theme has the translation files housed in their ‚/languages’ folder. If not, it sets the translation file the the framework ‚/languages’ folder.

      2. Kopiujesz do tego katalogu plik retro-fitted-en_EN.po (znajdziesz go w wp-contentthemesretro-fittedlanguages) i zmieniasz mu nazwę na retro-fitted-pl_PL.po

      Dzięki wykonaniu kopii będziesz mieć go już odpowiednio skonfigurowanego.

      3. Otwierasz tak utworzony plik retro-fitted-pl_PL.po w programie poedit

      4. Robisz na próbę tłuczenie jednej frazy, np. dla Posted in

      5. Dajesz Save.

      Powstanie Ci plik mo.

      6. W katalogu motywu child zakładasz plik functions.php do którego dodajesz kod:

      <?php
      
      add_action( 'after_setup_theme', 'my_child_theme_setup' );
      
      function my_child_theme_setup() {
          load_child_theme_textdomain( 'retro-fitted', get_stylesheet_directory() . '/languages' );
      }
      
      ?>
      

      Powinno działać. U mnie działa, sprawdziłam.

      1. Aga, dzięki za -jak zwykle szybką i konkretną- odpowiedź.

        Co chwila dowiaduję się nowych rzeczy. Na przykład: właśnie poznałem słowo „responsywność” (motywu). I właśnie na skutek responsywności (a konkretniej: jej braku) porzuciłem Retro-fitted. Z pewnym żalem, bo sporo przy nim posiedziałem, ale to doświadczenie na pewno przyda się w przyszłości. Wybrałem sobie teraz Catch Evolution (http://wordpress.org/themes/catch-evolution), który daje sporą swobodę konfiguracji i personalizacji wyglądu. Ma też plik .pot, dzięki któremu w teorii lokalizacja motywu powinna być bułką z masłem. Niestety, tylko w teorii, praktyka nie jest taka prosta.

        Mam trochę wyrzutów sumienia, że swoimi problemami zajmę nieco miejsca, ale to będą pytania raczej ogólne i zapewne odpowiedzi przydadzą się większej liczbie osób czytających tego bloga – więc może niepotrzebnie się kryguję 🙂

        Oto pytania i wątpliwości:

        1. wśród plików motywu znajduje się m. in. „catch-evolution.pot”. Przy pomocy poEdita przetłumaczyłem interesujące mnie wyrażenia na polski, stworzyłem „catch-evolution-pl_PL.po”, wgrałem go (oraz .mo) na serwer do katalogu „child” do takiego samego podkatalogu, jaki jest w oryginale – i nic. To znaczy: „coś”, ale nie wszystko, pewne wyrażenia wciąż mam po angielsku. Co więcej, są wśród nich takie, które już przetłumaczyłem. (Przykład: we frazie „Posted on %4$s by %7$s” przetłumaczyłem „Posted on” i „by”, resztę zostawiłem nietkniętą – i na stronie wciąż widzę „Posted on… by…”.) Wnoszę z tego, że pewne wyrażenia (jak np. właśnie to nieszczęsne „Posted on”) mogą być zawarte w więcej niż jednym pliku php, a dołączony do motywu .pot niekoniecznie musi uwzględniać wszystkie z nich. Czy mój wniosek ma sens?

        2. A zatem: czeka mnie pracowita edycja php. Bardzo pomógłby mi poEdit, gdyby zechciał działać tak, jak napisałaś. Niestety, problemy wspomniane w poprzednim moim wpisie powtórzyły się: dostałem dokładnie ten sam komunikat. U innych osób program działa bez problemu, więc chyba nie on jest winien. Zatem albo mam coś nie tak w systemie, albo może to ja sam emanuję jakąś złą energią… Szkoda, bo wyciąganie ręczne „__” i „_e” z wielu plików jest jednak sporo bardziej pracochłonne.

        3. Po wyedytowaniu pliku php wrzucam go do katalogu „child”. Ale: czy wystarczy mieć jeden wspólny katalog-kołchoz, czy należałoby odtworzyć strukturę oryginału? (Np. w motywie Catch Evolution pliki php znajdują się w katalogu głównym, ale także w podkatalogu „inc”. Retro-fitted miał strukturę katalogów jeszcze bardziej rozbudowaną.)

        4. To, co napisałaś w p. 6 jest straszne, bo oznacza, że pliki .po i .mo mogą nie być wystarczające, że może być jeszcze wymagana edycja php. Co prawda w następnym wpisie dodałaś, że w tym konkretnym przypadku nie ma potrzeby, bo autor motywu to już przewidział, ale co, gdyby NIE przewidział? Skąd nieznający php mają to wiedzieć – jest na to jakaś zasada? Gdzie tego szukać? (W p. 1 zacytowałaś wskazówkę autora zawartą w pliku i18n.php, ale np. w Catch Evolution takiego pliku nie ma…)
        4a. I jeszcze to: plik „functions.php” z p.6 ma wyglądać dokładnie tak, jak napisałaś, prawda? (Tylko dla innych motywów „retro-fitted” trzeba będzie zastąpić nową nazwą.) I nic więcej w tym pliku nie potrzeba? (Czy dobrze pamiętam, że w przypadku php zawartość pliku o jakiejś nazwie w katalogu „child” nie zastępuje, lecz dodaje się do zawartości takiego samego pliku w katalogu głównym?)

        5. Ostatnie: nie mogę poradzić sobie z formularzem kontaktowym (takim jak ten, w którym teraz piszę tę przydługą wypowiedź): nie chcę obligować komentujących do podawania imienia i adresu e-mail (wolę tak, niż dostawać adresy fałszywe) – czy ta „obowiązkowość” jest obsługiwana przez jakąś konkretną funkcję? Jak ją wyłączyć?

        Dzięki, pozdrawiam. (Następnym razem postaram się krócej 🙂

        1. Jaime, wiesz co, ja chyba przygotuję tutorial jak robić tłumaczenie dla child themes.

          Jeśli jest plik pot, to nie ma bata, na pewno nic nie musimy zmieniać w źródłach php. Generalnie taka jest idea plików po. Jeśli motyw jest przygotowany na lokalizację, to nic nie musimy zmieniać w plikach źródłowych. Oczywiście może się tak zdarzyć, że autor coś pominął, ale to rzadkie przypadki.

          W przypadku motywów child musimy jedynie dodać ten krótki kod (jak odpowiedzi wyżej, podmieniając tylko text domain, ewentualnie nazwę katalogu z tłumaczeniem) do pliku functions.php. Moglibyśmy tego nie robić w ogóle i tłumaczenie (pliki po i mo) wrzucić tylko do pliku rodzica, ale wówczas przy aktualizacji motywu to tłumaczenie stracimy.

          1. >Jeśli jest plik pot, to nie ma bata, na pewno nic nie musimy zmieniać
            >w źródłach php. Generalnie taka jest idea plików po. Jeśli motyw jest >przygotowany na lokalizację, to nic nie musimy zmieniać w plikach źródłowych.

            Przyznam Ci się, że gdy poznałem ten system, pomyślałem sobie: jak to jest fajnie wymyślone z tą „nakładką” językową. No ale co z tego, gdy nie zawsze działa 🙁

            >Moglibyśmy tego nie robić w ogóle i tłumaczenie (pliki po i mo) wrzucić >tylko do pliku rodzica, ale wówczas przy aktualizacji motywu to tłumaczenie >stracimy.

            To u mnie też nie działa. W ramach eksperymentu tak właśnie zrobiłem, wgrałem moje .po i .mo do rodzica – i nic, dalej mam „Posted in” i parę innych cudzoziemskości.

            >Jaime, wiesz co, ja chyba przygotuję tutorial jak robić tłumaczenie dla >child themes.

            Doskonały pomysł! Ponieważ będę jednym z pierwszych jego beneficjentów, chciałbym Ci pomóc, podrzucając nieco „tez do referatu”. Jeżeli kilka innych osób zrobi to samo, będziesz miała o połowę mniej roboty.

            1. Czy nazwa nowego (=naszego) pliku .po (i .mo) ma znaczenie? W zip-ie z moim motywem w katalogu /languages jest „catch-evolution.pot”, ale też już gotowy „es_ES.po” – wnoszę z tego, że nazwa nie ma znaczenia (nie mówię oczywiście o rozszerzeniu).

            2. Czy ma znaczenie, gdzie umieścimy nasze .po i .mo? Trzeba się wysilać i tworzyć taką samą strukturę katalogów, jak ma rodzic (u mnie byłby to wspomniany przed chwilą katalog /languages), czy można wrzucić wszystko do katalogu głównego „child” i też zadziała (teoretycznie :-)?

            3a. Piszesz, że modyfikacja pliku functions.php nie zawsze musi być obowiązkowa, ale nigdy nie zaszkodzi. Proponuję, żebyś jeszcze raz podała ten kod, ale wyraźnie zaznaczając, które jego fragmenty należy dostosować do konkretnej sytuacji. Bo to, co napisałaś jest zapewne oczywiste dla znających php, ale dla nieznających jest już sporą zagwozdką. („…jak w odpowiedzi wyżej, podmieniając tylko text domain, ewentualnie nazwę katalogu z tłumaczeniem”. Co to znaczy „podmieniając text domain”? – czy chodzi o to wyrażenie w nawiasie? Ja stworzyłem plik „functons.php” o treści:

            Jak już wiesz, nic się nie wydarzyło…)

            3b. Jak nazwać taki nowy plik? Piszesz, żeby „functions.php”, ale w moim motywie jest jeszcze „catchevolution-functions.php”, a w motywie, który katowałem poprzednio obok „functions.php” był jeszcze „function.php”. To jak: „functions.php” i ani kroku do tyłu?

            3c. Gdzie go umieścić (to powtórzenie pytania 2): może być w katalogu głównym „dziecka”, czy w odpowiednim miejscu odtworzonej struktury rodzica?

            Mam nadzieję, że to, co napisałem, ma sens i że pomoże Ci w pracy 🙂

            Pozdrawiam.

          2. Dziękuję, w takim razie przygotuję tutorial kto po kroku jak to zrobić z uwzględnieniem wszystkich punktów wątpliwych, które podałeś. Dzięki raz jeszcze. Jak mi się uda, tutorial ukaże się w przeciągu paru dni.

    2. A, w sumie nie musisz dodawać do functions.php tego kodu, co podałam w kroku 6, bo akurat autor tego motywu to przewidział i zrobił już odpowiednią obsługę dla motywów potomnych. Ale kod podaję, bo tak się prawidłowo dodaje obsługę text domain dla motywów potomnych. Jak go dodasz, też będzie ok.

      Aga

    3. Hej Jaime,
      przygotowałam obiecany artykuł, nawet na przykładzie motywu, który używasz. Jednak napisałam go na tyle ogólnie, żeby nie zaciemnić tematu dla pozostałych i być może nie wszystkie Twoje wątpliwości on rozwiewa.

      Dlatego robię dopisek:
      – okazało się, że autor Twojego motywu niepoprawnie przygotował nazwy lików po i mo (nie powinny być poprzedzane żadnym przedrostkiem, ta zasada obowiązuje tylko dla pluginów)
      – plik pl_PL.po utwórz sobie robiąc po prostu kopię retro-fitted-en_EN.po a potem skonfiguruj wszystko jak w tym nowym artykule. Tak będzie najszybciej. Na 100% to działa
      – pytaj w razie wątpliwości (możesz pod tamtym artykułem, bo w sumie temat jest bardziej adekwatny)

  40. Cześć, przeczytałem prawie wszystkie komentarze jednak nie znalazłem rozwiązania mojego problemu. utworzyłem plik pl_PL.po kopiując z angielskiej wersji, przetłumaczyłęm kilka zwrotów żeby zobaczyć czy działa, zapisałem, przekopiowałem pliki a serwer i niestety nic.
    Zacząłem sprawdzać czy mam te linijki kodu , których była mowa wyżej – w wp-config mam, w functions.php też mam. Coś w tym drugim wziąłem „require_once($locale_file);” w nawiasy {}, bo gdzieś ktoś podał, że miał w nawiasach. Wtedy wyskoczył błąd: „Warning: Cannot modify header information – headers already sent by (output started at /wp-content/themes/theretailer/functions.php:1) in /wp-content/plugins/woocommerce/classes/class-wc-session-handler.php on line 63”, podczas rozwiązywania tego problemu zauważyłem, że gdy zapisuję functions.php z opcją UTF-8 to pojawia się błąd, ale także tłumaczy mi stronę (chociaż np nie dizała mi rozwijany alert w koszyku sklepowym). Jak zapiszę plik do UTF-8 bez BOM, to błąd znika, ale tłumaczenia także i rozwijany alert znowu działa.

    Co mogę mieć źle? Proszę o pomoc, muszę skończyć projekt strony na pracę dyplomową:)

  41. Cześć,

    przeczytałem wszystko, zrobiłem z en_US plik pl_PL, pzretłumaczyłem kilka słów na próbę, zapisąłem, skopiowałem oba pliki na serwer i nie działa. w wp-config mam odpowiednią linijkę, w functions.php także. Szukając rozwiązania pojawił mi się błąd: Warning: Cannot modify header information – headers already sent by (output started at /strona/wp-content/themes/theretailer/functions.php:1) in /strona/wp-content/plugins/woocommerce/classes/class-wc-session-handler.php on line 63.

    Zauważyłęm, że przy zapisie functions.php w UTF-8 pojawia się ten błąd, przestaje działąć np. rozwijany alert od koszyka, ale o dziwno wyrazy zaczynają się tłumaczyć.
    Przy zapisaniu z UTF-8 bez BOM błąd znika, alerty działają, ale nie tłumaczy już tekstu…
    Gdzie może być problem? Proszę o pomoc, potrzebuję tej stronki do pracy dyplomowej:)

  42. Witam.

    Ciekawy wpis. Ale jak widzę i u Ciebie jeszcze anglojęzyczne wstawki zostały. Mie gryzie najbardziej gdzie siedzi „thoughts on“, które pojawia się na początku komentarzy. Cały serwis praktycznie spolszczyłem, a tego w plikach językowych szablonu nie ma i nijak nie mogę znaleźć rozwiązania. Ktoś zna rozwiązanie tej zagadki?

    Pozdrawiam

  43. Witam.
    Bardzo dobry artykuł. Gratuluję wiedzy i umiejętności 🙂

    A w jaki sposób dowiedzieć się czy możliwe jest przetłumaczenie na PL, jeśli Motyw jest płatny? I – aby móc go „przebadać” pod kątem możliwości spolszczenia – to trzeba go najpierw „w ciemno” zakupić? I ściągnąć na Dysk.

    Co prawda autor/sklep podaje w opisie że Motyw jest: Translation Ready. Ale sporo kosztuje. I raczej nie mając 100% pewności to go raczej nie kupię.

    A może ktoś już ściągnął ten plik i dowiedział się jak jest z możliwością spolszczenia?

    Link do motywu: https://touchsize.com/downloads/photoedge/

    pozdrawiam

  44. Cześć,
    ciekawa strona, ciekawe artykuły, czytuję od kilku lat. Przy okazji jakiegoś problemu wróciłem do tego artykułu i mam pewną uwagę.
    W części 3.2.4 piszesz:

    „Dodajemy (…) dwa napisy: __ (podwójne podkreślenie) oraz _e. W WordPressie w ten sposób oznaczone są wszystkie napisy przygotowane (przez autorów motywu) do translacji (patrz wprowadzenie wyżej).”

    Otóż nie wszystkie. Jest jeszcze wiele innych funkcji (słów kluczowych dla PoEdita) używanych przez WP-devów ( _n _x _n_noop, złożenia itd. itp.) Na marginesie – może za krótko szukałem, ale na polskich stronach o WP nigdzie nie znalazłem informacji , że takie dajmy na to słowo kluczowe _n służące do uwzględniania w tekście wariantów liczby pojedynczej i mnogiej po podaniu w PoEdicie w podstawowej formie _n spowoduje zaczytanie tylko frazy dla liczby pojedynczej, że trzeba podawać słowo kluczowe _n:1,2

    To tylko przykład, którym chciałem pokazać, że może lepiej albo a) wyjaśnić wszystko szczegółowo (znaczenia funcji gettextowych, sposoby szukania w plikach źródłowych fraz niepokazujących się w PoEdicie itp.) – dla bieglejszych albo b) przygotować _pełną_ listę słów kluczowych dla zieleńszych i niech sobie wpisują.

    Wiem, że to poradnik również dla mniej zaawansowanych, ale właśnie dlatego, proszę i przepraszam za bezczelność, nie doradzaj:

    „Jeśli w tej zakładce były już zdefiniowane jakieś inne słowa kluczowe, można je usunąć (ikonka z krzyżykiem).”

    W ten sposób każesz niejako tym ludziom, którzy nie wiedzą, jakie słowa kluczowe są potrzebne, wycinać wiele fraz z PoEdita.

    Serdecznie pozdrawiam
    Michał Maciejewski

    PS. Czy istnieje gdzieś mniej lub bardziej formalne skupisko / forum tłumaczących?

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *

Wyrażam zgodę na przetwarzanie przez Webfaces Agnieszka Bury, ul. Rymarska 42/3, 53-206 Wrocław NIP: 9111769381, REGON: 021997379, moich danych osobowych w celu dodania komentarza na blogu webfaces.pl. (Sorry, takie są wymogi RODO, więcej informacji w Polityce prywatności).