nuxt-i18n-micro 3.26.0 → 3.28.0
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/client/200.html +1 -1
- package/dist/client/404.html +1 -1
- package/dist/client/_nuxt/{p3h4sA5-.js → 310ILlAI.js} +1 -1
- package/dist/client/_nuxt/{Bwak6g3b.js → B-YzqMkr.js} +2 -2
- package/dist/client/_nuxt/builds/latest.json +1 -1
- package/dist/client/_nuxt/builds/meta/474d10ab-3098-4ac2-b6bf-953a2bab350d.json +1 -0
- package/dist/client/_nuxt/{entry.CJGrD2VA.css → entry.DYT8mjOq.css} +1 -1
- package/dist/client/_nuxt/error-404.BSWsfFTk.css +1 -0
- package/dist/client/_nuxt/error-500.D5pBYfcl.css +1 -0
- package/dist/client/_nuxt/{DyIrbWYh.js → h3a7H7XS.js} +1 -1
- package/dist/client/index.html +1 -1
- package/dist/module.json +1 -1
- package/dist/module.mjs +36 -7
- package/dist/runtime/devtools/bridge.d.ts +11 -0
- package/dist/runtime/devtools/bridge.js +8 -0
- package/dist/runtime/devtools/vue-devtools.d.ts +18 -0
- package/dist/runtime/devtools/vue-devtools.js +261 -0
- package/dist/runtime/plugins/01.plugin.js +9 -0
- package/dist/runtime/plugins/04.vue-devtools.d.ts +2 -0
- package/dist/runtime/plugins/04.vue-devtools.js +60 -0
- package/dist/runtime/utils/nuxt-i18n.d.ts +24 -2
- package/dist/runtime/utils/nuxt-i18n.js +72 -7
- package/package.json +24 -23
- package/dist/client/_nuxt/builds/meta/24f3c578-f02b-41bc-953a-c7ff7b504d56.json +0 -1
- package/dist/client/_nuxt/error-404.Cr1POox6.css +0 -1
- package/dist/client/_nuxt/error-500.BcWSpGYy.css +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"id":"
|
|
1
|
+
{"id":"474d10ab-3098-4ac2-b6bf-953a2bab350d","timestamp":1785940941724}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"id":"474d10ab-3098-4ac2-b6bf-953a2bab350d","timestamp":1785940941724,"prerendered":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
:root{--nui-c-context:125,125,125}html{background-color:#fff}html.dark{color:#fff;--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark;background-color:#151515}::selection{background:#8884}.shiki .line{width:100%;display:inline-block;position:relative}.shiki.diff .line>span{filter:saturate(.75);opacity:.75}.shiki.diff .line-added,.shiki.diff .line-removed{scroll-margin:5em}.shiki.diff .line-added>span,.shiki.diff .line-removed>span{position:inherit;z-index:100;scroll-margin:20px;opacity:1!important}.shiki.diff .line-added>span{color:#218c3b!important}.shiki.diff .line-removed>span{color:#d15547!important}.shiki .line-added:after{background-color:#43885420}.shiki .line-added:after,.shiki .line-removed:after{content:"";display:block;position:absolute;inset:0}.shiki .line-removed:after{background-color:#8f4c3926}::view-transition-new(root){mix-blend-mode:normal;animation:none}::view-transition-old(root){mix-blend-mode:normal;animation:none}::view-transition-old(root){z-index:1}::view-transition-new(root){z-index:2147483646}.dark::view-transition-old(root){z-index:2147483646}.dark::view-transition-new(root){z-index:1}*,:after,:before{box-sizing:border-box;border-style:solid;border-width:0
|
|
1
|
+
:root{--nui-c-context:125,125,125}html{background-color:#fff}html.dark{color:#fff;--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark;background-color:#151515}::selection{background:#8884}.shiki .line{width:100%;display:inline-block;position:relative}.shiki.diff .line>span{filter:saturate(.75);opacity:.75}.shiki.diff .line-added,.shiki.diff .line-removed{scroll-margin:5em}.shiki.diff .line-added>span,.shiki.diff .line-removed>span{position:inherit;z-index:100;scroll-margin:20px;opacity:1!important}.shiki.diff .line-added>span{color:#218c3b!important}.shiki.diff .line-removed>span{color:#d15547!important}.shiki .line-added:after{background-color:#43885420}.shiki .line-added:after,.shiki .line-removed:after{content:"";display:block;position:absolute;inset:0}.shiki .line-removed:after{background-color:#8f4c3926}::view-transition-new(root){mix-blend-mode:normal;animation:none}::view-transition-old(root){mix-blend-mode:normal;animation:none}::view-transition-old(root){z-index:1}::view-transition-new(root){z-index:2147483646}.dark::view-transition-old(root){z-index:2147483646}.dark::view-transition-new(root){z-index:1}*,:after,:before{border-color:var(--un-default-border-color,#e5e7eb);box-sizing:border-box;border-style:solid;border-width:0}:after,:before{--un-content:""}:host,html{-webkit-text-size-adjust:100%;font-feature-settings:normal;font-variation-settings:normal;tab-size:4;-webkit-tap-highlight-color:transparent;font-family:ui-sans-serif,system-ui,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;line-height:1.5}body{line-height:inherit;margin:0}hr{color:inherit;border-top-width:1px;height:0}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,pre,samp{font-feature-settings:normal;font-variation-settings:normal;font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{border-collapse:collapse;border-color:inherit;text-indent:0}button,input,optgroup,select,textarea{color:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-family:inherit;font-size:100%;font-weight:inherit;line-height:inherit;margin:0;padding:0}button,select{text-transform:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button;background-color:#0000;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dd,dl,figure,h1,h2,h3,h4,h5,h6,hr,p,pre{margin:0}fieldset{margin:0;padding:0}legend{padding:0}menu,ol,ul{margin:0;padding:0;list-style:none}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder{color:#9ca3af;opacity:1}textarea::-moz-placeholder{color:#9ca3af;opacity:1}input::placeholder,textarea::placeholder{color:#9ca3af;opacity:1}[role=button],button{cursor:pointer}:disabled{cursor:default}audio,canvas,embed,iframe,img,object,svg,video{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}[hidden]:where(:not([hidden=until-found])){display:none}@font-face{font-display:swap;font-family:DM Mono;font-style:normal;font-weight:400;src:url(https://fonts.gstatic.com/s/dmmono/v16/aFTU7PB1QTsUX8KYthSQBK6PYK3EXw.woff2)format("woff2");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-display:swap;font-family:DM Mono;font-style:normal;font-weight:400;src:url(https://fonts.gstatic.com/s/dmmono/v16/aFTU7PB1QTsUX8KYthqQBK6PYK0.woff2)format("woff2");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-display:swap;font-family:DM Sans;font-style:normal;font-weight:400;src:url(https://fonts.gstatic.com/s/dmsans/v17/rP2tp2ywxg089UriI5-g4vlH9VoD8CmcqZG40F9JadbnoEwAopxRR232RmYJp8I5zzw.woff2)format("woff2");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-display:swap;font-family:DM Sans;font-style:normal;font-weight:400;src:url(https://fonts.gstatic.com/s/dmsans/v17/rP2tp2ywxg089UriI5-g4vlH9VoD8CmcqZG40F9JadbnoEwAopxRSW32RmYJp8I5.woff2)format("woff2");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}*,:after,:before,::backdrop{--un-rotate:0;--un-rotate-x:0;--un-rotate-y:0;--un-rotate-z:0;--un-scale-x:1;--un-scale-y:1;--un-scale-z:1;--un-skew-x:0;--un-skew-y:0;--un-translate-x:0;--un-translate-y:0;--un-translate-z:0;--un-pan-x: ;--un-pan-y: ;--un-pinch-zoom: ;--un-scroll-snap-strictness:proximity;--un-ordinal: ;--un-slashed-zero: ;--un-numeric-figure: ;--un-numeric-spacing: ;--un-numeric-fraction: ;--un-border-spacing-x:0;--un-border-spacing-y:0;--un-ring-offset-shadow:0 0 transparent;--un-ring-shadow:0 0 transparent;--un-shadow-inset: ;--un-shadow:0 0 transparent;--un-ring-inset: ;--un-ring-offset-width:0px;--un-ring-offset-color:#fff;--un-ring-width:0px;--un-ring-color:#93c5fd80;--un-blur: ;--un-brightness: ;--un-contrast: ;--un-drop-shadow: ;--un-grayscale: ;--un-hue-rotate: ;--un-invert: ;--un-saturate: ;--un-sepia: ;--un-backdrop-blur: ;--un-backdrop-brightness: ;--un-backdrop-contrast: ;--un-backdrop-grayscale: ;--un-backdrop-hue-rotate: ;--un-backdrop-invert: ;--un-backdrop-opacity: ;--un-backdrop-saturate: ;--un-backdrop-sepia: }.container{width:100%}@media (width>=640px){.container{max-width:640px}}@media (width>=768px){.container{max-width:768px}}@media (width>=1024px){.container{max-width:1024px}}@media (width>=1280px){.container{max-width:1280px}}@media (width>=1536px){.container{max-width:1536px}}.grid{display:grid}.mb-2{margin-bottom:.5rem}.mb-4{margin-bottom:1rem}.max-w-520px{max-width:520px}.min-h-screen{min-height:100vh}.w-full{width:100%}.flex{display:flex}.place-content-center{place-content:center}.items-center{align-items:center}.justify-center{justify-content:center}.overflow-hidden{overflow:hidden}.bg-white{--un-bg-opacity:1;background-color:rgb(255 255 255/var(--un-bg-opacity))}.dark .dark\:bg-\[\#020420\]{--un-bg-opacity:1;background-color:rgb(2 4 32/var(--un-bg-opacity))}.px-2{padding-left:.5rem;padding-right:.5rem}.text-center{text-align:center}.text-\[80px\]{font-size:80px}.text-2xl{font-size:1.5rem;line-height:2rem}.text-sm{font-size:.875rem;line-height:1.25rem}.dark .dark\:text-white{--un-text-opacity:1;color:rgb(255 255 255/var(--un-text-opacity))}.text-\[\#020420\]{--un-text-opacity:1;color:rgb(2 4 32/var(--un-text-opacity))}.text-\[\#64748B\]{--un-text-opacity:1;color:rgb(100 116 139/var(--un-text-opacity))}.hover\:text-\[\#00DC82\]:hover{--un-text-opacity:1;color:rgb(0 220 130/var(--un-text-opacity))}.font-medium{font-weight:500}.font-semibold{font-weight:600}.leading-none{line-height:1}.tracking-wide{letter-spacing:.025em}.font-sans{font-family:DM Sans,ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji}.tabular-nums{--un-numeric-spacing:tabular-nums;font-variant-numeric:var(--un-ordinal) var(--un-slashed-zero) var(--un-numeric-figure) var(--un-numeric-spacing) var(--un-numeric-fraction)}.underline{text-decoration-line:underline}.underline-offset-3{text-underline-offset:3px}.antialiased{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}@media (width>=640px){.sm\:text-\[110px\]{font-size:110px}.sm\:text-3xl{font-size:1.875rem;line-height:2.25rem}}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.grid[data-v-4d1e665c]{display:grid}.mb-2[data-v-4d1e665c]{margin-bottom:.5rem}.mb-4[data-v-4d1e665c]{margin-bottom:1rem}.max-w-520px[data-v-4d1e665c]{max-width:520px}.min-h-screen[data-v-4d1e665c]{min-height:100vh}.w-full[data-v-4d1e665c]{width:100%}.flex[data-v-4d1e665c]{display:flex}.place-content-center[data-v-4d1e665c]{place-content:center}.items-center[data-v-4d1e665c]{align-items:center}.justify-center[data-v-4d1e665c]{justify-content:center}.overflow-hidden[data-v-4d1e665c]{overflow:hidden}.bg-white[data-v-4d1e665c]{--un-bg-opacity:1;background-color:rgb(255 255 255/var(--un-bg-opacity))}.px-2[data-v-4d1e665c]{padding-left:.5rem;padding-right:.5rem}.text-center[data-v-4d1e665c]{text-align:center}.text-\[80px\][data-v-4d1e665c]{font-size:80px}.text-2xl[data-v-4d1e665c]{font-size:1.5rem;line-height:2rem}.text-sm[data-v-4d1e665c]{font-size:.875rem;line-height:1.25rem}.text-\[\#020420\][data-v-4d1e665c]{--un-text-opacity:1;color:rgb(2 4 32/var(--un-text-opacity))}.text-\[\#64748B\][data-v-4d1e665c]{--un-text-opacity:1;color:rgb(100 116 139/var(--un-text-opacity))}.hover\:text-\[\#00DC82\][data-v-4d1e665c]:hover{--un-text-opacity:1;color:rgb(0 220 130/var(--un-text-opacity))}.font-medium[data-v-4d1e665c]{font-weight:500}.font-semibold[data-v-4d1e665c]{font-weight:600}.leading-none[data-v-4d1e665c]{line-height:1}.tracking-wide[data-v-4d1e665c]{letter-spacing:.025em}.font-sans[data-v-4d1e665c]{font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji}.tabular-nums[data-v-4d1e665c]{--un-numeric-spacing:tabular-nums;font-variant-numeric:var(--un-ordinal) var(--un-slashed-zero) var(--un-numeric-figure) var(--un-numeric-spacing) var(--un-numeric-fraction)}.underline[data-v-4d1e665c]{text-decoration-line:underline}.underline-offset-3[data-v-4d1e665c]{text-underline-offset:3px}.antialiased[data-v-4d1e665c]{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}@media (prefers-color-scheme:dark){.dark\:bg-\[\#020420\][data-v-4d1e665c]{--un-bg-opacity:1;background-color:rgb(2 4 32/var(--un-bg-opacity))}.dark\:text-white[data-v-4d1e665c]{--un-text-opacity:1;color:rgb(255 255 255/var(--un-text-opacity))}}@media (width>=640px){.sm\:text-\[110px\][data-v-4d1e665c]{font-size:110px}.sm\:text-3xl[data-v-4d1e665c]{font-size:1.875rem;line-height:2.25rem}}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.grid[data-v-0954b774]{display:grid}.mb-2[data-v-0954b774]{margin-bottom:.5rem}.mb-4[data-v-0954b774]{margin-bottom:1rem}.max-w-520px[data-v-0954b774]{max-width:520px}.min-h-screen[data-v-0954b774]{min-height:100vh}.place-content-center[data-v-0954b774]{place-content:center}.overflow-hidden[data-v-0954b774]{overflow:hidden}.bg-white[data-v-0954b774]{--un-bg-opacity:1;background-color:rgb(255 255 255/var(--un-bg-opacity))}.px-2[data-v-0954b774]{padding-left:.5rem;padding-right:.5rem}.text-center[data-v-0954b774]{text-align:center}.text-\[80px\][data-v-0954b774]{font-size:80px}.text-2xl[data-v-0954b774]{font-size:1.5rem;line-height:2rem}.text-\[\#020420\][data-v-0954b774]{--un-text-opacity:1;color:rgb(2 4 32/var(--un-text-opacity))}.text-\[\#64748B\][data-v-0954b774]{--un-text-opacity:1;color:rgb(100 116 139/var(--un-text-opacity))}.font-semibold[data-v-0954b774]{font-weight:600}.leading-none[data-v-0954b774]{line-height:1}.tracking-wide[data-v-0954b774]{letter-spacing:.025em}.font-sans[data-v-0954b774]{font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji}.tabular-nums[data-v-0954b774]{--un-numeric-spacing:tabular-nums;font-variant-numeric:var(--un-ordinal) var(--un-slashed-zero) var(--un-numeric-figure) var(--un-numeric-spacing) var(--un-numeric-fraction)}.antialiased[data-v-0954b774]{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}@media (prefers-color-scheme:dark){.dark\:bg-\[\#020420\][data-v-0954b774]{--un-bg-opacity:1;background-color:rgb(2 4 32/var(--un-bg-opacity))}.dark\:text-white[data-v-0954b774]{--un-text-opacity:1;color:rgb(255 255 255/var(--un-text-opacity))}}@media (width>=640px){.sm\:text-\[110px\][data-v-0954b774]{font-size:110px}.sm\:text-3xl[data-v-0954b774]{font-size:1.875rem;line-height:2.25rem}}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{$ as e,A as t,D as n,I as r,J as i,N as a,O as o,P as s,S as c,St as l,W as u,X as d,_ as f,at as p,ct as m,it as h,q as g,v as _,z as v}from"./DBXvRcU1.js";import{n as y,t as b}from"./DbtvxgAm.js";import{a as x,c as S,d as C,f as w,i as T,l as E,n as D,o as O,p as k,r as A,s as j,t as M,u as N}from"#entry";async function P(e,t=j()){let{path:n,matched:r}=t.resolve(e);if(!r.length||(t._routePreloaded||=new Set,t._routePreloaded.has(n)))return;let i=t._preloadPromises||=[];if(i.length>4)return Promise.all(i).then(()=>P(e,t));t._routePreloaded.add(n);for(let e of r){let t=e.components?.default;if(typeof t!=`function`)continue;let n=Promise.resolve(t()).catch(()=>{}).finally(()=>i.splice(i.indexOf(n),1));i.push(n)}await Promise.all(i)}var F=(...e)=>e.find(e=>e!==void 0);function I(e){let t=e.replace(/[\u0000-\u001F\s]+/g,``);for(;t.toLowerCase().startsWith(`view-source:`);)t=t.slice(12);let n=t.indexOf(`:`);return n>0&&E(t.slice(0,n+1))?null:e}function L(e){let t=e.componentName||`NuxtLink`;function i(e){return typeof e==`string`&&e.startsWith(`#`)}function a(t,n,r){let i=r??e.trailingSlash;if(!t||i!==`append`&&i!==`remove`)return t;if(typeof t==`string`)return z(t,i);let a=`path`in t&&t.path!==void 0?t.path:n(t).path;return{...t,name:void 0,path:z(a,i)}}function o(t){let r=j(),o=_(),s=n(()=>!!m(t.target)&&m(t.target)!==`_self`),c=n(()=>{let e=m(t.to)||m(t.href)||``;return typeof e==`string`&&S(e,{acceptRelative:!0})}),l=d(`RouterLink`),u=l&&typeof l!=`string`?l.useLink:void 0,f=n(()=>{if(m(t.external))return!0;let e=m(t.to)||m(t.href)||``;return typeof e==`object`?!1:e===``||c.value}),p=n(()=>{let e=m(t.to)||m(t.href)||``;return f.value?e:a(e,r.resolve,m(t.trailingSlash))}),h=f.value?void 0:u?.({...t,to:p,viewTransition:m(t.viewTransition)}),g=n(()=>{let n=m(t.trailingSlash)??e.trailingSlash;if(!p.value||c.value||i(p.value)){let e=p.value;return typeof e==`string`?I(e):e}if(f.value){let e=typeof p.value==`object`&&`path`in p.value?O(p.value):p.value,t=typeof e==`object`?r.resolve(e).href:e,i=typeof t==`string`?I(t):t;return i===null?null:z(i,n)}return typeof p.value==`object`?r.resolve(p.value)?.href??null:z(N(o.app.baseURL,p.value),n)});return{to:p,hasTarget:s,isAbsoluteUrl:c,isExternal:f,href:g,isActive:h?.isActive??n(()=>p.value===r.currentRoute.value.path),isExactActive:h?.isExactActive??n(()=>p.value===r.currentRoute.value.path),route:h?.route??n(()=>r.resolve(p.value)),async navigate(e){g.value!==null&&await x(g.value,{replace:m(t.replace),external:f.value||s.value})}}}return r({name:t,props:{to:{type:[String,Object],default:void 0,required:!1},href:{type:[String,Object],default:void 0,required:!1},target:{type:String,default:void 0,required:!1},rel:{type:String,default:void 0,required:!1},noRel:{type:Boolean,default:void 0,required:!1},prefetch:{type:Boolean,default:void 0,required:!1},prefetchOn:{type:[String,Object],default:void 0,required:!1},noPrefetch:{type:Boolean,default:void 0,required:!1},activeClass:{type:String,default:void 0,required:!1},exactActiveClass:{type:String,default:void 0,required:!1},prefetchedClass:{type:String,default:void 0,required:!1},replace:{type:Boolean,default:void 0,required:!1},ariaCurrentValue:{type:String,default:void 0,required:!1},external:{type:Boolean,default:void 0,required:!1},custom:{type:Boolean,default:void 0,required:!1},trailingSlash:{type:String,default:void 0,required:!1}},useLink:o,setup(t,{slots:n}){let r=j(),{to:a,href:s,navigate:c,isExternal:l,hasTarget:m,isAbsoluteUrl:_}=o(t),y=p(!1),b=h(null),x=e=>{b.value=t.custom?e?.$el?.nextElementSibling:e?.$el};function S(n){return!!(!y.value&&(typeof t.prefetchOn==`string`?t.prefetchOn===n:t.prefetchOn?.[n]??e.prefetchOn?.[n])&&(t.prefetch??e.prefetch)!==!1&&t.noPrefetch!==!0&&t.target!==`_blank`&&!H())}async function w(e=f()){if(y.value||s.value===null)return;y.value=!0;let t=typeof a.value==`string`?a.value:l.value?O(a.value):r.resolve(a.value).fullPath,n=l.value?new URL(t,window.location.href).href:t;await Promise.all([e.hooks.callHook(`link:prefetch`,n)?.catch(()=>{}),!l.value&&!m.value&&P(a.value,r).catch(()=>{})])}if(!t.custom&&S(`visibility`)){let e=f(),t,n=null;g(()=>{let r=B();M(()=>{t=A(()=>{b?.value?.tagName&&(n=r.observe(b.value,async()=>{n?.(),n=null,await w(e)}))})})}),u(()=>{t&&D(t),n?.(),n=null})}return()=>{let o=t.target||null,u=F(t.noRel?``:t.rel,e.externalRelAttribute,_.value||m.value?`noopener noreferrer`:``)||null,f=e=>({href:s.value,navigate:c,get route(){if(!s.value)return;let e=new URL(s.value,window.location.href);return{path:e.pathname,fullPath:e.pathname,get query(){return C(e.search)},hash:e.hash,params:{},name:void 0,matched:[],redirectedFrom:void 0,meta:{},href:s.value}},rel:u,target:o,isExternal:l.value||m.value,isActive:!1,isExactActive:!1,...e,prefetch:w,prefetched:y.value,shouldPrefetch:S});if(!l.value&&!m.value&&!i(a.value)){let r={ref:x,to:a.value,activeClass:t.activeClass||e.activeClass,exactActiveClass:t.exactActiveClass||e.exactActiveClass,replace:t.replace,ariaCurrentValue:t.ariaCurrentValue,custom:t.custom};return t.custom||(S(`interaction`)&&(r.onPointerenter=w.bind(null,void 0),r.onFocus=w.bind(null,void 0)),y.value&&(r.class=t.prefetchedClass||e.prefetchedClass),r.rel=t.rel||void 0),v(d(`RouterLink`),r,t.custom&&n.default?{default:e=>n.default(f(e))}:n.default)}return t.custom?n.default?n.default(f()):null:v(`a`,{ref:b,href:s.value||null,rel:u,target:o,onClick:async e=>{if(!(l.value||m.value)){e.preventDefault();try{let e=T(s.value??``);return await(t.replace?r.replace(e):r.push(e))}finally{if(i(a.value)){let e=a.value.slice(1),t=e;try{t=decodeURIComponent(e)}catch{}document.getElementById(t)?.focus()}}}}},n.default?.())}}})}var R=L(c);function z(e,t){if(t!==`append`&&t!==`remove`)return e;let n=t===`append`?w:k;return S(e)&&!e.startsWith(`http`)?e:n(e,!0)}function B(){let e=f();if(e._observer)return e._observer;let t=null,n=new Map;return e._observer={observe:(e,r)=>(t||=new IntersectionObserver(e=>{for(let t of e){let e=n.get(t.target);(t.isIntersecting||t.intersectionRatio>0)&&e&&e()}}),n.set(e,r),t.observe(e),()=>{n.delete(e),t?.unobserve(e),n.size===0&&(t?.disconnect(),t=null)})}}var V=/2g/;function H(){let e=navigator.connection;return!!(e&&(e.saveData||V.test(e.effectiveType)))}var U={class:`antialiased bg-white dark:bg-[#020420] dark:text-white font-sans grid min-h-screen overflow-hidden place-content-center text-[#020420] tracking-wide`},W={class:`max-w-520px text-center`},G=[`textContent`],K=[`textContent`],q=[`textContent`],J={class:`flex items-center justify-center w-full`},Y=b({__name:`error-404`,props:{appName:{type:String,default:`Nuxt`},status:{type:Number,default:404},statusText:{type:String,default:`Page not found`},description:{type:String,default:`Sorry, the page you are looking for could not be found.`},backHome:{type:String,default:`Go back home`}},setup(n){let r=n;return y({title:`${r.status} - ${r.statusText} | ${r.appName}`,script:[{innerHTML:`!function(){let e=document.createElement("link").relList;if(!(e&&e.supports&&e.supports("modulepreload"))){for(let e of document.querySelectorAll('link[rel="modulepreload"]'))r(e);new MutationObserver(e=>{for(let t of e)if("childList"===t.type)for(let e of t.addedNodes)"LINK"===e.tagName&&"modulepreload"===e.rel&&r(e)}).observe(document,{childList:!0,subtree:!0})}function r(e){if(e.ep)return;e.ep=!0;let r=function(e){let r={};return e.integrity&&(r.integrity=e.integrity),e.referrerPolicy&&(r.referrerPolicy=e.referrerPolicy),"use-credentials"===e.crossOrigin?r.credentials="include":"anonymous"===e.crossOrigin?r.credentials="omit":r.credentials="same-origin",r}(e);fetch(e.href,r)}}();`}],style:[{innerHTML:`*,:after,:before{box-sizing:border-box;border-style:solid;border-width:0;border-color:var(--un-default-border-color,#e5e7eb)}:after,:before{--un-content:""}html{-webkit-text-size-adjust:100%;tab-size:4;font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent;font-family:ui-sans-serif,system-ui,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;line-height:1.5}body{line-height:inherit;margin:0}h1,h2{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}h1,h2,p{margin:0}*,:after,:before{--un-rotate:0;--un-rotate-x:0;--un-rotate-y:0;--un-rotate-z:0;--un-scale-x:1;--un-scale-y:1;--un-scale-z:1;--un-skew-x:0;--un-skew-y:0;--un-translate-x:0;--un-translate-y:0;--un-translate-z:0;--un-pan-x: ;--un-pan-y: ;--un-pinch-zoom: ;--un-scroll-snap-strictness:proximity;--un-ordinal: ;--un-slashed-zero: ;--un-numeric-figure: ;--un-numeric-spacing: ;--un-numeric-fraction: ;--un-border-spacing-x:0;--un-border-spacing-y:0;--un-ring-offset-shadow:0 0 #0000;--un-ring-shadow:0 0 #0000;--un-shadow-inset: ;--un-shadow:0 0 #0000;--un-ring-inset: ;--un-ring-offset-width:0px;--un-ring-offset-color:#fff;--un-ring-width:0px;--un-ring-color:#93c5fd80;--un-blur: ;--un-brightness: ;--un-contrast: ;--un-drop-shadow: ;--un-grayscale: ;--un-hue-rotate: ;--un-invert: ;--un-saturate: ;--un-sepia: ;--un-backdrop-blur: ;--un-backdrop-brightness: ;--un-backdrop-contrast: ;--un-backdrop-grayscale: ;--un-backdrop-hue-rotate: ;--un-backdrop-invert: ;--un-backdrop-opacity: ;--un-backdrop-saturate: ;--un-backdrop-sepia: }`}]}),(r,c)=>{let u=R;return i(),t(`div`,U,[o(`div`,W,[o(`h1`,{class:`font-semibold leading-none mb-4 sm:text-[110px] tabular-nums text-[80px]`,textContent:l(n.status)},null,8,G),o(`h2`,{class:`font-semibold mb-2 sm:text-3xl text-2xl`,textContent:l(n.statusText)},null,8,K),o(`p`,{class:`mb-4 px-2 text-[#64748B] text-md`,textContent:l(n.description)},null,8,q),o(`div`,J,[s(u,{to:`/`,class:`font-medium hover:text-[#00DC82] text-sm underline underline-offset-3`},{default:e(()=>[a(l(n.backHome),1)]),_:1})])])])}}},[[`__scopeId`,`data-v-
|
|
1
|
+
import{$ as e,A as t,D as n,I as r,J as i,N as a,O as o,P as s,S as c,St as l,W as u,X as d,_ as f,at as p,ct as m,it as h,q as g,v as _,z as v}from"./DBXvRcU1.js";import{n as y,t as b}from"./DbtvxgAm.js";import{a as x,c as S,d as C,f as w,i as T,l as E,n as D,o as O,p as k,r as A,s as j,t as M,u as N}from"#entry";async function P(e,t=j()){let{path:n,matched:r}=t.resolve(e);if(!r.length||(t._routePreloaded||=new Set,t._routePreloaded.has(n)))return;let i=t._preloadPromises||=[];if(i.length>4)return Promise.all(i).then(()=>P(e,t));t._routePreloaded.add(n);for(let e of r){let t=e.components?.default;if(typeof t!=`function`)continue;let n=Promise.resolve(t()).catch(()=>{}).finally(()=>i.splice(i.indexOf(n),1));i.push(n)}await Promise.all(i)}var F=(...e)=>e.find(e=>e!==void 0);function I(e){let t=e.replace(/[\u0000-\u001F\s]+/g,``);for(;t.toLowerCase().startsWith(`view-source:`);)t=t.slice(12);let n=t.indexOf(`:`);return n>0&&E(t.slice(0,n+1))?null:e}function L(e){let t=e.componentName||`NuxtLink`;function i(e){return typeof e==`string`&&e.startsWith(`#`)}function a(t,n,r){let i=r??e.trailingSlash;if(!t||i!==`append`&&i!==`remove`)return t;if(typeof t==`string`)return z(t,i);let a=`path`in t&&t.path!==void 0?t.path:n(t).path;return{...t,name:void 0,path:z(a,i)}}function o(t){let r=j(),o=_(),s=n(()=>!!m(t.target)&&m(t.target)!==`_self`),c=n(()=>{let e=m(t.to)||m(t.href)||``;return typeof e==`string`&&S(e,{acceptRelative:!0})}),l=d(`RouterLink`),u=l&&typeof l!=`string`?l.useLink:void 0,f=n(()=>{if(m(t.external))return!0;let e=m(t.to)||m(t.href)||``;return typeof e==`object`?!1:e===``||c.value}),p=n(()=>{let e=m(t.to)||m(t.href)||``;return f.value?e:a(e,r.resolve,m(t.trailingSlash))}),h=f.value?void 0:u?.({...t,to:p,viewTransition:m(t.viewTransition)}),g=n(()=>{let n=m(t.trailingSlash)??e.trailingSlash;if(!p.value||c.value||i(p.value)){let e=p.value;return typeof e==`string`?I(e):e}if(f.value){let e=typeof p.value==`object`&&`path`in p.value?O(p.value):p.value,t=typeof e==`object`?r.resolve(e).href:e,i=typeof t==`string`?I(t):t;return i===null?null:z(i,n)}return typeof p.value==`object`?r.resolve(p.value)?.href??null:z(N(o.app.baseURL,p.value),n)});return{to:p,hasTarget:s,isAbsoluteUrl:c,isExternal:f,href:g,isActive:h?.isActive??n(()=>p.value===r.currentRoute.value.path),isExactActive:h?.isExactActive??n(()=>p.value===r.currentRoute.value.path),route:h?.route??n(()=>r.resolve(p.value)),async navigate(e){g.value!==null&&await x(g.value,{replace:m(t.replace),external:f.value||s.value})}}}return r({name:t,props:{to:{type:[String,Object],default:void 0,required:!1},href:{type:[String,Object],default:void 0,required:!1},target:{type:String,default:void 0,required:!1},rel:{type:String,default:void 0,required:!1},noRel:{type:Boolean,default:void 0,required:!1},prefetch:{type:Boolean,default:void 0,required:!1},prefetchOn:{type:[String,Object],default:void 0,required:!1},noPrefetch:{type:Boolean,default:void 0,required:!1},activeClass:{type:String,default:void 0,required:!1},exactActiveClass:{type:String,default:void 0,required:!1},prefetchedClass:{type:String,default:void 0,required:!1},replace:{type:Boolean,default:void 0,required:!1},ariaCurrentValue:{type:String,default:void 0,required:!1},external:{type:Boolean,default:void 0,required:!1},custom:{type:Boolean,default:void 0,required:!1},trailingSlash:{type:String,default:void 0,required:!1}},useLink:o,setup(t,{slots:n}){let r=j(),{to:a,href:s,navigate:c,isExternal:l,hasTarget:m,isAbsoluteUrl:_}=o(t),y=p(!1),b=h(null),x=e=>{b.value=t.custom?e?.$el?.nextElementSibling:e?.$el};function S(n){return!!(!y.value&&(typeof t.prefetchOn==`string`?t.prefetchOn===n:t.prefetchOn?.[n]??e.prefetchOn?.[n])&&(t.prefetch??e.prefetch)!==!1&&t.noPrefetch!==!0&&t.target!==`_blank`&&!H())}async function w(e=f()){if(y.value||s.value===null)return;y.value=!0;let t=typeof a.value==`string`?a.value:l.value?O(a.value):r.resolve(a.value).fullPath,n=l.value?new URL(t,window.location.href).href:t;await Promise.all([e.hooks.callHook(`link:prefetch`,n)?.catch(()=>{}),!l.value&&!m.value&&P(a.value,r).catch(()=>{})])}if(!t.custom&&S(`visibility`)){let e=f(),t,n=null;g(()=>{let r=B();M(()=>{t=A(()=>{b?.value?.tagName&&(n=r.observe(b.value,async()=>{n?.(),n=null,await w(e)}))})})}),u(()=>{t&&D(t),n?.(),n=null})}return()=>{let o=t.target||null,u=F(t.noRel?``:t.rel,e.externalRelAttribute,_.value||m.value?`noopener noreferrer`:``)||null,f=e=>({href:s.value,navigate:c,get route(){if(!s.value)return;let e=new URL(s.value,window.location.href);return{path:e.pathname,fullPath:e.pathname,get query(){return C(e.search)},hash:e.hash,params:{},name:void 0,matched:[],redirectedFrom:void 0,meta:{},href:s.value}},rel:u,target:o,isExternal:l.value||m.value,isActive:!1,isExactActive:!1,...e,prefetch:w,prefetched:y.value,shouldPrefetch:S});if(!l.value&&!m.value&&!i(a.value)){let r={ref:x,to:a.value,activeClass:t.activeClass||e.activeClass,exactActiveClass:t.exactActiveClass||e.exactActiveClass,replace:t.replace,ariaCurrentValue:t.ariaCurrentValue,custom:t.custom};return t.custom||(S(`interaction`)&&(r.onPointerenter=w.bind(null,void 0),r.onFocus=w.bind(null,void 0)),y.value&&(r.class=t.prefetchedClass||e.prefetchedClass),r.rel=t.rel||void 0),v(d(`RouterLink`),r,t.custom&&n.default?{default:e=>n.default(f(e))}:n.default)}return t.custom?n.default?n.default(f()):null:v(`a`,{ref:b,href:s.value||null,rel:u,target:o,onClick:async e=>{if(!(l.value||m.value)){e.preventDefault();try{let e=T(s.value??``);return await(t.replace?r.replace(e):r.push(e))}finally{if(i(a.value)){let e=a.value.slice(1),t=e;try{t=decodeURIComponent(e)}catch{}document.getElementById(t)?.focus()}}}}},n.default?.())}}})}var R=L(c);function z(e,t){if(t!==`append`&&t!==`remove`)return e;let n=t===`append`?w:k;return S(e)&&!e.startsWith(`http`)?e:n(e,!0)}function B(){let e=f();if(e._observer)return e._observer;let t=null,n=new Map;return e._observer={observe:(e,r)=>(t||=new IntersectionObserver(e=>{for(let t of e){let e=n.get(t.target);(t.isIntersecting||t.intersectionRatio>0)&&e&&e()}}),n.set(e,r),t.observe(e),()=>{n.delete(e),t?.unobserve(e),n.size===0&&(t?.disconnect(),t=null)})}}var V=/2g/;function H(){let e=navigator.connection;return!!(e&&(e.saveData||V.test(e.effectiveType)))}var U={class:`antialiased bg-white dark:bg-[#020420] dark:text-white font-sans grid min-h-screen overflow-hidden place-content-center text-[#020420] tracking-wide`},W={class:`max-w-520px text-center`},G=[`textContent`],K=[`textContent`],q=[`textContent`],J={class:`flex items-center justify-center w-full`},Y=b({__name:`error-404`,props:{appName:{type:String,default:`Nuxt`},status:{type:Number,default:404},statusText:{type:String,default:`Page not found`},description:{type:String,default:`Sorry, the page you are looking for could not be found.`},backHome:{type:String,default:`Go back home`}},setup(n){let r=n;return y({title:`${r.status} - ${r.statusText} | ${r.appName}`,script:[{innerHTML:`!function(){let e=document.createElement("link").relList;if(!(e&&e.supports&&e.supports("modulepreload"))){for(let e of document.querySelectorAll('link[rel="modulepreload"]'))r(e);new MutationObserver(e=>{for(let t of e)if("childList"===t.type)for(let e of t.addedNodes)"LINK"===e.tagName&&"modulepreload"===e.rel&&r(e)}).observe(document,{childList:!0,subtree:!0})}function r(e){if(e.ep)return;e.ep=!0;let r=function(e){let r={};return e.integrity&&(r.integrity=e.integrity),e.referrerPolicy&&(r.referrerPolicy=e.referrerPolicy),"use-credentials"===e.crossOrigin?r.credentials="include":"anonymous"===e.crossOrigin?r.credentials="omit":r.credentials="same-origin",r}(e);fetch(e.href,r)}}();`}],style:[{innerHTML:`*,:after,:before{box-sizing:border-box;border-style:solid;border-width:0;border-color:var(--un-default-border-color,#e5e7eb)}:after,:before{--un-content:""}html{-webkit-text-size-adjust:100%;tab-size:4;font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent;font-family:ui-sans-serif,system-ui,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;line-height:1.5}body{line-height:inherit;margin:0}h1,h2{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}h1,h2,p{margin:0}*,:after,:before{--un-rotate:0;--un-rotate-x:0;--un-rotate-y:0;--un-rotate-z:0;--un-scale-x:1;--un-scale-y:1;--un-scale-z:1;--un-skew-x:0;--un-skew-y:0;--un-translate-x:0;--un-translate-y:0;--un-translate-z:0;--un-pan-x: ;--un-pan-y: ;--un-pinch-zoom: ;--un-scroll-snap-strictness:proximity;--un-ordinal: ;--un-slashed-zero: ;--un-numeric-figure: ;--un-numeric-spacing: ;--un-numeric-fraction: ;--un-border-spacing-x:0;--un-border-spacing-y:0;--un-ring-offset-shadow:0 0 #0000;--un-ring-shadow:0 0 #0000;--un-shadow-inset: ;--un-shadow:0 0 #0000;--un-ring-inset: ;--un-ring-offset-width:0px;--un-ring-offset-color:#fff;--un-ring-width:0px;--un-ring-color:#93c5fd80;--un-blur: ;--un-brightness: ;--un-contrast: ;--un-drop-shadow: ;--un-grayscale: ;--un-hue-rotate: ;--un-invert: ;--un-saturate: ;--un-sepia: ;--un-backdrop-blur: ;--un-backdrop-brightness: ;--un-backdrop-contrast: ;--un-backdrop-grayscale: ;--un-backdrop-hue-rotate: ;--un-backdrop-invert: ;--un-backdrop-opacity: ;--un-backdrop-saturate: ;--un-backdrop-sepia: }`}]}),(r,c)=>{let u=R;return i(),t(`div`,U,[o(`div`,W,[o(`h1`,{class:`font-semibold leading-none mb-4 sm:text-[110px] tabular-nums text-[80px]`,textContent:l(n.status)},null,8,G),o(`h2`,{class:`font-semibold mb-2 sm:text-3xl text-2xl`,textContent:l(n.statusText)},null,8,K),o(`p`,{class:`mb-4 px-2 text-[#64748B] text-md`,textContent:l(n.description)},null,8,q),o(`div`,J,[s(u,{to:`/`,class:`font-medium hover:text-[#00DC82] text-sm underline underline-offset-3`},{default:e(()=>[a(l(n.backHome),1)]),_:1})])])])}}},[[`__scopeId`,`data-v-4d1e665c`]]);export{Y as default};
|
package/dist/client/index.html
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
<!DOCTYPE html><html><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><script type="importmap">{"imports":{"#entry":"/__nuxt-i18n-micro/_nuxt/
|
|
1
|
+
<!DOCTYPE html><html><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><script type="importmap">{"imports":{"#entry":"/__nuxt-i18n-micro/_nuxt/B-YzqMkr.js"}}</script><link rel="stylesheet" href="/__nuxt-i18n-micro/_nuxt/entry.DYT8mjOq.css" crossorigin><link rel="modulepreload" as="script" crossorigin href="/__nuxt-i18n-micro/_nuxt/B-YzqMkr.js"><link rel="modulepreload" as="script" crossorigin href="/__nuxt-i18n-micro/_nuxt/DBXvRcU1.js"><script type="module" src="/__nuxt-i18n-micro/_nuxt/B-YzqMkr.js" crossorigin></script><link rel="prefetch" as="style" crossorigin href="/__nuxt-i18n-micro/_nuxt/error-500.D5pBYfcl.css"><link rel="prefetch" as="script" crossorigin href="/__nuxt-i18n-micro/_nuxt/310ILlAI.js"><link rel="prefetch" as="script" crossorigin href="/__nuxt-i18n-micro/_nuxt/DbtvxgAm.js"></head><body><div id="__nuxt"></div><div id="teleports"></div><script>window.__NUXT__={};window.__NUXT__.config={public:{},app:{baseURL:"/__nuxt-i18n-micro",buildId:"474d10ab-3098-4ac2-b6bf-953a2bab350d",buildAssetsDir:"/_nuxt/",cdnURL:""}}</script><script type="application/json" data-nuxt-data="nuxt-app" data-ssr="false" id="__NUXT_DATA__">[{"prerenderedAt":1,"serverRendered":2},1785940944185,false]</script></body></html>
|
package/dist/module.json
CHANGED
package/dist/module.mjs
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import * as fs from 'node:fs';
|
|
2
2
|
import fs__default, { readFileSync, mkdirSync, writeFileSync, existsSync } from 'node:fs';
|
|
3
|
-
import path, { resolve, join
|
|
3
|
+
import path, { dirname, resolve, join } from 'node:path';
|
|
4
4
|
import { fileURLToPath, pathToFileURL } from 'node:url';
|
|
5
5
|
import { defaultPlural, isNoPrefixStrategy, withPrefixStrategy } from '@i18n-micro/core';
|
|
6
6
|
import { generateHmrPlugin } from '@i18n-micro/hmr/generate-plugin';
|
|
@@ -22,12 +22,31 @@ import { parse } from '@vue/compiler-sfc';
|
|
|
22
22
|
const DEVTOOLS_UI_PORT = 3030;
|
|
23
23
|
const DEVTOOLS_UI_ROUTE = "/__nuxt-i18n-micro";
|
|
24
24
|
const DEVTOOLS_RPC_NAMESPACE = "nuxt-i18n-micro";
|
|
25
|
-
const
|
|
26
|
-
const
|
|
25
|
+
const thisDir = dirname(fileURLToPath(import.meta.url));
|
|
26
|
+
const packageRoot = resolve(thisDir, "..");
|
|
27
|
+
const clientDir = resolveClientDir();
|
|
28
|
+
function resolveClientDir() {
|
|
29
|
+
const candidates = [
|
|
30
|
+
resolve(thisDir, "client"),
|
|
31
|
+
// dist/client next to dist/module.mjs
|
|
32
|
+
resolve(thisDir, "../dist/client"),
|
|
33
|
+
// src/devtools.ts → repo dist/client
|
|
34
|
+
resolve(thisDir, "../client/dist")
|
|
35
|
+
// client/dist symlink used in-repo
|
|
36
|
+
];
|
|
37
|
+
return candidates.find((dir) => fs.existsSync(path.join(dir, "index.html"))) ?? candidates[0];
|
|
38
|
+
}
|
|
39
|
+
function resolveClientPackageDir() {
|
|
40
|
+
return resolve(packageRoot, "client");
|
|
41
|
+
}
|
|
42
|
+
function useLiveClientDevServer() {
|
|
43
|
+
return process.env.I18N_DEVTOOLS_CLIENT_DEV === "1" || process.env.I18N_DEVTOOLS_CLIENT_DEV === "true";
|
|
44
|
+
}
|
|
27
45
|
function setupDevToolsUI(options, rootDirs) {
|
|
28
46
|
const nuxt = useNuxt();
|
|
29
|
-
const hasPrebuiltClient = fs.existsSync(clientDir);
|
|
30
|
-
|
|
47
|
+
const hasPrebuiltClient = fs.existsSync(path.join(clientDir, "index.html"));
|
|
48
|
+
const liveClient = useLiveClientDevServer();
|
|
49
|
+
if (hasPrebuiltClient && !liveClient) {
|
|
31
50
|
addDevServerHandler({
|
|
32
51
|
route: DEVTOOLS_UI_ROUTE,
|
|
33
52
|
handler: fromNodeMiddleware(sirv(clientDir, { dev: true, single: true }))
|
|
@@ -37,7 +56,7 @@ function setupDevToolsUI(options, rootDirs) {
|
|
|
37
56
|
{
|
|
38
57
|
command: "npx",
|
|
39
58
|
args: ["nuxi", "dev", "--port", String(DEVTOOLS_UI_PORT)],
|
|
40
|
-
cwd:
|
|
59
|
+
cwd: resolveClientPackageDir()
|
|
41
60
|
},
|
|
42
61
|
{ id: "nuxt-i18n-micro:client", name: "i18n Micro DevTools UI" }
|
|
43
62
|
);
|
|
@@ -46,7 +65,9 @@ function setupDevToolsUI(options, rootDirs) {
|
|
|
46
65
|
// `addDevServerHandler` strips the mount prefix, so `event.path` arrives as `/`
|
|
47
66
|
// or `/_nuxt/...` and the route has to be put back on for the client dev server,
|
|
48
67
|
// which serves itself under that same base.
|
|
49
|
-
handler: defineEventHandler(
|
|
68
|
+
handler: defineEventHandler(
|
|
69
|
+
(event) => proxyRequest(event, `http://localhost:${DEVTOOLS_UI_PORT}${joinURL(DEVTOOLS_UI_ROUTE, event.path || "/")}`)
|
|
70
|
+
)
|
|
50
71
|
});
|
|
51
72
|
}
|
|
52
73
|
addCustomTab({
|
|
@@ -852,6 +873,14 @@ const module$1 = defineNuxtModule({
|
|
|
852
873
|
order: 3
|
|
853
874
|
});
|
|
854
875
|
}
|
|
876
|
+
if (nuxt.options.dev && options.plugin !== false && options.vueDevtools !== false) {
|
|
877
|
+
addPlugin({
|
|
878
|
+
src: resolver.resolve("./runtime/plugins/04.vue-devtools"),
|
|
879
|
+
name: "i18n-vue-devtools",
|
|
880
|
+
mode: "client",
|
|
881
|
+
order: 5
|
|
882
|
+
});
|
|
883
|
+
}
|
|
855
884
|
addPlugin({
|
|
856
885
|
src: resolver.resolve("./runtime/plugins/06.redirect"),
|
|
857
886
|
mode: "server",
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { ModuleOptionsExtend } from '@i18n-micro/types';
|
|
2
|
+
import type { Ref } from 'vue';
|
|
3
|
+
import type { NuxtI18n } from '../utils/nuxt-i18n.js';
|
|
4
|
+
export declare const I18N_DEVTOOLS_BRIDGE_KEY = "i18n-micro-devtools-bridge";
|
|
5
|
+
export interface I18nDevtoolsBridge {
|
|
6
|
+
i18n: NuxtI18n;
|
|
7
|
+
i18nConfig: ModuleOptionsExtend;
|
|
8
|
+
localeState: Ref<string | null>;
|
|
9
|
+
}
|
|
10
|
+
export declare function setI18nDevtoolsBridge(value: I18nDevtoolsBridge | null): void;
|
|
11
|
+
export declare function getI18nDevtoolsBridge(): I18nDevtoolsBridge | null;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { ModuleOptionsExtend } from '@i18n-micro/types';
|
|
2
|
+
import type { App } from 'vue';
|
|
3
|
+
import type { I18nContextChangeReason, NuxtI18n } from '../utils/nuxt-i18n.js';
|
|
4
|
+
export interface VueI18nDevtoolsContext {
|
|
5
|
+
app: App;
|
|
6
|
+
i18n: NuxtI18n;
|
|
7
|
+
i18nConfig: ModuleOptionsExtend;
|
|
8
|
+
onContextChange: (listener: (reason: I18nContextChangeReason) => void) => () => void;
|
|
9
|
+
onMissingKey: (listener: (locale: string, key: string, routeName: string) => void) => () => void;
|
|
10
|
+
}
|
|
11
|
+
export interface VueI18nDevtoolsNotifier {
|
|
12
|
+
notifyLocaleSwitch: (from: string, to: string, routeName: string) => void;
|
|
13
|
+
notifyLoad: (locale: string, routeName: string, keyCount: number) => void;
|
|
14
|
+
notifyTranslate: (key: string, result: unknown) => void;
|
|
15
|
+
refreshInspector: () => void;
|
|
16
|
+
}
|
|
17
|
+
export declare function setupVueI18nDevtools(ctx: VueI18nDevtoolsContext): Promise<VueI18nDevtoolsNotifier | null>;
|
|
18
|
+
export declare function countLoadedTranslationKeys(i18n: NuxtI18n, locale: string, routeName: string): number;
|
|
@@ -0,0 +1,261 @@
|
|
|
1
|
+
import {
|
|
2
|
+
buildInspectorState,
|
|
3
|
+
buildInspectorTree,
|
|
4
|
+
countTranslationKeys,
|
|
5
|
+
getByInspectorPath,
|
|
6
|
+
parseInspectorNodeId
|
|
7
|
+
} from "@i18n-micro/core/devtools";
|
|
8
|
+
const INSPECTOR_ID = "i18n-micro-inspector";
|
|
9
|
+
const PLUGIN_ID = "nuxt-i18n-micro";
|
|
10
|
+
const TIMELINE_LAYER_ID = "i18n-micro";
|
|
11
|
+
const isPlainObject = (value) => value !== null && typeof value === "object" && !Array.isArray(value);
|
|
12
|
+
function toInspectorState(snapshot) {
|
|
13
|
+
const groups = buildInspectorState(snapshot);
|
|
14
|
+
const state = {};
|
|
15
|
+
for (const [group, entries] of Object.entries(groups)) {
|
|
16
|
+
state[group] = entries.map((entry) => ({
|
|
17
|
+
key: entry.key,
|
|
18
|
+
value: entry.value
|
|
19
|
+
}));
|
|
20
|
+
}
|
|
21
|
+
return state;
|
|
22
|
+
}
|
|
23
|
+
function createSnapshot(i18n, i18nConfig) {
|
|
24
|
+
return {
|
|
25
|
+
locale: i18n.getCurrentLocale(),
|
|
26
|
+
routeName: i18n.getCurrentRouteName() || "index",
|
|
27
|
+
strategy: i18nConfig.strategy,
|
|
28
|
+
defaultLocale: i18nConfig.defaultLocale,
|
|
29
|
+
fallbackLocale: i18nConfig.fallbackLocale,
|
|
30
|
+
cachedChunks: i18n.storage.translations.size,
|
|
31
|
+
locales: (i18nConfig.locales ?? []).map((locale) => ({
|
|
32
|
+
code: locale.code,
|
|
33
|
+
displayName: locale.displayName,
|
|
34
|
+
disabled: locale.disabled
|
|
35
|
+
}))
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
function buildNodeState(i18n, i18nConfig, nodeId) {
|
|
39
|
+
const parsed = parseInspectorNodeId(nodeId);
|
|
40
|
+
if (parsed.kind === "active") {
|
|
41
|
+
return {
|
|
42
|
+
Translations: objectToStateEntries(i18n.resolveTranslations())
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
if (parsed.kind === "locale" && parsed.locale) {
|
|
46
|
+
const locale = parsed.locale;
|
|
47
|
+
const configured = (i18nConfig.locales ?? []).find((item) => item.code === locale);
|
|
48
|
+
const prefix = `${locale}:`;
|
|
49
|
+
const chunks = [];
|
|
50
|
+
for (const [cacheKey, data] of i18n.storage.translations) {
|
|
51
|
+
if (!cacheKey.startsWith(prefix)) continue;
|
|
52
|
+
const routeName = cacheKey.slice(prefix.length) || "index";
|
|
53
|
+
chunks.push({
|
|
54
|
+
key: routeName,
|
|
55
|
+
value: `${countTranslationKeys(data)} keys`
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
chunks.sort((a, b) => a.key.localeCompare(b.key));
|
|
59
|
+
return {
|
|
60
|
+
Locale: [
|
|
61
|
+
{ key: "code", value: locale },
|
|
62
|
+
{ key: "displayName", value: configured?.displayName ?? locale },
|
|
63
|
+
{ key: "disabled", value: Boolean(configured?.disabled) },
|
|
64
|
+
{ key: "isActive", value: i18n.getCurrentLocale() === locale },
|
|
65
|
+
{ key: "loadedChunks", value: chunks.length }
|
|
66
|
+
],
|
|
67
|
+
Chunks: chunks.length ? chunks : [{ key: "\u2014", value: "No translation chunks loaded for this locale yet" }]
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
if (parsed.kind === "chunk" && parsed.locale) {
|
|
71
|
+
const routeName = parsed.routeName || "index";
|
|
72
|
+
const cacheKey = `${parsed.locale}:${routeName}`;
|
|
73
|
+
const chunk = i18n.storage.translations.get(cacheKey);
|
|
74
|
+
if (!chunk) {
|
|
75
|
+
return {
|
|
76
|
+
Chunk: [
|
|
77
|
+
{ key: "cacheKey", value: cacheKey },
|
|
78
|
+
{ key: "status", value: "not loaded" }
|
|
79
|
+
]
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
const entries = objectToStateEntries(chunk);
|
|
83
|
+
return {
|
|
84
|
+
Chunk: [
|
|
85
|
+
{ key: "cacheKey", value: cacheKey },
|
|
86
|
+
{ key: "keys", value: countTranslationKeys(chunk) },
|
|
87
|
+
{
|
|
88
|
+
key: "isActive",
|
|
89
|
+
value: i18n.getCurrentLocale() === parsed.locale && (i18n.getCurrentRouteName() || "index") === routeName
|
|
90
|
+
}
|
|
91
|
+
],
|
|
92
|
+
Translations: entries.length ? entries : [{ key: "\u2014", value: "Chunk is loaded but empty" }]
|
|
93
|
+
};
|
|
94
|
+
}
|
|
95
|
+
if (parsed.kind === "key" && parsed.locale) {
|
|
96
|
+
const routeName = parsed.routeName || "index";
|
|
97
|
+
const segments = parsed.segments ?? [];
|
|
98
|
+
const chunk = i18n.storage.translations.get(`${parsed.locale}:${routeName}`);
|
|
99
|
+
const isActive = i18n.getCurrentLocale() === parsed.locale && (i18n.getCurrentRouteName() || "index") === routeName;
|
|
100
|
+
const source = isActive ? i18n.resolveTranslations() : chunk ?? {};
|
|
101
|
+
const value = segments.length ? getByInspectorPath(source, segments) : source;
|
|
102
|
+
if (isPlainObject(value)) {
|
|
103
|
+
return { [segments.join(".") || "root"]: objectToStateEntries(value) };
|
|
104
|
+
}
|
|
105
|
+
return {
|
|
106
|
+
Value: [{ key: segments.join(".") || "value", value }]
|
|
107
|
+
};
|
|
108
|
+
}
|
|
109
|
+
return toInspectorState(createSnapshot(i18n, i18nConfig));
|
|
110
|
+
}
|
|
111
|
+
function objectToStateEntries(obj, limit = 500) {
|
|
112
|
+
const entries = [];
|
|
113
|
+
let truncated = false;
|
|
114
|
+
const queue = [{ node: obj, prefix: "" }];
|
|
115
|
+
while (queue.length > 0) {
|
|
116
|
+
const { node, prefix } = queue.shift();
|
|
117
|
+
const nested = [];
|
|
118
|
+
for (const key of Object.keys(node)) {
|
|
119
|
+
if (key === "__proto__") continue;
|
|
120
|
+
if (entries.length >= limit) {
|
|
121
|
+
truncated = true;
|
|
122
|
+
break;
|
|
123
|
+
}
|
|
124
|
+
const path = prefix ? `${prefix}.${key}` : key;
|
|
125
|
+
const value = node[key];
|
|
126
|
+
if (isPlainObject(value)) {
|
|
127
|
+
nested.push({ node: value, prefix: path });
|
|
128
|
+
continue;
|
|
129
|
+
}
|
|
130
|
+
entries.push({ key: path, value });
|
|
131
|
+
}
|
|
132
|
+
if (truncated) break;
|
|
133
|
+
queue.push(...nested);
|
|
134
|
+
}
|
|
135
|
+
entries.sort((a, b) => a.key.localeCompare(b.key));
|
|
136
|
+
if (truncated) {
|
|
137
|
+
entries.push({
|
|
138
|
+
key: "\u2026",
|
|
139
|
+
value: `Showing first ${limit} leaves (nested keys flattened)`
|
|
140
|
+
});
|
|
141
|
+
}
|
|
142
|
+
return entries;
|
|
143
|
+
}
|
|
144
|
+
export async function setupVueI18nDevtools(ctx) {
|
|
145
|
+
if (!import.meta.dev || import.meta.server) {
|
|
146
|
+
return null;
|
|
147
|
+
}
|
|
148
|
+
let notifier = null;
|
|
149
|
+
try {
|
|
150
|
+
const { setupDevtoolsPlugin } = await import("@vue/devtools-api");
|
|
151
|
+
setupDevtoolsPlugin(
|
|
152
|
+
{
|
|
153
|
+
id: PLUGIN_ID,
|
|
154
|
+
label: "i18n Micro",
|
|
155
|
+
packageName: "nuxt-i18n-micro",
|
|
156
|
+
homepage: "https://s00d.github.io/nuxt-i18n-micro/",
|
|
157
|
+
logo: "https://s00d.github.io/nuxt-i18n-micro/favicon.svg",
|
|
158
|
+
app: ctx.app,
|
|
159
|
+
enableEarlyProxy: true
|
|
160
|
+
},
|
|
161
|
+
(api) => {
|
|
162
|
+
const refreshInspector = () => {
|
|
163
|
+
api.sendInspectorTree(INSPECTOR_ID);
|
|
164
|
+
api.sendInspectorState(INSPECTOR_ID);
|
|
165
|
+
};
|
|
166
|
+
api.addInspector({
|
|
167
|
+
id: INSPECTOR_ID,
|
|
168
|
+
label: "i18n Micro",
|
|
169
|
+
icon: "carbon:language",
|
|
170
|
+
actions: [
|
|
171
|
+
{
|
|
172
|
+
icon: "refresh",
|
|
173
|
+
tooltip: "Refresh inspector",
|
|
174
|
+
action: refreshInspector
|
|
175
|
+
}
|
|
176
|
+
]
|
|
177
|
+
});
|
|
178
|
+
api.addTimelineLayer({
|
|
179
|
+
id: TIMELINE_LAYER_ID,
|
|
180
|
+
label: "i18n Micro",
|
|
181
|
+
color: 4372611
|
|
182
|
+
});
|
|
183
|
+
api.on.getInspectorTree((payload) => {
|
|
184
|
+
if (payload.inspectorId !== INSPECTOR_ID) return;
|
|
185
|
+
payload.rootNodes = buildInspectorTree({
|
|
186
|
+
nodeId: "root",
|
|
187
|
+
storage: ctx.i18n.storage,
|
|
188
|
+
configuredLocales: ctx.i18nConfig.locales ?? [],
|
|
189
|
+
activeLocale: ctx.i18n.getCurrentLocale(),
|
|
190
|
+
activeRouteName: ctx.i18n.getCurrentRouteName() || "index",
|
|
191
|
+
activeTranslations: ctx.i18n.resolveTranslations()
|
|
192
|
+
});
|
|
193
|
+
});
|
|
194
|
+
api.on.getInspectorState((payload) => {
|
|
195
|
+
if (payload.inspectorId !== INSPECTOR_ID) return;
|
|
196
|
+
payload.state = payload.nodeId ? buildNodeState(ctx.i18n, ctx.i18nConfig, payload.nodeId) : toInspectorState(createSnapshot(ctx.i18n, ctx.i18nConfig));
|
|
197
|
+
});
|
|
198
|
+
ctx.onContextChange(() => {
|
|
199
|
+
refreshInspector();
|
|
200
|
+
});
|
|
201
|
+
ctx.onMissingKey((locale, key, routeName) => {
|
|
202
|
+
api.addTimelineEvent({
|
|
203
|
+
layerId: TIMELINE_LAYER_ID,
|
|
204
|
+
event: {
|
|
205
|
+
time: api.now(),
|
|
206
|
+
title: "Missing translation",
|
|
207
|
+
subtitle: key,
|
|
208
|
+
data: { locale, key, routeName }
|
|
209
|
+
}
|
|
210
|
+
});
|
|
211
|
+
});
|
|
212
|
+
notifier = {
|
|
213
|
+
notifyLocaleSwitch(from, to, routeName) {
|
|
214
|
+
api.addTimelineEvent({
|
|
215
|
+
layerId: TIMELINE_LAYER_ID,
|
|
216
|
+
event: {
|
|
217
|
+
time: api.now(),
|
|
218
|
+
title: "Locale switch",
|
|
219
|
+
subtitle: `${from || "\u2014"} \u2192 ${to}`,
|
|
220
|
+
data: { from, to, routeName }
|
|
221
|
+
}
|
|
222
|
+
});
|
|
223
|
+
refreshInspector();
|
|
224
|
+
},
|
|
225
|
+
notifyLoad(locale, routeName, keyCount) {
|
|
226
|
+
api.addTimelineEvent({
|
|
227
|
+
layerId: TIMELINE_LAYER_ID,
|
|
228
|
+
event: {
|
|
229
|
+
time: api.now(),
|
|
230
|
+
title: "Translations loaded",
|
|
231
|
+
subtitle: `${locale}:${routeName}`,
|
|
232
|
+
data: { locale, routeName, keyCount }
|
|
233
|
+
}
|
|
234
|
+
});
|
|
235
|
+
refreshInspector();
|
|
236
|
+
},
|
|
237
|
+
notifyTranslate(key, result) {
|
|
238
|
+
api.addTimelineEvent({
|
|
239
|
+
layerId: TIMELINE_LAYER_ID,
|
|
240
|
+
event: {
|
|
241
|
+
time: api.now(),
|
|
242
|
+
title: "$t",
|
|
243
|
+
subtitle: key,
|
|
244
|
+
data: { key, result }
|
|
245
|
+
}
|
|
246
|
+
});
|
|
247
|
+
},
|
|
248
|
+
refreshInspector
|
|
249
|
+
};
|
|
250
|
+
refreshInspector();
|
|
251
|
+
}
|
|
252
|
+
);
|
|
253
|
+
} catch {
|
|
254
|
+
return null;
|
|
255
|
+
}
|
|
256
|
+
return notifier;
|
|
257
|
+
}
|
|
258
|
+
export function countLoadedTranslationKeys(i18n, locale, routeName) {
|
|
259
|
+
const chunk = i18n.storage.translations.get(i18n.getCacheKey(locale, routeName));
|
|
260
|
+
return countTranslationKeys(chunk);
|
|
261
|
+
}
|
|
@@ -7,6 +7,7 @@ import { createError, defineNuxtPlugin, navigateTo, useRouter, useRuntimeConfig
|
|
|
7
7
|
import { useI18nHead } from "../composables/useI18nHead.js";
|
|
8
8
|
import { useI18nLocale } from "../composables/useI18nLocale.js";
|
|
9
9
|
import { createNuxtI18nPluginApi, NuxtI18n, NuxtTranslationLoader } from "../utils/nuxt-i18n.js";
|
|
10
|
+
import { setI18nDevtoolsBridge } from "../devtools/bridge.js";
|
|
10
11
|
import { translationStorage } from "../utils/storage.js";
|
|
11
12
|
const isDev = process.env.NODE_ENV !== "production";
|
|
12
13
|
export default defineNuxtPlugin(async (nuxtApp) => {
|
|
@@ -28,6 +29,7 @@ export default defineNuxtPlugin(async (nuxtApp) => {
|
|
|
28
29
|
const i18n = new NuxtI18n({
|
|
29
30
|
plural,
|
|
30
31
|
missingWarn: i18nConfig.missingWarn ?? true,
|
|
32
|
+
cacheMaxSize: i18nConfig.cacheMaxSize ?? 0,
|
|
31
33
|
getCustomMissingHandler: () => customMissingHandler.value,
|
|
32
34
|
numberFormats: i18nConfig.numberFormats,
|
|
33
35
|
datetimeFormats: i18nConfig.datetimeFormats
|
|
@@ -102,6 +104,13 @@ export default defineNuxtPlugin(async (nuxtApp) => {
|
|
|
102
104
|
customMissingHandler.value = handler;
|
|
103
105
|
}
|
|
104
106
|
});
|
|
107
|
+
if (import.meta.dev && import.meta.client) {
|
|
108
|
+
setI18nDevtoolsBridge({
|
|
109
|
+
i18n,
|
|
110
|
+
i18nConfig,
|
|
111
|
+
localeState
|
|
112
|
+
});
|
|
113
|
+
}
|
|
105
114
|
router.beforeEach(async (to, from) => {
|
|
106
115
|
if (to.name !== from.name) {
|
|
107
116
|
i18nRouteParams.value = {};
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import { defineNuxtPlugin, useNuxtApp } from "#imports";
|
|
2
|
+
import { watch } from "vue";
|
|
3
|
+
import { getI18nDevtoolsBridge } from "../devtools/bridge.js";
|
|
4
|
+
import { countLoadedTranslationKeys, setupVueI18nDevtools } from "../devtools/vue-devtools.js";
|
|
5
|
+
export default defineNuxtPlugin({
|
|
6
|
+
name: "i18n-vue-devtools",
|
|
7
|
+
dependsOn: ["i18n-plugin-loader"],
|
|
8
|
+
async setup() {
|
|
9
|
+
if (!import.meta.dev || import.meta.server) {
|
|
10
|
+
return;
|
|
11
|
+
}
|
|
12
|
+
const nuxtApp = useNuxtApp();
|
|
13
|
+
const bridge = getI18nDevtoolsBridge();
|
|
14
|
+
if (!bridge) {
|
|
15
|
+
return;
|
|
16
|
+
}
|
|
17
|
+
const notifier = await setupVueI18nDevtools({
|
|
18
|
+
app: nuxtApp.vueApp,
|
|
19
|
+
i18n: bridge.i18n,
|
|
20
|
+
i18nConfig: bridge.i18nConfig,
|
|
21
|
+
onContextChange: (listener) => bridge.i18n.onContextChange(listener),
|
|
22
|
+
onMissingKey: (listener) => bridge.i18n.onMissingKey(listener)
|
|
23
|
+
});
|
|
24
|
+
if (!notifier) {
|
|
25
|
+
return;
|
|
26
|
+
}
|
|
27
|
+
const notifyCurrentLoad = () => {
|
|
28
|
+
const locale = bridge.i18n.getCurrentLocale();
|
|
29
|
+
const routeName = bridge.i18n.getCurrentRouteName() || "index";
|
|
30
|
+
notifier.notifyLoad(locale, routeName, countLoadedTranslationKeys(bridge.i18n, locale, routeName));
|
|
31
|
+
};
|
|
32
|
+
notifyCurrentLoad();
|
|
33
|
+
watch(
|
|
34
|
+
() => bridge.localeState.value,
|
|
35
|
+
(to, from) => {
|
|
36
|
+
if (to && from && to !== from) {
|
|
37
|
+
notifier.notifyLocaleSwitch(from, to, bridge.i18n.getCurrentRouteName() || "index");
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
);
|
|
41
|
+
bridge.i18n.onContextChange((reason) => {
|
|
42
|
+
if (reason === "load") {
|
|
43
|
+
notifyCurrentLoad();
|
|
44
|
+
return;
|
|
45
|
+
}
|
|
46
|
+
notifier.refreshInspector();
|
|
47
|
+
});
|
|
48
|
+
if (bridge.i18nConfig.debug) {
|
|
49
|
+
const wrapTranslate = (translate) => ((key, ...args) => {
|
|
50
|
+
const result = translate(key, ...args);
|
|
51
|
+
notifier.notifyTranslate(key, result);
|
|
52
|
+
return result;
|
|
53
|
+
});
|
|
54
|
+
const app = nuxtApp;
|
|
55
|
+
app.$t = wrapTranslate(app.$t.bind(app));
|
|
56
|
+
app.$ts = wrapTranslate(app.$ts.bind(app));
|
|
57
|
+
app.$tc = wrapTranslate(app.$tc.bind(app));
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
});
|