{
	"api_kicker": "API pengembang",
	"api_title": "Buat aktivitas dari sistemmu sendiri",
	"api_intro": "Satu POST per jenis aktivitas. Kirim kontenmu sebagai JSON, lalu kamu mendapat satu aktivitas di akun Puzzel.org milikmu beserta URL yang bisa kamu berikan ke pemain atau kamu sematkan di iframe.",
	"api_search_placeholder": "Cari endpoint, kolom, dan pengaturan",
	"api_search_results": "cocok di halaman ini",
	"api_search_empty": "Tidak ada yang cocok di halaman ini. Coba nama endpoint, kolom seperti activity_key, atau kode status.",
	"api_search_clear": "Hapus pencarian",
	"api_nav_guide": "Memulai",
	"api_nav_endpoints": "Endpoint",
	"api_toc_label": "Di halaman ini",
	"api_hero_base_label": "URL dasar",
	"api_hero_method_label": "Metode",
	"api_hero_method_value": "POST, body JSON",
	"api_hero_auth_label": "Autentikasi",
	"api_hero_auth_value": "Kunci + email di body",
	"api_hero_limit_label": "Kuota",
	"api_hero_limit_value": "[limit] aktivitas per hari",
	"api_hero_count_label": "Endpoint",
	"api_hero_count_value": "[count] jenis aktivitas",
	"api_s_quickstart_title": "Permintaan pertamamu",
	"api_s_quickstart_body": "Tidak ada yang perlu dipasang dan tidak ada handshake: kirim body JSON berisi kuncimu, emailmu, dan kontenmu. Responsnya membawa kunci aktivitas baru itu dan URL tempat aktivitas itu dimainkan.",
	"api_s_quickstart_note": "Setiap contoh di halaman ini adalah permintaan lengkap yang bisa langsung dijalankan. Ganti dengan kunci dan kontenmu sendiri, dan contoh itu langsung berfungsi.",
	"api_s_auth_title": "Autentikasi",
	"api_s_auth_body": "Tidak ada header dan tidak ada bearer token. Kedua kredensial dikirim di body JSON setiap permintaan, dan kunci hanya diterima untuk akun yang memiliki email tersebut.",
	"api_s_auth_where": "Kuncimu ada di bagian akun pada dasbormu, di balik tombol Tampilkan.",
	"api_s_auth_where_link": "Buka kunci API-ku",
	"api_s_auth_premium": "Kunci API diberikan saat langganan dimulai, jadi akun gratis belum punya kunci.",
	"api_s_auth_plans": "Lihat paket",
	"api_s_auth_secret": "Perlakukan kunci itu seperti kata sandi. Kunci itu membuat dan menimpa aktivitas di akunmu, jadi simpan di sisi server dan jauhkan dari apa pun yang bisa dibaca peramban.",
	"api_prefill_kicker": "Contoh",
	"api_prefill_label": "Isi contoh dengan kunci API-ku sendiri",
	"api_prefill_signed_out": "Masuk, dan kuncimu langsung terisi di setiap contoh pada halaman ini.",
	"api_prefill_sign_in": "Masuk",
	"api_prefill_none": "Akun ini belum punya kunci API.",
	"api_prefill_warning": "Setiap contoh sekarang berisi kuncimu yang asli. Jangan menempelkannya di obrolan, di issue, atau di repo publik.",
	"api_s_request_title": "Body permintaan",
	"api_s_request_body": "Setiap endpoint menerima lima kolom yang sama. Yang berbeda adalah kolom konten di bawahnya: sebagian besar menerima array items, beberapa menerima satu sentence atau satu image, dan Sudoku tidak menerima apa pun.",
	"api_s_request_settings": "settings adalah objek berisi opsi per endpoint. Opsi mana yang dibaca sebuah endpoint dicantumkan bersamanya di bawah; apa pun lain yang kamu taruh di sana diabaikan.",
	"api_col_field": "Kolom",
	"api_col_type": "Tipe",
	"api_col_notes": "Fungsinya",
	"api_col_status": "Status",
	"api_col_meaning": "Artinya",
	"api_required": "wajib",
	"api_optional": "opsional",
	"api_default_label": "Bawaan",
	"api_allowed_label": "Salah satu dari",
	"api_in_settings": "di settings",
	"api_f_account_api_key": "Kunci API akunmu. Dikirim di body, bukan di header.",
	"api_f_email": "Alamat email yang kamu pakai untuk masuk ke akun Puzzel.org. Kunci hanya berlaku bersama alamat itu.",
	"api_f_title": "Nama yang didapat aktivitas di dasbormu. Kosongkan dan endpoint memakai nama cadangannya sendiri.",
	"api_f_language": "Hanya menentukan lokal di URL yang kamu terima — kolom ini tidak menerjemahkan apa pun yang kamu kirim. Pencarian kata juga membacanya untuk mengganti huruf pengisinya menjadi huruf Arab bila nilainya \"ar\".",
	"api_f_activity_key": "Kosongkan untuk membuat aktivitas baru. Kirim kunci aktivitas yang sudah kamu miliki, dan aktivitas itulah yang dibangun ulang.",
	"api_f_sentence_cryptogram": "Kalimat yang akan dienkripsi. Pemain memecahkannya karakter demi karakter.",
	"api_f_sentence_calculation": "Kalimat yang tersingkap saat pemain menyelesaikan soal hitungnya.",
	"api_f_image": "URL absolut gambar yang akan dipotong. Dikirim di tingkat teratas, bukan di dalam settings.",
	"api_f_image_setting": "URL absolut gambar yang akan diacak. Berbeda dengan milik Puzzle, yang ini berada di dalam settings.",
	"api_s_response_title": "Apa yang dikembalikan",
	"api_s_response_body": "Panggilan yang berhasil menjawab 200 dengan kunci aktivitas baru itu dan URL tempat aktivitas itu dimainkan. Selain itu, jawabannya berisi success bernilai false dan satu string error.",
	"api_response_success": "Berhasil",
	"api_response_error": "Gagal",
	"api_s_response_urls": "url yang kamu terima adalah tampilan sematan. Ganti embed dengan play untuk membukanya satu halaman penuh, atau dengan build untuk membukanya di editor — kunci setelah p= tetap sama.",
	"api_s_updating_title": "Membuat vs. memperbarui",
	"api_s_updating_body": "Kirim activity_key dan aktivitas di baliknya dibangun ulang di tempat: kontennya diganti, nama dan cap versinya disegarkan, dan kuncinya sendiri tetap sama — jadi tautan dan sematan yang sudah kamu bagikan tetap berfungsi. Hasil, penempatan folder, dan setiap pengaturan yang tidak ditulis sendiri oleh endpoint dibiarkan apa adanya.",
	"api_s_updating_own": "Kamu hanya bisa memperbarui aktivitas yang dimiliki akunmu sendiri. Kunci milik orang lain dijawab 403.",
	"api_s_updating_name": "title diterapkan pada setiap pembaruan, termasuk nilai bawaannya — kosongkan dan aktivitas itu akan diganti namanya menjadi nama cadangan endpoint tersebut.",
	"api_s_updating_settings": "Blok pengaturan yang ditulis sendiri oleh sebuah endpoint ditulis ulang dari nol, jadi pembaruan juga mengembalikan blok itu ke nilai yang kamu kirim, atau ke nilai bawaan endpoint.",
	"api_s_updating_quota": "Pembaruan berbiaya sama dengan pembuatan: satu panggilan dari kuota hari ini.",
	"api_s_limits_title": "Batas permintaan",
	"api_s_limits_body": "Setiap panggilan yang berhasil ikut dihitung, baik pembuatan maupun pembaruan. Lewati batasnya dan permintaan berikutnya dijawab 429 sampai penghitungnya dinolkan.",
	"api_s_limits_counter": "[limit] aktivitas per akun per hari",
	"api_s_limits_reset": "Penghitung dikosongkan sekali sehari oleh tugas terjadwal, bukan pada jendela 24 jam berjalan.",
	"api_s_errors_title": "Kesalahan",
	"api_s_errors_body": "Kesalahan selalu datang sebagai JSON dengan dua kolom yang sama, tidak pernah sebagai halaman HTML. String error ditulis untuk dibaca manusia — string itu menyebut kolom atau batas yang gagal.",
	"api_err_400": "Ada isi body yang hilang, salah bentuk, atau di luar jangkauan. Pesannya menyebut kolom yang bermasalah.",
	"api_err_401": "Email tidak dikenal, atau kunci bukan milik akun itu.",
	"api_err_403": "activity_key yang kamu kirim milik akun lain.",
	"api_err_429": "Kuota hari ini sudah habis. Kuota dikosongkan sekali sehari.",
	"api_err_500": "Generator tidak bisa membangun teka-teki dari yang kamu kirim — biasanya karena katanya terlalu sedikit, atau kata yang tidak bisa disusun bersama.",
	"api_endpoints_title": "Endpoint",
	"api_endpoints_intro": "Satu path per jenis aktivitas, semuanya POST, semuanya di bawah URL dasar yang sama. Masing-masing mencantumkan konten yang dibutuhkan, pengaturan yang dibaca, dan satu permintaan yang bisa kamu jalankan.",
	"api_group_words": "Kata & huruf",
	"api_group_cards": "Kartu & pasangan",
	"api_group_questions": "Pertanyaan & jawaban",
	"api_group_text": "Kalimat & angka",
	"api_group_images": "Gambar",
	"api_ep_content_label": "Konten",
	"api_ep_settings_label": "Pengaturan yang dibaca",
	"api_ep_settings_none": "Endpoint ini tidak membaca pengaturan apa pun.",
	"api_ep_example_label": "Contoh permintaan",
	"api_ep_notes_label": "Perlu diketahui",
	"api_ep_min_items": "Minimal [count] di items",
	"api_ep_no_items": "Tidak menerima items",
	"api_ep_default_title": "Memakai nama cadangan “[title]”",
	"api_copy": "Salin",
	"api_copied": "Tersalin",
	"api_toast_copied": "Tersalin ke papan klip",
	"api_ep_open_builder": "Buka editor",
	"api_ep_back_to_top": "Kembali ke atas",
	"api_e_crossword": "Menautkan jawabanmu menjadi satu kisi dan menomori deskripsinya untukmu.",
	"api_c_crossword": "Array kata. Setiap entri memasangkan jawaban dengan deskripsi yang menunjuk ke jawaban itu.",
	"api_note_crossword_length": "Jawaban yang lebih pendek dari dua karakter dibuang sebelum kisi dibangun, dan minimal dua jawaban harus lolos dari penyaringan itu.",
	"api_note_crossword_layout": "Jawaban diubah menjadi huruf kapital dan generator mendapat dua puluh percobaan untuk memuatnya. Kalau satu kata pun tidak bisa ditempatkan, panggilan dijawab 500.",
	"api_e_wordseeker": "Menyembunyikan katamu di dalam kisi huruf, dengan arah dan bentuk yang kamu pilih.",
	"api_c_wordseeker": "Array kata. Teks deskripsi menjadi bank kata yang dipakai pemain.",
	"api_note_wordseeker_length": "Jawaban di bawah dua karakter dibuang, dan setiap jawaban diubah menjadi huruf kapital sebelum masuk ke kisi.",
	"api_note_wordseeker_arabic": "Kisi diisi dengan huruf Latin kecuali language bernilai \"ar\", yang mengganti huruf pengisinya menjadi huruf Arab.",
	"api_set_wordseeker_hidden_solution": "Huruf yang tersisa mengeja kata ini. Mengisinya juga memberi tahu generator untuk memuat solusinya lebih dulu, alih-alih menjejalkan sebanyak mungkin kata.",
	"api_set_wordseeker_directions": "Ke arah mana saja sebuah kata boleh membentang. Kosongkan dan kata hanya membentang ke timur, tenggara, dan selatan.",
	"api_set_wordseeker_template": "Memotong kisi menjadi sebuah bentuk alih-alih membiarkannya persegi.",
	"api_e_acrostic": "Menyusun jawabanmu bertumpuk sehingga satu kolom mengeja kata tersembunyi.",
	"api_c_acrostic": "Array kata. Bersama-sama, semua kata itu harus menyediakan setiap huruf dari kata tersembunyi itu.",
	"api_set_acrostic_hidden_solution": "Kata yang dieja oleh kolom yang disorot. Endpoint ini tidak akan berjalan tanpanya.",
	"api_note_acrostic_letters": "Kalau jawabannya tidak bisa menyediakan huruf yang dibutuhkan solusinya, panggilan dijawab 500 alih-alih menyimpan kisi setengah jadi.",
	"api_note_acrostic_order": "Generator mengurutkan ulang jawabanmu agar kolomnya pas, jadi urutan yang kamu kirim bukan urutan yang dilihat pemain.",
	"api_e_word-scramble": "Mengacak huruf setiap jawaban untuk dibereskan pemain.",
	"api_c_word-scramble": "Array kata. Deskripsi ditampilkan di sebelah huruf yang teracak.",
	"api_set_scramble_hidden_solution": "Kata bonus opsional yang dimasukkan pemain setelah sisanya terpecahkan.",
	"api_note_scramble_random": "Aktivitas yang dibuat lewat API selalu punya pengaturan acak-urutan yang menyala, jadi urutan yang kamu kirim bukan urutan yang didapat pemain.",
	"api_e_hangman": "Mengubah kata atau frasamu menjadi ronde tebak huruf.",
	"api_c_hangman": "Array kata atau frasa pendek. Deskripsi adalah petunjuk yang dilihat pemain.",
	"api_e_wordle": "Menjadikan setiap kata yang kamu kirim sebagai satu permainan tebak kata.",
	"api_c_wordle": "Array kata. Pemain mendapat satu ronde per kata.",
	"api_note_wordle_dictionary": "Dibuat dengan pengaturan periksa-apakah-tebakan-kata-nyata dalam keadaan menyala. Matikan di editor kalau katamu berupa nama atau kata rekaan.",
	"api_e_typing-practice": "Mengubah kalimat menjadi latihan mengetik.",
	"api_c_typing-practice": "Array kata atau kalimat untuk diketik. Kolom deskripsi sekaligus berfungsi sebagai instruksi.",
	"api_e_wheel-of-fortune": "Mengisi roda putar dengan segmen buatanmu sendiri.",
	"api_c_wheel-of-fortune": "Array segmen. Setiap jawaban menjadi satu juring.",
	"api_note_wheel_outcome": "Dibuat dengan “tampilkan hasil hanya di roda”, jadi hasilnya dibaca dari rodanya, bukan diumumkan di sampingnya.",
	"api_e_memory": "Kartu tertelungkup untuk dibalik dan dicocokkan berpasangan.",
	"api_c_memory": "Array pasangan. Setiap pasangan berisi dua kartu yang saling melengkapi.",
	"api_note_cards_media": "Kartu adalah objek dengan type dan value. Pakai \"text\" untuk kata, atau \"image\", \"audio\", \"youtube\" atau \"link\" dengan URL di value, dan tambahkan alt untuk deskripsinya.",
	"api_e_matching-pairs": "Dua kolom kartu untuk diseret dan dipasangkan.",
	"api_c_matching-pairs": "Array pasangan. Kartu pertama tiap pasangan mendarat di satu sisi, pasangannya di sisi lain.",
	"api_e_flash-cards": "Kartu dua sisi untuk dibolak-balik.",
	"api_c_flash-cards": "Array kartu. Kartu pertama adalah sisi depan, yang kedua sisi belakang.",
	"api_note_flashcards_sides": "Endpoint menyimpan sebanyak apa pun kartu yang kamu kirim, jadi kirim tepat dua per entri — depan, lalu belakang.",
	"api_e_categorize": "Kartu untuk dipilah ke kelompok yang tepat.",
	"api_c_categorize": "Array kategori, masing-masing dengan nama dan kartu yang termasuk di dalamnya.",
	"api_note_categorize_name": "Kategori yang dikirim tanpa nama disimpan sebagai “Untitled Category”, jadi selalu kirim namanya.",
	"api_e_reorder": "Rangkaian yang harus disusun kembali oleh pemain.",
	"api_c_reorder": "Array rangkaian. Masing-masing memuat kartunya dalam urutan yang benar.",
	"api_note_reorder_order": "Urutan yang kamu kirim disimpan sebagai urutan yang benar — nomor satu lebih dulu.",
	"api_e_quiz": "Pertanyaan pilihan ganda dan pertanyaan terbuka, dinilai seiring pemain menjawab.",
	"api_c_quiz": "Array pertanyaan. Pertanyaan pilihan ganda membawa pilihan jawabannya; pertanyaan terbuka membawa jawaban yang kamu terima.",
	"api_note_question_types": "question_type bernilai \"multiple_choice\", yang opsi benarnya membawa isCorrect true, atau \"open_answer\", yang memakai correct_answer. Kalau dikosongkan, nilainya dianggap pilihan ganda.",
	"api_note_quiz_settings": "Endpoint Quiz meneruskan settings apa adanya sebagai blok pengaturan aktivitas, jadi tempat ini bukan untuk opsi lepasan — sesuaikan Quiz di editor setelahnya.",
	"api_e_board-game": "Papan untuk dilombakan, dengan pertanyaanmu di atas petaknya.",
	"api_c_board-game": "Array pertanyaan, persis bentuk yang diterima endpoint Quiz.",
	"api_set_board_tiles": "Berapa banyak petak yang dimiliki papan. Antara 10 dan 75.",
	"api_set_board_mode": "Apakah pemain berlomba ke garis akhir atau mengumpulkan benda di sepanjang jalan.",
	"api_e_cryptogram": "Mengubah kalimat menjadi sandi untuk dipecahkan, satu karakter demi satu karakter.",
	"api_c_cryptogram": "Satu kalimat, di kolom sentence. Endpoint ini tidak menerima items.",
	"api_note_cryptogram_no_items": "Apa pun yang kamu kirim di items diabaikan — teka-tekinya dibangun hanya dari sentence.",
	"api_set_cryptogram_helpers": "Karakter mana yang langsung dibagikan gratis sebagai jalan masuk: tidak ada, yang paling sering muncul, huruf vokal, atau yang kamu tentukan sendiri.",
	"api_set_cryptogram_character_list": "Abjad yang menjadi dasar sandinya. Kalau dibiarkan kosong, enkripsinya memilih sendiri.",
	"api_set_cryptogram_extra_letters": "Karakter yang dibagikan ketika helpers bernilai \"custom\". Diabaikan untuk mode bantuan lainnya.",
	"api_set_cryptogram_hide_unused": "Menghilangkan karakter yang tidak pernah dipakai kalimat itu dari kuncinya.",
	"api_e_calculation": "Menyembunyikan kalimat di balik soal hitung — pecahkan soalnya, hurufnya terungkap.",
	"api_c_calculation": "Satu kalimat, di kolom sentence. Endpoint ini tidak menerima items.",
	"api_set_calc_difficulty": "Jawaban tertinggi yang boleh dimiliki sebuah soal hitung.",
	"api_set_calc_operators": "Operasi mana saja yang boleh muncul. x adalah kali, : adalah bagi.",
	"api_set_calc_max_operations": "Berapa banyak operasi yang boleh dirangkai dalam satu soal hitung.",
	"api_set_calc_number_difficulty": "Membatasi setiap angka di dalam satu soal hitung. Antara 5 sampai 1000.",
	"api_note_calculation_fit": "Kalau batasannya terlalu ketat untuk menyandikan kalimat itu, panggilan dijawab 400 yang memintamu melonggarkannya, alih-alih menyimpan teka-teki setengah jadi.",
	"api_e_sudoku": "Membuat kisi yang sudah terisi penuh, lalu mengeluarkan lagi sebagian angkanya.",
	"api_c_sudoku": "Tidak ada. Seluruh teka-teki lahir dari dua pengaturannya.",
	"api_note_sudoku_no_items": "Jangan kirim items dan jangan kirim sentence — size dan difficulty adalah seluruh masukannya.",
	"api_note_sudoku_difficulty_sizes": "Editor hanya menyediakan tingkat kesulitan untuk 2x3, 3x3, dan 3x4. API menerapkannya ke semua ukuran, termasuk 2x2 dan 4x4.",
	"api_set_sudoku_size": "Ukuran satu blok, ditulis sebagai baris kali kolom — 3x3 menghasilkan kisi 9x9 yang klasik. Endpoint hanya memeriksa bahwa nilainya terbaca sebagai dua angka, jadi gunakan saja ukuran yang disediakan editor.",
	"api_set_sudoku_difficulty": "Berapa banyak angka yang ditinggalkan di papan sebagai titik awal.",
	"api_e_jigsaw": "Memotong gambar menjadi kepingan untuk diseret kembali menjadi satu.",
	"api_c_jigsaw": "Satu URL gambar, di kolom image. Endpoint ini tidak menerima items.",
	"api_note_jigsaw_grid": "API selalu membuat Puzzle 4 kali 4. Jumlah keping, keping tak beraturan, dan tepi rata adalah pengaturan editor — mengirim rows atau columns di sini tidak berpengaruh.",
	"api_note_image_reachable": "URL disimpan persis seperti yang kamu kirim dan berkasnya tidak pernah disalin, jadi URL itu harus tetap bisa diakses publik selama aktivitasnya masih dimainkan.",
	"api_e_slidingpuzzle": "Mengacak gambar menjadi keping yang digeser ke tempatnya.",
	"api_c_slidingpuzzle": "Satu URL gambar, di dalam settings. Endpoint ini tidak menerima items.",
	"api_note_sliding_image_slot": "Berbeda dengan Puzzle, endpoint ini membaca gambarnya dari settings.image. Kolom image di tingkat teratas diabaikan dan panggilan dijawab 400.",
	"api_help_title": "Ada yang tidak beres?",
	"api_help_body": "Kirim permintaan yang kamu coba dan error yang kamu terima, lalu kamu akan mendapat jawaban sungguhan, dari orang yang menulis endpoint itu.",
	"api_help_cta": "Kirim email ke dukungan",
	"api_int_kicker": "Integrasi pengembang",
	"api_int_title": "Hubungkan Puzzel ke platformmu sendiri",
	"api_int_intro": "Puzzel bisa mengirim hasil pemain langsung ke sistem lain — skornya, sejauh mana progresnya, apa yang dijawabnya — tanpa sistem itu harus berupa LMS lengkap. Halaman ini memuat semua saluran yang ada: apa yang dikirim, kapan dikirimnya, dan hal paling sederhana yang perlu kamu bangun untuk menangkapnya.",
	"api_int_hero_out_label": "Hasil dikirim melalui",
	"api_int_hero_out_value": "Webhook, atau pesan ke halaman di sekitar aktivitas",
	"api_int_hero_in_label": "Halamanmu bisa",
	"api_int_hero_in_value": "Memasukkan pemain dan mengatur ulang aktivitas",
	"api_int_hero_where_label": "Diaktifkan",
	"api_int_hero_where_value": "Per aktivitas, di menu Pengembang pada editor",
	"api_int_hero_plan_label": "Tersedia di",
	"api_int_hero_plan_value": "Paket berbayar — pengaturan ini nonaktif pada akun gratis",
	"api_int_search_placeholder": "Cari saluran, kolom, dan contoh",
	"api_int_search_empty": "Tidak ada yang cocok di halaman ini. Coba saluran seperti webhook atau postMessage, atau kolom seperti progress.",
	"api_int_nav_channels": "Saluran",
	"api_int_s_choose_title": "Saluran mana yang kamu butuhkan?",
	"api_int_s_choose_body": "Ada tiga hal yang bisa keluar dari sebuah aktivitas dan satu yang bisa masuk. Mana yang cocok bergantung pada satu pertanyaan: apakah pemain berada di dalam halamanmu, atau di tempat lain sepenuhnya?",
	"api_int_choose_out": "Keluar dari Puzzel",
	"api_int_choose_in": "Masuk ke Puzzel",
	"api_int_choose_when": "Gunakan saat",
	"api_int_choose_needs": "Yang kamu butuhkan",
	"api_int_choose_setting": "Pengaturan",
	"api_int_ch_webhook_name": "Webhook hasil",
	"api_int_ch_webhook_summary": "Setiap hasil yang tersimpan dikirim dengan POST sebagai JSON ke URL milikmu.",
	"api_int_ch_webhook_when": "Pemain bisa berada di mana saja — tautan yang dibagikan, kode QR, situs milik orang lain — dan kamu ingin hasilnya masuk ke database milikmu sendiri.",
	"api_int_ch_webhook_needs": "Endpoint HTTPS yang menerima POST lintas origin.",
	"api_int_ch_parent_name": "Hasil ke halaman di sekitarnya",
	"api_int_ch_parent_summary": "JSON yang sama, dikirim ke halaman yang menyematkan aktivitas, bukan ke server.",
	"api_int_ch_parent_when": "Kamu menyematkan aktivitas di halaman kursusmu sendiri dan halaman itu sendiri bisa melakukan sesuatu dengan hasilnya.",
	"api_int_ch_parent_needs": "Iframe di halamanmu dan pendengar pesan. Tidak perlu server, tidak perlu CORS.",
	"api_int_ch_completion_name": "Sinyal penyelesaian",
	"api_int_ch_completion_summary": "Satu pesan saat pemain selesai, tanpa membawa apa pun selain fakta itu.",
	"api_int_ch_completion_when": "Yang ingin kamu ketahui hanya apakah mereka sudah selesai — untuk mencentang pelajaran itu, membuka pelajaran berikutnya, atau menampilkan layarmu sendiri.",
	"api_int_ch_completion_needs": "Iframe di halamanmu dan pendengar pesan.",
	"api_int_ch_trigger_name": "Atur ulang dari halamanmu",
	"api_int_ch_trigger_summary": "Halamanmu memberi tahu aktivitas yang disematkan untuk menghapus jawaban pemain dan memulai ulang.",
	"api_int_ch_trigger_when": "Kamu punya tombol \"coba lagi\" sendiri di luar aktivitas.",
	"api_int_ch_trigger_needs": "Iframe di halamanmu. Pesan hanya diterima dari halaman yang melakukan penyematan.",
	"api_int_s_webhook_title": "Webhook hasil",
	"api_int_s_webhook_body": "Aktifkan \"Kirim hasil ke webhook\" di editor dan berikan sebuah URL. Sejak saat itu, setiap kali progres pemain disimpan, browser mereka mengirim (POST) seluruh hasil ke URL itu sebagai JSON.",
	"api_int_webhook_steps_title": "Cara menyiapkannya",
	"api_int_webhook_step_1": "Buka aktivitas di editor dan masuk ke menu Pengembang.",
	"api_int_webhook_step_2": "Aktifkan \"Kirim hasil ke webhook\" dan tempel endpoint-mu ke kolom di bawahnya. URL itu harus lengkap — domain saja akan ditolak — dan harus https, karena browser memblokir panggilan http biasa dari halaman yang disajikan lewat https.",
	"api_int_webhook_step_3": "Mainkan aktivitas itu sendiri sekali. POST pertama akan tiba begitu kamu menjawab sesuatu.",
	"api_int_webhook_receiver": "Penerima, dari ujung ke ujung",
	"api_int_webhook_timing_title": "Terpicu saat kamu bermain, bukan hanya sekali di akhir",
	"api_int_webhook_timing_body": "Hasil dikirim setiap kali entri disimpan: setelah jeda saat mengetik, saat kartu ditempatkan, saat waktu berhenti, dan sekali lagi saat aktivitas selesai. Sebuah teka-teki silang yang panjang bisa menghasilkan puluhan panggilan, bukan hanya satu — jadi tulis handler-mu sebagai upsert dengan kunci playerUid dan activityKey, bukan sebagai insert. Setiap panggilan membawa keadaan lengkap, jadi yang terbaru selalu menggantikan yang sebelumnya, dan panggilan yang hilang akan tergantikan oleh panggilan berikutnya.",
	"api_int_webhook_finished_title": "Membedakan penyelesaian dari sekadar penyimpanan",
	"api_int_webhook_finished_body": "progress adalah persentase: 100 berarti aktivitas selesai. Beberapa tipe bisa berakhir tanpa mencapai itu — Quiz yang dijawab sampai habis, kolom solusi yang terpecahkan — dan itu ditandai dengan hasAlternateCompletion. Perlakukan keduanya sebagai selesai.",
	"api_int_webhook_cors_title": "Dikirim oleh browser pemain",
	"api_int_webhook_cors_body": "POST ini berasal dari tab tempat aktivitas dimainkan, bukan dari server Puzzel. Sebagian besar endpoint yang dibuat untuk menerima webhook sudah bisa menerimanya. Jika endpoint-mu tidak pernah melihat permintaan apa pun, inilah sebabnya: browser meminta izin terlebih dahulu, jadi jawab preflight OPTIONS dengan header Access-Control-Allow-Origin, dan POST yang sesungguhnya akan menyusul.",
	"api_int_webhook_trust_title": "Perlakukan payload sebagai klaim, bukan bukti",
	"api_int_webhook_trust_body": "Tidak ada tanda tangan pada permintaan ini, dan itu berasal dari browser yang tidak kamu kendalikan, jadi siapa pun yang melihat halaman itu juga bisa mengirimkannya kepadamu. Itu tidak masalah untuk mengisi bilah kemajuan atau dasbor. Untuk apa pun yang tidak ingin kamu biarkan siswa atur sendiri — nilai yang diperhitungkan, sertifikat, pembayaran — periksa itu terhadap hasil di dasbormu sendiri di Puzzel, atau biarkan konektor nilai LMS yang membawa skornya.",
	"api_int_s_parent_title": "Hasil ke halaman di sekitarnya",
	"api_int_s_parent_body": "Jika kamu menyematkan aktivitas ini, kamu bisa membuat JSON yang sama itu dikirim ke halamanmu sendiri, bukan ke server. Aktifkan \"Kirim hasil ke halaman induk\" dan dengarkan pesannya. Tidak ada yang keluar dari browser, jadi tidak perlu membangun endpoint dan tidak perlu memikirkan CORS.",
	"api_int_parent_origin_title": "Periksa asal pesan itu",
	"api_int_parent_origin_body": "Pendengar pesanmu menangkap setiap pesan yang dikirim ke halaman, termasuk dari frame lain dan ekstensi browser. Bandingkan event.origin dengan https://puzzel.org sebelum kamu memercayai isinya.",
	"api_int_parent_same_title": "Payload yang sama, waktu yang sama",
	"api_int_parent_same_body": "Ini adalah kembaran dari webhook: kolom yang sama, dikirim pada momen yang sama. Semua yang ada di bawah \"Apa isi sebuah hasil\" juga berlaku di sini.",
	"api_int_s_completion_title": "Sinyal penyelesaian",
	"api_int_s_completion_body": "Saluran paling sederhana, untuk saat hasilnya sendiri bukan urusanmu: aktifkan \"Kirim sinyal penyelesaian\" dan halamanmu akan menerima satu pesan begitu pemain selesai.",
	"api_int_completion_shape": "Apa yang diterima",
	"api_int_completion_order_title": "Hasilnya sudah tersimpan begitu pesan ini tiba",
	"api_int_completion_order_body": "Sinyal ini sengaja dikirim setelah penyimpanan penyelesaiannya selesai, jadi halaman yang bereaksi dengan membaca kembali hasilnya akan menemukannya di sana.",
	"api_int_completion_embed_title": "Hanya di dalam iframe",
	"api_int_completion_embed_body": "Kedua saluran pesan mengirim ke halaman yang membingkai aktivitas. Jika dibuka di tabnya sendiri, tidak ada yang bisa diberi tahu, jadi tidak ada yang dikirim.",
	"api_int_s_payload_title": "Apa isi sebuah hasil",
	"api_int_s_payload_body": "Satu bentuk yang sama, saluran apa pun yang membawanya. Jawaban pemain diberi kunci berdasarkan id item milik aktivitas itu sendiri, jadi kunci yang sama muncul juga di correctUids.",
	"api_int_col_when": "Kapan kolom ini ada",
	"api_int_always": "selalu",
	"api_int_sometimes": "terkadang",
	"api_int_payload_absent_title": "Tidak ada, bukan kosong",
	"api_int_payload_absent_body": "Kolom yang tidak relevan dihilangkan dari JSON, bukan dikirim sebagai null atau nol. Begitulah cara membedakan tipe yang memang tidak memberi skor pada suatu sesi, dari sesi yang skornya nol — jadi baca dengan nilai default dan jangan pernah menganggap sebuah kunci pasti ada.",
	"api_int_payload_example": "Sebuah Quiz yang selesai, seperti saat diterima",
	"api_int_f_activity_key": "Aktivitas yang menjadi pemilik hasil ini. Kunci yang sama seperti yang kamu lihat di URL aktivitas itu sendiri, setelah ?p=.",
	"api_int_f_player_uid": "Siapa yang bermain, sebagai id anonim. Tetap sama untuk pemain ini di perangkat ini, jadi inilah yang kamu jadikan kunci untuk hasil — ini bukan alamat email dan bukan akun Puzzel.",
	"api_int_f_player": "Kolom pendaftaran yang diminta aktivitas, sesuai yang kamu konfigurasikan: name, email, class, student_id, dan seterusnya. Tidak ada sampai pemain mendaftar, dan sama sekali tidak ada pada aktivitas yang tidak meminta apa pun.",
	"api_int_f_progress": "Sejauh mana progresnya, sebagai persentase. 100 berarti selesai.",
	"api_int_f_time_passed": "Waktu yang dihabiskan pada aktivitas, dalam milidetik.",
	"api_int_f_last_played_at": "Kapan hasil ini disimpan, sebagai Unix timestamp dalam milidetik.",
	"api_int_f_created": "Kapan percobaan ini dimulai, sebagai Unix timestamp dalam milidetik.",
	"api_int_f_player_input": "Apa yang benar-benar dimasukkan pemain, diberi kunci berdasarkan id item yang bersangkutan. Bentuk di dalamnya bergantung pada tipe aktivitas — sebuah kata, daftar kartu yang ditempatkan, atau pilihan yang dipilih.",
	"api_int_f_correct_uids": "Item mana saja yang benar, dengan kunci yang sama. Tidak ada selama belum ada yang dijawab.",
	"api_int_f_score": "Poin yang didapat, pada tipe yang memberi skor untuk satu sesi. Tidak ada di tipe lainnya — termasuk pada sesi yang skornya memang nol, jadi periksa dulu apakah kuncinya ada sebelum membacanya.",
	"api_int_f_performance": "Ukuran khusus milik suatu tipe tentang seberapa baik hasilnya, jika tipe itu punya ukuran seperti itu — misalnya kata per menit pada latihan mengetik.",
	"api_int_f_attempts": "Sesi ke berapa ini: 1 untuk yang pertama kali, bertambah satu setiap kali dimulai ulang. Hanya ada pada tipe yang bisa mengakhiri sesi lebih awal dan menghitung jumlah pengulangannya.",
	"api_int_f_knocked_out": "Sesi berakhir karena jawaban yang salah dan selesai tanpa menjadi tuntas.",
	"api_int_f_alternate": "Aktivitas diselesaikan dengan cara yang tidak mencapai 100% — Quiz yang dijawab sampai habis, kolom solusi yang terpecahkan. Perlakukan ini sebagai penyelesaian.",
	"api_int_f_missed_keys": "Karakter yang terus-menerus salah diketik pemain, yang paling sering salah ditampilkan lebih dulu. Hanya pada latihan mengetik.",
	"api_int_f_content_version": "Versi konten aktivitas mana yang dimainkan. Nilainya berubah saat pemilik mengedit pertanyaan, sehingga hasil lama bisa dibedakan dari hasil yang terbaru.",
	"api_int_s_control_title": "Mengatur ulang aktivitas dari halamanmu",
	"api_int_s_control_body": "Satu instruksi berjalan ke arah sebaliknya. Dengan \"Terima pemicu dari halaman induk\" diaktifkan, halaman yang melakukan penyematan bisa menghapus jawaban pemain dan mengembalikan aktivitas ke awal — untuk tombol \"coba lagi\" milikmu sendiri, di luar frame.",
	"api_int_control_only_title": "Atur ulang adalah satu-satunya pemicu",
	"api_int_control_only_body": "Tidak ada pesan untuk mengirim hasil, membuka pesan penutup, atau melompat ke pertanyaan tertentu. Pesan yang meminta selain pengaturan ulang akan diabaikan.",
	"api_int_control_guard_title": "Hanya halaman penyemat yang didengarkan",
	"api_int_control_guard_body": "Pemicu ini hanya diterima dari halaman yang membingkai aktivitas dan tidak dari tempat lain mana pun — bukan dari frame lain yang sejajar, bukan dari skrip di halaman itu. Pengaturan ini nonaktif secara default, jadi aktifkan untuk aktivitas yang kamu kendalikan.",
	"api_int_s_identity_title": "Membawa identitas pemainmu sendiri",
	"api_int_s_identity_body": "Jika platformmu sudah tahu siapa yang bermain, aktivitas tidak perlu menanyakannya lagi. Ada dua jenis handshake, keduanya untuk aktivitas di dalam halamanmu, dan keduanya diaktifkan oleh kami, bukan dari editor — karena keduanya menentukan hasil itu menjadi milik siapa, jadi pengaturannya dilakukan bersama kami, bukan lewat sebuah centang.",
	"api_int_identity_pm_title": "Kirimkan data pemain kepada kami",
	"api_int_identity_pm_body": "Aktivitas mengumumkan dirinya dengan 'app-loaded' lalu menunggu. Halamanmu mengirimkan kembali detail pemain, dan hasilnya dicatat atas nama mereka tanpa pemain perlu mengetik apa pun atau melihat layar pendaftaran.",
	"api_int_identity_sso_title": "Kirimkan token kepada kami",
	"api_int_identity_sso_body": "Handshake yang sama, tetapi halamanmu mengirimkan JWT yang diterbitkan oleh penyedia identitasmu, bukan kolom-kolomnya sendiri. Kami memverifikasinya terhadap penerbit yang sudah diatur untuk akunmu sebelum pemain diizinkan masuk, sehingga identitasnya terbukti, bukan sekadar diklaim — inilah yang perlu kamu minta saat hasilnya harus benar-benar bisa dipercaya.",
	"api_int_identity_cta_title": "Minta kami untuk mengaktifkannya",
	"api_int_identity_cta_body": "Beri tahu kami mana dari kedua opsi ini yang kamu inginkan dan di mana aktivitas akan disematkan, dan kami akan menyiapkan akunmu serta memandumu langkah demi langkah.",
	"api_int_identity_cta_button": "Kirim email tentang identitas",
	"api_int_s_create_title": "Membuat aktivitas dari sistemmu",
	"api_int_s_create_body": "Semua yang di atas soal hasil yang keluar. Ke arah sebaliknya — membuat aktivitasnya sendiri dari konten yang sudah kamu punya — itulah Puzzle API: satu POST per tipe aktivitas, dan kamu akan mendapatkan kembali sebuah kunci dan URL untuk disematkan.",
	"api_int_create_link": "Baca referensi API",
	"api_int_s_lms_title": "Saat konektor siap pakai adalah jawaban yang lebih baik",
	"api_int_s_lms_body": "Jika platform di sisi lain adalah LMS sungguhan, kemungkinan besar kamu tidak memerlukan semua ini. Nilai bisa langsung masuk ke buku nilainya sendiri, tanpa perlu kamu hosting apa pun.",
	"api_int_lms_lti_title": "Moodle, Canvas, Brightspace, Schoology, itslearning",
	"api_int_lms_lti_body": "Diluncurkan dari dalam LMS, dengan skor yang dituliskan kembali ke buku nilainya.",
	"api_int_lms_gc_title": "Google Classroom",
	"api_int_lms_gc_body": "Kirim aktivitas sebagai tugas dan nilainya akan otomatis masuk kembali.",
	"api_int_lms_not_title": "Bukan salah satu dari itu?",
	"api_int_lms_not_body": "Platform kursus, situs keanggotaan, intranet, dan apa pun yang kamu bangun sendiri, justru itulah yang menjadi tujuan saluran-saluran di halaman ini. Sematan ditambah sinyal penyelesaian sudah mencakup sebagian besar kebutuhan itu.",
	"api_int_s_limits_title": "Apa yang tidak ada",
	"api_int_s_limits_body": "Supaya kamu tidak repot mencarinya:",
	"api_int_limit_no_read": "Tidak ada endpoint untuk membaca kembali hasil. API ini membuat aktivitas; hasil keluar lewat saluran-saluran di halaman ini, atau lewat ekspor di dasbormu.",
	"api_int_limit_no_signature": "Tidak ada tanda tangan pada webhook. Tidak ada yang bisa dijadikan acuan untuk memverifikasi permintaannya, itulah sebabnya sebuah hasil tidak boleh menjadi satu-satunya dasar untuk sesuatu yang penting.",
	"api_int_limit_per_activity": "Tidak ada webhook untuk seluruh akun. URL-nya adalah pengaturan pada satu aktivitas, jadi aktivitas yang kamu salin akan membawanya, sementara aktivitas baru dimulai tanpanya.",
	"api_int_limit_no_multiplayer": "Tidak berlaku pada permainan tim atau ruang langsung. Kedua saluran pesan dan webhook hanya untuk permainan solo, dan pengaturannya otomatis nonaktif saat mode tim diaktifkan.",
	"api_int_limit_no_retry": "Tidak ada antrean pengiriman. Tidak ada yang disimpan lalu dikirim ulang — penyimpanan berikutnya berfungsi sebagai percobaan ulang, dan panggilan terakhir dari sesi itulah yang menjadi penentu.",
	"api_nav_integrations": "Mengeluarkan hasil kembali"
}
