web-dev-qa-db-fra.com

Qui est chargé de charger les chaînes traduites d'un plugin?

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

4
henrywright

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' );
1
Milo

Tu dois:

  • Appelez pour load_plugin_textdomain(). ( Voir Comment traduire votre plugin ).
  • Fournissez le catalogue de langues myplugin.pot et tous les fichiers de traduction localisés que vous souhaitez distribuer.
  • Si l'utilisateur souhaite remplacer un fichier de traduction, il doit utiliser l'un des filtres disponibles, par exemple gettext filter , l'utilisateur doit ne pas modifier le fichier de traduction directement.
  • Mais en réalité, il vous suffit de définir une chaîne dans une fonction 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.
  • Ne chargez pas les fichiers de langues à partir de 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 .
1
cybmeta