为什么:a) 应用对外名称要统一成 FruitShorts(产品名,nontonki 是原型代号); b) 首发市场是印尼,界面必须有印尼语;c) 归档要求"新增 id-ID 与改名合并生成一次 l10n,别分两次"。 改名: - pubspec name: nontonki → fruitshorts(Dart 包名),description 同步;28 个文件的 package: 导入前缀替换 - Android android:label、iOS CFBundleDisplayName/CFBundleName → FruitShorts - 图标资源 assets/icon/nontonki.png → fruitshorts.png(含 pubspec 两处引用) - README 同步(补印尼语说明,顺带修掉写错的模块名 reelshort-app-api → fruitshorts-app-api) 文案: - 三份 arb 的 appName → FruitShorts、brandMark → FRUITSHORTS、shareFooter → FruitShorts(不留 demo 标记) - 新增 lib/l10n/app_id.arb:174 个值键与 en/zh 完全一致,按印尼语习惯翻译(Coin→Koin、Episode→Episode) - 一次性 flutter gen-l10n 生成 app_localizations_id.dart;id 自动进入 supportedLocales,默认 locale 未改 - 新增 test/config/l10n_id_test.dart:钉住 id 文案、supportedLocales 含 id、品牌文案无 demo 标记、占位符渲染 不动:applicationId / bundle id(lumadrama 遗留,等裁定)、目录名、业务逻辑与页面结构、语言选择页(仍只有 en/zh) 门禁:dart analyze lib test 零告警;flutter test 159 全过(基线 155 + 新增 4);残留扫描 0 命中; 三份 arb 键集一致(174/174/174);真机(iPhone iOS 26.6.1)构建安装启动成功,devicectl 列出显示名 FruitShorts
185 lines
7.3 KiB
Plaintext
185 lines
7.3 KiB
Plaintext
{
|
|
"@@locale": "id",
|
|
"appName": "FruitShorts",
|
|
"demo": "Demo",
|
|
"homeHeadline": "Tonton sekarang",
|
|
"homeSubtitle": "Pratinjau drama pendek gratis.",
|
|
"mediaNotice": "Video demo lokal dari pengguna · Pratinjau gratis",
|
|
"featuredDemo": "UNGGULAN · DEMO TEKNIS",
|
|
"demoTitle": "Sinyal",
|
|
"demoSynopsis": "Pratinjau video lokal singkat. Episode lain bisa ditambahkan saat medianya tersedia.",
|
|
"homeTab": "Beranda",
|
|
"openQuickMenu": "Buka menu cepat",
|
|
"quickAccess": "Akses cepat",
|
|
"currentSeries": "Serial saat ini",
|
|
"discoverTab": "Jelajahi",
|
|
"searchDiscover": "Cari drama, aktor, genre...",
|
|
"featured": "Unggulan",
|
|
"suspense": "Thriller",
|
|
"romance": "Romantis",
|
|
"actionGenre": "Aksi",
|
|
"filter": "Filter",
|
|
"topCharts": "Peringkat Teratas",
|
|
"newReleases": "Rilisan Baru",
|
|
"trendingMicroDramas": "Drama Mini Populer",
|
|
"seeAll": "Lihat Semua",
|
|
"artworkOnly": "Gambar",
|
|
"artworkOnlyNotice": "Ini hanya gambar katalog. Videonya belum tersedia.",
|
|
"videoPending": "Video belum siap",
|
|
"watchNow": "Tonton gratis",
|
|
"noSearchResults": "Tidak ada drama yang cocok.",
|
|
"demoCatalogNotice": "Tiga drama demo memakai video lokal yang sama.",
|
|
"myTab": "Saya",
|
|
"localViewer": "Penonton Lokal",
|
|
"localDemoProfile": "Profil demo lokal",
|
|
"continueWatching": "Lanjut Tonton",
|
|
"watchedPercent": "Sudah ditonton {percent}%",
|
|
"@watchedPercent": {"placeholders": {"percent": {"type": "int"}}},
|
|
"resume": "Lanjutkan",
|
|
"history": "Riwayat",
|
|
"watchlist": "Daftar Tonton",
|
|
"likedTab": "Disukai",
|
|
"all": "Semua",
|
|
"inProgress": "Sedang Berjalan",
|
|
"completed": "Selesai",
|
|
"noSavedShows": "Belum ada tontonan di sini.",
|
|
"preferences": "Preferensi",
|
|
"appLanguage": "Bahasa Aplikasi",
|
|
"followingTab": "Mengikuti",
|
|
"animatedTab": "Animasi",
|
|
"recommendedTab": "Rekomendasi",
|
|
"noCategoryDramas": "Belum ada drama di kategori ini.",
|
|
"trendingTab": "Sedang Tren",
|
|
"liveActionTab": "Live Action",
|
|
"search": "Cari",
|
|
"free": "Gratis",
|
|
"mute": "Bisukan",
|
|
"unmute": "Nyalakan suara",
|
|
"like": "Suka",
|
|
"save": "Simpan",
|
|
"comments": "Komentar",
|
|
"share": "Bagikan",
|
|
"localOnlyComments": "Hanya terlihat di perangkat ini",
|
|
"noComments": "Belum ada komentar.",
|
|
"writeComment": "Tulis komentar",
|
|
"postComment": "Kirim",
|
|
"shareFailed": "Tidak bisa membuka menu berbagi.",
|
|
"nowPlaying": "Sedang diputar",
|
|
"watchFullscreen": "Tonton mode lanskap",
|
|
"exitFullscreen": "Keluar dari layar penuh",
|
|
"pictureInPicture": "Gambar dalam gambar",
|
|
"pipUnavailable": "Gambar dalam gambar tidak tersedia di perangkat ini",
|
|
"originalTag": "Original",
|
|
"dramaTag": "Drama pendek",
|
|
"episodeLabel": "Episode {number}",
|
|
"@episodeLabel": {"placeholders": {"number": {"type": "int"}}},
|
|
"exploreSeries": "Lihat serial",
|
|
"episodeCount": "{count} EPISODE",
|
|
"@episodeCount": {"placeholders": {"count": {"type": "int"}}},
|
|
"technicalDemoCount": "PRATINJAU GRATIS · {count} EPISODE",
|
|
"@technicalDemoCount": {"placeholders": {"count": {"type": "int"}}},
|
|
"episodes": "Episode",
|
|
"watchEpisodeOne": "Tonton episode 1",
|
|
"continueEpisode": "Lanjut episode {number}",
|
|
"@continueEpisode": {"placeholders": {"number": {"type": "int"}}},
|
|
"freeTestMedia": "Klip demo sama · gratis",
|
|
"lockedStoreUnavailable": "Terkunci · toko belum tersedia",
|
|
"freeTestClip": "Klip uji gratis",
|
|
"locked": "Terkunci",
|
|
"freeSamplesNotice": "Dua sampel gratis · pengaturan toko belum selesai",
|
|
"demoTestMedia": "GRATIS · KLIP DEMO SAMA",
|
|
"episodeProgress": "EPISODE {number} / {total}",
|
|
"@episodeProgress": {"placeholders": {"number": {"type": "int"}, "total": {"type": "int"}}},
|
|
"testVideoNotice": "Video uji teknis buatan sendiri",
|
|
"lockedTitle": "Episode {number} terkunci",
|
|
"@lockedTitle": {"placeholders": {"number": {"type": "int"}}},
|
|
"lockedBody": "Pembukaan kunci tersedia setelah toko dan verifikasi disiapkan. Demo ini tidak memproses pembayaran.",
|
|
"playbackError": "Klip ini tidak bisa diputar.",
|
|
"catalogError": "Katalog gagal dimuat.",
|
|
"detailError": "Daftar episode gagal dimuat.",
|
|
"noMediaNotice": "Episode ini belum punya media yang bisa diputar.",
|
|
"noStories": "Belum ada cerita.",
|
|
"retry": "Coba lagi",
|
|
"backToSeries": "Kembali ke serial",
|
|
"nextEpisode": "Episode berikutnya",
|
|
"pause": "Jeda",
|
|
"play": "Putar",
|
|
"seekVideo": "Geser posisi video",
|
|
"seekFailed": "Gagal mengubah posisi putar.",
|
|
"captions": "Subtitle",
|
|
"captionsOff": "Subtitle nonaktif",
|
|
"englishCaptions": "Subtitle bahasa Inggris",
|
|
"chineseCaptions": "Subtitle bahasa Mandarin",
|
|
"language": "Bahasa",
|
|
"systemLanguage": "Sistem",
|
|
"english": "English",
|
|
"simplifiedChinese": "简体中文",
|
|
"episodeOneTitle": "Cahaya Pertama",
|
|
"episodeTwoTitle": "Frekuensi Baru",
|
|
"episodeThreeTitle": "Menyeberang",
|
|
"episodeFourTitle": "Setelah Gema",
|
|
"dramaSignalTitle": "Sinyal",
|
|
"dramaSignalSynopsis": "Serial demo untuk tontonan vertikal. Setiap episode memakai satu klip lokal yang sama.",
|
|
"dramaCityTitle": "Cahaya Kota & Malam Beludru",
|
|
"dramaCitySynopsis": "Serial romansa demo. Video lokal yang sama dipakai untuk mencoba pindah episode dan lanjut tonton.",
|
|
"dramaVengeanceTitle": "Badai Pembalasan",
|
|
"dramaVengeanceSynopsis": "Serial aksi demo. Video lokal yang sama dipakai untuk mencoba pindah episode dan lanjut tonton.",
|
|
"dramaEchoesTitle": "Gema Takdir",
|
|
"genreSuspenseMystery": "Thriller · Misteri",
|
|
"genreUrbanRomance": "Romansa Kota",
|
|
"genreActionThriller": "Aksi · Thriller",
|
|
"genreDramaMystery": "Drama · Misteri",
|
|
"continueWatchingHeading": "LANJUT TONTON",
|
|
"preferencesHeading": "PREFERENSI",
|
|
"brandMark": "FRUITSHORTS",
|
|
"shareFooter": "FruitShorts",
|
|
"shortsTab": "Drama Pendek",
|
|
"myListTab": "Daftar Saya",
|
|
"watchFull": "Tonton Penuh",
|
|
"swipeForNext": "Geser ke atas untuk lanjut",
|
|
"clearScreen": "Bersihkan layar",
|
|
"exitClearScreen": "Keluar dari mode bersih",
|
|
"logIn": "Masuk",
|
|
"logInHint": "Simpan koin dan daftar kamu",
|
|
"rewards": "Hadiah",
|
|
"forYou": "Untuk Kamu",
|
|
"hot": "Populer",
|
|
"newest": "Terbaru",
|
|
"favorite": "Favorit",
|
|
"myAccount": "Akun saya",
|
|
"coins": "Koin",
|
|
"topUpWallet": "Isi Ulang Dompet",
|
|
"vipMembership": "Keanggotaan VIP",
|
|
"notActive": "Tidak Aktif",
|
|
"joinVip": "Gabung VIP",
|
|
"earnRewards": "Dapatkan Hadiah",
|
|
"freeBonus": "Bonus Gratis",
|
|
"watchHistory": "Riwayat Tontonan",
|
|
"settings": "Pengaturan",
|
|
"signOut": "Keluar",
|
|
"mockUserName": "Vicky sheng",
|
|
"mockUserId": "ID: M1CZWVYE",
|
|
"mockNotice": "Hanya data contoh.",
|
|
"topBadge": "TOP 1",
|
|
"signIn": "Masuk",
|
|
"signUp": "Daftar",
|
|
"authSignInTitle": "Selamat datang kembali",
|
|
"authSignUpTitle": "Buat akun kamu",
|
|
"authSubtitle": "Masuk dengan email dan kata sandi.",
|
|
"authEmailLabel": "Email",
|
|
"authPasswordLabel": "Kata sandi",
|
|
"authPasswordHint": "Minimal 8 karakter, berisi huruf dan angka",
|
|
"authEmailRequired": "Masukkan email kamu",
|
|
"authEmailInvalid": "Email itu sepertinya tidak benar",
|
|
"authPasswordRequired": "Masukkan kata sandi kamu",
|
|
"authPasswordLength": "Kata sandi harus 8-64 karakter",
|
|
"authPasswordWeak": "Kata sandi perlu huruf dan angka",
|
|
"authNetworkError": "Jaringan bermasalah, coba lagi",
|
|
"authSwitchToSignUp": "Baru di sini? Buat akun",
|
|
"authSwitchToSignIn": "Sudah punya akun? Masuk",
|
|
"authGateTitle": "Masuk untuk melanjutkan",
|
|
"authGateMessage": "Favorit dan komentar perlu akun.",
|
|
"authGateAction": "Masuk",
|
|
"cancel": "Nanti saja"
|
|
}
|