@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.
- package/README.md +1 -0
- package/dist/cjs/generated/docs.entry.cjs +19 -0
- package/dist/cjs/generated/docs.entry.cjs.map +1 -1
- package/dist/esm/generated/docs.entry.mjs +19 -0
- package/dist/esm/generated/docs.entry.mjs.map +1 -1
- package/dist/types/generated/docs.entry.d.ts +1 -0
- package/dist/types/generated/docs.entry.d.ts.map +1 -1
- package/docs/ar/intlayer_with_svelte_kit.md +730 -0
- package/docs/ar/intlayer_with_vite+svelte.md +288 -104
- package/docs/de/intlayer_with_svelte_kit.md +730 -0
- package/docs/de/intlayer_with_vite+svelte.md +302 -101
- package/docs/en/intlayer_with_svelte_kit.md +560 -0
- package/docs/en/intlayer_with_vite+svelte.md +153 -15
- package/docs/en/introduction.md +2 -0
- package/docs/en-GB/intlayer_with_svelte_kit.md +730 -0
- package/docs/en-GB/intlayer_with_vite+svelte.md +262 -84
- package/docs/es/intlayer_with_svelte_kit.md +730 -0
- package/docs/es/intlayer_with_vite+svelte.md +300 -107
- package/docs/fr/intlayer_with_svelte_kit.md +762 -0
- package/docs/fr/intlayer_with_vite+svelte.md +297 -101
- package/docs/hi/intlayer_with_svelte_kit.md +730 -0
- package/docs/hi/intlayer_with_vite+svelte.md +298 -108
- package/docs/id/intlayer_with_svelte_kit.md +730 -0
- package/docs/id/intlayer_with_vite+svelte.md +277 -99
- package/docs/it/intlayer_with_svelte_kit.md +762 -0
- package/docs/it/intlayer_with_vite+svelte.md +275 -99
- package/docs/ja/intlayer_with_svelte_kit.md +730 -0
- package/docs/ja/intlayer_with_vite+svelte.md +295 -110
- package/docs/ko/intlayer_with_svelte_kit.md +730 -0
- package/docs/ko/intlayer_with_vite+svelte.md +286 -199
- package/docs/pl/intlayer_with_svelte_kit.md +732 -0
- package/docs/pl/intlayer_with_vite+svelte.md +273 -101
- package/docs/pt/intlayer_with_svelte_kit.md +764 -0
- package/docs/pt/intlayer_with_vite+svelte.md +290 -96
- package/docs/ru/intlayer_with_svelte_kit.md +730 -0
- package/docs/ru/intlayer_with_vite+svelte.md +275 -99
- package/docs/tr/intlayer_with_svelte_kit.md +730 -0
- package/docs/tr/intlayer_with_vite+svelte.md +297 -119
- package/docs/vi/intlayer_with_svelte_kit.md +730 -0
- package/docs/vi/intlayer_with_vite+svelte.md +275 -102
- package/docs/zh/intlayer_with_svelte_kit.md +730 -0
- package/docs/zh/intlayer_with_vite+svelte.md +309 -107
- package/package.json +6 -6
- package/src/generated/docs.entry.ts +19 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
createdAt: 2025-04-18
|
|
3
|
-
updatedAt: 2025-
|
|
3
|
+
updatedAt: 2025-11-19
|
|
4
4
|
title: Cara menerjemahkan aplikasi Vite dan Svelte Anda – panduan i18n 2025
|
|
5
5
|
description: Temukan cara membuat situs web Vite dan Svelte Anda menjadi multibahasa. Ikuti dokumentasi untuk melakukan internasionalisasi (i18n) dan menerjemahkannya.
|
|
6
6
|
keywords:
|
|
@@ -14,37 +14,46 @@ slugs:
|
|
|
14
14
|
- doc
|
|
15
15
|
- environment
|
|
16
16
|
- vite-and-svelte
|
|
17
|
-
|
|
17
|
+
applicationTemplate: https://github.com/aymericzip/intlayer-vite-svelte-template
|
|
18
18
|
history:
|
|
19
|
+
- version: 5.5.11
|
|
20
|
+
date: 2025-11-19
|
|
21
|
+
changes: Memperbarui dokumen
|
|
19
22
|
- version: 5.5.10
|
|
20
23
|
date: 2025-06-29
|
|
21
|
-
changes:
|
|
24
|
+
changes: Memulai riwayat
|
|
22
25
|
---
|
|
23
26
|
|
|
24
27
|
# Terjemahkan situs web Vite dan Svelte Anda menggunakan Intlayer | Internasionalisasi (i18n)
|
|
25
28
|
|
|
26
|
-
> Paket ini sedang dalam pengembangan. Lihat [issue](https://github.com/aymericzip/intlayer/issues/114) untuk informasi lebih lanjut. Tunjukkan minat Anda pada Intlayer untuk Svelte dengan menyukai issue tersebut
|
|
27
|
-
|
|
28
|
-
<!-- Lihat [Application Template](https://github.com/aymericzip/intlayer-solid-template) di GitHub. -->
|
|
29
|
-
|
|
30
29
|
## Daftar Isi
|
|
31
30
|
|
|
32
31
|
<TOC/>
|
|
33
32
|
|
|
34
33
|
## Apa itu Intlayer?
|
|
35
34
|
|
|
36
|
-
**Intlayer** adalah pustaka internasionalisasi (i18n)
|
|
35
|
+
**Intlayer** adalah pustaka internasionalisasi (i18n) open-source yang inovatif, dirancang untuk menyederhanakan dukungan multibahasa dalam aplikasi web modern.
|
|
37
36
|
|
|
38
37
|
Dengan Intlayer, Anda dapat:
|
|
39
38
|
|
|
40
39
|
- **Mengelola terjemahan dengan mudah** menggunakan kamus deklaratif di tingkat komponen.
|
|
41
40
|
- **Melokalkan metadata**, rute, dan konten secara dinamis.
|
|
42
|
-
- **
|
|
43
|
-
- **
|
|
41
|
+
- **Menjamin dukungan TypeScript** dengan tipe yang dihasilkan secara otomatis, meningkatkan autocompletion dan deteksi kesalahan.
|
|
42
|
+
- **Memanfaatkan fitur canggih**, seperti deteksi dan pergantian locale secara dinamis.
|
|
44
43
|
|
|
45
44
|
---
|
|
46
45
|
|
|
47
|
-
## Panduan Langkah demi Langkah untuk Mengatur Intlayer
|
|
46
|
+
## Panduan Langkah demi Langkah untuk Mengatur Intlayer dalam Aplikasi Vite dan Svelte
|
|
47
|
+
|
|
48
|
+
<iframe
|
|
49
|
+
src="https://stackblitz.com/github/aymericzip/intlayer-vite-react-template?embed=1&ctl=1&file=intlayer.config.ts"
|
|
50
|
+
className="m-auto overflow-hidden rounded-lg border-0 max-md:size-full max-md:h-[700px] md:aspect-16/9 md:w-full"
|
|
51
|
+
title="Demo CodeSandbox - Cara Menginternasionalisasi aplikasi Anda menggunakan Intlayer"
|
|
52
|
+
sandbox="allow-forms allow-modals allow-popups allow-presentation allow-same-origin allow-scripts"
|
|
53
|
+
loading="lazy"
|
|
54
|
+
/>
|
|
55
|
+
|
|
56
|
+
Lihat [Template Aplikasi](https://github.com/aymericzip/intlayer-vite-svelte-template) di GitHub.
|
|
48
57
|
|
|
49
58
|
### Langkah 1: Instalasi Dependensi
|
|
50
59
|
|
|
@@ -65,23 +74,26 @@ yarn add intlayer svelte-intlayer
|
|
|
65
74
|
yarn add vite-intlayer --save-dev
|
|
66
75
|
```
|
|
67
76
|
|
|
68
|
-
|
|
77
|
+
```bash packageManager="bun"
|
|
78
|
+
bun add intlayer svelte-intlayer
|
|
79
|
+
bun add vite-intlayer --save-dev
|
|
80
|
+
```
|
|
69
81
|
|
|
70
82
|
- **intlayer**
|
|
71
83
|
|
|
72
84
|
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), transpile, dan [perintah CLI](https://github.com/aymericzip/intlayer/blob/main/docs/docs/id/intlayer_cli.md).
|
|
73
85
|
|
|
74
86
|
- **svelte-intlayer**
|
|
75
|
-
Paket yang mengintegrasikan Intlayer dengan aplikasi Svelte.
|
|
87
|
+
Paket yang mengintegrasikan Intlayer dengan aplikasi Svelte. Ini menyediakan context providers dan hooks untuk internasionalisasi Svelte.
|
|
76
88
|
|
|
77
|
-
- **vite-intlayer**
|
|
78
|
-
Termasuk plugin Vite untuk mengintegrasikan Intlayer dengan [Vite bundler](https://vite.dev/guide/why.html#why-bundle-for-production), serta middleware untuk mendeteksi locale
|
|
89
|
+
- **vite-intlayer**
|
|
90
|
+
Termasuk plugin Vite untuk mengintegrasikan Intlayer dengan [Vite bundler](https://vite.dev/guide/why.html#why-bundle-for-production), serta middleware untuk mendeteksi locale yang dipilih pengguna, mengelola cookie, dan menangani pengalihan URL.
|
|
79
91
|
|
|
80
92
|
### Langkah 2: Konfigurasi proyek Anda
|
|
81
93
|
|
|
82
94
|
Buat file konfigurasi untuk mengatur bahasa aplikasi Anda:
|
|
83
95
|
|
|
84
|
-
```typescript fileName="intlayer.config.ts"
|
|
96
|
+
```typescript fileName="intlayer.config.ts"
|
|
85
97
|
import { Locales, type IntlayerConfig } from "intlayer";
|
|
86
98
|
|
|
87
99
|
const config: IntlayerConfig = {
|
|
@@ -90,7 +102,7 @@ const config: IntlayerConfig = {
|
|
|
90
102
|
Locales.ENGLISH,
|
|
91
103
|
Locales.FRENCH,
|
|
92
104
|
Locales.SPANISH,
|
|
93
|
-
//
|
|
105
|
+
// Locale lain milik Anda
|
|
94
106
|
],
|
|
95
107
|
defaultLocale: Locales.ENGLISH,
|
|
96
108
|
},
|
|
@@ -99,51 +111,13 @@ const config: IntlayerConfig = {
|
|
|
99
111
|
export default config;
|
|
100
112
|
```
|
|
101
113
|
|
|
102
|
-
```javascript fileName="intlayer.config.mjs" codeFormat="esm"
|
|
103
|
-
import { Locales } from "intlayer";
|
|
104
|
-
|
|
105
|
-
/** @type {import('intlayer').IntlayerConfig} */
|
|
106
|
-
const config = {
|
|
107
|
-
internationalization: {
|
|
108
|
-
locales: [
|
|
109
|
-
Locales.ENGLISH,
|
|
110
|
-
Locales.FRENCH,
|
|
111
|
-
Locales.SPANISH,
|
|
112
|
-
// Bahasa lain milik Anda
|
|
113
|
-
],
|
|
114
|
-
defaultLocale: Locales.ENGLISH,
|
|
115
|
-
},
|
|
116
|
-
};
|
|
117
|
-
|
|
118
|
-
export default config;
|
|
119
|
-
```
|
|
120
|
-
|
|
121
|
-
```javascript fileName="intlayer.config.cjs" codeFormat="commonjs"
|
|
122
|
-
const { Locales } = require("intlayer");
|
|
123
|
-
|
|
124
|
-
/** @type {import('intlayer').IntlayerConfig} */
|
|
125
|
-
const config = {
|
|
126
|
-
internationalization: {
|
|
127
|
-
locales: [
|
|
128
|
-
Locales.ENGLISH,
|
|
129
|
-
Locales.FRENCH,
|
|
130
|
-
Locales.SPANISH,
|
|
131
|
-
// Bahasa lain milik Anda
|
|
132
|
-
],
|
|
133
|
-
defaultLocale: Locales.ENGLISH,
|
|
134
|
-
},
|
|
135
|
-
};
|
|
136
|
-
|
|
137
|
-
module.exports = config;
|
|
138
|
-
```
|
|
139
|
-
|
|
140
114
|
> 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 lainnya. Untuk daftar lengkap parameter yang tersedia, lihat [dokumentasi konfigurasi](https://github.com/aymericzip/intlayer/blob/main/docs/docs/id/configuration.md).
|
|
141
115
|
|
|
142
116
|
### Langkah 3: Integrasikan Intlayer dalam Konfigurasi Vite Anda
|
|
143
117
|
|
|
144
118
|
Tambahkan plugin intlayer ke dalam konfigurasi Anda.
|
|
145
119
|
|
|
146
|
-
```typescript fileName="vite.config.ts"
|
|
120
|
+
```typescript fileName="vite.config.ts"
|
|
147
121
|
import { defineConfig } from "vite";
|
|
148
122
|
import { svelte } from "@sveltejs/vite-plugin-svelte";
|
|
149
123
|
import { intlayer } from "vite-intlayer";
|
|
@@ -154,29 +128,7 @@ export default defineConfig({
|
|
|
154
128
|
});
|
|
155
129
|
```
|
|
156
130
|
|
|
157
|
-
|
|
158
|
-
import { defineConfig } from "vite";
|
|
159
|
-
import { svelte } from "@sveltejs/vite-plugin-svelte";
|
|
160
|
-
import { intlayer } from "vite-intlayer";
|
|
161
|
-
|
|
162
|
-
// https://vitejs.dev/config/
|
|
163
|
-
export default defineConfig({
|
|
164
|
-
plugins: [svelte(), intlayer()],
|
|
165
|
-
});
|
|
166
|
-
```
|
|
167
|
-
|
|
168
|
-
```javascript fileName="vite.config.cjs" codeFormat="commonjs"
|
|
169
|
-
const { defineConfig } = require("vite");
|
|
170
|
-
const react = require("@vitejs/plugin-react-swc");
|
|
171
|
-
const { intlayer } = require("vite-intlayer");
|
|
172
|
-
|
|
173
|
-
// https://vitejs.dev/config/
|
|
174
|
-
module.exports = defineConfig({
|
|
175
|
-
plugins: [react(), intlayer()],
|
|
176
|
-
});
|
|
177
|
-
```
|
|
178
|
-
|
|
179
|
-
> Plugin Vite `intlayer()` digunakan untuk mengintegrasikan Intlayer dengan Vite. Plugin ini memastikan pembuatan file deklarasi konten dan memantau file tersebut dalam mode pengembangan. Plugin ini juga mendefinisikan variabel lingkungan Intlayer di dalam aplikasi Vite. Selain itu, plugin ini menyediakan alias untuk mengoptimalkan performa.
|
|
131
|
+
> Plugin Vite `intlayer()` digunakan untuk mengintegrasikan Intlayer dengan Vite. Plugin ini memastikan pembuatan file deklarasi konten dan memantau file tersebut dalam mode pengembangan. Plugin ini juga mendefinisikan variabel lingkungan Intlayer dalam aplikasi Vite. Selain itu, plugin ini menyediakan alias untuk mengoptimalkan performa.
|
|
180
132
|
|
|
181
133
|
### Langkah 4: Deklarasikan Konten Anda
|
|
182
134
|
|
|
@@ -203,6 +155,7 @@ export default appContent;
|
|
|
203
155
|
import { t } from "intlayer";
|
|
204
156
|
|
|
205
157
|
/** @type {import('intlayer').Dictionary} */
|
|
158
|
+
// Mendefinisikan konten aplikasi dengan terjemahan untuk beberapa bahasa
|
|
206
159
|
const appContent = {
|
|
207
160
|
key: "app",
|
|
208
161
|
content: {
|
|
@@ -221,7 +174,7 @@ export default appContent;
|
|
|
221
174
|
const { t } = require("intlayer");
|
|
222
175
|
|
|
223
176
|
/** @type {import('intlayer').Dictionary} */
|
|
224
|
-
//
|
|
177
|
+
// Mendefinisikan konten aplikasi dengan terjemahan untuk beberapa bahasa
|
|
225
178
|
const appContent = {
|
|
226
179
|
key: "app",
|
|
227
180
|
content: {
|
|
@@ -253,37 +206,264 @@ module.exports = appContent;
|
|
|
253
206
|
}
|
|
254
207
|
```
|
|
255
208
|
|
|
256
|
-
> Deklarasi konten Anda dapat didefinisikan di mana saja dalam aplikasi Anda selama
|
|
209
|
+
> Deklarasi konten Anda dapat didefinisikan di mana saja dalam aplikasi Anda selama mereka dimasukkan ke dalam direktori `contentDir` (secara default, `./src`). Dan sesuai dengan ekstensi file deklarasi konten (secara default, `.content.{json,ts,tsx,js,jsx,mjs,mjx,cjs,cjx}`).
|
|
210
|
+
|
|
211
|
+
> Untuk detail lebih lanjut, lihat [dokumentasi deklarasi konten](https://github.com/aymericzip/intlayer/blob/main/docs/docs/id/dictionary/content_file.md).
|
|
212
|
+
|
|
213
|
+
### Langkah 5: Gunakan Intlayer dalam Kode Anda
|
|
214
|
+
|
|
215
|
+
```svelte fileName="src/App.svelte"
|
|
216
|
+
<script>
|
|
217
|
+
import { useIntlayer } from "svelte-intlayer";
|
|
218
|
+
|
|
219
|
+
const content = useIntlayer("app");
|
|
220
|
+
</script>
|
|
221
|
+
|
|
222
|
+
<div>
|
|
223
|
+
|
|
224
|
+
|
|
225
|
+
<!-- Render konten sebagai konten sederhana -->
|
|
226
|
+
<h1>{$content.title}</h1>
|
|
227
|
+
<!-- Untuk merender konten yang dapat diedit menggunakan editor -->
|
|
228
|
+
<h1><svelte:component this={$content.title} /></h1>
|
|
229
|
+
<!-- Untuk merender konten sebagai string -->
|
|
230
|
+
<div aria-label={$content.title.value}></div>
|
|
231
|
+
```
|
|
232
|
+
|
|
233
|
+
### (Opsional) Langkah 6: Ubah bahasa konten Anda
|
|
257
234
|
|
|
258
|
-
|
|
235
|
+
```svelte fileName="src/App.svelte"
|
|
236
|
+
<script lang="ts">
|
|
237
|
+
import { getLocaleName } from 'intlayer';
|
|
238
|
+
import { useLocale } from 'svelte-intlayer';
|
|
259
239
|
|
|
260
|
-
|
|
240
|
+
// Dapatkan informasi locale dan fungsi setLocale
|
|
241
|
+
const { locale, availableLocales, setLocale } = useLocale();
|
|
261
242
|
|
|
262
|
-
|
|
243
|
+
// Tangani perubahan locale
|
|
244
|
+
const changeLocale = (event: Event) => {
|
|
245
|
+
const target = event.target as HTMLSelectElement;
|
|
246
|
+
const newLocale = target.value;
|
|
247
|
+
setLocale(newLocale);
|
|
248
|
+
};
|
|
249
|
+
</script>
|
|
250
|
+
|
|
251
|
+
<div>
|
|
252
|
+
<select value={$locale} on:change={changeLocale}>
|
|
253
|
+
{#each availableLocales ?? [] as loc}
|
|
254
|
+
<option value={loc}>
|
|
255
|
+
{getLocaleName(loc)}
|
|
256
|
+
</option>
|
|
257
|
+
{/each}
|
|
258
|
+
</select>
|
|
259
|
+
</div>
|
|
260
|
+
```
|
|
263
261
|
|
|
264
|
-
### (Opsional) Langkah
|
|
262
|
+
### (Opsional) Langkah 7: Render Markdown
|
|
265
263
|
|
|
266
|
-
|
|
264
|
+
Intlayer mendukung rendering konten Markdown langsung di aplikasi Svelte Anda. Secara default, Markdown diperlakukan sebagai teks biasa. Untuk mengubah Markdown menjadi HTML kaya, Anda dapat mengintegrasikan `@humanspeak/svelte-markdown`, atau parser markdown lainnya.
|
|
267
265
|
|
|
268
|
-
|
|
266
|
+
> Untuk melihat cara mendeklarasikan konten markdown menggunakan paket `intlayer`, lihat [dokumen markdown](https://github.com/aymericzip/intlayer/tree/main/docs/docs/id/dictionary/markdown.md).
|
|
269
267
|
|
|
270
|
-
|
|
268
|
+
```svelte fileName="src/App.svelte"
|
|
269
|
+
<script>
|
|
270
|
+
import { setIntlayerMarkdown } from "svelte-intlayer";
|
|
271
271
|
|
|
272
|
-
|
|
272
|
+
setIntlayerMarkdown((markdown) =>
|
|
273
|
+
// render konten markdown sebagai string
|
|
274
|
+
return markdown;
|
|
275
|
+
);
|
|
276
|
+
</script>
|
|
273
277
|
|
|
274
|
-
|
|
278
|
+
<h1>{$content.markdownContent}</h1>
|
|
279
|
+
```
|
|
280
|
+
|
|
281
|
+
> Anda juga dapat mengakses data front-matter markdown Anda menggunakan properti `content.markdownContent.metadata.xxx`.
|
|
282
|
+
|
|
283
|
+
### (Opsional) Langkah 8: Siapkan editor / CMS intlayer
|
|
284
|
+
|
|
285
|
+
Untuk menyiapkan editor intlayer, Anda harus mengikuti [dokumentasi editor intlayer](https://github.com/aymericzip/intlayer/blob/main/docs/docs/id/intlayer_visual_editor.md).
|
|
275
286
|
|
|
276
|
-
|
|
287
|
+
Untuk menyiapkan CMS intlayer, Anda harus mengikuti [dokumentasi CMS intlayer](https://github.com/aymericzip/intlayer/blob/main/docs/docs/id/intlayer_CMS.md).
|
|
288
|
+
|
|
289
|
+
Secara paralel, dalam aplikasi Svelte Anda, Anda harus menambahkan baris berikut di layout, atau di root aplikasi Anda:
|
|
290
|
+
|
|
291
|
+
```svelte fileName="src/layout.svelte"
|
|
292
|
+
import { useIntlayerEditor } from "svelte-intlayer";
|
|
293
|
+
|
|
294
|
+
useIntlayerEditor();
|
|
295
|
+
```
|
|
277
296
|
|
|
278
|
-
|
|
297
|
+
### (Opsional) Langkah 7: Tambahkan Routing yang dilokalkan ke aplikasi Anda
|
|
279
298
|
|
|
280
|
-
|
|
299
|
+
Untuk menangani routing yang dilokalkan dalam aplikasi Svelte Anda, Anda dapat menggunakan `svelte-spa-router` bersama dengan `localeFlatMap` dari Intlayer untuk menghasilkan rute untuk setiap locale.
|
|
281
300
|
|
|
282
|
-
|
|
301
|
+
Pertama, instal `svelte-spa-router`:
|
|
302
|
+
|
|
303
|
+
```bash packageManager="npm"
|
|
304
|
+
npm install svelte-spa-router
|
|
305
|
+
```
|
|
306
|
+
|
|
307
|
+
```bash packageManager="pnpm"
|
|
308
|
+
pnpm add svelte-spa-router
|
|
309
|
+
```
|
|
310
|
+
|
|
311
|
+
```bash packageManager="yarn"
|
|
312
|
+
yarn add svelte-spa-router
|
|
313
|
+
```
|
|
314
|
+
|
|
315
|
+
```bash packageManager="bun"
|
|
316
|
+
bun add svelte-spa-router
|
|
317
|
+
```
|
|
318
|
+
|
|
319
|
+
Kemudian, buat file `Router.svelte` untuk mendefinisikan rute Anda:
|
|
320
|
+
|
|
321
|
+
```svelte fileName="src/Router.svelte"
|
|
322
|
+
<script lang="ts">
|
|
323
|
+
import { localeFlatMap } from "intlayer";
|
|
324
|
+
import Router from "svelte-spa-router";
|
|
325
|
+
import { wrap } from "svelte-spa-router/wrap";
|
|
326
|
+
import App from "./App.svelte";
|
|
327
|
+
|
|
328
|
+
const routes = Object.fromEntries(
|
|
329
|
+
localeFlatMap(({locale, urlPrefix}) => [
|
|
330
|
+
[
|
|
331
|
+
urlPrefix || '/',
|
|
332
|
+
wrap({
|
|
333
|
+
component: App as any,
|
|
334
|
+
props: {
|
|
335
|
+
locale,
|
|
336
|
+
},
|
|
337
|
+
}),
|
|
338
|
+
],
|
|
339
|
+
])
|
|
340
|
+
);
|
|
341
|
+
</script>
|
|
342
|
+
|
|
343
|
+
<Router {routes} />
|
|
344
|
+
```
|
|
345
|
+
|
|
346
|
+
Perbarui `main.ts` Anda untuk memasang komponen `Router` menggantikan `App`:
|
|
347
|
+
|
|
348
|
+
```typescript fileName="src/main.ts"
|
|
349
|
+
import { mount } from "svelte";
|
|
350
|
+
import Router from "./Router.svelte";
|
|
351
|
+
|
|
352
|
+
const app = mount(Router, {
|
|
353
|
+
target: document.getElementById("app")!,
|
|
354
|
+
});
|
|
355
|
+
|
|
356
|
+
export default app;
|
|
357
|
+
```
|
|
358
|
+
|
|
359
|
+
Terakhir, perbarui `App.svelte` Anda untuk menerima properti `locale` dan menggunakannya dengan `useIntlayer`:
|
|
360
|
+
|
|
361
|
+
```svelte fileName="src/App.svelte"
|
|
362
|
+
<script lang="ts">
|
|
363
|
+
import type { Locale } from 'intlayer';
|
|
364
|
+
import { useIntlayer } from 'svelte-intlayer';
|
|
365
|
+
import Counter from './lib/Counter.svelte';
|
|
366
|
+
import LocaleSwitcher from './lib/LocaleSwitcher.svelte';
|
|
367
|
+
|
|
368
|
+
export let locale: Locale;
|
|
369
|
+
|
|
370
|
+
$: content = useIntlayer('app', locale);
|
|
371
|
+
</script>
|
|
372
|
+
|
|
373
|
+
<main>
|
|
374
|
+
<div class="locale-switcher-container">
|
|
375
|
+
<LocaleSwitcher currentLocale={locale} />
|
|
376
|
+
</div>
|
|
377
|
+
|
|
378
|
+
<!-- ... sisa aplikasi Anda ... -->
|
|
379
|
+
</main>
|
|
380
|
+
```
|
|
381
|
+
|
|
382
|
+
#### Konfigurasi Routing Server-Side (Opsional)
|
|
383
|
+
|
|
384
|
+
Secara paralel, Anda juga dapat menggunakan `intlayerProxy` untuk menambahkan routing sisi server ke aplikasi Anda. Plugin ini akan secara otomatis mendeteksi locale saat ini berdasarkan URL dan mengatur cookie locale yang sesuai. Jika tidak ada locale yang ditentukan, plugin akan menentukan locale yang paling sesuai berdasarkan preferensi bahasa browser pengguna. Jika tidak ada locale yang terdeteksi, maka akan mengarahkan ulang ke locale default.
|
|
385
|
+
|
|
386
|
+
> Perlu diperhatikan bahwa untuk menggunakan `intlayerProxy` di produksi, Anda perlu memindahkan paket `vite-intlayer` dari `devDependencies` ke `dependencies`.
|
|
387
|
+
|
|
388
|
+
```typescript {3,7} fileName="vite.config.ts" codeFormat="typescript"
|
|
389
|
+
import { defineConfig } from "vite";
|
|
390
|
+
import { svelte } from "@sveltejs/vite-plugin-svelte";
|
|
391
|
+
import { intlayer, intlayerProxy } from "vite-intlayer";
|
|
392
|
+
|
|
393
|
+
typescript {3,7} fileName="vite.config.ts" codeFormat="typescript"
|
|
394
|
+
import { defineConfig } from "vite";
|
|
395
|
+
import { svelte } from "@sveltejs/vite-plugin-svelte";
|
|
396
|
+
import { intlayer, intlayerProxy } from "vite-intlayer";
|
|
397
|
+
|
|
398
|
+
// https://vitejs.dev/config/
|
|
399
|
+
export default defineConfig({
|
|
400
|
+
plugins: [svelte(), intlayer(), intlayerProxy()],
|
|
401
|
+
});
|
|
402
|
+
```
|
|
403
|
+
|
|
404
|
+
```javascript {3,7} fileName="vite.config.mjs" codeFormat="esm"
|
|
405
|
+
import { defineConfig } from "vite";
|
|
406
|
+
import { svelte } from "@sveltejs/vite-plugin-svelte";
|
|
407
|
+
import { intlayer, intlayerProxy } from "vite-intlayer";
|
|
408
|
+
|
|
409
|
+
// https://vitejs.dev/config/
|
|
410
|
+
export default defineConfig({
|
|
411
|
+
plugins: [svelte(), intlayer(), intlayerProxy()],
|
|
412
|
+
});
|
|
413
|
+
```
|
|
414
|
+
|
|
415
|
+
```javascript {3,7} fileName="vite.config.cjs" codeFormat="commonjs"
|
|
416
|
+
const { defineConfig } = require("vite");
|
|
417
|
+
const { svelte } = require("@sveltejs/vite-plugin-svelte");
|
|
418
|
+
const { intlayer, intlayerProxy } = require("vite-intlayer");
|
|
419
|
+
|
|
420
|
+
// https://vitejs.dev/config/
|
|
421
|
+
module.exports = defineConfig({
|
|
422
|
+
plugins: [svelte(), intlayer(), intlayerProxy()],
|
|
423
|
+
});
|
|
424
|
+
plugins: [svelte(), intlayer(), intlayerProxy()],
|
|
425
|
+
});
|
|
426
|
+
```
|
|
427
|
+
|
|
428
|
+
### (Opsional) Langkah 8: Ubah URL saat locale berubah
|
|
429
|
+
|
|
430
|
+
Untuk memungkinkan pengguna mengganti bahasa dan memperbarui URL sesuai, Anda dapat membuat komponen `LocaleSwitcher`. Komponen ini akan menggunakan `getLocalizedUrl` dari `intlayer` dan `push` dari `svelte-spa-router`.
|
|
431
|
+
|
|
432
|
+
```svelte fileName="src/lib/LocaleSwitcher.svelte"
|
|
433
|
+
<script lang="ts">
|
|
434
|
+
import { getLocaleName, getLocalizedUrl } from "intlayer";
|
|
435
|
+
import { useLocale } from "svelte-intlayer";
|
|
436
|
+
import { push } from "svelte-spa-router";
|
|
437
|
+
|
|
438
|
+
export let currentLocale: string | undefined = undefined;
|
|
439
|
+
|
|
440
|
+
// Dapatkan informasi locale
|
|
441
|
+
const { locale, availableLocales } = useLocale();
|
|
442
|
+
|
|
443
|
+
// Tangani perubahan locale
|
|
444
|
+
const changeLocale = (event: Event) => {
|
|
445
|
+
const target = event.target as HTMLSelectElement;
|
|
446
|
+
const newLocale = target.value;
|
|
447
|
+
const currentUrl = window.location.pathname;
|
|
448
|
+
const url = getLocalizedUrl( currentUrl, newLocale);
|
|
449
|
+
push(url);
|
|
450
|
+
};
|
|
451
|
+
</script>
|
|
452
|
+
|
|
453
|
+
<div class="locale-switcher">
|
|
454
|
+
<select value={currentLocale ?? $locale} onchange={changeLocale}>
|
|
455
|
+
{#each availableLocales ?? [] as loc}
|
|
456
|
+
<option value={loc}>
|
|
457
|
+
{getLocaleName(loc)}
|
|
458
|
+
</option>
|
|
459
|
+
{/each}
|
|
460
|
+
</select>
|
|
461
|
+
</div>
|
|
462
|
+
```
|
|
283
463
|
|
|
284
464
|
### Konfigurasi Git
|
|
285
465
|
|
|
286
|
-
Disarankan untuk mengabaikan file yang dihasilkan oleh Intlayer. Ini memungkinkan Anda menghindari meng-commit file tersebut ke repositori Git Anda.
|
|
466
|
+
Disarankan untuk mengabaikan file-file yang dihasilkan oleh Intlayer. Ini memungkinkan Anda untuk menghindari meng-commit file tersebut ke repositori Git Anda.
|
|
287
467
|
|
|
288
468
|
Untuk melakukan ini, Anda dapat menambahkan instruksi berikut ke file `.gitignore` Anda:
|
|
289
469
|
|
|
@@ -301,16 +481,14 @@ Untuk meningkatkan pengalaman pengembangan Anda dengan Intlayer, Anda dapat meng
|
|
|
301
481
|
Ekstensi ini menyediakan:
|
|
302
482
|
|
|
303
483
|
- **Autocompletion** untuk kunci terjemahan.
|
|
304
|
-
- **Deteksi kesalahan
|
|
484
|
+
- **Deteksi kesalahan waktu nyata** untuk terjemahan yang hilang.
|
|
305
485
|
- **Pratinjau inline** dari konten yang diterjemahkan.
|
|
306
486
|
- **Tindakan cepat** untuk dengan mudah membuat dan memperbarui terjemahan.
|
|
307
487
|
|
|
308
|
-
Untuk
|
|
488
|
+
Untuk detail lebih lanjut tentang cara menggunakan ekstensi ini, lihat [dokumentasi Ekstensi VS Code Intlayer](https://intlayer.org/doc/vs-code-extension).
|
|
309
489
|
|
|
310
490
|
---
|
|
311
491
|
|
|
312
492
|
### Melangkah Lebih Jauh
|
|
313
493
|
|
|
314
494
|
Untuk melangkah lebih jauh, Anda dapat mengimplementasikan [editor visual](https://github.com/aymericzip/intlayer/blob/main/docs/docs/id/intlayer_visual_editor.md) atau mengeksternalisasi konten Anda menggunakan [CMS](https://github.com/aymericzip/intlayer/blob/main/docs/docs/id/intlayer_CMS.md).
|
|
315
|
-
|
|
316
|
-
---
|