How to detect user’s country/language – the simple way

Detecting visitor’s language

To detect user’s language we need a table of language codes and the $_SERVER['HTTP_ACCEPT_LANGUAGE'] variable.


$codes = array(
'af'=>'Afrikaans',    'sq'=>'Albanian',
'ar'=>'Arabic',       'eu'=>'Basque',
'bg'=>'Bulgarian',    'be'=>'Belarusian',
'ca'=>'Catalan',      'zh'=>'Chinese',
'hr'=>'Croatian',     'cs'=>'Czech',
'da'=>'Danish',       'nl'=>'Dutch',
'en'=>'English',      'et'=>'Estonian',
'fo'=>'Faeroese',     'fa'=>'Farsi',
'fi'=>'Finnish',      'fr'=>'French',
'gd'=>'Gaelic',       'ga'=>'Irish',
'de'=>'German',       'el'=>'Greek',
'he'=>'Hebrew',       'hi'=>'Hindi',
'hu'=>'Hungarian',    'is'=>'Icelandic',
'id'=>'Indonesian',   'it'=>'Italian',
'ja'=>'Japanese',     'ko'=>'Korean',
'lv'=>'Latvian',      'lt'=>'Lithuanian',
'mk'=>'Macedonian',   'ms'=>'Malaysian',
'mt'=>'Maltese',      'no'=>'Norwegian',
'pl'=>'Polish',       'pt'=>'Portuguese',
'rm'=>'Rhaeto-Romanic','ro'=>'Romanian',
'ru'=>'Russian',      'sz'=>'Sami',
'sr'=>'Serbian',      'sk'=>'Slovak',
'sl'=>'Slovenian',    'sb'=>'Sorbian',
'es'=>'Spanish',      'sx'=>'Sutu',
'sv'=>'Swedish',      'th'=>'Thai',
'ts'=>'Tsonga',       'tn'=>'Tswana',
'tr'=>'Turkish',      'uk'=>'Ukrainian',
'ur'=>'Urdu',         've'=>'Venda',
'vi'=>'Vietnamese',   'xh'=>'Xhosa',
'ji'=>'Yiddish',      'zu'=>'Zulu'
);

$langCode = substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2);

if (isset($codes[$langCode]))
{
 echo 'Language: ' . $codes[$langCode];
}
else
{
 echo 'Not found';

}

Detecting user’s country using his host address


$domains=array(
'ad'=>'Andorra',
'ae'=>'United Arab Emirates',
'af'=>'Afghanistan',
'ag'=>'Antigua and Barbuda',
'ai'=>'Anguilla',
'al'=>'Albania',
'am'=>'Armenia',
'an'=>'Netherlands Antilles',
'ao'=>'Angola',
'aq'=>'Antarctica',
'ar'=>'Argentina',
'as'=>'American Samoa',
'at'=>'Austria',
'au'=>'Australia',
'aw'=>'Aruba',
'az'=>'Azerbaidjan',
'ba'=>'Bosnia-Herzegovina',
'bb'=>'Barbados',
'bd'=>'Bangladesh',
'be'=>'Belgium',
'bf'=>'Burkina Faso',
'bg'=>'Bulgaria',
'bh'=>'Bahrain',
'bi'=>'Burundi',
'bj'=>'Benin',
'bm'=>'Bermuda',
'bn'=>'Brunei Darussalam',
'bo'=>'Bolivia',
'br'=>'Brazil',
'bs'=>'Bahamas',
'bt'=>'Bhutan',
'bv'=>'Bouvet Island',
'bw'=>'Botswana',
'by'=>'Belarus',
'bz'=>'Belize',
'ca'=>'Canada',
'cc'=>'Cocos (Keeling) Islands',
'cf'=>'Central African Republic',
'cg'=>'Congo',
'ch'=>'Switzerland',
'ci'=>'Ivory Coast (Cote D`Ivoire)',
'ck'=>'Cook Islands',
'cl'=>'Chile',
'cm'=>'Cameroon',
'cn'=>'China',
'co'=>'Colombia',
'cr'=>'Costa Rica',
'cs'=>'Former Czechoslovakia',
'cu'=>'Cuba',
'cv'=>'Cape Verde',
'cx'=>'Christmas Island',
'cy'=>'Cyprus',
'cz'=>'Czech Republic',
'de'=>'Germany',
'dj'=>'Djibouti',
'dk'=>'Denmark',
'dm'=>'Dominica',
'do'=>'Dominican Republic',
'dz'=>'Algeria',
'ec'=>'Ecuador',
'ee'=>'Estonia',
'eg'=>'Egypt',
'eh'=>'Western Sahara',
'er'=>'Eritrea',
'es'=>'Spain',
'et'=>'Ethiopia',
'fi'=>'Finland',
'fj'=>'Fiji',
'fk'=>'Falkland Islands',
'fm'=>'Micronesia',
'fo'=>'Faroe Islands',
'fr'=>'France',
'fx'=>'France (European Territory)',
'ga'=>'Gabon',
'gb'=>'Great Britain',
'gd'=>'Grenada',
'ge'=>'Georgia',
'gf'=>'French Guyana',
'gh'=>'Ghana',
'gi'=>'Gibraltar',
'gl'=>'Greenland',
'gm'=>'Gambia',
'gn'=>'Guinea',
'gp'=>'Guadeloupe (French)',
'gq'=>'Equatorial Guinea',
'gr'=>'Greece',
'gs'=>'S. Georgia & S. Sandwich Isls',
'gt'=>'Guatemala',
'gu'=>'Guam (USA)',
'gw'=>'Guinea Bissau',
'gy'=>'Guyana',
'hk'=>'Hong Kong',
'hm'=>'Heard and McDonald Islands',
'hn'=>'Honduras',
'hr'=>'Croatia',
'ht'=>'Haiti',
'hu'=>'Hungary',
'id'=>'Indonesia',
'ie'=>'Ireland',
'il'=>'Israel',
'in'=>'India',
'int'=>'International',
'io'=>'British Indian Ocean Territory',
'iq'=>'Iraq',
'ir'=>'Iran',
'is'=>'Iceland',
'it'=>'Italy',
'jm'=>'Jamaica',
'jo'=>'Jordan',
'jp'=>'Japan',
'ke'=>'Kenya',
'kg'=>'Kyrgyzstan',
'kh'=>'Cambodia',
'ki'=>'Kiribati',
'km'=>'Comoros',
'kn'=>'Saint Kitts & Nevis Anguilla',
'kp'=>'North Korea',
'kr'=>'South Korea',
'kw'=>'Kuwait',
'ky'=>'Cayman Islands',
'kz'=>'Kazakhstan',
'la'=>'Laos',
'lb'=>'Lebanon',
'lc'=>'Saint Lucia',
'li'=>'Liechtenstein',
'lk'=>'Sri Lanka',
'lr'=>'Liberia',
'ls'=>'Lesotho',
'lt'=>'Lithuania',
'lu'=>'Luxembourg',
'lv'=>'Latvia',
'ly'=>'Libya',
'ma'=>'Morocco',
'mc'=>'Monaco',
'md'=>'Moldavia',
'mg'=>'Madagascar',
'mh'=>'Marshall Islands',
'mil'=>'USA Military',
'mk'=>'Macedonia',
'ml'=>'Mali',
'mm'=>'Myanmar',
'mn'=>'Mongolia',
'mo'=>'Macau',
'mp'=>'Northern Mariana Islands',
'mq'=>'Martinique (French)',
'mr'=>'Mauritania',
'ms'=>'Montserrat',
'mt'=>'Malta',
'mu'=>'Mauritius',
'mv'=>'Maldives',
'mw'=>'Malawi',
'mx'=>'Mexico',
'my'=>'Malaysia',
'mz'=>'Mozambique',
'na'=>'Namibia',
'nc'=>'New Caledonia (French)',
'ne'=>'Niger',
'net'=>'Network',
'nf'=>'Norfolk Island',
'ng'=>'Nigeria',
'ni'=>'Nicaragua',
'nl'=>'Netherlands',
'no'=>'Norway',
'np'=>'Nepal',
'nr'=>'Nauru',
'nt'=>'Neutral Zone',
'nu'=>'Niue',
'nz'=>'New Zealand',
'om'=>'Oman',
'pa'=>'Panama',
'pe'=>'Peru',
'pf'=>'Polynesia (French)',
'pg'=>'Papua New Guinea',
'ph'=>'Philippines',
'pk'=>'Pakistan',
'pl'=>'Poland',
'pm'=>'Saint Pierre and Miquelon',
'pn'=>'Pitcairn Island',
'pr'=>'Puerto Rico',
'pt'=>'Portugal',
'pw'=>'Palau',
'py'=>'Paraguay',
'qa'=>'Qatar',
're'=>'Reunion (French)',
'ro'=>'Romania',
'ru'=>'Russian Federation',
'rw'=>'Rwanda',
'sa'=>'Saudi Arabia',
'sb'=>'Solomon Islands',
'sc'=>'Seychelles',
'sd'=>'Sudan',
'se'=>'Sweden',
'sg'=>'Singapore',
'sh'=>'Saint Helena',
'si'=>'Slovenia',
'sj'=>'Svalbard and Jan Mayen Islands',
'sk'=>'Slovak Republic',
'sl'=>'Sierra Leone',
'sm'=>'San Marino',
'sn'=>'Senegal',
'so'=>'Somalia',
'sr'=>'Suriname',
'st'=>'Saint Tome (Sao Tome) and Principe',
'su'=>'Former USSR',
'sv'=>'El Salvador',
'sy'=>'Syria',
'sz'=>'Swaziland',
'tc'=>'Turks and Caicos Islands',
'td'=>'Chad',
'tf'=>'French Southern Territories',
'tg'=>'Togo',
'th'=>'Thailand',
'tj'=>'Tadjikistan',
'tk'=>'Tokelau',
'tm'=>'Turkmenistan',
'tn'=>'Tunisia',
'to'=>'Tonga',
'tp'=>'East Timor',
'tr'=>'Turkey',
'tt'=>'Trinidad and Tobago',
'tv'=>'Tuvalu',
'tw'=>'Taiwan',
'tz'=>'Tanzania',
'ua'=>'Ukraine',
'ug'=>'Uganda',
'uk'=>'United Kingdom',
'um'=>'USA Minor Outlying Islands',
'us'=>'United States',
'uy'=>'Uruguay',
'uz'=>'Uzbekistan',
'va'=>'Vatican City State',
'vc'=>'Saint Vincent & Grenadines',
've'=>'Venezuela',
'vg'=>'Virgin Islands (British)',
'vi'=>'Virgin Islands (USA)',
'vn'=>'Vietnam',
'vu'=>'Vanuatu',
'wf'=>'Wallis and Futuna Islands',
'ws'=>'Samoa',
'ye'=>'Yemen',
'yt'=>'Mayotte',
'yu'=>'Yugoslavia',
'za'=>'South Africa',
'zm'=>'Zambia',
'zr'=>'Zaire',
'zw'=>'Zimbabwe');

$host = gethostbyaddr($_SERVER['REMOTE_ADDR']);
$domain = substr($host, strrpos($host,'.')+1);
if (isset($domains[$domain]))
{
echo 'Country: '. $domains[$domain];
}
else
{
echo 'Not found';
}

This entry was posted on Thursday, January 21st, 2010 at 7:49 pm and is filed under PHP. You can follow any responses to this entry through the RSS 2.0 feed. You can leave a response, or trackback from your own site.

6 Responses to “How to detect user’s country/language – the simple way”

  1. Cecil Chryst Says:

    I have been a reader for a long time, but am a first time commenter. I just wanted to let you know that this has been / is my favorite post of yours! Keep up the great work and I’ll keep on checking back.

  2. panama Says:

    It is nice to definitely dig up a website where the blogger is bright. Thanks for creating your web site.

  3. musa Says:

    thanks mate, i’ve been searching for this country database long time on google.
    good job.

  4. Max Says:

    This was brilliant!

    It helped me hide the Google Translation widget for visitors not needing to see it.

    Thanks!

  5. amit Says:

    this is also awesome code …

    if (!empty($_SERVER['HTTP_CLIENT_IP'])) {
    //check ip from share internet
    $ip=$_SERVER['HTTP_CLIENT_IP'];
    } elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
    //to check ip is pass from proxy
    $ip=$_SERVER['HTTP_X_FORWARDED_FOR'];
    } else {
    $ip=$_SERVER['REMOTE_ADDR'];
    }
    //$var = file_get_contents(“http://api.ipinfodb.com/v3/ip-country/?key=a3adbc295b946a602523bc90e4373320d22ef00bea1e3472fc20249d9dd4566c&ip=” . $ip);
    $v = explode(‘;’,$var);
    $country= end($v);

  6. admin Says:

    It uses external website to gather the information but looks quite compact. Thanks!

Leave a Reply

 
TopOfBlogs Web Development & Design Blogs