W funkcji jest drugi argument __()
. Powinien być ustawiony na domenę, której używasz dla wtyczki lub motywu. W poniższych przykładach używam 'text_domain'
. Ciąg domeny powinien być unikalny. Nie powinien pasować do żadnego innego ciągu domeny. Nieużywanie argumentu domeny tekstowej domyślnie 'default'
oznacza nazwę domeny WordPress. Zobacz link po więcej szczegółów.
Zawsze używaj string ( 'text_domain'
). Nigdy nie używaj zmiennej, funkcji lub stałej z zawartym w niej łańcuchem. Większość (wszystkich?) Programów tłumaczących nie zobaczy go bez napisu.
Twój kod:
echo __( 'Hello ' . $first . ' you own me money.' );
Nie dołączaj zmiennych do łańcucha.
Lepszy sposób:
echo sprintf( __( 'Hello %s you own me money.', 'text_domain' ), $first );
Lub tylko:
printf( __( 'Hello %s you own me money.', 'text_domain' ), $first );
Symbol %s
zastępczy mówi ludzkiemu tłumaczowi, że tam jest łańcuch. Użyj %d
dla liczb. Istnieją również inne symbole zastępcze .
(To zdanie jest gramatycznie niepoprawne w języku angielskim. Użyj jednego 'Hello %s, you owe me money.'
lub w 'Hello %s, you own my money.'
zależności od zamierzonego znaczenia).
Twój kod:
$html = '<div><p>Top: ' . $t_margin . '</p>' . <p>Bottom: ' . $b_margin . '</p></div>';
Nie tłumacz HTML. Tak samo jest w każdym języku.
Lepszy sposób:
$html = sprintf( '<div><p>%s</p><p>%s</p></div>', __( 'Top: ', 'text_domain' ) . $t_margin, __( 'Bottom: ', 'text_domain' ) . $b_margin );
Lub podziel go na wiele linii:
$html = sprintf(
'<div><p>%s</p><p>%s</p></div>',
__( 'Top: ', 'text_domain' ) . $t_margin,
__( 'Bottom: ', 'text_domain' ) . $b_margin
);
Jeśli nie jest jasne, jakie są Górne i Dolne, możesz użyć _x()
do wyjaśnienia kontekstu tych terminów.
Możesz znaleźć inne przypadki tłumaczeń tutaj: Internacjonalizacja: Prawdopodobnie robisz to źle
textdomain
ciąg musi być dosłowny, nie może być zmienną / stałą / właściwością.sprintf()
. To naprawdę jest sposób na HTML w tłumaczonym ciągu.sprintf()
pomaga w jakikolwiek inny sposób niż może bardziej czysty wygląd. Jeśli masz zdanie z HTML wewnątrz, na przykład,Some text with a <strong>strong</strong> word inside.
jak można przetłumaczyć zdanie jako całość, a nie tłumaczyćSome text with a
,strong
iword inside
indywidualnie (co nie ma sensu).Nie zajmę się kwestią zmiennych w łańcuchu, ponieważ zostało już powiedziane.
Chcesz utrzymać ciąg statyczny, co oznacza, że treść się nie zmieni. Chcesz także unikać niepotrzebnego kodu HTML.
Powyższe zajmie dwa wiersze w tabeli dla zasadniczo tego samego tekstu. Można je przepisać jako:
Zmniejszenie do jednego rzędu.
Czasami HTML w tekście jest nieunikniony. Weź na przykład:
Ponieważ języki są gramatyczne, podział tekstu spowodowałby problemy dla każdego, kto tłumaczy.
Praktyczna zasada. Tagi formatujące tekst HTML w połowie zdania są OK. Zdania zaczynające się i kończące na HTML marnują miejsce.
źródło
"<b>$string</b>"
. Następnie możesz użyć'You currently owe %s dollars'
. Ale może to wymagać pozostania, jeśli używasz go z_n()
funkcją, która wymaga%d
symbolu zastępczego.%s
aby uczynić to nieco jaśniejszym.