web-dev-qa-db-fra.com

Comment préparer une traduction de plugin WordPress?

Quelle est la meilleure façon de créer un plugin prêt à être traduit?

Il n'a pas besoin d'être traduit dès le début, mais il doit être facilement traduisible pour que les autres développeurs de différentes cultures puissent participer au processus de localisation du plugin.

19
Nabil Kadimi

1. Ecrire avec la localisation à l'esprit

N'utilisez pas echo ou print() pour générer du texte, utilisez plutôt les fonctions WordPress __() et _e():

/** Not localization friendly */
echo "Welcome to my plugin";    
// OR
print("Welcome to my plugin");

/** Localization friendly */
_e('Welcome to my plugin', 'my-plugin');
// OR
$my_text = __('Welcome to my plugin', 'my-plugin');
echo $my_text;

_e() et __() fourniront la traduction - dans la langue actuelle - du texte fourni en tant que premier paramètre. _e() affichera le texte alors que __() le renverra.

Le second paramètre est le text domain , vous l’utiliserez pour indiquer à WordPress que le texte fourni en tant que premier paramètre appartient à ce plugin. Vous pouvez utiliser le nom de votre choix, mais je préfère utiliser le même nom. comme je l'ai utilisé pour le fichier plugin de répertoire, je le trouve plus intuitif.

Comment afficher du texte dynamique comme: "Bonjour <nom d'utilisateur>"?

Avec __() et sprintf():

/** Get the username */
$username = 'Magictrick';

/** Not localization friendly */
echo "Hello $username";     

/** Localization friendly */
printf(__('Hello %s', 'my-plugin'), $username);
// OR 
$my_text = sprintf(__('Hello %s', 'my-plugin'), $username);
echo $my_text;

2. Préparez les fichiers .pot/.po/.mo

Définitions

  • Le fichier .pot : est mis à votre disposition par le développeur du plugin et sert de point de départ pour créer de nouvelles traductions, WordPress ne l'utilise pas.
  • Un fichier .po : est un fichier de traduction que vous ou quelqu'un d'autre avez commencé, et peut-être terminé, WordPress ne l'utilise pas.
  • Le fichier A.mo : est créé automatiquement par Poedit chaque fois que vous enregistrez un fichier .po. Tout ce que vous pouvez faire avec ces fichiers consiste à les télécharger ou à les télécharger chaque fois que vous créez ou mettez à jour un fichier .po. WordPress obtient les traductions des fichiers .mo .

Ouvrez Poedit et créez un nouveau catalogue (Fichier ›Nouveau Catallog ...) avec ces paramètres:

  • Informations sur le projet: utilisez vos informations (ou celles de votre équipe), la langue et le pays doivent correspondre à la langue par défaut de votre plugin.
  • Chemins:
    • Chemin de base: .
    • Chemins d’accès: supprimer tout et ajouter .., (nous allons stocker le fichier de langue dans un sous-répertoire de plugin appelé languages)
  • Mots-clés: supprimer tout & ajouter __ et _e

Enregistrer le catalogue en tant que /my_wordpress_blog/wp-content/plugins/my-plugin/languages/my-plugin.pot et scan vos fichiers de plug-in pour le texte à traduire en appuyant sur le bouton de mise à jour. Lorsque la mise à jour est terminée, fermez ce catalogue. Vous n'aurez plus besoin de mettre à jour ce fichier, sauf si vous ajoutez de nouvelles chaînes traduisibles (insérées dans __() ou _e()) dans votre plug-in.

Créons maintenant la première traduction (je vais utiliser fr_FR):

Avec Podeit , créez un catalogue à partir d’un fichier POT (Fichier ›Nouveau catalogue à partir d’un fichier POT ...)}: _:

  • Informations sur le projet: utilisez vos informations (ou celles de votre équipe), changez la langue et le pays , j'utiliserai le français et la France
  • Chemins: ne change pas
  • Mots-clés: ne pas chage

Enregistrer le catalogue sous la forme /my_wordpress_blog/wp-content/plugins/my-plugin/languages/my-plugin-fr_FR.po. Traduisez une partie ou la totalité des chaînes, save le fichier .po à nouveau, upload les fichiers .po et .mo.

Notez que chaque fois que vous enregistrez un fichier .po, un fichier .mo est généré avec le même nom, le nom du fichier .po est crucial , il est composé de la concaténation du domaine de texte du plugin (my-plugin ) et la langue locale (fr_FR), nommez toujours vos fichiers .po pour des plugins comme ceci: [textdomain] - [locale] .po , voici quelques exemples:

  • Italien/Italie: wpcf7-it_IT.po
  • Portugais/Brésil: wpcf7-pt_BR.po
  • Arabe: wpcf7-ar.po... Oui!

Chaque fois que le plugin est mis à jour avec un nouveau texte, update le fichier po, translate nouvelles chaînes et relancez les fichiers .po et .mo

3. Demandez au plugin de charger le texte traduit pour la langue courante

Quelque part dans votre plugin, vous devez dire à WordPress d'utiliser votre fichier .mo, vous pouvez le faire en utilisant ce code au début de votre fichier de plugin:

function my_plugin_init() {
  load_plugin_textdomain( 'my-plugin', false, 'my-plugin/languages' );
}
add_action('init', 'my_plugin_init');

Remplacez my-plugin par le nom de votre plugin dans les 1er et 3ème paramètres de la fonction load_plugin_textdomain.

4. Tester et dépanner

Quelques raisons pour lesquelles cela peut ne pas fonctionner:

  • Les chaînes ne sont pas importées dans le fichier .pot ou .po
    • → Mauvais paramètres de catalogue (chemin d'accès ou mots-clés ou les deux)
  • Le texte n'est pas traduit sur le site WordPress
    • → Le fichier .mo de cette langue est manquant ou porte un nom de fichier incorrect
    • → Domaine de texte non utilisé (remplacez _e('my text') par _e('my text', 'my-plugin'))
    • → Le domaine de texte n'est pas chargé (utilisez l'exemple ci-dessus avec les bons paramètres, WP ne vous avertira pas des erreurs)
36
Nabil Kadimi

La réponse de Nabil est assez complète, mais il existe une variation simple à condition que:

  1. Votre plugin se trouve sur le référentiel de plugins WordPress.org

  2. Vous souhaitez exiger que votre plug-in ne fonctionne qu'avec WordPress 4.6 ou supérieur.

Les étapes sont les suivantes:

  1. Dans le fichier readme.txt de votre plugin, ajoutez Requires at least: 4.6. Voir https://developer.wordpress.org/plugins/wordpress-org/how-your-readme-txt-works/

  2. si ce n’est pas déjà le cas, téléchargez votre plugin dans le référentiel de plugins WordPress. Voir https://wordpress.org/plugins/developers/add/ .

  3. Trouvez le domaine slug/text de votre plugin. Pour ce faire, allez à la page de votre plugin sur le référentiel de plugins WordPress. L'URL ressemblera à https://wordpress.org/plugins/your-plugin-slug/ . La dernière partie de l’URL, "your-plugin-slug", est le slug de votre plugin. C’est ce que vous utilisez pour le domaine de texte des fonctions de traduction.

  4. Utilisez les fonctions de traduction de WordPress dans votre plugin (comme __e(‘hello’, ‘my-plugin-domain’);). Assurez-vous simplement d'utiliser le bon domaine de texte de plugin, acquis à l'étape précédente. Voir https://developer.wordpress.org/plugins/internationalization/how-to-internationalize-your-plugin/ pour plus d'informations.

Si vous suivez les étapes ci-dessus, WordPress prendra en charge:

  • Analyser dans votre plugin pour toutes les chaînes traduisibles (pas besoin d'installer et d'exécuter Poedit ou quoi que ce soit)
  • Simplifiez la traduction de votre plugin sur translate.wordpress.org (nul besoin d'avoir votre propre site dédié à la traduction de votre plugin, ni de créer un processus personnalisé permettant aux traducteurs de vous soumettre leurs traductions)
  • lorsque quelqu'un utilisera votre plugin, WordPress vérifiera s'il le traduit dans sa langue et, le cas échéant, l'affichera dans sa langue (vous n'avez pas besoin de charger les fichiers de traduction sur son site Web).

(Réponse de mon article de blog ici: https://cmljnelson.blog/2019/01/01/the-really-lazy-way-to-translate-a-wordpress-plugin/ )

2
thespacecamel