Выделенная вами проблема встречается часто, и я полагаю, что для настройки локали для вашего пользователя потребуется небольшой объем работы.
de to de_DE требует, чтобы вы знали, расположены ли они в Германии, но по умолчанию это может быть de_CH, который является вашим населением, если вы не знаете местонахождение пользователей.
* The user has configured his browser to just give me the language code ('de' instead of 'de_CH')
Сопоставьте этов вашем приложении.Ваше отображение может преобразовать это в de_DE для жителей Германии, которые говорят по-немецки.Или de_CH для жителей Швейцарии, которые говорят по-немецки.Или fr_CH для жителей Швейцарии, которые говорят по-французски и т. Д. Для носителей английского языка это будет en_CH или en_DE.Так что это решает 2 проблемы.
Язык и местоположение пользователя необходимы для точного определения локали для пользователя.
Если вы не знаете, где находится местоположение, вам следует по умолчанию использовать свой собственный язык по умолчанию иlocality.
Ссылка: Unicode - отображение локали и языка
* The user prefers a language which is not supported by my website
Если вы находитесь в Европе, у вас должен быть язык и валюта по умолчанию, поэтому выбор будетнезависимо от того, какой у вас язык и язык по умолчанию, если вы швейцарец, то de_CH имеет смысл
* The user is from a country where they got a currency which isn't supported by my product order form
В этом случае вам следует вернуться к значениям по умолчанию.
Zend имеет много примеров использования Locales в своей вики.Самым распространенным местом для настройки локальности в Zend является файл начальной загрузки.
Я использовал эту ссылку для ссылки на поддержку этого ответа в вики Zend Framework.Приведенный ниже код предоставляет небольшой пример того, как класс Zend_Locale генерирует исключения, если локаль недопустима.Вы можете проверить местоположение и язык на этом этапе и использовать его в сочетании с информацией, которую вы получаете из браузера, для точной настройки локали для пользователя.
Ссылка: Zend Locale Введение
// within the bootstrap file
try {
$locale = new Zend_Locale('auto');
} catch (Zend_Locale_Exception $e) {
$locale = new Zend_Locale('de');
}
// within your model/controller
$date = new Zend_Date($locale);
$currency = new Zend_Currency($locale)