Completed
Push — master ( 75e641...0485dc )
by Yannick
33:10
created

Language::getLanguages()   B

Complexity

Conditions 5
Paths 3

Size

Total Lines 11
Code Lines 8

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 5
eloc 8
nc 3
nop 0
dl 0
loc 11
rs 8.8571
c 0
b 0
f 0
1
<?php
2
/**
3
 * This class is part of FlightAirmap. It's used to use languages translations
4
 *
5
 * Copyright (c) Ycarus (Yannick Chabanois) <[email protected]>
6
 * Licensed under AGPL license.
7
 * For more information see: https://www.flightairmap.com/
8
*/
9
10
if (!function_exists("gettext")) {
11
	function _($text) {
12
		return $text;
13
	}
14
} else {
15
	if (isset($_COOKIE['language']) && $_COOKIE['language'] != 'en_GB' && (isset($globalTranslate) && $globalTranslate)) {
16
		$Language = new Language();
17
		$lang = $_COOKIE['language'];
18
		putenv("LC_ALL=$lang");
19
		setlocale(LC_ALL, $Language->getLocale($lang));
20
		bindtextdomain("fam", dirname(__FILE__).'/../locale');
21
		textdomain("fam");
22
		bind_textdomain_codeset("fam", 'UTF-8');
23
	}
24
}
25
26
class Language {
27
	public $all_languages = array('ar_SA' => array('العَرَبِيَّةُ',	'ar',	'arabic'),
28
				'bg_BG' => array('Български',		'bg',	'bulgarian'),
29
				'id_ID' => array('Bahasa Indonesia',	'id',	'indonesian'),
30
				'ms_MY' => array('Bahasa Melayu',	'ms',	'malay'),
31
				'ca_ES' => array('Català',		'ca',	'catalan'), // ca_CA
32
				'cs_CZ' => array('Čeština',		'cs',	'czech'),
33
				'de_DE' => array('Deutsch',		'de',	'german'),
34
				'da_DK' => array('Dansk',		'da',	'danish')     , // dk_DK
35
				'et_EE' => array('Eesti',		'et',	'estonian'), // ee_ET
36
				'en_GB' => array('English',		'en',	'english'),
37
				'en_US' => array('English (US)',	'en',	'english'),
38
				'es_AR' => array('Español (Argentina)',	'es',	'spanish'),
39
				'es_CO' => array('Español (Colombia)',	'es',	'spanish'),
40
				'es_ES' => array('Español (España)',	'es',	'spanish'),
41
				'es_419' => array('Español (América Latina)',	'es',	'spanish'),
42
				'es_MX' => array('Español (Mexico)',	'es',	'spanish'),
43
				'es_VE' => array('Español (Venezuela)',	'es',	'spanish'),
44
				'eu_ES' => array('Euskara',		'en',	'basque'),
45
				'fr_FR' => array('Français',		'fr',	'french'),
46
				'gl_ES' => array('Galego',		'gl',	'galician'),
47
				'el_GR' => array('Ελληνικά',		'el',	'greek'), // el_EL
48
				'he_IL' => array('עברית',		'he',	'hebrew'), // he_HE
49
				'hr_HR' => array('Hrvatski',		'hr',	'croatian'),
50
				'hu_HU' => array('Magyar',		'hu',	'hungarian'),
51
				'it_IT' => array('Italiano',		'it',	'italian'),
52
				'lv_LV' => array('Latviešu',		'lv',	'latvian'),
53
				'lt_LT' => array('Lietuvių',		'lt',	'lithuanian'),
54
				'nl_NL' => array('Nederlands',		'nl',	'dutch'),
55
				'nb_NO' => array('Norsk (Bokmål)',	'nb',	'norwegian'), // no_NB
56
				'nn_NO' => array('Norsk (Nynorsk)',	'nn',	'norwegian'), // no_NN
57
				'fa_IR' => array('فارسی',		'fa',	'persian'),
58
				'pl_PL' => array('Polski',		'pl',	'polish'),
59
				'pt_PT' => array('Português',		'pt',	'portuguese'),
60
				'pt_BR' => array('Português do Brasil',	'pt',	'brazilian portuguese'),
61
				'ro_RO' => array('Română',		'en',	'romanian'),
62
				'ru_RU' => array('Pусский',		'ru',	'russian'),
63
				'sk_SK' => array('Slovenčina',		'sk',	'slovak'),
64
				'sl_SI' => array('Slovenščina',		'sl',	'slovenian slovene'),
65
				'sr_RS' => array('Srpski',		'sr',	'serbian'),
66
				'fi_FI' => array('Suomi',		'fi',	'finish'),
67
				'sv_SE' => array('Svenska',		'sv',	'swedish'),
68
				'vi_VN' => array('Tiếng Việt',		'vi',	'vietnamese'),
69
				'th_TH' => array('ภาษาไทย',		'th',	'thai'),
70
				'tr_TR' => array('Türkçe',		'tr',	'turkish'),
71
				'uk_UA' => array('Українська',		'en',	'ukrainian'), // ua_UA
72
				'ja_JP' => array('日本語',		'ja',	'japanese'),
73
				'zh_CN' => array('简体中文',		'zh',	'chinese'),
74
				'zh_TW' => array('繁體中文',		'zh',	'chinese')
75
			);
76
77
	/**
78
	* Returns list of available locales
79
	*
80
	* @return array
81
	*/
82
	public function listLocaleDir()
83
	{
84
		$result = array('en_GB');
85
		if (!is_dir(dirname(__FILE__).'/../locale')) {
86
			return $result;
87
		}
88
		$handle = @opendir(dirname(__FILE__).'/../locale');
89
		if ($handle === false) return $result;
90
		while (false !== ($file = readdir($handle))) {
91
			$path = dirname(__FILE__).'/../locale'.'/'.$file.'/LC_MESSAGES/fam.mo';
92
			if ($file != "." && $file != ".." && @file_exists($path)) {
93
				$result[] = $file;
94
			}
95
		}
96
		closedir($handle);
97
		return $result;
98
	}
99
100
	public function getLocale($locale)
101
	{
102
		return array($locale,$this->all_languages[$locale][1],$this->all_languages[$locale][2],$locale.'.utf8',$locale.'.UTF8');
103
	}
104
105
	/**
106
	* Returns list of available languages
107
	*
108
	* @return array
109
	 */
110
	public function getLanguages()
111
	{
112
		$available = $this->listLocaleDir();
113
		$allAvailableLanguages = array();
114
		$currentLocal = setlocale(LC_ALL, 0);
115
		foreach ($available as $lang) {
116
			if (isset($this->all_languages[$lang]) && (setlocale(LC_ALL,$this->getLocale($lang)) || $lang = 'en_GB')) $allAvailableLanguages[$lang] = $this->all_languages[$lang];
117
		}
118
		setlocale(LC_ALL,$currentLocal);
119
		return $allAvailableLanguages;
120
	}
121
}
122
?>