Maneira mais eficiente ao modelo um site multilingue
-
22-07-2019 - |
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.
-
A duplicação do site e fazer uma pasta Francês e Inglês com o interior local apropriado.
-
Usando PHP para trocar o conteúdo com HTML tags. por exemplo. if ($ lang == 'en'):
-
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
Solução
Temos um quadro no lugar para quando (se) o nosso site vai internacional que trabalha como este ...
estruturaPasta;
/
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 php?> 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.