Лучшая практика обработки локалей с помощью валют и языковых переключателей

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

  • Изменить предпочитаемую валюту для цен на продукты
  • Изменить предпочитаемый язык для всего веб-сайта

В настоящее время я использую Zend_Locale :: findLocale () для получения локали пользователя. В настройках моего браузера я получаю de_CH, и это хорошо работает. Код языка достаточен для обработки Zend_Translate, но Zend_Currency требуется дополнительная информация. Я думаю, что нет решения получить полную локаль с кодом страны от каждого возможного пользователя. Мой вопрос: как вы справляетесь с такими ситуациями? Вы проверяете _initLocale () своего начального файла, если код страны отсутствует, и используете ли код страны по умолчанию? Существуют ли какие-либо методы Zend Framework для этого?

Неподдерживаемый язык Если язык пользователя «fr», я хотел бы использовать язык по умолчанию, потому что наш веб-сайт не поддерживает французский. Есть ли лучшая возможность, чем добавить массив белого списка в бутстрапе? Например, метод из Zend_Translate?

Неподдерживаемая валюта Что делать, если поддерживается язык пользователя, но не его валюта? Следует ли мне изменить языковой стандарт в начальной загрузке или мне следует сделать копию языкового стандарта и изменить его на Zend_Currency?

Основная проблема Я думаю, что моя главная проблема в том, что я не знаю, как справиться со всеми этими разными проблемами локали. Я предпочитаю проверять языковой стандарт, установленный в _initLocale () начальной загрузки, поэтому я могу быть уверен, что могу поддерживать его язык и валюту.

Спасибо за ваши советы.

С уважением, Нико

Редакция 1 Я сделал себе еще несколько мыслей о способах решения этих проблем. Что вы думаете об этом подходе?

  1. Zend_Locale () : фильтрует все короткие локали (без кода страны) и использует белый список с языками, которые поддерживает ваше приложение (только код языка). Если совпадений нет, используйте значение по умолчанию, заданное вашим приложением.
  2. Zend_Translate : начните с кода языка из локали. Но если пользователь меняет предпочтительный язык, оставьте языковой стандарт как есть (возможно, нет подходящего языкового стандарта на основе нового кода языка и старого кода страны) и просто измените код языка в Zend_Translate .
  3. Zend_Currency : использовать локаль по умолчанию. Если пользователь меняет предпочтительную валюту, просто измените валюту, а не регион. Таким образом, форматирование останется на основе старого языкового стандарта, потому что изменение валюты не означает, что пользователь также хочет изменить свой языковой стандарт.

Будет ли этот подход приемлемым? На шаге 1 возникает проблема, если языковой стандарт обозревателя установлен следующим образом:

  • de
  • en_US

Возможно, приложение поддерживает немецкий язык, но поскольку это короткий языковой стандарт, приложение будет использовать вместо него en_US. Но я не знаю, какое решение решило бы эту проблему, потому что я не могу «обновить» короткий языковой стандарт до полного языкового стандарта.

10
задан Nico 17 January 2011 в 12:57
поделиться