Ответ 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();
Я растворяю довольно большую библиотеку с различными вспомогательными функциями PHP, которые накопились с течением времени. Я ищу замену на основе Zend Framework для максимально возможного количества этих функций.
Мой первый кандидат - это функция, которая возвращает пользователям наиболее предпочтительный язык браузера из огромного списка, который может быть http_accept_language
.
Есть ли у ZF функция для этого?
Я понимаю, что Zend_Translate способен каким-то образом обнаруживать язык браузера, но я не вижу общедоступной функции для фактического получения языковой строки.
здесь вы идете:
$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();
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 публикует локальный сервер хоста через внутренняя функция PHPsetlocale()
. Если нет соответствующего языкового стандарта можно найти, тогда предпочтение отдается до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)
Ну, мой браузер спрашивает французский, не указав регион ^^
Я поддержал оба ответа. В качестве альтернативы получению языка с Zend_Locale
рассмотрим
Есть ли возможность заставить Zend_Locale()
получить первый полный язык (код языка и региональный код, например 'en_US'), а не только код языка ('en')? Если нет, это проблема обработки валют, потому что им нужен полный языковой стандарт.
Как вы справляетесь с этой проблемой? Я пока не нашел приемлемого решения для этой проблемы, и для меня это похоже на задачу для Zend_Locale
, например, в _prepareLocale($locale, $strict = false)
.