J'ai internationalisé mon plugin et je cherche maintenant le meilleur moyen de charger les chaînes traduites du plugin. J'inclus myplugin/languages / myplugin.pot avec mon plugin mais je ne prévois pas de distribuer de fichiers .po ou .mo.
Ma question:
Est-ce que mon travail en tant qu'auteur de plugin est d'utiliser une fonction telle que load_plugin_textdomain()
pour charger des chaînes traduites ou est-ce le travail de l'utilisateur final de mon plugin?
La raison pour laquelle je demande:
Si je devais utiliser load_plugin_textdomain()
, le passage d'un troisième argument, comme dans l'exemple ci-dessous, chargera myplugin {$ locale} .mo à partir de myplugin/languages. Cependant, l'utilisateur final du plug-in devra fournir ce fichier myplugin {$ locale} .mo, mais bien entendu, lorsque j'émettrai une mise à jour de plugin, ce fichier myplugin {$ locale} .mo sera remplacé.
function myplugin_load_textdomain() {
load_plugin_textdomain( 'myplugin', false, plugin_basename( dirname( __FILE__ ) ) . '/languages' );
}
add_action( 'plugins_loaded', 'myplugin_load_textdomain' );
Réf: https://codex.wordpress.org/Function_Reference/load_plugin_textdomain
EDIT - apparemment, tout cela est faux, veuillez ne pas en tenir compte.
Vous pouvez d'abord utiliser la constante WP_LANG_DIR
pour charger les traductions à partir du répertoire des langues update-safe, puis revenir au répertoire des langues de votre plugin pour toutes les traductions fournies par le plugin. L'emplacement par défaut est wp-content/languages
et les utilisateurs peuvent définir WP_LANG_DIR
eux-mêmes dans wp-config.php
. Lorsque vous chargez des traductions provenant de plusieurs sources, la première instance trouvée est utilisée. Par conséquent, les traductions utilisateur ont toujours préséance sur les traductions fournies par le plugin et permettent aux utilisateurs de faire des traductions partielles sans traduire toutes les chaînes.
function your_plugin_load_plugin_textdomain(){
$domain = 'your-plugin';
$locale = apply_filters( 'plugin_locale', get_locale(), $domain );
// wp-content/languages/your-plugin/your-plugin-de_DE.mo
load_textdomain( $domain, trailingslashit( WP_LANG_DIR ) . $domain . '/' . $domain . '-' . $locale . '.mo' );
// wp-content/plugins/your-plugin/languages/your-plugin-de_DE.mo
load_plugin_textdomain( $domain, FALSE, basename( dirname( __FILE__ ) ) . '/languages/' );
}
add_action( 'init', 'your_plugin_load_plugin_textdomain' );
Tu dois:
load_plugin_textdomain()
. ( Voir Comment traduire votre plugin ).gettext
filter , l'utilisateur doit ne pas modifier le fichier de traduction directement.gettext
avec un textdomain correspondant au slug du plugin . Vous n'êtes pas obligé d'inclure un fichier de langue , surtout si vous soumettez le plugin dans le répertoire du plugin car il sera importé dans GlotPress dans translate.wordpress.org où tout le monde peut traduire votre plugin dans n’importe quelle langue et le système générera un pack de langue que WordPress téléchargera si nécessaire pendant l’installation du plugin. Lorsqu'un pack de langue est mis à jour, l'administrateur sera averti de la mise à jour, tout comme les mises à jour pour les plugins et les thèmes fonctionnent mais sont séparées de la mise à jour du plugin.WP_LANG_DIR
directement dans votre plugin en tant que système surchargé, comme cela est suggéré dans d'autres réponses. Il peut interrompre le chargement des modules de langue de translate.wordpress.org si les fichiers mo partagent le même dossier sous WP_LANG_DIR
. De plus, le chargement de plusieurs fichiers mo, un en remplaçant un autre, peut ralentir votre site .