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
JavaScript
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
};