Ir para conteúdo
Fórum Script Brasil
  • 0

Site com versão em ingles


FernandoGuedes

Pergunta

Boa noite pessoal!

Preciso de ajuda para conseguir criar um site com duas versões, uma em portugues e uma em ingles!

Já entendi lendo alguns tópicos antigos aqui no forum que posso usar um banco de dados para ter os dois idiomas no site, mas o meu maior problema é que este sistema tera dados acrescentados pelo usuario, uma especie de site administravel. alguém sabe alguma forma de fazer isso?

Obrigado

Link para o comentário
Compartilhar em outros sites

5 respostass a esta questão

Posts Recomendados

  • 0

Saudações FernandoGuedes,

Já passei por uma situação igual à sua, só que eram em 4 idiomas... :blink:

O site era administrado pelo usuario e a solução foi:

1. Utilizei uma sessão para armazenar o idioma que foi selecionado. Exemplo:

session_start()    
if ($_POST['Idioma']) {
   $_SESSION['idioma_atual']=$_POST['Idioma'];  }

2. Onde ocorria textos FIXOS, eu tive de fazer em 4 versões com uso de 'if' : Exemplo do que eu fiz:

 if ($_SESSION['idioma_atual']=='Ingles')  echo 'Click'; 
    else if ($_SESSION['idioma_atual']=="Portugues')  echo 'Clique aqui';

3. Minha solução foi 4 bancos de dados... Por que? porque ficou muito mais fácil, já que o site já funcionava em portugues... e tive de transformá-lo em multilingue...

então na hora que trocava de lingua, ele acessava OUTRO BD com os dados na língua selecionada...

4. Mesma coisa na área adm: quando o cliente ia acessar a área adm, ele tinha que selecionar 1 lingua pra fazer logon. Se fosse incluir conteudo, tinha de fazer login 4 vezes, um em cada língua. Trabalho pro cliente? com certeza... Mas foi ele que inventou que queria 4 idiomas diferentes...

Espero que tenha ajudado a resolver o seu problema

Editado por Sandro2011
Link para o comentário
Compartilhar em outros sites

  • 0

Saudações FernandoGuedes,

Já passei por uma situação igual à sua, só que eram em 4 idiomas... :blink:

O site era administrado pelo usuario e a solução foi:

1. Utilizei uma sessão para armazenar o idioma que foi selecionado. Exemplo:

session_start()    
if ($_POST['Idioma']) {
   $_SESSION['idioma_atual']=$_POST['Idioma'];  }

2. Onde ocorria textos FIXOS, eu tive de fazer em 4 versões com uso de 'if' : Exemplo do que eu fiz:

 if ($_SESSION['idioma_atual']=='Ingles')  echo 'Click'; 
    else if ($_SESSION['idioma_atual']=="Portugues')  echo 'Clique aqui';

3. Minha solução foi 4 bancos de dados... Por que? porque ficou muito mais fácil, já que o site já funcionava em portugues... e tive de transformá-lo em multilingue...

então na hora que trocava de lingua, ele acessava OUTRO BD com os dados na língua selecionada...

4. Mesma coisa na área adm: quando o cliente ia acessar a área adm, ele tinha que selecionar 1 lingua pra fazer logon. Se fosse incluir conteudo, tinha de fazer login 4 vezes, um em cada língua. Trabalho pro cliente? com certeza... Mas foi ele que inventou que queria 4 idiomas diferentes...

Espero que tenha ajudado a resolver o seu problema

Mas não faz muita logica, pois se eu tiver 100 linguas diferentes, terei de ter 100 base de dados quase identicas?

Link para o comentário
Compartilhar em outros sites

  • 0

Para que ter lógica se o que necessita são apenas 2 línguas?

Aliás essa minha solução é bem viável, uma vez que você pode configurar TOTALMENTE o site quando muda de uma língua para outra. Diferente regiões podem requerer produtos e imagens diferentes, e essa solução é bem viável também nesse sentido.

E mais: quando você já tem o sistema pronto e precisa adaptar, tempo conta muito e essa solução é até relativamente simples de implementar.

Garanto que existe um jeito de fazer a tradução automática com o Google: mas apresentar isso para um cliente é totalmente inviável, pois o Google não tem uma tradução digna. Já viu sites ou blogs em que você sente claramente que o texto está sem sentido? é o famigerado CTRL+C + CTRL+V da tradução de um texto traduzido do google...

Editado por Sandro2011
Link para o comentário
Compartilhar em outros sites

  • 0

Boa noite FernandoGuedes,

Primeiramente, este é meu primeiro post, se eu não for muito claro, me desculpe.

Eu estou implementando este tipo de funcionalidade da seguinte forma no banco de dados (MySQL).

Inicialmente eu possuo uma tabela de Idioma com as colunas ID, código da linguagem (en-us, pt-br, etc) e o nome da tabela de cada idioma.

Criando tabela de idiomas:

CREATE TABLE `languagem` (
`id` TINYINT(3) UNSIGNED NOT NULL AUTO_INCREMENT,
`langCode` VARCHAR(5) NOT NULL COLLATE 'utf8_bin',
`nomeTabela` VARCHAR(50) NOT NULL COMMENT 'Nome da tabela que armazena conteudo em determinado idioma.' COLLATE 'utf8_bin',
PRIMARY KEY (`id`)
)
COLLATE='utf8_bin'
ENGINE=InnoDB
AUTO_INCREMENT=1;

A estrutura das tabelas que armazenam os conteúdos em diferentes idiomas ficam assim:

Inicialmente eu possuo uma tabela com contém o ID do conteúdo e o ID de quem criou o conteúdo, pois dessa forma eu posso utilizar como chave estrangeira, já que o conteúdo é o mesmo, a única diferença é o idioma.

Criando tabela principal de textos para controlar os Ids:

CREATE TABLE `textos` (
`idTexto` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT ,
`idCriador` INT(11) UNSIGNED NOT NULL,
PRIMARY KEY (`idTexto`))
COMMENT='Armazena codigo unico de cada texto.'
COLLATE='utf8_bin'
ENGINE=InnoDB
AUTO_INCREMENT=1;

Agora eu posso criar uma tabela para o conteúdo em português, por exemplo. Essa estrutura de tabela se repete para cada idioma que você precisar.

Observe que a chave estrangeira permite que eu adicione o texto aqui apenas se o código já existe na tabela “texto” e caso eu delete um ID na tabela “textos” o conteúdo também será excluído nas tabelas de todos os idiomas.

Criando tabela de textos em português:

CREATE TABLE `texto_ptbr` (
`idTexto` INT(11) UNSIGNED NOT NULL,
`texto` TEXT NOT NULL COLLATE 'utf8_bin'
PRIMARY KEY (`idTexto`),
CONSTRAINT `FK_idTexto_ptbr` FOREIGN KEY (`idTexto`) REFERENCES `textos` (`idTexto`) ON UPDATE NO ACTION ON DELETE CASCADE
)
COMMENT='Sentences in english US'
COLLATE='utf8_bin'
ENGINE=InnoDB;

Agora, como eu uso tudo isso?

Com um procedure! Primeiro ele insere na tabela principal de “textos” para termos o Id único, depois seleciona o nome da tabela com base no ID do idioma que foi passado na chamada do procedure, e com o nome da tabela eu posso inserir o texto na tabela de português.

Criando procedimento para inserir texto no idioma desejado:

DELIMITER $$
CREATE PROCEDURE insere_texto (idCriador int, textoParaInserir TEXT, langId INT)
BEGIN
 
DECLARE EXIT HANDLER FOR SQLEXCEPTION, SQLWARNING
BEGIN
ROLLBACK;
GET DIAGNOSTICS CONDITION 1 @errorCode = RETURNED_SQLSTATE, @errorMessage = MESSAGE_TEXT;
SELECT @errorCode, @errorMessage;
END;
 
START TRANSACTION;
INSERT INTO textos (textos.idCriador) VALUES (idCriador);
 
SELECT languagem.nomeTabela INTO @nomeTabelaSelecionada FROM languagem WHERE languagem.id = langId;
 
SET @insertTextQuery = CONCAT('INSERT INTO ', @nomeTabelaSelecionada, '(idTexto, texto)
VALUES (', LAST_INSERT_ID(), ', "', textoParaInserir, '")');
 
PREPARE insertTextStmt FROM @insertTextQuery;
EXECUTE insertTextStmt;
DEALLOCATE PREPARE insertTextStmt;
 
SELECT LAST_INSERT_ID() AS result;
 
COMMIT;
 
END
DELIMITER ;

Ah! Toda esse trabalho fica no banco, no PHP eu tenho apenas que chamar o procedure assim:

$query = “CALL insere_texto ($idCriador, $texto, $langId);”;

Obs.: Para simplificar, a chamada acima não utiliza prepared statement, recomento que utilize.

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...