Bonne méthode pour faire du texte avec des liens à gettext?
Question
Je fais actuellement l'internationalisation avec gettext en utilisant PHP. Je me demandais s'il y avait des bonnes méthodes pour cet exemple:
By using this website, you accept the <a href="<?php print($dir); ?>/tos/">Terms of Use</a>.
Pour en_US, cette phrase suivraient un tel format. Cependant, dans une autre langue, le lien « Conditions d'utilisation » pourrait être au début de la phrase. Y at-il une façon élégante de le faire? Merci pour votre temps.
La solution
Voici comment je le ferais. L'expression à traduire serait
By using this website, you accept the <a>Terms of Use</a>.
Ensuite, je remplacerai le lien après l'expression est localisée, par exemple.
$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);
Bien sûr, vous pouvez remplacer <a>
et </a>
avec tout ce qui fait sens pour vous et vos traducteurs. Venez y penser, puisque vous devez échapper à votre sortie pour empêcher les traducteurs de déconner avec votre code HTML (intentionnellement ou non), je serais probablement aller avec quelque chose comme
$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);
Autres conseils
Pour l'internationalisation simple, je vais simplement créer un tableau par langue, comprennent le fichier approprié, et l'accès ce tableau plutôt que de faire ce que vous faites.
fr.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>';
L'appel dirname()
est critique; Sinon, les utilisateurs ont accès à tout fichier non vérifiés de travaux de php sur votre système de fichiers.