WordPressのプラグインに対して、自分でサイトに最適な言葉へ翻訳したファイルを適用してたはずなのにいつの間にか元に戻ってしまった、なくなってしまった、おかしな形に書き換わってしまった経験ありませんか??
これにはちゃんとした理由があり(後述)、パソコンなどにバックアップしておいた翻訳ファイルを都度上書きすれば戻るのですが、いつ変わってしまったのかが分かりづらいのが最大の難点ですよね?また、場合によってはバックアップもなく途方に暮れることもあるかもしれませんね。
そこで今回は
- 何がどうなってもプラグインの翻訳ファイルが消えない(上書きされない)ようにする
- 何よりも最優先で入手や作成した翻訳ファイルが適用されるようにする
方法を紹介します。
※あくまでも私の環境ではうまくいったというお話ですので、不具合などが起きても一切責任を負いません。万が一にもせっかく作ったり入手した翻訳ファイルが消えてしまわぬようバックアップを取る、きちんと動作するか検証するなど対策を講じてから行うようにしてください。
今回のカスタマイズに必要なスキルや経験
今回のカスタマイズでは、「テーマのfunctions.phpへ独自関数の追加」「サイトへ新しいフォルダの作成」が必要ですので
- テーマのfunctions.phpへ何かのコードを追加してカスタマイズした経験のある方
- テーマのfunctions.phpへ追記したコードでトラブルが起きても解消できる方
- 独自関数について多少の知識がある方
- FTPやサーバーのファイルマネージャーなどを使って、サイト内のファイルやフォルダの操作をしたことのある方
が対象になります。これらのスキルに不安がある方は、特にトラブル時に対応ができず、サイトが復旧できなくなることもありますので、残念ながら見送られた方がいいと思います。
WordPressプラグインの翻訳ファイルが読み込まれる仕組みと順番・勝手に変更されたり削除されたりするのはなぜ?
せっかくの翻訳ファイルを消失させることなく、かつ、最優先で適用されるようにする方法をお伝えする前に、まずはプラグインの翻訳ファイルがどのような順番で読み込まれているかについて、および何で勝手に翻訳が変わってしまうのか?消えてしまうのか?について触れておきます。
これを理解していると、後に紹介する仕組みの理解が格段に速くなると思いますので、読み飛ばさないようにしてください。
プラグインの翻訳ファイルが読み込まれる仕組みと順番
プラグインの翻訳ファイルは、WordPressの設定画面で「サイトの言語」に設定されている言語の種類をチェックして、例えば日本語なら「プラグインの翻訳ファイル名-ja.mo」というファイルを探して適用するようになっています。
また、翻訳ファイルはプラグインのプログラム中に特殊な記述がなければ
- WordPress本体の翻訳ファイル(wp-content/languages/plugins/)の中に該当するプラグインの、該当するロケール(国)の翻訳ファイルがあるか?を確認する。
- 1があればそれを適用し、なければプラグインフォルダの中(wp-content/plugins/プラグインフォルダ)の、プラグインによって指定された場所(「languages」「lang」フォルダの中)のファイルに、該当するロケール(国)のファイルがあるか?を確認する。
- 2があればそれを適用し、どちらもなければプラグインのプログラムに書かれている表記をそのまま表示する。
という段階を経て適用されるようになっています。
従って、このサイトで販売しているプラグインの翻訳ファイルについても優先度を考慮し、2の場所へ翻訳ファイルをアップロードするようにおすすめしています。
翻訳ファイルがいつの間にか変わってしまう、消失してしまうのはなぜ?
適用した翻訳ファイルを使ってサイト作りを進め、しばらく運営してたら、いつの間にか適用したものとは違う翻訳になってたり、翻訳がされてない状態になってたりしたことありませんか?
実はこれにも理由があります。大きなケースとしては以下の3つです。
- プラグインの更新によりプラグインファイル内に適用していた翻訳ファイルが上書きされてしまった場合
- プラグインを削除した場合
- WordPress本体の翻訳が更新された場合
どんな場合なのかを1つずつ解説していきます。
まず1についてですが、プラグインは日々更新されており、更新の中には翻訳ファイルの更新も含まれています。その中に日本語なら「プラグインの翻訳ファイル名-ja.mo」の更新が含まれていると、否応なしに上書きされ、自身の翻訳ファイルではなく、プラグインの翻訳ファイルが適用されてしまいます。
次に2についてですが、プラグインを削除する際のWordPressの動作として、プラグインフォルダとその中身とともに、WordPress本体の翻訳ファイル(wp-content/languages/plugins/)の中に該当するプラグインの翻訳ファイルも削除される仕組みが影響して、せっかくのファイルが消されてしまうのです。当然ファイルはなくなっていますので、再度プラグインをインストールして有効化しても日本語にはなりません。
最後にあまり気づかれずにひっそりやってくるのが3のケースです。WordPressでは有志によって本体・テーマ・プラグインの翻訳が行われています。この翻訳の完成度(正しくは翻訳がされた度合い)がある一定レベルに達すると、本体の翻訳更新時に勝手にその他の翻訳も更新されるようになっているのです。これにより、WordPress本体の翻訳ファイル(wp-content/languages/plugins/)の中に該当するプラグインの翻訳ファイルがあってもなくても、こちらも否応なしに上書きされてしまうのです。
※ここだけの話、有志の翻訳はプラグイン全体を検証しているわけではなく、その文字列だけを見て訳しているケースが多く、また、プラグイン作者が英語圏の人でないことも多いので誤訳が多いだけでなく、プラグイン作者が誤ってプログラム上で半角英数しか使えない部分を翻訳対象としてしまっている部分まで何も考えずに日本語にしてしまっているものさえありますので、あまりおすすめしません(別に翻訳者の方を批判しているわけではなく、あくまでも個人の感想ですので字を小さくしてますのでご了承ください)。
サイトを管理していく上で、何度か書いた「否応なしに(いやおうなしに)」というのが一番やっかいで、翻訳の更新は一括で行われるので、「はいはい」と何も考えずに更新したりするとトラブルの元となったり、肝心のファイルが無くなってしまったりしますから、注意が必要です。
※こうした場合に備え、日ごろから翻訳ファイルについても復元可能なバックアップが必要なのです。
結構大雑把な説明にはなってしまいましたが、ここまでで、「WordPressプラグインの翻訳ファイルが適用される仕組みと順番」「翻訳ファイルが書き換わってしまったり、消えてしまったりする理由」についてご理解いただけたと思います。

正常に適用されていたプラグインの翻訳内容が変わってしまう、ファイルが消えてしまうのを防ぐ方法
ここまでお読みいただいたように、プラグインの翻訳ファイルには読み込む仕組みと読み込み順があり、また、仕組みによって変更されてしまったり、削除されたりすることがあります。
そこで今回は、
- テーマフォルダの中にプラグインの翻訳ファイルの置き場所を作る
- 1にアップロードした翻訳ファイルを最後に読み込んで適用する
というカスタマイズを行い、上記のような不具合や不都合が出ないようにします。
翻訳ファイルの置き場所を作る
前項で、プラグインの翻訳ファイルが変更されたり削除されたりする場合については解説しました。ここでは、そうした「場合」でもファイルが変更・削除されないように翻訳ファイルの置き場所を作ります。
※FTPやファイルマネージャーによる操作が必要です
※トラブル時にどうにもならなくなるため、管理画面からファイルを転送するようなプラグインなどは使わないでください)。
FTPまたはファイルマネージャーでサイトのファイルやフォルダが保存されている場所へ接続したら、「wp-content」→「themes」→「有効化しているテーマのフォルダ」を開いてください。
「有効化しているテーマのフォルダ」の中に新しく「languages」というフォルダを作成してください。
これで置き場所作りは完了です。
あとは「languages」フォルダの中へ、ご自身で訳した、または入手した日本語翻訳ファイルを転送すればこの項目については準備完了です。
フォルダを読み込ませるプログラムの追加
テーマのfunctions.phpへ追記します。
以下は基本となるコードになります
/***** テーマの「languages」フォルダにある翻訳ファイルを最後に呼び出す *****/
if ( !function_exists( 'hab_load_textdomain_mofile' ) ):
function hab_load_textdomain_mofile( $mofile, $domain ) {
$locale = get_locale();
$myfile = get_stylesheet_directory() . '/languages/'. $domain .'-'. $locale . '.mo';
if ( is_file( $myfile ) AND 'ja' == $locale ) $mofile = $myfile;
return $mofile;
}
add_filter( 'load_textdomain_mofile', 'hab_load_textdomain_mofile', 99999, 2 );
endif;
上記のコードでは実行の優先順を最後にしているので、恐らく間違いなく「有効化しているテーマのフォルダ」→「languages」フォルダの中にある翻訳ファイルを最優先に読み込みますが、一応試しに以下のようにしてテストしてみてください。
- プラグインフォルダの中の「language」や「lang」フォルダにある「〇〇-ja.mo」をバックアップ後に削除するかリネームする
- 「wp-content」→「languages」→「plugins」の中にある「〇〇-ja.mo」をバックアップ後に削除するかリネームする
これでテーマの「languages」フォルダの中にしかそのプラグインの翻訳ファイルが存在しないようになりますから、管理画面等で翻訳が適用されればOKです。
参考にさせていただいたページ
検索で出てくるもののほとんどが、通常の翻訳ファイルを適用させる方法、もしくは、多言語化についての記事だったので、この方法にたどり着くまでに大変苦労しました。
が、さすがWordPress。根気よく調べたら、
WordPressでテーマとプラグインの翻訳を読み込んでいます
に今回の方法のヒントとなる掲載されていましたので、それを活用して記事としました。何をどう変更したのか興味のある方は、リンク先ページと比較してみてください。
おまけ 今回のカスタマイズをプラグインで実装する
順調にいけばここまでで「めでたしめでたし」な話ですが、テーマについてや、テーマに書いた独自関数のことなどをご存じの方は
これだとテーマ変更するたびに同じ作業をしないといけないじゃん
ということに当然気付かれたと思います。そうなんです、テーマのfunctions.phpへ追記したのですから別のテーマに変えたら、今回のカスタマイズコードをコピーしないと動作しません。
そこで、カスタマイズコードごとプラグインにしてしまえば、テーマを変更しても何もしなくてもいいようにします。
がこれを一から解説していると本当に長い解説記事になってしまいますから、以下からダウンロードできるようにしておきます(当サイトの翻訳ファイル配布と同じ「Booth」というサービスから無料でダウンロードできます)。
ダウンロードしたら通常通りプラグインのアップロードインストール&有効化をしてください。
翻訳ファイル適用の手順
プラグインを有効化したら、FTPなどを使って
「wp-content」→「plugins」→「ha-plugin-translate」→「languages」
の中へ翻訳ファイルを転送してください。これで先ほどのテーマと同じ機能を持たせることができ、かつ、テーマの変更を行っても適用されるようになります(プラグインを停止しない限り有効になりますから、前項のテーマへ追加する方法よりスマートな方法だと思います)。
記事の更新履歴
更新日 | 更新内容 |
---|---|
2020年12月 5日 | 初版公開しました |
2020年12月 6日 | 紹介用コードの内容を以下のように変更 旧:プラグインごとにコードを追記するスタイル 新:フォルダ内にあるすべての.moファイルを自動的に適用するように変更しました 「Ha Plugin Translate」プラグインについても同様の変更を行いました。 |