nuxt-i18n-micro 1.6.1 → 1.8.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.
Files changed (35) hide show
  1. package/README.md +3 -1
  2. package/dist/client/200.html +9 -9
  3. package/dist/client/404.html +9 -9
  4. package/dist/client/_nuxt/{DU08RbPQ.js → BjjmLJlJ.js} +1 -1
  5. package/dist/client/_nuxt/{CG2qJMgW.js → CODxK4mZ.js} +1 -1
  6. package/dist/client/_nuxt/Dsi6OVUM.js +1 -0
  7. package/dist/client/_nuxt/GiSJHq2i.js +119 -0
  8. package/dist/client/_nuxt/builds/latest.json +1 -1
  9. package/dist/client/_nuxt/builds/meta/d5645743-c1d7-431a-b761-c2ca1aa2b12b.json +1 -0
  10. package/dist/client/_nuxt/entry.BjfKHLcZ.css +1 -0
  11. package/dist/client/_nuxt/error-404.D-AvUzLt.css +1 -0
  12. package/dist/client/_nuxt/error-500.21ZDxC33.css +1 -0
  13. package/dist/client/index.html +9 -9
  14. package/dist/module.d.mts +5 -4
  15. package/dist/module.d.ts +5 -4
  16. package/dist/module.json +1 -1
  17. package/dist/module.mjs +30 -17
  18. package/dist/runtime/components/i18n-link.vue +12 -6
  19. package/dist/runtime/components/i18n-switcher.vue +85 -27
  20. package/dist/runtime/components/i18n-t.vue +93 -60
  21. package/dist/runtime/components/i18n-t.vue.d.ts +73 -0
  22. package/dist/runtime/composables/useLocaleHead.d.ts +22 -0
  23. package/dist/runtime/composables/useLocaleHead.js +97 -0
  24. package/dist/runtime/plugins/01.plugin.d.ts +2 -2
  25. package/dist/runtime/plugins/01.plugin.js +59 -107
  26. package/dist/runtime/plugins/02.meta.js +15 -45
  27. package/dist/runtime/translationHelper.d.ts +5 -5
  28. package/dist/runtime/translationHelper.js +24 -45
  29. package/package.json +20 -11
  30. package/dist/client/_nuxt/BOJGXfH_.js +0 -119
  31. package/dist/client/_nuxt/DyPhI3v_.js +0 -1
  32. package/dist/client/_nuxt/builds/meta/3583a2c9-2645-4710-9180-da6d201fe3ee.json +0 -1
  33. package/dist/client/_nuxt/entry.CF1WZhsD.css +0 -1
  34. package/dist/client/_nuxt/error-404.CjTTbIxB.css +0 -1
  35. package/dist/client/_nuxt/error-500.B4KzowuE.css +0 -1
@@ -1 +1 @@
1
- {"id":"3583a2c9-2645-4710-9180-da6d201fe3ee","timestamp":1724321138809}
1
+ {"id":"d5645743-c1d7-431a-b761-c2ca1aa2b12b","timestamp":1724679319560}
@@ -0,0 +1 @@
1
+ {"id":"d5645743-c1d7-431a-b761-c2ca1aa2b12b","timestamp":1724679319560,"matcher":{"static":{},"wildcard":{},"dynamic":{}},"prerendered":[]}
@@ -0,0 +1 @@
1
+ :root{--nui-c-context:125,125,125}html{background-color:#fff}html.dark{background-color:#151515;color:#fff;color-scheme:dark}::-moz-selection{background:#8884}::selection{background:#8884}.shiki .line{display:inline-block;position:relative;width:100%}.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{opacity:1!important;position:inherit;scroll-margin:20px;z-index:100}.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{bottom:0;content:"";display:block;left:0;position:absolute;right:0;top:0}.shiki .line-removed:after{background-color:#8f4c3926}::view-transition-new(root),::view-transition-old(root){animation:none;mix-blend-mode:normal}::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);border-style:solid;border-width:0;box-sizing:border-box}:after,:before{--un-content:""}:host,html{line-height:1.5;-webkit-text-size-adjust:100%;font-family:ui-sans-serif,system-ui,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;font-feature-settings:normal;font-variation-settings:normal;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-tap-highlight-color:transparent}body{line-height:inherit;margin:0}hr{border-top-width:1px;color:inherit;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;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,pre,samp{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-feature-settings:normal;font-size:1em;font-variation-settings:normal}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{border-collapse:collapse;border-color:inherit;text-indent:0}button,input,optgroup,select,textarea{color:inherit;font-family:inherit;font-feature-settings:inherit;font-size:100%;font-variation-settings:inherit;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:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-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}fieldset,legend{padding:0}menu,ol,ul{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,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{display:block;vertical-align:middle}img,video{height:auto;max-width:100%}[hidden]{display:none}*,: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 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:rgba(147,197,253,.5);--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: }::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:rgba(147,197,253,.5);--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: }@font-face{font-display:swap;font-family:DM Mono;font-style:normal;font-weight:400;src:url(https://fonts.gstatic.com/s/dmmono/v14/aFTU7PB1QTsUX8KYthSQBLyM.woff2) format("woff2");unicode-range:u+0100-02af,u+0304,u+0308,u+0329,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/v14/aFTU7PB1QTsUX8KYthqQBA.woff2) format("woff2");unicode-range:u+00??,u+0131,u+0152-0153,u+02bb-02bc,u+02c6,u+02da,u+02dc,u+0304,u+0308,u+0329,u+2000-206f,u+2074,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/v15/rP2tp2ywxg089UriI5-g4vlH9VoD8CmcqZG40F9JadbnoEwAopxRR232VGM.woff2) format("woff2");unicode-range:u+0100-02af,u+0304,u+0308,u+0329,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/v15/rP2tp2ywxg089UriI5-g4vlH9VoD8CmcqZG40F9JadbnoEwAopxRSW32.woff2) format("woff2");unicode-range:u+00??,u+0131,u+0152-0153,u+02bb-02bc,u+02c6,u+02da,u+02dc,u+0304,u+0308,u+0329,u+2000-206f,u+2074,u+20ac,u+2122,u+2191,u+2193,u+2212,u+2215,u+feff,u+fffd}.carbon-search{--un-icon:url("data:image/svg+xml;utf8,%3Csvg viewBox='0 0 32 32' display='inline-block' vertical-align='middle' width='1.2em' height='1.2em' xmlns='http://www.w3.org/2000/svg' %3E%3Cpath fill='currentColor' d='m29 27.586l-7.552-7.552a11.018 11.018 0 1 0-1.414 1.414L27.586 29ZM4 13a9 9 0 1 1 9 9a9.01 9.01 0 0 1-9-9'/%3E%3C/svg%3E")}.carbon-search,.i-carbon-circle-dash{background-color:currentColor;color:inherit;display:inline-block;height:1.2em;-webkit-mask:var(--un-icon) no-repeat;mask:var(--un-icon) no-repeat;-webkit-mask-size:100% 100%;mask-size:100% 100%;vertical-align:middle;width:1.2em}.i-carbon-circle-dash{--un-icon:url("data:image/svg+xml;utf8,%3Csvg viewBox='0 0 32 32' display='inline-block' vertical-align='middle' width='1.2em' height='1.2em' xmlns='http://www.w3.org/2000/svg' %3E%3Cpath fill='currentColor' d='M7.7 4.7a14.7 14.7 0 0 0-3 3.1L6.3 9a13.3 13.3 0 0 1 2.6-2.7zm-3.1 7.6l-1.9-.6A12.5 12.5 0 0 0 2 16h2a11.5 11.5 0 0 1 .6-3.7m-1.9 8.1a14.4 14.4 0 0 0 2 3.9l1.6-1.2a12.9 12.9 0 0 1-1.7-3.3zm5.1 6.9a14.4 14.4 0 0 0 3.9 2l.6-1.9A12.9 12.9 0 0 1 9 25.7zm3.9-24.6l.6 1.9A11.5 11.5 0 0 1 16 4V2a12.5 12.5 0 0 0-4.3.7m12.5 24.6a15.2 15.2 0 0 0 3.1-3.1L25.7 23a11.5 11.5 0 0 1-2.7 2.7zm3.2-7.6l1.9.6A15.5 15.5 0 0 0 30 16h-2a11.5 11.5 0 0 1-.6 3.7m1.8-8.1a14.4 14.4 0 0 0-2-3.9l-1.6 1.2a12.9 12.9 0 0 1 1.7 3.3zm-5.1-7a14.4 14.4 0 0 0-3.9-2l-.6 1.9a12.9 12.9 0 0 1 3.3 1.7zm-3.8 24.7l-.6-1.9a11.5 11.5 0 0 1-3.7.6v2a21.4 21.4 0 0 0 4.3-.7'/%3E%3C/svg%3E")}.i-carbon\:arrow-up-right,[i-carbon\:arrow-up-right=""]{--un-icon:url("data:image/svg+xml;utf8,%3Csvg viewBox='0 0 32 32' display='inline-block' vertical-align='middle' width='1.2em' height='1.2em' xmlns='http://www.w3.org/2000/svg' %3E%3Cpath fill='currentColor' d='M10 6v2h12.59L6 24.59L7.41 26L24 9.41V22h2V6z'/%3E%3C/svg%3E");background-color:currentColor;color:inherit;display:inline-block;height:1.2em;-webkit-mask:var(--un-icon) no-repeat;mask:var(--un-icon) no-repeat;-webkit-mask-size:100% 100%;mask-size:100% 100%;vertical-align:middle;width:1.2em}.n-button-icon{font-size:1.1em;margin-left:-.2em;margin-right:.2em}.n-icon-button{align-items:center;aspect-ratio:1/1;border-radius:.25rem;display:flex;height:1.6em;justify-content:center;opacity:.5;width:1.6em}.n-loading{width:100%}.n-loading,.n-panel-grids-center{align-items:center;display:flex;height:100%;justify-content:center}.n-panel-grids-center{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='20' height='20' transform='scale(3)'%3E%3Crect width='100%25' height='100%25' fill='%23fff'/%3E%3Cpath fill='none' stroke='hsla(0, 0%25, 98%25, 1)' stroke-width='.2' d='M10 0v20ZM0 10h20Z'/%3E%3C/svg%3E");background-size:40px 40px;flex-direction:column;gap:.5rem}.n-button-base{align-items:center;border-color:#9ca3af33;border-radius:.25rem;border-width:1px;display:inline-flex;gap:.25rem;opacity:.8;padding:.25em 1em;touch-action:manipulation;--un-shadow:var(--un-shadow-inset) 0 1px 2px 0 var(--un-shadow-color,rgba(0,0,0,.05));box-shadow:var(--un-ring-offset-shadow),var(--un-ring-shadow),var(--un-shadow);outline:2px solid transparent!important;outline-offset:2px!important}.n-icon{flex:none}.n-card-base{border-color:#9ca3af33;border-radius:.25rem;border-width:1px;--un-bg-opacity:1;background-color:rgb(255 255 255/var(--un-bg-opacity));--un-shadow:var(--un-shadow-inset) 0 1px 2px 0 var(--un-shadow-color,rgba(0,0,0,.05));box-shadow:var(--un-ring-offset-shadow),var(--un-ring-shadow),var(--un-shadow)}.n-border-base{border-color:#9ca3af33}.hover\:n-button-hover:hover{--un-border-opacity:1!important;border-color:rgba(var(--nui-c-context),var(--un-border-opacity))!important;--un-text-opacity:1;color:rgba(var(--nui-c-context),var(--un-text-opacity));opacity:1}.n-bg-active{background-color:#9ca3af0d}.dark .n-bg-base,.dark .n-card-base{--un-bg-opacity:1;background-color:rgb(21 21 21/var(--un-bg-opacity))}.n-bg-base{--un-bg-opacity:1;background-color:rgb(255 255 255/var(--un-bg-opacity))}.hover\:n-bg-hover:hover{background-color:#9ca3af08}.n-icon-button:hover{background-color:#9ca3af0d;opacity:1}.active\:n-button-active:active{background-color:rgba(var(--nui-c-context),.05);--un-ring-width:3px;--un-ring-offset-shadow:var(--un-ring-inset) 0 0 0 var(--un-ring-offset-width) var(--un-ring-offset-color);--un-ring-shadow:var(--un-ring-inset) 0 0 0 calc(var(--un-ring-width) + var(--un-ring-offset-width)) var(--un-ring-color);box-shadow:var(--un-ring-offset-shadow),var(--un-ring-shadow),var(--un-shadow);--un-ring-color:rgba(var(--nui-c-context),.1)}.hover\:n-link-hover:hover{--un-text-opacity:1;color:rgba(var(--nui-c-context),var(--un-text-opacity));-webkit-text-decoration-color:rgba(var(--nui-c-context),var(--un-line-opacity))!important;--un-line-opacity:1!important;opacity:1!important;text-decoration-color:rgba(var(--nui-c-context),var(--un-line-opacity))!important;text-decoration-style:dotted}.n-link-base{text-decoration-color:#0003;text-decoration-line:underline;text-underline-offset:2px}.dark .n-link-base{text-decoration-color:#fff6}.focus-within\:n-focus-base:focus-within{--un-ring-width:2px;--un-ring-offset-shadow:var(--un-ring-inset) 0 0 0 var(--un-ring-offset-width) var(--un-ring-offset-color);--un-ring-shadow:var(--un-ring-inset) 0 0 0 calc(var(--un-ring-width) + var(--un-ring-offset-width)) var(--un-ring-color);box-shadow:var(--un-ring-offset-shadow),var(--un-ring-shadow),var(--un-shadow);--un-ring-color:rgba(var(--nui-c-context),.5)}.focus-visible\:n-focus-base:focus-visible{--un-ring-width:2px;--un-ring-offset-shadow:var(--un-ring-inset) 0 0 0 var(--un-ring-offset-width) var(--un-ring-offset-color);--un-ring-shadow:var(--un-ring-inset) 0 0 0 calc(var(--un-ring-width) + var(--un-ring-offset-width)) var(--un-ring-color);box-shadow:var(--un-ring-offset-shadow),var(--un-ring-shadow),var(--un-shadow);--un-ring-color:rgba(var(--nui-c-context),.5)}.n-transition{transition-duration:.15s;transition-duration:.2s;transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1)}.dark .n-panel-grids-center{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='20' height='20' transform='scale(3)'%3E%3Crect width='100%25' height='100%25' fill='hsl(0, 0%25, 8.5%25)'/%3E%3Cpath fill='none' stroke='hsl(0, 0%25, 11.0%25)' stroke-width='.2' d='M10 0v20ZM0 10h20Z'/%3E%3C/svg%3E");background-size:40px 40px}.absolute{position:absolute}.fixed{position:fixed}.relative,[relative=""]{position:relative}.-bottom-1\/2{bottom:-50%}.left-0{left:0}.right-0{right:0}.z-10{z-index:10}.z-20{z-index:20}.grid{display:grid}.mb-16{margin-bottom:4rem}.mb-6{margin-bottom:1.5rem}.mb-8{margin-bottom:2rem}.ml-0\.3em{margin-left:.3em}.ml-0\.4em{margin-left:.4em}.mr-0\.1em{margin-right:.1em}.block,[block=""]{display:block}.h-1\/2{height:50%}.h-auto{height:auto}.h-full,[h-full=""]{height:100%}.h-screen{height:100vh}.h1{height:.25rem}.max-w-520px{max-width:520px}.min-h-screen{min-height:100vh}.w-full,[w-full=""]{width:100%}.flex,[flex~="~"]{display:flex}.flex-1{flex:1 1 0%}.flex-auto{flex:1 1 auto}.flex-col,[flex~=col]{flex-direction:column}.translate-y--1,[translate-y--1=""]{--un-translate-y:-.25rem;transform:translate(var(--un-translate-x)) translateY(var(--un-translate-y)) translateZ(var(--un-translate-z)) rotate(var(--un-rotate)) rotateX(var(--un-rotate-x)) rotateY(var(--un-rotate-y)) rotate(var(--un-rotate-z)) skew(var(--un-skew-x)) skewY(var(--un-skew-y)) scaleX(var(--un-scale-x)) scaleY(var(--un-scale-y)) scaleZ(var(--un-scale-z))}@keyframes pulse{0%,to{opacity:1}50%{opacity:.5}}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(1turn)}}.animate-pulse{animation:pulse 2s cubic-bezier(.4,0,.6,1) infinite}.animate-spin{animation:spin 1s linear infinite}.cursor-pointer{cursor:pointer}.place-content-center{place-content:center}.items-center{align-items:center}.justify-center{justify-content:center}.of-auto\!{overflow:auto!important}.of-hidden,.overflow-hidden,[of-hidden=""]{overflow:hidden}.overflow-auto{overflow:auto}.overflow-y-auto{overflow-y:auto}.truncate,[truncate=""]{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.border,[border=""]{border-width:1px}.border-r{border-right-width:1px}.border-t{border-top-width:1px}.focus-within\:border-context:focus-within{--un-border-opacity:1;border-color:rgba(var(--nui-c-context),var(--un-border-opacity))}.rounded{border-radius:.25rem}.rounded-t-md{border-top-left-radius:.375rem;border-top-right-radius:.375rem}.bg-black\/5{background-color:#0000000d}.bg-white{--un-bg-opacity:1;background-color:rgb(255 255 255/var(--un-bg-opacity))}.dark .dark\:bg-black{--un-bg-opacity:1;background-color:rgb(0 0 0/var(--un-bg-opacity))}.dark .dark\:bg-white\/10{background-color:#ffffff1a}.p-8{padding:2rem}.px-10{padding-left:2.5rem;padding-right:2.5rem}.px-4{padding-left:1rem;padding-right:1rem}.px-8{padding-left:2rem;padding-right:2rem}.px2,[px2=""]{padding-left:.5rem;padding-right:.5rem}.px6,[px6=""]{padding-left:1.5rem;padding-right:1.5rem}.py-1,.py1,[py1=""]{padding-bottom:.25rem;padding-top:.25rem}.py-2{padding-bottom:.5rem;padding-top:.5rem}.py4,[py4=""]{padding-bottom:1rem;padding-top:1rem}.pl-1{padding-left:.25rem}.pr-2{padding-right:.5rem}.pt-14{padding-top:3.5rem}.text-center{text-align:center}.text-start,[text-start=""]{text-align:start}.text-1\.1em{font-size:1.1em}.text-4xl{font-size:2.25rem;line-height:2.5rem}.text-6xl{font-size:3.75rem;line-height:1}.text-8xl{font-size:6rem;line-height:1}.text-lg{font-size:1.125rem;line-height:1.75rem}.text-sm,[text-sm=""]{font-size:.875rem;line-height:1.25rem}.text-xl{font-size:1.25rem;line-height:1.75rem}.text-xs,[text-xs=""]{font-size:.75rem;line-height:1rem}.dark .dark\:text-white{--un-text-opacity:1;color:rgb(255 255 255/var(--un-text-opacity))}.text-black{--un-text-opacity:1;color:rgb(0 0 0/var(--un-text-opacity))}.text-primary{--un-text-opacity:1;color:rgb(9 158 97/var(--un-text-opacity))}.font-light{font-weight:300}.font-medium{font-weight:500}.leading-tight{line-height:1.25}.font-mono,[font-mono=""]{font-family:DM Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}.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}.underline,[underline=""]{text-decoration-line:underline}.antialiased{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.op50,[op50=""]{opacity:.5}.\!outline-none{outline:2px solid transparent!important;outline-offset:2px!important}.transition{transition-duration:.15s;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1)}.ease,.ease-in-out{transition-timing-function:cubic-bezier(.4,0,.2,1)}[n~=orange]{--nui-c-context:251,146,60}.n-disabled\:n-disabled[disabled],[disabled] .n-disabled\:n-disabled{filter:saturate(0);opacity:.6;pointer-events:none}@media (min-width:640px){.sm\:px-0{padding-left:0;padding-right:0}.sm\:px-6{padding-left:1.5rem;padding-right:1.5rem}.sm\:py-3{padding-bottom:.75rem;padding-top:.75rem}.sm\:text-2xl{font-size:1.5rem;line-height:2rem}.sm\:text-4xl{font-size:2.25rem;line-height:2.5rem}.sm\:text-8xl{font-size:6rem;line-height:1}.sm\:text-xl{font-size:1.25rem;line-height:1.75rem}}.splitpanes{display:flex;height:100%;width:100%}.splitpanes--vertical{flex-direction:row}.splitpanes--horizontal{flex-direction:column}.splitpanes--dragging *{-webkit-user-select:none;-moz-user-select:none;user-select:none}.splitpanes__pane{height:100%;overflow:hidden;width:100%}.splitpanes--vertical .splitpanes__pane{transition:width .2s ease-out}.splitpanes--horizontal .splitpanes__pane{transition:height .2s ease-out}.splitpanes--dragging .splitpanes__pane{transition:none}.splitpanes__splitter{touch-action:none}.splitpanes--vertical>.splitpanes__splitter{cursor:col-resize;min-width:1px}.splitpanes--horizontal>.splitpanes__splitter{cursor:row-resize;min-height:1px}.splitpanes.default-theme .splitpanes__pane{background-color:#f2f2f2}.splitpanes.default-theme .splitpanes__splitter{background-color:#fff;box-sizing:border-box;flex-shrink:0;position:relative}.splitpanes.default-theme .splitpanes__splitter:after,.splitpanes.default-theme .splitpanes__splitter:before{background-color:#00000026;content:"";left:50%;position:absolute;top:50%;transition:background-color .3s}.splitpanes.default-theme .splitpanes__splitter:hover:after,.splitpanes.default-theme .splitpanes__splitter:hover:before{background-color:#00000040}.splitpanes.default-theme .splitpanes__splitter:first-child{cursor:auto}.default-theme.splitpanes .splitpanes .splitpanes__splitter{z-index:1}.default-theme .splitpanes--vertical>.splitpanes__splitter,.default-theme.splitpanes--vertical>.splitpanes__splitter{border-left:1px solid #eee;margin-left:-1px;width:7px}.default-theme .splitpanes--vertical>.splitpanes__splitter:after,.default-theme .splitpanes--vertical>.splitpanes__splitter:before,.default-theme.splitpanes--vertical>.splitpanes__splitter:after,.default-theme.splitpanes--vertical>.splitpanes__splitter:before{height:30px;transform:translateY(-50%);width:1px}.default-theme .splitpanes--vertical>.splitpanes__splitter:before,.default-theme.splitpanes--vertical>.splitpanes__splitter:before{margin-left:-2px}.default-theme .splitpanes--vertical>.splitpanes__splitter:after,.default-theme.splitpanes--vertical>.splitpanes__splitter:after{margin-left:1px}.default-theme .splitpanes--horizontal>.splitpanes__splitter,.default-theme.splitpanes--horizontal>.splitpanes__splitter{border-top:1px solid #eee;height:7px;margin-top:-1px}.default-theme .splitpanes--horizontal>.splitpanes__splitter:after,.default-theme .splitpanes--horizontal>.splitpanes__splitter:before,.default-theme.splitpanes--horizontal>.splitpanes__splitter:after,.default-theme.splitpanes--horizontal>.splitpanes__splitter:before{height:1px;transform:translate(-50%);width:30px}.default-theme .splitpanes--horizontal>.splitpanes__splitter:before,.default-theme.splitpanes--horizontal>.splitpanes__splitter:before{margin-top:-2px}.default-theme .splitpanes--horizontal>.splitpanes__splitter:after,.default-theme.splitpanes--horizontal>.splitpanes__splitter:after{margin-top:1px}.splitpanes__splitter{position:relative}.splitpanes__splitter:before{content:"";left:0;position:absolute;top:0;transition:.2s ease;transition:opacity .4s;z-index:1}.splitpanes__splitter:hover:before{background:#8881;opacity:1}.splitpanes--vertical>.splitpanes__splitter{min-width:0!important;width:0!important;border-right-width:1px}.splitpanes--horizontal>.splitpanes__splitter{height:0!important;min-height:0!important;border-top-width:1px}.splitpanes--vertical>.splitpanes__splitter:before{height:100%;left:-5px;right:-4px}.splitpanes--horizontal>.splitpanes__splitter:before{bottom:-4px;top:-5px;width:100%}
@@ -0,0 +1 @@
1
+ .spotlight[data-v-83de2354]{background:linear-gradient(45deg,#00dc82,#36e4da 50%,#0047e1);bottom:-30vh;filter:blur(20vh);height:40vh}.gradient-border[data-v-83de2354]{-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);border-radius:.5rem;position:relative}@media (prefers-color-scheme:light){.gradient-border[data-v-83de2354]{background-color:#ffffff4d}.gradient-border[data-v-83de2354]:before{background:linear-gradient(90deg,#e2e2e2,#e2e2e2 25%,#00dc82,#36e4da 75%,#0047e1)}}@media (prefers-color-scheme:dark){.gradient-border[data-v-83de2354]{background-color:#1414144d}.gradient-border[data-v-83de2354]:before{background:linear-gradient(90deg,#303030,#303030 25%,#00dc82,#36e4da 75%,#0047e1)}}.gradient-border[data-v-83de2354]:before{background-size:400% auto;border-radius:.5rem;bottom:0;content:"";left:0;-webkit-mask:linear-gradient(#fff 0 0) content-box,linear-gradient(#fff 0 0);mask:linear-gradient(#fff 0 0) content-box,linear-gradient(#fff 0 0);-webkit-mask-composite:xor;mask-composite:exclude;opacity:.5;padding:2px;position:absolute;right:0;top:0;transition:background-position .3s ease-in-out,opacity .2s ease-in-out;width:100%}.gradient-border[data-v-83de2354]:hover:before{background-position:-50% 0;opacity:1}.fixed[data-v-83de2354]{position:fixed}.left-0[data-v-83de2354]{left:0}.right-0[data-v-83de2354]{right:0}.z-10[data-v-83de2354]{z-index:10}.z-20[data-v-83de2354]{z-index:20}.grid[data-v-83de2354]{display:grid}.mb-16[data-v-83de2354]{margin-bottom:4rem}.mb-8[data-v-83de2354]{margin-bottom:2rem}.max-w-520px[data-v-83de2354]{max-width:520px}.min-h-screen[data-v-83de2354]{min-height:100vh}.w-full[data-v-83de2354]{width:100%}.flex[data-v-83de2354]{display:flex}.cursor-pointer[data-v-83de2354]{cursor:pointer}.place-content-center[data-v-83de2354]{place-content:center}.items-center[data-v-83de2354]{align-items:center}.justify-center[data-v-83de2354]{justify-content:center}.overflow-hidden[data-v-83de2354]{overflow:hidden}.bg-white[data-v-83de2354]{--un-bg-opacity:1;background-color:rgb(255 255 255/var(--un-bg-opacity))}.px-4[data-v-83de2354]{padding-left:1rem;padding-right:1rem}.px-8[data-v-83de2354]{padding-left:2rem;padding-right:2rem}.py-2[data-v-83de2354]{padding-bottom:.5rem;padding-top:.5rem}.text-center[data-v-83de2354]{text-align:center}.text-8xl[data-v-83de2354]{font-size:6rem;line-height:1}.text-xl[data-v-83de2354]{font-size:1.25rem;line-height:1.75rem}.text-black[data-v-83de2354]{--un-text-opacity:1;color:rgb(0 0 0/var(--un-text-opacity))}.font-light[data-v-83de2354]{font-weight:300}.font-medium[data-v-83de2354]{font-weight:500}.leading-tight[data-v-83de2354]{line-height:1.25}.font-sans[data-v-83de2354]{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}.antialiased[data-v-83de2354]{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}@media (prefers-color-scheme:dark){.dark\:bg-black[data-v-83de2354]{--un-bg-opacity:1;background-color:rgb(0 0 0/var(--un-bg-opacity))}.dark\:text-white[data-v-83de2354]{--un-text-opacity:1;color:rgb(255 255 255/var(--un-text-opacity))}}@media (min-width:640px){.sm\:px-0[data-v-83de2354]{padding-left:0;padding-right:0}.sm\:px-6[data-v-83de2354]{padding-left:1.5rem;padding-right:1.5rem}.sm\:py-3[data-v-83de2354]{padding-bottom:.75rem;padding-top:.75rem}.sm\:text-4xl[data-v-83de2354]{font-size:2.25rem;line-height:2.5rem}.sm\:text-xl[data-v-83de2354]{font-size:1.25rem;line-height:1.75rem}}
@@ -0,0 +1 @@
1
+ .spotlight[data-v-b63e9691]{background:linear-gradient(45deg,#00dc82,#36e4da 50%,#0047e1);filter:blur(20vh)}.fixed[data-v-b63e9691]{position:fixed}.-bottom-1\/2[data-v-b63e9691]{bottom:-50%}.left-0[data-v-b63e9691]{left:0}.right-0[data-v-b63e9691]{right:0}.grid[data-v-b63e9691]{display:grid}.mb-16[data-v-b63e9691]{margin-bottom:4rem}.mb-8[data-v-b63e9691]{margin-bottom:2rem}.h-1\/2[data-v-b63e9691]{height:50%}.max-w-520px[data-v-b63e9691]{max-width:520px}.min-h-screen[data-v-b63e9691]{min-height:100vh}.place-content-center[data-v-b63e9691]{place-content:center}.overflow-hidden[data-v-b63e9691]{overflow:hidden}.bg-white[data-v-b63e9691]{--un-bg-opacity:1;background-color:rgb(255 255 255/var(--un-bg-opacity))}.px-8[data-v-b63e9691]{padding-left:2rem;padding-right:2rem}.text-center[data-v-b63e9691]{text-align:center}.text-8xl[data-v-b63e9691]{font-size:6rem;line-height:1}.text-xl[data-v-b63e9691]{font-size:1.25rem;line-height:1.75rem}.text-black[data-v-b63e9691]{--un-text-opacity:1;color:rgb(0 0 0/var(--un-text-opacity))}.font-light[data-v-b63e9691]{font-weight:300}.font-medium[data-v-b63e9691]{font-weight:500}.leading-tight[data-v-b63e9691]{line-height:1.25}.font-sans[data-v-b63e9691]{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}.antialiased[data-v-b63e9691]{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}@media (prefers-color-scheme:dark){.dark\:bg-black[data-v-b63e9691]{--un-bg-opacity:1;background-color:rgb(0 0 0/var(--un-bg-opacity))}.dark\:text-white[data-v-b63e9691]{--un-text-opacity:1;color:rgb(255 255 255/var(--un-text-opacity))}}@media (min-width:640px){.sm\:px-0[data-v-b63e9691]{padding-left:0;padding-right:0}.sm\:text-4xl[data-v-b63e9691]{font-size:2.25rem;line-height:2.5rem}}
@@ -1,12 +1,12 @@
1
1
  <!DOCTYPE html><html data-capo=""><head><meta charset="utf-8">
2
2
  <meta name="viewport" content="width=device-width, initial-scale=1">
3
- <link rel="stylesheet" href="/__nuxt-i18n-micro/_nuxt/entry.CF1WZhsD.css">
4
- <link rel="modulepreload" as="script" crossorigin href="/__nuxt-i18n-micro/_nuxt/BOJGXfH_.js">
3
+ <link rel="stylesheet" href="/__nuxt-i18n-micro/_nuxt/entry.BjfKHLcZ.css">
4
+ <link rel="modulepreload" as="script" crossorigin href="/__nuxt-i18n-micro/_nuxt/GiSJHq2i.js">
5
5
  <link rel="prefetch" as="script" crossorigin href="/__nuxt-i18n-micro/_nuxt/B6E6ObS_.js">
6
- <link rel="prefetch" as="style" href="/__nuxt-i18n-micro/_nuxt/error-404.CjTTbIxB.css">
7
- <link rel="prefetch" as="script" crossorigin href="/__nuxt-i18n-micro/_nuxt/DyPhI3v_.js">
8
- <link rel="prefetch" as="script" crossorigin href="/__nuxt-i18n-micro/_nuxt/DU08RbPQ.js">
9
- <link rel="prefetch" as="style" href="/__nuxt-i18n-micro/_nuxt/error-500.B4KzowuE.css">
10
- <link rel="prefetch" as="script" crossorigin href="/__nuxt-i18n-micro/_nuxt/CG2qJMgW.js">
11
- <script type="module" src="/__nuxt-i18n-micro/_nuxt/BOJGXfH_.js" crossorigin></script></head><body><div id="__nuxt"></div><div id="teleports"></div><script type="application/json" id="__NUXT_DATA__" data-ssr="false">[{"serverRendered":1},false]</script>
12
- <script>window.__NUXT__={};window.__NUXT__.config={public:{},app:{baseURL:"/__nuxt-i18n-micro",buildId:"3583a2c9-2645-4710-9180-da6d201fe3ee",buildAssetsDir:"/_nuxt/",cdnURL:""}}</script></body></html>
6
+ <link rel="prefetch" as="style" href="/__nuxt-i18n-micro/_nuxt/error-404.D-AvUzLt.css">
7
+ <link rel="prefetch" as="script" crossorigin href="/__nuxt-i18n-micro/_nuxt/Dsi6OVUM.js">
8
+ <link rel="prefetch" as="script" crossorigin href="/__nuxt-i18n-micro/_nuxt/BjjmLJlJ.js">
9
+ <link rel="prefetch" as="style" href="/__nuxt-i18n-micro/_nuxt/error-500.21ZDxC33.css">
10
+ <link rel="prefetch" as="script" crossorigin href="/__nuxt-i18n-micro/_nuxt/CODxK4mZ.js">
11
+ <script type="module" src="/__nuxt-i18n-micro/_nuxt/GiSJHq2i.js" crossorigin></script></head><body><div id="__nuxt"></div><div id="teleports"></div><script type="application/json" data-nuxt-data="nuxt-app" data-ssr="false" id="__NUXT_DATA__">[{"serverRendered":1},false]</script>
12
+ <script>window.__NUXT__={};window.__NUXT__.config={public:{},app:{baseURL:"/__nuxt-i18n-micro",buildId:"d5645743-c1d7-431a-b761-c2ca1aa2b12b",buildAssetsDir:"/_nuxt/",cdnURL:""}}</script></body></html>
package/dist/module.d.mts CHANGED
@@ -5,17 +5,18 @@ interface Locale {
5
5
  code: string;
6
6
  disabled?: boolean;
7
7
  iso?: string;
8
- dir?: 'rtl' | 'ltr';
8
+ dir?: 'ltr' | 'rtl' | 'auto';
9
9
  }
10
10
  interface ModuleOptions {
11
11
  locales?: Locale[];
12
- mata?: boolean;
12
+ meta?: boolean;
13
+ metaBaseUrl?: string;
14
+ define?: boolean;
13
15
  defaultLocale?: string;
14
16
  translationDir?: string;
15
17
  autoDetectLanguage?: boolean;
16
18
  includeDefaultLocaleRoute?: boolean;
17
19
  routesLocaleLinks?: Record<string, string>;
18
- cache?: boolean;
19
20
  plural?: string;
20
21
  }
21
22
  interface ModuleOptionsExtend extends ModuleOptions {
@@ -25,7 +26,7 @@ interface ModuleOptionsExtend extends ModuleOptions {
25
26
  dateBuild: number;
26
27
  baseURL: string;
27
28
  }
28
- declare const _default: _nuxt_schema.NuxtModule<ModuleOptions>;
29
+ declare const _default: _nuxt_schema.NuxtModule<ModuleOptions, ModuleOptions, false>;
29
30
 
30
31
  interface ModuleHooks {
31
32
  'i18n:register': (registerModule: (translations: unknown, locale: string) => void) => HookResult;
package/dist/module.d.ts CHANGED
@@ -5,17 +5,18 @@ interface Locale {
5
5
  code: string;
6
6
  disabled?: boolean;
7
7
  iso?: string;
8
- dir?: 'rtl' | 'ltr';
8
+ dir?: 'ltr' | 'rtl' | 'auto';
9
9
  }
10
10
  interface ModuleOptions {
11
11
  locales?: Locale[];
12
- mata?: boolean;
12
+ meta?: boolean;
13
+ metaBaseUrl?: string;
14
+ define?: boolean;
13
15
  defaultLocale?: string;
14
16
  translationDir?: string;
15
17
  autoDetectLanguage?: boolean;
16
18
  includeDefaultLocaleRoute?: boolean;
17
19
  routesLocaleLinks?: Record<string, string>;
18
- cache?: boolean;
19
20
  plural?: string;
20
21
  }
21
22
  interface ModuleOptionsExtend extends ModuleOptions {
@@ -25,7 +26,7 @@ interface ModuleOptionsExtend extends ModuleOptions {
25
26
  dateBuild: number;
26
27
  baseURL: string;
27
28
  }
28
- declare const _default: _nuxt_schema.NuxtModule<ModuleOptions>;
29
+ declare const _default: _nuxt_schema.NuxtModule<ModuleOptions, ModuleOptions, false>;
29
30
 
30
31
  interface ModuleHooks {
31
32
  'i18n:register': (registerModule: (translations: unknown, locale: string) => void) => HookResult;
package/dist/module.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "nuxt-i18n-micro",
3
3
  "configKey": "i18n",
4
- "version": "1.6.1",
4
+ "version": "1.8.0",
5
5
  "builder": {
6
6
  "@nuxt/module-builder": "0.8.3",
7
7
  "unbuild": "2.0.0"
package/dist/module.mjs CHANGED
@@ -96,13 +96,13 @@ const module = defineNuxtModule({
96
96
  // Default configuration options of the Nuxt module
97
97
  defaults: {
98
98
  locales: [],
99
- mata: true,
99
+ meta: true,
100
+ define: true,
100
101
  defaultLocale: "en",
101
102
  translationDir: "locales",
102
103
  autoDetectLanguage: true,
103
104
  includeDefaultLocaleRoute: false,
104
105
  routesLocaleLinks: {},
105
- cache: false,
106
106
  plural: `function (translation, count, _locale) {
107
107
  const forms = translation.toString().split('|')
108
108
  if (count === 0 && forms.length > 2) {
@@ -114,7 +114,7 @@ const module = defineNuxtModule({
114
114
  return (forms.length > 2 ? forms[2].trim() : forms[forms.length - 1].trim()).replace('{count}', count.toString())
115
115
  }`
116
116
  },
117
- setup: async function(options, nuxt) {
117
+ async setup(options, nuxt) {
118
118
  const resolver = createResolver(import.meta.url);
119
119
  const rootDirs = nuxt.options._layers.map((layer) => layer.config.rootDir).reverse();
120
120
  const locales = (options.locales ?? []).reduce((acc, locale) => {
@@ -131,13 +131,14 @@ const module = defineNuxtModule({
131
131
  rootDirs,
132
132
  plural: options.plural,
133
133
  locales: locales ?? [],
134
- mata: options.mata ?? true,
134
+ meta: options.meta ?? true,
135
+ metaBaseUrl: options.metaBaseUrl ?? void 0,
136
+ define: options.define ?? true,
135
137
  defaultLocale: options.defaultLocale ?? "en",
136
138
  translationDir: options.translationDir ?? "locales",
137
139
  autoDetectLanguage: options.autoDetectLanguage ?? true,
138
140
  includeDefaultLocaleRoute: options.includeDefaultLocaleRoute ?? false,
139
141
  routesLocaleLinks: options.routesLocaleLinks ?? {},
140
- cache: options.cache ?? false,
141
142
  dateBuild: Date.now(),
142
143
  baseURL: nuxt.options.app.baseURL
143
144
  };
@@ -145,16 +146,18 @@ const module = defineNuxtModule({
145
146
  src: resolver.resolve("./runtime/plugins/01.plugin"),
146
147
  order: 1
147
148
  });
148
- if (options.mata) {
149
+ if (options.meta) {
149
150
  addPlugin({
150
151
  src: resolver.resolve("./runtime/plugins/02.meta"),
151
152
  order: 2
152
153
  });
153
154
  }
154
- addPlugin({
155
- src: resolver.resolve("./runtime/plugins/03.define"),
156
- order: 3
157
- });
155
+ if (options.define) {
156
+ addPlugin({
157
+ src: resolver.resolve("./runtime/plugins/03.define"),
158
+ order: 3
159
+ });
160
+ }
158
161
  if (options.autoDetectLanguage) {
159
162
  addPlugin({
160
163
  src: resolver.resolve("./runtime/plugins/04.auto-detect"),
@@ -199,14 +202,24 @@ const module = defineNuxtModule({
199
202
  ensureFileExists(pageFilePath);
200
203
  });
201
204
  });
202
- const newRoutes = pages.map((page) => ({
203
- ...page,
204
- path: `/:locale(${localeRegex})${page.path}`,
205
- name: `localized-${page.name}`,
206
- meta: {
207
- ...page.meta
205
+ const newRoutes = [];
206
+ for (let i = 0; i < pages.length; i++) {
207
+ const page = pages[i];
208
+ if (page.redirect && !page.file) {
209
+ continue;
208
210
  }
209
- }));
211
+ const newRoute = {
212
+ file: page.file,
213
+ meta: { ...page.meta },
214
+ alias: page.alias,
215
+ redirect: page.redirect,
216
+ children: page.children,
217
+ mode: page.mode,
218
+ path: `/:locale(${localeRegex})${page.path}`,
219
+ name: `localized-${page.name}`
220
+ };
221
+ newRoutes.push(newRoute);
222
+ }
210
223
  pages.push(...newRoutes);
211
224
  nuxt.options.generate.routes = Array.isArray(nuxt.options.generate.routes) ? nuxt.options.generate.routes : [];
212
225
  locales.forEach((locale) => {
@@ -1,7 +1,7 @@
1
1
  <template>
2
2
  <NuxtLink
3
3
  :to="$localeRoute(to)"
4
- :class="{ active: isActive }"
4
+ :style="activeStyle"
5
5
  >
6
6
  <slot>Go to Page</slot>
7
7
  </NuxtLink>
@@ -15,7 +15,7 @@ const { $localeRoute } = useNuxtApp()
15
15
 
16
16
  interface Props {
17
17
  to: NuxtLinkProps
18
- activeClass?: string
18
+ activeStyle?: Partial<CSSStyleDeclaration>
19
19
  }
20
20
 
21
21
  const props = defineProps<Props>()
@@ -30,8 +30,14 @@ const isActive = computed(() => {
30
30
 
31
31
  return route.path === newPath.path
32
32
  })
33
- </script>
34
33
 
35
- <style scoped>
36
- .active{color:#42b983;font-weight:700}
37
- </style>
34
+ // Define the active styles
35
+ const activeStyle = computed(() => {
36
+ return isActive.value
37
+ ? {
38
+ fontWeight: 'bold',
39
+ ...props.activeStyle, // Merge with any custom active styles passed as props
40
+ }
41
+ : {}
42
+ })
43
+ </script>
@@ -1,24 +1,24 @@
1
1
  <template>
2
- <div :class="wrapperClass">
2
+ <div :style="[wrapperStyle, customWrapperStyle]">
3
3
  <button
4
- :class="buttonClass"
4
+ :style="[buttonStyle, customButtonStyle]"
5
5
  @click="toggleDropdown"
6
6
  >
7
7
  {{ currentLocaleLabel }}
8
- <span :class="[iconClass, dropdownOpen ? 'open' : '']">&#9662;</span>
8
+ <span :style="[iconStyle, dropdownOpen ? openIconStyle : {}, customIconStyle]">&#9662;</span>
9
9
  </button>
10
10
  <ul
11
11
  v-if="dropdownOpen"
12
- :class="dropdownClass"
12
+ :style="[dropdownStyle, customDropdownStyle]"
13
13
  >
14
14
  <li
15
15
  v-for="locale in locales"
16
16
  :key="locale.code"
17
- :class="[itemClass, locale.code === currentLocale ? activeClass : '']"
17
+ :style="[itemStyle, customItemStyle]"
18
18
  >
19
19
  <NuxtLink
20
20
  :to="getLocaleLink(locale)"
21
- :class="[linkClass, locale.code === currentLocale ? disabledClass : '']"
21
+ :style="[linkStyle, locale.code === currentLocale ? activeLinkStyle : {}, locale.code === currentLocale ? disabledLinkStyle : {}, customLinkStyle]"
22
22
  :hreflang="locale.iso || locale.code"
23
23
  >
24
24
  {{ localeLabel(locale) }}
@@ -30,6 +30,7 @@
30
30
 
31
31
  <script lang="ts" setup>
32
32
  import { ref, computed } from 'vue'
33
+ import type { CSSProperties } from 'vue'
33
34
  import { useNuxtApp } from '#app'
34
35
  import { useRoute } from '#imports'
35
36
 
@@ -40,27 +41,27 @@ interface Locale {
40
41
  }
41
42
 
42
43
  interface Props {
43
- wrapperClass?: string
44
- buttonClass?: string
45
- dropdownClass?: string
46
- itemClass?: string
47
- linkClass?: string
48
- activeClass?: string
49
- disabledClass?: string
50
- iconClass?: string
51
44
  customLabels?: Record<string, string>
45
+ customWrapperStyle?: CSSProperties
46
+ customButtonStyle?: CSSProperties
47
+ customDropdownStyle?: CSSProperties
48
+ customItemStyle?: CSSProperties
49
+ customLinkStyle?: CSSProperties
50
+ customActiveLinkStyle?: CSSProperties
51
+ customDisabledLinkStyle?: CSSProperties
52
+ customIconStyle?: CSSProperties
52
53
  }
53
54
 
54
55
  const props = withDefaults(defineProps<Props>(), {
55
- wrapperClass: 'locale-switcher',
56
- buttonClass: 'locale-button',
57
- dropdownClass: 'locale-dropdown',
58
- itemClass: 'locale-item',
59
- linkClass: 'locale-link',
60
- activeClass: 'active',
61
- disabledClass: 'disabled',
62
- iconClass: 'dropdown-icon',
63
56
  customLabels: () => ({}),
57
+ customWrapperStyle: () => ({}),
58
+ customButtonStyle: () => ({}),
59
+ customDropdownStyle: () => ({}),
60
+ customItemStyle: () => ({}),
61
+ customLinkStyle: () => ({}),
62
+ customActiveLinkStyle: () => ({}),
63
+ customDisabledLinkStyle: () => ({}),
64
+ customIconStyle: () => ({}),
64
65
  })
65
66
 
66
67
  const { $localeRoute, $getLocales, $getLocale } = useNuxtApp()
@@ -80,13 +81,70 @@ const currentLocaleLabel = computed(() => localeLabel({ code: currentLocale.valu
80
81
 
81
82
  const getLocaleLink = (locale: Locale) => {
82
83
  const route = useRoute()
83
-
84
84
  const routeName = (route?.name ?? '').toString().replace(`localized-`, '')
85
85
 
86
86
  return $localeRoute({ name: routeName }, locale.code)
87
87
  }
88
- </script>
89
88
 
90
- <style scoped>
91
- .locale-switcher{display:inline-block;position:relative}.locale-button{align-items:center;background-color:#fff;border:1px solid #333;cursor:pointer;display:flex;font-size:16px;justify-content:space-between;padding:4px 12px;transition:background-color .3s ease}.locale-button:hover{background-color:#f0f0f0}.locale-dropdown{background-color:#fff;border:1px solid #333;left:0;list-style:none;margin:4px 0 0;padding:0;position:absolute;top:100%;z-index:10}.locale-item{margin:0;padding:0}.locale-link{color:#333;display:block;padding:8px 12px;text-decoration:none;transition:background-color .3s ease}.locale-link:hover{background-color:#f0f0f0}.locale-link.disabled{color:#aaa;cursor:not-allowed}.locale-link.active{color:#007bff;font-weight:700}.dropdown-icon{margin-left:8px;transition:transform .3s ease}.dropdown-icon.open{transform:rotate(180deg)}
92
- </style>
89
+ // Default Styles
90
+ const wrapperStyle: CSSProperties = {
91
+ position: 'relative',
92
+ display: 'inline-block',
93
+ }
94
+
95
+ const buttonStyle: CSSProperties = {
96
+ padding: '4px 12px',
97
+ fontSize: '16px',
98
+ cursor: 'pointer',
99
+ backgroundColor: '#fff',
100
+ border: '1px solid #333',
101
+ transition: 'background-color 0.3s ease',
102
+ display: 'flex',
103
+ alignItems: 'center',
104
+ justifyContent: 'space-between',
105
+ }
106
+
107
+ const dropdownStyle: CSSProperties = {
108
+ position: 'absolute',
109
+ top: '100%',
110
+ left: '0',
111
+ zIndex: '10',
112
+ backgroundColor: '#fff',
113
+ border: '1px solid #333',
114
+ listStyle: 'none',
115
+ padding: '0',
116
+ margin: '4px 0 0 0',
117
+ }
118
+
119
+ const itemStyle: CSSProperties = {
120
+ margin: '0',
121
+ padding: '0',
122
+ }
123
+
124
+ const linkStyle: CSSProperties = {
125
+ display: 'block',
126
+ padding: '8px 12px',
127
+ color: '#333',
128
+ textDecoration: 'none',
129
+ transition: 'background-color 0.3s ease',
130
+ }
131
+
132
+ const activeLinkStyle: CSSProperties = {
133
+ fontWeight: 'bold',
134
+ color: '#007bff',
135
+ }
136
+
137
+ const disabledLinkStyle: CSSProperties = {
138
+ cursor: 'not-allowed',
139
+ color: '#aaa',
140
+ }
141
+
142
+ const iconStyle: CSSProperties = {
143
+ marginLeft: '8px',
144
+ transition: 'transform 0.3s ease',
145
+ }
146
+
147
+ const openIconStyle: CSSProperties = {
148
+ transform: 'rotate(180deg)',
149
+ }
150
+ </script>
@@ -1,61 +1,94 @@
1
- <template>
2
- <component
3
- :is="tag"
4
- v-if="!hideIfEmpty || translation"
5
- >
6
- <slot
7
- v-if="!html"
8
- :translation="translation"
9
- >
10
- {{ translation }}
11
- </slot>
12
- <span
13
- v-else
14
- v-html="translation"
15
- />
16
- </component>
17
- </template>
18
-
19
- <script lang="ts" setup>
20
- import { computed } from 'vue'
21
- import { useNuxtApp } from '#app'
22
-
23
- interface Props {
24
- keypath: string
25
- plural?: number | null
26
- tag?: string
27
- scope?: string
28
- params?: Record<string, string | number | boolean>
29
- defaultValue?: string
30
- html?: boolean
31
- locale?: string
32
- wrap?: boolean
33
- customPluralRule?: (value: string, count: number, locale: string) => string
34
- hideIfEmpty?: boolean
35
- }
36
-
37
- const props = withDefaults(defineProps<Props>(), {
38
- plural: null,
39
- tag: 'span',
40
- scope: 'global',
41
- params: () => ({}),
42
- defaultValue: '',
43
- html: false,
44
- locale: undefined,
45
- wrap: true,
46
- hideIfEmpty: false,
47
- })
48
-
49
- const nuxtApp = useNuxtApp()
50
-
51
- const translation = computed<string>(() => {
52
- const localeToUse = props.locale || nuxtApp.$getLocale()
53
- const translation = props.plural !== null
54
- ? props.customPluralRule
55
- ? props.customPluralRule(nuxtApp.$t(props.keypath, props.params), props.plural, localeToUse)
56
- : nuxtApp.$tc(props.keypath, props.plural)
57
- : nuxtApp.$t(props.keypath, props.params) as string
58
-
59
- return translation || props.defaultValue || props.keypath
60
- })
1
+ <script>
2
+ import { h, defineComponent } from "vue";
3
+ import { useNuxtApp } from "#app";
4
+ export default defineComponent({
5
+ name: "I18nT",
6
+ props: {
7
+ keypath: {
8
+ type: String,
9
+ required: true
10
+ },
11
+ plural: {
12
+ type: [Number, String]
13
+ },
14
+ tag: {
15
+ type: String,
16
+ default: "span"
17
+ },
18
+ params: {
19
+ type: Object,
20
+ default: () => ({})
21
+ },
22
+ defaultValue: {
23
+ type: String,
24
+ default: ""
25
+ },
26
+ html: {
27
+ type: Boolean,
28
+ default: false
29
+ },
30
+ hideIfEmpty: {
31
+ type: Boolean,
32
+ default: false
33
+ },
34
+ customPluralRule: {
35
+ type: Function,
36
+ default: null
37
+ }
38
+ },
39
+ setup(props, { slots, attrs }) {
40
+ return () => {
41
+ const options = {};
42
+ if (props.plural !== void 0) {
43
+ if (props.customPluralRule) {
44
+ return props.customPluralRule(
45
+ useNuxtApp().$t(props.keypath, { ...props.params, ...options }),
46
+ props.plural,
47
+ useNuxtApp().$getLocale()
48
+ );
49
+ } else {
50
+ return useNuxtApp().$tc(props.keypath, Number.parseInt(props.plural.toString()));
51
+ }
52
+ }
53
+ const translation = (useNuxtApp().$t(props.keypath, { ...props.params, ...options }) ?? "").toString();
54
+ if (props.hideIfEmpty && !translation.trim()) {
55
+ return props.defaultValue ?? null;
56
+ }
57
+ if (props.html) {
58
+ return h(props.tag, { ...attrs, innerHTML: translation });
59
+ }
60
+ if (slots.default) {
61
+ return h(
62
+ props.tag,
63
+ attrs,
64
+ slots.default({ translation })
65
+ );
66
+ }
67
+ const children = [];
68
+ let lastIndex = 0;
69
+ for (const [slotName, slotFn] of Object.entries(slots)) {
70
+ const placeholder = `{${slotName}}`;
71
+ const index = translation.indexOf(placeholder, lastIndex);
72
+ if (index !== -1) {
73
+ if (index > lastIndex) {
74
+ children.push(translation.slice(lastIndex, index));
75
+ }
76
+ children.push(h(slotFn));
77
+ lastIndex = index + placeholder.length;
78
+ }
79
+ }
80
+ if (lastIndex < translation.length) {
81
+ children.push(translation.slice(lastIndex));
82
+ }
83
+ if (slots.default) {
84
+ return h(
85
+ props.tag,
86
+ attrs,
87
+ slots.default({ children })
88
+ );
89
+ }
90
+ return h(props.tag, attrs, children);
91
+ };
92
+ }
93
+ });
61
94
  </script>