` 内)が完全なものになっているのに対し、クライアントサイドレンダリングの場合は、HTML が空の状態で JavaScript によってコンテンツが生成されていることが確認できます。\
+(ダウンロードした JavaScript も別のリクエストとして観測することができます)
+:::
diff --git a/content/ja/2.concepts/8.state-manegement/.template/files/app.vue b/content/ja/2.concepts/8.state-manegement/.template/files/app.vue
new file mode 100644
index 00000000..4d436277
--- /dev/null
+++ b/content/ja/2.concepts/8.state-manegement/.template/files/app.vue
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/content/ja/2.concepts/8.state-manegement/.template/files/components/CounterA.vue b/content/ja/2.concepts/8.state-manegement/.template/files/components/CounterA.vue
new file mode 100644
index 00000000..529dcce6
--- /dev/null
+++ b/content/ja/2.concepts/8.state-manegement/.template/files/components/CounterA.vue
@@ -0,0 +1,13 @@
+
+
+
+
+
Counter A
+
Count: {{ count }}
+
+
+
diff --git a/content/ja/2.concepts/8.state-manegement/.template/files/components/CounterB.vue b/content/ja/2.concepts/8.state-manegement/.template/files/components/CounterB.vue
new file mode 100644
index 00000000..8d5dc5dc
--- /dev/null
+++ b/content/ja/2.concepts/8.state-manegement/.template/files/components/CounterB.vue
@@ -0,0 +1,13 @@
+
+
+
+
+
Counter B
+
Count: {{ count }}
+
+
+
diff --git a/content/ja/2.concepts/8.state-manegement/.template/index.ts b/content/ja/2.concepts/8.state-manegement/.template/index.ts
new file mode 100644
index 00000000..201753ab
--- /dev/null
+++ b/content/ja/2.concepts/8.state-manegement/.template/index.ts
@@ -0,0 +1,8 @@
+import type { GuideMeta } from '~/types/guides'
+
+export const meta: GuideMeta = {
+ startingFile: 'app.vue',
+ features: {
+ fileTree: true,
+ },
+}
diff --git a/content/ja/2.concepts/8.state-manegement/index.md b/content/ja/2.concepts/8.state-manegement/index.md
new file mode 100644
index 00000000..e17ddd57
--- /dev/null
+++ b/content/ja/2.concepts/8.state-manegement/index.md
@@ -0,0 +1,32 @@
+---
+ogImage: true
+---
+
+# 状態管理
+
+Vue.js での状態管理 (State Management) とは、アプリケーションでリアクティブな状態 (ステート) を管理することを言います。\
+[Vue.js 公式ドキュメント 状態管理](https://ja.vuejs.org/guide/scaling-up/state-management)
+
+複数のコンポーネント間で状態を共有する際、Vue.js ではリアクティビティー API を用いたシンプルな状態管理を行うことができます。\
+[Vue.js 公式ドキュメント リアクティビティー API によるシンプルな状態の管理](https://ja.vuejs.org/guide/scaling-up/state-management#simple-state-management-with-reactivity-api)
+
+しかし、[SSR の考慮](https://ja.vuejs.org/guide/scaling-up/state-management#ssr-considerations) にも書かれているように、Nuxt で SSR を行っている場合には [いくつかの問題](https://ja.vuejs.org/guide/scaling-up/ssr#cross-request-state-pollution) が起こる可能性があります。
+
+Vue.js の公式ドキュメントでは [Pinia](https://pinia.vuejs.org/) と言う状態管理ライブラリを使う方法が紹介されていますが、Nuxt が提供する `useState()` コンポーザブルもその解決策の 1 つです。\
+(もちろん、[Nuxt で Pinia を使用する](https://nuxt.com/docs/getting-started/state-management#usage-with-pinia) ことも可能です)
+
+## useState()
+
+[useState() コンポーザブル](https://nuxt.com/docs/api/composables/use-state) は SSR フレンドリーな状態管理と、コンポーネント間で状態を共有するためのシンプルな方法を提供します。\
+`useState()` は共有状態を定義するための SSR フレンドリーな `ref()` です。\
+前述の通り、Vue.js のリアクティビティー API (e.g. `ref()`) を用いてコンポーネントを跨いだ状態管理を SSR で行う場合、いくつかの問題が発生する可能性があります。\
+そのため、Nuxt では `
+
+
+
+
+
+
diff --git a/content/ja/2.concepts/9.data-fetching/.template/files/server/api/todos/index.ts b/content/ja/2.concepts/9.data-fetching/.template/files/server/api/todos/index.ts
new file mode 100644
index 00000000..a188fe4f
--- /dev/null
+++ b/content/ja/2.concepts/9.data-fetching/.template/files/server/api/todos/index.ts
@@ -0,0 +1,7 @@
+export default defineEventHandler(() => {
+ return [
+ { id: 1, title: 'Todo 1' },
+ { id: 2, title: 'Todo 2' },
+ { id: 3, title: 'Todo 3' },
+ ]
+})
diff --git a/content/ja/2.concepts/9.data-fetching/.template/index.ts b/content/ja/2.concepts/9.data-fetching/.template/index.ts
new file mode 100644
index 00000000..201753ab
--- /dev/null
+++ b/content/ja/2.concepts/9.data-fetching/.template/index.ts
@@ -0,0 +1,8 @@
+import type { GuideMeta } from '~/types/guides'
+
+export const meta: GuideMeta = {
+ startingFile: 'app.vue',
+ features: {
+ fileTree: true,
+ },
+}
diff --git a/content/ja/2.concepts/9.data-fetching/.template/solutions/app.vue b/content/ja/2.concepts/9.data-fetching/.template/solutions/app.vue
new file mode 100644
index 00000000..2862369d
--- /dev/null
+++ b/content/ja/2.concepts/9.data-fetching/.template/solutions/app.vue
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
diff --git a/content/ja/2.concepts/9.data-fetching/.template/solutions/server/api/todos/index.ts b/content/ja/2.concepts/9.data-fetching/.template/solutions/server/api/todos/index.ts
new file mode 100644
index 00000000..296c53b0
--- /dev/null
+++ b/content/ja/2.concepts/9.data-fetching/.template/solutions/server/api/todos/index.ts
@@ -0,0 +1,8 @@
+export default defineEventHandler(() => {
+ return [
+ { id: 1, title: 'Todo 1', completed: false },
+ { id: 2, title: 'Todo 2', completed: false },
+ { id: 3, title: 'Todo 3', completed: true },
+ { id: 4, title: 'Todo 4', completed: false },
+ ]
+})
diff --git a/content/ja/2.concepts/9.data-fetching/index.md b/content/ja/2.concepts/9.data-fetching/index.md
new file mode 100644
index 00000000..55266153
--- /dev/null
+++ b/content/ja/2.concepts/9.data-fetching/index.md
@@ -0,0 +1,54 @@
+---
+ogImage: true
+---
+
+# データフェッチ
+
+実用的なアプリケーションを作る上で、データフェッチは欠かせない機能です。
+データフェッチとは API やデータベースからデータを取得してくることを指します。
+
+Nuxt では、このデータフェッチを便利に扱うために `useFetch`、 `useAsyncData`、`$fetch` といった関数を提供しています。
+
+一言で言えば、
+
+- `useFetch` は、コンポーネントのセットアップ関数でデータのフェッチを処理する最も簡単な方法です。
+- `$fetch` は、ユーザーのインタラクションに基づいてネットワークリクエストを行うのに最適です。
+- `useAsyncData` は、`$fetch` と組み合わせることで、よりきめ細かい制御を提供します。
+
+https://nuxt.com/docs/getting-started/data-fetching
+
+中でも、useFetch は最も簡単な方法で、実際には `useAsyncData` と `$fetch` の便利なラッパーです。
+
+使い方は以下の通りで、
+
+```vue
+
+```
+
+具体的には以下のような機能があります。
+
+- サーバーとクライアントの両方で動作する\
+ useFetch はサーバーとクライアントの両方で動作することができるので、ユニバーサルレンダリング時でも簡単にデータフェッチを行うことができます。
+- データキャッシュ\
+ サーバー上で API が呼ばれた時、そのデータをクライアントに転送することで、クライアント側で再度データフェッチが行われることを防ぎます。
+- リクエスト URL とレスポンスの型付け\
+ server ディレクトリに API を実装することで、リクエスト URL とレスポンスの型付けが自動的に行われます。
+
+より詳細な使い方については、[公式ドキュメント](https://nuxt.com/docs/api/composables/use-fetch) を参照してください。
+
+また、より細かい制御を行いたい場合は `useAsyncData` や `$fetch` を利用することで、より高度なデータフェッチを行うことができます。
+
+https://nuxt.com/docs/api/composables/use-async-data
+
+https://nuxt.com/docs/api/utils/dollarfetch
+
+## チャレンジ
+
+1. API の動作を確かめてみる\
+ server/api/todos/index.ts に 4 つめの Todo を追加した後、リフレッシュボタンを押してデータが更新されることを確認してみましょう。
+2. 型付の自動化を確認してみる\
+ server/api/todos/index.ts の Todo に `completed` プロパティを追加し、useFetch の型が更新されていることを確認してみましょう。
+
+:ButtonShowSolution{.bg-faded.px4.py2.mb3.rounded.border.border-base.hover:bg-active.hover:text-primary.hover:border-primary:50}
diff --git a/i18n/locales/en.yaml b/i18n/locales/en.yaml
new file mode 100644
index 00000000..a907aa2a
--- /dev/null
+++ b/i18n/locales/en.yaml
@@ -0,0 +1,25 @@
+guide: Guide
+edit-this-page: Edit this page
+terminal:
+ name: Terminal
+ restart: Restart terminal
+ hide: Hide terminal
+ toggle: Toggle terminal
+download-zip: Download playground as zip
+work-in-progress: Work in Progress
+search: Search
+color-mode:
+ to-dark: Switch to dark mode
+ to-light: Switch to light mode
+coming-soon: Coming Soon
+reset-challenge: Reset challenge
+show-solution: Show solution
+search-dots: Search...
+steps:
+ initializing-webcontainer: Initializing WebContainer
+ mounting-files: Mounting files
+ installing-dependencies: Installing dependencies
+ starting-nuxt-server: Starting Nuxt server
+ waiting-for-nuxt-to-ready: Waiting for Nuxt to ready
+restart-server: Restart the server
+interactive-terminal-mode: Interactive terminal mode
diff --git a/i18n/locales/ja.yaml b/i18n/locales/ja.yaml
new file mode 100644
index 00000000..6d734ad8
--- /dev/null
+++ b/i18n/locales/ja.yaml
@@ -0,0 +1,25 @@
+guide: ガイド
+edit-this-page: このページを編集
+terminal:
+ name: ターミナル
+ restart: ターミナルを再起動
+ hide: ターミナルを非表示
+ toggle: ターミナルを切り替える
+download-zip: プレイグラウンドをZIPとしてダウンロード
+work-in-progress: 作業中
+search: 検索
+color-mode:
+ to-dark: ダークモードに切り替える
+ to-light: ライトモードに切り替える
+coming-soon: 作業中
+reset-challenge: 挑戦をリセット
+show-solution: 解答を表示
+search-dots: 検索...
+steps:
+ initializing-webcontainer: WebContainerを初期化中
+ mounting-files: ファイルをマウント中
+ installing-dependencies: 依存関係をインストール中
+ starting-nuxt-server: Nuxtサーバーを起動中
+ waiting-for-nuxt-to-ready: Nuxtが準備完了を待機中
+restart-server: サーバーを再起動
+interactive-terminal-mode: インタラクティブターミナルモード
diff --git a/middleware/index.global.ts b/middleware/index.global.ts
new file mode 100644
index 00000000..c38762fb
--- /dev/null
+++ b/middleware/index.global.ts
@@ -0,0 +1,5 @@
+export default defineNuxtRouteMiddleware((to) => {
+ if (to.path === '/') {
+ return navigateTo('/en')
+ }
+})
diff --git a/nuxt.config.ts b/nuxt.config.ts
index 8c1c6bf3..d8112f41 100644
--- a/nuxt.config.ts
+++ b/nuxt.config.ts
@@ -11,7 +11,7 @@ export default defineNuxtConfig({
'@pinia/nuxt',
'floating-vue/nuxt',
'@nuxt/eslint',
-
+ '@nuxtjs/i18n',
// local
'~/modules/template-loader',
'~/modules/nuxt-link',
@@ -127,6 +127,33 @@ export default defineNuxtConfig({
},
},
},
+
+ i18n: {
+ locales: [
+ {
+ name: 'English',
+ code: 'en',
+ file: 'en.yaml',
+ },
+ {
+ name: '日本語',
+ code: 'ja',
+ file: 'ja.yaml',
+ },
+ ],
+ lazy: true,
+ strategy: 'prefix',
+ defaultLocale: 'en',
+ detectBrowserLanguage: {
+ useCookie: true,
+ cookieKey: 'i18n_redirected',
+ redirectOn: 'root',
+ },
+ experimental: {
+ autoImportTranslationFunctions: true,
+ },
+ },
+
ogImage: {
defaults: {
component: 'OgImageDocs',
diff --git a/package.json b/package.json
index 0cdce13d..67aa17ac 100644
--- a/package.json
+++ b/package.json
@@ -49,6 +49,7 @@
"@nuxt/image": "catalog:nuxt",
"@nuxt/kit": "catalog:nuxt",
"@nuxtjs/color-mode": "catalog:nuxt",
+ "@nuxtjs/i18n": "catalog:nuxt",
"@nuxtjs/seo": "catalog:nuxt",
"@pinia/nuxt": "catalog:nuxt",
"@unocss/eslint-plugin": "catalog:dev",
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 0ded49ca..7ff0d87a 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -132,6 +132,9 @@ catalogs:
'@nuxtjs/color-mode':
specifier: ^3.5.2
version: 3.5.2
+ '@nuxtjs/i18n':
+ specifier: ^9.4.0
+ version: 9.4.0
'@nuxtjs/seo':
specifier: ^3.0.1
version: 3.0.1
@@ -263,6 +266,9 @@ importers:
'@nuxtjs/color-mode':
specifier: catalog:nuxt
version: 3.5.2(magicast@0.3.5)
+ '@nuxtjs/i18n':
+ specifier: catalog:nuxt
+ version: 9.4.0(@vue/compiler-dom@3.5.13)(eslint@9.23.0(jiti@2.4.2))(magicast@0.3.5)(rollup@4.37.0)(vue@3.5.13(typescript@5.8.2))
'@nuxtjs/seo':
specifier: catalog:nuxt
version: 3.0.1(@unhead/vue@2.0.0(vue@3.5.13(typescript@5.8.2)))(h3@1.15.1)(magicast@0.3.5)(rollup@4.37.0)(unstorage@1.15.0(db0@0.3.1(better-sqlite3@11.9.1))(ioredis@5.6.0))(vite@6.2.2(@types/node@22.13.11)(jiti@2.4.2)(terser@5.39.0)(yaml@2.7.0))(vue@3.5.13(typescript@5.8.2))
@@ -820,6 +826,81 @@ packages:
peerDependencies:
vue: '>=3'
+ '@intlify/bundle-utils@10.0.1':
+ resolution: {integrity: sha512-WkaXfSevtpgtUR4t8K2M6lbR7g03mtOxFeh+vXp5KExvPqS12ppaRj1QxzwRuRI5VUto54A22BjKoBMLyHILWQ==}
+ engines: {node: '>= 18'}
+ peerDependencies:
+ petite-vue-i18n: '*'
+ vue-i18n: '*'
+ peerDependenciesMeta:
+ petite-vue-i18n:
+ optional: true
+ vue-i18n:
+ optional: true
+
+ '@intlify/core-base@10.0.6':
+ resolution: {integrity: sha512-/NINGvy7t8qSCyyuqMIPmHS6CBQjqPIPVOps0Rb7xWrwwkwHJKtahiFnW1HC4iQVhzoYwEW6Js0923zTScLDiA==}
+ engines: {node: '>= 16'}
+
+ '@intlify/core@10.0.6':
+ resolution: {integrity: sha512-C325rIyg5+wM6FUPbTMTaDPQ3Yu9lwC9JRIaWZKVy+My3kXi0j0u76ifQ351CjqFoJDg7GLR/UpUPQlF25qhKQ==}
+ engines: {node: '>= 16'}
+
+ '@intlify/h3@0.6.1':
+ resolution: {integrity: sha512-hFMcqWXCoFNZkraa+JF7wzByGdE0vGi8rUs7CTFrE4hE3X2u9QcelH8VRO8mPgJDH+TgatzvrVp6iZsWVluk2A==}
+ engines: {node: '>= 18'}
+
+ '@intlify/message-compiler@10.0.6':
+ resolution: {integrity: sha512-QcUYprK+e4X2lU6eJDxLuf/mUtCuVPj2RFBoFRlJJxK3wskBejzlRvh1Q0lQCi9tDOnD4iUK1ftcGylE3X3idA==}
+ engines: {node: '>= 16'}
+
+ '@intlify/message-compiler@11.1.2':
+ resolution: {integrity: sha512-T/xbNDzi+Yv0Qn2Dfz2CWCAJiwNgU5d95EhhAEf4YmOgjCKktpfpiUSmLcBvK1CtLpPQ85AMMQk/2NCcXnNj1g==}
+ engines: {node: '>= 16'}
+
+ '@intlify/shared@10.0.6':
+ resolution: {integrity: sha512-2xqwm05YPpo7TM//+v0bzS0FWiTzsjpSMnWdt7ZXs5/ZfQIedSuBXIrskd8HZ7c/cZzo1G9ALHTksnv/74vk/Q==}
+ engines: {node: '>= 16'}
+
+ '@intlify/shared@11.1.2':
+ resolution: {integrity: sha512-dF2iMMy8P9uKVHV/20LA1ulFLL+MKSbfMiixSmn6fpwqzvix38OIc7ebgnFbBqElvghZCW9ACtzKTGKsTGTWGA==}
+ engines: {node: '>= 16'}
+
+ '@intlify/unplugin-vue-i18n@6.0.5':
+ resolution: {integrity: sha512-0MKaYhLvM46Mtm+OArkK75ztmqaFfhIvnm5mg8XKqCPAKVAK98o+8tB6gUQFkKrF5PMYsNXvyMJCi40cRCDJbA==}
+ engines: {node: '>= 18'}
+ peerDependencies:
+ petite-vue-i18n: '*'
+ vue: ^3.2.25
+ vue-i18n: '*'
+ peerDependenciesMeta:
+ petite-vue-i18n:
+ optional: true
+ vue-i18n:
+ optional: true
+
+ '@intlify/utils@0.13.0':
+ resolution: {integrity: sha512-8i3uRdAxCGzuHwfmHcVjeLQBtysQB2aXl/ojoagDut5/gY5lvWCQ2+cnl2TiqE/fXj/D8EhWG/SLKA7qz4a3QA==}
+ engines: {node: '>= 18'}
+
+ '@intlify/vue-i18n-extensions@8.0.0':
+ resolution: {integrity: sha512-w0+70CvTmuqbskWfzeYhn0IXxllr6mU+IeM2MU0M+j9OW64jkrvqY+pYFWrUnIIC9bEdij3NICruicwd5EgUuQ==}
+ engines: {node: '>= 18'}
+ peerDependencies:
+ '@intlify/shared': ^9.0.0 || ^10.0.0 || ^11.0.0
+ '@vue/compiler-dom': ^3.0.0
+ vue: ^3.0.0
+ vue-i18n: ^9.0.0 || ^10.0.0 || ^11.0.0
+ peerDependenciesMeta:
+ '@intlify/shared':
+ optional: true
+ '@vue/compiler-dom':
+ optional: true
+ vue:
+ optional: true
+ vue-i18n:
+ optional: true
+
'@ioredis/commands@1.2.0':
resolution: {integrity: sha512-Sx1pU8EM64o2BrqNpEO1CNLtKQwyhuXuqyfH7oGKCk+1a33d2r5saW8zNwm3j6BTExtjrv2BxTgzzkMwts6vGg==}
@@ -869,6 +950,11 @@ packages:
engines: {node: '>=18'}
hasBin: true
+ '@miyaneee/rollup-plugin-json5@1.2.0':
+ resolution: {integrity: sha512-JjTIaXZp9WzhUHpElrqPnl1AzBi/rvRs065F71+aTmlqvTMVkdbjZ8vfFl4nRlgJy+TPBw69ZK4pwFdmOAt4aA==}
+ peerDependencies:
+ rollup: ^1.20.0 || ^2.0.0 || ^3.0.0 || ^4.0.0
+
'@napi-rs/wasm-runtime@0.2.7':
resolution: {integrity: sha512-5yximcFK5FNompXfJFoWanu5l8v1hNGqNHh9du1xETp9HWk/B/PzvchX55WYOPaIeNglG8++68AAiauBAtbnzw==}
@@ -996,6 +1082,10 @@ packages:
'@nuxtjs/color-mode@3.5.2':
resolution: {integrity: sha512-cC6RfgZh3guHBMLLjrBB2Uti5eUoGM9KyauOaYS9ETmxNWBMTvpgjvSiSJp1OFljIXPIqVTJ3xtJpSNZiO3ZaA==}
+ '@nuxtjs/i18n@9.4.0':
+ resolution: {integrity: sha512-WREUig3PIdlcd3WbfRtmPx9HoLTUB7vUnbUvPS48O/qebntvAtlJKWjxaaBKpFof1RfbGmvPwtmEt+sYdJ6N3w==}
+ engines: {node: '>=18.12.0'}
+
'@nuxtjs/mdc@0.16.1':
resolution: {integrity: sha512-di9Ox9QY5pO2eIkQPyKFe9O8L3RvIrGbmjI3rJQRj1xGYRFj2S9RvBPCFbvfaqQGOTjOfxHLg8KtQIGj1Iw/lg==}
@@ -1015,59 +1105,118 @@ packages:
cpu: [arm64]
os: [darwin]
+ '@oxc-parser/binding-darwin-arm64@0.61.2':
+ resolution: {integrity: sha512-xpDuwawMDCHg3plbSjpMbrhNTzO1AlvvHqsUOTE3WDmv5K7fFD72f3Pl+SxPJ4D/IhMdskec1B5ZfZHM1iAFmQ==}
+ engines: {node: '>=14.0.0'}
+ cpu: [arm64]
+ os: [darwin]
+
'@oxc-parser/binding-darwin-x64@0.56.5':
resolution: {integrity: sha512-Rr7aMkqcxGIM6fgkpaj9SJj0u1O1g+AT7mJwmdi5PLSQRPR4CkDKfztEnAj5k+d2blWvh9nPZH8G0OCwxIHk1Q==}
engines: {node: '>=14.0.0'}
cpu: [x64]
os: [darwin]
+ '@oxc-parser/binding-darwin-x64@0.61.2':
+ resolution: {integrity: sha512-1zjghOALDDhg5mPJgQfoud/bLOxD3M9n8l2LxXK4NngxGh3xXq1K7vAs2dzDnwZI6FaStrrBMDJSocT2hggiLg==}
+ engines: {node: '>=14.0.0'}
+ cpu: [x64]
+ os: [darwin]
+
'@oxc-parser/binding-linux-arm-gnueabihf@0.56.5':
resolution: {integrity: sha512-jcFCThrWUt5k1GM43tdmI1m2dEnWUPPHHTWKBJbZBXzXLrJJzkqv5OU87Spf1004rYj9swwpa13kIldFwMzglA==}
engines: {node: '>=14.0.0'}
cpu: [arm]
os: [linux]
+ '@oxc-parser/binding-linux-arm-gnueabihf@0.61.2':
+ resolution: {integrity: sha512-OppSdOE7BAHfx/hNbsS4tf+CPCEWEXeEB/4tJKcv6qysZKsTD6XXWUzn2F7KR7TFNSzA0hPjnZyezjFgo+xvcQ==}
+ engines: {node: '>=14.0.0'}
+ cpu: [arm]
+ os: [linux]
+
'@oxc-parser/binding-linux-arm64-gnu@0.56.5':
resolution: {integrity: sha512-zo/9RDgWvugKxCpHHcAC5EW0AqoEvODJ4Iv4aT1Xonv6kcydbyPSXJBQhhZUvTXTAFIlQKl6INHl+Xki9Qs3fw==}
engines: {node: '>=14.0.0'}
cpu: [arm64]
os: [linux]
+ '@oxc-parser/binding-linux-arm64-gnu@0.61.2':
+ resolution: {integrity: sha512-CqhKWDvVr4rZpi8Evh/K7FKwn9UnPhF0F0ivF+CsFCMOaS5egalmFRRybQk1QuwGq1XjTA3D8puqvlF0p82+ew==}
+ engines: {node: '>=14.0.0'}
+ cpu: [arm64]
+ os: [linux]
+
'@oxc-parser/binding-linux-arm64-musl@0.56.5':
resolution: {integrity: sha512-SCIqrL5apVbrtMoqOpKX/Ez+c46WmW0Tyhtu+Xby281biH+wYu70m+fux9ZsGmbHc2ojd4FxUcaUdCZtb5uTOQ==}
engines: {node: '>=14.0.0'}
cpu: [arm64]
os: [linux]
+ '@oxc-parser/binding-linux-arm64-musl@0.61.2':
+ resolution: {integrity: sha512-wLtzWy6EyMf7F83pcJhanolaQ7xnwnVAj2wjdJ52qgX4oQjqZZUo6Rk/LE2iY8Aq/R2Bx2yREFeIC4R1kjtB0A==}
+ engines: {node: '>=14.0.0'}
+ cpu: [arm64]
+ os: [linux]
+
'@oxc-parser/binding-linux-x64-gnu@0.56.5':
resolution: {integrity: sha512-I2mpX35NWo83hay4wrnzFLk3VuGK1BBwHaqvEdqsCode8iG8slYJRJPICVbCEWlkR3rotlTQ+608JcRU0VqZ5Q==}
engines: {node: '>=14.0.0'}
cpu: [x64]
os: [linux]
+ '@oxc-parser/binding-linux-x64-gnu@0.61.2':
+ resolution: {integrity: sha512-aJ+g/pDcOeqfB2bVZkUjHlCBL8H7lsgkuYVGKKLYxN/oLjrt2Jf/BVu6fL3NxmSSaFmtHKowDgoRAjiKwxQWEQ==}
+ engines: {node: '>=14.0.0'}
+ cpu: [x64]
+ os: [linux]
+
'@oxc-parser/binding-linux-x64-musl@0.56.5':
resolution: {integrity: sha512-xfzUHGYOh3PGWZdBuY5r1czvE8EGWPAmhTWHqkw3/uAfUVWN/qrrLjMojiaiWyUgl/9XIFg05m5CJH9dnngh5Q==}
engines: {node: '>=14.0.0'}
cpu: [x64]
os: [linux]
+ '@oxc-parser/binding-linux-x64-musl@0.61.2':
+ resolution: {integrity: sha512-PosnNyxTqCiMTgva5w695p3ooCcFU8tU+c+JnGgkBgD8pKTbV6fwn8dc4GlcgyyLaM1rD+zi/s+4ooTVML8iIA==}
+ engines: {node: '>=14.0.0'}
+ cpu: [x64]
+ os: [linux]
+
'@oxc-parser/binding-wasm32-wasi@0.56.5':
resolution: {integrity: sha512-+z3Ofmc1v5kcu8fXgG5vn7T1f52P47ceTTmTXsm5HPY7rq5EMYRUaBnxH6cesXwY1OVVCwYlIZbCiy8Pm1w8zQ==}
engines: {node: '>=14.0.0'}
cpu: [wasm32]
+ '@oxc-parser/binding-wasm32-wasi@0.61.2':
+ resolution: {integrity: sha512-zOxdLDItMXeB1GdVCtOOW+aC+Ra6C4E1ivT4rbhaaVe70RsCRa2fGmNC0divvgfQsL2eGBkCuB4d4N9DjfhK4Q==}
+ engines: {node: '>=14.0.0'}
+ cpu: [wasm32]
+
'@oxc-parser/binding-win32-arm64-msvc@0.56.5':
resolution: {integrity: sha512-pRg8QrbMh8PgnXBreiONoJBR306u+JN19BXQC7oKIaG4Zxt9Mn8XIyuhUv3ytqjLudSiG2ERWQUoCGLs+yfW0A==}
engines: {node: '>=14.0.0'}
cpu: [arm64]
os: [win32]
+ '@oxc-parser/binding-win32-arm64-msvc@0.61.2':
+ resolution: {integrity: sha512-E7VMrb4XF748hyzIax2KV7TEfi27SfXoi/BH5guiBicSef/31qwHRdKCh708lmIYmbeEJ9D0wO/25K6dvTl8QQ==}
+ engines: {node: '>=14.0.0'}
+ cpu: [arm64]
+ os: [win32]
+
'@oxc-parser/binding-win32-x64-msvc@0.56.5':
resolution: {integrity: sha512-VALZNcuyw/6rwsxOACQ2YS6rey2d/ym4cNfXqJrHB/MZduAPj4xvij72gHGu3Ywm31KVGLVWk/mrMRiM9CINcA==}
engines: {node: '>=14.0.0'}
cpu: [x64]
os: [win32]
+ '@oxc-parser/binding-win32-x64-msvc@0.61.2':
+ resolution: {integrity: sha512-GtRVVz4DGF94MzlJ7xCIpITu6WKYdTqWc2cqMaJEzYDC8EsHjNkfbGhmawhyodFFuTfWqPAjJecIvvAnfMLpxw==}
+ engines: {node: '>=14.0.0'}
+ cpu: [x64]
+ os: [win32]
+
'@oxc-parser/wasm@0.60.0':
resolution: {integrity: sha512-Dkf9/D87WGBCW3L0+1DtpAfL4SrNsgeRvxwjpKCtbH7Kf6K+pxrT0IridaJfmWKu1Ml+fDvj+7HEyBcfUC/TXQ==}
@@ -1077,6 +1226,9 @@ packages:
'@oxc-project/types@0.60.0':
resolution: {integrity: sha512-prhfNnb3ATFHOCv7mzKFfwLij5RzoUz6Y1n525ZhCEqfq5wreCXL+DyVoq3ShukPo7q45ZjYIdjFUgjj+WKzng==}
+ '@oxc-project/types@0.61.2':
+ resolution: {integrity: sha512-rfuwJwvwn9MRthHNXlSo9Eka/u7gC0MhnWAoX3BhE1+rwPOl22nq0K0Y997Hof0tHCOuD7H3/Z8HTfCVhB4c5Q==}
+
'@parcel/watcher-android-arm64@2.5.1':
resolution: {integrity: sha512-KF8+j9nNbUN8vzOFDpRMsaKBHZ/mcjEjMToVMJOhTozkDonQFFrRcfdLWn6yWKCmJKmdVxSgHiYvTCef4/qcBA==}
engines: {node: '>= 10.0.0'}
@@ -1345,6 +1497,15 @@ packages:
rollup:
optional: true
+ '@rollup/plugin-yaml@4.1.2':
+ resolution: {integrity: sha512-RpupciIeZMUqhgFE97ba0s98mOFS7CWzN3EJNhJkqSv9XLlWYtwVdtE6cDw6ASOF/sZVFS7kRJXftaqM2Vakdw==}
+ engines: {node: '>=14.0.0'}
+ peerDependencies:
+ rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0
+ peerDependenciesMeta:
+ rollup:
+ optional: true
+
'@rollup/pluginutils@5.1.4':
resolution: {integrity: sha512-USm05zrsFxYLPdWWq+K3STlWiT/3ELn3RcV5hJMghpeAIhxfsUIg6mt12CBJBInWMV4VneoV7SfGv8xIwo2qNQ==}
engines: {node: '>=14.0.0'}
@@ -2813,6 +2974,11 @@ packages:
resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==}
engines: {node: '>=12'}
+ escodegen@2.1.0:
+ resolution: {integrity: sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==}
+ engines: {node: '>=6.0'}
+ hasBin: true
+
eslint-compat-utils@0.5.1:
resolution: {integrity: sha512-3z3vFexKIEnjHE3zCMRo6fn/e44U7T1khUjg+Hp0ZQMCigh28rALD0nPFBcGZuiLC5rLZa2ubQHDRln09JfU2Q==}
engines: {node: '>=12'}
@@ -3005,6 +3171,11 @@ packages:
resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+ esprima@4.0.1:
+ resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==}
+ engines: {node: '>=4'}
+ hasBin: true
+
esquery@1.6.0:
resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==}
engines: {node: '>=0.10'}
@@ -3520,6 +3691,9 @@ packages:
is-hexadecimal@2.0.1:
resolution: {integrity: sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==}
+ is-https@4.0.0:
+ resolution: {integrity: sha512-FeMLiqf8E5g6SdiVJsPcNZX8k4h2fBs1wp5Bb6uaNxn58ufK1axBqQZdmAQsqh0t9BuwFObybrdVJh6MKyPlyg==}
+
is-inside-container@1.0.0:
resolution: {integrity: sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==}
engines: {node: '>=14.16'}
@@ -4240,6 +4414,10 @@ packages:
resolution: {integrity: sha512-MNT32sqiTFeSbQZP2WZIRQ/mlIpNNq4sua+/4hBG4qT5aef2iQe+1/BjezZURPlvucZeSfN1Y6b60l7OgBdyUA==}
engines: {node: '>=14.0.0'}
+ oxc-parser@0.61.2:
+ resolution: {integrity: sha512-ZJnAP7VLQhqqnfku7+gssTwmbQyfbZ552Vly4O2BMHkvDwfwLlPtAIYjMq57Lcj5HLmopI0oZlk7xTSML/YsZA==}
+ engines: {node: '>=14.0.0'}
+
p-limit@3.1.0:
resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==}
engines: {node: '>=10'}
@@ -5180,6 +5358,10 @@ packages:
resolution: {integrity: sha512-khrZo4buq4qVmsGzS5yQjKe/WsFvV8fGfOjDQN0q4iy9FjRfPWRgTFrU8u1R2iu/SfWLhY9WnCi4Jhdrcbtg+g==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+ tosource@2.0.0-alpha.3:
+ resolution: {integrity: sha512-KAB2lrSS48y91MzFPFuDg4hLbvDiyTjOVgaK7Erw+5AmZXNq4sFRVn8r6yxSLuNs15PaokrDRpS61ERY9uZOug==}
+ engines: {node: '>=10'}
+
totalist@3.0.1:
resolution: {integrity: sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==}
engines: {node: '>=6'}
@@ -5652,6 +5834,12 @@ packages:
peerDependencies:
vue: ^3.4.37
+ vue-i18n@10.0.6:
+ resolution: {integrity: sha512-pQPspK5H4srzlu+47+HEY2tmiY3GyYIvSPgSBdQaYVWv7t1zj1t9p1FvHlxBXyJ17t9stG/Vxj+pykrvPWBLeQ==}
+ engines: {node: '>= 16'}
+ peerDependencies:
+ vue: ^3.0.0
+
vue-resize@2.0.0-alpha.1:
resolution: {integrity: sha512-7+iqOueLU7uc9NrMfrzbG8hwMqchfVfSzpVlCMeJQe4pyibqyoifDNbKTZvwxZKDvGkB+PdFeKvnGZMoEb8esg==}
peerDependencies:
@@ -6385,6 +6573,87 @@ snapshots:
'@iconify/types': 2.0.0
vue: 3.5.13(typescript@5.8.2)
+ '@intlify/bundle-utils@10.0.1(vue-i18n@10.0.6(vue@3.5.13(typescript@5.8.2)))':
+ dependencies:
+ '@intlify/message-compiler': 11.1.2
+ '@intlify/shared': 11.1.2
+ acorn: 8.14.1
+ escodegen: 2.1.0
+ estree-walker: 2.0.2
+ jsonc-eslint-parser: 2.4.0
+ mlly: 1.7.4
+ source-map-js: 1.2.1
+ yaml-eslint-parser: 1.3.0
+ optionalDependencies:
+ vue-i18n: 10.0.6(vue@3.5.13(typescript@5.8.2))
+
+ '@intlify/core-base@10.0.6':
+ dependencies:
+ '@intlify/message-compiler': 10.0.6
+ '@intlify/shared': 10.0.6
+
+ '@intlify/core@10.0.6':
+ dependencies:
+ '@intlify/core-base': 10.0.6
+ '@intlify/shared': 10.0.6
+
+ '@intlify/h3@0.6.1':
+ dependencies:
+ '@intlify/core': 10.0.6
+ '@intlify/utils': 0.13.0
+
+ '@intlify/message-compiler@10.0.6':
+ dependencies:
+ '@intlify/shared': 10.0.6
+ source-map-js: 1.2.1
+
+ '@intlify/message-compiler@11.1.2':
+ dependencies:
+ '@intlify/shared': 11.1.2
+ source-map-js: 1.2.1
+
+ '@intlify/shared@10.0.6': {}
+
+ '@intlify/shared@11.1.2': {}
+
+ '@intlify/unplugin-vue-i18n@6.0.5(@vue/compiler-dom@3.5.13)(eslint@9.23.0(jiti@2.4.2))(rollup@4.37.0)(typescript@5.8.2)(vue-i18n@10.0.6(vue@3.5.13(typescript@5.8.2)))(vue@3.5.13(typescript@5.8.2))':
+ dependencies:
+ '@eslint-community/eslint-utils': 4.5.1(eslint@9.23.0(jiti@2.4.2))
+ '@intlify/bundle-utils': 10.0.1(vue-i18n@10.0.6(vue@3.5.13(typescript@5.8.2)))
+ '@intlify/shared': 11.1.2
+ '@intlify/vue-i18n-extensions': 8.0.0(@intlify/shared@11.1.2)(@vue/compiler-dom@3.5.13)(vue-i18n@10.0.6(vue@3.5.13(typescript@5.8.2)))(vue@3.5.13(typescript@5.8.2))
+ '@rollup/pluginutils': 5.1.4(rollup@4.37.0)
+ '@typescript-eslint/scope-manager': 8.27.0
+ '@typescript-eslint/typescript-estree': 8.27.0(typescript@5.8.2)
+ debug: 4.4.0(supports-color@9.4.0)
+ fast-glob: 3.3.3
+ js-yaml: 4.1.0
+ json5: 2.2.3
+ pathe: 1.1.2
+ picocolors: 1.1.1
+ source-map-js: 1.2.1
+ unplugin: 1.16.1
+ vue: 3.5.13(typescript@5.8.2)
+ optionalDependencies:
+ vue-i18n: 10.0.6(vue@3.5.13(typescript@5.8.2))
+ transitivePeerDependencies:
+ - '@vue/compiler-dom'
+ - eslint
+ - rollup
+ - supports-color
+ - typescript
+
+ '@intlify/utils@0.13.0': {}
+
+ '@intlify/vue-i18n-extensions@8.0.0(@intlify/shared@11.1.2)(@vue/compiler-dom@3.5.13)(vue-i18n@10.0.6(vue@3.5.13(typescript@5.8.2)))(vue@3.5.13(typescript@5.8.2))':
+ dependencies:
+ '@babel/parser': 7.26.10
+ optionalDependencies:
+ '@intlify/shared': 11.1.2
+ '@vue/compiler-dom': 3.5.13
+ vue: 3.5.13(typescript@5.8.2)
+ vue-i18n: 10.0.6(vue@3.5.13(typescript@5.8.2))
+
'@ioredis/commands@1.2.0': {}
'@isaacs/cliui@8.0.2':
@@ -6447,6 +6716,12 @@ snapshots:
- encoding
- supports-color
+ '@miyaneee/rollup-plugin-json5@1.2.0(rollup@4.37.0)':
+ dependencies:
+ '@rollup/pluginutils': 5.1.4(rollup@4.37.0)
+ json5: 2.2.3
+ rollup: 4.37.0
+
'@napi-rs/wasm-runtime@0.2.7':
dependencies:
'@emnapi/core': 1.3.1
@@ -6874,6 +7149,42 @@ snapshots:
transitivePeerDependencies:
- magicast
+ '@nuxtjs/i18n@9.4.0(@vue/compiler-dom@3.5.13)(eslint@9.23.0(jiti@2.4.2))(magicast@0.3.5)(rollup@4.37.0)(vue@3.5.13(typescript@5.8.2))':
+ dependencies:
+ '@intlify/h3': 0.6.1
+ '@intlify/shared': 10.0.6
+ '@intlify/unplugin-vue-i18n': 6.0.5(@vue/compiler-dom@3.5.13)(eslint@9.23.0(jiti@2.4.2))(rollup@4.37.0)(typescript@5.8.2)(vue-i18n@10.0.6(vue@3.5.13(typescript@5.8.2)))(vue@3.5.13(typescript@5.8.2))
+ '@intlify/utils': 0.13.0
+ '@miyaneee/rollup-plugin-json5': 1.2.0(rollup@4.37.0)
+ '@nuxt/kit': 3.16.1(magicast@0.3.5)
+ '@oxc-parser/wasm': 0.60.0
+ '@rollup/plugin-yaml': 4.1.2(rollup@4.37.0)
+ '@vue/compiler-sfc': 3.5.13
+ debug: 4.4.0(supports-color@9.4.0)
+ defu: 6.1.4
+ esbuild: 0.25.1
+ estree-walker: 3.0.3
+ is-https: 4.0.0
+ knitwork: 1.2.0
+ magic-string: 0.30.17
+ mlly: 1.7.4
+ oxc-parser: 0.61.2
+ pathe: 2.0.3
+ typescript: 5.8.2
+ ufo: 1.5.4
+ unplugin: 2.2.2
+ unplugin-vue-router: 0.12.0(vue-router@4.5.0(vue@3.5.13(typescript@5.8.2)))(vue@3.5.13(typescript@5.8.2))
+ vue-i18n: 10.0.6(vue@3.5.13(typescript@5.8.2))
+ vue-router: 4.5.0(vue@3.5.13(typescript@5.8.2))
+ transitivePeerDependencies:
+ - '@vue/compiler-dom'
+ - eslint
+ - magicast
+ - petite-vue-i18n
+ - rollup
+ - supports-color
+ - vue
+
'@nuxtjs/mdc@0.16.1(magicast@0.3.5)':
dependencies:
'@nuxt/kit': 3.16.1(magicast@0.3.5)
@@ -6979,35 +7290,67 @@ snapshots:
'@oxc-parser/binding-darwin-arm64@0.56.5':
optional: true
+ '@oxc-parser/binding-darwin-arm64@0.61.2':
+ optional: true
+
'@oxc-parser/binding-darwin-x64@0.56.5':
optional: true
+ '@oxc-parser/binding-darwin-x64@0.61.2':
+ optional: true
+
'@oxc-parser/binding-linux-arm-gnueabihf@0.56.5':
optional: true
+ '@oxc-parser/binding-linux-arm-gnueabihf@0.61.2':
+ optional: true
+
'@oxc-parser/binding-linux-arm64-gnu@0.56.5':
optional: true
+ '@oxc-parser/binding-linux-arm64-gnu@0.61.2':
+ optional: true
+
'@oxc-parser/binding-linux-arm64-musl@0.56.5':
optional: true
+ '@oxc-parser/binding-linux-arm64-musl@0.61.2':
+ optional: true
+
'@oxc-parser/binding-linux-x64-gnu@0.56.5':
optional: true
+ '@oxc-parser/binding-linux-x64-gnu@0.61.2':
+ optional: true
+
'@oxc-parser/binding-linux-x64-musl@0.56.5':
optional: true
+ '@oxc-parser/binding-linux-x64-musl@0.61.2':
+ optional: true
+
'@oxc-parser/binding-wasm32-wasi@0.56.5':
dependencies:
'@napi-rs/wasm-runtime': 0.2.7
optional: true
+ '@oxc-parser/binding-wasm32-wasi@0.61.2':
+ dependencies:
+ '@napi-rs/wasm-runtime': 0.2.7
+ optional: true
+
'@oxc-parser/binding-win32-arm64-msvc@0.56.5':
optional: true
+ '@oxc-parser/binding-win32-arm64-msvc@0.61.2':
+ optional: true
+
'@oxc-parser/binding-win32-x64-msvc@0.56.5':
optional: true
+ '@oxc-parser/binding-win32-x64-msvc@0.61.2':
+ optional: true
+
'@oxc-parser/wasm@0.60.0':
dependencies:
'@oxc-project/types': 0.60.0
@@ -7016,6 +7359,8 @@ snapshots:
'@oxc-project/types@0.60.0': {}
+ '@oxc-project/types@0.61.2': {}
+
'@parcel/watcher-android-arm64@2.5.1':
optional: true
@@ -7238,6 +7583,14 @@ snapshots:
optionalDependencies:
rollup: 4.37.0
+ '@rollup/plugin-yaml@4.1.2(rollup@4.37.0)':
+ dependencies:
+ '@rollup/pluginutils': 5.1.4(rollup@4.37.0)
+ js-yaml: 4.1.0
+ tosource: 2.0.0-alpha.3
+ optionalDependencies:
+ rollup: 4.37.0
+
'@rollup/pluginutils@5.1.4(rollup@4.37.0)':
dependencies:
'@types/estree': 1.0.6
@@ -8902,6 +9255,14 @@ snapshots:
escape-string-regexp@5.0.0: {}
+ escodegen@2.1.0:
+ dependencies:
+ esprima: 4.0.1
+ estraverse: 5.3.0
+ esutils: 2.0.3
+ optionalDependencies:
+ source-map: 0.6.1
+
eslint-compat-utils@0.5.1(eslint@9.23.0(jiti@2.4.2)):
dependencies:
eslint: 9.23.0(jiti@2.4.2)
@@ -9205,6 +9566,8 @@ snapshots:
acorn-jsx: 5.3.2(acorn@8.14.1)
eslint-visitor-keys: 3.4.3
+ esprima@4.0.1: {}
+
esquery@1.6.0:
dependencies:
estraverse: 5.3.0
@@ -9823,6 +10186,8 @@ snapshots:
is-hexadecimal@2.0.1: {}
+ is-https@4.0.0: {}
+
is-inside-container@1.0.0:
dependencies:
is-docker: 3.0.0
@@ -10988,6 +11353,21 @@ snapshots:
'@oxc-parser/binding-win32-arm64-msvc': 0.56.5
'@oxc-parser/binding-win32-x64-msvc': 0.56.5
+ oxc-parser@0.61.2:
+ dependencies:
+ '@oxc-project/types': 0.61.2
+ optionalDependencies:
+ '@oxc-parser/binding-darwin-arm64': 0.61.2
+ '@oxc-parser/binding-darwin-x64': 0.61.2
+ '@oxc-parser/binding-linux-arm-gnueabihf': 0.61.2
+ '@oxc-parser/binding-linux-arm64-gnu': 0.61.2
+ '@oxc-parser/binding-linux-arm64-musl': 0.61.2
+ '@oxc-parser/binding-linux-x64-gnu': 0.61.2
+ '@oxc-parser/binding-linux-x64-musl': 0.61.2
+ '@oxc-parser/binding-wasm32-wasi': 0.61.2
+ '@oxc-parser/binding-win32-arm64-msvc': 0.61.2
+ '@oxc-parser/binding-win32-x64-msvc': 0.61.2
+
p-limit@3.1.0:
dependencies:
yocto-queue: 0.1.0
@@ -12068,6 +12448,8 @@ snapshots:
dependencies:
eslint-visitor-keys: 3.4.3
+ tosource@2.0.0-alpha.3: {}
+
totalist@3.0.1: {}
tr46@0.0.3: {}
@@ -12575,6 +12957,13 @@ snapshots:
dependencies:
vue: 3.5.13(typescript@5.8.2)
+ vue-i18n@10.0.6(vue@3.5.13(typescript@5.8.2)):
+ dependencies:
+ '@intlify/core-base': 10.0.6
+ '@intlify/shared': 10.0.6
+ '@vue/devtools-api': 6.6.4
+ vue: 3.5.13(typescript@5.8.2)
+
vue-resize@2.0.0-alpha.1(vue@3.5.13(typescript@5.8.2)):
dependencies:
vue: 3.5.13(typescript@5.8.2)
diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml
index 6b05a490..7d15857c 100644
--- a/pnpm-workspace.yaml
+++ b/pnpm-workspace.yaml
@@ -47,6 +47,7 @@ catalogs:
'@nuxt/image': ^1.10.0
'@nuxt/kit': ^3.16.1
'@nuxtjs/color-mode': ^3.5.2
+ '@nuxtjs/i18n': ^9.4.0
'@nuxtjs/seo': ^3.0.1
'@pinia/nuxt': ^0.10.1
'@unocss/extractor-mdc': ^65.5.0
diff --git a/stores/commands.ts b/stores/commands.ts
index b2f208c0..14f3549d 100644
--- a/stores/commands.ts
+++ b/stores/commands.ts
@@ -2,7 +2,7 @@ import Fuse from 'fuse.js'
export interface Command {
id?: string
- title: string
+ title: string | (() => string)
to?: string
description?: string
visible?: () => boolean
@@ -21,8 +21,11 @@ export const useCommandsStore = defineStore('commands', () => {
threshold: 0.3,
}))
+ const { locale } = useI18n()
+ const collection = computed(() => locale.value === 'ja' ? 'ja' : 'en')
+
const { data: sections } = useAsyncData('search-sections', () => {
- return queryCollectionSearchSections('tutorials', {
+ return queryCollectionSearchSections(collection.value, {
ignoredTags: ['hidden'],
})
})