gettext.php.svn-base
来自「PHP 知识管理系统(基于树结构的知识管理系统), 英文原版的PHP源码。」· SVN-BASE 代码 · 共 149 行
SVN-BASE
149 行
<?php/** * Zend Framework * * LICENSE * * This source file is subject to the new BSD license that is bundled * with this package in the file LICENSE.txt. * It is also available through the world-wide-web at this URL: * http://framework.zend.com/license/new-bsd * If you did not receive a copy of the license and are unable to * obtain it through the world-wide-web, please send an email * to license@zend.com so we can send you a copy immediately. * * @category Zend * @package Zend_Translate * @copyright Copyright (c) 2005-2007 Zend Technologies USA Inc. (http://www.zend.com) * @version $Id: Date.php 2498 2006-12-23 22:13:38Z thomas $ * @license http://framework.zend.com/license/new-bsd New BSD License *//** Zend_Locale */require_once 'Zend/Locale.php';/** Zend_Translate_Exception */require_once 'Zend/Translate/Exception.php';/** Zend_Translate_Adapter */require_once 'Zend/Translate/Adapter.php';/** * @category Zend * @package Zend_Translate * @copyright Copyright (c) 2005-2007 Zend Technologies USA Inc. (http://www.zend.com) * @license http://framework.zend.com/license/new-bsd New BSD License */class Zend_Translate_Adapter_Gettext extends Zend_Translate_Adapter { // Internal variables private $_bigEndian = false; private $_file = false; /** * Generates the adapter * * @param array $options Options for this adapter * @param string|Zend_Locale $locale OPTIONAL Locale/Language to set, identical with locale identifier, * see Zend_Locale for more information */ public function __construct($options, $locale = null) { parent::__construct($options, $locale); } /** * Read values from the MO file * * @param string $bytes */ private function _readMOData($bytes) { if ($this->_bigEndian === false) { return unpack('V' . $bytes, fread($this->_file, 4 * $bytes)); } else { return unpack('N' . $bytes, fread($this->_file, 4 * $bytes)); } } /** * Load translation data (MO file reader) * * @param string $filename MO file to add, full path must be given for access * @param string $locale New Locale/Language to set, identical with locale identifier, * see Zend_Locale for more information * @param boolean $option Not used for gettext * @throws Zend_Translation_Exception */ protected function _loadTranslationData($filename, $locale, $option = null) { if ($option || !isset($this->_translate[$locale])) { $this->_translate[$locale] = array(); } $this->_file = @fopen($filename, 'rb'); if (!$this->_file) { throw new Zend_Translate_Exception('Error opening translation file \'' . $filename . '\'.'); } // get Endian $input = $this->_readMOData(1); if (dechex($input[1]) == "950412de") { $this->_bigEndian = FALSE; } else if (dechex($input[1]) == "de120495") { $this->_bigEndian = TRUE; } else { throw new Zend_Translate_Exception('\'' . $filename . '\' is not a gettext file'); } // read revision - not supported for now $input = $this->_readMOData(1); // number of bytes $input = $this->_readMOData(1); $total = $input[1]; // number of original strings $input = $this->_readMOData(1); $OOffset = $input[1]; // number of translation strings $input = $this->_readMOData(1); $TOffset = $input[1]; // fill the original table fseek($this->_file, $OOffset); $origtemp = $this->_readMOData(2 * $total); fseek($this->_file, $TOffset); $transtemp = $this->_readMOData(2 * $total); for($count = 0; $count < $total; ++$count) { if ($origtemp[$count * 2 + 1] != 0) { fseek($this->_file, $origtemp[$count * 2 + 2]); $original = @fread($this->_file, $origtemp[$count * 2 + 1]); } else { $original = ''; } if ($transtemp[$count * 2 + 1] != 0) { fseek($this->_file, $transtemp[$count * 2 + 2]); $this->_translate[$locale][$original] = fread($this->_file, $transtemp[$count * 2 + 1]); } } } /** * Returns the adapter name * * @return string */ public function toString() { return "Gettext"; }}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?