WordPressの翻訳と言えば.mo形式のファイルを作成して適用させる方法が主流でしたが、バージョン5.0でJSファイルの翻訳が.json形式のファイルから適用させることが可能になりました。
それから数年、バージョン6.5以降では、「テキストドメイン-ロケール.l10n.php」というファイルを作成してWordPressの翻訳ディレクトリ({languages」→「plugins」など)へアップロードすると、.moファイルよりも優先して読み込まれるようになります。
こうすることで.moファイルを読み込むよりも高速に翻訳が適用できるようになるそうなのですが、テストした肌感覚では個人的にはあまり実感がないものの、仕組みは知っておくべきだろうということでいろいろと調べて試用してみました。
本ページでは、試用して分かったことや下位互換性の維持などについて備忘録を兼ね公開しておこうと思います。
完全網羅しているわけではありませんので、内容に誤りがある可能性がありますがご容赦ください
6.5段階で適用可能なのは本体の言語ディレクトリのみ!?
試行してみた感じでは、バージョン6.5の段階では、WordPress本体の言語ディレクトリ(WordPressのインストールフォルダ→「wp-content」→「languages」)に「テキストドメイン-ロケール.l10n.php」があれば、従来の「テキストドメイン-ロケール.mo」が同じディレクトリにあっても、PHPファイル側が優先適用されるという仕組みになっているようです。
ファイルの転送先については、に当サイトで配布している【Hima Art Utility】プラグインで試した限りでは、プラグインの「languages」フォルダへ入れても適用されることを確認しましたので、翻訳の読み込み方法によるのかも..という印象です
このPHPファイルは、Translating WordPressで翻訳が行われると自動で生成され、定期的に行われる翻訳の更新時に.po .moファイルと共に上書き更新されますので、知らない間に翻訳ディレクトリへ新たなファイルが追加され、前述のようにWordPress6.4からはPHPファイルが優先適用されるようになります。
1点注意すべきなのは、PHPが優先されることで、従来の.moファイルを再編集したり独自の翻訳に置き換えても、PHPファイルがあればそちらが優先される、つまり編集した.moファイルは無視されてしまうことです。
「独自の.moファイルを転送したのに適用されない..」とならないよう、以下のコードをテーマのfunctions.php等へ追記することで、PHPファイルは無視され、mo形式のファイルが適用されるようになるものの、混乱が生じるかも知れませんね。
add_filter(
'translation_file_format',
static function () {
return 'mo';
}
);
開発環境以外で翻訳用PHPファイルを生成する方法はあるか
.moファイルと同様に、翻訳した.poファイルからPHPファイルを生成するというのが、翻訳用PHPファイルを作る手順ではあるものの、開発環境を作って処理する方法を除き、現在では簡単に翻訳用PHPファイルを作成するツールなどは存在しません。
従って、開発環境がない(多分高度なプラグインやテーマの作者やブロックをバンバン作るような人でない限り開発環境はないと思う)場合には、他のプラグイン用のPHPファイルを加工して自力でコツコツ作る他ないと思われます。
ブロックエディターの登場以降、WordPressはどんどん自由にカスタマイズできるというものから外れていってる気が個人的にはします...
そんな中、唯一方法として見つけたのが、以下のプラグインを使うことです。
このプラグインは、有効化した時点で、すべてのファイル・フォルダにある.moファイル(正確には.poファイルかな?)からPHPファイルを生成して、それを優先適用させるという機能を持つもので、実際に使用してみたところ、きちんとPHPファイルが生成されました。
ただし、このプラグインは有効化した時の1度限りでPHPファイルを生成するので、.poファイルの編集を行って.moファイルを作って転送しただけでは、更新内容はPHPファイルに反映されませんから、以下のようにして再構築してもらう必要があるようです。
- .poを編集し、.moファイルを作る
- 「Performant Translations」プラグインを一旦停止し、削除する
- プラグインやテーマの言語フォルダなどへ1をアップロードする
- 既にPHPファイルがある場合は一旦削除する
- 「Performant Translations」プラグインを再度インストールし、有効化する
- 目的の.moファイルと同名のPHPファイルが作成されていることを確認する
また、前述したようにWordPress6.5の機能では、本体の言語ディレクトリへPHPファイルを配置した時のみ優先適用される仕組みなので、プラグインやテーマの言語ディレクトリ上置いたPHPファイルを優先適用させたい場合には、このプラグインを有効化し続ける必要があります(本体の言語ディレクトリ上のPHPファイルが優先されてしまうかどうかは、そのプラグインやテーマの言語適用プログラム次第になります)。
ここまで書いただけでも、個人的にはちょっとややこしいな..という印象です。
手動で生成する方法(例)
プラグインを使わずに自前で作成したいという方は、テキストエディターで以下のようにして作成し、適所へアップロードすれば反映されます。
<?php
return [
'messages'=>[
'翻訳前の文字列'=>'翻訳語の文字列',
'翻訳前の文字列'=>'翻訳語の文字列',
'翻訳前の文字列' => '翻訳語の文字列',
]
];
WordPress側で生成されるl10n.phpでは先頭に日付などがいろいろと内容が書かれていますが、私がテストした限りでは、ファイル名(テキストドメイン-ロケール.l10n.php)さえ合っていれば問題なく適用されました
ただ、現在で探した限りでは作成済の.poファイルをいい感じにテキスト変換してくれるものはなさそうですし、.poファイルを無理やりテキストエディタで開いても、文字列接頭辞(\)などを削除しながらコツコツとコピペを繰り返すしかないので、開発初期から作成するのでなければ結構手間がかかりますから、個人的には前述のプラグインでさっと作成してもらうのが一番じゃないかと思います。
力業で生成する方法がないこともない!?
自力でコツコツとファイルを作るのは骨も折れるし、経験談として、コード内に誤りがあるとサイトがストップなんてこともありますから大変です。
そんな中、.po形式のファイルから、いくつかのツールなどを使って何とか自動で.l10n.php形式のファイルを生成する方法を見つけました。
以下のページで詳しく紹介していますので、必要な方は一読ください。
別場所から翻訳を適用させる場合はいろいろ対処が必要かも
WordPress6.4.xまでは別の場所(テーマに置いたフォルダなど)にある.mo形式のファイルを優先適用させるために「load_textdomain_mofile()」という関数を使用していましたが、.moと.php両方に対応させるために「load_translation_file()」という関数を使用する必要があります(使い方は同じです)。
また、WordPress6.4.xにはこの関数が存在しないので、WordPressのバージョンによって処理を分けることも必要ですし、.l10n.phpのファイルがあればそちらを、なければ.moのファイルを読み込む(これもWordPressのバージョンによって分ける)といった下位互換性への配慮も必要でしょう。
以上がWordPress6.5から採用される「テキストドメイン-ロケール.l10n.php」ファイルの優先適用に関するレポートです。
いろいろと試行してみた現時点での個人的な意見としては、特にパフォーマンスに影響しないと感じるのであれば、前述のコードを使ってPHPファイルを無視する設定にするのがいいのかもと考えますが、ブロックエディターが出た時と同様に、新しく追加された機能とうまく付き合っていかないと..という感じもしますので、なんとかついていこうと思っているという印象です。
以下、該当する公式の開発ブログへのリンクを張っておきますので、参考にどうぞ。
コメントを残す