Pergunta

Atualmente, estou fazendo internacionalização com o GetText usando o PHP. Eu queria saber se havia bons métodos para este exemplo:

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

Para en_Us, essa frase seguiria esse formato. No entanto, em outro idioma, o link "Termos de Uso" pode estar no início da frase. Existe uma maneira elegante de fazer isso? Obrigado pelo seu tempo.

Foi útil?

Solução

Aqui está como eu faria isso. A frase a ser traduzida seria

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

Então eu substituiria o link depois que a frase estiver localizada, por exemplo,

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

Claro que você pode substituir <a> e </a> com o que quer que faça sentido para você e seus tradutores. Venha para pensar sobre isso, já que você precisa escapar de sua saída para impedir que os tradutores estraguem seu HTML (intencionalmente ou não) eu provavelmente iria com algo 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);

Outras dicas

Para uma internacionalização simples, simplesmente criarei uma matriz por idioma, incluirei o arquivo adequado e acessarei essa matriz em vez de fazer o que você está fazendo.

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

o dirname() A chamada é crítica; Caso contrário, os usuários obtêm acesso não vetado a qualquer arquivo PHP no seu sistema de arquivos.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top