Solicitação de Recursos

Gravatar de brunobertolini brunobertolini Tópico publicado em
15/09/2009, 20:10:15

Suporte a multi-idioma

Comecei a usar o Spaghetti e senti falta de um suporte a multi-idiomas, seria interessante que o framework tivesse isso, e mais interessante se a inclusão das paginas do idioma seguissem o mesmo padrão dos controllers/actions, onde eu criaria um diretorio com mesmo nome do controller e um arquivo com mesmo nome da action.

Gravatar de Klawdyo Klawdyo Resposta publicada em
16/09/2009, 10:00:57

Suporte a multi-idioma

Conhece gettext ?
Tem muito material em português no google.

De forma geral, as traduções funcionam assim: Nas suas views, você define as strings que serão traduzidas. Paralelamente, você criará os arquivos de tradução em uma pasta definida, e ao ser executado, o gettext procurará a pasta para o idioma que você está executando e substituirá as strings marcadas pela tradução que você fez.

Criar um controller para cada lingua seria extremamente mais demorado.
Mas se você quiser fazer assim também, dá certo. Eu sugiro que use prefixes.

Você também pode usar xml pra guardar as traduções, ou o banco de dados, ou até mesmo um arquivo php assim:

arquivo pt_bt.php

$msg = array(
‘sucesso’ => ‘sucesso’,
‘falha’ => ‘falha’,
);

arquivo en_us.php

$msg = array(
‘sucesso’ => ‘success’,
‘falha’=>‘fail’
);

E por aí vai. Aí no seu código você coloca $msg[‘sucesso’] onde você quer q apareça essa mensagem de sucesso, e a arruma uma forma de saber a lingua do visitante e selecionar qual dos arquivos dá o include.

Recomendo mesmo o gettext, mas já vi milhares de códigos usando as outras tbm.

Gravatar de Rafael Marin Rafael Marin Resposta publicada em
16/09/2009, 16:29:19

Suporte a multi-idioma

Olá, não prevemos por enquanto oferecer suporte multi-idiomas, está fora do nosso escopo. Mas nada impede que você use gettext, como a solução do Klawdyo, ou crie sua própria solução. Pensaremos nisso no futuro, no entanto por enquanto temos problemas mais básicos que precisam ser resolvidos.

Se alguém implementar alguma solução, por favor compartilhe conosco (se quiser, é claro).

Gravatar de brunobertolini brunobertolini Resposta publicada em
17/09/2009, 22:04:24

Suporte a multi-idioma

Não conhecia o gettext, mas vou estuda-lo.
Klawdyo, obrigado pelas dicas.

Gravatar de rdeprera rdeprera Resposta publicada em
05/12/2009, 04:52:50

Suporte a multi-idioma

gettext é o que há de melhor em desempenho e produtividade

Gravatar de TiaoGalinha TiaoGalinha Resposta publicada em
01/03/2010, 10:26:09

Suporte a multi-idioma

Estou fazendo uma aplicação multi-idioma e não sei como faço para incluir o arquivo de idioma...

dentro da pasta webroot, criei a pasta "languages" e tem os arquivos:

pt_br.php
en_us.php

A pergunta é, onde faço o include para que a tradução esteja disponível em todas as páginas ?

Gravatar de Klawdyo Klawdyo Resposta publicada em
01/03/2010, 12:55:52

Suporte a multi-idioma

webroot é acessível ao público.
Crie dentro de app/. ou fora do app.
Você pode usar o App::import('Core', '../languages/pt_br') se vc chamar fora do app, ou se tiver dentro do app, pode usar App::import('App', '/languages/pt_br').
Dê uma sacada como foi feito aqui: http://github.com/rafaelmarin/spaghettiphp-simplecache/blob/master/app/components/cache_component.php

Gravatar de TiaoGalinha TiaoGalinha Resposta publicada em
01/03/2010, 14:01:18

Suporte a multi-idioma

Mas desse jeito, teria que em todos os controllers incluir o arquivo, e não queria isso, quero incluir em um único lugar.

Gravatar de djalmaaraujo djalmaaraujo Resposta publicada em
09/04/2010, 11:52:24

Suporte a multi-idioma

E como ficaria isso pra mudar o banco de dados de acordo com a lingua?

Gravatar de emersonvinicius emersonvinicius Resposta publicada em
12/04/2010, 10:05:02

Suporte a multi-idioma

Fiz meu antigo site em multi-idioma com Spaghetti.

Apenas mexi um pouco com com o AppController e com Helpers

Gravatar de djalmaaraujo djalmaaraujo Resposta publicada em
05/06/2010, 09:46:55

Suporte a multi-idioma

Pessoal, eu desenvolvi uma helper para isso, espero que gostem e critiquem:
Para que o sistema saiba qual lingua, diz uma pequena adição de código no meu settings.php:


/**
 * Multilang Options and Config
 * Set multilang on your app.
 */
Config::write('multilang', false);
Config::write('default_language', 'br');

/** * Com o environment, você pode escolher qual ambiente de desenvolvimento está * utilizando. É principalmente utilizado na configuração de banco de dados, * evitando que você tenha que redefiní-las a cada deploy. */ if (Config::read('multilang')): if (Session::read('language')): Config::write("environment", Session::read('language')); else: Config::write("environment", Config::read('default_language')); endif; else: Config::write("environment", 'development'); //Change here if there's no multilang endif;

E para usar nas views:


<?php echo $lang_('Mensagem de Erro'); ?>

E finalmente, o XML:
webroot/locale/en.xml


<?xml version="1.0" encoding="utf-8" ?>
<language id="en">
	<item id="Mensagem de Erro">Error Message</item>
	<item id="Mensagem de Sucesso">Success Message</item>
</language>


<?php
/**
 *  LangHelper provê conversão de texto em multilínguas
 *	por DjalmaAraújo
 *  @license   http://www.opensource.org/licenses/mit-license.php The MIT License
 *
 */

class LangHelper extends Helper { public $lang; public $default_lang = 'br'; public $xml; public $xml_path; /** * Construtor */ public function __construct() { if (Session::read('language')) { $this->lang = Session::read('language'); } else { $this->lang = $this->default_lang; } $this->xml_path = APP . '/webroot/locale/'; $this->xml = new SimpleXmlElement($this->getTranslate()); } /** * Utilização da conversão na view */ public function _($string) { return $this->output($this->translate($string)); } /** * Tradução da string procurada no XML */ private function translate($string) { foreach ($this->xml->item as $item): if ($item['id'] == $string): echo $item; endif; endforeach; } /** * Captura o XML da língua */ private function getTranslate() { $file = $this->xml_path . $this->lang . '.xml'; if (file_exists($file)): return file_get_contents($file); else: exit('[LANG HELPER] O arquivo ' . $this->lang . '.xml não se encontra para tradução, crie um novo.'); endif; } } ?>

É isso, valeu!

Gravatar de djalmaaraujo djalmaaraujo Resposta publicada em
05/06/2010, 09:47:40

Suporte a multi-idioma

O último (code)(/code) é o do HELPER. :)
ps: cade a edição de posts do forum!! :(

Gravatar de djalmaaraujo djalmaaraujo Resposta publicada em
05/06/2010, 09:49:39

Suporte a multi-idioma

Eita, corrigindo a utilização ali:
[code]
<?php echo $lang->_('Mensagem de Erro'); ?>
?>

Você deve estar logado para responder a um tópico ou adicionar um novo.
Efetue login ou Registre-se para participar das discussões.