• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

Gurzi

[codeBetter] codeBetter, o que é ?

118 mensagens neste tópico

Olá caros utilizadores da comunidade Portugal a Programar.

Para todos os users que frequentam este fórum, não passa de um dilema super normal na vida de cada um, o facto de termos que lidar com código elaborado por outros "colegas" de trabalho que na maior parte das vezes não se encontra ao que nós consideramos, "na normalidade ou bem elaborado".

A equipa de Moderadores e Administração do Portugal a Programar decidiu então criar o codeBetter. Como o nome indica, pretendemos que todos passem a programar de uma forma mais adequada.

Acredito que neste momento, muitos de vocês estão a pensar que cada um tem a sua forma de programar, tem toda a razão, mas existem standards que se podem seguir( code Standarts) e muita gente não o faz.

Para cada objectivo, existem 1001 maneiras de o atingir utilizando uma orientação a objectos , ou não, mas certamente existe uma que se demonstra mais rápida e eficaz e se possível em menos número de linhas de código.

Decidimos assim lançar o codeBetter primariamente na secção PHP.

Algumas pontos a ter em atenção :

1 º Todos os utilizadores podem e devem participar .

2º É esperado discussões, debates sobre possíveis maneiras de atingir um certo objectivo.

3 º Todas e quaisqueres discussões devem ter em conta que nunca se pode ofender qualquer utilizador, seja qual for a sua opinião.

4º Qualquer tema de discussão diferente do lançado terá que ser iniciado por mim, portanto para sugestões utilizem as mensagens privadas em meu nome.

5º Em caso de problemas complexos, a demonstração do algoritmo em conjunto com o código poderá ajudar muita gente.

A vossa participação só vos poupa trabalho, ensinem e estão a contribuir para uma comunidade com mais nível.

Neste tópico irá ser armazenado o link para os codeStandards de PHP em Língua Portuguesa que iremos disponibilizar em breve.

Peço que enviem sugestões de debates por mensagem privadas.  :P

Com os melhores cumprimentos,

A equipa Portugal a Programar

--------------------------------------------------------------------------------------------------------------------------------------------

EXERCÍCIO  DE ARRANQUE : Multi Idioma num web site.

-> Apresentem a vossa solução para este exercício e critiquem ajudando a melhorar as soluções dos outros utilizadores que já inseriram as suas soluções

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Bem, é ao gosto do freguês essa do multi-idioma. Uma boa solução (a que eu escolheria) é a usada pelo SMF: um array de strings, em que existia uma ficheiro para cada linguagem com as várias strings traduzidas, pronto a fazer include. Outra solução (que é usada em muitos programas, tais como o emesene) é o uso de ficheiros .po. Há muitas opções. :P

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Bem, é ao gosto do freguês essa do multi-idioma. Uma boa solução (a que eu escolheria) é a usada pelo SMF: um array de strings, em que existia uma ficheiro para cada linguagem com as várias strings traduzidas, pronto a fazer include. Outra solução (que é usada em muitos programas, tais como o emesene) é o uso de ficheiros .po. Há muitas opções. :P

Pretende-se a demonstração por código juntamente com a explicação como fizes-te, se puderes apresenta a solução em código da qual acreditas ser a mais vantajosa.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Bem, é ao gosto do freguês essa do multi-idioma.

É esperado discussões, debates sobre possíveis maneiras de atingir um certo objectivo.

É essa a piada, discutir formas diferentes de fazer o mesmo :P

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Pretende-se a demonstração por código juntamente com a explicação como fizes-te, se puderes apresenta a solução em código da qual acreditas ser a mais vantajosa.

A demonstração por código está feita, basta apenas ler a parte do "usada pelo SMF" e "que é usada em muitos programas, tais como o emesene", não me parece que vá aparecer sites de exemplo para explicar algo que já foi implementado. :P
0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Bom eu fiz um para o rodimentar :P mas é o melhor que sei porque já não mexo nisto a 2 anitos X)

index.php:

<html>
<head>
<? 
$lang=$_GET["lang"];
if ($lang=="PT" || $lang=="EN") {
   include("lang/" . $lang . ".LNG");
}else{
   include("lang/PT.LNG");
}
?>
<title><? echo $title; ?></title>
</head>
<body>
<? echo $txt; ?>
</body>
</html>

e agora cria-se uma pasta chamada lang. e mete-se 2 ficheiros cujo são:

PT.LNG

<?
$title="Titlo em Português";
$txt="Texto em Português";
?>

e outro:

EN.LNG

<?
$title="Title in English";
$txt="Text in English";
?>

para testar basta entrarem tipo:

http://localhost/multi/index.php?lang=EN'>http://localhost/multi/index.php?lang=EN

ou

http://localhost/multi/index.php?lang=PT'>http://localhost/multi/index.php?lang=PT

ou simplesmente

http://localhost/multi/index.php

=)

simples e rudimentar :P

desculpem ser tão fraco em php =P

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Viva,

Já experimentaram usar a seguinte forma:

echo _("blabla");

Depois a linguagem é carregada em forma binária, tornando-se muito mais rápido.

Abraços,

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Viva,

Já experimentaram usar a seguinte forma:

echo _("blabla");

Depois a linguagem é carregada em forma binária, tornando-se muito mais rápido.

Abraços,

não sabia :o

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

zero-cool, isso é exactamente aquilo que referi ali em cima (.po), mas não sabia esse shortcut. :biggrin:

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Bem, é ao gosto do freguês essa do multi-idioma. Uma boa solução (a que eu escolheria) é a usada pelo SMF: um array de strings, em que existia uma ficheiro para cada linguagem com as várias strings traduzidas, pronto a fazer include. Outra solução (que é usada em muitos programas, tais como o emesene) é o uso de ficheiros .po. Há muitas opções. :P

Link, plz. Estou a precisar de algo disso.

O único site que já fiz com multi-tradução usava um sistema alto "pesado". Tinha as strings todas numa BD (id, idstring, idlang, string) e depois, de acordo com o idlang (que ia ser buscado através de uma query nos dados do utilizador) era mostrada a string.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Link, plz. Estou a precisar de algo disso.

Isso = o quê? O uso de ficheiros .po foi ali mostrado em cima, o do SMF é só sacares o package e veres os ficheiros das strings (está dentro da pasta do tema).
0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Viva,

Já experimentaram usar a seguinte forma:

echo _("blabla");

Depois a linguagem é carregada em forma binária, tornando-se muito mais rápido.

Abraços,

Podes explicar melhor isso?

o que eu fiz para o site das conversões (http://www.portugal-a-programar.pt/index.php?showtopic=14964) era uma função que sempre que quise-se exportar texto chamava-a, e colocava o código para o texto, text("ERROR"), depois a função vai buscar o texto correspondente á linguagem selecionada a um fichiro .ini (pt.ini).

ps:no processo de selecção do idioma, ele é selecionado altomáticamente consuante as preferencias do browser

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

<?

if(isset($HTTP_GET_VARS['l'])) {
$ln = $HTTP_GET_VARS['l'];
if (!get_magic_quotes_gpc()) $p = addslashes($ln);

if($p == "pt") require_once("includes/pt.txt");
elseif($p == "en") require_once("includes/en.txt");
elseif($p == "es") require_once("includes/es.txt");
else require_once("includes/pt.txt");

}
else require_once("includes/pt.txt");


?>


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">

<head>
<title><?=$titulo; ?></title>
<meta http-equiv="content-type" content="text/html;charset=utf-8" />
</head>

<body>
<a href="?l=pt"><img src="bandeiraportugal.png"></a> | <a href="?l=en"><img src="bandeiraengland.png"></a> | <a href="?l=es"><img src="bandeiraespanha.png"></a>
<?=$maintextandotheshits; ?>
</body>
</html>

Agora os ficheiros das linguagens serão algo do tipo:

includes/pt.php

<?
$titulo="SUPER PÁG LOL ";
$maintextandothershits="LULZ CONTENT ";
?>

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Bem, eu no meu script nzFotolog (que já comecei há uns tempos) usava a técnica mais fácil/comum (penso eu), que era ter 2 ficheiros PHP com strings num array onde as keys dos arrays identificavam o texto. Depois era só fazer include do ficheiro necessário.

No entanto, num novo script que estou a desenvolver (e possivelmente no futuro) irei usar ficheiros XML para guardar todas as strings de texto e como é em XML, todos sabem como é que poderemos guardar essas coisas, existindo várias formas dentro do XML, mas resumindo, pode-se ter aquilo bem organizado. E depois, para ler o XML tenho usado o SimpleXML do PHP5 e pronto...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Bem, eu no meu script nzFotolog (que já comecei há uns tempos) usava a técnica mais fácil/comum (penso eu), que era ter 2 ficheiros PHP com strings num array onde as keys dos arrays identificavam o texto. Depois era só fazer include do ficheiro necessário.

É exactamente isso que o SMF usa. :confused:
0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Mas desse metodo para este novo que estou a usar, não muda grande coisa. A ideia é a mesma, mas prefixo com XML, de certa forma, abstrai-se o código de coisas que não interessam ser programadas. Por mais simples que o PHP seja de programar e qualquer pessoa entenda um ficheiro de código PHP onde apenas existe um ou vários arrays apenas com strings, acho muito mais simpático um ficheiro XML.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Mas desse metodo para este novo que estou a usar, não muda grande coisa. A ideia é a mesma, mas prefixo com XML, de certa forma, abstrai-se o código de coisas que não interessam ser programadas. Por mais simples que o PHP seja de programar e qualquer pessoa entenda um ficheiro de código PHP onde apenas existe um ou vários arrays apenas com strings, acho muito mais simpático um ficheiro XML.

Sim, nesse ponto tens razão. Mas não sei até que ponto é que isso não afecta em performance... E pessoalmente, eu usaria .po em vez de XML pelo facto de o .po ter sido feito para isso.
0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não conhecia esse formato .po, mas acabei de ver um exemplo de como é estruturado... Que nhaca! Não obrigado, prefiro o meu XML!

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não conhecia esse formato .po, mas acabei de ver um exemplo de como é estruturado... Que nhaca! Não obrigado, prefiro o meu XML!

Pois, são opções, e o XML até evitava alguns problemas do uso do .mo
0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

<?

if(isset($HTTP_GET_VARS['l'])) $ln = $HTTP_GET_VARS['p'];
else require_once("includes/pt.txt");# <-

if (!get_magic_quotes_gpc()) $p = addslashes($ln);

if($p == "pt") require_once("includes/pt.txt"); #<-
elseif($p == "en") require_once("includes/en.txt");
elseif($p == "es") require_once("includes/es.txt");
else require_once("includes/pt.txt");

Basta eu chamar script.php?p=pt que ficas logo na m*rda à pala do require_once porque vais incluir o file 2x.

Além disso, o $HTTP_GET_VARS apenas existe no PHP5 para compatibilidade com o PHP4, no PHP6 vai deixar de existir.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Oh, eu é que me enganei ai :confused:.

É assim:

<?

if(isset($HTTP_GET_VARS['l'])) { 
$ln = $HTTP_GET_VARS['l'];
if (!get_magic_quotes_gpc()) $p = addslashes($ln);

if($p == "pt") require_once("includes/pt.txt"); #<-
elseif($p == "en") require_once("includes/en.txt");
elseif($p == "es") require_once("includes/es.txt");
else require_once("includes/pt.txt");
}
else require_once("includes/pt.txt");


Vou corrigir :D.

Assim

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Mais simples:

switch($_GET['l']){
    case "en":
    case "es":
    case "pt"
        require "includes/".$_GET['l'].".txt";
        break;
    default:
        require "includes/pt.txt";
}

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora