ez-localize
Version:
Super-simple localization of strings in a Node/Browserify application
89 lines (84 loc) • 2.4 kB
JavaScript
var fs, stringExtractor;
fs = require('fs');
stringExtractor = require('./stringExtractor');
exports.updateLocalizationFile = function(rootDirs, dataFile, options, callback) {
var localizations;
if (fs.existsSync(dataFile)) {
localizations = JSON.parse(fs.readFileSync(dataFile, 'utf-8'));
} else {
localizations = {};
}
return exports.updateLocalizations(rootDirs, localizations, options, function() {
fs.writeFileSync(dataFile, JSON.stringify(localizations, null, 2), 'utf-8');
return callback();
});
};
exports.updateLocalizations = function(rootDirs, data, options, callback) {
if (!data.locales) {
data.locales = [
{
code: "en",
name: "English"
}
];
}
if (!data.strings) {
data.strings = [];
}
return stringExtractor.findFromRootDirs(rootDirs, function(strs) {
var item, known, loc, map, str, string, _i, _j, _k, _l, _len, _len1, _len2, _len3, _len4, _len5, _m, _n, _ref, _ref1, _ref2, _ref3;
if (options.extraStrings) {
strs = strs.concat(options.extraStrings);
}
map = {};
_ref = data.strings;
for (_i = 0, _len = _ref.length; _i < _len; _i++) {
loc = _ref[_i];
map[loc.en] = loc;
}
for (_j = 0, _len1 = strs.length; _j < _len1; _j++) {
str = strs[_j];
if (!map[str]) {
string = {
_base: "en",
en: str
};
_ref1 = data.locales;
for (_k = 0, _len2 = _ref1.length; _k < _len2; _k++) {
loc = _ref1[_k];
if (loc.code !== "en") {
string[loc.code] = "";
}
}
data.strings.push(string);
map[string.en] = string;
} else {
if (!map[str]._base) {
map[str]._base = "en";
}
_ref2 = data.locales;
for (_l = 0, _len3 = _ref2.length; _l < _len3; _l++) {
loc = _ref2[_l];
if (loc.code !== "en" && (map[str][loc.code] == null)) {
map[str][loc.code] = "";
}
}
}
}
known = {};
for (_m = 0, _len4 = strs.length; _m < _len4; _m++) {
str = strs[_m];
known[str] = true;
}
_ref3 = data.strings;
for (_n = 0, _len5 = _ref3.length; _n < _len5; _n++) {
item = _ref3[_n];
if (!known[item.en]) {
item._unused = true;
} else {
delete item._unused;
}
}
return callback();
});
};