Vous avez trouvé un thème WordPress que vous aimez, mais il est en anglais. Voici une façon simple de faire la traduction d’un thème WordPress qui est déjà prêt pour « l’internationalisation » I18n (I18n qui est l’abréviation pour l’internationalisation)
Comme par exemple les thèmes qu’on trouve chez Woo Themes. Ces thèmes ont déjà un fichier .PO qu’on peut utiliser pour la traduction dans la langue de notre choix.
Je vais faire un exemple ici en utilisant un thème gratuit de Woo Themes qui s’appelle Bueno
J’ai d’abord téléchargé le thème WordPress et je l’ai installé sur un wordpress version 3.1 en français. Comme on peut le voir il y a certains textes en anglais :

Éditer le fichier .po avec Poedit
Pour que ces textes s’affichent en français j’édite le fichier bueno.po, du thème WordPress. Ce fichier est dans le répertoire LANG (wp-content/themes/bueno/lang) et je modifie le fichier avec le logiciel Poedit (disponible pour Windows, Mac et linux) que vous pouvez télécharger gratuitement.

Faire la traduction de chacun des éléments
Cliquez sur le premier élément de la liste, ensuite allez dans le bas de l’écran puis cliquez dans la case vide et entrez le texte en français. Exemple : % Comments devient % Commentaires (s’il y a des signes comme % ou autre ne faut pas oublier de le inscrire).
IMPORTANT : Lorsqu’on traduit en français il faut tenir compte des accents. Généralement les sites web WordPress utilisent l’encodage UTF-8 par défaut. Il faut donc remplacer les caractères accentués par leur équivalent UTF-8.
Les principaux accents hmtl utf-8 c’était mal formulé (merci à Jef) ==> Les accents et caractères spéciaux en ASCII sont :
- é => é
- è => è
- ê => ê
- à => à
- ù => ù
- un espace vide =>
Vous trouverez une liste plus longue sur le site scriptol.fr. M.A.J. mai 2012 : 2e référence proposée par Jef www.w3schools.com/tags/ref_charactersets.asp
Enregistrement du fichier qui a été traduit
Une fois qu’on a terminé la liste de tous les éléments à traduire, il s’agit d’enregistrer le fichier sous le nom fr_FR (pour une traduction en français). Le nom de fichier est important car c’est un standard. Si vous voulez voir les noms de fichiers pour d’autres langues que le français, vérifiez sur le site de WordPress.
Poedit va enregistrer deux fichiers : fr_FR.po et fr_FR.mo. et il faut les copier dans le répertoire wp-content/themes/bueno/lang/ (soit au même endroit que le fichier bueno.po). Si vous désirez utiliser mes fichiers de traduction ils sont à vous : fr_FR.rar
Note : J’utilise Filezilla pour transférer les fichiers via FTP.
Si vous utilisez déjà WordPress en version française vous devriez maintenant voir les textes en français. Facile hein?
Si vous n’utilisez pas WordPress en version française
Si vous ne voyez toujours pas le texte en français, vous pouvez télécharger les 4 fichiers fr-FR (fr_FR.mo, fr_FR.po, ms-fr_FR.mo, ms-fr_FR.po) pour convertir votre version de WordPress en français.
- Ensuite il faut copier les 4 fichiers dans le répertoire wp-content/languages/
- Éditer le fichier wp-config.php et recherchez : define (‘WPLANG’, »);
- Remplacer par : define (‘WPLANG’, ‘fr_FR’);
Note : le fichier wp_config.php est directement dans le répertoire racine souvent nommé public_html.
Ressources :
- Thèmes Bueno – thème WordPress gratuit – Les thèmes Woothemes sont des thèmes WordPress qui sont très bien fait et qui sont peu cher, je vous les recommande.
- Mes fichiers de traduction du thème : fr_FR.rar
- Poedit
- FileZilla












Toutes ces explications sont très claires. Cependant, je préfère utiliser le plugin « CodeStyling Localization ». Il est parfaitement bien intégré à wordpress, et permet de corriger les traductions au fur et à mesure qu’on trouve des erreurs ou des oublis de traduction.
post Awesome. Vraiment apprécié la lecture de votre blog.
Enfin une méthode simple et rapide !
Merci pour cet article très clair
Très bon article avec des screens en plus pour mieux situé.
Je vais pouvoir traduire mon blog.
Enfin une méthode simple et rapide !
Merci pour cet article très clair
Bonjour,
Ceci est un bon article. Mais je rencontre un problème avec mon thème.
Je n’ai pas de fichier po ni de dossier lang ou langage, et j’ai entendu dire qu’il y avait possibilité de créer un dossier lang avec ses fichiers de traduction. Mais je n’arrive pas à trouver sur google cette astuce.
Cordialement,
Bruno
Bonjour Bruno,
Il est possible d’utiliser ce site : http://www.icanlocalize.com/tools/php_scanner (mais je ne l’ai pas encore testé).
Il y a aussi cette façon de faire (tutorial en anglais) : http://betterwp.net/wordpress-tips/create-pot-file-using-poedit/. J’ai déjà utilisé cette méthode avec succès. Je vais faire un petit article là-dessus bientôt.
Désolée pour le délai à répondre.
Bonjour Annieb,
Merci pour ta réponse. J’ai trouvé des explication sur la toile.
Mais j’ai un coté qui me reste un peut obscure. Pour traduire dans des array comme si dessous je ne vois pas comment écrire avec les fameux mots clé sans mettre la pagaille. lol
array( « name » => « Enable Custom fonts? »,
« id » => $shortname. »_cufon »,
« type » => « select »,
« options » => array(‘Yes’, ‘No’),
« std » => « Yes »),
Et par exemple encore ceci :
if ($username == ») {
if ($list) echo »;
echo ‘RSS not configured’;
if ($list) echo »;
Puis-je l’écrire comme ceci :
if ($username == ») {
if ($list) echo »;
echo »;
if ($list) echo »;
Ou comme ceci
if ($username == ») {
if ($list) echo »;
echo (__’RSS not configured’);
if ($list) echo »;
Merci pour tous les renseignements.
Bruno
Bonjour,
J’ai trouvé les solutions mais il me reste encore une question
Pour que le dossier lang ou language fonctionne il faut qu’il soit déclaré dans le thème.
Mais quel ligne inscrire et dans quel fichier le header.php, functions.php.
Merci
Bruno
Bonjour,
Et encore comme un grand je me suis dépatouillé seul. LOL
@+ Bruno
Bonjour Bruno,
Je réalise que j’ai trop délaissé mon site… Je vais m’y remettre.
Je suis heureuse de voir que vous vous débrouillez bien
Au plaisir de partager encore avec vous
Annie
J’ai fait un peut de PHP énormément HTML et CSS, ce qui m’a bien aidé dans cette quête à la traduction pour internationaliser un thème et je pense que pour les plugin ça doit être un peut plus rapide que pour un thème (plus de modif à faire dans les fichiers).
Bruno
P.S un blog comme le tiens ne le néglige pas il a plus de valeur que tu le crois.
En effet, il y a généralement moins de texte dans les plugins que dans les thèmes.
Merci Bruno, je vais suivre ton conseil, je ne négligerai plus mon blog.
Cordialement pour le partage de l’information avec nous sur http://www.esiteweb.net.
Bonjour,
Je reviens à la charge !
J’ai besoin d’un petit coup de main sur une internationalisation d’un thème wordpress et plus particulièrement dans les tableaux.
Voici ci-dessous le code d’origine.
array( « name » => « Advertizement »,
« type » => « title »,
« desc » => « Setup the ad banner on posts. »,
),
Et voici le code modifié pour la traduction
array( ‘name’ => __(‘Advertizement’),
‘type’ => ‘title’,
‘desc’ => __(‘Setup the ad banner on posts.’),
),
Mais j’ai un souci ici ma traduction ne prend pas et garde la version d’origine.
Pourtant je le retrouve bien dans mon fichier de langage. J’utilise pour tout ce qui
est HTML une balise PHP comme : toutes
celles-ci fonctionnent bien. J’ai essayé d’autres mots clés dans les tableaux comme celui que j’utilise dans les balises PHP _e remettre à jour mon fichier fr_FR.po et j’ai même réussi à faire disparaitre le mot du tableau.
Et j’ai remarqué qu’il ne me traduisait pas non plus tout ceux de ce style :
Pourtant ils ont bien été généré dans le fichier fr_FR.po
Si une âme charitable pouvait me dire pourquoi j’ai ce souci, car là je suis en train de coincer.
Merci
Bruno
Bonjour,
Je me réponds à moi même (c’est ce que ça fait à force de lire du code)
Bon trêve de plaisanterie. J’ai peut-être trouvé un bout de mon erreur je dis bien un bout car la traduction dans les tableaux ne ce change toujours pas un bout de mon erreur devrait être ceci.
array( ‘name’ => __(‘Advertizement’, ‘mondomaine’),
‘type’ => ‘title’,
‘desc’ => __(‘Setup the ad banner on posts.’, ‘mondomaine’),
),
Ce qui fait que normalement comme ‘mondomaine’ est inscrit que je l’ai déclaré dans le fichier function il devrait me le trouvé. Mais que nini nada rien.
Il se le trouve quand je crais le fichier .po donc avec poedit. Mais une foit traduit toujours en anglais sauf dans la balise php pour traduire des les balises html exemple : _e(‘Posted by’, ‘balena’); et bien entendu ceci est entre les balises PHP, ca fonctionne très bien.
Si quelqu’un pouvais me dépatouiller de çà.
Bonjour Bruno,
Si je comprends bien la traduction fonctionne bien partout SAUF dans les tableaux? Est-ce que tu as un lien (URL) où je peux voir ton thème? Ceci m’aiderait à mieux saisir le problème.
Annie
Voici mon wp de test
http://bonplaninternet.com/wp
Par exemple tu verra que le premier post commentaire à 0 mais il est en anglais hors que dans mon second article de test il y a 2 commentaires et bien en fr. voici ma ligne pour la traduction.
comments_popup_link( __(’0 Comment’,'balena’), __(’1 Comment’,'balena’), __(‘% Comments’,'balena’));
Le tableau que je parle est dans mon admin mais voici toute la partie qui me cause problème :
$options = array (
array( « name » => __(‘Featured posts’,'balena’),
« type » => « title »,
« desc » => __(‘This section customizes the featured post list.’,'balena’),
),
array( « type » => « open »),
array( « name » => __(‘Featured post Category’,'balena’),
« desc » => __(‘Select the category to be featured.’,'balena’),
« id » => $shortname. »_gldcat »,
« std » => __(‘Select a category:’,'balena’),
« type » => « select »,
« options » => $zm_categories),
array( « type » => « close »),
array( « name » => __(‘Twitter settings’,'balena’),
« type » => « title »,
« desc » => __(‘This section customizes the social network buttons.’,'balena’),
),
array( « type » => « open »),
array( « name » => __(‘Twitter ID’,'balena’),
« desc » => __(‘Give your twitter id.’,'balena’),
« id » => $shortname. »_twit »,
« std » => « twitter »,
« type » => « text »),
array( « name » => __(‘Facebook page url’,'balena’),
« desc » => __(‘Give your Facebook page url.’,'balena’),
« id » => $shortname. »_face »,
« std » => « »,
« type » => « text »),
array( « type » => « close »),
array( « name » => __(’125 x 125 banner Settings’,'balena’),
« type » => « title »,
« desc » => __(‘You can setup four 125 x 125 banners on your sidebar from here’,'balena’),
),
array(« type » => « open »),
array(« name » => __(‘Banner-1 Image’,'balena’),
« desc » => __(‘Enter your 125 x 125 banner image url here.’,'balena’),
« id » => $shortname. »_banner1″,
« std » => « http://web2feel.com/images/webhostinghub.png »,
« type » => « text »),
array(« name » => __(‘Banner-1 Image alt tag’,'balena’),
« desc » => __(‘Enter your banner alt tag.’,'balena’),
« id » => $shortname. »_alt1″,
« std » => __(‘Cheap reliable web hosting from WebHostingHub.com.’,'balena’),
« type » => « text »),
array(« name » => __(‘Banner-1 Url’,'balena’),
« desc » => __(‘Enter the banner-1 url here.’,'balena’),
« id » => $shortname. »_url1″,
« std » => « http://www.webhostinghub.com/ »,
« type » => « text »),
array(« name » => __(‘Banner-1 link title’,'balena’),
« desc » => __(‘Enter the banner-1 title here.’,'balena’),
« id » => $shortname. »_lab1″,
« std » => __(‘Web Hosting Hub – Cheap reliable web hosting.’,'balena’),
« type » => « text »),
array(« type » => « break »),
array(« name » => __(‘Banner-2 Image’,'balena’),
« desc » => __(‘Enter your 125 x 125 banner image url here.’,'balena’),
« id » => $shortname. »_banner2″,
« std » => « http://web2feel.com/images/pcnames.png »,
« type » => « text »),
array(« name » => __(‘Banner-2 Image alt tag’,'balena’),
« desc » => __(‘Enter your banner alt tag.’,'balena’),
« id » => $shortname. »_alt2″,
« std » => __(‘Domain name search and availability check by PCNames.com.’,'balena’),
« type » => « text »),
array(« name » => __(‘Banner-2 Url’,'balena’),
« desc » => __(‘Enter the banner-2 url here.’,'balena’),
« id » => $shortname. »_url2″,
« std » => « http://www.pcnames.com/ »,
« type » => « text »),
array(« name » => __(‘Banner-2 link title’,'balena’),
« desc » => __(‘Enter the banner-2 title here.’,'balena’),
« id » => $shortname. »_lab2″,
« std » => __(‘PC Names – Domain name search and availability check’,'balena’),
« type » => « text »),
array(« type » => « break »),
array(« name » => __(‘Banner-3 Image’,'balena’),
« desc » => __(‘Enter your 125 x 125 banner image url here.’,'balena’),
« id » => $shortname. »_banner3″,
« std » => « http://web2feel.com/images/designcontest.png »,
« type » => « text »),
array(« name » => __(‘Banner-3 Image alt tag’,'balena’),
« desc » => __(‘Enter your banner alt tag.’,'balena’),
« id » => $shortname. »_alt3″,
« std » => __(‘Website and logo design contests at DesignContest.com.’,'balena’),
« type » => « text »),
array(« name » => __(‘Banner-3 Url’,'balena’),
« desc » => __(‘Enter the banner-3 url here.’,'balena’),
« id » => $shortname. »_url3″,
« std » => « http://www.designcontest.com/ »,
« type » => « text »),
array(« name » => __(‘Banner-3 link title’,'balena’),
« desc » => __(‘Enter the banner-3 title here.’,'balena’),
« id » => $shortname. »_lab3″,
« std » => __(‘Design Contest – Logo and website design contests’,'balena’),
« type » => « text »),
array(« type » => « break »),
array( « name » => __(‘Banner-4 Image’,'balena’),
« desc » => __(‘Enter your 125 x 125 banner image url here.’,'balena’),
« id » => $shortname. »_banner4″,
« std » => « http://web2feel.com/images/webhostingrating.png »,
« type » => « text »),
array( « name » => __(‘Banner-4 Image alt tag’,'balena’),
« desc » => __(‘Enter your banner alt tag.’,'balena’),
« id » => $shortname. »_alt4″,
« std » => __(‘Reviews of the best cheap web hosting providers at WebHostingRating.com.’,'balena’),
« type » => « text »),
array( ‘name’ => __(‘Banner-4 Url’, ‘balena’),
‘desc’ => __(‘Enter the banner-4 url here.’,'balena’),
« id » => $shortname. »_url4″,
« std » => « http://webhostingrating.com »,
« type » => « text »),
array( « name » => __(‘Banner-4 link title’,'balena’),
« desc » => __(‘Enter the banner-4 title here.’,'balena’),
« id » => $shortname. »_lab4″,
« std » => __(‘Web Hosting Rating – Customer reviews of the best web hosts’,'balena’),
« type » => »text »),
array(« type » => « close »),
array( ‘name’ => __(‘Advertizement’,'balena’),
‘type’ => ‘title’,
‘desc’ => __(‘Setup the ad banner on posts.’,'balena’),
),
array(« type » => « open »),
array(« name » => __(‘Ads on posts ‘,’balena’),
« desc » => __(‘adsense or other ad scripts .’,'balena’),
« id » => $shortname. »_ad1″,
« std » => « »,
« type » => « textarea »),
array(« type » => « close »),
);
Bonjour à tous,
Bien j’ai relu mon code du fichier qui me posait problème c’était le fichier theme-options.php. Dans cette relecture je me suis aperçu d’une chose c’est qu’il ne faisait pas appelle au fichier function.php là ou j’ai mes lignes qui font appelle au dossier /languages/. Je les ai incéré dans le fichier theme-options.php et rouler jeunesse tout fonctionne à merveille et voilà mon bon français qui est apparu et en plus mon formulaire de configuration marche impeccable.
merci Annie
@+
Bruno
Merci à toi Bruno d’avoir partagé ta solution.
C’est intéressant merci !
Salut, tout d’abord merci pour ce tuto tres utile a tous, puisque on fait souvent face au problème des templates anglais, pour les traduire.
Moi j’ai une question, si vous voudrez bien avoir l’amabilité de me répondre svp, et merci d’avance.
Ma question est : tu dis que t as traduis un thème qui contient le fichier : .PO, mais pour les thèmes qui ne contiennent pas ce fichiers, car j’ai souvent téléchargé des thèmes anglais, mais j’ai jamais vu ce fichier dedans, est ce qu’on suit la même procédure ? ça veut dire on traduit le fichier de langue avec ce logiciel ou quoi ?
Merci de bien m’expliquer svp si tu as une solution pour a, et merci bcp d’avance.
Cordialement.
Merci pour les bons mots Voynich.
Il est possible de créer un fichier po avec POEDIT.
Voici une courte marche à suivre (en attendant un tuto plus détaillé) :
Codex
Ouvrir POEDIT
Cliquer sur FILE > New Catalog
Entrer un nom de projet (exemple le nom du thème)
Cliquer sur l’onglet PATHS (dans le haut de la fenêtre)
Cliquer sur l’icône NEW ITEM (l’icône ressemble à un petit carré)
Enter le chemin du répertoire contenant tous les fichiers de votre thème WordPress (Le point « . » donne l’instruction à POEDIT de « scanner » le répertoire où le fichier POT sera enregistré
Appuyer sur la touche ENTER de votre clavier
Cliquer sur l’onglet KEYWORDS
Cliquer sur l’icône NEW ITEM
Entrer __ (la barre de soulignement « underscore » 2 fois), appuyer sur la touche ENTER de votre clavier
Cliquer sur l’icône NEW ITEM
Entrer _e (soulignement e), appuyer sur la touche ENTER de votre clavier
Cliquer sur OK
Choisir un nom pour votre fichier .po (suggestion le nom de votre thème)
Si le thème est bien fait et respecte les techniques de WordPress pour la traduction , cela devrait bien fonctionner.
Annie
Merci bcp pour ta précieuse aide et merci encore de ton explication bien détaillé, ça m’aide bcp.
Cordialement.
Merci grandement! J’utilise le thème Thesis et quand j’ai vu le travail de traduction à faire, je me suis dit que quelqu’un devait bien avoir fait le travail déjà alors merci!
Bonjour,
En effet Franck. Peut être pas Thesis en particulier mais j’en ai traduits beaucoup d’autres.
Si cela peut aider.
Cordialement
Bravo pour l’article.
Juste une petite remarque : les « accents hmtl utf-8″ n’existent pas !
C’est soit de l’utf-8 donc on écrit les accents comme on le ferait sous Word, soit les « entités HTML » et on écrit é à la place de é.
La première méthode ne peut fonctionner que si les fichiers sont encodés en utf8 (paramètres de l’éditeur de texte).
Pour la deuxième méthode, il faut encoder en ASCII. C’est cet encodage qui est interprété par défaut par les navigateurs.
http://www.w3schools.com/tags/ref_charactersets.asp
Merci Jef, vous avez parfaitement raison c’était très mal formulé. Merci encore d’avoir apporté cette précision importante, je viens de modifier mon article.
Annie
Bonjour,
merci pour cet article complet !
J’ai bien suivi les étapes, par contre mon blog s’affiche toujours en anglais?
Bonjour Mathieu,
Il arrive parfois que certains termes ne sont pas traduits. Est-ce que c’est tout le site qui s’affiche en anglais ou seulement quelques termes?
Annie
Bonjour,
Merci pour la réponse.
Non tout reste en anglais tel quel.
Votre WordPress, le tableau de bord est-il en français?
Quel est le thème que vous utilisez?
Si vous pouvez me donner le URL de votre site, je peux peut-être jeter un coup d’oeil pour mieux vous aider.
Oui il est en francais
c’est de le theme de mon site: http://emotionnellement.com
Il s’appelle Ampersand.
Il semble que ce thème supporte bien la traduction. Il est possible que les fichiers fr_FR.PO et fr_FR.MO soient corrompus et que WordPress ne soit pas en mesure de les ouvrir. Votre fichier configuration a bien cette ligne écrite exactement comme ceci :
define (‘WPLANG’, ‘fr_FR’);
Vous pouvez peut-être tenter de faire la traduction avec ce plugin : Codstyling Localization. Voici le tuto sur mon site : http://www.esiteweb.net/wordpress-theme-francais-traduire-avec-codestyling-localization/
merci pour le lien !
Oui le fichier config est bien OK (d’ailleurs les autres themes que jai teste marchent tous en francais)
ce qui est bizarre c’est qu’apres avoir installe le plugin, il me dit bien que la langue est FR alors je sais pas d’ou vient le prob!
Eh bien je suis d’accord c’est bizzare. Je manque de suggestion pour vous aider. Je vais y réfléchir. Si je trouve d’autres idées je vous tiens au courant.
Si jamais vous trouvez la solution, j’aimerais bien la connaître cela m’intéresse.