Интернационализация в PHP
В настоящее время я изучаю лучшие методы интеграции 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;
Проблема с этим заключается в том, что мне нужно будет создать систему, которая будет обновлять эти файлы с помощью панели администрирования, ведь это очень трудоемко, а не просто создание системы для управления строками, а управление строками по мере роста сайта
- Какие еще существуют методы, которые будут полезны для большой системы.
- Есть ли какой-либо автоматизированный способ сделать "Перевод" как таковой
- Должен ли я придерживаться метода базы данных и создавать систему для пользователей, чтобы переводить строки с рейтингом/предлагать лучшую версию?
- Какие системы вы пытались использовать в прошлом, и я должен смотреть в них или полностью избегать их.
Ответы
Ответ 1
В дополнение к gettext
, уже упомянутому, PHP 5.3 имеет встроенную поддержку интернационализации
Если это не вариант, рассмотрите возможность использования Zend Framework Zend_Translate
, Zend_Locale
и соответствующих компонентов для этого. Zend_Translate
поддерживает несколько адаптеров, включая, но не ограничиваясь, простые массивы, gettext, XmlTm и другие.
Ответ 2
Я реализовал утилиту для перевода XML как часть более крупного проекта. Вы можете найти здесь здесь, а пример файла перевода здесь (ru_US).
Ответ 3
Наиболее впечатляющим методом изучения является реализация Drupal. Во-вторых, будет Wordpress. Оба используют gettext и .pot/.po/.mo для локализации. И хорошо, что есть красивый редактор Open Source.po под названием Poedit. Он доступен для пользователей системы Windows, что дает более широкую привлекательность. Он также доступен для Mac и Linux. Посмотрите здесь: http://www.poedit.net/
Ответ 4
Посмотрите на библиотеку Gettext (http://php.net/manual/en/book.gettext.php).
Не помещайте свой текст в базу данных. Это просто усложнит работу переводческой команды.