Лучшая практика для работы с языками с переключением валют и языков - PullRequest
10 голосов
/ 30 декабря 2010

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

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

В данный момент я использую Zend_Locale :: findLocale () для получения локали пользователя. С настройками браузера я получаю 'de_CH', ​​и это хорошо работает. Но есть некоторые проблемы, как только:

  • Пользователь настроил свой браузер так, чтобы он просто давал мне код языка ('de' вместо '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, если локаль браузера установлена ​​следующим образом:

  • де
  • en_US

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

Ответы [ 3 ]

1 голос
/ 15 марта 2011

Выделенная вами проблема встречается часто, и я полагаю, что для настройки локали для вашего пользователя потребуется небольшой объем работы.

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)
0 голосов
/ 05 марта 2011

В моем случае я хотел бы попросить пользователя выбрать свой язык и валюту при первом посещении моего сайта.в интерфейсе выбора языка я взял код языка из браузера пользователя в качестве ссылки на язык по умолчанию.а также я предоставляю кнопку быстрого переключения языка на моем сайте.

0 голосов
/ 29 января 2011

Вот статья о локализации, которую я написал, которая, как мне кажется, может оказаться полезной для ответа на некоторые ваши вопросы.

http://phpadvent.org/2010/localization-by-anthony-gentile

...