Я работаю над многоязычным проектом с Zend Framework (немецкий и английский), где у меня есть небольшая форма для заказа продукта. Пользователь должен иметь возможность:
- Измените предпочитаемую валюту для цены продукта
- Измените свой предпочтительный язык для всего веб-сайта.
В настоящий момент я использую Zend_Locale:: findLocale() для получения локали пользователя. С настройками моего браузера я получаю "de_CH", и это хорошо работает. Но есть некоторые проблемы, как только:
- Пользователь настроил свой браузер, чтобы просто дать мне код языка ('de' вместо 'de_CH')
- Пользователь предпочитает язык, который не поддерживается моим сайтом.
- Пользователь из страны, где они получили валюту, которая не поддерживается формой заказа на продукт
Только код языка Код языка достаточно для обработки Zend_Translate, но Zend_Currency нуждается в дополнительной информации. Я думаю, что нет никакого решения, чтобы получить полный язык с кодом страны от каждого возможного пользователя. Мой вопрос: как вы справляетесь с этими ситуациями? Вы проверяете свой bootstrap _initLocale(), если код страны отсутствует и используется код страны по умолчанию? Существуют ли методы Zend Framework для этого?
Неподдерживаемый язык Если язык пользователя "fr", я хотел бы использовать язык по умолчанию, потому что наш сайт не поддерживает французский. Есть ли лучшая возможность, чем добавить белый список в бутстрап? Например, метод из Zend_Translate?
Неподдерживаемая валюта Что делать, если язык пользователя поддерживается, но не его валюта? Должен ли я изменить языковой стандарт в bootstrap или мне нужно сделать копию локали и изменить ее для Zend_Currency?
Основная проблема Я думаю, что моя главная проблема заключается в том, что я не уверен, как справляться со всеми этими различными языковыми проблемами. Мой предпочтительный подход состоял бы в том, чтобы проверить набор локалей в bootstrap _initLocale(), поэтому я могу быть уверен, что могу поддерживать его язык и валюту.
Спасибо за ваши советы.
С уважением, Нико
Редактирование 1 Я задумался над тем, как справиться с этими проблемами. Что вы думаете об этом подходе?
-
Zend_Locale()
: отфильтровать все короткие локали (без кода страны) и использовать белый список с языками, поддерживаемыми вашим приложением (только код языка). Если нет соответствия, используйте значение по умолчанию, указанное вашим приложением. -
Zend_Translate
: начните с кода языка из локали. Но если пользователь изменит предпочтительный язык, оставьте локаль такой, какой она есть (возможно, нет соответствующего языкового стандарта на основе нового языкового кода и старого кода страны) и просто измените код языка вZend_Translate
. -
Zend_Currency
: Используйте язык по умолчанию. Если пользователь изменяет предпочтительную валюту, просто измените валюту, а не локаль. Таким образом, форматирование останется на основе старого языка, потому что изменение валюты не означает, что пользователь также хочет изменить свой язык.
Будет ли этот подход приемлемым? Проблема с шагом 1, если локали браузера установлены следующим образом:
- де
- en_US
Возможно, приложение поддерживает немецкий язык, но поскольку это короткий язык, приложение будет использовать en_US. Но я не знаю, какое решение устранит эту проблему, потому что я не могу "обновить" короткий язык до полного языкового стандарта.