@re-flex/i18n
Version:
Re-flex UI Lozalization Package
3 lines (2 loc) • 1.9 kB
JavaScript
import e,{createContext as t,useState as a,useLayoutEffect as n,useContext as s}from"react";import i from"@re-flex/object-path";const r=new class{constructor(){this.updater=void 0,this.httpConfig=void 0,this.browserLanguage=navigator.languages&&navigator.languages[0]||navigator.language,this.initialLanguage="en",this.currentLanguage="en",this.resources=new i({}),this.languages=void 0,this.namespaces=void 0,this.currentLanguage="en",this.initialLanguage="en"}httpBackendAdapter(){if(this.httpConfig){const e=this.namespaces.map(e=>{let t={lng:this.currentLanguage,ns:e};return{namespace:e,path:this.httpConfig.path.replace(/{{\s*\w+\s*}}/gim,e=>{let a=e.replace(/{{\s*|\s*}}/gim,"");return t[a]})}});Promise.all(e.map(({namespace:e,path:t})=>{var a;return fetch(t,{headers:null==(a=this.httpConfig)?void 0:a.headers}).then(e=>e.json()).then(t=>({[e]:t}))})).then(e=>{this.resources=new i(Object.assign({},...e)),this.updater&&this.updater()})}else console.warn("HTTP config is not assigned")}init(e){const{initialLanguage:t,httpConfig:a,resources:n,languages:s,namespaces:r}=e;n&&(this.resources=new i(n)),s&&(this.languages=s),r&&(this.namespaces=r),t&&(this.initialLanguage=t,this.currentLanguage=t),a&&(this.httpConfig=a,this.httpBackendAdapter())}onLoadNamepaces(e){}onChangeLanguage(e){}changeLanguage(e){this.currentLanguage=e,this.httpBackendAdapter(),this.updater&&this.updater()}translate(e,t){let a=this.resources.get([this.currentLanguage,e].join("."));return void 0===a?e:(t&&(a=a.replace(/{{\s*\w+\s*}}/gim,e=>{let a=e.replace(/{{\s*|\s*}}/gim,"");return t[a]})),a)}},g=t(null),{Provider:h}=g,u=({children:t})=>{const[s,i]=a(0);return n(()=>{r.updater=()=>i(e=>e+1)},[]),e.createElement(h,{value:{version:s,i18n:r}},t)},o=()=>{const{i18n:e}=s(g);return{t:(t,a)=>e.translate(t,a),i18n:e}};export{r as I18n,u as I18nProvider,o as useTranslate};
//# sourceMappingURL=i18n.modern.js.map