@intlayer/docs 8.1.6 → 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.
- package/README.md +18 -9
- package/dist/cjs/generated/docs.entry.cjs +1 -1
- package/dist/cjs/generated/docs.entry.cjs.map +1 -1
- package/dist/esm/generated/docs.entry.mjs +1 -1
- package/dist/esm/generated/docs.entry.mjs.map +1 -1
- package/dist/types/generated/docs.entry.d.ts +2 -0
- package/dist/types/generated/docs.entry.d.ts.map +1 -1
- package/docs/ar/compiler.md +26 -0
- package/docs/ar/intlayer_with_nextjs_compiler.md +481 -0
- package/docs/ar/intlayer_with_vite+react_compiler.md +369 -0
- package/docs/ar/readme.md +138 -110
- package/docs/de/compiler.md +26 -0
- package/docs/de/intlayer_with_nextjs_compiler.md +481 -0
- package/docs/de/intlayer_with_vite+react_compiler.md +369 -0
- package/docs/de/readme.md +152 -124
- package/docs/en/compiler.md +27 -0
- package/docs/en/intlayer_with_nextjs_compiler.md +481 -0
- package/docs/en/intlayer_with_vite+react_compiler.md +368 -0
- package/docs/en/readme.md +129 -105
- package/docs/en-GB/compiler.md +26 -0
- package/docs/en-GB/intlayer_with_nextjs_compiler.md +481 -0
- package/docs/en-GB/intlayer_with_vite+react_compiler.md +369 -0
- package/docs/en-GB/readme.md +134 -108
- package/docs/es/compiler.md +26 -0
- package/docs/es/intlayer_with_nextjs_compiler.md +481 -0
- package/docs/es/intlayer_with_vite+react_compiler.md +369 -0
- package/docs/es/readme.md +149 -121
- package/docs/fr/compiler.md +26 -0
- package/docs/fr/intlayer_with_nextjs_compiler.md +481 -0
- package/docs/fr/intlayer_with_vite+react_compiler.md +369 -0
- package/docs/fr/readme.md +150 -122
- package/docs/hi/compiler.md +26 -0
- package/docs/hi/intlayer_with_nextjs_compiler.md +481 -0
- package/docs/hi/intlayer_with_vite+react_compiler.md +370 -0
- package/docs/hi/readme.md +153 -125
- package/docs/id/compiler.md +26 -0
- package/docs/id/intlayer_with_nextjs_compiler.md +481 -0
- package/docs/id/intlayer_with_vite+react_compiler.md +369 -0
- package/docs/id/readme.md +133 -105
- package/docs/it/compiler.md +26 -0
- package/docs/it/intlayer_with_nextjs_compiler.md +481 -0
- package/docs/it/intlayer_with_vite+react_compiler.md +374 -0
- package/docs/it/readme.md +155 -127
- package/docs/ja/compiler.md +26 -0
- package/docs/ja/intlayer_with_nextjs_compiler.md +481 -0
- package/docs/ja/intlayer_with_vite+react_compiler.md +369 -0
- package/docs/ja/readme.md +152 -126
- package/docs/ko/compiler.md +26 -0
- package/docs/ko/intlayer_with_nextjs_compiler.md +481 -0
- package/docs/ko/intlayer_with_vite+react_compiler.md +369 -0
- package/docs/ko/readme.md +154 -126
- package/docs/pl/compiler.md +26 -0
- package/docs/pl/intlayer_with_nextjs_compiler.md +481 -0
- package/docs/pl/intlayer_with_vite+react_compiler.md +369 -0
- package/docs/pl/readme.md +134 -106
- package/docs/pt/compiler.md +27 -1
- package/docs/pt/intlayer_with_nextjs_compiler.md +481 -0
- package/docs/pt/intlayer_with_vite+react_compiler.md +374 -0
- package/docs/pt/readme.md +154 -126
- package/docs/ru/compiler.md +26 -0
- package/docs/ru/intlayer_with_nextjs_compiler.md +481 -0
- package/docs/ru/intlayer_with_vite+react_compiler.md +369 -0
- package/docs/ru/readme.md +137 -109
- package/docs/tr/compiler.md +26 -0
- package/docs/tr/intlayer_with_nextjs_compiler.md +481 -0
- package/docs/tr/intlayer_with_vite+react_compiler.md +375 -0
- package/docs/tr/readme.md +139 -111
- package/docs/uk/compiler.md +26 -0
- package/docs/uk/intlayer_with_nextjs_compiler.md +481 -0
- package/docs/uk/intlayer_with_vite+react_compiler.md +369 -0
- package/docs/uk/readme.md +133 -109
- package/docs/vi/compiler.md +27 -1
- package/docs/vi/intlayer_with_nextjs_compiler.md +481 -0
- package/docs/vi/intlayer_with_vite+react_compiler.md +369 -0
- package/docs/vi/readme.md +138 -110
- package/docs/zh/compiler.md +26 -0
- package/docs/zh/intlayer_with_nextjs_compiler.md +481 -0
- package/docs/zh/intlayer_with_vite+react_compiler.md +372 -0
- package/docs/zh/readme.md +148 -120
- package/package.json +7 -8
- package/src/generated/docs.entry.ts +40 -0
|
@@ -0,0 +1,369 @@
|
|
|
1
|
+
---
|
|
2
|
+
createdAt: 2024-03-07
|
|
3
|
+
updatedAt: 2025-12-30
|
|
4
|
+
title: Vite dan React i18n - Ubah aplikasi yang ada menjadi aplikasi multibahasa (panduan i18n 2026)
|
|
5
|
+
description: Temukan cara membuat aplikasi Vite dan React Anda yang sudah ada menjadi multibahasa menggunakan Intlayer Compiler. Ikuti dokumentasi untuk menginternasionalisasi (i18n) dan menerjemahkannya dengan AI.
|
|
6
|
+
keywords:
|
|
7
|
+
- Internasionalisasi
|
|
8
|
+
- Dokumentasi
|
|
9
|
+
- Intlayer
|
|
10
|
+
- Vite
|
|
11
|
+
- React
|
|
12
|
+
- Kompilator
|
|
13
|
+
- AI
|
|
14
|
+
slugs:
|
|
15
|
+
- doc
|
|
16
|
+
- lingkungan
|
|
17
|
+
- vite-dan-react
|
|
18
|
+
- kompilator
|
|
19
|
+
- AI
|
|
20
|
+
applicationTemplate: https://github.com/aymericzip/intlayer-vite-react-template
|
|
21
|
+
youtubeVideo: https://www.youtube.com/watch?v=dS9L7uJeak4
|
|
22
|
+
history:
|
|
23
|
+
- version: 8.1.6
|
|
24
|
+
date: 2026-02-23
|
|
25
|
+
changes: Rilis awal
|
|
26
|
+
---
|
|
27
|
+
|
|
28
|
+
# Cara membuat multibahasa (i18n) pada aplikasi Vite dan React yang sudah ada setelahnya (panduan i18n 2026)
|
|
29
|
+
|
|
30
|
+
<Tabs defaultTab="video">
|
|
31
|
+
<Tab label="Video" value="video">
|
|
32
|
+
|
|
33
|
+
<iframe title="Solusi i18n terbaik untuk Vite dan React? 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/dS9L7uJeak4?si=VaKmrYMmXjo3xpk2"/>
|
|
34
|
+
|
|
35
|
+
</Tab>
|
|
36
|
+
<Tab label="Kode" value="code">
|
|
37
|
+
|
|
38
|
+
<iframe
|
|
39
|
+
src="https://stackblitz.com/github/aymericzip/intlayer-vite-react-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 - Cara Menginternasionalisasi aplikasi Anda menggunakan 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-vite-react-template) di GitHub.
|
|
50
|
+
|
|
51
|
+
## Daftar Isi
|
|
52
|
+
|
|
53
|
+
<TOC/>
|
|
54
|
+
|
|
55
|
+
## Mengapa sulit untuk menginternasionalisasi aplikasi yang sudah ada?
|
|
56
|
+
|
|
57
|
+
Jika Anda pernah mencoba menambahkan banyak bahasa ke aplikasi yang dibuat hanya untuk satu bahasa, Anda pasti tahu betapa sulitnya itu. Bukan hanya "sulit"—tetapi membosankan. Anda harus menyisir setiap file, memburu setiap untaian teks, dan memindahkannya ke file kamus terpisah.
|
|
58
|
+
|
|
59
|
+
Kemudian datanglah bagian yang berisiko: mengganti semua teks tersebut dengan hook kode tanpa merusak tata letak atau logika Anda. Ini adalah jenis pekerjaan yang menghentikan pengembangan fitur baru selama berminggu-minggu dan terasa seperti refactoring tanpa akhir.
|
|
60
|
+
|
|
61
|
+
## Apa itu Intlayer Compiler?
|
|
62
|
+
|
|
63
|
+
**Intlayer Compiler** dibuat untuk melewati pekerjaan manual yang membosankan itu. Alih-alih Anda mengekstrak string secara manual, kompilator melakukannya untuk Anda. Ia memindai kode Anda, menemukan teks, dan menggunakan AI untuk menghasilkan kamus di balik layar.
|
|
64
|
+
Kemudian, ia memodifikasi kode Anda selama proses build untuk menyuntikkan hook i18n yang diperlukan. Pada dasarnya, Anda terus menulis aplikasi seolah-olah hanya satu bahasa, dan kompilator menangani transformasi multibahasa secara otomatis.
|
|
65
|
+
|
|
66
|
+
> Dok Kompilator: [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
|
+
### Batasan
|
|
69
|
+
|
|
70
|
+
Karena kompilator melakukan analisis dan transformasi kode (memasukkan hook dan menghasilkan kamus) pada **waktu kompilasi**, hal ini dapat **memperlambat proses build** aplikasi Anda.
|
|
71
|
+
|
|
72
|
+
Untuk mengurangi dampak ini selama pengembangan, Anda dapat mengonfigurasi kompilator agar berjalan dalam mode [`'build-only'`](https://github.com/aymericzip/intlayer/blob/main/docs/docs/en/configuration.md) atau menonaktifkannya saat tidak diperlukan.
|
|
73
|
+
|
|
74
|
+
---
|
|
75
|
+
|
|
76
|
+
## Panduan Langkah-demi-Langkah untuk Menyiapkan Intlayer dalam Aplikasi Vite dan React
|
|
77
|
+
|
|
78
|
+
### Langkah 1: Instal Dependensi
|
|
79
|
+
|
|
80
|
+
Instal paket-paket yang diperlukan menggunakan npm:
|
|
81
|
+
|
|
82
|
+
```bash packageManager="npm"
|
|
83
|
+
npm install intlayer react-intlayer
|
|
84
|
+
npm install vite-intlayer --save-dev
|
|
85
|
+
npx intlayer init
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
```bash packageManager="pnpm"
|
|
89
|
+
pnpm add intlayer react-intlayer
|
|
90
|
+
pnpm add vite-intlayer --save-dev
|
|
91
|
+
pnpm intlayer init
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
```bash packageManager="yarn"
|
|
95
|
+
yarn add intlayer react-intlayer
|
|
96
|
+
yarn add vite-intlayer --save-dev
|
|
97
|
+
yarn intlayer init
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
```bash packageManager="bun"
|
|
101
|
+
bun add intlayer react-intlayer
|
|
102
|
+
bun add vite-intlayer --dev
|
|
103
|
+
bunx intlayer init
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
- **intlayer**
|
|
107
|
+
Paket inti yang menyediakan alat internasionalisasi untuk manajemen konfigurasi, terjemahan, [deklarasi konten](https://github.com/aymericzip/intlayer/blob/main/docs/docs/en/dictionary/content_file.md), transpilasi, dan [perintah CLI](https://github.com/aymericzip/intlayer/blob/main/docs/docs/en/cli/index.md).
|
|
108
|
+
|
|
109
|
+
- **react-intlayer**
|
|
110
|
+
Paket yang mengintegrasikan Intlayer dengan aplikasi React. Ini menyediakan penyedia konteks dan hook untuk internasionalisasi React.
|
|
111
|
+
|
|
112
|
+
- **vite-intlayer**
|
|
113
|
+
Termasuk plugin Vite untuk mengintegrasikan Intlayer dengan [Vite bundler](https://vite.dev/guide/why.html#why-bundle-for-production), serta middleware untuk mendeteksi lokal pilihan pengguna, mengelola cookie, dan menangani pengalihan URL.
|
|
114
|
+
|
|
115
|
+
### Langkah 2: Konfigurasi Proyek Anda
|
|
116
|
+
|
|
117
|
+
Buat file konfigurasi untuk mengatur bahasa aplikasi 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.INDONESIAN, Locales.FRENCH],
|
|
125
|
+
defaultLocale: Locales.ENGLISH,
|
|
126
|
+
},
|
|
127
|
+
compiler: {
|
|
128
|
+
enabled: true, // Dapat diatur ke 'build-only' untuk membatasi dampak pada mode dev
|
|
129
|
+
outputDir: "i18n",
|
|
130
|
+
dictionaryKeyPrefix: "", // Tidak ada awalan comp-
|
|
131
|
+
},
|
|
132
|
+
ai: {
|
|
133
|
+
provider: "openai",
|
|
134
|
+
model: "gpt-5-mini",
|
|
135
|
+
apiKey: process.env.OPEN_AI_API_KEY,
|
|
136
|
+
applicationContext: "Aplikasi ini adalah aplikasi peta", // Catatan: Anda dapat menyesuaikan deskripsi aplikasi ini
|
|
137
|
+
},
|
|
138
|
+
};
|
|
139
|
+
|
|
140
|
+
export default config;
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
> **Catatan**: Pastikan Anda telah mengatur `OPEN_AI_API_KEY` di variabel lingkungan Anda.
|
|
144
|
+
|
|
145
|
+
> Melalui file konfigurasi ini, Anda dapat mengatur URL yang dilokalkan, pengalihan middleware, nama cookie, lokasi dan ekstensi deklarasi konten Anda, menonaktifkan log Intlayer di konsol, dan banyak lagi. Untuk daftar lengkap parameter yang tersedia, lihat [dokumentasi konfigurasi](https://github.com/aymericzip/intlayer/blob/main/docs/docs/en/configuration.md).
|
|
146
|
+
|
|
147
|
+
### Langkah 3: Integrasikan Intlayer dalam Konfigurasi Vite Anda
|
|
148
|
+
|
|
149
|
+
Tambahkan plugin intlayer ke dalam konfigurasi Anda.
|
|
150
|
+
|
|
151
|
+
```typescript fileName="vite.config.ts"
|
|
152
|
+
import { defineConfig } from "vite";
|
|
153
|
+
import react from "@vitejs/plugin-react-swc";
|
|
154
|
+
import { intlayer, intlayerCompiler } from "vite-intlayer";
|
|
155
|
+
|
|
156
|
+
// https://vitejs.dev/config/
|
|
157
|
+
export default defineConfig({
|
|
158
|
+
plugins: [react(), intlayer(), intlayerCompiler()],
|
|
159
|
+
});
|
|
160
|
+
```
|
|
161
|
+
|
|
162
|
+
> Plugin Vite `intlayer()` digunakan untuk mengintegrasikan Intlayer dengan Vite. Ini memastikan pembangunan file deklarasi konten dan memantaunya dalam mode pengembangan. Ini mendefinisikan variabel lingkungan Intlayer dalam aplikasi Vite. Selain itu, ia menyediakan alias untuk mengoptimalkan kinerja.
|
|
163
|
+
|
|
164
|
+
> Plugin Vite `intlayerCompiler()` digunakan untuk mengekstrak konten dari komponen dan menulis file `.content`.
|
|
165
|
+
|
|
166
|
+
### Langkah 4: Kompilasi kode Anda
|
|
167
|
+
|
|
168
|
+
Cukup tulis komponen Anda dengan string yang dikodekan secara keras dalam lokal default Anda. Kompilator menangani sisanya.
|
|
169
|
+
|
|
170
|
+
Contoh bagaimana tampilan halaman Anda mungkin terlihat:
|
|
171
|
+
|
|
172
|
+
<Tabs>
|
|
173
|
+
<Tab value="Kode">
|
|
174
|
+
|
|
175
|
+
```tsx fileName="src/App.tsx"
|
|
176
|
+
import { useState, type FC } from "react";
|
|
177
|
+
import reactLogo from "./assets/react.svg";
|
|
178
|
+
import viteLogo from "/vite.svg";
|
|
179
|
+
import "./App.css";
|
|
180
|
+
import { IntlayerProvider } from "react-intlayer";
|
|
181
|
+
|
|
182
|
+
const AppContent: FC = () => {
|
|
183
|
+
const [count, setCount] = useState(0);
|
|
184
|
+
|
|
185
|
+
return (
|
|
186
|
+
<>
|
|
187
|
+
<div>
|
|
188
|
+
<a href="https://vitejs.dev" target="_blank">
|
|
189
|
+
<img src={viteLogo} className="logo" alt="Vite logo" />
|
|
190
|
+
</a>
|
|
191
|
+
<a href="https://react.dev" target="_blank">
|
|
192
|
+
<img src={reactLogo} className="logo react" alt="React logo" />
|
|
193
|
+
</a>
|
|
194
|
+
</div>
|
|
195
|
+
<h1>Vite + React</h1>
|
|
196
|
+
<div className="card">
|
|
197
|
+
<button onClick={() => setCount((count) => count + 1)}>
|
|
198
|
+
count is {count}
|
|
199
|
+
</button>
|
|
200
|
+
<p>
|
|
201
|
+
Edit <code>src/App.tsx</code> and save to test HMR
|
|
202
|
+
</p>
|
|
203
|
+
</div>
|
|
204
|
+
<p className="read-the-docs">
|
|
205
|
+
Click on the Vite and React logos to learn more
|
|
206
|
+
</p>
|
|
207
|
+
</>
|
|
208
|
+
);
|
|
209
|
+
};
|
|
210
|
+
|
|
211
|
+
const App: FC = () => (
|
|
212
|
+
<IntlayerProvider>
|
|
213
|
+
<AppContent />
|
|
214
|
+
</IntlayerProvider>
|
|
215
|
+
);
|
|
216
|
+
|
|
217
|
+
export default App;
|
|
218
|
+
```
|
|
219
|
+
|
|
220
|
+
</Tab>
|
|
221
|
+
<Tab value="Output">
|
|
222
|
+
|
|
223
|
+
```ts fileName="i18n/app-content.content.json"
|
|
224
|
+
{
|
|
225
|
+
key: "app-content",
|
|
226
|
+
content: {
|
|
227
|
+
nodeType: "translation",
|
|
228
|
+
translation: {
|
|
229
|
+
en: {
|
|
230
|
+
viteLogo: "Vite logo",
|
|
231
|
+
reactLogo: "React logo",
|
|
232
|
+
title: "Vite + React",
|
|
233
|
+
countButton: "count is",
|
|
234
|
+
editMessage: "Edit",
|
|
235
|
+
hmrMessage: "and save to test HMR",
|
|
236
|
+
readTheDocs: "Click on the Vite and React logos to learn more",
|
|
237
|
+
},
|
|
238
|
+
id: {
|
|
239
|
+
viteLogo: "Logo Vite",
|
|
240
|
+
reactLogo: "Logo React",
|
|
241
|
+
title: "Vite + React",
|
|
242
|
+
countButton: "hitungan adalah",
|
|
243
|
+
editMessage: "Ubah",
|
|
244
|
+
hmrMessage: "dan simpan untuk menguji HMR",
|
|
245
|
+
readTheDocs: "Klik pada logo Vite dan React untuk mempelajari lebih lanjut",
|
|
246
|
+
},
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
```
|
|
251
|
+
|
|
252
|
+
```tsx fileName="src/App.tsx"
|
|
253
|
+
import { useState, type FC } from "react";
|
|
254
|
+
import reactLogo from "./assets/react.svg";
|
|
255
|
+
import viteLogo from "/vite.svg";
|
|
256
|
+
import "./App.css";
|
|
257
|
+
import { IntlayerProvider, useIntlayer } from "react-intlayer";
|
|
258
|
+
|
|
259
|
+
const AppContent: FC = () => {
|
|
260
|
+
const [count, setCount] = useState(0);
|
|
261
|
+
const content = useIntlayer("app-content");
|
|
262
|
+
|
|
263
|
+
return (
|
|
264
|
+
<>
|
|
265
|
+
<div>
|
|
266
|
+
<a href="https://vitejs.dev" target="_blank">
|
|
267
|
+
<img src={viteLogo} className="logo" alt={content.viteLogo.value} />
|
|
268
|
+
</a>
|
|
269
|
+
<a href="https://react.dev" target="_blank">
|
|
270
|
+
<img
|
|
271
|
+
src={reactLogo}
|
|
272
|
+
className="logo react"
|
|
273
|
+
alt={content.reactLogo.value}
|
|
274
|
+
/>
|
|
275
|
+
</a>
|
|
276
|
+
</div>
|
|
277
|
+
<h1>{content.title}</h1>
|
|
278
|
+
<div className="card">
|
|
279
|
+
<button onClick={() => setCount((count) => count + 1)}>
|
|
280
|
+
{content.countButton} {count}
|
|
281
|
+
</button>
|
|
282
|
+
<p>
|
|
283
|
+
{content.editMessage} <code>src/App.tsx</code> {content.hmrMessage}
|
|
284
|
+
</p>
|
|
285
|
+
</div>
|
|
286
|
+
<p className="read-the-docs">{content.readTheDocs}</p>
|
|
287
|
+
</>
|
|
288
|
+
);
|
|
289
|
+
};
|
|
290
|
+
|
|
291
|
+
const App: FC = () => (
|
|
292
|
+
<IntlayerProvider>
|
|
293
|
+
<AppContent />
|
|
294
|
+
</IntlayerProvider>
|
|
295
|
+
);
|
|
296
|
+
|
|
297
|
+
export default App;
|
|
298
|
+
```
|
|
299
|
+
|
|
300
|
+
</Tab>
|
|
301
|
+
</Tabs>
|
|
302
|
+
|
|
303
|
+
- **`IntlayerProvider`** digunakan untuk menyediakan lokal ke komponen bersarang.
|
|
304
|
+
|
|
305
|
+
### (Opsional) Langkah 6: Ubah bahasa konten Anda
|
|
306
|
+
|
|
307
|
+
Untuk mengubah bahasa konten Anda, Anda dapat menggunakan fungsi `setLocale` yang disediakan oleh hook `useLocale`. Fungsi ini memungkinkan Anda untuk mengatur lokal aplikasi dan memperbarui konten yang sesuai.
|
|
308
|
+
|
|
309
|
+
```tsx fileName="src/components/LocaleSwitcher.tsx"
|
|
310
|
+
import type { FC } from "react";
|
|
311
|
+
import { Locales } from "intlayer";
|
|
312
|
+
import { useLocale } from "react-intlayer";
|
|
313
|
+
|
|
314
|
+
const LocaleSwitcher: FC = () => {
|
|
315
|
+
const { setLocale } = useLocale();
|
|
316
|
+
|
|
317
|
+
return (
|
|
318
|
+
<button onClick={() => setLocale(Locales.English)}>
|
|
319
|
+
Ubah Bahasa ke Inggris
|
|
320
|
+
</button>
|
|
321
|
+
);
|
|
322
|
+
};
|
|
323
|
+
```
|
|
324
|
+
|
|
325
|
+
> Untuk mempelajari lebih lanjut tentang hook `useLocale`, lihat [dokumentasi](https://github.com/aymericzip/intlayer/blob/main/docs/docs/en/packages/react-intlayer/useLocale.md).
|
|
326
|
+
|
|
327
|
+
### (Opsional) Langkah 7: Isi terjemahan yang hilang
|
|
328
|
+
|
|
329
|
+
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.
|
|
330
|
+
|
|
331
|
+
```bash
|
|
332
|
+
npx intlayer test # Uji apakah ada terjemahan yang hilang
|
|
333
|
+
```
|
|
334
|
+
|
|
335
|
+
```bash
|
|
336
|
+
npx intlayer fill # Isi terjemahan yang hilang
|
|
337
|
+
```
|
|
338
|
+
|
|
339
|
+
> Untuk detail lebih lanjut, silakan merujuk ke [dokumentasi CLI](https://github.com/aymericzip/intlayer/blob/main/docs/docs/id/cli/ci.md)
|
|
340
|
+
|
|
341
|
+
### Konfigurasi Git
|
|
342
|
+
|
|
343
|
+
Disarankan untuk mengabaikan file yang dihasilkan oleh Intlayer. Ini memungkinkan Anda untuk menghindari memasukkannya ke dalam repositori Git Anda.
|
|
344
|
+
|
|
345
|
+
Untuk melakukannya, Anda dapat menambahkan instruksi berikut ke file `.gitignore` Anda:
|
|
346
|
+
|
|
347
|
+
```plaintext fileName=".gitignore"
|
|
348
|
+
# Abaikan file yang dihasilkan oleh Intlayer
|
|
349
|
+
.intlayer
|
|
350
|
+
```
|
|
351
|
+
|
|
352
|
+
### Ekstensi VS Code
|
|
353
|
+
|
|
354
|
+
Untuk meningkatkan pengalaman pengembangan Anda dengan Intlayer, Anda dapat menginstal **Ekstensi Intlayer VS Code** resmi.
|
|
355
|
+
|
|
356
|
+
[Instal dari VS Code Marketplace](https://marketplace.visualstudio.com/items?itemName=intlayer.intlayer-vs-code-extension)
|
|
357
|
+
|
|
358
|
+
Ekstensi ini menyediakan:
|
|
359
|
+
|
|
360
|
+
- **Autocompletion** untuk kunci terjemahan.
|
|
361
|
+
- **Deteksi kesalahan waktu nyata** untuk terjemahan yang hilang.
|
|
362
|
+
- **Pratinjau sebaris** dari konten yang diterjemahkan.
|
|
363
|
+
- **Tindakan cepat** untuk membuat dan memperbarui terjemahan dengan mudah.
|
|
364
|
+
|
|
365
|
+
Untuk detail lebih lanjut tentang cara menggunakan ekstensi, lihat [dokumentasi Ekstensi Intlayer VS Code](https://intlayer.org/doc/vs-code-extension).
|
|
366
|
+
|
|
367
|
+
### Melangkah Lebih Jauh
|
|
368
|
+
|
|
369
|
+
Untuk melangkah lebih jauh, Anda dapat mengimplementasikan [editor visual](https://github.com/aymericzip/intlayer/blob/main/docs/docs/en/intlayer_visual_editor.md) atau mengeksternalisasi konten Anda menggunakan [CMS](https://github.com/aymericzip/intlayer/blob/main/docs/docs/en/intlayer_CMS.md).
|