@modernice/vue-i18n-modules
Version:
"Message modules" extension for vue-i18n
2 lines (1 loc) • 2.52 kB
JavaScript
;Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const p=require("@vue/runtime-core"),$=require("vue"),w="@modernice/vue-i18n-modules";function E(e){return a=>a.provide(w,e)}function L(e){function a(n){e.debug&&console.debug(`[vue-i18n-modules] ${n}`)}const d=$.computed(()=>e.i18n),g=$.computed(()=>e.namespace||"__modules"),r=p.ref(new Map);async function y(n,t,s){const{mergeLocaleMessage:o}=e.i18n;o(n,{[g.value]:{[t]:s}})}async function f(n,t){const{locale:s}=e.i18n,o=t?.locales||[s.value];a(`Trying to load ${n} module (${o.join(", ")}) ...`);for(const l of o){const u=`${n}/${l}.json`;try{a(`Trying to load module from "${u}" ...`);const i=await e.loader({path:u,module:n});a(`Merging "${n}" (${u}) messages ...`),await y(l,n,i)}catch(i){a(`Failed to load "${n}" module: ${i.message}`),console.warn(`[vue-i18n-modules] Failed to load messages from path "${u}": ${i.message}`)}r.value.has(l)||r.value.set(l,new Set),r.value.get(l)?.add(n)}}function M(n,t){return t=t||e.i18n.locale.value,r.value.has(t)||r.value.set(t,new Set),r.value.get(t)?.has(n)??!1}function c(n,t){return`${g.value}.${n}.${t}`}const m=(n,t,...s)=>{const{t:o}=e.i18n,l=c(n,t);let u=o(l,...s);const i=s?.[0]??{};for(const[x,b]of Object.entries(i))u=u.replaceAll(`{${x}}`,String(b));return u};async function v(n,t){const s=Array.isArray(n)?n:[n],o=t?.from||d.value.locale.value,l=r.value.get(o);await Promise.all([...l?.values()??[]].map(u=>f(u,{locales:s})))}return{i18n:d,namespace:g,loadModule:f,moduleLoaded:M,moduleNamespace:c,localize:v,translate:m,t:m,debugLog:a}}function h(){const e=p.inject(w);if(!e)throw new Error("[vue-i18n-modules] Extension is not installed.");return e}function S(e,a){return j(e,a)}function j(e,a){const d=a?.load??!0,{i18n:g,loadModule:r,moduleLoaded:y,moduleNamespace:f,translate:M,debugLog:c}=h();function m(s){return f(e,s)}const v=(s,...o)=>M(e,s,...o);async function n(){if(d){if(y(e)){c(`[useMessages] "${e}" module already loaded.`);return}c(`[useMessages] "${e}" module not loaded yet. Loading messages ...`);try{await r(e),c(`Module "${e}" loaded successfully.`)}catch(s){c(`[useMessages] Failed to load "${e}" module: ${s.message}`),console.warn(`[vue-i18n-modules] Failed to load "${e}" module: ${s.message}`)}}}const t=$.getCurrentInstance();return t&&t.appContext.app.runWithContext(()=>{p.onServerPrefetch(n,t),$.onBeforeMount(n,t)}),{messageNamespace:m,translate:v,t:v}}exports.createExtension=L;exports.createPlugin=E;exports.useExtension=h;exports.useMessages=S;