@intlayer/docs 7.1.8 → 7.2.0

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 (44) hide show
  1. package/README.md +1 -0
  2. package/dist/cjs/generated/docs.entry.cjs +19 -0
  3. package/dist/cjs/generated/docs.entry.cjs.map +1 -1
  4. package/dist/esm/generated/docs.entry.mjs +19 -0
  5. package/dist/esm/generated/docs.entry.mjs.map +1 -1
  6. package/dist/types/generated/docs.entry.d.ts +1 -0
  7. package/dist/types/generated/docs.entry.d.ts.map +1 -1
  8. package/docs/ar/intlayer_with_svelte_kit.md +730 -0
  9. package/docs/ar/intlayer_with_vite+svelte.md +288 -104
  10. package/docs/de/intlayer_with_svelte_kit.md +730 -0
  11. package/docs/de/intlayer_with_vite+svelte.md +302 -101
  12. package/docs/en/intlayer_with_svelte_kit.md +560 -0
  13. package/docs/en/intlayer_with_vite+svelte.md +153 -15
  14. package/docs/en/introduction.md +2 -0
  15. package/docs/en-GB/intlayer_with_svelte_kit.md +730 -0
  16. package/docs/en-GB/intlayer_with_vite+svelte.md +262 -84
  17. package/docs/es/intlayer_with_svelte_kit.md +730 -0
  18. package/docs/es/intlayer_with_vite+svelte.md +300 -107
  19. package/docs/fr/intlayer_with_svelte_kit.md +762 -0
  20. package/docs/fr/intlayer_with_vite+svelte.md +297 -101
  21. package/docs/hi/intlayer_with_svelte_kit.md +730 -0
  22. package/docs/hi/intlayer_with_vite+svelte.md +298 -108
  23. package/docs/id/intlayer_with_svelte_kit.md +730 -0
  24. package/docs/id/intlayer_with_vite+svelte.md +277 -99
  25. package/docs/it/intlayer_with_svelte_kit.md +762 -0
  26. package/docs/it/intlayer_with_vite+svelte.md +275 -99
  27. package/docs/ja/intlayer_with_svelte_kit.md +730 -0
  28. package/docs/ja/intlayer_with_vite+svelte.md +295 -110
  29. package/docs/ko/intlayer_with_svelte_kit.md +730 -0
  30. package/docs/ko/intlayer_with_vite+svelte.md +286 -199
  31. package/docs/pl/intlayer_with_svelte_kit.md +732 -0
  32. package/docs/pl/intlayer_with_vite+svelte.md +273 -101
  33. package/docs/pt/intlayer_with_svelte_kit.md +764 -0
  34. package/docs/pt/intlayer_with_vite+svelte.md +290 -96
  35. package/docs/ru/intlayer_with_svelte_kit.md +730 -0
  36. package/docs/ru/intlayer_with_vite+svelte.md +275 -99
  37. package/docs/tr/intlayer_with_svelte_kit.md +730 -0
  38. package/docs/tr/intlayer_with_vite+svelte.md +297 -119
  39. package/docs/vi/intlayer_with_svelte_kit.md +730 -0
  40. package/docs/vi/intlayer_with_vite+svelte.md +275 -102
  41. package/docs/zh/intlayer_with_svelte_kit.md +730 -0
  42. package/docs/zh/intlayer_with_vite+svelte.md +309 -107
  43. package/package.json +6 -6
  44. package/src/generated/docs.entry.ts +19 -0
@@ -0,0 +1,730 @@
1
+ ---
2
+ createdAt: 2025-11-20
3
+ updatedAt: 2025-11-20
4
+ title: Cara menerjemahkan aplikasi SvelteKit Anda – panduan i18n 2025
5
+ description: Temukan cara membuat situs web SvelteKit Anda menjadi multibahasa. Ikuti dokumentasi untuk melakukan internasionalisasi (i18n) dan menerjemahkannya menggunakan Server-Side Rendering (SSR).
6
+ keywords:
7
+ - Internasionalisasi
8
+ - Dokumentasi
9
+ - Intlayer
10
+ - SvelteKit
11
+ - JavaScript
12
+ - SSR
13
+ slugs:
14
+ - doc
15
+ - environment
16
+ - sveltekit
17
+ applicationTemplate: https://github.com/aymericzip/intlayer-sveltekit-template
18
+ history:
19
+ - version: 7.1.10
20
+ date: 2025-11-20
21
+ changes: Inisialisasi riwayat
22
+ ---
23
+
24
+ # Terjemahkan situs web SvelteKit Anda menggunakan Intlayer | Internasionalisasi (i18n)
25
+
26
+ ## Daftar Isi
27
+
28
+ <TOC/>
29
+
30
+ ## Apa itu Intlayer?
31
+
32
+ **Intlayer** adalah perpustakaan internasionalisasi (i18n) sumber terbuka yang inovatif, dirancang untuk menyederhanakan dukungan multibahasa dalam aplikasi web modern. Ini bekerja mulus dengan kemampuan Server-Side Rendering (SSR) dari **SvelteKit**.
33
+
34
+ Dengan Intlayer, Anda dapat:
35
+
36
+ - **Mengelola terjemahan dengan mudah** menggunakan kamus deklaratif di tingkat komponen.
37
+ - **Melokalkan metadata**, rute, dan konten secara dinamis.
38
+ - **Memastikan dukungan TypeScript** dengan tipe yang dihasilkan secara otomatis.
39
+ - **Memanfaatkan SSR SvelteKit** untuk internasionalisasi yang ramah SEO.
40
+
41
+ ---
42
+
43
+ ## Panduan Langkah demi Langkah untuk Mengatur Intlayer dalam Aplikasi SvelteKit
44
+
45
+ Untuk memulai, buat proyek SvelteKit baru. Berikut adalah struktur akhir yang akan kita buat:
46
+
47
+ ```bash
48
+ .
49
+ ├── intlayer.config.ts
50
+ ├── package.json
51
+ ├── src
52
+ │ ├── app.d.ts
53
+ │   ├── app.html
54
+ │   ├── hooks.server.ts
55
+ │   ├── lib
56
+ │   │   ├── getLocale.ts
57
+ │   │   ├── LocaleSwitcher.svelte
58
+ │   │   └── LocalizedLink.svelte
59
+ │   ├── params
60
+ │   │   └── locale.ts
61
+ │   └── routes
62
+ │   ├── [[locale=locale]]
63
+ │   │   ├── +layout.svelte
64
+ │   │   ├── +layout.ts
65
+ │   │   ├── +page.svelte
66
+ │   │   ├── +page.ts
67
+ │   │   ├── about
68
+ │   │   │   ├── +page.svelte
69
+ │   │   │   ├── +page.ts
70
+ │   │   │   └── page.content.ts
71
+ │   │   ├── Counter.content.ts
72
+ │   │   ├── Counter.svelte
73
+ │   │   ├── Header.content.ts
74
+ │   │   ├── Header.svelte
75
+ │   │   ├── home.content.ts
76
+ │   │   └── layout.content.ts
77
+ │   ├── +layout.svelte
78
+ │   └── layout.css
79
+ ├── static
80
+ │   ├── favicon.svg
81
+ │   └── robots.txt
82
+ ├── svelte.config.js
83
+ ├── tsconfig.json
84
+ └── vite.config.ts
85
+ ```
86
+
87
+ ### Langkah 1: Instalasi Dependencies
88
+
89
+ Instal paket yang diperlukan menggunakan npm:
90
+
91
+ ```bash packageManager="npm"
92
+ npm install intlayer svelte-intlayer
93
+ npm install vite-intlayer --save-dev
94
+ ```
95
+
96
+ ```bash packageManager="pnpm"
97
+ pnpm add intlayer svelte-intlayer
98
+ pnpm add vite-intlayer --save-dev
99
+ ```
100
+
101
+ ```bash packageManager="yarn"
102
+ yarn add intlayer svelte-intlayer
103
+ yarn add vite-intlayer --save-dev
104
+ ```
105
+
106
+ ```bash packageManager="bun"
107
+ bun add intlayer svelte-intlayer
108
+ bun add vite-intlayer --save-dev
109
+ ```
110
+
111
+ - **intlayer**: Paket inti i18n.
112
+ - **svelte-intlayer**: Menyediakan context providers dan stores untuk Svelte/SvelteKit.
113
+ - **vite-intlayer**: Plugin Vite untuk mengintegrasikan deklarasi konten dengan proses build.
114
+
115
+ ### Langkah 2: Konfigurasi proyek Anda
116
+
117
+ Buat file konfigurasi di root proyek Anda:
118
+
119
+ ```typescript fileName="intlayer.config.ts"
120
+ import { Locales, type IntlayerConfig } from "intlayer";
121
+
122
+ const config: IntlayerConfig = {
123
+ internationalization: {
124
+ locales: [Locales.ENGLISH, Locales.FRENCH, Locales.SPANISH],
125
+ defaultLocale: Locales.ENGLISH,
126
+ },
127
+ };
128
+
129
+ export default config;
130
+ ```
131
+
132
+ ### Langkah 3: Integrasikan Intlayer dalam Konfigurasi Vite Anda
133
+
134
+ Perbarui `vite.config.ts` Anda untuk menyertakan plugin Intlayer. Plugin ini menangani transpile file konten Anda.
135
+
136
+ ```typescript fileName="vite.config.ts"
137
+ import { sveltekit } from "@sveltejs/kit/vite";
138
+ import { defineConfig } from "vite";
139
+ import { intlayer } from "vite-intlayer";
140
+
141
+ export default defineConfig({
142
+ plugins: [intlayer(), sveltekit()], // urutan penting, Intlayer harus ditempatkan sebelum SvelteKit
143
+ });
144
+ ```
145
+
146
+ ### Langkah 4: Deklarasikan Konten Anda
147
+
148
+ Buat file deklarasi konten Anda di mana saja dalam folder `src` Anda (misalnya, `src/lib/content` atau di samping komponen Anda). File-file ini mendefinisikan konten yang dapat diterjemahkan untuk aplikasi Anda menggunakan fungsi `t()` untuk setiap locale.
149
+
150
+ ```ts fileName="src/features/hero/hero.content.ts" contentDeclarationFormat="typescript"
151
+ import { t, type Dictionary } from "intlayer";
152
+
153
+ const heroContent = {
154
+ key: "hero-section",
155
+ content: {
156
+ title: t({
157
+ en: "Welcome to SvelteKit",
158
+ fr: "Bienvenue sur SvelteKit",
159
+ es: "Bienvenido a SvelteKit",
160
+ }),
161
+ },
162
+ } satisfies Dictionary;
163
+
164
+ export default heroContent;
165
+ ```
166
+
167
+ ### Langkah 5: Gunakan Intlayer dalam Komponen Anda
168
+
169
+ Sekarang Anda dapat menggunakan fungsi `useIntlayer` di komponen Svelte mana pun. Fungsi ini mengembalikan store reaktif yang secara otomatis diperbarui saat locale berubah. Fungsi ini akan secara otomatis menghormati locale saat ini (baik selama SSR maupun navigasi sisi klien).
170
+
171
+ > **Catatan:** `useIntlayer` mengembalikan store Svelte, jadi Anda perlu menggunakan prefix `---
172
+ > createdAt: 2025-11-20
173
+ > updatedAt: 2025-11-20
174
+ > title: Cara menerjemahkan aplikasi SvelteKit Anda – panduan i18n 2025
175
+ > description: Temukan cara membuat situs web SvelteKit Anda menjadi multibahasa. Ikuti dokumentasi untuk melakukan internasionalisasi (i18n) dan menerjemahkannya menggunakan Server-Side Rendering (SSR).
176
+ > keywords:
177
+
178
+ - Internasionalisasi
179
+ - Dokumentasi
180
+ - Intlayer
181
+ - SvelteKit
182
+ - JavaScript
183
+ - SSR
184
+ slugs:
185
+ - doc
186
+ - environment
187
+ - sveltekit
188
+ applicationTemplate: https://github.com/aymericzip/intlayer-sveltekit-template
189
+ history:
190
+ - version: 7.1.10
191
+ date: 2025-11-20
192
+ changes: Inisialisasi riwayat
193
+
194
+ ---
195
+
196
+ # Terjemahkan situs web SvelteKit Anda menggunakan Intlayer | Internasionalisasi (i18n)
197
+
198
+ ## Daftar Isi
199
+
200
+ <TOC/>
201
+
202
+ ## Apa itu Intlayer?
203
+
204
+ **Intlayer** adalah perpustakaan internasionalisasi (i18n) sumber terbuka yang inovatif, dirancang untuk menyederhanakan dukungan multibahasa dalam aplikasi web modern. Ini bekerja mulus dengan kemampuan Server-Side Rendering (SSR) dari **SvelteKit**.
205
+
206
+ Dengan Intlayer, Anda dapat:
207
+
208
+ - **Mengelola terjemahan dengan mudah** menggunakan kamus deklaratif di tingkat komponen.
209
+ - **Melokalkan metadata**, rute, dan konten secara dinamis.
210
+ - **Memastikan dukungan TypeScript** dengan tipe yang dihasilkan secara otomatis.
211
+ - **Memanfaatkan SSR SvelteKit** untuk internasionalisasi yang ramah SEO.
212
+
213
+ ---
214
+
215
+ ## Panduan Langkah demi Langkah untuk Mengatur Intlayer dalam Aplikasi SvelteKit
216
+
217
+ Untuk memulai, buat proyek SvelteKit baru. Berikut adalah struktur akhir yang akan kita buat:
218
+
219
+ ```bash
220
+ .
221
+ ├── intlayer.config.ts
222
+ ├── package.json
223
+ ├── src
224
+ │ ├── app.d.ts
225
+ │   ├── app.html
226
+ │   ├── hooks.server.ts
227
+ │   ├── lib
228
+ │   │   ├── getLocale.ts
229
+ │   │   ├── LocaleSwitcher.svelte
230
+ │   │   └── LocalizedLink.svelte
231
+ │   ├── params
232
+ │   │   └── locale.ts
233
+ │   └── routes
234
+ │   ├── [[locale=locale]]
235
+ │   │   ├── +layout.svelte
236
+ │   │   ├── +layout.ts
237
+ │   │   ├── +page.svelte
238
+ │   │   ├── +page.ts
239
+ │   │   ├── about
240
+ │   │   │   ├── +page.svelte
241
+ │   │   │   ├── +page.ts
242
+ │   │   │   └── page.content.ts
243
+ │   │   ├── Counter.content.ts
244
+ │   │   ├── Counter.svelte
245
+ │   │   ├── Header.content.ts
246
+ │   │   ├── Header.svelte
247
+ │   │   ├── home.content.ts
248
+ │   │   └── layout.content.ts
249
+ │   ├── +layout.svelte
250
+ │   └── layout.css
251
+ ├── static
252
+ │   ├── favicon.svg
253
+ │   └── robots.txt
254
+ ├── svelte.config.js
255
+ ├── tsconfig.json
256
+ └── vite.config.ts
257
+ ```
258
+
259
+ ### Langkah 1: Instalasi Dependencies
260
+
261
+ Instal paket yang diperlukan menggunakan npm:
262
+
263
+ ```bash packageManager="npm"
264
+ npm install intlayer svelte-intlayer
265
+ npm install vite-intlayer --save-dev
266
+ ```
267
+
268
+ ```bash packageManager="pnpm"
269
+ pnpm add intlayer svelte-intlayer
270
+ pnpm add vite-intlayer --save-dev
271
+ ```
272
+
273
+ ```bash packageManager="yarn"
274
+ yarn add intlayer svelte-intlayer
275
+ yarn add vite-intlayer --save-dev
276
+ ```
277
+
278
+ ```bash packageManager="bun"
279
+ bun add intlayer svelte-intlayer
280
+ bun add vite-intlayer --save-dev
281
+ ```
282
+
283
+ - **intlayer**: Paket inti i18n.
284
+ - **svelte-intlayer**: Menyediakan context providers dan stores untuk Svelte/SvelteKit.
285
+ - **vite-intlayer**: Plugin Vite untuk mengintegrasikan deklarasi konten dengan proses build.
286
+
287
+ ### Langkah 2: Konfigurasi proyek Anda
288
+
289
+ Buat file konfigurasi di root proyek Anda:
290
+
291
+ ```typescript fileName="intlayer.config.ts"
292
+ import { Locales, type IntlayerConfig } from "intlayer";
293
+
294
+ const config: IntlayerConfig = {
295
+ internationalization: {
296
+ locales: [Locales.ENGLISH, Locales.FRENCH, Locales.SPANISH],
297
+ defaultLocale: Locales.ENGLISH,
298
+ },
299
+ };
300
+
301
+ export default config;
302
+ ```
303
+
304
+ ### Langkah 3: Integrasikan Intlayer dalam Konfigurasi Vite Anda
305
+
306
+ Perbarui `vite.config.ts` Anda untuk menyertakan plugin Intlayer. Plugin ini menangani transpile file konten Anda.
307
+
308
+ ```typescript fileName="vite.config.ts"
309
+ import { sveltekit } from "@sveltejs/kit/vite";
310
+ import { defineConfig } from "vite";
311
+ import { intlayer } from "vite-intlayer";
312
+
313
+ export default defineConfig({
314
+ plugins: [intlayer(), sveltekit()], // urutan penting, Intlayer harus ditempatkan sebelum SvelteKit
315
+ });
316
+ ```
317
+
318
+ ### Langkah 4: Deklarasikan Konten Anda
319
+
320
+ Buat file deklarasi konten Anda di mana saja dalam folder `src` Anda (misalnya, `src/lib/content` atau di samping komponen Anda). File-file ini mendefinisikan konten yang dapat diterjemahkan untuk aplikasi Anda menggunakan fungsi `t()` untuk setiap locale.
321
+
322
+ ```ts fileName="src/features/hero/hero.content.ts" contentDeclarationFormat="typescript"
323
+ import { t, type Dictionary } from "intlayer";
324
+
325
+ const heroContent = {
326
+ key: "hero-section",
327
+ content: {
328
+ title: t({
329
+ en: "Welcome to SvelteKit",
330
+ fr: "Bienvenue sur SvelteKit",
331
+ es: "Bienvenido a SvelteKit",
332
+ }),
333
+ },
334
+ } satisfies Dictionary;
335
+
336
+ export default heroContent;
337
+ ```
338
+
339
+ ### Langkah 5: Gunakan Intlayer dalam Komponen Anda
340
+
341
+ untuk mengakses nilai reaktifnya (misalnya, `$content.title`).
342
+
343
+ ```svelte fileName="src/lib/components/Component.svelte"
344
+ <script lang="ts">
345
+ import { useIntlayer } from "svelte-intlayer";
346
+
347
+ // "hero-section" sesuai dengan key yang didefinisikan di Langkah 4
348
+ const content = useIntlayer("hero-section");
349
+ </script>
350
+
351
+ <!-- Render konten sebagai konten sederhana -->
352
+ <h1>{$content.title}</h1>
353
+ <!-- Untuk merender konten yang dapat diedit menggunakan editor -->
354
+ <h1><svelte:component this={$content.title} /></h1>
355
+ <!-- Untuk merender konten sebagai string -->
356
+ <div aria-label={$content.title.value}></div>
357
+ ```
358
+
359
+ ### (Opsional) Langkah 6: Atur routing
360
+
361
+ Langkah-langkah berikut menunjukkan cara mengatur routing berbasis locale di SvelteKit. Ini memungkinkan URL Anda menyertakan prefix locale (misalnya, `/en/about`, `/fr/about`) untuk SEO yang lebih baik dan pengalaman pengguna yang lebih baik.
362
+
363
+ ```bash
364
+ .
365
+ └─── src
366
+ ├── app.d.ts # Mendefinisikan tipe locale
367
+ ├── hooks.server.ts # Mengelola routing locale
368
+ ├── lib
369
+ │   └── getLocale.ts # Memeriksa locale dari header, cookies
370
+ ├── params
371
+ │   └── locale.ts # Mendefinisikan parameter locale
372
+ └── routes
373
+ ├── [[locale=locale]] # Bungkus dalam grup route untuk mengatur locale
374
+ │   ├── +layout.svelte # Tata letak lokal untuk rute
375
+ │   ├── +layout.ts
376
+ │   ├── +page.svelte
377
+ │   ├── +page.ts
378
+ │   └── about
379
+ │      ├── +page.svelte
380
+ │      └── +page.ts
381
+ └── +layout.svelte # Tata letak root untuk font dan gaya global
382
+ ```
383
+
384
+ ### Langkah 7: Tangani Deteksi Locale di Server (Hooks)
385
+
386
+ Di SvelteKit, server perlu mengetahui locale pengguna untuk merender konten yang benar selama SSR. Kita menggunakan `hooks.server.ts` untuk mendeteksi locale dari URL atau cookie.
387
+
388
+ Buat atau modifikasi `src/hooks.server.ts`:
389
+
390
+ ```typescript fileName="src/hooks.server.ts"
391
+ import type { Handle } from "@sveltejs/kit";
392
+ import { getLocalizedUrl } from "intlayer";
393
+ import { getLocale } from "$lib/getLocale";
394
+
395
+ export const handle: Handle = async ({ event, resolve }) => {
396
+ const detectedLocale = getLocale(event);
397
+
398
+ // Periksa apakah path saat ini sudah diawali dengan locale (misal /fr, /en)
399
+ const pathname = event.url.pathname;
400
+ const targetPathname = getLocalizedUrl(pathname, detectedLocale);
401
+
402
+ // Jika TIDAK ada locale dalam URL (misal pengguna mengunjungi "/"), arahkan ulang mereka
403
+ if (targetPathname !== pathname) {
404
+ return new Response(undefined, {
405
+ headers: { Location: targetPathname },
406
+ status: 307, // Redirect sementara
407
+ });
408
+ }
409
+
410
+ return resolve(event, {
411
+ transformPageChunk: ({ html }) => html.replace("%lang%", detectedLocale),
412
+ });
413
+ };
414
+ ```
415
+
416
+ Kemudian, buat helper untuk mendapatkan locale pengguna dari event request:
417
+
418
+ ```typescript fileName="src/lib/getLocale.ts"
419
+ import {
420
+ configuration,
421
+ getLocaleFromStorage,
422
+ localeDetector,
423
+ type Locale,
424
+ } from "intlayer";
425
+ import type { RequestEvent } from "@sveltejs/kit";
426
+
427
+ /**
428
+ * Mendapatkan locale pengguna dari event request.
429
+ * Fungsi ini digunakan dalam hook `handle` di `src/hooks.server.ts`.
430
+ *
431
+ * Pertama-tama mencoba mendapatkan locale dari penyimpanan Intlayer (cookies atau header khusus).
432
+ * Jika locale tidak ditemukan, maka menggunakan fallback negosiasi "Accept-Language" dari browser.
433
+ *
434
+ * @param event - Event request dari SvelteKit
435
+ * @returns Locale pengguna
436
+ */
437
+ export const getLocale = (event: RequestEvent): Locale => {
438
+ const defaultLocale = configuration?.internationalization?.defaultLocale;
439
+
440
+ // Mencoba mendapatkan locale dari penyimpanan Intlayer (Cookies atau header)
441
+ const storedLocale = getLocaleFromStorage({
442
+ // Akses cookie SvelteKit
443
+ getCookie: (name: string) => event.cookies.get(name) ?? null,
444
+ // Akses header SvelteKit
445
+ getHeader: (name: string) => event.request.headers.get(name) ?? null,
446
+ });
447
+
448
+ if (storedLocale) {
449
+ return storedLocale;
450
+ }
451
+
452
+ // Cadangan ke negosiasi "Accept-Language" browser
453
+ const negotiatorHeaders: Record<string, string> = {};
454
+
455
+ // Mengonversi objek Headers SvelteKit menjadi Record<string, string> biasa
456
+ event.request.headers.forEach((value, key) => {
457
+ negotiatorHeaders[key] = value;
458
+ });
459
+
460
+ // Periksa locale dari header `Accept-Language`
461
+ const userFallbackLocale = localeDetector(negotiatorHeaders);
462
+
463
+ if (userFallbackLocale) {
464
+ return userFallbackLocale;
465
+ }
466
+
467
+ // Kembalikan locale default jika tidak ada yang cocok ditemukan
468
+ return defaultLocale;
469
+ };
470
+ ```
471
+
472
+ > `getLocaleFromStorage` akan memeriksa locale dari header atau cookie tergantung pada konfigurasi Anda. Lihat [Configuration](https://intlayer.org/doc/configuration) untuk detail lebih lanjut.
473
+
474
+ > Fungsi `localeDetector` akan memproses header `Accept-Language` dan mengembalikan kecocokan terbaik.
475
+
476
+ Jika locale tidak dikonfigurasi, kita ingin mengembalikan error 404. Untuk mempermudah, kita dapat membuat fungsi `match` untuk memeriksa apakah locale valid:
477
+
478
+ ```ts fileName="/src/params/locale.ts"
479
+ import { configuration, type Locale } from "intlayer";
480
+
481
+ export const match = (
482
+ param: Locale = configuration.internationalization.defaultLocale
483
+ ): boolean => {
484
+ return configuration.internationalization.locales.includes(param);
485
+ };
486
+ ```
487
+
488
+ > **Catatan:** Pastikan `src/app.d.ts` Anda menyertakan definisi locale:
489
+ >
490
+ > ```typescript
491
+ > declare global {
492
+ > namespace App {
493
+ > interface Locals {
494
+ > locale: import("intlayer").Locale;
495
+ > }
496
+ > }
497
+ > }
498
+ > ```
499
+
500
+ Untuk file `+layout.svelte`, kita dapat menghapus semuanya, agar hanya menyimpan konten statis yang tidak terkait dengan i18n:
501
+
502
+ ```svelte fileName="src/+layout.svelte"
503
+ <script lang="ts">
504
+ import './layout.css';
505
+
506
+ let { children } = $props();
507
+ </script>
508
+
509
+ <div class="app">
510
+ {@render children()}
511
+ </div>
512
+
513
+ <style>
514
+ .app {
515
+ /* */
516
+ }
517
+ </style>
518
+ ```
519
+
520
+ Kemudian, buat halaman dan layout baru di bawah grup `[[locale=locale]]`:
521
+
522
+ ```ts fileName="src/routes/[[locale=locale]]/+layout.ts"
523
+ import type { Load } from "@sveltejs/kit";
524
+ import { configuration, type Locale } from "intlayer";
525
+
526
+ export const prerender = true;
527
+
528
+ // Gunakan tipe Load generik
529
+ export const load: Load = ({ params }) => {
530
+ const locale: Locale =
531
+ (params.locale as Locale) ??
532
+ configuration.internationalization.defaultLocale;
533
+
534
+ return {
535
+ locale,
536
+ };
537
+ };
538
+ ```
539
+
540
+ ```svelte fileName="src/routes/[[locale=locale]]/+layout.svelte"
541
+ <script lang="ts">
542
+ import type { Snippet } from 'svelte';
543
+ import { useIntlayer, setupIntlayer } from 'svelte-intlayer';
544
+ import Header from './Header.svelte';
545
+ import type { LayoutData } from './$types';
546
+
547
+ let { children, data }: { children: Snippet, data: LayoutData } = $props();
548
+
549
+ // Inisialisasi Intlayer dengan locale dari route
550
+ setupIntlayer(data.locale);
551
+
552
+ // Gunakan kamus konten layout
553
+ const layoutContent = useIntlayer('layout');
554
+ </script>
555
+
556
+ <Header />
557
+
558
+ <main>
559
+ {@render children()}
560
+ </main>
561
+
562
+ <footer>
563
+ <p>
564
+ {$layoutContent.footer.prefix.value}{' '}
565
+ <a href="https://svelte.dev/docs/kit">{$layoutContent.footer.linkLabel.value}</a>{' '}
566
+ {$layoutContent.footer.suffix.value}
567
+ </p>
568
+ </footer>
569
+
570
+ <style>
571
+ /* */
572
+ </style>
573
+ ```
574
+
575
+ ```ts fileName="src/routes/[[locale=locale]]/+page.ts"
576
+ export const prerender = true;
577
+ ```
578
+
579
+ ```svelte fileName="src/routes/[[locale=locale]]/+page.svelte"
580
+ <script lang="ts">
581
+ import { useIntlayer } from 'svelte-intlayer';
582
+
583
+ // Gunakan kamus konten home
584
+ const homeContent = useIntlayer('home');
585
+ </script>
586
+
587
+ <svelte:head>
588
+ <title>{$homeContent.title.value}</title>
589
+ </svelte:head>
590
+
591
+ <section>
592
+ <h1>
593
+ {$homeContent.title}
594
+ </h1>
595
+ </section>
596
+
597
+ <style>
598
+ /* */
599
+ </style>
600
+ ```
601
+
602
+ ### (Opsional) Langkah 8: Tautan Internasionalisasi
603
+
604
+ Untuk SEO, disarankan untuk menambahkan prefix locale pada rute Anda (misalnya, `/en/about`, `/fr/about`). Komponen ini secara otomatis menambahkan prefix locale saat ini pada setiap tautan.
605
+
606
+ ```svelte fileName="src/lib/components/LocalizedLink.svelte"
607
+ <script lang="ts">
608
+ import { getLocalizedUrl } from "intlayer";
609
+ import { useLocale } from 'svelte-intlayer';
610
+
611
+ let { href = "" } = $props();
612
+ const { locale } = useLocale();
613
+
614
+ // Bantuan untuk menambahkan prefix URL dengan locale saat ini
615
+ $: localizedHref = getLocalizedUrl(href, $locale);
616
+ </script>
617
+
618
+ <a href={localizedHref}>
619
+ <slot />
620
+ </a>
621
+ ```
622
+
623
+ Jika Anda menggunakan `goto` dari SvelteKit, Anda dapat menggunakan logika yang sama dengan `getLocalizedUrl` untuk menavigasi ke URL yang sudah dilokalkan:
624
+
625
+ ```typescript
626
+ import { goto } from "$app/navigation";
627
+ import { getLocalizedUrl } from "intlayer";
628
+ import { useLocale } from "svelte-intlayer";
629
+
630
+ const { locale } = useLocale();
631
+ const localizedPath = getLocalizedUrl("/about", $locale);
632
+ goto(localizedPath); // Menavigasi ke /en/about atau /fr/about tergantung locale
633
+ ```
634
+
635
+ ### (Opsional) Langkah 9: Pengalih Bahasa
636
+
637
+ Untuk memungkinkan pengguna mengganti bahasa, perbarui URL.
638
+
639
+ ```svelte fileName="src/lib/components/LanguageSwitcher.svelte"
640
+ <script lang="ts">
641
+ import { getLocalizedUrl, getLocaleName } from 'intlayer';
642
+ import { useLocale } from 'svelte-intlayer';
643
+ import { page } from '$app/stores';
644
+ import { goto } from '$app/navigation';
645
+
646
+ const { locale, setLocale, availableLocales } = useLocale({
647
+ onLocaleChange: (newLocale) => {
648
+ const localizedPath = getLocalizedUrl($page.url.pathname, newLocale);
649
+ goto(localizedPath);
650
+ },
651
+ });
652
+ </script>
653
+
654
+ <ul class="locale-list">
655
+ {#each availableLocales as localeEl}
656
+ <li>
657
+ <a
658
+ href={getLocalizedUrl($page.url.pathname, localeEl)}
659
+ onclick={(e) => {
660
+ e.preventDefault();
661
+ setLocale(localeEl); // Akan mengatur locale di store dan memicu onLocaleChange
662
+ }}
663
+ class:active={$locale === localeEl}
664
+ >
665
+ {getLocaleName(localeEl)}
666
+ </a>
667
+ </li>
668
+ {/each}
669
+ </ul>
670
+
671
+ <style>
672
+ /* */
673
+ </style>
674
+ ```
675
+
676
+ ### (Opsional) Langkah 10: Tambahkan proxy backend
677
+
678
+ Untuk menambahkan proxy backend ke aplikasi SvelteKit Anda, Anda dapat menggunakan fungsi `intlayerProxy` yang disediakan oleh plugin `vite-intlayer`. Plugin ini akan secara otomatis mendeteksi locale terbaik untuk pengguna berdasarkan URL, cookie, dan preferensi bahasa browser.
679
+
680
+ ```ts fileName="vite.config.ts"
681
+ import { defineConfig } from "vite";
682
+ import { intlayer, intlayerProxy } from "vite-intlayer";
683
+ import { sveltekit } from "@sveltejs/kit/vite";
684
+
685
+ // https://vitejs.dev/config/
686
+ export default defineConfig({
687
+ plugins: [intlayer(), intlayerProxy(), sveltekit()],
688
+ });
689
+ ```
690
+
691
+ ### (Opsional) Langkah 11: Mengatur editor / CMS intlayer
692
+
693
+ Untuk mengatur editor intlayer, Anda harus mengikuti [dokumentasi editor intlayer](https://github.com/aymericzip/intlayer/blob/main/docs/docs/id/intlayer_visual_editor.md).
694
+
695
+ Untuk mengatur CMS intlayer, Anda harus mengikuti [dokumentasi CMS intlayer](https://github.com/aymericzip/intlayer/blob/main/docs/docs/id/intlayer_CMS.md).
696
+
697
+ Untuk dapat memvisualisasikan selector editor intlayer, Anda harus menggunakan sintaks komponen dalam konten intlayer Anda.
698
+
699
+ ```svelte fileName="Component.svelte"
700
+ <script lang="ts">
701
+ import { useIntlayer } from "svelte-intlayer";
702
+
703
+ const content = useIntlayer("component");
704
+ </script>
705
+
706
+ <div>
707
+
708
+ <!-- Render konten sebagai konten sederhana -->
709
+ <h1>{$content.title}</h1>
710
+
711
+ <!-- Render konten sebagai komponen (diperlukan oleh editor) -->
712
+ <svelte:component this={$content.component} />
713
+ </div>
714
+ ```
715
+
716
+ ### Konfigurasi Git
717
+
718
+ Disarankan untuk mengabaikan file-file yang dihasilkan oleh Intlayer.
719
+
720
+ ```plaintext fileName=".gitignore"
721
+ # Abaikan file-file yang dihasilkan oleh Intlayer
722
+ .intlayer
723
+ ```
724
+
725
+ ---
726
+
727
+ ### Melangkah Lebih Jauh
728
+
729
+ - **Editor Visual**: Integrasikan [Intlayer Visual Editor](https://github.com/aymericzip/intlayer/blob/main/docs/docs/id/intlayer_visual_editor.md) untuk mengedit terjemahan langsung dari UI.
730
+ - **CMS**: Eksternalisasi manajemen konten Anda menggunakan [Intlayer CMS](https://github.com/aymericzip/intlayer/blob/main/docs/docs/id/intlayer_CMS.md).