WordPress met à la disposition des développeurs toutes les fonctionnalités nécessaires à l’internationalisation (la traduction) des thèmes et des extensions.
Au fil du temps, les règles d’écriture (les “bonnes pratiques”) se solidifient [rigidifient ?].
Si le thème ou le plugin ne suit pas ces “recommandations”, il y a de fortes chances qu’il ne franchisse pas les contrôles lui permettant d’intégrer le Dépôt Officiel de WordPress : le développeur devra revoir son code en conséquence.
En soi, ces recommandations sont parfaitement justifiées. C’est un gage de compatibilité, de “maintenabilité”, de lisibilité, etc. Là n’est pas le problème.
C’est juste que si l’on se conforme à ces recommandations, il me semble que le textdomain devient inutile et qu’on pourrait s’en passer…
Les recommandations WordPress
Les recommandations de développement WordPress concernant l’internationalisation des extensions, spécifient que toutes les fonctions concernées doivent indiquer, en clair, le textdomain :
$texte = __( 'The text to translate', 'mon-super-plugin' ); echo $texte; _e( 'Another text to translate', 'mon-super-plugin' );
Mais auparavant, on doit déclarer ce textdomain via la fonction dédiée :
load_plugin_textdomain( 'mon-super-plugin', false, plugin_basename( __DIR__ ) .'/languages' );
Puisqu’on déclare ce textdomain, pourquoi ensuite est-il nécessaire de le spécifier pour chaque chaine à traduire ?
D’ailleurs, si on va plus loin, ce textdomain doit correspondre au nom slug de l’extension.
Si le fichier principal de l’extension est “mon-super-plugin.php », le textdomain doit être “mon-super-plugin”.
On en arrive alors à se demander la nécessité de la fonction load_plugin_textdomain().
Tout cela pourrait être pris en charge par le core de WordPress :
Si on ne l’indique pas, WP devrait le déduire à partir du nom de l’extension.
On conserve bien sûr l’aspect optionnel afin de pouvoir spécifier un textdomain différent. Par exemple, dans le cas où l’extension reprend une chaine du cœur de WordPress ou, par exemple, de WooCommerce :
_e( 'This controls the title which you see during checkout.', 'woocommerce' )
Commentaires récents