Comment traduire une extension en Français avec PoEdit ?

  • Statut : non résolu
11 sujets de 1 à 11 (sur un total de 11)
  • Auteur
    Messages
  • #447902
    Oo
    Membre
    Maître WordPress
    2486 contributions

    Bonjour @ tous,

    J’ai beau chercher et malgré la discussion suivante, je ne trouve pas chaussure à mon pied !

    Voici mon projet/envie :

    Les extensions sont très utiles et utilisées sous WP mais malheureusement beaucoup d’entre elles sont disponible en anglais ! Je désire donc les traduire et ainsi les mettre à disposition de la communauté francophone de WP !

    Jusqu’a ce jour, je traduisais les fichier en dur (traduction direct dezs fichiers source) mais il s’avère qu’avec les mises à jour et améliorations régulières, ce travail devint fastidieux (Obliger de tout recommencer) !

    Donc, j’aimerais me rabattre sur l’utilisation de PoEdit (avec les fichier POT, PO et MO) mais je suis un peu novice dans ce domaine !

    Ma prémière réalisation est la traduction du futur thème de mon site (disponible prochainement) mais le fichier POT était déjà éxistant donc facile de le reprendre et de créer le fr_FR.po et fr_FR.mo !

    Par contre pour les pour les extensions, j’ai reussi à prendre un fichier POT lambda et à le mettre à jour et ainsi traduire une extension (wp-useronline de Lester Chan) mais j’ai quelque questions !

    – Comment créer de toutes pièces un fichier POT (sans prendre un autre fichier et de le mettre à jour) ?
    – Comment nommer le fichier po et mo que nous allons créer avec l’aide du POT ?
    – Comment faire pour que cette traduction soit prise en compte (où la placer sur le serveur, faut t-il modifier/ajouter du code dans le fichier source de l’extension…) ?

    Voila, je crois que c’est tout !

    Merci de votre aide !

    :D

    #575483
    xavier
    Gestionnaire du forum
    Maître WordPress
    2126 contributions

    Malheureusement, pour créer un POT, il faut d’abord que le plugin soit internationalisé, cest-à-dire que l’auteur ait mis toutes ses chaines dans des fonctions __() ou _e().
    Pour information, _e(“Mon texte”) est utilisé pour remplacer echo “Mon texte”, tandis que __(“Mon texte”) est utilisé lorsque la chaîne “Mon texte” est renvoyée à une autre fonction, pas directement affichée comme c’est le cas avec echo.
    http://codex.wordpress.org/Translating_WordPress#Localization_Technology

    A partir du moment où un plugin ne comporte pas ses fonctions d’internationalisations, aucun POT/PO/MO n’est réalisable. Tu peux alors soit demander à l’auteur du plugin d’internationaliser son plugin (par exemple en lui envoyant toi-même la dernière version internationalisée), ou traduire les chaînes directement, sans te prendre la tête avec __() et autres car il te faudra de la même manière tout modifier à la prochaine version.

    Supposons que ton plugin ait des chaînes internationalisée. Magnifique ! Il ne te reste plus qu’à les localiser (donc, créer la traduction française). Si tu n’as pas de POT, tu peux le créer en suivant ce guide :
    http://codex.wordpress.org/User:Skippy/Creating_POT_Files

    A partir du moment où tu as ton POT, tu peux créer le PO (un PO n’est qu’un fichier POT avec les chaînes traduites en plus), et donc générer le MO.

    Voilà.

    #575484
    Oo
    Membre
    Maître WordPress
    2486 contributions

    Salut Xavier,

    Merci des précisions, c’est plus clair dans ma tête !

    Alors, pour info, l’extension en question est partiellement internationalisée. Si j’ai bien compris, il suffit que j’ajoute les chaines maquantes sous les fonctions __() et_e() et donc la traduction sera faisable sous PoEdit ?

    Sinon, j’ai vu qu’il fallait ajouter la fonction “load_plugin_textdomain()” à l’extension, il suffit de mettre le nom du fichier po entre parenthèse ?

    Merci de ton aide !

    Ca va permettre à la traduction et à la mise à disposition de plusieurs extensions !

    :D

    #575485
    xavier
    Gestionnaire du forum
    Maître WordPress
    2126 contributions
    Oo Bubu wrote:
    Sinon, j’ai vu qu’il fallait ajouter la fonction “load_plugin_textdomain()” à l’extension, il suffit de mettre le nom du fichier po entre parenthèse ?

    C’est ce que je comprends également.

    Cela dit :
    “load_plugin_textdomain(‘myplugin’);

    Now, when you markup strings in your plugin, you must specify the domain in the calls to __() and _e().
    __(‘String to translate.’, ‘myplugin’);”
    http://boren.nu/archives/2004/11/01/localizing-plugins-and-themes/

    Donc fait déjà un POT/PO/MO avec le plugin tel quel, et si ça ne marche pas, ajoute load_plugin_textdomain(‘leNomDuBidule’); au début.

    #575486
    Oo
    Membre
    Maître WordPress
    2486 contributions

    Salut Xavier,

    Ok, je vais tester cela ! Même si j’avais testé en copiant sur une extension déjà existant et disponible avec fichier POT ! Je me retrouvais avec une erreur !

    Je vais refaire correctement et je reviens :D

    @ tt 😉

    #575487
    Oo
    Membre
    Maître WordPress
    2486 contributions

    Yo Xavier,

    Je viens de créer le POT/PO/MO, tout ce passe convenablement ! J’ai fait une traduction mot à mot (Pour faire vite) !

    Ensuite passage à l’étape du test en ligne !

    1er test :

    -Ajout des fichiers POT/PO/MO dans le repertoire “plugin” de WP => Rien ne se passe !

    2ème test :

    – Ajout des fichiers POT/PO/MO dans le repertoire “plugin” de WP + Ajout de la fonction “load_plugin_textdomain(‘wpuo’);” dans les deux fichiers php de l’extension (wp-useronline.php situé à la racine de WP et useronline.php situé dans le repertoire “plugin” de WP) => J’obtiens l’erreur suivante quand je vais sur la page : http://www.leblog2bubu.info/wp-useronline.php

    Fatal error: Call to undefined function: load_plugin_textdomain() in /homepages/2/d147387020/htdocs/wp-useronline.php on line 20

    3ème test :

    – Pareil que le précédent mais le nom de fichier différent : wpuo.po et wpuo.mo

    4ème test :

    – J’ai testé avec le fonction”load_plugin_textdomain(‘wpuo/wpuo.po/wpuo.mo’);” sur une des deux pages et vis versa !

    Mais toujours rien !

    Ce qui est intéréssant, c’est de voir que l’extension, plus précisément le mots Users est traduit en français par Utilisateurs et ce sans les fichiers POT/MO/PO et avec l’extension en anglais ! Ce qui veut dire, qu’il va chercher la traduction ailleurs !

    Dans le fichier fr_FR.mo ? Ce qui me semble étrange !

    PS : pour le moment, j’enlève les fonctions dans les différents fichiers PHP de l’extension pour laisser apparaitre la traduction de Users !

    Merci de ton aide !

    😉

    #575488
    xavier
    Gestionnaire du forum
    Maître WordPress
    2126 contributions

    La fonction load_plugin_textdomain() se trouve dans le fichier wp-l10n.php, et ressemble à ça :

    function load_plugin_textdomain($domain, $path = ‘wp-content/plugins’) {
    	$locale = get_locale();
    	
    	$mofile = ABSPATH . “$path/$domain-$locale.mo”;
    	load_textdomain($domain, $mofile);
    }

    Si le plugin ne le trouve pas, c’est peut-être qu’il n’appelle pas les fichiers de fonctions de WP à la base…
    Par ailleurs, je pense qu’il faut place le .mo au même niveau que le plugin, donc l’appel devrait sans doute être
    load_plugin_textdomain(‘wpuo’);
    et le fichier de la forme wpuo-fr_FR.mo (d’après ce que je lis dans la fonction).

    #575489
    Oo
    Membre
    Maître WordPress
    2486 contributions

    Salut Xavier,

    Merci de m’aider !

    J’ai bien vérifier dans le fichier wp-l10n.php et la fonction load_plugin_textdomain() que tu as décrite y est bien !

    Ensuite, j’ai ajouté load_plugin_textdomain(‘wpuo’); au fichier useronline.php qui se trouve dans le fichier plugin et pas dans wp-useronline.php qui se trouve à la racine ! J’ai bien nommé le fichier MO ! Mais rien n’y fait !

    Pour ma part, je ne sais vraiment plus quoi faire ! Sachant que passé outre mes capacités 😋

    Merci de ton aide !

    😉

    #575490
    AmO
    Participant
    Maître WordPress
    4452 contributions

    Pour traduire un plugin :

    Vérifier que :

    chargement des bonnes fonctions :

    require_once(ABSPATH . ‘wp-includes/streams.php’);
    require_once(ABSPATH . ‘wp-includes/gettext.php’);

    Spécifier le chemin du plugin:

    define(‘MyPluginPath’,dirname(__FILE__).’/’);

    Ensuite spécifier le repertoires des langues :

    load_textdomain(‘Nomduplugin(1)’, MyPluginPath.’/languages/fichier.mo’);

    Enfin pour chaques occurences à traduire :

    __(‘occurence’, ‘Nomduplugin’)

    ou

    _e(‘occurence’, ‘Nomduplugin’)

    reference au nom du plugin situé dans le ptit (1)

    Ca fonctionne chez moi 😉

    #575491
    AmO
    Participant
    Maître WordPress
    4452 contributions

    Ca fonctionne uniquement en précisant le fichier chez moi…
    Je sais pas trop comment éviter de pas le préciser :s
    pour avoir un truc dynamique :s

    #575492
    Oo
    Membre
    Maître WordPress
    2486 contributions

    Salut AmO,

    Merci pour les explications mais j’y arrive pas !

    Je vais relancer le créateur pour qu’il internationalise ses extensions !

    J’aurais aimer savoir le faire à vrai dire !

    😉

11 sujets de 1 à 11 (sur un total de 11)
  • Vous devez être connecté pour répondre à ce sujet.