今回はpolylangというほんとにすばらしいプラグインを使ってWordPressで構築されたwebサイトを多言語化する手順を説明していきます。
新規webサイトの多言語化はもちろん、すでにあるwebサイトを多言語化することもできます。
ネイティブ翻訳のみで完結することもできますし、機械翻訳(Google翻訳)を併用しハイブリッド多言語サイトにすることも可能です。
これから説明することを自分で行う場合、費用は一切かかりません。(翻訳はきちんとした業者にお願いした方がよいので、この翻訳費用は別ですよ)
0. 事前準備
■翻訳言語と順序を決めよう
どの言語に翻訳するのか、あらかじめ決めましょう。あとのプラグインの設定がスムーズになります。
翻訳言語が複数あっても構いません。
2:英語
の2カ国語対応のサイトにしていく想定で書いていきたいと思います。
数字は順序を表しています。日本語を第1言語とし、サイトのデフォルト言語とします。
■翻訳対象を決めよう
全ページ翻訳するのか、固定ページのみ翻訳するのか、はたまた特定ページの特定の場所だけにするなどはあらかじめ決めておきましょう。
あとのプラグインの設定がスムーズになりますし、翻訳家にまわす原稿も明確になります。
ポイントとしては、
・頻繁に更新する新着情報などは翻訳対象からはずすか、Google翻訳にするなどの措置をとる(自分で翻訳できるよって方は関係ない)
・画像内の文字は翻訳するのか
画像内の文字は、例えば、3カ国語以上のサイト場合、日本語以外の言語の画像は英語のみにするという手もあります。(今回は2カ国想定なので関係ありません)
・日本語のページはすでに存在し、それを多言語化する。
・すべてネイティブ翻訳。
おまたせしました、それでは多言語化の説明に入っていきたいと思います。
1. 何はともあれpolylangインストール、有効化
タイトルどおり、polylangというプラグインを使用します。
このプラグインはカスタマイズ性に優れたとてもすばらしいプラグインです。
■設定
polylangプラグイン設定ページが日本語になってない場合は、ダッシュボード>更新で翻訳を更新すると日本語になります。
・言語
対象言語を追加していく。
言語を選択して、順序を決めていく。その他の入力は、デフォルトで入っているものでok。
ただし、英語や中国語でもさらに細分化されている言語は、言語コードを一意にしないといけないので、ロケールに従ってzh-cnというようにします。(命名規則は、ロケールを小文字にし、アンダーバーをハイフンに置き換える。このルールは守ってください。あとで、プログラムに使用するためです)
順序は、言語選択の表示順になります。
デフォルトの言語を決めて、設定します。ここでは、日本語をデフォルト言語とします。
以上の設定が済んだら、↓の画面のようなメッセージが画面上部に出ていると思います。
このリンク部分「これらすべてをデフォルトの言語に設定できます。」をクリックし、現在のすべての投稿を一括でデフォルト言語に関連付けます。
※これをやらない場合、記事ひとつひとつに設定していく必要があり大変ですので、やっておきましょう。(不安な方はやる前に、データベースのバックアップをしておきましょう)
・設定
(1)URL の修正(デフォルト)
言語はプリティーパーマリンク内のディレクトリ名から設定される が選択されている
URL にデフォルトの言語の言語情報を表示しない チェックが入っている
プリティーパーマリンクの /language/ を削除する が選択されている
(2)ブラウザーの言語の検出(デフォルト)
有効
(3)メディア(デフォルト)
有効
(4)カスタム投稿タイプとタクソノミー
翻訳対象のカスタム投稿タイプとタクソノミーにチェックを入れて、変更を保存をクリックする。
(5)同期
polylangでは、1記事に対して、言語数分の分身記事を作成し、それらを関連付けることによって言語切替を実現しています。
この設定でチェックしたものは、記事同士の情報が同期されます。
同期すると、たとえ言語数分の記事があっても情報を一元管理することができるというメリットがあります。
逆にカスタムフィールドなど、むしろ記事(言語)ごとの情報を入力したい部分は、同期しないように設定します。
設定する項目は以上です。WPMLもProプランも導入していないので、その他の設定は必要ありません。
・文字列翻訳
この設定は、翻訳したい文章や単語の管理を行うことができます。
インストール直後の段階では、あらかじめ登録予約(※)がされてあったものが登録されているはずです。
※ここでいう登録予約とは、polylangプラグインが有効になるときに自動で登録されるように設定されている単語。
polylangと親和性が高いプラグインが登録しているケースもあるようです。(wordpress-seoなど)
自分で登録したいときは、function.phpに
1 2 3 4 5 6 7 8 9 10 | // 翻訳文字列登録 if(function_exists("pll_register_string")) { $name = "myplugin"; $string = "現在、新着情報はありません。"; pll_register_string($name, $string); $string = "ただいま準備中です。"; pll_register_string($name, $string); $string = "ページが見つかりませんでした"; pll_register_string($name, $string); } |
などとしておけば、良いでしょう。
逆に、使いたいときは
1 | <?php pll_e("現在、新着情報はありません。"); ?> |
とすると、単語に対する訳語を出力することができます。
polylangの設定は以上です。
■言語切替ボタンの設置
サイドバーがあるサイトは、利用できるウィジェットに「言語スイッチャー」が追加されているので簡単に設置することができます。
任意の場所に設置したいときは、以下のコードを挿入する。
1 | pll_the_languages(array('dropdown'=>1,'echo'=>1)); |
このときの注意点として、ドロップダウン方式の言語スウィッチャーを複数挿入したいときは、引数の「’dropdown’=>1」の数字の部分を重複しない数字にしないと動きません。
たとえば、ヘッダーとフッターの2箇所に言語スウィッチャーを入れたい場合は以下のようにする。
ヘッダーは、’dropdown’=>1
フッターは、’dropdown’=>2
2. 固定ページ、投稿記事の作成
固定ページ
固定ページ一覧を見てみてください。
一覧の項目に、polylang設定で追加した言語の国旗とそれぞれの記事にチェックマークかプラスマークが付いていると思います。
チェックマークは、対応言語の記事が存在することを表しています。
逆に、プラスマークは記事が存在しない印です。このプラスマークをクリックすると対象言語を追加する画面に切り替わります。
※注意点
デフォルトテンプレート以外を使っている場合は、言語が違っても同じテンプレートを使用するようにしておく
投稿(新着情報)
記事の作成方法は固定ページと同じです。
※補足
今回の想定では、投稿記事もネイティブ翻訳としてますが更新頻度が高いコンテンツなので実際に運用することを想定すると、その都度翻訳にまわすようなことはなかなかできないと思いますので、Google翻訳を使用するのが現実的かもしれません。
3. グローバルナビゲーション
「外観」>「メニュー」でグローバルナビゲーションを管理している場合は、追加言語用のメニューを設定する必要があります。
メニュー編集画面に行くと、「メニューの位置」のところに言語に関連付けるチェックボックスができているので、作成したメニューと言語を関連付けます。
polylangインストール後に画面が真っ白になって何も表示されない場合は、このメニューを作成すると表示される可能性があります。
「未分類」カテゴリーの削除方法
polylangプラグインの設定で翻訳言語を追加すると、自動的に追加した言語の「未分類」カテゴリーが作成されます。
このときに作成された「未分類」カテゴリーは一覧から削除できないようになっていますが、一度プラグインを無効にすると削除できるようになります。
削除した後は、polylangプラグインを再度有効にするのを忘れないようにしてください。
コード
1 | <html <?php language_attributes(); ?>> |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | function pll_body_class($classes = '') { // 多言語サイトの対応(polylangプラグイン) // -enとかを抜いて、日本語と同じスラッグを付ける(css共有のため) if(function_exists('pll_current_language') && function_exists('pll_default_language')) { if(pll_current_language('slug')!=pll_default_language('slug')) { $classes[] = "translate-".pll_current_language('slug'); } } if (is_page()) { $page = get_post(get_the_ID()); $classes[] = 'page-' . $page->post_name; // 多言語サイトの対応(polylangプラグイン) // -enとかを抜いて、日本語と同じスラッグを付ける(css共有のため) if(function_exists('pll_current_language') && function_exists('pll_default_language')) { if(pll_current_language('slug')!=pll_default_language('slug')) { $classes[] = 'page-' . str_replace("-".pll_current_language('slug'), "", $page->post_name); } } } return $classes; } add_filter('body_class', 'pll_body_class'); |
さいごに
近年のインバウンドの増加、オリンピック日本開催にともない、現在多くの方がwebサイトの多言語化の必要性を感じていると思います。
でも、多言語化なんて技術的に難しいのでは?とか費用がかかるに違いない!とかで諦めている方がいるなら、この記事を読んでチャレンジしてみてもいいかもしれません。
もし、あなたのwebサイトがwordpressで作られていて、wordpressに少し触れたことがあるのであれば、なんとかなると思います。
注意点
polylangプラグインの仕様で、URLの設定がpolylangの初期設定を行ったサーバーのURLになるらしく、本番公開時などにちょっと困る。
ローカルで開発した場合、全てのURLおよび言語切替先のURLがlocalhostとなるため、本番公開時にlocalhostに飛ばされてしまうという不具合が発生する。
一見キャッシュ系のトラブルかと思うが、polylangが「wp_options」テーブルに「_transient_pll_languages_list」というカラムを作って、そこに登録しているURLを参照しているために起こる現象。
これの解決方法は、本番公開後にpolylangプラグインの設定>URLの修正にて、一度別の項目に変更して保存し、再度本来の戻せば書き換わるようだ。
自分の場合は、一度「言語はコンテンツから設定される」に変更して保存し、再度「言語はプリティーパーマリンク内のディレクトリ名から設定される」に戻せば本番のURLに書き換わった。
ネットで調べてもこれに関する情報が無いので、困っている人はいるかもしれない。