Skip to content

Instantly share code, notes, and snippets.

@Narayon
Last active April 9, 2018 22:09
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save Narayon/665b848695eef0d63cea to your computer and use it in GitHub Desktop.
Save Narayon/665b848695eef0d63cea to your computer and use it in GitHub Desktop.
PHP: check browser default language
<?php
function prefered_language( $available_languages, $http_accept_language = 'auto' ) {
if ( 'auto' == $http_accept_language ) {
// $http_accept_language = $_SERVER['HTTP_ACCEPT_LANGUAGE'];
$http_accept_language = isset( $_SERVER['HTTP_ACCEPT_LANGUAGE'] ) ? $_SERVER['HTTP_ACCEPT_LANGUAGE'] : '';
}
preg_match_all( '/([[:alpha:]]{1,8})(-([[:alpha:]|-]{1,8}))?' . '(\s*;\s*q\s*=\s*(1\.0{0,3}|0\.\d{0,3}))?\s*(,|$)/i', $http_accept_language, $hits, PREG_SET_ORDER );
$bestlang = $available_languages[0];
$bestqval = 0;
foreach ( $hits as $arr ) {
$langprefix = strtolower( $arr[1] );
if ( ! empty( $arr[3] ) ) {
$langrange = strtolower( $arr[3] );
$language = $langprefix . '-' . $langrange;
} else {
$language = $langprefix;
}
$qvalue = 1.0;
if ( ! empty( $arr[5] ) ) {
$qvalue = floatval( $arr[5] );
}
if ( in_array( $language, $available_languages ) && ( $qvalue > $bestqval ) ) {
$bestlang = $language;
$bestqval = $qvalue;
} else if ( in_array( $langprefix, $available_languages ) && ( ( $qvalue * 0.9 ) > $bestqval ) ) {
$bestlang = $langprefix;
$bestqval = $qvalue * 0.9;
}
}
return $bestlang;
}
if ( isset( $_GET['lang'] ) ) {
$language = $_GET['lang'];
} else {
$language = prefered_language( array( 'en', 'pt' ) );
}
?>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment