Detectar el idioma utilizado por el navegador del usuario

Código PHP

PHP – Device – Detectar idioma navegador

Función que devuelve el idioma seleccionado en el navegador web del usuario. Se puede pasar un idioma por defecto que se devuelve si no se puede detectar el idioma.

Devuelve el nombre del idioma en dos caracteres: «en», «es», …

El idioma se guarda en el valor de HTTP_ACCEPT_LANGUAGE de la variable superglobal $_SERVER.

/**
 * Class HelperDevide
 */
abstract class HelperDevide
{

    /**
     * Devuelve el idioma configurado en al 
     * dispositivo HTTP_ACCEPT_LANGUAGE
     *
     * @param $idioma_default
     *
     * @return string
     */
    public static function getIdiomaNavegador( $idioma_default )
    {

        $http_accept = HelperServer::getValue( 'HTTP_ACCEPT_LANGUAGE' );
        $http_accept = HelperString::toLower( $http_accept );

        if ( HelperValidate::isEmpty( $http_accept ) ) {
            return $idioma_default;
        }

        // dividir los posibles idiomas en un array
        $array_accept = explode( ",", $http_accept );

        $idiomas = [ ];
        foreach ($array_accept as $val) {

            // comprovar el valor q y crear un array asociativo. 
            // Si no existe el valor q, es por defecto 1
  
            if ( preg_match( "/(.*);q=([0-1]{0,1}.\d{0,4})/i", 
                             $val, 
                             $matches ) ) {

                $idiomas[ $matches[ 1 ] ] = ( float )$matches[ 2 ];
            } else {

                $idiomas[ $val ] = 1.0;
            }
        }

        // Eel idioma por defecto el cual es el valor q más alto
        $qval = 0.0;

        foreach ( $idiomas as $key => $value ) {

            if ( $value > $qval ) {
                $qval = ( float )$value;

                $idioma_default = $key;
            }
        }
        return HelperString::toLower( $idioma_default );
    }


}

Ejemplo

print_r(HelperDevide::getIdiomaNavegador('en')); // es