8791 sujets

Développement web côté serveur, CMS

Bonjour à tous,

Il est très dur pour un débutant et autodidacte comme moi de s’y retrouver parmi la jungle des solutions possibles pour les sites multilingues. Et comme j’ai pu lire que chaque site est différent, peut être pourriez vous m’aider à trouver celle(s) qui me convient le mieux.

Mon site comprend trois sortes de textes que j’aimerai traduire :

- Les titres, les onglets et les petites broutilles du genre : « haut de page », etc : http://takeaphoto.eu/index.php
- Les noms des photos, les commentaires qui vont avec et des phrases comme celles que l’on trouve dans les news : http://takeaphoto.eu/oyapock.php
- Des paragraphes de textes. Genre ca http://takeaphoto.eu/info.php mais aussi d’autres qui viendront plus tard qui sont sensés évoluer tel des articles.

Je cherche donc quelle méthode (ou combinaison de méthodes) serait la plus adaptée dans le cas de mon site pour pouvoir proposer des textes en plusieurs langues et ainsi avoir un site multilingue.

L'idéal serait que ces textes soient facilement accessibles et modifiables par mes collègues (qui eux n'ont pas accès au code source) par l'interface d'administrateur du site.
J’ai déjà mis en place un tel système pour la section news dont la table SQL contient une colonne de texte en français et une en anglais (cette dernière ne s'affiche pas encore vu que je ne sais pas comment faire).

Pour moi, utiliser la BDD pour l'ensemble des textes serais ce qu'il y a de mieux mais j’ai lu que ca alourdissait considérablement le temps de réponse du serveur.

Je précise que je ne cherche pas de système de traduction automatique (ca serais un bonus appréciable mais loin d’être indispensable au vu de la relative faible quantité de texte qui est/sera généré).

Merci d’avance pour votre aide.
Modifié par dark.tonin (14 Jun 2011 - 14:54)
Sûrement parce que j'ai du mal à exprimer ma pensée.

J'ai mis à jour mon topic en essayant d'être plus clair Smiley sweatdrop .

En bref: je cherche tout simplement comment faire un site multilingue (avec l'exemple de mon site).

Merci encore Smiley smile
Bon je te donne ma méthode.

Pour la base de données :

Pour des pages ou articles (ou n’importe quelle autre ressource) multilingues j’ai une structure avec à chaque fois 2 tables :

Une table maîtresse qui contient tous les éléments communs quelle que soit la langue.
Une table langue (j’ajoute le préfixe i18n) qui contient le contenu à proprement parlé pour chaque langue.

Par exemple pour des articles j’aurais quelque chose comme ça :

Table « article » avec les champs suivants :

article_id (clé primaire)
created_at (date de creation)
updated_at (date de la dernière mise à jour)
published (booléen)

Table « article_i18n » avec les champs suivants :

article_i18n_id (clé primaire)
article_id (ID de l’article)
lang_iso (code ISO de la langue, fr pour français, en pour english, etc)
title (titre de l’article)
content (contenu de l’article)

Pour récupérer un article dans une langue il suffit alors de connaitre l’id de l’article et la langue dans laquelle tu le veux.

Pour les textes statiques :

Il suffit de créer un fichier par langue, par exemple fr.php pour le français, en.php pour l’anglais…. Tu peux organiser ton fichier en sections pour plus de clarté.
Ton fichier contient les chaines traduites, tu peux utiliser des constantes ou un tableau.


// common
define(‘SEARCH_LABEL ‘, ‘Rechercher’) ;


Selon la langue choisie par l’utilisateur tu inclus le bon fichier et après dans ton template tu n’as plus qu’à remplacer tes textes par tes constantes :


<label for="search">< ?php echo SEARCH_LABEL ; ?></label>


En gros...
Bonjour et merci pour votre réponse !!!

C'était exactement ce que je voulais savoir (ca peut paraître bête mais parfois une confirmation fait bien plus avancer le smilblick que des heures de recherche Smiley lol ).

Juste quelques petites questions complémentaires :

- Donc pas de soucis de mettre tout dans la BDD (ralentissement du site ou autre) (c'est une fausse question vu que la réponse et dans le post précédent)?

- i18n dans le nom de la colonne, c'est juste pour la clarté de la structure ou ca a une fonction particulière ?

- Le code PHP pour sélectionner la langue est le même quand il s'agit de déterminer le fichier langue et le texte dans la BDD ?

Merci encore pour l'aide. Je vais donc maintenant me lancer.
Même si mon interrogation initiale est résolue, j'attend un peu pour mettre [résolu] car j'aurai sûrement d'autres questions au fur et à mesure de mon travail.
Smiley cligne
- Pas de soucis de performance non, les requêtes restent très simples et il y a toujours la possibilité de mettre les données en cache (c'est même conseillé).

- J'ajoute i18n dans le nom de la table pour l'identifier comme table contenant les données de la langues (i18n est l'abréviation de "internationalization", elle est utilisée par beaucoup de framework et de CMS).

- Pour la sélection de la langue tu as plusieurs façon de faire, personnellement je passe par une règle de réécriture qui me donne des URLs de ce type :

monsite.com/ma-page (la langue par défaut, ici le français)
monsite.com/en/my-page (ici la langue est l'anglais)

Ou de ce type :

monsite.com/ma-page (la langue par défaut, ici le français)
en.monsite.com/my-page (ici la langue est l'anglais)

Mais tu peux aussi ne pas utiliser de réécriture et simplement passer par une variable GET et sauver la langue dans ta session et/ou dans un cookie.

Pour les chaînes de caractères je t'ai donné une méthode manuelle qui à le mérite d'être simple à mettre en œuvre mais un peu laborieuse. Une solution plus propre serait d'utiliser l'extension getText.

Il y a un tutoriel ici :

http://www.grafikart.fr/tutoriels/internationaliser-site-gettext-104