WordPressを多言語化するプラグインはウェブを検索したらいくつか出てきますが、今回は「Bogo」を紹介したいと思います。以前は「qTranslate」を利用していたのですが、使いやすいのはないのかと思い探してみたら色々と出ており、中でも「Bogo」が良さそうなので実装しました。「Bogo」の特徴として、日本語なら日本語のページ、中国語なら中国語のページなど、それぞれページを作成するところにあります。それらはこのプラグインによって結び付けられており、用意された言語ボタンをクリックすることでそのページの翻訳されたページが表示がされるといった感じです。
インストール
インストールは以下の流れに沿って簡単にできます。
「管理画面」>「プラグイン」>「新規追加」>「Bogo」で検索 >「インストール」
下準備
言語ファイルをダウンロードする必要があるようです。日本語版を構築したのなら既に「日本語」と「英語」は備わっています。
それ以外の言語をダウンロードする場合は、管理画面の「ツール」>「Bogo」より様々な言語をインストールできます。ここでインストールした言語は言語ボタンに反映されるので必要な言語だけインストールするといいかと思います。
投稿・固定ページを多言語化する
Bogoを有効化すると投稿(固定ページ)編集画面にて、右上の「公開」ボックスの上に「言語」のボックスが表示されます。最初は恐らく日本語になっていると思いますが、翻訳ページを作ることでここに結び付けられた投稿のタイトルが表示されるようになります。まずは多言語化する投稿の流れになります。
- 1)翻訳の元となるページの編集画面へ
- 翻訳したいページ(投稿/固定ページ)の編集画面を開きます。
- 2)言語を変更
- 最上部ヘッダーメニュー右側にある言語(今の言語が表示されています。例:日本語)にマウスを載せるとインストールした言語が表示されるので、翻訳したい言語をクリックします。
- 3)多言語のページを追加
- 管理画面が選択した言語になり、言語ボックスに「○○語の翻訳を追加する」といった旨のボタンが表示されるのでクリックします。
- 4)下書き保存して管理画面の言語を戻す
- この作業は必須ではありませんが、管理画面が他の言語だと分かりづらいので下書きして言語を元に戻します。言語ボックスにデフォルト言語のタイトルが表示されているのが確認できると思います。(例:サンプルページ[日本語])
このとき、タイトルも翻訳した言語にしておいた方が後で分かりづらくなる事態を避けれます。 - 5)タイトルや本文を入力して公開
- 選択した言語で入力して公開します。パーマリンクを確認すると、「http://ドメイン/en/」といったように、該当の言語のパスを挟んでいるのを確認できます。
多言語ボタンを挿入
多言語するボタンを設置するためにBogoではショートコード[bogo]
を用意しています。本文中に挿入する場合は記事の本文に、テーマで利用する場合は
<?php echo do_shortcode('[bogo]') ?> を挿入します。実際にされる表示はインストールされている言語が国旗付きで並び、翻訳ページがあるものだけリンクになっています。これで投稿・固定ページの多言語化は完了です。
一覧ページの多言語化
カテゴリーページや月別アーカイブなどの一覧ページでは、該当の言語の投稿しか表示されません。例えばデフォルトの言語が日本語だった場合、カテゴリー「news」一覧を表示するURL「http://ドメイン/category/news/」では日本語のみを表示し、「http://ドメイン/en/category/news/」では英語のみを表示します。そのため、英語に翻訳した「news」カテゴリーの記事がない場合はhaspost()がfalseになり記事がない場合の処理になってしまいます。この辺りは既に記事を大量に作成している人にとっては大変ですね。
テーマ部分を多言語化に対応する
the_title()などの投稿の情報を表示する場合は良いですが、サイトのタイトル、カテゴリー等を多言語化するためには一工夫が必要です。
現在の言語を取得する関数を利用して条件分岐
Bogoには現在の言語を取得してくれる関数「get_locale()」が定義されています。これを利用した条件分岐により、日本語だったらこのテンプレートを読み込む、英語だったらこのテキストにする、などといったことが可能になるかと思います。すべてこれで行うとなると結構手間ですけどね。
1 2 3 4 5 6 7 8 |
$locale = get_locale(); if($locale == 'zh_TW') : echo '台湾です'; elseif($locale == 'en_US') : echo '英語です'; else : echo 'その他'; endif; |
多言語に対応したリンクを取得
テーマ内では「get_option(‘home’)」などでホームのリンクを指定している方もいると思いますが、とりわけオリジナルテーマを作成している場合、固定ページのリンクは直に書き込みしていることが私は多いです。特にグローバルメニュー。英語の時はこのリンクで、日本語の時はこのリンクで、と条件分岐してもいいですが手間がかかりそうです。
そこで、「wp-content/plugins/bogo/includes/functions.php」の378行目あたりで定義されている「bogo_url()」が便利かもしれません。第一引数にURLがありますが、これを指定しないと現在のリクエストとなってしまうため、グローバルメニューで使う際はURLを指定しましょう。
1 2 3 4 5 |
<ul> <li><a href="<?php echo bogo_url('http://domain.com/about/'); ?>">ABOUT</a></li> <li><a href="<?php echo bogo_url(get_option('home').'/service/'); ?>">SERVICE</a></li> <li><a href="<?php echo bogo_url(get_option('home').'/category/news/'); ?>">NEWS</a></li> </ul> |
オリジナルの多言語ボタンをテーマに挿入
国旗はいらないとか、独自のクラスを付けたいとか、HTMLタグを変えたいとか、ヘッダーやフッターなどテーマに挿入する場合色々とやりたいことが出てくると思います。ここではプラグインの関数を参考に、オリジナルの多言語化ボタンを作成してしまいましょう。ちなみに国旗はCSSの背景指定なので関数を作成しなくても該当のCSSを探し出して変更すれば大丈夫です。
※この項目はバージョンによって異なる可能性があるので注意が必要です。
- 1)参考PHPをコピー
- ボタンを取得する関数はbogo_language_switcher()です。「wp-content/plugins/bogo/includes/link-template.php」の191行目~249行目で定義づけられていました。
function bogo_language_switcher(){…}をコピーします。 - 2)テーマ内の「functions.php」に貼り付け、関数の名前を変更します。
- 「my_bogo_language_switcher()」などのように関数の名前を変更しましょう。
- 3)HTMLの吐出し部分を編集
- PHPにあまり詳しくない方でも、HTMLタグがどのような形で挿入されているか分かると思います。これを編集することで文字を消したり国旗を消した利が可能です。
BOGOで投稿IDから言語を取得する
オリジナルのプログラムを組んだりしていて投稿を扱っていると、取得した投稿がどの言語なのかを判別したいときがあります。BOGOでは投稿の言語を、'_locale'
をキーとしたメタ情報を保存しています。そのため、get_post_meta()
を利用して言語キーを取得できるというわけです。
1 |
$locale = get_post_meta( $post_id, '_locale', true ); |
[…] ないってことはありませんか。 避けるための注意点と、これを試してみると直るかも、という記事になります。Bogoの設定方法や便利な関数などについてはこちらの記事に書いています。 […]