WordPressテーマをマルチ言語対応(国際化)させる方法

WordPressを様々な言語に対応させるには、マルチ言語対応させる必要があります。

マルチ言語対応というと、なんだか難しそうな響きです。けれど、やってみたら対応作業自体はそこまで難しいものではありませんでした(翻訳は大変だけど)。

ただ、手順が簡単といっても、僕の記憶能力的には「半年後には忘れるレベル」なので、やり方をメモがてら残しておこうと思います。

スポンサーリンク
レクタングル(大)広告

WPテーマをマルチ言語対応させる主な手順

WordPressテーマをマルチ言語に対応させるには、以下のような手順が必要です。

  1. <html>の言語属性をマルチ言語対応にする
  2. 文字エンコーディングを指定する
  3. マルチ言語対応させたいテキスト部分を翻訳用の関数で囲む
  4. テーマ内に翻訳用ファイル設置場所を作る
  5. テキストドメインを適用させるコードを書く
  6. Poeditを用いて翻訳用ファイルを作成する
  7. Poeditを用いて翻訳をする

翻訳ファイルの作成などは、「かなり大変なのでは?」と思っていましたが、Poeditという無料で使えるソフトを利用すれば、かなり手順を簡略化できます。

<html>の言語属性をマルチ言語対応にする

まずは、HTMLのルート要素となる<html>タグの確認を行います。

<html>タグのlang属性が以下のように固定されている場合は変更する必要があります。

<html lang="ja">

現在使用中のテーマの<html>タグが固定されている場合は、以下のように使用言語に合わせて出力されるように変更してください。

<html <?php language_attributes(); ?>>
<html>タグは、大抵のテーマであればheader.phpにあるかと思います。

文字エンコーディングを指定する

次に、<head></head>内にて、文字エンコーディングを設定します。

<head></head>内にmeta charsetタグが無い場合は、以下を追加してください。

<meta charset="<?php bloginfo('charset'); ?>">

文字エンコーディングは、UTF-8であれば良いので、以下のように書いてあっても良いです。

<meta charset="UTF-8">

ただ、万が一のWordpress仕様変更にも対応できるようにbloginfo(‘charset’)を利用したものにしておいた方が間違いないかと思います(推奨charsetが今後変わる可能性も低いと思うけど)。

<head></head>も、大抵のテーマであればheader.phpにあるかと思います。

対応させたいテキスト部分を翻訳用の関数で囲む

次に、テーマ内に表示されるテキストに対して「翻訳対応可能となるような処理」を加えます。

翻訳後のテキストを取得する場合

例えば、テーマ内で以下のような箇所があったとします。

<div class="entry-content">
  <?php the_content( '続きを読む' );?>
</div>

これを以下のように変更します。

<div class="entry-content">
  <?php the_content( __('Read More', 'theme_name') );?>
</div>

__()関数は、translate()関数の簡易版です。

<?php $translated_text = __( $text, $domain ); ?>

$textには、翻訳対象のテキストを入力します。通常は、ベーステキストとして英語を書いておくのが一般的です(仕様的にはどんな言語で書いてもOKではあります)。

$domainには、翻訳されたテキストを取得するドメインを設定します。簡単に言うと、「翻訳を取得するための識別子(Wordpressデフォルトの翻訳やプラグインの翻訳と区別するための識別子)」を入力します。僕の場合は、テーマ名を文字列で入力しました。

戻り値は翻訳されたテキストが返ります。

__()関数は、翻訳テキストを取得して、コードから利用したい時に使います。

翻訳後のテキストを出力する場合

翻訳後のテキストを、そのまま書き出したい場合は、_e()関数を利用します。

例えば、テーマ内に以下のような記述があったとします。

<h2 id="comments">コメント</h2>

このように、直接テキストを出力したいような箇所には、_e()関数を用いて、以下のように書き換えます。

<h2 id="comments"><?php _e('Comments', 'theme_name'); ?></h2>

_e()関数の使い方は、こんな感じ。

<?php _e( $text, $domain ) ?>

引数の設定方法は、先程の__()関数と同様です。

テキストを出力するので、戻り値は返しません。

_e()関数は、以下のコードと同等です。

<?php echo __( $text, $domain ) ?>

テーマ内のテキスト全てに翻訳関数を適用する

上記のような感じで、テーマ内のテンプレートファイル、関数ファイル全ての「翻訳対象テキスト」に対して__()関数と、_e()関数を適用させます。

翻訳関数は、他にもありますが、この2つだけでほとんど事足りると思います。

日本語のテーマを英語化する場合は、このテーマ内テキストの「日本語」→「英語」翻訳が最も面倒な作業になると思います。

テーマ内に翻訳用ファイル設置場所を作る

次に翻訳用ファイルを置いておく場所を作ります。

一般的なテーマであれば、テーマフォルダ直下に「languages」フォルダを作成します。

テーマフォルダ直下に「languages」

テキストドメインを適用させるコードを書く

次に、テキストドメインに対する翻訳を実行させるための以下のコードをfunctions.phpに記入します。

//テーマの多言語対応
load_theme_textdomain( 'theme_name', get_template_directory() . '/languages' );

load_theme_textdomain()関数は、テーマ翻訳ファイルを読み込みます。

関数の使い方は、以下のようになります。

load_theme_textdomain( $domain, $path );

$domainには、識別子となるテキスト(テキストドメイン)を入力します。僕の場合は、テーマ名を入力しました。

$pathには、「言語ファイルの設置場所」を指定します。今回は、先程作成した「languages」フォルダへのパスを指定しました。

load_theme_textdomain()関数が読み込まれる前に、__()関数や、_e()関数が読み込まれると、翻訳が出力できなかったケースもありました。ですので、load_theme_textdomain()は、なるべくfunctions.phpの先頭の方に書き込んでおくことをおすすめします。

Poeditを用いて翻訳用ファイルを作成する

Poedit - Gettext Translations Editor

次に、「languages」フォルダ内に翻訳用ファイルを作成します。

翻訳用ファイルは、テキストエディターでも作成することは可能ですが、Poeditという無料ソフトを利用して手軽に作ることが可能です。

以下では、Poeditを利用した方法について説明します。

Poeditをダウンロード&インストール

まずはPoeditから、インストーラーをダウンロードします。

Poeditのダウンロードボタンを押す

    ダウンロードが完了したら、インストーラーを起動しインストールを開始します。

    Poedit-2.0.2-setup.exe

    インストールは、特に特別な設定は必要ありません。普通にインストールすればOKです。

    Poeditのインストール画面

    翻訳用ファイルの作成

    インストールが完了したら、Poeditを起動してください。

    以下のような画面が立ち上がるかと思います。

    Poeditの起動画面

    「ファイル」メニューから「新規カタログ」メニューを選択します。

    Poeditで新規カタログを作成する

    すると、「翻訳言語」ダイアログが表示されるので、「日本語」を選択します。

    Poeditの翻訳言語ダイアログで日本語を選択

    すると、まだ翻訳が作成されたわけではないので、以下のような画面が表示されるかもしれませんが、気にしないでください。

    翻訳が存在しません。何かがおかしいようです

    翻訳が存在しません。何かがおかしいようです。

    「ファイル」の「名前を付けて保存」から、先程作成した「languages」フォルダ内に「ja.po」ファイルとして保存します。

    翻訳ファイルを名前を付けて保存

    言語ファイルの雛形となる.potファイルは、Poeditを使えば手軽に作成可能なので、個人的には.poファイルの作成のみで十分かと思います。

    右メニューの「カタログ」から「設定」を選択します。

    Poeditのカタログ設定画面を開く

    翻訳の設定

    すると、以下のような「カタログ設定」ダイアログが表示されます。

    カタログの設定ダイアログの翻訳の設定タブ

    「翻訳の設定」タブの、「プロジェクト名」や「言語チーム」などの入力は任意です。個人で行っているのなら特にデフォルトのままでも問題ないと思います。

    ソースの検索パスの設定

    「ソースの検索パス」タブで「+」ボタンを押し「フォルダーを追加」メニューを選択します。

    ソースの検索パスタブの+ボタンを押す

    「ベースへのパス」は、テーマの親フォルダとなるように「..」と入力し「フォルダの選択」ボタンを押します。

    ベースへのパスの選択

    「..」は、1つ上の階層のフォルダという意味です。

    すると以下のように「ベースへのパス」が選択されます。

    ベースへのパスが選択された

    ソース中のキーワードの設定

    次に、「ソース中のキーワード」タブを選択して「+」ボタンを押します。

    ソース中のキーワードタブの+ボタンを押す

    「追加キーワード」に対して「__」と「_e」を登録します。

    追加キーワードを+ボタンから追加していく

    この「追加キーワード」を利用して、Poeditはテーマのテンプレートファイル内から「翻訳対象のテキスト一覧」を取得します。

    全ての設定が終わったら、「カタログの設定」の「OK」ボタンを押してください。

    キーワードの更新

    カタログの設定を終えたら、Poeditツールバーにある「更新する」ボタンを押してください。

    Poedit ツールバーにある「更新する」ボタンを押す

    すると「変更保存」ダイアログが表示されるので「保存」ボタンを押してください。

    変更保存ダイアログの保存ボタンを押す

    すると、テーマフォルダ内のテンプレートファイルが読み込まれ__()関数や_e()関数から、「翻訳対象テキスト」が抽出されます。

    カタログを更新中ダイアログ

    「翻訳対象テキスト」が抽出された後の、Poedit画面はこんな感じ。

    Poeditで翻訳対象テキストが抽出される

    とりあえず、ここで一旦「保存」ボタンを押して保存しておきましょう。

    翻訳ファイルを保存する

    保存後、「名前を付けて保存」から.potという拡張子を付けて保存すれば、翻訳用の雛形ファイルも作成することができます。

    Poeditを用いて翻訳をする

    最後に、ベーステキストの翻訳を行います。

    例えば「ソーステキスト」が「Nothing Found」だった場合、「翻訳」に対して「該当なし」のように翻訳していきます。

    Poeditで翻訳を行っていく

    右ペインでは、「翻訳の提案」もしてくれるので、翻訳の助けになります。

    Poeditは翻訳の提案もしてくれる

    こんな感じで、一つ一つソーステキストを翻訳していけば翻訳ファイルが完成します。

    英語がベーステキストの場合の日本語訳は日本人の場合はかなり楽かと思います。けれど、日本語がベーステキストのケースで英語訳をする場合は、この機能はかなりありがたいです。

    Poeditは有料版だと尚はかどる

    Poeditは、20ドル弱払ってPoedit Proライセンスを購入すれば、機能が強化されます。

    pro版で追加される機能については、いくつかあるのですが、僕が特に便利だなと感じたのは以下の2点です。

    翻訳状態が確認できる統計情報を見ることが出来る

    まず、便利になる点の1点目としては、「現在の翻訳状況を視覚的に把握することが出来る統計情報」を見ることができます。

    統計情報は、こんな感じで表示されます。

    翻訳の進捗状況を見ることが出来る

    こんな感じで、作業の進捗状況を確認しながら翻訳できるので、「あともう少しで終わる」とか「今日は10%進めて60%までやろう」といったように、作業の良い目安となります。

    オンライン提案を利用した自動翻訳機能が使える

    で、特に便利なのが、事前翻訳機能です。

    pro版を利用することで「オンライン提案を使用」機能を利用して、自動翻訳させることができます。

    オンライン提案を使用して自動翻訳する

    例えば、翻訳ファイルを作った直後は、以下のように「翻訳テキスト」は空の状態です。

    Poeditで翻訳ファイルを作った直後

    統計情報を見ると完全に翻訳状態は0%です。

    まだ全く翻訳されていない統計情報

    事前翻訳を利用すると、以下のようなダイアログが出るのでしばらく待ちます。

    事前翻訳を利用中

    事前翻訳が終了すると、以下のように「翻訳候補」が結構良い精度で提案されます。

    Poeditで翻訳候補の提案がされた状態

    統計情報を見ると、全ての原文に対して翻訳提案がなされています。

    事前翻訳が終わった後の統計情報

    あとは、翻訳提案の修正すべきところは修正していけば良いだけです。

    2017-07-21_11h24_53

    翻訳提案は、おそらくPoeditユーザーが、これまで翻訳してきたデータ(オンライン翻訳メモリ)を元に決められていると推測されます。翻訳データがPoeditサーバになければ、おそらくGoogle翻訳が利用されているのではないかと思います(あくまで推測)。

    先程も、書きましたが、これが結構精度が高いので、翻訳の手間を大幅に減らすことができます。

    僕の場合は、この「事前翻訳」機能のおかげで、結構な作業時間を短縮できたと思います。20ドルを支払った価値は十分ありました。

    「オンライン翻訳メモリを使用した事前翻訳」は、かなり精度は高いものの完璧ではありません。必ず翻訳者が確認し修正する必要があるものとして利用することをおすすめします。

    まとめ

    こんな感じで、Poeditを利用すれば、Wordpressのマルチ言語対応させるための作業を結構軽減させることが可能です。

    少なくとも、「.poファイルをテキストで作成して、.moにコンパイルする」という作業を自前で行うよりは、かなり手間は省けると思います。

    翻訳自体は、大変な部分もあると思いますが、それを補助する機能は結構揃っていると思います。

    サイト Poedit – Gettext Translations Editor