Comment préparer une traduction de plugin WordPress?

19

Quelle est la meilleure façon de créer un plugin prêt pour la traduction?

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

Nabil Kadimi
la source

Réponses:

38

1. Écrivez en tenant compte de la localisation

N'utilisez pas echoou print()pour produire une sortie 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 __()fournira la traduction - dans la langue actuelle - du texte fourni comme premier paramètre. _e()affichera le texte alors __()qu'il le renverra.

Le deuxième paramètre est le domaine de texte , vous l'utiliserez pour dire à WordPress que le texte fourni comme premier paramètre appartient à ce plugin, vous pouvez utiliser n'importe quel nom que vous voulez mais je préfère utiliser le même nom que celui que j'ai utilisé pour le plugin fichier de répertoire, je le trouve plus intuitif.

Comment sortir du texte dynamique comme: "Bonjour <nomutilisateur>"?

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 est utilisé comme 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.
  • 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 est de les télécharger ou de les télécharger à nouveau 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: supprimez tout et ajoutez .., (nous allons stocker le fichier de langue dans un sous-répertoire de plugin appelé langues)
  • Mots-clés: supprimer tout et ajouter __et_e

Enregistrez le catalogue sous et scannez vos fichiers de plugin pour le texte traduisible en appuyant sur le bouton de mise à jour. Lorsque la mise à jour est terminée, fermez ce catalogue, vous n'aurez pas besoin de mettre à jour ce fichier à moins que vous ajoutiez de nouvelles chaînes traduisibles (c'est-à-dire incluses dans ou ) à votre plugin./my_wordpress_blog/wp-content/plugins/my-plugin/languages/my-plugin.pot__()_e()

Créons maintenant la première traduction (j'utiliserai fr_FR):

A l'aide de 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 changez pas
  • Mots-clés: ne pas chage

Enregistrez le catalogue sous . Traduisez une partie ou la totalité des chaînes, enregistrez à nouveau le fichier .po, téléchargez les fichiers .po et .mo./my_wordpress_blog/wp-content/plugins/my-plugin/languages/my-plugin-fr_FR.po

Notez que chaque fois que vous enregistrez un fichier .po, un fichier .mo est généré avec le même nom, le nom de fichier du fichier .po est crucial , il est composé de la concaténation du domaine de texte du plug-in (my-plugin) et de la langue locale ( fr_FR), nommez toujours vos fichiers .po pour des plugins comme celui-ci: [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, mettez à jour le fichier po, traduisez de nouvelles chaînes et téléchargez à nouveau les fichiers .po et .mo

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

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-pluginpar votre nom de plugin dans les 1er et 3e paramètres de la load_plugin_textdomainfonction.

4. Testez et dépannez

Certaines raisons peuvent ne pas fonctionner:

  • Les chaînes ne sont pas importées dans le fichier .pot ou .po
    • → Paramètres de catalogue incorrects (chemin d'accès ou mots clés ou les deux)
  • Le texte n'est pas traduit sur le site WordPress
    • → Le fichier .mo pour cette langue est manquant ou a un nom de fichier incorrect
    • → Domaine de texte non utilisé (remplacer _e('my text')par _e('my text', 'my-plugin'))
    • → Domaine de texte non chargé (utilisez l'exemple ci-dessus avec les bons paramètres, WP ne vous avertira pas des erreurs)
Nabil Kadimi
la source
3
+1 Belle rédaction :) Jetez un œil à cet article: Charger les fichiers de langue WordPress de la bonne manière , " Lignes directrices pratiques pour éliminer la douleur du chargement des fichiers de langue dans WordPress ". :::::: Glotpress et le groupe Polyglots méritent également d'être mentionnés.
brasofilo
Merci pour cette belle instruction! Il convient de mentionner que load_plugin_textdomain () doit être appelé dans chaque méthode, où vous utilisez _e () et __ ()
Andreas
2

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

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

  2. Vous êtes prêt à exiger que votre plugin 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à fait, 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, accédez à la page de votre plugin dans le référentiel de plugins WordPress. L'URL sera comme https://wordpress.org/plugins/your-plugin-slug/ . Cette dernière partie de l'URL, «votre-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 domaine de texte du plug-in correct, acquis à l'étape précédente. Voir https://developer.wordpress.org/plugins/internationalization/how-to-internationalize-your-plugin/ pour plus d'informations.

Si vous effectuez les étapes ci-dessus, WordPress se chargera de:

  • Analyse de votre plugin pour toutes les chaînes traduisibles (pas besoin d'installer et d'exécuter Poedit ou quoi que ce soit)
  • Aidez n'importe qui à contribuer aux traductions de votre plugin sur translate.wordpress.org (pas besoin d'avoir votre propre site dédié à la traduction de votre plugin, ou d'avoir un processus personnalisé pour que les traducteurs vous soumettent leurs traductions)
  • lorsque quelqu'un utilise votre plugin, WordPress se chargera de vérifier s'il est traduit dans sa langue, et si c'est le cas, de l'afficher dans sa langue (pas besoin pour lui, ou pour vous, de charger les fichiers de traduction sur leur 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/ )

le spatecamel
la source
Je ne sais pas pourquoi cela a été rejeté. C'est ce que j'ai fait pour préparer wordpress.org/plugins/print-my-blog (et le plugin a été traduit avec succès)
thespacecamel
Cela signifie-t-il que si un plugin / thème ne se trouve pas dans le référentiel de plugins WordPress mais utilise le domaine de texte d'un plugin, WordPress chargerait les mauvais fichiers de traduction?
Bodo
Bonne question @bodo. Si un plugin indique d'utiliser le domaine de texte d'un autre plugin qui est dans le dépôt wp.org, je pense que WordPress utilisera volontiers les fichiers de traduction du plugin wp.org. Mais désolé, je ne suis pas sûr.
thespacecamel