Compare commits

...

348 Commits

Author SHA1 Message Date
tsu-gu a65c0b6efc add slovak translation 2023-02-05 21:13:03 +00:00
tsu-gu a8de1f8467 Delete 'lib/l10n/cwtch.arb'
wrong file name
2023-02-05 21:12:26 +00:00
tsu-gu a97b6e3dd8 add slovak translation 2023-02-05 21:11:25 +00:00
Sarah Jamie Lewis 8417204a24 Update UI Tests to Run with Flutter 3 / In Drone (#621)
Reviewed-on: cwtch.im/cwtch-ui#621
Co-authored-by: Sarah Jamie Lewis <sarah@openprivacy.ca>
Co-committed-by: Sarah Jamie Lewis <sarah@openprivacy.ca>
2023-02-01 22:48:36 +00:00
Sarah Jamie Lewis bf05a52d63 Fix debug layout errors + Fix Quoted File Message Layout 2022-12-30 23:17:18 +00:00
Sarah Jamie Lewis 23ae1ac0bb Allow Links to be Selectable / Fix Performance of Message Row to prevent Spurious Renders 2022-12-30 23:17:18 +00:00
Dan Ballard 7bcde5a1fa Merge pull request 'Ensure all Scrollbars have dedicated Controllers' (#613) from scrollbars into trunk
Reviewed-on: cwtch.im/cwtch-ui#613
2022-12-30 23:16:00 +00:00
Sarah Jamie Lewis 723b0eb04d Ensure all Scrollbars have dedicated Controllers
Fix: #602
2022-12-30 23:16:00 +00:00
Dan Ballard 119e683d3d Merge pull request 'Error fetch lcg scripts on failure' (#612) from failonfetch into trunk
Reviewed-on: cwtch.im/cwtch-ui#612
2022-12-30 23:15:29 +00:00
Sarah Jamie Lewis 6abf506f18 Error fetch lcg scripts on failure 2022-12-28 18:55:06 -08:00
Sarah Jamie Lewis fd8790fab6 Fix Mac Builds 2022-12-16 20:54:30 +00:00
Sarah Jamie Lewis 00c385bb91 Merge pull request 'fix ffi DeactivatePeerEngine call - hide it - bump pubspec version' (#599) from fixDeactivate into trunk
Reviewed-on: cwtch.im/cwtch-ui#599
Reviewed-by: Sarah Jamie Lewis <sarah@openprivacy.ca>
2022-12-15 03:58:17 +00:00
Dan Ballard c2f46a0117 Merge branch 'noDisable' into fixDeactivate 2022-12-14 16:16:01 -08:00
Dan Ballard f7da7b4bb7 bump pubspec for 1.10 release 2022-12-14 16:15:30 -08:00
Dan Ballard 448900b48e no isable profiles till it works 2022-12-14 16:14:58 -08:00
Dan Ballard 4a11968567 update flutter-desktop linux container to use newer build with older glibc for compat 2022-12-13 09:54:36 -08:00
Dan Ballard abec0f3ad5 Merge pull request 'Fix Android File Sharing' (#600) from newjson into trunk
Reviewed-on: cwtch.im/cwtch-ui#600
2022-12-13 00:37:17 +00:00
Sarah Jamie Lewis 28ce08637b Fix Android File Sharing 2022-12-12 15:13:32 -08:00
Sarah Jamie Lewis c8bdc56507 Merge pull request 'save profile.autostart on create' (#598) from saveAutostart into trunk
Reviewed-on: cwtch.im/cwtch-ui#598
Reviewed-by: Sarah Jamie Lewis <sarah@openprivacy.ca>
2022-12-12 02:54:32 +00:00
Dan Ballard 4e895723e2 Merge branch 'trunk' into saveAutostart 2022-12-12 00:00:20 +00:00
Dan Ballard 9958c72d5d fix ffi DeactivatePeerEngine call 2022-12-11 15:59:37 -08:00
Dan Ballard c498a0c86a fix kotlin mainactivity createPeer 2022-12-11 15:14:05 -08:00
Sarah Jamie Lewis 596b65f12d Merge pull request 'add offline icon to server rows' (#597) from serverOfflineIcon into trunk
Reviewed-on: cwtch.im/cwtch-ui#597
2022-12-11 18:35:16 +00:00
Sarah Jamie Lewis 16eda0ce8a Merge branch 'trunk' into serverOfflineIcon 2022-12-11 18:35:09 +00:00
Dan Ballard ff332dee9c save profile.autostart on create 2022-12-11 10:16:08 -08:00
Dan Ballard 8eb2e73b10 add offline icon to server rows 2022-12-11 10:13:07 -08:00
Sarah Jamie Lewis 469624c46c Merge pull request 'add windowManager.focus to notification click response' (#595) from notiFocus into trunk
Reviewed-on: cwtch.im/cwtch-ui#595
2022-12-11 17:25:34 +00:00
Dan Ballard ffa52f697a add windowManager.focus to notification click response 2022-12-11 17:25:29 +00:00
Sarah Jamie Lewis f585122f57 Fix NPE Exception in Double Col View During Notification Swtiching 2022-12-11 09:18:18 -08:00
Sarah Jamie Lewis be26d40176 Update Splash Screen Animation with new Cwtch Logo (by Marcia) 2022-12-09 19:45:50 -08:00
Sarah Jamie Lewis 9a67008ece Update LCG + Fuzzbot Fix
Fix: #584
Fix: #575
2022-12-07 15:02:53 -08:00
Sarah Jamie Lewis 27a729d09a Fix Change Password for Unencrypted Profiles / Handle TokenUpdates with No Tokens / Format 2022-12-06 12:11:55 -08:00
Sarah Jamie Lewis 7ee619f1a6 Merge pull request 'lcgbump' (#591) from lcgBump into trunk
Reviewed-on: cwtch.im/cwtch-ui#591
2022-12-06 18:05:26 +00:00
Dan Ballard 993f42113e lcgbump 2022-12-06 09:35:37 -08:00
Sarah Jamie Lewis 6418170b2e Merge pull request '69 nice theme fixes' (#590) from 69nicefixes into trunk
Reviewed-on: cwtch.im/cwtch-ui#590
2022-12-06 00:33:23 +00:00
erinn 91f44d631c Merge branch 'trunk' into 69nicefixes 2022-12-06 00:27:58 +00:00
erinn 928a201a3b missing contactsview.dart from last commit 2022-12-05 16:16:08 -08:00
erinn 007fb02cba another double toast fix, more comment cleanup 2022-12-05 16:14:21 -08:00
erinn 65b0ecc0c3 many theme consistency updates per marcia 2022-12-05 16:06:33 -08:00
Sarah Jamie Lewis faba13d435 Merge pull request 'fixes' (#588) from fixes into trunk
Reviewed-on: cwtch.im/cwtch-ui#588
Reviewed-by: Sarah Jamie Lewis <sarah@openprivacy.ca>
2022-12-06 00:06:19 +00:00
Dan Ballard 6746abacd7 fix translations for new feature, use icon 2022-12-05 12:26:42 -08:00
Dan Ballard d4546199e4 support (de)activatePeerEngine; turning peers on/off; autostart peers; new UI update for offline contacts/profiles 2022-12-05 12:26:42 -08:00
Dan Ballard f29e926d28 fix lunux scripts LD_LIBRARY_PATH to include Tor (for ssl etc) and fix color of add/edit profile button 2022-12-05 12:26:42 -08:00
Sarah Jamie Lewis ada351f778 Set home directory in linux setup
Fix: #586
2022-12-04 09:33:01 -08:00
Sarah Jamie Lewis 65a1280b35 Update LCG
Fix: #560
2022-11-30 11:41:47 -08:00
Sarah Jamie Lewis 3b60bf085a Fix context listen issues in debug 2022-11-28 13:59:43 -08:00
Sarah Jamie Lewis 3784ec04e3 Asset TextCaptialization.sentences on Android
Fix: #21
2022-11-28 13:46:59 -08:00
Sarah Jamie Lewis 17ffe03dba Fix Android Profile Export
Fix #512.
2022-11-28 13:35:12 -08:00
Sarah Jamie Lewis 059d32718b Enable Formatting on Quoted Messages
Fix: #556
2022-11-28 10:33:04 -08:00
Sarah Jamie Lewis f6710484a2 Add replying to 2022-11-24 13:28:25 -08:00
Sarah Jamie Lewis b0668812e4 Juniper Theme Intro 2022-11-23 12:20:02 -08:00
Sarah Jamie Lewis cfe5f29213 Juniper Theme
A theme dedicated to Juniper.
2022-11-23 12:19:01 -08:00
Sarah Jamie Lewis b866124147 Hide Address Copy in Peer Settings when Streamer Mode is Enabled
Fix: #557
2022-11-23 11:58:49 -08:00
Sarah Jamie Lewis ed4bb99fde Add More Prominant Unlock Profile Button
+ add buttons to onboarding flow

Fix: #561
2022-11-23 10:05:54 -08:00
Sarah Jamie Lewis b282ace9c3 Allow Message formatting to be turned off when experiments are disabled
Fix: #549
2022-11-23 08:34:14 -08:00
Sarah Jamie Lewis daa0e65070 Update 2022-11-18 06:24:24 -08:00
Sarah Jamie Lewis 25e1300b2b Support for Brazilian Portuguese (#564) 2022-11-18 06:21:32 -08:00
Kaio Duarte Costa d4a87cd416 language localization corrections and line inclusion
Added: 'LocalePtBr' 
Correction: 'locale'
2022-11-18 13:28:36 +00:00
Kaio Duarte Costa 0455ed15d7 Brazilian Portuguese translation - 99% complete 2022-11-18 13:23:29 +00:00
Kaio Duarte Costa 1f15e8af39 Translation Update - 80% 2022-11-17 21:23:50 +00:00
Kaio Duarte Costa 32b4ad2576 File with Brazilian Portuguese translation 2022-11-17 00:45:01 +00:00
Sarah Jamie Lewis 08d337401f Update Flutter Build Images 2022-11-16 17:54:23 +00:00
Sarah Jamie Lewis 91eca10f12 Update test/crypto deps 2022-11-16 17:54:23 +00:00
Sarah Jamie Lewis 870e7338ae Copyright notice 2022-11-16 17:54:23 +00:00
Sarah Jamie Lewis af4aab3a47 New Cwtch Icons, Dutch / Turkish Translations 2022-11-16 17:54:23 +00:00
Dan Ballard 8972d0eef5 Merge pull request 'Fix Mac Builds' (#541) from fix-mac into trunk
Reviewed-on: cwtch.im/cwtch-ui#541
2022-09-10 21:34:51 +00:00
Sarah Jamie Lewis 881cfbd0a3 Merge branch 'trunk' into fix-mac 2022-09-10 21:34:19 +00:00
Sarah Jamie Lewis c5f684e42e Fix Mac Builds 2022-09-10 14:33:33 -07:00
Dan Ballard 2d89b30881 Merge pull request 'update-cwtch' (#540) from update-cwtch into trunk
Reviewed-on: cwtch.im/cwtch-ui#540
2022-09-10 19:47:23 +00:00
Sarah Jamie Lewis e51c30ecc9 Update Cwtch 2022-09-10 12:45:21 -07:00
Sarah Jamie Lewis fb4c438e1c Dutch Integration 2022-09-10 08:11:08 -07:00
Sarah Jamie Lewis 2eca5058a8 Merge pull request 'fix antispam tooltips/message blocking for p2p contacts' (#538) from fixAntispam into trunk
Reviewed-on: cwtch.im/cwtch-ui#538
2022-09-10 00:26:48 +00:00
Dan Ballard 94297ee85f fix antispam tooltips/message blocking for p2p contacts 2022-09-09 17:20:34 -07:00
Sarah Jamie Lewis 3fe732809d Merge pull request 'bump tor versions, move linux to harvested tor, bump lcg to 1.9.0' (#537) from torBump into trunk
Reviewed-on: cwtch.im/cwtch-ui#537
2022-09-09 23:29:33 +00:00
Dan Ballard 52b1f28252 lcg 1.9.0 2022-09-09 16:03:39 -07:00
Dan Ballard 16f413177f bump tor versions, move linux to harvested tor 2022-09-09 15:20:09 -07:00
Dan Ballard ea7b307de2 Merge pull request 'allow sharing proifile via qrcode' (#536) from qrcode into trunk
Reviewed-on: cwtch.im/cwtch-ui#536
Reviewed-by: Sarah Jamie Lewis <sarah@openprivacy.ca>
2022-09-09 22:19:55 +00:00
Dan Ballard 4d4901838e qrcode experiment; dont sent when doing antispam on enter 2022-09-09 14:55:58 -07:00
Dan Ballard cfa4b4f95b allow sharing proifile via qrcode 2022-09-09 14:02:28 -07:00
Dan Ballard 2defc7ea2c Merge pull request 'Update translations' (#535) from update-translations into trunk
Reviewed-on: cwtch.im/cwtch-ui#535
2022-09-09 19:58:13 +00:00
Sarah Jamie Lewis cfb32bc84a Update translations 2022-09-09 12:50:10 -07:00
Dan Ballard e570f6941b Merge pull request 'Expose antispam status in UI' (#534) from antispam into trunk
Reviewed-on: cwtch.im/cwtch-ui#534
2022-09-09 19:33:44 +00:00
Sarah Jamie Lewis 37e18d03a1 Expose antispam status in UI 2022-09-09 12:24:20 -07:00
Sarah Jamie Lewis 76c925d874 Merge pull request 'lcg bump; selected conversation sanity null;' (#533) from lcgBump into trunk
Reviewed-on: cwtch.im/cwtch-ui#533
2022-09-09 19:22:31 +00:00
Dan Ballard 975983be3c lcg bump; selected conversation sanity null; 2022-09-09 12:03:32 -07:00
Sarah Jamie Lewis 7edc46743f Merge pull request 'save message drafts (until cwtch close)' (#529) from savedrafts into trunk
Reviewed-on: cwtch.im/cwtch-ui#529
2022-08-26 21:58:18 +00:00
erinn 74ab39067e provider.listen false, revert final 2022-08-26 14:44:13 -07:00
erinn cac2064731 save message drafts (until cwtch close) 2022-08-26 14:34:33 -07:00
Dan Ballard 93284708e0 Merge pull request 'Load Messages when Syncing a Group' (#527) from load_messages_sync into trunk
Reviewed-on: cwtch.im/cwtch-ui#527
2022-08-19 02:45:58 +00:00
Sarah Jamie Lewis 521c0600a2 Load Messages when Syncing a Group
Fixes: #306
2022-08-18 14:26:42 -07:00
Dan Ballard 7f2a8d649d Merge pull request 'fix importBundle error handling and dupping of events' (#523) from noAddContactDup into trunk
Reviewed-on: cwtch.im/cwtch-ui#523
Reviewed-by: Sarah Jamie Lewis <sarah@openprivacy.ca>
2022-08-16 18:00:34 +00:00
Dan Ballard d550c23fbd importBundle returns result 2022-08-16 10:41:36 -07:00
Dan Ballard 5d09341277 fix importBundle error handling and dupping of events 2022-08-14 20:43:34 -07:00
Dan Ballard 191065f51c Merge pull request 'Initial Commit of Fastlane + Debug Accessibiltiy Views' (#521) from debug_access into trunk
Reviewed-on: cwtch.im/cwtch-ui#521
2022-08-12 14:51:34 +00:00
Sarah Jamie Lewis 47e26f18fc Initial Commit of Fastlane + Debug Accessibiltiy Views 2022-08-11 13:17:38 -07:00
Dan Ballard 2bf28e2c6a Merge pull request 'Initial Support for Turkish' (#519) from locale_tr into trunk
Reviewed-on: cwtch.im/cwtch-ui#519
2022-07-29 22:53:47 +00:00
Sarah Jamie Lewis af3c6940bd Initial Support for Turkish 2022-07-29 15:20:16 -07:00
Dan Ballard c3fa6735f5 Merge pull request 'Fix Quoting of Large Messages' (#517) from fixquote into trunk
Reviewed-on: cwtch.im/cwtch-ui#517
2022-07-27 19:38:46 +00:00
Sarah Jamie Lewis 8cfbc39988 Merge branch 'trunk' into fixquote 2022-07-27 17:38:21 +00:00
Sarah Jamie Lewis fc29b10f12 Fix Quoting of Large Messages 2022-07-27 10:35:54 -07:00
Dan Ballard a49ad07b40 Merge pull request 'Fix indexing error in conversation list search.' (#516) from pinned into trunk
Reviewed-on: cwtch.im/cwtch-ui#516
2022-07-25 18:09:09 +00:00
Sarah Jamie Lewis 34e296959a Fix indexing error in conversation list search.
Only allow pinning of accepted contacts
2022-07-25 09:31:56 -07:00
Sarah Jamie Lewis d4d7a54af1 Merge pull request 'docs on making a self signed cert' (#491) from winInstructions into trunk
Reviewed-on: cwtch.im/cwtch-ui#491
2022-07-25 16:27:37 +00:00
Sarah Jamie Lewis 5139846f31 Merge branch 'trunk' into winInstructions 2022-07-25 16:27:28 +00:00
Sarah Jamie Lewis 483213c63b Merge pull request 'Pinning Conversations' (#515) from pinned into trunk
Reviewed-on: cwtch.im/cwtch-ui#515
Reviewed-by: Dan Ballard <dan@openprivacy.ca>
2022-07-25 16:27:20 +00:00
Sarah Jamie Lewis 546ac6c23d Pinning Conversations 2022-07-22 10:18:55 -07:00
Dan Ballard 3a752b7397 Merge pull request 'Implement View Replies' (#507) from viewreplies into trunk
Reviewed-on: cwtch.im/cwtch-ui#507
2022-07-07 22:13:10 +00:00
Sarah Jamie Lewis 7540aed701 Handle viewing replies to images correctly 2022-07-07 13:51:59 -07:00
Sarah Jamie Lewis ad52f2e0c8 Fixup Padding and add message about no replies 2022-07-07 13:40:23 -07:00
Sarah Jamie Lewis 337f6dc5d9 Use Long Press on Android to access replies 2022-07-07 12:58:44 -07:00
Sarah Jamie Lewis 814e6df6f6 Implement View Replies 2022-07-07 12:58:44 -07:00
Dan Ballard 62ea8278f3 Merge pull request 'Prevent a new line in the middle of a sentance from sending a message' (#506) from filesharing-persist into trunk
Reviewed-on: cwtch.im/cwtch-ui#506
2022-07-06 22:02:03 +00:00
Sarah Jamie Lewis e8a638ed29 Prevent a new line in the middle of a sentance from sending a message 2022-07-06 15:00:34 -07:00
Sarah Jamie Lewis 44fba12d21 Merge pull request 'File sharing Manager + File Sharing Fixes' (#505) from filesharing-persist into trunk
Reviewed-on: cwtch.im/cwtch-ui#505
Reviewed-by: Dan Ballard <dan@openprivacy.ca>
2022-07-06 21:19:20 +00:00
Sarah Jamie Lewis 7516232bd4 Merge branch 'trunk' into filesharing-persist 2022-07-06 21:19:12 +00:00
Sarah Jamie Lewis 5be25b87c4 Android 2022-07-06 13:57:35 -07:00
Sarah Jamie Lewis e13ad5d218 Update lcg 2022-07-06 13:11:49 -07:00
Sarah Jamie Lewis c397a9cdb7 Update File Sharing tooltip 2022-07-06 12:25:04 -07:00
Sarah Jamie Lewis 60e822cf12 Android + Time out Resume Logic so files can be requested again 2022-07-06 12:14:40 -07:00
Sarah Jamie Lewis 0ea2a2116e File Sharing Manager 2022-07-06 11:57:04 -07:00
Dan Ballard 9fb9759e6a Merge pull request 'Fix bugs in Invite Modal' (#504) from invite-fix into trunk
Reviewed-on: cwtch.im/cwtch-ui#504
2022-07-04 22:12:13 +00:00
Sarah Jamie Lewis 62b87f2939 Fix #498 2022-07-04 14:39:58 -07:00
Sarah Jamie Lewis da58555104 Fix bugs in Invite Modal 2022-07-04 14:34:32 -07:00
Sarah Jamie Lewis d8cfb5c730 Merge pull request 'android-modal' (#500) from android-modal into trunk
Reviewed-on: cwtch.im/cwtch-ui#500
Reviewed-by: Dan Ballard <dan@openprivacy.ca>
2022-07-04 19:17:05 +00:00
Sarah Jamie Lewis 0dd9ecedac update pubspec version 2022-07-04 12:16:38 -07:00
Sarah Jamie Lewis 61ee9491ab Fix Cut off Buttons in Android 2022-07-04 12:16:38 -07:00
Sarah Jamie Lewis 6b9cf1f164 Fix Modal for New/Import and Unlock on Android 2022-07-04 12:16:38 -07:00
Sarah Jamie Lewis b8326762bf Fix Android Modal Menu 2022-07-04 12:16:38 -07:00
Dan Ballard af9a386ae8 Merge pull request 'new russian translations from @RuLang' (#499) from ru-update into trunk
Reviewed-on: cwtch.im/cwtch-ui#499
2022-07-04 18:56:12 +00:00
Sarah Jamie Lewis da5925c7b3 new russian translations from @RuLang 2022-07-04 10:43:30 -07:00
Dan Ballard eabee61687 Merge pull request 'pubspec andro ver bump' (#497) from androidExported into trunk
Reviewed-on: cwtch.im/cwtch-ui#497
2022-06-29 17:38:40 +00:00
Dan Ballard 102341f931 pubspec andro ver bump 2022-06-29 10:38:07 -07:00
Dan Ballard e36c5bf2f9 Merge pull request 'android 12 sdk 31 fixes' (#496) from androidExported into trunk
Reviewed-on: cwtch.im/cwtch-ui#496
Reviewed-by: Sarah Jamie Lewis <sarah@openprivacy.ca>
2022-06-29 17:37:07 +00:00
Dan Ballard 629c9152ca Merge branch 'trunk' into androidExported 2022-06-29 17:22:40 +00:00
Dan Ballard 9298be0a61 android 12 sdk 31 fixes 2022-06-29 10:21:54 -07:00
Sarah Jamie Lewis fc4a87e3aa Merge pull request 'upgrade android kotlin + work package for android 12' (#495) from androidExported into trunk
Reviewed-on: cwtch.im/cwtch-ui#495
Reviewed-by: Sarah Jamie Lewis <sarah@openprivacy.ca>
2022-06-29 03:03:12 +00:00
Dan Ballard bef8ca083b Merge branch 'trunk' into androidExported 2022-06-29 00:29:28 +00:00
Dan Ballard 8d0b277731 upgrade android kotlin + work package for android 12 2022-06-28 17:28:55 -07:00
Sarah Jamie Lewis 7badbca926 Merge pull request 'android exported activity' (#494) from androidExported into trunk
Reviewed-on: cwtch.im/cwtch-ui#494
2022-06-28 20:48:10 +00:00
Dan Ballard 708f00f678 android exported activity 2022-06-28 13:20:29 -07:00
Dan Ballard 4404977128 Merge pull request '1.8.0' (#493) from 1.8.0 into trunk
Reviewed-on: cwtch.im/cwtch-ui#493
2022-06-27 19:51:28 +00:00
Sarah Jamie Lewis e29366cb49 Merge branch 'trunk' into 1.8.0 2022-06-27 19:21:01 +00:00
Sarah Jamie Lewis 3a12a94a85 1.8.0 2022-06-27 12:20:24 -07:00
Sarah Jamie Lewis 8da9db87de Merge pull request 'newwincert' (#492) from newwincert into trunk
Reviewed-on: cwtch.im/cwtch-ui#492
2022-06-24 05:33:56 +00:00
Sarah Jamie Lewis 93adb32ca5 Merge branch 'trunk' into newwincert 2022-06-24 05:33:49 +00:00
Dan Ballard ee9af54917 adjust drone to handle new windows cert and sign more dlls 2022-06-23 21:46:46 -07:00
Sarah Jamie Lewis 453feae88a Merge pull request 'Fix Image Width Handling' (#490) from fuzzbot-fixes into trunk
Reviewed-on: cwtch.im/cwtch-ui#490
Reviewed-by: Dan Ballard <dan@openprivacy.ca>
2022-06-23 23:38:15 +00:00
Dan Ballard e32e32ed27 docs on making a self signed cert 2022-06-23 16:10:05 -07:00
Sarah Jamie Lewis bf1eece1e2 increase max image size 2022-06-23 16:00:54 -07:00
Sarah Jamie Lewis 9c9916e7c9 max height on images 2022-06-23 15:59:25 -07:00
Sarah Jamie Lewis b3788b4f05 Fix Image Width Handling 2022-06-23 15:51:16 -07:00
Dan Ballard 5f67f626e5 Merge pull request 'fuzzbot-fixes' (#489) from fuzzbot-fixes into trunk
Reviewed-on: cwtch.im/cwtch-ui#489
Reviewed-by: Dan Ballard <dan@openprivacy.ca>
2022-06-23 19:26:46 +00:00
Sarah Jamie Lewis 00ca54a6a3 Merge branch 'trunk' into fuzzbot-fixes 2022-06-23 19:08:54 +00:00
Sarah Jamie Lewis 5770eb4b66 Fix File Bubble Preview Cache Issues + Wrap Quoted Message Malformed Bubbles as Rows 2022-06-23 12:07:39 -07:00
Sarah Jamie Lewis ab77ad80d1 Fix Bugs in Quoted Message Selection found by Fuzzbot 2022-06-23 11:25:26 -07:00
Dan Ballard 0c426a129a Merge pull request 'Turn on Message Formatting by Default' (#488) from default_message_formatting into trunk
Reviewed-on: cwtch.im/cwtch-ui#488
2022-06-22 21:34:22 +00:00
Sarah Jamie Lewis 0aa0d286ef move formatting out of experiments in settings 2022-06-22 14:22:52 -07:00
Sarah Jamie Lewis 1483ddcc94 Turn on Message Formatting by Default 2022-06-22 12:56:35 -07:00
Dan Ballard 405160947b Merge pull request 'add support for diff arch macos libcwtch-go' (#487) from macarm into trunk
Reviewed-on: cwtch.im/cwtch-ui#487
Reviewed-by: Sarah Jamie Lewis <sarah@openprivacy.ca>
2022-06-22 19:45:13 +00:00
Dan Ballard 3a5668734e mac arm64 2022-06-22 12:40:06 -07:00
Dan Ballard a6406e9068 add support for diff arch macos libcwtch-go 2022-06-22 12:05:46 -07:00
Sarah Jamie Lewis a4e1a7ede1 Merge pull request 'New Translations + Update LCG' (#486) from intl_fix into trunk
Reviewed-on: cwtch.im/cwtch-ui#486
Reviewed-by: Dan Ballard <dan@openprivacy.ca>
2022-06-21 23:11:54 +00:00
Sarah Jamie Lewis 77227111fd Merge branch 'trunk' into intl_fix 2022-06-21 23:09:52 +00:00
Sarah Jamie Lewis 9d2654459c Merge pull request 'fix first sync' (#485) from fixFirstSync into trunk
Reviewed-on: cwtch.im/cwtch-ui#485
2022-06-21 23:09:46 +00:00
Sarah Jamie Lewis 6dca8e80e6 New Translations + Update LCG 2022-06-21 16:09:09 -07:00
Dan Ballard 3f4530f299 fix first sync 2022-06-21 16:03:04 -07:00
Dan Ballard 40b3207e2d Merge pull request 'Remove Group "Address" - it is badly named, and no longer relavent' (#482) from fix_308 into trunk
Reviewed-on: cwtch.im/cwtch-ui#482
Reviewed-by: Dan Ballard <dan@openprivacy.ca>
2022-06-21 22:12:14 +00:00
Sarah Jamie Lewis fc1f910486 Remove Awful Flutter 3 Screen Transitions 2022-06-21 14:58:09 -07:00
Sarah Jamie Lewis f71bce5b71 Remove Group "Address" - it is badly named, and no longer relavent 2022-06-21 14:08:54 -07:00
Sarah Jamie Lewis c01860f1de Merge pull request 'Flutter3, local_desktop_notifications on linux again' (#484) from flutter3_notify into trunk
Reviewed-on: cwtch.im/cwtch-ui#484
Reviewed-by: Sarah Jamie Lewis <sarah@openprivacy.ca>
2022-06-21 21:08:47 +00:00
Dan Ballard c7e6cfcbc1 macos podfile lock update for flutter 3 2022-06-21 16:58:02 -04:00
Dan Ballard d9acca7b1b drone flutter 3.0.1 windows 2022-06-21 13:06:38 -07:00
Dan Ballard 914fe9c300 updated widget goldens, cwtch label flutter 3 minute change 2022-06-21 13:06:38 -07:00
Dan Ballard ce5499419f drone test 2022-06-21 13:06:38 -07:00
Dan Ballard 531595e9e9 remove notification debugging and linux notifier 2022-06-21 13:06:38 -07:00
Dan Ballard 9857dff9a3 upgraded to flutter 3, upgraded kotlin and gradle, some deps 2022-06-21 13:06:38 -07:00
Dan Ballard 03b3d86a41 translate lux material stuff; upgrade to fixed local notification package; upgrade provide, scrollable_position 2022-06-21 13:06:38 -07:00
Dan Ballard a5040b7236 start of flutter3 migration, update l10n/custom_material_delegate, update cwtchNotifier to user local_notifier 2022-06-21 13:06:38 -07:00
Dan Ballard a83b357f0f Merge pull request 'Fix Debug Errors + Implement Scroll To on DM' (#481) from fix_308 into trunk
Reviewed-on: cwtch.im/cwtch-ui#481
2022-06-20 19:10:32 +00:00
Sarah Jamie Lewis b425175fff Attempt to fix Scroll-to Bug 2022-06-20 11:41:31 -07:00
Sarah Jamie Lewis 8570199196 Fix: #308 - Scroll to Contact
Also fixes a bunch of debug-build issues (overflows / resizes).
2022-06-20 10:54:06 -07:00
Dan Ballard 1122c818f5 Merge pull request 'Add Snackbar Notifications for all Copies' (#478) from snackbars into trunk
Reviewed-on: cwtch.im/cwtch-ui#478
2022-06-16 17:54:30 +00:00
Dan Ballard 6714b0d8a0 Merge pull request 'Message Formatting Toolbar Tooltips' (#477) from formatting_toolbar_tooltip into trunk
Reviewed-on: cwtch.im/cwtch-ui#477
2022-06-16 17:53:54 +00:00
Sarah Jamie Lewis 0d90219c87 Add Snackbar Notifications for all Copies 2022-06-16 09:40:55 -07:00
Sarah Jamie Lewis 8ab82569e3 Message Formatting Toolbar Tooltips 2022-06-16 09:23:10 -07:00
Dan Ballard a7861681e1 Merge pull request 'Update Translations (including RU from @RuLang)' (#476) from intl into trunk
Reviewed-on: cwtch.im/cwtch-ui#476
2022-06-15 18:06:56 +00:00
Sarah Jamie Lewis 106b45c758 Update Translations (including RU from @RuLang) 2022-06-15 10:46:05 -07:00
Sarah Jamie Lewis 644ae502e5 Merge pull request 'formatting_toolbar' (#475) from formatting_toolbar into trunk
Reviewed-on: cwtch.im/cwtch-ui#475
Reviewed-by: Dan Ballard <dan@openprivacy.ca>
2022-06-15 03:14:17 +00:00
Sarah Jamie Lewis 7bae6485f7 Fixup Formatting PR (Dans Comments) 2022-06-14 18:44:24 -07:00
Sarah Jamie Lewis 04c335e7a4 formatting toolbar 2022-06-14 18:30:04 -07:00
Sarah Jamie Lewis 3961692817 Nicer Quoted Messages 2022-06-13 10:06:06 -07:00
Sarah Jamie Lewis d703a9636f Fix Contact Message Date not displaying date for day old messages 2022-06-13 09:31:25 -07:00
Dan Ballard e4419366a4 Merge pull request 'Click to scroll on Quoted Message / Shorten Text' (#469) from marcia_fixes into trunk
Reviewed-on: cwtch.im/cwtch-ui#469
2022-06-10 23:43:09 +00:00
Sarah Jamie Lewis f848316db9 Fix bug preventing scrolling to unread messages 2022-06-10 15:42:54 -07:00
Sarah Jamie Lewis a5b253f185 Merge pull request 'reply_links' (#470) from reply_links into marcia_fixes
Reviewed-on: cwtch.im/cwtch-ui#470
2022-06-10 21:32:13 +00:00
Sarah Jamie Lewis e7c19c7477 Merge pull request 'show down button in messageview when ever scrolling up' (#471) from show_down into marcia_fixes
Reviewed-on: cwtch.im/cwtch-ui#471
2022-06-10 21:31:10 +00:00
Dan Ballard 59df024867 show down button in messageview when ever scrolling up 2022-06-10 14:28:16 -07:00
Sarah Jamie Lewis 65ff084952 make links in replies clickable 2022-06-10 14:21:40 -07:00
Sarah Jamie Lewis b3e11cfffd remove scroll controller from message view 2022-06-10 12:24:38 -07:00
Sarah Jamie Lewis 0c9be47e17 Click to scroll on Quoted Message / Shorten Text 2022-06-10 12:12:43 -07:00
Dan Ballard 3bb3a8736c Merge pull request 'Fix message view title padding in doublecol view' (#468) from marcia_fixes into trunk
Reviewed-on: cwtch.im/cwtch-ui#468
2022-06-10 18:16:31 +00:00
Sarah Jamie Lewis 67850e8e4b Fix message view title padding in doublecol view 2022-06-10 10:40:39 -07:00
Dan Ballard c8e896fa51 Merge pull request 'Modal Menu UI Fixes' (#467) from marcia_fixes into trunk
Reviewed-on: cwtch.im/cwtch-ui#467
Reviewed-by: Dan Ballard <dan@openprivacy.ca>
2022-06-09 23:19:13 +00:00
Sarah Jamie Lewis d1e8f71290 fixes for profile buttons 2022-06-09 14:54:48 -07:00
Sarah Jamie Lewis be8646e805 fix padding 2022-06-09 14:30:38 -07:00
Sarah Jamie Lewis 6d42f2c76c make text bold and add additional padding to contacts modal 2022-06-09 14:28:24 -07:00
Sarah Jamie Lewis 8429907650 modal menus design fixes 2022-06-09 14:26:02 -07:00
Sarah Jamie Lewis c3848553d7 Bugfix when resizing app when menu is open 2022-06-09 13:49:38 -07:00
Sarah Jamie Lewis 3c85b8f59e Merge pull request 'Column-wise contact row (marcia feedback)' (#466) from marcia_fixes into trunk
Reviewed-on: cwtch.im/cwtch-ui#466
Reviewed-by: Dan Ballard <dan@openprivacy.ca>
2022-06-09 20:43:10 +00:00
Sarah Jamie Lewis d0e7e6703b Different buttons 2022-06-09 13:40:42 -07:00
Sarah Jamie Lewis 2bc47173f9 more clear contact request 2022-06-09 13:36:59 -07:00
Sarah Jamie Lewis 15c68d8812 remove padding 2022-06-09 13:20:01 -07:00
Sarah Jamie Lewis e76f2883c6 Column-wise contact row (marcia feedback) 2022-06-09 13:10:27 -07:00
Dan Ballard 439b9b874f Merge pull request 'marcia settings fixes' (#462) from marcia_fixes into trunk
Reviewed-on: cwtch.im/cwtch-ui#462
2022-05-31 23:31:27 +00:00
Sarah Jamie Lewis f5393cdb79 Merge branch 'trunk' into marcia_fixes 2022-05-31 23:19:49 +00:00
Sarah Jamie Lewis c0f1b674aa marcia settings fixes 2022-05-31 13:37:32 -07:00
Dan Ballard 630713a5e4 Merge pull request 'New Polish Translations' (#460) from pl_intl into trunk
Reviewed-on: cwtch.im/cwtch-ui#460
2022-05-24 18:53:52 +00:00
Sarah Jamie Lewis d10a6df872 Merge branch 'trunk' into pl_intl 2022-05-24 18:16:16 +00:00
Sarah Jamie Lewis 2723a35d44 New Polish Translations 2022-05-24 11:14:42 -07:00
Dan Ballard 427081c937 Merge pull request 'Fix #457 + Formatting' (#459) from fix457 into trunk
Reviewed-on: cwtch.im/cwtch-ui#459
2022-05-11 19:56:11 +00:00
Sarah Jamie Lewis 9d4abc3725 Fix #457 + Formatting 2022-05-11 12:44:24 -07:00
Sarah Jamie Lewis fa52b741bf Merge pull request 'v1.7.1 29' (#454) from pubspecBump into trunk
Reviewed-on: cwtch.im/cwtch-ui#454
2022-05-02 22:12:25 +00:00
Dan Ballard fb86fb6eae v1.7.1 29 2022-05-02 15:07:55 -07:00
Sarah Jamie Lewis 8dd696b6ab Merge pull request 'dont start 'new messages' when convo selected' (#453) from cache3.0 into trunk
Reviewed-on: cwtch.im/cwtch-ui#453
2022-05-01 17:32:16 +00:00
Dan Ballard 001ad854c7 dont start 'new messages' when convo selected 2022-04-30 14:43:45 -07:00
Dan Ballard af5fb678fc Merge pull request 'caching fixes for stability and android' (#450) from cache3.0 into trunk
Reviewed-on: cwtch.im/cwtch-ui#450
Reviewed-by: Sarah Jamie Lewis <sarah@openprivacy.ca>
2022-04-29 23:37:20 +00:00
Dan Ballard ffa51e83a1 new message marker moved from id to index and now works on old messages 2022-04-29 16:07:52 -07:00
Dan Ballard 441845ed49 Merge pull request 'Fix maximum width of dropdown boxes in settings' (#452) from fix-settings into trunk
Reviewed-on: cwtch.im/cwtch-ui#452
2022-04-29 17:50:18 +00:00
Sarah Jamie Lewis 0146436cb3 Fix maximum width of dropdown boxes in settings 2022-04-29 09:57:26 -07:00
Dan Ballard 0647a2d98d android pre load unsynced messages 2022-04-28 21:28:12 -07:00
Dan Ballard 0bcfe75a63 rework cache android resume based off message count totals, force pre fetch on load message list, tweak new messages bubble behaviour 2022-04-28 08:57:31 -07:00
Dan Ballard ecdcef2192 Merge pull request 'GetMessage* on android; make reply to use message cache; New Messages bubble doesn't reup' (#448) from replyFix into trunk
Reviewed-on: cwtch.im/cwtch-ui#448
Reviewed-by: Sarah Jamie Lewis <sarah@openprivacy.ca>
2022-04-27 04:51:20 +00:00
Dan Ballard e6c9f7becb GetMessage* on android; make reply to use message cache; New Messages bubble doesn't reup 2022-04-26 21:34:16 -07:00
Sarah Jamie Lewis 9d8f73ac00 Merge pull request 'Format, Context Binding and Check if File Exists in File Bubble' (#447) from file-fixes into trunk
Reviewed-on: cwtch.im/cwtch-ui#447
Reviewed-by: Dan Ballard <dan@openprivacy.ca>
2022-04-26 19:38:28 +00:00
Sarah Jamie Lewis dc78117e1a Format, Context Binding and Check if File Exists in File Bubble 2022-04-26 12:16:48 -07:00
Dan Ballard 59e3220bce Merge pull request 'Debug Info Fix and Dependency Upgrades' (#433) from perf into trunk
Reviewed-on: cwtch.im/cwtch-ui#433
2022-04-21 23:56:32 +00:00
Sarah Jamie Lewis 653ba199bc Merge branch 'trunk' into perf 2022-04-21 23:33:26 +00:00
Sarah Jamie Lewis 1b45205c48 Merge pull request 'nsis uninstall typo reg key' (#438) from winUninstall into trunk
Reviewed-on: cwtch.im/cwtch-ui#438
2022-04-21 23:33:17 +00:00
Dan Ballard 85186b2565 nsis uninstall typo reg key 2022-04-21 16:32:22 -07:00
Sarah Jamie Lewis 3287fa79ff Merge branch 'trunk' into perf 2022-04-21 23:32:07 +00:00
Sarah Jamie Lewis 111d522484 Upgrade lcg to 1.7.1 2022-04-21 16:31:17 -07:00
Sarah Jamie Lewis 20c854bafb Update Translations 2022-04-21 16:14:03 -07:00
Dan Ballard ffdc7b3262 Merge pull request 'winUninstall' (#434) from winUninstall into trunk
Reviewed-on: cwtch.im/cwtch-ui#434
Reviewed-by: Sarah Jamie Lewis <sarah@openprivacy.ca>
2022-04-21 18:40:31 +00:00
Dan Ballard a3d986d9d6 ffi on windows more options to detect tor; nsis installer warn about cwtch needing exiting 2022-04-20 18:20:44 -07:00
Sarah Jamie Lewis 5e3387ec8a Debug Info Fix an Dependency Upgrades 2022-04-20 17:28:38 -07:00
Dan Ballard a6c7682c84 nsis windows installer detect running, ask to not, abort 2022-04-20 14:25:36 -07:00
Dan Ballard b29836ed3b register uninstaller with windows add/remove programs 2022-04-20 12:26:28 -07:00
Sarah Jamie Lewis e0bf47b6ab Merge pull request 'a bunch of cache logic fixes and futher support for reconnect on android' (#431) from cachefixes into trunk
Reviewed-on: cwtch.im/cwtch-ui#431
Reviewed-by: Sarah Jamie Lewis <sarah@openprivacy.ca>
2022-04-20 18:16:47 +00:00
Dan Ballard 4bd92d854f comments 2022-04-19 20:46:59 -07:00
Dan Ballard 82d1bf873f lcg bump 2022-04-19 20:46:59 -07:00
Dan Ballard 5959981fe4 a bunch of cache logic fixes and futher support for reconnect on android 2022-04-19 20:46:59 -07:00
Dan Ballard ab315e289a Merge pull request 'MainActivity return result to not leave dart calls hanging' (#432) from kotlinResult into trunk
Reviewed-on: cwtch.im/cwtch-ui#432
Reviewed-by: Sarah Jamie Lewis <sarah@openprivacy.ca>
2022-04-20 03:36:20 +00:00
Dan Ballard 6392d67332 MainActivity return result to not leave dart calls hanging 2022-04-19 18:34:22 -07:00
Dan Ballard 8f0b73af2a Merge pull request 'fix linux notification icon (rever to old linux notification manager) and light theme fixes' (#429) from linuxNotif into trunk
Reviewed-on: cwtch.im/cwtch-ui#429
Reviewed-by: Sarah Jamie Lewis <sarah@openprivacy.ca>
2022-04-15 01:02:30 +00:00
Dan Ballard 4e2f83ccd9 light theme fixes + message cache ! fix 2022-04-14 17:50:53 -07:00
Dan Ballard dc5ba7b392 readd linux notification manager so it handles notification icon in different linux style installs 2022-04-14 17:02:24 -07:00
Sarah Jamie Lewis 3595f5d8d1 Merge pull request 'Debug Info Pane for Desktop' (#428) from debuginfo into trunk
Reviewed-on: cwtch.im/cwtch-ui#428
Reviewed-by: Dan Ballard <dan@openprivacy.ca>
2022-04-14 22:51:35 +00:00
Sarah Jamie Lewis 1df348c0c1 Debug Info Pane for Desktop 2022-04-14 15:34:36 -07:00
Sarah Jamie Lewis 548e7f4925 Merge pull request 'add android flag secure, pubspec vewrsion bump, and stubs for sdk31 hide overlay' (#427) from androidFlags into trunk
Reviewed-on: cwtch.im/cwtch-ui#427
Reviewed-by: Sarah Jamie Lewis <sarah@openprivacy.ca>
2022-04-13 21:57:52 +00:00
Dan Ballard a20d2dffc4 add android flag secure, pubspec vewrsion bump, and stubs for sdk31 hide overlay 2022-04-13 14:53:44 -07:00
Dan Ballard 2a712565e9 Merge pull request 'andoird settings / request for power optimization exemption' (#426) from power into trunk
Reviewed-on: cwtch.im/cwtch-ui#426
Reviewed-by: Sarah Jamie Lewis <sarah@openprivacy.ca>
2022-04-13 21:23:41 +00:00
Dan Ballard a94fd3547b add popup about disable battery unoptimized; fix mute policy loading 2022-04-13 14:09:33 -07:00
Dan Ballard c377a09748 add setting that reports / triggers android power optimization exemption 2022-04-13 12:57:15 -07:00
Dan Ballard d261fbd4c0 kotlin powermanagement info and exemption request 2022-04-13 12:53:32 -07:00
Dan Ballard 933ca74fbc Merge pull request 'Themeing Updates including Nicer Code Formatting' (#425) from theme-updates into trunk
Reviewed-on: cwtch.im/cwtch-ui#425
2022-04-12 22:08:20 +00:00
Sarah Jamie Lewis 38f317194d Merge branch 'trunk' into theme-updates 2022-04-12 21:18:58 +00:00
Sarah Jamie Lewis a4ab2ec060 Themeing Updates including Nicer Code Formatting 2022-04-12 14:15:58 -07:00
Dan Ballard 47795094a0 Merge pull request 'Add Hook into Add Contact Flow to better Gauge Intent' (#424) from add_contact_hook into trunk
Reviewed-on: cwtch.im/cwtch-ui#424
2022-04-12 19:27:18 +00:00
Sarah Jamie Lewis 0d1e7bb5a0 Add Hook into Add Contact Flow to better Gauge Intent
(This the future we can expand this, use this information to better guide people)
2022-04-12 12:15:39 -07:00
Sarah Jamie Lewis 987b80c92b Merge pull request 'Message Formatting Experiment Initial Commit' (#413) from message-formatting into trunk
Reviewed-on: cwtch.im/cwtch-ui#413
Reviewed-by: Dan Ballard <dan@openprivacy.ca>
2022-04-06 22:15:44 +00:00
Sarah Jamie Lewis e718adad8a Add Roboto Fonts License 2022-04-06 15:04:17 -07:00
Sarah Jamie Lewis 0b9c159e85 Icon and Log Error 2022-04-06 14:54:53 -07:00
Sarah Jamie Lewis a4a2af08b4 Message Formatting Experiment Initial Commit 2022-04-06 14:36:34 -07:00
Sarah Jamie Lewis 471a729d46 Merge pull request 'port most gomobile FlwtchWorker calls to lcg to MainActivity; sendmessage sets lastSeen time' (#412) from mainActivityPort into trunk
Reviewed-on: cwtch.im/cwtch-ui#412
Reviewed-by: Sarah Jamie Lewis <sarah@openprivacy.ca>
2022-04-06 19:01:40 +00:00
Dan Ballard 1cffea5c1a port most gomobile FlwtchWorker calls to lcg to MainActivity; sendmessage sets lastSeen time 2022-04-05 18:38:59 -07:00
Sarah Jamie Lewis e7c5b2cfa5 Merge pull request 'store last seen time in lcg and handle unread counts' (#411) from unreadSync into trunk
Reviewed-on: cwtch.im/cwtch-ui#411
Reviewed-by: Sarah Jamie Lewis <sarah@openprivacy.ca>
2022-04-04 22:17:59 +00:00
Dan Ballard e08114881c store last seen time in lcg and handle unread counts 2022-04-04 15:02:37 -07:00
Sarah Jamie Lewis 6eaf95a33b Merge pull request 'only send message on Enter Up event' (#408) from androMessage into trunk
Reviewed-on: cwtch.im/cwtch-ui#408
Reviewed-by: Sarah Jamie Lewis <sarah@openprivacy.ca>
2022-03-24 23:39:48 +00:00
Dan Ballard 0db68bcdbb Merge branch 'trunk' into androMessage 2022-03-24 23:37:31 +00:00
Dan Ballard f64559191b only send message on Enter Up event 2022-03-24 16:25:08 -07:00
Dan Ballard b8c1c7682b Merge pull request 'message cache allows index locking, rework messageHandler to use bulk fetching, sendMessage flow with no sleep; move some core getMessages/SendMessage handlers from FlwtchWorker to MainActivity' (#407) from androMessage into trunk
Reviewed-on: cwtch.im/cwtch-ui#407
Reviewed-by: Sarah Jamie Lewis <sarah@openprivacy.ca>
2022-03-24 19:41:16 +00:00
Dan Ballard 9812111041 comments, organizing logic 2022-03-24 12:04:09 -07:00
Dan Ballard ecc9a3a48c comments, fix new messages marker logic 2022-03-23 18:02:26 -07:00
Dan Ballard 523531e6be new lcg version 2022-03-23 18:02:26 -07:00
Dan Ballard ff3e60a750 message cache allows index locking, rework messageHandler to use bulk fetching, sendMessage flow with no sleep; move some core getMessages/SendMessage handlers from FlwtchWorker to MainActivity 2022-03-23 18:01:43 -07:00
Dan Ballard 5a1c66bc25 Merge pull request 'Renable Network Status Updates, Display Status in Contacts View' (#406) from ns into trunk
Reviewed-on: cwtch.im/cwtch-ui#406
2022-03-23 21:42:28 +00:00
Sarah Jamie Lewis 10780ac8cb Merge branch 'trunk' into ns 2022-03-23 21:24:14 +00:00
Sarah Jamie Lewis 0857d46809 Renable Network Status Updates, Display Status in Contacts View 2022-03-23 14:23:23 -07:00
Dan Ballard d7d3b2ef97 Merge pull request 'Fix: #344 - Folder Selection on Settings can be Opened Multiple times' (#402) from small_edits into trunk
Reviewed-on: cwtch.im/cwtch-ui#402
2022-03-22 02:17:14 +00:00
Sarah Jamie Lewis 65d5e9777d Fix: 344 - Folder Selection on Settings can be Opened Multiple times 2022-03-21 10:49:53 -07:00
Dan Ballard 27f4c5f00e Merge pull request 'Localizations + Allow Editing when Contact is Offline' (#400) from small_edits into trunk
Reviewed-on: cwtch.im/cwtch-ui#400
Reviewed-by: Dan Ballard <dan@openprivacy.ca>
2022-03-21 16:37:26 +00:00
Sarah Jamie Lewis f48b6af3dd Localizations + Allow Editing 2022-03-21 09:23:16 -07:00
Dan Ballard d8e19de5b1 Merge pull request 'Import and Export Profile' (#397) from import_export into trunk
Reviewed-on: cwtch.im/cwtch-ui#397
2022-03-11 21:10:03 +00:00
Sarah Jamie Lewis af03dd30cc Upgrade libcwtch 2022-03-11 12:27:44 -08:00
Sarah Jamie Lewis 8a3867b5b3 Import / Export for Android 2022-03-11 12:26:23 -08:00
Sarah Jamie Lewis 6237032716 Import and Export Profile 2022-03-11 12:26:21 -08:00
Dan Ballard 915cf1a6d8 Merge pull request 'splash on shutdown; android stability: check if lcg started' (#399) from splashExit into trunk
Reviewed-on: cwtch.im/cwtch-ui#399
Reviewed-by: Sarah Jamie Lewis <sarah@openprivacy.ca>
2022-03-11 00:45:45 +00:00
Dan Ballard c4ebed0a71 splash on shutdown; android stability: check if lcg started 2022-03-10 16:45:18 -08:00
Dan Ballard 3c71bb8184 Merge pull request 'Using build context instead of inherited context when building file bubble popout' (#395) from file_bubble_pop_fix into trunk
Reviewed-on: cwtch.im/cwtch-ui#395
2022-03-08 19:08:12 +00:00
Sarah Jamie Lewis c3661d4caa Using build context instead of inherited context when building file bubble popout
Fix: #394
2022-03-08 10:56:20 -08:00
Sarah Jamie Lewis 62a99797ca Merge pull request 'assorted android and sync progress fixes' (#391) from state into trunk
Reviewed-on: cwtch.im/cwtch-ui#391
2022-03-04 21:17:41 +00:00
Dan Ballard 7cfa9432c8 unbreak notifications on android ([Pp]ictures) + asset dup; fix sync progres resume logic 2022-03-04 13:15:08 -08:00
Dan Ballard 1d0cb785c1 fix android segfault in flwtch worker; try/catch to catch future bugs in flwtch worker; resume servers load sync status from cwtch; add bg color to sync progress bar; showdown now synchronous so completes 2022-03-04 13:15:08 -08:00
Dan Ballard 8eaa3974c9 Merge pull request 'Stop using key-based lookups for messages, use the message cache instead.' (#392) from message_row_fixes into trunk
Reviewed-on: cwtch.im/cwtch-ui#392
2022-03-04 21:14:34 +00:00
Sarah Jamie Lewis 6cc5146744 Readd-widget key cache 2022-03-04 12:14:43 -08:00
Sarah Jamie Lewis 1fea540f9d Stop using key-based lookups for messages, use the message cache instead.
Always update alignment to allow for message row objects to be reused
2022-03-04 12:14:43 -08:00
Dan Ballard 7457246a01 Merge pull request 'Finish up Danish translation' (#390) from da into trunk
Reviewed-on: cwtch.im/cwtch-ui#390
2022-03-03 18:52:02 +00:00
Sarah Jamie Lewis 0a26a1899b Finidh up Danish translation 2022-03-03 10:19:42 -08:00
Sarah Jamie Lewis 8183fbd987 Merge pull request 'danish-localization' (#388) from christofal/cwtch-ui:danish-localization into trunk
Reviewed-on: cwtch.im/cwtch-ui#388
2022-03-03 17:57:12 +00:00
Sarah Jamie Lewis f3f5f65e22 Merge branch 'trunk' into danish-localization 2022-03-03 17:56:26 +00:00
Dan Ballard c565089578 Merge pull request 'Spanish and Welsh complete' (#387) from es into trunk
Reviewed-on: cwtch.im/cwtch-ui#387
2022-03-02 23:04:32 +00:00
Sarah Jamie Lewis 009f99e0f5 Merge branch 'trunk' into es 2022-03-02 23:01:35 +00:00
Sarah Jamie Lewis 0894fc577b Spanish and Welsh complete 2022-03-02 15:00:34 -08:00
Dan Ballard b0977b31a5 Merge pull request 'Support Welsh, Update Translations for other Languages' (#385) from cy into trunk
Reviewed-on: cwtch.im/cwtch-ui#385
2022-03-02 19:31:46 +00:00
Sarah Jamie Lewis 6df922d64e Merge branch 'trunk' into cy 2022-03-02 19:29:54 +00:00
Sarah Jamie Lewis b70de4052d Support Welsh, Update Translations for other Languages 2022-03-02 11:28:43 -08:00
Allan Christoffersen 453558f034 Full Danish localization 2022-03-02 15:32:47 +01:00
Allan Christoffersen 481890b55f Initial commit of Danish localization 2022-03-02 14:30:53 +01:00
Dan Ballard 7122db0388 Merge pull request 'Move messageDate format handling to MessageBubbleDecoration' (#384) from messagedate into trunk
Reviewed-on: cwtch.im/cwtch-ui#384
2022-03-01 17:39:23 +00:00
Sarah Jamie Lewis c56f40c090 Merge branch 'trunk' into messagedate 2022-03-01 06:36:51 +00:00
Sarah Jamie Lewis c4c693144d Move messageDate format handling to MessageBubbleDecoration 2022-02-28 22:35:09 -08:00
Dan Ballard 891bf51a70 Merge pull request 'harmonize translations from lokalize' (#383) from i18n into trunk
Reviewed-on: cwtch.im/cwtch-ui#383
2022-03-01 00:02:33 +00:00
Sarah Jamie Lewis a559b0caf8 Update No with clobbered 2022-02-28 16:01:10 -08:00
Sarah Jamie Lewis 054e5fca84 harmonize translations from lokalize 2022-02-28 15:43:33 -08:00
Dan Ballard 6b5f4febe7 Merge pull request 'Full Norwegian Translation' (#382) from no into trunk
Reviewed-on: cwtch.im/cwtch-ui#382
2022-02-28 23:39:23 +00:00
Sarah Jamie Lewis 2c55f78913 Small updates 2022-02-28 15:19:25 -08:00
Henrik Austad f1cfd2c30f Norwegian localization 2022-02-28 15:18:39 -08:00
Sarah Jamie Lewis b36e76b818 remove norwya to add better 2022-02-28 15:18:21 -08:00
Dan Ballard 2aadea0cea Merge pull request 'Complete German Translation.' (#381) from de into trunk
Reviewed-on: cwtch.im/cwtch-ui#381
2022-02-28 20:49:44 +00:00
Dan Ballard 423a2bce5e Merge branch 'trunk' into de 2022-02-28 20:49:23 +00:00
Dan Ballard eef40f76f9 Merge pull request 'Add support for many prospective new languages' (#380) from lb into trunk
Reviewed-on: cwtch.im/cwtch-ui#380
2022-02-28 20:49:04 +00:00
Sarah Jamie Lewis 385f86be02 Complete German Translation 2022-02-28 12:29:20 -08:00
Sarah Jamie Lewis 193a9d6f89 Add support for many prospective new languages 2022-02-28 12:05:22 -08:00
Dan Ballard 2ade7e8e4f Merge pull request 'Initial support for Romanian localization' (#379) from ro into trunk
Reviewed-on: cwtch.im/cwtch-ui#379
2022-02-27 20:04:50 +00:00
Sarah Jamie Lewis 12a0fc1059 Update French 2022-02-27 12:02:17 -08:00
Sarah Jamie Lewis 82542664ad Merge branch 'trunk' into ro 2022-02-27 19:37:49 +00:00
Sarah Jamie Lewis 670d8bc343 Initial support for Romanian localization 2022-02-27 11:36:51 -08:00
Dan Ballard ce1db17148 Merge pull request 'WIP make NixNotificationManager using flutter_local_notification' (#375) from macNotifications into trunk
Reviewed-on: cwtch.im/cwtch-ui#375
Reviewed-by: Sarah Jamie Lewis <sarah@openprivacy.ca>
2022-02-24 00:22:06 +00:00
Dan Ballard 018a51b76e Merge branch 'macNotifications' of git.openprivacy.ca:cwtch.im/cwtch-ui into macNotifications 2022-02-23 16:21:50 -08:00
Dan Ballard 61cdb37226 lcg bump 2022-02-23 16:21:42 -08:00
Dan Ballard 5b4778dd78 Merge branch 'trunk' into macNotifications 2022-02-23 19:33:29 +00:00
Dan Ballard 152f5fbc96 garuntee no notifications while using app for nix 2022-02-23 11:27:15 -08:00
Dan Ballard 5e7272b15a nix notification manager only use title, body is unsafe 2022-02-23 11:13:03 -08:00
Dan Ballard 9473acd438 Merge pull request 'Add Message Status Widget to File Bubble' (#376) from fix297 into trunk
Reviewed-on: cwtch.im/cwtch-ui#376
2022-02-22 20:49:34 +00:00
Sarah Jamie Lewis 4fd8075497 Merge branch 'trunk' into fix297 2022-02-22 19:14:25 +00:00
Sarah Jamie Lewis 70eb160abc Add Message Status Widget to File Bubble
Also fix bug in peer settings
2022-02-22 11:09:44 -08:00
Dan Ballard 1a4dccf44a disable sound until we make it a setting 2022-02-20 09:53:15 -08:00
Dan Ballard 7509c20a62 make NixNotificationManager using flutter_local_notification 2022-02-18 15:50:34 -08:00
182 changed files with 11200 additions and 340726 deletions

View File

@ -8,7 +8,7 @@ clone:
steps:
- name: clone
image: cirrusci/flutter:2.8.0
image: cirrusci/flutter:3.3.8
environment:
buildbot_key_b64:
from_secret: buildbot_key_b64
@ -24,7 +24,7 @@ steps:
- git checkout $DRONE_COMMIT
- name: fetch
image: cirrusci/flutter:2.8.0
image: cirrusci/flutter:3.3.8
volumes:
- name: deps
path: /root/.pub-cache
@ -47,7 +47,7 @@ steps:
# #Todo: fix all the lint errors and add `-set_exit_status` above to enforce linting
- name: build-linux
image: openpriv/flutter-desktop:linux-fstable-2.8.0
image: openpriv/flutter-desktop:linux-fstable-3.3.9
volumes:
- name: deps
path: /root/.pub-cache
@ -60,8 +60,20 @@ steps:
- tar -czf cwtch-`cat ../VERSION`.tar.gz cwtch
- rm -r cwtch
- name: linux-ui-tests
image: openpriv/flutter-desktop:linux-fstable-3.3.9
volumes:
- name: deps
path: /root/.pub-cache
commands:
- # todo: add xvfb to openpriv/flutter-desktop:linux-fstable-3.7
- sudo apt update
- sudo apt-get install -y xvfb
- ./fetch-tor.sh
- ./run-tests-headless.sh 02_save_load
- name: test-build-android
image: cirrusci/flutter:2.8.0
image: cirrusci/flutter:3.3.8
when:
event: pull_request
volumes:
@ -71,7 +83,7 @@ steps:
- flutter build apk --debug
- name: build-android
image: cirrusci/flutter:2.8.0
image: cirrusci/flutter:3.3.8
when:
event: push
environment:
@ -95,7 +107,7 @@ steps:
#- cp build/app/outputs/flutter-apk/app-debug.apk deploy/android
- name: widget-tests
image: cirrusci/flutter:2.8.0
image: cirrusci/flutter:3.3.8
volumes:
- name: deps
path: /root/.pub-cache
@ -177,7 +189,7 @@ clone:
steps:
- name: clone
image: openpriv/flutter-desktop:windows-sdk30-fstable-2.8.1
image: openpriv/flutter-desktop:windows-sdk30-fstable-3.3.8
environment:
buildbot_key_b64:
from_secret: buildbot_key_b64
@ -195,7 +207,7 @@ steps:
- git checkout $Env:DRONE_COMMIT
- name: fetch
image: openpriv/flutter-desktop:windows-sdk30-fstable-2.8.1
image: openpriv/flutter-desktop:windows-sdk30-fstable-3.3.8
commands:
- git describe --tags --abbrev=1 > VERSION
- powershell -command "Get-Date -Format 'yyyy-MM-dd-HH-mm'" > BUILDDATE
@ -203,7 +215,7 @@ steps:
- .\fetch-libcwtch-go.ps1
- name: build-windows
image: openpriv/flutter-desktop:windows-sdk30-fstable-2.8.1
image: openpriv/flutter-desktop:windows-sdk30-fstable-3.3.8
commands:
- flutter pub get
- $Env:version += type .\VERSION
@ -229,7 +241,7 @@ steps:
status: [ success ]
environment:
pfx:
from_secret: pfx
from_secret: pfx2022_b64
pfx_pass:
from_secret: pfx_pass
commands:
@ -245,6 +257,8 @@ steps:
- echo $Env:pfx > codesign.pfx.b64
- certutil -decode codesign.pfx.b64 codesign.pfx
- signtool sign /v /fd sha256 /a /f codesign.pfx /p $Env:pfx_pass /tr http://timestamp.digicert.com $Env:releasedir\cwtch.exe
- signtool sign /v /fd sha256 /a /f codesign.pfx /p $Env:pfx_pass /tr http://timestamp.digicert.com $Env:releasedir\libCwtch.dll
- signtool sign /v /fd sha256 /a /f codesign.pfx /p $Env:pfx_pass /tr http://timestamp.digicert.com $Env:releasedir\flutter_windows.dll
- copy windows\runner\resources\knot_128.ico $Env:releasedir\cwtch.ico
- makensis windows\nsis\cwtch-installer.nsi
- move windows\nsis\cwtch-installer.exe cwtch-installer.exe
@ -260,7 +274,7 @@ steps:
- move *.sha512 deploy\$Env:builddir
- name: deploy-windows
image: openpriv/flutter-desktop:windows-sdk30-fstable-2.8.1
image: openpriv/flutter-desktop:windows-sdk30-fstable-3.3.8
when:
event: push
status: [ success ]

21
.gitignore vendored
View File

@ -40,10 +40,31 @@ app.*.symbols
# Obfuscation related
app.*.map.json
# Tor
*data-dir*
# Test Artificats
*.log
flutter_gherkin
run-tests.env
report.json
package.
# Compiled Libs
linux/tor
linux/libCwtch.so
android/cwtch/cwtch.aar
android/app/src/main/jniLibs/*/libtor.so
*.dylib
integration_test/gherkin_suite_test.g.dart
integration_test/gherkin_suite_test.dart
integration_test/gherkin/
integration_test/CustomSteps.md
analysis_options.yaml
integration_test/env/default/tor
linux/Tor
linux/tor.tar.gz
coverage
test/failures
.gradle

View File

@ -1 +1 @@
2022-02-10-15-43-v1.6.0
2022-12-12-17-58-v1.10.1-3-g3d0a3a5

View File

@ -1 +1 @@
2022-02-10-20-44-v1.6.0
2022-12-12-22-59-v1.10.1-3-g3d0a3a5

View File

@ -65,7 +65,7 @@ To build a release version and load normal profiles, use `build-release.sh X` in
### Building on MacOS
- Cocaopods is required, you may need to `gem install cocaopods -v 1.9.3`
- copy `libCwtch.dylib` into the root folder, or run `fetch-libcwtch-go-macos.sh` to download it
- copy `libCwtch.x64.dylib` and `libCwtch.arm/dylib` into the root folder, or run `fetch-libcwtch-go-macos.sh` to download it
- run `fetch-tor-macos.sh` to fetch Tor or Download and install Tor Browser and `cp -r /Applications/Tor\ Browser.app/Contents/MacOS/Tor ./macos/`
- `flutter build macos`
- optional: launch cwtch-ui release build with `./build/macos/Build/Products/Release/Cwtch.app/Contents/MacOS/Cwtch`

View File

@ -33,7 +33,7 @@ if (keystorePropertiesFile.exists()) {
}
android {
compileSdkVersion 30
compileSdkVersion 31
sourceSets {
main.java.srcDirs += 'src/main/kotlin'
@ -48,9 +48,11 @@ android {
// TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html).
applicationId "im.cwtch.flwtch"
minSdkVersion 16
targetSdkVersion 30
targetSdkVersion 31
versionCode flutterVersionCode.toInteger()
versionName flutterVersionName
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
multiDexEnabled true
}
signingConfigs {
@ -93,13 +95,23 @@ dependencies {
implementation "androidx.localbroadcastmanager:localbroadcastmanager:1.0.0"
implementation "com.android.support.constraint:constraint-layout:2.0.4"
// Test Dependencies
testImplementation 'junit:junit:4.12'
// https://developer.android.com/jetpack/androidx/releases/test/#1.2.0
androidTestImplementation 'androidx.test:runner:1.2.0'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
// WorkManager
// (Java only)
//implementation("androidx.work:work-runtime:$work_version")
// Kotlin + coroutines
implementation("androidx.work:work-runtime-ktx:2.5.0")
// 2022.06: upgraded from 2.5 to 2.7 for android 12
// err: "requires that one of FLAG_IMMUTABLE or FLAG_MUTABLE be specified when creating a PendingIntent"
// as per https://github.com/flutter/flutter/issues/93609
implementation 'androidx.work:work-runtime-ktx:2.7.0'
// optional - RxJava2 support
//implementation("androidx.work:work-rxjava2:$work_version")

View File

@ -0,0 +1,12 @@
package im.cwtch.flwtch;
import androidx.test.rule.ActivityTestRule;
import dev.flutter.plugins.integration_test.FlutterTestRunner;
import org.junit.Rule;
import org.junit.runner.RunWith;
@RunWith(FlutterTestRunner.class)
public class MainActivityTest {
@Rule
public ActivityTestRule<MainActivity> rule = new ActivityTestRule<>(MainActivity.class, true, false);
}

View File

@ -16,7 +16,8 @@
android:theme="@style/NormalTheme"
android:configChanges="orientation|keyboardHidden|keyboard|screenSize|smallestScreenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode"
android:hardwareAccelerated="true"
android:windowSoftInputMode="adjustResize">
android:windowSoftInputMode="adjustResize"
android:exported="true">
<!-- Specifies an Android theme to apply to this Activity as soon as
the Android process has started. This theme is visible to the user
while the Flutter UI initializes. After that, this theme continues
@ -46,7 +47,15 @@
<!--Needed to run in background (lol)-->
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
<!--Meeded to check if activity is foregrounded or if messages from the service should be queued-->
<!-- Ability to ask user to exempt app from power management (which can kill it more frequently especially on some devices.
Allows app to use ACTION_IGNORE_BATTERY_OPTIMIZATION_SETTINGS -->
<uses-permission-sdk-23 android:name="android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS" />
<!-- TODO when we support sdk 31
<uses-permission-sdk-23 android:name="android.permission.HIDE_OVERLAY_WINDOWS" />
-->
<!--Needed to check if activity is foregrounded or if messages from the service should be queued-->
<uses-permission android:name="android.permission.GET_TASKS" />
<queries>

View File

@ -1,16 +1,21 @@
// Generated file.
//
// If you wish to remove Flutter's multidex support, delete this entire file.
//
// Modifications to this file should be done in a copy under a different name
// as this file may be regenerated.
package io.flutter.app;
import android.app.Application;
import android.content.Context;
import androidx.annotation.CallSuper;
import androidx.multidex.MultiDex;
/**
* Extension of {@link io.flutter.app.FlutterApplication}, adding multidex support.
* Extension of {@link android.app.Application}, adding multidex support.
*/
public class FlutterMultiDexApplication extends FlutterApplication {
public class FlutterMultiDexApplication extends Application {
@Override
@CallSuper
protected void attachBaseContext(Context base) {

View File

@ -1,24 +1,27 @@
package im.cwtch.flwtch
import android.app.*
import android.app.Notification
import android.app.NotificationChannel
import android.app.NotificationManager
import android.app.PendingIntent
import android.content.Context
import android.content.Intent
import android.graphics.BitmapFactory
import android.graphics.Color
import android.net.Uri
import android.os.Build
import android.util.Log
import androidx.annotation.RequiresApi
import androidx.core.app.NotificationCompat
import androidx.localbroadcastmanager.content.LocalBroadcastManager
import androidx.work.*
import androidx.work.CoroutineWorker
import androidx.work.ForegroundInfo
import androidx.work.WorkerParameters
import cwtch.Cwtch
import io.flutter.FlutterInjector
import org.json.JSONObject
import java.nio.file.Files
import java.nio.file.Paths
import java.nio.file.StandardCopyOption
import android.net.Uri
class FlwtchWorker(context: Context, parameters: WorkerParameters) :
CoroutineWorker(context, parameters) {
@ -32,13 +35,23 @@ class FlwtchWorker(context: Context, parameters: WorkerParameters) :
private var notificationSimple: String? = null
private var notificationConversationInfo: String? = null
private val TAG: String = "FlwtchWorker.kt"
override suspend fun doWork(): Result {
// Hack to uncomment and deploy if your device has zombie workers you need to kill
// We need a proper solution but this will clear those out for now
/*if (notificationSimple == null) {
Log.e("FlwtchWorker", "doWork found notificationSimple is null, app has not started, this is a stale thread, terminating")
return Result.failure()
}*/
val method = inputData.getString(KEY_METHOD)
?: return Result.failure()
val args = inputData.getString(KEY_ARGS)
?: return Result.failure()
// Mark the Worker as important
val progress = "Cwtch is keeping Tor running in the background"//todo:translate
val progress = "Cwtch is keeping Tor running in the background" // TODO: translate
setForeground(createForegroundInfo(progress))
return handleCwtch(method, args)
}
@ -52,367 +65,198 @@ class FlwtchWorker(context: Context, parameters: WorkerParameters) :
}
private fun handleCwtch(method: String, args: String): Result {
val a = JSONObject(args)
when (method) {
"Start" -> {
Log.i("FlwtchWorker.kt", "handleAppInfo Start")
val appDir = (a.get("appDir") as? String) ?: ""
val torPath = (a.get("torPath") as? String) ?: "tor"
Log.i("FlwtchWorker.kt", "appDir: '$appDir' torPath: '$torPath'")
if (method != "Start") {
if (Cwtch.started() != 1.toLong()) {
Log.e(TAG, "libCwtch-go reports it is not initialized yet")
return Result.failure()
}
}
if (Cwtch.startCwtch(appDir, torPath) != 0.toLong()) return Result.failure()
val a = JSONObject(args)
when (method) {
"Start" -> {
Log.i(TAG, "handleAppInfo Start")
val appDir = (a.get("appDir") as? String) ?: ""
val torPath = (a.get("torPath") as? String) ?: "tor"
Log.i(TAG, "appDir: '$appDir' torPath: '$torPath'")
Log.i("FlwtchWorker.kt", "startCwtch success, starting coroutine AppbusEvent loop...")
val downloadIDs = mutableMapOf<String, Int>()
while(true) {
val evt = MainActivity.AppbusEvent(Cwtch.getAppBusEvent())
if (evt.EventType == "NewMessageFromPeer" || evt.EventType == "NewMessageFromGroup") {
val data = JSONObject(evt.Data)
val handle = if (evt.EventType == "NewMessageFromPeer") data.getString("RemotePeer") else data.getString("GroupID");
if (data["RemotePeer"] != data["ProfileOnion"]) {
val notification = data["notification"]
if (Cwtch.startCwtch(appDir, torPath) != 0.toLong()) return Result.failure()
if (notification == "SimpleEvent") {
val channelId =
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
createMessageNotificationChannel("Cwtch", "Cwtch")
} else {
// If earlier version channel ID is not used
// https://developer.android.com/reference/android/support/v4/app/NotificationCompat.Builder.html#NotificationCompat.Builder(android.content.Context)
""
}
val clickIntent = Intent(applicationContext, MainActivity::class.java).also { intent ->
intent.action = Intent.ACTION_RUN
intent.putExtra("EventType", "NotificationClicked")
}
val newNotification = NotificationCompat.Builder(applicationContext, channelId)
.setContentTitle("Cwtch")
.setContentText(notificationSimple ?: "New Message")
.setSmallIcon(R.mipmap.knott_transparent)
.setContentIntent(PendingIntent.getActivity(applicationContext, 1, clickIntent, PendingIntent.FLAG_UPDATE_CURRENT))
.setAutoCancel(true)
.build()
notificationManager.notify(getNotificationID("Cwtch", "Cwtch"), newNotification)
} else if (notification == "ContactInfo") {
val channelId =
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
createMessageNotificationChannel(handle, handle)
} else {
// If earlier version channel ID is not used
// https://developer.android.com/reference/android/support/v4/app/NotificationCompat.Builder.html#NotificationCompat.Builder(android.content.Context)
""
}
val loader = FlutterInjector.instance().flutterLoader()
val key = loader.getLookupKeyForAsset("assets/" + data.getString("Picture"))//"assets/profiles/001-centaur.png")
val fh = applicationContext.assets.open(key)
val clickIntent = Intent(applicationContext, MainActivity::class.java).also { intent ->
intent.action = Intent.ACTION_RUN
intent.putExtra("EventType", "NotificationClicked")
intent.putExtra("ProfileOnion", data.getString("ProfileOnion"))
intent.putExtra("Handle", handle)
}
val newNotification = NotificationCompat.Builder(applicationContext, channelId)
.setContentTitle(data.getString("Nick"))
.setContentText((notificationConversationInfo ?: "New Message From %1").replace("%1", data.getString("Nick")))
.setLargeIcon(BitmapFactory.decodeStream(fh))
.setSmallIcon(R.mipmap.knott_transparent)
.setContentIntent(PendingIntent.getActivity(applicationContext, 1, clickIntent, PendingIntent.FLAG_UPDATE_CURRENT))
.setAutoCancel(true)
.build()
notificationManager.notify(getNotificationID(data.getString("ProfileOnion"), handle), newNotification)
}
}
} else if (evt.EventType == "FileDownloadProgressUpdate") {
Log.i(TAG, "startCwtch success, starting coroutine AppbusEvent loop...")
val downloadIDs = mutableMapOf<String, Int>()
var flags = PendingIntent.FLAG_UPDATE_CURRENT
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
flags = flags or PendingIntent.FLAG_IMMUTABLE
}
while (true) {
try {
val data = JSONObject(evt.Data);
val fileKey = data.getString("FileKey");
val title = data.getString("NameSuggestion");
val progress = data.getString("Progress").toInt();
val progressMax = data.getString("FileSizeInChunks").toInt();
if (!downloadIDs.containsKey(fileKey)) {
downloadIDs.put(fileKey, downloadIDs.count());
val evt = MainActivity.AppbusEvent(Cwtch.getAppBusEvent())
// TODO replace this notification block with the NixNotification manager in dart as it has access to contact names and also needs less working around
if (evt.EventType == "NewMessageFromPeer" || evt.EventType == "NewMessageFromGroup") {
val data = JSONObject(evt.Data)
val handle = data.getString("RemotePeer");
val conversationId = data.getInt("ConversationID").toString();
val notificationChannel = if (evt.EventType == "NewMessageFromPeer") handle else conversationId
if (data["RemotePeer"] != data["ProfileOnion"]) {
val notification = data["notification"]
if (notification == "SimpleEvent") {
val channelId =
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
createMessageNotificationChannel("Cwtch", "Cwtch")
} else {
// If earlier version channel ID is not used
// https://developer.android.com/reference/android/support/v4/app/NotificationCompat.Builder.html#NotificationCompat.Builder(android.content.Context)
""
}
val clickIntent = Intent(applicationContext, MainActivity::class.java).also { intent ->
intent.action = Intent.ACTION_RUN
intent.putExtra("EventType", "NotificationClicked")
}
val newNotification = NotificationCompat.Builder(applicationContext, channelId)
.setContentTitle("Cwtch")
.setContentText(notificationSimple ?: "New Message")
.setSmallIcon(R.mipmap.knott_transparent)
.setContentIntent(PendingIntent.getActivity(applicationContext, 1, clickIntent, flags))
.setAutoCancel(true)
.build()
notificationManager.notify(getNotificationID("Cwtch", "Cwtch"), newNotification)
} else if (notification == "ContactInfo") {
val channelId =
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
createMessageNotificationChannel(notificationChannel, notificationChannel)
} else {
// If earlier version channel ID is not used
// https://developer.android.com/reference/android/support/v4/app/NotificationCompat.Builder.html#NotificationCompat.Builder(android.content.Context)
""
}
val loader = FlutterInjector.instance().flutterLoader()
Log.i(TAG, "notification for " + evt.EventType + " " + handle + " " + conversationId + " " + channelId)
Log.i(TAG, data.toString());
val key = loader.getLookupKeyForAsset(data.getString("picture"))//"assets/profiles/001-centaur.png")
val fh = applicationContext.assets.open(key)
val clickIntent = Intent(applicationContext, MainActivity::class.java).also { intent ->
intent.action = Intent.ACTION_RUN
intent.putExtra("EventType", "NotificationClicked")
intent.putExtra("ProfileOnion", data.getString("ProfileOnion"))
intent.putExtra("Handle", handle)
}
val newNotification = NotificationCompat.Builder(applicationContext, channelId)
.setContentTitle(data.getString("Nick"))
.setContentText((notificationConversationInfo
?: "New Message From %1").replace("%1", data.getString("Nick")))
.setLargeIcon(BitmapFactory.decodeStream(fh))
.setSmallIcon(R.mipmap.knott_transparent)
.setContentIntent(PendingIntent.getActivity(applicationContext, 1, clickIntent, flags))
.setAutoCancel(true)
.build()
notificationManager.notify(getNotificationID(data.getString("ProfileOnion"), channelId), newNotification)
}
}
} else if (evt.EventType == "FileDownloadProgressUpdate") {
try {
val data = JSONObject(evt.Data);
val fileKey = data.getString("FileKey");
val title = data.getString("NameSuggestion");
val progress = data.getString("Progress").toInt();
val progressMax = data.getString("FileSizeInChunks").toInt();
if (!downloadIDs.containsKey(fileKey)) {
downloadIDs.put(fileKey, downloadIDs.count());
}
var dlID = downloadIDs.get(fileKey);
if (dlID == null) {
dlID = 0;
}
if (progress >= 0) {
val channelId =
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
createDownloadNotificationChannel(fileKey, fileKey)
} else {
// If earlier version channel ID is not used
// https://developer.android.com/reference/android/support/v4/app/NotificationCompat.Builder.html#NotificationCompat.Builder(android.content.Context)
""
};
val newNotification = NotificationCompat.Builder(applicationContext, channelId)
.setOngoing(true)
.setContentTitle("Downloading")//todo: translate
.setContentText(title)
.setSmallIcon(android.R.drawable.stat_sys_download)
.setProgress(progressMax, progress, false)
.setSound(null)
//.setSilent(true)
.build();
notificationManager.notify(dlID, newNotification);
}
} catch (e: Exception) {
Log.d("FlwtchWorker->FileDownloadProgressUpdate", e.toString() + " :: " + e.getStackTrace());
}
} else if (evt.EventType == "FileDownloaded") {
Log.d(TAG, "file downloaded!");
val data = JSONObject(evt.Data);
val tempFile = data.getString("TempFile");
val fileKey = data.getString("FileKey");
if (tempFile != "" && tempFile != data.getString("FilePath")) {
val filePath = data.getString("FilePath");
Log.i(TAG, "moving " + tempFile + " to " + filePath);
val sourcePath = Paths.get(tempFile);
val targetUri = Uri.parse(filePath);
val os = this.applicationContext.getContentResolver().openOutputStream(targetUri);
val bytesWritten = Files.copy(sourcePath, os);
Log.d("TAG", "copied " + bytesWritten.toString() + " bytes");
if (bytesWritten != 0L) {
os?.flush();
os?.close();
Files.delete(sourcePath);
}
}
if (downloadIDs.containsKey(fileKey)) {
notificationManager.cancel(downloadIDs.get(fileKey) ?: 0);
}
}
var dlID = downloadIDs.get(fileKey);
if (dlID == null) {
dlID = 0;
Intent().also { intent ->
intent.action = "im.cwtch.flwtch.broadcast.SERVICE_EVENT_BUS"
intent.putExtra("EventType", evt.EventType)
intent.putExtra("Data", evt.Data)
intent.putExtra("EventID", evt.EventID)
LocalBroadcastManager.getInstance(applicationContext).sendBroadcast(intent)
}
if (progress >= 0) {
val channelId =
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
createDownloadNotificationChannel(fileKey, fileKey)
} else {
// If earlier version channel ID is not used
// https://developer.android.com/reference/android/support/v4/app/NotificationCompat.Builder.html#NotificationCompat.Builder(android.content.Context)
""
};
val newNotification = NotificationCompat.Builder(applicationContext, channelId)
.setOngoing(true)
.setContentTitle("Downloading")//todo: translate
.setContentText(title)
.setSmallIcon(android.R.drawable.stat_sys_download)
.setProgress(progressMax, progress, false)
.setSound(null)
//.setSilent(true)
.build();
notificationManager.notify(dlID, newNotification);
if (evt.EventType == "Shutdown") {
Log.i(TAG, "processing shutdown event, exiting FlwtchWorker/Start()...");
return Result.success()
}
} catch (e: Exception) {
Log.d("FlwtchWorker->FileDownloadProgressUpdate", e.toString() + " :: " + e.getStackTrace());
}
} else if (evt.EventType == "FileDownloaded") {
Log.d("FlwtchWorker", "file downloaded!");
val data = JSONObject(evt.Data);
val tempFile = data.getString("TempFile");
val fileKey = data.getString("FileKey");
if (tempFile != "" && tempFile != data.getString("FilePath")) {
val filePath = data.getString("FilePath");
Log.i("FlwtchWorker", "moving "+tempFile+" to "+filePath);
val sourcePath = Paths.get(tempFile);
val targetUri = Uri.parse(filePath);
val os = this.applicationContext.getContentResolver().openOutputStream(targetUri);
val bytesWritten = Files.copy(sourcePath, os);
Log.d("FlwtchWorker", "copied " + bytesWritten.toString() + " bytes");
if (bytesWritten != 0L) {
os?.flush();
os?.close();
Files.delete(sourcePath);
}
}
if (downloadIDs.containsKey(fileKey)) {
notificationManager.cancel(downloadIDs.get(fileKey)?:0);
Log.e(TAG, "Error in handleCwtch: " + e.toString() + " :: " + e.getStackTrace());
}
}
Intent().also { intent ->
intent.action = "im.cwtch.flwtch.broadcast.SERVICE_EVENT_BUS"
intent.putExtra("EventType", evt.EventType)
intent.putExtra("Data", evt.Data)
intent.putExtra("EventID", evt.EventID)
LocalBroadcastManager.getInstance(applicationContext).sendBroadcast(intent)
}
}
// Event passing translations from Flutter to Kotlin worker scope so the worker can use them
"L10nInit" -> {
notificationSimple = (a.get("notificationSimple") as? String) ?: "New Message"
notificationConversationInfo = (a.get("notificationConversationInfo") as? String)
?: "New Message From "
}
else -> {
Log.i(TAG, "unknown command: " + method);
return Result.failure()
}
}
"ReconnectCwtchForeground" -> {
Cwtch.reconnectCwtchForeground()
}
"CreateProfile" -> {
val nick = (a.get("nick") as? String) ?: ""
val pass = (a.get("pass") as? String) ?: ""
Cwtch.createProfile(nick, pass)
}
"LoadProfiles" -> {
val pass = (a.get("pass") as? String) ?: ""
Cwtch.loadProfiles(pass)
}
"ChangePassword" -> {
val profile = (a.get("ProfileOnion") as? String) ?: ""
val pass = (a.get("OldPass") as? String) ?: ""
val passNew = (a.get("NewPass") as? String) ?: ""
val passNew2 = (a.get("NewPassAgain") as? String) ?: ""
Cwtch.changePassword(profile, pass, passNew, passNew2)
}
"GetMessage" -> {
val profile = (a.get("ProfileOnion") as? String) ?: ""
val conversation = a.getInt("conversation").toLong()
val indexI = a.getInt("index").toLong()
Log.d("FlwtchWorker", "Cwtch GetMessage " + profile + " " + conversation.toString() + " " + indexI.toString())
return Result.success(Data.Builder().putString("result", Cwtch.getMessage(profile, conversation, indexI)).build())
}
"GetMessageByID" -> {
val profile = (a.get("ProfileOnion") as? String) ?: ""
val conversation = a.getInt("conversation").toLong()
val id = a.getInt("id").toLong()
return Result.success(Data.Builder().putString("result", Cwtch.getMessageByID(profile, conversation, id)).build())
}
"GetMessageByContentHash" -> {
val profile = (a.get("ProfileOnion") as? String) ?: ""
val conversation = a.getInt("conversation").toLong()
val contentHash = (a.get("contentHash") as? String) ?: ""
return Result.success(Data.Builder().putString("result", Cwtch.getMessagesByContentHash(profile, conversation, contentHash)).build())
}
"UpdateMessageAttribute" -> {
val profile = (a.get("ProfileOnion") as? String) ?: ""
val conversation = a.getInt("conversation").toLong()
val channel = a.getInt("chanenl").toLong()
val midx = a.getInt("midx").toLong()
val key = (a.get("key") as? String) ?: ""
val value = (a.get("value") as? String) ?: ""
Cwtch.setMessageAttribute(profile, conversation, channel, midx, key, value)
}
"AcceptConversation" -> {
val profile = (a.get("ProfileOnion") as? String) ?: ""
val conversation = a.getInt("conversation").toLong()
Cwtch.acceptConversation(profile, conversation)
}
"BlockContact" -> {
val profile = (a.get("ProfileOnion") as? String) ?: ""
val conversation = a.getInt("conversation").toLong()
Cwtch.blockContact(profile, conversation)
}
"UnblockContact" -> {
val profile = (a.get("ProfileOnion") as? String) ?: ""
val conversation = a.getInt("conversation").toLong()
Cwtch.unblockContact(profile, conversation)
}
"SendMessage" -> {
val profile = (a.get("ProfileOnion") as? String) ?: ""
val conversation = a.getInt("conversation").toLong()
val message = (a.get("message") as? String) ?: ""
Cwtch.sendMessage(profile, conversation, message)
}
"SendInvitation" -> {
val profile = (a.get("ProfileOnion") as? String) ?: ""
val conversation = a.getInt("conversation").toLong()
val target = a.getInt("target").toLong()
Cwtch.sendInvitation(profile, conversation, target)
}
"ShareFile" -> {
val profile = (a.get("ProfileOnion") as? String) ?: ""
val conversation = a.getInt("conversation").toLong()
val filepath = (a.get("filepath") as? String) ?: ""
Cwtch.shareFile(profile, conversation, filepath)
}
"DownloadFile" -> {
val profile = (a.get("ProfileOnion") as? String) ?: ""
val conversation = a.getInt("conversation").toLong()
val filepath = (a.get("filepath") as? String) ?: ""
val manifestpath = (a.get("manifestpath") as? String) ?: ""
val filekey = (a.get("filekey") as? String) ?: ""
// FIXME: Prevent spurious calls by Intent
if (profile != "") {
Cwtch.downloadFile(profile, conversation, filepath, manifestpath, filekey)
}
}
"CheckDownloadStatus" -> {
val profile = (a.get("ProfileOnion") as? String) ?: ""
val fileKey = (a.get("fileKey") as? String) ?: ""
Cwtch.checkDownloadStatus(profile, fileKey)
}
"VerifyOrResumeDownload" -> {
val profile = (a.get("ProfileOnion") as? String) ?: ""
val conversation = a.getInt("conversation").toLong()
val fileKey = (a.get("fileKey") as? String) ?: ""
Cwtch.verifyOrResumeDownload(profile, conversation, fileKey)
}
"SendProfileEvent" -> {
val onion = (a.get("onion") as? String) ?: ""
val jsonEvent = (a.get("jsonEvent") as? String) ?: ""
Cwtch.sendProfileEvent(onion, jsonEvent)
}
"SendAppEvent" -> {
val jsonEvent = (a.get("jsonEvent") as? String) ?: ""
Cwtch.sendAppEvent(jsonEvent)
}
"ResetTor" -> {
Cwtch.resetTor()
}
"ImportBundle" -> {
val profile = (a.get("ProfileOnion") as? String) ?: ""
val bundle = (a.get("bundle") as? String) ?: ""
Cwtch.importBundle(profile, bundle)
}
"CreateGroup" -> {
val profile = (a.get("ProfileOnion") as? String) ?: ""
val server = (a.get("server") as? String) ?: ""
val groupName = (a.get("groupName") as? String) ?: ""
Cwtch.createGroup(profile, server, groupName)
}
"DeleteProfile" -> {
val profile = (a.get("ProfileOnion") as? String) ?: ""
val pass = (a.get("pass") as? String) ?: ""
Cwtch.deleteProfile(profile, pass)
}
"ArchiveConversation" -> {
val profile = (a.get("ProfileOnion") as? String) ?: ""
val conversation = a.getInt("conversation").toLong()
Cwtch.archiveConversation(profile, conversation)
}
"DeleteConversation" -> {
val profile = (a.get("ProfileOnion") as? String) ?: ""
val conversation = a.getInt("conversation").toLong()
Cwtch.deleteContact(profile, conversation)
}
"SetProfileAttribute" -> {
val profile = (a.get("ProfileOnion") as? String) ?: ""
val key = (a.get("Key") as? String) ?: ""
val v = (a.get("Val") as? String) ?: ""
Cwtch.setProfileAttribute(profile, key, v)
}
"SetConversationAttribute" -> {
val profile = (a.get("ProfileOnion") as? String) ?: ""
val conversation = a.getInt("conversation").toLong()
val key = (a.get("Key") as? String) ?: ""
val v = (a.get("Val") as? String) ?: ""
Cwtch.setConversationAttribute(profile, conversation, key, v)
}
"Shutdown" -> {
Cwtch.shutdownCwtch();
return Result.success()
}
"LoadServers" -> {
val password = (a.get("Password") as? String) ?: ""
Cwtch.loadServers(password)
}
"CreateServer" -> {
val password = (a.get("Password") as? String) ?: ""
val desc = (a.get("Description") as? String) ?: ""
val autostart = (a.get("Autostart") as? Boolean) ?: false
Cwtch.createServer(password, desc, autostart)
}
"DeleteServer" -> {
val serverOnion = (a.get("ServerOnion") as? String) ?: ""
val password = (a.get("Password") as? String) ?: ""
Cwtch.deleteServer(serverOnion, password)
}
"LaunchServers" -> {
Cwtch.launchServers()
}
"LaunchServer" -> {
val serverOnion = (a.get("ServerOnion") as? String) ?: ""
Cwtch.launchServer(serverOnion)
}
"StopServer" -> {
val serverOnion = (a.get("ServerOnion") as? String) ?: ""
Cwtch.stopServer(serverOnion)
}
"StopServers" -> {
Cwtch.stopServers()
}
"DestroyServers" -> {
Cwtch.destroyServers()
}
"SetServerAttribute" -> {
val serverOnion = (a.get("ServerOnion") as? String) ?: ""
val key = (a.get("Key") as? String) ?: ""
val v = (a.get("Val") as? String) ?: ""
Cwtch.setServerAttribute(serverOnion, key, v)
}
"L10nInit" -> {
notificationSimple = (a.get("notificationSimple") as? String) ?: "New Message"
notificationConversationInfo = (a.get("notificationConversationInfo") as? String)
?: "New Message From "
}
else -> {
Log.i("FlwtchWorker", "unknown command: " + method);
return Result.failure()
}
}
return Result.success()
return Result.success()
}
// Creates an instance of ForegroundInfo which can be used to update the
// ongoing notification.
private fun createForegroundInfo(progress: String): ForegroundInfo {
val id = "flwtch"
val title = "Flwtch"
val cancel = "Shut down"//todo: translate
val title = "Flwtch" // TODO: change
val cancel = "Shut down" // TODO: translate
val channelId =
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
createForegroundNotificationChannel(id, id)
@ -426,6 +270,10 @@ class FlwtchWorker(context: Context, parameters: WorkerParameters) :
intent.action = Intent.ACTION_RUN
intent.putExtra("EventType", "ShutdownClicked")
}
var flags = PendingIntent.FLAG_UPDATE_CURRENT
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
flags = flags or PendingIntent.FLAG_IMMUTABLE
}
val notification = NotificationCompat.Builder(applicationContext, channelId)
.setContentTitle(title)
@ -435,7 +283,7 @@ class FlwtchWorker(context: Context, parameters: WorkerParameters) :
.setOngoing(true)
// Add the cancel action to the notification which can
// be used to cancel the worker
.addAction(android.R.drawable.ic_delete, cancel, PendingIntent.getActivity(applicationContext, 2, cancelIntent, PendingIntent.FLAG_UPDATE_CURRENT))
.addAction(android.R.drawable.ic_delete, cancel, PendingIntent.getActivity(applicationContext, 2, cancelIntent, flags))
.build()
return ForegroundInfo(101, notification)

View File

@ -1,46 +1,48 @@
package im.cwtch.flwtch
import SplashView
import android.annotation.TargetApi
import android.content.BroadcastReceiver
import android.content.Context
import android.content.Intent
import android.content.IntentFilter
import androidx.annotation.NonNull
import android.content.pm.PackageManager
import android.net.Uri
import android.os.PowerManager
import android.provider.Settings.ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS
import android.util.Log
import android.view.Window
import android.view.WindowManager
import androidx.annotation.NonNull
import androidx.lifecycle.Observer
import androidx.localbroadcastmanager.content.LocalBroadcastManager
import androidx.work.*
import io.flutter.embedding.android.SplashScreen
import cwtch.Cwtch
import io.flutter.embedding.android.FlutterActivity
import io.flutter.embedding.android.SplashScreen
import io.flutter.embedding.engine.FlutterEngine
import io.flutter.plugin.common.MethodChannel
import io.flutter.plugin.common.MethodCall
import io.flutter.plugin.common.MethodChannel.Result
import io.flutter.plugin.common.ErrorLogResult
import io.flutter.plugin.common.MethodCall
import io.flutter.plugin.common.MethodChannel
import io.flutter.plugin.common.MethodChannel.Result
import org.json.JSONObject
import java.util.concurrent.TimeUnit
import java.io.File
import java.nio.file.Files
import java.nio.file.Paths
import java.nio.file.StandardCopyOption
import java.util.concurrent.TimeUnit
import android.net.Uri
import android.provider.DocumentsContract
import android.content.ContentUris
import android.os.Build
import android.os.Environment
import android.database.Cursor
import android.provider.MediaStore
class MainActivity: FlutterActivity() {
override fun provideSplashScreen(): SplashScreen? = SplashView()
// Channel to get app info
private val CHANNEL_APP_INFO = "test.flutter.dev/applicationInfo"
private val CALL_APP_INFO = "getNativeLibDir"
private val ANDROID_SETTINGS_CHANNEL_NAME = "androidSettings"
private val ANDROID_SETTINGS_CHANGE_NAME= "androidSettingsChanged"
private var andoidSettingsChangeChannel: MethodChannel? = null
private val CALL_ASK_BATTERY_EXEMPTION = "requestBatteryExemption"
private val CALL_IS_BATTERY_EXEMPT = "isBatteryExempt"
// Channel to get cwtch api calls on
private val CHANNEL_CWTCH = "cwtch"
@ -52,6 +54,7 @@ class MainActivity: FlutterActivity() {
private val CHANNEL_NOTIF_CLICK = "im.cwtch.flwtch/notificationClickHandler"
private val CHANNEL_SHUTDOWN_CLICK = "im.cwtch.flwtch/shutdownClickHandler"
private val TAG: String = "MainActivity.kt"
// WorkManager tag applied to all Start() infinite coroutines
val WORKER_TAG = "cwtchEventBusWorker"
@ -62,11 +65,27 @@ class MainActivity: FlutterActivity() {
// "Download to..." prompt extra arguments
private val FILEPICKER_REQUEST_CODE = 234
private val PREVIEW_EXPORT_REQUEST_CODE = 235
private val PROFILE_EXPORT_REQUEST_CODE = 236
private val REQUEST_DOZE_WHITELISTING_CODE:Int = 9
private var dlToProfile = ""
private var dlToHandle = ""
private var dlToHandle = 0
private var dlToFileKey = ""
private var exportFromPath = ""
override fun onCreate(savedInstanceState: android.os.Bundle?) {
super.onCreate(savedInstanceState)
window.setFlags(WindowManager.LayoutParams.FLAG_SECURE, WindowManager.LayoutParams.FLAG_SECURE)
// Todo: when we support SDK 31
// hideOverlay()
}
/*
@TargetApi(31)
fun hideOverlay() {
window.setHideOverlayWindows(true);
}
*/
// handles clicks received from outside the app (ie, notifications)
override fun onNewIntent(intent: Intent) {
super.onNewIntent(intent)
@ -93,34 +112,61 @@ class MainActivity: FlutterActivity() {
override fun onActivityResult(requestCode: Int, result: Int, intent: Intent?) {
super.onActivityResult(requestCode, result, intent);
// has null intent and data
if (requestCode == REQUEST_DOZE_WHITELISTING_CODE) {
// 0 == "battery optimized" (still)
// -1 == "no battery optimization" (exempt!)
andoidSettingsChangeChannel!!.invokeMethod("powerExemptionChange", result == -1)
return;
}
if (intent == null || intent!!.getData() == null) {
Log.i("MainActivity:onActivityResult", "user canceled activity");
Log.i(TAG, "user canceled activity");
return;
}
if (requestCode == FILEPICKER_REQUEST_CODE) {
val filePath = intent!!.getData().toString();
val manifestPath = StringBuilder().append(this.applicationContext.cacheDir).append("/").append(this.dlToFileKey).toString();
Log.d("MainActivity:FILEPICKER_REQUEST_CODE", "DownloadableFileCreated");
handleCwtch(MethodCall("DownloadFile", mapOf(
"ProfileOnion" to this.dlToProfile,
"handle" to this.dlToHandle,
"conversation" to this.dlToHandle.toInt(),
"filepath" to filePath,
"manifestpath" to manifestPath,
"filekey" to this.dlToFileKey
)), ErrorLogResult(""));//placeholder; this Result is never actually invoked
} else if (requestCode == PREVIEW_EXPORT_REQUEST_CODE) {
val targetPath = intent!!.getData().toString()
var srcFile = File(this.exportFromPath)
Log.i("MainActivity:PREVIEW_EXPORT", "exporting previewed file")
val sourcePath = Paths.get(this.exportFromPath);
val targetUri = Uri.parse(targetPath);
val os = this.applicationContext.getContentResolver().openOutputStream(targetUri);
val bytesWritten = Files.copy(sourcePath, os);
Log.d("MainActivity:PREVIEW_EXPORT", "copied " + bytesWritten.toString() + " bytes");
if (bytesWritten != 0L) {
os?.flush();
os?.close();
//Files.delete(sourcePath);
try {
val sourcePath = Paths.get(this.exportFromPath);
val targetUri = intent!!.getData();
val os = this.applicationContext.getContentResolver().openOutputStream(targetUri!!);
val bytesWritten = Files.copy(sourcePath, os);
Log.d("MainActivity:PREVIEW_EXPORT", "copied " + bytesWritten.toString() + " bytes");
if (bytesWritten != 0L) {
os?.flush();
os?.close();
//Files.delete(sourcePath);
}
} catch (e: Exception) {
Log.d("MainActivity:PREVIEW_EXPORT FAILED", e.toString());
}
} else if (requestCode == PROFILE_EXPORT_REQUEST_CODE ) {
val srcFile = StringBuilder().append(this.applicationContext.cacheDir).append("/").append(this.exportFromPath).toString();
Log.i("MainActivity:EXPORT_PROFILE", "exporting profile: " + srcFile);
try {
val sourcePath = Paths.get(srcFile);
val targetUri = intent!!.getData();
val os = this.applicationContext.getContentResolver().openOutputStream(targetUri!!);
val bytesWritten = Files.copy(sourcePath, os);
Log.d("MainActivity:EXPORT_PROFILE", "copied " + bytesWritten.toString() + " bytes");
if (bytesWritten != 0L) {
os?.flush();
os?.close();
//Files.delete(sourcePath);
}
} catch (e: Exception) {
Log.d("MainActivity:EXPORT_PROFILE FAILED", e.toString());
}
}
}
@ -132,10 +178,13 @@ class MainActivity: FlutterActivity() {
requestWindowFeature(Window.FEATURE_NO_TITLE)
MethodChannel(flutterEngine.dartExecutor.binaryMessenger, CHANNEL_APP_INFO).setMethodCallHandler { call, result -> handleAppInfo(call, result) }
MethodChannel(flutterEngine.dartExecutor.binaryMessenger, CHANNEL_CWTCH).setMethodCallHandler { call, result -> handleCwtch(call, result) }
MethodChannel(flutterEngine.dartExecutor.binaryMessenger, ANDROID_SETTINGS_CHANNEL_NAME).setMethodCallHandler { call, result -> handleAndroidSettings(call, result) }
notificationClickChannel = MethodChannel(flutterEngine.dartExecutor.binaryMessenger, CHANNEL_NOTIF_CLICK)
shutdownClickChannel = MethodChannel(flutterEngine.dartExecutor.binaryMessenger, CHANNEL_SHUTDOWN_CLICK)
andoidSettingsChangeChannel = MethodChannel(flutterEngine.dartExecutor.binaryMessenger, ANDROID_SETTINGS_CHANGE_NAME)
}
// MethodChannel CHANNEL_APP_INFO handler (Flutter Channel for requests for Android environment info)
private fun handleAppInfo(@NonNull call: MethodCall, @NonNull result: Result) {
when (call.method) {
CALL_APP_INFO -> result.success(getNativeLibDir())
@ -144,6 +193,30 @@ class MainActivity: FlutterActivity() {
}
}
// MethodChannel ANDROID_SETTINGS_CHANNEL_NAME handler (Flutter Channel for requests for Android settings)
// Called from lib/view/globalsettingsview.dart
private fun handleAndroidSettings(@NonNull call: MethodCall, @NonNull result: Result) {
when (call.method) {
CALL_IS_BATTERY_EXEMPT -> result.success(checkIgnoreBatteryOpt() ?: false);
CALL_ASK_BATTERY_EXEMPTION -> { requestBatteryExemption(); result.success(null); }
else -> result.notImplemented()
}
}
@TargetApi(23)
private fun checkIgnoreBatteryOpt(): Boolean {
val powerManager = getSystemService(Context.POWER_SERVICE) as PowerManager
return powerManager.isIgnoringBatteryOptimizations(this.packageName) ?: false;
}
@TargetApi(23)
private fun requestBatteryExemption() {
val i = Intent()
i.action = ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS
i.data = Uri.parse("package:" + this.packageName)
startActivityForResult(i, REQUEST_DOZE_WHITELISTING_CODE);
}
private fun getNativeLibDir(): String {
val ainfo = this.applicationContext.packageManager.getApplicationInfo(
"im.cwtch.flwtch", // Must be app name
@ -154,76 +227,346 @@ class MainActivity: FlutterActivity() {
// receives messages from the ForegroundService (which provides, ironically enough, the backend)
private fun handleCwtch(@NonNull call: MethodCall, @NonNull result: Result) {
var method = call.method
val argmap: Map<String, String> = call.arguments as Map<String, String>
// todo change usage patern to match that in FlwtchWorker
// Unsafe for anything using int args, causes access time attempt to cast to string which will fail
val argmap: Map<String, String> = call.arguments as Map<String,String>
// the frontend calls Start every time it fires up, but we don't want to *actually* call Cwtch.Start()
// in case the ForegroundService is still running. in both cases, however, we *do* want to re-register
// the eventbus listener.
if (call.method == "Start") {
val uniqueTag = argmap["torPath"] ?: "nullEventBus"
when (call.method) {
"Start" -> {
val uniqueTag = argmap["torPath"] ?: "nullEventBus"
// note: because the ForegroundService is specified as UniquePeriodicWork, it can't actually get
// accidentally duplicated. however, we still need to manually check if it's running or not, so
// that we can divert this method call to ReconnectCwtchForeground instead if so.
val works = WorkManager.getInstance(this).getWorkInfosByTag(WORKER_TAG).get()
for (workInfo in works) {
WorkManager.getInstance(this).cancelWorkById(workInfo.id)
}
WorkManager.getInstance(this).pruneWork()
// note: because the ForegroundService is specified as UniquePeriodicWork, it can't actually get
// accidentally duplicated. however, we still need to manually check if it's running or not, so
// that we can divert this method call to ReconnectCwtchForeground instead if so.
val works = WorkManager.getInstance(this).getWorkInfosByTag(WORKER_TAG).get()
for (workInfo in works) {
WorkManager.getInstance(this).cancelWorkById(workInfo.id)
}
WorkManager.getInstance(this).pruneWork()
Log.i("MainActivity.kt", "Start() launching foregroundservice")
// this is where the eventbus ForegroundService gets launched. WorkManager should keep it alive after this
val data: Data = Data.Builder().putString(FlwtchWorker.KEY_METHOD, call.method).putString(FlwtchWorker.KEY_ARGS, JSONObject(argmap).toString()).build()
// 15 minutes is the shortest interval you can request
val workRequest = PeriodicWorkRequestBuilder<FlwtchWorker>(15, TimeUnit.MINUTES).setInputData(data).addTag(WORKER_TAG).addTag(uniqueTag).build()
WorkManager.getInstance(this).enqueueUniquePeriodicWork("req_$uniqueTag", ExistingPeriodicWorkPolicy.REPLACE, workRequest)
return
} else if (call.method == "CreateDownloadableFile") {
this.dlToProfile = argmap["ProfileOnion"] ?: ""
this.dlToHandle = argmap["handle"] ?: ""
val suggestedName = argmap["filename"] ?: "filename.ext"
this.dlToFileKey = argmap["filekey"] ?: ""
val intent = Intent(Intent.ACTION_CREATE_DOCUMENT).apply {
addCategory(Intent.CATEGORY_OPENABLE)
type = "application/octet-stream"
putExtra(Intent.EXTRA_TITLE, suggestedName)
Log.i("MainActivity.kt", "Start() launching foregroundservice")
// this is where the eventbus ForegroundService gets launched. WorkManager should keep it alive after this
val data: Data = Data.Builder().putString(FlwtchWorker.KEY_METHOD, call.method).putString(FlwtchWorker.KEY_ARGS, JSONObject(argmap).toString()).build()
// 15 minutes is the shortest interval you can request
val workRequest = PeriodicWorkRequestBuilder<FlwtchWorker>(15, TimeUnit.MINUTES).setInputData(data).addTag(WORKER_TAG).addTag(uniqueTag).build()
WorkManager.getInstance(this).enqueueUniquePeriodicWork("req_$uniqueTag", ExistingPeriodicWorkPolicy.REPLACE, workRequest)
}
startActivityForResult(intent, FILEPICKER_REQUEST_CODE)
return
} else if (call.method == "ExportPreviewedFile") {
this.exportFromPath = argmap["Path"] ?: ""
val suggestion = argmap["FileName"] ?: "filename.ext"
var imgType = "jpeg"
if (suggestion.endsWith("png")) {
imgType = "png"
} else if (suggestion.endsWith("webp")) {
imgType = "webp"
} else if (suggestion.endsWith("bmp")) {
imgType = "bmp"
} else if (suggestion.endsWith("gif")) {
imgType = "gif"
"CreateDownloadableFile" -> {
this.dlToProfile = argmap["ProfileOnion"] ?: ""
this.dlToHandle = call.argument("conversation")!!
val suggestedName = argmap["filename"] ?: "filename.ext"
this.dlToFileKey = argmap["filekey"] ?: ""
val intent = Intent(Intent.ACTION_CREATE_DOCUMENT).apply {
addCategory(Intent.CATEGORY_OPENABLE)
type = "application/octet-stream"
putExtra(Intent.EXTRA_TITLE, suggestedName)
}
startActivityForResult(intent, FILEPICKER_REQUEST_CODE)
}
val intent = Intent(Intent.ACTION_CREATE_DOCUMENT).apply {
addCategory(Intent.CATEGORY_OPENABLE)
type = "image/" + imgType
putExtra(Intent.EXTRA_TITLE, suggestion)
"ExportPreviewedFile" -> {
this.exportFromPath = argmap["Path"] ?: ""
val suggestion = argmap["FileName"] ?: "filename.ext"
var imgType = "jpeg"
if (suggestion.endsWith("png")) {
imgType = "png"
} else if (suggestion.endsWith("webp")) {
imgType = "webp"
} else if (suggestion.endsWith("bmp")) {
imgType = "bmp"
} else if (suggestion.endsWith("gif")) {
imgType = "gif"
}
val intent = Intent(Intent.ACTION_CREATE_DOCUMENT).apply {
addCategory(Intent.CATEGORY_OPENABLE)
type = "image/" + imgType
putExtra(Intent.EXTRA_TITLE, suggestion)
}
startActivityForResult(intent, PREVIEW_EXPORT_REQUEST_CODE)
}
startActivityForResult(intent, PREVIEW_EXPORT_REQUEST_CODE)
return
}
"ExportProfile" -> {
// ...otherwise fallthru to a normal ffi method call (and return the result using the result callback)
val data: Data = Data.Builder().putString(FlwtchWorker.KEY_METHOD, method).putString(FlwtchWorker.KEY_ARGS, JSONObject(argmap).toString()).build()
val workRequest = OneTimeWorkRequestBuilder<FlwtchWorker>().setInputData(data).build()
WorkManager.getInstance(this).enqueue(workRequest)
WorkManager.getInstance(applicationContext).getWorkInfoByIdLiveData(workRequest.id).observe(
this, Observer { workInfo ->
if (workInfo != null && workInfo.state == WorkInfo.State.SUCCEEDED) {
val res = workInfo.outputData.keyValueMap.toString()
result.success(workInfo.outputData.getString("result"))
val profileOnion: String = call.argument("ProfileOnion") ?: ""
val file: String = StringBuilder().append(this.applicationContext.cacheDir).append("/").append(call.argument("file") ?: "").toString()
Log.i("FlwtchWorker", "constructing exported file " + file);
Cwtch.exportProfile(profileOnion,file)
this.exportFromPath = argmap["file"] ?: ""
val intent = Intent(Intent.ACTION_CREATE_DOCUMENT).apply {
addCategory(Intent.CATEGORY_OPENABLE)
type = "application/gzip"
putExtra(Intent.EXTRA_TITLE, argmap["file"])
}
startActivityForResult(intent, PROFILE_EXPORT_REQUEST_CODE)
}
"GetMessages" -> {
Log.d("MainActivity.kt", "Cwtch GetMessages")
val profile = argmap["ProfileOnion"] ?: ""
val conversation: Int = call.argument("conversation") ?: 0
val indexI: Int = call.argument("index") ?: 0
val count: Int = call.argument("count") ?: 1
result.success(Cwtch.getMessages(profile, conversation.toLong(), indexI.toLong(), count.toLong()))
return
}
"SendMessage" -> {
val profile: String = call.argument("ProfileOnion") ?: ""
val conversation: Int = call.argument("conversation") ?: 0
val message: String = call.argument("message") ?: ""
result.success(Cwtch.sendMessage(profile, conversation.toLong(), message))
return
}
"SendInvitation" -> {
val profile: String = call.argument("ProfileOnion") ?: ""
val conversation: Int = call.argument("conversation") ?: 0
val target: Int = call.argument("target") ?: 0
result.success(Cwtch.sendInvitation(profile, conversation.toLong(), target.toLong()))
return
}
"ShareFile" -> {
val profile: String = call.argument("ProfileOnion") ?: ""
val conversation: Int = call.argument("conversation") ?: 0
val filepath: String = call.argument("filepath") ?: ""
result.success(Cwtch.shareFile(profile, conversation.toLong(), filepath))
return
}
"GetSharedFiles" -> {
val profile: String = call.argument("ProfileOnion") ?: ""
val conversation: Int = call.argument("conversation") ?: 0
result.success(Cwtch.getSharedFiles(profile, conversation.toLong()))
return
}
"RestartSharing" -> {
val profile: String = call.argument("ProfileOnion") ?: ""
val filepath: String = call.argument("filekey") ?: ""
result.success(Cwtch.restartSharing(profile, filepath))
return
}
"StopSharing" -> {
val profile: String = call.argument("ProfileOnion") ?: ""
val filepath: String = call.argument("filekey") ?: ""
result.success(Cwtch.stopSharing(profile, filepath))
return
}
"CreateProfile" -> {
val nick: String = call.argument("nick") ?: ""
val pass: String = call.argument("pass") ?: ""
val autostart: Boolean = call.argument("autostart") ?: true
Cwtch.createProfile(nick, pass, autostart)
}
"LoadProfiles" -> {
val pass: String = call.argument("pass") ?: ""
Cwtch.loadProfiles(pass)
}
"ActivatePeerEngine" -> {
val profile: String = call.argument("profile") ?: ""
Cwtch.activatePeerEngine(profile)
}
"DeactivatePeerEngine" -> {
val profile: String = call.argument("profile") ?: ""
Cwtch.deactivatePeerEngine(profile)
}
"ChangePassword" -> {
val profile: String = call.argument("ProfileOnion") ?: ""
val pass: String = call.argument("OldPass") ?: ""
val passNew: String = call.argument("NewPass") ?: ""
val passNew2: String = call.argument("NewPassAgain") ?: ""
Cwtch.changePassword(profile, pass, passNew, passNew2)
}
"GetMessage" -> {
val profile: String = call.argument("ProfileOnion") ?: ""
val conversation: Int = call.argument("conversation") ?: 0
val indexI: Int = call.argument("index") ?: 0
result.success(Cwtch.getMessage(profile, conversation.toLong(), indexI.toLong()))
return
}
"GetMessageByID" -> {
val profile: String = call.argument("ProfileOnion") ?: ""
val conversation: Int = call.argument("conversation") ?: 0
val id: Int = call.argument("id") ?: 0
result.success(Cwtch.getMessageByID(profile, conversation.toLong(), id.toLong()))
return
}
"GetMessageByContentHash" -> {
val profile: String = call.argument("ProfileOnion") ?: ""
val conversation: Int = call.argument("conversation") ?: 0
val contentHash: String = call.argument("contentHash") ?: ""
result.success(Cwtch.getMessagesByContentHash(profile, conversation.toLong(), contentHash))
return
}
"SetMessageAttribute" -> {
val profile: String = call.argument("ProfileOnion") ?: ""
val conversation: Int = call.argument("conversation") ?: 0
val channel: Int = call.argument("Chanenl") ?: 0
val midx: Int = call.argument("Message") ?: 0
val key: String = call.argument("key") ?: ""
val value: String = call.argument("value") ?: ""
Cwtch.setMessageAttribute(profile, conversation.toLong(), channel.toLong(), midx.toLong(), key, value)
}
"AcceptConversation" -> {
val profile: String = call.argument("ProfileOnion") ?: ""
val conversation: Int = call.argument("conversation") ?: 0
Cwtch.acceptConversation(profile, conversation.toLong())
}
"BlockContact" -> {
val profile: String = call.argument("ProfileOnion") ?: ""
val conversation: Int = call.argument("conversation") ?: 0
Cwtch.blockContact(profile, conversation.toLong())
}
"UnblockContact" -> {
val profile: String = call.argument("ProfileOnion") ?: ""
val conversation: Int = call.argument("conversation") ?: 0
Cwtch.unblockContact(profile, conversation.toLong())
}
"DownloadFile" -> {
Log.d("MainActivity.kt", "Cwtch Download File Called...")
val profile: String = call.argument("ProfileOnion") ?: ""
val conversation: Int = call.argument("conversation") ?: 0
val filepath: String = call.argument("filepath") ?: ""
val manifestpath: String = call.argument("manifestpath") ?: ""
val filekey: String = call.argument("filekey") ?: ""
// FIXME: Prevent spurious calls by Intent
if (profile != "") {
Cwtch.downloadFile(profile, conversation.toLong(), filepath, manifestpath, filekey)
}
}
)
"CheckDownloadStatus" -> {
val profile: String = call.argument("ProfileOnion") ?: ""
val fileKey: String = call.argument("fileKey") ?: ""
Cwtch.checkDownloadStatus(profile, fileKey)
}
"VerifyOrResumeDownload" -> {
val profile: String = call.argument("ProfileOnion") ?: ""
val conversation: Int = call.argument("conversation") ?: 0
val fileKey: String = call.argument("fileKey") ?: ""
Cwtch.verifyOrResumeDownload(profile, conversation.toLong(), fileKey)
}
"SendProfileEvent" -> {
val onion: String= call.argument("onion") ?: ""
val jsonEvent: String = call.argument("jsonEvent") ?: ""
Cwtch.sendProfileEvent(onion, jsonEvent)
}
"SendAppEvent" -> {
val jsonEvent: String = call.argument("jsonEvent") ?: ""
Cwtch.sendAppEvent(jsonEvent)
}
"ResetTor" -> {
Cwtch.resetTor()
}
"ImportBundle" -> {
val profile: String = call.argument("ProfileOnion") ?: ""
val bundle: String = call.argument("bundle") ?: ""
result.success(Cwtch.importBundle(profile, bundle))
}
"CreateGroup" -> {
val profile: String = call.argument("ProfileOnion") ?: ""
val server: String = call.argument("server") ?: ""
val groupName: String = call.argument("groupName") ?: ""
Cwtch.createGroup(profile, server, groupName)
}
"DeleteProfile" -> {
val profile: String = call.argument("ProfileOnion") ?: ""
val pass: String = call.argument("pass") ?: ""
Cwtch.deleteProfile(profile, pass)
}
"ArchiveConversation" -> {
val profile: String = call.argument("ProfileOnion") ?: ""
val conversation: Int = call.argument("conversation") ?: 0
Cwtch.archiveConversation(profile, conversation.toLong())
}
"DeleteConversation" -> {
val profile: String = call.argument("ProfileOnion") ?: ""
val conversation: Int = call.argument("conversation") ?: 0
Cwtch.deleteContact(profile, conversation.toLong())
}
"SetProfileAttribute" -> {
val profile: String = call.argument("ProfileOnion") ?: ""
val key: String = call.argument("Key") ?: ""
val v: String = call.argument("Val") ?: ""
Cwtch.setProfileAttribute(profile, key, v)
}
"SetConversationAttribute" -> {
val profile: String = call.argument("ProfileOnion") ?: ""
val conversation: Int = call.argument("conversation") ?: 0
val key: String = call.argument("Key") ?: ""
val v: String = call.argument("Val") ?: ""
Cwtch.setConversationAttribute(profile, conversation.toLong(), key, v)
}
"LoadServers" -> {
val password: String = call.argument("Password") ?: ""
Cwtch.loadServers(password)
}
"CreateServer" -> {
val password: String = call.argument("Password") ?: ""
val desc: String = call.argument("Description") ?: ""
val autostart: Boolean = call.argument("Autostart") ?: false
Cwtch.createServer(password, desc, autostart)
}
"DeleteServer" -> {
val serverOnion: String = call.argument("ServerOnion") ?: ""
val password: String = call.argument("Password") ?: ""
Cwtch.deleteServer(serverOnion, password)
}
"LaunchServers" -> {
Cwtch.launchServers()
}
"LaunchServer" -> {
val serverOnion: String = call.argument("ServerOnion") ?: ""
Cwtch.launchServer(serverOnion)
}
"StopServer" -> {
val serverOnion: String = call.argument("ServerOnion") ?: ""
Cwtch.stopServer(serverOnion)
}
"StopServers" -> {
Cwtch.stopServers()
}
"DestroyServers" -> {
Cwtch.destroyServers()
}
"SetServerAttribute" -> {
val serverOnion: String = call.argument("ServerOnion") ?: ""
val key: String = call.argument("Key") ?: ""
val v: String = call.argument("Val") ?: ""
Cwtch.setServerAttribute(serverOnion, key, v)
}
"ImportProfile" -> {
val file: String = call.argument("file") ?: ""
val pass: String = call.argument("pass") ?: ""
Data.Builder().putString("result", Cwtch.importProfile(file, pass)).build()
}
"ReconnectCwtchForeground" -> {
Cwtch.reconnectCwtchForeground()
}
"Shutdown" -> {
Cwtch.shutdownCwtch();
}
else -> {
// ...otherwise fallthru to a normal ffi method call (and return the result using the result callback)
val data: Data = Data.Builder().putString(FlwtchWorker.KEY_METHOD, method).putString(FlwtchWorker.KEY_ARGS, JSONObject(argmap).toString()).build()
val workRequest = OneTimeWorkRequestBuilder<FlwtchWorker>().setInputData(data).build()
WorkManager.getInstance(this).enqueue(workRequest)
WorkManager.getInstance(applicationContext).getWorkInfoByIdLiveData(workRequest.id).observe(
this, Observer { workInfo ->
if (workInfo != null && workInfo.state == WorkInfo.State.SUCCEEDED) {
val res = workInfo.outputData.keyValueMap.toString()
result.success(workInfo.outputData.getString("result"))
}
}
)
return
}
}
result.success(null)
}
// using onresume/onstop for broadcastreceiver because of extended discussion on https://stackoverflow.com/questions/7439041/how-to-unregister-broadcastreceiver
@ -232,19 +575,22 @@ class MainActivity: FlutterActivity() {
Log.i("MainActivity.kt", "onResume")
if (myReceiver == null) {
Log.i("MainActivity.kt", "onResume registering local broadcast receiver / event bus forwarder")
val mc = MethodChannel(flutterEngine?.dartExecutor?.binaryMessenger, CWTCH_EVENTBUS)
val filter = IntentFilter("im.cwtch.flwtch.broadcast.SERVICE_EVENT_BUS")
myReceiver = MyBroadcastReceiver(mc)
LocalBroadcastManager.getInstance(applicationContext).registerReceiver(myReceiver!!, filter)
val bm = flutterEngine?.dartExecutor?.binaryMessenger;
if (bm != null) {
val mc = MethodChannel(bm, CWTCH_EVENTBUS)
val filter = IntentFilter("im.cwtch.flwtch.broadcast.SERVICE_EVENT_BUS")
myReceiver = MyBroadcastReceiver(mc)
LocalBroadcastManager.getInstance(applicationContext)
.registerReceiver(myReceiver!!, filter)
}
}
// ReconnectCwtchForeground which will resync counters and settings...
// We need to do this here because after a "pause" flutter is still running
// but we might have lost sync with the background process...
Log.i("MainActivity.kt", "Call ReconnectCwtchForeground")
val data: Data = Data.Builder().putString(FlwtchWorker.KEY_METHOD, "ReconnectCwtchForeground").putString(FlwtchWorker.KEY_ARGS, "{}").build()
val workRequest = OneTimeWorkRequestBuilder<FlwtchWorker>().setInputData(data).build()
WorkManager.getInstance(applicationContext).enqueue(workRequest)
Cwtch.reconnectCwtchForeground()
}
override fun onStop() {
@ -256,6 +602,7 @@ class MainActivity: FlutterActivity() {
}
}
override fun onDestroy() {
super.onDestroy()
Log.i("MainActivity.kt", "onDestroy - cancelling all WORKER_TAG and pruning old work")

View File

@ -13,6 +13,7 @@
app:lottie_autoPlay="true"
app:lottie_rawRes="@raw/cwtch_animated_logo_op"
app:lottie_loop="true"
app:lottie_speed="1.00" />
app:lottie_speed="1.00"
app:lottie_enableMergePathsForKitKatAndAbove="true" />
</androidx.constraintlayout.widget.ConstraintLayout>

File diff suppressed because one or more lines are too long

View File

@ -1,5 +1,5 @@
buildscript {
ext.kotlin_version = '1.3.50'
ext.kotlin_version = '1.5.31'
repositories {
google()
// jCenter() no longer exists... https://blog.gradle.org/jcenter-shutdown
@ -7,7 +7,7 @@ buildscript {
}
dependencies {
classpath 'com.android.tools.build:gradle:3.5.4'
classpath 'com.android.tools.build:gradle:4.1.0'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
}

View File

@ -1,6 +1,6 @@
#Fri Jun 23 08:50:38 CEST 2017
#Mon Jun 20 10:33:21 PDT 2022
distributionBase=GRADLE_USER_HOME
distributionUrl=https\://services.gradle.org/distributions/gradle-6.5-bin.zip
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-5.6.2-all.zip
zipStoreBase=GRADLE_USER_HOME

Binary file not shown.

Binary file not shown.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 48 KiB

After

Width:  |  Height:  |  Size: 51 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 51 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 381 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 204 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 346 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 177 KiB

View File

@ -0,0 +1,16 @@
Cwtch (/kʊtʃ/ - a Welsh word roughly translating to “a hug that creates a safe place”) is a decentralized,
privacy-preserving, multi-party messaging protocol that can be used to build metadata resistant applications.
- Decentralized and Open: There is no “Cwtch service” or “Cwtch network”. Participants in Cwtch
can host their own safe spaces, or lend their infrastructure to others seeking a safe space.
The Cwtch protocol is open, and anyone is free to build bots, services and user interfaces and
integrate and interact with Cwtch.
- Privacy Preserving: All communication in Cwtch is end-to-end encrypted and takes place over Tor v3
onion services.
- Metadata Resistant: Cwtch has been designed such that no information is exchanged or available to
anyone without their explicit consent, including on-the-wire messages and protocol metadata.
For more information on how Cwtch works and a guide to metadata resistant communication please
checkout the Cwtch Handbook: https://docs.cwtch.im/

View File

@ -0,0 +1 @@
Metadata resistant privacy platform designed to help you resist surveillance

View File

@ -0,0 +1 @@
Cwtch

View File

@ -0,0 +1 @@
https://cwtch.im/cwtch-explainer.mp4

View File

@ -3,4 +3,6 @@
VERSION=`cat LIBCWTCH-GO-MACOS.version`
echo $VERSION
curl https://build.openprivacy.ca/files/libCwtch-go-macos-$VERSION/libCwtch.dylib --output libCwtch.dylib
curl --fail https://build.openprivacy.ca/files/libCwtch-go-macos-$VERSION/libCwtch.x64.dylib --output libCwtch.x64.dylib
curl --fail https://build.openprivacy.ca/files/libCwtch-go-macos-$VERSION/libCwtch.arm64.dylib --output libCwtch.arm64.dylib

View File

@ -1,6 +1,7 @@
$Env:VERSION = type LIBCWTCH-GO.version
echo $Env:VERSION
# This should automatically fail on error...
Invoke-WebRequest -Uri https://build.openprivacy.ca/files/libCwtch-go-$Env:VERSION/libCwtch.dll -OutFile windows/libCwtch.dll
#Invoke-WebRequest -Uri https://build.openprivacy.ca/files/libCwtch-go-$Env:VERSION/cwtch.aar -OutFile android/cwtch/cwtch.aar

View File

@ -3,5 +3,5 @@
VERSION=`cat LIBCWTCH-GO.version`
echo $VERSION
wget https://build.openprivacy.ca/files/libCwtch-go-$VERSION/cwtch.aar -O android/cwtch/cwtch.aar
wget https://build.openprivacy.ca/files/libCwtch-go-$VERSION/libCwtch.so -O linux/libCwtch.so
curl --fail https://build.openprivacy.ca/files/libCwtch-go-$VERSION/cwtch.aar --output android/cwtch/cwtch.aar
curl --fail https://build.openprivacy.ca/files/libCwtch-go-$VERSION/libCwtch.so --output linux/libCwtch.so

View File

@ -1,7 +1,7 @@
#!/bin/sh
cd macos
curl https://git.openprivacy.ca/openprivacy/buildfiles/raw/branch/master/tor/tor-macos-0.4.6.7.tar.gz --output tor.tar.gz
curl https://git.openprivacy.ca/openprivacy/buildfiles/raw/branch/master/tor/tor-macos-0.4.7.8.tar.gz --output tor.tar.gz
tar -xzf tor.tar.gz
chmod a+x Tor/tor.real
cd ..

View File

@ -1,6 +1,6 @@
Invoke-WebRequest -Uri https://git.openprivacy.ca/openprivacy/buildfiles/raw/branch/master/tor/tor-win64-0.4.6.9.zip -OutFile tor.zip
Invoke-WebRequest -Uri https://git.openprivacy.ca/openprivacy/buildfiles/raw/branch/master/tor/tor-win64-0.4.7.8.zip -OutFile tor.zip
if ((Get-FileHash tor.zip -Algorithm sha512).Hash -ne 'bd99de56ef5ef9516410783ce48d52311093b26e718bf3d0a94efbd754d1cf2d12543f096139d9c289985349d26ee89b2308be5927fa1b410ff4f7f3129d6830' ) { Write-Error 'tor.zip sha512sum mismatch' }
if ((Get-FileHash tor.zip -Algorithm sha512).Hash -ne '5b8f900a37f6e90d7a945b3903d769383c7478042cb43b2105d2374186e1a536f1a4758a2823d1d5be71d53a81dcfd8243293e04f82812d355983df322823cf4' ) { Write-Error 'tor.zip sha512sum mismatch' }
Expand-Archive -Path tor.zip -DestinationPath Tor

View File

@ -1,12 +1,14 @@
#!/bin/sh
wget https://git.openprivacy.ca/openprivacy/buildfiles/raw/branch/master/tor/tor-0.4.5.9-linux-x86_64 -O linux/tor
chmod a+x linux/tor
cd linux
wget https://git.openprivacy.ca/openprivacy/buildfiles/raw/branch/master/tor/tor-0.4.7.8-linux-x86_64.tar.gz -O tor.tar.gz
tar -xzf tor.tar.gz
cd ..
mkdir -p android/app/src/main/jniLibs/arm64-v8a
wget https://git.openprivacy.ca/openprivacy/buildfiles/raw/branch/master/tor/tor-0.4.6.9-arm64 -O android/app/src/main/jniLibs/arm64-v8a/libtor.so
wget https://git.openprivacy.ca/openprivacy/buildfiles/raw/branch/master/tor/tor-0.4.7.10-arm64 -O android/app/src/main/jniLibs/arm64-v8a/libtor.so
chmod a+x android/app/src/main/jniLibs/arm64-v8a/libtor.so
mkdir -p android/app/src/main/jniLibs/armeabi-v7a
wget https://git.openprivacy.ca/openprivacy/buildfiles/raw/branch/master/tor/tor-0.4.6.9-arm7 -O android/app/src/main/jniLibs/armeabi-v7a/libtor.so
wget https://git.openprivacy.ca/openprivacy/buildfiles/raw/branch/master/tor/tor-0.4.7.10-arm7 -O android/app/src/main/jniLibs/armeabi-v7a/libtor.so
chmod a+x android/app/src/main/jniLibs/armeabi-v7a/libtor.so

View File

@ -1,53 +0,0 @@
// This is a basic Flutter integration test.
//
// To perform an interaction with a widget in your test, use the WidgetTester
// utility that Flutter provides. For example, you can send tap and scroll
// gestures. You can also use WidgetTester to find child widgets in the widget
// tree, read text, and verify that the values of widget properties are correct.
import 'dart:io';
import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:integration_test/integration_test.dart';
import 'package:cwtch/main_test.dart' as app;
void main() {
IntegrationTestWidgetsFlutterBinding.ensureInitialized();
_testMain();
}
void _testMain() {
testWidgets('Blocked message rejection test', (WidgetTester tester) async {
final String testerProfile = "mr roboto";
final String blockedProfile = "rudey";
// start the app and render a few frames
app.main();
await tester.pump(); await tester.pump(); await tester.pump();
//await tester.pumpAndSettle();
for (var i = 0; i < 30; i++) {
print("$i pump");
await tester.pump();
}
// log in to a profile with a blocked contact
await tester.tap(find.text(testerProfile));
await tester.pump(); await tester.pump(); await tester.pump();
expect(find.byIcon(Icons.block), findsOneWidget);
// use the debug control to inject a message from the contact
await tester.tap(find.byIcon(Icons.bug_report));
await tester.pump(); await tester.pump(); await tester.pump();
// screenshot test
print(Directory.current);
//Directory.current = "/home/erinn/AndroidStudioProjects/flwtch/integration_test";
await expectLater(find.byKey(Key('app')), matchesGoldenFile('blockedcontact.png'));
// any active message badges?
expect(find.text('1'), findsNothing);
});
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 18 KiB

View File

@ -1,411 +0,0 @@
dir-key-certificate-version 3
fingerprint 14C131DFC5C6F93646BE72FA1401C02A8DF2E8B4
dir-key-published 2021-09-01 00:00:00
dir-key-expires 2022-03-01 00:00:00
dir-identity-key
-----BEGIN RSA PUBLIC KEY-----
MIIBigKCAYEA7cZXvDRxfjDYtr9/9UsQ852+6cmHMr8VVh8GkLwbq3RzqjkULwQ2
R9mFvG4FnqMcMKXi62rYYA3fZL1afhT804cpvyp/D3dPM8QxW88fafFAgIFP4LiD
0JYjnF8cva5qZ0nzlWnMXLb32IXSvsGSE2FRyAV0YN9a6k967LSgCfUnZ+IKMezW
1vhL9YK4QIfsDowgtVsavg63GzGmA7JvZmn77+/J5wKz11vGr7Wttf8XABbH2taX
O9j/KGBOX2OKhoF3mXfZSmUO2dV9NMwtkJ7zD///Ny6sfApWV6kVP4O9TdG3bAsl
+fHCoCKgF/jAAWzh6VckQTOPzQZaH5aMWfXrDlzFWg17MjonI+bBTD2Ex2pHczzJ
bN7coDMRH2SuOXv8wFf27KdUxZ/GcrXSRGzlRLygxqlripUanjVGN2JvrVQVr0kz
pjNjiZl2z8ZyZ5d4zQuBi074JPGgx62xAstP37v1mPw14sIWfLgY16ewYuS5bCxV
lyS28jsPht9VAgMBAAE=
-----END RSA PUBLIC KEY-----
dir-signing-key
-----BEGIN RSA PUBLIC KEY-----
MIIBigKCAYEA+jzmadukj4Q0qLgJ0at+nDXGruO5JD3HsehobiwO8HrdaaImY+rY
CZzxRWM4xryQ2AFuAGbSxGoNQT3dTLvjKNVdGY6jPzlS7vxKbPeNZtc/YMvfZ+Fx
uEjvaZ6nDbviVtQhtE0J2EZ32n90Ob8YC8l/7zh0hp+mZO6Wf2DGXWjNvG7d8Ucc
p5A1ZVIpJ/VQzdlPaocO+6AvxvSBpaIUF0yGpTwofTOjtUmZyuWbhRndsQj1qMcj
e8wzOIgr3HZyhO9wztQGkZ8bzHq65oZe0IIOXZu0icZamFGQ5I6y5duCqxDDe4C/
v1/6bD1I+/ujLXRMmkcbJ3NZE+KrZg7KIE5ScGbkJIX7vIicqtsf+7VipdOh3/wp
qaDxX9Sp2cbVUU0M/aJ14nDSeFlx0XQAgWkPjG2lYtTNEC2zuudBCuCD8es8EhAW
FrU94cYg9lVId0NDMOpWPMH2QJFS4tk3Hc66si3+gkCOt2GOaSQeD+gGWkdwDzn3
S8iAur2GohFFAgMBAAE=
-----END RSA PUBLIC KEY-----
dir-key-crosscert
-----BEGIN ID SIGNATURE-----
B4914rKqUc51Q1nq8CrA/e7EaMQ0ug08qlBqWyzZSDiBKVCoQj446ZJMU9VKlzJF
XtuURlJ7zswXMze7HceakrkxZAc7GiAGKO5hgbbI8XGLvXn16Lsr/MP1cmbKoI04
g5tG9Kx6yOB4r/l2TQY9Tw22YcdJ24W2/mw6TmDv0b+IorsIBnxIDv7Q7j25IkNE
hW3F9R+Ntja1RWPqKnptp8nxBt5/2jVr637BFczDv9K509QX+HHKyICA1hnvDDU7
N5Y1/mVu4JwQrBAFL857XbobP4QaLsZ34Q8LRE4dveuyw+vjVa1YimZ6h/RvrYyP
8DUi4XnzFyztecivXbdSTpMTSMfC4NQXFeT+XStRdWlapZyCFhp74w3wv7HCB0z6
7QT1HWMKPRvj1DsHhvPviyLVCL2tl2x+G7aaledOPf6BbhO7VolNeHiubyYCQl2H
t/Vy72DZbQeuLhf5GyqVyUm9uugzvVrryUiNUApOW8Xta2dAEBqinDrrY6iMYxh/
-----END ID SIGNATURE-----
dir-key-certification
-----BEGIN SIGNATURE-----
UrJN3Ey1hSHTaMUAhINCVFhojt48ppxky0bvwztQ9p/Vy7dfRx0APNbL70/XZOrR
sRj8zxtx2+tc5Lnkfaah63bmVsUNTgD6LudDaffXiV8XhIeVbzS0r/YJ0U1OsbK+
ApDItNDUz+VIJL5JUDjq/6fojFlWPYNIwyk5G8zOM70Atjk6UDyCIihV2u5pofW3
znFaFp/XhC14S8lMPZYKbnyl2iQ7UsqLpTxg3EwivIlSVFs5YQe0yXgJFX0oNd9Z
gAf3JIonA2g8Oo9EkgRfYCI33AwyVoU3QN1/AmLH2uPWTKhMu7k+OHktuIBfyFTR
9jbUq+YTU1ni6kEsJVBP/0I4n9Xb4VYIoqOq0BrcEp3lQ8BCEWjIGwLh1HYc9/DY
meE+cwLp0RNU8cuxyrGnkLA350bsNxrDkiaHAkj5ZA8W9VTGYsBxVhbLdQzN3GOm
63GJBgjdaOsD6WXs/737nD2sLu6dnA/Jbz84ouZSafQO/FNQZnndfj4osjabmq8O
-----END SIGNATURE-----
dir-key-certificate-version 3
fingerprint 0232AF901C31A04EE9848595AF9BB7620D4C5B2E
dir-key-published 2021-08-01 20:00:02
dir-key-expires 2022-08-01 20:00:02
dir-identity-key
-----BEGIN RSA PUBLIC KEY-----
MIIBigKCAYEAu9O0Pueesn0+29BlxZs60mBqehjdQtgSnKOm9QZxbQ0xrMQgbFnR
hWbKD8erenyeFk2SF6AJkbyzgYC89hyPW+8GBDmg5bE8fRKjgV/nI3tY2m4rkY3u
zSmYIdwqHUUc98Xzt9PaQ8IJAlDBY4XLKrWmJMxSyhBlVEept7+9Tj23qowW44Mz
xPJZ1aFkB1FpkD6qmoCzVZbhXy3cGt1nDwdJK7KqlaXziz9pFiw8PzTVU2xFgJNy
+nEcT72DBtk3G5K2Riu/aXY/D541Cioj9KMV4Nv4g8aBKx58Xq2tq1pFkc1Bqj1y
2MomVR3iskFzlqC8yKWGVe4OP2IaOhtcQJYp5GR9q+dWnr53WWNVxNu3sA9iMal3
PJUk5pIYrsmArGew5gmlCe+Al46nPINxc7ouztmStAV+2F6SpZlKOcstnT+KJ52O
1xnOSaj/WnzG2o4KZ9UrFQoUNOLQJcelPcC+vrinMk9BQPcB072l9NjpUBC9brsW
qTCMStn1jfDDAgMBAAE=
-----END RSA PUBLIC KEY-----
dir-signing-key
-----BEGIN RSA PUBLIC KEY-----
MIIBCgKCAQEAp7nHn/R+ZZ8lza379M7BJ00JYPAcncjtoa2K2Z75bDoxlegGvZXp
j4D0WhqksaaOr/+YCSPMcs4HAapKE/Dj09p1kjzh6Xu/iVp51NiQAARS5j3tu/5k
WJQ7ig207TdtjmslZIx0UU8pieuenRdyUN0PvjOkaoZIpao1+UlIe47DP+42D3QX
1J2wu48QDvt7hUUA3y7yLUyNMarqYBbbXQ/MpH8tcMT76TTN1uilP6W/3j1b6Fr7
NGtbUrS1EzOOHnCpgpnD8qGcisDKrHcVkNkh1w+8LW9ef7RGpFPpn022hUQG0WLD
5zrh19SAsKetWAZY6RlvyCHPVReajIAovwIDAQAB
-----END RSA PUBLIC KEY-----
dir-key-crosscert
-----BEGIN ID SIGNATURE-----
ca3I8mHu2zEOCnzySzdk+rbZLpohw5aa3NmTGFzRUXqOeHClOYHRc+glAyCrtUA3
lEa5fiFaZTImKu0J/uroyR4uF5JpzLOfojTQi9P5hMCBSdd7uGzoKC+/dKb2OngZ
VkBjptMf1S9dy2lUdDksHnnyg8UrV7EolIHUFNdEBI1LeONkdesZ5oQMg3HRlVpU
v+m/7y/MB+o3KAXkQyAxTcV4bKdsHm3Pf0CSfDgOPImwFS4lwyEW0STlOmVHojZR
5wm+5dwt9vbD7K6ectbnWtWjiSrvtGjqixO652lxz1qrsid99S5wEzJNhfif8lYe
VsB9h7YagNHJHLiGeBT1kg==
-----END ID SIGNATURE-----
dir-key-certification
-----BEGIN SIGNATURE-----
ZkHpe8JVvGsiAsH8gw1eZVIIE8WuM+3Sdd37U2tOyDi7FVwJV+oJ+aKwcCTqTLaj
jglQJbg2JdV4ofy49ZaQa6FBGLrzxAS6Gx0jg+28Kzbr0xu9hSX81oPSXKn9KDLr
BvmuSqKBB+5B9nIEBjm6FwPc8MjqlvNesuJ3IpW9+e85eB7qsH4ozjHF0GIgpXu/
qXrk2TEK1nMc9EN+VCYuy3gAm46GHQEYR1U7gIofCYf7LQpDrfj1sAGquCQ3vYqT
Ex3GtqcDV22IME67Cou5rv9OmMnmy1dbeHO4g843RX0LXtEDdGYGSLHzl8EAscrg
i55XFlS6z5OwCbdDvFTkHUWRlaiDtoymaxAEW6GUmNjHhgWY9wJwgroVNRsP8Ihi
aex9HIND1MY4ERS41Csba/0grf+FahMVI12gwpmrnKfF95QHWw2MEvT1pzZGtMnq
XD8mcVNYJtcTvYM/cUa0I4BFD1AyeIP54hEXwIsqHm8KBJpjX/ZpPzksnc4NY8i0
-----END SIGNATURE-----
dir-key-certificate-version 3
fingerprint 49015F787433103580E3B66A1707A00E60F2D15B
dir-key-published 2021-11-28 16:32:54
dir-key-expires 2022-02-28 16:32:54
dir-identity-key
-----BEGIN RSA PUBLIC KEY-----
MIIBigKCAYEAxVbS0noZKz1Ei6858RGyyuQgwQUKG4Urrp2BiAzkYxwX+6fURlut
AjeLb4XysqCdNdUipuLRQ2QIy1C220QiCHV6jZAsM4tmEq6TpK6q1lxi5YPKqbGS
CfUQFT1nO4s4DCYSLCwiRNy6bMe8tNHc0MpXP3loCbPkYCoXrEL6vYIROw3oeGWE
KbFPQrzYJAPHgUubBibsY5lkUY9N/5QZw2y1bn+dq9mFOoCIHLd6DkQmySmftnMe
QrpYA2WvE4M5yN2HB8QGT7TdzXPPL6889rFw/mjqYExQPX7cqmILkchsB7I5whjA
u0oodF8Y9ooK9QT0GeK4h3xQhzNG17anuUxbZ7sxzmBwBNmkNyLWEeIntazyjRFr
P2mDY/9YK2JOQKkh3tKl1whcCG9ZtAhKmm/ijG7OrhqtusdGKBXIgALf4f111AK1
gNcacDx2fJzRHuNK8zkIORAzStxKdLbAbBNeLENk1zBjSkrxCOJH4mBpr8TXULq1
ThLI/8OzZq4LAgMBAAE=
-----END RSA PUBLIC KEY-----
dir-signing-key
-----BEGIN RSA PUBLIC KEY-----
MIIBCgKCAQEAo32l4qg46cqP/sAL+oLmQM0mDiQUy6EtNa73vyy0BJEGWJeImUO4
gHNg9pyMFqyF+rP824gAzwX9Un9HaKgFpIrsKcZzg+Yl2vlrBQpJ0NPIkN9oqj27
W/A7RftMhH2itv0v87QudD7FqJpxdYNf3wpr9GvsAiHZMBfC88WhCnmJoDBwyucY
HFH7gzjPeDx37KD57o2M1KC/SRVtQtrccA/WzcxNypgAYkJu4yE2gaDr2WFn3hFv
kscW0jn6+157UuKH0rCNeRFDx8SsSS0nr6Zk/n+dlXzHGDO3vQIKCoRoH9yL4T//
hkMYE/4qc9R49VyXxK+n/qU6HQYpQMi+VwIDAQAB
-----END RSA PUBLIC KEY-----
dir-key-crosscert
-----BEGIN ID SIGNATURE-----
KKrOMRAg1bx+XFLRjhQB5OFjtupkqkFnGjS3LZQ5FHNwJ7cKG1X7K0aJNAumRPMD
w9xraIMuuok46wj35P9Tcy68qi3EqIJP5378ZtdK3Ncy9KkSWJSA9MLPmB3fClL/
/5TwboePXRdlt++Bcw9OC83HDuFVBqZArFIvopKf/AJOyViRVHlBmgNKFpm9RJTo
XsD415rJAi79tAfXzKuagke6DTVqobMhxrUmp3RjbEEEC6icQ3YX9X6NOPQ4Gwl2
bpWOVi3/9EGRge0X8IYsqB6/pnEXM2FSOTMdwo4YQzIgW/HLE9hXjFCx7QcPkcos
AZHvl12tKzZF3F9MKPcNyQ==
-----END ID SIGNATURE-----
dir-key-certification
-----BEGIN SIGNATURE-----
wb40bfNLWyU9pWW+2BAHbrmZZfbs9UEIS/6G66VE6823/r6M90RCmFx1JlwqgmaV
/WMbBE9DxFKILyhuQi6whIKoYndg72VDeZL5BzWctalw24VpJePVjeGLcTdJHBVh
a6UiQFaQdH+bTX6qNIFv9nNwq7ZzJRBvaYF9bK8kaTrZilFKoRVBxXssBUFjEz6t
f+sei5WIiBnzaQOUxdMjvdDAHci4DXwGw1U2M7jcYARo4FfvWkAxzWLxocWmauPM
8tDn0fSgMnLlSOR2crnriQMFhYD+9xyxfOq1IDH2IWCKlejz7j3DHSqBYiUSO9oD
uX6htwbMWwZQeqt+LttE/zZX1Tcv6PJqemT8uabH0s94W2A3sJpstWJ+0capb+Mj
bvTXj7t2ilqa5RX35KKhaQ6wlh4OXZb2ydeJZc7wtyG8eN53aVqJNJQ+WZn4IiTq
fefr2ojy2VDJLDHJVNpKQQzmjXtSs+69wCvrqdHGjGAQl5L31LjZgaNLNj14RI+H
-----END SIGNATURE-----
dir-key-certificate-version 3
fingerprint ED03BB616EB2F60BEC80151114BB25CEF515B226
dir-key-published 2021-03-29 03:27:58
dir-key-expires 2022-03-29 03:27:58
dir-identity-key
-----BEGIN RSA PUBLIC KEY-----
MIIBigKCAYEA1d6uTRiqdMp4BHBYIHKR6NB599Z1Bqw4TbOVkM2N1aSA4V/L/hKI
nl6m/2LL/UAS+E3NCFX0dhw2+D7r7BTJyfGwz0H2MR6Py5/rCMAnPl20wCjXk2qY
ACQa0rJvIqXobwGnDlvxn4ezsj0IEY/FEb61zHnnPHf6d3uyFR1QT06qEOQyYzML
76f/Lud8MUt+8KzsdnadAPL8okNvcS/nqa2bWbbGhC8S8rtDpPg5BhX2ikXa88RM
QdrrackdppB2ttHlq9+iH3c8Wyp7bvdH8uhv410W7RnIE4P+KIxt3L0gqkxCjjyh
mn9ONcdgNOKe31q2cdW5LOPSIK+I5/VTjYjICza7Euyg03drpoBMGLuuJZY6FXEV
auIBncWe+So8FMxqU/fwo5xm6x085U1MwXUmi4XDYpr/kau6ytPnzzw9J++4W9iC
em5Jp0vaxrDnPdphqT0FWsBAwsZFL7nZRnmUlTgGsXUa0oSM9/MErDwzELh/NwG4
DNyyzRG8iP61AgMBAAE=
-----END RSA PUBLIC KEY-----
dir-signing-key
-----BEGIN RSA PUBLIC KEY-----
MIIBCgKCAQEAsw2ZJlGsmfDmDwoKbzjOno759Xwqn6JX+tFasI8eRjOFnOyjYzd1
XjG6Gj2hVpF/ze2NiTuUyRu3Ybp8G9/gs8VGPljxSHkEugGjQdYFoST02ma0vUHA
8YqpBYOiLvsXnqfEkl3Yj6HVxmVJA9j8BxODODlBtxRMJWFrpp/b+qCo/YyGmCh3
n0qd3QNqFPLIzwvjWVhaFfga8dXBT73wX9uYT7nT/e3pV7ZvTw0caqi7svNzj0I8
/OxOEjoBQEQMQVPT2bNZKBe9X8QKDSgdealZQwBT9wdZ4KndtCj6Y8MVjj15/YtH
fWfNyUHgVqOmfDK7m3pHXR9fGgsLQexIfQIDAQAB
-----END RSA PUBLIC KEY-----
dir-key-crosscert
-----BEGIN ID SIGNATURE-----
GyN9MMaPABXJ16WAFIhdzOhNT59BI0RAfV9ZpUJgzkAAmpoj+WwUtWfcrW7a08CT
9g60QwJonP/Nh+8iLvQYH5ZyEqsEj0HEUD/yI2kvN41Y5QBD1Sku8Cu4E2UaICzL
V63oitjQzppKlVXHyP/SXsI2bUjoHLtT2pBvxRJ84DlZBEQ/ZqS38NN/+Z6DtMR/
kn0l7W5yA3bYWzeKy1TeKLWo7p0hHzv/Hswe/eha+27LuwZZwwfSQrRy1fi66Fmj
0xBP+iXXtmNleFegFuhEBPXa+9udrT9rodSdazkGPzjyF6HWRMP5DtmTI6ovJDVX
60UQ0hNb6KAP+FZKPz9/dA==
-----END ID SIGNATURE-----
dir-key-certification
-----BEGIN SIGNATURE-----
zAgmCR7tf0btsogvBmdxJ7+RWjPBzmDSA7f+zlK0jOc3lDDD4pxuQO6iNcoEDYMC
5hkzVoGBMYsxLfLZXFGE518dn79iKr6SQoq87AhnAsIiAfXMk2AWLkWI7MTzZo2U
dcgo+7vzxMObk86vzFxYWrSqp6CSZ7RwBRnH3vCGLfOMZ1lXMug+MQAQYAyl6KIR
3d/uEu3+sPFJcHQFP3C/7bHDG5j/76kwoFzjSjg974rSjr1j1FbrpNn35mLc+2X/
11n7cOADHWaSN3MlLWGsYxuuX2l1w/XZNfFEezDwK3BOotbj5spU2nQ8xbDFPB5+
ixDfc00TC3YbveSz+S8W9czfysJt3KaWmQczDtSIXag1qrL52CBGUVGP6+R7xnpR
/4QD6yCKmDcNk2D1YnindwYC48ydDt/u9A/97cEBpUbul3feW7eKLk79MIklWlWo
3c3aQVH6Ewrb76oXYYwzNbqJOp2ceREu72/Fk/keprVcupVDtVoqHgDDpfOUYTJd
-----END SIGNATURE-----
dir-key-certificate-version 3
fingerprint D586D18309DED4CD6D57C18FDB97EFA96D330566
dir-key-published 2021-09-06 18:42:41
dir-key-expires 2022-09-06 18:42:41
dir-identity-key
-----BEGIN RSA PUBLIC KEY-----
MIIBigKCAYEAvi5+A+XPw4jxMYhmEI4+MpnaX3dUEbsMGHA+xAMnmVhuxbm3Dn5c
TyhQNY2LOlsieE84UYG+J4dABfaFH4w0l6zUJkuytX4+6WRQontw9puR/IcXkRwM
8Tv/tY675OYRCm9DgDAWfqZM0IgTzSrYRDl8eFPSFCOP0NhMrQZeUrdKgwAXVZWP
xt9nTCwT4K9BMp47LEmZKdEokeVsr0l29Z9v5+r24k9x8EQjDexsoHwlVrxWfarG
1klWssfSFpkMN+FkTQnBC6ByiBh5ZKM5AC/HkVFvuHjehUpfrtNk6XNFcKbDvEIg
qPdg1QWuuSWpZVA+/EwSBtwMNcq9pv60L8Cm9WCJoSC691WByiGwFCy1/XcBI4J/
BkoMEvP3kAxzm92jqGbpFSJawFRPZKy89FDKpha/So3CERQPV0ar+DTpVqDlryWV
N4x1IzpPeSHFj7T74q8qdrxx0wcAjWJ9WYoGQif6FK3hHcmbSGSgyvAFeoYxyUCL
JHkjBCD4WTWVAgMBAAE=
-----END RSA PUBLIC KEY-----
dir-signing-key
-----BEGIN RSA PUBLIC KEY-----
MIIBCgKCAQEA1Hguh3PNTfMd7kLD8NupSdye1KB6hhQitx8DipvT71ZaCZYI8fZ3
z5xa6fCcJXv/xoz1tzKeJ1n4/AzAbc7ltCyyWkj9CbiB99cEe+sVE9R899eFvPP9
DUmsmgy0Bn2MrdfD/N5VeJ219TTtqI75BJMd9n1+r5zUzhji2ihcLWYgi0GVZoec
6B+xfPtYbifCdrPRBwrMAW4EhtMKeJfzsYFO220f7x2OmmZB9muesi5O8/0zjwu1
xOKldXCFbccTfFN88nYmaO8j0SpG9nOveFXavPs0LyVzhuMkbLXSWAN+M/S6GC4L
1kbkjQ6YhuYSnKxGFo/wdax41jrSFCf3qQIDAQAB
-----END RSA PUBLIC KEY-----
dir-key-crosscert
-----BEGIN ID SIGNATURE-----
r2a4uvuN2LUgSuHoWYckJusjzeaEfTTN+DHJdQjJrMueZtxhhz+C+soYoSAvBsHI
huc2y0wLbeNMpLXeyGoYh0M4zm6RyjMksHQZbgPjkibflbUI3csJcvaBMQonfo9B
knoqOzeQd8NioOlnbYQ+k78swGtg2ndHpK4G4NMBK6ZQrbhrIk0nVhOhaIHpGdiN
icr+czGq6SzH4Snp26dJ+J+9SAdTOzgat/C2Othdu122JR2/7GzCnz8dqS3LabN9
iWJWMLxayFKi+Z5f1WjCNOVh5lSjpeLjUNSrA1hXXKSRD0eFOQFRvgvO60gyvooH
C8amqpSD8HqsCK6MvN7V9g==
-----END ID SIGNATURE-----
dir-key-certification
-----BEGIN SIGNATURE-----
uuQhm7YYbqR4/fGSDWqzwiw40nr7y3laCmfiTDHOA5N6lVOw/tM4bdMbGH58wkkK
XBIEz4zQnIT4Sgaumc9PZK3/a8wkx3HgvSNZAEvv5GK2iD8QQNaR0mv7/gbCOLeD
4MAsWH7ehc2u0AcebYehYWE7/fknYRfIGLRzeAeR479LgtFIaaZ54lGeEWKA7qBc
B3njJcNDlekChydxw2JRMw2GmK7Gn/cVRLjFiG32aaTPA37Ietw6Z8wXEjTy4087
KTzTe6puX0g9kCWMaGIBzod+ucNOG9WhgVfy6M+OMddI4KbgizUM7a5c3DZwnQHk
nn5yqib/W7NmHZOL1k2qYlKQlbr412bsDgBDoFYSYPIkbO4x7LHJnGGiwxYx4vmx
caxDySQtqCcR9ygMrZVrL9W/Z+w2N/KCXnL+SgTmN0x/Saor1ZTkONj5Tfn4dg/W
xDxvLO02DpVTfgidUsBeHSnMQn7w0iG0abhWFmYNFDjxZFEWy30mRCEYADC/1NCI
-----END SIGNATURE-----
dir-key-certificate-version 3
fingerprint 27102BC123E7AF1D4741AE047E160C91ADC76B21
dir-key-published 2021-08-21 23:12:45
dir-key-expires 2022-08-21 23:12:45
dir-identity-key
-----BEGIN RSA PUBLIC KEY-----
MIIBigKCAYEAuxgnMVH4vwBjMeGvrEODOYcjbCS4N+Wt0SZ6XA5I08HyMf5AbaaF
MDscJBRIUOp7DyLmUwK+jp+QI8pUjjKsB8S0ctb/J3Im2T6CXnP2KgEfVmpNVQmV
XdMm8cRZl1uIZDDBAXizSQ51f9A17TJh7pF/5khYp/SAzl6aO5ETn7ry0ITiJnNa
6cY+400F7ZBA8NuXnCHVGfmpFFsiJKFrS1Kve629eeaNEd3mynRviBXJy5a4NEGf
y42Ev8on6SxEnF9OG0NMJ081/+mP+j8Dsl3+Uehzr9B42MQQfDo4RdYGrt9XolBm
L4eay1ieZEsFeDy0TMfiGGbr90wo1fgGLHIRSfTNLhhPJ/f9cTZPe98rhSgGWiAd
RvK5SljoIOR4qdS9/aiZkj1P+etvh1rIQUcG4/xCOBnouEBK+DDHZFqyMtpMPtV0
Bxi20DVaMJcyhdfjVqcRSyuR8tlOnTid6QwBj6kgIIfMaC+4Ht6yO/SYquCWlaZl
y7Pu7li8WyW9AgMBAAE=
-----END RSA PUBLIC KEY-----
dir-signing-key
-----BEGIN RSA PUBLIC KEY-----
MIIBCgKCAQEAu1QJ+qlCbtrYsg9QENtOpvMrEDc+WgH1ZFxEqk0v/ad2ACQYe4dT
g1gJ6VZyGths3p8+WQXIA9YbcEr2oajXlLmLT2QAlqlsXMPKwwIpeG4rvR43Wwq5
mQ7aX+/VjZ9YZNoZVEAy1O7ti7GIXJzJYDOdgBjLifSjpjcEmSaf+v4E357azs9R
ndLHRRwbBLdUl7G3aMkL4ejrv6AAXexPxAL90xsb/MAhVEOQrJNcVMTgII0fSf56
P1J17SQwthNZ4rTMo2O9TvWUGNf1sMb9kdm+A2Nwo2CKmUR0uo5wHN4YHSBYFDcb
hxRtZlhSFfBJvJgrX8/+CnJrBFC6S/7vJwIDAQAB
-----END RSA PUBLIC KEY-----
dir-key-crosscert
-----BEGIN ID SIGNATURE-----
VzdxGiA6egLcZjm3hHrTW+N+7sPwaEcdYR5/GW757MO79O8QwjOLJSa5dOF5yDWa
3Ie+QDB2Q++a3+w776zqpFsaGCuEHBCfU9pxatKdoTsExZdQnWHJg4u9YD1JcYvL
dZq9uCCWaKa91OjA6/U9zp/LY3tOPUWCyO4MHehHYggzapbcF5uaMG0AT0lZzaXJ
vh180N5YGMfm0eYXJqkJyX3WCZhGroh7o3DyaqtBSJ1cY4NzTNgPoCAi3J/XEoCI
3JzxfH97uyqQngR1yGb5KggdM2ejci3Ld9q99hjXlzYRtsobUQBTlZca2vUk5ALh
vFWU7GzcNIdDjKBUd+IhTQ==
-----END ID SIGNATURE-----
dir-key-certification
-----BEGIN SIGNATURE-----
WldVJc0L3fByDY9D+Yha2/8Bw5nqRpHu8RL8lU8zXb0rhfiA6DN2aefSCG9WEay1
sTVs4zhS8N0+278oP51Lg7S+V6SmXxKZbF3I2zNaFMIPVspRA3OF0R9vCP1YMxeo
D4EDQXiRxNNeM9hAjmmLiE0j7ZMetZ88ewwsOOXAvPHmCth09nWdCYKwibwUW/U3
w1HXCHK4BdZ7XXkMJNry7kZP/H1/5oYyuKshue4+f8tgRa0xg0wbHDrdbrR1qBBu
Xg9Q11hV29RIdD0ZgugUdyGKlpRa6Mb3GD5DzN845sFhCjsPrYyZv7Xo/S+uTtN4
t59BtF1TjnsAhUk7shk2W3zzaauzUarkDA1v+mb9NZ3CFsNgfxt6d1yDDyuxJgaC
VkIfO9nX9dCORSC9Ow+XOq+D/o4FfSe4q0VvrJJILAcw2Nu1Zg4ZhHBeugP9f4I9
p/+ZMrEr+YAKkjPw+uIEdR0l/YZEhcrjymX4FY829LNll2AceqMCKoapFWuEzzDP
-----END SIGNATURE-----
dir-key-certificate-version 3
fingerprint E8A9C45EDE6D711294FADF8E7951F4DE6CA56B58
dir-key-published 2021-11-09 19:16:37
dir-key-expires 2023-05-09 19:16:37
dir-identity-key
-----BEGIN RSA PUBLIC KEY-----
MIIBigKCAYEAu/DOrbv/4IAYvyxsy/6ivC3q5yCQBWLKHZGYKQa5G/3rem8wen0f
qF7y4ye6U6faWc5kcNMHEKMIeBzMErxwF345qoGHITxbbOWnizgwPgrdCwlK3p0H
1XZGU/TTjoaM25P+ZNCBvGmDQRAtgs2odnv+i8hpu6vrcAUZYXmmw/Ag1Ou2AlLC
mPpbjV1O5SMylgC4IuCBPr3iA+M1kKkvj4LmwU6pJxjAae76GLzzQ/Ffvi7rRpvU
2BHetjehk+7/t8izgbhT4VABtzKgrv9ATnhfEgPeT/WBq0E75iciBBAXRPF5kEA4
k++NPy21XpL7jkQ4wnMs2HyiFhHbUwbLcoyQ/JVq/WBboSwStYbkdizRpkhJ1eNg
LiD8CPWcZnhWZi9VWrwT0xl+Mu4v6kwo9kVnXhOfcK8Wni9FqiBu2tmNDoGPG1Ac
wptYQSIoujuLgn4MARREwo9cWrKp2w+D7Dt4U7U5OrXL7TXjonEKuEHwRhzz1JA8
7LXm/wENwn1/AgMBAAE=
-----END RSA PUBLIC KEY-----
dir-signing-key
-----BEGIN RSA PUBLIC KEY-----
MIIBCgKCAQEAuxJxHCGOw9DgNtw4wqi78OE3djdiLwbie+2CevKMRaO14IhuQGVK
w1PYsnTuVLVcJl3Y4QKQ4nnbe1QCiGrLq9wueQy7ZvBeZry3f+QD1Q/PAG19n6/7
hlhXclSOJ/jRah0Gi+QXAycKE5RES/Qn4F5fNE7MxzM0ZQHIlszZLNUrcpeLE9nX
avlqlSqK8FmLPOpOSRrdPtzKP2sjW9UUFVGMfurDYIC51hkZI/nyy8A1C844sfuF
LV6oYpYw5+soA122zBqGqP6vApwFCvWSDcGlx8xj1Irdo+JIDfK8vklu9P11rTWB
R7dZw9pD21reD0pf0Bipzneho6iiL++w+QIDAQAB
-----END RSA PUBLIC KEY-----
dir-key-crosscert
-----BEGIN ID SIGNATURE-----
aMzjdOHri8Kmdoy0qt1a33Y9/e5vKkJQkzCKdHN34Il5FMMCkOrJ1yeQgZyp6mU4
jPSpUZlr1Iq52x5ers4fH4SybvX16BDq+p6+Zel9f5TpFg1vzdpJH1WOJ3ZoES1N
S8CpiXVz8flc5Ez6Dc7uZGSE2fYRl1Pswn3GuLfR1Wjw0VNp1VgHZk6xYXRk/YLx
OyjZTWEWAF/0qw3usXtvTvh6wGniVxr0rg3zZbesLXti4TAn3B3N6VG1TPOizna6
s26edpQ6RQPigAuccEwU5iaIQEGkIxcoe61qnPvAoWP3Jk/sZAGCqhbya0CBCH8U
pEW/OauwlDlr3yXEKh05aQ==
-----END ID SIGNATURE-----
dir-key-certification
-----BEGIN SIGNATURE-----
XhAoF04YrM2zJUvrQuEsGhU53Pbf1B0jv5F4YkMlRX2y15rKXKI93vQTM1LbnYc0
ETkhSOQB2rpnX0bcE+K+x0sWXiMRtR1HSX/oIPDI9MNqHv75eZlEkSaDJHIsQJlj
Dd++tMHkRc49nNNo2J25J3TiBU0ecpVYYvtJzynE3W8tX3io6EmvTehkj2o79z0A
ax2A5JG65plch0ES2yK2jqgBEmkA/eZENDNQAaERXMFJbbpHIMBaGguwCEieJe77
JBAOxJFRGpL6MhMpcvi5MgEMqfAv3AhlBo93n4apT2CYR8PdCHUZyq7FrgwTSJS7
ndl3YmvxJ7wnyTXitw0GcSVeQaYMQV+LR9Z1VkmjIwRuHliUn7hR79pYqs3t11aQ
muW8jOrx+5QsiTLEPV6Hs0pzXc9XDw7mnJ6M2gxxF8fZCztal3TNLs9+1O22fxME
0VU1oS7SG6T4M1YOXgKFUP20gLl8sZf+3lGp3aLZIK8psR3vzggpaRSUKgip4Lqv
-----END SIGNATURE-----
dir-key-certificate-version 3
fingerprint 23D15D965BC35114467363C165C4F724B64B4F66
dir-key-published 2021-09-18 16:07:20
dir-key-expires 2022-09-18 16:07:20
dir-identity-key
-----BEGIN RSA PUBLIC KEY-----
MIIBigKCAYEAlv6XS+VppPaQzOgor0YFlcXLWeXiMn5N3VBneXuw8maLOu9oPJ9z
2/oMQN8a+VOWTf+/jebGzOBK6MamXpgsIZPQWiT18gZMsYdR8mcqBYqVP3khwUWh
9QYkV+m+Auxa0TLzTrsi6dLDJ384XdpDweU+YJghMJNZ1NqiT8ogj84hxs5Tf+Qf
bn7EBIcU7SAKr5Lw25KrMb5e3AZSC5MilBS/KLgVTq/GiWb7pKd5pxGwlGolNX8a
PccZ2ZT2DrSQsct4wVxhSbUqANI3PfMpXvmUDxWWBgbQwLF02/4gi+13snlHtqwl
y1WjE55HVfx1CTX13SStwmF/N3SFtFf1qil3j5qrHdHtKlAYOaTfqab1eLVH1l83
LI5QWD7ri9GpPqIjlh6PuaHjaO2FW20SouZtS9jJKwi1l1G3ef1tSlha1cxkRxIp
U/ngvQBsoa9X26VfQA4MieZgVVdMVwjCNh2YC9aEXc/KxfcBueZkM1194qP88cVu
dOFYaftOkuGPAgMBAAE=
-----END RSA PUBLIC KEY-----
dir-signing-key
-----BEGIN RSA PUBLIC KEY-----
MIIBCgKCAQEA3OigVlkOvlx54wcY0RRuExNw2sPYHr8m8QP+SnzARDbrubvsKT0S
z/+aVWccgacBtihOpF9juQLHb+nqhea9s6QS8XAQ98bqm8foKToWuxnIRS9c+8e1
qcENTfh6U2Dr8ckwVcKAPtnLnPtbxuFF5UiqXAPA89ZmtqUPv+DfmDr5fdeb0bCu
Lo6TCFLQOcn2Qz1WsSv/2JRkSBy8pgaC01zErgv9oRVIzFfLn8YpfnWZkFiRGwX6
/GBLsS19SLLX0xLkPwQ/CwN6OkipOtYi6UNq0osHw9xfm5sCzcnltJShA1YtIp72
e1HkTx03a43uAKlJBo1rMD29stVJu9ABEwIDAQAB
-----END RSA PUBLIC KEY-----
dir-key-crosscert
-----BEGIN ID SIGNATURE-----
r2YFJIj1zR9iMPWRJYMDEKuLlV0Gbis9232Gog5sS06LpUFPYL6clLDf7eWAimPs
u8rUUP4JEjmAY7bWHyqbG3D5iljNin50W7kvY8ip+Vqf64vjNUXFDKUbi0iGkfVC
nfX67FL0JF74hqtCtMlS5QPvD4oLsC40DdmPD4kCulaSrMlmsFRGFdl60HeSLbeP
oopRA4yYB4ZGJxJUaSuMm6RrcK08G2l7vLfHpxhcJWQVb2fKB7Ds+AogZYnc6ZYF
hpGAP9y+Yn8TUUqPMhhZwLw/8eUAhtv8G2aBBxHyctlGvg1YFiquPP6VEn88h9GZ
X4d/mLOAQeYWEalQC812iw==
-----END ID SIGNATURE-----
dir-key-certification
-----BEGIN SIGNATURE-----
OlLQuEDdagECnVy1Nke/C7dpS8+8XvgLK/hGgV/OpCWr+Gq8bL6/NpK9GP7EbsUI
NxsguJ2r1wkEGTixz88gdKWDCC3evGW1pqnsjkCk69gHGtCxmrFeiCxCSomaOjzw
HCnp3TcT1DA4EstoXUqPysVkBYkx8OBO6rGhvE+G1S4bVG/EJkPCMhjPlxX41ON6
NWvtf32dviA5W1BrYKWJy/v0pCsApgjZa6qpaLdgqQabG5YEJA0rONS1hL+AcJks
CnvkSS7iU/4jrDPfgOLoVxEkH68swLol2Qf0RFHg12EL5kf0xbPnfE84aQyt99an
6VAMVIy/tCxR2efZ0+uQmQk7S35uQH/PxZ3/mq6cDMw7+WZdYbrkyfmFK/A+yL2P
op71Ik0Xf0Qwd0qMhTZMVPZpZDQmxvr0j0r3xHia0Ez+PhovnnxqI9/cThRQ/ceN
jE2cA46H4ZfYn5OdCP+mP9L+MsqJYoHj/SigcIrXUX58R1D0JWVX2KPU+tVyQ03B
-----END SIGNATURE-----
dir-key-certificate-version 3
dir-address 154.35.175.225:80
fingerprint EFCBE720AB3A82B99F9E953CD5BF50F7EEFC7B97
dir-key-published 2021-02-08 18:16:07
dir-key-expires 2022-02-08 18:16:07
dir-identity-key
-----BEGIN RSA PUBLIC KEY-----
MIIBigKCAYEAwBmqdD+G0q3smN5OBFHCcK5pQH5G1GIpFJ1JxCVEp92tTK4ZHnot
9RzMfag6zQFqwLaJ+yEb1DOjTdTMfcUTsj5f3GUqPB+U7shSMAvvAAM+Bx/4m1AU
u6sk4XmPB1bCBfcRl4zhnY6XFIbj0ktuBDblcxHz3lDgHFpBoci9sF59mM14MZ09
EdwgeckcU5oeq6ApuSlUVaOT8xsKV/yeK4SKaFfDclwPAJuitQ5CpqctP7ExmlrY
sboTDtz7/Xa6OccaGDEUf7TRlipvUX6rvlmvHm3qjdixVfExpa8E5QG79GZTL82p
1zBd3iqc6QEnRDTiW9cMUeQt4EvrwOUVVYPWo3hp1C/iiNzWraDays2xuhaSB0gj
fPatu2CFW5XB2vd9IvIiWeklSFqnF8DL38jDL7DbFiETJreGsDMR03yHWVd0MbPz
OrvAxG4tJn+JtnwhzlbRjnfk53jOTbiM0vMV8h/ztapCiJeT/6i7nVQ1xL2boeYw
5RDUlwZaQiaXAgMBAAE=
-----END RSA PUBLIC KEY-----
dir-signing-key
-----BEGIN RSA PUBLIC KEY-----
MIIBCgKCAQEApIIcKBWvD0P2YQtsrFKEF1kprJUCEUlWqzV4mVbTcVdzVQpct8t8
NAO8kDbxRSyU2S6gKecusy4H1MJWVAe2qvKIY974espuJwBXWFgT70jSBTFzjMpB
dAaTTY+kNZa66kjBjCVolr8UfFvL7HaL3CCtWD9ds7+ep76co1h3s3sD2BWW/M5m
V6ML8kYkjRW6SW8YHW6By3G+UuqRiGziJIIwQAoPnNSWrzW6UTLpVRDjdo70bQvU
vvfppUuNNji5SFfzSiakxHIse/eHG/rTNSzOvlpjuZxzPIcekr71eu1hCVHb2QdA
9Ikc5pUQeB0zImI8WJ9OVJDFUEgjJ9LGtQIDAQAB
-----END RSA PUBLIC KEY-----
dir-key-crosscert
-----BEGIN ID SIGNATURE-----
cy+VPbSGSJ5aI7egCwgNY6mgSlJumULFmUN8gfahvMo5hUwVLqP1FtoKIO8yBUc0
Y47pt6G5a0fjm6mjapFbU7IpqIUl+5gLBRKD6ugx+hr2IoqIVJY7WQUvVMBnfqHp
Z5N6kXfFBT+EbnbLiUqoRo1/AHC6E6CqI5pdhV86UCFydmuLf/MfwJpXiYRJueqk
DnPYEflq+Zu/RReL5aJlVOVuWq0ZpuzUHk4gIicKESLGkv4eI2CvuB5HTeNAB9L5
laMe+YpoXqgqMae1HT+rupPXYeONPygFXXbNLNVrR7OjAYG2TOaqdUTQkFefFVtD
ungKyPS6LTytSuU/rjWCbQ==
-----END ID SIGNATURE-----
dir-key-certification
-----BEGIN SIGNATURE-----
sV4ouMb8pmCM3WjLTFxfRVb6qZl8rQ0tYM/AjKz1ufU0UmL7yx/7JMg2InDcYPH3
4PIUQrDLoAMxnnNVMDaDGoGDGI5keUmU1eSGvdJYN7okd0aRvA9LFGw4uDVVyB0K
l7BOk80y15P34R4G6oPvcR8aCxoiMh9UusbhiVjBr6dAfJGVVxZAO1ZJ8pa8fcrA
IbtNks2vut6Oy4oaC7zLCwcbRJM6dSvzcbzBpCf7/b9w6NQNqCBBQkqKgUl0FqKM
QRKqHWuhbqcL9+lj7rvgWCEigLu9ff1+E7C4BV7GzOm5FPcRqfkPaMsjQuM/HErH
swhf2Ra+Tcdk9gdI4AomqwaoD6B2uKsZkcFpZhq4HAle6rOP9eC16DpqsokpqoW9
vb5Mic7ABYVpB4t3o5wOI9D4exXmzv6gpuOyl5rJGL5ORYSEhnMGsKMyPceCGysg
SzwfPWBqRTM2LfBxhW05UEBJev4EXk7AA5sr6GkcX/CXeR47pyXQAyc2doZo7Aoq
-----END SIGNATURE-----

File diff suppressed because one or more lines are too long

View File

@ -1,58 +0,0 @@
# Tor state file last generated on 2022-02-04 13:53:23 local time
# Other times below are in UTC
# You *do not* need to edit this file.
CircuitBuildTimeBin 675 1
CircuitBuildTimeBin 825 1
CircuitBuildTimeBin 875 1
CircuitBuildTimeBin 925 1
CircuitBuildTimeBin 975 1
CircuitBuildTimeBin 1075 1
CircuitBuildTimeBin 1125 2
CircuitBuildTimeBin 1175 1
CircuitBuildTimeBin 1225 9
CircuitBuildTimeBin 1275 21
CircuitBuildTimeBin 1325 7
CircuitBuildTimeBin 1375 6
CircuitBuildTimeBin 1425 9
CircuitBuildTimeBin 1475 2
CircuitBuildTimeBin 1525 6
CircuitBuildTimeBin 1575 4
CircuitBuildTimeBin 1625 4
CircuitBuildTimeBin 1675 13
CircuitBuildTimeBin 1725 3
CircuitBuildTimeBin 1775 1
CircuitBuildTimeBin 1875 1
CircuitBuildTimeBin 1925 1
CircuitBuildTimeBin 1975 3
CircuitBuildTimeBin 2025 1
CircuitBuildTimeBin 2075 2
CircuitBuildTimeBin 2275 1
CircuitBuildTimeBin 2325 1
CircuitBuildTimeBin 2575 1
CircuitBuildTimeBin 2725 1
CircuitBuildTimeBin 2775 2
Dormant 0
Guard in=default rsa_id=BD4C647508162F59CB44E4DFC1C2B2B8A9387CCA nickname=regar42 sampled_on=2022-01-27T11:01:16 sampled_idx=0 sampled_by=0.4.5.9 listed=1 confirmed_on=2022-01-25T23:44:41 confirmed_idx=2 pb_use_attempts=78.000000 pb_use_successes=78.000000 pb_circ_attempts=102.000000 pb_circ_successes=100.000000 pb_successful_circuits_closed=100.000000 pb_timeouts=1.000000
Guard in=default rsa_id=AADD84AF8D3C24F492D9EC1E08360D1C7CD5730D nickname=axeTorC sampled_on=2022-01-28T04:55:37 sampled_idx=1 sampled_by=0.4.5.9 listed=1 confirmed_on=2022-02-04T01:41:15 confirmed_idx=0 pb_use_attempts=1.000000 pb_use_successes=1.000000 pb_circ_attempts=1.000000 pb_circ_successes=1.000000 pb_successful_circuits_closed=1.000000
Guard in=default rsa_id=F7B8A4B5F16ECDF6CA626F96F4E3C219D1A664EC nickname=kerneloopsRelay sampled_on=2022-01-26T16:41:28 sampled_idx=2 sampled_by=0.4.5.9 listed=1 confirmed_on=2022-01-24T18:55:06 confirmed_idx=1
Guard in=default rsa_id=274A1DC6210E91827CDF40DC0E95E4A3CA929A08 nickname=AllanonTor sampled_on=2022-01-26T18:56:19 sampled_idx=3 sampled_by=0.4.5.9 listed=1
Guard in=default rsa_id=891FB8477529A6B2894B7A3129402E0FD5DD281F nickname=hers sampled_on=2022-01-31T03:58:06 sampled_idx=4 sampled_by=0.4.5.9 listed=1
Guard in=default rsa_id=898B2FBA56F3707B72A0B97CC492CBB466D9D707 nickname=julianrelay sampled_on=2022-01-30T07:22:54 sampled_idx=5 sampled_by=0.4.5.9 listed=1
Guard in=default rsa_id=84A9473665250B752B621892834E71EECBD610FF nickname=flyingcubetech sampled_on=2022-01-24T19:47:40 sampled_idx=6 sampled_by=0.4.5.9 listed=1
Guard in=default rsa_id=7DFC30D7EAAEF6E74B081EC0291757E9414A8C06 nickname=TorRelay1337 sampled_on=2022-01-27T01:43:00 sampled_idx=7 sampled_by=0.4.5.9 listed=1
Guard in=default rsa_id=A5E42F1A3AFA948A7F2FDB1954A4CF6C6489D418 nickname=bauruine sampled_on=2022-01-31T11:16:43 sampled_idx=8 sampled_by=0.4.5.9 listed=1
Guard in=default rsa_id=F9AEA07ACE06E8E7D55E10FFBAE037E8C833FA93 nickname=DTFNODE46 sampled_on=2022-01-24T22:18:09 sampled_idx=9 sampled_by=0.4.5.9 listed=1
Guard in=default rsa_id=3910C5CA0CC5AFE22C709DF471A2B5B6B4AEDC98 nickname=criticalcat sampled_on=2022-01-25T22:53:24 sampled_idx=10 sampled_by=0.4.5.9 listed=1
Guard in=default rsa_id=FD449127D30D8F5D124653D9EF736EDF4A12B4DC nickname=lw sampled_on=2022-02-01T00:36:22 sampled_idx=11 sampled_by=0.4.5.9 listed=1
Guard in=default rsa_id=0E2EEC125A6AC8D5EBF5DB36B776A3DA5510E7A0 nickname=Nako sampled_on=2022-02-04T00:40:19 sampled_idx=12 sampled_by=0.4.5.9 listed=1
Guard in=default rsa_id=2C7C9294CFA7AAFB3D25B72DEAED242E96927F03 nickname=ChomelesDEnetcup sampled_on=2022-01-30T05:51:02 sampled_idx=13 sampled_by=0.4.5.9 listed=1
Guard in=default rsa_id=916DC3199F639168CD20AEC4D45969268E807699 nickname=defcon777 sampled_on=2022-01-27T11:01:04 sampled_idx=14 sampled_by=0.4.5.9 listed=1
Guard in=default rsa_id=A6C3B64EC8EE20D77987EBC5E894CA6CCE4B5295 nickname=OwlRelay sampled_on=2022-01-30T19:20:11 sampled_idx=15 sampled_by=0.4.5.9 listed=1
Guard in=default rsa_id=6FB33CCBEF5135AFA3D6D33CE030F96728EDD70C nickname=MDMIT1 sampled_on=2022-01-31T16:49:37 sampled_idx=16 sampled_by=0.4.5.9 listed=1
Guard in=default rsa_id=85703987A509438D96E22AD367E99FF295E089AF nickname=gbtUSicebeer09b sampled_on=2022-02-03T22:13:49 sampled_idx=17 sampled_by=0.4.5.9 listed=1
Guard in=default rsa_id=BA053C72E476C1EB9D05237D0D6A289C18FBE8E7 nickname=straDEicebeer02b sampled_on=2022-01-24T08:18:24 sampled_idx=18 sampled_by=0.4.5.9 listed=1
Guard in=default rsa_id=225A8EA367DF3073433E0A845DDDA26D2357E4C6 nickname=Manureva sampled_on=2022-01-29T21:39:31 sampled_idx=19 sampled_by=0.4.5.9 listed=1
LastWritten 2022-02-04 21:53:23
TorVersion Tor 0.4.5.9 (git-d0ed04d50e80fe1c)
TotalBuildTimes 108

View File

@ -1,3 +0,0 @@
SocksPort 9667 OnionTrafficOnly
ControlPort 9668
HashedControlPassword 16:501107AD0642A3C66029D6A37845E976D5F55B4DED7C4A43CC044638A5

View File

@ -1,411 +0,0 @@
dir-key-certificate-version 3
fingerprint E8A9C45EDE6D711294FADF8E7951F4DE6CA56B58
dir-key-published 2021-11-09 19:16:37
dir-key-expires 2023-05-09 19:16:37
dir-identity-key
-----BEGIN RSA PUBLIC KEY-----
MIIBigKCAYEAu/DOrbv/4IAYvyxsy/6ivC3q5yCQBWLKHZGYKQa5G/3rem8wen0f
qF7y4ye6U6faWc5kcNMHEKMIeBzMErxwF345qoGHITxbbOWnizgwPgrdCwlK3p0H
1XZGU/TTjoaM25P+ZNCBvGmDQRAtgs2odnv+i8hpu6vrcAUZYXmmw/Ag1Ou2AlLC
mPpbjV1O5SMylgC4IuCBPr3iA+M1kKkvj4LmwU6pJxjAae76GLzzQ/Ffvi7rRpvU
2BHetjehk+7/t8izgbhT4VABtzKgrv9ATnhfEgPeT/WBq0E75iciBBAXRPF5kEA4
k++NPy21XpL7jkQ4wnMs2HyiFhHbUwbLcoyQ/JVq/WBboSwStYbkdizRpkhJ1eNg
LiD8CPWcZnhWZi9VWrwT0xl+Mu4v6kwo9kVnXhOfcK8Wni9FqiBu2tmNDoGPG1Ac
wptYQSIoujuLgn4MARREwo9cWrKp2w+D7Dt4U7U5OrXL7TXjonEKuEHwRhzz1JA8
7LXm/wENwn1/AgMBAAE=
-----END RSA PUBLIC KEY-----
dir-signing-key
-----BEGIN RSA PUBLIC KEY-----
MIIBCgKCAQEAuxJxHCGOw9DgNtw4wqi78OE3djdiLwbie+2CevKMRaO14IhuQGVK
w1PYsnTuVLVcJl3Y4QKQ4nnbe1QCiGrLq9wueQy7ZvBeZry3f+QD1Q/PAG19n6/7
hlhXclSOJ/jRah0Gi+QXAycKE5RES/Qn4F5fNE7MxzM0ZQHIlszZLNUrcpeLE9nX
avlqlSqK8FmLPOpOSRrdPtzKP2sjW9UUFVGMfurDYIC51hkZI/nyy8A1C844sfuF
LV6oYpYw5+soA122zBqGqP6vApwFCvWSDcGlx8xj1Irdo+JIDfK8vklu9P11rTWB
R7dZw9pD21reD0pf0Bipzneho6iiL++w+QIDAQAB
-----END RSA PUBLIC KEY-----
dir-key-crosscert
-----BEGIN ID SIGNATURE-----
aMzjdOHri8Kmdoy0qt1a33Y9/e5vKkJQkzCKdHN34Il5FMMCkOrJ1yeQgZyp6mU4
jPSpUZlr1Iq52x5ers4fH4SybvX16BDq+p6+Zel9f5TpFg1vzdpJH1WOJ3ZoES1N
S8CpiXVz8flc5Ez6Dc7uZGSE2fYRl1Pswn3GuLfR1Wjw0VNp1VgHZk6xYXRk/YLx
OyjZTWEWAF/0qw3usXtvTvh6wGniVxr0rg3zZbesLXti4TAn3B3N6VG1TPOizna6
s26edpQ6RQPigAuccEwU5iaIQEGkIxcoe61qnPvAoWP3Jk/sZAGCqhbya0CBCH8U
pEW/OauwlDlr3yXEKh05aQ==
-----END ID SIGNATURE-----
dir-key-certification
-----BEGIN SIGNATURE-----
XhAoF04YrM2zJUvrQuEsGhU53Pbf1B0jv5F4YkMlRX2y15rKXKI93vQTM1LbnYc0
ETkhSOQB2rpnX0bcE+K+x0sWXiMRtR1HSX/oIPDI9MNqHv75eZlEkSaDJHIsQJlj
Dd++tMHkRc49nNNo2J25J3TiBU0ecpVYYvtJzynE3W8tX3io6EmvTehkj2o79z0A
ax2A5JG65plch0ES2yK2jqgBEmkA/eZENDNQAaERXMFJbbpHIMBaGguwCEieJe77
JBAOxJFRGpL6MhMpcvi5MgEMqfAv3AhlBo93n4apT2CYR8PdCHUZyq7FrgwTSJS7
ndl3YmvxJ7wnyTXitw0GcSVeQaYMQV+LR9Z1VkmjIwRuHliUn7hR79pYqs3t11aQ
muW8jOrx+5QsiTLEPV6Hs0pzXc9XDw7mnJ6M2gxxF8fZCztal3TNLs9+1O22fxME
0VU1oS7SG6T4M1YOXgKFUP20gLl8sZf+3lGp3aLZIK8psR3vzggpaRSUKgip4Lqv
-----END SIGNATURE-----
dir-key-certificate-version 3
dir-address 154.35.175.225:80
fingerprint EFCBE720AB3A82B99F9E953CD5BF50F7EEFC7B97
dir-key-published 2021-02-08 18:16:07
dir-key-expires 2022-02-08 18:16:07
dir-identity-key
-----BEGIN RSA PUBLIC KEY-----
MIIBigKCAYEAwBmqdD+G0q3smN5OBFHCcK5pQH5G1GIpFJ1JxCVEp92tTK4ZHnot
9RzMfag6zQFqwLaJ+yEb1DOjTdTMfcUTsj5f3GUqPB+U7shSMAvvAAM+Bx/4m1AU
u6sk4XmPB1bCBfcRl4zhnY6XFIbj0ktuBDblcxHz3lDgHFpBoci9sF59mM14MZ09
EdwgeckcU5oeq6ApuSlUVaOT8xsKV/yeK4SKaFfDclwPAJuitQ5CpqctP7ExmlrY
sboTDtz7/Xa6OccaGDEUf7TRlipvUX6rvlmvHm3qjdixVfExpa8E5QG79GZTL82p
1zBd3iqc6QEnRDTiW9cMUeQt4EvrwOUVVYPWo3hp1C/iiNzWraDays2xuhaSB0gj
fPatu2CFW5XB2vd9IvIiWeklSFqnF8DL38jDL7DbFiETJreGsDMR03yHWVd0MbPz
OrvAxG4tJn+JtnwhzlbRjnfk53jOTbiM0vMV8h/ztapCiJeT/6i7nVQ1xL2boeYw
5RDUlwZaQiaXAgMBAAE=
-----END RSA PUBLIC KEY-----
dir-signing-key
-----BEGIN RSA PUBLIC KEY-----
MIIBCgKCAQEApIIcKBWvD0P2YQtsrFKEF1kprJUCEUlWqzV4mVbTcVdzVQpct8t8
NAO8kDbxRSyU2S6gKecusy4H1MJWVAe2qvKIY974espuJwBXWFgT70jSBTFzjMpB
dAaTTY+kNZa66kjBjCVolr8UfFvL7HaL3CCtWD9ds7+ep76co1h3s3sD2BWW/M5m
V6ML8kYkjRW6SW8YHW6By3G+UuqRiGziJIIwQAoPnNSWrzW6UTLpVRDjdo70bQvU
vvfppUuNNji5SFfzSiakxHIse/eHG/rTNSzOvlpjuZxzPIcekr71eu1hCVHb2QdA
9Ikc5pUQeB0zImI8WJ9OVJDFUEgjJ9LGtQIDAQAB
-----END RSA PUBLIC KEY-----
dir-key-crosscert
-----BEGIN ID SIGNATURE-----
cy+VPbSGSJ5aI7egCwgNY6mgSlJumULFmUN8gfahvMo5hUwVLqP1FtoKIO8yBUc0
Y47pt6G5a0fjm6mjapFbU7IpqIUl+5gLBRKD6ugx+hr2IoqIVJY7WQUvVMBnfqHp
Z5N6kXfFBT+EbnbLiUqoRo1/AHC6E6CqI5pdhV86UCFydmuLf/MfwJpXiYRJueqk
DnPYEflq+Zu/RReL5aJlVOVuWq0ZpuzUHk4gIicKESLGkv4eI2CvuB5HTeNAB9L5
laMe+YpoXqgqMae1HT+rupPXYeONPygFXXbNLNVrR7OjAYG2TOaqdUTQkFefFVtD
ungKyPS6LTytSuU/rjWCbQ==
-----END ID SIGNATURE-----
dir-key-certification
-----BEGIN SIGNATURE-----
sV4ouMb8pmCM3WjLTFxfRVb6qZl8rQ0tYM/AjKz1ufU0UmL7yx/7JMg2InDcYPH3
4PIUQrDLoAMxnnNVMDaDGoGDGI5keUmU1eSGvdJYN7okd0aRvA9LFGw4uDVVyB0K
l7BOk80y15P34R4G6oPvcR8aCxoiMh9UusbhiVjBr6dAfJGVVxZAO1ZJ8pa8fcrA
IbtNks2vut6Oy4oaC7zLCwcbRJM6dSvzcbzBpCf7/b9w6NQNqCBBQkqKgUl0FqKM
QRKqHWuhbqcL9+lj7rvgWCEigLu9ff1+E7C4BV7GzOm5FPcRqfkPaMsjQuM/HErH
swhf2Ra+Tcdk9gdI4AomqwaoD6B2uKsZkcFpZhq4HAle6rOP9eC16DpqsokpqoW9
vb5Mic7ABYVpB4t3o5wOI9D4exXmzv6gpuOyl5rJGL5ORYSEhnMGsKMyPceCGysg
SzwfPWBqRTM2LfBxhW05UEBJev4EXk7AA5sr6GkcX/CXeR47pyXQAyc2doZo7Aoq
-----END SIGNATURE-----
dir-key-certificate-version 3
fingerprint 49015F787433103580E3B66A1707A00E60F2D15B
dir-key-published 2021-11-28 16:32:54
dir-key-expires 2022-02-28 16:32:54
dir-identity-key
-----BEGIN RSA PUBLIC KEY-----
MIIBigKCAYEAxVbS0noZKz1Ei6858RGyyuQgwQUKG4Urrp2BiAzkYxwX+6fURlut
AjeLb4XysqCdNdUipuLRQ2QIy1C220QiCHV6jZAsM4tmEq6TpK6q1lxi5YPKqbGS
CfUQFT1nO4s4DCYSLCwiRNy6bMe8tNHc0MpXP3loCbPkYCoXrEL6vYIROw3oeGWE
KbFPQrzYJAPHgUubBibsY5lkUY9N/5QZw2y1bn+dq9mFOoCIHLd6DkQmySmftnMe
QrpYA2WvE4M5yN2HB8QGT7TdzXPPL6889rFw/mjqYExQPX7cqmILkchsB7I5whjA
u0oodF8Y9ooK9QT0GeK4h3xQhzNG17anuUxbZ7sxzmBwBNmkNyLWEeIntazyjRFr
P2mDY/9YK2JOQKkh3tKl1whcCG9ZtAhKmm/ijG7OrhqtusdGKBXIgALf4f111AK1
gNcacDx2fJzRHuNK8zkIORAzStxKdLbAbBNeLENk1zBjSkrxCOJH4mBpr8TXULq1
ThLI/8OzZq4LAgMBAAE=
-----END RSA PUBLIC KEY-----
dir-signing-key
-----BEGIN RSA PUBLIC KEY-----
MIIBCgKCAQEAo32l4qg46cqP/sAL+oLmQM0mDiQUy6EtNa73vyy0BJEGWJeImUO4
gHNg9pyMFqyF+rP824gAzwX9Un9HaKgFpIrsKcZzg+Yl2vlrBQpJ0NPIkN9oqj27
W/A7RftMhH2itv0v87QudD7FqJpxdYNf3wpr9GvsAiHZMBfC88WhCnmJoDBwyucY
HFH7gzjPeDx37KD57o2M1KC/SRVtQtrccA/WzcxNypgAYkJu4yE2gaDr2WFn3hFv
kscW0jn6+157UuKH0rCNeRFDx8SsSS0nr6Zk/n+dlXzHGDO3vQIKCoRoH9yL4T//
hkMYE/4qc9R49VyXxK+n/qU6HQYpQMi+VwIDAQAB
-----END RSA PUBLIC KEY-----
dir-key-crosscert
-----BEGIN ID SIGNATURE-----
KKrOMRAg1bx+XFLRjhQB5OFjtupkqkFnGjS3LZQ5FHNwJ7cKG1X7K0aJNAumRPMD
w9xraIMuuok46wj35P9Tcy68qi3EqIJP5378ZtdK3Ncy9KkSWJSA9MLPmB3fClL/
/5TwboePXRdlt++Bcw9OC83HDuFVBqZArFIvopKf/AJOyViRVHlBmgNKFpm9RJTo
XsD415rJAi79tAfXzKuagke6DTVqobMhxrUmp3RjbEEEC6icQ3YX9X6NOPQ4Gwl2
bpWOVi3/9EGRge0X8IYsqB6/pnEXM2FSOTMdwo4YQzIgW/HLE9hXjFCx7QcPkcos
AZHvl12tKzZF3F9MKPcNyQ==
-----END ID SIGNATURE-----
dir-key-certification
-----BEGIN SIGNATURE-----
wb40bfNLWyU9pWW+2BAHbrmZZfbs9UEIS/6G66VE6823/r6M90RCmFx1JlwqgmaV
/WMbBE9DxFKILyhuQi6whIKoYndg72VDeZL5BzWctalw24VpJePVjeGLcTdJHBVh
a6UiQFaQdH+bTX6qNIFv9nNwq7ZzJRBvaYF9bK8kaTrZilFKoRVBxXssBUFjEz6t
f+sei5WIiBnzaQOUxdMjvdDAHci4DXwGw1U2M7jcYARo4FfvWkAxzWLxocWmauPM
8tDn0fSgMnLlSOR2crnriQMFhYD+9xyxfOq1IDH2IWCKlejz7j3DHSqBYiUSO9oD
uX6htwbMWwZQeqt+LttE/zZX1Tcv6PJqemT8uabH0s94W2A3sJpstWJ+0capb+Mj
bvTXj7t2ilqa5RX35KKhaQ6wlh4OXZb2ydeJZc7wtyG8eN53aVqJNJQ+WZn4IiTq
fefr2ojy2VDJLDHJVNpKQQzmjXtSs+69wCvrqdHGjGAQl5L31LjZgaNLNj14RI+H
-----END SIGNATURE-----
dir-key-certificate-version 3
fingerprint D586D18309DED4CD6D57C18FDB97EFA96D330566
dir-key-published 2021-09-06 18:42:41
dir-key-expires 2022-09-06 18:42:41
dir-identity-key
-----BEGIN RSA PUBLIC KEY-----
MIIBigKCAYEAvi5+A+XPw4jxMYhmEI4+MpnaX3dUEbsMGHA+xAMnmVhuxbm3Dn5c
TyhQNY2LOlsieE84UYG+J4dABfaFH4w0l6zUJkuytX4+6WRQontw9puR/IcXkRwM
8Tv/tY675OYRCm9DgDAWfqZM0IgTzSrYRDl8eFPSFCOP0NhMrQZeUrdKgwAXVZWP
xt9nTCwT4K9BMp47LEmZKdEokeVsr0l29Z9v5+r24k9x8EQjDexsoHwlVrxWfarG
1klWssfSFpkMN+FkTQnBC6ByiBh5ZKM5AC/HkVFvuHjehUpfrtNk6XNFcKbDvEIg
qPdg1QWuuSWpZVA+/EwSBtwMNcq9pv60L8Cm9WCJoSC691WByiGwFCy1/XcBI4J/
BkoMEvP3kAxzm92jqGbpFSJawFRPZKy89FDKpha/So3CERQPV0ar+DTpVqDlryWV
N4x1IzpPeSHFj7T74q8qdrxx0wcAjWJ9WYoGQif6FK3hHcmbSGSgyvAFeoYxyUCL
JHkjBCD4WTWVAgMBAAE=
-----END RSA PUBLIC KEY-----
dir-signing-key
-----BEGIN RSA PUBLIC KEY-----
MIIBCgKCAQEA1Hguh3PNTfMd7kLD8NupSdye1KB6hhQitx8DipvT71ZaCZYI8fZ3
z5xa6fCcJXv/xoz1tzKeJ1n4/AzAbc7ltCyyWkj9CbiB99cEe+sVE9R899eFvPP9
DUmsmgy0Bn2MrdfD/N5VeJ219TTtqI75BJMd9n1+r5zUzhji2ihcLWYgi0GVZoec
6B+xfPtYbifCdrPRBwrMAW4EhtMKeJfzsYFO220f7x2OmmZB9muesi5O8/0zjwu1
xOKldXCFbccTfFN88nYmaO8j0SpG9nOveFXavPs0LyVzhuMkbLXSWAN+M/S6GC4L
1kbkjQ6YhuYSnKxGFo/wdax41jrSFCf3qQIDAQAB
-----END RSA PUBLIC KEY-----
dir-key-crosscert
-----BEGIN ID SIGNATURE-----
r2a4uvuN2LUgSuHoWYckJusjzeaEfTTN+DHJdQjJrMueZtxhhz+C+soYoSAvBsHI
huc2y0wLbeNMpLXeyGoYh0M4zm6RyjMksHQZbgPjkibflbUI3csJcvaBMQonfo9B
knoqOzeQd8NioOlnbYQ+k78swGtg2ndHpK4G4NMBK6ZQrbhrIk0nVhOhaIHpGdiN
icr+czGq6SzH4Snp26dJ+J+9SAdTOzgat/C2Othdu122JR2/7GzCnz8dqS3LabN9
iWJWMLxayFKi+Z5f1WjCNOVh5lSjpeLjUNSrA1hXXKSRD0eFOQFRvgvO60gyvooH
C8amqpSD8HqsCK6MvN7V9g==
-----END ID SIGNATURE-----
dir-key-certification
-----BEGIN SIGNATURE-----
uuQhm7YYbqR4/fGSDWqzwiw40nr7y3laCmfiTDHOA5N6lVOw/tM4bdMbGH58wkkK
XBIEz4zQnIT4Sgaumc9PZK3/a8wkx3HgvSNZAEvv5GK2iD8QQNaR0mv7/gbCOLeD
4MAsWH7ehc2u0AcebYehYWE7/fknYRfIGLRzeAeR479LgtFIaaZ54lGeEWKA7qBc
B3njJcNDlekChydxw2JRMw2GmK7Gn/cVRLjFiG32aaTPA37Ietw6Z8wXEjTy4087
KTzTe6puX0g9kCWMaGIBzod+ucNOG9WhgVfy6M+OMddI4KbgizUM7a5c3DZwnQHk
nn5yqib/W7NmHZOL1k2qYlKQlbr412bsDgBDoFYSYPIkbO4x7LHJnGGiwxYx4vmx
caxDySQtqCcR9ygMrZVrL9W/Z+w2N/KCXnL+SgTmN0x/Saor1ZTkONj5Tfn4dg/W
xDxvLO02DpVTfgidUsBeHSnMQn7w0iG0abhWFmYNFDjxZFEWy30mRCEYADC/1NCI
-----END SIGNATURE-----
dir-key-certificate-version 3
fingerprint ED03BB616EB2F60BEC80151114BB25CEF515B226
dir-key-published 2021-03-29 03:27:58
dir-key-expires 2022-03-29 03:27:58
dir-identity-key
-----BEGIN RSA PUBLIC KEY-----
MIIBigKCAYEA1d6uTRiqdMp4BHBYIHKR6NB599Z1Bqw4TbOVkM2N1aSA4V/L/hKI
nl6m/2LL/UAS+E3NCFX0dhw2+D7r7BTJyfGwz0H2MR6Py5/rCMAnPl20wCjXk2qY
ACQa0rJvIqXobwGnDlvxn4ezsj0IEY/FEb61zHnnPHf6d3uyFR1QT06qEOQyYzML
76f/Lud8MUt+8KzsdnadAPL8okNvcS/nqa2bWbbGhC8S8rtDpPg5BhX2ikXa88RM
QdrrackdppB2ttHlq9+iH3c8Wyp7bvdH8uhv410W7RnIE4P+KIxt3L0gqkxCjjyh
mn9ONcdgNOKe31q2cdW5LOPSIK+I5/VTjYjICza7Euyg03drpoBMGLuuJZY6FXEV
auIBncWe+So8FMxqU/fwo5xm6x085U1MwXUmi4XDYpr/kau6ytPnzzw9J++4W9iC
em5Jp0vaxrDnPdphqT0FWsBAwsZFL7nZRnmUlTgGsXUa0oSM9/MErDwzELh/NwG4
DNyyzRG8iP61AgMBAAE=
-----END RSA PUBLIC KEY-----
dir-signing-key
-----BEGIN RSA PUBLIC KEY-----
MIIBCgKCAQEAsw2ZJlGsmfDmDwoKbzjOno759Xwqn6JX+tFasI8eRjOFnOyjYzd1
XjG6Gj2hVpF/ze2NiTuUyRu3Ybp8G9/gs8VGPljxSHkEugGjQdYFoST02ma0vUHA
8YqpBYOiLvsXnqfEkl3Yj6HVxmVJA9j8BxODODlBtxRMJWFrpp/b+qCo/YyGmCh3
n0qd3QNqFPLIzwvjWVhaFfga8dXBT73wX9uYT7nT/e3pV7ZvTw0caqi7svNzj0I8
/OxOEjoBQEQMQVPT2bNZKBe9X8QKDSgdealZQwBT9wdZ4KndtCj6Y8MVjj15/YtH
fWfNyUHgVqOmfDK7m3pHXR9fGgsLQexIfQIDAQAB
-----END RSA PUBLIC KEY-----
dir-key-crosscert
-----BEGIN ID SIGNATURE-----
GyN9MMaPABXJ16WAFIhdzOhNT59BI0RAfV9ZpUJgzkAAmpoj+WwUtWfcrW7a08CT
9g60QwJonP/Nh+8iLvQYH5ZyEqsEj0HEUD/yI2kvN41Y5QBD1Sku8Cu4E2UaICzL
V63oitjQzppKlVXHyP/SXsI2bUjoHLtT2pBvxRJ84DlZBEQ/ZqS38NN/+Z6DtMR/
kn0l7W5yA3bYWzeKy1TeKLWo7p0hHzv/Hswe/eha+27LuwZZwwfSQrRy1fi66Fmj
0xBP+iXXtmNleFegFuhEBPXa+9udrT9rodSdazkGPzjyF6HWRMP5DtmTI6ovJDVX
60UQ0hNb6KAP+FZKPz9/dA==
-----END ID SIGNATURE-----
dir-key-certification
-----BEGIN SIGNATURE-----
zAgmCR7tf0btsogvBmdxJ7+RWjPBzmDSA7f+zlK0jOc3lDDD4pxuQO6iNcoEDYMC
5hkzVoGBMYsxLfLZXFGE518dn79iKr6SQoq87AhnAsIiAfXMk2AWLkWI7MTzZo2U
dcgo+7vzxMObk86vzFxYWrSqp6CSZ7RwBRnH3vCGLfOMZ1lXMug+MQAQYAyl6KIR
3d/uEu3+sPFJcHQFP3C/7bHDG5j/76kwoFzjSjg974rSjr1j1FbrpNn35mLc+2X/
11n7cOADHWaSN3MlLWGsYxuuX2l1w/XZNfFEezDwK3BOotbj5spU2nQ8xbDFPB5+
ixDfc00TC3YbveSz+S8W9czfysJt3KaWmQczDtSIXag1qrL52CBGUVGP6+R7xnpR
/4QD6yCKmDcNk2D1YnindwYC48ydDt/u9A/97cEBpUbul3feW7eKLk79MIklWlWo
3c3aQVH6Ewrb76oXYYwzNbqJOp2ceREu72/Fk/keprVcupVDtVoqHgDDpfOUYTJd
-----END SIGNATURE-----
dir-key-certificate-version 3
fingerprint 14C131DFC5C6F93646BE72FA1401C02A8DF2E8B4
dir-key-published 2021-09-01 00:00:00
dir-key-expires 2022-03-01 00:00:00
dir-identity-key
-----BEGIN RSA PUBLIC KEY-----
MIIBigKCAYEA7cZXvDRxfjDYtr9/9UsQ852+6cmHMr8VVh8GkLwbq3RzqjkULwQ2
R9mFvG4FnqMcMKXi62rYYA3fZL1afhT804cpvyp/D3dPM8QxW88fafFAgIFP4LiD
0JYjnF8cva5qZ0nzlWnMXLb32IXSvsGSE2FRyAV0YN9a6k967LSgCfUnZ+IKMezW
1vhL9YK4QIfsDowgtVsavg63GzGmA7JvZmn77+/J5wKz11vGr7Wttf8XABbH2taX
O9j/KGBOX2OKhoF3mXfZSmUO2dV9NMwtkJ7zD///Ny6sfApWV6kVP4O9TdG3bAsl
+fHCoCKgF/jAAWzh6VckQTOPzQZaH5aMWfXrDlzFWg17MjonI+bBTD2Ex2pHczzJ
bN7coDMRH2SuOXv8wFf27KdUxZ/GcrXSRGzlRLygxqlripUanjVGN2JvrVQVr0kz
pjNjiZl2z8ZyZ5d4zQuBi074JPGgx62xAstP37v1mPw14sIWfLgY16ewYuS5bCxV
lyS28jsPht9VAgMBAAE=
-----END RSA PUBLIC KEY-----
dir-signing-key
-----BEGIN RSA PUBLIC KEY-----
MIIBigKCAYEA+jzmadukj4Q0qLgJ0at+nDXGruO5JD3HsehobiwO8HrdaaImY+rY
CZzxRWM4xryQ2AFuAGbSxGoNQT3dTLvjKNVdGY6jPzlS7vxKbPeNZtc/YMvfZ+Fx
uEjvaZ6nDbviVtQhtE0J2EZ32n90Ob8YC8l/7zh0hp+mZO6Wf2DGXWjNvG7d8Ucc
p5A1ZVIpJ/VQzdlPaocO+6AvxvSBpaIUF0yGpTwofTOjtUmZyuWbhRndsQj1qMcj
e8wzOIgr3HZyhO9wztQGkZ8bzHq65oZe0IIOXZu0icZamFGQ5I6y5duCqxDDe4C/
v1/6bD1I+/ujLXRMmkcbJ3NZE+KrZg7KIE5ScGbkJIX7vIicqtsf+7VipdOh3/wp
qaDxX9Sp2cbVUU0M/aJ14nDSeFlx0XQAgWkPjG2lYtTNEC2zuudBCuCD8es8EhAW
FrU94cYg9lVId0NDMOpWPMH2QJFS4tk3Hc66si3+gkCOt2GOaSQeD+gGWkdwDzn3
S8iAur2GohFFAgMBAAE=
-----END RSA PUBLIC KEY-----
dir-key-crosscert
-----BEGIN ID SIGNATURE-----
B4914rKqUc51Q1nq8CrA/e7EaMQ0ug08qlBqWyzZSDiBKVCoQj446ZJMU9VKlzJF
XtuURlJ7zswXMze7HceakrkxZAc7GiAGKO5hgbbI8XGLvXn16Lsr/MP1cmbKoI04
g5tG9Kx6yOB4r/l2TQY9Tw22YcdJ24W2/mw6TmDv0b+IorsIBnxIDv7Q7j25IkNE
hW3F9R+Ntja1RWPqKnptp8nxBt5/2jVr637BFczDv9K509QX+HHKyICA1hnvDDU7
N5Y1/mVu4JwQrBAFL857XbobP4QaLsZ34Q8LRE4dveuyw+vjVa1YimZ6h/RvrYyP
8DUi4XnzFyztecivXbdSTpMTSMfC4NQXFeT+XStRdWlapZyCFhp74w3wv7HCB0z6
7QT1HWMKPRvj1DsHhvPviyLVCL2tl2x+G7aaledOPf6BbhO7VolNeHiubyYCQl2H
t/Vy72DZbQeuLhf5GyqVyUm9uugzvVrryUiNUApOW8Xta2dAEBqinDrrY6iMYxh/
-----END ID SIGNATURE-----
dir-key-certification
-----BEGIN SIGNATURE-----
UrJN3Ey1hSHTaMUAhINCVFhojt48ppxky0bvwztQ9p/Vy7dfRx0APNbL70/XZOrR
sRj8zxtx2+tc5Lnkfaah63bmVsUNTgD6LudDaffXiV8XhIeVbzS0r/YJ0U1OsbK+
ApDItNDUz+VIJL5JUDjq/6fojFlWPYNIwyk5G8zOM70Atjk6UDyCIihV2u5pofW3
znFaFp/XhC14S8lMPZYKbnyl2iQ7UsqLpTxg3EwivIlSVFs5YQe0yXgJFX0oNd9Z
gAf3JIonA2g8Oo9EkgRfYCI33AwyVoU3QN1/AmLH2uPWTKhMu7k+OHktuIBfyFTR
9jbUq+YTU1ni6kEsJVBP/0I4n9Xb4VYIoqOq0BrcEp3lQ8BCEWjIGwLh1HYc9/DY
meE+cwLp0RNU8cuxyrGnkLA350bsNxrDkiaHAkj5ZA8W9VTGYsBxVhbLdQzN3GOm
63GJBgjdaOsD6WXs/737nD2sLu6dnA/Jbz84ouZSafQO/FNQZnndfj4osjabmq8O
-----END SIGNATURE-----
dir-key-certificate-version 3
fingerprint 27102BC123E7AF1D4741AE047E160C91ADC76B21
dir-key-published 2021-08-21 23:12:45
dir-key-expires 2022-08-21 23:12:45
dir-identity-key
-----BEGIN RSA PUBLIC KEY-----
MIIBigKCAYEAuxgnMVH4vwBjMeGvrEODOYcjbCS4N+Wt0SZ6XA5I08HyMf5AbaaF
MDscJBRIUOp7DyLmUwK+jp+QI8pUjjKsB8S0ctb/J3Im2T6CXnP2KgEfVmpNVQmV
XdMm8cRZl1uIZDDBAXizSQ51f9A17TJh7pF/5khYp/SAzl6aO5ETn7ry0ITiJnNa
6cY+400F7ZBA8NuXnCHVGfmpFFsiJKFrS1Kve629eeaNEd3mynRviBXJy5a4NEGf
y42Ev8on6SxEnF9OG0NMJ081/+mP+j8Dsl3+Uehzr9B42MQQfDo4RdYGrt9XolBm
L4eay1ieZEsFeDy0TMfiGGbr90wo1fgGLHIRSfTNLhhPJ/f9cTZPe98rhSgGWiAd
RvK5SljoIOR4qdS9/aiZkj1P+etvh1rIQUcG4/xCOBnouEBK+DDHZFqyMtpMPtV0
Bxi20DVaMJcyhdfjVqcRSyuR8tlOnTid6QwBj6kgIIfMaC+4Ht6yO/SYquCWlaZl
y7Pu7li8WyW9AgMBAAE=
-----END RSA PUBLIC KEY-----
dir-signing-key
-----BEGIN RSA PUBLIC KEY-----
MIIBCgKCAQEAu1QJ+qlCbtrYsg9QENtOpvMrEDc+WgH1ZFxEqk0v/ad2ACQYe4dT
g1gJ6VZyGths3p8+WQXIA9YbcEr2oajXlLmLT2QAlqlsXMPKwwIpeG4rvR43Wwq5
mQ7aX+/VjZ9YZNoZVEAy1O7ti7GIXJzJYDOdgBjLifSjpjcEmSaf+v4E357azs9R
ndLHRRwbBLdUl7G3aMkL4ejrv6AAXexPxAL90xsb/MAhVEOQrJNcVMTgII0fSf56
P1J17SQwthNZ4rTMo2O9TvWUGNf1sMb9kdm+A2Nwo2CKmUR0uo5wHN4YHSBYFDcb
hxRtZlhSFfBJvJgrX8/+CnJrBFC6S/7vJwIDAQAB
-----END RSA PUBLIC KEY-----
dir-key-crosscert
-----BEGIN ID SIGNATURE-----
VzdxGiA6egLcZjm3hHrTW+N+7sPwaEcdYR5/GW757MO79O8QwjOLJSa5dOF5yDWa
3Ie+QDB2Q++a3+w776zqpFsaGCuEHBCfU9pxatKdoTsExZdQnWHJg4u9YD1JcYvL
dZq9uCCWaKa91OjA6/U9zp/LY3tOPUWCyO4MHehHYggzapbcF5uaMG0AT0lZzaXJ
vh180N5YGMfm0eYXJqkJyX3WCZhGroh7o3DyaqtBSJ1cY4NzTNgPoCAi3J/XEoCI
3JzxfH97uyqQngR1yGb5KggdM2ejci3Ld9q99hjXlzYRtsobUQBTlZca2vUk5ALh
vFWU7GzcNIdDjKBUd+IhTQ==
-----END ID SIGNATURE-----
dir-key-certification
-----BEGIN SIGNATURE-----
WldVJc0L3fByDY9D+Yha2/8Bw5nqRpHu8RL8lU8zXb0rhfiA6DN2aefSCG9WEay1
sTVs4zhS8N0+278oP51Lg7S+V6SmXxKZbF3I2zNaFMIPVspRA3OF0R9vCP1YMxeo
D4EDQXiRxNNeM9hAjmmLiE0j7ZMetZ88ewwsOOXAvPHmCth09nWdCYKwibwUW/U3
w1HXCHK4BdZ7XXkMJNry7kZP/H1/5oYyuKshue4+f8tgRa0xg0wbHDrdbrR1qBBu
Xg9Q11hV29RIdD0ZgugUdyGKlpRa6Mb3GD5DzN845sFhCjsPrYyZv7Xo/S+uTtN4
t59BtF1TjnsAhUk7shk2W3zzaauzUarkDA1v+mb9NZ3CFsNgfxt6d1yDDyuxJgaC
VkIfO9nX9dCORSC9Ow+XOq+D/o4FfSe4q0VvrJJILAcw2Nu1Zg4ZhHBeugP9f4I9
p/+ZMrEr+YAKkjPw+uIEdR0l/YZEhcrjymX4FY829LNll2AceqMCKoapFWuEzzDP
-----END SIGNATURE-----
dir-key-certificate-version 3
fingerprint 0232AF901C31A04EE9848595AF9BB7620D4C5B2E
dir-key-published 2021-08-01 20:00:02
dir-key-expires 2022-08-01 20:00:02
dir-identity-key
-----BEGIN RSA PUBLIC KEY-----
MIIBigKCAYEAu9O0Pueesn0+29BlxZs60mBqehjdQtgSnKOm9QZxbQ0xrMQgbFnR
hWbKD8erenyeFk2SF6AJkbyzgYC89hyPW+8GBDmg5bE8fRKjgV/nI3tY2m4rkY3u
zSmYIdwqHUUc98Xzt9PaQ8IJAlDBY4XLKrWmJMxSyhBlVEept7+9Tj23qowW44Mz
xPJZ1aFkB1FpkD6qmoCzVZbhXy3cGt1nDwdJK7KqlaXziz9pFiw8PzTVU2xFgJNy
+nEcT72DBtk3G5K2Riu/aXY/D541Cioj9KMV4Nv4g8aBKx58Xq2tq1pFkc1Bqj1y
2MomVR3iskFzlqC8yKWGVe4OP2IaOhtcQJYp5GR9q+dWnr53WWNVxNu3sA9iMal3
PJUk5pIYrsmArGew5gmlCe+Al46nPINxc7ouztmStAV+2F6SpZlKOcstnT+KJ52O
1xnOSaj/WnzG2o4KZ9UrFQoUNOLQJcelPcC+vrinMk9BQPcB072l9NjpUBC9brsW
qTCMStn1jfDDAgMBAAE=
-----END RSA PUBLIC KEY-----
dir-signing-key
-----BEGIN RSA PUBLIC KEY-----
MIIBCgKCAQEAp7nHn/R+ZZ8lza379M7BJ00JYPAcncjtoa2K2Z75bDoxlegGvZXp
j4D0WhqksaaOr/+YCSPMcs4HAapKE/Dj09p1kjzh6Xu/iVp51NiQAARS5j3tu/5k
WJQ7ig207TdtjmslZIx0UU8pieuenRdyUN0PvjOkaoZIpao1+UlIe47DP+42D3QX
1J2wu48QDvt7hUUA3y7yLUyNMarqYBbbXQ/MpH8tcMT76TTN1uilP6W/3j1b6Fr7
NGtbUrS1EzOOHnCpgpnD8qGcisDKrHcVkNkh1w+8LW9ef7RGpFPpn022hUQG0WLD
5zrh19SAsKetWAZY6RlvyCHPVReajIAovwIDAQAB
-----END RSA PUBLIC KEY-----
dir-key-crosscert
-----BEGIN ID SIGNATURE-----
ca3I8mHu2zEOCnzySzdk+rbZLpohw5aa3NmTGFzRUXqOeHClOYHRc+glAyCrtUA3
lEa5fiFaZTImKu0J/uroyR4uF5JpzLOfojTQi9P5hMCBSdd7uGzoKC+/dKb2OngZ
VkBjptMf1S9dy2lUdDksHnnyg8UrV7EolIHUFNdEBI1LeONkdesZ5oQMg3HRlVpU
v+m/7y/MB+o3KAXkQyAxTcV4bKdsHm3Pf0CSfDgOPImwFS4lwyEW0STlOmVHojZR
5wm+5dwt9vbD7K6ectbnWtWjiSrvtGjqixO652lxz1qrsid99S5wEzJNhfif8lYe
VsB9h7YagNHJHLiGeBT1kg==
-----END ID SIGNATURE-----
dir-key-certification
-----BEGIN SIGNATURE-----
ZkHpe8JVvGsiAsH8gw1eZVIIE8WuM+3Sdd37U2tOyDi7FVwJV+oJ+aKwcCTqTLaj
jglQJbg2JdV4ofy49ZaQa6FBGLrzxAS6Gx0jg+28Kzbr0xu9hSX81oPSXKn9KDLr
BvmuSqKBB+5B9nIEBjm6FwPc8MjqlvNesuJ3IpW9+e85eB7qsH4ozjHF0GIgpXu/
qXrk2TEK1nMc9EN+VCYuy3gAm46GHQEYR1U7gIofCYf7LQpDrfj1sAGquCQ3vYqT
Ex3GtqcDV22IME67Cou5rv9OmMnmy1dbeHO4g843RX0LXtEDdGYGSLHzl8EAscrg
i55XFlS6z5OwCbdDvFTkHUWRlaiDtoymaxAEW6GUmNjHhgWY9wJwgroVNRsP8Ihi
aex9HIND1MY4ERS41Csba/0grf+FahMVI12gwpmrnKfF95QHWw2MEvT1pzZGtMnq
XD8mcVNYJtcTvYM/cUa0I4BFD1AyeIP54hEXwIsqHm8KBJpjX/ZpPzksnc4NY8i0
-----END SIGNATURE-----
dir-key-certificate-version 3
fingerprint 23D15D965BC35114467363C165C4F724B64B4F66
dir-key-published 2021-09-18 16:07:20
dir-key-expires 2022-09-18 16:07:20
dir-identity-key
-----BEGIN RSA PUBLIC KEY-----
MIIBigKCAYEAlv6XS+VppPaQzOgor0YFlcXLWeXiMn5N3VBneXuw8maLOu9oPJ9z
2/oMQN8a+VOWTf+/jebGzOBK6MamXpgsIZPQWiT18gZMsYdR8mcqBYqVP3khwUWh
9QYkV+m+Auxa0TLzTrsi6dLDJ384XdpDweU+YJghMJNZ1NqiT8ogj84hxs5Tf+Qf
bn7EBIcU7SAKr5Lw25KrMb5e3AZSC5MilBS/KLgVTq/GiWb7pKd5pxGwlGolNX8a
PccZ2ZT2DrSQsct4wVxhSbUqANI3PfMpXvmUDxWWBgbQwLF02/4gi+13snlHtqwl
y1WjE55HVfx1CTX13SStwmF/N3SFtFf1qil3j5qrHdHtKlAYOaTfqab1eLVH1l83
LI5QWD7ri9GpPqIjlh6PuaHjaO2FW20SouZtS9jJKwi1l1G3ef1tSlha1cxkRxIp
U/ngvQBsoa9X26VfQA4MieZgVVdMVwjCNh2YC9aEXc/KxfcBueZkM1194qP88cVu
dOFYaftOkuGPAgMBAAE=
-----END RSA PUBLIC KEY-----
dir-signing-key
-----BEGIN RSA PUBLIC KEY-----
MIIBCgKCAQEA3OigVlkOvlx54wcY0RRuExNw2sPYHr8m8QP+SnzARDbrubvsKT0S
z/+aVWccgacBtihOpF9juQLHb+nqhea9s6QS8XAQ98bqm8foKToWuxnIRS9c+8e1
qcENTfh6U2Dr8ckwVcKAPtnLnPtbxuFF5UiqXAPA89ZmtqUPv+DfmDr5fdeb0bCu
Lo6TCFLQOcn2Qz1WsSv/2JRkSBy8pgaC01zErgv9oRVIzFfLn8YpfnWZkFiRGwX6
/GBLsS19SLLX0xLkPwQ/CwN6OkipOtYi6UNq0osHw9xfm5sCzcnltJShA1YtIp72
e1HkTx03a43uAKlJBo1rMD29stVJu9ABEwIDAQAB
-----END RSA PUBLIC KEY-----
dir-key-crosscert
-----BEGIN ID SIGNATURE-----
r2YFJIj1zR9iMPWRJYMDEKuLlV0Gbis9232Gog5sS06LpUFPYL6clLDf7eWAimPs
u8rUUP4JEjmAY7bWHyqbG3D5iljNin50W7kvY8ip+Vqf64vjNUXFDKUbi0iGkfVC
nfX67FL0JF74hqtCtMlS5QPvD4oLsC40DdmPD4kCulaSrMlmsFRGFdl60HeSLbeP
oopRA4yYB4ZGJxJUaSuMm6RrcK08G2l7vLfHpxhcJWQVb2fKB7Ds+AogZYnc6ZYF
hpGAP9y+Yn8TUUqPMhhZwLw/8eUAhtv8G2aBBxHyctlGvg1YFiquPP6VEn88h9GZ
X4d/mLOAQeYWEalQC812iw==
-----END ID SIGNATURE-----
dir-key-certification
-----BEGIN SIGNATURE-----
OlLQuEDdagECnVy1Nke/C7dpS8+8XvgLK/hGgV/OpCWr+Gq8bL6/NpK9GP7EbsUI
NxsguJ2r1wkEGTixz88gdKWDCC3evGW1pqnsjkCk69gHGtCxmrFeiCxCSomaOjzw
HCnp3TcT1DA4EstoXUqPysVkBYkx8OBO6rGhvE+G1S4bVG/EJkPCMhjPlxX41ON6
NWvtf32dviA5W1BrYKWJy/v0pCsApgjZa6qpaLdgqQabG5YEJA0rONS1hL+AcJks
CnvkSS7iU/4jrDPfgOLoVxEkH68swLol2Qf0RFHg12EL5kf0xbPnfE84aQyt99an
6VAMVIy/tCxR2efZ0+uQmQk7S35uQH/PxZ3/mq6cDMw7+WZdYbrkyfmFK/A+yL2P
op71Ik0Xf0Qwd0qMhTZMVPZpZDQmxvr0j0r3xHia0Ez+PhovnnxqI9/cThRQ/ceN
jE2cA46H4ZfYn5OdCP+mP9L+MsqJYoHj/SigcIrXUX58R1D0JWVX2KPU+tVyQ03B
-----END SIGNATURE-----

File diff suppressed because one or more lines are too long

View File

@ -1,39 +0,0 @@
# Tor state file last generated on 2022-02-04 13:57:02 local time
# Other times below are in UTC
# You *do not* need to edit this file.
CircuitBuildTimeBin 875 1
CircuitBuildTimeBin 1025 1
CircuitBuildTimeBin 1125 1
CircuitBuildTimeBin 1175 1
CircuitBuildTimeBin 1275 1
CircuitBuildTimeBin 1475 1
CircuitBuildTimeBin 1875 1
CircuitBuildTimeBin 1925 1
CircuitBuildTimeBin 2025 1
CircuitBuildTimeBin 2375 1
Dormant 0
Guard in=default rsa_id=D70A5E01EC14D078164D5E587608949F85FD771B nickname=leaders2 sampled_on=2022-01-30T18:34:14 sampled_idx=0 sampled_by=0.4.5.9 listed=1 confirmed_on=2022-02-02T06:04:33 confirmed_idx=1 pb_circ_attempts=13.000000 pb_circ_successes=10.000000 pb_successful_circuits_closed=10.000000 pb_timeouts=1.000000
Guard in=default rsa_id=598C8E4E92D8D7750991D23F6776EE92EC1A00C1 nickname=Unnamed sampled_on=2022-02-01T01:24:07 sampled_idx=1 sampled_by=0.4.5.9 listed=1 confirmed_on=2022-01-29T15:09:32 confirmed_idx=2
Guard in=default rsa_id=013ABAED8F4CDB677BE0B5212E4B2583B86035EE nickname=b0rken sampled_on=2022-01-27T22:32:07 sampled_idx=2 sampled_by=0.4.5.9 listed=1 confirmed_on=2022-02-03T10:23:27 confirmed_idx=0
Guard in=default rsa_id=66DFC51E724E38DDCB3AB67DDF4C0BB0F1F49C0B nickname=Seccom04 sampled_on=2022-01-26T06:52:32 sampled_idx=3 sampled_by=0.4.5.9 listed=1
Guard in=default rsa_id=9400AF52EC2929DA41E6DDD3B684F23643BC316C nickname=BM03 sampled_on=2022-01-30T16:35:42 sampled_idx=4 sampled_by=0.4.5.9 listed=1
Guard in=default rsa_id=DD0C8EEC5CA402A9FA4478F10C31A440F71F6885 nickname=chaosDelroth sampled_on=2022-01-31T18:30:35 sampled_idx=5 sampled_by=0.4.5.9 listed=1
Guard in=default rsa_id=6055FE90C18DD4B2593A9D0E02DDC4D68E9BA62E nickname=elects2 sampled_on=2022-01-29T10:24:36 sampled_idx=6 sampled_by=0.4.5.9 listed=1
Guard in=default rsa_id=79233E8202A0EE755B39BC24BE80939C023B3FCD nickname=m83fr2 sampled_on=2022-02-01T17:58:48 sampled_idx=7 sampled_by=0.4.5.9 listed=1
Guard in=default rsa_id=C4BDBFD1049EE1D4F6977C42485F94CD5F97BA92 nickname=lenin sampled_on=2022-01-29T15:57:51 sampled_idx=8 sampled_by=0.4.5.9 listed=1
Guard in=default rsa_id=876C5AC1D2811E650AD4C78B77841C1ACB3B0088 nickname=whoUSicebeer05b sampled_on=2022-01-29T15:26:49 sampled_idx=9 sampled_by=0.4.5.9 listed=1
Guard in=default rsa_id=FF8B7CAD5F508972509D79F933FB24D2F524AB75 nickname=einNettesRelay sampled_on=2022-02-02T09:24:01 sampled_idx=10 sampled_by=0.4.5.9 listed=1
Guard in=default rsa_id=BFB14B9ADF1F19E59258CAE7FCDBAAC9937B7B10 nickname=Yggdrasil sampled_on=2022-02-02T13:42:48 sampled_idx=11 sampled_by=0.4.5.9 listed=1
Guard in=default rsa_id=ACBD72F9395DE8DE293D37CCF7733F1BE23EDA53 nickname=hopUSicebeer7b sampled_on=2022-02-02T18:42:20 sampled_idx=12 sampled_by=0.4.5.9 listed=1
Guard in=default rsa_id=F79370BA46ADC03CC10866924EE4A3C470BAFE93 nickname=skankhunt42de4 sampled_on=2022-01-25T11:00:17 sampled_idx=13 sampled_by=0.4.5.9 listed=1
Guard in=default rsa_id=C1939D36649DE98A202429631D8EFC70128D5F5F nickname=rinderwahnRelay10L sampled_on=2022-01-26T01:10:26 sampled_idx=14 sampled_by=0.4.5.9 listed=1
Guard in=default rsa_id=3BC258C20BBB8094C12DA7CB982B36D1502FAC3C nickname=Assange041us sampled_on=2022-01-31T23:57:37 sampled_idx=15 sampled_by=0.4.5.9 listed=1
Guard in=default rsa_id=B2242163F681F77F93190663AC5F696ACF76C4FD nickname=torexit42 sampled_on=2022-02-03T12:50:47 sampled_idx=16 sampled_by=0.4.5.9 listed=1
Guard in=default rsa_id=1F953ACBFB9F44CE38543B7E9C0E0BE1BDC7E941 nickname=bauruine sampled_on=2022-01-24T00:30:24 sampled_idx=17 sampled_by=0.4.5.9 listed=1
Guard in=default rsa_id=F00C8B7589FEE52BE84387CDB422C1F1386979C0 nickname=JennyRelay sampled_on=2022-01-30T03:59:39 sampled_idx=18 sampled_by=0.4.5.9 listed=1
Guard in=default rsa_id=CD39C258265B25EAA4ABA4FDCB2DF98104CAA362 nickname=normaray sampled_on=2022-01-30T09:12:11 sampled_idx=19 sampled_by=0.4.5.9 listed=1
LastWritten 2022-02-04 21:57:02
MinutesSinceUserActivity 3
TorVersion Tor 0.4.5.9 (git-d0ed04d50e80fe1c)
TotalBuildTimes 10

View File

@ -1,3 +0,0 @@
SocksPort 9735 OnionTrafficOnly
ControlPort 9736
HashedControlPassword 16:178423CBFA6B25BD608424EE12A1FACF5D36FF43215636A5917F8D64DF

View File

@ -1,411 +0,0 @@
dir-key-certificate-version 3
fingerprint 14C131DFC5C6F93646BE72FA1401C02A8DF2E8B4
dir-key-published 2021-09-01 00:00:00
dir-key-expires 2022-03-01 00:00:00
dir-identity-key
-----BEGIN RSA PUBLIC KEY-----
MIIBigKCAYEA7cZXvDRxfjDYtr9/9UsQ852+6cmHMr8VVh8GkLwbq3RzqjkULwQ2
R9mFvG4FnqMcMKXi62rYYA3fZL1afhT804cpvyp/D3dPM8QxW88fafFAgIFP4LiD
0JYjnF8cva5qZ0nzlWnMXLb32IXSvsGSE2FRyAV0YN9a6k967LSgCfUnZ+IKMezW
1vhL9YK4QIfsDowgtVsavg63GzGmA7JvZmn77+/J5wKz11vGr7Wttf8XABbH2taX
O9j/KGBOX2OKhoF3mXfZSmUO2dV9NMwtkJ7zD///Ny6sfApWV6kVP4O9TdG3bAsl
+fHCoCKgF/jAAWzh6VckQTOPzQZaH5aMWfXrDlzFWg17MjonI+bBTD2Ex2pHczzJ
bN7coDMRH2SuOXv8wFf27KdUxZ/GcrXSRGzlRLygxqlripUanjVGN2JvrVQVr0kz
pjNjiZl2z8ZyZ5d4zQuBi074JPGgx62xAstP37v1mPw14sIWfLgY16ewYuS5bCxV
lyS28jsPht9VAgMBAAE=
-----END RSA PUBLIC KEY-----
dir-signing-key
-----BEGIN RSA PUBLIC KEY-----
MIIBigKCAYEA+jzmadukj4Q0qLgJ0at+nDXGruO5JD3HsehobiwO8HrdaaImY+rY
CZzxRWM4xryQ2AFuAGbSxGoNQT3dTLvjKNVdGY6jPzlS7vxKbPeNZtc/YMvfZ+Fx
uEjvaZ6nDbviVtQhtE0J2EZ32n90Ob8YC8l/7zh0hp+mZO6Wf2DGXWjNvG7d8Ucc
p5A1ZVIpJ/VQzdlPaocO+6AvxvSBpaIUF0yGpTwofTOjtUmZyuWbhRndsQj1qMcj
e8wzOIgr3HZyhO9wztQGkZ8bzHq65oZe0IIOXZu0icZamFGQ5I6y5duCqxDDe4C/
v1/6bD1I+/ujLXRMmkcbJ3NZE+KrZg7KIE5ScGbkJIX7vIicqtsf+7VipdOh3/wp
qaDxX9Sp2cbVUU0M/aJ14nDSeFlx0XQAgWkPjG2lYtTNEC2zuudBCuCD8es8EhAW
FrU94cYg9lVId0NDMOpWPMH2QJFS4tk3Hc66si3+gkCOt2GOaSQeD+gGWkdwDzn3
S8iAur2GohFFAgMBAAE=
-----END RSA PUBLIC KEY-----
dir-key-crosscert
-----BEGIN ID SIGNATURE-----
B4914rKqUc51Q1nq8CrA/e7EaMQ0ug08qlBqWyzZSDiBKVCoQj446ZJMU9VKlzJF
XtuURlJ7zswXMze7HceakrkxZAc7GiAGKO5hgbbI8XGLvXn16Lsr/MP1cmbKoI04
g5tG9Kx6yOB4r/l2TQY9Tw22YcdJ24W2/mw6TmDv0b+IorsIBnxIDv7Q7j25IkNE
hW3F9R+Ntja1RWPqKnptp8nxBt5/2jVr637BFczDv9K509QX+HHKyICA1hnvDDU7
N5Y1/mVu4JwQrBAFL857XbobP4QaLsZ34Q8LRE4dveuyw+vjVa1YimZ6h/RvrYyP
8DUi4XnzFyztecivXbdSTpMTSMfC4NQXFeT+XStRdWlapZyCFhp74w3wv7HCB0z6
7QT1HWMKPRvj1DsHhvPviyLVCL2tl2x+G7aaledOPf6BbhO7VolNeHiubyYCQl2H
t/Vy72DZbQeuLhf5GyqVyUm9uugzvVrryUiNUApOW8Xta2dAEBqinDrrY6iMYxh/
-----END ID SIGNATURE-----
dir-key-certification
-----BEGIN SIGNATURE-----
UrJN3Ey1hSHTaMUAhINCVFhojt48ppxky0bvwztQ9p/Vy7dfRx0APNbL70/XZOrR
sRj8zxtx2+tc5Lnkfaah63bmVsUNTgD6LudDaffXiV8XhIeVbzS0r/YJ0U1OsbK+
ApDItNDUz+VIJL5JUDjq/6fojFlWPYNIwyk5G8zOM70Atjk6UDyCIihV2u5pofW3
znFaFp/XhC14S8lMPZYKbnyl2iQ7UsqLpTxg3EwivIlSVFs5YQe0yXgJFX0oNd9Z
gAf3JIonA2g8Oo9EkgRfYCI33AwyVoU3QN1/AmLH2uPWTKhMu7k+OHktuIBfyFTR
9jbUq+YTU1ni6kEsJVBP/0I4n9Xb4VYIoqOq0BrcEp3lQ8BCEWjIGwLh1HYc9/DY
meE+cwLp0RNU8cuxyrGnkLA350bsNxrDkiaHAkj5ZA8W9VTGYsBxVhbLdQzN3GOm
63GJBgjdaOsD6WXs/737nD2sLu6dnA/Jbz84ouZSafQO/FNQZnndfj4osjabmq8O
-----END SIGNATURE-----
dir-key-certificate-version 3
fingerprint D586D18309DED4CD6D57C18FDB97EFA96D330566
dir-key-published 2021-09-06 18:42:41
dir-key-expires 2022-09-06 18:42:41
dir-identity-key
-----BEGIN RSA PUBLIC KEY-----
MIIBigKCAYEAvi5+A+XPw4jxMYhmEI4+MpnaX3dUEbsMGHA+xAMnmVhuxbm3Dn5c
TyhQNY2LOlsieE84UYG+J4dABfaFH4w0l6zUJkuytX4+6WRQontw9puR/IcXkRwM
8Tv/tY675OYRCm9DgDAWfqZM0IgTzSrYRDl8eFPSFCOP0NhMrQZeUrdKgwAXVZWP
xt9nTCwT4K9BMp47LEmZKdEokeVsr0l29Z9v5+r24k9x8EQjDexsoHwlVrxWfarG
1klWssfSFpkMN+FkTQnBC6ByiBh5ZKM5AC/HkVFvuHjehUpfrtNk6XNFcKbDvEIg
qPdg1QWuuSWpZVA+/EwSBtwMNcq9pv60L8Cm9WCJoSC691WByiGwFCy1/XcBI4J/
BkoMEvP3kAxzm92jqGbpFSJawFRPZKy89FDKpha/So3CERQPV0ar+DTpVqDlryWV
N4x1IzpPeSHFj7T74q8qdrxx0wcAjWJ9WYoGQif6FK3hHcmbSGSgyvAFeoYxyUCL
JHkjBCD4WTWVAgMBAAE=
-----END RSA PUBLIC KEY-----
dir-signing-key
-----BEGIN RSA PUBLIC KEY-----
MIIBCgKCAQEA1Hguh3PNTfMd7kLD8NupSdye1KB6hhQitx8DipvT71ZaCZYI8fZ3
z5xa6fCcJXv/xoz1tzKeJ1n4/AzAbc7ltCyyWkj9CbiB99cEe+sVE9R899eFvPP9
DUmsmgy0Bn2MrdfD/N5VeJ219TTtqI75BJMd9n1+r5zUzhji2ihcLWYgi0GVZoec
6B+xfPtYbifCdrPRBwrMAW4EhtMKeJfzsYFO220f7x2OmmZB9muesi5O8/0zjwu1
xOKldXCFbccTfFN88nYmaO8j0SpG9nOveFXavPs0LyVzhuMkbLXSWAN+M/S6GC4L
1kbkjQ6YhuYSnKxGFo/wdax41jrSFCf3qQIDAQAB
-----END RSA PUBLIC KEY-----
dir-key-crosscert
-----BEGIN ID SIGNATURE-----
r2a4uvuN2LUgSuHoWYckJusjzeaEfTTN+DHJdQjJrMueZtxhhz+C+soYoSAvBsHI
huc2y0wLbeNMpLXeyGoYh0M4zm6RyjMksHQZbgPjkibflbUI3csJcvaBMQonfo9B
knoqOzeQd8NioOlnbYQ+k78swGtg2ndHpK4G4NMBK6ZQrbhrIk0nVhOhaIHpGdiN
icr+czGq6SzH4Snp26dJ+J+9SAdTOzgat/C2Othdu122JR2/7GzCnz8dqS3LabN9
iWJWMLxayFKi+Z5f1WjCNOVh5lSjpeLjUNSrA1hXXKSRD0eFOQFRvgvO60gyvooH
C8amqpSD8HqsCK6MvN7V9g==
-----END ID SIGNATURE-----
dir-key-certification
-----BEGIN SIGNATURE-----
uuQhm7YYbqR4/fGSDWqzwiw40nr7y3laCmfiTDHOA5N6lVOw/tM4bdMbGH58wkkK
XBIEz4zQnIT4Sgaumc9PZK3/a8wkx3HgvSNZAEvv5GK2iD8QQNaR0mv7/gbCOLeD
4MAsWH7ehc2u0AcebYehYWE7/fknYRfIGLRzeAeR479LgtFIaaZ54lGeEWKA7qBc
B3njJcNDlekChydxw2JRMw2GmK7Gn/cVRLjFiG32aaTPA37Ietw6Z8wXEjTy4087
KTzTe6puX0g9kCWMaGIBzod+ucNOG9WhgVfy6M+OMddI4KbgizUM7a5c3DZwnQHk
nn5yqib/W7NmHZOL1k2qYlKQlbr412bsDgBDoFYSYPIkbO4x7LHJnGGiwxYx4vmx
caxDySQtqCcR9ygMrZVrL9W/Z+w2N/KCXnL+SgTmN0x/Saor1ZTkONj5Tfn4dg/W
xDxvLO02DpVTfgidUsBeHSnMQn7w0iG0abhWFmYNFDjxZFEWy30mRCEYADC/1NCI
-----END SIGNATURE-----
dir-key-certificate-version 3
fingerprint 49015F787433103580E3B66A1707A00E60F2D15B
dir-key-published 2021-11-28 16:32:54
dir-key-expires 2022-02-28 16:32:54
dir-identity-key
-----BEGIN RSA PUBLIC KEY-----
MIIBigKCAYEAxVbS0noZKz1Ei6858RGyyuQgwQUKG4Urrp2BiAzkYxwX+6fURlut
AjeLb4XysqCdNdUipuLRQ2QIy1C220QiCHV6jZAsM4tmEq6TpK6q1lxi5YPKqbGS
CfUQFT1nO4s4DCYSLCwiRNy6bMe8tNHc0MpXP3loCbPkYCoXrEL6vYIROw3oeGWE
KbFPQrzYJAPHgUubBibsY5lkUY9N/5QZw2y1bn+dq9mFOoCIHLd6DkQmySmftnMe
QrpYA2WvE4M5yN2HB8QGT7TdzXPPL6889rFw/mjqYExQPX7cqmILkchsB7I5whjA
u0oodF8Y9ooK9QT0GeK4h3xQhzNG17anuUxbZ7sxzmBwBNmkNyLWEeIntazyjRFr
P2mDY/9YK2JOQKkh3tKl1whcCG9ZtAhKmm/ijG7OrhqtusdGKBXIgALf4f111AK1
gNcacDx2fJzRHuNK8zkIORAzStxKdLbAbBNeLENk1zBjSkrxCOJH4mBpr8TXULq1
ThLI/8OzZq4LAgMBAAE=
-----END RSA PUBLIC KEY-----
dir-signing-key
-----BEGIN RSA PUBLIC KEY-----
MIIBCgKCAQEAo32l4qg46cqP/sAL+oLmQM0mDiQUy6EtNa73vyy0BJEGWJeImUO4
gHNg9pyMFqyF+rP824gAzwX9Un9HaKgFpIrsKcZzg+Yl2vlrBQpJ0NPIkN9oqj27
W/A7RftMhH2itv0v87QudD7FqJpxdYNf3wpr9GvsAiHZMBfC88WhCnmJoDBwyucY
HFH7gzjPeDx37KD57o2M1KC/SRVtQtrccA/WzcxNypgAYkJu4yE2gaDr2WFn3hFv
kscW0jn6+157UuKH0rCNeRFDx8SsSS0nr6Zk/n+dlXzHGDO3vQIKCoRoH9yL4T//
hkMYE/4qc9R49VyXxK+n/qU6HQYpQMi+VwIDAQAB
-----END RSA PUBLIC KEY-----
dir-key-crosscert
-----BEGIN ID SIGNATURE-----
KKrOMRAg1bx+XFLRjhQB5OFjtupkqkFnGjS3LZQ5FHNwJ7cKG1X7K0aJNAumRPMD
w9xraIMuuok46wj35P9Tcy68qi3EqIJP5378ZtdK3Ncy9KkSWJSA9MLPmB3fClL/
/5TwboePXRdlt++Bcw9OC83HDuFVBqZArFIvopKf/AJOyViRVHlBmgNKFpm9RJTo
XsD415rJAi79tAfXzKuagke6DTVqobMhxrUmp3RjbEEEC6icQ3YX9X6NOPQ4Gwl2
bpWOVi3/9EGRge0X8IYsqB6/pnEXM2FSOTMdwo4YQzIgW/HLE9hXjFCx7QcPkcos
AZHvl12tKzZF3F9MKPcNyQ==
-----END ID SIGNATURE-----
dir-key-certification
-----BEGIN SIGNATURE-----
wb40bfNLWyU9pWW+2BAHbrmZZfbs9UEIS/6G66VE6823/r6M90RCmFx1JlwqgmaV
/WMbBE9DxFKILyhuQi6whIKoYndg72VDeZL5BzWctalw24VpJePVjeGLcTdJHBVh
a6UiQFaQdH+bTX6qNIFv9nNwq7ZzJRBvaYF9bK8kaTrZilFKoRVBxXssBUFjEz6t
f+sei5WIiBnzaQOUxdMjvdDAHci4DXwGw1U2M7jcYARo4FfvWkAxzWLxocWmauPM
8tDn0fSgMnLlSOR2crnriQMFhYD+9xyxfOq1IDH2IWCKlejz7j3DHSqBYiUSO9oD
uX6htwbMWwZQeqt+LttE/zZX1Tcv6PJqemT8uabH0s94W2A3sJpstWJ+0capb+Mj
bvTXj7t2ilqa5RX35KKhaQ6wlh4OXZb2ydeJZc7wtyG8eN53aVqJNJQ+WZn4IiTq
fefr2ojy2VDJLDHJVNpKQQzmjXtSs+69wCvrqdHGjGAQl5L31LjZgaNLNj14RI+H
-----END SIGNATURE-----
dir-key-certificate-version 3
fingerprint 27102BC123E7AF1D4741AE047E160C91ADC76B21
dir-key-published 2021-08-21 23:12:45
dir-key-expires 2022-08-21 23:12:45
dir-identity-key
-----BEGIN RSA PUBLIC KEY-----
MIIBigKCAYEAuxgnMVH4vwBjMeGvrEODOYcjbCS4N+Wt0SZ6XA5I08HyMf5AbaaF
MDscJBRIUOp7DyLmUwK+jp+QI8pUjjKsB8S0ctb/J3Im2T6CXnP2KgEfVmpNVQmV
XdMm8cRZl1uIZDDBAXizSQ51f9A17TJh7pF/5khYp/SAzl6aO5ETn7ry0ITiJnNa
6cY+400F7ZBA8NuXnCHVGfmpFFsiJKFrS1Kve629eeaNEd3mynRviBXJy5a4NEGf
y42Ev8on6SxEnF9OG0NMJ081/+mP+j8Dsl3+Uehzr9B42MQQfDo4RdYGrt9XolBm
L4eay1ieZEsFeDy0TMfiGGbr90wo1fgGLHIRSfTNLhhPJ/f9cTZPe98rhSgGWiAd
RvK5SljoIOR4qdS9/aiZkj1P+etvh1rIQUcG4/xCOBnouEBK+DDHZFqyMtpMPtV0
Bxi20DVaMJcyhdfjVqcRSyuR8tlOnTid6QwBj6kgIIfMaC+4Ht6yO/SYquCWlaZl
y7Pu7li8WyW9AgMBAAE=
-----END RSA PUBLIC KEY-----
dir-signing-key
-----BEGIN RSA PUBLIC KEY-----
MIIBCgKCAQEAu1QJ+qlCbtrYsg9QENtOpvMrEDc+WgH1ZFxEqk0v/ad2ACQYe4dT
g1gJ6VZyGths3p8+WQXIA9YbcEr2oajXlLmLT2QAlqlsXMPKwwIpeG4rvR43Wwq5
mQ7aX+/VjZ9YZNoZVEAy1O7ti7GIXJzJYDOdgBjLifSjpjcEmSaf+v4E357azs9R
ndLHRRwbBLdUl7G3aMkL4ejrv6AAXexPxAL90xsb/MAhVEOQrJNcVMTgII0fSf56
P1J17SQwthNZ4rTMo2O9TvWUGNf1sMb9kdm+A2Nwo2CKmUR0uo5wHN4YHSBYFDcb
hxRtZlhSFfBJvJgrX8/+CnJrBFC6S/7vJwIDAQAB
-----END RSA PUBLIC KEY-----
dir-key-crosscert
-----BEGIN ID SIGNATURE-----
VzdxGiA6egLcZjm3hHrTW+N+7sPwaEcdYR5/GW757MO79O8QwjOLJSa5dOF5yDWa
3Ie+QDB2Q++a3+w776zqpFsaGCuEHBCfU9pxatKdoTsExZdQnWHJg4u9YD1JcYvL
dZq9uCCWaKa91OjA6/U9zp/LY3tOPUWCyO4MHehHYggzapbcF5uaMG0AT0lZzaXJ
vh180N5YGMfm0eYXJqkJyX3WCZhGroh7o3DyaqtBSJ1cY4NzTNgPoCAi3J/XEoCI
3JzxfH97uyqQngR1yGb5KggdM2ejci3Ld9q99hjXlzYRtsobUQBTlZca2vUk5ALh
vFWU7GzcNIdDjKBUd+IhTQ==
-----END ID SIGNATURE-----
dir-key-certification
-----BEGIN SIGNATURE-----
WldVJc0L3fByDY9D+Yha2/8Bw5nqRpHu8RL8lU8zXb0rhfiA6DN2aefSCG9WEay1
sTVs4zhS8N0+278oP51Lg7S+V6SmXxKZbF3I2zNaFMIPVspRA3OF0R9vCP1YMxeo
D4EDQXiRxNNeM9hAjmmLiE0j7ZMetZ88ewwsOOXAvPHmCth09nWdCYKwibwUW/U3
w1HXCHK4BdZ7XXkMJNry7kZP/H1/5oYyuKshue4+f8tgRa0xg0wbHDrdbrR1qBBu
Xg9Q11hV29RIdD0ZgugUdyGKlpRa6Mb3GD5DzN845sFhCjsPrYyZv7Xo/S+uTtN4
t59BtF1TjnsAhUk7shk2W3zzaauzUarkDA1v+mb9NZ3CFsNgfxt6d1yDDyuxJgaC
VkIfO9nX9dCORSC9Ow+XOq+D/o4FfSe4q0VvrJJILAcw2Nu1Zg4ZhHBeugP9f4I9
p/+ZMrEr+YAKkjPw+uIEdR0l/YZEhcrjymX4FY829LNll2AceqMCKoapFWuEzzDP
-----END SIGNATURE-----
dir-key-certificate-version 3
fingerprint ED03BB616EB2F60BEC80151114BB25CEF515B226
dir-key-published 2021-03-29 03:27:58
dir-key-expires 2022-03-29 03:27:58
dir-identity-key
-----BEGIN RSA PUBLIC KEY-----
MIIBigKCAYEA1d6uTRiqdMp4BHBYIHKR6NB599Z1Bqw4TbOVkM2N1aSA4V/L/hKI
nl6m/2LL/UAS+E3NCFX0dhw2+D7r7BTJyfGwz0H2MR6Py5/rCMAnPl20wCjXk2qY
ACQa0rJvIqXobwGnDlvxn4ezsj0IEY/FEb61zHnnPHf6d3uyFR1QT06qEOQyYzML
76f/Lud8MUt+8KzsdnadAPL8okNvcS/nqa2bWbbGhC8S8rtDpPg5BhX2ikXa88RM
QdrrackdppB2ttHlq9+iH3c8Wyp7bvdH8uhv410W7RnIE4P+KIxt3L0gqkxCjjyh
mn9ONcdgNOKe31q2cdW5LOPSIK+I5/VTjYjICza7Euyg03drpoBMGLuuJZY6FXEV
auIBncWe+So8FMxqU/fwo5xm6x085U1MwXUmi4XDYpr/kau6ytPnzzw9J++4W9iC
em5Jp0vaxrDnPdphqT0FWsBAwsZFL7nZRnmUlTgGsXUa0oSM9/MErDwzELh/NwG4
DNyyzRG8iP61AgMBAAE=
-----END RSA PUBLIC KEY-----
dir-signing-key
-----BEGIN RSA PUBLIC KEY-----
MIIBCgKCAQEAsw2ZJlGsmfDmDwoKbzjOno759Xwqn6JX+tFasI8eRjOFnOyjYzd1
XjG6Gj2hVpF/ze2NiTuUyRu3Ybp8G9/gs8VGPljxSHkEugGjQdYFoST02ma0vUHA
8YqpBYOiLvsXnqfEkl3Yj6HVxmVJA9j8BxODODlBtxRMJWFrpp/b+qCo/YyGmCh3
n0qd3QNqFPLIzwvjWVhaFfga8dXBT73wX9uYT7nT/e3pV7ZvTw0caqi7svNzj0I8
/OxOEjoBQEQMQVPT2bNZKBe9X8QKDSgdealZQwBT9wdZ4KndtCj6Y8MVjj15/YtH
fWfNyUHgVqOmfDK7m3pHXR9fGgsLQexIfQIDAQAB
-----END RSA PUBLIC KEY-----
dir-key-crosscert
-----BEGIN ID SIGNATURE-----
GyN9MMaPABXJ16WAFIhdzOhNT59BI0RAfV9ZpUJgzkAAmpoj+WwUtWfcrW7a08CT
9g60QwJonP/Nh+8iLvQYH5ZyEqsEj0HEUD/yI2kvN41Y5QBD1Sku8Cu4E2UaICzL
V63oitjQzppKlVXHyP/SXsI2bUjoHLtT2pBvxRJ84DlZBEQ/ZqS38NN/+Z6DtMR/
kn0l7W5yA3bYWzeKy1TeKLWo7p0hHzv/Hswe/eha+27LuwZZwwfSQrRy1fi66Fmj
0xBP+iXXtmNleFegFuhEBPXa+9udrT9rodSdazkGPzjyF6HWRMP5DtmTI6ovJDVX
60UQ0hNb6KAP+FZKPz9/dA==
-----END ID SIGNATURE-----
dir-key-certification
-----BEGIN SIGNATURE-----
zAgmCR7tf0btsogvBmdxJ7+RWjPBzmDSA7f+zlK0jOc3lDDD4pxuQO6iNcoEDYMC
5hkzVoGBMYsxLfLZXFGE518dn79iKr6SQoq87AhnAsIiAfXMk2AWLkWI7MTzZo2U
dcgo+7vzxMObk86vzFxYWrSqp6CSZ7RwBRnH3vCGLfOMZ1lXMug+MQAQYAyl6KIR
3d/uEu3+sPFJcHQFP3C/7bHDG5j/76kwoFzjSjg974rSjr1j1FbrpNn35mLc+2X/
11n7cOADHWaSN3MlLWGsYxuuX2l1w/XZNfFEezDwK3BOotbj5spU2nQ8xbDFPB5+
ixDfc00TC3YbveSz+S8W9czfysJt3KaWmQczDtSIXag1qrL52CBGUVGP6+R7xnpR
/4QD6yCKmDcNk2D1YnindwYC48ydDt/u9A/97cEBpUbul3feW7eKLk79MIklWlWo
3c3aQVH6Ewrb76oXYYwzNbqJOp2ceREu72/Fk/keprVcupVDtVoqHgDDpfOUYTJd
-----END SIGNATURE-----
dir-key-certificate-version 3
fingerprint 23D15D965BC35114467363C165C4F724B64B4F66
dir-key-published 2021-09-18 16:07:20
dir-key-expires 2022-09-18 16:07:20
dir-identity-key
-----BEGIN RSA PUBLIC KEY-----
MIIBigKCAYEAlv6XS+VppPaQzOgor0YFlcXLWeXiMn5N3VBneXuw8maLOu9oPJ9z
2/oMQN8a+VOWTf+/jebGzOBK6MamXpgsIZPQWiT18gZMsYdR8mcqBYqVP3khwUWh
9QYkV+m+Auxa0TLzTrsi6dLDJ384XdpDweU+YJghMJNZ1NqiT8ogj84hxs5Tf+Qf
bn7EBIcU7SAKr5Lw25KrMb5e3AZSC5MilBS/KLgVTq/GiWb7pKd5pxGwlGolNX8a
PccZ2ZT2DrSQsct4wVxhSbUqANI3PfMpXvmUDxWWBgbQwLF02/4gi+13snlHtqwl
y1WjE55HVfx1CTX13SStwmF/N3SFtFf1qil3j5qrHdHtKlAYOaTfqab1eLVH1l83
LI5QWD7ri9GpPqIjlh6PuaHjaO2FW20SouZtS9jJKwi1l1G3ef1tSlha1cxkRxIp
U/ngvQBsoa9X26VfQA4MieZgVVdMVwjCNh2YC9aEXc/KxfcBueZkM1194qP88cVu
dOFYaftOkuGPAgMBAAE=
-----END RSA PUBLIC KEY-----
dir-signing-key
-----BEGIN RSA PUBLIC KEY-----
MIIBCgKCAQEA3OigVlkOvlx54wcY0RRuExNw2sPYHr8m8QP+SnzARDbrubvsKT0S
z/+aVWccgacBtihOpF9juQLHb+nqhea9s6QS8XAQ98bqm8foKToWuxnIRS9c+8e1
qcENTfh6U2Dr8ckwVcKAPtnLnPtbxuFF5UiqXAPA89ZmtqUPv+DfmDr5fdeb0bCu
Lo6TCFLQOcn2Qz1WsSv/2JRkSBy8pgaC01zErgv9oRVIzFfLn8YpfnWZkFiRGwX6
/GBLsS19SLLX0xLkPwQ/CwN6OkipOtYi6UNq0osHw9xfm5sCzcnltJShA1YtIp72
e1HkTx03a43uAKlJBo1rMD29stVJu9ABEwIDAQAB
-----END RSA PUBLIC KEY-----
dir-key-crosscert
-----BEGIN ID SIGNATURE-----
r2YFJIj1zR9iMPWRJYMDEKuLlV0Gbis9232Gog5sS06LpUFPYL6clLDf7eWAimPs
u8rUUP4JEjmAY7bWHyqbG3D5iljNin50W7kvY8ip+Vqf64vjNUXFDKUbi0iGkfVC
nfX67FL0JF74hqtCtMlS5QPvD4oLsC40DdmPD4kCulaSrMlmsFRGFdl60HeSLbeP
oopRA4yYB4ZGJxJUaSuMm6RrcK08G2l7vLfHpxhcJWQVb2fKB7Ds+AogZYnc6ZYF
hpGAP9y+Yn8TUUqPMhhZwLw/8eUAhtv8G2aBBxHyctlGvg1YFiquPP6VEn88h9GZ
X4d/mLOAQeYWEalQC812iw==
-----END ID SIGNATURE-----
dir-key-certification
-----BEGIN SIGNATURE-----
OlLQuEDdagECnVy1Nke/C7dpS8+8XvgLK/hGgV/OpCWr+Gq8bL6/NpK9GP7EbsUI
NxsguJ2r1wkEGTixz88gdKWDCC3evGW1pqnsjkCk69gHGtCxmrFeiCxCSomaOjzw
HCnp3TcT1DA4EstoXUqPysVkBYkx8OBO6rGhvE+G1S4bVG/EJkPCMhjPlxX41ON6
NWvtf32dviA5W1BrYKWJy/v0pCsApgjZa6qpaLdgqQabG5YEJA0rONS1hL+AcJks
CnvkSS7iU/4jrDPfgOLoVxEkH68swLol2Qf0RFHg12EL5kf0xbPnfE84aQyt99an
6VAMVIy/tCxR2efZ0+uQmQk7S35uQH/PxZ3/mq6cDMw7+WZdYbrkyfmFK/A+yL2P
op71Ik0Xf0Qwd0qMhTZMVPZpZDQmxvr0j0r3xHia0Ez+PhovnnxqI9/cThRQ/ceN
jE2cA46H4ZfYn5OdCP+mP9L+MsqJYoHj/SigcIrXUX58R1D0JWVX2KPU+tVyQ03B
-----END SIGNATURE-----
dir-key-certificate-version 3
dir-address 154.35.175.225:80
fingerprint EFCBE720AB3A82B99F9E953CD5BF50F7EEFC7B97
dir-key-published 2021-02-08 18:16:07
dir-key-expires 2022-02-08 18:16:07
dir-identity-key
-----BEGIN RSA PUBLIC KEY-----
MIIBigKCAYEAwBmqdD+G0q3smN5OBFHCcK5pQH5G1GIpFJ1JxCVEp92tTK4ZHnot
9RzMfag6zQFqwLaJ+yEb1DOjTdTMfcUTsj5f3GUqPB+U7shSMAvvAAM+Bx/4m1AU
u6sk4XmPB1bCBfcRl4zhnY6XFIbj0ktuBDblcxHz3lDgHFpBoci9sF59mM14MZ09
EdwgeckcU5oeq6ApuSlUVaOT8xsKV/yeK4SKaFfDclwPAJuitQ5CpqctP7ExmlrY
sboTDtz7/Xa6OccaGDEUf7TRlipvUX6rvlmvHm3qjdixVfExpa8E5QG79GZTL82p
1zBd3iqc6QEnRDTiW9cMUeQt4EvrwOUVVYPWo3hp1C/iiNzWraDays2xuhaSB0gj
fPatu2CFW5XB2vd9IvIiWeklSFqnF8DL38jDL7DbFiETJreGsDMR03yHWVd0MbPz
OrvAxG4tJn+JtnwhzlbRjnfk53jOTbiM0vMV8h/ztapCiJeT/6i7nVQ1xL2boeYw
5RDUlwZaQiaXAgMBAAE=
-----END RSA PUBLIC KEY-----
dir-signing-key
-----BEGIN RSA PUBLIC KEY-----
MIIBCgKCAQEApIIcKBWvD0P2YQtsrFKEF1kprJUCEUlWqzV4mVbTcVdzVQpct8t8
NAO8kDbxRSyU2S6gKecusy4H1MJWVAe2qvKIY974espuJwBXWFgT70jSBTFzjMpB
dAaTTY+kNZa66kjBjCVolr8UfFvL7HaL3CCtWD9ds7+ep76co1h3s3sD2BWW/M5m
V6ML8kYkjRW6SW8YHW6By3G+UuqRiGziJIIwQAoPnNSWrzW6UTLpVRDjdo70bQvU
vvfppUuNNji5SFfzSiakxHIse/eHG/rTNSzOvlpjuZxzPIcekr71eu1hCVHb2QdA
9Ikc5pUQeB0zImI8WJ9OVJDFUEgjJ9LGtQIDAQAB
-----END RSA PUBLIC KEY-----
dir-key-crosscert
-----BEGIN ID SIGNATURE-----
cy+VPbSGSJ5aI7egCwgNY6mgSlJumULFmUN8gfahvMo5hUwVLqP1FtoKIO8yBUc0
Y47pt6G5a0fjm6mjapFbU7IpqIUl+5gLBRKD6ugx+hr2IoqIVJY7WQUvVMBnfqHp
Z5N6kXfFBT+EbnbLiUqoRo1/AHC6E6CqI5pdhV86UCFydmuLf/MfwJpXiYRJueqk
DnPYEflq+Zu/RReL5aJlVOVuWq0ZpuzUHk4gIicKESLGkv4eI2CvuB5HTeNAB9L5
laMe+YpoXqgqMae1HT+rupPXYeONPygFXXbNLNVrR7OjAYG2TOaqdUTQkFefFVtD
ungKyPS6LTytSuU/rjWCbQ==
-----END ID SIGNATURE-----
dir-key-certification
-----BEGIN SIGNATURE-----
sV4ouMb8pmCM3WjLTFxfRVb6qZl8rQ0tYM/AjKz1ufU0UmL7yx/7JMg2InDcYPH3
4PIUQrDLoAMxnnNVMDaDGoGDGI5keUmU1eSGvdJYN7okd0aRvA9LFGw4uDVVyB0K
l7BOk80y15P34R4G6oPvcR8aCxoiMh9UusbhiVjBr6dAfJGVVxZAO1ZJ8pa8fcrA
IbtNks2vut6Oy4oaC7zLCwcbRJM6dSvzcbzBpCf7/b9w6NQNqCBBQkqKgUl0FqKM
QRKqHWuhbqcL9+lj7rvgWCEigLu9ff1+E7C4BV7GzOm5FPcRqfkPaMsjQuM/HErH
swhf2Ra+Tcdk9gdI4AomqwaoD6B2uKsZkcFpZhq4HAle6rOP9eC16DpqsokpqoW9
vb5Mic7ABYVpB4t3o5wOI9D4exXmzv6gpuOyl5rJGL5ORYSEhnMGsKMyPceCGysg
SzwfPWBqRTM2LfBxhW05UEBJev4EXk7AA5sr6GkcX/CXeR47pyXQAyc2doZo7Aoq
-----END SIGNATURE-----
dir-key-certificate-version 3
fingerprint 0232AF901C31A04EE9848595AF9BB7620D4C5B2E
dir-key-published 2021-08-01 20:00:02
dir-key-expires 2022-08-01 20:00:02
dir-identity-key
-----BEGIN RSA PUBLIC KEY-----
MIIBigKCAYEAu9O0Pueesn0+29BlxZs60mBqehjdQtgSnKOm9QZxbQ0xrMQgbFnR
hWbKD8erenyeFk2SF6AJkbyzgYC89hyPW+8GBDmg5bE8fRKjgV/nI3tY2m4rkY3u
zSmYIdwqHUUc98Xzt9PaQ8IJAlDBY4XLKrWmJMxSyhBlVEept7+9Tj23qowW44Mz
xPJZ1aFkB1FpkD6qmoCzVZbhXy3cGt1nDwdJK7KqlaXziz9pFiw8PzTVU2xFgJNy
+nEcT72DBtk3G5K2Riu/aXY/D541Cioj9KMV4Nv4g8aBKx58Xq2tq1pFkc1Bqj1y
2MomVR3iskFzlqC8yKWGVe4OP2IaOhtcQJYp5GR9q+dWnr53WWNVxNu3sA9iMal3
PJUk5pIYrsmArGew5gmlCe+Al46nPINxc7ouztmStAV+2F6SpZlKOcstnT+KJ52O
1xnOSaj/WnzG2o4KZ9UrFQoUNOLQJcelPcC+vrinMk9BQPcB072l9NjpUBC9brsW
qTCMStn1jfDDAgMBAAE=
-----END RSA PUBLIC KEY-----
dir-signing-key
-----BEGIN RSA PUBLIC KEY-----
MIIBCgKCAQEAp7nHn/R+ZZ8lza379M7BJ00JYPAcncjtoa2K2Z75bDoxlegGvZXp
j4D0WhqksaaOr/+YCSPMcs4HAapKE/Dj09p1kjzh6Xu/iVp51NiQAARS5j3tu/5k
WJQ7ig207TdtjmslZIx0UU8pieuenRdyUN0PvjOkaoZIpao1+UlIe47DP+42D3QX
1J2wu48QDvt7hUUA3y7yLUyNMarqYBbbXQ/MpH8tcMT76TTN1uilP6W/3j1b6Fr7
NGtbUrS1EzOOHnCpgpnD8qGcisDKrHcVkNkh1w+8LW9ef7RGpFPpn022hUQG0WLD
5zrh19SAsKetWAZY6RlvyCHPVReajIAovwIDAQAB
-----END RSA PUBLIC KEY-----
dir-key-crosscert
-----BEGIN ID SIGNATURE-----
ca3I8mHu2zEOCnzySzdk+rbZLpohw5aa3NmTGFzRUXqOeHClOYHRc+glAyCrtUA3
lEa5fiFaZTImKu0J/uroyR4uF5JpzLOfojTQi9P5hMCBSdd7uGzoKC+/dKb2OngZ
VkBjptMf1S9dy2lUdDksHnnyg8UrV7EolIHUFNdEBI1LeONkdesZ5oQMg3HRlVpU
v+m/7y/MB+o3KAXkQyAxTcV4bKdsHm3Pf0CSfDgOPImwFS4lwyEW0STlOmVHojZR
5wm+5dwt9vbD7K6ectbnWtWjiSrvtGjqixO652lxz1qrsid99S5wEzJNhfif8lYe
VsB9h7YagNHJHLiGeBT1kg==
-----END ID SIGNATURE-----
dir-key-certification
-----BEGIN SIGNATURE-----
ZkHpe8JVvGsiAsH8gw1eZVIIE8WuM+3Sdd37U2tOyDi7FVwJV+oJ+aKwcCTqTLaj
jglQJbg2JdV4ofy49ZaQa6FBGLrzxAS6Gx0jg+28Kzbr0xu9hSX81oPSXKn9KDLr
BvmuSqKBB+5B9nIEBjm6FwPc8MjqlvNesuJ3IpW9+e85eB7qsH4ozjHF0GIgpXu/
qXrk2TEK1nMc9EN+VCYuy3gAm46GHQEYR1U7gIofCYf7LQpDrfj1sAGquCQ3vYqT
Ex3GtqcDV22IME67Cou5rv9OmMnmy1dbeHO4g843RX0LXtEDdGYGSLHzl8EAscrg
i55XFlS6z5OwCbdDvFTkHUWRlaiDtoymaxAEW6GUmNjHhgWY9wJwgroVNRsP8Ihi
aex9HIND1MY4ERS41Csba/0grf+FahMVI12gwpmrnKfF95QHWw2MEvT1pzZGtMnq
XD8mcVNYJtcTvYM/cUa0I4BFD1AyeIP54hEXwIsqHm8KBJpjX/ZpPzksnc4NY8i0
-----END SIGNATURE-----
dir-key-certificate-version 3
fingerprint E8A9C45EDE6D711294FADF8E7951F4DE6CA56B58
dir-key-published 2021-11-09 19:16:37
dir-key-expires 2023-05-09 19:16:37
dir-identity-key
-----BEGIN RSA PUBLIC KEY-----
MIIBigKCAYEAu/DOrbv/4IAYvyxsy/6ivC3q5yCQBWLKHZGYKQa5G/3rem8wen0f
qF7y4ye6U6faWc5kcNMHEKMIeBzMErxwF345qoGHITxbbOWnizgwPgrdCwlK3p0H
1XZGU/TTjoaM25P+ZNCBvGmDQRAtgs2odnv+i8hpu6vrcAUZYXmmw/Ag1Ou2AlLC
mPpbjV1O5SMylgC4IuCBPr3iA+M1kKkvj4LmwU6pJxjAae76GLzzQ/Ffvi7rRpvU
2BHetjehk+7/t8izgbhT4VABtzKgrv9ATnhfEgPeT/WBq0E75iciBBAXRPF5kEA4
k++NPy21XpL7jkQ4wnMs2HyiFhHbUwbLcoyQ/JVq/WBboSwStYbkdizRpkhJ1eNg
LiD8CPWcZnhWZi9VWrwT0xl+Mu4v6kwo9kVnXhOfcK8Wni9FqiBu2tmNDoGPG1Ac
wptYQSIoujuLgn4MARREwo9cWrKp2w+D7Dt4U7U5OrXL7TXjonEKuEHwRhzz1JA8
7LXm/wENwn1/AgMBAAE=
-----END RSA PUBLIC KEY-----
dir-signing-key
-----BEGIN RSA PUBLIC KEY-----
MIIBCgKCAQEAuxJxHCGOw9DgNtw4wqi78OE3djdiLwbie+2CevKMRaO14IhuQGVK
w1PYsnTuVLVcJl3Y4QKQ4nnbe1QCiGrLq9wueQy7ZvBeZry3f+QD1Q/PAG19n6/7
hlhXclSOJ/jRah0Gi+QXAycKE5RES/Qn4F5fNE7MxzM0ZQHIlszZLNUrcpeLE9nX
avlqlSqK8FmLPOpOSRrdPtzKP2sjW9UUFVGMfurDYIC51hkZI/nyy8A1C844sfuF
LV6oYpYw5+soA122zBqGqP6vApwFCvWSDcGlx8xj1Irdo+JIDfK8vklu9P11rTWB
R7dZw9pD21reD0pf0Bipzneho6iiL++w+QIDAQAB
-----END RSA PUBLIC KEY-----
dir-key-crosscert
-----BEGIN ID SIGNATURE-----
aMzjdOHri8Kmdoy0qt1a33Y9/e5vKkJQkzCKdHN34Il5FMMCkOrJ1yeQgZyp6mU4
jPSpUZlr1Iq52x5ers4fH4SybvX16BDq+p6+Zel9f5TpFg1vzdpJH1WOJ3ZoES1N
S8CpiXVz8flc5Ez6Dc7uZGSE2fYRl1Pswn3GuLfR1Wjw0VNp1VgHZk6xYXRk/YLx
OyjZTWEWAF/0qw3usXtvTvh6wGniVxr0rg3zZbesLXti4TAn3B3N6VG1TPOizna6
s26edpQ6RQPigAuccEwU5iaIQEGkIxcoe61qnPvAoWP3Jk/sZAGCqhbya0CBCH8U
pEW/OauwlDlr3yXEKh05aQ==
-----END ID SIGNATURE-----
dir-key-certification
-----BEGIN SIGNATURE-----
XhAoF04YrM2zJUvrQuEsGhU53Pbf1B0jv5F4YkMlRX2y15rKXKI93vQTM1LbnYc0
ETkhSOQB2rpnX0bcE+K+x0sWXiMRtR1HSX/oIPDI9MNqHv75eZlEkSaDJHIsQJlj
Dd++tMHkRc49nNNo2J25J3TiBU0ecpVYYvtJzynE3W8tX3io6EmvTehkj2o79z0A
ax2A5JG65plch0ES2yK2jqgBEmkA/eZENDNQAaERXMFJbbpHIMBaGguwCEieJe77
JBAOxJFRGpL6MhMpcvi5MgEMqfAv3AhlBo93n4apT2CYR8PdCHUZyq7FrgwTSJS7
ndl3YmvxJ7wnyTXitw0GcSVeQaYMQV+LR9Z1VkmjIwRuHliUn7hR79pYqs3t11aQ
muW8jOrx+5QsiTLEPV6Hs0pzXc9XDw7mnJ6M2gxxF8fZCztal3TNLs9+1O22fxME
0VU1oS7SG6T4M1YOXgKFUP20gLl8sZf+3lGp3aLZIK8psR3vzggpaRSUKgip4Lqv
-----END SIGNATURE-----

File diff suppressed because one or more lines are too long

View File

@ -1,35 +0,0 @@
# Tor state file last generated on 2022-02-04 13:58:29 local time
# Other times below are in UTC
# You *do not* need to edit this file.
CircuitBuildTimeBin 1075 1
CircuitBuildTimeBin 1175 1
CircuitBuildTimeBin 1325 1
CircuitBuildTimeBin 1675 1
CircuitBuildTimeBin 2125 2
CircuitBuildTimeBin 2175 1
Dormant 0
Guard in=default rsa_id=73283C4DEBC01D3E4A5FD1BB1F2B50D927379F59 nickname=rinderwahnRelay29L sampled_on=2022-01-31T13:54:49 sampled_idx=0 sampled_by=0.4.5.9 listed=1 confirmed_on=2022-01-26T00:18:13 confirmed_idx=2 pb_circ_attempts=7.000000 pb_circ_successes=7.000000 pb_successful_circuits_closed=7.000000
Guard in=default rsa_id=955F15325D6F3E3350EA8A70EB5C49C5BF95C5A0 nickname=XTOMDUS sampled_on=2022-01-31T07:54:08 sampled_idx=1 sampled_by=0.4.5.9 listed=1 confirmed_on=2022-02-01T08:12:17 confirmed_idx=1
Guard in=default rsa_id=82DA9678A0BAE60087AA68A3E1D6E6A2C4246D6D nickname=Ichotolot63 sampled_on=2022-02-03T05:29:22 sampled_idx=2 sampled_by=0.4.5.9 listed=1 confirmed_on=2022-02-02T08:46:50 confirmed_idx=0
Guard in=default rsa_id=77A3ADC5D455778B53C2803761916DFB7DA0A790 nickname=redvader sampled_on=2022-02-02T15:23:39 sampled_idx=3 sampled_by=0.4.5.9 listed=1
Guard in=default rsa_id=2096BCFEBB95A1134F39FCF8CEB076FF41A2B48B nickname=freja sampled_on=2022-02-03T19:51:55 sampled_idx=4 sampled_by=0.4.5.9 listed=1
Guard in=default rsa_id=AE4FAE2EB5DC5D078458F0FCBF2B37F5D73F0868 nickname=sinkrlogin sampled_on=2022-01-24T19:30:40 sampled_idx=5 sampled_by=0.4.5.9 listed=1
Guard in=default rsa_id=680F212ADE23311C658CC560DAF80DB42FEB85DF nickname=a9 sampled_on=2022-01-28T12:54:55 sampled_idx=6 sampled_by=0.4.5.9 listed=1
Guard in=default rsa_id=3D5D6178C44537E3692853B344385F6572A55767 nickname=TorZabehlice sampled_on=2022-01-31T02:57:52 sampled_idx=7 sampled_by=0.4.5.9 listed=1
Guard in=default rsa_id=CEDB8AB22915097A3A14F63F28E1E43F86CBECC0 nickname=knight sampled_on=2022-01-26T09:02:31 sampled_idx=8 sampled_by=0.4.5.9 listed=1
Guard in=default rsa_id=0B555940D37DC849728841C0B290074E1A1BDCA8 nickname=TORro sampled_on=2022-01-26T04:11:45 sampled_idx=9 sampled_by=0.4.5.9 listed=1
Guard in=default rsa_id=2A6D9EAE2FB319486C5E3BF5CC0F83F06B73CE0F nickname=clicker1 sampled_on=2022-01-28T16:27:29 sampled_idx=10 sampled_by=0.4.5.9 listed=1
Guard in=default rsa_id=7B3535760987464C8B5686F203B6EBE767C0873E nickname=Hydra69 sampled_on=2022-01-25T23:46:36 sampled_idx=11 sampled_by=0.4.5.9 listed=1
Guard in=default rsa_id=0F0F690AF1D32C7C3C72C543836625628887BA85 nickname=Hydra57 sampled_on=2022-01-24T15:26:39 sampled_idx=12 sampled_by=0.4.5.9 listed=1
Guard in=default rsa_id=AC2275831607A95CD8B939C3B8DC466CCF48E2B9 nickname=notsorelay sampled_on=2022-01-25T04:52:58 sampled_idx=13 sampled_by=0.4.5.9 listed=1
Guard in=default rsa_id=38F732DD349A2E59078434651162A2F4201934A5 nickname=mixminion sampled_on=2022-01-25T18:16:12 sampled_idx=14 sampled_by=0.4.5.9 listed=1
Guard in=default rsa_id=2F844B6701E6C614240214489A99DF607F43C5B0 nickname=3totalrecovery3 sampled_on=2022-01-31T01:50:15 sampled_idx=15 sampled_by=0.4.5.9 listed=1
Guard in=default rsa_id=EBE718E1A49EE229071702964F8DB1F318075FF8 nickname=fluxe4 sampled_on=2022-01-24T07:17:01 sampled_idx=16 sampled_by=0.4.5.9 listed=1
Guard in=default rsa_id=8118F4C0E60C84A453ACCD1641F3A7328CBE6280 nickname=wilfong sampled_on=2022-02-01T10:05:37 sampled_idx=17 sampled_by=0.4.5.9 listed=1
Guard in=default rsa_id=2AA5F598F9A1812F01CD99E3B59BB87362ED7438 nickname=setsun sampled_on=2022-02-01T12:40:07 sampled_idx=18 sampled_by=0.4.5.9 listed=1
Guard in=default rsa_id=CF6A6080091BB210AA3892FEFE2F6A396DA08DF3 nickname=cryzrelay01 sampled_on=2022-02-01T11:05:41 sampled_idx=19 sampled_by=0.4.5.9 listed=1
LastWritten 2022-02-04 21:58:29
MinutesSinceUserActivity 1
TorVersion Tor 0.4.5.9 (git-d0ed04d50e80fe1c)
TotalBuildTimes 7

View File

@ -1,3 +0,0 @@
SocksPort 9982 OnionTrafficOnly
ControlPort 9983
HashedControlPassword 16:D95A03E7895DC6A2605B7AF7E28AB1E24D813742A0E86A2818C7179CE6

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 18 KiB

View File

@ -1,11 +1,9 @@
@env:clean
Feature: Splash screen displays and then closes
Scenario: splash screen appears
Then I expect the widget 'SplashView' to be present within 1 second
Scenario: splash screen completes
Then I expect the widget 'SplashView' to be present within 10 seconds
Then I expect the widget 'ProfileManagerView' to be present within 10 seconds
Scenario: first-run of cwtch creates expected files and folders
Given I expect the widget 'ProfileManagerView' to be present within 10 seconds
# first-run of cwtch creates expected files and folders
Then I expect the folder 'integration_test/env/temp' to exist
And I expect the folder 'integration_test/env/temp/dev' to exist
And I expect the file 'integration_test/env/temp/dev/SALT' to exist

View File

@ -1,26 +1,26 @@
@env:persist
Feature: Settings pane opens and can save settings persistently
Scenario: Open the Settings pane
Given I tap the 'OpenSettingsView' button
Then I expect the text 'Cwtch Settings' to be present
Given I wait until the widget with type 'ProfileMgrView' is present
And I tap the 'OpenSettingsView' button
And I wait until the text 'Cwtch Settings' is present
And I take a screenshot
Scenario: Change every setting (except Language)
Given I wait until the widget with type 'ProfileMgrView' is present
Given I tap the 'OpenSettingsView' button
And I wait for 1 second
And I wait until the text 'Use Light Themes' is present
When I tap the widget that contains the text "Use Light Themes"
#And I choose option 3 from the "DropdownTheme" dropdown
#When I tap the "DropdownTheme" button
#And I tap the first "ddi_mermaid" element
#And I tap the element that contains the text "Mermaid"
#And I tap the element that contains the text "Mermaid" within the "DropdownTheme"
And I tap the widget that contains the text "Block Unknown Contacts"
And I tap the widget that contains the text "Streamer/Presentation Mode"
And I tap the widget that contains the text "Enable Experiments"
Then I wait until the text 'Enable Group Chat' is present
And I tap the widget that contains the text "Enable Group Chat"
And I tap the widget that contains the text "Hosting Servers"
And I tap the widget that contains the text "File Sharing"
Then I wait until the text 'Image Previews and Profile Pictures' is present
And I tap the widget that contains the text "Image Previews and Profile Pictures"
And I wait until the text 'Download Folder' is present
And I fill the "DownloadFolderPicker" field with "/this/is/a/test"
And I tap the widget that contains the text "Enable Clickable Links"
Then I expect the switch that contains the text "Use Light Themes" to be checked
@ -35,8 +35,9 @@ Feature: Settings pane opens and can save settings persistently
And I expect the switch that contains the text "Enable Clickable Links" to be checked
Scenario: When the app is reloaded, settings from the previous scenario have persisted
Given I wait until the widget with type 'ProfileMgrView' is present
Given I tap the 'OpenSettingsView' button
And I wait for 1 second
And I wait until the text 'Use Light Themes' is present
Then I expect the switch that contains the text "Use Light Themes" to be checked
And I expect the switch that contains the text "Block Unknown Contacts" to be checked
And I expect the switch that contains the text "Streamer/Presentation Mode" to be checked

View File

@ -1,11 +1,14 @@
Feature: Tor initializes correctly
Scenario: Check the Tor version
Given I tap the icon with type "TorIcon"
Given I wait until the widget with type 'ProfileMgrView' is present
And I tap the icon with type "TorIcon"
Then I expect the Tor version to be present
And I expect the string 'Online' to be present within 60 seconds
Scenario: Reset Tor
Given I tap the icon with type "TorIcon"
Given I wait until the widget with type 'ProfileMgrView' is present
And I tap the icon with type "TorIcon"
Then I expect the string 'Online' to be present within 60 seconds
Then I tap the button with text "Reset"
Then I tap the button that contains the text "Reset"
And I wait for 1 second
Then I expect the text "Online" to be absent

View File

@ -1,6 +1,7 @@
Feature: Shutdown Cwtch button works correctly
Scenario: Clicking 'Shutdown Cwtch' shuts down Cwtch
Given I tap the button with tooltip 'Shutdown Cwtch'
Given I wait until the widget with type 'ProfileMgrView' is present
And I tap the button with tooltip 'Shutdown Cwtch'
Then I expect the text 'Shutdown Cwtch?' to be present
#this also kills the testing framework sadly. will have to find a workaround
#And I tap the button that contains the text 'Shutdown Cwtch'

View File

@ -1,14 +1,16 @@
Feature: Global 'language' setting
Scenario: Change the language to French and back
Given I wait until the widget with type 'ProfileMgrView' is present
Given I tap the 'OpenSettingsView' button
And I wait for 1 second
And I wait until the text 'Language' is present
Then I expect the text 'Language' to be present
And I expect the text 'Langue' to be absent
When I tap the widget that contains the text "English"
And I tap the widget that contains the text "Frances"
Then I expect the text 'Langue' to be present
And I wait until the text 'French' is present
And I tap the widget that contains the text "French"
And I wait until the text 'Langue' is present
And I expect the text 'Language' to be absent
When I tap the widget that contains the text "Français"
And I tap the widget that contains the text "Anglais"
Then I expect the text 'Language' to be present
And I wait until the text 'Language' is present
And I expect the text 'Langue' to be absent

View File

@ -1,10 +1,12 @@
Feature: Global 'Theme' setting
Scenario: Change the theme to Mermaid
Given I wait until the widget with type 'ProfileMgrView' is present
Given I tap the 'OpenSettingsView' button
And I wait for 1 second
When I tap the "DropdownTheme" button
And I tap the element that contains the text "Mermaid"
Scenario: Change the theme to Light Mode
Given I wait until the widget with type 'ProfileMgrView' is present
Given I tap the 'OpenSettingsView' button
And I wait for 1 second
And I tap the widget that contains the text "Theme"

View File

@ -9,6 +9,7 @@ import 'dart:io';
import 'package:cwtch/main.dart' as app;
import 'package:glob/glob.dart';
import 'gherkin_suite_test.dart';
import 'hooks/env.dart';
import 'steps/chat.dart';
import 'steps/files.dart';
@ -18,10 +19,11 @@ import 'steps/text.dart';
import 'steps/utils.dart';
part 'gherkin_suite_test.g.dart';
const REPLACED_BY_SCRIPT = <String>['integration_test/features/**.feature'];
@GherkinTestSuite(executionOrder: ExecutionOrder.alphabetical, featurePaths: REPLACED_BY_SCRIPT)
void main() {
void main() async {
final params = [
SwitchStateParameter(),
];
@ -56,45 +58,50 @@ void main() {
];
var sb = StringBuffer();
sb..writeln("## Custom Parameters\n")
..writeln("| name | pattern |")
..writeln("| --- | --- |");
sb
..writeln("## Custom Parameters\n")
..writeln("| name | pattern |")
..writeln("| --- | --- |");
for (var i in params) {
sb..write("| ")..write(i.identifier)..write(" | ")..write(i.pattern.toString().replaceFirst("RegExp: pattern=","").replaceFirst(" flags=i","").replaceAll("|", "&#124;"))..writeln(" |");
sb
..write("| ")
..write(i.identifier)
..write(" | ")
..write(i.pattern.toString().replaceFirst("RegExp: pattern=", "").replaceFirst(" flags=i", "").replaceAll("|", "&#124;"))
..writeln(" |");
}
sb..writeln("\n## Custom steps\n")
..writeln("| pattern |")
..writeln("| --- |");
sb
..writeln("\n## Custom steps\n")
..writeln("| pattern |")
..writeln("| --- |");
for (var i in steps) {
sb.writeln(i.pattern.toString().replaceFirst("RegExp: pattern=", "| ").replaceFirst(" flags=", " |").replaceAll("|", "&#124;"));
}
var f = File("integration_test/CustomSteps.md");
f.writeAsString(sb.toString());
executeTestSuite(
FlutterTestConfiguration.DEFAULT([])
..reporters = [
StdoutReporter(MessageLevel.error)
..setWriteLineFn(print)
..setWriteFn(print),
ProgressReporter()
..setWriteLineFn(print)
..setWriteFn(print),
TestRunSummaryReporter()
..setWriteLineFn(print)
..setWriteFn(print),
JsonReporter(
writeReport: (_, __) => Future<void>.value(),
),
]
..customStepParameterDefinitions = [
SwitchStateParameter(),
]
..stepDefinitions = steps
..hooks = [
ResetCwtchEnvironment(),
AttachScreenshotOnFailedStepHook(),
],
(World world) => app.main(),
await executeTestSuite(
configuration: FlutterTestConfiguration(
reporters: [
StdoutReporter(MessageLevel.verbose)
..setWriteLineFn(print)
..setWriteFn(print),
ProgressReporter()
..setWriteLineFn(print)
..setWriteFn(print),
TestRunSummaryReporter()
..setWriteLineFn(print)
..setWriteFn(print),
JsonReporter(),
],
customStepParameterDefinitions: [
SwitchStateParameter(),
],
stepDefinitions: steps,
hooks: [
ResetCwtchEnvironment(),
AttachScreenshotOnFailedStepHook(),
]),
appMainFunction: (World world) => app.main(),
);
}
}

View File

@ -10,6 +10,7 @@ class ResetCwtchEnvironment extends Hook {
Future<void> onBeforeRun(TestConfiguration config) async {
// initialize @env:persist
await Process.run("rm", ["-rf", "integration_test/env/temp-persist"]);
await Process.run("rm", ["-rf", "integration_test/env/temp"]);
await Process.run("cp", ["-R", "integration_test/env/persist", "integration_test/env/temp-persist"]);
return super.onBeforeRun(config);
@ -17,7 +18,10 @@ class ResetCwtchEnvironment extends Hook {
@override
Future<void> onAfterRun(TestConfiguration config) async {
// Clean up After a Test Run...
print("clean up environments after run...");
await Process.run("rm", ["-rf", "integration_test/env/temp-persist"]);
await Process.run("rm", ["-rf", "integration_test/env/temp"]);
return super.onAfterRun(config);
}
@ -31,18 +35,16 @@ class ResetCwtchEnvironment extends Hook {
// use the default environment if no @env: tag specified
await Process.run("cp", ["-R", "integration_test/env/default", "integration_test/env/temp"]);
} else {
print("no environment initialized");
print("clean environment initialized");
}
return super.onBeforeScenario(config, scenario, tags);
}
@override
Future<void> onAfterScenario(TestConfiguration config, String scenario, Iterable<Tag> tags) async {
Future<void> onAfterScenario(TestConfiguration config, String scenario, Iterable<Tag> tags, {bool passed = true}) async {
if (tags.any((t) => t.name == "@env:persist")) {
await Process.run("mv", ["integration_test/env/temp", "integration_test/env/temp-persist"]);
} else {
await Process.run("rm", ["-rf", "integration_test/env/temp"]);
}
return super.onAfterScenario(config, scenario, tags);
}
}
}

View File

@ -15,28 +15,20 @@ import 'overrides.dart';
StepDefinitionGeneric ExpectReply() {
return given3<String, String, int, FlutterWorld>(
RegExp(
r'I expect to see the message {string} replying to {string} within {int} second(s)$'),
(originalMessage, responseMessage, seconds, context) async {
RegExp(r'I expect to see the message {string} replying to {string} within {int} second(s)$'),
(originalMessage, responseMessage, seconds, context) async {
await context.world.appDriver.waitUntil(
() async {
() async {
await context.world.appDriver.waitForAppToSettle();
return await context.world.appDriver.isPresent(
context.world.appDriver.findByDescendant(
context.world.appDriver.findBy(QuotedMessageBubble, FindType.type),
context.world.appDriver.findBy(originalMessage, FindType.text)
)
) && await context.world.appDriver.isPresent(
context.world.appDriver.findByDescendant(
context.world.appDriver.findBy(QuotedMessageBubble, FindType.type),
context.world.appDriver.findBy(responseMessage, FindType.text)
));
context.world.appDriver.findByDescendant(context.world.appDriver.findBy(QuotedMessageBubble, FindType.type), context.world.appDriver.findBy(originalMessage, FindType.text))) &&
await context.world.appDriver.isPresent(
context.world.appDriver.findByDescendant(context.world.appDriver.findBy(QuotedMessageBubble, FindType.type), context.world.appDriver.findBy(responseMessage, FindType.text)));
},
timeout: Duration(seconds: seconds),
);
},
configuration: StepDefinitionConfiguration()
..timeout = const Duration(days: 1),
configuration: StepDefinitionConfiguration()..timeout = const Duration(days: 1),
);
}
}

View File

@ -4,9 +4,8 @@ import 'package:gherkin/gherkin.dart';
StepDefinitionGeneric FolderExists() {
return then1<String, FlutterWorld>(
RegExp(
r'I expect the folder {string} to exist'),
(input1, context) async {
RegExp(r'I expect the folder {string} to exist'),
(input1, context) async {
context.expect(Directory(input1).existsSync(), true);
},
);
@ -14,10 +13,9 @@ StepDefinitionGeneric FolderExists() {
StepDefinitionGeneric FileExists() {
return then1<String, FlutterWorld>(
RegExp(
r'I expect the file {string} to exist'),
(input1, context) async {
RegExp(r'I expect the file {string} to exist'),
(input1, context) async {
context.expect(File(input1).existsSync(), true);
},
);
}
}

View File

@ -11,16 +11,16 @@ enum SwitchState { checked, unchecked }
class SwitchStateParameter extends CustomParameter<SwitchState> {
SwitchStateParameter()
: super("toggle", RegExp(r"(checked|unchecked)", caseSensitive: false), (s) {
switch (s.toLowerCase()) {
case "checked":
return SwitchState.checked;
case "unchecked":
return SwitchState.unchecked;
}
});
switch (s.toLowerCase()) {
case "checked":
return SwitchState.checked;
case "unchecked":
return SwitchState.unchecked;
}
});
}
class CheckSwitchState extends Given2WithWorld<String,SwitchState,FlutterWorld> {
class CheckSwitchState extends Given2WithWorld<String, SwitchState, FlutterWorld> {
@override
Future<void> executeStep(String input1, SwitchState state) async {
final switch1 = world.appDriver.findBy(input1, FindType.key);
@ -38,9 +38,8 @@ class CheckSwitchState extends Given2WithWorld<String,SwitchState,FlutterWorld>
StepDefinitionGeneric CheckSwitchStateWithText() {
return then2<String, SwitchState, FlutterWorld>(
RegExp(
r'I expect the switch that contains the text {string} to be {toggle}'),
(input1, state, context) async {
RegExp(r'I expect the switch that contains the text {string} to be {toggle}'),
(input1, state, context) async {
final textFinder = context.world.appDriver.findBy(input1, FindType.text);
await context.world.appDriver.scrollIntoView(textFinder);
final switchTypeFinder = context.world.appDriver.findBy(SwitchListTile, FindType.type);
@ -53,9 +52,8 @@ StepDefinitionGeneric CheckSwitchStateWithText() {
StepDefinitionGeneric DropdownChoose() {
return then2<int, String, FlutterWorld>(
RegExp(
r'I choose option {int} from the {string} dropdown'),
(idx, input1, context) async {
RegExp(r'I choose option {int} from the {string} dropdown'),
(idx, input1, context) async {
await context.world.appDriver.waitForAppToSettle();
final ddFinder = context.world.appDriver.findBy(input1, FindType.key);
await context.world.appDriver.scrollIntoView(ddFinder);
@ -78,4 +76,3 @@ StepDefinitionGeneric DropdownChoose() {
},
);
}

View File

@ -30,11 +30,9 @@ StepDefinitionGeneric TapWidgetWithType() {
StepDefinitionGeneric TapWidgetWithLabel() {
return given2<String, String, FlutterWorld>(
RegExp(r'I tap the {string} widget with label {string}$'),
(ofType, text, context) async {
final finder = context.world.appDriver.findByDescendant(
context.world.appDriver.findBy(widgetTypeByName(ofType), FindType.type),
context.world.appDriver.findBy(text, FindType.text),
firstMatchOnly: true);
(ofType, text, context) async {
final finder =
context.world.appDriver.findByDescendant(context.world.appDriver.findBy(widgetTypeByName(ofType), FindType.type), context.world.appDriver.findBy(text, FindType.text), firstMatchOnly: true);
//Text wdg = await context.world.appDriver.widget(finder, ExpectedWidgetResultType.first);
//print(wdg.debugDescribeChildren().first.)
await context.world.appDriver.scrollIntoView(finder);
@ -47,11 +45,9 @@ StepDefinitionGeneric TapWidgetWithLabel() {
StepDefinitionGeneric TapWidgetWithTooltip() {
return given2<String, String, FlutterWorld>(
RegExp(r'I tap the {string} widget with tooltip {string}$'),
(ofType, text, context) async {
final finder = context.world.appDriver.findByDescendant(
context.world.appDriver.findBy(widgetTypeByName(ofType), FindType.type),
context.world.appDriver.findBy(text, FindType.tooltip),
firstMatchOnly: true);
(ofType, text, context) async {
final finder = context.world.appDriver
.findByDescendant(context.world.appDriver.findBy(widgetTypeByName(ofType), FindType.type), context.world.appDriver.findBy(text, FindType.tooltip), firstMatchOnly: true);
await context.world.appDriver.scrollIntoView(finder);
await context.world.appDriver.tap(finder);
await context.world.appDriver.waitForAppToSettle();
@ -62,11 +58,9 @@ StepDefinitionGeneric TapWidgetWithTooltip() {
StepDefinitionGeneric ExpectWidgetWithText() {
return given2<String, String, FlutterWorld>(
RegExp(r'I expect a {string} widget with text {string}$'),
(ofType, text, context) async {
final finder = context.world.appDriver.findByDescendant(
context.world.appDriver.findBy(widgetTypeByName(ofType), FindType.type),
context.world.appDriver.findBy(text, FindType.text),
firstMatchOnly: true);
(ofType, text, context) async {
final finder =
context.world.appDriver.findByDescendant(context.world.appDriver.findBy(widgetTypeByName(ofType), FindType.type), context.world.appDriver.findBy(text, FindType.text), firstMatchOnly: true);
//Text wdg = await context.world.appDriver.widget(finder, ExpectedWidgetResultType.first);
//print(wdg.debugDescribeChildren().first.)
await context.world.appDriver.isPresent(finder);
@ -78,11 +72,9 @@ StepDefinitionGeneric ExpectWidgetWithText() {
StepDefinitionGeneric AbsentWidgetWithText() {
return given2<String, String, FlutterWorld>(
RegExp(r'I expect a {string} widget with text {string} to be absent$'),
(ofType, text, context) async {
final finder = context.world.appDriver.findByDescendant(
context.world.appDriver.findBy(widgetTypeByName(ofType), FindType.type),
context.world.appDriver.findBy(text, FindType.text),
firstMatchOnly: true);
(ofType, text, context) async {
final finder =
context.world.appDriver.findByDescendant(context.world.appDriver.findBy(widgetTypeByName(ofType), FindType.type), context.world.appDriver.findBy(text, FindType.text), firstMatchOnly: true);
//Text wdg = await context.world.appDriver.widget(finder, ExpectedWidgetResultType.first);
//print(wdg.debugDescribeChildren().first.)
await context.world.appDriver.isAbsent(finder);
@ -91,15 +83,11 @@ StepDefinitionGeneric AbsentWidgetWithText() {
);
}
StepDefinitionGeneric TapButtonWithText() {
return given1<String, FlutterWorld>(
RegExp(r'I tap the {string} (?:button|element|label|icon|field|text|widget)$'),
(input1, context) async {
final finder = context.world.appDriver.findByDescendant(
context.world.appDriver.findBy(Flwtch, FindType.type),
context.world.appDriver.findBy(input1, FindType.key),
firstMatchOnly: true);
(input1, context) async {
final finder = context.world.appDriver.findByDescendant(context.world.appDriver.findBy(Flwtch, FindType.type), context.world.appDriver.findBy(input1, FindType.key), firstMatchOnly: true);
await context.world.appDriver.scrollIntoView(finder);
await context.world.appDriver.tap(finder);
await context.world.appDriver.waitForAppToSettle();
@ -110,18 +98,18 @@ StepDefinitionGeneric TapButtonWithText() {
StepDefinitionGeneric WaitUntilTypeExists() {
return then2<String, Existence, FlutterWorld>(
'I wait until the (?:button|element|label|icon|field|text|widget) with type {string} is {existence}',
(ofType, existence, context) async {
(ofType, existence, context) async {
await context.world.appDriver.waitUntil(
() async {
() async {
await context.world.appDriver.waitForAppToSettle();
return existence == Existence.absent
? context.world.appDriver.isAbsent(
context.world.appDriver.findBy(widgetTypeByName(ofType), FindType.type),
)
context.world.appDriver.findBy(widgetTypeByName(ofType), FindType.type),
)
: context.world.appDriver.isPresent(
context.world.appDriver.findBy(widgetTypeByName(ofType), FindType.type),
);
context.world.appDriver.findBy(widgetTypeByName(ofType), FindType.type),
);
},
);
},
@ -130,11 +118,10 @@ StepDefinitionGeneric WaitUntilTypeExists() {
StepDefinitionGeneric ExpectTextToBePresent() {
return given2<String, int, FlutterWorld>(
RegExp(
r'I expect the string {string} to be present within {int} second(s)$'),
(key, seconds, context) async {
RegExp(r'I expect the string {string} to be present within {int} second(s)$'),
(key, seconds, context) async {
await context.world.appDriver.waitUntil(
() async {
() async {
await context.world.appDriver.waitForAppToSettle();
return context.world.appDriver.isPresent(
@ -144,94 +131,85 @@ StepDefinitionGeneric ExpectTextToBePresent() {
timeout: Duration(seconds: seconds),
);
},
configuration: StepDefinitionConfiguration()
..timeout = const Duration(days: 1),
configuration: StepDefinitionConfiguration()..timeout = const Duration(days: 1),
);
}
StepDefinitionGeneric ExpectWidgetWithTextWithin() {
return given3<String, String, int, FlutterWorld>(
RegExp(
r'I expect a {string} widget with text {string} to be present within {int} second(s)$'),
(widgetType, text, seconds, context) async {
await context.world.appDriver.waitUntil(
() async {
RegExp(r'I expect a {string} widget with text {string} to be present within {int} second(s)$'),
(widgetType, text, seconds, context) async {
await () async {
var result = false;
while (!result) {
await context.world.appDriver.waitForAppToSettle();
return context.world.appDriver.isPresent(
context.world.appDriver.findByDescendant(
context.world.appDriver.findBy(widgetTypeByName(widgetType), FindType.type),
context.world.appDriver.findBy(text, FindType.text)
),
result = await context.world.appDriver.isPresent(
context.world.appDriver.findByDescendant(context.world.appDriver.findBy(widgetTypeByName(widgetType), FindType.type), context.world.appDriver.findBy(text, FindType.text)),
);
},
timeout: Duration(seconds: seconds),
);
}
}()
.timeout(Duration(seconds: 120));
},
configuration: StepDefinitionConfiguration()
..timeout = const Duration(days: 1),
configuration: StepDefinitionConfiguration()..timeout = const Duration(days: 1),
);
}
StepDefinitionGeneric WaitUntilTextExists() {
return then2<String, Existence, FlutterWorld>(
'I wait until the text {string} is {existence}',
(text, existence, context) async {
await context.world.appDriver.waitUntil(
() async {
(text, existence, context) async {
await () async {
var result = false;
while (!result) {
await context.world.appDriver.waitForAppToSettle();
return existence == Existence.absent
result = await (existence == Existence.absent
? context.world.appDriver.isAbsent(
context.world.appDriver.findBy(text, FindType.text),
)
context.world.appDriver.findBy(text, FindType.text),
)
: context.world.appDriver.isPresent(
context.world.appDriver.findBy(text, FindType.text),
);
},
timeout: Duration(seconds: 120),
);
context.world.appDriver.findBy(text, FindType.text),
));
}
}()
.timeout(Duration(seconds: 120));
},
configuration: StepDefinitionConfiguration()
..timeout = const Duration(days: 1),
configuration: StepDefinitionConfiguration()..timeout = const Duration(days: 1),
);
}
StepDefinitionGeneric WaitUntilTooltipExists() {
return then2<String, Existence, FlutterWorld>(
'I wait until the tooltip {string} is {existence}',
(ofType, existence, context) async {
(ofType, existence, context) async {
await context.world.appDriver.waitUntil(
() async {
() async {
await context.world.appDriver.waitForAppToSettle();
return existence == Existence.absent
? context.world.appDriver.isAbsent(
context.world.appDriver.findBy(ofType, FindType.tooltip),
)
context.world.appDriver.findBy(ofType, FindType.tooltip),
)
: context.world.appDriver.isPresent(
context.world.appDriver.findBy(ofType, FindType.tooltip),
);
context.world.appDriver.findBy(ofType, FindType.tooltip),
);
},
timeout: Duration(seconds: 120),
);
},
configuration: StepDefinitionConfiguration()
..timeout = const Duration(days: 1),
configuration: StepDefinitionConfiguration()..timeout = const Duration(days: 1),
);
}
mixin _SwipeHelper
on When4WithWorld<SwipeDirection, int, String, String, FlutterWorld> {
mixin _SwipeHelper on When4WithWorld<SwipeDirection, int, String, String, FlutterWorld> {
Future<void> swipeOnFinder(
dynamic finder,
SwipeDirection direction,
int swipeAmount,
) async {
dynamic finder,
SwipeDirection direction,
int swipeAmount,
) async {
if (direction == SwipeDirection.left || direction == SwipeDirection.right) {
final offset =
direction == SwipeDirection.right ? swipeAmount : (swipeAmount * -1);
final offset = direction == SwipeDirection.right ? swipeAmount : (swipeAmount * -1);
await world.appDriver.scroll(
finder,
dx: offset.toDouble(),
@ -239,8 +217,7 @@ on When4WithWorld<SwipeDirection, int, String, String, FlutterWorld> {
timeout: timeout,
);
} else {
final offset =
direction == SwipeDirection.up ? swipeAmount : (swipeAmount * -1);
final offset = direction == SwipeDirection.up ? swipeAmount : (swipeAmount * -1);
await world.appDriver.scroll(
finder,
@ -251,26 +228,21 @@ on When4WithWorld<SwipeDirection, int, String, String, FlutterWorld> {
}
}
}
class SwipeOnType
extends When4WithWorld<SwipeDirection, int, String, String, FlutterWorld>
with _SwipeHelper {
class SwipeOnType extends When4WithWorld<SwipeDirection, int, String, String, FlutterWorld> with _SwipeHelper {
@override
Future<void> executeStep(
SwipeDirection direction,
int swipeAmount,
String typeOf,
String text,
) async {
final finder = this.world.appDriver.findByDescendant(
this.world.appDriver.findBy(widgetTypeByName(typeOf), FindType.type),
this.world.appDriver.findBy(text, FindType.text)
);
SwipeDirection direction,
int swipeAmount,
String typeOf,
String text,
) async {
final finder = this.world.appDriver.findByDescendant(this.world.appDriver.findBy(widgetTypeByName(typeOf), FindType.type), this.world.appDriver.findBy(text, FindType.text));
await swipeOnFinder(finder, direction, swipeAmount);
}
@override
RegExp get pattern => RegExp(
r'I swipe {swipe_direction} by {int} pixels on the widget of type {string} with text {string}');
RegExp get pattern => RegExp(r'I swipe {swipe_direction} by {int} pixels on the widget of type {string} with text {string}');
}
Type widgetTypeByName(String input1) {
@ -284,12 +256,12 @@ Type widgetTypeByName(String input1) {
case "TorIcon":
return TorIcon;
case "button":
return ElevatedButton;
return ElevatedButton;
case "IconButton":
return IconButton;
case "ProfileRow":
return ProfileRow;
return ProfileRow;
default:
throw("Unknown type $input1. add to integration_test/features/overrides.dart");
throw ("Unknown type $input1. add to integration_test/features/overrides.dart");
}
}
}

View File

@ -4,46 +4,44 @@ import 'package:flutter_gherkin/flutter_gherkin.dart';
import 'package:gherkin/gherkin.dart';
StepDefinitionGeneric TooltipTap() {
return given1<String, FlutterWorld>(
RegExp(r'I tap the button with tooltip {string}'),
(input1, context) async {
final finder = context.world.appDriver.findBy(input1, FindType.tooltip);
await context.world.appDriver.tap(finder);
await context.world.appDriver.waitForAppToSettle();
}
);
return given1<String, FlutterWorld>(RegExp(r'I tap the button with tooltip {string}'), (input1, context) async {
final finder = context.world.appDriver.findBy(input1, FindType.tooltip);
await context.world.appDriver.tap(finder);
await context.world.appDriver.waitForAppToSettle();
});
}
StepDefinitionGeneric TorVersionPresent() {
return given<FlutterWorld>(
RegExp(r'I expect the Tor version to be present$'),
(context) async {
String versionString = "";
final file = File('fetch-tor.sh');
Stream<String> lines = file.openRead()
.transform(utf8.decoder)
.transform(LineSplitter());
try {
await for (var line in lines) {
if (line.startsWith("wget https://git.openprivacy.ca/openprivacy/buildfiles/raw/branch/master/tor/tor-")) {
versionString = line.substring(81, 88);
break;
}
}
print('File is now closed.');
} catch (e) {
print('Error: $e');
(context) async {
String versionString = "";
final file = File('fetch-tor.sh');
Stream<String> lines = file.openRead().transform(utf8.decoder).transform(LineSplitter());
try {
await for (var line in lines) {
if (line.startsWith("wget https://git.openprivacy.ca/openprivacy/buildfiles/raw/branch/master/tor/tor-")) {
versionString = line.substring(81, 88);
break;
}
if (versionString == "") {
context.expect(versionString, "#.#.#", reason: "error reading version string from fetch-tor.sh");
return;
}
context.world.attach(versionString, "text/plain", "Then I expect the Tor version to be present");
context.reporter.message("test!!!", MessageLevel.info);
print("looking for version string $versionString");
final finder = context.world.appDriver.findBy(versionString, FindType.text,);
final isP = await context.world.appDriver.isPresent(finder);
context.expect(isP, true);
}
print('File is now closed.');
} catch (e) {
print('Error: $e');
}
if (versionString == "") {
context.expect(versionString, "#.#.#", reason: "error reading version string from fetch-tor.sh");
return;
}
context.world.attach(versionString, "text/plain", "Then I expect the Tor version to be present");
//context.reporter.message("test!!!", MessageLevel.info);
print("looking for version string $versionString");
final finder = context.world.appDriver.findBy(
versionString,
FindType.text,
);
final isP = await context.world.appDriver.isPresent(finder);
context.expect(isP, true);
},
);
}
}

View File

@ -4,14 +4,16 @@ import 'package:gherkin/gherkin.dart';
StepDefinitionGeneric TakeScreenshot() {
return then<FlutterWorld>(
RegExp(
r'I take a screenshot'),
(context) async {
RegExp(r'I take a screenshot'),
(context) async {
try {
final bytes = await context.world.appDriver.screenshot();
final screenshotData = base64Encode(bytes);
print("EMBEDDING SCREENSHOT....");
print("$screenshotData");
context.world.attach(screenshotData, 'image/png', 'And I take a screenshot');
} catch (e, st) {
print("FAILED TO EMBED??? $e $st");
context.world.attach('Failed to take screenshot\n$e\n$st', 'text/plain');
}
},

View File

@ -0,0 +1,43 @@
import 'package:cwtch/widgets/passwordfield.dart';
import 'package:flutter/material.dart';
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
void showPasswordDialog(BuildContext context, String title, String action, Function(String) onEntered) {
TextEditingController passwordController = TextEditingController();
CwtchPasswordField passwordField = CwtchPasswordField(
controller: passwordController,
validator: (passsword) {
return null;
});
// set up the buttons
Widget cancelButton = ElevatedButton(
child: Text(AppLocalizations.of(context)!.cancel),
onPressed: () {
Navigator.of(context).pop(); // dismiss dialog
},
);
Widget continueButton = ElevatedButton(
child: Text(action),
onPressed: () {
onEntered(passwordController.value.text);
});
// set up the AlertDialog
AlertDialog alert = AlertDialog(
title: Text(title),
content: passwordField,
actions: [
cancelButton,
continueButton,
],
);
// show the dialog
showDialog(
context: context,
builder: (BuildContext context) {
return alert;
},
);
}

View File

@ -28,3 +28,31 @@ void showFilePicker(BuildContext ctx, int maxBytes, Function(File) onSuccess, Fu
onCancel();
}
}
Future<String?> showCreateFilePicker(BuildContext ctx) async {
// only allow one file picker at a time
// note: ideally we would destroy file picker when leaving a conversation
// but we don't currently have that option.
// we need to store AppState in a variable because ctx might be destroyed
// while awaiting for pickFiles.
var appstate = Provider.of<AppState>(ctx, listen: false);
appstate.disableFilePicker = true;
// currently lockParentWindow only works on Windows...
String? result = await FilePicker.platform.saveFile(lockParentWindow: true);
appstate.disableFilePicker = false;
return result;
}
Future<String?> showSelectDirectoryPicker(BuildContext ctx) async {
// only allow one file picker at a time
// note: ideally we would destroy file picker when leaving a conversation
// but we don't currently have that option.
// we need to store AppState in a variable because ctx might be destroyed
// while awaiting for pickFiles.
var appstate = Provider.of<AppState>(ctx, listen: false);
appstate.disableFilePicker = true;
// currently lockParentWindow only works on Windows...
String? result = await FilePicker.platform.getDirectoryPath(lockParentWindow: true);
appstate.disableFilePicker = false;
return result;
}

View File

@ -0,0 +1,61 @@
import 'package:cwtch/third_party/linkify/linkify.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:url_launcher/url_launcher.dart';
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
void modalOpenLink(BuildContext ctx, LinkableElement link) {
showModalBottomSheet<void>(
context: ctx,
builder: (BuildContext bcontext) {
return Container(
height: 200, // bespoke value courtesy of the [TextField] docs
child: Center(
child: Padding(
padding: EdgeInsets.all(30.0),
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
mainAxisSize: MainAxisSize.min,
children: <Widget>[
Text(AppLocalizations.of(bcontext)!.clickableLinksWarning),
Flex(direction: Axis.horizontal, mainAxisAlignment: MainAxisAlignment.center, children: <Widget>[
Container(
margin: EdgeInsets.symmetric(vertical: 20, horizontal: 10),
child: ElevatedButton(
child: Text(AppLocalizations.of(bcontext)!.clickableLinksCopy, semanticsLabel: AppLocalizations.of(bcontext)!.clickableLinksCopy),
onPressed: () {
Clipboard.setData(new ClipboardData(text: link.url));
final snackBar = SnackBar(
content: Text(AppLocalizations.of(bcontext)!.copiedToClipboardNotification),
);
Navigator.pop(bcontext);
ScaffoldMessenger.of(bcontext).showSnackBar(snackBar);
},
),
),
Container(
margin: EdgeInsets.symmetric(vertical: 20, horizontal: 10),
child: ElevatedButton(
child: Text(AppLocalizations.of(bcontext)!.clickableLinkOpen, semanticsLabel: AppLocalizations.of(bcontext)!.clickableLinkOpen),
onPressed: () async {
if (await canLaunch(link.url)) {
await launch(link.url);
Navigator.pop(bcontext);
} else {
final snackBar = SnackBar(
content: Text(AppLocalizations.of(bcontext)!.clickableLinkError),
);
ScaffoldMessenger.of(bcontext).showSnackBar(snackBar);
}
},
),
),
]),
],
)),
));
});
}

View File

@ -1,9 +1,9 @@
import 'package:flutter/src/services/text_input.dart';
// To handle profiles that are "unencrypted" (i.e don't require a password to open) we currently create a profile with a defacto, hardcoded password.
// Details: https://docs.openprivacy.ca/cwtch-security-handbook/profile_encryption_and_storage.html
const DefaultPassword = "be gay do crime";
const LastMessageSeenTimeKey = "profile.lastMessageSeenTime";
abstract class Cwtch {
// ignore: non_constant_identifier_names
Future<void> Start();
@ -11,7 +11,13 @@ abstract class Cwtch {
Future<void> ReconnectCwtchForeground();
// ignore: non_constant_identifier_names
void CreateProfile(String nick, String pass);
void CreateProfile(String nick, String pass, bool autostart);
// ignore: non_constant_identifier_names
void ActivatePeerEngine(String profile);
// ignore: non_constant_identifier_names
void DeactivatePeerEngine(String profile);
// ignore: non_constant_identifier_names
void LoadProfiles(String pass);
// ignore: non_constant_identifier_names
@ -19,6 +25,11 @@ abstract class Cwtch {
// ignore: non_constant_identifier_names
void ChangePassword(String profile, String pass, String newpass, String newpassAgain);
// ignore: non_constant_identifier_names
void ExportProfile(String profile, String file);
// ignore: non_constant_identifier_names
Future<dynamic> ImportProfile(String file, String pass);
// ignore: non_constant_identifier_names
void ResetTor();
@ -45,12 +56,25 @@ abstract class Cwtch {
Future<dynamic> GetMessageByContentHash(String profile, int handle, String contentHash);
// ignore: non_constant_identifier_names
void SendMessage(String profile, int handle, String message);
// ignore: non_constant_identifier_names
void SendInvitation(String profile, int handle, int target);
Future<dynamic> GetMessages(String profile, int handle, int index, int count);
// ignore: non_constant_identifier_names
void ShareFile(String profile, int handle, String filepath);
Future<dynamic> SendMessage(String profile, int handle, String message);
// ignore: non_constant_identifier_names
Future<dynamic> SendInvitation(String profile, int handle, int target);
// ignore: non_constant_identifier_names
Future<dynamic> ShareFile(String profile, int handle, String filepath);
// ignore: non_constant_identifier_names
Future<dynamic> GetSharedFiles(String profile, int handle);
// ignore: non_constant_identifier_names
void RestartSharing(String profile, String filekey);
// ignore: non_constant_identifier_names
void StopSharing(String profile, String filekey);
// ignore: non_constant_identifier_names
void DownloadFile(String profile, int handle, String filepath, String manifestpath, String filekey);
// android-only
@ -73,7 +97,7 @@ abstract class Cwtch {
void CreateGroup(String profile, String server, String groupName);
// ignore: non_constant_identifier_names
void ImportBundle(String profile, String bundle);
Future<dynamic> ImportBundle(String profile, String bundle);
// ignore: non_constant_identifier_names
void SetProfileAttribute(String profile, String key, String val);
// ignore: non_constant_identifier_names
@ -100,14 +124,16 @@ abstract class Cwtch {
void SetServerAttribute(String serverOnion, String key, String val);
// ignore: non_constant_identifier_names
void Shutdown();
Future<void> Shutdown();
// non-ffi
String defaultDownloadPath();
String? defaultDownloadPath();
bool isL10nInit();
void l10nInit(String notificationSimple, String notificationConversationInfo);
void dispose();
Future<dynamic> GetDebugInfo();
}

View File

@ -18,6 +18,8 @@ import '../config.dart';
import '../errorHandler.dart';
import '../settings.dart';
typedef SeenMessageCallback = Function(String, int, DateTime);
// Class that handles libcwtch-go events (received either via ffi with an isolate or gomobile over a method channel from kotlin)
// Takes Notifiers and triggers them on appropriate events
class CwtchNotifier {
@ -32,6 +34,8 @@ class CwtchNotifier {
String? notificationSimple;
String? notificationConversationInfo;
SeenMessageCallback? seenMessageCallback;
CwtchNotifier(
ProfileListState pcn, Settings settingsCN, ErrorHandler errorCN, TorStatus torStatusCN, NotificationsManager notificationManagerP, AppState appStateCN, ServerListState serverListStateCN) {
profileCN = pcn;
@ -48,6 +52,10 @@ class CwtchNotifier {
this.notificationConversationInfo = notificationConversationInfo;
}
void setMessageSeenCallback(SeenMessageCallback callback) {
seenMessageCallback = callback;
}
void handleMessage(String type, dynamic data) {
//EnvironmentConfig.debugLog("NewEvent $type $data");
switch (type) {
@ -64,7 +72,8 @@ class CwtchNotifier {
}
EnvironmentConfig.debugLog("NewPeer $data");
// if tag != v1-defaultPassword then it is either encrypted OR it is an unencrypted account created during pre-beta...
profileCN.add(data["Identity"], data["name"], data["picture"], data["defaultPicture"], data["ContactsJson"], data["ServerList"], data["Online"] == "true", data["tag"] != "v1-defaultPassword");
profileCN.add(data["Identity"], data["name"], data["picture"], data["defaultPicture"], data["ContactsJson"], data["ServerList"], data["Online"] == "true", data["autostart"] == "true",
data["tag"] != "v1-defaultPassword");
break;
case "ContactCreated":
EnvironmentConfig.debugLog("ContactCreated $data");
@ -159,16 +168,20 @@ class CwtchNotifier {
var senderHandle = data['RemotePeer'];
var senderImage = data['picture'];
var isAuto = data['Auto'] == "true";
String? contenthash = data['ContentHash'];
String contenthash = data['ContentHash'];
var selectedProfile = appState.selectedProfile == data["ProfileOnion"];
var selectedConversation = selectedProfile && appState.selectedConversation == identifier;
var notification = data["notification"];
if (selectedConversation && seenMessageCallback != null) {
seenMessageCallback!(data["ProfileOnion"]!, identifier, DateTime.now().toUtc());
}
if (notification == "SimpleEvent") {
notificationManager.notify(notificationSimple ?? "New Message");
notificationManager.notify(notificationSimple ?? "New Message", "", 0);
} else if (notification == "ContactInfo") {
var contact = profileCN.getProfile(data["ProfileOnion"])?.contactList.getContact(identifier);
notificationManager.notify((notificationConversationInfo ?? "New Message from %1").replaceFirst("%1", (contact?.nickname ?? senderHandle.toString())));
notificationManager.notify((notificationConversationInfo ?? "New Message from %1").replaceFirst("%1", (contact?.nickname ?? senderHandle.toString())), data["ProfileOnion"], identifier);
}
profileCN.getProfile(data["ProfileOnion"])?.newMessage(
@ -192,25 +205,14 @@ class CwtchNotifier {
var conversation = int.parse(data["ConversationID"]);
var messageID = int.parse(data["Index"]);
var contact = profileCN.getProfile(data["ProfileOnion"])?.contactList.getContact(conversation);
// We return -1 for protocol message acks if there is no message
if (messageID == -1) break;
var key = contact!.getMessageKeyOrFail(conversation, messageID);
if (key == null) break;
try {
var message = Provider.of<MessageMetadata>(key.currentContext!, listen: false);
message.ackd = true;
// We only ever see acks from authenticated peers.
// If the contact is marked as offline then override this - can happen when the contact is removed from the front
// end during syncing.
if (profileCN.getProfile(data["ProfileOnion"])?.contactList.getContact(conversation)!.isOnline() == false) {
profileCN.getProfile(data["ProfileOnion"])?.contactList.getContact(conversation)!.status = "Authenticated";
}
profileCN.getProfile(data["ProfileOnion"])?.contactList.getContact(conversation)!.ackCache(messageID);
} catch (e) {
// ignore, most likely cause is the key got optimized out...
// We only ever see acks from authenticated peers.
// If the contact is marked as offline then override this - can happen when the contact is removed from the front
// end during syncing.
if (profileCN.getProfile(data["ProfileOnion"])?.contactList.getContact(conversation)!.isOnline() == false) {
profileCN.getProfile(data["ProfileOnion"])?.contactList.getContact(conversation)!.status = "Authenticated";
}
profileCN.getProfile(data["ProfileOnion"])?.contactList.getContact(conversation)!.ackCache(messageID);
break;
case "NewMessageFromGroup":
var identifier = int.parse(data["ConversationID"]);
@ -222,7 +224,7 @@ class CwtchNotifier {
var contact = profileCN.getProfile(data["ProfileOnion"])?.contactList.getContact(identifier);
var currentTotal = contact!.totalMessages;
var isAuto = data['Auto'] == "true";
String? contenthash = data['ContentHash'];
String contenthash = data['ContentHash'];
var selectedProfile = appState.selectedProfile == data["ProfileOnion"];
var selectedConversation = selectedProfile && appState.selectedConversation == identifier;
var notification = data["notification"];
@ -240,12 +242,15 @@ class CwtchNotifier {
// and ensure that malicious contacts in groups can only set this timestamp to a value within the range of `last seen message time`
// and `local now`.
profileCN.getProfile(data["ProfileOnion"])?.newMessage(identifier, idx, timestampSent, senderHandle, senderImage, isAuto, data["Data"], contenthash, selectedProfile, selectedConversation);
if (selectedConversation && seenMessageCallback != null) {
seenMessageCallback!(data["ProfileOnion"]!, identifier, DateTime.now().toUtc());
}
if (notification == "SimpleEvent") {
notificationManager.notify(notificationSimple ?? "New Message");
notificationManager.notify(notificationSimple ?? "New Message", "", 0);
} else if (notification == "ContactInfo") {
var contact = profileCN.getProfile(data["ProfileOnion"])?.contactList.getContact(identifier);
notificationManager.notify((notificationConversationInfo ?? "New Message from %1").replaceFirst("%1", (contact?.nickname ?? senderHandle.toString())));
notificationManager.notify((notificationConversationInfo ?? "New Message from %1").replaceFirst("%1", (contact?.nickname ?? senderHandle.toString())), data["ProfileOnion"], identifier);
}
appState.notifyProfileUnread();
}
@ -259,12 +264,8 @@ class CwtchNotifier {
case "IndexedFailure":
var identifier = int.parse(data["ConversationID"]);
var contact = profileCN.getProfile(data["ProfileOnion"])?.contactList.getContact(identifier);
var idx = int.parse(data["Index"]);
var key = contact?.getMessageKeyOrFail(contact.identifier, idx);
if (key != null) {
var message = Provider.of<MessageMetadata>(key.currentContext!, listen: false);
message.error = true;
}
var messageID = int.parse(data["Index"]);
contact!.errCache(messageID);
break;
case "AppError":
EnvironmentConfig.debugLog("New App Error: $data");
@ -309,6 +310,18 @@ class CwtchNotifier {
case "UpdateServerInfo":
profileCN.getProfile(data["ProfileOnion"])?.replaceServers(data["ServerList"]);
break;
case "TokenManagerInfo":
try {
List<dynamic> associatedGroups = jsonDecode(data["Data"]);
int count = int.parse(data["ServerTokenCount"]);
associatedGroups.forEach((identifier) {
profileCN.getProfile(data["ProfileOnion"])?.contactList.getContact(int.parse(identifier.toString()))!.antispamTickets = count;
});
EnvironmentConfig.debugLog("update server token count for ${associatedGroups}, $count");
} catch (e) {
// No tokens in data...
}
break;
case "NewGroup":
String invite = data["GroupInvite"].toString();
if (invite.startsWith("torv3")) {
@ -332,7 +345,7 @@ class CwtchNotifier {
server: groupInvite["ServerHost"],
status: status,
isGroup: true,
lastMessageTime: DateTime.fromMillisecondsSinceEpoch(0)));
lastMessageTime: DateTime.now()));
profileCN.getProfile(data["ProfileOnion"])?.contactList.updateLastMessageTime(identifier, DateTime.fromMillisecondsSinceEpoch(0));
}
}

View File

@ -52,19 +52,31 @@ typedef StringFn = void Function(Pointer<Utf8> dir, int);
typedef string_string_to_void_function = Void Function(Pointer<Utf8> str, Int32 length, Pointer<Utf8> str2, Int32 length2);
typedef StringStringFn = void Function(Pointer<Utf8>, int, Pointer<Utf8>, int);
typedef string_string_to_string_function = Pointer<Utf8> Function(Pointer<Utf8> str, Int32 length, Pointer<Utf8> str2, Int32 length2);
typedef StringFromStringStringFn = Pointer<Utf8> Function(Pointer<Utf8>, int, Pointer<Utf8>, int);
typedef string_int_to_void_function = Void Function(Pointer<Utf8> str, Int32 length, Int32 handle);
typedef VoidFromStringIntFn = void Function(Pointer<Utf8>, int, int);
typedef get_json_blob_string_function = Pointer<Utf8> Function(Pointer<Utf8> str, Int32 length);
typedef GetJsonBlobStringFn = Pointer<Utf8> Function(Pointer<Utf8> str, int len);
typedef get_json_blob_from_string_int_string_function = Pointer<Utf8> Function(Pointer<Utf8>, Int32, Int32, Pointer<Utf8>, Int32);
typedef GetJsonBlobFromStrIntStrFn = Pointer<Utf8> Function(Pointer<Utf8>, int, int, Pointer<Utf8>, int);
//func GetMessage(profile_ptr *C.char, profile_len C.int, handle_ptr *C.char, handle_len C.int, message_index C.int) *C.char {
typedef get_json_blob_from_str_str_int_function = Pointer<Utf8> Function(Pointer<Utf8>, Int32, Pointer<Utf8>, Int32, Int32);
typedef GetJsonBlobFromStrStrIntFn = Pointer<Utf8> Function(Pointer<Utf8>, int, Pointer<Utf8>, int, int);
typedef get_json_blob_from_str_int_function = Pointer<Utf8> Function(Pointer<Utf8>, Int32, Int32);
typedef GetJsonBlobFromStrIntFn = Pointer<Utf8> Function(Pointer<Utf8>, int, int);
typedef get_json_blob_from_str_int_int_function = Pointer<Utf8> Function(Pointer<Utf8>, Int32, Int32, Int32);
typedef GetJsonBlobFromStrIntIntFn = Pointer<Utf8> Function(Pointer<Utf8>, int, int, int);
typedef get_json_blob_from_str_int_int_int_function = Pointer<Utf8> Function(Pointer<Utf8>, Int32, Int32, Int32, Int32);
typedef GetJsonBlobFromStrIntIntIntFn = Pointer<Utf8> Function(Pointer<Utf8>, int, int, int, int);
typedef get_json_blob_from_str_int_string_function = Pointer<Utf8> Function(Pointer<Utf8>, Int32, Int32, Pointer<Utf8>, Int32);
typedef GetJsonBlobFromStrIntStringFn = Pointer<Utf8> Function(
Pointer<Utf8>,
@ -93,6 +105,9 @@ typedef VoidFromStringIntIntFn = void Function(Pointer<Utf8>, int, int, int);
typedef appbus_events_function = Pointer<Utf8> Function();
typedef AppbusEventsFn = Pointer<Utf8> Function();
typedef void_to_string = Pointer<Utf8> Function();
typedef StringFromVoid = Pointer<Utf8> Function();
const String UNSUPPORTED_OS = "unsupported-os";
class CwtchFfi implements Cwtch {
@ -108,8 +123,11 @@ class CwtchFfi implements Cwtch {
} else if (Platform.isLinux) {
return "libCwtch.so";
} else if (Platform.isMacOS) {
print(dirname(Platform.script.path));
return "libCwtch.dylib";
if (Abi.current() == Abi.macosX64) {
return "libCwtch.x64.dylib";
} else {
return "libCwtch.arm64.dylib";
}
} else {
return UNSUPPORTED_OS;
}
@ -124,6 +142,7 @@ class CwtchFfi implements Cwtch {
}
library = DynamicLibrary.open(libraryPath);
cwtchNotifier = _cwtchNotifier;
cwtchNotifier.setMessageSeenCallback((String profile, int conversation, DateTime time) => {this.SetConversationAttribute(profile, conversation, LastMessageSeenTimeKey, time.toIso8601String())});
}
// ignore: non_constant_identifier_names
@ -134,20 +153,27 @@ class CwtchFfi implements Cwtch {
String cwtchDir = "";
if (Platform.isLinux) {
cwtchDir = envVars['CWTCH_HOME'] ?? path.join(envVars['HOME']!, ".cwtch");
if (await File("linux/tor").exists()) {
bundledTor = "linux/tor";
} else if (await File("lib/tor").exists()) {
bundledTor = "lib/tor";
} else if (await File(path.join(home, ".local/lib/cwtch/tor")).exists()) {
bundledTor = path.join(home, ".local/lib/cwtch/tor");
} else if (await File("/usr/lib/cwtch/tor").exists()) {
bundledTor = "/usr/lib/cwtch/tor";
home = envVars['HOME'] ?? "";
if (await File("linux/Tor/tor").exists()) {
bundledTor = "linux/Tor/tor";
} else if (await File("lib/Tor/tor").exists()) {
bundledTor = "lib/Tor/tor";
} else if (await File(path.join(home, ".local/lib/cwtch/Tor/tor")).exists()) {
bundledTor = path.join(home, ".local/lib/cwtch/Tor/tor");
} else if (await File("/usr/lib/cwtch/Tor/tor").exists()) {
bundledTor = "/usr/lib/cwtch/Tor/tor";
} else {
bundledTor = "tor";
}
} else if (Platform.isWindows) {
cwtchDir = envVars['CWTCH_DIR'] ?? path.join(envVars['UserProfile']!, ".cwtch");
bundledTor = "Tor\\Tor\\tor.exe";
String currentTor = path.join(Directory.current.absolute.path, "Tor\\Tor\\tor.exe");
if (await File(currentTor).exists()) {
bundledTor = currentTor;
} else {
String exeDir = path.dirname(Platform.resolvedExecutable);
bundledTor = path.join(exeDir, "Tor\\Tor\\tor.exe");
}
} else if (Platform.isMacOS) {
cwtchDir = envVars['CWTCH_HOME'] ?? path.join(envVars['HOME']!, "Library/Application Support/Cwtch");
if (await File("Cwtch.app/Contents/MacOS/Tor/tor.real").exists()) {
@ -196,8 +222,9 @@ class CwtchFfi implements Cwtch {
// ignore: non_constant_identifier_names
final StartCwtch = startCwtchC.asFunction<StartCwtchFn>();
final ut8CwtchDir = cwtchDir.toNativeUtf8();
StartCwtch(ut8CwtchDir, ut8CwtchDir.length, bundledTor.toNativeUtf8(), bundledTor.length);
final utf8CwtchDir = cwtchDir.toNativeUtf8();
StartCwtch(utf8CwtchDir, utf8CwtchDir.length, bundledTor.toNativeUtf8(), bundledTor.length);
malloc.free(utf8CwtchDir);
// Spawn an isolate to listen to events from libcwtch-go and then dispatch them when received on main thread to cwtchNotifier
cwtchIsolate = await Isolate.spawn(_checkAppbusEvents, _receivePort.sendPort);
@ -263,17 +290,35 @@ class CwtchFfi implements Cwtch {
}
// ignore: non_constant_identifier_names
void CreateProfile(String nick, String pass) {
var createProfileC = library.lookup<NativeFunction<void_from_string_string_function>>("c_CreateProfile");
void CreateProfile(String nick, String pass, bool autostart) {
var createProfileC = library.lookup<NativeFunction<void_from_string_string_byte_function>>("c_CreateProfile");
// ignore: non_constant_identifier_names
final CreateProfile = createProfileC.asFunction<VoidFromStringStringFn>();
final CreateProfile = createProfileC.asFunction<VoidFromStringStringByteFn>();
final utf8nick = nick.toNativeUtf8();
final ut8pass = pass.toNativeUtf8();
CreateProfile(utf8nick, utf8nick.length, ut8pass, ut8pass.length);
CreateProfile(utf8nick, utf8nick.length, ut8pass, ut8pass.length, autostart ? 1 : 0);
malloc.free(utf8nick);
malloc.free(ut8pass);
}
// ignore: non_constant_identifier_names
void ActivatePeerEngine(String profile) {
var activatePeerEngineC = library.lookup<NativeFunction<string_to_void_function>>("c_ActivatePeerEngine");
final ActivatePeerEngine = activatePeerEngineC.asFunction<StringFn>();
final ut8profile = profile.toNativeUtf8();
ActivatePeerEngine(ut8profile, ut8profile.length);
malloc.free(ut8profile);
}
// ignore: non_constant_identifier_names
void DeactivatePeerEngine(String profile) {
var deactivatePeerEngineC = library.lookup<NativeFunction<string_to_void_function>>("c_DeactivatePeerEngine");
final DeactivatePeerEngine = deactivatePeerEngineC.asFunction<StringFn>();
final ut8profile = profile.toNativeUtf8();
DeactivatePeerEngine(ut8profile, ut8profile.length);
malloc.free(ut8profile);
}
// ignore: non_constant_identifier_names
void LoadProfiles(String pass) {
var loadProfileC = library.lookup<NativeFunction<string_to_void_function>>("c_LoadProfiles");
@ -297,6 +342,20 @@ class CwtchFfi implements Cwtch {
return jsonMessage;
}
// ignore: non_constant_identifier_names
Future<dynamic> GetMessages(String profile, int handle, int index, int count) async {
var getMessagesC = library.lookup<NativeFunction<get_json_blob_from_str_int_int_int_function>>("c_GetMessages");
// ignore: non_constant_identifier_names
final GetMessages = getMessagesC.asFunction<GetJsonBlobFromStrIntIntIntFn>();
final utf8profile = profile.toNativeUtf8();
Pointer<Utf8> jsonMessageBytes = GetMessages(utf8profile, utf8profile.length, handle, index, count);
String jsonMessage = jsonMessageBytes.toDartString();
_UnsafeFreePointerAnyUseOfThisFunctionMustBeDoubleApproved(jsonMessageBytes);
malloc.free(utf8profile);
return jsonMessage;
}
@override
// ignore: non_constant_identifier_names
void SendProfileEvent(String onion, String json) {
@ -356,39 +415,48 @@ class CwtchFfi implements Cwtch {
@override
// ignore: non_constant_identifier_names
void SendMessage(String profileOnion, int contactHandle, String message) {
var sendMessage = library.lookup<NativeFunction<void_from_string_int_string_function>>("c_SendMessage");
Future<dynamic> SendMessage(String profileOnion, int contactHandle, String message) async {
var sendMessage = library.lookup<NativeFunction<get_json_blob_from_string_int_string_function>>("c_SendMessage");
// ignore: non_constant_identifier_names
final SendMessage = sendMessage.asFunction<VoidFromStringIntStringFn>();
final SendMessage = sendMessage.asFunction<GetJsonBlobFromStrIntStrFn>();
final u1 = profileOnion.toNativeUtf8();
final u3 = message.toNativeUtf8();
SendMessage(u1, u1.length, contactHandle, u3, u3.length);
Pointer<Utf8> jsonMessageBytes = SendMessage(u1, u1.length, contactHandle, u3, u3.length);
String jsonMessage = jsonMessageBytes.toDartString();
_UnsafeFreePointerAnyUseOfThisFunctionMustBeDoubleApproved(jsonMessageBytes);
malloc.free(u1);
malloc.free(u3);
return jsonMessage;
}
@override
// ignore: non_constant_identifier_names
void SendInvitation(String profileOnion, int contactHandle, int target) {
var sendInvitation = library.lookup<NativeFunction<void_from_string_int_int_function>>("c_SendInvitation");
Future<dynamic> SendInvitation(String profileOnion, int contactHandle, int target) async {
var sendInvitation = library.lookup<NativeFunction<get_json_blob_from_str_int_int_function>>("c_SendInvitation");
// ignore: non_constant_identifier_names
final SendInvitation = sendInvitation.asFunction<VoidFromStringIntIntFn>();
final SendInvitation = sendInvitation.asFunction<GetJsonBlobFromStrIntIntFn>();
final u1 = profileOnion.toNativeUtf8();
SendInvitation(u1, u1.length, contactHandle, target);
Pointer<Utf8> jsonMessageBytes = SendInvitation(u1, u1.length, contactHandle, target);
String jsonMessage = jsonMessageBytes.toDartString();
_UnsafeFreePointerAnyUseOfThisFunctionMustBeDoubleApproved(jsonMessageBytes);
malloc.free(u1);
return jsonMessage;
}
@override
// ignore: non_constant_identifier_names
void ShareFile(String profileOnion, int contactHandle, String filepath) {
var shareFile = library.lookup<NativeFunction<void_from_string_int_string_function>>("c_ShareFile");
Future<dynamic> ShareFile(String profileOnion, int contactHandle, String filepath) async {
var shareFile = library.lookup<NativeFunction<get_json_blob_from_string_int_string_function>>("c_ShareFile");
// ignore: non_constant_identifier_names
final ShareFile = shareFile.asFunction<VoidFromStringIntStringFn>();
final ShareFile = shareFile.asFunction<GetJsonBlobFromStrIntStrFn>();
final u1 = profileOnion.toNativeUtf8();
final u3 = filepath.toNativeUtf8();
ShareFile(u1, u1.length, contactHandle, u3, u3.length);
Pointer<Utf8> jsonMessageBytes = ShareFile(u1, u1.length, contactHandle, u3, u3.length);
String jsonMessage = jsonMessageBytes.toDartString();
_UnsafeFreePointerAnyUseOfThisFunctionMustBeDoubleApproved(jsonMessageBytes);
malloc.free(u1);
malloc.free(u3);
return jsonMessage;
}
@override
@ -456,15 +524,18 @@ class CwtchFfi implements Cwtch {
@override
// ignore: non_constant_identifier_names
void ImportBundle(String profileOnion, String bundle) {
var importBundle = library.lookup<NativeFunction<string_string_to_void_function>>("c_ImportBundle");
Future<dynamic> ImportBundle(String profileOnion, String bundle) async {
var importBundle = library.lookup<NativeFunction<string_string_to_string_function>>("c_ImportBundle");
// ignore: non_constant_identifier_names
final ImportBundle = importBundle.asFunction<VoidFromStringStringFn>();
final ImportBundle = importBundle.asFunction<StringFromStringStringFn>();
final u1 = profileOnion.toNativeUtf8();
final u2 = bundle.toNativeUtf8();
ImportBundle(u1, u1.length, u2, u2.length);
Pointer<Utf8> responsePtr = ImportBundle(u1, u1.length, u2, u2.length);
String response = responsePtr.toDartString();
_UnsafeFreePointerAnyUseOfThisFunctionMustBeDoubleApproved(responsePtr);
malloc.free(u1);
malloc.free(u2);
return response;
}
@override
@ -710,9 +781,14 @@ class CwtchFfi implements Cwtch {
}
@override
String defaultDownloadPath() {
String? defaultDownloadPath() {
Map<String, String> envVars = Platform.environment;
return path.join(envVars[Platform.isWindows ? 'UserProfile' : 'HOME']!, "Downloads");
String nominalPath = path.join(envVars[Platform.isWindows ? 'UserProfile' : 'HOME']!, "Downloads");
if (Directory(nominalPath).existsSync() == false) {
return Directory.current.path;
}
return nominalPath;
}
@override
@ -756,4 +832,79 @@ class CwtchFfi implements Cwtch {
cwtchNotifier.l10nInit(notificationSimple, notificationConversationInfo);
_isL10nInit = true;
}
@override
// ignore: non_constant_identifier_names
void ExportProfile(String profile, String file) {
final utf8profile = profile.toNativeUtf8();
final utf8file = file.toNativeUtf8();
var exportProfileC = library.lookup<NativeFunction<void_from_string_string_function>>("c_ExportProfile");
// ignore: non_constant_identifier_names
final ExportProfileFn = exportProfileC.asFunction<VoidFromStringStringFn>();
ExportProfileFn(utf8profile, utf8profile.length, utf8file, utf8file.length);
malloc.free(utf8profile);
malloc.free(utf8file);
}
@override
// ignore: non_constant_identifier_names
Future<String> ImportProfile(String file, String pass) async {
final utf8pass = pass.toNativeUtf8();
final utf8file = file.toNativeUtf8();
var exportProfileC = library.lookup<NativeFunction<string_string_to_string_function>>("c_ImportProfile");
// ignore: non_constant_identifier_names
final ExportProfileFn = exportProfileC.asFunction<StringFromStringStringFn>();
Pointer<Utf8> result = ExportProfileFn(utf8file, utf8file.length, utf8pass, utf8pass.length);
String importResult = result.toDartString();
_UnsafeFreePointerAnyUseOfThisFunctionMustBeDoubleApproved(result);
malloc.free(utf8pass);
malloc.free(utf8file);
return importResult;
}
@override
Future<String> GetDebugInfo() async {
var getDebugInfo = library.lookup<NativeFunction<void_to_string>>("c_GetDebugInfo");
final GetDebugInfo = getDebugInfo.asFunction<StringFromVoid>();
Pointer<Utf8> result = GetDebugInfo();
String debugResult = result.toDartString();
_UnsafeFreePointerAnyUseOfThisFunctionMustBeDoubleApproved(result);
return debugResult;
}
@override
Future<String> GetSharedFiles(String profile, int handle) async {
var getSharedFiles = library.lookup<NativeFunction<get_json_blob_from_str_int_function>>("c_GetSharedFiles");
final GetSharedFiles = getSharedFiles.asFunction<GetJsonBlobFromStrIntFn>();
final utf8profile = profile.toNativeUtf8();
Pointer<Utf8> jsonMessageBytes = GetSharedFiles(utf8profile, utf8profile.length, handle);
String jsonMessage = jsonMessageBytes.toDartString();
_UnsafeFreePointerAnyUseOfThisFunctionMustBeDoubleApproved(jsonMessageBytes);
malloc.free(utf8profile);
return jsonMessage;
}
@override
void RestartSharing(String profile, String filekey) {
var restartSharingC = library.lookup<NativeFunction<void_from_string_string_function>>("c_RestartSharing");
// ignore: non_constant_identifier_names
final RestartSharing = restartSharingC.asFunction<VoidFromStringStringFn>();
final utf8profile = profile.toNativeUtf8();
final ut8filekey = filekey.toNativeUtf8();
RestartSharing(utf8profile, utf8profile.length, ut8filekey, ut8filekey.length);
malloc.free(utf8profile);
malloc.free(ut8filekey);
}
@override
void StopSharing(String profile, String filekey) {
var stopSharingC = library.lookup<NativeFunction<void_from_string_string_function>>("c_StopSharing");
// ignore: non_constant_identifier_names
final StopSharing = stopSharingC.asFunction<VoidFromStringStringFn>();
final utf8profile = profile.toNativeUtf8();
final ut8filekey = filekey.toNativeUtf8();
StopSharing(utf8profile, utf8profile.length, ut8filekey, ut8filekey.length);
malloc.free(utf8profile);
malloc.free(ut8filekey);
}
}

View File

@ -35,6 +35,7 @@ class CwtchGomobile implements Cwtch {
CwtchGomobile(CwtchNotifier _cwtchNotifier) {
print("gomobile.dart: CwtchGomobile()");
cwtchNotifier = _cwtchNotifier;
cwtchNotifier.setMessageSeenCallback((String profile, int conversation, DateTime time) => {this.SetConversationAttribute(profile, conversation, LastMessageSeenTimeKey, time.toIso8601String())});
androidHomeDirectory = getApplicationDocumentsDirectory();
androidLibraryDir = appInfoPlatform.invokeMethod('getNativeLibDir');
@ -70,8 +71,18 @@ class CwtchGomobile implements Cwtch {
}
// ignore: non_constant_identifier_names
void CreateProfile(String nick, String pass) {
cwtchPlatform.invokeMethod("CreateProfile", {"nick": nick, "pass": pass});
void CreateProfile(String nick, String pass, bool autostart) {
cwtchPlatform.invokeMethod("CreateProfile", {"nick": nick, "pass": pass, "autostart": autostart});
}
// ignore: non_constant_identifier_names
void ActivatePeerEngine(String profile) {
cwtchPlatform.invokeMethod("ActivatePeerEngine", {"profile": profile});
}
// ignore: non_constant_identifier_names
void DeactivatePeerEngine(String profile) {
cwtchPlatform.invokeMethod("DeactivatePeerEngine", {"profile": profile});
}
// ignore: non_constant_identifier_names
@ -94,6 +105,11 @@ class CwtchGomobile implements Cwtch {
return cwtchPlatform.invokeMethod("GetMessageByID", {"ProfileOnion": profile, "conversation": conversation, "id": id});
}
// ignore: non_constant_identifier_names
Future<dynamic> GetMessages(String profile, int conversation, int index, int count) {
return cwtchPlatform.invokeMethod("GetMessages", {"ProfileOnion": profile, "conversation": conversation, "index": index, "count": count});
}
@override
// ignore: non_constant_identifier_names
void SendProfileEvent(String onion, String jsonEvent) {
@ -129,20 +145,20 @@ class CwtchGomobile implements Cwtch {
@override
// ignore: non_constant_identifier_names
void SendMessage(String profileOnion, int conversation, String message) {
cwtchPlatform.invokeMethod("SendMessage", {"ProfileOnion": profileOnion, "conversation": conversation, "message": message});
Future<dynamic> SendMessage(String profileOnion, int conversation, String message) {
return cwtchPlatform.invokeMethod("SendMessage", {"ProfileOnion": profileOnion, "conversation": conversation, "message": message});
}
@override
// ignore: non_constant_identifier_names
void SendInvitation(String profileOnion, int conversation, int target) {
cwtchPlatform.invokeMethod("SendInvitation", {"ProfileOnion": profileOnion, "conversation": conversation, "target": target});
Future<dynamic> SendInvitation(String profileOnion, int conversation, int target) {
return cwtchPlatform.invokeMethod("SendInvitation", {"ProfileOnion": profileOnion, "conversation": conversation, "target": target});
}
@override
// ignore: non_constant_identifier_names
void ShareFile(String profileOnion, int conversation, String filepath) {
cwtchPlatform.invokeMethod("ShareFile", {"ProfileOnion": profileOnion, "conversation": conversation, "filepath": filepath});
Future<dynamic> ShareFile(String profileOnion, int conversation, String filepath) {
return cwtchPlatform.invokeMethod("ShareFile", {"ProfileOnion": profileOnion, "conversation": conversation, "filepath": filepath});
}
@override
@ -184,8 +200,8 @@ class CwtchGomobile implements Cwtch {
@override
// ignore: non_constant_identifier_names
void ImportBundle(String profileOnion, String bundle) {
cwtchPlatform.invokeMethod("ImportBundle", {"ProfileOnion": profileOnion, "bundle": bundle});
Future<dynamic> ImportBundle(String profileOnion, String bundle) {
return cwtchPlatform.invokeMethod("ImportBundle", {"ProfileOnion": profileOnion, "bundle": bundle});
}
@override
@ -288,7 +304,7 @@ class CwtchGomobile implements Cwtch {
}
@override
String defaultDownloadPath() {
String? defaultDownloadPath() {
return this.androidHomeDirectoryStr;
}
@ -308,4 +324,38 @@ class CwtchGomobile implements Cwtch {
cwtchPlatform.invokeMethod("L10nInit", {"notificationSimple": notificationSimple, "notificationConversationInfo": notificationConversationInfo});
_isL10nInit = true;
}
@override
// ignore: non_constant_identifier_names
void ExportProfile(String profile, String file) {
cwtchPlatform.invokeMethod("ExportProfile", {"ProfileOnion": profile, "file": file});
}
@override
// ignore: non_constant_identifier_names
Future<dynamic> ImportProfile(String file, String pass) {
return cwtchPlatform.invokeMethod("ImportProfile", {"file": file, "pass": pass});
}
@override
Future GetDebugInfo() {
// FIXME: getDebugInfo is less useful for Android so for now
// we don't implement it
return Future.value("{}");
}
@override
Future GetSharedFiles(String profile, int handle) {
return cwtchPlatform.invokeMethod("GetSharedFiles", {"ProfileOnion": profile, "conversation": handle});
}
@override
void RestartSharing(String profile, String filekey) {
cwtchPlatform.invokeMethod("RestartSharing", {"ProfileOnion": profile, "filekey": filekey});
}
@override
void StopSharing(String profile, String filekey) {
cwtchPlatform.invokeMethod("StopSharing", {"ProfileOnion": profile, "filekey": filekey});
}
}

View File

@ -1,5 +1,5 @@
/// Flutter icons CwtchIcons
/// Copyright (C) 2021 by Open Privacy Research Society via fluttericon.com, fontello.com
/// Flutter icons Cwtch
/// Copyright (C) 2021-2022 by Open Privacy Research Society
/// This font was generated by FlutterIcon.com, which is derived from Fontello.
///
/// To use this font, place it in your fonts/ directory and include the
@ -7,9 +7,9 @@
///
/// flutter:
/// fonts:
/// - family: CwtchIcons
/// - family: Cwtch
/// fonts:
/// - asset: assets/fonts/CwtchIcons.ttf
/// - asset: fonts/Cwtch.ttf
///
///
///
@ -18,103 +18,112 @@ import 'package:flutter/widgets.dart';
class CwtchIcons {
CwtchIcons._();
static const _kFontFam = 'CwtchIcons';
static const _kFontFam = 'Cwtch';
static const String? _kFontPkg = null;
static const IconData arrow_back_24px = IconData(0xe800, fontFamily: _kFontFam, fontPackage: _kFontPkg);
static const IconData attach_file_24px = IconData(0xe801, fontFamily: _kFontFam, fontPackage: _kFontPkg);
static const IconData block_peer = IconData(0xe802, fontFamily: _kFontFam, fontPackage: _kFontPkg);
static const IconData block_unknown = IconData(0xe803, fontFamily: _kFontFam, fontPackage: _kFontPkg);
static const IconData block_24px = IconData(0xe804, fontFamily: _kFontFam, fontPackage: _kFontPkg);
static const IconData brightness_5_24px = IconData(0xe805, fontFamily: _kFontFam, fontPackage: _kFontPkg);
static const IconData camera_alt_24px = IconData(0xe806, fontFamily: _kFontFam, fontPackage: _kFontPkg);
static const IconData change_language = IconData(0xe807, fontFamily: _kFontFam, fontPackage: _kFontPkg);
static const IconData change_theme = IconData(0xe808, fontFamily: _kFontFam, fontPackage: _kFontPkg);
static const IconData chat_bubble_empty_24px = IconData(0xe809, fontFamily: _kFontFam, fontPackage: _kFontPkg);
static const IconData chat_bubble_24px = IconData(0xe80a, fontFamily: _kFontFam, fontPackage: _kFontPkg);
static const IconData chat_seetings_24px = IconData(0xe80b, fontFamily: _kFontFam, fontPackage: _kFontPkg);
static const IconData check_24px = IconData(0xe80c, fontFamily: _kFontFam, fontPackage: _kFontPkg);
static const IconData chevron_left_24px = IconData(0xe80d, fontFamily: _kFontFam, fontPackage: _kFontPkg);
static const IconData clear_24px = IconData(0xe80e, fontFamily: _kFontFam, fontPackage: _kFontPkg);
static const IconData content_copy_24px = IconData(0xe80f, fontFamily: _kFontFam, fontPackage: _kFontPkg);
static const IconData create_group = IconData(0xe810, fontFamily: _kFontFam, fontPackage: _kFontPkg);
static const IconData cwtch_knott = IconData(0xe811, fontFamily: _kFontFam, fontPackage: _kFontPkg);
static const IconData dark_mode_24px = IconData(0xe812, fontFamily: _kFontFam, fontPackage: _kFontPkg);
static const IconData delete_24px = IconData(0xe813, fontFamily: _kFontFam, fontPackage: _kFontPkg);
static const IconData dns_24px = IconData(0xe814, fontFamily: _kFontFam, fontPackage: _kFontPkg);
static const IconData drag_indicator_24px = IconData(0xe815, fontFamily: _kFontFam, fontPackage: _kFontPkg);
static const IconData edit_24px = IconData(0xe816, fontFamily: _kFontFam, fontPackage: _kFontPkg);
static const IconData enable_experiments = IconData(0xe817, fontFamily: _kFontFam, fontPackage: _kFontPkg);
static const IconData enable_groups = IconData(0xe818, fontFamily: _kFontFam, fontPackage: _kFontPkg);
static const IconData eye_closed = IconData(0xe819, fontFamily: _kFontFam, fontPackage: _kFontPkg);
static const IconData eye_open = IconData(0xe81a, fontFamily: _kFontFam, fontPackage: _kFontPkg);
static const IconData favorite_24dp = IconData(0xe81b, fontFamily: _kFontFam, fontPackage: _kFontPkg);
static const IconData favorite_black_24dp_broken = IconData(0xe81c, fontFamily: _kFontFam, fontPackage: _kFontPkg);
static const IconData favorite_black_24dp_brokenhalf = IconData(0xe81d, fontFamily: _kFontFam, fontPackage: _kFontPkg);
static const IconData favorite_black_24dp_malformed = IconData(0xe81e, fontFamily: _kFontFam, fontPackage: _kFontPkg);
static const IconData favorite_black_24dp_sad = IconData(0xe81f, fontFamily: _kFontFam, fontPackage: _kFontPkg);
static const IconData group_add_24px = IconData(0xe820, fontFamily: _kFontFam, fontPackage: _kFontPkg);
static const IconData group_settings_24px = IconData(0xe821, fontFamily: _kFontFam, fontPackage: _kFontPkg);
static const IconData groups_24px = IconData(0xe822, fontFamily: _kFontFam, fontPackage: _kFontPkg);
static const IconData info_24px = IconData(0xe823, fontFamily: _kFontFam, fontPackage: _kFontPkg);
static const IconData join_group = IconData(0xe824, fontFamily: _kFontFam, fontPackage: _kFontPkg);
static const IconData list_black_24dp = IconData(0xe825, fontFamily: _kFontFam, fontPackage: _kFontPkg);
static const IconData lock_open_24px = IconData(0xe826, fontFamily: _kFontFam, fontPackage: _kFontPkg);
static const IconData lock_24px = IconData(0xe827, fontFamily: _kFontFam, fontPackage: _kFontPkg);
static const IconData maps_ugc_24px = IconData(0xe828, fontFamily: _kFontFam, fontPackage: _kFontPkg);
static const IconData menu_24px = IconData(0xe829, fontFamily: _kFontFam, fontPackage: _kFontPkg);
static const IconData message_24px = IconData(0xe82a, fontFamily: _kFontFam, fontPackage: _kFontPkg);
static const IconData mood_24px = IconData(0xe82b, fontFamily: _kFontFam, fontPackage: _kFontPkg);
static const IconData more_vert_24px = IconData(0xe82c, fontFamily: _kFontFam, fontPackage: _kFontPkg);
static const IconData negative_heart_24px = IconData(0xe82d, fontFamily: _kFontFam, fontPackage: _kFontPkg);
static const IconData onion_off = IconData(0xe82e, fontFamily: _kFontFam, fontPackage: _kFontPkg);
static const IconData onion_on = IconData(0xe82f, fontFamily: _kFontFam, fontPackage: _kFontPkg);
static const IconData onion_waiting = IconData(0xe830, fontFamily: _kFontFam, fontPackage: _kFontPkg);
static const IconData peer_history = IconData(0xe831, fontFamily: _kFontFam, fontPackage: _kFontPkg);
static const IconData peer_settings_24px = IconData(0xe832, fontFamily: _kFontFam, fontPackage: _kFontPkg);
static const IconData person_add_alt_1_24px = IconData(0xe833, fontFamily: _kFontFam, fontPackage: _kFontPkg);
static const IconData person_add_24px = IconData(0xe834, fontFamily: _kFontFam, fontPackage: _kFontPkg);
static const IconData person_24px = IconData(0xe835, fontFamily: _kFontFam, fontPackage: _kFontPkg);
static const IconData push_pin_black_24dp = IconData(0xe836, fontFamily: _kFontFam, fontPackage: _kFontPkg);
static const IconData push_pin_24px = IconData(0xe837, fontFamily: _kFontFam, fontPackage: _kFontPkg);
static const IconData search_24px = IconData(0xe838, fontFamily: _kFontFam, fontPackage: _kFontPkg);
static const IconData send_24px = IconData(0xe839, fontFamily: _kFontFam, fontPackage: _kFontPkg);
static const IconData settings_24px = IconData(0xe83a, fontFamily: _kFontFam, fontPackage: _kFontPkg);
static const IconData signal_cellular_4_bar_24px = IconData(0xe83b, fontFamily: _kFontFam, fontPackage: _kFontPkg);
static const IconData signal_cellular_alt_24px = IconData(0xe83c, fontFamily: _kFontFam, fontPackage: _kFontPkg);
static const IconData signal_cellular_connected_no_internet_4_bar_24px = IconData(0xe83d, fontFamily: _kFontFam, fontPackage: _kFontPkg);
static const IconData signal_cellular_off_24px = IconData(0xe83e, fontFamily: _kFontFam, fontPackage: _kFontPkg);
static const IconData swap_horiz_24px = IconData(0xe83f, fontFamily: _kFontFam, fontPackage: _kFontPkg);
static const IconData sync_disabled_24px = IconData(0xe840, fontFamily: _kFontFam, fontPackage: _kFontPkg);
static const IconData sync_problem_24px = IconData(0xe841, fontFamily: _kFontFam, fontPackage: _kFontPkg);
static const IconData sync_24px = IconData(0xe842, fontFamily: _kFontFam, fontPackage: _kFontPkg);
static const IconData syncing_01 = IconData(0xe843, fontFamily: _kFontFam, fontPackage: _kFontPkg);
static const IconData syncing_02 = IconData(0xe844, fontFamily: _kFontFam, fontPackage: _kFontPkg);
static const IconData syncing_03 = IconData(0xe845, fontFamily: _kFontFam, fontPackage: _kFontPkg);
static const IconData toggle_on_24px = IconData(0xe846, fontFamily: _kFontFam, fontPackage: _kFontPkg);
static const IconData vpn_key_24px = IconData(0xe847, fontFamily: _kFontFam, fontPackage: _kFontPkg);
static const IconData account_blocked = IconData(0xe848, fontFamily: _kFontFam, fontPackage: _kFontPkg);
static const IconData account_circle_24px = IconData(0xe849, fontFamily: _kFontFam, fontPackage: _kFontPkg);
static const IconData account_circle_24px_lines = IconData(0xe84a, fontFamily: _kFontFam, fontPackage: _kFontPkg);
static const IconData account_circle_24px_lines_thin___blocked = IconData(0xe84b, fontFamily: _kFontFam, fontPackage: _kFontPkg);
static const IconData account_circle_24px_user = IconData(0xe84c, fontFamily: _kFontFam, fontPackage: _kFontPkg);
static const IconData add_circle_24px = IconData(0xe84d, fontFamily: _kFontFam, fontPackage: _kFontPkg);
static const IconData add_group = IconData(0xe84e, fontFamily: _kFontFam, fontPackage: _kFontPkg);
static const IconData add_peer = IconData(0xe84f, fontFamily: _kFontFam, fontPackage: _kFontPkg);
static const IconData add_24px = IconData(0xe850, fontFamily: _kFontFam, fontPackage: _kFontPkg);
static const IconData address_copy_2 = IconData(0xe852, fontFamily: _kFontFam, fontPackage: _kFontPkg);
static const IconData address = IconData(0xe856, fontFamily: _kFontFam, fontPackage: _kFontPkg);
static const IconData streamer_bunnymask = IconData(0xe85b, fontFamily: _kFontFam, fontPackage: _kFontPkg);
static const IconData streamer_ghost = IconData(0xe85c, fontFamily: _kFontFam, fontPackage: _kFontPkg);
static const IconData cancel_schedule_send_black_24dp = IconData(0xe85d, fontFamily: _kFontFam, fontPackage: _kFontPkg);
static const IconData more_horiz_black_24dp = IconData(0xe85e, fontFamily: _kFontFam, fontPackage: _kFontPkg);
static const IconData dns_black_add_24dp = IconData(0xe85f, fontFamily: _kFontFam, fontPackage: _kFontPkg);
static const IconData dns_black_24dp = IconData(0xe860, fontFamily: _kFontFam, fontPackage: _kFontPkg);
static const IconData info_black_24dp = IconData(0xe861, fontFamily: _kFontFam, fontPackage: _kFontPkg);
static const IconData accept_unknown = IconData(0xe862, fontFamily: _kFontFam, fontPackage: _kFontPkg);
static const IconData eye_closed_1 = IconData(0xe863, fontFamily: _kFontFam, fontPackage: _kFontPkg);
static const IconData eye_open_1 = IconData(0xe864, fontFamily: _kFontFam, fontPackage: _kFontPkg);
static const IconData send_invite = IconData(0xe888, fontFamily: _kFontFam, fontPackage: _kFontPkg);
static const IconData leave_group = IconData(0xe88a, fontFamily: _kFontFam, fontPackage: _kFontPkg);
static const IconData leave_chat = IconData(0xe88b, fontFamily: _kFontFam, fontPackage: _kFontPkg);
static const IconData account_blocked = IconData(0xe800, fontFamily: _kFontFam, fontPackage: _kFontPkg);
static const IconData account_circle_24px = IconData(0xe801, fontFamily: _kFontFam, fontPackage: _kFontPkg);
static const IconData account_circle_24px_lines = IconData(0xe802, fontFamily: _kFontFam, fontPackage: _kFontPkg);
static const IconData account_circle_24px_lines_thin___blocked = IconData(0xe803, fontFamily: _kFontFam, fontPackage: _kFontPkg);
static const IconData account_circle_24px_user = IconData(0xe804, fontFamily: _kFontFam, fontPackage: _kFontPkg);
static const IconData add_circle_24px = IconData(0xe805, fontFamily: _kFontFam, fontPackage: _kFontPkg);
static const IconData add_group = IconData(0xe806, fontFamily: _kFontFam, fontPackage: _kFontPkg);
static const IconData add_peer = IconData(0xe807, fontFamily: _kFontFam, fontPackage: _kFontPkg);
static const IconData add_24px = IconData(0xe808, fontFamily: _kFontFam, fontPackage: _kFontPkg);
static const IconData address = IconData(0xe809, fontFamily: _kFontFam, fontPackage: _kFontPkg);
static const IconData address_copy = IconData(0xe80a, fontFamily: _kFontFam, fontPackage: _kFontPkg);
static const IconData alternate_email_black_24dp = IconData(0xe80b, fontFamily: _kFontFam, fontPackage: _kFontPkg);
static const IconData arrow_back_24px = IconData(0xe80c, fontFamily: _kFontFam, fontPackage: _kFontPkg);
static const IconData attach_file_24px = IconData(0xe80d, fontFamily: _kFontFam, fontPackage: _kFontPkg);
static const IconData attached_file = IconData(0xe80e, fontFamily: _kFontFam, fontPackage: _kFontPkg);
static const IconData block_peer = IconData(0xe80f, fontFamily: _kFontFam, fontPackage: _kFontPkg);
static const IconData block_unknown = IconData(0xe810, fontFamily: _kFontFam, fontPackage: _kFontPkg);
static const IconData block_24px = IconData(0xe811, fontFamily: _kFontFam, fontPackage: _kFontPkg);
static const IconData brightness_5_24px = IconData(0xe812, fontFamily: _kFontFam, fontPackage: _kFontPkg);
static const IconData camera_alt_24px = IconData(0xe813, fontFamily: _kFontFam, fontPackage: _kFontPkg);
static const IconData cancel_schedule_send_black_24dp = IconData(0xe814, fontFamily: _kFontFam, fontPackage: _kFontPkg);
static const IconData change_language = IconData(0xe815, fontFamily: _kFontFam, fontPackage: _kFontPkg);
static const IconData change_theme = IconData(0xe816, fontFamily: _kFontFam, fontPackage: _kFontPkg);
static const IconData chat_bubble_empty_24px = IconData(0xe817, fontFamily: _kFontFam, fontPackage: _kFontPkg);
static const IconData chat_bubble_24px = IconData(0xe818, fontFamily: _kFontFam, fontPackage: _kFontPkg);
static const IconData chat_seetings_24px = IconData(0xe819, fontFamily: _kFontFam, fontPackage: _kFontPkg);
static const IconData check_24px = IconData(0xe81b, fontFamily: _kFontFam, fontPackage: _kFontPkg);
static const IconData chevron_left_24px = IconData(0xe81c, fontFamily: _kFontFam, fontPackage: _kFontPkg);
static const IconData clear_24px = IconData(0xe81d, fontFamily: _kFontFam, fontPackage: _kFontPkg);
static const IconData content_copy_24px = IconData(0xe81e, fontFamily: _kFontFam, fontPackage: _kFontPkg);
static const IconData copy_address = IconData(0xe81f, fontFamily: _kFontFam, fontPackage: _kFontPkg);
static const IconData create_group = IconData(0xe820, fontFamily: _kFontFam, fontPackage: _kFontPkg);
static const IconData cwtch_knott = IconData(0xe821, fontFamily: _kFontFam, fontPackage: _kFontPkg);
static const IconData dark_mode_24px = IconData(0xe822, fontFamily: _kFontFam, fontPackage: _kFontPkg);
static const IconData delete_24px = IconData(0xe823, fontFamily: _kFontFam, fontPackage: _kFontPkg);
static const IconData dns_black_24dp = IconData(0xe824, fontFamily: _kFontFam, fontPackage: _kFontPkg);
static const IconData dns_black_add_24dp = IconData(0xe825, fontFamily: _kFontFam, fontPackage: _kFontPkg);
static const IconData dns_24px = IconData(0xe826, fontFamily: _kFontFam, fontPackage: _kFontPkg);
static const IconData drag_indicator_24px = IconData(0xe827, fontFamily: _kFontFam, fontPackage: _kFontPkg);
static const IconData edit_24px = IconData(0xe828, fontFamily: _kFontFam, fontPackage: _kFontPkg);
static const IconData enable_experiments = IconData(0xe829, fontFamily: _kFontFam, fontPackage: _kFontPkg);
static const IconData enable_groups = IconData(0xe82a, fontFamily: _kFontFam, fontPackage: _kFontPkg);
static const IconData eye_closed = IconData(0xe82b, fontFamily: _kFontFam, fontPackage: _kFontPkg);
static const IconData eye_open = IconData(0xe82c, fontFamily: _kFontFam, fontPackage: _kFontPkg);
static const IconData favorite_24dp = IconData(0xe82d, fontFamily: _kFontFam, fontPackage: _kFontPkg);
static const IconData favorite_black_24dp_broken = IconData(0xe82e, fontFamily: _kFontFam, fontPackage: _kFontPkg);
static const IconData favorite_black_24dp_brokenhalf = IconData(0xe82f, fontFamily: _kFontFam, fontPackage: _kFontPkg);
static const IconData favorite_black_24dp_malformed = IconData(0xe830, fontFamily: _kFontFam, fontPackage: _kFontPkg);
static const IconData favorite_black_24dp_sad = IconData(0xe831, fontFamily: _kFontFam, fontPackage: _kFontPkg);
static const IconData folder_black_24dp = IconData(0xe832, fontFamily: _kFontFam, fontPackage: _kFontPkg);
static const IconData group_add_24px = IconData(0xe833, fontFamily: _kFontFam, fontPackage: _kFontPkg);
static const IconData group_settings_24px = IconData(0xe834, fontFamily: _kFontFam, fontPackage: _kFontPkg);
static const IconData groups_24px = IconData(0xe835, fontFamily: _kFontFam, fontPackage: _kFontPkg);
static const IconData image_black_24dp = IconData(0xe836, fontFamily: _kFontFam, fontPackage: _kFontPkg);
static const IconData info_black_24dp = IconData(0xe837, fontFamily: _kFontFam, fontPackage: _kFontPkg);
static const IconData info_24px = IconData(0xe838, fontFamily: _kFontFam, fontPackage: _kFontPkg);
static const IconData join_group = IconData(0xe839, fontFamily: _kFontFam, fontPackage: _kFontPkg);
static const IconData leave_chat = IconData(0xe83a, fontFamily: _kFontFam, fontPackage: _kFontPkg);
static const IconData leave_group = IconData(0xe83b, fontFamily: _kFontFam, fontPackage: _kFontPkg);
static const IconData link_ = IconData(0xe83c, fontFamily: _kFontFam, fontPackage: _kFontPkg);
static const IconData list_black_24dp = IconData(0xe83d, fontFamily: _kFontFam, fontPackage: _kFontPkg);
static const IconData lock_open_24px = IconData(0xe83e, fontFamily: _kFontFam, fontPackage: _kFontPkg);
static const IconData lock_24px = IconData(0xe83f, fontFamily: _kFontFam, fontPackage: _kFontPkg);
static const IconData maps_ugc_24px = IconData(0xe841, fontFamily: _kFontFam, fontPackage: _kFontPkg);
static const IconData menu_24px = IconData(0xe842, fontFamily: _kFontFam, fontPackage: _kFontPkg);
static const IconData message_24px = IconData(0xe843, fontFamily: _kFontFam, fontPackage: _kFontPkg);
static const IconData mood_24px = IconData(0xe844, fontFamily: _kFontFam, fontPackage: _kFontPkg);
static const IconData more_horiz_black_24dp = IconData(0xe845, fontFamily: _kFontFam, fontPackage: _kFontPkg);
static const IconData more_vert_24px = IconData(0xe846, fontFamily: _kFontFam, fontPackage: _kFontPkg);
static const IconData negative_heart_24px = IconData(0xe848, fontFamily: _kFontFam, fontPackage: _kFontPkg);
static const IconData onion_off = IconData(0xe849, fontFamily: _kFontFam, fontPackage: _kFontPkg);
static const IconData onion_on = IconData(0xe84a, fontFamily: _kFontFam, fontPackage: _kFontPkg);
static const IconData onion_waiting = IconData(0xe84b, fontFamily: _kFontFam, fontPackage: _kFontPkg);
static const IconData peer_history = IconData(0xe84c, fontFamily: _kFontFam, fontPackage: _kFontPkg);
static const IconData peer_settings_24px = IconData(0xe84d, fontFamily: _kFontFam, fontPackage: _kFontPkg);
static const IconData person_add_alt_1_24px = IconData(0xe84e, fontFamily: _kFontFam, fontPackage: _kFontPkg);
static const IconData person_add_24px = IconData(0xe84f, fontFamily: _kFontFam, fontPackage: _kFontPkg);
static const IconData person_24px = IconData(0xe850, fontFamily: _kFontFam, fontPackage: _kFontPkg);
static const IconData push_pin_black_24dp = IconData(0xe852, fontFamily: _kFontFam, fontPackage: _kFontPkg);
static const IconData push_pin_24px = IconData(0xe853, fontFamily: _kFontFam, fontPackage: _kFontPkg);
static const IconData search_24px = IconData(0xe855, fontFamily: _kFontFam, fontPackage: _kFontPkg);
static const IconData send_invite = IconData(0xe856, fontFamily: _kFontFam, fontPackage: _kFontPkg);
static const IconData send_24px = IconData(0xe857, fontFamily: _kFontFam, fontPackage: _kFontPkg);
static const IconData settings_24px = IconData(0xe858, fontFamily: _kFontFam, fontPackage: _kFontPkg);
static const IconData signal_cellular_4_bar_24px = IconData(0xe859, fontFamily: _kFontFam, fontPackage: _kFontPkg);
static const IconData signal_cellular_alt_24px = IconData(0xe85a, fontFamily: _kFontFam, fontPackage: _kFontPkg);
static const IconData signal_cellular_connected_no_internet_4_bar_24px = IconData(0xe85b, fontFamily: _kFontFam, fontPackage: _kFontPkg);
static const IconData signal_cellular_off_24px = IconData(0xe85c, fontFamily: _kFontFam, fontPackage: _kFontPkg);
static const IconData streamer_bunnymask = IconData(0xe85d, fontFamily: _kFontFam, fontPackage: _kFontPkg);
static const IconData streamer_ghost = IconData(0xe85e, fontFamily: _kFontFam, fontPackage: _kFontPkg);
static const IconData swap_horiz_24px = IconData(0xe85f, fontFamily: _kFontFam, fontPackage: _kFontPkg);
static const IconData sync_disabled_24px = IconData(0xe860, fontFamily: _kFontFam, fontPackage: _kFontPkg);
static const IconData sync_problem_24px = IconData(0xe861, fontFamily: _kFontFam, fontPackage: _kFontPkg);
static const IconData sync_24px = IconData(0xe862, fontFamily: _kFontFam, fontPackage: _kFontPkg);
static const IconData syncing_01 = IconData(0xe863, fontFamily: _kFontFam, fontPackage: _kFontPkg);
static const IconData syncing_02 = IconData(0xe864, fontFamily: _kFontFam, fontPackage: _kFontPkg);
static const IconData syncing_03 = IconData(0xe865, fontFamily: _kFontFam, fontPackage: _kFontPkg);
static const IconData toggle_on_24px = IconData(0xe866, fontFamily: _kFontFam, fontPackage: _kFontPkg);
static const IconData vpn_key_24px = IconData(0xe867, fontFamily: _kFontFam, fontPackage: _kFontPkg);
static const IconData accept_unknown = IconData(0xe868, fontFamily: _kFontFam, fontPackage: _kFontPkg);
static const IconData view_replies = IconData(0xe869, fontFamily: _kFontFam, fontPackage: _kFontPkg);
static const IconData anti_spam_2 = IconData(0xe86b, fontFamily: _kFontFam, fontPackage: _kFontPkg);
static const IconData manage_files = IconData(0xe86c, fontFamily: _kFontFam, fontPackage: _kFontPkg);
static const IconData attached_file_2 = IconData(0xe86d, fontFamily: _kFontFam, fontPackage: _kFontPkg);
static const IconData anti_spam_3 = IconData(0xe86e, fontFamily: _kFontFam, fontPackage: _kFontPkg);
}

View File

@ -5,23 +5,14 @@ class ErrorHandler extends ChangeNotifier {
static const String successErrorType = "success";
// Add Contact Specific Errors...
static const String addContactErrorPrefix = "addcontact";
static const String changePasswordErrorPrefix = "changepassword";
static const String invalidImportStringErrorType = "invalid_import_string";
static const String contactAlreadyExistsErrorType = "contact_already_exists";
bool invalidImportStringError = false;
bool contactAlreadyExistsError = false;
bool explicitAddContactSuccess = false;
// ChangePassword
bool changePasswordError = false;
bool explicitChangePasswordSuccess = false;
// Import Bundle Specific Errors
static const String importBundleErrorPrefix = "importBundle";
bool importBundleError = false;
bool importBundleSuccess = false;
static const String deleteProfileErrorPrefix = "deleteprofile";
bool deleteProfileError = false;
bool deleteProfileSuccess = false;
@ -31,13 +22,6 @@ class ErrorHandler extends ChangeNotifier {
bool deletedServerSuccess = false;
reset() {
invalidImportStringError = false;
contactAlreadyExistsError = false;
explicitAddContactSuccess = false;
importBundleError = false;
importBundleSuccess = false;
deleteProfileError = false;
deleteProfileSuccess = false;
@ -57,12 +41,6 @@ class ErrorHandler extends ChangeNotifier {
String errorType = parts[1];
switch (prefix) {
case addContactErrorPrefix:
handleAddContactError(errorType);
break;
case importBundleErrorPrefix:
handleImportBundleError(errorType);
break;
case deleteProfileErrorPrefix:
handleDeleteProfileError(errorType);
break;
@ -76,41 +54,6 @@ class ErrorHandler extends ChangeNotifier {
notifyListeners();
}
handleAddContactError(String errorType) {
// Reset add contact errors
invalidImportStringError = false;
contactAlreadyExistsError = false;
explicitAddContactSuccess = false;
switch (errorType) {
case invalidImportStringErrorType:
invalidImportStringError = true;
break;
case contactAlreadyExistsErrorType:
contactAlreadyExistsError = true;
break;
case successErrorType:
explicitAddContactSuccess = true;
importBundleSuccess = true;
break;
}
}
handleImportBundleError(String errorType) {
// Reset add contact errors
importBundleError = false;
importBundleSuccess = false;
switch (errorType) {
case successErrorType:
importBundleSuccess = true;
break;
default:
importBundleError = true;
break;
}
}
handleDeleteProfileError(String errorType) {
// Reset add contact errors
deleteProfileError = false;

View File

@ -0,0 +1,625 @@
import 'package:flutter/material.dart';
// Flutter doesn't supported Luxembourgish, or Welsh, so we have to provide our
// own delegate for built-in widget translations...
class MaterialLocalizationDelegate extends LocalizationsDelegate<MaterialLocalizations> {
@override
bool isSupported(Locale locale) {
return locale.languageCode == "lb" || locale.languageCode == "cy";
}
@override
Future<MaterialLocalizations> load(Locale locale) async {
switch (locale.languageCode) {
case "cy":
return MaterialLocalizationCy();
case "lb":
return MaterialLocalizationLu();
}
throw UnimplementedError("unknown language");
}
@override
bool shouldReload(covariant LocalizationsDelegate<MaterialLocalizations> old) {
return false;
}
}
// Support Welsh, Default to English
class MaterialLocalizationCy extends DefaultMaterialLocalizations {}
// Support Luxembourgish, Default to German
class MaterialLocalizationLu extends MaterialLocalizations {
@override
String get aboutListTileTitleRaw => r'Über $applicationName';
@override
String get alertDialogLabel => 'Benachrichtigung';
@override
String get anteMeridiemAbbreviation => 'AM';
@override
String get backButtonTooltip => 'Zurück';
@override
String get calendarModeButtonLabel => 'Zum Kalender wechseln';
@override
String get cancelButtonLabel => 'ABBRECHEN';
@override
String get closeButtonLabel => 'SCHLIEẞEN';
@override
String get closeButtonTooltip => 'Schließen';
@override
String get collapsedIconTapHint => 'Maximieren';
@override
String get continueButtonLabel => 'WEITER';
@override
String get copyButtonLabel => 'Kopieren';
@override
String get cutButtonLabel => 'Ausschneiden';
@override
String get dateHelpText => 'tt.mm.jjjj';
@override
String get dateInputLabel => 'Datum eingeben';
@override
String get dateOutOfRangeLabel => 'Außerhalb des Zeitraums.';
@override
String get datePickerHelpText => 'DATUM AUSWÄHLEN';
@override
String get dateRangeEndDateSemanticLabelRaw => r'Enddatum $fullDate';
@override
String get dateRangeEndLabel => 'Enddatum';
@override
String get dateRangePickerHelpText => 'ZEITRAUM AUSWÄHLEN';
@override
String get dateRangeStartDateSemanticLabelRaw => r'Startdatum $fullDate';
@override
String get dateRangeStartLabel => 'Startdatum';
@override
String get dateSeparator => '.';
@override
String get deleteButtonTooltip => 'Löschen';
@override
String get dialModeButtonLabel => 'Zur Uhrzeitauswahl wechseln';
@override
String get dialogLabel => 'Dialogfeld';
@override
String get drawerLabel => 'Navigationsmenü';
@override
String get expandedIconTapHint => 'Minimieren';
@override
String get firstPageTooltip => 'Erste Seite';
@override
String get hideAccountsLabel => 'Konten ausblenden';
@override
String get inputDateModeButtonLabel => 'Zur Texteingabe wechseln';
@override
String get inputTimeModeButtonLabel => 'Zum Texteingabemodus wechseln';
@override
String get invalidDateFormatLabel => 'Ungültiges Format.';
@override
String get invalidDateRangeLabel => 'Ungültiger Zeitraum.';
@override
String get invalidTimeLabel => 'Geben Sie eine gültige Uhrzeit ein';
@override
String get lastPageTooltip => 'Letzte Seite';
@override
String? get licensesPackageDetailTextFew => null;
@override
String? get licensesPackageDetailTextMany => null;
@override
String? get licensesPackageDetailTextOne => '1 Lizenz';
@override
String get licensesPackageDetailTextOther => r'$licenseCount Lizenzen';
@override
String? get licensesPackageDetailTextTwo => null;
@override
String? get licensesPackageDetailTextZero => 'No licenses';
@override
String get licensesPageTitle => 'Lizenzen';
@override
String get modalBarrierDismissLabel => 'Schließen';
@override
String get moreButtonTooltip => 'Mehr';
@override
String get nextMonthTooltip => 'Nächster Monat';
@override
String get nextPageTooltip => 'Nächste Seite';
@override
String get okButtonLabel => 'OK';
@override
String get openAppDrawerTooltip => 'Navigationsmenü öffnen';
@override
String get pageRowsInfoTitleRaw => r'$firstRow$lastRow von $rowCount';
@override
String get pageRowsInfoTitleApproximateRaw => r'$firstRow$lastRow von etwa $rowCount';
@override
String get pasteButtonLabel => 'Einsetzen';
@override
String get popupMenuLabel => 'Pop-up-Menü';
@override
String get postMeridiemAbbreviation => 'PM';
@override
String get previousMonthTooltip => 'Vorheriger Monat';
@override
String get previousPageTooltip => 'Vorherige Seite';
@override
String get refreshIndicatorSemanticLabel => 'Aktualisieren';
@override
String? get remainingTextFieldCharacterCountFew => null;
@override
String? get remainingTextFieldCharacterCountMany => null;
@override
String? get remainingTextFieldCharacterCountOne => 'Noch 1 Zeichen';
@override
String get remainingTextFieldCharacterCountOther => r'Noch $remainingCount Zeichen';
@override
String? get remainingTextFieldCharacterCountTwo => null;
@override
String? get remainingTextFieldCharacterCountZero => 'TBD';
@override
String get reorderItemDown => 'Nach unten verschieben';
@override
String get reorderItemLeft => 'Nach links verschieben';
@override
String get reorderItemRight => 'Nach rechts verschieben';
@override
String get reorderItemToEnd => 'An das Ende verschieben';
@override
String get reorderItemToStart => 'An den Anfang verschieben';
@override
String get reorderItemUp => 'Nach oben verschieben';
@override
String get rowsPerPageTitle => 'Zeilen pro Seite:';
@override
String get saveButtonLabel => 'SPEICHERN';
@override
ScriptCategory get scriptCategory => ScriptCategory.englishLike;
@override
String get searchFieldLabel => 'Suchen';
@override
String get selectAllButtonLabel => 'Alle auswählen';
@override
String get selectYearSemanticsLabel => 'Jahr auswählen';
@override
String? get selectedRowCountTitleFew => null;
@override
String? get selectedRowCountTitleMany => null;
@override
String? get selectedRowCountTitleOne => '1 Element ausgewählt';
@override
String get selectedRowCountTitleOther => r'$selectedRowCount Elemente ausgewählt';
@override
String? get selectedRowCountTitleTwo => null;
@override
String? get selectedRowCountTitleZero => 'Keine Objekte ausgewählt';
@override
String get showAccountsLabel => 'Konten anzeigen';
@override
String get showMenuTooltip => 'Menü anzeigen';
@override
String get signedInLabel => 'Angemeldet';
@override
String get tabLabelRaw => r'Tab $tabIndex von $tabCount';
@override
TimeOfDayFormat get timeOfDayFormatRaw => TimeOfDayFormat.HH_colon_mm;
@override
String get timePickerDialHelpText => 'UHRZEIT AUSWÄHLEN';
@override
String get timePickerHourLabel => 'Stunde';
@override
String get timePickerHourModeAnnouncement => 'Stunden auswählen';
@override
String get timePickerInputHelpText => 'ZEIT EINGEBEN';
@override
String get timePickerMinuteLabel => 'Minute';
@override
String get timePickerMinuteModeAnnouncement => 'Minuten auswählen';
@override
String get unspecifiedDate => 'Datum';
@override
String get unspecifiedDateRange => 'Zeitraum';
@override
String get viewLicensesButtonLabel => 'LIZENZEN ANZEIGEN';
// ***** NEW *****
@override
String get keyboardKeyAlt => 'Alt';
@override
String get keyboardKeyAltGraph => 'AltGr';
@override
String get keyboardKeyBackspace => 'Backspace';
@override
String get keyboardKeyCapsLock => 'Caps Lock';
@override
String get keyboardKeyChannelDown => 'Kanal Erof';
@override
String get keyboardKeyChannelUp => 'Kanal Up';
@override
String get keyboardKeyControl => 'Ctrl';
@override
String get keyboardKeyDelete => 'Del';
@override
String get keyboardKeyEisu => 'Eisū';
@override
String get keyboardKeyEject => 'Eject';
@override
String get keyboardKeyEnd => 'End';
@override
String get keyboardKeyEscape => 'Esc';
@override
String get keyboardKeyFn => 'Fn';
@override
String get keyboardKeyHangulMode => 'Hangul Mode';
@override
String get keyboardKeyHanjaMode => 'Hanja Mode';
@override
String get keyboardKeyHankaku => 'Hankaku';
@override
String get keyboardKeyHiragana => 'Hiragana';
@override
String get keyboardKeyHiraganaKatakana => 'Hiragana Katakana';
@override
String get keyboardKeyHome => 'Home';
@override
String get keyboardKeyInsert => 'Insert';
@override
String get keyboardKeyKanaMode => 'Kana Mode';
@override
String get keyboardKeyKanjiMode => 'Kanji Mode';
@override
String get keyboardKeyKatakana => 'Katakana';
@override
String get keyboardKeyMeta => 'Meta';
@override
String get keyboardKeyMetaMacOs => 'Command';
@override
String get keyboardKeyMetaWindows => 'Win';
@override
String get keyboardKeyNumLock => 'Num Lock';
@override
String get keyboardKeyNumpad0 => 'Num 0';
@override
String get keyboardKeyNumpad1 => 'Num 1';
@override
String get keyboardKeyNumpad2 => 'Num 2';
@override
String get keyboardKeyNumpad3 => 'Num 3';
@override
String get keyboardKeyNumpad4 => 'Num 4';
@override
String get keyboardKeyNumpad5 => 'Num 5';
@override
String get keyboardKeyNumpad6 => 'Num 6';
@override
String get keyboardKeyNumpad7 => 'Num 7';
@override
String get keyboardKeyNumpad8 => 'Num 8';
@override
String get keyboardKeyNumpad9 => 'Num 9';
@override
String get keyboardKeyNumpadAdd => 'Num +';
@override
String get keyboardKeyNumpadComma => 'Num ,';
@override
String get keyboardKeyNumpadDecimal => 'Num .';
@override
String get keyboardKeyNumpadDivide => 'Num /';
@override
String get keyboardKeyNumpadEnter => 'Num Enter';
@override
String get keyboardKeyNumpadEqual => 'Num =';
@override
String get keyboardKeyNumpadMultiply => 'Num *';
@override
String get keyboardKeyNumpadParenLeft => 'Num (';
@override
String get keyboardKeyNumpadParenRight => 'Num )';
@override
String get keyboardKeyNumpadSubtract => 'Num -';
@override
String get keyboardKeyPageDown => 'PgDown';
@override
String get keyboardKeyPageUp => 'PgUp';
@override
String get keyboardKeyPower => 'Power';
@override
String get keyboardKeyPowerOff => 'Power Off';
@override
String get keyboardKeyPrintScreen => 'Print Screen';
@override
String get keyboardKeyRomaji => 'Romaji';
@override
String get keyboardKeyScrollLock => 'Scroll Lock';
@override
String get keyboardKeySelect => 'Select';
@override
String get keyboardKeySpace => 'Spasie';
@override
String get keyboardKeyZenkaku => 'Zenkaku';
@override
String get keyboardKeyZenkakuHankaku => 'Zenkaku Hankaku';
@override
String aboutListTileTitle(String applicationName) {
return aboutListTileTitleRaw.replaceFirst("$applicationName", applicationName);
}
@override
String dateRangeEndDateSemanticLabel(String formattedDate) {
// TODO: implement dateRangeEndDateSemanticLabel
throw UnimplementedError();
}
@override
String dateRangeStartDateSemanticLabel(String formattedDate) {
// TODO: implement dateRangeStartDateSemanticLabel
throw UnimplementedError();
}
@override
// TODO: implement firstDayOfWeekIndex
int get firstDayOfWeekIndex => throw UnimplementedError();
@override
String formatCompactDate(DateTime date) {
// TODO: implement formatCompactDate
throw UnimplementedError();
}
@override
String formatDecimal(int number) {
// TODO: implement formatDecimal
throw UnimplementedError();
}
@override
String formatFullDate(DateTime date) {
// TODO: implement formatFullDate
throw UnimplementedError();
}
@override
String formatHour(TimeOfDay timeOfDay, {bool alwaysUse24HourFormat = false}) {
// TODO: implement formatHour
throw UnimplementedError();
}
@override
String formatMediumDate(DateTime date) {
// TODO: implement formatMediumDate
throw UnimplementedError();
}
@override
String formatMinute(TimeOfDay timeOfDay) {
// TODO: implement formatMinute
throw UnimplementedError();
}
@override
String formatMonthYear(DateTime date) {
// TODO: implement formatMonthYear
throw UnimplementedError();
}
@override
String formatShortDate(DateTime date) {
// TODO: implement formatShortDate
throw UnimplementedError();
}
@override
String formatShortMonthDay(DateTime date) {
// TODO: implement formatShortMonthDay
throw UnimplementedError();
}
@override
String formatTimeOfDay(TimeOfDay timeOfDay, {bool alwaysUse24HourFormat = false}) {
// TODO: implement formatTimeOfDay
throw UnimplementedError();
}
@override
String formatYear(DateTime date) {
// TODO: implement formatYear
throw UnimplementedError();
}
@override
String licensesPackageDetailText(int licenseCount) {
// TODO: implement licensesPackageDetailText
throw UnimplementedError();
}
@override
// TODO: implement narrowWeekdays
List<String> get narrowWeekdays => throw UnimplementedError();
@override
String pageRowsInfoTitle(int firstRow, int lastRow, int rowCount, bool rowCountIsApproximate) {
// TODO: implement pageRowsInfoTitle
throw UnimplementedError();
}
@override
DateTime? parseCompactDate(String? inputString) {
// TODO: implement parseCompactDate
throw UnimplementedError();
}
@override
String remainingTextFieldCharacterCount(int remaining) {
return remaining.toString();
}
@override
String selectedRowCountTitle(int selectedRowCount) {
return selectedRowCount.toString();
}
@override
String tabLabel({required int tabIndex, required int tabCount}) {
// TODO: implement tabLabel
throw UnimplementedError();
}
@override
TimeOfDayFormat timeOfDayFormat({bool alwaysUse24HourFormat = false}) {
// TODO: implement timeOfDayFormat
throw UnimplementedError();
}
@override
// TODO: implement menuBarMenuLabel
String get menuBarMenuLabel => throw UnimplementedError();
}

367
lib/l10n/intl_cy.arb Normal file
View File

@ -0,0 +1,367 @@
{
"@@locale": "cy",
"@@last_modified": "2022-12-05T21:06:07+01:00",
"profileEnabledDescription": "Start or stop the profile",
"profileAutostartDescription": "Controls if the profile will be automatically launched on startup",
"profileEnabled": "Enable",
"profileAutostartLabel": "Autostart",
"localePtBr": "Brazilian Portuguese \/ Português do Brasil",
"localeNl": "Dutch \/ Dutch",
"experimentQRCodeDescription": "QR Code support allows sharing data (such as profile identity) by QR Codes",
"enableExperimentQRCode": "QR Codes",
"shareMenuQRCode": "Show QR Code",
"shareProfileMenuTooltop": "Share profile via...",
"acquiredTicketsFromServer": "Antispam Challenge Complete",
"acquiringTicketsFromServer": "Performing Antispam Challenge",
"errorDownloadDirectoryDoesNotExist": "Filesharing cannot be enabled because the Download Folder has not been set, or is set to a folder that does not exist.",
"localeTr": "Tyrceg \/ Türk",
"localeIt": "Eidaleg \/ Italiana",
"tooltipUnpinConversation": "Unpin conversation from the top of \"Conversations\"",
"tooltipPinConversation": "Pin conversation to the top of \"Conversations\"",
"replyingTo": "Replying to %1",
"fileDownloadUnavailable": "This file appears unavailable for download. The sender may have disabled downloads for this file.",
"messageNoReplies": "There are no replies to this message.",
"headingReplies": "Replies",
"viewReplies": "View replies to this message",
"restartFileShare": "Start Sharing File",
"stopSharingFile": "Stop Sharing File",
"manageSharedFiles": "Manage Shared Files",
"localeDe": "Almaeneg \/ Deutsch",
"localePt": "Portiwgaleg \/ Portuguesa",
"localeRo": "Rwmaneg \/ Română",
"localeEl": "Groeg \/ Ελληνικά",
"localeLb": "Lwcsembwrg \/ Lëtzebuergesch",
"localeRU": "Rwsieg \/ Русский",
"localeCy": "Cymraeg \/ Cymraeg",
"localePl": "Pwylaidd \/ Polski",
"localeFr": "Ffrangeg \/ Français",
"localeEs": "Sbaeneg \/ Español",
"localeNo": "Norwyaidd \/ Norsk",
"localeDa": "Daneg \/ Dansk",
"localeEn": "Saesneg \/ English",
"tooltipBoldText": "Beiddgar",
"tooltipCode": "Cod \/ Monospace",
"exportProfileTooltip": "Gwneud copi wrth gefn o'r proffil hwn i ffeil wedi'i hamgryptio. Gellir mewngludo'r ffeil wedi'i hamgryptio i ap Cwtch arall.",
"settingAndroidPowerExemption": "Android Anwybyddu Optimeiddio Batri",
"messageFormattingDescription": "Galluogi fformatio testun cyfoethog mewn negeseuon wedi'u harddangos e.e. **beiddgar** a *italig*",
"tooltipBackToMessageEditing": "Yn ôl i Olygu Negeseuon",
"clickableLinksWarning": "Bydd agor yr URL hwn yn lansio cais y tu allan i Cwtch a gall ddatgelu metadata neu beryglu diogelwch Cwtch fel arall. Dim ond agor URLs gan bobl rydych chi'n ymddiried ynddyn nhw. Ydych chi'n siŵr eich bod am barhau?",
"settingsAndroidPowerReenablePopup": "Does dim modd ail-alluogi Optimeiddio Batri o fewn Cwtch. Ewch i Android \/ Gosodiadau \/ Apps \/ Cwtch \/ Batri a gosod Defnydd i 'Optimized'",
"tooltipItalicize": "Italig",
"tooltipSuperscript": "Uwchysgrif",
"settingAndroidPowerExemptionDescription": "Dewisol: Gofynnwch i Android eithrio Cwtch rhag rheoli pŵer optimized. Bydd hyn yn arwain at well sefydlogrwydd ar draul mwy o ddefnydd o fatri.",
"successfullyImportedProfile": "Proffil wedi'i Fewngludo'n Llwyddiannus: %profile",
"thisFeatureRequiresGroupExpermientsToBeEnabled": "Mae'r nodwedd hon yn gofyn i'r Arbrawf Grwpiau gael ei alluogi mewn Gosodiadau",
"tooltipPreviewFormatting": "Rhagolwg Fformatio Negeseuon",
"clickableLinkError": "Gwall wrth geisio agor URL",
"importProfileTooltip": "Defnyddiwch gopi wrth gefn Cwtch wedi'i amgryptio i gyflwyno proffil a grëwyd mewn achos arall o Cwtch.",
"tooltipStrikethrough": "Strikethrough",
"tooltipSubscript": "Is-sgript",
"settingImagePreviewsDescription": "Bydd delweddau a Lluniau Proffil yn cael eu lawrlwytho a'u rhagolwg yn awtomatig. Rydym yn argymell nad ydych yn galluogi'r Arbrawf hwn os ydych yn defnyddio Cwtch gyda chysylltiadau diymwad.",
"formattingExperiment": "Fformatio Neges",
"clickableLinkOpen": "Agor URL",
"clickableLinksCopy": "Copïo URL",
"shuttingDownApp": "Wrthi'n cau...",
"failedToImportProfile": "Gwall Wrth Fewnforio Proffil",
"importProfile": "Proffil Mewnforio",
"exportProfile": "Proffil Allforio",
"okButton": "OK",
"deleteConfirmLabel": "Teipiwch DILEU i gadarnhau",
"deleteConfirmText": "DILEU",
"successfullAddedContact": "Wedi llwyddo i ychwanegu: ",
"serverMetricsLabel": "Metrigau Gweinydd",
"manageKnownServersLong": "Rheoli Gweinyddwyr Hysbys",
"manageKnownServersButton": "Rheoli Gweinyddwyr Hysbys",
"groupsOnThisServerLabel": "Grwpiau rydw i'n eu cynnal ar y gweinydd hwn",
"importLocalServerSelectText": "Dewiswch Gweinyddwr Lleol",
"importLocalServerLabel": "Mewnforio gweinydd a letyir yn lleol",
"enterCurrentPasswordForDeleteServer": "Rhowch y cyfrinair cyfredol i ddileu'r gweinydd hwn",
"settingServersDescription": "Mae'r arbrawf gweinyddion cynnal yn galluogi cynnal a rheoli gweinyddion Cwtch",
"settingServers": "Gweinyddwyr Cynnal",
"serversManagerTitleLong": "Gweinyddwyr Rydych chi'n eu Cynnal",
"serverAutostartDescription": "Yn rheoli a fydd y rhaglen yn lansio'r gweinydd yn awtomatig ar y dechrau",
"settingUIColumnLandscape": "Colofnau UI yn y Modd Tirwedd",
"settingUIColumnPortrait": "Colofnau UI yn y Modd Portread",
"addNewItem": "Ychwanegu eitem newydd at y rhestr",
"defaultScalingText": "Testun maint rhagosodedig (ffactor graddfa:",
"zoomLabel": "Chwyddo rhyngwyneb (yn effeithio ar faint testun a botymau yn bennaf)",
"torSettingsEnabledAdvancedDescription": "Defnyddiwch wasanaeth Tor presennol ar eich system, neu newidiwch baramedrau Gwasanaeth Cwtch Tor",
"torSettingsCustomControlPortDescription": "Defnyddiwch borthladd wedi'i deilwra ar gyfer cysylltiadau rheoli i'r dirprwy Tor",
"torSettingsUseCustomTorServiceConfiguration": "Defnyddiwch Ffurfweddiad Gwasanaeth Custom Tor (torrc)",
"fileSharingSettingsDownloadFolderDescription": "Pan fydd ffeiliau'n cael eu llwytho i lawr yn awtomatig (ee ffeiliau delwedd, pan fydd rhagolygon delwedd yn cael eu galluogi) mae angen lleoliad rhagosodedig i lawrlwytho'r ffeiliau iddo.",
"deleteServerConfirmBtn": "Mewn gwirionedd dileu gweinydd",
"deleteServerSuccess": "Wedi dileu gweinydd yn llwyddiannus",
"enterServerPassword": "Rhowch gyfrinair i ddatgloi gweinydd",
"unlockProfileTip": "Crëwch neu ddatgloi proffil i ddechrau!",
"unlockServerTip": "Crëwch neu ddatgloi gweinydd i ddechrau!",
"addServerTooltip": "Ychwanegu gweinydd newydd",
"serversManagerTitleShort": "Gweinyddion",
"saveServerButton": "Cadw Gweinydd",
"serverEnabledDescription": "Dechreuwch neu stopiwch y gweinydd",
"serverAutostartLabel": "Autostart",
"serverEnabled": "Gweinydd Galluogi",
"serverDescriptionDescription": "Ni fydd eich disgrifiad o'r gweinydd at ddefnydd rheoli personol yn unig byth yn cael ei rannu",
"editServerTitle": "Golygu Gweinydd",
"addServerTitle": "Ychwanegu Gweinydd",
"settingUIColumnOptionSame": "Yr un peth â gosodiad modd portread",
"tooltipRejectContactRequest": "Gwrthod y cais cyswllt hwn",
"addServerFirst": "Mae angen i chi ychwanegu gweinydd cyn y gallwch greu grŵp",
"tooltipOpenSettings": "Agorwch y cwarel gosodiadau",
"reallyLeaveThisGroupPrompt": "Ydych chi'n siŵr eich bod am adael y sgwrs hon? Bydd yr holl negeseuon a phriodoleddau yn cael eu dileu.",
"tooltipUnlockProfiles": "Datgloi proffiliau wedi'u hamgryptio trwy nodi eu cyfrinair.",
"tooltipAddContact": "Ychwanegu cyswllt neu sgwrs newydd",
"invalidImportString": "Llinyn mewnforio annilys",
"addListItem": "Ychwanegu Eitem Rhestr Newydd",
"savePeerHistoryDescription": "Yn penderfynu a ddylid dileu unrhyw hanes sy'n gysylltiedig â'r cyswllt.",
"todoPlaceholder": "Todo...",
"contactGoto": "Mynd i sgwrs gyda % 1",
"copyServerKeys": "Copïo allweddi",
"torSettingsCustomSocksPort": "Porthladd SOCKS Custom",
"torSettingsCustomSocksPortDescription": "Defnyddiwch borth arbennig ar gyfer cysylltiadau data i'r dirprwy Tor",
"torSettingsCustomControlPort": "Porthladd Rheoli Custom",
"fileSharingSettingsDownloadFolderTooltip": "Porwch i ddewis ffolder ddiofyn wahanol ar gyfer ffeiliau wedi'u llwytho i lawr.",
"descriptionACNCircuitInfo": "Gwybodaeth fanwl am y llwybr y mae'r rhwydwaith cyfathrebu dienw yn ei ddefnyddio i gysylltu â'r sgwrs hon.",
"torSettingsEnabledCacheDescription": "Cadwch y consensws Tor sydd wedi'i lawrlwytho ar hyn o bryd i'w ailddefnyddio y tro nesaf y bydd Cwtch yn cael ei agor. Bydd hyn yn caniatáu i Tor gychwyn yn gyflymach. Pan fydd wedi'i analluogi, bydd Cwtch yn cael gwared ar ddata wedi'i storio wrth gychwyn.",
"tooltipSelectACustomProfileImage": "Dewiswch Delwedd Proffil Custom",
"notificationPolicyOptIn": "Optio i Mewn",
"conversationNotificationPolicyOptIn": "Optio i Mewn",
"notificationPolicySettingLabel": "Polisi Hysbysu",
"notificationContentSettingLabel": "Cynnwys Hysbysiad",
"notificationPolicySettingDescription": "Yn rheoli'r ymddygiad hysbysu cais diofyn",
"notificationContentSettingDescription": "Yn rheoli cynnwys hysbysiadau sgwrs",
"conversationNotificationPolicySettingLabel": "Polisi Hysbysiadau Sgwrs",
"conversationNotificationPolicySettingDescription": "Rheoli ymddygiad hysbysu ar gyfer y sgwrs hon",
"fileCheckingStatus": "Gwirio statws llwytho i lawr",
"verfiyResumeButton": "Dilysu\/ailddechrau",
"serverDescriptionLabel": "Disgrifiad Gweinydd",
"dontSavePeerHistory": "Dileu Hanes",
"yourServers": "Eich Gweinyddwyr",
"yourProfiles": "Eich Proffiliau",
"fileSavedTo": "Cadwyd i",
"fileInterrupted": "Bylchog",
"manageKnownServersShort": "Gweinyddion",
"serverTotalMessagesLabel": "Cyfanswm Negeseuon",
"serverConnectionsLabel": "Cysylltiad",
"torSettingsEnableCache": "Cache Consensws Tor",
"notificationPolicyDefaultAll": "Diofyn Pawb",
"tooltipRemoveThisQuotedMessage": "Dileu'r neges a ddyfynnwyd.",
"settingUIColumnDouble14Ratio": "Dwbl (1:4)",
"settingUIColumnDouble12Ratio": "Dwbl (1:2)",
"settingUIColumnSingle": "Sengl",
"inviteToGroup": "Rydych wedi cael gwahoddiad i ymuno â grŵp:",
"titleManageServers": "Rheoli Gweinyddwyr",
"titleManageProfiles": "Rheoli Proffiliau Cwtch",
"titleManageContacts": "Sgyrsiau",
"contactAlreadyExists": "Cyswllt Eisoes Yn Bod",
"blockUnknownLabel": "Rhwystro Cysylltiadau Anhysbys",
"cwtchSettingsTitle": "Gosodiadau Cwtch",
"unlock": "Datgloi",
"saveBtn": "Arbed",
"savePeerHistory": "Achub Hanes",
"inviteToGroupLabel": "Gwahodd i grŵp",
"blockBtn": "Rhwystro Cyswllt",
"viewServerInfo": "Gwybodaeth Gweinydd",
"serverConnectivityDisconnected": "Gweinydd wedi'i Ddatgysylltu",
"serverConnectivityConnected": "Gweinydd wedi'i Gysylltiedig",
"serverInfo": "Gwybodaeth Gweinydd",
"server": "Gweinydd",
"descriptionStreamerMode": "Os caiff ei droi ymlaen, mae'r opsiwn hwn yn gwneud yr ap yn fwy gweledol preifat ar gyfer ffrydio neu gyflwyno gyda, er enghraifft, cuddio proffil a chyfeiriadau cyswllt",
"serverAddress": "Cyfeiriad y Gweinydd",
"copyAddress": "Copïo Cyfeiriad",
"descriptionBlockUnknownConnections": "Os caiff ei droi ymlaen, bydd yr opsiwn hwn yn cau'n awtomatig cysylltiadau gan ddefnyddwyr Cwtch nad ydynt wedi'u hychwanegu at eich rhestr cysylltiadau.",
"descriptionExperimentsGroups": "Mae'r arbrawf grŵp yn caniatáu i Cwtch gysylltu â seilwaith gweinydd heb ei ymddiried i hwyluso cyfathrebu â mwy nag un cyswllt.",
"descriptionExperiments": "Mae arbrofion Cwtch yn nodweddion optio i mewn dewisol syn ychwanegu swyddogaethau ychwanegol at Cwtch a allai fod ag ystyriaethau preifatrwydd gwahanol ir sgwrs draddodiadol syn gwrthsefyll metadata 1:1 e.e. sgwrs grŵp, integreiddio bot ac ati.",
"conversationSettings": "Gosodiadau Sgwrsio",
"versionBuilddate": "Fersiwn: % 1 Adeiladwyd ar: % 2",
"copiedToClipboardNotification": "Wedi'i gopïo i'r Clipfwrdd",
"displayNameLabel": "Enw Arddangos",
"groupNameLabel": "Enw'r Grŵp",
"serverNotSynced": "Wrthi'n cysoni Negeseuon Newydd (Gall hyn gymryd peth amser)...",
"serverSynced": "Cysoni",
"invitationLabel": "Gwahoddiad",
"search": "Chwilio...",
"tooltipAcceptContactRequest": "Derbyn y cais cyswllt hwn.",
"addContactConfirm": "Ychwanegu cyswllt %1",
"pasteAddressToAddContact": "Gludwch gyfeiriad cwtch, gwahoddiad neu fwndel allweddol yma i ychwanegu sgwrs newydd",
"titlePlaceholder": "teitl...",
"postNewBulletinLabel": "Postio bwletin newydd",
"newBulletinLabel": "Bwletin Newydd",
"joinGroup": "Ymunwch â'r grŵp",
"createGroup": "Creu grŵp",
"addPeer": "Ychwanegu Cyswllt",
"peerAddress": "Cyfeiriad",
"joinGroupTab": "Ymunwch â grŵp",
"addPeerTab": "Ychwanegu cyswllt",
"profileOnionLabel": "Anfonwch y cyfeiriad hwn at bobl rydych chi am gysylltu â nhw",
"tooltipReplyToThisMessage": "Ymateb i'r neges hon",
"addContact": "Ychwanegu cyswllt",
"themeNameCwtch": "Cwtch",
"leaveConversation": "Gadael y Sgwrs Hon",
"notificationNewMessageFromGroup": "Neges newydd mewn grŵp!",
"plainServerDescription": "Rydym yn argymell eich bod yn diogelu eich proffiliau Cwtch gyda chyfrinair. Os nad ydych yn gosod cyfrinair ar y proffil hwn yna mae'n bosibl y bydd unrhyw un sydd â mynediad i'r ddyfais hon yn gallu cyrchu gwybodaeth am y proffil hwn, gan gynnwys cysylltiadau, negeseuon ac allweddi cryptograffig sensitif.",
"encryptedServerDescription": "Mae amgryptio proffil gyda chyfrinair yn ei amddiffyn rhag pobl eraill a allai ddefnyddio'r ddyfais hon hefyd. Ni ellir dadgryptio, arddangos na chyrchu proffiliau wedi'u hamgryptio nes bod y cyfrinair cywir wedi'i fewnbynnu i'w datgloi.",
"fieldDescriptionLabel": "Disgrifiad",
"conversationNotificationPolicyDefault": "Diofyn",
"conversationNotificationPolicyNever": "Byth",
"settingGroupBehaviour": "Ymddygiad",
"settingsGroupAppearance": "Ymddangosiad",
"settingsGroupExperiments": "Arbrofion",
"notificationContentSimpleEvent": "Digwyddiad Plaen",
"notificationContentContactInfo": "Gwybodaeth am Sgyrsiau",
"newMessageNotificationSimple": "Neges Newydd",
"newMessageNotificationConversationInfo": "Neges Newydd gan %1",
"retrievingManifestMessage": "Wrthi'n nôl gwybodaeth ffeil...",
"streamerModeLabel": "Streamer Cyflwyno",
"blockUnknownConnectionsEnabledDescription": "Mae cysylltiadau o gysylltiadau anhysbys wedi'u rhwystro. Gallwch newid hyn mewn Gosodiadau",
"encryptedProfileDescription": "Mae amgryptio proffil gyda chyfrinair yn ei amddiffyn rhag pobl eraill a allai ddefnyddio'r ddyfais hon hefyd. Ni ellir dadgryptio, arddangos na chyrchu proffiliau wedi'u hamgryptio nes bod y cyfrinair cywir wedi'i fewnbynnu i'w datgloi.",
"plainProfileDescription": "Rydym yn argymell eich bod yn diogelu eich proffiliau Cwtch gyda chyfrinair. Os nad ydych yn gosod cyfrinair ar y proffil hwn yna mae'n bosibl y bydd unrhyw un sydd â mynediad i'r ddyfais hon yn gallu cyrchu gwybodaeth am y proffil hwn, gan gynnwys cysylltiadau, negeseuon ac allweddi cryptograffig sensitif.",
"groupInviteSettingsWarning": "Rydych chi wedi cael gwahoddiad i ymuno â grŵp! Galluogwch yr Arbrawf Sgwrsio Grŵp yn y Gosodiadau i weld y Gwahoddiad hwn.",
"shutdownCwtchAction": "Cau Cwtch",
"shutdownCwtchDialog": "Ydych chi'n siŵr eich bod am gau Cwtch? Bydd hyn yn cau pob cysylltiad, ac yn gadael y cais.",
"profileDeleteSuccess": "Proffil wedi'i ddileu yn llwyddiannus",
"debugLog": "Trowch logio dadfygio consol ymlaen",
"addContactFirst": "Ychwanegu neu ddewis sgwrs i ddechrau sgwrsio.",
"torNetworkStatus": "Statws rhwydwaith Tor",
"nickChangeSuccess": "Newidiwyd llysenw proffil yn llwyddiannus",
"createProfileToBegin": "Creu neu ddatgloi proffil i ddechrau",
"deleteProfileSuccess": "Proffil wedi'i ddileu yn llwyddiannus",
"sendInvite": "Anfonwch gyswllt neu wahoddiad grŵp",
"resetTor": "Ailosod",
"sendAnInvitation": "Rydych wedi anfon gwahoddiad ar gyfer:",
"contactSuggestion": "Dyma awgrym cyswllt ar gyfer: ",
"chatHistoryDefault": "Bydd y sgwrs hon yn cael ei dileu pan fydd Cwtch ar gau! Gellir galluogi hanes y neges fesul sgwrs drwy'r ddewislen Gosodiadau ar y dde uchaf.",
"enterCurrentPasswordForDelete": "Rhowch y cyfrinair cyfredol i ddileu'r proffil hwn.",
"enableGroups": "Galluogi Sgwrsio Grŵp",
"newConnectionPaneTitle": "Cysylltiad Newydd",
"networkStatusOnline": "Ar-lein",
"networkStatusConnecting": "Cysylltu â rhwydwaith a chysylltiadau...",
"networkStatusAttemptingTor": "Ceisio cysylltu â rhwydwaith Tor",
"networkStatusDisconnected": "Wedi datgysylltu o'r rhyngrwyd, gwiriwch eich cysylltiad",
"viewGroupMembershipTooltip": "Gweld Aelodaeth y Grŵp",
"loadingTor": "Wrthi'n llwytho tor...",
"smallTextLabel": "Bach",
"error0ProfilesLoadedForPassword": "0 proffil wedi'u llwytho gyda'r cyfrinair hwnnw",
"enterProfilePassword": "Rhowch gyfrinair i weld eich proffiliau",
"passwordChangeError": "Gwall wrth newid cyfrinair: Gwrthod cyfrinair wedi'i gyflenwi",
"noPasswordWarning": "Mae peidio â defnyddio cyfrinair ar y cyfrif hwn yn golygu na fydd yr holl ddata a gedwir yn lleol yn cael ei amgryptio",
"profileName": "Enw arddangos",
"editProfileTitle": "Golygu Proffil",
"addProfileTitle": "Ychwanegu proffil newydd",
"deleteBtn": "Dileu",
"unblockBtn": "Dadrwystro Cyswllt",
"puzzleGameBtn": "Gêm Pos",
"acceptGroupInviteLabel": "Ydych chi am dderbyn y gwahoddiad i",
"newGroupBtn": "Creu grŵp newydd",
"peerOfflineMessage": "Mae cyswllt all-lein, ni ellir cyflwyno negeseuon ar hyn o bryd",
"copyBtn": "Copi",
"peerBlockedMessage": "Mae cyswllt wedi'i rwystro",
"pendingLabel": "Arfaeth",
"acknowledgedLabel": "Cydnabyddir",
"couldNotSendMsgError": "Doedd dim modd anfon y neges hon",
"membershipDescription": "Isod ceir rhestr o ddefnyddwyr sydd wedi anfon negeseuon i'r grŵp. Efallai na fydd y rhestr hon yn adlewyrchu'r holl ddefnyddwyr sydd â mynediad i'r grŵp.",
"addListItemBtn": "Ychwanegu Eitem",
"peerNotOnline": "Mae'r cyswllt all-lein. Does dim modd defnyddio ceisiadau ar hyn o bryd.",
"searchList": "Rhestr Chwilio",
"update": "Diweddaru",
"inviteBtn": "Gwahodd",
"notificationPolicyMute": "Tawelwch",
"torSettingsUseCustomTorServiceConfigurastionDescription": "Diystyru'r ffurfweddiad tor-rhwygo diofyn. Rhybudd: Gallai hyn fod yn beryglus. Dim ond os ydych chi'n gwybod beth rydych chi'n ei wneud y byddwch chi'n gwneud hyn.",
"torSettingsErrorSettingPort": "Rhaid i Rif y Porth fod rhwng 1 a 65535",
"labelACNCircuitInfo": "Gwybodaeth Cylchdaith ACN",
"labelTorNetwork": "Rhwydwaith Tor",
"torSettingsEnabledAdvanced": "Galluogi Ffurfweddiad Tor Uwch",
"msgAddToAccept": "Ychwanegwch y cyfrif hwn at eich cysylltiadau er mwyn derbyn y ffeil hon.",
"btnSendFile": "Anfon Ffeil",
"msgConfirmSend": "Ydych chi'n siŵr eich bod am anfon",
"msgFileTooBig": "Ni all maint y ffeil fod yn fwy na 10 GB",
"storageMigrationModalMessage": "Mudo proffiliau i fformat storio newydd. Gallai hyn gymryd ychydig funudau...",
"loadingCwtch": "Wrthi'n Llwytho Cwtch...",
"themeColorLabel": "Thema Lliw",
"themeNameNeon2": "Neon2",
"themeNameNeon1": "Neon1",
"themeNameMidnight": "Canol Nos",
"themeNameMermaid": "Môr-forwyn",
"themeNamePumpkin": "Pwmpen",
"themeNameGhost": "Ysbryd",
"themeNameVampire": "Fampir",
"themeNameWitch": "Gwrach",
"settingDownloadFolder": "Lawrlwytho Ffolder",
"settingImagePreviews": "Rhagolwg Delwedd a Lluniau Proffil",
"experimentClickableLinksDescription": "Mae'r arbrawf dolenni cliciadwy yn caniatáu ichi glicio ar URLs a rennir mewn negeseuon",
"enableExperimentClickableLinks": "Galluogi Dolenni y Gellir eu Clicio",
"displayNameTooltip": "Rhowch enw arddangos",
"importLocalServerButton": "Mewngludo %1",
"newMessagesLabel": "Negeseuon Newydd",
"descriptionFileSharing": "Mae'r arbrawf rhannu ffeiliau yn caniatáu i chi anfon a derbyn ffeiliau o gysylltiadau a grwpiau Cwtch. Sylwer y bydd rhannu ffeil gyda grŵp yn arwain at aelodau o'r grŵp hwnnw yn cysylltu â chi'n uniongyrchol dros Cwtch i'w lawrlwytho.",
"titleManageProfilesShort": "Proffiliau",
"settingFileSharing": "Rhannu Ffeiliau",
"tooltipSendFile": "Anfon Ffeil",
"messageFileOffered": "Mae cyswllt yn cynnig anfon ffeil atoch",
"messageEnableFileSharing": "Galluogi'r arbrawf rhannu ffeiliau i weld y neges hon.",
"messageFileSent": "Anfonasoch ffeil",
"labelFilesize": "Maint",
"labelFilename": "Enw ffeil",
"downloadFileButton": "Lawrlwytho",
"openFolderButton": "Ffolder Agored",
"archiveConversation": "Archifo'r Sgwrs hon",
"showMessageButton": "Dangos Neges",
"blockedMessageMessage": "Mae'r neges hon o broffil rydych chi wedi'i rwystro.",
"placeholderEnterMessage": "Teipiwch neges...",
"notificationNewMessageFromPeer": "Neges newydd o gyswllt!",
"tooltipHidePassword": "Cuddio Cyfrinair",
"tooltipShowPassword": "Dangos Cyfrinair",
"shutdownCwtchDialogTitle": "Cau Cwtch?",
"shutdownCwtchTooltip": "Cau Cwtch",
"malformedMessage": "Neges wedi'i chamffurfio",
"sendMessage": "Anfon Neges",
"cancel": "Canslo",
"torStatus": "Statws Tor",
"torVersion": "Fersiwn Tor",
"rejected": "Gwrthodwyd!",
"accepted": "Derbyniwyd!",
"newPassword": "Cyfrinair Newydd",
"yesLeave": "Ydw, Gadael Y Sgwrs Hon",
"builddate": "Adeiladwyd ar: % 2",
"version": "Fersiwn %1",
"versionTor": "Fersiwn %1 gyda rhwygo %2",
"experimentsEnabled": "Galluogi Arbrofion",
"themeDark": "Tywyll",
"themeLight": "Golau",
"settingTheme": "Defnyddio Themâu Golau",
"largeTextLabel": "Mawr",
"settingInterfaceZoom": "Lefel Chwyddo",
"settingLanguage": "Laith",
"password": "Cyfrinair",
"addNewProfileBtn": "Ychwanegu proffil newydd",
"deleteProfileConfirmBtn": "Dileu Proffil yn Wirioneddol",
"deleteProfileBtn": "Dileu Proffil",
"passwordErrorMatch": "Nid yw cyfrineiriau'n cyfateb",
"saveProfileBtn": "Cadw Proffil",
"createProfileBtn": "Creu Proffil",
"passwordErrorEmpty": "Ni all cyfrinair fod yn wag",
"password2Label": "Ailosod cyfrinair",
"password1Label": "Cyfrinair",
"currentPasswordLabel": "Cyfrinair Cyfredol",
"yourDisplayName": "Eich Enw Arddangos",
"radioNoPassword": "Heb ei amgryptio (Dim cyfrinair)",
"radioUsePassword": "Cyfrinair",
"newProfile": "Proffil Newydd",
"editProfile": "Golygu Proffil",
"defaultProfileName": "Alice",
"addressLabel": "Cyfeiriad",
"bulletinsBtn": "Bwletinau",
"listsBtn": "Rhestrau",
"chatBtn": "Sgwrsio",
"rejectGroupBtn": "Gwrthod",
"acceptGroupBtn": "Derbyn",
"dmTooltip": "Cliciwch i DM",
"serverLabel": "Gweinydd",
"blocked": "Rhwystro",
"invitation": "Gwahoddiad",
"groupAddr": "Cyfeiriad",
"peerName": "Enw",
"createGroupTab": "Creu grŵp",
"createGroupBtn": "Creu",
"defaultGroupName": "Grŵp Gwych",
"createGroupTitle": "Creu Grŵp"
}

367
lib/l10n/intl_da.arb Normal file
View File

@ -0,0 +1,367 @@
{
"@@locale": "da",
"@@last_modified": "2022-12-05T21:06:07+01:00",
"profileEnabledDescription": "Start or stop the profile",
"profileAutostartDescription": "Controls if the profile will be automatically launched on startup",
"profileEnabled": "Enable",
"profileAutostartLabel": "Autostart",
"localePtBr": "Brazilian Portuguese \/ Português do Brasil",
"localeNl": "Dutch \/ Dutch",
"experimentQRCodeDescription": "QR Code support allows sharing data (such as profile identity) by QR Codes",
"enableExperimentQRCode": "QR Codes",
"shareMenuQRCode": "Show QR Code",
"shareProfileMenuTooltop": "Share profile via...",
"acquiredTicketsFromServer": "Antispam Challenge Complete",
"acquiringTicketsFromServer": "Performing Antispam Challenge",
"errorDownloadDirectoryDoesNotExist": "Filesharing cannot be enabled because the Download Folder has not been set, or is set to a folder that does not exist.",
"localeTr": "Tyrkisk \/ Türk",
"localeIt": "Italiensk \/ Italiano",
"tooltipUnpinConversation": "Unpin conversation from the top of \"Conversations\"",
"tooltipPinConversation": "Pin conversation to the top of \"Conversations\"",
"replyingTo": "Replying to %1",
"fileDownloadUnavailable": "This file appears unavailable for download. The sender may have disabled downloads for this file.",
"messageNoReplies": "There are no replies to this message.",
"headingReplies": "Replies",
"viewReplies": "View replies to this message",
"restartFileShare": "Start Sharing File",
"stopSharingFile": "Stop Sharing File",
"manageSharedFiles": "Manage Shared Files",
"localeDe": "Tysk \/ Deutsch",
"localeEn": "Engelsk \/ English",
"localeFr": "Fransk \/ Français",
"localePt": "Portugisisk \/ Portuguesa",
"localeEs": "Spansk \/ Español",
"localePl": "Polsk \/ Polski",
"localeRU": "Russisk \/ Русский",
"localeDa": "Danish \/ Dansk",
"localeCy": "Walisisk \/ Cymraeg",
"localeEl": "Greek \/ Ελληνικά",
"localeNo": "Norsk \/ Norsk",
"localeLb": "Luxembourgske \/ Lëtzebuergesch",
"localeRo": "Rumænsk \/ Română",
"settingImagePreviewsDescription": "Billeder vil automatisk blive hentet og vist. Vær opmærksom på at visning af billeder ofte fører til sikkerhedsmæssige sårbarheder og at du ikke bør aktivere dette eksperiment hvis du bruger Cwtch med kontakter du ikke har tillid til. Profilbilleder er planlagt til Cwtch 1.6.",
"tooltipPreviewFormatting": "Preview Message Formatting",
"tooltipCode": "Code \/ Monospace",
"tooltipStrikethrough": "Strikethrough",
"tooltipSubscript": "Subscript",
"tooltipSuperscript": "Superscript",
"tooltipItalicize": "Italic",
"tooltipBackToMessageEditing": "Back to Message Editing",
"tooltipBoldText": "Bold",
"okButton": "OK",
"settingsAndroidPowerReenablePopup": "Cannot re-enable Battery Optimization from within Cwtch. Please go to Android \/ Settings \/ Apps \/ Cwtch \/ Battery and set Usage to 'Optimized'",
"settingAndroidPowerExemptionDescription": "Optional: Request Android to exempt Cwtch from optimized power management. This will result in better stability at the cost of greater battery use.",
"settingAndroidPowerExemption": "Android Ignore Battery Optimizations",
"thisFeatureRequiresGroupExpermientsToBeEnabled": "This feature requires the Groups Experiment to be enabled in Settings",
"messageFormattingDescription": "Enable rich text formatting in displayed messages e.g. **bold** and *italic*",
"formattingExperiment": "Message Formatting",
"clickableLinkError": "Error encountered while attempting to open URL",
"clickableLinksCopy": "Copy URL",
"clickableLinkOpen": "Open URL",
"clickableLinksWarning": "Opening this URL will launch an application outside of Cwtch and may reveal metadata or otherwise compromise the security of Cwtch. Only open URLs from people you trust. Are you sure you want to continue?",
"shuttingDownApp": "Shutting down...",
"successfullyImportedProfile": "Successfully Imported Profile: %profile",
"failedToImportProfile": "Error Importing Profile",
"importProfileTooltip": "Use an encrypted Cwtch backup to bring in a profile created in another instance of Cwtch.",
"importProfile": "Import Profile",
"exportProfileTooltip": "Backup this profile to an encrypted file. The encrypted file can be imported into another Cwtch app.",
"exportProfile": "Export Profile",
"serverLabel": "Server",
"profileOnionLabel": "Send denne adresse til personer du ønsker forbindelse med",
"saveBtn": "Gem",
"deleteBtn": "Slet",
"newMessageNotificationConversationInfo": "Ny Besked Fra %1",
"newMessageNotificationSimple": "Ny Besked",
"notificationContentContactInfo": "Samtaleinformation",
"notificationContentSimpleEvent": "Simpel Begivenhed",
"conversationNotificationPolicySettingDescription": "Control notification behaviour for this conversation",
"conversationNotificationPolicySettingLabel": "Underretningsindstilling",
"settingsGroupExperiments": "Eksperimenter",
"settingsGroupAppearance": "Udseende",
"settingGroupBehaviour": "Opførsel",
"notificationContentSettingDescription": "Kontrollerer indhold af samtaleunderretninger",
"notificationPolicySettingDescription": "Indstillinger for programmets standard underretningsopførsel",
"notificationContentSettingLabel": "Underretningsindhold",
"notificationPolicySettingLabel": "Underretningsindstillinger",
"conversationNotificationPolicyNever": "Aldrig",
"conversationNotificationPolicyOptIn": "Tilvalg",
"conversationNotificationPolicyDefault": "Standard",
"notificationPolicyDefaultAll": "Standard Alle",
"notificationPolicyOptIn": "Tilvalg",
"notificationPolicyMute": "Stilhed",
"tooltipSelectACustomProfileImage": "Vælg dit eget billede",
"torSettingsEnabledCacheDescription": "Gem midlertidigt den nuværende downloadede Tor konsensus for at blive genbrugt næste gang Cwtch bliver startet. Dette tillader Tor at starte hurtigere. Ellers vil Cwtch fjerne gemt information under opstart.",
"torSettingsEnableCache": "Gem Tor Konsensus",
"labelTorNetwork": "Tor Netværk",
"descriptionACNCircuitInfo": "Detaljeret information om knudepunkter det anonyme kommunikationsnetværk bruger for denne samtale. (ACN = Anonymous Communications Network)",
"labelACNCircuitInfo": "ACN kredsløbsinformation",
"fileSharingSettingsDownloadFolderTooltip": "Vælg standard destination for hentede filer.",
"fileSharingSettingsDownloadFolderDescription": "Når filer bliver hentet automatisk (f.eks. billeder, når indlejrede billedvisning er slået til), skal der vælges en standard destination.",
"torSettingsErrorSettingPort": "Porti-nummer skal være mellem 1 og 65535",
"torSettingsUseCustomTorServiceConfigurastionDescription": "Overskriv standard Tor konfiguration. ADVARSEL: Dette kan bringe dig i fare, gør det kun hvis du ved hvad du laver!",
"torSettingsUseCustomTorServiceConfiguration": "Brug en tilpasset Tor Service konfiguration (torrc)",
"torSettingsCustomControlPortDescription": "Brug en tilpasset portindstilling for kontrolforbindelse til din Tor proxy",
"torSettingsCustomControlPort": "Tilpasset kontrol-port",
"torSettingsCustomSocksPortDescription": "Brug en tilpasset portindstilling for dataforbindelse til din Tor proxy",
"torSettingsCustomSocksPort": "Tilpasset SOCKS port",
"torSettingsEnabledAdvancedDescription": "Brug en eksisterende Tor service på dit system, eller ændre parametre i den eksisterende Cwtch Tor service",
"torSettingsEnabledAdvanced": "Aktiver avanceret Tor konfiguration",
"msgAddToAccept": "Tilføj denne konto til dine kontakter for at modtage denne fil.",
"btnSendFile": "Send Fil",
"msgConfirmSend": "Er du sikker på at du vil sende?",
"msgFileTooBig": "Størrelsen på filen kan ikke overstige 10GB",
"storageMigrationModalMessage": "Konverterer profiler til ny lagringsformat. Dette kan tage nogle minutter...",
"loadingCwtch": "Åbner Cwtch...",
"themeColorLabel": "Farvetema",
"themeNameNeon2": "Neon2",
"themeNameNeon1": "Neon1",
"themeNameMidnight": "Midnight",
"themeNameMermaid": "Mermaid",
"themeNamePumpkin": "Pumpkin",
"themeNameGhost": "Ghost",
"themeNameVampire": "Vampire",
"themeNameWitch": "Witch",
"themeNameCwtch": "Cwtch",
"settingDownloadFolder": "Download Folder",
"settingImagePreviews": "Automatisk billedvisning og profilbilleder",
"experimentClickableLinksDescription": "Click-bare links eksperiment, der tillader dig at udveksle URL'er i samtaler",
"enableExperimentClickableLinks": "Aktiver Click-bare Links",
"serverConnectionsLabel": "Forbindelse",
"serverTotalMessagesLabel": "Samlet antal beskeder",
"serverMetricsLabel": "Server Metrikker",
"manageKnownServersShort": "Servere",
"manageKnownServersLong": "Administrer kendte Servere",
"displayNameTooltip": "Vælg et navn til præsentation",
"manageKnownServersButton": "Administrer kendte Servere",
"fieldDescriptionLabel": "Beskrivelse",
"groupsOnThisServerLabel": "Grupper som jeg er vært for på denne server",
"importLocalServerButton": "Importer %1",
"importLocalServerSelectText": "Vælg lokal Server",
"importLocalServerLabel": "Importer en lokalt administreret server",
"newMessagesLabel": "Nye Beskeder",
"copyServerKeys": "Kopier nøgler",
"verfiyResumeButton": "Verificer\/genoptag",
"fileCheckingStatus": "Kontroller download status",
"fileInterrupted": "Afbrudt",
"fileSavedTo": "Gemt på",
"encryptedServerDescription": "Ved at kryptere en server med et password beskytter du mod angreb fra andre brugere af denne enhed. Krypterede servere kan ikke tilgås, aflæses eller vises før det korrekte password er blevet brugt til at åbne dem.",
"plainServerDescription": "Vi anbefaler at du beskytter dine Cwtch servere med et password. Hvis ikke du sætter et password kan alle med adgang til denne enhed indsamle information om denne server samt hente beskyttede krypteringsnøgler.",
"deleteServerConfirmBtn": "Ja fjern server",
"deleteServerSuccess": "Fjernede server",
"enterCurrentPasswordForDeleteServer": "Indtast nuværende password for at fjerne denne server",
"copyAddress": "Kopier Adresse",
"settingServersDescription": "The hosting servers experiment enables hosting and managing Cwtch servers",
"settingServers": "Hosting Servers",
"enterServerPassword": "Indtast password for at åbne server",
"unlockProfileTip": "Opret eller åbn en profil for at begynde!",
"unlockServerTip": "Opret eller åbn en server for at begynde!",
"addServerTooltip": "Tilføj ny server",
"serversManagerTitleShort": "Servere",
"serversManagerTitleLong": "Servere du stiller til rådighed",
"saveServerButton": "Gem Server",
"serverAutostartDescription": "Indstilling for automatisk opstart af server ved applikationsstart",
"serverAutostartLabel": "Autostart",
"serverEnabledDescription": "Start eller stop serveren",
"serverEnabled": "Server aktiveret",
"serverDescriptionDescription": "Din beskrivelse af serveren for din administration alene. Denne information vil aldrig blive delt",
"serverDescriptionLabel": "Serverbeskrivelse",
"serverAddress": "Server Adresse",
"editServerTitle": "Rediger Server",
"addServerTitle": "Tilføj Server",
"titleManageProfilesShort": "Profiler",
"descriptionFileSharing": "Fildelingseksperimentet tillader dig at sende og modtage filer fra Cwtch kontakter og grupper. Bemærk at deling af filer med en gruppe vil resultere i at medlemmer af gruppen forbinder direkte med dig over Cwtch for at downloade filen.",
"settingFileSharing": "Fildeling",
"tooltipSendFile": "Send Fil",
"messageFileOffered": "Kontakt tilbyder dig en fil",
"messageFileSent": "Du har sendt en fil",
"messageEnableFileSharing": "Aktiver fildelingseksperimentet for at få vist denne besked.",
"labelFilesize": "Størrelse",
"labelFilename": "Filnavn",
"downloadFileButton": "Download",
"openFolderButton": "Åbn Folder",
"retrievingManifestMessage": "Henter fil-information...",
"descriptionStreamerMode": "Hvis denne funktion aktiveres kan applikationen skjule elementer der ellers ville afsløres under streaming eller præsentation, ved at skjule profiler og kontaktinformationer",
"streamerModeLabel": "Streaming\/Præsentations-tilstand",
"archiveConversation": "Arkivér denne samtale",
"blockUnknownConnectionsEnabledDescription": "Forbindelser fra ukendte kontakter er blokerede. Du kan ændre dette i Indstillinger",
"showMessageButton": "Vis meddelelse",
"blockedMessageMessage": "Denne meddelelse er fra en kontakt som du har blokeret.",
"placeholderEnterMessage": "Indtast en meddelelse...",
"plainProfileDescription": "Vi anbefaler at du beskytter dine Cwtch-profiler med et password. Hvis ikke du giver denne profil et passwork, kan alle andre der benytter denne enhed læse alle informationer på denne profil, inklusive kontakter, meddelelser og følsomme krypteringsnøgler.",
"encryptedProfileDescription": "Ved at kryptere en profil med et password beskytter du den mod andre der kan bruge denne enhed. Krypterede profiler kan ikke dekrypteres, læses eller tilgås før det korrekte password for at åbne dem er blevet indtastet.",
"addContactConfirm": "Tilføj kontakt %1",
"addContact": "Tilføj kontakt",
"contactGoto": "Gå til samtale med %1",
"settingUIColumnOptionSame": "Den samme som portræt-indstilling",
"settingUIColumnDouble14Ratio": "Dobbelt (1:4)",
"settingUIColumnDouble12Ratio": "Dobbelt (1:2)",
"settingUIColumnSingle": "Enkelt",
"settingUIColumnLandscape": "UI Kolonner i landskabstilstand",
"settingUIColumnPortrait": "UI Kolonner i portrættilstand",
"tooltipRemoveThisQuotedMessage": "Fjern citeret meddelelse.",
"tooltipReplyToThisMessage": "Besvar denne meddelelse",
"tooltipRejectContactRequest": "Afvis denne kontaktforespørgsel",
"tooltipAcceptContactRequest": "Acceptér denne kontaktforespørgsel.",
"notificationNewMessageFromGroup": "Ny besked i en gruppe!",
"notificationNewMessageFromPeer": "Ny besked fra en kontakt!",
"tooltipHidePassword": "Skjul password",
"tooltipShowPassword": "Vis password",
"groupInviteSettingsWarning": "Du er blevet inviteret indenfor i en gruppe! Vær venlig at aktivere Gruppe Chat eksperimentet is Indstillinger for at se denne invitation.",
"shutdownCwtchAction": "Lukke Cwtch",
"shutdownCwtchDialog": "Er du sikker på at du vil lukke Cwtch. Dette vil lukke alle forbindelser og afslutte programmet.",
"shutdownCwtchDialogTitle": "Lukke Cwtch?",
"shutdownCwtchTooltip": "Luk Cwtch",
"malformedMessage": "Forkert formateret meddelelse",
"profileDeleteSuccess": "Slettede profil",
"debugLog": "Tændt for debug logging til konsol",
"torNetworkStatus": "Tor netwærk status",
"addContactFirst": "Tilføj eller vælg en kontakt for at begynde at chatte.",
"createProfileToBegin": "Vær venlig at oprette eller åbne en profile for at begynde",
"nickChangeSuccess": "Ændrede delt profil-navn",
"addServerFirst": "Du skal tilføje en server før du kan lave en gruppe",
"deleteProfileSuccess": "Slettede profil",
"sendInvite": "Send en gruppe- eller kontakt-invitation",
"sendMessage": "Send meddelelse",
"cancel": "Afvis",
"resetTor": "Genstart",
"torStatus": "Tor Status",
"torVersion": "Tor Version",
"sendAnInvitation": "Du har sendt en invitation om: ",
"contactSuggestion": "Dette er et kontaktforslag for: ",
"rejected": "Afvist!",
"accepted": "Accepteret!",
"chatHistoryDefault": "Denne samtale vil blive slettet når Cwtch lukkes! Meddelelseshistorik kan aktiveres per samtale via Indstillinger-menuen i øverste højre hjørne.",
"newPassword": "Nyt Password",
"yesLeave": "Ja, forlad denne samtale",
"reallyLeaveThisGroupPrompt": "Er du sikker på at du vil forlade denne samtale? Alle beskeder og indstillinger i samtalen vil blive slettet.",
"leaveConversation": "Forlad denne samtale",
"inviteToGroup": "Du er blevet inviteret til at deltage i en gruppe:",
"titleManageServers": "Administrer Servere",
"successfullAddedContact": "Tilføjet ",
"descriptionBlockUnknownConnections": "Hvis aktiveret vil denne setting automatisk lukke forbindelser fra Cwtch-brugere der ikker er blevet tilføjet til dine kontakter.",
"descriptionExperimentsGroups": "Gruppe eksperiementet tillader Cwtch at oprette forbindelse til ikke-betroede servere for at kunne bistå i kommunikationen med mere end en kontakt i samme samtale samtidig.",
"descriptionExperiments": "Eksperimenter i Cwtch tilvalg, udvidelser der tilføjer yderligere funktionalitet til Cwtch som dog kan have andre privatlivsforhold end den traditionelle 1:1 metadata-resistente chat. F.eks. gruppe-chat, bot-integration osv.",
"titleManageProfiles": "Administrer Cwtch profiler",
"tooltipUnlockProfiles": "Åbn krypterede profiler ved at indtaste deres password.",
"titleManageContacts": "Samtaler",
"tooltipAddContact": "Tilføj ny kontakt eller samtale",
"tooltipOpenSettings": "Åben fanen Indstillinger",
"contactAlreadyExists": "Kontakt eksisterer allerede",
"invalidImportString": "Forkert import streng",
"conversationSettings": "Samtaleindstillinger",
"enterCurrentPasswordForDelete": "Indtast venligst nuværende password for at slette denne profil.",
"enableGroups": "Aktiver Gruppe Chat",
"todoPlaceholder": "Todo...",
"addNewItem": "Tilføj et nyt element til listen",
"addListItem": "Tilføj en ny liste",
"newConnectionPaneTitle": "Ny forbindelse",
"networkStatusOnline": "Online",
"networkStatusConnecting": "Forbinder til netværk og kontakter...",
"networkStatusAttemptingTor": "Forsøger at forbinde til Tor netværk",
"networkStatusDisconnected": "Afkoblet fra internet, check din forbindelse",
"viewGroupMembershipTooltip": "Se gruppe-medlemsskab",
"loadingTor": "Åbner Tor...",
"smallTextLabel": "Lille",
"defaultScalingText": "Standard størrelse tekst (skaleringsfaktor:",
"builddate": "Bygget den: %2",
"version": "Version %1",
"versionTor": "Version %1 med tor %2",
"experimentsEnabled": "Aktiver Eksperimenter",
"themeDark": "Mørk",
"themeLight": "Lys",
"settingTheme": "Brug lyst tema",
"largeTextLabel": "Stor",
"settingInterfaceZoom": "Zoom niveau",
"settingLanguage": "Sprog",
"blockUnknownLabel": "Blokér ukendte kontakter",
"zoomLabel": "Interface zoom (påvirker mest tekst- og knap-størrelser)",
"versionBuilddate": "Version: %1 bygget den: %2",
"cwtchSettingsTitle": "Cwtch Indstillinger",
"unlock": "Åbne",
"yourServers": "Dine Servere",
"yourProfiles": "Dine Profiler",
"error0ProfilesLoadedForPassword": "0 profiler åbnet med det password",
"password": "Password",
"enterProfilePassword": "Indtast et password for at se dine profiler",
"addNewProfileBtn": "Tilføj ny profil",
"deleteConfirmText": "SLET",
"deleteProfileConfirmBtn": "Ja, slet profile",
"deleteConfirmLabel": "Skriv SLET for at gennemføre",
"deleteProfileBtn": "Slet Profil",
"passwordChangeError": "Fejl i at ændre password: Det brugte password er afvises",
"passwordErrorMatch": "De indtastede passwords matcher ikke",
"saveProfileBtn": "Gem Profil",
"createProfileBtn": "Opret Profil",
"passwordErrorEmpty": "Password kan ikke være tomt",
"password2Label": "Indtast password igen",
"password1Label": "Password",
"currentPasswordLabel": "Nuværende Password",
"yourDisplayName": "Dit visnings-navn",
"noPasswordWarning": "Ikke at anvende et password på denne konto medfører at data gemt lokalt ikke vil blive krypteret",
"radioNoPassword": "Ukrypteret (intet password)",
"radioUsePassword": "Password",
"editProfile": "Rediger Profil",
"newProfile": "Ny Profil",
"defaultProfileName": "Alice",
"profileName": "Visnings-navn",
"editProfileTitle": "Rediger Profil",
"addProfileTitle": "Tilføj ny profil",
"unblockBtn": "Tillad kontakt",
"dontSavePeerHistory": "Slet historik",
"savePeerHistoryDescription": "Fastslå hvorvidt historik forbundet med denne kontakt skal slettes.",
"savePeerHistory": "Gem historik",
"blockBtn": "Blokér kontakt",
"displayNameLabel": "Visnings-navn",
"copiedToClipboardNotification": "Kopieret til udklipsholder",
"addressLabel": "Adresse",
"puzzleGameBtn": "Puzzlespil",
"bulletinsBtn": "Opslag",
"listsBtn": "Liste",
"chatBtn": "Chat",
"rejectGroupBtn": "Afvis",
"acceptGroupBtn": "Accepter",
"acceptGroupInviteLabel": "Vil du acceptere invitationen til",
"newGroupBtn": "Opret ny gruppe",
"copyBtn": "Kopier",
"peerOfflineMessage": "Kontakt er ikke online, meddelelser kan ikke leveres i øjeblikket",
"peerBlockedMessage": "Kontakt er blokeret",
"pendingLabel": "Afventet",
"acknowledgedLabel": "Bekræftet",
"couldNotSendMsgError": "Kunne ikke sende denne besked",
"dmTooltip": "Click for at samtale",
"membershipDescription": "Herunder er en liste af brugere der har sendt beskeder i gruppen. Denne liste afspejler nødvendigvis ikke alle brugere der har adgang til gruppen.",
"addListItemBtn": "Tilføj emne",
"peerNotOnline": "Kontakt er utilgængelig. Kontakt kan ikke bruges i øjeblikket.",
"searchList": "Søg Liste",
"update": "Updater",
"inviteBtn": "Inviter",
"inviteToGroupLabel": "Inviter til gruppe",
"groupNameLabel": "Gruppename",
"viewServerInfo": "Server Info",
"serverNotSynced": "Synkroniserer nye meddelelser (Dette kan tage noget tid)...",
"serverSynced": "Synkroniserert",
"serverConnectivityDisconnected": "Server afbrudt",
"serverConnectivityConnected": "Server forbundet",
"serverInfo": "Server Information",
"invitationLabel": "Invitation",
"search": "Søg...",
"blocked": "Blokeret",
"pasteAddressToAddContact": "Indsæt en Cwtch adresse, invitation eller nøgle-par her for at oprette en ny samtale",
"titlePlaceholder": "Titel...",
"postNewBulletinLabel": "Send nyt opslag",
"newBulletinLabel": "Nyt opslag",
"joinGroup": "Tilslut til gruppe",
"createGroup": "Opret gruppe",
"addPeer": "Tilføj kontakt",
"groupAddr": "Adresse",
"invitation": "Invitation",
"server": "Server",
"peerName": "Navn",
"peerAddress": "Adresse",
"joinGroupTab": "Deltage i gruppe ",
"createGroupTab": "Oprette en gruppe",
"addPeerTab": "Tilføj en kontakt",
"createGroupBtn": "Opret",
"defaultGroupName": "Fantastisk gruppe",
"createGroupTitle": "Opret gruppe"
}

View File

@ -1,324 +1,367 @@
{
"@@locale": "de",
"@@last_modified": "2022-02-08T20:13:50+01:00",
"newMessageNotificationConversationInfo": "New Message From %1",
"newMessageNotificationSimple": "New Message",
"notificationContentContactInfo": "Conversation Information",
"notificationContentSimpleEvent": "Plain Event",
"conversationNotificationPolicySettingDescription": "Control this conversation's notification behaviour",
"conversationNotificationPolicySettingLabel": "Conversation Notification Policy",
"settingsGroupExperiments": "Experiments",
"settingsGroupAppearance": "Appearance",
"settingGroupBehaviour": "Behaviour",
"notificationContentSettingDescription": "Controls the contents of conversation notifications",
"notificationPolicySettingDescription": "Controls the default application notification behaviour",
"notificationContentSettingLabel": "Notification Content",
"notificationPolicySettingLabel": "Notification Policy",
"conversationNotificationPolicyNever": "Never",
"conversationNotificationPolicyOptIn": "Opt In",
"conversationNotificationPolicyDefault": "Default",
"notificationPolicyDefaultAll": "Default All",
"notificationPolicyOptIn": "Opt In",
"notificationPolicyMute": "Mute",
"tooltipSelectACustomProfileImage": "Select a Custom Profile Image",
"torSettingsEnabledCacheDescription": "Cache the current downloaded Tor consensus to reuse next time Cwtch is opened. This will allow Tor to start faster. When disabled, Cwtch will purge cached data on start up.",
"torSettingsEnableCache": "Cache Tor Consensus",
"labelTorNetwork": "Tor Network",
"descriptionACNCircuitInfo": "In depth information about the path that the anonymous communication network is using to connect to this conversation.",
"labelACNCircuitInfo": "ACN Circuit Info",
"fileSharingSettingsDownloadFolderTooltip": "Browse to select a different default folder for downloaded files.",
"fileSharingSettingsDownloadFolderDescription": "When files are downloaded automatically (e.g. image files, when image previews are enabled) a default location to download the files to is needed.",
"torSettingsErrorSettingPort": "Port Number must be between 1 and 65535",
"torSettingsUseCustomTorServiceConfigurastionDescription": "Override the default tor configuration. Warning: This could be dangerous. Only turn this on if you know what you are doing.",
"torSettingsUseCustomTorServiceConfiguration": "Use a Custom Tor Service Configuration (torrc)",
"torSettingsCustomControlPortDescription": "Use a custom port for control connections to the Tor proxy",
"torSettingsCustomControlPort": "Custom Control Port",
"torSettingsCustomSocksPortDescription": "Use a custom port for data connections to the Tor proxy",
"torSettingsCustomSocksPort": "Custom SOCKS Port",
"torSettingsEnabledAdvancedDescription": "Use an existing Tor service on your system, or change the parameters of the Cwtch Tor Service",
"torSettingsEnabledAdvanced": "Enable Advanced Tor Configuration",
"msgAddToAccept": "Add this account to your contacts in order to accept this file.",
"btnSendFile": "Send File",
"msgConfirmSend": "Are you sure you want to send",
"msgFileTooBig": "File size cannot exceed 10 GB",
"storageMigrationModalMessage": "Migrating profiles to new storage format. This could take a few minutes...",
"loadingCwtch": "Loading Cwtch...",
"themeColorLabel": "Color Theme",
"themeNameNeon2": "Neon2",
"themeNameNeon1": "Neon1",
"themeNameMidnight": "Midnight",
"themeNameMermaid": "Mermaid",
"themeNamePumpkin": "Pumpkin",
"themeNameGhost": "Ghost",
"themeNameVampire": "Vampire",
"themeNameWitch": "Witch",
"themeNameCwtch": "Cwtch",
"settingDownloadFolder": "Download Folder",
"settingImagePreviewsDescription": "Images will be downloaded and previewed automatically. Please note that image previews can often lead to security vulnerabilities, and you should not enable this Experiment if you use Cwtch with untrusted contacts. Profile pictures are planned for Cwtch 1.6.",
"settingImagePreviews": "Image Previews and Profile Pictures",
"experimentClickableLinksDescription": "The clickable links experiment allows you to click on URLs shared in messages",
"enableExperimentClickableLinks": "Enable Clickable Links",
"serverConnectionsLabel": "Connection",
"serverTotalMessagesLabel": "Total Messages",
"serverMetricsLabel": "Server Metrics",
"manageKnownServersShort": "Servers",
"manageKnownServersLong": "Manage Known Servers",
"displayNameTooltip": "Please enter a display name",
"manageKnownServersButton": "Manage Known Servers",
"fieldDescriptionLabel": "Description",
"groupsOnThisServerLabel": "Groups I am in hosted on this server",
"importLocalServerButton": "Import %1",
"importLocalServerSelectText": "Select Local Server",
"importLocalServerLabel": "Import a locally hosted server",
"newMessagesLabel": "New Messages",
"localeRU": "Russian",
"copyServerKeys": "Copy keys",
"verfiyResumeButton": "Verify\/resume",
"fileCheckingStatus": "Checking download status",
"fileInterrupted": "Interrupted",
"fileSavedTo": "Saved to",
"encryptedServerDescription": "Encrypting a server with a password protects it from other people who may also use this device. Encrypted servers cannot be decrypted, displayed or accessed until the correct password is entered to unlock them.",
"plainServerDescription": "We recommend that you protect your Cwtch servers with a password. If you do not set a password on this server then anyone who has access to this device may be able to access information about this server, including sensitive cryptographic keys.",
"deleteServerConfirmBtn": "Really delete server",
"deleteServerSuccess": "Successfully deleted server",
"enterCurrentPasswordForDeleteServer": "Please enter current password to delete this server",
"copyAddress": "Copy Address",
"settingServersDescription": "The hosting servers experiment enables hosting and managing Cwtch servers",
"settingServers": "Hosting Servers",
"enterServerPassword": "Enter password to unlock server",
"unlockProfileTip": "Please create or unlock a profile to begin!",
"unlockServerTip": "Please create or unlock a server to begin!",
"addServerTooltip": "Add new server",
"serversManagerTitleShort": "Servers",
"serversManagerTitleLong": "Servers You Host",
"saveServerButton": "Save Server",
"serverAutostartDescription": "Controls if the application will automatically launch the server on start",
"serverAutostartLabel": "Autostart",
"serverEnabledDescription": "Start or stop the server",
"serverEnabled": "Server Enabled",
"serverDescriptionDescription": "Your description of the server for personal management use only, will never be shared",
"serverDescriptionLabel": "Server Description",
"serverAddress": "Server Address",
"editServerTitle": "Edit Server",
"addServerTitle": "Add Server",
"downloadFileButton": "Herunterladen",
"titleManageProfilesShort": "Profiles",
"descriptionFileSharing": "The file sharing experiment allows you to send and receive files from Cwtch contacts and groups. Note that sharing a file with a group will result in members of that group connecting with you directly over Cwtch to download it.",
"settingFileSharing": "File Sharing",
"tooltipSendFile": "Send File",
"messageFileOffered": "Contact is offering to send you a file",
"messageFileSent": "You sent a file",
"messageEnableFileSharing": "Enable the file sharing experiment to view this message.",
"labelFilesize": "Size",
"labelFilename": "Filename",
"openFolderButton": "Open Folder",
"retrievingManifestMessage": "Retrieving file information...",
"descriptionStreamerMode": "If turned on, this option makes the app more visually private for streaming or presenting with, for example, hiding profile and contact addresses",
"streamerModeLabel": "Streamer\/Presentation Mode",
"archiveConversation": "Archive this Conversation",
"blockUnknownConnectionsEnabledDescription": "Connections from unknown contacts are blocked. You can change this in Settings",
"showMessageButton": "Show Message",
"blockedMessageMessage": "This message is from a profile you have blocked.",
"placeholderEnterMessage": "Type a message...",
"plainProfileDescription": "We recommend that you protect your Cwtch profiles with a password. If you do not set a password on this profile then anyone who has access to this device may be able to access information about this profile, including contacts, messages and sensitive cryptographic keys.",
"encryptedProfileDescription": "Encrypting a profile with a password protects it from other people who may also use this device. Encrypted profiles cannot be decrypted, displayed or accessed until the correct password is entered to unlock them.",
"addContactConfirm": "Add contact %1",
"addContact": "Add contact",
"contactGoto": "Go to conversation with %1",
"settingUIColumnOptionSame": "Same as portrait mode setting",
"settingUIColumnDouble14Ratio": "Double (1:4)",
"settingUIColumnDouble12Ratio": "Double (1:2)",
"settingUIColumnSingle": "Single",
"settingUIColumnLandscape": "UI Columns in Landscape Mode",
"settingUIColumnPortrait": "UI Columns in Portrait Mode",
"localePl": "Polish",
"tooltipRemoveThisQuotedMessage": "Remove quoted message.",
"tooltipReplyToThisMessage": "Reply to this message",
"tooltipRejectContactRequest": "Reject this contact request",
"tooltipAcceptContactRequest": "Accept this contact request.",
"experimentsEnabled": "Experimente aktiviert",
"malformedMessage": "Fehlerhafte Nachricht",
"contactSuggestion": "Dieser Kontaktvorschlag ist für: ",
"descriptionBlockUnknownConnections": "Falls aktiviert, wird diese Einstellung alle Verbindungen von Cwtch Usern autmoatisch schliessen, wenn sie nicht in deinen Kontakten sind.",
"descriptionExperimentsGroups": "Mit experimentellen Gruppen kann Cwtch über nicht vertrauenswürdige Serverinfrastruktur die Kommunikation mit mehr als einem Kontakt vereinfachen.",
"descriptionExperiments": "Experimentelle Cwtch Features sind optionale, opt-in Features für die andere Privatsphärenaspekte berücksichtigt werden als bei traditionellen 1:1 metadatenresistenten Chats, wie z. B. Gruppennachrichten, Bots usw.",
"networkStatusDisconnected": "Vom Internet getrennt, überprüfe deine Verbindung",
"yourServers": "Deine Server",
"yourProfiles": "Deine Profile",
"enterProfilePassword": "Gib ein Passwort ein, um deine Profile anzuzeigen",
"deleteConfirmLabel": "Gib LÖSCHEN ein um zu bestätigen",
"profileOnionLabel": "Senden Sie diese Adresse an Peers, mit denen Sie sich verbinden möchten",
"cycleColoursAndroid": "Klicken um Farbe zu wechseln.\nGedrückt halten zum zurücksetzen.",
"cycleMorphsDesktop": "Klicken um Morph zu wechseln.\nRechtsklick zum zurücksetzen.",
"cycleMorphsAndroid": "Klicken um Morph zu wechseln.\nGedrückt halten zum zurücksetzen.",
"pasteAddressToAddContact": "Adresse, Einladung oder Schlüssel hier hinzufügen, um einen Kontakt hinzuzufügen",
"notificationNewMessageFromGroup": "Neue Nachricht in einer Gruppe!",
"notificationNewMessageFromPeer": "Neue Nachricht von einem Kontakt!",
"tooltipHidePassword": "Password verstecken",
"tooltipShowPassword": "Password anzeigen",
"groupInviteSettingsWarning": "Du wurdest eingeladen einer Gruppe beizutreten! Bitte aktiviere das Gruppenchat Experiment in den Einstellungen um diese Einladung anzusehen.",
"shutdownCwtchAction": "Cwtch schliessen",
"shutdownCwtchDialog": "Bist du sicher, dass du Cwtch schliessen möchtest? Alle Verbindungen werden geschlossen und die App wird beendet.",
"shutdownCwtchDialogTitle": "Cwtch schliessen?",
"shutdownCwtchTooltip": "Cwtch schliessen",
"profileDeleteSuccess": "Profil erfolgreich gelöscht",
"debugLog": "Konsolendebuglogging aktivivieren",
"torNetworkStatus": "Tor Netzwerkstatus",
"addContactFirst": "Wähle einen Kontakt oder füge ihn hinzu, um einen Chat zu starten.",
"createProfileToBegin": "Bitte erstelle oder entsperre ein Profil um loszulegen",
"nickChangeSuccess": "Profilename erfolgreich geändert",
"addServerFirst": "Du musst einen Server hinzufügen, bevor du eine Gruppe erstellen kannst",
"deleteProfileSuccess": "Erfolgreich Profil gelöscht",
"sendInvite": "Versende Kontakt- oder Gruppeneinladung",
"sendMessage": "Nachricht senden",
"cancel": "Abbrechen",
"resetTor": "Zurücksetzen",
"torStatus": "Tor Status",
"torVersion": "Tor Version",
"sendAnInvitation": "Du hast eine Einladung geschickt für: ",
"rejected": "Abgelehnt!",
"accepted": "Angenommen!",
"chatHistoryDefault": "Diese Unterhaltung wird gelöscht sobald Cwtch geschlossen wird! Der Nachrichtenverlauf für jede Unterhaltung kann im Einstellungsmenü oben rechts geändert werden.",
"newPassword": "Neues Passwort",
"yesLeave": "Ja, diese Unterhaltung beenden",
"reallyLeaveThisGroupPrompt": "Bist du sicher, dass du diese Unterhaltung beenden möchtest? Alle Nachrichten und Attribute werden gelöscht.",
"leaveConversation": "Unterhaltung beenden",
"inviteToGroup": "Du wurdest eingeladen einer Gruppe beizutreten:",
"titleManageServers": "Server verwalten",
"dateNever": "Nie",
"dateLastYear": "Letzes Jahr",
"dateYesterday": "Gestern",
"dateLastMonth": "Letzter Monat",
"dateRightNow": "Jetzt",
"successfullAddedContact": "Erfolgreich hinzugefügt",
"titleManageProfiles": "Cwtch Profile verwalten",
"tooltipUnlockProfiles": "Entsperre verschlüsselte Profile durch Eingabe des Passworts.",
"titleManageContacts": "Unterhaltungen",
"tooltipAddContact": "Neuen Kontakt oder Unterhaltung hinzufügen",
"tooltipOpenSettings": "Öfffne das Einstellungsmenü",
"contactAlreadyExists": "Kontakt existiert bereits",
"invalidImportString": "Ungültiger Importstring",
"conversationSettings": "Unterhaltungseinstellungen",
"enterCurrentPasswordForDelete": "Bitte gib das aktuelle Passwort ein, um diese Profil zu löschen.",
"enableGroups": "Gruppenchat aktivieren",
"localeIt": "Italiana",
"localeEs": "Espanol",
"localePt": "Portuguesa",
"localeFr": "Frances",
"localeEn": "English",
"passwordErrorEmpty": "Passwort darf nicht leer sein",
"currentPasswordLabel": "aktuelles Passwort",
"yourDisplayName": "Dein Anzeigename",
"unblockBtn": "Anderen Nutzer entsperren",
"dontSavePeerHistory": "Verlauf mit anderem Nutzer löschen",
"savePeerHistoryDescription": "Legt fest, ob ein mit dem anderen Nutzer verknüpfter Verlauf gelöscht werden soll oder nicht.",
"blockBtn": "Anderen Nutzer blockieren",
"displayNameLabel": "Angezeigename",
"peerOfflineMessage": "Anderer Nutzer ist offline, Nachrichten können derzeit nicht zugestellt werden",
"peerBlockedMessage": "Anderer Nutzer ist blockiert",
"dmTooltip": "Klicken, um Direktnachricht zu senden",
"peerNotOnline": "Der andere Nutzer ist offline. Die App kann momentan nicht verwendet werden.",
"searchList": "Liste durchsuchen",
"update": "Update",
"viewServerInfo": "Serverinfo",
"serverNotSynced": "Neue Nachrichten abrufen (Dies kann eine Weile dauern...)",
"serverSynced": "synchronisiert",
"cycleColoursDesktop": "Klicken um Farbe zu wechseln.\nRechtsklick zum zurücksetzen.",
"cycleCatsDesktop": "Klicken um Kategorie zu wechseln.\nRechtslick zum zurücksetzen.",
"cycleCatsAndroid": "Klicken um Kategorie zu wechseln.\nLanger Klick zum zurücksetzen.",
"addPeer": "Anderen Nutzer hinzufügen",
"addPeerTab": "Einen anderen Nutzer hinzufügen",
"todoPlaceholder": "noch zu erledigen",
"addListItem": "Liste hinzufügen",
"addNewItem": "Ein neues Element zur Liste hinzufügen",
"@@last_modified": "2022-12-05T21:06:07+01:00",
"profileEnabledDescription": "Start or stop the profile",
"profileAutostartDescription": "Controls if the profile will be automatically launched on startup",
"profileEnabled": "Enable",
"profileAutostartLabel": "Autostart",
"acquiringTicketsFromServer": "Antispam-Herausforderung meistern",
"acquiredTicketsFromServer": "Antispam-Herausforderung abgeschlossen",
"shareProfileMenuTooltop": "Profil teilen über...",
"localeNl": "Niederländisch \/ Nederlands",
"localePtBr": "Brasilianisches Portugiesisch \/ Português do Brasil",
"shareMenuQRCode": "QR-Code anzeigen",
"enableExperimentQRCode": "QR-Codes",
"experimentQRCodeDescription": "QR-Code-Unterstützung ermöglicht den Austausch von Daten (z. B. Profilidentität) über QR-Codes",
"localeIt": "Italienisch \/ Italiano",
"errorDownloadDirectoryDoesNotExist": "Die Dateifreigabe kann nicht aktiviert werden, da der Download-Ordner nicht festgelegt wurde oder auf einen nicht vorhandenen Ordner festgelegt ist.",
"localeTr": "Türkisch \/ Türk",
"viewReplies": "Antworten auf diese Nachricht anzeigen",
"manageSharedFiles": "Freigegebene Dateien verwalten",
"tooltipPinConversation": "Konversation oben in \"Konversationen\" anheften",
"tooltipUnpinConversation": "Anheften der Konversation oben in \"Konversationen\" aufheben",
"messageNoReplies": "Es gibt keine Antworten auf diese Nachricht.",
"stopSharingFile": "Beenden der Dateifreigabe",
"restartFileShare": "Freigabe der Datei starten",
"replyingTo": "Antwort auf %1",
"fileDownloadUnavailable": "Diese Datei steht nicht zum Download zur Verfügung. Der Absender hat möglicherweise das Herunterladen dieser Datei deaktiviert.",
"headingReplies": "Antworten",
"localeEn": "Englisch \/ English",
"localePl": "Polnisch \/ Polski",
"localeRo": "Rumänisch \/ Română",
"localeNo": "Norwegisch \/ Norsk",
"localeLb": "Luxemburgisch \/ Lëtzebuergesch",
"localeEl": "Griechisch\/ Ελληνικά",
"localeEs": "Spanisch \/ Español",
"localeRU": "Russisch \/ Русский",
"localeDa": "Dänisch \/ Dansk",
"localeFr": "Französisch \/ Français",
"localeCy": "Walisisch \/ Cymraeg",
"localePt": "Portugiesisch \/ Portuguesa",
"settingImagePreviewsDescription": "Bilder und Profil-Bilder werden automatisch heruntergeladen und es wird eine Voransicht erstellt. Du solltest diese experimentelle Einstellung bei nicht vertrauenswürdigen Kontakten nicht aktivieren.",
"localeDe": "Deutsch \/ Deutsch",
"serverLabel": "Server",
"createGroupTitle": "Gruppe erstellen",
"defaultGroupName": "Fantastische Gruppe",
"createGroupBtn": "Erstellen",
"profileOnionLabel": "Sende diese Adresse an Personen, mit denen Du in Kontakt treten möchtest",
"addPeerTab": "Einen Kontakt hinzufügen",
"createGroupTab": "Eine Gruppe erstellen",
"joinGroupTab": "Einer Gruppe beitreten",
"peerAddress": "Adresse",
"peerName": "Namen",
"groupName": "Gruppenname",
"joinGroupTab": "Einer Gruppe beitreten",
"server": "Server",
"invitation": "Einladung",
"peerName": "Name",
"groupAddr": "Adresse",
"createGroup": "Gruppe erstellen",
"invitation": "Einladung",
"addPeer": "Kontakt hinzufügen",
"joinGroup": "Gruppe beitreten",
"blocked": "Blockiert",
"createGroup": "Gruppe erstellen",
"newBulletinLabel": "Neue Bekanntmachung",
"titlePlaceholder": "Titel...",
"postNewBulletinLabel": "Neue Bekanntmachung veröffentlichen",
"pasteAddressToAddContact": "Füge hier eine cwtch-Adresse, eine Einladung oder ein Schlüsselpaket ein, um eine neue Unterhaltung hinzuzufügen",
"search": "Suche...",
"blocked": "Blockiert",
"invitationLabel": "Einladung",
"serverInfo": "Server-Informationen",
"serverConnectivityConnected": "Server verbunden",
"serverConnectivityDisconnected": "Server getrennt",
"serverNotSynced": "Neue Nachrichten synchronisieren (dies kann einige Zeit dauern)...",
"serverSynced": "Synchronisiert",
"groupNameLabel": "Gruppenname",
"viewServerInfo": "Server-Info",
"inviteToGroupLabel": "Zur Gruppe einladen",
"saveBtn": "Speichern",
"deleteBtn": "Löschen",
"inviteBtn": "Einladen",
"update": "Update",
"peerNotOnline": "Der Kontakt ist offline. Anwendungen können im Moment nicht verwendet werden.",
"searchList": "Liste durchsuchen",
"addListItemBtn": "Element hinzufügen",
"savePeerHistory": "Peer-Verlauf speichern",
"addProfileTitle": "Neues Profil hinzufügen",
"membershipDescription": "Nachfolgend findest Du eine Liste der Benutzer, die Nachrichten an die Gruppe gesendet haben. Diese Liste gibt möglicherweise nicht alle Benutzer wieder, die Zugang zu der Gruppe haben.",
"dmTooltip": "Klicken für Direktnachricht",
"couldNotSendMsgError": "Diese Nachricht konnte nicht gesendet werden",
"acknowledgedLabel": "Bestätigt",
"peerBlockedMessage": "Kontakt ist blockiert",
"pendingLabel": "Anhängig",
"peerOfflineMessage": "Kontakt ist offline, Nachrichten können im Moment nicht zugestellt werden",
"copyBtn": "Kopieren",
"acceptGroupInviteLabel": "Möchtest Du die Einladung annehmen zu",
"newGroupBtn": "Neue Gruppe erstellen",
"acceptGroupBtn": "Annehmen",
"chatBtn": "Chat",
"rejectGroupBtn": "Ablehnen",
"listsBtn": "Listen",
"puzzleGameBtn": "Puzzlespiel",
"bulletinsBtn": "Bekanntmachungen",
"addressLabel": "Adresse",
"copiedToClipboardNotification": "In die Zwischenablage kopiert",
"displayNameLabel": "Anzeigename",
"blockBtn": "Kontakt blockieren",
"savePeerHistory": "Verlauf speichern",
"savePeerHistoryDescription": "Legt fest, ob der mit dem Kontakt verbundene Verlauf gelöscht werden soll.",
"dontSavePeerHistory": "Verlauf löschen",
"unblockBtn": "Kontakt entsperren",
"editProfileTitle": "Profil bearbeiten",
"addProfileTitle": "Neues Profil hinzufügen",
"profileName": "Anzeigename",
"defaultProfileName": "Alice",
"newProfile": "Neues Profil",
"editProfile": "Profil bearbeiten",
"newProfile": "Neues Profil",
"radioUsePassword": "Passwort",
"radioNoPassword": "Unverschlüsselt (kein Passwort)",
"noPasswordWarning": "Wenn für dieses Konto kein Passwort verwendet wird, bedeutet dies, dass alle lokal gespeicherten Daten nicht verschlüsselt werden.",
"yourDisplayName": "Dein Anzeigename",
"currentPasswordLabel": "Aktuelles Passwort",
"password2Label": "Passwort erneut eingeben",
"password1Label": "Passwort",
"passwordErrorEmpty": "Passwort darf nicht leer sein",
"createProfileBtn": "Profil erstellen",
"passwordErrorMatch": "Passwörter stimmen nicht überein",
"saveProfileBtn": "Profil speichern",
"passwordChangeError": "Fehler beim Ändern des Passworts: Eingegebenes Passwort abgelehnt",
"deleteConfirmLabel": "Gib LÖSCHEN ein, um zu bestätigen",
"deleteProfileBtn": "Profil löschen",
"deleteConfirmText": "LÖSCHEN",
"deleteProfileConfirmBtn": "Profil wirklich löschen",
"addNewProfileBtn": "Neues Profil hinzufügen",
"networkStatusConnecting": "Verbinde zu Netzwerk und Peers ...",
"newConnectionPaneTitle": "Neue Verbindung",
"password1Label": "Passwort",
"password2Label": "Passwort erneut eingeben",
"createProfileBtn": "Profil speichern",
"saveProfileBtn": "Profil speichern",
"passwordErrorMatch": "Passwörter stimmen nicht überein",
"passwordChangeError": "Fehler beim Ändern des Passworts: Das Passwort wurde abgelehnt",
"deleteConfirmText": "LÖSCHEN",
"password": "Passwort",
"enterProfilePassword": "Gib ein Passwort ein, um deine Profile anzuzeigen",
"error0ProfilesLoadedForPassword": "0 Profile mit diesem Passwort geladen",
"yourProfiles": "Deine Profile",
"yourServers": "Deine Server",
"unlock": "Entsperren",
"versionBuilddate": "Version: %1 Aufgebaut auf: %2",
"blockUnknownLabel": "Unbekannte Peers blockieren",
"settingLanguage": "Sprache",
"localeDe": "Deutsche",
"settingInterfaceZoom": "Zoomstufe",
"settingTheme": "Thema",
"themeLight": "Licht",
"themeDark": "Dunkel",
"versionTor": "Version %1 mit tor %2",
"version": "Version %1",
"builddate": "Aufgebaut auf: %2",
"loadingTor": "Tor wird geladen...",
"viewGroupMembershipTooltip": "Gruppenmitgliedschaft anzeigen",
"networkStatusAttemptingTor": "Versuche, eine Verbindung mit dem Tor-Netzwerk herzustellen",
"networkStatusOnline": "Online",
"smallTextLabel": "Klein",
"defaultScalingText": "defaultmäßige Textgröße (Skalierungsfaktor:",
"largeTextLabel": "Groß",
"zoomLabel": "Benutzeroberflächen-Zoom (betriftt hauptsächlich Text- und Knopgrößen)",
"cwtchSettingsTitle": "Cwtch Einstellungen",
"copiedToClipboardNotification": "in die Zwischenablage kopiert",
"deleteBtn": "Löschen",
"saveBtn": "Speichern",
"addressLabel": "Adresse",
"puzzleGameBtn": "Puzzlespiel",
"bulletinsBtn": "Meldungen",
"listsBtn": "Listen",
"chatBtn": "Chat",
"rejectGroupBtn": "Ablehnen",
"acceptGroupBtn": "Annehmen",
"acceptGroupInviteLabel": "Möchtest Du die Einladung annehmen",
"newGroupBtn": "Neue Gruppe anlegen",
"copiedClipboardNotification": "in die Zwischenablage kopiert",
"copyBtn": "Kopieren",
"pendingLabel": "Bestätigung ausstehend",
"acknowledgedLabel": "bestätigt",
"couldNotSendMsgError": "Nachricht konnte nicht gesendet werden",
"membershipDescription": "Unten steht eine Liste der Benutzer, die Nachrichten an die Gruppe gesendet haben. Möglicherweise enthält diese Benutzerzliste nicht alle, die Zugang zur Gruppe haben.",
"inviteBtn": "Einladen",
"inviteToGroupLabel": "In die Gruppe einladen",
"groupNameLabel": "Gruppenname",
"invitationLabel": "Einladung",
"serverLabel": "Server",
"titlePlaceholder": "Titel...",
"postNewBulletinLabel": "Neue Meldung veröffentlichen",
"newBulletinLabel": "Neue Meldung",
"createGroupBtn": "Anlegen",
"defaultGroupName": "Tolle Gruppe",
"createGroupTitle": "Gruppe Anlegen"
"versionBuilddate": "Version: %1 Erstellt am: %2",
"settingLanguage": "Sprache",
"settingInterfaceZoom": "Zoomstufe",
"largeTextLabel": "Groß",
"themeLight": "Hell",
"settingTheme": "Helles Farbschema benutzen",
"themeDark": "Dunkel",
"experimentsEnabled": "Experimentelle Funktionen aktivieren",
"version": "Version %1",
"versionTor": "Version %1 mit Tor %2",
"builddate": "Erstellt am: %2",
"defaultScalingText": "Text in Standardgröße (Skalierungsfaktor:",
"smallTextLabel": "Klein",
"viewGroupMembershipTooltip": "Gruppenmitgliedschaft anzeigen",
"loadingTor": "Tor wird geladen...",
"networkStatusDisconnected": "Verbindung zum Internet unterbrochen, überprüfe Deine Verbindung",
"networkStatusAttemptingTor": "Versuch, eine Verbindung zum Tor-Netzwerk herzustellen",
"networkStatusConnecting": "Verbindung mit Netzwerk und Kontakten...",
"networkStatusOnline": "Online",
"newConnectionPaneTitle": "Neue Verbindung",
"addNewItem": "Hinzufügen eines neuen Elements zur Liste",
"addListItem": "Hinzufügen eines neuen Listenelements",
"todoPlaceholder": "noch zu erledigen...",
"enterCurrentPasswordForDelete": "Bitte gib das aktuelle Passwort ein, um dieses Profil zu löschen.",
"enableGroups": "Gruppenchat aktivieren",
"conversationSettings": "Konversationseinstellungen",
"invalidImportString": "Ungültige Importzeichenfolge",
"tooltipOpenSettings": "Öffne das Einstellungsmenü",
"contactAlreadyExists": "Kontakt existiert bereits",
"titleManageContacts": "Konversationen",
"tooltipAddContact": "Neuen Kontakt oder Unterhaltung hinzufügen",
"tooltipUnlockProfiles": "Entsperre verschlüsselte Profile durch Eingabe des Passworts.",
"titleManageProfiles": "Cwtch Profile verwalten",
"descriptionExperiments": "Bei den Cwtch-Experimenten handelt es sich um optionale Opt-in-Funktionen, die Cwtch um zusätzliche Funktionen erweitern, bei denen der Datenschutz anders berücksichtigt werden kann als beim traditionellen 1:1-Chat mit Metadaten, z. B. Gruppenchat, Bot-Integration usw.",
"descriptionExperimentsGroups": "Das Experiment Gruppen ermöglicht es Cwtch, sich mit einer nicht vertrauenswürdigen Serverinfrastruktur zu verbinden, um die Kommunikation mit mehr als einem Kontakt zu erleichtern.",
"descriptionBlockUnknownConnections": "Wenn diese Option aktiviert ist, werden Verbindungen von Cwtch-Benutzern, die nicht zu Deiner Kontaktliste hinzugefügt wurden, automatisch geschlossen.",
"successfullAddedContact": "Erfolgreich hinzugefügt",
"titleManageServers": "Server verwalten",
"inviteToGroup": "Du wurdest eingeladen einer Gruppe beizutreten:",
"reallyLeaveThisGroupPrompt": "Bist du sicher, dass du diese Konversation verlassen möchtest? Alle Nachrichten und Attribute werden gelöscht.",
"leaveConversation": "Diese Konversation verlassen",
"yesLeave": "Ja, diese Konversation verlassen",
"newPassword": "Neues Passwort",
"chatHistoryDefault": "Diese Konversation wird gelöscht, wenn Cwtch geschlossen wird! Der Nachrichtenverlauf kann für jedes Gespräch über das Menü Einstellungen oben rechts aktiviert werden.",
"accepted": "Angenommen!",
"rejected": "Abgelehnt!",
"contactSuggestion": "Dies ist ein Kontaktvorschlag für: ",
"sendAnInvitation": "Du hast eine Einladung geschickt für: ",
"torStatus": "Tor-Status",
"torVersion": "Tor-Version",
"resetTor": "Zurücksetzen",
"sendMessage": "Nachricht senden",
"cancel": "Abbrechen",
"sendInvite": "Sende eine Kontakt- oder Gruppeneinladung",
"addServerFirst": "Du musst einen Server hinzufügen, bevor du eine Gruppe erstellen kannst",
"deleteProfileSuccess": "Erfolgreich Profil gelöscht",
"nickChangeSuccess": "Profilename erfolgreich geändert",
"createProfileToBegin": "Bitte erstelle oder entsperre ein Profil, um zu beginnen",
"addContactFirst": "Füge einen Kontakt hinzu oder wähle einen aus, um den Chat zu beginnen.",
"debugLog": "Aktivieren der Konsolendebugprotokollierung",
"torNetworkStatus": "Tor Netzwerkstatus",
"profileDeleteSuccess": "Profil erfolgreich gelöscht",
"malformedMessage": "Fehlerhafte Nachricht",
"shutdownCwtchTooltip": "Cwtch herunterfahren",
"shutdownCwtchDialog": "Bist Du sicher, dass Du Cwtch herunterfahren möchtest? Damit werden alle Verbindungen geschlossen und die Anwendung beendet.",
"shutdownCwtchDialogTitle": "Cwtch herunterfahren?",
"shutdownCwtchAction": "Cwtch herunterfahren",
"groupInviteSettingsWarning": "Sie wurden eingeladen, einer Gruppe beizutreten! Bitte aktiviere das Gruppenchat-Experiment in den Einstellungen, um diese Einladung anzuzeigen.",
"tooltipShowPassword": "Password anzeigen",
"notificationNewMessageFromPeer": "Neue Nachricht von einem Kontakt!",
"tooltipHidePassword": "Passwort verbergen",
"notificationNewMessageFromGroup": "Neue Nachricht in einer Gruppe!",
"tooltipAcceptContactRequest": "Akzeptiere diese Kontaktanfrage.",
"tooltipRejectContactRequest": "Diese Kontaktanfrage ablehnen",
"tooltipReplyToThisMessage": "Auf diese Nachricht antworten",
"tooltipRemoveThisQuotedMessage": "Zitierte Nachricht entfernen.",
"settingUIColumnLandscape": "UI-Spalten im Querformat",
"settingUIColumnPortrait": "UI-Spalten im Hochformat",
"settingUIColumnDouble12Ratio": "Doppelt (1:2)",
"settingUIColumnSingle": "Einzeln",
"settingUIColumnDouble14Ratio": "Doppelt (1:4)",
"settingUIColumnOptionSame": "Identisch mit der Hochformat-Einstellung",
"contactGoto": "Zur Unterhaltung mit %1 wechseln",
"zoomLabel": "Benutzeroberflächen-Zoom (betrifft hauptsächlich Text- und Button-Größen)",
"blockUnknownLabel": "Unbekannte Kontakte blockieren",
"addContact": "Kontakt hinzufügen",
"addContactConfirm": "Kontakt hinzufügen %1",
"encryptedProfileDescription": "Das Verschlüsseln eines Profils mit einem Passwort schützt es vor anderen Personen, die ebenfalls dieses Gerät benutzten könnten. Verschlüsselte Profile können nicht entschlüsselt, angezeigt und benutzt werden bis das korrekte Passwort zum Entsperren eingegeben wurde.",
"plainProfileDescription": "Wir empfehlen, dass Du Deine Cwtch-Profile mit einem Passwort schützst. Wenn Du kein Passwort für dieses Profil festlegst, kann jeder, der Zugang zu diesem Gerät hat, auf Informationen über dieses Profil zugreifen, einschließlich Kontakte, Nachrichten und sensible kryptographische Schlüssel.",
"placeholderEnterMessage": "Gib eine Nachricht ein...",
"blockedMessageMessage": "Diese Nachricht stammt von einem Profil, das Du blockiert hast.",
"showMessageButton": "Nachricht anzeigen",
"blockUnknownConnectionsEnabledDescription": "Verbindungen von unbekannten Kontakten werden blockiert. Du kannst dies in den Einstellungen ändern.",
"archiveConversation": "Archiviere diese Konversation",
"streamerModeLabel": "Streamer\/Präsentationsmodus",
"descriptionStreamerMode": "Wenn diese Option aktiviert ist, wird die App für das Streaming oder die Präsentation optisch privater gestaltet, indem z. B. Profil- und Kontaktadressen ausgeblendet werden.",
"retrievingManifestMessage": "Dateiinformationen werden abgerufen...",
"openFolderButton": "Ordner öffnen",
"downloadFileButton": "Herunterladen",
"labelFilesize": "Größe",
"labelFilename": "Dateiname",
"messageEnableFileSharing": "Aktiviere das Dateifreigabe-Experiment, um diese Nachricht anzuzeigen.",
"messageFileSent": "Du hast eine Datei gesendet",
"messageFileOffered": "Kontakt bietet an, Dir eine Datei zu schicken",
"tooltipSendFile": "Datei senden",
"settingFileSharing": "Gemeinsame Nutzung von Dateien",
"descriptionFileSharing": "Mit dem Dateifreigabe-Experiment kannst Du Dateien von Cwtch-Kontakten und -Gruppen senden und empfangen. Beachte, dass das Teilen einer Datei mit einer Gruppe dazu führt, dass sich die Mitglieder dieser Gruppe direkt mit Dir über Cwtch verbinden, um die Datei herunterzuladen.",
"titleManageProfilesShort": "Profile",
"addServerTitle": "Server hinzufügen",
"editServerTitle": "Server bearbeiten",
"serverAddress": "Server-Adresse",
"serverDescriptionLabel": "Server-Beschreibung",
"serverDescriptionDescription": "Deine Beschreibung des Servers ist nur für die persönliche Verwaltung bestimmt und wird nicht weitergegeben.",
"serverEnabled": "Server aktiviert",
"serverEnabledDescription": "Server starten oder stoppen",
"serverAutostartLabel": "Autostart",
"serverAutostartDescription": "Legt fest, ob die Anwendung den Server beim Start automatisch starten soll",
"saveServerButton": "Server sichern",
"serversManagerTitleLong": "Von Dir gehostete Server",
"serversManagerTitleShort": "Server",
"addServerTooltip": "Neuen Server hinzufügen",
"unlockServerTip": "Bitte entsperre oder erstelle einen Server, um zu beginnen!",
"unlockProfileTip": "Bitte erstelle oder entsperre ein Profil, um zu beginnen!",
"enterServerPassword": "Passwort um Server zu entsperren",
"settingServers": "Server hosten",
"settingServersDescription": "Das Experiment \"Hosting-Server\" ermöglicht das Hosting und die Verwaltung von Cwtch-Servern",
"copyAddress": "Adresse kopieren",
"enterCurrentPasswordForDeleteServer": "Bitte gib das aktuelle Passwort ein, um diesen Server zu löschen",
"deleteServerSuccess": "Server erfolgreich gelöscht",
"deleteServerConfirmBtn": "Server wirklich löschen",
"plainServerDescription": "Wir empfehlen, dass du deinen Cwtch-Server mit einem Passwort schützst. Wenn Du diesen Server nicht mit einem Kennwort versiehst, kann jeder, der Zugang zu diesem Gerät hat, auf Informationen über diesen Server zugreifen, einschließlich sensibler kryptografischer Schlüssel.",
"encryptedServerDescription": "Das Verschlüsseln eines Servers mit einem Kennwort schützt ihn vor anderen Personen, die dieses Gerät ebenfalls benutzen könnten. Verschlüsselte Server können nicht entschlüsselt, angezeigt oder aufgerufen werden, bis das richtige Kennwort eingegeben wird, um sie zu entsperren.",
"fileSavedTo": "Gesichert in",
"fileInterrupted": "Unterbrochen",
"fileCheckingStatus": "Überprüfen des Download-Status",
"verfiyResumeButton": "Überprüfen\/Fortsetzen",
"copyServerKeys": "Schlüssel kopieren",
"newMessagesLabel": "Neue Nachrichten",
"importLocalServerLabel": "Importieren eines lokal gehosteten Servers",
"importLocalServerSelectText": "Lokalen Server auswählen",
"importLocalServerButton": "%1 importieren",
"groupsOnThisServerLabel": "Gruppen, in denen ich bin, werden auf diesem Server gehostet",
"fieldDescriptionLabel": "Beschreibung",
"manageKnownServersButton": "Bekannte Server verwalten",
"displayNameTooltip": "Bitte gib einen Anzeigenamen ein",
"manageKnownServersLong": "Bekannte Server verwalten",
"manageKnownServersShort": "Server",
"serverMetricsLabel": "Server-Metriken",
"serverTotalMessagesLabel": "Nachrichten insgesamt",
"serverConnectionsLabel": "Verbindung",
"enableExperimentClickableLinks": "Anklickbare Links aktivieren",
"experimentClickableLinksDescription": "Das Experiment mit anklickbaren Links ermöglicht es dir, auf URLs zu klicken, die in Nachrichten geteilt werden",
"settingImagePreviews": "Bild Voransichten und Profil Bilder",
"settingDownloadFolder": "Download Ordner",
"themeNameCwtch": "Cwtch",
"themeNameWitch": "Hexe",
"themeNameVampire": "Vampir",
"themeNameGhost": "Geist",
"themeNamePumpkin": "Kürbis",
"themeNameMidnight": "Mitternacht",
"themeNameMermaid": "Meerjungfrau",
"themeNameNeon1": "Neon1",
"themeColorLabel": "Farbthema",
"themeNameNeon2": "Neon2",
"loadingCwtch": "Lade Cwtch...",
"storageMigrationModalMessage": "Profile in ein neues Speicherformat migrieren. Das kann ein paar Minuten dauern...",
"msgFileTooBig": "Dateigröße darf nicht größer als 10 GB sein",
"msgConfirmSend": "Möchtest Du diese Datei wirklich senden",
"btnSendFile": "Datei senden",
"msgAddToAccept": "Füge dieses Konto zu Deinen Kontakten hinzu, um diese Datei zu akzeptieren.",
"torSettingsEnabledAdvanced": "Erweiterte Tor-Konfiguration aktivieren",
"torSettingsEnabledAdvancedDescription": "Verwende einen bestehenden Tor-Dienst auf deinem System oder ändere die Parameter des Cwtch Tor Services",
"torSettingsCustomSocksPort": "Benutzerdefinierter SOCKS-Port",
"torSettingsCustomSocksPortDescription": "Verwende einen eigenen Port für Datenverbindungen zum Tor-Proxy",
"torSettingsCustomControlPort": "Benutzerdefinierter Kontrollport",
"torSettingsCustomControlPortDescription": "Verwende einen eigenen Port für Kontrollverbindungen zum Tor-Proxy",
"torSettingsUseCustomTorServiceConfiguration": "Verwende eine eigene Tor-Service-Konfiguration (torrc)",
"torSettingsUseCustomTorServiceConfigurastionDescription": "Überschreibe die Standard-Tor-Konfiguration. Warnung: Dies könnte gefährlich sein. Schalte dies nur ein, wenn Du weißt, was Du machst.",
"torSettingsErrorSettingPort": "Port Nummer muss zwischen 1 und 65535 liegen",
"fileSharingSettingsDownloadFolderDescription": "Wenn Dateien automatisch heruntergeladen werden (z. B. Bilddateien, wenn die Bildvorschau aktiviert ist), wird ein Standardspeicherort benötigt, an den die Dateien heruntergeladen werden.",
"fileSharingSettingsDownloadFolderTooltip": "Durchsuchen, um einen anderen Standardordner für heruntergeladene Dateien auszuwählen.",
"labelACNCircuitInfo": "ACN Circuit Information",
"descriptionACNCircuitInfo": "Ausführliche Informationen über den Pfad, den das anonyme Kommunikationsnetzwerk verwendet, um eine Verbindung mit dieser Konversation herzustellen.",
"labelTorNetwork": "Tor Netzwerk",
"torSettingsEnableCache": "Tor Konsensus zwischenspeichern",
"torSettingsEnabledCacheDescription": "Zwischenspeichern des aktuell heruntergeladenen Tor-Konsenses, um ihn beim nächsten Öffnen von Cwtch wiederzuverwenden. Dies ermöglicht einen schnelleren Start von Tor. Wenn deaktiviert, löscht Cwtch die zwischengespeicherten Daten beim Starten.",
"tooltipSelectACustomProfileImage": "Auswählen eines benutzerdefinierten Profilbilds",
"notificationPolicyMute": "Stummschalten",
"notificationPolicyOptIn": "Annehmen",
"notificationPolicyDefaultAll": "Standard Alle",
"conversationNotificationPolicyDefault": "Standard",
"conversationNotificationPolicyOptIn": "Annehmen",
"notificationPolicySettingLabel": "Benachrichtigungsrichtlinie",
"conversationNotificationPolicyNever": "Niemals",
"notificationPolicySettingDescription": "Steuert das standardmäßige Benachrichtigungsverhalten der Anwendungsbenachrichtigungsverhalten",
"notificationContentSettingLabel": "Inhalt der Benachrichtigung",
"notificationContentSettingDescription": "Steuert den Inhalt von Konversationsbenachrichtigungen",
"settingGroupBehaviour": "Verhalten",
"settingsGroupAppearance": "Aussehen",
"settingsGroupExperiments": "Experimente",
"conversationNotificationPolicySettingLabel": "Richtlinie für Konversationsbenachrichtigungen",
"conversationNotificationPolicySettingDescription": "Steuerung des Benachrichtigungsverhaltens für diese Konversation",
"notificationContentSimpleEvent": "Einfaches Ereignis",
"notificationContentContactInfo": "Informationen zur Konversationseinstellungen",
"newMessageNotificationSimple": "Neue Nachricht",
"newMessageNotificationConversationInfo": "Neue Nachricht von %1",
"exportProfile": "Profil exportieren",
"exportProfileTooltip": "Sichern des Profils in eine verschlüsselte Datei. Die verschlüsselte Datei kann in eine andere Cwtch App importiert werden.",
"importProfile": "Profil importieren",
"importProfileTooltip": "Benutze ein verschlüsseltes Cwtch Backup, um ein in einer anderen Cwtch Instanz erzeugtes Profil zu aktivieren.",
"failedToImportProfile": "Fehler beim Import des Profils",
"successfullyImportedProfile": "Profil erfolgreich importiert: %profile",
"shuttingDownApp": "Herunterfahren ...",
"clickableLinksWarning": "Das Öffnen dieser URL wird eine Anwendung außerhalb von Cwtch starten und könnte Metadaten enthüllen oder anderweitig die Sicherheit von Cwtch gefährden. Öffne nur URLs von Personen, denen Du vertraust. Bist Du sicher, dass Du fortfahren möchtest?",
"clickableLinkOpen": "URL öffnen",
"clickableLinksCopy": "URL kopieren",
"clickableLinkError": "Beim Versuch, die URL zu öffnen, ist ein Fehler aufgetreten",
"formattingExperiment": "Formatierung von Nachrichtenbearbeitung",
"messageFormattingDescription": "Aktiviere Richtext Formatierung in den angezeigten Nachrichten z.B. **fett** und *kursiv*",
"thisFeatureRequiresGroupExpermientsToBeEnabled": "Für diese Funktion muss das Gruppen-Experiment in den Einstellungen aktiviert sein.",
"settingAndroidPowerExemption": "Ignoriere Android Akku-Optimierungen",
"settingAndroidPowerExemptionDescription": "Optional: Fordere Android auf, Cwtch von der optimierten Energieverwaltung auszunehmen. Dies wird zu einer besseren Stabilität auf Kosten eines höheren Batterieverbrauchs führen.",
"settingsAndroidPowerReenablePopup": "Die Akku-Optimierung kann in Cwtch nicht wieder aktiviert werden. Bitte gehe zu Android \/ Einstellungen \/ Apps \/ Cwtch \/ Batterie und setze die Nutzung auf \"Optimiert\".",
"okButton": "OK",
"tooltipBoldText": "Fett",
"tooltipBackToMessageEditing": "Zurück zu Nachrichtenbearbeitung",
"tooltipItalicize": "Kursiv",
"tooltipSuperscript": "Hochgestellt",
"tooltipSubscript": "Tiefgestellt",
"tooltipStrikethrough": "Durchgestrichen",
"tooltipCode": "Code \/ Monospace",
"tooltipPreviewFormatting": "Vorschau Nachrichtenformatierung"
}

367
lib/l10n/intl_el.arb Normal file
View File

@ -0,0 +1,367 @@
{
"@@locale": "el",
"@@last_modified": "2022-12-05T21:06:07+01:00",
"profileEnabledDescription": "Start or stop the profile",
"profileAutostartDescription": "Controls if the profile will be automatically launched on startup",
"profileEnabled": "Enable",
"profileAutostartLabel": "Autostart",
"localePtBr": "Brazilian Portuguese \/ Português do Brasil",
"localeNl": "Dutch \/ Dutch",
"experimentQRCodeDescription": "QR Code support allows sharing data (such as profile identity) by QR Codes",
"enableExperimentQRCode": "QR Codes",
"shareMenuQRCode": "Show QR Code",
"shareProfileMenuTooltop": "Share profile via...",
"acquiredTicketsFromServer": "Antispam Challenge Complete",
"acquiringTicketsFromServer": "Performing Antispam Challenge",
"errorDownloadDirectoryDoesNotExist": "Filesharing cannot be enabled because the Download Folder has not been set, or is set to a folder that does not exist.",
"localeTr": "Τουρκικά \/ Türk",
"localeIt": "Italian \/ Italiano",
"localeCy": "Ουαλικά \/ Cymraeg",
"tooltipUnpinConversation": "Unpin conversation from the top of \"Conversations\"",
"tooltipPinConversation": "Pin conversation to the top of \"Conversations\"",
"replyingTo": "Replying to %1",
"fileDownloadUnavailable": "This file appears unavailable for download. The sender may have disabled downloads for this file.",
"messageNoReplies": "There are no replies to this message.",
"headingReplies": "Replies",
"viewReplies": "View replies to this message",
"restartFileShare": "Start Sharing File",
"stopSharingFile": "Stop Sharing File",
"manageSharedFiles": "Manage Shared Files",
"localeDe": "Γερμανός \/ Deutsch",
"localeEn": "English \/ English",
"localeLb": "Λουξεμβουργιανά",
"localeNo": "Νορβηγικά",
"localeEl": "Ελληνικά",
"localePl": "Polish \/ Polski",
"localeRo": "Ρουμανικά",
"localeRU": "Ρωσικά",
"localeEs": "Spanish \/ Español",
"localeDa": "Δανικά",
"localePt": "Portuguese \/ Portuguesa",
"localeFr": "French \/ Français",
"settingImagePreviewsDescription": "Θα γίνει αυτόματη λήψη και προεπισκόπηση των εικόνων. Λάβετε υπόψη ότι οι προεπισκοπήσεις εικόνων μπορεί συχνά να οδηγήσουν σε ευπάθειες ασφαλείας και δεν θα πρέπει να ενεργοποιήσετε αυτό το πείραμα εάν χρησιμοποιείτε το Cwtch με μη αξιόπιστες επαφές. Οι φωτογραφίες προφίλ έχουν προγραμματιστεί για το Cwtch 1.6.",
"tooltipPreviewFormatting": "Preview Message Formatting",
"tooltipCode": "Code \/ Monospace",
"tooltipStrikethrough": "Strikethrough",
"tooltipSubscript": "Subscript",
"tooltipSuperscript": "Superscript",
"tooltipItalicize": "Italic",
"tooltipBackToMessageEditing": "Back to Message Editing",
"tooltipBoldText": "Bold",
"okButton": "OK",
"settingsAndroidPowerReenablePopup": "Cannot re-enable Battery Optimization from within Cwtch. Please go to Android \/ Settings \/ Apps \/ Cwtch \/ Battery and set Usage to 'Optimized'",
"settingAndroidPowerExemptionDescription": "Optional: Request Android to exempt Cwtch from optimized power management. This will result in better stability at the cost of greater battery use.",
"settingAndroidPowerExemption": "Android Ignore Battery Optimizations",
"thisFeatureRequiresGroupExpermientsToBeEnabled": "This feature requires the Groups Experiment to be enabled in Settings",
"messageFormattingDescription": "Enable rich text formatting in displayed messages e.g. **bold** and *italic*",
"formattingExperiment": "Message Formatting",
"clickableLinkError": "Error encountered while attempting to open URL",
"clickableLinksCopy": "Copy URL",
"clickableLinkOpen": "Open URL",
"clickableLinksWarning": "Opening this URL will launch an application outside of Cwtch and may reveal metadata or otherwise compromise the security of Cwtch. Only open URLs from people you trust. Are you sure you want to continue?",
"shuttingDownApp": "Shutting down...",
"successfullyImportedProfile": "Successfully Imported Profile: %profile",
"failedToImportProfile": "Error Importing Profile",
"importProfileTooltip": "Use an encrypted Cwtch backup to bring in a profile created in another instance of Cwtch.",
"importProfile": "Import Profile",
"exportProfileTooltip": "Backup this profile to an encrypted file. The encrypted file can be imported into another Cwtch app.",
"exportProfile": "Export Profile",
"server": "Διακομιστής",
"peerName": "Όνομα",
"peerAddress": "Διεύθυνση",
"joinGroupTab": "Εγγραφείτε σε μια ομάδα",
"addPeerTab": "Προσθήκη επαφής",
"defaultGroupName": "Φοβερή ομάδα",
"serverLabel": "Server",
"createGroupTitle": "Δημιουργία ομάδας",
"conversationSettings": "Ρυθμίσεις συνομιλίας",
"addContact": "Προσθήκη επαφής",
"addContactConfirm": "Προσθήκη επαφής %1",
"placeholderEnterMessage": "Πληκτρολογήστε ένα μήνυμα...",
"blockedMessageMessage": "Αυτό το μήνυμα προέρχεται από ένα προφίλ που έχετε μπλοκάρει.",
"showMessageButton": "Εμφάνιση μηνύματος",
"archiveConversation": "Αρχειοθετήστε αυτήν τη συνομιλία",
"retrievingManifestMessage": "Ανάκτηση πληροφοριών αρχείου...",
"openFolderButton": "Άνοιγμα φακέλου",
"downloadFileButton": "Λήψη",
"labelFilename": "Όνομα αρχείου",
"labelFilesize": "Μέγεθος",
"messageFileSent": "Στείλατε ένα αρχείο",
"messageFileOffered": "Η επαφή προσφέρεται να σας στείλει ένα αρχείο",
"tooltipSendFile": "Αποστολή αρχείου",
"titleManageProfilesShort": "Προφίλ",
"addServerTitle": "Προσθήκη διακομιστή",
"editServerTitle": "Επεξεργασία διακομιστή",
"serverAddress": "Διεύθυνση διακομιστή",
"serverDescriptionLabel": "Περιγραφή διακομιστή",
"serverEnabled": "Ενεργοποίηση διακομιστή",
"serverEnabledDescription": "Εκκίνηση ή διακοπή του διακομιστή",
"serverAutostartLabel": "Αυτόματη εκκίνηση",
"enterServerPassword": "Εισαγάγετε τον κωδικό πρόσβασης για να ξεκλειδώσετε τον διακομιστή",
"addServerTooltip": "Προσθήκη νέου διακομιστή",
"serversManagerTitleShort": "Διακομιστές",
"saveServerButton": "Αποθήκευση διακομιστή",
"serversManagerTitleLong": "Διακομιστές που φιλοξενείτε",
"copyAddress": "Αντιγραφή διεύθυνσης",
"enterCurrentPasswordForDeleteServer": "Παρακαλούμε εισάγετε τον τρέχοντα κωδικό πρόσβασης για να διαγράψετε αυτόν τον διακομιστή",
"deleteServerSuccess": "Ο διακομιστής διαγράφηκε με επιτυχία",
"fileSavedTo": "Αποθηκεύτηκε στο",
"fileInterrupted": "Διακόπηκε",
"fileCheckingStatus": "Έλεγχος κατάστασης λήψης",
"verfiyResumeButton": "Επαλήθευση\/συνέχιση",
"copyServerKeys": "Αντιγραφή κλειδιών",
"newMessagesLabel": "Νέα μηνύματα",
"importLocalServerLabel": "Εισαγωγή ενός τοπικά φιλοξενούμενου διακομιστή",
"importLocalServerSelectText": "Επιλογή τοπικού διακομιστή",
"fieldDescriptionLabel": "Περιγραφή",
"manageKnownServersButton": "Διαχείριση γνωστών διακομιστών",
"displayNameTooltip": "Παρακαλώ εισάγετε ένα εμφανιζόμενο όνομα",
"manageKnownServersLong": "Διαχείριση γνωστών διακομιστών",
"manageKnownServersShort": "Διακομιστές",
"serverTotalMessagesLabel": "Σύνολο μηνυμάτων",
"serverConnectionsLabel": "Σύνδεση",
"themeColorLabel": "Χρωματική παλέτα",
"fileSharingSettingsDownloadFolderTooltip": "Επιλέξετε έναν διαφορετικό προεπιλεγμένο φάκελο για τα αρχεία που έχουν ληφθεί.",
"torSettingsEnableCache": "Αποθήκευση Tor Consensus",
"settingImagePreviews": "Προεπισκοπήσεις εικόνων και εικόνες προφίλ",
"settingDownloadFolder": "Φάκελος Λήψης",
"themeNameCwtch": "Cwtch",
"themeNameNeon1": "Neon1",
"themeNameNeon2": "Neon2",
"loadingCwtch": "Φόρτωση Cwtch...",
"storageMigrationModalMessage": "Μετεγκατάσταση προφίλ σε νέα μορφή αποθήκευσης. Αυτό μπορεί να πάρει μερικά λεπτά...",
"msgFileTooBig": "Το μέγεθος του αρχείου δεν μπορεί να υπερβαίνει τα 10 GB",
"msgConfirmSend": "Είστε σίγουρος ότι θέλετε να στείλετε το",
"btnSendFile": "Αποστολή αρχείου",
"msgAddToAccept": "Προσθέστε αυτόν τον λογαριασμό στις επαφές σας για να αποδεχτείτε αυτό το αρχείο.",
"torSettingsEnabledAdvanced": "Ενεργοποιήστε την προηγμένη ρύθμιση Tor",
"torSettingsEnabledAdvancedDescription": "Χρησιμοποιήστε μια υπάρχουσα υπηρεσία Tor στο σύστημά σας ή αλλάξτε τις παραμέτρους της υπηρεσίας Tor του Cwtch.",
"torSettingsCustomSocksPort": "Προσαρμοσμένη θύρα SOCKS",
"descriptionACNCircuitInfo": "Λεπτομερείς πληροφορίες σχετικά με τη διαδρομή που χρησιμοποιεί το ανώνυμο δίκτυο επικοινωνίας για να συνδεθεί σε αυτή τη συνομιλία.",
"labelTorNetwork": "Δίκτυο Tor",
"torSettingsEnabledCacheDescription": "Αποθηκεύστε στην προσωρινή μνήμη την τρέχουσα συναίνεση Tor για να την επαναχρησιμοποιήσετε την επόμενη φορά που θα ανοίξει το Cwtch. Αυτό θα επιτρέψει στο Tor να ξεκινήσει γρηγορότερα. Όταν είναι απενεργοποιημένο, το Cwtch θα καθαρίσει τα δεδομένα που έχουν αποθηκευτεί στην προσωρινή μνήμη κατά την εκκίνηση.",
"notificationPolicyMute": "Σίγαση",
"notificationContentContactInfo": "Πληροφορίες συνομιλίας",
"newMessageNotificationSimple": "Νέο μήνυμα",
"newMessageNotificationConversationInfo": "Νέο μήνυμα από %1",
"notificationContentSimpleEvent": "Plain Event",
"conversationNotificationPolicySettingDescription": "Control notification behaviour for this conversation",
"conversationNotificationPolicySettingLabel": "Conversation Notification Policy",
"settingsGroupExperiments": "Experiments",
"settingsGroupAppearance": "Appearance",
"settingGroupBehaviour": "Behaviour",
"notificationContentSettingDescription": "Controls the contents of conversation notifications",
"notificationPolicySettingDescription": "Controls the default application notification behaviour",
"notificationContentSettingLabel": "Notification Content",
"notificationPolicySettingLabel": "Notification Policy",
"conversationNotificationPolicyNever": "Never",
"conversationNotificationPolicyOptIn": "Opt In",
"conversationNotificationPolicyDefault": "Default",
"notificationPolicyDefaultAll": "Default All",
"notificationPolicyOptIn": "Opt In",
"tooltipSelectACustomProfileImage": "Select a Custom Profile Image",
"labelACNCircuitInfo": "ACN Circuit Info",
"fileSharingSettingsDownloadFolderDescription": "When files are downloaded automatically (e.g. image files, when image previews are enabled) a default location to download the files to is needed.",
"torSettingsErrorSettingPort": "Port Number must be between 1 and 65535",
"torSettingsUseCustomTorServiceConfigurastionDescription": "Override the default tor configuration. Warning: This could be dangerous. Only turn this on if you know what you are doing.",
"torSettingsUseCustomTorServiceConfiguration": "Use a Custom Tor Service Configuration (torrc)",
"torSettingsCustomControlPortDescription": "Use a custom port for control connections to the Tor proxy",
"torSettingsCustomControlPort": "Custom Control Port",
"torSettingsCustomSocksPortDescription": "Use a custom port for data connections to the Tor proxy",
"themeNameMidnight": "Midnight",
"themeNameMermaid": "Mermaid",
"themeNamePumpkin": "Pumpkin",
"themeNameGhost": "Ghost",
"themeNameVampire": "Vampire",
"themeNameWitch": "Witch",
"experimentClickableLinksDescription": "The clickable links experiment allows you to click on URLs shared in messages",
"enableExperimentClickableLinks": "Enable Clickable Links",
"serverMetricsLabel": "Server Metrics",
"groupsOnThisServerLabel": "Groups I am in hosted on this server",
"importLocalServerButton": "Import %1",
"encryptedServerDescription": "Encrypting a server with a password protects it from other people who may also use this device. Encrypted servers cannot be decrypted, displayed or accessed until the correct password is entered to unlock them.",
"plainServerDescription": "We recommend that you protect your Cwtch servers with a password. If you do not set a password on this server then anyone who has access to this device may be able to access information about this server, including sensitive cryptographic keys.",
"deleteServerConfirmBtn": "Really delete server",
"settingServersDescription": "The hosting servers experiment enables hosting and managing Cwtch servers",
"settingServers": "Hosting Servers",
"unlockProfileTip": "Please create or unlock a profile to begin!",
"unlockServerTip": "Please create or unlock a server to begin!",
"serverAutostartDescription": "Controls if the application will automatically launch the server on start",
"serverDescriptionDescription": "Your description of the server for personal management use only, will never be shared",
"descriptionFileSharing": "The file sharing experiment allows you to send and receive files from Cwtch contacts and groups. Note that sharing a file with a group will result in members of that group connecting with you directly over Cwtch to download it.",
"settingFileSharing": "File Sharing",
"messageEnableFileSharing": "Enable the file sharing experiment to view this message.",
"descriptionStreamerMode": "If turned on, this option makes the app more visually private for streaming or presenting with, for example, hiding profile and contact addresses",
"streamerModeLabel": "Streamer\/Presentation Mode",
"blockUnknownConnectionsEnabledDescription": "Connections from unknown contacts are blocked. You can change this in Settings",
"plainProfileDescription": "We recommend that you protect your Cwtch profiles with a password. If you do not set a password on this profile then anyone who has access to this device may be able to access information about this profile, including contacts, messages and sensitive cryptographic keys.",
"encryptedProfileDescription": "Encrypting a profile with a password protects it from other people who may also use this device. Encrypted profiles cannot be decrypted, displayed or accessed until the correct password is entered to unlock them.",
"contactGoto": "Go to conversation with %1",
"settingUIColumnOptionSame": "Same as portrait mode setting",
"settingUIColumnDouble14Ratio": "Double (1:4)",
"settingUIColumnDouble12Ratio": "Double (1:2)",
"settingUIColumnSingle": "Single",
"settingUIColumnLandscape": "UI Columns in Landscape Mode",
"settingUIColumnPortrait": "UI Columns in Portrait Mode",
"tooltipRemoveThisQuotedMessage": "Remove quoted message.",
"tooltipReplyToThisMessage": "Reply to this message",
"tooltipRejectContactRequest": "Reject this contact request",
"tooltipAcceptContactRequest": "Accept this contact request.",
"notificationNewMessageFromGroup": "New message in a group!",
"notificationNewMessageFromPeer": "New message from a contact!",
"tooltipHidePassword": "Hide Password",
"tooltipShowPassword": "Show Password",
"groupInviteSettingsWarning": "You have been invited to join a group! Please enable the Group Chat Experiment in Settings to view this Invitation.",
"shutdownCwtchAction": "Shutdown Cwtch",
"shutdownCwtchDialog": "Are you sure you want to shutdown Cwtch? This will close all connections, and exit the application.",
"shutdownCwtchDialogTitle": "Shutdown Cwtch?",
"shutdownCwtchTooltip": "Shutdown Cwtch",
"malformedMessage": "Malformed message",
"profileDeleteSuccess": "Successfully deleted profile",
"debugLog": "Turn on console debug logging",
"torNetworkStatus": "Tor network status",
"addContactFirst": "Add or pick a contact to begin chatting.",
"createProfileToBegin": "Please create or unlock a profile to begin",
"nickChangeSuccess": "Profile nickname changed successfully",
"addServerFirst": "You need to add a server before you can create a group",
"deleteProfileSuccess": "Successfully deleted profile",
"sendInvite": "Send a contact or group invite",
"sendMessage": "Send Message",
"cancel": "Cancel",
"resetTor": "Reset",
"torStatus": "Tor Status",
"torVersion": "Tor Version",
"sendAnInvitation": "You sent an invitation for: ",
"contactSuggestion": "This is a contact suggestion for: ",
"rejected": "Rejected!",
"accepted": "Accepted!",
"chatHistoryDefault": "This conversation will be deleted when Cwtch is closed! Message history can be enabled per-conversation via the Settings menu in the upper right.",
"newPassword": "New Password",
"yesLeave": "Yes, Leave This Conversation",
"reallyLeaveThisGroupPrompt": "Are you sure you want to leave this conversation? All messages and attributes will be deleted.",
"leaveConversation": "Leave This Conversation",
"inviteToGroup": "You have been invited to join a group:",
"titleManageServers": "Manage Servers",
"successfullAddedContact": "Successfully added ",
"descriptionBlockUnknownConnections": "If turned on, this option will automatically close connections from Cwtch users that have not been added to your contact list.",
"descriptionExperimentsGroups": "The group experiment allows Cwtch to connect with untrusted server infrastructure to facilitate communication with more than one contact.",
"descriptionExperiments": "Cwtch experiments are optional, opt-in features that add additional functionality to Cwtch that may have different privacy considerations than traditional 1:1 metadata resistant chat e.g. group chat, bot integration etc.",
"titleManageProfiles": "Manage Cwtch Profiles",
"tooltipUnlockProfiles": "Unlock encrypted profiles by entering their password.",
"titleManageContacts": "Conversations",
"tooltipAddContact": "Add a new contact or conversation",
"tooltipOpenSettings": "Open the settings pane",
"contactAlreadyExists": "Contact Already Exists",
"invalidImportString": "Invalid import string",
"enterCurrentPasswordForDelete": "Please enter current password to delete this profile.",
"enableGroups": "Enable Group Chat",
"todoPlaceholder": "Todo...",
"addNewItem": "Add a new item to the list",
"addListItem": "Add a New List Item",
"newConnectionPaneTitle": "New Connection",
"networkStatusOnline": "Online",
"networkStatusConnecting": "Connecting to network and contacts...",
"networkStatusAttemptingTor": "Attempting to connect to Tor network",
"networkStatusDisconnected": "Disconnected from the internet, check your connection",
"viewGroupMembershipTooltip": "View Group Membership",
"loadingTor": "Loading tor...",
"smallTextLabel": "Small",
"defaultScalingText": "Default size text (scale factor:",
"builddate": "Built on: %2",
"version": "Version %1",
"versionTor": "Version %1 with tor %2",
"experimentsEnabled": "Enable Experiments",
"themeDark": "Dark",
"themeLight": "Light",
"settingTheme": "Use Light Themes",
"largeTextLabel": "Large",
"settingInterfaceZoom": "Zoom level",
"settingLanguage": "Language",
"blockUnknownLabel": "Block Unknown Contacts",
"zoomLabel": "Interface zoom (mostly affects text and button sizes)",
"versionBuilddate": "Version: %1 Built on: %2",
"cwtchSettingsTitle": "Cwtch Settings",
"unlock": "Unlock",
"yourServers": "Your Servers",
"yourProfiles": "Your Profiles",
"error0ProfilesLoadedForPassword": "0 profiles loaded with that password",
"password": "Password",
"enterProfilePassword": "Enter a password to view your profiles",
"addNewProfileBtn": "Add new profile",
"deleteConfirmText": "DELETE",
"deleteProfileConfirmBtn": "Really Delete Profile",
"deleteConfirmLabel": "Type DELETE to confirm",
"deleteProfileBtn": "Delete Profile",
"passwordChangeError": "Error changing password: Supplied password rejected",
"passwordErrorMatch": "Passwords do not match",
"saveProfileBtn": "Save Profile",
"createProfileBtn": "Create Profile",
"passwordErrorEmpty": "Password cannot be empty",
"password2Label": "Reenter password",
"password1Label": "Password",
"currentPasswordLabel": "Current Password",
"yourDisplayName": "Your Display Name",
"profileOnionLabel": "Send this address to contacts you want to connect with",
"noPasswordWarning": "Not using a password on this account means that all data stored locally will not be encrypted",
"radioNoPassword": "Unencrypted (No password)",
"radioUsePassword": "Password",
"editProfile": "Edit Profile",
"newProfile": "New Profile",
"defaultProfileName": "Alice",
"profileName": "Display name",
"editProfileTitle": "Edit Profile",
"addProfileTitle": "Add new profile",
"deleteBtn": "Delete",
"unblockBtn": "Unblock Contact",
"dontSavePeerHistory": "Delete History",
"savePeerHistoryDescription": "Determines whether to delete any history associated with the contact.",
"savePeerHistory": "Save History",
"blockBtn": "Block Contact",
"saveBtn": "Save",
"displayNameLabel": "Display Name",
"copiedToClipboardNotification": "Copied to Clipboard",
"addressLabel": "Address",
"puzzleGameBtn": "Puzzle Game",
"bulletinsBtn": "Bulletins",
"listsBtn": "Lists",
"chatBtn": "Chat",
"rejectGroupBtn": "Reject",
"acceptGroupBtn": "Accept",
"acceptGroupInviteLabel": "Do you want to accept the invitation to",
"newGroupBtn": "Create new group",
"copyBtn": "Copy",
"peerOfflineMessage": "Contact is offline, messages can't be delivered right now",
"peerBlockedMessage": "Contact is blocked",
"pendingLabel": "Pending",
"acknowledgedLabel": "Acknowledged",
"couldNotSendMsgError": "Could not send this message",
"dmTooltip": "Click to DM",
"membershipDescription": "Below is a list of users who have sent messages to the group. This list may not reflect all users who have access to the group.",
"addListItemBtn": "Add Item",
"peerNotOnline": "Contact is offline. Applications cannot be used right now.",
"searchList": "Search List",
"update": "Update",
"inviteBtn": "Invite",
"inviteToGroupLabel": "Invite to group",
"groupNameLabel": "Group Name",
"viewServerInfo": "Server Info",
"serverNotSynced": "Syncing New Messages (This can take some time)...",
"serverSynced": "Synced",
"serverConnectivityDisconnected": "Server Disconnected",
"serverConnectivityConnected": "Server Connected",
"serverInfo": "Server Information",
"invitationLabel": "Invitation",
"search": "Search...",
"blocked": "Blocked",
"pasteAddressToAddContact": "Paste a cwtch address, invitation or key bundle here to add a new conversation",
"titlePlaceholder": "title...",
"postNewBulletinLabel": "Post new bulletin",
"newBulletinLabel": "New Bulletin",
"joinGroup": "Join group",
"createGroup": "Create group",
"addPeer": "Add Contact",
"groupAddr": "Address",
"invitation": "Invitation",
"createGroupTab": "Create a group",
"createGroupBtn": "Create"
}

View File

@ -1,11 +1,76 @@
{
"@@locale": "en",
"@@last_modified": "2022-02-08T20:13:50+01:00",
"@@last_modified": "2022-12-05T21:06:07+01:00",
"profileEnabledDescription": "Start or stop the profile",
"profileAutostartDescription": "Controls if the profile will be automatically launched on startup",
"profileEnabled": "Enable",
"profileAutostartLabel": "Autostart",
"localePtBr": "Brazilian Portuguese \/ Português do Brasil",
"localeNl": "Dutch \/ Dutch",
"experimentQRCodeDescription": "QR Code support allows sharing data (such as profile identity) by QR Codes",
"enableExperimentQRCode": "QR Codes",
"shareMenuQRCode": "Show QR Code",
"shareProfileMenuTooltop": "Share profile via...",
"acquiredTicketsFromServer": "Antispam Challenge Complete",
"acquiringTicketsFromServer": "Performing Antispam Challenge",
"errorDownloadDirectoryDoesNotExist": "Filesharing cannot be enabled because the Download Folder has not been set, or is set to a folder that does not exist.",
"localeIt": "Italian \/ Italiano",
"localeTr": "Turkish \/ Türk",
"tooltipUnpinConversation": "Unpin conversation from the top of \"Conversations\"",
"tooltipPinConversation": "Pin conversation to the top of \"Conversations\"",
"replyingTo": "Replying to %1",
"fileDownloadUnavailable": "This file appears unavailable for download. The sender may have disabled downloads for this file.",
"messageNoReplies": "There are no replies to this message.",
"headingReplies": "Replies",
"viewReplies": "View replies to this message",
"restartFileShare": "Start Sharing File",
"stopSharingFile": "Stop Sharing File",
"manageSharedFiles": "Manage Shared Files",
"localeDe": "German \/ Deutsch",
"localeEn": "English \/ English",
"localeLb": "Luxembourgish \/ Lëtzebuergesch",
"localeNo": "Norwegian \/ Norsk",
"localeEl": "Greek \/ Ελληνικά",
"localePl": "Polish \/ Polski",
"localeRo": "Romanian \/ Română",
"localeRU": "Russian \/ Русский",
"localeEs": "Spanish \/ Español",
"localeDa": "Danish \/ Dansk",
"localePt": "Portuguese \/ Portuguesa",
"localeFr": "French \/ Français",
"localeCy": "Welsh \/ Cymraeg",
"settingImagePreviewsDescription": "Images and Profile Pictures will be downloaded and previewed automatically. We recommend that you do not enable this Experiment if you use Cwtch with untrusted contacts.",
"tooltipPreviewFormatting": "Preview Message Formatting",
"tooltipCode": "Code \/ Monospace",
"tooltipStrikethrough": "Strikethrough",
"tooltipSubscript": "Subscript",
"tooltipSuperscript": "Superscript",
"tooltipItalicize": "Italic",
"tooltipBackToMessageEditing": "Back to Message Editing",
"tooltipBoldText": "Bold",
"okButton": "OK",
"settingsAndroidPowerReenablePopup": "Cannot re-enable Battery Optimization from within Cwtch. Please go to Android \/ Settings \/ Apps \/ Cwtch \/ Battery and set Usage to 'Optimized'",
"settingAndroidPowerExemptionDescription": "Optional: Request Android to exempt Cwtch from optimized power management. This will result in better stability at the cost of greater battery use.",
"settingAndroidPowerExemption": "Android Ignore Battery Optimizations",
"thisFeatureRequiresGroupExpermientsToBeEnabled": "This feature requires the Groups Experiment to be enabled in Settings",
"messageFormattingDescription": "Enable rich text formatting in displayed messages e.g. **bold** and *italic*",
"formattingExperiment": "Message Formatting",
"clickableLinkError": "Error encountered while attempting to open URL",
"clickableLinksWarning": "Opening this URL will launch an application outside of Cwtch and may reveal metadata or otherwise compromise the security of Cwtch. Only open URLs from people you trust. Are you sure you want to continue?",
"clickableLinksCopy": "Copy URL",
"clickableLinkOpen": "Open URL",
"shuttingDownApp": "Shutting down...",
"successfullyImportedProfile": "Successfully Imported Profile: %profile",
"failedToImportProfile": "Error Importing Profile",
"importProfileTooltip": "Use an encrypted Cwtch backup to bring in a profile created in another instance of Cwtch.",
"importProfile": "Import Profile",
"exportProfileTooltip": "Backup this profile to an encrypted file. The encrypted file can be imported into another Cwtch app.",
"exportProfile": "Export Profile",
"conversationNotificationPolicySettingDescription": "Control notification behaviour for this conversation",
"newMessageNotificationConversationInfo": "New Message From %1",
"newMessageNotificationSimple": "New Message",
"notificationContentContactInfo": "Conversation Information",
"notificationContentSimpleEvent": "Plain Event",
"conversationNotificationPolicySettingDescription": "Control this conversation's notification behaviour",
"conversationNotificationPolicySettingLabel": "Conversation Notification Policy",
"settingsGroupExperiments": "Experiments",
"settingsGroupAppearance": "Appearance",
@ -56,7 +121,6 @@
"themeNameWitch": "Witch",
"themeNameCwtch": "Cwtch",
"settingDownloadFolder": "Download Folder",
"settingImagePreviewsDescription": "Images will be downloaded and previewed automatically. Please note that image previews can often lead to security vulnerabilities, and you should not enable this Experiment if you use Cwtch with untrusted contacts. Profile pictures are planned for Cwtch 1.6.",
"settingImagePreviews": "Image Previews and Profile Pictures",
"experimentClickableLinksDescription": "The clickable links experiment allows you to click on URLs shared in messages",
"enableExperimentClickableLinks": "Enable Clickable Links",
@ -74,7 +138,6 @@
"importLocalServerLabel": "Import a locally hosted server",
"savePeerHistoryDescription": "Determines whether to delete any history associated with the contact.",
"newMessagesLabel": "New Messages",
"localeRU": "Russian",
"copyServerKeys": "Copy keys",
"verfiyResumeButton": "Verify\/resume",
"fileCheckingStatus": "Checking download status",
@ -146,7 +209,6 @@
"settingUIColumnSingle": "Single",
"settingUIColumnLandscape": "UI Columns in Landscape Mode",
"settingUIColumnPortrait": "UI Columns in Portrait Mode",
"localePl": "Polish",
"tooltipRemoveThisQuotedMessage": "Remove quoted message.",
"tooltipReplyToThisMessage": "Reply to this message",
"tooltipRejectContactRequest": "Reject this contact request",
@ -190,11 +252,6 @@
"tooltipAddContact": "Add a new contact or conversation",
"titleManageContacts": "Conversations",
"titleManageServers": "Manage Servers",
"dateNever": "Never",
"dateLastYear": "Last Year",
"dateYesterday": "Yesterday",
"dateLastMonth": "Last Month",
"dateRightNow": "Right Now",
"successfullAddedContact": "Successfully added ",
"descriptionBlockUnknownConnections": "If turned on, this option will automatically close connections from Cwtch users that have not been added to your contact list.",
"descriptionExperimentsGroups": "The group experiment allows Cwtch to connect with untrusted server infrastructure to facilitate communication with more than one contact.",
@ -208,8 +265,6 @@
"enterCurrentPasswordForDelete": "Please enter current password to delete this profile.",
"enableGroups": "Enable Group Chat",
"experimentsEnabled": "Enable Experiments",
"localeIt": "Italiana",
"localeEs": "Espanol",
"addListItem": "Add a New List Item",
"addNewItem": "Add a new item to the list",
"todoPlaceholder": "Todo...",
@ -228,10 +283,6 @@
"themeLight": "Light",
"largeTextLabel": "Large",
"settingInterfaceZoom": "Zoom level",
"localeDe": "Deutsche",
"localePt": "Portuguesa",
"localeFr": "Frances",
"localeEn": "English",
"settingLanguage": "Language",
"zoomLabel": "Interface zoom (mostly affects text and button sizes)",
"versionBuilddate": "Version: %1 Built on: %2",
@ -259,7 +310,6 @@
"noPasswordWarning": "Not using a password on this account means that all data stored locally will not be encrypted",
"radioNoPassword": "Unencrypted (No password)",
"radioUsePassword": "Password",
"copiedToClipboardNotification": "Copied to Clipboard",
"newProfile": "New Profile",
"defaultProfileName": "Alice",
"profileName": "Display name",
@ -268,6 +318,7 @@
"deleteBtn": "Delete",
"saveBtn": "Save",
"displayNameLabel": "Display Name",
"copiedToClipboardNotification": "Copied to Clipboard",
"addressLabel": "Address",
"puzzleGameBtn": "Puzzle Game",
"bulletinsBtn": "Bulletins",
@ -277,7 +328,6 @@
"acceptGroupBtn": "Accept",
"acceptGroupInviteLabel": "Do you want to accept the invitation to",
"newGroupBtn": "Create new group",
"copiedClipboardNotification": "Copied to clipboard",
"copyBtn": "Copy",
"pendingLabel": "Pending",
"acknowledgedLabel": "Acknowledged",
@ -289,7 +339,7 @@
"update": "Update",
"inviteBtn": "Invite",
"inviteToGroupLabel": "Invite to group",
"groupNameLabel": "Group name",
"groupNameLabel": "Group Name",
"viewServerInfo": "Server Info",
"serverSynced": "Synced",
"serverConnectivityDisconnected": "Server Disconnected",
@ -298,12 +348,6 @@
"invitationLabel": "Invitation",
"serverLabel": "Server",
"search": "Search...",
"cycleColoursDesktop": "Click to cycle colours.\nRight-click to reset.",
"cycleColoursAndroid": "Click to cycle colours.\nLong-press to reset.",
"cycleMorphsDesktop": "Click to cycle morphs.\nRight-click to reset.",
"cycleMorphsAndroid": "Click to cycle morphs.\nLong-press to reset.",
"cycleCatsDesktop": "Click to cycle category.\nRight-click to reset.",
"cycleCatsAndroid": "Click to cycle category.\nLong-press to reset.",
"blocked": "Blocked",
"titlePlaceholder": "title...",
"postNewBulletinLabel": "Post new bulletin",
@ -313,7 +357,6 @@
"groupAddr": "Address",
"invitation": "Invitation",
"server": "Server",
"groupName": "Group name",
"peerName": "Name",
"peerAddress": "Address",
"joinGroupTab": "Join a group",

View File

@ -1,284 +1,331 @@
{
"@@locale": "es",
"@@last_modified": "2022-02-08T20:13:50+01:00",
"newMessageNotificationConversationInfo": "New Message From %1",
"newMessageNotificationSimple": "New Message",
"notificationContentContactInfo": "Conversation Information",
"notificationContentSimpleEvent": "Plain Event",
"conversationNotificationPolicySettingDescription": "Control this conversation's notification behaviour",
"conversationNotificationPolicySettingLabel": "Conversation Notification Policy",
"settingsGroupExperiments": "Experiments",
"settingsGroupAppearance": "Appearance",
"settingGroupBehaviour": "Behaviour",
"notificationContentSettingDescription": "Controls the contents of conversation notifications",
"notificationPolicySettingDescription": "Controls the default application notification behaviour",
"notificationContentSettingLabel": "Notification Content",
"notificationPolicySettingLabel": "Notification Policy",
"conversationNotificationPolicyNever": "Never",
"conversationNotificationPolicyOptIn": "Opt In",
"conversationNotificationPolicyDefault": "Default",
"notificationPolicyDefaultAll": "Default All",
"notificationPolicyOptIn": "Opt In",
"notificationPolicyMute": "Mute",
"tooltipSelectACustomProfileImage": "Select a Custom Profile Image",
"torSettingsEnabledCacheDescription": "Cache the current downloaded Tor consensus to reuse next time Cwtch is opened. This will allow Tor to start faster. When disabled, Cwtch will purge cached data on start up.",
"torSettingsEnableCache": "Cache Tor Consensus",
"labelTorNetwork": "Tor Network",
"descriptionACNCircuitInfo": "In depth information about the path that the anonymous communication network is using to connect to this conversation.",
"labelACNCircuitInfo": "ACN Circuit Info",
"fileSharingSettingsDownloadFolderTooltip": "Browse to select a different default folder for downloaded files.",
"fileSharingSettingsDownloadFolderDescription": "When files are downloaded automatically (e.g. image files, when image previews are enabled) a default location to download the files to is needed.",
"torSettingsErrorSettingPort": "Port Number must be between 1 and 65535",
"torSettingsUseCustomTorServiceConfigurastionDescription": "Override the default tor configuration. Warning: This could be dangerous. Only turn this on if you know what you are doing.",
"torSettingsUseCustomTorServiceConfiguration": "Use a Custom Tor Service Configuration (torrc)",
"torSettingsCustomControlPortDescription": "Use a custom port for control connections to the Tor proxy",
"torSettingsCustomControlPort": "Custom Control Port",
"torSettingsCustomSocksPortDescription": "Use a custom port for data connections to the Tor proxy",
"torSettingsCustomSocksPort": "Custom SOCKS Port",
"torSettingsEnabledAdvancedDescription": "Use an existing Tor service on your system, or change the parameters of the Cwtch Tor Service",
"torSettingsEnabledAdvanced": "Enable Advanced Tor Configuration",
"msgAddToAccept": "Add this account to your contacts in order to accept this file.",
"btnSendFile": "Send File",
"msgConfirmSend": "Are you sure you want to send",
"msgFileTooBig": "File size cannot exceed 10 GB",
"storageMigrationModalMessage": "Migrating profiles to new storage format. This could take a few minutes...",
"loadingCwtch": "Loading Cwtch...",
"themeColorLabel": "Color Theme",
"themeNameNeon2": "Neon2",
"themeNameNeon1": "Neon1",
"themeNameMidnight": "Midnight",
"themeNameMermaid": "Mermaid",
"themeNamePumpkin": "Pumpkin",
"themeNameGhost": "Ghost",
"themeNameVampire": "Vampire",
"themeNameWitch": "Witch",
"@@last_modified": "2022-12-05T21:06:07+01:00",
"profileEnabledDescription": "Start or stop the profile",
"profileAutostartDescription": "Controls if the profile will be automatically launched on startup",
"profileEnabled": "Enable",
"profileAutostartLabel": "Autostart",
"localePtBr": "Brazilian Portuguese \/ Português do Brasil",
"localeNl": "Dutch \/ Dutch",
"experimentQRCodeDescription": "QR Code support allows sharing data (such as profile identity) by QR Codes",
"enableExperimentQRCode": "QR Codes",
"shareMenuQRCode": "Show QR Code",
"shareProfileMenuTooltop": "Share profile via...",
"tooltipPinConversation": "Fija la conversación en la parte superior de \"Conversaciones\"",
"errorDownloadDirectoryDoesNotExist": "No se puede habilitar el uso compartido de archivos porque la carpeta de descarga no se ha configurado o se configuró en una carpeta que no existe.",
"acquiringTicketsFromServer": "Realizando Desafío Antispam",
"acquiredTicketsFromServer": "Desafío Antispam Completado",
"tooltipUnpinConversation": "Desenganchar la conversación de la parte superior de \"Conversaciones\"",
"manageSharedFiles": "Administrar Archivos Compartidos",
"stopSharingFile": "Dejar de compartir archivos",
"restartFileShare": "Comenzar a compartir archivos",
"viewReplies": "Ver respuestas a este mensaje",
"headingReplies": "Respuestas",
"messageNoReplies": "No hay respuestas a este mensaje.",
"fileDownloadUnavailable": "Parece que este archivo no está disponible para descargar. Es posible que el remitente haya desactivado las descargas de este archivo.",
"replyingTo": "Respondiendo a %1",
"localeTr": "Turco \/ Türk",
"localeIt": "Italiano \/ Italiano",
"localeDe": "Alemán \/ Deutsch",
"settingImagePreviewsDescription": "Las imágenes se descargarán y visualizarán automáticamente. Ten en cuenta que las previsualizaciones pueden generar vulnerabilidades de seguridad, no deberías habilitar este experimento si usas Cwtch con contactos que no son de confianza. Las imágenes de perfil están planeadas para Cwtch 1.6.",
"tooltipBackToMessageEditing": "Volver a Edición de mensajes",
"tooltipSubscript": "Subíndice",
"tooltipPreviewFormatting": "Vista previa del formato del mensaje",
"tooltipBoldText": "Negrita",
"tooltipItalicize": "Itálico",
"tooltipSuperscript": "Superíndice",
"tooltipCode": "Código \/ Monoespaciado",
"exportProfileTooltip": "Haga una copia de seguridad de este perfil en un archivo cifrado. El archivo cifrado puede ser importado en otra aplicación Cwtch.",
"tooltipStrikethrough": "Tachado",
"settingAndroidPowerExemption": "Android ignora las optimizaciones de batería",
"messageFormattingDescription": "Habilitar el formato de texto enriquecido en los mensajes mostrados, por ejemplo, **negrita** y *cursiva*.",
"clickableLinksWarning": "Abrir esta URL lanzará una aplicación fuera de Cwtch que puede revelar metadatos o comprometer la seguridad de Cwtch. Solo abra URLs de personas confiables. ¿Desea continuar?",
"settingsAndroidPowerReenablePopup": "No se puede habilitar la optimización desde Cwtch. Vaya a Android \/ Configuración \/ Aplicaciones \/ Cwtch \/ Batería y configure Uso a \"Optimizado\"",
"settingAndroidPowerExemptionDescription": "Opcional: Solicite a Android eximir a Cwtch de la administración de energía optimizada. Esto resultará en mejor estabilidad a costa de mayor uso de batería.",
"successfullyImportedProfile": "Perfil importado correctamente:",
"thisFeatureRequiresGroupExpermientsToBeEnabled": "Esta función requiere que el experimento de grupos esté habilitado en Configuración",
"clickableLinkError": "Se encontró un error al abrir la URL",
"importProfileTooltip": "Usar una copia de seguridad cifrada de Cwtch para incorporar un perfil creado en otra instancia de Cwtch.",
"chatHistoryDefault": "Esta conversación será eliminada cuando se cierre Cwtch! El historial de mensajes puede habilitarse en cada conversación usando el menú de Configuración en la parte superior derecha.",
"torSettingsEnabledCacheDescription": "Almacena en caché el consenso de Tor actual para re usar la próxima vez que Cwtch se abra. Esto permitirá que Tor inicie más rápido. Cuando se desactiva, Cwtch eliminará los datos almacenados en caché al iniciarse.",
"exportProfile": "Exportar Perfil",
"importProfile": "Importar Perfil",
"failedToImportProfile": "Error Importando Perfil",
"shuttingDownApp": "Cerrando...",
"clickableLinkOpen": "Abrir URL",
"clickableLinksCopy": "Copiar URL",
"formattingExperiment": "Formato de Mensajes",
"okButton": "OK",
"localeFr": "Francés \/ Français",
"localePt": "Portugués \/ Portuguesa",
"localeEs": "Español \/ Español",
"localeRU": "Ruso \/ Русский",
"localePl": "Polaco \/ Polski",
"localeLb": "Luxemburgués \/ Lëtzebuergesch",
"localeEn": "Inglés \/ English",
"localeDa": "Danés \/ Dansk",
"localeCy": "Galés \/ Cymraeg",
"localeNo": "Noruego \/ Norsk",
"localeEl": "Griego \/ Ελληνικά",
"localeRo": "Rumano \/ Română",
"groupInviteSettingsWarning": "¡Has recibido una invitación para unirte a un grupo! Por favor habilita el experimento de chat grupal en Configuración para ver esta invitación",
"plainServerDescription": "Te recomendamos que protejas tus servidores de Cwtch con una contraseña. Si no estableces una contraseña en este servidor, cualquiera que tenga acceso a este dispositivo podrá acceder a la información sobre este servidor incluyendo claves criptográficas confidenciales",
"encryptedServerDescription": "Cifrar un servidor con una contraseña lo protege de otras personas que puedan usar este dispositivo. Los servidores cifrados no se pueden descifrar, mostrar ni acceder hasta que se ingrese la contraseña correcta para desbloquearlos",
"resetTor": "Reiniciar",
"sendAnInvitation": "Enviaste una invitación para:",
"loadingTor": "Cargando Tor...",
"settingImagePreviews": "Vista previa de imágenes e imágenes de perfil",
"shutdownCwtchDialogTitle": "¿Cerrar Cwtch?",
"sendMessage": "Enviar Mensaje",
"cancel": "Cancelar",
"torStatus": "Estado de Tor",
"torVersion": "Versión de Tor",
"descriptionStreamerMode": "Si está activada, esta opción hace que la aplicación sea más privada visualmente para transmitir o presentar, por ejemplo, ocultando direcciones de perfil y contacto.",
"blockUnknownConnectionsEnabledDescription": "Las conexiones de contactos desconocidos están bloqueadas. Puedes cambiar esto en la Configuración",
"streamerModeLabel": "Modo Streamer\/Presentación",
"deleteProfileSuccess": "Perfil eliminado correctamente",
"sendInvite": "Enviar una invitación de contacto o grupo",
"torSettingsUseCustomTorServiceConfigurastionDescription": "Invalida la configuración predeterminada de Tor. Advertencia: Esto podría ser peligroso. Solo enciende esto si sabes lo que estás haciendo.",
"torSettingsErrorSettingPort": "El número de puerto debe estar entre 1 y 65535",
"labelACNCircuitInfo": "Información del circuito ACN",
"themeNameMidnight": "Medianoche",
"themeNameMermaid": "Sirena",
"themeNamePumpkin": "Calabaza",
"themeNameGhost": "Fantasma",
"themeNameVampire": "Vampiro",
"themeNameWitch": "Bruja",
"experimentClickableLinksDescription": "El experimento de links cliqueables te permite cliquear en URLs compartidas en mensajes.",
"enableExperimentClickableLinks": "Habilitar Enlaces Cliqueables",
"descriptionFileSharing": "El experimento de compartir archivos te permite enviar y recibir archivos de contactos y grupos de Cwtch. Ten en cuenta que compartir un archivo con un grupo resultará en que los miembros de ese grupo puedan descargarlo.",
"importLocalServerButton": "Importar %1",
"settingFileSharing": "Compartir Archivos",
"messageEnableFileSharing": "Habilita el experimento de compartir archivos para ver este mensaje.",
"tooltipSelectACustomProfileImage": "Selecciona una imagen de perfil personalizada",
"fileSharingSettingsDownloadFolderDescription": "Cuando los perfiles son descargados automáticamente (por ejemplo, cuando las vistas previas de imágenes están habilitadas), se necesita una ubicación predeterminada para descargar los archivos.",
"torSettingsUseCustomTorServiceConfiguration": "Usar una configuración de servicio Tor personalizada (torrc)",
"torSettingsCustomControlPortDescription": "Use un puerto personalizado para controlar las conexiones al proxy Tor",
"torSettingsCustomControlPort": "Puerto de control personalizado",
"torSettingsCustomSocksPortDescription": "Usar un puerto personalizad para conexiones de datos al proxy Tor",
"serverMetricsLabel": "Métricas del servidor",
"groupsOnThisServerLabel": "Grupos alojados en este servidor en los que estoy",
"deleteServerConfirmBtn": "Realmente eliminar el servidor",
"settingServersDescription": "El experimento de alojar servidores permite alojar y administrar servidores de Cwtch",
"settingServers": "Alojar Servidores",
"unlockProfileTip": "Crea o desbloquea un perfil para comenzar!",
"unlockServerTip": "Crea o desbloquea un servidor para comenzar",
"serverAutostartDescription": "Controla si la aplicación iniciará el servidor automáticamente al iniciarse",
"serverDescriptionDescription": "Tu descripción del servidor es para uso personal, nunca será compartida",
"addServerFirst": "Necesitas agregar un servidor antes de crear un grupo",
"addContact": "Agregar contacto",
"addContactConfirm": "Agrega al contacto %1",
"placeholderEnterMessage": "Escribe un mensaje...",
"blockedMessageMessage": "Este mensaje proviene de un perfil que has bloqueado.",
"showMessageButton": "Mostrar Mensaje",
"archiveConversation": "Archivar esta conversación",
"retrievingManifestMessage": "Recuperando información del archivo...",
"openFolderButton": "Abrir Carpeta",
"downloadFileButton": "Descargar",
"labelFilename": "Nombre de archivo",
"labelFilesize": "Tamaño",
"messageFileSent": "Enviaste un archivo",
"messageFileOffered": "El contacto ofrece enviarte un archivo",
"tooltipSendFile": "Enviar Archivo",
"titleManageProfilesShort": "Perfiles",
"addServerTitle": "Agregar Servidor",
"serverDescriptionLabel": "Descripción del Servidor",
"serverAddress": "Dirección del Servidor",
"editServerTitle": "Editar Servidor",
"serverEnabled": "Servidor Habilitado",
"serverEnabledDescription": "Iniciar o detener el servidor",
"serverAutostartLabel": "Inicio automático",
"enterServerPassword": "Ingresa la contraseña para desbloquear el servidor",
"addServerTooltip": "Agregar nuevo servidor",
"serversManagerTitleShort": "Servidores",
"saveServerButton": "Guardar Servidor",
"serversManagerTitleLong": "Servidores que alojas",
"copyAddress": "Copiar Dirección",
"enterCurrentPasswordForDeleteServer": "Ingresa la contraseña actual para eliminar este servidor",
"deleteServerSuccess": "Servidor eliminado con éxito",
"fileSavedTo": "Guardado en",
"fileInterrupted": "Interrumpido",
"fileCheckingStatus": "Comprobación del estado de la descarga",
"verfiyResumeButton": "Verificar\/reanudar",
"copyServerKeys": "Copiar claves",
"newMessagesLabel": "Nuevos Mensajes",
"importLocalServerLabel": "Importar un servidor alojado localmente",
"importLocalServerSelectText": "Seleccionar el servidor local",
"fieldDescriptionLabel": "Descripción",
"manageKnownServersButton": "Administrar servidores conocidos",
"displayNameTooltip": "Por favor introduce un nombre para el perfil",
"manageKnownServersLong": "Administrar servidores conocidos",
"manageKnownServersShort": "Servidores",
"serverTotalMessagesLabel": "Mensajes totales",
"serverConnectionsLabel": "Conexión",
"themeColorLabel": "Tema de Color",
"fileSharingSettingsDownloadFolderTooltip": "Examina para seleccionar una carpeta predeterminada diferente para los archivos descargados.",
"torSettingsEnableCache": "Guardar consenso de Tor en Caché",
"settingDownloadFolder": "Carpeta de descargas",
"themeNameCwtch": "Cwtch",
"settingDownloadFolder": "Download Folder",
"settingImagePreviewsDescription": "Images will be downloaded and previewed automatically. Please note that image previews can often lead to security vulnerabilities, and you should not enable this Experiment if you use Cwtch with untrusted contacts. Profile pictures are planned for Cwtch 1.6.",
"settingImagePreviews": "Image Previews and Profile Pictures",
"experimentClickableLinksDescription": "The clickable links experiment allows you to click on URLs shared in messages",
"enableExperimentClickableLinks": "Enable Clickable Links",
"serverConnectionsLabel": "Connection",
"serverTotalMessagesLabel": "Total Messages",
"serverMetricsLabel": "Server Metrics",
"manageKnownServersShort": "Servers",
"manageKnownServersLong": "Manage Known Servers",
"displayNameTooltip": "Please enter a display name",
"manageKnownServersButton": "Manage Known Servers",
"fieldDescriptionLabel": "Description",
"groupsOnThisServerLabel": "Groups I am in hosted on this server",
"importLocalServerButton": "Import %1",
"importLocalServerSelectText": "Select Local Server",
"importLocalServerLabel": "Import a locally hosted server",
"newMessagesLabel": "New Messages",
"localeRU": "Russian",
"copyServerKeys": "Copy keys",
"verfiyResumeButton": "Verify\/resume",
"fileCheckingStatus": "Checking download status",
"fileInterrupted": "Interrupted",
"fileSavedTo": "Saved to",
"encryptedServerDescription": "Encrypting a server with a password protects it from other people who may also use this device. Encrypted servers cannot be decrypted, displayed or accessed until the correct password is entered to unlock them.",
"plainServerDescription": "We recommend that you protect your Cwtch servers with a password. If you do not set a password on this server then anyone who has access to this device may be able to access information about this server, including sensitive cryptographic keys.",
"deleteServerConfirmBtn": "Really delete server",
"deleteServerSuccess": "Successfully deleted server",
"enterCurrentPasswordForDeleteServer": "Please enter current password to delete this server",
"copyAddress": "Copy Address",
"settingServersDescription": "The hosting servers experiment enables hosting and managing Cwtch servers",
"settingServers": "Hosting Servers",
"enterServerPassword": "Enter password to unlock server",
"unlockProfileTip": "Please create or unlock a profile to begin!",
"unlockServerTip": "Please create or unlock a server to begin!",
"addServerTooltip": "Add new server",
"serversManagerTitleShort": "Servers",
"serversManagerTitleLong": "Servers You Host",
"saveServerButton": "Save Server",
"serverAutostartDescription": "Controls if the application will automatically launch the server on start",
"serverAutostartLabel": "Autostart",
"serverEnabledDescription": "Start or stop the server",
"serverEnabled": "Server Enabled",
"serverDescriptionDescription": "Your description of the server for personal management use only, will never be shared",
"serverDescriptionLabel": "Server Description",
"serverAddress": "Server Address",
"editServerTitle": "Edit Server",
"addServerTitle": "Add Server",
"titleManageProfilesShort": "Profiles",
"descriptionFileSharing": "The file sharing experiment allows you to send and receive files from Cwtch contacts and groups. Note that sharing a file with a group will result in members of that group connecting with you directly over Cwtch to download it.",
"settingFileSharing": "File Sharing",
"tooltipSendFile": "Send File",
"messageFileOffered": "Contact is offering to send you a file",
"messageFileSent": "You sent a file",
"messageEnableFileSharing": "Enable the file sharing experiment to view this message.",
"labelFilesize": "Size",
"labelFilename": "Filename",
"downloadFileButton": "Download",
"openFolderButton": "Open Folder",
"retrievingManifestMessage": "Retrieving file information...",
"descriptionStreamerMode": "If turned on, this option makes the app more visually private for streaming or presenting with, for example, hiding profile and contact addresses",
"streamerModeLabel": "Streamer\/Presentation Mode",
"archiveConversation": "Archive this Conversation",
"blockUnknownConnectionsEnabledDescription": "Connections from unknown contacts are blocked. You can change this in Settings",
"showMessageButton": "Show Message",
"blockedMessageMessage": "This message is from a profile you have blocked.",
"placeholderEnterMessage": "Type a message...",
"plainProfileDescription": "We recommend that you protect your Cwtch profiles with a password. If you do not set a password on this profile then anyone who has access to this device may be able to access information about this profile, including contacts, messages and sensitive cryptographic keys.",
"encryptedProfileDescription": "Encrypting a profile with a password protects it from other people who may also use this device. Encrypted profiles cannot be decrypted, displayed or accessed until the correct password is entered to unlock them.",
"addContactConfirm": "Add contact %1",
"addContact": "Add contact",
"contactGoto": "Go to conversation with %1",
"settingUIColumnOptionSame": "Same as portrait mode setting",
"settingUIColumnDouble14Ratio": "Double (1:4)",
"settingUIColumnDouble12Ratio": "Double (1:2)",
"settingUIColumnSingle": "Single",
"settingUIColumnLandscape": "UI Columns in Landscape Mode",
"settingUIColumnPortrait": "UI Columns in Portrait Mode",
"localePl": "Polish",
"tooltipRemoveThisQuotedMessage": "Remove quoted message.",
"tooltipReplyToThisMessage": "Reply to this message",
"tooltipRejectContactRequest": "Reject this contact request",
"tooltipAcceptContactRequest": "Accept this contact request.",
"notificationNewMessageFromGroup": "New message in a group!",
"notificationNewMessageFromPeer": "New message from a contact!",
"tooltipHidePassword": "Hide Password",
"tooltipShowPassword": "Show Password",
"groupInviteSettingsWarning": "You have been invited to join a group! Please enable the Group Chat Experiment in Settings to view this Invitation.",
"shutdownCwtchAction": "Shutdown Cwtch",
"shutdownCwtchDialog": "Are you sure you want to shutdown Cwtch? This will close all connections, and exit the application.",
"shutdownCwtchDialogTitle": "Shutdown Cwtch?",
"shutdownCwtchTooltip": "Shutdown Cwtch",
"malformedMessage": "Malformed message",
"profileDeleteSuccess": "Successfully deleted profile",
"debugLog": "Turn on console debug logging",
"torNetworkStatus": "Tor network status",
"addContactFirst": "Add or pick a contact to begin chatting.",
"createProfileToBegin": "Please create or unlock a profile to begin",
"nickChangeSuccess": "Profile nickname changed successfully",
"addServerFirst": "You need to add a server before you can create a group",
"deleteProfileSuccess": "Successfully deleted profile",
"sendInvite": "Send a contact or group invite",
"sendMessage": "Send Message",
"cancel": "Cancel",
"resetTor": "Reset",
"torStatus": "Tor Status",
"torVersion": "Tor Version",
"sendAnInvitation": "You sent an invitation for: ",
"contactSuggestion": "This is a contact suggestion for: ",
"rejected": "Rejected!",
"accepted": "Accepted!",
"chatHistoryDefault": "This conversation will be deleted when Cwtch is closed! Message history can be enabled per-conversation via the Settings menu in the upper right.",
"newPassword": "New Password",
"yesLeave": "Yes, Leave This Conversation",
"reallyLeaveThisGroupPrompt": "Are you sure you want to leave this conversation? All messages and attributes will be deleted.",
"leaveConversation": "Leave This Conversation",
"inviteToGroup": "You have been invited to join a group:",
"titleManageServers": "Manage Servers",
"dateNever": "Never",
"dateLastYear": "Last Year",
"dateYesterday": "Yesterday",
"dateLastMonth": "Last Month",
"dateRightNow": "Right Now",
"successfullAddedContact": "Successfully added ",
"descriptionBlockUnknownConnections": "If turned on, this option will automatically close connections from Cwtch users that have not been added to your contact list.",
"descriptionExperimentsGroups": "The group experiment allows Cwtch to connect with untrusted server infrastructure to facilitate communication with more than one contact.",
"descriptionExperiments": "Cwtch experiments are optional, opt-in features that add additional functionality to Cwtch that may have different privacy considerations than traditional 1:1 metadata resistant chat e.g. group chat, bot integration etc.",
"titleManageProfiles": "Manage Cwtch Profiles",
"tooltipUnlockProfiles": "Unlock encrypted profiles by entering their password.",
"titleManageContacts": "Conversations",
"tooltipAddContact": "Add a new contact or conversation",
"tooltipOpenSettings": "Open the settings pane",
"contactAlreadyExists": "Contact Already Exists",
"invalidImportString": "Invalid import string",
"conversationSettings": "Conversation Settings",
"enterCurrentPasswordForDelete": "Please enter current password to delete this profile.",
"enableGroups": "Enable Group Chat",
"themeNameNeon1": "Neon1",
"themeNameNeon2": "Neon2",
"loadingCwtch": "Cargando Cwtch...",
"storageMigrationModalMessage": "Migrando perfiles a un nuevo formato de almacenamiento. Esto podría tomar unos minutos...",
"msgFileTooBig": "El archivo no puede superar 10 GB",
"msgConfirmSend": "Confirma que quieres enviar",
"btnSendFile": "Enviar archivo",
"msgAddToAccept": "Agrega esta cuenta a tus contactos para aceptar este archivo.",
"torSettingsEnabledAdvanced": "Habilitar Configuración Avanzada de Tor",
"torSettingsEnabledAdvancedDescription": "Usa un servicio de Tor existente en tu sistema, o cambia los parámetros del servicio Tor de Cwtch",
"descriptionACNCircuitInfo": "Información detallada sobre la ruta que la red de comunicación anónima está utilizando para conectarse a esta conversación.",
"torSettingsCustomSocksPort": "Puerto SOCKS personalizado",
"labelTorNetwork": "Red Tor",
"notificationPolicyMute": "Silenciar",
"notificationContentContactInfo": "Información de la conversación",
"newMessageNotificationSimple": "Nuevo Mensaje",
"newMessageNotificationConversationInfo": "Nuevo mensaje de %1",
"notificationPolicyDefaultAll": "Todas predeterminadas",
"notificationContentSimpleEvent": "Evento simple",
"conversationNotificationPolicyDefault": "Predeterminado",
"notificationPolicyOptIn": "Optar por participar",
"conversationNotificationPolicyOptIn": "Optar por participar",
"notificationContentSettingLabel": "Contenido de notificaciones",
"notificationPolicySettingLabel": "Política de notificaciones",
"conversationNotificationPolicyNever": "Nunca",
"notificationPolicySettingDescription": "Controla el comportamiento predeterminado de notificación de la aplicación",
"notificationContentSettingDescription": "Controla el contenido de las notificaciones de conversación",
"settingGroupBehaviour": "Comportamiento",
"settingsGroupAppearance": "Apariencia",
"settingsGroupExperiments": "Experimentos",
"conversationNotificationPolicySettingLabel": "Política de notificación de conversación",
"conversationNotificationPolicySettingDescription": "Controla las notificaciones para esta conversación",
"plainProfileDescription": "Recomendamos que protejas tus perfiles de Cwtch con una contraseña. Si no estableces una contraseña, cualquiera que tenga acceso a este dispositivo puede acceder a información sobre este perfil, incluyendo contactos, mensajes y claves criptográficas confidenciales.",
"encryptedProfileDescription": "Cifrar un perfil con una contraseña lo protege de otras personas que también usen este dispositivo. Los perfiles cifrados no se pueden descifrar, mostrar o acceder hasta que se ingrese la contraseña adecuada para desbloquearlos.",
"contactGoto": "Ir a conversación con %1",
"settingUIColumnOptionSame": "Igual que la configuración vertical",
"settingUIColumnDouble14Ratio": "Doble (1:4)",
"settingUIColumnDouble12Ratio": "Doble (1:2)",
"settingUIColumnSingle": "Sencillo",
"settingUIColumnLandscape": "Columnas de la interfaz en modo horizontal",
"settingUIColumnPortrait": "Columnas de la interfaz en modo vertical",
"tooltipRemoveThisQuotedMessage": "Remover el mensaje citado",
"tooltipReplyToThisMessage": "Responder a este mensaje",
"tooltipRejectContactRequest": "Rechazar esta solicitud de contacto",
"tooltipAcceptContactRequest": "Acepta esta solicitud de contacto.",
"notificationNewMessageFromGroup": "¡Nuevo mensaje en un grupo!",
"notificationNewMessageFromPeer": "¡Nuevo mensaje de un contacto!",
"tooltipHidePassword": "Ocultar Contraseña",
"tooltipShowPassword": "Mostrar Contraseña",
"shutdownCwtchAction": "Cerrar Cwtch",
"shutdownCwtchDialog": "Confirma que quieres cerrar Cwtch. Esto cerrará todas las conexiones y cerrará la aplicación",
"shutdownCwtchTooltip": "Cerrar Cwtch",
"malformedMessage": "Mensaje mal formado",
"profileDeleteSuccess": "Perfil eliminado correctamente",
"debugLog": "Activar el registro de depuración de la consola",
"torNetworkStatus": "Status de la red Tor",
"addContactFirst": "Agrega o elige un contacto para empezar a chatear",
"createProfileToBegin": "Por favor crea o desbloquea un perfil para empezar",
"nickChangeSuccess": "El apodo del perfil se ha cambiado correctamente",
"contactSuggestion": "Esta es una sugerencia de contacto para:",
"rejected": "¡Rechazado!",
"accepted": "¡Aceptado!",
"yesLeave": "Si, Salir de Esta Conversación",
"newPassword": "Nueva Contraseña",
"reallyLeaveThisGroupPrompt": "¿Estás seguro de que quieres salir de esta conversación?",
"leaveConversation": "Salir de esta conversación",
"inviteToGroup": "Te han invitado a unirte a un grupo",
"titleManageServers": "Administrar servidores",
"successfullAddedContact": "Agregado correctamente",
"descriptionBlockUnknownConnections": "Si está activada, esta opción cerrará automáticamente conexiones de usuarios de Cwtch que no se hayan agregado a tu lista de contactos.",
"descriptionExperimentsGroups": "El experimento de grupo permite a Cwtch conectarse con infraestructura de servidor no confiable para facilitar comunicación con más de un contacto.",
"noPasswordWarning": "No usar una contraseña para esta cuenta significa que los datos almacenados localmente no serán cifrados",
"tooltipUnlockProfiles": "Desbloquea perfiles encriptados introduciendo tu contraseña",
"titleManageContacts": "Conversaciones",
"tooltipAddContact": "Agregar un nuevo contacto o conversación",
"tooltipOpenSettings": "Abrir el panel de configuración",
"blockUnknownLabel": "Bloquear contactos desconocidos",
"descriptionExperiments": "Los experimentos de Cwtch son características opcionales que agregan funcionalidad a Cwtch. Pueden tener consideraciones de privacidad diferentes a chats 1:1 tradicionales resistentes a metadatos, por ejemplo, chat grupal, integración de bots, etc.",
"pasteAddressToAddContact": "Pega una dirección de Cwtch aquí para añadir contacto",
"conversationSettings": "Configuración de conversación",
"contactAlreadyExists": "Este contacto ya existe",
"titleManageProfiles": "Administrar perfiles de Cwtch",
"invalidImportString": "Cadena de importación no válida",
"enterCurrentPasswordForDelete": "Ingresa la contraseña actual para eliminar este perfil",
"enableGroups": "Habilitar chat grupal",
"networkStatusConnecting": "Conectando a la red y a los contactos...",
"networkStatusDisconnected": "Desconectado de Internet, comprueba tu conexión",
"experimentsEnabled": "Experimentos habilitados",
"settingTheme": "Usar tema claro",
"profileOnionLabel": "Envía esta dirección a los contactos con los que quieras conectarte",
"editProfile": "Editar perfil",
"unblockBtn": "Desbloquear contacto",
"dontSavePeerHistory": "Eliminar historial de contacto",
"savePeerHistoryDescription": "Determina si eliminar o no el historial asociado con el contacto.",
"savePeerHistory": "Guardar el historial con contacto",
"blockBtn": "Bloquear contacto",
"peerOfflineMessage": "Este contacto no está en línea, los mensajes no pueden ser entregados en este momento",
"peerBlockedMessage": "Contacto bloqueado",
"addListItemBtn": "Agregar artículo",
"peerNotOnline": "Este contacto no está en línea, la aplicación no puede ser usada en este momento",
"serverNotSynced": "Sincronizando mensajes nuevos (Puede tomar un tiempo)...",
"addPeer": "Agregar Contacto",
"blocked": "Bloqueado",
"addPeerTab": "Agregar Contacto",
"defaultScalingText": "Tamaño predeterminado de texto (factor de escala:",
"todoPlaceholder": "Por hacer...",
"bulletinsBtn": "Boletines",
"radioNoPassword": "Sin cifrado (sin contraseña)",
"themeDark": "Oscuro",
"smallTextLabel": "Pequeño",
"loadingTor": "Cargando tor...",
"cycleCatsAndroid": "Click para cambiar categoría. Mantenga pulsado para reiniciar.",
"cycleCatsDesktop": "Click para cambiar categoría. Click derecho para reiniciar.",
"cycleColoursDesktop": "Click para cambiar colores. Click derecho para reiniciar.",
"cycleColoursAndroid": "Click para cambiar colores. Mantenga pulsado para reiniciar.",
"builddate": "Basado en: %2",
"cycleMorphsAndroid": "Click para cambiar transformaciones. Mantenga pulsado para reiniciar.",
"cycleMorphsDesktop": "Click para cambiar transformaciones. Click derecho para reiniciar.",
"localeDe": "Alemán",
"localePt": "Portugués",
"localeFr": "Francés",
"addListItem": "Añadir un nuevo elemento a la lista",
"unblockBtn": "Desbloquear contacto",
"joinGroupTab": "Únete a un grupo",
"viewGroupMembershipTooltip": "Ver membresía del grupo",
"peerBlockedMessage": "Contacto bloqueado",
"peerOfflineMessage": "Este contacto no está en línea, los mensajes no pueden ser entregados en este momento",
"profileOnionLabel": "Envía esta dirección a los contactos con los que quieras conectarte",
"couldNotSendMsgError": "No se pudo enviar este mensaje",
"pendingLabel": "Pendiente",
"chatBtn": "Chat",
"dontSavePeerHistory": "Eliminar historial de contacto",
"password": "Contraseña",
"peerNotOnline": "Este contacto no está en línea, la aplicación no puede ser usada en este momento",
"enterProfilePassword": "Ingresa tu contraseña para ver tus perfiles",
"networkStatusConnecting": "Conectando a la red y a los contactos...",
"localeIt": "Italiano",
"savePeerHistoryDescription": "Determina si eliminar o no el historial asociado con el contacto.",
"acknowledgedLabel": "Reconocido",
"blockBtn": "Bloquear contacto",
"savePeerHistory": "Guardar el historial con contacto",
"defaultProfileName": "Alicia",
"versionBuilddate": "Versión: %1 Basado en %2",
"zoomLabel": "Zoom de la interfaz (afecta principalmente el tamaño del texto y de los botones)",
"settingTheme": "Tema",
"themeLight": "Claro",
"experimentsEnabled": "Experimentos habilitados",
"versionTor": "Versión %1 con tor %2",
"localeEs": "Español",
"networkStatusOnline": "En línea",
"newConnectionPaneTitle": "Nueva conexión",
"addNewItem": "Añadir un nuevo elemento a la lista",
"createGroupTitle": "Crear un grupo",
"serverLabel": "Servidor",
"groupNameLabel": "Nombre del grupo",
"defaultGroupName": "El Grupo Asombroso",
"createGroupBtn": "Crear",
"copiedToClipboardNotification": "Copiado al portapapeles",
"addPeerTab": "Agregar Contacto",
"createGroupTab": "Crear un grupo",
"peerAddress": "Dirección",
"peerName": "Nombre",
"groupName": "Nombre del grupo",
"server": "Servidor",
"invitation": "Invitación",
"groupAddr": "Dirección",
"addPeer": "Agregar Contacto",
"createGroup": "Crear perfil",
"joinGroup": "Únete al grupo",
"newBulletinLabel": "Nuevo Boletín",
"postNewBulletinLabel": "Publicar nuevo boletín",
"titlePlaceholder": "título...",
"pasteAddressToAddContact": "...pegar una dirección aquí para añadir contacto...",
"blocked": "Bloqueado",
"search": "Búsqueda...",
"invitationLabel": "Invitación",
"serverInfo": "Información del servidor",
"serverConnectivityConnected": "Servidor conectado",
"serverConnectivityDisconnected": "Servidor desconectado",
"serverSynced": "Sincronizado",
"serverNotSynced": "Fuera de sincronización con el servidor",
"viewServerInfo": "Información del servidor",
"groupNameLabel": "Nombre del grupo",
"saveBtn": "Guardar",
"inviteToGroupLabel": "Invitar al grupo",
"inviteBtn": "Invitar",
"deleteBtn": "Eliminar",
"update": "Actualizar",
"searchList": "Buscar en la lista",
"addListItemBtn": "Agregar artículo",
"membershipDescription": "La lista a continuación solo muestra los miembros que han enviado mensajes al grupo, no incluye a todos los usuarios dentro del grupo",
"dmTooltip": "Haz clic para enviar mensaje directo",
"copyBtn": "Copiar",
"copiedClipboardNotification": "Copiado al portapapeles",
"newGroupBtn": "Crear un nuevo grupo de chat",
"acceptGroupInviteLabel": "¿Quieres aceptar la invitación a ",
"acceptGroupBtn": "Aceptar",
@ -286,14 +333,13 @@
"listsBtn": "Listas",
"puzzleGameBtn": "Juego de rompecabezas",
"addressLabel": "Dirección",
"copiedToClipboardNotification": "Copiado al portapapeles",
"displayNameLabel": "Nombre de Usuario",
"addProfileTitle": "Agregar nuevo perfil",
"editProfileTitle": "Editar perfil",
"profileName": "Nombre de Usuario",
"newProfile": "Nuevo perfil",
"editProfile": "Editar perfil",
"radioUsePassword": "Contraseña",
"noPasswordWarning": "No usar una contraseña para esta cuenta significa que los datos almacenados localmente no serán encriptados",
"password2Label": "Vuelve a ingresar tu contraseña",
"yourDisplayName": "Tu nombre de usuario",
"currentPasswordLabel": "Contraseña actual",
@ -313,12 +359,9 @@
"yourServers": "Tus servidores",
"unlock": "Desbloquear",
"cwtchSettingsTitle": "Configuración de Cwtch",
"blockUnknownLabel": "Bloquear conexiones desconocidas",
"settingLanguage": "Idioma",
"localeEn": "Inglés",
"settingInterfaceZoom": "Nivel de zoom",
"largeTextLabel": "Grande",
"version": "Versión %1",
"networkStatusDisconnected": "Sin conexión, comprueba tu conexión",
"networkStatusAttemptingTor": "Intentando conectarse a la red Tor"
}

View File

@ -1,26 +1,101 @@
{
"@@locale": "fr",
"@@last_modified": "2022-02-08T20:13:50+01:00",
"newMessageNotificationConversationInfo": "New Message From %1",
"newMessageNotificationSimple": "New Message",
"notificationContentContactInfo": "Conversation Information",
"notificationContentSimpleEvent": "Plain Event",
"conversationNotificationPolicySettingDescription": "Control this conversation's notification behaviour",
"conversationNotificationPolicySettingLabel": "Conversation Notification Policy",
"settingsGroupExperiments": "Experiments",
"settingsGroupAppearance": "Appearance",
"settingGroupBehaviour": "Behaviour",
"notificationContentSettingDescription": "Controls the contents of conversation notifications",
"notificationPolicySettingDescription": "Controls the default application notification behaviour",
"notificationContentSettingLabel": "Notification Content",
"notificationPolicySettingLabel": "Notification Policy",
"conversationNotificationPolicyNever": "Never",
"conversationNotificationPolicyOptIn": "Opt In",
"conversationNotificationPolicyDefault": "Default",
"notificationPolicyDefaultAll": "Default All",
"notificationPolicyOptIn": "Opt In",
"notificationPolicyMute": "Mute",
"tooltipSelectACustomProfileImage": "Select a Custom Profile Image",
"@@last_modified": "2022-12-05T21:06:07+01:00",
"profileEnabledDescription": "Start or stop the profile",
"profileAutostartDescription": "Controls if the profile will be automatically launched on startup",
"profileEnabled": "Enable",
"profileAutostartLabel": "Autostart",
"shareProfileMenuTooltop": "Partager le profil via...",
"shareMenuQRCode": "Afficher le QR code",
"localePtBr": "Portugais du Brésil \/ Português do Brasil",
"localeNl": "néerlandais \/ néerlandais",
"experimentQRCodeDescription": "La prise en charge des QR codes permet de partager des données (telles que l'identité du profil) par des QR codes \n",
"enableExperimentQRCode": "QR Codes",
"acquiringTicketsFromServer": "Réaliser un défi anti-spam",
"acquiredTicketsFromServer": "Défi anti-spam terminé",
"errorDownloadDirectoryDoesNotExist": "Le partage de fichiers ne peut pas être activé car le dossier de téléchargement n'a pas été défini ou est défini sur un dossier qui n'existe pas.",
"localeIt": "italien \/ italien",
"localeTr": "Turc \/ Türk",
"tooltipPinConversation": "Épingler la conversation en haut de «Conversations»",
"tooltipUnpinConversation": "Détacher la conversation du haut de «Conversations»",
"viewReplies": "Voir les réponses à ce message",
"stopSharingFile": "Arrêter le partage de fichiers",
"restartFileShare": "Démarrer le partage de fichiers",
"replyingTo": "Répondre à %1",
"messageNoReplies": "Il n'y a pas de réponses à ce message.",
"manageSharedFiles": "Gérer les fichiers partagés",
"headingReplies": "Réponses",
"fileDownloadUnavailable": "Ce fichier semble indisponible pour le téléchargement. L'expéditeur a peut-être désactivé les téléchargements pour ce fichier.",
"localeDe": "Allemand \/ Deutsch",
"localeDa": "Danois \/ Dansk",
"localePt": "Portugais \/ Portuguesa",
"localeCy": "Gallois \/ Cymraeg",
"localeEl": "Grec \/ Ελληνικά",
"localeRU": "Russe \/ Русский",
"localeLb": "Luxembourgeois \/ Lëtzebuergesch",
"localePl": "Polonais \/ Polski",
"localeEs": "Espagnol \/ Español",
"localeRo": "Roumain \/ Română",
"localeFr": "Français \/ Français",
"localeNo": "Norvégien \/ Norsk",
"localeEn": "Anglais \/ English",
"settingImagePreviewsDescription": "Les images et les photos de profil seront téléchargées et prévisualisées automatiquement. Nous vous recommandons de ne pas activer cette expérience si vous utilisez Cwtch avec des contacts non fiables.",
"tooltipSuperscript": "Exposant",
"tooltipSubscript": "Indice",
"tooltipStrikethrough": "Barré",
"tooltipPreviewFormatting": "Aperçu de la mise en forme du message",
"tooltipItalicize": "Italique",
"tooltipCode": "Code \/ Monospace",
"tooltipBoldText": "Gras",
"tooltipBackToMessageEditing": "Retour à l'édition des messages",
"acceptGroupBtn": "Accepter",
"settingAndroidPowerExemptionDescription": "Android applique par défaut un profil de gestion de l'énergie \"optimisé\" aux applications, ce qui peut entraîner leur arrêt ou leur suppression. Demandez à Android d'exempter Cwtch de ce profil pour une meilleure stabilité mais une plus grande consommation d'énergie.",
"settingsAndroidPowerReenablePopup": "Impossible de réactiver l'optimisation de la batterie à partir de Cwtch. Veuillez aller dans Android \/ Paramètres \/ Apps \/ Cwtch \/ Batterie et régler l'utilisation sur 'Optimisé'.",
"okButton": "OK",
"thisFeatureRequiresGroupExpermientsToBeEnabled": "Cette fonctionnalité nécessite que lexpérience Groupes soit activée dans Paramètres",
"settingAndroidPowerExemption": "Android ignore les optimisations de la batterie",
"messageFormattingDescription": "Activer la mise en forme de texte enrichi dans les messages affichés, par exemple **gras** et *italique*",
"formattingExperiment": "Mise en forme des messages",
"clickableLinksWarning": "L'ouverture de cette URL lancera une application en dehors de Cwtch et peut révéler des métadonnées ou compromettre la sécurité de Cwtch. N'ouvrez que les URLs de personnes en qui vous avez confiance. Êtes-vous sûr de vouloir continuer ?",
"clickableLinksCopy": "Copier l'URL",
"clickableLinkOpen": "Ouvrir l'URL",
"clickableLinkError": "Erreur rencontrée lors de la tentative d'ouverture de l'URL",
"successfullyImportedProfile": "Profil importé avec succès : %profile",
"shuttingDownApp": "Fermeture...",
"importProfileTooltip": "Utilisez une sauvegarde Cwtch chiffrée pour importer un profil créé dans une autre instance de Cwtch.",
"exportProfile": "Exporter un profile",
"importProfile": "Importer un profil",
"failedToImportProfile": "Erreur lors de l'importation du profil",
"exportProfileTooltip": "Sauvegardez ce profil dans un fichier chiffré. Le fichier crypté peut être importé dans une autre application Cwtch.",
"contactSuggestion": "Il s'agit d'une suggestion de contact pour:",
"contactGoto": "Aller à la conversation avec %1",
"yourDisplayName": "Votre nom d'usage",
"profileName": "Nom d'usage",
"displayNameLabel": "Nom d'usage",
"displayNameTooltip": "Veuillez entrer un nom d'usage s'il vous plaît",
"acceptGroupInviteLabel": "Voulez-vous accepter l'invitation au groupe de",
"encryptedProfileDescription": "Le chiffrement d'un profil à l'aide d'un mot de passe le protège des autres personnes susceptibles d'utiliser également cet appareil. Les profils chiffrés ne peuvent pas être déchiffrés, affichés ou accessibles tant que le mot de passe correct n'a pas été saisi pour les déverrouiller.",
"notificationContentSimpleEvent": "Événement ordinaire",
"placeholderEnterMessage": "Saisissez un message",
"conversationNotificationPolicySettingDescription": "Contrôler le comportement de notification de cette conversation",
"notificationPolicySettingDescription": "Contrôle le comportement de notification d'application par défaut",
"notificationContentSettingDescription": "Contrôle le contenu des notifications de conversation",
"conversationNotificationPolicySettingLabel": "Politique de notification des conversations",
"notificationContentContactInfo": "Informations sur les conversations",
"notificationContentSettingLabel": "Contenu des notifications",
"notificationPolicySettingLabel": "Politique de notification",
"conversationNotificationPolicyDefault": "Défaut",
"notificationPolicyDefaultAll": "Tout par défaut",
"conversationNotificationPolicyOptIn": "Optez Pour",
"notificationPolicyOptIn": "Optez Pour",
"tooltipSelectACustomProfileImage": "Sélectionnez une image de profil personnalisée",
"notificationPolicyMute": "Assourdir",
"conversationNotificationPolicyNever": "Jamais",
"settingGroupBehaviour": "Comportement",
"settingsGroupAppearance": "Apparence",
"settingsGroupExperiments": "Expériences",
"newMessageNotificationConversationInfo": "Nouveau message d'%1",
"newMessageNotificationSimple": "Nouveau message",
"editProfile": "Modifier le profil",
"settingTheme": "Utilisez des thèmes clairs",
"torSettingsUseCustomTorServiceConfiguration": "Utiliser une configuration personnalisée du service Tor (torrc)",
@ -40,7 +115,6 @@
"fileSharingSettingsDownloadFolderDescription": "Lorsque les fichiers sont téléchargés automatiquement (par exemple, les fichiers image, lorsque les aperçus d'image sont activés), un emplacement par défaut pour télécharger les fichiers est nécessaire.",
"descriptionACNCircuitInfo": "Informations détaillées sur le chemin que le réseau de communication anonyme utilise pour se connecter à cette conversation.",
"msgConfirmSend": "Êtes-vous sûr de vouloir envoyer",
"acceptGroupInviteLabel": "Voulez-vous accepter l'invitation au groupe de",
"msgFileTooBig": "La taille du fichier ne peut pas dépasser 10 Go",
"msgAddToAccept": "Ajoutez ce compte à vos contacts afin d'accepter ce fichier.",
"btnSendFile": "Envoyer le fichier",
@ -57,7 +131,6 @@
"themeNameGhost": "Fantôme",
"themeNameCwtch": "Cwtch",
"themeColorLabel": "Thème de couleur",
"settingImagePreviewsDescription": "Les images seront téléchargées et prévisualisées automatiquement. Veuillez noter que la prévisualisation des images peut souvent conduire à des failles de sécurité, et vous ne devriez pas activer cette expérience si vous utilisez Cwtch avec des contacts non fiables. Les images de profil sont prévues pour Cwtch 1.6.",
"settingImagePreviews": "Aperçu des images et photos de profil",
"settingDownloadFolder": "Dossier de téléchargement",
"enableExperimentClickableLinks": "Activer les liens cliquables",
@ -72,10 +145,8 @@
"importLocalServerButton": "Importer %1",
"groupsOnThisServerLabel": "Les groupes dont je fais partie sont hébergés sur ce serveur",
"fieldDescriptionLabel": "Description",
"displayNameTooltip": "Veuillez entrer un nom d'usage s'il vous plaît",
"savePeerHistoryDescription": "Détermine s'il faut ou non supprimer tout historique associé au contact.",
"newMessagesLabel": "Nouveaux messages",
"localeRU": "Russe",
"copyServerKeys": "Copier les clés",
"verfiyResumeButton": "Vérifier\/reprendre",
"fileSavedTo": "Enregistré dans",
@ -135,11 +206,8 @@
"archiveConversation": "Archiver cette conversation",
"blockedMessageMessage": "Ce message provient d'un profil que vous avez bloqué.",
"showMessageButton": "Afficher le message",
"placeholderEnterMessage": "saisissez un message",
"encryptedProfileDescription": "Le chiffrement d'un profil à l'aide d'un mot de passe le protège des autres personnes susceptibles d'utiliser également cet appareil. Les profils chiffrés ne peuvent pas être déchiffrés , affichés ou accessibles tant que le mot de passe correct n'a pas été saisi pour les déverrouiller.",
"plainProfileDescription": "Nous vous recommandons de protéger vos profils Cwtch par un mot de passe. Si vous ne définissez pas de mot de passe sur ce profil, toute personne ayant accès à cet appareil peut être en mesure d'accéder aux informations relatives à ce profil, y compris les contacts, les messages et les clés de chiffrement sensibles.",
"addContactConfirm": "Ajouter le contact %1",
"contactGoto": "Aller à la conversation avec %1",
"addContact": "Ajouter le contact",
"settingUIColumnOptionSame": "Même réglage que pour le mode portrait",
"settingUIColumnDouble14Ratio": "Double (1:4)",
@ -147,11 +215,9 @@
"settingUIColumnSingle": "Simple",
"settingUIColumnLandscape": "Colonnes de l'interface utilisateur en mode paysage",
"settingUIColumnPortrait": "Colonnes de l'interface utilisateur en mode portrait",
"localePl": "Polonais",
"tooltipReplyToThisMessage": "Répondre à ce message",
"tooltipRemoveThisQuotedMessage": "Supprimer le message cité.",
"deleteProfileConfirmBtn": "Supprimer vraiment le profil ?",
"groupNameLabel": "Nom du groupe",
"defaultGroupName": "Un groupe génial",
"inviteToGroupLabel": "Inviter au groupe",
"membershipDescription": "Liste des utilisateurs ayant envoyés un ou plusieurs messages au groupe. Cette liste peut ne pas être représentatives de l'ensemble des membres du groupe.",
@ -160,7 +226,6 @@
"deleteBtn": "Effacer",
"acknowledgedLabel": "Accusé de réception",
"zoomLabel": "Zoom de l'interface (affecte principalement la taille du texte et des boutons)",
"localeIt": "Italien",
"versionTor": "Version %1 avec tor %2",
"version": "Version %1",
"builddate": "Construit le : %2",
@ -168,28 +233,20 @@
"tooltipAcceptContactRequest": "Acceptez cette demande de contact.",
"tooltipRejectContactRequest": "Refuser cette demande de contact",
"addNewItem": "Ajouter un nouvel élément à la liste",
"localeEs": "Espagnol",
"todoPlaceholder": "À faire...",
"pasteAddressToAddContact": "Collez une adresse cwtch, une invitation ou un ensemble de clés ici pour ajouter une nouvelle conversation",
"addListItem": "Ajouter un nouvel élément de liste",
"cycleMorphsAndroid": "Cliquez pour faire défiler les morphes.\n Appuyez longuement pour réinitialiser.",
"cycleMorphsDesktop": "Cliquez pour faire défiler les morphes.\n Faites un clic droit pour réinitialiser.",
"debugLog": "Activer le journal de la console de débogage",
"joinGroupTab": "Rejoindre un groupe",
"createGroupTab": "Créer un groupe",
"peerAddress": "Adresse",
"peerName": "Nom",
"groupName": "Nom du groupe",
"server": "Serveur",
"invitation": "Invitation",
"cycleCatsAndroid": "Cliquez pour faire défiler les catégories.\nAppuyez longuement pour réinitialiser.",
"cycleCatsDesktop": "Cliquez pour parcourir la catégorie.\n Faites un clic droit pour réinitialiser.",
"cycleColoursAndroid": "Cliquez pour faire défiler les couleurs.\nAppuyez longuement pour réinitialiser.",
"groupAddr": "Adresse",
"createGroup": "Créer un groupe",
"joinGroup": "Rejoindre le groupe",
"blocked": "Bloqué",
"cycleColoursDesktop": "Cliquez pour faire défiler les couleurs.\nCliquez avec le bouton droit de la souris pour réinitialiser.",
"search": "Recherche...",
"serverInfo": "Informations sur le serveur",
"serverConnectivityConnected": "Serveur connecté",
@ -202,7 +259,6 @@
"addListItemBtn": "Ajouter un élément",
"addProfileTitle": "Ajouter un nouveau profil",
"editProfileTitle": "Modifier le profil",
"profileName": "Pseudo",
"defaultProfileName": "Alice",
"newProfile": "Nouveau profil",
"deleteConfirmText": "SUPPRIMER",
@ -221,23 +277,16 @@
"yourServers": "Vos serveurs",
"unlock": "Déverrouiller",
"settingLanguage": "Langue",
"localeEn": "Anglais",
"localeFr": "Français",
"localePt": "Portugais",
"localeDe": "Allemand",
"settingInterfaceZoom": "Niveau de zoom",
"themeLight": "Clair",
"themeDark": "Sombre",
"experimentsEnabled": "Activer les expériences",
"dateLastYear": "L'année dernière",
"dateNever": "Jamais",
"titleManageServers": "Gérer les serveurs",
"inviteToGroup": "Vous avez été invité à rejoindre un groupe :",
"leaveConversation": "Quittez cette conversation",
"reallyLeaveThisGroupPrompt": "Êtes-vous sûr de vouloir quitter cette conversation ? Tous les messages et attributs seront supprimés.",
"yesLeave": "Oui, quittez cette conversation",
"noPasswordWarning": "Ne pas utiliser de mot de passe sur ce compte signifie que toutes les données stockées localement ne seront pas chiffrées.",
"yourDisplayName": "Pseudo",
"currentPasswordLabel": "Mot de passe actuel",
"password1Label": "Mot de passe",
"password2Label": "Saisissez à nouveau le mot de passe",
@ -263,14 +312,10 @@
"descriptionExperimentsGroups": "L'expérience de groupe permet à Cwtch de se connecter à une infrastructure de serveurs non fiables pour faciliter la communication avec plus d'un contact.",
"descriptionBlockUnknownConnections": "Si elle est activée, cette option fermera automatiquement les connexions des utilisateurs de Cwtch qui n'ont pas été ajoutés à votre liste de contacts.",
"successfullAddedContact": "Ajouté avec succès ",
"dateRightNow": "Maintenant",
"dateLastMonth": "Le mois dernier",
"dateYesterday": "Hier",
"newPassword": "Nouveau mot de passe",
"chatHistoryDefault": "Cette conversation sera supprimée lorsque Cwtch sera fermé ! L'historique des messages peut être activé pour la conversation via le menu Paramètres en haut à droite.",
"accepted": "Accepté !",
"rejected": "Rejeté !",
"contactSuggestion": "Il s'agit d'une suggestion de contact pour : ",
"sendAnInvitation": "Vous avez envoyé une invitation pour : ",
"torVersion": "Version de Tor",
"torStatus": "Statut de Tor",
@ -297,23 +342,21 @@
"defaultScalingText": "Taille par défaut du texte (échelle:",
"largeTextLabel": "Large",
"cwtchSettingsTitle": "Préférences Cwtch",
"copiedToClipboardNotification": "Copié dans le presse-papier",
"saveBtn": "Sauvegarder",
"displayNameLabel": "Pseudo",
"copiedToClipboardNotification": "Copié dans le presse-papier",
"addressLabel": "Adresse",
"puzzleGameBtn": "Puzzle",
"bulletinsBtn": "Bulletins",
"listsBtn": "Listes",
"chatBtn": "Discuter",
"rejectGroupBtn": "Refuser",
"acceptGroupBtn": "Accepter",
"newGroupBtn": "Créer un nouveau groupe",
"copiedClipboardNotification": "Copié dans le presse-papier",
"copyBtn": "Copier",
"pendingLabel": "En attente",
"couldNotSendMsgError": "Impossible d'envoyer ce message",
"dmTooltip": "Envoyer un message privé",
"inviteBtn": "Invitation",
"groupNameLabel": "Nom du groupe",
"invitationLabel": "Invitation",
"serverLabel": "Serveur",
"titlePlaceholder": "titre...",

View File

@ -1,49 +1,133 @@
{
"@@locale": "it",
"@@last_modified": "2022-02-08T20:13:50+01:00",
"newMessageNotificationConversationInfo": "New Message From %1",
"newMessageNotificationSimple": "New Message",
"notificationContentContactInfo": "Conversation Information",
"notificationContentSimpleEvent": "Plain Event",
"conversationNotificationPolicySettingDescription": "Control this conversation's notification behaviour",
"conversationNotificationPolicySettingLabel": "Conversation Notification Policy",
"settingsGroupExperiments": "Experiments",
"settingsGroupAppearance": "Appearance",
"settingGroupBehaviour": "Behaviour",
"notificationContentSettingDescription": "Controls the contents of conversation notifications",
"notificationPolicySettingDescription": "Controls the default application notification behaviour",
"notificationContentSettingLabel": "Notification Content",
"notificationPolicySettingLabel": "Notification Policy",
"conversationNotificationPolicyNever": "Never",
"conversationNotificationPolicyOptIn": "Opt In",
"@@last_modified": "2022-12-05T21:06:07+01:00",
"profileEnabledDescription": "Start or stop the profile",
"profileAutostartDescription": "Controls if the profile will be automatically launched on startup",
"profileEnabled": "Enable",
"profileAutostartLabel": "Autostart",
"localePtBr": "Brazilian Portuguese \/ Português do Brasil",
"localeNl": "Dutch \/ Dutch",
"tooltipPinConversation": "Aggiungi la conversazione in cima alla lista \"Conversazioni\"",
"tooltipUnpinConversation": "Rimuovi la conversazione dalla cima della lista \"Conversazioni\"",
"errorDownloadDirectoryDoesNotExist": "La condivisione file non può essere abilitata perché la destinazione dei download non è stata impostata o è impostata su una cartella che non esiste.",
"acquiringTicketsFromServer": "Esecuzione dell'operazione antispam",
"acquiredTicketsFromServer": "Operazione antispam completata",
"shareProfileMenuTooltop": "Condividi il profilo tramite...",
"shareMenuQRCode": "Mostra il codice QR",
"enableExperimentQRCode": "Codici QR",
"experimentQRCodeDescription": "Il supporto del codice QR consente la condivisione di dati (come l'identità del profilo) tramite codici QR",
"localeTr": "Turco \/ Türk",
"localeIt": "Italiano \/ Italiano",
"fileDownloadUnavailable": "Questo file non sembra disponibile per il download. Il mittente potrebbe aver disabilitato i download per questo file.",
"headingReplies": "Risposte",
"manageSharedFiles": "Gestisci file condivisi",
"messageNoReplies": "Non ci sono risposte a questo messaggio.",
"replyingTo": "Risposta a %1",
"restartFileShare": "Avvia la condivisione del file",
"stopSharingFile": "Interrompi la condivisione del file",
"viewReplies": "Visualizza le risposte a questo messaggio",
"localeDe": "Tedesco \/ Deutsch",
"settingImagePreviewsDescription": "Le immagini e le immagini del profilo verranno scaricate e visualizzate in anteprima automaticamente. Ti consigliamo di non abilitare questo esperimento se usi Cwtch con contatti non attendibili.",
"localeNo": "Norvegese \/ Norsk",
"localeCy": "Gallese \/ Cymraeg",
"localeFr": "Francese \/ Français",
"localePl": "Polacco \/ Polski",
"localePt": "Portoghese \/ Portuguesa",
"localeDa": "Danese \/ Dansk",
"localeEn": "Inglese \/ English",
"localeRo": "Rumeno \/ Română",
"localeEl": "Greco \/ Ελληνικά",
"localeLb": "Lussemburghese \/ Lëtzebuergesch",
"localeEs": "Spagnolo \/ Español",
"localeRU": "Russo \/ Русский",
"tooltipCode": "Codice \/ Monospazio",
"tooltipPreviewFormatting": "Anteprima della formattazione del messaggio",
"tooltipStrikethrough": "Barrato",
"tooltipSubscript": "Pedice",
"tooltipSuperscript": "Apice",
"tooltipItalicize": "Corsivo",
"tooltipBackToMessageEditing": "Torna a Modifica del messaggio",
"tooltipBoldText": "Grassetto",
"settingsAndroidPowerReenablePopup": "Impossibile riattivare l'ottimizzazione della batteria dall'interno di Cwtch. Vai su Android \/ Impostazioni \/ Apps \/ Cwtch \/ Informazioni App \/ (Utilizzo) Batteria e imposta su 'Ottimizzato'.",
"puzzleGameBtn": "Gioco di puzzle",
"editProfileTitle": "Modifica il profilo",
"currentPasswordLabel": "Password corrente",
"createProfileBtn": "Crea un profilo",
"saveProfileBtn": "Salva il profilo",
"deleteProfileBtn": "Elimina il profilo",
"deleteProfileConfirmBtn": "Elimina definitivamente il profilo",
"yourProfiles": "I tuoi profili",
"yourServers": "I tuoi server",
"titleManageProfiles": "Gestisci i profili Cwtch",
"titleManageServers": "Gestisci i server",
"leaveConversation": "Lascia questa conversazione",
"yesLeave": "Sì, lascia questa conversazione",
"newPassword": "Nuova password",
"thisFeatureRequiresGroupExpermientsToBeEnabled": "Questa funzione richiede che l'esperimento Gruppi sia abilitato in Impostazioni",
"importProfileTooltip": "Utilizza un backup Cwtch crittografato per importare un profilo creato in un'altra istanza di Cwtch.",
"clickableLinksWarning": "L'apertura di questo URL avvierà un'applicazione al di fuori di Cwtch e potrebbe rivelare metadati o compromettere in altro modo la sicurezza di Cwtch. Apri solo gli URL provenienti da persone di cui ti fidi. Vuoi continuare?",
"exportProfileTooltip": "Salva il backup di questo profilo in un file crittografato. Il file crittografato può essere importato in un'altra app Cwtch.",
"successfullyImportedProfile": "Profilo importato con successo: %profilo",
"clickableLinkError": "Errore riscontrato durante il tentativo di aprire l'URL",
"messageFormattingDescription": "Abilita la formattazione RTF nei messaggi visualizzati, ad esempio **grassetto** e *corsivo*",
"settingAndroidPowerExemption": "Android ignora le ottimizzazioni della batteria",
"settingAndroidPowerExemptionDescription": "Opzionale: richiedi ad Android di esentare Cwtch dalla gestione ottimizzata dell'alimentazione. Ciò si tradurrà in una migliore stabilità a costo di un maggiore utilizzo della batteria.",
"okButton": "OK",
"exportProfile": "Esporta profilo",
"importProfile": "Importa profilo",
"failedToImportProfile": "Errore nell'importazione del profilo",
"shuttingDownApp": "Spegnimento...",
"clickableLinksCopy": "Copiare l'URL",
"clickableLinkOpen": "Aprire l'URL",
"formattingExperiment": "Formattazione dei messaggi",
"settingTheme": "Usa Temi Leggeri",
"editProfile": "Modifica il profilo",
"labelTorNetwork": "Rete tor",
"notificationPolicyDefaultAll": "Default globale",
"notificationContentContactInfo": "Informazioni sulla conversazione",
"notificationContentSimpleEvent": "Evento semplice",
"newMessageNotificationSimple": "Nuovo messaggio",
"newMessageNotificationConversationInfo": "Nuovo messaggio da %1",
"conversationSettings": "Impostazioni di conversazione",
"addListItemBtn": "Aggiungi elemento",
"blockBtn": "Blocca il contatto",
"savePeerHistory": "Salva la cronologia",
"dontSavePeerHistory": "Elimina la cronologia",
"unblockBtn": "Sblocca il contatto",
"experimentsEnabled": "Abilita gli esperimenti",
"contactAlreadyExists": "Il contatto esiste già",
"torSettingsEnabledAdvanced": "Abilita la configurazione avanzata di tor",
"torSettingsEnabledAdvancedDescription": "Usa un servizio tor esistente nel tuo sistema o modifica i parametri del servizio tor di Cwtch",
"torSettingsCustomSocksPort": "Porta SOCKS personalizzata",
"torSettingsCustomSocksPortDescription": "Usa una porta personalizzata per le connessioni dati al proxy di tor",
"torSettingsCustomControlPort": "Porta di controllo personalizzata",
"torSettingsCustomControlPortDescription": "Usa una porta personalizzata per le connessioni di controllo al proxy di tor",
"torSettingsEnabledCacheDescription": "Memorizza nella cache l'attuale consenso di tor scaricato per riutilizzarlo alla prossima apertura di Cwtch. Ciò consentirà a Tor di iniziare più velocemente. Se disabilitato, Cwtch eliminerà i dati memorizzati nella cache all'avvio.",
"torSettingsEnableCache": "Memorizza nella cache il consenso di tor ",
"torSettingsUseCustomTorServiceConfiguration": "Utilizzare una configurazione personalizzata di tor (torrc)",
"torSettingsUseCustomTorServiceConfigurastionDescription": "Sovrascrivi la configurazione predefinita di tor. Attenzione: Questo potrebbe essere pericoloso. Attivalo solo se sai cosa stai facendo.",
"torSettingsErrorSettingPort": "Il numero di porta deve essere compreso tra 1 e 65535",
"fileSharingSettingsDownloadFolderDescription": "Quando i file vengono scaricati automaticamente (ad esempio le immagini, quando le anteprime delle immagini sono abilitate) è necessaria una posizione predefinita in cui scaricare i file.",
"fileSharingSettingsDownloadFolderTooltip": "Seleziona un'altra cartella predefinita per i file scaricati.",
"labelACNCircuitInfo": "Informazioni sul circuito ACN (Network di Comunicazione Anonima)",
"descriptionACNCircuitInfo": "Informazioni approfondite sul percorso utilizzato dalla rete di comunicazione anonima per connettersi a questa conversazione.",
"tooltipSelectACustomProfileImage": "Seleziona un'immagine del profilo personalizzata",
"conversationNotificationPolicyDefault": "Default",
"notificationPolicyDefaultAll": "Default All",
"notificationPolicyOptIn": "Opt In",
"notificationPolicyMute": "Mute",
"tooltipSelectACustomProfileImage": "Select a Custom Profile Image",
"torSettingsEnabledCacheDescription": "Cache the current downloaded Tor consensus to reuse next time Cwtch is opened. This will allow Tor to start faster. When disabled, Cwtch will purge cached data on start up.",
"torSettingsEnableCache": "Cache Tor Consensus",
"labelTorNetwork": "Tor Network",
"descriptionACNCircuitInfo": "In depth information about the path that the anonymous communication network is using to connect to this conversation.",
"labelACNCircuitInfo": "ACN Circuit Info",
"fileSharingSettingsDownloadFolderTooltip": "Browse to select a different default folder for downloaded files.",
"fileSharingSettingsDownloadFolderDescription": "When files are downloaded automatically (e.g. image files, when image previews are enabled) a default location to download the files to is needed.",
"torSettingsErrorSettingPort": "Port Number must be between 1 and 65535",
"torSettingsUseCustomTorServiceConfigurastionDescription": "Override the default tor configuration. Warning: This could be dangerous. Only turn this on if you know what you are doing.",
"torSettingsUseCustomTorServiceConfiguration": "Use a Custom Tor Service Configuration (torrc)",
"torSettingsCustomControlPortDescription": "Use a custom port for control connections to the Tor proxy",
"torSettingsCustomControlPort": "Custom Control Port",
"torSettingsCustomSocksPortDescription": "Use a custom port for data connections to the Tor proxy",
"torSettingsCustomSocksPort": "Custom SOCKS Port",
"torSettingsEnabledAdvancedDescription": "Use an existing Tor service on your system, or change the parameters of the Cwtch Tor Service",
"torSettingsEnabledAdvanced": "Enable Advanced Tor Configuration",
"notificationPolicyOptIn": "A scelta",
"notificationPolicyMute": "Nessuna notifica",
"conversationNotificationPolicyOptIn": "Attiva",
"conversationNotificationPolicyNever": "Mai",
"notificationPolicySettingLabel": "Criteri di notifica",
"notificationContentSettingLabel": "Contenuto della notifica",
"notificationPolicySettingDescription": "Controlla il comportamento predefinito delle notifiche dell'applicazione",
"notificationContentSettingDescription": "Controlla il contenuto delle notifiche di conversazione",
"settingGroupBehaviour": "Comportamento",
"settingsGroupAppearance": "Aspetto",
"settingsGroupExperiments": "Esperimenti",
"conversationNotificationPolicySettingLabel": "Criteri di notifica delle conversazioni",
"conversationNotificationPolicySettingDescription": "Controlla il comportamento delle notifiche per questa conversazione",
"serverNotSynced": "Sincronizzazione Nuovi Messaggi (L'operazione può richiedere del tempo)...",
"copiedClipboardNotification": "Copiato negli appunti",
"savePeerHistory": "Salva Cronologia ",
"blockUnknownLabel": "Blocca Contatti Sconosciuti",
"unblockBtn": "Sblocca il Contatto",
"dontSavePeerHistory": "Elimina Cronologia",
"blockBtn": "Blocca il Contatto",
"addPeer": "Aggiungi Contatto",
"importLocalServerSelectText": "Seleziona il Server Locale",
"manageKnownServersButton": "Gestisci i Server Conosciuti",
@ -55,12 +139,7 @@
"themeColorLabel": "Schema di Colori",
"btnSendFile": "Invia File",
"newMessagesLabel": "Nuovi Messaggi",
"copiedToClipboardNotification": "Copiato negli Appunti",
"groupNameLabel": "Nome del gruppo",
"titleManageServers": "Gestisci i Server",
"leaveConversation": "Lascia Questa Conversazione",
"yesLeave": "Sì, Lascia Questa Conversazione",
"newPassword": "Nuova Password",
"groupNameLabel": "Nome del Gruppo",
"sendMessage": "Invia Messaggio",
"tooltipShowPassword": "Mostra la Password",
"tooltipHidePassword": "Nascondi la Password",
@ -74,31 +153,14 @@
"settingServers": "Server di Hosting",
"openFolderButton": "Apri Cartella",
"reallyLeaveThisGroupPrompt": "Confermi di voler lasciare questa conversazione? Tutti i messaggi e gli attributi verranno eliminati.",
"dateLastMonth": "Mese Scorso",
"dateLastYear": "L'Anno Scorso",
"titleManageProfiles": "Gestisci i Profili Cwtch",
"contactAlreadyExists": "Il Contatto Esiste Già",
"conversationSettings": "Impostazioni di Conversazione",
"enableGroups": "Abilita la Chat di Gruppo",
"addListItem": "Aggiungi un Nuovo Elemento alla Lista",
"newConnectionPaneTitle": "Nuova Connessione",
"viewGroupMembershipTooltip": "Visualizza i Membri del Gruppo",
"experimentsEnabled": "Abilita Esperimenti",
"yourServers": "I Tuoi Server",
"yourProfiles": "I Tuoi Profili",
"deleteProfileConfirmBtn": "Elimina Definitivamente il Profilo",
"deleteProfileBtn": "Elimina Profilo",
"saveProfileBtn": "Salva il Profilo",
"createProfileBtn": "Crea un Profilo",
"currentPasswordLabel": "Password Corrente",
"yourDisplayName": "Il tuo Nome Visualizzato",
"editProfile": "Modifica Profilo",
"newProfile": "Nuovo Profilo",
"editProfileTitle": "Modifica Profilo",
"puzzleGameBtn": "Gioco di Puzzle",
"searchList": "Elenco di Ricerca",
"dmTooltip": "Clicca per inviare un Messaggio Diretto",
"addListItemBtn": "Aggiungi Elemento",
"viewServerInfo": "Informazioni sul Server",
"serverConnectivityDisconnected": "Server Disconnesso",
"serverConnectivityConnected": "Server Connesso",
@ -106,12 +168,6 @@
"createGroupTitle": "Crea un Gruppo",
"defaultGroupName": "Gruppo Fantastico",
"pasteAddressToAddContact": "Incolla qui un indirizzo cwtch, un invito o un gruppo di chiavi per aggiungere una nuova conversazione",
"cycleCatsAndroid": "Clicca per scorrere le categorie.\nPressione lunga per resettare.",
"cycleCatsDesktop": "Clicca per scorrere le categorie.\nClicca con il tasto destro per resettare.",
"cycleMorphsAndroid": "Clicca per scorrere i morph.\nPressione lunga per resettare.",
"cycleMorphsDesktop": "Clicca per scorrere i morph.\nClicca con il tasto destro per resettare.",
"cycleColoursAndroid": "Clicca per scorrere i colori.\nPressione lunga per resettare.",
"cycleColoursDesktop": "Clicca per scorrere i colori.\nClicca con il tasto destro per resettare.",
"noPasswordWarning": "Se non utilizzi una password su questo account, tutti i dati archiviati localmente non verranno criptati",
"descriptionExperiments": "Gli esperimenti di Cwtch sono opzioni abilitabili per aggiungere a Cwtch funzionalità che possono considerare la privacy diversamente rispetto alla tradizionale chat 1:1 resistente ai metadati, ad esempio chat di gruppo, integrazione di bot ecc.",
"shutdownCwtchDialog": "Confermi di voler chiudere Cwtch? Questo chiuderà tutte le connessioni e uscirà dall'applicazione.",
@ -132,7 +188,6 @@
"serverConnectionsLabel": "Connessione",
"experimentClickableLinksDescription": "L'esperimento dei link cliccabili permette di cliccare sugli URL condivisi nei messaggi",
"settingImagePreviews": "Anteprime delle immagini e immagini del profilo",
"settingImagePreviewsDescription": "Le immagini verranno scaricate e visualizzate in anteprima automaticamente. Tieni presente che le anteprime delle immagini possono spesso portare a vulnerabilità di sicurezza e non dovresti abilitare questo esperimento se usi Cwtch con contatti non attendibili. Le immagini del profilo sono previste per Cwtch 1.6.",
"themeNameCwtch": "Cwtch",
"themeNameWitch": "Strega",
"themeNameVampire": "Vampiro",
@ -157,7 +212,6 @@
"titleManageProfilesShort": "Profili",
"tooltipReplyToThisMessage": "Rispondi a questo messaggio",
"tooltipRemoveThisQuotedMessage": "Rimuovi il messaggio citato.",
"localePl": "Polacco",
"settingUIColumnPortrait": "Colonne dell'interfaccia utente in modalità verticale",
"settingUIColumnLandscape": "Colonne dell'interfaccia utente in modalità orizzontale",
"settingUIColumnSingle": "Singola",
@ -196,7 +250,6 @@
"fileCheckingStatus": "Controllo dello stato del download",
"verfiyResumeButton": "Verifica\/riprendi",
"copyServerKeys": "Copia chiavi",
"localeRU": "Russo",
"messageFileOffered": "Il contatto offre l'invio di un file",
"tooltipSendFile": "Invia file",
"settingFileSharing": "Condivisione file",
@ -210,9 +263,6 @@
"descriptionExperimentsGroups": "L'esperimento di gruppo permette a Cwtch di connettersi con un'infrastruttura server non fidata per facilitare la comunicazione con più di un contatto.",
"descriptionBlockUnknownConnections": "Se attivata, questa opzione chiuderà automaticamente le connessioni degli utenti Cwtch che non sono stati aggiunti alla tua lista di contatti.",
"successfullAddedContact": "Aggiunto con successo ",
"dateRightNow": "Ora",
"dateYesterday": "Ieri",
"dateNever": "Mai",
"inviteToGroup": "Hai ricevuto un invito a unirti a un gruppo:",
"chatHistoryDefault": "Questa conversazione sarà cancellata quando Cwtch sarà chiuso! La cronologia dei messaggi può essere abilitata per ogni conversazione tramite il menu Impostazioni in alto a destra.",
"accepted": "Accettato!",
@ -244,19 +294,12 @@
"versionTor": "Versione %1 con tor %2",
"version": "Versione %1",
"builddate": "Costruito il: %2",
"localeEn": "Inglese",
"localeIt": "Italiano",
"localeEs": "Spagnolo",
"localeDe": "Tedesco",
"localePt": "Portoghese",
"localeFr": "Francese",
"serverLabel": "Server",
"createGroupBtn": "Crea",
"createGroupTab": "Crea un gruppo",
"joinGroupTab": "Unisciti a un gruppo",
"peerAddress": "Indirizzo",
"peerName": "Nome",
"groupName": "Nome del gruppo",
"server": "Server",
"invitation": "Invito",
"groupAddr": "Indirizzo",
@ -281,6 +324,7 @@
"listsBtn": "Liste",
"bulletinsBtn": "Bollettini",
"addressLabel": "Indirizzo",
"copiedToClipboardNotification": "Copiato negli Appunti",
"displayNameLabel": "Nome visualizzato",
"saveBtn": "Salva",
"password": "Password",
@ -312,7 +356,6 @@
"settingLanguage": "Lingua",
"settingInterfaceZoom": "Livello di zoom",
"largeTextLabel": "Grande",
"settingTheme": "Tema",
"themeLight": "Chiaro",
"themeDark": "Scuro",
"defaultScalingText": "Testo di dimensioni predefinite (fattore di scala:",

367
lib/l10n/intl_lb.arb Normal file
View File

@ -0,0 +1,367 @@
{
"@@locale": "lb",
"@@last_modified": "2022-12-05T21:06:07+01:00",
"profileEnabledDescription": "Start or stop the profile",
"profileAutostartDescription": "Controls if the profile will be automatically launched on startup",
"profileEnabled": "Enable",
"profileAutostartLabel": "Autostart",
"localePtBr": "Brazilian Portuguese \/ Português do Brasil",
"localeNl": "Dutch \/ Dutch",
"experimentQRCodeDescription": "QR Code support allows sharing data (such as profile identity) by QR Codes",
"enableExperimentQRCode": "QR Codes",
"shareMenuQRCode": "Show QR Code",
"shareProfileMenuTooltop": "Share profile via...",
"acquiredTicketsFromServer": "Antispam Challenge Complete",
"acquiringTicketsFromServer": "Performing Antispam Challenge",
"errorDownloadDirectoryDoesNotExist": "Filesharing cannot be enabled because the Download Folder has not been set, or is set to a folder that does not exist.",
"localeTr": "Tierkesch \/ Türk",
"localeIt": "Italienesch",
"localeEn": "Englesch \/ English",
"localeFr": "Franséisch \/ Français",
"tooltipUnpinConversation": "Unpin conversation from the top of \"Conversations\"",
"tooltipPinConversation": "Pin conversation to the top of \"Conversations\"",
"replyingTo": "Replying to %1",
"fileDownloadUnavailable": "This file appears unavailable for download. The sender may have disabled downloads for this file.",
"messageNoReplies": "There are no replies to this message.",
"headingReplies": "Replies",
"viewReplies": "View replies to this message",
"restartFileShare": "Start Sharing File",
"stopSharingFile": "Stop Sharing File",
"manageSharedFiles": "Manage Shared Files",
"localeDe": "Däitsch \/ Deutsch",
"localeLb": "Lëtzebuergesch",
"localeNo": "Norwegesch",
"localeEl": "Griichesch",
"localePl": "Polish \/ Polski",
"localeRo": "Rumänesch",
"localeRU": "Russesch",
"localeEs": "Spuenesch",
"localeDa": "Dänesch",
"localePt": "Portugisesch",
"localeCy": "Waliser",
"settingImagePreviewsDescription": "Images and Profile Pictures will be downloaded and previewed automatically. We recommend that you do not enable this Experiment if you use Cwtch with untrusted contacts.",
"tooltipPreviewFormatting": "Preview Message Formatting",
"tooltipCode": "Code \/ Monospace",
"tooltipStrikethrough": "Strikethrough",
"tooltipSubscript": "Subscript",
"tooltipSuperscript": "Superscript",
"tooltipItalicize": "Italic",
"tooltipBackToMessageEditing": "Back to Message Editing",
"tooltipBoldText": "Bold",
"okButton": "OK",
"settingsAndroidPowerReenablePopup": "Cannot re-enable Battery Optimization from within Cwtch. Please go to Android \/ Settings \/ Apps \/ Cwtch \/ Battery and set Usage to 'Optimized'",
"settingAndroidPowerExemptionDescription": "Optional: Request Android to exempt Cwtch from optimized power management. This will result in better stability at the cost of greater battery use.",
"settingAndroidPowerExemption": "Android Ignore Battery Optimizations",
"thisFeatureRequiresGroupExpermientsToBeEnabled": "This feature requires the Groups Experiment to be enabled in Settings",
"messageFormattingDescription": "Enable rich text formatting in displayed messages e.g. **bold** and *italic*",
"formattingExperiment": "Message Formatting",
"clickableLinkError": "Error encountered while attempting to open URL",
"clickableLinksCopy": "Copy URL",
"clickableLinkOpen": "Open URL",
"clickableLinksWarning": "Opening this URL will launch an application outside of Cwtch and may reveal metadata or otherwise compromise the security of Cwtch. Only open URLs from people you trust. Are you sure you want to continue?",
"shuttingDownApp": "Shutting down...",
"successfullyImportedProfile": "Successfully Imported Profile: %profile",
"failedToImportProfile": "Error Importing Profile",
"importProfileTooltip": "Use an encrypted Cwtch backup to bring in a profile created in another instance of Cwtch.",
"importProfile": "Import Profile",
"exportProfileTooltip": "Backup this profile to an encrypted file. The encrypted file can be imported into another Cwtch app.",
"exportProfile": "Export Profile",
"newPassword": "Neit Passwuert",
"yesLeave": "Jo, Konversatioun verloossen",
"leaveConversation": "Konversatioun verloossen",
"titleManageServers": "Server managen",
"titleManageProfiles": "Meng Profiller managen",
"titleManageContacts": "Konversatiounen",
"todoPlaceholder": "Todo...",
"networkStatusOnline": "Online",
"smallTextLabel": "Kleng",
"builddate": "Opegbaut op : %2",
"version": "Versioun %1",
"versionTor": "Versioun %1 mad Tor %2",
"settingInterfaceZoom": "Zoom Level",
"largeTextLabel": "Grouss",
"themeDark": "Donkel",
"themeLight": "Hell",
"settingLanguage": "Sprooch",
"versionBuilddate": "Versioun: %1 Opgebaut op: %2",
"cwtchSettingsTitle": "Cwtch Astellungen",
"unlock": "Entsperren",
"yourServers": "Meng Server",
"addNewProfileBtn": "Neien Profil dobäifügen",
"yourProfiles": "Meng Profiller",
"password": "Passwuert",
"deleteProfileConfirmBtn": "Wierklech d'Profil läschen",
"deleteConfirmLabel": "Schreif LÄSCHEN fir ze confirméieren",
"deleteConfirmText": "LÄSCHEN",
"deleteProfileBtn": "Profil läschen",
"saveProfileBtn": "Profil späicheren",
"passwordErrorEmpty": "Passwuert kann net eidel sinn",
"createProfileBtn": "Profil erstellen",
"password2Label": "Passwuert nei aginn",
"password1Label": "Passwuert",
"currentPasswordLabel": "Aktuellt Passwuert",
"radioNoPassword": "Onverschlësselt (keen Passwuert)",
"radioUsePassword": "Passwuert",
"newProfile": "Neien Profil",
"editProfile": "Profil editéieren",
"bulletinsBtn": "Bulletins",
"acknowledgedLabel": "Unerkannt",
"addListItemBtn": "Item dobäifügen",
"addProfileTitle": "Neien Profil dobäifügen",
"editProfileTitle": "Profil editéieren",
"defaultProfileName": "Alice",
"deleteBtn": "Läschen",
"unblockBtn": "Kontakt entblockéieren",
"dontSavePeerHistory": "Verlaf läschen",
"savePeerHistory": "Verlaf späicheren",
"blockBtn": "Kontakt blockéieren",
"saveBtn": "Späicheren",
"addressLabel": "Adress",
"puzzleGameBtn": "Puzzle Spill",
"listsBtn": "Leschten",
"chatBtn": "Chat",
"rejectGroupBtn": "Refuséieren",
"acceptGroupBtn": "Acceptéieren",
"newGroupBtn": "Neien Grupp erstellen",
"copyBtn": "Kopéieren",
"couldNotSendMsgError": "Dësen Message konnt net geschéckt ginn",
"peerBlockedMessage": "Kontakt ass blockéiert",
"dmTooltip": "Klicke fir ee Direkten Message",
"peerNotOnline": "Kontakt ass offline. Applikatiounen kennen elo grad net genotzt ginn.",
"searchList": "Lescht sichen",
"update": "Update",
"inviteToGroupLabel": "An d'Grupp alueden",
"inviteBtn": "Alueden",
"groupNameLabel": "Gruppennumm",
"viewServerInfo": "Server Info",
"settingDownloadFolder": "Download Dossier",
"themeNameCwtch": "Cwtch",
"themeNameWitch": "Witch",
"themeNameGhost": "Ghost",
"themeNameVampire": "Vampire",
"themeNamePumpkin": "Pumpkin",
"themeNameMermaid": "Mermaid",
"themeNameMidnight": "Midnight",
"themeNameNeon1": "Neon 1",
"themeNameNeon2": "Neon 2",
"serverSynced": "Synchroniséiert",
"serverConnectivityDisconnected": "Server getrennt",
"serverConnectivityConnected": "Server verbonnen",
"serverInfo": "Server-Informatiounen",
"invitationLabel": "Aluedung",
"serverLabel": "Server",
"search": "Sich...",
"blocked": "Blockéiert",
"pasteAddressToAddContact": "Cwtch Adress, Aluedung oder Schlëssel hei dobäifügen, fir eng neí Konversatioun dobäizefügen",
"titlePlaceholder": "Titel...",
"postNewBulletinLabel": "Nei Meldung verëffentlechen",
"newBulletinLabel": "Nei Meldung",
"joinGroup": "Grupp bäitrieden",
"createGroup": "Grupp erstellen",
"addPeer": "Kontakt dobäifügen",
"groupAddr": "Adress",
"invitation": "Invitatioun",
"server": "Server",
"peerName": "Numm",
"peerAddress": "Adress",
"joinGroupTab": "Ee Grupp bäitrieden",
"createGroupTab": "Ee Grupp erstellen",
"addPeerTab": "Een Kontakt dobäifügen",
"profileOnionLabel": "Send this address to people you want to connect with",
"createGroupBtn": "Erstellen",
"defaultGroupName": "Super Grupp",
"createGroupTitle": "Grupp erstellen",
"torSettingsCustomControlPort": "Benotzerdefinéiert Kontrollport",
"torSettingsCustomControlPortDescription": "Eege Port Konfiguratioun fir Kontrollconnectiounen op den Tor-Proxy",
"torSettingsUseCustomTorServiceConfiguration": "Eegen Tor Service Konfiguratioun benotzen (torrc)",
"torSettingsUseCustomTorServiceConfigurastionDescription": "Iwwerschreiwe vun den Tor Astellungen. Oppassen: Geféierlech! Maacht dat just wann Dir wësst, wat Dir maacht.",
"fileSharingSettingsDownloadFolderTooltip": "Aneren Dossier auswielen fir Downloads.",
"torSettingsErrorSettingPort": "Port Nummer muss tëschent 1 an 65535 sinn",
"fileSharingSettingsDownloadFolderDescription": "Wann Daten automatesch erofgeluede ginn (z.B Biller, wann Virunsicht aktivéiert ass), muss een Dossier fir Download agestallt ginn.",
"labelACNCircuitInfo": "ACN Circuit Informatioun",
"descriptionACNCircuitInfo": "Detailléiert Informatiounen iwwert de Pfad vum anonymiséierte Kommunikatiounsnetzwierk, de fir des Konversatioun verwent gëtt.",
"torSettingsEnableCache": "Tor Censensus tëschenspäichern",
"labelTorNetwork": "Tor Netzwierk",
"torSettingsEnabledCacheDescription": "Tëschegespäichert vum aktuell erofgeluedenen Tor consensus fir en beim nächsten Opmaachen vun Cwatch erëm ze verwenden. Dat erméiglecht ee schnellen Start vun Tor. Wann desaktivéiert läscht Cwatch déi tëschegespäichert Daten beim starten.",
"tooltipSelectACustomProfileImage": "Auswielen enges benotzerdefinéiert Profilbild's",
"notificationPolicyMute": "Daaf schalten",
"notificationPolicyOptIn": "Participatioun Zoustëmmen",
"notificationPolicyDefaultAll": "All Astellungen zerécksetzen",
"conversationNotificationPolicyDefault": "Astellung zerécksetzen",
"conversationNotificationPolicyOptIn": "Participatiouns Zoustëmmung",
"conversationNotificationPolicyNever": "Nimools",
"notificationPolicySettingLabel": "Notifikatioun's Astellung",
"notificationContentSettingLabel": "Inhalt der Notifikatioun",
"notificationPolicySettingDescription": "Virastellung vum Notifikatiounsverhaale",
"notificationContentSettingDescription": "Steierung vum Inhalt vun der Konversatiouns Notifikatioun",
"conversationNotificationPolicySettingLabel": "Konversatioun Notifikatioun's Astellung",
"settingsGroupExperiments": "Experimenter",
"settingGroupBehaviour": "Behuelen",
"settingsGroupAppearance": "Ausgesinn",
"conversationNotificationPolicySettingDescription": "Notifikatioun's Astellung fir des Konversatioun",
"notificationContentSimpleEvent": "Schlicht Ereegnis",
"notificationContentContactInfo": "Konversatiouns Informatiounen",
"newMessageNotificationSimple": "Neie Message",
"newMessageNotificationConversationInfo": "Neie Message vun %1",
"torSettingsCustomSocksPortDescription": "Use a custom port for data connections to the Tor proxy",
"torSettingsCustomSocksPort": "Custom SOCKS Port",
"torSettingsEnabledAdvancedDescription": "Use an existing Tor service on your system, or change the parameters of the Cwtch Tor Service",
"torSettingsEnabledAdvanced": "Enable Advanced Tor Configuration",
"msgAddToAccept": "Add this account to your contacts in order to accept this file.",
"btnSendFile": "Send File",
"msgConfirmSend": "Are you sure you want to send",
"msgFileTooBig": "File size cannot exceed 10 GB",
"storageMigrationModalMessage": "Migrating profiles to new storage format. This could take a few minutes...",
"loadingCwtch": "Loading Cwtch...",
"themeColorLabel": "Color Theme",
"settingImagePreviews": "Image Previews and Profile Pictures",
"experimentClickableLinksDescription": "The clickable links experiment allows you to click on URLs shared in messages",
"enableExperimentClickableLinks": "Enable Clickable Links",
"serverConnectionsLabel": "Connection",
"serverTotalMessagesLabel": "Total Messages",
"serverMetricsLabel": "Server Metrics",
"manageKnownServersShort": "Servers",
"manageKnownServersLong": "Manage Known Servers",
"displayNameTooltip": "Please enter a display name",
"manageKnownServersButton": "Manage Known Servers",
"fieldDescriptionLabel": "Description",
"groupsOnThisServerLabel": "Groups I am in hosted on this server",
"importLocalServerButton": "Import %1",
"importLocalServerSelectText": "Select Local Server",
"importLocalServerLabel": "Import a locally hosted server",
"newMessagesLabel": "New Messages",
"copyServerKeys": "Copy keys",
"verfiyResumeButton": "Verify\/resume",
"fileCheckingStatus": "Checking download status",
"fileInterrupted": "Interrupted",
"fileSavedTo": "Saved to",
"encryptedServerDescription": "Encrypting a server with a password protects it from other people who may also use this device. Encrypted servers cannot be decrypted, displayed or accessed until the correct password is entered to unlock them.",
"plainServerDescription": "We recommend that you protect your Cwtch servers with a password. If you do not set a password on this server then anyone who has access to this device may be able to access information about this server, including sensitive cryptographic keys.",
"deleteServerConfirmBtn": "Really delete server",
"deleteServerSuccess": "Successfully deleted server",
"enterCurrentPasswordForDeleteServer": "Please enter current password to delete this server",
"copyAddress": "Copy Address",
"settingServersDescription": "The hosting servers experiment enables hosting and managing Cwtch servers",
"settingServers": "Hosting Servers",
"enterServerPassword": "Enter password to unlock server",
"unlockProfileTip": "Please create or unlock a profile to begin!",
"unlockServerTip": "Please create or unlock a server to begin!",
"addServerTooltip": "Add new server",
"serversManagerTitleShort": "Servers",
"serversManagerTitleLong": "Servers You Host",
"saveServerButton": "Save Server",
"serverAutostartDescription": "Controls if the application will automatically launch the server on start",
"serverAutostartLabel": "Autostart",
"serverEnabledDescription": "Start or stop the server",
"serverEnabled": "Server Enabled",
"serverDescriptionDescription": "Your description of the server for personal management use only, will never be shared",
"serverDescriptionLabel": "Server Description",
"serverAddress": "Server Address",
"editServerTitle": "Edit Server",
"addServerTitle": "Add Server",
"titleManageProfilesShort": "Profiles",
"descriptionFileSharing": "The file sharing experiment allows you to send and receive files from Cwtch contacts and groups. Note that sharing a file with a group will result in members of that group connecting with you directly over Cwtch to download it.",
"settingFileSharing": "File Sharing",
"tooltipSendFile": "Send File",
"messageFileOffered": "Contact is offering to send you a file",
"messageFileSent": "You sent a file",
"messageEnableFileSharing": "Enable the file sharing experiment to view this message.",
"labelFilesize": "Size",
"labelFilename": "Filename",
"downloadFileButton": "Download",
"openFolderButton": "Open Folder",
"retrievingManifestMessage": "Retrieving file information...",
"descriptionStreamerMode": "If turned on, this option makes the app more visually private for streaming or presenting with, for example, hiding profile and contact addresses",
"streamerModeLabel": "Streamer\/Presentation Mode",
"archiveConversation": "Archive this Conversation",
"blockUnknownConnectionsEnabledDescription": "Connections from unknown contacts are blocked. You can change this in Settings",
"showMessageButton": "Show Message",
"blockedMessageMessage": "This message is from a profile you have blocked.",
"placeholderEnterMessage": "Type a message...",
"plainProfileDescription": "We recommend that you protect your Cwtch profiles with a password. If you do not set a password on this profile then anyone who has access to this device may be able to access information about this profile, including contacts, messages and sensitive cryptographic keys.",
"encryptedProfileDescription": "Encrypting a profile with a password protects it from other people who may also use this device. Encrypted profiles cannot be decrypted, displayed or accessed until the correct password is entered to unlock them.",
"addContactConfirm": "Add contact %1",
"addContact": "Add contact",
"contactGoto": "Go to conversation with %1",
"settingUIColumnOptionSame": "Same as portrait mode setting",
"settingUIColumnDouble14Ratio": "Double (1:4)",
"settingUIColumnDouble12Ratio": "Double (1:2)",
"settingUIColumnSingle": "Single",
"settingUIColumnLandscape": "UI Columns in Landscape Mode",
"settingUIColumnPortrait": "UI Columns in Portrait Mode",
"tooltipRemoveThisQuotedMessage": "Remove quoted message.",
"tooltipReplyToThisMessage": "Reply to this message",
"tooltipRejectContactRequest": "Reject this contact request",
"tooltipAcceptContactRequest": "Accept this contact request.",
"notificationNewMessageFromGroup": "New message in a group!",
"notificationNewMessageFromPeer": "New message from a contact!",
"tooltipHidePassword": "Hide Password",
"tooltipShowPassword": "Show Password",
"groupInviteSettingsWarning": "You have been invited to join a group! Please enable the Group Chat Experiment in Settings to view this Invitation.",
"shutdownCwtchAction": "Shutdown Cwtch",
"shutdownCwtchDialog": "Are you sure you want to shutdown Cwtch? This will close all connections, and exit the application.",
"shutdownCwtchDialogTitle": "Shutdown Cwtch?",
"shutdownCwtchTooltip": "Shutdown Cwtch",
"malformedMessage": "Malformed message",
"profileDeleteSuccess": "Successfully deleted profile",
"debugLog": "Turn on console debug logging",
"torNetworkStatus": "Tor network status",
"addContactFirst": "Add or pick a contact to begin chatting.",
"createProfileToBegin": "Please create or unlock a profile to begin",
"nickChangeSuccess": "Profile nickname changed successfully",
"addServerFirst": "You need to add a server before you can create a group",
"deleteProfileSuccess": "Successfully deleted profile",
"sendInvite": "Send a contact or group invite",
"sendMessage": "Send Message",
"cancel": "Cancel",
"resetTor": "Reset",
"torStatus": "Tor Status",
"torVersion": "Tor Version",
"sendAnInvitation": "You sent an invitation for: ",
"contactSuggestion": "This is a contact suggestion for: ",
"rejected": "Rejected!",
"accepted": "Accepted!",
"chatHistoryDefault": "This conversation will be deleted when Cwtch is closed! Message history can be enabled per-conversation via the Settings menu in the upper right.",
"reallyLeaveThisGroupPrompt": "Are you sure you want to leave this conversation? All messages and attributes will be deleted.",
"inviteToGroup": "You have been invited to join a group:",
"successfullAddedContact": "Successfully added ",
"descriptionBlockUnknownConnections": "If turned on, this option will automatically close connections from Cwtch users that have not been added to your contact list.",
"descriptionExperimentsGroups": "The group experiment allows Cwtch to connect with untrusted server infrastructure to facilitate communication with more than one contact.",
"descriptionExperiments": "Cwtch experiments are optional, opt-in features that add additional functionality to Cwtch that may have different privacy considerations than traditional 1:1 metadata resistant chat e.g. group chat, bot integration etc.",
"tooltipUnlockProfiles": "Unlock encrypted profiles by entering their password.",
"tooltipAddContact": "Add a new contact or conversation",
"tooltipOpenSettings": "Open the settings pane",
"contactAlreadyExists": "Contact Already Exists",
"invalidImportString": "Invalid import string",
"conversationSettings": "Conversation Settings",
"enterCurrentPasswordForDelete": "Please enter current password to delete this profile.",
"enableGroups": "Enable Group Chat",
"addNewItem": "Add a new item to the list",
"addListItem": "Add a New List Item",
"newConnectionPaneTitle": "New Connection",
"networkStatusConnecting": "Connecting to network and contacts...",
"networkStatusAttemptingTor": "Attempting to connect to Tor network",
"networkStatusDisconnected": "Disconnected from the internet, check your connection",
"viewGroupMembershipTooltip": "View Group Membership",
"loadingTor": "Loading tor...",
"defaultScalingText": "Default size text (scale factor:",
"experimentsEnabled": "Enable Experiments",
"settingTheme": "Use Light Themes",
"blockUnknownLabel": "Block Unknown Contacts",
"zoomLabel": "Interface zoom (mostly affects text and button sizes)",
"error0ProfilesLoadedForPassword": "0 profiles loaded with that password",
"enterProfilePassword": "Enter a password to view your profiles",
"passwordChangeError": "Error changing password: Supplied password rejected",
"passwordErrorMatch": "Passwords do not match",
"yourDisplayName": "Your Display Name",
"noPasswordWarning": "Not using a password on this account means that all data stored locally will not be encrypted",
"profileName": "Display name",
"savePeerHistoryDescription": "Determines whether to delete any history associated with the contact.",
"displayNameLabel": "Display Name",
"copiedToClipboardNotification": "Copied to Clipboard",
"acceptGroupInviteLabel": "Do you want to accept the invitation to",
"peerOfflineMessage": "Contact is offline, messages can't be delivered right now",
"pendingLabel": "Pending",
"membershipDescription": "Below is a list of users who have sent messages to the group. This list may not reflect all users who have access to the group.",
"serverNotSynced": "Syncing New Messages (This can take some time)..."
}

367
lib/l10n/intl_nl.arb Normal file
View File

@ -0,0 +1,367 @@
{
"@@locale": "nl",
"@@last_modified": "2022-12-05T21:06:07+01:00",
"profileEnabledDescription": "Start or stop the profile",
"profileAutostartDescription": "Controls if the profile will be automatically launched on startup",
"profileEnabled": "Enable",
"profileAutostartLabel": "Autostart",
"localePtBr": "Braziliaans Portugees \/ Português do Brasil",
"acquiredTicketsFromServer": "Anti-spam uitdaging voltooid",
"acquiringTicketsFromServer": "Anti-spam uitdaging uitvoeren",
"acknowledgedLabel": "Erkend",
"descriptionFileSharing": "Het experiment met het delen van bestanden staat u toe om bestanden van Cwtch-contactpersonen en groepen te verzenden en te ontvangen. Merk op dat het delen van een bestand met een groep tot gevolg zal hebben dat leden van die groep direct via Cwtch verbinding met je maken om het bestand te downloaden.",
"descriptionExperimentsGroups": "Het groepsexperiment staat Cwtch toe verbinding te maken met onvertrouwde serverinfrastructuur om communicatie met meer dan één contact te vergemakkelijken.",
"notificationPolicyDefaultAll": "Standaard Alle",
"conversationNotificationPolicyOptIn": "Opt-In",
"settingAndroidPowerExemption": "Android negeer batterij-optimalisaties",
"experimentQRCodeDescription": "Ondersteuning voor QR-codes maakt het delen van gegevens (zoals profielidentiteit) via QR-codes mogelijk",
"tooltipSelectACustomProfileImage": "Selecteer een zelf ingestelde profielafbeelding",
"settingsAndroidPowerReenablePopup": "Batterijoptimalisatie kan niet opnieuw worden ingeschakeld vanuit Cwtch. Ga naar Android \/ Instellingen \/ Apps \/ Cwtch \/ Batterij en stel Gebruik in op 'Geoptimaliseerd'",
"settingAndroidPowerExemptionDescription": "Optioneel: Vraag Android om geen geoptimaliseerd energiebeheer te gebruiken voor Cwtch. Dit zal resulteren in een betere stabiliteit ten koste van meer batterijgebruik.",
"descriptionExperiments": "Cwtch-experimenten zijn optionele, Opt-In functies die extra functionaliteit toevoegen aan Cwtch die andere privacyoverwegingen kunnen hebben dan traditionele 1: 1 metadata-resistente chat, bijvoorbeeld groepschat, botintegratie enz.",
"plainProfileDescription": "We raden aan je Cwtch-profielen te beveiligen met een wachtwoord. Als je geen wachtwoord instelt op dit profiel heeft iedereen die toegang heeft tot dit apparaat mogelijk toegang tot informatie over dit profiel, inclusief gevoelige cryptografische sleutels.",
"plainServerDescription": "We raden aan je Cwtch-servers te beveiligen met een wachtwoord. Als je geen wachtwoord instelt op deze server heeft iedereen die toegang heeft tot dit apparaat mogelijk toegang tot informatie over deze server, inclusief gevoelige cryptografische sleutels.",
"descriptionStreamerMode": "Wanneer ingeschakeld, maakt deze optie de app visueel meer privé voor streaming of presentatie door bijvoorbeeld profiel- en contactadressen te verbergen",
"encryptedProfileDescription": "Het versleutelen van een profiel met een wachtwoord beschermt deze tegen andere mensen die dit apparaat kunnen gebruiken. Versleutelde profielen kunnen niet worden ontsleuteld, weergegeven of geopend totdat het juiste wachtwoord is ingevoerd om ze te ontgrendelen.",
"groupInviteSettingsWarning": "Je bent uitgenodigd om lid te worden van een groep! Schakel het Groepschat-experiment in Instellingen in om deze uitnodiging te bekijken.",
"descriptionBlockUnknownConnections": "Wanneer ingeschakeld, zal deze optie automatisch verbindingen sluiten van Cwtch gebruikers die niet aan je contactlijst zijn toegevoegd.",
"chatHistoryDefault": "Dit gesprek wordt verwijderd wanneer Cwtch wordt gesloten! Berichtgeschiedenis kan per gesprek worden ingeschakeld via het menu Instellingen rechtsboven.",
"encryptedServerDescription": "Het versleutelen van een server met een wachtwoord beschermt deze tegen andere mensen die dit apparaat kunnen gebruiken. Versleutelde servers kunnen niet worden ontsleuteld, weergegeven of geopend totdat het juiste wachtwoord is ingevoerd om ze te ontgrendelen.",
"settingImagePreviewsDescription": "Afbeeldingen en profielfoto's worden automatisch gedownload en voorvertongingen gemaakt. We raden u aan dit experiment niet in te schakelen als je Cwtch gebruikt met niet-vertrouwde contacten.",
"torSettingsEnabledCacheDescription": "Cache de huidige gedownloade Tor-consensus om deze de volgende keer dat Cwtch wordt geopend opnieuw te gebruiken. Hierdoor kan Tor sneller starten. Indien uitgeschakeld, zal Cwtch de gegevens in de cache opschonen bij het opstarten.",
"fileSharingSettingsDownloadFolderDescription": "Wanneer bestanden automatisch worden gedownload (bijv. afbeedingen, wanneer voorvertoningen van afbeeldingen zijn ingeschakeld), is een standaardlocatie nodig om de bestanden naar te downloaden.",
"torSettingsUseCustomTorServiceConfigurastionDescription": "Overschrijf de standaard tor-configuratie. Waarschuwing: dit kan gevaarlijk zijn. Zet dit alleen aan als je weet wat je doet.",
"torSettingsUseCustomTorServiceConfiguration": "Gebruik een zelf ingestelde Tor-serviceconfiguratie (torrc)",
"descriptionACNCircuitInfo": "Uitgebreide informatie over het pad dat het anonieme communicatienetwerk gebruikt om verbinding te maken met dit gesprek.",
"conversationNotificationPolicySettingDescription": "Meldingsgedrag voor dit gesprek beheren",
"notificationContentSimpleEvent": "Generieke melding",
"exportProfileTooltip": "Maak een back-up van dit profiel naar een versleuteld bestand. Het versleutelde bestand kan in een andere Cwtch-app worden geïmporteerd.",
"blockUnknownConnectionsEnabledDescription": "Verbindingen van onbekende contacten worden geblokkeerd. Je kunt dit wijzigen in Instellingen",
"messageEnableFileSharing": "Schakel het experiment voor het delen van bestanden in om dit bericht te bekijken.",
"serverAutostartDescription": "Bepaalt of de applicatie de server automatisch start bij het opstarten",
"serverDescriptionDescription": "Je beschrijving van de server alleen voor persoonlijk beheer, zal nooit worden gedeeld",
"membershipDescription": "Hieronder staat een lijst met gebruikers die berichten naar de groep hebben gestuurd. Deze lijst bevat mogelijk niet alle gebruikers die toegang hebben tot de groep.",
"defaultScalingText": "Standaardtekstgrootte (schaalfactor:",
"fileSharingSettingsDownloadFolderTooltip": "Bladeren om een andere standaardmap voor gedownloade bestanden te selecteren.",
"fileDownloadUnavailable": "Dit bestand lijkt niet beschikbaar om te downloaden. Het kan zijn dat de verzender downlaoden voor dit bestand heeft uitgeschakeld.",
"errorDownloadDirectoryDoesNotExist": "Bestanden delen kan niet worden ingeschakeld omdat de downloadmap niet is ingesteld of is ingesteld op een map die niet bestaat.",
"settingTheme": "Lichte thema's gebruiken",
"noPasswordWarning": "Het niet gebruiken van een wachtwoord voor dit account betekent dat alle lokaal opgeslagen gegevens niet worden versleuteld",
"savePeerHistoryDescription": "Bepaalt of geschiedenis gekoppeld aan de contactpersoon moet worden verwijderd.",
"dmTooltip": "Klik voor DM",
"debugLog": "Zet console debug logging aan",
"addContactFirst": "Voeg een contact toe of kies een contact om te beginnen met chatten.",
"experimentClickableLinksDescription": "Het klikbare links experiment maakt het mogelijk op URLs te klikken in berichten",
"enableExperimentClickableLinks": "Klikbare links inschakelen",
"groupsOnThisServerLabel": "Groepen waarin ik zit gehost op deze server",
"displayNameTooltip": "Voer een weergavenaam in",
"tooltipBackToMessageEditing": "Terug naar bericht bewerken",
"editServerTitle": "Server bewerken",
"editProfile": "Bewerk profiel",
"manageKnownServersButton": "Beheer bekende servers",
"manageKnownServersLong": "Beheer bekende servers",
"themeNameVampire": "Vampier",
"sendAnInvitation": "Je hebt een uitnodiging gestuurd voor: ",
"contactSuggestion": "Dit is een contactsuggestie voor: ",
"successfullAddedContact": "Succesvol toegevoegd ",
"saveProfileBtn": "Profiel opslaan",
"deleteProfileBtn": "Verwijder profiel",
"clickableLinksWarning": "Het openen van deze URL zal een toepassing buiten Cwtch opstarten en kan metadata onthullen of anderszins de beveiliging van Cwtch in gevaar brengen. Open alleen URL's van mensen die je vertrouwt. Weet je zeker dat je door wilt gaan?",
"clickableLinkError": "Fout opgetreden bij het openen van URL",
"thisFeatureRequiresGroupExpermientsToBeEnabled": "Voor deze functie moet het Groepen experiment zijn ingeschakeld in Instellingen",
"formattingExperiment": "Berichtopmaak",
"successfullyImportedProfile": "Profiel succesvol geïmporteerd: %profile",
"failedToImportProfile": "Fout bij importeren profiel",
"notificationContentContactInfo": "Gespreksinformatie",
"notificationPolicySettingLabel": "Beleid voor meldingen",
"conversationNotificationPolicySettingLabel": "Beleid voor gespreksmeldingen",
"notificationContentSettingDescription": "Regelt de inhoud van gespreksmeldingen",
"notificationPolicySettingDescription": "Regelt het standaard meldingsgedrag van de applicatie",
"notificationContentSettingLabel": "Inhoud van meldingen",
"notificationPolicyOptIn": "Opt In",
"torSettingsErrorSettingPort": "Poortnummer moet liggen tussen 1 en 65535",
"storageMigrationModalMessage": "Profielen migreren naar een nieuw opslagformaat. Dit kan een paar minuten duren...",
"settingImagePreviews": "Voorvertoningen van afbeeldingen en profielfoto's",
"settingUIColumnPortrait": "UI-kolommen in portret modus",
"settingUIColumnOptionSame": "Zelfde als portret modus instelling",
"settingUIColumnLandscape": "UI-kolommen in liggende modus",
"tooltipRemoveThisQuotedMessage": "Verwijder geciteerd bericht.",
"tooltipReplyToThisMessage": "Reageer op dit bericht",
"shutdownCwtchDialog": "Weet je zeker dat je Cwtch wilt afsluiten? Alle verbindingen en de applicatie worden gesloten.",
"malformedMessage": "Misvormd bericht",
"profileDeleteSuccess": "Profiel succesvol verwijderd",
"importProfileTooltip": "Gebruik een versleutelde Cwtch backup om een profiel binnen te halen dat in een andere instantie van Cwtch is aangemaakt.",
"unlockProfileTip": "Maak of ontgrendel een profiel om te beginnen!",
"unlockServerTip": "Maak of ontgrendel een server om te beginnen!",
"createProfileToBegin": "Maak of ontgrendel een profiel om te beginnen",
"addServerFirst": "Je moet een server toevoegen voordat je een groep kunt aanmaken",
"createProfileBtn": "Profiel aanmaken",
"tooltipUnlockProfiles": "Ontgrendel versleutelde profielen door hun wachtwoord in te voeren.",
"addNewItem": "Voeg een nieuw item toe aan de lijst",
"addListItem": "Een nieuw lijstitem toevoegen",
"peerOfflineMessage": "Contact is offline, berichten kunnen nu niet worden afgeleverd",
"acceptGroupInviteLabel": "Wil je de uitnodiging accepteren voor",
"profileOnionLabel": "Stuur dit adres naar contacten waarmee je in contact wilt komen",
"password2Label": "Wachtwoord opnieuw invoeren",
"nickChangeSuccess": "Profielnaam succesvol gewijzigd",
"inviteToGroup": "Je bent uitgenodigd om lid te worden van een groep:",
"messageFormattingDescription": "Rijke tekstopmaak in getoonde berichten inschakelen, bijv. **vetgedrukt** en *cursief*",
"labelACNCircuitInfo": "ACN circuitinfo",
"torSettingsCustomControlPortDescription": "Gebruik zelf ingestelde poort voor controleverbindingen naar de Tor proxy",
"torSettingsCustomControlPort": "Zelf ingestelde control port",
"torSettingsCustomSocksPortDescription": "Gebruik een zelf ingestelde poort voor dataverbindingen naar de Tor proxy",
"torSettingsCustomSocksPort": "Zelf ingesltelde SOCKS-poort",
"torSettingsEnabledAdvancedDescription": "Gebruik een bestaande Tor-service op je systeem of wijzig de parameters van de Cwtch Tor-service",
"torSettingsEnabledAdvanced": "Geavanceerde Tor-configuratie inschakelen",
"msgAddToAccept": "Voeg dit account toe aan je contacten om dit bestand te accepteren.",
"msgConfirmSend": "Weet je zeker dat je wilt verzenden",
"msgFileTooBig": "Bestanden mogen niet groter zijn dan 10 GB",
"settingDownloadFolder": "Map downloaden",
"importLocalServerSelectText": "Selecteer lokale server",
"importLocalServerLabel": "Lokaal gehoste server importeren",
"verfiyResumeButton": "Verifiëren\/hervatten",
"fileCheckingStatus": "Downloadstatus controleren",
"fileInterrupted": "Onderbroken",
"fileSavedTo": "Opgeslagen in",
"deleteServerConfirmBtn": "Server echt verwijderen",
"deleteServerSuccess": "Server succesvol verwijderd",
"enterCurrentPasswordForDeleteServer": "Voer huidige wachtwoord in om deze server te verwijderen",
"settingServersDescription": "Het servers hosten experiment maakt het mogelijk Cwtch-servers te hosten en te beheren",
"settingServers": "Servers hosten",
"enterServerPassword": "Voer wachtwoord in om server te ontgrendelen",
"serversManagerTitleLong": "Servers die je host",
"serverAutostartLabel": "Automatisch starten",
"serverEnabled": "Server ingeschakeld",
"messageFileOffered": "Contact biedt aan om je een bestand te sturen",
"contactGoto": "Ga naar gesprek met %1",
"tooltipOpenSettings": "Open het instellingenpaneel",
"titleManageProfiles": "Cwtch profielen beheren",
"passwordChangeError": "Fout bij wijzigen wachtwoord: opgegeven wachtwoord geweigerd",
"passwordErrorEmpty": "Wachtwoord mag niet leeg zijn",
"peerNotOnline": "Contact is offline. De toepassingen kunnen op dit moment niet worden gebruikt.",
"manageSharedFiles": "Gedeelde bestanden beheren",
"tooltipPreviewFormatting": "Voorbeeld van berichtopmaak bekijken",
"tooltipItalicize": "Cursief",
"okButton": "Oké",
"tooltipBoldText": "Vetgedrukt",
"shareProfileMenuTooltop": "Profiel delen via...",
"tooltipUnpinConversation": "Gesprek bovenaan 'Gesprekken' losmaken",
"tooltipPinConversation": "Gesprek bovenaan 'Gesprekken' vastprikken",
"replyingTo": "Reageren op %1",
"viewReplies": "Reacties op dit bericht bekijken",
"messageNoReplies": "Er zijn geen reacties op dit bericht.",
"stopSharingFile": "Stop delen bestand",
"restartFileShare": "Start delen bestand",
"shuttingDownApp": "Afsluiten...",
"importProfile": "Profiel importeren",
"exportProfile": "Profiel exporteren",
"localeDa": "Deens \/ Dansk",
"localeCy": "Welsh \/ Cymraeg",
"rejected": "Geweigerd!",
"tooltipRejectContactRequest": "Weiger dit contactverzoek",
"tooltipAcceptContactRequest": "Accepteer dit contactverzoek.",
"notificationNewMessageFromGroup": "Nieuw bericht in een groep!",
"notificationNewMessageFromPeer": "Nieuw bericht van een contact!",
"accepted": "Geaccepteerd!",
"reallyLeaveThisGroupPrompt": "Weet je zeker dat je dit gesprek wilt verlaten? Alle berichten en attributen worden verwijderd.",
"yesLeave": "Ja, verlaat dit gesprek",
"leaveConversation": "Verlaat dit gesprek",
"titleManageServers": "Servers beheren",
"invalidImportString": "Ongeldige import string",
"enterCurrentPasswordForDelete": "Voer huidige wachtwoord in om dit profiel te verwijderen.",
"enableGroups": "Groepschat inschakelen",
"networkStatusConnecting": "Verbinding maken met netwerk en contacten...",
"networkStatusAttemptingTor": "Proberen verbinding te maken met het Tor-netwerk",
"networkStatusDisconnected": "Verbinding met internet verbroken, controleer je verbinding",
"viewGroupMembershipTooltip": "Groepslidmaatschap weergeven",
"zoomLabel": "Interface zoom (beïnvloedt vooral de grootte van tekst en knoppen)",
"error0ProfilesLoadedForPassword": "0 profielen geladen met dat wachtwoord",
"enterProfilePassword": "Voer een wachtwoord in om je profielen te bekijken",
"addNewProfileBtn": "Nieuw profiel toevoegen",
"deleteProfileConfirmBtn": "Profiel echt verwijderen",
"deleteConfirmLabel": "Typ VERWIJDEREN om te bevestigen",
"couldNotSendMsgError": "Kan bericht niet verzenden",
"retrievingManifestMessage": "Bestandsinformatie ophalen...",
"streamerModeLabel": "Streamer-\/presentatiemodus",
"archiveConversation": "Archiveer dit gesprek",
"blockedMessageMessage": "Dit bericht is van een profiel dat je hebt geblokkeerd.",
"placeholderEnterMessage": "Type een bericht...",
"deleteProfileSuccess": "Profiel succesvol verwijderd",
"sendInvite": "Een contact- of groepsuitnodiging verzenden",
"sendMessage": "Bericht versturen",
"resetTor": "Resetten",
"tooltipAddContact": "Een nieuw contact of gesprek toevoegen",
"contactAlreadyExists": "Contact bestaat al",
"conversationSettings": "Gespreksinstellingen",
"settingFileSharing": "Bestanden delen",
"messageFileSent": "Je hebt een bestand verzonden",
"tooltipCode": "Code \/ Monospace",
"tooltipStrikethrough": "Doorhalen",
"tooltipSuperscript": "Superscript",
"tooltipSubscript": "Subscript",
"localeNl": "Nederlands \/ Dutch",
"pendingLabel": "In afwachting",
"builddate": "Gebouwd op: %2",
"versionTor": "Versie %1 met tor %2",
"blockUnknownLabel": "Blokkeer onbekende contacten",
"versionBuilddate": "Versie: %1 Gebouwd op: %2",
"defaultProfileName": "Alice",
"update": "Update",
"viewServerInfo": "Serverinfo",
"serverNotSynced": "Nieuwe berichten synchroniseren (dit kan even duren)...",
"serverConnectivityDisconnected": "Server verbinding verbroken",
"pasteAddressToAddContact": "Plak hier een cwtch adres, uitnodiging of sleutelbundel om een nieuw gesprek toe te voegen",
"todoPlaceholder": "Todo...",
"experimentsEnabled": "Experimenten inschakelen",
"settingInterfaceZoom": "Zoomniveau",
"yourDisplayName": "Jouw weergavenaam",
"profileName": "Weergavenaam",
"addProfileTitle": "Nieuw profiel toevoegen",
"editProfileTitle": "Bewerk profiel",
"copiedToClipboardNotification": "Gekopieerd naar klembord",
"puzzleGameBtn": "Puzzelspel",
"bulletinsBtn": "Bulletins",
"addListItemBtn": "Item toevoegen",
"searchList": "Zoeklijst",
"postNewBulletinLabel": "Nieuw bulletin plaatsen",
"newBulletinLabel": "Nieuw bulletin",
"joinGroupTab": "Lid worden van een groep",
"joinGroup": "Lid worden van groep",
"settingsGroupExperiments": "Experimenten",
"settingsGroupAppearance": "Uiterlijk",
"settingGroupBehaviour": "Gedrag",
"torSettingsEnableCache": "Cache Tor-consensus",
"serverTotalMessagesLabel": "Totaal aantal berichten",
"serverMetricsLabel": "Serverstatistieken",
"manageKnownServersShort": "Servers",
"newMessagesLabel": "Nieuwe berichten",
"localeRU": "Russisch \/ Русский",
"copyServerKeys": "Sleutels kopiëren",
"shutdownCwtchAction": "Cwtch afsluiten",
"shutdownCwtchTooltip": "Cwtch afsluiten",
"shutdownCwtchDialogTitle": "Cwtch afsluiten?",
"serverSynced": "Gesynchroniseerd",
"defaultGroupName": "Geweldige groep",
"shareMenuQRCode": "Toon QR-code",
"localeTr": "Turks \/ Türk",
"localeEl": "Grieks \/ Ελληνικά",
"localeNo": "Noors \/ Norsk",
"localeLb": "Luxemburgs \/ Lëtzebuergesch",
"localeRo": "Roemeens \/ Română",
"newMessageNotificationConversationInfo": "Nieuw bericht van %1",
"newMessageNotificationSimple": "Nieuw bericht",
"notificationPolicyMute": "Dempen",
"labelTorNetwork": "Tor netwerk",
"btnSendFile": "Bestand versturen",
"loadingCwtch": "Cwtch laden...",
"themeColorLabel": "Kleurenthema",
"themeNameNeon2": "Neon2",
"themeNameNeon1": "Neon1",
"themeNameMidnight": "Middernacht",
"themeNameMermaid": "Zeemeermin",
"themeNamePumpkin": "Pompoen",
"themeNameGhost": "Geest",
"themeNameWitch": "Heks",
"themeNameCwtch": "Cwtch",
"serverConnectionsLabel": "Verbinding",
"copyAddress": "Adres kopiëren",
"saveServerButton": "Server opslaan",
"serverEnabledDescription": "Start of stop de server",
"serverDescriptionLabel": "Server beschrijving",
"serverAddress": "Server adres",
"titleManageProfilesShort": "Profielen",
"tooltipSendFile": "Verstuur bestand",
"labelFilesize": "Grootte",
"labelFilename": "Bestandsnaam",
"openFolderButton": "Open map",
"torNetworkStatus": "Tor netwerk status",
"localeDe": "Duits \/ Deutsch",
"localePt": "Portugees \/ Portuguesa",
"localeFr": "Frans \/ Français",
"localeEn": "Engels \/ English",
"unlock": "Ontgrendelen",
"radioNoPassword": "Onversleuteld (Geen wachtwoord)",
"newProfile": "Nieuw profiel",
"inviteToGroupLabel": "Uitnodigen voor groep",
"newGroupBtn": "Nieuwe groep aanmaken",
"createGroupBtn": "Aanmaken",
"createGroupTitle": "Groep aanmaken",
"unblockBtn": "Contact deblokkeren",
"cancel": "Annuleren",
"serversManagerTitleShort": "Servers",
"showMessageButton": "Toon bericht",
"settingUIColumnDouble14Ratio": "Dubbel (1:4)",
"settingUIColumnDouble12Ratio": "Dubbel (1:2)",
"settingUIColumnSingle": "Enkel",
"localePl": "Pools \/ Polski",
"tooltipHidePassword": "Verberg wachtwoord",
"tooltipShowPassword": "Toon wachtwoord",
"torStatus": "Tor status",
"torVersion": "Tor versie",
"newPassword": "Nieuw wachtwoord",
"titleManageContacts": "Gesprekken",
"localeIt": "Italiaans \/ taliano",
"localeEs": "Spaans \/ Español",
"newConnectionPaneTitle": "Nieuwe verbinding",
"networkStatusOnline": "Online",
"loadingTor": "Tor laden...",
"smallTextLabel": "Klein",
"largeTextLabel": "Groot",
"settingLanguage": "Taal",
"yourServers": "Jouw servers",
"yourProfiles": "Jouw profielen",
"password": "Wachtwoord",
"passwordErrorMatch": "Wachtwoorden komen niet overeen",
"clickableLinksCopy": "Kopieer URL",
"clickableLinkOpen": "Open URL",
"addServerTooltip": "Nieuwe server toevoegen",
"addServerTitle": "Server toevoegen",
"importLocalServerButton": "Importeer %1",
"headingReplies": "Reacties",
"fieldDescriptionLabel": "Beschrijving",
"enableExperimentQRCode": "QR-codes",
"downloadFileButton": "Download",
"deleteConfirmText": "VERWIJDER",
"deleteBtn": "Verwijderen",
"cwtchSettingsTitle": "Cwtch instellingen",
"conversationNotificationPolicyNever": "Nooit",
"conversationNotificationPolicyDefault": "Standaard",
"addContactConfirm": "Contact %1 toevoegen",
"addContact": "Contact toevoegen",
"version": "Versie %1",
"themeDark": "Donker",
"themeLight": "Licht",
"currentPasswordLabel": "Huidig wachtwoord",
"password1Label": "Wachtwoord",
"radioUsePassword": "Wachtwoord",
"savePeerHistory": "Geschiedenis opslaan",
"dontSavePeerHistory": "Geschiedenis verwijderen",
"displayNameLabel": "Weergavenaam",
"rejectGroupBtn": "Weigeren",
"acceptGroupBtn": "Accepteren",
"copyBtn": "Kopieer",
"peerBlockedMessage": "Contact is geblokkeerd",
"blockBtn": "Blokkeer contact",
"saveBtn": "Opslaan",
"addressLabel": "Adres",
"listsBtn": "Lijsten",
"chatBtn": "Chat",
"inviteBtn": "Uitnodigen",
"groupNameLabel": "Groepsnaam",
"serverConnectivityConnected": "Server verbonden",
"serverInfo": "Server informatie",
"titlePlaceholder": "titel...",
"createGroup": "Groep aanmaken",
"createGroupTab": "Nieuwe groep",
"peerAddress": "Adres",
"peerName": "Naam",
"blocked": "Geblokkeerd",
"search": "Zoeken...",
"serverLabel": "Server",
"invitationLabel": "Uitnodiging",
"addPeer": "Contact toevoegen",
"groupAddr": "Adres",
"server": "Server",
"invitation": "Uitnodiging",
"addPeerTab": "Contact toevoegen"
}

367
lib/l10n/intl_no.arb Normal file
View File

@ -0,0 +1,367 @@
{
"@@locale": "no",
"@@last_modified": "2022-12-05T21:06:07+01:00",
"profileEnabledDescription": "Start or stop the profile",
"profileAutostartDescription": "Controls if the profile will be automatically launched on startup",
"profileEnabled": "Enable",
"profileAutostartLabel": "Autostart",
"localePtBr": "Brazilian Portuguese \/ Português do Brasil",
"localeNl": "Dutch \/ Dutch",
"experimentQRCodeDescription": "QR Code support allows sharing data (such as profile identity) by QR Codes",
"enableExperimentQRCode": "QR Codes",
"shareMenuQRCode": "Show QR Code",
"shareProfileMenuTooltop": "Share profile via...",
"acquiredTicketsFromServer": "Antispam Challenge Complete",
"acquiringTicketsFromServer": "Performing Antispam Challenge",
"errorDownloadDirectoryDoesNotExist": "Filesharing cannot be enabled because the Download Folder has not been set, or is set to a folder that does not exist.",
"localeTr": "Tyrkisk \/ Türk",
"localeIt": "Italiensk",
"localeEn": "Engelsk \/ English",
"localeFr": "Fransk \/ Français",
"tooltipUnpinConversation": "Unpin conversation from the top of \"Conversations\"",
"tooltipPinConversation": "Pin conversation to the top of \"Conversations\"",
"replyingTo": "Replying to %1",
"fileDownloadUnavailable": "This file appears unavailable for download. The sender may have disabled downloads for this file.",
"messageNoReplies": "There are no replies to this message.",
"headingReplies": "Replies",
"viewReplies": "View replies to this message",
"restartFileShare": "Start Sharing File",
"stopSharingFile": "Stop Sharing File",
"manageSharedFiles": "Manage Shared Files",
"localeDe": "Tysk \/ Deutsch",
"localeLb": "Luxemburgsk",
"localeNo": "Norsk",
"localeEl": "Gresk",
"localePl": "Polsk",
"localeRo": "Rumensk",
"localeRU": "Russisk",
"localeEs": "Spansk",
"localeDa": "Dansk",
"localePt": "Portugisisk",
"localeCy": "Walisisk",
"settingImagePreviewsDescription": "Bilder vil bli lastet ned og forhåndsvist automatisk. Merk at forhåndsvisning av bilder kan medføre en sikkerhetsrisiko og bør ikke tillates dersom du bruker Cwtch med kontakter du ikke stoler på. Profilbilder er planlagt for Cwtch 1.6.",
"tooltipPreviewFormatting": "Preview Message Formatting",
"tooltipCode": "Code \/ Monospace",
"tooltipStrikethrough": "Strikethrough",
"tooltipSubscript": "Subscript",
"tooltipSuperscript": "Superscript",
"tooltipItalicize": "Italic",
"tooltipBackToMessageEditing": "Back to Message Editing",
"tooltipBoldText": "Bold",
"okButton": "OK",
"settingsAndroidPowerReenablePopup": "Cannot re-enable Battery Optimization from within Cwtch. Please go to Android \/ Settings \/ Apps \/ Cwtch \/ Battery and set Usage to 'Optimized'",
"settingAndroidPowerExemptionDescription": "Optional: Request Android to exempt Cwtch from optimized power management. This will result in better stability at the cost of greater battery use.",
"settingAndroidPowerExemption": "Android Ignore Battery Optimizations",
"thisFeatureRequiresGroupExpermientsToBeEnabled": "This feature requires the Groups Experiment to be enabled in Settings",
"messageFormattingDescription": "Enable rich text formatting in displayed messages e.g. **bold** and *italic*",
"formattingExperiment": "Message Formatting",
"clickableLinkError": "Error encountered while attempting to open URL",
"clickableLinksCopy": "Copy URL",
"clickableLinkOpen": "Open URL",
"clickableLinksWarning": "Opening this URL will launch an application outside of Cwtch and may reveal metadata or otherwise compromise the security of Cwtch. Only open URLs from people you trust. Are you sure you want to continue?",
"shuttingDownApp": "Shutting down...",
"successfullyImportedProfile": "Successfully Imported Profile: %profile",
"failedToImportProfile": "Error Importing Profile",
"importProfileTooltip": "Use an encrypted Cwtch backup to bring in a profile created in another instance of Cwtch.",
"importProfile": "Import Profile",
"exportProfileTooltip": "Backup this profile to an encrypted file. The encrypted file can be imported into another Cwtch app.",
"exportProfile": "Export Profile",
"serverLabel": "Tjener",
"profileOnionLabel": "Del denne adressen med de du ønsker å kontakte",
"copiedToClipboardNotification": "Kopiert til utklippstavle",
"saveBtn": "Lagre",
"deleteBtn": "Slett",
"newMessageNotificationConversationInfo": "Ny melding fra %1",
"newMessageNotificationSimple": "Ny melding",
"notificationContentContactInfo": "Samtaleinformasjon",
"notificationContentSimpleEvent": "Vanlig hendelse",
"conversationNotificationPolicySettingDescription": "Sett meldingsoppførsel(notification) for denne samtalen",
"conversationNotificationPolicySettingLabel": "Conversation Notification Policy",
"settingsGroupExperiments": "Eksperimenter",
"settingsGroupAppearance": "Utseende",
"settingGroupBehaviour": "Oppførsel",
"notificationContentSettingDescription": "Styrer innholdet i samtalevarsler",
"notificationPolicySettingDescription": "Styrer standard applikasjonsvarsler",
"notificationContentSettingLabel": "Varselinnhold",
"notificationPolicySettingLabel": "Regler for varsel",
"conversationNotificationPolicyNever": "Aldri",
"conversationNotificationPolicyOptIn": "Meld inn",
"conversationNotificationPolicyDefault": "Standard",
"notificationPolicyDefaultAll": "Standard alle",
"notificationPolicyOptIn": "Meld inn",
"notificationPolicyMute": "Demp",
"tooltipSelectACustomProfileImage": "Tilpass profilbilde",
"torSettingsEnabledCacheDescription": "Lagre nåværende Tor-samtykke til neste gang Cwtch startes. Dette lar Tor starte raskere. Cwtch vil slette lagret data ved oppstart når opsjonen er deaktivert.",
"torSettingsEnableCache": "Lagre Tor-samtykke",
"labelTorNetwork": "Tor Nettverk",
"descriptionACNCircuitInfo": "Detaljert informasjon om den anonyme kommunikasjonsveien i bruk for denne samtalen.",
"labelACNCircuitInfo": "ACN Sti Info",
"fileSharingSettingsDownloadFolderTooltip": "Velg annen standardmappe for nedlastede filer.",
"fileSharingSettingsDownloadFolderDescription": "Når filer lastes ned automatisk (f.eks. bildefiler eller ved forhåndsvisning) må en standard nedlastningsmappe settes",
"torSettingsErrorSettingPort": "Portnummer må være mellom 1 og 65535",
"torSettingsUseCustomTorServiceConfigurastionDescription": "Overstyr standard tor konfigurasjon. Advarsel! Dette kan være farlig, ikke gjør dette med mindre du vet hva du driver med.",
"torSettingsUseCustomTorServiceConfiguration": "Velg egen Tor Service (torrc)",
"torSettingsCustomControlPortDescription": "Tilpass hvilken port kontrolltrafikk bruker mot tor proxy",
"torSettingsCustomControlPort": "Tilpass kontrollport",
"torSettingsCustomSocksPortDescription": "Tilpass hvilken port datatrafikk bruker mot tor proxy",
"torSettingsCustomSocksPort": "Tilpass SOCKS Port",
"torSettingsEnabledAdvancedDescription": "Bruk eksisterende tor tjeneste Use an existing Tor service on your system, or change the parameters of the Cwtch Tor Service",
"torSettingsEnabledAdvanced": "Aktiver Avanserte Tor opsjoner",
"msgAddToAccept": "Legg til denne kontoen i dine kontakter for å tillate filen.",
"btnSendFile": "Send fil",
"msgConfirmSend": "Er du sikker på at du vil sende",
"msgFileTooBig": "Filstørrelse kan ikke være større enn 10 GB",
"storageMigrationModalMessage": "Migrerer profiler til nytt lagringsformat. Dette kan ta noen minutter...",
"loadingCwtch": "Starter Cwtch...",
"themeColorLabel": "Fargetema",
"themeNameNeon2": "Neon2",
"themeNameNeon1": "Neon1",
"themeNameMidnight": "Midnatt",
"themeNameMermaid": "Havfrue",
"themeNamePumpkin": "Gresskar",
"themeNameGhost": "Spøkelse",
"themeNameVampire": "Vampyr",
"themeNameWitch": "Heks",
"themeNameCwtch": "Cwtch",
"settingDownloadFolder": "Nedlastningsmappe",
"settingImagePreviews": "Forhåndsvisning og profilbilder",
"experimentClickableLinksDescription": "Forsøket klikkbare lenker lar deg klikke på URLer i meldinger",
"enableExperimentClickableLinks": "Tillat klikkbare lenker",
"serverConnectionsLabel": "Tilkobling",
"serverTotalMessagesLabel": "Alle meldinger",
"serverMetricsLabel": "Tjenerstatistikk",
"manageKnownServersShort": "Tjenere",
"manageKnownServersLong": "Tilpass kjente tjenere",
"displayNameTooltip": "Oppgi visningsnavn",
"manageKnownServersButton": "Tilpass kjente tjenere",
"fieldDescriptionLabel": "Beskrivelse",
"groupsOnThisServerLabel": "Grupper jeg er vert for på denne tjeneren",
"importLocalServerButton": "Importér %1",
"importLocalServerSelectText": "Velg lokal tjener",
"importLocalServerLabel": "Importér en lokal tjener",
"newMessagesLabel": "Nye meldinger",
"copyServerKeys": "Kopiér nøkler",
"verfiyResumeButton": "Bekreft\/fortsett",
"fileCheckingStatus": "Tester nedlastningsstatus",
"fileInterrupted": "Avbrutt",
"fileSavedTo": "Lagret til",
"encryptedServerDescription": "Kryptering av en tjener med passord beskytter den mot andre som også bruker dette systemet. Krytperte tjenere må låses opp med det korrekte passordet før de kan dekrypteres, vises eller benyttes.",
"plainServerDescription": "Vi anbefaler at du beskyter Cwetch-tjenere med et passord. Dersom du ikke setter et passord for tjeneren så kan hvem som helst med tilgang til enheten få fult innsyn i informasjon om tjeneren, inklusive kryptonøkler.",
"deleteServerConfirmBtn": "Slette tjener",
"deleteServerSuccess": "Tjener slettet",
"enterCurrentPasswordForDeleteServer": "Oppgi passord for å slette tjener",
"copyAddress": "Kopiér adresse",
"settingServersDescription": "Forsøket tilby tjener tillater håndtering og vertskap av Cwtch tjenere",
"settingServers": "Tilby tjenere",
"enterServerPassword": "Oppgi passord for å låse opp tjener",
"unlockProfileTip": "Vennligst opprett eller lås opp en profil for å begynne!",
"unlockServerTip": "Vennlist opprett eller lås opp en tjener for å begynne!",
"addServerTooltip": "Legg til ny tjener",
"serversManagerTitleShort": "Tjenere",
"serversManagerTitleLong": "Tjenere tilbydd av deg",
"saveServerButton": "Lagre tjener",
"serverAutostartDescription": "Bestemmer om applikasjonen vil starte automatisk ved oppstart",
"serverAutostartLabel": "Automatisk oppstart",
"serverEnabledDescription": "Start eller stans tjeneren",
"serverEnabled": "Tjener aktivert",
"serverDescriptionDescription": "Beskrivelsen av tjeneren er kun for egen oversikt, den vil aldri bli delt",
"serverDescriptionLabel": "Tjenerbeskrivelse",
"serverAddress": "Tjeneradresse",
"editServerTitle": "Endre tjener",
"addServerTitle": "Legg til tjener",
"titleManageProfilesShort": "Profiler",
"descriptionFileSharing": "Fildelingsforsøket lar deg sende og motta filer fra Cwtch kontakter og grupper. Merk at deling av en fil med en gruppe vil la individuelle medlemmer av gruppen koble seg til deg direkte via Cwtch for å laste den ned.",
"settingFileSharing": "Fildeling",
"tooltipSendFile": "Send fil",
"messageFileOffered": "Kontakten ønsker å sende deg en fil",
"messageFileSent": "Du sendte en fil",
"messageEnableFileSharing": "Aktiver fildelingsforsøket for å se denne meldingen.",
"labelFilesize": "Størrelse",
"labelFilename": "Filnavn",
"downloadFileButton": "Last ned",
"openFolderButton": "Åpne mappe",
"retrievingManifestMessage": "Henter filinformasjon...",
"descriptionStreamerMode": "Gjør programmet mer visuelt privat ved å f.eks. gjemme profiler og kontaktadresser",
"streamerModeLabel": "Strømme-\/Presentasjonsmodus",
"archiveConversation": "Arkivér denne samtalen",
"blockUnknownConnectionsEnabledDescription": "Tilkoblinger fra ukjente kontakter er blokkert. Du kan endre dette under Innstillinger",
"showMessageButton": "Vis melding",
"blockedMessageMessage": "Denne meldingen er fra en profil du har blokkert.",
"placeholderEnterMessage": "Skriv en melding...",
"plainProfileDescription": "Vi anbefaler at du beskytter profilen din med et passord. Dersom du ikke velger et passord for denne profilen vil alle som har tilgang til enheten kunne få se informasjon om profilen inkludert kontakter, meldinger og sensitive kryptografiske nøkler.",
"encryptedProfileDescription": "Kryptering av en profil med et passord beskytter den fra andre personer som også bruker denne enheten. Krypterte profiler må låses opp med passord før de kan bli dekryptert, vist eller brukt.",
"addContactConfirm": "Legg til kontakten %1",
"addContact": "Legg til kontakt",
"contactGoto": "Gå til samtale med %1",
"settingUIColumnOptionSame": "Samme som portrettmodus",
"settingUIColumnDouble14Ratio": "Dobbel (1:4)",
"settingUIColumnDouble12Ratio": "Dobbel (1:2)",
"settingUIColumnSingle": "Enkel",
"settingUIColumnLandscape": "UI kolonner i landskapsmodus",
"settingUIColumnPortrait": "UI kolonner i portrettmodus",
"tooltipRemoveThisQuotedMessage": "Fjern sitert melding.",
"tooltipReplyToThisMessage": "Svar til denne meldingen",
"tooltipRejectContactRequest": "Avvis denne kontaktsforespørselen",
"tooltipAcceptContactRequest": "Tillat denne kontaktsforespørselen",
"notificationNewMessageFromGroup": "Ny melding i en gruppe!",
"notificationNewMessageFromPeer": "Ny melding fra en kontakt!",
"tooltipHidePassword": "Gjem passord",
"tooltipShowPassword": "Vis passord",
"groupInviteSettingsWarning": "Du har blitt invitert til en gruppe! Vennligst aktiver forsøket gruppesamtale for å se invitasjonen.",
"shutdownCwtchAction": "Steng ned Cwtch",
"shutdownCwtchDialog": "Er du sikker på at du ønsker å stenge ned Cwtch? Dette vil stenge alle koblinger og avslutte applikasjonen.",
"shutdownCwtchDialogTitle": "Steng ned Cwtch?",
"shutdownCwtchTooltip": "Steng ned Cwtch",
"malformedMessage": "Ugyldig melding",
"profileDeleteSuccess": "Profil slettet",
"debugLog": "Skru på debuglogging i konsoll",
"torNetworkStatus": "Tor nettverksstatus",
"addContactFirst": "Legg til eller velg en kontakt for å starte en samtale..",
"createProfileToBegin": "Vennligst opprett eller lås opp en profil for å begynne",
"nickChangeSuccess": "Profilnavn endret",
"addServerFirst": "Du må legge til en tjener før du kan opprette en gruppe",
"deleteProfileSuccess": "Profil slettet",
"sendInvite": "Send kontakt- eller gruppeinvitasjon",
"sendMessage": "Send melding",
"cancel": "Avbryt",
"resetTor": "Resett",
"torStatus": "Tor status",
"torVersion": "Tor versjon",
"sendAnInvitation": "Du sendte en invitasjon til: ",
"contactSuggestion": "Dette er et kontaktsforslag for: ",
"rejected": "Avvist!",
"accepted": "Akseptert!",
"chatHistoryDefault": "Denne samtalen vil bli slettet når Cwtch er avsluttet! Meldingshistorikk kan bli aktivert per samtale under menyen for instiller oppe til høyre.",
"newPassword": "Nytt passord",
"yesLeave": "Ja, forlat denne samtalen",
"reallyLeaveThisGroupPrompt": "Er du sikker på at du ønsker å forlate samtalen? Alle meldinger og egenskaper vil bli slettet.",
"leaveConversation": "Forlat denne samtalen",
"inviteToGroup": "Du har blitt invitert til å delta i en gruppe:",
"titleManageServers": "Håndter tjenere",
"successfullAddedContact": "Lagt til ",
"descriptionBlockUnknownConnections": "Hvis kativert vil dette valget automatisk lukke koblinger fra Cwtch brukere som ikke ligger i kontaktslisten din.",
"descriptionExperimentsGroups": "Gruppeforsøket lar deg kommunisere med mer enn en kontakt ved å tillate Cwtch å koble til tjenere du ikke stoler på.",
"descriptionExperiments": "Cwtch-forsøk er frivillige tilvalg som legger til ekstra funksjonalitet men som kan ha andre personvernshensyn enn vanlige 1:1 metadata-resistente samtaler, slik som gruppesamtaler, botintegrasjon m.v.",
"titleManageProfiles": "Håndter Cwtch profiler",
"tooltipUnlockProfiles": "Lås opp krypterte profiler ved å oppgi tilhørende passord.",
"titleManageContacts": "Samtaler",
"tooltipAddContact": "Legg til en ny kontakt eller samtale",
"tooltipOpenSettings": "Åpne innstillinger",
"contactAlreadyExists": "Kontakten eksisterer allerede",
"invalidImportString": "Ugyldig importstreng",
"conversationSettings": "Samtaleinnstillinger",
"enterCurrentPasswordForDelete": "Vennligst oppgi tilhørende passord for å slette denne profilen.",
"enableGroups": "Aktiver gruppesamtaler",
"todoPlaceholder": "Gjøremål...",
"addNewItem": "Legg til nyt lelement til listen",
"addListItem": "Legg til nytt listeelement",
"newConnectionPaneTitle": "Ny kobling",
"networkStatusOnline": "Online",
"networkStatusConnecting": "Kobler til nettverk og kontakter...",
"networkStatusAttemptingTor": "Forsøker å koble til Tornettverket",
"networkStatusDisconnected": "Koblet fra Internet, sjekk tilkoblingen",
"viewGroupMembershipTooltip": "Vis gruppemedlemskap",
"loadingTor": "Laster tor...",
"smallTextLabel": "Liten",
"defaultScalingText": "Standard tekststørrelse (skaleringsfaktor:",
"builddate": "Bygget på: %2",
"version": "Versjon %1",
"versionTor": "Versjon %1 med tor %2",
"experimentsEnabled": "Aktiver forsøk",
"themeDark": "Mørk",
"themeLight": "Lys",
"settingTheme": "Velg lyst tema",
"largeTextLabel": "Stor",
"settingInterfaceZoom": "Zoomnivå",
"settingLanguage": "Språk",
"blockUnknownLabel": "Blokkér ukjente kontakter",
"zoomLabel": "Grensesnittsforstørrelse (påvirker tekst og knappestørrelse)",
"versionBuilddate": "Versjon: %1 Bygget på: %2",
"cwtchSettingsTitle": "Cwtchinnstillinger",
"unlock": "Lås opp",
"yourServers": "Dine tjenere",
"yourProfiles": "Dine profiler",
"error0ProfilesLoadedForPassword": "0 profiler lasted med det passordet",
"password": "Passord",
"enterProfilePassword": "Oppgi passord for å vise dine profiler",
"addNewProfileBtn": "Legg til ny profil",
"deleteConfirmText": "SLETT",
"deleteProfileConfirmBtn": "Virkelig slette profil",
"deleteConfirmLabel": "Skriv SLETT for å bekrefte",
"deleteProfileBtn": "Slett Profil",
"passwordChangeError": "Passordbyttefeil: Passord avvist",
"passwordErrorMatch": "Passordene er ikke like",
"saveProfileBtn": "Lagre profil",
"createProfileBtn": "Opprett profil",
"passwordErrorEmpty": "Passord kan ikke være tomt",
"password2Label": "Gjenta passord",
"password1Label": "Passord",
"currentPasswordLabel": "Nåværende passord",
"yourDisplayName": "Ditt visningsnavn",
"noPasswordWarning": "Ved å ikke bruke passord for denne kontoen vil all data lagret lokalt lagres åpent",
"radioNoPassword": "Ikke kryptert (ikke passord)",
"radioUsePassword": "Passord",
"editProfile": "Endre profil",
"newProfile": "Ny profil",
"defaultProfileName": "Alice",
"profileName": "Visningsnavn",
"editProfileTitle": "Endre profil",
"addProfileTitle": "Legg til ny profil",
"unblockBtn": "Fjern blokkering",
"dontSavePeerHistory": "Slett historien",
"savePeerHistoryDescription": "Avgjør om historie for denne kontakten skal slettes",
"savePeerHistory": "Lagre historien",
"blockBtn": "Blokkér kontatk",
"displayNameLabel": "Visningsnavn",
"addressLabel": "Adresse",
"puzzleGameBtn": "Puslespill",
"bulletinsBtn": "Oppslag",
"listsBtn": "Lister",
"chatBtn": "Samtale",
"rejectGroupBtn": "Avvis",
"acceptGroupBtn": "Godta",
"acceptGroupInviteLabel": "Ønsker du å godta invitasjonen til",
"newGroupBtn": "Lag ny gruppe",
"copyBtn": "Kopiér",
"peerOfflineMessage": "Kontakten har logget av, meldigner kan ikke leveres akkurat nå",
"peerBlockedMessage": "Kontakten er blokkert",
"pendingLabel": "Venter",
"acknowledgedLabel": "Bekreftet",
"couldNotSendMsgError": "Kunne ikke sende meldingen",
"dmTooltip": "Klikk for DM",
"membershipDescription": "Under er en liste over brukere som har sendt meldinger til gruppen. Listen viser ikke nødvendigvis alle som har tilgang til gruppen.",
"addListItemBtn": "Legg til",
"peerNotOnline": "Kontakten har logget av. Programmet kan ikke benyttes akkurat nå.",
"searchList": "Søk",
"update": "Oppdater",
"inviteBtn": "Inviter",
"inviteToGroupLabel": "Inviter til gruppe",
"groupNameLabel": "Gruppename",
"viewServerInfo": "Tjenerinformasjon",
"serverNotSynced": "Henter nye meldinger (dette kan ta litt tid)...",
"serverSynced": "Oppdatert",
"serverConnectivityDisconnected": "Tjener frakoblet",
"serverConnectivityConnected": "Tjener tilkoblet",
"serverInfo": "Tjenrinformasjon",
"invitationLabel": "Invitasjon",
"search": "Søker...",
"blocked": "Blokkert",
"pasteAddressToAddContact": "Lim inn en cwtch adresse, invitasjon eller nøkkel for å starte en ny samtale",
"titlePlaceholder": "tittel...",
"postNewBulletinLabel": "Send nytt oppslag",
"newBulletinLabel": "Nytt oppslag",
"joinGroup": "Bli med i gruppe",
"createGroup": "Opprett gruppe",
"addPeer": "Legg til kontakt",
"groupAddr": "Adresse",
"invitation": "Invitasjon",
"server": "Tjener",
"peerName": "Navn",
"peerAddress": "Adresse",
"joinGroupTab": "Bli med i gruppe",
"createGroupTab": "Oprrett gruppe",
"addPeerTab": "Legg til en kontakt",
"createGroupBtn": "Opprett",
"defaultGroupName": "Fantastisk gruppe",
"createGroupTitle": "Opprett gruppe"
}

View File

@ -1,48 +1,125 @@
{
"@@locale": "pl",
"@@last_modified": "2022-02-08T20:13:50+01:00",
"newMessageNotificationConversationInfo": "New Message From %1",
"newMessageNotificationSimple": "New Message",
"notificationContentContactInfo": "Conversation Information",
"notificationContentSimpleEvent": "Plain Event",
"conversationNotificationPolicySettingDescription": "Control this conversation's notification behaviour",
"conversationNotificationPolicySettingLabel": "Conversation Notification Policy",
"settingsGroupExperiments": "Experiments",
"settingsGroupAppearance": "Appearance",
"settingGroupBehaviour": "Behaviour",
"notificationContentSettingDescription": "Controls the contents of conversation notifications",
"notificationPolicySettingDescription": "Controls the default application notification behaviour",
"notificationContentSettingLabel": "Notification Content",
"notificationPolicySettingLabel": "Notification Policy",
"conversationNotificationPolicyNever": "Never",
"conversationNotificationPolicyOptIn": "Opt In",
"conversationNotificationPolicyDefault": "Default",
"notificationPolicyDefaultAll": "Default All",
"notificationPolicyOptIn": "Opt In",
"notificationPolicyMute": "Mute",
"tooltipSelectACustomProfileImage": "Select a Custom Profile Image",
"torSettingsEnabledCacheDescription": "Cache the current downloaded Tor consensus to reuse next time Cwtch is opened. This will allow Tor to start faster. When disabled, Cwtch will purge cached data on start up.",
"torSettingsEnableCache": "Cache Tor Consensus",
"labelTorNetwork": "Tor Network",
"descriptionACNCircuitInfo": "In depth information about the path that the anonymous communication network is using to connect to this conversation.",
"labelACNCircuitInfo": "ACN Circuit Info",
"fileSharingSettingsDownloadFolderTooltip": "Browse to select a different default folder for downloaded files.",
"fileSharingSettingsDownloadFolderDescription": "When files are downloaded automatically (e.g. image files, when image previews are enabled) a default location to download the files to is needed.",
"torSettingsErrorSettingPort": "Port Number must be between 1 and 65535",
"torSettingsUseCustomTorServiceConfigurastionDescription": "Override the default tor configuration. Warning: This could be dangerous. Only turn this on if you know what you are doing.",
"torSettingsUseCustomTorServiceConfiguration": "Use a Custom Tor Service Configuration (torrc)",
"torSettingsCustomControlPortDescription": "Use a custom port for control connections to the Tor proxy",
"torSettingsCustomControlPort": "Custom Control Port",
"torSettingsCustomSocksPortDescription": "Use a custom port for data connections to the Tor proxy",
"torSettingsCustomSocksPort": "Custom SOCKS Port",
"torSettingsEnabledAdvancedDescription": "Use an existing Tor service on your system, or change the parameters of the Cwtch Tor Service",
"torSettingsEnabledAdvanced": "Enable Advanced Tor Configuration",
"@@last_modified": "2022-12-05T21:06:07+01:00",
"profileEnabledDescription": "Start or stop the profile",
"profileAutostartDescription": "Controls if the profile will be automatically launched on startup",
"profileEnabled": "Enable",
"profileAutostartLabel": "Autostart",
"localePtBr": "Brazilian Portuguese \/ Português do Brasil",
"localeNl": "Dutch \/ Dutch",
"experimentQRCodeDescription": "QR Code support allows sharing data (such as profile identity) by QR Codes",
"enableExperimentQRCode": "QR Codes",
"shareMenuQRCode": "Show QR Code",
"shareProfileMenuTooltop": "Share profile via...",
"acquiredTicketsFromServer": "Antispam Challenge Complete",
"acquiringTicketsFromServer": "Performing Antispam Challenge",
"errorDownloadDirectoryDoesNotExist": "Filesharing cannot be enabled because the Download Folder has not been set, or is set to a folder that does not exist.",
"localeTr": "Turecki \/ Türk",
"localeIt": "Włoski \/ Italiano",
"localeEn": "Angielski \/ English",
"tooltipUnpinConversation": "Unpin conversation from the top of \"Conversations\"",
"tooltipPinConversation": "Pin conversation to the top of \"Conversations\"",
"replyingTo": "Replying to %1",
"fileDownloadUnavailable": "This file appears unavailable for download. The sender may have disabled downloads for this file.",
"messageNoReplies": "There are no replies to this message.",
"headingReplies": "Replies",
"viewReplies": "View replies to this message",
"restartFileShare": "Start Sharing File",
"stopSharingFile": "Stop Sharing File",
"manageSharedFiles": "Manage Shared Files",
"localeDe": "Niemiecki \/ Deutsch",
"serverLabel": "Server",
"deleteBtn": "Usuń",
"saveBtn": "Zapisz",
"editProfile": "Edytuj profil",
"tooltipSubscript": "Indeks",
"tooltipBackToMessageEditing": "Powrót do edycji wiadomości",
"tooltipPreviewFormatting": "Podgląd Formatowanie wiadomości",
"tooltipBoldText": "Pogrubiona",
"tooltipItalicize": "Kursywa",
"profileOnionLabel": "Przekaż ten adres osobom, z którymi chcesz nawiązać kontakt",
"tooltipSuperscript": "Superskrypt",
"tooltipCode": "Kod \/ Monospace",
"settingImagePreviewsDescription": "Obrazy i zdjęcia profilowe będą pobierane i przeglądane automatycznie. Zalecamy, aby nie włączać tego eksperymentu, jeśli używasz Cwtch z niezaufanymi kontaktami.",
"localeNo": "Norweski \/ Norsk",
"localePt": "Portugalski \/ Portuguesa",
"settingTheme": "Użyj motywów świetlnych",
"localePl": "Polski \/ Polski",
"localeFr": "Francuski \/ Français",
"localeDa": "Duński \/ Dansk",
"localeCy": "Walijski \/ Cymraeg",
"tooltipStrikethrough": "Przekreślenie",
"localeLb": "Luksemburski \/ Lëtzebuergesch",
"localeEl": "Grecki \/ Ελληνικά",
"localeRo": "Rumuński \/ Română",
"localeEs": "Hiszpański \/ Español",
"localeRU": "Rosyjski \/ Русский",
"okButton": "OK",
"settingsAndroidPowerReenablePopup": "Nie udało się ponownie włączyć optymalizacji użycia baterii dla Cwtch. Przejdź do Android \/ Ustawienia \/ Aplikacje \/ Cwtch \/ Bateria i ustaw Zużycie na 'Optymalizacja'",
"settingAndroidPowerExemptionDescription": "Opcjonalne: wyłącz optymalizację użycia baterii przez Cwtch w systemie Android. Będzie to skutkować lepszą stabilnością w zamian za wyższy pobór energii",
"settingAndroidPowerExemption": "Ignoruj optymalizację użycia baterii przez Cwtch (Android)",
"thisFeatureRequiresGroupExpermientsToBeEnabled": "Ta funkcja wymaga włączenia w Ustawieniach funkcji eksperymentalnej: Grupy",
"messageFormattingDescription": "Włącz formatowanie tekstu w wyświetlanych wiadomościach, np. **pogrubiony** and *kursywa*",
"formattingExperiment": "Formatowanie wiadomości",
"clickableLinkError": "Nie udało się otworzyć linku",
"clickableLinksCopy": "Kopiuj link",
"clickableLinkOpen": "Otwórz link",
"clickableLinksWarning": "Otwarcie tego linku spowoduje uruchomienie aplikacji poza Cwtch i może ujawnić metadane lub w inny sposób obniżyć bezpieczeństwo Cwtch. Otwieraj tylko linki otrzymane od zaufanych osób. Czy na pewno chcesz kontynuować? ",
"shuttingDownApp": "Zamykanie...",
"successfullyImportedProfile": "Pomyślnie zaimportowano profil: %profile",
"failedToImportProfile": "Importowanie profilu nie powiodło się",
"importProfileTooltip": "Użyj zaszyfrowanej kopii zapasowej Cwtch aby zaimportować profil utworzony w Cwtch na innym urządzeniu.",
"importProfile": "Importuj profil",
"exportProfileTooltip": "Utwórz zaszyfrowany plik z kopią zapasową tego profilu. Zaszyfrowany plik można zaimportować do Cwtch na innym urządzeniu.",
"exportProfile": "Eksportuj profil",
"newMessageNotificationConversationInfo": "Nowa wiadomość od %1",
"newMessageNotificationSimple": "Nowa wiadomość",
"notificationContentContactInfo": "Informacje o konwersacji",
"notificationContentSimpleEvent": "Bez zawartości",
"conversationNotificationPolicySettingDescription": "Zmień zachowanie powiadomień dla tej konwersacji",
"conversationNotificationPolicySettingLabel": "Wyświetlanie powiadomień dla tej konwersacji",
"settingsGroupExperiments": "Funkcje eksperymentalne",
"settingsGroupAppearance": "Wygląd",
"settingGroupBehaviour": "Zachowanie",
"notificationContentSettingDescription": "Zmienia zawartość powiadomień dla konwersacji",
"notificationPolicySettingDescription": "Zarządza domyślnymi ustawieniami wyświetlania powiadomień",
"notificationContentSettingLabel": "Zawartość powiadomień",
"notificationPolicySettingLabel": "Wyświetlanie powiadomień",
"conversationNotificationPolicyNever": "Nie",
"conversationNotificationPolicyOptIn": "Tak",
"conversationNotificationPolicyDefault": "Domyślne",
"notificationPolicyDefaultAll": "Dla wszystkich konwersacji (domyślne)",
"notificationPolicyOptIn": "Tylko dla wybranych konwersacji",
"notificationPolicyMute": "Wycisz",
"tooltipSelectACustomProfileImage": "Ustaw zdjęcie profilowe",
"torSettingsEnabledCacheDescription": "Zapamiętaj obecny konsensus Tor, aby użyć go przy następnym uruchomieniu Cwtch. Dzięki temu Tor uruchomi się szybciej. Jeśli opcja jest wyłączona, Cwtch usuwa zapisany konsensus przy uruchomieniu.",
"torSettingsEnableCache": "Zapamiętaj konsensus Tor",
"labelTorNetwork": "Sieć Tor",
"descriptionACNCircuitInfo": "Szczegółowe informacje na temat trasy wykorzystywanej przez anonimową sieć komunikacji, aby połączyć się z tą konwersacją.",
"labelACNCircuitInfo": "Informacje o trasie ACN",
"fileSharingSettingsDownloadFolderTooltip": "Przeglądaj, aby wybrać inny folder dla pobranych plików.",
"fileSharingSettingsDownloadFolderDescription": "Kiedy pliki są pobierane automatycznie (np. zdjęcia, kiedy opcja podglądu jest włączona), potrzebny jest folder dla pobranych plików.",
"torSettingsErrorSettingPort": "Numer portu musi być między 1 a 65535",
"torSettingsUseCustomTorServiceConfigurastionDescription": "Nadpisz domyślną konfigurację Tor. Uwaga: To może być niebezpieczne. Włącz tę funkcję tylko jeśli wiesz, co robisz.",
"torSettingsUseCustomTorServiceConfiguration": "Użyj niestandardowej konfiguracji Tor (torrc)",
"torSettingsCustomControlPortDescription": "Wybierz port dla połączeń kontrolnych z Tor proxy",
"torSettingsCustomControlPort": "Port kontrolny",
"torSettingsCustomSocksPortDescription": "Wybierz port dla połączeń przekazujących dane do Tor proxy",
"torSettingsCustomSocksPort": "Port SOCKS",
"torSettingsEnabledAdvancedDescription": "Użyj obecnego na twoim systemie serwisu Tor lub zmień parametry serwisu Tor w Cwtch",
"torSettingsEnabledAdvanced": "Włącz zaawansowaną konfigurację Tor",
"archiveConversation": "Zarchiwizuj tę konwersację",
"groupInviteSettingsWarning": "Zaproszono Cię do grupy! Aby wyświetlić to zaproszenie, włącz Grupy (eksperymentalne) w Ustawieniach",
"descriptionExperimentsGroups": "Grupy (eksperymentalne) łączą się z niezaufanymi serwerami, aby umożliwić komunikację grupową.",
"descriptionExperiments": "Funkcje eksperymentalne są opcjonalne. Dodają one funkcjonalności, które mogą być mniej prywatne niż domyślne konwersacje 1:1, np. Grupy, integracja z botami, itp.",
"invalidImportString": "Niepoprawny ciąg importu",
"enableGroups": "Włącz Grupy",
"todoPlaceholder": "Do zrobienia...",
"copiedToClipboardNotification": "Skopiowano do schowka",
"searchList": "Lista wyszukiwania",
"deleteConfirmLabel": "Wpisz USUŃ aby potwierdzić",
"largeTextLabel": "Duży",
"settingInterfaceZoom": "Przybliżenie",
"localeDe": "Deutsche",
"localePt": "Portuguesa",
"localeFr": "Frances",
"localeEn": "English",
"settingLanguage": "Język",
"blockUnknownLabel": "Blokuj nieznajomych",
"zoomLabel": "Przybliżenie interfejsu (wpływa głównie na rozmiar tekstu i przycisków)",
@ -57,7 +134,6 @@
"addNewProfileBtn": "Dodaj",
"deleteConfirmText": "USUŃ",
"deleteProfileConfirmBtn": "Usuń",
"deleteConfirmLabel": "Wpisz USUŃ aby potwierdzić",
"deleteProfileBtn": "Usuń profil",
"passwordChangeError": "Zmiana hasła nie powiodła się: hasło niepoprawne",
"passwordErrorMatch": "Hasła nie są identyczne",
@ -68,24 +144,19 @@
"password1Label": "Hasło",
"currentPasswordLabel": "Obecne hasło",
"yourDisplayName": "Nazwa",
"profileOnionLabel": "Send this address to contacts you want to connect with",
"noPasswordWarning": "Brak hasła do konta oznacza, że dane przechowywane na tym urządzeniu nie będą zaszyfrowane",
"radioNoPassword": "Niezaszyfrowany (brak hasła)",
"radioUsePassword": "Hasło",
"copiedToClipboardNotification": "Copied to Clipboard",
"editProfile": "Edytuj profil",
"newProfile": "Nowy profil",
"defaultProfileName": "Nowy profil",
"profileName": "Nazwa",
"editProfileTitle": "Edytuj profil",
"addProfileTitle": "Dodaj nowy profil",
"deleteBtn": "Delete",
"unblockBtn": "Odblokuj",
"dontSavePeerHistory": "Nie",
"savePeerHistoryDescription": "Zapisywanie wiadomości",
"savePeerHistory": "Tak",
"blockBtn": "Zablokuj",
"saveBtn": "Save",
"displayNameLabel": "Nazwa",
"addressLabel": "Adresy",
"puzzleGameBtn": "Puzzle",
@ -96,7 +167,6 @@
"acceptGroupBtn": "Akceptuj",
"acceptGroupInviteLabel": "Czy chcesz zaakceptować zaproszenie do grupy",
"newGroupBtn": "Utwórz nową grupę",
"copiedClipboardNotification": "Skopiowano do schowka",
"copyBtn": "Kopiuj",
"peerOfflineMessage": "Znajomy jest niedostępny, nie można dostarczyć wiadomości",
"peerBlockedMessage": "Użytkownik jest zablokowany",
@ -107,11 +177,10 @@
"membershipDescription": "Lista użytkowników, którzy wysyłali wiadomości w tej grupie. Członkowie grupy, którzy nie wysyłali żadnych wiadomości nie są na tej liście.",
"addListItemBtn": "Dodaj",
"peerNotOnline": "Znajomy jest niedostępny. Nie można użyć aplikacji.",
"searchList": "Search List",
"update": "Zaktualizuj",
"inviteBtn": "Zaproś",
"inviteToGroupLabel": "Zaproś do grupy",
"groupNameLabel": "Group name",
"groupNameLabel": "Nazwa grupy",
"viewServerInfo": "Informacje o serwerze",
"serverNotSynced": "Synchronizacja wiadomości (to może chwilę potrwać)...",
"serverSynced": "Zsynchronizowano",
@ -119,14 +188,7 @@
"serverConnectivityConnected": "Połączono z serwerem",
"serverInfo": "Informacje o serwerze",
"invitationLabel": "Zaproszenie",
"serverLabel": "Server",
"search": "Szukaj...",
"cycleColoursDesktop": "Click to cycle colours.\nRight-click to reset.",
"cycleColoursAndroid": "Click to cycle colours.\nLong-press to reset.",
"cycleMorphsDesktop": "Click to cycle morphs.\nRight-click to reset.",
"cycleMorphsAndroid": "Click to cycle morphs.\nLong-press to reset.",
"cycleCatsDesktop": "Click to cycle category.\nRight-click to reset.",
"cycleCatsAndroid": "Click to cycle category.\nLong-press to reset.",
"blocked": "Zablokowany",
"pasteAddressToAddContact": "Wklej adres Cwtch znajomego, zaproszenie do grupy albo pęk kluczy",
"titlePlaceholder": "Tytuł...",
@ -138,7 +200,6 @@
"groupAddr": "Adres",
"invitation": "Zaproszenie",
"server": "Serwer",
"groupName": "Nazwa grupy",
"peerName": "Nazwa",
"peerAddress": "Adres",
"joinGroupTab": "Dołącz do grupy",
@ -164,7 +225,6 @@
"themeNameWitch": "Czarownica",
"themeNameCwtch": "Cwtch",
"settingDownloadFolder": "Folder dla pobranych plików",
"settingImagePreviewsDescription": "Automatyczne pobieranie i podgląd obrazów. Pamiętaj, że podgląd obrazów jest potencjalną luką w zabezpieczeniach i nie należy używać tej eksperymentalnej funkcjonalności jeśli używasz Cwtch do komunikacji z niezaufanymi osobami. Zdjęcia profilowe są przewidziane na wersję Cwtch 1.6",
"settingImagePreviews": "Podgląd zdjęć i zdjęcia profilowe",
"experimentClickableLinksDescription": "Klikalne linki (eksperymentalne). Umożliwia klikanie na linki w wiadomościach, aby je otworzyć",
"enableExperimentClickableLinks": "Włącz klikalne linki",
@ -210,7 +270,6 @@
"tooltipRejectContactRequest": "Odrzuć zaproszenie do znajomych",
"tooltipAcceptContactRequest": "Akceptuj zaproszenie do znajomych",
"notificationNewMessageFromPeer": "Nowa wiadomość od znajomego!",
"groupInviteSettingsWarning": "Zaproszono Cię do grupy! Aby wyświetlić to zaproszenie, włącz Czaty Grupowe (eksperymentalne) w Ustawieniach",
"shutdownCwtchDialog": "Zamknąć Cwtch? Wszystkie połączenia zostaną zakończone, a aplikacja zostanie zamknięta.",
"malformedMessage": "Wiadomość uszkodzona",
"profileDeleteSuccess": "Profil został usunięty",
@ -231,28 +290,16 @@
"reallyLeaveThisGroupPrompt": "Na pewno chcesz opuścić tę grupę? Wszystkie wiadomości i atrybuty zostaną usunięte.",
"leaveConversation": "Opuść grupę",
"inviteToGroup": "Zaproszono Cię do grupy:",
"dateNever": "Nigdy",
"dateLastYear": "Rok temu",
"dateYesterday": "Wczoraj",
"dateLastMonth": "Miesiąc temu",
"dateRightNow": "Teraz",
"successfullAddedContact": "Dodano znajomego ",
"descriptionBlockUnknownConnections": "Blokowanie połączeń od osób, które nie są na liście Twoich znajomych.",
"descriptionExperimentsGroups": "Czaty grupowe (eksperymentalne) łączą się z niezaufanymi serwerami, aby umożliwić komunikację grupową.",
"descriptionExperiments": "Funkcje eksperymentalne są opcjonalne. Dodają one funkcjonalności, które mogą być mniej prywatne niż domyślne konwersacje 1:1, np. czaty grupowe, integracja z botami, itp.",
"titleManageProfiles": "Zarządzaj Profilami",
"tooltipUnlockProfiles": "Wprowadź hasło, aby odblokować zaszyfrowane profile.",
"titleManageContacts": "Konwersacje",
"tooltipAddContact": "Dodaj znajomego lub grupę",
"tooltipOpenSettings": "Ustawienia",
"contactAlreadyExists": "Ten znajomy już istnieje",
"invalidImportString": "Invalid import string",
"conversationSettings": "Ustawienia konwersacji",
"enterCurrentPasswordForDelete": "Aby usunąć ten profil, wprowadź hasło.",
"enableGroups": "Włącz czaty grupowe",
"localeIt": "Italiana",
"localeEs": "Espanol",
"todoPlaceholder": "Do zdobienia...",
"addNewItem": "Dodaj do listy",
"addListItem": "Add a New List Item",
"newConnectionPaneTitle": "Nowe połączenie",
@ -270,7 +317,6 @@
"experimentsEnabled": "Włącz funkcje eksperymentalne",
"themeDark": "Ciemny",
"themeLight": "Jasny",
"settingTheme": "Motyw",
"titleManageServers": "Zarządzaj serwerami",
"newPassword": "Nowe hasło",
"torVersion": "Wersja Tor",
@ -305,13 +351,10 @@
"enterServerPassword": "Wprowadź hasło, aby odblokować serwer",
"enterCurrentPasswordForDeleteServer": "Wprowadź aktualne hasło, aby usunąć ten serwer",
"newMessagesLabel": "Nowe wiadomości",
"localePl": "Polski",
"localeRU": "Rosyjski",
"copyAddress": "Skopiuj adres",
"fileSavedTo": "Zapisano do",
"verfiyResumeButton": "Zweryfikuj\/wznów",
"copyServerKeys": "Kopiuj klucze",
"archiveConversation": "Zarchiwizuj tę rozmowę",
"streamerModeLabel": "Tryb streamera\/prezentacji",
"retrievingManifestMessage": "Pobieranie informacji o pliku...",
"openFolderButton": "Otwórz folder",

View File

@ -1,11 +1,76 @@
{
"@@locale": "pt",
"@@last_modified": "2022-02-08T20:13:50+01:00",
"@@last_modified": "2022-12-05T21:06:07+01:00",
"profileEnabledDescription": "Start or stop the profile",
"profileAutostartDescription": "Controls if the profile will be automatically launched on startup",
"profileEnabled": "Enable",
"profileAutostartLabel": "Autostart",
"localePtBr": "Brazilian Portuguese \/ Português do Brasil",
"localeNl": "Dutch \/ Dutch",
"experimentQRCodeDescription": "QR Code support allows sharing data (such as profile identity) by QR Codes",
"enableExperimentQRCode": "QR Codes",
"shareMenuQRCode": "Show QR Code",
"shareProfileMenuTooltop": "Share profile via...",
"acquiredTicketsFromServer": "Antispam Challenge Complete",
"acquiringTicketsFromServer": "Performing Antispam Challenge",
"errorDownloadDirectoryDoesNotExist": "Filesharing cannot be enabled because the Download Folder has not been set, or is set to a folder that does not exist.",
"localeTr": "Turco \/ Türk",
"localeIt": "Italian \/ Italiano",
"tooltipUnpinConversation": "Unpin conversation from the top of \"Conversations\"",
"tooltipPinConversation": "Pin conversation to the top of \"Conversations\"",
"replyingTo": "Replying to %1",
"fileDownloadUnavailable": "This file appears unavailable for download. The sender may have disabled downloads for this file.",
"messageNoReplies": "There are no replies to this message.",
"headingReplies": "Replies",
"viewReplies": "View replies to this message",
"restartFileShare": "Start Sharing File",
"stopSharingFile": "Stop Sharing File",
"manageSharedFiles": "Manage Shared Files",
"localeDe": "Alemao \/ Deutsch",
"localeEn": "English \/ English",
"localeLb": "Luxembourgish \/ Lëtzebuergesch",
"localeNo": "Norwegian \/ Norsk",
"localeEl": "Greek \/ Ελληνικά",
"localePl": "Polish \/ Polski",
"localeRo": "Romanian \/ Română",
"localeRU": "Russian \/ Русский",
"localeEs": "Spanish \/ Español",
"localeDa": "Danish \/ Dansk",
"localePt": "Portuguese \/ Portuguesa",
"localeFr": "French \/ Français",
"localeCy": "Welsh \/ Cymraeg",
"settingImagePreviewsDescription": "Images and Profile Pictures will be downloaded and previewed automatically. We recommend that you do not enable this Experiment if you use Cwtch with untrusted contacts.",
"tooltipPreviewFormatting": "Preview Message Formatting",
"tooltipCode": "Code \/ Monospace",
"tooltipStrikethrough": "Strikethrough",
"tooltipSubscript": "Subscript",
"tooltipSuperscript": "Superscript",
"tooltipItalicize": "Italic",
"tooltipBackToMessageEditing": "Back to Message Editing",
"tooltipBoldText": "Bold",
"okButton": "OK",
"settingsAndroidPowerReenablePopup": "Cannot re-enable Battery Optimization from within Cwtch. Please go to Android \/ Settings \/ Apps \/ Cwtch \/ Battery and set Usage to 'Optimized'",
"settingAndroidPowerExemptionDescription": "Optional: Request Android to exempt Cwtch from optimized power management. This will result in better stability at the cost of greater battery use.",
"settingAndroidPowerExemption": "Android Ignore Battery Optimizations",
"thisFeatureRequiresGroupExpermientsToBeEnabled": "This feature requires the Groups Experiment to be enabled in Settings",
"messageFormattingDescription": "Enable rich text formatting in displayed messages e.g. **bold** and *italic*",
"formattingExperiment": "Message Formatting",
"clickableLinkError": "Error encountered while attempting to open URL",
"clickableLinksCopy": "Copy URL",
"clickableLinkOpen": "Open URL",
"clickableLinksWarning": "Opening this URL will launch an application outside of Cwtch and may reveal metadata or otherwise compromise the security of Cwtch. Only open URLs from people you trust. Are you sure you want to continue?",
"shuttingDownApp": "Shutting down...",
"successfullyImportedProfile": "Successfully Imported Profile: %profile",
"failedToImportProfile": "Error Importing Profile",
"importProfileTooltip": "Use an encrypted Cwtch backup to bring in a profile created in another instance of Cwtch.",
"importProfile": "Import Profile",
"exportProfileTooltip": "Backup this profile to an encrypted file. The encrypted file can be imported into another Cwtch app.",
"exportProfile": "Export Profile",
"newMessageNotificationConversationInfo": "New Message From %1",
"newMessageNotificationSimple": "New Message",
"notificationContentContactInfo": "Conversation Information",
"notificationContentSimpleEvent": "Plain Event",
"conversationNotificationPolicySettingDescription": "Control this conversation's notification behaviour",
"conversationNotificationPolicySettingDescription": "Control notification behaviour for this conversation",
"conversationNotificationPolicySettingLabel": "Conversation Notification Policy",
"settingsGroupExperiments": "Experiments",
"settingsGroupAppearance": "Appearance",
@ -54,7 +119,6 @@
"themeNameWitch": "Witch",
"themeNameCwtch": "Cwtch",
"settingDownloadFolder": "Download Folder",
"settingImagePreviewsDescription": "Images will be downloaded and previewed automatically. Please note that image previews can often lead to security vulnerabilities, and you should not enable this Experiment if you use Cwtch with untrusted contacts. Profile pictures are planned for Cwtch 1.6.",
"settingImagePreviews": "Image Previews and Profile Pictures",
"experimentClickableLinksDescription": "The clickable links experiment allows you to click on URLs shared in messages",
"enableExperimentClickableLinks": "Enable Clickable Links",
@ -71,7 +135,6 @@
"importLocalServerSelectText": "Select Local Server",
"importLocalServerLabel": "Import a locally hosted server",
"newMessagesLabel": "New Messages",
"localeRU": "Russian",
"copyServerKeys": "Copy keys",
"verfiyResumeButton": "Verify\/resume",
"fileCheckingStatus": "Checking download status",
@ -131,7 +194,6 @@
"settingUIColumnSingle": "Single",
"settingUIColumnLandscape": "UI Columns in Landscape Mode",
"settingUIColumnPortrait": "UI Columns in Portrait Mode",
"localePl": "Polish",
"tooltipRemoveThisQuotedMessage": "Remove quoted message.",
"tooltipReplyToThisMessage": "Reply to this message",
"tooltipRejectContactRequest": "Reject this contact request",
@ -171,11 +233,6 @@
"leaveConversation": "Leave This Conversation",
"inviteToGroup": "You have been invited to join a group:",
"titleManageServers": "Manage Servers",
"dateNever": "Never",
"dateLastYear": "Last Year",
"dateYesterday": "Yesterday",
"dateLastMonth": "Last Month",
"dateRightNow": "Right Now",
"successfullAddedContact": "Successfully added ",
"descriptionBlockUnknownConnections": "If turned on, this option will automatically close connections from Cwtch users that have not been added to your contact list.",
"descriptionExperimentsGroups": "The group experiment allows Cwtch to connect with untrusted server infrastructure to facilitate communication with more than one contact.",
@ -190,8 +247,6 @@
"conversationSettings": "Conversation Settings",
"enterCurrentPasswordForDelete": "Please enter current password to delete this profile.",
"enableGroups": "Enable Group Chat",
"localeIt": "Italiana",
"localeEs": "Espanol",
"todoPlaceholder": "Afazer…",
"addNewItem": "Adicionar novo item à lista",
"addListItem": "Adicionar Item à Lista",
@ -213,10 +268,6 @@
"settingTheme": "Use Light Themes",
"largeTextLabel": "Grande",
"settingInterfaceZoom": "Zoom level",
"localeDe": "Deutsche",
"localePt": "Portuguesa",
"localeFr": "Frances",
"localeEn": "English",
"settingLanguage": "Language",
"blockUnknownLabel": "Block Unknown Contacts",
"zoomLabel": "Zoom da interface (afeta principalmente tamanho de texto e botões)",
@ -246,7 +297,6 @@
"noPasswordWarning": "Not using a password on this account means that all data stored locally will not be encrypted",
"radioNoPassword": "Unencrypted (No password)",
"radioUsePassword": "Password",
"copiedToClipboardNotification": "Copiado",
"editProfile": "Edit Profile",
"newProfile": "New Profile",
"defaultProfileName": "Alice",
@ -261,6 +311,7 @@
"blockBtn": "Block Contact",
"saveBtn": "Salvar",
"displayNameLabel": "Nome de Exibição",
"copiedToClipboardNotification": "Copiado",
"addressLabel": "Endereço",
"puzzleGameBtn": "Jogo de Adivinhação",
"bulletinsBtn": "Boletins",
@ -270,7 +321,6 @@
"acceptGroupBtn": "Aceitar",
"acceptGroupInviteLabel": "Você quer aceitar o convite para",
"newGroupBtn": "Criar novo grupo",
"copiedClipboardNotification": "Copiado",
"copyBtn": "Copiar",
"peerOfflineMessage": "Contact is offline, messages can't be delivered right now",
"peerBlockedMessage": "Contact is blocked",
@ -285,7 +335,7 @@
"update": "Update",
"inviteBtn": "Convidar",
"inviteToGroupLabel": "Convidar ao grupo",
"groupNameLabel": "Nome do grupo",
"groupNameLabel": "Nome do Grupo",
"viewServerInfo": "Server Info",
"serverNotSynced": "Syncing New Messages (This can take some time)...",
"serverSynced": "Synced",
@ -295,12 +345,6 @@
"invitationLabel": "Convite",
"serverLabel": "Servidor",
"search": "Search...",
"cycleColoursDesktop": "Click to cycle colours.\nRight-click to reset.",
"cycleColoursAndroid": "Click to cycle colours.\nLong-press to reset.",
"cycleMorphsDesktop": "Click to cycle morphs.\nRight-click to reset.",
"cycleMorphsAndroid": "Click to cycle morphs.\nLong-press to reset.",
"cycleCatsDesktop": "Click to cycle category.\nRight-click to reset.",
"cycleCatsAndroid": "Click to cycle category.\nLong-press to reset.",
"blocked": "Blocked",
"pasteAddressToAddContact": "… cole um endereço aqui para adicionar um contato…",
"titlePlaceholder": "título…",
@ -312,7 +356,6 @@
"groupAddr": "Address",
"invitation": "Invitation",
"server": "Server",
"groupName": "Group name",
"peerName": "Name",
"peerAddress": "Address",
"joinGroupTab": "Join a group",

367
lib/l10n/intl_pt_BR.arb Normal file
View File

@ -0,0 +1,367 @@
{
"@@locale": "pt_BR",
"@@last_modified": "2022-12-05T21:06:07+01:00",
"profileEnabledDescription": "Start or stop the profile",
"profileAutostartDescription": "Controls if the profile will be automatically launched on startup",
"profileEnabled": "Enable",
"profileAutostartLabel": "Autostart",
"localePtBr": "Português do Brasil \/ Português do Brasil",
"localeNl": "Dutch \/ Dutch",
"experimentQRCodeDescription": "O suporte a QR Code permite o compartilhamento de dados (como identidade de perfil) através dos QR Codes",
"enableExperimentQRCode": "QR Codes",
"shareMenuQRCode": "Mostrar QR Code",
"shareProfileMenuTooltop": "Compartilhar perfil por...",
"acquiredTicketsFromServer": "Desafio anti-spam completo",
"acquiringTicketsFromServer": "Realizar o desafio anti-spam",
"errorDownloadDirectoryDoesNotExist": "O compartilhamento de arquivos não pode ser ativado porque a Pasta de Download não foi definida, ou está definida para uma pasta que não existe.",
"localeTr": "Turco \/ Türk",
"tooltipUnpinConversation": "Desafixar conversa a partir do topo de \"Conversations\"",
"tooltipPinConversation": "Fixar conversa para o topo de \"Conversations\"",
"replyingTo": "Responder para %1",
"fileDownloadUnavailable": "Este arquivo aparece indisponível para download. O remetente pode ter desativado os downloads para este arquivo.",
"messageNoReplies": "Não há respostas para esta mensagem.",
"headingReplies": "Respostas",
"viewReplies": "Ver respostas para esta mensagem",
"restartFileShare": "Iniciar compartilhamento de arquivo",
"stopSharingFile": "Parar compartilhamento de arquivo",
"manageSharedFiles": "Gerenciar arquivos compartilhados",
"tooltipPreviewFormatting": "Pré-visualização da formatação da mensagem",
"tooltipCode": "Code \/ Monoespaçado",
"tooltipStrikethrough": "Riscado",
"tooltipSubscript": "Sobrescrito",
"tooltipSuperscript": "Superescrito",
"tooltipItalicize": "Itálico",
"tooltipBackToMessageEditing": "Voltar a edição de mensagem",
"tooltipBoldText": "Negrito",
"okButton": "OK",
"settingsAndroidPowerReenablePopup": "Não é possível reativar a Otimização da Bateria de dentro da Cwtch. Favor ir para Android \/ Settings \/ Apps \/ Cwtch \/ Battery e definir o uso como 'Otimizado'",
"settingAndroidPowerExemptionDescription": "Opcional: Solicite ao Android que isente o Cwtch do gerenciamento otimizado de energia. Isto resultará em melhor estabilidade ao custo de maior uso da bateria.",
"settingAndroidPowerExemption": "Ignorar Otimização de Bateria do Android",
"thisFeatureRequiresGroupExpermientsToBeEnabled": "Esta característica requer que a experiência de grupo seja habilitada em Configurações",
"messageFormattingDescription": "Permitir a formatação de texto rico em mensagens exibidas, por exemplo **negrito** e *itálico*",
"formattingExperiment": "Formatação de mensagem",
"clickableLinkError": "Erro encontrado durante a tentativa de abrir a URL",
"clickableLinksCopy": "Copiar URL",
"clickableLinkOpen": "Abrir URL",
"clickableLinksWarning": "A abertura deste URL abrirá um aplicativo fora do Cwtch e poderá revelar metadados ou comprometer de outra forma a segurança do Cwtch. Abra somente URLs de pessoas em quem você confia. Você tem certeza de que quer continuar?",
"shuttingDownApp": "Desligando...",
"successfullyImportedProfile": "Perfil importado com sucesso: %profile",
"failedToImportProfile": "Erro ao importar perfil",
"importProfileTooltip": "Use um backup criptografado do Cwtch para trazer um perfil criado em outra instância do Cwtch.",
"importProfile": "Importar perfil",
"exportProfileTooltip": "Faça um backup deste perfil em um arquivo criptografado. O arquivo criptografado pode ser importado para outro aplicativo Cwtch.",
"exportProfile": "Exportar Perfil",
"localeDa": "Danish \/ Dansk",
"localeCy": "Welsh \/ Cymraeg",
"localeEl": "Greek \/ Ελληνικά",
"localeNo": "Norwegian \/ Norsk",
"localeLb": "Luxembourgish \/ Lëtzebuergesch",
"localeRo": "Romanian \/ Română",
"newMessageNotificationConversationInfo": "Nova mensagem de %1",
"newMessageNotificationSimple": "Nova Mensagem",
"notificationContentContactInfo": "Informações da Conversa",
"notificationContentSimpleEvent": "Evento Simples",
"conversationNotificationPolicySettingDescription": "controle de comportamento de notificação para esta conversa",
"conversationNotificationPolicySettingLabel": "Política de Notificação de Conversas",
"settingsGroupExperiments": "Experimentos",
"settingsGroupAppearance": "Aparência",
"settingGroupBehaviour": "Comportamento",
"notificationContentSettingDescription": "Controla o conteúdo das notificações de conversas",
"notificationPolicySettingDescription": "Controla o comportamento padrão de notificação do aplicativo",
"notificationContentSettingLabel": "Conteúdo da Notificação",
"notificationPolicySettingLabel": "Política de Notificação",
"conversationNotificationPolicyNever": "Nunca",
"conversationNotificationPolicyOptIn": "Optar por",
"conversationNotificationPolicyDefault": "Padrão",
"notificationPolicyDefaultAll": "Todos por padrão",
"notificationPolicyOptIn": "Optar por",
"notificationPolicyMute": "Silenciar",
"tooltipSelectACustomProfileImage": "Selecionar uma imagem de perfil personalizada",
"torSettingsEnabledCacheDescription": "Mantém em cache os dados atuais do Tor para reutilizar da próxima vez que o Cwtch for aberto. Isto permitirá que o Tor comece mais rápido. Quando desativado, o Cwtch irá eliminar os dados em cache ao iniciar.",
"torSettingsEnableCache": "Consenso de Cache do Tor",
"labelTorNetwork": "Rede Tor",
"descriptionACNCircuitInfo": "Informações detalhadas sobre o caminho que a rede de comunicação anônima está utilizando para se conectar a esta conversa.",
"labelACNCircuitInfo": "Informações do Circuito ACN",
"fileSharingSettingsDownloadFolderTooltip": "Navegue para selecionar uma pasta padrão diferente para arquivos baixados.",
"fileSharingSettingsDownloadFolderDescription": "Quando os arquivos são baixados automaticamente (por exemplo, prévias de imagem, quando as pré-visualizações de imagem estão habilitadas) é necessário um local padrão para o download destes arquivos.",
"torSettingsErrorSettingPort": "O número da porta deve ser entre 1 e 65535",
"torSettingsUseCustomTorServiceConfigurastionDescription": "Substituir a configuração padrão do Tor. Atenção: Isto pode ser perigoso. Só use isto se você souber o que está fazendo.",
"torSettingsUseCustomTorServiceConfiguration": "Use uma configuração personalizada de serviço do Tor (torrc)",
"torSettingsCustomControlPortDescription": "Use uma porta personalizada para conexões de controle para o proxy Tor",
"torSettingsCustomControlPort": "Porta de controle personalizada",
"torSettingsCustomSocksPortDescription": "Use uma porta personalizada para conexões de dados com o proxy Tor",
"torSettingsCustomSocksPort": "Porta SOCKS personalizada",
"torSettingsEnabledAdvancedDescription": "Use um serviço Tor existente em seu sistema, ou altere os parâmetros do serviço Cwtch Tor",
"torSettingsEnabledAdvanced": "Habilitar configuração avançada do Tor",
"msgAddToAccept": "Adicione esta conta a seus contatos para poder aceitar este arquivo.",
"btnSendFile": "Enviar arquivo",
"msgConfirmSend": "Você tem certeza de que deseja enviar",
"msgFileTooBig": "O tamanho do arquivo não pode exceder 10 GB",
"storageMigrationModalMessage": "Migração dos perfis para um novo formato de armazenamento. Isto pode levar alguns minutos...",
"loadingCwtch": "Carregando o Cwtch...",
"themeColorLabel": "Cor do tema",
"themeNameNeon2": "Neon2",
"themeNameNeon1": "Neon1",
"themeNameMidnight": "Meia-noite",
"themeNameMermaid": "Sereia",
"themeNamePumpkin": "Abóbora",
"themeNameGhost": "Fantasma",
"themeNameVampire": "Vampiro",
"themeNameWitch": "Bruxa",
"themeNameCwtch": "Cwtch",
"settingDownloadFolder": "Pasta para Download",
"settingImagePreviewsDescription": "Imagens e Fotos de Perfil serão baixadas e visualizadas automaticamente. Recomendamos que você não ative esta Experiência se usar Cwtch com contatos não confiáveis.",
"settingImagePreviews": "Pré-visualização de Imagens e Fotos de Perfil",
"experimentClickableLinksDescription": "O experimento de links clicáveis permite que você clique em URLs compartilhadas em mensagens",
"enableExperimentClickableLinks": "Habilitar links clicáveis",
"serverConnectionsLabel": "Conexão",
"serverTotalMessagesLabel": "Total de mensagens",
"serverMetricsLabel": "Métricas do servidor",
"manageKnownServersShort": "Servidores",
"manageKnownServersLong": "Gerenciar Servidores Conhecidos",
"displayNameTooltip": "Por favor, digite um nome de exibição",
"manageKnownServersButton": "Gerenciar Servidores Conhecidos",
"fieldDescriptionLabel": "Descrição",
"groupsOnThisServerLabel": "Grupos nos quais estou hospedado neste servidor",
"importLocalServerButton": "Importar %1",
"importLocalServerSelectText": "Selecione Servidor Local",
"importLocalServerLabel": "Importar um servidor hospedado localmente",
"newMessagesLabel": "Novas mensagens",
"localeRU": "Russian \/ Русский",
"copyServerKeys": "Copiar chaves",
"verfiyResumeButton": "Verify\/resume",
"fileCheckingStatus": "Verificando o status do download",
"fileInterrupted": "Interrompido",
"fileSavedTo": "Salvar em",
"encryptedServerDescription": "Criptografar um servidor com uma senha o protege de outras pessoas que também podem usar este dispositivo. Os servidores criptografados não podem ser descriptografados, exibidos ou acessados até que a senha correta seja inserida para desbloqueá-los.",
"plainServerDescription": "Recomendamos que você proteja seus servidores Cwtch com uma senha. Se você não definir uma senha neste servidor, qualquer pessoa que tenha acesso a este dispositivo poderá acessar informações sobre este servidor, incluindo chaves criptográficas sensíveis.",
"deleteServerConfirmBtn": "Realmente excluir servidor",
"deleteServerSuccess": "Servidor excluído com sucesso",
"enterCurrentPasswordForDeleteServer": "Por favor, digite a senha atual para excluir este servidor",
"copyAddress": "Copiar endereço",
"settingServersDescription": "A experiência com servidores de hospedagem permite hospedar e gerenciar servidores Cwtch",
"settingServers": "Servidores Hospedados",
"enterServerPassword": "Digite a senha para desbloquear o servidor",
"unlockProfileTip": "Por favor, crie ou desbloqueie um perfil para começar!",
"unlockServerTip": "Por favor, crie ou desbloqueie um servidor para começar!",
"addServerTooltip": "Adicionar novo servidor",
"serversManagerTitleShort": "Servidores",
"serversManagerTitleLong": "Servidor que você hospeda",
"saveServerButton": "Salvar servidor",
"serverAutostartDescription": "Controla se o aplicativo iniciará automaticamente o servidor no início",
"serverAutostartLabel": "Autoinício",
"serverEnabledDescription": "Iniciar ou parar servidor",
"serverEnabled": "Servidor ativado",
"serverDescriptionDescription": "Sua descrição do servidor é apenas para uso de gerenciamento pessoal, nunca será compartilhada",
"serverDescriptionLabel": "Descrição do servidor",
"serverAddress": "Endereço do servidor",
"editServerTitle": "Editar servidor",
"addServerTitle": "Adicionar servidor",
"titleManageProfilesShort": "Perfis",
"descriptionFileSharing": "O experimento de compartilhamento de arquivos permite enviar e receber arquivos de contatos e grupos do Cwtch. Note que compartilhar um arquivo com um grupo resultará em membros desse grupo conectando-se diretamente com você através do Cwtch para baixá-lo.",
"settingFileSharing": "Compartilhar arquivo",
"tooltipSendFile": "Mandar arquivo",
"messageFileOffered": "Contato está oferecendo mandar um arquivo para você",
"messageFileSent": "Você mandou um arquivo",
"messageEnableFileSharing": "Habilite o experimento de compartilhamento de arquivos para visualizar esta mensagem.",
"labelFilesize": "Tamanho",
"labelFilename": "Nome do arquivo",
"downloadFileButton": "Download",
"openFolderButton": "Abrir pasta",
"retrievingManifestMessage": "Obtendo informações do arquivo...",
"descriptionStreamerMode": "Se ativada, esta opção torna o aplicativo mais privado visualmente para streaming ou apresentação com, por exemplo, perfil e endereços de contato ocultos.",
"streamerModeLabel": "Streamer\/Modo de apresentação",
"archiveConversation": "Arquivar esta conversa",
"blockUnknownConnectionsEnabledDescription": "As conexões de contatos desconhecidos são bloqueadas. Você pode mudar isto em Configurações",
"showMessageButton": "Mostrar mensagem",
"blockedMessageMessage": "Esta mensagem é de um perfil que você bloqueou.",
"placeholderEnterMessage": "Digitar a mensagem...",
"plainProfileDescription": "Recomendamos que você proteja seus perfis Cwtch com uma senha. Se você não definir uma senha neste perfil, qualquer pessoa que tenha acesso a este dispositivo poderá acessar informações sobre este perfil, incluindo contatos, mensagens e chaves criptográficas sensíveis.",
"encryptedProfileDescription": "Criptografar um perfil com uma senha o protege de outras pessoas que também podem usar este dispositivo. Os perfis criptografados não podem ser descriptografados, exibidos ou acessados até que a senha correta seja inserida para desbloqueá-los.",
"addContactConfirm": "Adicionar contato %1",
"addContact": "Adicionar contato",
"contactGoto": "Vá para conversa com %1",
"settingUIColumnOptionSame": "O mesmo que a configuração do modo retrato",
"settingUIColumnDouble14Ratio": "Duplo (1:4)",
"settingUIColumnDouble12Ratio": "Duplo (1:2)",
"settingUIColumnSingle": "Único",
"settingUIColumnLandscape": "Colunas da interface em Modo Paisagem",
"settingUIColumnPortrait": "Colunas da interface em Modo Retrato",
"localePl": "Polish \/ Polski",
"tooltipRemoveThisQuotedMessage": "Remover mensagem mencionada",
"tooltipReplyToThisMessage": "Responder esta mensagem",
"tooltipRejectContactRequest": "Rejeitar pedido de contato",
"tooltipAcceptContactRequest": "Aceitar pedido de contato",
"notificationNewMessageFromGroup": "Nova mensagem de um grupo!",
"notificationNewMessageFromPeer": "Nova mensagem de um contato!",
"tooltipHidePassword": "Ocultar Senha",
"tooltipShowPassword": "Mostrar Senha",
"groupInviteSettingsWarning": "Você foi convidado a fazer parte de um grupo! Por favor, habilite a Experiência de Bate-papo em Grupo em Configurações para ver este convite.",
"shutdownCwtchAction": "Desligar Cwtch",
"shutdownCwtchDialog": "Você tem certeza que quer encerrar o Cwtch? Isto fechará todas as conexões, e sairá do aplicativo.",
"shutdownCwtchDialogTitle": "Desligar o Cwtch?",
"shutdownCwtchTooltip": "Desligar o Cwtch",
"malformedMessage": "Mensagem malformada",
"profileDeleteSuccess": "Perfil deletado com sucesso",
"debugLog": "Ative o console de depuração de logs",
"torNetworkStatus": "Status da rede Tor",
"addContactFirst": "Adicione ou escolha um contato para começar a conversar.",
"createProfileToBegin": "Por favor, crie ou desbloqueie um perfil para começar",
"nickChangeSuccess": "Nome do perfil alterado com sucesso",
"addServerFirst": "Você precisa adicionar um servidor antes de poder criar um grupo",
"deleteProfileSuccess": "Perfil deletado com sucesso!",
"sendInvite": "Mandar um contato ou convite de grupo",
"sendMessage": "Mandar mensagem",
"cancel": "Cancelar",
"resetTor": "Resetar",
"torStatus": "Tor Status",
"torVersion": "Versão do Tor",
"sendAnInvitation": "Você enviou um convite para: ",
"contactSuggestion": "Esta é uma sugestão de contato para: ",
"rejected": "Rejeitado!",
"accepted": "Aceito!",
"chatHistoryDefault": "Esta conversa será excluída quando o Cwtch for encerrado! O histórico de mensagens pode ser habilitado por conversa através do menu Configurações, no canto superior direito.",
"newPassword": "Nova senha",
"yesLeave": "Sim, deixa esta conversa",
"reallyLeaveThisGroupPrompt": "Você tem certeza que quer deixar esta conversa? Todas as mensagens e atributos serão apagados.",
"leaveConversation": "Deixar esta conversa",
"inviteToGroup": "Você foi convidado a se juntar a um grupo:",
"titleManageServers": "Gerenciar Servidores",
"successfullAddedContact": "Adicionado com sucesso ",
"descriptionBlockUnknownConnections": "Se ativada, esta opção fechará automaticamente as conexões dos usuários Cwtch que não tenham sido adicionadas à sua lista de contatos.",
"descriptionExperimentsGroups": "O experimento de grupo permite ao Cwtch conectar-se com uma infra-estrutura de servidor não confiável para facilitar a comunicação com mais de um contato.",
"descriptionExperiments": "Os experimentos Cwtch são opcionais, características opt-in que adicionam funcionalidades adicionais ao Cwtch que podem ter considerações de privacidade diferentes das tradicionais conversas resistentes a metadados 1:1, por exemplo, conversas em grupo, integração de bot, etc.",
"titleManageProfiles": "Gerencie perfis do Cwtch",
"tooltipUnlockProfiles": "Desbloqueie perfis criptografados digitando sua senha.",
"titleManageContacts": "Conversas",
"tooltipAddContact": "Adicionar novo contato a conversa",
"tooltipOpenSettings": "Abra o painel de ajustes",
"contactAlreadyExists": "Contato já existe",
"invalidImportString": "Importação de string inválido",
"conversationSettings": "Configurações da Conversa",
"enterCurrentPasswordForDelete": "Por favor entre sua senha atual para deletar este perfil.",
"enableGroups": "Ativar chat em grupo",
"localeIt": "Italian \/ Italiano",
"localeEs": "Spanish \/ Español",
"todoPlaceholder": "Afazer…",
"addNewItem": "Adicionar novo item à lista",
"addListItem": "Adicionar Item à Lista",
"newConnectionPaneTitle": "Nova Conexão",
"networkStatusOnline": "Online",
"networkStatusConnecting": "Conectando à rede e contatos...",
"networkStatusAttemptingTor": "Tentando conectar à rede Tor",
"networkStatusDisconnected": "Desconectado da internet, confira a sua conexão",
"viewGroupMembershipTooltip": "Ver Participação em Grupo",
"loadingTor": "Carregando Tor...",
"smallTextLabel": "Pequeno",
"defaultScalingText": "Texto tamanho padrão (fator de escala: ",
"builddate": "Construído em: %2",
"version": "Versão %1",
"versionTor": "Versão %1 com Tor %2",
"experimentsEnabled": "Ativar experimentos",
"themeDark": "Escuro",
"themeLight": "Claro",
"settingTheme": "Use temas claros",
"largeTextLabel": "Grande",
"settingInterfaceZoom": "Nível de zoom",
"localeDe": "Alemao \/ Deutsch",
"localePt": "Portuguese \/ Portuguesa",
"localeFr": "French \/ Français",
"localeEn": "English \/ English",
"settingLanguage": "Linguagem",
"blockUnknownLabel": "Bloquear Contatos Desconhecidos",
"zoomLabel": "Zoom da interface (afeta principalmente tamanho de texto e botões)",
"versionBuilddate": "Versão: %1 Construído em: %2",
"cwtchSettingsTitle": "Configurações do Cwtch",
"unlock": "Desbloquear",
"yourServers": "Seus servidores",
"yourProfiles": "Seus perfis",
"error0ProfilesLoadedForPassword": "0 perfis carregados com esta senha",
"password": "Senha",
"enterProfilePassword": "Coloque uma senha para ver seus perfis",
"addNewProfileBtn": "Adicionar novo perfil",
"deleteConfirmText": "DELETE",
"deleteProfileConfirmBtn": "Realmente deletar o perfil",
"deleteConfirmLabel": "digite DELETE para confirmar",
"deleteProfileBtn": "Deletar Perfil",
"passwordChangeError": "Erro ao mudar a senha: senha fornecida rejeitada",
"passwordErrorMatch": "Senhas não são iguais",
"saveProfileBtn": "Salvar Perfil",
"createProfileBtn": "Criar Perfil",
"passwordErrorEmpty": "Senha não pode ser vazia",
"password2Label": "Recoloque a senha",
"password1Label": "Senha",
"currentPasswordLabel": "Senha Atual",
"yourDisplayName": "Seu nome de exibição",
"profileOnionLabel": "Send this address to contacts you want to connect with",
"noPasswordWarning": "Não usar uma senha nesta conta significa que todos os dados armazenados localmente não serão criptografados",
"radioNoPassword": "Descriptografado (Sem senha)",
"radioUsePassword": "Senha",
"editProfile": "Editar Perfil",
"newProfile": "Novo Perfil",
"defaultProfileName": "Alice",
"profileName": "Nome de exibição",
"editProfileTitle": "Editar perfil",
"addProfileTitle": "Adicionar novo perfil",
"deleteBtn": "Delete",
"unblockBtn": "Desbloquear Contato",
"dontSavePeerHistory": "Deletar histórico",
"savePeerHistoryDescription": "Determina se deve excluir algum histórico associado com o contato.",
"savePeerHistory": "Salvar histórico",
"blockBtn": "Bloquear Contato",
"saveBtn": "Save",
"displayNameLabel": "Nome de Exibição",
"copiedToClipboardNotification": "Copiado",
"addressLabel": "Endereço",
"puzzleGameBtn": "Jogo de Adivinhação",
"bulletinsBtn": "Boletins",
"listsBtn": "Listas",
"chatBtn": "Chat",
"rejectGroupBtn": "Recusar",
"acceptGroupBtn": "Aceitar",
"acceptGroupInviteLabel": "Você quer aceitar o convite para",
"newGroupBtn": "Criar novo grupo",
"copyBtn": "Copiar",
"peerOfflineMessage": "Contato está off-line, mensagens não podem ser entregues agora.",
"peerBlockedMessage": "Contato está bloquado",
"pendingLabel": "Pendente",
"acknowledgedLabel": "Confirmada",
"couldNotSendMsgError": "Não deu para enviar esta mensagem",
"dmTooltip": "Clique para DM",
"membershipDescription": "A lista abaixo é de usuários que enviaram mensagens ao grupo. Essa lista pode não refletir todos os usuários que têm acesso ao grupo.",
"addListItemBtn": "Adicionar Item",
"peerNotOnline": "Contato está off-line. Não pode receber mensagens agora.",
"searchList": "Lista de Pesquisa",
"update": "Atualizar",
"inviteBtn": "Convidar",
"inviteToGroupLabel": "Convidar ao grupo",
"groupNameLabel": "Nome do Grupo",
"viewServerInfo": "Server Info",
"serverNotSynced": "Sincronizando novas mensagens (Isto pode levar um tempo)...",
"serverSynced": "Sincronizado",
"serverConnectivityDisconnected": "Servidor Desconectado",
"serverConnectivityConnected": "Servidor Conectado",
"serverInfo": "Informação do Servidor",
"invitationLabel": "Convite",
"serverLabel": "Server",
"search": "Pesquisar...",
"blocked": "Bloqueado",
"pasteAddressToAddContact": "… cole um endereço aqui para adicionar um contato…",
"titlePlaceholder": "título…",
"postNewBulletinLabel": "Postar novo boletim",
"newBulletinLabel": "Novo Boletim",
"joinGroup": "Entrar no grupo",
"createGroup": "Criar grupo",
"addPeer": "Adicionar Contato",
"groupAddr": "Endereços",
"invitation": "Convite",
"server": "Servidor",
"peerName": "Nome",
"peerAddress": "Endereço",
"joinGroupTab": "Juntar-se a um grupo",
"createGroupTab": "Criar um grupo",
"addPeerTab": "Adicionar um contato",
"createGroupBtn": "Criar",
"defaultGroupName": "Grupo incrível",
"createGroupTitle": "Criar Grupo"
}

367
lib/l10n/intl_ro.arb Normal file
View File

@ -0,0 +1,367 @@
{
"@@locale": "ro",
"@@last_modified": "2022-12-05T21:06:07+01:00",
"profileEnabledDescription": "Start or stop the profile",
"profileAutostartDescription": "Controls if the profile will be automatically launched on startup",
"profileEnabled": "Enable",
"profileAutostartLabel": "Autostart",
"localePtBr": "Brazilian Portuguese \/ Português do Brasil",
"localeNl": "Dutch \/ Dutch",
"experimentQRCodeDescription": "QR Code support allows sharing data (such as profile identity) by QR Codes",
"enableExperimentQRCode": "QR Codes",
"shareMenuQRCode": "Show QR Code",
"shareProfileMenuTooltop": "Share profile via...",
"acquiredTicketsFromServer": "Antispam Challenge Complete",
"acquiringTicketsFromServer": "Performing Antispam Challenge",
"errorDownloadDirectoryDoesNotExist": "Filesharing cannot be enabled because the Download Folder has not been set, or is set to a folder that does not exist.",
"localeTr": "Turcă \/ Türk",
"localeIt": "Italiană",
"localeEn": "Engleză \/ English",
"localeFr": "Franceză \/ Français",
"tooltipUnpinConversation": "Unpin conversation from the top of \"Conversations\"",
"tooltipPinConversation": "Pin conversation to the top of \"Conversations\"",
"replyingTo": "Replying to %1",
"fileDownloadUnavailable": "This file appears unavailable for download. The sender may have disabled downloads for this file.",
"messageNoReplies": "There are no replies to this message.",
"headingReplies": "Replies",
"viewReplies": "View replies to this message",
"restartFileShare": "Start Sharing File",
"stopSharingFile": "Stop Sharing File",
"manageSharedFiles": "Manage Shared Files",
"localeDe": "Germană",
"localeLb": "Luxemburgheză",
"localeNo": "Norvegiană",
"localeEl": "Greacă",
"localePl": "Poloneză",
"localeRo": "Română",
"localeRU": "Rusă",
"localeEs": "Spaniolă",
"localeDa": "Daneză",
"localePt": "Portugheză",
"localeCy": "Velşă",
"settingImagePreviewsDescription": "Imaginile vor fi descărcate și previzualizate automat. Vă rugăm să rețineți că previzualizările imaginilor pot duce adesea la vulnerabilități de securitate și nu ar trebui să activați acest Experiment dacă utilizați Cwtch cu contacte care nu sunt de încredere. Imaginile de profil sunt planificate pentru Cwtch 1.6.",
"tooltipPreviewFormatting": "Preview Message Formatting",
"tooltipCode": "Code \/ Monospace",
"tooltipStrikethrough": "Strikethrough",
"tooltipSubscript": "Subscript",
"tooltipSuperscript": "Superscript",
"tooltipItalicize": "Italic",
"tooltipBackToMessageEditing": "Back to Message Editing",
"tooltipBoldText": "Bold",
"okButton": "OK",
"settingsAndroidPowerReenablePopup": "Cannot re-enable Battery Optimization from within Cwtch. Please go to Android \/ Settings \/ Apps \/ Cwtch \/ Battery and set Usage to 'Optimized'",
"settingAndroidPowerExemptionDescription": "Optional: Request Android to exempt Cwtch from optimized power management. This will result in better stability at the cost of greater battery use.",
"settingAndroidPowerExemption": "Android Ignore Battery Optimizations",
"thisFeatureRequiresGroupExpermientsToBeEnabled": "This feature requires the Groups Experiment to be enabled in Settings",
"messageFormattingDescription": "Enable rich text formatting in displayed messages e.g. **bold** and *italic*",
"formattingExperiment": "Message Formatting",
"clickableLinkError": "Error encountered while attempting to open URL",
"clickableLinksCopy": "Copy URL",
"clickableLinkOpen": "Open URL",
"clickableLinksWarning": "Opening this URL will launch an application outside of Cwtch and may reveal metadata or otherwise compromise the security of Cwtch. Only open URLs from people you trust. Are you sure you want to continue?",
"shuttingDownApp": "Shutting down...",
"successfullyImportedProfile": "Successfully Imported Profile: %profile",
"failedToImportProfile": "Error Importing Profile",
"importProfileTooltip": "Use an encrypted Cwtch backup to bring in a profile created in another instance of Cwtch.",
"importProfile": "Import Profile",
"exportProfileTooltip": "Backup this profile to an encrypted file. The encrypted file can be imported into another Cwtch app.",
"exportProfile": "Export Profile",
"deleteProfileConfirmBtn": "Sigur ștergeti profilul",
"deleteConfirmLabel": "Tastați ȘTERGE pentru a confirma",
"conversationNotificationPolicySettingDescription": "Controlați comportamentul de notificare al acestei conversații",
"createGroupTitle": "Creați un grup",
"serverLabel": "Server",
"defaultGroupName": "Grup minunat",
"createGroupBtn": "Creați",
"profileOnionLabel": "Trimiteți această adresă persoanelor cu care doriți să intrați în legătură",
"addPeerTab": "Adăugați un contact",
"createGroupTab": "Creați un grup",
"joinGroupTab": "Alăturați-vă unui grup",
"peerAddress": "Adresa",
"peerName": "Nume",
"server": "Server",
"invitation": "Invitație",
"groupAddr": "Adresa",
"addPeer": "Adăugați un contact",
"createGroup": "Creați un grup",
"joinGroup": "Alăturați-vă grupului",
"newBulletinLabel": "Buletin nou",
"postNewBulletinLabel": "Postați un buletin nou",
"titlePlaceholder": "titlu...",
"pasteAddressToAddContact": "Inserați aici o adresă, o invitație sau un pachet de chei pentru a adăuga o conversație nouă",
"blocked": "Blocat",
"search": "Căutare...",
"invitationLabel": "Invitație",
"serverInfo": "Informații despre server",
"serverConnectivityConnected": "Server conectat",
"serverConnectivityDisconnected": "Server deconectat",
"serverSynced": "Sincronizat",
"serverNotSynced": "Se sincronizează mesaje noi (poate dura ceva timp)...",
"viewServerInfo": "Informații despre server",
"groupNameLabel": "Numele grupului",
"saveBtn": "Salvați",
"inviteToGroupLabel": "Invitați în grup",
"inviteBtn": "Invitați",
"update": "Actualizați",
"deleteBtn": "Ștergeți",
"searchList": "Lista de căutare",
"peerNotOnline": "Contactul este offline. Aplicațiile nu pot fi utilizate în acest moment.",
"addListItemBtn": "Adăugați un element",
"membershipDescription": "Mai jos este o listă a utilizatorilor care au trimis mesaje către grup. Este posibil ca această listă să nu afișeze toți utilizatorii care au acces la grup.",
"dmTooltip": "Apăsati pentru mesaj direct",
"couldNotSendMsgError": "Nu s-a putut trimite acest mesaj",
"acknowledgedLabel": "Recunoscut",
"pendingLabel": "În așteptare",
"peerBlockedMessage": "Contactul este blocat",
"peerOfflineMessage": "Contactul este offline, mesajele nu pot fi transmise în acest moment",
"copyBtn": "Copiați",
"newGroupBtn": "Creați un grup nou",
"acceptGroupInviteLabel": "Doriți să acceptați invitația în",
"acceptGroupBtn": "Acceptați",
"rejectGroupBtn": "Respingeți",
"chatBtn": "Conversație",
"listsBtn": "Liste",
"bulletinsBtn": "Buletine",
"puzzleGameBtn": "Puzzle",
"addressLabel": "Adresa",
"copiedToClipboardNotification": "Copiat în clipboard",
"displayNameLabel": "Numele de afișare",
"blockBtn": "Blocați contactul",
"savePeerHistory": "Salvați istoricul",
"savePeerHistoryDescription": "Determină dacă se șterge istoricul asociat cu persoana de contact.",
"dontSavePeerHistory": "Ștergeți istoricul",
"unblockBtn": "Deblocați contactul",
"addProfileTitle": "Adăugați un profil nou",
"editProfileTitle": "Editați profilul",
"profileName": "Numele afișat",
"defaultProfileName": "Alice",
"newProfile": "Profil nou",
"editProfile": "Editați profilul",
"radioUsePassword": "Parolă",
"radioNoPassword": "Necriptat (fără parolă)",
"noPasswordWarning": "Lipsa unei parole pe acest cont înseamnă că toate datele stocate local nu vor fi criptate.",
"yourDisplayName": "Numele dvs. de afișare",
"currentPasswordLabel": "Parola actuală",
"password1Label": "Parolă",
"password2Label": "Reintroduceți parola",
"passwordErrorEmpty": "Parola nu poate fi goală",
"createProfileBtn": "Creați un profil",
"saveProfileBtn": "Salvați profilul",
"passwordErrorMatch": "Parolele nu se potrivesc",
"passwordChangeError": "Eroare la schimbarea parolei: Parola furnizată a fost respinsă",
"deleteProfileBtn": "Ștergeți profilul",
"deleteConfirmText": "ȘTERGE",
"addNewProfileBtn": "Adăugați un profil nou",
"enterProfilePassword": "Introduceți o parolă pentru a vă vizualiza profilurile",
"password": "Parolă",
"error0ProfilesLoadedForPassword": "0 profiluri încărcate cu această parolă",
"yourProfiles": "Profilurile dvs.",
"yourServers": "Serverele dvs.",
"unlock": "Deblocați",
"cwtchSettingsTitle": "Setări Cwtch",
"builddate": "Construit pe: %2",
"versionBuilddate": "Versiune: %1 Construit pe: %2",
"zoomLabel": "Zoomul interfeței (afectează dimensiunile textului și ale butoanelor)",
"blockUnknownLabel": "Blocați contactele necunoscute",
"settingLanguage": "Limba",
"settingInterfaceZoom": "Nivelul de zoom",
"largeTextLabel": "Mare",
"settingTheme": "Utilizați teme luminoase",
"themeLight": "Luminos",
"themeDark": "Întunecat",
"experimentsEnabled": "Activați experimentele",
"versionTor": "Versiunea %1 cu tor %2",
"version": "Versiunea %1",
"defaultScalingText": "Dimensiunea implicită a textului (factor de scară:",
"smallTextLabel": "Mic",
"loadingTor": "Se încarcă tor...",
"viewGroupMembershipTooltip": "Vizualizați membrii grupului",
"networkStatusDisconnected": "Aplicația a fost deconectată de la internet, verificați conexiunea",
"networkStatusAttemptingTor": "Se incearcă conectarea la rețeaua Tor",
"networkStatusConnecting": "Se conectează la rețea și contacte...",
"networkStatusOnline": "Online",
"newConnectionPaneTitle": "Conexiune nouă",
"addListItem": "Adăugați o nouă listă",
"addNewItem": "Adăugați un nou element în listă",
"todoPlaceholder": "În construcție...",
"enableGroups": "Activează chatul de grup",
"enterCurrentPasswordForDelete": "Vă rugăm să introduceți parola actuală pentru a șterge acest profil.",
"conversationSettings": "Setările conversației",
"invalidImportString": "Șir de caractere de import nevalabil",
"contactAlreadyExists": "Contactul există deja",
"tooltipOpenSettings": "Deschideți panoul de setări",
"tooltipAddContact": "Adăugați un contact sau o conversație nouă",
"titleManageContacts": "Conversații",
"tooltipUnlockProfiles": "Deblocați profilurile criptate introducând parola acestora.",
"titleManageProfiles": "Gestionați profilurile Cwtch",
"descriptionExperiments": "Experimentele Cwtch sunt opționale, caracteristici opt-in care adaugă funcționalități suplimentare la Cwtch care pot avea considerații diferite privind confidențialitatea față de chat-ul tradițional rezistent la metadate 1:1, de exemplu chat-ul de grup, integrarea boților etc.",
"descriptionExperimentsGroups": "Experimentul de grup îi permite lui Cwtch să se conecteze la o infrastructură de server nesigură pentru a facilita comunicarea cu mai multe persoane de contact.",
"descriptionBlockUnknownConnections": "Dacă este activată, această opțiune va închide automat conexiunile de la utilizatorii Cwtch care nu au fost adăugați la lista dvs. de contacte.",
"successfullAddedContact": "Adăugat cu succes ",
"titleManageServers": "Gestionați serverele",
"inviteToGroup": "Ați fost invitat să vă alăturați unui grup:",
"leaveConversation": "Părăsiți această conversație",
"reallyLeaveThisGroupPrompt": "Sigur vrei să părăsești această conversație? Toate mesajele și atributele vor fi șterse.",
"yesLeave": "Da, părăsește această conversație",
"newPassword": "Parolă nouă",
"chatHistoryDefault": "Această conversație va fi ștearsă când aplicația Cwtch va fi închisă! Istoricul mesajelor poate fi activat pentru fiecare conversație în parte prin intermediul meniului Setări din dreapta sus.",
"accepted": "Admis!",
"rejected": "Respins!",
"contactSuggestion": "Aceasta este o sugestie de contact pentru: ",
"sendAnInvitation": "Ați trimis o invitație pentru: ",
"torStatus": "Starea Tor",
"torVersion": "Versiunea Tor",
"resetTor": "Resetare",
"cancel": "Anulare",
"sendMessage": "Trimiteți un mesaj",
"sendInvite": "Trimiteți o invitație de contact sau de grup",
"deleteProfileSuccess": "Profil a fost șters cu succes",
"addServerFirst": "Trebuie să adăugați un server înainte de a putea crea un grup",
"nickChangeSuccess": "Porecla profilului a fost schimbată cu succes",
"createProfileToBegin": "Creați sau deblocați un profil pentru a începe",
"addContactFirst": "Adăugați sau alegeți un contact pentru a începe să discutați.",
"torNetworkStatus": "Starea rețelei Tor",
"debugLog": "Activați jurnalizarea de depanare a consolei",
"profileDeleteSuccess": "Profil a fost șters cu succes",
"malformedMessage": "Mesaj incorect",
"shutdownCwtchTooltip": "Oprire Cwtch",
"shutdownCwtchDialogTitle": "Oprire Cwtch?",
"shutdownCwtchDialog": "Sigur doriți să opriți Cwtch? Se vor închide toate conexiunile și se va închide aplicația.",
"shutdownCwtchAction": "Opriți Cwtch",
"groupInviteSettingsWarning": "Ați fost invitat să vă alăturați unui grup! Vă rugăm să activați Experimentul de chat în grup din Setări pentru a vedea această invitație.",
"tooltipShowPassword": "Afișați parola",
"tooltipHidePassword": "Ascundeți parola",
"notificationNewMessageFromPeer": "Mesaj nou de la un contact!",
"notificationNewMessageFromGroup": "Mesaj nou într-un grup!",
"tooltipAcceptContactRequest": "Acceptați această cerere de contact.",
"tooltipRejectContactRequest": "Respingeți această cerere de contact",
"tooltipReplyToThisMessage": "Răspundeți la acest mesaj",
"tooltipRemoveThisQuotedMessage": "Eliminați mesajul citat.",
"settingUIColumnPortrait": "Coloane UI în modul Portret",
"settingUIColumnLandscape": "Coloane UI în modul Peisaj",
"settingUIColumnSingle": "Singur",
"settingUIColumnDouble12Ratio": "Dublu (1:2)",
"settingUIColumnDouble14Ratio": "Dublu (1:4)",
"settingUIColumnOptionSame": "La fel ca modul portret",
"contactGoto": "Accesați conversația cu %1",
"addContact": "Adăugați un contact",
"addContactConfirm": "Adăugați contactul %1",
"encryptedServerDescription": "Criptarea unui server cu o parolă îl protejează de alte persoane care utilizează acest dispozitiv. Serverele criptate nu pot fi decriptate, afișate sau accesate până când nu se introduce parola corectă pentru a le debloca.",
"encryptedProfileDescription": "Criptarea unui profil cu o parolă îl protejează de alte persoane care utilizează și ele acest dispozitiv. Profilurile criptate nu pot fi decriptate, afișate sau accesate până când nu se introduce parola corectă pentru a le debloca.",
"plainProfileDescription": "Vă recomandăm să vă protejați profilurile Cwtch cu o parolă. Dacă nu setați o parolă pe acest profil, atunci oricine are acces la acest dispozitiv are acces la informații despre acest profil, inclusiv la chei criptografice importante.",
"placeholderEnterMessage": "Introduceți un mesaj...",
"blockedMessageMessage": "Acest mesaj provine de la un profil pe care l-ați blocat.",
"showMessageButton": "Afișați mesajul",
"blockUnknownConnectionsEnabledDescription": "Conexiunile de la contacte necunoscute sunt blocate. Puteți modifica acest lucru în Setări",
"archiveConversation": "Arhivați această conversație",
"streamerModeLabel": "Modul de Streamer\/Prezentare",
"descriptionStreamerMode": "Dacă este activată, această opțiune face ca aplicația să fie mai privată din punct de vedere vizual pentru streaming sau prezentare. De exemplu, ascunde adresele de profil și de contact",
"retrievingManifestMessage": "Se preiau informații despre fișier...",
"openFolderButton": "Deschideți dosarul",
"downloadFileButton": "Descărcați",
"labelFilename": "Numele fișierului",
"labelFilesize": "Dimensiune",
"messageEnableFileSharing": "Activați experimentul de partajare a fișierelor pentru a vizualiza acest mesaj.",
"messageFileSent": "Ați trimis un fișier",
"messageFileOffered": "Contactul vrea să vă trimită un fișier",
"tooltipSendFile": "Trimiteți fișierul",
"settingFileSharing": "Partajarea fișierelor",
"descriptionFileSharing": "Experimentul de partajare a fișierelor vă permite să trimiteți și să primiți fișiere de la contacte și grupuri Cwtch. Rețineți că partajarea unui fișier cu un grup va duce la conectarea membrilor acelui grup cu dvs. direct prin Cwtch pentru a-l descărca.",
"titleManageProfilesShort": "Profiluri",
"addServerTitle": "Adăugați un server",
"editServerTitle": "Editați serverul",
"serverAddress": "Adresa serverului",
"serverDescriptionLabel": "Descrierea serverului",
"serverDescriptionDescription": "Descrierea dvs. a serverului este doar pentru uz personal de gestionare și nu va fi niciodată împărtășită.",
"serverEnabled": "Server pornit",
"serverEnabledDescription": "Porniți sau opriți serverul",
"serverAutostartLabel": "Pornire automată",
"serverAutostartDescription": "Alege dacă aplicația va lansa automat serverul la pornire",
"saveServerButton": "Salvați serverul",
"serversManagerTitleLong": "Serverele pe care le găzduiți",
"serversManagerTitleShort": "Servere",
"addServerTooltip": "Adăugați un server nou",
"unlockServerTip": "Creați sau accesați un server pentru a începe!",
"unlockProfileTip": "Creați sau accesați un profil pentru a începe!",
"enterServerPassword": "Introduceți parola pentru a debloca serverul",
"settingServers": "Găzduirea serverelor",
"settingServersDescription": "Experimentul serverelor de găzduire permite găzduirea și gestionarea serverelor Cwtch",
"copyAddress": "Copiați adresa",
"enterCurrentPasswordForDeleteServer": "Vă rugăm să introduceți parola actuală pentru a șterge acest server",
"deleteServerSuccess": "Serverul a fost șters cu succes",
"deleteServerConfirmBtn": "Sigur doriți sa ștergeți serverul",
"plainServerDescription": "Vă recomandăm să vă protejați serverele Cwtch cu o parolă. Dacă nu setați o parolă pe acest server, atunci oricine are acces la acest dispozitiva are acces la informații despre acest server, inclusiv la chei criptografice importante.",
"fileSavedTo": "Salvat în",
"fileInterrupted": "Întrerupt",
"fileCheckingStatus": "Se verifică starea descărcării",
"verfiyResumeButton": "Verificați\/reluați",
"copyServerKeys": "Copiați cheile",
"newMessagesLabel": "Mesaje noi",
"importLocalServerLabel": "Importați un server găzduit local",
"importLocalServerSelectText": "Selectați Server local",
"importLocalServerButton": "Importă %1",
"groupsOnThisServerLabel": "Grupurile în care mă aflu care sunt găzduite pe acest server",
"fieldDescriptionLabel": "Descriere",
"manageKnownServersButton": "Gestionați serverele cunoscute",
"displayNameTooltip": "Vă rugăm să introduceți un nume de afișat",
"manageKnownServersLong": "Gestionați serverele cunoscute",
"manageKnownServersShort": "Servere",
"serverMetricsLabel": "Datele serverului",
"serverTotalMessagesLabel": "Total mesaje",
"serverConnectionsLabel": "Conexiune",
"enableExperimentClickableLinks": "Activați linkurile pe care se poate da clic",
"experimentClickableLinksDescription": "Experimentul cu linkuri pe care se poate da clic vă permite să faceți clic pe adresele URL partajate în mesaje",
"settingImagePreviews": "Previzualizări de imagini și poze de profil",
"settingDownloadFolder": "Fișier de descărcări",
"themeNameCwtch": "Cwtch",
"themeNameWitch": "Vrăjitoare",
"themeNameVampire": "Vampir",
"themeNameGhost": "Fantomă",
"themeNamePumpkin": "Dovleac",
"themeNameMermaid": "Sirenă",
"themeNameMidnight": "Miezul nopţii",
"themeNameNeon1": "Neon1",
"themeNameNeon2": "Neon2",
"themeColorLabel": "Culori",
"loadingCwtch": "Se încarcă Cwtch...",
"storageMigrationModalMessage": "Migrarea profilurilor către un nou format de stocare. Va dura câteva minute...",
"msgFileTooBig": "Dimensiunea fișierului nu poate depăși 10 GB",
"msgConfirmSend": "Sunteți sigur că doriți să trimiteți",
"btnSendFile": "Trimiteți fișierul",
"msgAddToAccept": "Adăugați acest cont la contactele dvs. pentru a accepta acest fișier.",
"torSettingsEnabledAdvanced": "Activați configurarea avansată pentru Tor",
"torSettingsEnabledAdvancedDescription": "Utilizați un serviciu Tor existent pe sistemul dumneavoastră sau modificați parametrii serviciului Tor Cwtch.",
"torSettingsCustomSocksPort": "Port SOCKS personalizat",
"torSettingsCustomSocksPortDescription": "Utilizați un port personalizat pentru conexiunile de date la proxy-ul Tor",
"torSettingsCustomControlPort": "Port de control personalizat",
"torSettingsCustomControlPortDescription": "Utilizați un port personalizat pentru controlul conexiunilor la proxy-ul Tor",
"torSettingsUseCustomTorServiceConfiguration": "Utilizați o configurație personalizată a serviciului Tor (torrc)",
"torSettingsUseCustomTorServiceConfigurastionDescription": "Ignorați configurația implicită tor. Avertisment: Acest lucru ar putea fi periculos. Activați acest lucru doar dacă știți ce faceți.",
"torSettingsErrorSettingPort": "Numărul de port trebuie să fie între 1 și 65535",
"fileSharingSettingsDownloadFolderDescription": "Când fișierele sunt descărcate automat (de exemplu, imaginile, când sunt activate previzualizările de imagine), este necesară o locație implicită în care să se descarce fișierele.",
"fileSharingSettingsDownloadFolderTooltip": "Răsfoiți pentru a selecta un alt dosar implicit pentru fișierele descărcate.",
"labelACNCircuitInfo": "Informații despre circuitul ACN",
"descriptionACNCircuitInfo": "Informații detaliate despre metoda pe care rețeaua de comunicare anonimă o folosește pentru a se conecta la această conversație.",
"labelTorNetwork": "Rețeaua Tor",
"torSettingsEnableCache": "Stocheaza consensul Tor in memoria cache",
"torSettingsEnabledCacheDescription": "Stochează în memoria cache consensul Tor descărcat pentru a fi reutilizat data viitoare când se deschide Cwtch. Acest lucru va permite ca Tor să pornească mai repede. Când este dezactivat, Cwtch va curăța datele din memoria cache la pornire.",
"tooltipSelectACustomProfileImage": "Selectați o imagine de profil personalizată",
"notificationPolicyMute": "Mut",
"notificationPolicyOptIn": "Permite",
"notificationPolicyDefaultAll": "Toate implicite",
"conversationNotificationPolicyDefault": "Implicit",
"conversationNotificationPolicyOptIn": "Permite",
"conversationNotificationPolicyNever": "Niciodată",
"notificationPolicySettingLabel": "Politica de notificare",
"notificationContentSettingLabel": "Conținutul notificărilor",
"notificationPolicySettingDescription": "Controlează comportamentul implicit de notificare a aplicației",
"notificationContentSettingDescription": "Controlează conținutul notificărilor din conversație",
"settingGroupBehaviour": "Comportament",
"settingsGroupAppearance": "Aspect",
"settingsGroupExperiments": "Experimente",
"conversationNotificationPolicySettingLabel": "Politica de notificare a conversațiilor",
"notificationContentSimpleEvent": "Eveniment simplu",
"notificationContentContactInfo": "Informații despre conversație",
"newMessageNotificationSimple": "Mesaj nou",
"newMessageNotificationConversationInfo": "Mesaj nou de la %1"
}

View File

@ -1,64 +1,149 @@
{
"@@locale": "ru",
"@@last_modified": "2022-02-08T20:13:50+01:00",
"newMessageNotificationConversationInfo": "New Message From %1",
"newMessageNotificationSimple": "New Message",
"notificationContentContactInfo": "Conversation Information",
"notificationContentSimpleEvent": "Plain Event",
"conversationNotificationPolicySettingDescription": "Control this conversation's notification behaviour",
"conversationNotificationPolicySettingLabel": "Conversation Notification Policy",
"settingsGroupExperiments": "Experiments",
"settingsGroupAppearance": "Appearance",
"settingGroupBehaviour": "Behaviour",
"notificationContentSettingDescription": "Controls the contents of conversation notifications",
"notificationPolicySettingDescription": "Controls the default application notification behaviour",
"notificationContentSettingLabel": "Notification Content",
"notificationPolicySettingLabel": "Notification Policy",
"conversationNotificationPolicyNever": "Never",
"conversationNotificationPolicyOptIn": "Opt In",
"conversationNotificationPolicyDefault": "Default",
"notificationPolicyDefaultAll": "Default All",
"notificationPolicyOptIn": "Opt In",
"notificationPolicyMute": "Mute",
"tooltipSelectACustomProfileImage": "Select a Custom Profile Image",
"torSettingsEnabledCacheDescription": "Cache the current downloaded Tor consensus to reuse next time Cwtch is opened. This will allow Tor to start faster. When disabled, Cwtch will purge cached data on start up.",
"torSettingsEnableCache": "Cache Tor Consensus",
"labelTorNetwork": "Tor Network",
"descriptionACNCircuitInfo": "In depth information about the path that the anonymous communication network is using to connect to this conversation.",
"labelACNCircuitInfo": "ACN Circuit Info",
"fileSharingSettingsDownloadFolderTooltip": "Browse to select a different default folder for downloaded files.",
"fileSharingSettingsDownloadFolderDescription": "When files are downloaded automatically (e.g. image files, when image previews are enabled) a default location to download the files to is needed.",
"torSettingsErrorSettingPort": "Port Number must be between 1 and 65535",
"@@last_modified": "2022-12-05T21:06:07+01:00",
"profileEnabledDescription": "Start or stop the profile",
"profileAutostartDescription": "Controls if the profile will be automatically launched on startup",
"profileEnabled": "Enable",
"profileAutostartLabel": "Autostart",
"localePtBr": "Brazilian Portuguese \/ Português do Brasil",
"localeNl": "Dutch \/ Dutch",
"experimentQRCodeDescription": "QR Code support allows sharing data (such as profile identity) by QR Codes",
"enableExperimentQRCode": "QR Codes",
"shareMenuQRCode": "Show QR Code",
"shareProfileMenuTooltop": "Share profile via...",
"acquiredTicketsFromServer": "Antispam Challenge Complete",
"acquiringTicketsFromServer": "Performing Antispam Challenge",
"errorDownloadDirectoryDoesNotExist": "Filesharing cannot be enabled because the Download Folder has not been set, or is set to a folder that does not exist.",
"localeTr": "Турецкий \/ Türk",
"localeIt": "Итальянский \/ Italiano",
"tooltipUnpinConversation": "Unpin conversation from the top of \"Conversations\"",
"tooltipPinConversation": "Pin conversation to the top of \"Conversations\"",
"replyingTo": "Replying to %1",
"fileDownloadUnavailable": "This file appears unavailable for download. The sender may have disabled downloads for this file.",
"messageNoReplies": "There are no replies to this message.",
"headingReplies": "Replies",
"viewReplies": "View replies to this message",
"restartFileShare": "Start Sharing File",
"stopSharingFile": "Stop Sharing File",
"manageSharedFiles": "Manage Shared Files",
"exportProfile": "Экспорт профиля",
"notificationContentContactInfo": "Показать текст сообщения",
"notificationContentSimpleEvent": "Без подробностей",
"settingsGroupExperiments": "ЭКСПЕРИМЕНТЫ",
"settingsGroupAppearance": "НАСТРОЙКИ ОТОБРАЖЕНИЯ",
"settingGroupBehaviour": "ПОВЕДЕНИЕ",
"notificationContentSettingDescription": "Управление уведомлениями чатов",
"conversationNotificationPolicyNever": "Отключить",
"notificationPolicyDefaultAll": "По-умолчанию",
"descriptionFileSharing": "Данная функция позволяет обмениваться файлами напрямую с контактами и группами в Cwtch. Отправляемый файл будет напрямую скачиваться с вашего устройства через Cwtch, внутри сети Tor",
"descriptionExperiments": "Экспериментальные функции Cwtch это необязательные дополнительные функции, которые добавляют некоторые возможности, но не имеют такой же устойчивости к метаданным как если бы вы общались через традиционный чат 1 на 1.",
"profileOnionLabel": "Send this address to contacts you want to connect with",
"localeDe": "Немецкий \/ Deutsch",
"localeDa": "Датский язык \/ Dansk",
"settingImagePreviewsDescription": "Автоматическая загрузка изображений. Обратите внимание, что предварительный просмотр изображений часто может использоваться для взлома или деаномизации. Не используйте данную функцию если Вы контактируете с ненадежными контактами.",
"localePt": "Португальский язык \/ Portuguesa",
"tooltipBackToMessageEditing": "Назад к редактированию сообщений",
"tooltipItalicize": "Курсив",
"tooltipCode": "Код \/ Монопространство",
"localeEn": "Английский \/ English",
"localePl": "Польский \/ Polski",
"localeNo": "Норвежский \/ Norsk",
"tooltipSubscript": "Подстрочный",
"tooltipBoldText": "Смелый",
"localeCy": "Валлийский \/ Cymraeg",
"tooltipSuperscript": "Надстрочный",
"localeRo": "Румынский \/ Română",
"localeEl": "Греческий \/ Ελληνικά",
"localeLb": "Люксембургский \/ Lëtzebuergesch",
"tooltipPreviewFormatting": "Предварительный просмотр форматирования сообщений",
"tooltipStrikethrough": "Зачеркивание",
"localeFr": "Французский \/ Français",
"localeEs": "Испанский \/ Español",
"localeRU": "Русский \/ Русский",
"editProfile": "Изменить профиль",
"okButton": "OK",
"settingsAndroidPowerReenablePopup": "Невозможно перезапустить функцию оптимазации батарее для Cwtch. Перейдите в настройки Android \/ Настройки \/ Приложения и уведомления \/ Все приложения \/ Cwtch \/ Батарея \/ Эконоимя заряда \/ Отключена",
"settingAndroidPowerExemptionDescription": "Необязательно: в настройках Android исключите Cwtch в параметрах оптимизации батареи. Это улучшит стабильность за счёт небольшого расхода батареи..",
"settingAndroidPowerExemption": "Игнорировать оптимазацию батареи Android",
"thisFeatureRequiresGroupExpermientsToBeEnabled": "Чтобы использовать данную функцию, в настройках необходимо включить \"Эксперементы\", затем \"Групповые чаты\"",
"messageFormattingDescription": "Включите форматирование, если к примеру хотите использовать **жирный-текст** и *курсив*",
"formattingExperiment": "Форматирование сообщений",
"clickableLinkError": "Ошибка при попытке открыть данную ссылку",
"clickableLinksCopy": "Копировать ссылку",
"clickableLinkOpen": "Открыть ссылку",
"clickableLinksWarning": "Открытие данной ссылки приведет к запуску приложения за пределами Cwtch и может раскрыть метаданные или иным образом поставить под угрозу безопасность Cwtch. Открывайте ссылки только от тех людей, которым вы доверяете. Вы уверены, что хотите продолжить?",
"shuttingDownApp": "Выключение...",
"successfullyImportedProfile": "Профиль успешно импортирован: %profile",
"failedToImportProfile": "Ошибка импорта профиля",
"importProfileTooltip": "Используйте зашифрованную резервную копию Cwtch, чтобы перенести профиль, созданный на другом устройстве где установлен Cwtch..",
"importProfile": "Загрузить профиль",
"exportProfileTooltip": "Сделать зашифрованную резервную копию в файл. Его потом потом можно импортировать на других устройствах где установлен Cwtch.",
"conversationNotificationPolicySettingDescription": "Настройка уведомлений",
"conversationNotificationPolicySettingLabel": "Настройка уведомлений",
"notificationPolicySettingDescription": "Настройка уведомлений по-умолчанию",
"notificationContentSettingLabel": "Содержимое уведомления",
"notificationPolicySettingLabel": "Уведомления",
"conversationNotificationPolicyOptIn": "Включить",
"conversationNotificationPolicyDefault": "По-умолчанию",
"notificationPolicyOptIn": "Включить",
"notificationPolicyMute": "Без звука",
"tooltipSelectACustomProfileImage": "Сменить изображение профиля",
"torSettingsEnabledCacheDescription": "Кэшировать текущий загруженный узел Tor для повторного подключения при следующем запуске Cwtch. Это позволит Tor запускаться быстрее. Если этот параметр отключен, Cwtch будет очищать кэшированные данные при запуске.",
"torSettingsEnableCache": "Кешировать узлы Tor",
"descriptionACNCircuitInfo": "Подробная информация о соединении, который сеть анонимной связи использует для подключения к этому разговору.",
"labelACNCircuitInfo": "Информация о цепи ACN",
"fileSharingSettingsDownloadFolderTooltip": "Нажмите обзор чтобы выбрать другую папку по-умолчанию для загружаемых файлов.",
"fileSharingSettingsDownloadFolderDescription": "При включение функции автоматическое скачивание файлов (например картинок), необходимо указать папку для сохранения.",
"torSettingsErrorSettingPort": "Номер порта должен быть в диапазоне от 1 до 65535",
"torSettingsUseCustomTorServiceConfigurastionDescription": "Переопределение конфигурации Tor по умолчанию. Предупреждение: это может быть опасно. Если не знаете, что делаете, лучше не трогать!",
"torSettingsUseCustomTorServiceConfiguration": "Используйте пользовательскую конфигурацию службы Tor (torrc)",
"torSettingsCustomControlPortDescription": "Используйте настраиваемый порт для управления подключениями к прокси-серверу Tor.",
"torSettingsCustomControlPort": "Выберите контрольный порт",
"torSettingsCustomSocksPortDescription": "Используйте настраиваемый порт для подключения к прокси-серверу Tor.",
"torSettingsCustomSocksPort": "Выберите SOCKS порт",
"torSettingsEnabledAdvancedDescription": "Использовать установленную службу Tor в вашей системе или измените параметры службы Cwtch Tor",
"torSettingsEnabledAdvanced": "Включить расширенные настройки Tor",
"themeColorLabel": "Основной цвет темы",
"settingDownloadFolder": "Папка для загрузок",
"importLocalServerLabel": "Использовать локальный сервер",
"deleteServerConfirmBtn": "Вы точно хотите удалить сервер?",
"unlockProfileTip": "Создайте или импортируйте профиль, чтобы начать",
"unlockServerTip": "Создайте или импортируйте сервер, чтобы начать",
"saveServerButton": "Сохранить",
"serverEnabled": "Состояние сервера",
"settingUIColumnOptionSame": "Как в портретном режиме",
"settingUIColumnSingle": "Один столбец",
"createProfileToBegin": "Пожалуйста, создайте или импортируйте профиль, чтобы начать",
"yesLeave": "Удалить",
"leaveConversation": "Удалить",
"enableGroups": "Групповые чаты",
"settingTheme": "Ночной режим",
"addNewProfileBtn": "Создать новый профиль",
"savePeerHistoryDescription": "Определяет политику хранения или удаления сообщений с данным контактом",
"savePeerHistory": "Настройка истории",
"deleteConfirmLabel": "Введите УДАЛИТЬ, чтобы продолжить",
"deleteConfirmText": "УДАЛИТЬ",
"labelTorNetwork": "Сеть Tor",
"newMessageNotificationConversationInfo": "Новое сообщение от %1",
"newMessageNotificationSimple": "Новое сообщение",
"msgAddToAccept": "Добавьте учетную запись в контакты, чтобы принять этот файл.",
"btnSendFile": "Отправить файл",
"msgConfirmSend": "Вы уверены, что хотите отправить?",
"msgFileTooBig": "Размер файла не должен превышать 10GB",
"storageMigrationModalMessage": "Перенос профилей в новый формат хранения. Это может занять несколько минут...",
"loadingCwtch": "Загрузка Cwtch...",
"themeColorLabel": "Светлая или Темная тема",
"settingDownloadFolder": "Папка для скачивания",
"serverConnectionsLabel": "Всего соединений:",
"serverTotalMessagesLabel": "Всего сообщений:",
"plainServerDescription": "Мы настоятельно рекомендуем защитить свой Onion сервер Cwtch паролем. Если Вы этого не сделаете, то любой у кого окажется доступ к серверу, сможет получить доступ к информации на этом сервере включая конфиденциальные криптографические ключи.",
"settingServersDescription": "Экспериментальная функция которая позволяет добавлять сервер для Cwtch в скрытой сети Tor. В меню появится дополнительная опция Серверы",
"streamerModeLabel": "Режим маскировки",
"settingUIColumnSingle": "Один стобец",
"settingUIColumnLandscape": "Столбцы чатов в ландшафтном режиме",
"settingUIColumnPortrait": "Столбцы чатов в портретном режиме",
"resetTor": "Сброс",
"descriptionBlockUnknownConnections": "Если включить этот параметр, все соединения от людей, не состоящих в ваших контактах будут отклонены.",
"descriptionExperimentsGroups": "Данная экспериментальная функция позволяет создавать группы в Cwtch, чтобы облегчить Вам общение с более чем одним контактом. Для создания групп необходимо включить функцию создания сервера и создать сервер в главном меню программы.",
"descriptionExperiments": "Экспериментальные функции Cwtch это необязательные дополнительные функции, которые добавляют некоторые возможности, но не имеют такой же устойчивости к метаданным как если бы вы общались через традиционный чат 1 на 1..",
"settingLanguage": "Выбрать язык",
"profileName": "Введите имя...",
"torSettingsUseCustomTorServiceConfigurastionDescription": "Override the default tor configuration. Warning: This could be dangerous. Only turn this on if you know what you are doing.",
"torSettingsUseCustomTorServiceConfiguration": "Use a Custom Tor Service Configuration (torrc)",
"torSettingsCustomControlPortDescription": "Use a custom port for control connections to the Tor proxy",
"torSettingsCustomControlPort": "Custom Control Port",
"torSettingsCustomSocksPortDescription": "Use a custom port for data connections to the Tor proxy",
"torSettingsCustomSocksPort": "Custom SOCKS Port",
"torSettingsEnabledAdvancedDescription": "Use an existing Tor service on your system, or change the parameters of the Cwtch Tor Service",
"torSettingsEnabledAdvanced": "Enable Advanced Tor Configuration",
"themeNameNeon2": "Неон2",
"themeNameNeon1": "Неон1",
"themeNameMidnight": "Полночь",
@ -68,7 +153,6 @@
"themeNameVampire": "Вампир",
"themeNameWitch": "Ведьма",
"themeNameCwtch": "Cwtch",
"settingImagePreviewsDescription": "Автоматическая загрузка изображений. Обратите внимание, что предварительный просмотр изображений часто может использоваться для взлома или деаномизации. Не используйте данную функцию если Вы контактируете с ненадежными контактами. Аватары профиля запланированы для версии Cwtch 1.6.",
"settingImagePreviews": "Предпросмотр изображений и фотографий профиля",
"experimentClickableLinksDescription": "Экспериментальная функция которая позволяет нажимать на URL адреса в сообщениях",
"enableExperimentClickableLinks": "Включить кликабельные ссылки",
@ -81,49 +165,39 @@
"groupsOnThisServerLabel": "Группы, в которых я нахожусь, размещены на этом сервере",
"importLocalServerButton": "Импорт %1",
"importLocalServerSelectText": "Выбрать локальный сервер",
"importLocalServerLabel": "Импортировать локальный сервер",
"newMessagesLabel": "Новое сообщение",
"localeRU": "Русский",
"profileOnionLabel": "Send this address to contacts you want to connect with",
"savePeerHistory": "Хранить историю",
"saveBtn": "Сохранить",
"networkStatusOnline": "В сети",
"copiedToClipboardNotification": "Скопировано в буфер обмена",
"defaultProfileName": "Алиса",
"deleteBtn": "Удалить",
"bulletinsBtn": "Бюллетень",
"groupNameLabel": "Имя группы",
"serverLabel": "Сервер",
"copyBtn": "Копировать",
"copiedToClipboardNotification": "Скопировано в буфер обмена",
"copyServerKeys": "Копировать ключи",
"verfiyResumeButton": "Проверить\/продолжить",
"fileCheckingStatus": "Проверка статуса загрузки",
"fileInterrupted": "Прервано",
"fileSavedTo": "Сохранить в",
"encryptedServerDescription": "Шифрование сервера паролем защитит его от других людей у которых может оказаться доступ к этому устройству, включая Onion адрес сервера. Зашифрованный сервер нельзя расшифровать, пока не будет введен правильный пароль разблокировки.",
"deleteServerConfirmBtn": "Точно удалить сервер?",
"deleteServerSuccess": "Сервер успешно удален",
"enterCurrentPasswordForDeleteServer": "Пожалуйста, введите пароль сервера, чтобы удалить его",
"copyAddress": "Копировать адрес",
"settingServers": "Использовать серверы",
"enterServerPassword": "Введите пароль для разблокировки сервера",
"unlockProfileTip": "Создайте или разблокируйте профиль, чтобы начать",
"unlockServerTip": "Создайте или разблокируйте сервер, чтобы начать",
"addServerTooltip": "Добавить сервер",
"serversManagerTitleShort": "Серверы",
"serversManagerTitleLong": "Личные серверы",
"saveServerButton": "Сохранить сервер",
"serverAutostartDescription": "Автозапуск сервера при старте программы",
"serverAutostartLabel": "Автозапуск",
"serverEnabledDescription": "Запустить или остановить сервер",
"serverEnabled": "Сервер запущен",
"serverDescriptionDescription": "Описание видите только Вы. Сделано для удобства",
"serverDescriptionLabel": "Описание сервера",
"serverAddress": "Адрес сервера",
"editServerTitle": "Изменить сервер",
"addServerTitle": "Добавить сервер",
"titleManageProfilesShort": "Профили",
"descriptionFileSharing": "Данная функция позволяет обмениваться файлами напрямую с контактами и группами в Cwtch. Отправляемый файл будет напрямую скачиваться с вашего устройства через Cwtch.",
"settingFileSharing": "Передача файлов",
"tooltipSendFile": "Отправить файл",
"messageFileOffered": "Контакт предлагает загрузить вам файл",
@ -145,10 +219,8 @@
"addContactConfirm": "Добавить контакт %1",
"addContact": "Добавить контакт",
"contactGoto": "Перейти к сообщению от %1",
"settingUIColumnOptionSame": "Как в настройках портретного режима",
"settingUIColumnDouble14Ratio": "Двойной (1:4)",
"settingUIColumnDouble12Ratio": "Двойной (1:2)",
"localePl": "Польский",
"tooltipRemoveThisQuotedMessage": "Удалить цитируемое сообщение.",
"tooltipReplyToThisMessage": "Ответить на это сообщение",
"tooltipRejectContactRequest": "Отклонить запрос в контакты.",
@ -167,7 +239,6 @@
"debugLog": "Влючить отладку через консоль",
"torNetworkStatus": "Статус сети Tor",
"addContactFirst": "Добавьте или выберите контакт, чтобы начать чат.",
"createProfileToBegin": "Пожалуйста, создайте или разблокируйте профиль, чтобы начать",
"nickChangeSuccess": "Имя профиля успешно изменено",
"addServerFirst": "Перед созданием группы, необходимо создать сервер",
"deleteProfileSuccess": "Профиль успешно удален",
@ -182,16 +253,9 @@
"accepted": "Принять!",
"chatHistoryDefault": "Этот чат будет удален после закрытия Cwtch! Историю сообщений можно включить для каждого чата отдельно через меню настроек в правом верхнем углу..",
"newPassword": "Новый пароль",
"yesLeave": "Да, оставить этот чат",
"reallyLeaveThisGroupPrompt": "Вы уверены, что хотите закончить этот разговор? Все сообщения будут удалены.",
"leaveConversation": "Да, оставить этот чат",
"inviteToGroup": "Вас пригласили присоединиться к группе:",
"titleManageServers": "Управление серверами",
"dateNever": "Никогда",
"dateLastYear": "Прошлый год",
"dateYesterday": "Вчера",
"dateLastMonth": "Прошлый месяц",
"dateRightNow": "Прямо сейчас",
"successfullAddedContact": "Успешно добавлен",
"titleManageProfiles": "Управление профилями Cwtch",
"tooltipUnlockProfiles": "Разблокировать зашифрованные профили, введя их пароль.",
@ -202,9 +266,6 @@
"invalidImportString": "Недействительная строка импорта",
"conversationSettings": "Настройки чата",
"enterCurrentPasswordForDelete": "Пожалуйста, введите текущий пароль, чтобы удалить этот профиль.",
"enableGroups": "Включить Групповые чаты",
"localeIt": "Итальянский",
"localeEs": "Испанский",
"todoPlaceholder": "Выполняю...",
"addNewItem": "Добавить новый элемент в список",
"addListItem": "Добавить новый элемент",
@ -222,13 +283,8 @@
"experimentsEnabled": "Включить Экспериментальные функции",
"themeDark": "Темная",
"themeLight": "Светлая",
"settingTheme": "Тема",
"largeTextLabel": "Большой",
"settingInterfaceZoom": "Уровень масштабирования",
"localeDe": "Немецкий",
"localePt": "Португальский",
"localeFr": "Французский",
"localeEn": "Английский",
"blockUnknownLabel": "Блокировать неизвестные контакты",
"zoomLabel": "Масштаб интерфейса (в основном влияет на размеры текста и кнопок)",
"versionBuilddate": "Версия: %1 Сборка от: %2",
@ -239,10 +295,7 @@
"error0ProfilesLoadedForPassword": "0 профилей, загруженных с этим паролем",
"password": "Пароль",
"enterProfilePassword": "Введите пароль для просмотра ваших профилей",
"addNewProfileBtn": "Добавить новый профиль",
"deleteConfirmText": "УДАЛИТЬ",
"deleteProfileConfirmBtn": "Действительно удалить профиль?",
"deleteConfirmLabel": "Введите DELETE чтобы продолжить",
"deleteProfileBtn": "Удалить профиль",
"passwordChangeError": "Ошибка при смене пароля: Введенный пароль отклонен",
"passwordErrorMatch": "Пароли не совпадают",
@ -256,13 +309,11 @@
"noPasswordWarning": "Отсутствие пароля в этой учетной записи означает, что все данные, хранящиеся локально, не будут зашифрованы",
"radioNoPassword": "Незашифрованный (без пароля)",
"radioUsePassword": "Пароль",
"editProfile": "Изменить профиль",
"newProfile": "Новый профиль",
"editProfileTitle": "Изменить профиль",
"addProfileTitle": "Добавить новый профиль",
"unblockBtn": "Разблокировать контакт",
"dontSavePeerHistory": "Удалить историю",
"savePeerHistoryDescription": "Определяет политуку хранения или удаления переписки с данным контактом.",
"blockBtn": "Заблокировать контакт",
"displayNameLabel": "Отображаемое имя",
"addressLabel": "Адрес",
@ -273,7 +324,6 @@
"acceptGroupBtn": "Принять",
"acceptGroupInviteLabel": "Хотите принять приглашение в",
"newGroupBtn": "Создать новую группу",
"copiedClipboardNotification": "Скопировано в буфер обмена",
"peerOfflineMessage": "Контакт не в сети, сообщения не могут быть отправлены",
"peerBlockedMessage": "Контакт заблокирован",
"pendingLabel": "Ожидаемый",
@ -295,12 +345,6 @@
"serverInfo": "Информация о сервере",
"invitationLabel": "Приглашение",
"search": "Поиск...",
"cycleColoursDesktop": "Нажмите, чтобы переключать цвета.\nПравый клик чтобы сбросить.",
"cycleColoursAndroid": "Нажмите, чтобы переключать цвета.\nНажмите и удерживайте, чтобы сбросить.",
"cycleMorphsDesktop": "Нажмите, чтобы просмотреть формы.\nПравый клик чтобы сбросить.",
"cycleMorphsAndroid": "Нажмите, чтобы просмотреть формы.\nНажмите и удерживайте, чтобы сбросить.",
"cycleCatsDesktop": "Нажмите, чтобы просмотреть категории.\nПравый клик чтобы сбросить.",
"cycleCatsAndroid": "Нажмите, чтобы просмотреть категории.\nНажмите и удерживайте, чтобы сбросить.",
"blocked": "Заблокировано",
"pasteAddressToAddContact": "Вставьте адрес cwtch, приглашение или пакет ключей здесь, чтобы добавить их в контакты",
"titlePlaceholder": "заговолок...",
@ -312,7 +356,6 @@
"groupAddr": "Адрес",
"invitation": "Приглашение",
"server": "Сервер",
"groupName": "Имя группы",
"peerName": "Имя",
"peerAddress": "Адрес",
"joinGroupTab": "Присоединиться к группе",

366
lib/l10n/intl_sk.arb Normal file
View File

@ -0,0 +1,366 @@
{
"@@locale": "sk",
"@@last_modified": "2023-05-0T21:06:07+01:00",
"profileEnabledDescription": "Spustiť alebo zastaviť profil",
"profileAutostartDescription": "Ovláda či bude profil automaticky spustený pri štarte",
"profileEnabled": "Povoliť",
"profileAutostartLabel": "Spúšťať spoločne zo systémom",
"localePtBr": "Brazílska Portugalčina \/ Português do Brasil",
"localeNl": "Holandsky \/ Dutch",
"experimentQRCodeDescription": "QR Kód podpora povoluje zdielanie dát (ako na príklad identitu profilu) pomocou QR Kódou",
"enableExperimentQRCode": "QR Kódy",
"shareMenuQRCode": "Ukázať QR Kód",
"shareProfileMenuTooltop": "Zdielať profil skrz...",
"acquiredTicketsFromServer": "Antispam Challenge Dokončená",
"acquiringTicketsFromServer": "Vykonávam Antispam Challenge",
"errorDownloadDirectoryDoesNotExist": "Zdielanie súborov nemôže byť povolené pretože zložka Stiahnuté nebola vybraná, alebo ukazuje na neexistujúcu zložku.",
"localeIt": "Taliansky \/ Italiano",
"localeTr": "Turecky \/ Türk",
"tooltipUnpinConversation": "Unpinnúť konverzáciu z vrchu \"Konverzácií\"",
"tooltipPinConversation": "Pinnúť konverzáciu na vrchol\"Konverzácií\"",
"replyingTo": "Odpovedá %1",
"fileDownloadUnavailable": "Zdá sa že súbor je nedostupný. Odosielateľ mohol vypnúť sťahovanie pre tento súbor.",
"messageNoReplies": "Pre túto správu sa nenašli žiadne odpovede.",
"headingReplies": "Odpovede",
"viewReplies": "Zobraziť odpovede pre túto správu",
"restartFileShare": "Začať Zdielať Súbor",
"stopSharingFile": "Zastaviť Zdielanie Súboru",
"manageSharedFiles": "Spravovať Zdielané Súbory",
"localeDe": "Nemecky \/ Deutsch",
"localeEn": "Anglicky \/ English",
"localeLb": "Luxembursky \/ Lëtzebuergesch",
"localeNo": "Nórsky \/ Norsk",
"localeEl": "Grécky\/ Ελληνικά",
"localePl": "Polsky \/ Polski",
"localeRo": "Rumunsky \/ Română",
"localeRU": "Rusky \/ Русский",
"localeEs": "Španielsky \/ Español",
"localeDa": "Dánsky \/ Dansk",
"localePt": "Portugalsky \/ Portuguesa",
"localeFr": "Francúzsky \/ Français",
"localeCy": "Velšsky \/ Cymraeg",
"settingImagePreviewsDescription": "Obrázky a profilovky budú sťahované a zobrazované automaticky. Odporúčame aby ste tento experiment nezapínali v prípade že používate Cwtch s kontaktmi ktorým nedôverujete.",
"tooltipPreviewFormatting": "Zobrazovať Formátovanie Správy v Reálnom Čase",
"tooltipCode": "Kód \/ Monospace",
"tooltipStrikethrough": "Prečiarknuté",
"tooltipSubscript": "Index",
"tooltipSuperscript": "Horný index",
"tooltipItalicize": "Naklonené písmo",
"tooltipBackToMessageEditing": "Späť k Editovaniu Správy",
"tooltipBoldText": "Hrubé písmo",
"okButton": "OK",
"settingsAndroidPowerReenablePopup": "Nedokážem vrátiť Optimalizáciu Batérie do pôvodného stavu skrz Cwtch. Prosím choďte do Android \/ Nastavenia \/ Aplikácie\/ Cwtch \/ Batéria a nastavte Využitie na 'Optimalizovať'",
"settingAndroidPowerExemptionDescription": "Dobrovoľné: Požiadať Android o neoptimalizovanie energie pre Cwtch. Bude to mať za následok vyššiu spotrebu batérie.",
"settingAndroidPowerExemption": "Ignorovanie Optimalizácie Batérie pre Android"
"thisFeatureRequiresGroupExpermientsToBeEnabled": "Táto funkcia vyžaduje aby Experiment Skupiny bol povolený v Nastaveniach",
"messageFormattingDescription": "Povoliť rozšírené formátovanie textu v zobrazovaných správach. Na príklad: **hrubé** a *naklonené písmo*",
"formattingExperiment": "Formátovanie Správy",
"clickableLinkError": "Chyba pri otváraní linku" ,
"clickableLinksWarning": "Otvorením tohoto linku sa spustí aplikácia mimo Cwtch, ktorá môže odhaliť metadáta alebo iným spôsobom ohroziť bezpečnosť Cwtch. Otvárajte linky iba od ľudí ktorým veríte. Ste si istý že chcete pokračovať?",
"clickableLinksCopy": "Kopírovať link",
"clickableLinkOpen": "Otvoriť link",
"shuttingDownApp": "Vypínam...",
"successfullyImportedProfile": "Úspešne Importovaný Profil: %profile",
"failedToImportProfile": "Chyba Pri Importovaní Profilu",
"importProfileTooltip": "Použiť šifrovanú Cwtch zálohu pre importovanie profilu vytvoreného na inej instancii Cwtch.",
"importProfile": "Importovať Profil",
"exportProfileTooltip": "Zálohovať tento profil do šifrovaného súboru. Tento šifrovaný profil môže byť importovaný do inej Cwtch instancie.",
"exportProfile": "Exportovať Profil",
"conversationNotificationPolicySettingDescription": "Ovládať správanie notifikácií pre túto konverzáciu",
"newMessageNotificationConversationInfo": "Nová Správa Od %1",
"newMessageNotificationSimple": "Nová Správa",
"notificationContentContactInfo": "Informácie o Konverzácii",
"notificationContentSimpleEvent": "Obyčajná Udalosť",
"conversationNotificationPolicySettingLabel": "Pravidlá pre notifikácie konverzácií",
"settingsGroupExperiments": "Experimenty",
"settingsGroupAppearance": "Vzhľad",
"settingGroupBehaviour": "Správanie",
"notificationContentSettingDescription": "Ovláda obsah notifikácií konverzácie",
"notificationPolicySettingDescription": "Ovláda predvolené správanie notifikácií aplikácie",
"notificationContentSettingLabel": "Obsah notifikácií",
"notificationPolicySettingLabel": "Pravidlá pre notifikácie",
"conversationNotificationPolicyNever": "Nikdy",
"conversationNotificationPolicyOptIn": "Opt In",
"conversationNotificationPolicyDefault": "Predvolené",
"notificationPolicyDefaultAll": "Vrátiť Všetko na Predvolené",
"notificationPolicyOptIn": "Opt In",
"notificationPolicyMute": "Stlmiť konverzáciu",
"tooltipSelectACustomProfileImage": "Vybrať Vlastnú Profilovú Fotku",
"editProfile": "Upraviť Profil",
"torSettingsEnabledCacheDescription": "Ukladať aktuálny Tor consensus pre opätovné využitie pri ďalšom otvorení Cwtch. Toto umožní Toru spúštať sa rýchlejšie. Ak je toto nastavenie vypnuté, Cwtch sa zbaví uložených dát pri každom štarte.",
"torSettingsEnableCache": "Ukladať Tor Consensus",
"labelTorNetwork": "Sieť Tor",
"descriptionACNCircuitInfo": "Detailné informácie o ceste ktorú využíva anonymná komunikačná sieť cez ktorú ste pripojený k tejto konverzácii.",
"labelACNCircuitInfo": "Informácie o ACN Circuit",
"fileSharingSettingsDownloadFolderTooltip": "Vybrať inú predvolenú zložku pre stiahnuté súbory.",
"fileSharingSettingsDownloadFolderDescription": "Keď sú súbory sťahované automaticky (Na príklad: obrázky, ktorých náhľady sú povolené), je potrebná predvolená zložka pre ich Stiahnutie.",
"torSettingsErrorSettingPort": "Číslo Portu musí byť medzi 1 a 65535",
"settingTheme": "Použiť Svetlý Režim", "torSettingsUseCustomTorServiceConfiguration": "Použiť vlastnú Konfiguráciu Služby Tor (torrc)",
"torSettingsUseCustomTorServiceConfigurastionDescription": "Prepísať predvolenú tor konfiguráciu. Pozor: Tento úkon môže byť nebezpečný. Zapnite toto nastavenie iba ak viete čo robíte.",
"torSettingsCustomControlPortDescription": "Použiť vlastný port pre ovládanie pripojení k Tor proxy",
"torSettingsCustomControlPort": "Iný Control Port",
"torSettingsCustomSocksPortDescription": "Použiť iný port pre dátové pripojenia k Tor proxy",
"torSettingsCustomSocksPort": "Vlastný SOCKS Port",
"torSettingsEnabledAdvancedDescription": "Použiť Tor službu na vašom systéme, alebo zmeniť parametre Cwtch Tor Služby",
"torSettingsEnabledAdvanced": "Povoliť Rozšírenú Konfiguráciu Tor",
"msgAddToAccept": "Pridajte užívatela do kontaktov aby ste mohli prijať tento súbor.",
"btnSendFile": "Odoslať Súbor",
"msgConfirmSend": "Ste si istý že chcete poslať",
"msgFileTooBig": "Veľkosť súboru nemôže presiahnuť 10 GB",
"storageMigrationModalMessage": "Prenášam profily do nového formátu. Môže to potrvať niekoľko minút...",
"loadingCwtch": "Načítavam Cwtch...",
"themeColorLabel": "Farebný Motív",
"themeNameNeon2": "Neón2",
"themeNameNeon1": "Neón1",
"themeNameMidnight": "Polnoc",
"themeNameMermaid": "Morská víla",
"themeNamePumpkin": "Tekvica",
"themeNameGhost": "Duch",
"themeNameVampire": "Upír",
"themeNameWitch": "Čarodejnica",
"themeNameCwtch": "Cwtch",
"settingDownloadFolder": "Zložka Stiahnuté",
"settingImagePreviews": "Náhľady Obrázkou a Profilové Obrázky",
"experimentClickableLinksDescription": "Experiment kliknutie na linky vám dovoluje kliknúť na link zdielaný v správach",
"enableExperimentClickableLinks": "Povoliť Kliknutie na Linky",
"serverConnectionsLabel": "Spojenie",
"serverTotalMessagesLabel": "Všetky Správy",
"serverMetricsLabel": "Štatistiky Serveru",
"manageKnownServersShort": "Servery",
"manageKnownServersLong": "Spravovať Známe Servery",
"displayNameTooltip": "Prosím zadajte zobrazované meno",
"manageKnownServersButton": "Spravovať Známe Servery",
"fieldDescriptionLabel": "Popis",
"groupsOnThisServerLabel": "Skupiny ktorých som členom a sú hostované na tomto servery",
"importLocalServerButton": "Importovať %1",
"importLocalServerSelectText": "Zvoliť Lokálny Server",
"importLocalServerLabel": "Importovať lokálne hostovaný server",
"savePeerHistoryDescription": "Určuje či vymazať všetku históriu spojenú s kontaktom",
"newMessagesLabel": "Nové správy",
"copyServerKeys": "Kopírovať klúče",
"verfiyResumeButton": "Overiť\/Pokračovať",
"fileCheckingStatus": "Kontrolujem stav sťahovania",
"fileInterrupted": "Prerušené",
"fileSavedTo": "Uložené do",
"plainServerDescription": "Odporúčame aby ste si ochránili Cwtch servery heslom. Ak si na servery nenastavíte heslo, každý s prístupom k tomuto zariadeniu bude schopný vidieť informácie o danom servry, vrátane citlivých kryptografických klúčov.",
"encryptedServerDescription": "Šifrovanie serveru heslom ho chráni pred ostatnými ľuďmi ktorý by mohli toto zariadenie využívať taktiež. Šifrované servery sa nedajú odšifrovať, zobraziť alebo sprístupniť pokiaľ nie je zadané správne heslo.",
"deleteServerConfirmBtn": "Vážne vymazať server?",
"deleteServerSuccess": "Server bol úspešne vymazaný",
"enterCurrentPasswordForDeleteServer": "Prosím zadajte aktuálne heslo pre zmazanie tohoto serveru",
"copyAddress": "Kopírovať Adresu",
"settingServersDescription": "Experiment hostovanie serverov povoluje hostovanie a správu Cwtch serverov",
"settingServers": "Hostujúce Servery",
"enterServerPassword": "Zadajte heslo pre odomknutie serveru",
"unlockProfileTip": "Na začiatok si prosím vytvorte alebo odomknite profil!",
"unlockServerTip": "Prosím vytvorte alebo odomknite server pre začatie!",
"addServerTooltip": "Pridať nový server",
"serversManagerTitleShort": "Servery",
"serversManagerTitleLong": "Servery Ktoré Hostujete",
"saveServerButton": "Uložiť Server",
"serverAutostartDescription": "Ovláda či aplikácia automaticky spustí server pri štarte",
"serverAutostartLabel": "Automaticky spúštať",
"serverEnabledDescription": "Spustiť alebo zastaviť server",
"serverEnabled": "Server Povolený",
"serverDescriptionDescription": "Váš lokálny popis tohoto servera. Nebude nikde zdielaný.",
"serverDescriptionLabel": "Popis Servera",
"serverAddress": "Adresa Servera",
"editServerTitle": "Upraviť Server",
"addServerTitle": "Pridať Server",
"titleManageProfilesShort": "Profily",
"descriptionStreamerMode": "Po zapnutí toto nastavenie urobí aplikáciu vizuálne súkromejšou. Na príklad: zakrije niektoré položky, ako profil a adresy kontaktov ",
"descriptionFileSharing": "Experiment zdielanie súborov vám umožňuje odosielať a príjmať súbory od Cwtch kontaktov a skupín. Majte na pamäti že zdielanie súboru zo skupinou znamená priame spojenie s členmy skupiny, aby súbor mohli stiahnuť.",
"settingFileSharing": "Zdielanie Súborov",
"tooltipSendFile": "Poslať Súbor",
"messageFileOffered": "Kontakt vám chce poslať súbor",
"messageFileSent": "Poslali ste súbor",
"messageEnableFileSharing": "Povolte experiment zdielanie súborov pre zobrazenie tejto správy.",
"labelFilesize": "Veľkosť",
"labelFilename": "Meno súboru",
"downloadFileButton": "Stiahnuť",
"openFolderButton": "Otvoriť Zložku",
"retrievingManifestMessage": "Získavam informácie o súbore...",
"streamerModeLabel": "Streamer\/Prezentačný Mód",
"archiveConversation": "Archivovať túto konverzáciu",
"profileOnionLabel": "Poslať túto adresu ľuďom s ktorými sa chcete spojiť",
"addPeerTab": "Pridať kontakt",
"addPeer": "Pridať Kontakt",
"peerNotOnline": "Kontakt je offline. Aplikácie nemôžu byť momentálne použité.",
"peerBlockedMessage": "Kontakt je zablokovaný",
"peerOfflineMessage": "Kontakt je offline. Správý nemôžu byť doručené",
"blockBtn": "Zablokovať Kontakt",
"savePeerHistory": "Uložiť Históriu",
"dontSavePeerHistory": "Vymazať Históriu",
"unblockBtn": "Odblokovať Kontakt",
"blockUnknownLabel": "Zablokovať Neznáme Kontakty",
"blockUnknownConnectionsEnabledDescription": "Spojenia od neznámich kontaktov sú zablokované. Môžete to zmeniť v nastaveniach",
"networkStatusConnecting": "Pripájam sa k sieti a kontaktom...",
"showMessageButton": "Ukázať Správu",
"blockedMessageMessage": "Táto správa je od profilu ktorý ste zablokovali.",
"placeholderEnterMessage": "Napísať správu...",
"plainProfileDescription": "Odporúčame aby ste si ochránili Cwtch profily heslom. Ak si na profile nenastavíte heslo, každý s prístupom k tomuto zariadeniu bude schopný vidieť informácie o danom profile, jeho kontakty, odoslané správy a citlivé kryptografické klúče.",
"encryptedProfileDescription": "Šifrovanie profilu heslom ho chráni pred ostatnými ľuďmi ktorí by mohli taktiež používať toto zariadenie. Šifrované profily nemôžu byť dešífrované, zobrazené alebo sprístupnené pokiaľ nie je zadané správne heslo.",
"addContactConfirm": "Pridať kontakt %1",
"addContact": "Pridať kontakt",
"contactGoto": "Prejsť ku konverzácii s %1",
"settingUIColumnOptionSame": "Rovnaké ako nastavenie portrétového režimu",
"settingUIColumnDouble14Ratio": "Dvojité (1:4)",
"settingUIColumnDouble12Ratio": "Dvojité(1:2)",
"settingUIColumnSingle": "Jeden",
"settingUIColumnLandscape": "UI Stĺpiky v Móde na Šírku",
"settingUIColumnPortrait": "UI Stĺpiky v Režime na Výšku",
"tooltipRemoveThisQuotedMessage": "Odstrániť citovanú správu",
"tooltipReplyToThisMessage": "Odpovedať na túto správu",
"tooltipRejectContactRequest": "Odmietnuť túto žiadosť o kontakt",
"tooltipAcceptContactRequest": "Príjmuť túto žiadosť o kontakt.",
"notificationNewMessageFromGroup": "Nová správa v skupine!",
"notificationNewMessageFromPeer": "Nová správa od kontaktu!",
"tooltipHidePassword": "Skryť Heslo",
"tooltipShowPassword": "Zobraziť Heslo",
"serverNotSynced": "Synchronizujem nové správy (Môže to chvíľu trvať)...",
"groupInviteSettingsWarning": "Boli ste pozvaný do skupiny! Prosím povolte Experiment Skupinový Chat v Nastaveniach pre zobrazenie tejto Pozvánky.",
"shutdownCwtchAction": "Vypnúť Cwtch",
"shutdownCwtchDialog": "Ste si istý že chcete vypnúť Cwtch? Všetky spojenia budú ukončené a aplikácia sa zatvory.",
"shutdownCwtchDialogTitle": "Vypnúť Cwtch?",
"shutdownCwtchTooltip": "Vypnúť Cwtch",
"malformedMessage": "Poškodená správa",
"profileDeleteSuccess": "Profil bol úspešne vymazaný",
"debugLog": "Zapnúť console debug logging",
"torNetworkStatus": "Status siete Tor",
"addContactFirst": "Pridaje alebo vyberte kontakt pre začatie chatu.",
"createProfileToBegin": "Prosím vytvorte alebo odomknite profil",
"nickChangeSuccess": "Meno profilu úspešne zmenené",
"addServerFirst": "Musíte pridať server pred tým ako môžete vytvoriť skupinu",
"deleteProfileSuccess": "Profil úspešne vymazaný",
"sendInvite": "Poslať kontakt alebo skupinovú pozvánku",
"sendMessage": "Poslať Správu",
"cancel": "Zrušiť",
"resetTor": "Resetovať",
"torStatus": "Tor Status",
"torVersion": "Tor Verzia",
"sendAnInvitation": "Poslali ste pozvánku k: ",
"contactSuggestion": "Toto je návrh kontantu pre:",
"rejected": "Zamietnuté!",
"accepted": "Akceptované!",
"chatHistoryDefault": "Táto konverzácia bude vymazaná po zavretí Cwtch! História správ môže byť povolená pre každý kontakt zvlášť v menu Nastavení v pravom hornom rohu.",
"newPassword": "Nové Heslo",
"yesLeave": "Áno, Opustiť Túto Konverzáciu",
"reallyLeaveThisGroupPrompt": "Ste si istý že chcete opustiť túto konverzáciu? Všetky správy a atribúty budú vymazané.",
"leaveConversation": "Opustiť Túto Konverzáciu",
"inviteToGroup": "Boli ste pozvaný do skupiny:",
"pasteAddressToAddContact": "Paste a cwtch address, invitation or key bundle here to add a new conversation Vložte cwtch adresu, pozvánku alebo key bundle pre pridanie novej konverzácie",
"tooltipAddContact": "Pridať nový kontakt alebo konverzáciu",
"titleManageContacts": "Konverzácie",
"titleManageServers": "Spravovať Servery",
"successfullAddedContact": "Úspešne pridané",
"descriptionBlockUnknownConnections": "Ak zapnuté, toto nastavenie automaticky zavrie spojenia od Cwtch užívateľov ktorých ste nepridali do listu kontaktov.",
"descriptionExperimentsGroups": "Experiment skupiny umožnuje Cwtch spojenie s nedôveryhodnou severovou infraštruktúrou aby mohol naviazať spojenie s viac ako jedným kontaktom.",
"descriptionExperiments": "Cwtch experimenty sú dobrovoľné, opt-in funkcie ktoré pridávajú Cwtch funkcionalitu pri ktorej nie je súkromie na prvom mieste, tak ako u 1:1 metadátam odolných chatou. Na príklad: skupinový chat, integrácia botou, atď.",
"titleManageProfiles": "Spravovať Cwtch Profily",
"tooltipUnlockProfiles": "Otvoriť šifrované profily zadaním ich hesla",
"tooltipOpenSettings": "Otvoriť panel nastavení",
"invalidImportString": "Nesprávna adresa",
"contactAlreadyExists": "Kontakt Už Existuje",
"conversationSettings": " Nastavenia Konverzácie",
"enterCurrentPasswordForDelete": "Prosím zadajte heslo pre vymazanie profilu.",
"enableGroups": "Povoliť Skupinový Chat",
"experimentsEnabled": "Povoliť Experimenty",
"addListItem": "Pridať novú položku",
"addNewItem": "Pridať novú položku do zoznamu",
"todoPlaceholder": "Urobiť neskôr...",
"newConnectionPaneTitle": "Nové Spojenie",
"networkStatusOnline": "Online",
"networkStatusAttemptingTor": "Pokúšam sa spojiť s Tor sieťou",
"networkStatusDisconnected": "Žiadny prístup na internet, skontrolujte vaše spojenie.",
"viewGroupMembershipTooltip": "Zobraziť Členstvo v Skupine",
"loadingTor": "Načítavam tor...",
"smallTextLabel": "Malé",
"defaultScalingText": "Predvolená veľkosť textu (mierka):",
"builddate": "Vyrobené: %2",
"version": "Verzia %1",
"versionTor": "Verzia %1 s tor %2",
"themeDark": "Tmavá",
"themeLight": "Svetlá",
"largeTextLabel": "Veľké",
"settingInterfaceZoom": " Úroveň priblíženia",
"settingLanguage": "Jazyk",
"zoomLabel": "Priblíženie užívateľského prostredia (ovplyvňuje hlavne veľkosť textu a tlačidiel)",
"versionBuilddate": "Verzia: %1 Vyrobené: %2",
"cwtchSettingsTitle": "Cwtch Nastavenia",
"unlock": "Odomknúť",
"yourServers": "Vaše Servery",
"yourProfiles": "Vaše Profily",
"error0ProfilesLoadedForPassword": "0 načítaných profilov s tým heslom",
"password": "Heslo",
"enterProfilePassword": "Zadajte heslo k zobrazeniu vašich profilov",
"addNewProfileBtn": "Pridať nový profil",
"deleteConfirmText": "VYMAZAT",
"deleteProfileConfirmBtn": "Skutočne Vymazať Profil",
"deleteConfirmLabel": "Napíšte VYMAZAT pre potvrdenie",
"deleteProfileBtn": "Vymazať Profil",
"passwordChangeError": "Chyba pri zmene hesla: Vložené heslo bolo odmietnuté",
"passwordErrorMatch": "Heslá sa nezhodujú",
"saveProfileBtn": "Uložiť Profil",
"createProfileBtn": "Vytvoriť Profil",
"passwordErrorEmpty": "Heslo nemôže byť prázdne",
"password2Label": "Znovu zadajte heslo",
"password1Label": "Heslo",
"currentPasswordLabel": "Aktuálne Heslo",
"yourDisplayName": "Vaše Zobrazované Meno",
"noPasswordWarning": "Nepoužitie hesla na tomto účte znamená, že všetky dáta uložené lokálne nebudú šifrované",
"radioNoPassword": "Nešifrované (Žiadne heslo)",
"radioUsePassword": "Heslo",
"newProfile": "Nový Profil",
"defaultProfileName": "Alice",
"profileName": "Zobrazované Meno",
"editProfileTitle": "Upraviť Profil",
"addProfileTitle": "Pridať nový profil",
"deleteBtn": " Vymazať",
"saveBtn": "Uložiť",
"displayNameLabel": "Zobrazované Meno",
"copiedToClipboardNotification": "Skopírované do Schránky",
"addressLabel": "Adresa",
"puzzleGameBtn": "Puzzle Hra",
"bulletinsBtn": "Bulletiny",
"listsBtn": "Zoznamy",
"chatBtn": "Chat",
"rejectGroupBtn": "Odmietnuť",
"acceptGroupBtn": "Prijať",
"acceptGroupInviteLabel": "Chcete prijať pozvánku do",
"newGroupBtn": "Vytvoriť novú skupinu",
"copyBtn": "Kopírovať",
"pendingLabel": "Čaká sa",
"acknowledgedLabel": "Potvrdené",
"couldNotSendMsgError": "Správa nemohla byť odoslaná",
"dmTooltip": "Klikni pre poslanie priamej správy",
"membershipDescription": "Dole je list užívateľov ktorý do skupiny poslali správy. List nemusí zobrazovať všetkých užívateľov ktorý majú ku skupine prístup.",
"addListItemBtn": "Pridať Položku",
"searchList": "Hľadať v Zozname",
"update": "Aktualizovať",
"inviteBtn": "Pozvať",
"inviteToGroupLabel": "Pozvať do skupiny",
"groupNameLabel": "Meno skupiny",
"viewServerInfo": "Informácie o Servery",
"serverSynced": "Synchronizované",
"serverConnectivityDisconnected": "Server Odpojený",
"serverConnectivityConnected": "Server Pripojený",
"serverInfo": "Informácie o Servery",
"invitationLabel": "Pozvánka",
"serverLabel": "Server",
"search": "Vyhľadať...",
"blocked": "Zablokované",
"titlePlaceholder": "názov...",
"postNewBulletinLabel": "Poslať nový bulletin",
"newBulletinLabel": "Nový Bulletin",
"joinGroup": "Pripojiť sa k skupine",
"createGroup": "Vytvoriť skupinu",
"groupAddr": "Adresa",
"invitation": "Pozvánka",
"server": "Server",
"peerName": "Meno",
"peerAddress": "Adresa",
"joinGroupTab": "Pripojiť sa k skupine",
"createGroupTab": "Vytvoriť skupinu",
"createGroupBtn": " Vytvoriť",
"defaultGroupName": "Úžasná Skupina",
"createGroupTitle": "Vytvoriť Skupinu"
}

367
lib/l10n/intl_tr.arb Normal file
View File

@ -0,0 +1,367 @@
{
"@@locale": "tr",
"@@last_modified": "2022-12-05T21:06:07+01:00",
"profileEnabledDescription": "Start or stop the profile",
"profileAutostartDescription": "Controls if the profile will be automatically launched on startup",
"profileEnabled": "Enable",
"profileAutostartLabel": "Autostart",
"localePtBr": "Brezilya Portekizcesi \/ Português do Brasil",
"experimentQRCodeDescription": "QR Kod desteği profil kimliği gibi verilerin QR Kodla paylaşılmasına olanak tanır",
"acquiringTicketsFromServer": "Spame Karşı Sınama",
"acquiredTicketsFromServer": "Spame Karşı Sınama Tamamlandı",
"shareProfileMenuTooltop": "Profili paylaş...",
"shareMenuQRCode": "QR Kodunu Göster",
"enableExperimentQRCode": "QR Kodları",
"localeNl": "Flemenkçe \/ Dutch",
"errorDownloadDirectoryDoesNotExist": "İndirilenler Klasörü ayarlanmadığı veya mevcut olmayan bir klasöre ayarlandığı için dosya paylaşımı etkinleştirilemiyor.",
"radioNoPassword": "Şifrelenmemiş (Parola yok)",
"msgAddToAccept": "Dosyayı kabul etmek için bu hesabı kişilerinize ekleyin.",
"fileSharingSettingsDownloadFolderDescription": "Dosyalar (örn. görsel önizlemeleri etkinleştirildiğinde görsel dosyaları) otomatik olarak indirildiğinde, dosyaların indirileceği varsayılan bir konum gereklidir.",
"torSettingsEnabledCacheDescription": "İndirilmiş Tor uzlaşmasını Cwtch'un bir sonraki açılışında yeniden kullanmak için önbelleğe alın. Bu Tor'un daha hızlıılmasını sağlar. Devre dışı bırakıldığında Cwtch açılırken önbelleğe alınmış verileri siler.",
"notificationContentSimpleEvent": "Yalın Bildiri",
"exportProfileTooltip": "Bu profili şifrelenmiş bir dosyaya yedekle. Şifrelenmiş dosya başka bir Cwtch uygulamasına aktarılabilir.",
"importProfileTooltip": "Başka Cwtch oluşumunda oluşturulmuş bir profili içeri aktarmak için şifrelenmiş Cwtch yedeği kullanın.",
"clickableLinksWarning": "Bu URL'yi açmak Cwtch dışında bir uygulama başlatacak ve metadatanız teşhir olabilir veya Cwtch'un güvenliği tehlikeye girebilir. Yalnızca güvendiğiniz kişilerden gelen URL'leri açın. Devam etmek istediğinize emin misiniz?",
"settingAndroidPowerExemptionDescription": "Opsiyonel: Android'den Cwtch'u optimize edilmiş güç yönetiminden muaf tutmasını isteyin. Bu, daha fazla pil kullanımı pahasına uygulamanın daha stabil çalışmasını sağlayacaktır.",
"localeTr": "Türkçe \/ Türkçe",
"defaultGroupName": "Muhteşem Grup",
"defaultProfileName": "Alice",
"localeDe": "Almanca \/ Deutsch",
"localePl": "Lehçe \/ Polski",
"localeDa": "Danca \/ Dansk",
"acceptGroupInviteLabel": "Daveti kabul etmek istiyor musunuz",
"pendingLabel": "Beklemede",
"chatBtn": "Sohbet",
"yourDisplayName": "Kullanıcı Adınız",
"localeEn": "İngilizce \/ English",
"localeFr": "Fransızca \/ Français",
"localePt": "Portekizce \/ Portuguesa",
"networkStatusAttemptingTor": "Tor ağına bağlanılıyor",
"localeEs": "İspanyolca \/ Español",
"localeIt": "İtalyanca \/ Italiano",
"debugLog": "Konsol hata ayıklama kaydını başlat",
"localeRU": "Rusça \/ Русский",
"serverMetricsLabel": "Sunucu Bilgileri",
"themeNameCwtch": "Cwtch",
"themeNameWitch": "Cadı",
"themeNameVampire": "Vampir",
"themeNameGhost": "Hayalet",
"themeNamePumpkin": "Balkabağı",
"themeNameMermaid": "Denizkızı",
"themeNameMidnight": "Gece",
"themeNameNeon1": "Neon1",
"themeNameNeon2": "Neon2",
"descriptionACNCircuitInfo": "Anonim iletişim ağının (ACN) bu konuşmaya bağlanmak için kullandığı yol hakkında ayrıntılı bilgi.",
"tooltipSelectACustomProfileImage": "Profil Resmi Seçin",
"notificationPolicyMute": "Sessiz",
"localeRo": "Romence \/ Română",
"localeLb": "Lüksemburgca \/ Lëtzebuergesch",
"localeNo": "Norveççe \/ Norsk",
"localeEl": "Yunanca \/ Ελληνικά",
"localeCy": "Galce \/ Cymraeg",
"notificationPolicyOptIn": "Mümkünse Al",
"conversationNotificationPolicyOptIn": "Mümkünse Al",
"tooltipCode": "Kod \/ Monospace",
"createGroupTitle": "Grup Oluştur",
"serverLabel": "Sunucu",
"createGroupBtn": "Oluştur",
"profileOnionLabel": "Bu adresi bağlantı kurmak istediğiniz insanlara gönderin",
"addPeerTab": "Kişi ekle",
"createGroupTab": "Grup oluştur",
"joinGroupTab": "Gruba katıl",
"peerAddress": "Adres",
"peerName": "İsim",
"server": "Sunucu",
"invitation": "Davet",
"groupAddr": "Adres",
"addPeer": "Kişi Ekle",
"createGroup": "Grup oluştur",
"joinGroup": "Gruba katıl",
"newBulletinLabel": "Yeni Bülten",
"postNewBulletinLabel": "Yeni bülten yayınla",
"titlePlaceholder": "başlık...",
"pasteAddressToAddContact": "Yeni konuşma eklemek için buraya bir cwtch adresi, davetiye veya anahtar paketi yapıştırın",
"blocked": "Engelli",
"search": "Ara...",
"invitationLabel": "Davet",
"serverInfo": "Sunucu Bilgileri",
"serverConnectivityConnected": "Sunucu Bağlandı",
"serverConnectivityDisconnected": "Sunucu Bağlantısı Kesildi",
"serverSynced": "Senkronize Edildi",
"serverNotSynced": "Yeni Mesajlar Senkronize Oluyor (Biraz zaman alabilir)...",
"viewServerInfo": "Sunucu Bilgileri",
"groupNameLabel": "Grup İsmi",
"saveBtn": "Kaydet",
"inviteToGroupLabel": "Gruba davet et",
"inviteBtn": "Davet Et",
"deleteBtn": "Sil",
"update": "Güncelleştir",
"searchList": "Listede Ara",
"peerNotOnline": "Kişi çevrimdışı. Uygulamalar şu anda kullanılamıyor.",
"addListItemBtn": "Öğe Ekle",
"membershipDescription": "Aşağıda gruba ileti gönderen kullanıcıların listesi verilmiştir. Bu liste gruba erişimi olan tüm kullanıcıları yansıtmayabilir.",
"dmTooltip": "DM için tıklayın",
"couldNotSendMsgError": "Mesaj gönderilemedi",
"acknowledgedLabel": "Onaylandı",
"peerBlockedMessage": "Kişi engelli",
"peerOfflineMessage": "Kişi çevrimdışı, mesajlar şu anda iletilemiyor",
"copyBtn": "Kopyala",
"newGroupBtn": "Yeni grup oluştur",
"acceptGroupBtn": "Kabul Et",
"rejectGroupBtn": "Reddet",
"listsBtn": "Listeler",
"bulletinsBtn": "Bültenler",
"puzzleGameBtn": "Yapboz",
"addressLabel": "Adres",
"copiedToClipboardNotification": "Panoya kopyalandı",
"displayNameLabel": "Lütfen bir ad girin",
"blockBtn": "Kişiyi Engelle",
"savePeerHistory": "Geçmişi Kaydet",
"savePeerHistoryDescription": "Kişi ile ilgili tüm geçmişin silinip silinmeyeceğini belirler.",
"dontSavePeerHistory": "Geçmişi Sil",
"unblockBtn": "Kişi Engelini Kaldır",
"addProfileTitle": "Yeni profil ekle",
"editProfileTitle": "Profili Düzenle",
"profileName": "Kullanıcı adı",
"newProfile": "Yeni Profil",
"editProfile": "Profili Düzenle",
"noPasswordWarning": "Bu hesapta parola kullanılmaması yerel olarak depolanan verilerin şifrelenmeyeceği anlamına gelir",
"currentPasswordLabel": "Mevcut Parola",
"password2Label": "Parolayı yeniden gir",
"passwordErrorEmpty": "Parola boş bırakılamaz",
"createProfileBtn": "Profil Oluştur",
"saveProfileBtn": "Profili Kaydet",
"passwordErrorMatch": "Parolalar eşleşmiyor",
"passwordChangeError": "Parola değiştirilirken hata oluştu: Verilen parola reddedildi",
"deleteProfileBtn": "Profili Sil",
"deleteConfirmLabel": "Onaylamak için DELETE yazın",
"deleteProfileConfirmBtn": "Profili Gerçekten Sil",
"deleteConfirmText": "SİL",
"addNewProfileBtn": "Yeni profil ekle",
"enterProfilePassword": "Profillerinizi görmek için parolayı girin",
"error0ProfilesLoadedForPassword": "Bu parolayla 0 profil yüklendi",
"yourProfiles": "Profilleriniz",
"yourServers": "Sunucularınız",
"unlock": "Kilidi Aç",
"cwtchSettingsTitle": "Cwtch Ayarları",
"versionBuilddate": "Sürüm: %1 Derlendiği tarih: %2",
"zoomLabel": "Arayüz yakınlaştırma (aslen metin ve buton boyutlarını etkiler)",
"blockUnknownLabel": "Tanınmayan Kişileri Engelle",
"settingLanguage": "Dil",
"settingInterfaceZoom": "Yakınlaştırma seviyesi",
"largeTextLabel": "Büyük",
"settingTheme": "Açık Tema Kullan",
"themeLight": "Açık",
"themeDark": "Koyu",
"experimentsEnabled": "Deneyleri Etkinleştir",
"versionTor": "Sürüm %1 ve tor %2",
"version": "Sürüm %1",
"builddate": "Derlendiği tarih: %2",
"defaultScalingText": "Varsayılan metin boyutu (ölçek faktörü: ",
"smallTextLabel": "Küçük",
"loadingTor": "Tor yükleniyor...",
"viewGroupMembershipTooltip": "Grup Üyeliğini Görüntüle",
"networkStatusDisconnected": "İnternet bağlantısı kesildi, bağlantınızı kontrol edin",
"networkStatusConnecting": "Ağa ve kişilere bağlanıyor...",
"networkStatusOnline": "Çevrimiçi",
"newConnectionPaneTitle": "Yeni Bağlantı",
"addListItem": "Yeni Liste Öğesi Ekle",
"addNewItem": "Listeye yeni bir öğe ekle",
"todoPlaceholder": "Yapılacaklar...",
"enableGroups": "Grup Sohbetini Etkinleştir",
"enterCurrentPasswordForDelete": "Profili silmek için parolayı girin.",
"conversationSettings": "Sohbet Ayarları",
"invalidImportString": "Geçersiz içe aktarma girdisi",
"contactAlreadyExists": "Kişi Zaten Ekli",
"tooltipOpenSettings": "Ayarlar bölmesini aç",
"descriptionExperiments": "Cwtch deneyleri, Cwtch'a grup sohbeti, bot entegrasyonu vb. gibi 1:1 meta veriye dayanıklılıktan farklı gizlilik önceliklerine sahip olabilen işlevler ekleyen opsiyonel özelliklerdir.",
"tooltipAddContact": "Yeni bir kişi veya sohbet ekle",
"titleManageContacts": "Sohbetler",
"tooltipUnlockProfiles": "Parolalarını girerek şifrelenmiş profillerin kilidini açın.",
"titleManageProfiles": "Cwtch Profillerini Yönet",
"descriptionExperimentsGroups": "Grup deneyi, Cwtch'un birden fazla kişiyle bağlantısını kolaylaştırmak için güvenilmeyen sunucu altyapısına bağlanmasına olanak tanır.",
"descriptionBlockUnknownConnections": "Bu seçenek etkinse, kişi listenizde olmayan kullanıcılardan gelen bağlantılar otomatik olarak kapatılır.",
"successfullAddedContact": "Başarıyla eklendi",
"titleManageServers": "Sunucuları Yönet",
"inviteToGroup": "Bir gruba katılma daveti aldınız:",
"leaveConversation": "Sohbetten Ayrıl",
"reallyLeaveThisGroupPrompt": "Bu görüşmeden ayrılmak istediğinize emin misiniz? Tüm mesajlar silinecek.",
"yesLeave": "Evet, Sohbetten Ayrıl",
"chatHistoryDefault": "Cwtch kapatıldığında bu konuşma silinecek! Mesaj geçmişi farklı sohbetler için sağ üstteki Ayarlar menüsünden etkinleştirilebilir.",
"accepted": "Kabul edildi!",
"rejected": "Reddedildi!",
"contactSuggestion": "İletişim önerileri: ",
"sendAnInvitation": "Bir davetiye gönderdiniz: ",
"torVersion": "Tor Sürümü",
"torStatus": "Tor Durumu",
"resetTor": "Sıfırla",
"cancel": "İptal",
"sendMessage": "Mesaj Gönder",
"sendInvite": "Kişi veya grup daveti gönderme",
"deleteProfileSuccess": "Profil başarıyla silindi",
"addServerFirst": "Grup oluşturmadan önce sunucu eklemeniz gerekir",
"nickChangeSuccess": "Profil kullanıcı adı başarıyla değiştirildi",
"createProfileToBegin": "Başlamak için bir profil oluşturun veya kilidini açın",
"addContactFirst": "Sohbete başlamak için bir kişi ekleyin veya seçin.",
"torNetworkStatus": "Tor ağ durumu",
"profileDeleteSuccess": "Profil başarıyla silindi",
"malformedMessage": "Hatalı biçimlendirilmiş mesaj",
"shutdownCwtchTooltip": "Cwtch'u Kapat",
"shutdownCwtchDialogTitle": "Cwtch'u Kapat?",
"shutdownCwtchDialog": "Cwtch'i kapatmak istediğinize emin misiniz? Bu tüm bağlantıları kapatacak, ve uygulamadan çıkacaktır.",
"shutdownCwtchAction": "Cwtch'u Kapat",
"groupInviteSettingsWarning": "Gruba katılma daveti aldınız! Bu Daveti görüntülemek için lütfen Ayarlar'dan Grup Sohbeti Deneyini etkinleştirin.",
"tooltipHidePassword": "Parolayı Gizle",
"tooltipShowPassword": "Parolayı Göster",
"newPassword": "Yeni Parola",
"radioUsePassword": "Parola",
"password1Label": "Parola",
"password": "Parola",
"notificationNewMessageFromPeer": "Yeni mesaj!",
"notificationNewMessageFromGroup": "Yeni grup mesajı!",
"tooltipAcceptContactRequest": "Bağlantı isteğini kabul et",
"tooltipRejectContactRequest": "Bağlantı isteğini reddet",
"tooltipReplyToThisMessage": "Bu mesajı yanıtla",
"tooltipRemoveThisQuotedMessage": "Alıntılanan mesajı kaldır.",
"settingUIColumnPortrait": "UI Sütunları Portre Modu",
"settingUIColumnLandscape": "UI Sütunları Yatay Modu",
"settingUIColumnSingle": "Tek",
"settingUIColumnDouble12Ratio": "Çift (1:2)",
"settingUIColumnDouble14Ratio": "Çift (1:4)",
"settingUIColumnOptionSame": "Portre modu ayarı ile aynı",
"contactGoto": "%1 ile olan sohbete git",
"addContact": "Kişi ekle",
"addContactConfirm": "%1 kişisini ekle",
"encryptedProfileDescription": "Bir profili parola ile şifrelemek, profili bu aygıtı kullanabilecek diğer kişilerden korur. Doğru şifre girilene kadar şifrelenmiş profiller görüntülenemez veya erişilemez.",
"plainProfileDescription": "Cwtch profillerinizi parola ile korumanızı öneririz. Bir parola belirlemezseniz, bu cihaza erişimi olan herkes kişiler, mesajlar ve kriptografik anahtarlar da dahil olmak üzere hassas bilgilerinize erişebilir.",
"placeholderEnterMessage": "Bir mesaj yazın...",
"labelFilesize": "Boyut",
"blockedMessageMessage": "Bu mesaj blokladığınız bir profilden gönderilmiş",
"showMessageButton": "Mesajı Görüntüle",
"blockUnknownConnectionsEnabledDescription": "Bilinmeyen kişilerden gelen bağlantılar engelli. Bu özelliği Ayarlar'dan değiştirebilirsiniz",
"archiveConversation": "Bu Sohbeti Arşivle",
"streamerModeLabel": "Yayıncı\/Sunum Modu",
"descriptionStreamerMode": "Bu seçenek etkinleştirildiğinde profiller, iletişim adresleri gibi bilgiler saklanarak uygulama daha gizli hale getirilir.",
"retrievingManifestMessage": "Dosya bilgileri alınıyor...",
"openFolderButton": "Klasörü Aç",
"downloadFileButton": "İndir",
"labelFilename": "Dosya Adı",
"messageEnableFileSharing": "Bu mesajı görüntüleyebilmek için dosya paylaşma deneyini etkinleştirin.",
"settingFileSharing": "Dosya Paylaşma",
"messageFileSent": "Bir dosya gönderdiniz",
"messageFileOffered": "Kişi size bir dosya göndermek istiyor",
"tooltipSendFile": "Dosya Gönder",
"descriptionFileSharing": "Dosya paylaşım deneyi, Cwtch kişileri ve gruplarından dosya gönderip almanızı sağlar. Bir dosyayı bir grupla paylaşmanın, o grubun üyelerinin dosyayı indirmek için doğrudan Cwtch üzerinden sizinle bağlantı kurmasıyla sonuçlanacağını unutmayın.",
"titleManageProfilesShort": "Profiller",
"addServerTitle": "Sunucu Ekle",
"editServerTitle": "Sunucuyu Düzenle",
"serverAddress": "Sunucu Adresi",
"serverDescriptionLabel": "Sunucu Açıklaması",
"serverDescriptionDescription": "Kişisel yönetiminiz için sunucu açıklaması, dışarıyla asla paylaşılmayacaktır",
"serverEnabled": "Sunucu Etkin",
"serverEnabledDescription": "Sunucuyu başlat veya durdur",
"serverAutostartLabel": "Otomatik başlatma",
"serverAutostartDescription": "Uygulamanın açılışta sunucuyu otomatik olarak başlatıp başlatmayacağını belirler",
"saveServerButton": "Sunucuyu Kaydet",
"serversManagerTitleLong": "Barındırdığınız Sunucular",
"serversManagerTitleShort": "Sunucular",
"addServerTooltip": "Yeni sunucu ekle",
"unlockServerTip": "Başlamak için bir sunucu oluşturun veya sunucunuzun kilidini açın",
"unlockProfileTip": "Başlamak için bir profil oluşturun veya profilinizin kilidini açın",
"enterServerPassword": "Sunucuyu açmak için şifre girin",
"settingServersDescription": "Sunucu barındırma deneyi Cwtch sunucularını barındırmayı ve yönetmeyi sağlar",
"settingServers": "Sunucu Barındırma",
"copyAddress": "Adresi Kopyala",
"enterCurrentPasswordForDeleteServer": "Lütfen sunucuyu silmek için şifreyi girin",
"deleteServerSuccess": "Sunucu başarıyla silindi",
"deleteServerConfirmBtn": "Sunucuyu gerçekten sil",
"plainServerDescription": "Cwtch sunucularınızı bir parola ile korumanızı öneririz. Bir parola belirlemezseniz, bu cihaza erişimi olan herkes kriptografik anahtarlar da dahil olmak üzere sunucunun hassas bilgilerine erişebilir.",
"encryptedServerDescription": "Bir sunucuyu parola ile şifrelemek, sunucuyu bu aygıtı kullanabilecek diğer kişilerden korur. Doğru şifre girilene kadar şifrelenmiş sunucular görüntülenemez veya erişilemez.",
"fileSavedTo": "Şuraya kaydedildi",
"fileInterrupted": "Kesildi",
"fileCheckingStatus": "İndirme durumunu kontrol ediyor",
"verfiyResumeButton": "Doğrula\/devam et",
"copyServerKeys": "Anahtarları kopyala",
"newMessagesLabel": "Yeni Mesajlar",
"importLocalServerLabel": "Yerel bir sunucuyu içeri aktar",
"importLocalServerSelectText": "Yerel Sunucu Seç",
"importLocalServerButton": "%1'i içeri aktar",
"groupsOnThisServerLabel": "Bu sunucuda içinde bulunduğum gruplar",
"fieldDescriptionLabel": "Açıklama",
"manageKnownServersButton": "Bilinen Sunucuları Yönet",
"displayNameTooltip": "Lütfen bir ad girin",
"manageKnownServersLong": "Bilinen Sunucuları Yönet",
"manageKnownServersShort": "Sunucular",
"serverTotalMessagesLabel": "Toplam Mesaj",
"serverConnectionsLabel": "Bağlantı",
"enableExperimentClickableLinks": "Tıklanabilir Linkleri Etkinleştir",
"experimentClickableLinksDescription": "Tıklanabilir bağlantılar deneyi, mesajlarda paylaşılan URL'lere tıklamanıza olanak tanır",
"settingImagePreviewsDescription": "Görseller ve Profil Resimleri otomatik olarak indirilir ve görüntülenir. Cwtch'u güvenmediğiniz kişilerle iletişim kurmak için kullanıyorsanız bu deneysel özelliği etkinleştirmemenizi öneririz.",
"settingDownloadFolder": "İndirilenler Klasörü",
"themeColorLabel": "Renk Teması",
"loadingCwtch": "Cwtch yükleniyor...",
"storageMigrationModalMessage": "Profiller yeni depolama biçimine taşınıyor. Bu işlem birkaç dakika sürebilir...",
"msgFileTooBig": "Dosya boyutu 10 GB'ı geçemez",
"msgConfirmSend": "Göndermek istediğinize emin misiniz",
"btnSendFile": "Dosya Gönder",
"torSettingsUseCustomTorServiceConfigurastionDescription": "Varsayılan tor konfigürasyonunu geçersiz kıl. Uyarı: Bu tehlikeli olabilir. Yalnızca ne yaptığınızı biliyorsanız açın.",
"torSettingsEnabledAdvanced": "Gelişmiş Tor Konfigürasyonunu Etkinleştir",
"torSettingsUseCustomTorServiceConfiguration": "Özel Tor Hizmeti Konfigürasyonunu (torrc) Kullan",
"torSettingsEnabledAdvancedDescription": "Sisteminizde mevcut bir Tor hizmetini kullanın, veya Cwtch Tor Hizmeti'nin parametrelerini değiştirin",
"torSettingsCustomSocksPort": "Özel SOCKS Portu",
"torSettingsCustomControlPortDescription": "Tor proxy'sine kontrol bağlantıları için özel bir port kullan",
"torSettingsCustomSocksPortDescription": "Tor proxy'sine veri bağlantıları için özel bir port kullan",
"torSettingsCustomControlPort": "Özel Kontrol Portu",
"torSettingsErrorSettingPort": "Port Numarası 1 ile 65535 arasında olmalıdır",
"settingImagePreviews": "Görsel Önizlemeleri ve Profil Resimleri",
"fileSharingSettingsDownloadFolderTooltip": "İndirilen dosyalara farklı bir varsayılan klasör seçmek için gözat.",
"labelACNCircuitInfo": "ACN Ağ Bilgisi",
"labelTorNetwork": "Tor Ağı",
"torSettingsEnableCache": "Tor Uzlaşmasını Önbelleğe Al",
"notificationPolicyDefaultAll": "Tümü Varsayılan",
"conversationNotificationPolicyDefault": "Varsayılan",
"conversationNotificationPolicyNever": "Asla",
"notificationPolicySettingLabel": "Bildirim İlkeleri",
"notificationContentSettingLabel": "Bildirim İçeriği",
"notificationPolicySettingDescription": "Varsayılan uygulama bildirim davranışını belirler",
"notificationContentSettingDescription": "Sohbet bildirimlerinin içeriğini belirler",
"tooltipUnpinConversation": "Sohbetin \"Sohbetler\"in üstüne sabitlemesini kaldır",
"tooltipPinConversation": "Sohbeti \"Sohbetler\"in üstüne sabitle",
"newMessageNotificationConversationInfo": "%1 Sohbetinde Yeni Mesaj",
"notificationContentContactInfo": "Sohbet Bilgileri",
"conversationNotificationPolicySettingLabel": "Sohbet Bildirim İlkeleri",
"conversationNotificationPolicySettingDescription": "Bu sohbet için bildirim ayarlarını kontrol et",
"settingGroupBehaviour": "Davranış",
"settingsGroupAppearance": "Görünüş",
"settingsGroupExperiments": "Deneyler",
"newMessageNotificationSimple": "Yeni Mesaj",
"exportProfile": "Profili Dışa Aktar",
"importProfile": "Profili İçe Aktar",
"clickableLinkError": "URL açılmaya çalışılırken hata oluştu",
"failedToImportProfile": "Profil İçe Aktarılırken Hata Oluştu",
"successfullyImportedProfile": "Profil Başarıyla İçe Aktarıldı: %profile",
"shuttingDownApp": "Kapanıyor...",
"clickableLinkOpen": "URL'yi aç",
"clickableLinksCopy": "URL'yi kopyala",
"formattingExperiment": "Mesaj Biçimlendirme",
"messageFormattingDescription": "Görüntülenen mesajlarda zengin metin biçimlendirmesini etkinleştirin, örneğin **kalın** ve *italik*",
"thisFeatureRequiresGroupExpermientsToBeEnabled": "Bu özellik Gruplar Özelliği'nin Ayarlar'dan etkinleştirilmesini gerektirir",
"settingAndroidPowerExemption": "Android Pil Optimizasyonlarını Yoksay",
"settingsAndroidPowerReenablePopup": "Cwtch içinden Pil Optimizasyonu yeniden etkinleştirilemiyor. Lütfen Android \/ Ayarlar \/ Uygulamalar \/ Cwtch \/ Pil sayfasına gidin ve 'Pil Kullanımını Yönet' bölümünün altında 'Optimize edilmiş'e basın",
"okButton": "OK",
"tooltipBoldText": "Kalın",
"tooltipBackToMessageEditing": "Mesaj Düzenlemeye Geri Dön",
"tooltipItalicize": "İtalik",
"tooltipSuperscript": "Üst Simge",
"tooltipSubscript": "Alt Simge",
"tooltipStrikethrough": "Üstü Çizili",
"tooltipPreviewFormatting": "Mesaj Biçimlendirmesini Önizle",
"manageSharedFiles": "Paylaşılan Dosyaları Yönet",
"stopSharingFile": "Dosya Paylaşımını Durdur",
"restartFileShare": "Dosya Paylaşımını Başlat",
"viewReplies": "Mesaja gelen yanıtları görüntüle",
"headingReplies": "Yanıtlar",
"messageNoReplies": "Bu mesaja yanıt gelmemiş.",
"fileDownloadUnavailable": "Bu dosya indirmeye uygun görünmüyor. Gönderen dosyanın indirilmesini engellemiş olabilir.",
"replyingTo": "%1 hesabına yanıt veriliyor"
}

Some files were not shown because too many files have changed in this diff Show More