「HA Language Overwrite」は、アップロードした通常とは違う場所へ保管し、WordPress標準の翻訳ディレクトリやプラグイン・テーマの翻訳ディレクトリにあるファイルよりも優先して翻訳を適用するプラグインです。
このプラグインを使って翻訳ファイルを管理することで、以下のような悩みを解消できます。
- いつの間にか翻訳されなくなり、英語のままの表記になってしまった
- プラグインやテーマのバージョン変更で、今まで日本語表示できていた部分が英語に戻ってしまった
- 自身のサイトに合わせて翻訳した部分が、いつの間にか元に戻ったり、別の文字列になったりすることがあった
※これらの不都合が起きる原因については文末の「いつの間にか翻訳が変わってしまうのはなぜ?」で、詳しく解説していますので、興味のある方はご覧ください。
にリリースした、最新バージョン2.2では、jsonファイルの優先適用およびl10n.phpファイルの優先適用もできるようになりました
「HA Language Overwrite」の機能と動作要件
「HA Language Overwrite」は、本サイトで購入いただいた翻訳ファイルを所定の場所へアップロードして適用し、しばらくはよかったものの、何かのタイミングで英語になってしまった、別の文字列になってしまったというご意見をいただき、都度パソコン等に保存していたファイルを再度適用させることで解消できる旨をお伝えしている中で、「翻訳ファイルが上書きされることのない場所に保存して、それを優先的に適用させるようなものがあったらいいのに..」という発想から生まれたプラグインです。
プラグインの機能
主に以下のような機能があります。
- 翻訳用ファイル(.mo形式のファイル)をアップロードし、優先して適用させる
- スクリプト用の翻訳ファイル(.json形式のファイル)をアップロードし、優先して適用させる(*1)
- WordPress6.5から追加されたl10n.php形式の翻訳ファイルに対し、本プラグインでアップロードしたものを優先適用させる(*2)
- 再翻訳の基となるファイル(.po形式のファイル)をアップロードして保管できる
- WordPress翻訳やプラグイン・テーマの翻訳ファイルの保存場所とは別の場所でファイルを管理するため、更新によって上書きされてしまうことがない
(*1)バージョン2.0段階で追加した機能ですが、適用させるにはファイル名を適切に変更する必要があります。ファイル名の規則については、「翻訳用.jsonファイルのファイル名について」をご覧ください。
(*2)バージョン2.2で追加した機能です。WordPress6.5よりも前のバージョンでは.moファイルのみを扱うように調整していますので、以前のWordPressバージョンでもお使いいただけます
プラグインの動作要件
本プラグインは、本サイトを含む私の管理するサイトで有効化して動作確認をしています。従って、現在以下の環境であれば確実に動作すると思います。
項目 | 要件 |
---|---|
サーバー | カラフルボックス のBox2プラン |
PHPバージョン | 8.2 |
WordPressバージョン | 6.5 |
テーマ | Twenty Twenty-Three |
プログラム中で使用している最も新しい関数は、WordPressのバージョン5.0.2で追加されたものですので、恐らくそのバージョン以降であれば動作するかとは思いますが、検証はしていません
「HA Language Overwrite」の入手と使用方法
プラグインのダウンロード
本プラグインはWordPress公式サイトでの配布は行っていません。
プラグインのダウンロードは以下からお願いします。
バージョン2.2(2024年4月 9日リリース)
累計ダウンロード数:474回
本プラグインを使っても翻訳が優先適用できないケースがあります。詳しくは「本プラグインで上書きできないケースと対処方法」をご覧いただき、対処してみてください。
本プラグインは通常のプラグインのように自動更新および更新通知を行いません。バージョン変更や最新情報については本ページの「更新情報」でのみ行いますので、時折ご確認いただけますようお願いいたします。
プラグインの使用方法
プラグインを有効化すると、管理画面のメニューに「HA Language Overwrite」という項目が追加されます。
開いた画面からアップロードした翻訳ファイルは優先適用され、削除すると元の状況に戻るという単純な設計です。
優先適用させるには
下図のフォームを使って翻訳ファイル(.moまたは.json形式)をアップロードします。
「ファイルを選択」をクリックして、パソコン上にある翻訳ファイルを選択します。
「アップロード」をクリックすると、ファイルがアップロードされ、目的のプラグインでアップロードした翻訳ファイルが優先適用されるようになります。
設定画面中にも詳しく解説を入れていますので、zipファイルを使った方法などはそちらをご覧ください。
優先適用を解除するには
設定画面の最下部に、現在アップロードされているファイルの一覧が表示されます。
優先適用を解除するファイルにチェックを入れ「削除」をクリックすると、保存場所からファイルが削除され、優先適用もされなくなります。
文字通りファイルを削除する措置ですので、今後使用する可能性のあるファイルについては予めバックアップを取るようにしてください
翻訳用.jsonファイルのファイル名について
json形式の翻訳ファイルは、WordPressの比較的最近のバージョン(確か5.5あたり)で登場しました。
これは、プラグイン内のスクリプトファイルに対して翻訳を適用させるためのファイルで、以下のようなファイルの命名規則があります。
テキストドメイン-ロケール-スクリプトのハンドル名.json
例えばテキストドメインが「textdomain」、ロケールが日本「ja」、ハンドル名が「script」の場合は、以下のファイル名にする必要があります。
textdomain-ja-script.json
しかしながら、WordPress本体の翻訳ディレクトリに設置する場合には、ハンドル名の部分をMD5ハッシュ化させる必要があり、これを行うには開発環境が必要となります。
もしも本体の翻訳ディレクトリにあるMD5ハッシュ化されたファイル名のファイルを、本プラグインでアップロードして優先適用させる場合には、ハッシュ化された部分を元のハンドル名に戻す必要があります。
このMD5ハッシュ化された部分は一方通行で変換されるもので、ツールなどを使って復号できないため、ファイルの内容を参照して、どのハンドル名のスクリプトに対するものかを特定して書き換える必要があります。
ハンドル名のヒントを調べる方法としては、以下のプラグインを使い、スクリプトを翻訳対象とするためのフックである「wp_set_script_translations」という関数が書かれている箇所を調べ、そこに書かれているハンドル名を割り当てます。
本プラグインでは、この措置を行って適切なハンドル名がファイル名となっていない場合、翻訳は適用されませんのでご注意ください。
本プラグインで上書きできないケースと対処方法
プラグインの有効化後、使用方法に従って翻訳ファイルをアップロードしても適用されないケースがあります。現在で判明している原因と対処方法について、いくつかの例を挙げておきますので、ご自身で対処してみてください。
プラグインが標準の翻訳適用コードを使用していない場合
このプラグインは、プラグインのプログラムの中にある以下のような翻訳ファイルの適用プログラムに対して割り込み(フック)を掛けることで優先適用されるようになっています。
function sample_plugin_language_setup(){
load_plugin_textdomain( 'テキストドメイン', false, dirname( plugin_basename( __FILE__ ) ) . '/languages/' );
}
add_action('plugin_loaded', 'sample_plugin_language_setup');
そしてWordPressでは、このプログラムがなくても、WordPress本体の翻訳ディレクトリへ適切な翻訳ファイルがある場合には、それを適用させて翻訳するような仕組みになっています。
しかし、このままでは本プラグインを使った翻訳の上書きができないため、有効化しているテーマのfunctions.phpへ以下のコードを追加して、プラグインに本来書かれているべき翻訳適用のプログラムをテーマ側から実行することで、問題が解消できるケースがあります。
function sample_load_textdomain_include_from_theme(){
load_plugin_textdomain('テキストドメイン', content_url() . '/plugins/プラグインフォルダのスラグ/languages');
}
add_action('after_setup_theme', 'sample_load_textdomain_include_from_theme');
コード中の「テキストドメイン」「プラグインフォルダのスラグ」は調べて変更してください
なお、本サイトで提供している翻訳ファイルでこの措置が必要な場合には、そのページに具体的なコードを案内していますので、参照ください。
プラグインが特殊な翻訳の適用方法を用いている場合
この不都合は「Download Manager」というプラグインの翻訳を行った際に発見しました。このプラグインでは複数の条件分岐を使っていろいろな場所の翻訳ファイルの有無を判断した上で、なければ通常の読み込みをするようになっているのですが、それが何等かの不都合を発生させているようです。
こうした不都合の発生しているプラグインでは、翻訳読み込みを一旦無効にした上で、再度通常の方法で翻訳の読み込みをさせるとうまく優先適用されるようです。
以下は、「Download Manager」の場合のサンプルコードです。
/***** Download Monitor 翻訳ファイルの適用 *****/
/* 一旦翻訳をアンロード */
function pwcn_unload_download_monitor_textdomain() {
unload_textdomain( 'download-monitor' );
}
add_action( 'after_setup_theme', 'pwcn_unload_download_monitor_textdomain' );
/* 通常ロードさせる */
function pwcn_download_monitor_language_setup(){
load_plugin_textdomain('download-monitor', content_url() . '/plugins/download-monitor/languages');
}
add_action('after_setup_theme', 'pwcn_download_monitor_language_setup');
なお、「Download Manager」における不都合の原因や対処の詳細は、以下のページで詳しく書かれていますので、参考にどうぞ。
いつの間にか翻訳が変わってしまうのはなぜ?
本プラグインの機能などとは直接関係ありませんが、冒頭で紹介した「翻訳ファイルがなくなってしまう」「翻訳内容が変わってしまう」といった不具合とも思える現象について、WordPressの翻訳の仕組みを踏まえて紹介しておきます。
WordPressの本体やテーマ、プラグインはもともと英語圏で使用することを基本として開発されています。
そして、WordPressの機能として、翻訳に対応するプログラムが組まれている前提で、適切な翻訳ファイルを適切な場所へ配置することで、公開しているWordPressサイトのロケール(言語)に合わせて文字列を表示させるようになっています。
例えば、あるプラグインのプログラム内から翻訳文字列を抽出して翻訳を行った日本語ロケール用の翻訳ファイル(-ja)を、翻訳ファイルを読み込むようにしている場所へアップロードすることで、WordPressサイトの基本言語設定が日本語であれば、その翻訳ファイルの文字列がサイト内で使われる(表示される)といった動作をします。
以下が主な翻訳ファイルの設置(転送)場所です(テーマやプラグインにより異なります)。
- WordPress本体の言語ファイル転送用フォルダ
- 「WordPressのインストールフォルダ」→「wp-content」→「languages」→「plugins(themes)」の中
- プラグインの言語ファイル転送用フォルダ
- 「プラグインフォルダ」→「languages(lang)」などの中
- その他の場所
1の場所にある翻訳ファイルは、有志の方がWordPress公式サイト上で翻訳を行い、権限のある方が承認することで適用され、翻訳対象文字列に対する翻訳済件数が一定の基準を超えると、自動でサイトに適用されるようになっていて、適用された翻訳の一部が改訂されると、都度更新されて反映されるようになっています。
2の場所にある翻訳ファイルは、主にプラグインやテーマの作者が自身で翻訳したものか、翻訳者が作者へ直接提供した翻訳ファイルが格納されています。
そして翻訳ファイルは以下のような優先順で適用されるようになっていて、何か特別な施策をしていない限り、この場所以外の場所へ転送した翻訳ファイルは原則適用されないようになっています。
- プラグインやテーマの翻訳ファイルフォルダ内にその言語のファイルがあれば適用する
- 1がある場合でも、WordPress本体の翻訳ファイルフォルダ内にその言語のファイルがあれば上書きして適用する
つまり、WordPress本体の翻訳ディレクトリのファイルが正になるという仕組みになっているのです。
そしてこの仕組みに則り、自身で再翻訳したファイルは、基本的にはWordPress本体の翻訳ディレクトリへにある翻訳ファイルへ上書きすれば適用されます。
しかしながらここで問題となるのが、どなたかがWordPress公式の翻訳に変更を加えた場合です。
もうお分かりかと思いますが、本体の翻訳ディレクトリにある翻訳ファイルは、都度改定が行われ、改定後ある一定のタイミングで自動的に書き換わる(本体の翻訳ファイルディレクトリにある翻訳ファイルが上書きされる)ため、知らない間に、いつの間にか翻訳内容が変わってしまうのです。
この上書き処理は、WordPress公式上で1件でも変更や追加があれば行われてしまうため、気が付いたら自身のファイルで再上書きを繰り返すしか方法がなく、しかもこの上書き処理を停止させる確実な方法がないため、常に監視するか、あきらめるかということになってしまうのです。
そこで、安心して運営できるようにするにはどうしたらいいか..ということで作成したのが本ページで紹介している「HA Language Overwrite」なのです。
アップロードしたファイルの保存先について
このプラグインの設定画面からアップロードした翻訳ファイルは、以下の場所に格納されるようにしています。
wp-content/uploads/halo-optionlangs
個別にファイルをダウンロードする場合にはFTPクライアントツールなどを使って上記場所からダウンロードしてください。
他サイトで本プラグインを有効化後、上記フォルダ内のファイルを他サイトの同じ場所へコピーすれば、他のサイトへ翻訳ファイルを継承(流用)することができます。
本プラグインのプログラム内容、使用上の注意など
このプラグインはPoMo UploaderというWordPress公式プラグインのソースコードを参考に以下の点の変更を行って再リリースしているものです。
- プラグインの更新によって、保存していた翻訳ファイルが消失しないよう、ファイルの保存先を変更した点
- 本プラグインへアップロードした翻訳ファイルが可能な限り優先適用されるようにした点
なお、本プラグインは、当サイト内で配布・販売しているWordPress向けのプラグイン・テーマ用翻訳ファイルの適用をより簡単かつ安全に保存するために開発したものです。
あくまでも個人ユース、および自身のサイトの翻訳ファイル管理用に作成したものですので、商用利用(サイト制作サービスなどで第三者のサイトを制作する際にこのプラグインを使うこと)は避けていただいた方が無難かと思います。
また、あまたあるテーマやプラグインとの競合や、サーバー環境、サイトの状態等をすべてチェックすることは不可能ですので、不具合が発生した際の対処はご自身で行ってください(不具合が発生しても当方では一切責任を負いません)
プラグインの更新(変更)履歴
更新日 | 更新内容 |
---|---|
2022年 4月30日 | プラグインリリースしました |
2023年 3月16日 | 「アップロードしたファイルの保存先について」の内容を変更しました 「プラグインで適用できない既知のプラグイン」を追加しました |
2023年10月15日 | バージョン1.1をリリースしました 【変更点】PHP8.1で出るPHPのWarningに対処しました |
2024年 1月23日 | ・バージョン2.0をリリースしました 【変更点】スクリプトハンドルを通常に書き換えた形のjsonファイルを優先適用できるようにしました 【変更点】設定画面上に使用方法や注意事項などの説明を追加しました 【変更点】翻訳ファイル提供用にサイトを独立化したことに伴い、本プラグインの配布ページのURLを変更しました |