WPML

AtahualpaのスクリーンショットWPMLを使用して多言語WordPressサイトを構築するために、Bytes For AllAtahualpaを使用する方法を紹介します。

多言語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() ?>
atahualpa_drop_down_language_selector
ドロップダウン言語セレクター

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

<?php wpml_languages_list() ?>
フッターの水平言語セレクター
フッターの水平言語セレクター

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

<?php if(is_singular()) wpml_content_languages(); ?>
翻訳言語のリスト
翻訳言語のリスト

訪問者が「ホーム」をクリックしたとき、言語を切り替えることなくホームページに移動することを期待します。各言語には異なる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.phpbfa_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.phpwpml_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テーマの多言語化


すでにiNoveArrasで同様の作業を行っており、さらに多くのテーマを多言語化する予定です。

私たちの目的は、すぐに使用できる多言語テーマを提供し、独自の多言語対応テーマの構築を支援することです。ここで説明したテクニックを使用すると、WPMLが利用可能な場合は多言語で実行され、WPMLがない場合は単一言語で実行されるテーマを構築できます。

テーマを構築中で多言語化に関するサポートが必要な場合は、お気軽にフォーラムで新しいスレッドを作成してください。

また、テーマに多言語サポートを追加することで、収入(真の不労所得)を得ることもできます。次の投稿では、テーマにアフィリエイトIDを含める方法について説明します。

この記事が役に立ちましたか?この記事を共有: