@intlayer/docs 8.1.5 → 8.1.7

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 (81) hide show
  1. package/README.md +18 -9
  2. package/dist/cjs/generated/docs.entry.cjs +1 -1
  3. package/dist/cjs/generated/docs.entry.cjs.map +1 -1
  4. package/dist/esm/generated/docs.entry.mjs +1 -1
  5. package/dist/esm/generated/docs.entry.mjs.map +1 -1
  6. package/dist/types/generated/docs.entry.d.ts +2 -0
  7. package/dist/types/generated/docs.entry.d.ts.map +1 -1
  8. package/docs/ar/compiler.md +26 -0
  9. package/docs/ar/intlayer_with_nextjs_compiler.md +481 -0
  10. package/docs/ar/intlayer_with_vite+react_compiler.md +369 -0
  11. package/docs/ar/readme.md +138 -110
  12. package/docs/de/compiler.md +26 -0
  13. package/docs/de/intlayer_with_nextjs_compiler.md +481 -0
  14. package/docs/de/intlayer_with_vite+react_compiler.md +369 -0
  15. package/docs/de/readme.md +152 -124
  16. package/docs/en/compiler.md +27 -0
  17. package/docs/en/intlayer_with_nextjs_compiler.md +481 -0
  18. package/docs/en/intlayer_with_vite+react_compiler.md +368 -0
  19. package/docs/en/readme.md +129 -105
  20. package/docs/en-GB/compiler.md +26 -0
  21. package/docs/en-GB/intlayer_with_nextjs_compiler.md +481 -0
  22. package/docs/en-GB/intlayer_with_vite+react_compiler.md +369 -0
  23. package/docs/en-GB/readme.md +134 -108
  24. package/docs/es/compiler.md +26 -0
  25. package/docs/es/intlayer_with_nextjs_compiler.md +481 -0
  26. package/docs/es/intlayer_with_vite+react_compiler.md +369 -0
  27. package/docs/es/readme.md +149 -121
  28. package/docs/fr/compiler.md +26 -0
  29. package/docs/fr/intlayer_with_nextjs_compiler.md +481 -0
  30. package/docs/fr/intlayer_with_vite+react_compiler.md +369 -0
  31. package/docs/fr/readme.md +150 -122
  32. package/docs/hi/compiler.md +26 -0
  33. package/docs/hi/intlayer_with_nextjs_compiler.md +481 -0
  34. package/docs/hi/intlayer_with_vite+react_compiler.md +370 -0
  35. package/docs/hi/readme.md +153 -125
  36. package/docs/id/compiler.md +26 -0
  37. package/docs/id/intlayer_with_nextjs_compiler.md +481 -0
  38. package/docs/id/intlayer_with_vite+react_compiler.md +369 -0
  39. package/docs/id/readme.md +133 -105
  40. package/docs/it/compiler.md +26 -0
  41. package/docs/it/intlayer_with_nextjs_compiler.md +481 -0
  42. package/docs/it/intlayer_with_vite+react_compiler.md +374 -0
  43. package/docs/it/readme.md +155 -127
  44. package/docs/ja/compiler.md +26 -0
  45. package/docs/ja/intlayer_with_nextjs_compiler.md +481 -0
  46. package/docs/ja/intlayer_with_vite+react_compiler.md +369 -0
  47. package/docs/ja/readme.md +152 -126
  48. package/docs/ko/compiler.md +26 -0
  49. package/docs/ko/intlayer_with_nextjs_compiler.md +481 -0
  50. package/docs/ko/intlayer_with_vite+react_compiler.md +369 -0
  51. package/docs/ko/readme.md +154 -126
  52. package/docs/pl/compiler.md +26 -0
  53. package/docs/pl/intlayer_with_nextjs_compiler.md +481 -0
  54. package/docs/pl/intlayer_with_vite+react_compiler.md +369 -0
  55. package/docs/pl/readme.md +134 -106
  56. package/docs/pt/compiler.md +27 -1
  57. package/docs/pt/intlayer_with_nextjs_compiler.md +481 -0
  58. package/docs/pt/intlayer_with_vite+react_compiler.md +374 -0
  59. package/docs/pt/readme.md +154 -126
  60. package/docs/ru/compiler.md +26 -0
  61. package/docs/ru/intlayer_with_nextjs_compiler.md +481 -0
  62. package/docs/ru/intlayer_with_vite+react_compiler.md +369 -0
  63. package/docs/ru/readme.md +137 -109
  64. package/docs/tr/compiler.md +26 -0
  65. package/docs/tr/intlayer_with_nextjs_compiler.md +481 -0
  66. package/docs/tr/intlayer_with_vite+react_compiler.md +375 -0
  67. package/docs/tr/readme.md +139 -111
  68. package/docs/uk/compiler.md +26 -0
  69. package/docs/uk/intlayer_with_nextjs_compiler.md +481 -0
  70. package/docs/uk/intlayer_with_vite+react_compiler.md +369 -0
  71. package/docs/uk/readme.md +133 -109
  72. package/docs/vi/compiler.md +27 -1
  73. package/docs/vi/intlayer_with_nextjs_compiler.md +481 -0
  74. package/docs/vi/intlayer_with_vite+react_compiler.md +369 -0
  75. package/docs/vi/readme.md +138 -110
  76. package/docs/zh/compiler.md +26 -0
  77. package/docs/zh/intlayer_with_nextjs_compiler.md +481 -0
  78. package/docs/zh/intlayer_with_vite+react_compiler.md +372 -0
  79. package/docs/zh/readme.md +148 -120
  80. package/package.json +7 -8
  81. package/src/generated/docs.entry.ts +40 -0
@@ -0,0 +1,481 @@
1
+ ---
2
+ createdAt: 2026-01-10
3
+ updatedAt: 2026-01-10
4
+ title: Next.js i18n - Ubah aplikasi Next.js yang sudah ada menjadi aplikasi multibahasa (panduan i18n 2026)
5
+ description: Temukan cara membuat aplikasi Next.js Anda yang sudah ada menjadi multibahasa menggunakan Intlayer Compiler. Ikuti panduan dokumentasi untuk melakukan internasionalisasi (i18n) dan menerjemahkan aplikasi Anda menggunakan AI.
6
+ keywords:
7
+ - Internasionalisasi
8
+ - Dokumentasi
9
+ - Intlayer
10
+ - Next.js
11
+ - JavaScript
12
+ - React
13
+ - Kompiler
14
+ - AI
15
+ slugs:
16
+ - doc
17
+ - konfigurasi
18
+ - nextjs
19
+ - kompiler
20
+ applicationTemplate: https://github.com/aymericzip/intlayer-next-no-lolale-path-template
21
+ youtubeVideo: https://www.youtube.com/watch?v=e_PPG7PTqGU
22
+ history:
23
+ - version: 8.1.6
24
+ date: 2026-02-23
25
+ changes: Rilis Awal
26
+ ---
27
+
28
+ # Cara membuat aplikasi Next.js yang sudah ada menjadi multibahasa (i18n) (Panduan i18n 2026)
29
+
30
+ <Tabs defaultTab="video">
31
+ <Tab label="Video" value="video">
32
+
33
+ <iframe title="Solusi i18n terbaik untuk Next.js? Temukan 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/e_PPG7PTqGU?autoplay=0&amp;origin=http://intlayer.org&amp;controls=0&amp;rel=1"/>
34
+
35
+ </Tab>
36
+ <Tab label="Kode" value="code">
37
+
38
+ <iframe
39
+ src="https://stackblitz.com/github/aymericzip/intlayer-next-16-no-locale-path-template?embed=1&ctl=1&file=intlayer.config.ts"
40
+ className="m-auto overflow-hidden rounded-lg border-0 max-md:size-full max-md:h-[700px] md:aspect-16/9 md:w-full"
41
+ title="Demo CodeSandbox - Bagaimana menginternasionalisasi aplikasi Anda dengan Intlayer"
42
+ sandbox="allow-forms allow-modals allow-popups allow-presentation allow-same-origin allow-scripts"
43
+ loading="lazy"
44
+ />
45
+
46
+ </Tab>
47
+ </Tabs>
48
+
49
+ Lihat [Templat Aplikasi](https://github.com/aymericzip/intlayer-next-no-lolale-path-template) di GitHub.
50
+
51
+ ## Daftar Isi
52
+
53
+ <TOC/>
54
+
55
+ ## Mengapa internasionalisasi aplikasi yang sudah ada itu sulit?
56
+
57
+ Jika Anda pernah mencoba menambahkan beberapa bahasa ke aplikasi yang hanya dibuat untuk satu bahasa, Anda pasti tahu tantangannya. Ini bukan sekadar "sulit" - ini melelahkan. Anda harus menelusuri setiap file, menemukan setiap string teks, dan memindahkannya ke file kamus (dictionary) yang terpisah.
58
+
59
+ Lalu bagian yang berisiko: mengganti semua teks tersebut dengan kait kode (code hooks) tanpa merusak tata letak atau logika. Ini adalah jenis pekerjaan yang menghentikan pengembangan fitur baru selama berminggu-minggu dan terasa seperti refactoring yang tak ada ujungnya.
60
+
61
+ ## Apa itu Intlayer Compiler?
62
+
63
+ **Intlayer Compiler** dibuat untuk melewati pekerjaan manual tersebut. Alih-alih memaksa Anda mengekstrak string secara manual, kompiler melakukannya untuk Anda. Ia memindai kode Anda, menemukan teks, dan menggunakan AI untuk menghasilkan kamus (dictionary) di latar belakang (background).
64
+ Kemudian, ia memodifikasi kode sumber (source code) Anda selama langkah build untuk menyuntikkan i18n hooks yang diperlukan. Pada dasarnya, Anda tetap menulis aplikasi Anda seolah-olah dalam satu bahasa, dan kompiler akan menangani transformasi multibahasa secara asli.
65
+
66
+ > Dokumentasi Kompiler: [https://github.com/aymericzip/intlayer/blob/main/docs/docs/id/compiler.md](https://github.com/aymericzip/intlayer/blob/main/docs/docs/id/compiler.md)
67
+
68
+ ### Keterbatasan
69
+
70
+ Karena kompiler melakukan analisis dan transformasi kode (menyuntikkan kait dan menghasilkan kamus) pada saat **kompilasi (compile time)**, hal ini dapat **memperlambat waktu build** aplikasi Anda.
71
+
72
+ Untuk membatasi dampak ini selama pengembangan aktif (dev mode), Anda dapat mengatur kompiler ke mode [`'build-only'`](https://github.com/aymericzip/intlayer/blob/main/docs/docs/id/configuration.md) atau menonaktifkannya saat tidak diperlukan.
73
+
74
+ ---
75
+
76
+ ## Panduan selangkah demi selangkah untuk mengatur Intlayer dalam aplikasi Next.js
77
+
78
+ ### Langkah 1: Instal dependensi
79
+
80
+ Instal paket-paket yang diperlukan menggunakan pengelola paket favorit Anda:
81
+
82
+ ```bash packageManager="npm"
83
+ npm install intlayer next-intlayer
84
+ npm install @intlayer/babel --save-dev
85
+ npx intlayer init
86
+ ```
87
+
88
+ ```bash packageManager="pnpm"
89
+ pnpm add intlayer next-intlayer
90
+ pnpm add @intlayer/babel --save-dev
91
+ pnpm intlayer init
92
+ ```
93
+
94
+ ```bash packageManager="yarn"
95
+ yarn add intlayer next-intlayer
96
+ yarn add @intlayer/babel --save-dev
97
+ yarn intlayer init
98
+ ```
99
+
100
+ ```bash packageManager="bun"
101
+ bun add intlayer next-intlayer
102
+ bun add @intlayer/babel --dev
103
+ bunx intlayer init
104
+ ```
105
+
106
+ - **intlayer**
107
+
108
+ Paket inti yang menyediakan alat internasionalisasi untuk manajemen konfigurasi, terjemahan, [deklarasi konten](https://github.com/aymericzip/intlayer/blob/main/docs/docs/id/dictionary/content_file.md), transpilasi (transpilation), dan [perintah CLI](https://github.com/aymericzip/intlayer/blob/main/docs/docs/id/cli/index.md).
109
+
110
+ - **next-intlayer**
111
+
112
+ Paket yang mengintegrasikan Intlayer dengan Next.js. Ia menyediakan penyedia konteks dan hook untuk internasionalisasi Next.js. Selain itu, paket ini mencakup plugin Next.js untuk mengintegrasikan Intlayer dengan [Webpack](https://webpack.js.org/) atau [Turbopack](https://nextjs.org/docs/app/api-reference/turbopack), serta middleware untuk mendeteksi preferensi bahasa pengguna, mengelola cookie, dan menangani pengalihan URL.
113
+
114
+ ### Langkah 2: Konfigurasi proyek Anda
115
+
116
+ Buat file konfigurasi untuk mendefinisikan bahasa aplikasi Anda:
117
+
118
+ ```typescript fileName="intlayer.config.ts"
119
+ import { Locales, type IntlayerConfig } from "intlayer";
120
+
121
+ const config: IntlayerConfig = {
122
+ internationalization: {
123
+ locales: [Locales.ENGLISH, Locales.INDONESIAN],
124
+ defaultLocale: Locales.INDONESIAN,
125
+ },
126
+ routing: {
127
+ mode: "search-params",
128
+ },
129
+ compiler: {
130
+ enabled: true, // Dapat diatur ke 'build-only' untuk membatasi dampak dalam mode dev
131
+ outputDir: "i18n",
132
+ dictionaryKeyPrefix: "", // Tidak ada awalan kompilasi, defaultnya "comp-"
133
+ },
134
+ ai: {
135
+ provider: "openai",
136
+ model: "gpt-5-mini",
137
+ apiKey: process.env.OPEN_AI_API_KEY,
138
+ applicationContext: "Ini adalah contoh sederhana aplikasi peta",
139
+ },
140
+ };
141
+
142
+ export default config;
143
+ ```
144
+
145
+ > **Catatan**: Pastikan Anda telah menetapkan `OPEN_AI_API_KEY` di variabel lingkungan Anda.
146
+
147
+ > Melalui file konfigurasi ini, Anda dapat menyiapkan URL yang dilokalkan, pengalihan proxy, pemetaan cookie, lokasi dan ekstensi deklarasi konten Anda, menonaktifkan log Intlayer di konsol, dan banyak lagi. Untuk daftar lengkap parameter yang tersedia, periksa dokumentasi [konfigurasi](https://github.com/aymericzip/intlayer/blob/main/docs/docs/id/configuration.md).
148
+
149
+ ### Langkah 3: Integrasikan Intlayer ke dalam konfigurasi Next.js Anda
150
+
151
+ Konfigurasikan pengaturan Next.js Anda untuk menggunakan Intlayer:
152
+
153
+ ```typescript fileName="next.config.ts"
154
+ import type { NextConfig } from "next";
155
+ import { withIntlayer } from "next-intlayer/server";
156
+
157
+ const nextConfig: NextConfig = {
158
+ /* Opsional konfigurasi Next.js tambahan di sini */
159
+ };
160
+
161
+ export default withIntlayer(nextConfig);
162
+ ```
163
+
164
+ > Plugin Next.js `withIntlayer()` digunakan untuk mengintegrasikan Intlayer dengan Next.js. Ini memastikan pembuatan file kamus dan memantaunya dalam mode dev. Ini mendefinisikan variabel lingkungan Intlayer di dalam lingkungan [Webpack](https://webpack.js.org/) atau [Turbopack](https://nextjs.org/docs/app/api-reference/turbopack). Terlebih lagi, ini menyediakan alias untuk mengoptimalkan kinerja dan bekerja secara menyeluruh dengan Komponen Server.
165
+
166
+ ### Konfigurasi Babel
167
+
168
+ Kompilator Intlayer memerlukan Babel untuk mengekstrak dan mengoptimalkan konten Anda. Perbarui `babel.config.js` (atau `babel.config.json`) Anda untuk menyertakan plugin Intlayer:
169
+
170
+ ```typescript fileName="babel.config.js"
171
+ const {
172
+ intlayerExtractBabelPlugin,
173
+ intlayerOptimizeBabelPlugin,
174
+ getExtractPluginOptions,
175
+ getOptimizePluginOptions,
176
+ } = require("@intlayer/babel");
177
+
178
+ module.exports = {
179
+ presets: ["next/babel"],
180
+ plugins: [
181
+ [intlayerExtractBabelPlugin, getExtractPluginOptions()],
182
+ [intlayerOptimizeBabelPlugin, getOptimizePluginOptions()],
183
+ ],
184
+ };
185
+ ```
186
+
187
+ ### Langkah 4: Deteksi Bahasa di Halaman Anda
188
+
189
+ Kosongkan konten `RootLayout` Anda dan ganti dengan contoh di bawah ini:
190
+
191
+ ```tsx fileName="src/app/layout.tsx"
192
+ import type { Metadata } from "next";
193
+ import type { ReactNode } from "react";
194
+ import "./globals.css";
195
+ import { IntlayerClientProvider, LocalPromiseParams } from "next-intlayer";
196
+ import { getHTMLTextDir, getIntlayer } from "intlayer";
197
+ import { getLocale } from "next-intlayer/server";
198
+ export { generateStaticParams } from "next-intlayer";
199
+
200
+ export const generateMetadata = async (): Promise<Metadata> => {
201
+ const locale = await getLocale();
202
+ const { title, description, keywords } = getIntlayer("metadata", locale);
203
+
204
+ return {
205
+ title,
206
+ description,
207
+ keywords,
208
+ };
209
+ };
210
+
211
+ const RootLayout = async ({
212
+ children,
213
+ }: Readonly<{
214
+ children: ReactNode;
215
+ }>) => {
216
+ const locale = await getLocale();
217
+
218
+ return (
219
+ <html lang={locale} dir={getHTMLTextDir(locale)}>
220
+ <IntlayerClientProvider defaultLocale={locale}>
221
+ <body>{children}</body>
222
+ </IntlayerClientProvider>
223
+ </html>
224
+ );
225
+ };
226
+
227
+ export default RootLayout;
228
+ ```
229
+
230
+ ### Langkah 5: Deklarasikan Konten Anda (Otomatis)
231
+
232
+ Dengan Kompiler diaktifkan, Anda **tidak lagi perlu** mendeklarasikan kamus konten (misalnya file `.content.ts`) secara manual.
233
+
234
+ Sebagai gantinya, Anda cukup menulis konten sebagai string yang dikodekan secara keras di kode Anda. Intlayer akan memindai kode sumber, menghasilkan terjemahan menggunakan penyedia AI yang dikonfigurasi, dan secara diam-diam mengganti string tersebut dengan konten yang dilokalkan selama langkah kompilasi build. Semuanya benar-benar otomatis.
235
+
236
+ Cukup tulis komponen Anda dengan string hardcoded dalam bahasa default Anda dan biarkan Intlayer Compiler menangani sisanya.
237
+
238
+ Contoh tampilan `page.tsx` Anda:
239
+
240
+ <Tabs>
241
+ <Tab value="Code">
242
+
243
+ ```tsx fileName="src/app/page.tsx"
244
+ import type { FC } from "react";
245
+ import { IntlayerServerProvider } from "next-intlayer/server";
246
+ import { getLocale } from "next-intlayer/server";
247
+
248
+ const PageContent: FC = () => {
249
+ return (
250
+ <>
251
+ <p>Mulai dengan mengedit ini!</p>
252
+ <code>src/app/page.tsx</code>
253
+ </>
254
+ );
255
+ };
256
+
257
+ export default async function Page() {
258
+ const locale = await getLocale();
259
+
260
+ return (
261
+ <IntlayerServerProvider locale={locale}>
262
+ <PageContent />
263
+ </IntlayerServerProvider>
264
+ );
265
+ }
266
+ ```
267
+
268
+ </Tab>
269
+ <Tab value="Output">
270
+
271
+ ```ts fileName="i18n/page-content.content.tsx"
272
+ {
273
+ key: "page-content",
274
+ content: {
275
+ nodeType: "translation",
276
+ translation: {
277
+ en: {
278
+ getStartedByEditingThis: "Get started by editing this!",
279
+ },
280
+ fr: {
281
+ getStartedByEditingThis: "Commencez par éditer ceci !",
282
+ },
283
+ id: {
284
+ getStartedByEditingThis: "Mulai dengan mengedit ini!",
285
+ },
286
+ }
287
+ }
288
+ }
289
+ ```
290
+
291
+ ```tsx fileName="src/app/page.tsx"
292
+ import { type FC } from "react";
293
+ import { IntlayerServerProvider, useIntlayer } from "next-intlayer/server";
294
+ import { getLocale } from "next-intlayer/server";
295
+
296
+ const PageContent: FC = () => {
297
+ const content = useIntlayer("page-content");
298
+
299
+ return (
300
+ <>
301
+ <p>{content.getStartedByEditingThis}</p>
302
+ <code>src/app/page.tsx</code>
303
+ </>
304
+ );
305
+ };
306
+
307
+ export default async function Page() {
308
+ const locale = await getLocale();
309
+
310
+ return (
311
+ <IntlayerServerProvider locale={locale}>
312
+ <PageContent />
313
+ </IntlayerServerProvider>
314
+ );
315
+ }
316
+ ```
317
+
318
+ </Tab>
319
+ </Tabs>
320
+
321
+ - **`IntlayerClientProvider`** digunakan untuk menyediakan bahasa ke komponen sisi klien.
322
+ - Sementara **`IntlayerServerProvider`** digunakan untuk menyediakan bahasa ke anak-anak server.
323
+
324
+ ### (Opsional) Langkah 7: Isi terjemahan yang hilang
325
+
326
+ Intlayer menyediakan alat CLI untuk membantu Anda mengisi terjemahan yang hilang. Anda dapat menggunakan perintah `intlayer` untuk menguji dan mengisi terjemahan yang hilang dari kode Anda.
327
+
328
+ ```bash
329
+ npx intlayer test # Uji apakah ada terjemahan yang hilang
330
+ ```
331
+
332
+ ```bash
333
+ npx intlayer fill # Isi terjemahan yang hilang
334
+ ```
335
+
336
+ > Untuk detail lebih lanjut, silakan merujuk ke [dokumentasi CLI](https://github.com/aymericzip/intlayer/blob/main/docs/docs/id/cli/ci.md)
337
+
338
+ ### (Opsional) Langkah 8: Middleware Proxy Rute Lokal
339
+
340
+ Jika Anda ingin secara otomatis mengalihkan pengguna ke bahasa pilihan mereka, buat middleware proxy:
341
+
342
+ ```typescript fileName="src/proxy.ts"
343
+ export { intlayerProxy as proxy } from "next-intlayer/proxy";
344
+
345
+ export const config = {
346
+ matcher:
347
+ "/((?!api|static|assets|robots|sitemap|sw|service-worker|manifest|.*\\..*|_next).*)",
348
+ };
349
+ ```
350
+
351
+ > `intlayerProxy` digunakan untuk mendeteksi bahasa pilihan pengguna dan mengalihkannya ke URL yang sesuai seperti yang ditentukan dalam [pengaturan file konfigurasi](https://github.com/aymericzip/intlayer/blob/main/docs/docs/id/configuration.md). Selain itu, ini memungkinkan penyimpanan bahasa pilihan pengguna di cookie.
352
+
353
+ ### (Opsional) Langkah 9: Ubah Bahasa Konten
354
+
355
+ Cara paling direkomendasikan untuk mengubah bahasa konten Anda di Next.js adalah dengan menggunakan komponen `Link` untuk mengalihkan pengguna ke rute dengan bahasa yang sesuai. Ini memanfaatkan fitur prefetch Next.js dan menghindari penyegaran halaman secara paksa.
356
+
357
+ ```tsx fileName="src/components/localeSwitcher/LocaleSwitcher.tsx"
358
+ "use client";
359
+
360
+ import type { FC } from "react";
361
+ import { Locales, getHTMLTextDir, getLocaleName } from "intlayer";
362
+ import { useLocale } from "next-intlayer";
363
+
364
+ export const LocaleSwitcher: FC = () => {
365
+ const { locale, availableLocales, setLocale } = useLocale({
366
+ onChange: () => window.location.reload(),
367
+ });
368
+
369
+ return (
370
+ <div>
371
+ <button popoverTarget="localePopover">{getLocaleName(locale)}</button>
372
+ <div id="localePopover" popover="auto">
373
+ {availableLocales.map((localeItem) => (
374
+ <button
375
+ key={localeItem}
376
+ aria-current={locale === localeItem ? "page" : undefined}
377
+ onClick={() => setLocale(localeItem)}
378
+ >
379
+ <span>
380
+ {/* Bahasa - contoh: ID */}
381
+ {localeItem}
382
+ </span>
383
+ <span>
384
+ {/* Bahasa dalam bahasanya sendiri - contoh: Bahasa Indonesia */}
385
+ {getLocaleName(localeItem, locale)}
386
+ </span>
387
+ <span dir={getHTMLTextDir(localeItem)} lang={localeItem}>
388
+ {/* Bahasa dalam bahasa saat ini - contoh: Francés (jika bahasa saat ini adalah Locales.SPANISH) */}
389
+ {getLocaleName(localeItem)}
390
+ </span>
391
+ <span dir="ltr" lang={Locales.ENGLISH}>
392
+ {/* Bahasa dalam bahasa Inggris - contoh: Indonesian */}
393
+ {getLocaleName(localeItem, Locales.ENGLISH)}
394
+ </span>
395
+ </button>
396
+ ))}
397
+ </div>
398
+ </div>
399
+ );
400
+ };
401
+ ```
402
+
403
+ > Secara alternatif, Anda dapat menggunakan fungsi `setLocale` yang disediakan oleh hook `useLocale`. Fungsi ini tidak mengizinkan prefetch halaman. Periksa [dokumentasi hook `useLocale`](https://github.com/aymericzip/intlayer/blob/main/docs/docs/id/packages/next-intlayer/useLocale.md) untuk detail lebih lanjut.
404
+
405
+ ### (Opsional) Langkah 10: Optimalkan Ukuran Bundle
406
+
407
+ Saat menggunakan `next-intlayer`, kamus disertakan dalam bundle untuk setiap halaman secara default. Untuk mengoptimalkan ukuran bundle, Intlayer menyediakan plugin SWC opsional yang secara cerdas mengganti panggilan `useIntlayer` menggunakan makro. Ini memastikan bahwa kamus hanya disertakan dalam bundle halaman yang benar-benar menggunakannya.
408
+
409
+ Untuk mengaktifkan optimasi ini, instal paket `@intlayer/swc`. Setelah diinstal, `next-intlayer` akan secara otomatis mendeteksi dan menggunakan plugin tersebut:
410
+
411
+ ```bash packageManager="npm"
412
+ npm install @intlayer/swc --save-dev
413
+ ```
414
+
415
+ ```bash packageManager="pnpm"
416
+ pnpm add @intlayer/swc --save-dev
417
+ ```
418
+
419
+ ```bash packageManager="yarn"
420
+ yarn add @intlayer/swc --save-dev
421
+ ```
422
+
423
+ ```bash packageManager="bun"
424
+ bun add @intlayer/swc --dev
425
+ ```
426
+
427
+ > Catatan: Optimasi ini hanya tersedia untuk Next.js 13 ke atas.
428
+
429
+ > Catatan: Paket ini tidak diinstal secara default karena plugin SWC masih eksperimental di Next.js. Ini mungkin berubah di masa depan.
430
+
431
+ > Catatan: Jika Anda menyetel opsi sebagai `importMode: 'dynamic'` atau `importMode: 'fetch'` (dalam konfigurasi kamus), ini akan bergantung pada Suspense, jadi Anda perlu membungkus panggilan `useIntlayer` Anda dalam batas `Suspense`. Ini berarti Anda tidak dapat menggunakan `useIntlayer` secara langsung di tingkat atas komponen Halaman / Layout Anda.
432
+
433
+ ### Konfigurasi TypeScript
434
+
435
+ Intlayer menggunakan augmentasi modul untuk memanfaatkan keunggulan TypeScript dan membuat basis kode Anda lebih kuat.
436
+
437
+ ![Autocomplete](https://github.com/aymericzip/intlayer/blob/main/docs/assets/autocompletion.png?raw=true)
438
+
439
+ ![Error Terjemahan](https://github.com/aymericzip/intlayer/blob/main/docs/assets/translation_error.png?raw=true)
440
+
441
+ Pastikan konfigurasi TypeScript Anda menyertakan tipe yang dihasilkan secara otomatis.
442
+
443
+ ```json5 fileName="tsconfig.json"
444
+ {
445
+ // ... konfigurasi TypeScript Anda yang sudah ada
446
+ "include": [
447
+ // ... konfigurasi TypeScript Anda yang sudah ada
448
+ ".intlayer/**/*.ts", // Sertakan tipe yang dihasilkan secara otomatis
449
+ ],
450
+ }
451
+ ```
452
+
453
+ ### Konfigurasi Git
454
+
455
+ Disarankan untuk mengabaikan file yang dihasilkan oleh Intlayer. Ini memungkinkan Anda untuk menghindari mengunggahnya ke repositori Git Anda.
456
+
457
+ Untuk melakukan ini, Anda dapat menambahkan instruksi berikut ke file `.gitignore` Anda:
458
+
459
+ ```plaintext fileName=".gitignore"
460
+ # Abaikan file yang dihasilkan oleh Intlayer
461
+ .intlayer
462
+ ```
463
+
464
+ ### Ekstensi VS Code
465
+
466
+ Untuk meningkatkan pengalaman pengembangan Anda dengan Intlayer, Anda dapat menginstal **Ekstensi VS Code resmi Intlayer**.
467
+
468
+ [Instal dari VS Code Marketplace](https://marketplace.visualstudio.com/items?itemName=intlayer.intlayer-vs-code-extension)
469
+
470
+ Ekstensi ini menyediakan:
471
+
472
+ - **Autocomplete** untuk kunci terjemahan.
473
+ - **Deteksi kesalahan waktu nyata** untuk terjemahan yang hilang.
474
+ - **Pratinjau inline** dari konten yang diterjemahkan.
475
+ - **Quick actions** untuk membuat dan memperbarui terjemahan dengan mudah.
476
+
477
+ Baca [dokumentasi Ekstensi VS Code Intlayer](https://intlayer.org/doc/vs-code-extension) untuk instruksi mendetail tentang penggunaan ekstensi.
478
+
479
+ ### Melangkah Lebih Jauh
480
+
481
+ Untuk melangkah lebih jauh, Anda dapat mengimplementasikan [editor visual](https://github.com/aymericzip/intlayer/blob/main/docs/docs/id/intlayer_visual_editor.md) atau mengeksternalisasikan konten Anda menggunakan [CMS](https://github.com/aymericzip/intlayer/blob/main/docs/docs/id/intlayer_CMS.md).