WordPressプラグインやテーマの翻訳を修正するには

Wordpress Blog Blogging Cms  - launchpresso / Pixabay Web開発
launchpresso / Pixabay

ワードプレス翻訳の仕組み

日本語ではないプラグインやテーマを使用する場合、翻訳されていなかったり、誤訳があったりして修正したい場合があります。

ワードプレスの多言語化(国際化・ローカリゼーション)には、gettextというライブラリと、これを拡張したwordpress-i18ntoolsというツールが使用されています。

翻訳ファイルの作成

  • gettextに定められた構文でソースコードを記述
  • ツールがソースコードから .pot ファイル(テンプレートファイル)を生成
  • .pot ファイルを基に各言語の .po ファイル(翻訳ファイル)を生成
  • .po ファイルをコンパイルして .mo ファイル(プラグラムが参照するファイル)を生成

プラグインやテーマが .pot ファイルを用意して、それを基に各言語の翻訳者が .po と .mo のファイルを作成します。

これらをプラグインやテーマの /languages ディレクトリに入れると翻訳され表示される仕組みです。

ちなみに .pot ファイルから .po と .mo ファイルを生成するには、Poeditなどのエディターを使用します。.mo はバイナリファイルなので専用のエディターを使います。

WordPressの翻訳について調べるとここまでで終わることが多いのですが、これだけだと少し古い情報です。この方法で作成した .mo ファイルは、読み込まれない場合があります

WordPress4.6 以降は translate.wordpress.org 優先

translate.wordpress.org による翻訳が優先されるということです。

translate.wordpress.org とは

wordpress本体の翻訳にも利用されており、翻訳はGitHubのプルリクエストと同じような仕組みです。

公式ガイドで説明されています。

WordPress 翻訳ハンドブック
WordPress 本体、テーマ、プラグインで使用されるテキストやメッセージ、ドキュメント類はコミュニティによ…

WordPress 本体(「コア」と呼ばれます)、テーマ、プラグインの翻訳は、翻訳プラットフォーム “translate.wordpress.org” を使用して翻訳します。

https://ja.wordpress.org/team/handbook/translation/

translate.wordpress.org 上で承認された翻訳 (“Current” ステータス) が一定量に達すると、言語パッケージが自動生成され、テーマ・プラグインなどのパッケージに含まれるようになります。

https://ja.wordpress.org/team/handbook/translation/wordpress-translation-steps/

テーマやプラグインの作成者は大変だと思ったら、そういうわけでもありません。自動的に環境が整うようになっています。

WordPress.org にアップロードすると、すべての JavaScript と PHP ファイルは自動でパースされます。見つかった翻訳文字列は translate.wordpress.org に追加され、コミュニティで翻訳できるようになります。

https://ja.wordpress.org/team/handbook/block-editor/how-to-guides/internationalization/

管理画面で更新を行うと、翻訳を更新しているというような(よく覚えていませんが)メッセージが表示されることがあると思います。WordPressが翻訳しているのかと思っていましたが、こういう仕組みだったわけです。

つまりWordPress公式のテーマやプラグインがgettextのフォーマットに沿っていれば、自動的に translate.wordpress.org で翻訳できる状態になり、一定以上(90%)翻訳されれば自動的に翻訳されるということです。

WordPress.org でアカウントを作成すれば誰でも翻訳を提案することができ、承認されればその内容で翻訳されるようになります。

translate.wordpress.org で翻訳されたファイルの注意点

翻訳ファイルは translate.wordpress.org で過去に90%以上翻訳されたことがあれば生成されるという点に注意が必要です。

その後の更新で90%を下回った場合でも生成されてしまいます。長期間放置されると翻訳されない箇所が増えることがあります。

プラグイン翻訳ファイルのディレクトリ構造

myplugin というプラグインの日本語訳ファイルの場合は以下になります。

wp-content/languages/plugins/myplugin-ja.mo

translate.wordpress.org で過去に90%以上翻訳されたことがあれば生成される。(現在90%に満たなくても生成されるので注意)

wp-content/plugins/myplugin/languages/myplugin-ja.mo

プラグイン開発者が独自に提供する翻訳ファイル。wp-content/languages/plugins/myplugin-ja.mo が存在する場合は読み込まれない。

テーマ翻訳ファイルのディレクトリ構造

mytheme というテーマの日本語訳ファイルの場合は以下になります。

wp-content/languages/themes/mytheme-ja.mo

translate.wordpress.org で過去に90%以上翻訳されたことがあれば生成される。(現在90%に満たなくても生成されるので注意)

wp-content/themes/mytheme/languages/ja.mo

テーマ開発者が独自に提供する翻訳ファイル。wp-content/languages/themes/mytheme-ja.mo が存在する場合は読み込まれない。

翻訳のカスタマイズ

よくできた翻訳の仕組みが提供されていますが、更新に伴って翻訳されない箇所が増える可能性があります。また、提供されているものとは違う独自の翻訳を使いたい場合もあります。

.pot ファイルがそもそもない場合はphpやjavascriptで書き換えるしかないと思いますが、提供されていればPoeditを用いて修正することが可能です。

ただしそれなりに学習コストが掛かります。簡単なのはプラグインを使用することです。

翻訳プラグイン

Loco Translate

ワードプレス管理画面上で翻訳をカスタマイズできるので非常に簡単です。手間をかけずに独自の翻訳を使用したい場合はこちらを利用するのが良いと思います。

別の翻訳ファイルを使いたい場合

以下は、例えばmypluginというプラグインの開発者が、translate.wordpress.org が生成した翻訳ファイルではなく、独自の翻訳ファイルを読み込ませるための処理です。

wp-content/languages/plugins/myplugin-xx.mo があっても、wp-content/plugins/myplugin/languages/myplugin-xx.mo を読み込むようになります。

function my_plugin_load_my_own_textdomain( $mofile, $domain ) {
    if ( 'myplugin' === $domain && false !== strpos( $mofile, WP_LANG_DIR . '/plugins/' ) ) {
        $locale = apply_filters( 'plugin_locale', determine_locale(), $domain );
        $mofile = WP_PLUGIN_DIR . '/' . dirname( plugin_basename( __FILE__ ) ) . '/languages/' . $domain . '-' . $locale . '.mo';
    }
    return $mofile;
}
add_filter( 'load_textdomain_mofile', 'my_plugin_load_my_own_textdomain', 10, 2 );

このような定義がないプラグインは、諦めて translate.wordpress.org が生成した翻訳ファイルを読み込むしかないかというと、そうでもありません。

functions.php に処理を追加して、プラグインの利用者側で強制的に変更させることもできます。

同様に、wp-content/languages/plugins/myplugin-xx.mo があっても、wp-content/plugins/myplugin/languages/myplugin-xx.mo を読み込むようにするには以下のようにします。

// wp-content/languages/plugins/myplugin-xx.mo があっても、wp-content/plugins/myplugin/languages/myplugin-xx.mo を読み込む
function my_plugin_load_my_own_textdomain( $mofile, $domain ) {
    if ( 'myplugin' === $domain && false !== strpos( $mofile, WP_LANG_DIR . '/plugins/' ) ) {
        $locale = apply_filters( 'plugin_locale', determine_locale(), $domain );
        $mofile = WP_PLUGIN_DIR . '/myplugin/languages/' . $domain . '-' . $locale . '.mo';
    }
    return $mofile;
}
add_filter( 'load_textdomain_mofile', 'my_plugin_load_my_own_textdomain', 10, 2 );

追記

translate.wordpress.org での翻訳システムは、GlotPressという名称のようです。翻訳についての説明もwordpress.comにありました。

Translate WordPress.com
Learn how to translate WordPress.com and other Automattic projects into your language, using the Community Translator Tool and GlotPress.

まとめ

WordPressの翻訳は、translate.wordpress.org の翻訳が優先されます。

まだ翻訳されていない文言があったり、誤訳を見つけた場合は、翻訳を提案してみると普段お世話になっているテーマやプラグインに貢献できます。

更新に伴って翻訳されない箇所が増えていたり、提供されているものとは違う独自の翻訳を使いたい場合は、Poeditなどのエディタを使って翻訳したものや、他の方が翻訳したファイルを読み込むようにするか、Loco Translateなどのプラグインで変更できます。

WordPressをカスタマイズするには、書籍で基礎を知るのが近道だと思います。

コメント

タイトルとURLをコピーしました