Language Switcher Situs Ini Cuma Nge-prefix `/en`, Bukan Nerjemahin Slug
Banyak situs dwibahasa punya sistem “slug mapping” table buat nerjemahin URL antar bahasa — satu entri database yang bilang /blog/pindah-ke-astro di Indonesia sama dengan /en/blog/moving-to-astro di Inggris. Situs ini nggak punya itu sama sekali.
Cara kerjanya: localePath dan alternateLocalePath di src/lib/i18n-url.ts cuma nge-prefix atau nge-strip /en dari path yang lagi aktif. Itu doang. Digabung sama i18n routing bawaan Astro (defaultLocale: 'id', prefixDefaultLocale: false), itu udah seluruh logic language switching di situs ini.
Konsekuensinya: setiap entri content collection wajib pakai nama file yang sama persis di folder id/ dan en/. src/content/blog/id/pindah-ke-astro.md dan src/content/blog/en/pindah-ke-astro.md harus cocok, kalau enggak, switcher bakal ngelink langsung ke 404.
Kenapa saya terima trade-off ini: simplicity. Nggak perlu maintain mapping table terpisah, nggak ada query database, nggak ada API call cuma buat nentuin URL padanan. Cukup disiplin penamaan file.
Downside nyata yang saya sadari: kalau suatu saat saya pengen slug English yang beda buat SEO keyword lokal (misalnya slug ID pakai istilah Indonesia, slug EN pakai istilah Inggris yang lebih sering dicari), saya harus refactor sistem ini jadi mapping eksplisit. Belum perlu sekarang karena skala blog masih kecil dan saya lebih milih konsistensi daripada optimasi prematur.
Constraint sederhana kayak “nama file harus sama” ini keliatan sepele, tapi itu justru yang bikin isi i18n-url.ts cuma belasan baris kode tanpa satupun dependency tambahan.