@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-04
3
- updatedAt: 2025-12-30
3
+ updatedAt: 2026-03-12
4
4
  title: React Router v7 i18n - React Router v7アプリの翻訳方法 2026
5
5
  description: Intlayerを使用してReact Router v7アプリケーションに国際化(i18n)を追加する方法を学びます。ロケール対応ルーティングでアプリを多言語化するための包括的なガイドに従ってください。
6
6
  keywords:
@@ -38,7 +38,7 @@ history:
38
38
 
39
39
  このガイドでは、React Router v7プロジェクトにおいて、ロケール対応ルーティング、TypeScriptサポート、最新の開発手法を活用しながら、**Intlayer**を使ったシームレスな国際化の統合方法を説明します。
40
40
 
41
- ## Table of Contents
41
+ ## 目次
42
42
 
43
43
  <TOC/>
44
44
 
@@ -58,473 +58,263 @@ Intlayerを使うことで、以下が可能になります:
58
58
 
59
59
  ## React Router v7アプリケーションでIntlayerをセットアップするステップバイステップガイド
60
60
 
61
- ### ステップ1: 依存パッケージのインストール
61
+ ---
62
62
 
63
- お好みのパッケージマネージャーを使って必要なパッケージをインストールします:
63
+ ## Configure TypeScript
64
64
 
65
- ```bash packageManager="npm"
66
- npm install intlayer react-intlayer
67
- npm install vite-intlayer --save-dev
68
- npx intlayer init
69
- ```
70
-
71
- ```bash packageManager="pnpm"
72
- pnpm add intlayer react-intlayer
73
- pnpm add vite-intlayer --save-dev
74
- pnpm intlayer init
75
- ```
65
+ Intlayer uses module augmentation to get benefits of TypeScript and make your codebase stronger.
76
66
 
77
- ```bash packageManager="yarn"
78
- yarn add intlayer react-intlayer
79
- yarn add vite-intlayer --save-dev
80
- yarn intlayer init
81
- ```
67
+ Ensure your TypeScript configuration includes the autogenerated types:
82
68
 
83
- ```bash packageManager="bun"
84
- bun add intlayer react-intlayer
85
- bun add vite-intlayer --dev
86
- bunx intlayer init
69
+ ```json5 fileName="tsconfig.json"
70
+ {
71
+ // ... your existing configurations
72
+ include: [
73
+ // ... your existing includes
74
+ ".intlayer/**/*.ts", // Include the auto-generated types
75
+ ],
76
+ }
87
77
  ```
88
78
 
89
- - **intlayer**
90
-
91
- - **intlayer**
92
- 設定管理、翻訳、[コンテンツ宣言](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)のための国際化ツールを提供するコアパッケージ。
93
-
94
- - **react-intlayer**
95
- IntlayerをReactアプリケーションと統合するパッケージです。Reactの国際化のためのコンテキストプロバイダーとフックを提供します。
79
+ ---
96
80
 
97
- - **vite-intlayer**
98
- Intlayerを[Viteバンドラー](https://vite.dev/guide/why.html#why-bundle-for-production)と統合するためのViteプラグイン、およびユーザーの優先ロケール検出、クッキー管理、URLリダイレクト処理のためのミドルウェアを含みます。
81
+ ## Git Configuration
99
82
 
100
- ### ステップ 2: プロジェクトの設定
83
+ It is recommended to ignore the files generated by Intlayer. This allows you to avoid committing them to your Git repository.
101
84
 
102
- ## ファイルシステムベースのルートを使用したReact Router v7アプリケーションでIntlayerを設定するためのステップバイステップガイド
85
+ To do this, you can add the following instructions to your `.gitignore` file:
103
86
 
104
- <Tabs defaultTab="video">
105
- <Tab label="Video" value="video">
106
-
107
- <iframe title="How to translate an React Router v7 app using Intlayer" class="m-auto aspect-16/9 w-full overflow-hidden rounded-lg border-0" allow="autoplay; gyroscope;" loading="lazy" width="1080" height="auto" src="https://www.youtube.com/embed/dS9L7uJeak4?autoplay=0&amp;origin=http://intlayer.org&amp;controls=0&amp;rel=1"/>
87
+ ```plaintext fileName=".gitignore"
88
+ # Intlayerによって生成されたファイルを無視する
89
+ .intlayer
90
+ ```
108
91
 
109
- </Tab>
110
- <Tab label="Code" value="code">
92
+ ---
111
93
 
112
- <iframe
113
- src="https://stackblitz.com/github/aymericzip/intlayer-react-router-v7-template?embed=1&ctl=1&file=intlayer.config.ts"
114
- className="m-auto overflow-hidden rounded-lg border-0 max-md:size-full max-md:h-[700px] md:aspect-16/9 md:w-full"
115
- title="Demo CodeSandbox - How to Internationalize your application using Intlayer"
116
- sandbox="allow-forms allow-modals allow-popups allow-presentation allow-same-origin allow-scripts"
117
- loading="lazy"
118
- />
94
+ ## VS Code Extension
119
95
 
120
- </Tab>
121
- </Tabs>
96
+ To improve your development experience with Intlayer, you can install the official **Intlayer VS Code Extension**.
122
97
 
123
- See [Application Template](https://github.com/aymericzip/intlayer-react-router-v7-template) on GitHub.
98
+ [Install from the VS Code Marketplace](https://marketplace.visualstudio.com/items?itemName=intlayer.intlayer-vs-code-extension)
124
99
 
125
- アプリケーションの言語を設定するための設定ファイルを作成します:
100
+ This extension provides:
126
101
 
127
- ```typescript fileName="intlayer.config.ts" codeFormat="typescript"
128
- import { type IntlayerConfig, Locales } from "intlayer";
102
+ - **Autocompletion** for translation keys.
103
+ - **Real-time error detection** for missing translations.
104
+ - **Inline previews** of translated content.
105
+ - **Quick actions** to easily create and update translations.
129
106
 
130
- const config: IntlayerConfig = {
131
- internationalization: {
132
- defaultLocale: Locales.ENGLISH, // デフォルトのロケールを英語に設定
133
- locales: [Locales.ENGLISH, Locales.FRENCH, Locales.SPANISH], // 利用可能なロケールのリスト
134
- },
135
- };
107
+ For more details on how to use the extension, refer to the [Intlayer VS Code Extension documentation](https://intlayer.org/doc/vs-code-extension).
136
108
 
137
- export default config;
138
- ```
109
+ ---
139
110
 
140
- ```javascript fileName="intlayer.config.mjs" codeFormat="esm"
141
- import { Locales } from "intlayer";
111
+ ## Go Further
142
112
 
143
- /** @type {import('intlayer').IntlayerConfig} */
144
- const config = {
145
- internationalization: {
146
- defaultLocale: Locales.ENGLISH, // デフォルトのロケールを英語に設定
147
- locales: [Locales.ENGLISH, Locales.FRENCH, Locales.SPANISH], // 利用可能なロケールのリスト
148
- },
149
- };
113
+ To go further, you can implement the [visual editor](https://github.com/aymericzip/intlayer/blob/main/docs/docs/en/intlayer_visual_editor.md) or externalize your content using the [CMS](https://github.com/aymericzip/intlayer/blob/main/docs/docs/en/intlayer_CMS.md).
150
114
 
151
- export default config;
152
- ```
115
+ ---
153
116
 
154
- ```javascript fileName="intlayer.config.cjs" codeFormat="commonjs"
155
- const { Locales } = require("intlayer");
117
+ ## Documentation References
156
118
 
157
- /** @type {import('intlayer').IntlayerConfig} */
158
- const config = {
159
- internationalization: {
160
- defaultLocale: Locales.ENGLISH,
161
- locales: [Locales.ENGLISH, Locales.FRENCH, Locales.SPANISH],
162
- },
163
- };
119
+ - [Intlayer Documentation](https://intlayer.org)
120
+ - [React Router v7 Documentation](https://reactrouter.com/)
121
+ - [useIntlayer hook](https://github.com/aymericzip/intlayer/blob/main/docs/docs/en/packages/react-intlayer/useIntlayer.md)
122
+ - [useLocale hook](https://github.com/aymericzip/intlayer/blob/main/docs/docs/en/packages/react-intlayer/useLocale.md)
123
+ - [Content Declaration](https://github.com/aymericzip/intlayer/blob/main/docs/docs/en/dictionary/content_file.md)
124
+ - [Configuration](https://github.com/aymericzip/intlayer/blob/main/docs/docs/en/configuration.md)
164
125
 
165
- module.exports = config;
166
- ```
126
+ This comprehensive guide provides everything you need to integrate Intlayer with React Router v7 for a fully internationalized application with locale-aware routing and TypeScript support.
167
127
 
168
- > この設定ファイルを通じて、ローカライズされたURL、ミドルウェアのリダイレクション、クッキー名、コンテンツ宣言の場所と拡張子、コンソールでのIntlayerログの無効化などを設定できます。利用可能なパラメータの完全なリストについては、[設定ドキュメント](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ja/configuration.md)を参照してください。
128
+ ### ステップ11: ミドルウェアを追加する(オプション)
169
129
 
170
- ### ステップ3: Vite設定にIntlayerを統合する
130
+ `intlayerProxy` を使用して、アプリケーションにサーバーサイドルーティングを追加することもできます。このプラグインは、URL に基づいて現在のロケールを自動的に検出し、適切なロケールクッキーを設定します。ロケールが指定されていない場合、プラグインはユーザーのブラウザの言語設定に基づいて最も適切なロケールを判断します。ロケールが検出されない場合は、デフォルトのロケールにリダイレクトします。
171
131
 
172
- 設定にintlayerプラグインを追加します:
132
+ > `intlayerProxy` を本番環境で使用するには、`vite-intlayer` パッケージを `devDependencies` から `dependencies` に切り替える必要があることに注意してください。
173
133
 
174
- ```typescript fileName="vite.config.ts"
134
+ ```typescript {3,7} fileName="vite.config.ts"
175
135
  import { reactRouter } from "@react-router/dev/vite";
176
136
  import { defineConfig } from "vite";
177
- import { intlayer } from "vite-intlayer";
137
+ import { intlayer, intlayerProxy } from "vite-intlayer";
178
138
  import tsconfigPaths from "vite-tsconfig-paths";
179
139
 
180
140
  export default defineConfig({
181
- plugins: [reactRouter(), tsconfigPaths(), intlayer()],
141
+ plugins: [reactRouter(), tsconfigPaths(), intlayer(), intlayerProxy()],
182
142
  });
183
143
  ```
184
144
 
185
- > `intlayer()` Viteプラグインは、IntlayerをViteと統合するために使用されます。これにより、コンテンツ宣言ファイルのビルドが保証され、開発モードで監視されます。また、Viteアプリケーション内でIntlayerの環境変数を定義します。さらに、パフォーマンスを最適化するためのエイリアスも提供します。
186
-
187
- ### ステップ4: React Router v7のルートを設定する
188
-
189
- ロケール対応のルートでルーティング設定を行います:
190
-
191
- ```typescript fileName="app/routes.ts"
192
- import { layout, route, type RouteConfig } from "@react-router/dev/routes";
193
-
194
- export default [
195
- route("/:lang?", "routes/page.tsx"), // ローカライズされたホームページ
196
- route("/:lang?/about", "routes/about/page.tsx"), // ローカライズされたアバウトページ
197
- ] satisfies RouteConfig;
198
- ```
145
+ ### (オプション) ステップ 12 : コンポーネントのコンテンツを抽出する
199
146
 
200
- ### ステップ5: レイアウトコンポーネントの作成
147
+ 既存のコードベースがある場合、数千のファイルを変換するのは時間がかかることがあります。
201
148
 
202
- ルートレイアウトとロケール固有のレイアウトを設定します:
149
+ このプロセスを容易にするために、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) を提案しています。
203
150
 
204
- #### ルートレイアウト
151
+ セットアップするには、`intlayer.config.ts` ファイルに `compiler` セクションを追加します。
205
152
 
206
- ```tsx fileName="app/root.tsx"
207
- import { getLocaleFromPath } from "intlayer";
208
- import { IntlayerProvider } from "react-intlayer";
209
- import {
210
- data,
211
- Meta,
212
- Scripts,
213
- ScrollRestoration,
214
- useLoaderData,
215
- } from "react-router";
216
- import type { Route } from "./+types/root";
217
-
218
- // ... Unchanged App, links and ErrorBoundary code
219
-
220
- export async function loader({ request }: Route.LoaderArgs) {
221
- const locale = getLocaleFromPath(request.url);
222
-
223
- if (!locale) {
224
- throw data("Language not supported", { status: 404 });
225
- }
153
+ ```typescript fileName="intlayer.config.ts" codeFormat="typescript"
154
+ import { type IntlayerConfig } from "intlayer";
226
155
 
227
- return { locale };
228
- }
156
+ const config: IntlayerConfig = {
157
+ // ... 他の構成
158
+ compiler: {
159
+ /**
160
+ * コンパイラを有効にするかどうかを指定します。
161
+ */
162
+ enabled: true,
163
+
164
+ /**
165
+ * 出力ファイルのパスを定義します。
166
+ */
167
+ output: ({ fileName, extension }) => `./${fileName}${extension}`,
168
+
169
+ /**
170
+ * 変換後にコンポーネントを保存するかどうかを指定します。これにより、コンパイラを一度だけ実行してアプリを変換し、その後削除することができます。
171
+ */
172
+ saveComponents: false,
173
+
174
+ /**
175
+ * 辞書キーの接頭辞
176
+ */
177
+ dictionaryKeyPrefix: "",
178
+ },
179
+ };
229
180
 
230
- export function Layout({
231
- children,
232
- }: { children: React.ReactNode } & Route.ComponentProps) {
233
- const data = useLoaderData<typeof loader>();
234
- const { locale } = data ?? {};
235
-
236
- return (
237
- <html lang={locale}>
238
- <head>
239
- <meta charSet="utf-8" />
240
- <meta content="width=device-width, initial-scale=1" name="viewport" />
241
- <Meta />
242
- <Links />
243
- </head>
244
- <body>
245
- <IntlayerProvider locale={locale}>{children}</IntlayerProvider>
246
- <ScrollRestoration />
247
- <Scripts />
248
- </body>
249
- </html>
250
- );
251
- }
181
+ export default config;
252
182
  ```
253
183
 
254
- ### ステップ 6: コンテンツを宣言する
255
-
256
- 翻訳を格納するためのコンテンツ宣言を作成および管理します:
257
-
258
- ```tsx fileName="app/routes/[lang]/page.content.ts"
259
- import { t, type Dictionary } from "intlayer";
260
-
261
- const pageContent = {
262
- key: "page",
263
- content: {
264
- title: t({
265
- en: "Welcome to React Router v7 + Intlayer",
266
- es: "Bienvenido a React Router v7 + Intlayer",
267
- fr: "Bienvenue sur React Router v7 + Intlayer",
268
- }),
269
- description: t({
270
- en: "Build multilingual applications with ease using React Router v7 and Intlayer.",
271
- es: "Cree aplicaciones multilingües fácilmente usando React Router v7 y Intlayer.",
272
- fr: "Créez des applications multilingues facilement avec React Router v7 et Intlayer.",
273
- }),
274
- aboutLink: t({
275
- en: "私たちについて学ぶ",
276
- es: "Aprender Sobre Nosotros",
277
- fr: "En savoir plus sur nous",
278
- }),
279
- homeLink: t({
280
- en: "ホーム",
281
- es: "Inicio",
282
- fr: "Accueil",
283
- }),
184
+ ```javascript fileName="intlayer.config.mjs" codeFormat="esm"
185
+ /** @type {import('intlayer').IntlayerConfig} */
186
+ const config = {
187
+ // ... 他の構成
188
+ compiler: {
189
+ /**
190
+ * コンパイラを有効にするかどうかを指定します。
191
+ */
192
+ enabled: true,
193
+
194
+ /**
195
+ * 出力ファイルのパスを定義します。
196
+ */
197
+ output: ({ fileName, extension }) => `./${fileName}${extension}`,
198
+
199
+ /**
200
+ * 変換後にコンポーネントを保存するかどうかを指定します。これにより、コンパイラを一度だけ実行してアプリを変換し、その後削除することができます。
201
+ */
202
+ saveComponents: false,
203
+
204
+ /**
205
+ * 辞書キーの接頭辞
206
+ */
207
+ dictionaryKeyPrefix: "",
284
208
  },
285
- } satisfies Dictionary;
209
+ };
286
210
 
287
- export default pageContent;
211
+ export default config;
288
212
  ```
289
213
 
290
- > コンテンツ宣言は、`contentDir` ディレクトリ(デフォルトは `./app`)に含まれている限り、アプリケーションのどこにでも定義できます。また、コンテンツ宣言ファイルの拡張子(デフォルトは `.content.{json,ts,tsx,js,jsx,mjs,cjs}`)に一致する必要があります。
291
-
292
- > 詳細については、[コンテンツ宣言ドキュメント](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ja/dictionary/content_file.md)を参照してください。
293
-
294
- ### ステップ7: ロケール対応コンポーネントの作成
295
-
296
- ロケール対応のナビゲーション用に `LocalizedLink` コンポーネントを作成します:
297
-
298
- ```tsx fileName="app/components/localized-link.tsx"
299
- import type { FC } from "react";
300
-
301
- import { getLocalizedUrl, type LocalesValues } from "intlayer";
302
- import { useLocale } from "react-intlayer";
303
- import { Link, type LinkProps, type To } from "react-router";
304
-
305
- // 外部リンクかどうかを判定する関数
306
- const isExternalLink = (to: string) => /^(https?:)?\/\//.test(to);
307
-
308
- // 指定されたURLをロケールに応じてローカライズする関数
309
- export const locacalizeTo = (to: To, locale: LocalesValues): To => {
310
- if (typeof to === "string") {
311
- if (isExternalLink(to)) {
312
- return to;
313
- }
314
-
315
- return getLocalizedUrl(to, locale);
316
- }
317
-
318
- if (isExternalLink(to.pathname ?? "")) {
319
- return to;
320
- }
321
-
322
- return {
323
- ...to,
324
- pathname: getLocalizedUrl(to.pathname ?? "", locale),
325
- };
214
+ ```javascript fileName="intlayer.config.cjs" codeFormat="commonjs"
215
+ /** @type {import('intlayer').IntlayerConfig} */
216
+ const config = {
217
+ // ... 他の構成
218
+ compiler: {
219
+ /**
220
+ * コンパイラを有効にするかどうかを指定します。
221
+ */
222
+ enabled: true,
223
+
224
+ /**
225
+ * 出力ファイルのパスを定義します。
226
+ */
227
+ output: ({ fileName, extension }) => `./${fileName}${extension}`,
228
+
229
+ /**
230
+ * 変換後にコンポーネントを保存するかどうかを指定します。これにより、コンパイラを一度だけ実行してアプリを変換し、その後削除することができます。
231
+ */
232
+ saveComponents: false,
233
+
234
+ /**
235
+ * 辞書キーの接頭辞
236
+ */
237
+ dictionaryKeyPrefix: "",
238
+ },
326
239
  };
327
240
 
328
- // ロケール対応のリンクコンポーネント
329
- export const LocalizedLink: FC<LinkProps> = (props) => {
330
- const { locale } = useLocale();
331
-
332
- return <Link {...props} to={locacalizeTo(props.to, locale)} />;
333
- };
241
+ module.exports = config;
334
242
  ```
335
243
 
336
- ローカライズされたルートにナビゲートしたい場合は、`useLocalizedNavigate` フックを使用できます。
337
-
338
- ```tsx fileName="app/hooks/useLocalizedNavigate.ts"
339
- import { useLocale } from "react-intlayer";
340
- import { type NavigateOptions, type To, useNavigate } from "react-router";
244
+ <Tabs>
245
+ <Tab value='抽出コマンド'>
341
246
 
342
- import { locacalizeTo } from "~/components/localized-link";
247
+ コンポーネントを変換してコンテンツを抽出するためにエクストラクタを実行します
343
248
 
344
- export const useLocalizedNavigate = () => {
345
- const navigate = useNavigate();
346
- const { locale } = useLocale();
347
-
348
- const localizedNavigate = (to: To, options?: NavigateOptions) => {
349
- const localedTo = locacalizeTo(to, locale);
350
-
351
- navigate(localedTo, options);
352
- };
353
-
354
- return localizedNavigate;
355
- };
249
+ ```bash packageManager="npm"
250
+ npx intlayer extract
356
251
  ```
357
252
 
358
- ### ステップ8: ページで Intlayer を活用する
359
-
360
- アプリケーション全体でコンテンツ辞書にアクセスします:
361
-
362
- #### ローカライズされたホームページ
363
-
364
- ```tsx fileName="app/routes/page.tsx"
365
- import { getIntlayer, validatePrefix } from "intlayer";
366
- import { useIntlayer } from "react-intlayer";
367
- import { data } from "react-router";
368
-
369
- import { LocaleSwitcher } from "~/components/locale-switcher";
370
-
371
- import { Navbar } from "~/components/navbar";
372
- import type { Route } from "./+types/page";
373
-
374
- export const loader = ({ params }: Route.LoaderArgs) => {
375
- const { locale } = params;
376
-
377
- const { isValid } = validatePrefix(locale);
378
-
379
- if (!isValid) {
380
- throw data("Locale not supported", { status: 404 });
381
- }
382
- };
383
-
384
- export const meta: Route.MetaFunction = ({ params }) => {
385
- const content = getIntlayer("page", params.locale);
386
-
387
- return [
388
- { title: content.title },
389
- { content: content.description, name: "description" },
390
- ];
391
- };
253
+ ```bash packageManager="pnpm"
254
+ pnpm intlayer extract
255
+ ```
392
256
 
393
- export default function Page() {
394
- const { title, description, aboutLink } = useIntlayer("page");
395
-
396
- return (
397
- <div>
398
- <h1>{title}</h1>
399
- <p>{description}</p>
400
- <nav>
401
- <LocalizedLink to="/about">{aboutLink}</LocalizedLink>
402
- </nav>
403
- </div>
404
- );
405
- }
257
+ ```bash packageManager="yarn"
258
+ yarn intlayer extract
406
259
  ```
407
260
 
408
- > `useIntlayer` フックの詳細については、[ドキュメント](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ja/packages/react-intlayer/useIntlayer.md)を参照してください。
409
-
410
- > アプリケーションが既に存在する場合は、[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) を組み合わせて、1 秒で何千ものコンポーネントを変換できます。
411
-
412
- ### ステップ9:ロケールスイッチャーコンポーネントを作成する
413
-
414
- ユーザーが言語を変更できるコンポーネントを作成します:
415
-
416
- ```tsx fileName="app/components/locale-switcher.tsx"
417
- import type { FC } from "react";
418
-
419
- import {
420
- getHTMLTextDir,
421
- getLocaleName,
422
- getLocalizedUrl,
423
- getPathWithoutLocale,
424
- Locales,
425
- } from "intlayer";
426
- import { setLocaleInStorage, useIntlayer, useLocale } from "react-intlayer";
427
- import { Link, useLocation } from "react-router";
428
-
429
- export const LocaleSwitcher: FC = () => {
430
- const { localeSwitcherLabel } = useIntlayer("locale-switcher"); // ロケールスイッチャーのラベルを取得
431
- const { pathname } = useLocation(); // 現在のパス名を取得
432
-
433
- const { availableLocales, locale } = useLocale(); // 利用可能なロケールと現在のロケールを取得
434
-
435
- const pathWithoutLocale = getPathWithoutLocale(pathname); // パスからロケール部分を除去
436
-
437
- return (
438
- <ol>
439
- {availableLocales.map((localeItem) => (
440
- <li key={localeItem}>
441
- <Link
442
- aria-current={localeItem === locale ? "page" : undefined}
443
- aria-label={`${localeSwitcherLabel.value} ${getLocaleName(localeItem)}`}
444
- onClick={() => setLocale(localeItem)}
445
- to={getLocalizedUrl(pathWithoutLocale, localeItem)}
446
- >
447
- <span>
448
- {/* ロケール - 例: FR */}
449
- {localeItem}
450
- </span>
451
- <span>
452
- {/* 自身のロケールでの言語名 - 例: Français */}
453
- {getLocaleName(localeItem, locale)}
454
- </span>
455
- <span dir={getHTMLTextDir(localeItem)} lang={localeItem}>
456
- {/* 現在のロケールでの言語名 - 例: 現在のロケールがLocales.SPANISHの場合のFrancés */}
457
- {getLocaleName(localeItem)}
458
- </span>
459
- <span dir="ltr" lang={Locales.ENGLISH}>
460
- {/* 英語での言語名 - 例: French */}
461
- {getLocaleName(localeItem, Locales.ENGLISH)}
462
- </span>
463
- </Link>
464
- </li>
465
- ))}
466
- </ol>
467
- );
468
- };
261
+ ```bash packageManager="bun"
262
+ bunx intlayer extract
469
263
  ```
470
264
 
471
- > `useLocale` フックの詳細については、[ドキュメント](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ja/packages/react-intlayer/useLocale.md)を参照してください。
265
+ </Tab>
266
+ <Tab value='Babelコンパイラ'>
472
267
 
473
- ### ステップ10: HTML属性の管理を追加(オプション)
268
+ ```bash packageManager="npm"
269
+ npm install @intlayer/babel --save-dev
270
+ ```
474
271
 
475
- HTMLのlang属性とdir属性を管理するフックを作成します:
272
+ ```bash packageManager="pnpm"
273
+ pnpm add @intlayer/babel --save-dev
274
+ ```
476
275
 
477
- ```tsx fileName="app/hooks/useI18nHTMLAttributes.tsx"
478
- import { getHTMLTextDir } from "intlayer";
479
- import { useEffect } from "react";
480
- import { useLocale } from "react-intlayer";
276
+ ```bash packageManager="yarn"
277
+ yarn add @intlayer/babel --save-dev
278
+ ```
481
279
 
482
- export const useI18nHTMLAttributes = () => {
483
- const { locale } = useLocale();
280
+ ```bash packageManager="bun"
281
+ bun add @intlayer/babel --dev
282
+ ```
484
283
 
485
- useEffect(() => {
486
- document.documentElement.lang = locale;
487
- document.documentElement.dir = getHTMLTextDir(locale);
488
- }, [locale]);
284
+ ```js fileName="babel.config.js"
285
+ const {
286
+ intlayerExtractBabelPlugin,
287
+ getExtractPluginOptions,
288
+ } = require("@intlayer/babel");
289
+
290
+ module.exports = {
291
+ presets: ["next/babel"],
292
+ plugins: [
293
+ // コンポーネントから辞書へコンテンツを抽出する
294
+ [intlayerExtractBabelPlugin, getExtractPluginOptions()],
295
+ ],
489
296
  };
490
297
  ```
491
298
 
492
- 次に、ルートコンポーネントでこれを使用します:
493
-
494
- ```tsx fileName="app/routes/layout.tsx"
495
- import { Outlet } from "react-router";
496
- import { IntlayerProvider } from "react-intlayer";
497
-
498
- import { useI18nHTMLAttributes } from "app/hooks/useI18nHTMLAttributes"; // フックをインポート
499
-
500
- export default function RootLayout() {
501
- useI18nHTMLAttributes(); // フックを呼び出す
502
-
503
- return (
504
- <IntlayerProvider>
505
- <Outlet />
506
- </IntlayerProvider>
507
- );
508
- }
299
+ ```bash packageManager="npm"
300
+ npm run build # または npm run dev
509
301
  ```
510
302
 
511
- ### ステップ11: ミドルウェアを追加する(オプション)
512
-
513
- `intlayerProxy` を使用して、アプリケーションにサーバーサイドルーティングを追加することもできます。このプラグインは、URL に基づいて現在のロケールを自動的に検出し、適切なロケールクッキーを設定します。ロケールが指定されていない場合、プラグインはユーザーのブラウザの言語設定に基づいて最も適切なロケールを判断します。ロケールが検出されない場合は、デフォルトのロケールにリダイレクトします。
514
-
515
- > `intlayerProxy` を本番環境で使用するには、`vite-intlayer` パッケージを `devDependencies` から `dependencies` に切り替える必要があることに注意してください。
303
+ ```bash packageManager="pnpm"
304
+ pnpm run build # または pnpm run dev
305
+ ```
516
306
 
517
- ```typescript {3,7} fileName="vite.config.ts"
518
- import { reactRouter } from "@react-router/dev/vite";
519
- import { defineConfig } from "vite";
520
- import { intlayer, intlayerProxy } from "vite-intlayer";
521
- import tsconfigPaths from "vite-tsconfig-paths";
307
+ ```bash packageManager="yarn"
308
+ yarn build # または yarn dev
309
+ ```
522
310
 
523
- export default defineConfig({
524
- plugins: [reactRouter(), tsconfigPaths(), intlayer(), intlayerProxy()],
525
- });
311
+ ```bash packageManager="bun"
312
+ bun run build # Or bun run dev
526
313
  ```
527
314
 
315
+ </Tab>
316
+ </Tabs>
317
+
528
318
  ---
529
319
 
530
320
  ## TypeScriptの設定