Passed
Push — master ( e06ccd...891ac9 )
by Vítězslav
03:55
created

Locale::setTextDomain()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 3
Code Lines 1

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 2
CRAP Score 1

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 1
eloc 1
c 1
b 0
f 0
nc 1
nop 1
dl 0
loc 3
ccs 2
cts 2
cp 1
crap 1
rs 10
1
<?php
2
/**
3
 * Internationalization helpers
4
 *
5
 * @author    Vitex <[email protected]>
6
 * @copyright 2018 [email protected] (G)
7
 */
8
9
namespace Ease;
10
11
/**
12
 * Ease Locale support
13
 *
14
 * @author vitex
15
 */
16
class Locale
17
{
18
    /**
19
     * @var Locale Singleton is stored here
20
     */
21
    public static $_instance;
22
23
    /**
24
     * Current Used locale code
25
     * @var string 
26
     */
27
    public static $localeUsed = null;
28
29
    /**
30
     * i18n files location
31
     * @var string dirpath 
32
     */
33
    public static $i18n = null;
34
35
    /**
36
     * GetText Domain
37
     * @var string 
38
     */
39
    public static $textDomain = null;
40
41
    /**
42
     * All Language Codes => languages
43
     * @var array
44
     */
45
    public static $alllngs = [
46
        "af_NA" => "Afrikaans (Namibia)",
47
        "af_ZA" => "Afrikaans (South Africa)",
48
        "af" => "Afrikaans",
49
        "ak_GH" => "Akan (Ghana)",
50
        "ak" => "Akan",
51
        "sq_AL" => "Albanian (Albania)",
52
        "sq" => "Albanian",
53
        "am_ET" => "Amharic (Ethiopia)",
54
        "am" => "Amharic",
55
        "ar_DZ" => "Arabic (Algeria)",
56
        "ar_BH" => "Arabic (Bahrain)",
57
        "ar_EG" => "Arabic (Egypt)",
58
        "ar_IQ" => "Arabic (Iraq)",
59
        "ar_JO" => "Arabic (Jordan)",
60
        "ar_KW" => "Arabic (Kuwait)",
61
        "ar_LB" => "Arabic (Lebanon)",
62
        "ar_LY" => "Arabic (Libya)",
63
        "ar_MA" => "Arabic (Morocco)",
64
        "ar_OM" => "Arabic (Oman)",
65
        "ar_QA" => "Arabic (Qatar)",
66
        "ar_SA" => "Arabic (Saudi Arabia)",
67
        "ar_SD" => "Arabic (Sudan)",
68
        "ar_SY" => "Arabic (Syria)",
69
        "ar_TN" => "Arabic (Tunisia)",
70
        "ar_AE" => "Arabic (United Arab Emirates)",
71
        "ar_YE" => "Arabic (Yemen)",
72
        "ar" => "Arabic",
73
        "hy_AM" => "Armenian (Armenia)",
74
        "hy" => "Armenian",
75
        "as_IN" => "Assamese (India)",
76
        "as" => "Assamese",
77
        "asa_TZ" => "Asu (Tanzania)",
78
        "asa" => "Asu",
79
        "az_Cyrl" => "Azerbaijani (Cyrillic)",
80
        "az_Cyrl_AZ" => "Azerbaijani (Cyrillic, Azerbaijan)",
81
        "az_Latn" => "Azerbaijani (Latin)",
82
        "az_Latn_AZ" => "Azerbaijani (Latin, Azerbaijan)",
83
        "az" => "Azerbaijani",
84
        "bm_ML" => "Bambara (Mali)",
85
        "bm" => "Bambara",
86
        "eu_ES" => "Basque (Spain)",
87
        "eu" => "Basque",
88
        "be_BY" => "Belarusian (Belarus)",
89
        "be" => "Belarusian",
90
        "bem_ZM" => "Bemba (Zambia)",
91
        "bem" => "Bemba",
92
        "bez_TZ" => "Bena (Tanzania)",
93
        "bez" => "Bena",
94
        "bn_BD" => "Bengali (Bangladesh)",
95
        "bn_IN" => "Bengali (India)",
96
        "bn" => "Bengali",
97
        "bs_BA" => "Bosnian (Bosnia and Herzegovina)",
98
        "bs" => "Bosnian",
99
        "bg_BG" => "Bulgarian (Bulgaria)",
100
        "bg" => "Bulgarian",
101
        "my_MM" => "Burmese (Myanmar [Burma])",
102
        "my" => "Burmese",
103
        "ca_ES" => "Catalan (Spain)",
104
        "ca" => "Catalan",
105
        "tzm_Latn" => "Central Morocco Tamazight (Latin)",
106
        "tzm_Latn_MA" => "Central Morocco Tamazight (Latin, Morocco)",
107
        "tzm" => "Central Morocco Tamazight",
108
        "chr_US" => "Cherokee (United States)",
109
        "chr" => "Cherokee",
110
        "cgg_UG" => "Chiga (Uganda)",
111
        "cgg" => "Chiga",
112
        "zh_Hans" => "Chinese (Simplified Han)",
113
        "zh_Hans_CN" => "Chinese (Simplified Han, China)",
114
        "zh_Hans_HK" => "Chinese (Simplified Han, Hong Kong SAR China)",
115
        "zh_Hans_MO" => "Chinese (Simplified Han, Macau SAR China)",
116
        "zh_Hans_SG" => "Chinese (Simplified Han, Singapore)",
117
        "zh_Hant" => "Chinese (Traditional Han)",
118
        "zh_Hant_HK" => "Chinese (Traditional Han, Hong Kong SAR China)",
119
        "zh_Hant_MO" => "Chinese (Traditional Han, Macau SAR China)",
120
        "zh_Hant_TW" => "Chinese (Traditional Han, Taiwan)",
121
        "zh" => "Chinese",
122
        "kw_GB" => "Cornish (United Kingdom)",
123
        "kw" => "Cornish",
124
        "hr_HR" => "Croatian (Croatia)",
125
        "hr" => "Croatian",
126
        "cs_CZ" => "Czech (Czech Republic)",
127
        "cs" => "Czech",
128
        "da_DK" => "Danish (Denmark)",
129
        "da" => "Danish",
130
        "nl_BE" => "Dutch (Belgium)",
131
        "nl_NL" => "Dutch (Netherlands)",
132
        "nl" => "Dutch",
133
        "ebu_KE" => "Embu (Kenya)",
134
        "ebu" => "Embu",
135
        "en_AS" => "English (American Samoa)",
136
        "en_AU" => "English (Australia)",
137
        "en_BE" => "English (Belgium)",
138
        "en_BZ" => "English (Belize)",
139
        "en_BW" => "English (Botswana)",
140
        "en_CA" => "English (Canada)",
141
        "en_GU" => "English (Guam)",
142
        "en_HK" => "English (Hong Kong SAR China)",
143
        "en_IN" => "English (India)",
144
        "en_IE" => "English (Ireland)",
145
        "en_JM" => "English (Jamaica)",
146
        "en_MT" => "English (Malta)",
147
        "en_MH" => "English (Marshall Islands)",
148
        "en_MU" => "English (Mauritius)",
149
        "en_NA" => "English (Namibia)",
150
        "en_NZ" => "English (New Zealand)",
151
        "en_MP" => "English (Northern Mariana Islands)",
152
        "en_PK" => "English (Pakistan)",
153
        "en_PH" => "English (Philippines)",
154
        "en_SG" => "English (Singapore)",
155
        "en_ZA" => "English (South Africa)",
156
        "en_TT" => "English (Trinidad and Tobago)",
157
        "en_UM" => "English (U.S. Minor Outlying Islands)",
158
        "en_VI" => "English (U.S. Virgin Islands)",
159
        "en_GB" => "English (United Kingdom)",
160
        "en_US" => "English (United States)",
161
        "en_ZW" => "English (Zimbabwe)",
162
        "en" => "English",
163
        "eo" => "Esperanto",
164
        "et_EE" => "Estonian (Estonia)",
165
        "et" => "Estonian",
166
        "ee_GH" => "Ewe (Ghana)",
167
        "ee_TG" => "Ewe (Togo)",
168
        "ee" => "Ewe",
169
        "fo_FO" => "Faroese (Faroe Islands)",
170
        "fo" => "Faroese",
171
        "fil_PH" => "Filipino (Philippines)",
172
        "fil" => "Filipino",
173
        "fi_FI" => "Finnish (Finland)",
174
        "fi" => "Finnish",
175
        "fr_BE" => "French (Belgium)",
176
        "fr_BJ" => "French (Benin)",
177
        "fr_BF" => "French (Burkina Faso)",
178
        "fr_BI" => "French (Burundi)",
179
        "fr_CM" => "French (Cameroon)",
180
        "fr_CA" => "French (Canada)",
181
        "fr_CF" => "French (Central African Republic)",
182
        "fr_TD" => "French (Chad)",
183
        "fr_KM" => "French (Comoros)",
184
        "fr_CG" => "French (Congo - Brazzaville)",
185
        "fr_CD" => "French (Congo - Kinshasa)",
186
        "fr_CI" => "French (Côte d’Ivoire)",
187
        "fr_DJ" => "French (Djibouti)",
188
        "fr_GQ" => "French (Equatorial Guinea)",
189
        "fr_FR" => "French (France)",
190
        "fr_GA" => "French (Gabon)",
191
        "fr_GP" => "French (Guadeloupe)",
192
        "fr_GN" => "French (Guinea)",
193
        "fr_LU" => "French (Luxembourg)",
194
        "fr_MG" => "French (Madagascar)",
195
        "fr_ML" => "French (Mali)",
196
        "fr_MQ" => "French (Martinique)",
197
        "fr_MC" => "French (Monaco)",
198
        "fr_NE" => "French (Niger)",
199
        "fr_RW" => "French (Rwanda)",
200
        "fr_RE" => "French (Réunion)",
201
        "fr_BL" => "French (Saint Barthélemy)",
202
        "fr_MF" => "French (Saint Martin)",
203
        "fr_SN" => "French (Senegal)",
204
        "fr_CH" => "French (Switzerland)",
205
        "fr_TG" => "French (Togo)",
206
        "fr" => "French",
207
        "ff_SN" => "Fulah (Senegal)",
208
        "ff" => "Fulah",
209
        "gl_ES" => "Galician (Spain)",
210
        "gl" => "Galician",
211
        "lg_UG" => "Ganda (Uganda)",
212
        "lg" => "Ganda",
213
        "ka_GE" => "Georgian (Georgia)",
214
        "ka" => "Georgian",
215
        "de_AT" => "German (Austria)",
216
        "de_BE" => "German (Belgium)",
217
        "de_DE" => "German (Germany)",
218
        "de_LI" => "German (Liechtenstein)",
219
        "de_LU" => "German (Luxembourg)",
220
        "de_CH" => "German (Switzerland)",
221
        "de" => "German",
222
        "el_CY" => "Greek (Cyprus)",
223
        "el_GR" => "Greek (Greece)",
224
        "el" => "Greek",
225
        "gu_IN" => "Gujarati (India)",
226
        "gu" => "Gujarati",
227
        "guz_KE" => "Gusii (Kenya)",
228
        "guz" => "Gusii",
229
        "ha_Latn" => "Hausa (Latin)",
230
        "ha_Latn_GH" => "Hausa (Latin, Ghana)",
231
        "ha_Latn_NE" => "Hausa (Latin, Niger)",
232
        "ha_Latn_NG" => "Hausa (Latin, Nigeria)",
233
        "ha" => "Hausa",
234
        "haw_US" => "Hawaiian (United States)",
235
        "haw" => "Hawaiian",
236
        "he_IL" => "Hebrew (Israel)",
237
        "he" => "Hebrew",
238
        "hi_IN" => "Hindi (India)",
239
        "hi" => "Hindi",
240
        "hu_HU" => "Hungarian (Hungary)",
241
        "hu" => "Hungarian",
242
        "is_IS" => "Icelandic (Iceland)",
243
        "is" => "Icelandic",
244
        "ig_NG" => "Igbo (Nigeria)",
245
        "ig" => "Igbo",
246
        "id_ID" => "Indonesian (Indonesia)",
247
        "id" => "Indonesian",
248
        "ga_IE" => "Irish (Ireland)",
249
        "ga" => "Irish",
250
        "it_IT" => "Italian (Italy)",
251
        "it_CH" => "Italian (Switzerland)",
252
        "it" => "Italian",
253
        "ja_JP" => "Japanese (Japan)",
254
        "ja" => "Japanese",
255
        "kea_CV" => "Kabuverdianu (Cape Verde)",
256
        "kea" => "Kabuverdianu",
257
        "kab_DZ" => "Kabyle (Algeria)",
258
        "kab" => "Kabyle",
259
        "kl_GL" => "Kalaallisut (Greenland)",
260
        "kl" => "Kalaallisut",
261
        "kln_KE" => "Kalenjin (Kenya)",
262
        "kln" => "Kalenjin",
263
        "kam_KE" => "Kamba (Kenya)",
264
        "kam" => "Kamba",
265
        "kn_IN" => "Kannada (India)",
266
        "kn" => "Kannada",
267
        "kk_Cyrl" => "Kazakh (Cyrillic)",
268
        "kk_Cyrl_KZ" => "Kazakh (Cyrillic, Kazakhstan)",
269
        "kk" => "Kazakh",
270
        "km_KH" => "Khmer (Cambodia)",
271
        "km" => "Khmer",
272
        "ki_KE" => "Kikuyu (Kenya)",
273
        "ki" => "Kikuyu",
274
        "rw_RW" => "Kinyarwanda (Rwanda)",
275
        "rw" => "Kinyarwanda",
276
        "kok_IN" => "Konkani (India)",
277
        "kok" => "Konkani",
278
        "ko_KR" => "Korean (South Korea)",
279
        "ko" => "Korean",
280
        "khq_ML" => "Koyra Chiini (Mali)",
281
        "khq" => "Koyra Chiini",
282
        "ses_ML" => "Koyraboro Senni (Mali)",
283
        "ses" => "Koyraboro Senni",
284
        "lag_TZ" => "Langi (Tanzania)",
285
        "lag" => "Langi",
286
        "lv_LV" => "Latvian (Latvia)",
287
        "lv" => "Latvian",
288
        "lt_LT" => "Lithuanian (Lithuania)",
289
        "lt" => "Lithuanian",
290
        "luo_KE" => "Luo (Kenya)",
291
        "luo" => "Luo",
292
        "luy_KE" => "Luyia (Kenya)",
293
        "luy" => "Luyia",
294
        "mk_MK" => "Macedonian (Macedonia)",
295
        "mk" => "Macedonian",
296
        "jmc_TZ" => "Machame (Tanzania)",
297
        "jmc" => "Machame",
298
        "kde_TZ" => "Makonde (Tanzania)",
299
        "kde" => "Makonde",
300
        "mg_MG" => "Malagasy (Madagascar)",
301
        "mg" => "Malagasy",
302
        "ms_BN" => "Malay (Brunei)",
303
        "ms_MY" => "Malay (Malaysia)",
304
        "ms" => "Malay",
305
        "ml_IN" => "Malayalam (India)",
306
        "ml" => "Malayalam",
307
        "mt_MT" => "Maltese (Malta)",
308
        "mt" => "Maltese",
309
        "gv_GB" => "Manx (United Kingdom)",
310
        "gv" => "Manx",
311
        "mr_IN" => "Marathi (India)",
312
        "mr" => "Marathi",
313
        "mas_KE" => "Masai (Kenya)",
314
        "mas_TZ" => "Masai (Tanzania)",
315
        "mas" => "Masai",
316
        "mer_KE" => "Meru (Kenya)",
317
        "mer" => "Meru",
318
        "mfe_MU" => "Morisyen (Mauritius)",
319
        "mfe" => "Morisyen",
320
        "naq_NA" => "Nama (Namibia)",
321
        "naq" => "Nama",
322
        "ne_IN" => "Nepali (India)",
323
        "ne_NP" => "Nepali (Nepal)",
324
        "ne" => "Nepali",
325
        "nd_ZW" => "North Ndebele (Zimbabwe)",
326
        "nd" => "North Ndebele",
327
        "nb_NO" => "Norwegian Bokmål (Norway)",
328
        "nb" => "Norwegian Bokmål",
329
        "nn_NO" => "Norwegian Nynorsk (Norway)",
330
        "nn" => "Norwegian Nynorsk",
331
        "nyn_UG" => "Nyankole (Uganda)",
332
        "nyn" => "Nyankole",
333
        "or_IN" => "Oriya (India)",
334
        "or" => "Oriya",
335
        "om_ET" => "Oromo (Ethiopia)",
336
        "om_KE" => "Oromo (Kenya)",
337
        "om" => "Oromo",
338
        "ps_AF" => "Pashto (Afghanistan)",
339
        "ps" => "Pashto",
340
        "fa_AF" => "Persian (Afghanistan)",
341
        "fa_IR" => "Persian (Iran)",
342
        "fa" => "Persian",
343
        "pl_PL" => "Polish (Poland)",
344
        "pl" => "Polish",
345
        "pt_BR" => "Portuguese (Brazil)",
346
        "pt_GW" => "Portuguese (Guinea-Bissau)",
347
        "pt_MZ" => "Portuguese (Mozambique)",
348
        "pt_PT" => "Portuguese (Portugal)",
349
        "pt" => "Portuguese",
350
        "pa_Arab" => "Punjabi (Arabic)",
351
        "pa_Arab_PK" => "Punjabi (Arabic, Pakistan)",
352
        "pa_Guru" => "Punjabi (Gurmukhi)",
353
        "pa_Guru_IN" => "Punjabi (Gurmukhi, India)",
354
        "pa" => "Punjabi",
355
        "ro_MD" => "Romanian (Moldova)",
356
        "ro_RO" => "Romanian (Romania)",
357
        "ro" => "Romanian",
358
        "rm_CH" => "Romansh (Switzerland)",
359
        "rm" => "Romansh",
360
        "rof_TZ" => "Rombo (Tanzania)",
361
        "rof" => "Rombo",
362
        "ru_MD" => "Russian (Moldova)",
363
        "ru_RU" => "Russian (Russia)",
364
        "ru_UA" => "Russian (Ukraine)",
365
        "ru" => "Russian",
366
        "rwk_TZ" => "Rwa (Tanzania)",
367
        "rwk" => "Rwa",
368
        "saq_KE" => "Samburu (Kenya)",
369
        "saq" => "Samburu",
370
        "sg_CF" => "Sango (Central African Republic)",
371
        "sg" => "Sango",
372
        "seh_MZ" => "Sena (Mozambique)",
373
        "seh" => "Sena",
374
        "sr_Cyrl" => "Serbian (Cyrillic)",
375
        "sr_Cyrl_BA" => "Serbian (Cyrillic, Bosnia and Herzegovina)",
376
        "sr_Cyrl_ME" => "Serbian (Cyrillic, Montenegro)",
377
        "sr_Cyrl_RS" => "Serbian (Cyrillic, Serbia)",
378
        "sr_Latn" => "Serbian (Latin)",
379
        "sr_Latn_BA" => "Serbian (Latin, Bosnia and Herzegovina)",
380
        "sr_Latn_ME" => "Serbian (Latin, Montenegro)",
381
        "sr_Latn_RS" => "Serbian (Latin, Serbia)",
382
        "sr" => "Serbian",
383
        "sn_ZW" => "Shona (Zimbabwe)",
384
        "sn" => "Shona",
385
        "ii_CN" => "Sichuan Yi (China)",
386
        "ii" => "Sichuan Yi",
387
        "si_LK" => "Sinhala (Sri Lanka)",
388
        "si" => "Sinhala",
389
        "sk_SK" => "Slovak (Slovakia)",
390
        "sk" => "Slovak",
391
        "sl_SI" => "Slovenian (Slovenia)",
392
        "sl" => "Slovenian",
393
        "xog_UG" => "Soga (Uganda)",
394
        "xog" => "Soga",
395
        "so_DJ" => "Somali (Djibouti)",
396
        "so_ET" => "Somali (Ethiopia)",
397
        "so_KE" => "Somali (Kenya)",
398
        "so_SO" => "Somali (Somalia)",
399
        "so" => "Somali",
400
        "es_AR" => "Spanish (Argentina)",
401
        "es_BO" => "Spanish (Bolivia)",
402
        "es_CL" => "Spanish (Chile)",
403
        "es_CO" => "Spanish (Colombia)",
404
        "es_CR" => "Spanish (Costa Rica)",
405
        "es_DO" => "Spanish (Dominican Republic)",
406
        "es_EC" => "Spanish (Ecuador)",
407
        "es_SV" => "Spanish (El Salvador)",
408
        "es_GQ" => "Spanish (Equatorial Guinea)",
409
        "es_GT" => "Spanish (Guatemala)",
410
        "es_HN" => "Spanish (Honduras)",
411
        "es_419" => "Spanish (Latin America)",
412
        "es_MX" => "Spanish (Mexico)",
413
        "es_NI" => "Spanish (Nicaragua)",
414
        "es_PA" => "Spanish (Panama)",
415
        "es_PY" => "Spanish (Paraguay)",
416
        "es_PE" => "Spanish (Peru)",
417
        "es_PR" => "Spanish (Puerto Rico)",
418
        "es_ES" => "Spanish (Spain)",
419
        "es_US" => "Spanish (United States)",
420
        "es_UY" => "Spanish (Uruguay)",
421
        "es_VE" => "Spanish (Venezuela)",
422
        "es" => "Spanish",
423
        "sw_KE" => "Swahili (Kenya)",
424
        "sw_TZ" => "Swahili (Tanzania)",
425
        "sw" => "Swahili",
426
        "sv_FI" => "Swedish (Finland)",
427
        "sv_SE" => "Swedish (Sweden)",
428
        "sv" => "Swedish",
429
        "gsw_CH" => "Swiss German (Switzerland)",
430
        "gsw" => "Swiss German",
431
        "shi_Latn" => "Tachelhit (Latin)",
432
        "shi_Latn_MA" => "Tachelhit (Latin, Morocco)",
433
        "shi_Tfng" => "Tachelhit (Tifinagh)",
434
        "shi_Tfng_MA" => "Tachelhit (Tifinagh, Morocco)",
435
        "shi" => "Tachelhit",
436
        "dav_KE" => "Taita (Kenya)",
437
        "dav" => "Taita",
438
        "ta_IN" => "Tamil (India)",
439
        "ta_LK" => "Tamil (Sri Lanka)",
440
        "ta" => "Tamil",
441
        "te_IN" => "Telugu (India)",
442
        "te" => "Telugu",
443
        "teo_KE" => "Teso (Kenya)",
444
        "teo_UG" => "Teso (Uganda)",
445
        "teo" => "Teso",
446
        "th_TH" => "Thai (Thailand)",
447
        "th" => "Thai",
448
        "bo_CN" => "Tibetan (China)",
449
        "bo_IN" => "Tibetan (India)",
450
        "bo" => "Tibetan",
451
        "ti_ER" => "Tigrinya (Eritrea)",
452
        "ti_ET" => "Tigrinya (Ethiopia)",
453
        "ti" => "Tigrinya",
454
        "to_TO" => "Tonga (Tonga)",
455
        "to" => "Tonga",
456
        "tr_TR" => "Turkish (Turkey)",
457
        "tr" => "Turkish",
458
        "uk_UA" => "Ukrainian (Ukraine)",
459
        "uk" => "Ukrainian",
460
        "ur_IN" => "Urdu (India)",
461
        "ur_PK" => "Urdu (Pakistan)",
462
        "ur" => "Urdu",
463
        "uz_Arab" => "Uzbek (Arabic)",
464
        "uz_Arab_AF" => "Uzbek (Arabic, Afghanistan)",
465
        "uz_Cyrl" => "Uzbek (Cyrillic)",
466
        "uz_Cyrl_UZ" => "Uzbek (Cyrillic, Uzbekistan)",
467
        "uz_Latn" => "Uzbek (Latin)",
468
        "uz_Latn_UZ" => "Uzbek (Latin, Uzbekistan)",
469
        "uz" => "Uzbek",
470
        "vi_VN" => "Vietnamese (Vietnam)",
471
        "vi" => "Vietnamese",
472
        "vun_TZ" => "Vunjo (Tanzania)",
473
        "vun" => "Vunjo",
474
        "cy_GB" => "Welsh (United Kingdom)",
475
        "cy" => "Welsh",
476
        "yo_NG" => "Yoruba (Nigeria)",
477
        "yo" => "Yoruba",
478
        "zu_ZA" => "Zulu (South Africa)",
479
        "zu" => "Zulu"
480
    ];
481
482
    /**
483
     * Prepare use of localization
484
     * 
485
     * @param string $setLocale  en_US|cs_CZ|..
486
     * @param string $i18n       directory ( /usr/lib/locale/ in Debian )
487
     * @param string $textDomain we want use $i18n/$setLocale/LC_ALL/$textDomain.mo
488
     */
489
    public function __construct($setLocale = null, $i18n = '../i18n',
490
                                $textDomain = null)
491
    {
492
        if (is_null($setLocale)) {
493
            $setLocale = self::getPreferedLocale();
494
        }
495
        if (is_null($textDomain)) {
496
            if (is_null(self::$textDomain)) {
0 ignored issues
show
introduced by
The condition is_null(self::textDomain) is always false.
Loading history...
497
                if (defined('EASE_APPNAME')) {
498
                    $textDomain = strtolower(constant('EASE_APPNAME'));
499
                }
500
            } else {
501
                $textDomain = self::$textDomain;
502
            }
503
        }
504
        self::initializeGetText($textDomain, $setLocale, $i18n);
505
    }
506
507
    /**
508
     * Prefered Locale Code - 1) Requested 2) Session 3) Browser for WebPage or
509
     *                        getenv('LC_ALL') for CLI
510
     * 
511
     * @return string locale code 
512
     */
513 1
    public static function getPreferedLocale()
514
    {
515
//        $locale = Locale::acceptFromHttp($_SERVER['HTTP_ACCEPT_LANGUAGE']); 
516 1
        if (php_sapi_name() == 'cli') {
517 1
            $locale = getenv('LC_ALL');
518
        } else {
519
            $reqLocale = self::requestLocale();
520
            if (is_null($reqLocale)) {
0 ignored issues
show
introduced by
The condition is_null($reqLocale) is always false.
Loading history...
521
                $sesLocale = self::sessionLocale();
522
                if (is_null($sesLocale)) {
523
                    $locale = self::browserLocale();
524
                } else {
525
                    $locale = $sesLocale;
526
                }
527
            } else {
528
                $locale = $reqLocale;
529
            }
530
        }
531 1
        return $locale;
532
    }
533
534
    /**
535
     * Session by page GET or POST request with 'locale' field
536
     * 
537
     * @return string Locale Code
538
     */
539 1
    public static function requestLocale()
540
    {
541 1
        return isset($_REQUEST) && array_key_exists('locale', $_REQUEST) ? $_REQUEST['locale']
542 1
                : null;
543
    }
544
545
    /**
546
     * Locale code saved to session field $_SESSION['locale']
547
     * 
548
     * @return string locale code
549
     */
550 1
    public static function sessionLocale()
551
    {
552 1
        return isset($_SESSION) && array_key_exists('locale', $_SESSION) ? $_SESSION['locale']
553 1
                : null;
554
    }
555
556
    /**
557
     * Locale code by browser default language
558
     * 
559
     * @return string locale code
560
     */
561 1
    public static function browserLocale()
562
    {
563 1
        return self::langToLocale(self::autodetected());
564
    }
565
566
    /**
567
     * List of availble locales
568
     * 
569
     * @return array locales availble
570
     */
571 1
    public function availble()
572
    {
573 1
        $locales = [];
574 1
        $d       = dir(self::$i18n);
575 1
        while (false !== ($entry   = $d->read())) {
576 1
            if (($entry[0] != '.') && file_exists(self::$i18n.'/'.$entry.'/LC_MESSAGES/'.self::$textDomain.'.mo')) {
577 1
                $locales[$entry] = _(self::$alllngs[$entry]);
578
            }
579
        }
580 1
        $d->close();
581 1
        return $locales;
582
    }
583
584
    /**
585
     * Store GetText Domain
586
     * @param string $textDomain
587
     */
588 1
    public static function setTextDomain($textDomain)
589
    {
590 1
        self::$textDomain = $textDomain;
591 1
    }
592
593
    /**
594
     * Initialise Gettext
595
     *
596
     * $i18n/$defaultLocale/LC_MESSAGES/$appname.mo
597
     *
598
     * @param string $appname        name for binddomain
599
     * @param string $defaultLocale  locale of source code localstring
600
     * @param string $i18n           directory base localisation directory
601
     *
602
     * @return
603
     */
604 1
    public static function initializeGetText($appname, $defaultLocale = 'en_US',
605
                                             $i18n = '../i18n')
606
    {
607 1
        self::$i18n = $i18n;
608 1
        self::setTextDomain($appname);
609 1
        return self::useLocale($defaultLocale);
610
    }
611
612
    /**
613
     * Find Locale Code for browser language
614
     * 
615
     * @param string $lang browser lan en|cs|..
616
     * 
617
     * @return string locale code
618
     */
619 1
    public static function langToLocale($lang)
620
    {
621 1
        $defaultLocale = 'C';
622 1
        $langs         = [];
623 1
        foreach (self::$alllngs as $langCode => $language) {
624 1
            $langs[$langCode] = [strstr($langCode, '_') ? substr($langCode, 0,
625 1
                    strpos($langCode, '_')) : $langCode, $language];
626
        }
627 1
        foreach ($langs as $code => $langInfo) {
628 1
            if ($lang == $langInfo[0]) {
629 1
                $defaultLocale = $code;
630 1
                break;
631
            }
632
        }
633 1
        return $defaultLocale;
634
    }
635
636
    /**
637
     * Use Effective locale to requested
638
     * 
639
     * @param string $localeCode locale code to use
640
     * 
641
     * @return string used locale code
642
     */
643 1
    public static function useLocale($localeCode)
644
    {
645 1
        \setlocale(LC_ALL, $localeCode);
646 1
        \bind_textdomain_codeset(self::$textDomain, 'UTF-8');
647 1
        \putenv("LC_ALL=$localeCode");
648 1
        if (!empty(self::$textDomain)) {
649 1
            if (file_exists(self::$i18n)) {
650 1
                \bindtextdomain(self::$textDomain, self::$i18n);
651
            }
652 1
            \textdomain(self::$textDomain);
653
        }
654 1
        if (isset($_SESSION)) {
655 1
            $_SESSION['locale'] = $localeCode;
656
        }
657 1
        self::$localeUsed = $localeCode;
658 1
    }
659
660
    /**
661
     * Try to autodetect default language
662
     * 
663
     * @return string lang code 
664
     */
665 1
    public static function autodetected()
666
    {
667 1
        return array_key_exists('HTTP_ACCEPT_LANGUAGE', $_SERVER) && function_exists('\locale_accept_from_http')
668 1
                ? \locale_accept_from_http($_SERVER['HTTP_ACCEPT_LANGUAGE']) : null;
669
    }
670
671
    /**
672
     * obtain ISO 639-1 language code
673
     * 
674
     * @return string
675
     */
676 1
    public function get2Code()
677
    {
678 1
        $localeUsed = $this->getLocaleUsed();
679 1
        return strstr($localeUsed, '_') ? current(explode('_', $localeUsed)) : $localeUsed;
680
    }
681
682
    /**
683
     * get Current Used locale code
684
     * 
685
     * @return string
686
     */
687 1
    public static function getLocaleUsed()
688
    {
689 1
        return isset(self::$localeUsed) ? self::$localeUsed : self::$_instance->getLocaleUsed();
690
    }
691
692
    /**
693
     * Common instance of Locale class
694
     * 
695
     * @return \Ease\Locale
696
     */
697
    public static function singleton()
698
    {
699
        if (!isset(self::$_instance)) {
700
            $class           = __CLASS__;
701
            self::$_instance = new $class();
702
        }
703
        return self::$_instance;
704
    }
705
}
706