JavaScript

英語など他の言語と日本語の切り替えをページごとにURL指定せずにボタンひとつで行えるようにするJavaScriptでの実装(jQueryなし)

WordPressを用いての英語など多言語サイトの作り方をこちらの記事で紹介しました。その中で、他の言語(以下、例として英語とする)と日本語の切り替え方法を簡単にご紹介しましたが、ここではそのJavaScriptの解説をいたします。

前提とするディレクトリ構造

詳しくはこちらの記事を参照いただきたいのですが、英語サイトを設ける場合のディレクトリ構造として大きく3種類ある中で、以下のようにディレクトリで分ける場合を想定した内容になっています。ただ、応用することで、独自ドメインで分ける場合、サブドメインで分ける場合にも活用はできると思います。

トップページ

日本語サイト:https://www.example.com/

英語サイト:https://www.example.com/en/

トップページ以外

日本語サイト:https://www.example.com/about/

英語サイト:https://www.example.com/en/about/

JavaScript

const url = location.href;
const dir = url.split("/").filter( e => Boolean(e)); // URLを/で分割して配列に格納
const lastDir = dir.pop();  // 分割したURLの最後の部分を取り出し
const beforeDomain = 'http://ドメイン名/';
const afterDomain = url.replace( beforeDomain , '' );

// スイッチの見た目について、スイッチ押下前に変更が必要な場合の記述(不要なら消す)
if ( url.match(new RegExp('/en/')) ) {
   // 英語サイトでの見た目のための処理
} else {
   // 日本語サイトでの見た目のための処理
}

document.getElementById('lang-sw').addEventListener('click', function() {

//ページ内にページ内リンクが設けられている場合を考慮して、URLに#から始まる記述がある場合にその部分を削除
  if (url.match('#')) {
   url.substring(0, url.indexOf('#'));
  }

//スタイルの見た目について、スイッチ押下後、リンク先に飛ぶ前に変更が必要な場合の処理

// URLに「/en/」が含まれる場合に、「/en/」を取ることで日本語サイトを表示
  if ( url.match(new RegExp('/en/')) ){
    const url_ja = url.replace('/en/', '/');
    location.href = url_ja;

// URLに「/en/」が含まれない場合は日本語サイトのため、
//トップページと、そうでない場合で条件分岐してURLを英語サイトのものに変更
  } else {
    if ( url == beforeDomain ) {
      location.href = url + 'en/';
  } else {
      url = url.replace(lastDir + '/' , '')
      location.href = url + 'en/' + lastDir + '/';
    }
  }
}, false);

説明

大体コメントアウトの形で書いてしまいましたが、それに補足を加えると以下の通りです。

1行目:表示されているURLを取得
2行目:ドメイン名までの部分を変数に格納します。ドメイン名と書いているのは、例として示すとwww.example.comなどです。
3行目:ドメイン名までの部分を消すことで、ドメイン名以降の部分を取得します。例えば「https://www.example.com/about/」のページであれば、about/という文字列が取得されることとなります。
6~10行目:ここで見た目の変更が必要な場合、と書いているのは、例えば上記のHTMLの例では「言語切替」の文言を「英語に切替」「日本語に切替」と日本語と英語で変える場合は元々そうしておけば良いのですが、スタイルを変えたい場合に、ここでJavaScriptで変える方法があります。
15~17行目:ページ内リンクがあって、そのリンクが押された後の状態の場合、URLの末尾が#indexのようになるので、変数からその部分を消しています。
19行目:あまりないと思いますが、スイッチが押された後、言語が切り替わる前にアニメーションなどを見せたい場合はここでその処理を書きます。
22~24行目:URLに/en/が含まれるかどうかで現在のページの言語を判断し、英語の場合は/en/を取ることで日本語ページに遷移させます。
29~30行目:日本語ページの場合、トップページとそれ以外で条件分岐をしています。
31~34行目:トップページ以外の場合、ドメインの後に/en/がくるので、定義した変数beforeDomainafterDomainを利用して、そうなるようにしています。

まとめ

英語など、日本語以外の言語ページを設ける場合に、JavaScriptを使って言語スイッチボタンを設ける方法についてご説明しました。WordPressにはプラグインもあるようですが、相当重くなってしまった状態のサイトを見たことがあります。このように、プラグインなしでも簡単に実装できる場合が多いと思うので、極力プラグインは使わないようにしましょう。
サイトを軽く、SEOに考慮して、良いデザインにしたい方、ぜひお気軽に当方にお問い合わせください。

著者のイメージ画像

株式会社BringFlower
稲田 高洋(Takahiro Inada)

2003年から大手総合電機メーカーでUXデザインプロセスの研究、実践。UXデザイン専門家の育成プログラム開発。SEOにおいても重要なW3Cが定めるWeb標準仕様策定にウェブアクセシビリティの専門家として関わる。2010~2018年に人間中心設計専門家を保有、数年間ウェブアクセシビリティ基盤委員も務める。その後、不動産会社向けにSaaSを提供する企業の事業開発部で複数サービスを企画、ローンチ。CMSを提供し1000以上のサイトを分析。顧客サポート、サイト運営にも関わる。
2022年3月に独立後、2024年4月に株式会社BringFlowerを設立。SEOコンサルを活動の軸に据えつつ、AIライティングツールの開発と運営を自ら行う。グッドデザイン賞4件、ドイツユニバーサルデザイン賞2件、米国IDEA賞1件の受賞歴あり。