Mercurial > hg > Members > shoshi > webvirt
comparison cake/libs/l10n.php @ 0:261e66bd5a0c
hg init
author | Shoshi TAMAKI <shoshi@cr.ie.u-ryukyu.ac.jp> |
---|---|
date | Sun, 24 Jul 2011 21:08:31 +0900 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:261e66bd5a0c |
---|---|
1 <?php | |
2 /** | |
3 * Localization | |
4 * | |
5 * PHP versions 4 and 5 | |
6 * | |
7 * CakePHP(tm) : Rapid Development Framework (http://cakephp.org) | |
8 * Copyright 2005-2010, Cake Software Foundation, Inc. (http://cakefoundation.org) | |
9 * | |
10 * Licensed under The MIT License | |
11 * Redistributions of files must retain the above copyright notice. | |
12 * | |
13 * @copyright Copyright 2005-2010, Cake Software Foundation, Inc. (http://cakefoundation.org) | |
14 * @link http://cakephp.org CakePHP(tm) Project | |
15 * @package cake | |
16 * @subpackage cake.cake.libs | |
17 * @since CakePHP(tm) v 1.2.0.4116 | |
18 * @license MIT License (http://www.opensource.org/licenses/mit-license.php) | |
19 */ | |
20 | |
21 /** | |
22 * Localization | |
23 * | |
24 * @package cake | |
25 * @subpackage cake.cake.libs | |
26 */ | |
27 class L10n extends Object { | |
28 | |
29 /** | |
30 * The language for current locale | |
31 * | |
32 * @var string | |
33 * @access public | |
34 */ | |
35 var $language = 'English (United States)'; | |
36 | |
37 /** | |
38 * Locale search paths | |
39 * | |
40 * @var array | |
41 * @access public | |
42 */ | |
43 var $languagePath = array('eng'); | |
44 | |
45 /** | |
46 * ISO 639-3 for current locale | |
47 * | |
48 * @var string | |
49 * @access public | |
50 */ | |
51 var $lang = 'eng'; | |
52 | |
53 /** | |
54 * Locale | |
55 * | |
56 * @var string | |
57 * @access public | |
58 */ | |
59 var $locale = 'en_us'; | |
60 | |
61 /** | |
62 * Default ISO 639-3 language. | |
63 * | |
64 * DEFAULT_LANGUAGE is defined in an application this will be set as a fall back | |
65 * | |
66 * @var string | |
67 * @access public | |
68 */ | |
69 var $default = null; | |
70 | |
71 /** | |
72 * Encoding used for current locale | |
73 * | |
74 * @var string | |
75 * @access public | |
76 */ | |
77 var $charset = 'utf-8'; | |
78 | |
79 /** | |
80 * Text direction for current locale | |
81 * | |
82 * @var string | |
83 * @access public | |
84 */ | |
85 var $direction = 'ltr'; | |
86 | |
87 /** | |
88 * Set to true if a locale is found | |
89 * | |
90 * @var string | |
91 * @access public | |
92 */ | |
93 var $found = false; | |
94 | |
95 /** | |
96 * Maps ISO 639-3 to I10n::__l10nCatalog | |
97 * | |
98 * @var array | |
99 * @access private | |
100 */ | |
101 var $__l10nMap = array(/* Afrikaans */ 'afr' => 'af', | |
102 /* Albanian */ 'alb' => 'sq', | |
103 /* Arabic */ 'ara' => 'ar', | |
104 /* Armenian - Armenia */ 'hye' => 'hy', | |
105 /* Basque */ 'baq' => 'eu', | |
106 /* Bosnian */ 'bos' => 'bs', | |
107 /* Bulgarian */ 'bul' => 'bg', | |
108 /* Byelorussian */ 'bel' => 'be', | |
109 /* Catalan */ 'cat' => 'ca', | |
110 /* Chinese */ 'chi' => 'zh', | |
111 /* Chinese */ 'zho' => 'zh', | |
112 /* Croatian */ 'hrv' => 'hr', | |
113 /* Czech */ 'cze' => 'cs', | |
114 /* Czech */ 'ces' => 'cs', | |
115 /* Danish */ 'dan' => 'da', | |
116 /* Dutch (Standard) */ 'dut' => 'nl', | |
117 /* Dutch (Standard) */ 'nld' => 'nl', | |
118 /* English */ 'eng' => 'en', | |
119 /* Estonian */ 'est' => 'et', | |
120 /* Faeroese */ 'fao' => 'fo', | |
121 /* Farsi */ 'fas' => 'fa', | |
122 /* Farsi */ 'per' => 'fa', | |
123 /* Finnish */ 'fin' => 'fi', | |
124 /* French (Standard) */ 'fre' => 'fr', | |
125 /* French (Standard) */ 'fra' => 'fr', | |
126 /* Gaelic (Scots) */ 'gla' => 'gd', | |
127 /* Galician */ 'glg' => 'gl', | |
128 /* German (Standard) */ 'deu' => 'de', | |
129 /* German (Standard) */ 'ger' => 'de', | |
130 /* Greek */ 'gre' => 'el', | |
131 /* Greek */ 'ell' => 'el', | |
132 /* Hebrew */ 'heb' => 'he', | |
133 /* Hindi */ 'hin' => 'hi', | |
134 /* Hungarian */ 'hun' => 'hu', | |
135 /* Icelandic */ 'ice' => 'is', | |
136 /* Icelandic */ 'isl' => 'is', | |
137 /* Indonesian */ 'ind' => 'id', | |
138 /* Irish */ 'gle' => 'ga', | |
139 /* Italian */ 'ita' => 'it', | |
140 /* Japanese */ 'jpn' => 'ja', | |
141 /* Korean */ 'kor' => 'ko', | |
142 /* Latvian */ 'lav' => 'lv', | |
143 /* Lithuanian */ 'lit' => 'lt', | |
144 /* Macedonian */ 'mac' => 'mk', | |
145 /* Macedonian */ 'mkd' => 'mk', | |
146 /* Malaysian */ 'may' => 'ms', | |
147 /* Malaysian */ 'msa' => 'ms', | |
148 /* Maltese */ 'mlt' => 'mt', | |
149 /* Norwegian */ 'nor' => 'no', | |
150 /* Norwegian Bokmal */ 'nob' => 'nb', | |
151 /* Norwegian Nynorsk */ 'nno' => 'nn', | |
152 /* Polish */ 'pol' => 'pl', | |
153 /* Portuguese (Portugal) */ 'por' => 'pt', | |
154 /* Rhaeto-Romanic */ 'roh' => 'rm', | |
155 /* Romanian */ 'rum' => 'ro', | |
156 /* Romanian */ 'ron' => 'ro', | |
157 /* Russian */ 'rus' => 'ru', | |
158 /* Sami (Lappish) */ 'smi' => 'sz', | |
159 /* Serbian */ 'scc' => 'sr', | |
160 /* Serbian */ 'srp' => 'sr', | |
161 /* Slovak */ 'slo' => 'sk', | |
162 /* Slovak */ 'slk' => 'sk', | |
163 /* Slovenian */ 'slv' => 'sl', | |
164 /* Sorbian */ 'wen' => 'sb', | |
165 /* Spanish (Spain - Traditional) */ 'spa' => 'es', | |
166 /* Swedish */ 'swe' => 'sv', | |
167 /* Thai */ 'tha' => 'th', | |
168 /* Tsonga */ 'tso' => 'ts', | |
169 /* Tswana */ 'tsn' => 'tn', | |
170 /* Turkish */ 'tur' => 'tr', | |
171 /* Ukrainian */ 'ukr' => 'uk', | |
172 /* Urdu */ 'urd' => 'ur', | |
173 /* Venda */ 'ven' => 've', | |
174 /* Vietnamese */ 'vie' => 'vi', | |
175 /* Welsh */ 'cym' => 'cy', | |
176 /* Xhosa */ 'xho' => 'xh', | |
177 /* Yiddish */ 'yid' => 'yi', | |
178 /* Zulu */ 'zul' => 'zu'); | |
179 | |
180 /** | |
181 * HTTP_ACCEPT_LANGUAGE catalog | |
182 * | |
183 * holds all information related to a language | |
184 * | |
185 * @var array | |
186 * @access private | |
187 */ | |
188 var $__l10nCatalog = array('af' => array('language' => 'Afrikaans', 'locale' => 'afr', 'localeFallback' => 'afr', 'charset' => 'utf-8', 'direction' => 'ltr'), | |
189 'ar' => array('language' => 'Arabic', 'locale' => 'ara', 'localeFallback' => 'ara', 'charset' => 'utf-8', 'direction' => 'rtl'), | |
190 'ar-ae' => array('language' => 'Arabic (U.A.E.)', 'locale' => 'ar_ae', 'localeFallback' => 'ara', 'charset' => 'utf-8', 'direction' => 'rtl'), | |
191 'ar-bh' => array('language' => 'Arabic (Bahrain)', 'locale' => 'ar_bh', 'localeFallback' => 'ara', 'charset' => 'utf-8', 'direction' => 'rtl'), | |
192 'ar-dz' => array('language' => 'Arabic (Algeria)', 'locale' => 'ar_dz', 'localeFallback' => 'ara', 'charset' => 'utf-8', 'direction' => 'rtl'), | |
193 'ar-eg' => array('language' => 'Arabic (Egypt)', 'locale' => 'ar_eg', 'localeFallback' => 'ara', 'charset' => 'utf-8', 'direction' => 'rtl'), | |
194 'ar-iq' => array('language' => 'Arabic (Iraq)', 'locale' => 'ar_iq', 'localeFallback' => 'ara', 'charset' => 'utf-8', 'direction' => 'rtl'), | |
195 'ar-jo' => array('language' => 'Arabic (Jordan)', 'locale' => 'ar_jo', 'localeFallback' => 'ara', 'charset' => 'utf-8', 'direction' => 'rtl'), | |
196 'ar-kw' => array('language' => 'Arabic (Kuwait)', 'locale' => 'ar_kw', 'localeFallback' => 'ara', 'charset' => 'utf-8', 'direction' => 'rtl'), | |
197 'ar-lb' => array('language' => 'Arabic (Lebanon)', 'locale' => 'ar_lb', 'localeFallback' => 'ara', 'charset' => 'utf-8', 'direction' => 'rtl'), | |
198 'ar-ly' => array('language' => 'Arabic (Libya)', 'locale' => 'ar_ly', 'localeFallback' => 'ara', 'charset' => 'utf-8', 'direction' => 'rtl'), | |
199 'ar-ma' => array('language' => 'Arabic (Morocco)', 'locale' => 'ar_ma', 'localeFallback' => 'ara', 'charset' => 'utf-8', 'direction' => 'rtl'), | |
200 'ar-om' => array('language' => 'Arabic (Oman)', 'locale' => 'ar_om', 'localeFallback' => 'ara', 'charset' => 'utf-8', 'direction' => 'rtl'), | |
201 'ar-qa' => array('language' => 'Arabic (Qatar)', 'locale' => 'ar_qa', 'localeFallback' => 'ara', 'charset' => 'utf-8', 'direction' => 'rtl'), | |
202 'ar-sa' => array('language' => 'Arabic (Saudi Arabia)', 'locale' => 'ar_sa', 'localeFallback' => 'ara', 'charset' => 'utf-8', 'direction' => 'rtl'), | |
203 'ar-sy' => array('language' => 'Arabic (Syria)', 'locale' => 'ar_sy', 'localeFallback' => 'ara', 'charset' => 'utf-8', 'direction' => 'rtl'), | |
204 'ar-tn' => array('language' => 'Arabic (Tunisia)', 'locale' => 'ar_tn', 'localeFallback' => 'ara', 'charset' => 'utf-8', 'direction' => 'rtl'), | |
205 'ar-ye' => array('language' => 'Arabic (Yemen)', 'locale' => 'ar_ye', 'localeFallback' => 'ara', 'charset' => 'utf-8', 'direction' => 'rtl'), | |
206 'be' => array('language' => 'Byelorussian', 'locale' => 'bel', 'localeFallback' => 'bel', 'charset' => 'utf-8', 'direction' => 'ltr'), | |
207 'bg' => array('language' => 'Bulgarian', 'locale' => 'bul', 'localeFallback' => 'bul', 'charset' => 'utf-8', 'direction' => 'ltr'), | |
208 'bs' => array('language' => 'Bosnian', 'locale' => 'bos', 'localeFallback' => 'bos', 'charset' => 'utf-8', 'direction' => 'ltr'), | |
209 'ca' => array('language' => 'Catalan', 'locale' => 'cat', 'localeFallback' => 'cat', 'charset' => 'utf-8', 'direction' => 'ltr'), | |
210 'cs' => array('language' => 'Czech', 'locale' => 'cze', 'localeFallback' => 'cze', 'charset' => 'utf-8', 'direction' => 'ltr'), | |
211 'da' => array('language' => 'Danish', 'locale' => 'dan', 'localeFallback' => 'dan', 'charset' => 'utf-8', 'direction' => 'ltr'), | |
212 'de' => array('language' => 'German (Standard)', 'locale' => 'deu', 'localeFallback' => 'deu', 'charset' => 'utf-8', 'direction' => 'ltr'), | |
213 'de-at' => array('language' => 'German (Austria)', 'locale' => 'de_at', 'localeFallback' => 'deu', 'charset' => 'utf-8', 'direction' => 'ltr'), | |
214 'de-ch' => array('language' => 'German (Swiss)', 'locale' => 'de_ch', 'localeFallback' => 'deu', 'charset' => 'utf-8', 'direction' => 'ltr'), | |
215 'de-de' => array('language' => 'German (Germany)', 'locale' => 'de_de', 'localeFallback' => 'deu', 'charset' => 'utf-8', 'direction' => 'ltr'), | |
216 'de-li' => array('language' => 'German (Liechtenstein)', 'locale' => 'de_li', 'localeFallback' => 'deu', 'charset' => 'utf-8', 'direction' => 'ltr'), | |
217 'de-lu' => array('language' => 'German (Luxembourg)', 'locale' => 'de_lu', 'localeFallback' => 'deu', 'charset' => 'utf-8', 'direction' => 'ltr'), | |
218 'e' => array('language' => 'Greek', 'locale' => 'gre', 'localeFallback' => 'gre', 'charset' => 'utf-8', 'direction' => 'ltr'), | |
219 'el' => array('language' => 'Greek', 'locale' => 'gre', 'localeFallback' => 'gre', 'charset' => 'utf-8', 'direction' => 'ltr'), | |
220 'en' => array('language' => 'English', 'locale' => 'eng', 'localeFallback' => 'eng', 'charset' => 'utf-8', 'direction' => 'ltr'), | |
221 'en-au' => array('language' => 'English (Australian)', 'locale' => 'en_au', 'localeFallback' => 'eng', 'charset' => 'utf-8', 'direction' => 'ltr'), | |
222 'en-bz' => array('language' => 'English (Belize)', 'locale' => 'en_bz', 'localeFallback' => 'eng', 'charset' => 'utf-8', 'direction' => 'ltr'), | |
223 'en-ca' => array('language' => 'English (Canadian)', 'locale' => 'en_ca', 'localeFallback' => 'eng', 'charset' => 'utf-8', 'direction' => 'ltr'), | |
224 'en-gb' => array('language' => 'English (British)', 'locale' => 'en_gb', 'localeFallback' => 'eng', 'charset' => 'utf-8', 'direction' => 'ltr'), | |
225 'en-ie' => array('language' => 'English (Ireland)', 'locale' => 'en_ie', 'localeFallback' => 'eng', 'charset' => 'utf-8', 'direction' => 'ltr'), | |
226 'en-jm' => array('language' => 'English (Jamaica)', 'locale' => 'en_jm', 'localeFallback' => 'eng', 'charset' => 'utf-8', 'direction' => 'ltr'), | |
227 'en-nz' => array('language' => 'English (New Zealand)', 'locale' => 'en_nz', 'localeFallback' => 'eng', 'charset' => 'utf-8', 'direction' => 'ltr'), | |
228 'en-tt' => array('language' => 'English (Trinidad)', 'locale' => 'en_tt', 'localeFallback' => 'eng', 'charset' => 'utf-8', 'direction' => 'ltr'), | |
229 'en-us' => array('language' => 'English (United States)', 'locale' => 'en_us', 'localeFallback' => 'eng', 'charset' => 'utf-8', 'direction' => 'ltr'), | |
230 'en-za' => array('language' => 'English (South Africa)', 'locale' => 'en_za', 'localeFallback' => 'eng', 'charset' => 'utf-8', 'direction' => 'ltr'), | |
231 'es' => array('language' => 'Spanish (Spain - Traditional)', 'locale' => 'spa', 'localeFallback' => 'spa', 'charset' => 'utf-8', 'direction' => 'ltr'), | |
232 'es-ar' => array('language' => 'Spanish (Argentina)', 'locale' => 'es_ar', 'localeFallback' => 'spa', 'charset' => 'utf-8', 'direction' => 'ltr'), | |
233 'es-bo' => array('language' => 'Spanish (Bolivia)', 'locale' => 'es_bo', 'localeFallback' => 'spa', 'charset' => 'utf-8', 'direction' => 'ltr'), | |
234 'es-cl' => array('language' => 'Spanish (Chile)', 'locale' => 'es_cl', 'localeFallback' => 'spa', 'charset' => 'utf-8', 'direction' => 'ltr'), | |
235 'es-co' => array('language' => 'Spanish (Colombia)', 'locale' => 'es_co', 'localeFallback' => 'spa', 'charset' => 'utf-8', 'direction' => 'ltr'), | |
236 'es-cr' => array('language' => 'Spanish (Costa Rica)', 'locale' => 'es_cr', 'localeFallback' => 'spa', 'charset' => 'utf-8', 'direction' => 'ltr'), | |
237 'es-do' => array('language' => 'Spanish (Dominican Republic)', 'locale' => 'es_do', 'localeFallback' => 'spa', 'charset' => 'utf-8', 'direction' => 'ltr'), | |
238 'es-ec' => array('language' => 'Spanish (Ecuador)', 'locale' => 'es_ec', 'localeFallback' => 'spa', 'charset' => 'utf-8', 'direction' => 'ltr'), | |
239 'es-es' => array('language' => 'Spanish (Spain)', 'locale' => 'es_es', 'localeFallback' => 'spa', 'charset' => 'utf-8', 'direction' => 'ltr'), | |
240 'es-gt' => array('language' => 'Spanish (Guatemala)', 'locale' => 'es_gt', 'localeFallback' => 'spa', 'charset' => 'utf-8', 'direction' => 'ltr'), | |
241 'es-hn' => array('language' => 'Spanish (Honduras)', 'locale' => 'es_hn', 'localeFallback' => 'spa', 'charset' => 'utf-8', 'direction' => 'ltr'), | |
242 'es-mx' => array('language' => 'Spanish (Mexican)', 'locale' => 'es_mx', 'localeFallback' => 'spa', 'charset' => 'utf-8', 'direction' => 'ltr'), | |
243 'es-ni' => array('language' => 'Spanish (Nicaragua)', 'locale' => 'es_ni', 'localeFallback' => 'spa', 'charset' => 'utf-8', 'direction' => 'ltr'), | |
244 'es-pa' => array('language' => 'Spanish (Panama)', 'locale' => 'es_pa', 'localeFallback' => 'spa', 'charset' => 'utf-8', 'direction' => 'ltr'), | |
245 'es-pe' => array('language' => 'Spanish (Peru)', 'locale' => 'es_pe', 'localeFallback' => 'spa', 'charset' => 'utf-8', 'direction' => 'ltr'), | |
246 'es-pr' => array('language' => 'Spanish (Puerto Rico)', 'locale' => 'es_pr', 'localeFallback' => 'spa', 'charset' => 'utf-8', 'direction' => 'ltr'), | |
247 'es-py' => array('language' => 'Spanish (Paraguay)', 'locale' => 'es_py', 'localeFallback' => 'spa', 'charset' => 'utf-8', 'direction' => 'ltr'), | |
248 'es-sv' => array('language' => 'Spanish (El Salvador)', 'locale' => 'es_sv', 'localeFallback' => 'spa', 'charset' => 'utf-8', 'direction' => 'ltr'), | |
249 'es-uy' => array('language' => 'Spanish (Uruguay)', 'locale' => 'es_uy', 'localeFallback' => 'spa', 'charset' => 'utf-8', 'direction' => 'ltr'), | |
250 'es-ve' => array('language' => 'Spanish (Venezuela)', 'locale' => 'es_ve', 'localeFallback' => 'spa', 'charset' => 'utf-8', 'direction' => 'ltr'), | |
251 'et' => array('language' => 'Estonian', 'locale' => 'est', 'localeFallback' => 'est', 'charset' => 'utf-8', 'direction' => 'ltr'), | |
252 'eu' => array('language' => 'Basque', 'locale' => 'baq', 'localeFallback' => 'baq', 'charset' => 'utf-8', 'direction' => 'ltr'), | |
253 'fa' => array('language' => 'Farsi', 'locale' => 'per', 'localeFallback' => 'per', 'charset' => 'utf-8', 'direction' => 'rtl'), | |
254 'fi' => array('language' => 'Finnish', 'locale' => 'fin', 'localeFallback' => 'fin', 'charset' => 'utf-8', 'direction' => 'ltr'), | |
255 'fo' => array('language' => 'Faeroese', 'locale' => 'fao', 'localeFallback' => 'fao', 'charset' => 'utf-8', 'direction' => 'ltr'), | |
256 'fr' => array('language' => 'French (Standard)', 'locale' => 'fre', 'localeFallback' => 'fre', 'charset' => 'utf-8', 'direction' => 'ltr'), | |
257 'fr-be' => array('language' => 'French (Belgium)', 'locale' => 'fr_be', 'localeFallback' => 'fre', 'charset' => 'utf-8', 'direction' => 'ltr'), | |
258 'fr-ca' => array('language' => 'French (Canadian)', 'locale' => 'fr_ca', 'localeFallback' => 'fre', 'charset' => 'utf-8', 'direction' => 'ltr'), | |
259 'fr-ch' => array('language' => 'French (Swiss)', 'locale' => 'fr_ch', 'localeFallback' => 'fre', 'charset' => 'utf-8', 'direction' => 'ltr'), | |
260 'fr-fr' => array('language' => 'French (France)', 'locale' => 'fr_fr', 'localeFallback' => 'fre', 'charset' => 'utf-8', 'direction' => 'ltr'), | |
261 'fr-lu' => array('language' => 'French (Luxembourg)', 'locale' => 'fr_lu', 'localeFallback' => 'fre', 'charset' => 'utf-8', 'direction' => 'ltr'), | |
262 'ga' => array('language' => 'Irish', 'locale' => 'gle', 'localeFallback' => 'gle', 'charset' => 'utf-8', 'direction' => 'ltr'), | |
263 'gd' => array('language' => 'Gaelic (Scots)', 'locale' => 'gla', 'localeFallback' => 'gla', 'charset' => 'utf-8', 'direction' => 'ltr'), | |
264 'gd-ie' => array('language' => 'Gaelic (Irish)', 'locale' => 'gd_ie', 'localeFallback' => 'gla', 'charset' => 'utf-8', 'direction' => 'ltr'), | |
265 'gl' => array('language' => 'Galician', 'locale' => 'glg', 'localeFallback' => 'glg', 'charset' => 'utf-8', 'direction' => 'ltr'), | |
266 'he' => array('language' => 'Hebrew', 'locale' => 'heb', 'localeFallback' => 'heb', 'charset' => 'utf-8', 'direction' => 'rtl'), | |
267 'hi' => array('language' => 'Hindi', 'locale' => 'hin', 'localeFallback' => 'hin', 'charset' => 'utf-8', 'direction' => 'ltr'), | |
268 'hr' => array('language' => 'Croatian', 'locale' => 'hrv', 'localeFallback' => 'hrv', 'charset' => 'utf-8', 'direction' => 'ltr'), | |
269 'hu' => array('language' => 'Hungarian', 'locale' => 'hun', 'localeFallback' => 'hun', 'charset' => 'utf-8', 'direction' => 'ltr'), | |
270 'hy' => array('language' => 'Armenian - Armenia', 'locale' => 'hye', 'localeFallback' => 'hye', 'charset' => 'utf-8', 'direction' => 'ltr'), | |
271 'id' => array('language' => 'Indonesian', 'locale' => 'ind', 'localeFallback' => 'ind', 'charset' => 'utf-8', 'direction' => 'ltr'), | |
272 'in' => array('language' => 'Indonesian', 'locale' => 'ind', 'localeFallback' => 'ind', 'charset' => 'utf-8', 'direction' => 'ltr'), | |
273 'is' => array('language' => 'Icelandic', 'locale' => 'ice', 'localeFallback' => 'ice', 'charset' => 'utf-8', 'direction' => 'ltr'), | |
274 'it' => array('language' => 'Italian', 'locale' => 'ita', 'localeFallback' => 'ita', 'charset' => 'utf-8', 'direction' => 'ltr'), | |
275 'it-ch' => array('language' => 'Italian (Swiss) ', 'locale' => 'it_ch', 'localeFallback' => 'ita', 'charset' => 'utf-8', 'direction' => 'ltr'), | |
276 'ja' => array('language' => 'Japanese', 'locale' => 'jpn', 'localeFallback' => 'jpn', 'charset' => 'utf-8', 'direction' => 'ltr'), | |
277 'ko' => array('language' => 'Korean', 'locale' => 'kor', 'localeFallback' => 'kor', 'charset' => 'kr', 'direction' => 'ltr'), | |
278 'ko-kp' => array('language' => 'Korea (North)', 'locale' => 'ko_kp', 'localeFallback' => 'kor', 'charset' => 'kr', 'direction' => 'ltr'), | |
279 'ko-kr' => array('language' => 'Korea (South)', 'locale' => 'ko_kr', 'localeFallback' => 'kor', 'charset' => 'kr', 'direction' => 'ltr'), | |
280 'koi8-r' => array('language' => 'Russian', 'locale' => 'koi8_r', 'localeFallback' => 'rus', 'charset' => 'koi8-r', 'direction' => 'ltr'), | |
281 'lt' => array('language' => 'Lithuanian', 'locale' => 'lit', 'localeFallback' => 'lit', 'charset' => 'utf-8', 'direction' => 'ltr'), | |
282 'lv' => array('language' => 'Latvian', 'locale' => 'lav', 'localeFallback' => 'lav', 'charset' => 'utf-8', 'direction' => 'ltr'), | |
283 'mk' => array('language' => 'FYRO Macedonian', 'locale' => 'mk', 'localeFallback' => 'mac', 'charset' => 'utf-8', 'direction' => 'ltr'), | |
284 'mk-mk' => array('language' => 'Macedonian', 'locale' => 'mk_mk', 'localeFallback' => 'mac', 'charset' => 'utf-8', 'direction' => 'ltr'), | |
285 'ms' => array('language' => 'Malaysian', 'locale' => 'may', 'localeFallback' => 'may', 'charset' => 'utf-8', 'direction' => 'ltr'), | |
286 'mt' => array('language' => 'Maltese', 'locale' => 'mlt', 'localeFallback' => 'mlt', 'charset' => 'utf-8', 'direction' => 'ltr'), | |
287 'n' => array('language' => 'Dutch (Standard)', 'locale' => 'dut', 'localeFallback' => 'dut', 'charset' => 'utf-8', 'direction' => 'ltr'), | |
288 'nb' => array('language' => 'Norwegian Bokmal', 'locale' => 'nob', 'localeFallback' => 'nor', 'charset' => 'utf-8', 'direction' => 'ltr'), | |
289 'nl' => array('language' => 'Dutch (Standard)', 'locale' => 'dut', 'localeFallback' => 'dut', 'charset' => 'utf-8', 'direction' => 'ltr'), | |
290 'nl-be' => array('language' => 'Dutch (Belgium)', 'locale' => 'nl_be', 'localeFallback' => 'dut', 'charset' => 'utf-8', 'direction' => 'ltr'), | |
291 'nn' => array('language' => 'Norwegian Nynorsk', 'locale' => 'nno', 'localeFallback' => 'nor', 'charset' => 'utf-8', 'direction' => 'ltr'), | |
292 'no' => array('language' => 'Norwegian', 'locale' => 'nor', 'localeFallback' => 'nor', 'charset' => 'utf-8', 'direction' => 'ltr'), | |
293 'p' => array('language' => 'Polish', 'locale' => 'pol', 'localeFallback' => 'pol', 'charset' => 'utf-8', 'direction' => 'ltr'), | |
294 'pl' => array('language' => 'Polish', 'locale' => 'pol', 'localeFallback' => 'pol', 'charset' => 'utf-8', 'direction' => 'ltr'), | |
295 'pt' => array('language' => 'Portuguese (Portugal)', 'locale' => 'por', 'localeFallback' => 'por', 'charset' => 'utf-8', 'direction' => 'ltr'), | |
296 'pt-br' => array('language' => 'Portuguese (Brazil)', 'locale' => 'pt_br', 'localeFallback' => 'por', 'charset' => 'utf-8', 'direction' => 'ltr'), | |
297 'rm' => array('language' => 'Rhaeto-Romanic', 'locale' => 'roh', 'localeFallback' => 'roh', 'charset' => 'utf-8', 'direction' => 'ltr'), | |
298 'ro' => array('language' => 'Romanian', 'locale' => 'rum', 'localeFallback' => 'rum', 'charset' => 'utf-8', 'direction' => 'ltr'), | |
299 'ro-mo' => array('language' => 'Romanian (Moldavia)', 'locale' => 'ro_mo', 'localeFallback' => 'rum', 'charset' => 'utf-8', 'direction' => 'ltr'), | |
300 'ru' => array('language' => 'Russian', 'locale' => 'rus', 'localeFallback' => 'rus', 'charset' => 'utf-8', 'direction' => 'ltr'), | |
301 'ru-mo' => array('language' => 'Russian (Moldavia)', 'locale' => 'ru_mo', 'localeFallback' => 'rus', 'charset' => 'utf-8', 'direction' => 'ltr'), | |
302 'sb' => array('language' => 'Sorbian', 'locale' => 'wen', 'localeFallback' => 'wen', 'charset' => 'utf-8', 'direction' => 'ltr'), | |
303 'sk' => array('language' => 'Slovak', 'locale' => 'slo', 'localeFallback' => 'slo', 'charset' => 'utf-8', 'direction' => 'ltr'), | |
304 'sl' => array('language' => 'Slovenian', 'locale' => 'slv', 'localeFallback' => 'slv', 'charset' => 'utf-8', 'direction' => 'ltr'), | |
305 'sq' => array('language' => 'Albanian', 'locale' => 'alb', 'localeFallback' => 'alb', 'charset' => 'utf-8', 'direction' => 'ltr'), | |
306 'sr' => array('language' => 'Serbian', 'locale' => 'scc', 'localeFallback' => 'scc', 'charset' => 'utf-8', 'direction' => 'ltr'), | |
307 'sv' => array('language' => 'Swedish', 'locale' => 'swe', 'localeFallback' => 'swe', 'charset' => 'utf-8', 'direction' => 'ltr'), | |
308 'sv-fi' => array('language' => 'Swedish (Finland)', 'locale' => 'sv_fi', 'localeFallback' => 'swe', 'charset' => 'utf-8', 'direction' => 'ltr'), | |
309 'sx' => array('language' => 'Sutu', 'locale' => 'sx', 'localeFallback' => 'sx', 'charset' => 'utf-8', 'direction' => 'ltr'), | |
310 'sz' => array('language' => 'Sami (Lappish)', 'locale' => 'smi', 'localeFallback' => 'smi', 'charset' => 'utf-8', 'direction' => 'ltr'), | |
311 'th' => array('language' => 'Thai', 'locale' => 'tha', 'localeFallback' => 'tha', 'charset' => 'utf-8', 'direction' => 'ltr'), | |
312 'tn' => array('language' => 'Tswana', 'locale' => 'tsn', 'localeFallback' => 'tsn', 'charset' => 'utf-8', 'direction' => 'ltr'), | |
313 'tr' => array('language' => 'Turkish', 'locale' => 'tur', 'localeFallback' => 'tur', 'charset' => 'utf-8', 'direction' => 'ltr'), | |
314 'ts' => array('language' => 'Tsonga', 'locale' => 'tso', 'localeFallback' => 'tso', 'charset' => 'utf-8', 'direction' => 'ltr'), | |
315 'uk' => array('language' => 'Ukrainian', 'locale' => 'ukr', 'localeFallback' => 'ukr', 'charset' => 'utf-8', 'direction' => 'ltr'), | |
316 'ur' => array('language' => 'Urdu', 'locale' => 'urd', 'localeFallback' => 'urd', 'charset' => 'utf-8', 'direction' => 'rtl'), | |
317 've' => array('language' => 'Venda', 'locale' => 'ven', 'localeFallback' => 'ven', 'charset' => 'utf-8', 'direction' => 'ltr'), | |
318 'vi' => array('language' => 'Vietnamese', 'locale' => 'vie', 'localeFallback' => 'vie', 'charset' => 'utf-8', 'direction' => 'ltr'), | |
319 'cy' => array('language' => 'Welsh', 'locale' => 'cym', 'localeFallback' => 'cym', 'charset' => 'utf-8', 'direction' => 'ltr'), | |
320 'xh' => array('language' => 'Xhosa', 'locale' => 'xho', 'localeFallback' => 'xho', 'charset' => 'utf-8', 'direction' => 'ltr'), | |
321 'yi' => array('language' => 'Yiddish', 'locale' => 'yid', 'localeFallback' => 'yid', 'charset' => 'utf-8', 'direction' => 'ltr'), | |
322 'zh' => array('language' => 'Chinese', 'locale' => 'chi', 'localeFallback' => 'chi', 'charset' => 'utf-8', 'direction' => 'ltr'), | |
323 'zh-cn' => array('language' => 'Chinese (PRC)', 'locale' => 'zh_cn', 'localeFallback' => 'chi', 'charset' => 'GB2312', 'direction' => 'ltr'), | |
324 'zh-hk' => array('language' => 'Chinese (Hong Kong)', 'locale' => 'zh_hk', 'localeFallback' => 'chi', 'charset' => 'utf-8', 'direction' => 'ltr'), | |
325 'zh-sg' => array('language' => 'Chinese (Singapore)', 'locale' => 'zh_sg', 'localeFallback' => 'chi', 'charset' => 'utf-8', 'direction' => 'ltr'), | |
326 'zh-tw' => array('language' => 'Chinese (Taiwan)', 'locale' => 'zh_tw', 'localeFallback' => 'chi', 'charset' => 'utf-8', 'direction' => 'ltr'), | |
327 'zu' => array('language' => 'Zulu', 'locale' => 'zul', 'localeFallback' => 'zul', 'charset' => 'utf-8', 'direction' => 'ltr')); | |
328 | |
329 /** | |
330 * Class constructor | |
331 */ | |
332 function __construct() { | |
333 if (defined('DEFAULT_LANGUAGE')) { | |
334 $this->default = DEFAULT_LANGUAGE; | |
335 } | |
336 parent::__construct(); | |
337 } | |
338 | |
339 /** | |
340 * Gets the settings for $language. | |
341 * If $language is null it attempt to get settings from L10n::__autoLanguage(); if this fails | |
342 * the method will get the settings from L10n::__setLanguage(); | |
343 * | |
344 * @param string $language Language (if null will use DEFAULT_LANGUAGE if defined) | |
345 * @access public | |
346 */ | |
347 function get($language = null) { | |
348 if ($language !== null) { | |
349 return $this->__setLanguage($language); | |
350 } elseif ($this->__autoLanguage() === false) { | |
351 return $this->__setLanguage(); | |
352 } | |
353 } | |
354 | |
355 /** | |
356 * Sets the class vars to correct values for $language. | |
357 * If $language is null it will use the DEFAULT_LANGUAGE if defined | |
358 * | |
359 * @param string $language Language (if null will use DEFAULT_LANGUAGE if defined) | |
360 * @access private | |
361 */ | |
362 function __setLanguage($language = null) { | |
363 $langKey = null; | |
364 if ($language !== null && isset($this->__l10nMap[$language]) && isset($this->__l10nCatalog[$this->__l10nMap[$language]])) { | |
365 $langKey = $this->__l10nMap[$language]; | |
366 } else if ($language !== null && isset($this->__l10nCatalog[$language])) { | |
367 $langKey = $language; | |
368 } else if (defined('DEFAULT_LANGUAGE')) { | |
369 $langKey = $language = DEFAULT_LANGUAGE; | |
370 } | |
371 | |
372 if ($langKey !== null && isset($this->__l10nCatalog[$langKey])) { | |
373 $this->language = $this->__l10nCatalog[$langKey]['language']; | |
374 $this->languagePath = array( | |
375 $this->__l10nCatalog[$langKey]['locale'], | |
376 $this->__l10nCatalog[$langKey]['localeFallback'] | |
377 ); | |
378 $this->lang = $language; | |
379 $this->locale = $this->__l10nCatalog[$langKey]['locale']; | |
380 $this->charset = $this->__l10nCatalog[$langKey]['charset']; | |
381 $this->direction = $this->__l10nCatalog[$langKey]['direction']; | |
382 } else { | |
383 $this->lang = $language; | |
384 $this->languagePath = array($language); | |
385 } | |
386 | |
387 if ($this->default) { | |
388 if (isset($this->__l10nMap[$this->default]) && isset($this->__l10nCatalog[$this->__l10nMap[$this->default]])) { | |
389 $this->languagePath[] = $this->__l10nCatalog[$this->__l10nMap[$this->default]]['localeFallback']; | |
390 } else if (isset($this->__l10nCatalog[$this->default])) { | |
391 $this->languagePath[] = $this->__l10nCatalog[$this->default]['localeFallback']; | |
392 } | |
393 } | |
394 $this->found = true; | |
395 | |
396 if (Configure::read('Config.language') === null) { | |
397 Configure::write('Config.language', $this->lang); | |
398 } | |
399 | |
400 if ($language) { | |
401 return $language; | |
402 } | |
403 } | |
404 | |
405 /** | |
406 * Attempts to find the locale settings based on the HTTP_ACCEPT_LANGUAGE variable | |
407 * | |
408 * @return boolean Success | |
409 * @access private | |
410 */ | |
411 function __autoLanguage() { | |
412 $_detectableLanguages = preg_split('/[,;]/', env('HTTP_ACCEPT_LANGUAGE')); | |
413 foreach ($_detectableLanguages as $key => $langKey) { | |
414 $langKey = strtolower($langKey); | |
415 if (strpos($langKey, '_') !== false) { | |
416 $langKey = str_replace('_', '-', $langKey); | |
417 } | |
418 | |
419 if (isset($this->__l10nCatalog[$langKey])) { | |
420 $this->__setLanguage($langKey); | |
421 return true; | |
422 } else if (strpos($langKey, '-') !== false) { | |
423 $langKey = substr($langKey, 0, 2); | |
424 if (isset($this->__l10nCatalog[$langKey])) { | |
425 $this->__setLanguage($langKey); | |
426 return true; | |
427 } | |
428 } | |
429 } | |
430 return false; | |
431 } | |
432 | |
433 /** | |
434 * Attempts to find locale for language, or language for locale | |
435 * | |
436 * @param mixed $mixed 2/3 char string (language/locale), array of those strings, or null | |
437 * @return mixed string language/locale, array of those values, whole map as an array, | |
438 * or false when language/locale doesn't exist | |
439 * @access public | |
440 */ | |
441 function map($mixed = null) { | |
442 if (is_array($mixed)) { | |
443 $result = array(); | |
444 foreach ($mixed as $_mixed) { | |
445 if ($_result = $this->map($_mixed)) { | |
446 $result[$_mixed] = $_result; | |
447 } | |
448 } | |
449 return $result; | |
450 } else if (is_string($mixed)) { | |
451 if (strlen($mixed) === 2 && in_array($mixed, $this->__l10nMap)) { | |
452 return array_search($mixed, $this->__l10nMap); | |
453 } else if (isset($this->__l10nMap[$mixed])) { | |
454 return $this->__l10nMap[$mixed]; | |
455 } | |
456 return false; | |
457 } | |
458 return $this->__l10nMap; | |
459 } | |
460 | |
461 /** | |
462 * Attempts to find catalog record for requested language | |
463 * | |
464 * @param mixed $language string requested language, array of requested languages, or null for whole catalog | |
465 * @return mixed array catalog record for requested language, array of catalog records, whole catalog, | |
466 * or false when language doesn't exist | |
467 * @access public | |
468 */ | |
469 function catalog($language = null) { | |
470 if (is_array($language)) { | |
471 $result = array(); | |
472 foreach ($language as $_language) { | |
473 if ($_result = $this->catalog($_language)) { | |
474 $result[$_language] = $_result; | |
475 } | |
476 } | |
477 return $result; | |
478 } else if (is_string($language)) { | |
479 if (isset($this->__l10nCatalog[$language])) { | |
480 return $this->__l10nCatalog[$language]; | |
481 } else if (isset($this->__l10nMap[$language]) && isset($this->__l10nCatalog[$this->__l10nMap[$language]])) { | |
482 return $this->__l10nCatalog[$this->__l10nMap[$language]]; | |
483 } | |
484 return false; | |
485 } | |
486 return $this->__l10nCatalog; | |
487 } | |
488 } |