aboutsummaryrefslogtreecommitdiff
path: root/node_modules/os-locale/index.js
diff options
context:
space:
mode:
Diffstat (limited to 'node_modules/os-locale/index.js')
-rw-r--r--node_modules/os-locale/index.js101
1 files changed, 101 insertions, 0 deletions
diff --git a/node_modules/os-locale/index.js b/node_modules/os-locale/index.js
new file mode 100644
index 0000000..1ada7a4
--- /dev/null
+++ b/node_modules/os-locale/index.js
@@ -0,0 +1,101 @@
+'use strict';
+const execa = require('execa');
+const lcid = require('lcid');
+const mem = require('mem');
+
+const defaultOpts = {spawn: true};
+const defaultLocale = 'en_US';
+
+function getEnvLocale(env) {
+ env = env || process.env;
+ return env.LC_ALL || env.LC_MESSAGES || env.LANG || env.LANGUAGE;
+}
+
+function parseLocale(x) {
+ const env = x.split('\n').reduce((env, def) => {
+ def = def.split('=');
+ env[def[0]] = def[1].replace(/^"|"$/g, '');
+ return env;
+ }, {});
+ return getEnvLocale(env);
+}
+
+function getLocale(str) {
+ return (str && str.replace(/[.:].*/, ''));
+}
+
+function getAppleLocale() {
+ return execa.stdout('defaults', ['read', '-g', 'AppleLocale']);
+}
+
+function getAppleLocaleSync() {
+ return execa.sync('defaults', ['read', '-g', 'AppleLocale']).stdout;
+}
+
+function getUnixLocale() {
+ if (process.platform === 'darwin') {
+ return getAppleLocale();
+ }
+
+ return execa.stdout('locale')
+ .then(stdout => getLocale(parseLocale(stdout)));
+}
+
+function getUnixLocaleSync() {
+ if (process.platform === 'darwin') {
+ return getAppleLocaleSync();
+ }
+
+ return getLocale(parseLocale(execa.sync('locale').stdout));
+}
+
+function getWinLocale() {
+ return execa.stdout('wmic', ['os', 'get', 'locale'])
+ .then(stdout => {
+ const lcidCode = parseInt(stdout.replace('Locale', ''), 16);
+ return lcid.from(lcidCode);
+ });
+}
+
+function getWinLocaleSync() {
+ const stdout = execa.sync('wmic', ['os', 'get', 'locale']).stdout;
+ const lcidCode = parseInt(stdout.replace('Locale', ''), 16);
+ return lcid.from(lcidCode);
+}
+
+module.exports = mem(opts => {
+ opts = opts || defaultOpts;
+ const envLocale = getEnvLocale();
+ let thenable;
+
+ if (envLocale || opts.spawn === false) {
+ thenable = Promise.resolve(getLocale(envLocale));
+ } else if (process.platform === 'win32') {
+ thenable = getWinLocale();
+ } else {
+ thenable = getUnixLocale();
+ }
+
+ return thenable.then(locale => locale || defaultLocale)
+ .catch(() => defaultLocale);
+});
+
+module.exports.sync = mem(opts => {
+ opts = opts || defaultOpts;
+ const envLocale = getEnvLocale();
+ let res;
+
+ if (envLocale || opts.spawn === false) {
+ res = getLocale(envLocale);
+ } else {
+ try {
+ if (process.platform === 'win32') {
+ res = getWinLocaleSync();
+ } else {
+ res = getUnixLocaleSync();
+ }
+ } catch (err) {}
+ }
+
+ return res || defaultLocale;
+});