Maison >Tutoriel CMS >WordPresse >WordPress I18N: préparez votre traduction au plugin
Dans un article précédent, j'ai couvert les principes fondamentaux de l'internationalisation de WordPress (abrégée comme i18n); Comment installer une version localisée de WordPress et comment un site WordPress existant peut être facilement converti en une version localisée.
Dans cet article, je vais vous guider à travers le processus d'internationalisation des plugins WordPress. Le processus n'est pas difficile et une fois les connaissances acquises, vous pouvez faire en sorte que vos plugins WordPress se traduisent facilement dans d'autres langues.
Pourquoi internationaliser?
En tant que développeur, vous n'avez peut-être pas le temps de fournir des versions localisées de votre plugin parce que vous ne parlez pas d'autres langues. Cependant, lorsque vous internationalisez votre plugin, vous laissez la porte ouverte aux autres pour créer une localisation sans nécessairement modifier le code source.
Maintenant que nous connaissons le concept d'internationalisation et de localisation des plugins, plongeons-nous dans le processus de préparation des plugins pour la traduction.
La première étape à faire pour rendre un plugin traduisible consiste à inclure les en-têtes de traduction parmi les en-têtes de plugin.
Les en-têtes de traduction sont le domaine texte et le chemin du domaine.
Le domaine du texte est utilisé pour désigner tout le texte appartenant à un plugin. Il s'agit d'un identifiant unique qui garantit que WordPress peut faire la distinction entre toutes les traductions chargées. Cela augmente la portabilité et joue mieux avec les outils WordPress déjà existants.
Le domaine texte doit correspondre à la limace du plugin. Par exemple, si votre plugin est un seul fichier appelé sample-plugin.php ou il est contenu dans un dossier appelé exemple d'échantillon le domaine de texte devrait être un échantillon-plugin.
Le nom de domaine du texte doit utiliser des tirets et non des soulignements.
Rappelez-vous que j'ai dit que le domaine texte devait correspondre à la limace du plugin? Ce n'est peut-être pas vrai après tout. J'ai effectué une expérience rapide avec l'un de mes plugins, au lieu de la limace du plugin, j'ai utilisé un texte unique et cela a fonctionné sans aucun problème.
moral: assurez-vous que le domaine texte est unique afin qu'il ne se heurte pas à celui des autres plugins.
Le chemin de domaine est le dossier que WordPress recherche les fichiers de traduction .mo.
Par défaut, WordPress recherche dans le répertoire du plugin pour les fichiers de traduction à utiliser. Avoir le fichier de traduction dans le dossier racine de votre plugin pourrait désorganiser votre structure de plugin.
Si vous souhaitez conserver les fichiers de traduction dans un dossier, par exemple; / Langues, vous devez en informer WordPress à ce sujet en utilisant l'en-tête de chemin de domaine.
Vous trouverez ci-dessous un en-tête typique d'un plugin WordPress comprenant celui de la traduction.
<span><span><?php </span></span><span><span>/* </span></span><span><span> Plugin Name: Enable Shortcode and PHP in Text widget </span></span><span><span> Plugin URI: http://w3guy.com/shortcode-php-support-wordpress-text-widget/ </span></span><span><span> Description: Enable shortcode support and execute PHP in WordPress's Text Widget </span></span><span><span> Author: Agbonghama Collins </span></span><span><span> Version: 1.2 </span></span><span><span> Author URI: http://w3guy.com </span></span><span><span> Text Domain: espw-plugin </span></span><span><span> Domain Path: /languages/ </span></span><span><span> */</span></span>
Maintenant, nous utiliserions la fonction load_plugin_textDomain () pour dire à WordPress de charger un fichier de traduction s'il existe pour la langue de l'utilisateur.
Vous trouverez ci-dessous la fonction Synopsis.
<span><span><?php load_plugin_textdomain( $domain, $abs_rel_path, $plugin_rel_path ) ?></span></span>
Le premier domaine de paramètre $ doit être le domaine texte; Le $ ABS_REL_PATH a été obsolète et doit être défini sur False; Enfin, $ plugin_rel_path est le chemin d'accès relatif aux fichiers de traduction.
Si les fichiers de traduction MO se trouvent dans le propre répertoire du plugin, utilisez comme suit:
<span>load_plugin_textdomain( 'espw-plugin', false, dirname( plugin_basename( __FILE__ ) ) );</span>
Si les fichiers MO de traduction se trouvent dans le sous-répertoire des langues du plugin. Utiliser comme suit:
<span>load_plugin_textdomain( 'espw-plugin', false, dirname( plugin_basename( __FILE__ ) ) . '/languages/' );</span>
Vous n'appelez pas seulement la fonction LOAD_PLUGIN_TextDomain, il doit être appelé dans votre plugin dès l'action Plugins_loaded comme ceci:
<span>function load_plugin_textdomain() { </span> <span>load_plugin_textdomain( 'espw-plugin', FALSE, basename( dirname( __FILE__ ) ) . '/languages/' ); </span><span>} </span> <span>add_action( 'plugins_loaded', 'load_plugin_textdomain' );</span>
Maintenant que le domaine texte et l'en-tête de chemin de domaine sont définis, il est temps d'apprendre à internationaliser un plugin.
Ce segment du tutoriel sera divisé en ce qui suit:
Veuillez noter: la chaîne ESPW-Plugin sera utilisée comme domaine texte dans ce tutoriel.
Pour rendre une chaîne traduisible dans votre plugin, enveloppez la chaîne d'origine dans un appel de fonction __ () comme suit:
<span><span><?php </span></span><span><span>/* </span></span><span><span> Plugin Name: Enable Shortcode and PHP in Text widget </span></span><span><span> Plugin URI: http://w3guy.com/shortcode-php-support-wordpress-text-widget/ </span></span><span><span> Description: Enable shortcode support and execute PHP in WordPress's Text Widget </span></span><span><span> Author: Agbonghama Collins </span></span><span><span> Version: 1.2 </span></span><span><span> Author URI: http://w3guy.com </span></span><span><span> Text Domain: espw-plugin </span></span><span><span> Domain Path: /languages/ </span></span><span><span> */</span></span>
Si vous souhaitez faire écho à la chaîne au navigateur, au lieu de la construction du langage Echo, utilisez la fonction _e:
<span><span><?php load_plugin_textdomain( $domain, $abs_rel_path, $plugin_rel_path ) ?></span></span>
En tant que développeurs PHP et WordPress, je suppose que vous savez ce que sont les espaces réservés. Vous pouvez rapidement parcourir la documentation Sprintf et printf () PHP pour plus d'informations.
Si vous utilisez des variables dans des chaînes comme l'exemple ci-dessous, vous devez utiliser les espaces réservés.
<span>load_plugin_textdomain( 'espw-plugin', false, dirname( plugin_basename( __FILE__ ) ) );</span>
La bonne façon est d'utiliser la fonction printf () comme suit:
<span>load_plugin_textdomain( 'espw-plugin', false, dirname( plugin_basename( __FILE__ ) ) . '/languages/' );</span>
En parcourant le code de certains plugins hébergés dans le référentiel de plugin WordPress, je vois des choses comme ceci:
<span>function load_plugin_textdomain() { </span> <span>load_plugin_textdomain( 'espw-plugin', FALSE, basename( dirname( __FILE__ ) ) . '/languages/' ); </span><span>} </span> <span>add_action( 'plugins_loaded', 'load_plugin_textdomain' );</span>
<span>$text = __( 'Hello, SitePoint Readers!', 'espw-plugin' );</span>
Bien que les chaînes soient désormais traduites, la variable PHP $ City devient également traduisible.
C'est une mauvaise pratique car un traducteur pourrait modifier par erreur la variable ou injecter du code malveillant dans la base de code du plugin, et cela fera finalement le dysfonctionnement du plugin.
La fonction sprintf est similaire à la printf en ce qu'ils formatent la chaîne en utilisant des espaces réservés tandis que printf sort une chaîne formatée, le sprintf renvoie la chaîne.
Exemple: le code suivant affecte une chaîne formatée au texte de la variable $.
<span>_e( 'Hello, SitePoint Readers!', 'espw-plugin' );</span>
y compris le HTML dans les chaînes traduisibles dépend du contexte.
Un exemple est un lien (séparé du texte qui l'entoure):
<span>echo 'Your city is $city.'</span>Un autre exemple est un lien dans un paragraphe (non séparé du texte qui l'entoure):
<span>printf( </span> <span>__( 'Your city is %s.', 'espw-plugin' ), </span> <span>$city </span><span>);</span>
Une chaîne qui change lorsque le nombre de modifications d'éléments peut être internationalisé à l'aide de la fonction _n ().
Cette fonction accepte 4 arguments, à savoir:
Voyons quelques exemples pour comprendre comment fonctionne la fonction _n ().
En anglais, vous avez "un commentaire" et "deux commentaires". Dans d'autres langues, vous pouvez avoir plusieurs formes plurielles.
Le code ci-dessous montre comment gérer un tel scénario à l'aide de la fonction _n ().
<span>echo __('Your city is $city', 'espw-plugin');</span>
Explication du code Le code ci-dessus est composé de ces trois fonctions - printf, _n et numéro_format_i18n.
Pour une assimilation facile, le code de fonction sera disséqué avec chaque composant de fonction expliqué.
<span><span><?php </span></span><span><span>/* </span></span><span><span> Plugin Name: Enable Shortcode and PHP in Text widget </span></span><span><span> Plugin URI: http://w3guy.com/shortcode-php-support-wordpress-text-widget/ </span></span><span><span> Description: Enable shortcode support and execute PHP in WordPress's Text Widget </span></span><span><span> Author: Agbonghama Collins </span></span><span><span> Version: 1.2 </span></span><span><span> Author URI: http://w3guy.com </span></span><span><span> Text Domain: espw-plugin </span></span><span><span> Domain Path: /languages/ </span></span><span><span> */</span></span>
Le premier argument transmis à la fonction _n est le texte à afficher lorsque le nombre de commentaires est singulier.
Le second est le texte affiché lorsque le nombre de commentaires est supérieur à un.
L'ensemble d'espace réservé contiendra la valeur de numéro_format_i18n (get_comments_number ()) qui sera expliqué sous peu.
Le troisième argument get_comments_number () est supposé être une fonction qui renvoie le nombre de commentaires.
S'il retourne 1, le premier argument un commentaire est sorti par printf sinon le deuxième argument% des commentaires s est retourné s'il est supérieur à 1.
Veuillez noter: l'espace réservé% s est remplacé par l'entier renvoyé par numéro_format_i18n (get_comments_number ()) qui est le deuxième argument transmis à la fonction printf.
Enfin, le quatrième argument est la traduction Domaine de texte .
La fonction numéro_format_i18n () convertit le nombre de commentaires au format basé sur les paramètres régionaux. Voir la documentation pour plus d'informations.
similaire au numéro_format_i18n () est la date_i18n qui récupère la date au format localisé, basé sur l'horodatage.
Toujours sur la fonction _n (), ci-dessous est une autre démonstration du fonctionnement de la fonction.
<span><span><?php load_plugin_textdomain( $domain, $abs_rel_path, $plugin_rel_path ) ?></span></span>
Si le nombre de dollars de variable renvoie 1, le texte que nous avons supprimé un message de spam sera affiché; Mais s'il est supérieur à 1, nous avons supprimé% d des messages de spam s'affichent avec l'espace réservé% D remplacé par la valeur entière de $ Count.
Parfois, un terme est utilisé dans plusieurs contextes, bien qu'il soit un seul et même mot en anglais, il doit être traduit différemment dans d'autres langues.
Par exemple, le message Word peut être utilisé à la fois comme verbe comme dans "Cliquez ici pour publier votre commentaire" et comme un nom "Modifier ce post".
dans de tels cas, la fonction _x ou _Ex doit être utilisée.
Il est similaire à __ () et _e (), mais il a un argument supplémentaire - $ context.
<span>load_plugin_textdomain( 'espw-plugin', false, dirname( plugin_basename( __FILE__ ) ) );</span>
En utilisant cette méthode dans les deux cas, nous obtiendrons le commentaire de la chaîne pour la version originale, mais les traducteurs verront deux chaînes de commentaires pour la traduction, chacune dans le contexte différent.
Lorsque les chaînes rendues translatibles par la fonction _x () sont analysées par un outil de traduction tel que PoEdit, l'argument de contexte fournit un indice au traducteur sur le contexte que la chaîne / le texte a été utilisé.
En allemand, le poste en tant que nom est Beitrag tandis que comme un verbe est verbuchen.
Vous trouverez ci-dessous une capture d'écran de Poedit traduisant le poste de chaîne en allemand avec le contexte carré.
6. Échappement des chaînes de traduction
Parmi la liste figurent des fonctions d'échappement des textes de traduction - ESC_HTML (), ESC_HTML_E (), ESC_HTML_X (), ESC_ATTR (), ESC_ATTR_E () et ESC_ATTR_X (). Vous pouvez obtenir plus d'informations sur chacune de ces fonctions sur WordPress Codex.
Je n'ai pas besoin d'expliquer chacun d'entre eux, mais ce qu'ils font est d'échapper aux textes traduisibles.
L'un des objectifs de WordPress est de permettre aux utilisateurs du monde entier de publier facilement du contenu. En tant que développeur de plugin, vous pouvez aider à soulager davantage le processus de publication pour les utilisateurs lorsque vous internationalisez vos plugins.
La première partie de ce tutoriel concernait essentiellement tout ce que vous devez savoir sur le plugin i18n.
La partie finale sera une procédure sur la façon de préparer une traduction de plugin et d'apprendre à localiser un plugin sur une nouvelle langue.
J'espère que vous avez appris quelque chose de nouveau à partir de ce tutoriel.
codage heureux!
La fabrication d'une traduction de plugin WordPress est cruciale pour atteindre un public mondial. Tous les utilisateurs de WordPress ne sont pas des anglophones. En internationalisant votre plugin, vous le rendez accessible aux utilisateurs qui parlent différentes langues, augmentant ainsi votre base d'utilisateurs. Il améliore également l'expérience utilisateur car les utilisateurs peuvent interagir avec votre plugin dans leur langue maternelle, ce qui le rend plus convivial.
WordPress I18n, ou l'internationalisation, fonctionne par Rendre les chaînes de texte de votre plugin traduisibles dans d'autres langues. Ceci est réalisé en emballant ces chaînes de texte dans une fonction spéciale qui leur permet de traduire. WordPress utilise le framework de localisation GNU GetText à cet effet, qui fournit un ensemble d'outils pour traduire le texte.
Faire un WordPress WordPress La traduction du plugin prêt pour la traduction implique plusieurs étapes. Tout d'abord, vous devez internationaliser votre plugin en enroulant toutes les chaînes de texte dans la fonction __ () ou _e (). Ensuite, vous devez créer un fichier .pot (modèle d'objet portable) qui contient toutes les chaînes traduites de votre plugin. Ce fichier est utilisé comme modèle pour créer des fichiers .po (objet portable) et .mo (objet machine), qui contiennent les chaînes traduites.
Les fonctions __ () et _e () sont toutes deux utilisées dans WordPress I18n pour rendre les chaînes de texte traduites. La principale différence entre eux est que __ () renvoie la chaîne traduite, tandis que _e () fait écho ou publie directement la chaîne traduite. Par conséquent, vous utiliseriez __ () lorsque vous souhaitez stocker la chaîne traduite dans une variable, et _e () lorsque vous souhaitez afficher la chaîne traduite en utilisateur.
Pour traduire votre plugin WordPress en différentes langues, vous devez créer des fichiers .po et .mo pour chaque langue. Ces fichiers contiennent les chaînes traduites et sont nommés selon le code de langue ISO-639 (par exemple, en_us pour l'anglais, FR_FR pour le français). Vous pouvez utiliser un outil comme PoEdit ou Loco Traduire pour créer et gérer ces fichiers de traduction.
Il existe plusieurs outils disponibles pour WordPress I18N. Poedit et Loco Traduction sont des outils populaires pour créer et gérer des fichiers de traduction. Gotpress, un outil de traduction sur le Web, est également utilisé par la communauté WordPress pour traduire WordPress Core, Plugins et Thèmes.
Vous Peut tester votre plugin WordPress pour la préparation de la traduction en modifiant la langue dans vos paramètres WordPress et en vérifiant si les chaînes de texte du plugin sont correctement traduites. Vous pouvez également utiliser un outil comme le plugin de damier WordPress I18N, qui vérifie votre plugin pour les erreurs i18n courantes.
Vous pouvez contribuer aux traductions du plugin WordPress WordPress à travers l'équipe WordPress Polyglots. Ils sont chargés de localiser WordPress dans différentes langues. Vous pouvez rejoindre l'équipe et commencer à traduire des plugins et des thèmes dans votre langue maternelle.
.pot, .po et .mo Les fichiers jouent un rôle crucial dans WordPress I18n. Le fichier .pot est un modèle qui contient toutes les chaînes traduites de votre plugin. Le fichier .po est un fichier lisible par l'homme qui contient les chaînes traduites, et le fichier .mo est un fichier lisible par machine qui est utilisé par WordPress pour afficher les chaînes traduites.
La fabrication d'une traduction de thème WordPress est implique un processus similaire aux plugins. Vous devez internationaliser votre thème en enroulant toutes les chaînes de texte dans la fonction __ () ou _e (). Ensuite, vous devez créer un fichier .pot et l'utiliser comme modèle pour créer des fichiers .po et .mo pour chaque langue.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!