Ir para o conteúdo
jfosorio

Website multi-lingue

Mensagens Recomendadas

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.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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?

Editado por 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.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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!

Editado por NunoDinis

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

ndsotware.org

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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...

Editado por 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.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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%.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.