Переменные в PHP gettext

Возможный дубликат:
Как gettext обрабатывает динамический контент?

Я использую PHP gettext. Я хочу перевести предложение, в котором есть переменная. Это возможно?

Например, на английском языке:

Are you sure you want to block Alice?

(Где «Алиса» — имя пользователя.)

Но в немецком языке подлежащее не стоит в конце предложения.

Sind Sie sicher, dass Sie Alice blockieren?

В messages.po у меня есть

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

Но я не вижу способа передать одну или несколько переменных. Это возможно?


person Terence Eden    schedule 12.10.2012    source источник
comment
Для этого обычно используются заполнители, такие как %s и sprintf или им подобные. Также вы не должны использовать ABBReviations для исходной строки gettext. Используйте простой английский для непереведенных сообщений. Сообщения редко меняются на практике, и каталоги gettext могут быть легко адаптированы, если это когда-либо произойдет.   -  person mario    schedule 12.10.2012


Ответы (1)


poedit распознает переменные.

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

и в пхп

sprintf(_('Are you sure you want to block %s?'),'Alice');
person Luca Rainone    schedule 12.10.2012
comment
Ну это было легко! Спасибо. Отредактировали, чтобы показать sprintf. printf просто показывает длину. - person Terence Eden; 12.10.2012
comment
Спринтф? Почему? Printf напечатает строку, а sprintf вернет ее. Может быть, вы пишете echo sprintf. - person Luca Rainone; 12.10.2012
comment
@chumkiu - sprintf(), вероятно, используется здесь по причинам, не имеющим отношения к gettext и локализации. (Возможно, само приложение должно хранить/обрабатывать результирующую строку, а не выводить ее непосредственно на стандартный вывод.) - person rinogo; 07.08.2013
comment
Может сделать что-то подобное с <?= __('key') ?>? - person Thomas Rbt; 10.05.2017