@voerkai18n/react
Version:
React支持,提供语言切换等功能
6 lines • 2.4 kB
JavaScript
;var react=require('react'),runtime=require('@voerkai18n/runtime'),jsxRuntime=require('react/jsx-runtime');/***
* ---=== VoerkaI18n for React ===---
* https://zhangfisher.github.io/voerka-i18n
*/
function Q(t){let{tagName:n,attrs:e={},class:l="vt-msg",style:i,loading:c}=Object.assign({},t),r=!!c;return function(a){return u=>{let{id:g,message:o,vars:d,options:m,default:P=""}=u,f=typeof g=="string"&&g.length>0,[y,k]=react.useState(()=>f?u.children:typeof o=="function"?P:a.translate(o,d,m)),I=react.useRef(false),[b,V]=react.useState(false),h=u.tag||n,C=a.getMessageId(u.message),S=f||typeof o=="function",x=react.useCallback(async s=>{let p=typeof o=="function"?()=>o(s,d,m):()=>o;return Promise.resolve(p()).then(O=>{k(a.translate(O,d,m));})},[o,d,m]),M=async()=>{if(g){let s=a.activeParagraphs[g];if(!s)return;r&&V(true);try{let p=await runtime.loadAsyncModule(s);k(p);}catch(p){console.error(p);}finally{r&&V(false);}}},R=react.useCallback(s=>{f?M():x(s);},[]);return !I.current&&(typeof o=="function"||f)&&(R(a.activeLanguage),I.current=true),react.useEffect(()=>{let s=a.on("change",R);return ()=>s.off()},[]),C&&(e["data-id"]=C),g&&(e["data-id"]=g),a.library&&(e["data-scope"]=String(a.$id)),h||f?react.createElement(h||"div",{...e,className:l,suppressHydrationWarning:true,style:Object.assign({position:"relative"},i,u.style)},y,S&&r&&b?c:null):jsxRuntime.jsx(jsxRuntime.Fragment,{children:y})}}}function L(t){let n=globalThis.VoerkaI18n,e=t||n.scope;if(!n||!e)throw new Error("VoerkaI18n is not defined");let[l,i]=react.useState(e.activeLanguage),c=react.useRef(true);return react.useEffect(()=>{c.current&&(e.ready(()=>{i(e.activeLanguage);}),c.current=false);let r=n.on("change",a=>{i(a);});return ()=>r&&r.off()},[]),{scope:e,manager:n,activeLanguage:l,defaultLanguage:e.defaultLanguage,languages:e.languages,changeLanguage:e.change.bind(e),t:e.t}}function q(t){return t.activeLanguage===t.defaultLanguage||typeof t.scope.messages[t.activeLanguage]!="function"}function te(t){let{fallback:n,children:e}=t,{manager:l}=L(),[i,c]=react.useState(q(l));return react.useEffect(()=>{let r=l.on("ready",()=>{c(true);});return ()=>{typeof r=="object"&&r.off();}},[]),jsxRuntime.jsx(jsxRuntime.Fragment,{children:i||!i&&!n?e:n})}exports.VoerkaI18nProvider=te;exports.createTranslateComponent=Q;exports.useVoerkaI18n=L;//# sourceMappingURL=index.js.map
//# sourceMappingURL=index.js.map