Hola
Remplaza
Código:
$idioma = substr ($HTTP_ACCEPT_LANGUAGE, 0, 2);
por
Código:
$idioma = substr ( $_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2);
Cuando tengas dudas sobre un funcionamiento como ese, lo primero que tienes que hacer, es saber que valor está llegando al if, para eso, puedes usar varias cosas, echo, print, var_dump, etc.
En tu caso, sría un var_dump( $idioma );
El problema que tenías,es que $idioma era igual a null, por lo tanto, siempre entra por el else del condicional.
Sobre la geolocalización, esta consiste en saber desde donde es una conexión, pero no es un sistema fiable para determinar el idioma del usuario, por ejemplo, yo me estoy conectandoa hora mismo de malasia, pero obviamente, mi idioma no es malayo.
Felicidad