2 lines
12 KiB
JavaScript
2 lines
12 KiB
JavaScript
"use strict";var t=function(t){return function(t){return!!t&&"object"==typeof t}(t)&&!function(t){var r=Object.prototype.toString.call(t);return"[object RegExp]"===r||"[object Date]"===r||function(t){return t.$$typeof===e}(t)}(t)};var e="function"==typeof Symbol&&Symbol.for?Symbol.for("react.element"):60103;function r(t,e){return!1!==e.clone&&e.isMergeableObject(t)?l((r=t,Array.isArray(r)?[]:{}),t,e):t;var r}function a(t,e,a){return t.concat(e).map((function(t){return r(t,a)}))}function n(t){return Object.keys(t).concat(function(t){return Object.getOwnPropertySymbols?Object.getOwnPropertySymbols(t).filter((function(e){return t.propertyIsEnumerable(e)})):[]}(t))}function s(t,e){try{return e in t}catch(t){return!1}}function i(t,e,a){var i={};return a.isMergeableObject(t)&&n(t).forEach((function(e){i[e]=r(t[e],a)})),n(e).forEach((function(n){(function(t,e){return s(t,e)&&!(Object.hasOwnProperty.call(t,e)&&Object.propertyIsEnumerable.call(t,e))})(t,n)||(s(t,n)&&a.isMergeableObject(e[n])?i[n]=function(t,e){if(!e.customMerge)return l;var r=e.customMerge(t);return"function"==typeof r?r:l}(n,a)(t[n],e[n],a):i[n]=r(e[n],a))})),i}function l(e,n,s){(s=s||{}).arrayMerge=s.arrayMerge||a,s.isMergeableObject=s.isMergeableObject||t,s.cloneUnlessOtherwiseSpecified=r;var l=Array.isArray(n);return l===Array.isArray(e)?l?s.arrayMerge(e,n,s):i(e,n,s):r(n,s)}l.all=function(t,e){if(!Array.isArray(t))throw new Error("first argument should be an array");return t.reduce((function(t,r){return l(t,r,e)}),{})};var o=l;var c={"*":{$types:{Date:t=>t.toLocaleString()},time:t=>t.toLocaleTimeString(),shorttime:t=>t.toLocaleTimeString(),date:t=>t.toLocaleDateString(),dict:function(t,...e){for(let r=0;r<e.length;r+=2)if(e[r]===t)return e[r+1];return e.length>0&&e.length%2!=0?e[e.length-1]:t}},cn:{$types:{Date:t=>`${t.getFullYear()}年${t.getMonth()+1}月${t.getDate()}日 ${t.getHours()}点${t.getMinutes()}分${t.getSeconds()}秒`},shortime:t=>t.toLocaleTimeString(),time:t=>`${t.getHours()}点${t.getMinutes()}分${t.getSeconds()}秒`,date:t=>`${t.getFullYear()}年${t.getMonth()+1}月${t.getDate()}日`,shortdate:t=>`${t.getFullYear()}-${t.getMonth()+1}-${t.getDate()}`,currency:t=>`${t}元`},en:{currency:t=>`$${t}`}};const u=o,g=class{constructor(){this._callbacks=[]}on(t){this._callbacks.includes(t)||this._callbacks.push(t)}off(t){for(let e=0;e<this._callbacks.length;e++)this._callbacks[e]===t&&this._callbacks.splice(e,1)}offAll(){this._callbacks=[]}async emit(...t){Promise.allSettled?await Promise.allSettled(this._callbacks.map((e=>e(...t)))):await Promise.all(this._callbacks.map((e=>e(...t))))}},f=class{constructor(t={},e){if(this._id=t.id||(new Date).getTime().toString()+parseInt(1e3*Math.random()),this._languages=t.languages,this._defaultLanguage=t.defaultLanguage||"cn",this._activeLanguage=t.activeLanguage,this._default=t.default,this._messages=t.messages,this._idMap=t.idMap,this._formatters=t.formatters,this._loaders=t.loaders,this._global=null,this.$cache={activeLanguage:null,typedFormatters:{},formatters:{}},!globalThis.VoerkaI18n){const{I18nManager:e}=E;globalThis.VoerkaI18n=new e({defaultLanguage:this.defaultLanguage,activeLanguage:this.activeLanguage,languages:t.languages})}this.global=globalThis.VoerkaI18n,this._loading=!1,this.register(e)}get id(){return this._id}get defaultLanguage(){return this._defaultLanguage}get activeLanguage(){return this._activeLanguage}get default(){return this._default}get messages(){return this._messages}get idMap(){return this._idMap}get formatters(){return this._formatters}get loaders(){return this._loaders}get global(){return this._global}set global(t){this._global=t}register(t){this.global.register(this).then(t).catch(t)}registerFormatter(t,e,{language:r="*"}={}){if("string"!=typeof t)throw new TypeError("Formatter must be a function");DataTypes.includes(t)?this.formatters[r].$types[t]=e:this.formatters[r][t]=e}_fallback(){this._messages=this._default,this._activeLanguage=this.defaultLanguage}async refresh(t){if(this._loading=Promise.resolve(),t||(t=this.activeLanguage),t===this.defaultLanguage)return void(this._messages=this._default);const e=this.loaders[t];if("function"==typeof e)try{this._messages=(await e()).default,this._activeLanguage=t}catch(e){console.warn(`Error while loading language <${t}> on i18nScope(${this.id}): ${e.message}`),this._fallback()}else this._fallback()}get on(){return this.global.on.bind(this.global)}get off(){return this.global.off.bind(this.global)}get offAll(){return this.global.offAll.bind(this.global)}get change(){return this.global.change.bind(this.global)}};let h=c,p=/\{\s*(?<varname>\w+)?(?<formatters>(\s*\|\s*\w*(\(.*\)){0,1}\s*)*)\s*\}/g;const m=["String","Number","Boolean","Object","Array","Function","Error","Symbol","RegExp","Date","Null","Undefined","Set","Map","WeakSet","WeakMap"];function b(t){return null===t?"Null":void 0===t?"Undefined":"function"==typeof t?"Function":t.constructor&&t.constructor.name}function y(t){if("object"!=typeof t||null===t)return!1;var e=Object.getPrototypeOf(t);if(null===e)return!0;for(var r=e;null!==Object.getPrototypeOf(r);)r=Object.getPrototypeOf(r);return e===r}function d(t){return!isNaN(parseInt(t))}function _(t){if(!t)return[];return t.trim().substr(1).trim().split("|").map((t=>t.trim())).map((t=>{let e=t.indexOf("("),r=t.lastIndexOf(")");if(-1!==e&&-1!==r){const a=t.substr(e+1,r-e-1).trim();let n=""==a?[]:a.split(",").map((t=>{if(t=t.trim(),!isNaN(parseInt(t)))return parseInt(t);if(t.startsWith('"')&&t.endsWith('"')||t.startsWith("'")&&t.endsWith("'"))return t.substr(1,t.length-2);if("true"===t.toLowerCase()||"false"===t.toLowerCase())return"true"===t.toLowerCase();if(!(t.startsWith("{")&&t.endsWith("}")||t.startsWith("[")&&t.endsWith("]")))return String(t);try{return JSON.parse(t)}catch(e){return String(t)}}));return[t.substr(0,e),n]}return[t,[]]}))}function v(t,e,r={}){let a,n=t,s=Object.assign({replaceAll:!0},r);for(p.lastIndex=0;null!==(a=p.exec(n));){const t=a.groups.varname||"",r=_(a.groups.formatters);if("function"==typeof e)try{n=s.replaceAll?n.replaceAll(a[0],e(t,r,a[0])):n.replace(a[0],e(t,r,a[0]))}catch{break}p.lastIndex=0}return n}function $(t,e=null){t.$cache={activeLanguage:e,typedFormatters:{},formatters:{}}}function A(t,e,r){if(t.$cache||$(t),t.$cache.activeLanguage===e){if(r in t.$cache.formatters)return t.$cache.formatters[r]}else $(t,e);const a=[t.formatters,t.global.formatters];for(const n of a){if(e in n){let a=n[e]||{};if(r in a&&"function"==typeof a[r])return t.$cache.formatters[r]=a[r]}let a=n["*"]||{};if(r in a&&"function"==typeof a[r])return t.$cache.formatters[r]=a[r]}}function L(t,e,r,a){const n=function(t,e,r){let a=[];for(let n of r)if(n[0]){const r=A(t,e,n[0]);"function"==typeof r?a.push((t=>r(t,...n[1]))):a.push((t=>"function"==typeof t[n[0]]?t[n[0]].call(t,...n[1]):t))}return a}(t,e,r),s=function(t,e,r){if(t.$cache||$(t),t.$cache.activeLanguage===e){if(r in t.$cache.typedFormatters)return t.$cache.typedFormatters[r]}else $(t,e);const a=[t.formatters,t.global.formatters];for(const n of a)if(n){if(e in n&&y(n[e].$types)){let a=n[e].$types;if(r in a&&"function"==typeof a[r])return t.$cache.typedFormatters[r]=a[r]}if("*"in n&&y(n["*"].$types)){let e=n["*"].$types;if(r in e&&"function"==typeof e[r])return t.$cache.typedFormatters[r]=e[r]}}}(t,e,b(a));return s&&n.splice(0,0,s),a=function(t,e){if(0===e.length)return t;let r=t;try{for(let t of e){if("function"!=typeof t)return r;r=t(r)}}catch(e){console.error(`Error while execute i18n formatter for ${t}: ${e.message} `)}return r}(a,n),a}function w(t,...e){const r=this,a=r.global.activeLanguage;if(0===e.length||(!(n=t).includes("{")||!n.includes("}")))return t;var n;if(1===e.length&&y(e[0])){let n=e[0];return v(t,((t,e)=>{let s=t in n?n[t]:"";return L(r,a,e,s)}))}{const n=1===e.length&&Array.isArray(e[0])?[...e[0]]:e;if(0===n.length)return t;let s=0;return v(t,((t,e)=>{if(n.length>s)return L(r,a,e,n[s++]);throw new Error}),{replaceAll:!1})}}const S={defaultLanguage:"cn",activeLanguage:"cn",languages:{cn:{name:"cn",title:"中文",default:!0},en:{name:"en",title:"英文"}},formatters:h};function k(t){return parseInt(t)>0}function O(t,e){try{return Array.isArray(t)?t.length>e?t[e]:t[t.length-1]:t}catch{return Array.isArray(t)?t[0]:t}}function M(t){return t.replaceAll(/\\(?![trnbvf'"]{1})/g,"\\\\").replaceAll("\t","\\t").replaceAll("\n","\\n").replaceAll("\b","\\b").replaceAll("\r","\\r").replaceAll("\f","\\f").replaceAll("'","\\'").replaceAll('"','\\"').replaceAll("\v","\\v")}function j(t){return t.replaceAll("\\t","\t").replaceAll("\\n","\n").replaceAll("\\b","\b").replaceAll("\\r","\r").replaceAll("\\f","\f").replaceAll("\\'","'").replaceAll('\\"','"').replaceAll("\\v","\v").replaceAll(/\\\\(?![trnbvf'"]{1})/g,"\\")}class I extends g{static instance=null;callbacks=[];constructor(t={}){return super(),null!=I.instance||(I.instance=this,this._settings=u(S,t),this._scopes=[]),I.instance}get settings(){return this._settings}get scopes(){return this._scopes}get activeLanguage(){return this._settings.activeLanguage}get defaultLanguage(){return this.this._settings.defaultLanguage}get languages(){return this._settings.languages}get formatters(){return h}async change(t){if(-1===this.languages.findIndex((e=>e.name===t)))throw new Error("Not supported language:"+t);await this._refreshScopes(t),this._settings.activeLanguage=t,await this.emit(t)}async _refreshScopes(t){try{const e=this._scopes.map((e=>e.refresh(t)));Promise.allSettled?await Promise.allSettled(e):await Promise.all(e)}catch(t){console.warn("Error while refreshing i18n scopes:",t.message)}}async register(t){if(!(t instanceof f))throw new TypeError("Scope must be an instance of I18nScope");this._scopes.push(t),await t.refresh(this.activeLanguage)}registerFormatter(t,e,{language:r="*"}={}){if("string"!=typeof t)throw new TypeError("Formatter must be a function");m.includes(t)?this.formatters[r].$types[t]=e:this.formatters[r][t]=e}}var E={getInterpolatedVars:function(t){let e=[];return v(t,((t,r,a)=>{let n={name:t,formatters:r.map((([t,e])=>({name:t,args:e}))),match:a};return-1===e.findIndex((t=>t.name===n.name&&n.formatters.toString()==t.formatters.toString()))&&e.push(n),""})),e},replaceInterpolatedVars:w,I18nManager:I,translate:function(t){const e=this,r=e.global.activeLanguage;let a=t,n=[],s=[],i=null;try{if(2===arguments.length&&y(arguments[1])?(Object.entries(arguments[1]).forEach((([t,e])=>{if("function"==typeof e)try{n[t]=e()}catch(r){n[t]=e}t.startsWith("$")&&"number"==typeof n[t]&&s.push(t)})),n=[arguments[1]]):arguments.length>=2&&(n=[...arguments].splice(1).map(((t,e)=>{try{d(t="function"==typeof t?t():t)&&(i=parseInt(t))}catch(t){}return t}))),r===e.defaultLanguage)k(a)&&(a=e.default[a]||t);else{let t=k(a)?a:e.idMap[M(a)];a=e.messages[t]||a,a=Array.isArray(a)?a.map((t=>j(t))):j(a)}return Array.isArray(a)&&a.length>0&&(a=null!==i?O(a,i):pluralVar.length>0?O(a,parseInt(n(pluralVar[0]))):a[0]),0==n.length?a:w.call(e,a,...n)}catch(t){return a}},languages:["af","am","ar-dz","ar-iq","ar-kw","ar-ly","ar-ma","ar-sa","ar-tn","ar","az","be","bg","bi","bm","bn","bo","br","bs","ca","cs","cv","cy","da","de-at","de-ch","de","dv","el","en-au","en-ca","en-gb","en-ie","en-il","en-in","en-nz","en-sg","en-tt","en","eo","es-do","es-mx","es-pr","es-us","es","et","eu","fa","fi","fo","fr-ca","fr-ch","fr","fy","ga","gd","gl","gom-latn","gu","he","hi","hr","ht","hu","hy-am","id","is","it-ch","it","ja","jv","ka","kk","km","kn","ko","ku","ky","lb","lo","lt","lv","me","mi","mk","ml","mn","mr","ms-my","ms","mt","my","nb","ne","nl-be","nl","nn","oc-lnc","pa-in","pl","pt-br","pt","ro","ru","rw","sd","se","si","sk","sl","sq","sr-cyrl","sr","ss","sv-fi","sv","sw","ta","te","tet","tg","th","tk","tl-ph","tlh","tr","tzl","tzm-latn","tzm","ug-cn","uk","ur","uz-latn","uz","vi","x-pseudo","yo","zh-cn","zh-hk","zh-tw","zh"],i18nScope:f,defaultLanguageSettings:S,getDataTypeName:b,isNumber:d,isPlainObject:y};module.exports=E;
|