Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

joaohenrique010

Problema com funções (PHP)

Recommended Posts

*lidfe = Language Is Diferent From English

$lidfe é igual a zero.

 

Quando $lidfe for igual a zero (a linguagem for Inglês) nada acontece. Caso o cookie language não esteja vazio E seu valor não seja English (inglês), a variável $lidfe passa a ter valor igual a 1.

 

Se $lidfe for igual a 1, caso o cookie language tenha valor "Portuguese" incluir-se-á um arquivo que altera variáveis do inglês (padrão) para o português. Caso o cookie language tenha o valor "Spanish" incluir-se-á um arquivo que altera variáveis do inglês (padrão) para o espanhol. Lembrando que o switch só valerá caso o cookie não esteja vazio E, no caso de não estiver vazio, não estar preenchido com "English".

<?php
$lidfe = 0;
if (!empty($_COOKIE['language']) && ($_COOKIE['language'] != 'English')) {
$lidfe = 1;
} 
if ($lidfe == 1) {
switch ($_COOKIE['language']) {
     case "Portuguese":
include "/languages/pt.php";
break;


case "Spanish":
include "/languages/es.php";
break;
}
}
?>

Após explicar-lhes o código, eis a minha dúvida:

ao tentar alterar o código acima para esse abaixo, o script parou de funcionar:

<?php
include "/functions/functions.php";
$lidfe = 0;
if (!empty($_COOKIE['language']) && ($_COOKIE['language'] != 'English')) {
$lidfe = 1;
} 
if ($lidfe == 1) {
checklang();
}
?>

Arquivo functions.php:

<?php
function checklang() {
switch ($_COOKIE['language']) {
      case "Portuguese":
 include "/languages/pt.php";
      break;


 case "Spanish":
 include "/languages/es.php";
 break;
 } 


}
?>

O que estou fazendo de errado?

 

*observação: os arquivos pt.php e es.php contém variáveis com os mesmos nomes só que com conteúdos diferentes (pt.php em português e es.php em espanhol)

 

O erro é o seguinte:

"Notice: undefined variable: greeting in C:\xampp\htdocs\index.php on line 11"

Na linha 11 do arquivo "index.php" eu chamo, através do "echo", a variável $greeting, que fora definida nos arquivos pt.php e es.php.

 


Outra coisa: quero utilizar uma função para economizar alguns bytes e para evitar futuros erros!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Se o include é feito dentro da função, as variáveis criadas lá são locais. Estude sobre Escopo de Variáveis, que entenderá o motivo disso.

 

Há algumas alternativas, dentre elas:

 

1. A função retornar um array com as traduções, em vez de apenas incluir (require) um arquivo

2. Usar variáveis globais

 

Eu recomendo não usar variáveis globais sem necessidade. Seu programa ficará mais organizado e fácil de entender

Compartilhar este post


Link para o post
Compartilhar em outros sites

Dê uma pesquisada por "site multilingue php" no Google, que verá alguns exemplos.

 

Muitos frameworks usam uma função para traduzir. Assim não é necessário usar variável global.

A ideia é mais ou menos esta:

 

1. Cada texto possui um identificador (um índice de array, por exemplo). Elas ficam salvas em scripts específicos de cada idioma. Por exemplo:

 

pt_BR.php

 

$text['car'] = 'Carro';

 

en.php

$text['car'] = 'Car';

 

 

2. Crie um função que, conforme o idioma selecionado, busque uma string nesses arquivos. Algo assim:

 

function trnaslate( $str )
{
     $lang = idioma selecionado;
     require_once $lang . '.php';
     return $text[ $str ];
} 

 

 

3. Onde quiser exibir o texto traduzido, basta chamar:

 

echo translate( 'car' );

 

 

A ideia geral é essa. Dá pra melhorar, aprimorar, dá para usar XML, JSON ou banco de dados em vez de um simples script php para salvar os textos

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.