2012-10-12 16 views
12

Powiel możliwe:
How does gettext handle dynamic content?Zmienne w PHP gettext

Używam gettext PHP. Chcę przetłumaczyć zdanie, które ma w sobie zmienną. czy to możliwe?

Na przykład, w języku angielskim:

Are you sure you want to block Alice?

(Gdzie "Alice" to nazwa użytkownika).

Ale w języku niemieckim, przedmiot nie pojawia się na końcu zdania .

Sind Sie sicher, dass Sie Alice blockieren?

W messages.po mam

msgid "BLOCK" 
msgstr "Are you sure you want to block" 

Ale widzę żadnego sposobu, aby przejść jedną lub więcej zmiennych. czy to możliwe?

+2

Placeholdrs jak ''% s' i zarówno sprintf' lub są powszechnie stosowane do tego. Ponadto nie powinieneś używać ABBReviations dla łańcucha źródłowego gettext. Używaj zwykłego języka angielskiego do nieprzetłumaczonych wiadomości. Wiadomości rzadko zmieniają się w praktyce, a katalogi gettext można łatwo dostosować, jeśli kiedykolwiek się zdarzy. – mario

Odpowiedz

26

Poedit rozpoznaje vary.

msgid "Are you sure you want to block %s?" 
msgstr "Sind Sie sicher, dass Sie %s blockieren?" 

i PHP

sprintf(_('Are you sure you want to block %s?'),'Alice'); 
+0

Cóż, to było łatwe! Dzięki. Zmieniono, aby pokazać sprintf. printf pokazuje tylko długość. –

+2

Sprintf? Czemu? Printf wypisze ciąg i sprintf zwróci go. Może piszesz "echo sprintf". –

+2

@chumkiu - 'sprintf()' jest prawdopodobnie używany tutaj z powodów, które są nieistotne dla gettext i lokalizacji. (Sama aplikacja prawdopodobnie musiała przechowywać/manipulować wynikowym łańcuchem, a nie wyprowadzać go bezpośrednio na standardowe wyjście.) – rinogo