├── index.js ├── package.json └── readme.md /index.js: -------------------------------------------------------------------------------- 1 | module.exports = function browserLocale () { 2 | var lang 3 | 4 | if (navigator.languages && navigator.languages.length) { 5 | // latest versions of Chrome and Firefox set this correctly 6 | lang = navigator.languages[0] 7 | } else if (navigator.userLanguage) { 8 | // IE only 9 | lang = navigator.userLanguage 10 | } else { 11 | // latest versions of Chrome, Firefox, and Safari set this correctly 12 | lang = navigator.language 13 | } 14 | 15 | return lang 16 | } 17 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "browser-locale", 3 | "version": "1.0.3", 4 | "description": "get the user's selected language locale from the navigator object from client-side js", 5 | "main": "index.js", 6 | "keywords": [ 7 | "locale", 8 | "language" 9 | ], 10 | "author": "max ogden", 11 | "license": "BSD-2-Clause", 12 | "repository": "https://github.com/maxogden/browser-locale" 13 | } 14 | -------------------------------------------------------------------------------- /readme.md: -------------------------------------------------------------------------------- 1 | # browser-locale 2 | 3 | [![NPM](https://nodei.co/npm/browser-locale.png?global=true)](https://nodei.co/npm/browser-locale/) 4 | 5 | normalizes weird cross browser issues and tries to return the users selected language in 100% client side JS by looking at various properties on the `window.navigator` object 6 | 7 | note that another technique used to detect the browsers user-set language preference is to look at the `accept-language` header set on outgoing http requests, but this requires making a round trip XHR to a server, which is what [jquery-browser-language](https://github.com/dansingerman/jQuery-Browser-Language) does. 8 | 9 | however, it seems that as of 2014 you can get the user specified language without making a HTTP request (see `index.js` for details) 10 | 11 | ## installation 12 | 13 | ``` 14 | npm install browser-locale 15 | ``` 16 | 17 | use [browserify](http://browserify.org) or [browserify-cdn](http://wzrd.in) to package it for browser use 18 | 19 | ## usage 20 | 21 | ```js 22 | var locale = require('browser-locale')() 23 | // locale will be e.g. en-US or undefined if it could not be detected (e.g. you are in a super weird browser) 24 | ``` 25 | 26 | ## tips 27 | 28 | Not all browsers are consistent in their capitalization of language tags, 29 | e.g. `en-US` vs `en-us`. Keep this in mind when looking for matches in locale 30 | strings. 31 | 32 | See also [locale2](https://github.com/moimikey/locale2), an alternative module 33 | for detecting a user's locale. 34 | --------------------------------------------------------------------------------