Боли создания глобального приложения - PullRequest
3 голосов
/ 11 ноября 2009

Мне нужно создать глобальное приложение. Это означает, что он должен нормально работать в любой точке мира, в любой стране (или в большинстве из них). Это веб-сайт PHP, который будет заниматься деньгами и временем в определенные моменты.

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

Если у кого-то есть советы по поводу такого рода данных и как я могу использовать их правильным способом, я был бы очень благодарен:)

Заранее спасибо!

Ответы [ 4 ]

3 голосов
/ 23 июля 2010

Zend Locale , часть Zend Framework, помогает решать проблемы, связанные с валютами, часовыми поясами, переводом, ...

Легко внедрить Zend Framework по частям, так что вы можете просто использовать те части, которые вам нужны (без раздувания или замедления).

2 голосов
/ 12 ноября 2009

Взгляните на международный (http://www.php.net/manual/en/book.intl.php).

)

Это оболочка для ICU (International Components for Unicode, http://site.icu -project.org / ) и содержит большую часть необходимого вам материала.

1 голос
/ 23 июля 2010

Я работал над глобализированным приложением и обнаружил, что один из самых хитрых элементов - это часовые пояса и то, как вы храните свои даты. Иногда даты должны храниться по местному времени (например, по времени события в месте в мире), а иногда они должны храниться в общем часовом поясе (например, сохранять созданные даты как UTC для всего) и преобразовываться в пользователей местное время, когда это необходимо. Я бы посоветовал соглашение об именовании ваших столбцов / переменных БД, чтобы было понятно, что это такое.

Никогда не пытайтесь справиться с преобразованиями часовых поясов вручную (это намного сложнее, чем вы думаете), используйте какую-то библиотеку / инфраструктуру - я бы не знал, что использовать в PHP, в .Net мы можем положиться на. Чистый BCL для такого рода вещей.

1 голос
/ 11 ноября 2009

Посмотрите, как программное обеспечение Mantis BugTracking поддерживает интернационализацию. Метод, который они используют, довольно хорош.

Дополнительная информация: Прошло много лет с тех пор, как я его использовал, но быстрый просмотр исходного кода показывает, что эта часть кода существенно не изменилась. Они используют общий каталог сообщений и получают сообщение подход, который используют многие продукты. Их языковой API довольно прост - вывод phpxref доступен , и это не удивительно. Каталог сообщений реализован в виде PHP-скрипта, который просто получает include 'd. Например, каталог для английского языка содержит записи типа:

$s_new_bug = 'New Issue';
$s_bugnote_added = 'Note Added';

Содержит около 1 600 объявлений. Интересная магия происходит внутри lang_load. Когда язык загружен, файл каталога включается, поэтому все переменные, которые он определяет, определены в локальной области видимости. Lang_load перебирает локально определенные переменные и строит карту сообщений на основе имен переменных, чтобы можно было искать сообщение по имени. Например, после загрузки предыдущего фрагмента будет выглядеть так, как будто были выполнены следующие операторы:

$g_lang_strings['en']['new_bug'] = 'New Issue';
$g_lang_strings['en']['bugnote_added'] = 'Note Added';

Когда пользовательский интерфейс должен получить доступ к «жестко закодированной» строке, он использует вызов, подобный lang_get('new_bug'), который будет:

  1. Поиск предпочитаемого языка в настройках для текущего пользователя
  2. Убедитесь, что языковая карта загружена, набрав lang_load()
  3. Возвращает значение из соответствующей языковой карты

Интересно то, что вся техника загружена лениво. Вы не платите за то, что у них определено около 50 языков, пока вам не понадобится доступ к одному из них. В целом, это, вероятно, одно из самых впечатляющих PHP-приложений, в которые я копался годами.

...