Code Coverage |
||||||||||
Lines |
Functions and Methods |
Classes and Traits |
||||||||
| Total | |
100.00% |
9 / 9 |
|
100.00% |
6 / 6 |
CRAP | |
100.00% |
1 / 1 |
| LanguageCodes | |
100.00% |
9 / 9 |
|
100.00% |
6 / 6 |
7 | |
100.00% |
1 / 1 |
| getAll | |
100.00% |
1 / 1 |
|
100.00% |
1 / 1 |
1 | |||
| getAllSorted | |
100.00% |
3 / 3 |
|
100.00% |
1 / 1 |
1 | |||
| get | |
100.00% |
1 / 1 |
|
100.00% |
1 / 1 |
1 | |||
| getSupported | |
100.00% |
2 / 2 |
|
100.00% |
1 / 1 |
2 | |||
| getKey | |
100.00% |
1 / 1 |
|
100.00% |
1 / 1 |
1 | |||
| getAllSupported | |
100.00% |
1 / 1 |
|
100.00% |
1 / 1 |
1 | |||
| 1 | <?php |
| 2 | |
| 3 | /** |
| 4 | * The language codes class provides support for language codes in phpMyFAQ translations. |
| 5 | * |
| 6 | * This Source Code Form is subject to the terms of the Mozilla Public License, |
| 7 | * v. 2.0. If a copy of the MPL was not distributed with this file, You can |
| 8 | * obtain one at https://mozilla.org/MPL/2.0/. |
| 9 | * |
| 10 | * @package phpMyFAQ |
| 11 | * @author Thorsten Rinne <thorsten@phpmyfaq.de |
| 12 | * @copyright 2022-2026 phpMyFAQ Team |
| 13 | * @license https://www.mozilla.org/MPL/2.0/ Mozilla Public License Version 2.0 |
| 14 | * @link https://www.phpmyfaq.de |
| 15 | * @since 2022-03-22 |
| 16 | */ |
| 17 | |
| 18 | declare(strict_types=1); |
| 19 | |
| 20 | namespace phpMyFAQ\Language; |
| 21 | |
| 22 | class LanguageCodes |
| 23 | { |
| 24 | /** |
| 25 | * ISO 639 language code list with native language names |
| 26 | * |
| 27 | * @var array<string, string> |
| 28 | */ |
| 29 | protected static array $languageCodes = [ |
| 30 | 'aa' => 'Qafar', |
| 31 | 'ab' => 'Аԥсуа бызшәа', |
| 32 | 'af' => 'Afrikaans', |
| 33 | 'am' => 'አማርኛ', |
| 34 | 'ar' => 'العربية', |
| 35 | 'ar_ae' => 'العربية (الإمارات)', |
| 36 | 'ar_bh' => 'العربية (البحرين)', |
| 37 | 'ar_dz' => 'العربية (الجزائر)', |
| 38 | 'ar_eg' => 'العربية (مصر)', |
| 39 | 'ar_iq' => 'العربية (العراق)', |
| 40 | 'ar_jo' => 'العربية (الأردن)', |
| 41 | 'ar_kw' => 'العربية (الكويت)', |
| 42 | 'ar_lb' => 'العربية (لبنان)', |
| 43 | 'ar_ly' => 'العربية (ليبيا)', |
| 44 | 'ar_ma' => 'العربية (المغرب)', |
| 45 | 'ar_om' => 'العربية (عمان)', |
| 46 | 'ar_qa' => 'العربية (قطر)', |
| 47 | 'ar_sa' => 'العربية (السعودية)', |
| 48 | 'ar_sy' => 'العربية (سوريا)', |
| 49 | 'ar_tn' => 'العربية (تونس)', |
| 50 | 'ar_ye' => 'العربية (اليمن)', |
| 51 | 'as' => 'অসমীয়া', |
| 52 | 'ay' => 'Aymar aru', |
| 53 | 'az' => 'Azərbaycan dili', |
| 54 | 'ba' => 'Башҡорт теле', |
| 55 | 'be' => 'Беларуская', |
| 56 | 'bg' => 'Български', |
| 57 | 'bh' => 'भोजपुरी', |
| 58 | 'bi' => 'Bislama', |
| 59 | 'bn' => 'বাংলা', |
| 60 | 'bo' => 'བོད་ཡིག', |
| 61 | 'br' => 'Brezhoneg', |
| 62 | 'bs' => 'Bosanski', |
| 63 | 'ca' => 'Català', |
| 64 | 'co' => 'Corsu', |
| 65 | 'cs' => 'Čeština', |
| 66 | 'cy' => 'Cymraeg', |
| 67 | 'da' => 'Dansk', |
| 68 | 'de' => 'Deutsch', |
| 69 | 'de_at' => 'Deutsch (Österreich)', |
| 70 | 'de_ch' => 'Deutsch (Schweiz)', |
| 71 | 'de_li' => 'Deutsch (Liechtenstein)', |
| 72 | 'de_lu' => 'Deutsch (Luxemburg)', |
| 73 | 'div' => 'ދިވެހި', |
| 74 | 'dz' => 'རྫོང་ཁ', |
| 75 | 'el' => 'Ελληνικά', |
| 76 | 'en' => 'English', |
| 77 | 'en_au' => 'English (Australia)', |
| 78 | 'en_bz' => 'English (Belize)', |
| 79 | 'en_ca' => 'English (Canada)', |
| 80 | 'en_gb' => 'English (United Kingdom)', |
| 81 | 'en_ie' => 'English (Ireland)', |
| 82 | 'en_jm' => 'English (Jamaica)', |
| 83 | 'en_nz' => 'English (New Zealand)', |
| 84 | 'en_ph' => 'English (Philippines)', |
| 85 | 'en_tt' => 'English (Trinidad)', |
| 86 | 'en_us' => 'English (United States)', |
| 87 | 'en_za' => 'English (South Africa)', |
| 88 | 'en_zw' => 'English (Zimbabwe)', |
| 89 | 'eo' => 'Esperanto', |
| 90 | 'es' => 'Español', |
| 91 | 'es_ar' => 'Español (Argentina)', |
| 92 | 'es_bo' => 'Español (Bolivia)', |
| 93 | 'es_cl' => 'Español (Chile)', |
| 94 | 'es_co' => 'Español (Colombia)', |
| 95 | 'es_cr' => 'Español (Costa Rica)', |
| 96 | 'es_do' => 'Español (República Dominicana)', |
| 97 | 'es_ec' => 'Español (Ecuador)', |
| 98 | 'es_es' => 'Español (España)', |
| 99 | 'es_gt' => 'Español (Guatemala)', |
| 100 | 'es_hn' => 'Español (Honduras)', |
| 101 | 'es_mx' => 'Español (México)', |
| 102 | 'es_ni' => 'Español (Nicaragua)', |
| 103 | 'es_pa' => 'Español (Panamá)', |
| 104 | 'es_pe' => 'Español (Perú)', |
| 105 | 'es_pr' => 'Español (Puerto Rico)', |
| 106 | 'es_py' => 'Español (Paraguay)', |
| 107 | 'es_sv' => 'Español (El Salvador)', |
| 108 | 'es_us' => 'Español (Estados Unidos)', |
| 109 | 'es_uy' => 'Español (Uruguay)', |
| 110 | 'es_ve' => 'Español (Venezuela)', |
| 111 | 'et' => 'Eesti', |
| 112 | 'eu' => 'Euskara', |
| 113 | 'fa' => 'فارسی', |
| 114 | 'fi' => 'Suomi', |
| 115 | 'fj' => 'Vosa Vakaviti', |
| 116 | 'fo' => 'Føroyskt', |
| 117 | 'fr' => 'Français', |
| 118 | 'fr_be' => 'Français (Belgique)', |
| 119 | 'fr_ca' => 'Français (Canada)', |
| 120 | 'fr_ch' => 'Français (Suisse)', |
| 121 | 'fr_lu' => 'Français (Luxembourg)', |
| 122 | 'fr_mc' => 'Français (Monaco)', |
| 123 | 'fy' => 'Frysk', |
| 124 | 'ga' => 'Gaeilge', |
| 125 | 'gd' => 'Gàidhlig', |
| 126 | 'gl' => 'Galego', |
| 127 | 'gn' => "Avañe'ẽ", |
| 128 | 'gu' => 'ગુજરાતી', |
| 129 | 'ha' => 'Hausa', |
| 130 | 'he' => 'עברית', |
| 131 | 'hi' => 'हिन्दी', |
| 132 | 'hr' => 'Hrvatski', |
| 133 | 'hu' => 'Magyar', |
| 134 | 'hy' => 'Հայերեն', |
| 135 | 'ia' => 'Interlingua', |
| 136 | 'id' => 'Bahasa Indonesia', |
| 137 | 'ie' => 'Interlingue', |
| 138 | 'ik' => 'Iñupiaq', |
| 139 | 'in' => 'Bahasa Indonesia', |
| 140 | 'is' => 'Íslenska', |
| 141 | 'it' => 'Italiano', |
| 142 | 'it_ch' => 'Italiano (Svizzera)', |
| 143 | 'iw' => 'עברית', |
| 144 | 'ja' => '日本語', |
| 145 | 'ji' => 'ייִדיש', |
| 146 | 'jw' => 'Basa Jawa', |
| 147 | 'ka' => 'ქართული', |
| 148 | 'kk' => 'Қазақ тілі', |
| 149 | 'kl' => 'Kalaallisut', |
| 150 | 'km' => 'ភាសាខ្មែរ', |
| 151 | 'kn' => 'ಕನ್ನಡ', |
| 152 | 'ko' => '한국어', |
| 153 | 'kok' => 'कोंकणी', |
| 154 | 'ks' => 'कश्मिरी', |
| 155 | 'ku' => 'Kurdî', |
| 156 | 'ky' => 'Кыргызча', |
| 157 | 'kz' => 'Кыргызча', |
| 158 | 'la' => 'Latina', |
| 159 | 'ln' => 'Lingála', |
| 160 | 'lo' => 'ລາວ', |
| 161 | 'ls' => 'Slovenščina', |
| 162 | 'lt' => 'Lietuvių', |
| 163 | 'lv' => 'Latviešu', |
| 164 | 'mg' => 'Malagasy', |
| 165 | 'mi' => 'Te Reo Māori', |
| 166 | 'mk' => 'Македонски', |
| 167 | 'ml' => 'മലയാളം', |
| 168 | 'mn' => 'Монгол', |
| 169 | 'mo' => 'Moldovenească', |
| 170 | 'mr' => 'मराठी', |
| 171 | 'ms' => 'Bahasa Melayu', |
| 172 | 'mt' => 'Malti', |
| 173 | 'my' => 'ဗမာစာ', |
| 174 | 'na' => 'Dorerin Naoero', |
| 175 | 'nb' => 'Norsk (Bokmål)', |
| 176 | 'nb_no' => 'Norsk (Bokmål)', |
| 177 | 'ne' => 'नेपाली', |
| 178 | 'nl' => 'Nederlands', |
| 179 | 'nl_be' => 'Nederlands (België)', |
| 180 | 'nn_no' => 'Norsk (Nynorsk)', |
| 181 | 'no' => 'Norsk (Bokmål)', |
| 182 | 'oc' => 'Occitan', |
| 183 | 'om' => 'Oromoo', |
| 184 | 'or' => 'ଓଡ଼ିଆ', |
| 185 | 'pa' => 'ਪੰਜਾਬੀ', |
| 186 | 'pl' => 'Polski', |
| 187 | 'ps' => 'پښتو', |
| 188 | 'pt' => 'Português', |
| 189 | 'pt_br' => 'Português (Brasil)', |
| 190 | 'qu' => 'Runa Simi', |
| 191 | 'rm' => 'Rumantsch', |
| 192 | 'rn' => 'Ikirundi', |
| 193 | 'ro' => 'Română', |
| 194 | 'ro_md' => 'Română (Moldova)', |
| 195 | 'ru' => 'Русский', |
| 196 | 'ru_md' => 'Русский (Молдова)', |
| 197 | 'rw' => 'Kinyarwanda', |
| 198 | 'sa' => 'संस्कृतम्', |
| 199 | 'sb' => 'Serbšćina', |
| 200 | 'sd' => 'سنڌي', |
| 201 | 'sg' => 'Sängö', |
| 202 | 'sh' => 'Srpskohrvatski', |
| 203 | 'si' => 'සිංහල', |
| 204 | 'sk' => 'Slovenčina', |
| 205 | 'sl' => 'Slovenščina', |
| 206 | 'sm' => "Gagana fa'a Samoa", |
| 207 | 'sn' => 'chiShona', |
| 208 | 'so' => 'Soomaali', |
| 209 | 'sq' => 'Shqip', |
| 210 | 'sr' => 'Српски', |
| 211 | 'ss' => 'SiSwati', |
| 212 | 'st' => 'Sesotho', |
| 213 | 'su' => 'Basa Sunda', |
| 214 | 'sv' => 'Svenska', |
| 215 | 'sv_fi' => 'Svenska (Finland)', |
| 216 | 'sw' => 'Kiswahili', |
| 217 | 'sx' => 'Sesotho', |
| 218 | 'syr' => 'ܣܘܪܝܝܐ', |
| 219 | 'ta' => 'தமிழ்', |
| 220 | 'te' => 'తెలుగు', |
| 221 | 'tg' => 'Тоҷикӣ', |
| 222 | 'th' => 'ไทย', |
| 223 | 'ti' => 'ትግርኛ', |
| 224 | 'tk' => 'Türkmen', |
| 225 | 'tl' => 'Tagalog', |
| 226 | 'tn' => 'Setswana', |
| 227 | 'to' => 'Lea faka-Tonga', |
| 228 | 'tr' => 'Türkçe', |
| 229 | 'ts' => 'Xitsonga', |
| 230 | 'tt' => 'Татар', |
| 231 | 'tw' => 'Twi', |
| 232 | 'uk' => 'Українська', |
| 233 | 'ur' => 'اردو', |
| 234 | 'uz' => 'Oʻzbekcha', |
| 235 | 'vi' => 'Tiếng Việt', |
| 236 | 'vo' => 'Volapük', |
| 237 | 'wo' => 'Wolof', |
| 238 | 'xh' => 'isiXhosa', |
| 239 | 'yi' => 'ייִדיש', |
| 240 | 'yo' => 'Yorùbá', |
| 241 | 'zh' => '中文', |
| 242 | 'zh_cn' => '中文 (中国)', |
| 243 | 'zh_hk' => '中文 (香港)', |
| 244 | 'zh_mo' => '中文 (澳門)', |
| 245 | 'zh_sg' => '中文 (新加坡)', |
| 246 | 'zh_tw' => '中文 (台灣)', |
| 247 | 'zu' => 'isiZulu', |
| 248 | ]; |
| 249 | |
| 250 | /** |
| 251 | * phpMyFAQ supported language code list, this is a representation of phpMyFAQ translations |
| 252 | * |
| 253 | * @var array|string[] |
| 254 | */ |
| 255 | protected static array $supportedLanguageCodes = [ |
| 256 | 'ar' => 'العربية', |
| 257 | 'eu' => 'Euskara', |
| 258 | 'bn' => 'বাংলা', |
| 259 | 'bs' => 'Bosanski', |
| 260 | 'zh' => '中文', |
| 261 | 'cs' => 'Čeština', |
| 262 | 'da' => 'Dansk', |
| 263 | 'nl' => 'Nederlands', |
| 264 | 'en' => 'English', |
| 265 | 'fa' => 'فارسی', |
| 266 | 'fi' => 'Suomi', |
| 267 | 'fr' => 'Français', |
| 268 | 'fr_ca' => 'Français (Canada)', |
| 269 | 'de' => 'Deutsch', |
| 270 | 'el' => 'Ελληνικά', |
| 271 | 'he' => 'עברית', |
| 272 | 'hi' => 'हिन्दी', |
| 273 | 'hu' => 'Magyar', |
| 274 | 'id' => 'Bahasa Indonesia', |
| 275 | 'it' => 'Italiano', |
| 276 | 'ja' => '日本語', |
| 277 | 'ko' => '한국어', |
| 278 | 'lv' => 'Latviešu', |
| 279 | 'lt' => 'Lietuvių', |
| 280 | 'ms' => 'Bahasa Melayu', |
| 281 | 'mn' => 'Монгол', |
| 282 | 'nb' => 'Norsk (Bokmål)', |
| 283 | 'pl' => 'Polski', |
| 284 | 'pt' => 'Português', |
| 285 | 'pt_br' => 'Português (Brasil)', |
| 286 | 'ro' => 'Română', |
| 287 | 'ru' => 'Русский', |
| 288 | 'sr' => 'Српски', |
| 289 | 'sk' => 'Slovenčina', |
| 290 | 'sl' => 'Slovenščina', |
| 291 | 'es' => 'Español', |
| 292 | 'sv' => 'Svenska', |
| 293 | 'th' => 'ไทย', |
| 294 | 'tr' => 'Türkçe', |
| 295 | 'zh_tw' => '中文 (台灣)', |
| 296 | 'uk' => 'Українська', |
| 297 | 'ur' => 'اردو', |
| 298 | 'vi' => 'Tiếng Việt', |
| 299 | 'cy' => 'Cymraeg', |
| 300 | ]; |
| 301 | |
| 302 | /** |
| 303 | * Returns all language codes. |
| 304 | * |
| 305 | * @return array<string, string> |
| 306 | */ |
| 307 | public static function getAll(): array |
| 308 | { |
| 309 | return static::$languageCodes; |
| 310 | } |
| 311 | |
| 312 | public static function getAllSorted(): array |
| 313 | { |
| 314 | $sortedLanguageCodes = static::$languageCodes; |
| 315 | asort($sortedLanguageCodes); |
| 316 | return $sortedLanguageCodes; |
| 317 | } |
| 318 | |
| 319 | /** |
| 320 | * Return language name from language code. |
| 321 | * |
| 322 | * @return string|null → language code or null |
| 323 | */ |
| 324 | public static function get(string $key): ?string |
| 325 | { |
| 326 | return static::$languageCodes[strtolower($key)] ?? null; |
| 327 | } |
| 328 | |
| 329 | /** |
| 330 | * Return language name from a phpMyFAQ supported language code. |
| 331 | * |
| 332 | * @return string|null → language code or null |
| 333 | */ |
| 334 | public static function getSupported(string $key): ?string |
| 335 | { |
| 336 | $supported = static::$supportedLanguageCodes[strtolower($key)] ?? null; |
| 337 | |
| 338 | return is_string($supported) ? $supported : null; |
| 339 | } |
| 340 | |
| 341 | public static function getKey(string $value): false|int|string |
| 342 | { |
| 343 | return array_search($value, static::$languageCodes, strict: true); |
| 344 | } |
| 345 | |
| 346 | public static function getAllSupported(): array |
| 347 | { |
| 348 | return static::$supportedLanguageCodes; |
| 349 | } |
| 350 | } |