3

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

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

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

Заранее благодарен!

+1

Следует добавить 1337 в качестве метки;) – RCIX

ответ

1

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

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

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

Он содержит около 1600 или около того заявления. Интересная магия происходит внутри 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. Lookup предпочтительный язык в настройках текущего пользователя
  2. Убедитесь, что карта язык загружается по телефону lang_load()
  3. Возврат значения из соответствующего языковой карты

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

+0

Не могли бы вы добавить дополнительные пояснения? Мне любопытно, но у меня нет времени, чтобы проверить код прямо сейчас. –

+0

Извините, есть лучшие способы решения многоязычных приложений - gettext. Я бы никогда не пошел так, как вы описали. Gettext - это стандарт де-факто, и вам не нужно его самостоятельно создавать. – dwich

3

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

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

1

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

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

+1

JonoW, почему бы не сохранить все даты/время как UTC и конвертировать их на лету? Это кажется гораздо более надежным для меня, и поскольку вы знаете дату/время, функции преобразования будут работать соответственно. Единственный способ, которым я мог столкнуться с проблемами, - это сохранить время без даты. – Brad

+1

Да, вы могли бы, конечно, но есть даты, которые вы можете захотеть остаться необращенными. Например. если пользователь в Лондоне говорит, что событие начинается в 19:00 в Лондоне, вы, возможно, не захотите, чтобы пользователи в Германии видели это как 8 вечера (в зависимости от контекста), поэтому должен быть какой-то способ документировать это - в нашем случае мы выбираем именование условность. Если событие было глобальным событием (например, речь транслировалась через Интернет), тогда было бы целесообразно хранить в UTC. – JonoW

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