Skip to content
··9 menit baca

Saya Menambahkan 5 Bahasa ke DIALØGUE dalam 48 Jam

Saya membuat dokumen perencanaan yang mengajarkan Claude Code cara melokalisasi — bukan sekadar menerjemahkan — lalu melihatnya bekerja di 5 bahasa secara paralel, mengubah frasa harfiah menjadi salinan yang terdengar alami.

Beberapa hari lalu, seorang pengguna bertanya apakah DIALØGUE mendukung bahasa Spanyol.

Ternyata belum.

48 jam kemudian, platform ini sudah mendukung lima bahasa — Spanyol, Vietnam, Jepang, Korea, dan Mandarin. Bukan sekadar tombol UI yang diterjemahkan. Lokalisasi native penuh. Podcast yang terdengar seolah dibuat khusus untuk setiap pasar.

Lima bahasa dalam 48 jam terdengar seperti saya mempekerjakan tim besar atau begadang berhari-hari. Tidak sama sekali.

Saya memberikan arahan tingkat tinggi kepada Claude Code. Dia menulis dokumen perencanaannya, lalu mengeksekusinya — sering kali menjalankan agen paralel di berbagai file secara bersamaan.

---

Rahasianya: Rencanakan Sekali, Eksekusi Cepat

Ini bagian yang menarik: saya tidak menulis dokumen perencanaan itu. Claude Code yang menulisnya — dengan panduan dari saya.

Saya mendeskripsikan apa yang saya inginkan: "Buat panduan gaya lokalisasi yang menjelaskan cara menerjemahkan secara natural, bukan literal. Sertakan contoh untuk Spanyol, Vietnam, Jepang, Korea, dan Cina. Bahas tingkat formalitas dan konteks budaya."

Claude Code menghasilkan panduan gaya lebih dari 1.000 baris, checklist komprehensif, dan playbook pipeline backend. Kemudian dia mengikuti rencananya sendiri untuk mengeksekusi pekerjaannya.

1. Panduan Gaya

Bukan glosarium terjemahan — tapi dokumen filosofi. Ini menjelaskan *bagaimana* cara melokalisasi, dengan contoh sebelum/sesudah untuk setiap bahasa.

Contoh untuk bahasa Spanyol:

| English | Literal (Salah) | Natural (Benar) |

|---------|-----------------|-----------------|

| "Ideas, Produced" | "Ideas, Producidas" | "De la Idea, al Podcast" |

| "Researched, Not Recycled" | "Investigado, No Reciclado" | "Contenido Original, Sin Copiar" |

| "You Direct" | "Tú Diriges" | "Tú Decides" |

Terjemahan literal secara tata bahasa memang benar tapi terdengar seperti Google Translate. Versi natural menangkap *maksud* aslinya — itulah yang akan benar-benar ditulis oleh seorang marketer berbahasa Spanyol.

Panduan ini mencakup tingkat formalitas (bahasa Jepang menggunakan bentuk です/ます, bahasa Korea menggunakan 합쇼체), konteks budaya, dan kesalahan umum yang harus dihindari. Ketika Claude Code menerjemahkan, dia mengikuti prinsip-prinsip ini — yang dia tulis sendiri — secara otomatis.

2. Checklist Lokalisasi

Checklist komprehensif dari setiap file yang perlu diubah untuk bahasa baru:

Wajib (harus ada):

- Frontend: `messages/{locale}.json` (~2.200 kunci)

- Backend: `locales/{locale}.json` (~82 kunci)

- Language Utils: 3 fungsi di `language_utils.py`

- Speech Generation: 1 fungsi di `gemini_voice_instructions.py`

- Voice Preview: 7 kalimat terlokalisasi

- Content Moderation: Kata kunci + prompt

- Smoke Tests: Tambahkan ke matriks pengujian

Opsional (kualitas lebih baik):

- Profil host/audiens per gaya

- Template prompt terlokalisasi

- Instruksi suara per gaya

Checklist ini memastikan tidak ada yang terlewat. Claude Code mengerjakannya secara sistematis.

3. Playbook Backend

Mendokumentasikan dengan tepat bagaimana pembuatan podcast menangani bahasa:

- Bagaimana pembuatan outline menggunakan Gemini 3 Flash dengan instruksi bahasa

- Bagaimana pembuatan dialog menggunakan Claude Sonnet 4.5 dengan konteks budaya

- Bagaimana pembuatan speech menggunakan Gemini TTS dengan panduan spesifik bahasa

Dengan ketiga dokumen ini siap, menambahkan bahasa baru menjadi pekerjaan mekanis. Claude Code membaca checklist, mengikuti panduan gaya, dan memperbarui file sesuai playbook.

---

Masalah dengan "Tinggal Terjemahkan Saja"

Harus saya akui, insting pertama saya adalah menjalankan semuanya melalui API terjemahan dan selesai. "Create Podcast" jadi "Crear Podcast" dan semua orang lanjut hidup, kan?

Pendekatan itu menghasilkan sampah. Saya belajar ini dari pengalaman tumbuh di antara bahasa Vietnam dan Inggris — terjemahan literal membunuh jiwa dari apa yang ingin kamu sampaikan.

Terjemahan mempertahankan kata-kata, lokalisasi mempertahankan makna. Panduan gaya mengkodekan perbedaan ini.

| Bahasa | Terjemahan Literal | Lokalisasi Native |

|----------|--------------------|--------------------|

| Vietnam | "Ý tưởng, Được Sản Xuất" | "Từ Ý Tưởng → Đến Podcast" |

| Jepang | "アイデア、制作された" | "アイデアを、カタチに" (Ideas into form) |

| Korea | "아이디어, 제작됨" | "아이디어를, 현실로" (Ideas into reality) |

| Spanyol | "Ideas, Producidas" | "De la Idea, al Podcast" |

| Cina | "想法,已制作" | "从想法,到播客" |

Setiap bahasa membutuhkan tingkat perhatian seperti ini. Setiap tombol, setiap pesan error, setiap salinan marketing.

Dan itu baru UI-nya saja. Pembuatan podcast yang sebenarnya lebih sulit lagi.

---

Podcast Butuh Host Native

Ada sesuatu yang tidak saya antisipasi: nama host itu penting. Sangat penting.

Di versi bahasa Inggris, host default-nya adalah Alex dan Maya. Generik, mudah dilupakan, berfungsi dengan baik.

Tapi kalau kamu membuat podcast bahasa Vietnam dan host-nya masih bernama Alex dan Maya? Terdengar aneh. Sebagai orang Vietnam, saya bisa bilang — rasanya seperti menonton dubbing buruk dari acara Amerika :D

Jadi setiap bahasa mendapat nama host native:

| Bahasa | Host 1 | Host 2 |

|----------|--------|--------|

| Inggris | Alex | Maya |

| Vietnam | Minh | Lan |

| Jepang | 太郎 (Tarō) | 花子 (Hanako) |

| Korea | 민준 (Minjun) | 수진 (Sujin) |

| Spanyol | Carlos | María |

| Cina | 明辉 | 雅琴 |

Tapi nama saja tidak cukup. AI perlu memahami konteks budaya.

Podcast teknologi di Jepang punya norma percakapan yang berbeda dari yang di AS. Tingkat formalitas, cara mengekspresikan ketidaksetujuan, ritme percakapan bolak-balik — semuanya berbeda.

Jadi saya membuat instruksi prompt AI spesifik per bahasa. Instruksi bahasa Vietnam menentukan "bạn" (informal tapi sopan). Instruksi bahasa Jepang menentukan bentuk です/ます (sopan tapi ramah). Instruksi bahasa Korea menentukan 합쇼체 (formal sopan).

Ini adalah hal yang tidak bisa diotomatisasi begitu saja. Dari pengalaman bertahun-tahun bekerja di pasar Asia-Pasifik, saya tahu pola komunikasi ini secara intuitif — triknya adalah mengkodekan pengetahuan budaya itu ke dalam prompt yang bisa diikuti AI. Tapi begitu dikodekan, Claude Code menerapkannya secara konsisten di ribuan string.

---

Pemilihan Model AI yang Benar-Benar Berhasil

Di sinilah segalanya menjadi menarik dari perspektif teknis.

DIALØGUE menggunakan tiga model AI berbeda untuk tiga tugas berbeda. Bukan karena saya ingin kompleksitas, tapi karena setiap model benar-benar lebih baik untuk tugas spesifiknya.

Tugas 1: Riset & Outline → Gemini 3 Flash

Ketika pengguna memasukkan topik, langkah pertama adalah riset. AI perlu:

1. Mencari web untuk informasi terkini

2. Mensintesis temuan menjadi outline terstruktur

3. Mengutip sumber dengan benar

Ini memerlukan grounding (pencarian web real-time) DAN output terstruktur (kepatuhan skema JSON).

Masalahnya: sebagian besar model tidak bisa melakukan keduanya secara bersamaan. Gemini 2.5 Flash mendukung grounding. Mendukung output terstruktur. Tapi tidak bersamaan. Kamu harus pilih salah satu.

Gemini 3 Flash Preview adalah satu-satunya model yang saya temukan yang mendukung kedua fitur secara bersamaan. Jadi dia yang menangani pembuatan outline.

```python
GEMINI_MODEL = "gemini-3-flash-preview"

# Kemampuan kunci:
GEMINI_MODEL_CONFIGS = \{
    "gemini-3-flash-preview": {
        "supports_grounding": True,
        "supports_structured_output": True,
        "supports_grounding_with_structured_output": True,  # Ini kuncinya
    \}
}
```

Outline-nya kembali dalam sekitar 60 detik dengan sumber nyata, terstruktur dengan rapi.

Tugas 2: Pembuatan Dialog → Claude Sonnet 4.5

Setelah pengguna menyetujui outline, AI menulis naskah lengkap — setiap kata yang akan diucapkan kedua host.

Ini adalah penulisan kreatif. Butuh kepribadian, ritme natural, nuansa percakapan nyata.

Saya menguji ini dengan beberapa model. Dialog Claude secara konsisten terdengar lebih manusiawi. Percakapan bolak-baliknya terasa autentik. Host-nya saling menyela secara natural. Mereka membangun poin satu sama lain.

Ini memang subjektif, tapi setelah menghasilkan ratusan podcast uji coba, perbedaannya sangat terasa. Claude Sonnet 4.5 menangani pembuatan dialog.

```python
ANTHROPIC_MODEL = "claude-sonnet-4-5-20250929"
```

Tugas 3: Pembuatan Audio → Gemini 2.5 Flash TTS

Terakhir, naskah perlu menjadi audio. Dua suara, pacing yang tepat, ekspresi emosional.

Gemini 2.5 Flash TTS menawarkan 30 suara berbeda dengan dukungan multi-speaker. Kamu bisa punya Charon (informatif, pria) dan Kore (tegas, wanita) dalam file audio yang sama, bergantian antar pembicara secara natural.

Kualitasnya cukup bagus sehingga pengguna sering bertanya apakah itu pengisi suara sungguhan.

```python
# Multi-speaker synthesis dengan Gemini TTS
response = client.models.generate_content(
    model="gemini-2.5-flash-preview-tts",
    contents=transcript,
    config=types.GenerateContentConfig(
        response_modalities=["AUDIO"],
        speech_config=types.SpeechConfig(
            multi_speaker_voice_config=types.MultiSpeakerVoiceConfig(
                speaker_voice_configs=speaker_configs
            )
        )
    )
)
```

Pipeline-nya

Jadi alur lengkapnya adalah:

```
Input Pengguna
    ↓
[Gemini 3 Flash] Riset + Outline Terstruktur (~60 detik)
    ↓
Review & Feedback Pengguna
    ↓
[Claude Sonnet 4.5] Naskah Dialog Lengkap (~2-3 menit)
    ↓
Review & Edit Pengguna
    ↓
[Gemini 2.5 Flash TTS] Audio Multi-speaker (~3-5 menit)
    ↓
Podcast Jadi
```

Setiap model mengerjakan apa yang paling dikuasainya. Total waktu pembuatan sekitar 8-10 menit untuk podcast berdurasi 15-30 menit.

---

Satu Fitur yang Mengejutkan Saya

Pengguna meminta sesuatu yang tidak saya pikirkan: membuat podcast dalam bahasa yang berbeda dari bahasa UI mereka.

Pengguna Vietnam mungkin nyaman menavigasi aplikasi dalam bahasa Vietnam tapi ingin membuat podcast bahasa Inggris untuk audiens internasional. Atau marketer berbahasa Spanyol mungkin ingin menguji konten dalam bahasa Jepang.

Jadi saya menambahkan pemilih bahasa podcast. UI kamu bisa dalam bahasa Inggris sementara kamu membuat podcast dalam bahasa Mandarin. Host-nya akan punya nama Cina (明辉 dan 雅琴), dialognya akan mengikuti pola percakapan Cina, dan audionya akan menggunakan suara yang sesuai.

Fitur kecil, tapi secara dramatis memperluas apa yang bisa dilakukan pengguna.

---

Agen Paralel: Pengganda Kekuatan

Kecepatan sebenarnya datang dari agen paralel. Checklist-nya mencatat ini secara eksplisit:

> "Jalankan agen paralel untuk file backend - File backend lebih kecil dan bisa diproses secara paralel (language_utils.py, content_moderation.py, gemini_voice_instructions.py, locales/{locale}.json)."

Ketika saya bilang "Tambahkan dukungan Korea," Claude Code akan memunculkan beberapa agen:

- Satu agen memperbarui file terjemahan frontend

- Agen lain menambahkan kasus Korea ke `language_utils.py`

- Agen lain memperbarui `gemini_voice_instructions.py`

- Agen lain menambahkan Korea ke `content_moderation.py`

Semuanya berjalan bersamaan. Setelah selesai, Claude Code menggabungkan perubahan dan menjalankan tes.

Inilah mengapa checklist membedakan file "Wajib" dari file "Opsional" — agar Claude Code tahu mana yang bisa diparalelkan dan mana yang bisa ditunda.

Untuk file terjemahan frontend (~2.200 kunci), checklist menentukan strategi chunking:

- Chunk 1: `common`, `nav`, `bottomNav` (~110 kunci)

- Chunk 2: `homepage`, `auth` (~180 kunci)

- Chunk 3: `dashboard`, `create` (~330 kunci)

- Dan seterusnya...

Ini mencegah masalah batas token dan memungkinkan Claude Code menerjemahkan namespace demi namespace, meninjau masing-masing terhadap panduan gaya.

Cakupannya:

- 5 bahasa ditambahkan

- ~2.500 string terjemahan total per bahasa

- 10+ template prompt AI per bahasa

- 1 podcast demo dibuat per bahasa

- Beberapa agen paralel per bahasa

Insight kuncinya: saya tidak menulis kode. Saya tidak menulis rencana. Saya memberikan arahan, meninjau output, dan membiarkan Claude Code menangani sisanya — sering kali secara paralel. Ini masih membuat saya sedikit takjub :P

---

Apa Selanjutnya

Enam bahasa mencakup sekitar 2 miliar calon pengguna. Itu jangkauan yang signifikan.

Tapi saya sudah memikirkan apa yang masih kurang (jiwa marketer dalam diri saya tidak pernah berhenti):

1. Arab - Dukungan layout kanan-ke-kiri itu kompleks

2. Hindi - Pasar besar, skrip berbeda

3. Portugis - Brasil adalah pasar podcast yang masif

4. Prancis - Ekspansi Eropa

5. Tagalog - Komunitas kreator Filipina yang kuat

Setiap bahasa membutuhkan tingkat perhatian yang sama. Lokalisasi native, bukan terjemahan. Prompt budaya, bukan template yang disalin. (Ini hanya mungkin karena saya baru saja membangun ulang seluruh aplikasi dalam 14 hari dengan arsitektur bersih.)

Kabar baiknya: dokumen perencanaan bisa dipakai ulang. Menambahkan bahasa berikutnya seharusnya lebih cepat lagi. Dan lokalisasinya terbawa ke aplikasi iOS native yang sedang saya bangun — semua 7 bahasa, backend Supabase yang sama.

---

Coba Sendiri

Saya benar-benar bangga dengan hasilnya — terutama lokalisasi bahasa Vietnam. Mendengar podcast yang terdengar seperti dibuat untuk audiens Vietnam, bukan diterjemahkan kepada mereka, menyentuh hati saya dengan cara yang tidak saya duga.

DIALØGUE sekarang mendukung:

- Inggris - Yang asli

- Vietnam - Từ Ý Tưởng → Đến Podcast

- Jepang - アイデアを、カタチに

- Korea - 아이디어를, 현실로

- Spanyol - De la Idea, al Podcast

- Cina - 从想法,到播客

Buat podcast dalam bahasa kamu →

UI-nya akan mengikuti preferensi yang kamu pilih. Dan ingat — kamu bisa membuat podcast dalam bahasa mana pun terlepas dari pengaturan UI-mu.

Pengguna baru mendapat 2 podcast gratis untuk mencobanya.

---

Kesimpulan

Melihat kembali semua ini, yang paling mengejutkan saya adalah betapa pentingnya latar belakang periklanan saya. Bertahun-tahun mengadaptasi kampanye di pasar Asia mengajarkan saya bahwa lokalisasi bukan sekadar soal kata-kata — ini soal intuisi budaya. Saya tidak menyangka itu akan menjadi keahlian paling berharga yang saya bawa ke proyek coding AI.

Untuk para builder yang menggunakan asisten coding AI:

1. Arahkan, jangan tulis. Saya tidak menulis dokumen perencanaan — saya mendeskripsikan apa yang saya inginkan dan Claude Code menghasilkannya. Lalu dia mengikuti rencananya sendiri. Awalnya terasa aneh, seperti mendelegasikan ke seseorang yang juga menulis brief-nya sendiri. Tapi berhasil.

2. Struktur memungkinkan skala. Panduan gaya, checklist, playbook — ini bukan hanya untuk manusia lagi. Saya rasa ini unlock terbesar: strukturkan kebutuhan kamu agar agen AI bisa mengeksekusi secara sistematis. (Pengalaman bertahun-tahun menulis brief marketing akhirnya terbayar dengan cara yang tidak terduga.)

3. Cocokkan model dengan tugasnya. Mungkin saya salah, tapi saya yakin belum ada satu model pun yang terbaik di segalanya. Untuk DIALØGUE:

- Gemini 3 Flash untuk riset terstruktur berbasis grounding

- Claude Sonnet 4.5 untuk dialog natural

- Gemini 2.5 Flash TTS untuk audio multi-speaker

4. Lokalisasi, jangan terjemahkan. Pengguna kamu bisa merasakan bedanya. Saya tidak bisa cukup menekankan ini — sebagai seseorang yang pernah tinggal di tiga negara dan bekerja di belasan pasar, saya sudah melihat apa yang dilakukan terjemahan malas terhadap sebuah produk. Kodekan pengetahuan budaya ke dalam prompt kamu dan biarkan AI menerapkannya secara konsisten.

Itu saja dari saya untuk yang satu ini. Kalau kamu sedang membangun sesuatu yang multibahasa — atau bahkan baru memikirkannya — saya senang mendengar bagaimana pendekatan kamu terhadap lokalisasi. Apakah kamu menggunakan AI? Jalur agensi tradisional? Setuju bahwa konteks budaya adalah bagian tersulitnya, bukan terjemahannya? Beri tahu saya.

Salam,

Chandler

Lanjutkan Membaca

Perjalanan Saya
Terhubung
Bahasa
Preferensi