Jak zrobić wielojęzykową witrynę w WordPressie? Wtyczka Polylang

Wprawdzie z natury nie jestem jakimś specjalnym miłośnikiem stosowania gotowych pluginów, ale jest kilka, po które sięgam gdy tylko są potrzebne. Tym oto wpisem postanowiłem zacząć mini cykl wpisów o wtyczkach, których użycia nie powinien się wstydzić żaden wp-developer.

Co jakiś czas trafiam na pytanie jak zrobić wielojęzykową stronę na WordPressie i najczęściej polecany jest WPML. Od dłuższego czasu jest on płatny, ale osoby które go używają (niestety nigdy nie miałem przyjemności) mówią, że wart jest swej ceny.

A ja odpowiadam: zanim kupicie licencję na WPML, sprawdźcie czy przypadkiem PolyLang nie jest tym, czego potrzebujecie. Wtyczka ta nic nie kosztuje, stosowałem ją już w kilku projektach i jak do tej pory nie znalazłem w niej żadnych ograniczeń.

Przetłumaczyć można właściwie wszystko na taką ilość języków, na jaką się chce. Dla różnych języków można wybrać różne podstrony, różne kategorie wpisów, różne obrazki… Naprawdę nie widzę miejsca, które nie dałoby się zinternacjonalizować.

polylang

Jaka jest filozofia działania tego pluginu? Część wtyczek, aby jakiś wpis (strona etc) miała różną treść w zależności od języka dodaje na stronie edycji wpisu dodatkowe pola na tekst i tytuł w każdym języku – na jednym ekranie edytujemy jeden wpis w każdym języku. PolyLang działa inaczej. Tu tworzymy wpis, tak jak to robimy w zwykłym WordPressie i po zakończeniu jego edycji określamy jaki on ma język. Następnie tworzymy kolejny wpis od początku, oznaczamy go jako wpis w kolejnym języku i przez małe pole przy nim tworzymy powiązanie z wpisem poprzednim, tak aby PolyLang zorientował się, że jest to tłumaczenie na kolejny język wpisu pierwszego:

polylang2I tak dla kolejnych języków.

Ten sposób tłumaczenia uważam za lepszy od edycji wpisu we wszystkich językach na raz. Daje bowiem możliwość zastosowania dla różnych języków nie tylko różnych tytułów i jego treści, ale kompletnie wszystkiego, co z wpisem się wiąże. I tak na przykład polskojęzyczny wpis o tytule „Moje wakacje” może być przypisany do kategorii „Podróże”, a jego tłumaczenie na język angielski będzie związane z kategorią „Travels”. Jeśli polskojęzycznemu wpisowi dodamy custom fields 'dlugosc’ o wartości '2 tygodnie’, ten sam custom field w języku angielskim może mieć wartość '2 weeks’.

Wiązanie między językami dotyczy nie tylko wpisów. Także wszelkie taksonomie, a nawet obrazki w galerii mogą mieć określony język i być powiązane ze swoim odpowiednikiem. I tak na przykład jeśli ktoś odwiedza naszą podstronę example.com/category/podroze grupującą wszystkie wpisy z kategorii 'Podróże’ i kliknie na ikonę zmiany języka na angielski, zostanie przeniesiony na podstronę example.com/category/travels grupującą wszystkie wpisy w kategorii 'Travels’.

polylang3Wykorzystanie wtyczki z punktu widzenia twórców skórek jest banalnie proste, a dzięki rozbudowanej dokumentacji technicznej, zawartej w paczce z wtyczką nie ma żadnych ograniczeń. W podstawowej formie wystarczy skorzystać z gotowego widżeta do przełączania języków. Jeśli komuś to nie wystarczy i chce perfekcyjnie dostosować wygląd „przełącznika” do swojej skórki może skorzystać z temple tag-a, który osadzi w dowolnym miejscu skórki, czy całej masy funkcji dodatkowych. Po szczegóły zapraszam do dokumentacji.

Wiem, że powyższy opis na pewno nie odpowiada na Wasze wszystkie pytania, dlatego zachęcam do zadawania ich w komentarzach pod tym wpisem. Podejrzewam jednak, że jakiego pytania byście nie zadali („Czy PolyLang potrafi…”) odpowiedź będzie twierdząca.

Bo czy PolyLang pozwala na zdefiniowanie różnej nazwy strony w zależności od języka (bloginfo(’name’))? Tak? Różne opisy opisy strony (description)? Oczywiście. Różne menu (wygląd > menu) w zależności od języka? Jak najbardziej. Jak mówiłem póki co nie trafiłem na ograniczenia tej wtyczki i zapewniam, że i wielu z Was taki przypadek długo nie spotka. :)

Uwaga (dodane we wrześniu 2014): bardzo proszę nie wysyłać do mnie prywatnych pytań jak coś zrobić w polylang. Jak zapewne widzicie w mojej stopce do tego wpisu, obecnie pracuję nad konkurencyjną wtyczką, więc takie porady niestety działały by na szkodę mojego pracodawcy ;) Po drugie, wpis który przeczytałeś jest dość stary: przez ostatnie półtora roku wtyczki polylang nie używałem ani razu, jej kod zapewne znacznie się zmienił, więc moja odpowiedź na pytanie jak zrobić coś w polylang brzmi: nie wiem i niestety nie mogę poświęcić czasu na sprawdzenie jak to teraz jest w tej wtyczce.
Jako bottom line: oczywiście obecnie zamiast polylang, polecam WPML ;) Tu akurat z kodem i wszelkimi niuansami jestem na bieżąco.


Opublikowano

w

,

przez

Komentarze

29 odpowiedzi na „Jak zrobić wielojęzykową witrynę w WordPressie? Wtyczka Polylang”

  1. Awatar Aga

    No dobra, to ja od raz z pytaniem (po tak serdecznej zachęcie z Twojej strony):

    Czy wtyczka ta potrafi przetłumaczyć własne teksty użytkownika ustawione w panelu opcji konfiguracji motywu? W motywach płatnych jest często tak, że dużo napisów ustawia się poprzez ekrany parametrów – np. tekst na stronie głównej może brzmieć domyślnie „Ostatnie wpisy”, ale user sam sobie może zmienić na np. „Najnowsze promocje”. Czy ta wtyczka sobie z tym poradzi?

    1. Awatar Konrad Karpieszuk

      odpowiedz brzmi: tak, choc wymaga umiejetnosci w php, a te masz ;) sluzy do tego funkcja pll_register_string (zajrzyj na 15. strone dokumentacji w katalogu wtyczki)

    2. Awatar bastetmilo

      Aga, pozwolę odpowiedzieć na to pytanie, bo akurat kilka tygodni robiłam coś takiego :)

      Owszem pozwala. Należy użyć opcji pll_register_string – opisałam to dokładniej w swoim wpisie o używaniu tej wtyczki: http://brandsites.pl/blog/2012/12/3-funkcje-wtyczki-polylang-o-ktorych-musisz-wiedziec/

      1. Awatar Aga

        Konrad i @bastetmilo – dzięki! Dobrze wiedzieć, że są takie możliwości. Wygląda na to, że ta wtyczka faktycznie dużo potrafi. Choć WPML pozwala akurat to zrobić z panelu użytkownika bez modyfikacji kodów źródłowych.

        Ja dla klientów używam WPML-a, bo licencja pozwala mi na darmową instalację na dowolnej witrynie, którą robię dla klienta, ale klient nie ma już dostępu do supportu. Czyli koszt WPML-a w pewnym sensie jest jednorazowy, no chyba że się chce po roku mieć dostęp do kolejnych upgrade’ów.

        1. Awatar Konrad Karpieszuk

          tu tez bedzie mozna takie ciągi tlumaczyc w panelu uzytkownika :) wystarczy ciag zarejestrowac a pojawi sie on w menu Kokpit > Ustawienia > Jezyki > Tłumaczenie ciągów znaków, jako kolejna pozycja na tej liscie:

          http://i.imagebanana.com/img/r15gz82o/Zaznaczenie_010.png

  2. Awatar Łukasz - Majsterkowo.pl

    PolyLang daje potężne możliwości :) Właśnie od kilku dni siedzę i szykuję się do odpalenia drugiego języka w Majsterkowie :D

  3. Awatar Jakub Milczarek

    Wygląda na to, że obsługuje się to w podobnym sposób jak WPML, a nie to nieszczęsne qTranslate :)
    Mam kilka pytań na początek:
    1) jak działa przełącznik języków – inteligentni przenosi Cię na tłumaczenie wpisu, czy do storny głównej w tym drugim języku?
    2) co się się dzieje jeśli nie ma tłumaczenia?
    3) czy można mieć grafiki bez języka – przypisane do wpisów w dwóch różnych językach?
    4) co z tłumaczeniem fraz osadzonych w szablonie – czy wtyczka ma do tego opcje (jak WPML), czy po prostu trzeba zrobić plik językowy do szablonu?
    5) jak wygląda sprawa struktury slugów?

    Generalnie wtyczka wygląda rzeczywiście według Twojego opisu ciekawe – myślę, że ją przetestuję….

    1. Awatar Konrad Karpieszuk

      1) przenosi na strone tlumaczenia danego wpisu
      2) to mozesz sobie ustawic. mozesz sprawic ze jesli w daym jezyku nie ma tlumaczenia, nie pojawia sie on na liscie dostepnych tlumaczen, lub przenosi na glowna
      3) jesli cie dobrze rozumiem, to chyba mozna miec. to znaczy ja nigdy nie korzystalem z roznicowania jezykow dla grafik (no, prawie nigdy). wystarczy zdefiniowac grafiki dla jezyka glownego. wtedy gdy ktos wyswietla wpis po angielsku, polylang sprawdza czy sa zwiazane z nim grafiki z ustawionym jezykiem en. jesli sa, uzywa je. jesli nie ma, uzywa grafik jezyka glownego. ale moge Cie tu oszukiwac, bo moze nie zrozumialem pytania. w kazdym badz razie ja tworze wpis po polsku, pisze jego tresc, wstawiam obrazki w tresci jesli trzeba. angielski wpis tworze za pomoca wtyczki 'duplicate post’. ta wtyczka od rzu tworzy kopie wpisu wraz z wszystkimi jej przyleglosciami (obrazki, custom fields, kategorie…), ustawiam ze ten nowy wpis to tlumaczenie na angielski i potem zmieniam juz tylko tresc na angielska (no i tytul). na obrazki nie zwracam uwagi czy dostaly okreslony jezyk czy nie. pojawiaja sie jak trzeba
      4) tak jak juz Agnieszce napisalem, jest funkcja do rejestrowania takich fraz. oczywiscie tez wtyczka korzysta z standardowych funkcji _e() oraz __()
      5) pozostaje niestety domyslna. tzn i w pl i w en bedzie to example.com/{nieprzetlumaczalna nazwa taksonomii}/{przetlumaczalna wartosc taksnonomii}

      1. Awatar Jakub Milczarek

        Dziękuję za odpowiedzi!
        1), 2) OK
        3) Nie do końca o to mi chodziło ale już sobie sam wytłumaczyłem :)
        4) Co masz na myśli pisząc „funkcja do rejestrowania takich fraz”?
        5) Ale można jeszcze wyłączyć slug /category/ i posługiwać się kategoriami. Oczywiście jak zrobisz sobie własne taxonomie to pozamiatane…

        1. Awatar Konrad Karpieszuk

          3) jest funkcja, ktora w functions.php trzeba zarejestrowac fraze. jak sie ja zarejestruje, pojawi sie w kokpicie interfejs do jej tlumaczenia. nastepnie w skorce trzeba kolejna funkcja odwolac sie do niej, by wyswietlic (polylang wyswietli wtedy odpowiednie tlumaczenie w skorce).

          oczywiscie z powyzszego nie trzeba korzystac. wystarczy wszystkie frazy wyswietlac przez standardowe _e() i jesli mam wgrane pliki tlumaczen to polylang skorzysta z odpowiednich

  4. Awatar Wojciech

    Moim zdaniem to nie jest fajny mechanizm tłumaczeń.
    Idealny sposób żeby zrobić sobie bajzel. już widzę jak 90% moich klientów linkuje co popadnie z czym popadnie bo im się ID pomyliły.
    BTW ta wtyczka robi nic. To znaczy jak by mi zależało na tym żeby zarządzać wersjami osobno czyli stworzyć de facto oddzielne serwisy to no właśnie zrobił bym oddzielne serwisy.

    Więc lista pytań bo może ja nie zrozumiałem.
    1 Czy jakiś język jest uznawany za podstawowy.
    2 Czy może istnieć tłumaczenie nieistniejącego posta tzn wersja niemiecka bez polskiej
    3 Co się dzieje kiedy usuwam post główny tłumaczenia są czy ich nie ma?

    1. Awatar Konrad Karpieszuk

      Wojciech, w polaczeniu tej wtyczki z wtyczka 'duplicate content’ nigdy ani razu nie musialem wpisywac recznie ID :) klikam 'kopiuj wpis’, zmieniam mu jezyk i wszystko dziala. nie wiem za bardzo jakim cudem, podejrzwam ze autor polylang sam z tej wtyczki korzysta i jakos wsparł ją.
      co wiecej posty ze sobą mozna sprzegac w widoku listy wpisow/stron. sa specjalne ikonki do tego

      odpowiedzi:
      1. tak
      2. tak
      3. tlumaczenia zostaja

    2. Awatar marsjaninzmarsa

      Nie jest? Jest 100 razy lepszy, niż tworzenie innych wersji językowych jako Custom Fields…

  5. Awatar Łukasz - Majsterkowo.pl

    Konrad – a możesz pokazać jakaś stronę, na której wdrażałeś tą wtyczkę? Chciałem sobie popatrzeć na kilka rzeczy, bo nie wiem, czy tylko ja czegoś tu nie rozumiem i źle robię, czy tak ma po prostu być ;)

    1. Awatar marsjaninzmarsa

      Ja wdrażałem na jednej stronie, ale teraz widzę, że klient w ogóle zrezygnował z innych wersji językowych… więc nie pokażę. :(

    2. Awatar Konrad Karpieszuk

      http://purepoland.com/ choc nie do konca ja wdrazalem (zastalem tam polylang gdy przyszedlem do pracy nad ta strona)

  6. Awatar Kasia Tusk

    Dzięki przyda się – planuję także prowadzić swój blog po angielsku i zastanawiałam się jak to zrobić. Mam odpowiedź.

  7. Awatar Robin
    Robin

    Czy istnieje możliwość określenia osobnej domeny (.pl, .ru itd.) dla poszczególnych języków?

    1. Awatar Konrad Karpieszuk

      z tego co widze, to nie

    2. Awatar marsjaninzmarsa

      Do tego lepiej zaprząc WPMU. :)

  8. Awatar Jurand
    Jurand

    Serwus,

    przywitam się jako „świeżak” :)

    Używam nietypowego theme’a. Widget unready, menu ma być domyślnie wyłączone. Poradźcie, jaki kod powinienem wkleić (i gdzie), żeby przełącznik języków Polylang był widoczny gdzieś na stronie, np. w headerze. Próbowałem rozumować zgodnie z dyskusją (* link), ale strona się rozkrzacza po edycji header.php.

    * http://wordpress.org/support/topic/plugin-polylang-language-switcher-in-custom-place-in-template

    1. Awatar Konrad Karpieszuk

      zajrzyj do dokumentacji wtyczki :) nie wiemy jakiego themu uzywasz, z czym masz problem… mysle ze jak ptrzeczytasz, zalapiesz jak to sie robi

  9. Awatar Zed
    Zed

    Witam,
    Wtyczka generalnie daje radę.
    Ale natknąłem się na jeden problem.
    Jeśli nie ma tłumaczenia dla danego postu to po kliknięciu na flagę wyświetla się pusta strona, jak sobie z tym poradzić?
    Jak zrobić tak, jak napisane wyżej, cytuję:

    2) to mozesz sobie ustawic. mozesz sprawic ze jesli w daym jezyku nie ma tlumaczenia, nie pojawia sie on na liscie dostepnych tlumaczen, lub przenosi na główną.

    Pozdrawiam.

    1. Awatar Konrad Karpieszuk

      hmm, ja recznie dodalem template tag do wyswietlania przelacznika jezykow i wtedy jesli nie ma wpisu w danym jezyku, linkuje do strony glownej

  10. Awatar mat
    mat

    no to ja tez mam 2 pytania

    1. Powiedzmy, że mam strony, które w języku polskim i angielskim nazywają się dokładnie tak samo np, „x”.

    ustawiamy sobie by wszystkie ang strony miały w url „en”, ale mimo to jedna strona nazywa się /en/x a druga /x-2.

    Da się coś z tym zrobić?

    2. cześć tekstów jest na sztywno wpisane w pliki .php np. „Archive for the ‘News’ Category” jak zrobić by w polskiej wersji było po polsku w angielskiej po angielsku? To samo tyczy się np. itd.

    1. Awatar marsjaninzmarsa

      1. Niestety nie. Również się z tym męczyłem, na razie jedyną opcją jest nadawanie innych slugów…

      2. To zależy od tego, czy motyw jest przystosowany do tłumaczeń (ma obsługę plików .po i .mo). W ogóle tutaj masz dobry tutorial dotyczący tłumaczenia szablonów WordPressa, sam się z niego uczyłem podstaw. :)
      Kiedy motyw jest przystosowany do wielojęzyczności, WordPress sam załaduje odpowiednią wersję językową szablonu według języka wybranego przez odwiedzającego.

      1. Awatar mat
        mat

        ok, wiedziałem, że to nie będzie takie łatwe.

        mam szablon, który nie jest przygotowany do tłumaczenia. Nie ma plików .mo i .po. Wiem, że mogę sobie szablon przetłumaczyć ręcznie, pytanie tylko jak go przetłumaczyć, ale zachować obie wersje? :)

        1. Awatar marsjaninzmarsa

          Pozamieniaj po prostu wszystkie angielskie napisy w szablonie na wywołania funkcji _e(’angielski napis’, 'nazwaTwojejSkórki’), a dalej postępuj według tutoriala. :)

          1. Awatar mat
            mat

            Tak, też o tym pomyślałem, ale mimo to poedit nie wyłapuje mi tych fraz, wyłapuje jedynie te, które wcześniej były już przez autora oznaczone do tłumaczenia.

            Dodatkowo poedit jakoś mi koślawo działa, bo raz zaktualizuje pakiet a raz nie, najczęściej nie, choć za każdym razem wpisuje te same dane.