Do tej pory zajmowałem się niektórymi tłumaczeniami w Wordpress i próbowałem przeczytać oficjalną dokumentację gettext, ale nie mogę zrozumieć jednej prostej rzeczy: jakie są różnice między tymi początkami jak __ (, _e (itp.)? A nawet więcej: obok których są inni? Z góry dzięki!
Szczery
localization
Circuit Circus
źródło
źródło
Odpowiedzi:
__
(podwójny znak podkreślenia) to podstawowa funkcja tłumaczenia. Tłumaczy ciąg znaków i zwraca go jako ciąg znaków._e
robi to samo co__
, ale echo jest wynikiem natychmiast._x
jest funkcją tłumaczenia kontekstowego. Ma drugą opcję zapewnienia kontekstu osobom wykonującym tłumaczenie._ex
jest taki sam jak_x
, ale echo jest wynikiem.Przykład użycia
_x
:Czasami ten sam ciąg znaków może być inny w innych językach. Zapewnienie tłumaczom kontekstu może pomóc im wybrać właściwe słowa.
Funkcje skrótów:
esc_attr__
: Odpowiednik wyniku,__
ale także wynikesc_attr
.esc_html__
: Odpowiednik wyniku,__
ale także wynikesc_html
.esc_attr_e
: Odpowiednik wyniku,_e
ale także wynikesc_attr
.esc_html_e
: Odpowiednik wyniku,_e
ale także wynikesc_html
.esc_attr_x
: Odpowiednik wyniku,_x
ale także wynikesc_attr
.esc_html_x
: Odpowiednik wyniku,_x
ale także wynikesc_html
._n
jest operatorem pluralizacji. Przykład:W tym przykładzie istnieją dwa sposoby określenia liczby tacos, w zależności od tego, czy jest to liczba pojedyncza, czy nie. Pierwsze użycie $ number informuje
_n
funkcję, której wersji użyć. Drugie użycie $ number ma miejsce w sprintf, w celu zastąpienia% d rzeczywistą liczbą w ciągu.Nie istnieje odpowiednik funkcji echa
_n
, ale istnieje funkcja o nazwie_nx
. To połączenie_n
i_x
. Pluralizacja i kontekst._n_noop
jest wyjątkowy. Służy do tłumaczenia ciągów pluralizowanych, ale nie wykonuje tłumaczenia natychmiast. Jest to przydatne, jeśli chcesz, aby łańcuchy były scentralizowane, ale faktycznie działały gdzie indziej. Funkcja, która faktycznie wykonuje pracę gdzie indziej, totranslate_nooped_plural
.Przykład:
Nie jest to często używane, ale może być przydatne w organizacji. Jeśli na przykład umieścisz wszystkie swoje ciągi w jednym pliku, a następnie odniesiesz je gdzie indziej, nie byłoby to możliwe tylko dlatego
_n
, że potrzebujesz czegoś takiego_n_noop
._nx_noop
jest taki sam jak_n_noop
, ale może również wziąć kontekst dla tłumaczy, tak samo jak_x
.Pamiętaj, że możesz umieścić domenę w wywołaniu funkcji noop lub w wywołaniu funkcji translate_nooped_plural. W zależności od tego, co jest bardziej sensowne dla Twojej organizacji. Jeśli oba mają domenę, wygrywa ta przekazana do połączenia noop.
number_format_i18n
jest równoważne wbudowanemu numerowi_formatowi PHP , ale dodaje obsługę takich elementów, jak dziesiętne itp., które różnią się w innych lokalizacjach.date_i18n
jest odpowiednikiem wbudowanej daty PHP , z wszystkimi stosownymi funkcjami. Nazwy miesięcy, nazwy dni itp.Nigdy też nie łamaj prawa . Tylko przypomnienie. :)
źródło
__ (), _e () i _x (), _ex ()
__()
i_e()
są zasadniczo zarówno opakowaniemtranslate()
(nie używaj bezpośrednio), jak i prawie tym samym.Różnica polega na tym, że
__()
zwraca przetłumaczony ciąg i_e()
powtarza go. Oba wymagają podania łańcucha jako wymaganego parametru i zwykle, choć opcjonalnie, również domeny tekstowej.Analogicznie istnieje
_x()
i_ex()
, które pozwalają określić kontekst, w którym można opisać, gdzie pojawia się ciąg. Jeśli twój projekt zawiera więcej niż kilkadziesiąt tłumaczonych ciągów, użycie kontekstu ma sens.Zwróć też uwagę na istnienie
_n()
i_nx()
dla liczby mnogiej.Przykład powszechnego użycia
Parametry
Wszystkie parametry, ale
$number
są łańcuchami. Wszystkie$domain
są wymagane.Większa elastyczność dzięki zmiennym i sprintf ()
Jeśli ciągi będą zawierać zmienne liczby lub słowa, użyj
sprintf()
:Dodatkowe zasoby
Niektóre dodatkowe zasoby dla nadchodzącego WordPress I18n Ninja:
źródło
Nie jestem ekspertem od tłumaczeń, ale strona Kodeksu WordPress ma dobrą dokumentację i wyjaśnia powód korzystania z każdej instancji.
Ze stron kodeksu:
__()
Jest używany, gdy wiadomość jest przekazywana jako argument do innej funkcji;
_e()
służy do pisania wiadomości bezpośrednio na stronie. Więcej szczegółów na temat tych dwóch funkcji:__('message')
Przeszukuje moduł lokalizacyjny pod kątem tłumaczenia „wiadomości” i przekazuje tłumaczenie do instrukcji return PHP. Jeśli nie znaleziono tłumaczenia dla „wiadomość”, po prostu zwraca „wiadomość”.
_e('message')
Przeszukuje moduł lokalizacyjny pod kątem tłumaczenia „wiadomości” i przekazuje tłumaczenie do instrukcji echo PHP. Jeśli nie znaleziono tłumaczenia dla „wiadomość”, to tylko echo „wiadomość”.
Pamiętaj, że jeśli internacjonalizujesz kompozycję lub wtyczkę, powinieneś użyć
"Text Domain"
.Struktura gettext zajmuje się większością WordPress. Jest jednak kilka miejsc w dystrybucji WordPress, w których nie można używać gettext:
Link do strony Kodeksu
Dodatkowe informacje dotyczące tego, kiedy gettext nie działa
Mam nadzieję, że to odpowiada na twoje pytanie, jeśli nie, daj nam znać, a może ktoś inny może pomóc lub mogę zrobić więcej badań.
źródło