PHPスクリプトで多言語サイトの言語切り替えリンクを実装する


グローバル化が進む社会では、Webサイトを多言語対応していくこともあり、多言語サイトを制作していくと同時に、言語の切り替えに伴う言語切り替えリンクを必要とすることもあります。

人気のCMSのWordPressでも、PHPスクリプトが扱えればいろんなカスタマイズができます。
WordPressの多言語化プラグインについては、サブディレクトリで分割していくことになると思います。言語切り替えができる仕様になっていたりしますが、プラグインの数や別のプラグインとの関係もあり、運用や管理が大変になることもあります。

多言語化のプラグインを利用せずに、多言語対応のURL構造を「en.example.com」のようにgTLDを使用するサブドメインで言語ごとにサイトを作成して運用していくことが多いと思いますが、言語別でのWebサイトの切り替えのリンクはPHPスクリプトで実装することができます。

ここでは、PHPスクリプトでの言語切り替えリンクの実装についてご紹介していきます。

言語切り替えリンクの実装


サンプルとして、日本語と英語の2言語での切り替えリンクを作成してみます。
リンクを作成するにあたり、言語別のドメインやURLを管理するファイルを用意します。

ドメインやURLを管理するファイルの作成


各言語(日本語、英語)のドメインや、現在のページのURLを変数で管理するプログラムのファイルを用意します。
サンプルでは、site-info-le.phpとしておきます。

以下、サンプルコードになります。

site-info-le.php

<?php

//JP Domain
function jpDomainFunc(){
  $jpDomain = '';
  if(isset($_SERVER['HTTPS'])){
      $jpDomain .= 'https://';
  }else{
      $jpDomain .= 'http://';
  }
  $jpDomain .= 'example.com';
  return $jpDomain;
}
$siteJPDomain = jpDomainFunc();

//EN Domain
function enDomainFunc(){
  $enDomain = '';
  if(isset($_SERVER['HTTPS'])){
      $enDomain .= 'https://';
  }else{
      $enDomain .= 'http://';
  }
  $enDomain .= 'en.example.com';
  return $enDomain;
}
$siteENDomain = enDomainFunc();

//Now Page
$nowPage = $_SERVER['REQUEST_URI'];

?>



2つの各関数「jpDomainFunc」「enDomainFunc」で、日本または英語のURLを返すようにします。
サーバー変数の「$_SERVER[‘HTTPS’]」を条件としたif文では、「https」または「http」の通信プロトコルを判別して、その後に対象のドメインを連結代入演算子(.=)を使って、通信プロトコルとドメインの文字列を連結させて変数に代入します。
念の為、通信プロトコルを判別していますが、SSL(暗号化通信)によるセキュアな通信プロトコル(https)として運用しているのであれば、「jpDomainFunc」「enDomainFunc」の関数は必要ありません。
そのまま「siteJPDomain」や「siteENDomain」の変数に、通信プロトコルからドメインまで(https://example.com)の文字列を代入すればOKです。

そして、現在アクセスしているページとして、サーバー変数の「$_SERVER[‘REQUEST_URI’]」でドメイン以下のパスを取得して、変数「nowPage」に格納しておきます。
ドメイン以下のパスですので、例えばお問い合わせのページであれば「/contact」のような値が返ってきます。

これで、言語別のドメインや現在アクセスしているページのURL(ドメイン以下のパス)の管理できました。
あとは、変数の情報をリンクで利用していきます。
このファイルは言語切り替えのためだけでなく、いろんな用途で利用することができるでしょう。

言語切り替えリンクの作成


ドメインとURLの管理ができたところで、言語切り替えリンクを設置していきます。

おそらくPHPスクリプトを使って作成しているWebサイトでしたら、共通ファイルのheader.phpなどにグローバルメニュー等を記述しているでしょう。
まずは、先程用意した各言語のドメインや現在のページのURLを管理するファイルをinclude関数で読み込んでおきます。
その後に言語切り替えのリンクを作ります。

以下のように言語切り替えリンクを設置します。

header.php

<?php include("inc/site-info-le.php"); ?>

<span class="link-language">
  <a class="link-jp" href="<?php echo $siteJPDomain . $nowPage; ?>">JP</a>&nbsp;|&nbsp;<a class="link-en" href="<?php echo $siteENDomain . $nowPage; ?>">EN</a>
</span>



JPのaタグのhref属性には変数「siteJPDomain」と「nowPage」をドット(.)で連結して展開します。同じようにENのaタグのhref属性にも。
これで、現在アクセスしている言語のページから、別の言語の同じディレクトリのページに遷移できるリンクができます。

レイアウト等はCSSで、ご自身のデザインに調整してください。

まとめ


言語別のサイトのディレクトリ構造はほとんど同じだと思いますので、各言語のドメインと現在アクセスしているディレクトリの設定できれば、すべてのページで言語切り替えが可能になります。

もし言語別で異なるページが数ページある場合は、対象のディレクトリに対してif文の条件分岐で処理を変える必要はあるでしょう。