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