web-dev-qa-db-ja.com

更新後にプラグインの翻訳を維持する方法

http://wordpress.org/extend/plugins/bbpress/ bbpressの言語フォルダ(wp-content/plugins/bbpress/bbp-languages)には次のような警告があります。

/**
 * Do not put custom translations here. They will be deleted on bbPress updates.
 *
 * Keep custom bbPress translations in /wp-content/languages/
 */

実際、これは新しい問題ではありません。そうです、それらは正しいです。あなたが英語以外の言語でワードプレスプラグインを使用している場合、これは大きな問題です。

基本的に私はbbpressを翻訳し、.poと.moファイルを作成しました。私は彼らの通常のWP - コンテンツ/プラグイン/ bbpress/bbp - 言語フォルダにそれらを入れた場合ファイルは動作しています。しかし上記のように警告はそれが更新時に削除されることを言っています。しかし、問題は、bbpressで提案されているように、それらをwp-content/languages /フォルダに入れた場合、翻訳が機能しないことです。

私はそれをアクティブにすることができるフックか何かがなければならないと思いますが、それに対する最善の解決策は何ですか?単に私はwp-content/languages /にプラグイン言語ファイルを保存したいです。

9
Ünsal Korkmaz

あなたはBBpressの言語ファイルへの呼び出しを置き換える必要があります。

これを行うのに適した場所は、一般的な言語のディレクトリにある言語固有のファイルです。トルコ語の場合、おそらくtr_TR.phpという名前のファイルになります。これは自動的にロードされ、ブログの言語と一致する場合は only になります。上書きされません。

BBPressは関数load_plugin_textdomainを使用せず、代わりにload_textdomainを使用します。ここでフィルタを見つけることができます:

$mofile = apply_filters( 'load_textdomain_mofile', $mofile, $domain );

だからあなたの言語のphpファイルにパスを変更するためのフィルタを追加するだけです:

function load_bbpress_tr_mofile( $mofile, $domain )
{
    if ( 'bbpress' == $domain )
    {
        // replace this. :)
        return 'FULL_PATH_TO_YOUR_FILE';
    }
    return $mofile;
}
add_filter( 'load_textdomain_mofile', 'load_bbpress_tr_mofile', 10, 2 );
3
fuxia

あなたがしなければならないのは、インストールされたプラグインのtext_domainを管理する簡単なプラグインを作成することです。あなたがグローバルな解決策を持ちたくないなら、あなたはあなたのテーマのあなたのfunctions.phpにコードを追加することができます。

このアイデアは、ワードプレスに翻訳の場所を指示することです。すべてのプラグインの内部では、これは次のようなものを使って行われます。

load_plugin_textdomain( 'regenerate-thumbnails', false, '/regenerate-thumbnails/localization' );

これはあなたが使用する機能です。あなたが見ることができるように ここ 、最後の引数は翻訳ファイルが存在するプラグインパスへの相対を設定するために使用されます。

次のようにして、言語フォルダを変更したいプラグインごとに1行を入れることで、必要なことを実行できます。

load_plugin_textdomain('bbpress', false, '../../languages/bbpress');

これはWordpressにあなたのカスタム翻訳ファイルをpluginsフォルダの隣のフォルダからロードするように指示します。bbpressという名前のフォルダにはそれぞれのプラグインが使用するのとまったく同じ命名を使用します。

すべてのプラグインのテキストドメインを指示するメソッドは、次のようにinitフェーズで実行する必要があります。

function set_myplugins_languages() {
     .... your code here.....
}
add_action('init', 'set_myplugins_languages');

(便利だと思う場合は、これを回答としてマークすることを忘れないでください)。

2
Odys

これが機能するためには、WP_LANG_DIRにWordPressの翻訳ファイルがあり、グローバルロケールがその言語に設定されている必要があります。ロケールを変更せずに、またはWordPressのコア翻訳ファイルを含めずにbbPressの翻訳のみを含める場合は、それらをロードしても何も翻訳されません。

BbPressのみのロケールを上書きしたい場合は、bbPressのmoファイルを上書きできるようにする 'bbpress_locale'にフィルタを追加する必要があります。

BbPress 2.0がload_textdomain()関数を使用しているのは事実ですが、load_plugin_textdomain()はとにかくload_textdomain()のラッパーです。 bbPress 2.0の方法はより堅牢で、グローバルな翻訳ファイルの配置を可能にするので、プラグインの更新中にそれらを失うことはありません。

0