Astuce WordPress : conserver la traduction de son thème lors d’une mise à jour

Les traductions sont stockées dans les fichiers .po (version utilisateur) et .mo (machine).

Quand on traduit un thème, malheureusement, lors d’une mise à jour, WordPress supprime le dossier du thème et recharge la totalité du dossier de la nouvelle version. Et notre belle traduction est perdue…

Il existe une astuce, qui permet de la conserver, c’est de la stocker dans le dossier /wp-content/languages/themes

Il faudra aussi changer le nom du fichier : au lieu de le laisser sous la forme fr_FR.po / fr_FR.mo il faut lui ajouter le nom du thème, ou plus exactement le « textdomain ».

Etape 1 : identifier le textdomain

Il est chargé dans le fichier functions.php du thème.

Il suffit de localiser la fonction load_theme_textdomain et de prendre le premier paramètre.

Ainsi, dans Magnificent, le thème d’Elegant Theme dont la mise à jour m’a forcée à trouver cette astuce, on a dans le fichier functions.php l’instruction suivante :

load_theme_textdomain('Magnificent',$template_dir.'/lang');

Le textdomain est donc « Magnificent » (avec la majuscule)

Etape 2 : renommer les fichiers de traduction

J’ai pris les fichier fr_FR.po et .mo que j’avais enregistrés dans le dossier du thème, et je les renomme respectivement

Magnificent-fr_FR.po et Magnificent-fr_FR.po

A cet instant, le thème n’est plus traduit. Quand ils sont stockés dans le dossier du thème, les fichiers de traduction ne doivent avoir que l’identifiant de la langue comme nom.

Etape 3 : les déplacer dans le dossier commun des traductions des thèmes

Aussitôt déplacés via FTP dans ce dossier, le thème est à nouveau traduit ! Et le gros avantage, c’est que ces fichiers là ne sont pas touchés lors d’une mise à jour du thème : la traduction ne disparait pas.

Screenshot de l'espace ftp d'un site wordpress

En stockant les fichiers dans le dossier global dans wp-content, les traductions sont conservées

Attention : cette astuce ne marche pas quand le thème est traduit et que vous modifiez la traduction ! Car les fichiers stockés dans le dossier du thème sont prioritaires.

Dans ce cas, il y a deux méthodes :

  • la plus simple, si il s’agit juste de la traduction : stocker les fichiers sur le PC et les uploader à nouveau lors de chaque mise à jour
  • un peu plus compliquée, si vous avez un thème enfant : les traductions sont chargées via une action, il faut donc utiliser dans le thème enfant remove_action , puis faire une nouvelle action, avec le chargement du textdomain qui pointe vers un autre répertoire. Dans ce cas, je recommande de faire deux répertoires dans le thème enfant, un /lang/domainparent et un /lang pour stocker les chaines spécifiques au thème enfant.

(Je n’ai pas testé, mais je pense que cela doit marcher aussi pour les plugins, avec un dossier wp-content/languages/plugins )

Parcourir la sériePrécédent article

14 commentaires

  1. Gilles C. Auteur mars 26, 2014 (5:49 )

    Merci pour cet article extrêmement utile.
    C’est vraiment une très bonne idée d’avoir traité cette question, ce qui évitera à de nombreux webmasters de perdre de longues heures à retricoter une traduction de leur thèmes.

    Répondre à Gilles C.
  2. Audiofeeline Auteur mars 26, 2014 (9:09 )

    Il faudrait vraiment une solution native et imposer la possibilité de traduction sur tous les thèmes validés sur le site officiel.

    Répondre à Audiofeeline
  3. Wolforg  wolforg
    Auteur
    mars 27, 2014 (5:40 )

    Hello,
    Excellente solution que je vais m’empresser de tester pas plus tard que dès que ça sera possible ;-)

    Le problème se posant aussi pour les traductions d’extensions, j’utilise pour ma part un « mix » entre la solution la plus simple et celle décrite ici, c’est à dire que je dépose dans /wp-content/languages une copie des fichiers de traductions (après les avoir renommé pour savoir ce qu’ils traduisent).
    Résultat : quand je mets à jour un thème ou une extension il ne me reste plus qu’à redéplacer la traduction dans son répertoire d’origine, cette solution a l’avantage d’avoir accès aux trads de n’importe quel poste de travail et pas seulement de celui où sont stockées les trads :)

    La bise,
    Didier.

    Répondre à Wolforg
  4. SunnaComparateurPrix from Jilbab  SunnaCP
    Auteur
    mars 29, 2014 (4:36 )

    Moi qui comptais sur une traduction à moyen terme, je vais être sur mes gardes ! Merci beaucoup du partage. Les mises à jour, c’est souvent une cause de dérèglements de nombreux sites !

    Répondre à SunnaComparateurPrix@Jilbab
  5. Brice Emry Auteur mars 29, 2014 (9:16 )

    Bonjour, Très intéressante l’astuce. Mais est-ce évident pour les débutants? moi ce que je vais toujours pour ne pas perdre mes traductions c’est de toujours utiliser un thème enfant et effectuer mes traductions dessus. Je ne traduit que les fichiers nécessiteux.

    Répondre à Brice Emry
  6. Mélodie Auteur mars 30, 2014 (6:48 )

    Bonjour,

    La préservation de la localisation ne pourrait-elle pas se faire plus simplement, par la mise en place d’un thème enfant ?

    Répondre à Mélodie
  7. Mélodie Auteur mars 30, 2014 (6:49 )

    Brice Emry,
    J’ai lu trop vite… mes excuses.

    Répondre à Mélodie
  8. Marie-Aude Auteur mars 30, 2014 (12:05 )

    Personnellement, je pense que faire un thème enfant « juste » pour la traduction est trop lourd. On oublie souvent de penser performance… il ne faut pas oublier par exemple, que lorsqu’il y a un thème enfant, pour chaque fichier du thème parent, WordPress vérifie si il existe dans le thème enfant.

    Répondre à Marie-Aude
  9. Yann De Saulcourt Auteur avril 6, 2014 (6:20 )

    Merci pour cette bonne astuce que je retiens aussi et mettrais en pratique.

    J’avais pour ma part résolu le problème en créant des thèmes enfants sur des sites dont je m’occupe, mais pas à seule à fin de préserver la traduction, en effet..

    La création d’un thème enfant a bien des avantages, relativement à la personnalisation du css , celles de certaines fonctions, mais aussi dans ce cas, celle de copier le dossier « lang » du thème, avec ses traductions, dans le dossier du thème enfant. Partant de là, plus aucun soucis à se faire lors des mises à jour du thème…

    Limiter au maximum le contenu du thème enfant est toutefois garant de minimiser la perte sur ce point important des performances, en effet. :-)

    Répondre à Yann De Saulcourt
  10. Covepa Michels Packaging Auteur avril 10, 2014 (11:41 )

    Grand merci pour cette astuce qui peut en sauver plus d’un et que je mets sous le coude !!
    Cela évitera à pas mal de webmaster sous WP d’éviter de perdre du temps à refaire leur traduction de leur site enfin du thème en question.

    Répondre à Covepa Michels Packaging
  11. eric Auteur mai 1, 2014 (1:02 )

    .Encore une astuce qui va me faire gagner du temps , merci à lumiere de lune , je vais pouvoir enfin me concacrer à autre chose que de la traduction .
    Eric

    Répondre à eric
  12. Thibaud from wp-infinity.com Auteur mai 15, 2014 (2:07 )

    « lors d’une mise à jour, WordPress supprime le dossier du thème et recharge la totalité du dossier de la nouvelle version »

    Le fichier functions.php étant dans le réperoire du thème notre chère ligne

    load_theme_textdomain(‘Magnificent’,$template_dir.’/lang’);

    ne devrait-elle pas disparaître ?

    Répondre à Thibaud@wp-infinity.com
    • Marie-Aude Auteur mai 15, 2014 (2:19 )

      Cette ligne est mise par le créateur du thème. Cet article n’est pas pour ajouter une traduction à un thème non traduit, mais remplacer le contenu de la traduction existante.

      Répondre à Marie-Aude
      • Thibaud Auteur mai 15, 2014 (2:28 )

        Ok merci

Commenter

*

*

*Informations requises Merci de donner les informations requises

VotreNom@VotreMotClé, à utiliser avec tact et modération ! ( De toute façon, les spammeurs sont blacklistés )