@intlayer/docs 8.3.0-canary.4 → 8.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.
Files changed (240) hide show
  1. package/docs/ar/compiler.md +84 -49
  2. package/docs/ar/configuration.md +80 -37
  3. package/docs/ar/intlayer_with_nextjs_16.md +174 -1
  4. package/docs/ar/intlayer_with_nextjs_compiler.md +174 -1
  5. package/docs/ar/intlayer_with_react_router_v7.md +224 -1
  6. package/docs/ar/intlayer_with_react_router_v7_fs_routes.md +225 -1
  7. package/docs/ar/intlayer_with_svelte_kit.md +175 -2
  8. package/docs/ar/intlayer_with_tanstack.md +176 -1
  9. package/docs/ar/intlayer_with_vite+preact.md +174 -1
  10. package/docs/ar/intlayer_with_vite+react.md +174 -1
  11. package/docs/ar/intlayer_with_vite+solid.md +174 -1
  12. package/docs/ar/intlayer_with_vite+svelte.md +174 -1
  13. package/docs/ar/intlayer_with_vite+vue.md +174 -1
  14. package/docs/de/compiler.md +83 -48
  15. package/docs/de/configuration.md +434 -212
  16. package/docs/de/intlayer_with_nextjs_16.md +176 -1
  17. package/docs/de/intlayer_with_nextjs_compiler.md +106 -349
  18. package/docs/de/intlayer_with_react_router_v7.md +225 -2
  19. package/docs/de/intlayer_with_react_router_v7_fs_routes.md +221 -79
  20. package/docs/de/intlayer_with_svelte_kit.md +158 -2
  21. package/docs/de/intlayer_with_tanstack.md +159 -1
  22. package/docs/de/intlayer_with_vite+preact.md +157 -1
  23. package/docs/de/intlayer_with_vite+react.md +157 -1
  24. package/docs/de/intlayer_with_vite+solid.md +159 -3
  25. package/docs/de/intlayer_with_vite+svelte.md +157 -1
  26. package/docs/de/intlayer_with_vite+vue.md +157 -1
  27. package/docs/en/compiler.md +60 -33
  28. package/docs/en/configuration.md +80 -57
  29. package/docs/en/intlayer_with_nextjs_16.md +176 -0
  30. package/docs/en/intlayer_with_nextjs_compiler.md +179 -1
  31. package/docs/en/intlayer_with_react_router_v7.md +159 -0
  32. package/docs/en/intlayer_with_react_router_v7_fs_routes.md +159 -0
  33. package/docs/en/intlayer_with_svelte_kit.md +159 -0
  34. package/docs/en/intlayer_with_tanstack.md +160 -1
  35. package/docs/en/intlayer_with_vite+preact.md +159 -0
  36. package/docs/en/intlayer_with_vite+react.md +159 -0
  37. package/docs/en/intlayer_with_vite+solid.md +148 -27
  38. package/docs/en/intlayer_with_vite+svelte.md +159 -0
  39. package/docs/en/intlayer_with_vite+vue.md +142 -41
  40. package/docs/en-GB/compiler.md +66 -34
  41. package/docs/en-GB/configuration.md +78 -36
  42. package/docs/es/compiler.md +83 -48
  43. package/docs/es/configuration.md +429 -206
  44. package/docs/es/intlayer_with_adonisjs.md +1 -1
  45. package/docs/es/intlayer_with_express.md +1 -1
  46. package/docs/es/intlayer_with_fastify.md +1 -1
  47. package/docs/es/intlayer_with_hono.md +1 -1
  48. package/docs/es/intlayer_with_nestjs.md +1 -1
  49. package/docs/es/intlayer_with_nextjs_16.md +176 -3
  50. package/docs/es/intlayer_with_nextjs_compiler.md +175 -2
  51. package/docs/es/intlayer_with_nuxt.md +1 -1
  52. package/docs/es/intlayer_with_react_router_v7.md +227 -4
  53. package/docs/es/intlayer_with_react_router_v7_fs_routes.md +162 -4
  54. package/docs/es/intlayer_with_svelte_kit.md +158 -2
  55. package/docs/es/intlayer_with_tanstack.md +160 -2
  56. package/docs/es/intlayer_with_vite+preact.md +162 -6
  57. package/docs/es/intlayer_with_vite+react.md +160 -4
  58. package/docs/es/intlayer_with_vite+solid.md +163 -7
  59. package/docs/es/intlayer_with_vite+svelte.md +157 -1
  60. package/docs/es/intlayer_with_vite+vue.md +165 -9
  61. package/docs/fr/compiler.md +81 -46
  62. package/docs/fr/configuration.md +355 -134
  63. package/docs/fr/intlayer_with_adonisjs.md +1 -1
  64. package/docs/fr/intlayer_with_express.md +1 -1
  65. package/docs/fr/intlayer_with_fastify.md +1 -1
  66. package/docs/fr/intlayer_with_hono.md +1 -1
  67. package/docs/fr/intlayer_with_nestjs.md +1 -1
  68. package/docs/fr/intlayer_with_nextjs_16.md +183 -7
  69. package/docs/fr/intlayer_with_nextjs_compiler.md +179 -3
  70. package/docs/fr/intlayer_with_react_router_v7.md +229 -3
  71. package/docs/fr/intlayer_with_react_router_v7_fs_routes.md +237 -6
  72. package/docs/fr/intlayer_with_svelte_kit.md +158 -2
  73. package/docs/fr/intlayer_with_tanstack.md +159 -1
  74. package/docs/fr/intlayer_with_vite+preact.md +164 -8
  75. package/docs/fr/intlayer_with_vite+react.md +162 -6
  76. package/docs/fr/intlayer_with_vite+solid.md +163 -7
  77. package/docs/fr/intlayer_with_vite+svelte.md +157 -1
  78. package/docs/fr/intlayer_with_vite+vue.md +164 -8
  79. package/docs/hi/compiler.md +81 -46
  80. package/docs/hi/configuration.md +87 -44
  81. package/docs/hi/intlayer_with_nextjs_16.md +174 -1
  82. package/docs/hi/intlayer_with_nextjs_compiler.md +174 -1
  83. package/docs/hi/intlayer_with_react_router_v7.md +224 -1
  84. package/docs/hi/intlayer_with_react_router_v7_fs_routes.md +225 -1
  85. package/docs/hi/intlayer_with_svelte_kit.md +158 -2
  86. package/docs/hi/intlayer_with_tanstack.md +159 -1
  87. package/docs/hi/intlayer_with_vite+preact.md +157 -1
  88. package/docs/hi/intlayer_with_vite+react.md +157 -1
  89. package/docs/hi/intlayer_with_vite+solid.md +157 -1
  90. package/docs/hi/intlayer_with_vite+svelte.md +157 -1
  91. package/docs/hi/intlayer_with_vite+vue.md +157 -1
  92. package/docs/id/compiler.md +84 -51
  93. package/docs/id/configuration.md +83 -45
  94. package/docs/id/intlayer_with_nextjs_16.md +174 -1
  95. package/docs/id/intlayer_with_nextjs_compiler.md +174 -1
  96. package/docs/id/intlayer_with_react_router_v7.md +224 -1
  97. package/docs/id/intlayer_with_react_router_v7_fs_routes.md +225 -1
  98. package/docs/id/intlayer_with_svelte_kit.md +158 -2
  99. package/docs/id/intlayer_with_tanstack.md +159 -1
  100. package/docs/id/intlayer_with_vite+preact.md +157 -1
  101. package/docs/id/intlayer_with_vite+react.md +157 -1
  102. package/docs/id/intlayer_with_vite+solid.md +157 -1
  103. package/docs/id/intlayer_with_vite+svelte.md +157 -1
  104. package/docs/id/intlayer_with_vite+vue.md +157 -1
  105. package/docs/it/compiler.md +81 -46
  106. package/docs/it/configuration.md +426 -204
  107. package/docs/it/intlayer_with_nextjs_16.md +174 -1
  108. package/docs/it/intlayer_with_nextjs_compiler.md +174 -1
  109. package/docs/it/intlayer_with_react_router_v7.md +225 -2
  110. package/docs/it/intlayer_with_react_router_v7_fs_routes.md +226 -2
  111. package/docs/it/intlayer_with_svelte_kit.md +158 -2
  112. package/docs/it/intlayer_with_tanstack.md +159 -1
  113. package/docs/it/intlayer_with_vite+preact.md +157 -1
  114. package/docs/it/intlayer_with_vite+react.md +157 -1
  115. package/docs/it/intlayer_with_vite+solid.md +159 -3
  116. package/docs/it/intlayer_with_vite+svelte.md +157 -1
  117. package/docs/it/intlayer_with_vite+vue.md +157 -1
  118. package/docs/ja/compiler.md +94 -58
  119. package/docs/ja/configuration.md +88 -45
  120. package/docs/ja/intlayer_with_nextjs_16.md +174 -1
  121. package/docs/ja/intlayer_with_nextjs_compiler.md +174 -1
  122. package/docs/ja/intlayer_with_react_router_v7.md +184 -394
  123. package/docs/ja/intlayer_with_react_router_v7_fs_routes.md +226 -2
  124. package/docs/ja/intlayer_with_svelte_kit.md +119 -595
  125. package/docs/ja/intlayer_with_tanstack.md +131 -642
  126. package/docs/ja/intlayer_with_vite+preact.md +111 -1231
  127. package/docs/ja/intlayer_with_vite+react.md +129 -1304
  128. package/docs/ja/intlayer_with_vite+solid.md +159 -3
  129. package/docs/ja/intlayer_with_vite+svelte.md +157 -1
  130. package/docs/ja/intlayer_with_vite+vue.md +157 -1
  131. package/docs/ko/compiler.md +88 -52
  132. package/docs/ko/configuration.md +87 -44
  133. package/docs/ko/intlayer_with_nextjs_16.md +174 -1
  134. package/docs/ko/intlayer_with_nextjs_compiler.md +174 -1
  135. package/docs/ko/intlayer_with_react_router_v7.md +225 -2
  136. package/docs/ko/intlayer_with_react_router_v7_fs_routes.md +226 -2
  137. package/docs/ko/intlayer_with_svelte_kit.md +158 -2
  138. package/docs/ko/intlayer_with_tanstack.md +159 -1
  139. package/docs/ko/intlayer_with_vite+preact.md +157 -1
  140. package/docs/ko/intlayer_with_vite+react.md +157 -1
  141. package/docs/ko/intlayer_with_vite+solid.md +159 -3
  142. package/docs/ko/intlayer_with_vite+svelte.md +157 -1
  143. package/docs/ko/intlayer_with_vite+vue.md +157 -1
  144. package/docs/pl/compiler.md +84 -51
  145. package/docs/pl/configuration.md +83 -37
  146. package/docs/pl/intlayer_with_nextjs_16.md +174 -1
  147. package/docs/pl/intlayer_with_nextjs_compiler.md +174 -1
  148. package/docs/pl/intlayer_with_react_router_v7.md +224 -1
  149. package/docs/pl/intlayer_with_react_router_v7_fs_routes.md +225 -1
  150. package/docs/pl/intlayer_with_svelte_kit.md +158 -2
  151. package/docs/pl/intlayer_with_tanstack.md +159 -1
  152. package/docs/pl/intlayer_with_vite+preact.md +157 -1
  153. package/docs/pl/intlayer_with_vite+react.md +157 -1
  154. package/docs/pl/intlayer_with_vite+solid.md +157 -1
  155. package/docs/pl/intlayer_with_vite+svelte.md +157 -1
  156. package/docs/pl/intlayer_with_vite+vue.md +157 -1
  157. package/docs/pt/compiler.md +81 -46
  158. package/docs/pt/configuration.md +404 -194
  159. package/docs/pt/intlayer_with_nextjs_16.md +174 -1
  160. package/docs/pt/intlayer_with_nextjs_compiler.md +174 -1
  161. package/docs/pt/intlayer_with_react_router_v7.md +224 -1
  162. package/docs/pt/intlayer_with_react_router_v7_fs_routes.md +225 -1
  163. package/docs/pt/intlayer_with_svelte_kit.md +158 -2
  164. package/docs/pt/intlayer_with_tanstack.md +159 -1
  165. package/docs/pt/intlayer_with_vite+preact.md +157 -1
  166. package/docs/pt/intlayer_with_vite+react.md +157 -1
  167. package/docs/pt/intlayer_with_vite+solid.md +157 -1
  168. package/docs/pt/intlayer_with_vite+svelte.md +157 -1
  169. package/docs/pt/intlayer_with_vite+vue.md +157 -1
  170. package/docs/ru/compiler.md +90 -57
  171. package/docs/ru/configuration.md +76 -46
  172. package/docs/ru/intlayer_with_nextjs_16.md +174 -1
  173. package/docs/ru/intlayer_with_nextjs_compiler.md +174 -1
  174. package/docs/ru/intlayer_with_react_router_v7.md +224 -1
  175. package/docs/ru/intlayer_with_react_router_v7_fs_routes.md +225 -1
  176. package/docs/ru/intlayer_with_svelte_kit.md +158 -2
  177. package/docs/ru/intlayer_with_tanstack.md +159 -1
  178. package/docs/ru/intlayer_with_vite+preact.md +157 -1
  179. package/docs/ru/intlayer_with_vite+react.md +157 -1
  180. package/docs/ru/intlayer_with_vite+solid.md +157 -1
  181. package/docs/ru/intlayer_with_vite+svelte.md +157 -1
  182. package/docs/ru/intlayer_with_vite+vue.md +157 -1
  183. package/docs/tr/compiler.md +85 -52
  184. package/docs/tr/configuration.md +83 -40
  185. package/docs/tr/intlayer_with_nextjs_16.md +174 -1
  186. package/docs/tr/intlayer_with_nextjs_compiler.md +174 -1
  187. package/docs/tr/intlayer_with_react_router_v7.md +224 -1
  188. package/docs/tr/intlayer_with_react_router_v7_fs_routes.md +225 -1
  189. package/docs/tr/intlayer_with_svelte_kit.md +158 -2
  190. package/docs/tr/intlayer_with_tanstack.md +159 -1
  191. package/docs/tr/intlayer_with_vite+preact.md +157 -1
  192. package/docs/tr/intlayer_with_vite+react.md +157 -1
  193. package/docs/tr/intlayer_with_vite+solid.md +157 -1
  194. package/docs/tr/intlayer_with_vite+svelte.md +157 -1
  195. package/docs/tr/intlayer_with_vite+vue.md +157 -1
  196. package/docs/uk/compiler.md +96 -61
  197. package/docs/uk/configuration.md +83 -37
  198. package/docs/uk/intlayer_with_nextjs_16.md +174 -1
  199. package/docs/uk/intlayer_with_nextjs_compiler.md +174 -1
  200. package/docs/uk/intlayer_with_react_router_v7.md +224 -1
  201. package/docs/uk/intlayer_with_react_router_v7_fs_routes.md +225 -1
  202. package/docs/uk/intlayer_with_svelte_kit.md +157 -1
  203. package/docs/uk/intlayer_with_tanstack.md +159 -1
  204. package/docs/uk/intlayer_with_vite+preact.md +157 -1
  205. package/docs/uk/intlayer_with_vite+react.md +157 -1
  206. package/docs/uk/intlayer_with_vite+solid.md +157 -1
  207. package/docs/uk/intlayer_with_vite+svelte.md +157 -1
  208. package/docs/uk/intlayer_with_vite+vue.md +157 -1
  209. package/docs/vi/compiler.md +85 -50
  210. package/docs/vi/configuration.md +85 -39
  211. package/docs/vi/intlayer_with_nextjs_16.md +174 -1
  212. package/docs/vi/intlayer_with_nextjs_compiler.md +174 -1
  213. package/docs/vi/intlayer_with_react_router_v7.md +224 -1
  214. package/docs/vi/intlayer_with_react_router_v7_fs_routes.md +225 -1
  215. package/docs/vi/intlayer_with_svelte_kit.md +158 -2
  216. package/docs/vi/intlayer_with_tanstack.md +159 -1
  217. package/docs/vi/intlayer_with_vite+preact.md +157 -1
  218. package/docs/vi/intlayer_with_vite+react.md +157 -1
  219. package/docs/vi/intlayer_with_vite+solid.md +157 -1
  220. package/docs/vi/intlayer_with_vite+svelte.md +157 -1
  221. package/docs/vi/intlayer_with_vite+vue.md +157 -1
  222. package/docs/zh/compiler.md +84 -49
  223. package/docs/zh/configuration.md +80 -37
  224. package/docs/zh/intlayer_with_adonisjs.md +1 -1
  225. package/docs/zh/intlayer_with_express.md +1 -1
  226. package/docs/zh/intlayer_with_fastify.md +1 -1
  227. package/docs/zh/intlayer_with_hono.md +1 -1
  228. package/docs/zh/intlayer_with_nestjs.md +1 -1
  229. package/docs/zh/intlayer_with_nextjs_16.md +174 -1
  230. package/docs/zh/intlayer_with_nextjs_compiler.md +174 -1
  231. package/docs/zh/intlayer_with_react_router_v7.md +227 -4
  232. package/docs/zh/intlayer_with_react_router_v7_fs_routes.md +228 -4
  233. package/docs/zh/intlayer_with_svelte_kit.md +158 -2
  234. package/docs/zh/intlayer_with_tanstack.md +159 -1
  235. package/docs/zh/intlayer_with_vite+preact.md +159 -3
  236. package/docs/zh/intlayer_with_vite+react.md +157 -1
  237. package/docs/zh/intlayer_with_vite+solid.md +161 -5
  238. package/docs/zh/intlayer_with_vite+svelte.md +157 -1
  239. package/docs/zh/intlayer_with_vite+vue.md +158 -2
  240. package/package.json +6 -6
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  createdAt: 2025-09-09
3
- updatedAt: 2025-12-30
3
+ updatedAt: 2026-03-12
4
4
  title: Tanstack Start i18n - Tanstack Startアプリの翻訳方法 2026
5
5
  description: Intlayerを使用してTanStack Startアプリケーションに国際化(i18n)を追加する方法を学びます。ロケール対応のルーティングでアプリを多言語化するための包括的なガイドに従ってください。
6
6
  keywords:
@@ -87,703 +87,192 @@ Intlayerを使用すると、以下のことが可能になります:
87
87
 
88
88
  GitHubの[アプリケーションテンプレート](https://github.com/aymericzip/intlayer-tanstack-start-template)を参照してください。
89
89
 
90
- ### ステップ1:プロジェクトの作成
91
-
92
- まず、TanStack Startウェブサイトの[新規プロジェクトの開始](https://tanstack.com/start/latest/docs/framework/react/quick-start)ガイドに従って、新しいTanStack Startプロジェクトを作成します。
93
-
94
- ### ステップ2:Intlayerパッケージのインストール
95
-
96
- 好みのパッケージマネージャーを使用して、必要なパッケージをインストールします:
90
+ ---
97
91
 
98
- ```bash packageManager="npm"
99
- npm install intlayer react-intlayer
100
- npm install vite-intlayer --save-dev
101
- npx intlayer init
102
- ```
92
+ ### Git構成
103
93
 
104
- ```bash packageManager="pnpm"
105
- pnpm add intlayer react-intlayer
106
- pnpm add vite-intlayer --save-dev
107
- pnpm intlayer init
108
- ```
94
+ Intlayerによって生成されたファイルは無視することをお勧めします。これにより、Gitリポジトリにそれらをコミットすることを避けることができます。
109
95
 
110
- ```bash packageManager="yarn"
111
- yarn add intlayer react-intlayer
112
- yarn add vite-intlayer --save-dev
113
- yarn intlayer init
114
- ```
96
+ これを行うには、`.gitignore`ファイルに以下の指示を追加できます:
115
97
 
116
- ```bash packageManager="bun"
117
- bun add intlayer react-intlayer
118
- bun add vite-intlayer --dev
119
- bunx intlayer init
98
+ ```plaintext fileName=".gitignore"
99
+ # Intlayerによって生成されたファイルを無視する
100
+ .intlayer
120
101
  ```
121
102
 
122
- - **intlayer**
123
-
124
- 構成管理、翻訳、[コンテンツ宣言](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ja/dictionary/content_file.md)、トランスパイル、および[CLIコマンド](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ja/cli/index.md)のための国際化ツールを提供するコアパッケージ。
103
+ ### (オプション) ステップ 1 : コンポーネントのコンテンツを抽出する
125
104
 
126
- - **react-intlayer**
127
- IntlayerをReactアプリケーションと統合するパッケージ。Reactの国際化のためのコンテキストプロバイダーとフックを提供します。
105
+ 既存のコードベースがある場合、数千のファイルを変換するのは時間がかかることがあります。
128
106
 
129
- - **vite-intlayer**
130
- Intlayerを[Viteバンドラー](https://vite.dev/guide/why.html#why-bundle-for-production)と統合するためのViteプラグイン、およびユーザーの優先ロケールの検出、クッキーの管理、URLリダイレクトの処理のためのミドルウェアが含まれています。
107
+ このプロセスを容易にするために、Intlayerは、コンポーネントを変換しコンテンツを抽出するための [コンパイラ](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ja/compiler.md) / [エクストラクタ](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ja/cli/extract.md) を提案しています。
131
108
 
132
- ### ステップ3:プロジェクトの構成
109
+ セットアップするには、`intlayer.config.ts` ファイルに `compiler` セクションを追加します。
133
110
 
134
- アプリケーションの言語を構成するための設定ファイルを作成します:
135
-
136
- ```typescript fileName="intlayer.config.ts"
137
- import type { IntlayerConfig } from "intlayer";
138
-
139
- import { Locales } from "intlayer";
111
+ ```typescript fileName="intlayer.config.ts" codeFormat="typescript"
112
+ import { type IntlayerConfig } from "intlayer";
140
113
 
141
114
  const config: IntlayerConfig = {
142
- internationalization: {
143
- defaultLocale: Locales.ENGLISH,
144
- locales: [Locales.ENGLISH, Locales.FRENCH, Locales.SPANISH],
115
+ // ... 他の構成
116
+ compiler: {
117
+ /**
118
+ * コンパイラを有効にするかどうかを指定します。
119
+ */
120
+ enabled: true,
121
+
122
+ /**
123
+ * 出力ファイルのパスを定義します。
124
+ */
125
+ output: ({ fileName, extension }) => `./${fileName}${extension}`,
126
+
127
+ /**
128
+ * 変換後にコンポーネントを保存するかどうかを指定します。これにより、コンパイラを一度だけ実行してアプリを変換し、その後削除することができます。
129
+ */
130
+ saveComponents: false,
131
+
132
+ /**
133
+ * 辞書キーの接頭辞
134
+ */
135
+ dictionaryKeyPrefix: "",
145
136
  },
146
137
  };
147
138
 
148
139
  export default config;
149
140
  ```
150
141
 
151
- > この構成ファイルを使用して、ローカライズされたURL、ミドルウェアのリダイレクト、クッキー名、コンテンツ宣言の場所と拡張子、コンソールでのIntlayerログの無効化などを設定できます。利用可能なパラメーターの完全なリストについては、[構成ドキュメント](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ja/configuration.md)を参照してください。
152
-
153
- ### ステップ4:Vite構成へのIntlayerの統合
154
-
155
- 構成にintlayerプラグインを追加します:
156
-
157
- ```typescript fileName="vite.config.ts"
158
- import { tanstackStart } from "@tanstack/react-start/plugin/vite";
159
- import viteReact from "@vitejs/plugin-react";
160
- import { nitro } from "nitro/vite";
161
- import { defineConfig } from "vite";
162
- import { intlayer } from "vite-intlayer";
163
- import viteTsConfigPaths from "vite-tsconfig-paths";
164
-
165
- const config = defineConfig({
166
- plugins: [
167
- nitro(),
168
- viteTsConfigPaths({
169
- projects: ["./tsconfig.json"],
170
- }),
171
- intlayer(),
172
- tanstackStart({
173
- router: {
174
- routeFileIgnorePattern:
175
- ".content.(ts|tsx|js|mjs|cjs|jsx|json|jsonc|json5)$",
176
- },
177
- }),
178
- viteReact(),
179
- ],
180
- });
142
+ ```javascript fileName="intlayer.config.mjs" codeFormat="esm"
143
+ /** @type {import('intlayer').IntlayerConfig} */
144
+ const config = {
145
+ // ... 他の構成
146
+ compiler: {
147
+ /**
148
+ * コンパイラを有効にするかどうかを指定します。
149
+ */
150
+ enabled: true,
151
+
152
+ /**
153
+ * 出力ファイルのパスを定義します。
154
+ */
155
+ output: ({ fileName, extension }) => `./${fileName}${extension}`,
156
+
157
+ /**
158
+ * 変換後にコンポーネントを保存するかどうかを指定します。これにより、コンパイラを一度だけ実行してアプリを変換し、その後削除することができます。
159
+ */
160
+ saveComponents: false,
161
+
162
+ /**
163
+ * 辞書キーの接頭辞
164
+ */
165
+ dictionaryKeyPrefix: "",
166
+ },
167
+ };
181
168
 
182
169
  export default config;
183
170
  ```
184
171
 
185
- > `intlayer()` Viteプラグインは、IntlayerをViteと統合するために使用されます。コンテンツ宣言ファイルのビルドを確実にし、開発モードでそれらを監視します。Viteアプリケーション内でIntlayer環境変数を定義します。さらに、パフォーマンスを最適化するためのエイリアスを提供します。
186
-
187
- ### ステップ5:ルートレイアウトの作成
188
-
189
- `useMatches`を使用して現在のロケールを検出し、`html`タグに`lang`および`dir`属性を設定することにより、国際化をサポートするようにルートレイアウトを構成します。
190
-
191
- ```tsx fileName="src/routes/__root.tsx"
192
- import {
193
- createRootRouteWithContext,
194
- HeadContent,
195
- Outlet,
196
- Scripts,
197
- useMatches,
198
- } from "@tanstack/react-router";
199
- import { defaultLocale, getHTMLTextDir } from "intlayer";
200
- import { type ReactNode } from "react";
201
- import { IntlayerProvider } from "react-intlayer";
202
-
203
- export const Route = createRootRouteWithContext<{}>()({
204
- shellComponent: RootDocument,
205
- });
206
-
207
- function RootDocument({ children }: { children: ReactNode }) {
208
- const matches = useMatches();
209
-
210
- // アクティブなマッチのパラメーターでロケールを見つけようとする
211
- // これはルートツリーで動的セグメント「/{-$locale}」を使用していることを前提としています
212
- const localeRoute = matches.find((match) => match.routeId === "/{-$locale}");
213
- const locale = localeRoute?.params?.locale ?? defaultLocale;
214
-
215
- return (
216
- <html dir={getHTMLTextDir(locale)} lang={locale}>
217
- <head>
218
- <HeadContent />
219
- </head>
220
- <body>
221
- <IntlayerProvider locale={locale}>{children}</IntlayerProvider>
222
- <Scripts />
223
- </body>
224
- </html>
225
- );
226
- }
227
- ```
228
-
229
- ### ステップ6:ロケールレイアウトの作成
230
-
231
- ロケールプレフィックスを処理し、検証を実行するレイアウトを作成します。
232
-
233
- ```tsx fileName="src/routes/{-$locale}/route.tsx"
234
- import { createFileRoute, Outlet, redirect } from "@tanstack/react-router";
235
- import { validatePrefix } from "intlayer";
236
-
237
- export const Route = createFileRoute("/{-$locale}")({
238
- beforeLoad: ({ params }) => {
239
- const localeParam = params.locale;
240
-
241
- // ロケールプレフィックスを検証する
242
- const { isValid, localePrefix } = validatePrefix(localeParam);
243
-
244
- if (!isValid) {
245
- throw redirect({
246
- to: "/{-$locale}/404",
247
- params: { locale: localePrefix },
248
- });
249
- }
250
- },
251
- component: Outlet,
252
- });
253
- ```
254
-
255
- > ここで、`{-$locale}`は現在のロケールに置き換えられる動的ルートパラメーターです。この表記によりスロットがオプションになり、`'prefix-no-default'`などのルーティングモードで動作できるようになります。
256
-
257
- > 同じルートで複数の動的セグメントを使用する場合(例:`/{-$locale}/other-path/$anotherDynamicPath/...`)、このスロットが問題を引き起こす可能性があることに注意してください。
258
- > `'prefix-all'`モードの場合は、代わりにスロットを`$locale`に切り替えることを検討してください。
259
- > `'no-prefix'`または`'search-params'`モードの場合は、スロットを完全に削除できます。
260
-
261
- ### ステップ7:コンテンツの宣言
262
-
263
- 翻訳を保存するためのコンテンツ宣言を作成および管理します:
264
-
265
- ```tsx fileName="src/contents/page.content.ts"
266
- import type { Dictionary } from "intlayer";
267
-
268
- import { t } from "intlayer";
269
-
270
- const appContent = {
271
- content: {
272
- links: {
273
- about: t({
274
- en: "About",
275
- es: "Acerca de",
276
- fr: "À propos",
277
- }),
278
- home: t({
279
- en: "Home",
280
- es: "Inicio",
281
- fr: "Accueil",
282
- }),
283
- },
284
- meta: {
285
- title: t({
286
- en: "Welcome to Intlayer + TanStack Router",
287
- es: "Bienvenido a Intlayer + TanStack Router",
288
- fr: "Bienvenue à Intlayer + TanStack Router",
289
- }),
290
- description: t({
291
- en: "This is an example of using Intlayer with TanStack Router",
292
- es: "Este es un ejemplo de uso de Intlayer con TanStack Router",
293
- fr: "Ceci est un exemple d'utilisation d'Intlayer avec TanStack Router",
294
- }),
295
- },
172
+ ```javascript fileName="intlayer.config.cjs" codeFormat="commonjs"
173
+ /** @type {import('intlayer').IntlayerConfig} */
174
+ const config = {
175
+ // ... 他の構成
176
+ compiler: {
177
+ /**
178
+ * コンパイラを有効にするかどうかを指定します。
179
+ */
180
+ enabled: true,
181
+
182
+ /**
183
+ * 出力ファイルのパスを定義します。
184
+ */
185
+ output: ({ fileName, extension }) => `./${fileName}${extension}`,
186
+
187
+ /**
188
+ * 変換後にコンポーネントを保存するかどうかを指定します。これにより、コンパイラを一度だけ実行してアプリを変換し、その後削除することができます。
189
+ */
190
+ saveComponents: false,
191
+
192
+ /**
193
+ * 辞書キーの接頭辞
194
+ */
195
+ dictionaryKeyPrefix: "",
296
196
  },
297
- key: "app",
298
- } satisfies Dictionary;
197
+ };
299
198
 
300
- export default appContent;
199
+ module.exports = config;
301
200
  ```
302
201
 
303
- > コンテンツ宣言は、`contentDir`ディレクトリ(デフォルトでは`./app`)に含まれている限り、アプリケーションのどこにでも定義できます。また、コンテンツ宣言ファイルの拡張子(デフォルトでは`.content.{json,ts,tsx,js,jsx,mjs,cjs}`)に一致させる必要があります。
304
-
305
- > 詳細については、[コンテンツ宣言のドキュメント](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ja/dictionary/content_file.md)を参照してください。
306
-
307
- ### ステップ8:ロケール対応コンポーネントとフックの作成
308
-
309
- ロケール対応ナビゲーション用の`LocalizedLink`コンポーネントを作成します:
310
-
311
- ```tsx fileName="src/components/localized-link.tsx"
312
- import type { FC } from "react";
313
-
314
- import { Link, type LinkComponentProps } from "@tanstack/react-router";
315
- import { useLocale } from "react-intlayer";
316
- import { getPrefix } from "intlayer";
317
-
318
- export const LOCALE_ROUTE = "{-$locale}" as const;
202
+ <Tabs>
203
+ <Tab value='抽出コマンド'>
319
204
 
320
- // メインユーティリティ
321
- export type RemoveLocaleParam<T> = T extends string
322
- ? RemoveLocaleFromString<T>
323
- : T;
205
+ コンポーネントを変換してコンテンツを抽出するためにエクストラクタを実行します
324
206
 
325
- export type To = RemoveLocaleParam<LinkComponentProps["to"]>;
326
-
327
- type CollapseDoubleSlashes<S extends string> =
328
- S extends `${infer H}//${infer T}` ? CollapseDoubleSlashes<`${H}/${T}`> : S;
329
-
330
- type LocalizedLinkProps = {
331
- to?: To;
332
- } & Omit<LinkComponentProps, "to">;
333
-
334
- // ヘルパー
335
- type RemoveAll<
336
- S extends string,
337
- Sub extends string,
338
- > = S extends `${infer H}${Sub}${infer T}` ? RemoveAll<`${H}${T}`, Sub> : S;
339
-
340
- type RemoveLocaleFromString<S extends string> = CollapseDoubleSlashes<
341
- RemoveAll<S, typeof LOCALE_ROUTE>
342
- >;
343
-
344
- export const LocalizedLink: FC<LocalizedLinkProps> = (props) => {
345
- const { locale } = useLocale();
346
- const { localePrefix } = getPrefix(locale);
347
-
348
- return (
349
- <Link
350
- {...props}
351
- params={{
352
- locale: localePrefix,
353
- ...(typeof props?.params === "object" ? props?.params : {}),
354
- }}
355
- to={`/${LOCALE_ROUTE}${props.to}` as LinkComponentProps["to"]}
356
- />
357
- );
358
- };
207
+ ```bash packageManager="npm"
208
+ npx intlayer extract
359
209
  ```
360
210
 
361
- このコンポーネントには2つの目的があります:
362
-
363
- - URLから不要な`{-$locale}`プレフィックスを削除すること。
364
- - ユーザーがローカライズされたルートに直接リダイレクトされるように、ロケールパラメーターをURLに注入すること。
365
-
366
- 次に、プログラムによるナビゲーションのための`useLocalizedNavigate`フックを作成できます:
367
-
368
- ```tsx fileName="src/hooks/useLocalizedNavigate.tsx"
369
- import { useNavigate } from "@tanstack/react-router";
370
- import { getPrefix } from "intlayer";
371
- import { useLocale } from "react-intlayer";
372
- import { LOCALE_ROUTE } from "@/components/localized-link";
373
- import type { FileRouteTypes } from "@/routeTree.gen";
374
-
375
- type StripLocalePrefix<T extends string> = T extends
376
- | `/${typeof LOCALE_ROUTE}`
377
- | `/${typeof LOCALE_ROUTE}/`
378
- ? "/"
379
- : T extends `/${typeof LOCALE_ROUTE}/${infer Rest}`
380
- ? `/${Rest}`
381
- : never;
382
-
383
- type LocalizedTo = StripLocalePrefix<FileRouteTypes["to"]>;
384
-
385
- type LocalizedNavigate = {
386
- (to: LocalizedTo): ReturnType<ReturnType<typeof useNavigate>>;
387
- (
388
- opts: { to: LocalizedTo } & Record<string, unknown>
389
- ): ReturnType<ReturnType<typeof useNavigate>>;
390
- };
391
-
392
- export const useLocalizedNavigate = () => {
393
- const navigate = useNavigate();
394
-
395
- const { locale } = useLocale();
396
-
397
- const localizedNavigate: LocalizedNavigate = (args: any) => {
398
- const { localePrefix } = getPrefix(locale);
399
-
400
- if (typeof args === "string") {
401
- return navigate({
402
- to: `/${LOCALE_ROUTE}${args}`,
403
- params: { locale: localePrefix },
404
- });
405
- }
406
-
407
- const { to, ...rest } = args;
408
-
409
- const localizedTo = `/${LOCALE_ROUTE}${to}` as any;
410
-
411
- return navigate({
412
- to: localizedTo,
413
- params: { locale: localePrefix, ...rest } as any,
414
- });
415
- };
416
-
417
- return localizedNavigate;
418
- };
211
+ ```bash packageManager="pnpm"
212
+ pnpm intlayer extract
419
213
  ```
420
214
 
421
- ### ステップ9:ページでIntlayerを活用する
422
-
423
- アプリケーション全体でコンテンツ辞書にアクセスします:
424
-
425
- #### ローカライズされたホームページ
426
-
427
- ```tsx fileName="src/routes/{-$locale}/index.tsx"
428
- import { createFileRoute } from "@tanstack/react-router";
429
- import { getIntlayer } from "intlayer";
430
- import { useIntlayer } from "react-intlayer";
431
-
432
- import LocaleSwitcher from "@/components/locale-switcher";
433
- import { LocalizedLink } from "@/components/localized-link";
434
- import { useLocalizedNavigate } from "@/hooks/useLocalizedNavigate";
435
-
436
- export const Route = createFileRoute("/{-$locale}/")({
437
- component: RouteComponent,
438
- head: ({ params }) => {
439
- const { locale } = params;
440
- const path = "/"; // The path for this route
441
-
442
- const metaContent = getIntlayer("app", locale);
443
-
444
- return {
445
- links: [
446
- // Canonical link: Points to the current localized page
447
- { rel: "canonical", href: getLocalizedUrl(path, locale) },
448
-
449
- // Hreflang: Tell Google about all localized versions
450
- ...localeMap(({ locale: mapLocale }) => ({
451
- rel: "alternate",
452
- hrefLang: mapLocale,
453
- href: getLocalizedUrl(path, mapLocale),
454
- })),
455
-
456
- // x-default: For users in unmatched languages
457
- // Define the default fallback locale (usually your primary language)
458
- {
459
- rel: "alternate",
460
- hrefLang: "x-default",
461
- href: getLocalizedUrl(path, defaultLocale),
462
- },
463
- ],
464
- meta: [
465
- { title: metaContent.title },
466
- { name: "description", content: metaContent.meta.description },
467
- ],
468
- };
469
- },
470
- });
471
-
472
- function RouteComponent() {
473
- const content = useIntlayer("app");
474
- const navigate = useLocalizedNavigate();
475
-
476
- return (
477
- <div>
478
- <div>
479
- {content.title}
480
- <LocaleSwitcher />
481
- <div>
482
- <LocalizedLink to="/">{content.links.home}</LocalizedLink>
483
- <LocalizedLink to="/about">{content.links.about}</LocalizedLink>
484
- </div>
485
- <div>
486
- <button onClick={() => navigate({ to: "/" })}>
487
- {content.links.home}
488
- </button>
489
- <button onClick={() => navigate({ to: "/about" })}>
490
- {content.links.about}
491
- </button>
492
- </div>
493
- </div>
494
- </div>
495
- );
496
- }
215
+ ```bash packageManager="yarn"
216
+ yarn intlayer extract
497
217
  ```
498
218
 
499
- > `useIntlayer`フックの詳細については、[ドキュメント](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ja/packages/react-intlayer/useIntlayer.md)を参照してください。
500
-
501
- ### ステップ10:ロケールスイッチャーコンポーネントの作成
502
-
503
- ユーザーが言語を変更できるようにするコンポーネントを作成します:
504
-
505
- ```tsx fileName="src/components/locale-switcher.tsx"
506
- import { useLocation } from "@tanstack/react-router";
507
- import {
508
- getHTMLTextDir,
509
- getLocaleName,
510
- getPathWithoutLocale,
511
- getPrefix,
512
- Locales,
513
- } from "intlayer";
514
- import type { FC } from "react";
515
- import { useLocale } from "react-intlayer";
516
-
517
- import { LocalizedLink, type To } from "./localized-link";
518
-
519
- export const LocaleSwitcher: FC = () => {
520
- const { pathname } = useLocation();
521
-
522
- const { availableLocales, locale, setLocale } = useLocale();
523
-
524
- const pathWithoutLocale = getPathWithoutLocale(pathname);
525
-
526
- return (
527
- <ol>
528
- {availableLocales.map((localeEl) => (
529
- <li key={localeEl}>
530
- <LocalizedLink
531
- aria-current={localeEl === locale ? "page" : undefined}
532
- onClick={() => setLocale(localeEl)}
533
- params={{ locale: getPrefix(localeEl).localePrefix }}
534
- to={pathWithoutLocale as To}
535
- >
536
- <span>
537
- {/* ロケール - 例: FR */}
538
- {localeEl}
539
- </span>
540
- <span>
541
- {/* それ自体のロケールでの言語 - 例: Français */}
542
- {getLocaleName(localeEl, locale)}
543
- </span>
544
- <span dir={getHTMLTextDir(localeEl)} lang={localeEl}>
545
- {/* 現在のロケールでの言語 - 例: 現在のロケールが Locales.SPANISH の場合は Francés */}
546
- {getLocaleName(localeEl)}
547
- </span>
548
- <span dir="ltr" lang={Locales.ENGLISH}>
549
- {/* 英語での言語 - 例: French */}
550
- {getLocaleName(localeEl, Locales.ENGLISH)}
551
- </span>
552
- </LocalizedLink>
553
- </li>
554
- ))}
555
- </ol>
556
- );
557
- };
219
+ ```bash packageManager="bun"
220
+ bunx intlayer extract
558
221
  ```
559
222
 
560
- > `useLocale`フックの詳細については、[ドキュメント](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ja/packages/react-intlayer/useLocale.md)を参照してください。
561
-
562
- ### ステップ11:HTML属性の管理
563
-
564
- ステップ5で見たように、ルートコンポーネントで`useMatches`を使用して`html`タグの`lang`および`dir`属性を管理できます。これにより、サーバーとクライアントの両方で正しい属性が設定されます。
565
-
566
- ```tsx fileName="src/routes/__root.tsx"
567
- function RootDocument({ children }: { children: ReactNode }) {
568
- const matches = useMatches();
223
+ </Tab>
224
+ <Tab value='Babelコンパイラ'>
569
225
 
570
- // アクティブなマッチのパラメーターでロケールを見つけようとする
571
- const localeRoute = matches.find((match) => match.routeId === "/{-$locale}");
572
- const locale = localeRoute?.params?.locale ?? defaultLocale;
573
-
574
- return (
575
- <html dir={getHTMLTextDir(locale)} lang={locale}>
576
- {/* ... */}
577
- </html>
578
- );
579
- }
226
+ ```bash packageManager="npm"
227
+ npm install @intlayer/babel --save-dev
580
228
  ```
581
229
 
582
- ---
583
-
584
- ### ステップ12:ミドルウェアの追加(任意)
585
-
586
- `intlayerProxy`を使用して、アプリケーションにサーバーサイドルーティングを追加することもできます。このプラグインは、URLに基づいて現在のロケールを自動的に検出し、適切なロケールクッキーを設定します。ロケールが指定されていない場合、プラグインはユーザーのブラウザの言語設定に基づいて最も適切なロケールを決定します。ロケールが検出されない場合は、デフォルトのロケールにリダイレクトされます。
587
-
588
- > `intlayerProxy`を本番環境で使用するには、`vite-intlayer`パッケージを`devDependencies`から`dependencies`に切り替える必要があることに注意してください。
589
-
590
- ```typescript {7,14-17} fileName="vite.config.ts"
591
- import { tanstackStart } from "@tanstack/react-start/plugin/vite";
592
- import viteReact from "@vitejs/plugin-react";
593
- import { nitro } from "nitro/vite";
594
- import { defineConfig } from "vite";
595
- import { intlayer, intlayerProxy } from "vite-intlayer";
596
- import viteTsConfigPaths from "vite-tsconfig-paths";
597
-
598
- export default defineConfig({
599
- plugins: [
600
- intlayerProxy(), // Nitroを使用する場合、プロキシはサーバーの前に配置する必要があります
601
- nitro(),
602
- viteTsConfigPaths({
603
- projects: ["./tsconfig.json"],
604
- }),
605
- intlayer(),
606
- tanstackStart({
607
- router: {
608
- routeFileIgnorePattern:
609
- ".content.(ts|tsx|js|mjs|cjs|jsx|json|jsonc|json5)$",
610
- },
611
- }),
612
- viteReact(),
613
- ],
614
- });
230
+ ```bash packageManager="pnpm"
231
+ pnpm add @intlayer/babel --save-dev
615
232
  ```
616
233
 
617
- ---
618
-
619
- ### ステップ13:メタデータの国際化(任意)
620
-
621
- `getIntlayer`フックを使用して、アプリケーション全体でコンテンツ辞書にアクセスすることもできます:
622
-
623
- ```tsx fileName="src/routes/{-$locale}/index.tsx"
624
- import { createFileRoute } from "@tanstack/react-router";
625
- import { getIntlayer } from "intlayer";
626
-
627
- export const Route = createFileRoute("/{-$locale}/")({
628
- component: RouteComponent,
629
- head: ({ params }) => {
630
- const { locale } = params;
631
- const metaContent = getIntlayer("page-metadata", locale);
632
-
633
- return {
634
- meta: [
635
- { title: metaContent.title },
636
- { content: metaContent.description, name: "description" },
637
- ],
638
- };
639
- },
640
- });
234
+ ```bash packageManager="yarn"
235
+ yarn add @intlayer/babel --save-dev
641
236
  ```
642
237
 
643
- ---
644
-
645
- ### ステップ14:サーバーアクション内でのロケールの取得(任意)
646
-
647
- サーバーアクションやAPIエンドポイント内から現在のロケールにアクセスしたい場合があります。
648
- これは、`intlayer`の`getLocale`ヘルパーを使用して行うことができます。
649
-
650
- 以下は、TanStack Startのサーバー関数を使用した例です:
651
-
652
- ```tsx fileName="src/routes/{-$locale}/index.tsx"
653
- import { createServerFn } from "@tanstack/react-start";
654
- import {
655
- getRequestHeader,
656
- getRequestHeaders,
657
- } from "@tanstack/react-start/server";
658
- import { getCookie, getIntlayer, getLocale } from "intlayer";
659
-
660
- export const getLocaleServer = createServerFn().handler(async () => {
661
- const locale = await getLocale({
662
- // リクエストからクッキーを取得(デフォルト:'INTLAYER_LOCALE')
663
- getCookie: (name) => {
664
- const cookieString = getRequestHeader("cookie");
665
-
666
- return getCookie(name, cookieString);
667
- },
668
- // リクエストからヘッダーを取得(デフォルト:'x-intlayer-locale')
669
- // Accept-Languageネゴシエーションを使用したフォールバック
670
- getHeader: (name) => getRequestHeader(name),
671
- });
672
-
673
- // getIntlayer()を使用してコンテンツを取得
674
- const content = getIntlayer("app", locale);
675
-
676
- return { locale, content };
677
- });
238
+ ```bash packageManager="bun"
239
+ bun add @intlayer/babel --dev
678
240
  ```
679
241
 
680
- ---
681
-
682
- ### ステップ15:見つからないページの管理(任意)
242
+ ```js fileName="babel.config.js"
243
+ const {
244
+ intlayerExtractBabelPlugin,
245
+ getExtractPluginOptions,
246
+ } = require("@intlayer/babel");
683
247
 
684
- ユーザーが存在しないページにアクセスしたときに、カスタムの見つからないページを表示できます。ロケールプレフィックスは、見つからないページがトリガーされる方法に影響を与える可能性があります。
685
-
686
- #### ロケールプレフィックスを使用したTanStack Routerの404処理の理解
687
-
688
- TanStack Routerでは、ローカライズされたルートでの404ページの処理には多層的なアプローチが必要です:
689
-
690
- 1. **専用の404ルート**:404 UIを表示するための特定のルート
691
- 2. **ルートレベルの検証**:ロケールプレフィックスを検証し、無効なものを404にリダイレクト
692
- 3. **キャッチオールルート**:ロケールセグメント内の不一致なパスをすべてキャプチャ
693
-
694
- ```tsx fileName="src/routes/{-$locale}/404.tsx"
695
- import { createFileRoute } from "@tanstack/react-router";
696
-
697
- // これは専用の /[locale]/404 ルートを作成します
698
- // これは直接のルートとして使用されるほか、他のファイルでコンポーネントとしてインポートされます
699
- export const Route = createFileRoute("/{-$locale}/404")({
700
- component: NotFoundComponent,
701
- });
702
-
703
- // notFoundComponentおよびキャッチオールルートで再利用できるように個別にエクスポートされます
704
- export function NotFoundComponent() {
705
- return (
706
- <div>
707
- <h1>404</h1>
708
- </div>
709
- );
710
- }
248
+ module.exports = {
249
+ presets: ["next/babel"],
250
+ plugins: [
251
+ // コンポーネントから辞書へコンテンツを抽出する
252
+ [intlayerExtractBabelPlugin, getExtractPluginOptions()],
253
+ ],
254
+ };
711
255
  ```
712
256
 
713
- ```tsx fileName="src/routes/{-$locale}/route.tsx"
714
- import { createFileRoute, Outlet, redirect } from "@tanstack/react-router";
715
- import { validatePrefix } from "intlayer";
716
- import { NotFoundComponent } from "./404";
717
-
718
- export const Route = createFileRoute("/{-$locale}")({
719
- // beforeLoadはルートがレンダリングされる前に実行されます(サーバーとクライアントの両方で)
720
- // これはロケールプレフィックスを検証するのに理想的な場所です
721
- beforeLoad: ({ params }) => {
722
- const localeParam = params.locale;
723
-
724
- // validatePrefixは、ロケールがintlayer構成に従って有効かどうかをチェックします
725
- const { isValid, localePrefix } = validatePrefix(localeParam);
726
-
727
- if (!isValid) {
728
- // 無効なロケールプレフィックス - 有効なロケールプレフィックスで404ページにリダイレクト
729
- throw redirect({
730
- to: "/{-$locale}/404",
731
- params: { locale: localePrefix },
732
- });
733
- }
734
- },
735
- component: Outlet,
736
- // notFoundComponentは子ルートが存在しないときに呼び出されます
737
- // 例:/en/non-existent-page は /en レイアウト内でこれをトリガーします
738
- notFoundComponent: NotFoundComponent,
739
- });
257
+ ```bash packageManager="npm"
258
+ npm run build # または npm run dev
740
259
  ```
741
260
 
742
- ```tsx fileName="src/routes/{-$locale}/$.tsx"
743
- import { createFileRoute } from "@tanstack/react-router";
744
-
745
- import { NotFoundComponent } from "./404";
746
-
747
- // $ (splat/キャッチオール) ルートは、他のルートと一致しないパスに一致します
748
- // 例:/en/some/deeply/nested/invalid/path
749
- // これにより、ロケール内のすべての不一致なパスが404ページを表示することが保証されます
750
- // これがないと、不一致な深いパスが空白のページやエラーを表示する可能性があります
751
- export const Route = createFileRoute("/{-$locale}/$")({
752
- component: NotFoundComponent,
753
- });
261
+ ```bash packageManager="pnpm"
262
+ pnpm run build # または pnpm run dev
754
263
  ```
755
264
 
756
- ---
757
-
758
- ### ステップ16:TypeScriptの構成(任意)
759
-
760
- Intlayerはモジュール拡張を使用して、TypeScriptの利点を享受し、コードベースをより強力にします。
761
-
762
- TypeScript構成に自動生成された型が含まれていることを確認してください:
763
-
764
- ```json5 fileName="tsconfig.json"
765
- {
766
- // ... 既存の構成
767
- include: [
768
- // ... 既存の包含
769
- ".intlayer/**/*.ts", // 自動生成された型を含める
770
- ],
771
- }
265
+ ```bash packageManager="yarn"
266
+ yarn build # または yarn dev
772
267
  ```
773
268
 
774
- ---
775
-
776
- ### Git構成
777
-
778
- Intlayerによって生成されたファイルは無視することをお勧めします。これにより、Gitリポジトリにそれらをコミットすることを避けることができます。
779
-
780
- これを行うには、`.gitignore`ファイルに以下の指示を追加できます:
781
-
782
- ```plaintext fileName=".gitignore"
783
- # Intlayerによって生成されたファイルを無視する
784
- .intlayer
269
+ ```bash packageManager="bun"
270
+ bun run build # Or bun run dev
785
271
  ```
786
272
 
273
+ </Tab>
274
+ </Tabs>
275
+
787
276
  ---
788
277
 
789
278
  ## VS Code拡張機能