2010-12-30 4 views
10

Я работаю над многоязычным проектом с 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 я сделал себе еще несколько мыслей о способах обработки этих вопросов. Что вы думаете об этом подходе?

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

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

  • де
  • en_US

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

+2

Я не уверен, если это поможет, но как пользователь Ненавижу приложения и веб-сайты, которые пытаются выяснить, мой язык для меня. Я думаю, что всегда лучше иметь кнопку языка или выпадающий список на вашем сайте. Преимущество для вас - это не беспокоиться о обнаружении сочетаний странных языков. – Matt

+0

+1 на предложение Мэтта. Я озадачен тем, почему вы хотите поддерживать каждый язык и валюту. Вероятно, вы переведете свой сайт максимум на 5-10 языков. Поэтому попытка «обнаружить» локаль и делать любую магию необходима, чтобы найти правильный язык, может быть ненужным. Как насчет людей, посещающих Амстердам, которые предпочитают английский или французский, но ваш сайт обнаруживает, что они, скорее всего, поймут голландский? Я голосую за выбор языка/валюты. ПОЦЕЛУЙ. –

+0

ОК, но чтобы иметь возможность генерировать полный язык, пользователь также должен выбрать свою страну. Или иначе я вывел выбранную валюту неправильно (12 000 евро - вместо 12 000 евро, например). Но да, возможно, К.И.С.С. здесь находится справа ;-). Благодарим за ваше предложение. – Nico

ответ

1

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

de-de-de-de-de-de-de-de-de-de-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. Таким образом, это решает две проблемы.

Язык и местоположение пользователя необходимы для точного определения языкового стандарта для пользователя.

Если вы не знаете этого местоположения, вы должны по умолчанию использовать свой собственный язык и местность по умолчанию.

Ссылка: Unicode - locality and language mapping

* 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 wiki. В приведенном ниже коде представлен небольшой пример того, как класс Zend_Locale генерирует исключения, если локаль недействительна. Вы можете проверить местоположение и язык на этом этапе и использовать его в сочетании с информацией, которую вы получаете от браузера, чтобы точно установить языковой стандарт для пользователя.

Ссылка: Zend Locale Introduction

// 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

спасибо. – Nico

+0

Нет проблем, удачи в вашем проекте. –

0

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

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

+0

Благодарим вас за ответ. Я думаю, что этот подход все равно вызовет некоторые проблемы в странах с разными языками. Также я не могу использовать en_US для каждой англоговорящей страны. – Nico

0

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

Смежные вопросы