*Zendの導入 [#ic082d57]
PukiWiki Adv. 1.1では、キャッシュ処理を中心に命令をZend Frameworkのものに置き換えていく予定です。

とりあえず、ものすごくやっつけ仕事で、gettextの処理をi18nモジュールを置き換えてみました。

main.php
#sh(diff){{
/////////////////////////////////////////////////
// Include subroutines

defined('LIB_DIR') or define('LIB_DIR', realpath('./').'/');

+use Zend\Loader\StandardAutoloader;
+require_once (LIB_DIR.'Zend/Loader/StandardAutoloader.php');
+$loader = new StandardAutoloader(array('autoregister_zf' => true));
+$loader->register();
}}

#sh(diff){{
function set_language()
{
	global $language_considering_setting_level;
	global $language;
	global $public_holiday_guest_view;
	global $translator;

	$language = get_language($language_considering_setting_level);
/*
LANG
LANG_ENCODING
DOMAIN
PO_LANG
*/

	// LANG - Internal content encoding ('en', 'ja', or ...)
	define('LANG', $language);

	// Set COOKIE['lang']
	$parsed_url = parse_url(get_script_absuri());
	$path = $parsed_url['path'];
	if (($pos = strrpos($path, '/')) !== FALSE) {
		$path = substr($path, 0, $pos + 1);
	}
	setcookie('lang', $language, 0, $path);
	$_COOKIE['lang'] = $language;

	// PUBLIC HOLIDAY
	// Installation person's calendar is adopted.
	if ( $public_holiday_guest_view ) {
		$_c = explode('_', $language);
	} else {
		// 設置者のカレンダーを採用
		$_c = explode('_', DEFAULT_LANG);
	}
	define('COUNTRY', $_c[1]);
	unset($_c);

	// FIXME:
	// UI_LANG - Content Language for buttons, menus,  etc
	define('UI_LANG', LANG); // 'en' for Internationalized wikisite
	// LANG_ENCODING - content encoding ('', 'UTF-8', or ...)
	define('LANG_ENCODING', 'UTF-8');

	// I18N
	if (extension_loaded('intl')){
		locale_set_default($language);
	}

	// LOCALE Name specified by GETTEXT().
	define('DOMAIN', 'pukiwiki');
	// LOCALE Name specified by SETLOCALE().
	defined('PO_LANG') or define('PO_LANG', $language); // 'en_US', 'ja_JP'

	// PHP mbstring process.
	set_mbstring($language);

+	global $translator;
+	$translator = new Translator();
}

+// gettext to Zend gettext emulator
+function T_setlocale($locale){
+	// through
+}
+
+function T_($string){
+	global $translator, $domain, $language;
+	return $translator->translate($string, $domain, $language);
+}
+
+function T_bindtextdomain($domain, $dir){
+	global $translator, $language;
+	$gettext_file = $dir.PO_LANG.'/LC_MESSAGES/'.$domain.'.mo';
+	if (file_exists($gettext_file)){
+		$translator->addTranslationFile('gettext', $gettext_file, $domain, $language);
+	}
+}
+
+function T_bind_textdomain_codeset($name, $endode){
+	// through
+}
+
+function T_textdomain($text_domain){
+	global $domain;
+	$domain = $text_domain;
+}
}}

PukiWiki Adv.ではサーバーの設定を変えないとGettextが効かないことから、予め用意されているgettextを使わず、php-gettextを使用するため、T_のプレフィックスのつく関数に変えていました。要はそこの処理を、Zend\i18nの処理に変更しただけですが、この変更だけで0.150秒ほどかかっていた処理が0.12秒ほどに短縮されました。

個人的予想では、Zendではオートローディングなどの機能が重いため、遅くなると予想していましたが、これはうれしい誤算でした。また、zend\Cacheを用いることで更に軽量化も見込めるとのことで、本格的に導入したいと考えています。