У меня есть приложение php / smarty / pear, у которого есть собственная реализация локализации, которая включает в себя использование идентификаторов для строк, а строки хранятся в db. в настоящее время приложение доступно только на английском языке, но я начну добавлять другие языки. Текущая реализация очень плохая, и в основном я не большой поклонник повторного изобретения колеса.
Может ли кто-нибудь рекомендовать, что использовать для локализации? Я использовал gettext несколько лет назад, это все еще используется или есть что-то более новое и лучшее?
заранее спасибо.
Я бы использовал gettext, поскольку это зрелая система и предоставляет такие функции, как сингулярные / множественные версии переводов. Чтобы не зависел от доступности расширения php, вы должны вернуться к http://launchpad.net/php-gettext, который обеспечивает чистую PHP-реализацию gettext.
gettext также имеет большое преимущество в том, что существуют десятки инструментов, которые облегчают перевод этих файлов.
Мой лучший совет – посмотреть, как другие приложения (Drupal, Joomla, WordPress) обрабатывают локализацию и реализуют нечто подобное.
Некоторые из приложений, которые я вложил, имеют один файл ini для каждого языка, который содержит определения STRING-ID = «String Value», где STRING-ID аналогичен имени PHP CONSTANT. Эти файлы затем загружаются классом локализации, который имеет функции, которые обрабатывают установку языка, который будет использоваться (на основе значения конфигурации или пользовательских настроек), загрузки файла и обработки перевода STRING-ID в значение строки. Вы в конечном итоге используете его так:
<?php // config.php $lang = "DE"; // languages/de.ini HELLOWORLD="Hallo Welt" OTHERSTRING="Anderer String" // example.php require_once("classes/localization.class.php"); $localize = localization::getInstance(); echo $localize->translate("HELLOWORLD"); ?>
Это должно произвести нечто вроде Hallo Welt.