Question

Je suis en train de construire un site Web anglais / français et je me demandais s'il existait une bonne pratique pour un tel travail.

  1. Dupliquer le site et créer un dossier français et anglais avec le site approprié à l'intérieur.

  2. Utiliser PHP pour échanger le contenu avec des balises HTML. par exemple. if ($ lang == 'en'):

  3. Utilisez php pour échanger uniquement le contenu en laissant les balises html identiques. par exemple. si des déclarations partout. Serait-ce mauvais pour l'efficacité?

Toute autre suggestion serait appréciée

Était-ce utile?

La solution

Nous avons un cadre en place pour que notre site soit international si (si) il fonctionne comme ceci ...

Structure des dossiers;

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

Tout texte ou toute image spécifique à une langue est directement supprimé de la page et remplacé par des constantes. Par exemple, sur l'écran de connexion, nous passons;

echo TEXT_LOGIN_WELCOME;

défini dans /lang/english/text/login.php comme;

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

mais dans /lang/dutch/text/login.php, il est défini comme;

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

; -)

Chaque fichier de définition de langue porte exactement le même nom que la page pour laquelle il est utilisé. Ainsi, lorsque nous chargeons une page destinée au public, nous n'avons plus qu'à déterminer la langue parlée par l'utilisateur et à inclure le fichier de définition de langue correspondant. .

La bonne chose à propos de ce système est que toutes les informations sur la langue sont centralisées. Lorsque vous devez ajouter une nouvelle langue, copiez simplement le dossier principal (anglais?), Renommez-le, compilez le fichier dans son intégralité et envoyez-le à un service de traduction pour qu'il fonctionne comme par magie. Bien sûr, l’inconvénient de ce système est la maintenance alors que les langues et le contenu évoluent ... Si quelqu'un a des idées brillantes à ce sujet, alors j'aimerais les entendre!

Btw, si vous devez deviner l'emplacement d'un utilisateur par IP, vous pouvez vérifier geoIP .

Autres conseils

Utilisez un système de templates. Le moteur de modèles Smarty est probablement l'un des plus connus de PHP. Non seulement un système de templates sert-il exactement le but recherché, il facilite également la maintenance des pages en séparant le code d'affichage du contenu (ce qui vous permet également d'utiliser le même modèle pour de nombreuses pages de contenu différentes d'un même fichier). nature similaire).

Comme méthode la plus simple, je vous recommande d'utiliser la méthode d'internationalisation i18n . & amp; gettext catalogues (fichiers .po).
Le célèbre projet WordPress est l’utilise aussi .

1 : la duplication de l'ensemble du site vous oblige à répéter chaque retouche de code dans les 2 dossiers: - [

2 - Si vous voulez dire quelque chose comme

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

Cette solution est idéale pour gérer deux langues dans la même page.
Mais vous avez toujours des tags en double.

3 : vous ne modifiez que le contenu, c'est vraiment une satisfaction.
Peut-être que proliférer de si les déclarations peuvent alourdir la compilation de PHP ... je ne sais pas.
Quoi qu'il en soit, le document peut être plus concis avec cette approche:

<?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() ?>

Le texte entre ob_start et ob_end_flush est analysé APRÈS la compilation php.
Cela signifie que les chaînes affectées arrivent, par exemple. de la déclaration echo, pas à l'intérieur < ? php? > balises.
Le contenu provenant de php inclut également IS est affecté.
Mais PAS css externe ou javascript.

Conserver le délimiteur d'attention # n'est pas un caractère encore utilisé ailleurs.
Peut-être préférerez-vous remplacer par || ou ^^

Bien sûr, à l'avenir, vous pourrez adapter cette solution en 3 langues ou plus. Mais si vous devez insérer le & Quot; traduction en troisième langue # & Quot; dans de nombreuses lignes d’un grand site, la solution de MatW vous convient peut-être.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top