Blame | Letzte Änderung | Log anzeigen | RSS feed
<?php//// +----------------------------------------------------------------------+// | PHP Version 4 |// +----------------------------------------------------------------------+// | Copyright (c) 1997-2003 The PHP Group |// +----------------------------------------------------------------------+// | This source file is subject to version 2.02 of the PHP license, |// | that is bundled with this package in the file LICENSE, and is |// | available at through the world-wide-web at |// | http://www.php.net/license/2_02.txt. |// | If you did not receive a copy of the PHP license and are unable to |// | obtain it through the world-wide-web, please send a note to |// | license@php.net so we can mail you a copy immediately. |// +----------------------------------------------------------------------+// | Authors: Wolfram Kriesing <wolfram@kriesing.de> |// | Naoki Shima <naoki@avantexchange.com> |// +----------------------------------------------------------------------+//// $Id: Common.php 110339 2003-01-04 11:55:29Z mj $///*** this class provides language functionality, such as* determining the language of a given string, etc.* iso639-1 compliant, 2 letter code is used* iso639-1 http://www.loc.gov/standards/iso639-2/langcodes.html** @package Language* @access public* @author Wolfram Kriesing <wolfram@kriesing.de>* @version 2001/12/29*/class I18N_Messages_Common{// {{ properties/*** Holds messageID to corresponding message mapping** @type : array* @access: private*/var $_message = array();// {{ constructor/***** @access public* @author* @version*/function __construct( ){# FIXXME pass a resource to the constructor which can be used to determine the# language of a string, it should be possible to use XML, DB, or whatever# this can then be used as a replacement for the array as used now}// }}// {{ I18N_Messages_Common()/*** for pre-ZE2 compatibility** @access public* @author* @version*/function I18N_Messages_Common( ){return $this->__construct();}// }}// {{ determineLanuguage()/*** trys to get the language of a given string** @access public* @author Wolfram Kriesing <wolfram@kriesing.de>* @version 01/12/29* @param string $string the string which is used to try and determine its language* @return string iso-string for the language**/function determineLanguage( $string , $source='default' ){// include a file here, so one can provide its own file,// and to reduce compile time for php, since it will only be included when needed// the file that gets included might become very bigif( $source=='default' )include('I18N/Messages/determineLanguage.inc.php');elseinclude($source); // include the file given as parameter, it only needs to provide an array, as in the above included file// replace all non word-characters by a space, i hope that is ok for all languages$string = preg_replace( '/[\W\s]/' , ' ' ,$string);$splitString = explode(' ',$string); // get each single word in a fieldforeach( $splitString as $key=>$aString ) // remove spaces around the word and make it lower case$splitString[$key] = strtolower(trim($aString));// simply intersect each language array with the array that we created by splitting the string// and the result that's size is the biggest is our languageforeach( $languages as $lang=>$aLanguage )$results[$lang] = sizeof(array_intersect($splitString,$aLanguage));arsort($results);reset ($results);list($lang,) = each($results);return $lang;}// }}// {{ get()/*** Look for and return the message corresponds to the messageID passed.* Returns messageID when the corresponding message is not found** @return: string* @access: public* @author: Naoki Shima <naoki@avantexchange.com>*/function get($messageID = ""){return ($messageID !== "" && is_array($this->_message) && in_array($messageID, array_keys($this->_message))) ? $this->_message[$messageID] :$messageID;}// }}// {{ _()/*** Alias for get(). Function name might not be appropriate because it conflicts PEAR coding standard* that this is meant to be public function** @param : string messageID* @return: string corresponding message* @access: public* @author: Naoki Shima <naoki@avantexchange.com>*/function _($messageID = ""){return $this->get($messageID);}// }}// {{ set()/*** Set message ID to corresponding string** @return: boolean* @access: public* @author: Naoki Shima <naoki@avantexchange.com>*/function set($messageID = "",$str = ""){if($messageID === "") {return false;}if($str === "" && is_array($messageID)) {// user is passing an array$this->_message = $messageID;} else {$this->_message[$messageID] = $str;}return true;}// }}// {{ setCharset()/*** Set charset of message** @param : string Charset** @return: void* @access: public* @author: Naoki Shima <naoki@avantexchange.com>*/function setCharset($charset = I18N_MESSAGES_DEFAULT_CHARSET){$this->_charset = $charset;}// }}// {{ getCharset()/*** Returns charset of message. Returns null if it's not set.** @return: mixed Charset* @access: public* @author: Naoki Shima <naoki@avantexchange.com>*/function getCharset(){return ($this->_charset ? $this->_charset: false);}// }}// {{ bindDomain()/*** Bind domain to use* If domain is not passed and there's already a value set to domain,* then this method returns current domain.** @param : string** @return: string Current domain* @access: public* @author: Naoki Shima*/function bindDomain($domain = ''){if($domain === '') {return ($this->_domain ? $this->_domain : '');}$this->_domain = $domain;return $domain;}// }}// {{ bindLanguage()/*** Bind language to use* If language is not passed and there's already a value set to domain,* then this method returns current domain.** @param : string** @return: string Current language* @access: public* @author: Naoki Shima <naoki@avantexchange.com>*/function bindLanguage($lang = ''){if($lang === '') {return ($this->_lang ? $this->_lang : '');}$this->_lang = $lang;return $lang;}// }}} // end of class?>