Gettext: перевод строк с HTML внутри? - PullRequest
2 голосов
/ 04 декабря 2009

Моя текущая реализация, основанная на массивах, хранит ключи и значения в словаре, пример:

$arr = array(
    'message' => 'Paste a <a href="http://flickr.com/">flickr</a> URL below.',
);

Я понимаю, что, вероятно, было плохой идеей хранить html внутри такой строки, как эта, но если я использую gettext, то в моих файлах .mo / .po как мне обращаться с хранением аналогичной строки? Должен ли я просто хранить слова, такие как «Вставить» и «URL ниже» и «Flickr» отдельно?

Ответы [ 2 ]

4 голосов
/ 04 декабря 2009

Вы должны хранить что-то вроде

"Paste a %1 URL below"

и замените все переменные, используя что-то простое, например, str_replace ('% 1', $ link, $ message);

$ ссылка также может быть переведена

"<a href="http://flickr.com/">%1</a>"

хотя это может быть излишним (переводит ли flickr между языками?)

Объяснение этому заключается в том, что разные языки имеют разную грамматическую структуру, и порядок слов не всегда будет одинаковым.

Обновление:

, как @alex и @chelmertz упоминают в комментариях, попробуйте использовать функцию sprintf, которая создана именно для этого.

0 голосов
/ 10 июля 2015

Я бы пошел на это:

$arr = array(
    'message' => _('Paste a %s URL below.'),
);

Наличие всех переводов в виде строковых литералов в вызовах функций gettext позволяет использовать стандартные инструменты для обновления каталогов * .po.

...