1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
|
/**
* Italian — translated from locales/en.js.
*
* Register: formal (forma di cortesia, "Lei").
* `hub`, `node` and `GEK` are left in English: they name the CLI
* (`meshbay-node`), node.toml and the docs, which are English throughout.
* Grammatical gender chosen here: l'hub (m.), il node (m.), la GEK → "la chiave".
*/
export default {
// Nav
'nav.toggle_menu': 'Mostra il menu',
'nav.light_mode': 'Tema chiaro',
'nav.dark_mode': 'Tema scuro',
'nav.logout': 'Esci',
'nav.login': 'Accedi',
'nav.minimize_tray': 'Riduci nella barra di sistema',
'tray.show': 'Mostra MeshBay',
'tray.quit': 'Esci',
'tray.start_node': 'Avvia il nodo',
'tray.stop_node': 'Arresta il nodo',
// Sidebar
'sidebar.my_groups': 'I miei gruppi',
'sidebar.no_groups': 'Ancora nessun gruppo',
'sidebar.legal': 'Note legali',
'sidebar.discover': 'Esplora',
'sidebar.public_groups': 'Gruppi pubblici',
// Login
'login.title': 'Accedi',
'login.username': 'Nome utente',
'login.password': 'Password',
'login.submit': 'Accedi',
'login.loading': 'Accesso in corso...',
'login.no_account': 'Non ha ancora un account?',
'login.register_link': 'Crea un account',
'login.forgot': 'Ha dimenticato la passphrase?',
'login.show_password': 'Mostra la passphrase',
'login.hide_password': 'Nascondi la passphrase',
'reset.title': 'Reimposta la passphrase',
'reset.request_intro': 'Inserisca il suo nome utente e l’e-mail dell’account. Se corrispondono, un codice di reimpostazione viene inviato a quell’indirizzo.',
'reset.send_code': 'Invia codice',
'reset.form_intro': 'Inserisca il codice ricevuto per e-mail e scelga una nuova passphrase. Se ha la sua chiave di recupero, la aggiunga per ripristinare anche l’accesso ai suoi gruppi.',
'reset.code': 'Codice di reimpostazione',
'reset.recovery_key': 'Chiave di recupero (facoltativa)',
'reset.recovery_key_hint': 'La lasci vuota se non la possiede. Senza di essa il suo accesso viene ripristinato, ma dovrà riunirsi a ogni gruppo.',
'reset.new_pass': 'Nuova passphrase',
'reset.new_pass_repeat': 'Ripeti la nuova passphrase',
'reset.submit': 'Reimposta la passphrase',
'reset.working': 'Ripristino delle sue identità di gruppo…',
'reset.signin_restored': 'Il suo accesso è stato ripristinato.',
'reset.groups_restored': 'Le sue identità di gruppo sono state ripristinate su ogni nodo raggiungibile.',
'reset.no_recovery': 'Le sue identità di gruppo non sono state ripristinate. Per ogni gruppo, chieda al suo operatore di rimuovere il suo pin e di inviarle un nuovo codice di invito, poi si riunisca.',
'reset.needs_operator': 'Questi gruppi richiedono ancora un intervento — chieda a ogni operatore di rimuovere il suo pin e di inviarle un nuovo codice:',
'reset.go_app': 'Vai all’app',
'reset.back_to_login': 'Torna all’accesso',
'reset.err_unsupported': 'La reimpostazione della passphrase richiede il modulo di cifratura del browser, non disponibile qui.',
// Register
'register.title': 'Crea un account',
'register.username': 'Nome utente',
'register.email': 'Indirizzo e-mail',
'register.password': 'Passphrase (almeno 12 caratteri)',
'register.confirm': 'Conferma la password',
'register.submit': "Crea l'account",
'register.loading': "Creazione dell'account...",
'register.has_account': 'Ha già un account?',
'register.login_link': 'Accedi',
'register.recovery_title': 'Salvi la sua chiave di recupero',
'register.recovery_intro': 'Questa chiave ripristina le sue identità di gruppo se dovesse dimenticare la passphrase. La conservi in un gestore di password o in un luogo sicuro.',
'register.recovery_copy': 'Copia',
'register.recovery_copied': 'Copiato',
'register.recovery_warning': 'Se perde sia la passphrase sia questa chiave, i suoi file restano sui rispettivi nodi ma si riunisce a ogni gruppo con una nuova identità.',
'register.recovery_saved': 'Ho salvato la mia chiave di recupero in un luogo sicuro.',
'register.recovery_continue': 'Continua',
'register.recovery_email_opt': 'Inviami anche questa chiave di recupero via e-mail come backup',
'register.recovery_emailed': 'Una copia è stata inviata anche alla sua e-mail, nello stesso messaggio del codice di verifica.',
'register.recovery_not_emailed': 'Non è stata inviata via e-mail. La salvi ora: è l’unica volta che viene mostrata.',
'register.success_title': 'Verifichi la sua e-mail',
'register.success_msg': 'Un codice di verifica è stato inviato al suo indirizzo e-mail. Lo inserisca qui sotto per attivare il suo account.',
'register.go_login': "Vai all'accesso",
'register.code_placeholder': 'Codice di verifica',
'register.verify_btn': 'Verifica',
'register.verifying': 'Verifica in corso…',
'register.verified_title': 'E-mail verificata',
'register.verified_msg': 'Il suo account è attivo. Ora può accedere.',
'register.resend': 'Invia di nuovo il codice',
'register.resend_sent': 'Un nuovo codice è stato inviato.',
'login.pending_verification': 'Il suo indirizzo e-mail non è ancora verificato. Controlli la sua casella di posta per il codice di verifica.',
'login.verify_link': 'Verifica e-mail',
'login.invalid': "Nome utente o passphrase errati.",
'login.locked': "Troppe passphrase errate per questo account. Riprovi tra {minutes} min oppure reimposti la passphrase.",
// Sign-in page: what MeshBay is (browser only)
'welcome.title': 'Internet come doveva essere.',
'welcome.lead': 'MeshBay è un software open source che le permette di accedere da remoto ai suoi file personali e di usare applicazioni basate sullo spazio di archiviazione del suo computer:',
'welcome.app_chat': 'Chat',
'welcome.app_photos': 'Foto',
'welcome.app_media': 'Media center',
'welcome.app_video': 'Lettore video',
'welcome.app_music': 'Lettore musicale',
'welcome.groups': 'Crei gruppi per dare alle persone a lei care l’accesso ad alcune di queste applicazioni.',
'welcome.e2e': 'I suoi dati sono cifrati end-to-end e viaggiano peer-to-peer, direttamente da ogni dispositivo al computer che li ospita: il suo nodo. Non passano mai dall’hub meshbay.org.',
'welcome.uses_title': 'Cosa può farci',
'welcome.use_chat': 'Messaggistica istantanea all’interno di un gruppo',
'welcome.use_photos': 'Condividere album fotografici con famiglia e amici',
'welcome.use_media': 'Accedere ovunque al media center di casa, per lei e la sua famiglia, con streaming e Chromecast dall’app desktop',
'welcome.use_apps': 'Creare le proprie applicazioni sul nodo che ospita',
'welcome.hub_title': 'Cosa fa meshbay.org',
'welcome.hub_body': 'meshbay.org è solo un servizio di segnalazione: la autentica e mette in contatto le parti, plug-and-play, attraverso le reti domestiche.',
'welcome.hub_never': 'I suoi contenuti non lo raggiungono mai:',
'welcome.never_transit': 'Nulla passa da lì: nessun contenuto, nessuna indicizzazione',
'welcome.never_stored': 'Nessun suo file o messaggio vi è archiviato',
'welcome.never_e2e': 'Crittografia end-to-end, da ogni dispositivo al suo nodo',
'welcome.hub_free': 'Il servizio è gratuito. Nessun modello di business (per scelta), nessun tracciamento, nessuna pubblicità. Buon divertimento!',
'welcome.download': 'Scarica (beta)',
'welcome.legal': 'Note legali',
'register.err_mismatch': 'Le password non coincidono',
'register.err_username_len': 'Il nome utente deve contenere almeno {n} caratteri.',
'register.err_min_len': {
one: 'Usi almeno {n} carattere',
other: 'Usi almeno {n} caratteri',
},
'register.err_too_weak': 'Troppo facile da indovinare. La passphrase è ciò che '
+ 'protegge le sue chiavi là dove sono conservate — qualche parola senza alcun '
+ 'legame tra loro funziona bene.',
'register.strength': 'Robustezza: circa {bits} bit. Protegge la copia delle sue '
+ 'chiavi conservata sui node a cui aderisce, quindi vale la pena sceglierla con cura.',
'captcha.required': 'Completa il captcha.',
'captcha.failed': 'Verifica captcha fallita — riprova.',
// Home
'home.welcome': 'Benvenuto in MeshBay',
'home.no_groups': 'Non fa ancora parte di nessun gruppo.',
'home.browse_prefix': 'Dia un’occhiata ai ',
'home.browse_link': 'gruppi pubblici',
'home.browse_suffix': " oppure chieda a un amministratore di gruppo di invitarla.",
'home.invite_only': 'Chieda a un amministratore di gruppo di invitarla.',
'home.my_groups': 'I miei gruppi',
// Explore
'explore.title': 'Gruppi pubblici',
'explore.search': 'Cerca gruppi...',
'explore.loading': 'Caricamento...',
'explore.empty': 'Nessun gruppo pubblico disponibile.',
'explore.create_group': 'Crea un gruppo',
'explore.join': 'Partecipa',
'explore.member': 'Iscritto',
'explore.disabled': "This hub does not have public groups.",
// Group page
'group.default_name': 'Gruppo',
'group.tab_files': 'File',
'group.tab_chat': 'Chat',
'group.tab_video': 'Video',
'group.tab_music': 'Musica',
'group.tab_photos': 'Foto',
'group.tab_helloworld': 'HelloWorld',
'helloworld.greeting': 'Ciao, mondo!',
'helloworld.no_directory': 'Nessuna cartella scelta. Scegline una nelle impostazioni.',
'helloworld.counted': '{n} file',
'settings_app.helloworld_directory_label': 'Cartella',
'settings_app.helloworld_directory_hint': 'La cartella elencata da questa applicazione di riferimento. Serve a mostrare che aggiungerne una non richiede altro che i suoi due file.',
'group.tab_members': 'Membri',
'group.tab_settings': "Impostazioni",
'members.danger_leave_hint': "Perderai l’accesso ai file e alla chat di questo gruppo.",
'members.uploads_title': "Caricamenti",
'members.uploads_on': "I membri possono aggiungere file",
'members.uploads_off': "Solo tu puoi aggiungere file",
'members.uploads_disable': "Disattiva",
'members.uploads_enable': "Attiva",
'members.uploads_hint': "Vale per tutti tranne te. È il nodo a rifiutare il caricamento: non si tratta di nascondere un pulsante.",
'members.apps_title': "Applicazioni",
'members.apps_hint': "Quali parti di questo gruppo vedono i membri. Almeno una deve restare attiva.",
'members.apps_need_one': "Almeno un'applicazione deve restare attiva.",
'members.danger_delete_hint': "Il gruppo scompare per tutti i membri. Non è reversibile.",
'group.filter': 'Filtra i file...',
'group.refresh_index': 'Aggiorna l\'elenco',
'group.col_name': 'Nome',
'group.col_size': 'Dimensione',
'group.col_type': 'Tipo',
'group.col_date': 'Data',
'group.empty_filter': 'Nessun file corrisponde al filtro',
'group.empty_dir': 'Questa cartella è vuota',
'group.download': 'Scarica',
'group.play': 'Riproduci',
'group.offline_title': 'Al momento nessun node è online per questo gruppo.',
'group.offline_hint': 'I file compariranno quando si collegherà un node che ospita '
+ 'questo gruppo.',
'group.upload': 'Carica',
'group.drop_here': 'Rilascia per caricare in {dir}',
'group.drop_not_here': 'I file si possono rilasciare solo in una cartella scrivibile.',
'group.drop_conflict': 'Caricamento annullato — già presente in questa cartella: {names}. Rinominalo o rimuovilo prima.',
'group.drop_invalid': 'Caricamento annullato — il nodo non può salvare questi nomi: {names}',
'group.drop_unreadable': 'Caricamento annullato — impossibile leggere gli elementi rilasciati.',
'group.drop_mkdir_failed': 'Caricamento annullato — impossibile creare una cartella ({detail}).',
'group.mkdir': 'Nuova cartella',
'group.mkdir_prompt': 'Nome della nuova cartella',
'group.mkdir_offline': 'Non connesso al nodo.',
'group.download_offline': 'Nessuna connessione al nodo — il download non può iniziare. La riconnessione è automatica, riprovi tra poco.',
'group.download_write_stalled': 'Il file ha smesso di essere scritto su disco ({seconds} s senza progressi). Il download è stato interrotto invece di restare bloccato; riprovi.',
'device.add_title': 'This browser is not linked to this node yet',
'device.add_hint': 'Your account is known here, but this browser holds a different key. Approve it from a device already linked — no operator needed.',
'device.add_btn': 'Get a linking code',
'device.add_show': 'Type this code into a device already linked to this node, within the hour:',
'device.mine_title': 'Your devices on this node',
'device.mine_hint': 'Each browser or client you use here holds its own key. They are separate from your devices on other nodes.',
'device.mine_empty': 'No device is linked here yet.',
'device.this_one': 'this one',
'device.revoke': 'Remove',
'device.revoke_confirm': 'Remove this device? It will lose access to this node until it is linked again.',
'device.approve_hint': 'Linking a new device? Enter the code it is showing.',
'device.approve_btn': 'Approve',
'device.approved': 'Device linked.',
'group.root_unavailable': '(non disponibile — l’unità è scollegata)',
'group.root_plug': 'Ricollega',
'group.root_eject': 'Espelli',
'group.root_writable': 'Lettura/Scrittura',
'group.root_ejected': '(espulso)',
'group.view': 'Visualizza',
'group.delete': 'Elimina',
'group.delete_confirm': 'Eliminare {name}?',
'group.delete_group': 'Elimina il gruppo',
'group.delete_group_confirm': 'Eliminare definitivamente «{name}» e rimuovere tutti '
+ 'i membri? I file presenti sul node vengono conservati.',
'group.err_transport': 'Modulo di trasporto non caricato',
// Status
'status.idle': 'Inattivo',
'status.discovering': 'Ricerca dei node...',
'status.connecting': 'Connessione tramite WebRTC...',
'status.connecting_short': 'Connessione…',
'status.fetching': "Recupero dell'indice...",
'status.files': {
one: '{n} file',
other: '{n} file',
},
'status.offline': 'Nessun node online',
'status.error': 'Connessione non riuscita',
// Chat
'chat.empty': 'Ancora nessun messaggio. Inizi la conversazione!',
'chat.placeholder': 'Scriva un messaggio...',
'chat.send': 'Invia',
'chat.attach': 'Allega un file',
'chat.attach_read_only': 'Nessuna directory condivisa scrivibile: gli allegati sono disattivati',
// Video player
'video.loading': 'Caricamento di {name}...',
'video.buffering': 'Buffering in corso...',
'video.resumed_at': "Ripreso da {time}",
'video.from_start': "Riparti dall'inizio",
'video.audio_track': 'Traccia audio',
'video.audio_track_n': 'Traccia {n}',
'video.subtitles': 'Sottotitoli',
'video.subtitles_off': 'Nessuno',
'video.subtitle_track_n': 'Traccia {n}',
'video.subtitles_forced': 'forzati (solo cartelli)',
'video.subtitles_sdh': 'per non udenti',
'video.err_subtitle': 'Impossibile caricare questa traccia di sottotitoli',
'video.close': 'Chiudi (Esc)',
'preview.pdf_fallback': 'Questo browser non mostrerà il PDF nella pagina. Lo scarichi '
+ 'invece — in ogni caso è stato decifrato qui.',
'preview.too_large': 'Questo file è di {size}, più di quanto questa pagina possa tenere in memoria ({limit}). Lo scarichi invece — un download viene scritto direttamente su disco.',
'download.too_large_for_memory': '«{name}» è di {size}. Questo browser può salvare un file di queste dimensioni solo scrivendolo su disco man mano, e qui non può farlo — dovrebbe tenere l’intero file in memoria. Ricarichi la pagina e riprovi; se non basta, usi l’applicazione desktop.',
'group.upload_indexing': 'indicizzazione…',
'video.err_transport': 'Trasporto non connesso',
'video.err_mse': 'Codec non supportato per lo streaming: {codec}',
'video.mode_poster': 'Locandine',
'video.mode_flat': 'Elenco semplice',
'video.filter_all': 'All',
'video.filter_movies': 'Movies',
'video.filter_series': 'Series',
'pager.range': '{from}–{to} di {total}',
'pager.previous': 'Pagina precedente',
'pager.next': 'Pagina successiva',
'video.empty': 'Nessun video trovato.',
'video.no_root_configured': 'Per questo gruppo non è ancora impostata una cartella radice di Video — un operatore può sceglierne una nelle Impostazioni.',
'music.no_root_configured': 'Per questo gruppo non è ancora impostata una cartella radice di Musica — un operatore può sceglierne una nelle Impostazioni.',
'video.director': 'Regista',
'video.specials': 'Speciali',
'video.season_n': 'Stagione {n}',
'video.episode_n': 'Episodio {n}',
'video.n_episodes': {
one: '{n} episodio',
other: '{n} episodi',
},
'video.fix_match': 'Correggi corrispondenza…',
'video.search_title': 'Correggi la corrispondenza TMDB',
'video.search_placeholder': 'Cerca su TMDB…',
'video.search_button': 'Cerca',
'video.search_no_results': 'Nessuna corrispondenza trovata.',
'video.search_apply_hint': 'Si applica a tutti i file attualmente raggruppati sotto questo titolo.',
'video.search_apply_hint_movie': 'Si applica solo a questo file.',
'video.source_file': 'File: {name}',
'video.no_match': 'Nessuna corrispondenza TMDB affidabile — mostrato il nome del file.',
'video.rematch_one': 'Riassocia',
'video.read_more': 'Leggi tutto',
'video.read_less': 'Mostra meno',
// Musica
'music.mode_grid': 'Album',
'music.mode_flat': 'Elenco semplice',
'music.empty': 'Nessuna musica trovata.',
'music.unknown_album': 'Album sconosciuto',
'music.unknown_artist': 'Artista sconosciuto',
'music.various': 'Vari',
'music.play_all': 'Riproduci tutto',
'music.menu_more': 'Altro…',
'music.menu_play': 'Riproduci',
'music.menu_play_next': 'Riproduci dopo',
'music.menu_enqueue': 'Aggiungi alla coda',
'music.n_tracks': {
one: '{n} traccia',
other: '{n} tracce',
},
'music.err_transport': 'Trasporto non connesso',
'music.err_playback': 'Errore di riproduzione',
'music.err_transcode': 'Conversione del formato non riuscita',
'music.player_play': 'Riproduci',
'music.player_pause': 'Pausa',
'music.player_prev': 'Precedente',
'music.player_next': 'Successivo',
'music.player_shuffle': 'Riproduzione casuale',
'music.player_repeat_off': 'Ripetizione disattivata',
'music.player_repeat_all': 'Ripeti tutto',
'music.player_repeat_one': 'Ripeti brano',
'music.player_volume': 'Volume',
'music.player_close': 'Chiudi lettore',
'playlists.menu': 'Playlist',
'playlists.load': 'Carica una playlist',
'playlists.create': 'Nuova playlist…',
'playlists.delete': 'Elimina una playlist',
'playlists.remove_track': 'Rimuovi un brano',
'playlists.sync_now': 'Sincronizza ora',
'playlists.add_to': 'Aggiungi a una playlist',
'playlists.favorites': 'Preferiti',
'playlists.none_yet': 'Nessuna playlist',
'playlists.empty_playlist': 'Questa playlist è vuota',
'playlists.added': '{n} aggiunti',
'playlists.already_there': 'Già in quella playlist',
'playlists.name_placeholder': 'Nome della playlist',
'playlists.err_duplicate': 'Esiste già una playlist con questo nome',
'playlists.confirm_delete': 'Eliminare la playlist «{name}»? Non è reversibile.',
'playlists.deleted': '«{name}» eliminata',
'playlists.synced': 'Playlist sincronizzate',
'playlists.sync_failed': 'Sincronizzazione non riuscita',
'playlists.err_no_key': 'Esci e rientra con la tua password una volta per sincronizzare le playlist tra dispositivi.',
'playlists.err_too_large': '«{name}» è troppo grande per sincronizzarsi con i tuoi altri dispositivi. Dividila in playlist di circa {n} brani.',
'playlists.track_removed': 'Brano rimosso',
'playlists.save_queue': 'Salva la coda come playlist…',
'playlists.cancel': 'Annulla',
'playlists.save': 'Salva',
'music.player_queue': 'Coda attuale',
'music.queue_title': 'In riproduzione',
// Photos
'photo.empty': 'Nessuna foto trovata.',
'photo.no_roots_configured': 'Per questo gruppo non sono ancora impostate cartelle radice di Foto — un operatore può sceglierne alcune nelle Impostazioni.',
'photo.root_album': '(livello superiore)',
'photo.n_photos': {
one: '{n} foto',
other: '{n} foto',
},
'photo.back': 'Indietro',
'photo.prev': 'Precedente (←)',
'photo.next': 'Successiva (→)',
'photo.zip_album': "Scarica l'album come zip",
'photo.zoom_in': 'Ingrandisci',
'photo.zoom_out': 'Riduci',
'photo.zoom_fit_title': 'Adatta alla finestra',
'photo.zoom_fit_label': 'Adatta',
'photo.zoom_100': 'Dimensione reale (100%)',
// LAN cast
'cast.start': 'Trasmetti al dispositivo',
'cast.stop': 'Interrompi trasmissione',
'cast.copy_url': 'Copia URL dello stream',
'cast.copied': 'URL copiato',
'cast.scanning': 'Ricerca dispositivi…',
'cast.no_devices': 'Nessun dispositivo trovato',
// Settings
'settings.title': 'Impostazioni',
'settings.coming_soon': 'Prossimamente.',
'settings.downloads': 'Download',
'settings.dl_auto': 'Salva automaticamente',
'settings.dl_auto_hint': 'I file finiscono direttamente nella cartella che sceglie '
+ 'qui sotto, senza alcuna finestra. Scaricare venti file ne deposita venti.',
'settings.dl_ask': 'Chiedi ogni volta',
'settings.dl_ask_hint': 'Una finestra «Salva con nome» per ciascun file — una per '
+ 'file, anche quando scarica una selezione.',
'settings.dl_folder': 'Cartella: {name}',
'settings.dl_no_folder': 'Nessuna cartella scelta — i download finiscono dove li '
+ 'colloca il browser, e non si possono sospendere',
'settings.dl_choose': 'Scegli una cartella',
'settings.dl_change': 'Cambia',
'settings.dl_forget': 'Dimentica',
'settings.profile': 'Profilo',
'settings.username': 'Nome utente',
'settings.email': 'Email',
'settings.email_save': 'Save',
'settings.email_saved': 'E-mail aggiornata',
'settings.email_code_sent': 'Un codice di verifica è stato inviato al suo nuovo indirizzo e-mail.',
'settings.email_code_placeholder': 'Codice di verifica',
'settings.email_verify_btn': 'Verifica',
'settings.email_verifying': 'Verifica in corso…',
'settings.email_verified': 'Indirizzo e-mail modificato con successo.',
'settings.notif_global_disable': 'Disable all notifications',
'settings.notif_global_hint': 'When enabled, no notifications are created for any group.',
'settings.defaults': 'Valori predefiniti',
'settings.default_tab': 'Default tab',
'settings.default_tab_hint': 'Which tab opens first when you enter a group.',
'settings.media_page_size': 'Elementi per pagina in Video e Musica',
'settings.media_page_size_hint': 'Quanti poster o album vengono mostrati alla volta; le frecce nella barra degli strumenti passano al gruppo successivo.',
'settings.music_keep_screen_on': 'Keep screen on during music playback',
'settings.music_keep_screen_on_hint': 'Prevents the phone from locking on its own while a track is playing.',
'settings.node_pins': 'Identità dei node',
'settings.node_pins_hint': "La chiave d'identità di ogni node viene memorizzata alla "
+ 'prima connessione. Se cambia, la connessione viene rifiutata — cosa che ci si '
+ 'aspetta solo quando un operatore reinstalla un node. Verifichi con lui prima di '
+ 'cancellarla.',
'settings.node_pins_count': {
one: '{n} fissata',
other: '{n} fissate',
},
'settings.node_pins_clear': 'Cancella le identità fissate',
'settings.passphrase': 'Passphrase',
'settings.passphrase_hint': "Cambia la passphrase di questo account. Le tue chiavi di identità vengono ricodificate su ogni gruppo il cui nodo è online; a un gruppo il cui nodo è offline dovrai riunirti in seguito.",
'settings.passphrase_change': 'Cambia la passphrase',
'settings.passphrase_current': 'Passphrase attuale',
'settings.passphrase_new': 'Nuova passphrase',
'settings.passphrase_new_repeat': 'Ripeti la nuova passphrase',
'settings.continue': 'Continua',
'settings.done': 'Fatto',
'settings.passphrase_confirm_intro': 'Le tue chiavi di identità verranno ora ricodificate su ogni gruppo il cui nodo è raggiungibile:',
'settings.passphrase_reachable': 'Aggiornato ora',
'settings.passphrase_unreachable': 'Non raggiungibile',
'settings.passphrase_fallback_note': "Per un gruppo non raggiungibile, chiedi al suo operatore di rimuovere il tuo pin e di inviarti un nuovo codice di invito, poi riunisciti. I tuoi file e messaggi non vanno persi.",
'settings.passphrase_confirm_btn': 'Cambia',
'settings.passphrase_working': 'Ricodifica delle tue chiavi in corso…',
'settings.passphrase_done': 'Passphrase cambiata.',
'settings.passphrase_needs_operator': 'Questi gruppi richiedono ancora un intervento — chiedi a ogni operatore di rimuovere il tuo pin e di inviarti un nuovo codice:',
'settings.pw_too_short': 'La nuova passphrase deve contenere almeno 12 caratteri.',
'settings.pw_mismatch': 'Le due nuove passphrase non corrispondono.',
'settings.pw_same': 'La nuova passphrase deve essere diversa da quella attuale.',
'settings.pw_wrong_current': 'La passphrase attuale non è corretta. Non è stato cambiato nulla.',
'settings.recovery': 'Chiave di recupero',
'settings.recovery_hint': "Aggiunge a ogni gruppo una copia della sua identità cifrata con la sua chiave di recupero. Lo faccia una volta in ogni browser che usa; senza di essa, una passphrase persa costringe a riunirsi a ogni gruppo a mano.",
'settings.recovery_loaded': 'Caricata in questo browser — i nuovi gruppi sono coperti automaticamente.',
'settings.recovery_open': 'Inserire la chiave di recupero',
'settings.recovery_input_ph': 'Incolli la sua chiave di recupero',
'settings.recovery_submit': 'Aggiungi le copie di backup',
'settings.recovery_working': 'Aggiornamento dei suoi gruppi…',
'settings.recovery_done': 'I suoi gruppi ora hanno una copia di recupero.',
'settings.recovery_partial': 'Non è stato possibile raggiungere questi gruppi. Li apra più tardi, o riesegua l’operazione:',
'settings.recovery_need_relogin': 'Esca e rientri, poi riprovi.',
'settings.danger': "Elimina l'account",
'settings.sessions_heading': 'Sessioni',
'settings.sign_out_everywhere': 'Esci ovunque',
'settings.sign_out_everywhere_hint': 'Termina tutte le sessioni del tuo account, compresa questa: utile se sei rimasto connesso su un computer non tuo. Un\'applicazione desktop rientra con la sua chiave del dispositivo finché non rimuovi quel dispositivo.',
'settings.sign_out_everywhere_confirm': 'Uscire da tutti i browser e le applicazioni, compreso questo?',
'settings.delete_hint': "Rimuove il suo account, le sue adesioni ai gruppi e le sue "
+ "notifiche dall'hub, e libera il suo nome utente. Non arriva a ciò che si trova "
+ 'sui node: i file che ha caricato restano dove il loro operatore li conserva, e '
+ 'ogni node mantiene l’identità che ha fissato per lei finché il suo operatore non '
+ 'la rimuove. I registri di connessione sono conservati per un anno, come impone '
+ 'la legge.',
'settings.delete_account': 'Elimina il mio account',
'settings.delete_confirm': 'Inserisca la sua passphrase per confermare. '
+ "L'operazione non può essere annullata.",
'settings.delete_confirm_btn': 'Elimina definitivamente',
'settings.cancel': 'Annulla',
'settings.appearance': 'Aspetto',
'settings.theme': 'Tema',
'settings.theme_light': 'Chiaro',
'settings.theme_dark': 'Scuro',
'settings.theme_system': 'Sistema',
'settings.language': 'Lingua',
'settings.about': 'Informazioni',
'firstrun.title': 'Which hub?',
'firstrun.hint': 'A hub holds your account and introduces you to nodes. It never sees your files, your messages or your keys.',
'firstrun.btn': 'Continue',
'firstrun.checking': 'Checking…',
'firstrun.note': 'There is no default on purpose: this application only trusts a hub for its API, never for the interface, which ships with the application itself.',
'device.this_device': 'This device',
'settings.keys_heading': 'Keys on this device',
'settings.hub_heading': 'Hub',
'settings.hub_current': 'Currently',
'settings.hub_hint': 'Changing this signs you out and restarts the window.',
'settings.hub_change': 'Change',
'settings.keys_where': 'Protected by',
'settings.keys_unprotected': 'No system keyring is running, so your keys are encrypted with a key that is not a secret. Anyone who can read this machine’s files can read them. Start a keyring, or treat this device as untrusted.',
'settings.keys_unavailable': 'This system offers no key storage at all, so this device cannot be remembered — you will be asked for your passphrase each time. That is the safe outcome: nothing was stored unprotected.',
'settings.version': 'Versione',
'settings.protocol': 'Protocollo',
'settings.role': 'Ruolo',
'settings.groups': 'Notifiche dei gruppi',
'settings.notifications': 'Notifiche',
'settings.node_key': 'Collega un node',
'settings.node_key_desc': 'Se gestisce un node MeshBay, incolli qui la sua chiave '
+ 'pubblica Ed25519 per collegarlo al suo account. Esegua `meshbay-node status` '
+ 'sulla macchina che ospita il node per leggere la chiave, oppure la copi da '
+ 'Node → Overview nel client desktop.',
'settings.node_key_placeholder': 'Incolli la chiave pubblica Ed25519 del node (base64)',
'settings.node_key_submit': 'Collega il node',
'settings.node_key_success': 'Node collegato correttamente',
'settings.node_key_current': 'Chiave del node collegato',
// Sidebar
'sidebar.create_group': 'Crea un gruppo',
'sidebar.settings': 'Impostazioni',
'sidebar.admin': 'Amministrazione',
// User menu
'usermenu.language': 'Lingua',
'usermenu.settings': 'Impostazioni',
'usermenu.theme_light': 'Tema chiaro',
'usermenu.theme_dark': 'Tema scuro',
'usermenu.logout': 'Esci',
// Admin panel
'admin.title': 'Amministrazione',
'admin.tab_stats': 'Statistiche',
'admin.tab_users': 'Utenti',
'admin.tab_groups': 'Gruppi',
'admin.tab_nodes': 'Node',
'admin.tab_logs': 'Registri',
'admin.col_observed_ip': 'Visto da',
'admin.col_hint': 'Indirizzo dichiarato',
'admin.col_last_seen': 'Ultimo annuncio',
'admin.node_online': 'online',
'admin.node_offline': 'offline',
'admin.no_nodes': 'Nessun node registrato',
'admin.nodes_hint': '«Visto da» è l’indirizzo dal quale l’annuncio è effettivamente '
+ 'arrivato, in una richiesta firmata con la chiave del node — è quello su cui '
+ 'basarsi per rispondere a una richiesta formale. L’indirizzo dichiarato è quello '
+ 'che il node crede essere il proprio, appreso da un server STUN e inviato a noi; '
+ 'serve a raggiungere il node e non prova nulla.',
'admin.tab_blocklist': 'Elenco dei blocchi',
'admin.tab_general': "General",
'admin.general_groups_heading': "Groups",
'admin.allow_public_groups_label': "Allow members to create public groups",
'admin.allow_public_groups_hint': "When off, new groups can only be private and invite-only. Existing public groups are left as they are — suspend them one by one from the Groups tab.",
'admin.mail_heading': "Posta in uscita",
'admin.mail_hint': "Cosa invia questo hub, e quanto. I due che contano sono il budget orario, che nessun numero di account può alzare, e il limite giornaliero per destinatario, che è ciò che vive davvero chi viene sommerso.",
'admin.mail_this_hour': "Inviati in quest'ora",
'admin.mail_remaining': "{general} rimasti per registrazioni e cambi di indirizzo, {recovery} per reimpostazioni della passphrase e inviti.",
'admin.mail_hourly_budget': "Messaggi all'ora (intera istanza)",
'admin.mail_hourly_reserved_for_recovery': "Di cui riservati a reimpostazioni e inviti",
'admin.mail_destination_daily_cap': "Messaggi al giorno verso uno stesso destinatario",
'admin.mail_destination_cooldown_seconds': "Secondi tra due messaggi allo stesso destinatario",
'admin.mail_invite_link_daily_cap': 'E-mail con link d’invito al giorno per account',
'admin.mail_verification_resend_cooldown': "Secondi tra due codici di registrazione",
'admin.mail_reset_cooldown': "Secondi tra due codici di reimpostazione",
'admin.mail_email_change_cooldown': "Secondi prima che un account possa proporre un altro indirizzo",
'admin.mail_save': "Salva i limiti di posta",
'admin.mail_reset_defaults': "Ripristina i valori predefiniti",
'admin.login_heading': "Accesso",
'admin.login_hint': "Dopo questo numero di passphrase errate per uno stesso nome utente, l'accesso con passphrase viene rifiutato per la durata indicata. Le sessioni già aperte e i dispositivi registrati continuano a funzionare, e la reimpostazione della passphrase rimuove il blocco. 0 lo disattiva.",
'admin.session_heading': 'Sessioni',
'admin.session_hint': 'Un browser si disconnette dopo il primo numero di ore senza interazione né riproduzione in corso; l\'applicazione desktop no. Una sessione inutilizzata per il secondo numero non viene più rinnovata, e nessuna dura oltre il terzo.',
'admin.session_browser_idle_hours': 'Disconnessione del browser dopo inattività (ore)',
'admin.session_refresh_idle_hours': 'Una sessione inutilizzata scade dopo (ore)',
'admin.session_max_hours': 'Durata massima di una sessione (ore)',
'admin.session_save': 'Salva impostazioni sessione',
'admin.login_max_failures': "Passphrase errate prima del blocco",
'admin.login_lockout_minutes': "Durata del blocco (minuti)",
'admin.login_save': "Salva i limiti di accesso",
'admin.mail_state_is_in_stats': "Il consumo dell'ora corrente è mostrato in Statistiche.",
'admin.mail_state_hint': "Reimpostazioni e inviti possono spendere l'intero budget; registrazioni e cambi di indirizzo non possono intaccare la quota riservata. Gli amministratori vengono avvisati una volta all'ora quando uno dei due limiti viene raggiunto.",
'admin.mail_left_signups': "Rimanente per le registrazioni",
'admin.mail_left_recovery': "Rimanente per reimpostazioni e inviti",
'admin.mail_recipients': "Destinatari contati oggi",
'admin.mail_alert_all': "Questo hub ha smesso di inviare posta per quest'ora. Anche reimpostazioni e inviti sono rifiutati.",
'admin.mail_alert_general': "La quota per registrazioni e cambi di indirizzo è esaurita per quest'ora. Reimpostazioni e inviti partono ancora.",
'admin.settings_readonly': "Only an admin can change these settings.",
// Admin stats
'admin.stat_users': 'Utenti',
'admin.stat_groups': 'Gruppi',
'admin.stat_nodes': 'Node',
'admin.stat_online': 'Node online',
// Admin users
'admin.users_search': 'Cerca utenti...',
'admin.col_username': 'Nome utente',
'admin.col_role': 'Ruolo',
'admin.col_status': 'Stato',
'admin.col_created': 'Creazione',
'admin.col_actions': 'Azioni',
'admin.col_email': 'E-mail',
'admin.col_groups': 'Gruppi',
'admin.no_users': 'Nessun utente trovato',
'admin.btn_suspend': 'Sospendi',
'admin.btn_unsuspend': 'Riattiva',
'admin.btn_revoke': "Revoke",
'admin.revoke_group_confirm': "Revoke the group \"{group}\"? This pushes a signed revocation to every node hosting it and cannot be undone from here. Suspend it instead if you only need to pause it.",
'admin.btn_details': 'Dettagli',
'admin.btn_delete': 'Elimina',
'admin.delete_confirm': 'Eliminare l’account «{user}» e tutti i gruppi che possiede? L’operazione non può essere '
+ 'annullata. I file che ha caricato restano sui node che li ospitano, e ogni node '
+ 'mantiene l’identità che ha fissato finché il suo operatore non la rimuove. La '
+ 'sospensione è l’opzione reversibile.',
'admin.user_detail': "Dettagli dell'utente",
'admin.btn_close': 'Chiudi',
'admin.self_note': '(lei)',
// Admin groups
'admin.col_name': 'Nome',
'admin.col_visibility': 'Visibilità',
'admin.col_members': 'Membri',
'admin.no_groups': 'Nessun gruppo trovato',
// Admin logs
'admin.col_time': 'Ora',
'admin.col_event': 'Evento',
'admin.col_user': 'Utente',
'admin.col_ip': 'IP',
'admin.col_detail': 'Dettaglio',
'admin.filter_all': 'Tutti gli eventi',
'admin.no_logs': 'Nessun registro trovato',
'admin.btn_load_more': 'Carica altri',
// Admin blocklist
'admin.col_hash': 'Hash',
'admin.col_reason': 'Motivo',
'admin.col_date': 'Data',
'admin.col_added_by': 'Aggiunto da',
'admin.no_blocked': 'Nessun hash bloccato',
'admin.add_hash': "Aggiungi un hash all'elenco dei blocchi",
'admin.hash_placeholder': 'hash blake3 (64 caratteri esadecimali)',
'admin.reason_placeholder': 'Motivo',
'admin.btn_block': 'Blocca',
'admin.btn_unblock': 'Sblocca',
// Notifications
// Create group
'create_group.title': 'Crea un gruppo',
'create_group.name': 'Nome del gruppo',
'create_group.name_placeholder': 'es. Foto di famiglia, File del progetto...',
'create_group.join_policy': 'Modalità di adesione',
'create_group.invite': 'Solo su invito',
'create_group.invite_desc': "I membri devono essere invitati da un amministratore. Il gruppo non è elencato pubblicamente.",
'create_group.open': 'Aperto (chiunque può partecipare)',
'create_group.open_desc': "Elencato tra i gruppi pubblici: chiunque può trovarlo e unirsi senza approvazione.",
'create_group.description': 'Descrizione',
'create_group.description_hint': 'Di cosa si occupa questo gruppo? (facoltativo)',
'create_group.submit': 'Crea',
'create_group.hint': 'Un gruppo ha bisogno di un node che ospiti i file. Può creare '
+ 'il gruppo ora e collegare un node più avanti.',
'create_group.creating': 'Creazione in corso...',
// Members
'members.col_role': 'Ruolo',
'members.group_role': 'Ruolo nel gruppo',
'members.admin': 'Amministratore',
'members.group_admin': 'Amministratore del gruppo',
'members.owner': 'Proprietario',
'members.member': 'Membro',
'members.invite_title': 'Invita un membro',
'members.username_placeholder': 'Nome utente',
'members.invite_btn': 'Invita',
'members.invite_needs_pairing': 'Gli inviti sono firmati con la chiave che questo '
+ 'node ha fissato per il suo browser: lo associ qui sotto prima di invitare '
+ 'chiunque.',
'members.invite_ask_operator': 'Solo l’operatore del node che ospita questo gruppo '
+ 'può invitare, da un browser associato a esso.',
'members.remove': 'Rimuovi',
'members.remove_confirm': 'Rimuovere {user} da questo gruppo? Il suo account, gli '
+ 'altri gruppi e i file che ha caricato non vengono toccati.',
'members.remove_hint': 'Rimuovere qualcuno gli toglie l’adesione e impedisce al node '
+ 'di consegnargli la chiave del gruppo. Non elimina il suo account e non recupera '
+ 'la chiave che già possiede — la ruoti sul node (meshbay-node gek-init) se la '
+ 'cosa è importante.',
'members.pair_title': 'Associ questo browser al suo node',
'members.pair_hint': 'Il suo node accetta le azioni da operatore — inviti, '
+ 'eliminazione di file — solo da un browser a cui è stato associato. Esegua '
+ '`meshbay-node operator pair` sul node e digiti qui il codice. Il codice non '
+ 'passa mai per l’hub.',
'members.pair_btn': 'Associa',
'members.pair_success': 'Questo browser è ora associato al node.',
'members.invite_code_ready': 'Codice di invito per {user}:',
'members.invite_email_sent': "Un'e-mail con il codice è stata inviata a questo membro.",
'members.invite_email_failed': "Impossibile inviare l'e-mail — condivida il codice manualmente.",
'members.invite_email_opt': 'Invia l’invito per e-mail (potrebbe finire nello spam)',
'members.link_title': "Invita tramite link",
'members.link_hint': "Per chi forse non ha ancora un account. Il link funziona una volta, e solo per un account registrato con questo indirizzo.",
'members.link_email_placeholder': "Indirizzo e-mail",
'members.link_btn': "Crea link",
'members.link_ready': "Link d’invito per {email}:",
'members.link_copy': "Copia",
'members.link_copied': "Copiato",
'members.link_email_sent': "Il link è stato inviato per e-mail.",
'members.link_email_refused': "Impossibile inviare l’e-mail — condivida il link di persona.",
'members.links_pending': "Link d’invito",
'members.link_status_redeemed': "usato da {user}",
'members.link_status_expired': "scaduto",
'members.link_expires': "scade il {date}",
'members.link_cancel': "Annulla",
'invite.title': "È stato invitato",
'invite.none': "Nessun invito in attesa in questa scheda. Riapra il link ricevuto.",
'invite.signed_out': "Qualcuno l’ha invitata in un gruppo su questo hub. Crei un account con l’indirizzo e-mail a cui è stato inviato l’invito, o acceda se ne ha già uno.",
'invite.register': "Crea un account",
'invite.signin': "Accedi",
'invite.confirm': "{inviter} la invita a unirsi a {group}.",
'invite.join': "Unisciti",
'invite.ignore': "Ignora",
'invite.open': "Apri il gruppo",
'invite.already_member': "È già membro di {group}.",
'invite.other_account': "Questo invito è stato inviato a un altro indirizzo e-mail. Acceda con l’account registrato con quell’indirizzo — alias e punti devono corrispondere esattamente.",
'invite.invalid': "Questo invito non è più valido: è stato usato, annullato o è scaduto. Ne chieda uno nuovo.",
'invite.joining': "Adesione…",
'invite.after_register': "Acceda per unirsi al gruppo a cui è stato invitato.",
'invite.paste_title': "Unisciti con un link d’invito",
'invite.paste_placeholder': "Incolli qui il link",
'invite.paste_btn': "Continua",
'invite.paste_invalid': "Questo non è un link d’invito.",
'invite.paste_other_hub': "Questo invito è per un altro hub.",
'group.link_spent': "Questo link d’invito non è più valido sulla macchina che ospita il gruppo. Ne chieda uno nuovo.",
'members.invite_code_hint': 'Può anche condividere questo codice tramite un altro canale (es. SMS). '
+ 'Lo inserirà la prima volta che aprirà questo gruppo.',
'transfers.title': 'Trasferimenti',
'transfers.clear': 'Rimuovi i completati',
'transfers.cancel': 'Annulla',
'transfers.open': 'Apri',
'transfers.done': 'Completato',
'transfers.cancelled': 'Annullato',
'transfers.preparing': 'Preparazione…',
'transfers.waiting_own_slots': 'In attesa — i suoi posti sono occupati',
'transfers.waiting_node': 'In attesa — {n} prima',
'transfers.summary': '{running} in corso · {waiting} in attesa',
'transfers.group_running': 'In corso',
'transfers.group_waiting': 'In attesa',
'transfers.group_paused': 'In pausa',
'transfers.group_finished': 'Completati',
'transfers.cancel_one': 'Annulla {name}',
'transfers.pause': 'Sospendi',
'transfers.resume': 'Riprendi',
'transfers.paused': 'In pausa',
'transfers.not_pausable': 'Non si può sospendere — scelga una cartella di download nelle Impostazioni',
'transfers.pause_one': 'Sospendi {name}',
'transfers.resume_one': 'Riprendi {name}',
'transfers.eta_seconds': '{n} s rimanenti',
'transfers.eta_minutes': '{n} min rimanenti',
'transfers.eta_hours': '{n} h rimanenti',
'transfers.failed': 'Non riuscito',
'group.select': 'Seleziona',
'group.select_done': 'Fine',
'group.actions': 'Azioni ({n})',
'group.download_n': 'Scarica ({n})',
'group.download_zip_n': 'Scarica le cartelle in zip ({n})',
'group.download_zip_one': 'Scarica la cartella in zip',
'group.delete_n': 'Elimina ({n})',
'group.delete_n_confirm': {
one: 'Eliminare {n} elemento? {names}',
other: 'Eliminare {n} elementi? {names}',
},
'group.download_zip': {
one: 'Scarica in zip ({n} file)',
other: 'Scarica in zip ({n} file)',
},
'group.zip_empty': 'Quella cartella non contiene nulla da scaricare.',
'group.zip_no_stream': 'Questo browser non sa scrivere un download direttamente su '
+ 'disco, quindi {name} ({size}) deve prima essere costruito in memoria. Con un '
+ 'archivio grande l’operazione può fallire. Continuare?',
'group.zip_too_large': '«{name}» occupa {size} e una cartella può essere scaricata in zip solo fino '
+ 'a {limit}. Prendi una sottocartella alla volta, o i file singolarmente.',
'group.rmdir': 'Elimina la cartella',
'group.rmdir_confirm': 'Eliminare la cartella «{name}»? Deve essere vuota.',
'group.rmdir_not_empty': 'Quella cartella non è vuota. Elimini prima ciò che '
+ 'contiene — qui nulla cancella file che lei non vede.',
'group.desc_edit': 'Modifica la descrizione',
'group.desc_add': 'Aggiungi una descrizione',
'group.desc_save': 'Salva',
'group.desc_cancel': 'Annulla',
'group.desc_placeholder': 'A cosa serve questo gruppo — i membri lo vedono sulla '
+ 'loro pagina iniziale.',
'group.join_code_title': 'Questo node deve riconoscerla',
'group.join_code_hint': 'Chieda il codice monouso a chi l’ha invitata e lo inserisca '
+ 'qui. Dopodiché questo browser è riconosciuto e non le verrà più chiesto.',
'group.join_code_btn': 'Partecipa',
'group.pass_title': 'Inserisca la sua passphrase',
'group.pass_hint': 'Questo browser non ha ancora sbloccato le sue chiavi. Inserisca la sua passphrase una volta per aprire i suoi gruppi qui.',
'group.pass_btn': 'Sblocca',
'notif.purge': 'Cancella tutto',
'notif.title': 'Notifiche',
'notif.empty': 'Nessuna notifica',
'notif.mark_all_read': 'Segna tutto come letto',
// Sidebar
'sidebar.search': 'Cerca file',
// Status
// Search
'search.placeholder': 'Cerca in tutti i gruppi...',
'search.no_results': 'Nessun file corrisponde alla sua ricerca.',
'search.col_group': 'Gruppo',
'search.result_count': {
one: '{n} file trovato',
other: '{n} file trovati',
},
'search.hint': 'Digita un termine per cercare in tutti i tuoi gruppi.',
'search.indexing': 'Indicizzazione di {done} / {total} gruppi…',
'search.unreachable': { one: '{n} gruppo non raggiungibile', other: '{n} gruppi non raggiungibili' },
'search.n_sources': { one: '{n} fonte', other: '{n} fonti' },
'search.view_files': 'File',
'search.view_videos': 'Video',
'search.view_music': 'Musica',
'search.view_photos': 'Foto',
'search.connecting': 'Connessione ai gruppi…',
// Presence, chat paging, leaving a group, the profile page
'presence.online': 'Un node che ospita questo gruppo è online',
'presence.offline': 'Nessun node raggiungibile per questo gruppo',
'presence.unknown': 'Non ancora verificato',
'presence.indexing': 'Indicizzazione in corso — {pct}%',
'indexdock.kind_scan': "Indicizzazione",
'indexdock.kind_rescan': "Rilettura",
'indexdock.kind_reconcile': "Allineamento",
'indexdock.kind_watch': "Indicizzazione dei nuovi file",
'indexdock.waiting': "In attesa di indicizzazione",
'indexdock.done': "Indicizzazione completata",
'indexdock.listing': "Elenco dei file…",
'indexdock.percent': "{pct}%",
'indexdock.files': "{done} / {total} file",
'indexdock.next': "Poi: {roots}",
'indexdock.next_count': "In attesa: {count}",
'indexdock.open': "Apri le impostazioni di questo gruppo",
'indexdock.hide': "Nascondi fino alla prossima indicizzazione",
'chat.load_older': 'Carica {n} messaggi precedenti',
'chat.start_of_history': 'Inizio della conversazione',
'chat.today': 'Oggi',
'chat.yesterday': 'Ieri',
'chat.unread': 'Nuovi messaggi',
'chat.jump_latest': 'Vai ai più recenti',
'chat.jump_new': 'Nuovi messaggi',
'chat.unreadable': 'Impossibile leggere questo messaggio',
'chat.unreadable_signature': 'Messaggio non verificato: la firma non corrisponde al mittente',
'chat.unreadable_epoch': 'Scritto prima che questo dispositivo potesse leggere questa conversazione',
'chat.unreadable_keys': 'Chiavi della chat non disponibili: riconnettiti per leggerlo',
'chat.unreadable_decrypt': 'Impossibile decifrare questo messaggio',
'chat.unreadable_envelope': 'Questo messaggio è arrivato incompleto',
'chat.unreadable_format': 'Questo messaggio richiede una versione più recente di MeshBay',
'chat.key_changed': 'Questo account usa una chiave che non hai mai visto',
'chat.key_changed_hint': 'Il nodo dice che questo messaggio viene da questo account, ma la sua chiave di dispositivo non è una che hai accettato e nulla l\'ha firmata. Può essere un nuovo dispositivo aggiunto altrove — o il nodo che nomina la persona sbagliata.',
'chat.encrypted_needs_newer': 'Questa conversazione è cifrata e questo client non può leggerla: aggiorna MeshBay',
'chat.encrypted_cannot_send': 'Questa conversazione è cifrata e questo dispositivo non può ancora scriverci',
'group.leave': 'Esci dal gruppo',
'group.leave_confirm': 'Uscire da «{name}»? Perderà l’accesso ai suoi file e alla chat. I file che ha caricato restano sul node, e il node mantiene l’identità che ha fissato per lei finché il suo operatore non la rimuove.',
'group.mute': 'Mute notifications',
'group.unmute': 'Unmute notifications',
'profile.title': 'Profilo',
'usermenu.profile': 'Profilo',
// First-run setup wizard
'setup.welcome_title': 'Benvenuto su MeshBay',
'setup.welcome_message': 'Il suo node ospita i suoi file — cifrati, sulla sua macchina. Avviamolo e creiamo il suo primo gruppo.',
'setup.node_detected': 'Node locale rilevato e in funzione.',
'setup.node_not_running': 'Il suo node è installato ma non è in esecuzione.',
'setup.node_start': 'Avvia node',
'setup.node_starting': 'Avvio del node…',
'setup.node_started': 'Node avviato.',
'setup.node_not_installed': 'meshbay-node non è installato su questa macchina.',
'setup.node_install_hint': 'Lo installi con il suo gestore di pacchetti, poi torni qui.',
'setup.node_startup_hint': 'Una volta che il node è in esecuzione, visiti «Node» nella barra laterale in qualsiasi momento per farlo avviare automaticamente all\'accesso, o eseguirlo come servizio in background.',
'setup.skip': 'Salta — crea un gruppo senza node locale',
'setup.create_group': 'Crea il suo primo gruppo',
'setup.dismiss': 'Salta la configurazione',
// Group misc
'group.retry': 'Riprova',
// Sidebar
'sidebar.node': 'Node',
// Node admin
'node.title': 'Node',
'node.service_checking': 'Verifica del servizio del nodo…',
'node.service_not_installed': 'Non installato come servizio',
'node.service_state_active': 'In esecuzione',
'node.service_state_inactive': 'Arrestato',
'node.service_state_failed': 'Non riuscito',
'node.service_state_activating': 'Avvio…',
'node.service_state_deactivating': 'Arresto…',
'node.service_state_unknown': 'Sconosciuto',
'node.service_start': 'Avvia',
'node.service_starting': 'Avvio…',
'node.service_stop': 'Arresta',
'node.service_stopping': 'Arresto…',
'node.service_restart': 'Riavvia',
'node.service_restarting': 'Riavvio…',
'node.service_mode_hint': 'In esecuzione come servizio in background — si avvia all\'avvio del sistema, prima dell\'accesso.',
'node.startup_mode_label': 'Avvia automaticamente:',
'node.startup_mode_off': 'Disattivato (avvio manuale)',
'node.startup_mode_signin': 'All\'accesso',
'node.startup_mode_service': 'Come servizio in background (si avvia all\'avvio del sistema)',
'node.startup_mode_updating': 'Cambio modalità — controlli se compare una richiesta di amministratore…',
'node.startup_mode_service_unavailable_hint': 'La modalità servizio in background richiede una build installata. Per test locali, eseguire "meshbay-node service install" da un PowerShell con privilegi di amministratore.',
'node.not_operator': 'Impossibile raggiungere il suo node. Si assicuri che sia in esecuzione.',
'node.offline': 'Node non in linea',
'node.retry': 'Riprova',
'node.pair_needed': "Nessun operatore associato. Inserisci un codice di associazione per abilitare le operazioni di amministrazione (inviti, eliminazione file).",
'node.pair_code_placeholder': 'Codice di associazione',
'node.pair_button': 'Associa questo browser',
'node.pair_success': 'Associazione riuscita.',
'node.reload': 'Ricarica configurazione',
'node.reloaded': 'Configurazione ricaricata. Le modifiche alle directory dei gruppi esistenti sono ora attive.',
'node.restart_needed': "Dopo l'aggiunta: inizializzi la chiave di gruppo (meshbay-node gek-init --group <nome>).",
'node.no_groups': 'Nessun gruppo configurato su questo node.',
'node.stale': 'non presente sul hub',
'node.settings': 'Node settings',
'node.settings_edit_hint': 'Changes are applied immediately and saved to node.toml.',
'node.settings_save': 'Save',
'node.settings_saving': 'Saving…',
'node.settings_saved': 'Settings saved.',
'node.setting_invite_ttl': 'Invitation TTL',
'node.setting_pair_ttl': 'Pairing code TTL',
'node.setting_device_ttl': 'Device request TTL',
'node.setting_max_streams': 'Max concurrent streams',
'node.setting_max_downloads': 'Download simultanei massimi',
'node.setting_max_uploads': 'Caricamenti simultanei massimi',
'node.setting_transcode': 'Transcode incompatible video',
'node.setting_max_upload': 'Caricamento singolo massimo',
'node.setting_unit_gb': 'GB',
'node.setting_unit_hours': 'hours',
'node.setting_unit_minutes': 'min',
'node.setting_on': 'On',
'node.setting_off': 'Off',
'node.unavailable': 'non disponibile',
'node.files': {
one: '1 file',
other: '{n} file',
},
'node.peers': {
one: '1 peer',
other: '{n} peer',
},
'node.roots': 'Directory',
'node.add_root': 'Aggiungi directory',
'node.remove_root': 'Rimuovi',
'node.root_no_signing_key': 'Nessuna chiave di firma disponibile: associa prima questo dispositivo al nodo',
'node.root_no_route': 'Nessuna via verso il nodo: connettiti a esso oppure usa l\'applicazione sulla macchina che lo ospita',
'node.root_remove_last': 'Un gruppo ha bisogno di almeno una directory',
'node.root_path_hint': 'Il percorso come lo vede il nodo, sulla macchina che ospita questo gruppo.',
'node.root_path_placeholder': '/home/user/Media',
'node.root_path': 'Percorso',
'node.directory': 'Directory',
'node.root_added': 'Directory aggiunta.',
'node.root_remove_confirm': 'Rimuovere «{name}» da questo gruppo?',
'node.root_removed': "Directory rimossa. Si consiglia un riavvio per aggiornare l'indice.",
'node.attach_group': 'Aggiungi gruppo',
'node.attach_pick': 'Gruppo da ospitare',
'node.attach_dir': 'Directory condivisa',
'node.attach_upload_dir': 'Directory di caricamento',
'node.attach_upload_label': 'Directory di caricamento (per file caricati e allegati della chat)',
'node.attached': 'Gruppo aggiunto e caricato. Esegua meshbay-node gek-init --group {name} se non lo ha già fatto.',
'node.detach_group': 'Rimuovi gruppo',
'node.detach_confirm': 'Rimuovere «{name}» da questo node?',
'node.detached': 'Gruppo rimosso.',
'node.gek': 'Chiave di gruppo',
'node.no_gek': 'Nessuna chiave di gruppo',
'node.gek_init_hint': 'Nessuna chiave di gruppo ancora. Esegua GEK init dalla riga di comando per configurarla.',
'node.gek_public_hint': 'La rotazione delle chiavi non è disponibile per i gruppi pubblici.',
'node.gek_rotate': 'Ruota chiave di gruppo',
'node.gek_rotate_confirm': 'Ruotare la chiave di gruppo? I membri connessi riceveranno la nuova chiave automaticamente. I contenuti già scaricati non saranno interessati.',
'node.gek_rotated': 'Chiave di gruppo ruotata.',
'node.roster': 'Roster',
'node.roster_load': 'Carica roster',
'node.roster_empty': 'Nessun membro fissato ancora.',
'node.roster_user': 'Utente',
'node.roster_role': 'Ruolo',
'node.roster_status': 'Stato',
'node.roster_via': 'Fissato tramite',
'node.roster_invites': {
one: '1 invito in sospeso',
other: '{n} inviti in sospeso',
},
'node.unpin': 'Rimuovi identità',
'node.unpin_confirm': "Rimuovere l'identità di «{name}»? Dovrà effettuare di nuovo il pairing.",
'node.unpin_done': 'Identità rimossa.',
'node.denylist': 'Lista di blocco',
'node.denylist_load': 'Carica lista di blocco',
'node.denylist_empty': 'La lista di blocco è vuota.',
'node.denylist_count': {
one: '1 voce',
other: '{n} voci',
},
'node.denylist_remove': 'Rimuovi',
'node.denylist_clear_all': 'Cancella tutto',
'node.denylist_clear_confirm': 'Rimuovere «{subject}» dalla lista di blocco?',
'node.denylist_cleared': 'Voce della lista di blocco rimossa.',
// Settings — node
'settings_node.detach_failed_continue': 'Impossibile scollegare il gruppo dal node. Eliminare comunque dal hub?',
'settings_node.roots': 'Directory condivise',
'settings_node.scan_title': 'Scansione',
'settings_node.scan_hint': 'Con quale frequenza il node ricontrolla le sue directory per cambiamenti che potrebbe aver perso, e quanto tempo attende dopo una modifica prima di indicizzare un file.',
'settings_node.search_listed_title': 'Ricerca',
'settings_node.search_listed_label': 'Mostra questo gruppo nella ricerca',
'settings_node.search_listed_hint': 'Se disattivato, i file di questo gruppo non compaiono nella ricerca globale dei membri. I membri vedono comunque tutto aprendo il gruppo: lo esclude solo dall\'elenco globale e non nasconde nulla a nessuno.',
'settings_node.scan_reconcile_label': 'Intervallo di ricontrollo (minuti)',
'settings_node.scan_debounce_label': 'Attesa dopo una modifica (secondi)',
'settings_node.scan_save': 'Salva',
'settings_node.scan_saving': 'Salvataggio…',
'settings_node.scan_saved': 'Salvato.',
'settings_node.tmdb_title': 'Metadati TMDB',
'settings_node.tmdb_hint': "Permette all'app Video di mostrare locandine, trame e cast da TMDB. Disattivato significa solo miniature, senza alcuna richiesta verso terzi.",
'settings_node.tmdb_enabled': 'Attivato',
'settings_node.tmdb_disabled': 'Disattivato',
'settings_node.tmdb_token_label': 'Token API personalizzato (facoltativo)',
'settings_node.tmdb_token_placeholder': 'Lascia vuoto per usare il token predefinito',
'settings_node.tmdb_token_customized': 'È impostato un token personalizzato.',
'settings_node.tmdb_token_default': 'In uso il token predefinito.',
'settings_node.tmdb_save': 'Salva',
'settings_node.tmdb_language_label': 'Lingua',
'settings_node.tmdb_language_hint': 'Vale per tutti — una cache condivisa, non una richiesta per spettatore.',
'settings_node.video_root_title': 'Cartella radice di Video',
'settings_node.video_root_hint': "Quale cartella (o sottocartella) l'app Video considera come punto di ingresso per questo gruppo. In Video non viene mostrato nulla, e non viene eseguita alcuna ricerca TMDB, finché non ne viene scelta una.",
'settings_node.video_root_none': '— nessuna scelta —',
'settings_node.musicbrainz_title': 'Metadati MusicBrainz',
'settings_node.musicbrainz_hint': "Permette all'app Musica di mostrare copertine e nomi canonici da MusicBrainz quando una traccia non ha una copertina incorporata utilizzabile. Disattivato significa navigazione basata solo su tag/nome file, senza richieste a terzi.",
'settings_node.musicbrainz_enabled': 'Attivato',
'settings_node.musicbrainz_disabled': 'Disattivato',
'settings_node.video_root_save': 'Salva',
'settings_node.video_root_change_confirm': 'Cambiare la radice di Video sostituisce ciò che ogni membro vede nella scheda Video. Continuare?',
'settings_node.audio_root_title': 'Cartella radice di Musica',
'settings_node.audio_root_hint': 'Quale cartella (o sottocartella) l\'app Musica considera come punto di ingresso per questo gruppo. In Musica non viene mostrato nulla, e non viene letto alcun tag/copertina, finché non ne viene scelta una.',
'settings_node.audio_root_none': '— nessuna scelta —',
'settings_node.audio_root_save': 'Salva',
'settings_node.audio_root_change_confirm': 'Cambiare la radice di Musica sostituisce ciò che ogni membro vede nella scheda Musica. Continuare?',
'settings_node.photo_roots_title': 'Cartelle radice di Foto',
'settings_node.photo_roots_hint': "Quali cartelle l'app Foto considera come punti di ingresso per questo gruppo — una libreria fotografica è spesso distribuita su più cartelle, quindi se ne possono scegliere diverse. In Foto non viene mostrato nulla finché non ne viene aggiunta almeno una.",
'settings_node.photo_roots_none': '— nessuna scelta —',
'settings_node.photo_roots_add_placeholder': 'Aggiungi una cartella…',
'settings_node.photo_roots_add': 'Aggiungi',
'settings_node.photo_roots_remove': 'Rimuovi',
'settings_node.photo_roots_save': 'Salva',
'settings_node.shared_directories_title': 'Directory condivise',
'settings_node.shared_directories_hint': 'Cartelle condivise con questo gruppo. Attiva lettura-scrittura per consentire il caricamento, segna come rimovibile per unità esterne.',
'folder_tree.title_single': 'Scegli una cartella',
'folder_tree.title_multi': 'Scegli le cartelle',
'folder_tree.choose': 'Scegli…',
'folder_tree.remove': 'Rimuovi',
'folder_tree.add': 'Aggiungi una cartella…',
'folder_tree.confirm': 'Usa',
'folder_tree.expand': 'Espandi',
'folder_tree.collapse': 'Comprimi',
'folder_tree.nothing_selected': 'Niente selezionato',
'folder_tree.empty': 'Questo gruppo non ha ancora directory condivise.',
'folder_tree.writable_only': 'Qui si possono scegliere solo directory in lettura-scrittura: ci vengono scritti dei file.',
'folder_tree.no_writable_root': 'Questo gruppo non ha directory scrivibili. Attiva prima lettura-scrittura in Directory condivise.',
'folder_tree.read_only_blocked': 'Sola lettura: non vi si può scrivere',
'settings_app.save': 'Salva',
'settings_app.saving': 'Salvataggio…',
'settings_app.disabled_hint': 'Attiva questa applicazione per configurarla.',
'settings_app.video_directories_label': 'Cartelle video',
'settings_app.video_directories_hint': 'Dove si trovano film e serie di questo gruppo. Nulla al di fuori compare nella scheda Video.',
'settings_app.music_directories_label': 'Cartelle musica',
'settings_app.music_directories_hint': 'Dove si trovano gli album di questo gruppo. Nulla al di fuori compare nella scheda Musica.',
'settings_app.photo_directories_label': 'Cartelle foto',
'settings_app.photo_directories_hint': 'Dove si trovano gli album di questo gruppo. Nulla al di fuori compare nella scheda Foto.',
'settings_app.chat_directory_label': 'Cartella degli allegati',
'settings_app.chat_directory_hint': 'Dove vengono scritti i file inviati in chat. Deve essere una directory in lettura-scrittura.',
'settings_app.chat_no_writable_root': 'Questo gruppo non ha directory scrivibili, quindi gli allegati sono disattivati.',
'settings_app.chat_link_preview_label': 'Anteprime dei link',
'settings_app.chat_link_preview_hint': 'Quando un membro pubblica un link, il nodo recupera titolo e immagine della pagina. È una richiesta dalla tua macchina a un sito scelto da qualcun altro.',
'settings_app.chat_encrypted_always': 'La chat di questo gruppo è sempre cifrata. Non può essere disattivata.',
'settings_app.chat_rotate_epoch': 'Ruota la chiave della chat',
'settings_app.chat_rotate_epoch_hint': 'I membri continuano a leggere tutta la cronologia. Chi è stato rimosso dal gruppo non potrà leggere ciò che verrà scritto d\'ora in poi. Rimuovere un membro o un dispositivo lo fa già da solo.',
'settings_app.tmdb_token_prompt': 'Registrati su TMDB per generare la tua chiave API.',
'settings_app.tmdb_token_link': 'Ottieni una chiave',
'settings_node.roots_offline_hint': 'Non connesso al nodo: le modifiche passano dal nodo locale e hanno effetto al successivo ricaricamento.',
'settings_node.directories_title': 'Directory delle app',
'settings_node.directories_hint': 'Cartelle condivise, e quale di esse le app Video, Musica e Foto usano come proprio/i punto/i di ingresso.',
// Create-group wizard
'wizard.title': 'Crea gruppo',
'wizard.detecting': 'Rilevamento del node locale…',
'wizard.node_not_found': 'Nessun node locale rilevato. Si assicuri che meshbay-node sia in esecuzione.',
'wizard.node_offline_warning': 'Il node non è in esecuzione. Il gruppo sarà creato solo sul hub. Potrà collegare il node in seguito dalla pagina Node.',
'wizard.retry': 'Riprova',
'wizard.wrong_account': 'Il node è in esecuzione, ma il nome utente configurato non corrisponde al suo account. Verifichi hub.username in node.toml.',
'wizard.skip_node': 'Continua senza node',
'wizard.directories': 'Directory condivise',
'wizard.directories_hint': 'Scelga le directory che questo gruppo condividerà. Ne serve almeno una.',
'wizard.add_directory': 'Aggiungi directory',
'wizard.remove': 'Rimuovi',
'wizard.set_upload': 'Imposta come destinazione di caricamento',
'wizard.upload_target': 'destinazione di caricamento',
'wizard.create_and_setup': 'Crea e configura',
'wizard.create_hub_only': 'Crea solo sul hub',
'wizard.setting_up': 'Configurazione del gruppo…',
'wizard.step_create_hub': 'Creazione del gruppo sul hub',
'wizard.step_attach': 'Collegamento al node',
'wizard.step_apps': 'Scelta delle applicazioni',
'wizard.step_add_roots': 'Aggiunta delle directory',
'wizard.step_gek': 'Inizializzazione della chiave di cifratura',
'wizard.step_pair': 'Configurazione del pairing',
'wizard.step_index': 'Indicizzazione dei file',
'wizard.indexing_progress': 'Indicizzazione… {pct}%',
'wizard.indexing_current_dir': 'Scansione: {dir}',
'wizard.done_title': 'Gruppo creato',
'wizard.done_message': 'Il suo gruppo è pronto: il suo node lo ospita e la cifratura è configurata. Ora inviti dei membri dalla scheda Impostazioni.',
'wizard.go_to_group': 'Vai al gruppo',
'wizard.finish_later': 'Completa la configurazione in seguito',
'node.stun_servers': 'STUN Servers',
'node.stun_hint': 'Servers used for WebRTC NAT traversal (ICE candidate gathering).',
'node.stun_add': 'Add',
'node.stun_add_placeholder': 'stun:host:port',
'node.stun_remove': 'Remove',
'node.stun_move_up': 'Move up',
'node.stun_move_down': 'Move down',
'node.stun_save': 'Save',
'node.stun_saving': 'Saving…',
'node.stun_saved': 'STUN servers saved.',
'node.stun_reset': 'Reset to defaults',
'node.stun_empty': 'No STUN servers configured. NAT traversal will not work.',
'node.stun_duplicate': 'This server is already in the list.',
'node.stun_invalid': 'STUN URL must start with stun:',
'node.ice_interfaces': 'ICE Interfaces',
'node.ice_auto_hint': 'Auto mode — virtual and VPN interfaces (Tailscale, Docker, libvirt, etc.) are excluded automatically.',
'node.ice_manual_hint': 'Manual mode — only the listed interfaces are used for ICE candidate gathering.',
'node.ice_add': 'Add',
'node.ice_add_placeholder': 'e.g. eth0, wlp0s20f3',
'node.ice_remove': 'Remove',
'node.ice_save': 'Save',
'node.ice_saving': 'Saving…',
'node.ice_saved': 'ICE interfaces saved.',
'node.ice_reset_auto': 'Switch to auto',
'node.ice_duplicate': 'This interface is already in the list.',
'node.overview': 'Overview',
'node.overview_version': 'Version',
'node.overview_node_id': 'Node ID',
'node.overview_node_key': 'Chiave del node',
'node.overview_node_key_copy': 'Copia',
'node.overview_node_key_copied': 'Copiata',
'node.overview_quic_port': 'QUIC port',
'node.overview_hub': 'Hub',
'node.node_roster': 'Node roster',
'node.node_roster_hint': 'Every identity this node recognises, across all groups.',
'node.roster_scope': 'Scope',
'node.roster_scope_node': 'node-wide',
'node.peers_title': 'Connected peers',
'node.peers_empty': 'No peers connected.',
'node.peers_user': 'User',
'node.peers_ip': 'IP',
'node.peers_group': 'Group',
'node.peers_state': 'State',
'node.audit_title': 'Audit log',
'node.audit_all_events': 'All events',
'node.audit_empty': 'No audit entries.',
'node.audit_time': 'Time',
'node.audit_event': 'Event',
'node.audit_user': 'User',
'node.audit_ip': 'IP',
'node.audit_group': 'Group',
'node.audit_detail': 'Detail',
'node.maintenance': 'Maintenance',
'node.maintenance_cache': 'Index cache: {n} path(s) remembered.',
'node.maintenance_prune': 'Prune stale entries',
'node.maintenance_pruned': 'Pruned {n} stale cache entries.',
'node.loading': 'Loading…',
'node.audit_export': 'Export CSV',
'node.audit_exporting': 'Exporting…',
'node.audit_prev': 'Previous',
'node.audit_next': 'Next',
'node.audit_page': 'Page {n}',
'node.audit_exported': 'Exported {n} entries.',
'node.unlink_title': 'Unlink from hub',
'node.unlink_hint': 'Stops the hub from brokering connections to this node and listing it for group members. Your groups, keys, roster and files are untouched — the node keeps serving anyone who reaches it directly. Re-link any time from the group wizard or your profile.',
'node.unlink_button': 'Unlink this node',
'node.unlink_confirm': 'Unlink this node from the hub? The hub will stop routing members to it. Group data on disk is not affected.',
'node.unlink_done': 'Node unlinked from the hub. It may take a moment for the hub connection to drop.',
'node.tab_overview': 'Overview',
'node.tab_groups': 'Groups',
'node.tab_roster': 'Roster',
'node.tab_peers': 'Peers',
'node.tab_audit': 'Audit',
'node.tab_settings': 'Settings',
'node.root_rw': 'lettura-scrittura',
'node.root_ro': 'sola lettura',
'node.removable': 'rimovibile',
// In-page confirm/alert (ask.js)
'dialog.ok': 'OK',
'dialog.cancel': 'Annulla',
};
|