PHPから言語・ロケールコードを取得する一番簡単な方法

PHPでアクセス元の言語とかローケールコードの調べ方

これには HTTP_ACCEPT_LANGUAGE を参照するのが一番簡単

ただ少し調べ方がめんどうくさかったので、
PHPで言語・ロケールコードの取得方法を改めてまとめてみました

特に多言語対応のWebサービスを作るときは必須です。

まず HTTP_ACCEPT_LANGUAGE の中身について

初めに HTTP_ACCEPT_LANGUAGE  がどういう内容を持つかについて

これは $_SERVER  で取得できるサーバー変数の一種で、アクセス元の言語・ロケールコード・優先度とかを調べるためのものです。

以下 HTTP_ACCEPT_LANGUAGE  の説明

'HTTP_ACCEPT_LANGUAGE'
Contents of the Accept-Language: header from the current request, if there is one. Example: 'en'.

引用元 : https://www.php.net/manual/en/reserved.variables.server.php

どうやらヘッダーの Accept-Lamnguage  の内容が返される模様

 

気になったので、自分の環境だとどうなってるか調べてみました。

▼ こういうコードを書けば確認できる

▼ 自分の環境だとこういう結果だった

見てわかるように、コンマ( ,  )で各ロケールが分けられてます。
例えば ja  とか en-US  とか en  とか、、、

あと言語の後についてる q=0.9  とかは優先度を表すためのもの(1が最優先)
優先度が 1 の場合は q=1.0  の部分は省略される模様

上の例だと ja > en-US > en みたいな優先度になってるみたいです。

このように HTTP_ACCEPT_LANGUAGE  から言語とかロケールが調べることが可能

言語とロケールを取得する方法&コード例

ただし HTTP_ACCEPT_LANGUAGE  は少し不便なとこがあります。

それがロケールコードが全て文字列で返ってくること

1つ1つの言語とかロケールを調べるには少し工夫が必要です。

ということで、その取得方法についていくつかコード例を紹介します。

1.ブラウザの最優先言語を調べる

まずはブラウザで優先的に調べる言語を調べる方法について

それには次みたいなコードを書けばOKです。

▼ このコードの実行結果(自分の環境)

さっき書いたみたいに、最優先言語の場合 q=1.0  はつきません。

なので explode( ',', $http_langs )  で分割し、0番目を単純に参照するだけでいいです。

2.ブラウザで使用可能な言語一覧を取得する

次はブラウザにインストールされてる言語一覧の調べ方について

これは少しだけ工夫が必要になります。具体的なコード例は次の通り

▼ 言語一覧をすべて表示するコード例

▼ このコードの表示結果(自分の環境)

ちゃんと優先度順でロケール配列が取得できました。

何に使えるか分からないけど、何かに役立ちそうです。

補足1.PHP で作ったサービスを多言語するには

ここまでが言語・ロケールコードを取得する方法

この言語・ロケールの取得は次みたいな場面で役立ちます。

  • 言語ごとに表示内容を変えたいとき
  • 特定地域でページを表示したくないとき
  • PHP+gettextで多言語化したいとき

 

特によく使う場面は gettext で多言語化したいときですね。

ちなみに PHP + gettext によるWebサービスの多言語化のやり方 は次で解説した通り

▼ PHP + gettetx による多言語化完全マニュアル

もしグローバルなWebアプリとか作りたい人は、上記事を要チェック

少し注意しないといけないとこもあるけど、それほど難しくもありません。

補足2.JavaScriptでの言語の取得方法

ちなみに JavaScript でも言語一覧は取得可能です。

▼ JavaScriptで使用可能言語を調べる方法

最優先言語は navigator.language  から、
ブラウザで使用可能な言語は navigator.languages  から取得可能

こっちは専用オブジェクトがあるので、取得するのは簡単です。

ここまでのまとめ

重要なポイントだけ箇条書き

  • HTTP_ACCEPT_LANGUAGEで調べられる
    サーバー変数の一種で ja,en-US;q=0.9,en;q=0.8  みたいな内容が入っている。左から順に優先度が高く、 q=0.9  のように優先度が割り振られる( 1 が最優先&省略
  • 使用可能な言語一覧の取得方法
    すべて文字列で返されるので、 q=0.5  とか ,  とかを除いて配列化すればOK

以上、PHPで言語とかロケールを調べる方法でした。(^^)/~~~バイバイ

PHP

Commentsこの記事についたコメント

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA


このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください