Jak umiędzynarodowić swoją witrynę WordPress?

Opublikowany: 2022-03-10
Szybkie podsumowanie ↬ WordPress jest obecnie w pełni zlokalizowany na ponad 65 języków i oferuje częściowe tłumaczenia dla dodatkowych 95 języków. Jeśli jeszcze nie zinternacjonalizowałeś swojej witryny WordPress, prawdopodobnie nadszedł czas, aby to zrobić.

30 września 2017 roku międzynarodowa społeczność WordPressa zjednoczyła się na 24 godziny, aby przetłumaczyć ekosystem WordPressa. Po raz trzeci #WPTranslationDay połączył całodniowy maraton tłumaczeń z wydarzeniami cyfrowymi i dniami współtwórców, zaprojektowanymi w celu promowania wartości tworzenia dostępnych doświadczeń dla globalnych użytkowników, lepiej znanych jako „lokalizacja”.

Jako społeczność open source, wszyscy powinniśmy dążyć do zlokalizowania naszego wkładu open source. Zanim jednak będziesz mógł dokonać transkrypcji swoich zasobów cyfrowych, musisz umiędzynarodowić swoją bazę kodu.

Terminy „internacjonalizacja” i „lokalizacja” są często używane zamiennie, chociaż technicznie reprezentują dwa różne aspekty procesu tłumaczenia.

  • Internacjonalizacja (I18N) to proces umiędzynarodowienia lub dostosowania motywu lub wtyczki w celu przetłumaczenia go na dowolny język na świecie.
  • Lokalizacja (L10N) to kolejny proces lokalizacji lub tłumaczenia Twoich zinternacjonalizowanych narzędzi na dany język.

WordPress jest obecnie w pełni zlokalizowany na ponad 65 języków i oferuje częściowe tłumaczenia dla dodatkowych 95 języków. Wykorzystanie międzynarodowe stale rośnie wraz z wprowadzaniem większej liczby lokalizacji.

Statystyki z WordPress.org
Statystyki z WordPress.org (duży podgląd)
Więcej po skoku! Kontynuuj czytanie poniżej ↓

Nieanglojęzyczni użytkownicy WordPressa przewyższyli użytkowników anglojęzycznych w 2014 r. i nieumyślnie nadal zmniejszają procent tortu anglojęzycznych użytkowników w 2017 r., Gdy wysiłki takie jak #WPTranslateDay rosną.

Ponieważ WordPress staje się coraz bardziej dostępny pod względem językowym, znajomość I18N i L10N jest niezbędna, aby twórcy wtyczek i motywów mogli rozwijać się w globalnej gospodarce WordPress. W przypadku przedsiębiorstw skalujących te umiejętności rozwoju mogą otworzyć drzwi na rynki zagraniczne. Dostępność sieci, w tym dostępność językowa, jest dobra dla biznesu i lepsza dla ludzi.

W ramach kontynuacji #WPTranslationDay , oto zaktualizowany przewodnik po internacjonalizacji wtyczek i motywów WordPress.

Oto krótki przegląd procesu, który będziemy dzisiaj badać.

  • Odkrycie
    • Poznaj pliki tłumaczeń
      • Plik POT
      • Plik PO
      • Plik MO
    • GlotPress i pakiety językowe
    • Utwórz kopię zapasową i przygotuj swoje środowisko
  • Wtyczka I18N
    • Nagłówek wtyczki
    • Załaduj domenę tekstową
    • Audyt ciągów
    • Wygeneruj plik POT
  • Motyw I18N
    • Nagłówek motywu
    • Załaduj domenę tekstową
    • Audyt ciągów
    • Wygeneruj plik POT
  • JavaScript I18N
  • Dodatkowe zasoby

Odkrycie

Poznaj pliki tłumaczeń

WordPress używa biblioteki GNU gettext, aby ułatwić I18N.

Najpierw zapoznajmy się z plikami tłumaczeń gettext generowanymi podczas całego procesu.

Plik szablonu obiektu przenośnego (POT)

Podczas procesu I18N użyjemy narzędzia do znalezienia zinternacjonalizowanych ciągów i wygenerowania pliku POT zawierającego cały możliwy do przetłumaczenia tekst w twoich wtyczkach i motywie.

Przenośny plik obiektowy (PO)

Z wyglądu nie ma znaczących różnic między plikiem POT a plikiem PO . Są syntaktycznie takie same i różnią się tylko ich przeznaczeniem.

Po wygenerowaniu pliku POT ciągi tekstowe powinny zostać zinterpretowane przez tłumacza na preferowany język. Plik PO będzie ostatecznie zawierał ciągi tekstowe w Twoim ojczystym języku, a także odpowiednie tłumaczenia.

Plik obiektu maszyny (MO)

Na koniec plik PO jest konwertowany na dokument do odczytu maszynowego lub plik obiektu maszyny. Ten plik będzie dostępny w katalogu motywu lub wtyczek, aby WordPress mógł się do niego odwoływać, gdy nadejdzie czas udostępnienia przetłumaczonej wersji.

Utwórz kopię zapasową i przygotuj swoje środowisko

Przed modyfikacją jakichkolwiek znaczników, wykonaj kopię zapasową wtyczki, motywu lub całej witryny (niezależnie od tego, co internacjonalizujesz!) i uporządkuj swoje środowiska programistyczne.

Pamiętaj, aby przeprowadzić szybki audyt wtyczek, jeśli planujesz zlokalizować swoją witrynę. Usuń lub dezaktywuj wszelkie wtyczki, których już nie używasz. Ten szybki audyt pozwoli Ci zaoszczędzić czas na dłuższą metę.

Internacjonalizuj swoje wtyczki

NAGŁÓWEK WTYCZKI

Najpierw zaktualizujemy nagłówek wtyczki. W szczególności domena tekstowa i ścieżka domeny .

Przykładowy nagłówek wtyczki

 /* Plugin Name: My Rad Plugin Plugin URI: https://myradplugin.com Description: Custom Plugin That Makes My Site Rad Author: Rad Plugin Creator Version: 1.0 Author URI: https://radplugincreator.com Text Domain: rad-plugin Domain Path: /languages/ */

Domena tekstowa

Domena tekstowa jest unikalnym identyfikatorem umożliwiającym WordPressowi rozpoznawanie całego tekstu należącego do wtyczki i musi odpowiadać slugowi wtyczki .

Jest to szczególnie ważne, jeśli Twoja wtyczka jest hostowana na WordPress.org; muszą one być zgodne, aby GlotPress poprawnie importował tłumaczenia dla Twojej wtyczki.

W naszym przykładzie plik wtyczki nazywa się rad-plugin.php , a domena tekstowa to rad-plugin

Być może masz już ustawioną domenę tekstową. Jeśli nie, pamiętaj o używaniu myślników, a nie podkreśleń.

Ścieżka domeny

Ścieżka domeny to folder, w którym będą znajdować się sfinalizowane pliki tłumaczeń. Powinieneś utworzyć nowy folder w katalogu wtyczek, taki jak /języki/ i zaktualizować ścieżkę domeny, aby WordPress wiedział dokładnie, gdzie szukać plików tłumaczeń.

WCZYTAJ DOMENĘ TEKSTOWĄ

Następnie przejdziemy do załadowania domeny tekstowej, dodając następującą funkcję do naszego kodu.

load_plugin_textdomain()

 load_plugin_textdomain( $domain, $abs_rel_path, $plugin_rel_path );

Jeśli plik tłumaczenia jest dostępny dla języka użytkownika, funkcja ładowania domeny tekstowej poinformuje WordPress, aby go dostarczył.

Parametry

  • $domain — domena tekstowa (wymagane)
  • $abs_rel_path — false (opcjonalne, przestarzałe)
  • $plugin_rel_path — /languages/ (opcjonalnie, jest to ścieżka względna do katalogu zawierającego pliki tłumaczeń. W naszym przykładzie /languages/. Od wersji 4.6 WordPress będzie wyszukiwał te pliki w katalogu /languages/ wtyczki, jeśli jest nieokreślony.)

Przykład wtyczki Rad

Aby załadować domenę tekstową, podłączymy się do akcji „plugins_loaded”.

 add_action( 'plugins_loaded', 'rad_plugin_load_text_domain' ); function rad_plugin_load_text_domain() { load_plugin_textdomain( 'rad-plugin', false, dirname( plugin_basename( __FILE__ ) ) . '/languages/' ); }

AUDYT STRUN

Następnym krokiem jest zawinięcie wszystkich ciągów tekstowych wtyczki w funkcjach tłumaczenia.

Najpopularniejszymi funkcjami tłumaczącymi są __() do zwracania przetłumaczonego ciągu i _e() do powtarzania przetłumaczonego ciągu.

Przykład wtyczki Rad

 __() $text = __( 'Super Rad!', 'rad-plugin' );

Ta funkcja zadziała w przypadku prostych tłumaczeń. Uwzględnia dwa parametry; ciąg tekstowy i domenę tekstową .

 _e( 'Super Rad!', 'rad-plugin' );

Ta funkcja po prostu powtarza wartość. W przeciwnym razie działa dokładnie tak, jak poprzednia funkcja.

Istnieje mnóstwo dodatkowych funkcji tłumaczeniowych, które również powinny być używane w stosownych przypadkach.

Inne podstawowe funkcje

 __() _e() _x() _ex() _n() _nx() _n_noop() _nx_noop() translate_nooped_plural()

Funkcje daty i liczby

 number_format_i18n() date_i18n()

Funkcje ucieczki

Nie zapomnij o zmianie znaczenia wszystkich danych, które są wyprowadzane, za pomocą następujących funkcji ucieczki.

 esc_html__() esc_html__() esc_html_x() esc_attr__() esc_attr_e() esc_attr_x()

W naszym przykładzie Rad możemy mieć wiersz kodu wtyczki, który wygląda tak:

 function create_section() { esc_html_e( 'Below are your settings for Rad Plugin', 'rad-plugin' ); }

UTWÓRZ PLIK POT

Ostatnim krokiem jest utworzenie pliku POT. Dostępnych jest kilka różnych narzędzi do generowania tego typu plików, ale w tym samouczku będziemy trzymać się zaleceń z kodeksu WordPress i użyjemy Poedit, łatwego w użyciu GUI do zarządzania tłumaczeniami.

Uwaga : jeśli twoja wtyczka lub motyw znajduje się już w repozytorium WordPress.org, możesz pominąć ten proces i wygenerować plik POT ze strony administratora. W takim przypadku nie jest konieczne generowanie pliku .po dla każdego języka. Wprowadzenie GlotPress i pakietów językowych w 2015 roku uprościło proces tłumaczenia; wszystko, co jest potrzebne do GlotPress, to plik .pot, który zostanie zaimportowany przez WordPress.org i udostępniony tłumaczom za pośrednictwem pulpitu nawigacyjnego translate.wordpress.org. Współpracownicy z całego świata będą korzystać z tego pulpitu nawigacyjnego, aby dostarczać tłumaczenia na #WPTranslateDay.

Pobierz Poedit

Konfiguracja Poedit

Właściwości tłumaczenia

Zacznij od przejścia do Plik > Nowy . Następnie wybierz język ojczysty swojej wtyczki i naciśnij OK .

Duży podgląd

Następnie wybierz Katalog > Nowy . Wpisz nazwę projektu, wersję, kontakt i język.

Duży podgląd

Ścieżki

Następnie wybierz kartę Ścieżki źródeł . Jeśli jest to nowy plik, najpierw musisz go zapisać.

Idąc za naszym przykładem, wybierzemy Plik > Zapisz jako , aby zapisać jako plik .po w katalogu /languages/ wewnątrz rad-plugin. Ponownie, nazwa pliku powinna odpowiadać slugowi wtyczki.

 rad-plugin.po

Po zapisaniu wprowadź względną ścieżkę do katalogu, w którym będą znajdować się Twoje pliki tłumaczeń. W tym scenariuszu języki .

Duży podgląd

Słowa kluczowe

Wybierz kartę Źródła Słowa kluczowe . Kliknij ikonę +, aby dodać odpowiednie nazwy funkcji.

Duży podgląd

Ściągawka

 __ _e _x _ex _n _nx _n_noop _nx_noop translate_nooped_plural number_format_i18n date_i18n esc_html__ esc_html__ esc_html_x esc_attr__ esc_attr_e esc_attr_x

Następnie możesz kliknąć OK, a następnie Plik > Zapisz .

Poedit zapisze zarówno plik .mo, jak i .po. Możesz utworzyć plik .pot, kopiując plik .po i dodając rozszerzenie .pot. Użytkownicy międzynarodowi mogą użyć pliku szablonu .pot, aby przetłumaczyć ciągi na swój język.

Internacjonalizuj swój motyw

Proces internacjonalizacji twojego motywu jest praktycznie identyczny z I18N dla wtyczek. Zaczniemy od sprawdzenia nagłówka motywu, a zakończymy wygenerowaniem kolejnego pliku POT.

NAGŁÓWEK TEMATU

Dokładnie sprawdź nagłówek motywu, aby upewnić się, że ustawiono domenę tekstową i ścieżkę domeny.

Przykładowy nagłówek motywu

 /* Theme Name: Rad Theme Author: Rad Theme Author Text Domain: rad-theme Domain Path: /languages/ */

WCZYTAJ DOMENĘ TEKSTOWĄ

Następnym krokiem jest tym razem załadowanie domeny tekstowej do pliku functions.php motywu.

load_theme_textdomain()

 load_theme_textdomain( 'radtheme', get_template_directory() . '/languages' );

Aby te pliki zostały załadowane, musisz je zarejestrować za pomocą akcji after_setup_theme.

 add_action( 'after_setup_theme', 'rad_theme_setup' ); function rad_theme_setup() { load_theme_textdomain( 'radtheme', get_template_directory() . '/languages' ); }

AUDYT STRUN

Czas na kolejny audyt strun! W tym momencie powinieneś zapoznać się z podstawowymi funkcjami tłumaczenia.

Rzućmy okiem na trudniejsze tłumaczenia.

Symbole zastępcze

Zmienne PHP, takie jak poniższy przykład, nie będą poprawnie tłumaczone bez użycia symboli zastępczych.

 echo "We added $count rad points.";

printf() i sprintf()

Te funkcje używają symboli zastępczych, takich jak %s lub %d dla liczb całkowitych, do interpolacji ciągu tekstu z dynamiczną zawartością.

Przykład motywu Rad

 /* Translators: %d is the number of rad points added */ printf( esc_html__( 'We added %d rad points.', 'rad-plugin' ), $count );

Liczba mnoga

Funkcja _n() może obsługiwać bardziej złożone tłumaczenia ciągów, takie jak liczba mnoga, ale nie jest zalecana ze względu na jej ograniczenia w oprogramowaniu do tłumaczenia. Zamiast tego możesz napisać proste stwierdzenie „jeśli ”, aby odróżnić słowa w liczbie pojedynczej od mnogiej.

Przykład wtyczki Rad

 If ( 1 === $rad_points_found ) { $message = __( '1 rad point', 'rad-plugin' ); } else { /* Translators: %s is the number of rad points found */ $message = sprintf( __( '%s rad points' , 'rad-plugin' ) , $rad_points_found ); }

GENERUJ PLIK POT

Proces generowania plików POT motywu jest taki sam, jak generowanie plików POT wtyczek. Zapoznaj się z kilkoma metodami poniżej.

Wiersz poleceń

Po zainstalowaniu WordPress Trunk i pakietu gettext GNU możesz przejść przez ten krok, uruchamiając skrypt makepot.php w wierszu poleceń.

Otwórz wiersz poleceń i przejdź do katalogu narzędzi I18N.

 cd wpdev/tools/i18n/

Skrypt powinien wyglądać mniej więcej tak:

 php path/to/makepot.php wp-theme path/to/rad-theme rad-theme.pot

Skrypt zrobi swoje i gotowy plik rad-theme.pot wyląduje w bieżącym katalogu.

Trudne zadania

Inną metodą tworzenia pliku POT jest uruchamianie zadań Grunt przy użyciu grunt-wp-i18n lub grunt-pot. Programy do uruchamiania zadań, takie jak Grunt, mogą zautomatyzować wiele żmudnych zadań, takich jak generowanie plików POT.

Aby utworzyć plik POT, najpierw upewnij się, że masz zainstalowany node.js. Następnie zainstaluj Grunta w swoim katalogu językowym za pomocą wiersza poleceń i gotowe. Teraz możesz szybko uruchomić te polecenia I18N i utworzyć plik tłumaczenia bez wychodzenia z wiersza poleceń.

JavaScript I18N

Jeśli jesteś twórcą nowoczesnych motywów lub wtyczek, prawdopodobnie używasz JavaScript do obsługi jakiegoś komponentu swojego projektu. wp_localize_script to efektywna funkcja do wyodrębniania danych PHP w celu dostarczenia ich do skryptów i jest to jedyny sposób na przetłumaczenie JavaScriptu w WordPressie.

WP_LOCALIZE_SCRIPT()

Ta funkcja pozwoli nam zlokalizować ciągi po stronie serwera w PHP i dostarczyć ciągi tekstowe jako obiekt JavaScript do skryptu.

 wp_localize_script( $handle, $name, $data );

PARAMETRY

  • $handle — uchwyt skryptu, dla którego dane mają być dostępne (wymagane — musi pasować do uchwytu skryptu, dla którego są dane, patrz przykład poniżej)
  • $name — nazwa obiektu, który ma zawierać dane (wymagane — powinna być unikalna)
  • $data — tablica danych do przekazania do skryptu (wymagane) .

PRZYKŁAD WTYCZKI RAD

 add_action( 'wp_enqueue_scripts', 'rad_theme_scripts' ); function rad_theme_scripts() { wp_enqueue_script( 'rad-theme-script', get_template_directory_url() . '/js/rad-theme-script.js' ); wp_localize_script( 'rad-theme-script', 'rad-I18n', array( 'message' => __( 'Super Rad!', 'rad-theme' ), ) ); }

DOSTĘP DO DANYCH W JAVASCRIPT

Poniższy prosty fragment kodu to przykład, jak uzyskać dostęp do tych danych w pliku JavaScript.

 alert( rad-I18n.message );

Dodatkowe zasoby

  • I18N dla programistów WordPress
  • Podręcznik motywu WordPress: internacjonalizacja
  • Podręcznik wtyczki WordPress: internacjonalizacja
  • WordPress.tv: I18N

Zawijanie tego

Gratulacje! Właśnie zinternacjonalizowałeś swój motyw i/lub wtyczkę, dzięki czemu jest dostępny dla osób we wszystkich językach ojczystych. Niezależnie od tego, czy Twój projekt jest dystrybuowany za pośrednictwem repozytorium WordPressa, czy też jest specjalnie opracowany dla witryny internetowej Twojej organizacji, internacjonalizacja plików ma tylko pozytywne strony.

  • Zapewnij globalny dostęp do wkładów open-source.
  • Twórz rozmowy z nowymi klientami na rynkach zagranicznych.
  • Oszczędź czas i ogranicz czasochłonne aktualizacje w przyszłości.

Zawsze internacjonalizuj.