W artykule:
Internacjonalizacja, lub i18n, to proces rozwijania wtyczki lub motywu, dzięki czemu można go łatwo przetłumaczyć na inne języki. A ponieważ WordPress jest używany na całym świecie, ważne jest, aby Twój kod mógł być łatwo przetłumaczony na dowolny język.
To już siódmy post z naszej serii WordPress Development for Intermediate Users. Ta seria jest kontynuacją naszych popularnych samouczków dotyczących tworzenia WordPressa dla początkujących, które wprowadzają cię w podstawy tworzenia stron internetowych za pomocą WordPressa, jak rozpocząć kodowanie za pomocą PHP oraz budowanie motywów i wtyczek.
W tym ostatnim poście w naszej serii Intermediate dowiesz się, jak uzyskać tłumaczenie kodu-gotowe dla użytkowników, lub jak internacjonalizuj to.
Musisz mieć motyw i / lub wtyczki do pracy, jeśli chcesz współpracować – Kontynuuj kod opracowany podczas serii lub pobierz go z plików źródłowych. Będziesz potrzebował kodu z części szóstej, WordPress Development dla użytkowników pośrednich: niestandardowe pola i metadane.
W tym ostatnim samouczku serii zrobisz trzy rzeczy:
- Dowiedz się więcej o internacjonalizacji i czym jest.
- Przygotuj swój kod do tłumaczenia za pomocą niektórych funkcji WordPress.
- Utwórz domenę tekstową, której WordPress używa do tłumaczenia Twojego kodu.
Zacznijmy od przeglądu tłumaczenia i internacjonalizacji.
Przegapiłeś tutorial z naszej serii WordPress Development for Intermediate Users? Tutaj możesz nadrobić wszystkie 7 postów:
- Rozwój WordPress dla średnio zaawansowanych użytkowników: tworzenie motywów w szczegółach
- Rozwój WordPress dla średnio zaawansowanych użytkowników: przygotowanie motywów do dostosowania
- Rozwój WordPress dla średnio zaawansowanych użytkowników: budowanie wtyczek
- Rozwój WordPress dla średnio zaawansowanych użytkowników: niestandardowe typy postów i taksonomie
- Rozwój WordPress dla średnio zaawansowanych użytkowników: zapytania i pętle
- Rozwój WordPress dla średnio zaawansowanych użytkowników: niestandardowe pola i metadane
- Rozwój WordPress dla średnio zaawansowanych użytkowników: Internacjonalizacja
Przegląd internacjonalizacji
Tłumaczenie tekstu na ekranach front-end i admin sprawia, że Twój motyw lub wtyczka są dostępne dla znacznie szerszej publiczności. Według Wikipedii 54% stron internetowych jest w języku angielskim, podczas gdy 26% internautów mówi po angielsku, z chińskim jako bardzo bliskim drugim z 21%. Natomiast tylko 3% stron internetowych jest w Języku Chińskim. Skanowanie poprzednich Wordcampów pokazuje, że programiści WordPress są na całym świecie – na przykład w Europie oraz w Indiach, Nepalu i Japonii.
Podczas gdy wielu nieangielskojęzycznych programistów i użytkowników Internetu jest przyzwyczajonych do kodowania lub czytania w języku angielskim,nie jest to bynajmniej idealne. Jeśli udostępnisz swój kod do tłumaczenia, otwierasz swoje wtyczki i motywy oraz strony internetowe swoich klientów przed ogromną i szybko rosnącą międzynarodową publicznością.
To nie jest nawet tak, jakby tłumaczenie było trudne-po prostu wymaga użycia kilku funkcji, które zapewnia WordPress.
Uwaga: nie Tłumacz kodu – zawsze będzie on w amerykańskim angielskim, ponieważ tak czytają przeglądarki. To, co będziesz tłumaczyć, to tekst, który pojawia się w publicznych witrynach za pomocą motywów i wtyczek oraz na wszystkich ekranach administracyjnych, które tworzysz lub modyfikujesz.
Łatwo jest pomylić dwa terminy używane w tłumaczeniu-lokalizację i i18n – i znajdziesz wiele samouczków i artykułów online, które używają terminologii nieprawidłowo. Te dwa pojęcia można zdefiniować w następujący sposób:
- Internacjonalizacja to proces udostępniania kodu do tłumaczenia za pomocą odpowiednich funkcji WordPress, co jest tym, co będziesz tutaj robił.
- Lokalizacja to proces przeprowadzany przez tłumacza na Twoim kodzie, w celu przetłumaczenia go na język użytkownika. Nie musisz tego robić – Twoi użytkownicy będą, jeśli zajdzie taka potrzeba.
Sprawdźmy, jak internacjonalizujesz swój kod. Jest to czasami określane jako i18n, ponieważ w umiędzynarodowieniu jest 18 liter między “i” A “n”.
Przygotowanie kodu do tłumaczenia składa się z trzech kroków:
- Korzystanie z funkcji WordPress do internacjonalizacji tekstu.
- Ładowanie domeny tekstowej.
- Tworzenie pliku językowego.
Zacznijmy od funkcji.
Funkcje Internacjonalizacji
WordPress wykorzystuje cztery główne funkcje do umiędzynarodowienia tekstu:
__ ('wiadomość')
tłumaczy treść wiadomości, ale nie wyświetla jej ECHA._e( 'wiadomość' )
ECHA treści wiadomości.printf( __( 'message' ) )
jest używany z symbolami zastępczymi (na przykład liczba komentarzy dla postu lub zapytanego obiektu na stronie Archiwum)._n ('wiadomość')
jest używany dla tekstu w liczbie pojedynczej i mnogiej, więc jeśli pokazujesz, ile jest komentarzy, używasz tego do określenia, czy słowo “komentarz” powinno być w liczbie pojedynczej, czy w liczbie mnogiej “komentarze”.
W naszym temacie i wtyczkach mamy tekst, który musi zostać przetłumaczony, a niektóre, które już zrobiliśmy gotowe do tłumaczenia. Popracujmy nad tym i zidentyfikuj i18n już dodany i więcej musimy dodać.
W naszym temacie są już dwa pliki z internacjonalizowanym tekstem:
- customizer.php
- funkcje.php
Istnieje również osiem plików z tekstem, który musi być umiędzynarodowiony:
- pętla.php
- pętla-singel.php
- loop-projekt.php
- archiwum.php
- archiwum-projekt.php
- Taksonomia-serwis.php
- Szukaj.php
- 404.php
Przyjrzyjmy się każdej z nich, skupiając się na różnych funkcjach i18n.
Używanie funkcji _ _ () do tłumaczenia tekstu
Na __()
funkcja tłumaczy tekst, ale nie echo go. Użyj go podczas definiowania ciągu tekstowego do użycia w innym miejscu. W naszym temacie mamy już kilka plików, w których to zrobiliśmy, podczas definiowania tekstu na ekranie administratora.
Spójrzmy na przykład. Na customizer.php mamy ten kod:
To wykorzystuje __()
funkcja do tłumaczenia nazwy sekcji utworzonej w Dostosowywaczu przez tę funkcję. Na __()
funkcja ma dwa parametry: tekst do przetłumaczenia i domenę tekstową. Użyjemy wpmu
jako naszą domenę tekstową we wszystkich naszych plikach i skonfigurujemy tę domenę tekstową po dodaniu wszystkich funkcji.
Po przewinięciu opcji dostosowywania.pliku php zobaczysz, że __()
funkcja jest używana w różnych miejscach.
Następnie spójrzmy na funkcje.php, czyli drugi plik z istniejącym kodem, który został internacjonalizowany.
W kodzie rejestracji widżetów znajdziesz to:
Ponownie używamy __()
funkcja.
Przejdźmy teraz do szablonu archiwum projektu. Otwórz swój archiwum-projekt.php plik i znajdź tę linię:
To zawiera statyczny tekst wewnątrz filtra. Zróbmy tłumaczenie tekstu-gotowy: Edytuj swój kod, aby przeczytać w ten sposób:
Dodaliśmy funkcję i18n wewnątrz apply_filters()
funkcja, jako drugi parametr.
Używanie funkcji printf () z symbolami zastępczymi
Na printf()
funkcja umożliwia umiędzynarodowienie bardziej złożonego tekstu, który zawiera wartość zmiennych, dodaną do tekstu, który ma być przetłumaczony za pomocą symboli zastępczych.
Aby to zrobić, musisz zrobić trzy rzeczy:
- Określ zmienne, które będą używane dla tekstu zastępczego.
- Utwórz
printf()
funkcja z internacjonalizowanym tekstem jako pierwszym parametrem, a zmiennymi jako kolejnymi parametrami. - Użyj odpowiedniej funkcji, aby umiędzynarodowić tekst w pierwszym parametrze funkcji.
- Dodaj symbole zastępcze w tekście, który ma być przetłumaczony, w takiej samej kolejności, jak zmienne dodane jako parametry.
Jest to dość trudne do wyjaśnienia, ale będzie to miało więcej sensu, gdy zobaczysz go w akcji.
Użyjmy printf()
umiędzynarodowienie tekstu na stronie.
Zaczynając od pętla.php, ten kod musi zostać przetłumaczony:
Konkretny bit, który wymaga tłumaczenia, to tytuł
atrybut tego linku. Edytuj swój kod tak, aby wyglądał tak:
Ponownie użyliśmy printf()
funkcja, ponieważ pracujemy z symbolem zastępczym. Przyjrzyjmy się temu bliżej:
- Pierwszy parametr
printf()
funkcja jestesc_attr__()
funkcja tłumacząca tekst. Ma to dwa parametry: tekst (w tym Symbol zastępczy,%s
) oraz domenę tekstową, która jestwpmu
. - Drugim parametrem jest wartość tekstu zastępczego (który jest pobierany za pomocą
the_title_attribute()
). Ma to parametrecho=0
ponieważ nie chcemy tego odbijać, po prostu to weź.
Teraz powtórz zmianę, którą właśnie wprowadziłeś do pętla.php plik do tego samego kodu w loop-projekt.php plik. Ten sam kod znajdziesz również w pętla-singel.php plik. Ponieważ nagłówek w pojedynczym pliku łączy się ze sobą, Usuń łącze w nagłówku z tego pliku. Jeśli utkniesz, spójrz na pliki źródłowe.
Używanie funkcji _e() do ECHA przetłumaczonego tekstu
Twój pętla.php plik jest teraz gotowy do tłumaczenia, więc możesz go zamknąć. Ale pętla-singel.php oraz loop-projekt.php jeszcze trochę kodu do przetłumaczenia.
Open loop-singel.php i znajdź ten kod:
Który wykorzystuje the_terms ()
funkcja, która wyświetla listę terminów dla bieżącego postu. Edytujmy funkcję i dodajmy jakiś przetłumaczony tekst przed nią, zamiast wewnątrz funkcji. Tutaj użyjemy _e ()
, ponieważ chcemy nie tylko pobrać przetłumaczony tekst,ale także go echo.
Edytuj swój tekst tak, aby brzmiał następująco:
Teraz otwórz swój loop-projekt.php plik i dokonać tych samych zmian. Nie będę ci o tym mówić, ale możesz sprawdzić akta serii, jeśli chcesz.
Wreszcie w pętla-singel.php plik, znajdź wejście-meta
div:
Musisz użyć _e ()
funkcja, jak również printf()
funkcja, którą już sprawdziliśmy. Oto jak będzie wyglądał Twój kod, gdy to zrobisz:
Przyjrzyjmy się dokładniej temu, co zrobiliśmy z tym kodem:
- Przenieśliśmy tag warunkowy poza
wejście-meta
div. Ma to na celu uniknięcie wyświetlania na pojedynczych postach, które nie są z post typ postu. - Zdefiniowaliśmy zmienną dla nazwiska autora, linku do archiwum autora i daty. Zauważ, że wszystkie z nich używają funkcji zaczynających się od
Pobierz_
więc niczego nie odbijają, po prostu pobierają to z bazy danych. - Dodaliśmy
printf()
funkcja. Jego pierwszym parametrem jest__()
funkcja tłumaczenia z elementami zastępczymi. Tym razem użyliśmy__()
zamiastesc_attr()
ponieważ chcemy dołączyć html do danych wyjściowych. Trzy końcowe parametry są wartościami tych elementów zastępczych: nasze zmienne. - Pobraliśmy kategorie dla bieżącego postu i przypisaliśmy je do
$ koty
zmienna, następnie sprawdzane czy zmienna posiada jakąkolwiek zawartość (tzn. czy istnieją kategorie. - Użyliśmy
_e ()
aby przetłumaczyć tekst poprzedzający listę kategorii. - Użyliśmy
the_terms ()
w podobny sposób jak w wersji nieprzetłumaczonej, ale usuwający przetłumaczony statyczny tekst. - Powtórzyliśmy kroki 4-6 dla tagów.
To nie spowoduje żadnych zmian w witrynie jeszcze jak nie dodaliśmy plik tłumaczenia, ale może chcesz sprawdzić pojedynczy post tylko, aby upewnić się, że nadal działa na domyślnym języku. Nic nie powinno się zmienić.
Tak więc, to są pliki pętli edytowane w celu włączenia i18n. Otwórz archiwum.php plik następny. Znajdź tę linię:
Funkcja, której musisz użyć, to _e ()
jeszcze raz. Spróbuj dodać funkcję samodzielnie bez wskazówek ode mnie, stosując to, czego nauczyłeś się do tej pory. Jeśli utkniesz, Sprawdź pliki źródłowe (będziesz potrzebował plików do części 7).
Wyzwanie: jeśli przetestujesz szablon archiwum, uzyskując dostęp do szablonu autora, okaże się, że brakuje nazwy autora. Działa to dobrze dla tagów i kategorii archiwów jednak. Spróbuj edytować archiwum.plik php, aby upewnić się, że nazwy autorów są wyświetlane. Alternatywnie Utwórz autora.plik php do wyświetlania archiwów autora. Jeśli utkniesz, spójrz na pliki źródłowe. Podpowiedź: jeśli pracujesz nad Archiwum.php, będziesz potrzebował warunkowego tagu. W obu przypadkach musisz użyć $title - > display_name
, gdzie $title
jest zmienną zdefiniowaną w archiwum.php
na podstawie bieżącego zapytania obiekt. Stworzyłem autora.szablon php, który wyświetla również profil autora oraz link do strony www-znajdziesz go w plikach źródłowych.
Jest jeszcze jeden szablon archiwum, który wymaga trochę internacjonalizacji dodając: nasz Taksonomia-serwis.php plik. Otwórz go i znajdź tę linię:
Będzie to wyglądać znajomo, ponieważ jest podobny do linii, którą edytowaliśmy w archiwum.php plik. Zastosuj to, co tam zrobiłeś, również do tego pliku – jeśli utkniesz, sprawdź kod źródłowy.
Teraz zostaje nasz Szukaj.php oraz 404.php pliki. Oba mają statyczny tekst wewnątrz nagłówków i / lub akapitów. Wykorzystaj to, czego nauczyłeś się do tej pory, aby użyć _e ()
funkcja do tłumaczenia tego tekstu. Jest to dobry sposób na ćwiczenie i powinno być całkiem proste, jeśli śledzisz. Ponownie, jeśli utkniesz, zapoznaj się z plikami źródłowymi tej części serii (część 7).
Uwaga: w 404.php musisz użyć specjalnego znaku dla apostrofu. Znak specjalny HTML dla apostrofu to ‘.
UFF! Teraz nasz temat jest gotowy do tłumaczenia. Twoim następnym zadaniem jest umiędzynarodowienie wtyczek, które stworzyłeś podczas pracy nad tą serią.
Zastosowanie tego, czego się nauczyłeś: Internacjonalizacja wtyczek WordPress
Teraz nauczyłeś się, jak korzystać z funkcji tłumaczeniowych w swoim motywie, zastosujmy to do wtyczek. Niektóre wtyczki, które rozwijaliśmy, gdy pracowaliśmy nad tą serią, również muszą zostać Umiędzynarodowione. Są one następujące:
- Pierwsza wtyczka call to action box, którą zbudowaliśmy patrząc na Hooki. Jest tu statyczny tekst, który musisz umiędzynarodowić za pomocą
_e ()
. - Plugin za pomocą
get_posts()
aby wyświetlić listę postów po treści, którą opracowaliśmy w części serii na niestandardowych zapytaniach. Główna wtyczka ma statyczny tekst w nagłówku i w linku. Użycie_e ()
umiędzynarodowienie obu. - Wtyczka do wyświetlania najnowszego projektu na pasku bocznym-ponownie użyj
_e ()
aby umiędzynarodowić statyczny tekst w nagłówku i linku. - Wtyczka dodająca metabox do ekranu edycji postów – tutaj musisz użyć
__()
do umiędzynarodowienia tytułu metabox, a nie_e ()
jak nie ECHA tekstu, ale definiowanie go. Musisz również użyć_e ()
umiędzynarodowienie tekstu w metabox i w tekście wyjściowym. Nie zapomnij użyć znaku specjalnego zamiast apostrofów. - Wtyczka shortcode. Tutaj musisz użyć
_e ()
aby umiędzynarodowić statyczny tekst w prostym shortcode. Shortcode z atrybutami będzie musiał użyćprintf()
z symbolami zastępczymi. Musisz zdefiniować dwie nowe zmienne – jedną dla numeru telefonu i jedną dla adresu e-mail i użyć tego, czego nauczyłeś się podczas edycji pętla-singel.php plik w Twoim temacie, zastosowany do tej wtyczki. - Wtyczka widżetu zawiera tekst, który musisz internacjonalizować za pomocą
__()
orazprintf()
– użyj zmiennych już zdefiniowanych we wtyczce dla swoich symboli zastępczych.
Możesz zauważyć, że wtyczka do rejestracji niestandardowych typów postów i taksonomii ma już dodaną i18n-oszczędzając Ci pracę!
Nie zamierzam szczegółowo omawiać każdego z nich, ponieważ będziesz musiał użyć technik, które już ci pokazałem w temacie. Spróbuj zastosować to, czego już się nauczyłeś, aby umiędzynarodowić swoje wtyczki – i jak zawsze, jeśli utkniesz, możesz odwołać się do plików źródłowych.
Po dodaniu wszystkich funkcji i18n do motywu i wtyczek możesz przejść do dodawania domeny tekstowej.
Konfigurowanie domeny tekstowej
Teraz wszystkie funkcje i18n są na swoim miejscu. W przyszłości powinieneś zapisywać je w swoim kodzie, gdy go tworzysz, używając metod, których nauczyłeś się tutaj. Z mojego doświadczenia wynika, że jest to o wiele łatwiejsze niż powrót i dodanie tego wszystkiego później.
Ale jeszcze nie skończyłeś. Następnym krokiem jest dodanie domeny tekstowej do motywu i wtyczek. Pamiętaj, że "wpmu"
domena tekstowa dodaliśmy jako drugi parametr do każdej z naszych funkcji i18n? Cóż, WordPress jeszcze nie wie, co z tym zrobić. Jeśli zdefiniujesz domenę tekstową, zostanie ona zdefiniowana.
Uwaga: normalnie zrobiłbyś to dla każdego z motywów i wtyczek przed dodaniem funkcji i18n do następnego, ale biorę je wszystkie w jednej partii, abyś mógł dowiedzieć się o różnych aspektach i18n razem.
Definiowanie domeny tekstowej
Zacznijmy od tematu. Otwórz arkusz stylów motywu i znajdź komentowany tekst na samym początku.
Pod istniejącymi liniami komentowanego tekstu, ale zanim komentarze zostaną zamknięte, dodaj te dwie linie:
Twój skomentowany tekst będzie teraz wyglądał mniej więcej tak:
Teraz otwórz każdą z wtyczek (główny plik wtyczki) i dodaj tę samą domenę tekstową i ścieżkę domeny wewnątrz komentowanego tekstu na górze. Create that / języki katalog dla każdego motywu i wtyczki-być może będziesz musiał zmienić strukturę niektórych wtyczek, jeśli utworzyłeś dla nich pojedynczy plik zamiast folderu. Zapisz wszystkie swoje pliki.
Wczytywanie domeny tekstowej
Ostatnim krokiem w konfigurowaniu domeny tekstowej jest użycie load_plugin_textdomain()
funkcja w motywie i wtyczkach, aby załadować domenę tekstową.
Otwórz swój motyw funkcje.php plik i dodaj tę funkcję:
Zapisz ten plik i powtórz ten sam krok w każdej z wtyczek, ale za pomocą load_plugin_text_domain()
funkcja zamiast load_theme_textdomain()
. Jeśli utkniesz, Sprawdź pliki źródłowe.. Upewnij się, że w każdym przypadku nadajesz funkcji inną nazwę (ale nie samą domenę tekstową, która może być taka sama). Jeśli twoje funkcje mają tę samą nazwę, WordPress wyświetli błąd, gdy natknie się na duplikaty.
Tworzenie Plików Językowych
Twój kod jest teraz gotowy do tłumaczenia, ale trzeba zrobić więcej, aby go przetłumaczyć..
WordPress wykorzystuje trzy rodzaje plików językowych do tłumaczenia:
- A .garnek plik zawiera listę wszystkich komunikatów, które można przetłumaczyć w motywie lub wtyczce
- A .po plik jest tworzony, gdy .garnek plik jest tłumaczony (tzn. gdy ma miejsce lokalizacja)
- A . mo plik jest plikiem binarnym utworzonym z .po plik. Jest to tekst nadający się do odczytu maszynowego i zawiera ciągi i ich tłumaczenia-można powiedzieć, że buforuje tłumaczenia, a więc przyspiesza wszystko, gdy WordPress jest tłumaczony.
Plik, który tworzysz dla swojego motywu lub wtyczki, jest .garnek plik.
Aby utworzyć .garnek pliku, używasz narzędzia takiego jak Poedit. Podczas tworzenia tego pliku musisz podać narzędziu następujące informacje:
- Informacje o projekcie, w tym nazwa, kodowanie znaków i język, w którym pracujesz.
- Ścieżka do folderu, w którym twój .plik pot zostanie przeniesiony (katalog / languages).
- Funkcje WordPress używane do tłumaczenia tekstu (które przepracowaliśmy powyżej).
Po podaniu tych informacji narzędzie przeskanuje pliki źródłowe i zidentyfikuje tekst zidentyfikowany do tłumaczenia za pomocą tych funkcji. Następnie zapisać .garnek plik, który tworzy dla Ciebie w swoim / języki katalogu, nadając mu taką samą nazwę jak domenie tekstowej.
Wersja premium Poedit działa z WordPressem, więc jeśli masz zamiar tłumaczyć dużo kodu, możesz kupić kopię. Ale możesz stworzyć .garnek plik w wersji darmowej. Alternatywnie możesz użyć narzędzi WordPress i18n, aby utworzyć .garnek plik.
Aby uzyskać więcej informacji na temat tych metod, sprawdź te linki:
- Tworzenie .plik pot (i nie tylko w i18n) na naszym blogu
- Narzędzia WordPress i18n
- PoEdit Pro i WordPress
Przydatna może być również strona Kodeksu o i18n.
Tłumaczenie pomaga WordPress motywy i wtyczki dotrzeć do szerszej publiczności
Jeśli tworzysz witrynę dla odbiorców w swoim kraju, Internacjonalizacja może nie być czymś, co musisz zrobić. Ale jeśli budujesz motywy i wtyczki, które planujesz udostępnić innym, za darmo lub za opłatą, musisz przygotować pliki do tłumaczenia.
Jeśli korzystasz z funkcji wyszczególnionych w tej części serii, tekst w Twoich plikach będzie można przetłumaczyć, a Twój kod będzie mógł dotrzeć do znacznie szerszego grona odbiorców.
Dotarliśmy do końca tej serii. Gratulacje! Twoje umiejętności programistyczne WordPress powinny doświadczyć prawdziwego impulsu. Ale najlepszym sposobem na naukę jest wykorzystanie tego, czego się nauczyłeś w działaniu. Upewnij się, że znajdziesz (lub stworzysz) projekty, które pozwolą Ci ćwiczyć nowe umiejętności, zanim będziesz miał czas, aby o nich zapomnieć.
Jeśli planujesz udostępnić swój kod publicznie, musisz go dokładnie przetestować, a także zrobić to, jeśli rozwijasz go dla klientów. Jeśli chcesz dowiedzieć się więcej o testowaniu, zwróć uwagę na naszą nadchodzącą serię na temat zaawansowanego tworzenia WordPressa. W międzyczasie znajdziesz wiele Czy ten samouczek okazał się pomocny? Dlaczego chcesz nauczyć się tworzenia WordPress? O czym chcesz wiedzieć więcej? Daj nam znać w komentarzach poniżej.