5246a97db2
A new look across the app and a set of everyday messaging features. Interface - Home screen with Chats, Contacts and Settings tabs, a large title, search across chats and message text (diacritics-insensitive), filters and pinned chats. - Conversation view with a translucent header and composer, grouped bubbles, author avatars and colours in groups, swipe to reply, an "N new messages" marker, a jump-to-latest button and in-chat search. - Contact and group profiles: verification, shared photos, groups in common, disappearing messages, mute, block; members, admin badges, adding people, rename and leave for groups. - Full-screen photo viewer that pages through the whole conversation. - A stable avatar colour per person and a clearly visible read state. Messaging - Polls in chats and groups, single or multiple choice, with votes that can be changed or withdrawn; older clients see them as text. - Drafts survive leaving a chat and show in the chat list. - Forwarding of messages, photos, files and voice messages. - Notes to self: a local-only, encrypted chat that never reaches the relay. - @mentions in groups that notify even when the group is muted. - Typing indicators sent as ephemeral messages, opt-in and mutual like read receipts. - Delivery and read times per message and per group member. - Profile photos, cropped, resized and stripped of metadata, delivered encrypted to contacts. - Voice message playback at 1.5x and 2x. - Call buttons in 1:1 chats and call log entries. Fixes - Muted groups no longer notify: muting was checked against the author's chat instead of the group. - A blocked contact could unblock itself by changing its delivery address. - Read receipts no longer regress to delivered when a late delivery receipt arrives. - A message marked as failed corrects itself once it is delivered. - Double ticks in groups now mean delivered to every member.
1734 lines
44 KiB
Dart
1734 lines
44 KiB
Dart
// ignore: unused_import
|
|
import 'package:intl/intl.dart' as intl;
|
|
import 'app_localizations.dart';
|
|
|
|
// ignore_for_file: type=lint
|
|
|
|
/// The translations for Italian (`it`).
|
|
class AppLocalizationsIt extends AppLocalizations {
|
|
AppLocalizationsIt([String locale = 'it']) : super(locale);
|
|
|
|
@override
|
|
String get appTitle => 'Šepot';
|
|
|
|
@override
|
|
String get settingsLanguage => 'Lingua dell\'app';
|
|
|
|
@override
|
|
String get languageSystem => 'Predefinita di sistema';
|
|
|
|
@override
|
|
String get commonUnknownContact => 'Sconosciuto';
|
|
|
|
@override
|
|
String get verifyVerified => 'Verificato';
|
|
|
|
@override
|
|
String get verifyUnverified => 'Non verificato';
|
|
|
|
@override
|
|
String get chatMenuVerifyContact => 'Verifica contatto';
|
|
|
|
@override
|
|
String get chatDisappearingMessages => 'Messaggi a scomparsa';
|
|
|
|
@override
|
|
String get chatMenuUnblockContact => 'Sblocca contatto';
|
|
|
|
@override
|
|
String get chatMenuBlockContact => 'Blocca contatto';
|
|
|
|
@override
|
|
String get reportAndBlock => 'Segnala e blocca';
|
|
|
|
@override
|
|
String errorGeneric(String error) {
|
|
return 'Errore: $error';
|
|
}
|
|
|
|
@override
|
|
String get groupsYouLeftGroup => 'Non sei più nel gruppo';
|
|
|
|
@override
|
|
String groupsMemberCount(int count) {
|
|
String _temp0 = intl.Intl.pluralLogic(
|
|
count,
|
|
locale: localeName,
|
|
other: '$count membri',
|
|
one: '1 membro',
|
|
);
|
|
return '$_temp0';
|
|
}
|
|
|
|
@override
|
|
String get groupsMembers => 'Membri';
|
|
|
|
@override
|
|
String get groupsRename => 'Rinomina gruppo';
|
|
|
|
@override
|
|
String get groupsLeave => 'Abbandona il gruppo';
|
|
|
|
@override
|
|
String get groupsLeftBanner =>
|
|
'Non sei più nel gruppo. La cronologia resta, i nuovi messaggi non arriveranno.';
|
|
|
|
@override
|
|
String get groupsYou => 'Tu';
|
|
|
|
@override
|
|
String get groupsFounder => 'Fondatore';
|
|
|
|
@override
|
|
String get groupsAdmin => 'Amministratore';
|
|
|
|
@override
|
|
String get groupsMakeAdmin => 'Rendi amministratore';
|
|
|
|
@override
|
|
String get groupsDismissAdmin => 'Rimuovi ruolo di amministratore';
|
|
|
|
@override
|
|
String get groupsRemoveMember => 'Rimuovi dal gruppo';
|
|
|
|
@override
|
|
String groupsRemoveMemberConfirmTitle(String name) {
|
|
return 'Rimuovere $name dal gruppo?';
|
|
}
|
|
|
|
@override
|
|
String get groupsRemoveMemberConfirmBody =>
|
|
'Non riceverà più i nuovi messaggi del gruppo. La cronologia esistente resta.';
|
|
|
|
@override
|
|
String get groupsRemoveAction => 'Rimuovi';
|
|
|
|
@override
|
|
String get groupsViewContact => 'Vedi contatto';
|
|
|
|
@override
|
|
String get groupsAdminOnlyHint =>
|
|
'Solo gli amministratori possono cambiare nome, membri e amministratori del gruppo.';
|
|
|
|
@override
|
|
String get groupsAdminOnlyCompatHint =>
|
|
'Solo gli amministratori possono rinominare il gruppo o cambiare gli amministratori. Per ora chiunque può aggiungere persone, perché qualcuno nel gruppo ha una versione precedente di Šepot.';
|
|
|
|
@override
|
|
String groupsAdminActionFailed(String error) {
|
|
return 'Modifica non riuscita: $error';
|
|
}
|
|
|
|
@override
|
|
String get groupsResyncNotice =>
|
|
'Il gruppo si sta allineando con l\'amministratore. Le modifiche ai membri potrebbero arrivare in ritardo.';
|
|
|
|
@override
|
|
String get groupsRejectedChangeNotice =>
|
|
'Qualcuno senza permesso ha provato a modificare il gruppo. La modifica non è stata applicata.';
|
|
|
|
@override
|
|
String get errorGroupNotAdmin =>
|
|
'Solo un amministratore del gruppo può farlo.';
|
|
|
|
@override
|
|
String get errorGroupLastAdmin =>
|
|
'Sei l\'unico amministratore. Prima rendi amministratore qualcun altro.';
|
|
|
|
@override
|
|
String get groupsNameHint => 'Nome del gruppo';
|
|
|
|
@override
|
|
String get commonCancel => 'Annulla';
|
|
|
|
@override
|
|
String get commonSave => 'Salva';
|
|
|
|
@override
|
|
String groupsRenameFailed(String error) {
|
|
return 'Rinomina non riuscita: $error';
|
|
}
|
|
|
|
@override
|
|
String get groupsLeaveConfirmTitle => 'Abbandonare il gruppo?';
|
|
|
|
@override
|
|
String get groupsLeaveConfirmBody =>
|
|
'Gli altri vedranno che non sei più nel gruppo. La cronologia ti resterà, ma non riceverai più nuovi messaggi e per rientrare qualcuno dovrà invitarti.';
|
|
|
|
@override
|
|
String get groupsLeaveAction => 'Abbandona';
|
|
|
|
@override
|
|
String groupsLeaveFailed(String error) {
|
|
return 'Uscita non riuscita: $error';
|
|
}
|
|
|
|
@override
|
|
String get chatBlockedBanner =>
|
|
'Il contatto è bloccato. Non ricevi i suoi messaggi e non puoi scrivergli.';
|
|
|
|
@override
|
|
String get chatUnblock => 'Sblocca';
|
|
|
|
@override
|
|
String chatContactBlocked(String name) {
|
|
return 'Contatto $name bloccato';
|
|
}
|
|
|
|
@override
|
|
String chatContactUnblocked(String name) {
|
|
return 'Contatto $name sbloccato';
|
|
}
|
|
|
|
@override
|
|
String reportAndBlockBody(String name) {
|
|
return 'Bloccheremo il contatto $name e smetterai di ricevere i suoi messaggi. Poi ti proporremo un modulo per farci sapere cosa è successo — non vediamo il contenuto dei messaggi, quindi senza la tua descrizione non ne sappiamo nulla.';
|
|
}
|
|
|
|
@override
|
|
String get chatEmptyEncrypted => 'I messaggi sono cifrati end-to-end.';
|
|
|
|
@override
|
|
String get chatEmptyNoOneElse => 'Nessun altro può leggerli.';
|
|
|
|
@override
|
|
String get commonToday => 'Oggi';
|
|
|
|
@override
|
|
String get commonYesterday => 'Ieri';
|
|
|
|
@override
|
|
String get chatMessageHint => 'Scrivi un messaggio…';
|
|
|
|
@override
|
|
String get chatDiscardRecording => 'Scarta';
|
|
|
|
@override
|
|
String get chatRecording => 'Registrazione…';
|
|
|
|
@override
|
|
String get chatMicPermissionMissing =>
|
|
'Manca l\'autorizzazione per il microfono';
|
|
|
|
@override
|
|
String chatRecordingFailed(String error) {
|
|
return 'Registrazione non riuscita: $error';
|
|
}
|
|
|
|
@override
|
|
String chatVoiceSendFailed(String error) {
|
|
return 'Invio del messaggio vocale non riuscito: $error';
|
|
}
|
|
|
|
@override
|
|
String get chatDeletedMessagePreview => 'Messaggio eliminato';
|
|
|
|
@override
|
|
String get chatVoiceMessagePreview => '🎤 Messaggio vocale';
|
|
|
|
@override
|
|
String get chatPhotoPreview => '📷 Foto';
|
|
|
|
@override
|
|
String get chatAttachmentPreview => '📎 Allegato';
|
|
|
|
@override
|
|
String get chatEditingMessage => 'Modifica messaggio';
|
|
|
|
@override
|
|
String get chatReply => 'Risposta';
|
|
|
|
@override
|
|
String get chatActionReply => 'Rispondi';
|
|
|
|
@override
|
|
String get chatActionForward => 'Inoltra';
|
|
|
|
@override
|
|
String get forwardTitle => 'Inoltra a…';
|
|
|
|
@override
|
|
String get forwardSearchHint => 'Cerca contatto o gruppo';
|
|
|
|
@override
|
|
String get forwardEmpty => 'Nessun risultato';
|
|
|
|
@override
|
|
String forwardDone(String name) {
|
|
return 'Inoltrato a $name';
|
|
}
|
|
|
|
@override
|
|
String forwardFailed(String error) {
|
|
return 'Inoltro non riuscito: $error';
|
|
}
|
|
|
|
@override
|
|
String get commonCopy => 'Copia';
|
|
|
|
@override
|
|
String get commonEdit => 'Modifica';
|
|
|
|
@override
|
|
String get chatDeleteForMe => 'Elimina per me';
|
|
|
|
@override
|
|
String get chatDeleteForEveryone => 'Elimina per tutti';
|
|
|
|
@override
|
|
String get commonOff => 'Disattivato';
|
|
|
|
@override
|
|
String get chatDisappearing30s => '30 secondi';
|
|
|
|
@override
|
|
String get chatDisappearing5m => '5 minuti';
|
|
|
|
@override
|
|
String get chatDisappearing1h => '1 ora';
|
|
|
|
@override
|
|
String get chatDisappearing1d => '1 giorno';
|
|
|
|
@override
|
|
String get chatDisappearing1w => '1 settimana';
|
|
|
|
@override
|
|
String get chatDisappearingDescription =>
|
|
'I nuovi messaggi verranno eliminati allo scadere del tempo, sia per te che per l\'altra persona.';
|
|
|
|
@override
|
|
String get chatDisappearingDisabled => 'Messaggi a scomparsa disattivati';
|
|
|
|
@override
|
|
String chatDisappearingEnabled(String duration) {
|
|
return 'I nuovi messaggi scompariranno dopo: $duration';
|
|
}
|
|
|
|
@override
|
|
String get attachmentGallery => 'Foto dalla galleria';
|
|
|
|
@override
|
|
String get attachmentTakePhoto => 'Scatta foto';
|
|
|
|
@override
|
|
String get attachmentDocument => 'Documento';
|
|
|
|
@override
|
|
String attachmentTooLarge(int maxMb) {
|
|
return 'Il file è troppo grande (max $maxMb MB)';
|
|
}
|
|
|
|
@override
|
|
String get attachmentKeepsMetadataTitle => 'La foto includerà la posizione';
|
|
|
|
@override
|
|
String get attachmentKeepsMetadataBody =>
|
|
'Non riesco a rimuovere i metadati da questo formato (ad es. HEIC). Verrebbe inviata in originale, compresi il luogo dello scatto e i dati del telefono. È più sicuro inviarla dalla Galleria, dove i metadati vengono rimossi.';
|
|
|
|
@override
|
|
String get attachmentSendOriginal => 'Invia originale';
|
|
|
|
@override
|
|
String attachmentPickFailed(String error) {
|
|
return 'Selezione dell\'allegato non riuscita: $error';
|
|
}
|
|
|
|
@override
|
|
String attachmentSendFailed(String error) {
|
|
return 'Invio dell\'allegato non riuscito: $error';
|
|
}
|
|
|
|
@override
|
|
String chatSendFailed(String error) {
|
|
return 'Invio non riuscito: $error';
|
|
}
|
|
|
|
@override
|
|
String get chatMessageDeleted => 'Messaggio eliminato';
|
|
|
|
@override
|
|
String get chatEdited => 'modificato';
|
|
|
|
@override
|
|
String get errorTrustRootChanged =>
|
|
'Il trust root del relay è cambiato! Comunicazione rifiutata.';
|
|
|
|
@override
|
|
String get errorRelayUnavailable =>
|
|
'Relay non disponibile (sender certificate)';
|
|
|
|
@override
|
|
String get errorNotYetRegistered =>
|
|
'Šepot si sta ancora connettendo al relay — riprova a inviare tra un istante.';
|
|
|
|
@override
|
|
String get errorContactLinkIncomplete =>
|
|
'Questo link è incompleto — l\'altra persona l\'ha creato prima di connettersi. Chiedile un nuovo link sepot://.';
|
|
|
|
@override
|
|
String errorAttachmentTooLarge(int maxMb) {
|
|
return 'L\'allegato è troppo grande (max $maxMb MB)';
|
|
}
|
|
|
|
@override
|
|
String get errorGroupNeedsMember => 'Il gruppo ha bisogno di almeno 1 membro';
|
|
|
|
@override
|
|
String get errorAttachmentUnavailable =>
|
|
'L\'allegato non è più su questo telefono';
|
|
|
|
@override
|
|
String errorGroupMaxMembers(int maxMembers) {
|
|
return 'Il gruppo può avere al massimo $maxMembers membri';
|
|
}
|
|
|
|
@override
|
|
String errorMemberNoDeliveryAddress(String displayName) {
|
|
return '$displayName non ha un indirizzo di consegna — chiedi un nuovo link';
|
|
}
|
|
|
|
@override
|
|
String get errorContactNoDeliveryAddress =>
|
|
'Il contatto non ha un indirizzo di consegna — chiedigli un nuovo link sepot://';
|
|
|
|
@override
|
|
String get errorIdentityKeyMismatch =>
|
|
'La chiave di identità dal relay NON corrisponde al contatto — possibile MITM! Messaggio non inviato.';
|
|
|
|
@override
|
|
String get settingsTitle => 'Impostazioni';
|
|
|
|
@override
|
|
String get settingsSectionGeneral => 'Generali';
|
|
|
|
@override
|
|
String get settingsSectionSecurity => 'Sicurezza';
|
|
|
|
@override
|
|
String get settingsChangePinTitle => 'Cambia PIN';
|
|
|
|
@override
|
|
String get settingsChangePinSubtitle => 'PIN a 6 cifre per sbloccare';
|
|
|
|
@override
|
|
String get settingsAutoLockTitle => 'Blocco automatico';
|
|
|
|
@override
|
|
String get settingsAutoLock5min => 'Dopo 5 minuti';
|
|
|
|
@override
|
|
String get settingsDecoyPinTitle => 'PIN anti-coercizione';
|
|
|
|
@override
|
|
String get settingsDecoyPinSetSubtitle => 'Impostato — apre un\'app vuota';
|
|
|
|
@override
|
|
String get settingsDecoyPinUnsetSubtitle =>
|
|
'Un secondo PIN che apre un\'app vuota';
|
|
|
|
@override
|
|
String get settingsSectionNotifications => 'Notifiche';
|
|
|
|
@override
|
|
String get settingsSectionConnection => 'Connessione';
|
|
|
|
@override
|
|
String get settingsSectionPrivacy => 'Privacy';
|
|
|
|
@override
|
|
String get settingsReadReceiptsTitle => 'Conferme di lettura';
|
|
|
|
@override
|
|
String get settingsReadReceiptsSubtitle =>
|
|
'Mostra all\'altra persona quando leggi i messaggi (disattivato di default)';
|
|
|
|
@override
|
|
String get settingsScreenSecurityTitle => 'Sicurezza dello schermo';
|
|
|
|
@override
|
|
String get settingsScreenSecuritySubtitle =>
|
|
'Blocca gli screenshot e nasconde il contenuto nelle app recenti';
|
|
|
|
@override
|
|
String get settingsSectionBackup => 'Backup delle chiavi';
|
|
|
|
@override
|
|
String get settingsSeedPhraseTitle => 'Frase di recupero';
|
|
|
|
@override
|
|
String get settingsSeedPhraseSubtitle =>
|
|
'24 parole per ripristinare l\'identità';
|
|
|
|
@override
|
|
String get settingsBackupExportTitle => 'Backup della cronologia';
|
|
|
|
@override
|
|
String get settingsBackupExportSubtitle =>
|
|
'File cifrato con contatti e messaggi';
|
|
|
|
@override
|
|
String get settingsBackupImportTitle => 'Ripristina da backup';
|
|
|
|
@override
|
|
String get settingsBackupImportSubtitle =>
|
|
'Carica un backup (solo con la tua identità)';
|
|
|
|
@override
|
|
String get settingsSectionSafety => 'Protezione';
|
|
|
|
@override
|
|
String get settingsReportAbuseTitle => 'Segnala un abuso';
|
|
|
|
@override
|
|
String get settingsReportAbuseSubtitle =>
|
|
'Molestie, truffe, minori in pericolo';
|
|
|
|
@override
|
|
String get settingsChildSafetyTitle => 'Standard di tutela dei minori';
|
|
|
|
@override
|
|
String get settingsChildSafetySubtitle =>
|
|
'Come agiamo contro gli abusi sui minori';
|
|
|
|
@override
|
|
String get settingsSectionAbout => 'Informazioni';
|
|
|
|
@override
|
|
String get commonAppName => 'Šepot';
|
|
|
|
@override
|
|
String settingsVersion(String version) {
|
|
return 'Versione $version';
|
|
}
|
|
|
|
@override
|
|
String get settingsLicenseTitle => 'Licenza';
|
|
|
|
@override
|
|
String get settingsLicenseSubtitle => 'AGPL-3.0';
|
|
|
|
@override
|
|
String get settingsPrivacyPolicyTitle => 'Informativa sulla privacy';
|
|
|
|
@override
|
|
String get settingsPrivacyPolicySubtitle => 'Cosa sappiamo di te (e cosa no)';
|
|
|
|
@override
|
|
String get settingsTermsTitle => 'Termini di utilizzo';
|
|
|
|
@override
|
|
String get settingsTermsSubtitle => 'sepot.cz/podminky';
|
|
|
|
@override
|
|
String get settingsDataDeletionTitle => 'Eliminazione dei dati';
|
|
|
|
@override
|
|
String get settingsDataDeletionSubtitle => 'Come richiedere la cancellazione';
|
|
|
|
@override
|
|
String get settingsDeleteAllDataButton => 'Elimina tutti i dati';
|
|
|
|
@override
|
|
String settingsLicenseBody(String supportEmail) {
|
|
return 'Šepot è distribuito sotto licenza GNU Affero General Public License versione 3 (AGPL-3.0). Usa la libreria libsignal, anch\'essa AGPL-3.0.\n\nPer ricevere il codice sorgente corrispondente a questa versione scrivi a $supportEmail e te lo invieremo.';
|
|
}
|
|
|
|
@override
|
|
String get commonClose => 'Chiudi';
|
|
|
|
@override
|
|
String get settingsIdCopied => 'ID copiato';
|
|
|
|
@override
|
|
String settingsFingerprint(String fingerprint) {
|
|
return 'Impronta: $fingerprint';
|
|
}
|
|
|
|
@override
|
|
String get backupShareSubject => 'Šepot — backup cifrato';
|
|
|
|
@override
|
|
String backupExportFailed(String error) {
|
|
return 'Backup non riuscito: $error';
|
|
}
|
|
|
|
@override
|
|
String backupRestoredCount(int count) {
|
|
String _temp0 = intl.Intl.pluralLogic(
|
|
count,
|
|
locale: localeName,
|
|
other: 'Ripristinate $count conversazioni dal backup',
|
|
one: 'Ripristinata 1 conversazione dal backup',
|
|
);
|
|
return '$_temp0';
|
|
}
|
|
|
|
@override
|
|
String backupImportFailed(String error) {
|
|
return 'Ripristino dal backup non riuscito: $error';
|
|
}
|
|
|
|
@override
|
|
String get settingsDecoyPinExplain =>
|
|
'Inserendo questo PIN l\'app si apre vuota — senza i tuoi contatti e messaggi. Deve essere diverso dal PIN normale.';
|
|
|
|
@override
|
|
String get commonConfirm => 'Conferma';
|
|
|
|
@override
|
|
String get commonSet => 'Imposta';
|
|
|
|
@override
|
|
String get settingsDecoyPinEnabled => 'PIN anti-coercizione impostato';
|
|
|
|
@override
|
|
String get settingsDecoyPinConflict =>
|
|
'Il PIN anti-coercizione deve essere diverso da quello normale';
|
|
|
|
@override
|
|
String get settingsDecoyPinDisabled => 'PIN anti-coercizione rimosso';
|
|
|
|
@override
|
|
String get settingsSeedPhraseNotFound => 'Frase di recupero non trovata';
|
|
|
|
@override
|
|
String get settingsSeedPhraseWarning =>
|
|
'Queste parole sono l\'unico backup della tua identità. Non mostrarle a nessuno!';
|
|
|
|
@override
|
|
String settingsSeedWordChip(int index, String word) {
|
|
return '$index. $word';
|
|
}
|
|
|
|
@override
|
|
String get settingsAboutTagline => 'Šepot — Messenger privato';
|
|
|
|
@override
|
|
String get settingsAboutBody =>
|
|
'Messenger cifrato E2E e open source.\n\nCrittografia:\n• X25519 (scambio di chiavi)\n• XChaCha20-Poly1305 (cifratura)\n• Ed25519 (firme)\n\n© 2026 ajtak.it';
|
|
|
|
@override
|
|
String get settingsDeleteAccountTitle =>
|
|
'Eliminare l\'account e tutti i dati?';
|
|
|
|
@override
|
|
String get settingsDeleteAccountBody =>
|
|
'Questa azione è irreversibile. Tutti i messaggi, i contatti e le chiavi verranno eliminati da questo dispositivo e l\'account verrà deregistrato dal server. Se non hai la frase di recupero, perderai la tua identità.';
|
|
|
|
@override
|
|
String get settingsDeleteAccountServerOffline =>
|
|
'Il server al momento non è raggiungibile — i dati sul dispositivo sono stati eliminati, ma la registrazione sul server è rimasta. Scrivici a podpora@sepot.cz e cancelleremo il resto.';
|
|
|
|
@override
|
|
String get settingsDeleteAllConfirm => 'Elimina tutto';
|
|
|
|
@override
|
|
String groupsCreateFailed(String error) {
|
|
return 'Impossibile creare il gruppo: $error';
|
|
}
|
|
|
|
@override
|
|
String get groupsNewGroupTitle => 'Nuovo gruppo';
|
|
|
|
@override
|
|
String get groupsCreateAction => 'Crea';
|
|
|
|
@override
|
|
String groupsMembersCounter(int selectedCount, int maxMembers) {
|
|
return 'Membri ($selectedCount/$maxMembers)';
|
|
}
|
|
|
|
@override
|
|
String get groupsEmptyContactsHint =>
|
|
'Prima aggiungi dei contatti — un gruppo è fatto di persone con cui puoi già scrivere.';
|
|
|
|
@override
|
|
String get groupsMemberMissingAddress =>
|
|
'Manca l\'indirizzo di consegna — chiedi un nuovo link';
|
|
|
|
@override
|
|
String attachmentSizeBytes(int bytes) {
|
|
return '$bytes B';
|
|
}
|
|
|
|
@override
|
|
String attachmentSizeKb(String kilobytes) {
|
|
return '$kilobytes kB';
|
|
}
|
|
|
|
@override
|
|
String attachmentSizeMb(String megabytes) {
|
|
return '$megabytes MB';
|
|
}
|
|
|
|
@override
|
|
String get attachmentDownloadFailedTapToRetry =>
|
|
'Download non riuscito — tocca per riprovare';
|
|
|
|
@override
|
|
String get attachmentDownloadFailed => 'Download non riuscito';
|
|
|
|
@override
|
|
String get attachmentDownloading => 'Download in corso…';
|
|
|
|
@override
|
|
String get attachmentSharedFileFallbackName => 'file';
|
|
|
|
@override
|
|
String attachmentOpenFailed(String error) {
|
|
return 'Impossibile aprire l\'allegato: $error';
|
|
}
|
|
|
|
@override
|
|
String get commonFile => 'File';
|
|
|
|
@override
|
|
String get chatListNewConversation => 'Nuova conversazione';
|
|
|
|
@override
|
|
String get chatListReadReceiptPreview => 'Letto';
|
|
|
|
@override
|
|
String get chatListDraft => 'Bozza';
|
|
|
|
@override
|
|
String get notesTitle => 'Note per me';
|
|
|
|
@override
|
|
String get notesSubtitle => 'Solo su questo telefono, cifrato';
|
|
|
|
@override
|
|
String get callVoice => 'Chiama';
|
|
|
|
@override
|
|
String get callVideo => 'Videochiamata';
|
|
|
|
@override
|
|
String get callStatusRinging => 'Squilla…';
|
|
|
|
@override
|
|
String get callIncomingVoice => 'Chiamata in arrivo';
|
|
|
|
@override
|
|
String get callIncomingVideo => 'Videochiamata in arrivo';
|
|
|
|
@override
|
|
String get callStatusConnecting => 'Connessione…';
|
|
|
|
@override
|
|
String get callEnded => 'Chiamata terminata';
|
|
|
|
@override
|
|
String get callEndedBusy => 'Occupato';
|
|
|
|
@override
|
|
String get callEndedRejected => 'Chiamata rifiutata';
|
|
|
|
@override
|
|
String get callEndedUnanswered => 'Nessuna risposta';
|
|
|
|
@override
|
|
String get callEndedFailed => 'Connessione non riuscita';
|
|
|
|
@override
|
|
String get callEncrypted => 'Crittografia end-to-end';
|
|
|
|
@override
|
|
String get callAccept => 'Accetta';
|
|
|
|
@override
|
|
String get callReject => 'Rifiuta';
|
|
|
|
@override
|
|
String get callMute => 'Disattiva microfono';
|
|
|
|
@override
|
|
String get callSpeaker => 'Altoparlante';
|
|
|
|
@override
|
|
String get callCamera => 'Disattiva fotocamera';
|
|
|
|
@override
|
|
String get callSwitchCamera => 'Cambia fotocamera';
|
|
|
|
@override
|
|
String get callHangUp => 'Riaggancia';
|
|
|
|
@override
|
|
String get callLogMissed => 'Chiamata persa';
|
|
|
|
@override
|
|
String get callLogUnanswered => 'Chiamata senza risposta';
|
|
|
|
@override
|
|
String get callLogRejected => 'Chiamata rifiutata';
|
|
|
|
@override
|
|
String get callLogBusy => 'Occupato';
|
|
|
|
@override
|
|
String get callLogFailed => 'Chiamata non riuscita';
|
|
|
|
@override
|
|
String callLogVoice(String duration) {
|
|
return 'Chiamata · $duration';
|
|
}
|
|
|
|
@override
|
|
String callLogVideo(String duration) {
|
|
return 'Videochiamata · $duration';
|
|
}
|
|
|
|
@override
|
|
String get chatListTimeNow => 'adesso';
|
|
|
|
@override
|
|
String chatListTimeMinutes(int minutes) {
|
|
return '$minutes min';
|
|
}
|
|
|
|
@override
|
|
String get qrScanTitle => 'Scansiona codice QR';
|
|
|
|
@override
|
|
String get qrScanInstruction => 'Inquadra il codice QR del contatto';
|
|
|
|
@override
|
|
String get qrScanHint =>
|
|
'Il codice QR contiene la chiave pubblica del contatto';
|
|
|
|
@override
|
|
String get qrNewContactTitle => 'Nuovo contatto';
|
|
|
|
@override
|
|
String qrContactAdded(String name) {
|
|
return 'Contatto $name aggiunto';
|
|
}
|
|
|
|
@override
|
|
String get commonAdd => 'Aggiungi';
|
|
|
|
@override
|
|
String get onboardingWelcomeTitle => 'Ti diamo il benvenuto in Šepot';
|
|
|
|
@override
|
|
String get onboardingWelcomeSubtitle =>
|
|
'Un messenger privato con cifratura end-to-end.\nNessun numero di telefono. Nessuna email.\nSolo le tue chiavi.';
|
|
|
|
@override
|
|
String get onboardingStart => 'Inizia';
|
|
|
|
@override
|
|
String get onboardingRestoreExisting =>
|
|
'Ho già un account — ripristina dalla frase di recupero';
|
|
|
|
@override
|
|
String get onboardingEncryptionTitle => 'I tuoi messaggi, le tue chiavi';
|
|
|
|
@override
|
|
String get onboardingFeatureSignalTitle => 'Protocollo Signal';
|
|
|
|
@override
|
|
String get onboardingFeatureSignalSubtitle =>
|
|
'X3DH + Double Ratchet, forward secrecy';
|
|
|
|
@override
|
|
String get onboardingFeaturePqTitle => 'Protezione post-quantistica';
|
|
|
|
@override
|
|
String get onboardingFeaturePqSubtitle =>
|
|
'Kyber (PQXDH) fin dal primo messaggio';
|
|
|
|
@override
|
|
String get onboardingFeatureLocalKeysTitle =>
|
|
'Chiavi solo sul tuo dispositivo';
|
|
|
|
@override
|
|
String get onboardingFeatureLocalKeysSubtitle => 'Nessun server le possiede';
|
|
|
|
@override
|
|
String get onboardingFeatureDisappearingSubtitle =>
|
|
'Si eliminano automaticamente';
|
|
|
|
@override
|
|
String get commonContinue => 'Continua';
|
|
|
|
@override
|
|
String get onboardingIdentityTitle => 'Crea la tua identità';
|
|
|
|
@override
|
|
String get onboardingIdentitySubtitle =>
|
|
'Nessuna email né telefono. Solo un nome e chiavi crittografiche.';
|
|
|
|
@override
|
|
String get onboardingDisplayNameLabel => 'Nome visualizzato';
|
|
|
|
@override
|
|
String get onboardingDisplayNameHint => 'Es. Marco';
|
|
|
|
@override
|
|
String onboardingSeedPhraseWarning(int count) {
|
|
return 'Annota queste $count parole. Sono l\'unico backup delle tue chiavi!';
|
|
}
|
|
|
|
@override
|
|
String get onboardingSeedSavedConfirm =>
|
|
'Confermo di aver salvato la frase in un luogo sicuro';
|
|
|
|
@override
|
|
String get onboardingGenerateKeys => 'Genera le chiavi';
|
|
|
|
@override
|
|
String get verifyMismatchTitle => 'I numeri NON corrispondono';
|
|
|
|
@override
|
|
String verifyMatchBody(String contactName) {
|
|
return 'Le chiavi corrispondono. $contactName è un contatto verificato.';
|
|
}
|
|
|
|
@override
|
|
String get verifyMismatchBody =>
|
|
'I numeri di sicurezza non corrispondono. Qualcuno potrebbe intercettare la connessione (MITM), oppure stai scansionando il codice di un altro contatto. NON inviare messaggi sensibili e verificatevi di nuovo tramite un altro canale.';
|
|
|
|
@override
|
|
String get commonUnderstood => 'Ho capito';
|
|
|
|
@override
|
|
String get verifyManualConfirmTitle => 'Segnare come verificato?';
|
|
|
|
@override
|
|
String get verifyManualConfirmBody =>
|
|
'Conferma solo se hai confrontato le cifre con l\'altra persona tramite un altro canale affidabile (di persona, con una chiamata…) e corrispondono.';
|
|
|
|
@override
|
|
String get verifyManualConfirmAction => 'Corrispondono, verifica';
|
|
|
|
@override
|
|
String get verifyTitle => 'Verifica del contatto';
|
|
|
|
@override
|
|
String get verifyContactVerifiedBanner => 'Il contatto è verificato';
|
|
|
|
@override
|
|
String verifyIntro(String contactName) {
|
|
return 'Confronta questo numero con $contactName. Se corrisponde, nessuno sta intercettando la vostra cifratura. Il modo più rapido è scansionare a vicenda i codici QR.';
|
|
}
|
|
|
|
@override
|
|
String get verifyScanButton => 'Scansiona il codice dell\'altra persona';
|
|
|
|
@override
|
|
String get verifyManualButton => 'Le cifre corrispondono — segna manualmente';
|
|
|
|
@override
|
|
String get verifyUnverifyButton => 'Rimuovi verifica';
|
|
|
|
@override
|
|
String get verifyScanScreenTitle => 'Scansiona il QR di verifica';
|
|
|
|
@override
|
|
String get reportTitle => 'Segnala';
|
|
|
|
@override
|
|
String get reportSubmitted => 'Segnalazione inviata';
|
|
|
|
@override
|
|
String get reportSubmittedChildSafety =>
|
|
'Diamo priorità a queste segnalazioni. Se un minore è in pericolo immediato, chiama subito il 112 o il 114 (Emergenza Infanzia).';
|
|
|
|
@override
|
|
String get reportSubmittedThanks =>
|
|
'Grazie. L\'esamineremo il prima possibile.';
|
|
|
|
@override
|
|
String get commonDone => 'Fatto';
|
|
|
|
@override
|
|
String get reportPanelE2eNotice =>
|
|
'I messaggi sono cifrati end-to-end, quindi non possiamo vederne il contenuto nemmeno ora. Descrivi con parole tue cosa è successo. Non incollare qui il contenuto dei messaggi né link ad esso — non possiamo conservarlo e non ci serve per la valutazione.';
|
|
|
|
@override
|
|
String get reportPanelCsamWarning =>
|
|
'NON inviarci materiale che mostra abusi su minori. Detenerlo è un reato anche per noi e non ci serve per la segnalazione. Il materiale va segnalato direttamente alla polizia o a una hotline dedicata alla protezione dei minori. Scrivici solo cosa è successo — bloccheremo l\'account e inoltreremo il caso.';
|
|
|
|
@override
|
|
String get reportPanelIpNotice =>
|
|
'La segnalazione non passa dal relay ma dal nostro server web, che al momento dell\'invio vedrà il tuo indirizzo IP.';
|
|
|
|
@override
|
|
String get reportCategoryHeading => 'Oggetto della segnalazione';
|
|
|
|
@override
|
|
String get reportDescriptionHeading => 'Cosa è successo';
|
|
|
|
@override
|
|
String get reportAttachContactId => 'Allega l\'ID del contatto segnalato';
|
|
|
|
@override
|
|
String reportAttachContactIdNamed(String contactName) {
|
|
return 'Allega l\'ID del contatto $contactName';
|
|
}
|
|
|
|
@override
|
|
String get reportReplyToHeading => 'Come contattarti (facoltativo)';
|
|
|
|
@override
|
|
String get reportReplyToHint =>
|
|
'email, nel caso avessimo bisogno di chiarimenti';
|
|
|
|
@override
|
|
String get reportSubmitButton => 'Invia segnalazione';
|
|
|
|
@override
|
|
String get contactsTitle => 'Contatti';
|
|
|
|
@override
|
|
String get contactsAddContact => 'Aggiungi contatto';
|
|
|
|
@override
|
|
String get contactsSearchHint => 'Cerca un contatto...';
|
|
|
|
@override
|
|
String get contactsEmpty => 'Ancora nessun contatto';
|
|
|
|
@override
|
|
String get contactsNoResults => 'Nessun risultato';
|
|
|
|
@override
|
|
String get contactsShareCardTitle => 'Condividi il tuo Šepot ID';
|
|
|
|
@override
|
|
String get contactsShareCardSubtitle => 'Mostra il codice QR o invia un link';
|
|
|
|
@override
|
|
String get contactsAddDialogPrompt =>
|
|
'Incolla la stringa di condivisione (share string) del contatto:';
|
|
|
|
@override
|
|
String get contactsShareStringHint => 'Incolla la share string...';
|
|
|
|
@override
|
|
String get contactsInvalidShareString => 'Share string non valida';
|
|
|
|
@override
|
|
String contactsAdded(String name) {
|
|
return 'Contatto $name aggiunto';
|
|
}
|
|
|
|
@override
|
|
String get verifyContactSubtitle => 'Confronto del numero di sicurezza';
|
|
|
|
@override
|
|
String get contactsDeleteContact => 'Elimina contatto';
|
|
|
|
@override
|
|
String get pinConfirmTitle => 'Conferma il PIN';
|
|
|
|
@override
|
|
String get pinSetupTitle => 'Imposta il tuo PIN';
|
|
|
|
@override
|
|
String get pinConfirmSubtitle => 'Inserisci di nuovo il PIN per confermare';
|
|
|
|
@override
|
|
String get pinSetupSubtitle => 'PIN a 6 cifre per sbloccare l\'app';
|
|
|
|
@override
|
|
String get pinSetupFailed => 'Impostazione del PIN non riuscita. Riprova.';
|
|
|
|
@override
|
|
String get pinMismatchRetry => 'I PIN non corrispondono. Riprova.';
|
|
|
|
@override
|
|
String get pinChangeCurrentTitle => 'Inserisci il PIN attuale';
|
|
|
|
@override
|
|
String get pinChangeCurrentSubtitle => 'Lo verifichiamo sbloccando la chiave';
|
|
|
|
@override
|
|
String get pinChangeNewTitle => 'Inserisci il nuovo PIN';
|
|
|
|
@override
|
|
String get pinChangeNewSubtitle => '6 cifre';
|
|
|
|
@override
|
|
String get pinChangeConfirmTitle => 'Conferma il nuovo PIN';
|
|
|
|
@override
|
|
String get pinChangeConfirmSubtitle => 'Inseriscilo ancora una volta';
|
|
|
|
@override
|
|
String get pinWrong => 'PIN errato.';
|
|
|
|
@override
|
|
String get pinChangeMustDiffer =>
|
|
'Il nuovo PIN deve essere diverso da quello attuale.';
|
|
|
|
@override
|
|
String get pinMismatch => 'I PIN non corrispondono.';
|
|
|
|
@override
|
|
String get pinDecoyConflict =>
|
|
'Questo PIN appartiene già alla modalità anti-coercizione. Scegline un altro.';
|
|
|
|
@override
|
|
String get pinChangeFailed => 'Cambio del PIN non riuscito. Riprova.';
|
|
|
|
@override
|
|
String get pinChanged => 'PIN cambiato';
|
|
|
|
@override
|
|
String get errorCryptoInitTitle => 'Il motore di cifratura non si è avviato';
|
|
|
|
@override
|
|
String get errorStartupTitle => 'Šepot non si è avviato';
|
|
|
|
@override
|
|
String get errorScreenNotRenderedTitle =>
|
|
'Questa schermata non è stata visualizzata';
|
|
|
|
@override
|
|
String get errorStartupBody =>
|
|
'Qualcosa è andato storto subito all\'avvio. Inviami questo testo, per favore (tieni premuto e copia) — mi aiuterà a trovare l\'errore.';
|
|
|
|
@override
|
|
String get errorContactFooter => 'sepot.cz · contattami';
|
|
|
|
@override
|
|
String get pinUnlockTitle => 'Sblocca Šepot';
|
|
|
|
@override
|
|
String get pinEnterPin => 'Inserisci il PIN';
|
|
|
|
@override
|
|
String get pinUnlockWithBiometrics => 'Sblocca con biometria';
|
|
|
|
@override
|
|
String get pinWrong2 => 'PIN errato';
|
|
|
|
@override
|
|
String get pinUnlockError => 'Errore di sblocco';
|
|
|
|
@override
|
|
String get pushTitle => 'Notifiche push';
|
|
|
|
@override
|
|
String get pushModeOffDesc =>
|
|
'I messaggi verranno scaricati solo all\'apertura dell\'app.';
|
|
|
|
@override
|
|
String get pushModeUp => 'UnifiedPush (senza Google)';
|
|
|
|
@override
|
|
String get pushModeUpDesc =>
|
|
'Senza Google — richiede l\'app ntfy (F-Droid/Play).';
|
|
|
|
@override
|
|
String get pushModeFcm => 'Google (FCM, predefinito)';
|
|
|
|
@override
|
|
String get pushModeFcmDesc =>
|
|
'Affidabile senza altre app. Il token push del dispositivo va a Google; il contenuto dei messaggi mai.';
|
|
|
|
@override
|
|
String pushSetupFailed(String error) {
|
|
return 'Configurazione delle notifiche push non riuscita: $error';
|
|
}
|
|
|
|
@override
|
|
String get pushHintOff =>
|
|
'I messaggi arrivano solo quando apri Šepot — le notifiche non sono configurate.';
|
|
|
|
@override
|
|
String get pushHintFailed =>
|
|
'Le notifiche non funzionano: vedrai i messaggi solo aprendo Šepot.';
|
|
|
|
@override
|
|
String get pushRegistrationFailed =>
|
|
'Le notifiche non arrivano — il distributore ha rifiutato la registrazione. Prova a disattivare e riattivare il push.';
|
|
|
|
@override
|
|
String get pushNoDistributorTitle => 'Nessun distributore';
|
|
|
|
@override
|
|
String get pushNoDistributorBody =>
|
|
'Per notifiche senza Google installa un distributore UnifiedPush, ad es. ntfy (F-Droid o Play). Poi riattiva le notifiche push.';
|
|
|
|
@override
|
|
String get commonOk => 'OK';
|
|
|
|
@override
|
|
String get pushPickDistributorTitle => 'Scegli il distributore';
|
|
|
|
@override
|
|
String pushSubtitleUnifiedPush(String distributor) {
|
|
return 'UnifiedPush · $distributor';
|
|
}
|
|
|
|
@override
|
|
String get pushNoDistributorFallback => 'nessun distributore';
|
|
|
|
@override
|
|
String get pushSubtitleFcm => 'Google (FCM)';
|
|
|
|
@override
|
|
String get restoreErrorNameRequired => 'Inserisci il nome visualizzato.';
|
|
|
|
@override
|
|
String restoreErrorWordCount(int wordCount, int requiredWords) {
|
|
String _temp0 = intl.Intl.pluralLogic(
|
|
wordCount,
|
|
locale: localeName,
|
|
other: 'La frase ha $wordCount parole, ne servono $requiredWords.',
|
|
one: 'La frase ha 1 parola, ne servono $requiredWords.',
|
|
);
|
|
return '$_temp0';
|
|
}
|
|
|
|
@override
|
|
String get restoreErrorInvalidPhrase =>
|
|
'La frase non è valida — controlla le parole e il loro ordine.';
|
|
|
|
@override
|
|
String restoreErrorFailed(String error) {
|
|
return 'Ripristino non riuscito: $error';
|
|
}
|
|
|
|
@override
|
|
String get restoreTitle => 'Ripristina account';
|
|
|
|
@override
|
|
String get restoreHeading => 'Inserisci la tua frase di recupero';
|
|
|
|
@override
|
|
String restoreIntro(int wordCount) {
|
|
return '$wordCount parole, dal backup fatto quando hai creato l\'account. Ripristina la tua identità (stesso codice SEP, i contatti continueranno a riconoscerti).';
|
|
}
|
|
|
|
@override
|
|
String get restoreHistoryWarning =>
|
|
'La cronologia dei messaggi non verrà ripristinata — è salvata solo sul dispositivo originale.';
|
|
|
|
@override
|
|
String get restorePhraseHint => 'parola1 parola2 parola3 …';
|
|
|
|
@override
|
|
String restoreWordCountHelper(int wordCount, int requiredWords) {
|
|
return '$wordCount / $requiredWords parole';
|
|
}
|
|
|
|
@override
|
|
String chatListArchivedCount(int count) {
|
|
return 'Archiviate ($count)';
|
|
}
|
|
|
|
@override
|
|
String get chatListEmptyTitle => 'Ancora nessuna conversazione';
|
|
|
|
@override
|
|
String get chatListEmptySubtitle =>
|
|
'Aggiungi un contatto e inizia a sussurrare!';
|
|
|
|
@override
|
|
String get chatListUnmute => 'Riattiva notifiche';
|
|
|
|
@override
|
|
String get chatListMute => 'Silenzia';
|
|
|
|
@override
|
|
String get chatListArchive => 'Archivia';
|
|
|
|
@override
|
|
String get qrShareTitle => 'Il mio Šepot ID';
|
|
|
|
@override
|
|
String get qrShareConnectingTitle => 'Connessione al relay…';
|
|
|
|
@override
|
|
String get qrShareConnectingBody =>
|
|
'Il tuo codice QR e il link appariranno appena Šepot si connette per la prima volta. Un istante — bastano pochi secondi.';
|
|
|
|
@override
|
|
String get qrIdentityNotFound => 'Identità non trovata';
|
|
|
|
@override
|
|
String get commonCopiedToClipboard => 'Copiato negli appunti';
|
|
|
|
@override
|
|
String qrShareInviteMessage(String shareString) {
|
|
return 'Aggiungimi su Šepot!\n\n$shareString';
|
|
}
|
|
|
|
@override
|
|
String get commonShare => 'Condividi';
|
|
|
|
@override
|
|
String get qrShareInfo =>
|
|
'Il contatto scansiona il tuo codice QR o incolla la stringa di condivisione nell\'app.';
|
|
|
|
@override
|
|
String get reportCategoryChildSafety => 'Minore in pericolo';
|
|
|
|
@override
|
|
String get reportCategoryChildSafetyHint =>
|
|
'Descrivi la situazione con parole tue. Non incollare il contenuto dei messaggi né link al materiale.';
|
|
|
|
@override
|
|
String get reportCategoryHarassment => 'Molestie o minacce';
|
|
|
|
@override
|
|
String get reportCategoryHarassmentHint =>
|
|
'Qualcuno ti intimidisce, ti minaccia o ti molesta.';
|
|
|
|
@override
|
|
String get reportCategorySpam => 'Spam';
|
|
|
|
@override
|
|
String get reportCategorySpamHint => 'Messaggi indesiderati, invii di massa.';
|
|
|
|
@override
|
|
String get reportCategoryFraud => 'Truffa';
|
|
|
|
@override
|
|
String get reportCategoryFraudHint =>
|
|
'Un tentativo di ottenere con l\'inganno denaro, chiavi o dati personali.';
|
|
|
|
@override
|
|
String get reportCategoryOther => 'Altro';
|
|
|
|
@override
|
|
String get reportCategoryOtherHint => 'Qualcos\'altro che dovremmo sapere.';
|
|
|
|
@override
|
|
String get reportErrorEmptyDescription =>
|
|
'Scrivi cosa è successo, per favore.';
|
|
|
|
@override
|
|
String reportErrorConnection(String supportEmail) {
|
|
return 'Impossibile contattare il server. Riprova, oppure scrivi a $supportEmail.';
|
|
}
|
|
|
|
@override
|
|
String reportErrorRateLimited(String supportEmail) {
|
|
return 'Troppe segnalazioni dalla tua rete. Riprova tra un\'ora, oppure scrivi a $supportEmail.';
|
|
}
|
|
|
|
@override
|
|
String reportErrorServer(int statusCode, String supportEmail) {
|
|
return 'Invio non riuscito (codice $statusCode). Scrivi a $supportEmail, per favore.';
|
|
}
|
|
|
|
@override
|
|
String get settingsAutoLockNever => 'Mai';
|
|
|
|
@override
|
|
String get settingsAutoLock1min => 'Dopo 1 minuto';
|
|
|
|
@override
|
|
String get settingsAutoLock15min => 'Dopo 15 minuti';
|
|
|
|
@override
|
|
String torToggleFailed(String error) {
|
|
return 'Impossibile cambiare lo stato di Tor: $error';
|
|
}
|
|
|
|
@override
|
|
String get torConnectionTitle => 'Connessione via Tor';
|
|
|
|
@override
|
|
String get torDialogBody =>
|
|
'Il traffico verso il server passerà dalla rete Tor (nasconde il tuo indirizzo IP). Richiede l\'app Orbot installata e in esecuzione, con proxy SOCKS attivo sulla porta 9050.\n\nSenza Orbot in esecuzione i messaggi non vengono né inviati né ricevuti. La connessione tende a essere più lenta.';
|
|
|
|
@override
|
|
String get commonTurnOn => 'Attiva';
|
|
|
|
@override
|
|
String get torSubtitleOff =>
|
|
'Connessione cifrata diretta (WSS). Attiva per nascondere l\'IP via Tor.';
|
|
|
|
@override
|
|
String get torStatusConnected => 'Connesso via Tor (.onion).';
|
|
|
|
@override
|
|
String get torStatusConnecting =>
|
|
'Connessione via Tor… (Orbot è in esecuzione?)';
|
|
|
|
@override
|
|
String get torStatusWaiting => 'Via Tor — in attesa di Orbot (SOCKS 9050).';
|
|
|
|
@override
|
|
String get biometricsPinRequiredFirst =>
|
|
'Prima imposta un PIN — la biometria è solo un complemento.';
|
|
|
|
@override
|
|
String get biometricsStorageLocked =>
|
|
'La memoria protetta è bloccata — sblocca l\'app con il PIN.';
|
|
|
|
@override
|
|
String get biometricsNotAvailable =>
|
|
'Il dispositivo non ha la biometria configurata.';
|
|
|
|
@override
|
|
String get biometricsEnrollPromptReason =>
|
|
'Conferma l\'attivazione dello sblocco biometrico';
|
|
|
|
@override
|
|
String biometricsSetupFailed(String error) {
|
|
return 'Impossibile configurare la biometria: $error';
|
|
}
|
|
|
|
@override
|
|
String get biometricsTileTitle => 'Biometria';
|
|
|
|
@override
|
|
String get biometricsTileSubtitle =>
|
|
'Sblocco con impronta / volto (il PIN resta di riserva)';
|
|
|
|
@override
|
|
String get backupErrorCorruptedFile => 'File di backup danneggiato';
|
|
|
|
@override
|
|
String get backupErrorUnknownFormat => 'Formato di backup non riconosciuto';
|
|
|
|
@override
|
|
String get backupErrorWrongIdentity =>
|
|
'Impossibile decifrare il backup — appartiene a un\'altra identità?';
|
|
|
|
@override
|
|
String attachmentSharedImageFilename(String ext) {
|
|
return 'sepot-immagine.$ext';
|
|
}
|
|
|
|
@override
|
|
String get attachmentDecryptFailed => 'Impossibile decifrare l\'allegato';
|
|
|
|
@override
|
|
String get pushActionOpen => 'Apri';
|
|
|
|
@override
|
|
String get pushChannelMessagesName => 'Messaggi';
|
|
|
|
@override
|
|
String get pushChannelMessagesDescription =>
|
|
'Avvisi per i nuovi messaggi (senza contenuto)';
|
|
|
|
@override
|
|
String pushNewMessageFrom(String senderName) {
|
|
return 'Nuovo messaggio da $senderName';
|
|
}
|
|
|
|
@override
|
|
String get pushNewMessages => 'Hai nuovi messaggi';
|
|
|
|
@override
|
|
String get archiveTitle => 'Archiviate';
|
|
|
|
@override
|
|
String get archiveEmpty => 'Nessuna conversazione archiviata';
|
|
|
|
@override
|
|
String get archiveUnarchive => 'Rimuovi dall\'archivio';
|
|
|
|
@override
|
|
String restoreErrorMnemonicWordCount(int count, int expected) {
|
|
return 'La frase ha $count parole, ne servono $expected';
|
|
}
|
|
|
|
@override
|
|
String restoreErrorInvalidMnemonic(String message) {
|
|
return 'Frase non valida: $message';
|
|
}
|
|
|
|
@override
|
|
String get contactsErrorAlreadyExists => 'Il contatto esiste già';
|
|
|
|
@override
|
|
String get commonAppTagline => 'Messenger privato';
|
|
|
|
@override
|
|
String get commonE2eBadgeCompact => 'E2E';
|
|
|
|
@override
|
|
String get commonE2eBadgeFull => 'Cifrato end-to-end';
|
|
|
|
@override
|
|
String get photoPreviewCaptionHint => 'Aggiungi una didascalia…';
|
|
|
|
@override
|
|
String get photoPreviewDraw => 'Disegna';
|
|
|
|
@override
|
|
String get photoPreviewAddText => 'Aggiungi testo';
|
|
|
|
@override
|
|
String get photoPreviewRotate => 'Ruota';
|
|
|
|
@override
|
|
String get photoPreviewUndo => 'Annulla';
|
|
|
|
@override
|
|
String get photoPreviewSend => 'Invia';
|
|
|
|
@override
|
|
String get photoPreviewTextDialogTitle => 'Testo sulla foto';
|
|
|
|
@override
|
|
String get photoPreviewRemoveText => 'Rimuovi';
|
|
|
|
@override
|
|
String get photoPreviewDecodeFailed => 'Impossibile caricare la foto';
|
|
|
|
@override
|
|
String get chatActionInfo => 'Info messaggio';
|
|
|
|
@override
|
|
String get messageInfoSent => 'Inviato';
|
|
|
|
@override
|
|
String get messageInfoDelivered => 'Consegnato';
|
|
|
|
@override
|
|
String get messageInfoRead => 'Letto';
|
|
|
|
@override
|
|
String get messageInfoPending => 'non ancora';
|
|
|
|
@override
|
|
String get messageInfoReadReceiptsOff =>
|
|
'Vedi quando i tuoi messaggi vengono letti solo se condividi anche tu le conferme di lettura (Impostazioni).';
|
|
|
|
@override
|
|
String chatStatusReadAt(String time) {
|
|
return 'Letto $time';
|
|
}
|
|
|
|
@override
|
|
String chatStatusDeliveredAt(String time) {
|
|
return 'Consegnato $time';
|
|
}
|
|
|
|
@override
|
|
String get groupsAddMembers => 'Aggiungi membri';
|
|
|
|
@override
|
|
String get groupsAddMembersAction => 'Aggiungi';
|
|
|
|
@override
|
|
String groupsAddMembersFailed(String error) {
|
|
return 'Impossibile aggiungere: $error';
|
|
}
|
|
|
|
@override
|
|
String get groupsNoContactsToAdd =>
|
|
'Tutti i tuoi contatti sono già nel gruppo. Aggiungi prima una nuova persona ai contatti tramite codice QR.';
|
|
|
|
@override
|
|
String get navChats => 'Chat';
|
|
|
|
@override
|
|
String get chatListNewChat => 'Nuova chat';
|
|
|
|
@override
|
|
String get chatListSearchHint => 'Cerca in chat e messaggi';
|
|
|
|
@override
|
|
String get chatFilterAll => 'Tutte';
|
|
|
|
@override
|
|
String get chatFilterUnread => 'Non lette';
|
|
|
|
@override
|
|
String get chatFilterGroups => 'Gruppi';
|
|
|
|
@override
|
|
String get chatFilterArchive => 'Archivio';
|
|
|
|
@override
|
|
String get chatListNoResults => 'Nessun risultato.';
|
|
|
|
@override
|
|
String get chatListFilterEmpty => 'Ancora niente qui.';
|
|
|
|
@override
|
|
String get chatListPin => 'Fissa';
|
|
|
|
@override
|
|
String get chatListUnpin => 'Sblocca';
|
|
|
|
@override
|
|
String get chatOpenProfile => 'Vedi profilo';
|
|
|
|
@override
|
|
String get groupsProfile => 'Info gruppo';
|
|
|
|
@override
|
|
String get chatSearchHint => 'Cerca nella chat';
|
|
|
|
@override
|
|
String get chatSearchNoMatches => 'Nessuno';
|
|
|
|
@override
|
|
String chatSearchCounter(int current, int total) {
|
|
return '$current di $total';
|
|
}
|
|
|
|
@override
|
|
String get chatSearchOlder => 'Risultato precedente';
|
|
|
|
@override
|
|
String get chatSearchNewer => 'Risultato successivo';
|
|
|
|
@override
|
|
String chatUnreadDivider(int count) {
|
|
String _temp0 = intl.Intl.pluralLogic(
|
|
count,
|
|
locale: localeName,
|
|
other: '$count nuovi messaggi',
|
|
one: '1 nuovo messaggio',
|
|
);
|
|
return '$_temp0';
|
|
}
|
|
|
|
@override
|
|
String get chatJumpToLatest => 'Vai ai più recenti';
|
|
|
|
@override
|
|
String get chatAttach => 'Allega';
|
|
|
|
@override
|
|
String get chatSend => 'Invia';
|
|
|
|
@override
|
|
String get chatRecordVoice => 'Registra messaggio vocale';
|
|
|
|
@override
|
|
String get profileSharedMedia => 'Media condivisi';
|
|
|
|
@override
|
|
String get profileMessage => 'Messaggio';
|
|
|
|
@override
|
|
String get profileSearch => 'Cerca';
|
|
|
|
@override
|
|
String get profileUnmute => 'Riattiva';
|
|
|
|
@override
|
|
String get profileDisappearing => 'Effimeri';
|
|
|
|
@override
|
|
String get profileCommonGroups => 'Gruppi in comune';
|
|
|
|
@override
|
|
String get profileSafetyNumber => 'Numero di sicurezza';
|
|
|
|
@override
|
|
String get profileSafetyNumberHint => 'Confronta di persona o con codice QR';
|
|
|
|
@override
|
|
String get profileVerifiedInPerson => 'Verificato di persona';
|
|
|
|
@override
|
|
String get profileVerifyNow => 'Verifica contatto';
|
|
|
|
@override
|
|
String get profileAdd => 'Aggiungi';
|
|
|
|
@override
|
|
String profileGroupSubtitle(String members, String date) {
|
|
return 'Gruppo · $members · creato il $date';
|
|
}
|
|
|
|
@override
|
|
String profileMembersOfMax(int count, int max) {
|
|
return '$count su $max';
|
|
}
|
|
|
|
@override
|
|
String get chatTyping => 'sta scrivendo…';
|
|
|
|
@override
|
|
String chatTypingNamed(String name) {
|
|
return '$name sta scrivendo…';
|
|
}
|
|
|
|
@override
|
|
String get chatTypingSeveral => 'Più persone stanno scrivendo…';
|
|
|
|
@override
|
|
String get settingsTypingTitle => 'Indicatore di scrittura';
|
|
|
|
@override
|
|
String get settingsTypingSubtitle =>
|
|
'Reciproco — se non lo condividi, non lo vedi (disattivato di default)';
|
|
|
|
@override
|
|
String get pollAttach => 'Sondaggio';
|
|
|
|
@override
|
|
String get pollCreateTitle => 'Nuovo sondaggio';
|
|
|
|
@override
|
|
String get pollQuestion => 'Domanda';
|
|
|
|
@override
|
|
String pollOptionHint(int number) {
|
|
return 'Opzione $number';
|
|
}
|
|
|
|
@override
|
|
String get pollAddOption => 'Aggiungi opzione';
|
|
|
|
@override
|
|
String get pollRemoveOption => 'Rimuovi opzione';
|
|
|
|
@override
|
|
String get pollAllowMultiple => 'Consenti più risposte';
|
|
|
|
@override
|
|
String get pollSingle => 'Sondaggio';
|
|
|
|
@override
|
|
String get pollMulti => 'Sondaggio, scelta multipla';
|
|
|
|
@override
|
|
String pollVoters(int count) {
|
|
String _temp0 = intl.Intl.pluralLogic(
|
|
count,
|
|
locale: localeName,
|
|
other: '$count voti',
|
|
one: '1 voto',
|
|
zero: 'ancora nessun voto',
|
|
);
|
|
return '$_temp0';
|
|
}
|
|
|
|
@override
|
|
String pollFallback(String question) {
|
|
return 'Sondaggio: $question';
|
|
}
|
|
|
|
@override
|
|
String get pollFallbackUpdate => 'Aggiorna Šepot per votare.';
|
|
|
|
@override
|
|
String get profilePhotoEdit => 'Cambia foto profilo';
|
|
|
|
@override
|
|
String get profilePhotoPick => 'Scegli foto';
|
|
|
|
@override
|
|
String get profilePhotoRemove => 'Rimuovi foto';
|
|
|
|
@override
|
|
String get profilePhotoHint =>
|
|
'La vedranno solo le persone con cui chatti — cifrata come i messaggi. Posizione e metadati non vengono inviati.';
|
|
|
|
@override
|
|
String profilePhotoFailed(String error) {
|
|
return 'Impossibile impostare la foto: $error';
|
|
}
|
|
}
|