@intlayer/docs 9.2.0 → 9.3.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.
- package/README.md +24 -24
- package/blog/ar/index.md +1 -1
- package/blog/ar/rag_powered_documentation_assistant.md +1 -1
- package/blog/de/index.md +1 -1
- package/blog/en/index.md +1 -1
- package/blog/en-GB/index.md +1 -1
- package/blog/es/index.md +1 -1
- package/blog/fr/index.md +1 -1
- package/blog/hi/index.md +1 -1
- package/blog/id/index.md +1 -1
- package/blog/it/index.md +1 -1
- package/blog/ja/index.md +1 -1
- package/blog/ko/index.md +1 -1
- package/blog/pl/index.md +1 -1
- package/blog/pl/rag_powered_documentation_assistant.md +1 -1
- package/blog/pt/index.md +1 -1
- package/blog/ru/index.md +1 -1
- package/blog/uk/index.md +1 -1
- package/blog/vi/index.md +1 -1
- package/blog/zh/index.md +1 -1
- package/dist/cjs/_virtual/_rolldown/runtime.cjs +1 -2
- package/dist/cjs/authors2.cjs +0 -1
- package/dist/cjs/common.cjs +24 -1
- package/dist/cjs/common.cjs.map +1 -1
- package/dist/cjs/generated/blog.entry.cjs +35 -6
- package/dist/cjs/generated/blog.entry.cjs.map +1 -1
- package/dist/cjs/generated/docs.entry.cjs +35 -6
- package/dist/cjs/generated/docs.entry.cjs.map +1 -1
- package/dist/cjs/generated/frequentQuestions.entry.cjs +35 -6
- package/dist/cjs/generated/frequentQuestions.entry.cjs.map +1 -1
- package/dist/cjs/generated/legal.entry.cjs +35 -6
- package/dist/cjs/generated/legal.entry.cjs.map +1 -1
- package/dist/esm/common.mjs +24 -1
- package/dist/esm/common.mjs.map +1 -1
- package/dist/esm/generated/blog.entry.mjs +35 -6
- package/dist/esm/generated/blog.entry.mjs.map +1 -1
- package/dist/esm/generated/docs.entry.mjs +35 -6
- package/dist/esm/generated/docs.entry.mjs.map +1 -1
- package/dist/esm/generated/frequentQuestions.entry.mjs +35 -6
- package/dist/esm/generated/frequentQuestions.entry.mjs.map +1 -1
- package/dist/esm/generated/legal.entry.mjs +35 -6
- package/dist/esm/generated/legal.entry.mjs.map +1 -1
- package/dist/types/common.d.ts.map +1 -1
- package/dist/types/generated/blog.entry.d.ts.map +1 -1
- package/dist/types/generated/docs.entry.d.ts.map +1 -1
- package/dist/types/generated/frequentQuestions.entry.d.ts.map +1 -1
- package/dist/types/generated/legal.entry.d.ts.map +1 -1
- package/docs/ar/bundle_optimization.md +58 -25
- package/docs/ar/configuration.md +10 -10
- package/docs/ar/interest_of_intlayer.md +24 -22
- package/docs/ar/intlayer_with_express.md +1 -1
- package/docs/ar/intlayer_with_svelte_kit.md +1 -1
- package/docs/ar/intlayer_with_tanstack+solid.md +5 -3
- package/docs/ar/intlayer_with_tanstack.md +5 -3
- package/docs/ar/live-sync.md +4 -0
- package/docs/ar/lsp.md +114 -175
- package/docs/ar/readme.md +25 -25
- package/docs/bn/bundle_optimization.md +58 -25
- package/docs/bn/configuration.md +10 -10
- package/docs/bn/interest_of_intlayer.md +24 -22
- package/docs/cs/bundle_optimization.md +58 -25
- package/docs/cs/configuration.md +10 -10
- package/docs/cs/interest_of_intlayer.md +24 -22
- package/docs/de/bundle_optimization.md +58 -25
- package/docs/de/configuration.md +10 -10
- package/docs/de/interest_of_intlayer.md +24 -22
- package/docs/de/intlayer_with_svelte_kit.md +1 -1
- package/docs/de/intlayer_with_tanstack+solid.md +5 -3
- package/docs/de/intlayer_with_tanstack.md +5 -3
- package/docs/de/live-sync.md +4 -0
- package/docs/de/lsp.md +111 -172
- package/docs/de/readme.md +24 -24
- package/docs/en/bundle_optimization.md +51 -23
- package/docs/en/configuration.md +10 -10
- package/docs/en/interest_of_intlayer.md +24 -22
- package/docs/en/intlayer_with_svelte_kit.md +1 -1
- package/docs/en/intlayer_with_tanstack+solid.md +5 -3
- package/docs/en/intlayer_with_tanstack.md +5 -3
- package/docs/en/live-sync.md +4 -0
- package/docs/en/lsp.md +109 -170
- package/docs/en/readme.md +24 -24
- package/docs/en-GB/bundle_optimization.md +58 -25
- package/docs/en-GB/configuration.md +10 -10
- package/docs/en-GB/interest_of_intlayer.md +24 -22
- package/docs/en-GB/intlayer_with_svelte_kit.md +1 -1
- package/docs/en-GB/intlayer_with_tanstack+solid.md +5 -3
- package/docs/en-GB/intlayer_with_tanstack.md +5 -3
- package/docs/en-GB/live-sync.md +4 -0
- package/docs/en-GB/lsp.md +109 -170
- package/docs/en-GB/readme.md +24 -24
- package/docs/es/bundle_optimization.md +58 -25
- package/docs/es/configuration.md +10 -10
- package/docs/es/interest_of_intlayer.md +24 -22
- package/docs/es/intlayer_with_svelte_kit.md +1 -1
- package/docs/es/intlayer_with_tanstack+solid.md +5 -3
- package/docs/es/intlayer_with_tanstack.md +5 -3
- package/docs/es/live-sync.md +4 -0
- package/docs/es/lsp.md +114 -175
- package/docs/es/readme.md +24 -24
- package/docs/fr/bundle_optimization.md +58 -25
- package/docs/fr/configuration.md +10 -10
- package/docs/fr/interest_of_intlayer.md +24 -22
- package/docs/fr/intlayer_with_svelte_kit.md +1 -1
- package/docs/fr/intlayer_with_tanstack+solid.md +5 -3
- package/docs/fr/intlayer_with_tanstack.md +5 -3
- package/docs/fr/live-sync.md +4 -0
- package/docs/fr/lsp.md +110 -171
- package/docs/fr/readme.md +24 -24
- package/docs/hi/bundle_optimization.md +58 -25
- package/docs/hi/configuration.md +10 -10
- package/docs/hi/interest_of_intlayer.md +24 -22
- package/docs/hi/intlayer_with_express.md +1 -1
- package/docs/hi/intlayer_with_svelte_kit.md +1 -1
- package/docs/hi/intlayer_with_tanstack+solid.md +5 -3
- package/docs/hi/intlayer_with_tanstack.md +5 -3
- package/docs/hi/live-sync.md +4 -0
- package/docs/hi/lsp.md +113 -174
- package/docs/hi/readme.md +24 -24
- package/docs/id/bundle_optimization.md +58 -25
- package/docs/id/configuration.md +10 -10
- package/docs/id/interest_of_intlayer.md +24 -22
- package/docs/id/intlayer_with_svelte_kit.md +1 -1
- package/docs/id/intlayer_with_tanstack+solid.md +5 -3
- package/docs/id/intlayer_with_tanstack.md +5 -3
- package/docs/id/live-sync.md +4 -0
- package/docs/id/lsp.md +113 -174
- package/docs/id/readme.md +24 -24
- package/docs/it/bundle_optimization.md +58 -25
- package/docs/it/configuration.md +10 -10
- package/docs/it/interest_of_intlayer.md +24 -22
- package/docs/it/intlayer_with_svelte_kit.md +1 -1
- package/docs/it/intlayer_with_tanstack+solid.md +5 -3
- package/docs/it/intlayer_with_tanstack.md +5 -3
- package/docs/it/live-sync.md +4 -0
- package/docs/it/lsp.md +115 -176
- package/docs/it/readme.md +24 -24
- package/docs/ja/bundle_optimization.md +58 -25
- package/docs/ja/configuration.md +10 -10
- package/docs/ja/interest_of_intlayer.md +24 -22
- package/docs/ja/intlayer_with_tanstack+solid.md +5 -3
- package/docs/ja/intlayer_with_tanstack.md +5 -3
- package/docs/ja/live-sync.md +4 -0
- package/docs/ja/lsp.md +113 -174
- package/docs/ja/readme.md +24 -24
- package/docs/ko/bundle_optimization.md +58 -25
- package/docs/ko/configuration.md +10 -10
- package/docs/ko/interest_of_intlayer.md +24 -22
- package/docs/ko/intlayer_with_svelte_kit.md +1 -1
- package/docs/ko/intlayer_with_tanstack+solid.md +5 -3
- package/docs/ko/intlayer_with_tanstack.md +5 -3
- package/docs/ko/live-sync.md +4 -0
- package/docs/ko/lsp.md +112 -173
- package/docs/ko/readme.md +24 -24
- package/docs/nl/bundle_optimization.md +58 -25
- package/docs/nl/configuration.md +10 -10
- package/docs/nl/interest_of_intlayer.md +24 -22
- package/docs/pl/bundle_optimization.md +58 -25
- package/docs/pl/configuration.md +10 -10
- package/docs/pl/interest_of_intlayer.md +4 -2
- package/docs/pl/intlayer_with_svelte_kit.md +1 -1
- package/docs/pl/intlayer_with_tanstack+solid.md +5 -3
- package/docs/pl/intlayer_with_tanstack.md +5 -3
- package/docs/pl/live-sync.md +4 -0
- package/docs/pl/lsp.md +115 -176
- package/docs/pl/readme.md +24 -24
- package/docs/pt/bundle_optimization.md +58 -24
- package/docs/pt/configuration.md +10 -10
- package/docs/pt/interest_of_intlayer.md +24 -22
- package/docs/pt/intlayer_with_svelte_kit.md +1 -1
- package/docs/pt/intlayer_with_tanstack+solid.md +5 -3
- package/docs/pt/intlayer_with_tanstack.md +5 -3
- package/docs/pt/live-sync.md +4 -0
- package/docs/pt/lsp.md +113 -174
- package/docs/pt/readme.md +24 -24
- package/docs/ru/bundle_optimization.md +58 -25
- package/docs/ru/configuration.md +10 -10
- package/docs/ru/interest_of_intlayer.md +24 -22
- package/docs/ru/intlayer_with_nextjs_14.md +1 -1
- package/docs/ru/intlayer_with_nextjs_15.md +1 -1
- package/docs/ru/intlayer_with_svelte_kit.md +1 -1
- package/docs/ru/intlayer_with_tanstack+solid.md +5 -3
- package/docs/ru/intlayer_with_tanstack.md +5 -3
- package/docs/ru/live-sync.md +4 -0
- package/docs/ru/lsp.md +112 -173
- package/docs/ru/readme.md +24 -24
- package/docs/tr/bundle_optimization.md +58 -25
- package/docs/tr/configuration.md +10 -10
- package/docs/tr/interest_of_intlayer.md +24 -22
- package/docs/tr/intlayer_with_svelte_kit.md +1 -1
- package/docs/tr/intlayer_with_tanstack+solid.md +5 -3
- package/docs/tr/intlayer_with_tanstack.md +5 -3
- package/docs/tr/live-sync.md +4 -0
- package/docs/tr/lsp.md +113 -174
- package/docs/tr/readme.md +24 -24
- package/docs/uk/bundle_optimization.md +58 -25
- package/docs/uk/configuration.md +10 -10
- package/docs/uk/interest_of_intlayer.md +4 -2
- package/docs/uk/intlayer_with_svelte_kit.md +1 -1
- package/docs/uk/intlayer_with_tanstack+solid.md +5 -3
- package/docs/uk/intlayer_with_tanstack.md +5 -3
- package/docs/uk/live-sync.md +4 -0
- package/docs/uk/lsp.md +113 -174
- package/docs/uk/per_locale_file.md +1 -1
- package/docs/uk/readme.md +24 -24
- package/docs/ur/bundle_optimization.md +58 -25
- package/docs/ur/configuration.md +10 -10
- package/docs/ur/interest_of_intlayer.md +24 -22
- package/docs/vi/bundle_optimization.md +58 -25
- package/docs/vi/configuration.md +10 -10
- package/docs/vi/interest_of_intlayer.md +24 -22
- package/docs/vi/intlayer_with_svelte_kit.md +1 -1
- package/docs/vi/intlayer_with_tanstack+solid.md +5 -3
- package/docs/vi/intlayer_with_tanstack.md +5 -3
- package/docs/vi/live-sync.md +4 -0
- package/docs/vi/lsp.md +115 -176
- package/docs/vi/readme.md +24 -24
- package/docs/zh/bundle_optimization.md +58 -25
- package/docs/zh/configuration.md +10 -10
- package/docs/zh/interest_of_intlayer.md +24 -22
- package/docs/zh/intlayer_with_svelte_kit.md +1 -1
- package/docs/zh/intlayer_with_tanstack+solid.md +5 -3
- package/docs/zh/intlayer_with_tanstack.md +5 -3
- package/docs/zh/live-sync.md +4 -0
- package/docs/zh/lsp.md +113 -174
- package/docs/zh/readme.md +21 -21
- package/docs/zh-TW/bundle_optimization.md +58 -25
- package/docs/zh-TW/interest_of_intlayer.md +24 -22
- package/package.json +7 -7
- package/src/common.ts +39 -2
- package/src/generated/blog.entry.ts +39 -7
- package/src/generated/docs.entry.ts +39 -7
- package/src/generated/frequentQuestions.entry.ts +39 -7
- package/src/generated/legal.entry.ts +39 -7
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
createdAt: 2025-11-25
|
|
3
|
-
updatedAt: 2026-
|
|
3
|
+
updatedAt: 2026-08-09
|
|
4
4
|
title: i18nバンドルサイズとパフォーマンスの最適化
|
|
5
5
|
description: 国際化(i18n)コンテンツを最適化し、アプリケーションのバンドルサイズを削減します。Intlayerを使用して辞書のツリーシェイキングと遅延読み込みを活用する方法を学びます。
|
|
6
6
|
keywords:
|
|
@@ -16,6 +16,12 @@ slugs:
|
|
|
16
16
|
- concept
|
|
17
17
|
- bundle-optimization
|
|
18
18
|
history:
|
|
19
|
+
- version: 9.2.1
|
|
20
|
+
date: 2026-08-09
|
|
21
|
+
changes: "`purge` と `minify` が `@intlayer/swc` を通じて Next.js で動作するようになりました — `babel.config.js` は不要です"
|
|
22
|
+
- version: 8.12.0
|
|
23
|
+
date: 2026-06-24
|
|
24
|
+
changes: "リファレンス表で Babel プラグインを必要なパイプライン順(extract → purge → minify → optimize)で列挙"
|
|
19
25
|
- version: 8.12.0
|
|
20
26
|
date: 2026-06-07
|
|
21
27
|
changes: "Babel/Webpack用の `intlayerPurgeBabelPlugin` と `intlayerMinifyBabelPlugin` を追加、プラグインのパイプラインを明確化"
|
|
@@ -191,12 +197,14 @@ Intlayerのビルド最適化は、それぞれ単一の責任を持つ複数の
|
|
|
191
197
|
|
|
192
198
|
これらは、Webpackベースのセットアップ(Babelを使用したNext.js、CRA、カスタムWebpackなど)の `babel.config.js` で直接使用されます。
|
|
193
199
|
|
|
200
|
+
以下の表は、必要なパイプライン順(`babel.config.js` に記述しなければならない順序と同じ)で列挙しています:
|
|
201
|
+
|
|
194
202
|
| プラグイン | 役割 |
|
|
195
203
|
| :---------------------------- | :---------------------------------------------------------------------------------------------------------------------------------------- |
|
|
196
204
|
| `intlayerExtractBabelPlugin` | `.content.ts` ファイルをスキャンし、コンパイルされた辞書を `.intlayer/` に書き込みます |
|
|
197
|
-
| `intlayerOptimizeBabelPlugin` | `useIntlayer('key')` を `useDictionary(hash)` に書き換え、一致する辞書の `import` を注入します |
|
|
198
205
|
| `intlayerPurgeBabelPlugin` | すべてのソースファイルをスキャンし、コンパイルされた `.intlayer/**/*.json` から**未使用のフィールド**を削除します |
|
|
199
206
|
| `intlayerMinifyBabelPlugin` | JSONファイルとソースコードの両方で、**コンテンツフィールドキーを短いアルファベットのエイリアス**(例:`title` → `a`)に**名前変更**します |
|
|
207
|
+
| `intlayerOptimizeBabelPlugin` | `useIntlayer('key')` を `useDictionary(hash)` に書き換え、一致する辞書の `import` を注入します |
|
|
200
208
|
|
|
201
209
|
> **プラグインの順序は重要です。** `babel.config.js` では、purgeとminifyのプラグインは、optimizeのプラグインの**前**に記述する必要があります。最適化パスは `useIntlayer('key')` を不透明な `useDictionary(hash)` 呼び出しに置き換えるため、purgeパスとminifyパスが使用されているフィールドを識別するために必要な辞書キー情報が消去されてしまいます。
|
|
202
210
|
|
|
@@ -205,9 +213,9 @@ Intlayerのビルド最適化は、それぞれ単一の責任を持つ複数の
|
|
|
205
213
|
| オプションヘルパー | 一緒に使用するプラグイン |
|
|
206
214
|
| :--------------------------- | :---------------------------- |
|
|
207
215
|
| `getExtractPluginOptions()` | `intlayerExtractBabelPlugin` |
|
|
208
|
-
| `getOptimizePluginOptions()` | `intlayerOptimizeBabelPlugin` |
|
|
209
216
|
| `getPurgePluginOptions()` | `intlayerPurgeBabelPlugin` |
|
|
210
217
|
| `getMinifyPluginOptions()` | `intlayerMinifyBabelPlugin` |
|
|
218
|
+
| `getOptimizePluginOptions()` | `intlayerOptimizeBabelPlugin` |
|
|
211
219
|
|
|
212
220
|
### Vite プラグイン (`vite-intlayer`)
|
|
213
221
|
|
|
@@ -220,6 +228,20 @@ Viteユーザーは**これらを直接設定することはありません**。
|
|
|
220
228
|
| Dictionary minify | `intlayerMinifyBabelPlugin` のJSON書き込みパスと同じ |
|
|
221
229
|
| Babel transform | `intlayerMinifyBabelPlugin` のソースコード名変更 + `intlayerOptimizeBabelPlugin` と同じ |
|
|
222
230
|
|
|
231
|
+
### SWC プラグイン (`@intlayer/swc`)
|
|
232
|
+
|
|
233
|
+
Next.js ユーザーも**これらを直接設定することはありません**。**v9.2.1** 以降、`next.config.ts` の `withIntlayer()` が `build.purge` と `build.minify` フラグだけを元に、パージ・ミニファイ・インポート書き換えというパイプライン全体を実行します。
|
|
234
|
+
|
|
235
|
+
SWC の Wasm プラグインは一度に 1 ファイルしか変換できず、ファイルシステムにアクセスできないため、処理は 2 つに分かれています:
|
|
236
|
+
|
|
237
|
+
| パス | 実行場所 | 処理内容 |
|
|
238
|
+
| :------------------------------------------ | :---------------------------- | :--------------------------------------------------------------------------------------------------------------- |
|
|
239
|
+
| 使用状況の解析 + JSON のパージ/ミニファイ | Node、`withIntlayer()` の内部 | すべてのコンポーネントのソースファイルを読み取り、`.intlayer/**/*.json` を書き換え、リネームテーブルを生成します |
|
|
240
|
+
| ソースの書き換え (`content.title` → `.a`) | `@intlayer/swc` (Wasm) | リネームテーブルをコード内の該当するプロパティアクセスに適用します |
|
|
241
|
+
| インポートの書き換え (`useIntlayer` → dict) | `@intlayer/swc` (Wasm) | `intlayerOptimizeBabelPlugin` と同じ |
|
|
242
|
+
|
|
243
|
+
_どの_ フィールドが未使用か、そして各フィールドが _どの_ エイリアスを受け取るかを決定するには、ファイル横断の状態とファイル I/O が必要です。そのためこの半分は Node 上で実行され、SWC プラグインは生成されたテーブルだけを受け取ります。
|
|
244
|
+
|
|
223
245
|
## プラットフォーム別の設定
|
|
224
246
|
|
|
225
247
|
<Tabs>
|
|
@@ -227,10 +249,12 @@ Viteユーザーは**これらを直接設定することはありません**。
|
|
|
227
249
|
|
|
228
250
|
### Next.js
|
|
229
251
|
|
|
230
|
-
Next.jsはビルドにSWC
|
|
252
|
+
Next.js はビルドに SWC を使用するため、`@intlayer/swc` プラグインが必要です。**v9.2.1** 以降、このパッケージ 1 つでパイプライン全体 — 最適化(インポート書き換え)、パージ、ミニファイ — をカバーします。
|
|
231
253
|
|
|
232
254
|
> SWCプラグインはNext.jsではまだ実験的であるため、このプラグインはデフォルトではインストールされません。将来的に変更される可能性があります。
|
|
233
255
|
|
|
256
|
+
> **Next.js 16.1.0 が最小バージョンです。** SWC の前方互換な Wasm プラグイン ABI 上に構築された最初のリリースであり、それ以前のリリースはプラグインを拒否します。`withIntlayer` はプロジェクトの Next.js バージョンを読み取り、16.1.0 未満ではプラグインを登録しません — それらのビルドは引き続き成功し、単にバンドル最適化なしで実行されます。
|
|
257
|
+
|
|
234
258
|
<Tabs>
|
|
235
259
|
<Tab value="npm">
|
|
236
260
|
|
|
@@ -265,33 +289,40 @@ intlayer-swc-plugin = "*"
|
|
|
265
289
|
|
|
266
290
|
インストールされると、Intlayerはプラグインを自動的に検出して使用します。
|
|
267
291
|
|
|
268
|
-
|
|
292
|
+
**パージとミニファイ**のパス(フィールドの削除とリネーム)には、追加パッケージも `babel.config.js` も不要です。設定を `withIntlayer` でラップし、`intlayer.config.ts` でフラグを有効にしてください:
|
|
269
293
|
|
|
270
|
-
```
|
|
271
|
-
|
|
294
|
+
```typescript fileName="next.config.ts"
|
|
295
|
+
import { withIntlayer } from "next-intlayer/server";
|
|
296
|
+
import type { NextConfig } from "next";
|
|
297
|
+
|
|
298
|
+
const nextConfig: NextConfig = {/* あなたの設定 */};
|
|
299
|
+
|
|
300
|
+
export default withIntlayer(nextConfig);
|
|
272
301
|
```
|
|
273
302
|
|
|
274
|
-
```
|
|
275
|
-
|
|
276
|
-
intlayerPurgeBabelPlugin,
|
|
277
|
-
intlayerMinifyBabelPlugin,
|
|
278
|
-
getPurgePluginOptions,
|
|
279
|
-
getMinifyPluginOptions,
|
|
280
|
-
} = require("@intlayer/babel");
|
|
303
|
+
```typescript fileName="intlayer.config.ts"
|
|
304
|
+
import type { IntlayerConfig } from "intlayer";
|
|
281
305
|
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
// Minify: JSON + ソースコード内のコンテンツフィールドキーの名前を変更します
|
|
288
|
-
[intlayerMinifyBabelPlugin, getMinifyPluginOptions()],
|
|
289
|
-
// 注意: @intlayer/swc が useIntlayer → useDictionary の書き換えを処理するため、
|
|
290
|
-
// intlayerOptimizeBabelPluginはここでは不要です。
|
|
291
|
-
],
|
|
306
|
+
const config: IntlayerConfig = {
|
|
307
|
+
build: {
|
|
308
|
+
purge: true, // バンドルされた JSON から未使用のコンテンツフィールドを削除します
|
|
309
|
+
minify: true, // コンテンツフィールドのキーを短いエイリアスにリネームします
|
|
310
|
+
},
|
|
292
311
|
};
|
|
312
|
+
|
|
313
|
+
export default config;
|
|
293
314
|
```
|
|
294
315
|
|
|
316
|
+
`next build` の実行中、`withIntlayer` はソースを解析し、コンパイル済み辞書を書き換え、生成されたフィールドのリネームテーブルを `@intlayer/swc` に渡します。プラグインはコード内の該当するプロパティアクセスを更新します。
|
|
317
|
+
|
|
318
|
+
> `withIntlayerSync` ではなく、非同期の `withIntlayer` を使用してください。同期版は解析パイプラインを実行しないため、パージとミニファイは効果がありません。
|
|
319
|
+
|
|
320
|
+
> パージとミニファイは `next build` 時にのみ実行されます — 最適化パイプラインは `next dev` 中は無効です。
|
|
321
|
+
|
|
322
|
+
> 互換アダプターの呼び出し元が設定されている場合(`swcExtraCallers`。`@intlayer/next-intl` や `@intlayer/react-i18next` などの互換パッケージが設定します)も無効になります。これらの呼び出し箇所は使用状況アナライザーから見えないため、パージするとコードがまだ読んでいるフィールドを削除してしまいます。インポートの書き換えは有効なままです。
|
|
323
|
+
|
|
324
|
+
**それ以前のバージョン(9.2.1 より前)** では `@intlayer/babel` と、`intlayerPurgeBabelPlugin` および `intlayerMinifyBabelPlugin` を宣言する `babel.config.js` が必要でした。このファイルはもう不要で、削除できます。
|
|
325
|
+
|
|
295
326
|
</Tab>
|
|
296
327
|
<Tab value="vite">
|
|
297
328
|
|
|
@@ -447,6 +478,8 @@ export default config;
|
|
|
447
478
|
|
|
448
479
|
> `optimize` が `false` の場合、または `editor.enabled` が `true` の場合(ビジュアルエディタでは編集を可能にするために元のフィールド名が必要なため)、最小化はスキップされます。
|
|
449
480
|
|
|
481
|
+
> Next.js では、`@intlayer/swc` がインストールされていない、または読み込めない場合(16.1.0 未満の Next.js)にもミニファイはスキップされます。ソース側のアクセスを書き換えるのはこのプラグインなので、これなしで辞書をリネームすると、コードが存在しないフィールド名を読むことになります。
|
|
482
|
+
|
|
450
483
|
> `importMode: 'fetch'` 経由で読み込まれた辞書の場合も最小化はスキップされます。これは、そのJSONが元のフィールド名を使用してリモートAPIから提供されるためであり、クライアント側のキーの名前を変更するとサーバー/クライアントの規約が壊れるためです。
|
|
451
484
|
|
|
452
485
|
### パージ(Purging - 未使用フィールドの削除)
|
|
@@ -475,7 +508,7 @@ export default config;
|
|
|
475
508
|
{ "title": "…", "subtitle": "…" }
|
|
476
509
|
```
|
|
477
510
|
|
|
478
|
-
> `optimize` が `false` の場合、または `editor.enabled` が `true` の場合、パージはスキップされます。
|
|
511
|
+
> `optimize` が `false` の場合、または `editor.enabled` が `true` の場合、パージはスキップされます。 Next.js では、さらに `@intlayer/swc` が利用できない場合、および互換アダプターの呼び出し元が設定されている場合にもスキップされます。
|
|
479
512
|
|
|
480
513
|
> ソースファイルが解析できない場合、または `useIntlayer` の結果が変数に割り当てられ、静的アナライザーが追跡できない方法(例:オブジェクトへのスプレッド、分割代入せずにプロップとして渡すなど)で渡された場合も、パージは保守的にスキップされます。このような場合は、完全な辞書が保持されます。
|
|
481
514
|
|
package/docs/ja/configuration.md
CHANGED
|
@@ -404,7 +404,7 @@ const config: IntlayerConfig = {
|
|
|
404
404
|
ai: {
|
|
405
405
|
/**
|
|
406
406
|
* 使用する AI プロバイダー。
|
|
407
|
-
* オプション: 'openai', 'anthropic', 'mistral', 'deepseek', 'gemini', 'ollama', 'openrouter', 'alibaba', 'fireworks', 'groq', 'huggingface', 'bedrock', 'googlevertex', 'togetherai', 'lmstudio'
|
|
407
|
+
* オプション: 'openai', 'anthropic', 'mistral', 'deepseek', 'gemini', 'ollama', 'openrouter', 'alibaba', 'fireworks', 'groq', 'huggingface', 'bedrock', 'googlevertex', 'togetherai', 'lmstudio', 'moonshotai'
|
|
408
408
|
* デフォルト: 'openai'
|
|
409
409
|
*/
|
|
410
410
|
provider: "openai",
|
|
@@ -1032,15 +1032,15 @@ Intlayer は、柔軟性を最大限に高めるために複数の AI プロバ
|
|
|
1032
1032
|
- **Together.ai**
|
|
1033
1033
|
- **LM Studio**
|
|
1034
1034
|
|
|
1035
|
-
| フィールド | 説明 | 型
|
|
1036
|
-
| -------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------ |
|
|
1037
|
-
| `provider` | Intlayer の AI 機能に使用するプロバイダー。 | `'openai'` | <br/> `'anthropic'` | <br/> `'mistral'` | <br/> `'deepseek'` | <br/> `'gemini'` | <br/> `'ollama'` | <br/> `'openrouter'` | <br/> `'alibaba'` | <br/> `'fireworks'` | <br/> `'groq'` | <br/> `'huggingface'` | <br/> `'bedrock'` | <br/> `'googleaistudio'` | <br/> `'googlevertex'` | <br/> `'togetherai'` | <br/> `'lmstudio'` | `undefined` | `'anthropic'` | プロバイダーによって、必要な API キーや価格が異なります。 |
|
|
1038
|
-
| `model` | AI 機能に使用するモデル。 | `string`
|
|
1039
|
-
| `temperature` | AI の応答のランダム性を制御します。 | `number`
|
|
1040
|
-
| `apiKey` | 選択したプロバイダーの API キー。 | `string`
|
|
1041
|
-
| `applicationContext` | AI がより正確な翻訳を生成できるようにするための、アプリケーションに関する追加のコンテキスト (ドメイン、ターゲットオーディエンス、トーン、用語)。 | `string`
|
|
1042
|
-
| `baseURL` | AI API のベース URL。 | `string`
|
|
1043
|
-
| `dataSerialization` | AI 機能のデータシリアライゼーション形式。 | `'json'` | <br/> `'toon'`
|
|
1035
|
+
| フィールド | 説明 | 型 | デフォルト | 例 | 備考 |
|
|
1036
|
+
| -------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------- | ------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
1037
|
+
| `provider` | Intlayer の AI 機能に使用するプロバイダー。 | `'openai'` | <br/> `'anthropic'` | <br/> `'mistral'` | <br/> `'deepseek'` | <br/> `'gemini'` | <br/> `'ollama'` | <br/> `'openrouter'` | <br/> `'alibaba'` | <br/> `'fireworks'` | <br/> `'groq'` | <br/> `'huggingface'` | <br/> `'bedrock'` | <br/> `'googleaistudio'` | <br/> `'googlevertex'` | <br/> `'togetherai'` | <br/> `'lmstudio'` | <br/> `'moonshotai'` | `undefined` | `'anthropic'` | プロバイダーによって、必要な API キーや価格が異なります。 |
|
|
1038
|
+
| `model` | AI 機能に使用するモデル。 | `string` | なし | `'gpt-4o-2024-11-20'` | 特定のモデルはプロバイダーによって異なります。 |
|
|
1039
|
+
| `temperature` | AI の応答のランダム性を制御します。 | `number` | なし | `0.1` | 温度が高いほど、創造的で予測しにくくなります。 |
|
|
1040
|
+
| `apiKey` | 選択したプロバイダーの API キー。 | `string` | なし | `process.env.OPENAI_API_KEY` | 秘密にする必要があるため、環境変数に保存してください。 |
|
|
1041
|
+
| `applicationContext` | AI がより正確な翻訳を生成できるようにするための、アプリケーションに関する追加のコンテキスト (ドメイン、ターゲットオーディエンス、トーン、用語)。 | `string` | なし | `'旅行予約アプリのコンテキスト'` | ルールを追加するためにも使用できます (例: `"URL を変換しないでください"`)。 |
|
|
1042
|
+
| `baseURL` | AI API のベース URL。 | `string` | なし | `'https://api.openai.com/v1'` <br/> `'http://localhost:5000'` | ローカルまたはカスタムの AI API エンドポイントを指すことができます。 |
|
|
1043
|
+
| `dataSerialization` | AI 機能のデータシリアライゼーション形式。 | `'json'` | <br/> `'toon'` | `undefined` | `'toon'` | • `'json'`: デフォルト、信頼性が高いがトークン消費が多い。<br/>• `'toon'`: トークン消費が少ないが、一貫性に欠ける。<br/>• 推論の努力 (reasoning effort) などの追加パラメータがコンテキストとしてモデルに渡されます。 |
|
|
1044
1044
|
|
|
1045
1045
|
---
|
|
1046
1046
|
|
|
@@ -188,7 +188,7 @@ export const ComponentExample = () => {
|
|
|
188
188
|
このアプローチにより、以下のことが可能になります:
|
|
189
189
|
|
|
190
190
|
1. **開発スピードの向上**
|
|
191
|
-
- `.content.{
|
|
191
|
+
- `.content.{ts|js|mjs|cjs|json|tsx|jsx|md|mdx|yaml|yml}`ファイルはVSCode拡張機能を使用して作成できます
|
|
192
192
|
- IDEのAI補完ツール(GitHub Copilotなど)がコンテンツの宣言を支援し、コピー&ペーストを削減します
|
|
193
193
|
|
|
194
194
|
2. **コードベースのクリーンアップ**
|
|
@@ -212,27 +212,27 @@ export const ComponentExample = () => {
|
|
|
212
212
|
|
|
213
213
|
## Intlayerの追加機能
|
|
214
214
|
|
|
215
|
-
| 機能 | 説明
|
|
216
|
-
| ------------------------------------------------------------------------------------------------------------------------- |
|
|
217
|
-
|  | **クロスフレームワークサポート**<br><br>Intlayerは、Next.js、React、Vite、Vue.js、Nuxt、Preact、Expressなど、すべての主要なフレームワークやライブラリと互換性があります。
|
|
218
|
-
|  | **JavaScriptによるコンテンツ管理**<br><br>JavaScriptの柔軟性を活かして、コンテンツを効率的に定義および管理します。<br><br> - [コンテンツ宣言](https://intlayer.org/doc/concept/content)
|
|
219
|
-
| <img src="https://github.com/aymericzip/intlayer/blob/main/docs/assets/compiler.jpg?raw=true" alt="Feature" width="700"> | **コンパイラ**<br><br>Intlayerコンパイラは、コンポーネントからコンテンツを自動的に抽出し、辞書ファイルを生成します。<br><br> - [コンパイラ](https://intlayer.org/doc/compiler)
|
|
220
|
-
|  | **ロケールごとのコンテンツ宣言ファイル**<br><br>自動生成の前にコンテンツを一度宣言するだけで、開発速度を向上させます。<br><br> - [ロケールごとのコンテンツ宣言ファイル](https://intlayer.org/doc/concept/per-locale-file)
|
|
221
|
-
|  | **型安全な環境**<br><br>TypeScriptを活用して、コンテンツ定義とコードにエラーがないことを保証し、IDEの自動補完も享受できます。<br><br> - [TypeScript設定](https://intlayer.org/doc/environment/vite-and-react#configure-typescript)
|
|
222
|
-
|  | **シンプルなセットアップ**<br><br>最小限の設定で迅速に稼働させることができます。国際化、ルーティング、AI、ビルド、コンテンツ処理の設定を簡単に調整できます。<br><br> - [Next.js統合の探索](https://intlayer.org/doc/environment/nextjs)
|
|
223
|
-
|  | **シンプルなコンテンツ取得**<br><br>コンテンツの各部分で`t`関数を呼び出す必要はありません。単一のフックを使用して、すべてのコンテンツを直接取得できます。<br><br> - [React統合](https://intlayer.org/doc/environment/create-react-app)
|
|
224
|
-
|  | **一貫したサーバーコンポーネントの実装**<br><br>Next.jsサーバーコンポーネントに最適で、クライアントコンポーネントとサーバーコンポーネントの両方で同じ実装を使用でき、各サーバーコンポーネントで`t`関数を渡す必要はありません。<br><br> - [サーバーコンポーネント](https://intlayer.org/doc/environment/nextjs#step-7-utilize-content-in-your-code)
|
|
225
|
-
|  | **整理されたコードベース**<br><br>コードベースを整理された状態に保ちます:同じフォルダ内に1コンポーネント=1辞書。それぞれのコンポーネントの近くに翻訳を配置することで、メンテナンス性と明瞭性が向上します。<br><br> - [Intlayerの仕組み](https://intlayer.org/doc/concept/how-works-intlayer)
|
|
226
|
-
|  | **強化されたルーティング**<br><br>アプリルーティングの完全なサポート。Next.js、React、Vite、Vue.jsなどの複雑なアプリケーション構造にシームレスに適応します。<br><br> - [Next.js統合の探索](https://intlayer.org/doc/environment/nextjs)
|
|
227
|
-
|  | **Markdownサポート**<br><br>プライバシーポリシーやドキュメントなどの多言語コンテンツのために、ローカルファイルやリモートのMarkdownをインポートして解釈します。コード内でMarkdownメタデータを解釈し、アクセス可能にします。<br><br> - [コンテンツファイル](https://intlayer.org/doc/concept/content/file)
|
|
228
|
-
|  | **無料のビジュアルエディタとCMS**<br><br>コンテンツライター向けに無料のビジュアルエディタとCMSが利用可能で、ローカリゼーションプラットフォームの必要性を排除します。Gitを使用してコンテンツを同期させるか、CMSで部分的または完全に外部管理します。<br><br> - [Intlayerエディタ](https://intlayer.org/doc/concept/editor) <br> - [Intlayer CMS](https://intlayer.org/doc/concept/cms)
|
|
229
|
-
|  | **Tree-shakableコンテンツ**<br><br>最終バンドルのサイズを削減するTree-shakableコンテンツ。コンポーネントごとにコンテンツを読み込み、未使用のコンテンツをバンドルから除外します。アプリの読み込み効率を高めるための遅延読み込み(lazy loading)をサポートします。<br><br> - [アプリビルドの最適化](https://intlayer.org/doc/concept/how-works-intlayer#app-build-optimization)
|
|
230
|
-
|  | **静的レンダリング**<br><br>静的レンダリングをブロックしません。<br><br> - [Next.js統合](https://intlayer.org/doc/environment/nextjs)
|
|
231
|
-
|  | **AI支援の翻訳**<br><br>独自のAIプロバイダー/APIキーを使用し、Intlayerの高度なAI翻訳ツールを使用してワンクリックでウェブサイトを231言語に翻訳します。<br><br> - [CI/CD統合](https://intlayer.org/doc/concept/ci-cd) <br> - [Intlayer CLI](https://intlayer.org/doc/concept/cli) <br> - [自動入力](https://intlayer.org/doc/concept/auto-fill)
|
|
232
|
-
|  | **MCPサーバー統合**<br><br>IDE自動化のためのMCP(Model Context Protocol)サーバーを提供し、開発環境内で直接シームレスなコンテンツ管理とi18nワークフローを可能にします。<br><br> - [MCPサーバー](https://github.com/aymericzip/intlayer/blob/main/docs/ja/mcp_server.md)
|
|
233
|
-
|  | **VSCode拡張機能**<br><br>Intlayerは、コンテンツや翻訳の管理、辞書の作成、コンテンツの翻訳などを支援するVSCode拡張機能を提供します。<br><br> - [VSCode拡張機能](https://intlayer.org/doc/vs-code-extension)
|
|
234
|
-
|  | **相互運用性**<br><br>react-i18next、next-i18next、next-intl、およびreact-intlとの相互運用を可能にします。<br><br> - [Intlayerとreact-intl](https://intlayer.org/blog/intlayer-with-react-intl) <br> - [Intlayerとnext-intl](https://intlayer.org/blog/intlayer-with-next-intl) <br> - [Intlayerとnext-i18next](https://intlayer.org/blog/intlayer-with-next-i18next)
|
|
235
|
-
| 翻訳漏れのテスト(CLI/CI) | ✅ CLI: npx intlayer content test(CIフレンドリーな監査)
|
|
215
|
+
| 機能 | 説明 |
|
|
216
|
+
| ------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
|
|
217
|
+
|  | **クロスフレームワークサポート**<br><br>Intlayerは、Next.js、React、Vite、Vue.js、Nuxt、Preact、Expressなど、すべての主要なフレームワークやライブラリと互換性があります。 |
|
|
218
|
+
|  | **JavaScriptによるコンテンツ管理**<br><br>JavaScriptの柔軟性を活かして、コンテンツを効率的に定義および管理します。<br><br> - [コンテンツ宣言](https://intlayer.org/doc/concept/content) |
|
|
219
|
+
| <img src="https://github.com/aymericzip/intlayer/blob/main/docs/assets/compiler.jpg?raw=true" alt="Feature" width="700"> | **コンパイラ**<br><br>Intlayerコンパイラは、コンポーネントからコンテンツを自動的に抽出し、辞書ファイルを生成します。<br><br> - [コンパイラ](https://intlayer.org/doc/compiler) |
|
|
220
|
+
|  | **ロケールごとのコンテンツ宣言ファイル**<br><br>自動生成の前にコンテンツを一度宣言するだけで、開発速度を向上させます。<br><br> - [ロケールごとのコンテンツ宣言ファイル](https://intlayer.org/doc/concept/per-locale-file) |
|
|
221
|
+
|  | **型安全な環境**<br><br>TypeScriptを活用して、コンテンツ定義とコードにエラーがないことを保証し、IDEの自動補完も享受できます。<br><br> - [TypeScript設定](https://intlayer.org/doc/environment/vite-and-react#configure-typescript) |
|
|
222
|
+
|  | **シンプルなセットアップ**<br><br>最小限の設定で迅速に稼働させることができます。国際化、ルーティング、AI、ビルド、コンテンツ処理の設定を簡単に調整できます。<br><br> - [Next.js統合の探索](https://intlayer.org/doc/environment/nextjs) |
|
|
223
|
+
|  | **シンプルなコンテンツ取得**<br><br>コンテンツの各部分で`t`関数を呼び出す必要はありません。単一のフックを使用して、すべてのコンテンツを直接取得できます。<br><br> - [React統合](https://intlayer.org/doc/environment/create-react-app) |
|
|
224
|
+
|  | **一貫したサーバーコンポーネントの実装**<br><br>Next.jsサーバーコンポーネントに最適で、クライアントコンポーネントとサーバーコンポーネントの両方で同じ実装を使用でき、各サーバーコンポーネントで`t`関数を渡す必要はありません。<br><br> - [サーバーコンポーネント](https://intlayer.org/doc/environment/nextjs#step-7-utilize-content-in-your-code) |
|
|
225
|
+
|  | **整理されたコードベース**<br><br>コードベースを整理された状態に保ちます:同じフォルダ内に1コンポーネント=1辞書。それぞれのコンポーネントの近くに翻訳を配置することで、メンテナンス性と明瞭性が向上します。<br><br> - [Intlayerの仕組み](https://intlayer.org/doc/concept/how-works-intlayer) |
|
|
226
|
+
|  | **強化されたルーティング**<br><br>アプリルーティングの完全なサポート。Next.js、React、Vite、Vue.jsなどの複雑なアプリケーション構造にシームレスに適応します。<br><br> - [Next.js統合の探索](https://intlayer.org/doc/environment/nextjs) |
|
|
227
|
+
|  | **Markdownサポート**<br><br>プライバシーポリシーやドキュメントなどの多言語コンテンツのために、ローカルファイルやリモートのMarkdownをインポートして解釈します。コード内でMarkdownメタデータを解釈し、アクセス可能にします。<br><br> - [コンテンツファイル](https://intlayer.org/doc/concept/content/file) |
|
|
228
|
+
|  | **無料のビジュアルエディタとCMS**<br><br>コンテンツライター向けに無料のビジュアルエディタとCMSが利用可能で、ローカリゼーションプラットフォームの必要性を排除します。Gitを使用してコンテンツを同期させるか、CMSで部分的または完全に外部管理します。<br><br> - [Intlayerエディタ](https://intlayer.org/doc/concept/editor) <br> - [Intlayer CMS](https://intlayer.org/doc/concept/cms) |
|
|
229
|
+
|  | **Tree-shakableコンテンツ**<br><br>最終バンドルのサイズを削減するTree-shakableコンテンツ。コンポーネントごとにコンテンツを読み込み、未使用のコンテンツをバンドルから除外します。アプリの読み込み効率を高めるための遅延読み込み(lazy loading)をサポートします。<br><br> - [アプリビルドの最適化](https://intlayer.org/doc/concept/how-works-intlayer#app-build-optimization) |
|
|
230
|
+
|  | **静的レンダリング**<br><br>静的レンダリングをブロックしません。<br><br> - [Next.js統合](https://intlayer.org/doc/environment/nextjs) |
|
|
231
|
+
|  | **AI支援の翻訳**<br><br>独自のAIプロバイダー/APIキーを使用し、Intlayerの高度なAI翻訳ツールを使用してワンクリックでウェブサイトを231言語に翻訳します。<br><br> - [CI/CD統合](https://intlayer.org/doc/concept/ci-cd) <br> - [Intlayer CLI](https://intlayer.org/doc/concept/cli) <br> - [自動入力](https://intlayer.org/doc/concept/auto-fill) |
|
|
232
|
+
|  | **MCPサーバー統合**<br><br>IDE自動化のためのMCP(Model Context Protocol)サーバーを提供し、開発環境内で直接シームレスなコンテンツ管理とi18nワークフローを可能にします。<br><br> - [MCPサーバー](https://github.com/aymericzip/intlayer/blob/main/docs/ja/mcp_server.md) |
|
|
233
|
+
|  | **VSCode拡張機能**<br><br>Intlayerは、コンテンツや翻訳の管理、辞書の作成、コンテンツの翻訳などを支援するVSCode拡張機能を提供します。<br><br> - [VSCode拡張機能](https://intlayer.org/doc/vs-code-extension) |
|
|
234
|
+
|  | **相互運用性**<br><br>react-i18next、next-i18next、next-intl、およびreact-intlとの相互運用を可能にします。<br><br> - [Intlayerとreact-intl](https://intlayer.org/blog/intlayer-with-react-intl) <br> - [Intlayerとnext-intl](https://intlayer.org/blog/intlayer-with-next-intl) <br> - [Intlayerとnext-i18next](https://intlayer.org/blog/intlayer-with-next-i18next) <br> - [Intlayer の互換アダプター](https://intlayer.org/doc/compatibility) |
|
|
235
|
+
| 翻訳漏れのテスト(CLI/CI) | ✅ CLI: npx intlayer content test(CIフレンドリーな監査) |
|
|
236
236
|
|
|
237
237
|
## Intlayerと他のソリューションの比較
|
|
238
238
|
|
|
@@ -271,3 +271,5 @@ GitHubスター数は、プロジェクトの知名度、コミュニティか
|
|
|
271
271
|
`intlayer`は、`react-intl`、`react-i18next`、`next-intl`、`next-i18next`、`vue-i18n`の名前空間の管理にも役立ちます。
|
|
272
272
|
|
|
273
273
|
`intlayer`を使用すると、お気に入りのi18nライブラリの形式でコンテンツを宣言でき、intlayerは任意の場所に名前空間を生成します(例:`/messages/{{locale}}/{{namespace}}.json`)。
|
|
274
|
+
|
|
275
|
+
現在の i18n ライブラリの API を使い続けたい場合、`intlayer` は **互換アダプター(compat adapters)** も提供しています。これは `react-i18next`、`next-intl`、`react-intl`、`vue-i18n` などとまったく同じ API を公開しつつ、内容は Intlayer の辞書から提供されるパッケージです。これにより、コードを書き直すことなく段階的に移行できます。[互換アダプターのドキュメント](https://github.com/aymericzip/intlayer/blob/main/docs/docs/en/compat/index.md)をご覧ください。
|
|
@@ -237,19 +237,21 @@ import {
|
|
|
237
237
|
HeadContent,
|
|
238
238
|
Scripts,
|
|
239
239
|
createRootRouteWithContext,
|
|
240
|
+
getRouteApi,
|
|
240
241
|
} from "@tanstack/solid-router";
|
|
241
242
|
import { HydrationScript } from "solid-js/web";
|
|
242
243
|
import { Suspense, type ParentComponent } from "solid-js";
|
|
243
244
|
import { IntlayerProvider } from "solid-intlayer";
|
|
244
245
|
import { defaultLocale, getHTMLTextDir } from "intlayer";
|
|
245
|
-
|
|
246
|
+
|
|
247
|
+
const localeRoute = getRouteApi("/{-$locale}");
|
|
246
248
|
|
|
247
249
|
export const Route = createRootRouteWithContext()({
|
|
248
250
|
shellComponent: RootComponent,
|
|
249
251
|
});
|
|
250
252
|
|
|
251
253
|
const RootComponent: ParentComponent = (props) => {
|
|
252
|
-
const params =
|
|
254
|
+
const params = localeRoute.useParams();
|
|
253
255
|
const locale = params()?.locale ?? defaultLocale;
|
|
254
256
|
|
|
255
257
|
return (
|
|
@@ -534,7 +536,7 @@ export default LocaleSwitcher;
|
|
|
534
536
|
|
|
535
537
|
```tsx fileName="src/routes/__root.tsx"
|
|
536
538
|
const RootComponent: ParentComponent = (props) => {
|
|
537
|
-
const params =
|
|
539
|
+
const params = localeRoute.useParams();
|
|
538
540
|
const locale = params()?.locale ?? defaultLocale;
|
|
539
541
|
|
|
540
542
|
return (
|
|
@@ -257,13 +257,15 @@ export default config;
|
|
|
257
257
|
```tsx fileName="src/routes/__root.tsx"
|
|
258
258
|
import {
|
|
259
259
|
createRootRouteWithContext,
|
|
260
|
+
getRouteApi,
|
|
260
261
|
HeadContent,
|
|
261
262
|
Scripts,
|
|
262
263
|
} from "@tanstack/react-router";
|
|
263
264
|
import { defaultLocale, getHTMLTextDir } from "intlayer";
|
|
264
265
|
import { type ReactNode } from "react";
|
|
265
266
|
import { IntlayerProvider } from "react-intlayer";
|
|
266
|
-
|
|
267
|
+
|
|
268
|
+
const localeRoute = getRouteApi("/{-$locale}");
|
|
267
269
|
|
|
268
270
|
export const Route = createRootRouteWithContext<{}>()({
|
|
269
271
|
head: () => ({
|
|
@@ -285,7 +287,7 @@ export const Route = createRootRouteWithContext<{}>()({
|
|
|
285
287
|
});
|
|
286
288
|
|
|
287
289
|
function RootDocument({ children }: { children: ReactNode }) {
|
|
288
|
-
const params =
|
|
290
|
+
const params = localeRoute.useParams();
|
|
289
291
|
const locale = params?.locale ?? defaultLocale;
|
|
290
292
|
|
|
291
293
|
return (
|
|
@@ -659,7 +661,7 @@ export const LocaleSwitcher: FC = () => {
|
|
|
659
661
|
|
|
660
662
|
```tsx fileName="src/routes/__root.tsx"
|
|
661
663
|
function RootDocument({ children }: { children: ReactNode }) {
|
|
662
|
-
const params =
|
|
664
|
+
const params = localeRoute.useParams();
|
|
663
665
|
const locale = params?.locale ?? defaultLocale;
|
|
664
666
|
|
|
665
667
|
return (
|