adapter.php
来自「Bug tracker, and reporter.」· PHP 代码 · 共 497 行 · 第 1/2 页
PHP
497 行
<?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-2008 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';/** * @category Zend * @package Zend_Translate * @copyright Copyright (c) 2005-2008 Zend Technologies USA Inc. (http://www.zend.com) * @license http://framework.zend.com/license/new-bsd New BSD License */abstract class Zend_Translate_Adapter { private $_automatic = true; protected static $_cache = null; // Scan options const LOCALE_DIRECTORY = 1; const LOCALE_FILENAME = 2; /** * Array with all options, each adapter can have own additional options * * @var array */ protected $_options = array( 'clear' => false, // clear previous loaded translation data 'scan' => null, // where to find the locale 'locale' => 'auto' // actual set locale/language ); /** * Translation table * * @var array */ protected $_translate = array(); /** * Generates the adapter * * @param string|array $data Translation data for this adapter * @param string|Zend_Locale $locale OPTIONAL Locale/Language to set, identical with Locale identifiers * see Zend_Locale for more information * @param string|array $options Options for the adaptor * @throws Zend_Translate_Exception */ public function __construct($data, $locale = null, array $options = array()) { if (isset(self::$_cache)) { $id = 'Zend_Translate_' . $this->toString(); if ($result = self::$_cache->load($id)) { $this->_translate = unserialize($result); return true; } } $this->addTranslation($data, $locale, $options); $this->_automatic = true; } /** * Add translation data * * It may be a new language or additional data for existing language * If $clear parameter is true, then translation data for specified * language is replaced and added otherwise * * @param array|string $data Translation data * @param string|Zend_Locale $locale Locale/Language to add data for, identical with locale identifier, * see Zend_Locale for more information * @param array $options OPTIONAL Option for this Adapter * @throws Zend_Translate_Exception * @return Zend_Translate_Adapter */ public function addTranslation($data, $locale = null, array $options = array()) { if ($locale === null) { $locale = new Zend_Locale(); } if ($locale instanceof Zend_Locale) { $locale = $locale->toString(); } $originate = $locale; $this->setOptions($options); if (is_string($data) and is_dir($data)) { foreach (new RecursiveIteratorIterator( new RecursiveDirectoryIterator($data, RecursiveDirectoryIterator::KEY_AS_PATHNAME), RecursiveIteratorIterator::SELF_FIRST) as $file => $info) { if ($info->isDir()) { $directory = $info->getPath(); // pathname as locale if (($this->_options['scan'] === self::LOCALE_DIRECTORY) and (Zend_Locale::isLocale((string) $info))) { $locale = (string) $info; } } else if ($info->isFile()) { // filename as locale if ($this->_options['scan'] === self::LOCALE_FILENAME) { $filename = explode('.', (string) $info); array_pop($filename); $filename = implode('.', $filename); if (Zend_Locale::isLocale($filename)) { $locale = (string) $filename; } else { $found = false; $parts = explode('.', $filename); foreach($parts as $token) { $parts = array_merge(explode('_', $token), $parts); } foreach($parts as $token) { $parts = array_merge(explode('-', $token), $parts); } $parts = array_unique($parts); foreach($parts as $token) { if (Zend_Locale::isLocale($token)) { $locale = $token; } } } } try { $this->_addTranslationData((string) $info->getPathname(), $locale, $this->_options); if ((array_key_exists($locale, $this->_translate)) and (count($this->_translate[$locale]) > 0)) { $this->setLocale($locale); } } catch (Zend_Translate_Exception $e) { // ignore failed sources while scanning } } } } else { $this->_addTranslationData($data, $locale, $this->_options); if ((array_key_exists($locale, $this->_translate)) and (count($this->_translate[$locale]) > 0)) { $this->setLocale($locale); } } if ((array_key_exists($originate, $this->_translate)) and (count($this->_translate[$originate]) > 0)) { $this->setLocale($originate); } return $this; } /** * Sets new adapter options * * @param array $options Adapter options * @throws Zend_Translate_Exception * @return Zend_Translate_Adapter */ public function setOptions(array $options = array()) { foreach ($options as $key => $option) { if ($key == "locale") { $this->setLocale($option); } else { $this->_options[strtolower($key)] = $option; } } return $this; } /** * Returns the adapters name and it's options * * @param string|null $optionKey String returns this option * null returns all options * @return integer|string|array */ public function getOptions($optionKey = null) { if ($optionKey === null) { return $this->_options; } if (array_key_exists(strtolower($optionKey), $this->_options)) { return $this->_options[strtolower($optionKey)]; } return null; } /** * Gets locale * * @return Zend_Locale|string|null */ public function getLocale() { return $this->_options['locale']; } /** * Sets locale * * @param string|Zend_Locale $locale Locale to set * @throws Zend_Translate_Exception * @return Zend_Translate_Adapter */ public function setLocale($locale) { if ($locale instanceof Zend_Locale) { $locale = $locale->toString(); } else if (!$locale = Zend_Locale::isLocale($locale)) { require_once 'Zend/Translate/Exception.php'; throw new Zend_Translate_Exception("The given Language ({$locale}) does not exist"); } if (!array_key_exists($locale, $this->_translate) and empty($this->_translate[$locale])) { $temp = explode('_', $locale); if (!array_key_exists($temp[0], $this->_translate)) { require_once 'Zend/Translate/Exception.php'; throw new Zend_Translate_Exception("Language ({$locale}) has to be added before it can be used."); } $locale = $temp[0]; } $this->_options['locale'] = $locale; if ($locale == "auto") { $this->_automatic = true; } else { $this->_automatic = false; } return $this;
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?