Gettext bağlantıları ile metin yapmak için iyi bir yöntem?

2 Cevap php

Şu anda PHP kullanarak gettext ile uluslararasılaşma yapıyorum. Bu örnek için herhangi bir iyi yöntemler vardı merak ediyordum:

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

En_US için, bu cümle böyle bir format takip edecek. Ancak, başka dilde, bağlantı "Kullanım Şartları" cümlenin başında olabilir. Bunu yapmak için zarif bir yolu var mı? Zaman ayırdığınız için teşekkürler.

2 Cevap

İşte ben bunu istiyorum nasıl. Çevrilecek ifade olurdu

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

Ifade lokalize sonra Sonra, örneğin bağlantıyı değiştirin ediyorum

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

Tabii ki <a> olarak değiştirin ve </a> sizin ve çevirmenler için mantıklı ne olursa olsun edebilirsiniz. Eğer HTML ile karıştırmasını çevirmenler önlemek için çıkış kaçmak zorunda beri (bilinçli veya bilinçsiz) Herhalde böyle bir şey ile gitmek istiyorum, bunu düşünmek gel

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

Basit uluslararasılaşma için, ben sadece, dil başına bir dizi oluşturmak Uygun dosyayı içerir ve ne yapıyorsun yapmak yerine bu diziyi erişim edeceğiz.

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

dirname() çağrı önemlidir; aksi takdirde kullanıcılar dosya sistemi üzerinde herhangi bir php dosyasına unvetted erişebilirsiniz.