Wielojęzyczna strona w Wordpresie

Flags2Sporo osób ma problem z utworzeniem w WP strony w kilku językach. Postanowiłem więc opisać jeden ciekawy sposób, który pozwoli nam łatwo stworzyć taką stronę. Możemy oczywiście zastosować w tym celu pluginy takie jak xLanguage lub qTranslate. Rozwiązanie to ma jednak kilka wad – przeważnie wtyczki te nie działają z innymi pluginami, które modyfikują coś w treści poszczególnych stron. Obsługa ich też nie jest zbyt efektywna. Zamiast tego można zrobić tak:

1. Tworzymy kilka instalacji WordPressa w jednej bazie danych dla poszczególnych języków. Różnią się one tylko i wyłącznie prefiksem. Np. język defaultowy ma prefiks wp_, a np. dodatkowy język powiedzmy niemiecki wpde_. Pliki nie są w żaden sposób duplikowane.

Bazę można sobie skopiować po utworzeniu defaultowej wersji i ustawieniu wszystkiego i zmienić tylko prefiks.

2. Dalej będziemy potrzebowali dodatkowej subdomeny dla drugiego języka w postaci np. de.nazwastrony.pl – musi ona być skierowana na ten sam katalog co domena główna. Teraz dodajemy do pliku config.php taki kod, a w zasadzie zamieniamy linijkę:

$table_prefix  = 'wp_';

na:

$subdomain = substr($_SERVER['HTTP_HOST'], 0, strpos($_SERVER['HTTP_HOST'], '.'));
if ($subdomain == 'de')
{
$table_prefix = 'wpde_';
}
else
{
$table_prefix = 'wp_';
}

Powyższy kod robi jedną prostą operację. Wykrywa czy wejście na stronę nastąpiło z subdomeny – jeśli tak to zmienia prefiks z wp_ na wpde_ dzięki czemu na stronie zacznie się pojawiać treść z bazy w innym języku.

3. Wystarczy jeszcze tylko w kodzie templatki dodać flagi podlinkowane odpowiednio do adresu z subdomeną i bez subdomeny i wszystko działa.

4. Aha, w konfiguracji WP należy jeszcze zmienić w tej dodatkowej wersji językowej adres bloga na adres z prefiksem.

Dzięki takiej operacji mamy  osobny panel dla każdej wersji językowej w zależności z której domeny wejdziemy do wp-admin.  To rozwiązanie ma swoje wady i zalety. Wadą na pewno jest konieczność tworzenia drugiej bazy. Zaleta jest taka, że mamy osobną edycję do każdego języka i nic nam się nie miesza. Możemy także w każdej wersji językowej zmodyfikować szablon, co może przydać się np. do zmiany odnośnika “read more” itp. Dodatkowa wersja językowa może się różnić także kategoriami, stronami itp. – w zależności od tego czy mamy tłumaczenie do danej strony czy nie możemy ją np. całkiem wyłączyć lub zmienić na inną.

Sposób ten zastosowałem na stronie mojej klientki, gdyż żaden plugin stworzony do tego celu nie chciał działać jak należy. Mam nadzieję, że komuś się to przyda. Komentarze jak zwykle mile widziane.



6 komentarzy do “Wielojęzyczna strona w Wordpresie”

  1. Sas says:

    Witam.

    Bardzo ciekawy tutorial, przydany, jednak mam problem z bazami danych.

    Mianowicie nie wszędzie jest możliwość stworzenia dosłownie takich samych baz danych na 1 hoście. Serwery na home.pl same generują nazwe np baza1 i baza2 – gdzie numery generują się automatycznie. W wp-config.php wczytuje tylko 1 baze danych, więc cała zabawa z subdomeną jak i prefixami nie ma żadnego znaczenia, gdyż nie wczyta mi danych z 2 bazy.

    Bardzo bym prosił o pomoc w rozwiązaniu tego problemu.

    Pozdrawiam. Sas

    • Grzegorz Serwin says:

      Cała rzecz w tym, że tworzysz tylko jedną bazę danych i są w niej zawarte tabele dla kilku instalacji. Po prostu instalujesz wordpressa tyle razy ile masz języków tylko przy każdej pojedynczej instalacji za każdym razem podajesz inny prefix. Baza jest ta sama więc host też, w każdym przypadku jest taki sam.

      • Sas says:

        A więc wychodzi na to, że jest błąd w artykule ;) .

        Mimo to, oczywiście spróbowałem zrobić taki manewr, jednak kiedy próbuje wrzucić bazę danych ze zmienionym prefixem do poprzedniej bazy danych, uzyskuje potężny error. Czy trzeba zmienić coś jeszcze oprócz prefixu?

        Pozdrawiam. Sas

        • Grzegorz Serwin says:

          Racja. W artykule był błąd – juz poprawiłem :) A co do twojego problemu to najlepiej załącz komunikat błędu wtedy coś więcej będzie można powiedzieć. Napisz też co dokładnie wpisujesz przy instalacji.

          • Sas says:

            Komunikat brzmi:

            Błąd

            zapytanie SQL:

            – phpMyAdmin SQL Dump
            – version 2.9.2
            http://www.phpmyadmin.net

            – Host: localhost
            – Czas wygenerowania: 10 Cze 2010, 14:12
            – Wersja serwera: 5.0.90
            – Wersja PHP: 5.2.13

            – Baza danych: `server_camvers1`

            – ——————————————————–

            – Struktura tabeli dla `wpen_adrotate`

            CREATE TABLE `wpen_adrotate` (
            `id` mediumint( 8 ) unsigned NOT NULL AUTO_INCREMENT ,
            `title` longtext NOT NULL ,
            `bannercode` longtext NOT NULL ,
            `thetime` int( 15 ) NOT NULL default ’0′,
            `updated` int( 15 ) NOT NULL ,
            `author` varchar( 60 ) NOT NULL default ”,
            `active` varchar( 4 ) NOT NULL default ‘yes’,
            `startshow` int( 15 ) NOT NULL default ’0′,
            `endshow` int( 15 ) NOT NULL default ’0′,
            `group` int( 15 ) NOT NULL default ’1′,
            `image` varchar( 255 ) NOT NULL ,
            `link` longtext NOT NULL ,
            `tracker` varchar( 5 ) NOT NULL default ‘N’,
            `clicks` int( 15 ) NOT NULL default ’0′,
            `maxclicks` int( 15 ) NOT NULL default ’0′,
            `shown` int( 15 ) NOT NULL default ’0′,
            `maxshown` int( 15 ) NOT NULL default ’0′,
            `magic` int( 1 ) NOT NULL default ’0′,
            PRIMARY KEY ( `id` )
            ) ENGINE = MYISAM DEFAULT CHARSET = utf8 AUTO_INCREMENT =6;

            MySQL zwrócił komunikat: Dokumentacja
            #1046 – No database selected

            Więc jest to problem który tyczy wtyczki AdRotate, jednak kompletnie nie rozumiem, dlaczego blokuje on wrzucenie całej bazy danych ze zmienionym prefixem. Przed chwilą usunąłem z bazy danych wiersze z adrotate, mimo to i tak wystąpił ten sam błąd. Jakieś sugestie ;) ?

  2. Sas says:

    Udało mi się zainstalować baze danych, z mojego niedoswiadczenia w tej kwestii nie zaznaczylem bazy danych w phpMyAdmin do ktorej mialyby sie importowac pliki zmienionej bazy.

    Mimo to mam kolejne pytanie. Przed stworzeniem subdomeny zauwazylem ze wpisac przedrostek en.domena.pl pojawila mi sie instalacja wordpressa, jednak kiedy utworzylem subdomene en.domena.pl i przeczekalem okres autoryzacji i jej wdrozenia, pokazuje mi sie strona (to akurat jest zalezne od hosta home.pl) STRONA W BUDOWIE.
    Czy ta subdomena jest potrzebna? Czy wystarczy wpisywac ustawiony w skrypcie prefix (en) przed glowna domena?

Leave a Reply