UNPKG

alpinejs-i18n

Version:

Internationalization (i18n) support for Alpine.js

79 lines (77 loc) 2.25 kB
"use strict"; (() => { // src/index.ts var localeChange = new Event("alpine-i18n:locale-change"); var i18nReady = new Event("alpine-i18n:ready"); var AlpineI18n = { version: "2.5.3", set locale(name) { this.checkLocale(name); this.currentLocale = name; document.dispatchEvent(localeChange); }, get locale() { return this.currentLocale; }, currentLocale: "", messages: {}, fallbackLocale: "", options: {}, create(locale, messages, options) { this.messages = messages; this.checkLocale(locale); this.locale = locale; this.options = options; }, checkLocale(locale) { if (!Object.keys(this.messages).includes(locale)) { throw new Error( `Alpine I18n: The locale ${locale} does not exist.` ); } }, t(name, vars) { let message = ""; try { message = name.split(".").reduce((o, i) => o[i], this.messages[this.locale]); } catch { } if (!message && this.fallbackLocale.length) { message = name.split(".").reduce((o, i) => o[i], this.messages[this.fallbackLocale]); } else if (!message) { return this.options?.debug ? `???${name}` : name; } for (const key in vars) { if (message && message.replaceAll) { if (Object.prototype.hasOwnProperty.call(vars, key)) { const val = vars[key]; let regexp = new RegExp("{s*(" + key + ")s*}", "g"); message = message.replaceAll(regexp, val); } } } return this.options?.debug ? `[${message}]` : message; } }; var i18nPlugin = function(Alpine) { window.AlpineI18n = Alpine.reactive(AlpineI18n); document.dispatchEvent(i18nReady); Alpine.magic("locale", (el) => { return (locale) => { if (!locale) return window.AlpineI18n.locale; window.AlpineI18n.locale = locale; }; }); Alpine.magic("t", (el) => { return (name, vars) => { return window.AlpineI18n.t(name, vars); }; }); }; var src_default = i18nPlugin; // builds/cdn.js document.addEventListener("alpine:initializing", () => { src_default(window.Alpine); }); })();