WordPressを様々な言語に対応させるには、マルチ言語対応させる必要があります。
マルチ言語対応というと、なんだか難しそうな響きです。けれど、やってみたら対応作業自体はそこまで難しいものではありませんでした(翻訳は大変だけど)。
ただ、手順が簡単といっても、僕の記憶能力的には「半年後には忘れるレベル」なので、やり方をメモがてら残しておこうと思います。
目次
WPテーマをマルチ言語対応させる主な手順
WordPressテーマをマルチ言語に対応させるには、以下のような手順が必要です。
- <html>の言語属性をマルチ言語対応にする
- 文字エンコーディングを指定する
- マルチ言語対応させたいテキスト部分を翻訳用の関数で囲む
- テーマ内に翻訳用ファイル設置場所を作る
- テキストドメインを適用させるコードを書く
- Poeditを用いて翻訳用ファイルを作成する
- Poeditを用いて翻訳をする
翻訳ファイルの作成などは、「かなり大変なのでは?」と思っていましたが、Poeditという無料で使えるソフトを利用すれば、かなり手順を簡略化できます。
<html>の言語属性をマルチ言語対応にする
まずは、HTMLのルート要素となる<html>タグの確認を行います。
<html>タグのlang属性が以下のように固定されている場合は変更する必要があります。
<html lang="ja">
現在使用中のテーマの<html>タグが固定されている場合は、以下のように使用言語に合わせて出力されるように変更してください。
<html <?php language_attributes(); ?>>
文字エンコーディングを指定する
次に、<head></head>内にて、文字エンコーディングを設定します。
<head></head>内にmeta charsetタグが無い場合は、以下を追加してください。
<meta charset="<?php bloginfo('charset'); ?>">
文字エンコーディングは、UTF-8であれば良いので、以下のように書いてあっても良いです。
<meta charset="UTF-8">
ただ、万が一のWordpress仕様変更にも対応できるようにbloginfo(‘charset’)を利用したものにしておいた方が間違いないかと思います(推奨charsetが今後変わる可能性も低いと思うけど)。
対応させたいテキスト部分を翻訳用の関数で囲む
次に、テーマ内に表示されるテキストに対して「翻訳対応可能となるような処理」を加えます。
翻訳後のテキストを取得する場合
例えば、テーマ内で以下のような箇所があったとします。
<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」フォルダを作成します。
テキストドメインを適用させるコードを書く
次に、テキストドメインに対する翻訳を実行させるための以下のコードをfunctions.phpに記入します。
//テーマの多言語対応 load_theme_textdomain( 'theme_name', get_template_directory() . '/languages' );
load_theme_textdomain()関数は、テーマ翻訳ファイルを読み込みます。
関数の使い方は、以下のようになります。
load_theme_textdomain( $domain, $path );
$domainには、識別子となるテキスト(テキストドメイン)を入力します。僕の場合は、テーマ名を入力しました。
$pathには、「言語ファイルの設置場所」を指定します。今回は、先程作成した「languages」フォルダへのパスを指定しました。
Poeditを用いて翻訳用ファイルを作成する
次に、「languages」フォルダ内に翻訳用ファイルを作成します。
翻訳用ファイルは、テキストエディターでも作成することは可能ですが、Poeditという無料ソフトを利用して手軽に作ることが可能です。
以下では、Poeditを利用した方法について説明します。
Poeditをダウンロード&インストール
まずはPoeditから、インストーラーをダウンロードします。
ダウンロードが完了したら、インストーラーを起動しインストールを開始します。
インストールは、特に特別な設定は必要ありません。普通にインストールすればOKです。
翻訳用ファイルの作成
インストールが完了したら、Poeditを起動してください。
以下のような画面が立ち上がるかと思います。
「ファイル」メニューから「新規カタログ」メニューを選択します。
すると、「翻訳言語」ダイアログが表示されるので、「日本語」を選択します。
すると、まだ翻訳が作成されたわけではないので、以下のような画面が表示されるかもしれませんが、気にしないでください。
翻訳が存在しません。何かがおかしいようです。
「ファイル」の「名前を付けて保存」から、先程作成した「languages」フォルダ内に「ja.po」ファイルとして保存します。
右メニューの「カタログ」から「設定」を選択します。
翻訳の設定
すると、以下のような「カタログ設定」ダイアログが表示されます。
ソースの検索パスの設定
「ソースの検索パス」タブで「+」ボタンを押し「フォルダーを追加」メニューを選択します。
「ベースへのパス」は、テーマの親フォルダとなるように「..」と入力し「フォルダの選択」ボタンを押します。
すると以下のように「ベースへのパス」が選択されます。
ソース中のキーワードの設定
次に、「ソース中のキーワード」タブを選択して「+」ボタンを押します。
「追加キーワード」に対して「__」と「_e」を登録します。
全ての設定が終わったら、「カタログの設定」の「OK」ボタンを押してください。
キーワードの更新
カタログの設定を終えたら、Poeditツールバーにある「更新する」ボタンを押してください。
すると「変更保存」ダイアログが表示されるので「保存」ボタンを押してください。
すると、テーマフォルダ内のテンプレートファイルが読み込まれ__()関数や_e()関数から、「翻訳対象テキスト」が抽出されます。
「翻訳対象テキスト」が抽出された後の、Poedit画面はこんな感じ。
とりあえず、ここで一旦「保存」ボタンを押して保存しておきましょう。
Poeditを用いて翻訳をする
最後に、ベーステキストの翻訳を行います。
例えば「ソーステキスト」が「Nothing Found」だった場合、「翻訳」に対して「該当なし」のように翻訳していきます。
右ペインでは、「翻訳の提案」もしてくれるので、翻訳の助けになります。
こんな感じで、一つ一つソーステキストを翻訳していけば翻訳ファイルが完成します。
Poeditは有料版だと尚はかどる
Poeditは、20ドル弱払ってPoedit Proライセンスを購入すれば、機能が強化されます。
pro版で追加される機能については、いくつかあるのですが、僕が特に便利だなと感じたのは以下の2点です。
翻訳状態が確認できる統計情報を見ることが出来る
まず、便利になる点の1点目としては、「現在の翻訳状況を視覚的に把握することが出来る統計情報」を見ることができます。
統計情報は、こんな感じで表示されます。
こんな感じで、作業の進捗状況を確認しながら翻訳できるので、「あともう少しで終わる」とか「今日は10%進めて60%までやろう」といったように、作業の良い目安となります。
オンライン提案を利用した自動翻訳機能が使える
で、特に便利なのが、事前翻訳機能です。
pro版を利用することで「オンライン提案を使用」機能を利用して、自動翻訳させることができます。
例えば、翻訳ファイルを作った直後は、以下のように「翻訳テキスト」は空の状態です。
統計情報を見ると完全に翻訳状態は0%です。
事前翻訳を利用すると、以下のようなダイアログが出るのでしばらく待ちます。
事前翻訳が終了すると、以下のように「翻訳候補」が結構良い精度で提案されます。
統計情報を見ると、全ての原文に対して翻訳提案がなされています。
あとは、翻訳提案の修正すべきところは修正していけば良いだけです。
翻訳提案は、おそらくPoeditユーザーが、これまで翻訳してきたデータ(オンライン翻訳メモリ)を元に決められていると推測されます。翻訳データがPoeditサーバになければ、おそらくGoogle翻訳が利用されているのではないかと思います(あくまで推測)。
先程も、書きましたが、これが結構精度が高いので、翻訳の手間を大幅に減らすことができます。
僕の場合は、この「事前翻訳」機能のおかげで、結構な作業時間を短縮できたと思います。20ドルを支払った価値は十分ありました。
まとめ
こんな感じで、Poeditを利用すれば、Wordpressのマルチ言語対応させるための作業を結構軽減させることが可能です。
少なくとも、「.poファイルをテキストで作成して、.moにコンパイルする」という作業を自前で行うよりは、かなり手間は省けると思います。
翻訳自体は、大変な部分もあると思いますが、それを補助する機能は結構揃っていると思います。