システム開発・構築の神様

新しいサービスや技術を使った開発や構築。その他不具合解決など

Wordpressの翻訳ファイル(.mo)が、アップデートの度に上書きされ戻ってしまう

Wordpressは、世界中で最もサイト構築に利用されているオープンソースです。


そのため、コア、テーマ、プラグインには、複数の言語に対応する仕組みが取り入れられています。


言語ファイルの.poを、新規に作成したり変更することで、ページ上のテキストを編集することが可能です。


海外のプラグインの場合は、日本語がおかしかったり、100%日本語に対応している訳では無く、ところどころ翻訳されていないことも多々あります。


その時は、自分で翻訳を追加して.moファイルをコンパイルして対応します。


ただ、この時に気をつけなければならないことは、テーマやプラグインのバージョンを上げると


翻訳ファイルまで更新されてしまい、自分で翻訳した単語がまた未設定に戻ってしまうことです。


このあたりの対応が面倒・・・


WooCommerceのプラグインで、日本でなじみのない単語やテキストを、分かりやすく翻訳していても、アップデートの度に戻ってしまいます。


WooCommerceは、比較的アップデートの頻度が高いため、その都度コピーし直すのでは面倒です。


いろいろと調べていると、自動アップデートはやめて、FTPによるアップデート(言語ファイルはアップデートしない)を推奨していたりと・・・


面倒・・・


そして、その面倒な作業をしているのに、新しい翻訳がありますとメッセージが常に表示されたままになります。


これはこれで邪魔・・・


言語ファイルのパーミッションを変更して、上書き禁止にしても同じだし・・・


無いか良い方法が無いのか?


調べてみても見つかりませんでした。


みんな翻訳ファイルの管理は、まめにしているのだろうか?


それとも、便利な翻訳プラグインがあり、データベース上に単語を登録することで、常にその翻訳が使われるものがあるのだろうか?


うーん。


結局ごり押し対応で今は様子見することにしました。


行った作業は


テーマフォルダに新しくlanguagesフォルダを作成し、その中に編集した自分の翻訳ファイルを置く。


テーマ側の翻訳ファイルが使われるように、プログラムを追加する。


です。


コード(例)

function MY_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', 'MY_load_textdomain_mofile', 99999, 2 );


テーマフォルダ内に、テーマやプラグインの翻訳がある場合だけ、テーマ側の翻訳を使うようになります。


これで、翻訳した翻訳ファイルが、アップデートの度に戻ってしまうことも無く、管理やメンテナンスが楽に行えるようになりました。


ただ、新しい単語の追加に対応していくコストは残っていますが・・・