@iobroker/adapter-core
Version:
Core module to be used in ioBroker adapters. Acts as the bridge to js-controller.
148 lines (147 loc) • 5.09 kB
JavaScript
;
var __defProp = Object.defineProperty;
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
var __getOwnPropNames = Object.getOwnPropertyNames;
var __hasOwnProp = Object.prototype.hasOwnProperty;
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
var __export = (target, all) => {
for (var name in all)
__defProp(target, name, { get: all[name], enumerable: true });
};
var __copyProps = (to, from, except, desc) => {
if (from && typeof from === "object" || typeof from === "function") {
for (let key of __getOwnPropNames(from))
if (!__hasOwnProp.call(to, key) && key !== except)
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
}
return to;
};
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
var i18n_exports = {};
__export(i18n_exports, {
default: () => i18n_default,
getTranslatedObject: () => getTranslatedObject,
init: () => init,
t: () => t,
translate: () => translate
});
module.exports = __toCommonJS(i18n_exports);
var import_node_fs = require("node:fs");
var import_node_path = require("node:path");
let language = "en";
let words = null;
async function init(rootDir, languageOrAdapter) {
let adapter;
if (languageOrAdapter && typeof languageOrAdapter === "object") {
adapter = languageOrAdapter;
const systemConfig = await adapter.getForeignObjectAsync("system.config");
if (systemConfig?.common.language) {
language = systemConfig?.common.language;
}
} else {
language = languageOrAdapter;
}
let files;
if ((0, import_node_fs.existsSync)((0, import_node_path.join)(rootDir, "i18n"))) {
files = (0, import_node_fs.readdirSync)((0, import_node_path.join)(rootDir, "i18n"));
} else if ((0, import_node_fs.existsSync)((0, import_node_path.join)(rootDir, "lib", "i18n"))) {
rootDir = (0, import_node_path.join)(rootDir, "lib");
files = (0, import_node_fs.readdirSync)((0, import_node_path.join)(rootDir, "i18n"));
} else {
throw new Error(`Cannot find i18n directory in "${(0, import_node_path.join)(rootDir, "i18n")}", "${(0, import_node_path.join)(rootDir, "lib", "i18n")}"`);
}
words = {};
let count = 0;
files.forEach((file) => {
if (file.endsWith(".json")) {
count++;
const lang = file.split(".")[0];
const wordsForLanguage = JSON.parse((0, import_node_fs.readFileSync)((0, import_node_path.join)(rootDir, "i18n", file)).toString("utf8"));
Object.keys(wordsForLanguage).forEach((key) => {
if (words) {
if (!words[key]) {
words[key] = {};
}
words[key][lang] = wordsForLanguage[key];
}
});
}
});
if (!count) {
files.forEach((file) => {
if ((file.match(/^[a-z]{2}$/) || file === "zh-cn") && (0, import_node_fs.statSync)((0, import_node_path.join)(rootDir, "i18n", file)).isDirectory()) {
if (adapter) {
adapter.log.warn("Looks like you use old structure of i18n. Please switch to 1i8n/lang.json instead of i18n/lang/translation.json");
}
const lang = file;
if ((0, import_node_fs.existsSync)((0, import_node_path.join)(rootDir, "i18n", lang, "translations.json"))) {
const wordsForLanguage = JSON.parse((0, import_node_fs.readFileSync)((0, import_node_path.join)(rootDir, "i18n", lang, "translations.json")).toString("utf8"));
Object.keys(wordsForLanguage).forEach((key) => {
if (words) {
if (!words[key]) {
words[key] = {};
}
words[key][lang] = wordsForLanguage[key];
}
});
}
}
});
}
}
__name(init, "init");
function translate(key, ...args) {
if (!words) {
throw new Error("i18n not initialized. Please call 'init(__dirname, adapter)' before");
}
let text;
if (!words[key]) {
text = key;
} else {
text = words[key][language] || words[key].en || key;
}
if (args.length) {
for (const arg of args) {
text = text.replace("%s", arg === null ? "null" : arg.toString());
}
}
return text;
}
__name(translate, "translate");
const t = translate;
function getTranslatedObject(key, ...args) {
if (!words) {
throw new Error("i18n not initialized. Please call 'init(__dirname, adapter)' before");
}
if (words[key]) {
const word = words[key];
if (word.en && word.en.includes("%s")) {
const result = {};
Object.keys(word).forEach((lang) => {
for (const arg of args) {
result[lang] = word[lang].replace("%s", arg === null ? "null" : arg.toString());
}
});
return result;
}
return words[key];
}
return {
en: key
};
}
__name(getTranslatedObject, "getTranslatedObject");
var i18n_default = {
init,
translate,
getTranslatedObject,
t
};
// Annotate the CommonJS export names for ESM import in node:
0 && (module.exports = {
getTranslatedObject,
init,
t,
translate
});
//# sourceMappingURL=i18n.js.map