@toife/vue-i18n
Version: 
Plugins locale messages for Vue
2 lines (1 loc) • 2.79 kB
JavaScript
(function(a,i){typeof exports=="object"&&typeof module<"u"?i(exports,require("vue")):typeof define=="function"&&define.amd?define(["exports","vue"],i):(a=typeof globalThis<"u"?globalThis:a||self,i(a.ToifeVueI18n={},a.Vue))})(this,function(a,i){"use strict";let d=i.ref([]),v="";const c=i.ref({}),f=i.ref([]),s=i.ref(""),j="i18nDB",l="locales";function y(){return new Promise((e,t)=>{const n=indexedDB.open(j,1);n.onupgradeneeded=()=>{const o=n.result;o.objectStoreNames.contains(l)||o.createObjectStore(l)},n.onsuccess=()=>e(n.result),n.onerror=()=>t(n.error)})}async function S(e,t){const n=await y();return new Promise((o,r)=>{const u=n.transaction(l,"readwrite");u.objectStore(l).put(t,e),u.oncomplete=()=>o(),u.onerror=()=>r(u.error)})}async function T(e){const t=await y();return new Promise((n,o)=>{const u=t.transaction(l,"readonly").objectStore(l).get(e);u.onsuccess=()=>n(u.result),u.onerror=()=>o(u.error)})}function D(e){Array.isArray(e)?e.forEach(t=>{d.value.push(t)}):d.value.push(e),w(s.value)}function p(e={},t={}){for(const n of Object.keys(t)){const o=t[n],r=e[n];o&&typeof o=="object"&&!Array.isArray(o)&&!(o instanceof Function)?e[n]=p(r&&typeof r=="object"?r:{},o):e[n]=o}return e}function b(e,t){if(!e)return;const n=t.split(".");let o=e;for(const r of n){if(o==null)return;o=o[r]}return o}function _(e,t={}){return String(e).replace(/\{(\w+)\}/g,(n,o)=>t[o]===void 0?`{${o}}`:String(t[o]))}async function h(e,t,n){if(typeof n!="object"||n===null)throw new Error(`Locale module ${e} did not export an object`);c.value[e]=c.value[e]||{},c.value[e][t]=p(c.value[e]?.[t]||{},n),f.value.push(t),await S("__data_locale_"+t,n)}async function L(e,t,n){try{if(f.value.includes(t))return;const o=await import(n+"?t="+Date.now()),r=o.default??o;await h(e,t,r)}catch{const r=await T("__data_locale_"+t);r&&(c.value[e]=c.value[e]||{},c.value[e][t]=p(c.value[e]?.[t]||{},r),f.value.push(t))}}async function w(e){for(let t of d.value){const n=t.template.replace("{locale}",encodeURIComponent(e));L(e,t.name,n)}}async function x(e){s.value=e,await w(e)}function A(e){v=e}function B(){return s.value}async function M(e,t){for(let n in t)t.hasOwnProperty(n)&&await h(n,e,t[n])}function g(e){return function(t,n={}){const o=c.value[s.value]?.[e]||{};let r=b(o,t);if(r===void 0&&s.value!==v){const u=c.value[v]?.[e]||{};r=b(u,t)}if(r===void 0)return _(t,n);if(typeof r=="function")try{return r(n)}catch(u){return console.warn("i18n function error for key",t,u),""}return _(r,n)}}function E(){return{locale:s,isLocaleLoaded:e=>f.value.includes(e),setFallbackLocale:A,setLocale:x,addLocaleModule:D,addMessage:M,getLocale:B}}i.watch(()=>s.value,async(e,t)=>{t!==void 0&&await w(e)},{immediate:!0}),a.useI18n=E,a.useTranslator=g,Object.defineProperty(a,Symbol.toStringTag,{value:"Module"})});