Aggiungo che il controllo sullo user agent è più corretto.
Uno potrebbe vivere in Italia ed essere di madrelingua spagnola, o potrebbe essere in vacanza a Londra senza sapere una parola di inglese, o potrebbe chiamare da una città come Bolzano, dove è impossibile dire a priori che lingua parla meglio l'utente.
Inoltre l'header Accept-Language può contenere diversi linguaggi; in questo modo, se la lingua primaria non è supportata dal tuo sito, potrai usare la lingua secondaria e così via.
Detto questo, però, l'utente deve sempre avere la possibilità di cambiare lingua (ad esempio perchè non è la persona a cui appartiene il computer, o perchè sta studiando un'altra lingua, o perchè la tua traduzione fa schifo).