WPMLを使用して多言語WordPressサイトを構築するために、Bytes For AllのAtahualpaを使用する方法を紹介します。
多言語WordPressサイトのテーマは、すべての文字列をgettext呼び出しでラップする必要がありますが、それだけでは十分ではありません。テーマでgettextを使用すると、元々構築された言語とは異なる(単一の)言語で表示できるようになります。
多言語で実行するには、テーマが訪問者に表示言語の選択を許可し、言語ごとに正しいコンテンツを配信する必要があります。
Atahualpaの多言語バージョン
結論から始めましょう。こちらが変更を加えたバージョンのAtahualpaを利用したデモサイトで、こちらがダウンロードして使用できる変更を加えたテーマです。
Atahualpaを多言語化するための変更点
1. テーマディレクトリへのwpml-integration.phpの追加
wpml-integration.phpは、WPMLのディレクトリ内のdocs/theme-integrationにあります。これには、テーマを多言語化するのに役立つ一連の関数が含まれています。
これらの関数はすべて、WPMLが有効な場合はそれを使用し、存在しない場合は無視するように設計されています。つまり、WPMLが利用可能な場合はテーマが多言語で実行され、そうでない場合は通常通り(単一言語で)実行されます。
functions.phpへの追加:
include dirname(__FILE__) . '/wpml-integration.php';
このステートメントはwpml-integration.phpを読み込み、テーマ内のすべてのファイルで利用できるようにします。
2. 言語セレクターの追加
言語セレクターを使用すると、訪問者はサイトの表示言語を選択できるようになります。多くの場合、複数の種類の言語セレクターを追加することをお勧めします。訪問者はサイトをすばやくスキャンし、自分の言語のコンテンツへの視覚的なヒントを探します。人によって見る場所が異なるため、ページのさまざまな部分に異なる種類の言語セレクターを追加することで、訪問者が自分の言語を見つけやすくなります。
header.phpに追加することで、WPMLのドロップダウン言語セレクターをサイドバーに追加しました:
<?php wpml_languages_selector() ?>

また、サイトのフッターに言語の水平リストを追加しました。多くのユーザーは、まず一番下までスクロールして何があるか(そしてページがどれくらい長いか)を確認するため、他の言語でページが利用可能であることを伝えるのに適した場所です。footer.phpに以下のコードを追加しました:
<?php wpml_languages_list() ?>

最後に、各投稿の最後に言語セレクターを追加しました。これにより、各投稿に他のどの言語で利用可能かを伝える文が追加されます。index.php(これにはWordPressの表示ループのカスタムバージョンが含まれています)に以下を追加しました:
<?php if(is_singular()) wpml_content_languages(); ?>

3. 各言語のホームに移動するホームページリンクの設定
訪問者が「ホーム」をクリックしたとき、言語を切り替えることなくホームページに移動することを期待します。各言語には異なるURLの「ホームページ」があるため、すべてに単一の値を使用することはできません。
通常、WordPressテーマは管理画面で設定された「ブログのURL」の値に基づいて「ホーム」ページのアドレスを計算します。WPMLは、表示言語に応じて正しいホームアドレスを計算する関数を作成しました。
get_option('home’)をwpml_get_home_url()に置き換えました。また、get_option('home’)関数は末尾のスラッシュ(/)なしでサイトのURLを返すため、テーマはこれを手動で追加します。WPMLの関数にはこのスラッシュが含まれています(これには長い背景があります)。
この変更を行うために、2つのファイルを編集する必要がありました。functions/bfa_get_options.phpを変更し、以下を:
$bfa_ata['get_option_home'] = get_option('home');次のように変更します:
$bfa_ata['get_option_home'] = wpml_get_home_url();
また、functions/bfa_header_config.phpを編集し、ホームページのリンクから末尾のスラッシュを削除しました:
'<a href="' . $bfa_ata['get_option_home'] . '">' . $bfa_ata['bloginfo_name'] . '</a>'
4. 非常に高度な設定 – ユーザーがテーマの管理画面で入力したテキストの翻訳
Atahualpaでは、管理画面から一部のテキストを制御できます。これは、PHPファイルを編集せずにサイトを管理できる素晴らしい機能です。WPMLの文字列翻訳メカニズムを使用すると、これらの文字列も翻訳できます。
これを行うには、どの文字列を翻訳する必要があるかをテーマがWPMLに伝え、翻訳が存在する場合はそれを表示する必要があります。
ユーザーがテーマの管理画面に移動し、テキストを更新して「保存」をクリックすると、functions/bfa_ata_add_admin.phpのbfa_ata_add_admin関数が実行されます。これに以下のセクションを追加しました(11行目から):
global $wpml_translatable_strings;
foreach($wpml_translatable_strings as $wpml_str ){
if(isset($_REQUEST['bfa_ata_'.$wpml_str]) && trim($_REQUEST['bfa_ata_'.$wpml_str])){
wpml_register_string('atahualpa theme', $wpml_str, stripslashes($_REQUEST['bfa_ata_'.$wpml_str]));
}
}これが何を行うかというと、グローバル変数$wpml_translatable_stringsで定義された文字列のリストを処理します。各文字列をWPMLの文字列翻訳リストに登録します。
最初の引数は文字列のコンテキストです。任意の名前を使用できますが、文字列を説明する名前を選択する必要があります。2番目の引数は文字列の名前です(翻訳されません)。最後の引数は文字列の値で、これが翻訳されます。
翻訳が存在する場合にそれを表示するため、functions/bfa_get_options.phpにwpml_t関数を追加しました(204行目から):
global $wpml_translatable_strings;
foreach($bfa_ata as $k=>$v){
if(in_array($k, $wpml_translatable_strings) || $__first){
$bfa_ata[$k] = wpml_t('atahualpa theme', $k, $v);
}
}このコードは、サイトが訪問者に表示されるときに実行されます。文字列のリストをループし、翻訳用に登録されているか(in_array)を確認し、登録されている場合は翻訳を取得します。wpml_t関数は、翻訳が存在する場合は現在の言語で翻訳された文字列を返し、翻訳がない場合は元の文字列をそのまま返します。
他のWordPressテーマの多言語化
すでにiNoveとArrasで同様の作業を行っており、さらに多くのテーマを多言語化する予定です。
私たちの目的は、すぐに使用できる多言語テーマを提供し、独自の多言語対応テーマの構築を支援することです。ここで説明したテクニックを使用すると、WPMLが利用可能な場合は多言語で実行され、WPMLがない場合は単一言語で実行されるテーマを構築できます。
テーマを構築中で多言語化に関するサポートが必要な場合は、お気軽にフォーラムで新しいスレッドを作成してください。
また、テーマに多言語サポートを追加することで、収入(真の不労所得)を得ることもできます。次の投稿では、テーマにアフィリエイトIDを含める方法について説明します。


