В настоящее время я изучаю лучшие методы интеграции i18n
в проекты.
Есть несколько методов, которые я думал об этом, сначала являясь схемой базы данных для хранения строк и соответствующей локали, но проблема заключается в том, что было бы не так просто выбрать строки, потому что я не хотел бы выполнять такие задачи, как так:
SELECT text FROM locales WHERE locale = 'en_GB' AND text_id = 245543
Или
SELECT text FROM locales WHERE locale = 'en_GB' AND text_primary = 'hello'
Следующим методом было бы хранить их в файлах, таких как locales/en_gb/login/strings.php
а затем попытаться получить к ним доступ через класс, специально разработанный следующим образом:
$Language = Registry::Construct('Language',array('en_GB')); echo $Language->login->strings->hello;
Проблема с этим заключается в том, что мне нужно будет создать систему, которая будет обновлять эти файлы с помощью панели администрирования, ведь это очень трудоемкий процесс, а не просто создание системы для управления строками, а управление строками по мере роста сайта
Помимо уже упомянутого gettext
, PHP 5.3 поддерживает поддержку интернационализации
Если это не вариант, рассмотрите возможность использования Zend_Translate
Zend Framework, Zend_Locale
и связанных с ним компонентов. Zend_Translate
поддерживает несколько адаптеров, включая, но не ограничиваясь, простые массивы, gettext, XmlTm и другие.
Я реализовал утилиту для перевода XML как часть более крупного проекта. Вы можете найти его здесь , и здесь приведен пример файла перевода (en_US).
Наиболее впечатляющим методом изучения является реализация Drupal. Во-вторых, будет WordPress. Оба используют gettext и .pot / .po / .mo для локализации. И хорошо, что есть красивый редактор Open Source .po под названием Poedit. Он доступен для пользователей системы Windows, что дает более широкую привлекательность. Он также доступен для Mac и Linux. Посмотрите здесь: http://www.poedit.net/
Посмотрите на библиотеку Gettext ( http://php.net/manual/en/book.gettext.php ).
Не помещайте текст в базу данных. Это просто усложнит работу переводческой команды.