[rozwiązany] Problem liczby mnogiej w tłumaczeniu motywu WordPressa

Jak poprawnie przygotować motyw WordPressa na obsługę liczby mnogiej

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

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

Lista kodów dla Gettext PO wg Translate Toolkit & Pootle
Lista kodów dla Gettext PO wg Translate Toolkit & Pootle

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.

Ustawienia liczby mnogiej w programie poedit
Ustawienia liczby mnogiej w programie poedit

Efekt wykonania tego kroku widzimy na obrazku obok.

Ustawienia słów kluczowych w programie poedit
Ustawienia słów kluczowych w programie poedit

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

Fraza One Comment, Comments w poedit
Fraza One Comment, Comments w poedit

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.

Wpisy o podobnej tematyce

23 komentarze do “[rozwiązany] Problem liczby mnogiej w tłumaczeniu motywu WordPressa”

  1. 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 🙂

    1. 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.

  2. 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 😉

    1. 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.

    1. 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.

  3. 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.

  4. 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ę 🙂

    1. 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.

    2. 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.

  5. 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.

    1. Łukasz, Twój kod się nie wkleił. Sprobój go umieścić między znacznikami [ php] i [ /php ] (usuń spacje przy nawiasach kwadratowych).

  6. 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 🙁

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *