2013-04-26 5 views
2

Я разрабатываю веб-приложение, поддерживающее несколько языков, и я спрашивал себя, какой должен быть лучший уровень (если я могу назвать его так), чтобы проверить язык браузера.Язык браузера от PHP или от Javascript?

Должен ли я проверить его на PHP с помощью $_SERVER["HTTP_ACCEPT_LANGUAGE"] или будет лучше, если я проверить его в Javascript с помощью navigator.language?

Какой и почему, штабелеры?

+0

бы вы ни выбрали, я бы просто сделать его язык по умолчанию, я всегда позволяет пользователю изменить язык после того, как факт. – Pitchinnate

+0

Конечно, я делаю это, но мне просто нужно установить язык, чтобы начать просмотр страницы, и я подумал, что это будет очень близко, если я выберу его из браузера пользователя. –

ответ

2

Фактически они оба фиксируют язык, установленный в браузере. Основное отличие состоит в том, что $_SERVER поддерживает несколько языков в порядке предпочтения, тогда как navigator.language сможет только выбрать первый язык, который предпочитает браузер.

Еще одно отличие заключается в том, что один захвачен на стороне клиента с использованием JavaScript, а другой на стороне сервера с использованием HTTP-заголовков. Справедливости ради следует сказать (хотя заголовки могут быть подделаны), что захват значения на стороне сервера является более стабильным.

Скажите в Firefox, используя tools->options->content->language. Если установить язык сказать Chinese

Тогда, когда я делаю запрос и изучить заголовки HTTP он будет говорить:

Accept-Language: zh,en-us;q=0.7,en;q=0.3 // ж это два письма китайское представление

$_SERVER["HTTP_ACCEPT_LANGUAGE"] и даст мне zh,en-us;q=0.7,en;q=0.3

navigator.language даст мне только zh

Таким образом, в заголовке вы можете увидеть, что вы можете поддержать несколько вариантов языка в порядке. Поэтому, если по какой-то причине китайский не может быть отображен, вы можете проверить второй предпочтительный язык.

Если вы используете navigator.language вы не можете сделать это ..

+0

Я сделал это, прежде чем отправил свой ответ :) У меня установлена ​​английская английская установка. И без каких-либо изменений 'alert (navigator.language)' будет показывать 'en'. Теперь, если я задал «Chinese» в качестве своего языка в браузере, используя описанные мной шаги и переместил их в верхнюю часть языкового порядка, тогда «alert (navigator.language)» покажет «zh». Вы можете попробовать это тоже, так как очевидно, что вы мне тоже не верите :) – raidenace

+0

Я только что удалил свои неловкие комментарии. Я был введен в заблуждение [MDN] (https://developer.mozilla.org/en-US/docs/DOM/window.navigator.language) и плохое тестирование на моей стороне. Мои извинения! (Чтобы уточнить: * Начиная с Gecko 5.0 (Firefox 5.0/Thunderbird 5.0/SeaMonkey 2.2), это свойство основано на значении HTTP-заголовка Accept-Language. *) –

2

Вы должны использовать $_SERVER["HTTP_ACCEPT_LANGUAGE"]. Обратите внимание, что это взвешенный список предпочтительных языков, и вы должны использовать его соответствующим образом (т. Е. Не просто удалить первый язык из списка)

navigator.language не сообщает вам, какой язык является предпочтительным в браузере , но сам язык самого приложения браузера.

Редактировать: из быстрого тестирования navigator.language возвращает предпочтительный язык в Firefox, язык браузера в Opera и Chrome и ничего в IE.

+0

О 'navigator.language', видимо, это не так. В большинстве современных браузеров он принимает значение из HTTP-заголовка Accept-Language. Он может возвращать 'fr', даже если ваш браузер находится на английском языке. –

+0

@ Álvaro G. Vicario: Какие самые современные браузеры вы имеете в виду? На самом деле, похоже, в большинстве браузеров по-разному работает (язык пользователя в FF, язык браузера в Chrome и Opera, ничего в IE) ...Но в любом случае важно здесь, что 'HTTP_ACCEPT_LANGUAGE' является * списком * предпочтительных языков, а' navigator.language' в лучшем случае возвращает только один из них. –

+1

[Статья MDN] (https://developer.mozilla.org/en-US/docs/DOM/window.navigator.language) рассказывает о Chrome 0.3.154+ и Firefox 5.0+; IE не поддерживает его, и нет подробностей о точном поведении в Opera и Safari. Разумеется, правильный анализ 'HTTP_ACCEPT_LANGUAGE' - это правильный путь, как вы уже указываете. –

Смежные вопросы