web-dev-qa-db-ja.com

.po/.moファイルをプラグインディレクトリに追加せずに言語ファイルをプラグインに追加することは可能ですか?

既存のプラグインに言語ファイルを追加する必要があります。翻訳のためではありませんが、あるWordの出現箇所すべてを別のものに変更したいのです。プラグインの言語ディレクトリに別の.po/.moファイルセットをドロップするだけでも構いませんが、プラグインが更新されたときに言語ファイルを失いたくはありません。

プラグインがload_textdomainに加えてWP_LANG_DIRからload_plugin_textdomainからファイルを引っ張るために/wp-content/languages/を使用した場合は、いくつかの.poファイルを/wp-content/languages/にドロップインするだけでうまくいくでしょう。

BuddyPressはこのようにして、そして私がやろうとしていることの正確な種類をするための指示を持っています: ラベルメッセージとURL / 。私はすべての参照を "Group"から "Community"に変更しました。

私がしなければならないのはfunction activitysub_textdomain() { load_plugin_textdomain( 'bp-ass', false, dirname( plugin_basename( __FILE__ ) ) . '/languages/' ); } add_action( 'init', 'activitysub_textdomain' ); ディレクトリに正しく命名されたファイルを落とすことですそしてファイルはロードされます。

私が変更しようとしているプラ​​グインは、次のとおりです。 BuddyPress Group Email Subscription

この関数を使って言語をロードします。

__コード__
1
jjeaton

これを行う最善の方法は、おそらくカスタムメイドの2番目のプラグインを使用することです。

新しいプラグインディレクトリを作ります。それを "example-com-custom-langs"のようなもの、あるいはあなたのサイトに固有のものと呼んでください。そこに、(あなた自身の正気のために)プラグインが何をするのかを記述したプラグインヘッダを持つphpファイルを作り、そしてこのようなことをしてください:

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/' );
}

これで、あなたはあなたの言語ファイルをこの新しいプラグインの/ languagesディレクトリに置くことができ、それらは他のプラグインのオリジナルの代わりにロードされます。そして、このプラグインは他のプラグインが更新されても更新されません。テキストドメインとして "bp-ass"から変わらない限り、代わりにあなたのものが使われます。

2
Otto

私はあなたが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;
}

(Ottoと比較して)違いは、ドメインにmoファイルを実際に指定できることです。ローカライズの変更方法(トリガー)は変わりません。

3
Butuzov