aboutsummaryrefslogtreecommitdiffstats
path: root/i18n/src/closureSlurper.js
diff options
context:
space:
mode:
Diffstat (limited to 'i18n/src/closureSlurper.js')
-rw-r--r--i18n/src/closureSlurper.js106
1 files changed, 106 insertions, 0 deletions
diff --git a/i18n/src/closureSlurper.js b/i18n/src/closureSlurper.js
new file mode 100644
index 00000000..32ef022c
--- /dev/null
+++ b/i18n/src/closureSlurper.js
@@ -0,0 +1,106 @@
+#!/usr/bin/env node
+'use strict';
+
+require.paths.push(__dirname);
+var Q = require('qq'),
+ qfs = require('q-fs'),
+ converter = require('converter.js'),
+ util = require('util.js'),
+ localeInfo = {},
+ localeIds = [],
+ currencySymbols,
+ goog = { provide: function() {},
+ require: function() {},
+ i18n: {currency: {}} };
+
+createFolder('../locale/').then(function() {
+ var promiseA = Q.defer(),
+ promiseB = Q.defer();
+
+ qfs.read(__dirname + '/../closure/currencySymbols.js', 'b').then(function(content) {
+ eval(content.toString());
+ currencySymbols = goog.i18n.currency.CurrencyInfo;
+ currencySymbols.__proto__ = goog.i18n.currency.CurrencyInfoTier2;
+
+ qfs.read(__dirname + '/../closure/numberSymbols.js', 'b').then(function(content) {
+ //eval script in the current context so that we get access to all the symbols
+ eval(content.toString());
+ for (propName in goog.i18n) {
+ var localeID = util.findLocaleId(propName, 'num');
+ if (localeID) {
+ if (!localeInfo[localeID]) {
+ localeInfo[localeID] = {};
+ localeIds.push(localeID);
+ }
+ var convertedData = converter.convertNumberData(goog.i18n[propName], currencySymbols);
+ localeInfo[localeID].NUMBER_FORMATS = convertedData;
+ }
+ }
+
+ promiseA.resolve();
+ });
+ });
+
+
+ qfs.read(__dirname + '/../closure/datetimeSymbols.js', 'b').then(function(content) {
+ eval(content.toString());
+ for (propName in goog.i18n) {
+ var localeID = util.findLocaleId(propName, 'datetime');
+ if (localeID) {
+ if (!localeInfo[localeID]) {
+ localeInfo[localeID] = {};
+ localeIds.push(localeID);
+ }
+ var convertedData = converter.convertDatetimeData(goog.i18n[propName]);
+ localeInfo[localeID].DATETIME_FORMATS = convertedData;
+ }
+ }
+
+ promiseB.resolve();
+ });
+
+ return Q.join(promiseA.promise, promiseB.promise, noop);
+}).then(function() {
+ localeIds.forEach(function(localeID) {
+ var fallBackID = localeID.match(/[A-Za-z]+/)[0],
+ localeObj = localeInfo[localeID],
+ fallBackObj = localeInfo[fallBackID];
+
+ // fallBack to language formats when country format is missing
+ // e.g. if NUMBER_FORMATS of en_xyz is not present, use the NUMBER_FORMATS of en instead
+ if (!localeObj.NUMBER_FORMATS) {
+ localeObj.NUMBER_FORMATS = fallBackObj.NUMBER_FORMATS;
+ }
+
+ if (!localeObj.DATETIME_FORMATS) {
+ localeObj.DATETIME_FORMATS = fallBackObj.DATETIME_FORMATS;
+ }
+
+ // e.g. from zh_CN to zh-CN, from en_US to en-US
+ var correctedLocaleId = localeID.replace(/_/g, '-').toLowerCase();
+ localeObj.id = correctedLocaleId;
+
+ var prefix = 'angular.service("$locale", function() {\nreturn ',
+ content = JSON.stringify(localeInfo[localeID]).replace(/\ยค/g,'\\u00A4'),
+ suffix;
+
+ suffix = ';\n});';
+
+ var toWrite = prefix + content + suffix;
+
+ qfs.write(__dirname + '/../locale/' + 'angular-locale_' + correctedLocaleId + '.js', toWrite);
+ });
+ console.log('Generated ' + localeIds.length + ' locale files!');
+}).end();
+
+function noop() {};
+
+/**
+* Make a folder under current directory.
+* @param folder {string} name of the folder to be made
+*/
+function createFolder(folder) {
+ return qfs.isDirectory(__dirname + '/' + folder).then(function(isDir) {
+ if (!isDir) return qfs.makeDirectory(__dirname + '/' + folder);
+ });
+}