Pergunta

Eu estou construindo um site / francês Inglês e queria saber se existe uma melhor prática para o trabalho de um tal.

  1. A duplicação do site e fazer uma pasta Francês e Inglês com o interior local apropriado.

  2. Usando PHP para trocar o conteúdo com HTML tags. por exemplo. if ($ lang == 'en'):

  3. Use php para trocar apenas o conteúdo deixando a tags HTML o mesmo para ambos. por exemplo. se as declarações em todo o lugar. Será que isso é ruim para a eficiência?

Qualquer outra sugestão seria apreciada

Foi útil?

Solução

Temos um quadro no lugar para quando (se) o nosso site vai internacional que trabalha como este ...

estrutura

Pasta;

/
  lang/
    english/
      images/
      text/
    dutch/
      images/
      text/

Qualquer texto ou imagens que são específicos linguagem são removidos da página diretamente e substituído por constantes. por exemplo Na tela de login, nós deixamos cair dentro;

echo TEXT_LOGIN_WELCOME;

a qual é definida em /lang/english/text/login.php como;

define('TEXT_LOGIN_WELCOME', 'Welcome, please login:');

mas em /lang/dutch/text/login.php é definido como;

define('TEXT_LOGIN_WELCOME', 'Welcome, please login (in dutch):'); 

; -)

Cada idioma definir arquivo é chamado exatamente o mesmo que a página é utilizada para, então quando nós carregar uma página virada para o público, que só precisa descobrir o idioma que o usuário fala e podemos incluir o idioma relevante definir arquivo .

A boa coisa sobre este sistema é que toda a informação que a linguagem é centralizado. Quando você precisa adicionar um novo idioma, basta copiar a pasta principal (Inglês?), Renomeá-lo, fechar a coisa toda e enviá-lo para um serviço de tradução para trabalhar sua mágica. Claro, a desvantagem deste sistema é a manutenção de ambas as línguas e crescer conteúdo ... Se alguém tiver alguma idéia brilhante em relação a isso, então eu adoraria ouvi-los!

Btw, se você acabar precisando de adivinhar a localização de um usuário por IP, você pode querer verificar geoip .

Outras dicas

Use um sistema de templates. Smarty Template é provavelmente um dos mais PHP mais conhecidos. Não só um sistema de templates servir o propósito exato que você está tentando realizar, também faz a manutenção de páginas muito mais fácil, separando o código de exibição do conteúdo (que também permite que você use o mesmo modelo para lotes de diferentes páginas de conteúdo de um natureza similar).

Como a maneira mais simples que eu recomendo que você use i18n internacionalização método & gettext catálogos (.po arquivos).
O famoso WordPress projeto é usá-lo bem .

1 - A duplicação de todo o site irá forçá-lo a repetir a cada código de touch-up para as 2 pastas: - [

2 - Se você somenting média como

<?php if($lang=='en') { ?>  
  <p>English text</p>  
<? } else { ?>  
  <p>Text français</p>  
<? } ?>

Esta solução é perfeita para administrar duas línguas na mesma página.
Mas você ainda ter duplicado tags.

3 - Alterar apenas o conteúdo é realmente satisfação
. Talvez proliferar de se declarações podem pesar php compilar ... Eu não sei.
Enfim documento pode ser mais conciso com esta abordagem:

<?php            
  function interpreter($buffer) {
    $pieces = explode('#', $buffer);

    if (isset($_GET['lang'])) $begin=$_GET['lang'];
    else $begin = 1;  // 1 to display français, 2 to display english

    $tot = count($pieces);          

    for ($i=$begin; $i<$tot; $i+=3) {  // remove one language
    unset($pieces[$i]); }

    foreach ($pieces as $value) {  // recompose the text
    $output .= $value; }

    return $output;
  }

  ob_start("interpreter");      
?>

<a href="?lang=#1#2#">#Français#English#</a>
<p>#English text#Texte français#.</p>

<?php ob_end_flush() ?>

O texto entre ob_start e ob_end_flush é analisado depois de compilar php.
Isso significa que são cadeias afetadas próximos eg. ecos declaração, e não dentro tags.
Também o conteúdo vindo de php incluir é afetado.
Mas não css externo ou javascript.

Tenha atenção delimitador # não é um caracter ainda usado em outro lugar.
Talvez você prefira substituir com || ou ^^

É claro que no futuro você pode adaptar esta solução em 3 idiomas ou mais. Mas se você tem que inserir o "Terceiro idioma de tradução #" em muitas linhas de um local grande, talvez a solução de MATW você se encaixa.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top