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.

¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top