Panduan Menambahkan Bahasa Baru
Pengantar: Arsitektur Dua Berkas
WikiNusa didedikasikan untuk pelestarian bahasa dan penyebaran pengetahuan bebas dalam bahasa-bahasa daerah di Indonesia dan sekitarnya. Untuk memudahkan siapa pun berkontribusi tanpa latar belakang teknis yang rumit, WikiNusa mengadopsi arsitektur modular dua berkas.
Anda tidak perlu menyunting kode pemrograman Dart maupun Flutter sama sekali. Setiap bahasa hanya dikelola melalui dua berkas JSON independen:
assets/communities/<kode_bahasa>.json— Berkas konfigurasi proyek, portal, pintasan, sakelar modul, dan aturan tampilan wiki.assets/translations/<kode_bahasa>.json— Berkas pelokalan string teks antarmuka (UI).
Menentukan Kode Bahasa
Tentukan kode bahasa standar resmi (ISO 639-1, 639-2, atau 639-3) yang sesuai dengan sub-domain Wikimedia bahasa Anda.
Beberapa contoh kode bahasa daerah yang telah atau sedang didukung:
ban— Bahasa Bali (Basa Bali)ace— Bahasa Aceh (Bahsa Acèh)mak— Bahasa Makassar (Basa Mangkasara')min— Bahasa Minangkabau (Baso Minang)jv— Bahasa Jawa (Basa Jawa)su— Bahasa Sunda (Basa Sunda)nia— Bahasa Nias (Li Niha)bbc— Bahasa Batak Tobabtm— Bahasa Batak Mandailing
assets/communities/<kode>.json dan assets/translations/<kode>.json.
Menyiapkan Berkas Komunitas
Buat berkas baru di dalam folder assets/communities/ dengan nama <kode>.json (contoh: assets/communities/ban.json).
Berikut adalah templat lengkap yang dapat Anda salin dan sesuaikan:
{
"code": "ban",
"name": "Balinese",
"nativeName": "Basa Bali",
"direction": "ltr",
"experimental": false,
"defaultProject": "wikipedia",
"projects": {
"wikipedia": {
"name": "Wikipédia",
"articlePath": "https://ban.wikipedia.org/wiki/$1",
"apiEndpoint": "https://ban.wikipedia.org/w/api.php",
"mobileUrl": "https://ban.m.wikipedia.org",
"isIncubator": false,
"homePageSections": {
"featuredArticle": "mp-tfa",
"featuredImage": "mp-tfp",
"doYouKnow": "mp-dyk",
"onThisDay": "mp-otd"
},
"shortcuts": [
"Portal:Komunitas",
"Istimewa:Perubahan_terbaru",
"Wikipédia:Pitulung"
],
"portals": [
{
"title": "Budaya",
"page": "Portal:Budaya"
}
],
"modules": {
"chat": true,
"newsletter": false,
"crosswords": false,
"language_course": false,
"gallery": false
}
},
"wiktionary": {
"name": "Wikikamus",
"articlePath": "https://ban.wiktionary.org/wiki/$1",
"apiEndpoint": "https://ban.wiktionary.org/w/api.php",
"mobileUrl": "https://ban.m.wiktionary.org",
"isIncubator": false,
"homePageSections": {
"featuredWord": "mp-word-day-body",
"newWords": "mp-new-words-body"
},
"shortcuts": [
"Wikikamus:Pitulung"
]
}
}
}
Tabel Referensi Parameter
| Parameter | Tipe | Wajib | Deskripsi |
|---|---|---|---|
code |
String | Ya | Kode bahasa ISO (misal: "ban"). |
name |
String | Ya | Nama umum bahasa dalam bahasa Inggris/Indonesia. |
nativeName |
String | Ya | Nama asli bahasa dalam penutur aslinya (misal: "Basa Bali"). |
direction |
String | Tidak | Arah tulisan: "ltr" (kiri ke kanan) atau "rtl". Default: "ltr". |
experimental |
Boolean | Tidak | Menandakan apakah bahasa masih dalam tahap eksperimen (true) atau sudah stabil/lulus (false). Bahasa eksperimen menampilkan lencana "Eksperimen" di Pengaturan Bahasa. Standar: false untuk bahasa utama (id, nia), dan true untuk bahasa komunitas lainnya. Setel "experimental": false agar bahasa lulus tanpa perlu rilis pembaruan aplikasi. |
defaultProject |
String | Tidak | Proyek awal saat beralih ke bahasa ini ("wikipedia", "wiktionary", atau "wikibooks"). |
projects |
Object | Ya | Daftar konfigurasi proyek Wikimedia yang aktif untuk bahasa ini. |
Pengaturan Proyek Wikimedia
name: Judul lokal proyek (misal:"Wikipédia").articlePath: Format URL dengan placeholder$1untuk judul artikel.apiEndpoint: URL Action API MediaWiki (misal:https://ban.wikipedia.org/w/api.php).mobileUrl: URL versi seluler situs web.isIncubator: Seteltruejika bahasa Anda masih dalam Wikimedia Incubator, lalu tambahkanincubatorPrefix(misal:"Wp/btm/").homePageSections: Pemetaan selektor untuk mengekstrak dan menampilkan seksi halaman utama dalam format kartu ponsel yang rapi (bukan tampilan desktop mentah).shortcuts: Daftar judul halaman wiki yang akan muncul pada menu pintasan cepat di laci samping.portals: Daftar kartu portal bertopik khusus untuk ditampilkan di halaman beranda.modules: Sakelar modul pendukung seperti ruang obrolan (chat), buletin (newsletter), teka-teki silang (crosswords), kursus bahasa (language_course), atau galeri (gallery).
Konfigurasi Seksi Beranda (homePageSections)
WikiNusa memproses Halaman Utama wiki (seperti Halaman_Utama, Main_Page, atau Wikipédia:Pendhapa) dan mengubah setiap bagian konten menjadi kartu interaktif native di beranda aplikasi.
Kunci Seksi yang Didukung
| Kunci | Proyek | Deskripsi | Judul Tampilan |
|---|---|---|---|
featuredArticle |
Wikipedia | Artikel Pilihan utama | "ARTIKEL PILIHAN" / "FEATURED ARTICLE" |
featuredImage |
Wikipedia / Wiktionary | Gambar Pilihan / Foto hari ini | "GAMBAR PILIHAN" / "FEATURED IMAGE" |
doYouKnow |
Wikipedia / Wiktionary | Fakta menarik "Tahukah Anda" | "TAHUKAH ANDA" / "DID YOU KNOW" |
inTheNews |
Wikipedia | Peristiwa terkini & warta berita | "PERISTIWA TERKINI" / "IN THE NEWS" |
onThisDay |
Wikipedia | Peristiwa hari ini dalam sejarah | "HARI INI DALAM SEJARAH" / "ON THIS DAY" |
onThisMonth |
Wikipedia | Peristiwa bulan ini dalam sejarah | "BULAN INI DALAM SEJARAH" / "ON THIS MONTH" |
featuredList |
Wikipedia | Daftar pilihan | "DAFTAR PILIHAN" / "FEATURED LIST" |
featuredWord |
Wiktionary | Lema terpilih / kata hari ini | "LEMA TERPILIH" / "WORD OF THE DAY" |
newWords |
Wiktionary | Lema baru yang baru ditambahkan | "LEMA BARU" / "NEW WORDS" |
featuredBook |
Wikibooks | Buku pilihan pembelajaran | "BUKU PILIHAN" / "FEATURED BOOK" |
newBooks |
Wikibooks | Buku baru yang sedang disusun | "BUKU BARU" / "NEW BOOKS" |
Format Penulisan Selektor
Setiap seksi dapat diatur menggunakan String Sederhana atau Objek Terperinci:
1. Format String Sederhana (ID atau Kelas CSS)
"homePageSections": {
"featuredArticle": "mp-tfa",
"featuredImage": "mp-tfp",
"doYouKnow": "mp-dyk",
"onThisDay": "mp-otd"
}
# (contoh: "mp-tfa" atau "#mp-tfa"). WikiNusa juga otomatis memeriksa variasi awalan mp- (desktop) dan mf- (seluler/MobileFrontend).
2. Format Objek Terperinci (Ekstraksi Presisi)
Gunakan format ini jika kotak templat di wiki Anda memiliki pranala navigasi arsip, tombol sunting, atau tabel yang perlu dirapikan:
"homePageSections": {
"featuredArticle": {
"selector": "mf-artikelpilihan",
"keep": "p",
"firstOnly": true
},
"doYouKnow": {
"selector": "mf-tahukahanda",
"keep": "ul",
"firstOnly": true
}
}
selector(String, Wajib): Selektor CSS dari elemen pembungkus konten di Halaman Utama.keep(String atau Array of Strings, Opsional): Tag HTML tertentu yang ingin dipertahankan (misal"p"agar hanya mengambil paragraf ringkasan, atau["p", "ul"]).firstOnly(Boolean, Opsional): Bila bernilaitrue, hanya mengambil elemen pertama yang cocok dan membuang pranala arsip tambahan di bawahnya.
Penyesuaian Aturan Tampilan & Keep
Secara default, aplikasi menerapkan aturan global dari assets/communities/_global.json untuk menghapus kotak navigasi desktop dan elemen yang mengganggu tampilan mobile.
Namun, jika komunitas bahasa Anda ingin mempertahankan elemen tertentu yang dihapus oleh aturan global (misalnya kotak info atau kelas tertentu), gunakan kunci keep:
"projects": {
"wikipedia": {
"name": "Wikipédia",
"articlePath": "https://ban.wikipedia.org/wiki/$1",
"apiEndpoint": "https://ban.wikipedia.org/w/api.php",
"keep": [".infobox", ".nomobile"],
"remove": [".reflist"]
}
}
keep: Selektor CSS yang tidak boleh dibuang untuk bahasa ini, meskipun aturan global menyuruh menghapusnya.remove: Selektor CSS tambahan yang ingin dihapus khusus untuk artikel proyek ini.hide: Selektor CSS tambahan yang ingin disembunyikan menggunakan styling CSS.
Menyiapkan Berkas Terjemahan
Salin berkas assets/translations/id.json atau assets/translations/en.json, lalu simpan sebagai assets/translations/<kode>.json (misal: assets/translations/ban.json).
Buka berkas tersebut dan terjemahkan nilai teks di sisi kanan tanda titik dua (:):
{
"app_name": "WikiNusa",
"home": "Kaca Utama",
"shortcuts": "Pintasan",
"random": "Acak",
"bookmarks": "Tanda Buku",
"search_hint": "Rereh ring WikiNusa...",
"share": "Bagikan",
"edit": "Uwah",
"view_in_browser": "Cingak ring Browser",
"table_of_contents": "Daftar Isi",
"drawer_modules": "Modul Komunitas",
"drawer_language": "Basa",
"drawer_appearance": "Tampilan",
"drawer_font_size": "Ukuran Aksara",
"drawer_about": "Indik Aplikasi"
}
"home" atau "bookmarks"). Cukup terjemahkan teks di sebelah kanan tanda petik.
Validasi Berkas JSON
Sebelum mengirimkan kontribusi Anda, pastikan kedua berkas JSON memiliki sintaksis yang valid:
- Pastikan semua tanda kurung kurawal
{}dan kurung siku[]tertutup sempurna. - Pastikan tidak ada koma berlebih di akhir (trailing comma) setelah elemen terakhir dalam array atau objek.
- Gunakan validator JSON online di jsonlint.com atau perintah
jqdi terminal:
jq . assets/communities/ban.json
jq . assets/translations/ban.json
Uji Coba Aplikasi (Opsional)
Jika Anda memiliki lingkungan pengembangan Flutter di komputer Anda:
- Jalankan verifikasi pengujian otomatis:
flutter test - Jalankan aplikasi di perangkat atau emulator:
flutter run - Buka laci samping → Basa → aktifkan bahasa baru Anda. Bahasa Anda akan langsung siap digunakan!
Mengirimkan Kontribusi via Pull Request
Kirimkan perubahan Anda ke repositori utama melalui GitHub:
- Fork repositori WikiNusa di GitHub: github.com/sslaia/wikinusa.
- Buat branch baru di komputer Anda:
git checkout -b feat/tambah-bahasa-bali - Tambahkan kedua berkas JSON baru:
git add assets/communities/ban.json assets/translations/ban.json git commit -m "feat(community): tambah konfigurasi dan terjemahan bahasa Bali (ban)" - Unggah ke repositori fork Anda:
git push origin feat/tambah-bahasa-bali - Buka Pull Request (PR) di GitHub. Tim pengelola WikiNusa akan dengan senang hati meninjau dan menggabungkannya ke dalam rilis aplikasi berikutnya!