Tive que implementar um site aqui em mais de um idioma, bom, a solicitação era pra ser em Inglês e Português, mas deixei pronto para inclusão de um novo idioma.
Em PHP há um monte de jeitos de fazer tal proeza, mas em ASP eu não achei nada muito bom, então tive que fazer eu mesmo.
O Esquema é o seguinte, no meu arquivo de inclusão que eu uso em chamo no site inteiro eu coloquei o código abaixo.
session("lang") = "pt"
if r("lang") <> "" then session("lang") = r("lang")
Na primeira linha eu seto o idioma padrão a sessão, na segunda linha eu verifico se estou recebendo uma solicitação pra mudar o idioma padrão. A função r() foi explicada no post anterior que nada mais é que um request() com alguns tratamentos.
Vale ressaltar que esquemas para verificar qual o idioma do visitante não devem ser usado em todos os casos, pois os user-agents irão catalogar seu site no idioma deles e não no idioma padrão que você determinar, deve-se analisar se isto é um problema pra você.
Para carregar conteúdos dinâmicos basta usar no seu select algo como tabela_ & session("lang") e ter uma tabela para cada idioma.
Para carregar conteúdo estático eu apenas troquei o conteúdo por uma função, que usa uma tabela para o idioma padrão e uma outra tabela para cada um dos idiomas secundários. A função checa o idioma atual é o padrão do site, se sim apenas devolve o texto recebido, se não ela pesquisa este texto recebido para achar seu ID e em seguida pesquisa na tabela correspondente ao idioma atual o texto traduzido. Há dois pontos na função onde pose-se criar um log de textos não encontrados no idioma padrão e no idioma secundário respectivamente (comentados na função.)
'usar assim <%=trasnlate("Conteúdo aqui")%>
function t(s)
'se session(lang) for pt mostra o valor recebido,
'se não, procura o valor no bd para mostra no idioma correto
'o valor passado deve estar em pt
if session("lang") = "pt" then
trasnlate = s
else
'se o texto existe em pt
set lang_pt = abredb.Execute("select * from lang_pt where s = '"&s&"'")
if not lang_pt.EOF then
set lang_2 = abredb.Execute("select * from lang_en where id = "&lang_pt("id"))
if not lang_2.EOF then
trasnlate = lang_2("s")
else
trasnlate = s
'===> incluir aqui um log de pedidos de tradução para textos não encontrados
end if
if lang_2.state <> 0 then lang_2.close
else
'se session(lang) for pt mostra o valor recebido,
'se não, procura o valor no bd para mostra no idioma correto
'o valor passado deve estar em pt
if session("lang") = "pt" then
trasnlate = s
else
'se o texto existe em pt
set lang_pt = abredb.Execute("select * from lang_pt where s = '"&s&"'")
if not lang_pt.EOF then
set lang_2 = abredb.Execute("select * from lang_en where id = "&lang_pt("id"))
if not lang_2.EOF then
trasnlate = lang_2("s")
else
trasnlate = s
'===> incluir aqui um log de pedidos de tradução para textos não encontrados
end if
if lang_2.state <> 0 then lang_2.close
else
'===> incluir aqui um log de pedidos de tradução para textos não encontrados
trasnlate = s
end if
if lang_pt.state <> 0 then lang_pt.close
end if
end function
trasnlate = s
end if
if lang_pt.state <> 0 then lang_pt.close
end if
end function
Para mudar de idioma use links do tipo <a href="?lang=en" title="in English">English</a>.
Espero ter ajudado, esta função me quebrou um galho danado.
Olá amigo,
ResponderExcluirsou iniciante em asp, e estou precisando fazer exatamente isto.
nao teria como vc mandar os arquivos de exemplo por email, pra eu entender melhor a sua explicação?..
desde ja agradeço...
Abraços
Estou preparando um novo post com maiores esplicações, e pretendo colocar arquivos de exemplo para download nele.
ResponderExcluirOk Paulo,estarei aguardando. Muito Obrigado.
ResponderExcluirAbraços