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

60 lines (59 loc) 3.53 kB
var n = Object.defineProperty; var p = (s, o, l) => o in s ? n(s, o, { enumerable: !0, configurable: !0, writable: !0, value: l }) : s[o] = l; var e = (s, o, l) => p(s, typeof o != "symbol" ? o + "" : o, l); import j from "../../../_virtual/dynamic-import-helper.mjs"; class L { // Локаль по умолчанию, если перевод не найден constructor(o = "en") { e(this, "currentLocale", "en"); // Текущая локаль по умолчанию e(this, "locales", {}); // Словарь локалей e(this, "fallbackLocale", "en"); this.currentLocale = o, this.fallbackLocale = o, this.loadLocale(o); } /** * Асинхронно загружает локаль из файла через динамический импорт * @param locale - Код локали (например, 'en', 'ru') */ async loadLocale(o) { try { const l = await j(/* @__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; } 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 a, t; const r = ((a = this.locales[this.currentLocale]) == null ? void 0 : a[o]) || ((t = this.locales[this.fallbackLocale]) == null ? void 0 : t[o]) || o; return Object.keys(l).reduce((i, c) => i.replace(new RegExp(`{{${c}}}`, "g"), l[c]), r); } /** * Возвращает все загруженные локали */ getLoadedLocales() { return Object.keys(this.locales); } } export { L as LocaleManager };