raelgc / template

PHP Template
http://raelcunha.com/template.php
GNU Lesser General Public License v2.1
73 stars 42 forks source link

Tradução de Idiomas #13

Closed 100por1 closed 7 years ago

100por1 commented 8 years ago

Ola pessoal seguindo recomendação do Rael, estou criando este topico. Vamos lá!

Estou tentando adaptar para usar com sistema de tradução de idiomas, mas ate agora não consegui ainda muito sucesso.

Ou seja: Tenho uma frase por exemplo dentro de uma div,via PHP eu tenho como tratar isso, usando uma função na hora da escrita do texto, e é nesse ponto que estou travado.

Para resolver pelo menos de forma provisória para dar continuidade aqui no trabalho fiz uma alteração no Template.php, na linha 125 onde tem:

if(!$this->exists($varname)) throw new \RuntimeException("var $varname does not exist");

Eu anulei ela (#) comentando, e com isso para consegui a tradução coloquei todos os texto dentro de um array, em seguida faço um foreach, de momento deu certo, gostaria da opinião de todos e do Rael principalmente, para qual melhor pratica ou se assim está de boa, segue o que fiz para ter a tradução do meu texto conforme idioma selecionado pelo usuário, lembrando que estou usando o ZEND para tradução com PHP:

$arrayStrings = array(
    'Faca login em sua conta', 
    'Por favor, insira seu nome e senha para entrar.', 
    'Usuario', 
    'Senha'
);

foreach ($arrayStrings as &$frase) {
    $tpl->$frase = $langS->_($frase);
}

Agradeço desde já qualquer opinião/sugestão...

vaneves commented 8 years ago

@tiawt tanto o ZF1 quanto o ZF2 têm bibliotecas que trabalham com i18n e l10n. Recomendo que siga conforme é estabelecido pelo framework que estiver utilizando.

100por1 commented 8 years ago

Poderia colocar um exemplo? da forma que eu mencionei não vai dar certo, ao colocar a frase traduzida não encontra a frase no html. Estou ainda travado nesse ponto, vou tentar outros meios uma situação que estou pensando é introduzir a função de tradução na saída do texto no Template.php.

100por1 commented 8 years ago

Acredito que agora resolvi o problema, vamos lá ao que fiz

  1. Adicionei uma nova funcao logo abaixo da replace: function lingua($str){ global $langS; return $langS->_($str); }
  2. Depois fui na private function substModifiers e alterei ela para: private function substModifiers($value, $exp){ $statements = explode('|', $exp); if($statements[0]=='LANG'){ $value = call_user_func_array('lingua', array(substr($statements[1], 3, -2))); }else{ for($i=1; $i<sizeof($statements); $i++){ $temp = explode(":", $statements[$i]); $function = $temp[0]; $parameters = array_diff($temp, array($function)); $value = call_user_func_array($function, array_merge(array($value), $parameters)); } } return $value; }
  3. Na HTML fica dessa forma: {LANG|_("Redefinir senha")}
  4. E no PHP para disparar basta somente por uma chamada, exemplo: $tpl->LANG = 'lingua';

Desta forma posso usar o PoEdit para procurar as strings dentro das html, Só que o PoEdit não encontra as strings direto, então para resolver precisa fazer uma pequena alteração no PoEdit, sendo ela:

  1. No menu Arquivo/Preferências, vá em Extratores e selecione o Python e mande editar, na tela que abrir, na lista de extensões apenas adicione ao conteúdo lá: .html;.htm

Feche tudo salvando aponte para o diretório onde está as html, e pronto. Funciona tudo 100%.

Espero ter ajudado e contribuído, sei que pode ser melhorado, mais por hora resolveu meu problema e creio que pode ser de ajuda para outras pessoas

Lembro que fiz isso para usar com o sistema de tradução do ZEND, se for preciso envio completo, o exemplo, basta me pedir, gosto dele por trabalhar com o PoEdit, CSV, TXT e muito outros tipos de arquivo fácil de gerenciar...

Bom é isso, coloquei os crédito para mim na alteração, se não for permitido eu removo.

Valkhan commented 7 years ago

Caso a solução do nosso amigo @tiawt não seja suficiente, outra opção é criar uma função que traduza um termo,código ou frase e usar a sintaxe: {TERMO|funcaoTraducao} que se encarregará de traduzir o TERMO usando a sua função de tradução, frameworks como Yii utilizam esta forma.