nuxt-i18n-micro 1.32.4 → 1.33.1

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.
@@ -1 +1 @@
1
- import{_ as s,o as a,c as i,a as e,t as o}from"./4JH8UTMa.js";import{u}from"./aMbB5uuc.js";const l={class:"antialiased bg-white dark:bg-black dark:text-white font-sans grid min-h-screen overflow-hidden place-content-center text-black"},c={class:"max-w-520px text-center"},d=["textContent"],p=["textContent"],f={__name:"error-500",props:{appName:{type:String,default:"Nuxt"},version:{type:String,default:""},statusCode:{type:Number,default:500},statusMessage:{type:String,default:"Server error"},description:{type:String,default:"This page is temporarily unavailable."}},setup(t){const r=t;return u({title:`${r.statusCode} - ${r.statusMessage} | ${r.appName}`,script:[{children:`!function(){const e=document.createElement("link").relList;if(!(e&&e.supports&&e.supports("modulepreload"))){for(const e of document.querySelectorAll('link[rel="modulepreload"]'))r(e);new MutationObserver((e=>{for(const o of e)if("childList"===o.type)for(const e of o.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;const r=function(e){const 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:[{children:'*,:after,:before{border-color:var(--un-default-border-color,#e5e7eb);border-style:solid;border-width:0;box-sizing:border-box}:after,:before{--un-content:""}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;tab-size:4;-webkit-tap-highlight-color:transparent}body{line-height:inherit;margin:0}h1{font-size:inherit;font-weight:inherit}h1,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 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: }'}]}),(g,n)=>(a(),i("div",l,[n[0]||(n[0]=e("div",{class:"-bottom-1/2 fixed h-1/2 left-0 right-0 spotlight"},null,-1)),e("div",c,[e("h1",{class:"font-medium mb-8 sm:text-10xl text-8xl",textContent:o(t.statusCode)},null,8,d),e("p",{class:"font-light leading-tight mb-16 px-8 sm:px-0 sm:text-4xl text-xl",textContent:o(t.description)},null,8,p)])]))}},b=s(f,[["__scopeId","data-v-d6cbdfc0"]]);export{b as default};
1
+ import{_ as s,o as a,c as i,a as e,t as o}from"./CDK93kUm.js";import{u}from"./C63IND86.js";const l={class:"antialiased bg-white dark:bg-black dark:text-white font-sans grid min-h-screen overflow-hidden place-content-center text-black"},c={class:"max-w-520px text-center"},d=["textContent"],p=["textContent"],f={__name:"error-500",props:{appName:{type:String,default:"Nuxt"},version:{type:String,default:""},statusCode:{type:Number,default:500},statusMessage:{type:String,default:"Server error"},description:{type:String,default:"This page is temporarily unavailable."}},setup(t){const r=t;return u({title:`${r.statusCode} - ${r.statusMessage} | ${r.appName}`,script:[{children:`!function(){const e=document.createElement("link").relList;if(!(e&&e.supports&&e.supports("modulepreload"))){for(const e of document.querySelectorAll('link[rel="modulepreload"]'))r(e);new MutationObserver((e=>{for(const o of e)if("childList"===o.type)for(const e of o.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;const r=function(e){const 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:[{children:'*,:after,:before{border-color:var(--un-default-border-color,#e5e7eb);border-style:solid;border-width:0;box-sizing:border-box}:after,:before{--un-content:""}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;tab-size:4;-webkit-tap-highlight-color:transparent}body{line-height:inherit;margin:0}h1{font-size:inherit;font-weight:inherit}h1,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 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: }'}]}),(g,n)=>(a(),i("div",l,[n[0]||(n[0]=e("div",{class:"-bottom-1/2 fixed h-1/2 left-0 right-0 spotlight"},null,-1)),e("div",c,[e("h1",{class:"font-medium mb-8 sm:text-10xl text-8xl",textContent:o(t.statusCode)},null,8,d),e("p",{class:"font-light leading-tight mb-16 px-8 sm:px-0 sm:text-4xl text-xl",textContent:o(t.description)},null,8,p)])]))}},b=s(f,[["__scopeId","data-v-d6cbdfc0"]]);export{b as default};
@@ -1 +1 @@
1
- {"id":"a1505046-64e8-434e-9b51-9b35d5ab1294","timestamp":1731590151884}
1
+ {"id":"4b35fe62-45b0-4d20-b0f2-53cb9b57f3c7","timestamp":1732642220559}
@@ -0,0 +1 @@
1
+ {"id":"4b35fe62-45b0-4d20-b0f2-53cb9b57f3c7","timestamp":1732642220559,"matcher":{"static":{},"wildcard":{},"dynamic":{}},"prerendered":[]}
@@ -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
3
  <link rel="stylesheet" href="/__nuxt-i18n-micro/_nuxt/entry.BqOlM4b6.css">
4
- <link rel="modulepreload" as="script" crossorigin href="/__nuxt-i18n-micro/_nuxt/4JH8UTMa.js">
4
+ <link rel="modulepreload" as="script" crossorigin href="/__nuxt-i18n-micro/_nuxt/CDK93kUm.js">
5
5
  <link rel="prefetch" as="script" crossorigin href="/__nuxt-i18n-micro/_nuxt/B6E6ObS_.js">
6
6
  <link rel="prefetch" as="style" crossorigin href="/__nuxt-i18n-micro/_nuxt/error-404.C_4C5G96.css">
7
- <link rel="prefetch" as="script" crossorigin href="/__nuxt-i18n-micro/_nuxt/BDOV1jAH.js">
8
- <link rel="prefetch" as="script" crossorigin href="/__nuxt-i18n-micro/_nuxt/aMbB5uuc.js">
7
+ <link rel="prefetch" as="script" crossorigin href="/__nuxt-i18n-micro/_nuxt/CBX_xCET.js">
8
+ <link rel="prefetch" as="script" crossorigin href="/__nuxt-i18n-micro/_nuxt/C63IND86.js">
9
9
  <link rel="prefetch" as="style" crossorigin href="/__nuxt-i18n-micro/_nuxt/error-500.CBAEdpZV.css">
10
- <link rel="prefetch" as="script" crossorigin href="/__nuxt-i18n-micro/_nuxt/BPVvw6x6.js">
11
- <script type="module" src="/__nuxt-i18n-micro/_nuxt/4JH8UTMa.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__">[{"prerenderedAt":1,"serverRendered":2},1731590163334,false]</script>
12
- <script>window.__NUXT__={};window.__NUXT__.config={public:{},app:{baseURL:"/__nuxt-i18n-micro",buildId:"a1505046-64e8-434e-9b51-9b35d5ab1294",buildAssetsDir:"/_nuxt/",cdnURL:""}}</script></body></html>
10
+ <link rel="prefetch" as="script" crossorigin href="/__nuxt-i18n-micro/_nuxt/D2mxQI8q.js">
11
+ <script type="module" src="/__nuxt-i18n-micro/_nuxt/CDK93kUm.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__">[{"prerenderedAt":1,"serverRendered":2},1732642233841,false]</script>
12
+ <script>window.__NUXT__={};window.__NUXT__.config={public:{},app:{baseURL:"/__nuxt-i18n-micro",buildId:"4b35fe62-45b0-4d20-b0f2-53cb9b57f3c7",buildAssetsDir:"/_nuxt/",cdnURL:""}}</script></body></html>
package/dist/module.d.mts CHANGED
@@ -12,8 +12,9 @@ interface Locale {
12
12
  baseUrl?: string;
13
13
  baseDefault?: boolean;
14
14
  }
15
+ type Params = Record<string, string | number | boolean>;
15
16
  type Getter = (key: string, params?: Record<string, string | number | boolean>, defaultValue?: string) => unknown;
16
- type PluralFunc = (key: string, count: number, locale: string, getter: Getter) => string | null;
17
+ type PluralFunc = (key: string, count: number, params: Params, locale: string, getter: Getter) => string | null;
17
18
  type GlobalLocaleRoutes = Record<string, Record<LocaleCode, string> | false | boolean> | null | undefined;
18
19
  interface ModuleOptions {
19
20
  locales?: Locale[];
package/dist/module.d.ts CHANGED
@@ -12,8 +12,9 @@ interface Locale {
12
12
  baseUrl?: string;
13
13
  baseDefault?: boolean;
14
14
  }
15
+ type Params = Record<string, string | number | boolean>;
15
16
  type Getter = (key: string, params?: Record<string, string | number | boolean>, defaultValue?: string) => unknown;
16
- type PluralFunc = (key: string, count: number, locale: string, getter: Getter) => string | null;
17
+ type PluralFunc = (key: string, count: number, params: Params, locale: string, getter: Getter) => string | null;
17
18
  type GlobalLocaleRoutes = Record<string, Record<LocaleCode, string> | false | boolean> | null | undefined;
18
19
  interface ModuleOptions {
19
20
  locales?: Locale[];
package/dist/module.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "nuxt-i18n-micro",
3
3
  "configKey": "i18n",
4
- "version": "1.32.4",
4
+ "version": "1.33.1",
5
5
  "builder": {
6
6
  "@nuxt/module-builder": "0.8.4",
7
7
  "unbuild": "2.0.0"
package/dist/module.mjs CHANGED
@@ -421,19 +421,13 @@ const module = defineNuxtModule({
421
421
  apiBaseUrl: "_locales",
422
422
  routesLocaleLinks: {},
423
423
  globalLocaleRoutes: {},
424
- plural: (key, count, _locale, getTranslation) => {
425
- const translation = getTranslation(key, {});
424
+ plural: (key, count, params, _locale, getTranslation) => {
425
+ const translation = getTranslation(key, params);
426
426
  if (!translation) {
427
427
  return null;
428
428
  }
429
429
  const forms = translation.toString().split("|");
430
- if (count === 0 && forms.length > 2) {
431
- return forms[0].trim();
432
- }
433
- if (count === 1 && forms.length > 1) {
434
- return forms[1].trim();
435
- }
436
- return (forms.length > 2 ? forms[2].trim() : forms[forms.length - 1].trim()).replace("{count}", count.toString());
430
+ return (count < forms.length ? forms[count].trim() : forms[forms.length - 1].trim()).replace("{count}", count.toString());
437
431
  },
438
432
  customRegexMatcher: void 0
439
433
  },
@@ -39,17 +39,19 @@ export default defineComponent({
39
39
  setup(props, { slots, attrs }) {
40
40
  return () => {
41
41
  const options = {};
42
- const { $getLocale, $t, $tc } = useNuxtApp().$i18n;
42
+ const { $getLocale, $t, $tc } = useNuxtApp();
43
43
  if (props.plural !== void 0) {
44
+ const count = Number.parseInt(props.plural.toString());
44
45
  if (props.customPluralRule) {
45
46
  return h(props.tag, { ...attrs, innerHTML: props.customPluralRule(
46
47
  props.keypath,
47
- Number.parseInt(props.plural.toString()),
48
+ count,
49
+ props.params,
48
50
  $getLocale(),
49
51
  $t
50
52
  ) });
51
53
  } else {
52
- return h(props.tag, { ...attrs, innerHTML: $tc(props.keypath, Number.parseInt(props.plural.toString())) });
54
+ return h(props.tag, { ...attrs, innerHTML: $tc(props.keypath, { count, ...props.params }) });
53
55
  }
54
56
  }
55
57
  const translation = ($t(props.keypath, { ...props.params, ...options }) ?? "").toString();
@@ -1,5 +1,5 @@
1
1
  import type { RouteLocationNormalizedLoaded, RouteLocationRaw, RouteLocationResolved, RouteLocationResolvedGeneric } from 'vue-router';
2
- import type { Locale, I18nRouteParams } from '../../types.js';
2
+ import type { Locale, I18nRouteParams, Params } from '../../types.js';
3
3
  interface PluralTranslations {
4
4
  singular: string;
5
5
  plural: string;
@@ -8,7 +8,6 @@ type Translation = string | number | boolean | Translations | PluralTranslations
8
8
  export interface Translations {
9
9
  [key: string]: Translation;
10
10
  }
11
- type Params = Record<string, string | number | boolean>;
12
11
  declare const _default: import("#app").Plugin<{
13
12
  i18n: undefined;
14
13
  __micro: boolean;
@@ -19,7 +18,7 @@ declare const _default: import("#app").Plugin<{
19
18
  getRouteName: (route?: RouteLocationNormalizedLoaded | RouteLocationResolvedGeneric, locale?: string) => string;
20
19
  t: (key: string, params?: Params, defaultValue?: string) => Translation;
21
20
  ts: (key: string, params?: Params, defaultValue?: string) => string;
22
- tc: (key: string, count: number, defaultValue?: string) => string;
21
+ tc: (key: string, params: number | Params, defaultValue?: string) => string;
23
22
  tn: (value: number, options?: Intl.NumberFormatOptions) => string;
24
23
  td: (value: Date | number | string, options?: Intl.DateTimeFormatOptions) => string;
25
24
  has: (key: string) => boolean;
@@ -41,7 +40,7 @@ declare const _default: import("#app").Plugin<{
41
40
  getRouteName: (route?: RouteLocationNormalizedLoaded | RouteLocationResolvedGeneric, locale?: string) => string;
42
41
  t: (key: string, params?: Params, defaultValue?: string) => Translation;
43
42
  ts: (key: string, params?: Params, defaultValue?: string) => string;
44
- tc: (key: string, count: number, defaultValue?: string) => string;
43
+ tc: (key: string, params: number | Params, defaultValue?: string) => string;
45
44
  tn: (value: number, options?: Intl.NumberFormatOptions) => string;
46
45
  td: (value: Date | number | string, options?: Intl.DateTimeFormatOptions) => string;
47
46
  has: (key: string) => boolean;
@@ -63,7 +62,7 @@ export interface PluginsInjections {
63
62
  $getRouteName: (route?: RouteLocationNormalizedLoaded | RouteLocationResolvedGeneric, locale?: string) => string;
64
63
  $t: (key: string, params?: Params, defaultValue?: string) => Translation;
65
64
  $ts: (key: string, params?: Params, defaultValue?: string) => string;
66
- $tc: (key: string, count: number, defaultValue?: string) => string;
65
+ $tc: (key: string, params: number | Params, defaultValue?: string) => string;
67
66
  $tn: (value: number, options?: Intl.NumberFormatOptions) => string;
68
67
  $td: (value: Date | number | string, options?: Intl.DateTimeFormatOptions) => string;
69
68
  $has: (key: string) => boolean;
@@ -277,10 +277,11 @@ export default defineNuxtPlugin(async (nuxtApp) => {
277
277
  const value = getTranslation(key, params, defaultValue);
278
278
  return value?.toString() ?? defaultValue ?? key;
279
279
  },
280
- tc: (key, count, defaultValue) => {
280
+ tc: (key, params, defaultValue) => {
281
281
  const route = router.currentRoute.value;
282
282
  const currentLocale = getCurrentLocale(route, i18nConfig, hashLocale);
283
- return plural(key, count, currentLocale, getTranslation) ?? defaultValue ?? key;
283
+ const { count, ..._params } = typeof params === "number" ? { count: params } : params;
284
+ return plural(key, Number.parseInt(count.toString()), _params, currentLocale, getTranslation) ?? defaultValue ?? key;
284
285
  },
285
286
  tn: (value, options) => {
286
287
  const route = router.currentRoute.value;
package/internals.d.ts CHANGED
@@ -1,7 +1,7 @@
1
1
  declare module '#build/i18n.plural.mjs' {
2
- export function plural(key: string, count: number, locale: string, getter: Getter): string | null
2
+ export function plural(key: string, count: number, params: Params, locale: string, getter: Getter): string | null
3
3
  }
4
4
 
5
5
  declare module '#internal/i18n/options.mjs' {
6
- export function plural(key: string, count: number, locale: string, getter: Getter): string | null
6
+ export function plural(key: string, count: number, params: Params, locale: string, getter: Getter): string | null
7
7
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "nuxt-i18n-micro",
3
- "version": "1.32.4",
3
+ "version": "1.33.1",
4
4
  "description": "Nuxt I18n Micro is a lightweight, high-performance internationalization module for Nuxt, designed to handle multi-language support with minimal overhead, fast build times, and efficient runtime performance.",
5
5
  "repository": "s00d/nuxt-i18n-micro",
6
6
  "license": "MIT",
@@ -48,7 +48,7 @@
48
48
  "release": "npm run lint && npm run typecheck && npm run test && npm run prepack && changelogen --release && npm publish && git push --follow-tags",
49
49
  "lint": "eslint .",
50
50
  "lint:fix": "eslint . --fix",
51
- "test": "playwright test --grep-invert \"test/performance\\.test\\.ts\"",
51
+ "test": "playwright test",
52
52
  "test:watch": "vitest watch",
53
53
  "test:types": "vue-tsc --noEmit && cd playground && vue-tsc --noEmit",
54
54
  "client:build": "nuxi generate client",