Хороший способ сделать текст со ссылками в gettext?
Вопрос
В настоящее время я занимаюсь интернационализацией с помощью gettext, используя PHP.Мне было интересно, есть ли какие-нибудь хорошие методы для этого примера:
By using this website, you accept the <a href="<?php print($dir); ?>/tos/">Terms of Use</a>.
Для en_US это предложение будет соответствовать такому формату.Однако на другом языке ссылка "Условия использования" может находиться в начале предложения.Есть ли элегантный способ сделать это?Спасибо, что уделили мне время.
Решение
Вот как бы я это сделал.Фраза , подлежащая переводу , будет выглядеть следующим образом
By using this website, you accept the <a>Terms of Use</a>.
Затем я бы заменил ссылку после того, как фраза будет локализована, например
$str = _('By using this website, you accept the <a>Terms of Use</a>.');
$str = preg_replace('#<a>(.*?)</a>#', '<a href="' . $dir . '/tos/">$1</a>', $str);
Конечно, вы можете заменить <a>
и </a>
с тем, что имеет смысл для вас и ваших переводчиков.Подумайте об этом, поскольку вам нужно экранировать свой вывод, чтобы переводчики не перепутали ваш HTML (намеренно или нет) Я бы, вероятно, выбрал что-то вроде
$str = htmlspecialchars(_('By using this website, you accept the [tos_link]Terms of Use[/tos_link].'));
$str = preg_replace('#\\[tos_link\\](.*?)\\[/tos_link\\]#', '<a href="' . $dir . '/tos/">$1</a>', $str);
Другие советы
Для простой интернационализации я просто создам массив для каждого языка, включу соответствующий файл и получу доступ к этому массиву, а не буду делать то, что делаете вы.
en.php:
$text = array(
'footer' => 'By using this website, you accept the <a href="' . $dir . '/tos/">Terms of Use</a>.',
'welcome' => 'Welcome to our website!'
);
index.php:
$langdir = '/path/to/languages';
$lang = ( $_GET['lang'] ) ? $langdir . '/' . $_GET['lang'] . '.php' : $langdir . '/en.php';
if( dirname($lang) != $langdir || !require_once( $lang ) )
exit('Language does not exist');
echo '<p class="footer">' . $text['footer'] . '</p>';
В dirname()
звонок имеет решающее значение;в противном случае пользователи получают несанкционированный доступ к любому php-файлу в вашей файловой системе.