WordPressの多言語化プラグインをqTranslateからWPMLに変更しました

過去に何度か記事にした、WordPressの多言語化プラグイン。昔からWPMLを使用していましたが、qTranslateの存在を知り、このブログではqTranslateを使っていました。ところがなんだか問題発生したようなので、WPMLに完全移行!その理由と移行手順を紹介します。

↑私が10年以上利用している会計ソフト!

qTranslateとWPMLの違い

ふたつのプラグインの違いをザックリと解説。使い方の説明は以下の過去記事をご覧頂ければと思います。

翻訳記事の扱い

一番の違いは、ひとつの投稿記事に対する翻訳記事の扱い。qTranslateはすべての言語をひとつの記事としてまとめています。それに対しWPMLはデフォルトの言語に付随する他言語は、単一記事として保存されます。そのため、qTranslateではどの言語でも同じ記事ID(webcreatorbox.com/?p=8914 ←この数字)だったのが、WPMLだとすべて別のIDに変わります。

テーマファイル内の翻訳

テーマファイル内の単語を翻訳する方法が異なります。

qTranslateは

<?php _e("<!--:en-->English<!--:--><!--:ja-->日本語<!--:-->"); ?>

という風に、一行ですべての翻訳言語を記述するのに対し、WPMLは

<?php _e('Hello World!','themename'); ?>

という、WordPress標準の翻訳方法で記述します。qTranslateの方法だと、2言語程度であればあまり気にならないかもしれませんが、それ以上の数の言語に対応させるにはソースコードがごちゃごちゃしちゃいそうです。テーマファイル内の翻訳方法について、詳しくは後述します。

お値段

qTranslateの魅力はなんといっても無料!気軽に多言語サイトを構築することができますね。WPMLは有料プラグイン。自身のブログに使える多言語ブログ版はUS$29、クライアントサイトに使える多言語CMS版はUS$79です。一度購入すると複数サイトで使用でき、30日以内なら返金可能となっています。詳しくはWPMLの料金表ページをご覧ください。

導入当時はどちらがいいのかよくわからなかったので、自分のポートフォリオサイトにはWPMLを、このブログにはqTranslateを使っていました。

問題発生

qTranslateを導入していたこのブログで、ここ一ヶ月記事を公開した瞬間にサーバーダウン、または表示がとっても遅くなってしまう不具合発生。アクセスの多い記事だったため、単にアクセス過多が原因だと思っていましたが、詳しく調べてみるとどうもそれだけではなさそう。

そこで使用中のプラグインのモッサリ具合をチェックするプラグイン、P3 (Plugin Performance Profiler)を使ってみることに。インストールして「Scan Now」をクリックするだけのお手軽プラグインです。詳しくは「WordPressをもっさり重くさせているプラグインはどれだ?P3(Plugin Performance Profiler)でパフォーマンスを悪化させているプラグインを探り出そう!」で紹介されています。

qTranslateの割合

すると…ほとんどがqTranslate!!

qTranslateの速度

qTranslateだけで約0.8秒かかっちゃってます。原因はこいつか!

qTranslateからWPMLに移行

そんなわけでポートフォリオサイトでも使っているWPMLに移行することに。WPMLが開発したqTranslate Importerを使えば、翻訳記事の構造そのままWPMLに移すことができます。詳しい手順は公式サイトの解説のとおり。簡単に書くとこんな感じです:

  1. データベースのバックアップを取る
  2. qTranslate を無効にし、WPML と qTranslate Importerを有効にする
  3. qTranslate Importerの設定画面で「Start」ボタンをクリック

htaccessにリライト

インポートが完了するとURLリライトの設定をします。表示されたテキストを .htaccess ファイルにコピペして完了!

WPMLの設定

うまくインポートされていれば、ダッシュボードでの設定はほとんどいらないはず。念のため各記事やページ、カテゴリー、タグなどがうまく移行されているかを確認し、修正が必要であれば修正します。

WPMLの基本的な使い方は、過去記事「WordPressプラグイン「WPML」でブログを多言語化する」を参考にしてみてください。言語スイッチャーもウィジェットを使えばサクッと実装できるので、必要な方は管理画面の 外観>ウィジェット から追加します。RSSフィードも、特別な設定をしなくても言語を分けて配信されます。

テーマファイル内の翻訳

一番時間がかかったのが、このテーマファイル内の単語や文章を翻訳する作業。順を追って説明します。

1. functions.php

テーマフォルダーにある functions.php を開き、以下の一行を追加します。「themename」には使用中のテーマ名を記述。もしfunctions.phpがない場合は作成します。

load_theme_textdomain('themename',dirname(__FILE__));

2. 翻訳したい部分を書き換え

例えば英語サイトには「English」、日本語サイトには「日本語」と表示したい場合、qTranslateを使った書き方だと

<?php _e("<!--:en-->English<!--:--><!--:ja-->日本語<!--:-->"); ?>

となっているかと思います。これを

<?php _e('English','themename'); ?>

と書き換えます。「themename」は使用中のテーマ名を記述します。

3. 多言語化ファイル(.po)を作成

先ほど英語で書いた部分を日本語化するためのファイルを作成します。まずはTextEditやメモ帳など、テキスト編集ツールで新規ファイルを作成。ファイル名は「ja.po」とします。そこへ以下のテキストを記述。

msgid ""
msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"

msgid "English"
msgstr "日本語"
msgid "Hello"
msgstr "こんにちは"

msgid は翻訳元、msgstr は翻訳言語です。複数ある場合は下に続けて書いていきましょう。最初の1〜5行は文字化け防止のおまじない。冒頭に記述しておきます。

4. Poeditで .mo に変換

.po ファイルは多言語化するための編集ファイルなのに対し、.mo ファイルは読み込み専用です。実際にサーバーにアップロードするのは .mo ファイル。これを作成するため、Poeditという翻訳ファイル作成アプリをダウンロードしましょう。Poeditにはいろんな翻訳化のための機能がありますが、今回は上記で作成した .po ファイルを開いた後、なにも変更せずそのまま保存しましょう。同じ階層に自動的に「ja.mo」ファイルが出来上がっています。この ja.mo ファイルをテーマフォルダ内に置けば、指定した部分が翻訳されていると思います!

え?めんどくさいって?

WPML String Translation 画面
$79の多言語CMS版を購入している方は、WPML String Translationというプラグインが使えます。これは上記ステップの2番のみ済ませておけば、あとはプラグインが自動的にその部分を拾って管理画面に表示し、管理画面だけで翻訳できる優れものです(上画像)。手間を省きたいって方は多言語CMS版の購入を検討してみてはいかがでしょ?

言語によって異なる処理をする方法

「英語版のみこれを表示したい」「言語ごとにTwitter表示ウィジェットを変更したい」などなど、今表示している言語を取得し、言語ごとに別の処理をしたい場合は、以下のPHPで解決です。

<?php if (ICL_LANGUAGE_CODE=='en') { // English ?>
     Display English
<?php } else { // Japanese ?>
     日本語を表示
<? } ?>

WPMLに移行した結果

WPMLの割合

Sitepress〜というのがWPMLです。WPMLの比率は高いものの、全体のプラグイン読み込み時間は0.96秒から0.47秒になりました。

WPMLの速度

qTranslateは0.79秒でしたが、WPMLだと0.26秒に!

まとめ

qTranslateはテーマの作成や管理は楽ですが、読み込みに時間がかかってしまうので、小規模のサイトには向いているでしょう。たくさんのアクセスがあるサイトや、コンテンツ量の多いサイトにはWPMLをおすすめします。WPMLは30日の無料お試し期間もあるので、まずは実際に試してみてください!皆さんのサイトが複数言語に翻訳され、世界中に広まりますように ;)

シェアする

ニュースレター

Web制作の最新情報やWebクリエイターボックスからのお知らせ、中の人の近況等を定期的にお送りいたします。 ぜひご登録ください!もちろん無料です! :)