IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Conception Web Discussion :

Site multilingue - méthode ?


Sujet :

Conception Web

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1
    Points : 1
    Points
    1
    Par défaut Site multilingue - méthode ?
    Bonjour à tous ,

    je cherche en ce moment comment je pexu créer un site multilingue. J'ai lu plusieurs articles sur ça comme la méthode d'un dico mais elle me convient très peu.

    Enfin j vous explique un peu :

    Quand l'internaute arrive sur mon site il a le choix entre plusieurs langues. Après avoir cliquer celle qu'il désire il arrive sur le site traduit dans sa langue. Le problème c'est que c'est des textes entier écrit en différents languages. Je ne sais vraiment pas comment m'y prendre.

    J'ai entendu parler des Templates pour des sites multilingues.

    J'ai pas envie de créer x pages pour x langues . J'aimerai créer une unique page et suivant la langue choisit l'utilisateur la page va loader les parties ( menus, flash ... ) spécifique au language.

    Je sais pas si vous m avez bien compris . Si ce n'est le cas , demandez moi des précisions.

    merci de votre aide

  2. #2
    Membre du Club
    Inscrit en
    Octobre 2004
    Messages
    68
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 68
    Points : 54
    Points
    54
    Par défaut Re: site multilingue - méthode ?
    Citation Envoyé par khephren
    Bonjour à tous ,




    J'ai pas envie de créer x pages pour x langues . J'aimerai créer une unique page et suivant la langue choisit l'utilisateur la page va loader les parties ( menus, flash ... ) spécifique au language.
    Les templates ne font pas que ça.

    Tu peux plutôt utiliser les bases de données puis tu met des variable sur ta page pour qui

    if lang=ça

    alors affiche la table x

    De la même maière que fonctionne les templates.

  3. #3
    Membre chevronné Avatar de Oluha
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    2 183
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 183
    Points : 1 967
    Points
    1 967
    Par défaut
    ce pendant je trouve la méthode la la base de donées très lourde si tu as beaucoup de contenu à afficher.
    Mais bon, il faut voir aussi si tes données sont mises à jour souvent ou pas.

  4. #4
    Membre du Club
    Inscrit en
    Octobre 2004
    Messages
    68
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 68
    Points : 54
    Points
    54
    Par défaut
    Citation Envoyé par Oluha
    ce pendant je trouve la méthode la la base de donées très lourde si tu as beaucoup de contenu à afficher.
    Tu as raison, il n'y a-t-il pas d'autres solution plus rapide que les base de données

  5. #5
    Rédacteur

    Avatar de khayyam90
    Homme Profil pro
    Architecte de système d’information
    Inscrit en
    Janvier 2004
    Messages
    10 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Architecte de système d’information

    Informations forums :
    Inscription : Janvier 2004
    Messages : 10 369
    Points : 40 164
    Points
    40 164
    Par défaut
    bon, deja il va falloir un langage un peu plus evolue que le simple html, mais ca, tout le monde l'avait devine.

    a part la base de donnees(lourde) et un grand switch($lang) decrivant la page dans chacune des langues, je ne vois pas grand chose d'autre.

    La premiere methode donnera des scripts assez petits mais une base tres (trop) sollicitee. La seconde methode donnera des scripts tres gros ou bien, dans le cas ou l'on preferera dispatcher les infos dans plusieurs fichiers, des petits scripts et plein de fichiers annexes.

  6. #6
    Membre du Club
    Inscrit en
    Octobre 2004
    Messages
    68
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 68
    Points : 54
    Points
    54
    Par défaut
    Peut -on utilise rles fichiers textes (.txt) pour stocker les inforations ?

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 66
    Points : 85
    Points
    85
    Par défaut
    J'utilise un fichier XML par page (ou par module, selon la taille des pages) et par langue.

    Donc en gros cela donne:

    FR
    - accueil.xml
    - contacts.xml

    EN
    - accueil.xml
    - contacts.xml


    Ensuite, je parse le fichier requis et stocke les couples "clé => valeur" dans un tableau associatif (qui sera ensuite sérialisé : le résultat étant stocker dans un fichier pour faire un cache et gagner en performance).

  8. #8
    Rédacteur

    Avatar de khayyam90
    Homme Profil pro
    Architecte de système d’information
    Inscrit en
    Janvier 2004
    Messages
    10 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Architecte de système d’information

    Informations forums :
    Inscription : Janvier 2004
    Messages : 10 369
    Points : 40 164
    Points
    40 164
    Par défaut
    Citation Envoyé par microcongo
    Peut -on utilise rles fichiers textes (.txt) pour stocker les inforations ?
    absolument, tu peux prendre n'importe quel type de fichiers, meme le type .toto si ca te chante

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 60
    Points : 81
    Points
    81
    Par défaut
    Avec PHP 5 et SQLite, tu peux peut-être avoir les 2 : rapidité d'un fichier (texte simple, BBCode, xml...) et la puisance du SQL.

    Il s'agit d'un mini serveur de base de donnée intégré à PHP 5. Toute ta base (dans ton cas, ton site en différentes langues) est stockée dans 1 fichier, et tu y accèdes à travers un moteur de base de donné qui fait partie de PHP, donc beaucoup plus rapide qu'un serveur 'distant'.

    Par contre, SQLite ne gère pas les accès concurrents, ce qui veut dire qu'une requête bloquie toute la base pendant qu'elle sexécute. En cas de nombreuses requêtes, ça risque de devenir lourd.

    Autre solution (conciliant perfs et praticité) : un script qui génère l'ensemble des pages de la abse de données. Comme ça, tu ne touches qu'à la base, ton script fait un SELECT (fr|en) FROM texts WHERE ... et enregistre le résultat dans du html.
    Le serveur n'envoie que du html : aucun temps de traitement. Ca revient à mettre le résultat du script en cache, ce qui est légitime dans la mesure où le site n'est pas vraiment dynamique.

    --
    Rom_1

  10. #10
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 9
    Points : 5
    Points
    5
    Par défaut Dictionnaire : un fichier ou plusieurs ?
    Bonjour,

    J'utilise PHP4 sur Apache et j'ai choisi pour ma part l'option "dictionnaire". J'ai donc aujourd'hui :
    - un répertoire par langue
    - un fichier par page du site contenant la traduction de tous les mots de ce fichier sous la forme $var = traduction.

    J'aimerais bien rassembler tous ces petits fichiers en un fichier unique pour pouvoir facilement l'envoyer aux traducteurs et éviter les lignes doublons dans la traduction qui sont une grosse perte de temps.

    Le fichier complet ferait plusieurs milliers de lignes, donc plusieurs milliers de variables chargées à chaque chargement de page.

    Ne connaissant pas bien les histoires de cache, etc.... Je me demandais si cette solution était une bonne idée, ou risquait de ralentir considérablement mon serveur.

    Je serais ravi d'avoir vos avis.

    Merci beaucoup,

    Cordialement,

    Raphaël

  11. #11
    Membre averti Avatar de speedev
    Profil pro
    Développeur Web
    Inscrit en
    Mai 2006
    Messages
    1 051
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2006
    Messages : 1 051
    Points : 439
    Points
    439
    Par défaut
    Salut,

    Je m'intéresse à ce sujet, je suis justement en train de réfléchir à un système du genre. De mon côté pour le moment je développe une solution personnelle "XML couplé avec SMARTY (moteur de templates PHP)". Celle-ci est adaptée à mon besoin.

    Dans l'idée si ça vous intéresse

    Je vais stocker en DB les traductions de manière "légère", une table unique (3 ou 4 champs dont la langue, la page, un libellé (genre "para01") et le texte) et donc aucune jointure. Peut-être (et même surement je pense) que je serai amené à éclaircir cette table en la découpant en deux ou en rajoutant un champ ou deux pour identifier le texte maiiiiis pour l'instant je reste sur cette idée.

    Un plugin Smarty me permettera de récupérer l'information désirée qui sera rangée dans un fichier XML.
    Un plugin que je m'imagine bêtement simplifié ainsi pour le moment :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    getContent("accueil","para01"); // oui comme dans JS ^^
    On lui passe la page en cours, et le code d'identification du texte désiré. Je numéroterai implicitement chaque libellé afin de simplifer l'agencement au niveau du code. Il suffira donc de faire des appels dans l'ordre des textes (de gauche à droite et de haut en bas lol).

    TOUS les XML seront générés en une seule fois à chaque mise à jour des données de la DB. Ainsi il s'agira d'un accès fichier. Le plugin pourra, si nécessaire, récupérer les données depuis la DB directement (si c'est pratique) ou depuis le XML lui-même. La gestion de la langue se fera par $_SESSION et celle du type d'accès (fichier ou DB) directement dans le plugin smarty ou bien à l'appel du plugin (moyennant un troisième paramètre initialisé ou non), ça peut être utile pour une donnée mise à jour toutes les n secondes/minutes.

    Je vous déballe ça en speed hein...rien n'est analysé encore mais le système me plait bien pour le moment.
    J'en déduis ceci :

    AVANTAGES :
    - Code dépouillé, dépourvu de textes, chaque texte = getContent("aa","bb")
    - Choix XML propre, j'aime bien le XML, c'est structuré et facile à lire et relire.
    - Accès fichier ou accès DB en cas de soucis de l'un ou l'autre.
    - Je peux ainsi proposer un système à la "wikipédia" ou quiconque disposant d'un droit pourra traduire toutes les pages du site. Moyennant un petit accès réservé et une pré-validation de saisie.<== C'est surtout ça qui m'intéresse dans l'idée à vrai dire, que ceux qui veulent puissent participer aux traductions.
    - Interface d'administration complètement envisageable.

    INCONVENIENTS :
    - Textes non accessibles dans le code (on peut lire les xml cela dit)
    - Omniprésence des appels du plugin (plusieurs getContent() dans le code) peut être gênante. De mon côté je ne pense pas que ça me gênera si je suis clair dans ma tête et que tout est bien numéroté dans l'ordre.
    - Dans le cas d'un plantage de la DB les XML sont éventuellement faciles à maintenir si on veut rajouter du texte. Seulement après il faut prévoir une réintégration dans la base, rien de gênant en fait...
    - SMARTY EST UN MOTEUR DE TEMPLATES : bah oui, smarty est fait pour ça en partie, pour avoir plusieurs templates!!...mais ce n'est pas de cette utilité là dont je me sers chez lui. Je génère plusieurs templates de design et de mise en forme et non pas de données!! Mais ça peut en faire râler quelques uns...

    Voilà c'est en cours de réflexion et d'optimisation...je verrai ce que ça donne! Mais pour le moment je suis sûr que ça me plaira!

    Bonne journée!
    Développeur Web sénior (2005) spécialisé Symfony2 - Je tiens mon petit blog tranquillement, viens faire un tour http://www.ikonenn.com

  12. #12
    Nouveau Candidat au Club Avatar de Amédée Bishop
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Congo-Kinshasa

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2014
    Messages : 1
    Points : 1
    Points
    1
    Par défaut la réponse à la question
    la solutio que je propose est le Stockage des labels (étiquettes) en XML
    Par labels j’entends un objet auquel correspond plusieurs contenus.
    Voici donc un exemple de formalisation d’un fichier XML:
    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <?xml version="1.0" encoding="ISO-8859-1" ?>
     <labels>
     <label name="hello_world">Bonjour le monde!!</label>
     <label name="blabla_welcome">Je suis vraiment heureux de vous
     montrer ce truc XML et patati et patata</label>
     <label name="lien_1>Lien N°1</label>
     <label name="lien_2>Lien N°2</label>
     ...
     </labels>
    L’encodage ISO-8859-1 est délibérément choisi pour le contenu ci-dessous sachant que je vais rester sur des langues européennes et qu’il y a l’accentuation française… La version XML est toujours la même : 1.0.
    voici ensuite la version anglaise:
    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <?xml version="1.0" encoding="ISO-8859-1" ?>
     <labels>
     <label name="hello_world">Hello world!!</label>
     <label name="blabla_welcome">I 'm very happy to show you that XML
      stuff</label>
     <label name="lien_1">Link N°1</label>
     <label name="lien_2">Link N°2</label>
     ...
     </labels>
    Désolé pour mon anglais…
    Pourquoi 2 fichiers distincts?
    Tout simplement pour diviser par 2 la taille du fichier appelé par la suite…
    Choix du XML à charger:
    Le choix du XML à charger ce fera dans un script PHP que j’appellerai check_labels.php. Pour le moment voici ce qu’il va faire:
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    <?php
     if($lang == fr){
     $xmlstr = <<<XML
     <?xml version="1.0" encoding="ISO-8859-1" ?>
     <labels>
     <label name="hello_world">Bonjour le monde!!</label>
     <label name="blabla_welcome">Je suis vraiment heureux de vous
     montrer ce truc XML et patati et patata</label>
     <label name="lien_1">Lien N°1</label>
     <label name="lien_2">Lien N°2</label>
     <label name="now_we_are_friends">On est amis maintenant!!</label>
     <label name="friends_blabla">On va pouvoir échanger pleins de trucs
     et faire de nouvelles expériences passionnantes...</label>
     </labels>
     XML;
     }
     if($lang == en){
     $xmlstr = <<<XML
     <?xml version="1.0" encoding="ISO-8859-1" ?>
     <labels>
     <label name="hello_world">Hello world!!</label>
     <label name="blabla_welcome">I 'm very happy to show you that XML
     stuff</label>
     <label name="lien_1">Link N°1</label>
     <label name="lien_2">Link N°2</label>
     <label name="now_we_are_friends">Now we're friends!!</label>
     <label name="friends_blabla">We're gonna do everything we want
     and spend all our time in excinting web adventures...
     (sorry for my english!!)</label>
     </labels>
     XML;
     }
     ?><strong></strong>
    Choix de la langue
    j’ai créé un petit bout d’html dans un check_flags.php à inclure dans les pages avec de jolies images de drapeaux. Remarquez les liens utilisés, en effet on va stocker dans des $_GET le choix de la langue: fr ou en:
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <div id="flags">
     <p>
     <a href="?lang=fr"><img src="chemin/flag-FR.gif"/></a>
     <a href="?lang=en"><img src="chemin/flag-GB.gif"/></a>
     </p>
     </div>
    Enregistrement du choix et création du cookie
    Retournons à notre script check_labels.php dans lequel nous allons ajouter quelques lignes au début pour interpréter le $_GET:
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <?php
     if ($_GET['lang']){
     $lang = $_GET['lang'];<span style="color: #008000;">//$lang devient ce qui a été choisi</span>
     SetCookie("lang",$_GET["lang"]);<span style="color: #008000;">//création du cookie</span>
     }
     elseif ($_COOKIE['lang']){ <span style="color: #008000;">// s'il n'y a pas de variable $_GET on regarde le cookie</span>
     $lang = $_COOKIE['lang'];
     }else {
    <span style="color: #008000;">//Si il n'y a ni $_GET ni $_COOKIE on va chercher la langue </span>
    <span style="color: #008000;">//du navigateur grâce à une variable globale </span>
    $lang = $_SERVER["HTTP_ACCEPT_LANGUAGE"];
     }
    je penses que cela ira

  13. #13
    Expert éminent sénior

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 382
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 382
    Points : 10 410
    Points
    10 410
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    L’encodage ISO-8859-1 est délibérément choisi pour le contenu ci-dessous sachant que je vais rester sur des langues européennes et qu’il y a l’accentuation française…
    Pas bon même s'il n'y a que des langues européennes. Le standard est ut-8 et tu risques des problèmes, notamment des fonctions php comme json_encode ne supportent que l'utf-8 tout comme par exemple Jquery. Bref c'est très limitant/handicapant d'utiliser l'iso 8859-1 et te poseras des problèmes en cas d'interaction avec d'autres scripts, pour utiliser une lib externe que ce soit côté client ou côté serveur.

Discussions similaires

  1. [MySQL] Site multilingue méthode?
    Par Invité(e) dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 03/04/2011, 11h01
  2. Site multilingue : quelle méthode utiliser ?
    Par Sayrus dans le forum Référencement
    Réponses: 5
    Dernier message: 18/04/2008, 19h45
  3. [Tableaux] Site multilingue
    Par francis m dans le forum Langage
    Réponses: 15
    Dernier message: 10/12/2005, 01h58
  4. Site multilingue : comment s'y prendre ?
    Par sg-40 dans le forum Général Conception Web
    Réponses: 3
    Dernier message: 26/04/2005, 14h40
  5. [C#] Mise en place d'un site multilingue
    Par regbegpower dans le forum ASP.NET
    Réponses: 6
    Dernier message: 19/03/2004, 19h15

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo