WordPress サイトの多言語化に もう迷わない そう、Bogo ならね

August 18, 2014

WordPress で多言語サイトを構築する方法はいくつかありますが、おそらく最も手軽な Bogo プラグインによる多言語化をご紹介します。
当サイトも Bogo プラグインを使用して英語記事を公開しています。

Image

Bogo とは

Bogo の特徴を端的に表しているプラグインの説明文を引用します。

独自テーブルをたくさん作ったり後で頭痛を起こすような HTML コメントの混入をしない、とても素直な多言語化プラグイン。

プラグイン作成者は Takayuki Miyoshi さん。日本人の方なのでキャッチーな日本語の説明文ですね。
筆者はこの説明文を読んで、Bogo にしてみようと決めました。

また、Miyoshi さんは世界的に有名な「Contact Form 7」プラグインの作成者でもあり、信頼性が高いと言えると思います。

Bogo は、WordPress Codex 日本語版のページにも記載がある通り、言語ごとに 1つの投稿を管理する方式(One language per post)です。

Bogo プラグインの使い方

気合を入れて説明を書こうと思ったのですが、すでに素晴らしいページがありました!

以降は上記ページの補足追加情報です。

Bogo のデフォルト言語

wp-config.php の define(‘WPLANG‘, ”) で定義されている言語がデフォルトになります。

当サイトの場合は ja が指定してあり、トップ ページ http://designhack.slashlab.net にアクセスするとデフォルトである日本語のサイトが表示されます。

wp-config.php の該当部分の例

/**
 * ローカル言語 - このパッケージでは初期値として 'ja' (日本語 UTF-8) が設定されています。
 *
 * WordPress のローカル言語を設定します。設定した言語に対応する MO ファイルが
 * wp-content/languages にインストールされている必要があります。たとえば de_DE.mo を
 * wp-content/languages にインストールし WPLANG を 'de_DE' に設定すると、ドイツ語がサポートされます。
 */
define('WPLANG', 'ja');

Bogo による各言語サイトの URL

デフォルト以外の言語は、言語ごとにサブディレクトリ形式のサイトが生成されます。
(正確には、そう見えるように Bogo ちゃんが働いてくれます)

例えば当サイトの英語版トップ ページは http://designhack.slashlab.net/en/ になります。

言語に対応する「en」の部分(言語タグ)は、IETFRFC に準拠しているようです。
ドイツ語ならば「de」、スペイン語は「es」といった感じでしょうか。

各言語の言語タグは以下のページで確認できます。

Bogo の仕組み

投稿ごとに _locale という名前のカスタムフィールドを追加し、そこにロケールを保存して管理しているようです。
ロケールは、ja や en_US という言語を表す文字列(言語コード)です。

さりげなく SEO(hreflang)

これには筆者もあとから気付いたのですが、Google 先生によるサイトの国際化(多言語化)ガイドラインによると、ページに複数の言語バージョンがある場合、hreflang を使用したリンク要素をヘッダーに記述することが推奨されています。

Bogo ちゃんはこれにもしっかり対応。
別の言語バージョンがあるページには、以下のようなリンク要素が自動的にヘッダーに記述されます。

...
<link rel="alternate" hreflang="ja" href="http://designhack.slashlab.net/" />
<link rel="alternate" hreflang="en-US" href="http://designhack.slashlab.net/en/" />
...

凄いよ Bogo ちゃん。

他のプラグインとの相性や連携

筆者は広範囲に検証したわけでなく、申し訳程度ですが共有します。

URL 構造を変更するプラグイン

相性はあまりよくないと思いますので、併用する場合には事前にテストが必要でしょう。
例えば、カテゴリ ページの URL から「/Category」を取り除くプラグインは、Bogo と併用できません

Bogo が「/en/」などの言語別サイトを実現するために、がっつり リライト ルールを操作しているためです。

WordPress SEO(by Yoast)

筆者は併用していますが問題ありません。
サイトマップにも ちゃんと英語ページが反映されます。

パンくず(Breadcrumbs)プラグイン

おそらく問題ありません。
WordPress SEO に同梱されているパンくず機能を使ってみましたが、パンくず上のリンクはすべて言語に対応したリンクになります。

サポート フォーラムより

WordPress の公式サポート フォーラムから Tips をご紹介します。

get_posts で言語ごとの投稿を取得する方法

例えば投稿ページにて、関連する投稿として同じカテゴリ内の投稿を表示させる場合、get_posts 関数を使うと思います。デフォルトの get_posts では全言語の投稿が対象になり、例えば英語サイトに日本語の投稿が表示されることになり得ます。

これを回避するには、get_posts 関数の suppress_filters パラメータに false を指定します。その投稿と同一の言語の投稿のみが対象になります。また、’lang’ => ‘ja’ のように lang パラメータを追加することで言語を指定することもできます。

他のプラグインによる表示部分が Bogo の言語切り替えの対象にならない

多言語に対応しているプラグインについて、Bogo で言語を切り替えても、プラグインの表示言語は wp-config.php の define(‘WPLANG’, ”) で定義されているデフォルト言語から切り替わらない、という事象があるようです。

これは非常にニッチな問題で、普通に使う分にはおそらく影響はないと思いますが、留意しておいた方が良いかも知れません。

フォーラムのトピックは未解決ですが、少し試してみたところ、そのプラグインの言語ファイルの読み込みを plugins_loaded アクションにフックすると回避できるようです。(プラグイン コードの書き換えが必要なのでアップデートされると元に戻ってしまいますが…)

一般的なプラグインの言語ファイル読み込みの例

load_plugin_textdomain('yourpluginsdomain', false, basename( dirname( __FILE__ ) ) . '/languages' );

回避策の例

add_action( 'plugins_loaded', 'your_plugins_loaded' );

function your_plugins_loaded() {
	load_plugin_textdomain('yourpluginsdomain', false, basename( dirname( __FILE__ ) ) . '/languages' );
}

特定の投稿/固定ページに別言語の投稿/固定ページがあるか調べる方法

bogo_get_post_translations() 関数が用意されており、$post->id を引数に渡すことで、翻訳された投稿/固定ページを配列で返してくれます。詳しくは以下のリンクからフォーラムのトピックをご覧ください。

関連記事

当サイトの Bogo 関連記事です。よろしければご参考にどうぞ。

関連サイト

最後のは知る人ぞ知るヌーラボ(Cacoo 便利だよ)の CEO の方が Bogo に触れていて少し面白かったのでリンクしてみました。

おまけ

WordPress サイトを多言語化する方法は Bogo だけに限りません。
この記事をまとめる過程で参考にさせていただいたページをご紹介しておきます。

あなたのサイトに合った方法が見つかるといいですね。

ちなみに筆者は英語が できそうな感じに見せかけていますが、英語力はゴミ レベルだということをゲロって終わります。

3 thoughts on “WordPress サイトの多言語化に もう迷わない そう、Bogo ならね

  1. Pingback: WordPress多言語対応:Bogo | さとういちろうのへや

  2. Pingback: 【WordPress】複数の前後記事を出力する方法 | Design Hack and Slash

  3. Pingback: Bogoを使ってWordPressを多言語化 | 株式会社クオックス | QOX Inc.

コメントを残す

メールアドレスが公開されることはありません。