Интернационализация в 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).

Не помещайте свой текст в базу данных. Это просто усложнит работу переводческой команды.