Comment gérez-vous le développement d'un site multilingue ?

Comment gérez-vous le développement d'un site multilingue ?

  • En dur

    Votes: 0 0.0%
  • En base de données

    Votes: 0 0.0%
  • En fichier à plat

    Votes: 0 0.0%
  • Autre

    Votes: 0 0.0%

  • Total voters
    0
WRInaute passionné
Bonjour,

Comment gérez-vous le développement d'un site multilingue ?

1/ Un template par langue avec les traductions écrites en dur dans les "vues".

2/ Tous les textes en base de données :
Code:
texte_id    langue_id     traduction
1              1            Texte en français
1              2            Texte en anglais
3/ Textes stockés dans des fichiers à plat : .ini, .xml, etc.

4/ Autre...


Merci,
Dorian
 
WRInaute accro
Pour la petite histoire:

A mes débuts en PHP, des define:
fr.php:
Code:
<?php
define('TXT_WELCOME', "Bonjour le monde");
?>
en.php:
Code:
<?php
define('TXT_WELCOME', "Hello world");
?>

Ensuite je me suis lancé dans CakePHP qui n'avait (à ce moment là) pas le support du multilangues, je me suis tourné vers PEAR::Translation2: http://pear.php.net/package/Translation2 avec le container XML (traductions chargées dans un array $lang, ex: $lang['welcome']).

A la longue, je trouvais que le fichier XML était plutôt lourd à parser via PEAR::Translation2.

Ensuite (il y a +/- 6 mois) j'ai regardé au multilangue qui a été (entre temps) implémenté en CakePHP.

En gros (je ne vx pas m'attarder sur le système de CakePHP), c'est du gettext:

http://fr.wikipedia.org/wiki/GNU_gettext
Tuto: http://www.waanser.com/php/general-php/184-get-text.html

QUE DU BONHEUR

Maintenant je regrette de ne pas avoir utilisé gettext plus tôt.
Pourquoi:
Avec les define() ou autre (xml, sql, ini, ...), chaque "identifiant" de texte à traduire doit être "encodé" à plusieurs reprises: dans le code et dans le système de traduction.

Avec gettext, je crée uniquement "l'identifiant" de texte dans le code PHP.
Code:
<?php echo _('welcome');?>
Et xgettext en ligne de commande lit tous les fichiers PHP à la recherche de ces chaines à traduire et génère un fichier .POT qui sert à mettre à jour le fichier .PO avec Poedit ( http://www.poedit.net/ ).

Et ça ne pose aucun problème de se servir directement du texte traduit (en une langue choisie) comme identifiant
ex:
Code:
<?php echo _('Bonjour le monde');?>
qui affichera tout simplement sans traduction:
Code:
Bonjour le monde

Bon c'est pas si facile à argumenter, il faut tester (cfr. tuto cité) pour se faire une idée de la simplicité et du gain de productivité, je conseille vivement gettext qui est vraiment fait pour ça ;)
 
WRInaute accro
+1 pour gettext que je suis en train de mettre en place sur le CMS maison de ma boîte. C'est le format idéal quand on bosse avec des boîtes de traduction.

J'étais jusque là parti sur un fichier php par langue, ce fichier contenant un tableau avec en index les codes de trad et en valeur les traductions pour la langue en cours. Le tout doté d'une zone d'administration qui permet de mettre à jour facilement les différents.
 
WRInaute passionné
Je vais m'intéresser à gettext que je n'ai jamais eu l'occasion de tester.

Jusqu'à présent j'utilisais également une base de données.
Dans la problématique, j'ai oublié de préciser que les textes devaient facilement être éditables / modifiables.

Merci pour vos réponses.
 
WRInaute accro
dorian53 a dit:
Jusqu'à présent j'utilisais également une base de données.

Je faisais également appel à une BDD quand j'ai commencé à bosser sur ce genre de problématique mais j'ai au final choisi les fichiers plats à la place, pour des questions de rapidité, et après avoir étudié comment fonctionnaient la plupart des CMS du marché sur ce même problème. Ca permet en tout cas de facilement mettre en place une zone d'admin qui permet à un administrateur de gérer lui-même ses traductions via un GUI ergonomique.
 
WRInaute accro
Le benchmark a été fait juste sur 3 chaines à traduire...
C'est pas ce genre de benchmark qui me ferais changer d'avis pour gettext, quand je vois tout le temps gagné.
 
WRInaute occasionnel
Hello,

pour les textes "statiques", j'utilise de mon coté des fichiers CSV. A voir si c'est plus rapide ou pas que des gettext. Ce sont des fichiers assez lourds, alors je me tate pour bientôt pour faire des tests...

mais d'un point de vue maintenance, c'est très simple. Y a juste à avoir un éditeur txt ou tableur.
 
WRInaute occasionnel
J'ai essayé GETTEXT, j'ai essayé les tableaux de variables, chacun a ses pour et ses contres.

Pour modifier ou ajouter un texte a traduire gettext n'est pas super adapter (enfin moi j'ai trouvé) parcequ'il faut recompiler tout le fichier a chaque fois.

Pour les variables tableaux, beaucoup plus facile a mettre en place mais relativement lourde au chargement.


J'aurai une question, est ce que quelqu'un aurait trouver un moyen de mettre a jour les traductions gettext facilement sans recompiler en ssh a chaque fois ?
 
WRInaute discret
PoEdit recompile tout seul à priori, c'est un éditeur disponible sur plusieurs plates-formes.

Sinon je me suis mis à GetText, mais premier problème : les fichiers qui ne sont pas en UTF-8. Ils sont tous encodés en ANSI pour mon site et c'est du ISO-8859-1. J'ai beau mettre le --from-code pour la génération du .po avec xgettext en ssh, y me ressort mal les accents. Je vais pouvoir reconvertir tous mes fichiers en UTF-8 pour passer à ce charset o/

Edit: Charset modifié, par contre j'aurais une question concernant les traductions. Les msgid d'entrées sont des chaînes déjà en français, du coup ai-je besoin de faire des fichiers de traduction français également ? J'imagine que c'est plus rapide si je mets juste un fichier de traduction vide dans le répertoire non ? Ou il y a une procédure autre pour cela ?
 
WRInaute accro
ericdebra a dit:
PoEdit recompile tout seul à priori, c'est un éditeur disponible sur plusieurs plates-formes.
+1, il y a une option cochée par défaut: "Compiler automatiquement les fichiers .mo lors de la sauvegarde".
 
WRInaute passionné
Pour ma part : 4/ autre.

Ce matin, j'ai transformé pas 1 mais 2 sites Joomla en multilingue. Et encore, je l'ai fait par téléphone.
5 minutes après c'était plié.

Ok, on est loin de ce que tu veux mettre en place mais en ce qui me concerne, je trouve que le temps de paramétrage est à l'avantage du CMS : tu prends un Joomla existant ou pas, tu lui ajoutes le composant Joomfish (qui gère le multilingue = traductions des articles, menu, items, picto des langues sur la front, ...) et enfin le composant sh404SEF (pour la réécriture des URLs) et c'est terminé.

Je présume que c'est à peu près la même chose chez Drupal & Wordpress.

Voilà.
 
WRInaute accro
Dans Drupal & WP les chaînes à traduire de l'interface c'est en gettext.
Aucune idée pour les contenus multilingues, il y a-t-il un expert dans la salle ?
 
WRInaute passionné
Perso, un bon moment avec du en.php fr.php en array dedans.
Après passé en gettext, très performant et le gros avantage du "si pas traduit ça marche quand même".
Plus récemment à la facebook, ce qui permet à tous mes users de corriger/modifier quelque chose.
Ma fonction est un peu un remix du _('Phrase dans sa langue') qui fait en fait un SELECT du md5('phrase dans ma langue').
Ca permet des résultats pas cher dans des langues qu'on pensait pas, ainsi qu'une "notation" sympa.
 
WRInaute accro
J'utilise gettext pour les chaines "statiques" (les constantes, les affichages générés par fonction, etc) et une base de données pour le contenu proprement dit.
 
WRInaute accro
Si quelqu'un à une idée pour faire une interface de traduction des fichiers gettext (.po) en PHP comme dans Drupal, je suis preneur.
Un désavantage de PoEdit c'est qu'on ne peux pas mettre en parallèle les différentes traductions d'une chaine.
J'ai trouvé ceci: http://mp-poedit.sourceforge.net/ mais c'est trop rudimentaire.
 
WRInaute discret
J'ai utilisé pendant longtemps des fichiers .php avec des tableaux de traductions.
Depuis 6 mois j'ai développé mon propre système de gestion multilingue avec quasi le même fonctionnement que les fichiers de ressources en .net

Pour chaque fichier j'ai des fichiers de traductions par langues, par exemple index.fr-fr.php et index.en-en.php

Pour le contenu dynamique qui a besoin d'être traduit c'est en BDD.
 
Discussions similaires
Haut