PHP há 7 anos • Jaime Neto • timer 10 min de leitura

Classe PHP para países

Não raramente precisamos trabalhar com países em nossos sistemas. Então, vou deixar aqui uma classe PHP já pronta pra isso, com suporte a internacionalização, inclusive. Deixei a classe já com os países em inglês e português, quem precisar pode adicionar outros países, caso necessário. Também adicionei dois métodos estáticos para buscar o nome pelo código do país, e o contrário também. O motivo de ter criado como métodos estáticos é apenas por questões práticas, pois assim não é necessário instanciar a classe antes de usá-la.

class Countries
{
    private static $countries = [
        'en' => [
            'AF' => 'Afghanistan',
            'ZA' => 'South Africa',
            'AX' => 'Aland Islands',
            'AL' => 'Albania',
            'DE' => 'Germany',
            'AD' => 'Andorra',
            'AO' => 'Angola',
            'AI' => 'Anguilla',
            'AQ' => 'Antarctica',
            'AG' => 'Antigua and Barbuda',
            'AN' => 'Netherlands Antilles',
            'SA' => 'Saudi Arabia',
            'DZ' => 'Algeria',
            'AR' => 'Argentina',
            'AM' => 'Armenia',
            'AW' => 'Aruba',
            'AU' => 'Australia',
            'AT' => 'Austria',
            'AZ' => 'Azerbaijan',
            'BS' => 'Bahamas',
            'BH' => 'Bahrain',
            'BD' => 'Bangladesh',
            'BB' => 'Barbados',
            'BE' => 'Belgium',
            'BZ' => 'Belize',
            'BJ' => 'Benin',
            'BM' => 'Bermuda',
            'BY' => 'Belarus',
            'BO' => 'Bolivia',
            'BA' => 'Bosnia and Herzegovina',
            'BW' => 'Botswana',
            'BV' => 'Bouvet Island',
            'BR' => 'Brazil',
            'BN' => 'Brunei Darussalam',
            'BG' => 'Bulgaria',
            'BF' => 'Burkina Faso',
            'BI' => 'Burundi',
            'BT' => 'Bhutan',
            'CV' => 'Cape Verde',
            'KH' => 'Cambodia',
            'CM' => 'Cameroon',
            'CA' => 'Canada',
            'KY' => 'Cayman Islands',
            'KZ' => 'Kazakhstan',
            'CF' => 'Central African Republic',
            'TD' => 'Chad',
            'CZ' => 'Czech Republic',
            'CL' => 'Chile',
            'CN' => 'China',
            'CY' => 'Cyprus',
            'CX' => 'Christmas Island',
            'CC' => 'Cocos (Keeling) Islands',
            'CO' => 'Colombia',
            'KM' => 'Comoros',
            'CG' => 'Congo',
            'CD' => 'Congo',
            'CK' => 'Cook Islands',
            'KR' => 'South Korea',
            'KP' => 'North Korea',
            'CI' => "Cote d'Ivoire",
            'CR' => 'Costa Rica',
            'HR' => 'Croatia',
            'CU' => 'Cuba',
            'DK' => 'Denmark',
            'DJ' => 'Djibouti',
            'DM' => 'Dominica',
            'DO' => 'Dominican Republic',
            'EG' => 'Egypt',
            'SV' => 'El Salvador',
            'AE' => 'United Arab Emirates',
            'EC' => 'Ecuador',
            'ER' => 'Eritrea',
            'SK' => 'Slovakia',
            'SI' => 'Slovenia',
            'ES' => 'Spain',
            'US' => 'United States',
            'EE' => 'Estonia',
            'ET' => 'Ethiopia',
            'FO' => 'Faroe Islands',
            'FJ' => 'Fiji',
            'PH' => 'Philippines',
            'FI' => 'Finland',
            'FR' => 'France',
            'GA' => 'Gabon',
            'GM' => 'Gambia',
            'GH' => 'Ghana',
            'GE' => 'Georgia',
            'GS' => 'South Georgia and The South Sandwich Islands',
            'GI' => 'Gibraltar',
            'GR' => 'Greece',
            'GD' => 'Grenada',
            'GL' => 'Greenland',
            'GP' => 'Guadeloupe',
            'GU' => 'Guam',
            'GT' => 'Guatemala',
            'GG' => 'Guernsey',
            'GY' => 'Guyana',
            'GF' => 'French Guiana',
            'GW' => 'Guinea-Bissau',
            'GN' => 'Guinea',
            'GQ' => 'Equatorial Guinea',
            'HT' => 'Haiti',
            'HM' => 'Heard Island and McDonald Islands',
            'HN' => 'Honduras',
            'HK' => 'Hong Kong',
            'HU' => 'Hungary',
            'YE' => 'Yemen',
            'IN' => 'India',
            'ID' => 'Indonesia',
            'IQ' => 'Iraq',
            'IR' => 'Iran',
            'IE' => 'Ireland',
            'IS' => 'Iceland',
            'IL' => 'Israel',
            'IT' => 'Italy',
            'JM' => 'Jamaica',
            'JP' => 'Japan',
            'JE' => 'Jersey',
            'JO' => 'Jordan',
            'KI' => 'Kiribati',
            'KW' => 'Kuwait',
            'LA' => "Lao People's Democratic Republic",
            'LS' => 'Lesotho',
            'LV' => 'Latvia',
            'LB' => 'Lebanon',
            'LR' => 'Liberia',
            'LY' => 'Libyan Arab Jamahiriya',
            'LI' => 'Liechtenstein',
            'LT' => 'Lithuania',
            'LU' => 'Luxembourg',
            'MO' => 'Macao',
            'MK' => 'Macedonia',
            'MG' => 'Madagascar',
            'MY' => 'Malaysia',
            'MW' => 'Malawi',
            'MV' => 'Maldives',
            'ML' => 'Mali',
            'MT' => 'Malta',
            'FK' => 'Falkland Islands (Malvinas)',
            'IM' => 'Isle of Man',
            'MP' => 'Northern Mariana Islands',
            'MA' => 'Morocco',
            'MH' => 'Marshall Islands',
            'MQ' => 'Martinique',
            'MU' => 'Mauritius',
            'MR' => 'Mauritania',
            'YT' => 'Mayotte',
            'UM' => 'United States Minor Outlying Islands',
            'MX' => 'Mexico',
            'MM' => 'Myanmar',
            'FM' => 'Micronesia',
            'MZ' => 'Mozambique',
            'MD' => 'Moldova',
            'MC' => 'Monaco',
            'MN' => 'Mongolia',
            'ME' => 'Montenegro',
            'MS' => 'Montserrat',
            'NA' => 'Namibia',
            'NR' => 'Nauru',
            'NP' => 'Nepal',
            'NI' => 'Nicaragua',
            'NE' => 'Niger',
            'NG' => 'Nigeria',
            'NU' => 'Niue',
            'NF' => 'Norfolk Island',
            'NO' => 'Norway',
            'NC' => 'New Caledonia',
            'NZ' => 'New Zealand',
            'OM' => 'Oman',
            'NL' => 'Netherlands',
            'PW' => 'Palau',
            'PS' => 'Palestinian Territory, Occupied',
            'PA' => 'Panama',
            'PG' => 'Papua New Guinea',
            'PK' => 'Pakistan',
            'PY' => 'Paraguay',
            'PE' => 'Peru',
            'PN' => 'Pitcairn',
            'PF' => 'French Polynesia',
            'PL' => 'Poland',
            'PR' => 'Puerto Rico',
            'PT' => 'Portugal',
            'QA' => 'Qatar',
            'KE' => 'Kenya',
            'KG' => 'Kyrgyzstan',
            'GB' => 'United Kingdom',
            'RE' => 'Reunion',
            'RO' => 'Romania',
            'RW' => 'Rwanda',
            'RU' => 'Russian Federation',
            'EH' => 'Western Sahara',
            'AS' => 'American Samoa',
            'WS' => 'Samoa',
            'PM' => 'Saint Pierre and Miquelon',
            'SB' => 'Solomon Islands',
            'KN' => 'Saint Kitts and Nevis',
            'SM' => 'San Marino',
            'ST' => 'Sao Tome and Principe',
            'VC' => 'Saint Vincent and The Grenadines',
            'SH' => 'Saint Helena, Ascension and Tristan Da Cunha',
            'LC' => 'Saint Lucia',
            'SN' => 'Senegal',
            'SL' => 'Sierra Leone',
            'RS' => 'Serbia',
            'SC' => 'Seychelles',
            'SG' => 'Singapore',
            'SY' => 'Syrian Arab Republic',
            'SO' => 'Somalia',
            'LK' => 'Sri Lanka',
            'SZ' => 'Swaziland',
            'SD' => 'Sudan',
            'SE' => 'Sweden',
            'CH' => 'Switzerland',
            'SR' => 'Suriname',
            'SJ' => 'Svalbard and Jan Mayen',
            'TH' => 'Thailand',
            'TW' => 'Taiwan',
            'TJ' => 'Tajikistan',
            'TZ' => 'Tanzania',
            'TF' => 'French Southern Territories',
            'IO' => 'British Indian Ocean Territory',
            'TL' => 'Timor-Leste',
            'TG' => 'Togo',
            'TK' => 'Tokelau',
            'TO' => 'Tonga',
            'TT' => 'Trinidad and Tobago',
            'TN' => 'Tunisia',
            'TC' => 'Turks and Caicos Islands',
            'TM' => 'Turkmenistan',
            'TR' => 'Turkey',
            'TV' => 'Tuvalu',
            'UA' => 'Ukraine',
            'UG' => 'Uganda',
            'UY' => 'Uruguay',
            'UZ' => 'Uzbekistan',
            'VU' => 'Vanuatu',
            'VA' => 'Holy See (Vatican City State)',
            'VE' => 'Venezuela',
            'VN' => 'Viet Nam',
            'VI' => 'Virgin Islands, U.S.',
            'VG' => 'Virgin Islands, British',
            'WF' => 'Wallis and Futuna',
            'ZM' => 'Zambia',
            'ZW' => 'Zimbabwe',
        ],
        'pt' => [
            'AF' => 'Afeganistão',
            'ZA' => 'África do Sul',
            'AX' => 'Åland, Ilhas',
            'AL' => 'Albânia',
            'DE' => 'Alemanha',
            'AD' => 'Andorra',
            'AO' => 'Angola',
            'AI' => 'Anguilla',
            'AQ' => 'Antárctida',
            'AG' => 'Antigua e Barbuda',
            'AN' => 'Antilhas Holandesas',
            'SA' => 'Arábia Saudita',
            'DZ' => 'Argélia',
            'AR' => 'Argentina',
            'AM' => 'Arménia',
            'AW' => 'Aruba',
            'AU' => 'Austrália',
            'AT' => 'Áustria',
            'AZ' => 'Azerbeijão',
            'BS' => 'Bahamas',
            'BH' => 'Bahrain',
            'BD' => 'Bangladesh',
            'BB' => 'Barbados',
            'BE' => 'Bélgica',
            'BZ' => 'Belize',
            'BJ' => 'Benin',
            'BM' => 'Bermuda',
            'BY' => 'Bielo-Rússia',
            'BO' => 'Bolívia',
            'BA' => 'Bósnia-Herzegovina',
            'BW' => 'Botswana',
            'BV' => 'Bouvet, Ilha',
            'BR' => 'Brasil',
            'BN' => 'Brunei',
            'BG' => 'Bulgária',
            'BF' => 'Burkina Faso',
            'BI' => 'Burundi',
            'BT' => 'Butão',
            'CV' => 'Cabo Verde',
            'KH' => 'Cambodja',
            'CM' => 'Camarões',
            'CA' => 'Canadá',
            'KY' => 'Cayman, Ilhas',
            'KZ' => 'Cazaquistão',
            'CF' => 'Centro-africana, República',
            'TD' => 'Chade',
            'CZ' => 'Checa, República',
            'CL' => 'Chile',
            'CN' => 'China',
            'CY' => 'Chipre',
            'CX' => 'Christmas, Ilha',
            'CC' => 'Cocos, Ilhas',
            'CO' => 'Colômbia',
            'KM' => 'Comores',
            'CG' => 'Congo, República do',
            'CD' => 'Congo',
            'CK' => 'Cook, Ilhas',
            'KR' => 'Coreia do Sul',
            'KP' => 'Coreia do Norte',
            'CI' => 'Costa do Marfim',
            'CR' => 'Costa Rica',
            'HR' => 'Croácia',
            'CU' => 'Cuba',
            'DK' => 'Dinamarca',
            'DJ' => 'Djibouti',
            'DM' => 'Dominica',
            'DO' => 'Dominicana, República',
            'EG' => 'Egipto',
            'SV' => 'El Salvador',
            'AE' => 'Emiratos Árabes Unidos',
            'EC' => 'Equador',
            'ER' => 'Eritreia',
            'SK' => 'Eslováquia',
            'SI' => 'Eslovénia',
            'ES' => 'Espanha',
            'US' => 'Estados Unidos',
            'EE' => 'Estónia',
            'ET' => 'Etiópia',
            'FO' => 'Faroe, Ilhas',
            'FJ' => 'Fiji',
            'PH' => 'Filipinas',
            'FI' => 'Finlândia',
            'FR' => 'França',
            'GA' => 'Gabão',
            'GM' => 'Gâmbia',
            'GH' => 'Gana',
            'GE' => 'Geórgia',
            'GS' => 'Geórgia do Sul e Sandwich do Sul, Ilhas',
            'GI' => 'Gibraltar',
            'GR' => 'Grécia',
            'GD' => 'Grenada',
            'GL' => 'Gronelândia',
            'GP' => 'Guadeloupe',
            'GU' => 'Guam',
            'GT' => 'Guatemala',
            'GG' => 'Guernsey',
            'GY' => 'Guiana',
            'GF' => 'Guiana Francesa',
            'GW' => 'Guiné-Bissau',
            'GN' => 'Guiné-Conacri',
            'GQ' => 'Guiné Equatorial',
            'HT' => 'Haiti',
            'HM' => 'Heard e Ilhas McDonald, Ilha',
            'HN' => 'Honduras',
            'HK' => 'Hong Kong',
            'HU' => 'Hungria',
            'YE' => 'Iémen',
            'IN' => 'Índia',
            'ID' => 'Indonésia',
            'IQ' => 'Iraque',
            'IR' => 'Irão',
            'IE' => 'Irlanda',
            'IS' => 'Islândia',
            'IL' => 'Israel',
            'IT' => 'Itália',
            'JM' => 'Jamaica',
            'JP' => 'Japão',
            'JE' => 'Jersey',
            'JO' => 'Jordânia',
            'KI' => 'Kiribati',
            'KW' => 'Kuwait',
            'LA' => 'Laos',
            'LS' => 'Lesoto',
            'LV' => 'Letónia',
            'LB' => 'Líbano',
            'LR' => 'Libéria',
            'LY' => 'Líbia',
            'LI' => 'Liechtenstein',
            'LT' => 'Lituânia',
            'LU' => 'Luxemburgo',
            'MO' => 'Macau',
            'MK' => 'Macedónia, República da',
            'MG' => 'Madagáscar',
            'MY' => 'Malásia',
            'MW' => 'Malawi',
            'MV' => 'Maldivas',
            'ML' => 'Mali',
            'MT' => 'Malta',
            'FK' => 'Malvinas, Ilhas (Falkland)',
            'IM' => 'Man, Ilha de',
            'MP' => 'Marianas Setentrionais',
            'MA' => 'Marrocos',
            'MH' => 'Marshall, Ilhas',
            'MQ' => 'Martinica',
            'MU' => 'Maurícia',
            'MR' => 'Mauritânia',
            'YT' => 'Mayotte',
            'UM' => 'Menores Distantes dos Estados Unidos, Ilhas',
            'MX' => 'México',
            'MM' => 'Myanmar (antiga Birmânia)',
            'FM' => 'Micronésia, Estados Federados da',
            'MZ' => 'Moçambique',
            'MD' => 'Moldávia',
            'MC' => 'Mónaco',
            'MN' => 'Mongólia',
            'ME' => 'Montenegro',
            'MS' => 'Montserrat',
            'NA' => 'Namíbia',
            'NR' => 'Nauru',
            'NP' => 'Nepal',
            'NI' => 'Nicarágua',
            'NE' => 'Níger',
            'NG' => 'Nigéria',
            'NU' => 'Niue',
            'NF' => 'Norfolk, Ilha',
            'NO' => 'Noruega',
            'NC' => 'Nova Caledónia',
            'NZ' => 'Nova Zelândia',
            'OM' => 'Oman',
            'NL' => 'Países Baixos (Holanda)',
            'PW' => 'Palau',
            'PS' => 'Palestina',
            'PA' => 'Panamá',
            'PG' => 'Papua-Nova Guiné',
            'PK' => 'Paquistão',
            'PY' => 'Paraguai',
            'PE' => 'Peru',
            'PN' => 'Pitcairn',
            'PF' => 'Polinésia Francesa',
            'PL' => 'Polónia',
            'PR' => 'Porto Rico',
            'PT' => 'Portugal',
            'QA' => 'Qatar',
            'KE' => 'Quénia',
            'KG' => 'Quirguistão',
            'GB' => 'Reino Unido',
            'RE' => 'Reunião',
            'RO' => 'Roménia',
            'RW' => 'Ruanda',
            'RU' => 'Rússia',
            'EH' => 'Saara Ocidental',
            'AS' => 'Samoa Americana',
            'WS' => 'Samoa (Samoa Ocidental)',
            'PM' => 'Saint Pierre et Miquelon',
            'SB' => 'Salomão, Ilhas',
            'KN' => 'São Cristóvão e Névis',
            'SM' => 'San Marino',
            'ST' => 'São Tomé e Príncipe',
            'VC' => 'São Vicente e Granadinas',
            'SH' => 'Santa Helena',
            'LC' => 'Santa Lúcia',
            'SN' => 'Senegal',
            'SL' => 'Serra Leoa',
            'RS' => 'Sérvia',
            'SC' => 'Seychelles',
            'SG' => 'Singapura',
            'SY' => 'Síria',
            'SO' => 'Somália',
            'LK' => 'Sri Lanka',
            'SZ' => 'Suazilândia',
            'SD' => 'Sudão',
            'SE' => 'Suécia',
            'CH' => 'Suíça',
            'SR' => 'Suriname',
            'SJ' => 'Svalbard e Jan Mayen',
            'TH' => 'Tailândia',
            'TW' => 'Taiwan',
            'TJ' => 'Tajiquistão',
            'TZ' => 'Tanzânia',
            'TF' => 'Terras Austrais e Antárticas Francesas (TAAF)',
            'IO' => 'Território Britânico do Oceano Índico',
            'TL' => 'Timor-Leste',
            'TG' => 'Togo',
            'TK' => 'Toquelau',
            'TO' => 'Tonga',
            'TT' => 'Trindade e Tobago',
            'TN' => 'Tunísia',
            'TC' => 'Turks e Caicos',
            'TM' => 'Turquemenistão',
            'TR' => 'Turquia',
            'TV' => 'Tuvalu',
            'UA' => 'Ucrânia',
            'UG' => 'Uganda',
            'UY' => 'Uruguai',
            'UZ' => 'Usbequistão',
            'VU' => 'Vanuatu',
            'VA' => 'Vaticano',
            'VE' => 'Venezuela',
            'VN' => 'Vietname',
            'VI' => 'Virgens Americanas, Ilhas',
            'VG' => 'Virgens Britânicas, Ilhas',
            'WF' => 'Wallis e Futuna',
            'ZM' => 'Zâmbia',
            'ZW' => 'Zimbabwe'
        ]
    ];

    public static function getName($iso, $lang = 'pt')
    {
        return isset(self::$countries[$lang][$iso])
            ? self::$countries[$lang][$iso]
            : null;
    }

    public static function getIso($name, $lang = 'en')
    {
        return array_search($name, self::$countries[$lang]);
    }

}

Abaixo, exemplifico o uso dos métodos:

Countries::getName('BR', 'pt'); // Retorna 'Brasil'

Countries::getIso('Brazil', 'en'); // Retorna 'BR'

Comentários