Diferente do inglês, o português possuí palavras de gênero masculino e feminino. Sendo assim, é uma chatice ficar alterando as mensagens da aplicação ajustando “a(s)” e “o(s)” para cada gênero (por exemplo: fornecedor e concessionária). Para facilitar a minha vida, criei o Plugin Cogem para controlar a exibição das mensagens por gênero.

Plugin Cogem

Compatibilidade

  • Compatível com CakePHP v 1.3

Instalação

Faça o download do plugin Cogem e coloque seu conteúdo dentro de /app/plugins/cogem ou em outro diretório para plugins do CakePHP.

Edite o arquivo /app/app_controller.php:

Utilização

Você pode chamar as funções do Cogem no Controller usando $this->Cogem e na View a variável $Cogem.

Configurando Inflexões

Algumas palavras já foram previamente configuradas no plugin para utilização. Entretanto, você DEVE definir a inflexão item e outras – se você desejar – em seu Controller.

Ao definir uma inflexão, podemos informar sua versão no singular e plural. Caso a sua versão em plural não seja informada, ou vice-versa, o plugin utilizará a regra do Inflector do CakePHP para realizar a conversão.

Exemplo 1:

Exemplo 2, agora o item tem o gênero feminino, então alteramos todos os parâmetros pré-definidos:

Configurando as Mensagens

Assim como as inflexões, o plugin conta também com algumas mensagens pré-definidas para utilização. Contudo, você também pode configurar mensagens diferentes para sua aplicação.

Na declaração com componente, basta informar as mensagens e nelas coloca nas mensagens entre { } a inflexão que você deseja exibir. Você também pode utilizar {ucase{ }} para que o comando ucase() seja executado.

Funções

Podemos utilizar duas funções para exibir as mensagens com as inflexões: getMessage() e writeMessage().

getMessage()

Para exibir as mensagens pré-definidas utilizamos a função getMessage(), passando no mínimo dois parâmetros:

  • 1º: Tipo da mensagem;
  • 2º: A mensagem específica;
  • 3º (opcional): singular ou plural. Se não informado será singular.
  • 4º (opcional): O conteúdo da inflexão {id}.

Exemplo 1:

Exemplo 2:

writeMessage()

Você pode escrever uma mensagem sem pré-definir no plugin, utilizando a função writeMessage(), passando no mínimo um parâmetro:

  • 1º: A mensagem;
  • 2º (opcional): singular ou plural. Se não informado será singular.
  • 3º (opcional): O conteúdo da inflexão {id}.

Exemplo 1:

Exemplo 2:

getInflection()

Você pode pegar uma palavra individual através da função getInflection(), passando no mínimo um parâmetro:

  • 1º: A inflexão;
  • 2º (opcional): singular ou plural. Se não informado será singular.

Exemplo 1:

Exemplo 2:

Conclusão

O plugin Cogem é muito útil. Utilizado-o em conjunto com o Bake fica melhor ainda!

Configure suas infexões no beforeFilter() dos Controllers e utilize as mesmas mensagens em todo o sistema sem precisar se preocupar com qualquer ajuste de gênero.

Quer copiar esse post no seu site? Você pode!

Segundo a licença da Creative Commons 3.0 (CC BY SA 3.0) você pode copiar e distribuir esse conteúdo desde que faça menção ao autor original, para isso é só copiar esse código no final do artigo quando for publicá-lo em seu site:

<p>Artigo originalmente publicado em <em>19 de setembro de 2011</em> por <strong><a href="http://pedroelsner.com/" title="Pedro Elsner, Profissional de TI - São Paulo">Pedro Elsner</a></strong>: <a href="http://pedroelsner.com/2011/09/padronizando-as-mensagens-da-sua-aplicacao-cakephp/" title="Padronizando as mensagens da sua aplicação CakePHP 1.3">Padronizando as mensagens da sua aplicação CakePHP 1.3</a></p>
A não menção ao autor original da obra implicará em cópia e/ou distribuição ilegal de propriedade intelectual, o que é crime segundo a Lei n.º 9.610.
  • Lukas Figueiredo

    tendo um pequeno problema ->
    Undefined property: View::$Cogemqual será o problema? eu estou chamando $this->Cogem->writeMessage(‘{ucase{{no}} {item} foi {finded}.’); no default.ctp

  • Certo Lukas!
    O Cogem é um Component e portantanto deve ser utilizado no Controller.
    Se quizer utilizar em uma View, você deve manda-lo para la.

    Faça o seguinte:
    – No seu app_controler.php, na função beforeFilter(), adicione: $this->set(‘Cogem’, $this->Cogem);
    – Agora na View, utilize a variável para chamar as funções, no seu caso: $Cogem->writeMessage(‘{ucase{no}} {item} foi {finded}.’);

    Nota: A mensagem que você mandou está com uma { a mais no {ucase{no}} (no tutorial estava errado, acabei de corrigir).

    Hoje de noite vou atualizar o plugin, mandando o Cogem automáticamente para a View.
    Assim que eu fizer te aviso para você atualizar a sua aplicação. =]

  • Lukas, outra coisa: Não é {ucase{no}} mas sim {ucfirst{no}}. O tutorial estava errado.
    Falta de atenção ao escrever. Sorry. ^^’

  • Lukas, atualizie o plugin.
    Agora o plugin manda o Component para a View automáticamente na variável $Cogem.

    Baixe novamente ele no repositório do GitHub e atualize a sua aplição.

    Abraços!

  • Francis Rodrigues

    E você tem um artigo de como criar idiomas para complementar este? Eu tentei o modo básico de criar no diretório de languages do cakephp mas não consegui traduzir sequer uma linha =/

  • Não tenho Francis,
    Mas é uma ótima ideia para eu voltar a postar tutoriais =P