Jump to content
jfosorio

Website multi-lingue

Recommended Posts

jfosorio

Olá comunidade!

A situação é a seguinte: desenvolvi um website para 4 idiomas. A gestão de conteúdos como notícias, páginas, etc, é feita através do meu cms. Mas aqui é que começam as minhas dúvidas, no que diz respeito a resolver a questão das traduções.

Para os conteúdos editáveis através do cms, acabei por duplicar as tabelas, adicionando-lhes o prefixo do idioma, por exemplo: pt_noticias, en_noticias. Assim, sei em q tabela devo inserir ou pesquisar registos, através da abrevitura do idioma correspondente.

Quanto aos conteúdos não editáveis, como por, exemplo "De momento, não existem notícias registadas" e outras expressões q estão espalhadas pelo site, criei uma tabela com uma coluna para cada idioma. O problema, é que tenho de saber o id de cada expressão, para incluir na programação do website, o que pode ficar confuso, à medida que o número de expressões cresce. Esta foi a solução que eu arranjei assim em cima do joelho, mas fiquei a pensar se não haverá uma forma mais prática de implementar um sistema de traduções.

Se alguém tiver sugestões, agradecia que partilhassem. (Espero ter explicado bem a minha dúvida...)


CSS 3D Text - Partilha mensagens em 3D com os teus amigos no Facebook!

Portal de Informática it4life - Emprego, notícias, fórum, comunidade.

Share this post


Link to post
Share on other sites
NunoDinis

Quem escolhe a língua, é o utilizador ? Não me parece apropriado nem um bom método andares com BD's atrás..

Num software que ajudei a desenvolver, damos a possibilidade de escolher a língua ao utilizador (através de bandeiras da nacionalidade, que neste caso são só PT ou EN ). Conforme for a escolha o site muda as etiquetas para a língua escolhida.


Estranha forma de vida que tem a capacidade de transformar comandos em mensagens de erro.

ndsotware.org

Share this post


Link to post
Share on other sites
yoda

Existem vários métodos de conseguir um sistema multilíngua, a solução depende da situação.

Uma possível solução para não dar trabalho em demasia à base de dados é guardar as strings traduzidas numa tabela à parte, com um token / id representativo da chave geral a que se refere, e usando cache para pré-construir os templates. Assim consegues com que o administrador edite as traduções livremente sem que o utilizador final tenha de esperar mais pela página a carregar e sem que a base de dados sofra com uma enorme quantidade de campos.

Share this post


Link to post
Share on other sites
jfosorio

A minha dúvida não tem nada a ver com o frontoffice. O website tem um javascript que detecta o idioma do browser do visitante e redireciona para a homepage, passando por parâmetro a referência do idioma. É este parâmetro que eu utilizo para fazer as queries às tabelas com o prefixo correspondente. É óbvio que o utilizador continua a poder selecionar o idioma em que quer visualizar o site, clicando na bandeira correspondente.

Vou tentar esmiuçar a coisa, para ver se me faço entender. O site é dinâmico e tem um gestor de conteúdos, através do qual, o administrador gereos artigos, como notícias, eventos, whatever...

(Isto em resposta ao post do NunoDinis)

Yoda, não percebi muito bem o teu post. Pelo que descrevi, achas que a minha solução é boa, ou haverá uma forma mais correta de fazer este tipo de coisas?

Edited by jfosorio

CSS 3D Text - Partilha mensagens em 3D com os teus amigos no Facebook!

Portal de Informática it4life - Emprego, notícias, fórum, comunidade.

Share this post


Link to post
Share on other sites
NunoDinis

if($_GET['lingua']=="pt") {
//texto pt
}

Podes fazer asim. No entanto, acho que a sugestão que o @yoda deu é mais fiável!

Edited by NunoDinis

Estranha forma de vida que tem a capacidade de transformar comandos em mensagens de erro.

ndsotware.org

Share this post


Link to post
Share on other sites
yoda

Yoda, não percebi muito bem o teu post. Pelo que descrevi, achas que a minha solução é boa, ou haverá uma forma mais correta de fazer este tipo de coisas?

A tua solução funciona, mas implica mudanças na estrutura da base de dados se quiseres adicionar mais línguas, além de encher a BD com campos que podem (ou não) ser usados, ao passo que a solução que dei dá-te mais liberdade e o único identificador para todas as linguas é a chave ( / string ) com que identificas o campo.

Share this post


Link to post
Share on other sites
jfosorio

if($_GET['lingua']=="pt") {
//texto pt
}

Podes fazer asim. No entanto, acho que a sugestão que o @yoda deu é mais fiável!

Que estás a responder, estás. Não deves é de estar a ler a dúvida que eu coloquei...

Yoda, já percebi o que queres dizer. De facto, para as traduções do "texto solto" é melhor converter a tabela para algo do género:

id_translation | expression | language_id

Era isto que estavas a falar, certo?

Quanto aos artigos, sinceramente acho que vou manter o esquema das tabelas com prefixos. O meu cms tem uma funcionalidade "traduzir módulos" e isto dá muito jeito para isso, porque assim copio todas as tabelas associadas a um módulo e troco-lhes o prefixo. Não sei se estás a entender bem a ideia...

Edited by jfosorio

CSS 3D Text - Partilha mensagens em 3D com os teus amigos no Facebook!

Portal de Informática it4life - Emprego, notícias, fórum, comunidade.

Share this post


Link to post
Share on other sites
NunoDinis

Que estás a responder, estás. Não deves é de estar a ler a dúvida que eu coloquei...

Estou-te a dar uma sugestão de como podes fazer!


Estranha forma de vida que tem a capacidade de transformar comandos em mensagens de erro.

ndsotware.org

Share this post


Link to post
Share on other sites
jfosorio

Estás a dar uma sugestão que nada tem a ver com o que eu perguntei. Achas sinceramente que o meu problema é ir buscar o parâmetro????

Lê o post antes de responderes. Não me leves a mal, mas responder por responder não leva a lado nenhum.


CSS 3D Text - Partilha mensagens em 3D com os teus amigos no Facebook!

Portal de Informática it4life - Emprego, notícias, fórum, comunidade.

Share this post


Link to post
Share on other sites
NunoDinis

A sugestão que te estou a propor desde o início sempre foi a mesma. Com o método que propus evitas andar com as tabelas, como tens agora.

Segundo disseste, envias um parâmetro da linguagem escolhida para fazer a query às tabelas. Como nesta situação não precisas de tabelas, utilizas o parâmetro para fazer as operações diretamente, como indiquei no post acima.

Eu não levo a mal, a falar é que as pessoas se entendem.


Estranha forma de vida que tem a capacidade de transformar comandos em mensagens de erro.

ndsotware.org

Share this post


Link to post
Share on other sites
yoda

id_translation | expression | language_id

Sim, é algo nesses termos.

Quanto aos artigos, sinceramente acho que vou manter o esquema das tabelas com prefixos. O meu cms tem uma funcionalidade "traduzir módulos" e isto dá muito jeito para isso, porque assim copio todas as tabelas associadas a um módulo e troco-lhes o prefixo. Não sei se estás a entender bem a ideia...

Vais continuar com campos a mais, mas é tal coisa, quando tiveres de fazer um site com mais de 20 línguas vais entender a inviabilidade desse método, por agora pode ser que se seja adequado por não representar um problema maior.

Share this post


Link to post
Share on other sites
brunoais

A minha dúvida não tem nada a ver com o frontoffice. O website tem um javascript que detecta o idioma do browser do visitante e redireciona para a homepage, passando por parâmetro a referência do idioma. É este parâmetro que eu utilizo para fazer as queries às tabelas com o prefixo correspondente. É óbvio que o utilizador continua a poder selecionar o idioma em que quer visualizar o site, clicando na bandeira correspondente.

Está mal.

Estás a assumir uma das coisas mais erradas para se assumir:

"Nenhum utilizador vai usar o meu website com o javascript desligado (ou um browser sem js)"

Usa as headers que o browser envia para redirecionar, não uses o javascript. Fica muito mais rápido e ficas a suportar muito mais variedades de utilizadores.

Já agora, pessoalmente, sou da opinião de que qq website tem que ser usável sem js. Não significa que o utilizador fique com uma experiência boa e agradável, só significa que ele pode usá-lo.

Por exemplo:

Estou a desenvolver num projeto privado um sistema de upload de imagens.

Se alguém aparecer sem javascript ligado, consegue à mesma fazer upload mas não existe feedback útil ou apelativo. Tem o <input> para o ficheiro (só dá para ficheiros numa diretoria, e para os que não suportam input@multiple, só dá para 1 ficheiro de cada vez), uns quantos checkboxes, e um submit. Depois obtem o resultado do upload em texto simples numa outra página. Um sistema mesmo muito simples que fiz em 15 minutos pegando no que fiz para a versão em js que usa AJAX para enviar as imagens e que tem um design (que limitei-me a copiar o desenho), segundo disseram-me, apelativo. A versão que usa js é mais versátil, mais fácil de usar e permite o utilizador não ter que reenviar tudo se algum ficheiro tiver algum problema que provoque que o servidor o rejeite.

Isto foi só um exemplo para perceberes de que me refiro.


"[Os jovens da actual geração]não lêem porque não envolve um telecomando que dê para mirar e atirar, não falam porque a trapalhice é rainha e o calão é rei" autor: thoga31

Life is a genetically transmitted disease, induced by sex, with death rate of 100%.

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.