@minecraft/creator-tools
Version:
Minecraft Creator Tools command line and libraries.
137 lines (136 loc) • 5.05 kB
JavaScript
"use strict";
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const IProjectItemData_1 = require("../app/IProjectItemData");
const Utilities_1 = __importDefault(require("../core/Utilities"));
const Log_1 = __importDefault(require("../core/Log"));
const Lang_1 = __importDefault(require("./Lang"));
class LocManager {
_project;
_isLoaded;
_languages = {};
tokens = {};
constructor(project) {
this._project = project;
this._isLoaded = false;
}
async getTokenValue(tokenName) {
if (!this._isLoaded) {
await this.load();
}
return this.getTokenValueOrDefault(tokenName);
}
getAllTokenKeys() {
return Object.keys(this.tokens);
}
getAllLanguages() {
let langs = [];
for (const langKey in this._languages) {
langs.push(...this._languages[langKey]);
}
return langs;
}
static canonicalizeLanguageKey(locKey) {
return locKey.toLowerCase().trim();
}
getEnUsLang() {
const primary = this._languages["en_us"];
Log_1.default.assert(!!primary, "No en-us language found.");
return primary;
}
getNonEnUsLangs() {
let langs = [];
for (const langKey in this._languages) {
if (LocManager.canonicalizeLanguageKey(langKey) !== "en_us") {
langs.push(...this._languages[langKey]);
}
}
return langs;
}
getExpandedValue(tokenName) {
if (!this._isLoaded) {
return tokenName;
}
const tok = this.getToken(tokenName);
if (!tok) {
return tokenName;
}
return tok.value + " - (" + tokenName + ")";
}
getTokenValueOrDefault(tokenName) {
if (!this._isLoaded) {
return tokenName;
}
const tok = this.getToken(tokenName);
if (!tok) {
return tokenName;
}
return tok.value;
}
getToken(tokenName, locale, packContainer) {
const tokenSets = this.tokens[tokenName];
if (tokenSets) {
if (!locale) {
locale = "en_US";
}
const tokenSetByLocale = tokenSets[LocManager.canonicalizeLanguageKey(locale)];
if (tokenSetByLocale) {
if (packContainer) {
return tokenSetByLocale[packContainer];
}
// return the first available token
for (const containerName in tokenSetByLocale) {
return tokenSetByLocale[containerName];
}
}
}
return undefined;
}
async load(force) {
if (this._isLoaded && !force) {
return;
}
await this._project.ensureLoadedProjectFolder();
this.tokens = {};
const itemsCopy = this._project.getItemsCopy();
for (const pi of itemsCopy) {
if (pi.itemType === IProjectItemData_1.ProjectItemType.lang) {
if (!pi.isContentLoaded) {
await pi.loadContent();
}
if (pi.primaryFile) {
const lang = await Lang_1.default.ensureOnFile(pi.primaryFile);
if (lang) {
await lang.load();
if (lang.language && lang.containerName !== undefined && Utilities_1.default.isUsableAsObjectKey(lang.language)) {
const language = LocManager.canonicalizeLanguageKey(lang.language);
if (!this._languages[language]) {
this._languages[language] = [];
}
this._languages[language].push(lang);
for (const tokenName in lang.tokens) {
if (Utilities_1.default.isUsableAsObjectKey(tokenName)) {
if (this.tokens[tokenName] === undefined) {
this.tokens[tokenName] = {};
}
if (Utilities_1.default.isUsableAsObjectKey(lang.containerName)) {
if (this.tokens[tokenName][language] === undefined) {
this.tokens[tokenName][language] = {};
}
this.tokens[tokenName][language][lang.containerName] = lang.tokens[tokenName];
}
}
}
}
}
}
}
}
this._isLoaded = true;
}
}
exports.default = LocManager;