923a6a01bd
Registration failures from the distributor were swallowed, so push looked enabled while nothing arrived. Without wake-ups Android suspends the app and messages only show up once the user opens it — which looks like broken delivery even though the relay has them queued. The failure is now remembered and surfaced in Settings, and the chat list carries a dismissible line explaining the state.
1767 lines
87 KiB
Plaintext
1767 lines
87 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"
|
||
},
|
||
"groupsMembersWithCount": "Členové ({count})",
|
||
"@groupsMembersWithCount": {
|
||
"description": "Nadpis bottom sheetu se seznamem členů skupiny",
|
||
"placeholders": {
|
||
"count": {
|
||
"type": "int"
|
||
}
|
||
}
|
||
},
|
||
"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ů"
|
||
},
|
||
"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)"
|
||
},
|
||
"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"
|
||
}
|
||
}
|
||
},
|
||
"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."
|
||
},
|
||
"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"
|
||
},
|
||
"chatListPhotoWithCaptionPreview": "📷 {caption}",
|
||
"@chatListPhotoWithCaptionPreview": {
|
||
"description": "Náhled poslední zprávy v dlaždici — fotka s popiskem; emoji je součást textu",
|
||
"placeholders": {
|
||
"caption": {
|
||
"type": "String"
|
||
}
|
||
}
|
||
},
|
||
"chatListFilePreview": "📎 {fileName}",
|
||
"@chatListFilePreview": {
|
||
"description": "Náhled poslední zprávy v dlaždici — soubor; emoji je součást textu. Skládaný literál: obsahuje vnořený fallback \"Soubor\" (viz samostatný záznam) — při lokalizaci předat placeholderu už vyřešenou hodnotu msg.fileName ?? commonFile.",
|
||
"placeholders": {
|
||
"fileName": {
|
||
"type": "String"
|
||
}
|
||
}
|
||
},
|
||
"chatListReadReceiptPreview": "Přečteno",
|
||
"@chatListReadReceiptPreview": {
|
||
"description": "Náhled poslední zprávy v dlaždici pro zprávu typu readReceipt (potvrzení o přečtení)"
|
||
},
|
||
"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"
|
||
},
|
||
"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 (doporučeno)",
|
||
"@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 '(doporučeno)')"
|
||
},
|
||
"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)",
|
||
"@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) — rychlé, opt-in",
|
||
"@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í"
|
||
}
|
||
}
|