Revision 1864
Added by darkviper almost 12 years ago
Translate.php | ||
---|---|---|
35 | 35 |
class Translate { |
36 | 36 |
|
37 | 37 |
// @object hold the Singleton instance |
38 |
private static $_oInstance = null; |
|
38 |
private static $_oInstance = null;
|
|
39 | 39 |
|
40 |
protected $_sAdaptor = 'WbOldStyle'; |
|
41 |
protected $_sDefaultLanguage = 'en'; |
|
42 |
protected $_sUserLanguage = 'en'; |
|
43 |
protected $_aAddons = array(); |
|
44 |
protected $_aTranslations = array(); |
|
40 |
protected $sAdaptor = 'WbOldStyle'; |
|
41 |
protected $sSystemLanguage = 'en'; |
|
42 |
protected $sDefaultLanguage = 'en'; |
|
43 |
protected $sUserLanguage = 'en'; |
|
44 |
protected $bUseCache = true; |
|
45 |
/** TranslationTable objects of all loaded addons */ |
|
46 |
protected $aLoadedAddons = array(); |
|
47 |
/** TranslationTable object of the core and additional one activated addon */ |
|
48 |
protected $aActiveTranslations = array(); |
|
49 |
|
|
50 |
const CACHE_ENABLED = true; |
|
51 |
const CACHE_DISABLED = false; |
|
45 | 52 |
|
46 | 53 |
/** prevent class from public instancing and get an object to hold extensions */ |
47 | 54 |
protected function __construct() {} |
... | ... | |
64 | 71 |
* @param string UserLanguage code ('de' || 'de_CH' || 'de_CH_uri') |
65 | 72 |
* @throws TranslationException |
66 | 73 |
*/ |
67 |
public function initialize($sDefaultLanguage, $sUserLanguage = '', $sAdaptor = 'WbOldStyle') |
|
74 |
public function initialize($sSystemLanguage, $sDefaultLanguage, $sUserLanguage = '', |
|
75 |
$sAdaptor = 'WbOldStyle', $bUseCache = self::CACHE_ENABLED) |
|
68 | 76 |
{ |
69 | 77 |
if(!class_exists('TranslateAdaptor'.$sAdaptor)) { |
70 | 78 |
throw new TranslationException('unable to load adaptor: '.$sAdaptor); |
71 | 79 |
} |
72 |
$this->_sAdaptor = $sAdaptor; |
|
73 |
$this->_sDefaultLanguage = $sDefaultLanguage; |
|
80 |
$this->bUseCache = $bUseCache; |
|
81 |
$this->sAdaptor = 'TranslateAdaptor'.$sAdaptor; |
|
82 |
// if no system language is set then use language 'en' |
|
83 |
$this->sSystemLanguage = (trim($sSystemLanguage) == '' ? 'en' : $sSystemLanguage); |
|
84 |
// if no default language is set then use system language |
|
85 |
$this->sDefaultLanguage = (trim($sDefaultLanguage) == '' |
|
86 |
? $this->sSystemLanguage |
|
87 |
: $sDefaultLanguage); |
|
74 | 88 |
// if no user language is set then use default language |
75 |
$this->_sUserLanguage = ($sUserLanguage == '' ? $sDefaultLanguage : $sUserLanguage); |
|
89 |
$this->sUserLanguage = (trim($sUserLanguage) == '' |
|
90 |
? $this->sDefaultLanguage |
|
91 |
: $sUserLanguage); |
|
76 | 92 |
$sPattern = '/^[a-z]{2,3}(?:(?:\_[a-z]{2})?(?:\_[a-z0-9]{2,4})?)$/siU'; |
77 | 93 |
// validate language codes |
78 |
if(preg_match($sPattern, $this->_sDefaultLanguage) && |
|
79 |
preg_match($sPattern, $this->_sUserLanguage)) |
|
94 |
if(preg_match($sPattern, $this->sSystemLanguage) && |
|
95 |
preg_match($sPattern, $this->sDefaultLanguage) && |
|
96 |
preg_match($sPattern, $this->sUserLanguage)) |
|
80 | 97 |
{ |
81 | 98 |
// load core translations and activate it |
82 |
$oTmp = new TranslationTable('', $this->_sDefaultLanguage, $this->_sUserLanguage); |
|
83 |
$this->_aAddons['core'] = $oTmp->load($this->_sAdaptor); |
|
84 |
$this->_aTranslations[0] = $this->_aAddons['core']; |
|
85 |
if(sizeof($this->_aAddons['core']) == 0) { |
|
99 |
$oTmp = new TranslationTable('', |
|
100 |
$this->sSystemLanguage, |
|
101 |
$this->sDefaultLanguage, |
|
102 |
$this->sUserLanguage, |
|
103 |
$this->bUseCache); |
|
104 |
$this->aLoadedAddons['core'] = $oTmp->load($this->sAdaptor); |
|
105 |
$this->aActiveTranslations[0] = $this->aLoadedAddons['core']; |
|
106 |
if(sizeof($this->aLoadedAddons['core']) == 0) { |
|
86 | 107 |
// throw an exception for missing translations |
87 | 108 |
throw new TranslationException('missing core translations'); |
88 | 109 |
} |
89 | 110 |
}else { |
90 | 111 |
// throw an exception for invalid or missing language codes |
91 |
$sMsg = 'Invalid language codes: ['.$this->_sDefaultLanguage.'] ['.$this->_sUserLanguage.']'; |
|
112 |
$sMsg = 'Invalid language codes: ['.$this->sSystemLanguage.'] or [' |
|
113 |
. $this->sDefaultLanguage.'] or ['.$this->sUserLanguage.']'; |
|
92 | 114 |
throw new TranslationException($sMsg); |
93 | 115 |
} |
94 | 116 |
} |
... | ... | |
99 | 121 |
*/ |
100 | 122 |
public function addAddon($sAddon) |
101 | 123 |
{ |
102 |
if(!(strtolower($sAddon) == 'core' || $sAddon == '' || isset($this->_aAddons[$sAddon]))) {
|
|
124 |
if(!(strtolower($sAddon) == 'core' || $sAddon == '' || isset($this->aLoadedAddons[$sAddon]))) {
|
|
103 | 125 |
// load requested addon translations if needed and possible |
104 |
$oTmp = new TranslationTable($sAddon, $this->_sDefaultLanguage, $this->_sUserLanguage); |
|
105 |
$this->_aAddons[$sAddon] = $oTmp->load($this->_sAdaptor); |
|
126 |
$oTmp = new TranslationTable($sAddon, |
|
127 |
$this->sSystemLanguage, |
|
128 |
$this->sDefaultLanguage, |
|
129 |
$this->sUserLanguage, |
|
130 |
$this->bUseCache); |
|
131 |
$this->aLoadedAddons[$sAddon] = $oTmp->load($this->sAdaptor); |
|
106 | 132 |
} |
107 | 133 |
} |
108 | 134 |
/** |
... | ... | |
112 | 138 |
public function enableAddon($sAddon) |
113 | 139 |
{ |
114 | 140 |
if(!(strtolower($sAddon) == 'core' || $sAddon == '')) { |
115 |
if(!isset($this->_aAddons[$sAddon])) {
|
|
141 |
if(!isset($this->aLoadedAddons[$sAddon])) {
|
|
116 | 142 |
$this->addAddon($sAddon); |
117 | 143 |
} |
118 |
$this->_aTranslations[1] = $this->_aAddons[$sAddon];
|
|
144 |
$this->aActiveTranslations[1] = $this->aLoadedAddons[$sAddon];
|
|
119 | 145 |
} |
120 | 146 |
|
121 | 147 |
} |
122 |
|
|
148 |
/** |
|
149 |
* Dissable active addon |
|
150 |
*/ |
|
123 | 151 |
public function disableAddon() |
124 | 152 |
{ |
125 |
if(isset($this->_aTranslations[1])) {
|
|
126 |
unset($this->_aTranslations[1]);
|
|
153 |
if(isset($this->aActiveTranslations[1])) {
|
|
154 |
unset($this->aActiveTranslations[1]);
|
|
127 | 155 |
} |
128 | 156 |
} |
129 | 157 |
|
... | ... | |
134 | 162 |
*/ |
135 | 163 |
public function __isset($sKey) |
136 | 164 |
{ |
137 |
foreach($this->_aTranslations as $oAddon) {
|
|
165 |
foreach($this->aActiveTranslations as $oAddon) {
|
|
138 | 166 |
if(isset($oAddon->$sKey)) { |
139 | 167 |
// is true if at least one translation is found |
140 | 168 |
return true; |
... | ... | |
150 | 178 |
public function __get($sKey) |
151 | 179 |
{ |
152 | 180 |
$sRetval = ''; |
153 |
foreach($this->_aTranslations as $oAddon) {
|
|
181 |
foreach($this->aActiveTranslations as $oAddon) {
|
|
154 | 182 |
if(isset($oAddon->$sKey)) { |
155 | 183 |
// search the last matching translation (Core -> Addon) |
156 | 184 |
$sRetval = $oAddon->$sKey; |
... | ... | |
165 | 193 |
*/ |
166 | 194 |
public function getLangArray() |
167 | 195 |
{ |
168 |
$aTranslations = array(); |
|
169 |
foreach($this->_aTranslations as $aTranslation) { |
|
170 |
$aTranslations = array_merge($aTranslations, $aTranslation); |
|
196 |
$aSumTranslations = array(); |
|
197 |
foreach($this->aActiveTranslations as $oTranslationTable) { |
|
198 |
if(get_class($oTranslationTable) == 'TranslationTable') { |
|
199 |
$aSumTranslations = array_merge($aSumTranslations, $oTranslationTable->getArray()); |
|
200 |
} |
|
171 | 201 |
} |
172 |
return $aTranslations; |
|
202 |
return $aSumTranslations;
|
|
173 | 203 |
} |
174 | 204 |
|
175 | 205 |
} // end of class Translate |
Also available in: Unified diff
update classes Translate, TranslateTable, TranslateAdaptorWbOldStyle
added interface TranslateAdaptorInterface
added Klasse_Translate_de.pdf
update class WbAdaptor
update /framework/initialize.php