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.
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):
- dla podwitryny podstawowej (w j.polskim): http://www.dp-kancelaria.pl/blablabla
- dla podwitryny w j. angielskim: http://www.dp-kancelaria.pl/en/blablabla
- dla podwitryny w j. niemieckim: http://www.dp-kancelaria.pl/de/blablabla
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.
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.
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:
- Wersje WordPressa dla Polski: pl.wordpress.org/releases/#older
- Wersje WordPressa dla Niemiec: de.wordpress.org/releases/#older
- Wersje WordPressa dla Francji: fr.wordpress.org/releases/#older
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.
Przyda się 🙂
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ą 🙂
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
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.
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ą.
Właśnie przed chwilą postawiłem WordPress MU zgodnie z instrukcją. Skórka twentyeleven posiada różne wersje językowe, więc tłumaczenie z głowy. http://www.test.voiceforeurope.eu/ Pozostaje zrobienie szablonu multijęzykowego korzystając z wzoru http://www.voiceforeurope.eu/
Szybko poszło! Ciekawie jest zobaczyć interfejs do WP pisany cyrylicą:
http://www.test.voiceforeurope.eu/ru/wp-login.php 🙂
Czasem tylko człowiek robi się przyciężki. Jak niektóre kody stron. 🙂
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 ?
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. 🙂
Słodkości nigdy za wiele, dzięki!
Szukałem o zmianach języków w WP chyba z 3 godziny i u Ciebie znalazłem, dzięki 🙂