UNPKG

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
/*! 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 };