2f6b542f24
An unlocked phone was enough to read the 24-word recovery phrase. The phrase, backup export and import, the duress PIN, a longer auto-lock, turning off screen security, enabling biometrics and deleting the account now ask for the PIN (or biometrics with biometricOnly) every time. The duress session never shows the phrase. PIN checks outside the lock screen count towards the same failure throttle.
2476 lines
110 KiB
Plaintext
2476 lines
110 KiB
Plaintext
{
|
||
"@@locale": "cs",
|
||
"appTitle": "Šepot",
|
||
"@appTitle": {
|
||
"description": "Název aplikace — značka, nepřekládá se."
|
||
},
|
||
"settingsLanguage": "Jazyk aplikace",
|
||
"@settingsLanguage": {
|
||
"description": "Nastavení: titulek dlaždice a dialogu pro volbu jazyka rozhraní."
|
||
},
|
||
"languageSystem": "Podle systému",
|
||
"@languageSystem": {
|
||
"description": "Volba jazyka: řídit se jazykem zařízení."
|
||
},
|
||
"commonUnknownContact": "Neznámý",
|
||
"@commonUnknownContact": {
|
||
"description": "Titulek AppBar chatu, když kontakt nebyl nalezen | Fallback displayName nově založeného kontaktu z rosteru skupinové pozvánky (_handleGroupInvite), když člen nemá jméno — objeví se jako jméno kontaktu v seznamu kontaktů a chatu. | Fallback displayName v _findOrCreateContact pro neznámého odesílatele bez jména v profilu — identický text jako ř. 967, stejný klíč."
|
||
},
|
||
"verifyVerified": "Ověřeno",
|
||
"@verifyVerified": {
|
||
"description": "Stav ověření kontaktu pod jménem v AppBar chatu (klepnutí vede na safety number) | Titulek AlertDialogu po skenu QR, když bezpečnostní čísla souhlasí"
|
||
},
|
||
"verifyUnverified": "Neověřeno",
|
||
"@verifyUnverified": {
|
||
"description": "Stav ověření kontaktu pod jménem v AppBar chatu"
|
||
},
|
||
"chatMenuVerifyContact": "Ověřit kontakt",
|
||
"@chatMenuVerifyContact": {
|
||
"description": "Položka popup menu (⋮) v chatu 1:1 | Titulek položky v bottom sheetu (long-press na kontakt) — vede na obrazovku ověření safety number"
|
||
},
|
||
"chatDisappearingMessages": "Mizící zprávy",
|
||
"@chatDisappearingMessages": {
|
||
"description": "Položka popup menu chatu 1:1; stejný text i ve skupinovém menu (ř. 350) a jako titulek SimpleDialog (ř. 1125) — jeden klíč | Položka popup menu skupinového chatu — sdílený klíč s ř. 173 | Titulek SimpleDialog výběru TTL — sdílený klíč s ř. 173/350"
|
||
},
|
||
"chatMenuUnblockContact": "Odblokovat kontakt",
|
||
"@chatMenuUnblockContact": {
|
||
"description": "Položka popup menu chatu, když je kontakt blokovaný"
|
||
},
|
||
"chatMenuBlockContact": "Blokovat kontakt",
|
||
"@chatMenuBlockContact": {
|
||
"description": "Položka popup menu chatu"
|
||
},
|
||
"reportAndBlock": "Nahlásit a zablokovat",
|
||
"@reportAndBlock": {
|
||
"description": "Položka popup menu chatu (červená); stejný text = titulek dialogu (ř. 637) a potvrzovací tlačítko (ř. 649) | Titulek AlertDialogu nahlášení — sdílený klíč s ř. 188 a 649 | Potvrzovací tlačítko dialogu nahlášení (červené) — sdílený klíč"
|
||
},
|
||
"errorGeneric": "Chyba: {error}",
|
||
"@errorGeneric": {
|
||
"description": "Chybový stav při načítání konverzace (1:1 chat, střed obrazovky) | Chybový stav při načítání konverzace (skupinový chat) — sdílený klíč s ř. 250 | SnackBar — obecná chyba při nastavování nátlakového PINu; kandidát na sdílený klíč napříč appkou",
|
||
"placeholders": {
|
||
"error": {
|
||
"type": "String"
|
||
}
|
||
}
|
||
},
|
||
"groupsYouLeftGroup": "Už nejsi ve skupině",
|
||
"@groupsYouLeftGroup": {
|
||
"description": "Podtitulek AppBar skupinového chatu po opuštění skupiny; POZOR gender (opustil/opustila)"
|
||
},
|
||
"groupsMemberCount": "{count, plural, one{1 člen} few{{count} členové} many{{count} člena} other{{count} členů}}",
|
||
"@groupsMemberCount": {
|
||
"description": "Podtitulek AppBar skupinového chatu — počet členů, klepnutí otevře seznam.",
|
||
"placeholders": {
|
||
"count": {
|
||
"type": "int"
|
||
}
|
||
}
|
||
},
|
||
"groupsMembers": "Členové",
|
||
"@groupsMembers": {
|
||
"description": "Položka popup menu skupinového chatu"
|
||
},
|
||
"groupsRename": "Přejmenovat skupinu",
|
||
"@groupsRename": {
|
||
"description": "Položka popup menu skupiny; stejný text = titulek dialogu přejmenování (ř. 522) — jeden klíč | Titulek AlertDialog přejmenování skupiny — sdílený klíč s ř. 348"
|
||
},
|
||
"groupsLeave": "Opustit skupinu",
|
||
"@groupsLeave": {
|
||
"description": "Položka popup menu skupiny (červená)"
|
||
},
|
||
"groupsLeftBanner": "Už nejsi ve skupině. Historie zůstává, nové zprávy nedorazí.",
|
||
"@groupsLeftBanner": {
|
||
"description": "Banner místo input baru ve skupině, kterou uživatel opustil; POZOR gender"
|
||
},
|
||
"groupsYou": "Ty",
|
||
"@groupsYou": {
|
||
"description": "Fallback jména vlastního avataru v seznamu členů skupiny | Titulek ListTile vlastní osoby v seznamu členů skupiny — stejný klíč jako ř. 486"
|
||
},
|
||
"groupsFounder": "Zakladatel",
|
||
"@groupsFounder": {
|
||
"description": "Subtitle člena, který skupinu založil, v seznamu členů"
|
||
},
|
||
"groupsAdmin": "Správce",
|
||
"@groupsAdmin": {
|
||
"description": "Odznak správce skupiny u člena v seznamu členů"
|
||
},
|
||
"groupsMakeAdmin": "Udělat správcem",
|
||
"@groupsMakeAdmin": {
|
||
"description": "Akce v nabídce člena: udělit roli správce"
|
||
},
|
||
"groupsDismissAdmin": "Odebrat roli správce",
|
||
"@groupsDismissAdmin": {
|
||
"description": "Akce v nabídce člena: odebrat roli správce"
|
||
},
|
||
"groupsRemoveMember": "Odebrat ze skupiny",
|
||
"@groupsRemoveMember": {
|
||
"description": "Akce v nabídce člena: odebrat ze skupiny"
|
||
},
|
||
"groupsRemoveMemberConfirmTitle": "Odebrat {name} ze skupiny?",
|
||
"@groupsRemoveMemberConfirmTitle": {
|
||
"description": "Titulek potvrzení odebrání člena",
|
||
"placeholders": {
|
||
"name": {
|
||
"type": "String"
|
||
}
|
||
}
|
||
},
|
||
"groupsRemoveMemberConfirmBody": "Přestanou mu chodit nové zprávy skupiny. Dosavadní historie mu zůstane.",
|
||
"@groupsRemoveMemberConfirmBody": {
|
||
"description": "Text potvrzení odebrání člena"
|
||
},
|
||
"groupsRemoveAction": "Odebrat",
|
||
"@groupsRemoveAction": {
|
||
"description": "Potvrzovací tlačítko odebrání člena"
|
||
},
|
||
"groupsViewContact": "Zobrazit kontakt",
|
||
"@groupsViewContact": {
|
||
"description": "Akce v nabídce člena: otevřít profil kontaktu"
|
||
},
|
||
"groupsAdminOnlyHint": "Jméno, členy a správce skupiny mění jen správci.",
|
||
"@groupsAdminOnlyHint": {
|
||
"description": "Vysvětlení pod seznamem členů pro ne-správce ve vynucené skupině"
|
||
},
|
||
"groupsAdminOnlyCompatHint": "Jméno a správce mění jen správci. Přidávat lidi zatím může každý, protože někdo ve skupině má starší verzi Šepotu.",
|
||
"@groupsAdminOnlyCompatHint": {
|
||
"description": "Vysvětlení pro ne-správce, dokud je ve skupině člen se starší verzí aplikace"
|
||
},
|
||
"groupsAdminActionFailed": "Změna se nepovedla: {error}",
|
||
"@groupsAdminActionFailed": {
|
||
"description": "SnackBar při selhání správcovské akce",
|
||
"placeholders": {
|
||
"error": {
|
||
"type": "String"
|
||
}
|
||
}
|
||
},
|
||
"groupsResyncNotice": "Stav skupiny se srovnává se správcem. Změny členů se můžou chvíli opozdit.",
|
||
"@groupsResyncNotice": {
|
||
"description": "Upozornění v profilu skupiny, když chybí mezistav od správce"
|
||
},
|
||
"groupsRejectedChangeNotice": "Někdo bez oprávnění zkusil skupinu změnit. Změna se neprovedla.",
|
||
"@groupsRejectedChangeNotice": {
|
||
"description": "Upozornění v profilu skupiny po odmítnuté neoprávněné změně"
|
||
},
|
||
"errorGroupNotAdmin": "Tohle může udělat jen správce skupiny.",
|
||
"@errorGroupNotAdmin": {
|
||
"description": "Chyba: akci smí udělat jen správce skupiny"
|
||
},
|
||
"errorGroupLastAdmin": "Jsi jediný správce. Nejdřív udělej správcem někoho dalšího.",
|
||
"@errorGroupLastAdmin": {
|
||
"description": "Chyba: poslední správce se nemůže vzdát role"
|
||
},
|
||
"groupsNameHint": "Název skupiny",
|
||
"@groupsNameHint": {
|
||
"description": "hintText TextFieldu v dialogu přejmenování skupiny | labelText textového pole pro jméno skupiny (max 64 znaků)"
|
||
},
|
||
"commonCancel": "Zrušit",
|
||
"@commonCancel": {
|
||
"description": "Tlačítko zrušení v dialogu přejmenování skupiny | Tlačítko zrušení v dialogu opuštění skupiny — sdílený klíč | Tlačítko zrušení v dialogu nahlášení — sdílený klíč"
|
||
},
|
||
"commonSave": "Uložit",
|
||
"@commonSave": {
|
||
"description": "Potvrzovací tlačítko dialogu přejmenování skupiny"
|
||
},
|
||
"groupsRenameFailed": "Přejmenování selhalo: {error}",
|
||
"@groupsRenameFailed": {
|
||
"description": "SnackBar při selhání přejmenování skupiny",
|
||
"placeholders": {
|
||
"error": {
|
||
"type": "String"
|
||
}
|
||
}
|
||
},
|
||
"groupsLeaveConfirmTitle": "Opustit skupinu?",
|
||
"@groupsLeaveConfirmTitle": {
|
||
"description": "Titulek potvrzovacího AlertDialogu opuštění skupiny"
|
||
},
|
||
"groupsLeaveConfirmBody": "Ostatní uvidí, že už ve skupině nejsi. Historie ti zůstane, ale nové zprávy už nedostaneš a zpět tě musí někdo pozvat.",
|
||
"@groupsLeaveConfirmBody": {
|
||
"description": "Obsah potvrzovacího dialogu opuštění skupiny. POZOR: adjacentní literály přes 2 řádky (558-559) — sloučit do jednoho klíče; gender ('odešel')"
|
||
},
|
||
"groupsLeaveAction": "Opustit",
|
||
"@groupsLeaveAction": {
|
||
"description": "Destruktivní potvrzovací tlačítko dialogu opuštění skupiny"
|
||
},
|
||
"groupsLeaveFailed": "Odchod selhal: {error}",
|
||
"@groupsLeaveFailed": {
|
||
"description": "SnackBar při selhání opuštění skupiny",
|
||
"placeholders": {
|
||
"error": {
|
||
"type": "String"
|
||
}
|
||
}
|
||
},
|
||
"chatBlockedBanner": "Kontakt je zablokovaný. Nedostáváš od něj zprávy a nemůžeš mu psát.",
|
||
"@chatBlockedBanner": {
|
||
"description": "Banner místo input baru u blokovaného kontaktu"
|
||
},
|
||
"chatUnblock": "Odblokovat",
|
||
"@chatUnblock": {
|
||
"description": "Tlačítko v banneru blokovaného kontaktu"
|
||
},
|
||
"chatContactBlocked": "Kontakt {name} je zablokovaný",
|
||
"@chatContactBlocked": {
|
||
"description": "SnackBar po zablokování kontaktu; POZOR gender ('byl') — přeformulovat neutrálně nebo ICU select",
|
||
"placeholders": {
|
||
"name": {
|
||
"type": "String"
|
||
}
|
||
}
|
||
},
|
||
"chatContactUnblocked": "Kontakt {name} je odblokovaný",
|
||
"@chatContactUnblocked": {
|
||
"description": "SnackBar po odblokování kontaktu; POZOR gender",
|
||
"placeholders": {
|
||
"name": {
|
||
"type": "String"
|
||
}
|
||
}
|
||
},
|
||
"reportAndBlockBody": "Kontakt {name} zablokujeme a přestaneš od něj dostávat zprávy. Pak ti nabídneme formulář, kterým nám dáš vědět, co se stalo — obsah zpráv nevidíme, takže bez tvého popisu o tom nevíme.",
|
||
"@reportAndBlockBody": {
|
||
"description": "Obsah dialogu nahlášení kontaktu. POZOR: adjacentní literály přes 3 řádky (639-641) — sloučit do jednoho klíče; gender ('bude zablokován')",
|
||
"placeholders": {
|
||
"name": {
|
||
"type": "String"
|
||
}
|
||
}
|
||
},
|
||
"chatEmptyEncrypted": "Zprávy jsou end-to-end šifrované.",
|
||
"@chatEmptyEncrypted": {
|
||
"description": "Prázdný stav chatu (žádné zprávy), první řádek pod E2E badge"
|
||
},
|
||
"chatEmptyNoOneElse": "Nikdo jiný je nemůže číst.",
|
||
"@chatEmptyNoOneElse": {
|
||
"description": "Prázdný stav chatu, druhý řádek — navazuje na chatEmptyEncrypted"
|
||
},
|
||
"commonToday": "Dnes",
|
||
"@commonToday": {
|
||
"description": "Datumový oddělovač mezi zprávami pro dnešní den — pravděpodobně sdílený i s chat listem"
|
||
},
|
||
"commonYesterday": "Včera",
|
||
"@commonYesterday": {
|
||
"description": "Datumový oddělovač mezi zprávami pro včerejší den"
|
||
},
|
||
"chatMessageHint": "Napiš zprávu…",
|
||
"@chatMessageHint": {
|
||
"description": "hintText vstupního pole pro psaní zprávy"
|
||
},
|
||
"chatDiscardRecording": "Zahodit",
|
||
"@chatDiscardRecording": {
|
||
"description": "Tooltip tlačítka koše v liště nahrávání hlasové zprávy"
|
||
},
|
||
"chatRecording": "Nahrávám…",
|
||
"@chatRecording": {
|
||
"description": "Text v liště během nahrávání hlasové zprávy; gender OK (1. os.), ale ověřit pro ru/it"
|
||
},
|
||
"chatMicPermissionMissing": "Chybí oprávnění k mikrofonu",
|
||
"@chatMicPermissionMissing": {
|
||
"description": "SnackBar když aplikace nemá oprávnění k mikrofonu při startu nahrávání"
|
||
},
|
||
"chatRecordingFailed": "Nahrávání selhalo: {error}",
|
||
"@chatRecordingFailed": {
|
||
"description": "SnackBar při selhání startu nahrávání hlasové zprávy",
|
||
"placeholders": {
|
||
"error": {
|
||
"type": "String"
|
||
}
|
||
}
|
||
},
|
||
"chatVoiceSendFailed": "Odeslání hlasové zprávy selhalo: {error}",
|
||
"@chatVoiceSendFailed": {
|
||
"description": "SnackBar při selhání odeslání hlasové zprávy",
|
||
"placeholders": {
|
||
"error": {
|
||
"type": "String"
|
||
}
|
||
}
|
||
},
|
||
"chatDeletedMessagePreview": "Smazaná zpráva",
|
||
"@chatDeletedMessagePreview": {
|
||
"description": "Náhled citované zprávy v compose banneru (odpověď na smazanou zprávu); stejný text v _buildQuote ř. 1486 — jeden klíč | Náhled citované smazané zprávy v quote bloku bubliny — sdílený klíč s ř. 952"
|
||
},
|
||
"chatVoiceMessagePreview": "🎤 Hlasová zpráva",
|
||
"@chatVoiceMessagePreview": {
|
||
"description": "Náhled citované hlasové zprávy v compose banneru; stejný text ř. 1488 — jeden klíč | Náhled citované hlasové zprávy v quote bloku bubliny — sdílený klíč s ř. 954 | Náhled poslední zprávy v dlaždici, když je poslední zpráva hlasová (audio příloha); emoji je součást textu"
|
||
},
|
||
"chatPhotoPreview": "📷 Fotka",
|
||
"@chatPhotoPreview": {
|
||
"description": "Náhled citovaného obrázku v compose banneru; stejný text ř. 1491 — jeden klíč | Náhled citovaného obrázku v quote bloku bubliny — sdílený klíč s ř. 958 | Náhled poslední zprávy v dlaždici — fotka bez popisku; emoji je součást textu"
|
||
},
|
||
"chatAttachmentPreview": "📎 Příloha",
|
||
"@chatAttachmentPreview": {
|
||
"description": "Náhled citované přílohy v compose banneru; stejný text ř. 1491 — jeden klíč | Náhled citované přílohy v quote bloku bubliny — sdílený klíč s ř. 959"
|
||
},
|
||
"chatEditingMessage": "Úprava zprávy",
|
||
"@chatEditingMessage": {
|
||
"description": "Titulek compose banneru v režimu úpravy zprávy"
|
||
},
|
||
"chatReply": "Odpověď",
|
||
"@chatReply": {
|
||
"description": "Titulek compose banneru v režimu odpovědi"
|
||
},
|
||
"chatActionReply": "Odpovědět",
|
||
"@chatActionReply": {
|
||
"description": "Položka akčního bottom sheetu zprávy (long-press)"
|
||
},
|
||
"chatActionForward": "Přeposlat",
|
||
"@chatActionForward": {
|
||
"description": "Akce v nabídce po podržení zprávy"
|
||
},
|
||
"forwardTitle": "Přeposlat do…",
|
||
"@forwardTitle": {
|
||
"description": "Nadpis panelu výběru chatu pro přeposlání"
|
||
},
|
||
"forwardSearchHint": "Hledat kontakt nebo skupinu",
|
||
"@forwardSearchHint": {
|
||
"description": "Nápověda v poli hledání panelu přeposlání"
|
||
},
|
||
"forwardEmpty": "Nic tu není",
|
||
"@forwardEmpty": {
|
||
"description": "Prázdný výsledek hledání v panelu přeposlání"
|
||
},
|
||
"forwardDone": "Přeposláno: {name}",
|
||
"@forwardDone": {
|
||
"description": "SnackBar po přeposlání zprávy",
|
||
"placeholders": {
|
||
"name": {
|
||
"type": "String"
|
||
}
|
||
}
|
||
},
|
||
"forwardFailed": "Přeposlání se nepovedlo: {error}",
|
||
"@forwardFailed": {
|
||
"description": "SnackBar při chybě přeposlání",
|
||
"placeholders": {
|
||
"error": {
|
||
"type": "String"
|
||
}
|
||
}
|
||
},
|
||
"commonCopy": "Kopírovat",
|
||
"@commonCopy": {
|
||
"description": "Položka akčního bottom sheetu zprávy — kopírování textu do schránky | Popisek OutlinedButton.icon pro zkopírování Šepot ID do schránky"
|
||
},
|
||
"commonEdit": "Upravit",
|
||
"@commonEdit": {
|
||
"description": "Položka akčního bottom sheetu vlastní textové zprávy"
|
||
},
|
||
"chatDeleteForMe": "Smazat u mě",
|
||
"@chatDeleteForMe": {
|
||
"description": "Položka akčního bottom sheetu — lokální smazání zprávy"
|
||
},
|
||
"chatDeleteForEveryone": "Smazat pro všechny",
|
||
"@chatDeleteForEveryone": {
|
||
"description": "Položka akčního bottom sheetu vlastní zprávy (červená) — smazání u obou stran"
|
||
},
|
||
"commonOff": "Vypnuto",
|
||
"@commonOff": {
|
||
"description": "Volba v dialogu mizících zpráv (TTL vypnuto); text se používá i v potvrzovacím SnackBaru přes placeholder ř. 1167 | Label volby 'off' v dialogu výběru režimu pushů. Stejný text jako subtitle ListTile pro vypnutý stav (ř. 168) → stejný klíč. | Subtitle ListTile v nastavení, když jsou pushe vypnuté — stejný text a klíč jako label volby v dialogu (ř. 46)"
|
||
},
|
||
"chatDisappearing30s": "30 sekund",
|
||
"@chatDisappearing30s": {
|
||
"description": "Volba TTL v dialogu mizících zpráv; české skloňování zapečené ve fixním labelu — samostatný klíč, ne ICU"
|
||
},
|
||
"chatDisappearing5m": "5 minut",
|
||
"@chatDisappearing5m": {
|
||
"description": "Volba TTL v dialogu mizících zpráv"
|
||
},
|
||
"chatDisappearing1h": "1 hodina",
|
||
"@chatDisappearing1h": {
|
||
"description": "Volba TTL v dialogu mizících zpráv"
|
||
},
|
||
"chatDisappearing1d": "1 den",
|
||
"@chatDisappearing1d": {
|
||
"description": "Volba TTL v dialogu mizících zpráv"
|
||
},
|
||
"chatDisappearing1w": "1 týden",
|
||
"@chatDisappearing1w": {
|
||
"description": "Volba TTL v dialogu mizících zpráv"
|
||
},
|
||
"chatDisappearingDescription": "Nové zprávy se po uplynutí doby smažou u tebe i u protistrany.",
|
||
"@chatDisappearingDescription": {
|
||
"description": "Vysvětlující text v dialogu mizících zpráv"
|
||
},
|
||
"chatDisappearingDisabled": "Mizící zprávy vypnuty",
|
||
"@chatDisappearingDisabled": {
|
||
"description": "SnackBar po vypnutí mizících zpráv"
|
||
},
|
||
"chatDisappearingEnabled": "Nové zprávy zmizí po: {duration}",
|
||
"@chatDisappearingEnabled": {
|
||
"description": "SnackBar po nastavení TTL mizících zpráv. POZOR: adjacentní literály (1166-1167) + placeholder je lokalizovaný label volby (chatDisappearing*) — v kódu dosazovat už přeložený string",
|
||
"placeholders": {
|
||
"duration": {
|
||
"type": "String"
|
||
}
|
||
}
|
||
},
|
||
"attachmentGallery": "Fotka z galerie",
|
||
"@attachmentGallery": {
|
||
"description": "Položka bottom sheetu výběru přílohy"
|
||
},
|
||
"attachmentTakePhoto": "Vyfotit",
|
||
"@attachmentTakePhoto": {
|
||
"description": "Položka bottom sheetu výběru přílohy — kamera"
|
||
},
|
||
"attachmentDocument": "Dokument",
|
||
"@attachmentDocument": {
|
||
"description": "Položka bottom sheetu výběru přílohy — file picker"
|
||
},
|
||
"attachmentTooLarge": "Soubor je příliš velký (max {maxMb} MB)",
|
||
"@attachmentTooLarge": {
|
||
"description": "SnackBar (_showError) když vybraný dokument překročí limit velikosti. POZOR: adjacentní literály (1227-1228) — sloučit",
|
||
"placeholders": {
|
||
"maxMb": {
|
||
"type": "int"
|
||
}
|
||
}
|
||
},
|
||
"attachmentKeepsMetadataTitle": "Fotka odejde i s polohou",
|
||
"@attachmentKeepsMetadataTitle": {
|
||
"description": "Titulek dialogu před odesláním obrázku jako dokumentu, když z něj nejde odstranit EXIF (HEIC, RAW)"
|
||
},
|
||
"attachmentKeepsMetadataBody": "Tenhle formát fotky (třeba HEIC) neumím zbavit metadat. Odešla by v originále včetně polohy, kde vznikla, a údajů o telefonu. Bezpečnější je poslat ji přes Galerii, kde se metadata odstraní.",
|
||
"@attachmentKeepsMetadataBody": {
|
||
"description": "Text téhož dialogu"
|
||
},
|
||
"attachmentSendOriginal": "Poslat originál",
|
||
"@attachmentSendOriginal": {
|
||
"description": "Potvrzovací tlačítko téhož dialogu"
|
||
},
|
||
"attachmentPickFailed": "Výběr přílohy selhal: {error}",
|
||
"@attachmentPickFailed": {
|
||
"description": "SnackBar (_showError) při selhání výběru přílohy",
|
||
"placeholders": {
|
||
"error": {
|
||
"type": "String"
|
||
}
|
||
}
|
||
},
|
||
"attachmentSendFailed": "Odeslání přílohy selhalo: {error}",
|
||
"@attachmentSendFailed": {
|
||
"description": "SnackBar (_showError) při selhání odeslání přílohy",
|
||
"placeholders": {
|
||
"error": {
|
||
"type": "String"
|
||
}
|
||
}
|
||
},
|
||
"chatSendFailed": "Odeslání selhalo: {error}",
|
||
"@chatSendFailed": {
|
||
"description": "SnackBar při selhání odeslání/úpravy textové zprávy",
|
||
"placeholders": {
|
||
"error": {
|
||
"type": "String"
|
||
}
|
||
}
|
||
},
|
||
"chatMessageDeleted": "Zpráva smazána",
|
||
"@chatMessageDeleted": {
|
||
"description": "Text v bublině smazané zprávy (kurzíva s ikonou block) | Náhled poslední zprávy v dlaždici, když byla poslední zpráva smazána"
|
||
},
|
||
"chatEdited": "upraveno",
|
||
"@chatEdited": {
|
||
"description": "Malý štítek v patičce bubliny upravené zprávy, vedle času"
|
||
},
|
||
"errorTrustRootChanged": "Trust root relaye se změnil! Odmítám komunikovat.",
|
||
"@errorTrustRootChanged": {
|
||
"description": "StateError z _refreshSenderCert při neshodě pinovaného trust rootu (možný MITM/jiný relay); propaguje se přes _senderCertificate do sendText/sendAttachment — chybu zobrazuje chat UI (SnackBar / failed stav zprávy)."
|
||
},
|
||
"errorRelayUnavailable": "Relay nedostupný (sender certificate)",
|
||
"@errorRelayUnavailable": {
|
||
"description": "StateError z _senderCertificate, když se nepodařilo získat sender certificate (offline relay); propaguje se do odesílací cesty, zobrazuje chat UI při selhání odeslání."
|
||
},
|
||
"errorNotYetRegistered": "Šepot se ještě připojuje k relayi — zkus zprávu poslat za chvíli.",
|
||
"@errorNotYetRegistered": {
|
||
"description": "NotYetRegisteredError z _sendContent, když vlastní registrace na relay ještě nedoběhla (čerstvá instalace). 'Šepot' je značka, nepřekládat."
|
||
},
|
||
"errorContactLinkIncomplete": "Odkaz je neúplný — protistrana ho vytvořila dřív, než se stihla připojit. Požádej ji o nový sepot:// odkaz.",
|
||
"@errorContactLinkIncomplete": {
|
||
"description": "ContactLinkIncompleteError při přidání kontaktu z odkazu/QR bez routingu (aid+da). 'sepot://' je schéma odkazu, zachovat."
|
||
},
|
||
"errorAttachmentTooLarge": "Příloha je příliš velká (max {maxMb} MB)",
|
||
"@errorAttachmentTooLarge": {
|
||
"description": "StateError z _prepareAttachment při překročení limitu velikosti přílohy; zobrazuje UI výběru/odeslání přílohy. POZOR: v kódu jde o dva adjacentní literály 'Příloha je příliš velká ' (ř. 448) + '(max ${…} MB)' (ř. 449) — sloučit do jednoho klíče.",
|
||
"placeholders": {
|
||
"maxMb": {
|
||
"type": "int"
|
||
}
|
||
}
|
||
},
|
||
"errorGroupNeedsMember": "Skupina potřebuje aspoň 1 člena",
|
||
"@errorGroupNeedsMember": {
|
||
"description": "StateError z createGroup při prázdném seznamu členů; zobrazuje UI zakládání skupiny."
|
||
},
|
||
"errorAttachmentUnavailable": "Příloha už v telefonu není",
|
||
"@errorAttachmentUnavailable": {
|
||
"description": "Chyba při přeposlání přílohy, která už byla smazána nebo nestažena"
|
||
},
|
||
"errorGroupMaxMembers": "Skupina může mít nejvýš {maxMembers} členů",
|
||
"@errorGroupMaxMembers": {
|
||
"description": "StateError z createGroup při překročení max. počtu členů; zobrazuje UI zakládání skupiny. Počet v textu + české skloňování (člen/členové/členů) → ICU plural. | StateError z addGroupMembers — identický text jako v createGroup (ř. 583), stejný klíč. ICU plural.",
|
||
"placeholders": {
|
||
"maxMembers": {
|
||
"type": "int"
|
||
}
|
||
}
|
||
},
|
||
"errorMemberNoDeliveryAddress": "{displayName} nemá doručovací adresu — požádej o nový odkaz",
|
||
"@errorMemberNoDeliveryAddress": {
|
||
"description": "StateError z createGroup pro člena bez routingu (aid/da); zobrazuje UI zakládání skupiny. Víceřádkový throw, literál na ř. 589. | StateError z addGroupMembers — identický text jako v createGroup (ř. 589), stejný klíč.",
|
||
"placeholders": {
|
||
"displayName": {
|
||
"type": "String"
|
||
}
|
||
}
|
||
},
|
||
"errorContactNoDeliveryAddress": "Kontakt nemá doručovací adresu — požádej ho o nový sepot:// odkaz",
|
||
"@errorContactNoDeliveryAddress": {
|
||
"description": "StateError z _sendContent, když protějšek nemá accountId/deliveryAddress; propaguje se do sendText/sendAttachment/fanoutu — zobrazuje chat UI při selhání odeslání. 'sepot://' je schéma odkazu, v překladu zachovat."
|
||
},
|
||
"errorIdentityKeyMismatch": "Identity klíč z relaye NESEDÍ s kontaktem — možný MITM! Zpráva neodeslána.",
|
||
"@errorIdentityKeyMismatch": {
|
||
"description": "StateError z _sendContent při X3DH bootstrapu, když identity klíč z bundle relaye nesedí s klíčem kontaktu (anti-MITM); zobrazuje chat UI. POZOR: dva adjacentní literály 'Identity klíč z relaye NESEDÍ s kontaktem — možný MITM! ' (ř. 1013) + 'Zpráva neodeslána.' (ř. 1014) — sloučit do jednoho klíče."
|
||
},
|
||
"settingsTitle": "Nastavení",
|
||
"@settingsTitle": {
|
||
"description": "Titulek AppBaru obrazovky Nastavení"
|
||
},
|
||
"settingsSectionGeneral": "Obecné",
|
||
"@settingsSectionGeneral": {
|
||
"description": "Hlavička sekce v nastavení (jazyk)"
|
||
},
|
||
"settingsSectionSecurity": "Zabezpečení",
|
||
"@settingsSectionSecurity": {
|
||
"description": "Hlavička sekce v nastavení (PIN, biometrie, zámek)"
|
||
},
|
||
"settingsChangePinTitle": "Změnit PIN",
|
||
"@settingsChangePinTitle": {
|
||
"description": "Titulek dlaždice — otevře změnu PINu | Titulek AppBaru obrazovky změny PINu (vstup z dlaždice v Nastavení)"
|
||
},
|
||
"settingsChangePinSubtitle": "6místný PIN pro odemknutí",
|
||
"@settingsChangePinSubtitle": {
|
||
"description": "Podtitulek dlaždice Změnit PIN"
|
||
},
|
||
"settingsAutoLockTitle": "Automatický zámek",
|
||
"@settingsAutoLockTitle": {
|
||
"description": "Titulek dlaždice auto-zámku; STEJNÝ text i jako title SimpleDialogu na ř. 263 — jeden klíč | Title SimpleDialogu s výběrem intervalu auto-zámku — stejný klíč jako dlaždice ř. 67"
|
||
},
|
||
"settingsAutoLock5min": "Po 5 minutách",
|
||
"@settingsAutoLock5min": {
|
||
"description": "Fallback podtitulek dlaždice auto-zámku, když mapa AutoLockNotifier.moznosti nemá hodnotu — mapa samotná je v settings_provider.dart a musí se lokalizovat tam, stejný text tam nejspíš existuje → sdílet klíč | Volba automatického zámku (300 s, výchozí) v nastavení"
|
||
},
|
||
"settingsDecoyPinTitle": "Nátlakový PIN",
|
||
"@settingsDecoyPinTitle": {
|
||
"description": "Titulek dlaždice nátlakového PINu; STEJNÝ text jako title AlertDialogu ř. 445 a labelText TextFieldu ř. 461 — jeden klíč | Title AlertDialogu nastavení nátlakového PINu — stejný klíč jako dlaždice ř. 75 | labelText prvního TextFieldu (zadání decoy PINu) — stejný klíč"
|
||
},
|
||
"settingsDecoyPinSetSubtitle": "Nastaven — otevře prázdnou aplikaci",
|
||
"@settingsDecoyPinSetSubtitle": {
|
||
"description": "Podtitulek dlaždice, když nátlakový PIN JE nastaven"
|
||
},
|
||
"settingsDecoyPinUnsetSubtitle": "Druhý PIN, který otevře prázdnou aplikaci",
|
||
"@settingsDecoyPinUnsetSubtitle": {
|
||
"description": "Podtitulek dlaždice, když nátlakový PIN NENÍ nastaven"
|
||
},
|
||
"settingsSectionNotifications": "Notifikace",
|
||
"@settingsSectionNotifications": {
|
||
"description": "Hlavička sekce v nastavení (push)"
|
||
},
|
||
"settingsSectionConnection": "Připojení",
|
||
"@settingsSectionConnection": {
|
||
"description": "Hlavička sekce v nastavení (Tor) — jen Android"
|
||
},
|
||
"settingsSectionPrivacy": "Soukromí",
|
||
"@settingsSectionPrivacy": {
|
||
"description": "Hlavička sekce v nastavení (potvrzení přečtení, screen security)"
|
||
},
|
||
"settingsReadReceiptsTitle": "Potvrzení přečtení",
|
||
"@settingsReadReceiptsTitle": {
|
||
"description": "Titulek dlaždice se switchem"
|
||
},
|
||
"settingsReadReceiptsSubtitle": "Ukazovat protistraně přečtení zpráv (výchozí vypnuto)",
|
||
"@settingsReadReceiptsSubtitle": {
|
||
"description": "Podtitulek dlaždice Potvrzení přečtení; tykání, mužský rod ('přečetl') — v překladu volit genderově neutrální formulaci"
|
||
},
|
||
"settingsScreenSecurityTitle": "Zabezpečení obrazovky",
|
||
"@settingsScreenSecurityTitle": {
|
||
"description": "Titulek dlaždice se switchem (FLAG_SECURE)"
|
||
},
|
||
"settingsScreenSecuritySubtitle": "Blokovat screenshoty a skrýt obsah v přepínači aplikací",
|
||
"@settingsScreenSecuritySubtitle": {
|
||
"description": "Podtitulek dlaždice Zabezpečení obrazovky"
|
||
},
|
||
"settingsSectionBackup": "Záloha klíčů",
|
||
"@settingsSectionBackup": {
|
||
"description": "Hlavička sekce v nastavení (seed fráze, export/import)"
|
||
},
|
||
"settingsSeedPhraseTitle": "Zálohovací fráze",
|
||
"@settingsSeedPhraseTitle": {
|
||
"description": "Titulek dlaždice; STEJNÝ text jako title AlertDialogu ř. 542 — jeden klíč | Title AlertDialogu se seed frází — stejný klíč jako dlaždice ř. 138 | Nadpis sekce se seed frází po vygenerování klíčů"
|
||
},
|
||
"settingsSeedPhraseSubtitle": "24 slov pro obnovu identity",
|
||
"@settingsSeedPhraseSubtitle": {
|
||
"description": "Podtitulek dlaždice Zálohovací fráze"
|
||
},
|
||
"settingsBackupExportTitle": "Zálohovat historii",
|
||
"@settingsBackupExportTitle": {
|
||
"description": "Titulek dlaždice exportu zálohy"
|
||
},
|
||
"settingsBackupExportSubtitle": "Šifrovaný soubor s kontakty a zprávami",
|
||
"@settingsBackupExportSubtitle": {
|
||
"description": "Podtitulek dlaždice Zálohovat historii"
|
||
},
|
||
"settingsBackupImportTitle": "Obnovit ze zálohy",
|
||
"@settingsBackupImportTitle": {
|
||
"description": "Titulek dlaždice importu zálohy"
|
||
},
|
||
"settingsBackupImportSubtitle": "Načíst zálohu (jen s tvojí identitou)",
|
||
"@settingsBackupImportSubtitle": {
|
||
"description": "Podtitulek dlaždice Obnovit ze zálohy"
|
||
},
|
||
"settingsSectionSafety": "Bezpečnost",
|
||
"@settingsSectionSafety": {
|
||
"description": "Hlavička sekce v nastavení (nahlášení zneužití, ochrana dětí) — odlišit od settingsSectionSecurity ('Zabezpečení')"
|
||
},
|
||
"settingsReportAbuseTitle": "Nahlásit zneužití",
|
||
"@settingsReportAbuseTitle": {
|
||
"description": "Titulek dlaždice — otevře /report"
|
||
},
|
||
"settingsReportAbuseSubtitle": "Obtěžování, podvod, ohrožení dítěte",
|
||
"@settingsReportAbuseSubtitle": {
|
||
"description": "Podtitulek dlaždice Nahlásit zneužití"
|
||
},
|
||
"settingsChildSafetyTitle": "Standardy ochrany dětí",
|
||
"@settingsChildSafetyTitle": {
|
||
"description": "Titulek dlaždice — otevře externí URL childSafetyUrl | TextButton dole na formuláři — otevírá AppConstants.childSafetyUrl v externím prohlížeči"
|
||
},
|
||
"settingsChildSafetySubtitle": "Jak postupujeme proti zneužívání dětí",
|
||
"@settingsChildSafetySubtitle": {
|
||
"description": "Podtitulek dlaždice Standardy ochrany dětí"
|
||
},
|
||
"settingsSectionAbout": "O aplikaci",
|
||
"@settingsSectionAbout": {
|
||
"description": "Hlavička sekce v nastavení"
|
||
},
|
||
"commonAppName": "Šepot",
|
||
"@commonAppName": {
|
||
"description": "Titulek dlaždice O aplikaci — název produktu; napříč jazyky pravděpodobně zůstává 'Šepot' (brand), ale klíč založit, ať jde rozhodnout centrálně | Titulek AppBaru hlavní obrazovky — název aplikace (brand; zvážit nepřekládat) | Titulek lokální notifikace (showMessageNotification). Je to název aplikace/brand — rozhodnout, zda zůstává 'Šepot' ve všech jazycích; doporučeno nepřekládat, ale klíč zavést kvůli konzistenci. Duplicitně na řádcích 60 a 83."
|
||
},
|
||
"settingsVersion": "Verze {version}",
|
||
"@settingsVersion": {
|
||
"description": "Podtitulek dlaždice O aplikaci; STEJNÝ text i v about dialogu ř. 596 — jeden klíč | Verze v about dialogu — stejný klíč jako ř. 181",
|
||
"placeholders": {
|
||
"version": {
|
||
"type": "String"
|
||
}
|
||
}
|
||
},
|
||
"settingsLicenseTitle": "Licence",
|
||
"@settingsLicenseTitle": {
|
||
"description": "Titulek dlaždice; STEJNÝ text jako title AlertDialogu ř. 241 — jeden klíč"
|
||
},
|
||
"settingsLicenseSubtitle": "AGPL-3.0",
|
||
"@settingsLicenseSubtitle": {
|
||
"description": "Podtitulek dlaždice Licence — název licence, ve všech jazycích stejný; klíč založit kvůli konzistenci extrakce (nebo ponechat literál — rozhodnutí orchestrátora)"
|
||
},
|
||
"settingsPrivacyPolicyTitle": "Zásady ochrany soukromí",
|
||
"@settingsPrivacyPolicyTitle": {
|
||
"description": "Titulek dlaždice — otevře privacyUrl"
|
||
},
|
||
"settingsPrivacyPolicySubtitle": "Co o tobě víme (a co ne)",
|
||
"@settingsPrivacyPolicySubtitle": {
|
||
"description": "Podtitulek dlaždice Zásady ochrany soukromí; tykání"
|
||
},
|
||
"settingsTermsTitle": "Podmínky použití",
|
||
"@settingsTermsTitle": {
|
||
"description": "Titulek dlaždice — otevře termsUrl"
|
||
},
|
||
"settingsTermsSubtitle": "sepot.cz/podminky",
|
||
"@settingsTermsSubtitle": {
|
||
"description": "Podtitulek dlaždice Podmínky použití — zobrazená lidsky čitelná URL; POZOR: cesta /podminky je česká, pro en/de/ru/it zvážit lokalizované URL nebo neutrální text"
|
||
},
|
||
"settingsDataDeletionTitle": "Smazání dat",
|
||
"@settingsDataDeletionTitle": {
|
||
"description": "Titulek dlaždice — otevře deletionUrl"
|
||
},
|
||
"settingsDataDeletionSubtitle": "Jak požádat o výmaz",
|
||
"@settingsDataDeletionSubtitle": {
|
||
"description": "Podtitulek dlaždice Smazání dat"
|
||
},
|
||
"settingsDeleteAllDataButton": "Smazat všechna data",
|
||
"@settingsDeleteAllDataButton": {
|
||
"description": "Červené OutlinedButton dole na obrazovce — otevře potvrzovací dialog smazání účtu"
|
||
},
|
||
"settingsLicenseBody": "Šepot je šířen pod licencí GNU Affero General Public License verze 3 (AGPL-3.0). Používá knihovnu libsignal, rovněž AGPL-3.0.\n\nO zdrojový kód odpovídající této verzi si můžeš napsat na {supportEmail} a pošleme ti ho.",
|
||
"@settingsLicenseBody": {
|
||
"description": "Obsah AlertDialogu Licence (plní nabídku zdrojáku dle AGPL § 6); v kódu 3 adjacentní literály přes ř. 243-246 — sloučit do jednoho klíče s placeholder supportEmail",
|
||
"placeholders": {
|
||
"supportEmail": {
|
||
"type": "String"
|
||
}
|
||
}
|
||
},
|
||
"commonClose": "Zavřít",
|
||
"@commonClose": {
|
||
"description": "Tlačítko zavření dialogu Licence; stejný text ř. 574 (seed fráze) a ř. 619 (about) — jeden common klíč | Tlačítko zavření dialogu seed fráze — společný klíč | Tlačítko zavření about dialogu — společný klíč"
|
||
},
|
||
"settingsIdCopied": "ID zkopírováno",
|
||
"@settingsIdCopied": {
|
||
"description": "SnackBar po tapnutí na Šepot ID v profilové kartě (kopie do schránky)"
|
||
},
|
||
"settingsFingerprint": "Otisk: {fingerprint}",
|
||
"@settingsFingerprint": {
|
||
"description": "Kryptografický otisk identity v profilové kartě nahoře | Řádek s bezpečnostním otiskem (fingerprint) identity v potvrzovacím dialogu nového kontaktu. | Popisek kryptografického otisku pod jménem uživatele (monospace styl)",
|
||
"placeholders": {
|
||
"fingerprint": {
|
||
"type": "String"
|
||
}
|
||
}
|
||
},
|
||
"backupShareSubject": "Šepot — šifrovaná záloha",
|
||
"@backupShareSubject": {
|
||
"description": "Subject share_plus při sdílení souboru zálohy — vidí uživatel v systémovém share sheetu / e-mailu"
|
||
},
|
||
"backupExportFailed": "Záloha selhala: {error}",
|
||
"@backupExportFailed": {
|
||
"description": "SnackBar při chybě exportu zálohy",
|
||
"placeholders": {
|
||
"error": {
|
||
"type": "String"
|
||
}
|
||
}
|
||
},
|
||
"backupRestoredCount": "{count, plural, one{Obnovena 1 konverzace ze zálohy} few{Obnoveny {count} konverzace ze zálohy} many{Obnoveno {count} konverzace ze zálohy} other{Obnoveno {count} konverzací ze zálohy}}",
|
||
"@backupRestoredCount": {
|
||
"description": "SnackBar po úspěšném importu zálohy historie.",
|
||
"placeholders": {
|
||
"count": {
|
||
"type": "int"
|
||
}
|
||
}
|
||
},
|
||
"backupImportFailed": "Obnova ze zálohy selhala: {error}",
|
||
"@backupImportFailed": {
|
||
"description": "SnackBar při chybě importu zálohy",
|
||
"placeholders": {
|
||
"error": {
|
||
"type": "String"
|
||
}
|
||
}
|
||
},
|
||
"settingsDecoyPinExplain": "Zadáním tohoto PINu se aplikace otevře prázdná — bez tvých kontaktů a zpráv. Musí být jiný než běžný PIN.",
|
||
"@settingsDecoyPinExplain": {
|
||
"description": "Vysvětlující text v dialogu nastavení nátlakového PINu; v kódu 2 adjacentní literály ř. 450-451 — sloučit"
|
||
},
|
||
"commonConfirm": "Potvrdit",
|
||
"@commonConfirm": {
|
||
"description": "labelText druhého TextFieldu (potvrzení decoy PINu)"
|
||
},
|
||
"commonSet": "Nastavit",
|
||
"@commonSet": {
|
||
"description": "Potvrzovací tlačítko dialogu nátlakového PINu (uloží PIN)"
|
||
},
|
||
"settingsDecoyPinEnabled": "Nátlakový PIN nastaven",
|
||
"@settingsDecoyPinEnabled": {
|
||
"description": "SnackBar po úspěšném nastavení nátlakového PINu"
|
||
},
|
||
"settingsDecoyPinConflict": "Nátlakový PIN musí být jiný než běžný",
|
||
"@settingsDecoyPinConflict": {
|
||
"description": "SnackBar při DecoyPinConflict (decoy PIN == hlavní PIN); výjimka sama je v secure_storage.dart, hláška ale vzniká tady v UI"
|
||
},
|
||
"settingsDecoyPinDisabled": "Nátlakový PIN zrušen",
|
||
"@settingsDecoyPinDisabled": {
|
||
"description": "SnackBar po deaktivaci nátlakového PINu"
|
||
},
|
||
"settingsSeedPhraseNotFound": "Zálohovací fráze nebyla nalezena",
|
||
"@settingsSeedPhraseNotFound": {
|
||
"description": "SnackBar, když storage nevrátí seed frázi"
|
||
},
|
||
"settingsSeedPhraseWarning": "Tato slova jsou jedinou zálohou tvé identity. Nikomu je neukazuj!",
|
||
"@settingsSeedPhraseWarning": {
|
||
"description": "Varování v dialogu seed fráze; 2 adjacentní literály ř. 547-548 — sloučit; POZOR gramatická chyba v originálu: správně 'Tato slova' — v cs ARB opravit"
|
||
},
|
||
"settingsSeedWordChip": "{index}. {word}",
|
||
"@settingsSeedWordChip": {
|
||
"description": "Label Chipu s jedním slovem seed fráze ve formátu '1. slovo'; formát je jazykově neutrální — možno ponechat i bez ARB, ale pro RU/DE typografii raději klíč s placeholders",
|
||
"placeholders": {
|
||
"index": {
|
||
"type": "int"
|
||
},
|
||
"word": {
|
||
"type": "String"
|
||
}
|
||
}
|
||
},
|
||
"settingsAboutTagline": "Šepot — Soukromý Messenger",
|
||
"@settingsAboutTagline": {
|
||
"description": "Nadpis v about dialogu; 'Šepot' je brand, podtitul 'Soukromý Messenger' se překládá"
|
||
},
|
||
"settingsAboutBody": "E2E šifrovaný messenger s otevřeným zdrojovým kódem.\n\nKryptografie:\n• X25519 (výměna klíčů)\n• XChaCha20-Poly1305 (šifrování)\n• Ed25519 (podpisy)\n\n© 2026 ajtak.it",
|
||
"@settingsAboutBody": {
|
||
"description": "Tělo about dialogu; 6 adjacentních literálů ř. 601-606 — sloučit do jednoho víceřádkového klíče; názvy algoritmů a copyright zůstávají, překládají se jen popisky v závorkách a úvodní věta"
|
||
},
|
||
"settingsDeleteAccountTitle": "Smazat účet a všechna data?",
|
||
"@settingsDeleteAccountTitle": {
|
||
"description": "Title potvrzovacího AlertDialogu smazání účtu"
|
||
},
|
||
"settingsDeleteAccountBody": "Tato akce je nevratná. Všechny zprávy, kontakty a klíče budou smazány z tohoto zařízení a účet bude odregistrován ze serveru. Pokud nemáš zálohovací frázi, přijdeš o svou identitu.",
|
||
"@settingsDeleteAccountBody": {
|
||
"description": "Tělo potvrzovacího dialogu smazání účtu; 3 adjacentní literály ř. 632-634 — sloučit; tykání"
|
||
},
|
||
"settingsDeleteAccountServerOffline": "Server je teď nedostupný — data v zařízení jsou smazaná, registrace na serveru zůstala. Zbytek smažeme na podpora@sepot.cz.",
|
||
"@settingsDeleteAccountServerOffline": {
|
||
"description": "SnackBar (8 s) po smazání dat, když serverová deregistrace selhala; 3 adjacentní literály ř. 657-659 — sloučit; obsahuje natvrdo e-mail podpora@sepot.cz — zvážit placeholder z AppConstants.supportEmail místo literálu"
|
||
},
|
||
"settingsDeleteAllConfirm": "Smazat vše",
|
||
"@settingsDeleteAllConfirm": {
|
||
"description": "Červené potvrzovací tlačítko dialogu smazání účtu — provede nevratné smazání"
|
||
},
|
||
"groupsCreateFailed": "Skupinu se nepovedlo založit: {error}",
|
||
"@groupsCreateFailed": {
|
||
"description": "SnackBar po neúspěšném založení skupiny (výjimka z createGroup) — $e je surová výjimka, překladatel překládá jen úvod věty",
|
||
"placeholders": {
|
||
"error": {
|
||
"type": "String"
|
||
}
|
||
}
|
||
},
|
||
"groupsNewGroupTitle": "Nová skupina",
|
||
"@groupsNewGroupTitle": {
|
||
"description": "Titulek AppBaru obrazovky založení skupiny | Tooltip ikony (group_add) v AppBaru — otevře vytvoření skupiny"
|
||
},
|
||
"groupsCreateAction": "Založit",
|
||
"@groupsCreateAction": {
|
||
"description": "Akční tlačítko v AppBaru — potvrzení založení skupiny (sloveso, krátké)"
|
||
},
|
||
"groupsMembersCounter": "Členové ({selectedCount}/{maxMembers})",
|
||
"@groupsMembersCounter": {
|
||
"description": "Nadpis sekce seznamu kontaktů s počítadlem vybraných členů vs. maxima, formát 'Členové (3/15)'. Počet je jen v závorce jako poměr — slovo 'Členové' se neskloňuje podle počtu, ICU plural není nutný, stačí dva placeholdery.",
|
||
"placeholders": {
|
||
"selectedCount": {
|
||
"type": "int"
|
||
},
|
||
"maxMembers": {
|
||
"type": "int"
|
||
}
|
||
}
|
||
},
|
||
"groupsEmptyContactsHint": "Nejdřív si přidej kontakty — skupina se skládá z lidí, se kterými si už můžeš psát.",
|
||
"@groupsEmptyContactsHint": {
|
||
"description": "Prázdný stav — uživatel nemá žádné (neblokované) kontakty, ze kterých by šlo skupinu složit. POZOR: v kódu dva adjacentní literály na řádcích 121–122, sloučit do jednoho klíče (text zde už sloučený, mezera je na konci prvního literálu)."
|
||
},
|
||
"groupsMemberMissingAddress": "Chybí doručovací adresa — požádej o nový odkaz",
|
||
"@groupsMemberMissingAddress": {
|
||
"description": "Podtitulek zašedlého (nevybratelného) kontaktu v seznamu — kontakt nemá routing (accountId/deliveryAddress), nelze ho přidat do skupiny"
|
||
},
|
||
"attachmentSizeBytes": "{bytes} B",
|
||
"@attachmentSizeBytes": {
|
||
"description": "Velikost přílohy-dokumentu na kartě v chatu, varianta pod 1 kB (např. '512 B')",
|
||
"placeholders": {
|
||
"bytes": {
|
||
"type": "int"
|
||
}
|
||
}
|
||
},
|
||
"attachmentSizeKb": "{kilobytes} kB",
|
||
"@attachmentSizeKb": {
|
||
"description": "Velikost přílohy-dokumentu na kartě v chatu, varianta kB (např. '38 kB'). Ruština používá 'КБ'.",
|
||
"placeholders": {
|
||
"kilobytes": {
|
||
"type": "String"
|
||
}
|
||
}
|
||
},
|
||
"attachmentSizeMb": "{megabytes} MB",
|
||
"@attachmentSizeMb": {
|
||
"description": "Velikost přílohy-dokumentu na kartě v chatu, varianta MB (např. '2.3 MB'). Ruština používá 'МБ'; desetinný oddělovač by měl respektovat locale.",
|
||
"placeholders": {
|
||
"megabytes": {
|
||
"type": "String"
|
||
}
|
||
}
|
||
},
|
||
"attachmentDownloadFailedTapToRetry": "Stažení selhalo — klepni pro opakování",
|
||
"@attachmentDownloadFailedTapToRetry": {
|
||
"description": "Overlay přes thumbnail obrázkové přílohy, když stažení blobu selhalo; klepnutí spustí retry. STEJNÝ text i na ř. 464 (karta dokumentu) → jeden klíč. | Podtitulek karty dokumentu ve stavu failed (jinak se zobrazuje velikost formatBytes). Duplikát textu z ř. 134 → stejný klíč."
|
||
},
|
||
"attachmentDownloadFailed": "Stažení selhalo",
|
||
"@attachmentDownloadFailed": {
|
||
"description": "Řádek hlasové zprávy v bublině, když stažení audio blobu selhalo (stav failed)"
|
||
},
|
||
"attachmentDownloading": "Stahuji…",
|
||
"@attachmentDownloading": {
|
||
"description": "Řádek hlasové zprávy v bublině během stahování blobu (stav pending/downloading), vedle spinneru"
|
||
},
|
||
"attachmentSharedFileFallbackName": "soubor",
|
||
"@attachmentSharedFileFallbackName": {
|
||
"description": "Fallback název souboru (malé písmeno) předaný do XFile.fromData při sdílení dokumentu přes systémový share sheet (share_plus) — uživatel ho vidí jako název sdíleného souboru"
|
||
},
|
||
"attachmentOpenFailed": "Otevření přílohy selhalo: {error}",
|
||
"@attachmentOpenFailed": {
|
||
"description": "SnackBar při výjimce během dešifrování/sdílení dokumentové přílohy",
|
||
"placeholders": {
|
||
"error": {
|
||
"type": "String"
|
||
}
|
||
}
|
||
},
|
||
"commonFile": "Soubor",
|
||
"@commonFile": {
|
||
"description": "Fallback názvu dokumentu na kartě přílohy, když meta.name je null. Stejný text jako fallback v chat_list_tile.dart ř. 169 → sdílený common klíč. | Fallback názvu souboru vnořený v interpolaci na ř. 169, když msg.fileName je null. Stejný text jako attachment_content.dart ř. 452 → sdílený common klíč."
|
||
},
|
||
"chatListNewConversation": "Nová konverzace",
|
||
"@chatListNewConversation": {
|
||
"description": "Náhled poslední zprávy v dlaždici seznamu chatů, když konverzace zatím nemá žádnou zprávu"
|
||
},
|
||
"chatListReadReceiptPreview": "Přečteno",
|
||
"@chatListReadReceiptPreview": {
|
||
"description": "Náhled poslední zprávy v dlaždici pro zprávu typu readReceipt (potvrzení o přečtení)"
|
||
},
|
||
"chatListDraft": "Koncept",
|
||
"@chatListDraft": {
|
||
"description": "Předpona náhledu v seznamu chatů, když je v chatu rozepsaná zpráva"
|
||
},
|
||
"notesTitle": "Poznámky pro sebe",
|
||
"@notesTitle": {
|
||
"description": "Název chatu se sebou samým (seznam chatů, hlavička, kontakty, přeposlání)"
|
||
},
|
||
"notesSubtitle": "Jen v tomto telefonu, šifrovaně",
|
||
"@notesSubtitle": {
|
||
"description": "Podtitulek poznámek pro sebe — nic se neodesílá na server"
|
||
},
|
||
"callVoice": "Zavolat",
|
||
"@callVoice": {
|
||
"description": "Tlačítko hlasového hovoru v hlavičce chatu"
|
||
},
|
||
"callVideo": "Videohovor",
|
||
"@callVideo": {
|
||
"description": "Tlačítko videohovoru v hlavičce chatu"
|
||
},
|
||
"callStatusRinging": "Vyzvání…",
|
||
"@callStatusRinging": {
|
||
"description": "Stav odchozího hovoru, dokud protistrana nezvedne"
|
||
},
|
||
"callIncomingVoice": "Příchozí hovor",
|
||
"@callIncomingVoice": {
|
||
"description": "Stav příchozího hlasového hovoru"
|
||
},
|
||
"callIncomingVideo": "Příchozí videohovor",
|
||
"@callIncomingVideo": {
|
||
"description": "Stav příchozího videohovoru"
|
||
},
|
||
"callStatusConnecting": "Spojuji…",
|
||
"@callStatusConnecting": {
|
||
"description": "Stav po přijetí, než naběhne spojení"
|
||
},
|
||
"callEnded": "Hovor skončil",
|
||
"@callEnded": {
|
||
"description": "Krátce po konci hovoru"
|
||
},
|
||
"callEndedBusy": "Obsazeno",
|
||
"@callEndedBusy": {
|
||
"description": "Protistrana má jiný hovor"
|
||
},
|
||
"callEndedRejected": "Hovor odmítnut",
|
||
"@callEndedRejected": {
|
||
"description": "Hovor byl odmítnut"
|
||
},
|
||
"callEndedUnanswered": "Nikdo to nevzal",
|
||
"@callEndedUnanswered": {
|
||
"description": "Odchozí hovor vypršel bez odpovědi"
|
||
},
|
||
"callEndedFailed": "Spojení se nepodařilo",
|
||
"@callEndedFailed": {
|
||
"description": "Hovor se nepodařilo spojit"
|
||
},
|
||
"callEncrypted": "Šifrováno end-to-end",
|
||
"@callEncrypted": {
|
||
"description": "Podtitulek na obrazovce hovoru"
|
||
},
|
||
"callAccept": "Přijmout",
|
||
"@callAccept": {
|
||
"description": "Přijetí příchozího hovoru"
|
||
},
|
||
"callReject": "Odmítnout",
|
||
"@callReject": {
|
||
"description": "Odmítnutí příchozího hovoru"
|
||
},
|
||
"callMute": "Ztlumit mikrofon",
|
||
"@callMute": {
|
||
"description": "Přepínač mikrofonu (popisek pro čtečku)"
|
||
},
|
||
"callSpeaker": "Reproduktor",
|
||
"@callSpeaker": {
|
||
"description": "Přepínač hlasitého odposlechu"
|
||
},
|
||
"callCamera": "Vypnout kameru",
|
||
"@callCamera": {
|
||
"description": "Přepínač kamery ve videohovoru"
|
||
},
|
||
"callSwitchCamera": "Přepnout kameru",
|
||
"@callSwitchCamera": {
|
||
"description": "Přední/zadní kamera"
|
||
},
|
||
"callHangUp": "Zavěsit",
|
||
"@callHangUp": {
|
||
"description": "Ukončení hovoru"
|
||
},
|
||
"callLogMissed": "Zmeškaný hovor",
|
||
"@callLogMissed": {
|
||
"description": "Záznam v chatu"
|
||
},
|
||
"callLogUnanswered": "Nepřijatý hovor",
|
||
"@callLogUnanswered": {
|
||
"description": "Odchozí hovor, který protistrana nevzala"
|
||
},
|
||
"callLogRejected": "Odmítnutý hovor",
|
||
"@callLogRejected": {
|
||
"description": "Záznam v chatu"
|
||
},
|
||
"callLogBusy": "Obsazeno",
|
||
"@callLogBusy": {
|
||
"description": "Záznam v chatu — protistrana měla jiný hovor"
|
||
},
|
||
"callLogFailed": "Hovor se nespojil",
|
||
"@callLogFailed": {
|
||
"description": "Záznam v chatu"
|
||
},
|
||
"callLogVoice": "Hovor · {duration}",
|
||
"@callLogVoice": {
|
||
"description": "Záznam proběhlého hlasového hovoru s délkou",
|
||
"placeholders": {
|
||
"duration": {
|
||
"type": "String"
|
||
}
|
||
}
|
||
},
|
||
"callLogVideo": "Videohovor · {duration}",
|
||
"@callLogVideo": {
|
||
"description": "Záznam proběhlého videohovoru s délkou",
|
||
"placeholders": {
|
||
"duration": {
|
||
"type": "String"
|
||
}
|
||
}
|
||
},
|
||
"chatListTimeNow": "teď",
|
||
"@chatListTimeNow": {
|
||
"description": "Relativní čas poslední zprávy v dlaždici, méně než 1 minuta"
|
||
},
|
||
"chatListTimeMinutes": "{minutes} min",
|
||
"@chatListTimeMinutes": {
|
||
"description": "Relativní čas poslední zprávy v dlaždici, méně než hodina (např. '12 min'). Zkratka 'min' se česky neskloňuje, ale doporučuji ICU plural pro jistotu jiných jazyků (ru).",
|
||
"placeholders": {
|
||
"minutes": {
|
||
"type": "int"
|
||
}
|
||
}
|
||
},
|
||
"qrScanTitle": "Skenovat QR kód",
|
||
"@qrScanTitle": {
|
||
"description": "Titulek AppBaru obrazovky QR skeneru pro přidání kontaktu. | Tooltip ikony QR skeneru v AppBaru kontaktů"
|
||
},
|
||
"qrScanInstruction": "Namiř kameru na QR kód kontaktu",
|
||
"@qrScanInstruction": {
|
||
"description": "Hlavní instrukce ve spodním panelu skeneru (tykání — sjednotit tón napříč appkou)."
|
||
},
|
||
"qrScanHint": "QR kód obsahuje veřejný klíč kontaktu",
|
||
"@qrScanHint": {
|
||
"description": "Sekundární vysvětlující text pod instrukcí ve spodním panelu skeneru."
|
||
},
|
||
"qrNewContactTitle": "Nový kontakt",
|
||
"@qrNewContactTitle": {
|
||
"description": "Titulek potvrzovacího AlertDialogu po naskenování platného QR kódu kontaktu."
|
||
},
|
||
"qrContactAdded": "{name} přidán/a",
|
||
"@qrContactAdded": {
|
||
"description": "SnackBar po úspěšném přidání kontaktu z QR. POZOR: gender tvar „přidán/a“ — v EN/DE/RU/IT přeformulovat neutrálně (např. „Kontakt {name} přidán“ / „{name} added“).",
|
||
"placeholders": {
|
||
"name": {
|
||
"type": "String"
|
||
}
|
||
}
|
||
},
|
||
"commonAdd": "Přidat",
|
||
"@commonAdd": {
|
||
"description": "Potvrzovací tlačítko (ElevatedButton) v dialogu nového kontaktu — obecné „Přidat“, vhodný common klíč. | Potvrzovací ElevatedButton dialogu Přidat kontakt — obecné 'Přidat', kandidát na common klíč"
|
||
},
|
||
"onboardingWelcomeTitle": "Vítej v Šepotu",
|
||
"@onboardingWelcomeTitle": {
|
||
"description": "Nadpis 1. onboarding stránky (uvítání) pod logem"
|
||
},
|
||
"onboardingWelcomeSubtitle": "Soukromý messenger s end-to-end šifrováním.\nŽádné telefonní číslo. Žádný email.\nJen tvoje klíče.",
|
||
"@onboardingWelcomeSubtitle": {
|
||
"description": "Podtitulek 1. onboarding stránky; v kódu 3 adjacentní literály s \\n (ř. 97–99), sloučit do jednoho klíče"
|
||
},
|
||
"onboardingStart": "Začít",
|
||
"@onboardingStart": {
|
||
"description": "Hlavní tlačítko na 1. onboarding stránce — přejde na stránku o šifrování"
|
||
},
|
||
"onboardingRestoreExisting": "Už mám účet — obnovit ze zálohovací fráze",
|
||
"@onboardingRestoreExisting": {
|
||
"description": "TextButton pod Začít, vede na /restore (obnova účtu ze seed fráze)"
|
||
},
|
||
"onboardingEncryptionTitle": "Tvoje zprávy, tvoje klíče",
|
||
"@onboardingEncryptionTitle": {
|
||
"description": "Nadpis 2. onboarding stránky (vysvětlení šifrování)"
|
||
},
|
||
"onboardingFeatureSignalTitle": "Signal protokol",
|
||
"@onboardingFeatureSignalTitle": {
|
||
"description": "Titulek feature řádku 1 na stránce o šifrování"
|
||
},
|
||
"onboardingFeatureSignalSubtitle": "X3DH + Double Ratchet, forward secrecy",
|
||
"@onboardingFeatureSignalSubtitle": {
|
||
"description": "Podtitulek feature řádku 1 (technické termíny, částečně nepřekládat)"
|
||
},
|
||
"onboardingFeaturePqTitle": "Post-kvantová ochrana",
|
||
"@onboardingFeaturePqTitle": {
|
||
"description": "Titulek feature řádku 2"
|
||
},
|
||
"onboardingFeaturePqSubtitle": "Kyber (PQXDH) od první zprávy",
|
||
"@onboardingFeaturePqSubtitle": {
|
||
"description": "Podtitulek feature řádku 2"
|
||
},
|
||
"onboardingFeatureLocalKeysTitle": "Klíče jen na tvém zařízení",
|
||
"@onboardingFeatureLocalKeysTitle": {
|
||
"description": "Titulek feature řádku 3"
|
||
},
|
||
"onboardingFeatureLocalKeysSubtitle": "Žádný server je nemá",
|
||
"@onboardingFeatureLocalKeysSubtitle": {
|
||
"description": "Podtitulek feature řádku 3 (odkazuje na klíče z titulku)"
|
||
},
|
||
"onboardingFeatureDisappearingSubtitle": "Automaticky se smaží",
|
||
"@onboardingFeatureDisappearingSubtitle": {
|
||
"description": "Podtitulek feature řádku 4 (podmět = zprávy z titulku)"
|
||
},
|
||
"commonContinue": "Pokračovat",
|
||
"@commonContinue": {
|
||
"description": "Tlačítko na 2. onboarding stránce; stejný text i na ř. 351 — sdílený common klíč | Tlačítko po potvrzení uložení seed fráze — pokračuje na /pin-setup; sdílené s ř. 185"
|
||
},
|
||
"onboardingIdentityTitle": "Vytvoř svoji identitu",
|
||
"@onboardingIdentityTitle": {
|
||
"description": "Nadpis 3. onboarding stránky (vytvoření identity)"
|
||
},
|
||
"onboardingIdentitySubtitle": "Žádný email ani telefon. Jen jméno a kryptografické klíče.",
|
||
"@onboardingIdentitySubtitle": {
|
||
"description": "Podtitulek 3. onboarding stránky"
|
||
},
|
||
"onboardingDisplayNameLabel": "Zobrazované jméno",
|
||
"@onboardingDisplayNameLabel": {
|
||
"description": "labelText TextFieldu pro jméno uživatele při vytváření identity | labelText pole pro jméno na obrazovce obnovy. Pravděpodobně stejný text i na setup obrazovce — kandidát na common klíč (commonDisplayName), sjednotit s inventurou onboardingu."
|
||
},
|
||
"onboardingDisplayNameHint": "Např. Jan",
|
||
"@onboardingDisplayNameHint": {
|
||
"description": "hintText TextFieldu pro jméno — lokalizovat na typické místní jméno | hintText pole pro jméno (příklad jména — pro každý jazyk zvolit lokální jméno, např. 'e.g. John')"
|
||
},
|
||
"onboardingSeedPhraseWarning": "Zapiš si těchto {count} slov. Jsou jedinou zálohou tvých klíčů!",
|
||
"@onboardingSeedPhraseWarning": {
|
||
"description": "Varování nad mřížkou seed slov; adjacentní literály ř. 281–282 sloučit; počet slov se česky skloňuje (slovo/slova/slov)",
|
||
"placeholders": {
|
||
"count": {
|
||
"type": "int"
|
||
}
|
||
}
|
||
},
|
||
"onboardingSeedSavedConfirm": "Potvrzuji, že jsem si frázi bezpečně uložil/a",
|
||
"@onboardingSeedSavedConfirm": {
|
||
"description": "Titulek CheckboxListTile — potvrzení uložení seed fráze; gender-neutrální tvar uložil/a, řešit i v překladech"
|
||
},
|
||
"onboardingGenerateKeys": "Vygenerovat klíče",
|
||
"@onboardingGenerateKeys": {
|
||
"description": "Tlačítko generování identity (disabled dokud není jméno); text tlačítka referencován i v komentáři ř. 265"
|
||
},
|
||
"verifyMismatchTitle": "Čísla NESOUHLASÍ",
|
||
"@verifyMismatchTitle": {
|
||
"description": "Titulek AlertDialogu po skenu QR, když čísla nesouhlasí (varování, CAPS záměrně)"
|
||
},
|
||
"verifyMatchBody": "Klíče si odpovídají. {contactName} je ověřený kontakt.",
|
||
"@verifyMatchBody": {
|
||
"description": "Obsah dialogu při shodě bezpečnostních čísel",
|
||
"placeholders": {
|
||
"contactName": {
|
||
"type": "String"
|
||
}
|
||
}
|
||
},
|
||
"verifyMismatchBody": "Bezpečnostní čísla nesedí. Někdo může odposlouchávat spojení (MITM), nebo skenuješ kód jiného kontaktu. NEposílej citlivé zprávy a ověřte se znovu jiným kanálem.",
|
||
"@verifyMismatchBody": {
|
||
"description": "Obsah dialogu při neshodě — varování před MITM; adjacentní literály ř. 91–93 sloučit do jednoho klíče"
|
||
},
|
||
"commonUnderstood": "Rozumím",
|
||
"@commonUnderstood": {
|
||
"description": "Potvrzovací tlačítko dialogu s výsledkem ověření (shoda i neshoda)"
|
||
},
|
||
"verifyManualConfirmTitle": "Označit jako ověřené?",
|
||
"@verifyManualConfirmTitle": {
|
||
"description": "Titulek potvrzovacího dialogu při ručním označení kontaktu jako ověřeného"
|
||
},
|
||
"verifyManualConfirmBody": "Potvrď jen v případě, že sis číslice porovnal/a s protistranou jiným důvěryhodným kanálem (osobně, hovorem…) a souhlasí.",
|
||
"@verifyManualConfirmBody": {
|
||
"description": "Obsah potvrzovacího dialogu ručního ověření; adjacentní literály ř. 111–112 sloučit; gender tvar porovnal/a"
|
||
},
|
||
"verifyManualConfirmAction": "Souhlasí, ověřit",
|
||
"@verifyManualConfirmAction": {
|
||
"description": "Potvrzovací FilledButton dialogu ručního ověření"
|
||
},
|
||
"verifyTitle": "Ověření kontaktu",
|
||
"@verifyTitle": {
|
||
"description": "AppBar titulek obrazovky ověření kontaktu (loading fallback stav) | AppBar titulek hlavního stavu obrazovky — stejný klíč jako ř. 140"
|
||
},
|
||
"verifyContactVerifiedBanner": "Kontakt je ověřený",
|
||
"@verifyContactVerifiedBanner": {
|
||
"description": "Zelený banner nahoře na obrazovce, když je kontakt už ověřený"
|
||
},
|
||
"verifyIntro": "Porovnej toto číslo s {contactName}. Když souhlasí, vaše šifrování nikdo neodposlouchává. Nejrychlejší je vzájemně si naskenovat QR kódy.",
|
||
"@verifyIntro": {
|
||
"description": "Úvodní vysvětlující text obrazovky nad QR kódem; adjacentní literály ř. 177–179 sloučit",
|
||
"placeholders": {
|
||
"contactName": {
|
||
"type": "String"
|
||
}
|
||
}
|
||
},
|
||
"verifyScanButton": "Naskenovat kód protistrany",
|
||
"@verifyScanButton": {
|
||
"description": "FilledButton — otevře skener QR kódu protistrany"
|
||
},
|
||
"verifyManualButton": "Číslice souhlasí — označit ručně",
|
||
"@verifyManualButton": {
|
||
"description": "OutlinedButton — otevře dialog ručního potvrzení shody číslic"
|
||
},
|
||
"verifyUnverifyButton": "Zrušit ověření",
|
||
"@verifyUnverifyButton": {
|
||
"description": "TextButton viditelný jen u ověřeného kontaktu — zruší stav ověření"
|
||
},
|
||
"verifyScanScreenTitle": "Naskenuj ověřovací QR",
|
||
"@verifyScanScreenTitle": {
|
||
"description": "AppBar titulek minimalistické skener obrazovky (_VerifyScanScreen)"
|
||
},
|
||
"reportTitle": "Nahlásit",
|
||
"@reportTitle": {
|
||
"description": "Titulek AppBaru obrazovky nahlášení zneužití"
|
||
},
|
||
"reportSubmitted": "Hlášení odesláno",
|
||
"@reportSubmitted": {
|
||
"description": "Nadpis úspěšné obrazovky po odeslání hlášení"
|
||
},
|
||
"reportSubmittedChildSafety": "Hlášení řešíme přednostně. Pokud je dítě v bezprostředním ohrožení, zavolej 158 nebo linku 116 111.",
|
||
"@reportSubmittedChildSafety": {
|
||
"description": "Text pod nadpisem úspěchu, jen pro kategorii ohrožení dítěte; obsahuje česká čísla tísňových linek (158, 116 111) — překladatel musí zvážit lokální ekvivalenty"
|
||
},
|
||
"reportSubmittedThanks": "Díky. Podíváme se na to co nejdřív.",
|
||
"@reportSubmittedThanks": {
|
||
"description": "Text pod nadpisem úspěchu pro běžné kategorie hlášení"
|
||
},
|
||
"commonDone": "Hotovo",
|
||
"@commonDone": {
|
||
"description": "Tlačítko zavírající úspěšnou obrazovku hlášení; obecný text, pravděpodobně sdílený s dalšími obrazovkami"
|
||
},
|
||
"reportPanelE2eNotice": "Zprávy jsou end-to-end šifrované, takže jejich obsah nevidíme ani teď. Popiš prosím vlastními slovy, co se stalo. Nevkládej sem obsah zpráv ani odkazy na něj — nesmíme ho držet a k posouzení ho nepotřebujeme.",
|
||
"@reportPanelE2eNotice": {
|
||
"description": "Informační panel nahoře ve formuláři hlášení — vysvětluje, že provozovatel obsah zpráv nevidí; adjacentní literály ř. 133-136"
|
||
},
|
||
"reportPanelCsamWarning": "Materiál zobrazující zneužívání dítěte nám NEPOSÍLEJ. Jeho držení je trestné i pro nás a pro nahlášení ho nepotřebujeme. Materiál patří přímo na STOPonline.cz nebo Policii ČR (158). Nám napiš jen to, co se stalo — zablokujeme účet a předáme věc dál.",
|
||
"@reportPanelCsamWarning": {
|
||
"description": "Varovný panel zobrazený jen při kategorii ohrožení dítěte; odkazuje na české instituce (STOPonline.cz, Policie ČR 158) — překladatel musí zvážit lokalizaci hotline; adjacentní literály ř. 143-147"
|
||
},
|
||
"reportPanelIpNotice": "Hlášení nejde přes relay, ale na náš webový server. Ten se při odeslání dozví tvou IP adresu.",
|
||
"@reportPanelIpNotice": {
|
||
"description": "Panel upozorňující, že odeslání hlášení odhalí IP adresu (jde mimo relay); adjacentní literály ř. 154-155"
|
||
},
|
||
"reportCategoryHeading": "Čeho se hlášení týká",
|
||
"@reportCategoryHeading": {
|
||
"description": "Nadpis sekce s výběrem kategorie hlášení (radio volby)"
|
||
},
|
||
"reportDescriptionHeading": "Co se stalo",
|
||
"@reportDescriptionHeading": {
|
||
"description": "Nadpis sekce nad textovým polem popisu incidentu"
|
||
},
|
||
"reportAttachContactId": "Přiložit ID nahlášeného kontaktu",
|
||
"@reportAttachContactId": {
|
||
"description": "Titulek přepínače SwitchListTile — varianta bez jména kontaktu (reportedName == null)"
|
||
},
|
||
"reportAttachContactIdNamed": "Přiložit ID kontaktu {contactName}",
|
||
"@reportAttachContactIdNamed": {
|
||
"description": "Titulek přepínače SwitchListTile — varianta se jménem nahlášeného kontaktu; společně s reportAttachContactId tvoří pár, v ARB dva samostatné klíče",
|
||
"placeholders": {
|
||
"contactName": {
|
||
"type": "String"
|
||
}
|
||
}
|
||
},
|
||
"reportReplyToHeading": "Kontakt na tebe (nepovinné)",
|
||
"@reportReplyToHeading": {
|
||
"description": "Nadpis sekce nad nepovinným polem pro kontaktní e-mail oznamovatele"
|
||
},
|
||
"reportReplyToHint": "e-mail, kdybychom se potřebovali doptat",
|
||
"@reportReplyToHint": {
|
||
"description": "hintText TextFieldu pro kontaktní e-mail oznamovatele"
|
||
},
|
||
"reportSubmitButton": "Odeslat hlášení",
|
||
"@reportSubmitButton": {
|
||
"description": "Hlavní FilledButton odesílající formulář hlášení"
|
||
},
|
||
"contactsTitle": "Kontakty",
|
||
"@contactsTitle": {
|
||
"description": "Titulek AppBaru obrazovky kontaktů"
|
||
},
|
||
"contactsAddContact": "Přidat kontakt",
|
||
"@contactsAddContact": {
|
||
"description": "Tooltip ikony person_add v AppBaru; STEJNÝ text je i titulek dialogu na ř. 210 — použít jeden klíč | Titulek AlertDialogu pro ruční přidání kontaktu — stejný klíč jako tooltip na ř. 49"
|
||
},
|
||
"contactsSearchHint": "Hledat kontakt...",
|
||
"@contactsSearchHint": {
|
||
"description": "hintText vyhledávacího TextFieldu nad seznamem kontaktů"
|
||
},
|
||
"contactsEmpty": "Zatím žádné kontakty",
|
||
"@contactsEmpty": {
|
||
"description": "Prázdný stav seznamu, když uživatel nemá žádné kontakty (a nehledá)"
|
||
},
|
||
"contactsNoResults": "Žádné výsledky",
|
||
"@contactsNoResults": {
|
||
"description": "Prázdný stav při aktivním vyhledávání bez shody"
|
||
},
|
||
"contactsShareCardTitle": "Sdílej svůj Šepot ID",
|
||
"@contactsShareCardTitle": {
|
||
"description": "Titulek karty nad seznamem kontaktů — proklik na sdílení vlastního QR. Pozor: 'Šepot' je název aplikace, v překladech zůstává 'Šepot ID'"
|
||
},
|
||
"contactsShareCardSubtitle": "Ukaž QR kód nebo pošli odkaz",
|
||
"@contactsShareCardSubtitle": {
|
||
"description": "Podtitulek karty sdílení vlastního Šepot ID"
|
||
},
|
||
"contactsAddDialogPrompt": "Vlož sdílený řetězec (share string) kontaktu:",
|
||
"@contactsAddDialogPrompt": {
|
||
"description": "Instrukční text v těle dialogu Přidat kontakt"
|
||
},
|
||
"contactsShareStringHint": "Vložit share string...",
|
||
"@contactsShareStringHint": {
|
||
"description": "hintText TextFieldu v dialogu Přidat kontakt (vkládá se share string)"
|
||
},
|
||
"contactsInvalidShareString": "Neplatný share string",
|
||
"@contactsInvalidShareString": {
|
||
"description": "SnackBar, když se vložený text nepodaří parsovat jako PublicIdentity share string"
|
||
},
|
||
"contactsAdded": "Kontakt {name} přidán",
|
||
"@contactsAdded": {
|
||
"description": "SnackBar po úspěšném přidání kontaktu. Pozor pro překladatele: 'přidán' je mužský rod od slova kontakt (ne gender osoby) — v en/de/ru/it bez problému",
|
||
"placeholders": {
|
||
"name": {
|
||
"type": "String"
|
||
}
|
||
}
|
||
},
|
||
"verifyContactSubtitle": "Porovnání bezpečnostního čísla",
|
||
"@verifyContactSubtitle": {
|
||
"description": "Podtitulek položky Ověřit kontakt v bottom sheetu"
|
||
},
|
||
"contactsDeleteContact": "Smazat kontakt",
|
||
"@contactsDeleteContact": {
|
||
"description": "Destruktivní položka v bottom sheetu (long-press na kontakt) — smaže kontakt bez potvrzení"
|
||
},
|
||
"pinConfirmTitle": "Potvrď PIN",
|
||
"@pinConfirmTitle": {
|
||
"description": "Titulek obrazovky nastavení PINu ve fázi potvrzení (druhé zadání PINu při onboardingu)"
|
||
},
|
||
"pinSetupTitle": "Nastav si PIN",
|
||
"@pinSetupTitle": {
|
||
"description": "Titulek obrazovky nastavení PINu při prvním zadání (onboarding)"
|
||
},
|
||
"pinConfirmSubtitle": "Zadej PIN znovu pro potvrzení",
|
||
"@pinConfirmSubtitle": {
|
||
"description": "Podtitulek pod titulkem ve fázi potvrzení PINu"
|
||
},
|
||
"pinSetupSubtitle": "6-místný PIN pro odemknutí aplikace",
|
||
"@pinSetupSubtitle": {
|
||
"description": "Podtitulek při prvním zadání PINu — vysvětluje účel (odemknutí aplikace, 6 číslic)"
|
||
},
|
||
"pinSetupFailed": "Nastavení PINu selhalo. Zkus to znovu.",
|
||
"@pinSetupFailed": {
|
||
"description": "Červená chybová hláška pod PIN tečkami, když enablePin() (Argon2id wrap DEK) vyhodí výjimku"
|
||
},
|
||
"pinMismatchRetry": "PINy se neshodují. Zkus to znovu.",
|
||
"@pinMismatchRetry": {
|
||
"description": "Červená chybová hláška pod PIN tečkami, když se potvrzovací PIN liší od prvního zadání (onboarding). Pozor: change_pin_screen má kratší variantu 'PINy se neshodují.' — jiný klíč."
|
||
},
|
||
"pinChangeCurrentTitle": "Zadej současný PIN",
|
||
"@pinChangeCurrentTitle": {
|
||
"description": "Titulek kroku 1 změny PINu (ověření starého PINu) — z konstantní mapy _titulky, record (titulek, popis)"
|
||
},
|
||
"pinChangeCurrentSubtitle": "Ověříme ho odemčením klíče",
|
||
"@pinChangeCurrentSubtitle": {
|
||
"description": "Podtitulek kroku 1 změny PINu — vysvětluje, že se PIN ověřuje unwrapem DEK, ne hashem"
|
||
},
|
||
"pinChangeNewTitle": "Zadej nový PIN",
|
||
"@pinChangeNewTitle": {
|
||
"description": "Titulek kroku 2 změny PINu (zadání nového PINu)"
|
||
},
|
||
"pinChangeNewSubtitle": "6 číslic",
|
||
"@pinChangeNewSubtitle": {
|
||
"description": "Podtitulek kroku 2 změny PINu — délka PINu. Pozn.: obsahuje číslovku 6 napevno v textu (není interpolovaná), česky '6 číslic' — ICU plural není nutný, číslo je fixní."
|
||
},
|
||
"pinChangeConfirmTitle": "Potvrď nový PIN",
|
||
"@pinChangeConfirmTitle": {
|
||
"description": "Titulek kroku 3 změny PINu (potvrzení nového PINu)"
|
||
},
|
||
"pinChangeConfirmSubtitle": "Zadej ho ještě jednou",
|
||
"@pinChangeConfirmSubtitle": {
|
||
"description": "Podtitulek kroku 3 změny PINu"
|
||
},
|
||
"pinWrong": "Špatný PIN.",
|
||
"@pinWrong": {
|
||
"description": "Červená chybová hláška, když verifyPin() (krok 1) selže — starý PIN neodemkl klíč. Stejný text i na řádku 119 (WrongPinException při changePin) — jeden klíč. | Duplicitní výskyt — WrongPinException při changePin(); stejný klíč jako řádek 76."
|
||
},
|
||
"pinChangeMustDiffer": "Nový PIN se musí lišit od současného.",
|
||
"@pinChangeMustDiffer": {
|
||
"description": "Červená chybová hláška v kroku 2, když nový PIN == starý PIN"
|
||
},
|
||
"pinMismatch": "PINy se neshodují.",
|
||
"@pinMismatch": {
|
||
"description": "Červená chybová hláška v kroku 3, když potvrzení != nový PIN. Pozor: pin_setup_screen má delší variantu 'PINy se neshodují. Zkus to znovu.' (pinMismatchRetry) — jiný klíč."
|
||
},
|
||
"pinDecoyConflict": "Tenhle PIN už patří nátlakovému režimu. Zvol jiný.",
|
||
"@pinDecoyConflict": {
|
||
"description": "Červená chybová hláška při DecoyPinConflict — nový PIN koliduje s decoy/nátlakovým PINem. Citlivá formulace (bezpečnostní funkce), překlad musí zachovat význam 'duress/decoy mode'."
|
||
},
|
||
"pinChangeFailed": "Změna PINu selhala. Zkus to znovu.",
|
||
"@pinChangeFailed": {
|
||
"description": "Červená chybová hláška při obecné výjimce z changePin()"
|
||
},
|
||
"pinChanged": "PIN změněn",
|
||
"@pinChanged": {
|
||
"description": "SnackBar po úspěšné změně PINu, těsně před context.pop()"
|
||
},
|
||
"errorCryptoInitTitle": "Šifrovací jádro se nespustilo",
|
||
"@errorCryptoInitTitle": {
|
||
"description": "Titulek celoobrazovkové chybové obrazovky (_ChybaApp), když selže init libsignal při startu"
|
||
},
|
||
"errorStartupTitle": "Šepot se nespustil",
|
||
"@errorStartupTitle": {
|
||
"description": "Titulek celoobrazovkové chybové obrazovky (_ChybaApp) při neodchycené chybě startu"
|
||
},
|
||
"errorScreenNotRenderedTitle": "Tahle obrazovka se nevykreslila",
|
||
"@errorScreenNotRenderedTitle": {
|
||
"description": "Nadpis náhradní ErrorWidget plochy (_ChybovaPlocha) v release buildu, když build() nějakého widgetu spadne"
|
||
},
|
||
"errorStartupBody": "Něco se pokazilo hned při startu. Pošli mi prosím tenhle text (podrž prst a zkopíruj) — pomůže mi to najít chybu.",
|
||
"@errorStartupBody": {
|
||
"description": "Vysvětlující text pod titulkem chybové obrazovky _ChybaApp; žádá uživatele o zkopírování detailu chyby. POZOR: v kódu jsou to DVA adjacentní literály (ř. 209–210: '…tenhle text ' + '(podrž prst…') — sloučit do jednoho klíče."
|
||
},
|
||
"errorContactFooter": "sepot.cz · napiš mi na kontakt",
|
||
"@errorContactFooter": {
|
||
"description": "Patička chybové obrazovky _ChybaApp s kontaktem; 'sepot.cz' je doména — v překladech ponechat, přeložit jen výzvu"
|
||
},
|
||
"pinUnlockTitle": "Odemkni Šepot",
|
||
"@pinUnlockTitle": {
|
||
"description": "localizedReason systémové biometrické výzvy (local_auth) — zobrazuje OS v nativním dialogu otisku/Face. Stejný text jako nadpis obrazovky (ř. 63) → stejný klíč. | Nadpis odemykací obrazovky s PINem"
|
||
},
|
||
"pinEnterPin": "Zadej PIN",
|
||
"@pinEnterPin": {
|
||
"description": "Podtitulek odemykací obrazovky pod nadpisem"
|
||
},
|
||
"pinUnlockWithBiometrics": "Odemknout biometrií",
|
||
"@pinUnlockWithBiometrics": {
|
||
"description": "Label TextButton pod numpadem — ruční znovuvyvolání biometrické výzvy (viditelné jen se zapnutou biometrií)"
|
||
},
|
||
"pinWrong2": "Špatný PIN",
|
||
"@pinWrong2": {
|
||
"description": "Červená chybová hláška na odemykací obrazovce po zadání špatného PINu (WrongPinException)"
|
||
},
|
||
"pinUnlockError": "Chyba odemčení",
|
||
"@pinUnlockError": {
|
||
"description": "Červená chybová hláška na odemykací obrazovce při jiné chybě odemčení než špatný PIN"
|
||
},
|
||
"pinLockedFor": "Příliš mnoho pokusů. Zkus to za {seconds} s.",
|
||
"@pinLockedFor": {
|
||
"description": "Hláška na odemykací obrazovce po sérii špatných PINů; {seconds} = počet sekund do dalšího pokusu",
|
||
"placeholders": {
|
||
"seconds": {
|
||
"type": "int"
|
||
}
|
||
}
|
||
},
|
||
"pushTitle": "Push notifikace",
|
||
"@pushTitle": {
|
||
"description": "Titulek SimpleDialog výběru režimu pushů. Stejný text jako title ListTile v nastavení (ř. 184) → stejný klíč. | Title ListTile v nastavení — stejný text a klíč jako titulek dialogu (ř. 44)"
|
||
},
|
||
"pushModeOffDesc": "Zprávy se stáhnou až po otevření appky.",
|
||
"@pushModeOffDesc": {
|
||
"description": "Popisek volby 'Vypnuto' v dialogu výběru režimu pushů"
|
||
},
|
||
"pushModeUp": "UnifiedPush (bez Googlu)",
|
||
"@pushModeUp": {
|
||
"description": "Label volby 'up' v dialogu výběru režimu pushů ('UnifiedPush' je název technologie — nepřekládat, přeložit jen '(bez Googlu)')"
|
||
},
|
||
"pushModeUpDesc": "Degooglované — potřebuje aplikaci ntfy (F-Droid/Play).",
|
||
"@pushModeUpDesc": {
|
||
"description": "Popisek volby UnifiedPush v dialogu výběru režimu pushů ('ntfy', 'F-Droid', 'Play' jsou názvy — nepřekládat)"
|
||
},
|
||
"pushModeFcm": "Google (FCM, výchozí)",
|
||
"@pushModeFcm": {
|
||
"description": "Label volby 'fcm' v dialogu výběru režimu pushů (vlastní název — pravděpodobně shodný ve všech jazycích, ale klíč mít)"
|
||
},
|
||
"pushModeFcmDesc": "Spolehlivé bez další aplikace. Push token zařízení jde Googlu; obsah zpráv nikdy.",
|
||
"@pushModeFcmDesc": {
|
||
"description": "Popisek volby Google (FCM) v dialogu výběru režimu pushů. POZOR: v kódu DVA adjacentní literály (ř. 51–52: '…jde ' + 'Googlu; obsah…') — sloučit do jednoho klíče."
|
||
},
|
||
"pushSetupFailed": "Nastavení pushů selhalo: {error}",
|
||
"@pushSetupFailed": {
|
||
"description": "SnackBar v nastavení, když přepnutí režimu pushů skončí výjimkou",
|
||
"placeholders": {
|
||
"error": {
|
||
"type": "String"
|
||
}
|
||
}
|
||
},
|
||
"pushHintOff": "Zprávy ti přijdou, až Šepot otevřeš — budíčky nejsou nastavené.",
|
||
"@pushHintOff": {
|
||
"description": "Proužek nad seznamem chatů, když push není vůbec zapnutý."
|
||
},
|
||
"pushHintFailed": "Budíčky nefungují, zprávy uvidíš až po otevření Šepotu.",
|
||
"@pushHintFailed": {
|
||
"description": "Proužek nad seznamem chatů, když distributor registraci odmítl."
|
||
},
|
||
"pushRegistrationFailed": "Budíčky nechodí — distributor registraci odmítl. Zkus push vypnout a znovu zapnout.",
|
||
"@pushRegistrationFailed": {
|
||
"description": "Podtitulek dlaždice Push v Nastavení, když distributor odmítl registraci. Bez téhle hlášky uživatel vidí push jako zapnutý, ale zprávy mu chodí až po otevření appky."
|
||
},
|
||
"pushNoDistributorTitle": "Žádný distributor",
|
||
"@pushNoDistributorTitle": {
|
||
"description": "Titulek AlertDialog, když v systému není nainstalovaný žádný UnifiedPush distributor"
|
||
},
|
||
"pushNoDistributorBody": "Pro degooglované notifikace nainstaluj UnifiedPush distributor, např. ntfy (F-Droid nebo Play). Pak push zapni znovu.",
|
||
"@pushNoDistributorBody": {
|
||
"description": "Obsah AlertDialog 'Žádný distributor'. POZOR: v kódu DVA adjacentní literály (ř. 131–132) — sloučit do jednoho klíče. Názvy ntfy/UnifiedPush/F-Droid/Play nepřekládat."
|
||
},
|
||
"commonOk": "OK",
|
||
"@commonOk": {
|
||
"description": "Potvrzovací tlačítko AlertDialog 'Žádný distributor' — obecné, sdílet napříč appkou"
|
||
},
|
||
"pushPickDistributorTitle": "Vyber distributora",
|
||
"@pushPickDistributorTitle": {
|
||
"description": "Titulek SimpleDialog výběru UnifiedPush distributora (položky jsou názvy balíčků z systému — nelokalizují se)"
|
||
},
|
||
"pushSubtitleUnifiedPush": "UnifiedPush · {distributor}",
|
||
"@pushSubtitleUnifiedPush": {
|
||
"description": "Subtitle ListTile v nastavení, když je aktivní režim UnifiedPush. SKLÁDANÝ TEXT: interpolace s vnořeným fallback literálem — placeholder distributor, fallback řešit buď předvyhodnocením (distributor ?? l10n.pushNoDistributorFallback) nebo ICU select. Nutné sloučení do jednoho klíče + samostatný klíč pro fallback.",
|
||
"placeholders": {
|
||
"distributor": {
|
||
"type": "String"
|
||
}
|
||
}
|
||
},
|
||
"pushNoDistributorFallback": "bez distributora",
|
||
"@pushNoDistributorFallback": {
|
||
"description": "Vnořený fallback literál uvnitř subtitle 'UnifiedPush · …', když není vybraný žádný distributor — vyhodnotit před dosazením do pushSubtitleUnifiedPush"
|
||
},
|
||
"pushSubtitleFcm": "Google (FCM)",
|
||
"@pushSubtitleFcm": {
|
||
"description": "Subtitle ListTile v nastavení, když je aktivní režim FCM"
|
||
},
|
||
"restoreErrorNameRequired": "Zadej zobrazované jméno.",
|
||
"@restoreErrorNameRequired": {
|
||
"description": "Validační chyba pod formulářem obnovy účtu, když je jméno prázdné"
|
||
},
|
||
"restoreErrorWordCount": "{wordCount, plural, one{Fráze má 1 slovo, potřebuji {requiredWords}.} few{Fráze má {wordCount} slova, potřebuji {requiredWords}.} many{Fráze má {wordCount} slova, potřebuji {requiredWords}.} other{Fráze má {wordCount} slov, potřebuji {requiredWords}.}}",
|
||
"@restoreErrorWordCount": {
|
||
"description": "Chyba při obnově účtu: špatný počet slov v zadané frázi.",
|
||
"placeholders": {
|
||
"wordCount": {
|
||
"type": "int"
|
||
},
|
||
"requiredWords": {
|
||
"type": "int"
|
||
}
|
||
}
|
||
},
|
||
"restoreErrorInvalidPhrase": "Fráze není platná — zkontroluj slova i jejich pořadí.",
|
||
"@restoreErrorInvalidPhrase": {
|
||
"description": "Validační chyba obnovy účtu — mnemonic checksum nesedí"
|
||
},
|
||
"restoreErrorFailed": "Obnova selhala: {error}",
|
||
"@restoreErrorFailed": {
|
||
"description": "Chyba zobrazená pod formulářem, když recoverIdentity vyhodí výjimku",
|
||
"placeholders": {
|
||
"error": {
|
||
"type": "String"
|
||
}
|
||
}
|
||
},
|
||
"restoreTitle": "Obnovit účet",
|
||
"@restoreTitle": {
|
||
"description": "Titulek AppBaru obrazovky obnovy účtu (stejný text jako tlačítko na ř. 193 — sdílet jeden klíč) | Text hlavního tlačítka obnovy (identický s AppBar titulkem na ř. 87 — jeden klíč)"
|
||
},
|
||
"restoreHeading": "Zadej svoji zálohovací frázi",
|
||
"@restoreHeading": {
|
||
"description": "Hlavní nadpis obrazovky obnovy účtu"
|
||
},
|
||
"restoreIntro": "{wordCount} slov, ze zálohy vytvořené při zakládání účtu. Obnoví tvoji identitu (stejný SEP kód, kontakty tě dál poznají).",
|
||
"@restoreIntro": {
|
||
"description": "Podnadpis pod nadpisem obrazovky obnovy. Adjacentní literály přes 3 řádky (104-106). Pozor na mužský rod 'sis uložil' — přeformulovat neutrálně.",
|
||
"placeholders": {
|
||
"wordCount": {
|
||
"type": "int"
|
||
}
|
||
}
|
||
},
|
||
"restoreHistoryWarning": "Historie zpráv se neobnoví — je uložená jen na původním zařízení.",
|
||
"@restoreHistoryWarning": {
|
||
"description": "Žlutý varovný box na obrazovce obnovy účtu. Adjacentní literály přes 2 řádky (130-131)."
|
||
},
|
||
"restorePhraseHint": "slovo1 slovo2 slovo3 …",
|
||
"@restorePhraseHint": {
|
||
"description": "hintText pole zálohovací fráze — ukázkový formát zadání"
|
||
},
|
||
"restoreWordCountHelper": "{wordCount} / {requiredWords} slov",
|
||
"@restoreWordCountHelper": {
|
||
"description": "helperText pod polem fráze — průběžné počítadlo zadaných slov (mění barvu při dosažení 24)",
|
||
"placeholders": {
|
||
"wordCount": {
|
||
"type": "int"
|
||
},
|
||
"requiredWords": {
|
||
"type": "int"
|
||
}
|
||
}
|
||
},
|
||
"chatListArchivedCount": "Archivované ({count})",
|
||
"@chatListArchivedCount": {
|
||
"description": "První řádek seznamu konverzací — odkaz na archiv s počtem archivovaných konverzací",
|
||
"placeholders": {
|
||
"count": {
|
||
"type": "int"
|
||
}
|
||
}
|
||
},
|
||
"chatListEmptyTitle": "Zatím žádné konverzace",
|
||
"@chatListEmptyTitle": {
|
||
"description": "Nadpis empty state, když uživatel nemá žádné konverzace"
|
||
},
|
||
"chatListEmptySubtitle": "Přidej kontakt a začni šeptat!",
|
||
"@chatListEmptySubtitle": {
|
||
"description": "Podnadpis empty state — 'šeptat' je slovní hříčka s názvem appky, v překladu volit ekvivalent (whisper/flüstern…)"
|
||
},
|
||
"chatListUnmute": "Zrušit ztlumení",
|
||
"@chatListUnmute": {
|
||
"description": "Položka bottom sheetu akcí konverzace (long-press), zobrazí se když je konverzace ztlumená. Ternár na jednom řádku se 'Ztlumit'."
|
||
},
|
||
"chatListMute": "Ztlumit",
|
||
"@chatListMute": {
|
||
"description": "Položka bottom sheetu akcí konverzace (long-press), zobrazí se když konverzace ztlumená není"
|
||
},
|
||
"chatListArchive": "Archivovat",
|
||
"@chatListArchive": {
|
||
"description": "Položka bottom sheetu akcí konverzace (long-press) — přesune konverzaci do archivu; kandidát na sdílení s archive feature (archiveAction)"
|
||
},
|
||
"qrShareTitle": "Můj Šepot ID",
|
||
"@qrShareTitle": {
|
||
"description": "AppBar titulek obrazovky sdílení vlastního QR/Šepot ID"
|
||
},
|
||
"qrShareConnectingTitle": "Připojuji k relayi…",
|
||
"@qrShareConnectingTitle": {
|
||
"description": "Titulek na QR obrazovce, když vlastní registrace na relay ještě nedoběhla — routing (aid+da) není hotový, QR by byl neúplný."
|
||
},
|
||
"qrShareConnectingBody": "Až se Šepot poprvé připojí, objeví se tvůj QR kód a odkaz. Chvilku strpení — stačí pár sekund.",
|
||
"@qrShareConnectingBody": {
|
||
"description": "Vysvětlení pod titulkem qrShareConnectingTitle. 'Šepot' je značka, nepřekládat."
|
||
},
|
||
"qrIdentityNotFound": "Identita nebyla nalezena",
|
||
"@qrIdentityNotFound": {
|
||
"description": "Text uprostřed obrazovky, když identityProvider vrátí null (nemělo by běžně nastat)"
|
||
},
|
||
"commonCopiedToClipboard": "Zkopírováno do schránky",
|
||
"@commonCopiedToClipboard": {
|
||
"description": "SnackBar po stisku tlačítka Kopírovat (zkopírování share stringu) — pravděpodobně sdílené i jinde v appce"
|
||
},
|
||
"qrShareInviteMessage": "Přidej mě na Šepotu!\n\n{shareString}",
|
||
"@qrShareInviteMessage": {
|
||
"description": "Text sdílený přes share_plus (Share.share) — pozvánka s identitním řetězcem; obsahuje dva \\n",
|
||
"placeholders": {
|
||
"shareString": {
|
||
"type": "String"
|
||
}
|
||
}
|
||
},
|
||
"commonShare": "Sdílet",
|
||
"@commonShare": {
|
||
"description": "Popisek ElevatedButton.icon, který otevře systémový share sheet"
|
||
},
|
||
"qrShareInfo": "Kontakt naskenuje tvůj QR kód nebo vloží sdílený řetězec do aplikace.",
|
||
"@qrShareInfo": {
|
||
"description": "Informační box (ikona info) pod tlačítky — vysvětluje, jak protistrana kontakt přidá"
|
||
},
|
||
"reportCategoryChildSafety": "Ohrožení dítěte",
|
||
"@reportCategoryChildSafety": {
|
||
"description": "Label kategorie nahlášení — zobrazuje report screen ve výběru kategorií (ReportCategory.label)"
|
||
},
|
||
"reportCategoryChildSafetyHint": "Popiš situaci vlastními slovy. Nevkládej obsah zpráv ani odkazy na materiál.",
|
||
"@reportCategoryChildSafetyHint": {
|
||
"description": "Hint kategorie Ohrožení dítěte — zobrazuje report screen; právně citlivý text (CSAM — odrazuje od vkládání obsahu, viz komentář § 192), překlad musí zachovat význam"
|
||
},
|
||
"reportCategoryHarassment": "Obtěžování nebo výhrůžky",
|
||
"@reportCategoryHarassment": {
|
||
"description": "Label kategorie nahlášení — zobrazuje report screen"
|
||
},
|
||
"reportCategoryHarassmentHint": "Někdo tě zastrašuje, vyhrožuje nebo obtěžuje.",
|
||
"@reportCategoryHarassmentHint": {
|
||
"description": "Hint kategorie Obtěžování — zobrazuje report screen"
|
||
},
|
||
"reportCategorySpam": "Spam",
|
||
"@reportCategorySpam": {
|
||
"description": "Label kategorie nahlášení — zobrazuje report screen"
|
||
},
|
||
"reportCategorySpamHint": "Nevyžádané zprávy, hromadné rozesílání.",
|
||
"@reportCategorySpamHint": {
|
||
"description": "Hint kategorie Spam — zobrazuje report screen"
|
||
},
|
||
"reportCategoryFraud": "Podvod",
|
||
"@reportCategoryFraud": {
|
||
"description": "Label kategorie nahlášení — zobrazuje report screen"
|
||
},
|
||
"reportCategoryFraudHint": "Pokus vylákat peníze, klíče nebo osobní údaje.",
|
||
"@reportCategoryFraudHint": {
|
||
"description": "Hint kategorie Podvod — zobrazuje report screen"
|
||
},
|
||
"reportCategoryOther": "Jiné",
|
||
"@reportCategoryOther": {
|
||
"description": "Label kategorie nahlášení — zobrazuje report screen"
|
||
},
|
||
"reportCategoryOtherHint": "Něco jiného, co bychom měli vědět.",
|
||
"@reportCategoryOtherHint": {
|
||
"description": "Hint kategorie Jiné — zobrazuje report screen"
|
||
},
|
||
"reportErrorEmptyDescription": "Napiš prosím, co se stalo.",
|
||
"@reportErrorEmptyDescription": {
|
||
"description": "ReportFailure při prázdném popisu — UI (report screen) zobrazuje message jako chybu/SnackBar"
|
||
},
|
||
"reportErrorConnection": "Nepodařilo se spojit se serverem. Zkus to znovu, nebo napiš na {supportEmail}.",
|
||
"@reportErrorConnection": {
|
||
"description": "ReportFailure při síťové chybě/timeoutu odesílání hlášení — zobrazuje report screen",
|
||
"placeholders": {
|
||
"supportEmail": {
|
||
"type": "String"
|
||
}
|
||
}
|
||
},
|
||
"reportErrorRateLimited": "Z tvé sítě přišlo příliš mnoho hlášení. Zkus to za hodinu, nebo napiš na {supportEmail}.",
|
||
"@reportErrorRateLimited": {
|
||
"description": "ReportFailure při HTTP 429 (rate limit) — zobrazuje report screen",
|
||
"placeholders": {
|
||
"supportEmail": {
|
||
"type": "String"
|
||
}
|
||
}
|
||
},
|
||
"reportErrorServer": "Odeslání selhalo (kód {statusCode}). Napiš prosím na {supportEmail}.",
|
||
"@reportErrorServer": {
|
||
"description": "ReportFailure při jiném HTTP kódu — zobrazuje report screen",
|
||
"placeholders": {
|
||
"statusCode": {
|
||
"type": "int"
|
||
},
|
||
"supportEmail": {
|
||
"type": "String"
|
||
}
|
||
}
|
||
},
|
||
"settingsAutoLockNever": "Nikdy",
|
||
"@settingsAutoLockNever": {
|
||
"description": "Volba automatického zámku (0 s) v nastavení — popisek v nabídce AutoLockNotifier.moznosti, zobrazuje settings UI"
|
||
},
|
||
"settingsAutoLock1min": "Po 1 minutě",
|
||
"@settingsAutoLock1min": {
|
||
"description": "Volba automatického zámku (60 s) v nastavení; v EN/DE/RU/IT zvážit jednotný vzor 'After X minutes' — česky je tvar minutě/minutách nepravidelný, proto samostatné klíče místo ICU pluralu s pevnými hodnotami"
|
||
},
|
||
"settingsAutoLock15min": "Po 15 minutách",
|
||
"@settingsAutoLock15min": {
|
||
"description": "Volba automatického zámku (900 s) v nastavení"
|
||
},
|
||
"torToggleFailed": "Přepnutí Toru selhalo: {error}",
|
||
"@torToggleFailed": {
|
||
"description": "SnackBar když selže zapnutí/vypnutí Toru (výjimka z torProvider.set); $e je výjimka",
|
||
"placeholders": {
|
||
"error": {
|
||
"type": "String"
|
||
}
|
||
}
|
||
},
|
||
"torConnectionTitle": "Připojení přes Tor",
|
||
"@torConnectionTitle": {
|
||
"description": "Titulek potvrzovacího AlertDialogu před zapnutím Toru; STEJNÝ text i jako title ListTile na ř. 101 — sdílet jeden klíč"
|
||
},
|
||
"torDialogBody": "Provoz na server půjde přes síť Tor (skryje tvou IP adresu). Vyžaduje nainstalovanou a spuštěnou aplikaci Orbot s aktivním SOCKS proxy na portu 9050.\n\nBez běžícího Orbotu se zprávy neodešlou ani nepřijmou. Spojení bývá pomalejší.",
|
||
"@torDialogBody": {
|
||
"description": "Obsah potvrzovacího dialogu před zapnutím Toru — vysvětluje závislost na Orbotu. POZOR: ve zdrojáku 4 adjacentní literály (ř. 47–51) slepené kompilátorem, mezi 'portu 9050.' a 'Bez běžícího' je \\n\\n; přeložit jako jeden celek. 'Orbot', 'Tor', 'SOCKS' a port 9050 jsou vlastní jména/konstanty — nepřekládat"
|
||
},
|
||
"commonTurnOn": "Zapnout",
|
||
"@commonTurnOn": {
|
||
"description": "Potvrzovací tlačítko dialogu (zapne Tor) — obecné 'Zapnout', kandidát na sdílený klíč pro jiné přepínače"
|
||
},
|
||
"torSubtitleOff": "Přímé šifrované spojení (WSS). Zapni pro skrytí IP přes Tor.",
|
||
"@torSubtitleOff": {
|
||
"description": "Subtitle dlaždice v nastavení když je Tor VYPNUTÝ"
|
||
},
|
||
"torStatusConnected": "Připojeno přes Tor (.onion).",
|
||
"@torStatusConnected": {
|
||
"description": "Subtitle dlaždice když je Tor zapnutý a relay spojení navázané (RelayConnectionState.connected)"
|
||
},
|
||
"torStatusConnecting": "Připojuji přes Tor… (běží Orbot?)",
|
||
"@torStatusConnecting": {
|
||
"description": "Subtitle dlaždice když je Tor zapnutý a spojení se navazuje — nápověda, že možná neběží Orbot; obsahuje výpustku …"
|
||
},
|
||
"torStatusWaiting": "Přes Tor — čekám na Orbot (SOCKS 9050).",
|
||
"@torStatusWaiting": {
|
||
"description": "Subtitle dlaždice když je Tor zapnutý a spojení není navázané ani se nenavazuje (default větev switch) — čeká se na Orbot"
|
||
},
|
||
"biometricsPinRequiredFirst": "Nejdřív nastav PIN — biometrie ho jen doplňuje.",
|
||
"@biometricsPinRequiredFirst": {
|
||
"description": "SnackBar v nastavení při pokusu zapnout biometrii bez nastaveného PINu"
|
||
},
|
||
"biometricsStorageLocked": "Úložiště je zamčené — odemkni appku PINem.",
|
||
"@biometricsStorageLocked": {
|
||
"description": "SnackBar v nastavení při pokusu zapnout biometrii se zamčeným úložištěm; NENÍ to devInternal StateError, je to věta pro uživatele"
|
||
},
|
||
"biometricsNotAvailable": "Zařízení nemá nastavenou biometrii.",
|
||
"@biometricsNotAvailable": {
|
||
"description": "SnackBar když LocalAuthentication.isDeviceSupported() vrátí false"
|
||
},
|
||
"biometricsEnrollPromptReason": "Potvrď zapnutí biometrického odemčení",
|
||
"@biometricsEnrollPromptReason": {
|
||
"description": "localizedReason systémové biometrické výzvy (local_auth) při zapínání biometrie — zobrazí OS v nativním dialogu"
|
||
},
|
||
"biometricsSetupFailed": "Biometrii se nepodařilo nastavit: {error}",
|
||
"@biometricsSetupFailed": {
|
||
"description": "SnackBar v catch bloku při selhání zapnutí/vypnutí biometrie; $e je zachycená výjimka",
|
||
"placeholders": {
|
||
"error": {
|
||
"type": "String"
|
||
}
|
||
}
|
||
},
|
||
"biometricsTileTitle": "Biometrie",
|
||
"@biometricsTileTitle": {
|
||
"description": "Titulek ListTile přepínače biometrie v nastavení"
|
||
},
|
||
"biometricsTileSubtitle": "Odemknutí otiskem prstu / obličejem (PIN zůstává záloha)",
|
||
"@biometricsTileSubtitle": {
|
||
"description": "Podtitulek ListTile přepínače biometrie v nastavení"
|
||
},
|
||
"backupErrorCorruptedFile": "Poškozený soubor zálohy",
|
||
"@backupErrorCorruptedFile": {
|
||
"description": "FormatException z BackupService.import() při příliš krátkém souboru — zobrazí obrazovka obnovy zálohy (SnackBar/dialog)"
|
||
},
|
||
"backupErrorUnknownFormat": "Nerozpoznaný formát zálohy",
|
||
"@backupErrorUnknownFormat": {
|
||
"description": "FormatException z BackupService.import() při chybějícím magic headeru SEPOTBK1 — zobrazí obrazovka obnovy zálohy"
|
||
},
|
||
"backupErrorWrongIdentity": "Zálohu nelze dešifrovat — patří k jiné identitě?",
|
||
"@backupErrorWrongIdentity": {
|
||
"description": "FormatException z BackupService.import() při selhání GCM autentizace (klíč odvozený z jiné identity) — zobrazí obrazovka obnovy zálohy"
|
||
},
|
||
"attachmentSharedImageFilename": "sepot-obrazek.{ext}",
|
||
"@attachmentSharedImageFilename": {
|
||
"description": "Název souboru předaný do XFile.fromData při sdílení obrázku přes systémový share sheet — uživatel jej vidí v cíli sdílení; držet bez diakritiky a mezer (je to filename)",
|
||
"placeholders": {
|
||
"ext": {
|
||
"type": "String"
|
||
}
|
||
}
|
||
},
|
||
"attachmentDecryptFailed": "Přílohu se nepodařilo dešifrovat",
|
||
"@attachmentDecryptFailed": {
|
||
"description": "Chybový text uprostřed fullscreen prohlížeče obrázku, když se přílohu nepodaří načíst/dešifrovat"
|
||
},
|
||
"pushActionOpen": "Otevřít",
|
||
"@pushActionOpen": {
|
||
"description": "Výchozí název akce lokální notifikace na Linuxu (LinuxInitializationSettings.defaultActionName)"
|
||
},
|
||
"pushChannelMessagesName": "Zprávy",
|
||
"@pushChannelMessagesName": {
|
||
"description": "Název Android notifikačního kanálu — uživatel ho vidí v systémovém nastavení notifikací. Duplicitně na řádcích 50 a 73 (showMessageNotification i showWakeNotification) — sloučit do jednoho klíče. Pozor: channel name se překládá podle jazyka při PRVNÍM vytvoření kanálu. | Druhý výskyt názvu kanálu (showWakeNotification) — stejný klíč jako řádek 50."
|
||
},
|
||
"pushChannelMessagesDescription": "Upozornění na nové zprávy (bez obsahu)",
|
||
"@pushChannelMessagesDescription": {
|
||
"description": "Popis Android notifikačního kanálu v systémovém nastavení. Duplicitně na řádcích 51 a 74 — sloučit do jednoho klíče. | Druhý výskyt popisu kanálu (showWakeNotification) — stejný klíč jako řádek 51."
|
||
},
|
||
"pushNewMessageFrom": "Nová zpráva od {senderName}",
|
||
"@pushNewMessageFrom": {
|
||
"description": "Tělo notifikace o přijaté zprávě, když appka běží na pozadí — zobrazuje jen jméno odesílatele, nikdy obsah zprávy.",
|
||
"placeholders": {
|
||
"senderName": {
|
||
"type": "String"
|
||
}
|
||
}
|
||
},
|
||
"pushNewMessages": "Máš nové zprávy",
|
||
"@pushNewMessages": {
|
||
"description": "Tělo generické wake notifikace po push budíčku v killed-state — DB je zamčená, obsah nelze dešifrovat, proto záměrně bez detailů. Neformální tykání ('Máš') — držet tón i v překladech."
|
||
},
|
||
"archiveTitle": "Archivované",
|
||
"@archiveTitle": {
|
||
"description": "Titulek AppBaru obrazovky archivovaných konverzací."
|
||
},
|
||
"archiveEmpty": "Žádné archivované konverzace",
|
||
"@archiveEmpty": {
|
||
"description": "Empty state uprostřed obrazovky, když nejsou žádné archivované konverzace."
|
||
},
|
||
"archiveUnarchive": "Zrušit archivaci",
|
||
"@archiveUnarchive": {
|
||
"description": "Položka v modal bottom sheetu po long-pressu na archivovanou konverzaci — odarchivuje ji."
|
||
},
|
||
"restoreErrorMnemonicWordCount": "Fráze má {count} slov, očekávám {expected}",
|
||
"@restoreErrorMnemonicWordCount": {
|
||
"description": "FormatException z SepotMnemonic.decode() při špatném počtu slov — zobrazuje obnovovací obrazovka (restore flow) jako chybovou hlášku při zadání mnemonic fráze.",
|
||
"placeholders": {
|
||
"count": {
|
||
"type": "int"
|
||
},
|
||
"expected": {
|
||
"type": "int"
|
||
}
|
||
}
|
||
},
|
||
"restoreErrorInvalidMnemonic": "Neplatná fráze: {message}",
|
||
"@restoreErrorInvalidMnemonic": {
|
||
"description": "FormatException z SepotMnemonic.decode() při neznámém slovu / špatném checksumu (ArgumentError větev z bip39) — zobrazuje restore UI. POZOR: ${e.message} je interní anglická hláška knihovny bip39 — zvážit, zda ji vůbec zobrazovat, nebo nahradit generickou lokalizovanou hláškou. | Identický text jako řádek 53, jen StateError větev (bip39 hlásí chyby dvěma typy výjimek). Stejný ARB klíč restoreErrorInvalidMnemonic — sloučit.",
|
||
"placeholders": {
|
||
"message": {
|
||
"type": "String"
|
||
}
|
||
}
|
||
},
|
||
"contactsErrorAlreadyExists": "Kontakt již existuje",
|
||
"@contactsErrorAlreadyExists": {
|
||
"description": "Exception z ContactsNotifier.addContact() při pokusu přidat duplicitní kontakt (stejná identita) — zachytává a zobrazuje UI přidávání kontaktu (typicky SnackBar po skenu QR / zadání Šepot ID)."
|
||
},
|
||
"commonAppTagline": "Soukromý messenger",
|
||
"@commonAppTagline": {
|
||
"description": "Tagline pod názvem aplikace v logu (splash/onboarding obrazovky, showText=true)."
|
||
},
|
||
"commonE2eBadgeCompact": "E2E",
|
||
"@commonE2eBadgeCompact": {
|
||
"description": "Kompaktní varianta badge šifrování (ikona zámku + 'E2E'). Zkratka end-to-end — ve většině jazyků zůstane 'E2E'."
|
||
},
|
||
"commonE2eBadgeFull": "End-to-end šifrováno",
|
||
"@commonE2eBadgeFull": {
|
||
"description": "Plná varianta badge šifrování (ikona zámku + text), zobrazuje se např. v hlavičce chatu / onboardingu."
|
||
},
|
||
"photoPreviewCaptionHint": "Přidat popisek…",
|
||
"@photoPreviewCaptionHint": {
|
||
"description": "hintText pole popisku na obrazovce náhledu fotky před odesláním"
|
||
},
|
||
"photoPreviewDraw": "Kreslit",
|
||
"@photoPreviewDraw": {
|
||
"description": "Tooltip nástroje kreslení prstem na náhledu fotky"
|
||
},
|
||
"photoPreviewAddText": "Přidat text",
|
||
"@photoPreviewAddText": {
|
||
"description": "Tooltip nástroje přidání textu na fotku"
|
||
},
|
||
"photoPreviewRotate": "Otočit",
|
||
"@photoPreviewRotate": {
|
||
"description": "Tooltip otočení fotky o 90°"
|
||
},
|
||
"photoPreviewUndo": "Zpět",
|
||
"@photoPreviewUndo": {
|
||
"description": "Tooltip vrácení posledního tahu kreslení"
|
||
},
|
||
"photoPreviewSend": "Poslat",
|
||
"@photoPreviewSend": {
|
||
"description": "Tooltip tlačítka odeslání fotky z náhledu"
|
||
},
|
||
"photoPreviewTextDialogTitle": "Text na fotce",
|
||
"@photoPreviewTextDialogTitle": {
|
||
"description": "Titulek dialogu pro zadání/úpravu textu na fotce"
|
||
},
|
||
"photoPreviewRemoveText": "Odebrat",
|
||
"@photoPreviewRemoveText": {
|
||
"description": "Tlačítko odebrání textu z fotky v dialogu úpravy"
|
||
},
|
||
"photoPreviewDecodeFailed": "Fotku se nepodařilo načíst",
|
||
"@photoPreviewDecodeFailed": {
|
||
"description": "SnackBar, když se vybraná fotka nedá dekódovat — náhled se zavře bez odeslání"
|
||
},
|
||
"chatActionInfo": "Info o zprávě",
|
||
"@chatActionInfo": {
|
||
"description": "Položka v nabídce zprávy — detail doručení a přečtení."
|
||
},
|
||
"messageInfoSent": "Odesláno",
|
||
"@messageInfoSent": {
|
||
"description": "Info o zprávě: řádek času odeslání."
|
||
},
|
||
"messageInfoDelivered": "Doručeno",
|
||
"@messageInfoDelivered": {
|
||
"description": "Info o zprávě: řádek času doručení."
|
||
},
|
||
"messageInfoRead": "Přečteno",
|
||
"@messageInfoRead": {
|
||
"description": "Info o zprávě: řádek času přečtení."
|
||
},
|
||
"messageInfoPending": "zatím ne",
|
||
"@messageInfoPending": {
|
||
"description": "Info o zprávě: událost ještě nenastala."
|
||
},
|
||
"messageInfoReadReceiptsOff": "Kdy si zprávu přečetli, uvidíš, jen když sám sdílíš potvrzení přečtení (Nastavení).",
|
||
"@messageInfoReadReceiptsOff": {
|
||
"description": "Info o zprávě: vysvětlení, proč chybí čas přečtení."
|
||
},
|
||
"chatStatusReadAt": "Přečteno {time}",
|
||
"@chatStatusReadAt": {
|
||
"description": "Řádek pod poslední odeslanou zprávou — čas přečtení.",
|
||
"placeholders": {
|
||
"time": {
|
||
"type": "String"
|
||
}
|
||
}
|
||
},
|
||
"chatStatusDeliveredAt": "Doručeno {time}",
|
||
"@chatStatusDeliveredAt": {
|
||
"description": "Řádek pod poslední odeslanou zprávou — čas doručení.",
|
||
"placeholders": {
|
||
"time": {
|
||
"type": "String"
|
||
}
|
||
}
|
||
},
|
||
"groupsAddMembers": "Přidat členy",
|
||
"@groupsAddMembers": {
|
||
"description": "Nabídka skupiny a titulek obrazovky pro přidání lidí."
|
||
},
|
||
"groupsAddMembersAction": "Přidat",
|
||
"@groupsAddMembersAction": {
|
||
"description": "Potvrzovací tlačítko v AppBaru při přidávání členů."
|
||
},
|
||
"groupsAddMembersFailed": "Přidání se nepovedlo: {error}",
|
||
"@groupsAddMembersFailed": {
|
||
"description": "Chyba při přidávání členů.",
|
||
"placeholders": {
|
||
"error": {
|
||
"type": "String"
|
||
}
|
||
}
|
||
},
|
||
"groupsNoContactsToAdd": "Všechny tvoje kontakty už ve skupině jsou. Nového člověka nejdřív přidej do kontaktů přes QR kód.",
|
||
"@groupsNoContactsToAdd": {
|
||
"description": "Prázdný výběr — všechny kontakty už ve skupině jsou."
|
||
},
|
||
"navChats": "Chaty",
|
||
"@navChats": {
|
||
"description": "Karta spodní navigace a nadpis seznamu chatů."
|
||
},
|
||
"chatListNewChat": "Nový chat",
|
||
"@chatListNewChat": {
|
||
"description": "Tlačítko pro zahájení nového chatu."
|
||
},
|
||
"chatListSearchHint": "Hledat v chatech a zprávách",
|
||
"@chatListSearchHint": {
|
||
"description": "Placeholder hledání v seznamu chatů."
|
||
},
|
||
"chatFilterAll": "Vše",
|
||
"@chatFilterAll": {
|
||
"description": "Filtr seznamu chatů — vše."
|
||
},
|
||
"chatFilterUnread": "Nepřečtené",
|
||
"@chatFilterUnread": {
|
||
"description": "Filtr seznamu chatů — nepřečtené."
|
||
},
|
||
"chatFilterGroups": "Skupiny",
|
||
"@chatFilterGroups": {
|
||
"description": "Filtr seznamu chatů — skupiny."
|
||
},
|
||
"chatFilterArchive": "Archiv",
|
||
"@chatFilterArchive": {
|
||
"description": "Odkaz na archiv v řádku filtrů."
|
||
},
|
||
"chatListNoResults": "Nic nenalezeno.",
|
||
"@chatListNoResults": {
|
||
"description": "Hledání v chatech nic nenašlo."
|
||
},
|
||
"chatListFilterEmpty": "Tady zatím nic není.",
|
||
"@chatListFilterEmpty": {
|
||
"description": "Vybraný filtr je prázdný."
|
||
},
|
||
"chatListPin": "Připnout",
|
||
"@chatListPin": {
|
||
"description": "Akce: připnout chat nahoru."
|
||
},
|
||
"chatListUnpin": "Odepnout",
|
||
"@chatListUnpin": {
|
||
"description": "Akce: odepnout chat."
|
||
},
|
||
"chatOpenProfile": "Zobrazit profil",
|
||
"@chatOpenProfile": {
|
||
"description": "Hlavička chatu / menu: otevřít profil kontaktu."
|
||
},
|
||
"groupsProfile": "Profil skupiny",
|
||
"@groupsProfile": {
|
||
"description": "Menu skupinového chatu: profil skupiny."
|
||
},
|
||
"chatSearchHint": "Hledat v konverzaci",
|
||
"@chatSearchHint": {
|
||
"description": "Hledání v jedné konverzaci — placeholder a popisek tlačítka."
|
||
},
|
||
"chatSearchNoMatches": "Nic",
|
||
"@chatSearchNoMatches": {
|
||
"description": "Hledání v konverzaci bez výsledku (krátce, vedle pole)."
|
||
},
|
||
"chatSearchCounter": "{current} z {total}",
|
||
"@chatSearchCounter": {
|
||
"description": "Pořadí aktuální shody hledání, např. „2 z 5“.",
|
||
"placeholders": {
|
||
"current": {
|
||
"type": "int"
|
||
},
|
||
"total": {
|
||
"type": "int"
|
||
}
|
||
}
|
||
},
|
||
"chatSearchOlder": "Starší shoda",
|
||
"@chatSearchOlder": {
|
||
"description": "Tlačítko: předchozí (starší) shoda."
|
||
},
|
||
"chatSearchNewer": "Novější shoda",
|
||
"@chatSearchNewer": {
|
||
"description": "Tlačítko: další (novější) shoda."
|
||
},
|
||
"chatUnreadDivider": "{count, plural, one{1 nová zpráva} few{{count} nové zprávy} other{{count} nových zpráv}}",
|
||
"@chatUnreadDivider": {
|
||
"description": "Oddělovač nad první nepřečtenou zprávou.",
|
||
"placeholders": {
|
||
"count": {
|
||
"type": "int"
|
||
}
|
||
}
|
||
},
|
||
"chatJumpToLatest": "Na nejnovější zprávy",
|
||
"@chatJumpToLatest": {
|
||
"description": "Tlačítko: skok na nejnovější zprávy."
|
||
},
|
||
"chatAttach": "Přiložit",
|
||
"@chatAttach": {
|
||
"description": "Tlačítko přílohy v poli pro psaní."
|
||
},
|
||
"chatSend": "Odeslat",
|
||
"@chatSend": {
|
||
"description": "Tlačítko odeslat."
|
||
},
|
||
"chatRecordVoice": "Nahrát hlasovou zprávu",
|
||
"@chatRecordVoice": {
|
||
"description": "Tlačítko nahrát hlasovou zprávu."
|
||
},
|
||
"profileSharedMedia": "Sdílená média",
|
||
"@profileSharedMedia": {
|
||
"description": "Karta sdílených fotek v profilu."
|
||
},
|
||
"profileMessage": "Zpráva",
|
||
"@profileMessage": {
|
||
"description": "Akce profilu: napsat zprávu."
|
||
},
|
||
"profileSearch": "Hledat",
|
||
"@profileSearch": {
|
||
"description": "Akce profilu: hledat v konverzaci."
|
||
},
|
||
"profileUnmute": "Zvuk",
|
||
"@profileUnmute": {
|
||
"description": "Akce profilu: zrušit ztlumení (krátce)."
|
||
},
|
||
"profileDisappearing": "Mizení",
|
||
"@profileDisappearing": {
|
||
"description": "Akce profilu: mizící zprávy (krátce)."
|
||
},
|
||
"profileCommonGroups": "Společné skupiny",
|
||
"@profileCommonGroups": {
|
||
"description": "Karta společných skupin v profilu kontaktu."
|
||
},
|
||
"profileSafetyNumber": "Bezpečnostní číslo",
|
||
"@profileSafetyNumber": {
|
||
"description": "Řádek profilu: bezpečnostní číslo."
|
||
},
|
||
"profileSafetyNumberHint": "Porovnejte osobně nebo QR kódem",
|
||
"@profileSafetyNumberHint": {
|
||
"description": "Podtitulek bezpečnostního čísla u neověřeného kontaktu."
|
||
},
|
||
"profileVerifiedInPerson": "Ověřeno osobně",
|
||
"@profileVerifiedInPerson": {
|
||
"description": "Stav ověřeného kontaktu v hlavičce profilu."
|
||
},
|
||
"profileVerifyNow": "Ověřit kontakt",
|
||
"@profileVerifyNow": {
|
||
"description": "Tlačítko v profilu neověřeného kontaktu."
|
||
},
|
||
"profileAdd": "Přidat",
|
||
"@profileAdd": {
|
||
"description": "Akce profilu skupiny: přidat členy (krátce)."
|
||
},
|
||
"profileGroupSubtitle": "Skupina · {members} · založena {date}",
|
||
"@profileGroupSubtitle": {
|
||
"description": "Podtitulek profilu skupiny: počet členů · datum založení.",
|
||
"placeholders": {
|
||
"members": {
|
||
"type": "String"
|
||
},
|
||
"date": {
|
||
"type": "String"
|
||
}
|
||
}
|
||
},
|
||
"profileMembersOfMax": "{count} ze {max}",
|
||
"@profileMembersOfMax": {
|
||
"description": "Počet členů ze stropu skupiny, např. „4 ze 128“.",
|
||
"placeholders": {
|
||
"count": {
|
||
"type": "int"
|
||
},
|
||
"max": {
|
||
"type": "int"
|
||
}
|
||
}
|
||
},
|
||
"chatTyping": "píše…",
|
||
"@chatTyping": {
|
||
"description": "Podtitulek chatu / náhled v seznamu: protistrana píše."
|
||
},
|
||
"chatTypingNamed": "{name} píše…",
|
||
"@chatTypingNamed": {
|
||
"description": "Skupina: kdo píše (křestní jméno).",
|
||
"placeholders": {
|
||
"name": {
|
||
"type": "String"
|
||
}
|
||
}
|
||
},
|
||
"chatTypingSeveral": "Několik lidí píše…",
|
||
"@chatTypingSeveral": {
|
||
"description": "Skupina: píše víc lidí najednou."
|
||
},
|
||
"settingsTypingTitle": "Ukazovat, že píšu",
|
||
"@settingsTypingTitle": {
|
||
"description": "Nastavení: přepínač „píše…“."
|
||
},
|
||
"settingsTypingSubtitle": "Oboustranné — kdo nesdílí, nevidí (výchozí vypnuto)",
|
||
"@settingsTypingSubtitle": {
|
||
"description": "Popis přepínače „píše…“."
|
||
},
|
||
"pollAttach": "Anketa",
|
||
"@pollAttach": {
|
||
"description": "Položka nabídky příloh: vytvořit anketu."
|
||
},
|
||
"pollCreateTitle": "Nová anketa",
|
||
"@pollCreateTitle": {
|
||
"description": "Nadpis formuláře nové ankety."
|
||
},
|
||
"pollQuestion": "Otázka",
|
||
"@pollQuestion": {
|
||
"description": "Pole otázky ankety."
|
||
},
|
||
"pollOptionHint": "Možnost {number}",
|
||
"@pollOptionHint": {
|
||
"description": "Placeholder možnosti ankety s pořadím.",
|
||
"placeholders": {
|
||
"number": {
|
||
"type": "int"
|
||
}
|
||
}
|
||
},
|
||
"pollAddOption": "Přidat možnost",
|
||
"@pollAddOption": {
|
||
"description": "Tlačítko: přidat možnost do ankety."
|
||
},
|
||
"pollRemoveOption": "Odebrat možnost",
|
||
"@pollRemoveOption": {
|
||
"description": "Tlačítko: odebrat možnost."
|
||
},
|
||
"pollAllowMultiple": "Povolit víc odpovědí",
|
||
"@pollAllowMultiple": {
|
||
"description": "Přepínač: víc odpovědí na osobu."
|
||
},
|
||
"pollSingle": "Anketa",
|
||
"@pollSingle": {
|
||
"description": "Hlavička ankety s jednou volbou."
|
||
},
|
||
"pollMulti": "Anketa, více voleb",
|
||
"@pollMulti": {
|
||
"description": "Hlavička ankety s více volbami."
|
||
},
|
||
"pollVoters": "{count, plural, =0{zatím bez hlasů} one{1 hlas} few{{count} hlasy} other{{count} hlasů}}",
|
||
"@pollVoters": {
|
||
"description": "Počet hlasujících v anketě.",
|
||
"placeholders": {
|
||
"count": {
|
||
"type": "int"
|
||
}
|
||
}
|
||
},
|
||
"pollFallback": "Anketa: {question}",
|
||
"@pollFallback": {
|
||
"description": "Záložní text ankety pro starší verze appky — první řádek.",
|
||
"placeholders": {
|
||
"question": {
|
||
"type": "String"
|
||
}
|
||
}
|
||
},
|
||
"pollFallbackUpdate": "Hlasovat jde v aktuální verzi Šepotu.",
|
||
"@pollFallbackUpdate": {
|
||
"description": "Záložní text ankety — výzva k aktualizaci."
|
||
},
|
||
"profilePhotoEdit": "Změnit profilovou fotku",
|
||
"@profilePhotoEdit": {
|
||
"description": "Popisek avataru v Nastavení (čtečka obrazovky)."
|
||
},
|
||
"profilePhotoPick": "Vybrat fotku",
|
||
"@profilePhotoPick": {
|
||
"description": "Akce: vybrat profilovou fotku z galerie."
|
||
},
|
||
"profilePhotoRemove": "Odebrat fotku",
|
||
"@profilePhotoRemove": {
|
||
"description": "Akce: odebrat profilovou fotku."
|
||
},
|
||
"profilePhotoHint": "Fotku uvidí jen lidé, se kterými si píšeš — šifrovaně, stejně jako zprávy. Poloha ani údaje o fotce se neposílají.",
|
||
"@profilePhotoHint": {
|
||
"description": "Vysvětlení, kdo profilovou fotku uvidí."
|
||
},
|
||
"profilePhotoFailed": "Fotku se nepodařilo nastavit: {error}",
|
||
"@profilePhotoFailed": {
|
||
"description": "Chyba nastavení profilové fotky.",
|
||
"placeholders": {
|
||
"error": {
|
||
"type": "String"
|
||
}
|
||
}
|
||
},
|
||
"reauthTitle": "Potvrď, že jsi to ty",
|
||
"@reauthTitle": {
|
||
"description": "Nadpis výzvy k PINu před citlivou akcí v odemčené appce"
|
||
},
|
||
"reauthPinRequired": "Tahle akce potřebuje PIN. Nejdřív si ho nastav.",
|
||
"@reauthPinRequired": {
|
||
"description": "Snackbar: citlivá akce bez nastaveného PINu"
|
||
},
|
||
"reauthSetPin": "Nastavit PIN",
|
||
"@reauthSetPin": {
|
||
"description": "Akce snackbaru: nastavit PIN"
|
||
},
|
||
"reauthReasonSeed": "Zobrazení 24 slov pro obnovu účtu",
|
||
"@reauthReasonSeed": {
|
||
"description": "Důvod ve výzvě k PINu/biometrii: zobrazení obnovovací fráze"
|
||
},
|
||
"reauthReasonBackupExport": "Export zálohy",
|
||
"@reauthReasonBackupExport": {
|
||
"description": "Důvod: export zálohy"
|
||
},
|
||
"reauthReasonBackupImport": "Obnova ze zálohy",
|
||
"@reauthReasonBackupImport": {
|
||
"description": "Důvod: obnova ze zálohy"
|
||
},
|
||
"reauthReasonDecoyPin": "Změna nátlakového PINu",
|
||
"@reauthReasonDecoyPin": {
|
||
"description": "Důvod: nastavení nebo zrušení nátlakového PINu"
|
||
},
|
||
"reauthReasonAutoLock": "Prodloužení automatického zámku",
|
||
"@reauthReasonAutoLock": {
|
||
"description": "Důvod: prodloužení nebo vypnutí automatického zámku"
|
||
},
|
||
"reauthReasonScreenSecurity": "Vypnutí ochrany obrazovky",
|
||
"@reauthReasonScreenSecurity": {
|
||
"description": "Důvod: vypnutí ochrany obrazovky"
|
||
},
|
||
"reauthReasonDeleteAccount": "Smazání účtu a všech dat",
|
||
"@reauthReasonDeleteAccount": {
|
||
"description": "Důvod: smazání účtu"
|
||
},
|
||
"reauthReasonBiometrics": "Zapnutí biometrie",
|
||
"@reauthReasonBiometrics": {
|
||
"description": "Důvod: zapnutí biometrického odemčení"
|
||
},
|
||
"contactRequestName": "{name} (neznámý)",
|
||
"@contactRequestName": {
|
||
"description": "Jméno neznámého odesílatele (žádost o zprávu) všude v UI; {name} si zvolil sám",
|
||
"placeholders": {
|
||
"name": {
|
||
"type": "String"
|
||
}
|
||
}
|
||
},
|
||
"pushMessageRequest": "Žádost o zprávu od neznámého odesílatele",
|
||
"@pushMessageRequest": {
|
||
"description": "Text notifikace pro zprávu od neznámého odesílatele — bez jména, které si zvolil"
|
||
},
|
||
"requestTitle": "Žádost o zprávu",
|
||
"@requestTitle": {
|
||
"description": "Nadpis panelu / štítek žádosti o zprávu"
|
||
},
|
||
"requestBody": "„{name}“ není ve tvých kontaktech. Jméno i fotku si zvolil sám, takže nemusí jít o toho, za koho se vydává. Dokud ho nepřijmeš, neuvidí, že jsi zprávu četl, a nemůže ti volat.",
|
||
"@requestBody": {
|
||
"description": "Panel žádosti o zprávu; {name} = jméno, které si odesílatel zvolil",
|
||
"placeholders": {
|
||
"name": {
|
||
"type": "String"
|
||
}
|
||
}
|
||
},
|
||
"requestLookalikeWarning": "Pozor: stejně se jmenuje tvůj kontakt {name}. Tohle je jiný klíč, tedy jiný telefon nebo jiný člověk. Než odpovíš, ověř si to jinou cestou (zavolej, potkejte se).",
|
||
"@requestLookalikeWarning": {
|
||
"description": "Varování v panelu žádosti: jméno se plete s existujícím kontaktem {name}",
|
||
"placeholders": {
|
||
"name": {
|
||
"type": "String"
|
||
}
|
||
}
|
||
},
|
||
"requestAccept": "Přijmout",
|
||
"@requestAccept": {
|
||
"description": "Tlačítko: přijmout žádost o zprávu"
|
||
},
|
||
"requestAcceptTitle": "Přijmout jako kontakt",
|
||
"@requestAcceptTitle": {
|
||
"description": "Nadpis dialogu přijetí žádosti"
|
||
},
|
||
"requestAcceptBody": "Pojmenuj kontakt sám. Jméno, které si odesílatel zvolil, se nepřebírá automaticky.",
|
||
"@requestAcceptBody": {
|
||
"description": "Text dialogu přijetí: kontakt pojmenuje uživatel sám"
|
||
},
|
||
"requestAcceptNameLabel": "Jméno kontaktu",
|
||
"@requestAcceptNameLabel": {
|
||
"description": "Popisek pole se jménem kontaktu"
|
||
},
|
||
"requestNameEmpty": "Zadej jméno.",
|
||
"@requestNameEmpty": {
|
||
"description": "Chyba: prázdné jméno"
|
||
},
|
||
"requestNameTaken": "Tak (nebo skoro tak) se už jmenuje jiný kontakt. Zvol jméno, které je nezamění.",
|
||
"@requestNameTaken": {
|
||
"description": "Chyba: jméno se plete s jiným kontaktem"
|
||
},
|
||
"noticeIdentityChanged": "Bezpečnostní kód kontaktu {name} se změnil. Pod jeho adresou se ozval jiný klíč: nový telefon, přeinstalace, nebo podvrh. Ověření je zrušené. Než pošleš něco citlivého, porovnejte kód znovu.",
|
||
"@noticeIdentityChanged": {
|
||
"description": "Upozornění v konverzaci: kontaktu {name} se změnil identity klíč",
|
||
"placeholders": {
|
||
"name": {
|
||
"type": "String"
|
||
}
|
||
}
|
||
},
|
||
"noticeLookalikeRequest": "Neznámý odesílatel si dal jméno „{claimed}“, které se plete s kontaktem {name}. Tento kontakt to není, zpráva přišla z jiného klíče. Najdeš ji v chatech jako žádost o zprávu.",
|
||
"@noticeLookalikeRequest": {
|
||
"description": "Upozornění v konverzaci existujícího kontaktu {name}: neznámý si zvolil podobné jméno {claimed}",
|
||
"placeholders": {
|
||
"claimed": {
|
||
"type": "String"
|
||
},
|
||
"name": {
|
||
"type": "String"
|
||
}
|
||
}
|
||
},
|
||
"noticeVerifyAction": "Ověřit kód",
|
||
"@noticeVerifyAction": {
|
||
"description": "Tlačítko u upozornění na změnu kódu"
|
||
},
|
||
"noticePreview": "Bezpečnostní upozornění",
|
||
"@noticePreview": {
|
||
"description": "Náhled v seznamu chatů, když je poslední položkou bezpečnostní upozornění"
|
||
}
|
||
}
|