on-codemerge
Version:
A WYSIWYG editor for on-codemerge is a user-friendly interface that allows users to edit and view their code in real time, exactly as it will appear in the final product
133 lines (132 loc) • 5.45 kB
JavaScript
/*! on-codemerge v1.3.1 @author Pavel Kuzmin @license MIT @homepage https://s00d.github.io/on-codemerge/ @repository git+https://github.com/s00d/on-codemerge.git Copyright (c) 2026 Pavel Kuzmin - Built on 2026-07-02T13:39:17.947Z */
var p = Object.defineProperty;
var L = (e, o, l) => o in e ? p(e, o, { enumerable: !0, configurable: !0, writable: !0, value: l }) : e[o] = l;
var a = (e, o, l) => L(e, typeof o != "symbol" ? o + "" : o, l);
import u from "../../../_virtual/dynamic-import-helper.mjs";
class m {
// Локаль по умолчанию, если перевод не найден
constructor(o = "en") {
a(this, "currentLocale", "en");
// Текущая локаль по умолчанию
a(this, "locales", {});
// Словарь локалей
a(this, "fallbackLocale", "en");
this.currentLocale = o, this.fallbackLocale = o;
}
/**
* Инициализирует менеджер локализации
*/
async initialize() {
await this.loadLocale(this.currentLocale);
}
/**
* Асинхронно загружает локаль из файла через динамический импорт
* @param locale - Код локали (например, 'en', 'ru')
*/
async loadLocale(o) {
try {
const l = await u(/* @__PURE__ */ Object.assign({ "./locales/ar.json": () => import("./locales/ar.json.mjs"), "./locales/cs.json": () => import("./locales/cs.json.mjs"), "./locales/de.json": () => import("./locales/de.json.mjs"), "./locales/en.json": () => import("./locales/en.json.mjs"), "./locales/es.json": () => import("./locales/es.json.mjs"), "./locales/fr.json": () => import("./locales/fr.json.mjs"), "./locales/hi.json": () => import("./locales/hi.json.mjs"), "./locales/id.json": () => import("./locales/id.json.mjs"), "./locales/it.json": () => import("./locales/it.json.mjs"), "./locales/ja.json": () => import("./locales/ja.json.mjs"), "./locales/ko.json": () => import("./locales/ko.json.mjs"), "./locales/nl.json": () => import("./locales/nl.json.mjs"), "./locales/pl.json": () => import("./locales/pl.json.mjs"), "./locales/pt.json": () => import("./locales/pt.json.mjs"), "./locales/ru.json": () => import("./locales/ru.json.mjs"), "./locales/th.json": () => import("./locales/th.json.mjs"), "./locales/tr.json": () => import("./locales/tr.json.mjs"), "./locales/vi.json": () => import("./locales/vi.json.mjs"), "./locales/zh.json": () => import("./locales/zh.json.mjs") }), `./locales/${o}.json`, 3);
this.locales[o] = l.default, console.log(
`Loaded locale "${o}" with ${Object.keys(l.default).length} translations`
);
} catch (l) {
console.error(`Error loading locale "${o}":`, l), this.locales[this.fallbackLocale] || await this.loadLocale(this.fallbackLocale);
}
}
/**
* Устанавливает текущую локаль и загружает её, если она ещё не загружена
* @param locale - Код локали (например, 'en', 'ru')
*/
async setLocale(o) {
this.locales[o] || await this.loadLocale(o), this.locales[o] ? this.currentLocale = o : console.warn(`Locale "${o}" is not loaded.`);
}
/**
* Возвращает текущую локаль
*/
getCurrentLocale() {
return this.currentLocale;
}
/**
* Получает перевод по ключу
* @param key - Ключ перевода
* @param params - Параметры для подстановки в перевод (опционально)
*/
translate(o, l = {}) {
var r, c;
if (!this.locales[this.currentLocale])
return console.warn(`Locale "${this.currentLocale}" is not loaded yet. Returning key: "${o}"`), o;
const t = (r = this.locales[this.currentLocale]) == null ? void 0 : r[o], s = (c = this.locales[this.fallbackLocale]) == null ? void 0 : c[o];
!t && !s && console.warn(
`Translation key "${o}" not found in locale "${this.currentLocale}" and fallback locale "${this.fallbackLocale}"`
);
const i = t || s || o;
return Object.keys(l).reduce((h, n) => h.replace(new RegExp(`{{${n}}}`, "g"), l[n]), i);
}
/**
* Возвращает все загруженные локали
*/
getLoadedLocales() {
return Object.keys(this.locales);
}
/**
* Проверяет, готов ли менеджер локализации
*/
isReady() {
return !!this.locales[this.currentLocale];
}
/**
* Возвращает все доступные языки (жестко прописанные, чтобы не сканировать файловую систему)
*/
getAvailableLocales() {
return [
"en",
"ru",
"de",
"fr",
"es",
"it",
"pt",
"pl",
"cs",
"nl",
"tr",
"ja",
"ko",
"zh",
"ar",
"hi",
"vi",
"th",
"id"
];
}
/**
* Возвращает короткое обозначение локали (например, EN, RU)
*/
static getLocaleLabel(o) {
return {
en: "EN",
ru: "RU",
de: "DE",
fr: "FR",
es: "ES",
it: "IT",
pt: "PT",
pl: "PL",
cs: "CS",
nl: "NL",
tr: "TR",
ja: "JA",
ko: "KO",
zh: "ZH",
ar: "AR",
hi: "HI",
vi: "VI",
th: "TH",
id: "ID"
}[o] || o.toUpperCase();
}
}
export {
m as LocaleManager
};