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

Traduction WordPress
Wordpress dans toutes les langues

Marie-Aude

J'ai fait de la compta, de la finance, du juridique, j'ai été chef de projet SAP, j'ai fait de la photo, des voyages. Depuis 2007, je fais avec amour des sites webs pour les utilisateurs, qui se référencent bien et je vous aide à acquérir du trafic pertinent.

Vous aimerez aussi...

32 réponses

  1. Gilles C. dit :

    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.

  2. Audiofeeline dit :

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

  3. Wolforg dit :

    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.

  4. SunnaComparateurPrix dit :

    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 !

  5. Brice Emry dit :

    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.

  6. Mélodie dit :

    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 ?

  7. Mélodie dit :

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

  8. Marie-Aude dit :

    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.

  9. 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. :-)

  10. 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.

  11. eric dit :

    .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

  12. Thibaud dit :

    “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 ?

  13. Herve dit :

    Bonjour,
    Bon je vais essayer d’appliquer la méthode à la modification de traduction de BP !!

    J’ai la version 2.0.2_fr et je voudrai crée une version buddy-H_fr avec juste qq chaines à changer et faire une nouvelle action.
    J’envisage de créer un sous répertoire sous le thème enfant.

    1/ mon fichier buddy-H_fr peut-il comporter juste les qq chaines pour éviter de surcharger avec un gros fichier ?

    2/ lors du dépot de la nouvelle version BP 2.1 sous wp-content/languages/plugins il est d’abords chargé avec de nouvelles chaînes mais mon adaptation de mes quelques chaines buddy-H_fr viennent “surcharger” les chaines de la version traduite officiel

    Merci
    A+

    • Marie-Aude dit :

      Bonjour

      dans le cas d’un thème enfant, on peut loader un textdomain spécifique pour le thème enfant. Il sera chargé à chaque fois que l’instruction de traduction
      _e( ‘My string to translate’, ‘textdomain’ ) appelle le textdomain du child.

      Donc on a deux possibilités :
      – les chaines dont on modifie la traduction se trouvent dans des fichiers modifiés dans le thème enfant -> il suffit de quelques chaines dans le fichier fr_FR du thème enfant, elles seront chargées comme telles
      – les chaines se trouvent dans des fichiers non-modifiés : dans ce cas, il faut éviter de les modifier juste pour changer le textdomain, et il faut modifier la traduction, selon la méthode que je donne.

      En cas de modification de la traduction selon ma méthode, c’est un fichier entier qui va être chargé, au lieu d’un autre. Il doit donc contenir la totalité des chaines.

      J’espère que j’ai été claire ?

  14. rvNux dit :

    Bonjour Marie-Aude,
    Merci de m’avoir répondu rapidement en cette période encore estivale. :-)
    Il me semble avoir compris ton tuto mais moins ta réponse.
    Je suis vraiment dans le cas ou il existe une traduction “officielle” de BP et ou je veux “seulement surcharger” qq termes dans un fichier modifié sous le thème enfant.

    J’ai trouvé ce snippet :
    add_action( ‘after_setup_theme’, ‘changeLanguage’ );
    function changeLanguage(){
    unload_textdomain( ‘domaine’ );
    load_plugin_textdomain(‘domaine’, false, ‘../themes/nomDeMonTemplate/languages/buddy-​​H_​fr.po’);
    }

    Est-ce que je dois charger ce fichier po allégé ou alors un autre type de fichier ou alors je n’ai rien compris ! ??
    @+

    • Marie-Aude dit :

      Honnêtement, je ne saurais pas te dire, car cela semble être un “truc” très spécial. Ce que je comprends du code, c’est qu’il empêche le chargement d’une traduction (unload_textdomain) pour la remplacer par une traduction dépendante d’un plugin donné.
      Vu comme ça et sans voir le détail du reste, ça ne me semble pas correspondre à ton besoin, surtout si le fichier buddy-H_fr.po est “allégé”. Car si il est “allégé” le unload_textdomain peut empêcher le chargement d’une traduction.
      Maintenant “domaine’ est une formulation générique, qui devrait être remplacée par un textdomain spécifique pour être efficace.

      En revanche, via un plugin, c’est un code que tu peux utiliser pour remplacer un fichier de traduction complet par un autre. ça me parait simplement plus lourd que ma méthode. A tester ?

      • rvNux dit :

        oui effectivement ce blocage ne me va pas car il s’agit de la traduction principale.
        mais est-ce qu’un simple
        load_plugin_textdomain(‘domaine’, false, ‘../themes/nomDeMonTemplate/languages/buddy-​​H_​fr.po’); ne suffirait pas dans functions.php mais je ne voudrai pas que cela pose problème !

        • Marie-Aude dit :

          ça ne suffit pas, à mon avis, car il faut dans la fonction de génération de la chaine _e(‘texte à traduire’, ‘domainedetraductionbp’) de Buddy Press remplacer domainedetraductionbp par “domaine”

  15. Li-An dit :

    Je viens de comprendre à quoi ça sert ! Je vais pouvoir “fixer” la traduction du thème Hueman !

  16. Bernard dit :

    Bonjour,

    et si la mise à jour du thème inclus de nouveaux items ? il faudrait faire une sorte de merge (fusion) entre le fichier déjà traduit et le nouveau. Comment envisager une telle problématique ?

    En vous remerciant par avance.

    Bien cordialement

    • Marie-Aude dit :

      Oui mais c’est très rarement le cas… de plus si la traduction n’est pas trouvée dans le fichier dans languages/themes/ elle est recherchée ensuite dans le fichier.mo du theme

      • Bernard dit :

        Merci Marie-Aude de ta réponse si prompte ;o)

        Faut dire que je débute en WP. Je me pose peut-être des questions qui n’ont pas lieu d’être. Donc l’idée c’est de poser le fichier traduit dans languages/​themes/ et de compléter le fichier du thème (donc la mise à jour) dans le thème. C’est bien ça ?

  17. Thierry dit :

    Merci, merci, merci … je partage

  18. Li-An dit :

    Ah ah, je pense que cet article est obsolète depuis que les traductions se font de plus en plus sur translate.wordpress.org car les traductions officielles sont envoyées directos dans ce répertoire commun écrasant toute tentative de personnalisation.
    Les solutions ? Loco Translate (qui permet de garder une translation personnalisée séparée) ou http://www.echodesplugins.li-an.fr/plugins/wp-custom-mo-file/

  19. Akro Web dit :

    Bonjour,

    Merci pour vos tutos.

    J’ai créé un thème enfant du thème twentysixteen.

    Je souhaite modifier quelques traduction pour mon theme enfant.
    J’ai modifier les fichier de mon theme parent avec poedit.
    j’ai mis les fichiers dans le dossier wp-content/languages/themes avec le nom du textdomain que j’ai insérer dans l’entête de mon fichier style.css de mon thème enfant :
    wpakro-fr_FR.mo et wpakro-fr_FR.po

    et j’ai mis le code ci-dessous dans le fichier funtions.php de mon thème enfant.
    // prise en compte du dossier de traduction du theme enfant à la place du parent
    function my_child_theme_setup() {
    load_child_theme_textdomain( ‘twentysixteen’, site_url() . ‘/wp-content/languages/themes’ );
    }
    add_action( ‘after_setup_theme’, ‘my_child_theme_setup’ );

    Mais rien ne fonctionne pas de prise en compte des traductions modifié de mon thème enfant, il prend toujours le thème parent ?

    Et ce que le code du fichier functions.php et bon.
    Et ce que je dois mettre autre chose pour déclarer le texdomain de mon theme enfant ?

    là je bloque.

    Merci

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *