internacionalização - mensagens customizadas

Boa noite pessoal, estou com uma dúvida aqui e tá irritando porque não entendo…hehe

no controller está assim:


Yii::t('fs','Unable to create the directory "{dir}" to disk. The "{parent}" does not appear to be writable.',array('{dir}'=>$path, '{parent}'=>$parent));

dentro de protected/messages criei o diretório pt_br (no core eu copiei o pt pra pt_br)

e criei o arquivo fs.php

ficou protected/messages/pt_br/fs.php

o arquivo fs.php assim :




<?php

return array (

		'Unable to create the directory "{dir}" to disk. The "{parent}" does not appear to be writable.'=>'Impossível criar o diretório "{dir}" no servidor. O "{parent}" parece não ter permissão de escrita.',

);

?>



e em config/main.php está:

‘sourceLanguage’ => ‘pt_br’,

as mensagens do yii, exibem em portugues corretamente.

essa mensagem customizada/personalizada só a string em inglês que passei no parametro

o que estou fazendo de errado que não traduz?

MarcosX, dá uma olhada nesse tópico e vê se pode te ajudar.

http://www.yiiframework.com/forum/index.php?/topic/1845-yii-em-pt-br/

Eu já olhei esse tópico. Mas o problema não é com as mensagens do yii. Essas funcionam sem problemas.

Eu andei lendo os fontes, mas to achando muito estranho… se eu definir a linguagem lá no main.php ele não vai traduzir essas mensagens personalizadas… pra traduzir eu teria que usar o quinto param em t() e definir o idioma <_<

se eu defino em componentes no config.main.php em CMessageSource translate() ele verifica se é diferente os idiomas pra traduzir, logo como é igual ele não traduz. É igual pois o sourceLanguage está definido em pt_br

Então pra funcionar eu tenho que escrever as mensagens no idioma que eu definir no main.php e criar a tradução do português para o inglês no caso?

É isso?

Porque a aplicação serão em 3 idiomas, logo intuitivamente eu pressupunha que mantinha tudo em ingles, definiria a principal que é portugues lá no main, manteria o padrão no aplicativo com as mensagens originais em ingles, e passaria por session a seleção do usuário se é inglês/português/espanhol…

Ou então, pra funcionar a forma "gambiarrística" de alterar no core :S

ai funcionaria, se adicionar no array principal, ai funciona como eu achava que deveria fazer, lá traduz para o português e o espanhol sem problemas. Desde que eu mantenha a mensagem em inglês.

Boa noite, estava consultando no site sobre o problema e ví um comentário na página http://www.yiiframework.com/doc/cookbook/18

ao invés de copiar pra não perder mensagens caso faça uma atualização no framework




<?php


return CMap::mergeArray(

    require(Yii::getFrameworkPath().'/messages/pt_br/yii.php'),

    array(

            '{file} exists in directory.'=>'{file} já existe no diretório.',

            'Unable to create the directory "{dir}" to disk. The "{parent}" does not appear to be writable.'=>'Impossível criar o diretório "{dir}" no servidor. Talvez "{parent}" não tenha permissão de escrita.',

            'You do not have permission to perform this operation or access "{resource}"'=>'Você não tem permissão para acessar ou executar "{resource}"' ,

        )

    );


?>



resolvi fazer o mergê, e colocar no arquivo yii.php em protected/messages mesmo… mas se mudar a categoria em t(), o primeiro parametro, ele não busca está buscando no arquivo como fala na documentação.

Mesmo assim obrigado por quem tentou ajudar… Quando tiver tempo, vou ver o porque só carrega quando é o yii.php

No final voce conseguiu? Deu certo?

Olha, nunca usei mensagens personalizadas exceto as do core do Yii.

Porém, pelo que sei, o primeiro parametro do Yii:t é referente à categoria da mensagem. Se vc alterou o arquivo em pt-br, entao vc está adicionando uma mensagem na categoria ‘yii’, logo, o comando deveria ser


Yii::t('yii','Unable to create the directory "{dir}" to disk. The"{parent}" does not appear to be writable.',array('{dir}'=>$path,'{parent}'=>$parent));

Se vc deseja fazer mensagens especificas para seu sistema, vc deve criar um arquivo chamado ‘fs’ em app/messages e lá adicinar seu trecho de codigo (aí vc pode usar a categoria como ‘fs’)

Reforçando, é o que li pelo forum, talvez eu esteja enganado em alguma parte, mas é por aih :P