aboutsummaryrefslogtreecommitdiff
path: root/node_modules/os-locale/index.js
diff options
context:
space:
mode:
authorFlorian Dold <florian.dold@gmail.com>2017-05-03 15:35:00 +0200
committerFlorian Dold <florian.dold@gmail.com>2017-05-03 15:35:00 +0200
commitde98e0b232509d5f40c135d540a70e415272ff85 (patch)
treea79222a5b58484ab3b80d18efcaaa7ccc4769b33 /node_modules/os-locale/index.js
parente0c9d480a73fa629c1e4a47d3e721f1d2d345406 (diff)
node_modules
Diffstat (limited to 'node_modules/os-locale/index.js')
-rw-r--r--node_modules/os-locale/index.js127
1 files changed, 127 insertions, 0 deletions
diff --git a/node_modules/os-locale/index.js b/node_modules/os-locale/index.js
new file mode 100644
index 000000000..2c8a0065d
--- /dev/null
+++ b/node_modules/os-locale/index.js
@@ -0,0 +1,127 @@
+'use strict';
+var childProcess = require('child_process');
+var execFileSync = childProcess.execFileSync;
+var lcid = require('lcid');
+var defaultOpts = {spawn: true};
+var cache;
+
+function fallback() {
+ cache = 'en_US';
+ return cache;
+}
+
+function getEnvLocale(env) {
+ env = env || process.env;
+ var ret = env.LC_ALL || env.LC_MESSAGES || env.LANG || env.LANGUAGE;
+ cache = getLocale(ret);
+ return ret;
+}
+
+function parseLocale(x) {
+ var env = x.split('\n').reduce(function (env, def) {
+ def = def.split('=');
+ env[def[0]] = def[1];
+ return env;
+ }, {});
+ return getEnvLocale(env);
+}
+
+function getLocale(str) {
+ return (str && str.replace(/[.:].*/, '')) || fallback();
+}
+
+module.exports = function (opts, cb) {
+ if (typeof opts === 'function') {
+ cb = opts;
+ opts = defaultOpts;
+ } else {
+ opts = opts || defaultOpts;
+ }
+
+ if (cache || getEnvLocale() || opts.spawn === false) {
+ setImmediate(cb, null, cache);
+ return;
+ }
+
+ var getAppleLocale = function () {
+ childProcess.execFile('defaults', ['read', '-g', 'AppleLocale'], function (err, stdout) {
+ if (err) {
+ fallback();
+ return;
+ }
+
+ cache = stdout.trim() || fallback();
+ cb(null, cache);
+ });
+ };
+
+ if (process.platform === 'win32') {
+ childProcess.execFile('wmic', ['os', 'get', 'locale'], function (err, stdout) {
+ if (err) {
+ fallback();
+ return;
+ }
+
+ var lcidCode = parseInt(stdout.replace('Locale', ''), 16);
+ cache = lcid.from(lcidCode) || fallback();
+ cb(null, cache);
+ });
+ } else {
+ childProcess.execFile('locale', function (err, stdout) {
+ if (err) {
+ fallback();
+ return;
+ }
+
+ var res = parseLocale(stdout);
+
+ if (!res && process.platform === 'darwin') {
+ getAppleLocale();
+ return;
+ }
+
+ cache = getLocale(res);
+ cb(null, cache);
+ });
+ }
+};
+
+module.exports.sync = function (opts) {
+ opts = opts || defaultOpts;
+
+ if (cache || getEnvLocale() || !execFileSync || opts.spawn === false) {
+ return cache;
+ }
+
+ if (process.platform === 'win32') {
+ var stdout;
+
+ try {
+ stdout = execFileSync('wmic', ['os', 'get', 'locale'], {encoding: 'utf8'});
+ } catch (err) {
+ return fallback();
+ }
+
+ var lcidCode = parseInt(stdout.replace('Locale', ''), 16);
+ cache = lcid.from(lcidCode) || fallback();
+ return cache;
+ }
+
+ var res;
+
+ try {
+ res = parseLocale(execFileSync('locale', {encoding: 'utf8'}));
+ } catch (err) {}
+
+ if (!res && process.platform === 'darwin') {
+ try {
+ cache = execFileSync('defaults', ['read', '-g', 'AppleLocale'], {encoding: 'utf8'}).trim() || fallback();
+ return cache;
+ } catch (err) {
+ return fallback();
+ }
+ }
+
+ cache = getLocale(res);
+ return cache;
+};