react-box-tools
Version:
Box tools react components, utils and hooks
2 lines (1 loc) • 1.53 kB
JavaScript
var f=Object.defineProperty;var d=(r,t,e)=>t in r?f(r,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):r[t]=e;var i=(r,t,e)=>d(r,typeof t!="symbol"?t+"":t,e);const C=require("react"),g=()=>({culture:C.useSyncExternalStore(e=>l.subscribe(e),()=>l.getCulture(),()=>l.getCulture()),setCulture:e=>l.setCulture(e)});class y{constructor(){i(this,"defaultCulture","");i(this,"cultures",[]);i(this,"cache",new Map);i(this,"translationCache",new Map);i(this,"listeners",new Set)}def(t,e){this.mod("_def",t,e)}mod(t,e,n){let s=this.cache.get(n),u=t;s?s.get(u)||s.set(u,e):(s=new Map,s.set(u,e),this.cache.set(n,s))}translateDef(t,e){return this.translateMod("_def",t,e)}translateMod(t,e,n){const s=`${this.defaultCulture}-${t}-${e}`,u=`t:${e}`;if(this.translationCache.has(s))return this.translationCache.get(s);const c=this.cache.get(this.defaultCulture);if(c){const a=c.get(t);if(a){const o=a[e]||u,h=this.applyParams(o,n);return this.translationCache.set(s,h),h}}return u}getResourceDef(){const t=this.cache.get(this.defaultCulture);return t==null?void 0:t.get("_def")}getResourceMod(t){const e=this.cache.get(this.defaultCulture);return e==null?void 0:e.get(t)}applyParams(t,e){return e?(typeof e=="string"&&(e=[e]),t.replace(/{(\d+)}/g,(n,s)=>typeof e[s]<"u"?e[s]:n)):t}notify(){this.listeners.forEach(t=>t())}setCulture(t){this.defaultCulture=t,this.notify()}getCulture(){return this.defaultCulture}subscribe(t){return this.listeners.add(t),()=>this.listeners.delete(t)}}const l=new y;exports.i18n=l;exports.useI18n=g;
;