@liberfi.io/i18n 0.1.4 → 0.1.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -1,2 +1,2 @@
1
- 'use strict';var reactI18next=require('react-i18next'),i18next=require('i18next'),j=require('i18next-browser-languagedetector'),react=require('react'),jsxRuntime=require('react/jsx-runtime');function _interopDefault(e){return e&&e.__esModule?e:{default:e}}var i18next__default=/*#__PURE__*/_interopDefault(i18next);var j__default=/*#__PURE__*/_interopDefault(j);var p=(o=>(o.en="en",o.zh="zh",o.ja="ja",o.es="es",o.ko="ko",o.vi="vi",o.de="de",o.fr="fr",o.ru="ru",o.id="id",o.tr="tr",o.it="it",o.pt="pt",o.uk="uk",o.pl="pl",o.nl="nl",o))(p||{});var x=[{localCode:"en",displayName:"English"},{localCode:"zh",displayName:"\u4E2D\u6587"},{localCode:"ja",displayName:"\u65E5\u672C\u8A9E"},{localCode:"es",displayName:"Espa\xF1ol"},{localCode:"ko",displayName:"\uD55C\uAD6D\uC5B4"},{localCode:"vi",displayName:"Ti\u1EBFng Vi\u1EC7t"},{localCode:"de",displayName:"Deutsch"},{localCode:"fr",displayName:"Fran\xE7ais"},{localCode:"ru",displayName:"\u0420\u0443\u0441\u0441\u043A\u0438\u0439"},{localCode:"id",displayName:"Bahasa Indonesia"},{localCode:"tr",displayName:"T\xFCrk\xE7e"},{localCode:"it",displayName:"Italiano"},{localCode:"pt",displayName:"Portugu\xEAs"},{localCode:"uk",displayName:"\u0423\u043A\u0440\u0430\u0457\u043D\u0441\u044C\u043A\u0430"},{localCode:"pl",displayName:"Polski"},{localCode:"nl",displayName:"Nederlands"}],h="en",i="translation",H="liberfi_i18nLng",S="liberfi_i18nLng";var b={"common.cancel":"Cancel","common.confirm":"Confirm","common.reset":"Reset","common.apply":"Apply","common.ok":"OK","common.yes":"Yes","common.no":"No","common.all":"All","common.buy":"Buy","common.sell":"Sell","common.long":"Long","common.short":"Short","common.edit":"Edit","common.save":"Save","common.add":"Add","common.delete":"Delete","common.tips":"Tips","common.max":"Max","common.download":"Download","common.copy":"Copy","common.copy.failed":"Copy failed","common.copy.copied":"Copied to clipboard","common.share":"Share","common.export":"Export","common.empty":"No data","common.resolution.1s":"1s","common.resolution.15s":"15s","common.resolution.30s":"30s","common.resolution.1m":"1m","common.resolution.5m":"5m","common.resolution.15m":"15m","common.resolution.30m":"30m","common.resolution.1h":"1h","common.resolution.4h":"4h","common.resolution.12h":"12h","common.resolution.24h":"24h"};var I={"mediaTrack.title":"Media Track","mediaTrack.description":"Media Track"};var R={"tokens.copied.address":"Token address copied to clipboard","tokens.listHeader.token":"Token","tokens.listHeader.priceHistories":"Price Histories","tokens.listHeader.price":"Price","tokens.listHeader.priceChange":"{{resolution}}%","tokens.listHeader.marketCap":"Market Cap","tokens.listHeader.liquidity":"Liquidity","tokens.listHeader.volumes":"{{resolution}} Volumes","tokens.listHeader.txs":"{{resolution}} TXNS","tokens.listHeader.traders":"{{resolution}} Traders","tokens.listHeader.tokenInfo":"Token Info","tokens.listHeader.actions":"Actions","tokens.listHeader.filter":"Filter","tokens.listType.trending":"Trending","tokens.listType.new":"New","tokens.listType.stocks":"Stocks","tokens.filters.protocols.title":"Protocols","tokens.filters.protocols.selectAll":"Select All","tokens.filters.protocols.unselectAll":"Unselect All","tokens.filters.keywords.title":"Search Keywords","tokens.filters.keywords.exclude.title":"Exclude Keywords","tokens.filters.keywords.placeholder":"keyword1, keyword2...","tokens.filters.stats.min":"Min","tokens.filters.stats.max":"Max","tokens.filters.stats.audits":"Audits","tokens.filters.stats.audits.holders":"Holders Count","tokens.filters.stats.audits.top10HoldingsRatio":"Top 10 Holders %","tokens.filters.stats.audits.top100HoldingsRatio":"Top 100 Holders %","tokens.filters.stats.audits.devHoldingsRatio":"Dev Holdings %","tokens.filters.stats.metrics":"Metrics","tokens.filters.stats.metrics.volumes":"{{resolution}} Volumes ($)","tokens.filters.stats.metrics.txns":"{{resolution}} Transactions","tokens.filters.stats.metrics.liquidity":"Liquidity ($)","tokens.filters.stats.metrics.marketCap":"Market Cap ($)","tokens.filters.modal.title":"Filters","tokens.tokenInfo.holders":"Holders","tokens.tokenInfo.top10HoldingsRatio":"Top 10 Holders","tokens.tokenInfo.top100HoldingsRatio":"Top 100 Holders","tokens.tokenInfo.devHoldingsRatio":"Dev Holders"};var M={...b,...I,...R};var A=i18next.createInstance();A.use(j__default.default).use(reactI18next.initReactI18next).init({fallbackLng:h,ns:[i],defaultNS:i,interpolation:{escapeValue:false},detection:{lookupLocalStorage:H,lookupCookie:S,caches:["cookie","localStorage"],order:["cookie","localStorage","htmlTag","navigator"]},resources:{[h]:{[i]:M}}});var t=A;var u=class{constructor(e){this.options=e;this.cache=new Set;}cache;async fetchData(e){try{return await(await fetch(e)).json()}catch{return {}}}async loadLanguage(e,a){if(typeof this.options?.loadPath!="function")return;let n=this.options.loadPath(e,a);if(typeof n=="string"&&(n=[n]),!n.length)return;let s=n.filter(c=>!t.hasResourceBundle(e,a)||!this.cache.has(c)).map(async c=>{let m=await this.fetchData(c);t.addResourceBundle(e,a,m,true,true),this.cache.add(c);});await Promise.all(s);}};var y=react.createContext({languages:[],beforeLanguageChange:()=>Promise.resolve(),afterLanguageChange:()=>Promise.resolve()}),$=()=>{let r=react.useContext(y);if(!r)throw new Error("useLocaleContext must be used within a LocaleProvider");return r};function f(r,e){let a=r.split("/")[1];return e=e||Object.values(p),e.includes(a)?a:null}function g(r,e,a){e=e||Object.values(p),a=a||"en";let n=/^([a-z]{2})/i,l=r?.match(n);if(!l)return a;let s=l[1];return e.includes(r)?r:e.includes(s)?s:a}function Ae(r){let{path:e,locale:a,search:n}=r,l=n||(typeof window<"u"?window.location.search:""),s=f(e);return s?`${e}${l}`:(s=a||g(t.language),`/${s}${e}${l}`)}function Ke(r,e){let a=f(r,e);return a?r.replace(new RegExp(`^/${a}(?=/)`),""):r}function E({children:r,locale:e,resource:a,resources:n,backend:l,supportedLanguages:s,convertDetectedLanguage:c,languages:m,beforeLanguageChange:C,afterLanguageChange:L}){let[P,T]=react.useState(x),N=react.useRef(new u(l));react.useEffect(()=>{if(n){Object.entries(n).forEach(([o,d])=>{t.addResourceBundle(o,i,d,true,true);});return}a&&e&&t.addResourceBundle(e,i,a,true,true);},[e,a,n]),react.useEffect(()=>{e&&e!==t.language&&t.changeLanguage(e);},[e]),react.useEffect(()=>{Array.isArray(m)?T(m):Array.isArray(s)&&T(s.map(o=>x.find(d=>d.localCode===o)).filter(o=>!!o));},[s,m]),react.useEffect(()=>{(async()=>{let d=typeof c=="function"?c(t.language):g(t.language);await N.current.loadLanguage(d,i),d!==t.language&&await t.changeLanguage(d);})();},[t.language]);let w=react.useCallback(async o=>{await C?.(o),await N.current.loadLanguage(o,i);},[C]),v=react.useCallback(async o=>{L?.(o);},[L]),O=react.useMemo(()=>({languages:P,beforeLanguageChange:w,afterLanguageChange:v}),[P,w,v]);return jsxRuntime.jsx(y.Provider,{value:O,children:jsxRuntime.jsx(reactI18next.I18nextProvider,{i18n:t,defaultNS:i,children:r})})}function J(r,e){let a=react.useContext(reactI18next.I18nContext);return reactI18next.useTranslation(r,{i18n:a?.i18n||t,...e})}function ee(){let[r,e]=react.useState(t.language);return react.useEffect(()=>(t.on("languageChanged",e),()=>{t.off("languageChanged",e);}),[t]),r}function te(){let{beforeLanguageChange:r,afterLanguageChange:e}=$();return react.useCallback(async n=>{await r(n),await t.changeLanguage(n),await e(n);},[r,e,t])}Object.defineProperty(exports,"createInstance",{enumerable:true,get:function(){return i18next.createInstance}});Object.defineProperty(exports,"i18next",{enumerable:true,get:function(){return i18next__default.default}});exports.LocaleContext=y;exports.LocaleEnum=p;exports.LocaleProvider=E;exports.defaultLanguages=x;exports.defaultLng=h;exports.defaultNS=i;exports.en=M;exports.generatePath=Ae;exports.getLocalePathFromPathname=f;exports.i18n=t;exports.i18nCookieKey=S;exports.i18nLocalStorageKey=H;exports.parseI18nLang=g;exports.removeLangPrefix=Ke;exports.useChangeLocale=te;exports.useLocale=ee;exports.useLocaleContext=$;exports.useTranslation=J;Object.keys(reactI18next).forEach(function(k){if(k!=='default'&&!Object.prototype.hasOwnProperty.call(exports,k))Object.defineProperty(exports,k,{enumerable:true,get:function(){return reactI18next[k]}})});//# sourceMappingURL=index.js.map
1
+ 'use strict';var reactI18next=require('react-i18next'),i18next=require('i18next'),q=require('i18next-browser-languagedetector'),react=require('react'),jsxRuntime=require('react/jsx-runtime');function _interopDefault(e){return e&&e.__esModule?e:{default:e}}var i18next__default=/*#__PURE__*/_interopDefault(i18next);var q__default=/*#__PURE__*/_interopDefault(q);var p=(o=>(o.en="en",o.zh="zh",o.ja="ja",o.es="es",o.ko="ko",o.vi="vi",o.de="de",o.fr="fr",o.ru="ru",o.id="id",o.tr="tr",o.it="it",o.pt="pt",o.uk="uk",o.pl="pl",o.nl="nl",o))(p||{});var k=[{localCode:"en",displayName:"English"},{localCode:"zh",displayName:"\u4E2D\u6587"},{localCode:"ja",displayName:"\u65E5\u672C\u8A9E"},{localCode:"es",displayName:"Espa\xF1ol"},{localCode:"ko",displayName:"\uD55C\uAD6D\uC5B4"},{localCode:"vi",displayName:"Ti\u1EBFng Vi\u1EC7t"},{localCode:"de",displayName:"Deutsch"},{localCode:"fr",displayName:"Fran\xE7ais"},{localCode:"ru",displayName:"\u0420\u0443\u0441\u0441\u043A\u0438\u0439"},{localCode:"id",displayName:"Bahasa Indonesia"},{localCode:"tr",displayName:"T\xFCrk\xE7e"},{localCode:"it",displayName:"Italiano"},{localCode:"pt",displayName:"Portugu\xEAs"},{localCode:"uk",displayName:"\u0423\u043A\u0440\u0430\u0457\u043D\u0441\u044C\u043A\u0430"},{localCode:"pl",displayName:"Polski"},{localCode:"nl",displayName:"Nederlands"}],x="en",i="translation",H="liberfi_i18nLng",S="liberfi_i18nLng";var b={"channels.forms.base.title":"Base Info","channels.forms.wallets.title":"Wallet Management","channels.forms.socials.title":"Social Medias"};var I={"common.cancel":"Cancel","common.confirm":"Confirm","common.reset":"Reset","common.apply":"Apply","common.ok":"OK","common.yes":"Yes","common.no":"No","common.all":"All","common.buy":"Buy","common.sell":"Sell","common.long":"Long","common.short":"Short","common.edit":"Edit","common.save":"Save","common.add":"Add","common.delete":"Delete","common.tips":"Tips","common.max":"Max","common.download":"Download","common.copy":"Copy","common.copy.failed":"Copy failed","common.copy.copied":"Copied to clipboard","common.share":"Share","common.export":"Export","common.empty":"No data","common.resolution.1s":"1s","common.resolution.15s":"15s","common.resolution.30s":"30s","common.resolution.1m":"1m","common.resolution.5m":"5m","common.resolution.15m":"15m","common.resolution.30m":"30m","common.resolution.1h":"1h","common.resolution.4h":"4h","common.resolution.12h":"12h","common.resolution.24h":"24h"};var R={"mediaTrack.tweets.translate.show":"Show Translation","mediaTrack.tweets.translate.hide":"Hide Translation","mediaTrack.tweets.expand":"Expand","mediaTrack.tweets.collapse":"Collapse"};var M={"scaffold.draggableModal.snapToEdge":"Drag to edge to show side panel","scaffold.draggablePanel.snapToModal":"Drag away to show floating modal","scaffold.home":"Home"};var A={"tokens.search.placeholder":"Search by token or CA...","tokens.copied.address":"Token address copied to clipboard","tokens.listHeader.token":"Token","tokens.listHeader.priceHistories":"Price Histories","tokens.listHeader.price":"Price","tokens.listHeader.priceChange":"{{resolution}}%","tokens.listHeader.marketCap":"Market Cap","tokens.listHeader.liquidity":"Liquidity","tokens.listHeader.volumes":"{{resolution}} Volumes","tokens.listHeader.txs":"{{resolution}} TXNS","tokens.listHeader.traders":"{{resolution}} Traders","tokens.listHeader.tokenInfo":"Token Info","tokens.listHeader.actions":"Actions","tokens.listHeader.filter":"Filter","tokens.listType.trending":"Trending","tokens.listType.new":"New","tokens.listType.stocks":"Stocks","tokens.filters.protocols.title":"Protocols","tokens.filters.protocols.selectAll":"Select All","tokens.filters.protocols.unselectAll":"Unselect All","tokens.filters.keywords.title":"Search Keywords","tokens.filters.keywords.exclude.title":"Exclude Keywords","tokens.filters.keywords.placeholder":"keyword1, keyword2...","tokens.filters.stats.min":"Min","tokens.filters.stats.max":"Max","tokens.filters.stats.audits":"Audits","tokens.filters.stats.audits.holders":"Holders Count","tokens.filters.stats.audits.top10HoldingsRatio":"Top 10 Holders %","tokens.filters.stats.audits.top100HoldingsRatio":"Top 100 Holders %","tokens.filters.stats.audits.devHoldingsRatio":"Dev Holdings %","tokens.filters.stats.metrics":"Metrics","tokens.filters.stats.metrics.volumes":"{{resolution}} Volumes ($)","tokens.filters.stats.metrics.txns":"{{resolution}} Transactions","tokens.filters.stats.metrics.liquidity":"Liquidity ($)","tokens.filters.stats.metrics.marketCap":"Market Cap ($)","tokens.filters.modal.title":"Filters","tokens.tokenInfo.holders":"Holders","tokens.tokenInfo.top10HoldingsRatio":"Top 10 Holders","tokens.tokenInfo.top100HoldingsRatio":"Top 100 Holders","tokens.tokenInfo.devHoldingsRatio":"Dev Holders"};var $={...I,...R,...M,...A,...b};var F=i18next.createInstance();F.use(q__default.default).use(reactI18next.initReactI18next).init({fallbackLng:x,ns:[i],defaultNS:i,interpolation:{escapeValue:false},detection:{lookupLocalStorage:H,lookupCookie:S,caches:["cookie","localStorage"],order:["cookie","localStorage","htmlTag","navigator"]},resources:{[x]:{[i]:$}}});var t=F;var f=class{constructor(e){this.options=e;this.cache=new Set;}cache;async fetchData(e){try{return await(await fetch(e)).json()}catch{return {}}}async loadLanguage(e,a){if(typeof this.options?.loadPath!="function")return;let n=this.options.loadPath(e,a);if(typeof n=="string"&&(n=[n]),!n.length)return;let s=n.filter(c=>!t.hasResourceBundle(e,a)||!this.cache.has(c)).map(async c=>{let m=await this.fetchData(c);t.addResourceBundle(e,a,m,true,true),this.cache.add(c);});await Promise.all(s);}};var y=react.createContext({languages:[],beforeLanguageChange:()=>Promise.resolve(),afterLanguageChange:()=>Promise.resolve()}),B=()=>{let r=react.useContext(y);if(!r)throw new Error("useLocaleContext must be used within a LocaleProvider");return r};function u(r,e){let a=r.split("/")[1];return e=e||Object.values(p),e.includes(a)?a:null}function g(r,e,a){e=e||Object.values(p),a=a||"en";let n=/^([a-z]{2})/i,l=r?.match(n);if(!l)return a;let s=l[1];return e.includes(r)?r:e.includes(s)?s:a}function De(r){let{path:e,locale:a,search:n}=r,l=n||(typeof window<"u"?window.location.search:""),s=u(e);return s?`${e}${l}`:(s=a||g(t.language),`/${s}${e}${l}`)}function qe(r,e){let a=u(r,e);return a?r.replace(new RegExp(`^/${a}(?=/)`),""):r}function Y({children:r,locale:e,resource:a,resources:n,backend:l,supportedLanguages:s,convertDetectedLanguage:c,languages:m,beforeLanguageChange:C,afterLanguageChange:L}){let[P,w]=react.useState(k),T=react.useRef(new f(l));react.useEffect(()=>{if(n){Object.entries(n).forEach(([o,d])=>{t.addResourceBundle(o,i,d,true,true);});return}a&&e&&t.addResourceBundle(e,i,a,true,true);},[e,a,n]),react.useEffect(()=>{e&&e!==t.language&&t.changeLanguage(e);},[e]),react.useEffect(()=>{Array.isArray(m)?w(m):Array.isArray(s)&&w(s.map(o=>k.find(d=>d.localCode===o)).filter(o=>!!o));},[s,m]),react.useEffect(()=>{(async()=>{let d=typeof c=="function"?c(t.language):g(t.language);await T.current.loadLanguage(d,i),d!==t.language&&await t.changeLanguage(d);})();},[t.language]);let N=react.useCallback(async o=>{await C?.(o),await T.current.loadLanguage(o,i);},[C]),v=react.useCallback(async o=>{L?.(o);},[L]),D=react.useMemo(()=>({languages:P,beforeLanguageChange:N,afterLanguageChange:v}),[P,N,v]);return jsxRuntime.jsx(y.Provider,{value:D,children:jsxRuntime.jsx(reactI18next.I18nextProvider,{i18n:t,defaultNS:i,children:r})})}function Z(r,e){let a=react.useContext(reactI18next.I18nContext);return reactI18next.useTranslation(r,{i18n:a?.i18n||t,...e})}function te(){let[r,e]=react.useState(t.language);return react.useEffect(()=>(t.on("languageChanged",e),()=>{t.off("languageChanged",e);}),[t]),r}function re(){let{beforeLanguageChange:r,afterLanguageChange:e}=B();return react.useCallback(async n=>{await r(n),await t.changeLanguage(n),await e(n);},[r,e,t])}Object.defineProperty(exports,"createInstance",{enumerable:true,get:function(){return i18next.createInstance}});Object.defineProperty(exports,"i18next",{enumerable:true,get:function(){return i18next__default.default}});exports.LocaleContext=y;exports.LocaleEnum=p;exports.LocaleProvider=Y;exports.defaultLanguages=k;exports.defaultLng=x;exports.defaultNS=i;exports.en=$;exports.generatePath=De;exports.getLocalePathFromPathname=u;exports.i18n=t;exports.i18nCookieKey=S;exports.i18nLocalStorageKey=H;exports.parseI18nLang=g;exports.removeLangPrefix=qe;exports.useChangeLocale=re;exports.useLocale=te;exports.useLocaleContext=B;exports.useTranslation=Z;Object.keys(reactI18next).forEach(function(k){if(k!=='default'&&!Object.prototype.hasOwnProperty.call(exports,k))Object.defineProperty(exports,k,{enumerable:true,get:function(){return reactI18next[k]}})});//# sourceMappingURL=index.js.map
2
2
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/types.ts","../src/constant.ts","../src/locale/module/common.ts","../src/locale/module/mediaTrack.ts","../src/locale/module/tokens.ts","../src/locale/en.ts","../src/i18n.ts","../src/backend.ts","../src/context.ts","../src/utils/getLocalePathFromPathname.ts","../src/utils/parseI18nLang.ts","../src/utils/generatePath.ts","../src/utils/removeLangPrefix.ts","../src/provider.tsx","../src/useTranslation.ts","../src/useLocale.ts","../src/useChangeLocale.ts"],"names":["LocaleEnum","defaultLanguages","defaultLng","defaultNS","i18nLocalStorageKey","i18nCookieKey","common","mediaTrack","tokens","en","i18n","createInstance","LanguageDetector","initReactI18next","i18n_default","Backend","options","url","lang","ns","paths","promises","path","data","LocaleContext","createContext","useLocaleContext","context","useContext","getLocalePathFromPathname","pathname","localeCodes","locale","parseI18nLang","defaultLang","regex","match","matchLang","generatePath","params","search","searchUrl","localePath","removeLangPrefix","LocaleProvider","children","resource","resources","backend","supportedLanguages","convertDetectedLanguage","languagesProp","beforeLanguageChange","afterLanguageChange","languages","setLanguages","useState","backendRef","useRef","useEffect","messages","localCode","l","item","beforeLanguageChangeHandler","useCallback","afterLanguageChangeHandler","contextValue","useMemo","jsx","I18nextProvider","useTranslation","I18nContext","_useTranslation","useLocale","localeCode","setLocaleCode","useChangeLocale"],"mappings":"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","file":"index.js","sourcesContent":["// import the original type declarations\nimport \"i18next\";\n// import all namespaces (for the default language, only)\nimport { en } from \"./locale/en\";\n\nexport enum LocaleEnum {\n /** English */\n en = \"en\",\n /** Chinese */\n zh = \"zh\",\n /** Japanese */\n ja = \"ja\",\n /** Spanish */\n es = \"es\",\n /** Korean */\n ko = \"ko\",\n /** Vietnamese */\n vi = \"vi\",\n /** German */\n de = \"de\",\n /** French */\n fr = \"fr\",\n /** Russian */\n ru = \"ru\",\n /** Indonesian */\n id = \"id\",\n /** Turkish */\n tr = \"tr\",\n /** Italian */\n it = \"it\",\n /** Portuguese */\n pt = \"pt\",\n /** Ukrainian */\n uk = \"uk\",\n /** Polish */\n pl = \"pl\",\n /** Dutch */\n nl = \"nl\",\n}\n\nexport type LocaleCode = keyof typeof LocaleEnum | (string & {});\n\nexport type Language = {\n localCode: LocaleCode;\n displayName: string;\n};\n\nexport type ExtendLocaleMessages = Record<`extend.${string}`, string>;\n\nexport type LocaleMessages = typeof en & ExtendLocaleMessages;\n\n// eslint-disable-next-line @typescript-eslint/no-empty-object-type\nexport type Resources<T extends {} = {}> = {\n [key in LocaleCode]?: Partial<LocaleMessages & T>;\n};\n\n// https://www.i18next.com/overview/typescript#create-a-declaration-file\n// Enhance the input parameter intelliSense for the t function.\ndeclare module \"i18next\" {\n // Extend CustomTypeOptions\n interface CustomTypeOptions {\n // custom namespace type, if you changed it\n defaultNS: \"translation\";\n // custom resources type\n resources: {\n translation: LocaleMessages;\n };\n }\n}\n","import { Language, LocaleEnum } from \"./types\";\n\nexport const defaultLanguages: Language[] = [\n { localCode: LocaleEnum.en, displayName: \"English\" }, // English\n { localCode: LocaleEnum.zh, displayName: \"中文\" }, // Chinese\n { localCode: LocaleEnum.ja, displayName: \"日本語\" }, // Japanese\n { localCode: LocaleEnum.es, displayName: \"Español\" }, // Spanish\n { localCode: LocaleEnum.ko, displayName: \"한국어\" }, // Korean\n { localCode: LocaleEnum.vi, displayName: \"Tiếng Việt\" }, // Vietnamese\n { localCode: LocaleEnum.de, displayName: \"Deutsch\" }, // German\n { localCode: LocaleEnum.fr, displayName: \"Français\" }, // French\n { localCode: LocaleEnum.ru, displayName: \"Русский\" }, // Russian\n { localCode: LocaleEnum.id, displayName: \"Bahasa Indonesia\" }, // Indonesian\n { localCode: LocaleEnum.tr, displayName: \"Türkçe\" }, // Turkish\n { localCode: LocaleEnum.it, displayName: \"Italiano\" }, // Italian\n { localCode: LocaleEnum.pt, displayName: \"Português\" }, // Portuguese\n { localCode: LocaleEnum.uk, displayName: \"Українська\" }, // Ukrainian\n { localCode: LocaleEnum.pl, displayName: \"Polski\" }, // Polish\n { localCode: LocaleEnum.nl, displayName: \"Nederlands\" }, // Dutch\n];\n\nexport const defaultLng = LocaleEnum.en;\n\nexport const defaultNS = \"translation\";\n\nexport const i18nLocalStorageKey = \"liberfi_i18nLng\";\n\nexport const i18nCookieKey = \"liberfi_i18nLng\";\n","export const common = {\n \"common.cancel\": \"Cancel\",\n \"common.confirm\": \"Confirm\",\n \"common.reset\": \"Reset\",\n \"common.apply\": \"Apply\",\n \"common.ok\": \"OK\",\n \"common.yes\": \"Yes\",\n \"common.no\": \"No\",\n \"common.all\": \"All\",\n \"common.buy\": \"Buy\",\n \"common.sell\": \"Sell\",\n \"common.long\": \"Long\",\n \"common.short\": \"Short\",\n \"common.edit\": \"Edit\",\n \"common.save\": \"Save\",\n \"common.add\": \"Add\",\n \"common.delete\": \"Delete\",\n \"common.tips\": \"Tips\",\n \"common.max\": \"Max\",\n \"common.download\": \"Download\",\n \"common.copy\": \"Copy\",\n \"common.copy.failed\": \"Copy failed\",\n \"common.copy.copied\": \"Copied to clipboard\",\n \"common.share\": \"Share\",\n \"common.export\": \"Export\",\n \"common.empty\": \"No data\",\n \"common.resolution.1s\": \"1s\",\n \"common.resolution.15s\": \"15s\",\n \"common.resolution.30s\": \"30s\",\n \"common.resolution.1m\": \"1m\",\n \"common.resolution.5m\": \"5m\",\n \"common.resolution.15m\": \"15m\",\n \"common.resolution.30m\": \"30m\",\n \"common.resolution.1h\": \"1h\",\n \"common.resolution.4h\": \"4h\",\n \"common.resolution.12h\": \"12h\",\n \"common.resolution.24h\": \"24h\",\n};\n","export const mediaTrack = {\n \"mediaTrack.title\": \"Media Track\",\n \"mediaTrack.description\": \"Media Track\",\n};\n","export const tokens = {\n \"tokens.copied.address\": \"Token address copied to clipboard\",\n \"tokens.listHeader.token\": \"Token\",\n \"tokens.listHeader.priceHistories\": \"Price Histories\",\n \"tokens.listHeader.price\": \"Price\",\n \"tokens.listHeader.priceChange\": \"{{resolution}}%\",\n \"tokens.listHeader.marketCap\": \"Market Cap\",\n \"tokens.listHeader.liquidity\": \"Liquidity\",\n \"tokens.listHeader.volumes\": \"{{resolution}} Volumes\",\n \"tokens.listHeader.txs\": \"{{resolution}} TXNS\",\n \"tokens.listHeader.traders\": \"{{resolution}} Traders\",\n \"tokens.listHeader.tokenInfo\": \"Token Info\",\n \"tokens.listHeader.actions\": \"Actions\",\n \"tokens.listHeader.filter\": \"Filter\",\n \"tokens.listType.trending\": \"Trending\",\n \"tokens.listType.new\": \"New\",\n \"tokens.listType.stocks\": \"Stocks\",\n \"tokens.filters.protocols.title\": \"Protocols\",\n \"tokens.filters.protocols.selectAll\": \"Select All\",\n \"tokens.filters.protocols.unselectAll\": \"Unselect All\",\n \"tokens.filters.keywords.title\": \"Search Keywords\",\n \"tokens.filters.keywords.exclude.title\": \"Exclude Keywords\",\n \"tokens.filters.keywords.placeholder\": \"keyword1, keyword2...\",\n \"tokens.filters.stats.min\": \"Min\",\n \"tokens.filters.stats.max\": \"Max\",\n \"tokens.filters.stats.audits\": \"Audits\",\n \"tokens.filters.stats.audits.holders\": \"Holders Count\",\n \"tokens.filters.stats.audits.top10HoldingsRatio\": \"Top 10 Holders %\",\n \"tokens.filters.stats.audits.top100HoldingsRatio\": \"Top 100 Holders %\",\n \"tokens.filters.stats.audits.devHoldingsRatio\": \"Dev Holdings %\",\n \"tokens.filters.stats.metrics\": \"Metrics\",\n \"tokens.filters.stats.metrics.volumes\": \"{{resolution}} Volumes ($)\",\n \"tokens.filters.stats.metrics.txns\": \"{{resolution}} Transactions\",\n \"tokens.filters.stats.metrics.liquidity\": \"Liquidity ($)\",\n \"tokens.filters.stats.metrics.marketCap\": \"Market Cap ($)\",\n \"tokens.filters.modal.title\": \"Filters\",\n \"tokens.tokenInfo.holders\": \"Holders\",\n \"tokens.tokenInfo.top10HoldingsRatio\": \"Top 10 Holders\",\n \"tokens.tokenInfo.top100HoldingsRatio\": \"Top 100 Holders\",\n \"tokens.tokenInfo.devHoldingsRatio\": \"Dev Holders\",\n};\n","import { common } from \"./module/common\";\nimport { mediaTrack } from \"./module/mediaTrack\";\nimport { tokens } from \"./module/tokens\";\n\nexport const en = {\n ...common,\n ...mediaTrack,\n ...tokens,\n};\n","import { initReactI18next } from \"react-i18next\";\nimport { i18n as I18nInstance, createInstance } from \"i18next\";\nimport LanguageDetector from \"i18next-browser-languagedetector\";\nimport {\n defaultLng,\n defaultNS,\n i18nCookieKey,\n i18nLocalStorageKey,\n} from \"./constant\";\nimport { en } from \"./locale/en\";\n\nconst i18n: I18nInstance = createInstance();\n\ni18n\n .use(LanguageDetector)\n .use(initReactI18next) // bind react-i18next to the instance\n .init({\n fallbackLng: defaultLng,\n ns: [defaultNS],\n defaultNS,\n interpolation: {\n escapeValue: false, // not needed for react!!\n },\n detection: {\n lookupLocalStorage: i18nLocalStorageKey,\n lookupCookie: i18nCookieKey,\n caches: [\"cookie\", \"localStorage\"],\n order: [\"cookie\", \"localStorage\", \"htmlTag\", \"navigator\"],\n },\n resources: {\n [defaultLng]: { [defaultNS]: en },\n },\n });\n\nexport default i18n;\n","import i18n from \"./i18n\";\nimport { LocaleCode } from \"./types\";\n\nexport type BackendOptions = {\n /**\n * Load url for a given language and namespace\n * @param lang language code\n * @param ns namespace\n * @returns url or urls\n */\n loadPath: (lang: LocaleCode, ns: string) => string | string[];\n};\n\n/**\n * Async resources loading through HTTP, resources must be placed in the site's public directory\n */\nexport class Backend {\n private readonly cache: Set<string>;\n\n constructor(private readonly options?: BackendOptions) {\n this.cache = new Set();\n }\n\n async fetchData(url: string): Promise<Record<string, string>> {\n try {\n const res = await fetch(url);\n return await res.json();\n } catch (error) {\n console.warn(\n `Failed to fetch locale resource bundle from ${url}:`,\n error,\n );\n return {};\n }\n }\n\n async loadLanguage(lang: LocaleCode, ns: string) {\n if (typeof this.options?.loadPath !== \"function\") return;\n\n // get load url paths\n let paths = this.options.loadPath(lang, ns);\n if (typeof paths === \"string\") paths = [paths];\n if (!paths.length) return;\n\n // filter out the paths that have already been loaded\n const urls = paths.filter((path) => {\n const loaded = i18n.hasResourceBundle(lang, ns);\n return !loaded || !this.cache.has(path);\n });\n\n const promises = urls.map(async (url) => {\n const data = await this.fetchData(url);\n i18n.addResourceBundle(lang, ns, data, true, true);\n this.cache.add(url);\n });\n await Promise.all(promises);\n }\n}\n","import { createContext, useContext } from \"react\";\nimport { Language, LocaleCode } from \"./types\";\n\nexport type LocaleContextState = {\n /**\n * Supported languages\n */\n languages: Language[];\n\n /**\n * Called before language change\n * @param lang - new language code\n * @returns\n */\n beforeLanguageChange: (lang: LocaleCode) => Promise<void>;\n /**\n * Called after language changed\n * @param lang - new language code\n * @returns\n */\n afterLanguageChange: (lang: LocaleCode) => Promise<void>;\n};\n\nexport const LocaleContext = createContext<LocaleContextState>({\n languages: [],\n beforeLanguageChange: () => Promise.resolve(),\n afterLanguageChange: () => Promise.resolve(),\n});\n\nexport const useLocaleContext = () => {\n const context = useContext(LocaleContext);\n if (!context) {\n throw new Error(\"useLocaleContext must be used within a LocaleProvider\");\n }\n return context;\n};\n","import { LocaleEnum } from \"../types\";\n\n/**\n * get locale path from pathname\n * @param pathname - pathname to get locale path\n * @param localeCodes - locale codes to check\n * @example\n * getLocalePathFromPathname('/en/perp/PERP_ETH_USDC') => 'en'\n * getLocalePathFromPathname('/perp/PERP_ETH_USDC') => null\n * getLocalePathFromPathname('/en/markets') => 'en'\n * getLocalePathFromPathname('/markets') => null\n */\nexport function getLocalePathFromPathname(\n pathname: string,\n localeCodes?: string[],\n) {\n const locale = pathname.split(\"/\")[1];\n localeCodes = localeCodes || Object.values(LocaleEnum);\n return localeCodes.includes(locale as LocaleEnum) ? locale : null;\n}\n","import { type LocaleCode, LocaleEnum } from \"../types\";\n\n/**\n * transform browser language to i18n locale codes\n * @param lang - browser language\n * @param localeCodes - locale codes to check\n * @param defaultLang - default locale code\n * @example\n * parseI18nLang('en-US') => 'en'\n * parseI18nLang('zh-CN') => 'zh'\n * parseI18nLang('zh-TW') => 'zh'\n * parseI18nLang('ja') => 'ja'\n * */\nexport function parseI18nLang(\n lang: string,\n localeCodes?: LocaleCode[],\n defaultLang?: LocaleCode,\n) {\n localeCodes = localeCodes || Object.values(LocaleEnum);\n defaultLang = defaultLang || LocaleEnum.en;\n\n const regex = /^([a-z]{2})/i;\n const match = lang?.match(regex);\n\n if (!match) {\n return defaultLang;\n }\n\n const matchLang = match[1];\n\n if (localeCodes.includes(lang)) {\n return lang;\n }\n\n if (localeCodes.includes(matchLang)) {\n return matchLang;\n }\n\n return defaultLang;\n}\n","import i18n from \"../i18n\";\nimport { getLocalePathFromPathname } from \"./getLocalePathFromPathname\";\nimport { parseI18nLang } from \"./parseI18nLang\";\n\n/**\n * Generate a localized path with proper locale prefix and search parameters\n *\n * This function ensures that the returned path includes the appropriate locale prefix.\n * If the path already contains a valid locale prefix, it returns the path as-is.\n * Otherwise, it prepends the specified locale or falls back to the current i18n language.\n *\n * @param params - Configuration object for path generation\n * @param params.path - The base pathname (e.g., '/markets', '/perp/PERP_ETH_USDC')\n * @param params.locale - Optional locale code to use as prefix. If not provided, uses i18n.language\n * @param params.search - Optional search query string. If not provided, uses window.location.search\n *\n * @returns A complete URL path with locale prefix and search parameters\n *\n * @example\n * generatePath({ path: '/markets' }) => '/en/markets?tab=spot'\n * generatePath({ path: '/en/markets', search: '?tab=futures' }) => '/en/markets?tab=futures'\n * generatePath({ path: '/perp/PERP_ETH_USDC', locale: 'zh' }) => '/zh/perp/PERP_ETH_USDC'\n * generatePath({ path: '/en/perp/PERP_ETH_USDC' }) => '/en/perp/PERP_ETH_USDC'\n */\nexport function generatePath(params: {\n path: string;\n locale?: string;\n search?: string;\n}) {\n const { path, locale, search } = params;\n const searchUrl =\n search || (typeof window !== \"undefined\" ? window.location.search : \"\");\n\n let localePath = getLocalePathFromPathname(path);\n\n // If path already contains a valid locale prefix, return it unchanged\n if (localePath) {\n return `${path}${searchUrl}`;\n }\n\n // Use provided locale or fall back to current i18n language\n localePath = locale || parseI18nLang(i18n.language);\n\n // Prepend locale prefix to path\n return `/${localePath}${path}${searchUrl}`;\n}\n","import { getLocalePathFromPathname } from \"./getLocalePathFromPathname\";\n\n/**\n * remove lang prefix from pathname\n * @param pathname - pathname to remove lang prefix\n * @param localeCodes - locale codes to check\n * @example\n * removeLangPrefix('/en/perp/PERP_ETH_USDC') => '/perp/PERP_ETH_USDC'\n * removeLangPrefix('/en/markets') => '/markets'\n * removeLangPrefix('/perp/PERP_ETH_USDC') => '/perp/PERP_ETH_USDC'\n * removeLangPrefix('/markets') => '/markets'\n */\nexport function removeLangPrefix(pathname: string, localeCodes?: string[]) {\n const localePath = getLocalePathFromPathname(pathname, localeCodes);\n\n return localePath\n ? pathname.replace(new RegExp(`^/${localePath}(?=/)`), \"\")\n : pathname;\n}\n","import {\n PropsWithChildren,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport { I18nextProvider } from \"react-i18next\";\nimport { Backend, BackendOptions } from \"./backend\";\nimport { defaultLanguages, defaultNS } from \"./constant\";\nimport { LocaleContext, LocaleContextState } from \"./context\";\nimport i18n from \"./i18n\";\nimport { LocaleCode, Resources, Language } from \"./types\";\nimport { parseI18nLang } from \"./utils\";\n\nexport type LocaleProviderProps = PropsWithChildren<\n {\n /** current locale */\n locale?: LocaleCode;\n /** current locale's resource */\n resource?: Record<string, string>;\n /** all synchronously loaded resources */\n resources?: Resources;\n /** supported languages, must be a subset of {@link defaultLanguages}, used when {@link languages} is not provided */\n supportedLanguages?: LocaleCode[];\n /** optional conversion function to modify the detected language code */\n convertDetectedLanguage?: (lang: string) => LocaleCode;\n /** options to load resources asynchronously */\n backend?: BackendOptions;\n } & Partial<LocaleContextState>\n>;\n\nexport function LocaleProvider({\n children,\n locale,\n resource,\n resources,\n backend,\n supportedLanguages,\n convertDetectedLanguage,\n languages: languagesProp,\n beforeLanguageChange,\n afterLanguageChange,\n}: LocaleProviderProps) {\n // calculated supported languages\n const [languages, setLanguages] = useState<Language[]>(defaultLanguages);\n\n // backend instance to load resources asynchronously\n const backendRef = useRef(new Backend(backend!));\n\n // load resources synchronously\n useEffect(() => {\n if (resources) {\n Object.entries(resources).forEach(([locale, messages]) => {\n i18n.addResourceBundle(locale, defaultNS, messages, true, true);\n });\n return;\n }\n if (resource && locale) {\n i18n.addResourceBundle(locale, defaultNS, resource, true, true);\n }\n }, [locale, resource, resources]);\n\n // change language when locale changed\n useEffect(() => {\n if (locale && locale !== i18n.language) {\n i18n.changeLanguage(locale);\n }\n }, [locale]);\n\n // calculate supported languages\n useEffect(() => {\n if (Array.isArray(languagesProp)) {\n setLanguages(languagesProp);\n } else if (Array.isArray(supportedLanguages)) {\n setLanguages(\n supportedLanguages\n .map((localCode) =>\n defaultLanguages.find((l) => l.localCode === localCode),\n )\n .filter((item) => !!item),\n );\n }\n }, [supportedLanguages, languagesProp]);\n\n // if browser language is not a valid language, change language\n useEffect(() => {\n const fixLanguage = async () => {\n const lang =\n typeof convertDetectedLanguage === \"function\"\n ? convertDetectedLanguage(i18n.language)\n : parseI18nLang(i18n.language);\n await backendRef.current.loadLanguage(lang, defaultNS);\n if (lang !== i18n.language) {\n await i18n.changeLanguage(lang);\n }\n };\n fixLanguage();\n }, [i18n.language]);\n\n const beforeLanguageChangeHandler = useCallback(\n async (lang: LocaleCode) => {\n await beforeLanguageChange?.(lang);\n // load language before language changed\n await backendRef.current.loadLanguage(lang, defaultNS);\n },\n [beforeLanguageChange],\n );\n\n const afterLanguageChangeHandler = useCallback(\n async (lang: LocaleCode) => {\n afterLanguageChange?.(lang);\n },\n [afterLanguageChange],\n );\n\n const contextValue = useMemo<LocaleContextState>(() => {\n return {\n languages,\n beforeLanguageChange: beforeLanguageChangeHandler,\n afterLanguageChange: afterLanguageChangeHandler,\n };\n }, [languages, beforeLanguageChangeHandler, afterLanguageChangeHandler]);\n\n return (\n <LocaleContext.Provider value={contextValue}>\n <I18nextProvider i18n={i18n} defaultNS={defaultNS}>\n {children}\n </I18nextProvider>\n </LocaleContext.Provider>\n );\n}\n","import { useContext } from \"react\";\nimport {\n FallbackNs,\n useTranslation as _useTranslation,\n UseTranslationOptions,\n I18nContext,\n} from \"react-i18next\";\nimport { FlatNamespace, KeyPrefix } from \"i18next\";\nimport i18n from \"./i18n\";\n\ntype $Tuple<T> = readonly [T?, ...T[]];\n\n/**\n * Hook to get translation function\n * @param ns\n * @param options\n * @returns\n */\nexport function useTranslation<\n Ns extends FlatNamespace | $Tuple<FlatNamespace> | undefined = undefined,\n KPrefix extends KeyPrefix<FallbackNs<Ns>> = undefined,\n>(ns?: Ns, options?: UseTranslationOptions<KPrefix>) {\n const context = useContext(I18nContext);\n return _useTranslation(ns, { i18n: context?.i18n || i18n, ...options });\n}\n","import { useEffect, useState } from \"react\";\nimport i18n from \"./i18n\";\nimport { LocaleCode } from \"./types\";\n\n/**\n * Hooks to get current locale code\n * @returns current locale code\n */\nexport function useLocale() {\n const [localeCode, setLocaleCode] = useState<LocaleCode>(i18n.language);\n\n useEffect(() => {\n i18n.on(\"languageChanged\", setLocaleCode);\n return () => {\n i18n.off(\"languageChanged\", setLocaleCode);\n };\n }, [i18n]);\n\n return localeCode;\n}\n","import { useCallback } from \"react\";\nimport { useLocaleContext } from \"./context\";\nimport i18n from \"./i18n\";\nimport { LocaleCode } from \"./types\";\n\nexport function useChangeLocale() {\n const { beforeLanguageChange, afterLanguageChange } = useLocaleContext();\n\n const changeLocale = useCallback(\n async (locale: LocaleCode) => {\n await beforeLanguageChange(locale);\n await i18n.changeLanguage(locale);\n await afterLanguageChange(locale);\n },\n [beforeLanguageChange, afterLanguageChange, i18n],\n );\n\n return changeLocale;\n}\n"]}
1
+ {"version":3,"sources":["../src/types.ts","../src/constant.ts","../src/locale/module/channels.ts","../src/locale/module/common.ts","../src/locale/module/mediaTrack.ts","../src/locale/module/scaffold.ts","../src/locale/module/tokens.ts","../src/locale/en.ts","../src/i18n.ts","../src/backend.ts","../src/context.ts","../src/utils/getLocalePathFromPathname.ts","../src/utils/parseI18nLang.ts","../src/utils/generatePath.ts","../src/utils/removeLangPrefix.ts","../src/provider.tsx","../src/useTranslation.ts","../src/useLocale.ts","../src/useChangeLocale.ts"],"names":["LocaleEnum","defaultLanguages","defaultLng","defaultNS","i18nLocalStorageKey","i18nCookieKey","channels","common","mediaTrack","scaffold","tokens","en","i18n","createInstance","LanguageDetector","initReactI18next","i18n_default","Backend","options","url","lang","ns","paths","promises","path","data","LocaleContext","createContext","useLocaleContext","context","useContext","getLocalePathFromPathname","pathname","localeCodes","locale","parseI18nLang","defaultLang","regex","match","matchLang","generatePath","params","search","searchUrl","localePath","removeLangPrefix","LocaleProvider","children","resource","resources","backend","supportedLanguages","convertDetectedLanguage","languagesProp","beforeLanguageChange","afterLanguageChange","languages","setLanguages","useState","backendRef","useRef","useEffect","messages","localCode","l","item","beforeLanguageChangeHandler","useCallback","afterLanguageChangeHandler","contextValue","useMemo","jsx","I18nextProvider","useTranslation","I18nContext","_useTranslation","useLocale","localeCode","setLocaleCode","useChangeLocale"],"mappings":"0WAKO,IAAKA,OAEVA,CAAAA,CAAA,EAAA,CAAK,IAAA,CAELA,CAAAA,CAAA,EAAA,CAAK,IAAA,CAELA,CAAAA,CAAA,EAAA,CAAK,KAELA,CAAAA,CAAA,EAAA,CAAK,IAAA,CAELA,CAAAA,CAAA,EAAA,CAAK,IAAA,CAELA,CAAAA,CAAA,EAAA,CAAK,IAAA,CAELA,CAAAA,CAAA,EAAA,CAAK,IAAA,CAELA,CAAAA,CAAA,EAAA,CAAK,IAAA,CAELA,CAAAA,CAAA,GAAK,IAAA,CAELA,CAAAA,CAAA,EAAA,CAAK,IAAA,CAELA,CAAAA,CAAA,EAAA,CAAK,IAAA,CAELA,CAAAA,CAAA,GAAK,IAAA,CAELA,CAAAA,CAAA,EAAA,CAAK,IAAA,CAELA,CAAAA,CAAA,EAAA,CAAK,IAAA,CAELA,CAAAA,CAAA,GAAK,IAAA,CAELA,CAAAA,CAAA,EAAA,CAAK,IAAA,CAhCKA,CAAAA,CAAAA,EAAAA,CAAAA,EAAA,EAAA,ECHL,IAAMC,CAAAA,CAA+B,CAC1C,CAAE,SAAA,CAAA,IAAA,CAA0B,WAAA,CAAa,SAAU,CAAA,CACnD,CAAE,SAAA,CAAA,IAAA,CAA0B,YAAa,cAAK,CAAA,CAC9C,CAAE,SAAA,CAAA,IAAA,CAA0B,WAAA,CAAa,oBAAM,CAAA,CAC/C,CAAE,eAA0B,WAAA,CAAa,YAAU,CAAA,CACnD,CAAE,SAAA,CAAA,IAAA,CAA0B,WAAA,CAAa,oBAAM,CAAA,CAC/C,CAAE,SAAA,CAAA,IAAA,CAA0B,WAAA,CAAa,sBAAa,CAAA,CACtD,CAAE,SAAA,CAAA,IAAA,CAA0B,WAAA,CAAa,SAAU,EACnD,CAAE,SAAA,CAAA,IAAA,CAA0B,WAAA,CAAa,aAAW,CAAA,CACpD,CAAE,SAAA,CAAA,IAAA,CAA0B,WAAA,CAAa,4CAAU,CAAA,CACnD,CAAE,SAAA,CAAA,IAAA,CAA0B,WAAA,CAAa,kBAAmB,CAAA,CAC5D,CAAE,SAAA,CAAA,IAAA,CAA0B,YAAa,cAAS,CAAA,CAClD,CAAE,SAAA,CAAA,IAAA,CAA0B,WAAA,CAAa,UAAW,CAAA,CACpD,CAAE,eAA0B,WAAA,CAAa,cAAY,CAAA,CACrD,CAAE,SAAA,CAAA,IAAA,CAA0B,WAAA,CAAa,8DAAa,CAAA,CACtD,CAAE,SAAA,CAAA,IAAA,CAA0B,WAAA,CAAa,QAAS,CAAA,CAClD,CAAE,SAAA,CAAA,IAAA,CAA0B,WAAA,CAAa,YAAa,CACxD,CAAA,CAEaC,CAAAA,CAAAA,IAAAA,CAEAC,CAAAA,CAAY,aAAA,CAEZC,CAAAA,CAAsB,iBAAA,CAEtBC,CAAAA,CAAgB,kBC3BtB,IAAMC,CAAAA,CAAW,CACtB,2BAAA,CAA6B,WAAA,CAC7B,8BAAA,CAAgC,mBAAA,CAChC,8BAAA,CAAgC,eAClC,CAAA,CCJO,IAAMC,CAAAA,CAAS,CACpB,eAAA,CAAiB,QAAA,CACjB,gBAAA,CAAkB,SAAA,CAClB,cAAA,CAAgB,OAAA,CAChB,cAAA,CAAgB,OAAA,CAChB,WAAA,CAAa,IAAA,CACb,YAAA,CAAc,KAAA,CACd,YAAa,IAAA,CACb,YAAA,CAAc,KAAA,CACd,YAAA,CAAc,KAAA,CACd,aAAA,CAAe,MAAA,CACf,aAAA,CAAe,OACf,cAAA,CAAgB,OAAA,CAChB,aAAA,CAAe,MAAA,CACf,aAAA,CAAe,MAAA,CACf,YAAA,CAAc,KAAA,CACd,gBAAiB,QAAA,CACjB,aAAA,CAAe,MAAA,CACf,YAAA,CAAc,KAAA,CACd,iBAAA,CAAmB,UAAA,CACnB,aAAA,CAAe,MAAA,CACf,oBAAA,CAAsB,aAAA,CACtB,oBAAA,CAAsB,qBAAA,CACtB,cAAA,CAAgB,OAAA,CAChB,eAAA,CAAiB,SACjB,cAAA,CAAgB,SAAA,CAChB,sBAAA,CAAwB,IAAA,CACxB,uBAAA,CAAyB,KAAA,CACzB,uBAAA,CAAyB,KAAA,CACzB,uBAAwB,IAAA,CACxB,sBAAA,CAAwB,IAAA,CACxB,uBAAA,CAAyB,KAAA,CACzB,uBAAA,CAAyB,KAAA,CACzB,sBAAA,CAAwB,KACxB,sBAAA,CAAwB,IAAA,CACxB,uBAAA,CAAyB,KAAA,CACzB,uBAAA,CAAyB,KAC3B,CAAA,CCrCO,IAAMC,EAAa,CACxB,kCAAA,CAAoC,kBAAA,CACpC,kCAAA,CAAoC,kBAAA,CACpC,0BAAA,CAA4B,QAAA,CAC5B,4BAAA,CAA8B,UAChC,CAAA,CCLO,IAAMC,CAAAA,CAAW,CACtB,oCAAA,CAAsC,iCAAA,CACtC,qCAAA,CAAuC,kCAAA,CACvC,gBAAiB,MACnB,CAAA,CCJO,IAAMC,CAAAA,CAAS,CACpB,2BAAA,CAA6B,0BAAA,CAC7B,uBAAA,CAAyB,oCACzB,yBAAA,CAA2B,OAAA,CAC3B,kCAAA,CAAoC,iBAAA,CACpC,yBAAA,CAA2B,OAAA,CAC3B,+BAAA,CAAiC,iBAAA,CACjC,6BAAA,CAA+B,YAAA,CAC/B,6BAAA,CAA+B,WAAA,CAC/B,2BAAA,CAA6B,wBAAA,CAC7B,uBAAA,CAAyB,qBAAA,CACzB,4BAA6B,wBAAA,CAC7B,6BAAA,CAA+B,YAAA,CAC/B,2BAAA,CAA6B,SAAA,CAC7B,0BAAA,CAA4B,QAAA,CAC5B,0BAAA,CAA4B,WAC5B,qBAAA,CAAuB,KAAA,CACvB,wBAAA,CAA0B,QAAA,CAC1B,gCAAA,CAAkC,WAAA,CAClC,oCAAA,CAAsC,YAAA,CACtC,uCAAwC,cAAA,CACxC,+BAAA,CAAiC,iBAAA,CACjC,uCAAA,CAAyC,kBAAA,CACzC,qCAAA,CAAuC,uBAAA,CACvC,0BAAA,CAA4B,KAAA,CAC5B,0BAAA,CAA4B,KAAA,CAC5B,6BAAA,CAA+B,QAAA,CAC/B,qCAAA,CAAuC,eAAA,CACvC,gDAAA,CAAkD,mBAClD,iDAAA,CAAmD,mBAAA,CACnD,8CAAA,CAAgD,gBAAA,CAChD,8BAAA,CAAgC,SAAA,CAChC,sCAAA,CAAwC,4BAAA,CACxC,oCAAqC,6BAAA,CACrC,wCAAA,CAA0C,eAAA,CAC1C,wCAAA,CAA0C,gBAAA,CAC1C,4BAAA,CAA8B,SAAA,CAC9B,0BAAA,CAA4B,UAC5B,qCAAA,CAAuC,gBAAA,CACvC,sCAAA,CAAwC,iBAAA,CACxC,mCAAA,CAAqC,aACvC,CAAA,CCnCO,IAAMC,CAAAA,CAAK,CAChB,GAAGJ,CAAAA,CACH,GAAGC,CAAAA,CACH,GAAGC,CAAAA,CACH,GAAGC,CAAAA,CACH,GAAGJ,CACL,ECDA,IAAMM,CAAAA,CAAqBC,sBAAAA,EAAe,CAE1CD,EACG,GAAA,CAAIE,kBAAgB,CAAA,CACpB,GAAA,CAAIC,6BAAgB,CAAA,CACpB,IAAA,CAAK,CACJ,YAAab,CAAAA,CACb,EAAA,CAAI,CAACC,CAAS,CAAA,CACd,SAAA,CAAAA,CAAAA,CACA,aAAA,CAAe,CACb,WAAA,CAAa,KACf,CAAA,CACA,SAAA,CAAW,CACT,kBAAA,CAAoBC,CAAAA,CACpB,YAAA,CAAcC,EACd,MAAA,CAAQ,CAAC,QAAA,CAAU,cAAc,CAAA,CACjC,KAAA,CAAO,CAAC,QAAA,CAAU,eAAgB,SAAA,CAAW,WAAW,CAC1D,CAAA,CACA,SAAA,CAAW,CACT,CAACH,CAAU,EAAG,CAAE,CAACC,CAAS,EAAGQ,CAAG,CAClC,CACF,CAAC,CAAA,CAEH,IAAOK,CAAAA,CAAQJ,EClBR,IAAMK,CAAAA,CAAN,KAAc,CAGnB,WAAA,CAA6BC,CAAAA,CAA0B,CAA1B,IAAA,CAAA,OAAA,CAAAA,CAAAA,CAC3B,IAAA,CAAK,KAAA,CAAQ,IAAI,IACnB,CAJiB,KAAA,CAMjB,MAAM,SAAA,CAAUC,CAAAA,CAA8C,CAC5D,GAAI,CAEF,OAAO,KAAA,CADK,MAAM,MAAMA,CAAG,CAAA,EACV,IAAA,EACnB,CAAA,KAAgB,CAKd,OAAO,EACT,CACF,CAEA,MAAM,YAAA,CAAaC,CAAAA,CAAkBC,CAAAA,CAAY,CAC/C,GAAI,OAAO,IAAA,CAAK,OAAA,EAAS,QAAA,EAAa,UAAA,CAAY,OAGlD,IAAIC,CAAAA,CAAQ,IAAA,CAAK,OAAA,CAAQ,QAAA,CAASF,CAAAA,CAAMC,CAAE,CAAA,CAE1C,GADI,OAAOC,CAAAA,EAAU,WAAUA,CAAAA,CAAQ,CAACA,CAAK,CAAA,CAAA,CACzC,CAACA,CAAAA,CAAM,MAAA,CAAQ,OAQnB,IAAMC,CAAAA,CALOD,CAAAA,CAAM,MAAA,CAAQE,CAAAA,EAElB,CADQR,CAAAA,CAAK,iBAAA,CAAkBI,CAAAA,CAAMC,CAAE,CAAA,EAC5B,CAAC,IAAA,CAAK,KAAA,CAAM,GAAA,CAAIG,CAAI,CACvC,CAAA,CAEqB,IAAI,MAAOL,CAAAA,EAAQ,CACvC,IAAMM,CAAAA,CAAO,MAAM,IAAA,CAAK,SAAA,CAAUN,CAAG,CAAA,CACrCH,CAAAA,CAAK,iBAAA,CAAkBI,CAAAA,CAAMC,CAAAA,CAAII,CAAAA,CAAM,IAAA,CAAM,IAAI,EACjD,IAAA,CAAK,KAAA,CAAM,GAAA,CAAIN,CAAG,EACpB,CAAC,CAAA,CACD,MAAM,QAAQ,GAAA,CAAII,CAAQ,EAC5B,CACF,CAAA,CClCO,IAAMG,CAAAA,CAAgBC,mBAAAA,CAAkC,CAC7D,SAAA,CAAW,EAAC,CACZ,oBAAA,CAAsB,IAAM,OAAA,CAAQ,OAAA,EAAQ,CAC5C,mBAAA,CAAqB,IAAM,QAAQ,OAAA,EACrC,CAAC,CAAA,CAEYC,CAAAA,CAAmB,IAAM,CACpC,IAAMC,EAAUC,gBAAAA,CAAWJ,CAAa,CAAA,CACxC,GAAI,CAACG,CAAAA,CACH,MAAM,IAAI,KAAA,CAAM,uDAAuD,CAAA,CAEzE,OAAOA,CACT,ECvBO,SAASE,CAAAA,CACdC,EACAC,CAAAA,CACA,CACA,IAAMC,CAAAA,CAASF,CAAAA,CAAS,KAAA,CAAM,GAAG,CAAA,CAAE,CAAC,CAAA,CACpC,OAAAC,CAAAA,CAAcA,CAAAA,EAAe,MAAA,CAAO,MAAA,CAAOjC,CAAU,CAAA,CAC9CiC,EAAY,QAAA,CAASC,CAAoB,CAAA,CAAIA,CAAAA,CAAS,IAC/D,CCNO,SAASC,CAAAA,CACdf,CAAAA,CACAa,CAAAA,CACAG,CAAAA,CACA,CACAH,CAAAA,CAAcA,CAAAA,EAAe,MAAA,CAAO,MAAA,CAAOjC,CAAU,CAAA,CACrDoC,CAAAA,CAAcA,CAAAA,EAAe,IAAA,CAE7B,IAAMC,CAAAA,CAAQ,cAAA,CACRC,CAAAA,CAAQlB,GAAM,KAAA,CAAMiB,CAAK,CAAA,CAE/B,GAAI,CAACC,CAAAA,CACH,OAAOF,CAAAA,CAGT,IAAMG,CAAAA,CAAYD,CAAAA,CAAM,CAAC,CAAA,CAEzB,OAAIL,CAAAA,CAAY,QAAA,CAASb,CAAI,EACpBA,CAAAA,CAGLa,CAAAA,CAAY,QAAA,CAASM,CAAS,CAAA,CACzBA,CAAAA,CAGFH,CACT,CCfO,SAASI,EAAAA,CAAaC,CAAAA,CAI1B,CACD,GAAM,CAAE,IAAA,CAAAjB,CAAAA,CAAM,MAAA,CAAAU,EAAQ,MAAA,CAAAQ,CAAO,CAAA,CAAID,CAAAA,CAC3BE,CAAAA,CACJD,CAAAA,GAAW,OAAO,MAAA,CAAW,IAAc,MAAA,CAAO,QAAA,CAAS,MAAA,CAAS,EAAA,CAAA,CAElEE,CAAAA,CAAab,CAAAA,CAA0BP,CAAI,CAAA,CAG/C,OAAIoB,CAAAA,CACK,CAAA,EAAGpB,CAAI,CAAA,EAAGmB,CAAS,CAAA,CAAA,EAI5BC,CAAAA,CAAaV,GAAUC,CAAAA,CAAcnB,CAAAA,CAAK,QAAQ,CAAA,CAG3C,CAAA,CAAA,EAAI4B,CAAU,CAAA,EAAGpB,CAAI,GAAGmB,CAAS,CAAA,CAAA,CAC1C,CCjCO,SAASE,EAAAA,CAAiBb,CAAAA,CAAkBC,CAAAA,CAAwB,CACzE,IAAMW,CAAAA,CAAab,CAAAA,CAA0BC,CAAAA,CAAUC,CAAW,CAAA,CAElE,OAAOW,CAAAA,CACHZ,CAAAA,CAAS,OAAA,CAAQ,IAAI,MAAA,CAAO,CAAA,EAAA,EAAKY,CAAU,CAAA,KAAA,CAAO,CAAA,CAAG,EAAE,EACvDZ,CACN,CCeO,SAASc,CAAAA,CAAe,CAC7B,SAAAC,CAAAA,CACA,MAAA,CAAAb,CAAAA,CACA,QAAA,CAAAc,CAAAA,CACA,SAAA,CAAAC,CAAAA,CACA,OAAA,CAAAC,EACA,kBAAA,CAAAC,CAAAA,CACA,uBAAA,CAAAC,CAAAA,CACA,SAAA,CAAWC,CAAAA,CACX,oBAAA,CAAAC,CAAAA,CACA,mBAAA,CAAAC,CACF,CAAA,CAAwB,CAEtB,GAAM,CAACC,CAAAA,CAAWC,CAAY,EAAIC,cAAAA,CAAqBzD,CAAgB,CAAA,CAGjE0D,CAAAA,CAAaC,YAAAA,CAAO,IAAI3C,CAAAA,CAAQiC,CAAQ,CAAC,CAAA,CAG/CW,eAAAA,CAAU,IAAM,CACd,GAAIZ,CAAAA,CAAW,CACb,MAAA,CAAO,QAAQA,CAAS,CAAA,CAAE,OAAA,CAAQ,CAAC,CAACf,CAAAA,CAAQ4B,CAAQ,CAAA,GAAM,CACxD9C,CAAAA,CAAK,iBAAA,CAAkBkB,CAAAA,CAAQ/B,CAAAA,CAAW2D,CAAAA,CAAU,IAAA,CAAM,IAAI,EAChE,CAAC,CAAA,CACD,MACF,CACId,CAAAA,EAAYd,CAAAA,EACdlB,CAAAA,CAAK,iBAAA,CAAkBkB,CAAAA,CAAQ/B,EAAW6C,CAAAA,CAAU,IAAA,CAAM,IAAI,EAElE,CAAA,CAAG,CAACd,CAAAA,CAAQc,CAAAA,CAAUC,CAAS,CAAC,CAAA,CAGhCY,eAAAA,CAAU,IAAM,CACV3B,CAAAA,EAAUA,CAAAA,GAAWlB,CAAAA,CAAK,QAAA,EAC5BA,CAAAA,CAAK,cAAA,CAAekB,CAAM,EAE9B,CAAA,CAAG,CAACA,CAAM,CAAC,CAAA,CAGX2B,eAAAA,CAAU,IAAM,CACV,KAAA,CAAM,OAAA,CAAQR,CAAa,CAAA,CAC7BI,EAAaJ,CAAa,CAAA,CACjB,KAAA,CAAM,OAAA,CAAQF,CAAkB,CAAA,EACzCM,CAAAA,CACEN,CAAAA,CACG,IAAKY,CAAAA,EACJ9D,CAAAA,CAAiB,IAAA,CAAM+D,CAAAA,EAAMA,CAAAA,CAAE,SAAA,GAAcD,CAAS,CACxD,CAAA,CACC,MAAA,CAAQE,CAAAA,EAAS,CAAC,CAACA,CAAI,CAC5B,EAEJ,EAAG,CAACd,CAAAA,CAAoBE,CAAa,CAAC,CAAA,CAGtCQ,eAAAA,CAAU,IAAM,CAAA,CACM,SAAY,CAC9B,IAAMzC,CAAAA,CACJ,OAAOgC,CAAAA,EAA4B,UAAA,CAC/BA,CAAAA,CAAwBpC,CAAAA,CAAK,QAAQ,CAAA,CACrCmB,CAAAA,CAAcnB,CAAAA,CAAK,QAAQ,CAAA,CACjC,MAAM2C,CAAAA,CAAW,OAAA,CAAQ,YAAA,CAAavC,CAAAA,CAAMjB,CAAS,CAAA,CACjDiB,CAAAA,GAASJ,CAAAA,CAAK,QAAA,EAChB,MAAMA,EAAK,cAAA,CAAeI,CAAI,EAElC,CAAA,IAEF,CAAA,CAAG,CAACJ,CAAAA,CAAK,QAAQ,CAAC,CAAA,CAElB,IAAMkD,CAAAA,CAA8BC,iBAAAA,CAClC,MAAO/C,CAAAA,EAAqB,CAC1B,MAAMkC,CAAAA,GAAuBlC,CAAI,CAAA,CAEjC,MAAMuC,CAAAA,CAAW,OAAA,CAAQ,YAAA,CAAavC,CAAAA,CAAMjB,CAAS,EACvD,CAAA,CACA,CAACmD,CAAoB,CACvB,CAAA,CAEMc,CAAAA,CAA6BD,iBAAAA,CACjC,MAAO/C,CAAAA,EAAqB,CAC1BmC,CAAAA,GAAsBnC,CAAI,EAC5B,CAAA,CACA,CAACmC,CAAmB,CACtB,CAAA,CAEMc,CAAAA,CAAeC,aAAAA,CAA4B,KACxC,CACL,SAAA,CAAAd,CAAAA,CACA,oBAAA,CAAsBU,EACtB,mBAAA,CAAqBE,CACvB,CAAA,CAAA,CACC,CAACZ,CAAAA,CAAWU,CAAAA,CAA6BE,CAA0B,CAAC,CAAA,CAEvE,OACEG,cAAAA,CAAC7C,CAAAA,CAAc,QAAA,CAAd,CAAuB,KAAA,CAAO2C,CAAAA,CAC7B,SAAAE,cAAAA,CAACC,4BAAAA,CAAA,CAAgB,IAAA,CAAMxD,CAAAA,CAAM,SAAA,CAAWb,CAAAA,CACrC,QAAA,CAAA4C,EACH,CAAA,CACF,CAEJ,CClHO,SAAS0B,CAAAA,CAGdpD,CAAAA,CAASH,CAAAA,CAA0C,CACnD,IAAMW,CAAAA,CAAUC,gBAAAA,CAAW4C,wBAAW,CAAA,CACtC,OAAOC,2BAAAA,CAAgBtD,CAAAA,CAAI,CAAE,IAAA,CAAMQ,CAAAA,EAAS,IAAA,EAAQb,CAAAA,CAAM,GAAGE,CAAQ,CAAC,CACxE,CChBO,SAAS0D,EAAAA,EAAY,CAC1B,GAAM,CAACC,CAAAA,CAAYC,CAAa,CAAA,CAAIpB,cAAAA,CAAqB1C,CAAAA,CAAK,QAAQ,CAAA,CAEtE,OAAA6C,eAAAA,CAAU,KACR7C,CAAAA,CAAK,EAAA,CAAG,iBAAA,CAAmB8D,CAAa,EACjC,IAAM,CACX9D,CAAAA,CAAK,GAAA,CAAI,iBAAA,CAAmB8D,CAAa,EAC3C,CAAA,CAAA,CACC,CAAC9D,CAAI,CAAC,CAAA,CAEF6D,CACT,CCdO,SAASE,EAAAA,EAAkB,CAChC,GAAM,CAAE,oBAAA,CAAAzB,CAAAA,CAAsB,mBAAA,CAAAC,CAAoB,CAAA,CAAI3B,CAAAA,EAAiB,CAWvE,OATqBuC,iBAAAA,CACnB,MAAOjC,CAAAA,EAAuB,CAC5B,MAAMoB,CAAAA,CAAqBpB,CAAM,CAAA,CACjC,MAAMlB,CAAAA,CAAK,cAAA,CAAekB,CAAM,CAAA,CAChC,MAAMqB,CAAAA,CAAoBrB,CAAM,EAClC,CAAA,CACA,CAACoB,CAAAA,CAAsBC,CAAAA,CAAqBvC,CAAI,CAClD,CAGF","file":"index.js","sourcesContent":["// import the original type declarations\nimport \"i18next\";\n// import all namespaces (for the default language, only)\nimport { en } from \"./locale/en\";\n\nexport enum LocaleEnum {\n /** English */\n en = \"en\",\n /** Chinese */\n zh = \"zh\",\n /** Japanese */\n ja = \"ja\",\n /** Spanish */\n es = \"es\",\n /** Korean */\n ko = \"ko\",\n /** Vietnamese */\n vi = \"vi\",\n /** German */\n de = \"de\",\n /** French */\n fr = \"fr\",\n /** Russian */\n ru = \"ru\",\n /** Indonesian */\n id = \"id\",\n /** Turkish */\n tr = \"tr\",\n /** Italian */\n it = \"it\",\n /** Portuguese */\n pt = \"pt\",\n /** Ukrainian */\n uk = \"uk\",\n /** Polish */\n pl = \"pl\",\n /** Dutch */\n nl = \"nl\",\n}\n\nexport type LocaleCode = keyof typeof LocaleEnum | (string & {});\n\nexport type Language = {\n localCode: LocaleCode;\n displayName: string;\n};\n\nexport type ExtendLocaleMessages = Record<`extend.${string}`, string>;\n\nexport type LocaleMessages = typeof en & ExtendLocaleMessages;\n\n// eslint-disable-next-line @typescript-eslint/no-empty-object-type\nexport type Resources<T extends {} = {}> = {\n [key in LocaleCode]?: Partial<LocaleMessages & T>;\n};\n\n// https://www.i18next.com/overview/typescript#create-a-declaration-file\n// Enhance the input parameter intelliSense for the t function.\ndeclare module \"i18next\" {\n // Extend CustomTypeOptions\n interface CustomTypeOptions {\n // custom namespace type, if you changed it\n defaultNS: \"translation\";\n // custom resources type\n resources: {\n translation: LocaleMessages;\n };\n }\n}\n","import { Language, LocaleEnum } from \"./types\";\n\nexport const defaultLanguages: Language[] = [\n { localCode: LocaleEnum.en, displayName: \"English\" }, // English\n { localCode: LocaleEnum.zh, displayName: \"中文\" }, // Chinese\n { localCode: LocaleEnum.ja, displayName: \"日本語\" }, // Japanese\n { localCode: LocaleEnum.es, displayName: \"Español\" }, // Spanish\n { localCode: LocaleEnum.ko, displayName: \"한국어\" }, // Korean\n { localCode: LocaleEnum.vi, displayName: \"Tiếng Việt\" }, // Vietnamese\n { localCode: LocaleEnum.de, displayName: \"Deutsch\" }, // German\n { localCode: LocaleEnum.fr, displayName: \"Français\" }, // French\n { localCode: LocaleEnum.ru, displayName: \"Русский\" }, // Russian\n { localCode: LocaleEnum.id, displayName: \"Bahasa Indonesia\" }, // Indonesian\n { localCode: LocaleEnum.tr, displayName: \"Türkçe\" }, // Turkish\n { localCode: LocaleEnum.it, displayName: \"Italiano\" }, // Italian\n { localCode: LocaleEnum.pt, displayName: \"Português\" }, // Portuguese\n { localCode: LocaleEnum.uk, displayName: \"Українська\" }, // Ukrainian\n { localCode: LocaleEnum.pl, displayName: \"Polski\" }, // Polish\n { localCode: LocaleEnum.nl, displayName: \"Nederlands\" }, // Dutch\n];\n\nexport const defaultLng = LocaleEnum.en;\n\nexport const defaultNS = \"translation\";\n\nexport const i18nLocalStorageKey = \"liberfi_i18nLng\";\n\nexport const i18nCookieKey = \"liberfi_i18nLng\";\n","export const channels = {\n \"channels.forms.base.title\": \"Base Info\",\n \"channels.forms.wallets.title\": \"Wallet Management\",\n \"channels.forms.socials.title\": \"Social Medias\",\n};\n","export const common = {\n \"common.cancel\": \"Cancel\",\n \"common.confirm\": \"Confirm\",\n \"common.reset\": \"Reset\",\n \"common.apply\": \"Apply\",\n \"common.ok\": \"OK\",\n \"common.yes\": \"Yes\",\n \"common.no\": \"No\",\n \"common.all\": \"All\",\n \"common.buy\": \"Buy\",\n \"common.sell\": \"Sell\",\n \"common.long\": \"Long\",\n \"common.short\": \"Short\",\n \"common.edit\": \"Edit\",\n \"common.save\": \"Save\",\n \"common.add\": \"Add\",\n \"common.delete\": \"Delete\",\n \"common.tips\": \"Tips\",\n \"common.max\": \"Max\",\n \"common.download\": \"Download\",\n \"common.copy\": \"Copy\",\n \"common.copy.failed\": \"Copy failed\",\n \"common.copy.copied\": \"Copied to clipboard\",\n \"common.share\": \"Share\",\n \"common.export\": \"Export\",\n \"common.empty\": \"No data\",\n \"common.resolution.1s\": \"1s\",\n \"common.resolution.15s\": \"15s\",\n \"common.resolution.30s\": \"30s\",\n \"common.resolution.1m\": \"1m\",\n \"common.resolution.5m\": \"5m\",\n \"common.resolution.15m\": \"15m\",\n \"common.resolution.30m\": \"30m\",\n \"common.resolution.1h\": \"1h\",\n \"common.resolution.4h\": \"4h\",\n \"common.resolution.12h\": \"12h\",\n \"common.resolution.24h\": \"24h\",\n};\n","export const mediaTrack = {\n \"mediaTrack.tweets.translate.show\": \"Show Translation\",\n \"mediaTrack.tweets.translate.hide\": \"Hide Translation\",\n \"mediaTrack.tweets.expand\": \"Expand\",\n \"mediaTrack.tweets.collapse\": \"Collapse\",\n};\n","export const scaffold = {\n \"scaffold.draggableModal.snapToEdge\": \"Drag to edge to show side panel\",\n \"scaffold.draggablePanel.snapToModal\": \"Drag away to show floating modal\",\n \"scaffold.home\": \"Home\",\n};\n","export const tokens = {\n \"tokens.search.placeholder\": \"Search by token or CA...\",\n \"tokens.copied.address\": \"Token address copied to clipboard\",\n \"tokens.listHeader.token\": \"Token\",\n \"tokens.listHeader.priceHistories\": \"Price Histories\",\n \"tokens.listHeader.price\": \"Price\",\n \"tokens.listHeader.priceChange\": \"{{resolution}}%\",\n \"tokens.listHeader.marketCap\": \"Market Cap\",\n \"tokens.listHeader.liquidity\": \"Liquidity\",\n \"tokens.listHeader.volumes\": \"{{resolution}} Volumes\",\n \"tokens.listHeader.txs\": \"{{resolution}} TXNS\",\n \"tokens.listHeader.traders\": \"{{resolution}} Traders\",\n \"tokens.listHeader.tokenInfo\": \"Token Info\",\n \"tokens.listHeader.actions\": \"Actions\",\n \"tokens.listHeader.filter\": \"Filter\",\n \"tokens.listType.trending\": \"Trending\",\n \"tokens.listType.new\": \"New\",\n \"tokens.listType.stocks\": \"Stocks\",\n \"tokens.filters.protocols.title\": \"Protocols\",\n \"tokens.filters.protocols.selectAll\": \"Select All\",\n \"tokens.filters.protocols.unselectAll\": \"Unselect All\",\n \"tokens.filters.keywords.title\": \"Search Keywords\",\n \"tokens.filters.keywords.exclude.title\": \"Exclude Keywords\",\n \"tokens.filters.keywords.placeholder\": \"keyword1, keyword2...\",\n \"tokens.filters.stats.min\": \"Min\",\n \"tokens.filters.stats.max\": \"Max\",\n \"tokens.filters.stats.audits\": \"Audits\",\n \"tokens.filters.stats.audits.holders\": \"Holders Count\",\n \"tokens.filters.stats.audits.top10HoldingsRatio\": \"Top 10 Holders %\",\n \"tokens.filters.stats.audits.top100HoldingsRatio\": \"Top 100 Holders %\",\n \"tokens.filters.stats.audits.devHoldingsRatio\": \"Dev Holdings %\",\n \"tokens.filters.stats.metrics\": \"Metrics\",\n \"tokens.filters.stats.metrics.volumes\": \"{{resolution}} Volumes ($)\",\n \"tokens.filters.stats.metrics.txns\": \"{{resolution}} Transactions\",\n \"tokens.filters.stats.metrics.liquidity\": \"Liquidity ($)\",\n \"tokens.filters.stats.metrics.marketCap\": \"Market Cap ($)\",\n \"tokens.filters.modal.title\": \"Filters\",\n \"tokens.tokenInfo.holders\": \"Holders\",\n \"tokens.tokenInfo.top10HoldingsRatio\": \"Top 10 Holders\",\n \"tokens.tokenInfo.top100HoldingsRatio\": \"Top 100 Holders\",\n \"tokens.tokenInfo.devHoldingsRatio\": \"Dev Holders\",\n};\n","import { channels } from \"./module/channels\";\nimport { common } from \"./module/common\";\nimport { mediaTrack } from \"./module/mediaTrack\";\nimport { scaffold } from \"./module/scaffold\";\nimport { tokens } from \"./module/tokens\";\n\nexport const en = {\n ...common,\n ...mediaTrack,\n ...scaffold,\n ...tokens,\n ...channels,\n};\n","import { initReactI18next } from \"react-i18next\";\nimport { i18n as I18nInstance, createInstance } from \"i18next\";\nimport LanguageDetector from \"i18next-browser-languagedetector\";\nimport {\n defaultLng,\n defaultNS,\n i18nCookieKey,\n i18nLocalStorageKey,\n} from \"./constant\";\nimport { en } from \"./locale/en\";\n\nconst i18n: I18nInstance = createInstance();\n\ni18n\n .use(LanguageDetector)\n .use(initReactI18next) // bind react-i18next to the instance\n .init({\n fallbackLng: defaultLng,\n ns: [defaultNS],\n defaultNS,\n interpolation: {\n escapeValue: false, // not needed for react!!\n },\n detection: {\n lookupLocalStorage: i18nLocalStorageKey,\n lookupCookie: i18nCookieKey,\n caches: [\"cookie\", \"localStorage\"],\n order: [\"cookie\", \"localStorage\", \"htmlTag\", \"navigator\"],\n },\n resources: {\n [defaultLng]: { [defaultNS]: en },\n },\n });\n\nexport default i18n;\n","import i18n from \"./i18n\";\nimport { LocaleCode } from \"./types\";\n\nexport type BackendOptions = {\n /**\n * Load url for a given language and namespace\n * @param lang language code\n * @param ns namespace\n * @returns url or urls\n */\n loadPath: (lang: LocaleCode, ns: string) => string | string[];\n};\n\n/**\n * Async resources loading through HTTP, resources must be placed in the site's public directory\n */\nexport class Backend {\n private readonly cache: Set<string>;\n\n constructor(private readonly options?: BackendOptions) {\n this.cache = new Set();\n }\n\n async fetchData(url: string): Promise<Record<string, string>> {\n try {\n const res = await fetch(url);\n return await res.json();\n } catch (error) {\n console.warn(\n `Failed to fetch locale resource bundle from ${url}:`,\n error,\n );\n return {};\n }\n }\n\n async loadLanguage(lang: LocaleCode, ns: string) {\n if (typeof this.options?.loadPath !== \"function\") return;\n\n // get load url paths\n let paths = this.options.loadPath(lang, ns);\n if (typeof paths === \"string\") paths = [paths];\n if (!paths.length) return;\n\n // filter out the paths that have already been loaded\n const urls = paths.filter((path) => {\n const loaded = i18n.hasResourceBundle(lang, ns);\n return !loaded || !this.cache.has(path);\n });\n\n const promises = urls.map(async (url) => {\n const data = await this.fetchData(url);\n i18n.addResourceBundle(lang, ns, data, true, true);\n this.cache.add(url);\n });\n await Promise.all(promises);\n }\n}\n","import { createContext, useContext } from \"react\";\nimport { Language, LocaleCode } from \"./types\";\n\nexport type LocaleContextState = {\n /**\n * Supported languages\n */\n languages: Language[];\n\n /**\n * Called before language change\n * @param lang - new language code\n * @returns\n */\n beforeLanguageChange: (lang: LocaleCode) => Promise<void>;\n /**\n * Called after language changed\n * @param lang - new language code\n * @returns\n */\n afterLanguageChange: (lang: LocaleCode) => Promise<void>;\n};\n\nexport const LocaleContext = createContext<LocaleContextState>({\n languages: [],\n beforeLanguageChange: () => Promise.resolve(),\n afterLanguageChange: () => Promise.resolve(),\n});\n\nexport const useLocaleContext = () => {\n const context = useContext(LocaleContext);\n if (!context) {\n throw new Error(\"useLocaleContext must be used within a LocaleProvider\");\n }\n return context;\n};\n","import { LocaleEnum } from \"../types\";\n\n/**\n * get locale path from pathname\n * @param pathname - pathname to get locale path\n * @param localeCodes - locale codes to check\n * @example\n * getLocalePathFromPathname('/en/perp/PERP_ETH_USDC') => 'en'\n * getLocalePathFromPathname('/perp/PERP_ETH_USDC') => null\n * getLocalePathFromPathname('/en/markets') => 'en'\n * getLocalePathFromPathname('/markets') => null\n */\nexport function getLocalePathFromPathname(\n pathname: string,\n localeCodes?: string[],\n) {\n const locale = pathname.split(\"/\")[1];\n localeCodes = localeCodes || Object.values(LocaleEnum);\n return localeCodes.includes(locale as LocaleEnum) ? locale : null;\n}\n","import { type LocaleCode, LocaleEnum } from \"../types\";\n\n/**\n * transform browser language to i18n locale codes\n * @param lang - browser language\n * @param localeCodes - locale codes to check\n * @param defaultLang - default locale code\n * @example\n * parseI18nLang('en-US') => 'en'\n * parseI18nLang('zh-CN') => 'zh'\n * parseI18nLang('zh-TW') => 'zh'\n * parseI18nLang('ja') => 'ja'\n * */\nexport function parseI18nLang(\n lang: string,\n localeCodes?: LocaleCode[],\n defaultLang?: LocaleCode,\n) {\n localeCodes = localeCodes || Object.values(LocaleEnum);\n defaultLang = defaultLang || LocaleEnum.en;\n\n const regex = /^([a-z]{2})/i;\n const match = lang?.match(regex);\n\n if (!match) {\n return defaultLang;\n }\n\n const matchLang = match[1];\n\n if (localeCodes.includes(lang)) {\n return lang;\n }\n\n if (localeCodes.includes(matchLang)) {\n return matchLang;\n }\n\n return defaultLang;\n}\n","import i18n from \"../i18n\";\nimport { getLocalePathFromPathname } from \"./getLocalePathFromPathname\";\nimport { parseI18nLang } from \"./parseI18nLang\";\n\n/**\n * Generate a localized path with proper locale prefix and search parameters\n *\n * This function ensures that the returned path includes the appropriate locale prefix.\n * If the path already contains a valid locale prefix, it returns the path as-is.\n * Otherwise, it prepends the specified locale or falls back to the current i18n language.\n *\n * @param params - Configuration object for path generation\n * @param params.path - The base pathname (e.g., '/markets', '/perp/PERP_ETH_USDC')\n * @param params.locale - Optional locale code to use as prefix. If not provided, uses i18n.language\n * @param params.search - Optional search query string. If not provided, uses window.location.search\n *\n * @returns A complete URL path with locale prefix and search parameters\n *\n * @example\n * generatePath({ path: '/markets' }) => '/en/markets?tab=spot'\n * generatePath({ path: '/en/markets', search: '?tab=futures' }) => '/en/markets?tab=futures'\n * generatePath({ path: '/perp/PERP_ETH_USDC', locale: 'zh' }) => '/zh/perp/PERP_ETH_USDC'\n * generatePath({ path: '/en/perp/PERP_ETH_USDC' }) => '/en/perp/PERP_ETH_USDC'\n */\nexport function generatePath(params: {\n path: string;\n locale?: string;\n search?: string;\n}) {\n const { path, locale, search } = params;\n const searchUrl =\n search || (typeof window !== \"undefined\" ? window.location.search : \"\");\n\n let localePath = getLocalePathFromPathname(path);\n\n // If path already contains a valid locale prefix, return it unchanged\n if (localePath) {\n return `${path}${searchUrl}`;\n }\n\n // Use provided locale or fall back to current i18n language\n localePath = locale || parseI18nLang(i18n.language);\n\n // Prepend locale prefix to path\n return `/${localePath}${path}${searchUrl}`;\n}\n","import { getLocalePathFromPathname } from \"./getLocalePathFromPathname\";\n\n/**\n * remove lang prefix from pathname\n * @param pathname - pathname to remove lang prefix\n * @param localeCodes - locale codes to check\n * @example\n * removeLangPrefix('/en/perp/PERP_ETH_USDC') => '/perp/PERP_ETH_USDC'\n * removeLangPrefix('/en/markets') => '/markets'\n * removeLangPrefix('/perp/PERP_ETH_USDC') => '/perp/PERP_ETH_USDC'\n * removeLangPrefix('/markets') => '/markets'\n */\nexport function removeLangPrefix(pathname: string, localeCodes?: string[]) {\n const localePath = getLocalePathFromPathname(pathname, localeCodes);\n\n return localePath\n ? pathname.replace(new RegExp(`^/${localePath}(?=/)`), \"\")\n : pathname;\n}\n","import {\n PropsWithChildren,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport { I18nextProvider } from \"react-i18next\";\nimport { Backend, BackendOptions } from \"./backend\";\nimport { defaultLanguages, defaultNS } from \"./constant\";\nimport { LocaleContext, LocaleContextState } from \"./context\";\nimport i18n from \"./i18n\";\nimport { LocaleCode, Resources, Language } from \"./types\";\nimport { parseI18nLang } from \"./utils\";\n\nexport type LocaleProviderProps = PropsWithChildren<\n {\n /** current locale */\n locale?: LocaleCode;\n /** current locale's resource */\n resource?: Record<string, string>;\n /** all synchronously loaded resources */\n resources?: Resources;\n /** supported languages, must be a subset of {@link defaultLanguages}, used when {@link languages} is not provided */\n supportedLanguages?: LocaleCode[];\n /** optional conversion function to modify the detected language code */\n convertDetectedLanguage?: (lang: string) => LocaleCode;\n /** options to load resources asynchronously */\n backend?: BackendOptions;\n } & Partial<LocaleContextState>\n>;\n\nexport function LocaleProvider({\n children,\n locale,\n resource,\n resources,\n backend,\n supportedLanguages,\n convertDetectedLanguage,\n languages: languagesProp,\n beforeLanguageChange,\n afterLanguageChange,\n}: LocaleProviderProps) {\n // calculated supported languages\n const [languages, setLanguages] = useState<Language[]>(defaultLanguages);\n\n // backend instance to load resources asynchronously\n const backendRef = useRef(new Backend(backend!));\n\n // load resources synchronously\n useEffect(() => {\n if (resources) {\n Object.entries(resources).forEach(([locale, messages]) => {\n i18n.addResourceBundle(locale, defaultNS, messages, true, true);\n });\n return;\n }\n if (resource && locale) {\n i18n.addResourceBundle(locale, defaultNS, resource, true, true);\n }\n }, [locale, resource, resources]);\n\n // change language when locale changed\n useEffect(() => {\n if (locale && locale !== i18n.language) {\n i18n.changeLanguage(locale);\n }\n }, [locale]);\n\n // calculate supported languages\n useEffect(() => {\n if (Array.isArray(languagesProp)) {\n setLanguages(languagesProp);\n } else if (Array.isArray(supportedLanguages)) {\n setLanguages(\n supportedLanguages\n .map((localCode) =>\n defaultLanguages.find((l) => l.localCode === localCode),\n )\n .filter((item) => !!item),\n );\n }\n }, [supportedLanguages, languagesProp]);\n\n // if browser language is not a valid language, change language\n useEffect(() => {\n const fixLanguage = async () => {\n const lang =\n typeof convertDetectedLanguage === \"function\"\n ? convertDetectedLanguage(i18n.language)\n : parseI18nLang(i18n.language);\n await backendRef.current.loadLanguage(lang, defaultNS);\n if (lang !== i18n.language) {\n await i18n.changeLanguage(lang);\n }\n };\n fixLanguage();\n }, [i18n.language]);\n\n const beforeLanguageChangeHandler = useCallback(\n async (lang: LocaleCode) => {\n await beforeLanguageChange?.(lang);\n // load language before language changed\n await backendRef.current.loadLanguage(lang, defaultNS);\n },\n [beforeLanguageChange],\n );\n\n const afterLanguageChangeHandler = useCallback(\n async (lang: LocaleCode) => {\n afterLanguageChange?.(lang);\n },\n [afterLanguageChange],\n );\n\n const contextValue = useMemo<LocaleContextState>(() => {\n return {\n languages,\n beforeLanguageChange: beforeLanguageChangeHandler,\n afterLanguageChange: afterLanguageChangeHandler,\n };\n }, [languages, beforeLanguageChangeHandler, afterLanguageChangeHandler]);\n\n return (\n <LocaleContext.Provider value={contextValue}>\n <I18nextProvider i18n={i18n} defaultNS={defaultNS}>\n {children}\n </I18nextProvider>\n </LocaleContext.Provider>\n );\n}\n","import { useContext } from \"react\";\nimport {\n FallbackNs,\n useTranslation as _useTranslation,\n UseTranslationOptions,\n I18nContext,\n} from \"react-i18next\";\nimport { FlatNamespace, KeyPrefix } from \"i18next\";\nimport i18n from \"./i18n\";\n\ntype $Tuple<T> = readonly [T?, ...T[]];\n\n/**\n * Hook to get translation function\n * @param ns\n * @param options\n * @returns\n */\nexport function useTranslation<\n Ns extends FlatNamespace | $Tuple<FlatNamespace> | undefined = undefined,\n KPrefix extends KeyPrefix<FallbackNs<Ns>> = undefined,\n>(ns?: Ns, options?: UseTranslationOptions<KPrefix>) {\n const context = useContext(I18nContext);\n return _useTranslation(ns, { i18n: context?.i18n || i18n, ...options });\n}\n","import { useEffect, useState } from \"react\";\nimport i18n from \"./i18n\";\nimport { LocaleCode } from \"./types\";\n\n/**\n * Hooks to get current locale code\n * @returns current locale code\n */\nexport function useLocale() {\n const [localeCode, setLocaleCode] = useState<LocaleCode>(i18n.language);\n\n useEffect(() => {\n i18n.on(\"languageChanged\", setLocaleCode);\n return () => {\n i18n.off(\"languageChanged\", setLocaleCode);\n };\n }, [i18n]);\n\n return localeCode;\n}\n","import { useCallback } from \"react\";\nimport { useLocaleContext } from \"./context\";\nimport i18n from \"./i18n\";\nimport { LocaleCode } from \"./types\";\n\nexport function useChangeLocale() {\n const { beforeLanguageChange, afterLanguageChange } = useLocaleContext();\n\n const changeLocale = useCallback(\n async (locale: LocaleCode) => {\n await beforeLanguageChange(locale);\n await i18n.changeLanguage(locale);\n await afterLanguageChange(locale);\n },\n [beforeLanguageChange, afterLanguageChange, i18n],\n );\n\n return changeLocale;\n}\n"]}
package/dist/index.mjs CHANGED
@@ -1,2 +1,2 @@
1
- import {initReactI18next,I18nextProvider,I18nContext,useTranslation}from'react-i18next';export*from'react-i18next';import {createInstance}from'i18next';export{createInstance,default as i18next}from'i18next';import j from'i18next-browser-languagedetector';import {createContext,useContext,useState,useRef,useEffect,useCallback,useMemo}from'react';import {jsx}from'react/jsx-runtime';var p=(o=>(o.en="en",o.zh="zh",o.ja="ja",o.es="es",o.ko="ko",o.vi="vi",o.de="de",o.fr="fr",o.ru="ru",o.id="id",o.tr="tr",o.it="it",o.pt="pt",o.uk="uk",o.pl="pl",o.nl="nl",o))(p||{});var x=[{localCode:"en",displayName:"English"},{localCode:"zh",displayName:"\u4E2D\u6587"},{localCode:"ja",displayName:"\u65E5\u672C\u8A9E"},{localCode:"es",displayName:"Espa\xF1ol"},{localCode:"ko",displayName:"\uD55C\uAD6D\uC5B4"},{localCode:"vi",displayName:"Ti\u1EBFng Vi\u1EC7t"},{localCode:"de",displayName:"Deutsch"},{localCode:"fr",displayName:"Fran\xE7ais"},{localCode:"ru",displayName:"\u0420\u0443\u0441\u0441\u043A\u0438\u0439"},{localCode:"id",displayName:"Bahasa Indonesia"},{localCode:"tr",displayName:"T\xFCrk\xE7e"},{localCode:"it",displayName:"Italiano"},{localCode:"pt",displayName:"Portugu\xEAs"},{localCode:"uk",displayName:"\u0423\u043A\u0440\u0430\u0457\u043D\u0441\u044C\u043A\u0430"},{localCode:"pl",displayName:"Polski"},{localCode:"nl",displayName:"Nederlands"}],h="en",i="translation",H="liberfi_i18nLng",S="liberfi_i18nLng";var b={"common.cancel":"Cancel","common.confirm":"Confirm","common.reset":"Reset","common.apply":"Apply","common.ok":"OK","common.yes":"Yes","common.no":"No","common.all":"All","common.buy":"Buy","common.sell":"Sell","common.long":"Long","common.short":"Short","common.edit":"Edit","common.save":"Save","common.add":"Add","common.delete":"Delete","common.tips":"Tips","common.max":"Max","common.download":"Download","common.copy":"Copy","common.copy.failed":"Copy failed","common.copy.copied":"Copied to clipboard","common.share":"Share","common.export":"Export","common.empty":"No data","common.resolution.1s":"1s","common.resolution.15s":"15s","common.resolution.30s":"30s","common.resolution.1m":"1m","common.resolution.5m":"5m","common.resolution.15m":"15m","common.resolution.30m":"30m","common.resolution.1h":"1h","common.resolution.4h":"4h","common.resolution.12h":"12h","common.resolution.24h":"24h"};var I={"mediaTrack.title":"Media Track","mediaTrack.description":"Media Track"};var R={"tokens.copied.address":"Token address copied to clipboard","tokens.listHeader.token":"Token","tokens.listHeader.priceHistories":"Price Histories","tokens.listHeader.price":"Price","tokens.listHeader.priceChange":"{{resolution}}%","tokens.listHeader.marketCap":"Market Cap","tokens.listHeader.liquidity":"Liquidity","tokens.listHeader.volumes":"{{resolution}} Volumes","tokens.listHeader.txs":"{{resolution}} TXNS","tokens.listHeader.traders":"{{resolution}} Traders","tokens.listHeader.tokenInfo":"Token Info","tokens.listHeader.actions":"Actions","tokens.listHeader.filter":"Filter","tokens.listType.trending":"Trending","tokens.listType.new":"New","tokens.listType.stocks":"Stocks","tokens.filters.protocols.title":"Protocols","tokens.filters.protocols.selectAll":"Select All","tokens.filters.protocols.unselectAll":"Unselect All","tokens.filters.keywords.title":"Search Keywords","tokens.filters.keywords.exclude.title":"Exclude Keywords","tokens.filters.keywords.placeholder":"keyword1, keyword2...","tokens.filters.stats.min":"Min","tokens.filters.stats.max":"Max","tokens.filters.stats.audits":"Audits","tokens.filters.stats.audits.holders":"Holders Count","tokens.filters.stats.audits.top10HoldingsRatio":"Top 10 Holders %","tokens.filters.stats.audits.top100HoldingsRatio":"Top 100 Holders %","tokens.filters.stats.audits.devHoldingsRatio":"Dev Holdings %","tokens.filters.stats.metrics":"Metrics","tokens.filters.stats.metrics.volumes":"{{resolution}} Volumes ($)","tokens.filters.stats.metrics.txns":"{{resolution}} Transactions","tokens.filters.stats.metrics.liquidity":"Liquidity ($)","tokens.filters.stats.metrics.marketCap":"Market Cap ($)","tokens.filters.modal.title":"Filters","tokens.tokenInfo.holders":"Holders","tokens.tokenInfo.top10HoldingsRatio":"Top 10 Holders","tokens.tokenInfo.top100HoldingsRatio":"Top 100 Holders","tokens.tokenInfo.devHoldingsRatio":"Dev Holders"};var M={...b,...I,...R};var A=createInstance();A.use(j).use(initReactI18next).init({fallbackLng:h,ns:[i],defaultNS:i,interpolation:{escapeValue:false},detection:{lookupLocalStorage:H,lookupCookie:S,caches:["cookie","localStorage"],order:["cookie","localStorage","htmlTag","navigator"]},resources:{[h]:{[i]:M}}});var t=A;var u=class{constructor(e){this.options=e;this.cache=new Set;}cache;async fetchData(e){try{return await(await fetch(e)).json()}catch{return {}}}async loadLanguage(e,a){if(typeof this.options?.loadPath!="function")return;let n=this.options.loadPath(e,a);if(typeof n=="string"&&(n=[n]),!n.length)return;let s=n.filter(c=>!t.hasResourceBundle(e,a)||!this.cache.has(c)).map(async c=>{let m=await this.fetchData(c);t.addResourceBundle(e,a,m,true,true),this.cache.add(c);});await Promise.all(s);}};var y=createContext({languages:[],beforeLanguageChange:()=>Promise.resolve(),afterLanguageChange:()=>Promise.resolve()}),$=()=>{let r=useContext(y);if(!r)throw new Error("useLocaleContext must be used within a LocaleProvider");return r};function f(r,e){let a=r.split("/")[1];return e=e||Object.values(p),e.includes(a)?a:null}function g(r,e,a){e=e||Object.values(p),a=a||"en";let n=/^([a-z]{2})/i,l=r?.match(n);if(!l)return a;let s=l[1];return e.includes(r)?r:e.includes(s)?s:a}function Ae(r){let{path:e,locale:a,search:n}=r,l=n||(typeof window<"u"?window.location.search:""),s=f(e);return s?`${e}${l}`:(s=a||g(t.language),`/${s}${e}${l}`)}function Ke(r,e){let a=f(r,e);return a?r.replace(new RegExp(`^/${a}(?=/)`),""):r}function E({children:r,locale:e,resource:a,resources:n,backend:l,supportedLanguages:s,convertDetectedLanguage:c,languages:m,beforeLanguageChange:C,afterLanguageChange:L}){let[P,T]=useState(x),N=useRef(new u(l));useEffect(()=>{if(n){Object.entries(n).forEach(([o,d])=>{t.addResourceBundle(o,i,d,true,true);});return}a&&e&&t.addResourceBundle(e,i,a,true,true);},[e,a,n]),useEffect(()=>{e&&e!==t.language&&t.changeLanguage(e);},[e]),useEffect(()=>{Array.isArray(m)?T(m):Array.isArray(s)&&T(s.map(o=>x.find(d=>d.localCode===o)).filter(o=>!!o));},[s,m]),useEffect(()=>{(async()=>{let d=typeof c=="function"?c(t.language):g(t.language);await N.current.loadLanguage(d,i),d!==t.language&&await t.changeLanguage(d);})();},[t.language]);let w=useCallback(async o=>{await C?.(o),await N.current.loadLanguage(o,i);},[C]),v=useCallback(async o=>{L?.(o);},[L]),O=useMemo(()=>({languages:P,beforeLanguageChange:w,afterLanguageChange:v}),[P,w,v]);return jsx(y.Provider,{value:O,children:jsx(I18nextProvider,{i18n:t,defaultNS:i,children:r})})}function J(r,e){let a=useContext(I18nContext);return useTranslation(r,{i18n:a?.i18n||t,...e})}function ee(){let[r,e]=useState(t.language);return useEffect(()=>(t.on("languageChanged",e),()=>{t.off("languageChanged",e);}),[t]),r}function te(){let{beforeLanguageChange:r,afterLanguageChange:e}=$();return useCallback(async n=>{await r(n),await t.changeLanguage(n),await e(n);},[r,e,t])}export{y as LocaleContext,p as LocaleEnum,E as LocaleProvider,x as defaultLanguages,h as defaultLng,i as defaultNS,M as en,Ae as generatePath,f as getLocalePathFromPathname,t as i18n,S as i18nCookieKey,H as i18nLocalStorageKey,g as parseI18nLang,Ke as removeLangPrefix,te as useChangeLocale,ee as useLocale,$ as useLocaleContext,J as useTranslation};//# sourceMappingURL=index.mjs.map
1
+ import {initReactI18next,I18nextProvider,I18nContext,useTranslation}from'react-i18next';export*from'react-i18next';import {createInstance}from'i18next';export{createInstance,default as i18next}from'i18next';import q from'i18next-browser-languagedetector';import {createContext,useContext,useState,useRef,useEffect,useCallback,useMemo}from'react';import {jsx}from'react/jsx-runtime';var p=(o=>(o.en="en",o.zh="zh",o.ja="ja",o.es="es",o.ko="ko",o.vi="vi",o.de="de",o.fr="fr",o.ru="ru",o.id="id",o.tr="tr",o.it="it",o.pt="pt",o.uk="uk",o.pl="pl",o.nl="nl",o))(p||{});var k=[{localCode:"en",displayName:"English"},{localCode:"zh",displayName:"\u4E2D\u6587"},{localCode:"ja",displayName:"\u65E5\u672C\u8A9E"},{localCode:"es",displayName:"Espa\xF1ol"},{localCode:"ko",displayName:"\uD55C\uAD6D\uC5B4"},{localCode:"vi",displayName:"Ti\u1EBFng Vi\u1EC7t"},{localCode:"de",displayName:"Deutsch"},{localCode:"fr",displayName:"Fran\xE7ais"},{localCode:"ru",displayName:"\u0420\u0443\u0441\u0441\u043A\u0438\u0439"},{localCode:"id",displayName:"Bahasa Indonesia"},{localCode:"tr",displayName:"T\xFCrk\xE7e"},{localCode:"it",displayName:"Italiano"},{localCode:"pt",displayName:"Portugu\xEAs"},{localCode:"uk",displayName:"\u0423\u043A\u0440\u0430\u0457\u043D\u0441\u044C\u043A\u0430"},{localCode:"pl",displayName:"Polski"},{localCode:"nl",displayName:"Nederlands"}],x="en",i="translation",H="liberfi_i18nLng",S="liberfi_i18nLng";var b={"channels.forms.base.title":"Base Info","channels.forms.wallets.title":"Wallet Management","channels.forms.socials.title":"Social Medias"};var I={"common.cancel":"Cancel","common.confirm":"Confirm","common.reset":"Reset","common.apply":"Apply","common.ok":"OK","common.yes":"Yes","common.no":"No","common.all":"All","common.buy":"Buy","common.sell":"Sell","common.long":"Long","common.short":"Short","common.edit":"Edit","common.save":"Save","common.add":"Add","common.delete":"Delete","common.tips":"Tips","common.max":"Max","common.download":"Download","common.copy":"Copy","common.copy.failed":"Copy failed","common.copy.copied":"Copied to clipboard","common.share":"Share","common.export":"Export","common.empty":"No data","common.resolution.1s":"1s","common.resolution.15s":"15s","common.resolution.30s":"30s","common.resolution.1m":"1m","common.resolution.5m":"5m","common.resolution.15m":"15m","common.resolution.30m":"30m","common.resolution.1h":"1h","common.resolution.4h":"4h","common.resolution.12h":"12h","common.resolution.24h":"24h"};var R={"mediaTrack.tweets.translate.show":"Show Translation","mediaTrack.tweets.translate.hide":"Hide Translation","mediaTrack.tweets.expand":"Expand","mediaTrack.tweets.collapse":"Collapse"};var M={"scaffold.draggableModal.snapToEdge":"Drag to edge to show side panel","scaffold.draggablePanel.snapToModal":"Drag away to show floating modal","scaffold.home":"Home"};var A={"tokens.search.placeholder":"Search by token or CA...","tokens.copied.address":"Token address copied to clipboard","tokens.listHeader.token":"Token","tokens.listHeader.priceHistories":"Price Histories","tokens.listHeader.price":"Price","tokens.listHeader.priceChange":"{{resolution}}%","tokens.listHeader.marketCap":"Market Cap","tokens.listHeader.liquidity":"Liquidity","tokens.listHeader.volumes":"{{resolution}} Volumes","tokens.listHeader.txs":"{{resolution}} TXNS","tokens.listHeader.traders":"{{resolution}} Traders","tokens.listHeader.tokenInfo":"Token Info","tokens.listHeader.actions":"Actions","tokens.listHeader.filter":"Filter","tokens.listType.trending":"Trending","tokens.listType.new":"New","tokens.listType.stocks":"Stocks","tokens.filters.protocols.title":"Protocols","tokens.filters.protocols.selectAll":"Select All","tokens.filters.protocols.unselectAll":"Unselect All","tokens.filters.keywords.title":"Search Keywords","tokens.filters.keywords.exclude.title":"Exclude Keywords","tokens.filters.keywords.placeholder":"keyword1, keyword2...","tokens.filters.stats.min":"Min","tokens.filters.stats.max":"Max","tokens.filters.stats.audits":"Audits","tokens.filters.stats.audits.holders":"Holders Count","tokens.filters.stats.audits.top10HoldingsRatio":"Top 10 Holders %","tokens.filters.stats.audits.top100HoldingsRatio":"Top 100 Holders %","tokens.filters.stats.audits.devHoldingsRatio":"Dev Holdings %","tokens.filters.stats.metrics":"Metrics","tokens.filters.stats.metrics.volumes":"{{resolution}} Volumes ($)","tokens.filters.stats.metrics.txns":"{{resolution}} Transactions","tokens.filters.stats.metrics.liquidity":"Liquidity ($)","tokens.filters.stats.metrics.marketCap":"Market Cap ($)","tokens.filters.modal.title":"Filters","tokens.tokenInfo.holders":"Holders","tokens.tokenInfo.top10HoldingsRatio":"Top 10 Holders","tokens.tokenInfo.top100HoldingsRatio":"Top 100 Holders","tokens.tokenInfo.devHoldingsRatio":"Dev Holders"};var $={...I,...R,...M,...A,...b};var F=createInstance();F.use(q).use(initReactI18next).init({fallbackLng:x,ns:[i],defaultNS:i,interpolation:{escapeValue:false},detection:{lookupLocalStorage:H,lookupCookie:S,caches:["cookie","localStorage"],order:["cookie","localStorage","htmlTag","navigator"]},resources:{[x]:{[i]:$}}});var t=F;var f=class{constructor(e){this.options=e;this.cache=new Set;}cache;async fetchData(e){try{return await(await fetch(e)).json()}catch{return {}}}async loadLanguage(e,a){if(typeof this.options?.loadPath!="function")return;let n=this.options.loadPath(e,a);if(typeof n=="string"&&(n=[n]),!n.length)return;let s=n.filter(c=>!t.hasResourceBundle(e,a)||!this.cache.has(c)).map(async c=>{let m=await this.fetchData(c);t.addResourceBundle(e,a,m,true,true),this.cache.add(c);});await Promise.all(s);}};var y=createContext({languages:[],beforeLanguageChange:()=>Promise.resolve(),afterLanguageChange:()=>Promise.resolve()}),B=()=>{let r=useContext(y);if(!r)throw new Error("useLocaleContext must be used within a LocaleProvider");return r};function u(r,e){let a=r.split("/")[1];return e=e||Object.values(p),e.includes(a)?a:null}function g(r,e,a){e=e||Object.values(p),a=a||"en";let n=/^([a-z]{2})/i,l=r?.match(n);if(!l)return a;let s=l[1];return e.includes(r)?r:e.includes(s)?s:a}function De(r){let{path:e,locale:a,search:n}=r,l=n||(typeof window<"u"?window.location.search:""),s=u(e);return s?`${e}${l}`:(s=a||g(t.language),`/${s}${e}${l}`)}function qe(r,e){let a=u(r,e);return a?r.replace(new RegExp(`^/${a}(?=/)`),""):r}function Y({children:r,locale:e,resource:a,resources:n,backend:l,supportedLanguages:s,convertDetectedLanguage:c,languages:m,beforeLanguageChange:C,afterLanguageChange:L}){let[P,w]=useState(k),T=useRef(new f(l));useEffect(()=>{if(n){Object.entries(n).forEach(([o,d])=>{t.addResourceBundle(o,i,d,true,true);});return}a&&e&&t.addResourceBundle(e,i,a,true,true);},[e,a,n]),useEffect(()=>{e&&e!==t.language&&t.changeLanguage(e);},[e]),useEffect(()=>{Array.isArray(m)?w(m):Array.isArray(s)&&w(s.map(o=>k.find(d=>d.localCode===o)).filter(o=>!!o));},[s,m]),useEffect(()=>{(async()=>{let d=typeof c=="function"?c(t.language):g(t.language);await T.current.loadLanguage(d,i),d!==t.language&&await t.changeLanguage(d);})();},[t.language]);let N=useCallback(async o=>{await C?.(o),await T.current.loadLanguage(o,i);},[C]),v=useCallback(async o=>{L?.(o);},[L]),D=useMemo(()=>({languages:P,beforeLanguageChange:N,afterLanguageChange:v}),[P,N,v]);return jsx(y.Provider,{value:D,children:jsx(I18nextProvider,{i18n:t,defaultNS:i,children:r})})}function Z(r,e){let a=useContext(I18nContext);return useTranslation(r,{i18n:a?.i18n||t,...e})}function te(){let[r,e]=useState(t.language);return useEffect(()=>(t.on("languageChanged",e),()=>{t.off("languageChanged",e);}),[t]),r}function re(){let{beforeLanguageChange:r,afterLanguageChange:e}=B();return useCallback(async n=>{await r(n),await t.changeLanguage(n),await e(n);},[r,e,t])}export{y as LocaleContext,p as LocaleEnum,Y as LocaleProvider,k as defaultLanguages,x as defaultLng,i as defaultNS,$ as en,De as generatePath,u as getLocalePathFromPathname,t as i18n,S as i18nCookieKey,H as i18nLocalStorageKey,g as parseI18nLang,qe as removeLangPrefix,re as useChangeLocale,te as useLocale,B as useLocaleContext,Z as useTranslation};//# sourceMappingURL=index.mjs.map
2
2
  //# sourceMappingURL=index.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/types.ts","../src/constant.ts","../src/locale/module/common.ts","../src/locale/module/mediaTrack.ts","../src/locale/module/tokens.ts","../src/locale/en.ts","../src/i18n.ts","../src/backend.ts","../src/context.ts","../src/utils/getLocalePathFromPathname.ts","../src/utils/parseI18nLang.ts","../src/utils/generatePath.ts","../src/utils/removeLangPrefix.ts","../src/provider.tsx","../src/useTranslation.ts","../src/useLocale.ts","../src/useChangeLocale.ts"],"names":["LocaleEnum","defaultLanguages","defaultLng","defaultNS","i18nLocalStorageKey","i18nCookieKey","common","mediaTrack","tokens","en","i18n","createInstance","LanguageDetector","initReactI18next","i18n_default","Backend","options","url","lang","ns","paths","promises","path","data","LocaleContext","createContext","useLocaleContext","context","useContext","getLocalePathFromPathname","pathname","localeCodes","locale","parseI18nLang","defaultLang","regex","match","matchLang","generatePath","params","search","searchUrl","localePath","removeLangPrefix","LocaleProvider","children","resource","resources","backend","supportedLanguages","convertDetectedLanguage","languagesProp","beforeLanguageChange","afterLanguageChange","languages","setLanguages","useState","backendRef","useRef","useEffect","messages","localCode","l","item","beforeLanguageChangeHandler","useCallback","afterLanguageChangeHandler","contextValue","useMemo","jsx","I18nextProvider","useTranslation","I18nContext","_useTranslation","useLocale","localeCode","setLocaleCode","useChangeLocale"],"mappings":"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","file":"index.mjs","sourcesContent":["// import the original type declarations\nimport \"i18next\";\n// import all namespaces (for the default language, only)\nimport { en } from \"./locale/en\";\n\nexport enum LocaleEnum {\n /** English */\n en = \"en\",\n /** Chinese */\n zh = \"zh\",\n /** Japanese */\n ja = \"ja\",\n /** Spanish */\n es = \"es\",\n /** Korean */\n ko = \"ko\",\n /** Vietnamese */\n vi = \"vi\",\n /** German */\n de = \"de\",\n /** French */\n fr = \"fr\",\n /** Russian */\n ru = \"ru\",\n /** Indonesian */\n id = \"id\",\n /** Turkish */\n tr = \"tr\",\n /** Italian */\n it = \"it\",\n /** Portuguese */\n pt = \"pt\",\n /** Ukrainian */\n uk = \"uk\",\n /** Polish */\n pl = \"pl\",\n /** Dutch */\n nl = \"nl\",\n}\n\nexport type LocaleCode = keyof typeof LocaleEnum | (string & {});\n\nexport type Language = {\n localCode: LocaleCode;\n displayName: string;\n};\n\nexport type ExtendLocaleMessages = Record<`extend.${string}`, string>;\n\nexport type LocaleMessages = typeof en & ExtendLocaleMessages;\n\n// eslint-disable-next-line @typescript-eslint/no-empty-object-type\nexport type Resources<T extends {} = {}> = {\n [key in LocaleCode]?: Partial<LocaleMessages & T>;\n};\n\n// https://www.i18next.com/overview/typescript#create-a-declaration-file\n// Enhance the input parameter intelliSense for the t function.\ndeclare module \"i18next\" {\n // Extend CustomTypeOptions\n interface CustomTypeOptions {\n // custom namespace type, if you changed it\n defaultNS: \"translation\";\n // custom resources type\n resources: {\n translation: LocaleMessages;\n };\n }\n}\n","import { Language, LocaleEnum } from \"./types\";\n\nexport const defaultLanguages: Language[] = [\n { localCode: LocaleEnum.en, displayName: \"English\" }, // English\n { localCode: LocaleEnum.zh, displayName: \"中文\" }, // Chinese\n { localCode: LocaleEnum.ja, displayName: \"日本語\" }, // Japanese\n { localCode: LocaleEnum.es, displayName: \"Español\" }, // Spanish\n { localCode: LocaleEnum.ko, displayName: \"한국어\" }, // Korean\n { localCode: LocaleEnum.vi, displayName: \"Tiếng Việt\" }, // Vietnamese\n { localCode: LocaleEnum.de, displayName: \"Deutsch\" }, // German\n { localCode: LocaleEnum.fr, displayName: \"Français\" }, // French\n { localCode: LocaleEnum.ru, displayName: \"Русский\" }, // Russian\n { localCode: LocaleEnum.id, displayName: \"Bahasa Indonesia\" }, // Indonesian\n { localCode: LocaleEnum.tr, displayName: \"Türkçe\" }, // Turkish\n { localCode: LocaleEnum.it, displayName: \"Italiano\" }, // Italian\n { localCode: LocaleEnum.pt, displayName: \"Português\" }, // Portuguese\n { localCode: LocaleEnum.uk, displayName: \"Українська\" }, // Ukrainian\n { localCode: LocaleEnum.pl, displayName: \"Polski\" }, // Polish\n { localCode: LocaleEnum.nl, displayName: \"Nederlands\" }, // Dutch\n];\n\nexport const defaultLng = LocaleEnum.en;\n\nexport const defaultNS = \"translation\";\n\nexport const i18nLocalStorageKey = \"liberfi_i18nLng\";\n\nexport const i18nCookieKey = \"liberfi_i18nLng\";\n","export const common = {\n \"common.cancel\": \"Cancel\",\n \"common.confirm\": \"Confirm\",\n \"common.reset\": \"Reset\",\n \"common.apply\": \"Apply\",\n \"common.ok\": \"OK\",\n \"common.yes\": \"Yes\",\n \"common.no\": \"No\",\n \"common.all\": \"All\",\n \"common.buy\": \"Buy\",\n \"common.sell\": \"Sell\",\n \"common.long\": \"Long\",\n \"common.short\": \"Short\",\n \"common.edit\": \"Edit\",\n \"common.save\": \"Save\",\n \"common.add\": \"Add\",\n \"common.delete\": \"Delete\",\n \"common.tips\": \"Tips\",\n \"common.max\": \"Max\",\n \"common.download\": \"Download\",\n \"common.copy\": \"Copy\",\n \"common.copy.failed\": \"Copy failed\",\n \"common.copy.copied\": \"Copied to clipboard\",\n \"common.share\": \"Share\",\n \"common.export\": \"Export\",\n \"common.empty\": \"No data\",\n \"common.resolution.1s\": \"1s\",\n \"common.resolution.15s\": \"15s\",\n \"common.resolution.30s\": \"30s\",\n \"common.resolution.1m\": \"1m\",\n \"common.resolution.5m\": \"5m\",\n \"common.resolution.15m\": \"15m\",\n \"common.resolution.30m\": \"30m\",\n \"common.resolution.1h\": \"1h\",\n \"common.resolution.4h\": \"4h\",\n \"common.resolution.12h\": \"12h\",\n \"common.resolution.24h\": \"24h\",\n};\n","export const mediaTrack = {\n \"mediaTrack.title\": \"Media Track\",\n \"mediaTrack.description\": \"Media Track\",\n};\n","export const tokens = {\n \"tokens.copied.address\": \"Token address copied to clipboard\",\n \"tokens.listHeader.token\": \"Token\",\n \"tokens.listHeader.priceHistories\": \"Price Histories\",\n \"tokens.listHeader.price\": \"Price\",\n \"tokens.listHeader.priceChange\": \"{{resolution}}%\",\n \"tokens.listHeader.marketCap\": \"Market Cap\",\n \"tokens.listHeader.liquidity\": \"Liquidity\",\n \"tokens.listHeader.volumes\": \"{{resolution}} Volumes\",\n \"tokens.listHeader.txs\": \"{{resolution}} TXNS\",\n \"tokens.listHeader.traders\": \"{{resolution}} Traders\",\n \"tokens.listHeader.tokenInfo\": \"Token Info\",\n \"tokens.listHeader.actions\": \"Actions\",\n \"tokens.listHeader.filter\": \"Filter\",\n \"tokens.listType.trending\": \"Trending\",\n \"tokens.listType.new\": \"New\",\n \"tokens.listType.stocks\": \"Stocks\",\n \"tokens.filters.protocols.title\": \"Protocols\",\n \"tokens.filters.protocols.selectAll\": \"Select All\",\n \"tokens.filters.protocols.unselectAll\": \"Unselect All\",\n \"tokens.filters.keywords.title\": \"Search Keywords\",\n \"tokens.filters.keywords.exclude.title\": \"Exclude Keywords\",\n \"tokens.filters.keywords.placeholder\": \"keyword1, keyword2...\",\n \"tokens.filters.stats.min\": \"Min\",\n \"tokens.filters.stats.max\": \"Max\",\n \"tokens.filters.stats.audits\": \"Audits\",\n \"tokens.filters.stats.audits.holders\": \"Holders Count\",\n \"tokens.filters.stats.audits.top10HoldingsRatio\": \"Top 10 Holders %\",\n \"tokens.filters.stats.audits.top100HoldingsRatio\": \"Top 100 Holders %\",\n \"tokens.filters.stats.audits.devHoldingsRatio\": \"Dev Holdings %\",\n \"tokens.filters.stats.metrics\": \"Metrics\",\n \"tokens.filters.stats.metrics.volumes\": \"{{resolution}} Volumes ($)\",\n \"tokens.filters.stats.metrics.txns\": \"{{resolution}} Transactions\",\n \"tokens.filters.stats.metrics.liquidity\": \"Liquidity ($)\",\n \"tokens.filters.stats.metrics.marketCap\": \"Market Cap ($)\",\n \"tokens.filters.modal.title\": \"Filters\",\n \"tokens.tokenInfo.holders\": \"Holders\",\n \"tokens.tokenInfo.top10HoldingsRatio\": \"Top 10 Holders\",\n \"tokens.tokenInfo.top100HoldingsRatio\": \"Top 100 Holders\",\n \"tokens.tokenInfo.devHoldingsRatio\": \"Dev Holders\",\n};\n","import { common } from \"./module/common\";\nimport { mediaTrack } from \"./module/mediaTrack\";\nimport { tokens } from \"./module/tokens\";\n\nexport const en = {\n ...common,\n ...mediaTrack,\n ...tokens,\n};\n","import { initReactI18next } from \"react-i18next\";\nimport { i18n as I18nInstance, createInstance } from \"i18next\";\nimport LanguageDetector from \"i18next-browser-languagedetector\";\nimport {\n defaultLng,\n defaultNS,\n i18nCookieKey,\n i18nLocalStorageKey,\n} from \"./constant\";\nimport { en } from \"./locale/en\";\n\nconst i18n: I18nInstance = createInstance();\n\ni18n\n .use(LanguageDetector)\n .use(initReactI18next) // bind react-i18next to the instance\n .init({\n fallbackLng: defaultLng,\n ns: [defaultNS],\n defaultNS,\n interpolation: {\n escapeValue: false, // not needed for react!!\n },\n detection: {\n lookupLocalStorage: i18nLocalStorageKey,\n lookupCookie: i18nCookieKey,\n caches: [\"cookie\", \"localStorage\"],\n order: [\"cookie\", \"localStorage\", \"htmlTag\", \"navigator\"],\n },\n resources: {\n [defaultLng]: { [defaultNS]: en },\n },\n });\n\nexport default i18n;\n","import i18n from \"./i18n\";\nimport { LocaleCode } from \"./types\";\n\nexport type BackendOptions = {\n /**\n * Load url for a given language and namespace\n * @param lang language code\n * @param ns namespace\n * @returns url or urls\n */\n loadPath: (lang: LocaleCode, ns: string) => string | string[];\n};\n\n/**\n * Async resources loading through HTTP, resources must be placed in the site's public directory\n */\nexport class Backend {\n private readonly cache: Set<string>;\n\n constructor(private readonly options?: BackendOptions) {\n this.cache = new Set();\n }\n\n async fetchData(url: string): Promise<Record<string, string>> {\n try {\n const res = await fetch(url);\n return await res.json();\n } catch (error) {\n console.warn(\n `Failed to fetch locale resource bundle from ${url}:`,\n error,\n );\n return {};\n }\n }\n\n async loadLanguage(lang: LocaleCode, ns: string) {\n if (typeof this.options?.loadPath !== \"function\") return;\n\n // get load url paths\n let paths = this.options.loadPath(lang, ns);\n if (typeof paths === \"string\") paths = [paths];\n if (!paths.length) return;\n\n // filter out the paths that have already been loaded\n const urls = paths.filter((path) => {\n const loaded = i18n.hasResourceBundle(lang, ns);\n return !loaded || !this.cache.has(path);\n });\n\n const promises = urls.map(async (url) => {\n const data = await this.fetchData(url);\n i18n.addResourceBundle(lang, ns, data, true, true);\n this.cache.add(url);\n });\n await Promise.all(promises);\n }\n}\n","import { createContext, useContext } from \"react\";\nimport { Language, LocaleCode } from \"./types\";\n\nexport type LocaleContextState = {\n /**\n * Supported languages\n */\n languages: Language[];\n\n /**\n * Called before language change\n * @param lang - new language code\n * @returns\n */\n beforeLanguageChange: (lang: LocaleCode) => Promise<void>;\n /**\n * Called after language changed\n * @param lang - new language code\n * @returns\n */\n afterLanguageChange: (lang: LocaleCode) => Promise<void>;\n};\n\nexport const LocaleContext = createContext<LocaleContextState>({\n languages: [],\n beforeLanguageChange: () => Promise.resolve(),\n afterLanguageChange: () => Promise.resolve(),\n});\n\nexport const useLocaleContext = () => {\n const context = useContext(LocaleContext);\n if (!context) {\n throw new Error(\"useLocaleContext must be used within a LocaleProvider\");\n }\n return context;\n};\n","import { LocaleEnum } from \"../types\";\n\n/**\n * get locale path from pathname\n * @param pathname - pathname to get locale path\n * @param localeCodes - locale codes to check\n * @example\n * getLocalePathFromPathname('/en/perp/PERP_ETH_USDC') => 'en'\n * getLocalePathFromPathname('/perp/PERP_ETH_USDC') => null\n * getLocalePathFromPathname('/en/markets') => 'en'\n * getLocalePathFromPathname('/markets') => null\n */\nexport function getLocalePathFromPathname(\n pathname: string,\n localeCodes?: string[],\n) {\n const locale = pathname.split(\"/\")[1];\n localeCodes = localeCodes || Object.values(LocaleEnum);\n return localeCodes.includes(locale as LocaleEnum) ? locale : null;\n}\n","import { type LocaleCode, LocaleEnum } from \"../types\";\n\n/**\n * transform browser language to i18n locale codes\n * @param lang - browser language\n * @param localeCodes - locale codes to check\n * @param defaultLang - default locale code\n * @example\n * parseI18nLang('en-US') => 'en'\n * parseI18nLang('zh-CN') => 'zh'\n * parseI18nLang('zh-TW') => 'zh'\n * parseI18nLang('ja') => 'ja'\n * */\nexport function parseI18nLang(\n lang: string,\n localeCodes?: LocaleCode[],\n defaultLang?: LocaleCode,\n) {\n localeCodes = localeCodes || Object.values(LocaleEnum);\n defaultLang = defaultLang || LocaleEnum.en;\n\n const regex = /^([a-z]{2})/i;\n const match = lang?.match(regex);\n\n if (!match) {\n return defaultLang;\n }\n\n const matchLang = match[1];\n\n if (localeCodes.includes(lang)) {\n return lang;\n }\n\n if (localeCodes.includes(matchLang)) {\n return matchLang;\n }\n\n return defaultLang;\n}\n","import i18n from \"../i18n\";\nimport { getLocalePathFromPathname } from \"./getLocalePathFromPathname\";\nimport { parseI18nLang } from \"./parseI18nLang\";\n\n/**\n * Generate a localized path with proper locale prefix and search parameters\n *\n * This function ensures that the returned path includes the appropriate locale prefix.\n * If the path already contains a valid locale prefix, it returns the path as-is.\n * Otherwise, it prepends the specified locale or falls back to the current i18n language.\n *\n * @param params - Configuration object for path generation\n * @param params.path - The base pathname (e.g., '/markets', '/perp/PERP_ETH_USDC')\n * @param params.locale - Optional locale code to use as prefix. If not provided, uses i18n.language\n * @param params.search - Optional search query string. If not provided, uses window.location.search\n *\n * @returns A complete URL path with locale prefix and search parameters\n *\n * @example\n * generatePath({ path: '/markets' }) => '/en/markets?tab=spot'\n * generatePath({ path: '/en/markets', search: '?tab=futures' }) => '/en/markets?tab=futures'\n * generatePath({ path: '/perp/PERP_ETH_USDC', locale: 'zh' }) => '/zh/perp/PERP_ETH_USDC'\n * generatePath({ path: '/en/perp/PERP_ETH_USDC' }) => '/en/perp/PERP_ETH_USDC'\n */\nexport function generatePath(params: {\n path: string;\n locale?: string;\n search?: string;\n}) {\n const { path, locale, search } = params;\n const searchUrl =\n search || (typeof window !== \"undefined\" ? window.location.search : \"\");\n\n let localePath = getLocalePathFromPathname(path);\n\n // If path already contains a valid locale prefix, return it unchanged\n if (localePath) {\n return `${path}${searchUrl}`;\n }\n\n // Use provided locale or fall back to current i18n language\n localePath = locale || parseI18nLang(i18n.language);\n\n // Prepend locale prefix to path\n return `/${localePath}${path}${searchUrl}`;\n}\n","import { getLocalePathFromPathname } from \"./getLocalePathFromPathname\";\n\n/**\n * remove lang prefix from pathname\n * @param pathname - pathname to remove lang prefix\n * @param localeCodes - locale codes to check\n * @example\n * removeLangPrefix('/en/perp/PERP_ETH_USDC') => '/perp/PERP_ETH_USDC'\n * removeLangPrefix('/en/markets') => '/markets'\n * removeLangPrefix('/perp/PERP_ETH_USDC') => '/perp/PERP_ETH_USDC'\n * removeLangPrefix('/markets') => '/markets'\n */\nexport function removeLangPrefix(pathname: string, localeCodes?: string[]) {\n const localePath = getLocalePathFromPathname(pathname, localeCodes);\n\n return localePath\n ? pathname.replace(new RegExp(`^/${localePath}(?=/)`), \"\")\n : pathname;\n}\n","import {\n PropsWithChildren,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport { I18nextProvider } from \"react-i18next\";\nimport { Backend, BackendOptions } from \"./backend\";\nimport { defaultLanguages, defaultNS } from \"./constant\";\nimport { LocaleContext, LocaleContextState } from \"./context\";\nimport i18n from \"./i18n\";\nimport { LocaleCode, Resources, Language } from \"./types\";\nimport { parseI18nLang } from \"./utils\";\n\nexport type LocaleProviderProps = PropsWithChildren<\n {\n /** current locale */\n locale?: LocaleCode;\n /** current locale's resource */\n resource?: Record<string, string>;\n /** all synchronously loaded resources */\n resources?: Resources;\n /** supported languages, must be a subset of {@link defaultLanguages}, used when {@link languages} is not provided */\n supportedLanguages?: LocaleCode[];\n /** optional conversion function to modify the detected language code */\n convertDetectedLanguage?: (lang: string) => LocaleCode;\n /** options to load resources asynchronously */\n backend?: BackendOptions;\n } & Partial<LocaleContextState>\n>;\n\nexport function LocaleProvider({\n children,\n locale,\n resource,\n resources,\n backend,\n supportedLanguages,\n convertDetectedLanguage,\n languages: languagesProp,\n beforeLanguageChange,\n afterLanguageChange,\n}: LocaleProviderProps) {\n // calculated supported languages\n const [languages, setLanguages] = useState<Language[]>(defaultLanguages);\n\n // backend instance to load resources asynchronously\n const backendRef = useRef(new Backend(backend!));\n\n // load resources synchronously\n useEffect(() => {\n if (resources) {\n Object.entries(resources).forEach(([locale, messages]) => {\n i18n.addResourceBundle(locale, defaultNS, messages, true, true);\n });\n return;\n }\n if (resource && locale) {\n i18n.addResourceBundle(locale, defaultNS, resource, true, true);\n }\n }, [locale, resource, resources]);\n\n // change language when locale changed\n useEffect(() => {\n if (locale && locale !== i18n.language) {\n i18n.changeLanguage(locale);\n }\n }, [locale]);\n\n // calculate supported languages\n useEffect(() => {\n if (Array.isArray(languagesProp)) {\n setLanguages(languagesProp);\n } else if (Array.isArray(supportedLanguages)) {\n setLanguages(\n supportedLanguages\n .map((localCode) =>\n defaultLanguages.find((l) => l.localCode === localCode),\n )\n .filter((item) => !!item),\n );\n }\n }, [supportedLanguages, languagesProp]);\n\n // if browser language is not a valid language, change language\n useEffect(() => {\n const fixLanguage = async () => {\n const lang =\n typeof convertDetectedLanguage === \"function\"\n ? convertDetectedLanguage(i18n.language)\n : parseI18nLang(i18n.language);\n await backendRef.current.loadLanguage(lang, defaultNS);\n if (lang !== i18n.language) {\n await i18n.changeLanguage(lang);\n }\n };\n fixLanguage();\n }, [i18n.language]);\n\n const beforeLanguageChangeHandler = useCallback(\n async (lang: LocaleCode) => {\n await beforeLanguageChange?.(lang);\n // load language before language changed\n await backendRef.current.loadLanguage(lang, defaultNS);\n },\n [beforeLanguageChange],\n );\n\n const afterLanguageChangeHandler = useCallback(\n async (lang: LocaleCode) => {\n afterLanguageChange?.(lang);\n },\n [afterLanguageChange],\n );\n\n const contextValue = useMemo<LocaleContextState>(() => {\n return {\n languages,\n beforeLanguageChange: beforeLanguageChangeHandler,\n afterLanguageChange: afterLanguageChangeHandler,\n };\n }, [languages, beforeLanguageChangeHandler, afterLanguageChangeHandler]);\n\n return (\n <LocaleContext.Provider value={contextValue}>\n <I18nextProvider i18n={i18n} defaultNS={defaultNS}>\n {children}\n </I18nextProvider>\n </LocaleContext.Provider>\n );\n}\n","import { useContext } from \"react\";\nimport {\n FallbackNs,\n useTranslation as _useTranslation,\n UseTranslationOptions,\n I18nContext,\n} from \"react-i18next\";\nimport { FlatNamespace, KeyPrefix } from \"i18next\";\nimport i18n from \"./i18n\";\n\ntype $Tuple<T> = readonly [T?, ...T[]];\n\n/**\n * Hook to get translation function\n * @param ns\n * @param options\n * @returns\n */\nexport function useTranslation<\n Ns extends FlatNamespace | $Tuple<FlatNamespace> | undefined = undefined,\n KPrefix extends KeyPrefix<FallbackNs<Ns>> = undefined,\n>(ns?: Ns, options?: UseTranslationOptions<KPrefix>) {\n const context = useContext(I18nContext);\n return _useTranslation(ns, { i18n: context?.i18n || i18n, ...options });\n}\n","import { useEffect, useState } from \"react\";\nimport i18n from \"./i18n\";\nimport { LocaleCode } from \"./types\";\n\n/**\n * Hooks to get current locale code\n * @returns current locale code\n */\nexport function useLocale() {\n const [localeCode, setLocaleCode] = useState<LocaleCode>(i18n.language);\n\n useEffect(() => {\n i18n.on(\"languageChanged\", setLocaleCode);\n return () => {\n i18n.off(\"languageChanged\", setLocaleCode);\n };\n }, [i18n]);\n\n return localeCode;\n}\n","import { useCallback } from \"react\";\nimport { useLocaleContext } from \"./context\";\nimport i18n from \"./i18n\";\nimport { LocaleCode } from \"./types\";\n\nexport function useChangeLocale() {\n const { beforeLanguageChange, afterLanguageChange } = useLocaleContext();\n\n const changeLocale = useCallback(\n async (locale: LocaleCode) => {\n await beforeLanguageChange(locale);\n await i18n.changeLanguage(locale);\n await afterLanguageChange(locale);\n },\n [beforeLanguageChange, afterLanguageChange, i18n],\n );\n\n return changeLocale;\n}\n"]}
1
+ {"version":3,"sources":["../src/types.ts","../src/constant.ts","../src/locale/module/channels.ts","../src/locale/module/common.ts","../src/locale/module/mediaTrack.ts","../src/locale/module/scaffold.ts","../src/locale/module/tokens.ts","../src/locale/en.ts","../src/i18n.ts","../src/backend.ts","../src/context.ts","../src/utils/getLocalePathFromPathname.ts","../src/utils/parseI18nLang.ts","../src/utils/generatePath.ts","../src/utils/removeLangPrefix.ts","../src/provider.tsx","../src/useTranslation.ts","../src/useLocale.ts","../src/useChangeLocale.ts"],"names":["LocaleEnum","defaultLanguages","defaultLng","defaultNS","i18nLocalStorageKey","i18nCookieKey","channels","common","mediaTrack","scaffold","tokens","en","i18n","createInstance","LanguageDetector","initReactI18next","i18n_default","Backend","options","url","lang","ns","paths","promises","path","data","LocaleContext","createContext","useLocaleContext","context","useContext","getLocalePathFromPathname","pathname","localeCodes","locale","parseI18nLang","defaultLang","regex","match","matchLang","generatePath","params","search","searchUrl","localePath","removeLangPrefix","LocaleProvider","children","resource","resources","backend","supportedLanguages","convertDetectedLanguage","languagesProp","beforeLanguageChange","afterLanguageChange","languages","setLanguages","useState","backendRef","useRef","useEffect","messages","localCode","l","item","beforeLanguageChangeHandler","useCallback","afterLanguageChangeHandler","contextValue","useMemo","jsx","I18nextProvider","useTranslation","I18nContext","_useTranslation","useLocale","localeCode","setLocaleCode","useChangeLocale"],"mappings":"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","file":"index.mjs","sourcesContent":["// import the original type declarations\nimport \"i18next\";\n// import all namespaces (for the default language, only)\nimport { en } from \"./locale/en\";\n\nexport enum LocaleEnum {\n /** English */\n en = \"en\",\n /** Chinese */\n zh = \"zh\",\n /** Japanese */\n ja = \"ja\",\n /** Spanish */\n es = \"es\",\n /** Korean */\n ko = \"ko\",\n /** Vietnamese */\n vi = \"vi\",\n /** German */\n de = \"de\",\n /** French */\n fr = \"fr\",\n /** Russian */\n ru = \"ru\",\n /** Indonesian */\n id = \"id\",\n /** Turkish */\n tr = \"tr\",\n /** Italian */\n it = \"it\",\n /** Portuguese */\n pt = \"pt\",\n /** Ukrainian */\n uk = \"uk\",\n /** Polish */\n pl = \"pl\",\n /** Dutch */\n nl = \"nl\",\n}\n\nexport type LocaleCode = keyof typeof LocaleEnum | (string & {});\n\nexport type Language = {\n localCode: LocaleCode;\n displayName: string;\n};\n\nexport type ExtendLocaleMessages = Record<`extend.${string}`, string>;\n\nexport type LocaleMessages = typeof en & ExtendLocaleMessages;\n\n// eslint-disable-next-line @typescript-eslint/no-empty-object-type\nexport type Resources<T extends {} = {}> = {\n [key in LocaleCode]?: Partial<LocaleMessages & T>;\n};\n\n// https://www.i18next.com/overview/typescript#create-a-declaration-file\n// Enhance the input parameter intelliSense for the t function.\ndeclare module \"i18next\" {\n // Extend CustomTypeOptions\n interface CustomTypeOptions {\n // custom namespace type, if you changed it\n defaultNS: \"translation\";\n // custom resources type\n resources: {\n translation: LocaleMessages;\n };\n }\n}\n","import { Language, LocaleEnum } from \"./types\";\n\nexport const defaultLanguages: Language[] = [\n { localCode: LocaleEnum.en, displayName: \"English\" }, // English\n { localCode: LocaleEnum.zh, displayName: \"中文\" }, // Chinese\n { localCode: LocaleEnum.ja, displayName: \"日本語\" }, // Japanese\n { localCode: LocaleEnum.es, displayName: \"Español\" }, // Spanish\n { localCode: LocaleEnum.ko, displayName: \"한국어\" }, // Korean\n { localCode: LocaleEnum.vi, displayName: \"Tiếng Việt\" }, // Vietnamese\n { localCode: LocaleEnum.de, displayName: \"Deutsch\" }, // German\n { localCode: LocaleEnum.fr, displayName: \"Français\" }, // French\n { localCode: LocaleEnum.ru, displayName: \"Русский\" }, // Russian\n { localCode: LocaleEnum.id, displayName: \"Bahasa Indonesia\" }, // Indonesian\n { localCode: LocaleEnum.tr, displayName: \"Türkçe\" }, // Turkish\n { localCode: LocaleEnum.it, displayName: \"Italiano\" }, // Italian\n { localCode: LocaleEnum.pt, displayName: \"Português\" }, // Portuguese\n { localCode: LocaleEnum.uk, displayName: \"Українська\" }, // Ukrainian\n { localCode: LocaleEnum.pl, displayName: \"Polski\" }, // Polish\n { localCode: LocaleEnum.nl, displayName: \"Nederlands\" }, // Dutch\n];\n\nexport const defaultLng = LocaleEnum.en;\n\nexport const defaultNS = \"translation\";\n\nexport const i18nLocalStorageKey = \"liberfi_i18nLng\";\n\nexport const i18nCookieKey = \"liberfi_i18nLng\";\n","export const channels = {\n \"channels.forms.base.title\": \"Base Info\",\n \"channels.forms.wallets.title\": \"Wallet Management\",\n \"channels.forms.socials.title\": \"Social Medias\",\n};\n","export const common = {\n \"common.cancel\": \"Cancel\",\n \"common.confirm\": \"Confirm\",\n \"common.reset\": \"Reset\",\n \"common.apply\": \"Apply\",\n \"common.ok\": \"OK\",\n \"common.yes\": \"Yes\",\n \"common.no\": \"No\",\n \"common.all\": \"All\",\n \"common.buy\": \"Buy\",\n \"common.sell\": \"Sell\",\n \"common.long\": \"Long\",\n \"common.short\": \"Short\",\n \"common.edit\": \"Edit\",\n \"common.save\": \"Save\",\n \"common.add\": \"Add\",\n \"common.delete\": \"Delete\",\n \"common.tips\": \"Tips\",\n \"common.max\": \"Max\",\n \"common.download\": \"Download\",\n \"common.copy\": \"Copy\",\n \"common.copy.failed\": \"Copy failed\",\n \"common.copy.copied\": \"Copied to clipboard\",\n \"common.share\": \"Share\",\n \"common.export\": \"Export\",\n \"common.empty\": \"No data\",\n \"common.resolution.1s\": \"1s\",\n \"common.resolution.15s\": \"15s\",\n \"common.resolution.30s\": \"30s\",\n \"common.resolution.1m\": \"1m\",\n \"common.resolution.5m\": \"5m\",\n \"common.resolution.15m\": \"15m\",\n \"common.resolution.30m\": \"30m\",\n \"common.resolution.1h\": \"1h\",\n \"common.resolution.4h\": \"4h\",\n \"common.resolution.12h\": \"12h\",\n \"common.resolution.24h\": \"24h\",\n};\n","export const mediaTrack = {\n \"mediaTrack.tweets.translate.show\": \"Show Translation\",\n \"mediaTrack.tweets.translate.hide\": \"Hide Translation\",\n \"mediaTrack.tweets.expand\": \"Expand\",\n \"mediaTrack.tweets.collapse\": \"Collapse\",\n};\n","export const scaffold = {\n \"scaffold.draggableModal.snapToEdge\": \"Drag to edge to show side panel\",\n \"scaffold.draggablePanel.snapToModal\": \"Drag away to show floating modal\",\n \"scaffold.home\": \"Home\",\n};\n","export const tokens = {\n \"tokens.search.placeholder\": \"Search by token or CA...\",\n \"tokens.copied.address\": \"Token address copied to clipboard\",\n \"tokens.listHeader.token\": \"Token\",\n \"tokens.listHeader.priceHistories\": \"Price Histories\",\n \"tokens.listHeader.price\": \"Price\",\n \"tokens.listHeader.priceChange\": \"{{resolution}}%\",\n \"tokens.listHeader.marketCap\": \"Market Cap\",\n \"tokens.listHeader.liquidity\": \"Liquidity\",\n \"tokens.listHeader.volumes\": \"{{resolution}} Volumes\",\n \"tokens.listHeader.txs\": \"{{resolution}} TXNS\",\n \"tokens.listHeader.traders\": \"{{resolution}} Traders\",\n \"tokens.listHeader.tokenInfo\": \"Token Info\",\n \"tokens.listHeader.actions\": \"Actions\",\n \"tokens.listHeader.filter\": \"Filter\",\n \"tokens.listType.trending\": \"Trending\",\n \"tokens.listType.new\": \"New\",\n \"tokens.listType.stocks\": \"Stocks\",\n \"tokens.filters.protocols.title\": \"Protocols\",\n \"tokens.filters.protocols.selectAll\": \"Select All\",\n \"tokens.filters.protocols.unselectAll\": \"Unselect All\",\n \"tokens.filters.keywords.title\": \"Search Keywords\",\n \"tokens.filters.keywords.exclude.title\": \"Exclude Keywords\",\n \"tokens.filters.keywords.placeholder\": \"keyword1, keyword2...\",\n \"tokens.filters.stats.min\": \"Min\",\n \"tokens.filters.stats.max\": \"Max\",\n \"tokens.filters.stats.audits\": \"Audits\",\n \"tokens.filters.stats.audits.holders\": \"Holders Count\",\n \"tokens.filters.stats.audits.top10HoldingsRatio\": \"Top 10 Holders %\",\n \"tokens.filters.stats.audits.top100HoldingsRatio\": \"Top 100 Holders %\",\n \"tokens.filters.stats.audits.devHoldingsRatio\": \"Dev Holdings %\",\n \"tokens.filters.stats.metrics\": \"Metrics\",\n \"tokens.filters.stats.metrics.volumes\": \"{{resolution}} Volumes ($)\",\n \"tokens.filters.stats.metrics.txns\": \"{{resolution}} Transactions\",\n \"tokens.filters.stats.metrics.liquidity\": \"Liquidity ($)\",\n \"tokens.filters.stats.metrics.marketCap\": \"Market Cap ($)\",\n \"tokens.filters.modal.title\": \"Filters\",\n \"tokens.tokenInfo.holders\": \"Holders\",\n \"tokens.tokenInfo.top10HoldingsRatio\": \"Top 10 Holders\",\n \"tokens.tokenInfo.top100HoldingsRatio\": \"Top 100 Holders\",\n \"tokens.tokenInfo.devHoldingsRatio\": \"Dev Holders\",\n};\n","import { channels } from \"./module/channels\";\nimport { common } from \"./module/common\";\nimport { mediaTrack } from \"./module/mediaTrack\";\nimport { scaffold } from \"./module/scaffold\";\nimport { tokens } from \"./module/tokens\";\n\nexport const en = {\n ...common,\n ...mediaTrack,\n ...scaffold,\n ...tokens,\n ...channels,\n};\n","import { initReactI18next } from \"react-i18next\";\nimport { i18n as I18nInstance, createInstance } from \"i18next\";\nimport LanguageDetector from \"i18next-browser-languagedetector\";\nimport {\n defaultLng,\n defaultNS,\n i18nCookieKey,\n i18nLocalStorageKey,\n} from \"./constant\";\nimport { en } from \"./locale/en\";\n\nconst i18n: I18nInstance = createInstance();\n\ni18n\n .use(LanguageDetector)\n .use(initReactI18next) // bind react-i18next to the instance\n .init({\n fallbackLng: defaultLng,\n ns: [defaultNS],\n defaultNS,\n interpolation: {\n escapeValue: false, // not needed for react!!\n },\n detection: {\n lookupLocalStorage: i18nLocalStorageKey,\n lookupCookie: i18nCookieKey,\n caches: [\"cookie\", \"localStorage\"],\n order: [\"cookie\", \"localStorage\", \"htmlTag\", \"navigator\"],\n },\n resources: {\n [defaultLng]: { [defaultNS]: en },\n },\n });\n\nexport default i18n;\n","import i18n from \"./i18n\";\nimport { LocaleCode } from \"./types\";\n\nexport type BackendOptions = {\n /**\n * Load url for a given language and namespace\n * @param lang language code\n * @param ns namespace\n * @returns url or urls\n */\n loadPath: (lang: LocaleCode, ns: string) => string | string[];\n};\n\n/**\n * Async resources loading through HTTP, resources must be placed in the site's public directory\n */\nexport class Backend {\n private readonly cache: Set<string>;\n\n constructor(private readonly options?: BackendOptions) {\n this.cache = new Set();\n }\n\n async fetchData(url: string): Promise<Record<string, string>> {\n try {\n const res = await fetch(url);\n return await res.json();\n } catch (error) {\n console.warn(\n `Failed to fetch locale resource bundle from ${url}:`,\n error,\n );\n return {};\n }\n }\n\n async loadLanguage(lang: LocaleCode, ns: string) {\n if (typeof this.options?.loadPath !== \"function\") return;\n\n // get load url paths\n let paths = this.options.loadPath(lang, ns);\n if (typeof paths === \"string\") paths = [paths];\n if (!paths.length) return;\n\n // filter out the paths that have already been loaded\n const urls = paths.filter((path) => {\n const loaded = i18n.hasResourceBundle(lang, ns);\n return !loaded || !this.cache.has(path);\n });\n\n const promises = urls.map(async (url) => {\n const data = await this.fetchData(url);\n i18n.addResourceBundle(lang, ns, data, true, true);\n this.cache.add(url);\n });\n await Promise.all(promises);\n }\n}\n","import { createContext, useContext } from \"react\";\nimport { Language, LocaleCode } from \"./types\";\n\nexport type LocaleContextState = {\n /**\n * Supported languages\n */\n languages: Language[];\n\n /**\n * Called before language change\n * @param lang - new language code\n * @returns\n */\n beforeLanguageChange: (lang: LocaleCode) => Promise<void>;\n /**\n * Called after language changed\n * @param lang - new language code\n * @returns\n */\n afterLanguageChange: (lang: LocaleCode) => Promise<void>;\n};\n\nexport const LocaleContext = createContext<LocaleContextState>({\n languages: [],\n beforeLanguageChange: () => Promise.resolve(),\n afterLanguageChange: () => Promise.resolve(),\n});\n\nexport const useLocaleContext = () => {\n const context = useContext(LocaleContext);\n if (!context) {\n throw new Error(\"useLocaleContext must be used within a LocaleProvider\");\n }\n return context;\n};\n","import { LocaleEnum } from \"../types\";\n\n/**\n * get locale path from pathname\n * @param pathname - pathname to get locale path\n * @param localeCodes - locale codes to check\n * @example\n * getLocalePathFromPathname('/en/perp/PERP_ETH_USDC') => 'en'\n * getLocalePathFromPathname('/perp/PERP_ETH_USDC') => null\n * getLocalePathFromPathname('/en/markets') => 'en'\n * getLocalePathFromPathname('/markets') => null\n */\nexport function getLocalePathFromPathname(\n pathname: string,\n localeCodes?: string[],\n) {\n const locale = pathname.split(\"/\")[1];\n localeCodes = localeCodes || Object.values(LocaleEnum);\n return localeCodes.includes(locale as LocaleEnum) ? locale : null;\n}\n","import { type LocaleCode, LocaleEnum } from \"../types\";\n\n/**\n * transform browser language to i18n locale codes\n * @param lang - browser language\n * @param localeCodes - locale codes to check\n * @param defaultLang - default locale code\n * @example\n * parseI18nLang('en-US') => 'en'\n * parseI18nLang('zh-CN') => 'zh'\n * parseI18nLang('zh-TW') => 'zh'\n * parseI18nLang('ja') => 'ja'\n * */\nexport function parseI18nLang(\n lang: string,\n localeCodes?: LocaleCode[],\n defaultLang?: LocaleCode,\n) {\n localeCodes = localeCodes || Object.values(LocaleEnum);\n defaultLang = defaultLang || LocaleEnum.en;\n\n const regex = /^([a-z]{2})/i;\n const match = lang?.match(regex);\n\n if (!match) {\n return defaultLang;\n }\n\n const matchLang = match[1];\n\n if (localeCodes.includes(lang)) {\n return lang;\n }\n\n if (localeCodes.includes(matchLang)) {\n return matchLang;\n }\n\n return defaultLang;\n}\n","import i18n from \"../i18n\";\nimport { getLocalePathFromPathname } from \"./getLocalePathFromPathname\";\nimport { parseI18nLang } from \"./parseI18nLang\";\n\n/**\n * Generate a localized path with proper locale prefix and search parameters\n *\n * This function ensures that the returned path includes the appropriate locale prefix.\n * If the path already contains a valid locale prefix, it returns the path as-is.\n * Otherwise, it prepends the specified locale or falls back to the current i18n language.\n *\n * @param params - Configuration object for path generation\n * @param params.path - The base pathname (e.g., '/markets', '/perp/PERP_ETH_USDC')\n * @param params.locale - Optional locale code to use as prefix. If not provided, uses i18n.language\n * @param params.search - Optional search query string. If not provided, uses window.location.search\n *\n * @returns A complete URL path with locale prefix and search parameters\n *\n * @example\n * generatePath({ path: '/markets' }) => '/en/markets?tab=spot'\n * generatePath({ path: '/en/markets', search: '?tab=futures' }) => '/en/markets?tab=futures'\n * generatePath({ path: '/perp/PERP_ETH_USDC', locale: 'zh' }) => '/zh/perp/PERP_ETH_USDC'\n * generatePath({ path: '/en/perp/PERP_ETH_USDC' }) => '/en/perp/PERP_ETH_USDC'\n */\nexport function generatePath(params: {\n path: string;\n locale?: string;\n search?: string;\n}) {\n const { path, locale, search } = params;\n const searchUrl =\n search || (typeof window !== \"undefined\" ? window.location.search : \"\");\n\n let localePath = getLocalePathFromPathname(path);\n\n // If path already contains a valid locale prefix, return it unchanged\n if (localePath) {\n return `${path}${searchUrl}`;\n }\n\n // Use provided locale or fall back to current i18n language\n localePath = locale || parseI18nLang(i18n.language);\n\n // Prepend locale prefix to path\n return `/${localePath}${path}${searchUrl}`;\n}\n","import { getLocalePathFromPathname } from \"./getLocalePathFromPathname\";\n\n/**\n * remove lang prefix from pathname\n * @param pathname - pathname to remove lang prefix\n * @param localeCodes - locale codes to check\n * @example\n * removeLangPrefix('/en/perp/PERP_ETH_USDC') => '/perp/PERP_ETH_USDC'\n * removeLangPrefix('/en/markets') => '/markets'\n * removeLangPrefix('/perp/PERP_ETH_USDC') => '/perp/PERP_ETH_USDC'\n * removeLangPrefix('/markets') => '/markets'\n */\nexport function removeLangPrefix(pathname: string, localeCodes?: string[]) {\n const localePath = getLocalePathFromPathname(pathname, localeCodes);\n\n return localePath\n ? pathname.replace(new RegExp(`^/${localePath}(?=/)`), \"\")\n : pathname;\n}\n","import {\n PropsWithChildren,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport { I18nextProvider } from \"react-i18next\";\nimport { Backend, BackendOptions } from \"./backend\";\nimport { defaultLanguages, defaultNS } from \"./constant\";\nimport { LocaleContext, LocaleContextState } from \"./context\";\nimport i18n from \"./i18n\";\nimport { LocaleCode, Resources, Language } from \"./types\";\nimport { parseI18nLang } from \"./utils\";\n\nexport type LocaleProviderProps = PropsWithChildren<\n {\n /** current locale */\n locale?: LocaleCode;\n /** current locale's resource */\n resource?: Record<string, string>;\n /** all synchronously loaded resources */\n resources?: Resources;\n /** supported languages, must be a subset of {@link defaultLanguages}, used when {@link languages} is not provided */\n supportedLanguages?: LocaleCode[];\n /** optional conversion function to modify the detected language code */\n convertDetectedLanguage?: (lang: string) => LocaleCode;\n /** options to load resources asynchronously */\n backend?: BackendOptions;\n } & Partial<LocaleContextState>\n>;\n\nexport function LocaleProvider({\n children,\n locale,\n resource,\n resources,\n backend,\n supportedLanguages,\n convertDetectedLanguage,\n languages: languagesProp,\n beforeLanguageChange,\n afterLanguageChange,\n}: LocaleProviderProps) {\n // calculated supported languages\n const [languages, setLanguages] = useState<Language[]>(defaultLanguages);\n\n // backend instance to load resources asynchronously\n const backendRef = useRef(new Backend(backend!));\n\n // load resources synchronously\n useEffect(() => {\n if (resources) {\n Object.entries(resources).forEach(([locale, messages]) => {\n i18n.addResourceBundle(locale, defaultNS, messages, true, true);\n });\n return;\n }\n if (resource && locale) {\n i18n.addResourceBundle(locale, defaultNS, resource, true, true);\n }\n }, [locale, resource, resources]);\n\n // change language when locale changed\n useEffect(() => {\n if (locale && locale !== i18n.language) {\n i18n.changeLanguage(locale);\n }\n }, [locale]);\n\n // calculate supported languages\n useEffect(() => {\n if (Array.isArray(languagesProp)) {\n setLanguages(languagesProp);\n } else if (Array.isArray(supportedLanguages)) {\n setLanguages(\n supportedLanguages\n .map((localCode) =>\n defaultLanguages.find((l) => l.localCode === localCode),\n )\n .filter((item) => !!item),\n );\n }\n }, [supportedLanguages, languagesProp]);\n\n // if browser language is not a valid language, change language\n useEffect(() => {\n const fixLanguage = async () => {\n const lang =\n typeof convertDetectedLanguage === \"function\"\n ? convertDetectedLanguage(i18n.language)\n : parseI18nLang(i18n.language);\n await backendRef.current.loadLanguage(lang, defaultNS);\n if (lang !== i18n.language) {\n await i18n.changeLanguage(lang);\n }\n };\n fixLanguage();\n }, [i18n.language]);\n\n const beforeLanguageChangeHandler = useCallback(\n async (lang: LocaleCode) => {\n await beforeLanguageChange?.(lang);\n // load language before language changed\n await backendRef.current.loadLanguage(lang, defaultNS);\n },\n [beforeLanguageChange],\n );\n\n const afterLanguageChangeHandler = useCallback(\n async (lang: LocaleCode) => {\n afterLanguageChange?.(lang);\n },\n [afterLanguageChange],\n );\n\n const contextValue = useMemo<LocaleContextState>(() => {\n return {\n languages,\n beforeLanguageChange: beforeLanguageChangeHandler,\n afterLanguageChange: afterLanguageChangeHandler,\n };\n }, [languages, beforeLanguageChangeHandler, afterLanguageChangeHandler]);\n\n return (\n <LocaleContext.Provider value={contextValue}>\n <I18nextProvider i18n={i18n} defaultNS={defaultNS}>\n {children}\n </I18nextProvider>\n </LocaleContext.Provider>\n );\n}\n","import { useContext } from \"react\";\nimport {\n FallbackNs,\n useTranslation as _useTranslation,\n UseTranslationOptions,\n I18nContext,\n} from \"react-i18next\";\nimport { FlatNamespace, KeyPrefix } from \"i18next\";\nimport i18n from \"./i18n\";\n\ntype $Tuple<T> = readonly [T?, ...T[]];\n\n/**\n * Hook to get translation function\n * @param ns\n * @param options\n * @returns\n */\nexport function useTranslation<\n Ns extends FlatNamespace | $Tuple<FlatNamespace> | undefined = undefined,\n KPrefix extends KeyPrefix<FallbackNs<Ns>> = undefined,\n>(ns?: Ns, options?: UseTranslationOptions<KPrefix>) {\n const context = useContext(I18nContext);\n return _useTranslation(ns, { i18n: context?.i18n || i18n, ...options });\n}\n","import { useEffect, useState } from \"react\";\nimport i18n from \"./i18n\";\nimport { LocaleCode } from \"./types\";\n\n/**\n * Hooks to get current locale code\n * @returns current locale code\n */\nexport function useLocale() {\n const [localeCode, setLocaleCode] = useState<LocaleCode>(i18n.language);\n\n useEffect(() => {\n i18n.on(\"languageChanged\", setLocaleCode);\n return () => {\n i18n.off(\"languageChanged\", setLocaleCode);\n };\n }, [i18n]);\n\n return localeCode;\n}\n","import { useCallback } from \"react\";\nimport { useLocaleContext } from \"./context\";\nimport i18n from \"./i18n\";\nimport { LocaleCode } from \"./types\";\n\nexport function useChangeLocale() {\n const { beforeLanguageChange, afterLanguageChange } = useLocaleContext();\n\n const changeLocale = useCallback(\n async (locale: LocaleCode) => {\n await beforeLanguageChange(locale);\n await i18n.changeLanguage(locale);\n await afterLanguageChange(locale);\n },\n [beforeLanguageChange, afterLanguageChange, i18n],\n );\n\n return changeLocale;\n}\n"]}
package/dist/locale.csv CHANGED
@@ -35,8 +35,14 @@
35
35
  "common.resolution.4h","4h","4小时"
36
36
  "common.resolution.12h","12h","12小时"
37
37
  "common.resolution.24h","24h","24小时"
38
- "mediaTrack.title","Media Track","Media Track"
39
- "mediaTrack.description","Media Track","Media Track"
38
+ "mediaTrack.tweets.translate.show","Show Translation","显示翻译"
39
+ "mediaTrack.tweets.translate.hide","Hide Translation","隐藏翻译"
40
+ "mediaTrack.tweets.expand","Expand","展开"
41
+ "mediaTrack.tweets.collapse","Collapse","折叠"
42
+ "scaffold.draggableModal.snapToEdge","Drag to edge to show side panel","拖拽到边缘以显示侧边面板"
43
+ "scaffold.draggablePanel.snapToModal","Drag away to show floating modal","拖拽离开以显示浮动面板"
44
+ "scaffold.home","Home","主页"
45
+ "tokens.search.placeholder","Search by token or CA...","搜索代币或合约地址..."
40
46
  "tokens.copied.address","Token address copied to clipboard","地址复制成功"
41
47
  "tokens.listHeader.token","Token","代币"
42
48
  "tokens.listHeader.priceHistories","Price Histories","价格走势"
@@ -75,4 +81,7 @@
75
81
  "tokens.tokenInfo.holders","Holders","持有者"
76
82
  "tokens.tokenInfo.top10HoldingsRatio","Top 10 Holders","前10持有者"
77
83
  "tokens.tokenInfo.top100HoldingsRatio","Top 100 Holders","前100持有者"
78
- "tokens.tokenInfo.devHoldingsRatio","Dev Holders","开发者持有"
84
+ "tokens.tokenInfo.devHoldingsRatio","Dev Holders","开发者持有"
85
+ "channels.forms.base.title","Base Info","基础信息"
86
+ "channels.forms.wallets.title","Wallet Management","钱包管理"
87
+ "channels.forms.socials.title","Social Medias","社媒账号"
@@ -35,8 +35,14 @@
35
35
  "common.resolution.4h": "4h",
36
36
  "common.resolution.12h": "12h",
37
37
  "common.resolution.24h": "24h",
38
- "mediaTrack.title": "Media Track",
39
- "mediaTrack.description": "Media Track",
38
+ "mediaTrack.tweets.translate.show": "Show Translation",
39
+ "mediaTrack.tweets.translate.hide": "Hide Translation",
40
+ "mediaTrack.tweets.expand": "Expand",
41
+ "mediaTrack.tweets.collapse": "Collapse",
42
+ "scaffold.draggableModal.snapToEdge": "Drag to edge to show side panel",
43
+ "scaffold.draggablePanel.snapToModal": "Drag away to show floating modal",
44
+ "scaffold.home": "Home",
45
+ "tokens.search.placeholder": "Search by token or CA...",
40
46
  "tokens.copied.address": "Token address copied to clipboard",
41
47
  "tokens.listHeader.token": "Token",
42
48
  "tokens.listHeader.priceHistories": "Price Histories",
@@ -75,5 +81,8 @@
75
81
  "tokens.tokenInfo.holders": "Holders",
76
82
  "tokens.tokenInfo.top10HoldingsRatio": "Top 10 Holders",
77
83
  "tokens.tokenInfo.top100HoldingsRatio": "Top 100 Holders",
78
- "tokens.tokenInfo.devHoldingsRatio": "Dev Holders"
84
+ "tokens.tokenInfo.devHoldingsRatio": "Dev Holders",
85
+ "channels.forms.base.title": "Base Info",
86
+ "channels.forms.wallets.title": "Wallet Management",
87
+ "channels.forms.socials.title": "Social Medias"
79
88
  }
@@ -35,8 +35,14 @@
35
35
  "common.resolution.4h": "4小时",
36
36
  "common.resolution.12h": "12小时",
37
37
  "common.resolution.24h": "24小时",
38
- "mediaTrack.title": "Media Track",
39
- "mediaTrack.description": "Media Track",
38
+ "mediaTrack.tweets.translate.show": "显示翻译",
39
+ "mediaTrack.tweets.translate.hide": "隐藏翻译",
40
+ "mediaTrack.tweets.expand": "展开",
41
+ "mediaTrack.tweets.collapse": "折叠",
42
+ "scaffold.draggableModal.snapToEdge": "拖拽到边缘以显示侧边面板",
43
+ "scaffold.draggablePanel.snapToModal": "拖拽离开以显示浮动面板",
44
+ "scaffold.home": "主页",
45
+ "tokens.search.placeholder": "搜索代币或合约地址...",
40
46
  "tokens.copied.address": "地址复制成功",
41
47
  "tokens.listHeader.token": "代币",
42
48
  "tokens.listHeader.priceHistories": "价格走势",
@@ -75,5 +81,8 @@
75
81
  "tokens.tokenInfo.holders": "持有者",
76
82
  "tokens.tokenInfo.top10HoldingsRatio": "前10持有者",
77
83
  "tokens.tokenInfo.top100HoldingsRatio": "前100持有者",
78
- "tokens.tokenInfo.devHoldingsRatio": "开发者持有"
84
+ "tokens.tokenInfo.devHoldingsRatio": "开发者持有",
85
+ "channels.forms.base.title": "基础信息",
86
+ "channels.forms.wallets.title": "钱包管理",
87
+ "channels.forms.socials.title": "社媒账号"
79
88
  }
package/dist/server.d.mts CHANGED
@@ -1,6 +1,10 @@
1
1
  export { createInstance, default as i18next } from 'i18next';
2
2
 
3
3
  declare const en: {
4
+ "channels.forms.base.title": string;
5
+ "channels.forms.wallets.title": string;
6
+ "channels.forms.socials.title": string;
7
+ "tokens.search.placeholder": string;
4
8
  "tokens.copied.address": string;
5
9
  "tokens.listHeader.token": string;
6
10
  "tokens.listHeader.priceHistories": string;
@@ -40,8 +44,13 @@ declare const en: {
40
44
  "tokens.tokenInfo.top10HoldingsRatio": string;
41
45
  "tokens.tokenInfo.top100HoldingsRatio": string;
42
46
  "tokens.tokenInfo.devHoldingsRatio": string;
43
- "mediaTrack.title": string;
44
- "mediaTrack.description": string;
47
+ "scaffold.draggableModal.snapToEdge": string;
48
+ "scaffold.draggablePanel.snapToModal": string;
49
+ "scaffold.home": string;
50
+ "mediaTrack.tweets.translate.show": string;
51
+ "mediaTrack.tweets.translate.hide": string;
52
+ "mediaTrack.tweets.expand": string;
53
+ "mediaTrack.tweets.collapse": string;
45
54
  "common.cancel": string;
46
55
  "common.confirm": string;
47
56
  "common.reset": string;
package/dist/server.d.ts CHANGED
@@ -1,6 +1,10 @@
1
1
  export { createInstance, default as i18next } from 'i18next';
2
2
 
3
3
  declare const en: {
4
+ "channels.forms.base.title": string;
5
+ "channels.forms.wallets.title": string;
6
+ "channels.forms.socials.title": string;
7
+ "tokens.search.placeholder": string;
4
8
  "tokens.copied.address": string;
5
9
  "tokens.listHeader.token": string;
6
10
  "tokens.listHeader.priceHistories": string;
@@ -40,8 +44,13 @@ declare const en: {
40
44
  "tokens.tokenInfo.top10HoldingsRatio": string;
41
45
  "tokens.tokenInfo.top100HoldingsRatio": string;
42
46
  "tokens.tokenInfo.devHoldingsRatio": string;
43
- "mediaTrack.title": string;
44
- "mediaTrack.description": string;
47
+ "scaffold.draggableModal.snapToEdge": string;
48
+ "scaffold.draggablePanel.snapToModal": string;
49
+ "scaffold.home": string;
50
+ "mediaTrack.tweets.translate.show": string;
51
+ "mediaTrack.tweets.translate.hide": string;
52
+ "mediaTrack.tweets.expand": string;
53
+ "mediaTrack.tweets.collapse": string;
45
54
  "common.cancel": string;
46
55
  "common.confirm": string;
47
56
  "common.reset": string;
package/dist/server.js CHANGED
@@ -1,2 +1,2 @@
1
- 'use strict';var i18next=require('i18next');function _interopDefault(e){return e&&e.__esModule?e:{default:e}}var i18next__default=/*#__PURE__*/_interopDefault(i18next);var r=(o=>(o.en="en",o.zh="zh",o.ja="ja",o.es="es",o.ko="ko",o.vi="vi",o.de="de",o.fr="fr",o.ru="ru",o.id="id",o.tr="tr",o.it="it",o.pt="pt",o.uk="uk",o.pl="pl",o.nl="nl",o))(r||{});var y=[{localCode:"en",displayName:"English"},{localCode:"zh",displayName:"\u4E2D\u6587"},{localCode:"ja",displayName:"\u65E5\u672C\u8A9E"},{localCode:"es",displayName:"Espa\xF1ol"},{localCode:"ko",displayName:"\uD55C\uAD6D\uC5B4"},{localCode:"vi",displayName:"Ti\u1EBFng Vi\u1EC7t"},{localCode:"de",displayName:"Deutsch"},{localCode:"fr",displayName:"Fran\xE7ais"},{localCode:"ru",displayName:"\u0420\u0443\u0441\u0441\u043A\u0438\u0439"},{localCode:"id",displayName:"Bahasa Indonesia"},{localCode:"tr",displayName:"T\xFCrk\xE7e"},{localCode:"it",displayName:"Italiano"},{localCode:"pt",displayName:"Portugu\xEAs"},{localCode:"uk",displayName:"\u0423\u043A\u0440\u0430\u0457\u043D\u0441\u044C\u043A\u0430"},{localCode:"pl",displayName:"Polski"},{localCode:"nl",displayName:"Nederlands"}],x="en",g="translation",C="liberfi_i18nLng",h="liberfi_i18nLng";var l={"common.cancel":"Cancel","common.confirm":"Confirm","common.reset":"Reset","common.apply":"Apply","common.ok":"OK","common.yes":"Yes","common.no":"No","common.all":"All","common.buy":"Buy","common.sell":"Sell","common.long":"Long","common.short":"Short","common.edit":"Edit","common.save":"Save","common.add":"Add","common.delete":"Delete","common.tips":"Tips","common.max":"Max","common.download":"Download","common.copy":"Copy","common.copy.failed":"Copy failed","common.copy.copied":"Copied to clipboard","common.share":"Share","common.export":"Export","common.empty":"No data","common.resolution.1s":"1s","common.resolution.15s":"15s","common.resolution.30s":"30s","common.resolution.1m":"1m","common.resolution.5m":"5m","common.resolution.15m":"15m","common.resolution.30m":"30m","common.resolution.1h":"1h","common.resolution.4h":"4h","common.resolution.12h":"12h","common.resolution.24h":"24h"};var a={"mediaTrack.title":"Media Track","mediaTrack.description":"Media Track"};var m={"tokens.copied.address":"Token address copied to clipboard","tokens.listHeader.token":"Token","tokens.listHeader.priceHistories":"Price Histories","tokens.listHeader.price":"Price","tokens.listHeader.priceChange":"{{resolution}}%","tokens.listHeader.marketCap":"Market Cap","tokens.listHeader.liquidity":"Liquidity","tokens.listHeader.volumes":"{{resolution}} Volumes","tokens.listHeader.txs":"{{resolution}} TXNS","tokens.listHeader.traders":"{{resolution}} Traders","tokens.listHeader.tokenInfo":"Token Info","tokens.listHeader.actions":"Actions","tokens.listHeader.filter":"Filter","tokens.listType.trending":"Trending","tokens.listType.new":"New","tokens.listType.stocks":"Stocks","tokens.filters.protocols.title":"Protocols","tokens.filters.protocols.selectAll":"Select All","tokens.filters.protocols.unselectAll":"Unselect All","tokens.filters.keywords.title":"Search Keywords","tokens.filters.keywords.exclude.title":"Exclude Keywords","tokens.filters.keywords.placeholder":"keyword1, keyword2...","tokens.filters.stats.min":"Min","tokens.filters.stats.max":"Max","tokens.filters.stats.audits":"Audits","tokens.filters.stats.audits.holders":"Holders Count","tokens.filters.stats.audits.top10HoldingsRatio":"Top 10 Holders %","tokens.filters.stats.audits.top100HoldingsRatio":"Top 100 Holders %","tokens.filters.stats.audits.devHoldingsRatio":"Dev Holdings %","tokens.filters.stats.metrics":"Metrics","tokens.filters.stats.metrics.volumes":"{{resolution}} Volumes ($)","tokens.filters.stats.metrics.txns":"{{resolution}} Transactions","tokens.filters.stats.metrics.liquidity":"Liquidity ($)","tokens.filters.stats.metrics.marketCap":"Market Cap ($)","tokens.filters.modal.title":"Filters","tokens.tokenInfo.holders":"Holders","tokens.tokenInfo.top10HoldingsRatio":"Top 10 Holders","tokens.tokenInfo.top100HoldingsRatio":"Top 100 Holders","tokens.tokenInfo.devHoldingsRatio":"Dev Holders"};var P={...l,...a,...m};function d(s,e){let t=s.split("/")[1];return e=e||Object.values(r),e.includes(t)?t:null}function b(s,e,t){e=e||Object.values(r),t=t||"en";let c=/^([a-z]{2})/i,n=s?.match(c);if(!n)return t;let i=n[1];return e.includes(s)?s:e.includes(i)?i:t}function F(s,e){let t=d(s,e);return t?s.replace(new RegExp(`^/${t}(?=/)`),""):s}Object.defineProperty(exports,"createInstance",{enumerable:true,get:function(){return i18next.createInstance}});Object.defineProperty(exports,"i18next",{enumerable:true,get:function(){return i18next__default.default}});exports.LocaleEnum=r;exports.defaultLanguages=y;exports.defaultLng=x;exports.defaultNS=g;exports.en=P;exports.getLocalePathFromPathname=d;exports.i18nCookieKey=h;exports.i18nLocalStorageKey=C;exports.parseI18nLang=b;exports.removeLangPrefix=F;//# sourceMappingURL=server.js.map
1
+ 'use strict';var i18next=require('i18next');function _interopDefault(e){return e&&e.__esModule?e:{default:e}}var i18next__default=/*#__PURE__*/_interopDefault(i18next);var n=(o=>(o.en="en",o.zh="zh",o.ja="ja",o.es="es",o.ko="ko",o.vi="vi",o.de="de",o.fr="fr",o.ru="ru",o.id="id",o.tr="tr",o.it="it",o.pt="pt",o.uk="uk",o.pl="pl",o.nl="nl",o))(n||{});var x=[{localCode:"en",displayName:"English"},{localCode:"zh",displayName:"\u4E2D\u6587"},{localCode:"ja",displayName:"\u65E5\u672C\u8A9E"},{localCode:"es",displayName:"Espa\xF1ol"},{localCode:"ko",displayName:"\uD55C\uAD6D\uC5B4"},{localCode:"vi",displayName:"Ti\u1EBFng Vi\u1EC7t"},{localCode:"de",displayName:"Deutsch"},{localCode:"fr",displayName:"Fran\xE7ais"},{localCode:"ru",displayName:"\u0420\u0443\u0441\u0441\u043A\u0438\u0439"},{localCode:"id",displayName:"Bahasa Indonesia"},{localCode:"tr",displayName:"T\xFCrk\xE7e"},{localCode:"it",displayName:"Italiano"},{localCode:"pt",displayName:"Portugu\xEAs"},{localCode:"uk",displayName:"\u0423\u043A\u0440\u0430\u0457\u043D\u0441\u044C\u043A\u0430"},{localCode:"pl",displayName:"Polski"},{localCode:"nl",displayName:"Nederlands"}],h="en",C="translation",H="liberfi_i18nLng",T="liberfi_i18nLng";var l={"channels.forms.base.title":"Base Info","channels.forms.wallets.title":"Wallet Management","channels.forms.socials.title":"Social Medias"};var i={"common.cancel":"Cancel","common.confirm":"Confirm","common.reset":"Reset","common.apply":"Apply","common.ok":"OK","common.yes":"Yes","common.no":"No","common.all":"All","common.buy":"Buy","common.sell":"Sell","common.long":"Long","common.short":"Short","common.edit":"Edit","common.save":"Save","common.add":"Add","common.delete":"Delete","common.tips":"Tips","common.max":"Max","common.download":"Download","common.copy":"Copy","common.copy.failed":"Copy failed","common.copy.copied":"Copied to clipboard","common.share":"Share","common.export":"Export","common.empty":"No data","common.resolution.1s":"1s","common.resolution.15s":"15s","common.resolution.30s":"30s","common.resolution.1m":"1m","common.resolution.5m":"5m","common.resolution.15m":"15m","common.resolution.30m":"30m","common.resolution.1h":"1h","common.resolution.4h":"4h","common.resolution.12h":"12h","common.resolution.24h":"24h"};var d={"mediaTrack.tweets.translate.show":"Show Translation","mediaTrack.tweets.translate.hide":"Hide Translation","mediaTrack.tweets.expand":"Expand","mediaTrack.tweets.collapse":"Collapse"};var m={"scaffold.draggableModal.snapToEdge":"Drag to edge to show side panel","scaffold.draggablePanel.snapToModal":"Drag away to show floating modal","scaffold.home":"Home"};var c={"tokens.search.placeholder":"Search by token or CA...","tokens.copied.address":"Token address copied to clipboard","tokens.listHeader.token":"Token","tokens.listHeader.priceHistories":"Price Histories","tokens.listHeader.price":"Price","tokens.listHeader.priceChange":"{{resolution}}%","tokens.listHeader.marketCap":"Market Cap","tokens.listHeader.liquidity":"Liquidity","tokens.listHeader.volumes":"{{resolution}} Volumes","tokens.listHeader.txs":"{{resolution}} TXNS","tokens.listHeader.traders":"{{resolution}} Traders","tokens.listHeader.tokenInfo":"Token Info","tokens.listHeader.actions":"Actions","tokens.listHeader.filter":"Filter","tokens.listType.trending":"Trending","tokens.listType.new":"New","tokens.listType.stocks":"Stocks","tokens.filters.protocols.title":"Protocols","tokens.filters.protocols.selectAll":"Select All","tokens.filters.protocols.unselectAll":"Unselect All","tokens.filters.keywords.title":"Search Keywords","tokens.filters.keywords.exclude.title":"Exclude Keywords","tokens.filters.keywords.placeholder":"keyword1, keyword2...","tokens.filters.stats.min":"Min","tokens.filters.stats.max":"Max","tokens.filters.stats.audits":"Audits","tokens.filters.stats.audits.holders":"Holders Count","tokens.filters.stats.audits.top10HoldingsRatio":"Top 10 Holders %","tokens.filters.stats.audits.top100HoldingsRatio":"Top 100 Holders %","tokens.filters.stats.audits.devHoldingsRatio":"Dev Holdings %","tokens.filters.stats.metrics":"Metrics","tokens.filters.stats.metrics.volumes":"{{resolution}} Volumes ($)","tokens.filters.stats.metrics.txns":"{{resolution}} Transactions","tokens.filters.stats.metrics.liquidity":"Liquidity ($)","tokens.filters.stats.metrics.marketCap":"Market Cap ($)","tokens.filters.modal.title":"Filters","tokens.tokenInfo.holders":"Holders","tokens.tokenInfo.top10HoldingsRatio":"Top 10 Holders","tokens.tokenInfo.top100HoldingsRatio":"Top 100 Holders","tokens.tokenInfo.devHoldingsRatio":"Dev Holders"};var D={...i,...d,...m,...c,...l};function p(s,e){let t=s.split("/")[1];return e=e||Object.values(n),e.includes(t)?t:null}function q(s,e,t){e=e||Object.values(n),t=t||"en";let k=/^([a-z]{2})/i,r=s?.match(k);if(!r)return t;let a=r[1];return e.includes(s)?s:e.includes(a)?a:t}function B(s,e){let t=p(s,e);return t?s.replace(new RegExp(`^/${t}(?=/)`),""):s}Object.defineProperty(exports,"createInstance",{enumerable:true,get:function(){return i18next.createInstance}});Object.defineProperty(exports,"i18next",{enumerable:true,get:function(){return i18next__default.default}});exports.LocaleEnum=n;exports.defaultLanguages=x;exports.defaultLng=h;exports.defaultNS=C;exports.en=D;exports.getLocalePathFromPathname=p;exports.i18nCookieKey=T;exports.i18nLocalStorageKey=H;exports.parseI18nLang=q;exports.removeLangPrefix=B;//# sourceMappingURL=server.js.map
2
2
  //# sourceMappingURL=server.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/types.ts","../src/constant.ts","../src/locale/module/common.ts","../src/locale/module/mediaTrack.ts","../src/locale/module/tokens.ts","../src/locale/en.ts","../src/utils/getLocalePathFromPathname.ts","../src/utils/parseI18nLang.ts","../src/utils/removeLangPrefix.ts"],"names":["LocaleEnum","defaultLanguages","defaultLng","defaultNS","i18nLocalStorageKey","i18nCookieKey","common","mediaTrack","tokens","en","getLocalePathFromPathname","pathname","localeCodes","locale","parseI18nLang","lang","defaultLang","regex","match","matchLang","removeLangPrefix","localePath"],"mappings":"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","file":"server.js","sourcesContent":["// import the original type declarations\nimport \"i18next\";\n// import all namespaces (for the default language, only)\nimport { en } from \"./locale/en\";\n\nexport enum LocaleEnum {\n /** English */\n en = \"en\",\n /** Chinese */\n zh = \"zh\",\n /** Japanese */\n ja = \"ja\",\n /** Spanish */\n es = \"es\",\n /** Korean */\n ko = \"ko\",\n /** Vietnamese */\n vi = \"vi\",\n /** German */\n de = \"de\",\n /** French */\n fr = \"fr\",\n /** Russian */\n ru = \"ru\",\n /** Indonesian */\n id = \"id\",\n /** Turkish */\n tr = \"tr\",\n /** Italian */\n it = \"it\",\n /** Portuguese */\n pt = \"pt\",\n /** Ukrainian */\n uk = \"uk\",\n /** Polish */\n pl = \"pl\",\n /** Dutch */\n nl = \"nl\",\n}\n\nexport type LocaleCode = keyof typeof LocaleEnum | (string & {});\n\nexport type Language = {\n localCode: LocaleCode;\n displayName: string;\n};\n\nexport type ExtendLocaleMessages = Record<`extend.${string}`, string>;\n\nexport type LocaleMessages = typeof en & ExtendLocaleMessages;\n\n// eslint-disable-next-line @typescript-eslint/no-empty-object-type\nexport type Resources<T extends {} = {}> = {\n [key in LocaleCode]?: Partial<LocaleMessages & T>;\n};\n\n// https://www.i18next.com/overview/typescript#create-a-declaration-file\n// Enhance the input parameter intelliSense for the t function.\ndeclare module \"i18next\" {\n // Extend CustomTypeOptions\n interface CustomTypeOptions {\n // custom namespace type, if you changed it\n defaultNS: \"translation\";\n // custom resources type\n resources: {\n translation: LocaleMessages;\n };\n }\n}\n","import { Language, LocaleEnum } from \"./types\";\n\nexport const defaultLanguages: Language[] = [\n { localCode: LocaleEnum.en, displayName: \"English\" }, // English\n { localCode: LocaleEnum.zh, displayName: \"中文\" }, // Chinese\n { localCode: LocaleEnum.ja, displayName: \"日本語\" }, // Japanese\n { localCode: LocaleEnum.es, displayName: \"Español\" }, // Spanish\n { localCode: LocaleEnum.ko, displayName: \"한국어\" }, // Korean\n { localCode: LocaleEnum.vi, displayName: \"Tiếng Việt\" }, // Vietnamese\n { localCode: LocaleEnum.de, displayName: \"Deutsch\" }, // German\n { localCode: LocaleEnum.fr, displayName: \"Français\" }, // French\n { localCode: LocaleEnum.ru, displayName: \"Русский\" }, // Russian\n { localCode: LocaleEnum.id, displayName: \"Bahasa Indonesia\" }, // Indonesian\n { localCode: LocaleEnum.tr, displayName: \"Türkçe\" }, // Turkish\n { localCode: LocaleEnum.it, displayName: \"Italiano\" }, // Italian\n { localCode: LocaleEnum.pt, displayName: \"Português\" }, // Portuguese\n { localCode: LocaleEnum.uk, displayName: \"Українська\" }, // Ukrainian\n { localCode: LocaleEnum.pl, displayName: \"Polski\" }, // Polish\n { localCode: LocaleEnum.nl, displayName: \"Nederlands\" }, // Dutch\n];\n\nexport const defaultLng = LocaleEnum.en;\n\nexport const defaultNS = \"translation\";\n\nexport const i18nLocalStorageKey = \"liberfi_i18nLng\";\n\nexport const i18nCookieKey = \"liberfi_i18nLng\";\n","export const common = {\n \"common.cancel\": \"Cancel\",\n \"common.confirm\": \"Confirm\",\n \"common.reset\": \"Reset\",\n \"common.apply\": \"Apply\",\n \"common.ok\": \"OK\",\n \"common.yes\": \"Yes\",\n \"common.no\": \"No\",\n \"common.all\": \"All\",\n \"common.buy\": \"Buy\",\n \"common.sell\": \"Sell\",\n \"common.long\": \"Long\",\n \"common.short\": \"Short\",\n \"common.edit\": \"Edit\",\n \"common.save\": \"Save\",\n \"common.add\": \"Add\",\n \"common.delete\": \"Delete\",\n \"common.tips\": \"Tips\",\n \"common.max\": \"Max\",\n \"common.download\": \"Download\",\n \"common.copy\": \"Copy\",\n \"common.copy.failed\": \"Copy failed\",\n \"common.copy.copied\": \"Copied to clipboard\",\n \"common.share\": \"Share\",\n \"common.export\": \"Export\",\n \"common.empty\": \"No data\",\n \"common.resolution.1s\": \"1s\",\n \"common.resolution.15s\": \"15s\",\n \"common.resolution.30s\": \"30s\",\n \"common.resolution.1m\": \"1m\",\n \"common.resolution.5m\": \"5m\",\n \"common.resolution.15m\": \"15m\",\n \"common.resolution.30m\": \"30m\",\n \"common.resolution.1h\": \"1h\",\n \"common.resolution.4h\": \"4h\",\n \"common.resolution.12h\": \"12h\",\n \"common.resolution.24h\": \"24h\",\n};\n","export const mediaTrack = {\n \"mediaTrack.title\": \"Media Track\",\n \"mediaTrack.description\": \"Media Track\",\n};\n","export const tokens = {\n \"tokens.copied.address\": \"Token address copied to clipboard\",\n \"tokens.listHeader.token\": \"Token\",\n \"tokens.listHeader.priceHistories\": \"Price Histories\",\n \"tokens.listHeader.price\": \"Price\",\n \"tokens.listHeader.priceChange\": \"{{resolution}}%\",\n \"tokens.listHeader.marketCap\": \"Market Cap\",\n \"tokens.listHeader.liquidity\": \"Liquidity\",\n \"tokens.listHeader.volumes\": \"{{resolution}} Volumes\",\n \"tokens.listHeader.txs\": \"{{resolution}} TXNS\",\n \"tokens.listHeader.traders\": \"{{resolution}} Traders\",\n \"tokens.listHeader.tokenInfo\": \"Token Info\",\n \"tokens.listHeader.actions\": \"Actions\",\n \"tokens.listHeader.filter\": \"Filter\",\n \"tokens.listType.trending\": \"Trending\",\n \"tokens.listType.new\": \"New\",\n \"tokens.listType.stocks\": \"Stocks\",\n \"tokens.filters.protocols.title\": \"Protocols\",\n \"tokens.filters.protocols.selectAll\": \"Select All\",\n \"tokens.filters.protocols.unselectAll\": \"Unselect All\",\n \"tokens.filters.keywords.title\": \"Search Keywords\",\n \"tokens.filters.keywords.exclude.title\": \"Exclude Keywords\",\n \"tokens.filters.keywords.placeholder\": \"keyword1, keyword2...\",\n \"tokens.filters.stats.min\": \"Min\",\n \"tokens.filters.stats.max\": \"Max\",\n \"tokens.filters.stats.audits\": \"Audits\",\n \"tokens.filters.stats.audits.holders\": \"Holders Count\",\n \"tokens.filters.stats.audits.top10HoldingsRatio\": \"Top 10 Holders %\",\n \"tokens.filters.stats.audits.top100HoldingsRatio\": \"Top 100 Holders %\",\n \"tokens.filters.stats.audits.devHoldingsRatio\": \"Dev Holdings %\",\n \"tokens.filters.stats.metrics\": \"Metrics\",\n \"tokens.filters.stats.metrics.volumes\": \"{{resolution}} Volumes ($)\",\n \"tokens.filters.stats.metrics.txns\": \"{{resolution}} Transactions\",\n \"tokens.filters.stats.metrics.liquidity\": \"Liquidity ($)\",\n \"tokens.filters.stats.metrics.marketCap\": \"Market Cap ($)\",\n \"tokens.filters.modal.title\": \"Filters\",\n \"tokens.tokenInfo.holders\": \"Holders\",\n \"tokens.tokenInfo.top10HoldingsRatio\": \"Top 10 Holders\",\n \"tokens.tokenInfo.top100HoldingsRatio\": \"Top 100 Holders\",\n \"tokens.tokenInfo.devHoldingsRatio\": \"Dev Holders\",\n};\n","import { common } from \"./module/common\";\nimport { mediaTrack } from \"./module/mediaTrack\";\nimport { tokens } from \"./module/tokens\";\n\nexport const en = {\n ...common,\n ...mediaTrack,\n ...tokens,\n};\n","import { LocaleEnum } from \"../types\";\n\n/**\n * get locale path from pathname\n * @param pathname - pathname to get locale path\n * @param localeCodes - locale codes to check\n * @example\n * getLocalePathFromPathname('/en/perp/PERP_ETH_USDC') => 'en'\n * getLocalePathFromPathname('/perp/PERP_ETH_USDC') => null\n * getLocalePathFromPathname('/en/markets') => 'en'\n * getLocalePathFromPathname('/markets') => null\n */\nexport function getLocalePathFromPathname(\n pathname: string,\n localeCodes?: string[],\n) {\n const locale = pathname.split(\"/\")[1];\n localeCodes = localeCodes || Object.values(LocaleEnum);\n return localeCodes.includes(locale as LocaleEnum) ? locale : null;\n}\n","import { type LocaleCode, LocaleEnum } from \"../types\";\n\n/**\n * transform browser language to i18n locale codes\n * @param lang - browser language\n * @param localeCodes - locale codes to check\n * @param defaultLang - default locale code\n * @example\n * parseI18nLang('en-US') => 'en'\n * parseI18nLang('zh-CN') => 'zh'\n * parseI18nLang('zh-TW') => 'zh'\n * parseI18nLang('ja') => 'ja'\n * */\nexport function parseI18nLang(\n lang: string,\n localeCodes?: LocaleCode[],\n defaultLang?: LocaleCode,\n) {\n localeCodes = localeCodes || Object.values(LocaleEnum);\n defaultLang = defaultLang || LocaleEnum.en;\n\n const regex = /^([a-z]{2})/i;\n const match = lang?.match(regex);\n\n if (!match) {\n return defaultLang;\n }\n\n const matchLang = match[1];\n\n if (localeCodes.includes(lang)) {\n return lang;\n }\n\n if (localeCodes.includes(matchLang)) {\n return matchLang;\n }\n\n return defaultLang;\n}\n","import { getLocalePathFromPathname } from \"./getLocalePathFromPathname\";\n\n/**\n * remove lang prefix from pathname\n * @param pathname - pathname to remove lang prefix\n * @param localeCodes - locale codes to check\n * @example\n * removeLangPrefix('/en/perp/PERP_ETH_USDC') => '/perp/PERP_ETH_USDC'\n * removeLangPrefix('/en/markets') => '/markets'\n * removeLangPrefix('/perp/PERP_ETH_USDC') => '/perp/PERP_ETH_USDC'\n * removeLangPrefix('/markets') => '/markets'\n */\nexport function removeLangPrefix(pathname: string, localeCodes?: string[]) {\n const localePath = getLocalePathFromPathname(pathname, localeCodes);\n\n return localePath\n ? pathname.replace(new RegExp(`^/${localePath}(?=/)`), \"\")\n : pathname;\n}\n"]}
1
+ {"version":3,"sources":["../src/types.ts","../src/constant.ts","../src/locale/module/channels.ts","../src/locale/module/common.ts","../src/locale/module/mediaTrack.ts","../src/locale/module/scaffold.ts","../src/locale/module/tokens.ts","../src/locale/en.ts","../src/utils/getLocalePathFromPathname.ts","../src/utils/parseI18nLang.ts","../src/utils/removeLangPrefix.ts"],"names":["LocaleEnum","defaultLanguages","defaultLng","defaultNS","i18nLocalStorageKey","i18nCookieKey","channels","common","mediaTrack","scaffold","tokens","en","getLocalePathFromPathname","pathname","localeCodes","locale","parseI18nLang","lang","defaultLang","regex","match","matchLang","removeLangPrefix","localePath"],"mappings":"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","file":"server.js","sourcesContent":["// import the original type declarations\nimport \"i18next\";\n// import all namespaces (for the default language, only)\nimport { en } from \"./locale/en\";\n\nexport enum LocaleEnum {\n /** English */\n en = \"en\",\n /** Chinese */\n zh = \"zh\",\n /** Japanese */\n ja = \"ja\",\n /** Spanish */\n es = \"es\",\n /** Korean */\n ko = \"ko\",\n /** Vietnamese */\n vi = \"vi\",\n /** German */\n de = \"de\",\n /** French */\n fr = \"fr\",\n /** Russian */\n ru = \"ru\",\n /** Indonesian */\n id = \"id\",\n /** Turkish */\n tr = \"tr\",\n /** Italian */\n it = \"it\",\n /** Portuguese */\n pt = \"pt\",\n /** Ukrainian */\n uk = \"uk\",\n /** Polish */\n pl = \"pl\",\n /** Dutch */\n nl = \"nl\",\n}\n\nexport type LocaleCode = keyof typeof LocaleEnum | (string & {});\n\nexport type Language = {\n localCode: LocaleCode;\n displayName: string;\n};\n\nexport type ExtendLocaleMessages = Record<`extend.${string}`, string>;\n\nexport type LocaleMessages = typeof en & ExtendLocaleMessages;\n\n// eslint-disable-next-line @typescript-eslint/no-empty-object-type\nexport type Resources<T extends {} = {}> = {\n [key in LocaleCode]?: Partial<LocaleMessages & T>;\n};\n\n// https://www.i18next.com/overview/typescript#create-a-declaration-file\n// Enhance the input parameter intelliSense for the t function.\ndeclare module \"i18next\" {\n // Extend CustomTypeOptions\n interface CustomTypeOptions {\n // custom namespace type, if you changed it\n defaultNS: \"translation\";\n // custom resources type\n resources: {\n translation: LocaleMessages;\n };\n }\n}\n","import { Language, LocaleEnum } from \"./types\";\n\nexport const defaultLanguages: Language[] = [\n { localCode: LocaleEnum.en, displayName: \"English\" }, // English\n { localCode: LocaleEnum.zh, displayName: \"中文\" }, // Chinese\n { localCode: LocaleEnum.ja, displayName: \"日本語\" }, // Japanese\n { localCode: LocaleEnum.es, displayName: \"Español\" }, // Spanish\n { localCode: LocaleEnum.ko, displayName: \"한국어\" }, // Korean\n { localCode: LocaleEnum.vi, displayName: \"Tiếng Việt\" }, // Vietnamese\n { localCode: LocaleEnum.de, displayName: \"Deutsch\" }, // German\n { localCode: LocaleEnum.fr, displayName: \"Français\" }, // French\n { localCode: LocaleEnum.ru, displayName: \"Русский\" }, // Russian\n { localCode: LocaleEnum.id, displayName: \"Bahasa Indonesia\" }, // Indonesian\n { localCode: LocaleEnum.tr, displayName: \"Türkçe\" }, // Turkish\n { localCode: LocaleEnum.it, displayName: \"Italiano\" }, // Italian\n { localCode: LocaleEnum.pt, displayName: \"Português\" }, // Portuguese\n { localCode: LocaleEnum.uk, displayName: \"Українська\" }, // Ukrainian\n { localCode: LocaleEnum.pl, displayName: \"Polski\" }, // Polish\n { localCode: LocaleEnum.nl, displayName: \"Nederlands\" }, // Dutch\n];\n\nexport const defaultLng = LocaleEnum.en;\n\nexport const defaultNS = \"translation\";\n\nexport const i18nLocalStorageKey = \"liberfi_i18nLng\";\n\nexport const i18nCookieKey = \"liberfi_i18nLng\";\n","export const channels = {\n \"channels.forms.base.title\": \"Base Info\",\n \"channels.forms.wallets.title\": \"Wallet Management\",\n \"channels.forms.socials.title\": \"Social Medias\",\n};\n","export const common = {\n \"common.cancel\": \"Cancel\",\n \"common.confirm\": \"Confirm\",\n \"common.reset\": \"Reset\",\n \"common.apply\": \"Apply\",\n \"common.ok\": \"OK\",\n \"common.yes\": \"Yes\",\n \"common.no\": \"No\",\n \"common.all\": \"All\",\n \"common.buy\": \"Buy\",\n \"common.sell\": \"Sell\",\n \"common.long\": \"Long\",\n \"common.short\": \"Short\",\n \"common.edit\": \"Edit\",\n \"common.save\": \"Save\",\n \"common.add\": \"Add\",\n \"common.delete\": \"Delete\",\n \"common.tips\": \"Tips\",\n \"common.max\": \"Max\",\n \"common.download\": \"Download\",\n \"common.copy\": \"Copy\",\n \"common.copy.failed\": \"Copy failed\",\n \"common.copy.copied\": \"Copied to clipboard\",\n \"common.share\": \"Share\",\n \"common.export\": \"Export\",\n \"common.empty\": \"No data\",\n \"common.resolution.1s\": \"1s\",\n \"common.resolution.15s\": \"15s\",\n \"common.resolution.30s\": \"30s\",\n \"common.resolution.1m\": \"1m\",\n \"common.resolution.5m\": \"5m\",\n \"common.resolution.15m\": \"15m\",\n \"common.resolution.30m\": \"30m\",\n \"common.resolution.1h\": \"1h\",\n \"common.resolution.4h\": \"4h\",\n \"common.resolution.12h\": \"12h\",\n \"common.resolution.24h\": \"24h\",\n};\n","export const mediaTrack = {\n \"mediaTrack.tweets.translate.show\": \"Show Translation\",\n \"mediaTrack.tweets.translate.hide\": \"Hide Translation\",\n \"mediaTrack.tweets.expand\": \"Expand\",\n \"mediaTrack.tweets.collapse\": \"Collapse\",\n};\n","export const scaffold = {\n \"scaffold.draggableModal.snapToEdge\": \"Drag to edge to show side panel\",\n \"scaffold.draggablePanel.snapToModal\": \"Drag away to show floating modal\",\n \"scaffold.home\": \"Home\",\n};\n","export const tokens = {\n \"tokens.search.placeholder\": \"Search by token or CA...\",\n \"tokens.copied.address\": \"Token address copied to clipboard\",\n \"tokens.listHeader.token\": \"Token\",\n \"tokens.listHeader.priceHistories\": \"Price Histories\",\n \"tokens.listHeader.price\": \"Price\",\n \"tokens.listHeader.priceChange\": \"{{resolution}}%\",\n \"tokens.listHeader.marketCap\": \"Market Cap\",\n \"tokens.listHeader.liquidity\": \"Liquidity\",\n \"tokens.listHeader.volumes\": \"{{resolution}} Volumes\",\n \"tokens.listHeader.txs\": \"{{resolution}} TXNS\",\n \"tokens.listHeader.traders\": \"{{resolution}} Traders\",\n \"tokens.listHeader.tokenInfo\": \"Token Info\",\n \"tokens.listHeader.actions\": \"Actions\",\n \"tokens.listHeader.filter\": \"Filter\",\n \"tokens.listType.trending\": \"Trending\",\n \"tokens.listType.new\": \"New\",\n \"tokens.listType.stocks\": \"Stocks\",\n \"tokens.filters.protocols.title\": \"Protocols\",\n \"tokens.filters.protocols.selectAll\": \"Select All\",\n \"tokens.filters.protocols.unselectAll\": \"Unselect All\",\n \"tokens.filters.keywords.title\": \"Search Keywords\",\n \"tokens.filters.keywords.exclude.title\": \"Exclude Keywords\",\n \"tokens.filters.keywords.placeholder\": \"keyword1, keyword2...\",\n \"tokens.filters.stats.min\": \"Min\",\n \"tokens.filters.stats.max\": \"Max\",\n \"tokens.filters.stats.audits\": \"Audits\",\n \"tokens.filters.stats.audits.holders\": \"Holders Count\",\n \"tokens.filters.stats.audits.top10HoldingsRatio\": \"Top 10 Holders %\",\n \"tokens.filters.stats.audits.top100HoldingsRatio\": \"Top 100 Holders %\",\n \"tokens.filters.stats.audits.devHoldingsRatio\": \"Dev Holdings %\",\n \"tokens.filters.stats.metrics\": \"Metrics\",\n \"tokens.filters.stats.metrics.volumes\": \"{{resolution}} Volumes ($)\",\n \"tokens.filters.stats.metrics.txns\": \"{{resolution}} Transactions\",\n \"tokens.filters.stats.metrics.liquidity\": \"Liquidity ($)\",\n \"tokens.filters.stats.metrics.marketCap\": \"Market Cap ($)\",\n \"tokens.filters.modal.title\": \"Filters\",\n \"tokens.tokenInfo.holders\": \"Holders\",\n \"tokens.tokenInfo.top10HoldingsRatio\": \"Top 10 Holders\",\n \"tokens.tokenInfo.top100HoldingsRatio\": \"Top 100 Holders\",\n \"tokens.tokenInfo.devHoldingsRatio\": \"Dev Holders\",\n};\n","import { channels } from \"./module/channels\";\nimport { common } from \"./module/common\";\nimport { mediaTrack } from \"./module/mediaTrack\";\nimport { scaffold } from \"./module/scaffold\";\nimport { tokens } from \"./module/tokens\";\n\nexport const en = {\n ...common,\n ...mediaTrack,\n ...scaffold,\n ...tokens,\n ...channels,\n};\n","import { LocaleEnum } from \"../types\";\n\n/**\n * get locale path from pathname\n * @param pathname - pathname to get locale path\n * @param localeCodes - locale codes to check\n * @example\n * getLocalePathFromPathname('/en/perp/PERP_ETH_USDC') => 'en'\n * getLocalePathFromPathname('/perp/PERP_ETH_USDC') => null\n * getLocalePathFromPathname('/en/markets') => 'en'\n * getLocalePathFromPathname('/markets') => null\n */\nexport function getLocalePathFromPathname(\n pathname: string,\n localeCodes?: string[],\n) {\n const locale = pathname.split(\"/\")[1];\n localeCodes = localeCodes || Object.values(LocaleEnum);\n return localeCodes.includes(locale as LocaleEnum) ? locale : null;\n}\n","import { type LocaleCode, LocaleEnum } from \"../types\";\n\n/**\n * transform browser language to i18n locale codes\n * @param lang - browser language\n * @param localeCodes - locale codes to check\n * @param defaultLang - default locale code\n * @example\n * parseI18nLang('en-US') => 'en'\n * parseI18nLang('zh-CN') => 'zh'\n * parseI18nLang('zh-TW') => 'zh'\n * parseI18nLang('ja') => 'ja'\n * */\nexport function parseI18nLang(\n lang: string,\n localeCodes?: LocaleCode[],\n defaultLang?: LocaleCode,\n) {\n localeCodes = localeCodes || Object.values(LocaleEnum);\n defaultLang = defaultLang || LocaleEnum.en;\n\n const regex = /^([a-z]{2})/i;\n const match = lang?.match(regex);\n\n if (!match) {\n return defaultLang;\n }\n\n const matchLang = match[1];\n\n if (localeCodes.includes(lang)) {\n return lang;\n }\n\n if (localeCodes.includes(matchLang)) {\n return matchLang;\n }\n\n return defaultLang;\n}\n","import { getLocalePathFromPathname } from \"./getLocalePathFromPathname\";\n\n/**\n * remove lang prefix from pathname\n * @param pathname - pathname to remove lang prefix\n * @param localeCodes - locale codes to check\n * @example\n * removeLangPrefix('/en/perp/PERP_ETH_USDC') => '/perp/PERP_ETH_USDC'\n * removeLangPrefix('/en/markets') => '/markets'\n * removeLangPrefix('/perp/PERP_ETH_USDC') => '/perp/PERP_ETH_USDC'\n * removeLangPrefix('/markets') => '/markets'\n */\nexport function removeLangPrefix(pathname: string, localeCodes?: string[]) {\n const localePath = getLocalePathFromPathname(pathname, localeCodes);\n\n return localePath\n ? pathname.replace(new RegExp(`^/${localePath}(?=/)`), \"\")\n : pathname;\n}\n"]}
package/dist/server.mjs CHANGED
@@ -1,2 +1,2 @@
1
- export{createInstance,default as i18next}from'i18next';var r=(o=>(o.en="en",o.zh="zh",o.ja="ja",o.es="es",o.ko="ko",o.vi="vi",o.de="de",o.fr="fr",o.ru="ru",o.id="id",o.tr="tr",o.it="it",o.pt="pt",o.uk="uk",o.pl="pl",o.nl="nl",o))(r||{});var y=[{localCode:"en",displayName:"English"},{localCode:"zh",displayName:"\u4E2D\u6587"},{localCode:"ja",displayName:"\u65E5\u672C\u8A9E"},{localCode:"es",displayName:"Espa\xF1ol"},{localCode:"ko",displayName:"\uD55C\uAD6D\uC5B4"},{localCode:"vi",displayName:"Ti\u1EBFng Vi\u1EC7t"},{localCode:"de",displayName:"Deutsch"},{localCode:"fr",displayName:"Fran\xE7ais"},{localCode:"ru",displayName:"\u0420\u0443\u0441\u0441\u043A\u0438\u0439"},{localCode:"id",displayName:"Bahasa Indonesia"},{localCode:"tr",displayName:"T\xFCrk\xE7e"},{localCode:"it",displayName:"Italiano"},{localCode:"pt",displayName:"Portugu\xEAs"},{localCode:"uk",displayName:"\u0423\u043A\u0440\u0430\u0457\u043D\u0441\u044C\u043A\u0430"},{localCode:"pl",displayName:"Polski"},{localCode:"nl",displayName:"Nederlands"}],x="en",g="translation",C="liberfi_i18nLng",h="liberfi_i18nLng";var l={"common.cancel":"Cancel","common.confirm":"Confirm","common.reset":"Reset","common.apply":"Apply","common.ok":"OK","common.yes":"Yes","common.no":"No","common.all":"All","common.buy":"Buy","common.sell":"Sell","common.long":"Long","common.short":"Short","common.edit":"Edit","common.save":"Save","common.add":"Add","common.delete":"Delete","common.tips":"Tips","common.max":"Max","common.download":"Download","common.copy":"Copy","common.copy.failed":"Copy failed","common.copy.copied":"Copied to clipboard","common.share":"Share","common.export":"Export","common.empty":"No data","common.resolution.1s":"1s","common.resolution.15s":"15s","common.resolution.30s":"30s","common.resolution.1m":"1m","common.resolution.5m":"5m","common.resolution.15m":"15m","common.resolution.30m":"30m","common.resolution.1h":"1h","common.resolution.4h":"4h","common.resolution.12h":"12h","common.resolution.24h":"24h"};var a={"mediaTrack.title":"Media Track","mediaTrack.description":"Media Track"};var m={"tokens.copied.address":"Token address copied to clipboard","tokens.listHeader.token":"Token","tokens.listHeader.priceHistories":"Price Histories","tokens.listHeader.price":"Price","tokens.listHeader.priceChange":"{{resolution}}%","tokens.listHeader.marketCap":"Market Cap","tokens.listHeader.liquidity":"Liquidity","tokens.listHeader.volumes":"{{resolution}} Volumes","tokens.listHeader.txs":"{{resolution}} TXNS","tokens.listHeader.traders":"{{resolution}} Traders","tokens.listHeader.tokenInfo":"Token Info","tokens.listHeader.actions":"Actions","tokens.listHeader.filter":"Filter","tokens.listType.trending":"Trending","tokens.listType.new":"New","tokens.listType.stocks":"Stocks","tokens.filters.protocols.title":"Protocols","tokens.filters.protocols.selectAll":"Select All","tokens.filters.protocols.unselectAll":"Unselect All","tokens.filters.keywords.title":"Search Keywords","tokens.filters.keywords.exclude.title":"Exclude Keywords","tokens.filters.keywords.placeholder":"keyword1, keyword2...","tokens.filters.stats.min":"Min","tokens.filters.stats.max":"Max","tokens.filters.stats.audits":"Audits","tokens.filters.stats.audits.holders":"Holders Count","tokens.filters.stats.audits.top10HoldingsRatio":"Top 10 Holders %","tokens.filters.stats.audits.top100HoldingsRatio":"Top 100 Holders %","tokens.filters.stats.audits.devHoldingsRatio":"Dev Holdings %","tokens.filters.stats.metrics":"Metrics","tokens.filters.stats.metrics.volumes":"{{resolution}} Volumes ($)","tokens.filters.stats.metrics.txns":"{{resolution}} Transactions","tokens.filters.stats.metrics.liquidity":"Liquidity ($)","tokens.filters.stats.metrics.marketCap":"Market Cap ($)","tokens.filters.modal.title":"Filters","tokens.tokenInfo.holders":"Holders","tokens.tokenInfo.top10HoldingsRatio":"Top 10 Holders","tokens.tokenInfo.top100HoldingsRatio":"Top 100 Holders","tokens.tokenInfo.devHoldingsRatio":"Dev Holders"};var P={...l,...a,...m};function d(s,e){let t=s.split("/")[1];return e=e||Object.values(r),e.includes(t)?t:null}function b(s,e,t){e=e||Object.values(r),t=t||"en";let c=/^([a-z]{2})/i,n=s?.match(c);if(!n)return t;let i=n[1];return e.includes(s)?s:e.includes(i)?i:t}function F(s,e){let t=d(s,e);return t?s.replace(new RegExp(`^/${t}(?=/)`),""):s}export{r as LocaleEnum,y as defaultLanguages,x as defaultLng,g as defaultNS,P as en,d as getLocalePathFromPathname,h as i18nCookieKey,C as i18nLocalStorageKey,b as parseI18nLang,F as removeLangPrefix};//# sourceMappingURL=server.mjs.map
1
+ export{createInstance,default as i18next}from'i18next';var n=(o=>(o.en="en",o.zh="zh",o.ja="ja",o.es="es",o.ko="ko",o.vi="vi",o.de="de",o.fr="fr",o.ru="ru",o.id="id",o.tr="tr",o.it="it",o.pt="pt",o.uk="uk",o.pl="pl",o.nl="nl",o))(n||{});var x=[{localCode:"en",displayName:"English"},{localCode:"zh",displayName:"\u4E2D\u6587"},{localCode:"ja",displayName:"\u65E5\u672C\u8A9E"},{localCode:"es",displayName:"Espa\xF1ol"},{localCode:"ko",displayName:"\uD55C\uAD6D\uC5B4"},{localCode:"vi",displayName:"Ti\u1EBFng Vi\u1EC7t"},{localCode:"de",displayName:"Deutsch"},{localCode:"fr",displayName:"Fran\xE7ais"},{localCode:"ru",displayName:"\u0420\u0443\u0441\u0441\u043A\u0438\u0439"},{localCode:"id",displayName:"Bahasa Indonesia"},{localCode:"tr",displayName:"T\xFCrk\xE7e"},{localCode:"it",displayName:"Italiano"},{localCode:"pt",displayName:"Portugu\xEAs"},{localCode:"uk",displayName:"\u0423\u043A\u0440\u0430\u0457\u043D\u0441\u044C\u043A\u0430"},{localCode:"pl",displayName:"Polski"},{localCode:"nl",displayName:"Nederlands"}],h="en",C="translation",H="liberfi_i18nLng",T="liberfi_i18nLng";var l={"channels.forms.base.title":"Base Info","channels.forms.wallets.title":"Wallet Management","channels.forms.socials.title":"Social Medias"};var i={"common.cancel":"Cancel","common.confirm":"Confirm","common.reset":"Reset","common.apply":"Apply","common.ok":"OK","common.yes":"Yes","common.no":"No","common.all":"All","common.buy":"Buy","common.sell":"Sell","common.long":"Long","common.short":"Short","common.edit":"Edit","common.save":"Save","common.add":"Add","common.delete":"Delete","common.tips":"Tips","common.max":"Max","common.download":"Download","common.copy":"Copy","common.copy.failed":"Copy failed","common.copy.copied":"Copied to clipboard","common.share":"Share","common.export":"Export","common.empty":"No data","common.resolution.1s":"1s","common.resolution.15s":"15s","common.resolution.30s":"30s","common.resolution.1m":"1m","common.resolution.5m":"5m","common.resolution.15m":"15m","common.resolution.30m":"30m","common.resolution.1h":"1h","common.resolution.4h":"4h","common.resolution.12h":"12h","common.resolution.24h":"24h"};var d={"mediaTrack.tweets.translate.show":"Show Translation","mediaTrack.tweets.translate.hide":"Hide Translation","mediaTrack.tweets.expand":"Expand","mediaTrack.tweets.collapse":"Collapse"};var m={"scaffold.draggableModal.snapToEdge":"Drag to edge to show side panel","scaffold.draggablePanel.snapToModal":"Drag away to show floating modal","scaffold.home":"Home"};var c={"tokens.search.placeholder":"Search by token or CA...","tokens.copied.address":"Token address copied to clipboard","tokens.listHeader.token":"Token","tokens.listHeader.priceHistories":"Price Histories","tokens.listHeader.price":"Price","tokens.listHeader.priceChange":"{{resolution}}%","tokens.listHeader.marketCap":"Market Cap","tokens.listHeader.liquidity":"Liquidity","tokens.listHeader.volumes":"{{resolution}} Volumes","tokens.listHeader.txs":"{{resolution}} TXNS","tokens.listHeader.traders":"{{resolution}} Traders","tokens.listHeader.tokenInfo":"Token Info","tokens.listHeader.actions":"Actions","tokens.listHeader.filter":"Filter","tokens.listType.trending":"Trending","tokens.listType.new":"New","tokens.listType.stocks":"Stocks","tokens.filters.protocols.title":"Protocols","tokens.filters.protocols.selectAll":"Select All","tokens.filters.protocols.unselectAll":"Unselect All","tokens.filters.keywords.title":"Search Keywords","tokens.filters.keywords.exclude.title":"Exclude Keywords","tokens.filters.keywords.placeholder":"keyword1, keyword2...","tokens.filters.stats.min":"Min","tokens.filters.stats.max":"Max","tokens.filters.stats.audits":"Audits","tokens.filters.stats.audits.holders":"Holders Count","tokens.filters.stats.audits.top10HoldingsRatio":"Top 10 Holders %","tokens.filters.stats.audits.top100HoldingsRatio":"Top 100 Holders %","tokens.filters.stats.audits.devHoldingsRatio":"Dev Holdings %","tokens.filters.stats.metrics":"Metrics","tokens.filters.stats.metrics.volumes":"{{resolution}} Volumes ($)","tokens.filters.stats.metrics.txns":"{{resolution}} Transactions","tokens.filters.stats.metrics.liquidity":"Liquidity ($)","tokens.filters.stats.metrics.marketCap":"Market Cap ($)","tokens.filters.modal.title":"Filters","tokens.tokenInfo.holders":"Holders","tokens.tokenInfo.top10HoldingsRatio":"Top 10 Holders","tokens.tokenInfo.top100HoldingsRatio":"Top 100 Holders","tokens.tokenInfo.devHoldingsRatio":"Dev Holders"};var D={...i,...d,...m,...c,...l};function p(s,e){let t=s.split("/")[1];return e=e||Object.values(n),e.includes(t)?t:null}function q(s,e,t){e=e||Object.values(n),t=t||"en";let k=/^([a-z]{2})/i,r=s?.match(k);if(!r)return t;let a=r[1];return e.includes(s)?s:e.includes(a)?a:t}function B(s,e){let t=p(s,e);return t?s.replace(new RegExp(`^/${t}(?=/)`),""):s}export{n as LocaleEnum,x as defaultLanguages,h as defaultLng,C as defaultNS,D as en,p as getLocalePathFromPathname,T as i18nCookieKey,H as i18nLocalStorageKey,q as parseI18nLang,B as removeLangPrefix};//# sourceMappingURL=server.mjs.map
2
2
  //# sourceMappingURL=server.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/types.ts","../src/constant.ts","../src/locale/module/common.ts","../src/locale/module/mediaTrack.ts","../src/locale/module/tokens.ts","../src/locale/en.ts","../src/utils/getLocalePathFromPathname.ts","../src/utils/parseI18nLang.ts","../src/utils/removeLangPrefix.ts"],"names":["LocaleEnum","defaultLanguages","defaultLng","defaultNS","i18nLocalStorageKey","i18nCookieKey","common","mediaTrack","tokens","en","getLocalePathFromPathname","pathname","localeCodes","locale","parseI18nLang","lang","defaultLang","regex","match","matchLang","removeLangPrefix","localePath"],"mappings":"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","file":"server.mjs","sourcesContent":["// import the original type declarations\nimport \"i18next\";\n// import all namespaces (for the default language, only)\nimport { en } from \"./locale/en\";\n\nexport enum LocaleEnum {\n /** English */\n en = \"en\",\n /** Chinese */\n zh = \"zh\",\n /** Japanese */\n ja = \"ja\",\n /** Spanish */\n es = \"es\",\n /** Korean */\n ko = \"ko\",\n /** Vietnamese */\n vi = \"vi\",\n /** German */\n de = \"de\",\n /** French */\n fr = \"fr\",\n /** Russian */\n ru = \"ru\",\n /** Indonesian */\n id = \"id\",\n /** Turkish */\n tr = \"tr\",\n /** Italian */\n it = \"it\",\n /** Portuguese */\n pt = \"pt\",\n /** Ukrainian */\n uk = \"uk\",\n /** Polish */\n pl = \"pl\",\n /** Dutch */\n nl = \"nl\",\n}\n\nexport type LocaleCode = keyof typeof LocaleEnum | (string & {});\n\nexport type Language = {\n localCode: LocaleCode;\n displayName: string;\n};\n\nexport type ExtendLocaleMessages = Record<`extend.${string}`, string>;\n\nexport type LocaleMessages = typeof en & ExtendLocaleMessages;\n\n// eslint-disable-next-line @typescript-eslint/no-empty-object-type\nexport type Resources<T extends {} = {}> = {\n [key in LocaleCode]?: Partial<LocaleMessages & T>;\n};\n\n// https://www.i18next.com/overview/typescript#create-a-declaration-file\n// Enhance the input parameter intelliSense for the t function.\ndeclare module \"i18next\" {\n // Extend CustomTypeOptions\n interface CustomTypeOptions {\n // custom namespace type, if you changed it\n defaultNS: \"translation\";\n // custom resources type\n resources: {\n translation: LocaleMessages;\n };\n }\n}\n","import { Language, LocaleEnum } from \"./types\";\n\nexport const defaultLanguages: Language[] = [\n { localCode: LocaleEnum.en, displayName: \"English\" }, // English\n { localCode: LocaleEnum.zh, displayName: \"中文\" }, // Chinese\n { localCode: LocaleEnum.ja, displayName: \"日本語\" }, // Japanese\n { localCode: LocaleEnum.es, displayName: \"Español\" }, // Spanish\n { localCode: LocaleEnum.ko, displayName: \"한국어\" }, // Korean\n { localCode: LocaleEnum.vi, displayName: \"Tiếng Việt\" }, // Vietnamese\n { localCode: LocaleEnum.de, displayName: \"Deutsch\" }, // German\n { localCode: LocaleEnum.fr, displayName: \"Français\" }, // French\n { localCode: LocaleEnum.ru, displayName: \"Русский\" }, // Russian\n { localCode: LocaleEnum.id, displayName: \"Bahasa Indonesia\" }, // Indonesian\n { localCode: LocaleEnum.tr, displayName: \"Türkçe\" }, // Turkish\n { localCode: LocaleEnum.it, displayName: \"Italiano\" }, // Italian\n { localCode: LocaleEnum.pt, displayName: \"Português\" }, // Portuguese\n { localCode: LocaleEnum.uk, displayName: \"Українська\" }, // Ukrainian\n { localCode: LocaleEnum.pl, displayName: \"Polski\" }, // Polish\n { localCode: LocaleEnum.nl, displayName: \"Nederlands\" }, // Dutch\n];\n\nexport const defaultLng = LocaleEnum.en;\n\nexport const defaultNS = \"translation\";\n\nexport const i18nLocalStorageKey = \"liberfi_i18nLng\";\n\nexport const i18nCookieKey = \"liberfi_i18nLng\";\n","export const common = {\n \"common.cancel\": \"Cancel\",\n \"common.confirm\": \"Confirm\",\n \"common.reset\": \"Reset\",\n \"common.apply\": \"Apply\",\n \"common.ok\": \"OK\",\n \"common.yes\": \"Yes\",\n \"common.no\": \"No\",\n \"common.all\": \"All\",\n \"common.buy\": \"Buy\",\n \"common.sell\": \"Sell\",\n \"common.long\": \"Long\",\n \"common.short\": \"Short\",\n \"common.edit\": \"Edit\",\n \"common.save\": \"Save\",\n \"common.add\": \"Add\",\n \"common.delete\": \"Delete\",\n \"common.tips\": \"Tips\",\n \"common.max\": \"Max\",\n \"common.download\": \"Download\",\n \"common.copy\": \"Copy\",\n \"common.copy.failed\": \"Copy failed\",\n \"common.copy.copied\": \"Copied to clipboard\",\n \"common.share\": \"Share\",\n \"common.export\": \"Export\",\n \"common.empty\": \"No data\",\n \"common.resolution.1s\": \"1s\",\n \"common.resolution.15s\": \"15s\",\n \"common.resolution.30s\": \"30s\",\n \"common.resolution.1m\": \"1m\",\n \"common.resolution.5m\": \"5m\",\n \"common.resolution.15m\": \"15m\",\n \"common.resolution.30m\": \"30m\",\n \"common.resolution.1h\": \"1h\",\n \"common.resolution.4h\": \"4h\",\n \"common.resolution.12h\": \"12h\",\n \"common.resolution.24h\": \"24h\",\n};\n","export const mediaTrack = {\n \"mediaTrack.title\": \"Media Track\",\n \"mediaTrack.description\": \"Media Track\",\n};\n","export const tokens = {\n \"tokens.copied.address\": \"Token address copied to clipboard\",\n \"tokens.listHeader.token\": \"Token\",\n \"tokens.listHeader.priceHistories\": \"Price Histories\",\n \"tokens.listHeader.price\": \"Price\",\n \"tokens.listHeader.priceChange\": \"{{resolution}}%\",\n \"tokens.listHeader.marketCap\": \"Market Cap\",\n \"tokens.listHeader.liquidity\": \"Liquidity\",\n \"tokens.listHeader.volumes\": \"{{resolution}} Volumes\",\n \"tokens.listHeader.txs\": \"{{resolution}} TXNS\",\n \"tokens.listHeader.traders\": \"{{resolution}} Traders\",\n \"tokens.listHeader.tokenInfo\": \"Token Info\",\n \"tokens.listHeader.actions\": \"Actions\",\n \"tokens.listHeader.filter\": \"Filter\",\n \"tokens.listType.trending\": \"Trending\",\n \"tokens.listType.new\": \"New\",\n \"tokens.listType.stocks\": \"Stocks\",\n \"tokens.filters.protocols.title\": \"Protocols\",\n \"tokens.filters.protocols.selectAll\": \"Select All\",\n \"tokens.filters.protocols.unselectAll\": \"Unselect All\",\n \"tokens.filters.keywords.title\": \"Search Keywords\",\n \"tokens.filters.keywords.exclude.title\": \"Exclude Keywords\",\n \"tokens.filters.keywords.placeholder\": \"keyword1, keyword2...\",\n \"tokens.filters.stats.min\": \"Min\",\n \"tokens.filters.stats.max\": \"Max\",\n \"tokens.filters.stats.audits\": \"Audits\",\n \"tokens.filters.stats.audits.holders\": \"Holders Count\",\n \"tokens.filters.stats.audits.top10HoldingsRatio\": \"Top 10 Holders %\",\n \"tokens.filters.stats.audits.top100HoldingsRatio\": \"Top 100 Holders %\",\n \"tokens.filters.stats.audits.devHoldingsRatio\": \"Dev Holdings %\",\n \"tokens.filters.stats.metrics\": \"Metrics\",\n \"tokens.filters.stats.metrics.volumes\": \"{{resolution}} Volumes ($)\",\n \"tokens.filters.stats.metrics.txns\": \"{{resolution}} Transactions\",\n \"tokens.filters.stats.metrics.liquidity\": \"Liquidity ($)\",\n \"tokens.filters.stats.metrics.marketCap\": \"Market Cap ($)\",\n \"tokens.filters.modal.title\": \"Filters\",\n \"tokens.tokenInfo.holders\": \"Holders\",\n \"tokens.tokenInfo.top10HoldingsRatio\": \"Top 10 Holders\",\n \"tokens.tokenInfo.top100HoldingsRatio\": \"Top 100 Holders\",\n \"tokens.tokenInfo.devHoldingsRatio\": \"Dev Holders\",\n};\n","import { common } from \"./module/common\";\nimport { mediaTrack } from \"./module/mediaTrack\";\nimport { tokens } from \"./module/tokens\";\n\nexport const en = {\n ...common,\n ...mediaTrack,\n ...tokens,\n};\n","import { LocaleEnum } from \"../types\";\n\n/**\n * get locale path from pathname\n * @param pathname - pathname to get locale path\n * @param localeCodes - locale codes to check\n * @example\n * getLocalePathFromPathname('/en/perp/PERP_ETH_USDC') => 'en'\n * getLocalePathFromPathname('/perp/PERP_ETH_USDC') => null\n * getLocalePathFromPathname('/en/markets') => 'en'\n * getLocalePathFromPathname('/markets') => null\n */\nexport function getLocalePathFromPathname(\n pathname: string,\n localeCodes?: string[],\n) {\n const locale = pathname.split(\"/\")[1];\n localeCodes = localeCodes || Object.values(LocaleEnum);\n return localeCodes.includes(locale as LocaleEnum) ? locale : null;\n}\n","import { type LocaleCode, LocaleEnum } from \"../types\";\n\n/**\n * transform browser language to i18n locale codes\n * @param lang - browser language\n * @param localeCodes - locale codes to check\n * @param defaultLang - default locale code\n * @example\n * parseI18nLang('en-US') => 'en'\n * parseI18nLang('zh-CN') => 'zh'\n * parseI18nLang('zh-TW') => 'zh'\n * parseI18nLang('ja') => 'ja'\n * */\nexport function parseI18nLang(\n lang: string,\n localeCodes?: LocaleCode[],\n defaultLang?: LocaleCode,\n) {\n localeCodes = localeCodes || Object.values(LocaleEnum);\n defaultLang = defaultLang || LocaleEnum.en;\n\n const regex = /^([a-z]{2})/i;\n const match = lang?.match(regex);\n\n if (!match) {\n return defaultLang;\n }\n\n const matchLang = match[1];\n\n if (localeCodes.includes(lang)) {\n return lang;\n }\n\n if (localeCodes.includes(matchLang)) {\n return matchLang;\n }\n\n return defaultLang;\n}\n","import { getLocalePathFromPathname } from \"./getLocalePathFromPathname\";\n\n/**\n * remove lang prefix from pathname\n * @param pathname - pathname to remove lang prefix\n * @param localeCodes - locale codes to check\n * @example\n * removeLangPrefix('/en/perp/PERP_ETH_USDC') => '/perp/PERP_ETH_USDC'\n * removeLangPrefix('/en/markets') => '/markets'\n * removeLangPrefix('/perp/PERP_ETH_USDC') => '/perp/PERP_ETH_USDC'\n * removeLangPrefix('/markets') => '/markets'\n */\nexport function removeLangPrefix(pathname: string, localeCodes?: string[]) {\n const localePath = getLocalePathFromPathname(pathname, localeCodes);\n\n return localePath\n ? pathname.replace(new RegExp(`^/${localePath}(?=/)`), \"\")\n : pathname;\n}\n"]}
1
+ {"version":3,"sources":["../src/types.ts","../src/constant.ts","../src/locale/module/channels.ts","../src/locale/module/common.ts","../src/locale/module/mediaTrack.ts","../src/locale/module/scaffold.ts","../src/locale/module/tokens.ts","../src/locale/en.ts","../src/utils/getLocalePathFromPathname.ts","../src/utils/parseI18nLang.ts","../src/utils/removeLangPrefix.ts"],"names":["LocaleEnum","defaultLanguages","defaultLng","defaultNS","i18nLocalStorageKey","i18nCookieKey","channels","common","mediaTrack","scaffold","tokens","en","getLocalePathFromPathname","pathname","localeCodes","locale","parseI18nLang","lang","defaultLang","regex","match","matchLang","removeLangPrefix","localePath"],"mappings":"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","file":"server.mjs","sourcesContent":["// import the original type declarations\nimport \"i18next\";\n// import all namespaces (for the default language, only)\nimport { en } from \"./locale/en\";\n\nexport enum LocaleEnum {\n /** English */\n en = \"en\",\n /** Chinese */\n zh = \"zh\",\n /** Japanese */\n ja = \"ja\",\n /** Spanish */\n es = \"es\",\n /** Korean */\n ko = \"ko\",\n /** Vietnamese */\n vi = \"vi\",\n /** German */\n de = \"de\",\n /** French */\n fr = \"fr\",\n /** Russian */\n ru = \"ru\",\n /** Indonesian */\n id = \"id\",\n /** Turkish */\n tr = \"tr\",\n /** Italian */\n it = \"it\",\n /** Portuguese */\n pt = \"pt\",\n /** Ukrainian */\n uk = \"uk\",\n /** Polish */\n pl = \"pl\",\n /** Dutch */\n nl = \"nl\",\n}\n\nexport type LocaleCode = keyof typeof LocaleEnum | (string & {});\n\nexport type Language = {\n localCode: LocaleCode;\n displayName: string;\n};\n\nexport type ExtendLocaleMessages = Record<`extend.${string}`, string>;\n\nexport type LocaleMessages = typeof en & ExtendLocaleMessages;\n\n// eslint-disable-next-line @typescript-eslint/no-empty-object-type\nexport type Resources<T extends {} = {}> = {\n [key in LocaleCode]?: Partial<LocaleMessages & T>;\n};\n\n// https://www.i18next.com/overview/typescript#create-a-declaration-file\n// Enhance the input parameter intelliSense for the t function.\ndeclare module \"i18next\" {\n // Extend CustomTypeOptions\n interface CustomTypeOptions {\n // custom namespace type, if you changed it\n defaultNS: \"translation\";\n // custom resources type\n resources: {\n translation: LocaleMessages;\n };\n }\n}\n","import { Language, LocaleEnum } from \"./types\";\n\nexport const defaultLanguages: Language[] = [\n { localCode: LocaleEnum.en, displayName: \"English\" }, // English\n { localCode: LocaleEnum.zh, displayName: \"中文\" }, // Chinese\n { localCode: LocaleEnum.ja, displayName: \"日本語\" }, // Japanese\n { localCode: LocaleEnum.es, displayName: \"Español\" }, // Spanish\n { localCode: LocaleEnum.ko, displayName: \"한국어\" }, // Korean\n { localCode: LocaleEnum.vi, displayName: \"Tiếng Việt\" }, // Vietnamese\n { localCode: LocaleEnum.de, displayName: \"Deutsch\" }, // German\n { localCode: LocaleEnum.fr, displayName: \"Français\" }, // French\n { localCode: LocaleEnum.ru, displayName: \"Русский\" }, // Russian\n { localCode: LocaleEnum.id, displayName: \"Bahasa Indonesia\" }, // Indonesian\n { localCode: LocaleEnum.tr, displayName: \"Türkçe\" }, // Turkish\n { localCode: LocaleEnum.it, displayName: \"Italiano\" }, // Italian\n { localCode: LocaleEnum.pt, displayName: \"Português\" }, // Portuguese\n { localCode: LocaleEnum.uk, displayName: \"Українська\" }, // Ukrainian\n { localCode: LocaleEnum.pl, displayName: \"Polski\" }, // Polish\n { localCode: LocaleEnum.nl, displayName: \"Nederlands\" }, // Dutch\n];\n\nexport const defaultLng = LocaleEnum.en;\n\nexport const defaultNS = \"translation\";\n\nexport const i18nLocalStorageKey = \"liberfi_i18nLng\";\n\nexport const i18nCookieKey = \"liberfi_i18nLng\";\n","export const channels = {\n \"channels.forms.base.title\": \"Base Info\",\n \"channels.forms.wallets.title\": \"Wallet Management\",\n \"channels.forms.socials.title\": \"Social Medias\",\n};\n","export const common = {\n \"common.cancel\": \"Cancel\",\n \"common.confirm\": \"Confirm\",\n \"common.reset\": \"Reset\",\n \"common.apply\": \"Apply\",\n \"common.ok\": \"OK\",\n \"common.yes\": \"Yes\",\n \"common.no\": \"No\",\n \"common.all\": \"All\",\n \"common.buy\": \"Buy\",\n \"common.sell\": \"Sell\",\n \"common.long\": \"Long\",\n \"common.short\": \"Short\",\n \"common.edit\": \"Edit\",\n \"common.save\": \"Save\",\n \"common.add\": \"Add\",\n \"common.delete\": \"Delete\",\n \"common.tips\": \"Tips\",\n \"common.max\": \"Max\",\n \"common.download\": \"Download\",\n \"common.copy\": \"Copy\",\n \"common.copy.failed\": \"Copy failed\",\n \"common.copy.copied\": \"Copied to clipboard\",\n \"common.share\": \"Share\",\n \"common.export\": \"Export\",\n \"common.empty\": \"No data\",\n \"common.resolution.1s\": \"1s\",\n \"common.resolution.15s\": \"15s\",\n \"common.resolution.30s\": \"30s\",\n \"common.resolution.1m\": \"1m\",\n \"common.resolution.5m\": \"5m\",\n \"common.resolution.15m\": \"15m\",\n \"common.resolution.30m\": \"30m\",\n \"common.resolution.1h\": \"1h\",\n \"common.resolution.4h\": \"4h\",\n \"common.resolution.12h\": \"12h\",\n \"common.resolution.24h\": \"24h\",\n};\n","export const mediaTrack = {\n \"mediaTrack.tweets.translate.show\": \"Show Translation\",\n \"mediaTrack.tweets.translate.hide\": \"Hide Translation\",\n \"mediaTrack.tweets.expand\": \"Expand\",\n \"mediaTrack.tweets.collapse\": \"Collapse\",\n};\n","export const scaffold = {\n \"scaffold.draggableModal.snapToEdge\": \"Drag to edge to show side panel\",\n \"scaffold.draggablePanel.snapToModal\": \"Drag away to show floating modal\",\n \"scaffold.home\": \"Home\",\n};\n","export const tokens = {\n \"tokens.search.placeholder\": \"Search by token or CA...\",\n \"tokens.copied.address\": \"Token address copied to clipboard\",\n \"tokens.listHeader.token\": \"Token\",\n \"tokens.listHeader.priceHistories\": \"Price Histories\",\n \"tokens.listHeader.price\": \"Price\",\n \"tokens.listHeader.priceChange\": \"{{resolution}}%\",\n \"tokens.listHeader.marketCap\": \"Market Cap\",\n \"tokens.listHeader.liquidity\": \"Liquidity\",\n \"tokens.listHeader.volumes\": \"{{resolution}} Volumes\",\n \"tokens.listHeader.txs\": \"{{resolution}} TXNS\",\n \"tokens.listHeader.traders\": \"{{resolution}} Traders\",\n \"tokens.listHeader.tokenInfo\": \"Token Info\",\n \"tokens.listHeader.actions\": \"Actions\",\n \"tokens.listHeader.filter\": \"Filter\",\n \"tokens.listType.trending\": \"Trending\",\n \"tokens.listType.new\": \"New\",\n \"tokens.listType.stocks\": \"Stocks\",\n \"tokens.filters.protocols.title\": \"Protocols\",\n \"tokens.filters.protocols.selectAll\": \"Select All\",\n \"tokens.filters.protocols.unselectAll\": \"Unselect All\",\n \"tokens.filters.keywords.title\": \"Search Keywords\",\n \"tokens.filters.keywords.exclude.title\": \"Exclude Keywords\",\n \"tokens.filters.keywords.placeholder\": \"keyword1, keyword2...\",\n \"tokens.filters.stats.min\": \"Min\",\n \"tokens.filters.stats.max\": \"Max\",\n \"tokens.filters.stats.audits\": \"Audits\",\n \"tokens.filters.stats.audits.holders\": \"Holders Count\",\n \"tokens.filters.stats.audits.top10HoldingsRatio\": \"Top 10 Holders %\",\n \"tokens.filters.stats.audits.top100HoldingsRatio\": \"Top 100 Holders %\",\n \"tokens.filters.stats.audits.devHoldingsRatio\": \"Dev Holdings %\",\n \"tokens.filters.stats.metrics\": \"Metrics\",\n \"tokens.filters.stats.metrics.volumes\": \"{{resolution}} Volumes ($)\",\n \"tokens.filters.stats.metrics.txns\": \"{{resolution}} Transactions\",\n \"tokens.filters.stats.metrics.liquidity\": \"Liquidity ($)\",\n \"tokens.filters.stats.metrics.marketCap\": \"Market Cap ($)\",\n \"tokens.filters.modal.title\": \"Filters\",\n \"tokens.tokenInfo.holders\": \"Holders\",\n \"tokens.tokenInfo.top10HoldingsRatio\": \"Top 10 Holders\",\n \"tokens.tokenInfo.top100HoldingsRatio\": \"Top 100 Holders\",\n \"tokens.tokenInfo.devHoldingsRatio\": \"Dev Holders\",\n};\n","import { channels } from \"./module/channels\";\nimport { common } from \"./module/common\";\nimport { mediaTrack } from \"./module/mediaTrack\";\nimport { scaffold } from \"./module/scaffold\";\nimport { tokens } from \"./module/tokens\";\n\nexport const en = {\n ...common,\n ...mediaTrack,\n ...scaffold,\n ...tokens,\n ...channels,\n};\n","import { LocaleEnum } from \"../types\";\n\n/**\n * get locale path from pathname\n * @param pathname - pathname to get locale path\n * @param localeCodes - locale codes to check\n * @example\n * getLocalePathFromPathname('/en/perp/PERP_ETH_USDC') => 'en'\n * getLocalePathFromPathname('/perp/PERP_ETH_USDC') => null\n * getLocalePathFromPathname('/en/markets') => 'en'\n * getLocalePathFromPathname('/markets') => null\n */\nexport function getLocalePathFromPathname(\n pathname: string,\n localeCodes?: string[],\n) {\n const locale = pathname.split(\"/\")[1];\n localeCodes = localeCodes || Object.values(LocaleEnum);\n return localeCodes.includes(locale as LocaleEnum) ? locale : null;\n}\n","import { type LocaleCode, LocaleEnum } from \"../types\";\n\n/**\n * transform browser language to i18n locale codes\n * @param lang - browser language\n * @param localeCodes - locale codes to check\n * @param defaultLang - default locale code\n * @example\n * parseI18nLang('en-US') => 'en'\n * parseI18nLang('zh-CN') => 'zh'\n * parseI18nLang('zh-TW') => 'zh'\n * parseI18nLang('ja') => 'ja'\n * */\nexport function parseI18nLang(\n lang: string,\n localeCodes?: LocaleCode[],\n defaultLang?: LocaleCode,\n) {\n localeCodes = localeCodes || Object.values(LocaleEnum);\n defaultLang = defaultLang || LocaleEnum.en;\n\n const regex = /^([a-z]{2})/i;\n const match = lang?.match(regex);\n\n if (!match) {\n return defaultLang;\n }\n\n const matchLang = match[1];\n\n if (localeCodes.includes(lang)) {\n return lang;\n }\n\n if (localeCodes.includes(matchLang)) {\n return matchLang;\n }\n\n return defaultLang;\n}\n","import { getLocalePathFromPathname } from \"./getLocalePathFromPathname\";\n\n/**\n * remove lang prefix from pathname\n * @param pathname - pathname to remove lang prefix\n * @param localeCodes - locale codes to check\n * @example\n * removeLangPrefix('/en/perp/PERP_ETH_USDC') => '/perp/PERP_ETH_USDC'\n * removeLangPrefix('/en/markets') => '/markets'\n * removeLangPrefix('/perp/PERP_ETH_USDC') => '/perp/PERP_ETH_USDC'\n * removeLangPrefix('/markets') => '/markets'\n */\nexport function removeLangPrefix(pathname: string, localeCodes?: string[]) {\n const localePath = getLocalePathFromPathname(pathname, localeCodes);\n\n return localePath\n ? pathname.replace(new RegExp(`^/${localePath}(?=/)`), \"\")\n : pathname;\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@liberfi.io/i18n",
3
- "version": "0.1.4",
3
+ "version": "0.1.6",
4
4
  "description": "Internationalization for Liberfi React SDK",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.mjs",