Что использовать для локализации (приложение php / smarty / pear)? - PullRequest
2 голосов
/ 04 октября 2010

У меня есть приложение php / smarty / pear, которое имеет собственную реализацию локализации, которая включает в себя использование идентификаторов для строк, и строки хранятся в БД.В настоящее время приложение только на английском языке, но я начну добавлять другие языки.Текущая реализация очень плохая, и, в принципе, я не большой поклонник изобретения колеса.

Кто-нибудь может порекомендовать, что использовать для локализации?Я использовал gettext несколько лет назад, это все еще используется или есть что-то более новое и лучшее?

заранее спасибо.

Ответы [ 2 ]

2 голосов
/ 04 октября 2010

Я бы использовал gettext, поскольку это зрелая система и предоставляет такие функции, как переводы в единственном / множественном числе.Чтобы не зависеть от доступности расширения php, вы должны вернуться к http://launchpad.net/php-gettext, который обеспечивает чистую реализацию gettxt на php.

gettext также имеет большое преимущество, заключающееся в том, что существуют десятки инструментов, которые существуют:упростите перевод этих файлов.

0 голосов
/ 04 октября 2010

Мой лучший совет - посмотреть, как другие приложения (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.

...