更新後にプラグインを変換し続ける方法は?


9

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/
 */

実際、これは新しい問題ではなく、はい、彼らは正しいです。英語以外の言語でwordpressプラグインを使用している場合、これは大きな問題です。

基本的に私はbbpressを翻訳し、.poファイルと.moファイルを作成しました。ファイルを通常のwp-content / plugins / bbpress / bbp-languagesフォルダーに配置すると、ファイルは機能します。しかし、上記のように、更新時に削除されると警告されています。しかし問題は、bbpressで提案されているようにwp-content / languages /フォルダーに配置すると、翻訳が機能しないことです。

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


よく.. bbpressコードをチェックした後.. / wp-content / languages / bbpress /に直接ファイルを置く必要はないようです/ wp-content / languages / bbpressで動作しますが、質問はまだ答えを得る必要があります芋他のプラグインのために
Ünsalコルクマズ

回答:


3

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

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

BBPressは関数を使用せずload_plugin_textdomainload_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 );

バグがあるようです.. bbpress.trac.wordpress.org/ticket/1647調べています...私はデフォルトの言語フォルダーwp-content / languages /を使用するので、「FULL_PATH_TO_YOUR_FILE」に対する提案は何ですか?
Ünsalコルクマズ

言語ディレクトリ(WP_LANG_DIR)とmoファイルへのパス。
fuxia

1
いい答えです。プラグイン開発者への注意:load_plugin_textdomain()「init」アクション中に呼び出しを行ってください。そうしないと、「load_textdomain_mofile」フィルターにフックできません。その時はもう遅すぎるでしょう。
Geert

2

インストールするプラグインのtext_domainを管理する単純なプラグインを作成する必要があります。グローバルなソリューションが必要ない場合は、テーマのfunctions.phpにコードを追加できます。

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

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

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

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

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

これにより、ワードプレスは、各プラグインが使用するのとまったく同じ名前の翻訳ファイルを含むplugins名前の付いたフォルダーのあるフォルダーの隣のフォルダーからカスタム翻訳ファイルをロードするように指示されますbbpress

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

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

(もし有用だと思ったら、これを答えとしてマークすることを忘れないでください)


0

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

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

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


-1

私の場合、プラグインの永続的なカスタム翻訳を作成するには、次の手順が必要です(ACFプラグイン翻訳の例):

  1. wp-content/languages/plugins/ディレクトリを作成する
  2. 選択した翻訳ファイルをコピー.poプラグインからlang/作成したフォルダ(または翻訳を持つ他)をwp-content/languages/plugins/(たとえばからlang/acf-pl_PL.powp-content/languages/plugins/acf-pl_PL.po
  3. 編集するために例えばPoeditや他のプログラムとの変換をカスタマイズし.poたファイルを、次に生成.moとで保存wp-content/languages/plugins/(例えばwp-content/languages/plugins/acf-pl_PL.mo

このようにして、プラグインを更新した後でも翻訳を保持する必要があります。

この戦略がすべてのプラグインで機能するかどうかはわかりませんが、これは間違いなく試す価値があります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.