Jump to content

Traduções


Go to solution Solved by MASNathan,

Recommended Posts

Posted (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 by brunoais
corrigi a formatação horrenda e adicionei o geshi!
Posted (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 by johnmaia
Posted

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
Posted (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 by brunoais
geshi!
Posted (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 by johnmaia
Posted

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

Posted (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 by HappyHippyHippo
IRC : sim, é algo que ainda existe >> #p@p
Posted (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 by brunoais
GESHI!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Posted

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%.

Posted

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
Posted (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 by johnmaia
Posted

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?

Posted

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'];
?>
Posted

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;
Posted

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).

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • 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.