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.

Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top