У многих рано или поздно возникает необходимость в обеспечении мультиязычности своих веб-приложений. Не будем сегодня прибегать к обзору всего разнообразия возможных решений, а остановимся на довольно узконаправленном сравнении обеспечения мультиязычности при помощи пакета Zend_Translate и библиотеки Gettext.
Итак проведем мини-эксперимент, чтобы сравнить в этих двух реализациях быстродействие и количество занимаемой памяти при выполнении скриптов.
Для этого напишем два простеньких скрипта:
test_gettext.php
<?php
$mem_start = memory_get_usage();
$start = microtime(true);
define('APP_PATH', realpath(dirname(__FILE__)));
$locale = 'ru'; // default language
setlocale (LC_ALL,"ru_RU");
bindtextdomain ('messages', APP_PATH . "/lang");
textdomain ('messages');
bind_textdomain_codeset( 'messages', 'UTF-8' );
echo _("Hello world")."<br>";
echo memory_get_usage() - $mem_start;
echo '<br>';
echo microtime(true) - $start;
test_zendtranslate.php
<?php
$mem_start = memory_get_usage();
$start = microtime(true);
define('APP_PATH', realpath(dirname(__FILE__)));
define('APP_LANG', APP_PATH . '/lang');
require_once 'Zend/Translate.php';
$locale = 'ru'; // default language
$translate = new Zend_Translate( array( 'adapter' => 'csv', 'content' => APP_LANG, 'scan' => Zend_Translate::LOCALE_DIRECTORY ) );
$translate->setlocale ($locale);
echo _("Hello world")."<br>";
echo memory_get_usage() - $mem_start;
echo '<br>';
echo microtime(true) - $start;
Да да это простенькие скрипты с выводом перевода пресловутого Hello world. Описывать куда положить файлы перевод не буду — это в задачу нашего мини-эксперимента не входит.
И вот результаты
gettext
Привет мир
688
0,000323057174683
zend_translate
Привет мир
1021536
0.0118551254272
Как видим разница по времени выполнения приблизительно в 100 раз, разница в количестве потреблямой памяти при выполнении скрипта приблизительно в 1500 раз в пользу gettext.
Cпасибо за внимание, буду рад вашим комментариям.
Автор: semaster