You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
98 lines
2.3 KiB
98 lines
2.3 KiB
/**
|
|
* Npm module for Unicode CLDR JSON data
|
|
*
|
|
* Copyright 2013 Rafael Xavier de Souza
|
|
* Released under the MIT license
|
|
* https://github.com/rxaviers/cldr-data-npm/blob/master/LICENSE-MIT
|
|
*/
|
|
|
|
"use strict";
|
|
|
|
var JSON_EXTENSION = /^(.*)\.json$/;
|
|
|
|
var assert = require("assert");
|
|
var _fs = require("fs");
|
|
var _path = require("path");
|
|
|
|
function argsToArray(arg) {
|
|
return [].slice.call(arg, 0);
|
|
}
|
|
|
|
function flatten(obj) {
|
|
var arr = [];
|
|
function _flatten(obj, arr) {
|
|
if(Array.isArray(obj)) {
|
|
return obj.forEach(function(obj) {
|
|
_flatten(obj, arr);
|
|
});
|
|
}
|
|
arr.push(obj);
|
|
}
|
|
_flatten(obj, arr);
|
|
return arr;
|
|
}
|
|
|
|
function jsonFiles(dirName) {
|
|
var fileList = _fs.readdirSync(_path.join(__dirname, dirName));
|
|
|
|
return fileList.reduce(function(sum, file) {
|
|
if (JSON_EXTENSION.test(file)) {
|
|
return sum.concat(file.match(JSON_EXTENSION)[1]);
|
|
}
|
|
}, []);
|
|
}
|
|
|
|
function cldrData(path/*, ...*/) {
|
|
assert(typeof path === "string", "must include path (e.g., " +
|
|
"\"main/en/numbers\" or \"supplemental/likelySubtags\")");
|
|
|
|
if (arguments.length > 1) {
|
|
return argsToArray(arguments).reduce(function(sum, path) {
|
|
sum.push(cldrData(path));
|
|
return sum;
|
|
}, []);
|
|
}
|
|
return require("./" + path);
|
|
}
|
|
|
|
function mainPathsFor(locales) {
|
|
return locales.reduce(function(sum, locale) {
|
|
var mainFiles = jsonFiles(_path.join("main", locale));
|
|
mainFiles.forEach(function(mainFile) {
|
|
sum.push(_path.join("main", locale, mainFile));
|
|
});
|
|
return sum;
|
|
}, []);
|
|
}
|
|
|
|
function supplementalPaths() {
|
|
var supplementalFiles = jsonFiles("supplemental");
|
|
|
|
return supplementalFiles.map(function(supplementalFile) {
|
|
return _path.join("supplemental", supplementalFile);
|
|
});
|
|
}
|
|
|
|
Object.defineProperty(cldrData, "availableLocales", {
|
|
get: function() {
|
|
return cldrData("availableLocales").availableLocales;
|
|
}
|
|
});
|
|
|
|
cldrData.all = function() {
|
|
var paths = supplementalPaths().concat(mainPathsFor(this.availableLocales));
|
|
return cldrData.apply({}, paths);
|
|
}
|
|
|
|
cldrData.entireMainFor = function(locale/*, ...*/) {
|
|
assert(typeof locale === "string", "must include locale (e.g., " +
|
|
"\"en\")");
|
|
return cldrData.apply({}, mainPathsFor(argsToArray(arguments)));
|
|
}
|
|
|
|
cldrData.entireSupplemental = function() {
|
|
return cldrData.apply({}, supplementalPaths());
|
|
}
|
|
|
|
module.exports = cldrData;
|