多言語サイトのWordPressオリジナルテーマを制作する際に、言語別にテーマを作るのではなく翻訳ファイル(.mo,.po)を用意することにしました。しかしイザ翻訳ファイルをアップロードしても一向にテーマが翻訳されず、解決までにハマってしまったので手順を覚え書きします。
と、その前に、自分で翻訳してみて判った大事なポイントは以下2つ。
1.テーマの翻訳ファイル(.mo)の名前は必ず言語名だけに(超重要!)
これが私がハマった原因でした。参考にした翻訳ファイル作成のブログ記事は、プラグインの翻訳だったんです。それですっかりテーマ名と同じ名前にロケールを付け足せばいいと思い込んでしまったせいでした。公式にちゃんと書いてるのにね・・・
参考:関数リファレンス/load theme textdomain
また、ドイツ語の場合は単に de.mo とするだけではダメで、ドイツのドイツ語ならば de_DE.mo 、スイスのドイツ語ならば de_CH.mo のようにしなければ読み込んでくれません。これも気をつけましょう。
2.日本語フィルから作り始めてOK!
色々記事を読んでいると、言語ファイルはまず「英語」が基本であるかのように思ってしまいますが、実は「日本語」から作り始めて大丈夫です。元は日本語で、英語以外の言語にする場合は英語を経由する必要はなく、日本語⇒その他の言語 とダイレクトに翻訳してしまってOKです。
いざ、WordPressテーマの翻訳方法と手順
上記踏まえて実際にやったテーマの翻訳(多言語化)手順は以下の通りです。
1.テーマ内の語句(主に見出しなど)を、_e()や__()を使ったものに書き換える
例)
<?php _e('お問い合わせ', 'theme_textdomain'); ?>
「お問い合わせ」の部分が翻訳対象の語句で、「theme_textdomain」は自作テーマのディレクトリ名になります。
_e()と__()の違いについては下記の記事が詳しいので、是非お読みください。
ちなみに翻訳には 変数を設定して%sで代入させることができます。日本語は語順がヨーロッパ諸言語とかなり違うので、使いこなせると重宝します(私はあまり使いこなせてないが)。
2.functions.phpに翻訳ファイル読み込みのコードを記入
自作テーマ内のfunctions.phpに、以下のコードを記入します。記入場所は一番上がいいよ!との情報アリ。
load_theme_textdomain( 'theme_textdomain', get_template_directory() . '/languages' );
1.と同じように、「theme_textdomain」は自作テーマのディレクトリ名を記入します。
3.自作テーマ内にlanguagesフォルダを作成
手順2.で翻訳ファイルを読みに行くディレクトリに languages を指定しているので、素直にそうしましょう。
4.翻訳ファイル作成の為にPoedit(無料版)を用意する
翻訳ファイルの作成・編集には Poedit が必要です。ダウンロードしてインストールします。立ち上げると、以下のような画面(Win版、2019年9月現在)が現れます。
【POファイル作成までの手順】
1.WordPressに特化した機能もあってついクリックしたくなりますが、実は有料。お財布に余裕のない人はグッと堪えて左上「ファイル>新規」とクリックします。
2.すると『翻訳が存在しません。何かがおかしいようです。」という切ないメッセージを背景に「翻訳の言語」を選ぶミニウィンドウが現れますので、そこから作りたい翻訳言語を選びます。
3.選んでも何も起きませんが、ガッカリしないでそのままこのファイルをひとまず「保存」します。
保存先は先ほど作成した、テーマ内のlanguagesフォルダにします。
4.そのままの画面で再度「開く」から、先ほど保存したPOファイル(英語であればen.po)を開きます。画面は大して変わり映えしませんが、構わず・改めて「ソースから抽出」をクリックします。
5.ソースの検索パスを聞かれるので、[+]ボタンを使って、自作テーマのフォルダを選択します。もしこの時点で、他のプラグインテーマのカスタマイズファイルなどがあれば、予め除外しておくことも可能です。このままOKを押さずに次の手順へ。
6.そのままのウィンドウで「ソース中のキーワード」タブをクリックし、キーワードに _e と __ を追加します。これで[OK]ボタンをクリックします。これで翻訳対象の文字列が抽出され、POファイルが作成されます。
7.画面左側に元の言語、右側に翻訳言語が表示されますが、最初は翻訳がないので空欄です。画面下にある「翻訳」欄に、翻訳を記入していきます。
8.翻訳した語句を入れたら、最後に「保存」します。この時、自動的に同名のMOファイルが作成されます。これで翻訳ファイルが出来上がり。
余計な語句はどうやって削除するか
自作テーマにWordPressやプラグインなどで使われている翻訳対応の語句を流用している場合、自作テーマには翻訳を用意する必要がないにも関わらず拾ってきてしまいます。でも、Poeditからソーステキストを削除することができません。では、どうするか。
ソーステキストそのものを削除したい場合は、EmEditorやメモ帳などのテキストエディタで直接開きます。すると、以下のように内容を見ることができます。
#: archive.php:46 search.php:47 msgid "続きを読む" msgstr "weiter"
これがソーステキスト一つ分のセットなので、不要なソーステキストはスペース行も併せて4行丸っと削除しちゃいましょう。
ちなみにテキストエディタから開くと、どのPHPファイルから抽出された語句なのかが一度に見えるので、これが意外と便利です。お試しください。
サイトの多言語化には多言語プラグインも必要
テーマを翻訳するような人には不要な説明かもしれませんが、念のため。
WordPressサイトの多言語化には、テーマの対応だけではなくWordPressサイトを多言語化してくれるプラグインも必要です。
自分の案件で実際に利用したことのある代表的なものを以下にざっくりあげておきますので、お役に立てれば幸いです。
- Polylang ・・・小規模~中規模サイトまで使える。言語別に投稿やカテゴリー、メニューが作れ、紐づけしてくれるタイプ。プラグインによっては相性が悪かったり動かなかったりもあり。
- Bogo・・・CF7の作者さんが作っている多言語プラグイン。Polylangと似た使い勝手だが、管理画面を言語毎に切り替えるのがちょっと面倒。非常にシンプルなので、物足りない場合も。
- Multisite Language Switcher・・・これはWordPressをネットワークサイト(マルチサイト)化して使うタイプ。言語ごとに大きく内容が異なるサイトにして、WordPressを複数運営する場合はこれ。利用する他のプラグインがちゃんとマルチサイト対応か確認するのが大切だが、1WordPressで1言語ずつなので、完璧に多言語化できる。
- qTranlate-X・・・一つの投稿・ページにむりくり多言語分を詰め込んじゃうプラグイン。ソースコードが汚いらしいが、目に見える汚れはない。一つの投稿編集画面に複数の言語を入れていけるので、視覚的にはわかりやすい。小規模で、パソコン苦手目なクライアントさんでも使いやすかったのだが、開発が3年前でまた終わってしまっている。
以上です。