@nativescript-community/l
Version:
Native internationalization plugin for NativeScript using native capabilities of each platform
113 lines • 4.89 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.DataProvider = void 0;
var fs = require("fs");
var path = require("path");
var DataProvider = (function () {
function DataProvider(logger, projectData) {
this.logger = logger;
this.languages = new Map();
this.i18nDirectoryPath = path.join(projectData.appDirectoryPath, DataProvider.I18N_DIRECTORY_NAME);
this.i18nConfig = projectData.nsConfig['i18n'];
this.load();
}
DataProvider.prototype.getDefaultLanguage = function () {
return this.defaultLanguage;
};
DataProvider.prototype.getI18nDirectoryPath = function () {
return this.i18nDirectoryPath;
};
DataProvider.prototype.getLanguages = function () {
return this.languages;
};
DataProvider.prototype.isEmpty = function () {
return this.languages.size === 0;
};
DataProvider.prototype.reload = function () {
return this.load();
};
DataProvider.prototype.load = function () {
var _this = this;
var _a;
if (!fs.existsSync(this.i18nDirectoryPath)) {
this.logger.warn("'".concat(this.i18nDirectoryPath, "' doesn't exists: nothing to localize"));
return this;
}
this.defaultLanguage = (_a = this.i18nConfig) === null || _a === void 0 ? void 0 : _a.defaultLanguage;
fs.readdirSync(this.i18nDirectoryPath)
.map(function (fileName) { return path.join(_this.i18nDirectoryPath, fileName); })
.filter(function (filePath) {
var validExtensions = ['.js', '.json'];
var isValidExtension = validExtensions.indexOf(path.extname(filePath)) > -1;
var isFile = fs.statSync(filePath).isFile();
return isFile && isValidExtension;
})
.forEach(function (filePath) {
var language = path.basename(filePath, path.extname(filePath));
if (path.extname(language) === '.default') {
language = path.basename(language, '.default');
if (!_this.defaultLanguage) {
_this.defaultLanguage = language;
}
}
_this.languages.set(language, _this.loadLangage(filePath));
});
if (this.isEmpty()) {
this.logger.warn("'".concat(this.i18nDirectoryPath, "' is empty: nothing to localize"));
return this;
}
if (!this.defaultLanguage) {
this.defaultLanguage = this.languages.keys().next().value;
this.logger.warn("No file found with the .default extension: default langage set to '".concat(this.defaultLanguage, "'"));
}
var defaultLanguageI18nEntries = this.languages.get(this.defaultLanguage);
if (defaultLanguageI18nEntries) {
this.languages.forEach(function (languageI18nEntries, language) {
if (language !== _this.defaultLanguage) {
languageI18nEntries.forEach(function (_, key) {
if (!defaultLanguageI18nEntries.has(key)) {
defaultLanguageI18nEntries.set(key, key);
}
});
}
});
this.languages.forEach(function (languageI18nEntries, language) {
if (language !== _this.defaultLanguage) {
defaultLanguageI18nEntries.forEach(function (value, key) {
if (!languageI18nEntries.has(key)) {
languageI18nEntries.set(key, value);
}
});
}
});
}
return this;
};
DataProvider.prototype.loadLangage = function (filePath) {
delete require.cache[require.resolve(filePath)];
var fileContent = require(filePath);
var i18nEntries = new Map();
var stack = [{ prefix: '', element: fileContent }];
while (stack.length > 0) {
var _a = stack.pop(), prefix = _a.prefix, element = _a.element;
if (Array.isArray(element)) {
i18nEntries.set(prefix, element.join(''));
}
else if (typeof element === 'object') {
for (var _i = 0, _b = Object.keys(element); _i < _b.length; _i++) {
var key = _b[_i];
var newKey = key;
stack.push({ prefix: prefix === '' ? newKey : "".concat(prefix, ".").concat(newKey), element: element[key] });
}
}
else {
i18nEntries.set(prefix, new String(element).valueOf());
}
}
return i18nEntries;
};
DataProvider.I18N_DIRECTORY_NAME = 'i18n';
return DataProvider;
}());
exports.DataProvider = DataProvider;
//# sourceMappingURL=data.provider.js.map