Подтвердить что ты не робот

Определить язык браузера в Zend Framework?

Я растворяю довольно большую библиотеку с различными вспомогательными функциями PHP, которые накопились с течением времени. Я ищу замену на основе Zend Framework для максимально возможного количества этих функций.

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

Есть ли у ZF функция для этого?

Я понимаю, что Zend_Translate способен каким-то образом обнаруживать язык браузера, но я не вижу общедоступной функции для фактического получения языковой строки.

4b9b3361

Ответ 1

здесь вы идете:

$locale = new Zend_Locale();

// if locale is 'de_AT' then 'de' will be returned as language
print $locale->getLanguage();

// if locale is 'de_AT' then 'AT' will be returned as region
print $locale->getRegion();

Ответ 2

Zend_Locale должен быть в состоянии помочь, об этом.

См. примеры и пояснения на странице Использование Zend_Locale (цитирование):

В большинстве ситуаций new Zend_Locale() будет автоматически выберите правильный язык, с предпочтение отдается информации предоставляемый веб-браузером пользователя.


И еще несколько деталей на этой странице (цитирование):

Алгоритм поиска, используемый Zend_Locale для автоматического выбора языка использует три источника информация:

1. const Zend_Locale::BROWSER - Пользовательский веб-сайт браузер предоставляет информацию каждому запрос, который публикуется PHP в глобальная переменная HTTP_ACCEPT_LANGUAGE. если нет совпадений локаль может быть найдена, тогда предпочтение дается ENVIRONMENT и, наконец, FRAMEWORK.

2. const Zend_Locale::ENVIRONMENT - PHP публикует локальный сервер хоста через внутренняя функция PHP setlocale(). Если нет соответствующего языкового стандарта можно найти, тогда предпочтение отдается до FRAMEWORK и, наконец, BROWSER.

3. const Zend_Locale::FRAMEWORK - Когда Zend Структура имеет стандартизированный способ задание компонентов по умолчанию (планируется, но еще не доступно), затем используя эту константу во время экземпляр отдаст предпочтение выбирая язык на основе этих по умолчанию. Если соответствующий языковой стандарт не может быть найдено, тогда предпочтение отдается ENVIRONMENT и, наконец, BROWSER.

(Совет: пойдите, прочитайте эту страницу - я не буду копировать-вставить все, что есть, чтобы прочитать ^^)


Изменить: И вот часть кода, которая иллюстрирует мой комментарий:

$locale = new Zend_Locale();
var_dump($locale->getLanguage());
var_dump($locale->getRegion());
die;

Дает мне:

string(2) "fr" 
bool(false) 

Ну, мой браузер спрашивает французский, не указав регион ^^

Ответ 4

Есть ли возможность заставить Zend_Locale() получить первый полный язык (код языка и региональный код, например 'en_US'), а не только код языка ('en')? Если нет, это проблема обработки валют, потому что им нужен полный языковой стандарт.

Как вы справляетесь с этой проблемой? Я пока не нашел приемлемого решения для этой проблемы, и для меня это похоже на задачу для Zend_Locale, например, в _prepareLocale($locale, $strict = false).