Blame | Letzte Änderung | Log anzeigen | RSS feed
<?php/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: *//*** Contains the Translation2_Container base class** PHP versions 4 and 5** LICENSE: Redistribution and use in source and binary forms, with or without* modification, are permitted provided that the following conditions are met:* 1. Redistributions of source code must retain the above copyright* notice, this list of conditions and the following disclaimer.* 2. Redistributions in binary form must reproduce the above copyright* notice, this list of conditions and the following disclaimer in the* documentation and/or other materials provided with the distribution.* 3. The name of the author may not be used to endorse or promote products* derived from this software without specific prior written permission.** THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.* IN NO EVENT SHALL THE FREEBSD PROJECT OR CONTRIBUTORS BE LIABLE FOR ANY* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.** @category Internationalization* @package Translation2* @author Lorenzo Alberton <l.alberton@quipo.it>* @copyright 2004-2005 Lorenzo Alberton* @license http://www.debian.org/misc/bsd.license BSD License (3 Clause)* @version CVS: $Id: Container.php 305985 2010-12-05 22:55:33Z clockwerx $* @link http://pear.php.net/package/Translation2*//*** Base class for Translation2 drivers/containers** Extend this class to provide custom containers.* Some containers are already bundled with the package.** @category Internationalization* @package Translation2* @author Lorenzo Alberton <l.alberton@quipo.it>* @copyright 2004-2005 Lorenzo Alberton* @license http://www.debian.org/misc/bsd.license BSD License (3 Clause)* @link http://pear.php.net/package/Translation2*/class Translation2_Container{// {{{ Class vars/*** Additional options for the storage container* @var array*/var $options = array();/*** @var array* @access private*/var $currentLang = array();/*** @var array* @access private*/var $langs = array();// }}}// {{{ Constructor/*** Constructor* Has to be overwritten by each storage class** @access public*/function Translation2_Container(){}// }}}// {{{ _parseOptions()/*** Parse options passed to the container class** @param array $array options** @return void* @access protected*/function _parseOptions($array){if (!is_array($array)) {return;}foreach ($array as $key => $value) {if (isset($this->options[$key])) {$this->options[$key] = $value;}}}// }}}// {{{ _getLangID()/*** Get a valid langID or raise an error when no valid language is set** @param string $langID language ID** @return string language ID or PEAR_Error on error* @access private*/function _getLangID($langID){if (!empty($langID) || (0 === $langID)) {return $langID;}if (!empty($this->currentLang['id']) || (0 === $this->currentLang['id'])) {return $this->currentLang['id'];}$msg = 'No valid language set. Use Translation2::setLang().';return $this->raiseError($msg, TRANSLATION2_ERROR_UNKNOWN_LANG);}// }}}// {{{ setCharset()/*** Set charset used to read/store the translations** @param string $charset character set (encoding)** @return PEAR_Error on error*/function setCharset($charset){if (method_exists($this->storage, 'setCharset')) {return $this->storage->setCharset($charset);}return $this->raiseError(TRANSLATION2_ERROR_UNSUPPORTED, null, null,'method not implemented', __FUNCTION__);}// }}}// {{{ setLang()/*** Sets the current language** @param string $langID language ID** @return array|PEAR_Error language information*/function setLang($langID){$res = $this->getLangs(); //load available languages, if not loaded yetif (PEAR::isError($res)) {return $res;}if (!array_key_exists($langID, $this->langs)) {return $this->raiseError('unknown language: "'.$langID.'"',TRANSLATION2_ERROR_UNKNOWN_LANG,PEAR_ERROR_RETURN,E_USER_WARNING);}$this->currentLang = $this->langs[$langID];return $this->langs[$langID];}// }}}// {{{ getLang()/*** Gets the current lang** @param string $format what must be returned** @return mixed array with current lang data or null if not set yet*/function getLang($format = 'id'){return isset($this->currentLang['id']) ? $this->currentLang : null;}// }}}// {{{ getLangData()/*** Gets the array data for the lang** @param string $langID language ID* @param string $format what must be returned** @return mixed array with lang data or null if not available*/function getLangData($langID, $format = 'id'){$langs = $this->getLangs('array');return isset($langs[$langID]) ? $langs[$langID] : null;}// }}}// {{{ getLangs()/*** Gets the available languages** @param string $format ['array' | 'ids' | 'names' | 'encodings']** @return array|PEAR_Error*/function getLangs($format = 'array'){//if not cached yet, fetch langs data from the containerif (empty($this->langs) || !count($this->langs)) {$res = $this->fetchLangs(); //container-specific methodif (PEAR::isError($res)) {return $res;}}$tmp = array();switch ($format) {case 'array':foreach ($this->langs as $aLang) {$aLang['lang_id'] = $aLang['id'];$tmp[$aLang['id']] = $aLang;}break;case 'id':case 'ids':foreach ($this->langs as $aLang) {$tmp[] = $aLang['id'];}break;case 'encoding':case 'encodings':foreach ($this->langs as $aLang) {$tmp[] = $aLang['encoding'];}break;case 'name':case 'names':default:foreach ($this->langs as $aLang) {$tmp[$aLang['id']] = $aLang['name'];}}return $tmp;}// }}}// {{{ fetchLangs()/*** Fetch the available langs if they're not cached yet.* Containers should implement this method.** @return PEAR_Error on error*/function fetchLangs(){return $this->raiseError('method "fetchLangs" not supported',TRANSLATION_ERROR_METHOD_NOT_SUPPORTED);}// }}}// {{{ getPage()/*** Returns an array of the strings in the selected page* Containers should implement this method.** @param string $pageID page/group ID* @param string $langID language ID** @return array*/function getPage($pageID = null, $langID = null){return $this->raiseError('method "getPage" not supported',TRANSLATION_ERROR_METHOD_NOT_SUPPORTED);}// }}}// {{{ getOne()/*** Get a single item from the container, without caching the whole page* Containers should implement this method.** @param string $stringID string ID* @param string $pageID page/group ID* @param string $langID language ID** @return string*/function getOne($stringID, $pageID = null, $langID = null){return $this->raiseError('method "getOne" not supported',TRANSLATION_ERROR_METHOD_NOT_SUPPORTED);}// }}}// {{{ getStringID()/*** Get the stringID for the given string** @param string $string string* @param string $pageID page/group ID** @return string*/function getStringID($string, $pageID = null){return $this->raiseError('method "getStringID" not supported',TRANSLATION_ERROR_METHOD_NOT_SUPPORTED);}// }}}// {{{ raiseError()/*** Trigger a PEAR error** @param string $msg error message* @param int $code error code* @param int $mode PEAR error mode* @param int $option error severity** @return void|PEAR_Error* @access public*/function raiseError($msg, $code, $mode = PEAR_ERROR_TRIGGER, $option = E_USER_WARNING){if (isset($GLOBALS['_PEAR_default_error_mode'])) {$mode = $GLOBALS['_PEAR_default_error_mode'];}if (isset($GLOBALS['_PEAR_default_error_options'])) {$option = $GLOBALS['_PEAR_default_error_options'];}if ($mode == PEAR_ERROR_RETURN) {return PEAR::raiseError($msg, $code, $mode, $option);} else {PEAR::raiseError($msg, $code, $mode, $option);}}// }}}}?>