0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

サブディレクトリ型の多言語サイトにおける言語切り替え時の遷移先URIの設定

Last updated at Posted at 2024-02-14

問題状況

 同一のドメインで日本語のサイトを運営しているが、サブディレクトリ型で複数の言語に対応したサイトを構築することになった。ヘッダーには言語切替のボタンを設置したが、これがクリックされた時に同じ内容のページに遷移させたい。

 例えば、日本語、英語(English: en)、フランス語(français: fr)、中国語(中文: zh)に対応したWebサイトのTOPは、それぞれ、

  • https://www.mysite.com/
  • https://www.mysite.com/en/
  • https://www.mysite.com/fr/
  • https://www.mysite.com/zh/

であり、それぞれの「ごあいさつ」や「会社情報」に相当するABOUT USのアドレスは、

  • https://www.mysite.com/aboutus/
  • https://www.mysite.com/en/aboutus/
  • https://www.mysite.com/fr/aboutus/
  • https://www.mysite.com/zh/aboutus/

である。

 今、英語版サイトのABOUT USを閲覧しており、フランス語に切り替えた。この時、一律にフランス語版サイトのTOPに遷移するのではなく、フランス語版サイトのABOUT USに遷移させたい。つまり、

ではなく、

という感じで遷移させたい。

解決方法

 遷移先のURIを作成するには……

  1. 現在閲覧しているWebページのURIを取得し、
  2. そこから「サブディレクトリ」の部分をいったん取り除き、
  3. 「プロトコルとドメイン」と「パス」に分解し、
  4. この2つの間に「サブディレクトリ」を挿入する。
example.php
// 1. 本来のURIを取得する
$uri = $_SERVER['REQUEST_URI'];

// 2-1. 多言語対応しているサイトのサブディレクトリを配列で設定する(#で囲むこと)
$patterns_to_remove = ["#/en#", "#/fr#", "#/zh#"];

// 2-2. URIから上記で設定したサブディレクトリを取り除く
$uri = preg_replace($patterns_to_remove, "", $uri);

// 3-1. プロトコルとドメインを抽出する
$protocol_domain = parse_url($uri, PHP_URL_SCHEME) . parse_url($uri, PHP_URL_HOST);

// 3-2. パスを抽出する
$path = parse_url($uri, PHP_URL_PATH);

// 4. サブディレクトリを挿入する
$target_uri_ja = $protocol_domain . $path;
$target_uri_en = $protocol_domain . '/en' . $path;
$target_uri_fr = $protocol_domain . '/fr' . $path;
$target_uri_fr = $protocol_domain . '/zh' . $path;
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?