Jak przygotować tłumaczenie wtyczki WordPress?

19

Jak najlepiej utworzyć wtyczkę, która jest gotowa do tłumaczenia?

Nie musi być tłumaczony od samego początku, ale musi być łatwy do przetłumaczenia, aby inni programiści z różnych kultur mogli wziąć udział w procesie lokalizacji wtyczki.

Nabil Kadimi
źródło

Odpowiedzi:

38

1. Napisz z myślą o lokalizacji

Nie używaj echolub print()do generowania tekstu, zamiast tego użyj funkcji WordPress __()i _e():

/** Not localization friendly */
echo "Welcome to my plugin";    
// OR
print("Welcome to my plugin");

/** Localization friendly */
_e('Welcome to my plugin', 'my-plugin');
// OR
$my_text = __('Welcome to my plugin', 'my-plugin');
echo $my_text;

_e()i __()zapewni tłumaczenie - w bieżącym języku - tekstu podanego jako pierwszy parametr. _e()wypisze tekst, a __()zwróci go.

Drugi parametr to domena tekstowa , będziesz go używał, aby powiedzieć WordPressowi, że tekst podany jako pierwszy parametr należy do tej wtyczki, możesz użyć dowolnej nazwy, ale wolę używać tej samej nazwy, co nazwa wtyczki plik katalogu, uważam to za bardziej intuicyjne.

Jak wyprowadzić dynamiczny tekst, taki jak: „Witaj <nazwa użytkownika>”?

Z __()i sprintf():

/** Get the username */
$username = 'Magictrick';

/** Not localization friendly */
echo "Hello $username";     

/** Localization friendly */
printf(__('Hello %s', 'my-plugin'), $username);
// OR 
$my_text = sprintf(__('Hello %s', 'my-plugin'), $username);
echo $my_text;

2. Przygotuj pliki .pot / .po / .mo

Definicje

  • Plik .pot : jest do dyspozycji programisty wtyczek i służy jako punkt wyjścia do tworzenia nowych tłumaczeń, WordPress go nie używa.
  • Plik .po : to plik tłumaczeń, który ty lub ktoś inny zapoczątkowałeś i może został ukończony, WordPress go nie używa.
  • Plik A.mo : jest automatycznie tworzony przez Poedit za każdym razem, gdy zapisujesz plik .po, wszystko, co możesz zrobić z tymi plikami, to załadowanie lub ponowne przesłanie ich za każdym razem, gdy tworzysz lub aktualizujesz plik .po. WordPress pobiera tłumaczenia z plików .mo .

Otwórz Poedit i utwórz nowy katalog (Plik ›Nowy katalog ...) z tymi ustawieniami:

  • Informacje o projekcie: użyj informacji (lub swojego zespołu), język i kraj powinny być zgodne z domyślnym językiem wtyczki
  • Ścieżki:
    • Ścieżka podstawowa: .
    • Ścieżki: usuń wszystko i dodaj ..(przechowujemy plik językowy w podkatalogu wtyczki o nazwie języki)
  • Słowa kluczowe: usuń wszystko i dodaj __i_e

Zapisz katalog jako i zeskanuj pliki wtyczek w celu przetłumaczenia tekstu, naciskając przycisk aktualizacji. Po zakończeniu aktualizacji zamknij ten katalog, nie będziesz musiał aktualizować tego pliku, chyba że dodasz nowe przetłumaczalne ciągi (tj. Zawarte w lub ) do swojej wtyczki./my_wordpress_blog/wp-content/plugins/my-plugin/languages/my-plugin.pot__()_e()

Teraz stwórzmy pierwsze tłumaczenie (użyję fr_FR):

Korzystanie Podeit , stworzyć katalog z pliku POT (Plik> Nowy katalog z pliku POT ...) :

  • Informacje o projekcie: Użyj informacji o sobie (lub swoim zespole), zmień język i kraj , użyję francuskiego i francuskiego
  • Ścieżki: nie zmieniaj się
  • Słowa kluczowe: Nie odważ się

Zapisz katalog jako . Przetłumacz niektóre lub wszystkie ciągi, ponownie zapisz plik .po, prześlij pliki .po i .mo./my_wordpress_blog/wp-content/plugins/my-plugin/languages/my-plugin-fr_FR.po

Pamiętaj, że za każdym razem, gdy zapisujesz plik .po, generowany jest plik .mo o tej samej nazwie, nazwa pliku .po ma kluczowe znaczenie , składa się z połączenia domeny tekstowej wtyczki (moja wtyczka) i ustawień regionalnych języka ( fr_FR), zawsze nazywaj swoje pliki .po wtyczek w następujący sposób: [textdomain] - [locale] .po , oto kilka przykładów:

  • Włoski / Włochy: wpcf7-it_IT.po
  • Portugalski / Brazylia: wpcf7-pt_BR.po
  • Arabski: wpcf7-ar.po... Tak!

Ilekroć wtyczka jest aktualizowana o nowy tekst, zaktualizuj plik po, przetłumacz nowe ciągi i ponownie załaduj pliki .po i .mo

3. Poinstruuj wtyczkę, aby załadowała przetłumaczony tekst dla bieżącego języka

Gdzieś we wtyczce musisz powiedzieć WordPressowi, aby używał pliku .mo, możesz to zrobić, używając tego kodu na początku pliku wtyczki:

function my_plugin_init() {
  load_plugin_textdomain( 'my-plugin', false, 'my-plugin/languages' );
}
add_action('init', 'my_plugin_init');

Zastąp my-pluginswoją nazwą wtyczki w 1. i 3. parametrze load_plugin_textdomainfunkcji.

4. Przetestuj i rozwiąż problemy

Niektóre powody, dla których może nie działać:

  • Ciągi nie są importowane do pliku .pot ani .po
    • → Niewłaściwe ustawienia katalogu (ścieżka lub słowa kluczowe lub oba)
  • Tekst nie jest tłumaczony na stronie WordPress
    • → Brak pliku .mo dla tego języka lub ma on niepoprawną nazwę
    • → domeny Tekst nieużywany (wymienić _e('my text')z _e('my text', 'my-plugin'))
    • → Domena tekstowa nie została załadowana (użyj przykładu powyżej z odpowiednimi parametrami, WP nie ostrzega o błędach)
Nabil Kadimi
źródło
3
+1 Miłe napisanie :) Spójrz na ten artykuł: Właściwe ładowanie plików językowych WordPress , „ Praktyczne wskazówki dotyczące usuwania bólu podczas ładowania plików językowych w WordPress ”. :::::: Warto także wspomnieć o Glotpress i grupie Polyglots .
brasofilo
Dziękuję za tę miłą instrukcję! Warto wspomnieć, że load_plugin_textdomain () należy wywoływać w każdej metodzie, w której używasz _e () i __ ()
Andreas
2

Odpowiedź Nabila jest dość kompletna, ale można ją łatwo zmienić:

  1. Twoja wtyczka znajduje się w repozytorium wtyczek WordPress.org

  2. Chcesz, aby Twoja wtyczka działała tylko z WordPress 4.6 lub nowszym.

Kroki są następujące:

  1. W pliku readme.txt wtyczki dodaj Requires at least: 4.6. Zobacz https://developer.wordpress.org/plugins/wordpress-org/how-your-readme-txt-works/

  2. jeśli jeszcze nie jest, prześlij swoją wtyczkę do repozytorium wtyczek WordPress. Zobacz https://wordpress.org/plugins/developers/add/ .

  3. Znajdź domenę ślimaka / tekstu wtyczki. Aby to zrobić, przejdź do strony wtyczki w repozytorium wtyczek WordPress. Adres URL będzie podobny do https://wordpress.org/plugins/your-plugin-slug/ . Ta ostatnia część adresu URL, „twój plugin-ślimak”, to ślimak twojej wtyczki. Tego właśnie używasz w domenie tekstowej funkcji tłumaczących.

  4. Użyj funkcji tłumaczenia WordPress we wtyczce (jak __e(‘hello’, ‘my-plugin-domain’);). Upewnij się, że używasz prawidłowej domeny tekstowej wtyczek, uzyskanej w poprzednim kroku. Zobacz https://developer.wordpress.org/plugins/internationalization/how-to-internationalize-your-plugin/ aby uzyskać więcej informacji.

Jeśli wykonasz powyższe kroki, WordPress zajmie się:

  • Analizowanie wtyczki pod kątem wszystkich możliwych do przetłumaczenia ciągów (nie trzeba instalować i uruchamiać Poedit ani nic takiego)
  • Ułatw każdemu wnoszenie tłumaczeń wtyczki na translate.wordpress.org (nie musisz mieć własnej strony poświęconej tłumaczeniu wtyczki lub mieć niestandardowy proces dla tłumaczy, którzy przesyłają Ci swoje tłumaczenia)
  • kiedy ktoś korzysta z Twojej wtyczki, WordPress zajmie się sprawdzeniem, czy jest ona przetłumaczona na ich język, a jeśli tak, wyświetleniem jej w swoim języku (nie musisz jej ani ciebie, aby załadować pliki tłumaczeń na ich stronę internetową)

(Odpowiedź z mojego posta na blogu tutaj: https://cmljnelson.blog/2019/01/01/the-really-lazy-way-to-translate-a-wordpress-plugin/ )

spacecamel
źródło
Nie jestem pewien, dlaczego zostało to odrzucone. Właśnie to zrobiłem, aby Wordpress.org/plugins/print-my-blog było gotowe do tłumaczenia (a wtyczka została pomyślnie przetłumaczona)
thespacecamel
Czy to oznacza, że ​​jeśli wtyczka / motyw nie znajduje się w repozytorium wtyczek WordPress, ale używa w nim domeny tekstowej wtyczki, Wordpress załaduje niewłaściwe pliki tłumaczeń?
Bodo
Dobre pytanie @ Bodo. Jeśli wtyczka wskazuje użycie domeny tekstowej innej wtyczki, która jest w repozytorium wp.org, myślę, że WordPress chętnie użyje plików tłumaczących wtyczkę wp.org. Ale przepraszam, nie jestem pewien.
thespacecamel