2020/04/27 10:38
COOKIEより簡単な「SESSION」を多言語切替で使ってみたお話
担当したWEBサイトの案件で多言語対応が必須だったもので、「COOKIEで実装してみようかな」と思って意気込んでたんですが、今回あえてSESSIONを使って実装してみました。
例えば「一度Englishを選択したらページ遷移してもEnglishという情報を保ったまま」というやつです。
その方法をご紹介いたします。
今回やりたかった事
多言語で必要だったのはenglish、china、korea、の3ヵ国語。
デフォは「cn」つまり中国語が表示されるようにしたいという事。
で、各ページは「〇〇_en.php」とか「〇〇_cn.php」とかで別ページを作るなんて事にはせず、1ページ内でif文を書いて表示する文章箇所を分岐させる方法を採用。
掲載内容も少なかった為、無駄にファイルが増えるのが嫌だったので。
さらに一度言語選択をすればCOOKIEが利いてる間はページ遷移してもずっとその言語の文章が反映されるようにしたい。
という訳で実装開始です。
大まかな手順
WordPressを使う場合の手順となります。
・functions.phpに追記
・言語選択ボタンの実装
・分岐の記述を書く
大きく分けて3ステップです。
では細かく解説していきます。
「SESSION」使用して分岐させる方法
ちなみにCOOKIEはブラウザ側での処理ですが、SESSIONはサーバー側にもデータを送るものとなります。(間違ってたらすいません)
どちらも出来る事は似てて、ユーザー毎に生成されたIDで判別…みたいなものです。
ちなみに今回の作成例はWP(Wordpress)を使用しますのでfunctions.phpファイル内に下記を記述します。
①functions.phpに追記
まずはファンクションに宣言。
WPの場合はファンクションに宣言を記述する必要があるようです。
「functions.php」
function init_session_start(){
// セッション設定
if(!session_id()) {
// 初訪問の場合
session_start(); //これがSESSIONを使う為に必要なスタート宣言らしい
// デフォで2番(china)を選択してホームへ
if($_SESSION['session_lang'] == '') {
$_SESSION['session_lang'] = 2;
// リロードでHOMEへ飛ばす
header('location: ' . home_url(''));
}
}
}
add_action('init', 'init_session_start');
上記例はデフォでページを開いた時に2番(china)になるように宣言時に一緒に記述を書いてある感じです。
②言語選択ボタンの実装
次に「言語選択ボタン」を作る
それぞれフォームにして、「英語なら1を」「中国語なら2を」…という風に変数に代入させます。
さらにボタンが押された時に変数を入れるPHPの記述もヘッダーとかに書いておけば、どのページで多言語ボタンを押されても対応できます。
「header.php」とか「footer.php」とか
<?php
// 多言語ボタンの取得があった場合の処理
if($_POST['lang_val']) {
// 取得したセッションの値を入れる(つまり1とか2とか3とかが入る)
$_SESSION['session_lang'] = $_POST['lang_val'];
// 変更がある度にリロードさせる
//リロード先はどのページで押されたかによって変えないと飛び先がおかしかったので分岐させてます↓
if(is_home()) { //HOMEでボタンが押された場合のリロード先
$url = $_SERVER['PHP_SELF'];
}
if(is_single()) { //シングルページでボタンが押された場合のリロード先
$url = get_permalink();
}
header('location: ' . $url);
}
?>
<form id="english" method="post" class="" action="">
<input type="hidden" name="lang_val" value="1">
<button type="submit">EN</button>
</form>
<form id="china" method="post" class="" action="">
<input type="hidden" name="lang_val" value="2">
<button type="submit">CN</button>
</form>
<form id="korea" method="post" class="" action="">
<input type="hidden" name="lang_val" value="3">
<button type="submit">KR</button>
</form>
③分岐の記述を書く
後は単純にPHPのif文を使って分岐
「index等のPHPページ」
<?php if($_SESSION['session_lang'] == 1):?>
<!-- 1ならen -->
ここにEnglish用(英語)の文章
<?php elseif($_SESSION['session_lang'] == 2):?>
<!-- 2ならcn -->
ここに簡体字用(中国語)の文章
<?php elseif($_SESSION['session_lang'] == 3):?>
<!-- 3ならkr -->
ここにハングル用(韓国語)の文章
<?php endif;?>
まとめ
・functions.phpに追記
・言語選択ボタンの実装
・分岐の記述を書く
WPを使う場合の3ステップです。
ざっくりとこんな感じで新しい形の多言語対応をやってみました。
今回のように簡単なLPみたいなページだったらこういうやり方も楽に実装できるんじゃないかと思います。
ページ数も言語の数だけ分ける必要もなく作成できたので、ファイル的にも分かりやすいものができました。
恐らくですがブラウザ自体を閉じるまでがSESSION有効期限らしいので、タブだけ閉じても再度開けば最後に見てた言語のままページが閲覧できます。
一度言語を選択すれば自動でずっとその言語のものを表示させる事ができるので、他の用途でもいろいろ使えそうですね。
COOKIEと同様に便利に使える「SESSION」でした。
現場から以上です!
2650