├── .gitignore ├── .jshintrc ├── test └── index.js ├── Gruntfile.js ├── LICENSE ├── package.json ├── DCO.md ├── index.js ├── urls.json ├── install.js └── README.md /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules/ 2 | 3 | # CLDR downloaded files. 4 | .ignored-* 5 | availableLocales.json 6 | defaultContent.json 7 | LICENSE 8 | main/ 9 | scriptMetadata.json 10 | segments/ 11 | state.json 12 | supplemental/ 13 | -------------------------------------------------------------------------------- /.jshintrc: -------------------------------------------------------------------------------- 1 | { 2 | "boss": true, 3 | "eqeqeq": true, 4 | "eqnull": true, 5 | "expr": true, 6 | "immed": true, 7 | "noarg": true, 8 | "onevar": false, 9 | "quotmark": "double", 10 | "smarttabs": true, 11 | "trailing": true, 12 | "undef": true, 13 | "unused": true, 14 | 15 | "node": true, 16 | "globals": { 17 | "exit": false 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /test/index.js: -------------------------------------------------------------------------------- 1 | var assert = require("assert"); 2 | var fs = require("fs"); 3 | var path = require("path"); 4 | var cldrData = require(".."); 5 | 6 | assert(cldrData.entireSupplemental(), "entireSupplemental() runs without error"); 7 | 8 | var locales = fs.readdirSync(path.join(__dirname, "../main")); 9 | 10 | locales.forEach(function (locale) { 11 | assert(cldrData.entireMainFor(locale), 12 | "entireMainFor() runs for '" + locale +"' without error"); 13 | }); 14 | 15 | assert(cldrData.all(), "all() runs without error"); 16 | -------------------------------------------------------------------------------- /Gruntfile.js: -------------------------------------------------------------------------------- 1 | module.exports = function(grunt) { 2 | 3 | "use strict"; 4 | 5 | var pkg = require("./package.json"); 6 | 7 | grunt.initConfig({ 8 | pkg: pkg, 9 | jshint: { 10 | source: { 11 | src: [ "install.js", "lib/**" ], 12 | options: { 13 | jshintrc: ".jshintrc" 14 | } 15 | }, 16 | grunt: { 17 | src: [ "Gruntfile.js" ], 18 | options: { 19 | jshintrc: ".jshintrc" 20 | } 21 | }, 22 | metafiles: { 23 | src: [ "bower.json", "package.json" ], 24 | options: { 25 | jshintrc: ".jshintrc" 26 | } 27 | } 28 | }, 29 | dco: { 30 | current: { 31 | options: { 32 | exceptionalAuthors: { 33 | "rxaviers@gmail.com": "Rafael Xavier de Souza" 34 | } 35 | } 36 | } 37 | } 38 | }); 39 | 40 | require( "matchdep" ).filterDev( "grunt-*" ).forEach( grunt.loadNpmTasks ); 41 | 42 | grunt.registerTask( "default", [ 43 | "jshint:metafiles", 44 | "jshint:grunt", 45 | "jshint:source", 46 | "dco" 47 | ]); 48 | 49 | }; 50 | 51 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Copyright (c) 2013 Rafael Xavier de Souza http://rafael.xavier.blog.br 2 | 3 | Permission is hereby granted, free of charge, to any person 4 | obtaining a copy of this software and associated documentation 5 | files (the "Software"), to deal in the Software without 6 | restriction, including without limitation the rights to use, 7 | copy, modify, merge, publish, distribute, sublicense, and/or sell 8 | copies of the Software, and to permit persons to whom the 9 | Software is furnished to do so, subject to the following 10 | conditions: 11 | 12 | The above copyright notice and this permission notice shall be 13 | included in all copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 16 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES 17 | OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 18 | NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT 19 | HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 20 | WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 21 | FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 22 | OTHER DEALINGS IN THE SOFTWARE. 23 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "cldr-data", 3 | "version": "36.0.3", 4 | "keywords": [ 5 | "unicode", 6 | "CLDR", 7 | "JSON", 8 | "data" 9 | ], 10 | "description": "Npm module for Unicode CLDR JSON data", 11 | "homepage": "https://github.com/rxaviers/cldr-data-npm", 12 | "repository": { 13 | "type": "git", 14 | "url": "git://github.com/rxaviers/cldr-data-npm.git" 15 | }, 16 | "license": [ 17 | { 18 | "type": "MIT", 19 | "url": "https://github.com/rxaviers/cldr-data-npm/blob/master/LICENSE" 20 | } 21 | ], 22 | "author": { 23 | "name": "Rafael Xavier de Souza", 24 | "email": "rxaviers@gmail.com", 25 | "url": "http://rafael.xavier.blog.br" 26 | }, 27 | "main": "index.js", 28 | "files": [ 29 | "DCO.md", 30 | "index.js", 31 | "install.js", 32 | "urls.json" 33 | ], 34 | "scripts": { 35 | "install": "node install.js", 36 | "test": "grunt && node test/index.js" 37 | }, 38 | "dependencies": { 39 | "cldr-data-downloader": "1.1.0", 40 | "glob": "10.3.12" 41 | }, 42 | "devDependencies": { 43 | "grunt": "1.5.x", 44 | "grunt-contrib-jshint": "3.2.x", 45 | "grunt-dco": "0.0.3", 46 | "matchdep": "*" 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /DCO.md: -------------------------------------------------------------------------------- 1 | If you would like to make a contribution to cldr-data-npm, please certify to the following: 2 | 3 | --- 4 | 5 | cldr-data-npm Developer's Certificate of Origin. Version 1.0 6 | 7 | By making a contribution to this project, I certify that: 8 | 9 | (a) The contribution was created in whole or in part by me and I have the right to submit it under the MIT license; or 10 | 11 | (b) The contribution is based upon previous work that, to the best of my knowledge, is covered under an appropriate open source license and I have the right under that license to submit that work with modifications, whether created in whole or in part by me, under the MIT license; or 12 | 13 | (c) The contribution was provided directly to me by some other person who certified (a) or (b) and I have not modified it. 14 | 15 | (d) I understand and agree that this project and the contribution are public and that a record of the contribution (including all metadata and personal information I submit with it, including my sign-off) is maintained indefinitely and may be redistributed consistent with cldr-data-npm's policies and the requirements of the MIT license where they are relevant. 16 | 17 | (e) I am granting this work to this project under the terms of the [MIT license](http://opensource.org/licenses/MIT). 18 | 19 | --- 20 | 21 | And please confirm your certification to the above by adding the following line to your commit message: 22 | 23 | Signed-off-by: Jane Developer 24 | 25 | using your real name (sorry, no pseudonyms or anonymous contributions). Committing with `git commit -s` will add the sign-off at the end of the commit message for you. 26 | 27 | If you are a developer who is authorized to contribute to cldr-data-npm on behalf of your employer, then please use your corporate email address in the Signed-off-by tag. If not, then please use a personal email address. 28 | -------------------------------------------------------------------------------- /index.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Npm module for Unicode CLDR JSON data 3 | * 4 | * Copyright 2013 Rafael Xavier de Souza 5 | * Released under the MIT license 6 | * https://github.com/rxaviers/cldr-data-npm/blob/master/LICENSE-MIT 7 | */ 8 | 9 | "use strict"; 10 | 11 | var JSON_EXTENSION = /^(.*)\.json$/; 12 | 13 | var assert = require("assert"); 14 | var _fs = require("fs"); 15 | var _path = require("path"); 16 | 17 | function argsToArray(arg) { 18 | return [].slice.call(arg, 0); 19 | } 20 | 21 | function flatten(obj) { 22 | var arr = []; 23 | function _flatten(obj, arr) { 24 | if(Array.isArray(obj)) { 25 | return obj.forEach(function(obj) { 26 | _flatten(obj, arr); 27 | }); 28 | } 29 | arr.push(obj); 30 | } 31 | _flatten(obj, arr); 32 | return arr; 33 | } 34 | 35 | function jsonFiles(dirName) { 36 | var fileList = _fs.readdirSync(_path.join(__dirname, dirName)); 37 | 38 | return fileList.reduce(function(sum, file) { 39 | if (JSON_EXTENSION.test(file)) { 40 | return sum.concat(file.match(JSON_EXTENSION)[1]); 41 | } 42 | }, []); 43 | } 44 | 45 | function cldrData(path/*, ...*/) { 46 | assert(typeof path === "string", "must include path (e.g., " + 47 | "\"main/en/numbers\" or \"supplemental/likelySubtags\")"); 48 | 49 | if (arguments.length > 1) { 50 | return argsToArray(arguments).reduce(function(sum, path) { 51 | sum.push(cldrData(path)); 52 | return sum; 53 | }, []); 54 | } 55 | return require("./" + path); 56 | } 57 | 58 | function mainPathsFor(locales) { 59 | return locales.reduce(function(sum, locale) { 60 | var mainFiles = jsonFiles(_path.join("main", locale)); 61 | mainFiles.forEach(function(mainFile) { 62 | sum.push(_path.join("main", locale, mainFile)); 63 | }); 64 | return sum; 65 | }, []); 66 | } 67 | 68 | function supplementalPaths() { 69 | var supplementalFiles = jsonFiles("supplemental"); 70 | 71 | return supplementalFiles.map(function(supplementalFile) { 72 | return _path.join("supplemental", supplementalFile); 73 | }); 74 | } 75 | 76 | Object.defineProperty(cldrData, "availableLocales", { 77 | get: function() { 78 | return cldrData("availableLocales").availableLocales; 79 | } 80 | }); 81 | 82 | cldrData.all = function() { 83 | var paths = supplementalPaths().concat(mainPathsFor(this.availableLocales)); 84 | return cldrData.apply({}, paths); 85 | } 86 | 87 | cldrData.entireMainFor = function(locale/*, ...*/) { 88 | assert(typeof locale === "string", "must include locale (e.g., " + 89 | "\"en\")"); 90 | return cldrData.apply({}, mainPathsFor(argsToArray(arguments))); 91 | } 92 | 93 | cldrData.entireSupplemental = function() { 94 | return cldrData.apply({}, supplementalPaths()); 95 | } 96 | 97 | module.exports = cldrData; 98 | -------------------------------------------------------------------------------- /urls.json: -------------------------------------------------------------------------------- 1 | { 2 | "core": [ 3 | "https://github.com/unicode-cldr/cldr-core/archive/36.0.0.zip", 4 | "https://github.com/unicode-cldr/cldr-dates-modern/archive/36.0.0.zip", 5 | "https://github.com/unicode-cldr/cldr-cal-buddhist-modern/archive/36.0.0.zip", 6 | "https://github.com/unicode-cldr/cldr-cal-chinese-modern/archive/36.0.0.zip", 7 | "https://github.com/unicode-cldr/cldr-cal-coptic-modern/archive/36.0.0.zip", 8 | "https://github.com/unicode-cldr/cldr-cal-dangi-modern/archive/36.0.0.zip", 9 | "https://github.com/unicode-cldr/cldr-cal-ethiopic-modern/archive/36.0.0.zip", 10 | "https://github.com/unicode-cldr/cldr-cal-hebrew-modern/archive/36.0.0.zip", 11 | "https://github.com/unicode-cldr/cldr-cal-indian-modern/archive/36.0.0.zip", 12 | "https://github.com/unicode-cldr/cldr-cal-islamic-modern/archive/36.0.0.zip", 13 | "https://github.com/unicode-cldr/cldr-cal-japanese-modern/archive/36.0.0.zip", 14 | "https://github.com/unicode-cldr/cldr-cal-persian-modern/archive/36.0.0.zip", 15 | "https://github.com/unicode-cldr/cldr-cal-roc-modern/archive/36.0.0.zip", 16 | "https://github.com/unicode-cldr/cldr-localenames-modern/archive/36.0.0.zip", 17 | "https://github.com/unicode-cldr/cldr-misc-modern/archive/36.0.0.zip", 18 | "https://github.com/unicode-cldr/cldr-numbers-modern/archive/36.0.0.zip", 19 | "https://github.com/unicode-cldr/cldr-segments-modern/archive/36.0.0.zip", 20 | "https://github.com/unicode-cldr/cldr-units-modern/archive/36.0.0.zip" 21 | ], 22 | "full": [ 23 | "https://github.com/unicode-cldr/cldr-core/archive/36.0.0.zip", 24 | "https://github.com/unicode-cldr/cldr-segments-modern/archive/36.0.0.zip", 25 | "https://github.com/unicode-cldr/cldr-dates-full/archive/36.0.0.zip", 26 | "https://github.com/unicode-cldr/cldr-cal-buddhist-full/archive/36.0.0.zip", 27 | "https://github.com/unicode-cldr/cldr-cal-chinese-full/archive/36.0.0.zip", 28 | "https://github.com/unicode-cldr/cldr-cal-coptic-full/archive/36.0.0.zip", 29 | "https://github.com/unicode-cldr/cldr-cal-dangi-full/archive/36.0.0.zip", 30 | "https://github.com/unicode-cldr/cldr-cal-ethiopic-full/archive/36.0.0.zip", 31 | "https://github.com/unicode-cldr/cldr-cal-hebrew-full/archive/36.0.0.zip", 32 | "https://github.com/unicode-cldr/cldr-cal-indian-full/archive/36.0.0.zip", 33 | "https://github.com/unicode-cldr/cldr-cal-islamic-full/archive/36.0.0.zip", 34 | "https://github.com/unicode-cldr/cldr-cal-japanese-full/archive/36.0.0.zip", 35 | "https://github.com/unicode-cldr/cldr-cal-persian-full/archive/36.0.0.zip", 36 | "https://github.com/unicode-cldr/cldr-cal-roc-full/archive/36.0.0.zip", 37 | "https://github.com/unicode-cldr/cldr-localenames-full/archive/36.0.0.zip", 38 | "https://github.com/unicode-cldr/cldr-misc-full/archive/36.0.0.zip", 39 | "https://github.com/unicode-cldr/cldr-numbers-full/archive/36.0.0.zip", 40 | "https://github.com/unicode-cldr/cldr-units-full/archive/36.0.0.zip" 41 | ] 42 | } 43 | -------------------------------------------------------------------------------- /install.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Npm module for Unicode CLDR JSON data 3 | * 4 | * Copyright 2013 Rafael Xavier de Souza 5 | * Released under the MIT license 6 | * https://github.com/rxaviers/cldr-data-npm/blob/master/LICENSE-MIT 7 | */ 8 | 9 | "use strict"; 10 | 11 | var coverage, parentPackage, peerPackages, srcUrl; 12 | 13 | var cldrDownloader = require("cldr-data-downloader"); 14 | var glob = require("glob").globSync; 15 | var path = require("path"); 16 | var child_process = require("child_process"); 17 | 18 | var options = {}; 19 | 20 | var isNpm3; 21 | try { 22 | var npmv = child_process.execSync("npm -v").toString("utf8"); 23 | isNpm3 = (npmv.split(".")[0] === "3"); 24 | } catch(error) { 25 | // child_process.execSync is not available on Node v0.10 26 | // fortunately, we can use ENV variables set by npm do detect its version 27 | // npm_config_user_agent: 'npm/2.15.1 node/v0.10.46 darwin x64' 28 | // npm_config_user_agent: 'npm/3.10.3 node/v6.3.0 darwin x64' 29 | // Note that users can override the value of this config option, 30 | // therefore it's safer to use this method only as a fall-back option. 31 | if (/^npm\/2\./.test(process.env.npm_config_user_agent)) { 32 | isNpm3 = false; 33 | } else { 34 | // Better safe than sorry. 35 | isNpm3 = true; 36 | } 37 | } 38 | 39 | try { 40 | parentPackage = require("../../package.json"); 41 | } catch(error) {} 42 | 43 | try { 44 | peerPackages = glob("../*/package.json").map(function(file) { 45 | try { 46 | return require(path.resolve(file)); 47 | } catch(error) { 48 | return {}; 49 | } 50 | }); 51 | } catch(error) { 52 | console.error( 53 | "Warning: Something weird happened checking whether this is a " + 54 | "peer dependency.", error.message 55 | ); 56 | peerPackages = []; 57 | } 58 | 59 | if (!isNpm3 && parentPackage && 60 | !(parentPackage.dependencies && parentPackage.dependencies["cldr-data"]) && 61 | !(parentPackage.devDependencies && parentPackage.devDependencies["cldr-data"]) && 62 | peerPackages.some(function(peerPackage) { 63 | return peerPackage.peerDependencies && 64 | peerPackage.peerDependencies["cldr-data"]; 65 | })) { 66 | console.error( 67 | "Warning: Skipping to download CLDR data, because `cldr-data` is a " + 68 | "peer dependency. If you want it to be downloaded, make sure it's " + 69 | "listed under `dependencies` or `devDependencies` of the `package.json`" + 70 | "of your application." 71 | ); 72 | return process.exit(0); 73 | } 74 | 75 | if (process.env.CLDR_URL) { 76 | console.warn("CLDR_URL is deprecated, use CLDR_DATA_URLS_JSON instead."); 77 | srcUrl = srcUrl.replace( 78 | "http://www.unicode.org/Public/cldr", 79 | process.env.CLDR_URL.replace(/\/$/, "") 80 | ); 81 | 82 | } else { 83 | if (process.env.CLDR_DATA_URLS_JSON) { 84 | srcUrl = process.env.CLDR_DATA_URLS_JSON; 85 | } else if (parentPackage && parentPackage["cldr-data-urls-json"]) { 86 | srcUrl = parentPackage["cldr-data-urls-json"]; 87 | } else { 88 | srcUrl = path.join(__dirname, "./urls.json"); 89 | } 90 | } 91 | 92 | if (process.env.CLDR_COVERAGE) { 93 | coverage = process.env.CLDR_COVERAGE; 94 | } else if (parentPackage && parentPackage["cldr-data-coverage"] && ( 95 | (parentPackage.dependencies && parentPackage.dependencies["cldr-data"]) || 96 | (parentPackage.devDependencies && parentPackage.devDependencies["cldr-data"]) 97 | )) { 98 | coverage = parentPackage["cldr-data-coverage"]; 99 | } 100 | 101 | if (process.env.CLDR_DATA_URLS_FILTER) { 102 | options.filterRe = process.env.CLDR_DATA_URLS_FILTER; 103 | } else if (parentPackage && parentPackage["cldr-data-urls-filter"]) { 104 | options.filterRe = parentPackage["cldr-data-urls-filter"]; 105 | } 106 | 107 | if (coverage) { 108 | options.srcUrlKey = coverage; 109 | } 110 | 111 | cldrDownloader( 112 | srcUrl, 113 | __dirname, 114 | options, 115 | function(error) { 116 | if (error) { 117 | if (/E_ALREADY_INSTALLED/.test(error.code)) { 118 | error.message = error.message.replace(/Use `options.*/, "Use -f to " + 119 | "override."); 120 | return console.log(error.message); 121 | } else { 122 | console.error("Whops", error.message); 123 | process.exit(1); 124 | } 125 | } 126 | } 127 | ); 128 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Npm's cldr-data 2 | 3 | Npm module for [Unicode CLDR JSON][] data. 4 | 5 | [Unicode CLDR JSON]: http://cldr.unicode.org/index/cldr-spec/json 6 | 7 | ## Goal 8 | 9 | - Allow i18n libraries to define CLDR data as versioned "peer" dependency. 10 | - Provide tools to assist (in other words, ease the pain) on fetching the data. 11 | 12 | Bonus goals 13 | 14 | - Optimal for backend development. (Frontend, see [Bower's cldr-data][]). 15 | - Optimal for Node.js environment. (AMD, see [Bower's cldr-data][]). 16 | 17 | [Bower's cldr-data]: https://github.com/rxaviers/cldr-data-bower 18 | 19 | ## Usage 20 | 21 | ### For libraries 22 | 23 | On the `package.json` of your i18n library, define its CLDR data dependency by 24 | using the *peerDependencies* property. 25 | 26 | "peerDependencies": { 27 | "cldr-data": ">=26" 28 | } 29 | 30 | On your library, access CLDR JSON data using `require("cldr-data")`. 31 | 32 | ```javascript 33 | function Pluralize(locale) { 34 | var plurals = require("cldr-data/supplemental/plurals"); 35 | var language = extractLanguageFrom(locale); 36 | 37 | // Your awesome pluralization logic 38 | pluralForm = doAwesomeStuffWith( 39 | plurals.supplemental["plurals-type-cardinal"][language] 40 | ); 41 | 42 | return pluralForm; 43 | } 44 | ``` 45 | 46 | For your convinience, use cldr-data in conjunction with [cldr.js][]. You can 47 | find more details switching to the [Foo Number Format Library Example][] or 48 | [Application Example][] branches. 49 | 50 | [Foo Number Format Library Example]: https://github.com/rxaviers/cldr-data-npm/tree/example-library-foo 51 | [Application Example]: https://github.com/rxaviers/cldr-data-npm/tree/example-application 52 | [cldr.js]: https://github.com/rxaviers/cldrjs 53 | 54 | ### For applications 55 | 56 | On the `package.json` of your applications, define its CLDR data dependency by 57 | using the *dependencies* or *devDependencies* property. 58 | 59 | "dependencies": { 60 | "cldr-data": "26", 61 | "libraries-that-use-cldr-data": "x" 62 | } 63 | 64 | #### Locale coverage 65 | 66 | By default, the locale coverage installed is **core**, which Unicode defines as 67 | the top tier languages and is equivalent to the `json.zip` content. There are 68 | two ways to modify the installation and get the **full** coverage instead. 69 | 70 | *Use the environment variable `CLDR_COVERAGE`* 71 | 72 | On the command line, set the locale coverage using the environment variable. 73 | 74 | ``` 75 | $ CLDR_COVERAGE=full npm install 76 | ``` 77 | 78 | *Use the package.json `cldr-data-coverage` property* 79 | 80 | On the `package.json` of you application, set the locale coverage using the 81 | `cldr-data-coverage` property. 82 | 83 | ``` 84 | { 85 | ... 86 | "cldr-data-coverage": "full", 87 | ... 88 | } 89 | ``` 90 | 91 | #### Set Custom json file with urls or filter existing 92 | 93 | By default, used file `urls.json` form cldr-data module, which contain 94 | for each locale coverage 18 urls. For set custom `.json` file, that have 95 | structure accoding `urls.json` use `cldr-data-urls-json` property in `package.json` your webApp 96 | *Define the package.json `cldr-data-urls-json` property* 97 | 98 | ``` 99 | { 100 | ... 101 | "cldr-data-urls-json": "../../cldrdatadwnl.json", 102 | ... 103 | } 104 | ``` 105 | Path must be relative from cldr-data directory 106 | 107 | 108 | *Example custom cldrdatadwnl.json* 109 | File have only 7 urls. 110 | ``` 111 | { 112 | "core": [ 113 | "https://github.com/unicode-cldr/cldr-core/archive/30.0.3.zip", 114 | "https://github.com/unicode-cldr/cldr-dates-modern/archive/30.0.3.zip", 115 | "https://github.com/unicode-cldr/cldr-localenames-modern/archive/30.0.3.zip", 116 | "https://github.com/unicode-cldr/cldr-misc-modern/archive/30.0.3.zip", 117 | "https://github.com/unicode-cldr/cldr-numbers-modern/archive/30.0.3.zip", 118 | "https://github.com/unicode-cldr/cldr-segments-modern/archive/30.0.3.zip", 119 | "https://github.com/unicode-cldr/cldr-units-modern/archive/30.0.3.zip" 120 | ] 121 | } 122 | ``` 123 | 124 | Or you can filter existing urls by regexp pattern, via `cldr-data-urls-filter` 125 | field in `package.json`: 126 | 127 | ``` 128 | { 129 | ... 130 | "cldr-data-urls-filter": "(cldr-core|cldr-numbers-modern|cldr-dates-modern)", 131 | ... 132 | } 133 | ``` 134 | 135 | 136 | ## License 137 | 138 | MIT © [Rafael Xavier de Souza](http://rafael.xavier.blog.br) 139 | --------------------------------------------------------------------------------