Посмотрите, как обрабатывается интернационализация 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')
который будет:
- Lookup предпочтительный язык в настройках текущего пользователя
- Убедитесь, что карта язык загружается по телефону
lang_load()
- Возврат значения из соответствующего языковой карты
Интересно, что все машины лениво загружены. Вы не платите за тот факт, что у них есть 50 или около того определенных языков, пока вам не потребуется доступ к одному из них. В целом, это, вероятно, одно из самых впечатляющих приложений PHP, которые я заработал на протяжении многих лет.
Следует добавить 1337 в качестве метки;) – RCIX