Frage

Ich mache zur Zeit Internationalisierung mit gettext PHP. Ich habe mich gefragt, ob es in diesem Beispiel keine gute Methoden waren:

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

Für en_US, würde dieser Satz ein solches Format folgen. Allerdings in einer anderen Sprache, die Link „Nutzungsbedingungen“ könnten zu Beginn des Satzes sein. Gibt es eine elegante Art und Weise, dies zu tun? Vielen Dank für Ihre Zeit.

War es hilfreich?

Lösung

Hier ist, wie ich es tun würde. Der Ausdruck übersetzt werden würde

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

Dann würde ich den Link ersetzen, nachdem die Phrase lokalisiert ist, z.

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

Natürlich können Sie ersetzen <a> und </a> mit dem, was macht Sinn für Sie und Ihre Übersetzer. Kommen Sie, daran zu denken, da Sie Ihre Ausgabe entkommen müssen Übersetzer verhindern, dass vermasselt mit Ihrem HTML (absichtlich oder nicht) ich wahrscheinlich mit so etwas wie

gehen würde
$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);

Andere Tipps

Für einfache Internationalisierung, ich werde einfach ein Array pro Sprache erstellen, sind die richtige Datei, und das Array zugreifen, anstatt zu tun, was Sie tun.

de.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>';

Der dirname() Aufruf ist von entscheidender Bedeutung; sonst erhält Anwender unvetted Zugriff auf jede PHP-Datei auf Ihrem Dateisystem.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top