UNPKG

@theia/core

Version:

Theia is a cloud & desktop IDE framework implemented in TypeScript.

117 lines 5.27 kB
"use strict"; // ***************************************************************************** // Copyright (C) 2021 TypeFox and others. // // This program and the accompanying materials are made available under the // terms of the Eclipse Public License v. 2.0 which is available at // http://www.eclipse.org/legal/epl-2.0. // // This Source Code may also be made available under the following Secondary // Licenses when the conditions for such availability set forth in the Eclipse // Public License v. 2.0 are satisfied: GNU General Public License, version 2 // with the GNU Classpath Exception which is available at // https://www.gnu.org/software/classpath/license.html. // // SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-only WITH Classpath-exception-2.0 // ***************************************************************************** var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; return c > 3 && r && Object.defineProperty(target, key, r), r; }; var __metadata = (this && this.__metadata) || function (k, v) { if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); }; Object.defineProperty(exports, "__esModule", { value: true }); exports.LocalizationRegistry = exports.LocalizationContribution = void 0; const fs = require("fs-extra"); const inversify_1 = require("inversify"); const common_1 = require("../../common"); const localization_provider_1 = require("./localization-provider"); exports.LocalizationContribution = Symbol('LocalizationContribution'); let LocalizationRegistry = class LocalizationRegistry { async initialize() { await Promise.all(this.contributions.getContributions().map(contribution => contribution.registerLocalizations(this))); } registerLocalization(localization) { if (!localization_provider_1.LazyLocalization.is(localization)) { localization = localization_provider_1.LazyLocalization.fromLocalization(localization); } this.localizationProvider.addLocalizations(localization); } registerLocalizationFromRequire(locale, required) { const translations = this.flattenTranslations(required); this.registerLocalization(this.createLocalization(locale, () => Promise.resolve(translations))); } registerLocalizationFromFile(localizationPath, locale) { if (!locale) { locale = this.identifyLocale(localizationPath); } if (!locale) { throw new Error('Could not determine locale from path.'); } this.registerLocalization(this.createLocalization(locale, async () => { const translationJson = await fs.readJson(localizationPath); return this.flattenTranslations(translationJson); })); } createLocalization(locale, translations) { let localization; if (typeof locale === 'string') { localization = { languageId: locale, getTranslations: translations }; } else { localization = { ...locale, getTranslations: translations }; } return localization; } flattenTranslations(localization) { if ((0, common_1.isObject)(localization)) { const record = {}; for (const [key, value] of Object.entries(localization)) { if (typeof value === 'string') { record[key] = value; } else if ((0, common_1.isObject)(value)) { const flattened = this.flattenTranslations(value); for (const [flatKey, flatValue] of Object.entries(flattened)) { record[`${key}/${flatKey}`] = flatValue; } } } return record; } else { return {}; } } identifyLocale(localizationPath) { const regex = /nls\.(\w+)\.json$/i; const match = regex.exec(localizationPath); if (match) { return match[1]; } return undefined; } }; __decorate([ (0, inversify_1.inject)(localization_provider_1.LocalizationProvider), __metadata("design:type", localization_provider_1.LocalizationProvider) ], LocalizationRegistry.prototype, "localizationProvider", void 0); __decorate([ (0, inversify_1.inject)(common_1.ContributionProvider), (0, inversify_1.named)(exports.LocalizationContribution), __metadata("design:type", Object) ], LocalizationRegistry.prototype, "contributions", void 0); LocalizationRegistry = __decorate([ (0, inversify_1.injectable)() ], LocalizationRegistry); exports.LocalizationRegistry = LocalizationRegistry; //# sourceMappingURL=localization-contribution.js.map