@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-11-20
3
- updatedAt: 2025-12-30
3
+ updatedAt: 2026-03-12
4
4
  title: SvelteKit i18n - SvelteKitアプリの翻訳方法 2026
5
5
  description: SvelteKitのウェブサイトを多言語対応にする方法を紹介します。Server-Side Rendering(SSR)を使って国際化(i18n)および翻訳を行うためのドキュメントに従ってください。
6
6
  keywords:
@@ -95,654 +95,178 @@ Intlayerを使うことで、以下が可能になります:
95
95
  └── vite.config.ts
96
96
  ```
97
97
 
98
- ### ステップ 1: 依存関係のインストール
98
+ ### (オプション) ステップ 1 : コンポーネントのコンテンツを抽出する
99
99
 
100
- npm を使用して必要なパッケージをインストールします:
100
+ 既存のコードベースがある場合、数千のファイルを変換するのは時間がかかることがあります。
101
101
 
102
- ```bash packageManager="npm"
103
- npm install intlayer svelte-intlayer
104
- npm install vite-intlayer --save-dev
105
- npx intlayer init
106
- ```
107
-
108
- ```bash packageManager="pnpm"
109
- pnpm add intlayer svelte-intlayer
110
- pnpm add vite-intlayer --save-dev
111
- pnpm intlayer init
112
- ```
113
-
114
- ```bash packageManager="yarn"
115
- yarn add intlayer svelte-intlayer
116
- yarn add vite-intlayer --save-dev
117
- yarn intlayer init
118
- ```
119
-
120
- ```bash packageManager="bun"
121
- bun add intlayer svelte-intlayer
122
- bun add vite-intlayer --save-dev
123
- bunx intlayer init
124
- ```
125
-
126
- - **intlayer**: コアのi18nパッケージです。
127
- - **svelte-intlayer**: Svelte/SvelteKit用のコンテキストプロバイダーとストアを提供します。
128
- - **vite-intlayer**: コンテンツ宣言をビルドプロセスに統合するためのViteプラグインです。
102
+ このプロセスを容易にするために、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) を提案しています。
129
103
 
130
- ### ステップ 2: プロジェクトの設定
104
+ セットアップするには、`intlayer.config.ts` ファイルに `compiler` セクションを追加します。
131
105
 
132
- プロジェクトのルートに設定ファイルを作成します:
133
-
134
- ```typescript fileName="intlayer.config.ts"
135
- import { Locales, type IntlayerConfig } from "intlayer";
106
+ ```typescript fileName="intlayer.config.ts" codeFormat="typescript"
107
+ import { type IntlayerConfig } from "intlayer";
136
108
 
137
109
  const config: IntlayerConfig = {
138
- internationalization: {
139
- locales: [Locales.ENGLISH, Locales.FRENCH, Locales.SPANISH],
140
- defaultLocale: Locales.ENGLISH,
110
+ // ... 他の構成
111
+ compiler: {
112
+ /**
113
+ * コンパイラを有効にするかどうかを指定します。
114
+ */
115
+ enabled: true,
116
+
117
+ /**
118
+ * 出力ファイルのパスを定義します。
119
+ */
120
+ output: ({ fileName, extension }) => `./${fileName}${extension}`,
121
+
122
+ /**
123
+ * 変換後にコンポーネントを保存するかどうかを指定します。これにより、コンパイラを一度だけ実行してアプリを変換し、その後削除することができます。
124
+ */
125
+ saveComponents: false,
126
+
127
+ /**
128
+ * 辞書キーの接頭辞
129
+ */
130
+ dictionaryKeyPrefix: "",
141
131
  },
142
132
  };
143
133
 
144
134
  export default config;
145
135
  ```
146
136
 
147
- ### ステップ 3: Vite設定にIntlayerを統合する
148
-
149
- `vite.config.ts`を更新してIntlayerプラグインを含めます。このプラグインはコンテンツファイルのトランスパイルを処理します。
150
-
151
- ```typescript fileName="vite.config.ts"
152
- import { sveltekit } from "@sveltejs/kit/vite";
153
- import { defineConfig } from "vite";
154
- import { intlayer } from "vite-intlayer";
155
-
156
- export default defineConfig({
157
- plugins: [intlayer(), sveltekit()], // 順序が重要です。IntlayerはSvelteKitの前に配置してください
158
- });
159
- ```
160
-
161
- ### ステップ4: コンテンツの宣言
162
-
163
- `src`フォルダ内の任意の場所(例: `src/lib/content` やコンポーネントと同じ場所)にコンテンツ宣言ファイルを作成します。これらのファイルは、各ロケールごとに `t()` 関数を使用してアプリケーションの翻訳可能なコンテンツを定義します。
164
-
165
- ```ts fileName="src/features/hero/hero.content.ts" contentDeclarationFormat="typescript"
166
- import { t, type Dictionary } from "intlayer";
167
-
168
- const heroContent = {
169
- key: "hero-section",
170
- content: {
171
- title: t({
172
- en: "Welcome to SvelteKit",
173
- fr: "Bienvenue sur SvelteKit",
174
- es: "Bienvenido a SvelteKit",
175
- }),
137
+ ```javascript fileName="intlayer.config.mjs" codeFormat="esm"
138
+ /** @type {import('intlayer').IntlayerConfig} */
139
+ const config = {
140
+ // ... 他の構成
141
+ compiler: {
142
+ /**
143
+ * コンパイラを有効にするかどうかを指定します。
144
+ */
145
+ enabled: true,
146
+
147
+ /**
148
+ * 出力ファイルのパスを定義します。
149
+ */
150
+ output: ({ fileName, extension }) => `./${fileName}${extension}`,
151
+
152
+ /**
153
+ * 変換後にコンポーネントを保存するかどうかを指定します。これにより、コンパイラを一度だけ実行してアプリを変換し、その後削除することができます。
154
+ */
155
+ saveComponents: false,
156
+
157
+ /**
158
+ * 辞書キーの接頭辞
159
+ */
160
+ dictionaryKeyPrefix: "",
176
161
  },
177
- } satisfies Dictionary;
162
+ };
178
163
 
179
- export default heroContent;
164
+ export default config;
180
165
  ```
181
166
 
182
- ### ステップ5: コンポーネントでIntlayerを利用する
183
-
184
- 今や、任意のSvelteコンポーネント内で`useIntlayer`関数を使用できます。この関数はリアクティブなストアを返し、ロケールが変更されると自動的に更新されます。関数は現在のロケールを自動的に尊重します(SSRおよびクライアントサイドのナビゲーションの両方で)。
185
-
186
- > **注意:** `useIntlayer`はSvelteのストアを返すため、そのリアクティブな値にアクセスするには`---
187
- > createdAt: 2025-11-20
188
- > updatedAt: 2025-11-20
189
- > title: SvelteKitアプリを翻訳する方法 – i18nガイド 2026
190
- > description: SvelteKitのウェブサイトを多言語対応にする方法を紹介します。Server-Side Rendering(SSR)を使って国際化(i18n)および翻訳を行うためのドキュメントに従ってください。
191
- > keywords:
192
-
193
- - 国際化
194
- - ドキュメント
195
- - Intlayer
196
- - SvelteKit
197
- - JavaScript
198
- - SSR
199
- slugs:
200
- - doc
201
- - environment
202
- - sveltekit
203
- applicationTemplate: https://github.com/aymericzip/intlayer-sveltekit-template
204
- history:
205
- - version: 7.1.10
206
- date: 2025-11-20
207
- changes: 初期履歴
208
-
209
- ---
210
-
211
- # Intlayerを使ってSvelteKitのウェブサイトを翻訳する | 国際化(i18n)
212
-
213
- ## 目次
214
-
215
- <TOC/>
216
-
217
- ## Intlayerとは何ですか?
218
-
219
- **Intlayer**は、モダンなウェブアプリケーションにおける多言語対応を簡素化するために設計された革新的なオープンソースの国際化(i18n)ライブラリです。**SvelteKit**のサーバーサイドレンダリング(SSR)機能とシームレスに連携します。
220
-
221
- Intlayerを使うことで、以下が可能になります:
222
-
223
- - **コンポーネントレベルで宣言的な辞書を使い、翻訳を簡単に管理**できます。
224
- - **メタデータ、ルート、コンテンツを動的にローカライズ**できます。
225
- - **自動生成される型情報でTypeScriptのサポートを保証**します。
226
- - **SvelteKitのSSRを活用してSEOに優しい国際化を実現**します。
227
-
228
- ---
229
-
230
- ## SvelteKitアプリケーションでIntlayerをセットアップするステップバイステップガイド
231
-
232
- まずは新しいSvelteKitプロジェクトを作成しましょう。以下は最終的に作成する構成です:
167
+ ```javascript fileName="intlayer.config.cjs" codeFormat="commonjs"
168
+ /** @type {import('intlayer').IntlayerConfig} */
169
+ const config = {
170
+ // ... 他の構成
171
+ compiler: {
172
+ /**
173
+ * コンパイラを有効にするかどうかを指定します。
174
+ */
175
+ enabled: true,
176
+
177
+ /**
178
+ * 出力ファイルのパスを定義します。
179
+ */
180
+ output: ({ fileName, extension }) => `./${fileName}${extension}`,
181
+
182
+ /**
183
+ * 変換後にコンポーネントを保存するかどうかを指定します。これにより、コンパイラを一度だけ実行してアプリを変換し、その後削除することができます。
184
+ */
185
+ saveComponents: false,
186
+
187
+ /**
188
+ * 辞書キーの接頭辞
189
+ */
190
+ dictionaryKeyPrefix: "",
191
+ },
192
+ };
233
193
 
234
- ```bash
235
- .
236
- ├── intlayer.config.ts
237
- ├── package.json
238
- ├── src
239
- │ ├── app.d.ts
240
- │   ├── app.html
241
- │   ├── hooks.server.ts
242
- │   ├── lib
243
- │   │   ├── getLocale.ts
244
- │   │   ├── LocaleSwitcher.svelte
245
- │   │   └── LocalizedLink.svelte
246
- │   ├── params
247
- │   │   └── locale.ts
248
- │   └── routes
249
- │   ├── [[locale=locale]]
250
- │   │   ├── +layout.svelte
251
- │   │   ├── +layout.ts
252
- │   │   ├── +page.svelte
253
- │   │   ├── +page.ts
254
- │   │   ├── about
255
- │   │   │   ├── +page.svelte
256
- │   │   │   ├── +page.ts
257
- │   │   │   └── page.content.ts
258
- │   │   ├── Counter.content.ts
259
- │   │   ├── Counter.svelte
260
- │   │   ├── Header.content.ts
261
- │   │   ├── Header.svelte
262
- │   │   ├── home.content.ts
263
- │   │   └── layout.content.ts
264
- │   ├── +layout.svelte
265
- │   └── layout.css
266
- ├── static
267
- │   ├── favicon.svg
268
- │   └── robots.txt
269
- ├── svelte.config.js
270
- ├── tsconfig.json
271
- └── vite.config.ts
194
+ module.exports = config;
272
195
  ```
273
196
 
274
- ### ステップ 1: 依存関係のインストール
197
+ <Tabs>
198
+ <Tab value='抽出コマンド'>
275
199
 
276
- npm を使用して必要なパッケージをインストールします:
200
+ コンポーネントを変換してコンテンツを抽出するためにエクストラクタを実行します
277
201
 
278
202
  ```bash packageManager="npm"
279
- npm install intlayer svelte-intlayer
280
- npm install vite-intlayer --save-dev
281
- npx intlayer init
203
+ npx intlayer extract
282
204
  ```
283
205
 
284
206
  ```bash packageManager="pnpm"
285
- pnpm add intlayer svelte-intlayer
286
- pnpm add vite-intlayer --save-dev
287
- pnpm intlayer init
207
+ pnpm intlayer extract
288
208
  ```
289
209
 
290
210
  ```bash packageManager="yarn"
291
- yarn add intlayer svelte-intlayer
292
- yarn add vite-intlayer --save-dev
293
- yarn intlayer init
211
+ yarn intlayer extract
294
212
  ```
295
213
 
296
214
  ```bash packageManager="bun"
297
- bun add intlayer svelte-intlayer
298
- bun add vite-intlayer --save-dev
299
- bunx intlayer init
300
- ```
301
-
302
- - **intlayer**: コアのi18nパッケージです。
303
- - **svelte-intlayer**: Svelte/SvelteKit用のコンテキストプロバイダーとストアを提供します。
304
- - **vite-intlayer**: コンテンツ宣言をビルドプロセスに統合するためのViteプラグインです。
305
-
306
- ### ステップ 2: プロジェクトの設定
307
-
308
- プロジェクトのルートに設定ファイルを作成します:
309
-
310
- ```typescript fileName="intlayer.config.ts"
311
- import { Locales, type IntlayerConfig } from "intlayer";
312
-
313
- const config: IntlayerConfig = {
314
- internationalization: {
315
- locales: [Locales.ENGLISH, Locales.FRENCH, Locales.SPANISH],
316
- defaultLocale: Locales.ENGLISH,
317
- },
318
- };
319
-
320
- export default config;
321
- ```
322
-
323
- ### ステップ 3: Vite設定にIntlayerを統合する
324
-
325
- `vite.config.ts`を更新してIntlayerプラグインを含めます。このプラグインはコンテンツファイルのトランスパイルを処理します。
326
-
327
- ```typescript fileName="vite.config.ts"
328
- import { sveltekit } from "@sveltejs/kit/vite";
329
- import { defineConfig } from "vite";
330
- import { intlayer } from "vite-intlayer";
331
-
332
- export default defineConfig({
333
- plugins: [intlayer(), sveltekit()], // 順序が重要です。IntlayerはSvelteKitの前に配置してください
334
- });
335
- ```
336
-
337
- ### ステップ4: コンテンツの宣言
338
-
339
- `src`フォルダ内の任意の場所(例: `src/lib/content` やコンポーネントと同じ場所)にコンテンツ宣言ファイルを作成します。これらのファイルは、各ロケールごとに `t()` 関数を使用してアプリケーションの翻訳可能なコンテンツを定義します。
340
-
341
- ```ts fileName="src/features/hero/hero.content.ts" contentDeclarationFormat="typescript"
342
- import { t, type Dictionary } from "intlayer";
343
-
344
- const heroContent = {
345
- key: "hero-section",
346
- content: {
347
- title: t({
348
- en: "Welcome to SvelteKit",
349
- fr: "Bienvenue sur SvelteKit",
350
- es: "Bienvenido a SvelteKit",
351
- }),
352
- },
353
- } satisfies Dictionary;
354
-
355
- export default heroContent;
356
- ```
357
-
358
- ### ステップ5: コンポーネントでIntlayerを利用する
359
-
360
- プレフィックスを使用する必要があります(例:`$content.title`)。
361
-
362
- ```svelte fileName="src/lib/components/Component.svelte"
363
- <script lang="ts">
364
- import { useIntlayer } from "svelte-intlayer";
365
-
366
- // "hero-section"はステップ4で定義したキーに対応します
367
- const content = useIntlayer("hero-section");
368
- </script>
369
-
370
- <!-- コンテンツを単純にレンダリング -->
371
- <h1>{$content.title}</h1>
372
- <!-- エディターを使って編集可能なコンテンツとしてレンダリング -->
373
- <h1><svelte:component this={$content.title} /></h1>
374
- <!-- コンテンツを文字列としてレンダリングする場合 -->
375
- <div aria-label={$content.title.value}></div>
376
- ```
377
-
378
- ### (オプション)ステップ6: ルーティングの設定
379
-
380
- 以下の手順では、SvelteKitでロケールベースのルーティングを設定する方法を示します。これにより、URLにロケールのプレフィックス(例:`/en/about`、`/fr/about`)を含めることができ、SEOやユーザー体験が向上します。
381
-
382
- ```bash
383
- .
384
- └─── src
385
- ├── app.d.ts # ロケールタイプを定義
386
- ├── hooks.server.ts # ロケールルーティングを管理
387
- ├── lib
388
- │   └── getLocale.ts # ヘッダーやクッキーからロケールをチェック
389
- ├── params
390
- │   └── locale.ts # ロケールパラメータを定義
391
- └── routes
392
- ├── [[locale=locale]] # ルートグループでロケールを設定するためにラップ
393
- │   ├── +layout.svelte # ルートのローカルレイアウト
394
- │   ├── +layout.ts
395
- │   ├── +page.svelte
396
- │   ├── +page.ts
397
- │   └── about
398
- │      ├── +page.svelte
399
- │      └── +page.ts
400
- └── +layout.svelte # フォントとグローバルスタイルのためのルートレイアウト
215
+ bunx intlayer extract
401
216
  ```
402
217
 
403
- ### ステップ7: サーバーサイドのロケール検出を処理する(Hooks)
404
-
405
- SvelteKitでは、SSR中に正しいコンテンツをレンダリングするためにサーバーがユーザーのロケールを知る必要があります。`hooks.server.ts`を使ってURLやクッキーからロケールを検出します。
406
-
407
- `src/hooks.server.ts`を作成または修正してください:
408
-
409
- ```typescript fileName="src/hooks.server.ts"
410
- import type { Handle } from "@sveltejs/kit";
411
- import { getLocalizedUrl } from "intlayer";
412
- import { getLocale } from "$lib/getLocale";
218
+ </Tab>
219
+ <Tab value='Babelコンパイラ'>
413
220
 
414
- export const handle: Handle = async ({ event, resolve }) => {
415
- const detectedLocale = getLocale(event);
416
-
417
- // 現在のパスがすでにロケールで始まっているかを確認(例: /fr, /en)
418
- const pathname = event.url.pathname;
419
- const targetPathname = getLocalizedUrl(pathname, detectedLocale);
420
-
421
- // URLにロケールが含まれていない場合(例: ユーザーが "/" にアクセスした場合)、リダイレクトする
422
- if (targetPathname !== pathname) {
423
- return new Response(undefined, {
424
- headers: { Location: targetPathname },
425
- status: 307, // 一時的なリダイレクト
426
- });
427
- }
428
-
429
- return resolve(event, {
430
- transformPageChunk: ({ html }) => html.replace("%lang%", detectedLocale),
431
- });
432
- };
221
+ ```bash packageManager="npm"
222
+ npm install @intlayer/babel --save-dev
433
223
  ```
434
224
 
435
- 次に、リクエストイベントからユーザーのロケールを取得するヘルパーを作成します:
436
-
437
- ```typescript fileName="src/lib/getLocale.ts"
438
- import {
439
- configuration,
440
- getLocaleFromStorage,
441
- localeDetector,
442
- type Locale,
443
- } from "intlayer";
444
- import type { RequestEvent } from "@sveltejs/kit";
445
-
446
- /**
447
- * リクエストイベントからユーザーのロケールを取得します。
448
- * この関数は `src/hooks.server.ts` の `handle` フックで使用されます。
449
- *
450
- * まず、Intlayerのストレージ(クッキーまたはカスタムヘッダー)からロケールを取得しようとします。
451
- * ロケールが見つからない場合は、ブラウザの "Accept-Language" ネゴシエーションにフォールバックします。
452
- *
453
- * @param event - SvelteKitからのリクエストイベント
454
- * @returns ユーザーのロケール
455
- */
456
- export const getLocale = (event: RequestEvent): Locale => {
457
- const defaultLocale = configuration?.internationalization?.defaultLocale;
458
-
459
- // Intlayerのストレージ(クッキーまたはヘッダー)からロケールを取得しようとする
460
- const storedLocale = getLocaleFromStorage({
461
- // SvelteKitのクッキーアクセス
462
- getCookie: (name: string) => event.cookies.get(name) ?? null,
463
- // SvelteKitのヘッダーアクセス
464
- getHeader: (name: string) => event.request.headers.get(name) ?? null,
465
- });
466
-
467
- if (storedLocale) {
468
- return storedLocale;
469
- }
470
-
471
- // ブラウザの "Accept-Language" ネゴシエーションにフォールバック
472
- const negotiatorHeaders: Record<string, string> = {};
473
-
474
- // SvelteKitのHeadersオブジェクトをプレーンなRecord<string, string>に変換
475
- event.request.headers.forEach((value, key) => {
476
- negotiatorHeaders[key] = value;
477
- });
478
-
479
- // `Accept-Language` ヘッダーからロケールをチェック
480
- const userFallbackLocale = localeDetector(negotiatorHeaders);
481
-
482
- if (userFallbackLocale) {
483
- return userFallbackLocale;
484
- }
485
-
486
- // 一致するものがなければデフォルトのロケールを返す
487
- return defaultLocale;
488
- };
225
+ ```bash packageManager="pnpm"
226
+ pnpm add @intlayer/babel --save-dev
489
227
  ```
490
228
 
491
- > `getLocaleFromStorage` は、設定に応じてヘッダーまたはクッキーからロケールをチェックします。詳細は [Configuration](https://intlayer.org/doc/configuration) を参照してください。
492
-
493
- > `localeDetector` 関数は `Accept-Language` ヘッダーを処理し、最適なマッチを返します。
494
-
495
- ロケールが設定されていない場合は、404エラーを返したいです。これを簡単にするために、ロケールが有効かどうかをチェックする `match` 関数を作成できます。
496
-
497
- ```ts fileName="/src/params/locale.ts"
498
- import { configuration, type Locale } from "intlayer";
499
-
500
- export const match = (
501
- param: Locale = configuration.internationalization.defaultLocale
502
- ): boolean => {
503
- return configuration.internationalization.locales.includes(param);
504
- };
229
+ ```bash packageManager="yarn"
230
+ yarn add @intlayer/babel --save-dev
505
231
  ```
506
232
 
507
- > **注意:** `src/app.d.ts` にロケール定義が含まれていることを確認してください:
508
- >
509
- > ```typescript
510
- > declare global {
511
- > namespace App {
512
- > interface Locals {
513
- > locale: import("intlayer").Locale;
514
- > }
515
- > }
516
- > }
517
- > ```
518
-
519
- `+layout.svelte` ファイルでは、i18n に関連しない静的コンテンツのみを保持するために、すべての内容を削除できます。
520
-
521
- ```svelte fileName="src/+layout.svelte"
522
- <script lang="ts">
523
- import './layout.css';
524
-
525
- let { children } = $props();
526
- </script>
527
-
528
- <div class="app">
529
- {@render children()}
530
- </div>
531
-
532
- <style>
533
- .app {
534
- /* */
535
- }
536
- </style>
233
+ ```bash packageManager="bun"
234
+ bun add @intlayer/babel --dev
537
235
  ```
538
236
 
539
- 次に、`[[locale=locale]]` グループの下に新しいページとレイアウトを作成します。
540
-
541
- ```ts fileName="src/routes/[[locale=locale]]/+layout.ts"
542
- import type { Load } from "@sveltejs/kit";
543
- import { configuration, type Locale } from "intlayer";
544
-
545
- export const prerender = true;
546
-
547
- // ジェネリックな Load タイプを使用
548
- export const load: Load = ({ params }) => {
549
- const locale: Locale =
550
- (params.locale as Locale) ??
551
- configuration.internationalization.defaultLocale;
237
+ ```js fileName="babel.config.js"
238
+ const {
239
+ intlayerExtractBabelPlugin,
240
+ getExtractPluginOptions,
241
+ } = require("@intlayer/babel");
552
242
 
553
- return {
554
- locale,
555
- };
243
+ module.exports = {
244
+ presets: ["next/babel"],
245
+ plugins: [
246
+ // コンポーネントから辞書へコンテンツを抽出する
247
+ [intlayerExtractBabelPlugin, getExtractPluginOptions()],
248
+ ],
556
249
  };
557
250
  ```
558
251
 
559
- ```svelte fileName="src/routes/[[locale=locale]]/+layout.svelte"
560
- <script lang="ts">
561
- import type { Snippet } from 'svelte';
562
- import { useIntlayer, setupIntlayer } from 'svelte-intlayer';
563
- import Header from './Header.svelte';
564
- import type { LayoutData } from './$types';
565
-
566
- let { children, data }: { children: Snippet, data: LayoutData } = $props();
567
-
568
- // ルートからのロケールでIntlayerを初期化
569
- $effect(() => {
570
- setupIntlayer(data.locale);
571
- });
572
- // レイアウトのコンテンツ辞書を使用
573
- const layoutContent = useIntlayer('layout');
574
- </script>
575
-
576
- <Header />
577
-
578
- <main>
579
- {@render children()}
580
- </main>
581
-
582
- <footer>
583
- <p>
584
- {$layoutContent.footer.prefix.value}{' '}
585
- <a href="https://svelte.dev/docs/kit">{$layoutContent.footer.linkLabel.value}</a>{' '}
586
- {$layoutContent.footer.suffix.value}
587
- </p>
588
- </footer>
589
-
590
- <style>
591
- /* */
592
- </style>
593
- ```
594
-
595
- ```ts fileName="src/routes/[[locale=locale]]/+page.ts"
596
- export const prerender = true;
597
- ```
598
-
599
- ```svelte fileName="src/routes/[[locale=locale]]/+page.svelte"
600
- <script lang="ts">
601
- import { useIntlayer } from 'svelte-intlayer';
602
-
603
- // ホームコンテンツ辞書を使用
604
- const homeContent = useIntlayer('home');
605
- </script>
606
-
607
- <svelte:head>
608
- <title>{$homeContent.title.value}</title>
609
- </svelte:head>
610
-
611
- <section>
612
- <h1>
613
- {$homeContent.title}
614
- </h1>
615
- </section>
616
-
617
- <style>
618
- /* */
619
- </style>
620
- ```
621
-
622
- ### (オプション)ステップ8:国際化されたリンク
623
-
624
- SEOのために、ルートにロケールをプレフィックスとして付けることを推奨します(例:`/en/about`、`/fr/about`)。このコンポーネントは、現在のロケールを自動的にリンクにプレフィックスします。
625
-
626
- ```svelte fileName="src/lib/components/LocalizedLink.svelte"
627
- <script lang="ts">
628
- import { getLocalizedUrl } from "intlayer";
629
- import { useLocale } from 'svelte-intlayer';
630
-
631
- let { href = "" } = $props();
632
- const { locale } = useLocale();
633
-
634
- // 現在のロケールでURLにプレフィックスを付けるヘルパー
635
- $: localizedHref = getLocalizedUrl(href, $locale);
636
- </script>
637
-
638
- <a href={localizedHref}>
639
- <slot />
640
- </a>
641
- ```
642
-
643
- SvelteKitの`goto`を使用する場合も、同じロジックを`getLocalizedUrl`で使ってローカライズされたURLにナビゲートできます:
644
-
645
- ```typescript
646
- import { goto } from "$app/navigation";
647
- import { getLocalizedUrl } from "intlayer";
648
- import { useLocale } from "svelte-intlayer";
649
-
650
- const { locale } = useLocale();
651
- const localizedPath = getLocalizedUrl("/about", $locale);
652
- goto(localizedPath); // ロケールに応じて /en/about または /fr/about に遷移します
653
- ```
654
-
655
- ### (オプション)ステップ9: 言語切り替えコンポーネント
656
-
657
- ユーザーが言語を切り替えられるように、URLを更新します。
658
-
659
- ```svelte fileName="src/lib/components/LanguageSwitcher.svelte"
660
- <script lang="ts">
661
- import { getLocalizedUrl, getLocaleName } from 'intlayer';
662
- import { useLocale } from 'svelte-intlayer';
663
- import { page } from '$app/stores';
664
- import { goto } from '$app/navigation';
665
-
666
- const { locale, setLocale, availableLocales } = useLocale({
667
- onLocaleChange: (newLocale) => {
668
- const localizedPath = getLocalizedUrl($page.url.pathname, newLocale);
669
- goto(localizedPath);
670
- },
671
- });
672
- </script>
673
-
674
- <ul class="locale-list">
675
- {#each availableLocales as localeEl}
676
- <li>
677
- <a
678
- href={getLocalizedUrl($page.url.pathname, localeEl)}
679
- onclick={(e) => {
680
- e.preventDefault();
681
- setLocale(localeEl); // ストア内のロケールを設定し、onLocaleChangeをトリガーします
682
- }}
683
- class:active={$locale === localeEl}
684
- >
685
- {getLocaleName(localeEl)}
686
- </a>
687
- </li>
688
- {/each}
689
- </ul>
690
-
691
- <style>
692
- /* */
693
- </style>
252
+ ```bash packageManager="npm"
253
+ npm run build # または npm run dev
694
254
  ```
695
255
 
696
- ### (オプション)ステップ10:バックエンドプロキシの追加
697
-
698
- SvelteKitアプリケーションにバックエンドプロキシを追加するには、`vite-intlayer`プラグインが提供する`intlayerProxy`関数を使用できます。このプラグインは、URL、クッキー、およびブラウザの言語設定に基づいてユーザーに最適なロケールを自動的に検出します。
699
-
700
- ```ts fileName="vite.config.ts"
701
- import { defineConfig } from "vite";
702
- import { intlayer, intlayerProxy } from "vite-intlayer";
703
- import { sveltekit } from "@sveltejs/kit/vite";
704
-
705
- // https://vitejs.dev/config/
706
- export default defineConfig({
707
- plugins: [intlayer(), intlayerProxy(), sveltekit()],
708
- });
256
+ ```bash packageManager="pnpm"
257
+ pnpm run build # または pnpm run dev
709
258
  ```
710
259
 
711
- ### (オプション)ステップ11:intlayerエディター / CMSのセットアップ
712
-
713
- intlayerエディターをセットアップするには、[intlayerエディターのドキュメント](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ja/intlayer_visual_editor.md)に従う必要があります。
714
-
715
- intlayer CMSをセットアップするには、[intlayer CMSのドキュメント](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ja/intlayer_CMS.md)に従う必要があります。
716
-
717
- intlayerエディターのセレクターを可視化するためには、intlayerコンテンツ内でコンポーネント構文を使用する必要があります。
718
-
719
- ```svelte fileName="Component.svelte"
720
- <script lang="ts">
721
- import { useIntlayer } from "svelte-intlayer";
722
-
723
- const content = useIntlayer("component");
724
- </script>
725
-
726
- <div>
727
-
728
- <!-- コンテンツをシンプルな内容としてレンダリング -->
729
- <h1>{$content.title}</h1>
730
-
731
- <!-- コンポーネントとしてコンテンツをレンダリング(エディターに必要) -->
732
- <svelte:component this={$content.component} />
733
- </div>
260
+ ```bash packageManager="yarn"
261
+ yarn build # または yarn dev
734
262
  ```
735
263
 
736
- ### Git設定
737
-
738
- Intlayerによって生成されるファイルは無視することを推奨します。
739
-
740
- ```plaintext fileName=".gitignore"
741
- # Intlayerによって生成されたファイルを無視
742
- .intlayer
264
+ ```bash packageManager="bun"
265
+ bun run build # Or bun run dev
743
266
  ```
744
267
 
745
- ---
268
+ </Tab>
269
+ </Tabs>
746
270
 
747
271
  ### さらに進む
748
272