15. Internasionalisasi (i18n)
Ringkasan
Aplikasi memiliki Framework Multi-Bahasa (i18n) berbasis cookie yang mendukung Bahasa Indonesia (ID) dan Bahasa Inggris (EN) dengan nol kedipan hidrasi layout (*FOUC-free*) saat Server-Side Rendering (SSR).
Cara Kerja
Preferensi bahasa disimpan di dalam cookie bernama locale (locale=en atau locale=id).
mermaid
sequenceDiagram
autonumber
actor User
participant Switcher as Komponen LocaleSwitcher
participant Cookie as Document Cookie (locale=id)
participant Layout as Root Layout (layout.tsx)
participant I18nCtx as I18nProvider Context
User->>Switcher: Beralih Bahasa (ID <-> EN)
Switcher->>Cookie: Atur cookie "locale=id; path=/; max-age=31536000"
Switcher->>Switcher: Reload halaman di dalam Transisi React
Layout->>Cookie: Baca cookie di Server Component saat halaman dimuat
Layout->>I18nCtx: Oper initialLocale={locale} ke I18nProvider
I18nCtx-->>User: Render halaman terjemahan penuh di sisi Server!Pencarian Terjemahan Server (src/lib/i18n.ts)
typescript
export function getTranslation(locale: string | undefined, path: string): any {
const selectedLocale = (locale === "en" || locale === "id" ? locale : "id") as Locale;
const dict = translations[selectedLocale];
const keys = path.split(".");
let result: any = dict;
for (const key of keys) {
if (result && typeof result === "object" && key in result) {
result = result[key];
} else {
return path;
}
}
return result !== undefined && result !== null ? result : path;
}Berkas Terkait
src/lib/i18n.ts — Helper pencarian kunci terjemahan serversrc/context/i18n-context.tsx — Provider Context React & hook useTranslationsrc/components/locale-switcher.tsx — Komponen tombol switcher bahasasrc/locales/en.ts — Kamus terjemahan Bahasa Inggrissrc/locales/id.ts — Kamus terjemahan Bahasa Indonesia