Skip to content

Instantly share code, notes, and snippets.

@jthatch
Last active September 24, 2020 15:13
Show Gist options
  • Save jthatch/a4110d92cbd6ff32956fb5a06d7977cf to your computer and use it in GitHub Desktop.
Save jthatch/a4110d92cbd6ff32956fb5a06d7977cf to your computer and use it in GitHub Desktop.
[php] Convert ISO 3166 Country Code to ISO 639-1 (all countries and languages)
<?php
declare(strict_types=1);
/**
* Class CountryToIso639ValueObject
* @author jthatch
*/
class CountryToIso639ValueObject
{
// fallback ISO 639-1 code
protected const FALLBACK = 'en';
protected string $value;
protected string $countryCode;
// 'ISO 3166' => 'ISO 639-1'
protected array $codes = [
'AD' => 'ca',
'AE' => 'ar',
'AF' => 'fa',
'AG' => 'en',
'AI' => 'en',
'AL' => 'sq',
'AM' => 'hy',
'AO' => 'pt',
'AQ' => 'en',
'AR' => 'es',
'AS' => 'en',
'AT' => 'de',
'AU' => 'en',
'AW' => 'nl',
'AX' => 'sv',
'AZ' => 'az',
'BA' => 'bs',
'BB' => 'en',
'BD' => 'bn',
'BE' => 'nl',
'BF' => 'fr',
'BG' => 'bg',
'BH' => 'ar',
'BI' => 'fr',
'BJ' => 'fr',
'BL' => 'fr',
'BM' => 'en',
'BN' => 'ms',
'BO' => 'es',
'BQ' => 'nl',
'BR' => 'pt',
'BS' => 'en',
'BT' => 'dz',
'BV' => 'no',
'BW' => 'en',
'BY' => 'be',
'BZ' => 'en',
'CA' => 'en',
'CC' => 'en',
'CD' => 'fr',
'CF' => 'fr',
'CG' => 'fr',
'CH' => 'de',
'CI' => 'fr',
'CK' => 'en',
'CL' => 'es',
'CM' => 'fr',
'CN' => 'zh',
'CO' => 'es',
'CR' => 'es',
'CU' => 'es',
'CV' => 'pt',
'CW' => 'nl',
'CX' => 'en',
'CY' => 'el',
'CZ' => 'cs',
'DE' => 'de',
'DJ' => 'fr',
'DK' => 'da',
'DM' => 'en',
'DO' => 'es',
'DZ' => 'ar',
'EC' => 'es',
'EE' => 'et',
'EG' => 'ar',
'EH' => 'ar',
'ER' => 'ti',
'ES' => 'as',
'ET' => 'am',
'FI' => 'fi',
'FJ' => 'en',
'FK' => 'en',
'FM' => 'en',
'FO' => 'fo',
'FR' => 'fr',
'GA' => 'fr',
'GB' => 'en',
'GD' => 'en',
'GE' => 'ka',
'GF' => 'fr',
'GG' => 'en',
'GH' => 'en',
'GI' => 'en',
'GL' => 'kl',
'GM' => 'en',
'GN' => 'fr',
'GP' => 'fr',
'GQ' => 'es',
'GR' => 'el',
'GS' => 'en',
'GT' => 'es',
'GU' => 'en',
'GW' => 'pt',
'GY' => 'en',
'HK' => 'zh',
'HM' => 'en',
'HN' => 'es',
'HR' => 'hr',
'HT' => 'fr',
'HU' => 'hu',
'ID' => 'id',
'IE' => 'en',
'IL' => 'he',
'IM' => 'en',
'IN' => 'hi',
'IO' => 'en',
'IQ' => 'ar',
'IR' => 'fa',
'IS' => 'is',
'IT' => 'it',
'JE' => 'en',
'JM' => 'en',
'JO' => 'ar',
'JP' => 'ja',
'KE' => 'sw',
'KG' => 'ky',
'KH' => 'km',
'KI' => 'en',
'KM' => 'ar',
'KN' => 'en',
'KP' => 'ko',
'KR' => 'ko',
'KW' => 'ar',
'KY' => 'en',
'KZ' => 'kk',
'LA' => 'lo',
'LB' => 'ar',
'LC' => 'en',
'LI' => 'de',
'LK' => 'si',
'LR' => 'en',
'LS' => 'en',
'LT' => 'lt',
'LU' => 'lb',
'LV' => 'lv',
'LY' => 'ar',
'MA' => 'fr',
'MC' => 'fr',
'MD' => 'ro',
'ME' => 'sr',
'MF' => 'fr',
'MG' => 'mg',
'MH' => 'en',
'MK' => 'mk',
'ML' => 'fr',
'MM' => 'my',
'MN' => 'mn',
'MO' => 'zh',
'MP' => 'en',
'MQ' => 'fr',
'MR' => 'ar',
'MS' => 'en',
'MT' => 'mt',
'MU' => 'mf',
'MV' => 'dv',
'MW' => 'en',
'MX' => 'es',
'MY' => 'ms',
'MZ' => 'pt',
'NA' => 'en',
'NC' => 'fr',
'NE' => 'fr',
'NF' => 'en',
'NG' => 'en',
'NI' => 'es',
'NL' => 'nl',
'NO' => 'nb',
'NP' => 'ne',
'NR' => 'na',
'NU' => 'ni',
'NZ' => 'mi',
'OM' => 'ar',
'PA' => 'es',
'PE' => 'es',
'PF' => 'fr',
'PG' => 'en',
'PH' => 'en',
'PK' => 'en',
'PL' => 'pl',
'PM' => 'fr',
'PN' => 'en',
'PR' => 'es',
'PS' => 'ar',
'PT' => 'pt',
'PW' => 'en',
'PY' => 'es',
'QA' => 'ar',
'RE' => 'fr',
'RO' => 'ro',
'RS' => 'sr',
'RU' => 'ru',
'RW' => 'rw',
'SA' => 'ar',
'SB' => 'en',
'SC' => 'fr',
'SD' => 'ar',
'SE' => 'sv',
'SG' => 'zh',
'SH' => 'en',
'SI' => 'sl',
'SJ' => 'no',
'SK' => 'sk',
'SL' => 'en',
'SM' => 'it',
'SN' => 'fr',
'SO' => 'so',
'SR' => 'nl',
'ST' => 'pt',
'SS' => 'en',
'SV' => 'es',
'SX' => 'nl',
'SY' => 'ar',
'SZ' => 'en',
'TC' => 'en',
'TD' => 'fr',
'TF' => 'fr',
'TG' => 'fr',
'TH' => 'th',
'TJ' => 'tg',
'TK' => 'tk',
'TL' => 'pt',
'TM' => 'tk',
'TN' => 'ar',
'TO' => 'en',
'TR' => 'tr',
'TT' => 'en',
'TV' => 'en',
'TW' => 'zh',
'TZ' => 'sw',
'UA' => 'uk',
'UG' => 'en',
'UM' => 'en',
'US' => 'en',
'UY' => 'es',
'UZ' => 'uz',
'VA' => 'it',
'VC' => 'en',
'VE' => 'es',
'VG' => 'en',
'VI' => 'en',
'VN' => 'vi',
'VU' => 'bi',
'WF' => 'fr',
'WS' => 'sm',
'YE' => 'ar',
'YT' => 'fr',
'ZA' => 'en',
'ZM' => 'en',
'ZW' => 'en',
];
public function __construct(string $countryCode)
{
$this->countryCode = strtoupper($countryCode);
$this->value = $this->codes[$this->countryCode] ?? static::FALLBACK;
}
public function value(): string
{
return $this->value;
}
public function __toString()
{
return $this->value;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment