私は自分のプラグインを国際化し、現在プラグインの翻訳された文字列をロードするのが最善の方法を探しています。私は自分のプラグインに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
編集 - どうやらこれはすべて間違っているので無視してください。
WP_LANG_DIR
定数を使用して、最初にアップデートセーフ言語ディレクトリから翻訳をロードし、プラグイン提供の翻訳についてはプラグイン言語ディレクトリにフォールバックすることができます。デフォルトの場所はwp-content/languages
です。ユーザーは自分でWP_LANG_DIR
をwp-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' );
必要がある:
load_plugin_textdomain()
を呼び出します。 ( プラグインの翻訳方法を参照 )。gettext
filter 、ユーザーは翻訳ファイルを直接変更しないでください。 。gettext
関数に任意の文字列を設定する のみが必要です。 言語ファイルを含める必要はありません、特にプラグインをプラグインディレクトリに送信する場合、translate.wordpressでGlotPressにインポートされるためです。誰でもプラグインを任意の言語に翻訳できる組織。システムはプラグインのインストール中にWordPressが必要に応じてダウンロードする言語パックを生成します。言語パックが更新されると、プラグインとテーマの更新が機能するが、プラグインの更新とは別のように、管理者は更新について通知されます。WP_LANG_DIR
から直接プラグインにロードしないでください。他の回答で提案されているようにオーバーライドされたシステムです。 moファイルがWP_LANG_DIR
の下の同じフォルダーを共有している場合、 translate.wordpress.orgの言語パック の負荷を壊す可能性があります。さらに、 複数のmoファイルを読み込むと、1つのファイルが上書きされると、サイトの速度が低下する可能性があります 。