UNPKG

@nativescript-community/l

Version:

Native internationalization plugin for NativeScript using native capabilities of each platform

113 lines 4.89 kB
"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