Domanda

Al momento sto facendo di internazionalizzazione con gettext utilizzando PHP. Mi chiedevo se ci fossero buoni metodi per questo esempio:

By using this website, you accept the <a href="<?php print($dir); ?>/tos/">Terms of Use</a>.

Per en_US, questa frase sarebbe seguire un tale formato. Tuttavia, in un'altra lingua, il link "Condizioni di utilizzo" potrebbe essere all'inizio della frase. C'è un modo elegante per fare questo? Grazie per il vostro tempo.

È stato utile?

Soluzione

Ecco come lo farei. La frase da tradurre sarebbe

By using this website, you accept the <a>Terms of Use</a>.

Poi mi piacerebbe sostituire il link dopo la frase è localizzata, per es.

$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);

Naturalmente è possibile sostituire <a> e </a> con tutto ciò ha un senso per voi ei vostri traduttori. Vieni a pensarci bene, poiché è necessario sfuggire l'output per evitare che i traduttori di fare scherzi con il codice HTML (intenzionalmente o no) probabilmente sarei andare con qualcosa di simile

$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);

Altri suggerimenti

Per il semplice internazionalizzazione, io semplicemente creare un array per lingua, includono il file corretto, e accedere tale matrice, piuttosto che fare quello che stai facendo.

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 chiamata dirname() è critica; altrimenti gli utenti avranno accesso a qualsiasi file unvetted php sul vostro file system.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top