web-dev-qa-db-ja.com

プラグインの翻訳された文字列をロードするのは誰の仕事ですか?

私は自分のプラグインを国際化し、現在プラグインの翻訳された文字列をロードするのが最善の方法を探しています。私は自分のプラグインにmyplugin/languages/myplugin.potを含めていますが、.poや.moファイルを配布するつもりはありません。

私の質問:

翻訳された文字列をロードするためにload_plugin_textdomain()のような関数を使うのは私のプラグイン作者としての仕事ですか、それとも私のプラグインのエンドユーザーの仕事ですか?

私が尋ねる理由は、です。

load_plugin_textdomain()を使用する場合、以下の例のように3番目の引数を渡すと、myplugin/languagesからmyplugin {$ locale} .moがロードされます。ただし、プラグインエンドユーザーはこのmyplugin {$ locale} .moファイルを提供する必要がありますが、もちろん、プラグインのアップデートを発行すると、そのmyplugin {$ locale} .moファイルは上書きされます。

function myplugin_load_textdomain() {
  load_plugin_textdomain( 'myplugin', false, plugin_basename( dirname( __FILE__ ) ) . '/languages' ); 
}
add_action( 'plugins_loaded', 'myplugin_load_textdomain' );

参照: https://codex.wordpress.org/Function_Reference/load_plugin_textdomain

4
henrywright

編集 - どうやらこれはすべて間違っているので無視してください。

WP_LANG_DIR定数を使用して、最初にアップデートセーフ言語ディレクトリから翻訳をロードし、プラグイン提供の翻訳についてはプラグイン言語ディレクトリにフォールバックすることができます。デフォルトの場所はwp-content/languagesです。ユーザーは自分でWP_LANG_DIRwp-config.phpに設定できます。複数のソースから翻訳をロードすると、最初に見つかったインスタンスが使用されるため、ユーザー翻訳は常にプラグイン提供の翻訳をオーバーライドし、ユーザーはすべての文字列を翻訳せずに部分翻訳を実行できます。

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

必要がある:

  • load_plugin_textdomain()を呼び出します。 ( プラグインの翻訳方法を参照 )。
  • 言語カタログmyplugin.potおよび配布するすべてのローカライズされた翻訳moファイルを提供します
  • ユーザーが翻訳ファイルを上書きしたい場合、利用可能なフィルターのいずれかを使用してそれを行う必要があります。たとえば、 gettext filter 、ユーザーは翻訳ファイルを直接変更しないでください。 。
  • しかし、実際には、 プラグインのスラッグに一致するテキストドメインでgettext関数に任意の文字列を設定する のみが必要です。 言語ファイルを含める必要はありません、特にプラグインをプラグインディレクトリに送信する場合、translate.wordpressでGlotPressにインポートされるためです。誰でもプラグインを任意の言語に翻訳できる組織。システムはプラグインのインストール中にWordPressが必要に応じてダウンロードする言語パックを生成します。言語パックが更新されると、プラグインとテーマの更新が機能するが、プラグインの更新とは別のように、管理者は更新について通知されます。
  • 言語ファイルをWP_LANG_DIRから直接プラグインにロードしないでください。他の回答で提案されているようにオーバーライドされたシステムです。 moファイルがWP_LANG_DIRの下の同じフォルダーを共有している場合、 translate.wordpress.orgの言語パック の負荷を壊す可能性があります。さらに、 複数のmoファイルを読み込むと、1つのファイルが上書きされると、サイトの速度が低下する可能性があります
1
cybmeta