Существуют бесплатные сторонние элементы управления для этого с использованием стандартного XML-файла ISO (я написал утилиту базы данных для создания, редактирования и экспорта в этот формат).
Другие ответы очень ручны и требуют больше работы, чем использование этого элемента управления.
Необходимый элемент управления находится по адресу:
http://ezcomponents.org/docs/api/trunk/introduction_Translation.html
После того, как компоненты eZ установлены на сервере, вам необходимо получить базовый элемент управления, необходимый для всех компонентов eZ
require_once "ezc/Base/base.php";
/**
* __autoload()
*
* @param mixed $className
* @return
*/
function __autoload( $className )
{
ezcBase::autoload( $className );
}
Затем вы должны указать, где находится файл языка XML (см. ISO639-2, ISO3166 и Qt Linguist)
$config["language_code"] = "en_us"; // as defined by ISO639-2 and ISO3166
// grab our translation XML file
$backend = new ezcTranslationTsBackend( dirname( __FILE__ ). '/translations' );
$backend -> setOptions( array( 'format' => $config["language_code"].'.xml' ) );
// create a manager object
$manager = new ezcTranslationManager( $backend );
$language = $manager->getContext( $config["language_code"], 'strings' );
теперь вы можете захватывать строки, просто вызывая следующую функцию
getTranslation( "SOME_KEY" );
и для извлечения фраз, имеющих параметры, используйте следующий синтаксис, обратите внимание, что связь между [KEYWORD] и «ключевым словом» является преднамеренной и рекомендуется
getTranslation( "FIND_[KEYWORD]_BY_[TYPE]", array("keyword" => $keyword, "type" => $type ) );
Пример файла TS XML (должен называться en_US.xml)
<!DOCTYPE TS>
<TS>
<context>
<name>strings</name>
<message>
<source>ZONE_TYPE</source>
<translation>Zone Type</translation>
</message>
<message>
<source>ZONE_TOOL</source>
<translation>Zone Tool</translation>
</message>
<message>
<source>HELLO_[NAME]_WELCOME_TO</source>
<translation>Hello, %name, welcome to Webfood Admin</translation>
</message>
<message>
<source>YOUR_ADMINISTRATIVE_SESSION_HAS</source>
<translation>Your administrative session has timed out. Please login again.</translation>
</message>
</context>
</TS>
В ваших сеансах PHP просто будет параметр, в котором хранится используемый язык, возможно, спросите пользователя до или после того, как он войдет в систему на каком языке он хочет, и сохраните его в своей таблице пользователей, если у вас есть учетные записи. Нет причин продолжать посылать значение URL снова и снова, это плохая идея.