Браузер обычно отправляет HTTP-заголовок с именем Accept-Language, который указывает, какие языки пользователь хочет получить.
Например, этот заголовок может быть:
Accept-Language: en-us,en;q=0.5
В нем есть понятие приоритета, кстати; -)
В PHP вы можете получить это в $_SERVER
super global:
var_dump($_SERVER['HTTP_ACCEPT_LANGUAGE']);
достанет мне:
string 'en-us,en;q=0.5' (length=14)
Теперь вы должны разобрать это; -)
Если я отредактирую свои настройки в настройках браузера, чтобы сказать: «Я хочу французский, и если вы не можете служить мне по-французски, достаньте мне английский из США; а если вы не можете получить и меня, то просто получите меня». английский), заголовок будет:
Accept-Language: fr-fr,en-us;q=0.7,en;q=0.3
А из PHP:
string 'fr-fr,en-us;q=0.7,en;q=0.3' (length=26)
Для получения дополнительной информации вы можете взглянуть на раздел 14.4 HTTP RFC .
И вы, вероятно, можете найти множество примеров кода в PHP для анализа этого заголовка; например: Parse Accept-Language для определения языка пользователя
Веселись!