PF2G Posted May 29, 2012 at 03:50 PM Report #458933 Posted May 29, 2012 at 03:50 PM (edited) Boa tarde, Eu estou a trabalhar num website onde tenho de traduzir uma paginas, mas a manieia como me pediram é traduzir as páginas de uma maneira um pouco confusa. Aqui vai: Tenho de criar 2 ficheiros lang_pt.php e o lang_en.php onde vão todos ter comum arrays onde sao feitas as traduções. lang_pt.php: <?PHP $lang['Family Office']="Family Office"; $lang['Multi Family Office']="Multi Family Office"; $lang['Foco']="Foco"; $lang['Serviços']="Serviços"; $lang['Valores']="Valores"; $lang['Seminários']="Seminários"; $lang['Contactos']="Contactos"; $lang['Português']="Português"; $lang['Inglês']="Inglês"; ?> lang_en.php: <?PHP $lang['Family Office']="Family Office"; $lang['Multi Family Office']="Multi Family Office"; $lang['Foco']="Foco"; $lang['Serviços']="Services"; $lang['Valores']="Values"; $lang['Seminários']="Seminars"; $lang['Contactos']="Contacts"; $lang['Português']="Portuguese"; $lang['Inglês']="English"; ?> Depois tenho de incluir os dois ficheiros noutro, common.php. É aqui que fica confuso...Tenho de incluir os ficheiros anteriores neste common.php e fazer switches para as linguagens (não tenho a certeza se esta bem): <?PHP $lang=$_GET['lang']; include 'lang_pt.php'; include 'lang_en.php'; echo $lang['Family Office']; echo $lang['Family Office']; echo $lang['Multi Family Office']; echo $lang['Foco']; echo $lang['Serviços']; echo $lang['Valores']; echo $lang['Seminários']; echo $lang['Contactos']; echo $lang['Português']; echo $lang['Inglês'];switch ($lang) { case "lang_pt.php": header ('Location: index.php?lang=pt'); die(); break; case "lang_en.php": header ('Location: index.php?lang=en'); die(); break; default: header ('Location: index.php?lang=pt'); die(); break; } ?> Depois incluir este ficheiro em todas as paginas para que faça a tradução. Acho que é o mais claro que consigo ser. Se for preciso vou tentar explicar melhor. Se me conseguirem ajudar agradeço... Obrigado, PF2G Edited May 29, 2012 at 05:10 PM by brunoais corrigi a formatação horrenda e adicionei o geshi!
johnmaia Posted May 29, 2012 at 04:10 PM Report #458942 Posted May 29, 2012 at 04:10 PM (edited) Assim? <?PHP switch ($_GET['lang']) { case "pt": include 'lang_pt.php'; break; case "en": include 'lang_en.php'; break; default: include 'lang_pt.php'; break; } echo $lang['Family Office']; echo $lang['Family Office']; echo $lang['Multi Family Office']; echo $lang['Foco']; echo $lang['Serviços']; echo $lang['Valores']; echo $lang['Seminários']; echo $lang['Contactos']; echo $lang['Português']; echo $lang['Inglês']; ?> Edited May 29, 2012 at 04:10 PM by johnmaia
HappyHippyHippo Posted May 29, 2012 at 04:26 PM Report #458949 Posted May 29, 2012 at 04:26 PM @johnmaria basta ser assim (não necessário repetir o 'pt'): switch ($_GET['lang']) { case "en": include 'lang_en.php'; break; default: include 'lang_pt.php'; break; } IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
johnmaia Posted May 29, 2012 at 04:28 PM Report #458951 Posted May 29, 2012 at 04:28 PM Sim, tens razão 🙂
HappyHippyHippo Posted May 29, 2012 at 04:31 PM Report #458952 Posted May 29, 2012 at 04:31 PM ok ... tirando esse aparte : essa maneira tem um pequeno problema : tens de ter sempre o argumento do pedido "lang=«lang»" senão será sempre português ... o que é chato se tiveres a ver o site em inglês ... ou guardas a variável em sessão ou será melhor "esconder" esse parâmetro no url (usando htaccess url rewrite) do género: http://o_meu_servidor/pt/ IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
PF2G Posted May 29, 2012 at 04:44 PM Author Report #458955 Posted May 29, 2012 at 04:44 PM (edited) é essa a maneira como estou a tentar fazer @HappyHipo.... Ja agora o teu case tem algo de errado pq da erro: diz que nao ta a espera do case 'en' Agora, estou a conseguir por em todas as paginas o default e as linguas, pq me aparecem os arrays todos corretos, mas eu quero é que me traduza o menu, pelo menos... E no meu case dá-me erro no lang: <?PHP include 'lang_pt.php'; include 'lang_en.php'; switch ($_GET['lang']) { case "pt": include 'lang_pt.php'; break; case "en": include 'lang_en.php'; break; default: include 'lang_pt.php'; break; } echo $lang['Family Office']; echo $lang['Multi Family Office']; echo $lang['Foco']; echo $lang['Serviços']; echo $lang['Valores']; echo $lang['Seminários']; echo $lang['Contactos']; echo $lang['Português']; echo $lang['Inglês']; ?> Como o john tinha feito. Outra coisa: é suposto ser header não include Edited May 29, 2012 at 05:11 PM by brunoais geshi!
johnmaia Posted May 29, 2012 at 04:51 PM Report #458956 Posted May 29, 2012 at 04:51 PM (edited) é essa a maneira como estou a tentar fazer @HappyHipo.... Ja agora o teu case tem algo de errado pq da erro: diz que nao ta a espera do case 'en' Agora, estou a conseguir por em todas as paginas o default e as linguas, pq me aparecem os arrays todos corretos, mas eu quero é que me traduza o menu, pelo menos... E no meu case dá-me erro no lang: <?PHP include 'lang_pt.php'; include 'lang_en.php'; switch ($_GET['lang']) { case "pt": include 'lang_pt.php'; break; case "en": include 'lang_en.php'; break; default: include 'lang_pt.php'; break; } echo $lang['Family Office']; echo $lang['Multi Family Office']; echo $lang['Foco']; echo $lang['Serviços']; echo $lang['Valores']; echo $lang['Seminários']; echo $lang['Contactos']; echo $lang['Português']; echo $lang['Inglês']; ?> Como o john tinha feito A maneira como eu te mostrei não tinha isto no inicio: include 'lang_pt.php'; include 'lang_en.php'; Nem podes ter isso ali. O que o HappyHippyHippo sugeriu foi substituires o meu case por algo mais simples. Que ficaria assim: switch ($_GET['lang']) { case "en": include 'lang_en.php'; break; default: include 'lang_pt.php'; break; } echo $lang['Family Office']; echo $lang['Multi Family Office']; echo $lang['Foco']; echo $lang['Serviços']; echo $lang['Valores']; echo $lang['Seminários']; echo $lang['Contactos']; echo $lang['Português']; echo $lang['Inglês']; ?> Edited May 29, 2012 at 04:56 PM by johnmaia
HappyHippyHippo Posted May 29, 2012 at 04:52 PM Report #458957 Posted May 29, 2012 at 04:52 PM o meu código não está errado ... muito provavelmente simplesmente não o copiaste bem, principalmente o caracter '{'. se queres fazer como tens, tens de eliminar os dois primeiros includes ... não faz sentido estares a fazer esses includes. IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
PF2G Posted May 29, 2012 at 04:55 PM Author Report #458959 Posted May 29, 2012 at 04:55 PM A maneira como eu te mostrei não tinha: include 'lang_pt.php'; include 'lang_en.php'; Nem podes ter isso ali. O que o HappyHippyHippo sugeriu foi substituires o meu case por algo mais simples. Que ficaria assim: switch ($_GET['lang']) { case "en": include 'lang_en.php'; break; default: include 'lang_pt.php'; break; } echo $lang['Family Office']; echo $lang['Multi Family Office']; echo $lang['Foco']; echo $lang['Serviços']; echo $lang['Valores']; echo $lang['Seminários']; echo $lang['Contactos']; echo $lang['Português']; echo $lang['Inglês']; ?> Mas continuo com um erro no $lang, e não estou a preceber pq...
HappyHippyHippo Posted May 29, 2012 at 04:57 PM Report #458961 Posted May 29, 2012 at 04:57 PM (edited) nem nós, porque simplesmente não dizes qual é o erro !!! PS : e não venhas dizer que é um erro do género invalid key 'lang' !!! se for isso não vou responder ... vou deixar que leias a mensagem de erro Edited May 29, 2012 at 04:58 PM by HappyHippyHippo IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
PF2G Posted May 29, 2012 at 05:03 PM Author Report #458964 Posted May 29, 2012 at 05:03 PM (edited) nem nós, porque simplesmente não dizes qual é o erro !!! PS : e não venhas dizer que é um erro do género invalid key 'lang' !!! se for isso não vou responder ... vou deixar que leias a mensagem de erro O erro que me dava no lang era que a variavel nao era definida. Entao substitui os includes por headers: <?PHP include 'lang_en.php'; include 'lang_pt.php'; switch ($_GET['lang']) { case "en": header ('Location: ?lang_en'); break; case "pt": header ('Location: ?lang=pt'); break; default: header ('Location: ?lang=pt'); die(); break; } echo $lang['Family Office']; echo $lang['Family Office']; echo $lang['Multi Family Office']; echo $lang['Foco']; echo $lang['Serviços']; echo $lang['Valores']; echo $lang['Seminários']; echo $lang['Contactos']; echo $lang['Português']; echo $lang['Inglês']; ?> só me falta que ele acrescente a página .php e depois ?lang=pt - exemplo:. index.php?lang=pt e depois as traduções direitas Edited May 29, 2012 at 05:11 PM by brunoais GESHI!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
brunoais Posted May 29, 2012 at 05:12 PM Report #458967 Posted May 29, 2012 at 05:12 PM Já agora... e se a key 'lang' não estiver no array $_GET? "[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%.
PF2G Posted May 29, 2012 at 05:15 PM Author Report #458968 Posted May 29, 2012 at 05:15 PM mas tem de estar pq ele vai buscar o array para as outras paginas, não? pelo menos do meu ponto de vista
HappyHippyHippo Posted May 29, 2012 at 05:16 PM Report #458969 Posted May 29, 2012 at 05:16 PM epa .. ja te disseram mais de 3 vezes para não fazeres os primeiros 2 includes e deixares isso para dentro do switch ... porque que é que ignoras o que te dizem ??? e deverias dizer exactamente o que aparece ... porque senão andamos aqui a bater no velhinho a tentar descobrir através de uma bola de cristal !!! o que dá não é um erro mas sim um warning ..... está a dizer que quando fazes include do ficheiro "lang_XX.php" a variável $lang do array não está declarada conclusão: 1º - APAGA OS PRIMEIROS DOIS INCLUDES !!!!!!! 2º - volta a meter o switch como te disseram 3º - declara a variável $lang antes do switch ou no início de cada ficheiro "lang_XX.php" IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
johnmaia Posted May 29, 2012 at 05:20 PM Report #458972 Posted May 29, 2012 at 05:20 PM (edited) Sabes o que é uma variável que é transportada no array _GET, PF2G? http://php.net/manua...riables.get.php E já agora aqui explica-te como se declara um array: http://php.net/manua...types.array.php A maneira como nós colocamos aqui funciona, se o pedaço de código for importado dentro da tua página.php, e se no url contiver essa variável. Tipo: www.atuapagina.com/index.php?lang=en Edited May 29, 2012 at 05:24 PM by johnmaia
MASNathan Posted May 29, 2012 at 10:43 PM Report #459029 Posted May 29, 2012 at 10:43 PM Boas, sou novo nestas andanças e não sei se esta é a forma mais correcta de tratar esta questão... mas que quiseres usar uma variável de sessão (desta forma não precisas de estar a por coisas no url) podes fazer desta forma <?php $lang_possivel = array('pt', 'en'); session_start(); if(isset($_SESSION['lang']) && in_array($_SESSION['lang'], $lang_possivel)){ require_once 'lang_' . $_SESSION['lang'] . '.php'; }else{ //Linguagem por defeito $_SESSION['lang'] = 'pt'; require_once 'lang_pt.php'; } echo $lang['Family Office'].'<br />'; echo $lang['Family Office'].'<br />'; echo $lang['Multi Family Office'].'<br />'; echo $lang['Foco'].'<br />'; echo $lang['Serviços'].'<br />'; echo $lang['Valores'].'<br />'; echo $lang['Seminários'].'<br />'; echo $lang['Contactos'].'<br />'; echo $lang['Português'].'<br />'; echo $lang['Inglês']; Assim podes adicionar as linguagens que quiseres sem teres de adicionar mais linhas de código basta alterares o valor da array $lang_possivel PS: Alguém pode me dizer como eu mostro o código com a formatação de php?
Rui Carlos Posted May 30, 2012 at 01:30 AM Report #459044 Posted May 30, 2012 at 01:30 AM PS: Alguém pode me dizer como eu mostro o código com a formatação de php? Usa a tag code=php (em vez de apenas code). 1 Report Rui Carlos Gonçalves
PF2G Posted May 30, 2012 at 09:13 AM Author Report #459068 Posted May 30, 2012 at 09:13 AM Boas, sou novo nestas andanças e não sei se esta é a forma mais correcta de tratar esta questão... mas que quiseres usar uma variável de sessão (desta forma não precisas de estar a por coisas no url) podes fazer desta forma <?php $lang_possivel = array('pt', 'en'); session_start(); if(isset($_SESSION['lang']) && in_array($_SESSION['lang'], $lang_possivel)){ require_once 'lang_' . $_SESSION['lang'] . '.php'; }else{ //Linguagem por defeito $_SESSION['lang'] = 'pt'; require_once 'lang_pt.php'; } echo $lang['Family Office'].'<br />'; echo $lang['Family Office'].'<br />'; echo $lang['Multi Family Office'].'<br />'; echo $lang['Foco'].'<br />'; echo $lang['Serviços'].'<br />'; echo $lang['Valores'].'<br />'; echo $lang['Seminários'].'<br />'; echo $lang['Contactos'].'<br />'; echo $lang['Português'].'<br />'; echo $lang['Inglês']; Assim podes adicionar as linguagens que quiseres sem teres de adicionar mais linhas de código basta alterares o valor da array $lang_possivel PS: Alguém pode me dizer como eu mostro o código com a formatação de php? Ajudou muito obrigado... Mas tive de fazer umas alterações (espero que não esteja errado), e há um problema é que ele nao passa para ingles...e quando estiver na lingua escolhida deve aparecer "www.link.com/page.php?lang=pt". Como é que faço? <?php include 'lang_pt.php'; include 'lang_en.php'; $lang = array('pt', 'en'); session_start(); if(isset($_SESSION['lang']) && in_array($_SESSION['lang'], $lang)) { include 'lang_'.$_SESSION['lang'].'.php'; } else { //Default header ('Location: ?lang=pt'); die(); break; } echo $lang['Family Office'].'<br />'; echo $lang['Multi Family Office'].'<br />'; echo $lang['Foco'].'<br />'; echo $lang['Serviços'].'<br />'; echo $lang['Valores'].'<br />'; echo $lang['Seminários'].'<br />'; echo $lang['Contactos'].'<br />'; echo $lang['Português'].'<br />'; echo $lang['Inglês']; ?>
MASNathan Posted May 30, 2012 at 09:51 AM Report #459084 Posted May 30, 2012 at 09:51 AM Boas, antes de mais nada não percebo porque tanto insistes em fazer os includes no inicio. Lê com atenção esta pagina sobre os includes e os requires http://webpub.wordpr...e-include_once/ <?php //Available Lang $lang_possivel = array('pt', 'en'); //SET SESSION LANG session_start(); //ver se existe a var lang no url --> www.meusite.com\page.php?lang=en if(isset($_GET['lang']) && in_array($_GET['lang'], $lang_possivel)){ $_SESSION['lang'] = $_GET['lang']; }else{ $_SESSION['lang'] = 'pt'; } //Incluir a linguagem if(isset($_SESSION['lang']) && in_array($_SESSION['lang'], $lang_possivel)){ require_once 'lang_' . $_SESSION['lang'] . '.php'; } //mostrar as cenas echo $lang['Family Office'].'<br />'; echo $lang['Family Office'].'<br />'; echo $lang['Multi Family Office'].'<br />'; echo $lang['Foco'].'<br />'; echo $lang['Serviços'].'<br />'; echo $lang['Valores'].'<br />'; echo $lang['Seminários'].'<br />'; echo $lang['Contactos'].'<br />'; echo $lang['Português'].'<br />'; echo $lang['Inglês']; outra coisa, também nao percebo porque fazes isto header ('Location: ?lang=pt'); die(); break;
PF2G Posted May 30, 2012 at 09:59 AM Author Report #459088 Posted May 30, 2012 at 09:59 AM Eu tenho aqui numa folha um esboço e fiquei com a panca dos includes no inicio, peço desculpa. Ja percebi o teu codigo, so tenho uma pergunta como e que vais buscar o "?lang=pt"?! Assim so tenho de ir as outras paginas e ir buscar os echos, depois no portgues | ingles por o <a href="?lang=...". (corrige-me se tive errado).
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now