Wpis będzie odpowiedzią do dyskusji, jaka wywiązała się pod artykułem na dev.wpzlecenia dotyczącym prawidłowej odmiany informacji o liczbie komentarzy. Autor artykułu słusznie zwrócił uwagę na potrzebę dbałości o poprawną odmianę słówka „komentarze” na blogu w WordPressie.
Jako rozwiązanie zaprezentował sposób, który sprowadzał sie do wyświetlenia odpowiednio odmienionego tekstu w zależności od liczby komentarzy. Jeden z komentujących zauważył, że zaprezentowany sposób nie obejmuje wszystkich przypadków. Problem jednak jest głębszy. Tworząc motyw, powinniśmy przygotować go tak, aby szybko i poprawnie móc go przetłumaczyć na dowolny język bez ingerencji tłumacza w kod.
Innymi słowy, wszystko to, co wiąże się z lokalizacją powinniśmy wynieść poza kod. Dzięki temu nasz motyw będzie mógł wykorzystać zarówno Polak, jak i przysłowiowy Niemiec i Rusek. Bez względu na to ile form liczby mnogiej występuje w ich ojczystym języku.
Jak poprawnie przygotować motyw WordPressa na obsługę liczby mnogiej – 4 kroki
Można to osiągnąć prosto i bardziej elegancko. Podczas pisania motywu wystarczy pamiętać o wywołaniu odpowiednich funkcji i a potem, przygotowując tłumaczenie, w pliku pl_PL.po podać odpowiednie ustawienia w edytorze translacyjnym, np. w programie poedit. Ale po kolei.
- Krok 1: Przygotowanie motywu
- Krok 2: Przygotowanie kodu obejmującego wszystkie formy liczby mnogiej
- Krok 3: Ustawienia w edytorze poedit
- Krok 4: Przetłumaczenie frazy „komentarze” w 3 różnych formach
Krok 1: Przygotowanie motywu
1. Motyw na poprawną obsługę liczby mnogiej trzeba wcześniej przygotować. Standardowy motyw WordPressa Twenty Eleven jest dobrym przykładem. W pliku comments.pho znajdziemy kod, który napisany jest zgodnie z zasadami sztuki. Niżej prezentuję nieco uproszczony (w dalszym ciągu poprawny) odpowiednik:
<?php printf( _n( 'One Comment', '%1$s Comments', get_comments_number(), 'nazwa_motywu' ), number_format_i18n( get_comments_number() )); ?>
Na uwagę zasługują dwie funkcje:
- get_comments_number – zwraca liczbę komentarzy
- number_format_i18n( get_comments_number() ) – dzięki tej funkcji w połączeniu z liczbą komentarzy motyw automatycznie wyświetli poprawną odmianę dla liczby mnogiej.
Czary mary? Tak, ale dorośli wiedzą, że magikowi trzeba wcześniej pomóc. Więc pomóżmy…
Krok 2: Przygotowanie kodu obejmującego wszystkie formy liczby mnogiej
Jest taka stronka pt. „Translate Toolkit & Pootle”, która pomaga przeprowadzać lokalizację oprogramowania dla różnych języków świata. Znajdziemy tam tabelkę również dla języka polskiego. Kod podany w tabelce jest swego rodzaju gotowcem (do wykorzystania w programach typu gettext), który uwzględnia wszystkie formy liczby mnogiej w danym języku w zależności od liczby, z którą idzie w parze. Kod ten użyjemy w kolejnym kroku.
Krok 3: Ustawienia w edytorze poedit
Krok 3a. Otwieramy plik pl_PL.po w programie poedit (jeśli nie wiesz jak działa program poedit i w jaki sposób należy go skonfigurować, zapoznaj się z artykułem Jak przetłumaczyć skórkę WP). Wchodzimy do Katalog->Ustawienia i wprowadzamy poniższy kod w pierwszej zakładce, w pole „Formy liczby mnogiej”.
nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)
Jeżeli ten kod wygląda dla Ciebie znajomo, to podpowiadam, że mogłeś go zobaczyć w ustawieniach dla plików pl_PL.po/pl_PL.mo motywu Twenty Eleven.
Efekt wykonania tego kroku widzimy na obrazku obok.
Krok 3b. Wchodzimy do zakładki Słowa kluczowe i dodajemy następujące linie:
- _n:1,2
- _n_noop:1,2
- _nx:1,2
- _nx_noop:1,2
Uwaga: każdą z tych linii dodajemy w osobnym wierszu.
Dzięki dodaniu tych linii podczas wykonywania aktualizacji na podstawie źródeł (Katalog -> Aktualizuj na podstawie źródeł) program poedit zaczyta te linie kodu, które dotyczą miejsc w kodzie php, gdzie użyliśmy funkcji _n. Efekt widoczny na ilustacji do kolejnego kroku.
Krok 4: Przetłumaczenie frazy „komentarze” w 3 różnych formach
Pozostaje najprzyjemniejsza i najciekawsza czynność – wprowadzenie polskich odpowiedników. Wykonujemy aktualizację (Katalog -> Aktualizuj ze źródeł) i widzimy ciekawą rzecz. Dla komentarza „One comment” mamy cały zestaw okienek – zobacz rysunek obok. W polach Forma 0, Forma 1, Forma 2 wpisujemy odpowiednio: 1 komentarz, %1$s Komentarze, %1$s Komentarzy.
I gotowe. Podczas zapisu pliku pl_PL.po, zostanie utworzony plik pl_PL.mo. Oba pliki wrzucamy na serwer do katalogu languages i od tej pory fraza „komentarze” będzie wyświetlać się poprawnie bez względu na to czy jest ich 2, 5 czy 141.
Tego właśnie sposobu szukałem. Widziałem go kiedyś w jakimś szablonie, ale nie mogłem go już potem znaleźć. Dziękuję bardzo za wpis 🙂
Cieszę się, że się przydał. Offtopic: Właśnie z Twojego bloga dowiedziałam się o geochaching’u. Może trudno to w uwierzyć, ale do dziś nie miałam pojęcia o istnieniu takiej gry terenowej. Ciekawa sprawa.
Oj tak, zabawa jest przednia i polecam ją każdemu, kto lubi ruch na świeżym powietrzu 🙂
Wypróbuję później sposób na moich blogach, bo szukałem tego rozwiązania już jakiś czas, a ostatecznie pojawiło się przez przypadek w RSS’ach gdzie mam Twojego bloga 😉
Niektóre motywy są tak napisane, że wystarczy zrobić zmiany tylko w plikach po/mo. Ten, którego ja używam na tym blogu już nie, więc póki co jestem dobrym przykładem powiedzenia, szewc bez butów chodzi. Ale udało mi się już zastosować tę metodę w motywach dla klientów, więc szlak przetarty.
Ale w sumie zastosowanie formy „%n odpowiedzi” też jest sprytnym zagraniem… 😀
Sprytne, sprytne. Chociaż ludzie lubią standardową WordPressową nomenklaturę.
Pozamiatane. Świetny artykuł!
Akurat na jednym z podległych mi stron miałem z tym drobne problemy, ręcznie edytując sporo rzeczy. Teraz wszystko zostało ułatwione 🙂
Z moim obserwacji i wymiany doświadczeń z ludźmi wynika, że jak już się zaczęło edytować pliki ręcznie, to ciężko zmienić nawyk i zacząć wspomagać się programami typu poedit. Pocieszające jest to, że jak już się nabierze wprawy, to do edycji ręcznej nigdy się nie wróci, bo to jak przesiadka z malucha na mercedesa.
jest tyle ładnych skórek po polsku, że jeśli komuś wydaje się to trudne, z pewnością znajdzie coś dla siebie… i pod względem funkcjonalności i samej grafiki.
Kasia, a w jaki sposób Ty znajdujesz skórki po polsku?
Mam bardzo podobny problem w swoim sklepie inernetowym, ponieważ korzystam z modułu tłumaczonego, nie potrafi odmienić poprawnie frazy z ilością produktów. Tzn. tłumaczy „2 sztuki, 3 sztuki, 8 sztuki” :/ nie umiem sobie z tym poradzić. Może dzięki Twojemu wpisowi coś wymyślę 🙂
Marcin, na pewno jest to właściwy trop. Zauważ, że kod z kroku 3. jest niczym innym jak algorytmem na osiągnięcie tego efektu zapisanym w bardzo zgrabnej formie.
Jeśli tylko skrypt sklepu który używasz wspiera tłumaczenia przez pliki .po i .mo, to podany tutaj sposób powinien zadziałać bez problemu. 🙂
W ostateczności w różnych sytuacjach można wybrnąć używając myślnika lub dwukropka. Np. 2 sztuki, 8 sztuki zmienić na: 2 – liczba sztuk. Marne, ale przynajmniej gramatyczne. A do tego konkretnego przykładu: można zastąpić sztuki skrótem „szt.” i nie widać końcówki.
Niestety u mnie to nie działa. Używam płatnego szablonu który ma trochę inną strukturę, która wygląda tak: Stosowałem się do wszystkich kroków ale niestety nie pojawia mi się nawet okienka formy.
Łukasz, Twój kod się nie wkleił. Sprobój go umieścić między znacznikami [ php] i [ /php ] (usuń spacje przy nawiasach kwadratowych).
Czy tą metodę można jakoś połączyć z comments_popup_link() ?
Hej Kasia, ja nie próbowałam. Ale wydaje mi się, że tak, spróbuj wywołać funkcję number_format_i18n( get_comments_number() ) w miejscu gdzie comments_popup_link jest przygotowany na więcej niż 1 komentarz (trzeci parametr funkcji, $more)
Więcej:
http://codex.wordpress.org/Function_Reference/comments_popup_link
Oczywiście zachowując pokazaną w artykule konfigurację.
Muszę spróbować, na razie posłużyłam się opisanym tu sposobem.
Wszystko ładnie pięknie, ale jesteśmy kilka wersji do przodu, poza tym nie mam źródeł (a tylko plik .pot) a co za tym idzie, nie wszystko jest tak jak w poradniku, więc niestety z przykrością stwierdzam, że utknąłem 🙁