Buen método para hacer el texto con enlaces en gettext?
Pregunta
Actualmente estoy haciendo internacionalización con gettext usando PHP. Me preguntaba si había alguna buenos métodos para este ejemplo:
By using this website, you accept the <a href="<?php print($dir); ?>/tos/">Terms of Use</a>.
Para en_US, esta frase podría seguir un formato tal. Sin embargo, en otro idioma, las "Condiciones de Uso" podrían estar en el comienzo de la oración. ¿Hay una manera elegante de hacer esto? Gracias por su tiempo.
Solución
Así es como yo lo haría. La frase que se traduce sería
By using this website, you accept the <a>Terms of Use</a>.
A continuación, me gustaría reemplazar el vínculo después de la frase se localiza, por ejemplo.
$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);
Por supuesto, se puede reemplazar <a>
y </a>
con lo que tiene sentido para usted y sus traductores. Ahora que lo pienso de ella, ya que tiene que escapar de su salida para evitar que los traductores de echar a perder con su HTML (intencionalmente o no) que probablemente iría con algo así como
$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);
Otros consejos
Para sencilla internacionalización, simplemente voy a crear una matriz por cada idioma, incluya el archivo y acceso para esa matriz en lugar de hacer lo que está haciendo.
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>';
La llamada dirname()
es crítica; de lo contrario los usuarios obtienen acceso unvetted a cualquier archivo php en su sistema de archivos.