web-dev-qa-db-fra.com

Possibilité d'ajouter un fichier de langue à un plugin sans ajouter de fichiers .po/.mo au répertoire du plugin?

J'ai besoin d'ajouter un fichier de langue à un plugin existant. Pas pour des raisons de traduction, mais parce que je voudrais changer toutes les occurrences d'un mot donné en quelque chose d'autre. Bien que je puisse simplement déposer un autre fichier .po/.mo dans le répertoire des langues du plugin, je ne veux pas perdre le fichier de langue lorsque le plugin est mis à jour.

Il semble que si le plugin utilisait load_textdomain pour extraire des fichiers du WP_LANG_DIR en plus du load_plugin_textdomain, je pourrais simplement déposer des fichiers .po dans le /wp-content/languages/ et cela fonctionnerait.

BuddyPress le fait de cette façon et a des instructions pour faire exactement le genre de chose que j'essaie de faire: http://codex.buddypress.org/getting-started/customizing/customizing- labels-messages-and-urls/ . J'ai changé chaque référence à "Groupe" en "Communauté".

Tout ce que je dois faire est de déposer les fichiers correctement nommés dans le répertoire /wp-content/languages/ et les fichiers sont chargés.

Le plug-in que je tente de modifier est le suivant: Abonnement par courrier électronique à BuddyPress Group .

Il charge les langues en utilisant cette fonction:

function activitysub_textdomain() {
    load_plugin_textdomain( 'bp-ass', false, dirname( plugin_basename( __FILE__ ) ) . '/languages/' );
}
add_action( 'init', 'activitysub_textdomain' );
1
jjeaton

La meilleure façon de le faire est probablement d'utiliser un deuxième plugin, fait sur mesure.

Créez un nouveau répertoire de plugin. Appelez cela quelque chose comme "exemple-com-custom-langs" ou quelque chose d'unique sur votre site. Dans celui-ci, créez un fichier php avec un en-tête de plugin décrivant ce que fait le plugin (pour votre propre santé), et faites quelque chose comme ça:

add_action('plugins_loaded','example_com_custom_langs_plugins_loaded');

function example_com_custom_langs_plugins_loaded() {
  remove_action('init', 'activitysub_textdomain'); // disable the old lang files
  add_action('init','example_com_custom_langs_init'); // load our new lang files
}

function example_com_custom_langs_init() {
  load_plugin_textdomain( 'bp-ass', false, dirname( plugin_basename( __FILE__ ) ) . '/languages/' );
}

Maintenant, vous pouvez placer vos fichiers de langue dans le répertoire/languages ​​de ce nouveau plugin et ils seront chargés à la place des originaux dans l'autre plugin. Et ce plugin ne sera pas mis à jour lorsque l'autre plugin sera mis à jour. Donc, tant qu'ils ne changent pas de "bp-ass" en tant que textdomain, le vôtre s'habitue à la place.

2
Otto

Je crois que vous pouvez utiliser un filtre load_textdomain_mofile ...

add_filter('load_textdomain_mofile', 'custom_load_textdomain_mofile', 10, 2);
function custom_load_textdomain_mofile( $mofile, $domain){
    if ($domain == 'bp-ass')
        $mofile = 'somepath/to/your/mo/file.mo';
    return $mofile;
}

La différence (en comparant Otto) est que vous pouvez réellement spécifier votre fichier mo pour le domaine ne détermine pas comment la localisation sera modifiée (déclenchée).

3
Butuzov