URL amigáveis em sites multi-idiomas no CakePHP
Olá pessoal,
este post é sobre algumas idéias sobre como organizar as URL’s em site multi-idiomas, mais especificamente no nome dos controllers. Não sou dono da verdade, então, comentem dizendo o que vocês acham.
Esta semana me deparei com um problema em um site com versões em inglês e português. A URL em português ficava:
/produtos/informacoes/1/nome-do-produto
Isso sempre funcionou para mim, pois faz sentido para mim otimizar e ligar termo produtos, informacoes e o nome-do-produto na mesma URL. Mas o que acontece quando o site estava em inglês? Simplesmente a URL ficava:
/produtos/informacoes/1/product-name
Ou seja, estaria produtos, informacoes com a nome do produto em inglês na URL. Fato que me deixou encabulado, por misturar português e inglês.
Resolvi fazer um pouco diferente. Ao invés de usar o nome do controller como produtos, resolvi usar apenas p e deixei o nome da action como i.
/p/i/1/nome-do-produto
Ou melhor:
/p/i/produto/informacoes/1/nome-do-produto
Sendo que os dois primeiros paramêtros da action, eu simplesmente ignoro e mudo de acordo com o idioma. Em inglê ficaria:
/p/i/product/details/1/product-name
E eu sempre mantenho o id (no caso dos exemplos 1) em todas as URL’s.
Levando em consideração as boas práticas de programação não é recomendável usar como nome para uma classe P e de um método (action) como i, mas para SEO creio que resolve.
O que vocês acham?
Forte abraço!
8 Comentários »
RSS feed for comments on this post · URI do TrackBack
Este site é escrito por Tulio Faria, analista de sistemas, apaixonado por web, jogos e por qualquer cacareco tecnológico.
Juan Basso said,
Janeiro 21, 2009 @ 07:11
É legal este esquema, tanto que no CookBook é o mesmo esquema.
Uma pequena diferença é que no book eles colocam o idioma na frente.
Só uma coisa, ao invés de utilizar classe/controller P e método/action i, coloque a regra no router indicando os nomes legíveis. Sua url até poderia ser /p/i/…, mas no routers diga que /p é o controller Produtos e /i a action informacoes().
Um pouco de código:
Router::connect(’/:lang/view/*’, array(’controller’ => ‘nodes’, ‘action’ => ‘view’), array(’lang’ => ‘[a-z]{2}’));
Router::connect(’/view/*’, array(’controller’ => ‘nodes’, ‘action’ => ‘view’), array(’lang’ => ‘en’));
Esse é o esquema de rotas do cookbook.
Tulio Faria said,
Janeiro 21, 2009 @ 07:42
Juan,
tem horas que eu não gosto muito de editar as rotas. Pura frescura, pois realmente fica melhor rotear p para produtos e i para informacoes.
Na verdade tenho essa mania por em um job o meu routes ter ficado gigantesco e muito “gambiarrado” para ser sincero, rs… Daí atualmente evito ao máximo mexer nele.
Inté
Juan Basso said,
Janeiro 21, 2009 @ 09:49
Mas você usa o controller P e a action i? Não entendi.
Tulio Faria said,
Janeiro 21, 2009 @ 11:10
Sim… Por isso não é uma boa prática.
Rodrigo Maia said,
Janeiro 21, 2009 @ 21:13
Não tem como fazer uns alias?
Tulio Faria said,
Fevereiro 5, 2009 @ 22:10
Tem, mas daí teria que criar no routes… A idéia era sem precisar fazer isso…
Tarcísio Sassara said,
Fevereiro 21, 2009 @ 23:31
Bom, acredito que quanto mais afastados os termos relevantes do domínio, menor será a relevância para os buscadores.
Mas não há como saber o impacto.
Se for o caso de um site de acesso público, vale a pena o trabalho.
No caso de um sistema restrito, não precisa nem pensar.
Um framework como o Cake facilita nosso trabalho certo? Pensamos em desenvolvimento ágil. Mas é impressionante como ainda temos trabalho.
E é verdade, se for brincar com as rotas, o arquivo ficará uma “zona”.
Isso vale para outras coisas. O AuthComponent por exemplo: É bem simples de implementar, mas as configurações podem crescer. Na documentação, a implementação é bem simples, mas se você possui uma tabela com o nome diferente de “users” ou as colunas contendo o login e a senha diferentes do propostos por eles, já era, mais algumas linhas para escrever.
Com o tempo, tendo menos tempo disponível e mais compromissos, é normal pender para o nosso lado e fazer da maneira mais simples.
É assim, do mesmo modo que procuramos uma boa IDE, uma boa hospedagem e utilizamos um controlador de versões, qualquer um menos o cvs
Abraço
felipe said,
Abril 7, 2011 @ 10:24
Muito bom cara, testei aqui e deu certo, realmente ficou igual o http://book.cakephp.org/pt, agora uma outra dúvida:
Como você aconselha eu pegar a varivel do idioma /pt, depois vou criar as mensagens dos idiomas ex:
echo digite_seu_nome[idioma];
Como você acha melhor trabalar essa parte? abraço!