I think this is well covered on [John West's post][1] which in summary describes what the priority is and how Sitecore handles them:

"The Sitecore layout engine retrieves content from the Sitecore repository in the context language (Sitecore.Context.Language). The default logic to determine the context language is to use the first of these variables that specifies a value:

 1. The **sc_lang** query string parameter.
 2. The **language prefix** in the path in the requested URL.
 3. The **language cookie** associated with the context site.
 4. The **default language** associated with the **context logical site**.
 5. The **DefaultLanguage** setting specified in web.config.


  [1]: https://community.sitecore.net/technical_blogs/b/sitecorejohn_blog/posts/repost-overriding-sitecore-39-s-logic-to-determine-the-context-language