Actually they will both capture the language set in the browser. The main difference is that the $_SERVER supports multiple languages in order of preference, whereas navigator.language will only be able to select the first language the browser prefers.
Another difference is that one is captured at client side using JavaScript, and the other at the server side using HTTP headers. It is fair to say (even though headers can be spoofed) that capturing the value at the server side is more stable.
Say in Firefox using tools->options->content->language. If I set language to say Chinese
Then when I make a request and examine the HTTP headers it will say:
Accept-Language: zh,en-us;q=0.7,en;q=0.3 //zh is the two letter Chinese representation
and $_SERVER["HTTP_ACCEPT_LANGUAGE"] will give me zh,en-us;q=0.7,en;q=0.3
navigator.language will give me only zh
So in the header you can see that you can support multiple language options in order. So if for some reason Chinese cannot be rendered, you can check for the second language of preference.
If you use navigator.language you cannot do that..