Skip to content

Instantly share code, notes, and snippets.

@am
Forked from leipert/detectBrowserLanguage.js
Last active February 9, 2018 11:19
Show Gist options
  • Save am/e90e158a3de66413676b1b1488d9d5d9 to your computer and use it in GitHub Desktop.
Save am/e90e158a3de66413676b1b1488d9d5d9 to your computer and use it in GitHub Desktop.
Detect browser language in javascript (utilizing lodash/fp)
// These window.navigator contain language information
// 1. languages -> Array of preferred languages (eg ["en-US", "zh-CN", "ja-JP"]) Firefox^32, Chrome^32
// 2. language -> Preferred language as String (eg "en-US") Firefox^5, IE^11, Safari,
// Chrome sends Browser UI language
const browserLanguagePropertyKeys = ['languages', 'language'];
const availableLanguages = ['en', 'es'];
const detectedLocale = _.flow(
_.pick(browserLanguagePropertyKeys), // Get only language properties
_.values, // Get values of the properties
_.flatten, // Flatten all arrays
_.compact, // Remove undefined values
_.map(lang => lang.substr(0, 2)), //Shorten strings to use two chars (en-US -> en)
_.find(lang => _.includes(lang)(availableLanguages)) //Returns first language matched in available languages
)(self.navigator);
const locale = detectedLocale || 'en'; // If no locale is detected, fallback to 'en'
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment