Jak przełączać języki WordPressa w witrynach wielojęzycznych

Przełączanie języka WordPressa w witrynach wielojęzycznych

Problem

Przy tradycyjnej instalacji WordPressa (nie dotyczy wordpress.com) chcąc zmienić język WordPressa np. na niemiecki, robimy to umieszczając odpowiednie pliki językowe w wp-content/languages i edytując plik wp-config.php w celu ustawienia zmiennej WPLANG: np. define (’WPLANG’, 'de_DE’);.

Dla witryn wielojęzykowych (uzyskanych w ramach instalacji WordPress Multisite) zmiana zmiennej WPLANG nie zdaje egzaminu. Jak zatem sprawić, aby:

  • podwitryna prezentująca treści w j.polskim, miała ustawiony język polski
  • podwitryna prezentująca treści w j.angielskim, miała ustawiony język angielski
  • podwitryna prezentująca treści w j.niemieckim, miała ustawiony język niemiecki

Cel

Możliwość przełączenie języka WordPressa dla danej witryny językowej (w ramach instalacji WordPress w trybie Multisite).

Kiedy to się może przydać

Załóżmy, że naszą stronę prowadzimy w 3 językach:

  • polski (podstawowy język)
  • angielski
  • niemiecki

Żeby to osiągnąć wykorzystaliśmy tryb Multisite WordPressa, tak jak opisałam w tutorialu Witryna wielojęzyczna w WordPressie bez wczyczek.

Posiadamy również pliki z tłumaczeniem naszej skórki we wszystkich używanych na stronie językach (wp-content/themes/nasza_skorka/languages):

  • en_US.po i en_US.mo
  • de_DE.po i de_DE.mo

Dzięki tym plikom nasza skórka wyświetli w danym języku również frazy typu „Nie znaleziono”, „Opublkowano w”, „Napisz Komentarz” (czyli frazy zaszyte w źródłach php naszego motywu). Więcej o przystosowaniu motywu do danego języka za pomocą plików po i mo ».

Chcielibyśmy, aby WordPress automatycznie wybrał plik z tłumaczeniem dla danej podwitryny językowej podczas jej odwiedzania.

Kancelaria Radców Prawnych Dragun Pietkiewicz
Zobacz przykład

Przykład

Stronę tej Kancelarii Prawnej wykonałam właśnie w ten sposób (na bazie wspomnianego tutoriala) – każda wersja językowa, to odrębna witryna, wszystkie w ramach instalacji jednego bloga.

Wykonajmy szybki test: kiedy w danej podwitrynie językowej wpiszemy adres nie istniejącej podstrony (blablabla w przykładach niżej):

widzimy, że na każdej z tych witryn językowych otrzymujemy komunikat błędu w odpowiednim języku:

  • Nie znaleziono
  • Not found
  • Nichts gefunden

Tak wygląda źródło pliku 404.php, odpowiedzialnego za generowanie tej strony:


<?php get_header(); ?>
<?php get_sidebar(); ?>
  <div id="content">
    <h2><?php _e('Nie znaleziono', 'dp-kancelaria'); ?></h2>
    <p><?php _e('Szukana strona nie istnieje w serwisie dp-kancelaria.pl', 'dp-kancelaria'); ?></p>
 </div> <!-- content -->
<?php include (TEMPLATEPATH . '/right-column.php'); ?>
<?php get_footer(); ?>

Zwróćmy uwagę, że zawiera ono frazy tylko w jednym języku! (tu: języku polskim).

Podstawowe pytanie

Skąd WordPress wie, że będąc na stronie w wersji niemieckiej ma odwołać się do pliku de_DE.mo i wyciągnąć odpowiednie tłumaczenie? Innymi słowy, w którym miejscu mówimy WordPressowi, że dla witryny de ma szukać pliku de_DE.mo? Nazwa witryny (de) nie ma oczywiście nic wspólnego z automatycznym odwołaniem się do pliku de_DE.mo. Nasza niemieckojęzyczna podwitryna równie dobrze mogłaby się nazywać deustch lub niemiecki.

Zmiana języka WordPressa w witrynach wielojęzykowych
Powiększ

Odpowiedź

Język dla danej witryny utworzonej w ramach instalacji MultiSite określamy, wybierając odpowiedni język w panelu administracyjnym tej witryny w Ustawiania->Ogólne, na dole strony zobaczmy listę wybieralną „Język witryny”. Zobacz obrazek obok.

Przykładowa lista plików językowych WordPressa
Powiększ

Uwaga!
W liście rozwijanej zobaczymy tylko te języki, dla których posiadamy pliki językowe WordPressa (po i mo) – zobacz obrazek obok. Jeśli mamy zainstalowanego WordPressa tylko w języku angielskim opcji tej w ogóle nie zobaczymy.

Jeśli mamy zainstalowanego WordPressa w polskiej wersji językowej, na liście rozwijanej zobaczymy język angielski (jako podstawowy język WP użyty w plikach źródłowych – dlatego nie potrzeba dla niego plików po i mo) i język polski. Innymi słowy, lista ta wyświetla te języki, dla których WordPress znajduje odpowiednie pliki mo i po w katalogu wp-content/languages.

Na obrazku wyżej widzimy, że w katalogu wp-content/languages mamy pliki mo i po dla trzech języków:

  • francuskiego
  • niemieckiego
  • polskiego

Dlatego na liście wyboru języków na obrazku wcześniejszym widzimy takie a nie inne języki do wyboru.

Skąd pobrać pliki mo i po dla innych wersji językowych WordPressa.

Jeśli zainstalowaliśmy WordPressa w polskiej wersji językowej, to na dzień dobry zobaczymy na tej liście tylko język polski – podczas instalacji do katalogu wp-content/languages/ trafiły pliki mo i po dla tego języka. Dlatego, żeby zobaczyć (i tym samym móc przełączyć) interfejs witryny w dowolny inny język, należy najpierw umieścić odpowiednie pliki językowe w tym katalogu.

Najlepiej wejść w oficjalną stronę WordPressa dla danego kraju i tam poszukać odpowiedniej wersji WordPressa. Poruszanie się po stronach wordpress.org dla innego kraju nie jest rzeczą trudną, nawet gdy nie znamy docelowego języka. Zauważmy schemat:

Przykład

Pliki dla języka niemieckiego pobrałam wchodząc na de.wordpress.org/releases/#older

Ściągnęłam zip z WordPressem dla interesującej mnie wersji lokalnie na dysk, weszłam do katalogu wp-content/languages i przekopiowałam jego zawartość na mój serwer do katalogu o tej samej nazwie.

Czasami można znaleźć pliki językowe jako osobna paczka (i nie ma potrzeby pobierania całego silnika WordPressa na dysk). Jak komu wygodniej. Ja wybieram powyższy sposób, bo niewiele muszę przy tym myśleć i szybko pobrać pliki ze strony w języku, który jest mi zupełnie obcy.

To już wszystko, dziękuję za uwagę. Zapraszam do zadawania pytań i zapoznania się z innymi moimi artykułami w tym temacie.

Inne wpisy o podobnej tematyce:

14 komentarzy do “Jak przełączać języki WordPressa w witrynach wielojęzycznych”

    1. Na ile się przyda to wyjdzie w praniu – jeśli się skusisz na dostrojenie swojego bloga w tym kierunku, to jak zawsze służę pomocą 🙂

  1. Strona kancelarii się „rozjechała” (wcięło grafikę) i chyba znam rozwiązanie przy pomocy .htaccess

    /_htdocs/wordpress/ // ścieżka do głównej instalacji wordpress
    cyferki 1,2,3,4 oznaczają kolejno główną wersję (pl), a potem kolejno instalowane (en), (de), (fr).

    Zawartość pliku .htaccess :

    RewriteEngine On
    RewriteBase /_htdocs/wordpress/
    RewriteRule ^index.php$ – [L]

    # uploaded files
    RewriteRule ^([_0-9a-zA-Z-]+/)?transportm/files/(.+) wp-content/blogs.dir/1/files/$2 [L]
    RewriteRule ^([_0-9a-zA-Z-]+/)?przeprowadzki/files/(.+) wp-content/blogs.dir/2/files/$2 [L]
    RewriteRule ^([_0-9a-zA-Z-]+/)?autokary/files/(.+) wp-content/blogs.dir/3/files/$2 [L]
    RewriteRule ^([_0-9a-zA-Z-]+/)?pogotowie-transportowe/files/(.+) wp-content/blogs.dir/4/files/$2 [L]

    # add a trailing slash to /wp-admin
    RewriteRule ^([_0-9a-zA-Z-]+/)?wp-admin$ $1wp-admin/ [R=301,L]

    RewriteCond %{REQUEST_FILENAME} -f [OR]
    RewriteCond %{REQUEST_FILENAME} -d
    RewriteRule ^ – [L]
    RewriteRule ^[_0-9a-zA-Z-]+/(wp-(content|admin|includes).*) $1 [L]
    RewriteRule ^[_0-9a-zA-Z-]+/(.*.php)$ $1 [L]
    RewriteRule . index.php [L]

    Options +FollowSymlinks -MultiViews

    1. Bardzo dziękuję za tę informację. Już wszystko działa. Błąd tkwił po stronie hostingodawcy. Ten błąd jest już mi znany. Zwykle w takich przypadkach piszę do supportu z informacją, że httpd.conf Apache’a potrzebuje aktualizacji o opcję AllowOverride FileInfo. I to pomaga. Dzięki raz jeszcze, bo dzięki temu komentarzowi dowiedziałam się o problemie. Okazało się, że były robione zmiany na serwerze w firmie gdzie jest hostowana strona i nagle przestało działać coś, co do tej pory chodziło bez zarzutów.

      1. Zgadza się, przy aktualizacji Apache, nadpisywany jest o ile dobrze pamiętam plik httpd.conf i często zdarza się, że root zapomina zrobić kopię zapasową tego pliku przed aktualizacją.

    1. Witam
      Jak przy tym typie stron wielojęzykowych ustawić aby menu administracyjne zawsze było w języku polskim niezależnie od języka strony ?

  2. Twoje porady i tutoriale dotyczące WP Multisite są bardzo cenne. W powszechnej świadomości wordpress kojarzy się z blogiem, a przecież jest to bardzo dobry CMS i powstaje coraz więcej ciekawych, profesjonalnie wykonanych stron. Twoja strona przyczynia się do popularyzacji tego skryptu również w takich, bardziej zaawansowanych realizacjach. Gratuluję i dziękuję za udostępnione treści.

    Uff, ale posłodziłem. 🙂

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany.