Я работаю над многоязычным проектом с Zend Framework (немецкий и английский), где у меня есть небольшая форма для заказа продукта. Пользователь должен иметь возможность:Лучшая практика обработки локалей с помощью валют и языковых переключателей
- Изменить его Предпочтительнее валютой цены продукта
- Изменить его Предпочтительнее язык для всего сайта
На данный момент я использую Zend_Locale :: findLocale() в получить локаль пользователя. С настройками моего браузера я получаю «de_CH», и это хорошо работает. Но есть некоторые проблемы, как только:
- Пользователь настроил свой браузер, чтобы просто дать мне код языка («де» вместо «de_CH»)
- Пользователь предпочитает язык, который не поддерживается мой сайт
- пользователь из страны, где они получили валюту, которая не поддерживается моей продукции форма заказа
Просто код языка код языка достаточно для обработки Zend_Translate, б ut Zend_Currency нуждается в дополнительной информации. Я думаю, что нет никакого решения, чтобы получить полный язык с кодом страны от каждого возможного пользователя. Мой вопрос: как вы справляетесь с этими ситуациями? Вы проверяете файл _initLocale(), если код страны отсутствует и используете код страны по умолчанию? Существуют ли для этого методы Zend Framework?
неподдерживаемый язык Если пользователи язык является «FR», я хотел бы использовать язык по умолчанию, потому что наш сайт не поддерживает французский. Есть ли лучшая возможность, чем добавить белый список в бутстрап? Например, метод из Zend_Translate?
Неподдерживаемая валюта Что делать, если язык пользователя поддерживается, но не его валюта? Должен ли я изменить языковой стандарт в начальной загрузке или мне нужно сделать копию локали и изменить ее для Zend_Currency?
Основная проблема Я думаю, что моя главная проблема заключается в том, что я не уверен, как справляться со всеми этими различными языковыми проблемами. Мой предпочтительный подход состоял в том, чтобы проверить локаль, установленную в _initLocale() bootstrap, поэтому я могу быть уверен, что могу поддерживать ее язык и валюту.
Благодарим вас за советы.
С наилучшими пожеланиями, Нико
Редактирование 1 я сделал себе еще несколько мыслей о способах обработки этих вопросов. Что вы думаете об этом подходе?
Zend_Locale()
: фильтровать все короткие локали (без кода страны) и использует белый список с языками ваши поддерживает приложения (только код языка). Если соответствия нет, используйте значение по умолчанию, указанное вашим приложением.Zend_Translate
: начните с кода языка из локали.Но если пользователь изменит предпочтительный язык, оставьте локаль такой, какой она есть (возможно, нет соответствующего языкового стандарта на основе нового кода языка и старого кода страны) и просто измените код языка вZend_Translate
.Zend_Currency
: Используйте язык по умолчанию. Если пользователь изменяет предпочтительную валюту, просто измените валюту, а не локаль. Таким образом, форматирование останется на основе старого языка, потому что изменение валюты не означает, что пользователь также хочет изменить свой язык.
Будет ли этот подход приемлемым? Существует проблема с шагом 1, если браузеры локали установлены таким образом:
- де
- en_US
Возможно, приложение не поддерживает немецкий, а потому, что это короткая локали, приложение вместо этого будет использовать en_US. Но я не знаю, какое решение устранит эту проблему, потому что я не могу «обновить» локальную локаль до полного языкового стандарта.
Я не уверен, если это поможет, но как пользователь Ненавижу приложения и веб-сайты, которые пытаются выяснить, мой язык для меня. Я думаю, что всегда лучше иметь кнопку языка или выпадающий список на вашем сайте. Преимущество для вас - это не беспокоиться о обнаружении сочетаний странных языков. – Matt
+1 на предложение Мэтта. Я озадачен тем, почему вы хотите поддерживать каждый язык и валюту. Вероятно, вы переведете свой сайт максимум на 5-10 языков. Поэтому попытка «обнаружить» локаль и делать любую магию необходима, чтобы найти правильный язык, может быть ненужным. Как насчет людей, посещающих Амстердам, которые предпочитают английский или французский, но ваш сайт обнаруживает, что они, скорее всего, поймут голландский? Я голосую за выбор языка/валюты. ПОЦЕЛУЙ. –
ОК, но чтобы иметь возможность генерировать полный язык, пользователь также должен выбрать свою страну. Или иначе я вывел выбранную валюту неправильно (12 000 евро - вместо 12 000 евро, например). Но да, возможно, К.И.С.С. здесь находится справа ;-). Благодарим за ваше предложение. – Nico