Compare commits

..

45 Commits

Author SHA1 Message Date
IC Rainbow
6bdeb7cb73 set upstream to ab/progress-check 2024-01-11 22:21:05 +02:00
Stanislav Dmitrenko
dad9716915 android, desktop: moving to single thread in api calls (#3670)
* android, desktop: moving to single thread in api calls

* more places

* more changes

* seconds

* long running api into init function

* changes

* developer options

* progress indicator

* string

* rename

* progressIndicator for stop chat
2024-01-11 18:50:25 +00:00
Alexander Bondarenko
bc8a6f4833 core: add notes chat type (#3568)
* Add chat type "self"

* rename to Notes

* cover more things

* remove quote, tweak sql

* resolve comments

* constrain ACIQDirection to exclude CTLocal

* add CILocalRcv handling

* plug in migrations and tests

* cover more API, implement new folders

* working create/send/tail

* remove interaction with messages

* add note deletion (api-only)

* add folder deletion

* add getLocalChatItemIdByText

* add APICreateChatItem and files

* add protocol check for getFileTransfer protocol

* replace FTLocal with createLocalFile

* add chat previews

* add folder clear

* add reactions

* add read/unread

* add note updates

* resolve some comments

* remove local reactions

* remove folder names, deletion, add autocreate

* add file deletion check

* add preview pagination test

* add per-item file deletion check

* pull mkChatItem out of createLocal to prevent ci record updates

* use - as notes name

* bump migration ts

* update schema

* resolve comments

* add chat pagination test

* use chat queries from Direct instead

* evict note folders from createUserRecord

* switch to - for note folder chat type prefix and use empty name

* fix getLocalChatXxx

* add explicit createCCNoteFolder for tests

* use overloadedstrings for single-line queries

* add suggested chat list tests

* add notes chat to a user-creating test

* throw correct error for missing file

* remove unique check from schema

* add UndecidableInstances for ghc8.10

* switch to * for chat type sigil

* add file safety test

* add drop index

* remove indentation

* remove repeated folder

* remove redundant filter query, NoteFolderName

* don't attempt to cancel local files when deleting chat item

* rename function

* fix comment

* rename

* fix merge

* fix typo

* remove editable limit

* restore comment

* remove local file cancel

* Revert "remove editable limit"

This reverts commit 65df55caf8.

* refactor

---------

Co-authored-by: spaced4ndy <8711996+spaced4ndy@users.noreply.github.com>
2024-01-11 17:01:44 +00:00
spaced4ndy
5b7a09f488 ui: fix unknown member UI (#3672) 2024-01-11 20:21:58 +04:00
spaced4ndy
bfe5d51df7 core, ui: create dummy member record when admin forwards a message from an unknown member (#3651)
* core: create dummy member record when admin forwards a message from an unknown member

* comments

* update unknown member if announced

* change removed

* change unknown name, revert diff

* revert diff

* ios

* update ios library

* android

* remove changes in iOS project file

* rename event

* remove unknown category

* android

---------

Co-authored-by: Evgeny Poberezkin <2769109+epoberezkin@users.noreply.github.com>
2024-01-11 17:55:13 +04:00
Evgeny Poberezkin
d9d270f00e ui: add Hungarian (Android only) and Turkish (#3671)
* ui: add Hungarian (Android only) and Turkish

* readme
2024-01-11 13:28:47 +00:00
Evgeny Poberezkin
2872b30e8c ui: translations (#3666)
* Translated using Weblate (German)

Currently translated at 100.0% (1510 of 1510 strings)

Translation: SimpleX Chat/SimpleX Chat Android
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/de/

* Translated using Weblate (German)

Currently translated at 100.0% (1352 of 1352 strings)

Translation: SimpleX Chat/SimpleX Chat iOS
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/de/

* Translated using Weblate (Italian)

Currently translated at 100.0% (1510 of 1510 strings)

Translation: SimpleX Chat/SimpleX Chat Android
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/it/

* Translated using Weblate (Italian)

Currently translated at 100.0% (1352 of 1352 strings)

Translation: SimpleX Chat/SimpleX Chat iOS
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/it/

* Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (1510 of 1510 strings)

Translation: SimpleX Chat/SimpleX Chat Android
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/zh_Hans/

* Translated using Weblate (Czech)

Currently translated at 98.5% (1488 of 1510 strings)

Translation: SimpleX Chat/SimpleX Chat Android
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/cs/

* Translated using Weblate (Czech)

Currently translated at 91.4% (1236 of 1352 strings)

Translation: SimpleX Chat/SimpleX Chat iOS
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/cs/

* Translated using Weblate (Polish)

Currently translated at 100.0% (1510 of 1510 strings)

Translation: SimpleX Chat/SimpleX Chat Android
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/pl/

* Translated using Weblate (Polish)

Currently translated at 100.0% (1352 of 1352 strings)

Translation: SimpleX Chat/SimpleX Chat iOS
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/pl/

* Translated using Weblate (Hungarian)

Currently translated at 99.9% (1509 of 1510 strings)

Translation: SimpleX Chat/SimpleX Chat Android
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/hu/

* Translated using Weblate (Hungarian)

Currently translated at 99.9% (1509 of 1510 strings)

Translation: SimpleX Chat/SimpleX Chat Android
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/hu/

* Translated using Weblate (Hungarian)

Currently translated at 99.9% (1509 of 1510 strings)

Translation: SimpleX Chat/SimpleX Chat Android
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/hu/

* Translated using Weblate (Hungarian)

Currently translated at 100.0% (1510 of 1510 strings)

Translation: SimpleX Chat/SimpleX Chat Android
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/hu/

* Translated using Weblate (Hungarian)

Currently translated at 100.0% (1510 of 1510 strings)

Translation: SimpleX Chat/SimpleX Chat Android
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/hu/

* Translated using Weblate (Polish)

Currently translated at 100.0% (1364 of 1364 strings)

Translation: SimpleX Chat/SimpleX Chat iOS
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/pl/

* Translated using Weblate (Hungarian)

Currently translated at 100.0% (1510 of 1510 strings)

Translation: SimpleX Chat/SimpleX Chat Android
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/hu/

* Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (1534 of 1534 strings)

Translation: SimpleX Chat/SimpleX Chat Android
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/zh_Hans/

* Translated using Weblate (German)

Currently translated at 100.0% (1534 of 1534 strings)

Translation: SimpleX Chat/SimpleX Chat Android
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/de/

* Translated using Weblate (German)

Currently translated at 100.0% (1364 of 1364 strings)

Translation: SimpleX Chat/SimpleX Chat iOS
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/de/

* Translated using Weblate (Spanish)

Currently translated at 97.3% (1494 of 1534 strings)

Translation: SimpleX Chat/SimpleX Chat Android
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/es/

* Translated using Weblate (Spanish)

Currently translated at 97.5% (1330 of 1364 strings)

Translation: SimpleX Chat/SimpleX Chat iOS
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/es/

* Translated using Weblate (Spanish)

Currently translated at 100.0% (1534 of 1534 strings)

Translation: SimpleX Chat/SimpleX Chat Android
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/es/

* Translated using Weblate (Spanish)

Currently translated at 100.0% (1364 of 1364 strings)

Translation: SimpleX Chat/SimpleX Chat iOS
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/es/

* Translated using Weblate (Polish)

Currently translated at 100.0% (1534 of 1534 strings)

Translation: SimpleX Chat/SimpleX Chat Android
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/pl/

* Translated using Weblate (Greek)

Currently translated at 14.7% (227 of 1534 strings)

Translation: SimpleX Chat/SimpleX Chat Android
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/el/

* Translated using Weblate (Greek)

Currently translated at 1.6% (23 of 1364 strings)

Translation: SimpleX Chat/SimpleX Chat iOS
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/el/

* Translated using Weblate (German)

Currently translated at 100.0% (1534 of 1534 strings)

Translation: SimpleX Chat/SimpleX Chat Android
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/de/

* Translated using Weblate (Russian)

Currently translated at 97.5% (1497 of 1534 strings)

Translation: SimpleX Chat/SimpleX Chat Android
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/ru/

* Translated using Weblate (German)

Currently translated at 100.0% (1364 of 1364 strings)

Translation: SimpleX Chat/SimpleX Chat iOS
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/de/

* Translated using Weblate (French)

Currently translated at 100.0% (1534 of 1534 strings)

Translation: SimpleX Chat/SimpleX Chat Android
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/fr/

* Translated using Weblate (French)

Currently translated at 100.0% (1364 of 1364 strings)

Translation: SimpleX Chat/SimpleX Chat iOS
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/fr/

* Translated using Weblate (Italian)

Currently translated at 100.0% (1534 of 1534 strings)

Translation: SimpleX Chat/SimpleX Chat Android
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/it/

* Translated using Weblate (Italian)

Currently translated at 100.0% (1364 of 1364 strings)

Translation: SimpleX Chat/SimpleX Chat iOS
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/it/

* Translated using Weblate (Dutch)

Currently translated at 100.0% (1534 of 1534 strings)

Translation: SimpleX Chat/SimpleX Chat Android
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/nl/

* Translated using Weblate (Dutch)

Currently translated at 100.0% (1364 of 1364 strings)

Translation: SimpleX Chat/SimpleX Chat iOS
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/nl/

* Translated using Weblate (Japanese)

Currently translated at 88.5% (1208 of 1364 strings)

Translation: SimpleX Chat/SimpleX Chat iOS
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/ja/

* Translated using Weblate (Japanese)

Currently translated at 90.3% (1386 of 1534 strings)

Translation: SimpleX Chat/SimpleX Chat Android
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/ja/

* Translated using Weblate (Arabic)

Currently translated at 99.7% (1530 of 1534 strings)

Translation: SimpleX Chat/SimpleX Chat Android
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/ar/

* Translated using Weblate (Bulgarian)

Currently translated at 91.9% (1254 of 1364 strings)

Translation: SimpleX Chat/SimpleX Chat iOS
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/bg/

* Translated using Weblate (Bulgarian)

Currently translated at 100.0% (1534 of 1534 strings)

Translation: SimpleX Chat/SimpleX Chat Android
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/bg/

* Translated using Weblate (Japanese)

Currently translated at 91.0% (1399 of 1536 strings)

Translation: SimpleX Chat/SimpleX Chat Android
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/ja/

* Translated using Weblate (Japanese)

Currently translated at 92.3% (1418 of 1536 strings)

Translation: SimpleX Chat/SimpleX Chat Android
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/ja/

* Translated using Weblate (German)

Currently translated at 100.0% (1536 of 1536 strings)

Translation: SimpleX Chat/SimpleX Chat Android
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/de/

* Translated using Weblate (French)

Currently translated at 100.0% (1536 of 1536 strings)

Translation: SimpleX Chat/SimpleX Chat Android
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/fr/

* Translated using Weblate (French)

Currently translated at 100.0% (1364 of 1364 strings)

Translation: SimpleX Chat/SimpleX Chat iOS
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/fr/

* Translated using Weblate (Japanese)

Currently translated at 88.5% (1208 of 1364 strings)

Translation: SimpleX Chat/SimpleX Chat iOS
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/ja/

* Translated using Weblate (Japanese)

Currently translated at 92.7% (1424 of 1536 strings)

Translation: SimpleX Chat/SimpleX Chat Android
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/ja/

* Translated using Weblate (Italian)

Currently translated at 100.0% (1536 of 1536 strings)

Translation: SimpleX Chat/SimpleX Chat Android
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/it/

* Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (1536 of 1536 strings)

Translation: SimpleX Chat/SimpleX Chat Android
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/zh_Hans/

* Translated using Weblate (Japanese)

Currently translated at 100.0% (1536 of 1536 strings)

Translation: SimpleX Chat/SimpleX Chat Android
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/ja/

* Translated using Weblate (Turkish)

Currently translated at 36.8% (503 of 1364 strings)

Translation: SimpleX Chat/SimpleX Chat iOS
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/tr/

* Translated using Weblate (Turkish)

Currently translated at 100.0% (1536 of 1536 strings)

Translation: SimpleX Chat/SimpleX Chat Android
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/tr/

* Translated using Weblate (Turkish)

Currently translated at 58.8% (803 of 1364 strings)

Translation: SimpleX Chat/SimpleX Chat iOS
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/tr/

* Translated using Weblate (Turkish)

Currently translated at 100.0% (1536 of 1536 strings)

Translation: SimpleX Chat/SimpleX Chat Android
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/tr/

* Translated using Weblate (Turkish)

Currently translated at 64.0% (873 of 1364 strings)

Translation: SimpleX Chat/SimpleX Chat iOS
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/tr/

* Translated using Weblate (Hungarian)

Currently translated at 97.9% (1505 of 1536 strings)

Translation: SimpleX Chat/SimpleX Chat Android
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/hu/

* Translated using Weblate (Hungarian)

Currently translated at 100.0% (1536 of 1536 strings)

Translation: SimpleX Chat/SimpleX Chat Android
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/hu/

* Translated using Weblate (Hungarian)

Currently translated at 100.0% (1536 of 1536 strings)

Translation: SimpleX Chat/SimpleX Chat Android
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/hu/

* Translated using Weblate (Hungarian)

Currently translated at 100.0% (1536 of 1536 strings)

Translation: SimpleX Chat/SimpleX Chat Android
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/hu/

* Translated using Weblate (Hungarian)

Currently translated at 100.0% (1536 of 1536 strings)

Translation: SimpleX Chat/SimpleX Chat Android
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/hu/

* Translated using Weblate (Hungarian)

Currently translated at 100.0% (1536 of 1536 strings)

Translation: SimpleX Chat/SimpleX Chat Android
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/hu/

* Translated using Weblate (Turkish)

Currently translated at 86.1% (1175 of 1364 strings)

Translation: SimpleX Chat/SimpleX Chat iOS
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/tr/

* Translated using Weblate (Turkish)

Currently translated at 100.0% (1536 of 1536 strings)

Translation: SimpleX Chat/SimpleX Chat Android
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/tr/

* Translated using Weblate (Hungarian)

Currently translated at 100.0% (1536 of 1536 strings)

Translation: SimpleX Chat/SimpleX Chat Android
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/hu/

* Translated using Weblate (Hungarian)

Currently translated at 100.0% (1536 of 1536 strings)

Translation: SimpleX Chat/SimpleX Chat Android
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/hu/

* Translated using Weblate (Turkish)

Currently translated at 87.4% (1193 of 1364 strings)

Translation: SimpleX Chat/SimpleX Chat iOS
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/tr/

* Translated using Weblate (Turkish)

Currently translated at 100.0% (1536 of 1536 strings)

Translation: SimpleX Chat/SimpleX Chat Android
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/tr/

* Translated using Weblate (Turkish)

Currently translated at 100.0% (1364 of 1364 strings)

Translation: SimpleX Chat/SimpleX Chat iOS
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/tr/

* Translated using Weblate (Turkish)

Currently translated at 100.0% (1536 of 1536 strings)

Translation: SimpleX Chat/SimpleX Chat Android
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/tr/

* Translated using Weblate (Czech)

Currently translated at 97.9% (1504 of 1536 strings)

Translation: SimpleX Chat/SimpleX Chat Android
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/cs/

* Translated using Weblate (Arabic)

Currently translated at 99.7% (1532 of 1536 strings)

Translation: SimpleX Chat/SimpleX Chat Android
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/ar/

* Translated using Weblate (Bulgarian)

Currently translated at 100.0% (1364 of 1364 strings)

Translation: SimpleX Chat/SimpleX Chat iOS
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/bg/

* Translated using Weblate (Bulgarian)

Currently translated at 100.0% (1536 of 1536 strings)

Translation: SimpleX Chat/SimpleX Chat Android
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/bg/

* Translated using Weblate (Hungarian)

Currently translated at 100.0% (1536 of 1536 strings)

Translation: SimpleX Chat/SimpleX Chat Android
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/hu/

* Translated using Weblate (Italian)

Currently translated at 100.0% (1542 of 1542 strings)

Translation: SimpleX Chat/SimpleX Chat Android
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/it/

* Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (1542 of 1542 strings)

Translation: SimpleX Chat/SimpleX Chat Android
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/zh_Hans/

* Translated using Weblate (Arabic)

Currently translated at 99.7% (1538 of 1542 strings)

Translation: SimpleX Chat/SimpleX Chat Android
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/ar/

* Translated using Weblate (Hungarian)

Currently translated at 99.2% (1549 of 1560 strings)

Translation: SimpleX Chat/SimpleX Chat Android
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/hu/

* Translated using Weblate (German)

Currently translated at 100.0% (1562 of 1562 strings)

Translation: SimpleX Chat/SimpleX Chat Android
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/de/

* Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (1562 of 1562 strings)

Translation: SimpleX Chat/SimpleX Chat Android
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/zh_Hans/

* fixing

* fix

* change

* fix

* import/export

* restore some lost translations

* 24hours

* Revert "24hours"

This reverts commit b715d46e6f.

* 24 hours, import

---------

Co-authored-by: mlanp <github@lang.xyz>
Co-authored-by: Random <random-r@users.noreply.hosted.weblate.org>
Co-authored-by: Eric <zxmegaxqug@hldrive.com>
Co-authored-by: zenobit <zen@osowoso.xyz>
Co-authored-by: B.O.S.S <BxOxSxS@protonmail.com>
Co-authored-by: J R <jr@simplex.chat>
Co-authored-by: summoner001 <summoner@vivaldi.net>
Co-authored-by: No name <CertainBot@users.noreply.hosted.weblate.org>
Co-authored-by: diodepon <diopon@mailo.com>
Co-authored-by: v1s7 <v1s7@users.noreply.hosted.weblate.org>
Co-authored-by: Ophiushi <41908476+ishi-sama@users.noreply.github.com>
Co-authored-by: M1K4 <oomikaoo@gmail.com>
Co-authored-by: 小林照幸 <koba1014@gmail.com>
Co-authored-by: jonnysemon <jonnysemon@users.noreply.hosted.weblate.org>
Co-authored-by: elgratea <weblate@fastmail.com>
Co-authored-by: yokoba0413 <yokoba0413@gmail.com>
Co-authored-by: Kaan P <kaanpeker196@gmail.com>
Co-authored-by: Ghost of Sparta <makesocialfoss32@keemail.me>
Co-authored-by: Avently <7953703+avently@users.noreply.github.com>
Co-authored-by: spaced4ndy <8711996+spaced4ndy@users.noreply.github.com>
2024-01-11 10:14:27 +00:00
Evgeny Poberezkin
f45b24367c cli: short command 2024-01-11 08:21:02 +00:00
Stanislav Dmitrenko
9e369c3ac9 android, desktop: lock on changing user (#3669)
* android, desktop: lock on changing user

* rename

* change

* change
2024-01-10 21:31:16 +00:00
Evgeny Poberezkin
afbb3b4e4b website: translations (#3667)
* Translated using Weblate (Arabic)

Currently translated at 100.0% (252 of 252 strings)

Translation: SimpleX Chat/SimpleX Chat website
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/website/ar/

* Translated using Weblate (Chinese (Simplified))

Currently translated at 100.0% (252 of 252 strings)

Translation: SimpleX Chat/SimpleX Chat website
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/website/zh_Hans/

* Translated using Weblate (Japanese)

Currently translated at 100.0% (252 of 252 strings)

Translation: SimpleX Chat/SimpleX Chat website
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/website/ja/

* correction

* correction

* revert

* keep new, revert changes in old ja strings

---------

Co-authored-by: jonnysemon <jonnysemon@users.noreply.hosted.weblate.org>
Co-authored-by: Eric <zxmegaxqug@hldrive.com>
Co-authored-by: yokoba0413 <yokoba0413@gmail.com>
2024-01-10 20:35:59 +00:00
Stanislav Dmitrenko
acd05c43db mobile: chat deletion avoiding race conditions (#3650)
* android, desktop: chat items deletion

* rename

* ios: chat items deletion

* correct id

* android: adding progress of deletion

* ios: text color while deleting chats

* change only text color

---------

Co-authored-by: Avently <avently@local>
Co-authored-by: Evgeny Poberezkin <2769109+epoberezkin@users.noreply.github.com>
2024-01-10 16:57:34 +00:00
Evgeny Poberezkin
61b14b22d5 5.5-beta.1: ios 189, android 171, desktop 23 2024-01-10 14:18:14 +00:00
Evgeny Poberezkin
25a4719414 core: 5.5.0.1 2024-01-10 12:06:29 +00:00
Evgeny Poberezkin
f802ec75fe Merge branch 'stable' 2024-01-10 12:05:00 +00:00
Evgeny Poberezkin
045b195483 5.4.3: ios 188, android 169, desktop 22 2024-01-10 11:56:57 +00:00
spaced4ndy
283c90f5ae core: fix db method reserving extra local display name (#3659)
Co-authored-by: Evgeny Poberezkin <2769109+epoberezkin@users.noreply.github.com>
2024-01-10 11:09:09 +04:00
Stanislav Dmitrenko
99a9fb2e1f ios: self destruct improvements (#3640)
* ios: self destruct improvements

* test

* adapted to stopped chat

* wait until ctrl initialization finishes

* Revert "test"

This reverts commit 7c199293cc.

* refactor

* simplify,fix

* refactor2

* refactor3

* comment

* fix

* fix

* comment

Co-authored-by: spaced4ndy <8711996+spaced4ndy@users.noreply.github.com>

* flip and rename flag

---------

Co-authored-by: Avently <avently@local>
Co-authored-by: Evgeny Poberezkin <2769109+epoberezkin@users.noreply.github.com>
Co-authored-by: spaced4ndy <8711996+spaced4ndy@users.noreply.github.com>
2024-01-09 21:01:41 +00:00
Evgeny Poberezkin
ce9d583b39 Merge branch 'stable' 2024-01-09 20:36:30 +00:00
Evgeny Poberezkin
53414608db core: 5.4.3.0 (simplexmq 5.5.0.5) 2024-01-09 20:20:14 +00:00
Stanislav Dmitrenko
c7cf206585 android: fix call sound when the app in the background (#3660)
* android: fix call sound when the app in the background

* using previous notification channel

* Revert "using previous notification channel"

This reverts commit 19da9a9ce193c39b353f478e884a97bbbf002e77.

* prevent playing sound on call twice
2024-01-09 19:45:46 +00:00
Evgeny Poberezkin
6067ac3c93 ios: more aggressive GC in NSE 2024-01-09 19:34:54 +00:00
Evgeny Poberezkin
fc56873f1c ios: update core library 2024-01-09 19:33:55 +00:00
Stanislav Dmitrenko
a30da38af7 android, desktop: accept calls after restart (#3662) 2024-01-09 19:31:01 +00:00
Stanislav Dmitrenko
0bf3d054c6 mobile, desktop: invalid display name alert (#3664)
* ios: invalid display name alert

* android, desktop: invalid display name

---------

Co-authored-by: Avently <avently@local>
2024-01-09 19:26:47 +00:00
Stanislav Dmitrenko
a55a8b116a script: changes in script for downloading libs (#3663)
* script: changes in script for downloading libs

* ios script
2024-01-09 17:23:20 +00:00
Stanislav Dmitrenko
7a207fd641 android, desktop: alerts when device was disconnected (#3483) 2024-01-09 14:21:29 +00:00
Evgeny Poberezkin
4508e0dfc1 Merge branch 'stable' 2024-01-09 11:07:04 +00:00
Stanislav Dmitrenko
a853ba3a15 android, desktop: adapted code for self destruct for ios logic (#3643)
* android, desktop: adapted code for self destruct for ios logic

* init db in case of periodic && self destruct enabled
2024-01-09 09:59:21 +00:00
Evgeny Poberezkin
a2f190a6c6 core: update simplexmq (better batching) 2024-01-09 09:15:35 +00:00
Stanislav Dmitrenko
267178dddb android, desktop: show alerts on critical and internal errors (#3653)
* android, desktop: show alerts on critical and internal errors

* test

* don't stop chat if it's stopped already

* show notification

* restart chat or app

* Revert "test"

This reverts commit 5b78bbae5b.

* update strings

* strings2

* refactoring

* refactoring2

* refactoring3

---------

Co-authored-by: Evgeny Poberezkin <2769109+epoberezkin@users.noreply.github.com>
2024-01-08 18:20:52 +00:00
spaced4ndy
fadce0c140 core: create new chat controller with chatActivated set to true 2024-01-08 17:34:10 +04:00
spaced4ndy
58ad97fe6d core: pause cleanup when chat is suspended (#3658) 2024-01-08 17:28:01 +04:00
Evgeny Poberezkin
3ccd9903a7 core: do not start clean up manager in background NSE (#3657)
* core: do not start clean up manager in background NSE

* update UIs

* fix test
2024-01-08 12:53:16 +00:00
Evgeny Poberezkin
e294999044 ios: fix callkit calls via NSE (#3655)
* ios: fix callkit calls via NSE

* comments

* more reliable NSE start

* remove public logs, different RTS parameters for NSE

* only suspend NSE if we have chat controller, to avoid crashes if suspension attempted without controller created

* comments

* fix

* simplify
2024-01-08 10:56:01 +00:00
Evgeny Poberezkin
2bbc687f4a core: simplexmq 5.5.0.4 2024-01-06 11:48:28 +00:00
Evgeny Poberezkin
61c507e7da core: replace deprecated memcpy (#3652) 2024-01-06 11:32:26 +00:00
Evgeny Poberezkin
64230f3545 Merge branch 'stable' 2024-01-05 20:07:35 +00:00
Evgeny Poberezkin
bb61b9c658 core: update simplexmq (critical errors, worker restarts, subscription timeouts) 2024-01-05 20:07:19 +00:00
Evgeny Poberezkin
3428f4d2ee core: update simplexmq (critical errors, worker restarts, subscription timeouts) 2024-01-05 18:51:18 +00:00
Stanislav Dmitrenko
fe865c5e11 android, desktop: consistent colors in themes (#3649) 2024-01-05 18:45:52 +00:00
spaced4ndy
9e87fe73a5 core: batch send profile update (#3618)
* core: batch send profile update

* redundant

* reorder

* remove type

* createSndMessages

* refactor

* batched create internal item

* create feature items for multiple contacts

* comments

* refactor call site

* synonim

* refactor createSndMessages

* more batching

* remove partitionWith

* unite filter and fold

* refactor

* refactor

* refactor

* fix merge

* add test

* rename

* refactor

* refactor

* withExceptT

* refactor

* refactor2

* remove notChanged

* deliver with sendMessagesB (#3646)

* deliver with sendMessagesB

* refactor

---------

Co-authored-by: Evgeny Poberezkin <2769109+epoberezkin@users.noreply.github.com>

---------

Co-authored-by: Evgeny Poberezkin <2769109+epoberezkin@users.noreply.github.com>
Co-authored-by: Alexander Bondarenko <486682+dpwiz@users.noreply.github.com>
2024-01-05 11:35:48 +04:00
Evgeny Poberezkin
0ef2c55983 core: invalid name error when it matches hidden profile (#3647) 2024-01-04 19:29:28 +00:00
spaced4ndy
8882284fb7 core: always check integrity on MSG in direct chats (#3641) 2024-01-04 16:22:16 +04:00
sh
575d899f5a build-android: fix new arrangement of nix command (#3634) 2024-01-02 14:39:23 +00:00
sh
825257e898 build-android: update nix and add armv7a branch switch (#3612)
* build-android: build armv7a in seperate tag

And update nix install.

* build-android: change tag detection logic

* build-android: minor change of logic
2023-12-30 10:19:56 +00:00
226 changed files with 14072 additions and 3712 deletions

View File

@@ -127,6 +127,7 @@ Join our translators to help SimpleX grow!
|🇫🇮 fi|Suomi | |[![android app](https://hosted.weblate.org/widgets/simplex-chat/fi/android/svg-badge.svg)](https://hosted.weblate.org/projects/simplex-chat/android/fi/)<br>[![ios app](https://hosted.weblate.org/widgets/simplex-chat/fi/ios/svg-badge.svg)](https://hosted.weblate.org/projects/simplex-chat/ios/fi/)|[![website](https://hosted.weblate.org/widgets/simplex-chat/fi/website/svg-badge.svg)](https://hosted.weblate.org/projects/simplex-chat/website/fi/)||
|🇫🇷 fr|Français |[ishi_sama](https://github.com/ishi-sama)|[![android app](https://hosted.weblate.org/widgets/simplex-chat/fr/android/svg-badge.svg)](https://hosted.weblate.org/projects/simplex-chat/android/fr/)<br>[![ios app](https://hosted.weblate.org/widgets/simplex-chat/fr/ios/svg-badge.svg)](https://hosted.weblate.org/projects/simplex-chat/ios/fr/)|[![website](https://hosted.weblate.org/widgets/simplex-chat/fr/website/svg-badge.svg)](https://hosted.weblate.org/projects/simplex-chat/website/fr/)|[](https://github.com/simplex-chat/simplex-chat/tree/master/docs/lang/fr)|
|🇮🇱 he|עִברִית | |[![android app](https://hosted.weblate.org/widgets/simplex-chat/he/android/svg-badge.svg)](https://hosted.weblate.org/projects/simplex-chat/android/he/)<br>-|||
|🇭🇺 hu|Magyar | |[![android app](https://hosted.weblate.org/widgets/simplex-chat/hu/android/svg-badge.svg)](https://hosted.weblate.org/projects/simplex-chat/android/hu/)<br>-|||
|🇮🇹 it|Italiano |[unbranched](https://github.com/unbranched)|[![android app](https://hosted.weblate.org/widgets/simplex-chat/it/android/svg-badge.svg)](https://hosted.weblate.org/projects/simplex-chat/android/it/)<br>[![ios app](https://hosted.weblate.org/widgets/simplex-chat/it/ios/svg-badge.svg)](https://hosted.weblate.org/projects/simplex-chat/ios/it/)|[![website](https://hosted.weblate.org/widgets/simplex-chat/it/website/svg-badge.svg)](https://hosted.weblate.org/projects/simplex-chat/website/it/)||
|🇯🇵 ja|日本語 | |[![android app](https://hosted.weblate.org/widgets/simplex-chat/ja/android/svg-badge.svg)](https://hosted.weblate.org/projects/simplex-chat/android/ja/)<br>[![ios app](https://hosted.weblate.org/widgets/simplex-chat/ja/ios/svg-badge.svg)](https://hosted.weblate.org/projects/simplex-chat/ios/ja/)|[![website](https://hosted.weblate.org/widgets/simplex-chat/ja/website/svg-badge.svg)](https://hosted.weblate.org/projects/simplex-chat/website/ja/)||
|🇳🇱 nl|Nederlands|[mika-nl](https://github.com/mika-nl)|[![android app](https://hosted.weblate.org/widgets/simplex-chat/nl/android/svg-badge.svg)](https://hosted.weblate.org/projects/simplex-chat/android/nl/)<br>[![ios app](https://hosted.weblate.org/widgets/simplex-chat/nl/ios/svg-badge.svg)](https://hosted.weblate.org/projects/simplex-chat/ios/nl/)|[![website](https://hosted.weblate.org/widgets/simplex-chat/nl/website/svg-badge.svg)](https://hosted.weblate.org/projects/simplex-chat/website/nl/)||
@@ -134,6 +135,7 @@ Join our translators to help SimpleX grow!
|🇧🇷 pt-BR|Português||[![android app](https://hosted.weblate.org/widgets/simplex-chat/pt_BR/android/svg-badge.svg)](https://hosted.weblate.org/projects/simplex-chat/android/pt_BR/)<br>-|[![website](https://hosted.weblate.org/widgets/simplex-chat/pt_BR/website/svg-badge.svg)](https://hosted.weblate.org/projects/simplex-chat/website/pt_BR/)||
|🇷🇺 ru|Русский ||[![android app](https://hosted.weblate.org/widgets/simplex-chat/ru/android/svg-badge.svg)](https://hosted.weblate.org/projects/simplex-chat/android/ru/)<br>[![ios app](https://hosted.weblate.org/widgets/simplex-chat/ru/ios/svg-badge.svg)](https://hosted.weblate.org/projects/simplex-chat/ios/ru/)|||
|🇹🇭 th|ภาษาไทย |[titapa-punpun](https://github.com/titapa-punpun)|[![android app](https://hosted.weblate.org/widgets/simplex-chat/th/android/svg-badge.svg)](https://hosted.weblate.org/projects/simplex-chat/android/th/)<br>[![ios app](https://hosted.weblate.org/widgets/simplex-chat/th/ios/svg-badge.svg)](https://hosted.weblate.org/projects/simplex-chat/ios/th/)|||
|🇹🇷 tr|Türkçe | |[![android app](https://hosted.weblate.org/widgets/simplex-chat/tr/android/svg-badge.svg)](https://hosted.weblate.org/projects/simplex-chat/android/tr/)<br>[![ios app](https://hosted.weblate.org/widgets/simplex-chat/tr/ios/svg-badge.svg)](https://hosted.weblate.org/projects/simplex-chat/ios/tr/)|||
|🇺🇦 uk|Українська| |[![android app](https://hosted.weblate.org/widgets/simplex-chat/uk/android/svg-badge.svg)](https://hosted.weblate.org/projects/simplex-chat/android/uk/)<br>[![ios app](https://hosted.weblate.org/widgets/simplex-chat/uk/ios/svg-badge.svg)](https://hosted.weblate.org/projects/simplex-chat/ios/uk/)|[![website](https://hosted.weblate.org/widgets/simplex-chat/uk/website/svg-badge.svg)](https://hosted.weblate.org/projects/simplex-chat/website/uk/)||
|🇨🇳 zh-CHS|简体中文|[sith-on-mars](https://github.com/sith-on-mars)<br><br>[Float-hu](https://github.com/Float-hu)|[![android app](https://hosted.weblate.org/widgets/simplex-chat/zh_Hans/android/svg-badge.svg)](https://hosted.weblate.org/projects/simplex-chat/android/zh_Hans/)<br>[![ios app](https://hosted.weblate.org/widgets/simplex-chat/zh_Hans/ios/svg-badge.svg)](https://hosted.weblate.org/projects/simplex-chat/ios/zh_Hans/)<br>&nbsp;|<br><br>[![website](https://hosted.weblate.org/widgets/simplex-chat/zh_Hans/website/svg-badge.svg)](https://hosted.weblate.org/projects/simplex-chat/website/zh_Hans/)||

View File

@@ -31,6 +31,7 @@ struct ContentView: View {
@State private var showWhatsNew = false
@State private var showChooseLAMode = false
@State private var showSetPasscode = false
@State private var waitingForOrPassedAuth = true
@State private var chatListActionSheet: ChatListActionSheet? = nil
private enum ChatListActionSheet: Identifiable {
@@ -61,6 +62,10 @@ struct ContentView: View {
}
if !showSettings, let la = chatModel.laRequest {
LocalAuthView(authRequest: la)
.onDisappear {
// this flag is separate from accessAuthenticated to show initializationView while we wait for authentication
waitingForOrPassedAuth = accessAuthenticated
}
} else if showSetPasscode {
SetAppPasscodeView {
chatModel.contentViewAccessAuthenticated = true
@@ -73,8 +78,7 @@ struct ContentView: View {
showSetPasscode = false
alertManager.showAlert(laPasscodeNotSetAlert())
}
}
if chatModel.chatDbStatus == nil {
} else if chatModel.chatDbStatus == nil && AppChatState.shared.value != .stopped && waitingForOrPassedAuth {
initializationView()
}
}

View File

@@ -54,11 +54,13 @@ final class ChatModel: ObservableObject {
@Published var chatDbChanged = false
@Published var chatDbEncrypted: Bool?
@Published var chatDbStatus: DBMigrationResult?
@Published var ctrlInitInProgress: Bool = false
// local authentication
@Published var contentViewAccessAuthenticated: Bool = false
@Published var laRequest: LocalAuthRequest?
// list of chat "previews"
@Published var chats: [Chat] = []
@Published var deletedChats: Set<String> = []
// map of connections network statuses, key is agent connection id
@Published var networkStatuses: Dictionary<String, NetworkStatus> = [:]
// current chat

View File

@@ -16,13 +16,13 @@ private var nseSubscribers: [UUID:NSESubscriber] = [:]
private let SUSPENDING_TIMEOUT: TimeInterval = 2
// timeout should be larger than SUSPENDING_TIMEOUT
func waitNSESuspended(timeout: TimeInterval, dispatchQueue: DispatchQueue = DispatchQueue.main, suspended: @escaping (Bool) -> Void) {
func waitNSESuspended(timeout: TimeInterval, suspended: @escaping (Bool) -> Void) {
if timeout <= SUSPENDING_TIMEOUT {
logger.warning("waitNSESuspended: small timeout \(timeout), using \(SUSPENDING_TIMEOUT + 1)")
}
var state = nseStateGroupDefault.get()
if case .suspended = state {
dispatchQueue.async { suspended(true) }
DispatchQueue.main.async { suspended(true) }
return
}
let id = UUID()
@@ -45,7 +45,7 @@ func waitNSESuspended(timeout: TimeInterval, dispatchQueue: DispatchQueue = Disp
logger.debug("waitNSESuspended notifySuspended: calling suspended(\(ok))")
suspendedCalled = true
nseSubscribers.removeValue(forKey: id)
dispatchQueue.async { suspended(ok) }
DispatchQueue.main.async { suspended(ok) }
}
}

View File

@@ -211,7 +211,7 @@ func apiDeleteUser(_ userId: Int64, _ delSMPQueues: Bool, viewPwd: String?) asyn
}
func apiStartChat() throws -> Bool {
let r = chatSendCmdSync(.startChat(subscribe: true, expire: true, xftp: true))
let r = chatSendCmdSync(.startChat(mainApp: true))
switch r {
case .chatStarted: return true
case .chatRunning: return false
@@ -403,7 +403,7 @@ func apiGetNtfToken() -> (DeviceToken?, NtfTknStatus?, NotificationsMode) {
case let .ntfToken(token, status, ntfMode): return (token, status, ntfMode)
case .chatCmdError(_, .errorAgent(.CMD(.PROHIBITED))): return (nil, nil, .off)
default:
logger.debug("apiGetNtfToken response: \(String(describing: r), privacy: .public)")
logger.debug("apiGetNtfToken response: \(String(describing: r))")
return (nil, nil, .off)
}
}
@@ -691,6 +691,9 @@ func apiConnectContactViaAddress(incognito: Bool, contactId: Int64) async -> (Co
}
func apiDeleteChat(type: ChatType, id: Int64, notify: Bool? = nil) async throws {
let chatId = type.rawValue + id.description
DispatchQueue.main.async { ChatModel.shared.deletedChats.insert(chatId) }
defer { DispatchQueue.main.async { ChatModel.shared.deletedChats.remove(chatId) } }
let r = await chatSendCmd(.apiDeleteChat(type: type, id: id, notify: notify), bgTask: false)
if case .direct = type, case .contactDeleted = r { return }
if case .contactConnection = type, case .contactConnectionDeleted = r { return }
@@ -1215,6 +1218,8 @@ private func currentUserId(_ funcName: String) throws -> Int64 {
func initializeChat(start: Bool, confirmStart: Bool = false, dbKey: String? = nil, refreshInvitations: Bool = true, confirmMigrations: MigrationConfirmation? = nil) throws {
logger.debug("initializeChat")
let m = ChatModel.shared
m.ctrlInitInProgress = true
defer { m.ctrlInitInProgress = false }
(m.chatDbEncrypted, m.chatDbStatus) = chatMigrateInit(dbKey, confirmMigrations: confirmMigrations)
if m.chatDbStatus != .ok { return }
// If we migrated successfully means previous re-encryption process on database level finished successfully too

View File

@@ -19,11 +19,13 @@ let terminationTimeout: Int = 3 // seconds
let activationDelay: TimeInterval = 1.5
let nseSuspendTimeout: TimeInterval = 5
private func _suspendChat(timeout: Int) {
// this is a redundant check to prevent logical errors, like the one fixed in this PR
let state = AppChatState.shared.value
if !state.canSuspend {
logger.error("_suspendChat called, current state: \(state.rawValue, privacy: .public)")
logger.error("_suspendChat called, current state: \(state.rawValue)")
} else if ChatModel.ok {
AppChatState.shared.set(.suspending)
apiSuspendChat(timeoutMicroseconds: timeout * 1000000)
@@ -124,20 +126,33 @@ func initChatAndMigrate(refreshInvitations: Bool = true) {
}
}
func startChatAndActivate(dispatchQueue: DispatchQueue = DispatchQueue.main, _ completion: @escaping () -> Void) {
func startChatForCall() {
logger.debug("DEBUGGING: startChatForCall")
if ChatModel.shared.chatRunning == true {
ChatReceiver.shared.start()
logger.debug("DEBUGGING: startChatForCall: after ChatReceiver.shared.start")
}
if .active != AppChatState.shared.value {
logger.debug("DEBUGGING: startChatForCall: before activateChat")
activateChat()
logger.debug("DEBUGGING: startChatForCall: after activateChat")
}
}
func startChatAndActivate(_ completion: @escaping () -> Void) {
logger.debug("DEBUGGING: startChatAndActivate")
if ChatModel.shared.chatRunning == true {
ChatReceiver.shared.start()
logger.debug("DEBUGGING: startChatAndActivate: after ChatReceiver.shared.start")
}
if .active == AppChatState.shared.value {
if case .active = AppChatState.shared.value {
completion()
} else if nseStateGroupDefault.get().inactive {
activate()
} else {
// setting app state to "activating" to notify NSE that it should suspend
setAppState(.activating)
waitNSESuspended(timeout: 10, dispatchQueue: dispatchQueue) { ok in
waitNSESuspended(timeout: nseSuspendTimeout) { ok in
if !ok {
// if for some reason NSE failed to suspend,
// e.g., it crashed previously without setting its state to "suspended",

View File

@@ -44,8 +44,10 @@ struct SimpleXApp: App {
chatModel.appOpenUrl = url
}
.onAppear() {
DispatchQueue.main.asyncAfter(deadline: .now() + 0.15) {
initChatAndMigrate()
if kcAppPassword.get() == nil || kcSelfDestructPassword.get() == nil {
DispatchQueue.main.asyncAfter(deadline: .now() + 0.15) {
initChatAndMigrate()
}
}
}
.onChange(of: scenePhase) { phase in
@@ -98,12 +100,12 @@ struct SimpleXApp: App {
if legacyDatabase, case .documents = dbContainerGroupDefault.get() {
dbContainerGroupDefault.set(.documents)
setMigrationState(.offer)
logger.debug("SimpleXApp init: using legacy DB in documents folder: \(getAppDatabasePath(), privacy: .public)*.db")
logger.debug("SimpleXApp init: using legacy DB in documents folder: \(getAppDatabasePath())*.db")
} else {
dbContainerGroupDefault.set(.group)
setMigrationState(.ready)
logger.debug("SimpleXApp init: using DB in app group container: \(getAppDatabasePath(), privacy: .public)*.db")
logger.debug("SimpleXApp init: legacy DB\(legacyDatabase ? "" : " not", privacy: .public) present")
logger.debug("SimpleXApp init: using DB in app group container: \(getAppDatabasePath())*.db")
logger.debug("SimpleXApp init: legacy DB\(legacyDatabase ? "" : " not") present")
}
}

View File

@@ -38,13 +38,13 @@ struct ActiveCallView: View {
}
}
.onAppear {
logger.debug("ActiveCallView: appear client is nil \(client == nil), scenePhase \(String(describing: scenePhase), privacy: .public), canConnectCall \(canConnectCall)")
logger.debug("ActiveCallView: appear client is nil \(client == nil), scenePhase \(String(describing: scenePhase)), canConnectCall \(canConnectCall)")
AppDelegate.keepScreenOn(true)
createWebRTCClient()
dismissAllSheets()
}
.onChange(of: canConnectCall) { _ in
logger.debug("ActiveCallView: canConnectCall changed to \(canConnectCall, privacy: .public)")
logger.debug("ActiveCallView: canConnectCall changed to \(canConnectCall)")
createWebRTCClient()
}
.onDisappear {

View File

@@ -130,7 +130,7 @@ class CallController: NSObject, CXProviderDelegate, PKPushRegistryDelegate, Obse
// The delay allows to accept the second call before suspending a chat
// see `.onChange(of: scenePhase)` in SimpleXApp
DispatchQueue.main.asyncAfter(deadline: .now() + 3) { [weak self] in
logger.debug("CallController: shouldSuspendChat \(String(describing: self?.shouldSuspendChat), privacy: .public)")
logger.debug("CallController: shouldSuspendChat \(String(describing: self?.shouldSuspendChat))")
if ChatModel.shared.activeCall == nil && self?.shouldSuspendChat == true {
self?.shouldSuspendChat = false
suspendChat()
@@ -142,45 +142,57 @@ class CallController: NSObject, CXProviderDelegate, PKPushRegistryDelegate, Obse
@objc(pushRegistry:didUpdatePushCredentials:forType:)
func pushRegistry(_ registry: PKPushRegistry, didUpdate pushCredentials: PKPushCredentials, for type: PKPushType) {
logger.debug("CallController: didUpdate push credentials for type \(type.rawValue, privacy: .public)")
logger.debug("CallController: didUpdate push credentials for type \(type.rawValue)")
}
func pushRegistry(_ registry: PKPushRegistry, didReceiveIncomingPushWith payload: PKPushPayload, for type: PKPushType, completion: @escaping () -> Void) {
logger.debug("CallController: did receive push with type \(type.rawValue, privacy: .public)")
logger.debug("CallController: did receive push with type \(type.rawValue)")
if type != .voIP {
completion()
return
}
logger.debug("CallController: initializing chat")
if (!ChatModel.shared.chatInitialized) {
initChatAndMigrate(refreshInvitations: false)
if AppChatState.shared.value == .stopped {
self.reportExpiredCall(payload: payload, completion)
return
}
startChatAndActivate(dispatchQueue: DispatchQueue.global()) {
self.shouldSuspendChat = true
// There are no invitations in the model, as it was processed by NSE
_ = try? justRefreshCallInvitations()
// logger.debug("CallController justRefreshCallInvitations: \(String(describing: m.callInvitations))")
// Extract the call information from the push notification payload
let m = ChatModel.shared
if let contactId = payload.dictionaryPayload["contactId"] as? String,
let invitation = m.callInvitations[contactId] {
if (!ChatModel.shared.chatInitialized) {
logger.debug("CallController: initializing chat")
do {
try initializeChat(start: true, refreshInvitations: false)
} catch let error {
logger.error("CallController: initializing chat error: \(error)")
self.reportExpiredCall(payload: payload, completion)
return
}
}
logger.debug("CallController: initialized chat")
startChatForCall()
logger.debug("CallController: started chat")
self.shouldSuspendChat = true
// There are no invitations in the model, as it was processed by NSE
_ = try? justRefreshCallInvitations()
logger.debug("CallController: updated call invitations chat")
// logger.debug("CallController justRefreshCallInvitations: \(String(describing: m.callInvitations))")
// Extract the call information from the push notification payload
let m = ChatModel.shared
if let contactId = payload.dictionaryPayload["contactId"] as? String,
let invitation = m.callInvitations[contactId] {
let update = self.cxCallUpdate(invitation: invitation)
if let uuid = invitation.callkitUUID {
logger.debug("CallController: report pushkit call via CallKit")
let update = self.cxCallUpdate(invitation: invitation)
if let uuid = invitation.callkitUUID {
logger.debug("CallController: report pushkit call via CallKit")
let update = self.cxCallUpdate(invitation: invitation)
self.provider.reportNewIncomingCall(with: uuid, update: update) { error in
if error != nil {
m.callInvitations.removeValue(forKey: contactId)
}
// Tell PushKit that the notification is handled.
completion()
self.provider.reportNewIncomingCall(with: uuid, update: update) { error in
if error != nil {
m.callInvitations.removeValue(forKey: contactId)
}
} else {
self.reportExpiredCall(update: update, completion)
// Tell PushKit that the notification is handled.
completion()
}
} else {
self.reportExpiredCall(payload: payload, completion)
self.reportExpiredCall(update: update, completion)
}
} else {
self.reportExpiredCall(payload: payload, completion)
}
}
@@ -211,7 +223,7 @@ class CallController: NSObject, CXProviderDelegate, PKPushRegistryDelegate, Obse
}
func reportNewIncomingCall(invitation: RcvCallInvitation, completion: @escaping (Error?) -> Void) {
logger.debug("CallController.reportNewIncomingCall, UUID=\(String(describing: invitation.callkitUUID), privacy: .public)")
logger.debug("CallController.reportNewIncomingCall, UUID=\(String(describing: invitation.callkitUUID))")
if CallController.useCallKit(), let uuid = invitation.callkitUUID {
if invitation.callTs.timeIntervalSinceNow >= -180 {
let update = cxCallUpdate(invitation: invitation)
@@ -351,7 +363,7 @@ class CallController: NSObject, CXProviderDelegate, PKPushRegistryDelegate, Obse
private func requestTransaction(with action: CXAction, onSuccess: @escaping () -> Void = {}) {
controller.request(CXTransaction(action: action)) { error in
if let error = error {
logger.error("CallController.requestTransaction error requesting transaction: \(error.localizedDescription, privacy: .public)")
logger.error("CallController.requestTransaction error requesting transaction: \(error.localizedDescription)")
} else {
logger.debug("CallController.requestTransaction requested transaction successfully")
onSuccess()

View File

@@ -160,7 +160,7 @@ struct ChatListView: View {
ForEach(cs, id: \.viewId) { chat in
ChatListNavLink(chat: chat)
.padding(.trailing, -16)
.disabled(chatModel.chatRunning != true)
.disabled(chatModel.chatRunning != true || chatModel.deletedChats.contains(chat.chatInfo.id))
}
.offset(x: -8)
}

View File

@@ -13,6 +13,7 @@ struct ChatPreviewView: View {
@EnvironmentObject var chatModel: ChatModel
@ObservedObject var chat: Chat
@Binding var progressByTimeout: Bool
@State var deleting: Bool = false
@Environment(\.colorScheme) var colorScheme
var darkGreen = Color(red: 0, green: 0.5, blue: 0)
@@ -55,6 +56,9 @@ struct ChatPreviewView: View {
.frame(maxHeight: .infinity)
}
.padding(.bottom, -8)
.onChange(of: chatModel.deletedChats.contains(chat.chatInfo.id)) { contains in
deleting = contains
}
}
@ViewBuilder private func chatPreviewImageOverlayIcon() -> some View {
@@ -87,13 +91,13 @@ struct ChatPreviewView: View {
let t = Text(chat.chatInfo.chatViewName).font(.title3).fontWeight(.bold)
switch chat.chatInfo {
case let .direct(contact):
previewTitle(contact.verified == true ? verifiedIcon + t : t)
previewTitle(contact.verified == true ? verifiedIcon + t : t).foregroundColor(deleting ? Color.secondary : nil)
case let .group(groupInfo):
let v = previewTitle(t)
let v = previewTitle(t).foregroundColor(deleting ? Color.secondary : nil)
switch (groupInfo.membership.memberStatus) {
case .memInvited: v.foregroundColor(chat.chatInfo.incognito ? .indigo : .accentColor)
case .memInvited: v.foregroundColor(deleting ? .secondary : chat.chatInfo.incognito ? .indigo : .accentColor)
case .memAccepted: v.foregroundColor(.secondary)
default: v
default: v.foregroundColor(deleting ? Color.secondary : nil)
}
default: previewTitle(t)
}

View File

@@ -484,6 +484,7 @@ func deleteChatAsync() async throws {
try await apiDeleteStorage()
_ = kcDatabasePassword.remove()
storeDBPassphraseGroupDefault.set(true)
deleteAppDatabaseAndFiles()
}
struct DatabaseView_Previews: PreviewProvider {

View File

@@ -13,19 +13,28 @@ struct LocalAuthView: View {
@EnvironmentObject var m: ChatModel
var authRequest: LocalAuthRequest
@State private var password = ""
@State private var allowToReact = true
var body: some View {
PasscodeView(passcode: $password, title: authRequest.title ?? "Enter Passcode", reason: authRequest.reason, submitLabel: "Submit") {
PasscodeView(passcode: $password, title: authRequest.title ?? "Enter Passcode", reason: authRequest.reason, submitLabel: "Submit",
buttonsEnabled: $allowToReact) {
if let sdPassword = kcSelfDestructPassword.get(), authRequest.selfDestruct && password == sdPassword {
allowToReact = false
deleteStorageAndRestart(sdPassword) { r in
m.laRequest = nil
authRequest.completed(r)
}
return
}
let r: LAResult = password == authRequest.password
? .success
: .failed(authError: NSLocalizedString("Incorrect passcode", comment: "PIN entry"))
let r: LAResult
if password == authRequest.password {
if authRequest.selfDestruct && kcSelfDestructPassword.get() != nil && !m.chatInitialized {
initChatAndMigrate()
}
r = .success
} else {
r = .failed(authError: NSLocalizedString("Incorrect passcode", comment: "PIN entry"))
}
m.laRequest = nil
authRequest.completed(r)
} cancel: {
@@ -37,8 +46,27 @@ struct LocalAuthView: View {
private func deleteStorageAndRestart(_ password: String, completed: @escaping (LAResult) -> Void) {
Task {
do {
try await stopChatAsync()
try await deleteChatAsync()
/** Waiting until [initializeChat] finishes */
while (m.ctrlInitInProgress) {
try await Task.sleep(nanoseconds: 50_000000)
}
if m.chatRunning == true {
try await stopChatAsync()
}
if m.chatInitialized {
/**
* The following sequence can bring a user here:
* the user opened the app, entered app passcode, went to background, returned back, entered self-destruct code.
* In this case database should be closed to prevent possible situation when OS can deny database removal command
* */
chatCloseStore()
}
deleteAppDatabaseAndFiles()
// Clear sensitive data on screen just in case app fails to hide its views while new database is created
m.chatId = nil
m.reversedChatItems = []
m.chats = []
m.users = []
_ = kcAppPassword.set(password)
_ = kcSelfDestructPassword.remove()
await NtfManager.shared.removeAllNotifications()
@@ -53,7 +81,7 @@ struct LocalAuthView: View {
try initializeChat(start: true)
m.chatDbChanged = false
AppChatState.shared.set(.active)
if m.currentUser != nil { return }
if m.currentUser != nil || !m.chatInitialized { return }
var profile: Profile? = nil
if let displayName = displayName, displayName != "" {
profile = Profile(displayName: displayName, fullName: "")

View File

@@ -14,6 +14,8 @@ struct PasscodeView: View {
var reason: String? = nil
var submitLabel: LocalizedStringKey
var submitEnabled: ((String) -> Bool)?
@Binding var buttonsEnabled: Bool
var submit: () -> Void
var cancel: () -> Void
@@ -70,11 +72,11 @@ struct PasscodeView: View {
@ViewBuilder private func buttonsView() -> some View {
Button(action: cancel) {
Label("Cancel", systemImage: "multiply")
}
}.disabled(!buttonsEnabled)
Button(action: submit) {
Label(submitLabel, systemImage: "checkmark")
}
.disabled(submitEnabled?(passcode) == false || passcode.count < 4)
.disabled(submitEnabled?(passcode) == false || passcode.count < 4 || !buttonsEnabled)
}
}
@@ -85,6 +87,7 @@ struct PasscodeViewView_Previews: PreviewProvider {
title: "Enter Passcode",
reason: "Unlock app",
submitLabel: "Submit",
buttonsEnabled: Binding.constant(true),
submit: {},
cancel: {}
)

View File

@@ -11,6 +11,7 @@ import SimpleXChat
struct SetAppPasscodeView: View {
var passcodeKeychain: KeyChainItem = kcAppPassword
var prohibitedPasscodeKeychain: KeyChainItem = kcSelfDestructPassword
var title: LocalizedStringKey = "New Passcode"
var reason: String?
var submit: () -> Void
@@ -41,7 +42,10 @@ struct SetAppPasscodeView: View {
}
}
} else {
setPasswordView(title: title, submitLabel: "Save") {
setPasswordView(title: title,
submitLabel: "Save",
// Do not allow to set app passcode == selfDestruct passcode
submitEnabled: { pwd in pwd != prohibitedPasscodeKeychain.get() }) {
enteredPassword = passcode
passcode = ""
confirming = true
@@ -54,7 +58,7 @@ struct SetAppPasscodeView: View {
}
private func setPasswordView(title: LocalizedStringKey, submitLabel: LocalizedStringKey, submitEnabled: (((String) -> Bool))? = nil, submit: @escaping () -> Void) -> some View {
PasscodeView(passcode: $passcode, title: title, reason: reason, submitLabel: submitLabel, submitEnabled: submitEnabled, submit: submit) {
PasscodeView(passcode: $passcode, title: title, reason: reason, submitLabel: submitLabel, submitEnabled: submitEnabled, buttonsEnabled: Binding.constant(true), submit: submit) {
dismiss()
cancel()
}

View File

@@ -11,12 +11,14 @@ import SimpleXChat
enum UserProfileAlert: Identifiable {
case duplicateUserError
case invalidDisplayNameError
case createUserError(error: LocalizedStringKey)
case invalidNameError(validName: String)
var id: String {
switch self {
case .duplicateUserError: return "duplicateUserError"
case .invalidDisplayNameError: return "invalidDisplayNameError"
case .createUserError: return "createUserError"
case let .invalidNameError(validName): return "invalidNameError \(validName)"
}
@@ -187,6 +189,12 @@ private func createProfile(_ displayName: String, showAlert: (UserProfileAlert)
} else {
showAlert(.duplicateUserError)
}
case .chatCmdError(_, .error(.invalidDisplayName)):
if m.currentUser == nil {
AlertManager.shared.showAlert(invalidDisplayNameAlert)
} else {
showAlert(.invalidDisplayNameError)
}
default:
let err: LocalizedStringKey = "Error: \(responseError(error))"
if m.currentUser == nil {
@@ -207,6 +215,7 @@ private func canCreateProfile(_ displayName: String) -> Bool {
func userProfileAlert(_ alert: UserProfileAlert, _ displayName: Binding<String>) -> Alert {
switch alert {
case .duplicateUserError: return duplicateUserAlert
case .invalidDisplayNameError: return invalidDisplayNameAlert
case let .createUserError(err): return creatUserErrorAlert(err)
case let .invalidNameError(name): return createInvalidNameAlert(name, displayName)
}
@@ -219,6 +228,13 @@ private var duplicateUserAlert: Alert {
)
}
private var invalidDisplayNameAlert: Alert {
Alert(
title: Text("Invalid display name!"),
message: Text("This display name is invalid. Please choose another name.")
)
}
private func creatUserErrorAlert(_ err: LocalizedStringKey) -> Alert {
Alert(
title: Text("Error creating profile!"),

View File

@@ -491,14 +491,23 @@ struct SimplexLockView: View {
showLAAlert(.laPasscodeNotChangedAlert)
}
case .enableSelfDestruct:
SetAppPasscodeView(passcodeKeychain: kcSelfDestructPassword, title: "Set passcode", reason: NSLocalizedString("Enable self-destruct passcode", comment: "set passcode view")) {
SetAppPasscodeView(
passcodeKeychain: kcSelfDestructPassword,
prohibitedPasscodeKeychain: kcAppPassword,
title: "Set passcode",
reason: NSLocalizedString("Enable self-destruct passcode", comment: "set passcode view")
) {
updateSelfDestruct()
showLAAlert(.laSelfDestructPasscodeSetAlert)
} cancel: {
revertSelfDestruct()
}
case .changeSelfDestructPasscode:
SetAppPasscodeView(passcodeKeychain: kcSelfDestructPassword, reason: NSLocalizedString("Change self-destruct passcode", comment: "set passcode view")) {
SetAppPasscodeView(
passcodeKeychain: kcSelfDestructPassword,
prohibitedPasscodeKeychain: kcAppPassword,
reason: NSLocalizedString("Change self-destruct passcode", comment: "set passcode view")
) {
showLAAlert(.laSelfDestructPasscodeChangedAlert)
} cancel: {
showLAAlert(.laPasscodeNotChangedAlert)

View File

@@ -89,6 +89,7 @@
</trans-unit>
<trans-unit id="%@ and %@" xml:space="preserve">
<source>%@ and %@</source>
<target>%@ a %@</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="%@ and %@ connected" xml:space="preserve">
@@ -103,6 +104,7 @@
</trans-unit>
<trans-unit id="%@ connected" xml:space="preserve">
<source>%@ connected</source>
<target>%@ připojen</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="%@ is connected!" xml:space="preserve">
@@ -656,9 +658,9 @@
<target>Povolte mizící zprávy, pouze pokud vám to váš kontakt dovolí.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Allow irreversible message deletion only if your contact allows it to you." xml:space="preserve">
<source>Allow irreversible message deletion only if your contact allows it to you.</source>
<target>Povolte nevratné smazání zprávy pouze v případě, že vám to váš kontakt dovolí.</target>
<trans-unit id="Allow irreversible message deletion only if your contact allows it to you. (24 hours)" xml:space="preserve">
<source>Allow irreversible message deletion only if your contact allows it to you. (24 hours)</source>
<target>Povolte nevratné smazání zprávy pouze v případě, že vám to váš kontakt dovolí. (24 hodin)</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Allow message reactions only if your contact allows them." xml:space="preserve">
@@ -681,9 +683,9 @@
<target>Povolit odesílání mizících zpráv.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Allow to irreversibly delete sent messages." xml:space="preserve">
<source>Allow to irreversibly delete sent messages.</source>
<target>Povolit nevratné smazání odeslaných zpráv.</target>
<trans-unit id="Allow to irreversibly delete sent messages. (24 hours)" xml:space="preserve">
<source>Allow to irreversibly delete sent messages. (24 hours)</source>
<target>Povolit nevratné smazání odeslaných zpráv. (24 hodin)</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Allow to send files and media." xml:space="preserve">
@@ -716,9 +718,9 @@
<target>Povolte svým kontaktům vám volat.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Allow your contacts to irreversibly delete sent messages." xml:space="preserve">
<source>Allow your contacts to irreversibly delete sent messages.</source>
<target>Umožněte svým kontaktům nevratně odstranit odeslané zprávy.</target>
<trans-unit id="Allow your contacts to irreversibly delete sent messages. (24 hours)" xml:space="preserve">
<source>Allow your contacts to irreversibly delete sent messages. (24 hours)</source>
<target>Umožněte svým kontaktům nevratně odstranit odeslané zprávy. (24 hodin)</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Allow your contacts to send disappearing messages." xml:space="preserve">
@@ -908,9 +910,9 @@
<target>Vy i váš kontakt můžete přidávat reakce na zprávy.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Both you and your contact can irreversibly delete sent messages." xml:space="preserve">
<source>Both you and your contact can irreversibly delete sent messages.</source>
<target>Vy i váš kontakt můžete nevratně mazat odeslané zprávy.</target>
<trans-unit id="Both you and your contact can irreversibly delete sent messages. (24 hours)" xml:space="preserve">
<source>Both you and your contact can irreversibly delete sent messages. (24 hours)</source>
<target>Vy i váš kontakt můžete nevratně mazat odeslané zprávy. (24 hodin)</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Both you and your contact can make calls." xml:space="preserve">
@@ -1874,6 +1876,10 @@ This cannot be undone!</source>
<target>Udělat později</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Do not send history to new members." xml:space="preserve">
<source>Do not send history to new members.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Don't create address" xml:space="preserve">
<source>Don't create address</source>
<target>Nevytvářet adresu</target>
@@ -2614,9 +2620,9 @@ This cannot be undone!</source>
<target>Členové skupin mohou přidávat reakce na zprávy.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Group members can irreversibly delete sent messages." xml:space="preserve">
<source>Group members can irreversibly delete sent messages.</source>
<target>Členové skupiny mohou nevratně mazat odeslané zprávy.</target>
<trans-unit id="Group members can irreversibly delete sent messages. (24 hours)" xml:space="preserve">
<source>Group members can irreversibly delete sent messages. (24 hours)</source>
<target>Členové skupiny mohou nevratně mazat odeslané zprávy. (24 hodin)</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Group members can send direct messages." xml:space="preserve">
@@ -2724,6 +2730,10 @@ This cannot be undone!</source>
<target>Historie</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="History is not sent to new members." xml:space="preserve">
<source>History is not sent to new members.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="How SimpleX works" xml:space="preserve">
<source>How SimpleX works</source>
<target>Jak SimpleX funguje</target>
@@ -2923,6 +2933,10 @@ This cannot be undone!</source>
<target>Neplatný odkaz na spojení</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Invalid display name!" xml:space="preserve">
<source>Invalid display name!</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Invalid link" xml:space="preserve">
<source>Invalid link</source>
<note>No comment provided by engineer.</note>
@@ -3583,9 +3597,9 @@ This is your link for group %@!</source>
<target>Reakce na zprávy můžete přidávat pouze vy.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Only you can irreversibly delete messages (your contact can mark them for deletion)." xml:space="preserve">
<source>Only you can irreversibly delete messages (your contact can mark them for deletion).</source>
<target>Nevratně mazat zprávy můžete pouze vy (váš kontakt je může označit ke smazání).</target>
<trans-unit id="Only you can irreversibly delete messages (your contact can mark them for deletion). (24 hours)" xml:space="preserve">
<source>Only you can irreversibly delete messages (your contact can mark them for deletion). (24 hours)</source>
<target>Nevratně mazat zprávy můžete pouze vy (váš kontakt je může označit ke smazání). (24 hodin)</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Only you can make calls." xml:space="preserve">
@@ -3608,9 +3622,9 @@ This is your link for group %@!</source>
<target>Reakce na zprávy může přidávat pouze váš kontakt.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Only your contact can irreversibly delete messages (you can mark them for deletion)." xml:space="preserve">
<source>Only your contact can irreversibly delete messages (you can mark them for deletion).</source>
<target>Nevratně mazat zprávy může pouze váš kontakt (vy je můžete označit ke smazání).</target>
<trans-unit id="Only your contact can irreversibly delete messages (you can mark them for deletion). (24 hours)" xml:space="preserve">
<source>Only your contact can irreversibly delete messages (you can mark them for deletion). (24 hours)</source>
<target>Nevratně mazat zprávy může pouze váš kontakt (vy je můžete označit ke smazání). (24 hodin)</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Only your contact can make calls." xml:space="preserve">
@@ -4449,6 +4463,10 @@ Error: %@</source>
<target>Odeslat je z galerie nebo vlastní klávesnice.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Send up to 100 last messages to new members." xml:space="preserve">
<source>Send up to 100 last messages to new members.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Sender cancelled file transfer." xml:space="preserve">
<source>Sender cancelled file transfer.</source>
<target>Odesílatel zrušil přenos souboru.</target>
@@ -5062,6 +5080,10 @@ Může se to stát kvůli nějaké chybě, nebo pokud je spojení kompromitován
<source>This device name</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="This display name is invalid. Please choose another name." xml:space="preserve">
<source>This display name is invalid. Please choose another name.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="This group has over %lld members, delivery receipts are not sent." xml:space="preserve">
<source>This group has over %lld members, delivery receipts are not sent.</source>
<target>Tato skupina má více než %lld členů, potvrzení o doručení nejsou odesílány.</target>
@@ -5278,6 +5300,10 @@ Chcete-li se připojit, požádejte svůj kontakt o vytvoření dalšího odkazu
<target>Nepřečtený</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Up to 100 last messages are sent to new members." xml:space="preserve">
<source>Up to 100 last messages are sent to new members.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Update" xml:space="preserve">
<source>Update</source>
<target>Aktualizovat</target>
@@ -5442,6 +5468,10 @@ Chcete-li se připojit, požádejte svůj kontakt o vytvoření dalšího odkazu
<target>Zobrazení bezpečnostního kódu</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Visible history" xml:space="preserve">
<source>Visible history</source>
<note>chat feature</note>
</trans-unit>
<trans-unit id="Voice messages" xml:space="preserve">
<source>Voice messages</source>
<target>Hlasové zprávy</target>

View File

@@ -49,7 +49,7 @@
</trans-unit>
<trans-unit id="## History" xml:space="preserve">
<source>## History</source>
<target>## Vergangenheit</target>
<target>## Verlauf</target>
<note>copied message info</note>
</trans-unit>
<trans-unit id="## In reply to" xml:space="preserve">
@@ -314,15 +314,17 @@
</trans-unit>
<trans-unit id="**Add contact**: to create a new invitation link, or connect via a link you received." xml:space="preserve">
<source>**Add contact**: to create a new invitation link, or connect via a link you received.</source>
<target>**Kontakt hinzufügen**: Um einen neuen Einladungslink zu erstellen oder eine Verbindung über einen Link herzustellen, den Sie erhalten haben.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="**Add new contact**: to create your one-time QR Code for your contact." xml:space="preserve">
<source>**Add new contact**: to create your one-time QR Code or link for your contact.</source>
<target>**Fügen Sie einen neuen Kontakt hinzu**: Erzeugen Sie einen Einmal-QR-Code oder -Link für Ihren Kontakt.</target>
<target>**Neuen Kontakt hinzufügen**: Um einen Einmal-QR-Code oder -Link für Ihren Kontakt zu erzeugen.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="**Create group**: to create a new group." xml:space="preserve">
<source>**Create group**: to create a new group.</source>
<target>**Gruppe erstellen**: Um eine neue Gruppe zu erstellen.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="**More private**: check new messages every 20 minutes. Device token is shared with SimpleX Chat server, but not how many contacts or messages you have." xml:space="preserve">
@@ -403,7 +405,7 @@
- editing history.</source>
<target>- Bis zu 5 Minuten lange Sprachnachrichten.
- Zeitdauer für verschwindende Nachrichten anpassen.
- Nachrichten-Historie bearbeiten.</target>
- Nachrichten-Verlauf bearbeiten.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="." xml:space="preserve">
@@ -507,12 +509,12 @@
</trans-unit>
<trans-unit id="Abort changing address" xml:space="preserve">
<source>Abort changing address</source>
<target>Wechsel der Adresse abbrechen</target>
<target>Wechsel der Empfängeradresse abbrechen</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Abort changing address?" xml:space="preserve">
<source>Abort changing address?</source>
<target>Wechsel der Adresse abbrechen?</target>
<target>Wechsel der Empfängeradresse abbrechen?</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="About SimpleX" xml:space="preserve">
@@ -558,11 +560,12 @@
</trans-unit>
<trans-unit id="Add address to your profile, so that your contacts can share it with other people. Profile update will be sent to your contacts." xml:space="preserve">
<source>Add address to your profile, so that your contacts can share it with other people. Profile update will be sent to your contacts.</source>
<target>Fügen Sie die Adresse zu Ihrem Profil hinzu, damit Ihre Kontakte sie mit anderen Personen teilen können. Es wird eine Profilaktualisierung an Ihre Kontakte gesendet.</target>
<target>Fügen Sie die Adresse Ihrem Profil hinzu, damit Ihre Kontakte sie mit anderen Personen teilen können. Es wird eine Profilaktualisierung an Ihre Kontakte gesendet.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Add contact" xml:space="preserve">
<source>Add contact</source>
<target>Kontakt hinzufügen</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Add preset servers" xml:space="preserve">
@@ -602,7 +605,7 @@
</trans-unit>
<trans-unit id="Address change will be aborted. Old receiving address will be used." xml:space="preserve">
<source>Address change will be aborted. Old receiving address will be used.</source>
<target>Der Wechsel der Adresse wird abgebrochen. Die bisherige Adresse wird weiter verwendet.</target>
<target>Der Wechsel der Empfängeradresse wird abgebrochen. Die bisherige Adresse wird weiter verwendet.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Admins can create the links to join groups." xml:space="preserve">
@@ -667,12 +670,12 @@
</trans-unit>
<trans-unit id="Allow disappearing messages only if your contact allows it to you." xml:space="preserve">
<source>Allow disappearing messages only if your contact allows it to you.</source>
<target>Erlauben Sie verschwindende Nachrichten nur dann, wenn es Ihnen Ihr Kontakt ebenfalls erlaubt.</target>
<target>Erlauben Sie verschwindende Nachrichten nur dann, wenn es Ihr Kontakt ebenfalls erlaubt.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Allow irreversible message deletion only if your contact allows it to you." xml:space="preserve">
<source>Allow irreversible message deletion only if your contact allows it to you.</source>
<target>Erlauben Sie das unwiederbringliche Löschen von Nachrichten nur dann, wenn es Ihnen Ihr Kontakt ebenfalls erlaubt.</target>
<trans-unit id="Allow irreversible message deletion only if your contact allows it to you. (24 hours)" xml:space="preserve">
<source>Allow irreversible message deletion only if your contact allows it to you. (24 hours)</source>
<target>Erlauben Sie das unwiederbringliche Löschen von Nachrichten nur dann, wenn es Ihnen Ihr Kontakt ebenfalls erlaubt. (24 Stunden)</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Allow message reactions only if your contact allows them." xml:space="preserve">
@@ -695,9 +698,9 @@
<target>Das Senden von verschwindenden Nachrichten erlauben.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Allow to irreversibly delete sent messages." xml:space="preserve">
<source>Allow to irreversibly delete sent messages.</source>
<target>Unwiederbringliches löschen von gesendeten Nachrichten erlauben.</target>
<trans-unit id="Allow to irreversibly delete sent messages. (24 hours)" xml:space="preserve">
<source>Allow to irreversibly delete sent messages. (24 hours)</source>
<target>Unwiederbringliches löschen von gesendeten Nachrichten erlauben. (24 Stunden)</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Allow to send files and media." xml:space="preserve">
@@ -730,9 +733,9 @@
<target>Erlaubt Ihren Kontakten Sie anzurufen.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Allow your contacts to irreversibly delete sent messages." xml:space="preserve">
<source>Allow your contacts to irreversibly delete sent messages.</source>
<target>Erlauben Sie Ihren Kontakten gesendete Nachrichten unwiederbringlich zu löschen.</target>
<trans-unit id="Allow your contacts to irreversibly delete sent messages. (24 hours)" xml:space="preserve">
<source>Allow your contacts to irreversibly delete sent messages. (24 hours)</source>
<target>Erlauben Sie Ihren Kontakten gesendete Nachrichten unwiederbringlich zu löschen. (24 Stunden)</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Allow your contacts to send disappearing messages." xml:space="preserve">
@@ -930,9 +933,9 @@
<target>Sowohl Sie, als auch Ihr Kontakt können Reaktionen auf Nachrichten geben.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Both you and your contact can irreversibly delete sent messages." xml:space="preserve">
<source>Both you and your contact can irreversibly delete sent messages.</source>
<target>Sowohl Ihr Kontakt, als auch Sie können gesendete Nachrichten unwiederbringlich löschen.</target>
<trans-unit id="Both you and your contact can irreversibly delete sent messages. (24 hours)" xml:space="preserve">
<source>Both you and your contact can irreversibly delete sent messages. (24 hours)</source>
<target>Sowohl Ihr Kontakt, als auch Sie können gesendete Nachrichten unwiederbringlich löschen. (24 Stunden)</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Both you and your contact can make calls." xml:space="preserve">
@@ -972,6 +975,7 @@
</trans-unit>
<trans-unit id="Camera not available" xml:space="preserve">
<source>Camera not available</source>
<target>Kamera nicht verfügbar</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Can't delete user profile!" xml:space="preserve">
@@ -1092,6 +1096,7 @@
</trans-unit>
<trans-unit id="Chat is stopped. If you already used this database on another device, you should transfer it back before starting chat." xml:space="preserve">
<source>Chat is stopped. If you already used this database on another device, you should transfer it back before starting chat.</source>
<target>Der Chat ist angehalten. Wenn Sie diese Datenbank bereits auf einem anderen Gerät genutzt haben, sollten Sie diese vor dem Starten des Chats wieder zurückspielen.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Chat preferences" xml:space="preserve">
@@ -1217,7 +1222,7 @@
<trans-unit id="Connect to yourself?&#10;This is your own SimpleX address!" xml:space="preserve">
<source>Connect to yourself?
This is your own SimpleX address!</source>
<target>Mit Ihnen selbst verbinden?
<target>Sich mit Ihnen selbst verbinden?
Das ist Ihre eigene SimpleX-Adresse!</target>
<note>No comment provided by engineer.</note>
</trans-unit>
@@ -1440,6 +1445,7 @@ Das ist Ihr eigener Einmal-Link!</target>
</trans-unit>
<trans-unit id="Creating link…" xml:space="preserve">
<source>Creating link…</source>
<target>Link wird erstellt…</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Current Passcode" xml:space="preserve">
@@ -1869,7 +1875,7 @@ Das kann nicht rückgängig gemacht werden!</target>
</trans-unit>
<trans-unit id="Disappearing messages" xml:space="preserve">
<source>Disappearing messages</source>
<target>verschwindende Nachrichten</target>
<target>Verschwindende Nachrichten</target>
<note>chat feature</note>
</trans-unit>
<trans-unit id="Disappearing messages are prohibited in this chat." xml:space="preserve">
@@ -1922,6 +1928,10 @@ Das kann nicht rückgängig gemacht werden!</target>
<target>Später wiederholen</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Do not send history to new members." xml:space="preserve">
<source>Do not send history to new members.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Don't create address" xml:space="preserve">
<source>Don't create address</source>
<target>Keine Adresse erstellt</target>
@@ -1994,6 +2004,7 @@ Das kann nicht rückgängig gemacht werden!</target>
</trans-unit>
<trans-unit id="Enable camera access" xml:space="preserve">
<source>Enable camera access</source>
<target>Kamera-Zugriff aktivieren</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Enable for all" xml:space="preserve">
@@ -2063,6 +2074,7 @@ Das kann nicht rückgängig gemacht werden!</target>
</trans-unit>
<trans-unit id="Encrypted message: app is stopped" xml:space="preserve">
<source>Encrypted message: app is stopped</source>
<target>Verschlüsselte Nachricht: Die App ist angehalten</target>
<note>notification</note>
</trans-unit>
<trans-unit id="Encrypted message: database error" xml:space="preserve">
@@ -2177,7 +2189,7 @@ Das kann nicht rückgängig gemacht werden!</target>
</trans-unit>
<trans-unit id="Error changing address" xml:space="preserve">
<source>Error changing address</source>
<target>Fehler beim Wechseln der Adresse</target>
<target>Fehler beim Wechseln der Empfängeradresse</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error changing role" xml:space="preserve">
@@ -2297,6 +2309,7 @@ Das kann nicht rückgängig gemacht werden!</target>
</trans-unit>
<trans-unit id="Error opening chat" xml:space="preserve">
<source>Error opening chat</source>
<target>Fehler beim Öffnen des Chats</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error receiving file" xml:space="preserve">
@@ -2341,6 +2354,7 @@ Das kann nicht rückgängig gemacht werden!</target>
</trans-unit>
<trans-unit id="Error scanning code: %@" xml:space="preserve">
<source>Error scanning code: %@</source>
<target>Fehler beim Scannen des Codes: %@</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error sending email" xml:space="preserve">
@@ -2673,9 +2687,9 @@ Das kann nicht rückgängig gemacht werden!</target>
<target>Gruppenmitglieder können eine Reaktion auf Nachrichten geben.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Group members can irreversibly delete sent messages." xml:space="preserve">
<source>Group members can irreversibly delete sent messages.</source>
<target>Gruppenmitglieder können gesendete Nachrichten unwiederbringlich löschen.</target>
<trans-unit id="Group members can irreversibly delete sent messages. (24 hours)" xml:space="preserve">
<source>Group members can irreversibly delete sent messages. (24 hours)</source>
<target>Gruppenmitglieder können gesendete Nachrichten unwiederbringlich löschen. (24 Stunden)</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Group members can send direct messages." xml:space="preserve">
@@ -2780,7 +2794,11 @@ Das kann nicht rückgängig gemacht werden!</target>
</trans-unit>
<trans-unit id="History" xml:space="preserve">
<source>History</source>
<target>Vergangenheit</target>
<target>Verlauf</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="History is not sent to new members." xml:space="preserve">
<source>History is not sent to new members.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="How SimpleX works" xml:space="preserve">
@@ -2977,6 +2995,7 @@ Das kann nicht rückgängig gemacht werden!</target>
</trans-unit>
<trans-unit id="Invalid QR code" xml:space="preserve">
<source>Invalid QR code</source>
<target>Ungültiger QR-Code</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Invalid connection link" xml:space="preserve">
@@ -2984,8 +3003,13 @@ Das kann nicht rückgängig gemacht werden!</target>
<target>Ungültiger Verbindungslink</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Invalid display name!" xml:space="preserve">
<source>Invalid display name!</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Invalid link" xml:space="preserve">
<source>Invalid link</source>
<target>Ungültiger Link</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Invalid name!" xml:space="preserve">
@@ -2995,6 +3019,7 @@ Das kann nicht rückgängig gemacht werden!</target>
</trans-unit>
<trans-unit id="Invalid response" xml:space="preserve">
<source>Invalid response</source>
<target>Ungültige Reaktion</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Invalid server address!" xml:space="preserve">
@@ -3117,6 +3142,7 @@ Das ist Ihr Link für die Gruppe %@!</target>
</trans-unit>
<trans-unit id="Keep" xml:space="preserve">
<source>Keep</source>
<target>Behalten</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Keep the app open to use it from desktop" xml:space="preserve">
@@ -3126,6 +3152,7 @@ Das ist Ihr Link für die Gruppe %@!</target>
</trans-unit>
<trans-unit id="Keep unused invitation?" xml:space="preserve">
<source>Keep unused invitation?</source>
<target>Nicht genutzte Einladung behalten?</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Keep your connections" xml:space="preserve">
@@ -3260,7 +3287,7 @@ Das ist Ihr Link für die Gruppe %@!</target>
</trans-unit>
<trans-unit id="Make sure WebRTC ICE server addresses are in correct format, line separated and are not duplicated." xml:space="preserve">
<source>Make sure WebRTC ICE server addresses are in correct format, line separated and are not duplicated.</source>
<target>Stellen Sie sicher, dass die WebRTC ICE-Server Adressen das richtige Format haben, zeilenweise angeordnet und nicht doppelt vorhanden sind.</target>
<target>Stellen Sie sicher, dass die WebRTC ICE-Server Adressen das richtige Format haben, zeilenweise getrennt und nicht doppelt vorhanden sind.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Many people asked: *if SimpleX has no user identifiers, how can it deliver messages?*" xml:space="preserve">
@@ -3460,6 +3487,7 @@ Das ist Ihr Link für die Gruppe %@!</target>
</trans-unit>
<trans-unit id="New chat" xml:space="preserve">
<source>New chat</source>
<target>Neuer Chat</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="New contact request" xml:space="preserve">
@@ -3549,7 +3577,7 @@ Das ist Ihr Link für die Gruppe %@!</target>
</trans-unit>
<trans-unit id="No history" xml:space="preserve">
<source>No history</source>
<target>Keine Vergangenheit</target>
<target>Kein Verlauf</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="No permission to record voice message" xml:space="preserve">
@@ -3588,6 +3616,7 @@ Das ist Ihr Link für die Gruppe %@!</target>
</trans-unit>
<trans-unit id="OK" xml:space="preserve">
<source>OK</source>
<target>OK</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Off" xml:space="preserve">
@@ -3655,9 +3684,9 @@ Das ist Ihr Link für die Gruppe %@!</target>
<target>Nur Sie können Reaktionen auf Nachrichten geben.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Only you can irreversibly delete messages (your contact can mark them for deletion)." xml:space="preserve">
<source>Only you can irreversibly delete messages (your contact can mark them for deletion).</source>
<target>Nur Sie können Nachrichten unwiederbringlich löschen (Ihr Kontakt kann sie zum Löschen markieren).</target>
<trans-unit id="Only you can irreversibly delete messages (your contact can mark them for deletion). (24 hours)" xml:space="preserve">
<source>Only you can irreversibly delete messages (your contact can mark them for deletion). (24 hours)</source>
<target>Nur Sie können Nachrichten unwiederbringlich löschen (Ihr Kontakt kann sie zum Löschen markieren). (24 Stunden)</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Only you can make calls." xml:space="preserve">
@@ -3680,9 +3709,9 @@ Das ist Ihr Link für die Gruppe %@!</target>
<target>Nur Ihr Kontakt kann Reaktionen auf Nachrichten geben.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Only your contact can irreversibly delete messages (you can mark them for deletion)." xml:space="preserve">
<source>Only your contact can irreversibly delete messages (you can mark them for deletion).</source>
<target>Nur Ihr Kontakt kann Nachrichten unwiederbringlich löschen (Sie können sie zum Löschen markieren).</target>
<trans-unit id="Only your contact can irreversibly delete messages (you can mark them for deletion). (24 hours)" xml:space="preserve">
<source>Only your contact can irreversibly delete messages (you can mark them for deletion). (24 hours)</source>
<target>Nur Ihr Kontakt kann Nachrichten unwiederbringlich löschen (Sie können sie zum Löschen markieren). (24 Stunden)</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Only your contact can make calls." xml:space="preserve">
@@ -3737,14 +3766,17 @@ Das ist Ihr Link für die Gruppe %@!</target>
</trans-unit>
<trans-unit id="Opening app…" xml:space="preserve">
<source>Opening app…</source>
<target>App wird geöffnet…</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Or scan QR code" xml:space="preserve">
<source>Or scan QR code</source>
<target>Oder den QR-Code scannen</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Or show this code" xml:space="preserve">
<source>Or show this code</source>
<target>Oder diesen QR-Code anzeigen</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="PING count" xml:space="preserve">
@@ -3799,6 +3831,7 @@ Das ist Ihr Link für die Gruppe %@!</target>
</trans-unit>
<trans-unit id="Paste the link you received" xml:space="preserve">
<source>Paste the link you received</source>
<target>Fügen Sie den erhaltenen Link ein</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="People can connect to you only via the links you share." xml:space="preserve">
@@ -3839,6 +3872,8 @@ Das ist Ihr Link für die Gruppe %@!</target>
<trans-unit id="Please contact developers.&#10;Error: %@" xml:space="preserve">
<source>Please contact developers.
Error: %@</source>
<target>Bitte nehmen Sie Kontakt mit den Entwicklern auf.
Fehler: %@</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Please contact group admin." xml:space="preserve">
@@ -4048,6 +4083,7 @@ Error: %@</source>
</trans-unit>
<trans-unit id="Read more in [User Guide](https://simplex.chat/docs/guide/chat-profiles.html#incognito-mode)." xml:space="preserve">
<source>Read more in [User Guide](https://simplex.chat/docs/guide/chat-profiles.html#incognito-mode).</source>
<target>Lesen Sie mehr dazu im [Benutzerhandbuch](https://simplex.chat/docs/guide/chat-profiles.html#incognito-mode).</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Read more in [User Guide](https://simplex.chat/docs/guide/readme.html#connect-to-friends)." xml:space="preserve">
@@ -4262,6 +4298,7 @@ Error: %@</source>
</trans-unit>
<trans-unit id="Retry" xml:space="preserve">
<source>Retry</source>
<target>Wiederholen</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Reveal" xml:space="preserve">
@@ -4421,6 +4458,7 @@ Error: %@</source>
</trans-unit>
<trans-unit id="Search or paste SimpleX link" xml:space="preserve">
<source>Search or paste SimpleX link</source>
<target>Suchen oder fügen Sie den SimpleX-Link ein</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Secure queue" xml:space="preserve">
@@ -4528,6 +4566,10 @@ Error: %@</source>
<target>Senden Sie diese aus dem Fotoalbum oder von individuellen Tastaturen.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Send up to 100 last messages to new members." xml:space="preserve">
<source>Send up to 100 last messages to new members.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Sender cancelled file transfer." xml:space="preserve">
<source>Sender cancelled file transfer.</source>
<target>Der Absender hat die Dateiübertragung abgebrochen.</target>
@@ -4700,6 +4742,7 @@ Error: %@</source>
</trans-unit>
<trans-unit id="Share this 1-time invite link" xml:space="preserve">
<source>Share this 1-time invite link</source>
<target>Teilen Sie diesen Einmal-Einladungslink</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Share with contacts" xml:space="preserve">
@@ -4829,6 +4872,7 @@ Error: %@</source>
</trans-unit>
<trans-unit id="Start chat?" xml:space="preserve">
<source>Start chat?</source>
<target>Chat starten?</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Start migration" xml:space="preserve">
@@ -4938,12 +4982,12 @@ Error: %@</source>
</trans-unit>
<trans-unit id="Tap to Connect" xml:space="preserve">
<source>Tap to Connect</source>
<target>Zum Verbinden antippen</target>
<target>Zum Verbinden tippen</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Tap to activate profile." xml:space="preserve">
<source>Tap to activate profile.</source>
<target>Tippen Sie auf das Profil um es zu aktivieren.</target>
<target>Zum Aktivieren des Profils tippen.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Tap to join" xml:space="preserve">
@@ -4953,20 +4997,22 @@ Error: %@</source>
</trans-unit>
<trans-unit id="Tap to join incognito" xml:space="preserve">
<source>Tap to join incognito</source>
<target>Tippen, um Inkognito beizutreten</target>
<target>Zum Inkognito beitreten tippen</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Tap to paste link" xml:space="preserve">
<source>Tap to paste link</source>
<target>Zum Link einfügen tippen</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Tap to scan" xml:space="preserve">
<source>Tap to scan</source>
<target>Zum Scannen tippen</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Tap to start a new chat" xml:space="preserve">
<source>Tap to start a new chat</source>
<target>Tippen, um einen neuen Chat zu starten</target>
<target>Zum Starten eines neuen Chats tippen</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Test failed at step %@." xml:space="preserve">
@@ -5028,6 +5074,7 @@ Dies kann passieren, wenn es einen Fehler gegeben hat oder die Verbindung kompro
</trans-unit>
<trans-unit id="The code you scanned is not a SimpleX link QR code." xml:space="preserve">
<source>The code you scanned is not a SimpleX link QR code.</source>
<target>Der von Ihnen gescannte Code ist kein SimpleX-Link-QR-Code.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="The connection you accepted will be cancelled!" xml:space="preserve">
@@ -5092,11 +5139,12 @@ Dies kann passieren, wenn es einen Fehler gegeben hat oder die Verbindung kompro
</trans-unit>
<trans-unit id="The servers for new connections of your current chat profile **%@**." xml:space="preserve">
<source>The servers for new connections of your current chat profile **%@**.</source>
<target>Server der neuen Verbindungen von Ihrem aktuellen Chat-Profil **%@**.</target>
<target>Mögliche Server r neue Verbindungen von Ihrem aktuellen Chat-Profil **%@**.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="The text you pasted is not a SimpleX link." xml:space="preserve">
<source>The text you pasted is not a SimpleX link.</source>
<target>Der von Ihnen eingefügte Text ist kein SimpleX-Link.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Theme" xml:space="preserve">
@@ -5144,6 +5192,10 @@ Dies kann passieren, wenn es einen Fehler gegeben hat oder die Verbindung kompro
<target>Dieser Gerätename</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="This display name is invalid. Please choose another name." xml:space="preserve">
<source>This display name is invalid. Please choose another name.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="This group has over %lld members, delivery receipts are not sent." xml:space="preserve">
<source>This group has over %lld members, delivery receipts are not sent.</source>
<target>Es werden keine Empfangsbestätigungen gesendet, da diese Gruppe über %lld Mitglieder hat.</target>
@@ -5368,6 +5420,10 @@ Bitten Sie Ihren Kontakt darum einen weiteren Verbindungs-Link zu erzeugen, um s
<target>Ungelesen</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Up to 100 last messages are sent to new members." xml:space="preserve">
<source>Up to 100 last messages are sent to new members.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Update" xml:space="preserve">
<source>Update</source>
<target>Aktualisieren</target>
@@ -5455,6 +5511,7 @@ Bitten Sie Ihren Kontakt darum einen weiteren Verbindungs-Link zu erzeugen, um s
</trans-unit>
<trans-unit id="Use only local notifications?" xml:space="preserve">
<source>Use only local notifications?</source>
<target>Nur lokale Benachrichtigungen nutzen?</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Use server" xml:space="preserve">
@@ -5537,6 +5594,10 @@ Bitten Sie Ihren Kontakt darum einen weiteren Verbindungs-Link zu erzeugen, um s
<target>Schauen Sie sich den Sicherheitscode an</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Visible history" xml:space="preserve">
<source>Visible history</source>
<note>chat feature</note>
</trans-unit>
<trans-unit id="Voice messages" xml:space="preserve">
<source>Voice messages</source>
<target>Sprachnachrichten</target>
@@ -5644,7 +5705,7 @@ Bitten Sie Ihren Kontakt darum einen weiteren Verbindungs-Link zu erzeugen, um s
</trans-unit>
<trans-unit id="You" xml:space="preserve">
<source>You</source>
<target>Ihre Daten</target>
<target>Profil</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="You accepted connection" xml:space="preserve">
@@ -5741,6 +5802,7 @@ Verbindungsanfrage wiederholen?</target>
</trans-unit>
<trans-unit id="You can make it visible to your SimpleX contacts via Settings." xml:space="preserve">
<source>You can make it visible to your SimpleX contacts via Settings.</source>
<target>Sie können sie über Einstellungen für Ihre SimpleX-Kontakte sichtbar machen.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="You can now send messages to %@" xml:space="preserve">
@@ -5785,6 +5847,7 @@ Verbindungsanfrage wiederholen?</target>
</trans-unit>
<trans-unit id="You can view invitation link again in connection details." xml:space="preserve">
<source>You can view invitation link again in connection details.</source>
<target>Den Einladungslink können Sie in den Details der Verbindung nochmals sehen.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="You can't send messages!" xml:space="preserve">
@@ -5901,7 +5964,7 @@ Verbindungsanfrage wiederholen?</target>
</trans-unit>
<trans-unit id="You won't lose your contacts if you later delete your address." xml:space="preserve">
<source>You won't lose your contacts if you later delete your address.</source>
<target>Sie werden Ihre mit dieser Adresse verbundenen Kontakte nicht verlieren, wenn Sie diese Adresse später löschen.</target>
<target>Sie werden Ihre damit verbundenen Kontakte nicht verlieren, wenn Sie diese Adresse später löschen.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="You're trying to invite contact with whom you've shared an incognito profile to the group in which you're using your main profile" xml:space="preserve">
@@ -6040,7 +6103,7 @@ SimpleX-Server können Ihr Profil nicht einsehen.</target>
</trans-unit>
<trans-unit id="Your settings" xml:space="preserve">
<source>Your settings</source>
<target>Ihre Einstellungen</target>
<target>Einstellungen</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="[Contribute](https://github.com/simplex-chat/simplex-chat#contribute)" xml:space="preserve">
@@ -6155,7 +6218,7 @@ SimpleX-Server können Ihr Profil nicht einsehen.</target>
</trans-unit>
<trans-unit id="changed address for you" xml:space="preserve">
<source>changed address for you</source>
<target>wechselte die Adresse für Sie</target>
<target>Wechselte die Empfängeradresse von Ihnen</target>
<note>chat item text</note>
</trans-unit>
<trans-unit id="changed role of %@ to %@" xml:space="preserve">
@@ -6170,12 +6233,12 @@ SimpleX-Server können Ihr Profil nicht einsehen.</target>
</trans-unit>
<trans-unit id="changing address for %@…" xml:space="preserve">
<source>changing address for %@…</source>
<target>Adresse von %@ wechseln…</target>
<target>Empfängeradresse für %@ wechseln wird gestartet…</target>
<note>chat item text</note>
</trans-unit>
<trans-unit id="changing address…" xml:space="preserve">
<source>changing address…</source>
<target>Wechsel der Adresse…</target>
<target>Wechsel der Empfängeradresse wurde gestartet…</target>
<note>chat item text</note>
</trans-unit>
<trans-unit id="colored" xml:space="preserve">
@@ -6767,12 +6830,12 @@ SimpleX-Server können Ihr Profil nicht einsehen.</target>
</trans-unit>
<trans-unit id="you changed address" xml:space="preserve">
<source>you changed address</source>
<target>Sie haben die Adresse gewechselt</target>
<target>Die Empfängeradresse wurde gewechselt</target>
<note>chat item text</note>
</trans-unit>
<trans-unit id="you changed address for %@" xml:space="preserve">
<source>you changed address for %@</source>
<target>Sie haben die Adresse für %@ gewechselt</target>
<target>Die Empfängeradresse für %@ wurde gewechselt</target>
<note>chat item text</note>
</trans-unit>
<trans-unit id="you changed role for yourself to %@" xml:space="preserve">

View File

@@ -66,20 +66,24 @@ Available in v5.1</source>
<target state="translated">%@ είναι συνδεδεμένο!</target>
<note>notification title</note>
</trans-unit>
<trans-unit id="%@ is not verified" xml:space="preserve">
<trans-unit id="%@ is not verified" xml:space="preserve" approved="no">
<source>%@ is not verified</source>
<target state="translated">%@ δεν είναι επαληθευμένο</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="%@ is verified" xml:space="preserve">
<trans-unit id="%@ is verified" xml:space="preserve" approved="no">
<source>%@ is verified</source>
<target state="translated">%@ είναι επαληθευμένο</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="%@ servers" xml:space="preserve">
<trans-unit id="%@ servers" xml:space="preserve" approved="no">
<source>%@ servers</source>
<target state="translated">%@ διακομιστές</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="%@ wants to connect!" xml:space="preserve">
<trans-unit id="%@ wants to connect!" xml:space="preserve" approved="no">
<source>%@ wants to connect!</source>
<target state="translated">%@ θέλει να συνδεθεί!</target>
<note>notification title</note>
</trans-unit>
<trans-unit id="%d days" xml:space="preserve">
@@ -4214,6 +4218,21 @@ SimpleX servers cannot see your profile.</source>
<target state="translated">%@ και %@ συνδεδεμένο</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="%@:" xml:space="preserve" approved="no">
<source>%@:</source>
<target state="translated">%@:</target>
<note>copied message info</note>
</trans-unit>
<trans-unit id="%@, %@ and %lld members" xml:space="preserve" approved="no">
<source>%@, %@ and %lld members</source>
<target state="translated">%@, %@ και %lld μέλη</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="%@, %@ and %lld other members connected" xml:space="preserve" approved="no">
<source>%@, %@ and %lld other members connected</source>
<target state="translated">%@, %@ και %lld άλλα μέλη συνδέθηκαν</target>
<note>No comment provided by engineer.</note>
</trans-unit>
</body>
</file>
<file original="en.lproj/SimpleX--iOS--InfoPlist.strings" source-language="en" target-language="el" datatype="plaintext">

View File

@@ -673,9 +673,9 @@
<target>Allow disappearing messages only if your contact allows it to you.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Allow irreversible message deletion only if your contact allows it to you." xml:space="preserve">
<source>Allow irreversible message deletion only if your contact allows it to you.</source>
<target>Allow irreversible message deletion only if your contact allows it to you.</target>
<trans-unit id="Allow irreversible message deletion only if your contact allows it to you. (24 hours)" xml:space="preserve">
<source>Allow irreversible message deletion only if your contact allows it to you. (24 hours)</source>
<target>Allow irreversible message deletion only if your contact allows it to you. (24 hours)</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Allow message reactions only if your contact allows them." xml:space="preserve">
@@ -698,9 +698,9 @@
<target>Allow sending disappearing messages.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Allow to irreversibly delete sent messages." xml:space="preserve">
<source>Allow to irreversibly delete sent messages.</source>
<target>Allow to irreversibly delete sent messages.</target>
<trans-unit id="Allow to irreversibly delete sent messages. (24 hours)" xml:space="preserve">
<source>Allow to irreversibly delete sent messages. (24 hours)</source>
<target>Allow to irreversibly delete sent messages. (24 hours)</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Allow to send files and media." xml:space="preserve">
@@ -733,9 +733,9 @@
<target>Allow your contacts to call you.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Allow your contacts to irreversibly delete sent messages." xml:space="preserve">
<source>Allow your contacts to irreversibly delete sent messages.</source>
<target>Allow your contacts to irreversibly delete sent messages.</target>
<trans-unit id="Allow your contacts to irreversibly delete sent messages. (24 hours)" xml:space="preserve">
<source>Allow your contacts to irreversibly delete sent messages. (24 hours)</source>
<target>Allow your contacts to irreversibly delete sent messages. (24 hours)</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Allow your contacts to send disappearing messages." xml:space="preserve">
@@ -933,9 +933,9 @@
<target>Both you and your contact can add message reactions.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Both you and your contact can irreversibly delete sent messages." xml:space="preserve">
<source>Both you and your contact can irreversibly delete sent messages.</source>
<target>Both you and your contact can irreversibly delete sent messages.</target>
<trans-unit id="Both you and your contact can irreversibly delete sent messages. (24 hours)" xml:space="preserve">
<source>Both you and your contact can irreversibly delete sent messages. (24 hours)</source>
<target>Both you and your contact can irreversibly delete sent messages. (24 hours)</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Both you and your contact can make calls." xml:space="preserve">
@@ -1928,6 +1928,11 @@ This cannot be undone!</target>
<target>Do it later</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Do not send history to new members." xml:space="preserve">
<source>Do not send history to new members.</source>
<target>Do not send history to new members.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Don't create address" xml:space="preserve">
<source>Don't create address</source>
<target>Don't create address</target>
@@ -2683,9 +2688,9 @@ This cannot be undone!</target>
<target>Group members can add message reactions.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Group members can irreversibly delete sent messages." xml:space="preserve">
<source>Group members can irreversibly delete sent messages.</source>
<target>Group members can irreversibly delete sent messages.</target>
<trans-unit id="Group members can irreversibly delete sent messages. (24 hours)" xml:space="preserve">
<source>Group members can irreversibly delete sent messages. (24 hours)</source>
<target>Group members can irreversibly delete sent messages. (24 hours)</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Group members can send direct messages." xml:space="preserve">
@@ -2793,6 +2798,11 @@ This cannot be undone!</target>
<target>History</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="History is not sent to new members." xml:space="preserve">
<source>History is not sent to new members.</source>
<target>History is not sent to new members.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="How SimpleX works" xml:space="preserve">
<source>How SimpleX works</source>
<target>How SimpleX works</target>
@@ -2995,6 +3005,11 @@ This cannot be undone!</target>
<target>Invalid connection link</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Invalid display name!" xml:space="preserve">
<source>Invalid display name!</source>
<target>Invalid display name!</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Invalid link" xml:space="preserve">
<source>Invalid link</source>
<target>Invalid link</target>
@@ -3672,9 +3687,9 @@ This is your link for group %@!</target>
<target>Only you can add message reactions.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Only you can irreversibly delete messages (your contact can mark them for deletion)." xml:space="preserve">
<source>Only you can irreversibly delete messages (your contact can mark them for deletion).</source>
<target>Only you can irreversibly delete messages (your contact can mark them for deletion).</target>
<trans-unit id="Only you can irreversibly delete messages (your contact can mark them for deletion). (24 hours)" xml:space="preserve">
<source>Only you can irreversibly delete messages (your contact can mark them for deletion). (24 hours)</source>
<target>Only you can irreversibly delete messages (your contact can mark them for deletion). (24 hours)</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Only you can make calls." xml:space="preserve">
@@ -3697,9 +3712,9 @@ This is your link for group %@!</target>
<target>Only your contact can add message reactions.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Only your contact can irreversibly delete messages (you can mark them for deletion)." xml:space="preserve">
<source>Only your contact can irreversibly delete messages (you can mark them for deletion).</source>
<target>Only your contact can irreversibly delete messages (you can mark them for deletion).</target>
<trans-unit id="Only your contact can irreversibly delete messages (you can mark them for deletion). (24 hours)" xml:space="preserve">
<source>Only your contact can irreversibly delete messages (you can mark them for deletion). (24 hours)</source>
<target>Only your contact can irreversibly delete messages (you can mark them for deletion). (24 hours)</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Only your contact can make calls." xml:space="preserve">
@@ -4554,6 +4569,11 @@ Error: %@</target>
<target>Send them from gallery or custom keyboards.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Send up to 100 last messages to new members." xml:space="preserve">
<source>Send up to 100 last messages to new members.</source>
<target>Send up to 100 last messages to new members.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Sender cancelled file transfer." xml:space="preserve">
<source>Sender cancelled file transfer.</source>
<target>Sender cancelled file transfer.</target>
@@ -5176,6 +5196,11 @@ It can happen because of some bug or when the connection is compromised.</target
<target>This device name</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="This display name is invalid. Please choose another name." xml:space="preserve">
<source>This display name is invalid. Please choose another name.</source>
<target>This display name is invalid. Please choose another name.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="This group has over %lld members, delivery receipts are not sent." xml:space="preserve">
<source>This group has over %lld members, delivery receipts are not sent.</source>
<target>This group has over %lld members, delivery receipts are not sent.</target>
@@ -5400,6 +5425,11 @@ To connect, please ask your contact to create another connection link and check
<target>Unread</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Up to 100 last messages are sent to new members." xml:space="preserve">
<source>Up to 100 last messages are sent to new members.</source>
<target>Up to 100 last messages are sent to new members.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Update" xml:space="preserve">
<source>Update</source>
<target>Update</target>
@@ -5570,6 +5600,11 @@ To connect, please ask your contact to create another connection link and check
<target>View security code</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Visible history" xml:space="preserve">
<source>Visible history</source>
<target>Visible history</target>
<note>chat feature</note>
</trans-unit>
<trans-unit id="Voice messages" xml:space="preserve">
<source>Voice messages</source>
<target>Voice messages</target>

View File

@@ -314,6 +314,7 @@
</trans-unit>
<trans-unit id="**Add contact**: to create a new invitation link, or connect via a link you received." xml:space="preserve">
<source>**Add contact**: to create a new invitation link, or connect via a link you received.</source>
<target>**Añadir contacto**: crea un enlace de invitación nuevo o usa un enlace recibido.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="**Add new contact**: to create your one-time QR Code for your contact." xml:space="preserve">
@@ -323,6 +324,7 @@
</trans-unit>
<trans-unit id="**Create group**: to create a new group." xml:space="preserve">
<source>**Create group**: to create a new group.</source>
<target>**Crear grupo**: crea un grupo nuevo.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="**More private**: check new messages every 20 minutes. Device token is shared with SimpleX Chat server, but not how many contacts or messages you have." xml:space="preserve">
@@ -507,12 +509,12 @@
</trans-unit>
<trans-unit id="Abort changing address" xml:space="preserve">
<source>Abort changing address</source>
<target>Cancelar cambio de dirección</target>
<target>Cancelar cambio de servidor</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Abort changing address?" xml:space="preserve">
<source>Abort changing address?</source>
<target>¿Cancelar el cambio de dirección?</target>
<target>¿Cancelar el cambio de servidor?</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="About SimpleX" xml:space="preserve">
@@ -563,6 +565,7 @@
</trans-unit>
<trans-unit id="Add contact" xml:space="preserve">
<source>Add contact</source>
<target>Añadir contacto</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Add preset servers" xml:space="preserve">
@@ -670,9 +673,9 @@
<target>Se permiten los mensajes temporales pero sólo si tu contacto también los permite para tí.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Allow irreversible message deletion only if your contact allows it to you." xml:space="preserve">
<source>Allow irreversible message deletion only if your contact allows it to you.</source>
<target>Se permite la eliminación irreversible de mensajes pero sólo si tu contacto también la permite para tí.</target>
<trans-unit id="Allow irreversible message deletion only if your contact allows it to you. (24 hours)" xml:space="preserve">
<source>Allow irreversible message deletion only if your contact allows it to you. (24 hours)</source>
<target>Se permite la eliminación irreversible de mensajes pero sólo si tu contacto también la permite para tí. (24 horas)</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Allow message reactions only if your contact allows them." xml:space="preserve">
@@ -682,7 +685,7 @@
</trans-unit>
<trans-unit id="Allow message reactions." xml:space="preserve">
<source>Allow message reactions.</source>
<target>Permitir reacciones a los mensajes.</target>
<target>Se permiten reacciones a los mensajes.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Allow sending direct messages to members." xml:space="preserve">
@@ -695,9 +698,9 @@
<target>Permites el envío de mensajes temporales.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Allow to irreversibly delete sent messages." xml:space="preserve">
<source>Allow to irreversibly delete sent messages.</source>
<target>Se permite la eliminación irreversible de mensajes.</target>
<trans-unit id="Allow to irreversibly delete sent messages. (24 hours)" xml:space="preserve">
<source>Allow to irreversibly delete sent messages. (24 hours)</source>
<target>Se permite la eliminación irreversible de mensajes. (24 horas)</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Allow to send files and media." xml:space="preserve">
@@ -730,9 +733,9 @@
<target>Permites que tus contactos puedan llamarte.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Allow your contacts to irreversibly delete sent messages." xml:space="preserve">
<source>Allow your contacts to irreversibly delete sent messages.</source>
<target>Permites a tus contactos eliminar irreversiblemente los mensajes enviados.</target>
<trans-unit id="Allow your contacts to irreversibly delete sent messages. (24 hours)" xml:space="preserve">
<source>Allow your contacts to irreversibly delete sent messages. (24 hours)</source>
<target>Permites a tus contactos eliminar irreversiblemente los mensajes enviados. (24 horas)</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Allow your contacts to send disappearing messages." xml:space="preserve">
@@ -757,7 +760,7 @@
</trans-unit>
<trans-unit id="Already joining the group!" xml:space="preserve">
<source>Already joining the group!</source>
<target>¡Ya en proceso de unirse al grupo!</target>
<target>¡Ya en proceso de unirte al grupo!</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Always use relay" xml:space="preserve">
@@ -930,9 +933,9 @@
<target>Tanto tú como tu contacto podéis añadir reacciones a los mensajes.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Both you and your contact can irreversibly delete sent messages." xml:space="preserve">
<source>Both you and your contact can irreversibly delete sent messages.</source>
<target>Tanto tú como tu contacto podéis eliminar de forma irreversible los mensajes enviados.</target>
<trans-unit id="Both you and your contact can irreversibly delete sent messages. (24 hours)" xml:space="preserve">
<source>Both you and your contact can irreversibly delete sent messages. (24 hours)</source>
<target>Tanto tú como tu contacto podéis eliminar de forma irreversible los mensajes enviados. (24 horas)</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Both you and your contact can make calls." xml:space="preserve">
@@ -972,6 +975,7 @@
</trans-unit>
<trans-unit id="Camera not available" xml:space="preserve">
<source>Camera not available</source>
<target>Cámara no disponible</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Can't delete user profile!" xml:space="preserve">
@@ -986,7 +990,7 @@
</trans-unit>
<trans-unit id="Can't invite contacts!" xml:space="preserve">
<source>Can't invite contacts!</source>
<target>¡No se puede invitar a los contactos!</target>
<target>¡No se pueden invitar contactos!</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Cancel" xml:space="preserve">
@@ -1021,7 +1025,7 @@
</trans-unit>
<trans-unit id="Change member role?" xml:space="preserve">
<source>Change member role?</source>
<target>¿Cambiar el rol del miembro?</target>
<target>¿Cambiar rol?</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Change passcode" xml:space="preserve">
@@ -1092,6 +1096,7 @@
</trans-unit>
<trans-unit id="Chat is stopped. If you already used this database on another device, you should transfer it back before starting chat." xml:space="preserve">
<source>Chat is stopped. If you already used this database on another device, you should transfer it back before starting chat.</source>
<target>Chat está detenido. Si estás usando esta base de datos en otro dispositivo, deberías transferirla de vuelta antes de iniciarlo.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Chat preferences" xml:space="preserve">
@@ -1440,6 +1445,7 @@ This is your own one-time link!</source>
</trans-unit>
<trans-unit id="Creating link…" xml:space="preserve">
<source>Creating link…</source>
<target>Creando enlace…</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Current Passcode" xml:space="preserve">
@@ -1744,7 +1750,7 @@ This cannot be undone!</source>
</trans-unit>
<trans-unit id="Delete pending connection?" xml:space="preserve">
<source>Delete pending connection?</source>
<target>¿Eliminar la conexion pendiente?</target>
<target>¿Eliminar conexión pendiente?</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Delete profile" xml:space="preserve">
@@ -1922,6 +1928,10 @@ This cannot be undone!</source>
<target>Hacer más tarde</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Do not send history to new members." xml:space="preserve">
<source>Do not send history to new members.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Don't create address" xml:space="preserve">
<source>Don't create address</source>
<target>No crear dirección SimpleX</target>
@@ -1994,6 +2004,7 @@ This cannot be undone!</source>
</trans-unit>
<trans-unit id="Enable camera access" xml:space="preserve">
<source>Enable camera access</source>
<target>Permitir acceso a la cámara</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Enable for all" xml:space="preserve">
@@ -2063,6 +2074,7 @@ This cannot be undone!</source>
</trans-unit>
<trans-unit id="Encrypted message: app is stopped" xml:space="preserve">
<source>Encrypted message: app is stopped</source>
<target>Mensaje cifrado: la aplicación está parada</target>
<note>notification</note>
</trans-unit>
<trans-unit id="Encrypted message: database error" xml:space="preserve">
@@ -2177,7 +2189,7 @@ This cannot be undone!</source>
</trans-unit>
<trans-unit id="Error changing address" xml:space="preserve">
<source>Error changing address</source>
<target>Error al cambiar dirección</target>
<target>Error al cambiar servidor</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error changing role" xml:space="preserve">
@@ -2287,7 +2299,7 @@ This cannot be undone!</source>
</trans-unit>
<trans-unit id="Error joining group" xml:space="preserve">
<source>Error joining group</source>
<target>Error al unirse al grupo</target>
<target>Error al unirte al grupo</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error loading %@ servers" xml:space="preserve">
@@ -2297,6 +2309,7 @@ This cannot be undone!</source>
</trans-unit>
<trans-unit id="Error opening chat" xml:space="preserve">
<source>Error opening chat</source>
<target>Error al abrir chat</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error receiving file" xml:space="preserve">
@@ -2341,6 +2354,7 @@ This cannot be undone!</source>
</trans-unit>
<trans-unit id="Error scanning code: %@" xml:space="preserve">
<source>Error scanning code: %@</source>
<target>Error al escanear código: %@</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error sending email" xml:space="preserve">
@@ -2673,9 +2687,9 @@ This cannot be undone!</source>
<target>Los miembros pueden añadir reacciones a los mensajes.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Group members can irreversibly delete sent messages." xml:space="preserve">
<source>Group members can irreversibly delete sent messages.</source>
<target>Los miembros del grupo pueden eliminar mensajes de forma irreversible.</target>
<trans-unit id="Group members can irreversibly delete sent messages. (24 hours)" xml:space="preserve">
<source>Group members can irreversibly delete sent messages. (24 hours)</source>
<target>Los miembros del grupo pueden eliminar mensajes de forma irreversible. (24 horas)</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Group members can send direct messages." xml:space="preserve">
@@ -2710,7 +2724,7 @@ This cannot be undone!</source>
</trans-unit>
<trans-unit id="Group preferences" xml:space="preserve">
<source>Group preferences</source>
<target>Preferencias de grupo</target>
<target>Preferencias del grupo</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Group profile" xml:space="preserve">
@@ -2783,6 +2797,10 @@ This cannot be undone!</source>
<target>Historial</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="History is not sent to new members." xml:space="preserve">
<source>History is not sent to new members.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="How SimpleX works" xml:space="preserve">
<source>How SimpleX works</source>
<target>Cómo funciona SimpleX</target>
@@ -2977,6 +2995,7 @@ This cannot be undone!</source>
</trans-unit>
<trans-unit id="Invalid QR code" xml:space="preserve">
<source>Invalid QR code</source>
<target>Código QR no válido</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Invalid connection link" xml:space="preserve">
@@ -2984,8 +3003,13 @@ This cannot be undone!</source>
<target>Enlace de conexión no válido</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Invalid display name!" xml:space="preserve">
<source>Invalid display name!</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Invalid link" xml:space="preserve">
<source>Invalid link</source>
<target>Enlace no válido</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Invalid name!" xml:space="preserve">
@@ -2995,6 +3019,7 @@ This cannot be undone!</source>
</trans-unit>
<trans-unit id="Invalid response" xml:space="preserve">
<source>Invalid response</source>
<target>Respuesta no válida</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Invalid server address!" xml:space="preserve">
@@ -3080,22 +3105,22 @@ This cannot be undone!</source>
</trans-unit>
<trans-unit id="Join" xml:space="preserve">
<source>Join</source>
<target>Únete</target>
<target>Unirte</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Join group" xml:space="preserve">
<source>Join group</source>
<target>Únete al grupo</target>
<target>Unirte al grupo</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Join group?" xml:space="preserve">
<source>Join group?</source>
<target>¿Unirse al grupo?</target>
<target>¿Unirte al grupo?</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Join incognito" xml:space="preserve">
<source>Join incognito</source>
<target>Únete en modo incógnito</target>
<target>Unirte en modo incógnito</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Join with current profile" xml:space="preserve">
@@ -3117,6 +3142,7 @@ This is your link for group %@!</source>
</trans-unit>
<trans-unit id="Keep" xml:space="preserve">
<source>Keep</source>
<target>Guardar</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Keep the app open to use it from desktop" xml:space="preserve">
@@ -3126,6 +3152,7 @@ This is your link for group %@!</source>
</trans-unit>
<trans-unit id="Keep unused invitation?" xml:space="preserve">
<source>Keep unused invitation?</source>
<target>¿Guardar invitación no usada?</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Keep your connections" xml:space="preserve">
@@ -3300,12 +3327,12 @@ This is your link for group %@!</source>
</trans-unit>
<trans-unit id="Member role will be changed to &quot;%@&quot;. All group members will be notified." xml:space="preserve">
<source>Member role will be changed to "%@". All group members will be notified.</source>
<target>El rol de miembro cambiará a "%@". Todos los miembros del grupo serán notificados.</target>
<target>El rol del miembro cambiará a "%@" y se notificará al grupo.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Member role will be changed to &quot;%@&quot;. The member will receive a new invitation." xml:space="preserve">
<source>Member role will be changed to "%@". The member will receive a new invitation.</source>
<target>El rol del miembro cambiará a "%@". El miembro recibirá una invitación nueva.</target>
<target>El rol del miembro cambiará a "%@" y recibirá una invitación nueva.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Member will be removed from group - this cannot be undone!" xml:space="preserve">
@@ -3330,7 +3357,7 @@ This is your link for group %@!</source>
</trans-unit>
<trans-unit id="Message reactions" xml:space="preserve">
<source>Message reactions</source>
<target>Reacciones a los mensajes</target>
<target>Reacciones a mensajes</target>
<note>chat feature</note>
</trans-unit>
<trans-unit id="Message reactions are prohibited in this chat." xml:space="preserve">
@@ -3460,6 +3487,7 @@ This is your link for group %@!</source>
</trans-unit>
<trans-unit id="New chat" xml:space="preserve">
<source>New chat</source>
<target>Nuevo chat</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="New contact request" xml:space="preserve">
@@ -3588,6 +3616,7 @@ This is your link for group %@!</source>
</trans-unit>
<trans-unit id="OK" xml:space="preserve">
<source>OK</source>
<target>OK</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Off" xml:space="preserve">
@@ -3637,7 +3666,7 @@ This is your link for group %@!</source>
</trans-unit>
<trans-unit id="Only group owners can change group preferences." xml:space="preserve">
<source>Only group owners can change group preferences.</source>
<target>Sólo los propietarios pueden modificar las preferencias de grupo.</target>
<target>Sólo los propietarios pueden modificar las preferencias del grupo.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Only group owners can enable files and media." xml:space="preserve">
@@ -3655,9 +3684,9 @@ This is your link for group %@!</source>
<target>Sólo tú puedes añadir reacciones a los mensajes.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Only you can irreversibly delete messages (your contact can mark them for deletion)." xml:space="preserve">
<source>Only you can irreversibly delete messages (your contact can mark them for deletion).</source>
<target>Sólo tú puedes eliminar mensajes de forma irreversible (tu contacto puede marcarlos para eliminar).</target>
<trans-unit id="Only you can irreversibly delete messages (your contact can mark them for deletion). (24 hours)" xml:space="preserve">
<source>Only you can irreversibly delete messages (your contact can mark them for deletion). (24 hours)</source>
<target>Sólo tú puedes eliminar mensajes de forma irreversible (tu contacto puede marcarlos para eliminar). (24 horas)</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Only you can make calls." xml:space="preserve">
@@ -3680,9 +3709,9 @@ This is your link for group %@!</source>
<target>Sólo tu contacto puede añadir reacciones a los mensajes.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Only your contact can irreversibly delete messages (you can mark them for deletion)." xml:space="preserve">
<source>Only your contact can irreversibly delete messages (you can mark them for deletion).</source>
<target>Sólo tu contacto puede eliminar mensajes de forma irreversible (tu puedes marcarlos para eliminar).</target>
<trans-unit id="Only your contact can irreversibly delete messages (you can mark them for deletion). (24 hours)" xml:space="preserve">
<source>Only your contact can irreversibly delete messages (you can mark them for deletion). (24 hours)</source>
<target>Sólo tu contacto puede eliminar mensajes de forma irreversible (tu puedes marcarlos para eliminar). (24 horas)</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Only your contact can make calls." xml:space="preserve">
@@ -3737,14 +3766,17 @@ This is your link for group %@!</source>
</trans-unit>
<trans-unit id="Opening app…" xml:space="preserve">
<source>Opening app…</source>
<target>Iniciando aplicación…</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Or scan QR code" xml:space="preserve">
<source>Or scan QR code</source>
<target>O escanear código QR</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Or show this code" xml:space="preserve">
<source>Or show this code</source>
<target>O mostrar este código</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="PING count" xml:space="preserve">
@@ -3799,6 +3831,7 @@ This is your link for group %@!</source>
</trans-unit>
<trans-unit id="Paste the link you received" xml:space="preserve">
<source>Paste the link you received</source>
<target>Pegar el enlace recibido</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="People can connect to you only via the links you share." xml:space="preserve">
@@ -3839,11 +3872,13 @@ This is your link for group %@!</source>
<trans-unit id="Please contact developers.&#10;Error: %@" xml:space="preserve">
<source>Please contact developers.
Error: %@</source>
<target>Por favor, contacta con los desarrolladores.
Error: %@</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Please contact group admin." xml:space="preserve">
<source>Please contact group admin.</source>
<target>Póngase en contacto con el administrador del grupo.</target>
<target>Ponte en contacto con el administrador del grupo.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Please enter correct current passphrase." xml:space="preserve">
@@ -4043,26 +4078,27 @@ Error: %@</source>
</trans-unit>
<trans-unit id="Read more in [User Guide](https://simplex.chat/docs/guide/app-settings.html#your-simplex-contact-address)." xml:space="preserve">
<source>Read more in [User Guide](https://simplex.chat/docs/guide/app-settings.html#your-simplex-contact-address).</source>
<target>Más información en el [Manual de usuario](https://simplex.chat/docs/guide/app-settings.html#your-simplex-contact-address).</target>
<target>Saber más en el [Manual del Usuario](https://simplex.chat/docs/guide/app-settings.html#your-simplex-contact-address).</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Read more in [User Guide](https://simplex.chat/docs/guide/chat-profiles.html#incognito-mode)." xml:space="preserve">
<source>Read more in [User Guide](https://simplex.chat/docs/guide/chat-profiles.html#incognito-mode).</source>
<target>Saber más en [Guía de Usuario](https://simplex.chat/docs/guide/chat-profiles.html#incognito-mode).</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Read more in [User Guide](https://simplex.chat/docs/guide/readme.html#connect-to-friends)." xml:space="preserve">
<source>Read more in [User Guide](https://simplex.chat/docs/guide/readme.html#connect-to-friends).</source>
<target>Más información en el [Manual de usuario](https://simplex.chat/docs/guide/readme.html#connect-to-friends).</target>
<target>Saber más en el [Manual del Usuario](https://simplex.chat/docs/guide/readme.html#connect-to-friends).</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Read more in our GitHub repository." xml:space="preserve">
<source>Read more in our GitHub repository.</source>
<target>Más información en nuestro repositorio GitHub.</target>
<target>Saber más en nuestro repositorio GitHub.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Read more in our [GitHub repository](https://github.com/simplex-chat/simplex-chat#readme)." xml:space="preserve">
<source>Read more in our [GitHub repository](https://github.com/simplex-chat/simplex-chat#readme).</source>
<target>Más información en nuestro [repositorio GitHub](https://github.com/simplex-chat/simplex-chat#readme).</target>
<target>Saber más en nuestro [repositorio GitHub](https://github.com/simplex-chat/simplex-chat#readme).</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Receipts are disabled" xml:space="preserve">
@@ -4262,6 +4298,7 @@ Error: %@</source>
</trans-unit>
<trans-unit id="Retry" xml:space="preserve">
<source>Retry</source>
<target>Reintentar</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Reveal" xml:space="preserve">
@@ -4321,12 +4358,12 @@ Error: %@</source>
</trans-unit>
<trans-unit id="Save and notify group members" xml:space="preserve">
<source>Save and notify group members</source>
<target>Guardar y notificar a los miembros del grupo</target>
<target>Guardar y notificar grupo</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Save and update group profile" xml:space="preserve">
<source>Save and update group profile</source>
<target>Guardar y actualizar perfil de grupo</target>
<target>Guardar y actualizar perfil del grupo</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Save archive" xml:space="preserve">
@@ -4421,6 +4458,7 @@ Error: %@</source>
</trans-unit>
<trans-unit id="Search or paste SimpleX link" xml:space="preserve">
<source>Search or paste SimpleX link</source>
<target>Buscar o pegar enlace SimpleX</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Secure queue" xml:space="preserve">
@@ -4528,6 +4566,10 @@ Error: %@</source>
<target>Envíalos desde la galería o desde teclados personalizados.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Send up to 100 last messages to new members." xml:space="preserve">
<source>Send up to 100 last messages to new members.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Sender cancelled file transfer." xml:space="preserve">
<source>Sender cancelled file transfer.</source>
<target>El remitente ha cancelado la transferencia de archivos.</target>
@@ -4700,6 +4742,7 @@ Error: %@</source>
</trans-unit>
<trans-unit id="Share this 1-time invite link" xml:space="preserve">
<source>Share this 1-time invite link</source>
<target>Compartir este enlace de un uso</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Share with contacts" xml:space="preserve">
@@ -4829,6 +4872,7 @@ Error: %@</source>
</trans-unit>
<trans-unit id="Start chat?" xml:space="preserve">
<source>Start chat?</source>
<target>¿Iniciar chat?</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Start migration" xml:space="preserve">
@@ -4948,7 +4992,7 @@ Error: %@</source>
</trans-unit>
<trans-unit id="Tap to join" xml:space="preserve">
<source>Tap to join</source>
<target>Pulsa para unirse</target>
<target>Pulsa para unirte</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Tap to join incognito" xml:space="preserve">
@@ -4958,10 +5002,12 @@ Error: %@</source>
</trans-unit>
<trans-unit id="Tap to paste link" xml:space="preserve">
<source>Tap to paste link</source>
<target>Pulsa para pegar enlace</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Tap to scan" xml:space="preserve">
<source>Tap to scan</source>
<target>Pulsa para escanear</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Tap to start a new chat" xml:space="preserve">
@@ -5028,6 +5074,7 @@ Puede ocurrir por algún bug o cuando la conexión está comprometida.</target>
</trans-unit>
<trans-unit id="The code you scanned is not a SimpleX link QR code." xml:space="preserve">
<source>The code you scanned is not a SimpleX link QR code.</source>
<target>El código QR escaneado no es un enlace SimpleX.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="The connection you accepted will be cancelled!" xml:space="preserve">
@@ -5097,6 +5144,7 @@ Puede ocurrir por algún bug o cuando la conexión está comprometida.</target>
</trans-unit>
<trans-unit id="The text you pasted is not a SimpleX link." xml:space="preserve">
<source>The text you pasted is not a SimpleX link.</source>
<target>El texto pegado no es un enlace SimpleX.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Theme" xml:space="preserve">
@@ -5144,6 +5192,10 @@ Puede ocurrir por algún bug o cuando la conexión está comprometida.</target>
<target>Nombre del dispositivo</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="This display name is invalid. Please choose another name." xml:space="preserve">
<source>This display name is invalid. Please choose another name.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="This group has over %lld members, delivery receipts are not sent." xml:space="preserve">
<source>This group has over %lld members, delivery receipts are not sent.</source>
<target>Este grupo tiene más de %lld miembros, no se enviarán confirmaciones de entrega.</target>
@@ -5223,7 +5275,7 @@ Se te pedirá que completes la autenticación antes de activar esta función.</t
</trans-unit>
<trans-unit id="To verify end-to-end encryption with your contact compare (or scan) the code on your devices." xml:space="preserve">
<source>To verify end-to-end encryption with your contact compare (or scan) the code on your devices.</source>
<target>Para comprobar el cifrado de extremo a extremo con tu contacto compara (o escanea) el código en tus dispositivos.</target>
<target>Para verificar el cifrado de extremo a extremo con tu contacto, compara (o escanea) el código en ambos dispositivos.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Toggle incognito when connecting." xml:space="preserve">
@@ -5369,6 +5421,10 @@ Para conectarte, pide a tu contacto que cree otro enlace de conexión y comprueb
<target>No leído</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Up to 100 last messages are sent to new members." xml:space="preserve">
<source>Up to 100 last messages are sent to new members.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Update" xml:space="preserve">
<source>Update</source>
<target>Actualizar</target>
@@ -5456,6 +5512,7 @@ Para conectarte, pide a tu contacto que cree otro enlace de conexión y comprueb
</trans-unit>
<trans-unit id="Use only local notifications?" xml:space="preserve">
<source>Use only local notifications?</source>
<target>¿Usar sólo notificaciones locales?</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Use server" xml:space="preserve">
@@ -5538,6 +5595,10 @@ Para conectarte, pide a tu contacto que cree otro enlace de conexión y comprueb
<target>Mostrar código de seguridad</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Visible history" xml:space="preserve">
<source>Visible history</source>
<note>chat feature</note>
</trans-unit>
<trans-unit id="Voice messages" xml:space="preserve">
<source>Voice messages</source>
<target>Mensajes de voz</target>
@@ -5712,7 +5773,7 @@ Repeat join request?</source>
</trans-unit>
<trans-unit id="You are invited to group" xml:space="preserve">
<source>You are invited to group</source>
<target>Has sido invitado al grupo</target>
<target>Has sido invitado a un grupo</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="You can accept calls from lock screen, without device and app authentication." xml:space="preserve">
@@ -5742,6 +5803,7 @@ Repeat join request?</source>
</trans-unit>
<trans-unit id="You can make it visible to your SimpleX contacts via Settings." xml:space="preserve">
<source>You can make it visible to your SimpleX contacts via Settings.</source>
<target>Puedes hacerlo visible para tus contactos de SimpleX en Configuración.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="You can now send messages to %@" xml:space="preserve">
@@ -5756,7 +5818,7 @@ Repeat join request?</source>
</trans-unit>
<trans-unit id="You can share a link or a QR code - anybody will be able to join the group. You won't lose members of the group if you later delete it." xml:space="preserve">
<source>You can share a link or a QR code - anybody will be able to join the group. You won't lose members of the group if you later delete it.</source>
<target>Puedes compartir un enlace o un código QR: cualquiera podrá unirse al grupo. Si lo eliminas más tarde los miembros del grupo no se perderán.</target>
<target>Puedes compartir un enlace o código QR para que cualquiera pueda unirse al grupo. Si decides eliminarlo más tarde, los miembros del grupo se mantendrán.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="You can share this address with your contacts to let them connect with **%@**." xml:space="preserve">
@@ -5766,7 +5828,7 @@ Repeat join request?</source>
</trans-unit>
<trans-unit id="You can share your address as a link or QR code - anybody can connect to you." xml:space="preserve">
<source>You can share your address as a link or QR code - anybody can connect to you.</source>
<target>Puedes compartir tu dirección como enlace o como código QR: cualquiera podrá conectarse contigo.</target>
<target>Puedes compartir tu dirección como enlace o código QR para que cualquiera pueda conectarse contigo.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="You can start chat via app Settings / Database or by restarting the app" xml:space="preserve">
@@ -5786,6 +5848,7 @@ Repeat join request?</source>
</trans-unit>
<trans-unit id="You can view invitation link again in connection details." xml:space="preserve">
<source>You can view invitation link again in connection details.</source>
<target>Podrás ver el enlace de invitación en detalles de conexión.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="You can't send messages!" xml:space="preserve">
@@ -5912,7 +5975,7 @@ Repeat connection request?</source>
</trans-unit>
<trans-unit id="You're using an incognito profile for this group - to prevent sharing your main profile inviting contacts is not allowed" xml:space="preserve">
<source>You're using an incognito profile for this group - to prevent sharing your main profile inviting contacts is not allowed</source>
<target>Estás usando un perfil incógnito para este grupo, por tanto para evitar compartir tu perfil principal no se permite invitar a contactos</target>
<target>Estás usando un perfil incógnito en este grupo. Para evitar descubrir tu perfil principal no se permite invitar contactos</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Your %@ servers" xml:space="preserve">
@@ -6156,7 +6219,7 @@ Los servidores de SimpleX no pueden ver tu perfil.</target>
</trans-unit>
<trans-unit id="changed address for you" xml:space="preserve">
<source>changed address for you</source>
<target>el servidor de envío ha cambiado para tí</target>
<target>ha cambiado tu servidor de envío</target>
<note>chat item text</note>
</trans-unit>
<trans-unit id="changed role of %@ to %@" xml:space="preserve">
@@ -6171,12 +6234,12 @@ Los servidores de SimpleX no pueden ver tu perfil.</target>
</trans-unit>
<trans-unit id="changing address for %@…" xml:space="preserve">
<source>changing address for %@…</source>
<target>cambiando dirección para %@…</target>
<target>cambiando el servidor para %@…</target>
<note>chat item text</note>
</trans-unit>
<trans-unit id="changing address…" xml:space="preserve">
<source>changing address…</source>
<target>cambiando dirección…</target>
<target>cambiando de servidor…</target>
<note>chat item text</note>
</trans-unit>
<trans-unit id="colored" xml:space="preserve">
@@ -6758,7 +6821,7 @@ Los servidores de SimpleX no pueden ver tu perfil.</target>
</trans-unit>
<trans-unit id="you are invited to group" xml:space="preserve">
<source>you are invited to group</source>
<target>has sido invitado al grupo</target>
<target>has sido invitado a un grupo</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="you are observer" xml:space="preserve">

View File

@@ -653,9 +653,9 @@
<target>Salli katoavat viestit vain, jos kontaktisi sallii sen sinulle.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Allow irreversible message deletion only if your contact allows it to you." xml:space="preserve">
<source>Allow irreversible message deletion only if your contact allows it to you.</source>
<target>Salli peruuttamaton viestien poisto vain, jos kontaktisi sallii ne sinulle.</target>
<trans-unit id="Allow irreversible message deletion only if your contact allows it to you. (24 hours)" xml:space="preserve">
<source>Allow irreversible message deletion only if your contact allows it to you. (24 hours)</source>
<target>Salli peruuttamaton viestien poisto vain, jos kontaktisi sallii ne sinulle. (24 tuntia)</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Allow message reactions only if your contact allows them." xml:space="preserve">
@@ -678,9 +678,9 @@
<target>Salli katoavien viestien lähettäminen.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Allow to irreversibly delete sent messages." xml:space="preserve">
<source>Allow to irreversibly delete sent messages.</source>
<target>Salli lähetettyjen viestien peruuttamaton poistaminen.</target>
<trans-unit id="Allow to irreversibly delete sent messages. (24 hours)" xml:space="preserve">
<source>Allow to irreversibly delete sent messages. (24 hours)</source>
<target>Salli lähetettyjen viestien peruuttamaton poistaminen. (24 tuntia)</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Allow to send files and media." xml:space="preserve">
@@ -713,9 +713,9 @@
<target>Salli kontaktiesi soittaa sinulle.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Allow your contacts to irreversibly delete sent messages." xml:space="preserve">
<source>Allow your contacts to irreversibly delete sent messages.</source>
<target>Salli kontaktiesi poistaa lähetetyt viestit peruuttamattomasti.</target>
<trans-unit id="Allow your contacts to irreversibly delete sent messages. (24 hours)" xml:space="preserve">
<source>Allow your contacts to irreversibly delete sent messages. (24 hours)</source>
<target>Salli kontaktiesi poistaa lähetetyt viestit peruuttamattomasti. (24 tuntia)</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Allow your contacts to send disappearing messages." xml:space="preserve">
@@ -904,9 +904,9 @@
<target>Sekä sinä että kontaktisi voivat käyttää viestireaktioita.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Both you and your contact can irreversibly delete sent messages." xml:space="preserve">
<source>Both you and your contact can irreversibly delete sent messages.</source>
<target>Sekä sinä että kontaktisi voitte peruuttamattomasti poistaa lähetetyt viestit.</target>
<trans-unit id="Both you and your contact can irreversibly delete sent messages. (24 hours)" xml:space="preserve">
<source>Both you and your contact can irreversibly delete sent messages. (24 hours)</source>
<target>Sekä sinä että kontaktisi voitte peruuttamattomasti poistaa lähetetyt viestit. (24 tuntia)</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Both you and your contact can make calls." xml:space="preserve">
@@ -1869,6 +1869,10 @@ This cannot be undone!</source>
<target>Tee myöhemmin</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Do not send history to new members." xml:space="preserve">
<source>Do not send history to new members.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Don't create address" xml:space="preserve">
<source>Don't create address</source>
<target>Älä luo osoitetta</target>
@@ -2606,9 +2610,9 @@ This cannot be undone!</source>
<target>Ryhmän jäsenet voivat lisätä viestireaktioita.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Group members can irreversibly delete sent messages." xml:space="preserve">
<source>Group members can irreversibly delete sent messages.</source>
<target>Ryhmän jäsenet voivat poistaa lähetetyt viestit peruuttamattomasti.</target>
<trans-unit id="Group members can irreversibly delete sent messages. (24 hours)" xml:space="preserve">
<source>Group members can irreversibly delete sent messages. (24 hours)</source>
<target>Ryhmän jäsenet voivat poistaa lähetetyt viestit peruuttamattomasti. (24 tuntia)</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Group members can send direct messages." xml:space="preserve">
@@ -2716,6 +2720,10 @@ This cannot be undone!</source>
<target>Historia</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="History is not sent to new members." xml:space="preserve">
<source>History is not sent to new members.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="How SimpleX works" xml:space="preserve">
<source>How SimpleX works</source>
<target>Miten SimpleX toimii</target>
@@ -2915,6 +2923,10 @@ This cannot be undone!</source>
<target>Virheellinen yhteyslinkki</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Invalid display name!" xml:space="preserve">
<source>Invalid display name!</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Invalid link" xml:space="preserve">
<source>Invalid link</source>
<note>No comment provided by engineer.</note>
@@ -3574,9 +3586,9 @@ This is your link for group %@!</source>
<target>Vain sinä voit lisätä viestireaktioita.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Only you can irreversibly delete messages (your contact can mark them for deletion)." xml:space="preserve">
<source>Only you can irreversibly delete messages (your contact can mark them for deletion).</source>
<target>Vain sinä voit poistaa viestejä peruuttamattomasti (kontaktisi voi merkitä ne poistettavaksi).</target>
<trans-unit id="Only you can irreversibly delete messages (your contact can mark them for deletion). (24 hours)" xml:space="preserve">
<source>Only you can irreversibly delete messages (your contact can mark them for deletion). (24 hours)</source>
<target>Vain sinä voit poistaa viestejä peruuttamattomasti (kontaktisi voi merkitä ne poistettavaksi). (24 tuntia)</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Only you can make calls." xml:space="preserve">
@@ -3599,9 +3611,9 @@ This is your link for group %@!</source>
<target>Vain kontaktisi voi lisätä viestireaktioita.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Only your contact can irreversibly delete messages (you can mark them for deletion)." xml:space="preserve">
<source>Only your contact can irreversibly delete messages (you can mark them for deletion).</source>
<target>Vain kontaktisi voi poistaa viestejä peruuttamattomasti (voit merkitä ne poistettavaksi).</target>
<trans-unit id="Only your contact can irreversibly delete messages (you can mark them for deletion). (24 hours)" xml:space="preserve">
<source>Only your contact can irreversibly delete messages (you can mark them for deletion). (24 hours)</source>
<target>Vain kontaktisi voi poistaa viestejä peruuttamattomasti (voit merkitä ne poistettavaksi). (24 tuntia)</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Only your contact can make calls." xml:space="preserve">
@@ -4438,6 +4450,10 @@ Error: %@</source>
<target>Lähetä ne galleriasta tai mukautetuista näppäimistöistä.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Send up to 100 last messages to new members." xml:space="preserve">
<source>Send up to 100 last messages to new members.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Sender cancelled file transfer." xml:space="preserve">
<source>Sender cancelled file transfer.</source>
<target>Lähettäjä peruutti tiedoston siirron.</target>
@@ -5050,6 +5066,10 @@ Tämä voi johtua jostain virheestä tai siitä, että yhteys on vaarantunut.</t
<source>This device name</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="This display name is invalid. Please choose another name." xml:space="preserve">
<source>This display name is invalid. Please choose another name.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="This group has over %lld members, delivery receipts are not sent." xml:space="preserve">
<source>This group has over %lld members, delivery receipts are not sent.</source>
<target>Tässä ryhmässä on yli %lld jäsentä, lähetyskuittauksia ei lähetetä.</target>
@@ -5265,6 +5285,10 @@ Jos haluat muodostaa yhteyden, pyydä kontaktiasi luomaan toinen yhteyslinkki ja
<target>Lukematon</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Up to 100 last messages are sent to new members." xml:space="preserve">
<source>Up to 100 last messages are sent to new members.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Update" xml:space="preserve">
<source>Update</source>
<target>Päivitä</target>
@@ -5429,6 +5453,10 @@ Jos haluat muodostaa yhteyden, pyydä kontaktiasi luomaan toinen yhteyslinkki ja
<target>Näytä turvakoodi</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Visible history" xml:space="preserve">
<source>Visible history</source>
<note>chat feature</note>
</trans-unit>
<trans-unit id="Voice messages" xml:space="preserve">
<source>Voice messages</source>
<target>Ääniviestit</target>

View File

@@ -314,6 +314,7 @@
</trans-unit>
<trans-unit id="**Add contact**: to create a new invitation link, or connect via a link you received." xml:space="preserve">
<source>**Add contact**: to create a new invitation link, or connect via a link you received.</source>
<target>**Ajouter un contact**: pour créer un nouveau lien d'invitation ou vous connecter via un lien que vous avez reçu.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="**Add new contact**: to create your one-time QR Code for your contact." xml:space="preserve">
@@ -323,6 +324,7 @@
</trans-unit>
<trans-unit id="**Create group**: to create a new group." xml:space="preserve">
<source>**Create group**: to create a new group.</source>
<target>**Créer un groupe**: pour créer un nouveau groupe.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="**More private**: check new messages every 20 minutes. Device token is shared with SimpleX Chat server, but not how many contacts or messages you have." xml:space="preserve">
@@ -563,6 +565,7 @@
</trans-unit>
<trans-unit id="Add contact" xml:space="preserve">
<source>Add contact</source>
<target>Ajouter le contact</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Add preset servers" xml:space="preserve">
@@ -670,9 +673,9 @@
<target>Autorise les messages éphémères seulement si votre contact vous lautorise.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Allow irreversible message deletion only if your contact allows it to you." xml:space="preserve">
<source>Allow irreversible message deletion only if your contact allows it to you.</source>
<target>Autoriser la suppression irréversible des messages uniquement si votre contact vous l'autorise.</target>
<trans-unit id="Allow irreversible message deletion only if your contact allows it to you. (24 hours)" xml:space="preserve">
<source>Allow irreversible message deletion only if your contact allows it to you. (24 hours)</source>
<target>Autoriser la suppression irréversible des messages uniquement si votre contact vous l'autorise. (24 heures)</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Allow message reactions only if your contact allows them." xml:space="preserve">
@@ -695,9 +698,9 @@
<target>Autorise lenvoi de messages éphémères.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Allow to irreversibly delete sent messages." xml:space="preserve">
<source>Allow to irreversibly delete sent messages.</source>
<target>Autoriser la suppression irréversible de messages envoyés.</target>
<trans-unit id="Allow to irreversibly delete sent messages. (24 hours)" xml:space="preserve">
<source>Allow to irreversibly delete sent messages. (24 hours)</source>
<target>Autoriser la suppression irréversible de messages envoyés. (24 heures)</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Allow to send files and media." xml:space="preserve">
@@ -730,9 +733,9 @@
<target>Autorise vos contacts à vous appeler.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Allow your contacts to irreversibly delete sent messages." xml:space="preserve">
<source>Allow your contacts to irreversibly delete sent messages.</source>
<target>Autorise vos contacts à supprimer de manière irréversible les messages envoyés.</target>
<trans-unit id="Allow your contacts to irreversibly delete sent messages. (24 hours)" xml:space="preserve">
<source>Allow your contacts to irreversibly delete sent messages. (24 hours)</source>
<target>Autorise vos contacts à supprimer de manière irréversible les messages envoyés. (24 heures)</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Allow your contacts to send disappearing messages." xml:space="preserve">
@@ -930,9 +933,9 @@
<target>Vous et votre contact pouvez ajouter des réactions aux messages.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Both you and your contact can irreversibly delete sent messages." xml:space="preserve">
<source>Both you and your contact can irreversibly delete sent messages.</source>
<target>Vous et votre contact êtes tous deux en mesure de supprimer de manière irréversible les messages envoyés.</target>
<trans-unit id="Both you and your contact can irreversibly delete sent messages. (24 hours)" xml:space="preserve">
<source>Both you and your contact can irreversibly delete sent messages. (24 hours)</source>
<target>Vous et votre contact êtes tous deux en mesure de supprimer de manière irréversible les messages envoyés. (24 heures)</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Both you and your contact can make calls." xml:space="preserve">
@@ -972,6 +975,7 @@
</trans-unit>
<trans-unit id="Camera not available" xml:space="preserve">
<source>Camera not available</source>
<target>Caméra non disponible</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Can't delete user profile!" xml:space="preserve">
@@ -1092,6 +1096,7 @@
</trans-unit>
<trans-unit id="Chat is stopped. If you already used this database on another device, you should transfer it back before starting chat." xml:space="preserve">
<source>Chat is stopped. If you already used this database on another device, you should transfer it back before starting chat.</source>
<target>Le chat est arrêté. Si vous avez déjà utilisé cette base de données sur un autre appareil, vous devez la transférer à nouveau avant de démarrer le chat.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Chat preferences" xml:space="preserve">
@@ -1101,7 +1106,7 @@
</trans-unit>
<trans-unit id="Chats" xml:space="preserve">
<source>Chats</source>
<target>Chats</target>
<target>Discussions</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Check server address and try again." xml:space="preserve">
@@ -1206,7 +1211,7 @@
</trans-unit>
<trans-unit id="Connect to desktop" xml:space="preserve">
<source>Connect to desktop</source>
<target>Se connecter au bureau</target>
<target>Connexion au bureau</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Connect to yourself?" xml:space="preserve">
@@ -1440,6 +1445,7 @@ Il s'agit de votre propre lien unique !</target>
</trans-unit>
<trans-unit id="Creating link…" xml:space="preserve">
<source>Creating link…</source>
<target>Création d'un lien…</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Current Passcode" xml:space="preserve">
@@ -1922,6 +1928,10 @@ Cette opération ne peut être annulée !</target>
<target>Faites-le plus tard</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Do not send history to new members." xml:space="preserve">
<source>Do not send history to new members.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Don't create address" xml:space="preserve">
<source>Don't create address</source>
<target>Ne pas créer d'adresse</target>
@@ -1994,6 +2004,7 @@ Cette opération ne peut être annulée !</target>
</trans-unit>
<trans-unit id="Enable camera access" xml:space="preserve">
<source>Enable camera access</source>
<target>Autoriser l'accès à la caméra</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Enable for all" xml:space="preserve">
@@ -2063,6 +2074,7 @@ Cette opération ne peut être annulée !</target>
</trans-unit>
<trans-unit id="Encrypted message: app is stopped" xml:space="preserve">
<source>Encrypted message: app is stopped</source>
<target>Message chiffré: l'application est arrêtée</target>
<note>notification</note>
</trans-unit>
<trans-unit id="Encrypted message: database error" xml:space="preserve">
@@ -2297,6 +2309,7 @@ Cette opération ne peut être annulée !</target>
</trans-unit>
<trans-unit id="Error opening chat" xml:space="preserve">
<source>Error opening chat</source>
<target>Erreur lors de l'ouverture du chat</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error receiving file" xml:space="preserve">
@@ -2341,6 +2354,7 @@ Cette opération ne peut être annulée !</target>
</trans-unit>
<trans-unit id="Error scanning code: %@" xml:space="preserve">
<source>Error scanning code: %@</source>
<target>Erreur lors du scan du code: %@</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error sending email" xml:space="preserve">
@@ -2430,7 +2444,7 @@ Cette opération ne peut être annulée !</target>
</trans-unit>
<trans-unit id="Exit without saving" xml:space="preserve">
<source>Exit without saving</source>
<target>Quitter sans sauvegarder</target>
<target>Quitter sans enregistrer</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Expand" xml:space="preserve">
@@ -2530,7 +2544,7 @@ Cette opération ne peut être annulée !</target>
</trans-unit>
<trans-unit id="Find chats faster" xml:space="preserve">
<source>Find chats faster</source>
<target>Trouver des messages plus rapidement</target>
<target>Recherche de message plus rapide</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Fix" xml:space="preserve">
@@ -2673,9 +2687,9 @@ Cette opération ne peut être annulée !</target>
<target>Les membres du groupe peuvent ajouter des réactions aux messages.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Group members can irreversibly delete sent messages." xml:space="preserve">
<source>Group members can irreversibly delete sent messages.</source>
<target>Les membres du groupe peuvent supprimer de manière irréversible les messages envoyés.</target>
<trans-unit id="Group members can irreversibly delete sent messages. (24 hours)" xml:space="preserve">
<source>Group members can irreversibly delete sent messages. (24 hours)</source>
<target>Les membres du groupe peuvent supprimer de manière irréversible les messages envoyés. (24 heures)</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Group members can send direct messages." xml:space="preserve">
@@ -2783,6 +2797,10 @@ Cette opération ne peut être annulée !</target>
<target>Historique</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="History is not sent to new members." xml:space="preserve">
<source>History is not sent to new members.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="How SimpleX works" xml:space="preserve">
<source>How SimpleX works</source>
<target>Comment SimpleX fonctionne</target>
@@ -2977,6 +2995,7 @@ Cette opération ne peut être annulée !</target>
</trans-unit>
<trans-unit id="Invalid QR code" xml:space="preserve">
<source>Invalid QR code</source>
<target>Code QR invalide</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Invalid connection link" xml:space="preserve">
@@ -2984,8 +3003,13 @@ Cette opération ne peut être annulée !</target>
<target>Lien de connection invalide</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Invalid display name!" xml:space="preserve">
<source>Invalid display name!</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Invalid link" xml:space="preserve">
<source>Invalid link</source>
<target>Lien invalide</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Invalid name!" xml:space="preserve">
@@ -2995,6 +3019,7 @@ Cette opération ne peut être annulée !</target>
</trans-unit>
<trans-unit id="Invalid response" xml:space="preserve">
<source>Invalid response</source>
<target>Réponse invalide</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Invalid server address!" xml:space="preserve">
@@ -3117,6 +3142,7 @@ Voici votre lien pour le groupe %@ !</target>
</trans-unit>
<trans-unit id="Keep" xml:space="preserve">
<source>Keep</source>
<target>Conserver</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Keep the app open to use it from desktop" xml:space="preserve">
@@ -3126,6 +3152,7 @@ Voici votre lien pour le groupe %@ !</target>
</trans-unit>
<trans-unit id="Keep unused invitation?" xml:space="preserve">
<source>Keep unused invitation?</source>
<target>Conserver l'invitation inutilisée?</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Keep your connections" xml:space="preserve">
@@ -3460,6 +3487,7 @@ Voici votre lien pour le groupe %@ !</target>
</trans-unit>
<trans-unit id="New chat" xml:space="preserve">
<source>New chat</source>
<target>Nouveau chat</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="New contact request" xml:space="preserve">
@@ -3539,7 +3567,7 @@ Voici votre lien pour le groupe %@ !</target>
</trans-unit>
<trans-unit id="No filtered chats" xml:space="preserve">
<source>No filtered chats</source>
<target>Pas de chats filtrés</target>
<target>Aucune discussion filtrés</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="No group!" xml:space="preserve">
@@ -3588,6 +3616,7 @@ Voici votre lien pour le groupe %@ !</target>
</trans-unit>
<trans-unit id="OK" xml:space="preserve">
<source>OK</source>
<target>OK</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Off" xml:space="preserve">
@@ -3655,9 +3684,9 @@ Voici votre lien pour le groupe %@ !</target>
<target>Vous seul pouvez ajouter des réactions aux messages.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Only you can irreversibly delete messages (your contact can mark them for deletion)." xml:space="preserve">
<source>Only you can irreversibly delete messages (your contact can mark them for deletion).</source>
<target>Vous êtes le seul à pouvoir supprimer des messages de manière irréversible (votre contact peut les marquer comme supprimé).</target>
<trans-unit id="Only you can irreversibly delete messages (your contact can mark them for deletion). (24 hours)" xml:space="preserve">
<source>Only you can irreversibly delete messages (your contact can mark them for deletion). (24 hours)</source>
<target>Vous êtes le seul à pouvoir supprimer des messages de manière irréversible (votre contact peut les marquer comme supprimé). (24 heures)</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Only you can make calls." xml:space="preserve">
@@ -3680,9 +3709,9 @@ Voici votre lien pour le groupe %@ !</target>
<target>Seul votre contact peut ajouter des réactions aux messages.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Only your contact can irreversibly delete messages (you can mark them for deletion)." xml:space="preserve">
<source>Only your contact can irreversibly delete messages (you can mark them for deletion).</source>
<target>Seul votre contact peut supprimer de manière irréversible des messages (vous pouvez les marquer comme supprimé).</target>
<trans-unit id="Only your contact can irreversibly delete messages (you can mark them for deletion). (24 hours)" xml:space="preserve">
<source>Only your contact can irreversibly delete messages (you can mark them for deletion). (24 hours)</source>
<target>Seul votre contact peut supprimer de manière irréversible des messages (vous pouvez les marquer comme supprimé). (24 heures)</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Only your contact can make calls." xml:space="preserve">
@@ -3737,14 +3766,17 @@ Voici votre lien pour le groupe %@ !</target>
</trans-unit>
<trans-unit id="Opening app…" xml:space="preserve">
<source>Opening app…</source>
<target>Ouverture de l'app…</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Or scan QR code" xml:space="preserve">
<source>Or scan QR code</source>
<target>Ou scanner le code QR</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Or show this code" xml:space="preserve">
<source>Or show this code</source>
<target>Ou présenter ce code</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="PING count" xml:space="preserve">
@@ -3799,6 +3831,7 @@ Voici votre lien pour le groupe %@ !</target>
</trans-unit>
<trans-unit id="Paste the link you received" xml:space="preserve">
<source>Paste the link you received</source>
<target>Collez le lien que vous avez reçu</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="People can connect to you only via the links you share." xml:space="preserve">
@@ -3839,6 +3872,8 @@ Voici votre lien pour le groupe %@ !</target>
<trans-unit id="Please contact developers.&#10;Error: %@" xml:space="preserve">
<source>Please contact developers.
Error: %@</source>
<target>Veuillez contacter les développeurs.
Erreur: %@</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Please contact group admin." xml:space="preserve">
@@ -4048,6 +4083,7 @@ Error: %@</source>
</trans-unit>
<trans-unit id="Read more in [User Guide](https://simplex.chat/docs/guide/chat-profiles.html#incognito-mode)." xml:space="preserve">
<source>Read more in [User Guide](https://simplex.chat/docs/guide/chat-profiles.html#incognito-mode).</source>
<target>Pour en savoir plus, consultez le [Guide de l'utilisateur](https://simplex.chat/docs/guide/chat-profiles.html#incognito-mode).</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Read more in [User Guide](https://simplex.chat/docs/guide/readme.html#connect-to-friends)." xml:space="preserve">
@@ -4262,6 +4298,7 @@ Error: %@</source>
</trans-unit>
<trans-unit id="Retry" xml:space="preserve">
<source>Retry</source>
<target>Réessayer</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Reveal" xml:space="preserve">
@@ -4306,57 +4343,57 @@ Error: %@</source>
</trans-unit>
<trans-unit id="Save" xml:space="preserve">
<source>Save</source>
<target>Sauvegarder</target>
<target>Enregistrer</target>
<note>chat item action</note>
</trans-unit>
<trans-unit id="Save (and notify contacts)" xml:space="preserve">
<source>Save (and notify contacts)</source>
<target>Sauvegarder (et en informer les contacts)</target>
<target>Enregistrer (et en informer les contacts)</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Save and notify contact" xml:space="preserve">
<source>Save and notify contact</source>
<target>Sauvegarder et en informer les contacts</target>
<target>Enregistrer et en informer le contact</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Save and notify group members" xml:space="preserve">
<source>Save and notify group members</source>
<target>Sauvegarder et en informer les membres du groupe</target>
<target>Enregistrer et en informer les membres du groupe</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Save and update group profile" xml:space="preserve">
<source>Save and update group profile</source>
<target>Sauvegarder et mettre à jour le profil du groupe</target>
<target>Enregistrer et mettre à jour le profil du groupe</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Save archive" xml:space="preserve">
<source>Save archive</source>
<target>Sauvegarder l'archive</target>
<target>Enregistrer l'archive</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Save auto-accept settings" xml:space="preserve">
<source>Save auto-accept settings</source>
<target>Sauvegarder les paramètres d'acceptation automatique</target>
<target>Enregistrer les paramètres de validation automatique</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Save group profile" xml:space="preserve">
<source>Save group profile</source>
<target>Sauvegarder le profil du groupe</target>
<target>Enregistrer le profil du groupe</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Save passphrase and open chat" xml:space="preserve">
<source>Save passphrase and open chat</source>
<target>Sauvegarder la phrase secrète et ouvrir le chat</target>
<target>Enregistrer la phrase secrète et ouvrir le chat</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Save passphrase in Keychain" xml:space="preserve">
<source>Save passphrase in Keychain</source>
<target>Sauvegarder la phrase secrète dans la keychain</target>
<target>Enregistrer la phrase secrète dans la Keychain</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Save preferences?" xml:space="preserve">
<source>Save preferences?</source>
<target>Sauvegarder les préférences ?</target>
<target>Enregistrer les préférences?</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Save profile password" xml:space="preserve">
@@ -4366,22 +4403,22 @@ Error: %@</source>
</trans-unit>
<trans-unit id="Save servers" xml:space="preserve">
<source>Save servers</source>
<target>Sauvegarder les serveurs</target>
<target>Enregistrer les serveurs</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Save servers?" xml:space="preserve">
<source>Save servers?</source>
<target>Sauvegarder les serveurs ?</target>
<target>Enregistrer les serveurs?</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Save settings?" xml:space="preserve">
<source>Save settings?</source>
<target>Sauvegarder les paramètres ?</target>
<target>Enregistrer les paramètres?</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Save welcome message?" xml:space="preserve">
<source>Save welcome message?</source>
<target>Sauvegarder le message d'accueil ?</target>
<target>Enregistrer le message d'accueil?</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Saved WebRTC ICE servers will be removed" xml:space="preserve">
@@ -4396,7 +4433,7 @@ Error: %@</source>
</trans-unit>
<trans-unit id="Scan QR code from desktop" xml:space="preserve">
<source>Scan QR code from desktop</source>
<target>Scanner le code QR du bureau</target>
<target>Scannez le code QR du bureau</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Scan code" xml:space="preserve">
@@ -4416,11 +4453,12 @@ Error: %@</source>
</trans-unit>
<trans-unit id="Search" xml:space="preserve">
<source>Search</source>
<target>Recherche</target>
<target>Rechercher</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Search or paste SimpleX link" xml:space="preserve">
<source>Search or paste SimpleX link</source>
<target>Rechercher ou coller un lien SimpleX</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Secure queue" xml:space="preserve">
@@ -4520,7 +4558,7 @@ Error: %@</source>
</trans-unit>
<trans-unit id="Send receipts" xml:space="preserve">
<source>Send receipts</source>
<target>Envoyer les justificatifs</target>
<target>Envoi de justificatifs</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Send them from gallery or custom keyboards." xml:space="preserve">
@@ -4528,6 +4566,10 @@ Error: %@</source>
<target>Envoyez-les depuis la phototèque ou des claviers personnalisés.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Send up to 100 last messages to new members." xml:space="preserve">
<source>Send up to 100 last messages to new members.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Sender cancelled file transfer." xml:space="preserve">
<source>Sender cancelled file transfer.</source>
<target>L'expéditeur a annulé le transfert de fichiers.</target>
@@ -4700,6 +4742,7 @@ Error: %@</source>
</trans-unit>
<trans-unit id="Share this 1-time invite link" xml:space="preserve">
<source>Share this 1-time invite link</source>
<target>Partager ce lien d'invitation unique</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Share with contacts" xml:space="preserve">
@@ -4829,6 +4872,7 @@ Error: %@</source>
</trans-unit>
<trans-unit id="Start chat?" xml:space="preserve">
<source>Start chat?</source>
<target>Lancer le chat?</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Start migration" xml:space="preserve">
@@ -4958,10 +5002,12 @@ Error: %@</source>
</trans-unit>
<trans-unit id="Tap to paste link" xml:space="preserve">
<source>Tap to paste link</source>
<target>Appuyez pour coller le lien</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Tap to scan" xml:space="preserve">
<source>Tap to scan</source>
<target>Appuyez pour scanner</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Tap to start a new chat" xml:space="preserve">
@@ -5028,6 +5074,7 @@ Cela peut se produire en raison d'un bug ou lorsque la connexion est compromise.
</trans-unit>
<trans-unit id="The code you scanned is not a SimpleX link QR code." xml:space="preserve">
<source>The code you scanned is not a SimpleX link QR code.</source>
<target>Le code scanné n'est pas un code QR de lien SimpleX.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="The connection you accepted will be cancelled!" xml:space="preserve">
@@ -5097,6 +5144,7 @@ Cela peut se produire en raison d'un bug ou lorsque la connexion est compromise.
</trans-unit>
<trans-unit id="The text you pasted is not a SimpleX link." xml:space="preserve">
<source>The text you pasted is not a SimpleX link.</source>
<target>Le texte collé n'est pas un lien SimpleX.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Theme" xml:space="preserve">
@@ -5141,7 +5189,11 @@ Cela peut se produire en raison d'un bug ou lorsque la connexion est compromise.
</trans-unit>
<trans-unit id="This device name" xml:space="preserve">
<source>This device name</source>
<target>Ce nom d'appareil</target>
<target>Nom de cet appareil</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="This display name is invalid. Please choose another name." xml:space="preserve">
<source>This display name is invalid. Please choose another name.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="This group has over %lld members, delivery receipts are not sent." xml:space="preserve">
@@ -5368,6 +5420,10 @@ Pour vous connecter, veuillez demander à votre contact de créer un autre lien
<target>Non lu</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Up to 100 last messages are sent to new members." xml:space="preserve">
<source>Up to 100 last messages are sent to new members.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Update" xml:space="preserve">
<source>Update</source>
<target>Mise à jour</target>
@@ -5440,7 +5496,7 @@ Pour vous connecter, veuillez demander à votre contact de créer un autre lien
</trans-unit>
<trans-unit id="Use from desktop" xml:space="preserve">
<source>Use from desktop</source>
<target>Utilisation depuis le bureau</target>
<target>Accès au bureau</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Use iOS call interface" xml:space="preserve">
@@ -5455,6 +5511,7 @@ Pour vous connecter, veuillez demander à votre contact de créer un autre lien
</trans-unit>
<trans-unit id="Use only local notifications?" xml:space="preserve">
<source>Use only local notifications?</source>
<target>Utilisation de notifications locales uniquement?</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Use server" xml:space="preserve">
@@ -5537,6 +5594,10 @@ Pour vous connecter, veuillez demander à votre contact de créer un autre lien
<target>Afficher le code de sécurité</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Visible history" xml:space="preserve">
<source>Visible history</source>
<note>chat feature</note>
</trans-unit>
<trans-unit id="Voice messages" xml:space="preserve">
<source>Voice messages</source>
<target>Messages vocaux</target>
@@ -5741,6 +5802,7 @@ Répéter la demande d'adhésion ?</target>
</trans-unit>
<trans-unit id="You can make it visible to your SimpleX contacts via Settings." xml:space="preserve">
<source>You can make it visible to your SimpleX contacts via Settings.</source>
<target>Vous pouvez le rendre visible à vos contacts SimpleX via Paramètres.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="You can now send messages to %@" xml:space="preserve">
@@ -5785,6 +5847,7 @@ Répéter la demande d'adhésion ?</target>
</trans-unit>
<trans-unit id="You can view invitation link again in connection details." xml:space="preserve">
<source>You can view invitation link again in connection details.</source>
<target>Vous pouvez à nouveau consulter le lien d'invitation dans les détails de la connexion.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="You can't send messages!" xml:space="preserve">

View File

@@ -314,6 +314,7 @@
</trans-unit>
<trans-unit id="**Add contact**: to create a new invitation link, or connect via a link you received." xml:space="preserve">
<source>**Add contact**: to create a new invitation link, or connect via a link you received.</source>
<target>**Aggiungi contatto**: per creare un nuovo link di invito o connetterti tramite un link che hai ricevuto.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="**Add new contact**: to create your one-time QR Code for your contact." xml:space="preserve">
@@ -323,6 +324,7 @@
</trans-unit>
<trans-unit id="**Create group**: to create a new group." xml:space="preserve">
<source>**Create group**: to create a new group.</source>
<target>**Crea gruppo**: per creare un nuovo gruppo.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="**More private**: check new messages every 20 minutes. Device token is shared with SimpleX Chat server, but not how many contacts or messages you have." xml:space="preserve">
@@ -563,6 +565,7 @@
</trans-unit>
<trans-unit id="Add contact" xml:space="preserve">
<source>Add contact</source>
<target>Aggiungi contatto</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Add preset servers" xml:space="preserve">
@@ -670,9 +673,9 @@
<target>Consenti i messaggi a tempo solo se il contatto li consente a te.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Allow irreversible message deletion only if your contact allows it to you." xml:space="preserve">
<source>Allow irreversible message deletion only if your contact allows it to you.</source>
<target>Consenti l'eliminazione irreversibile dei messaggi solo se il contatto la consente a te.</target>
<trans-unit id="Allow irreversible message deletion only if your contact allows it to you. (24 hours)" xml:space="preserve">
<source>Allow irreversible message deletion only if your contact allows it to you. (24 hours)</source>
<target>Consenti l'eliminazione irreversibile dei messaggi solo se il contatto la consente a te. (24 ore)</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Allow message reactions only if your contact allows them." xml:space="preserve">
@@ -695,9 +698,9 @@
<target>Permetti l'invio di messaggi a tempo.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Allow to irreversibly delete sent messages." xml:space="preserve">
<source>Allow to irreversibly delete sent messages.</source>
<target>Permetti di eliminare irreversibilmente i messaggi inviati.</target>
<trans-unit id="Allow to irreversibly delete sent messages. (24 hours)" xml:space="preserve">
<source>Allow to irreversibly delete sent messages. (24 hours)</source>
<target>Permetti di eliminare irreversibilmente i messaggi inviati. (24 ore)</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Allow to send files and media." xml:space="preserve">
@@ -730,9 +733,9 @@
<target>Consenti ai tuoi contatti di chiamarti.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Allow your contacts to irreversibly delete sent messages." xml:space="preserve">
<source>Allow your contacts to irreversibly delete sent messages.</source>
<target>Permetti ai tuoi contatti di eliminare irreversibilmente i messaggi inviati.</target>
<trans-unit id="Allow your contacts to irreversibly delete sent messages. (24 hours)" xml:space="preserve">
<source>Allow your contacts to irreversibly delete sent messages. (24 hours)</source>
<target>Permetti ai tuoi contatti di eliminare irreversibilmente i messaggi inviati. (24 ore)</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Allow your contacts to send disappearing messages." xml:space="preserve">
@@ -930,9 +933,9 @@
<target>Sia tu che il tuo contatto potete aggiungere reazioni ai messaggi.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Both you and your contact can irreversibly delete sent messages." xml:space="preserve">
<source>Both you and your contact can irreversibly delete sent messages.</source>
<target>Sia tu che il tuo contatto potete eliminare irreversibilmente i messaggi inviati.</target>
<trans-unit id="Both you and your contact can irreversibly delete sent messages. (24 hours)" xml:space="preserve">
<source>Both you and your contact can irreversibly delete sent messages. (24 hours)</source>
<target>Sia tu che il tuo contatto potete eliminare irreversibilmente i messaggi inviati. (24 ore)</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Both you and your contact can make calls." xml:space="preserve">
@@ -972,6 +975,7 @@
</trans-unit>
<trans-unit id="Camera not available" xml:space="preserve">
<source>Camera not available</source>
<target>Fotocamera non disponibile</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Can't delete user profile!" xml:space="preserve">
@@ -1092,6 +1096,7 @@
</trans-unit>
<trans-unit id="Chat is stopped. If you already used this database on another device, you should transfer it back before starting chat." xml:space="preserve">
<source>Chat is stopped. If you already used this database on another device, you should transfer it back before starting chat.</source>
<target>La chat è ferma. Se hai già usato questo database su un altro dispositivo, dovresti trasferirlo prima di avviare la chat.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Chat preferences" xml:space="preserve">
@@ -1440,6 +1445,7 @@ Questo è il tuo link una tantum!</target>
</trans-unit>
<trans-unit id="Creating link…" xml:space="preserve">
<source>Creating link…</source>
<target>Creazione link…</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Current Passcode" xml:space="preserve">
@@ -1922,6 +1928,10 @@ Non è reversibile!</target>
<target>Fallo dopo</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Do not send history to new members." xml:space="preserve">
<source>Do not send history to new members.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Don't create address" xml:space="preserve">
<source>Don't create address</source>
<target>Non creare un indirizzo</target>
@@ -1994,6 +2004,7 @@ Non è reversibile!</target>
</trans-unit>
<trans-unit id="Enable camera access" xml:space="preserve">
<source>Enable camera access</source>
<target>Attiva l'accesso alla fotocamera</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Enable for all" xml:space="preserve">
@@ -2063,6 +2074,7 @@ Non è reversibile!</target>
</trans-unit>
<trans-unit id="Encrypted message: app is stopped" xml:space="preserve">
<source>Encrypted message: app is stopped</source>
<target>Messaggio cifrato: l'app è ferma</target>
<note>notification</note>
</trans-unit>
<trans-unit id="Encrypted message: database error" xml:space="preserve">
@@ -2297,6 +2309,7 @@ Non è reversibile!</target>
</trans-unit>
<trans-unit id="Error opening chat" xml:space="preserve">
<source>Error opening chat</source>
<target>Errore di apertura della chat</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error receiving file" xml:space="preserve">
@@ -2341,6 +2354,7 @@ Non è reversibile!</target>
</trans-unit>
<trans-unit id="Error scanning code: %@" xml:space="preserve">
<source>Error scanning code: %@</source>
<target>Errore di scansione del codice: %@</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error sending email" xml:space="preserve">
@@ -2673,9 +2687,9 @@ Non è reversibile!</target>
<target>I membri del gruppo possono aggiungere reazioni ai messaggi.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Group members can irreversibly delete sent messages." xml:space="preserve">
<source>Group members can irreversibly delete sent messages.</source>
<target>I membri del gruppo possono eliminare irreversibilmente i messaggi inviati.</target>
<trans-unit id="Group members can irreversibly delete sent messages. (24 hours)" xml:space="preserve">
<source>Group members can irreversibly delete sent messages. (24 hours)</source>
<target>I membri del gruppo possono eliminare irreversibilmente i messaggi inviati. (24 ore)</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Group members can send direct messages." xml:space="preserve">
@@ -2783,6 +2797,10 @@ Non è reversibile!</target>
<target>Cronologia</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="History is not sent to new members." xml:space="preserve">
<source>History is not sent to new members.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="How SimpleX works" xml:space="preserve">
<source>How SimpleX works</source>
<target>Come funziona SimpleX</target>
@@ -2977,6 +2995,7 @@ Non è reversibile!</target>
</trans-unit>
<trans-unit id="Invalid QR code" xml:space="preserve">
<source>Invalid QR code</source>
<target>Codice QR non valido</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Invalid connection link" xml:space="preserve">
@@ -2984,8 +3003,13 @@ Non è reversibile!</target>
<target>Link di connessione non valido</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Invalid display name!" xml:space="preserve">
<source>Invalid display name!</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Invalid link" xml:space="preserve">
<source>Invalid link</source>
<target>Link non valido</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Invalid name!" xml:space="preserve">
@@ -2995,6 +3019,7 @@ Non è reversibile!</target>
</trans-unit>
<trans-unit id="Invalid response" xml:space="preserve">
<source>Invalid response</source>
<target>Risposta non valida</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Invalid server address!" xml:space="preserve">
@@ -3117,6 +3142,7 @@ Questo è il tuo link per il gruppo %@!</target>
</trans-unit>
<trans-unit id="Keep" xml:space="preserve">
<source>Keep</source>
<target>Tieni</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Keep the app open to use it from desktop" xml:space="preserve">
@@ -3126,6 +3152,7 @@ Questo è il tuo link per il gruppo %@!</target>
</trans-unit>
<trans-unit id="Keep unused invitation?" xml:space="preserve">
<source>Keep unused invitation?</source>
<target>Tenere l'invito inutilizzato?</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Keep your connections" xml:space="preserve">
@@ -3460,6 +3487,7 @@ Questo è il tuo link per il gruppo %@!</target>
</trans-unit>
<trans-unit id="New chat" xml:space="preserve">
<source>New chat</source>
<target>Nuova chat</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="New contact request" xml:space="preserve">
@@ -3588,6 +3616,7 @@ Questo è il tuo link per il gruppo %@!</target>
</trans-unit>
<trans-unit id="OK" xml:space="preserve">
<source>OK</source>
<target>OK</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Off" xml:space="preserve">
@@ -3655,9 +3684,9 @@ Questo è il tuo link per il gruppo %@!</target>
<target>Solo tu puoi aggiungere reazioni ai messaggi.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Only you can irreversibly delete messages (your contact can mark them for deletion)." xml:space="preserve">
<source>Only you can irreversibly delete messages (your contact can mark them for deletion).</source>
<target>Solo tu puoi eliminare irreversibilmente i messaggi (il tuo contatto può contrassegnarli per l'eliminazione).</target>
<trans-unit id="Only you can irreversibly delete messages (your contact can mark them for deletion). (24 hours)" xml:space="preserve">
<source>Only you can irreversibly delete messages (your contact can mark them for deletion). (24 hours)</source>
<target>Solo tu puoi eliminare irreversibilmente i messaggi (il tuo contatto può contrassegnarli per l'eliminazione). (24 ore)</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Only you can make calls." xml:space="preserve">
@@ -3680,9 +3709,9 @@ Questo è il tuo link per il gruppo %@!</target>
<target>Solo il tuo contatto può aggiungere reazioni ai messaggi.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Only your contact can irreversibly delete messages (you can mark them for deletion)." xml:space="preserve">
<source>Only your contact can irreversibly delete messages (you can mark them for deletion).</source>
<target>Solo il tuo contatto può eliminare irreversibilmente i messaggi (tu puoi contrassegnarli per l'eliminazione).</target>
<trans-unit id="Only your contact can irreversibly delete messages (you can mark them for deletion). (24 hours)" xml:space="preserve">
<source>Only your contact can irreversibly delete messages (you can mark them for deletion). (24 hours)</source>
<target>Solo il tuo contatto può eliminare irreversibilmente i messaggi (tu puoi contrassegnarli per l'eliminazione). (24 ore)</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Only your contact can make calls." xml:space="preserve">
@@ -3737,14 +3766,17 @@ Questo è il tuo link per il gruppo %@!</target>
</trans-unit>
<trans-unit id="Opening app…" xml:space="preserve">
<source>Opening app…</source>
<target>Apertura dell'app…</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Or scan QR code" xml:space="preserve">
<source>Or scan QR code</source>
<target>O scansiona il codice QR</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Or show this code" xml:space="preserve">
<source>Or show this code</source>
<target>O mostra questo codice</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="PING count" xml:space="preserve">
@@ -3799,6 +3831,7 @@ Questo è il tuo link per il gruppo %@!</target>
</trans-unit>
<trans-unit id="Paste the link you received" xml:space="preserve">
<source>Paste the link you received</source>
<target>Incolla il link che hai ricevuto</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="People can connect to you only via the links you share." xml:space="preserve">
@@ -3839,6 +3872,8 @@ Questo è il tuo link per il gruppo %@!</target>
<trans-unit id="Please contact developers.&#10;Error: %@" xml:space="preserve">
<source>Please contact developers.
Error: %@</source>
<target>Contatta gli sviluppatori.
Errore: %@</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Please contact group admin." xml:space="preserve">
@@ -4048,6 +4083,7 @@ Error: %@</source>
</trans-unit>
<trans-unit id="Read more in [User Guide](https://simplex.chat/docs/guide/chat-profiles.html#incognito-mode)." xml:space="preserve">
<source>Read more in [User Guide](https://simplex.chat/docs/guide/chat-profiles.html#incognito-mode).</source>
<target>Leggi di più nella [Guida utente](https://simplex.chat/docs/guide/chat-profiles.html#incognito-mode).</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Read more in [User Guide](https://simplex.chat/docs/guide/readme.html#connect-to-friends)." xml:space="preserve">
@@ -4262,6 +4298,7 @@ Error: %@</source>
</trans-unit>
<trans-unit id="Retry" xml:space="preserve">
<source>Retry</source>
<target>Riprova</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Reveal" xml:space="preserve">
@@ -4421,6 +4458,7 @@ Error: %@</source>
</trans-unit>
<trans-unit id="Search or paste SimpleX link" xml:space="preserve">
<source>Search or paste SimpleX link</source>
<target>Cerca o incolla un link SimpleX</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Secure queue" xml:space="preserve">
@@ -4528,6 +4566,10 @@ Error: %@</source>
<target>Inviali dalla galleria o dalle tastiere personalizzate.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Send up to 100 last messages to new members." xml:space="preserve">
<source>Send up to 100 last messages to new members.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Sender cancelled file transfer." xml:space="preserve">
<source>Sender cancelled file transfer.</source>
<target>Il mittente ha annullato il trasferimento del file.</target>
@@ -4700,6 +4742,7 @@ Error: %@</source>
</trans-unit>
<trans-unit id="Share this 1-time invite link" xml:space="preserve">
<source>Share this 1-time invite link</source>
<target>Condividi questo link di invito una tantum</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Share with contacts" xml:space="preserve">
@@ -4829,6 +4872,7 @@ Error: %@</source>
</trans-unit>
<trans-unit id="Start chat?" xml:space="preserve">
<source>Start chat?</source>
<target>Avviare la chat?</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Start migration" xml:space="preserve">
@@ -4958,10 +5002,12 @@ Error: %@</source>
</trans-unit>
<trans-unit id="Tap to paste link" xml:space="preserve">
<source>Tap to paste link</source>
<target>Tocca per incollare il link</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Tap to scan" xml:space="preserve">
<source>Tap to scan</source>
<target>Tocca per scansionare</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Tap to start a new chat" xml:space="preserve">
@@ -5028,6 +5074,7 @@ Può accadere a causa di qualche bug o quando la connessione è compromessa.</ta
</trans-unit>
<trans-unit id="The code you scanned is not a SimpleX link QR code." xml:space="preserve">
<source>The code you scanned is not a SimpleX link QR code.</source>
<target>Il codice che hai scansionato non è un codice QR di link SimpleX.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="The connection you accepted will be cancelled!" xml:space="preserve">
@@ -5097,6 +5144,7 @@ Può accadere a causa di qualche bug o quando la connessione è compromessa.</ta
</trans-unit>
<trans-unit id="The text you pasted is not a SimpleX link." xml:space="preserve">
<source>The text you pasted is not a SimpleX link.</source>
<target>Il testo che hai incollato non è un link SimpleX.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Theme" xml:space="preserve">
@@ -5144,6 +5192,10 @@ Può accadere a causa di qualche bug o quando la connessione è compromessa.</ta
<target>Il nome di questo dispositivo</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="This display name is invalid. Please choose another name." xml:space="preserve">
<source>This display name is invalid. Please choose another name.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="This group has over %lld members, delivery receipts are not sent." xml:space="preserve">
<source>This group has over %lld members, delivery receipts are not sent.</source>
<target>Questo gruppo ha più di %lld membri, le ricevute di consegna non vengono inviate.</target>
@@ -5368,6 +5420,10 @@ Per connetterti, chiedi al tuo contatto di creare un altro link di connessione e
<target>Non letto</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Up to 100 last messages are sent to new members." xml:space="preserve">
<source>Up to 100 last messages are sent to new members.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Update" xml:space="preserve">
<source>Update</source>
<target>Aggiorna</target>
@@ -5455,6 +5511,7 @@ Per connetterti, chiedi al tuo contatto di creare un altro link di connessione e
</trans-unit>
<trans-unit id="Use only local notifications?" xml:space="preserve">
<source>Use only local notifications?</source>
<target>Usare solo notifiche locali?</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Use server" xml:space="preserve">
@@ -5537,6 +5594,10 @@ Per connetterti, chiedi al tuo contatto di creare un altro link di connessione e
<target>Vedi codice di sicurezza</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Visible history" xml:space="preserve">
<source>Visible history</source>
<note>chat feature</note>
</trans-unit>
<trans-unit id="Voice messages" xml:space="preserve">
<source>Voice messages</source>
<target>Messaggi vocali</target>
@@ -5741,6 +5802,7 @@ Ripetere la richiesta di ingresso?</target>
</trans-unit>
<trans-unit id="You can make it visible to your SimpleX contacts via Settings." xml:space="preserve">
<source>You can make it visible to your SimpleX contacts via Settings.</source>
<target>Puoi renderlo visibile ai tuoi contatti SimpleX nelle impostazioni.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="You can now send messages to %@" xml:space="preserve">
@@ -5785,6 +5847,7 @@ Ripetere la richiesta di ingresso?</target>
</trans-unit>
<trans-unit id="You can view invitation link again in connection details." xml:space="preserve">
<source>You can view invitation link again in connection details.</source>
<target>Puoi vedere di nuovo il link di invito nei dettagli di connessione.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="You can't send messages!" xml:space="preserve">

View File

@@ -346,17 +346,17 @@
</trans-unit>
<trans-unit id="**e2e encrypted** audio call" xml:space="preserve">
<source>**e2e encrypted** audio call</source>
<target>**e2e 暗号化**された音声通話</target>
<target>**e2e 暗号化**音声通話</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="**e2e encrypted** video call" xml:space="preserve">
<source>**e2e encrypted** video call</source>
<target>**エンドツーエンド暗号化済み**ビデオ通話</target>
<target>**e2e暗号化**ビデオ通話</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="*bold*" xml:space="preserve">
<source>\*bold*</source>
<target>\*太字*</target>
<target>\*太字*</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id=", " xml:space="preserve">
@@ -530,7 +530,7 @@
</trans-unit>
<trans-unit id="Accept connection request?" xml:space="preserve">
<source>Accept connection request?</source>
<target>連絡を受け入れる</target>
<target>接続要求を承認?</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Accept contact request from %@?" xml:space="preserve">
@@ -638,7 +638,7 @@
</trans-unit>
<trans-unit id="All your contacts will remain connected. Profile update will be sent to your contacts." xml:space="preserve">
<source>All your contacts will remain connected. Profile update will be sent to your contacts.</source>
<target>あなたの連絡先が繋がったまま継続します。</target>
<target>すべての連絡先は維持されます。連絡先に更新されたプロフィールを送信します。</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Allow" xml:space="preserve">
@@ -656,8 +656,8 @@
<target>連絡先が許可している場合のみ消えるメッセージを許可する。</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Allow irreversible message deletion only if your contact allows it to you." xml:space="preserve">
<source>Allow irreversible message deletion only if your contact allows it to you.</source>
<trans-unit id="Allow irreversible message deletion only if your contact allows it to you. (24 hours)" xml:space="preserve">
<source>Allow irreversible message deletion only if your contact allows it to you. (24 hours)</source>
<target>送信相手も永久メッセージ削除を許可する時のみに許可する。</target>
<note>No comment provided by engineer.</note>
</trans-unit>
@@ -681,8 +681,8 @@
<target>消えるメッセージの送信を許可する。</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Allow to irreversibly delete sent messages." xml:space="preserve">
<source>Allow to irreversibly delete sent messages.</source>
<trans-unit id="Allow to irreversibly delete sent messages. (24 hours)" xml:space="preserve">
<source>Allow to irreversibly delete sent messages. (24 hours)</source>
<target>送信済みメッセージの永久削除を許可する。</target>
<note>No comment provided by engineer.</note>
</trans-unit>
@@ -716,8 +716,8 @@
<target>連絡先からの通話を許可する。</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Allow your contacts to irreversibly delete sent messages." xml:space="preserve">
<source>Allow your contacts to irreversibly delete sent messages.</source>
<trans-unit id="Allow your contacts to irreversibly delete sent messages. (24 hours)" xml:space="preserve">
<source>Allow your contacts to irreversibly delete sent messages. (24 hours)</source>
<target>送信相手が永久メッセージ削除するのを許可する。</target>
<note>No comment provided by engineer.</note>
</trans-unit>
@@ -908,8 +908,8 @@
<target>自分も相手もメッセージへのリアクションを追加できます。</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Both you and your contact can irreversibly delete sent messages." xml:space="preserve">
<source>Both you and your contact can irreversibly delete sent messages.</source>
<trans-unit id="Both you and your contact can irreversibly delete sent messages. (24 hours)" xml:space="preserve">
<source>Both you and your contact can irreversibly delete sent messages. (24 hours)</source>
<target>あなたと連絡相手が送信済みメッセージを永久削除できます。</target>
<note>No comment provided by engineer.</note>
</trans-unit>
@@ -1210,7 +1210,7 @@ This is your own one-time link!</source>
</trans-unit>
<trans-unit id="Connect via one-time link" xml:space="preserve">
<source>Connect via one-time link</source>
<target>使い捨てリンク経由で接続しますか?</target>
<target>ワンタイムリンクで接続</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Connect with %@" xml:space="preserve">
@@ -1731,12 +1731,12 @@ This cannot be undone!</source>
</trans-unit>
<trans-unit id="Delivery" xml:space="preserve">
<source>Delivery</source>
<target>Delivery</target>
<target>配信</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Delivery receipts are disabled!" xml:space="preserve">
<source>Delivery receipts are disabled!</source>
<target>Delivery receipts are disabled!</target>
<target>配信通知の停止!</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Delivery receipts!" xml:space="preserve">
@@ -1874,6 +1874,10 @@ This cannot be undone!</source>
<target>後で行う</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Do not send history to new members." xml:space="preserve">
<source>Do not send history to new members.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Don't create address" xml:space="preserve">
<source>Don't create address</source>
<target>アドレスを作成しないでください</target>
@@ -2612,8 +2616,8 @@ This cannot be undone!</source>
<target>グループメンバーはメッセージへのリアクションを追加できます。</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Group members can irreversibly delete sent messages." xml:space="preserve">
<source>Group members can irreversibly delete sent messages.</source>
<trans-unit id="Group members can irreversibly delete sent messages. (24 hours)" xml:space="preserve">
<source>Group members can irreversibly delete sent messages. (24 hours)</source>
<target>グループのメンバーがメッセージを完全削除することができます。</target>
<note>No comment provided by engineer.</note>
</trans-unit>
@@ -2722,6 +2726,10 @@ This cannot be undone!</source>
<target>履歴</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="History is not sent to new members." xml:space="preserve">
<source>History is not sent to new members.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="How SimpleX works" xml:space="preserve">
<source>How SimpleX works</source>
<target>SimpleX の仕組み</target>
@@ -2921,6 +2929,10 @@ This cannot be undone!</source>
<target>無効な接続リンク</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Invalid display name!" xml:space="preserve">
<source>Invalid display name!</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Invalid link" xml:space="preserve">
<source>Invalid link</source>
<note>No comment provided by engineer.</note>
@@ -3580,8 +3592,8 @@ This is your link for group %@!</source>
<target>メッセージへのリアクションを追加できるのは、あなただけです。</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Only you can irreversibly delete messages (your contact can mark them for deletion)." xml:space="preserve">
<source>Only you can irreversibly delete messages (your contact can mark them for deletion).</source>
<trans-unit id="Only you can irreversibly delete messages (your contact can mark them for deletion). (24 hours)" xml:space="preserve">
<source>Only you can irreversibly delete messages (your contact can mark them for deletion). (24 hours)</source>
<target>メッセージの完全削除はあなたにしかできません (あなたの連絡先は削除対象とすることができます)。</target>
<note>No comment provided by engineer.</note>
</trans-unit>
@@ -3605,8 +3617,8 @@ This is your link for group %@!</source>
<target>メッセージへのリアクションを追加できるのは連絡先だけです。</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Only your contact can irreversibly delete messages (you can mark them for deletion)." xml:space="preserve">
<source>Only your contact can irreversibly delete messages (you can mark them for deletion).</source>
<trans-unit id="Only your contact can irreversibly delete messages (you can mark them for deletion). (24 hours)" xml:space="preserve">
<source>Only your contact can irreversibly delete messages (you can mark them for deletion). (24 hours)</source>
<target>メッセージを完全削除できるのはあなたの連絡相手だけです (あなたは削除対象とすることができます)。</target>
<note>No comment provided by engineer.</note>
</trans-unit>
@@ -4443,6 +4455,10 @@ Error: %@</source>
<target>ギャラリーまたはカスタム キーボードから送信します。</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Send up to 100 last messages to new members." xml:space="preserve">
<source>Send up to 100 last messages to new members.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Sender cancelled file transfer." xml:space="preserve">
<source>Sender cancelled file transfer.</source>
<target>送信者がファイル転送をキャンセルしました。</target>
@@ -5050,6 +5066,10 @@ It can happen because of some bug or when the connection is compromised.</source
<source>This device name</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="This display name is invalid. Please choose another name." xml:space="preserve">
<source>This display name is invalid. Please choose another name.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="This group has over %lld members, delivery receipts are not sent." xml:space="preserve">
<source>This group has over %lld members, delivery receipts are not sent.</source>
<note>No comment provided by engineer.</note>
@@ -5264,6 +5284,10 @@ To connect, please ask your contact to create another connection link and check
<target>未読</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Up to 100 last messages are sent to new members." xml:space="preserve">
<source>Up to 100 last messages are sent to new members.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Update" xml:space="preserve">
<source>Update</source>
<target>更新</target>
@@ -5428,6 +5452,10 @@ To connect, please ask your contact to create another connection link and check
<target>セキュリティコードを確認</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Visible history" xml:space="preserve">
<source>Visible history</source>
<note>chat feature</note>
</trans-unit>
<trans-unit id="Voice messages" xml:space="preserve">
<source>Voice messages</source>
<target>音声メッセージ</target>
@@ -6698,12 +6726,12 @@ SimpleX サーバーはあなたのプロファイルを参照できません。
</trans-unit>
<trans-unit id="NSCameraUsageDescription" xml:space="preserve">
<source>SimpleX needs camera access to scan QR codes to connect to other users and for video calls.</source>
<target>SimpleX は、他のユーザーに接続したりビデオ通話を行うために QR コードをスキャンするためにカメラにアクセスする必要があります。</target>
<target>SimpleX他のユーザーに接続したりビデオ通話する際にQRコード読み取りのためにカメラにアクセスする必要があります。</target>
<note>Privacy - Camera Usage Description</note>
</trans-unit>
<trans-unit id="NSFaceIDUsageDescription" xml:space="preserve">
<source>SimpleX uses Face ID for local authentication</source>
<target>SimpleX はローカル認証に Face ID を使用します</target>
<target>SimpleXはローカル認証にFace IDを使用します</target>
<note>Privacy - Face ID Usage Description</note>
</trans-unit>
<trans-unit id="NSLocalNetworkUsageDescription" xml:space="preserve">
@@ -6712,12 +6740,12 @@ SimpleX サーバーはあなたのプロファイルを参照できません。
</trans-unit>
<trans-unit id="NSMicrophoneUsageDescription" xml:space="preserve">
<source>SimpleX needs microphone access for audio and video calls, and to record voice messages.</source>
<target>SimpleX では、音声通話やビデオ通話および音声メッセージの録音のためにマイクへのアクセスが必要です。</target>
<target>SimpleX音声通話やビデオ通話および音声メッセージの録音のためにマイクアクセスする必要があります。</target>
<note>Privacy - Microphone Usage Description</note>
</trans-unit>
<trans-unit id="NSPhotoLibraryAddUsageDescription" xml:space="preserve">
<source>SimpleX needs access to Photo Library for saving captured and received media</source>
<target>SimpleX は、キャプチャおよび受信したメディアを保存するためにフォト ライブラリにアクセスする必要があります</target>
<target>SimpleXキャプチャおよび受信したメディアを保存するためにフォトライブラリにアクセスする必要があります</target>
<note>Privacy - Photo Library Additions Usage Description</note>
</trans-unit>
</body>

View File

@@ -314,6 +314,7 @@
</trans-unit>
<trans-unit id="**Add contact**: to create a new invitation link, or connect via a link you received." xml:space="preserve">
<source>**Add contact**: to create a new invitation link, or connect via a link you received.</source>
<target>**Contact toevoegen**: om een nieuwe uitnodigingslink aan te maken, of verbinding te maken via een link die u heeft ontvangen.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="**Add new contact**: to create your one-time QR Code for your contact." xml:space="preserve">
@@ -323,6 +324,7 @@
</trans-unit>
<trans-unit id="**Create group**: to create a new group." xml:space="preserve">
<source>**Create group**: to create a new group.</source>
<target>**Groep aanmaken**: om een nieuwe groep aan te maken.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="**More private**: check new messages every 20 minutes. Device token is shared with SimpleX Chat server, but not how many contacts or messages you have." xml:space="preserve">
@@ -563,6 +565,7 @@
</trans-unit>
<trans-unit id="Add contact" xml:space="preserve">
<source>Add contact</source>
<target>Contact toevoegen</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Add preset servers" xml:space="preserve">
@@ -670,9 +673,9 @@
<target>Sta verdwijnende berichten alleen toe als uw contact dit toestaat.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Allow irreversible message deletion only if your contact allows it to you." xml:space="preserve">
<source>Allow irreversible message deletion only if your contact allows it to you.</source>
<target>Sta het onomkeerbaar verwijderen van berichten alleen toe als uw contact dit toestaat.</target>
<trans-unit id="Allow irreversible message deletion only if your contact allows it to you. (24 hours)" xml:space="preserve">
<source>Allow irreversible message deletion only if your contact allows it to you. (24 hours)</source>
<target>Sta het onomkeerbaar verwijderen van berichten alleen toe als uw contact dit toestaat. (24 uur)</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Allow message reactions only if your contact allows them." xml:space="preserve">
@@ -695,9 +698,9 @@
<target>Toestaan dat verdwijnende berichten worden verzonden.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Allow to irreversibly delete sent messages." xml:space="preserve">
<source>Allow to irreversibly delete sent messages.</source>
<target>Sta toe om verzonden berichten onomkeerbaar te verwijderen.</target>
<trans-unit id="Allow to irreversibly delete sent messages. (24 hours)" xml:space="preserve">
<source>Allow to irreversibly delete sent messages. (24 hours)</source>
<target>Sta toe om verzonden berichten onomkeerbaar te verwijderen. (24 uur)</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Allow to send files and media." xml:space="preserve">
@@ -730,9 +733,9 @@
<target>Sta toe dat uw contacten u bellen.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Allow your contacts to irreversibly delete sent messages." xml:space="preserve">
<source>Allow your contacts to irreversibly delete sent messages.</source>
<target>Laat uw contacten verzonden berichten onomkeerbaar verwijderen.</target>
<trans-unit id="Allow your contacts to irreversibly delete sent messages. (24 hours)" xml:space="preserve">
<source>Allow your contacts to irreversibly delete sent messages. (24 hours)</source>
<target>Laat uw contacten verzonden berichten onomkeerbaar verwijderen. (24 uur)</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Allow your contacts to send disappearing messages." xml:space="preserve">
@@ -930,9 +933,9 @@
<target>Zowel u als uw contact kunnen berichtreacties toevoegen.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Both you and your contact can irreversibly delete sent messages." xml:space="preserve">
<source>Both you and your contact can irreversibly delete sent messages.</source>
<target>Zowel jij als je contact kunnen verzonden berichten onherroepelijk verwijderen.</target>
<trans-unit id="Both you and your contact can irreversibly delete sent messages. (24 hours)" xml:space="preserve">
<source>Both you and your contact can irreversibly delete sent messages. (24 hours)</source>
<target>Zowel jij als je contact kunnen verzonden berichten onherroepelijk verwijderen. (24 uur)</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Both you and your contact can make calls." xml:space="preserve">
@@ -972,6 +975,7 @@
</trans-unit>
<trans-unit id="Camera not available" xml:space="preserve">
<source>Camera not available</source>
<target>Camera niet beschikbaar</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Can't delete user profile!" xml:space="preserve">
@@ -1092,6 +1096,7 @@
</trans-unit>
<trans-unit id="Chat is stopped. If you already used this database on another device, you should transfer it back before starting chat." xml:space="preserve">
<source>Chat is stopped. If you already used this database on another device, you should transfer it back before starting chat.</source>
<target>Chat is gestopt. Als je deze database al op een ander apparaat hebt gebruikt, moet je deze terugzetten voordat je met chatten begint.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Chat preferences" xml:space="preserve">
@@ -1440,6 +1445,7 @@ Dit is uw eigen eenmalige link!</target>
</trans-unit>
<trans-unit id="Creating link…" xml:space="preserve">
<source>Creating link…</source>
<target>Link maken…</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Current Passcode" xml:space="preserve">
@@ -1922,6 +1928,10 @@ Dit kan niet ongedaan gemaakt worden!</target>
<target>Doe het later</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Do not send history to new members." xml:space="preserve">
<source>Do not send history to new members.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Don't create address" xml:space="preserve">
<source>Don't create address</source>
<target>Maak geen adres aan</target>
@@ -1994,6 +2004,7 @@ Dit kan niet ongedaan gemaakt worden!</target>
</trans-unit>
<trans-unit id="Enable camera access" xml:space="preserve">
<source>Enable camera access</source>
<target>Schakel cameratoegang in</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Enable for all" xml:space="preserve">
@@ -2063,6 +2074,7 @@ Dit kan niet ongedaan gemaakt worden!</target>
</trans-unit>
<trans-unit id="Encrypted message: app is stopped" xml:space="preserve">
<source>Encrypted message: app is stopped</source>
<target>Versleuteld bericht: app is gestopt</target>
<note>notification</note>
</trans-unit>
<trans-unit id="Encrypted message: database error" xml:space="preserve">
@@ -2297,6 +2309,7 @@ Dit kan niet ongedaan gemaakt worden!</target>
</trans-unit>
<trans-unit id="Error opening chat" xml:space="preserve">
<source>Error opening chat</source>
<target>Fout bij het openen van de chat</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error receiving file" xml:space="preserve">
@@ -2341,6 +2354,7 @@ Dit kan niet ongedaan gemaakt worden!</target>
</trans-unit>
<trans-unit id="Error scanning code: %@" xml:space="preserve">
<source>Error scanning code: %@</source>
<target>Fout bij het scannen van code: %@</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error sending email" xml:space="preserve">
@@ -2673,9 +2687,9 @@ Dit kan niet ongedaan gemaakt worden!</target>
<target>Groepsleden kunnen berichtreacties toevoegen.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Group members can irreversibly delete sent messages." xml:space="preserve">
<source>Group members can irreversibly delete sent messages.</source>
<target>Groepsleden kunnen verzonden berichten onherroepelijk verwijderen.</target>
<trans-unit id="Group members can irreversibly delete sent messages. (24 hours)" xml:space="preserve">
<source>Group members can irreversibly delete sent messages. (24 hours)</source>
<target>Groepsleden kunnen verzonden berichten onherroepelijk verwijderen. (24 uur)</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Group members can send direct messages." xml:space="preserve">
@@ -2783,6 +2797,10 @@ Dit kan niet ongedaan gemaakt worden!</target>
<target>Geschiedenis</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="History is not sent to new members." xml:space="preserve">
<source>History is not sent to new members.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="How SimpleX works" xml:space="preserve">
<source>How SimpleX works</source>
<target>Hoe SimpleX werkt</target>
@@ -2977,6 +2995,7 @@ Dit kan niet ongedaan gemaakt worden!</target>
</trans-unit>
<trans-unit id="Invalid QR code" xml:space="preserve">
<source>Invalid QR code</source>
<target>Ongeldige QR-code</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Invalid connection link" xml:space="preserve">
@@ -2984,8 +3003,13 @@ Dit kan niet ongedaan gemaakt worden!</target>
<target>Ongeldige verbinding link</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Invalid display name!" xml:space="preserve">
<source>Invalid display name!</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Invalid link" xml:space="preserve">
<source>Invalid link</source>
<target>Ongeldige link</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Invalid name!" xml:space="preserve">
@@ -2995,6 +3019,7 @@ Dit kan niet ongedaan gemaakt worden!</target>
</trans-unit>
<trans-unit id="Invalid response" xml:space="preserve">
<source>Invalid response</source>
<target>Ongeldig antwoord</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Invalid server address!" xml:space="preserve">
@@ -3117,6 +3142,7 @@ Dit is jouw link voor groep %@!</target>
</trans-unit>
<trans-unit id="Keep" xml:space="preserve">
<source>Keep</source>
<target>Bewaar</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Keep the app open to use it from desktop" xml:space="preserve">
@@ -3126,6 +3152,7 @@ Dit is jouw link voor groep %@!</target>
</trans-unit>
<trans-unit id="Keep unused invitation?" xml:space="preserve">
<source>Keep unused invitation?</source>
<target>Ongebruikte uitnodiging bewaren?</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Keep your connections" xml:space="preserve">
@@ -3460,6 +3487,7 @@ Dit is jouw link voor groep %@!</target>
</trans-unit>
<trans-unit id="New chat" xml:space="preserve">
<source>New chat</source>
<target>Nieuw gesprek</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="New contact request" xml:space="preserve">
@@ -3588,6 +3616,7 @@ Dit is jouw link voor groep %@!</target>
</trans-unit>
<trans-unit id="OK" xml:space="preserve">
<source>OK</source>
<target>OK</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Off" xml:space="preserve">
@@ -3655,9 +3684,9 @@ Dit is jouw link voor groep %@!</target>
<target>Alleen jij kunt berichtreacties toevoegen.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Only you can irreversibly delete messages (your contact can mark them for deletion)." xml:space="preserve">
<source>Only you can irreversibly delete messages (your contact can mark them for deletion).</source>
<target>Alleen jij kunt berichten onomkeerbaar verwijderen (je contact kan ze markeren voor verwijdering).</target>
<trans-unit id="Only you can irreversibly delete messages (your contact can mark them for deletion). (24 hours)" xml:space="preserve">
<source>Only you can irreversibly delete messages (your contact can mark them for deletion). (24 hours)</source>
<target>Alleen jij kunt berichten onomkeerbaar verwijderen (je contact kan ze markeren voor verwijdering). (24 uur)</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Only you can make calls." xml:space="preserve">
@@ -3680,9 +3709,9 @@ Dit is jouw link voor groep %@!</target>
<target>Alleen uw contact kan berichtreacties toevoegen.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Only your contact can irreversibly delete messages (you can mark them for deletion)." xml:space="preserve">
<source>Only your contact can irreversibly delete messages (you can mark them for deletion).</source>
<target>Alleen uw contact kan berichten onherroepelijk verwijderen (u kunt ze markeren voor verwijdering).</target>
<trans-unit id="Only your contact can irreversibly delete messages (you can mark them for deletion). (24 hours)" xml:space="preserve">
<source>Only your contact can irreversibly delete messages (you can mark them for deletion). (24 hours)</source>
<target>Alleen uw contact kan berichten onherroepelijk verwijderen (u kunt ze markeren voor verwijdering). (24 uur)</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Only your contact can make calls." xml:space="preserve">
@@ -3737,14 +3766,17 @@ Dit is jouw link voor groep %@!</target>
</trans-unit>
<trans-unit id="Opening app…" xml:space="preserve">
<source>Opening app…</source>
<target>App openen…</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Or scan QR code" xml:space="preserve">
<source>Or scan QR code</source>
<target>Of scan de QR-code</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Or show this code" xml:space="preserve">
<source>Or show this code</source>
<target>Of laat deze code zien</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="PING count" xml:space="preserve">
@@ -3799,6 +3831,7 @@ Dit is jouw link voor groep %@!</target>
</trans-unit>
<trans-unit id="Paste the link you received" xml:space="preserve">
<source>Paste the link you received</source>
<target>Plak de link die je hebt ontvangen</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="People can connect to you only via the links you share." xml:space="preserve">
@@ -3839,6 +3872,8 @@ Dit is jouw link voor groep %@!</target>
<trans-unit id="Please contact developers.&#10;Error: %@" xml:space="preserve">
<source>Please contact developers.
Error: %@</source>
<target>Neem contact op met ontwikkelaars.
Fout: %@</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Please contact group admin." xml:space="preserve">
@@ -4048,6 +4083,7 @@ Error: %@</source>
</trans-unit>
<trans-unit id="Read more in [User Guide](https://simplex.chat/docs/guide/chat-profiles.html#incognito-mode)." xml:space="preserve">
<source>Read more in [User Guide](https://simplex.chat/docs/guide/chat-profiles.html#incognito-mode).</source>
<target>Lees meer in de [Gebruikershandleiding](https://simplex.chat/docs/guide/chat-profiles.html#incognito-mode).</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Read more in [User Guide](https://simplex.chat/docs/guide/readme.html#connect-to-friends)." xml:space="preserve">
@@ -4262,6 +4298,7 @@ Error: %@</source>
</trans-unit>
<trans-unit id="Retry" xml:space="preserve">
<source>Retry</source>
<target>Opnieuw proberen</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Reveal" xml:space="preserve">
@@ -4421,6 +4458,7 @@ Error: %@</source>
</trans-unit>
<trans-unit id="Search or paste SimpleX link" xml:space="preserve">
<source>Search or paste SimpleX link</source>
<target>Zoek of plak de SimpleX link</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Secure queue" xml:space="preserve">
@@ -4528,6 +4566,10 @@ Error: %@</source>
<target>Stuur ze vanuit de galerij of aangepaste toetsenborden.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Send up to 100 last messages to new members." xml:space="preserve">
<source>Send up to 100 last messages to new members.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Sender cancelled file transfer." xml:space="preserve">
<source>Sender cancelled file transfer.</source>
<target>Afzender heeft bestandsoverdracht geannuleerd.</target>
@@ -4700,6 +4742,7 @@ Error: %@</source>
</trans-unit>
<trans-unit id="Share this 1-time invite link" xml:space="preserve">
<source>Share this 1-time invite link</source>
<target>Deel deze eenmalige uitnodigingslink</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Share with contacts" xml:space="preserve">
@@ -4829,6 +4872,7 @@ Error: %@</source>
</trans-unit>
<trans-unit id="Start chat?" xml:space="preserve">
<source>Start chat?</source>
<target>Begin chat?</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Start migration" xml:space="preserve">
@@ -4958,10 +5002,12 @@ Error: %@</source>
</trans-unit>
<trans-unit id="Tap to paste link" xml:space="preserve">
<source>Tap to paste link</source>
<target>Tik om de link te plakken</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Tap to scan" xml:space="preserve">
<source>Tap to scan</source>
<target>Tik om te scannen</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Tap to start a new chat" xml:space="preserve">
@@ -5028,6 +5074,7 @@ Het kan gebeuren vanwege een bug of wanneer de verbinding is aangetast.</target>
</trans-unit>
<trans-unit id="The code you scanned is not a SimpleX link QR code." xml:space="preserve">
<source>The code you scanned is not a SimpleX link QR code.</source>
<target>De code die u heeft gescand is geen SimpleX link QR-code.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="The connection you accepted will be cancelled!" xml:space="preserve">
@@ -5097,6 +5144,7 @@ Het kan gebeuren vanwege een bug of wanneer de verbinding is aangetast.</target>
</trans-unit>
<trans-unit id="The text you pasted is not a SimpleX link." xml:space="preserve">
<source>The text you pasted is not a SimpleX link.</source>
<target>De tekst die u hebt geplakt is geen SimpleX link.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Theme" xml:space="preserve">
@@ -5144,6 +5192,10 @@ Het kan gebeuren vanwege een bug of wanneer de verbinding is aangetast.</target>
<target>Deze apparaatnaam</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="This display name is invalid. Please choose another name." xml:space="preserve">
<source>This display name is invalid. Please choose another name.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="This group has over %lld members, delivery receipts are not sent." xml:space="preserve">
<source>This group has over %lld members, delivery receipts are not sent.</source>
<target>Deze groep heeft meer dan %lld -leden, ontvangstbevestigingen worden niet verzonden.</target>
@@ -5368,6 +5420,10 @@ Om verbinding te maken, vraagt u uw contact om een andere verbinding link te mak
<target>Ongelezen</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Up to 100 last messages are sent to new members." xml:space="preserve">
<source>Up to 100 last messages are sent to new members.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Update" xml:space="preserve">
<source>Update</source>
<target>Update</target>
@@ -5455,6 +5511,7 @@ Om verbinding te maken, vraagt u uw contact om een andere verbinding link te mak
</trans-unit>
<trans-unit id="Use only local notifications?" xml:space="preserve">
<source>Use only local notifications?</source>
<target>Alleen lokale meldingen gebruiken?</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Use server" xml:space="preserve">
@@ -5537,6 +5594,10 @@ Om verbinding te maken, vraagt u uw contact om een andere verbinding link te mak
<target>Beveiligingscode bekijken</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Visible history" xml:space="preserve">
<source>Visible history</source>
<note>chat feature</note>
</trans-unit>
<trans-unit id="Voice messages" xml:space="preserve">
<source>Voice messages</source>
<target>Spraak berichten</target>
@@ -5741,6 +5802,7 @@ Deelnameverzoek herhalen?</target>
</trans-unit>
<trans-unit id="You can make it visible to your SimpleX contacts via Settings." xml:space="preserve">
<source>You can make it visible to your SimpleX contacts via Settings.</source>
<target>Je kunt het via Instellingen zichtbaar maken voor je SimpleX contacten.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="You can now send messages to %@" xml:space="preserve">
@@ -5785,6 +5847,7 @@ Deelnameverzoek herhalen?</target>
</trans-unit>
<trans-unit id="You can view invitation link again in connection details." xml:space="preserve">
<source>You can view invitation link again in connection details.</source>
<target>U kunt de uitnodigingslink opnieuw bekijken in de verbindingsdetails.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="You can't send messages!" xml:space="preserve">

View File

@@ -314,6 +314,7 @@
</trans-unit>
<trans-unit id="**Add contact**: to create a new invitation link, or connect via a link you received." xml:space="preserve">
<source>**Add contact**: to create a new invitation link, or connect via a link you received.</source>
<target>**Dodaj kontakt**: aby utworzyć nowy link z zaproszeniem lub połączyć się za pomocą otrzymanego linku.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="**Add new contact**: to create your one-time QR Code for your contact." xml:space="preserve">
@@ -323,6 +324,7 @@
</trans-unit>
<trans-unit id="**Create group**: to create a new group." xml:space="preserve">
<source>**Create group**: to create a new group.</source>
<target>**Utwórz grupę**: aby utworzyć nową grupę.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="**More private**: check new messages every 20 minutes. Device token is shared with SimpleX Chat server, but not how many contacts or messages you have." xml:space="preserve">
@@ -563,6 +565,7 @@
</trans-unit>
<trans-unit id="Add contact" xml:space="preserve">
<source>Add contact</source>
<target>Dodaj kontakt</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Add preset servers" xml:space="preserve">
@@ -670,9 +673,9 @@
<target>Zezwól na znikające wiadomości tylko wtedy, gdy Twój kontakt Ci na to pozwoli.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Allow irreversible message deletion only if your contact allows it to you." xml:space="preserve">
<source>Allow irreversible message deletion only if your contact allows it to you.</source>
<target>Zezwalaj na nieodwracalne usuwanie wiadomości tylko wtedy, gdy Twój kontakt Ci na to pozwoli.</target>
<trans-unit id="Allow irreversible message deletion only if your contact allows it to you. (24 hours)" xml:space="preserve">
<source>Allow irreversible message deletion only if your contact allows it to you. (24 hours)</source>
<target>Zezwalaj na nieodwracalne usuwanie wiadomości tylko wtedy, gdy Twój kontakt Ci na to pozwoli. (24 godziny)</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Allow message reactions only if your contact allows them." xml:space="preserve">
@@ -695,9 +698,9 @@
<target>Zezwól na wysyłanie znikających wiadomości.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Allow to irreversibly delete sent messages." xml:space="preserve">
<source>Allow to irreversibly delete sent messages.</source>
<target>Zezwól na nieodwracalne usunięcie wysłanych wiadomości.</target>
<trans-unit id="Allow to irreversibly delete sent messages. (24 hours)" xml:space="preserve">
<source>Allow to irreversibly delete sent messages. (24 hours)</source>
<target>Zezwól na nieodwracalne usunięcie wysłanych wiadomości. (24 godziny)</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Allow to send files and media." xml:space="preserve">
@@ -730,9 +733,9 @@
<target>Zezwól swoim kontaktom na połączenia do Ciebie.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Allow your contacts to irreversibly delete sent messages." xml:space="preserve">
<source>Allow your contacts to irreversibly delete sent messages.</source>
<target>Zezwól swoim kontaktom na nieodwracalne usuwanie wysłanych wiadomości.</target>
<trans-unit id="Allow your contacts to irreversibly delete sent messages. (24 hours)" xml:space="preserve">
<source>Allow your contacts to irreversibly delete sent messages. (24 hours)</source>
<target>Zezwól swoim kontaktom na nieodwracalne usuwanie wysłanych wiadomości. (24 godziny)</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Allow your contacts to send disappearing messages." xml:space="preserve">
@@ -930,9 +933,9 @@
<target>Zarówno Ty, jak i Twój kontakt możecie dodawać reakcje wiadomości.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Both you and your contact can irreversibly delete sent messages." xml:space="preserve">
<source>Both you and your contact can irreversibly delete sent messages.</source>
<target>Zarówno Ty, jak i Twój kontakt możecie nieodwracalnie usunąć wysłane wiadomości.</target>
<trans-unit id="Both you and your contact can irreversibly delete sent messages. (24 hours)" xml:space="preserve">
<source>Both you and your contact can irreversibly delete sent messages. (24 hours)</source>
<target>Zarówno Ty, jak i Twój kontakt możecie nieodwracalnie usunąć wysłane wiadomości. (24 godziny)</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Both you and your contact can make calls." xml:space="preserve">
@@ -972,6 +975,7 @@
</trans-unit>
<trans-unit id="Camera not available" xml:space="preserve">
<source>Camera not available</source>
<target>Kamera nie dostępna</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Can't delete user profile!" xml:space="preserve">
@@ -1092,6 +1096,7 @@
</trans-unit>
<trans-unit id="Chat is stopped. If you already used this database on another device, you should transfer it back before starting chat." xml:space="preserve">
<source>Chat is stopped. If you already used this database on another device, you should transfer it back before starting chat.</source>
<target>Czat został zatrzymany. Jeśli korzystałeś już z tej bazy danych na innym urządzeniu, powinieneś przenieść ją z powrotem przed rozpoczęciem czatu.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Chat preferences" xml:space="preserve">
@@ -1440,6 +1445,7 @@ To jest twój jednorazowy link!</target>
</trans-unit>
<trans-unit id="Creating link…" xml:space="preserve">
<source>Creating link…</source>
<target>Tworzenie linku…</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Current Passcode" xml:space="preserve">
@@ -1922,6 +1928,10 @@ To nie może być cofnięte!</target>
<target>Zrób to później</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Do not send history to new members." xml:space="preserve">
<source>Do not send history to new members.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Don't create address" xml:space="preserve">
<source>Don't create address</source>
<target>Nie twórz adresu</target>
@@ -1994,6 +2004,7 @@ To nie może być cofnięte!</target>
</trans-unit>
<trans-unit id="Enable camera access" xml:space="preserve">
<source>Enable camera access</source>
<target>Włącz dostęp do kamery</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Enable for all" xml:space="preserve">
@@ -2063,6 +2074,7 @@ To nie może być cofnięte!</target>
</trans-unit>
<trans-unit id="Encrypted message: app is stopped" xml:space="preserve">
<source>Encrypted message: app is stopped</source>
<target>Zaszyfrowana wiadomość: aplikacja jest zatrzymana</target>
<note>notification</note>
</trans-unit>
<trans-unit id="Encrypted message: database error" xml:space="preserve">
@@ -2297,6 +2309,7 @@ To nie może być cofnięte!</target>
</trans-unit>
<trans-unit id="Error opening chat" xml:space="preserve">
<source>Error opening chat</source>
<target>Błąd otwierania czatu</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error receiving file" xml:space="preserve">
@@ -2341,6 +2354,7 @@ To nie może być cofnięte!</target>
</trans-unit>
<trans-unit id="Error scanning code: %@" xml:space="preserve">
<source>Error scanning code: %@</source>
<target>Błąd skanowanie kodu: %@</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Error sending email" xml:space="preserve">
@@ -2673,9 +2687,9 @@ To nie może być cofnięte!</target>
<target>Członkowie grupy mogą dodawać reakcje wiadomości.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Group members can irreversibly delete sent messages." xml:space="preserve">
<source>Group members can irreversibly delete sent messages.</source>
<target>Członkowie grupy mogą nieodwracalnie usuwać wysłane wiadomości.</target>
<trans-unit id="Group members can irreversibly delete sent messages. (24 hours)" xml:space="preserve">
<source>Group members can irreversibly delete sent messages. (24 hours)</source>
<target>Członkowie grupy mogą nieodwracalnie usuwać wysłane wiadomości. (24 godziny)</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Group members can send direct messages." xml:space="preserve">
@@ -2783,6 +2797,10 @@ To nie może być cofnięte!</target>
<target>Historia</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="History is not sent to new members." xml:space="preserve">
<source>History is not sent to new members.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="How SimpleX works" xml:space="preserve">
<source>How SimpleX works</source>
<target>Jak działa SimpleX</target>
@@ -2977,6 +2995,7 @@ To nie może być cofnięte!</target>
</trans-unit>
<trans-unit id="Invalid QR code" xml:space="preserve">
<source>Invalid QR code</source>
<target>Nieprawidłowy kod QR</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Invalid connection link" xml:space="preserve">
@@ -2984,8 +3003,13 @@ To nie może być cofnięte!</target>
<target>Nieprawidłowy link połączenia</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Invalid display name!" xml:space="preserve">
<source>Invalid display name!</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Invalid link" xml:space="preserve">
<source>Invalid link</source>
<target>Nieprawidłowy link</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Invalid name!" xml:space="preserve">
@@ -2995,6 +3019,7 @@ To nie może być cofnięte!</target>
</trans-unit>
<trans-unit id="Invalid response" xml:space="preserve">
<source>Invalid response</source>
<target>Nieprawidłowa odpowiedź</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Invalid server address!" xml:space="preserve">
@@ -3117,6 +3142,7 @@ To jest twój link do grupy %@!</target>
</trans-unit>
<trans-unit id="Keep" xml:space="preserve">
<source>Keep</source>
<target>Zachowaj</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Keep the app open to use it from desktop" xml:space="preserve">
@@ -3126,6 +3152,7 @@ To jest twój link do grupy %@!</target>
</trans-unit>
<trans-unit id="Keep unused invitation?" xml:space="preserve">
<source>Keep unused invitation?</source>
<target>Zachować nieużyte zaproszenie?</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Keep your connections" xml:space="preserve">
@@ -3460,6 +3487,7 @@ To jest twój link do grupy %@!</target>
</trans-unit>
<trans-unit id="New chat" xml:space="preserve">
<source>New chat</source>
<target>Nowy czat</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="New contact request" xml:space="preserve">
@@ -3588,6 +3616,7 @@ To jest twój link do grupy %@!</target>
</trans-unit>
<trans-unit id="OK" xml:space="preserve">
<source>OK</source>
<target>OK</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Off" xml:space="preserve">
@@ -3655,9 +3684,9 @@ To jest twój link do grupy %@!</target>
<target>Tylko Ty możesz dodawać reakcje wiadomości.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Only you can irreversibly delete messages (your contact can mark them for deletion)." xml:space="preserve">
<source>Only you can irreversibly delete messages (your contact can mark them for deletion).</source>
<target>Tylko Ty możesz nieodwracalnie usunąć wiadomości (Twój kontakt może oznaczyć je do usunięcia).</target>
<trans-unit id="Only you can irreversibly delete messages (your contact can mark them for deletion). (24 hours)" xml:space="preserve">
<source>Only you can irreversibly delete messages (your contact can mark them for deletion). (24 hours)</source>
<target>Tylko Ty możesz nieodwracalnie usunąć wiadomości (Twój kontakt może oznaczyć je do usunięcia). (24 godziny)</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Only you can make calls." xml:space="preserve">
@@ -3680,9 +3709,9 @@ To jest twój link do grupy %@!</target>
<target>Tylko Twój kontakt może dodawać reakcje wiadomości.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Only your contact can irreversibly delete messages (you can mark them for deletion)." xml:space="preserve">
<source>Only your contact can irreversibly delete messages (you can mark them for deletion).</source>
<target>Tylko Twój kontakt może nieodwracalnie usunąć wiadomości (możesz oznaczyć je do usunięcia).</target>
<trans-unit id="Only your contact can irreversibly delete messages (you can mark them for deletion). (24 hours)" xml:space="preserve">
<source>Only your contact can irreversibly delete messages (you can mark them for deletion). (24 hours)</source>
<target>Tylko Twój kontakt może nieodwracalnie usunąć wiadomości (możesz oznaczyć je do usunięcia). (24 godziny)</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Only your contact can make calls." xml:space="preserve">
@@ -3737,14 +3766,17 @@ To jest twój link do grupy %@!</target>
</trans-unit>
<trans-unit id="Opening app…" xml:space="preserve">
<source>Opening app…</source>
<target>Otwieranie aplikacji…</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Or scan QR code" xml:space="preserve">
<source>Or scan QR code</source>
<target>Lub zeskanuj kod QR</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Or show this code" xml:space="preserve">
<source>Or show this code</source>
<target>Lub pokaż ten kod</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="PING count" xml:space="preserve">
@@ -3799,6 +3831,7 @@ To jest twój link do grupy %@!</target>
</trans-unit>
<trans-unit id="Paste the link you received" xml:space="preserve">
<source>Paste the link you received</source>
<target>Wklej link, który otrzymałeś</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="People can connect to you only via the links you share." xml:space="preserve">
@@ -3839,6 +3872,8 @@ To jest twój link do grupy %@!</target>
<trans-unit id="Please contact developers.&#10;Error: %@" xml:space="preserve">
<source>Please contact developers.
Error: %@</source>
<target>Proszę skontaktować się z deweloperami.
Błąd: %@</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Please contact group admin." xml:space="preserve">
@@ -4048,6 +4083,7 @@ Error: %@</source>
</trans-unit>
<trans-unit id="Read more in [User Guide](https://simplex.chat/docs/guide/chat-profiles.html#incognito-mode)." xml:space="preserve">
<source>Read more in [User Guide](https://simplex.chat/docs/guide/chat-profiles.html#incognito-mode).</source>
<target>Przeczytaj więcej w [Poradniku Użytkownika](https://simplex.chat/docs/guide/chat-profiles.html#incognito-mode).</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Read more in [User Guide](https://simplex.chat/docs/guide/readme.html#connect-to-friends)." xml:space="preserve">
@@ -4262,6 +4298,7 @@ Error: %@</source>
</trans-unit>
<trans-unit id="Retry" xml:space="preserve">
<source>Retry</source>
<target>Ponów</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Reveal" xml:space="preserve">
@@ -4421,6 +4458,7 @@ Error: %@</source>
</trans-unit>
<trans-unit id="Search or paste SimpleX link" xml:space="preserve">
<source>Search or paste SimpleX link</source>
<target>Wyszukaj lub wklej link SimpleX</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Secure queue" xml:space="preserve">
@@ -4528,6 +4566,10 @@ Error: %@</source>
<target>Wyślij je z galerii lub niestandardowych klawiatur.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Send up to 100 last messages to new members." xml:space="preserve">
<source>Send up to 100 last messages to new members.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Sender cancelled file transfer." xml:space="preserve">
<source>Sender cancelled file transfer.</source>
<target>Nadawca anulował transfer pliku.</target>
@@ -4700,6 +4742,7 @@ Error: %@</source>
</trans-unit>
<trans-unit id="Share this 1-time invite link" xml:space="preserve">
<source>Share this 1-time invite link</source>
<target>Udostępnij ten jednorazowy link</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Share with contacts" xml:space="preserve">
@@ -4829,6 +4872,7 @@ Error: %@</source>
</trans-unit>
<trans-unit id="Start chat?" xml:space="preserve">
<source>Start chat?</source>
<target>Rozpocząć czat?</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Start migration" xml:space="preserve">
@@ -4958,10 +5002,12 @@ Error: %@</source>
</trans-unit>
<trans-unit id="Tap to paste link" xml:space="preserve">
<source>Tap to paste link</source>
<target>Dotknij, aby wkleić link</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Tap to scan" xml:space="preserve">
<source>Tap to scan</source>
<target>Dotknij, aby zeskanować</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Tap to start a new chat" xml:space="preserve">
@@ -5028,6 +5074,7 @@ Może się to zdarzyć z powodu jakiegoś błędu lub gdy połączenie jest skom
</trans-unit>
<trans-unit id="The code you scanned is not a SimpleX link QR code." xml:space="preserve">
<source>The code you scanned is not a SimpleX link QR code.</source>
<target>Kod, który zeskanowałeś nie jest kodem QR linku SimpleX.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="The connection you accepted will be cancelled!" xml:space="preserve">
@@ -5097,6 +5144,7 @@ Może się to zdarzyć z powodu jakiegoś błędu lub gdy połączenie jest skom
</trans-unit>
<trans-unit id="The text you pasted is not a SimpleX link." xml:space="preserve">
<source>The text you pasted is not a SimpleX link.</source>
<target>Tekst, który wkleiłeś nie jest linkiem SimpleX.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Theme" xml:space="preserve">
@@ -5144,6 +5192,10 @@ Może się to zdarzyć z powodu jakiegoś błędu lub gdy połączenie jest skom
<target>Nazwa tego urządzenia</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="This display name is invalid. Please choose another name." xml:space="preserve">
<source>This display name is invalid. Please choose another name.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="This group has over %lld members, delivery receipts are not sent." xml:space="preserve">
<source>This group has over %lld members, delivery receipts are not sent.</source>
<target>Ta grupa ma ponad %lld członków, potwierdzenia dostawy nie są wysyłane.</target>
@@ -5368,6 +5420,10 @@ Aby się połączyć, poproś Twój kontakt o utworzenie kolejnego linku połąc
<target>Nieprzeczytane</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Up to 100 last messages are sent to new members." xml:space="preserve">
<source>Up to 100 last messages are sent to new members.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Update" xml:space="preserve">
<source>Update</source>
<target>Aktualizuj</target>
@@ -5455,6 +5511,7 @@ Aby się połączyć, poproś Twój kontakt o utworzenie kolejnego linku połąc
</trans-unit>
<trans-unit id="Use only local notifications?" xml:space="preserve">
<source>Use only local notifications?</source>
<target>Używać tylko lokalnych powiadomień?</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Use server" xml:space="preserve">
@@ -5537,6 +5594,10 @@ Aby się połączyć, poproś Twój kontakt o utworzenie kolejnego linku połąc
<target>Pokaż kod bezpieczeństwa</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Visible history" xml:space="preserve">
<source>Visible history</source>
<note>chat feature</note>
</trans-unit>
<trans-unit id="Voice messages" xml:space="preserve">
<source>Voice messages</source>
<target>Wiadomości głosowe</target>
@@ -5741,6 +5802,7 @@ Powtórzyć prośbę dołączenia?</target>
</trans-unit>
<trans-unit id="You can make it visible to your SimpleX contacts via Settings." xml:space="preserve">
<source>You can make it visible to your SimpleX contacts via Settings.</source>
<target>Możesz ustawić go jako widoczny dla swoich kontaktów SimpleX w Ustawieniach.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="You can now send messages to %@" xml:space="preserve">
@@ -5785,6 +5847,7 @@ Powtórzyć prośbę dołączenia?</target>
</trans-unit>
<trans-unit id="You can view invitation link again in connection details." xml:space="preserve">
<source>You can view invitation link again in connection details.</source>
<target>Możesz zobaczyć link zaproszenia ponownie w szczegółach połączenia.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="You can't send messages!" xml:space="preserve">

View File

@@ -670,9 +670,9 @@
<target>Разрешить исчезающие сообщения, только если Ваш контакт разрешает их Вам.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Allow irreversible message deletion only if your contact allows it to you." xml:space="preserve">
<source>Allow irreversible message deletion only if your contact allows it to you.</source>
<target>Разрешить необратимое удаление сообщений, только если Ваш контакт разрешает это Вам.</target>
<trans-unit id="Allow irreversible message deletion only if your contact allows it to you. (24 hours)" xml:space="preserve">
<source>Allow irreversible message deletion only if your contact allows it to you. (24 hours)</source>
<target>Разрешить необратимое удаление сообщений, только если Ваш контакт разрешает это Вам. (24 часа)</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Allow message reactions only if your contact allows them." xml:space="preserve">
@@ -695,9 +695,9 @@
<target>Разрешить посылать исчезающие сообщения.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Allow to irreversibly delete sent messages." xml:space="preserve">
<source>Allow to irreversibly delete sent messages.</source>
<target>Разрешить необратимо удалять отправленные сообщения.</target>
<trans-unit id="Allow to irreversibly delete sent messages. (24 hours)" xml:space="preserve">
<source>Allow to irreversibly delete sent messages. (24 hours)</source>
<target>Разрешить необратимо удалять отправленные сообщения. (24 часа)</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Allow to send files and media." xml:space="preserve">
@@ -730,9 +730,9 @@
<target>Разрешить Вашим контактам звонить Вам.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Allow your contacts to irreversibly delete sent messages." xml:space="preserve">
<source>Allow your contacts to irreversibly delete sent messages.</source>
<target>Разрешить Вашим контактам необратимо удалять отправленные сообщения.</target>
<trans-unit id="Allow your contacts to irreversibly delete sent messages. (24 hours)" xml:space="preserve">
<source>Allow your contacts to irreversibly delete sent messages. (24 hours)</source>
<target>Разрешить Вашим контактам необратимо удалять отправленные сообщения. (24 часа)</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Allow your contacts to send disappearing messages." xml:space="preserve">
@@ -930,9 +930,9 @@
<target>И Вы, и Ваш контакт можете добавлять реакции на сообщения.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Both you and your contact can irreversibly delete sent messages." xml:space="preserve">
<source>Both you and your contact can irreversibly delete sent messages.</source>
<target>Вы и Ваш контакт можете необратимо удалять отправленные сообщения.</target>
<trans-unit id="Both you and your contact can irreversibly delete sent messages. (24 hours)" xml:space="preserve">
<source>Both you and your contact can irreversibly delete sent messages. (24 hours)</source>
<target>Вы и Ваш контакт можете необратимо удалять отправленные сообщения. (24 часа)</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Both you and your contact can make calls." xml:space="preserve">
@@ -1922,6 +1922,10 @@ This cannot be undone!</source>
<target>Отложить</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Do not send history to new members." xml:space="preserve">
<source>Do not send history to new members.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Don't create address" xml:space="preserve">
<source>Don't create address</source>
<target>Не создавать адрес</target>
@@ -2673,9 +2677,9 @@ This cannot be undone!</source>
<target>Члены группы могут добавлять реакции на сообщения.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Group members can irreversibly delete sent messages." xml:space="preserve">
<source>Group members can irreversibly delete sent messages.</source>
<target>Члены группы могут необратимо удалять отправленные сообщения.</target>
<trans-unit id="Group members can irreversibly delete sent messages. (24 hours)" xml:space="preserve">
<source>Group members can irreversibly delete sent messages. (24 hours)</source>
<target>Члены группы могут необратимо удалять отправленные сообщения. (24 часа)</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Group members can send direct messages." xml:space="preserve">
@@ -2783,6 +2787,10 @@ This cannot be undone!</source>
<target>История</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="History is not sent to new members." xml:space="preserve">
<source>History is not sent to new members.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="How SimpleX works" xml:space="preserve">
<source>How SimpleX works</source>
<target>Как SimpleX работает</target>
@@ -2984,6 +2992,10 @@ This cannot be undone!</source>
<target>Ошибка в ссылке контакта</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Invalid display name!" xml:space="preserve">
<source>Invalid display name!</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Invalid link" xml:space="preserve">
<source>Invalid link</source>
<note>No comment provided by engineer.</note>
@@ -3655,9 +3667,9 @@ This is your link for group %@!</source>
<target>Только Вы можете добавлять реакции на сообщения.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Only you can irreversibly delete messages (your contact can mark them for deletion)." xml:space="preserve">
<source>Only you can irreversibly delete messages (your contact can mark them for deletion).</source>
<target>Только Вы можете необратимо удалять сообщения (Ваш контакт может помечать их на удаление).</target>
<trans-unit id="Only you can irreversibly delete messages (your contact can mark them for deletion). (24 hours)" xml:space="preserve">
<source>Only you can irreversibly delete messages (your contact can mark them for deletion). (24 hours)</source>
<target>Только Вы можете необратимо удалять сообщения (Ваш контакт может помечать их на удаление). (24 часа)</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Only you can make calls." xml:space="preserve">
@@ -3680,9 +3692,9 @@ This is your link for group %@!</source>
<target>Только Ваш контакт может добавлять реакции на сообщения.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Only your contact can irreversibly delete messages (you can mark them for deletion)." xml:space="preserve">
<source>Only your contact can irreversibly delete messages (you can mark them for deletion).</source>
<target>Только Ваш контакт может необратимо удалять сообщения (Вы можете помечать их на удаление).</target>
<trans-unit id="Only your contact can irreversibly delete messages (you can mark them for deletion). (24 hours)" xml:space="preserve">
<source>Only your contact can irreversibly delete messages (you can mark them for deletion). (24 hours)</source>
<target>Только Ваш контакт может необратимо удалять сообщения (Вы можете помечать их на удаление). (24 часа)</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Only your contact can make calls." xml:space="preserve">
@@ -4528,6 +4540,10 @@ Error: %@</source>
<target>Отправьте из галереи или из дополнительных клавиатур.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Send up to 100 last messages to new members." xml:space="preserve">
<source>Send up to 100 last messages to new members.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Sender cancelled file transfer." xml:space="preserve">
<source>Sender cancelled file transfer.</source>
<target>Отправитель отменил передачу файла.</target>
@@ -5144,6 +5160,10 @@ It can happen because of some bug or when the connection is compromised.</source
<target>Имя этого устройства</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="This display name is invalid. Please choose another name." xml:space="preserve">
<source>This display name is invalid. Please choose another name.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="This group has over %lld members, delivery receipts are not sent." xml:space="preserve">
<source>This group has over %lld members, delivery receipts are not sent.</source>
<target>В группе более %lld членов, отчёты о доставке выключены.</target>
@@ -5368,6 +5388,10 @@ To connect, please ask your contact to create another connection link and check
<target>Не прочитано</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Up to 100 last messages are sent to new members." xml:space="preserve">
<source>Up to 100 last messages are sent to new members.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Update" xml:space="preserve">
<source>Update</source>
<target>Обновить</target>
@@ -5537,6 +5561,10 @@ To connect, please ask your contact to create another connection link and check
<target>Показать код безопасности</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Visible history" xml:space="preserve">
<source>Visible history</source>
<note>chat feature</note>
</trans-unit>
<trans-unit id="Voice messages" xml:space="preserve">
<source>Voice messages</source>
<target>Голосовые сообщения</target>

View File

@@ -645,8 +645,8 @@
<target>อนุญาตให้ข้อความที่หายไปเฉพาะในกรณีที่ผู้ติดต่อของคุณอนุญาตเท่านั้น.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Allow irreversible message deletion only if your contact allows it to you." xml:space="preserve">
<source>Allow irreversible message deletion only if your contact allows it to you.</source>
<trans-unit id="Allow irreversible message deletion only if your contact allows it to you. (24 hours)" xml:space="preserve">
<source>Allow irreversible message deletion only if your contact allows it to you. (24 hours)</source>
<target>อนุญาตให้ลบข้อความแบบถาวรเฉพาะในกรณีที่ผู้ติดต่อของคุณอนุญาตให้คุณเท่านั้น</target>
<note>No comment provided by engineer.</note>
</trans-unit>
@@ -670,8 +670,8 @@
<target>อนุญาตให้ส่งข้อความที่จะหายไปหลังปิดแชท (disappearing message)</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Allow to irreversibly delete sent messages." xml:space="preserve">
<source>Allow to irreversibly delete sent messages.</source>
<trans-unit id="Allow to irreversibly delete sent messages. (24 hours)" xml:space="preserve">
<source>Allow to irreversibly delete sent messages. (24 hours)</source>
<target>อนุญาตให้ลบข้อความที่ส่งไปแล้วอย่างถาวร</target>
<note>No comment provided by engineer.</note>
</trans-unit>
@@ -705,8 +705,8 @@
<target>อนุญาตให้ผู้ติดต่อของคุณโทรหาคุณ</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Allow your contacts to irreversibly delete sent messages." xml:space="preserve">
<source>Allow your contacts to irreversibly delete sent messages.</source>
<trans-unit id="Allow your contacts to irreversibly delete sent messages. (24 hours)" xml:space="preserve">
<source>Allow your contacts to irreversibly delete sent messages. (24 hours)</source>
<target>อนุญาตให้ผู้ติดต่อของคุณลบข้อความที่ส่งแล้วอย่างถาวร</target>
<note>No comment provided by engineer.</note>
</trans-unit>
@@ -896,8 +896,8 @@
<target>ทั้งคุณและผู้ติดต่อของคุณสามารถเพิ่มปฏิกิริยาของข้อความได้</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Both you and your contact can irreversibly delete sent messages." xml:space="preserve">
<source>Both you and your contact can irreversibly delete sent messages.</source>
<trans-unit id="Both you and your contact can irreversibly delete sent messages. (24 hours)" xml:space="preserve">
<source>Both you and your contact can irreversibly delete sent messages. (24 hours)</source>
<target>ทั้งคุณและผู้ติดต่อของคุณสามารถลบข้อความที่ส่งแล้วอย่างถาวรได้</target>
<note>No comment provided by engineer.</note>
</trans-unit>
@@ -1856,6 +1856,10 @@ This cannot be undone!</source>
<target>ทำในภายหลัง</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Do not send history to new members." xml:space="preserve">
<source>Do not send history to new members.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Don't create address" xml:space="preserve">
<source>Don't create address</source>
<target>อย่าสร้างที่อยู่</target>
@@ -2591,8 +2595,8 @@ This cannot be undone!</source>
<target>สมาชิกกลุ่มสามารถเพิ่มการแสดงปฏิกิริยาต่อข้อความได้</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Group members can irreversibly delete sent messages." xml:space="preserve">
<source>Group members can irreversibly delete sent messages.</source>
<trans-unit id="Group members can irreversibly delete sent messages. (24 hours)" xml:space="preserve">
<source>Group members can irreversibly delete sent messages. (24 hours)</source>
<target>สมาชิกกลุ่มสามารถลบข้อความที่ส่งแล้วอย่างถาวร</target>
<note>No comment provided by engineer.</note>
</trans-unit>
@@ -2701,6 +2705,10 @@ This cannot be undone!</source>
<target>ประวัติ</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="History is not sent to new members." xml:space="preserve">
<source>History is not sent to new members.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="How SimpleX works" xml:space="preserve">
<source>How SimpleX works</source>
<target>วิธีการ SimpleX ทํางานอย่างไร</target>
@@ -2899,6 +2907,10 @@ This cannot be undone!</source>
<target>ลิงค์เชื่อมต่อไม่ถูกต้อง</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Invalid display name!" xml:space="preserve">
<source>Invalid display name!</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Invalid link" xml:space="preserve">
<source>Invalid link</source>
<note>No comment provided by engineer.</note>
@@ -3555,8 +3567,8 @@ This is your link for group %@!</source>
<target>มีเพียงคุณเท่านั้นที่สามารถแสดงปฏิกิริยาต่อข้อความได้</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Only you can irreversibly delete messages (your contact can mark them for deletion)." xml:space="preserve">
<source>Only you can irreversibly delete messages (your contact can mark them for deletion).</source>
<trans-unit id="Only you can irreversibly delete messages (your contact can mark them for deletion). (24 hours)" xml:space="preserve">
<source>Only you can irreversibly delete messages (your contact can mark them for deletion). (24 hours)</source>
<target>มีเพียงคุณเท่านั้นที่สามารถลบข้อความแบบย้อนกลับไม่ได้ (ผู้ติดต่อของคุณสามารถทำเครื่องหมายเพื่อลบได้)</target>
<note>No comment provided by engineer.</note>
</trans-unit>
@@ -3580,8 +3592,8 @@ This is your link for group %@!</source>
<target>เฉพาะผู้ติดต่อของคุณเท่านั้นที่สามารถเพิ่มการโต้ตอบข้อความได้</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Only your contact can irreversibly delete messages (you can mark them for deletion)." xml:space="preserve">
<source>Only your contact can irreversibly delete messages (you can mark them for deletion).</source>
<trans-unit id="Only your contact can irreversibly delete messages (you can mark them for deletion). (24 hours)" xml:space="preserve">
<source>Only your contact can irreversibly delete messages (you can mark them for deletion). (24 hours)</source>
<target>เฉพาะผู้ติดต่อของคุณเท่านั้นที่สามารถลบข้อความแบบย้อนกลับไม่ได้ (คุณสามารถทำเครื่องหมายเพื่อลบได้)</target>
<note>No comment provided by engineer.</note>
</trans-unit>
@@ -4417,6 +4429,10 @@ Error: %@</source>
<target>ส่งจากแกลเลอรีหรือแป้นพิมพ์แบบกำหนดเอง</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Send up to 100 last messages to new members." xml:space="preserve">
<source>Send up to 100 last messages to new members.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Sender cancelled file transfer." xml:space="preserve">
<source>Sender cancelled file transfer.</source>
<target>ผู้ส่งยกเลิกการโอนไฟล์</target>
@@ -5025,6 +5041,10 @@ It can happen because of some bug or when the connection is compromised.</source
<source>This device name</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="This display name is invalid. Please choose another name." xml:space="preserve">
<source>This display name is invalid. Please choose another name.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="This group has over %lld members, delivery receipts are not sent." xml:space="preserve">
<source>This group has over %lld members, delivery receipts are not sent.</source>
<note>No comment provided by engineer.</note>
@@ -5239,6 +5259,10 @@ To connect, please ask your contact to create another connection link and check
<target>เปลี่ยนเป็นยังไม่ได้อ่าน</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Up to 100 last messages are sent to new members." xml:space="preserve">
<source>Up to 100 last messages are sent to new members.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Update" xml:space="preserve">
<source>Update</source>
<target>อัปเดต</target>
@@ -5401,6 +5425,10 @@ To connect, please ask your contact to create another connection link and check
<target>ดูรหัสความปลอดภัย</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Visible history" xml:space="preserve">
<source>Visible history</source>
<note>chat feature</note>
</trans-unit>
<trans-unit id="Voice messages" xml:space="preserve">
<source>Voice messages</source>
<target>ข้อความเสียง</target>

View File

@@ -0,0 +1,15 @@
{
"colors" : [
{
"idiom" : "universal",
"locale" : "tr"
}
],
"properties" : {
"localizable" : true
},
"info" : {
"version" : 1,
"author" : "xcode"
}
}

View File

@@ -0,0 +1,6 @@
{
"info" : {
"author" : "xcode",
"version" : 1
}
}

View File

@@ -0,0 +1,23 @@
{
"colors" : [
{
"color" : {
"color-space" : "srgb",
"components" : {
"red" : "0.000",
"alpha" : "1.000",
"blue" : "1.000",
"green" : "0.533"
}
},
"idiom" : "universal"
}
],
"properties" : {
"localizable" : true
},
"info" : {
"version" : 1,
"author" : "xcode"
}
}

View File

@@ -0,0 +1,6 @@
{
"info" : {
"author" : "xcode",
"version" : 1
}
}

View File

@@ -0,0 +1,6 @@
/* Bundle display name */
"CFBundleDisplayName" = "SimpleX NSE";
/* Bundle name */
"CFBundleName" = "SimpleX NSE";
/* Copyright (human-readable) */
"NSHumanReadableCopyright" = "Copyright © 2022 SimpleX Chat. All rights reserved.";

View File

@@ -0,0 +1,30 @@
/* No comment provided by engineer. */
"_italic_" = "\\_italic_";
/* No comment provided by engineer. */
"**Add new contact**: to create your one-time QR Code for your contact." = "**Add new contact**: to create your one-time QR Code or link for your contact.";
/* No comment provided by engineer. */
"*bold*" = "\\*bold*";
/* No comment provided by engineer. */
"`a + b`" = "\\`a + b`";
/* No comment provided by engineer. */
"~strike~" = "\\~strike~";
/* call status */
"connecting call" = "connecting call…";
/* No comment provided by engineer. */
"Connecting server…" = "Connecting to server…";
/* No comment provided by engineer. */
"Connecting server… (error: %@)" = "Connecting to server… (error: %@)";
/* rcv group event chat item */
"member connected" = "connected";
/* No comment provided by engineer. */
"No group!" = "Group not found!";

View File

@@ -0,0 +1,12 @@
/* Bundle name */
"CFBundleName" = "SimpleX";
/* Privacy - Camera Usage Description */
"NSCameraUsageDescription" = "SimpleX needs camera access to scan QR codes to connect to other users and for video calls.";
/* Privacy - Face ID Usage Description */
"NSFaceIDUsageDescription" = "SimpleX uses Face ID for local authentication";
/* Privacy - Local Network Usage Description */
"NSLocalNetworkUsageDescription" = "SimpleX uses local network access to allow using user chat profile via desktop app on the same network.";
/* Privacy - Microphone Usage Description */
"NSMicrophoneUsageDescription" = "SimpleX needs microphone access for audio and video calls, and to record voice messages.";
/* Privacy - Photo Library Additions Usage Description */
"NSPhotoLibraryAddUsageDescription" = "SimpleX needs access to Photo Library for saving captured and received media";

View File

@@ -0,0 +1,12 @@
{
"developmentRegion" : "en",
"project" : "SimpleX.xcodeproj",
"targetLocale" : "tr",
"toolInfo" : {
"toolBuildNumber" : "15A240d",
"toolID" : "com.apple.dt.xcode",
"toolName" : "Xcode",
"toolVersion" : "15.0"
},
"version" : "1.0"
}

View File

@@ -670,9 +670,9 @@
<target>Дозволяйте зникати повідомленням, тільки якщо контакт дозволяє вам це робити.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Allow irreversible message deletion only if your contact allows it to you." xml:space="preserve">
<source>Allow irreversible message deletion only if your contact allows it to you.</source>
<target>Дозволяйте безповоротне видалення повідомлень, тільки якщо контакт дозволяє вам це зробити.</target>
<trans-unit id="Allow irreversible message deletion only if your contact allows it to you. (24 hours)" xml:space="preserve">
<source>Allow irreversible message deletion only if your contact allows it to you. (24 hours)</source>
<target>Дозволяйте безповоротне видалення повідомлень, тільки якщо контакт дозволяє вам це зробити. (24 години)</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Allow message reactions only if your contact allows them." xml:space="preserve">
@@ -695,9 +695,9 @@
<target>Дозволити надсилання зникаючих повідомлень.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Allow to irreversibly delete sent messages." xml:space="preserve">
<source>Allow to irreversibly delete sent messages.</source>
<target>Дозволяє безповоротно видаляти надіслані повідомлення.</target>
<trans-unit id="Allow to irreversibly delete sent messages. (24 hours)" xml:space="preserve">
<source>Allow to irreversibly delete sent messages. (24 hours)</source>
<target>Дозволяє безповоротно видаляти надіслані повідомлення. (24 години)</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Allow to send files and media." xml:space="preserve">
@@ -730,9 +730,9 @@
<target>Дозвольте вашим контактам телефонувати вам.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Allow your contacts to irreversibly delete sent messages." xml:space="preserve">
<source>Allow your contacts to irreversibly delete sent messages.</source>
<target>Дозвольте вашим контактам безповоротно видаляти надіслані повідомлення.</target>
<trans-unit id="Allow your contacts to irreversibly delete sent messages. (24 hours)" xml:space="preserve">
<source>Allow your contacts to irreversibly delete sent messages. (24 hours)</source>
<target>Дозвольте вашим контактам безповоротно видаляти надіслані повідомлення. (24 години)</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Allow your contacts to send disappearing messages." xml:space="preserve">
@@ -930,9 +930,9 @@
<target>Реакції на повідомлення можете додавати як ви, так і ваш контакт.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Both you and your contact can irreversibly delete sent messages." xml:space="preserve">
<source>Both you and your contact can irreversibly delete sent messages.</source>
<target>І ви, і ваш контакт можете безповоротно видалити надіслані повідомлення.</target>
<trans-unit id="Both you and your contact can irreversibly delete sent messages. (24 hours)" xml:space="preserve">
<source>Both you and your contact can irreversibly delete sent messages. (24 hours)</source>
<target>І ви, і ваш контакт можете безповоротно видалити надіслані повідомлення. (24 години)</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Both you and your contact can make calls." xml:space="preserve">
@@ -1904,6 +1904,10 @@ This cannot be undone!</source>
<target>Зробіть це пізніше</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Do not send history to new members." xml:space="preserve">
<source>Do not send history to new members.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Don't create address" xml:space="preserve">
<source>Don't create address</source>
<target>Не створювати адресу</target>
@@ -2639,9 +2643,9 @@ This cannot be undone!</source>
<target>Учасники групи можуть додавати реакції на повідомлення.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Group members can irreversibly delete sent messages." xml:space="preserve">
<source>Group members can irreversibly delete sent messages.</source>
<target>Учасники групи можуть безповоротно видаляти надіслані повідомлення.</target>
<trans-unit id="Group members can irreversibly delete sent messages. (24 hours)" xml:space="preserve">
<source>Group members can irreversibly delete sent messages. (24 hours)</source>
<target>Учасники групи можуть безповоротно видаляти надіслані повідомлення. (24 години)</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Group members can send direct messages." xml:space="preserve">
@@ -2749,6 +2753,10 @@ This cannot be undone!</source>
<target>Історія</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="History is not sent to new members." xml:space="preserve">
<source>History is not sent to new members.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="How SimpleX works" xml:space="preserve">
<source>How SimpleX works</source>
<target>Як працює SimpleX</target>
@@ -2948,6 +2956,10 @@ This cannot be undone!</source>
<target>Неправильне посилання для підключення</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Invalid display name!" xml:space="preserve">
<source>Invalid display name!</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Invalid link" xml:space="preserve">
<source>Invalid link</source>
<note>No comment provided by engineer.</note>
@@ -3607,9 +3619,9 @@ This is your link for group %@!</source>
<target>Тільки ви можете додавати реакції на повідомлення.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Only you can irreversibly delete messages (your contact can mark them for deletion)." xml:space="preserve">
<source>Only you can irreversibly delete messages (your contact can mark them for deletion).</source>
<target>Тільки ви можете безповоротно видалити повідомлення (ваш контакт може позначити їх для видалення).</target>
<trans-unit id="Only you can irreversibly delete messages (your contact can mark them for deletion). (24 hours)" xml:space="preserve">
<source>Only you can irreversibly delete messages (your contact can mark them for deletion). (24 hours)</source>
<target>Тільки ви можете безповоротно видалити повідомлення (ваш контакт може позначити їх для видалення). (24 години)</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Only you can make calls." xml:space="preserve">
@@ -3632,9 +3644,9 @@ This is your link for group %@!</source>
<target>Тільки ваш контакт може додавати реакції на повідомлення.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Only your contact can irreversibly delete messages (you can mark them for deletion)." xml:space="preserve">
<source>Only your contact can irreversibly delete messages (you can mark them for deletion).</source>
<target>Тільки ваш контакт може безповоротно видалити повідомлення (ви можете позначити їх для видалення).</target>
<trans-unit id="Only your contact can irreversibly delete messages (you can mark them for deletion). (24 hours)" xml:space="preserve">
<source>Only your contact can irreversibly delete messages (you can mark them for deletion). (24 hours)</source>
<target>Тільки ваш контакт може безповоротно видалити повідомлення (ви можете позначити їх для видалення). (24 години)</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Only your contact can make calls." xml:space="preserve">
@@ -4471,6 +4483,10 @@ Error: %@</source>
<target>Надсилайте їх із галереї чи власних клавіатур.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Send up to 100 last messages to new members." xml:space="preserve">
<source>Send up to 100 last messages to new members.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Sender cancelled file transfer." xml:space="preserve">
<source>Sender cancelled file transfer.</source>
<target>Відправник скасував передачу файлу.</target>
@@ -5083,6 +5099,10 @@ It can happen because of some bug or when the connection is compromised.</source
<source>This device name</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="This display name is invalid. Please choose another name." xml:space="preserve">
<source>This display name is invalid. Please choose another name.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="This group has over %lld members, delivery receipts are not sent." xml:space="preserve">
<source>This group has over %lld members, delivery receipts are not sent.</source>
<target>У цій групі більше %lld учасників, підтвердження доставки не надсилаються.</target>
@@ -5298,6 +5318,10 @@ To connect, please ask your contact to create another connection link and check
<target>Непрочитане</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Up to 100 last messages are sent to new members." xml:space="preserve">
<source>Up to 100 last messages are sent to new members.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Update" xml:space="preserve">
<source>Update</source>
<target>Оновлення</target>
@@ -5462,6 +5486,10 @@ To connect, please ask your contact to create another connection link and check
<target>Переглянути код безпеки</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Visible history" xml:space="preserve">
<source>Visible history</source>
<note>chat feature</note>
</trans-unit>
<trans-unit id="Voice messages" xml:space="preserve">
<source>Voice messages</source>
<target>Голосові повідомлення</target>

View File

@@ -656,8 +656,8 @@
<target>仅当您的联系人允许时才允许限时消息。</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Allow irreversible message deletion only if your contact allows it to you." xml:space="preserve">
<source>Allow irreversible message deletion only if your contact allows it to you.</source>
<trans-unit id="Allow irreversible message deletion only if your contact allows it to you. (24 hours)" xml:space="preserve">
<source>Allow irreversible message deletion only if your contact allows it to you. (24 hours)</source>
<target>仅有您的联系人许可后才允许不可撤回消息移除。</target>
<note>No comment provided by engineer.</note>
</trans-unit>
@@ -681,8 +681,8 @@
<target>允许发送限时消息。</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Allow to irreversibly delete sent messages." xml:space="preserve">
<source>Allow to irreversibly delete sent messages.</source>
<trans-unit id="Allow to irreversibly delete sent messages. (24 hours)" xml:space="preserve">
<source>Allow to irreversibly delete sent messages. (24 hours)</source>
<target>允许不可撤回地删除已发送消息。</target>
<note>No comment provided by engineer.</note>
</trans-unit>
@@ -716,8 +716,8 @@
<target>允许您的联系人给您打电话。</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Allow your contacts to irreversibly delete sent messages." xml:space="preserve">
<source>Allow your contacts to irreversibly delete sent messages.</source>
<trans-unit id="Allow your contacts to irreversibly delete sent messages. (24 hours)" xml:space="preserve">
<source>Allow your contacts to irreversibly delete sent messages. (24 hours)</source>
<target>允许您的联系人不可撤回地删除已发送消息。</target>
<note>No comment provided by engineer.</note>
</trans-unit>
@@ -908,8 +908,8 @@
<target>您和您的联系人都可以添加消息回应。</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Both you and your contact can irreversibly delete sent messages." xml:space="preserve">
<source>Both you and your contact can irreversibly delete sent messages.</source>
<trans-unit id="Both you and your contact can irreversibly delete sent messages. (24 hours)" xml:space="preserve">
<source>Both you and your contact can irreversibly delete sent messages. (24 hours)</source>
<target>您和您的联系人都可以不可逆转地删除已发送的消息。</target>
<note>No comment provided by engineer.</note>
</trans-unit>
@@ -1874,6 +1874,10 @@ This cannot be undone!</source>
<target>稍后再做</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Do not send history to new members." xml:space="preserve">
<source>Do not send history to new members.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Don't create address" xml:space="preserve">
<source>Don't create address</source>
<target>不创建地址</target>
@@ -2614,8 +2618,8 @@ This cannot be undone!</source>
<target>群组成员可以添加信息回应。</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Group members can irreversibly delete sent messages." xml:space="preserve">
<source>Group members can irreversibly delete sent messages.</source>
<trans-unit id="Group members can irreversibly delete sent messages. (24 hours)" xml:space="preserve">
<source>Group members can irreversibly delete sent messages. (24 hours)</source>
<target>群组成员可以不可撤回地删除已发送的消息。</target>
<note>No comment provided by engineer.</note>
</trans-unit>
@@ -2724,6 +2728,10 @@ This cannot be undone!</source>
<target>历史记录</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="History is not sent to new members." xml:space="preserve">
<source>History is not sent to new members.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="How SimpleX works" xml:space="preserve">
<source>How SimpleX works</source>
<target>SimpleX的工作原理</target>
@@ -2923,6 +2931,10 @@ This cannot be undone!</source>
<target>无效的连接链接</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Invalid display name!" xml:space="preserve">
<source>Invalid display name!</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Invalid link" xml:space="preserve">
<source>Invalid link</source>
<note>No comment provided by engineer.</note>
@@ -3583,8 +3595,8 @@ This is your link for group %@!</source>
<target>只有您可以添加消息回应。</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Only you can irreversibly delete messages (your contact can mark them for deletion)." xml:space="preserve">
<source>Only you can irreversibly delete messages (your contact can mark them for deletion).</source>
<trans-unit id="Only you can irreversibly delete messages (your contact can mark them for deletion). (24 hours)" xml:space="preserve">
<source>Only you can irreversibly delete messages (your contact can mark them for deletion). (24 hours)</source>
<target>只有您可以不可撤回地删除消息(您的联系人可以将它们标记为删除)。</target>
<note>No comment provided by engineer.</note>
</trans-unit>
@@ -3608,8 +3620,8 @@ This is your link for group %@!</source>
<target>只有您的联系人可以添加消息回应。</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Only your contact can irreversibly delete messages (you can mark them for deletion)." xml:space="preserve">
<source>Only your contact can irreversibly delete messages (you can mark them for deletion).</source>
<trans-unit id="Only your contact can irreversibly delete messages (you can mark them for deletion). (24 hours)" xml:space="preserve">
<source>Only your contact can irreversibly delete messages (you can mark them for deletion). (24 hours)</source>
<target>只有您的联系人才能不可撤回地删除消息(您可以将它们标记为删除)。</target>
<note>No comment provided by engineer.</note>
</trans-unit>
@@ -4449,6 +4461,10 @@ Error: %@</source>
<target>发送它们来自图库或自定义键盘。</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Send up to 100 last messages to new members." xml:space="preserve">
<source>Send up to 100 last messages to new members.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Sender cancelled file transfer." xml:space="preserve">
<source>Sender cancelled file transfer.</source>
<target>发送人已取消文件传输。</target>
@@ -5062,6 +5078,10 @@ It can happen because of some bug or when the connection is compromised.</source
<source>This device name</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="This display name is invalid. Please choose another name." xml:space="preserve">
<source>This display name is invalid. Please choose another name.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="This group has over %lld members, delivery receipts are not sent." xml:space="preserve">
<source>This group has over %lld members, delivery receipts are not sent.</source>
<target>该组有超过 %lld 个成员,不发送送货单。</target>
@@ -5278,6 +5298,10 @@ To connect, please ask your contact to create another connection link and check
<target>未读</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Up to 100 last messages are sent to new members." xml:space="preserve">
<source>Up to 100 last messages are sent to new members.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Update" xml:space="preserve">
<source>Update</source>
<target>更新</target>
@@ -5442,6 +5466,10 @@ To connect, please ask your contact to create another connection link and check
<target>查看安全码</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="Visible history" xml:space="preserve">
<source>Visible history</source>
<note>chat feature</note>
</trans-unit>
<trans-unit id="Voice messages" xml:space="preserve">
<source>Voice messages</source>
<target>语音消息</target>

View File

@@ -16,9 +16,11 @@ let logger = Logger()
let appSuspendingDelay: UInt64 = 2_500_000_000
let nseSuspendDelay: TimeInterval = 2
typealias SuspendSchedule = (delay: TimeInterval, timeout: Int)
let nseSuspendTimeout: Int = 5
let nseSuspendSchedule: SuspendSchedule = (2, 4)
let fastNSESuspendSchedule: SuspendSchedule = (1, 1)
typealias NtfStream = ConcurrentQueue<NSENotification>
@@ -32,7 +34,7 @@ actor PendingNtfs {
private var ntfStreams: [String: NtfStream] = [:]
func createStream(_ id: String) async {
logger.debug("NotificationService PendingNtfs.createStream: \(id, privacy: .public)")
logger.debug("NotificationService PendingNtfs.createStream: \(id)")
if ntfStreams[id] == nil {
ntfStreams[id] = ConcurrentQueue()
logger.debug("NotificationService PendingNtfs.createStream: created ConcurrentQueue")
@@ -40,14 +42,14 @@ actor PendingNtfs {
}
func readStream(_ id: String, for nse: NotificationService, ntfInfo: NtfMessages) async {
logger.debug("NotificationService PendingNtfs.readStream: \(id, privacy: .public) \(ntfInfo.ntfMessages.count, privacy: .public)")
logger.debug("NotificationService PendingNtfs.readStream: \(id) \(ntfInfo.ntfMessages.count)")
if !ntfInfo.user.showNotifications {
nse.setBestAttemptNtf(.empty)
}
if let s = ntfStreams[id] {
logger.debug("NotificationService PendingNtfs.readStream: has stream")
var expected = Set(ntfInfo.ntfMessages.map { $0.msgId })
logger.debug("NotificationService PendingNtfs.readStream: expecting: \(expected, privacy: .public)")
logger.debug("NotificationService PendingNtfs.readStream: expecting: \(expected)")
var readCancelled = false
var dequeued: DequeueElement<NSENotification>?
nse.cancelRead = {
@@ -66,7 +68,7 @@ actor PendingNtfs {
} else if case let .msgInfo(info) = ntf {
let found = expected.remove(info.msgId)
if found != nil {
logger.debug("NotificationService PendingNtfs.readStream: msgInfo, last: \(expected.isEmpty, privacy: .public)")
logger.debug("NotificationService PendingNtfs.readStream: msgInfo, last: \(expected.isEmpty)")
if expected.isEmpty { break }
} else if let msgTs = ntfInfo.msgTs, info.msgTs > msgTs {
logger.debug("NotificationService PendingNtfs.readStream: unexpected msgInfo")
@@ -88,7 +90,7 @@ actor PendingNtfs {
}
func writeStream(_ id: String, _ ntf: NSENotification) async {
logger.debug("NotificationService PendingNtfs.writeStream: \(id, privacy: .public)")
logger.debug("NotificationService PendingNtfs.writeStream: \(id)")
if let s = ntfStreams[id] {
logger.debug("NotificationService PendingNtfs.writeStream: writing ntf")
s.enqueue(ntf)
@@ -208,7 +210,7 @@ class NotificationService: UNNotificationServiceExtension {
self.contentHandler = contentHandler
registerGroupDefaults()
let appState = appStateGroupDefault.get()
logger.debug("NotificationService: app is \(appState.rawValue, privacy: .public)")
logger.debug("NotificationService: app is \(appState.rawValue)")
switch appState {
case .stopped:
setBadgeCount()
@@ -238,7 +240,7 @@ class NotificationService: UNNotificationServiceExtension {
}
}
}
logger.debug("NotificationService: app state is now \(state.rawValue, privacy: .public)")
logger.debug("NotificationService: app state is now \(state.rawValue)")
if state.inactive {
receiveNtfMessages(request, contentHandler)
} else {
@@ -267,7 +269,7 @@ class NotificationService: UNNotificationServiceExtension {
let dbStatus = startChat()
if case .ok = dbStatus,
let ntfInfo = apiGetNtfMessage(nonce: nonce, encNtfInfo: encNtfInfo) {
logger.debug("NotificationService: receiveNtfMessages: apiGetNtfMessage \(String(describing: ntfInfo.ntfMessages.count), privacy: .public)")
logger.debug("NotificationService: receiveNtfMessages: apiGetNtfMessage \(String(describing: ntfInfo.ntfMessages.count))")
if let connEntity = ntfInfo.connEntity_ {
setBestAttemptNtf(
ntfInfo.ntfsEnabled
@@ -279,7 +281,7 @@ class NotificationService: UNNotificationServiceExtension {
NtfStreamSemaphores.shared.waitForStream(id)
if receiveEntityId != nil {
Task {
logger.debug("NotificationService: receiveNtfMessages: in Task, connEntity id \(id, privacy: .public)")
logger.debug("NotificationService: receiveNtfMessages: in Task, connEntity id \(id)")
await PendingNtfs.shared.createStream(id)
await PendingNtfs.shared.readStream(id, for: self, ntfInfo: ntfInfo)
deliverBestAttemptNtf()
@@ -297,7 +299,7 @@ class NotificationService: UNNotificationServiceExtension {
override func serviceExtensionTimeWillExpire() {
logger.debug("DEBUGGING: NotificationService.serviceExtensionTimeWillExpire")
deliverBestAttemptNtf()
deliverBestAttemptNtf(urgent: true)
}
func setBadgeCount() {
@@ -319,7 +321,7 @@ class NotificationService: UNNotificationServiceExtension {
}
}
private func deliverBestAttemptNtf() {
private func deliverBestAttemptNtf(urgent: Bool = false) {
logger.debug("NotificationService.deliverBestAttemptNtf")
if let cancel = cancelRead {
cancelRead = nil
@@ -329,20 +331,55 @@ class NotificationService: UNNotificationServiceExtension {
receiveEntityId = nil
NtfStreamSemaphores.shared.signalStreamReady(id)
}
let suspend: Bool
if let t = threadId {
threadId = nil
if NSEThreads.shared.endThread(t) {
logger.debug("NotificationService.deliverBestAttemptNtf: will suspend")
// suspension is delayed to allow chat core finalise any processing
// (e.g., send delivery receipts)
DispatchQueue.global().asyncAfter(deadline: .now() + nseSuspendDelay) {
if NSEThreads.shared.noThreads {
logger.debug("NotificationService.deliverBestAttemptNtf: suspending...")
suspendChat(nseSuspendTimeout)
suspend = NSEThreads.shared.endThread(t) && NSEThreads.shared.noThreads
} else {
suspend = false
}
deliverCallkitOrNotification(urgent: urgent, suspend: suspend)
}
private func deliverCallkitOrNotification(urgent: Bool, suspend: Bool = false) {
if case .callkit = bestAttemptNtf {
logger.debug("NotificationService.deliverCallkitOrNotification: will suspend, callkit")
if urgent {
// suspending NSE even though there may be other notifications
// to allow the app to process callkit call
suspendChat(0)
deliverNotification()
} else {
// suspending NSE with delay and delivering after the suspension
// because pushkit notification must be processed without delay
// to avoid app termination
DispatchQueue.global().asyncAfter(deadline: .now() + fastNSESuspendSchedule.delay) {
suspendChat(fastNSESuspendSchedule.timeout)
DispatchQueue.global().asyncAfter(deadline: .now() + Double(fastNSESuspendSchedule.timeout)) {
self.deliverNotification()
}
}
}
} else {
if suspend {
logger.debug("NotificationService.deliverCallkitOrNotification: will suspend")
if urgent {
suspendChat(0)
} else {
// suspension is delayed to allow chat core finalise any processing
// (e.g., send delivery receipts)
DispatchQueue.global().asyncAfter(deadline: .now() + nseSuspendSchedule.delay) {
if NSEThreads.shared.noThreads {
suspendChat(nseSuspendSchedule.timeout)
}
}
}
}
deliverNotification()
}
}
private func deliverNotification() {
if let handler = contentHandler, let ntf = bestAttemptNtf {
contentHandler = nil
bestAttemptNtf = nil
@@ -357,17 +394,14 @@ class NotificationService: UNNotificationServiceExtension {
switch ntf {
case let .nse(content): deliver(content)
case let .callkit(invitation):
logger.debug("NotificationService reportNewIncomingVoIPPushPayload for \(invitation.contact.id)")
CXProvider.reportNewIncomingVoIPPushPayload([
"displayName": invitation.contact.displayName,
"contactId": invitation.contact.id,
"media": invitation.callType.media.rawValue
]) { error in
if error == nil {
deliver(nil)
} else {
logger.debug("NotificationService reportNewIncomingVoIPPushPayload success to CallController for \(invitation.contact.id)")
deliver(createCallInvitationNtf(invitation))
}
logger.debug("reportNewIncomingVoIPPushPayload result: \(error)")
deliver(error == nil ? nil : createCallInvitationNtf(invitation))
}
case .empty: deliver(nil) // used to mute notifications that did not unsubscribe yet
case .msgInfo: deliver(nil) // unreachable, the best attempt is never set to msgInfo
@@ -402,14 +436,14 @@ var appSubscriber: AppSubscriber = appStateSubscriber { state in
logger.debug("NotificationService: appSubscriber")
if state.running && NSEChatState.shared.value.canSuspend {
logger.debug("NotificationService: appSubscriber app state \(state.rawValue), suspending")
suspendChat(nseSuspendTimeout)
suspendChat(fastNSESuspendSchedule.timeout)
}
}
func appStateSubscriber(onState: @escaping (AppState) -> Void) -> AppSubscriber {
appMessageSubscriber { msg in
if case let .state(state) = msg {
logger.debug("NotificationService: appStateSubscriber \(state.rawValue, privacy: .public)")
logger.debug("NotificationService: appStateSubscriber \(state.rawValue)")
onState(state)
}
}
@@ -425,24 +459,33 @@ let xftpConfig: XFTPFileConfig? = getXFTPCfg()
// Subsequent calls to didReceive will be waiting on semaphore and won't start chat again, as it will be .active
func startChat() -> DBMigrationResult? {
logger.debug("NotificationService: startChat")
if case .active = NSEChatState.shared.value { return .ok }
// only skip creating if there is chat controller
if case .active = NSEChatState.shared.value, hasChatCtrl() { return .ok }
startLock.wait()
defer { startLock.signal() }
return switch NSEChatState.shared.value {
case .created: doStartChat()
case .starting: .ok // it should never get to this branch, as it would be waiting for start on startLock
case .active: .ok
case .suspending: activateChat()
case .suspended: activateChat()
if hasChatCtrl() {
return switch NSEChatState.shared.value {
case .created: doStartChat()
case .starting: .ok // it should never get to this branch, as it would be waiting for start on startLock
case .active: .ok
case .suspending: activateChat()
case .suspended: activateChat()
}
} else {
// Ignore state in preference if there is no chat controller.
// State in preference may have failed to update e.g. because of a crash.
NSEChatState.shared.set(.created)
return doStartChat()
}
}
func doStartChat() -> DBMigrationResult? {
logger.debug("NotificationService: doStartChat")
hs_init(0, nil)
haskell_init_nse()
let (_, dbStatus) = chatMigrateInit(confirmMigrations: defaultMigrationConfirmation(), backgroundMode: true)
logger.debug("NotificationService: doStartChat \(String(describing: dbStatus))")
if dbStatus != .ok {
resetChatCtrl()
NSEChatState.shared.set(.created)
@@ -477,7 +520,7 @@ func doStartChat() -> DBMigrationResult? {
return .ok
}
} catch {
logger.error("NotificationService startChat error: \(responseError(error), privacy: .public)")
logger.error("NotificationService startChat error: \(responseError(error))")
}
} else {
logger.debug("NotificationService: no active user")
@@ -504,8 +547,10 @@ func suspendChat(_ timeout: Int) {
logger.debug("NotificationService: suspendChat")
let state = NSEChatState.shared.value
if !state.canSuspend {
logger.error("NotificationService suspendChat called, current state: \(state.rawValue, privacy: .public)")
} else {
logger.error("NotificationService suspendChat called, current state: \(state.rawValue)")
} else if hasChatCtrl() {
// only suspend if we have chat controller to avoid crashes when suspension is
// attempted when chat controller was not created
suspendLock.wait()
defer { suspendLock.signal() }
@@ -571,7 +616,7 @@ private let isInChina = SKStorefront().countryCode == "CHN"
private func useCallKit() -> Bool { !isInChina && callKitEnabledGroupDefault.get() }
func receivedMsgNtf(_ res: ChatResponse) async -> (String, NSENotification)? {
logger.debug("NotificationService receivedMsgNtf: \(res.responseType, privacy: .public)")
logger.debug("NotificationService receivedMsgNtf: \(res.responseType)")
switch res {
case let .contactConnected(user, contact, _):
return (contact.id, .nse(createContactConnectedNtf(user, contact)))
@@ -613,6 +658,9 @@ func receivedMsgNtf(_ res: ChatResponse) async -> (String, NSENotification)? {
case .chatSuspended:
chatSuspended()
return nil
case let .chatError(_, err):
logger.error("NotificationService receivedMsgNtf error: \(String(describing: err))")
return nil
default:
logger.debug("NotificationService receivedMsgNtf ignored event: \(res.responseType)")
return nil
@@ -627,17 +675,22 @@ func updateNetCfg() {
try setNetworkConfig(networkConfig)
networkConfig = newNetConfig
} catch {
logger.error("NotificationService apply changed network config error: \(responseError(error), privacy: .public)")
logger.error("NotificationService apply changed network config error: \(responseError(error))")
}
}
}
func apiGetActiveUser() -> User? {
let r = sendSimpleXCmd(.showActiveUser)
logger.debug("apiGetActiveUser sendSimpleXCmd response: \(String(describing: r))")
logger.debug("apiGetActiveUser sendSimpleXCmd response: \(r.responseType)")
switch r {
case let .activeUser(user): return user
case .chatCmdError(_, .error(.noActiveUser)): return nil
case .chatCmdError(_, .error(.noActiveUser)):
logger.debug("apiGetActiveUser sendSimpleXCmd no active user")
return nil
case let .chatCmdError(_, err):
logger.debug("apiGetActiveUser sendSimpleXCmd error: \(String(describing: err))")
return nil
default:
logger.error("NotificationService apiGetActiveUser unexpected response: \(String(describing: r))")
return nil
@@ -645,7 +698,7 @@ func apiGetActiveUser() -> User? {
}
func apiStartChat() throws -> Bool {
let r = sendSimpleXCmd(.startChat(subscribe: false, expire: false, xftp: false))
let r = sendSimpleXCmd(.startChat(mainApp: false))
switch r {
case .chatStarted: return true
case .chatRunning: return false
@@ -699,11 +752,12 @@ func apiGetNtfMessage(nonce: String, encNtfInfo: String) -> NtfMessages? {
}
let r = sendSimpleXCmd(.apiGetNtfMessage(nonce: nonce, encNtfInfo: encNtfInfo))
if case let .ntfMessages(user, connEntity_, msgTs, ntfMessages) = r, let user = user {
logger.debug("apiGetNtfMessage response ntfMessages: \(ntfMessages.count)")
return NtfMessages(user: user, connEntity_: connEntity_, msgTs: msgTs, ntfMessages: ntfMessages)
} else if case let .chatCmdError(_, error) = r {
logger.debug("apiGetNtfMessage error response: \(String.init(describing: error))")
} else {
logger.debug("apiGetNtfMessage ignored response: \(r.responseType, privacy: .public) \(String.init(describing: r), privacy: .private)")
logger.debug("apiGetNtfMessage ignored response: \(r.responseType) \(String.init(describing: r))")
}
return nil
}

View File

@@ -0,0 +1,9 @@
/* Bundle display name */
"CFBundleDisplayName" = "SimpleX NSE";
/* Bundle name */
"CFBundleName" = "SimpleX NSE";
/* Copyright (human-readable) */
"NSHumanReadableCopyright" = "Telif Hakkı © 2024 SimpleX Chat. Tüm hakları saklıdır.";

View File

@@ -29,6 +29,11 @@
5C116CDC27AABE0400E66D01 /* ContactRequestView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5C116CDB27AABE0400E66D01 /* ContactRequestView.swift */; };
5C13730B28156D2700F43030 /* ContactConnectionView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5C13730A28156D2700F43030 /* ContactConnectionView.swift */; };
5C1A4C1E27A715B700EAD5AD /* ChatItemView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5C1A4C1D27A715B700EAD5AD /* ChatItemView.swift */; };
5C245F372B4ED5BE001CC39F /* libgmpxx.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5C245F322B4ED5BE001CC39F /* libgmpxx.a */; };
5C245F382B4ED5BE001CC39F /* libgmp.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5C245F332B4ED5BE001CC39F /* libgmp.a */; };
5C245F392B4ED5BE001CC39F /* libHSsimplex-chat-5.5.0.1-88BIBmZS0745eqQdRbJ61V-ghc9.6.3.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5C245F342B4ED5BE001CC39F /* libHSsimplex-chat-5.5.0.1-88BIBmZS0745eqQdRbJ61V-ghc9.6.3.a */; };
5C245F3A2B4ED5BE001CC39F /* libffi.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5C245F352B4ED5BE001CC39F /* libffi.a */; };
5C245F3B2B4ED5BE001CC39F /* libHSsimplex-chat-5.5.0.1-88BIBmZS0745eqQdRbJ61V.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5C245F362B4ED5BE001CC39F /* libHSsimplex-chat-5.5.0.1-88BIBmZS0745eqQdRbJ61V.a */; };
5C2E260727A2941F00F70299 /* SimpleXAPI.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5C2E260627A2941F00F70299 /* SimpleXAPI.swift */; };
5C2E260B27A30CFA00F70299 /* ChatListView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5C2E260A27A30CFA00F70299 /* ChatListView.swift */; };
5C2E260F27A30FDC00F70299 /* ChatView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5C2E260E27A30FDC00F70299 /* ChatView.swift */; };
@@ -42,11 +47,6 @@
5C3F1D562842B68D00EC8A82 /* IntegrityErrorItemView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5C3F1D552842B68D00EC8A82 /* IntegrityErrorItemView.swift */; };
5C3F1D58284363C400EC8A82 /* PrivacySettings.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5C3F1D57284363C400EC8A82 /* PrivacySettings.swift */; };
5C4B3B0A285FB130003915F2 /* DatabaseView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5C4B3B09285FB130003915F2 /* DatabaseView.swift */; };
5C4E80E42B40A96C0080FAE2 /* libHSsimplex-chat-5.5.0.0-FwZXD1cMpkc1VLQMq43OyQ.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5C4E80DF2B40A96C0080FAE2 /* libHSsimplex-chat-5.5.0.0-FwZXD1cMpkc1VLQMq43OyQ.a */; };
5C4E80E52B40A96C0080FAE2 /* libHSsimplex-chat-5.5.0.0-FwZXD1cMpkc1VLQMq43OyQ-ghc9.6.3.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5C4E80E02B40A96C0080FAE2 /* libHSsimplex-chat-5.5.0.0-FwZXD1cMpkc1VLQMq43OyQ-ghc9.6.3.a */; };
5C4E80E62B40A96C0080FAE2 /* libgmp.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5C4E80E12B40A96C0080FAE2 /* libgmp.a */; };
5C4E80E72B40A96C0080FAE2 /* libgmpxx.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5C4E80E22B40A96C0080FAE2 /* libgmpxx.a */; };
5C4E80E82B40A96C0080FAE2 /* libffi.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5C4E80E32B40A96C0080FAE2 /* libffi.a */; };
5C5346A827B59A6A004DF848 /* ChatHelp.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5C5346A727B59A6A004DF848 /* ChatHelp.swift */; };
5C55A91F283AD0E400C4E99E /* CallManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5C55A91E283AD0E400C4E99E /* CallManager.swift */; };
5C55A921283CCCB700C4E99E /* IncomingCallView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5C55A920283CCCB700C4E99E /* IncomingCallView.swift */; };
@@ -275,6 +275,14 @@
5C13730A28156D2700F43030 /* ContactConnectionView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContactConnectionView.swift; sourceTree = "<group>"; };
5C13730C2815740A00F43030 /* DebugJSON.playground */ = {isa = PBXFileReference; lastKnownFileType = file.playground; path = DebugJSON.playground; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.swift; };
5C1A4C1D27A715B700EAD5AD /* ChatItemView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChatItemView.swift; sourceTree = "<group>"; };
5C245F322B4ED5BE001CC39F /* libgmpxx.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libgmpxx.a; sourceTree = "<group>"; };
5C245F332B4ED5BE001CC39F /* libgmp.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libgmp.a; sourceTree = "<group>"; };
5C245F342B4ED5BE001CC39F /* libHSsimplex-chat-5.5.0.1-88BIBmZS0745eqQdRbJ61V-ghc9.6.3.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = "libHSsimplex-chat-5.5.0.1-88BIBmZS0745eqQdRbJ61V-ghc9.6.3.a"; sourceTree = "<group>"; };
5C245F352B4ED5BE001CC39F /* libffi.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libffi.a; sourceTree = "<group>"; };
5C245F362B4ED5BE001CC39F /* libHSsimplex-chat-5.5.0.1-88BIBmZS0745eqQdRbJ61V.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = "libHSsimplex-chat-5.5.0.1-88BIBmZS0745eqQdRbJ61V.a"; sourceTree = "<group>"; };
5C245F3C2B501E98001CC39F /* tr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = tr; path = tr.lproj/Localizable.strings; sourceTree = "<group>"; };
5C245F3D2B501F13001CC39F /* tr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = tr; path = "tr.lproj/SimpleX--iOS--InfoPlist.strings"; sourceTree = "<group>"; };
5C245F3E2B501F13001CC39F /* tr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = tr; path = tr.lproj/InfoPlist.strings; sourceTree = "<group>"; };
5C2E260627A2941F00F70299 /* SimpleXAPI.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SimpleXAPI.swift; sourceTree = "<group>"; };
5C2E260A27A30CFA00F70299 /* ChatListView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChatListView.swift; sourceTree = "<group>"; };
5C2E260E27A30FDC00F70299 /* ChatView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChatView.swift; sourceTree = "<group>"; };
@@ -289,11 +297,6 @@
5C3F1D57284363C400EC8A82 /* PrivacySettings.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PrivacySettings.swift; sourceTree = "<group>"; };
5C422A7C27A9A6FA0097A1E1 /* SimpleX (iOS).entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = "SimpleX (iOS).entitlements"; sourceTree = "<group>"; };
5C4B3B09285FB130003915F2 /* DatabaseView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DatabaseView.swift; sourceTree = "<group>"; };
5C4E80DF2B40A96C0080FAE2 /* libHSsimplex-chat-5.5.0.0-FwZXD1cMpkc1VLQMq43OyQ.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = "libHSsimplex-chat-5.5.0.0-FwZXD1cMpkc1VLQMq43OyQ.a"; sourceTree = "<group>"; };
5C4E80E02B40A96C0080FAE2 /* libHSsimplex-chat-5.5.0.0-FwZXD1cMpkc1VLQMq43OyQ-ghc9.6.3.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = "libHSsimplex-chat-5.5.0.0-FwZXD1cMpkc1VLQMq43OyQ-ghc9.6.3.a"; sourceTree = "<group>"; };
5C4E80E12B40A96C0080FAE2 /* libgmp.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libgmp.a; sourceTree = "<group>"; };
5C4E80E22B40A96C0080FAE2 /* libgmpxx.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libgmpxx.a; sourceTree = "<group>"; };
5C4E80E32B40A96C0080FAE2 /* libffi.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libffi.a; sourceTree = "<group>"; };
5C5346A727B59A6A004DF848 /* ChatHelp.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChatHelp.swift; sourceTree = "<group>"; };
5C55A91E283AD0E400C4E99E /* CallManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CallManager.swift; sourceTree = "<group>"; };
5C55A920283CCCB700C4E99E /* IncomingCallView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = IncomingCallView.swift; sourceTree = "<group>"; };
@@ -511,13 +514,13 @@
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
5C4E80E72B40A96C0080FAE2 /* libgmpxx.a in Frameworks */,
5C245F372B4ED5BE001CC39F /* libgmpxx.a in Frameworks */,
5C245F3A2B4ED5BE001CC39F /* libffi.a in Frameworks */,
5CE2BA93284534B000EC33A6 /* libiconv.tbd in Frameworks */,
5C4E80E62B40A96C0080FAE2 /* libgmp.a in Frameworks */,
5C245F382B4ED5BE001CC39F /* libgmp.a in Frameworks */,
5CE2BA94284534BB00EC33A6 /* libz.tbd in Frameworks */,
5C4E80E82B40A96C0080FAE2 /* libffi.a in Frameworks */,
5C4E80E52B40A96C0080FAE2 /* libHSsimplex-chat-5.5.0.0-FwZXD1cMpkc1VLQMq43OyQ-ghc9.6.3.a in Frameworks */,
5C4E80E42B40A96C0080FAE2 /* libHSsimplex-chat-5.5.0.0-FwZXD1cMpkc1VLQMq43OyQ.a in Frameworks */,
5C245F3B2B4ED5BE001CC39F /* libHSsimplex-chat-5.5.0.1-88BIBmZS0745eqQdRbJ61V.a in Frameworks */,
5C245F392B4ED5BE001CC39F /* libHSsimplex-chat-5.5.0.1-88BIBmZS0745eqQdRbJ61V-ghc9.6.3.a in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -579,11 +582,11 @@
5C764E5C279C70B7000C6508 /* Libraries */ = {
isa = PBXGroup;
children = (
5C4E80E32B40A96C0080FAE2 /* libffi.a */,
5C4E80E12B40A96C0080FAE2 /* libgmp.a */,
5C4E80E22B40A96C0080FAE2 /* libgmpxx.a */,
5C4E80E02B40A96C0080FAE2 /* libHSsimplex-chat-5.5.0.0-FwZXD1cMpkc1VLQMq43OyQ-ghc9.6.3.a */,
5C4E80DF2B40A96C0080FAE2 /* libHSsimplex-chat-5.5.0.0-FwZXD1cMpkc1VLQMq43OyQ.a */,
5C245F352B4ED5BE001CC39F /* libffi.a */,
5C245F332B4ED5BE001CC39F /* libgmp.a */,
5C245F322B4ED5BE001CC39F /* libgmpxx.a */,
5C245F342B4ED5BE001CC39F /* libHSsimplex-chat-5.5.0.1-88BIBmZS0745eqQdRbJ61V-ghc9.6.3.a */,
5C245F362B4ED5BE001CC39F /* libHSsimplex-chat-5.5.0.1-88BIBmZS0745eqQdRbJ61V.a */,
);
path = Libraries;
sourceTree = "<group>";
@@ -1039,6 +1042,7 @@
fi,
uk,
bg,
tr,
);
mainGroup = 5CA059BD279559F40002BEB4;
packageReferences = (
@@ -1326,6 +1330,7 @@
5C136D8F2AAB3D14006DE2FC /* fi */,
5C636F672AAB3D2400751C84 /* uk */,
5C5B67932ABAF56000DA9412 /* bg */,
5C245F3E2B501F13001CC39F /* tr */,
);
name = InfoPlist.strings;
sourceTree = "<group>";
@@ -1348,6 +1353,7 @@
5CE6C7B32AAB1515007F345C /* fi */,
5CE6C7B42AAB1527007F345C /* uk */,
5C5B67912ABAF4B500DA9412 /* bg */,
5C245F3C2B501E98001CC39F /* tr */,
);
name = Localizable.strings;
sourceTree = "<group>";
@@ -1369,6 +1375,7 @@
5C136D8E2AAB3D14006DE2FC /* fi */,
5C636F662AAB3D2400751C84 /* uk */,
5C5B67922ABAF56000DA9412 /* bg */,
5C245F3D2B501F13001CC39F /* tr */,
);
name = "SimpleX--iOS--InfoPlist.strings";
sourceTree = "<group>";
@@ -1502,7 +1509,7 @@
CLANG_ENABLE_MODULES = YES;
CODE_SIGN_ENTITLEMENTS = "SimpleX (iOS).entitlements";
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 187;
CURRENT_PROJECT_VERSION = 189;
DEVELOPMENT_TEAM = 5NN7GUYB6T;
ENABLE_BITCODE = NO;
ENABLE_PREVIEWS = YES;
@@ -1545,7 +1552,7 @@
CLANG_ENABLE_MODULES = YES;
CODE_SIGN_ENTITLEMENTS = "SimpleX (iOS).entitlements";
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 187;
CURRENT_PROJECT_VERSION = 189;
DEVELOPMENT_TEAM = 5NN7GUYB6T;
ENABLE_BITCODE = NO;
ENABLE_PREVIEWS = YES;
@@ -1626,7 +1633,7 @@
CODE_SIGN_ENTITLEMENTS = "SimpleX NSE/SimpleX NSE.entitlements";
CODE_SIGN_IDENTITY = "Apple Development";
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 187;
CURRENT_PROJECT_VERSION = 189;
DEVELOPMENT_TEAM = 5NN7GUYB6T;
ENABLE_BITCODE = NO;
GENERATE_INFOPLIST_FILE = YES;
@@ -1658,7 +1665,7 @@
CODE_SIGN_ENTITLEMENTS = "SimpleX NSE/SimpleX NSE.entitlements";
CODE_SIGN_IDENTITY = "Apple Development";
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 187;
CURRENT_PROJECT_VERSION = 189;
DEVELOPMENT_TEAM = 5NN7GUYB6T;
ENABLE_BITCODE = NO;
GENERATE_INFOPLIST_FILE = YES;
@@ -1690,7 +1697,7 @@
APPLICATION_EXTENSION_API_ONLY = YES;
CLANG_ENABLE_MODULES = YES;
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 187;
CURRENT_PROJECT_VERSION = 189;
DEFINES_MODULE = YES;
DEVELOPMENT_TEAM = 5NN7GUYB6T;
DYLIB_COMPATIBILITY_VERSION = 1;
@@ -1736,7 +1743,7 @@
APPLICATION_EXTENSION_API_ONLY = YES;
CLANG_ENABLE_MODULES = YES;
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 187;
CURRENT_PROJECT_VERSION = 189;
DEFINES_MODULE = YES;
DEVELOPMENT_TEAM = 5NN7GUYB6T;
DYLIB_COMPATIBILITY_VERSION = 1;

View File

@@ -41,7 +41,7 @@
</Testables>
</TestAction>
<LaunchAction
buildConfiguration = "Release"
buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
launchStyle = "0"

View File

@@ -2,7 +2,7 @@
<Scheme
LastUpgradeVersion = "1400"
wasCreatedForAppExtension = "YES"
version = "2.0">
version = "1.3">
<BuildAction
parallelizeBuildables = "YES"
buildImplicitDependencies = "YES">
@@ -47,16 +47,14 @@
</TestAction>
<LaunchAction
buildConfiguration = "Debug"
selectedDebuggerIdentifier = ""
selectedLauncherIdentifier = "Xcode.IDEFoundation.Launcher.PosixSpawn"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
launchStyle = "0"
askForAppToLaunch = "Yes"
useCustomWorkingDirectory = "NO"
ignoresPersistentStateOnLaunch = "NO"
debugDocumentVersioning = "YES"
debugServiceExtension = "internal"
allowLocationSimulation = "YES"
launchAutomaticallySubstyle = "2">
allowLocationSimulation = "YES">
<BuildableProductRunnable
runnableDebuggingMode = "0">
<BuildableReference

View File

@@ -12,7 +12,11 @@ private var chatController: chat_ctrl?
private var migrationResult: (Bool, DBMigrationResult)?
public func getChatCtrl(_ useKey: String? = nil) -> chat_ctrl {
public func hasChatCtrl() -> Bool {
chatController != nil
}
public func getChatCtrl() -> chat_ctrl {
if let controller = chatController { return controller }
fatalError("chat controller not initialized")
}

View File

@@ -25,7 +25,7 @@ public enum ChatCommand {
case apiMuteUser(userId: Int64)
case apiUnmuteUser(userId: Int64)
case apiDeleteUser(userId: Int64, delSMPQueues: Bool, viewPwd: String?)
case startChat(subscribe: Bool, expire: Bool, xftp: Bool)
case startChat(mainApp: Bool)
case apiStopChat
case apiActivateChat(restoreChat: Bool)
case apiSuspendChat(timeoutMicroseconds: Int)
@@ -154,7 +154,7 @@ public enum ChatCommand {
case let .apiMuteUser(userId): return "/_mute user \(userId)"
case let .apiUnmuteUser(userId): return "/_unmute user \(userId)"
case let .apiDeleteUser(userId, delSMPQueues, viewPwd): return "/_delete user \(userId) del_smp=\(onOff(delSMPQueues))\(maybePwd(viewPwd))"
case let .startChat(subscribe, expire, xftp): return "/_start subscribe=\(onOff(subscribe)) expire=\(onOff(expire)) xftp=\(onOff(xftp))"
case let .startChat(mainApp): return "/_start main=\(onOff(mainApp))"
case .apiStopChat: return "/_stop"
case let .apiActivateChat(restore): return "/_app activate restore=\(onOff(restore))"
case let .apiSuspendChat(timeoutMicroseconds): return "/_app suspend \(timeoutMicroseconds)"
@@ -1610,6 +1610,7 @@ public enum ChatErrorType: Decodable {
case userUnknown
case activeUserExists
case userExists
case invalidDisplayName
case differentActiveUser(commandUserId: Int64, activeUserId: Int64)
case cantDeleteActiveUser(userId: Int64)
case cantDeleteLastUser(userId: Int64)

View File

@@ -172,7 +172,6 @@ public func fromLocalProfile (_ profile: LocalProfile) -> Profile {
}
public struct UserProfileUpdateSummary: Decodable {
public var notChanged: Int
public var updateSuccesses: Int
public var updateFailures: Int
public var changedContacts: [Contact]
@@ -1802,7 +1801,8 @@ public struct GroupMember: Identifiable, Decodable {
public var displayName: String {
get {
let p = memberProfile
return p.localAlias == "" ? p.displayName : p.localAlias
let name = p.localAlias == "" ? p.displayName : p.localAlias
return pastMember(name)
}
}
public var fullName: String { get { memberProfile.fullName } }
@@ -1823,17 +1823,27 @@ public struct GroupMember: Identifiable, Decodable {
public var chatViewName: String {
get {
let p = memberProfile
return p.localAlias == ""
? p.displayName + (p.fullName == "" || p.fullName == p.displayName ? "" : " / \(p.fullName)")
: p.localAlias
let name = (
p.localAlias == ""
? p.displayName + (p.fullName == "" || p.fullName == p.displayName ? "" : " / \(p.fullName)")
: p.localAlias
)
return pastMember(name)
}
}
private func pastMember(_ name: String) -> String {
memberStatus == .memUnknown
? String.localizedStringWithFormat(NSLocalizedString("Past member %@", comment: "past/unknown group member"), name)
: name
}
public var memberActive: Bool {
switch memberStatus {
case .memRemoved: return false
case .memLeft: return false
case .memGroupDeleted: return false
case .memUnknown: return false
case .memInvited: return false
case .memIntroduced: return false
case .memIntroInvited: return false
@@ -1850,6 +1860,7 @@ public struct GroupMember: Identifiable, Decodable {
case .memRemoved: return false
case .memLeft: return false
case .memGroupDeleted: return false
case .memUnknown: return false
case .memInvited: return false
case .memIntroduced: return true
case .memIntroInvited: return true
@@ -1954,6 +1965,7 @@ public enum GroupMemberStatus: String, Decodable {
case memRemoved = "removed"
case memLeft = "left"
case memGroupDeleted = "deleted"
case memUnknown = "unknown"
case memInvited = "invited"
case memIntroduced = "introduced"
case memIntroInvited = "intro-inv"
@@ -1968,6 +1980,7 @@ public enum GroupMemberStatus: String, Decodable {
case .memRemoved: return "removed"
case .memLeft: return "left"
case .memGroupDeleted: return "group deleted"
case .memUnknown: return "unknown status"
case .memInvited: return "invited"
case .memIntroduced: return "connecting (introduced)"
case .memIntroInvited: return "connecting (introduction invitation)"
@@ -1984,6 +1997,7 @@ public enum GroupMemberStatus: String, Decodable {
case .memRemoved: return "removed"
case .memLeft: return "left"
case .memGroupDeleted: return "group deleted"
case .memUnknown: return "unknown"
case .memInvited: return "invited"
case .memIntroduced: return "connecting"
case .memIntroInvited: return "connecting"

View File

@@ -69,13 +69,29 @@ func fileModificationDate(_ path: String) -> Date? {
}
}
public func deleteAppDatabaseAndFiles() {
let fm = FileManager.default
let dbPath = getAppDatabasePath().path
do {
try fm.removeItem(atPath: dbPath + CHAT_DB)
try fm.removeItem(atPath: dbPath + AGENT_DB)
} catch let error {
logger.error("Failed to delete all databases: \(error)")
}
try? fm.removeItem(atPath: dbPath + CHAT_DB_BAK)
try? fm.removeItem(atPath: dbPath + AGENT_DB_BAK)
try? fm.removeItem(at: getTempFilesDirectory())
try? fm.createDirectory(at: getTempFilesDirectory(), withIntermediateDirectories: true)
deleteAppFiles()
_ = kcDatabasePassword.remove()
storeDBPassphraseGroupDefault.set(true)
}
public func deleteAppFiles() {
let fm = FileManager.default
do {
let fileNames = try fm.contentsOfDirectory(atPath: getAppFilesDirectory().path)
for fileName in fileNames {
removeFile(fileName)
}
try fm.removeItem(at: getAppFilesDirectory())
try fm.createDirectory(at: getAppFilesDirectory(), withIntermediateDirectories: true)
} catch {
logger.error("FileUtils deleteAppFiles error: \(error.localizedDescription)")
}

View File

@@ -23,3 +23,19 @@ void haskell_init(void) {
char **pargv = argv;
hs_init_with_rtsopts(&argc, &pargv);
}
void haskell_init_nse(void) {
int argc = 7;
char *argv[] = {
"simplex",
"+RTS", // requires `hs_init_with_rtsopts`
"-A1m", // chunk size for new allocations
"-H1m", // initial heap size
"-F0.5", // heap growth triggering GC
"-Fd1", // memory return
"-c", // compacting garbage collector
0
};
char **pargv = argv;
hs_init_with_rtsopts(&argc, &pargv);
}

View File

@@ -11,4 +11,6 @@
void haskell_init(void);
void haskell_init_nse(void);
#endif /* hs_init_h */

File diff suppressed because it is too large Load Diff

View File

@@ -7,6 +7,9 @@
/* Privacy - Face ID Usage Description */
"NSFaceIDUsageDescription" = "SimpleX използва Face ID за локалнa идентификация";
/* Privacy - Local Network Usage Description */
"NSLocalNetworkUsageDescription" = "SimpleX използва достъп до локална мрежа, за да позволи използването на потребителския чат профил чрез настолно приложение в същата мрежа.";
/* Privacy - Microphone Usage Description */
"NSMicrophoneUsageDescription" = "SimpleX се нуждае от достъп до микрофона за аудио и видео разговори и за запис на гласови съобщения.";

View File

@@ -58,9 +58,6 @@
/* No comment provided by engineer. */
"**Add new contact**: to create your one-time QR Code for your contact." = "**Přidat nový kontakt**: pro vytvoření jednorázového QR kódu nebo odkazu pro váš kontakt.";
/* No comment provided by engineer. */
"**Create link / QR code** for your contact to use." = "**Vytvořte odkaz / QR kód** pro váš kontakt.";
/* No comment provided by engineer. */
"**e2e encrypted** audio call" = "**e2e šifrovaný** audio hovor";
@@ -73,18 +70,12 @@
/* No comment provided by engineer. */
"**Most private**: do not use SimpleX Chat notifications server, check messages periodically in the background (depends on how often you use the app)." = "**Nejsoukromější**: nepoužívejte server oznámení SimpleX Chat, pravidelně kontrolujte zprávy na pozadí (závisí na tom, jak často aplikaci používáte).";
/* No comment provided by engineer. */
"**Paste received link** or open it in the browser and tap **Open in mobile app**." = "**Vložte přijatý odkaz** nebo jej otevřete v prohlížeči a klepněte na **Otevřít v mobilní aplikaci**.";
/* No comment provided by engineer. */
"**Please note**: you will NOT be able to recover or change passphrase if you lose it." = "**Upozornění**: Pokud heslo ztratíte, NEBUDETE jej moci obnovit ani změnit.";
/* No comment provided by engineer. */
"**Recommended**: device token and notifications are sent to SimpleX Chat notification server, but not the message content, size or who it is from." = "**Doporučeno**: Token zařízení a oznámení se odesílají na oznamovací server SimpleX Chat, ale nikoli obsah, velikost nebo od koho jsou zprávy.";
/* No comment provided by engineer. */
"**Scan QR code**: to connect to your contact in person or via video call." = "** Naskenujte QR kód**: pro připojení ke kontaktu osobně nebo prostřednictvím videohovoru.";
/* No comment provided by engineer. */
"**Warning**: Instant push notifications require passphrase saved in Keychain." = "**Upozornění**: Okamžitě doručovaná oznámení vyžadují přístupové heslo uložené v Klíčence.";
@@ -118,12 +109,18 @@
/* No comment provided by engineer. */
"%@ %@" = "%@ %@";
/* No comment provided by engineer. */
"%@ and %@" = "%@ a %@";
/* No comment provided by engineer. */
"%@ and %@ connected" = "%@ a %@ připojen";
/* copied message info, <sender> at <time> */
"%@ at %@:" = "%1$@ na %2$@:";
/* No comment provided by engineer. */
"%@ connected" = "%@ připojen";
/* notification title */
"%@ is connected!" = "%@ je připojen!";
@@ -247,9 +244,6 @@
/* time interval */
"1 week" = "1 týden";
/* No comment provided by engineer. */
"1-time link" = "Jednorázový odkaz";
/* No comment provided by engineer. */
"5 minutes" = "5 minut";
@@ -387,7 +381,7 @@
"Allow disappearing messages only if your contact allows it to you." = "Povolte mizící zprávy, pouze pokud vám to váš kontakt dovolí.";
/* No comment provided by engineer. */
"Allow irreversible message deletion only if your contact allows it to you." = "Povolte nevratné smazání zprávy pouze v případě, že vám to váš kontakt dovolí.";
"Allow irreversible message deletion only if your contact allows it to you. (24 hours)" = "Povolte nevratné smazání zprávy pouze v případě, že vám to váš kontakt dovolí. (24 hodin)";
/* No comment provided by engineer. */
"Allow message reactions only if your contact allows them." = "Povolit reakce na zprávy, pokud je váš kontakt povolí.";
@@ -402,7 +396,7 @@
"Allow sending disappearing messages." = "Povolit odesílání mizících zpráv.";
/* No comment provided by engineer. */
"Allow to irreversibly delete sent messages." = "Povolit nevratné smazání odeslaných zpráv.";
"Allow to irreversibly delete sent messages. (24 hours)" = "Povolit nevratné smazání odeslaných zpráv. (24 hodin)";
/* No comment provided by engineer. */
"Allow to send files and media." = "Povolit odesílání souborů a médii.";
@@ -423,7 +417,7 @@
"Allow your contacts to call you." = "Povolte svým kontaktům vám volat.";
/* No comment provided by engineer. */
"Allow your contacts to irreversibly delete sent messages." = "Umožněte svým kontaktům nevratně odstranit odeslané zprávy.";
"Allow your contacts to irreversibly delete sent messages. (24 hours)" = "Umožněte svým kontaktům nevratně odstranit odeslané zprávy. (24 hodin)";
/* No comment provided by engineer. */
"Allow your contacts to send disappearing messages." = "Umožněte svým kontaktům odesílat mizící zprávy.";
@@ -534,7 +528,7 @@
"Both you and your contact can add message reactions." = "Vy i váš kontakt můžete přidávat reakce na zprávy.";
/* No comment provided by engineer. */
"Both you and your contact can irreversibly delete sent messages." = "Vy i váš kontakt můžete nevratně mazat odeslané zprávy.";
"Both you and your contact can irreversibly delete sent messages. (24 hours)" = "Vy i váš kontakt můžete nevratně mazat odeslané zprávy. (24 hodin)";
/* No comment provided by engineer. */
"Both you and your contact can make calls." = "Volat můžete vy i váš kontakt.";
@@ -729,9 +723,6 @@
/* No comment provided by engineer. */
"Connect via link" = "Připojte se prostřednictvím odkazu";
/* No comment provided by engineer. */
"Connect via link / QR code" = "Připojit se prostřednictvím odkazu / QR kódu";
/* No comment provided by engineer. */
"Connect via one-time link" = "Připojit se jednorázovým odkazem";
@@ -849,9 +840,6 @@
/* No comment provided by engineer. */
"Create new profile in [desktop app](https://simplex.chat/downloads/). 💻" = "Vytvořit nový profil v [desktop app](https://simplex.chat/downloads/). 💻";
/* No comment provided by engineer. */
"Create one-time invitation link" = "Vytvořit jednorázovou pozvánku";
/* server test step */
"Create queue" = "Vytvořit frontu";
@@ -1621,7 +1609,7 @@
"Group members can add message reactions." = "Členové skupin mohou přidávat reakce na zprávy.";
/* No comment provided by engineer. */
"Group members can irreversibly delete sent messages." = "Členové skupiny mohou nevratně mazat odeslané zprávy.";
"Group members can irreversibly delete sent messages. (24 hours)" = "Členové skupiny mohou nevratně mazat odeslané zprávy. (24 hodin)";
/* No comment provided by engineer. */
"Group members can send direct messages." = "Členové skupiny mohou posílat přímé zprávy.";
@@ -1713,9 +1701,6 @@
/* No comment provided by engineer. */
"If you can't meet in person, show QR code in a video call, or share the link." = "Pokud se nemůžete setkat osobně, zobrazte QR kód ve videohovoru nebo sdílejte odkaz.";
/* No comment provided by engineer. */
"If you cannot meet in person, you can **scan QR code in the video call**, or your contact can share an invitation link." = "Pokud se nemůžete setkat osobně, můžete **naskenovat QR kód během videohovoru**, nebo váš kontakt může sdílet odkaz na pozvánku.";
/* No comment provided by engineer. */
"If you enter this passcode when opening the app, all app data will be irreversibly removed!" = "Pokud tento přístupový kód zadáte při otevření aplikace, všechna data budou nenávratně smazána!";
@@ -2268,7 +2253,7 @@
"Only you can add message reactions." = "Reakce na zprávy můžete přidávat pouze vy.";
/* No comment provided by engineer. */
"Only you can irreversibly delete messages (your contact can mark them for deletion)." = "Nevratně mazat zprávy můžete pouze vy (váš kontakt je může označit ke smazání).";
"Only you can irreversibly delete messages (your contact can mark them for deletion). (24 hours)" = "Nevratně mazat zprávy můžete pouze vy (váš kontakt je může označit ke smazání). (24 hodin)";
/* No comment provided by engineer. */
"Only you can make calls." = "Volat můžete pouze vy.";
@@ -2283,7 +2268,7 @@
"Only your contact can add message reactions." = "Reakce na zprávy může přidávat pouze váš kontakt.";
/* No comment provided by engineer. */
"Only your contact can irreversibly delete messages (you can mark them for deletion)." = "Nevratně mazat zprávy může pouze váš kontakt (vy je můžete označit ke smazání).";
"Only your contact can irreversibly delete messages (you can mark them for deletion). (24 hours)" = "Nevratně mazat zprávy může pouze váš kontakt (vy je můžete označit ke smazání). (24 hodin)";
/* No comment provided by engineer. */
"Only your contact can make calls." = "Volat může pouze váš kontakt.";
@@ -2333,18 +2318,9 @@
/* No comment provided by engineer. */
"Password to show" = "Heslo k zobrazení";
/* No comment provided by engineer. */
"Paste" = "Vložit";
/* No comment provided by engineer. */
"Paste image" = "Vložit obrázek";
/* No comment provided by engineer. */
"Paste received link" = "Vložení přijatého odkazu";
/* placeholder */
"Paste the link you received to connect with your contact." = "Vložte odkaz, který jste obdrželi, do pole níže a spojte se se svým kontaktem.";
/* No comment provided by engineer. */
"peer-to-peer" = "peer-to-peer";
@@ -2894,9 +2870,6 @@
/* No comment provided by engineer. */
"Share link" = "Sdílet odkaz";
/* No comment provided by engineer. */
"Share one-time invitation link" = "Jednorázový zvací odkaz";
/* No comment provided by engineer. */
"Share with contacts" = "Sdílet s kontakty";
@@ -2972,9 +2945,6 @@
/* notification title */
"Somebody" = "Někdo";
/* No comment provided by engineer. */
"Start a new chat" = "Začít nový chat";
/* No comment provided by engineer. */
"Start chat" = "Začít chat";
@@ -3479,9 +3449,6 @@
/* No comment provided by engineer. */
"You can accept calls from lock screen, without device and app authentication." = "Můžete přijímat hovory z obrazovky zámku, bez ověření zařízení a aplikace.";
/* No comment provided by engineer. */
"You can also connect by clicking the link. If it opens in the browser, click **Open in mobile app** button." = "Můžete se také připojit kliknutím na odkaz. Pokud se otevře v prohlížeči, klikněte na tlačítko **Otevřít v mobilní aplikaci**.";
/* No comment provided by engineer. */
"You can create it later" = "Můžete vytvořit později";

View File

@@ -29,7 +29,7 @@
"- optionally notify deleted contacts.\n- profile names with spaces.\n- and more!" = "- Optionale Benachrichtigung von gelöschten Kontakten.\n- Profilnamen mit Leerzeichen.\n- Und mehr!";
/* No comment provided by engineer. */
"- voice messages up to 5 minutes.\n- custom time to disappear.\n- editing history." = "- Bis zu 5 Minuten lange Sprachnachrichten.\n- Zeitdauer für verschwindende Nachrichten anpassen.\n- Nachrichten-Historie bearbeiten.";
"- voice messages up to 5 minutes.\n- custom time to disappear.\n- editing history." = "- Bis zu 5 Minuten lange Sprachnachrichten.\n- Zeitdauer für verschwindende Nachrichten anpassen.\n- Nachrichten-Verlauf bearbeiten.";
/* No comment provided by engineer. */
", " = ", ";
@@ -65,10 +65,13 @@
"[Star on GitHub](https://github.com/simplex-chat/simplex-chat)" = "[Stern auf GitHub vergeben](https://github.com/simplex-chat/simplex-chat)";
/* No comment provided by engineer. */
"**Add new contact**: to create your one-time QR Code for your contact." = "**Fügen Sie einen neuen Kontakt hinzu**: Erzeugen Sie einen Einmal-QR-Code oder -Link für Ihren Kontakt.";
"**Add contact**: to create a new invitation link, or connect via a link you received." = "**Kontakt hinzufügen**: Um einen neuen Einladungslink zu erstellen oder eine Verbindung über einen Link herzustellen, den Sie erhalten haben.";
/* No comment provided by engineer. */
"**Create link / QR code** for your contact to use." = "**Generieren Sie einen Einladungs-Link / QR code** für Ihren Kontakt.";
"**Add new contact**: to create your one-time QR Code for your contact." = "**Neuen Kontakt hinzufügen**: Um einen Einmal-QR-Code oder -Link für Ihren Kontakt zu erzeugen.";
/* No comment provided by engineer. */
"**Create group**: to create a new group." = "**Gruppe erstellen**: Um eine neue Gruppe zu erstellen.";
/* No comment provided by engineer. */
"**e2e encrypted** audio call" = "**E2E-verschlüsselter** Audioanruf";
@@ -82,18 +85,12 @@
/* No comment provided by engineer. */
"**Most private**: do not use SimpleX Chat notifications server, check messages periodically in the background (depends on how often you use the app)." = "**Beste Privatsphäre**: Es wird kein SimpleX-Chat-Benachrichtigungs-Server genutzt, Nachrichten werden in periodischen Abständen im Hintergrund geprüft (dies hängt davon ab, wie häufig Sie die App nutzen).";
/* No comment provided by engineer. */
"**Paste received link** or open it in the browser and tap **Open in mobile app**." = "**Fügen Sie den von Ihrem Kontakt erhaltenen Link ein** oder öffnen Sie ihn im Browser und tippen Sie auf **In mobiler App öffnen**.";
/* No comment provided by engineer. */
"**Please note**: you will NOT be able to recover or change passphrase if you lose it." = "**Bitte beachten Sie**: Das Passwort kann NICHT wiederhergestellt oder geändert werden, wenn Sie es vergessen haben oder verlieren.";
/* No comment provided by engineer. */
"**Recommended**: device token and notifications are sent to SimpleX Chat notification server, but not the message content, size or who it is from." = "**Empfohlen**: Nur Ihr Geräte-Token und ihre Benachrichtigungen werden an den SimpleX-Chat-Benachrichtigungs-Server gesendet, aber weder der Nachrichteninhalt noch deren Größe oder von wem sie gesendet wurde.";
/* No comment provided by engineer. */
"**Scan QR code**: to connect to your contact in person or via video call." = "**Scannen Sie den QR-Code**, um sich während einem persönlichen Treffen oder per Videoanruf mit Ihrem Kontakt zu verbinden.";
/* No comment provided by engineer. */
"**Warning**: Instant push notifications require passphrase saved in Keychain." = "**Warnung**: Sofortige Push-Benachrichtigungen erfordern die Eingabe eines Passworts, welches in Ihrem Schlüsselbund gespeichert ist.";
@@ -104,7 +101,7 @@
"# %@" = "# %@";
/* copied message info */
"## History" = "## Vergangenheit";
"## History" = "## Verlauf";
/* copied message info */
"## In reply to" = "## Als Antwort auf";
@@ -280,9 +277,6 @@
/* time interval */
"1 week" = "wöchentlich";
/* No comment provided by engineer. */
"1-time link" = "Einmal-Link";
/* No comment provided by engineer. */
"5 minutes" = "5 Minuten";
@@ -311,10 +305,10 @@
"Abort" = "Abbrechen";
/* No comment provided by engineer. */
"Abort changing address" = "Wechsel der Adresse abbrechen";
"Abort changing address" = "Wechsel der Empfängeradresse abbrechen";
/* No comment provided by engineer. */
"Abort changing address?" = "Wechsel der Adresse abbrechen?";
"Abort changing address?" = "Wechsel der Empfängeradresse abbrechen?";
/* No comment provided by engineer. */
"About SimpleX" = "Über SimpleX";
@@ -348,7 +342,10 @@
"accepted call" = "Anruf angenommen";
/* No comment provided by engineer. */
"Add address to your profile, so that your contacts can share it with other people. Profile update will be sent to your contacts." = "Fügen Sie die Adresse zu Ihrem Profil hinzu, damit Ihre Kontakte sie mit anderen Personen teilen können. Es wird eine Profilaktualisierung an Ihre Kontakte gesendet.";
"Add address to your profile, so that your contacts can share it with other people. Profile update will be sent to your contacts." = "Fügen Sie die Adresse Ihrem Profil hinzu, damit Ihre Kontakte sie mit anderen Personen teilen können. Es wird eine Profilaktualisierung an Ihre Kontakte gesendet.";
/* No comment provided by engineer. */
"Add contact" = "Kontakt hinzufügen";
/* No comment provided by engineer. */
"Add preset servers" = "Füge voreingestellte Server hinzu";
@@ -372,7 +369,7 @@
"Address" = "Adresse";
/* No comment provided by engineer. */
"Address change will be aborted. Old receiving address will be used." = "Der Wechsel der Adresse wird abgebrochen. Die bisherige Adresse wird weiter verwendet.";
"Address change will be aborted. Old receiving address will be used." = "Der Wechsel der Empfängeradresse wird abgebrochen. Die bisherige Adresse wird weiter verwendet.";
/* member role */
"admin" = "Admin";
@@ -420,10 +417,10 @@
"Allow calls only if your contact allows them." = "Erlauben Sie Anrufe nur dann, wenn es Ihr Kontakt ebenfalls erlaubt.";
/* No comment provided by engineer. */
"Allow disappearing messages only if your contact allows it to you." = "Erlauben Sie verschwindende Nachrichten nur dann, wenn es Ihnen Ihr Kontakt ebenfalls erlaubt.";
"Allow disappearing messages only if your contact allows it to you." = "Erlauben Sie verschwindende Nachrichten nur dann, wenn es Ihr Kontakt ebenfalls erlaubt.";
/* No comment provided by engineer. */
"Allow irreversible message deletion only if your contact allows it to you." = "Erlauben Sie das unwiederbringliche Löschen von Nachrichten nur dann, wenn es Ihnen Ihr Kontakt ebenfalls erlaubt.";
"Allow irreversible message deletion only if your contact allows it to you. (24 hours)" = "Erlauben Sie das unwiederbringliche Löschen von Nachrichten nur dann, wenn es Ihnen Ihr Kontakt ebenfalls erlaubt. (24 Stunden)";
/* No comment provided by engineer. */
"Allow message reactions only if your contact allows them." = "Erlauben Sie Reaktionen auf Nachrichten nur dann, wenn es Ihr Kontakt ebenfalls erlaubt.";
@@ -438,7 +435,7 @@
"Allow sending disappearing messages." = "Das Senden von verschwindenden Nachrichten erlauben.";
/* No comment provided by engineer. */
"Allow to irreversibly delete sent messages." = "Unwiederbringliches löschen von gesendeten Nachrichten erlauben.";
"Allow to irreversibly delete sent messages. (24 hours)" = "Unwiederbringliches löschen von gesendeten Nachrichten erlauben. (24 Stunden)";
/* No comment provided by engineer. */
"Allow to send files and media." = "Das Senden von Dateien und Medien erlauben.";
@@ -459,7 +456,7 @@
"Allow your contacts to call you." = "Erlaubt Ihren Kontakten Sie anzurufen.";
/* No comment provided by engineer. */
"Allow your contacts to irreversibly delete sent messages." = "Erlauben Sie Ihren Kontakten gesendete Nachrichten unwiederbringlich zu löschen.";
"Allow your contacts to irreversibly delete sent messages. (24 hours)" = "Erlauben Sie Ihren Kontakten gesendete Nachrichten unwiederbringlich zu löschen. (24 Stunden)";
/* No comment provided by engineer. */
"Allow your contacts to send disappearing messages." = "Erlauben Sie Ihren Kontakten das Senden von verschwindenden Nachrichten.";
@@ -603,7 +600,7 @@
"Both you and your contact can add message reactions." = "Sowohl Sie, als auch Ihr Kontakt können Reaktionen auf Nachrichten geben.";
/* No comment provided by engineer. */
"Both you and your contact can irreversibly delete sent messages." = "Sowohl Ihr Kontakt, als auch Sie können gesendete Nachrichten unwiederbringlich löschen.";
"Both you and your contact can irreversibly delete sent messages. (24 hours)" = "Sowohl Ihr Kontakt, als auch Sie können gesendete Nachrichten unwiederbringlich löschen. (24 Stunden)";
/* No comment provided by engineer. */
"Both you and your contact can make calls." = "Sowohl Sie, als auch Ihr Kontakt können Anrufe tätigen.";
@@ -635,6 +632,9 @@
/* No comment provided by engineer. */
"Calls" = "Anrufe";
/* No comment provided by engineer. */
"Camera not available" = "Kamera nicht verfügbar";
/* No comment provided by engineer. */
"Can't delete user profile!" = "Das Benutzerprofil kann nicht gelöscht werden!";
@@ -688,7 +688,7 @@
"Change self-destruct passcode" = "Selbstzerstörungs-Zugangscode ändern";
/* chat item text */
"changed address for you" = "wechselte die Adresse für Sie";
"changed address for you" = "Wechselte die Empfängeradresse von Ihnen";
/* rcv group event chat item */
"changed role of %@ to %@" = "änderte die Rolle von %1$@ auf %2$@";
@@ -697,10 +697,10 @@
"changed your role to %@" = "änderte Ihre Rolle auf %@";
/* chat item text */
"changing address for %@…" = "Adresse von %@ wechseln…";
"changing address for %@…" = "Empfängeradresse für %@ wechseln wird gestartet…";
/* chat item text */
"changing address…" = "Wechsel der Adresse…";
"changing address…" = "Wechsel der Empfängeradresse wurde gestartet…";
/* No comment provided by engineer. */
"Chat archive" = "Datenbank Archiv";
@@ -723,6 +723,9 @@
/* No comment provided by engineer. */
"Chat is stopped" = "Der Chat ist beendet";
/* No comment provided by engineer. */
"Chat is stopped. If you already used this database on another device, you should transfer it back before starting chat." = "Der Chat ist angehalten. Wenn Sie diese Datenbank bereits auf einem anderen Gerät genutzt haben, sollten Sie diese vor dem Starten des Chats wieder zurückspielen.";
/* No comment provided by engineer. */
"Chat preferences" = "Chat-Präferenzen";
@@ -808,7 +811,7 @@
"Connect to yourself?\nThis is your own one-time link!" = "Mit Ihnen selbst verbinden?\nDas ist Ihr eigener Einmal-Link!";
/* No comment provided by engineer. */
"Connect to yourself?\nThis is your own SimpleX address!" = "Mit Ihnen selbst verbinden?\nDas ist Ihre eigene SimpleX-Adresse!";
"Connect to yourself?\nThis is your own SimpleX address!" = "Sich mit Ihnen selbst verbinden?\nDas ist Ihre eigene SimpleX-Adresse!";
/* No comment provided by engineer. */
"Connect via contact address" = "Über die Kontakt-Adresse verbinden";
@@ -816,9 +819,6 @@
/* No comment provided by engineer. */
"Connect via link" = "Über einen Link verbinden";
/* No comment provided by engineer. */
"Connect via link / QR code" = "Über einen Link / QR-Code verbinden";
/* No comment provided by engineer. */
"Connect via one-time link" = "Über einen Einmal-Link verbinden";
@@ -960,9 +960,6 @@
/* No comment provided by engineer. */
"Create new profile in [desktop app](https://simplex.chat/downloads/). 💻" = "Neues Profil in der [Desktop-App] erstellen (https://simplex.chat/downloads/). 💻";
/* No comment provided by engineer. */
"Create one-time invitation link" = "Einmal-Einladungslink erstellen";
/* No comment provided by engineer. */
"Create profile" = "Profil erstellen";
@@ -981,6 +978,9 @@
/* No comment provided by engineer. */
"Created on %@" = "Erstellt am %@";
/* No comment provided by engineer. */
"Creating link…" = "Link wird erstellt…";
/* No comment provided by engineer. */
"creator" = "Ersteller";
@@ -1270,7 +1270,7 @@
"Disappearing message" = "Verschwindende Nachricht";
/* chat feature */
"Disappearing messages" = "verschwindende Nachrichten";
"Disappearing messages" = "Verschwindende Nachrichten";
/* No comment provided by engineer. */
"Disappearing messages are prohibited in this chat." = "In diesem Chat sind verschwindende Nachrichten nicht erlaubt.";
@@ -1344,6 +1344,9 @@
/* No comment provided by engineer. */
"Enable automatic message deletion?" = "Automatisches Löschen von Nachrichten aktivieren?";
/* No comment provided by engineer. */
"Enable camera access" = "Kamera-Zugriff aktivieren";
/* No comment provided by engineer. */
"Enable for all" = "Für Alle aktivieren";
@@ -1398,6 +1401,9 @@
/* notification */
"Encrypted message or another event" = "Verschlüsselte Nachricht oder ein anderes Ereignis";
/* notification */
"Encrypted message: app is stopped" = "Verschlüsselte Nachricht: Die App ist angehalten";
/* notification */
"Encrypted message: database error" = "Verschlüsselte Nachricht: Datenbankfehler";
@@ -1498,7 +1504,7 @@
"Error adding member(s)" = "Fehler beim Hinzufügen von Mitgliedern";
/* No comment provided by engineer. */
"Error changing address" = "Fehler beim Wechseln der Adresse";
"Error changing address" = "Fehler beim Wechseln der Empfängeradresse";
/* No comment provided by engineer. */
"Error changing role" = "Fehler beim Ändern der Rolle";
@@ -1569,6 +1575,9 @@
/* No comment provided by engineer. */
"Error loading %@ servers" = "Fehler beim Laden von %@ Servern";
/* No comment provided by engineer. */
"Error opening chat" = "Fehler beim Öffnen des Chats";
/* No comment provided by engineer. */
"Error receiving file" = "Fehler beim Empfangen der Datei";
@@ -1593,6 +1602,9 @@
/* No comment provided by engineer. */
"Error saving user password" = "Fehler beim Speichern des Benutzer-Passworts";
/* No comment provided by engineer. */
"Error scanning code: %@" = "Fehler beim Scannen des Codes: %@";
/* No comment provided by engineer. */
"Error sending email" = "Fehler beim Senden der eMail";
@@ -1798,7 +1810,7 @@
"Group members can add message reactions." = "Gruppenmitglieder können eine Reaktion auf Nachrichten geben.";
/* No comment provided by engineer. */
"Group members can irreversibly delete sent messages." = "Gruppenmitglieder können gesendete Nachrichten unwiederbringlich löschen.";
"Group members can irreversibly delete sent messages. (24 hours)" = "Gruppenmitglieder können gesendete Nachrichten unwiederbringlich löschen. (24 Stunden)";
/* No comment provided by engineer. */
"Group members can send direct messages." = "Gruppenmitglieder können Direktnachrichten versenden.";
@@ -1864,7 +1876,7 @@
"Hide:" = "Verberge:";
/* No comment provided by engineer. */
"History" = "Vergangenheit";
"History" = "Verlauf";
/* time unit */
"hours" = "Stunden";
@@ -1890,9 +1902,6 @@
/* No comment provided by engineer. */
"If you can't meet in person, show QR code in a video call, or share the link." = "Falls Sie sich nicht persönlich treffen können, zeigen Sie den QR-Code in einem Videoanruf oder teilen Sie den Link.";
/* No comment provided by engineer. */
"If you cannot meet in person, you can **scan QR code in the video call**, or your contact can share an invitation link." = "Wenn Sie sich nicht persönlich treffen können, kann der **QR-Code während eines Videoanrufs gescannt werden**, oder Ihr Kontakt kann den Einladungslink über einen anderen Kanal mit Ihnen teilen.";
/* No comment provided by engineer. */
"If you enter this passcode when opening the app, all app data will be irreversibly removed!" = "Wenn Sie diesen Zugangscode während des Öffnens der App eingeben, werden alle App-Daten unwiederbringlich gelöscht!";
@@ -2010,9 +2019,18 @@
/* invalid chat item */
"invalid data" = "Ungültige Daten";
/* No comment provided by engineer. */
"Invalid link" = "Ungültiger Link";
/* No comment provided by engineer. */
"Invalid name!" = "Ungültiger Name!";
/* No comment provided by engineer. */
"Invalid QR code" = "Ungültiger QR-Code";
/* No comment provided by engineer. */
"Invalid response" = "Ungültige Reaktion";
/* No comment provided by engineer. */
"Invalid server address!" = "Ungültige Serveradresse!";
@@ -2106,9 +2124,15 @@
/* No comment provided by engineer. */
"Joining group" = "Der Gruppe beitreten";
/* No comment provided by engineer. */
"Keep" = "Behalten";
/* No comment provided by engineer. */
"Keep the app open to use it from desktop" = "Die App muss geöffnet bleiben, um sie vom Desktop aus nutzen zu können";
/* No comment provided by engineer. */
"Keep unused invitation?" = "Nicht genutzte Einladung behalten?";
/* No comment provided by engineer. */
"Keep your connections" = "Ihre Verbindungen beibehalten";
@@ -2191,7 +2215,7 @@
"Make sure %@ server addresses are in correct format, line separated and are not duplicated (%@)." = "Stellen Sie sicher, dass die %@-Server-Adressen das richtige Format haben, zeilenweise getrennt und nicht doppelt vorhanden sind (%@).";
/* No comment provided by engineer. */
"Make sure WebRTC ICE server addresses are in correct format, line separated and are not duplicated." = "Stellen Sie sicher, dass die WebRTC ICE-Server Adressen das richtige Format haben, zeilenweise angeordnet und nicht doppelt vorhanden sind.";
"Make sure WebRTC ICE server addresses are in correct format, line separated and are not duplicated." = "Stellen Sie sicher, dass die WebRTC ICE-Server Adressen das richtige Format haben, zeilenweise getrennt und nicht doppelt vorhanden sind.";
/* No comment provided by engineer. */
"Many people asked: *if SimpleX has no user identifiers, how can it deliver messages?*" = "Viele Menschen haben gefragt: *Wie kann SimpleX Nachrichten zustellen, wenn es keine Benutzerkennungen gibt?*";
@@ -2337,6 +2361,9 @@
/* No comment provided by engineer. */
"never" = "nie";
/* No comment provided by engineer. */
"New chat" = "Neuer Chat";
/* notification */
"New contact request" = "Neue Kontaktanfrage";
@@ -2401,7 +2428,7 @@
"No group!" = "Die Gruppe wurde nicht gefunden!";
/* No comment provided by engineer. */
"No history" = "Keine Vergangenheit";
"No history" = "Kein Verlauf";
/* No comment provided by engineer. */
"No permission to record voice message" = "Keine Berechtigung für das Aufnehmen von Sprachnachrichten";
@@ -2444,6 +2471,9 @@
/* No comment provided by engineer. */
"Ok" = "Ok";
/* No comment provided by engineer. */
"OK" = "OK";
/* No comment provided by engineer. */
"Old database" = "Alte Datenbank";
@@ -2481,7 +2511,7 @@
"Only you can add message reactions." = "Nur Sie können Reaktionen auf Nachrichten geben.";
/* No comment provided by engineer. */
"Only you can irreversibly delete messages (your contact can mark them for deletion)." = "Nur Sie können Nachrichten unwiederbringlich löschen (Ihr Kontakt kann sie zum Löschen markieren).";
"Only you can irreversibly delete messages (your contact can mark them for deletion). (24 hours)" = "Nur Sie können Nachrichten unwiederbringlich löschen (Ihr Kontakt kann sie zum Löschen markieren). (24 Stunden)";
/* No comment provided by engineer. */
"Only you can make calls." = "Nur Sie können Anrufe tätigen.";
@@ -2496,7 +2526,7 @@
"Only your contact can add message reactions." = "Nur Ihr Kontakt kann Reaktionen auf Nachrichten geben.";
/* No comment provided by engineer. */
"Only your contact can irreversibly delete messages (you can mark them for deletion)." = "Nur Ihr Kontakt kann Nachrichten unwiederbringlich löschen (Sie können sie zum Löschen markieren).";
"Only your contact can irreversibly delete messages (you can mark them for deletion). (24 hours)" = "Nur Ihr Kontakt kann Nachrichten unwiederbringlich löschen (Sie können sie zum Löschen markieren). (24 Stunden)";
/* No comment provided by engineer. */
"Only your contact can make calls." = "Nur Ihr Kontakt kann Anrufe tätigen.";
@@ -2528,6 +2558,15 @@
/* No comment provided by engineer. */
"Open-source protocol and code anybody can run the servers." = "Open-Source-Protokoll und -Code Jede Person kann ihre eigenen Server aufsetzen und nutzen.";
/* No comment provided by engineer. */
"Opening app…" = "App wird geöffnet…";
/* No comment provided by engineer. */
"Or scan QR code" = "Oder den QR-Code scannen";
/* No comment provided by engineer. */
"Or show this code" = "Oder diesen QR-Code anzeigen";
/* member role */
"owner" = "Eigentümer";
@@ -2549,9 +2588,6 @@
/* No comment provided by engineer. */
"Password to show" = "Passwort anzeigen";
/* No comment provided by engineer. */
"Paste" = "Einfügen";
/* No comment provided by engineer. */
"Paste desktop address" = "Desktop-Adresse einfügen";
@@ -2559,10 +2595,7 @@
"Paste image" = "Bild einfügen";
/* No comment provided by engineer. */
"Paste received link" = "Fügen Sie den erhaltenen Link ein";
/* placeholder */
"Paste the link you received to connect with your contact." = "Um sich mit Ihrem Kontakt zu verbinden, fügen Sie den erhaltenen Link in das Feld unten ein.";
"Paste the link you received" = "Fügen Sie den erhaltenen Link ein";
/* No comment provided by engineer. */
"peer-to-peer" = "Peer-to-Peer";
@@ -2594,6 +2627,9 @@
/* No comment provided by engineer. */
"Please check yours and your contact preferences." = "Bitte überprüfen sie sowohl Ihre, als auch die Präferenzen Ihres Kontakts.";
/* No comment provided by engineer. */
"Please contact developers.\nError: %@" = "Bitte nehmen Sie Kontakt mit den Entwicklern auf.\nFehler: %@";
/* No comment provided by engineer. */
"Please contact group admin." = "Bitte kontaktieren Sie den Gruppen-Administrator.";
@@ -2717,6 +2753,9 @@
/* No comment provided by engineer. */
"Read more in [User Guide](https://simplex.chat/docs/guide/app-settings.html#your-simplex-contact-address)." = "Mehr dazu in der [Benutzeranleitung](https://simplex.chat/docs/guide/app-settings.html#your-simplex-contact-address) lesen.";
/* No comment provided by engineer. */
"Read more in [User Guide](https://simplex.chat/docs/guide/chat-profiles.html#incognito-mode)." = "Lesen Sie mehr dazu im [Benutzerhandbuch](https://simplex.chat/docs/guide/chat-profiles.html#incognito-mode).";
/* No comment provided by engineer. */
"Read more in [User Guide](https://simplex.chat/docs/guide/readme.html#connect-to-friends)." = "Mehr dazu in der [Benutzeranleitung](https://simplex.chat/docs/guide/readme.html#connect-to-friends) lesen.";
@@ -2861,6 +2900,9 @@
/* No comment provided by engineer. */
"Restore database error" = "Fehler bei der Wiederherstellung der Datenbank";
/* No comment provided by engineer. */
"Retry" = "Wiederholen";
/* chat item action */
"Reveal" = "Aufdecken";
@@ -2951,6 +2993,9 @@
/* No comment provided by engineer. */
"Search" = "Suche";
/* No comment provided by engineer. */
"Search or paste SimpleX link" = "Suchen oder fügen Sie den SimpleX-Link ein";
/* network option */
"sec" = "sek";
@@ -3132,7 +3177,7 @@
"Share link" = "Link teilen";
/* No comment provided by engineer. */
"Share one-time invitation link" = "Einmal-Einladungslink teilen";
"Share this 1-time invite link" = "Teilen Sie diesen Einmal-Einladungslink";
/* No comment provided by engineer. */
"Share with contacts" = "Mit Kontakten teilen";
@@ -3210,10 +3255,10 @@
"Somebody" = "Jemand";
/* No comment provided by engineer. */
"Start a new chat" = "Starten Sie einen neuen Chat";
"Start chat" = "Starten Sie den Chat";
/* No comment provided by engineer. */
"Start chat" = "Starten Sie den Chat";
"Start chat?" = "Chat starten?";
/* No comment provided by engineer. */
"Start migration" = "Starten Sie die Migration";
@@ -3273,19 +3318,25 @@
"Tap button " = "Schaltfläche antippen ";
/* No comment provided by engineer. */
"Tap to activate profile." = "Tippen Sie auf das Profil um es zu aktivieren.";
"Tap to activate profile." = "Zum Aktivieren des Profils tippen.";
/* No comment provided by engineer. */
"Tap to Connect" = "Zum Verbinden antippen";
"Tap to Connect" = "Zum Verbinden tippen";
/* No comment provided by engineer. */
"Tap to join" = "Zum Beitreten tippen";
/* No comment provided by engineer. */
"Tap to join incognito" = "Tippen, um Inkognito beizutreten";
"Tap to join incognito" = "Zum Inkognito beitreten tippen";
/* No comment provided by engineer. */
"Tap to start a new chat" = "Tippen, um einen neuen Chat zu starten";
"Tap to paste link" = "Zum Link einfügen tippen";
/* No comment provided by engineer. */
"Tap to scan" = "Zum Scannen tippen";
/* No comment provided by engineer. */
"Tap to start a new chat" = "Zum Starten eines neuen Chats tippen";
/* No comment provided by engineer. */
"TCP connection timeout" = "Timeout der TCP-Verbindung";
@@ -3329,6 +3380,9 @@
/* No comment provided by engineer. */
"The attempt to change database passphrase was not completed." = "Die Änderung des Datenbank-Passworts konnte nicht abgeschlossen werden.";
/* No comment provided by engineer. */
"The code you scanned is not a SimpleX link QR code." = "Der von Ihnen gescannte Code ist kein SimpleX-Link-QR-Code.";
/* No comment provided by engineer. */
"The connection you accepted will be cancelled!" = "Die von Ihnen akzeptierte Verbindung wird abgebrochen!";
@@ -3369,7 +3423,10 @@
"The sender will NOT be notified" = "Der Absender wird NICHT benachrichtigt";
/* No comment provided by engineer. */
"The servers for new connections of your current chat profile **%@**." = "Server der neuen Verbindungen von Ihrem aktuellen Chat-Profil **%@**.";
"The servers for new connections of your current chat profile **%@**." = "Mögliche Server r neue Verbindungen von Ihrem aktuellen Chat-Profil **%@**.";
/* No comment provided by engineer. */
"The text you pasted is not a SimpleX link." = "Der von Ihnen eingefügte Text ist kein SimpleX-Link.";
/* No comment provided by engineer. */
"Theme" = "Design";
@@ -3587,6 +3644,9 @@
/* No comment provided by engineer. */
"Use new incognito profile" = "Nutzen Sie das neue Inkognito-Profil";
/* No comment provided by engineer. */
"Use only local notifications?" = "Nur lokale Benachrichtigungen nutzen?";
/* No comment provided by engineer. */
"Use server" = "Server nutzen";
@@ -3738,7 +3798,7 @@
"yes" = "Ja";
/* No comment provided by engineer. */
"You" = "Ihre Daten";
"You" = "Profil";
/* No comment provided by engineer. */
"You accepted connection" = "Sie haben die Verbindung akzeptiert";
@@ -3788,9 +3848,6 @@
/* No comment provided by engineer. */
"You can accept calls from lock screen, without device and app authentication." = "Sie können Anrufe ohne Geräte- und App-Authentifizierung vom Sperrbildschirm aus annehmen.";
/* No comment provided by engineer. */
"You can also connect by clicking the link. If it opens in the browser, click **Open in mobile app** button." = "Sie können sich auch verbinden, indem Sie auf den Link klicken. Wenn er im Browser geöffnet wird, klicken Sie auf die Schaltfläche **In mobiler App öffnen**.";
/* No comment provided by engineer. */
"You can create it later" = "Sie können dies später erstellen";
@@ -3803,6 +3860,9 @@
/* No comment provided by engineer. */
"You can hide or mute a user profile - swipe it to the right." = "Sie können ein Benutzerprofil verbergen oder stummschalten - wischen Sie es nach rechts.";
/* No comment provided by engineer. */
"You can make it visible to your SimpleX contacts via Settings." = "Sie können sie über Einstellungen für Ihre SimpleX-Kontakte sichtbar machen.";
/* notification body */
"You can now send messages to %@" = "Sie können nun Nachrichten an %@ versenden";
@@ -3827,14 +3887,17 @@
/* No comment provided by engineer. */
"You can use markdown to format messages:" = "Um Nachrichteninhalte zu formatieren, können Sie Markdowns verwenden:";
/* No comment provided by engineer. */
"You can view invitation link again in connection details." = "Den Einladungslink können Sie in den Details der Verbindung nochmals sehen.";
/* No comment provided by engineer. */
"You can't send messages!" = "Sie können keine Nachrichten versenden!";
/* chat item text */
"you changed address" = "Sie haben die Adresse gewechselt";
"you changed address" = "Die Empfängeradresse wurde gewechselt";
/* chat item text */
"you changed address for %@" = "Sie haben die Adresse für %@ gewechselt";
"you changed address for %@" = "Die Empfängeradresse für %@ wurde gewechselt";
/* snd group event chat item */
"you changed role for yourself to %@" = "Sie haben Ihre eigene Rolle auf %@ geändert";
@@ -3918,7 +3981,7 @@
"You will stop receiving messages from this group. Chat history will be preserved." = "Sie werden von dieser Gruppe keine Nachrichten mehr erhalten. Der Chatverlauf wird beibehalten.";
/* No comment provided by engineer. */
"You won't lose your contacts if you later delete your address." = "Sie werden Ihre mit dieser Adresse verbundenen Kontakte nicht verlieren, wenn Sie diese Adresse später löschen.";
"You won't lose your contacts if you later delete your address." = "Sie werden Ihre damit verbundenen Kontakte nicht verlieren, wenn Sie diese Adresse später löschen.";
/* No comment provided by engineer. */
"you: " = "Sie: ";
@@ -3993,7 +4056,7 @@
"Your server address" = "Ihre Serveradresse";
/* No comment provided by engineer. */
"Your settings" = "Ihre Einstellungen";
"Your settings" = "Einstellungen";
/* No comment provided by engineer. */
"Your SimpleX address" = "Ihre SimpleX-Adresse";

View File

@@ -64,11 +64,14 @@
/* No comment provided by engineer. */
"[Star on GitHub](https://github.com/simplex-chat/simplex-chat)" = "[Estrella en GitHub](https://github.com/simplex-chat/simplex-chat)";
/* No comment provided by engineer. */
"**Add contact**: to create a new invitation link, or connect via a link you received." = "**Añadir contacto**: crea un enlace de invitación nuevo o usa un enlace recibido.";
/* No comment provided by engineer. */
"**Add new contact**: to create your one-time QR Code for your contact." = "**Añadir nuevo contacto**: para crear tu código QR o enlace de un uso para tu contacto.";
/* No comment provided by engineer. */
"**Create link / QR code** for your contact to use." = "**Crea enlace / código QR** para que tu contacto lo use.";
"**Create group**: to create a new group." = "**Crear grupo**: crea un grupo nuevo.";
/* No comment provided by engineer. */
"**e2e encrypted** audio call" = "Llamada con **cifrado de extremo a extremo **";
@@ -82,18 +85,12 @@
/* No comment provided by engineer. */
"**Most private**: do not use SimpleX Chat notifications server, check messages periodically in the background (depends on how often you use the app)." = "**Más privado**: no se usa el servidor de notificaciones de SimpleX Chat, los mensajes se comprueban periódicamente en segundo plano (dependiendo de la frecuencia con la que utilices la aplicación).";
/* No comment provided by engineer. */
"**Paste received link** or open it in the browser and tap **Open in mobile app**." = "**Pega el enlace recibido** o ábrelo en el navegador y pulsa **Abrir en aplicación móvil**.";
/* No comment provided by engineer. */
"**Please note**: you will NOT be able to recover or change passphrase if you lose it." = "**Atención**: NO podrás recuperar o cambiar la contraseña si la pierdes.";
/* No comment provided by engineer. */
"**Recommended**: device token and notifications are sent to SimpleX Chat notification server, but not the message content, size or who it is from." = "**Recomendado**: el token del dispositivo y las notificaciones se envían al servidor de notificaciones de SimpleX Chat, pero no el contenido del mensaje, su tamaño o su procedencia.";
/* No comment provided by engineer. */
"**Scan QR code**: to connect to your contact in person or via video call." = "**Escanear código QR**: en persona para conectarte con tu contacto, o por videollamada.";
/* No comment provided by engineer. */
"**Warning**: Instant push notifications require passphrase saved in Keychain." = "**Advertencia**: Las notificaciones automáticas instantáneas requieren una contraseña guardada en Keychain.";
@@ -280,9 +277,6 @@
/* time interval */
"1 week" = "una semana";
/* No comment provided by engineer. */
"1-time link" = "Enlace un uso";
/* No comment provided by engineer. */
"5 minutes" = "5 minutos";
@@ -311,10 +305,10 @@
"Abort" = "Cancelar";
/* No comment provided by engineer. */
"Abort changing address" = "Cancelar cambio de dirección";
"Abort changing address" = "Cancelar cambio de servidor";
/* No comment provided by engineer. */
"Abort changing address?" = "¿Cancelar el cambio de dirección?";
"Abort changing address?" = "¿Cancelar el cambio de servidor?";
/* No comment provided by engineer. */
"About SimpleX" = "Acerca de SimpleX";
@@ -350,6 +344,9 @@
/* No comment provided by engineer. */
"Add address to your profile, so that your contacts can share it with other people. Profile update will be sent to your contacts." = "Añade la dirección a tu perfil para que tus contactos puedan compartirla con otros. La actualización del perfil se enviará a tus contactos.";
/* No comment provided by engineer. */
"Add contact" = "Añadir contacto";
/* No comment provided by engineer. */
"Add preset servers" = "Añadir servidores predefinidos";
@@ -423,13 +420,13 @@
"Allow disappearing messages only if your contact allows it to you." = "Se permiten los mensajes temporales pero sólo si tu contacto también los permite para tí.";
/* No comment provided by engineer. */
"Allow irreversible message deletion only if your contact allows it to you." = "Se permite la eliminación irreversible de mensajes pero sólo si tu contacto también la permite para tí.";
"Allow irreversible message deletion only if your contact allows it to you. (24 hours)" = "Se permite la eliminación irreversible de mensajes pero sólo si tu contacto también la permite para tí. (24 horas)";
/* No comment provided by engineer. */
"Allow message reactions only if your contact allows them." = "Se permiten las reacciones a los mensajes pero sólo si tu contacto también las permite.";
/* No comment provided by engineer. */
"Allow message reactions." = "Permitir reacciones a los mensajes.";
"Allow message reactions." = "Se permiten reacciones a los mensajes.";
/* No comment provided by engineer. */
"Allow sending direct messages to members." = "Se permiten mensajes directos entre miembros.";
@@ -438,7 +435,7 @@
"Allow sending disappearing messages." = "Permites el envío de mensajes temporales.";
/* No comment provided by engineer. */
"Allow to irreversibly delete sent messages." = "Se permite la eliminación irreversible de mensajes.";
"Allow to irreversibly delete sent messages. (24 hours)" = "Se permite la eliminación irreversible de mensajes. (24 horas)";
/* No comment provided by engineer. */
"Allow to send files and media." = "Se permite enviar archivos y multimedia.";
@@ -459,7 +456,7 @@
"Allow your contacts to call you." = "Permites que tus contactos puedan llamarte.";
/* No comment provided by engineer. */
"Allow your contacts to irreversibly delete sent messages." = "Permites a tus contactos eliminar irreversiblemente los mensajes enviados.";
"Allow your contacts to irreversibly delete sent messages. (24 hours)" = "Permites a tus contactos eliminar irreversiblemente los mensajes enviados. (24 horas)";
/* No comment provided by engineer. */
"Allow your contacts to send disappearing messages." = "Permites a tus contactos enviar mensajes temporales.";
@@ -474,7 +471,7 @@
"Already connecting!" = "¡Ya en proceso de conexión!";
/* No comment provided by engineer. */
"Already joining the group!" = "¡Ya en proceso de unirse al grupo!";
"Already joining the group!" = "¡Ya en proceso de unirte al grupo!";
/* pref value */
"always" = "siempre";
@@ -603,7 +600,7 @@
"Both you and your contact can add message reactions." = "Tanto tú como tu contacto podéis añadir reacciones a los mensajes.";
/* No comment provided by engineer. */
"Both you and your contact can irreversibly delete sent messages." = "Tanto tú como tu contacto podéis eliminar de forma irreversible los mensajes enviados.";
"Both you and your contact can irreversibly delete sent messages. (24 hours)" = "Tanto tú como tu contacto podéis eliminar de forma irreversible los mensajes enviados. (24 horas)";
/* No comment provided by engineer. */
"Both you and your contact can make calls." = "Tanto tú como tu contacto podéis realizar llamadas.";
@@ -635,6 +632,9 @@
/* No comment provided by engineer. */
"Calls" = "Llamadas";
/* No comment provided by engineer. */
"Camera not available" = "Cámara no disponible";
/* No comment provided by engineer. */
"Can't delete user profile!" = "¡No se puede eliminar el perfil!";
@@ -642,7 +642,7 @@
"Can't invite contact!" = "¡No se puede invitar el contacto!";
/* No comment provided by engineer. */
"Can't invite contacts!" = "¡No se puede invitar a los contactos!";
"Can't invite contacts!" = "¡No se pueden invitar contactos!";
/* No comment provided by engineer. */
"Cancel" = "Cancelar";
@@ -666,7 +666,7 @@
"Change lock mode" = "Cambiar el modo de bloqueo";
/* No comment provided by engineer. */
"Change member role?" = "¿Cambiar el rol del miembro?";
"Change member role?" = "¿Cambiar rol?";
/* authentication reason */
"Change passcode" = "Cambiar código de acceso";
@@ -688,7 +688,7 @@
"Change self-destruct passcode" = "Cambiar código autodestrucción";
/* chat item text */
"changed address for you" = "el servidor de envío ha cambiado para tí";
"changed address for you" = "ha cambiado tu servidor de envío";
/* rcv group event chat item */
"changed role of %@ to %@" = "rol cambiado de %1$@ a %2$@";
@@ -697,10 +697,10 @@
"changed your role to %@" = "ha cambiado tu rol a %@";
/* chat item text */
"changing address for %@…" = "cambiando dirección para %@…";
"changing address for %@…" = "cambiando el servidor para %@…";
/* chat item text */
"changing address…" = "cambiando dirección…";
"changing address…" = "cambiando de servidor…";
/* No comment provided by engineer. */
"Chat archive" = "Archivo del chat";
@@ -723,6 +723,9 @@
/* No comment provided by engineer. */
"Chat is stopped" = "Chat está detenido";
/* No comment provided by engineer. */
"Chat is stopped. If you already used this database on another device, you should transfer it back before starting chat." = "Chat está detenido. Si estás usando esta base de datos en otro dispositivo, deberías transferirla de vuelta antes de iniciarlo.";
/* No comment provided by engineer. */
"Chat preferences" = "Preferencias de Chat";
@@ -816,9 +819,6 @@
/* No comment provided by engineer. */
"Connect via link" = "Conectar mediante enlace";
/* No comment provided by engineer. */
"Connect via link / QR code" = "Conecta vía enlace / Código QR";
/* No comment provided by engineer. */
"Connect via one-time link" = "Conectar mediante enlace de un sólo uso";
@@ -960,9 +960,6 @@
/* No comment provided by engineer. */
"Create new profile in [desktop app](https://simplex.chat/downloads/). 💻" = "Crea perfil nuevo en la [aplicación para PC](https://simplex.Descargas/de chat/). 💻";
/* No comment provided by engineer. */
"Create one-time invitation link" = "Crea enlace de invitación de un uso";
/* No comment provided by engineer. */
"Create profile" = "Crear perfil";
@@ -981,6 +978,9 @@
/* No comment provided by engineer. */
"Created on %@" = "Creado en %@";
/* No comment provided by engineer. */
"Creating link…" = "Creando enlace…";
/* No comment provided by engineer. */
"creator" = "creador";
@@ -1177,7 +1177,7 @@
"Delete pending connection" = "Eliminar conexión pendiente";
/* No comment provided by engineer. */
"Delete pending connection?" = "¿Eliminar la conexion pendiente?";
"Delete pending connection?" = "¿Eliminar conexión pendiente?";
/* No comment provided by engineer. */
"Delete profile" = "Eliminar perfil";
@@ -1344,6 +1344,9 @@
/* No comment provided by engineer. */
"Enable automatic message deletion?" = "¿Activar eliminación automática de mensajes?";
/* No comment provided by engineer. */
"Enable camera access" = "Permitir acceso a la cámara";
/* No comment provided by engineer. */
"Enable for all" = "Activar para todos";
@@ -1398,6 +1401,9 @@
/* notification */
"Encrypted message or another event" = "Mensaje cifrado u otro evento";
/* notification */
"Encrypted message: app is stopped" = "Mensaje cifrado: la aplicación está parada";
/* notification */
"Encrypted message: database error" = "Mensaje cifrado: error base de datos";
@@ -1498,7 +1504,7 @@
"Error adding member(s)" = "Error al añadir miembro(s)";
/* No comment provided by engineer. */
"Error changing address" = "Error al cambiar dirección";
"Error changing address" = "Error al cambiar servidor";
/* No comment provided by engineer. */
"Error changing role" = "Error al cambiar rol";
@@ -1564,11 +1570,14 @@
"Error importing chat database" = "Error al importar base de datos";
/* No comment provided by engineer. */
"Error joining group" = "Error al unirse al grupo";
"Error joining group" = "Error al unirte al grupo";
/* No comment provided by engineer. */
"Error loading %@ servers" = "Error al cargar servidores %@";
/* No comment provided by engineer. */
"Error opening chat" = "Error al abrir chat";
/* No comment provided by engineer. */
"Error receiving file" = "Error al recibir archivo";
@@ -1593,6 +1602,9 @@
/* No comment provided by engineer. */
"Error saving user password" = "Error al guardar contraseña de usuario";
/* No comment provided by engineer. */
"Error scanning code: %@" = "Error al escanear código: %@";
/* No comment provided by engineer. */
"Error sending email" = "Error al enviar email";
@@ -1798,7 +1810,7 @@
"Group members can add message reactions." = "Los miembros pueden añadir reacciones a los mensajes.";
/* No comment provided by engineer. */
"Group members can irreversibly delete sent messages." = "Los miembros del grupo pueden eliminar mensajes de forma irreversible.";
"Group members can irreversibly delete sent messages. (24 hours)" = "Los miembros del grupo pueden eliminar mensajes de forma irreversible. (24 horas)";
/* No comment provided by engineer. */
"Group members can send direct messages." = "Los miembros del grupo pueden enviar mensajes directos.";
@@ -1819,7 +1831,7 @@
"Group moderation" = "Moderación de grupos";
/* No comment provided by engineer. */
"Group preferences" = "Preferencias de grupo";
"Group preferences" = "Preferencias del grupo";
/* No comment provided by engineer. */
"Group profile" = "Perfil de grupo";
@@ -1890,9 +1902,6 @@
/* No comment provided by engineer. */
"If you can't meet in person, show QR code in a video call, or share the link." = "Si no puedes reunirte en persona, muestra el código QR por videollamada, o comparte el enlace.";
/* No comment provided by engineer. */
"If you cannot meet in person, you can **scan QR code in the video call**, or your contact can share an invitation link." = "Si no puedes reunirte en persona, puedes **escanear el código QR por videollamada**, o tu contacto puede compartir un enlace de invitación.";
/* No comment provided by engineer. */
"If you enter this passcode when opening the app, all app data will be irreversibly removed!" = "¡Si introduces este código al abrir la aplicación, todos los datos de la misma se eliminarán de forma irreversible!";
@@ -2010,9 +2019,18 @@
/* invalid chat item */
"invalid data" = "datos no válidos";
/* No comment provided by engineer. */
"Invalid link" = "Enlace no válido";
/* No comment provided by engineer. */
"Invalid name!" = "¡Nombre no válido!";
/* No comment provided by engineer. */
"Invalid QR code" = "Código QR no válido";
/* No comment provided by engineer. */
"Invalid response" = "Respuesta no válida";
/* No comment provided by engineer. */
"Invalid server address!" = "¡Dirección de servidor no válida!";
@@ -2083,19 +2101,19 @@
"Japanese interface" = "Interfáz en japonés";
/* No comment provided by engineer. */
"Join" = "Únete";
"Join" = "Unirte";
/* No comment provided by engineer. */
"join as %@" = "unirte como %@";
/* No comment provided by engineer. */
"Join group" = "Únete al grupo";
"Join group" = "Unirte al grupo";
/* No comment provided by engineer. */
"Join group?" = "¿Unirse al grupo?";
"Join group?" = "¿Unirte al grupo?";
/* No comment provided by engineer. */
"Join incognito" = "Únete en modo incógnito";
"Join incognito" = "Unirte en modo incógnito";
/* No comment provided by engineer. */
"Join with current profile" = "Unirte con el perfil actual";
@@ -2106,9 +2124,15 @@
/* No comment provided by engineer. */
"Joining group" = "Entrando al grupo";
/* No comment provided by engineer. */
"Keep" = "Guardar";
/* No comment provided by engineer. */
"Keep the app open to use it from desktop" = "Mantén la aplicación abierta para usarla desde el ordenador";
/* No comment provided by engineer. */
"Keep unused invitation?" = "¿Guardar invitación no usada?";
/* No comment provided by engineer. */
"Keep your connections" = "Conserva tus conexiones";
@@ -2224,10 +2248,10 @@
"member connected" = "conectado";
/* No comment provided by engineer. */
"Member role will be changed to \"%@\". All group members will be notified." = "El rol de miembro cambiará a \"%@\". Todos los miembros del grupo serán notificados.";
"Member role will be changed to \"%@\". All group members will be notified." = "El rol del miembro cambiará a \"%@\" y se notificará al grupo.";
/* No comment provided by engineer. */
"Member role will be changed to \"%@\". The member will receive a new invitation." = "El rol del miembro cambiará a \"%@\". El miembro recibirá una invitación nueva.";
"Member role will be changed to \"%@\". The member will receive a new invitation." = "El rol del miembro cambiará a \"%@\" y recibirá una invitación nueva.";
/* No comment provided by engineer. */
"Member will be removed from group - this cannot be undone!" = "El miembro será expulsado del grupo. ¡No podrá deshacerse!";
@@ -2242,7 +2266,7 @@
"Message draft" = "Borrador de mensaje";
/* chat feature */
"Message reactions" = "Reacciones a los mensajes";
"Message reactions" = "Reacciones a mensajes";
/* No comment provided by engineer. */
"Message reactions are prohibited in this chat." = "Las reacciones a los mensajes no están permitidas en este chat.";
@@ -2337,6 +2361,9 @@
/* No comment provided by engineer. */
"never" = "nunca";
/* No comment provided by engineer. */
"New chat" = "Nuevo chat";
/* notification */
"New contact request" = "Nueva solicitud de contacto";
@@ -2444,6 +2471,9 @@
/* No comment provided by engineer. */
"Ok" = "Ok";
/* No comment provided by engineer. */
"OK" = "OK";
/* No comment provided by engineer. */
"Old database" = "Base de datos antigua";
@@ -2469,7 +2499,7 @@
"Only client devices store user profiles, contacts, groups, and messages sent with **2-layer end-to-end encryption**." = "Sólo los dispositivos cliente almacenan perfiles de usuario, contactos, grupos y mensajes enviados con **cifrado de extremo a extremo de 2 capas**.";
/* No comment provided by engineer. */
"Only group owners can change group preferences." = "Sólo los propietarios pueden modificar las preferencias de grupo.";
"Only group owners can change group preferences." = "Sólo los propietarios pueden modificar las preferencias del grupo.";
/* No comment provided by engineer. */
"Only group owners can enable files and media." = "Sólo los propietarios del grupo pueden activar los archivos y multimedia.";
@@ -2481,7 +2511,7 @@
"Only you can add message reactions." = "Sólo tú puedes añadir reacciones a los mensajes.";
/* No comment provided by engineer. */
"Only you can irreversibly delete messages (your contact can mark them for deletion)." = "Sólo tú puedes eliminar mensajes de forma irreversible (tu contacto puede marcarlos para eliminar).";
"Only you can irreversibly delete messages (your contact can mark them for deletion). (24 hours)" = "Sólo tú puedes eliminar mensajes de forma irreversible (tu contacto puede marcarlos para eliminar). (24 horas)";
/* No comment provided by engineer. */
"Only you can make calls." = "Solo tú puedes realizar llamadas.";
@@ -2496,7 +2526,7 @@
"Only your contact can add message reactions." = "Sólo tu contacto puede añadir reacciones a los mensajes.";
/* No comment provided by engineer. */
"Only your contact can irreversibly delete messages (you can mark them for deletion)." = "Sólo tu contacto puede eliminar mensajes de forma irreversible (tu puedes marcarlos para eliminar).";
"Only your contact can irreversibly delete messages (you can mark them for deletion). (24 hours)" = "Sólo tu contacto puede eliminar mensajes de forma irreversible (tu puedes marcarlos para eliminar). (24 horas)";
/* No comment provided by engineer. */
"Only your contact can make calls." = "Sólo tu contacto puede realizar llamadas.";
@@ -2528,6 +2558,15 @@
/* No comment provided by engineer. */
"Open-source protocol and code anybody can run the servers." = "Protocolo y código abiertos: cualquiera puede usar los servidores.";
/* No comment provided by engineer. */
"Opening app…" = "Iniciando aplicación…";
/* No comment provided by engineer. */
"Or scan QR code" = "O escanear código QR";
/* No comment provided by engineer. */
"Or show this code" = "O mostrar este código";
/* member role */
"owner" = "propietario";
@@ -2549,9 +2588,6 @@
/* No comment provided by engineer. */
"Password to show" = "Contraseña para hacerlo visible";
/* No comment provided by engineer. */
"Paste" = "Pegar";
/* No comment provided by engineer. */
"Paste desktop address" = "Pegar dirección de ordenador";
@@ -2559,10 +2595,7 @@
"Paste image" = "Pegar imagen";
/* No comment provided by engineer. */
"Paste received link" = "Pegar enlace recibido";
/* placeholder */
"Paste the link you received to connect with your contact." = "Pega el enlace que has recibido en el recuadro para conectar con tu contacto.";
"Paste the link you received" = "Pegar el enlace recibido";
/* No comment provided by engineer. */
"peer-to-peer" = "p2p";
@@ -2595,7 +2628,10 @@
"Please check yours and your contact preferences." = "Comprueba tus preferencias y las de tu contacto.";
/* No comment provided by engineer. */
"Please contact group admin." = "Póngase en contacto con el administrador del grupo.";
"Please contact developers.\nError: %@" = "Por favor, contacta con los desarrolladores.\nError: %@";
/* No comment provided by engineer. */
"Please contact group admin." = "Ponte en contacto con el administrador del grupo.";
/* No comment provided by engineer. */
"Please enter correct current passphrase." = "Introduce la contraseña actual correcta.";
@@ -2715,16 +2751,19 @@
"Read more" = "Saber más";
/* No comment provided by engineer. */
"Read more in [User Guide](https://simplex.chat/docs/guide/app-settings.html#your-simplex-contact-address)." = "Más información en el [Manual de usuario](https://simplex.chat/docs/guide/app-settings.html#your-simplex-contact-address).";
"Read more in [User Guide](https://simplex.chat/docs/guide/app-settings.html#your-simplex-contact-address)." = "Saber más en el [Manual del Usuario](https://simplex.chat/docs/guide/app-settings.html#your-simplex-contact-address).";
/* No comment provided by engineer. */
"Read more in [User Guide](https://simplex.chat/docs/guide/readme.html#connect-to-friends)." = "Más información en el [Manual de usuario](https://simplex.chat/docs/guide/readme.html#connect-to-friends).";
"Read more in [User Guide](https://simplex.chat/docs/guide/chat-profiles.html#incognito-mode)." = "Saber más en [Guía de Usuario](https://simplex.chat/docs/guide/chat-profiles.html#incognito-mode).";
/* No comment provided by engineer. */
"Read more in our [GitHub repository](https://github.com/simplex-chat/simplex-chat#readme)." = "Más información en nuestro [repositorio GitHub](https://github.com/simplex-chat/simplex-chat#readme).";
"Read more in [User Guide](https://simplex.chat/docs/guide/readme.html#connect-to-friends)." = "Saber más en el [Manual del Usuario](https://simplex.chat/docs/guide/readme.html#connect-to-friends).";
/* No comment provided by engineer. */
"Read more in our GitHub repository." = "Más información en nuestro repositorio GitHub.";
"Read more in our [GitHub repository](https://github.com/simplex-chat/simplex-chat#readme)." = "Saber más en nuestro [repositorio GitHub](https://github.com/simplex-chat/simplex-chat#readme).";
/* No comment provided by engineer. */
"Read more in our GitHub repository." = "Saber más en nuestro repositorio GitHub.";
/* No comment provided by engineer. */
"Receipts are disabled" = "Las confirmaciones están desactivadas";
@@ -2861,6 +2900,9 @@
/* No comment provided by engineer. */
"Restore database error" = "Error al restaurar base de datos";
/* No comment provided by engineer. */
"Retry" = "Reintentar";
/* chat item action */
"Reveal" = "Revelar";
@@ -2892,10 +2934,10 @@
"Save and notify contact" = "Guardar y notificar contacto";
/* No comment provided by engineer. */
"Save and notify group members" = "Guardar y notificar a los miembros del grupo";
"Save and notify group members" = "Guardar y notificar grupo";
/* No comment provided by engineer. */
"Save and update group profile" = "Guardar y actualizar perfil de grupo";
"Save and update group profile" = "Guardar y actualizar perfil del grupo";
/* No comment provided by engineer. */
"Save archive" = "Guardar archivo";
@@ -2951,6 +2993,9 @@
/* No comment provided by engineer. */
"Search" = "Buscar";
/* No comment provided by engineer. */
"Search or paste SimpleX link" = "Buscar o pegar enlace SimpleX";
/* network option */
"sec" = "seg";
@@ -3132,7 +3177,7 @@
"Share link" = "Compartir enlace";
/* No comment provided by engineer. */
"Share one-time invitation link" = "Compartir enlace de invitación de un uso";
"Share this 1-time invite link" = "Compartir este enlace de un uso";
/* No comment provided by engineer. */
"Share with contacts" = "Compartir con contactos";
@@ -3210,10 +3255,10 @@
"Somebody" = "Alguien";
/* No comment provided by engineer. */
"Start a new chat" = "Iniciar chat nuevo";
"Start chat" = "Iniciar chat";
/* No comment provided by engineer. */
"Start chat" = "Iniciar chat";
"Start chat?" = "¿Iniciar chat?";
/* No comment provided by engineer. */
"Start migration" = "Iniciar migración";
@@ -3279,11 +3324,17 @@
"Tap to Connect" = "Pulsa para conectar";
/* No comment provided by engineer. */
"Tap to join" = "Pulsa para unirse";
"Tap to join" = "Pulsa para unirte";
/* No comment provided by engineer. */
"Tap to join incognito" = "Pulsa para unirte en modo incógnito";
/* No comment provided by engineer. */
"Tap to paste link" = "Pulsa para pegar enlace";
/* No comment provided by engineer. */
"Tap to scan" = "Pulsa para escanear";
/* No comment provided by engineer. */
"Tap to start a new chat" = "Pulsa para iniciar chat nuevo";
@@ -3329,6 +3380,9 @@
/* No comment provided by engineer. */
"The attempt to change database passphrase was not completed." = "El intento de cambiar la contraseña de la base de datos no se ha completado.";
/* No comment provided by engineer. */
"The code you scanned is not a SimpleX link QR code." = "El código QR escaneado no es un enlace SimpleX.";
/* No comment provided by engineer. */
"The connection you accepted will be cancelled!" = "¡La conexión que has aceptado se cancelará!";
@@ -3371,6 +3425,9 @@
/* No comment provided by engineer. */
"The servers for new connections of your current chat profile **%@**." = "Lista de servidores para las conexiones nuevas de tu perfil actual **%@**.";
/* No comment provided by engineer. */
"The text you pasted is not a SimpleX link." = "El texto pegado no es un enlace SimpleX.";
/* No comment provided by engineer. */
"Theme" = "Tema";
@@ -3447,7 +3504,7 @@
"To support instant push notifications the chat database has to be migrated." = "Para permitir las notificaciones automáticas instantáneas, la base de datos se debe migrar.";
/* No comment provided by engineer. */
"To verify end-to-end encryption with your contact compare (or scan) the code on your devices." = "Para comprobar el cifrado de extremo a extremo con tu contacto compara (o escanea) el código en tus dispositivos.";
"To verify end-to-end encryption with your contact compare (or scan) the code on your devices." = "Para verificar el cifrado de extremo a extremo con tu contacto, compara (o escanea) el código en ambos dispositivos.";
/* No comment provided by engineer. */
"Toggle incognito when connecting." = "Activa incógnito al conectar.";
@@ -3587,6 +3644,9 @@
/* No comment provided by engineer. */
"Use new incognito profile" = "Usar nuevo perfil incógnito";
/* No comment provided by engineer. */
"Use only local notifications?" = "¿Usar sólo notificaciones locales?";
/* No comment provided by engineer. */
"Use server" = "Usar servidor";
@@ -3777,10 +3837,10 @@
"You are connected to the server used to receive messages from this contact." = "Estás conectado al servidor usado para recibir mensajes de este contacto.";
/* No comment provided by engineer. */
"you are invited to group" = "has sido invitado al grupo";
"you are invited to group" = "has sido invitado a un grupo";
/* No comment provided by engineer. */
"You are invited to group" = "Has sido invitado al grupo";
"You are invited to group" = "Has sido invitado a un grupo";
/* No comment provided by engineer. */
"you are observer" = "Tu rol es observador";
@@ -3788,9 +3848,6 @@
/* No comment provided by engineer. */
"You can accept calls from lock screen, without device and app authentication." = "Puede aceptar llamadas desde la pantalla de bloqueo, sin autenticación de dispositivos y aplicaciones.";
/* No comment provided by engineer. */
"You can also connect by clicking the link. If it opens in the browser, click **Open in mobile app** button." = "También puedes conectarte haciendo clic en el enlace. Si se abre en el navegador, haz clic en el botón **Abrir en aplicación móvil**.";
/* No comment provided by engineer. */
"You can create it later" = "Puedes crearla más tarde";
@@ -3803,6 +3860,9 @@
/* No comment provided by engineer. */
"You can hide or mute a user profile - swipe it to the right." = "Puedes ocultar o silenciar un perfil deslizándolo a la derecha.";
/* No comment provided by engineer. */
"You can make it visible to your SimpleX contacts via Settings." = "Puedes hacerlo visible para tus contactos de SimpleX en Configuración.";
/* notification body */
"You can now send messages to %@" = "Ya puedes enviar mensajes a %@";
@@ -3810,13 +3870,13 @@
"You can set lock screen notification preview via settings." = "Puedes configurar las notificaciones de la pantalla de bloqueo desde Configuración.";
/* No comment provided by engineer. */
"You can share a link or a QR code - anybody will be able to join the group. You won't lose members of the group if you later delete it." = "Puedes compartir un enlace o un código QR: cualquiera podrá unirse al grupo. Si lo eliminas más tarde los miembros del grupo no se perderán.";
"You can share a link or a QR code - anybody will be able to join the group. You won't lose members of the group if you later delete it." = "Puedes compartir un enlace o código QR para que cualquiera pueda unirse al grupo. Si decides eliminarlo más tarde, los miembros del grupo se mantendrán.";
/* No comment provided by engineer. */
"You can share this address with your contacts to let them connect with **%@**." = "Puedes compartir esta dirección con tus contactos para que puedan conectar con **%@**.";
/* No comment provided by engineer. */
"You can share your address as a link or QR code - anybody can connect to you." = "Puedes compartir tu dirección como enlace o como código QR: cualquiera podrá conectarse contigo.";
"You can share your address as a link or QR code - anybody can connect to you." = "Puedes compartir tu dirección como enlace o código QR para que cualquiera pueda conectarse contigo.";
/* No comment provided by engineer. */
"You can start chat via app Settings / Database or by restarting the app" = "Puede iniciar Chat a través de la Configuración / Base de datos de la aplicación o reiniciando la aplicación";
@@ -3827,6 +3887,9 @@
/* No comment provided by engineer. */
"You can use markdown to format messages:" = "Puedes usar la sintaxis markdown para dar formato a tus mensajes:";
/* No comment provided by engineer. */
"You can view invitation link again in connection details." = "Podrás ver el enlace de invitación en detalles de conexión.";
/* No comment provided by engineer. */
"You can't send messages!" = "¡No puedes enviar mensajes!";
@@ -3927,7 +3990,7 @@
"You're trying to invite contact with whom you've shared an incognito profile to the group in which you're using your main profile" = "Estás intentando invitar a un contacto con el que compartes un perfil incógnito a un grupo en el que usas tu perfil principal";
/* No comment provided by engineer. */
"You're using an incognito profile for this group - to prevent sharing your main profile inviting contacts is not allowed" = "Estás usando un perfil incógnito para este grupo, por tanto para evitar compartir tu perfil principal no se permite invitar a contactos";
"You're using an incognito profile for this group - to prevent sharing your main profile inviting contacts is not allowed" = "Estás usando un perfil incógnito en este grupo. Para evitar descubrir tu perfil principal no se permite invitar contactos";
/* No comment provided by engineer. */
"Your %@ servers" = "Mis servidores %@";

View File

@@ -55,9 +55,6 @@
/* No comment provided by engineer. */
"**Add new contact**: to create your one-time QR Code for your contact." = "**Lisää uusi kontakti**: luo kertakäyttöinen QR-koodi tai linkki kontaktille.";
/* No comment provided by engineer. */
"**Create link / QR code** for your contact to use." = "**Luo linkki / QR-koodi* kontaktille.";
/* No comment provided by engineer. */
"**e2e encrypted** audio call" = "**e2e-salattu** äänipuhelu";
@@ -70,18 +67,12 @@
/* No comment provided by engineer. */
"**Most private**: do not use SimpleX Chat notifications server, check messages periodically in the background (depends on how often you use the app)." = "**Yksityisin**: älä käytä SimpleX Chat -ilmoituspalvelinta, tarkista viestit ajoittain taustalla (riippuu siitä, kuinka usein käytät sovellusta).";
/* No comment provided by engineer. */
"**Paste received link** or open it in the browser and tap **Open in mobile app**." = "**Liitä vastaanotettu linkki** tai avaa se selaimessa ja napauta **Avaa mobiilisovelluksessa**.";
/* No comment provided by engineer. */
"**Please note**: you will NOT be able to recover or change passphrase if you lose it." = "**Huomaa**: et voi palauttaa tai muuttaa tunnuslausetta, jos kadotat sen.";
/* No comment provided by engineer. */
"**Recommended**: device token and notifications are sent to SimpleX Chat notification server, but not the message content, size or who it is from." = "**Suositus**: laitetunnus ja ilmoitukset lähetetään SimpleX Chat -ilmoituspalvelimelle, mutta ei viestin sisältöä, kokoa tai sitä, keneltä se on peräisin.";
/* No comment provided by engineer. */
"**Scan QR code**: to connect to your contact in person or via video call." = "**Skannaa QR-koodi**: muodosta yhteys kontaktiisi henkilökohtaisesti tai videopuhelun kautta.";
/* No comment provided by engineer. */
"**Warning**: Instant push notifications require passphrase saved in Keychain." = "**Varoitus**: Välittömät push-ilmoitukset vaativat tunnuslauseen, joka on tallennettu Keychainiin.";
@@ -244,9 +235,6 @@
/* time interval */
"1 week" = "1 viikko";
/* No comment provided by engineer. */
"1-time link" = "Kertakäyttölinkki";
/* No comment provided by engineer. */
"5 minutes" = "5 minuuttia";
@@ -384,7 +372,7 @@
"Allow disappearing messages only if your contact allows it to you." = "Salli katoavat viestit vain, jos kontaktisi sallii sen sinulle.";
/* No comment provided by engineer. */
"Allow irreversible message deletion only if your contact allows it to you." = "Salli peruuttamaton viestien poisto vain, jos kontaktisi sallii ne sinulle.";
"Allow irreversible message deletion only if your contact allows it to you. (24 hours)" = "Salli peruuttamaton viestien poisto vain, jos kontaktisi sallii ne sinulle. (24 tuntia)";
/* No comment provided by engineer. */
"Allow message reactions only if your contact allows them." = "Salli reaktiot viesteihin vain, jos kontaktisi sallii ne.";
@@ -399,7 +387,7 @@
"Allow sending disappearing messages." = "Salli katoavien viestien lähettäminen.";
/* No comment provided by engineer. */
"Allow to irreversibly delete sent messages." = "Salli lähetettyjen viestien peruuttamaton poistaminen.";
"Allow to irreversibly delete sent messages. (24 hours)" = "Salli lähetettyjen viestien peruuttamaton poistaminen. (24 tuntia)";
/* No comment provided by engineer. */
"Allow to send files and media." = "Salli tiedostojen ja median lähettäminen.";
@@ -420,7 +408,7 @@
"Allow your contacts to call you." = "Salli kontaktiesi soittaa sinulle.";
/* No comment provided by engineer. */
"Allow your contacts to irreversibly delete sent messages." = "Salli kontaktiesi poistaa lähetetyt viestit peruuttamattomasti.";
"Allow your contacts to irreversibly delete sent messages. (24 hours)" = "Salli kontaktiesi poistaa lähetetyt viestit peruuttamattomasti. (24 tuntia)";
/* No comment provided by engineer. */
"Allow your contacts to send disappearing messages." = "Salli kontaktiesi lähettää katoavia viestejä.";
@@ -528,7 +516,7 @@
"Both you and your contact can add message reactions." = "Sekä sinä että kontaktisi voivat käyttää viestireaktioita.";
/* No comment provided by engineer. */
"Both you and your contact can irreversibly delete sent messages." = "Sekä sinä että kontaktisi voitte peruuttamattomasti poistaa lähetetyt viestit.";
"Both you and your contact can irreversibly delete sent messages. (24 hours)" = "Sekä sinä että kontaktisi voitte peruuttamattomasti poistaa lähetetyt viestit. (24 tuntia)";
/* No comment provided by engineer. */
"Both you and your contact can make calls." = "Sekä sinä että kontaktisi voitte soittaa puheluita.";
@@ -720,9 +708,6 @@
/* No comment provided by engineer. */
"Connect via link" = "Yhdistä linkin kautta";
/* No comment provided by engineer. */
"Connect via link / QR code" = "Yhdistä linkillä / QR-koodilla";
/* No comment provided by engineer. */
"Connect via one-time link" = "Yhdistä kertalinkillä";
@@ -837,9 +822,6 @@
/* No comment provided by engineer. */
"Create new profile in [desktop app](https://simplex.chat/downloads/). 💻" = "Luo uusi profiili [työpöytäsovelluksessa](https://simplex.chat/downloads/). 💻";
/* No comment provided by engineer. */
"Create one-time invitation link" = "Luo kertakutsulinkki";
/* server test step */
"Create queue" = "Luo jono";
@@ -1603,7 +1585,7 @@
"Group members can add message reactions." = "Ryhmän jäsenet voivat lisätä viestireaktioita.";
/* No comment provided by engineer. */
"Group members can irreversibly delete sent messages." = "Ryhmän jäsenet voivat poistaa lähetetyt viestit peruuttamattomasti.";
"Group members can irreversibly delete sent messages. (24 hours)" = "Ryhmän jäsenet voivat poistaa lähetetyt viestit peruuttamattomasti. (24 tuntia)";
/* No comment provided by engineer. */
"Group members can send direct messages." = "Ryhmän jäsenet voivat lähettää suoraviestejä.";
@@ -1695,9 +1677,6 @@
/* No comment provided by engineer. */
"If you can't meet in person, show QR code in a video call, or share the link." = "Jos et voi tavata henkilökohtaisesti, näytä QR-koodi videopuhelussa tai jaa linkki.";
/* No comment provided by engineer. */
"If you cannot meet in person, you can **scan QR code in the video call**, or your contact can share an invitation link." = "Jos et voi tavata henkilökohtaisesti, voit **skannata QR-koodin videopuhelussa** tai kontaktisi voi jakaa kutsulinkin.";
/* No comment provided by engineer. */
"If you enter this passcode when opening the app, all app data will be irreversibly removed!" = "Jos syötät tämän pääsykoodin sovellusta avatessasi, kaikki sovelluksen tiedot poistetaan peruuttamattomasti!";
@@ -2247,7 +2226,7 @@
"Only you can add message reactions." = "Vain sinä voit lisätä viestireaktioita.";
/* No comment provided by engineer. */
"Only you can irreversibly delete messages (your contact can mark them for deletion)." = "Vain sinä voit poistaa viestejä peruuttamattomasti (kontaktisi voi merkitä ne poistettavaksi).";
"Only you can irreversibly delete messages (your contact can mark them for deletion). (24 hours)" = "Vain sinä voit poistaa viestejä peruuttamattomasti (kontaktisi voi merkitä ne poistettavaksi). (24 tuntia)";
/* No comment provided by engineer. */
"Only you can make calls." = "Vain sinä voit soittaa puheluita.";
@@ -2262,7 +2241,7 @@
"Only your contact can add message reactions." = "Vain kontaktisi voi lisätä viestireaktioita.";
/* No comment provided by engineer. */
"Only your contact can irreversibly delete messages (you can mark them for deletion)." = "Vain kontaktisi voi poistaa viestejä peruuttamattomasti (voit merkitä ne poistettavaksi).";
"Only your contact can irreversibly delete messages (you can mark them for deletion). (24 hours)" = "Vain kontaktisi voi poistaa viestejä peruuttamattomasti (voit merkitä ne poistettavaksi). (24 tuntia)";
/* No comment provided by engineer. */
"Only your contact can make calls." = "Vain kontaktisi voi soittaa puheluita.";
@@ -2309,18 +2288,9 @@
/* No comment provided by engineer. */
"Password to show" = "Salasana näytettäväksi";
/* No comment provided by engineer. */
"Paste" = "Liitä";
/* No comment provided by engineer. */
"Paste image" = "Liitä kuva";
/* No comment provided by engineer. */
"Paste received link" = "Liitä vastaanotettu linkki";
/* placeholder */
"Paste the link you received to connect with your contact." = "Liitä saamasi linkki, jonka avulla voit muodostaa yhteyden kontaktiisi.";
/* No comment provided by engineer. */
"peer-to-peer" = "vertais";
@@ -2864,9 +2834,6 @@
/* No comment provided by engineer. */
"Share link" = "Jaa linkki";
/* No comment provided by engineer. */
"Share one-time invitation link" = "Jaa kertakutsulinkki";
/* No comment provided by engineer. */
"Share with contacts" = "Jaa kontaktien kanssa";
@@ -2939,9 +2906,6 @@
/* notification title */
"Somebody" = "Joku";
/* No comment provided by engineer. */
"Start a new chat" = "Aloita uusi keskustelu";
/* No comment provided by engineer. */
"Start chat" = "Aloita keskustelu";
@@ -3443,9 +3407,6 @@
/* No comment provided by engineer. */
"You can accept calls from lock screen, without device and app authentication." = "Voit vastaanottaa puheluita lukitusnäytöltä ilman laitteen ja sovelluksen todennusta.";
/* No comment provided by engineer. */
"You can also connect by clicking the link. If it opens in the browser, click **Open in mobile app** button." = "Voit myös muodostaa yhteyden klikkaamalla linkkiä. Jos se avautuu selaimessa, napsauta **Avaa mobiilisovelluksessa**-painiketta.";
/* No comment provided by engineer. */
"You can create it later" = "Voit luoda sen myöhemmin";

View File

@@ -64,11 +64,14 @@
/* No comment provided by engineer. */
"[Star on GitHub](https://github.com/simplex-chat/simplex-chat)" = "[Star sur GitHub](https://github.com/simplex-chat/simplex-chat)";
/* No comment provided by engineer. */
"**Add contact**: to create a new invitation link, or connect via a link you received." = "**Ajouter un contact**: pour créer un nouveau lien d'invitation ou vous connecter via un lien que vous avez reçu.";
/* No comment provided by engineer. */
"**Add new contact**: to create your one-time QR Code for your contact." = "**Ajouter un nouveau contact** : pour créer un lien ou code QR unique pour votre contact.";
/* No comment provided by engineer. */
"**Create link / QR code** for your contact to use." = "**Créer un lien / code QR** que votre contact pourra utiliser.";
"**Create group**: to create a new group." = "**Créer un groupe**: pour créer un nouveau groupe.";
/* No comment provided by engineer. */
"**e2e encrypted** audio call" = "appel audio **chiffré de bout en bout**";
@@ -82,18 +85,12 @@
/* No comment provided by engineer. */
"**Most private**: do not use SimpleX Chat notifications server, check messages periodically in the background (depends on how often you use the app)." = "**Confidentiel** : ne pas utiliser le serveur de notifications SimpleX, vérification de nouveaux messages periodiquement en arrière plan (dépend de l'utilisation de l'app).";
/* No comment provided by engineer. */
"**Paste received link** or open it in the browser and tap **Open in mobile app**." = "**Collez le lien reçu** ou ouvrez-le dans votre navigateur et appuyez sur **Open in mobile app**.";
/* No comment provided by engineer. */
"**Please note**: you will NOT be able to recover or change passphrase if you lose it." = "**Veuillez noter** : vous NE pourrez PAS récupérer ou modifier votre phrase secrète si vous la perdez.";
/* No comment provided by engineer. */
"**Recommended**: device token and notifications are sent to SimpleX Chat notification server, but not the message content, size or who it is from." = "**Recommandé** : le token de l'appareil et les notifications sont envoyés au serveur de notifications SimpleX, mais pas le contenu du message, sa taille ou son auteur.";
/* No comment provided by engineer. */
"**Scan QR code**: to connect to your contact in person or via video call." = "**Scanner le code QR** : pour vous connecter à votre contact en personne ou par appel vidéo.";
/* No comment provided by engineer. */
"**Warning**: Instant push notifications require passphrase saved in Keychain." = "**Avertissement** : les notifications push instantanées nécessitent une phrase secrète enregistrée dans la keychain.";
@@ -280,9 +277,6 @@
/* time interval */
"1 week" = "1 semaine";
/* No comment provided by engineer. */
"1-time link" = "Lien à usage unique";
/* No comment provided by engineer. */
"5 minutes" = "5 minutes";
@@ -350,6 +344,9 @@
/* No comment provided by engineer. */
"Add address to your profile, so that your contacts can share it with other people. Profile update will be sent to your contacts." = "Ajoutez une adresse à votre profil, afin que vos contacts puissent la partager avec d'autres personnes. La mise à jour du profil sera envoyée à vos contacts.";
/* No comment provided by engineer. */
"Add contact" = "Ajouter le contact";
/* No comment provided by engineer. */
"Add preset servers" = "Ajouter des serveurs prédéfinis";
@@ -423,7 +420,7 @@
"Allow disappearing messages only if your contact allows it to you." = "Autorise les messages éphémères seulement si votre contact vous lautorise.";
/* No comment provided by engineer. */
"Allow irreversible message deletion only if your contact allows it to you." = "Autoriser la suppression irréversible des messages uniquement si votre contact vous l'autorise.";
"Allow irreversible message deletion only if your contact allows it to you. (24 hours)" = "Autoriser la suppression irréversible des messages uniquement si votre contact vous l'autorise. (24 heures)";
/* No comment provided by engineer. */
"Allow message reactions only if your contact allows them." = "Autoriser les réactions aux messages uniquement si votre contact les autorise.";
@@ -438,7 +435,7 @@
"Allow sending disappearing messages." = "Autorise lenvoi de messages éphémères.";
/* No comment provided by engineer. */
"Allow to irreversibly delete sent messages." = "Autoriser la suppression irréversible de messages envoyés.";
"Allow to irreversibly delete sent messages. (24 hours)" = "Autoriser la suppression irréversible de messages envoyés. (24 heures)";
/* No comment provided by engineer. */
"Allow to send files and media." = "Permet l'envoi de fichiers et de médias.";
@@ -459,7 +456,7 @@
"Allow your contacts to call you." = "Autorise vos contacts à vous appeler.";
/* No comment provided by engineer. */
"Allow your contacts to irreversibly delete sent messages." = "Autorise vos contacts à supprimer de manière irréversible les messages envoyés.";
"Allow your contacts to irreversibly delete sent messages. (24 hours)" = "Autorise vos contacts à supprimer de manière irréversible les messages envoyés. (24 heures)";
/* No comment provided by engineer. */
"Allow your contacts to send disappearing messages." = "Autorise votre contact à envoyer des messages éphémères.";
@@ -603,7 +600,7 @@
"Both you and your contact can add message reactions." = "Vous et votre contact pouvez ajouter des réactions aux messages.";
/* No comment provided by engineer. */
"Both you and your contact can irreversibly delete sent messages." = "Vous et votre contact êtes tous deux en mesure de supprimer de manière irréversible les messages envoyés.";
"Both you and your contact can irreversibly delete sent messages. (24 hours)" = "Vous et votre contact êtes tous deux en mesure de supprimer de manière irréversible les messages envoyés. (24 heures)";
/* No comment provided by engineer. */
"Both you and your contact can make calls." = "Vous et votre contact pouvez tous deux passer des appels.";
@@ -635,6 +632,9 @@
/* No comment provided by engineer. */
"Calls" = "Appels";
/* No comment provided by engineer. */
"Camera not available" = "Caméra non disponible";
/* No comment provided by engineer. */
"Can't delete user profile!" = "Impossible de supprimer le profil d'utilisateur !";
@@ -723,11 +723,14 @@
/* No comment provided by engineer. */
"Chat is stopped" = "Le chat est arrêté";
/* No comment provided by engineer. */
"Chat is stopped. If you already used this database on another device, you should transfer it back before starting chat." = "Le chat est arrêté. Si vous avez déjà utilisé cette base de données sur un autre appareil, vous devez la transférer à nouveau avant de démarrer le chat.";
/* No comment provided by engineer. */
"Chat preferences" = "Préférences de chat";
/* No comment provided by engineer. */
"Chats" = "Chats";
"Chats" = "Discussions";
/* No comment provided by engineer. */
"Check server address and try again." = "Vérifiez l'adresse du serveur et réessayez.";
@@ -796,7 +799,7 @@
"Connect incognito" = "Se connecter incognito";
/* No comment provided by engineer. */
"Connect to desktop" = "Se connecter au bureau";
"Connect to desktop" = "Connexion au bureau";
/* No comment provided by engineer. */
"connect to SimpleX Chat developers." = "se connecter aux developpeurs de SimpleX Chat.";
@@ -816,9 +819,6 @@
/* No comment provided by engineer. */
"Connect via link" = "Se connecter via un lien";
/* No comment provided by engineer. */
"Connect via link / QR code" = "Se connecter via un lien / code QR";
/* No comment provided by engineer. */
"Connect via one-time link" = "Se connecter via un lien unique";
@@ -960,9 +960,6 @@
/* No comment provided by engineer. */
"Create new profile in [desktop app](https://simplex.chat/downloads/). 💻" = "Créer un nouveau profil sur [l'application de bureau](https://simplex.chat/downloads/). 💻";
/* No comment provided by engineer. */
"Create one-time invitation link" = "Créer un lien d'invitation unique";
/* No comment provided by engineer. */
"Create profile" = "Créer le profil";
@@ -981,6 +978,9 @@
/* No comment provided by engineer. */
"Created on %@" = "Créé le %@";
/* No comment provided by engineer. */
"Creating link…" = "Création d'un lien…";
/* No comment provided by engineer. */
"creator" = "créateur";
@@ -1344,6 +1344,9 @@
/* No comment provided by engineer. */
"Enable automatic message deletion?" = "Activer la suppression automatique des messages ?";
/* No comment provided by engineer. */
"Enable camera access" = "Autoriser l'accès à la caméra";
/* No comment provided by engineer. */
"Enable for all" = "Activer pour tous";
@@ -1398,6 +1401,9 @@
/* notification */
"Encrypted message or another event" = "Message chiffrée ou autre événement";
/* notification */
"Encrypted message: app is stopped" = "Message chiffré: l'application est arrêtée";
/* notification */
"Encrypted message: database error" = "Message chiffrée: erreur de base de données";
@@ -1569,6 +1575,9 @@
/* No comment provided by engineer. */
"Error loading %@ servers" = "Erreur lors du chargement des serveurs %@";
/* No comment provided by engineer. */
"Error opening chat" = "Erreur lors de l'ouverture du chat";
/* No comment provided by engineer. */
"Error receiving file" = "Erreur lors de la réception du fichier";
@@ -1593,6 +1602,9 @@
/* No comment provided by engineer. */
"Error saving user password" = "Erreur d'enregistrement du mot de passe de l'utilisateur";
/* No comment provided by engineer. */
"Error scanning code: %@" = "Erreur lors du scan du code: %@";
/* No comment provided by engineer. */
"Error sending email" = "Erreur lors de l'envoi de l'e-mail";
@@ -1648,7 +1660,7 @@
"event happened" = "event happened";
/* No comment provided by engineer. */
"Exit without saving" = "Quitter sans sauvegarder";
"Exit without saving" = "Quitter sans enregistrer";
/* chat item action */
"Expand" = "Développer";
@@ -1708,7 +1720,7 @@
"Finally, we have them! 🚀" = "Enfin, les voilà ! 🚀";
/* No comment provided by engineer. */
"Find chats faster" = "Trouver des messages plus rapidement";
"Find chats faster" = "Recherche de message plus rapide";
/* No comment provided by engineer. */
"Fix" = "Réparer";
@@ -1798,7 +1810,7 @@
"Group members can add message reactions." = "Les membres du groupe peuvent ajouter des réactions aux messages.";
/* No comment provided by engineer. */
"Group members can irreversibly delete sent messages." = "Les membres du groupe peuvent supprimer de manière irréversible les messages envoyés.";
"Group members can irreversibly delete sent messages. (24 hours)" = "Les membres du groupe peuvent supprimer de manière irréversible les messages envoyés. (24 heures)";
/* No comment provided by engineer. */
"Group members can send direct messages." = "Les membres du groupe peuvent envoyer des messages directs.";
@@ -1890,9 +1902,6 @@
/* No comment provided by engineer. */
"If you can't meet in person, show QR code in a video call, or share the link." = "Si vous ne pouvez pas vous rencontrer en personne, montrez le code QR lors d'un appel vidéo ou partagez le lien.";
/* No comment provided by engineer. */
"If you cannot meet in person, you can **scan QR code in the video call**, or your contact can share an invitation link." = "Si vous ne pouvez pas voir la personne, vous pouvez **scanner le code QR dans un appel vidéo**, ou votre contact peut vous partager un lien d'invitation.";
/* No comment provided by engineer. */
"If you enter this passcode when opening the app, all app data will be irreversibly removed!" = "Si vous saisissez ce code à l'ouverture de l'application, toutes les données de l'application seront irréversiblement supprimées !";
@@ -2010,9 +2019,18 @@
/* invalid chat item */
"invalid data" = "données invalides";
/* No comment provided by engineer. */
"Invalid link" = "Lien invalide";
/* No comment provided by engineer. */
"Invalid name!" = "Nom invalide !";
/* No comment provided by engineer. */
"Invalid QR code" = "Code QR invalide";
/* No comment provided by engineer. */
"Invalid response" = "Réponse invalide";
/* No comment provided by engineer. */
"Invalid server address!" = "Adresse de serveur invalide !";
@@ -2106,9 +2124,15 @@
/* No comment provided by engineer. */
"Joining group" = "Entrain de rejoindre le groupe";
/* No comment provided by engineer. */
"Keep" = "Conserver";
/* No comment provided by engineer. */
"Keep the app open to use it from desktop" = "Garder l'application ouverte pour l'utiliser depuis le bureau";
/* No comment provided by engineer. */
"Keep unused invitation?" = "Conserver l'invitation inutilisée?";
/* No comment provided by engineer. */
"Keep your connections" = "Conserver vos connexions";
@@ -2337,6 +2361,9 @@
/* No comment provided by engineer. */
"never" = "jamais";
/* No comment provided by engineer. */
"New chat" = "Nouveau chat";
/* notification */
"New contact request" = "Nouvelle demande de contact";
@@ -2395,7 +2422,7 @@
"no e2e encryption" = "sans chiffrement de bout en bout";
/* No comment provided by engineer. */
"No filtered chats" = "Pas de chats filtrés";
"No filtered chats" = "Aucune discussion filtrés";
/* No comment provided by engineer. */
"No group!" = "Groupe introuvable !";
@@ -2444,6 +2471,9 @@
/* No comment provided by engineer. */
"Ok" = "Ok";
/* No comment provided by engineer. */
"OK" = "OK";
/* No comment provided by engineer. */
"Old database" = "Ancienne base de données";
@@ -2481,7 +2511,7 @@
"Only you can add message reactions." = "Vous seul pouvez ajouter des réactions aux messages.";
/* No comment provided by engineer. */
"Only you can irreversibly delete messages (your contact can mark them for deletion)." = "Vous êtes le seul à pouvoir supprimer des messages de manière irréversible (votre contact peut les marquer comme supprimé).";
"Only you can irreversibly delete messages (your contact can mark them for deletion). (24 hours)" = "Vous êtes le seul à pouvoir supprimer des messages de manière irréversible (votre contact peut les marquer comme supprimé). (24 heures)";
/* No comment provided by engineer. */
"Only you can make calls." = "Vous seul pouvez passer des appels.";
@@ -2496,7 +2526,7 @@
"Only your contact can add message reactions." = "Seul votre contact peut ajouter des réactions aux messages.";
/* No comment provided by engineer. */
"Only your contact can irreversibly delete messages (you can mark them for deletion)." = "Seul votre contact peut supprimer de manière irréversible des messages (vous pouvez les marquer comme supprimé).";
"Only your contact can irreversibly delete messages (you can mark them for deletion). (24 hours)" = "Seul votre contact peut supprimer de manière irréversible des messages (vous pouvez les marquer comme supprimé). (24 heures)";
/* No comment provided by engineer. */
"Only your contact can make calls." = "Seul votre contact peut passer des appels.";
@@ -2528,6 +2558,15 @@
/* No comment provided by engineer. */
"Open-source protocol and code anybody can run the servers." = "Protocole et code open-source n'importe qui peut heberger un serveur.";
/* No comment provided by engineer. */
"Opening app…" = "Ouverture de l'app…";
/* No comment provided by engineer. */
"Or scan QR code" = "Ou scanner le code QR";
/* No comment provided by engineer. */
"Or show this code" = "Ou présenter ce code";
/* member role */
"owner" = "propriétaire";
@@ -2549,9 +2588,6 @@
/* No comment provided by engineer. */
"Password to show" = "Mot de passe à entrer";
/* No comment provided by engineer. */
"Paste" = "Coller";
/* No comment provided by engineer. */
"Paste desktop address" = "Coller l'adresse du bureau";
@@ -2559,10 +2595,7 @@
"Paste image" = "Coller l'image";
/* No comment provided by engineer. */
"Paste received link" = "Coller le lien reçu";
/* placeholder */
"Paste the link you received to connect with your contact." = "Collez le lien que vous avez reçu dans le cadre ci-dessous pour vous connecter avec votre contact.";
"Paste the link you received" = "Collez le lien que vous avez reçu";
/* No comment provided by engineer. */
"peer-to-peer" = "pair-à-pair";
@@ -2594,6 +2627,9 @@
/* No comment provided by engineer. */
"Please check yours and your contact preferences." = "Veuillez vérifier vos préférences ainsi que celles de votre contact.";
/* No comment provided by engineer. */
"Please contact developers.\nError: %@" = "Veuillez contacter les développeurs.\nErreur: %@";
/* No comment provided by engineer. */
"Please contact group admin." = "Veuillez contacter l'administrateur du groupe.";
@@ -2717,6 +2753,9 @@
/* No comment provided by engineer. */
"Read more in [User Guide](https://simplex.chat/docs/guide/app-settings.html#your-simplex-contact-address)." = "Pour en savoir plus, consultez le [Guide de l'utilisateur](https://simplex.chat/docs/guide/app-settings.html#your-simplex-contact-address).";
/* No comment provided by engineer. */
"Read more in [User Guide](https://simplex.chat/docs/guide/chat-profiles.html#incognito-mode)." = "Pour en savoir plus, consultez le [Guide de l'utilisateur](https://simplex.chat/docs/guide/chat-profiles.html#incognito-mode).";
/* No comment provided by engineer. */
"Read more in [User Guide](https://simplex.chat/docs/guide/readme.html#connect-to-friends)." = "Pour en savoir plus, consultez le [Guide de l'utilisateur](https://simplex.chat/docs/guide/readme.html#connect-to-friends).";
@@ -2861,6 +2900,9 @@
/* No comment provided by engineer. */
"Restore database error" = "Erreur de restauration de la base de données";
/* No comment provided by engineer. */
"Retry" = "Réessayer";
/* chat item action */
"Reveal" = "Révéler";
@@ -2883,52 +2925,52 @@
"Run chat" = "Exécuter le chat";
/* chat item action */
"Save" = "Sauvegarder";
"Save" = "Enregistrer";
/* No comment provided by engineer. */
"Save (and notify contacts)" = "Sauvegarder (et en informer les contacts)";
"Save (and notify contacts)" = "Enregistrer (et en informer les contacts)";
/* No comment provided by engineer. */
"Save and notify contact" = "Sauvegarder et en informer les contacts";
"Save and notify contact" = "Enregistrer et en informer le contact";
/* No comment provided by engineer. */
"Save and notify group members" = "Sauvegarder et en informer les membres du groupe";
"Save and notify group members" = "Enregistrer et en informer les membres du groupe";
/* No comment provided by engineer. */
"Save and update group profile" = "Sauvegarder et mettre à jour le profil du groupe";
"Save and update group profile" = "Enregistrer et mettre à jour le profil du groupe";
/* No comment provided by engineer. */
"Save archive" = "Sauvegarder l'archive";
"Save archive" = "Enregistrer l'archive";
/* No comment provided by engineer. */
"Save auto-accept settings" = "Sauvegarder les paramètres d'acceptation automatique";
"Save auto-accept settings" = "Enregistrer les paramètres de validation automatique";
/* No comment provided by engineer. */
"Save group profile" = "Sauvegarder le profil du groupe";
"Save group profile" = "Enregistrer le profil du groupe";
/* No comment provided by engineer. */
"Save passphrase and open chat" = "Sauvegarder la phrase secrète et ouvrir le chat";
"Save passphrase and open chat" = "Enregistrer la phrase secrète et ouvrir le chat";
/* No comment provided by engineer. */
"Save passphrase in Keychain" = "Sauvegarder la phrase secrète dans la keychain";
"Save passphrase in Keychain" = "Enregistrer la phrase secrète dans la Keychain";
/* No comment provided by engineer. */
"Save preferences?" = "Sauvegarder les préférences ?";
"Save preferences?" = "Enregistrer les préférences?";
/* No comment provided by engineer. */
"Save profile password" = "Enregistrer le mot de passe du profil";
/* No comment provided by engineer. */
"Save servers" = "Sauvegarder les serveurs";
"Save servers" = "Enregistrer les serveurs";
/* No comment provided by engineer. */
"Save servers?" = "Sauvegarder les serveurs ?";
"Save servers?" = "Enregistrer les serveurs?";
/* No comment provided by engineer. */
"Save settings?" = "Sauvegarder les paramètres ?";
"Save settings?" = "Enregistrer les paramètres?";
/* No comment provided by engineer. */
"Save welcome message?" = "Sauvegarder le message d'accueil ?";
"Save welcome message?" = "Enregistrer le message d'accueil?";
/* No comment provided by engineer. */
"Saved WebRTC ICE servers will be removed" = "Les serveurs WebRTC ICE sauvegardés seront supprimés";
@@ -2940,7 +2982,7 @@
"Scan QR code" = "Scanner un code QR";
/* No comment provided by engineer. */
"Scan QR code from desktop" = "Scanner le code QR du bureau";
"Scan QR code from desktop" = "Scannez le code QR du bureau";
/* No comment provided by engineer. */
"Scan security code from your contact's app." = "Scannez le code de sécurité depuis l'application de votre contact.";
@@ -2949,7 +2991,10 @@
"Scan server QR code" = "Scanner un code QR de serveur";
/* No comment provided by engineer. */
"Search" = "Recherche";
"Search" = "Rechercher";
/* No comment provided by engineer. */
"Search or paste SimpleX link" = "Rechercher ou coller un lien SimpleX";
/* network option */
"sec" = "sec";
@@ -3024,7 +3069,7 @@
"Send questions and ideas" = "Envoyez vos questions et idées";
/* No comment provided by engineer. */
"Send receipts" = "Envoyer les justificatifs";
"Send receipts" = "Envoi de justificatifs";
/* No comment provided by engineer. */
"Send them from gallery or custom keyboards." = "Envoyez-les depuis la phototèque ou des claviers personnalisés.";
@@ -3132,7 +3177,7 @@
"Share link" = "Partager le lien";
/* No comment provided by engineer. */
"Share one-time invitation link" = "Partager un lien d'invitation unique";
"Share this 1-time invite link" = "Partager ce lien d'invitation unique";
/* No comment provided by engineer. */
"Share with contacts" = "Partager avec vos contacts";
@@ -3210,10 +3255,10 @@
"Somebody" = "Quelqu'un";
/* No comment provided by engineer. */
"Start a new chat" = "Commencer une nouvelle conversation";
"Start chat" = "Démarrer le chat";
/* No comment provided by engineer. */
"Start chat" = "Démarrer le chat";
"Start chat?" = "Lancer le chat?";
/* No comment provided by engineer. */
"Start migration" = "Démarrer la migration";
@@ -3284,6 +3329,12 @@
/* No comment provided by engineer. */
"Tap to join incognito" = "Appuyez pour rejoindre incognito";
/* No comment provided by engineer. */
"Tap to paste link" = "Appuyez pour coller le lien";
/* No comment provided by engineer. */
"Tap to scan" = "Appuyez pour scanner";
/* No comment provided by engineer. */
"Tap to start a new chat" = "Appuyez ici pour démarrer une nouvelle discussion";
@@ -3329,6 +3380,9 @@
/* No comment provided by engineer. */
"The attempt to change database passphrase was not completed." = "La tentative de modification de la phrase secrète de la base de données n'a pas abouti.";
/* No comment provided by engineer. */
"The code you scanned is not a SimpleX link QR code." = "Le code scanné n'est pas un code QR de lien SimpleX.";
/* No comment provided by engineer. */
"The connection you accepted will be cancelled!" = "La connexion que vous avez acceptée sera annulée !";
@@ -3371,6 +3425,9 @@
/* No comment provided by engineer. */
"The servers for new connections of your current chat profile **%@**." = "Les serveurs pour les nouvelles connexions de votre profil de chat actuel **%@**.";
/* No comment provided by engineer. */
"The text you pasted is not a SimpleX link." = "Le texte collé n'est pas un lien SimpleX.";
/* No comment provided by engineer. */
"Theme" = "Thème";
@@ -3399,7 +3456,7 @@
"this contact" = "ce contact";
/* No comment provided by engineer. */
"This device name" = "Ce nom d'appareil";
"This device name" = "Nom de cet appareil";
/* No comment provided by engineer. */
"This group has over %lld members, delivery receipts are not sent." = "Ce groupe compte plus de %lld membres, les accusés de réception ne sont pas envoyés.";
@@ -3579,7 +3636,7 @@
"Use for new connections" = "Utiliser pour les nouvelles connexions";
/* No comment provided by engineer. */
"Use from desktop" = "Utilisation depuis le bureau";
"Use from desktop" = "Accès au bureau";
/* No comment provided by engineer. */
"Use iOS call interface" = "Utiliser l'interface d'appel d'iOS";
@@ -3587,6 +3644,9 @@
/* No comment provided by engineer. */
"Use new incognito profile" = "Utiliser un nouveau profil incognito";
/* No comment provided by engineer. */
"Use only local notifications?" = "Utilisation de notifications locales uniquement?";
/* No comment provided by engineer. */
"Use server" = "Utiliser ce serveur";
@@ -3788,9 +3848,6 @@
/* No comment provided by engineer. */
"You can accept calls from lock screen, without device and app authentication." = "Vous pouvez accepter des appels à partir de l'écran de verrouillage, sans authentification de l'appareil ou de l'application.";
/* No comment provided by engineer. */
"You can also connect by clicking the link. If it opens in the browser, click **Open in mobile app** button." = "Vous pouvez également vous connecter en cliquant sur le lien. S'il s'ouvre dans le navigateur, cliquez sur le bouton **Open in mobile app**.";
/* No comment provided by engineer. */
"You can create it later" = "Vous pouvez la créer plus tard";
@@ -3803,6 +3860,9 @@
/* No comment provided by engineer. */
"You can hide or mute a user profile - swipe it to the right." = "Vous pouvez masquer ou mettre en sourdine un profil d'utilisateur - faites-le glisser vers la droite.";
/* No comment provided by engineer. */
"You can make it visible to your SimpleX contacts via Settings." = "Vous pouvez le rendre visible à vos contacts SimpleX via Paramètres.";
/* notification body */
"You can now send messages to %@" = "Vous pouvez maintenant envoyer des messages à %@";
@@ -3827,6 +3887,9 @@
/* No comment provided by engineer. */
"You can use markdown to format messages:" = "Vous pouvez utiliser le format markdown pour mettre en forme les messages :";
/* No comment provided by engineer. */
"You can view invitation link again in connection details." = "Vous pouvez à nouveau consulter le lien d'invitation dans les détails de la connexion.";
/* No comment provided by engineer. */
"You can't send messages!" = "Vous ne pouvez pas envoyer de messages !";

View File

@@ -64,11 +64,14 @@
/* No comment provided by engineer. */
"[Star on GitHub](https://github.com/simplex-chat/simplex-chat)" = "[Dai una stella su GitHub](https://github.com/simplex-chat/simplex-chat)";
/* No comment provided by engineer. */
"**Add contact**: to create a new invitation link, or connect via a link you received." = "**Aggiungi contatto**: per creare un nuovo link di invito o connetterti tramite un link che hai ricevuto.";
/* No comment provided by engineer. */
"**Add new contact**: to create your one-time QR Code for your contact." = "**Aggiungi un contatto**: per creare il tuo codice QR o link una tantum per il tuo contatto.";
/* No comment provided by engineer. */
"**Create link / QR code** for your contact to use." = "**Crea link / codice QR** da usare per il tuo contatto.";
"**Create group**: to create a new group." = "**Crea gruppo**: per creare un nuovo gruppo.";
/* No comment provided by engineer. */
"**e2e encrypted** audio call" = "Chiamata **crittografata e2e**";
@@ -82,18 +85,12 @@
/* No comment provided by engineer. */
"**Most private**: do not use SimpleX Chat notifications server, check messages periodically in the background (depends on how often you use the app)." = "**Il più privato**: non usare il server di notifica di SimpleX Chat, controlla i messaggi periodicamente in secondo piano (dipende da quanto spesso usi l'app).";
/* No comment provided by engineer. */
"**Paste received link** or open it in the browser and tap **Open in mobile app**." = "**Incolla il link ricevuto** o aprilo nel browser e tocca **Apri in app mobile**.";
/* No comment provided by engineer. */
"**Please note**: you will NOT be able to recover or change passphrase if you lose it." = "**Nota bene**: NON potrai recuperare o cambiare la password se la perdi.";
/* No comment provided by engineer. */
"**Recommended**: device token and notifications are sent to SimpleX Chat notification server, but not the message content, size or who it is from." = "**Consigliato**: vengono inviati il token del dispositivo e le notifiche al server di notifica di SimpleX Chat, ma non il contenuto del messaggio,la sua dimensione o il suo mittente.";
/* No comment provided by engineer. */
"**Scan QR code**: to connect to your contact in person or via video call." = "**Scansiona codice QR**: per connetterti al contatto di persona o via videochiamata.";
/* No comment provided by engineer. */
"**Warning**: Instant push notifications require passphrase saved in Keychain." = "**Attenzione**: le notifiche push istantanee richiedono una password salvata nel portachiavi.";
@@ -280,9 +277,6 @@
/* time interval */
"1 week" = "1 settimana";
/* No comment provided by engineer. */
"1-time link" = "Link una tantum";
/* No comment provided by engineer. */
"5 minutes" = "5 minuti";
@@ -350,6 +344,9 @@
/* No comment provided by engineer. */
"Add address to your profile, so that your contacts can share it with other people. Profile update will be sent to your contacts." = "Aggiungi l'indirizzo al tuo profilo, in modo che i tuoi contatti possano condividerlo con altre persone. L'aggiornamento del profilo verrà inviato ai tuoi contatti.";
/* No comment provided by engineer. */
"Add contact" = "Aggiungi contatto";
/* No comment provided by engineer. */
"Add preset servers" = "Aggiungi server preimpostati";
@@ -423,7 +420,7 @@
"Allow disappearing messages only if your contact allows it to you." = "Consenti i messaggi a tempo solo se il contatto li consente a te.";
/* No comment provided by engineer. */
"Allow irreversible message deletion only if your contact allows it to you." = "Consenti l'eliminazione irreversibile dei messaggi solo se il contatto la consente a te.";
"Allow irreversible message deletion only if your contact allows it to you. (24 hours)" = "Consenti l'eliminazione irreversibile dei messaggi solo se il contatto la consente a te. (24 ore)";
/* No comment provided by engineer. */
"Allow message reactions only if your contact allows them." = "Consenti reazioni ai messaggi solo se il tuo contatto le consente.";
@@ -438,7 +435,7 @@
"Allow sending disappearing messages." = "Permetti l'invio di messaggi a tempo.";
/* No comment provided by engineer. */
"Allow to irreversibly delete sent messages." = "Permetti di eliminare irreversibilmente i messaggi inviati.";
"Allow to irreversibly delete sent messages. (24 hours)" = "Permetti di eliminare irreversibilmente i messaggi inviati. (24 ore)";
/* No comment provided by engineer. */
"Allow to send files and media." = "Consenti l'invio di file e contenuti multimediali.";
@@ -459,7 +456,7 @@
"Allow your contacts to call you." = "Consenti ai tuoi contatti di chiamarti.";
/* No comment provided by engineer. */
"Allow your contacts to irreversibly delete sent messages." = "Permetti ai tuoi contatti di eliminare irreversibilmente i messaggi inviati.";
"Allow your contacts to irreversibly delete sent messages. (24 hours)" = "Permetti ai tuoi contatti di eliminare irreversibilmente i messaggi inviati. (24 ore)";
/* No comment provided by engineer. */
"Allow your contacts to send disappearing messages." = "Permetti ai tuoi contatti di inviare messaggi a tempo.";
@@ -603,7 +600,7 @@
"Both you and your contact can add message reactions." = "Sia tu che il tuo contatto potete aggiungere reazioni ai messaggi.";
/* No comment provided by engineer. */
"Both you and your contact can irreversibly delete sent messages." = "Sia tu che il tuo contatto potete eliminare irreversibilmente i messaggi inviati.";
"Both you and your contact can irreversibly delete sent messages. (24 hours)" = "Sia tu che il tuo contatto potete eliminare irreversibilmente i messaggi inviati. (24 ore)";
/* No comment provided by engineer. */
"Both you and your contact can make calls." = "Sia tu che il tuo contatto potete effettuare chiamate.";
@@ -635,6 +632,9 @@
/* No comment provided by engineer. */
"Calls" = "Chiamate";
/* No comment provided by engineer. */
"Camera not available" = "Fotocamera non disponibile";
/* No comment provided by engineer. */
"Can't delete user profile!" = "Impossibile eliminare il profilo utente!";
@@ -723,6 +723,9 @@
/* No comment provided by engineer. */
"Chat is stopped" = "Chat fermata";
/* No comment provided by engineer. */
"Chat is stopped. If you already used this database on another device, you should transfer it back before starting chat." = "La chat è ferma. Se hai già usato questo database su un altro dispositivo, dovresti trasferirlo prima di avviare la chat.";
/* No comment provided by engineer. */
"Chat preferences" = "Preferenze della chat";
@@ -816,9 +819,6 @@
/* No comment provided by engineer. */
"Connect via link" = "Connetti via link";
/* No comment provided by engineer. */
"Connect via link / QR code" = "Connetti via link / codice QR";
/* No comment provided by engineer. */
"Connect via one-time link" = "Connetti via link una tantum";
@@ -960,9 +960,6 @@
/* No comment provided by engineer. */
"Create new profile in [desktop app](https://simplex.chat/downloads/). 💻" = "Crea un nuovo profilo nell'[app desktop](https://simplex.chat/downloads/). 💻";
/* No comment provided by engineer. */
"Create one-time invitation link" = "Crea link di invito una tantum";
/* No comment provided by engineer. */
"Create profile" = "Crea profilo";
@@ -981,6 +978,9 @@
/* No comment provided by engineer. */
"Created on %@" = "Creato il %@";
/* No comment provided by engineer. */
"Creating link…" = "Creazione link…";
/* No comment provided by engineer. */
"creator" = "creatore";
@@ -1344,6 +1344,9 @@
/* No comment provided by engineer. */
"Enable automatic message deletion?" = "Attivare l'eliminazione automatica dei messaggi?";
/* No comment provided by engineer. */
"Enable camera access" = "Attiva l'accesso alla fotocamera";
/* No comment provided by engineer. */
"Enable for all" = "Attiva per tutti";
@@ -1398,6 +1401,9 @@
/* notification */
"Encrypted message or another event" = "Messaggio crittografato o altro evento";
/* notification */
"Encrypted message: app is stopped" = "Messaggio cifrato: l'app è ferma";
/* notification */
"Encrypted message: database error" = "Messaggio crittografato: errore del database";
@@ -1569,6 +1575,9 @@
/* No comment provided by engineer. */
"Error loading %@ servers" = "Errore nel caricamento dei server %@";
/* No comment provided by engineer. */
"Error opening chat" = "Errore di apertura della chat";
/* No comment provided by engineer. */
"Error receiving file" = "Errore nella ricezione del file";
@@ -1593,6 +1602,9 @@
/* No comment provided by engineer. */
"Error saving user password" = "Errore nel salvataggio della password utente";
/* No comment provided by engineer. */
"Error scanning code: %@" = "Errore di scansione del codice: %@";
/* No comment provided by engineer. */
"Error sending email" = "Errore nell'invio dell'email";
@@ -1798,7 +1810,7 @@
"Group members can add message reactions." = "I membri del gruppo possono aggiungere reazioni ai messaggi.";
/* No comment provided by engineer. */
"Group members can irreversibly delete sent messages." = "I membri del gruppo possono eliminare irreversibilmente i messaggi inviati.";
"Group members can irreversibly delete sent messages. (24 hours)" = "I membri del gruppo possono eliminare irreversibilmente i messaggi inviati. (24 ore)";
/* No comment provided by engineer. */
"Group members can send direct messages." = "I membri del gruppo possono inviare messaggi diretti.";
@@ -1890,9 +1902,6 @@
/* No comment provided by engineer. */
"If you can't meet in person, show QR code in a video call, or share the link." = "Se non potete incontrarvi di persona, mostra il codice QR in una videochiamata o condividi il link.";
/* No comment provided by engineer. */
"If you cannot meet in person, you can **scan QR code in the video call**, or your contact can share an invitation link." = "Se non potete incontrarvi di persona, puoi **scansionare il codice QR durante la videochiamata** oppure il tuo contatto può condividere un link di invito.";
/* No comment provided by engineer. */
"If you enter this passcode when opening the app, all app data will be irreversibly removed!" = "Se inserisci questo codice all'apertura dell'app, tutti i dati di essa verranno rimossi in modo irreversibile!";
@@ -2010,9 +2019,18 @@
/* invalid chat item */
"invalid data" = "dati non validi";
/* No comment provided by engineer. */
"Invalid link" = "Link non valido";
/* No comment provided by engineer. */
"Invalid name!" = "Nome non valido!";
/* No comment provided by engineer. */
"Invalid QR code" = "Codice QR non valido";
/* No comment provided by engineer. */
"Invalid response" = "Risposta non valida";
/* No comment provided by engineer. */
"Invalid server address!" = "Indirizzo del server non valido!";
@@ -2106,9 +2124,15 @@
/* No comment provided by engineer. */
"Joining group" = "Ingresso nel gruppo";
/* No comment provided by engineer. */
"Keep" = "Tieni";
/* No comment provided by engineer. */
"Keep the app open to use it from desktop" = "Tieni aperta l'app per usarla dal desktop";
/* No comment provided by engineer. */
"Keep unused invitation?" = "Tenere l'invito inutilizzato?";
/* No comment provided by engineer. */
"Keep your connections" = "Mantieni le tue connessioni";
@@ -2337,6 +2361,9 @@
/* No comment provided by engineer. */
"never" = "mai";
/* No comment provided by engineer. */
"New chat" = "Nuova chat";
/* notification */
"New contact request" = "Nuova richiesta di contatto";
@@ -2444,6 +2471,9 @@
/* No comment provided by engineer. */
"Ok" = "Ok";
/* No comment provided by engineer. */
"OK" = "OK";
/* No comment provided by engineer. */
"Old database" = "Database vecchio";
@@ -2481,7 +2511,7 @@
"Only you can add message reactions." = "Solo tu puoi aggiungere reazioni ai messaggi.";
/* No comment provided by engineer. */
"Only you can irreversibly delete messages (your contact can mark them for deletion)." = "Solo tu puoi eliminare irreversibilmente i messaggi (il tuo contatto può contrassegnarli per l'eliminazione).";
"Only you can irreversibly delete messages (your contact can mark them for deletion). (24 hours)" = "Solo tu puoi eliminare irreversibilmente i messaggi (il tuo contatto può contrassegnarli per l'eliminazione). (24 ore)";
/* No comment provided by engineer. */
"Only you can make calls." = "Solo tu puoi effettuare chiamate.";
@@ -2496,7 +2526,7 @@
"Only your contact can add message reactions." = "Solo il tuo contatto può aggiungere reazioni ai messaggi.";
/* No comment provided by engineer. */
"Only your contact can irreversibly delete messages (you can mark them for deletion)." = "Solo il tuo contatto può eliminare irreversibilmente i messaggi (tu puoi contrassegnarli per l'eliminazione).";
"Only your contact can irreversibly delete messages (you can mark them for deletion). (24 hours)" = "Solo il tuo contatto può eliminare irreversibilmente i messaggi (tu puoi contrassegnarli per l'eliminazione). (24 ore)";
/* No comment provided by engineer. */
"Only your contact can make calls." = "Solo il tuo contatto può effettuare chiamate.";
@@ -2528,6 +2558,15 @@
/* No comment provided by engineer. */
"Open-source protocol and code anybody can run the servers." = "Protocollo e codice open source: chiunque può gestire i server.";
/* No comment provided by engineer. */
"Opening app…" = "Apertura dell'app…";
/* No comment provided by engineer. */
"Or scan QR code" = "O scansiona il codice QR";
/* No comment provided by engineer. */
"Or show this code" = "O mostra questo codice";
/* member role */
"owner" = "proprietario";
@@ -2549,9 +2588,6 @@
/* No comment provided by engineer. */
"Password to show" = "Password per mostrare";
/* No comment provided by engineer. */
"Paste" = "Incolla";
/* No comment provided by engineer. */
"Paste desktop address" = "Incolla l'indirizzo desktop";
@@ -2559,10 +2595,7 @@
"Paste image" = "Incolla immagine";
/* No comment provided by engineer. */
"Paste received link" = "Incolla il link ricevuto";
/* placeholder */
"Paste the link you received to connect with your contact." = "Incolla il link che hai ricevuto nella casella sottostante per connetterti con il tuo contatto.";
"Paste the link you received" = "Incolla il link che hai ricevuto";
/* No comment provided by engineer. */
"peer-to-peer" = "peer-to-peer";
@@ -2594,6 +2627,9 @@
/* No comment provided by engineer. */
"Please check yours and your contact preferences." = "Controlla le preferenze tue e del tuo contatto.";
/* No comment provided by engineer. */
"Please contact developers.\nError: %@" = "Contatta gli sviluppatori.\nErrore: %@";
/* No comment provided by engineer. */
"Please contact group admin." = "Contatta l'amministratore del gruppo.";
@@ -2717,6 +2753,9 @@
/* No comment provided by engineer. */
"Read more in [User Guide](https://simplex.chat/docs/guide/app-settings.html#your-simplex-contact-address)." = "Maggiori informazioni nella [Guida per l'utente](https://simplex.chat/docs/guide/app-settings.html#your-simplex-contact-address).";
/* No comment provided by engineer. */
"Read more in [User Guide](https://simplex.chat/docs/guide/chat-profiles.html#incognito-mode)." = "Leggi di più nella [Guida utente](https://simplex.chat/docs/guide/chat-profiles.html#incognito-mode).";
/* No comment provided by engineer. */
"Read more in [User Guide](https://simplex.chat/docs/guide/readme.html#connect-to-friends)." = "Maggiori informazioni nella [Guida per l'utente](https://simplex.chat/docs/guide/readme.html#connect-to-friends).";
@@ -2861,6 +2900,9 @@
/* No comment provided by engineer. */
"Restore database error" = "Errore di ripristino del database";
/* No comment provided by engineer. */
"Retry" = "Riprova";
/* chat item action */
"Reveal" = "Rivela";
@@ -2951,6 +2993,9 @@
/* No comment provided by engineer. */
"Search" = "Cerca";
/* No comment provided by engineer. */
"Search or paste SimpleX link" = "Cerca o incolla un link SimpleX";
/* network option */
"sec" = "sec";
@@ -3132,7 +3177,7 @@
"Share link" = "Condividi link";
/* No comment provided by engineer. */
"Share one-time invitation link" = "Condividi link di invito una tantum";
"Share this 1-time invite link" = "Condividi questo link di invito una tantum";
/* No comment provided by engineer. */
"Share with contacts" = "Condividi con i contatti";
@@ -3210,10 +3255,10 @@
"Somebody" = "Qualcuno";
/* No comment provided by engineer. */
"Start a new chat" = "Inizia una nuova chat";
"Start chat" = "Avvia chat";
/* No comment provided by engineer. */
"Start chat" = "Avvia chat";
"Start chat?" = "Avviare la chat?";
/* No comment provided by engineer. */
"Start migration" = "Avvia la migrazione";
@@ -3284,6 +3329,12 @@
/* No comment provided by engineer. */
"Tap to join incognito" = "Toccare per entrare in incognito";
/* No comment provided by engineer. */
"Tap to paste link" = "Tocca per incollare il link";
/* No comment provided by engineer. */
"Tap to scan" = "Tocca per scansionare";
/* No comment provided by engineer. */
"Tap to start a new chat" = "Tocca per iniziare una chat";
@@ -3329,6 +3380,9 @@
/* No comment provided by engineer. */
"The attempt to change database passphrase was not completed." = "Il tentativo di cambiare la password del database non è stato completato.";
/* No comment provided by engineer. */
"The code you scanned is not a SimpleX link QR code." = "Il codice che hai scansionato non è un codice QR di link SimpleX.";
/* No comment provided by engineer. */
"The connection you accepted will be cancelled!" = "La connessione che hai accettato verrà annullata!";
@@ -3371,6 +3425,9 @@
/* No comment provided by engineer. */
"The servers for new connections of your current chat profile **%@**." = "I server per le nuove connessioni del profilo di chat attuale **%@**.";
/* No comment provided by engineer. */
"The text you pasted is not a SimpleX link." = "Il testo che hai incollato non è un link SimpleX.";
/* No comment provided by engineer. */
"Theme" = "Tema";
@@ -3587,6 +3644,9 @@
/* No comment provided by engineer. */
"Use new incognito profile" = "Usa nuovo profilo in incognito";
/* No comment provided by engineer. */
"Use only local notifications?" = "Usare solo notifiche locali?";
/* No comment provided by engineer. */
"Use server" = "Usa il server";
@@ -3788,9 +3848,6 @@
/* No comment provided by engineer. */
"You can accept calls from lock screen, without device and app authentication." = "Puoi accettare chiamate dalla schermata di blocco, senza l'autenticazione del dispositivo e dell'app.";
/* No comment provided by engineer. */
"You can also connect by clicking the link. If it opens in the browser, click **Open in mobile app** button." = "Puoi anche connetterti cliccando il link. Se si apre nel browser, clicca il pulsante **Apri nell'app mobile**.";
/* No comment provided by engineer. */
"You can create it later" = "Puoi crearlo più tardi";
@@ -3803,6 +3860,9 @@
/* No comment provided by engineer. */
"You can hide or mute a user profile - swipe it to the right." = "Puoi nascondere o silenziare un profilo utente - scorrilo verso destra.";
/* No comment provided by engineer. */
"You can make it visible to your SimpleX contacts via Settings." = "Puoi renderlo visibile ai tuoi contatti SimpleX nelle impostazioni.";
/* notification body */
"You can now send messages to %@" = "Ora puoi inviare messaggi a %@";
@@ -3827,6 +3887,9 @@
/* No comment provided by engineer. */
"You can use markdown to format messages:" = "Puoi usare il markdown per formattare i messaggi:";
/* No comment provided by engineer. */
"You can view invitation link again in connection details." = "Puoi vedere di nuovo il link di invito nei dettagli di connessione.";
/* No comment provided by engineer. */
"You can't send messages!" = "Non puoi inviare messaggi!";

View File

@@ -56,13 +56,10 @@
"**Add new contact**: to create your one-time QR Code for your contact." = "**新しい連絡先を追加**: 連絡先のワンタイム QR コードまたはリンクを作成します。";
/* No comment provided by engineer. */
"**Create link / QR code** for your contact to use." = "連絡先が使用する **リンク/QR コードを作成します**。";
"**e2e encrypted** audio call" = "**e2e 暗号化**音声通話";
/* No comment provided by engineer. */
"**e2e encrypted** audio call" = "**e2e 暗号化**された音声通話";
/* No comment provided by engineer. */
"**e2e encrypted** video call" = "**エンドツーエンド暗号化済み**のビデオ通話";
"**e2e encrypted** video call" = "**e2e暗号化**ビデオ通話";
/* No comment provided by engineer. */
"**More private**: check new messages every 20 minutes. Device token is shared with SimpleX Chat server, but not how many contacts or messages you have." = "**よりプライベート**: 20 分ごとに新しいメッセージを確認します。 デバイス トークンは SimpleX Chat サーバーと共有されますが、連絡先やメッセージの数は共有されません。";
@@ -70,23 +67,17 @@
/* No comment provided by engineer. */
"**Most private**: do not use SimpleX Chat notifications server, check messages periodically in the background (depends on how often you use the app)." = "**最もプライベート**: SimpleX Chat 通知サーバーを使用せず、バックグラウンドで定期的にメッセージをチェックします (アプリの使用頻度によって異なります)。";
/* No comment provided by engineer. */
"**Paste received link** or open it in the browser and tap **Open in mobile app**." = "**受信したリンク**を貼り付けるか、ブラウザーで開いて [**モバイル アプリで開く**] をタップします。";
/* No comment provided by engineer. */
"**Please note**: you will NOT be able to recover or change passphrase if you lose it." = "**注意**: パスフレーズを紛失すると、パスフレーズを復元または変更できなくなります。";
/* No comment provided by engineer. */
"**Recommended**: device token and notifications are sent to SimpleX Chat notification server, but not the message content, size or who it is from." = "**推奨**: デバイス トークンと通知は SimpleX Chat 通知サーバーに送信されますが、メッセージの内容、サイズ、送信者は送信されません。";
/* No comment provided by engineer. */
"**Scan QR code**: to connect to your contact in person or via video call." = "**QR コードをスキャン**: 直接またはビデオ通話で連絡先に接続します。";
/* No comment provided by engineer. */
"**Warning**: Instant push notifications require passphrase saved in Keychain." = "**警告**: 即時の プッシュ通知には、キーチェーンに保存されたパスフレーズが必要です。";
/* No comment provided by engineer. */
"*bold*" = "\\*太字*";
"*bold*" = "\\*太字*";
/* copied message info title, # <title> */
"# %@" = "# %@";
@@ -253,9 +244,6 @@
/* time interval */
"1 week" = "1週間";
/* No comment provided by engineer. */
"1-time link" = "使い捨てのリンク";
/* No comment provided by engineer. */
"5 minutes" = "5分";
@@ -309,7 +297,7 @@
"Accept" = "承諾";
/* No comment provided by engineer. */
"Accept connection request?" = "連絡を受け入れる";
"Accept connection request?" = "接続要求を承認?";
/* notification body */
"Accept contact request from %@?" = "%@ からの連絡要求を受け入れますか?";
@@ -381,7 +369,7 @@
"All your contacts will remain connected." = "あなたの連絡先が繋がったまま継続します。";
/* No comment provided by engineer. */
"All your contacts will remain connected. Profile update will be sent to your contacts." = "あなたの連絡先が繋がったまま継続します。";
"All your contacts will remain connected. Profile update will be sent to your contacts." = "すべての連絡先は維持されます。連絡先に更新されたプロフィールを送信します。";
/* No comment provided by engineer. */
"Allow" = "許可";
@@ -393,7 +381,7 @@
"Allow disappearing messages only if your contact allows it to you." = "連絡先が許可している場合のみ消えるメッセージを許可する。";
/* No comment provided by engineer. */
"Allow irreversible message deletion only if your contact allows it to you." = "送信相手も永久メッセージ削除を許可する時のみに許可する。";
"Allow irreversible message deletion only if your contact allows it to you. (24 hours)" = "送信相手も永久メッセージ削除を許可する時のみに許可する。";
/* No comment provided by engineer. */
"Allow message reactions only if your contact allows them." = "連絡先が許可している場合にのみ、メッセージへのリアクションを許可します。";
@@ -408,7 +396,7 @@
"Allow sending disappearing messages." = "消えるメッセージの送信を許可する。";
/* No comment provided by engineer. */
"Allow to irreversibly delete sent messages." = "送信済みメッセージの永久削除を許可する。";
"Allow to irreversibly delete sent messages. (24 hours)" = "送信済みメッセージの永久削除を許可する。";
/* No comment provided by engineer. */
"Allow to send files and media." = "ファイルやメディアの送信を許可する。";
@@ -429,7 +417,7 @@
"Allow your contacts to call you." = "連絡先からの通話を許可する。";
/* No comment provided by engineer. */
"Allow your contacts to irreversibly delete sent messages." = "送信相手が永久メッセージ削除するのを許可する。";
"Allow your contacts to irreversibly delete sent messages. (24 hours)" = "送信相手が永久メッセージ削除するのを許可する。";
/* No comment provided by engineer. */
"Allow your contacts to send disappearing messages." = "送信相手が消えるメッセージを送るのを許可する。";
@@ -540,7 +528,7 @@
"Both you and your contact can add message reactions." = "自分も相手もメッセージへのリアクションを追加できます。";
/* No comment provided by engineer. */
"Both you and your contact can irreversibly delete sent messages." = "あなたと連絡相手が送信済みメッセージを永久削除できます。";
"Both you and your contact can irreversibly delete sent messages. (24 hours)" = "あなたと連絡相手が送信済みメッセージを永久削除できます。";
/* No comment provided by engineer. */
"Both you and your contact can make calls." = "あなたからも連絡先からも通話ができます。";
@@ -736,10 +724,7 @@
"Connect via link" = "リンク経由で接続";
/* No comment provided by engineer. */
"Connect via link / QR code" = "リンク・QRコード経由で接続";
/* No comment provided by engineer. */
"Connect via one-time link" = "使い捨てリンク経由で接続しますか?";
"Connect via one-time link" = "ワンタイムリンクで接続";
/* No comment provided by engineer. */
"connected" = "接続中";
@@ -852,9 +837,6 @@
/* No comment provided by engineer. */
"Create new profile in [desktop app](https://simplex.chat/downloads/). 💻" = "[デスクトップアプリ](https://simplex.chat/downloads/)で新しいプロファイルを作成します。 💻";
/* No comment provided by engineer. */
"Create one-time invitation link" = "使い捨ての招待リンクを生成する";
/* server test step */
"Create queue" = "キューの作成";
@@ -1081,10 +1063,10 @@
"deleted group" = "削除されたグループ";
/* No comment provided by engineer. */
"Delivery" = "Delivery";
"Delivery" = "配信";
/* No comment provided by engineer. */
"Delivery receipts are disabled!" = "Delivery receipts are disabled!";
"Delivery receipts are disabled!" = "配信通知の停止!";
/* No comment provided by engineer. */
"Delivery receipts!" = "配信通知!";
@@ -1621,7 +1603,7 @@
"Group members can add message reactions." = "グループメンバーはメッセージへのリアクションを追加できます。";
/* No comment provided by engineer. */
"Group members can irreversibly delete sent messages." = "グループのメンバーがメッセージを完全削除することができます。";
"Group members can irreversibly delete sent messages. (24 hours)" = "グループのメンバーがメッセージを完全削除することができます。";
/* No comment provided by engineer. */
"Group members can send direct messages." = "グループのメンバーがダイレクトメッセージを送信できます。";
@@ -1713,9 +1695,6 @@
/* No comment provided by engineer. */
"If you can't meet in person, show QR code in a video call, or share the link." = "直接会えない場合は、ビデオ通話で QR コードを表示するか、リンクを共有してください。";
/* No comment provided by engineer. */
"If you cannot meet in person, you can **scan QR code in the video call**, or your contact can share an invitation link." = "直接会えない場合は、**ビデオ通話で QR コードを表示する**か、リンクを共有してください。";
/* No comment provided by engineer. */
"If you enter this passcode when opening the app, all app data will be irreversibly removed!" = "アプリを開くときにこのパスコードを入力すると、アプリのすべてのデータが元に戻せないように削除されます!";
@@ -2265,7 +2244,7 @@
"Only you can add message reactions." = "メッセージへのリアクションを追加できるのは、あなただけです。";
/* No comment provided by engineer. */
"Only you can irreversibly delete messages (your contact can mark them for deletion)." = "メッセージの完全削除はあなたにしかできません (あなたの連絡先は削除対象とすることができます)。";
"Only you can irreversibly delete messages (your contact can mark them for deletion). (24 hours)" = "メッセージの完全削除はあなたにしかできません (あなたの連絡先は削除対象とすることができます)。";
/* No comment provided by engineer. */
"Only you can make calls." = "自分からのみ通話ができます。";
@@ -2280,7 +2259,7 @@
"Only your contact can add message reactions." = "メッセージへのリアクションを追加できるのは連絡先だけです。";
/* No comment provided by engineer. */
"Only your contact can irreversibly delete messages (you can mark them for deletion)." = "メッセージを完全削除できるのはあなたの連絡相手だけです (あなたは削除対象とすることができます)。";
"Only your contact can irreversibly delete messages (you can mark them for deletion). (24 hours)" = "メッセージを完全削除できるのはあなたの連絡相手だけです (あなたは削除対象とすることができます)。";
/* No comment provided by engineer. */
"Only your contact can make calls." = "連絡先からのみ通話ができます。";
@@ -2330,18 +2309,9 @@
/* No comment provided by engineer. */
"Password to show" = "パスワードを表示する";
/* No comment provided by engineer. */
"Paste" = "貼り付け";
/* No comment provided by engineer. */
"Paste image" = "画像の貼り付け";
/* No comment provided by engineer. */
"Paste received link" = "頂いたリンクを貼り付ける";
/* placeholder */
"Paste the link you received to connect with your contact." = "連絡相手から頂いたリンクを以下の入力欄に貼り付けて繋がります。";
/* No comment provided by engineer. */
"peer-to-peer" = "P2P";
@@ -2861,9 +2831,6 @@
/* No comment provided by engineer. */
"Share link" = "リンクを送る";
/* No comment provided by engineer. */
"Share one-time invitation link" = "使い捨ての招待リンクを共有";
/* No comment provided by engineer. */
"Share with contacts" = "連絡先と共有する";
@@ -2939,9 +2906,6 @@
/* notification title */
"Somebody" = "誰か";
/* No comment provided by engineer. */
"Start a new chat" = "新しいチャットを開始する";
/* No comment provided by engineer. */
"Start chat" = "チャットを開始する";
@@ -3440,9 +3404,6 @@
/* No comment provided by engineer. */
"You can accept calls from lock screen, without device and app authentication." = "デバイスやアプリの認証を行わずに、ロック画面から通話を受けることができます。";
/* No comment provided by engineer. */
"You can also connect by clicking the link. If it opens in the browser, click **Open in mobile app** button." = "リンクをクリックすることでも接続できます。ブラウザで開いた場合は、**モバイルアプリで開く**ボタンをクリックしてください。";
/* No comment provided by engineer. */
"You can create it later" = "後からでも作成できます";

View File

@@ -2,14 +2,14 @@
"CFBundleName" = "SimpleX";
/* Privacy - Camera Usage Description */
"NSCameraUsageDescription" = "SimpleX は、他のユーザーに接続したりビデオ通話を行うために QR コードをスキャンするためにカメラにアクセスする必要があります。";
"NSCameraUsageDescription" = "SimpleX他のユーザーに接続したりビデオ通話する際にQRコード読み取りのためにカメラにアクセスする必要があります。";
/* Privacy - Face ID Usage Description */
"NSFaceIDUsageDescription" = "SimpleX はローカル認証に Face ID を使用します";
"NSFaceIDUsageDescription" = "SimpleXはローカル認証にFace IDを使用します";
/* Privacy - Microphone Usage Description */
"NSMicrophoneUsageDescription" = "SimpleX では、音声通話やビデオ通話および音声メッセージの録音のためにマイクへのアクセスが必要です。";
"NSMicrophoneUsageDescription" = "SimpleX音声通話やビデオ通話および音声メッセージの録音のためにマイクアクセスする必要があります。";
/* Privacy - Photo Library Additions Usage Description */
"NSPhotoLibraryAddUsageDescription" = "SimpleX は、キャプチャおよび受信したメディアを保存するためにフォト ライブラリにアクセスする必要があります";
"NSPhotoLibraryAddUsageDescription" = "SimpleXキャプチャおよび受信したメディアを保存するためにフォトライブラリにアクセスする必要があります";

View File

@@ -64,11 +64,14 @@
/* No comment provided by engineer. */
"[Star on GitHub](https://github.com/simplex-chat/simplex-chat)" = "[Star on GitHub](https://github.com/simplex-chat/simplex-chat)";
/* No comment provided by engineer. */
"**Add contact**: to create a new invitation link, or connect via a link you received." = "**Contact toevoegen**: om een nieuwe uitnodigingslink aan te maken, of verbinding te maken via een link die u heeft ontvangen.";
/* No comment provided by engineer. */
"**Add new contact**: to create your one-time QR Code for your contact." = "**Nieuw contact toevoegen**: om uw eenmalige QR-code of link voor uw contact te maken.";
/* No comment provided by engineer. */
"**Create link / QR code** for your contact to use." = "**Maak een link / QR-code aan** die uw contact kan gebruiken.";
"**Create group**: to create a new group." = "**Groep aanmaken**: om een nieuwe groep aan te maken.";
/* No comment provided by engineer. */
"**e2e encrypted** audio call" = "**e2e versleuteld** audio gesprek";
@@ -82,18 +85,12 @@
/* No comment provided by engineer. */
"**Most private**: do not use SimpleX Chat notifications server, check messages periodically in the background (depends on how often you use the app)." = "**Meest privé**: gebruik geen SimpleX Chat-notificatie server, controleer berichten regelmatig op de achtergrond (afhankelijk van hoe vaak u de app gebruikt).";
/* No comment provided by engineer. */
"**Paste received link** or open it in the browser and tap **Open in mobile app**." = "**Plak de ontvangen link** of open deze in de browser en tik op **Openen in mobiele app**.";
/* No comment provided by engineer. */
"**Please note**: you will NOT be able to recover or change passphrase if you lose it." = "**Let op**: u kunt het wachtwoord NIET herstellen of wijzigen als u het kwijtraakt.";
/* No comment provided by engineer. */
"**Recommended**: device token and notifications are sent to SimpleX Chat notification server, but not the message content, size or who it is from." = "**Aanbevolen**: apparaattoken en meldingen worden naar de SimpleX Chat-meldingsserver gestuurd, maar niet de berichtinhoud, -grootte of van wie het afkomstig is.";
/* No comment provided by engineer. */
"**Scan QR code**: to connect to your contact in person or via video call." = "**Scan QR-code**: om persoonlijk of via een video gesprek verbinding te maken met uw contact.";
/* No comment provided by engineer. */
"**Warning**: Instant push notifications require passphrase saved in Keychain." = "**Waarschuwing**: voor directe push meldingen is een wachtwoord vereist dat is opgeslagen in de Keychain.";
@@ -280,9 +277,6 @@
/* time interval */
"1 week" = "1 week";
/* No comment provided by engineer. */
"1-time link" = "Eenmalige link";
/* No comment provided by engineer. */
"5 minutes" = "5 minuten";
@@ -350,6 +344,9 @@
/* No comment provided by engineer. */
"Add address to your profile, so that your contacts can share it with other people. Profile update will be sent to your contacts." = "Voeg een adres toe aan uw profiel, zodat uw contacten het met andere mensen kunnen delen. Profiel update wordt naar uw contacten verzonden.";
/* No comment provided by engineer. */
"Add contact" = "Contact toevoegen";
/* No comment provided by engineer. */
"Add preset servers" = "Vooraf ingestelde servers toevoegen";
@@ -423,7 +420,7 @@
"Allow disappearing messages only if your contact allows it to you." = "Sta verdwijnende berichten alleen toe als uw contact dit toestaat.";
/* No comment provided by engineer. */
"Allow irreversible message deletion only if your contact allows it to you." = "Sta het onomkeerbaar verwijderen van berichten alleen toe als uw contact dit toestaat.";
"Allow irreversible message deletion only if your contact allows it to you. (24 hours)" = "Sta het onomkeerbaar verwijderen van berichten alleen toe als uw contact dit toestaat. (24 uur)";
/* No comment provided by engineer. */
"Allow message reactions only if your contact allows them." = "Sta berichtreacties alleen toe als uw contact dit toestaat.";
@@ -438,7 +435,7 @@
"Allow sending disappearing messages." = "Toestaan dat verdwijnende berichten worden verzonden.";
/* No comment provided by engineer. */
"Allow to irreversibly delete sent messages." = "Sta toe om verzonden berichten onomkeerbaar te verwijderen.";
"Allow to irreversibly delete sent messages. (24 hours)" = "Sta toe om verzonden berichten onomkeerbaar te verwijderen. (24 uur)";
/* No comment provided by engineer. */
"Allow to send files and media." = "Sta toe om bestanden en media te verzenden.";
@@ -459,7 +456,7 @@
"Allow your contacts to call you." = "Sta toe dat uw contacten u bellen.";
/* No comment provided by engineer. */
"Allow your contacts to irreversibly delete sent messages." = "Laat uw contacten verzonden berichten onomkeerbaar verwijderen.";
"Allow your contacts to irreversibly delete sent messages. (24 hours)" = "Laat uw contacten verzonden berichten onomkeerbaar verwijderen. (24 uur)";
/* No comment provided by engineer. */
"Allow your contacts to send disappearing messages." = "Sta toe dat uw contacten verdwijnende berichten verzenden.";
@@ -603,7 +600,7 @@
"Both you and your contact can add message reactions." = "Zowel u als uw contact kunnen berichtreacties toevoegen.";
/* No comment provided by engineer. */
"Both you and your contact can irreversibly delete sent messages." = "Zowel jij als je contact kunnen verzonden berichten onherroepelijk verwijderen.";
"Both you and your contact can irreversibly delete sent messages. (24 hours)" = "Zowel jij als je contact kunnen verzonden berichten onherroepelijk verwijderen. (24 uur)";
/* No comment provided by engineer. */
"Both you and your contact can make calls." = "Zowel u als uw contact kunnen bellen.";
@@ -635,6 +632,9 @@
/* No comment provided by engineer. */
"Calls" = "Oproepen";
/* No comment provided by engineer. */
"Camera not available" = "Camera niet beschikbaar";
/* No comment provided by engineer. */
"Can't delete user profile!" = "Kan gebruikers profiel niet verwijderen!";
@@ -723,6 +723,9 @@
/* No comment provided by engineer. */
"Chat is stopped" = "Chat is gestopt";
/* No comment provided by engineer. */
"Chat is stopped. If you already used this database on another device, you should transfer it back before starting chat." = "Chat is gestopt. Als je deze database al op een ander apparaat hebt gebruikt, moet je deze terugzetten voordat je met chatten begint.";
/* No comment provided by engineer. */
"Chat preferences" = "Gesprek voorkeuren";
@@ -816,9 +819,6 @@
/* No comment provided by engineer. */
"Connect via link" = "Maak verbinding via link";
/* No comment provided by engineer. */
"Connect via link / QR code" = "Maak verbinding via link / QR-code";
/* No comment provided by engineer. */
"Connect via one-time link" = "Verbinden via een eenmalige link?";
@@ -960,9 +960,6 @@
/* No comment provided by engineer. */
"Create new profile in [desktop app](https://simplex.chat/downloads/). 💻" = "Maak een nieuw profiel aan in [desktop-app](https://simplex.chat/downloads/). 💻";
/* No comment provided by engineer. */
"Create one-time invitation link" = "Maak een eenmalige uitnodiging link";
/* No comment provided by engineer. */
"Create profile" = "Maak een profiel aan";
@@ -981,6 +978,9 @@
/* No comment provided by engineer. */
"Created on %@" = "Gemaakt op %@";
/* No comment provided by engineer. */
"Creating link…" = "Link maken…";
/* No comment provided by engineer. */
"creator" = "creator";
@@ -1344,6 +1344,9 @@
/* No comment provided by engineer. */
"Enable automatic message deletion?" = "Automatisch verwijderen van berichten aanzetten?";
/* No comment provided by engineer. */
"Enable camera access" = "Schakel cameratoegang in";
/* No comment provided by engineer. */
"Enable for all" = "Inschakelen voor iedereen";
@@ -1398,6 +1401,9 @@
/* notification */
"Encrypted message or another event" = "Versleuteld bericht of een andere gebeurtenis";
/* notification */
"Encrypted message: app is stopped" = "Versleuteld bericht: app is gestopt";
/* notification */
"Encrypted message: database error" = "Versleuteld bericht: database fout";
@@ -1569,6 +1575,9 @@
/* No comment provided by engineer. */
"Error loading %@ servers" = "Fout bij het laden van %@ servers";
/* No comment provided by engineer. */
"Error opening chat" = "Fout bij het openen van de chat";
/* No comment provided by engineer. */
"Error receiving file" = "Fout bij ontvangen van bestand";
@@ -1593,6 +1602,9 @@
/* No comment provided by engineer. */
"Error saving user password" = "Fout bij opslaan gebruikers wachtwoord";
/* No comment provided by engineer. */
"Error scanning code: %@" = "Fout bij het scannen van code: %@";
/* No comment provided by engineer. */
"Error sending email" = "Fout bij het verzenden van e-mail";
@@ -1798,7 +1810,7 @@
"Group members can add message reactions." = "Groepsleden kunnen berichtreacties toevoegen.";
/* No comment provided by engineer. */
"Group members can irreversibly delete sent messages." = "Groepsleden kunnen verzonden berichten onherroepelijk verwijderen.";
"Group members can irreversibly delete sent messages. (24 hours)" = "Groepsleden kunnen verzonden berichten onherroepelijk verwijderen. (24 uur)";
/* No comment provided by engineer. */
"Group members can send direct messages." = "Groepsleden kunnen directe berichten sturen.";
@@ -1890,9 +1902,6 @@
/* No comment provided by engineer. */
"If you can't meet in person, show QR code in a video call, or share the link." = "Als je elkaar niet persoonlijk kunt ontmoeten, laat dan de QR-code zien in een videogesprek of deel de link.";
/* No comment provided by engineer. */
"If you cannot meet in person, you can **scan QR code in the video call**, or your contact can share an invitation link." = "Als u elkaar niet persoonlijk kunt ontmoeten, kunt u **de QR-code scannen in het video gesprek**, of uw contact kan een uitnodiging link delen.";
/* No comment provided by engineer. */
"If you enter this passcode when opening the app, all app data will be irreversibly removed!" = "Als u deze toegangscode invoert bij het openen van de app, worden alle app-gegevens onomkeerbaar verwijderd!";
@@ -2010,9 +2019,18 @@
/* invalid chat item */
"invalid data" = "ongeldige gegevens";
/* No comment provided by engineer. */
"Invalid link" = "Ongeldige link";
/* No comment provided by engineer. */
"Invalid name!" = "Ongeldige naam!";
/* No comment provided by engineer. */
"Invalid QR code" = "Ongeldige QR-code";
/* No comment provided by engineer. */
"Invalid response" = "Ongeldig antwoord";
/* No comment provided by engineer. */
"Invalid server address!" = "Ongeldig server adres!";
@@ -2106,9 +2124,15 @@
/* No comment provided by engineer. */
"Joining group" = "Deel nemen aan groep";
/* No comment provided by engineer. */
"Keep" = "Bewaar";
/* No comment provided by engineer. */
"Keep the app open to use it from desktop" = "Houd de app geopend om deze vanaf de desktop te gebruiken";
/* No comment provided by engineer. */
"Keep unused invitation?" = "Ongebruikte uitnodiging bewaren?";
/* No comment provided by engineer. */
"Keep your connections" = "Behoud uw verbindingen";
@@ -2337,6 +2361,9 @@
/* No comment provided by engineer. */
"never" = "nooit";
/* No comment provided by engineer. */
"New chat" = "Nieuw gesprek";
/* notification */
"New contact request" = "Nieuw contactverzoek";
@@ -2444,6 +2471,9 @@
/* No comment provided by engineer. */
"Ok" = "OK";
/* No comment provided by engineer. */
"OK" = "OK";
/* No comment provided by engineer. */
"Old database" = "Oude database";
@@ -2481,7 +2511,7 @@
"Only you can add message reactions." = "Alleen jij kunt berichtreacties toevoegen.";
/* No comment provided by engineer. */
"Only you can irreversibly delete messages (your contact can mark them for deletion)." = "Alleen jij kunt berichten onomkeerbaar verwijderen (je contact kan ze markeren voor verwijdering).";
"Only you can irreversibly delete messages (your contact can mark them for deletion). (24 hours)" = "Alleen jij kunt berichten onomkeerbaar verwijderen (je contact kan ze markeren voor verwijdering). (24 uur)";
/* No comment provided by engineer. */
"Only you can make calls." = "Alleen jij kunt bellen.";
@@ -2496,7 +2526,7 @@
"Only your contact can add message reactions." = "Alleen uw contact kan berichtreacties toevoegen.";
/* No comment provided by engineer. */
"Only your contact can irreversibly delete messages (you can mark them for deletion)." = "Alleen uw contact kan berichten onherroepelijk verwijderen (u kunt ze markeren voor verwijdering).";
"Only your contact can irreversibly delete messages (you can mark them for deletion). (24 hours)" = "Alleen uw contact kan berichten onherroepelijk verwijderen (u kunt ze markeren voor verwijdering). (24 uur)";
/* No comment provided by engineer. */
"Only your contact can make calls." = "Alleen je contact kan bellen.";
@@ -2528,6 +2558,15 @@
/* No comment provided by engineer. */
"Open-source protocol and code anybody can run the servers." = "Open-source protocol en code. Iedereen kan de servers draaien.";
/* No comment provided by engineer. */
"Opening app…" = "App openen…";
/* No comment provided by engineer. */
"Or scan QR code" = "Of scan de QR-code";
/* No comment provided by engineer. */
"Or show this code" = "Of laat deze code zien";
/* member role */
"owner" = "Eigenaar";
@@ -2549,9 +2588,6 @@
/* No comment provided by engineer. */
"Password to show" = "Wachtwoord om weer te geven";
/* No comment provided by engineer. */
"Paste" = "Plakken";
/* No comment provided by engineer. */
"Paste desktop address" = "Desktopadres plakken";
@@ -2559,10 +2595,7 @@
"Paste image" = "Afbeelding plakken";
/* No comment provided by engineer. */
"Paste received link" = "Plak de ontvangen link";
/* placeholder */
"Paste the link you received to connect with your contact." = "Plak de link die je hebt ontvangen in het vak hieronder om verbinding te maken met je contact.";
"Paste the link you received" = "Plak de link die je hebt ontvangen";
/* No comment provided by engineer. */
"peer-to-peer" = "peer-to-peer";
@@ -2594,6 +2627,9 @@
/* No comment provided by engineer. */
"Please check yours and your contact preferences." = "Controleer de uwe en uw contact voorkeuren.";
/* No comment provided by engineer. */
"Please contact developers.\nError: %@" = "Neem contact op met ontwikkelaars.\nFout: %@";
/* No comment provided by engineer. */
"Please contact group admin." = "Neem contact op met de groep beheerder.";
@@ -2717,6 +2753,9 @@
/* No comment provided by engineer. */
"Read more in [User Guide](https://simplex.chat/docs/guide/app-settings.html#your-simplex-contact-address)." = "Lees meer in de [Gebruikershandleiding](https://simplex.chat/docs/guide/app-settings.html#uw-simplex-contactadres).";
/* No comment provided by engineer. */
"Read more in [User Guide](https://simplex.chat/docs/guide/chat-profiles.html#incognito-mode)." = "Lees meer in de [Gebruikershandleiding](https://simplex.chat/docs/guide/chat-profiles.html#incognito-mode).";
/* No comment provided by engineer. */
"Read more in [User Guide](https://simplex.chat/docs/guide/readme.html#connect-to-friends)." = "Lees meer in de [Gebruikershandleiding](https://simplex.chat/docs/guide/readme.html#connect-to-friends).";
@@ -2861,6 +2900,9 @@
/* No comment provided by engineer. */
"Restore database error" = "Database fout herstellen";
/* No comment provided by engineer. */
"Retry" = "Opnieuw proberen";
/* chat item action */
"Reveal" = "Onthullen";
@@ -2951,6 +2993,9 @@
/* No comment provided by engineer. */
"Search" = "Zoeken";
/* No comment provided by engineer. */
"Search or paste SimpleX link" = "Zoek of plak de SimpleX link";
/* network option */
"sec" = "sec";
@@ -3132,7 +3177,7 @@
"Share link" = "Deel link";
/* No comment provided by engineer. */
"Share one-time invitation link" = "Eenmalige uitnodiging link delen";
"Share this 1-time invite link" = "Deel deze eenmalige uitnodigingslink";
/* No comment provided by engineer. */
"Share with contacts" = "Delen met contacten";
@@ -3210,10 +3255,10 @@
"Somebody" = "Iemand";
/* No comment provided by engineer. */
"Start a new chat" = "Begin een nieuw gesprek";
"Start chat" = "Begin gesprek";
/* No comment provided by engineer. */
"Start chat" = "Begin gesprek";
"Start chat?" = "Begin chat?";
/* No comment provided by engineer. */
"Start migration" = "Start migratie";
@@ -3284,6 +3329,12 @@
/* No comment provided by engineer. */
"Tap to join incognito" = "Tik om incognito lid te worden";
/* No comment provided by engineer. */
"Tap to paste link" = "Tik om de link te plakken";
/* No comment provided by engineer. */
"Tap to scan" = "Tik om te scannen";
/* No comment provided by engineer. */
"Tap to start a new chat" = "Tik om een nieuw gesprek te starten";
@@ -3329,6 +3380,9 @@
/* No comment provided by engineer. */
"The attempt to change database passphrase was not completed." = "De poging om het wachtwoord van de database te wijzigen is niet voltooid.";
/* No comment provided by engineer. */
"The code you scanned is not a SimpleX link QR code." = "De code die u heeft gescand is geen SimpleX link QR-code.";
/* No comment provided by engineer. */
"The connection you accepted will be cancelled!" = "De door u geaccepteerde verbinding wordt geannuleerd!";
@@ -3371,6 +3425,9 @@
/* No comment provided by engineer. */
"The servers for new connections of your current chat profile **%@**." = "De servers voor nieuwe verbindingen van uw huidige chat profiel **%@**.";
/* No comment provided by engineer. */
"The text you pasted is not a SimpleX link." = "De tekst die u hebt geplakt is geen SimpleX link.";
/* No comment provided by engineer. */
"Theme" = "Thema";
@@ -3587,6 +3644,9 @@
/* No comment provided by engineer. */
"Use new incognito profile" = "Gebruik een nieuw incognitoprofiel";
/* No comment provided by engineer. */
"Use only local notifications?" = "Alleen lokale meldingen gebruiken?";
/* No comment provided by engineer. */
"Use server" = "Gebruik server";
@@ -3788,9 +3848,6 @@
/* No comment provided by engineer. */
"You can accept calls from lock screen, without device and app authentication." = "U kunt oproepen van het vergrendelingsscherm accepteren, zonder apparaat- en app-verificatie.";
/* No comment provided by engineer. */
"You can also connect by clicking the link. If it opens in the browser, click **Open in mobile app** button." = "U kunt ook verbinding maken door op de link te klikken. Als het in de browser wordt geopend, klikt u op de knop **Openen in mobiele app**.";
/* No comment provided by engineer. */
"You can create it later" = "U kan het later maken";
@@ -3803,6 +3860,9 @@
/* No comment provided by engineer. */
"You can hide or mute a user profile - swipe it to the right." = "U kunt een gebruikers profiel verbergen of dempen - veeg het naar rechts.";
/* No comment provided by engineer. */
"You can make it visible to your SimpleX contacts via Settings." = "Je kunt het via Instellingen zichtbaar maken voor je SimpleX contacten.";
/* notification body */
"You can now send messages to %@" = "Je kunt nu berichten sturen naar %@";
@@ -3827,6 +3887,9 @@
/* No comment provided by engineer. */
"You can use markdown to format messages:" = "U kunt markdown gebruiken voor opmaak in berichten:";
/* No comment provided by engineer. */
"You can view invitation link again in connection details." = "U kunt de uitnodigingslink opnieuw bekijken in de verbindingsdetails.";
/* No comment provided by engineer. */
"You can't send messages!" = "Je kunt geen berichten versturen!";

View File

@@ -64,11 +64,14 @@
/* No comment provided by engineer. */
"[Star on GitHub](https://github.com/simplex-chat/simplex-chat)" = "[Daj gwiazdkę na GitHub](https://github.com/simplex-chat/simplex-chat)";
/* No comment provided by engineer. */
"**Add contact**: to create a new invitation link, or connect via a link you received." = "**Dodaj kontakt**: aby utworzyć nowy link z zaproszeniem lub połączyć się za pomocą otrzymanego linku.";
/* No comment provided by engineer. */
"**Add new contact**: to create your one-time QR Code for your contact." = "**Dodaj nowy kontakt**: aby stworzyć swój jednorazowy kod QR lub link dla kontaktu.";
/* No comment provided by engineer. */
"**Create link / QR code** for your contact to use." = "**Utwórz link / kod QR**, aby Twój kontakt mógł z niego skorzystać.";
"**Create group**: to create a new group." = "**Utwórz grupę**: aby utworzyć nową grupę.";
/* No comment provided by engineer. */
"**e2e encrypted** audio call" = "**szyfrowane e2e** połączenie audio";
@@ -82,18 +85,12 @@
/* No comment provided by engineer. */
"**Most private**: do not use SimpleX Chat notifications server, check messages periodically in the background (depends on how often you use the app)." = "**Najbardziej prywatny**: nie korzystaj z serwera powiadomień SimpleX Chat, sprawdzaj wiadomości okresowo w tle (zależy jak często korzystasz z aplikacji).";
/* No comment provided by engineer. */
"**Paste received link** or open it in the browser and tap **Open in mobile app**." = "**Wklej otrzymany link** lub otwórz go w przeglądarce i dotknij **Otwórz w aplikacji mobilnej**.";
/* No comment provided by engineer. */
"**Please note**: you will NOT be able to recover or change passphrase if you lose it." = "**Uwaga**: NIE będziesz w stanie odzyskać lub zmienić hasła, jeśli je stracisz.";
/* No comment provided by engineer. */
"**Recommended**: device token and notifications are sent to SimpleX Chat notification server, but not the message content, size or who it is from." = "**Zalecane**: token urządzenia i powiadomienia są wysyłane do serwera powiadomień SimpleX Chat, ale nie treść wiadomości, rozmiar lub od kogo jest.";
/* No comment provided by engineer. */
"**Scan QR code**: to connect to your contact in person or via video call." = "**Skanuj kod QR**: aby połączyć się z kontaktem osobiście lub za pomocą połączenia wideo.";
/* No comment provided by engineer. */
"**Warning**: Instant push notifications require passphrase saved in Keychain." = "**Uwaga**: Natychmiastowe powiadomienia push wymagają hasła zapisanego w Keychain.";
@@ -280,9 +277,6 @@
/* time interval */
"1 week" = "1 tydzień";
/* No comment provided by engineer. */
"1-time link" = "1-razowy link";
/* No comment provided by engineer. */
"5 minutes" = "5 minut";
@@ -350,6 +344,9 @@
/* No comment provided by engineer. */
"Add address to your profile, so that your contacts can share it with other people. Profile update will be sent to your contacts." = "Dodaj adres do swojego profilu, aby Twoje kontakty mogły go udostępnić innym osobom. Aktualizacja profilu zostanie wysłana do Twoich kontaktów.";
/* No comment provided by engineer. */
"Add contact" = "Dodaj kontakt";
/* No comment provided by engineer. */
"Add preset servers" = "Dodaj gotowe serwery";
@@ -423,7 +420,7 @@
"Allow disappearing messages only if your contact allows it to you." = "Zezwól na znikające wiadomości tylko wtedy, gdy Twój kontakt Ci na to pozwoli.";
/* No comment provided by engineer. */
"Allow irreversible message deletion only if your contact allows it to you." = "Zezwalaj na nieodwracalne usuwanie wiadomości tylko wtedy, gdy Twój kontakt Ci na to pozwoli.";
"Allow irreversible message deletion only if your contact allows it to you. (24 hours)" = "Zezwalaj na nieodwracalne usuwanie wiadomości tylko wtedy, gdy Twój kontakt Ci na to pozwoli. (24 godziny)";
/* No comment provided by engineer. */
"Allow message reactions only if your contact allows them." = "Zezwalaj na reakcje wiadomości tylko wtedy, gdy zezwala na to Twój kontakt.";
@@ -438,7 +435,7 @@
"Allow sending disappearing messages." = "Zezwól na wysyłanie znikających wiadomości.";
/* No comment provided by engineer. */
"Allow to irreversibly delete sent messages." = "Zezwól na nieodwracalne usunięcie wysłanych wiadomości.";
"Allow to irreversibly delete sent messages. (24 hours)" = "Zezwól na nieodwracalne usunięcie wysłanych wiadomości. (24 godziny)";
/* No comment provided by engineer. */
"Allow to send files and media." = "Pozwól na wysyłanie plików i mediów.";
@@ -459,7 +456,7 @@
"Allow your contacts to call you." = "Zezwól swoim kontaktom na połączenia do Ciebie.";
/* No comment provided by engineer. */
"Allow your contacts to irreversibly delete sent messages." = "Zezwól swoim kontaktom na nieodwracalne usuwanie wysłanych wiadomości.";
"Allow your contacts to irreversibly delete sent messages. (24 hours)" = "Zezwól swoim kontaktom na nieodwracalne usuwanie wysłanych wiadomości. (24 godziny)";
/* No comment provided by engineer. */
"Allow your contacts to send disappearing messages." = "Zezwól swoim kontaktom na wysyłanie znikających wiadomości.";
@@ -603,7 +600,7 @@
"Both you and your contact can add message reactions." = "Zarówno Ty, jak i Twój kontakt możecie dodawać reakcje wiadomości.";
/* No comment provided by engineer. */
"Both you and your contact can irreversibly delete sent messages." = "Zarówno Ty, jak i Twój kontakt możecie nieodwracalnie usunąć wysłane wiadomości.";
"Both you and your contact can irreversibly delete sent messages. (24 hours)" = "Zarówno Ty, jak i Twój kontakt możecie nieodwracalnie usunąć wysłane wiadomości. (24 godziny)";
/* No comment provided by engineer. */
"Both you and your contact can make calls." = "Zarówno Ty, jak i Twój kontakt możecie nawiązywać połączenia.";
@@ -635,6 +632,9 @@
/* No comment provided by engineer. */
"Calls" = "Połączenia";
/* No comment provided by engineer. */
"Camera not available" = "Kamera nie dostępna";
/* No comment provided by engineer. */
"Can't delete user profile!" = "Nie można usunąć profilu użytkownika!";
@@ -723,6 +723,9 @@
/* No comment provided by engineer. */
"Chat is stopped" = "Czat jest zatrzymany";
/* No comment provided by engineer. */
"Chat is stopped. If you already used this database on another device, you should transfer it back before starting chat." = "Czat został zatrzymany. Jeśli korzystałeś już z tej bazy danych na innym urządzeniu, powinieneś przenieść ją z powrotem przed rozpoczęciem czatu.";
/* No comment provided by engineer. */
"Chat preferences" = "Preferencje czatu";
@@ -816,9 +819,6 @@
/* No comment provided by engineer. */
"Connect via link" = "Połącz się przez link";
/* No comment provided by engineer. */
"Connect via link / QR code" = "Połącz się przez link / kod QR";
/* No comment provided by engineer. */
"Connect via one-time link" = "Połącz przez jednorazowy link";
@@ -960,9 +960,6 @@
/* No comment provided by engineer. */
"Create new profile in [desktop app](https://simplex.chat/downloads/). 💻" = "Utwórz nowy profil w [aplikacji desktopowej](https://simplex.chat/downloads/). 💻";
/* No comment provided by engineer. */
"Create one-time invitation link" = "Utwórz jednorazowy link do zaproszenia";
/* No comment provided by engineer. */
"Create profile" = "Utwórz profil";
@@ -981,6 +978,9 @@
/* No comment provided by engineer. */
"Created on %@" = "Utworzony w dniu %@";
/* No comment provided by engineer. */
"Creating link…" = "Tworzenie linku…";
/* No comment provided by engineer. */
"creator" = "twórca";
@@ -1344,6 +1344,9 @@
/* No comment provided by engineer. */
"Enable automatic message deletion?" = "Czy włączyć automatyczne usuwanie wiadomości?";
/* No comment provided by engineer. */
"Enable camera access" = "Włącz dostęp do kamery";
/* No comment provided by engineer. */
"Enable for all" = "Włącz dla wszystkich";
@@ -1398,6 +1401,9 @@
/* notification */
"Encrypted message or another event" = "Zaszyfrowana wiadomość lub inne zdarzenie";
/* notification */
"Encrypted message: app is stopped" = "Zaszyfrowana wiadomość: aplikacja jest zatrzymana";
/* notification */
"Encrypted message: database error" = "Zaszyfrowana wiadomość: błąd bazy danych";
@@ -1569,6 +1575,9 @@
/* No comment provided by engineer. */
"Error loading %@ servers" = "Błąd ładowania %@ serwerów";
/* No comment provided by engineer. */
"Error opening chat" = "Błąd otwierania czatu";
/* No comment provided by engineer. */
"Error receiving file" = "Błąd odbioru pliku";
@@ -1593,6 +1602,9 @@
/* No comment provided by engineer. */
"Error saving user password" = "Błąd zapisu hasła użytkownika";
/* No comment provided by engineer. */
"Error scanning code: %@" = "Błąd skanowanie kodu: %@";
/* No comment provided by engineer. */
"Error sending email" = "Błąd wysyłania e-mail";
@@ -1798,7 +1810,7 @@
"Group members can add message reactions." = "Członkowie grupy mogą dodawać reakcje wiadomości.";
/* No comment provided by engineer. */
"Group members can irreversibly delete sent messages." = "Członkowie grupy mogą nieodwracalnie usuwać wysłane wiadomości.";
"Group members can irreversibly delete sent messages. (24 hours)" = "Członkowie grupy mogą nieodwracalnie usuwać wysłane wiadomości. (24 godziny)";
/* No comment provided by engineer. */
"Group members can send direct messages." = "Członkowie grupy mogą wysyłać bezpośrednie wiadomości.";
@@ -1890,9 +1902,6 @@
/* No comment provided by engineer. */
"If you can't meet in person, show QR code in a video call, or share the link." = "Jeśli nie możesz spotkać się osobiście, pokaż kod QR w rozmowie wideo lub udostępnij link.";
/* No comment provided by engineer. */
"If you cannot meet in person, you can **scan QR code in the video call**, or your contact can share an invitation link." = "Jeśli nie możesz spotkać się osobiście, możesz **zeskanować kod QR w rozmowie wideo** lub Twój kontakt może udostępnić link z zaproszeniem.";
/* No comment provided by engineer. */
"If you enter this passcode when opening the app, all app data will be irreversibly removed!" = "Jeśli wprowadzisz ten pin podczas otwierania aplikacji, wszystkie dane aplikacji zostaną nieodwracalnie usunięte!";
@@ -2010,9 +2019,18 @@
/* invalid chat item */
"invalid data" = "nieprawidłowe dane";
/* No comment provided by engineer. */
"Invalid link" = "Nieprawidłowy link";
/* No comment provided by engineer. */
"Invalid name!" = "Nieprawidłowa nazwa!";
/* No comment provided by engineer. */
"Invalid QR code" = "Nieprawidłowy kod QR";
/* No comment provided by engineer. */
"Invalid response" = "Nieprawidłowa odpowiedź";
/* No comment provided by engineer. */
"Invalid server address!" = "Nieprawidłowy adres serwera!";
@@ -2106,9 +2124,15 @@
/* No comment provided by engineer. */
"Joining group" = "Dołączanie do grupy";
/* No comment provided by engineer. */
"Keep" = "Zachowaj";
/* No comment provided by engineer. */
"Keep the app open to use it from desktop" = "Zostaw aplikację otwartą i używaj ją z komputera";
/* No comment provided by engineer. */
"Keep unused invitation?" = "Zachować nieużyte zaproszenie?";
/* No comment provided by engineer. */
"Keep your connections" = "Zachowaj swoje połączenia";
@@ -2337,6 +2361,9 @@
/* No comment provided by engineer. */
"never" = "nigdy";
/* No comment provided by engineer. */
"New chat" = "Nowy czat";
/* notification */
"New contact request" = "Nowa prośba o kontakt";
@@ -2444,6 +2471,9 @@
/* No comment provided by engineer. */
"Ok" = "Ok";
/* No comment provided by engineer. */
"OK" = "OK";
/* No comment provided by engineer. */
"Old database" = "Stara baza danych";
@@ -2481,7 +2511,7 @@
"Only you can add message reactions." = "Tylko Ty możesz dodawać reakcje wiadomości.";
/* No comment provided by engineer. */
"Only you can irreversibly delete messages (your contact can mark them for deletion)." = "Tylko Ty możesz nieodwracalnie usunąć wiadomości (Twój kontakt może oznaczyć je do usunięcia).";
"Only you can irreversibly delete messages (your contact can mark them for deletion). (24 hours)" = "Tylko Ty możesz nieodwracalnie usunąć wiadomości (Twój kontakt może oznaczyć je do usunięcia). (24 godziny)";
/* No comment provided by engineer. */
"Only you can make calls." = "Tylko Ty możesz wykonywać połączenia.";
@@ -2496,7 +2526,7 @@
"Only your contact can add message reactions." = "Tylko Twój kontakt może dodawać reakcje wiadomości.";
/* No comment provided by engineer. */
"Only your contact can irreversibly delete messages (you can mark them for deletion)." = "Tylko Twój kontakt może nieodwracalnie usunąć wiadomości (możesz oznaczyć je do usunięcia).";
"Only your contact can irreversibly delete messages (you can mark them for deletion). (24 hours)" = "Tylko Twój kontakt może nieodwracalnie usunąć wiadomości (możesz oznaczyć je do usunięcia). (24 godziny)";
/* No comment provided by engineer. */
"Only your contact can make calls." = "Tylko Twój kontakt może wykonywać połączenia.";
@@ -2528,6 +2558,15 @@
/* No comment provided by engineer. */
"Open-source protocol and code anybody can run the servers." = "Otwarto źródłowy protokół i kod - każdy może uruchomić serwery.";
/* No comment provided by engineer. */
"Opening app…" = "Otwieranie aplikacji…";
/* No comment provided by engineer. */
"Or scan QR code" = "Lub zeskanuj kod QR";
/* No comment provided by engineer. */
"Or show this code" = "Lub pokaż ten kod";
/* member role */
"owner" = "właściciel";
@@ -2549,9 +2588,6 @@
/* No comment provided by engineer. */
"Password to show" = "Hasło do wyświetlenia";
/* No comment provided by engineer. */
"Paste" = "Wklej";
/* No comment provided by engineer. */
"Paste desktop address" = "Wklej adres komputera";
@@ -2559,10 +2595,7 @@
"Paste image" = "Wklej obraz";
/* No comment provided by engineer. */
"Paste received link" = "Wklej otrzymany link";
/* placeholder */
"Paste the link you received to connect with your contact." = "Wklej otrzymany link w pole poniżej, aby połączyć się z kontaktem.";
"Paste the link you received" = "Wklej link, który otrzymałeś";
/* No comment provided by engineer. */
"peer-to-peer" = "peer-to-peer";
@@ -2594,6 +2627,9 @@
/* No comment provided by engineer. */
"Please check yours and your contact preferences." = "Proszę sprawdzić preferencje Twoje i Twojego kontaktu.";
/* No comment provided by engineer. */
"Please contact developers.\nError: %@" = "Proszę skontaktować się z deweloperami.\nBłąd: %@";
/* No comment provided by engineer. */
"Please contact group admin." = "Skontaktuj się z administratorem grupy.";
@@ -2717,6 +2753,9 @@
/* No comment provided by engineer. */
"Read more in [User Guide](https://simplex.chat/docs/guide/app-settings.html#your-simplex-contact-address)." = "Przeczytaj więcej w [Podręczniku Użytkownika](https://simplex.chat/docs/guide/app-settings.html#your-simplex-contact-address).";
/* No comment provided by engineer. */
"Read more in [User Guide](https://simplex.chat/docs/guide/chat-profiles.html#incognito-mode)." = "Przeczytaj więcej w [Poradniku Użytkownika](https://simplex.chat/docs/guide/chat-profiles.html#incognito-mode).";
/* No comment provided by engineer. */
"Read more in [User Guide](https://simplex.chat/docs/guide/readme.html#connect-to-friends)." = "Przeczytaj więcej w [Podręczniku Użytkownika](https://simplex.chat/docs/guide/readme.html#connect-to-friends).";
@@ -2861,6 +2900,9 @@
/* No comment provided by engineer. */
"Restore database error" = "Błąd przywracania bazy danych";
/* No comment provided by engineer. */
"Retry" = "Ponów";
/* chat item action */
"Reveal" = "Ujawnij";
@@ -2951,6 +2993,9 @@
/* No comment provided by engineer. */
"Search" = "Szukaj";
/* No comment provided by engineer. */
"Search or paste SimpleX link" = "Wyszukaj lub wklej link SimpleX";
/* network option */
"sec" = "sek";
@@ -3132,7 +3177,7 @@
"Share link" = "Udostępnij link";
/* No comment provided by engineer. */
"Share one-time invitation link" = "Jednorazowy link zaproszenia";
"Share this 1-time invite link" = "Udostępnij ten jednorazowy link";
/* No comment provided by engineer. */
"Share with contacts" = "Udostępnij kontaktom";
@@ -3210,10 +3255,10 @@
"Somebody" = "Ktoś";
/* No comment provided by engineer. */
"Start a new chat" = "Rozpocznij nowy czat";
"Start chat" = "Rozpocznij czat";
/* No comment provided by engineer. */
"Start chat" = "Rozpocznij czat";
"Start chat?" = "Rozpocząć czat?";
/* No comment provided by engineer. */
"Start migration" = "Rozpocznij migrację";
@@ -3284,6 +3329,12 @@
/* No comment provided by engineer. */
"Tap to join incognito" = "Dotnij, aby dołączyć w trybie incognito";
/* No comment provided by engineer. */
"Tap to paste link" = "Dotknij, aby wkleić link";
/* No comment provided by engineer. */
"Tap to scan" = "Dotknij, aby zeskanować";
/* No comment provided by engineer. */
"Tap to start a new chat" = "Dotknij, aby rozpocząć nowy czat";
@@ -3329,6 +3380,9 @@
/* No comment provided by engineer. */
"The attempt to change database passphrase was not completed." = "Próba zmiany hasła bazy danych nie została zakończona.";
/* No comment provided by engineer. */
"The code you scanned is not a SimpleX link QR code." = "Kod, który zeskanowałeś nie jest kodem QR linku SimpleX.";
/* No comment provided by engineer. */
"The connection you accepted will be cancelled!" = "Zaakceptowane przez Ciebie połączenie zostanie anulowane!";
@@ -3371,6 +3425,9 @@
/* No comment provided by engineer. */
"The servers for new connections of your current chat profile **%@**." = "Serwery dla nowych połączeń bieżącego profilu czatu **%@**.";
/* No comment provided by engineer. */
"The text you pasted is not a SimpleX link." = "Tekst, który wkleiłeś nie jest linkiem SimpleX.";
/* No comment provided by engineer. */
"Theme" = "Motyw";
@@ -3587,6 +3644,9 @@
/* No comment provided by engineer. */
"Use new incognito profile" = "Użyj nowego profilu incognito";
/* No comment provided by engineer. */
"Use only local notifications?" = "Używać tylko lokalnych powiadomień?";
/* No comment provided by engineer. */
"Use server" = "Użyj serwera";
@@ -3788,9 +3848,6 @@
/* No comment provided by engineer. */
"You can accept calls from lock screen, without device and app authentication." = "Możesz przyjmować połączenia z ekranu blokady, bez uwierzytelniania urządzenia i aplikacji.";
/* No comment provided by engineer. */
"You can also connect by clicking the link. If it opens in the browser, click **Open in mobile app** button." = "Możesz też połączyć się klikając w link. Jeśli otworzy się on w przeglądarce, kliknij przycisk **Otwórz w aplikacji mobilnej**.";
/* No comment provided by engineer. */
"You can create it later" = "Możesz go utworzyć później";
@@ -3803,6 +3860,9 @@
/* No comment provided by engineer. */
"You can hide or mute a user profile - swipe it to the right." = "Możesz ukryć lub wyciszyć profil użytkownika - przesuń palcem w prawo.";
/* No comment provided by engineer. */
"You can make it visible to your SimpleX contacts via Settings." = "Możesz ustawić go jako widoczny dla swoich kontaktów SimpleX w Ustawieniach.";
/* notification body */
"You can now send messages to %@" = "Możesz teraz wysyłać wiadomości do %@";
@@ -3827,6 +3887,9 @@
/* No comment provided by engineer. */
"You can use markdown to format messages:" = "Możesz używać markdown do formatowania wiadomości:";
/* No comment provided by engineer. */
"You can view invitation link again in connection details." = "Możesz zobaczyć link zaproszenia ponownie w szczegółach połączenia.";
/* No comment provided by engineer. */
"You can't send messages!" = "Nie możesz wysyłać wiadomości!";

View File

@@ -67,9 +67,6 @@
/* No comment provided by engineer. */
"**Add new contact**: to create your one-time QR Code for your contact." = "**Добавить новый контакт**: чтобы создать одноразовый QR код или ссылку для Вашего контакта.";
/* No comment provided by engineer. */
"**Create link / QR code** for your contact to use." = "**Создать ссылку / QR код** для Вашего контакта.";
/* No comment provided by engineer. */
"**e2e encrypted** audio call" = "**e2e зашифрованный** аудиозвонок";
@@ -82,18 +79,12 @@
/* No comment provided by engineer. */
"**Most private**: do not use SimpleX Chat notifications server, check messages periodically in the background (depends on how often you use the app)." = "**Самый конфиденциальный**: не использовать сервер уведомлений SimpleX Chat, проверять сообщения периодически в фоновом режиме (зависит от того насколько часто Вы используете приложение).";
/* No comment provided by engineer. */
"**Paste received link** or open it in the browser and tap **Open in mobile app**." = "**Вставить полученную ссылку**, или откройте её в браузере и нажмите **Open in mobile app**.";
/* No comment provided by engineer. */
"**Please note**: you will NOT be able to recover or change passphrase if you lose it." = "**Внимание**: Вы не сможете восстановить или поменять пароль, если Вы его потеряете.";
/* No comment provided by engineer. */
"**Recommended**: device token and notifications are sent to SimpleX Chat notification server, but not the message content, size or who it is from." = "**Рекомендовано**: токен устройства и уведомления отправляются на сервер SimpleX Chat, но сервер не получает сами сообщения, их размер или от кого они.";
/* No comment provided by engineer. */
"**Scan QR code**: to connect to your contact in person or via video call." = "**Сканировать QR код**: соединиться с Вашим контактом при встрече или во время видеозвонка.";
/* No comment provided by engineer. */
"**Warning**: Instant push notifications require passphrase saved in Keychain." = "**Внимание**: для работы мгновенных уведомлений пароль должен быть сохранен в Keychain.";
@@ -280,9 +271,6 @@
/* time interval */
"1 week" = "1 неделю";
/* No comment provided by engineer. */
"1-time link" = "Одноразовая ссылка";
/* No comment provided by engineer. */
"5 minutes" = "5 минут";
@@ -423,7 +411,7 @@
"Allow disappearing messages only if your contact allows it to you." = "Разрешить исчезающие сообщения, только если Ваш контакт разрешает их Вам.";
/* No comment provided by engineer. */
"Allow irreversible message deletion only if your contact allows it to you." = "Разрешить необратимое удаление сообщений, только если Ваш контакт разрешает это Вам.";
"Allow irreversible message deletion only if your contact allows it to you. (24 hours)" = "Разрешить необратимое удаление сообщений, только если Ваш контакт разрешает это Вам. (24 часа)";
/* No comment provided by engineer. */
"Allow message reactions only if your contact allows them." = "Разрешить реакции на сообщения, только если ваш контакт разрешает их.";
@@ -438,7 +426,7 @@
"Allow sending disappearing messages." = "Разрешить посылать исчезающие сообщения.";
/* No comment provided by engineer. */
"Allow to irreversibly delete sent messages." = "Разрешить необратимо удалять отправленные сообщения.";
"Allow to irreversibly delete sent messages. (24 hours)" = "Разрешить необратимо удалять отправленные сообщения. (24 часа)";
/* No comment provided by engineer. */
"Allow to send files and media." = "Разрешить посылать файлы и медиа.";
@@ -459,7 +447,7 @@
"Allow your contacts to call you." = "Разрешить Вашим контактам звонить Вам.";
/* No comment provided by engineer. */
"Allow your contacts to irreversibly delete sent messages." = "Разрешить Вашим контактам необратимо удалять отправленные сообщения.";
"Allow your contacts to irreversibly delete sent messages. (24 hours)" = "Разрешить Вашим контактам необратимо удалять отправленные сообщения. (24 часа)";
/* No comment provided by engineer. */
"Allow your contacts to send disappearing messages." = "Разрешить Вашим контактам отправлять исчезающие сообщения.";
@@ -603,7 +591,7 @@
"Both you and your contact can add message reactions." = "И Вы, и Ваш контакт можете добавлять реакции на сообщения.";
/* No comment provided by engineer. */
"Both you and your contact can irreversibly delete sent messages." = "Вы и Ваш контакт можете необратимо удалять отправленные сообщения.";
"Both you and your contact can irreversibly delete sent messages. (24 hours)" = "Вы и Ваш контакт можете необратимо удалять отправленные сообщения. (24 часа)";
/* No comment provided by engineer. */
"Both you and your contact can make calls." = "Вы и Ваш контакт можете совершать звонки.";
@@ -816,9 +804,6 @@
/* No comment provided by engineer. */
"Connect via link" = "Соединиться через ссылку";
/* No comment provided by engineer. */
"Connect via link / QR code" = "Соединиться через ссылку / QR код";
/* No comment provided by engineer. */
"Connect via one-time link" = "Соединиться через одноразовую ссылку";
@@ -960,9 +945,6 @@
/* No comment provided by engineer. */
"Create new profile in [desktop app](https://simplex.chat/downloads/). 💻" = "Создайте новый профиль в [приложении для компьютера](https://simplex.chat/downloads/). 💻";
/* No comment provided by engineer. */
"Create one-time invitation link" = "Создать ссылку-приглашение";
/* No comment provided by engineer. */
"Create profile" = "Создать профиль";
@@ -1798,7 +1780,7 @@
"Group members can add message reactions." = "Члены группы могут добавлять реакции на сообщения.";
/* No comment provided by engineer. */
"Group members can irreversibly delete sent messages." = "Члены группы могут необратимо удалять отправленные сообщения.";
"Group members can irreversibly delete sent messages. (24 hours)" = "Члены группы могут необратимо удалять отправленные сообщения. (24 часа)";
/* No comment provided by engineer. */
"Group members can send direct messages." = "Члены группы могут посылать прямые сообщения.";
@@ -1890,9 +1872,6 @@
/* No comment provided by engineer. */
"If you can't meet in person, show QR code in a video call, or share the link." = "Если Вы не можете встретиться лично, покажите QR-код во время видеозвонка или поделитесь ссылкой.";
/* No comment provided by engineer. */
"If you cannot meet in person, you can **scan QR code in the video call**, or your contact can share an invitation link." = "Если Вы не можете встретиться лично, Вы можете **сосканировать QR код во время видеозвонка**, или Ваш контакт может отправить Вам ссылку.";
/* No comment provided by engineer. */
"If you enter this passcode when opening the app, all app data will be irreversibly removed!" = "Если Вы введете этот код при открытии приложения, все данные приложения будут безвозвратно удалены!";
@@ -2481,7 +2460,7 @@
"Only you can add message reactions." = "Только Вы можете добавлять реакции на сообщения.";
/* No comment provided by engineer. */
"Only you can irreversibly delete messages (your contact can mark them for deletion)." = "Только Вы можете необратимо удалять сообщения (Ваш контакт может помечать их на удаление).";
"Only you can irreversibly delete messages (your contact can mark them for deletion). (24 hours)" = "Только Вы можете необратимо удалять сообщения (Ваш контакт может помечать их на удаление). (24 часа)";
/* No comment provided by engineer. */
"Only you can make calls." = "Только Вы можете совершать звонки.";
@@ -2496,7 +2475,7 @@
"Only your contact can add message reactions." = "Только Ваш контакт может добавлять реакции на сообщения.";
/* No comment provided by engineer. */
"Only your contact can irreversibly delete messages (you can mark them for deletion)." = "Только Ваш контакт может необратимо удалять сообщения (Вы можете помечать их на удаление).";
"Only your contact can irreversibly delete messages (you can mark them for deletion). (24 hours)" = "Только Ваш контакт может необратимо удалять сообщения (Вы можете помечать их на удаление). (24 часа)";
/* No comment provided by engineer. */
"Only your contact can make calls." = "Только Ваш контакт может совершать звонки.";
@@ -2549,21 +2528,12 @@
/* No comment provided by engineer. */
"Password to show" = "Пароль чтобы раскрыть";
/* No comment provided by engineer. */
"Paste" = "Вставить";
/* No comment provided by engineer. */
"Paste desktop address" = "Вставить адрес компьютера";
/* No comment provided by engineer. */
"Paste image" = "Вставить изображение";
/* No comment provided by engineer. */
"Paste received link" = "Вставить полученную ссылку";
/* placeholder */
"Paste the link you received to connect with your contact." = "Чтобы соединиться, вставьте ссылку, полученную от Вашего контакта.";
/* No comment provided by engineer. */
"peer-to-peer" = "peer-to-peer";
@@ -3131,9 +3101,6 @@
/* No comment provided by engineer. */
"Share link" = "Поделиться ссылкой";
/* No comment provided by engineer. */
"Share one-time invitation link" = "Поделиться ссылкой-приглашением";
/* No comment provided by engineer. */
"Share with contacts" = "Поделиться с контактами";
@@ -3209,9 +3176,6 @@
/* notification title */
"Somebody" = "Контакт";
/* No comment provided by engineer. */
"Start a new chat" = "Начать новый разговор";
/* No comment provided by engineer. */
"Start chat" = "Запустить чат";
@@ -3788,9 +3752,6 @@
/* No comment provided by engineer. */
"You can accept calls from lock screen, without device and app authentication." = "Вы можете принимать звонки на экране блокировки, без аутентификации.";
/* No comment provided by engineer. */
"You can also connect by clicking the link. If it opens in the browser, click **Open in mobile app** button." = "Вы также можете соединиться, открыв ссылку. Если ссылка откроется в браузере, нажмите кнопку **Open in mobile app**.";
/* No comment provided by engineer. */
"You can create it later" = "Вы можете создать его позже";

View File

@@ -55,9 +55,6 @@
/* No comment provided by engineer. */
"**Add new contact**: to create your one-time QR Code for your contact." = "**เพิ่มผู้ติดต่อใหม่**: เพื่อสร้างคิวอาร์โค้ดแบบใช้ครั้งเดียวหรือลิงก์สำหรับผู้ติดต่อของคุณ";
/* No comment provided by engineer. */
"**Create link / QR code** for your contact to use." = "**สร้างลิงค์ / คิวอาร์โค้ด** เพื่อให้ผู้ติดต่อของคุณใช้";
/* No comment provided by engineer. */
"**e2e encrypted** audio call" = "การโทรเสียงแบบ **encrypted จากต้นจนจบ**";
@@ -70,18 +67,12 @@
/* No comment provided by engineer. */
"**Most private**: do not use SimpleX Chat notifications server, check messages periodically in the background (depends on how often you use the app)." = "**ส่วนตัวที่สุด**: ไม่ใช้เซิร์ฟเวอร์การแจ้งเตือนของ SimpleX Chat ตรวจสอบข้อความเป็นระยะในพื้นหลัง (ขึ้นอยู่กับความถี่ที่คุณใช้แอป)";
/* No comment provided by engineer. */
"**Paste received link** or open it in the browser and tap **Open in mobile app**." = "**แปะลิงก์ที่ได้รับ** หรือเปิดในเบราว์เซอร์แล้วแตะ **เปิดในแอปมือถือ**";
/* No comment provided by engineer. */
"**Please note**: you will NOT be able to recover or change passphrase if you lose it." = "**โปรดทราบ**: คุณจะไม่สามารถกู้คืนหรือเปลี่ยนรหัสผ่านได้หากคุณทำรหัสผ่านหาย";
/* No comment provided by engineer. */
"**Recommended**: device token and notifications are sent to SimpleX Chat notification server, but not the message content, size or who it is from." = "**แนะนำ**: โทเค็นอุปกรณ์และการแจ้งเตือนจะถูกส่งไปยังเซิร์ฟเวอร์การแจ้งเตือนของ SimpleX Chat แต่ไม่ใช่เนื้อหาข้อความ ขนาด หรือผู้ที่ส่ง";
/* No comment provided by engineer. */
"**Scan QR code**: to connect to your contact in person or via video call." = "**สแกนคิวอาร์โค้ด**: เพื่อเชื่อมต่อกับผู้ติดต่อของคุณด้วยตนเองหรือผ่านการสนทนาทางวิดีโอ";
/* No comment provided by engineer. */
"**Warning**: Instant push notifications require passphrase saved in Keychain." = "**คำเตือน**: การแจ้งเตือนแบบพุชทันทีจำเป็นต้องบันทึกรหัสผ่านไว้ใน Keychain";
@@ -226,9 +217,6 @@
/* time interval */
"1 week" = "1 สัปดาห์";
/* No comment provided by engineer. */
"1-time link" = "ลิงก์สำหรับใช้ 1 ครั้ง";
/* No comment provided by engineer. */
"5 minutes" = "5 นาที";
@@ -360,7 +348,7 @@
"Allow disappearing messages only if your contact allows it to you." = "อนุญาตให้ข้อความที่หายไปเฉพาะในกรณีที่ผู้ติดต่อของคุณอนุญาตเท่านั้น.";
/* No comment provided by engineer. */
"Allow irreversible message deletion only if your contact allows it to you." = "อนุญาตให้ลบข้อความแบบถาวรเฉพาะในกรณีที่ผู้ติดต่อของคุณอนุญาตให้คุณเท่านั้น";
"Allow irreversible message deletion only if your contact allows it to you. (24 hours)" = "อนุญาตให้ลบข้อความแบบถาวรเฉพาะในกรณีที่ผู้ติดต่อของคุณอนุญาตให้คุณเท่านั้น";
/* No comment provided by engineer. */
"Allow message reactions only if your contact allows them." = "อนุญาตการแสดงปฏิกิริยาต่อข้อความเฉพาะเมื่อผู้ติดต่อของคุณอนุญาตเท่านั้น";
@@ -375,7 +363,7 @@
"Allow sending disappearing messages." = "อนุญาตให้ส่งข้อความที่จะหายไปหลังปิดแชท (disappearing message)";
/* No comment provided by engineer. */
"Allow to irreversibly delete sent messages." = "อนุญาตให้ลบข้อความที่ส่งไปแล้วอย่างถาวร";
"Allow to irreversibly delete sent messages. (24 hours)" = "อนุญาตให้ลบข้อความที่ส่งไปแล้วอย่างถาวร";
/* No comment provided by engineer. */
"Allow to send files and media." = "อนุญาตให้ส่งไฟล์และสื่อ";
@@ -396,7 +384,7 @@
"Allow your contacts to call you." = "อนุญาตให้ผู้ติดต่อของคุณโทรหาคุณ";
/* No comment provided by engineer. */
"Allow your contacts to irreversibly delete sent messages." = "อนุญาตให้ผู้ติดต่อของคุณลบข้อความที่ส่งแล้วอย่างถาวร";
"Allow your contacts to irreversibly delete sent messages. (24 hours)" = "อนุญาตให้ผู้ติดต่อของคุณลบข้อความที่ส่งแล้วอย่างถาวร";
/* No comment provided by engineer. */
"Allow your contacts to send disappearing messages." = "อนุญาตให้ผู้ติดต่อของคุณส่งข้อความที่จะหายไปหลังปิดแชท (disappearing messages)";
@@ -504,7 +492,7 @@
"Both you and your contact can add message reactions." = "ทั้งคุณและผู้ติดต่อของคุณสามารถเพิ่มปฏิกิริยาของข้อความได้";
/* No comment provided by engineer. */
"Both you and your contact can irreversibly delete sent messages." = "ทั้งคุณและผู้ติดต่อของคุณสามารถลบข้อความที่ส่งแล้วอย่างถาวรได้";
"Both you and your contact can irreversibly delete sent messages. (24 hours)" = "ทั้งคุณและผู้ติดต่อของคุณสามารถลบข้อความที่ส่งแล้วอย่างถาวรได้";
/* No comment provided by engineer. */
"Both you and your contact can make calls." = "ทั้งคุณและผู้ติดต่อของคุณสามารถโทรออกได้";
@@ -693,9 +681,6 @@
/* No comment provided by engineer. */
"Connect via link" = "เชื่อมต่อผ่านลิงก์";
/* No comment provided by engineer. */
"Connect via link / QR code" = "เชื่อมต่อผ่านลิงค์ / คิวอาร์โค้ด";
/* No comment provided by engineer. */
"connected" = "เชื่อมต่อสำเร็จ";
@@ -804,9 +789,6 @@
/* No comment provided by engineer. */
"Create link" = "สร้างลิงค์";
/* No comment provided by engineer. */
"Create one-time invitation link" = "สร้างลิงก์เชิญแบบใช้ครั้งเดียว";
/* server test step */
"Create queue" = "สร้างคิว";
@@ -1552,7 +1534,7 @@
"Group members can add message reactions." = "สมาชิกกลุ่มสามารถเพิ่มการแสดงปฏิกิริยาต่อข้อความได้";
/* No comment provided by engineer. */
"Group members can irreversibly delete sent messages." = "สมาชิกกลุ่มสามารถลบข้อความที่ส่งแล้วอย่างถาวร";
"Group members can irreversibly delete sent messages. (24 hours)" = "สมาชิกกลุ่มสามารถลบข้อความที่ส่งแล้วอย่างถาวร";
/* No comment provided by engineer. */
"Group members can send direct messages." = "สมาชิกกลุ่มสามารถส่งข้อความโดยตรงได้";
@@ -1644,9 +1626,6 @@
/* No comment provided by engineer. */
"If you can't meet in person, show QR code in a video call, or share the link." = "หากคุณไม่สามารถพบกันในชีวิตจริงได้ ให้แสดงคิวอาร์โค้ดในวิดีโอคอล หรือแชร์ลิงก์";
/* No comment provided by engineer. */
"If you cannot meet in person, you can **scan QR code in the video call**, or your contact can share an invitation link." = "หากคุณไม่สามารถพบปะด้วยตนเอง คุณสามารถ **สแกนคิวอาร์โค้ดผ่านการสนทนาทางวิดีโอ** หรือผู้ติดต่อของคุณสามารถแชร์ลิงก์เชิญได้";
/* No comment provided by engineer. */
"If you enter this passcode when opening the app, all app data will be irreversibly removed!" = "หากคุณใส่รหัสผ่านนี้เมื่อเปิดแอป ข้อมูลแอปทั้งหมดจะถูกลบอย่างถาวร!";
@@ -2184,7 +2163,7 @@
"Only you can add message reactions." = "มีเพียงคุณเท่านั้นที่สามารถแสดงปฏิกิริยาต่อข้อความได้";
/* No comment provided by engineer. */
"Only you can irreversibly delete messages (your contact can mark them for deletion)." = "มีเพียงคุณเท่านั้นที่สามารถลบข้อความแบบย้อนกลับไม่ได้ (ผู้ติดต่อของคุณสามารถทำเครื่องหมายเพื่อลบได้)";
"Only you can irreversibly delete messages (your contact can mark them for deletion). (24 hours)" = "มีเพียงคุณเท่านั้นที่สามารถลบข้อความแบบย้อนกลับไม่ได้ (ผู้ติดต่อของคุณสามารถทำเครื่องหมายเพื่อลบได้)";
/* No comment provided by engineer. */
"Only you can make calls." = "มีเพียงคุณเท่านั้นที่โทรออกได้";
@@ -2199,7 +2178,7 @@
"Only your contact can add message reactions." = "เฉพาะผู้ติดต่อของคุณเท่านั้นที่สามารถเพิ่มการโต้ตอบข้อความได้";
/* No comment provided by engineer. */
"Only your contact can irreversibly delete messages (you can mark them for deletion)." = "เฉพาะผู้ติดต่อของคุณเท่านั้นที่สามารถลบข้อความแบบย้อนกลับไม่ได้ (คุณสามารถทำเครื่องหมายเพื่อลบได้)";
"Only your contact can irreversibly delete messages (you can mark them for deletion). (24 hours)" = "เฉพาะผู้ติดต่อของคุณเท่านั้นที่สามารถลบข้อความแบบย้อนกลับไม่ได้ (คุณสามารถทำเครื่องหมายเพื่อลบได้)";
/* No comment provided by engineer. */
"Only your contact can make calls." = "ผู้ติดต่อของคุณเท่านั้นที่สามารถโทรออกได้";
@@ -2246,15 +2225,9 @@
/* No comment provided by engineer. */
"Password to show" = "รหัสผ่านที่จะแสดง";
/* No comment provided by engineer. */
"Paste" = "แปะ";
/* No comment provided by engineer. */
"Paste image" = "แปะภาพ";
/* No comment provided by engineer. */
"Paste received link" = "แปะลิงก์ที่ได้รับ";
/* No comment provided by engineer. */
"peer-to-peer" = "เพื่อนต่อเพื่อน";
@@ -2786,9 +2759,6 @@
/* No comment provided by engineer. */
"Share link" = "แชร์ลิงก์";
/* No comment provided by engineer. */
"Share one-time invitation link" = "แชร์ลิงก์เชิญแบบใช้ครั้งเดียว";
/* No comment provided by engineer. */
"Share with contacts" = "แชร์กับผู้ติดต่อ";
@@ -2855,9 +2825,6 @@
/* notification title */
"Somebody" = "ใครบางคน";
/* No comment provided by engineer. */
"Start a new chat" = "เริ่มแชทใหม่";
/* No comment provided by engineer. */
"Start chat" = "เริ่มแชท";
@@ -3347,9 +3314,6 @@
/* No comment provided by engineer. */
"You can accept calls from lock screen, without device and app authentication." = "คุณสามารถรับสายจากหน้าจอล็อกโดยไม่ต้องมีการตรวจสอบสิทธิ์อุปกรณ์และแอป";
/* No comment provided by engineer. */
"You can also connect by clicking the link. If it opens in the browser, click **Open in mobile app** button." = "คุณสามารถเชื่อมต่อได้โดยคลิกที่ลิงค์ หากเปิดในเบราว์เซอร์ ให้คลิกปุ่ม **เปิดในแอปมือถือ**";
/* No comment provided by engineer. */
"You can create it later" = "คุณสามารถสร้างได้ในภายหลัง";

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,18 @@
/* Bundle name */
"CFBundleName" = "SimpleX";
/* Privacy - Camera Usage Description */
"NSCameraUsageDescription" = "SimpleX, diğer kullanıcılara bağlanmak amacıyla QR kodlarını taramak ve görüntülü aramalar için kamera erişimine ihtiyaç duyar.";
/* Privacy - Face ID Usage Description */
"NSFaceIDUsageDescription" = "SimpleX yerel kimlik doğrulama için Face ID kullanır";
/* Privacy - Local Network Usage Description */
"NSLocalNetworkUsageDescription" = "SimpleX, aynı ağdaki masaüstü uygulaması aracılığıyla kullanıcı sohbet profilinin kullanılmasına izin vermek için yerel ağ erişimini kullanır.";
/* Privacy - Microphone Usage Description */
"NSMicrophoneUsageDescription" = "SimpleX'in sesli ve görüntülü aramalar ve sesli mesajları kaydetmek için mikrofon erişimine ihtiyacı vardır.";
/* Privacy - Photo Library Additions Usage Description */
"NSPhotoLibraryAddUsageDescription" = "SimpleX'in çekilen ve alınan medyayı kaydetmek için Fotoğraf Kitaplığı'na erişmesi gerekir";

View File

@@ -67,9 +67,6 @@
/* No comment provided by engineer. */
"**Add new contact**: to create your one-time QR Code for your contact." = "**Додати новий контакт**: щоб створити одноразовий QR-код або посилання для свого контакту.";
/* No comment provided by engineer. */
"**Create link / QR code** for your contact to use." = "**Створіть посилання / QR-код** для використання вашим контактом.";
/* No comment provided by engineer. */
"**e2e encrypted** audio call" = "**e2e encrypted** аудіодзвінок";
@@ -82,18 +79,12 @@
/* No comment provided by engineer. */
"**Most private**: do not use SimpleX Chat notifications server, check messages periodically in the background (depends on how often you use the app)." = "**Найбільш приватний**: не використовуйте сервер сповіщень SimpleX Chat, періодично перевіряйте повідомлення у фоновому режимі (залежить від того, як часто ви користуєтесь додатком).";
/* No comment provided by engineer. */
"**Paste received link** or open it in the browser and tap **Open in mobile app**." = "**Вставте отримане посилання** або відкрийте його в браузері і натисніть **Відкрити в мобільному додатку**.";
/* No comment provided by engineer. */
"**Please note**: you will NOT be able to recover or change passphrase if you lose it." = "**Зверніть увагу: ви НЕ зможете відновити або змінити пароль, якщо втратите його.";
/* No comment provided by engineer. */
"**Recommended**: device token and notifications are sent to SimpleX Chat notification server, but not the message content, size or who it is from." = "**Рекомендується**: токен пристрою та сповіщення надсилаються на сервер сповіщень SimpleX Chat, але не вміст повідомлення, його розмір або від кого воно надійшло.";
/* No comment provided by engineer. */
"**Scan QR code**: to connect to your contact in person or via video call." = "**Відскануйте QR-код**: щоб з'єднатися з вашим контактом особисто або за допомогою відеодзвінка.";
/* No comment provided by engineer. */
"**Warning**: Instant push notifications require passphrase saved in Keychain." = "**Попередження**: Для отримання миттєвих пуш-сповіщень потрібна парольна фраза, збережена у брелоку.";
@@ -280,9 +271,6 @@
/* time interval */
"1 week" = "1 тиждень";
/* No comment provided by engineer. */
"1-time link" = "1-разове посилання";
/* No comment provided by engineer. */
"5 minutes" = "5 хвилин";
@@ -423,7 +411,7 @@
"Allow disappearing messages only if your contact allows it to you." = "Дозволяйте зникати повідомленням, тільки якщо контакт дозволяє вам це робити.";
/* No comment provided by engineer. */
"Allow irreversible message deletion only if your contact allows it to you." = "Дозволяйте безповоротне видалення повідомлень, тільки якщо контакт дозволяє вам це зробити.";
"Allow irreversible message deletion only if your contact allows it to you. (24 hours)" = "Дозволяйте безповоротне видалення повідомлень, тільки якщо контакт дозволяє вам це зробити. (24 години)";
/* No comment provided by engineer. */
"Allow message reactions only if your contact allows them." = "Дозволяйте реакції на повідомлення, тільки якщо ваш контакт дозволяє їх.";
@@ -438,7 +426,7 @@
"Allow sending disappearing messages." = "Дозволити надсилання зникаючих повідомлень.";
/* No comment provided by engineer. */
"Allow to irreversibly delete sent messages." = "Дозволяє безповоротно видаляти надіслані повідомлення.";
"Allow to irreversibly delete sent messages. (24 hours)" = "Дозволяє безповоротно видаляти надіслані повідомлення. (24 години)";
/* No comment provided by engineer. */
"Allow to send files and media." = "Дозволяє надсилати файли та медіа.";
@@ -459,7 +447,7 @@
"Allow your contacts to call you." = "Дозвольте вашим контактам телефонувати вам.";
/* No comment provided by engineer. */
"Allow your contacts to irreversibly delete sent messages." = "Дозвольте вашим контактам безповоротно видаляти надіслані повідомлення.";
"Allow your contacts to irreversibly delete sent messages. (24 hours)" = "Дозвольте вашим контактам безповоротно видаляти надіслані повідомлення. (24 години)";
/* No comment provided by engineer. */
"Allow your contacts to send disappearing messages." = "Дозвольте своїм контактам надсилати зникаючі повідомлення.";
@@ -594,7 +582,7 @@
"Both you and your contact can add message reactions." = "Реакції на повідомлення можете додавати як ви, так і ваш контакт.";
/* No comment provided by engineer. */
"Both you and your contact can irreversibly delete sent messages." = "І ви, і ваш контакт можете безповоротно видалити надіслані повідомлення.";
"Both you and your contact can irreversibly delete sent messages. (24 hours)" = "І ви, і ваш контакт можете безповоротно видалити надіслані повідомлення. (24 години)";
/* No comment provided by engineer. */
"Both you and your contact can make calls." = "Дзвонити можете як ви, так і ваш контакт.";
@@ -807,9 +795,6 @@
/* No comment provided by engineer. */
"Connect via link" = "Підключіться за посиланням";
/* No comment provided by engineer. */
"Connect via link / QR code" = "Підключитися за посиланням / QR-кодом";
/* No comment provided by engineer. */
"Connect via one-time link" = "Під'єднатися за одноразовим посиланням";
@@ -927,9 +912,6 @@
/* No comment provided by engineer. */
"Create link" = "Створити посилання";
/* No comment provided by engineer. */
"Create one-time invitation link" = "Створіть одноразове посилання-запрошення";
/* server test step */
"Create queue" = "Створити чергу";
@@ -1684,7 +1666,7 @@
"Group members can add message reactions." = "Учасники групи можуть додавати реакції на повідомлення.";
/* No comment provided by engineer. */
"Group members can irreversibly delete sent messages." = "Учасники групи можуть безповоротно видаляти надіслані повідомлення.";
"Group members can irreversibly delete sent messages. (24 hours)" = "Учасники групи можуть безповоротно видаляти надіслані повідомлення. (24 години)";
/* No comment provided by engineer. */
"Group members can send direct messages." = "Учасники групи можуть надсилати прямі повідомлення.";
@@ -1776,9 +1758,6 @@
/* No comment provided by engineer. */
"If you can't meet in person, show QR code in a video call, or share the link." = "Якщо ви не можете зустрітися особисто, покажіть QR-код у відеодзвінку або поділіться посиланням.";
/* No comment provided by engineer. */
"If you cannot meet in person, you can **scan QR code in the video call**, or your contact can share an invitation link." = "Якщо ви не можете зустрітися особисто, ви можете **сканувати QR-код у відеодзвінку**, або ваш контакт може поділитися посиланням на запрошення.";
/* No comment provided by engineer. */
"If you enter this passcode when opening the app, all app data will be irreversibly removed!" = "Якщо ви введете цей пароль при відкритті програми, всі дані програми будуть безповоротно видалені!";
@@ -2328,7 +2307,7 @@
"Only you can add message reactions." = "Тільки ви можете додавати реакції на повідомлення.";
/* No comment provided by engineer. */
"Only you can irreversibly delete messages (your contact can mark them for deletion)." = "Тільки ви можете безповоротно видалити повідомлення (ваш контакт може позначити їх для видалення).";
"Only you can irreversibly delete messages (your contact can mark them for deletion). (24 hours)" = "Тільки ви можете безповоротно видалити повідомлення (ваш контакт може позначити їх для видалення). (24 години)";
/* No comment provided by engineer. */
"Only you can make calls." = "Дзвонити можете тільки ви.";
@@ -2343,7 +2322,7 @@
"Only your contact can add message reactions." = "Тільки ваш контакт може додавати реакції на повідомлення.";
/* No comment provided by engineer. */
"Only your contact can irreversibly delete messages (you can mark them for deletion)." = "Тільки ваш контакт може безповоротно видалити повідомлення (ви можете позначити їх для видалення).";
"Only your contact can irreversibly delete messages (you can mark them for deletion). (24 hours)" = "Тільки ваш контакт може безповоротно видалити повідомлення (ви можете позначити їх для видалення). (24 години)";
/* No comment provided by engineer. */
"Only your contact can make calls." = "Тільки ваш контакт може здійснювати дзвінки.";
@@ -2390,18 +2369,9 @@
/* No comment provided by engineer. */
"Password to show" = "Показати пароль";
/* No comment provided by engineer. */
"Paste" = "Вставити";
/* No comment provided by engineer. */
"Paste image" = "Вставити зображення";
/* No comment provided by engineer. */
"Paste received link" = "Вставте отримане посилання";
/* placeholder */
"Paste the link you received to connect with your contact." = "Вставте отримане посилання для зв'язку з вашим контактом.";
/* No comment provided by engineer. */
"peer-to-peer" = "одноранговий";
@@ -2945,9 +2915,6 @@
/* No comment provided by engineer. */
"Share link" = "Поділіться посиланням";
/* No comment provided by engineer. */
"Share one-time invitation link" = "Поділіться посиланням на одноразове запрошення";
/* No comment provided by engineer. */
"Share with contacts" = "Поділіться з контактами";
@@ -3020,9 +2987,6 @@
/* notification title */
"Somebody" = "Хтось";
/* No comment provided by engineer. */
"Start a new chat" = "Почніть новий чат";
/* No comment provided by engineer. */
"Start chat" = "Почати чат";
@@ -3524,9 +3488,6 @@
/* No comment provided by engineer. */
"You can accept calls from lock screen, without device and app authentication." = "Ви можете приймати дзвінки з екрана блокування без автентифікації пристрою та програми.";
/* No comment provided by engineer. */
"You can also connect by clicking the link. If it opens in the browser, click **Open in mobile app** button." = "Ви також можете підключитися за посиланням. Якщо воно відкриється в браузері, натисніть кнопку **Відкрити в мобільному додатку**.";
/* No comment provided by engineer. */
"You can create it later" = "Ви можете створити його пізніше";

View File

@@ -58,9 +58,6 @@
/* No comment provided by engineer. */
"**Add new contact**: to create your one-time QR Code for your contact." = "**添加新联系人**:为您的联系人创建一次性二维码或者链接。";
/* No comment provided by engineer. */
"**Create link / QR code** for your contact to use." = "**创建链接 / 二维码** 给您的联系人使用。";
/* No comment provided by engineer. */
"**e2e encrypted** audio call" = "**端到端加密** 语音通话";
@@ -73,18 +70,12 @@
/* No comment provided by engineer. */
"**Most private**: do not use SimpleX Chat notifications server, check messages periodically in the background (depends on how often you use the app)." = "**最私密**:不使用 SimpleX Chat 通知服务器,在后台定期检查消息(取决于您多经常使用应用程序)。";
/* No comment provided by engineer. */
"**Paste received link** or open it in the browser and tap **Open in mobile app**." = "**粘贴收到的链接**或者在浏览器里打开并且点击**在移动应用程序里打开**。";
/* No comment provided by engineer. */
"**Please note**: you will NOT be able to recover or change passphrase if you lose it." = "**请注意**:如果您丢失密码,您将无法恢复或者更改密码。";
/* No comment provided by engineer. */
"**Recommended**: device token and notifications are sent to SimpleX Chat notification server, but not the message content, size or who it is from." = "**推荐**:设备令牌和通知会发送至 SimpleX Chat 通知服务器,但是消息内容、大小或者发送人不会。";
/* No comment provided by engineer. */
"**Scan QR code**: to connect to your contact in person or via video call." = "**扫描二维码**:见面或者通过视频通话来连接您的联系人。";
/* No comment provided by engineer. */
"**Warning**: Instant push notifications require passphrase saved in Keychain." = "**警告**:及时推送通知需要保存在钥匙串的密码。";
@@ -247,9 +238,6 @@
/* time interval */
"1 week" = "1周";
/* No comment provided by engineer. */
"1-time link" = "一次性链接";
/* No comment provided by engineer. */
"5 minutes" = "5分钟";
@@ -387,7 +375,7 @@
"Allow disappearing messages only if your contact allows it to you." = "仅当您的联系人允许时才允许限时消息。";
/* No comment provided by engineer. */
"Allow irreversible message deletion only if your contact allows it to you." = "仅有您的联系人许可后才允许不可撤回消息移除。";
"Allow irreversible message deletion only if your contact allows it to you. (24 hours)" = "仅有您的联系人许可后才允许不可撤回消息移除。";
/* No comment provided by engineer. */
"Allow message reactions only if your contact allows them." = "只有您的联系人允许时才允许消息回应。";
@@ -402,7 +390,7 @@
"Allow sending disappearing messages." = "允许发送限时消息。";
/* No comment provided by engineer. */
"Allow to irreversibly delete sent messages." = "允许不可撤回地删除已发送消息。";
"Allow to irreversibly delete sent messages. (24 hours)" = "允许不可撤回地删除已发送消息。";
/* No comment provided by engineer. */
"Allow to send files and media." = "允许发送文件和媒体。";
@@ -423,7 +411,7 @@
"Allow your contacts to call you." = "允许您的联系人给您打电话。";
/* No comment provided by engineer. */
"Allow your contacts to irreversibly delete sent messages." = "允许您的联系人不可撤回地删除已发送消息。";
"Allow your contacts to irreversibly delete sent messages. (24 hours)" = "允许您的联系人不可撤回地删除已发送消息。";
/* No comment provided by engineer. */
"Allow your contacts to send disappearing messages." = "允许您的联系人发送限时消息。";
@@ -534,7 +522,7 @@
"Both you and your contact can add message reactions." = "您和您的联系人都可以添加消息回应。";
/* No comment provided by engineer. */
"Both you and your contact can irreversibly delete sent messages." = "您和您的联系人都可以不可逆转地删除已发送的消息。";
"Both you and your contact can irreversibly delete sent messages. (24 hours)" = "您和您的联系人都可以不可逆转地删除已发送的消息。";
/* No comment provided by engineer. */
"Both you and your contact can make calls." = "您和您的联系人都可以拨打电话。";
@@ -729,9 +717,6 @@
/* No comment provided by engineer. */
"Connect via link" = "通过链接连接";
/* No comment provided by engineer. */
"Connect via link / QR code" = "通过群组链接/二维码连接";
/* No comment provided by engineer. */
"Connect via one-time link" = "通过一次性链接连接";
@@ -849,9 +834,6 @@
/* No comment provided by engineer. */
"Create new profile in [desktop app](https://simplex.chat/downloads/). 💻" = "在[桌面应用程序](https://simplex.chat/downloads/)中创建新的个人资料。 💻";
/* No comment provided by engineer. */
"Create one-time invitation link" = "创建一次性邀请链接";
/* server test step */
"Create queue" = "创建队列";
@@ -1624,7 +1606,7 @@
"Group members can add message reactions." = "群组成员可以添加信息回应。";
/* No comment provided by engineer. */
"Group members can irreversibly delete sent messages." = "群组成员可以不可撤回地删除已发送的消息。";
"Group members can irreversibly delete sent messages. (24 hours)" = "群组成员可以不可撤回地删除已发送的消息。";
/* No comment provided by engineer. */
"Group members can send direct messages." = "群组成员可以私信。";
@@ -1716,9 +1698,6 @@
/* No comment provided by engineer. */
"If you can't meet in person, show QR code in a video call, or share the link." = "如果您不能亲自见面,可以在视频通话中展示二维码,或分享链接。";
/* No comment provided by engineer. */
"If you cannot meet in person, you can **scan QR code in the video call**, or your contact can share an invitation link." = "如果您不能亲自见面,您可以**扫描视频通话中的二维码**,或者您的联系人可以分享邀请链接。";
/* No comment provided by engineer. */
"If you enter this passcode when opening the app, all app data will be irreversibly removed!" = "如果您在打开应用时输入该密码,所有应用程序数据将被不可撤回地删除!";
@@ -2271,7 +2250,7 @@
"Only you can add message reactions." = "只有您可以添加消息回应。";
/* No comment provided by engineer. */
"Only you can irreversibly delete messages (your contact can mark them for deletion)." = "只有您可以不可撤回地删除消息(您的联系人可以将它们标记为删除)。";
"Only you can irreversibly delete messages (your contact can mark them for deletion). (24 hours)" = "只有您可以不可撤回地删除消息(您的联系人可以将它们标记为删除)。";
/* No comment provided by engineer. */
"Only you can make calls." = "只有您可以拨打电话。";
@@ -2286,7 +2265,7 @@
"Only your contact can add message reactions." = "只有您的联系人可以添加消息回应。";
/* No comment provided by engineer. */
"Only your contact can irreversibly delete messages (you can mark them for deletion)." = "只有您的联系人才能不可撤回地删除消息(您可以将它们标记为删除)。";
"Only your contact can irreversibly delete messages (you can mark them for deletion). (24 hours)" = "只有您的联系人才能不可撤回地删除消息(您可以将它们标记为删除)。";
/* No comment provided by engineer. */
"Only your contact can make calls." = "只有您的联系人可以拨打电话。";
@@ -2336,18 +2315,9 @@
/* No comment provided by engineer. */
"Password to show" = "显示密码";
/* No comment provided by engineer. */
"Paste" = "粘贴";
/* No comment provided by engineer. */
"Paste image" = "粘贴图片";
/* No comment provided by engineer. */
"Paste received link" = "粘贴收到的链接";
/* placeholder */
"Paste the link you received to connect with your contact." = "将您收到的链接粘贴到下面的框中以与您的联系人联系。";
/* No comment provided by engineer. */
"peer-to-peer" = "点对点";
@@ -2897,9 +2867,6 @@
/* No comment provided by engineer. */
"Share link" = "分享链接";
/* No comment provided by engineer. */
"Share one-time invitation link" = "分享一次性邀请链接";
/* No comment provided by engineer. */
"Share with contacts" = "与联系人分享";
@@ -2975,9 +2942,6 @@
/* notification title */
"Somebody" = "某人";
/* No comment provided by engineer. */
"Start a new chat" = "开始新聊天";
/* No comment provided by engineer. */
"Start chat" = "开始聊天";
@@ -3482,9 +3446,6 @@
/* No comment provided by engineer. */
"You can accept calls from lock screen, without device and app authentication." = "您可以从锁屏上接听电话,无需设备和应用程序的认证。";
/* No comment provided by engineer. */
"You can also connect by clicking the link. If it opens in the browser, click **Open in mobile app** button." = "您也可以通过点击链接进行连接。如果在浏览器中打开,请点击“在移动应用程序中打开”按钮。";
/* No comment provided by engineer. */
"You can create it later" = "您可以以后创建它";

View File

@@ -91,6 +91,7 @@ android {
"es",
"fi",
"fr",
"hu",
"it",
"iw",
"ja",
@@ -99,6 +100,7 @@ android {
"pt-rBR",
"ru",
"th",
"tr",
"uk",
"zh-rCN"
)

View File

@@ -3,11 +3,12 @@ package chat.simplex.app
import android.content.Context
import android.util.Log
import androidx.work.*
import chat.simplex.app.*
import chat.simplex.app.SimplexService.Companion.showPassphraseNotification
import chat.simplex.common.model.ChatController
import chat.simplex.common.views.helpers.DBMigrationResult
import chat.simplex.app.BuildConfig
import chat.simplex.common.platform.chatModel
import chat.simplex.common.platform.initChatControllerAndRunMigrations
import chat.simplex.common.views.helpers.DatabaseUtils
import kotlinx.coroutines.*
import java.util.Date
import java.util.concurrent.TimeUnit
@@ -57,6 +58,10 @@ class MessagesFetcherWork(
val durationSeconds = inputData.getInt(INPUT_DATA_DURATION, 60)
var shouldReschedule = true
try {
// In case of self-destruct is enabled the initialization process will not start in SimplexApp, Let's start it here
if (DatabaseUtils.ksSelfDestructPassword.get() != null && chatModel.chatDbStatus.value == null) {
initChatControllerAndRunMigrations()
}
withTimeout(durationSeconds * 1000L) {
val chatController = ChatController
SimplexService.waitDbMigrationEnds(chatController)

View File

@@ -46,8 +46,8 @@ class SimplexApp: Application(), LifecycleEventObserver {
try {
Looper.loop()
} catch (e: Throwable) {
if (e.message != null && e.message!!.startsWith("Unable to start activity")) {
android.os.Process.killProcess(android.os.Process.myPid())
if (e is UnsatisfiedLinkError || e.message?.startsWith("Unable to start activity") == true) {
Process.killProcess(Process.myPid())
break
} else {
// Send it to our exception handled because it will not get the exception otherwise
@@ -63,13 +63,15 @@ class SimplexApp: Application(), LifecycleEventObserver {
tmpDir.deleteRecursively()
tmpDir.mkdir()
initChatControllerAndRunMigrations(false)
if (DatabaseUtils.ksSelfDestructPassword.get() == null) {
initChatControllerAndRunMigrations()
}
ProcessLifecycleOwner.get().lifecycle.addObserver(this@SimplexApp)
}
override fun onStateChanged(source: LifecycleOwner, event: Lifecycle.Event) {
Log.d(TAG, "onStateChanged: $event")
withApi {
withBGApi {
when (event) {
Lifecycle.Event.ON_START -> {
isAppOnForeground = true
@@ -171,13 +173,14 @@ class SimplexApp: Application(), LifecycleEventObserver {
androidAppContext = this
APPLICATION_ID = BuildConfig.APPLICATION_ID
ntfManager = object : chat.simplex.common.platform.NtfManager() {
override fun notifyCallInvitation(invitation: RcvCallInvitation) = NtfManager.notifyCallInvitation(invitation)
override fun notifyCallInvitation(invitation: RcvCallInvitation): Boolean = NtfManager.notifyCallInvitation(invitation)
override fun hasNotificationsForChat(chatId: String): Boolean = NtfManager.hasNotificationsForChat(chatId)
override fun cancelNotificationsForChat(chatId: String) = NtfManager.cancelNotificationsForChat(chatId)
override fun displayNotification(user: UserLike, chatId: String, displayName: String, msgText: String, image: String?, actions: List<Pair<NotificationAction, () -> Unit>>) = NtfManager.displayNotification(user, chatId, displayName, msgText, image, actions.map { it.first })
override fun androidCreateNtfChannelsMaybeShowAlert() = NtfManager.createNtfChannelsMaybeShowAlert()
override fun cancelCallNotification() = NtfManager.cancelCallNotification()
override fun cancelAllNotifications() = NtfManager.cancelAllNotifications()
override fun showMessage(title: String, text: String) = NtfManager.showMessage(title, text)
}
platform = object : PlatformInterface {
override suspend fun androidServiceStart() {

View File

@@ -72,6 +72,10 @@ class SimplexService: Service() {
stopSelf()
} else {
isServiceStarted = true
// In case of self-destruct is enabled the initialization process will not start in SimplexApp, Let's start it here
if (DatabaseUtils.ksSelfDestructPassword.get() != null && chatModel.chatDbStatus.value == null) {
initChatControllerAndRunMigrations()
}
}
}
@@ -100,7 +104,7 @@ class SimplexService: Service() {
if (wakeLock != null || isStartingService) return
val self = this
isStartingService = true
withApi {
withBGApi {
val chatController = ChatController
waitDbMigrationEnds(chatController)
try {
@@ -110,7 +114,7 @@ class SimplexService: Service() {
Log.w(chat.simplex.app.TAG, "SimplexService: problem with the database: $chatDbStatus")
showPassphraseNotification(chatDbStatus)
safeStopService()
return@withApi
return@withBGApi
}
saveServiceState(self, ServiceState.STARTED)
wakeLock = (getSystemService(Context.POWER_SERVICE) as PowerManager).run {

View File

@@ -30,7 +30,7 @@ object NtfManager {
const val ShowChatsAction: String = "chat.simplex.app.SHOW_CHATS"
// DO NOT change notification channel settings / names
const val CallChannel: String = "chat.simplex.app.CALL_NOTIFICATION_1"
const val CallChannel: String = "chat.simplex.app.CALL_NOTIFICATION_2"
const val AcceptCallAction: String = "chat.simplex.app.ACCEPT_CALL"
const val RejectCallAction: String = "chat.simplex.app.REJECT_CALL"
const val CallNotificationId: Int = -1
@@ -59,7 +59,7 @@ object NtfManager {
.setContentType(AudioAttributes.CONTENT_TYPE_SONIFICATION)
.setUsage(AudioAttributes.USAGE_NOTIFICATION_RINGTONE)
.build()
val soundUri = Uri.parse(ContentResolver.SCHEME_ANDROID_RESOURCE + "://" + context.packageName + "/" + R.raw.ring_once)
val soundUri = Uri.parse(ContentResolver.SCHEME_ANDROID_RESOURCE + "://" + context.packageName + "/raw/ring_once")
Log.d(TAG, "callNotificationChannel sound: $soundUri")
callChannel.setSound(soundUri, attrs)
callChannel.enableVibration(true)
@@ -140,7 +140,7 @@ object NtfManager {
}
}
fun notifyCallInvitation(invitation: RcvCallInvitation) {
fun notifyCallInvitation(invitation: RcvCallInvitation): Boolean {
val keyguardManager = getKeyguardManager(context)
Log.d(
TAG,
@@ -149,7 +149,7 @@ object NtfManager {
"callOnLockScreen ${appPreferences.callOnLockScreen.get()}, " +
"onForeground ${isAppOnForeground}"
)
if (isAppOnForeground) return
if (isAppOnForeground) return false
val contactId = invitation.contact.id
Log.d(TAG, "notifyCallInvitation $contactId")
val image = invitation.contact.image
@@ -163,7 +163,7 @@ object NtfManager {
.setFullScreenIntent(fullScreenPendingIntent, true)
.setVisibility(NotificationCompat.VISIBILITY_PUBLIC)
} else {
val soundUri = Uri.parse(ContentResolver.SCHEME_ANDROID_RESOURCE + "://" + context.packageName + "/" + R.raw.ring_once)
val soundUri = Uri.parse(ContentResolver.SCHEME_ANDROID_RESOURCE + "://" + context.packageName + "/raw/ring_once")
val fullScreenPendingIntent = PendingIntent.getActivity(context, 0, Intent(), PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE)
NotificationCompat.Builder(context, CallChannel)
.setContentIntent(chatPendingIntent(OpenChatAction, invitation.user.userId, invitation.contact.id))
@@ -206,6 +206,39 @@ object NtfManager {
notify(CallNotificationId, notification)
}
}
return true
}
fun showMessage(title: String, text: String) {
val builder = NotificationCompat.Builder(context, MessageChannel)
.setContentTitle(title)
.setContentText(text)
.setPriority(NotificationCompat.PRIORITY_HIGH)
.setGroup(MessageGroup)
.setGroupAlertBehavior(NotificationCompat.GROUP_ALERT_CHILDREN)
.setSmallIcon(R.drawable.ntf_icon)
.setLargeIcon(null)
.setColor(0x88FFFF)
.setAutoCancel(true)
.setVibrate(null)
.setContentIntent(chatPendingIntent(ShowChatsAction, null, null))
.setSilent(false)
val summary = NotificationCompat.Builder(context, MessageChannel)
.setSmallIcon(R.drawable.ntf_icon)
.setColor(0x88FFFF)
.setGroup(MessageGroup)
.setGroupAlertBehavior(NotificationCompat.GROUP_ALERT_CHILDREN)
.setGroupSummary(true)
.setContentIntent(chatPendingIntent(ShowChatsAction, null))
.build()
with(NotificationManagerCompat.from(context)) {
if (ActivityCompat.checkSelfPermission(SimplexApp.context, android.Manifest.permission.POST_NOTIFICATIONS) == PackageManager.PERMISSION_GRANTED) {
notify("MESSAGE".hashCode(), builder.build())
notify(0, summary)
}
}
}
fun cancelCallNotification() {
@@ -248,6 +281,7 @@ object NtfManager {
manager.createNotificationChannel(callNotificationChannel(CallChannel, generalGetString(MR.strings.ntf_channel_calls)))
// Remove old channels since they can't be edited
manager.deleteNotificationChannel("chat.simplex.app.CALL_NOTIFICATION")
manager.deleteNotificationChannel("chat.simplex.app.CALL_NOTIFICATION_1")
manager.deleteNotificationChannel("chat.simplex.app.LOCK_SCREEN_CALL_NOTIFICATION")
}

View File

@@ -97,7 +97,8 @@ fun IncomingCallActivityView(m: ChatModel) {
Surface(
Modifier
.fillMaxSize(),
color = MaterialTheme.colors.background
color = MaterialTheme.colors.background,
contentColor = LocalContentColor.current
) {
if (showCallView) {
Box {
@@ -200,7 +201,8 @@ private fun SimpleXLogo() {
private fun LockScreenCallButton(text: String, icon: Painter, color: Color, action: () -> Unit) {
Surface(
shape = RoundedCornerShape(10.dp),
color = Color.Transparent
color = Color.Transparent,
contentColor = LocalContentColor.current
) {
Column(
Modifier
@@ -227,7 +229,8 @@ fun PreviewIncomingCallLockScreenAlert() {
Surface(
Modifier
.fillMaxSize(),
color = MaterialTheme.colors.background
color = MaterialTheme.colors.background,
contentColor = LocalContentColor.current
) {
IncomingCallLockScreenAlertLayout(
invitation = RcvCallInvitation(

View File

@@ -13,8 +13,7 @@ import chat.simplex.common.model.ChatItem
import chat.simplex.common.model.MsgContent
import chat.simplex.common.platform.FileChooserLauncher
import chat.simplex.common.platform.saveImage
import chat.simplex.common.views.helpers.SharedContent
import chat.simplex.common.views.helpers.withApi
import chat.simplex.common.views.helpers.*
import chat.simplex.res.MR
import com.google.accompanist.permissions.rememberPermissionState
import dev.icerock.moko.resources.compose.painterResource
@@ -37,7 +36,7 @@ actual fun SaveContentItemAction(cItem: ChatItem, saveFileLauncher: FileChooserL
writePermissionState.launchPermissionRequest()
}
}
is MsgContent.MCFile, is MsgContent.MCVoice, is MsgContent.MCVideo -> withApi { saveFileLauncher.launch(cItem.file?.fileName ?: "") }
is MsgContent.MCFile, is MsgContent.MCVoice, is MsgContent.MCVideo -> withBGApi { saveFileLauncher.launch(cItem.file?.fileName ?: "") }
else -> {}
}
showMenu.value = false

View File

@@ -16,12 +16,12 @@ actual fun ChatListNavLinkLayout(
click: () -> Unit,
dropdownMenuItems: (@Composable () -> Unit)?,
showMenu: MutableState<Boolean>,
stopped: Boolean,
disabled: Boolean,
selectedChat: State<Boolean>,
nextChatSelected: State<Boolean>,
) {
var modifier = Modifier.fillMaxWidth()
if (!stopped) modifier = modifier
if (!disabled) modifier = modifier
.combinedClickable(onClick = click, onLongClick = { showMenu.value = true })
.onRightClick { showMenu.value = true }
Box(modifier) {

View File

@@ -0,0 +1,7 @@
package chat.simplex.common.views.database
import chat.simplex.common.views.usersettings.restartApp
actual fun restartChatOrApp() {
restartApp()
}

View File

@@ -102,7 +102,7 @@ fun AppearanceScope.AppearanceLayout(
val state = rememberSaveable { mutableStateOf(languagePref.get() ?: "system") }
LangSelector(state) {
state.value = it
withApi {
withBGApi {
delay(200)
val activity = context as? Activity
if (activity != null) {

View File

@@ -5,8 +5,7 @@ import androidx.compose.runtime.Composable
import androidx.work.WorkManager
import chat.simplex.common.model.ChatModel
import chat.simplex.common.platform.*
import chat.simplex.common.views.helpers.AlertManager
import chat.simplex.common.views.helpers.generalGetString
import chat.simplex.common.views.helpers.*
import chat.simplex.res.MR
import com.jakewharton.processphoenix.ProcessPhoenix
import dev.icerock.moko.resources.compose.painterResource
@@ -15,7 +14,7 @@ import dev.icerock.moko.resources.compose.stringResource
@Composable
actual fun SettingsSectionApp(
showSettingsModal: (@Composable (ChatModel) -> Unit) -> (() -> Unit),
showCustomModal: (@Composable (ChatModel, () -> Unit) -> Unit) -> (() -> Unit),
showCustomModal: (@Composable ModalData.(ChatModel, () -> Unit) -> Unit) -> (() -> Unit),
showVersion: () -> Unit,
withAuth: (title: String, desc: String, block: () -> Unit) -> Unit
) {
@@ -28,7 +27,7 @@ actual fun SettingsSectionApp(
}
private fun restartApp() {
fun restartApp() {
ProcessPhoenix.triggerRebirth(androidAppContext)
shutdownApp()
}

View File

@@ -44,7 +44,7 @@ data class SettingsViewState(
fun AppScreen() {
SimpleXTheme {
ProvideWindowInsets(windowInsetsAnimationsEnabled = true) {
Surface(color = MaterialTheme.colors.background) {
Surface(color = MaterialTheme.colors.background, contentColor = LocalContentColor.current) {
MainScreen()
}
}
@@ -85,7 +85,7 @@ fun MainScreen() {
@Composable
fun AuthView() {
Surface(color = MaterialTheme.colors.background) {
Surface(color = MaterialTheme.colors.background, contentColor = LocalContentColor.current) {
Box(
Modifier.fillMaxSize(),
contentAlignment = Alignment.Center

View File

@@ -1,8 +1,7 @@
package chat.simplex.common
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.material.MaterialTheme
import androidx.compose.material.Surface
import androidx.compose.material.*
import androidx.compose.runtime.mutableStateOf
import androidx.compose.ui.Modifier
import chat.simplex.common.model.*
@@ -107,7 +106,7 @@ object AppLock {
private fun setPasscode() {
val appPrefs = ChatController.appPrefs
ModalManager.fullscreen.showCustomModal { close ->
Surface(Modifier.fillMaxSize(), color = MaterialTheme.colors.background) {
Surface(Modifier.fillMaxSize(), color = MaterialTheme.colors.background, contentColor = LocalContentColor.current) {
SetAppPasscodeView(
submit = {
ChatModel.performLA.value = true

View File

@@ -56,6 +56,8 @@ object ChatModel {
// current chat
val chatId = mutableStateOf<String?>(null)
val chatItems = mutableStateListOf<ChatItem>()
// rhId, chatId
val deletedChats = mutableStateOf<List<Pair<Long?, String>>>(emptyList())
val chatItemStatuses = mutableMapOf<Long, CIStatus>()
val groupMembers = mutableStateListOf<GroupMember>()
@@ -112,7 +114,8 @@ object ChatModel {
val clipboardHasText = mutableStateOf(false)
var updatingChatsMutex: Mutex = Mutex()
val updatingChatsMutex: Mutex = Mutex()
val changingActiveUserMutex: Mutex = Mutex()
val desktopNoUserNoRemote: Boolean @Composable get() = appPlatform.isDesktop && currentUser.value == null && currentRemoteHost.value == null
fun desktopNoUserNoRemote(): Boolean = appPlatform.isDesktop && currentUser.value == null && currentRemoteHost.value == null
@@ -125,6 +128,9 @@ object ChatModel {
val remoteHostPairing = mutableStateOf<Pair<RemoteHostInfo?, RemoteHostSessionState>?>(null)
val remoteCtrlSession = mutableStateOf<RemoteCtrlSession?>(null)
val processedCriticalError: ProcessedErrors<AgentErrorType.CRITICAL> = ProcessedErrors(60_000)
val processedInternalError: ProcessedErrors<AgentErrorType.INTERNAL> = ProcessedErrors(20_000)
fun getUser(userId: Long): User? = if (currentUser.value?.userId == userId) {
currentUser.value
} else {
@@ -1151,7 +1157,6 @@ data class LocalProfile(
@Serializable
data class UserProfileUpdateSummary(
val notChanged: Int,
val updateSuccesses: Int,
val updateFailures: Int,
val changedContacts: List<Contact>
@@ -1256,19 +1261,34 @@ data class GroupMember (
var activeConn: Connection? = null
) {
val id: String get() = "#$groupId @$groupMemberId"
val displayName: String get() = memberProfile.localAlias.ifEmpty { memberProfile.displayName }
val displayName: String
get() {
val name = memberProfile.localAlias.ifEmpty { memberProfile.displayName }
return pastMember(name)
}
val fullName: String get() = memberProfile.fullName
val image: String? get() = memberProfile.image
val contactLink: String? = memberProfile.contactLink
val verified get() = activeConn?.connectionCode != null
val chatViewName: String
get() = memberProfile.localAlias.ifEmpty { displayName + (if (fullName == "" || fullName == displayName) "" else " / $fullName") }
get() {
val name = memberProfile.localAlias.ifEmpty { displayName + (if (fullName == "" || fullName == displayName) "" else " / $fullName") }
return pastMember(name)
}
private fun pastMember(name: String): String {
return if (memberStatus == GroupMemberStatus.MemUnknown)
String.format(generalGetString(MR.strings.past_member_vName), name)
else
name
}
val memberActive: Boolean get() = when (this.memberStatus) {
GroupMemberStatus.MemRemoved -> false
GroupMemberStatus.MemLeft -> false
GroupMemberStatus.MemGroupDeleted -> false
GroupMemberStatus.MemUnknown -> false
GroupMemberStatus.MemInvited -> false
GroupMemberStatus.MemIntroduced -> false
GroupMemberStatus.MemIntroInvited -> false
@@ -1283,6 +1303,7 @@ data class GroupMember (
GroupMemberStatus.MemRemoved -> false
GroupMemberStatus.MemLeft -> false
GroupMemberStatus.MemGroupDeleted -> false
GroupMemberStatus.MemUnknown -> false
GroupMemberStatus.MemInvited -> false
GroupMemberStatus.MemIntroduced -> true
GroupMemberStatus.MemIntroInvited -> true
@@ -1372,6 +1393,7 @@ enum class GroupMemberStatus {
@SerialName("removed") MemRemoved,
@SerialName("left") MemLeft,
@SerialName("deleted") MemGroupDeleted,
@SerialName("unknown") MemUnknown,
@SerialName("invited") MemInvited,
@SerialName("introduced") MemIntroduced,
@SerialName("intro-inv") MemIntroInvited,
@@ -1385,6 +1407,7 @@ enum class GroupMemberStatus {
MemRemoved -> generalGetString(MR.strings.group_member_status_removed)
MemLeft -> generalGetString(MR.strings.group_member_status_left)
MemGroupDeleted -> generalGetString(MR.strings.group_member_status_group_deleted)
MemUnknown -> generalGetString(MR.strings.group_member_status_unknown)
MemInvited -> generalGetString(MR.strings.group_member_status_invited)
MemIntroduced -> generalGetString(MR.strings.group_member_status_introduced)
MemIntroInvited -> generalGetString(MR.strings.group_member_status_intro_invitation)
@@ -1399,6 +1422,7 @@ enum class GroupMemberStatus {
MemRemoved -> generalGetString(MR.strings.group_member_status_removed)
MemLeft -> generalGetString(MR.strings.group_member_status_left)
MemGroupDeleted -> generalGetString(MR.strings.group_member_status_group_deleted)
MemUnknown -> generalGetString(MR.strings.group_member_status_unknown_short)
MemInvited -> generalGetString(MR.strings.group_member_status_invited)
MemIntroduced -> generalGetString(MR.strings.group_member_status_connecting)
MemIntroInvited -> generalGetString(MR.strings.group_member_status_connecting)

View File

@@ -5,6 +5,7 @@ import androidx.compose.runtime.*
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.graphics.painter.Painter
import chat.simplex.common.model.ChatModel.updatingChatsMutex
import chat.simplex.common.model.ChatModel.changingActiveUserMutex
import dev.icerock.moko.resources.compose.painterResource
import chat.simplex.common.platform.*
import chat.simplex.common.ui.theme.*
@@ -108,6 +109,8 @@ class AppPreferences {
val chatLastStart = mkDatePreference(SHARED_PREFS_CHAT_LAST_START, null)
val chatStopped = mkBoolPreference(SHARED_PREFS_CHAT_STOPPED, false)
val developerTools = mkBoolPreference(SHARED_PREFS_DEVELOPER_TOOLS, false)
val showInternalErrors = mkBoolPreference(SHARED_PREFS_SHOW_INTERNAL_ERRORS, false)
val showSlowApiCalls = mkBoolPreference(SHARED_PREFS_SHOW_SLOW_API_CALLS, false)
val terminalAlwaysVisible = mkBoolPreference(SHARED_PREFS_TERMINAL_ALWAYS_VISIBLE, false)
val networkUseSocksProxy = mkBoolPreference(SHARED_PREFS_NETWORK_USE_SOCKS_PROXY, false)
val networkProxyHostPort = mkStrPreference(SHARED_PREFS_NETWORK_PROXY_HOST_PORT, "localhost:9050")
@@ -276,6 +279,8 @@ class AppPreferences {
private const val SHARED_PREFS_CHAT_LAST_START = "ChatLastStart"
private const val SHARED_PREFS_CHAT_STOPPED = "ChatStopped"
private const val SHARED_PREFS_DEVELOPER_TOOLS = "DeveloperTools"
private const val SHARED_PREFS_SHOW_INTERNAL_ERRORS = "ShowInternalErrors"
private const val SHARED_PREFS_SHOW_SLOW_API_CALLS = "ShowSlowApiCalls"
private const val SHARED_PREFS_TERMINAL_ALWAYS_VISIBLE = "TerminalAlwaysVisible"
private const val SHARED_PREFS_NETWORK_USE_SOCKS_PROXY = "NetworkUseSocksProxy"
private const val SHARED_PREFS_NETWORK_PROXY_HOST_PORT = "NetworkProxyHostPort"
@@ -333,14 +338,14 @@ object ChatController {
var lastMsgReceivedTimestamp: Long = System.currentTimeMillis()
private set
private fun currentUserId(funcName: String): Long {
private suspend fun currentUserId(funcName: String): Long = changingActiveUserMutex.withLock {
val userId = chatModel.currentUser.value?.userId
if (userId == null) {
val error = "$funcName: no current user"
Log.e(TAG, error)
throw Exception(error)
}
return userId
userId
}
suspend fun startChat(user: User) {
@@ -406,8 +411,11 @@ object ChatController {
}
suspend fun changeActiveUser_(rhId: Long?, toUserId: Long, viewPwd: String?) {
val currentUser = apiSetActiveUser(rhId, toUserId, viewPwd)
chatModel.currentUser.value = currentUser
val currentUser = changingActiveUserMutex.withLock {
apiSetActiveUser(rhId, toUserId, viewPwd).also {
chatModel.currentUser.value = it
}
}
val users = listUsers(rhId)
chatModel.users.clear()
chatModel.users.addAll(users)
@@ -458,19 +466,19 @@ object ChatController {
suspend fun sendCmd(rhId: Long?, cmd: CC): CR {
val ctrl = ctrl ?: throw Exception("Controller is not initialized")
return withContext(Dispatchers.IO) {
val c = cmd.cmdString
chatModel.addTerminalItem(TerminalItem.cmd(rhId, cmd.obfuscated))
Log.d(TAG, "sendCmd: ${cmd.cmdType}")
val json = if (rhId == null) chatSendCmd(ctrl, c) else chatSendRemoteCmd(ctrl, rhId.toInt(), c)
val r = APIResponse.decodeStr(json)
Log.d(TAG, "sendCmd response type ${r.resp.responseType}")
if (r.resp is CR.Response || r.resp is CR.Invalid) {
Log.d(TAG, "sendCmd response json $json")
}
chatModel.addTerminalItem(TerminalItem.resp(rhId, r.resp))
r.resp
//return withContext(Dispatchers.IO) {
val c = cmd.cmdString
chatModel.addTerminalItem(TerminalItem.cmd(rhId, cmd.obfuscated))
Log.d(TAG, "sendCmd: ${cmd.cmdType}")
val json = if (rhId == null) chatSendCmd(ctrl, c) else chatSendRemoteCmd(ctrl, rhId.toInt(), c)
val r = APIResponse.decodeStr(json)
Log.d(TAG, "sendCmd response type ${r.resp.responseType}")
if (r.resp is CR.Response || r.resp is CR.Invalid) {
Log.d(TAG, "sendCmd response json $json")
}
chatModel.addTerminalItem(TerminalItem.resp(rhId, r.resp))
return r.resp
//}
}
private fun recvMsg(ctrl: ChatCtrl): APIResponse? {
@@ -504,6 +512,10 @@ object ChatController {
r is CR.ChatCmdError && r.chatError is ChatError.ChatErrorChat && r.chatError.errorType is ChatErrorType.UserExists
) {
AlertManager.shared.showAlertMsg(generalGetString(MR.strings.failed_to_create_user_duplicate_title), generalGetString(MR.strings.failed_to_create_user_duplicate_desc))
} else if (
r is CR.ChatCmdError && r.chatError is ChatError.ChatErrorChat && r.chatError.errorType is ChatErrorType.InvalidDisplayName
) {
AlertManager.shared.showAlertMsg(generalGetString(MR.strings.failed_to_create_user_invalid_title), generalGetString(MR.strings.failed_to_create_user_invalid_desc))
} else {
AlertManager.shared.showAlertMsg(generalGetString(MR.strings.failed_to_create_user_title), r.details)
}
@@ -572,7 +584,7 @@ object ChatController {
}
suspend fun apiStartChat(): Boolean {
val r = sendCmd(null, CC.StartChat(expire = true))
val r = sendCmd(null, CC.StartChat(mainApp = true))
when (r) {
is CR.ChatStarted -> return true
is CR.ChatRunning -> return false
@@ -880,10 +892,7 @@ object ChatController {
suspend fun apiAddContact(rh: Long?, incognito: Boolean): Pair<Pair<String, PendingContactConnection>?, (() -> Unit)?> {
val userId = chatModel.currentUser.value?.userId ?: run {
Log.e(TAG, "apiAddContact: no current user")
return null to null
}
val userId = try { currentUserId("apiAddContact") } catch (e: Exception) { return null to null }
val r = sendCmd(rh, CC.APIAddContact(userId, incognito))
return when (r) {
is CR.Invitation -> (r.connReqInvitation to r.connection) to null
@@ -912,10 +921,7 @@ object ChatController {
}
suspend fun apiConnect(rh: Long?, incognito: Boolean, connReq: String): PendingContactConnection? {
val userId = chatModel.currentUser.value?.userId ?: run {
Log.e(TAG, "apiConnect: no current user")
return null
}
val userId = try { currentUserId("apiConnect") } catch (e: Exception) { return null }
val r = sendCmd(rh, CC.APIConnect(userId, incognito, connReq))
when {
r is CR.SentConfirmation -> return r.connection
@@ -954,10 +960,7 @@ object ChatController {
}
suspend fun apiConnectContactViaAddress(rh: Long?, incognito: Boolean, contactId: Long): Contact? {
val userId = chatModel.currentUser.value?.userId ?: run {
Log.e(TAG, "apiConnectContactViaAddress: no current user")
return null
}
val userId = try { currentUserId("apiConnectContactViaAddress") } catch (e: Exception) { return null }
val r = sendCmd(rh, CC.ApiConnectContactViaAddress(userId, incognito, contactId))
when {
r is CR.SentInvitationToContact -> return r.contact
@@ -978,11 +981,12 @@ object ChatController {
}
suspend fun apiDeleteChat(rh: Long?, type: ChatType, id: Long, notify: Boolean? = null): Boolean {
chatModel.deletedChats.value += rh to type.type + id
val r = sendCmd(rh, CC.ApiDeleteChat(type, id, notify))
when {
r is CR.ContactDeleted && type == ChatType.Direct -> return true
r is CR.ContactConnectionDeleted && type == ChatType.ContactConnection -> return true
r is CR.GroupDeletedUser && type == ChatType.Group -> return true
val success = when {
r is CR.ContactDeleted && type == ChatType.Direct -> true
r is CR.ContactConnectionDeleted && type == ChatType.ContactConnection -> true
r is CR.GroupDeletedUser && type == ChatType.Group -> true
else -> {
val titleId = when (type) {
ChatType.Direct -> MR.strings.error_deleting_contact
@@ -991,9 +995,11 @@ object ChatController {
ChatType.ContactConnection -> MR.strings.error_deleting_pending_contact_connection
}
apiErrorAlert("apiDeleteChat", generalGetString(titleId), r)
false
}
}
return false
chatModel.deletedChats.value -= rh to type.type + id
return success
}
suspend fun apiClearChat(rh: Long?, type: ChatType, id: Long): ChatInfo? {
@@ -1122,6 +1128,13 @@ object ChatController {
return false
}
suspend fun apiGetCallInvitations(rh: Long?): List<RcvCallInvitation> {
val r = sendCmd(rh, CC.ApiGetCallInvitations())
if (r is CR.CallInvitations) return r.callInvitations
Log.e(TAG, "apiGetCallInvitations bad response: ${r.responseType} ${r.details}")
return emptyList()
}
suspend fun apiSendCallInvitation(rh: Long?, contact: Contact, callType: CallType): Boolean {
val r = sendCmd(rh, CC.ApiSendCallInvitation(contact, callType))
return r is CR.CmdOk
@@ -1654,7 +1667,8 @@ object ChatController {
((mc is MsgContent.MCImage && file.fileSize <= MAX_IMAGE_SIZE_AUTO_RCV)
|| (mc is MsgContent.MCVideo && file.fileSize <= MAX_VIDEO_SIZE_AUTO_RCV)
|| (mc is MsgContent.MCVoice && file.fileSize <= MAX_VOICE_SIZE_AUTO_RCV && file.fileStatus !is CIFileStatus.RcvAccepted))) {
withApi { receiveFile(rhId, r.user, file.fileId, encrypted = cItem.encryptLocalFile && chatController.appPrefs.privacyEncryptLocalFiles.get(), auto = true) }
withBGApi { receiveFile(rhId, r.user, file.fileId, encrypted = cItem.encryptLocalFile && chatController.appPrefs
.privacyEncryptLocalFiles.get(), auto = true) }
}
if (cItem.showNotification && (allowedToShowNotification() || chatModel.chatId.value != cInfo.id || chatModel.remoteHostId() != rhId)) {
ntfManager.notifyMessageReceived(r.user, cInfo, cItem)
@@ -1852,10 +1866,8 @@ object ChatController {
}
withCall(r, r.contact) { _ ->
chatModel.callCommand.add(WCallCommand.End)
withApi {
chatModel.activeCall.value = null
chatModel.showCallView.value = false
}
chatModel.activeCall.value = null
chatModel.showCallView.value = false
}
}
is CR.ContactSwitch ->
@@ -1878,9 +1890,34 @@ object ChatController {
val disconnectedHost = chatModel.remoteHosts.firstOrNull { it.remoteHostId == r.remoteHostId_ }
chatModel.remoteHostPairing.value = null
if (disconnectedHost != null) {
showToast(
generalGetString(MR.strings.remote_host_was_disconnected_toast).format(disconnectedHost.hostDeviceName.ifEmpty { disconnectedHost.remoteHostId.toString() })
)
val deviceName = disconnectedHost.hostDeviceName.ifEmpty { disconnectedHost.remoteHostId.toString() }
when (r.rhStopReason) {
is RemoteHostStopReason.ConnectionFailed -> {
AlertManager.shared.showAlertMsg(
generalGetString(MR.strings.remote_host_was_disconnected_title),
if (r.rhStopReason.chatError is ChatError.ChatErrorRemoteHost) {
r.rhStopReason.chatError.remoteHostError.localizedString(deviceName)
} else {
generalGetString(MR.strings.remote_host_disconnected_from).format(deviceName, r.rhStopReason.chatError.string)
}
)
}
is RemoteHostStopReason.Crashed -> {
AlertManager.shared.showAlertMsg(
generalGetString(MR.strings.remote_host_was_disconnected_title),
if (r.rhStopReason.chatError is ChatError.ChatErrorRemoteHost) {
r.rhStopReason.chatError.remoteHostError.localizedString(deviceName)
} else {
generalGetString(MR.strings.remote_host_disconnected_from).format(deviceName, r.rhStopReason.chatError.string)
}
)
}
is RemoteHostStopReason.Disconnected -> {
if (r.rhsState is RemoteHostSessionState.Connected || r.rhsState is RemoteHostSessionState.Confirmed) {
showToast(generalGetString(MR.strings.remote_host_was_disconnected_toast).format(deviceName))
}
}
}
}
if (chatModel.remoteHostId() == r.remoteHostId_) {
chatModel.currentRemoteHost.value = null
@@ -1911,11 +1948,40 @@ object ChatController {
val sess = chatModel.remoteCtrlSession.value
if (sess != null) {
chatModel.remoteCtrlSession.value = null
fun showAlert(chatError: ChatError) {
AlertManager.shared.showAlertMsg(
generalGetString(MR.strings.remote_ctrl_was_disconnected_title),
if (chatError is ChatError.ChatErrorRemoteCtrl) {
chatError.remoteCtrlError.localizedString
} else {
generalGetString(MR.strings.remote_ctrl_disconnected_with_reason).format(chatError.string)
}
)
}
when (r.rcStopReason) {
is RemoteCtrlStopReason.DiscoveryFailed -> showAlert(r.rcStopReason.chatError)
is RemoteCtrlStopReason.ConnectionFailed -> showAlert(r.rcStopReason.chatError)
is RemoteCtrlStopReason.SetupFailed -> showAlert(r.rcStopReason.chatError)
is RemoteCtrlStopReason.Disconnected -> {
/*AlertManager.shared.showAlertMsg(
generalGetString(MR.strings.remote_ctrl_was_disconnected_title),
)*/
}
}
if (sess.sessionState is UIRemoteCtrlSessionState.Connected) {
switchToLocalSession()
}
}
}
is CR.ChatCmdError -> when {
r.chatError is ChatError.ChatErrorAgent && r.chatError.agentError is AgentErrorType.CRITICAL -> {
chatModel.processedCriticalError.newError(r.chatError.agentError, r.chatError.agentError.offerRestart)
}
r.chatError is ChatError.ChatErrorAgent && r.chatError.agentError is AgentErrorType.INTERNAL && appPrefs.developerTools.get() && appPrefs.showInternalErrors.get() -> {
chatModel.processedInternalError.newError(r.chatError.agentError, false)
}
}
else ->
Log.d(TAG , "unsupported event: ${r.responseType}")
}
@@ -1939,20 +2005,18 @@ object ChatController {
}
}
fun switchToLocalSession() {
suspend fun switchToLocalSession() {
val m = chatModel
m.remoteCtrlSession.value = null
withBGApi {
val users = listUsers(null)
m.users.clear()
m.users.addAll(users)
getUserChatData(null)
val statuses = apiGetNetworkStatuses(null)
if (statuses != null) {
chatModel.networkStatuses.clear()
val ss = statuses.associate { it.agentConnId to it.networkStatus }.toMap()
chatModel.networkStatuses.putAll(ss)
}
val users = listUsers(null)
m.users.clear()
m.users.addAll(users)
getUserChatData(null)
val statuses = apiGetNetworkStatuses(null)
if (statuses != null) {
chatModel.networkStatuses.clear()
val ss = statuses.associate { it.agentConnId to it.networkStatus }.toMap()
chatModel.networkStatuses.putAll(ss)
}
}
@@ -2165,7 +2229,7 @@ sealed class CC {
class ApiMuteUser(val userId: Long): CC()
class ApiUnmuteUser(val userId: Long): CC()
class ApiDeleteUser(val userId: Long, val delSMPQueues: Boolean, val viewPwd: String?): CC()
class StartChat(val expire: Boolean): CC()
class StartChat(val mainApp: Boolean): CC()
class ApiStopChat: CC()
class SetTempFolder(val tempFolder: String): CC()
class SetFilesFolder(val filesFolder: String): CC()
@@ -2236,6 +2300,7 @@ sealed class CC {
class ApiShowMyAddress(val userId: Long): CC()
class ApiSetProfileAddress(val userId: Long, val on: Boolean): CC()
class ApiAddressAutoAccept(val userId: Long, val autoAccept: AutoAccept?): CC()
class ApiGetCallInvitations: CC()
class ApiSendCallInvitation(val contact: Contact, val callType: CallType): CC()
class ApiRejectCall(val contact: Contact): CC()
class ApiSendCallOffer(val contact: Contact, val callOffer: WebRTCCallOffer): CC()
@@ -2292,7 +2357,7 @@ sealed class CC {
is ApiMuteUser -> "/_mute user $userId"
is ApiUnmuteUser -> "/_unmute user $userId"
is ApiDeleteUser -> "/_delete user $userId del_smp=${onOff(delSMPQueues)}${maybePwd(viewPwd)}"
is StartChat -> "/_start subscribe=on expire=${onOff(expire)} xftp=on"
is StartChat -> "/_start main=${onOff(mainApp)}"
is ApiStopChat -> "/_stop"
is SetTempFolder -> "/_temp_folder $tempFolder"
is SetFilesFolder -> "/_files_folder $filesFolder"
@@ -2372,6 +2437,7 @@ sealed class CC {
is ApiAddressAutoAccept -> "/_auto_accept $userId ${AutoAccept.cmdString(autoAccept)}"
is ApiAcceptContact -> "/_accept incognito=${onOff(incognito)} $contactReqId"
is ApiRejectContact -> "/_reject $contactReqId"
is ApiGetCallInvitations -> "/_call get"
is ApiSendCallInvitation -> "/_call invite @${contact.apiId} ${json.encodeToString(callType)}"
is ApiRejectCall -> "/_call reject @${contact.apiId}"
is ApiSendCallOffer -> "/_call offer @${contact.apiId} ${json.encodeToString(callOffer)}"
@@ -2495,6 +2561,7 @@ sealed class CC {
is ApiAddressAutoAccept -> "apiAddressAutoAccept"
is ApiAcceptContact -> "apiAcceptContact"
is ApiRejectContact -> "apiRejectContact"
is ApiGetCallInvitations -> "apiGetCallInvitations"
is ApiSendCallInvitation -> "apiSendCallInvitation"
is ApiRejectCall -> "apiRejectCall"
is ApiSendCallOffer -> "apiSendCallOffer"
@@ -3870,6 +3937,7 @@ sealed class CR {
@Serializable @SerialName("sndFileError") class SndFileError(val user: UserRef, val chatItem: AChatItem): CR()
// call events
@Serializable @SerialName("callInvitation") class CallInvitation(val callInvitation: RcvCallInvitation): CR()
@Serializable @SerialName("callInvitations") class CallInvitations(val callInvitations: List<RcvCallInvitation>): CR()
@Serializable @SerialName("callOffer") class CallOffer(val user: UserRef, val contact: Contact, val callType: CallType, val offer: WebRTCSession, val sharedKey: String? = null, val askConfirmation: Boolean): CR()
@Serializable @SerialName("callAnswer") class CallAnswer(val user: UserRef, val contact: Contact, val answer: WebRTCSession): CR()
@Serializable @SerialName("callExtraInfo") class CallExtraInfo(val user: UserRef, val contact: Contact, val extraInfo: WebRTCExtraInfo): CR()
@@ -4017,6 +4085,7 @@ sealed class CR {
is SndFileProgressXFTP -> "sndFileProgressXFTP"
is SndFileCompleteXFTP -> "sndFileCompleteXFTP"
is SndFileError -> "sndFileError"
is CallInvitations -> "callInvitations"
is CallInvitation -> "callInvitation"
is CallOffer -> "callOffer"
is CallAnswer -> "callAnswer"
@@ -4163,6 +4232,7 @@ sealed class CR {
is SndFileProgressXFTP -> withUser(user, "chatItem: ${json.encodeToString(chatItem)}\nsentSize: $sentSize\ntotalSize: $totalSize")
is SndFileCompleteXFTP -> withUser(user, json.encodeToString(chatItem))
is SndFileError -> withUser(user, json.encodeToString(chatItem))
is CallInvitations -> "callInvitations: ${json.encodeToString(callInvitations)}"
is CallInvitation -> "contact: ${callInvitation.contact.id}\ncallType: $callInvitation.callType\nsharedKey: ${callInvitation.sharedKey ?: ""}"
is CallOffer -> withUser(user, "contact: ${contact.id}\ncallType: $callType\nsharedKey: ${sharedKey ?: ""}\naskConfirmation: $askConfirmation\noffer: ${json.encodeToString(offer)}")
is CallAnswer -> withUser(user, "contact: ${contact.id}\nanswer: ${json.encodeToString(answer)}")
@@ -4437,6 +4507,7 @@ sealed class ChatErrorType {
is EmptyUserPassword -> "emptyUserPassword"
is UserAlreadyHidden -> "userAlreadyHidden"
is UserNotHidden -> "userNotHidden"
is InvalidDisplayName -> "invalidDisplayName"
is ChatNotStarted -> "chatNotStarted"
is ChatNotStopped -> "chatNotStopped"
is ChatStoreChanged -> "chatStoreChanged"
@@ -4514,6 +4585,7 @@ sealed class ChatErrorType {
@Serializable @SerialName("emptyUserPassword") class EmptyUserPassword(val userId: Long): ChatErrorType()
@Serializable @SerialName("userAlreadyHidden") class UserAlreadyHidden(val userId: Long): ChatErrorType()
@Serializable @SerialName("userNotHidden") class UserNotHidden(val userId: Long): ChatErrorType()
@Serializable @SerialName("invalidDisplayName") object InvalidDisplayName: ChatErrorType()
@Serializable @SerialName("chatNotStarted") object ChatNotStarted: ChatErrorType()
@Serializable @SerialName("chatNotStopped") object ChatNotStopped: ChatErrorType()
@Serializable @SerialName("chatStoreChanged") object ChatStoreChanged: ChatErrorType()
@@ -4731,6 +4803,7 @@ sealed class AgentErrorType {
is AGENT -> "AGENT ${agentErr.string}"
is INTERNAL -> "INTERNAL $internalErr"
is INACTIVE -> "INACTIVE"
is CRITICAL -> "CRITICAL $offerRestart $criticalErr"
}
@Serializable @SerialName("CMD") class CMD(val cmdErr: CommandErrorType): AgentErrorType()
@Serializable @SerialName("CONN") class CONN(val connErr: ConnectionErrorType): AgentErrorType()
@@ -4742,6 +4815,7 @@ sealed class AgentErrorType {
@Serializable @SerialName("AGENT") class AGENT(val agentErr: SMPAgentError): AgentErrorType()
@Serializable @SerialName("INTERNAL") class INTERNAL(val internalErr: String): AgentErrorType()
@Serializable @SerialName("INACTIVE") object INACTIVE: AgentErrorType()
@Serializable @SerialName("CRITICAL") data class CRITICAL(val offerRestart: Boolean, val criticalErr: String): AgentErrorType()
}
@Serializable
@@ -4961,6 +5035,15 @@ sealed class RemoteHostError {
is BadVersion -> "badVersion"
is Disconnected -> "disconnected"
}
fun localizedString(name: String): String = when (this) {
is Missing -> generalGetString(MR.strings.remote_host_error_missing)
is Inactive -> generalGetString(MR.strings.remote_host_error_inactive)
is Busy -> generalGetString(MR.strings.remote_host_error_busy)
is Timeout -> generalGetString(MR.strings.remote_host_error_timeout)
is BadState -> generalGetString(MR.strings.remote_host_error_bad_state)
is BadVersion -> generalGetString(MR.strings.remote_host_error_bad_version)
is Disconnected -> generalGetString(MR.strings.remote_host_error_disconnected)
}.format(name)
@Serializable @SerialName("missing") object Missing: RemoteHostError()
@Serializable @SerialName("inactive") object Inactive: RemoteHostError()
@Serializable @SerialName("busy") object Busy: RemoteHostError()
@@ -4981,6 +5064,16 @@ sealed class RemoteCtrlError {
is BadInvitation -> "badInvitation"
is BadVersion -> "badVersion"
}
val localizedString: String get() = when (this) {
is Inactive -> generalGetString(MR.strings.remote_ctrl_error_inactive)
is BadState -> generalGetString(MR.strings.remote_ctrl_error_bad_state)
is Busy -> generalGetString(MR.strings.remote_ctrl_error_busy)
is Timeout -> generalGetString(MR.strings.remote_ctrl_error_timeout)
is Disconnected -> generalGetString(MR.strings.remote_ctrl_error_disconnected)
is BadInvitation -> generalGetString(MR.strings.remote_ctrl_error_bad_invitation)
is BadVersion -> generalGetString(MR.strings.remote_ctrl_error_bad_version)
}
@Serializable @SerialName("inactive") object Inactive: RemoteCtrlError()
@Serializable @SerialName("badState") object BadState: RemoteCtrlError()
@Serializable @SerialName("busy") object Busy: RemoteCtrlError()

View File

@@ -41,24 +41,23 @@ val appPreferences: AppPreferences
val chatController: ChatController = ChatController
fun initChatControllerAndRunMigrations(ignoreSelfDestruct: Boolean) {
if (ignoreSelfDestruct || DatabaseUtils.ksSelfDestructPassword.get() == null) {
withBGApi {
if (appPreferences.chatStopped.get() && appPreferences.storeDBPassphrase.get() && ksDatabasePassword.get() != null) {
initChatController(startChat = ::showStartChatAfterRestartAlert)
} else {
initChatController()
}
runMigrations()
fun initChatControllerAndRunMigrations() {
withLongRunningApi(slow = 30_000, deadlock = 60_000) {
if (appPreferences.chatStopped.get() && appPreferences.storeDBPassphrase.get() && ksDatabasePassword.get() != null) {
initChatController(startChat = ::showStartChatAfterRestartAlert)
} else {
initChatController()
}
runMigrations()
}
}
suspend fun initChatController(useKey: String? = null, confirmMigrations: MigrationConfirmation? = null, startChat: () -> CompletableDeferred<Boolean> = { CompletableDeferred(true) }) {
try {
if (chatModel.ctrlInitInProgress.value) return
chatModel.ctrlInitInProgress.value = true
val dbKey = useKey ?: DatabaseUtils.useDatabaseKey()
val confirm = confirmMigrations ?: if (appPreferences.confirmDBUpgrades.get()) MigrationConfirmation.Error else MigrationConfirmation.YesUp
val confirm = confirmMigrations ?: if (appPreferences.developerTools.get() && appPreferences.confirmDBUpgrades.get()) MigrationConfirmation.Error else MigrationConfirmation.YesUp
val migrated: Array<Any> = chatMigrateInit(dbAbsolutePrefixPath, dbKey, confirm.value)
val res: DBMigrationResult = kotlin.runCatching {
json.decodeFromString<DBMigrationResult>(migrated[0] as String)

View File

@@ -93,12 +93,13 @@ abstract class NtfManager {
}
}
abstract fun notifyCallInvitation(invitation: RcvCallInvitation)
abstract fun notifyCallInvitation(invitation: RcvCallInvitation): Boolean
abstract fun hasNotificationsForChat(chatId: String): Boolean
abstract fun cancelNotificationsForChat(chatId: String)
abstract fun displayNotification(user: UserLike, chatId: String, displayName: String, msgText: String, image: String? = null, actions: List<Pair<NotificationAction, () -> Unit>> = emptyList())
abstract fun cancelCallNotification()
abstract fun cancelAllNotifications()
abstract fun showMessage(title: String, text: String)
// Android only
abstract fun androidCreateNtfChannelsMaybeShowAlert()

View File

@@ -1,5 +1,7 @@
package chat.simplex.common.ui.theme
import androidx.compose.material.LocalContentColor
import androidx.compose.runtime.Composable
import androidx.compose.ui.graphics.Color
val Purple200 = Color(0xFFBB86FC)
@@ -25,4 +27,5 @@ val WarningOrange = Color(255, 127, 0, 255)
val WarningYellow = Color(255, 192, 0, 255)
val FileLight = Color(183, 190, 199, 255)
val FileDark = Color(101, 101, 106, 255)
val MenuTextColorDark = Color.White.copy(alpha = 0.8f)
val MenuTextColor: Color @Composable get () = if (isInDarkTheme()) LocalContentColor.current.copy(alpha = 0.8f) else Color.Black

View File

@@ -283,27 +283,10 @@ fun SimpleXTheme(darkTheme: Boolean? = null, content: @Composable () -> Unit) {
val theme by CurrentColors.collectAsState()
MaterialTheme(
colors = theme.colors,
typography = Typography.copy(
h1 = Typography.h1.copy(color = theme.colors.onBackground),
h2 = Typography.h2.copy(color = theme.colors.onBackground),
h3 = Typography.h3.copy(color = theme.colors.onBackground),
h4 = Typography.h4.copy(color = theme.colors.onBackground),
h5 = Typography.h5.copy(color = theme.colors.onBackground),
h6 = Typography.h6.copy(color = theme.colors.onBackground),
subtitle1 = Typography.subtitle1.copy(color = theme.colors.onBackground),
subtitle2 = Typography.subtitle2.copy(color = theme.colors.onBackground),
body1 = Typography.body1.copy(color = theme.colors.onBackground),
body2 = Typography.body2.copy(color = theme.colors.onBackground),
button = Typography.button.copy(color = theme.colors.onBackground),
caption = Typography.caption.copy(color = theme.colors.onBackground),
overline = Typography.overline.copy(color = theme.colors.onBackground)
),
typography = Typography,
shapes = Shapes,
content = {
ProvideTextStyle(
value = TextStyle(color = theme.colors.onBackground),
content = content
)
CompositionLocalProvider(LocalContentColor provides MaterialTheme.colors.onBackground, content = content)
}
)
}

View File

@@ -1,8 +1,7 @@
package chat.simplex.common.views
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.material.MaterialTheme
import androidx.compose.material.Surface
import androidx.compose.material.*
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
@@ -11,7 +10,8 @@ fun SplashView() {
Surface(
Modifier
.fillMaxSize(),
color = MaterialTheme.colors.background
color = MaterialTheme.colors.background,
contentColor = LocalContentColor.current
) {
// Image(
// painter = painterResource(MR.images.logo),

View File

@@ -50,7 +50,7 @@ private fun sendCommand(chatModel: ChatModel, composeState: MutableState<Compose
chatModel.addTerminalItem(TerminalItem.resp(null, resp))
composeState.value = ComposeState(useLinkPreviews = false)
} else {
withApi {
withBGApi {
// show "in progress"
// TODO show active remote host in chat console?
chatModel.controller.sendCmd(chatModel.remoteHostId(), CC.Console(s))
@@ -101,13 +101,16 @@ fun TerminalLayout(
)
}
},
contentColor = LocalContentColor.current,
drawerContentColor = LocalContentColor.current,
modifier = Modifier.navigationBarsWithImePadding()
) { contentPadding ->
Surface(
modifier = Modifier
.padding(contentPadding)
.fillMaxWidth(),
color = MaterialTheme.colors.background
color = MaterialTheme.colors.background,
contentColor = LocalContentColor.current
) {
TerminalLog()
}

View File

@@ -175,8 +175,8 @@ fun CreateFirstProfile(chatModel: ChatModel, close: () -> Unit) {
}
fun createProfileInNoProfileSetup(displayName: String, close: () -> Unit) {
withApi {
val user = controller.apiCreateActiveUser(null, Profile(displayName.trim(), "", null)) ?: return@withApi
withBGApi {
val user = controller.apiCreateActiveUser(null, Profile(displayName.trim(), "", null)) ?: return@withBGApi
controller.appPrefs.onboardingStage.set(OnboardingStage.Step3_CreateSimpleXAddress)
chatModel.chatRunning.value = false
controller.startChat(user)
@@ -186,11 +186,11 @@ fun createProfileInNoProfileSetup(displayName: String, close: () -> Unit) {
}
fun createProfileInProfiles(chatModel: ChatModel, displayName: String, close: () -> Unit) {
withApi {
withBGApi {
val rhId = chatModel.remoteHostId()
val user = chatModel.controller.apiCreateActiveUser(
rhId, Profile(displayName.trim(), "", null)
) ?: return@withApi
) ?: return@withBGApi
chatModel.currentUser.value = user
if (chatModel.users.isEmpty()) {
chatModel.controller.startChat(user)
@@ -206,10 +206,10 @@ fun createProfileInProfiles(chatModel: ChatModel, displayName: String, close: ()
}
fun createProfileOnboarding(chatModel: ChatModel, displayName: String, close: () -> Unit) {
withApi {
withBGApi {
chatModel.currentUser.value = chatModel.controller.apiCreateActiveUser(
null, Profile(displayName.trim(), "", null)
) ?: return@withApi
) ?: return@withBGApi
val onboardingStage = chatModel.controller.appPrefs.onboardingStage
if (chatModel.users.isEmpty()) {
onboardingStage.set(if (appPlatform.isDesktop && chatModel.controller.appPrefs.initialRandomDBPassphrase.get() && !chatModel.desktopOnboardingRandomPassword.value) {
@@ -239,7 +239,7 @@ fun OnboardingButtons(displayName: MutableState<String>, close: () -> Unit) {
val enabled = canCreateProfile(displayName.value)
val createModifier: Modifier = Modifier.clickable(enabled) { createProfileOnboarding(chatModel, displayName.value, close) }.padding(8.dp)
val createColor: Color = if (enabled) MaterialTheme.colors.primary else MaterialTheme.colors.secondary
Surface(shape = RoundedCornerShape(20.dp), color = Color.Transparent) {
Surface(shape = RoundedCornerShape(20.dp), color = Color.Transparent, contentColor = LocalContentColor.current) {
Row(verticalAlignment = Alignment.CenterVertically, modifier = createModifier) {
Text(stringResource(MR.strings.create_profile_button), style = MaterialTheme.typography.caption, color = createColor, fontWeight = FontWeight.Medium)
Icon(painterResource(MR.images.ic_arrow_forward_ios), stringResource(MR.strings.create_profile_button), tint = createColor)

View File

@@ -2,7 +2,7 @@ package chat.simplex.common.views.call
import chat.simplex.common.model.ChatModel
import chat.simplex.common.platform.*
import chat.simplex.common.views.helpers.withApi
import chat.simplex.common.views.helpers.withBGApi
import kotlinx.datetime.Clock
import kotlin.time.Duration.Companion.minutes
@@ -13,8 +13,8 @@ class CallManager(val chatModel: ChatModel) {
callInvitations[invitation.contact.id] = invitation
if (invitation.user.showNotifications) {
if (Clock.System.now() - invitation.callTs <= 3.minutes) {
invitation.sentNotification = ntfManager.notifyCallInvitation(invitation)
activeCallInvitation.value = invitation
ntfManager.notifyCallInvitation(invitation)
} else {
val contact = invitation.contact
ntfManager.displayNotification(user = invitation.user, chatId = contact.id, displayName = contact.displayName, msgText = invitation.callTypeText)
@@ -28,13 +28,13 @@ class CallManager(val chatModel: ChatModel) {
if (call == null) {
justAcceptIncomingCall(invitation = invitation)
} else {
withApi {
withBGApi {
chatModel.switchingCall.value = true
try {
endCall(call = call)
justAcceptIncomingCall(invitation = invitation)
} finally {
withApi { chatModel.switchingCall.value = false }
chatModel.switchingCall.value = false
}
}
}
@@ -90,7 +90,7 @@ class CallManager(val chatModel: ChatModel) {
activeCallInvitation.value = null
ntfManager.cancelCallNotification()
}
withApi {
withBGApi {
if (!controller.apiRejectCall(invitation.remoteHostId, invitation.contact)) {
Log.e(TAG, "apiRejectCall error")
}

View File

@@ -15,11 +15,10 @@ import dev.icerock.moko.resources.compose.painterResource
import dev.icerock.moko.resources.compose.stringResource
import androidx.compose.ui.unit.dp
import chat.simplex.common.model.*
import chat.simplex.common.platform.*
import chat.simplex.common.ui.theme.*
import chat.simplex.common.views.helpers.ProfileImage
import chat.simplex.common.views.usersettings.ProfilePreview
import chat.simplex.common.platform.ntfManager
import chat.simplex.common.platform.SoundPlayer
import chat.simplex.res.MR
import kotlinx.datetime.Clock
@@ -27,7 +26,11 @@ import kotlinx.datetime.Clock
fun IncomingCallAlertView(invitation: RcvCallInvitation, chatModel: ChatModel) {
val cm = chatModel.callManager
val scope = rememberCoroutineScope()
LaunchedEffect(true) { SoundPlayer.start(scope, sound = !chatModel.showCallView.value) }
LaunchedEffect(Unit) {
if (chatModel.activeCallInvitation.value?.sentNotification == false || appPlatform.isDesktop) {
SoundPlayer.start(scope, sound = !chatModel.showCallView.value)
}
}
DisposableEffect(true) { onDispose { SoundPlayer.stop() } }
IncomingCallAlertLayout(
invitation,
@@ -85,7 +88,8 @@ fun IncomingCallInfo(invitation: RcvCallInvitation, chatModel: ChatModel) {
private fun CallButton(text: String, icon: Painter, color: Color, action: () -> Unit) {
Surface(
shape = RoundedCornerShape(10.dp),
color = Color.Transparent
color = Color.Transparent,
contentColor = LocalContentColor.current
) {
Column(
Modifier

View File

@@ -112,6 +112,9 @@ sealed class WCallResponse {
CallMediaType.Video -> MR.strings.incoming_video_call
CallMediaType.Audio -> MR.strings.incoming_audio_call
})
// Shows whether notification was shown or not to prevent playing sound twice in both notification and in-app
var sentNotification: Boolean = false
}
@Serializable data class CallCapabilities(val encryption: Boolean)
@Serializable data class ConnectionInfo(private val localCandidate: RTCIceCandidate?, private val remoteCandidate: RTCIceCandidate?) {

View File

@@ -69,11 +69,9 @@ fun ChatInfoView(
currentUser,
sendReceipts = sendReceipts,
setSendReceipts = { sendRcpts ->
withApi {
val chatSettings = (chat.chatInfo.chatSettings ?: ChatSettings.defaults).copy(sendRcpts = sendRcpts.bool)
updateChatSettings(chat, chatSettings, chatModel)
sendReceipts.value = sendRcpts
}
val chatSettings = (chat.chatInfo.chatSettings ?: ChatSettings.defaults).copy(sendRcpts = sendRcpts.bool)
updateChatSettings(chat, chatSettings, chatModel)
sendReceipts.value = sendRcpts
},
connStats = connStats,
contactNetworkStatus.value,
@@ -96,7 +94,7 @@ fun ChatInfoView(
clearChat = { clearChatDialog(chat, chatModel, close) },
switchContactAddress = {
showSwitchAddressAlert(switchAddress = {
withApi {
withBGApi {
val cStats = chatModel.controller.apiSwitchContact(chatRh, contact.contactId)
connStats.value = cStats
if (cStats != null) {
@@ -108,7 +106,7 @@ fun ChatInfoView(
},
abortSwitchContactAddress = {
showAbortSwitchAddressAlert(abortSwitchAddress = {
withApi {
withBGApi {
val cStats = chatModel.controller.apiAbortSwitchContact(chatRh, contact.contactId)
connStats.value = cStats
if (cStats != null) {
@@ -118,7 +116,7 @@ fun ChatInfoView(
})
},
syncContactConnection = {
withApi {
withBGApi {
val cStats = chatModel.controller.apiSyncContactRatchet(chatRh, contact.contactId, force = false)
connStats.value = cStats
if (cStats != null) {
@@ -129,7 +127,7 @@ fun ChatInfoView(
},
syncContactConnectionForce = {
showSyncConnectionForceAlert(syncConnectionForce = {
withApi {
withBGApi {
val cStats = chatModel.controller.apiSyncContactRatchet(chatRh, contact.contactId, force = true)
connStats.value = cStats
if (cStats != null) {
@@ -208,18 +206,14 @@ fun deleteContactDialog(chat: Chat, chatModel: ChatModel, close: (() -> Unit)? =
// Delete and notify contact
SectionItemView({
AlertManager.shared.hideAlert()
withApi {
deleteContact(chat, chatModel, close, notify = true)
}
deleteContact(chat, chatModel, close, notify = true)
}) {
Text(generalGetString(MR.strings.delete_and_notify_contact), Modifier.fillMaxWidth(), textAlign = TextAlign.Center, color = MaterialTheme.colors.error)
}
// Delete
SectionItemView({
AlertManager.shared.hideAlert()
withApi {
deleteContact(chat, chatModel, close, notify = false)
}
deleteContact(chat, chatModel, close, notify = false)
}) {
Text(generalGetString(MR.strings.delete_verb), Modifier.fillMaxWidth(), textAlign = TextAlign.Center, color = MaterialTheme.colors.error)
}
@@ -227,9 +221,7 @@ fun deleteContactDialog(chat: Chat, chatModel: ChatModel, close: (() -> Unit)? =
// Delete
SectionItemView({
AlertManager.shared.hideAlert()
withApi {
deleteContact(chat, chatModel, close)
}
deleteContact(chat, chatModel, close)
}) {
Text(generalGetString(MR.strings.delete_verb), Modifier.fillMaxWidth(), textAlign = TextAlign.Center, color = MaterialTheme.colors.error)
}
@@ -247,7 +239,7 @@ fun deleteContactDialog(chat: Chat, chatModel: ChatModel, close: (() -> Unit)? =
fun deleteContact(chat: Chat, chatModel: ChatModel, close: (() -> Unit)?, notify: Boolean? = null) {
val chatInfo = chat.chatInfo
withApi {
withBGApi {
val chatRh = chat.remoteHostId
val r = chatModel.controller.apiDeleteChat(chatRh, chatInfo.chatType, chatInfo.apiId, notify)
if (r) {
@@ -269,7 +261,7 @@ fun clearChatDialog(chat: Chat, chatModel: ChatModel, close: (() -> Unit)? = nul
text = generalGetString(MR.strings.clear_chat_warning),
confirmText = generalGetString(MR.strings.clear_verb),
onConfirm = {
withApi {
withBGApi {
val chatRh = chat.remoteHostId
val updatedChatInfo = chatModel.controller.apiClearChat(chatRh, chatInfo.chatType, chatInfo.apiId)
if (updatedChatInfo != null) {
@@ -676,7 +668,7 @@ fun ShareAddressButton(onClick: () -> Unit) {
)
}
private fun setContactAlias(chat: Chat, localAlias: String, chatModel: ChatModel) = withApi {
private fun setContactAlias(chat: Chat, localAlias: String, chatModel: ChatModel) = withBGApi {
val chatRh = chat.remoteHostId
chatModel.controller.apiSetContactAlias(chatRh, chat.chatInfo.apiId, localAlias)?.let {
chatModel.updateContact(chatRh, it)

View File

@@ -24,6 +24,7 @@ import androidx.compose.ui.graphics.ImageBitmap
import androidx.compose.ui.text.*
import androidx.compose.ui.unit.*
import chat.simplex.common.model.*
import chat.simplex.common.model.ChatModel.controller
import chat.simplex.common.ui.theme.*
import chat.simplex.common.views.call.*
import chat.simplex.common.views.chat.group.*
@@ -163,7 +164,7 @@ fun ChatView(chatId: String, chatModel: ChatModel, onComposed: suspend (chatId:
return@ChatLayout
}
hideKeyboard(view)
withApi {
withBGApi {
// The idea is to preload information before showing a modal because large groups can take time to load all members
var preloadedContactInfo: Pair<ConnectionStats?, Profile?>? = null
var preloadedCode: String? = null
@@ -204,7 +205,7 @@ fun ChatView(chatId: String, chatModel: ChatModel, onComposed: suspend (chatId:
},
showMemberInfo = { groupInfo: GroupInfo, member: GroupMember ->
hideKeyboard(view)
withApi {
withBGApi {
val r = chatModel.controller.apiGroupMemberInfo(chatRh, groupInfo.groupId, member.groupMemberId)
val stats = r?.second
val (_, code) = if (member.memberActive) {
@@ -227,7 +228,7 @@ fun ChatView(chatId: String, chatModel: ChatModel, onComposed: suspend (chatId:
val c = chatModel.getChat(chatModel.chatId.value ?: return@ChatLayout)
val firstId = chatModel.chatItems.firstOrNull()?.id
if (c != null && firstId != null) {
withApi {
withBGApi {
Log.d(TAG, "TODOCHAT: loadPrevMessages: loading for ${c.id}, current chatId ${ChatModel.chatId.value}, size was ${ChatModel.chatItems.size}")
apiLoadPrevMessages(c, chatModel, firstId, searchText.value)
Log.d(TAG, "TODOCHAT: loadPrevMessages: loaded for ${c.id}, current chatId ${ChatModel.chatId.value}, size now ${ChatModel.chatItems.size}")
@@ -235,7 +236,7 @@ fun ChatView(chatId: String, chatModel: ChatModel, onComposed: suspend (chatId:
}
},
deleteMessage = { itemId, mode ->
withApi {
withBGApi {
val cInfo = chat.chatInfo
val toDeleteItem = chatModel.chatItems.firstOrNull { it.id == itemId }
val toModerate = toDeleteItem?.memberToModerate(chat.chatInfo)
@@ -290,13 +291,13 @@ fun ChatView(chatId: String, chatModel: ChatModel, onComposed: suspend (chatId:
}
},
receiveFile = { fileId, encrypted ->
withApi { chatModel.controller.receiveFile(chatRh, user, fileId, encrypted) }
withBGApi { chatModel.controller.receiveFile(chatRh, user, fileId, encrypted) }
},
cancelFile = { fileId ->
withApi { chatModel.controller.cancelFile(chatRh, user, fileId) }
withBGApi { chatModel.controller.cancelFile(chatRh, user, fileId) }
},
joinGroup = { groupId, onComplete ->
withApi {
withBGApi {
chatModel.controller.apiJoinGroup(chatRh, groupId)
onComplete.invoke()
}
@@ -313,29 +314,32 @@ fun ChatView(chatId: String, chatModel: ChatModel, onComposed: suspend (chatId:
},
endCall = {
val call = chatModel.activeCall.value
if (call != null) withApi { chatModel.callManager.endCall(call) }
if (call != null) withBGApi { chatModel.callManager.endCall(call) }
},
acceptCall = { contact ->
hideKeyboard(view)
val invitation = chatModel.callInvitations.remove(contact.id)
if (invitation == null) {
AlertManager.shared.showAlertMsg(generalGetString(MR.strings.call_already_ended))
} else {
chatModel.callManager.acceptIncomingCall(invitation = invitation)
withBGApi {
val invitation = chatModel.callInvitations.remove(contact.id)
?: controller.apiGetCallInvitations(chatModel.remoteHostId()).firstOrNull { it.contact.id == contact.id }
if (invitation == null) {
AlertManager.shared.showAlertMsg(generalGetString(MR.strings.call_already_ended))
} else {
chatModel.callManager.acceptIncomingCall(invitation = invitation)
}
}
},
acceptFeature = { contact, feature, param ->
withApi {
withBGApi {
chatModel.controller.allowFeatureToContact(chatRh, contact, feature, param)
}
},
openDirectChat = { contactId ->
withApi {
withBGApi {
openDirectChat(chatRh, contactId, chatModel)
}
},
updateContactStats = { contact ->
withApi {
withBGApi {
val r = chatModel.controller.apiContactInfo(chatRh, chat.chatInfo.apiId)
if (r != null) {
val contactStats = r.first
@@ -345,7 +349,7 @@ fun ChatView(chatId: String, chatModel: ChatModel, onComposed: suspend (chatId:
}
},
updateMemberStats = { groupInfo, member ->
withApi {
withBGApi {
val r = chatModel.controller.apiGroupMemberInfo(chatRh, groupInfo.groupId, member.groupMemberId)
if (r != null) {
val memStats = r.second
@@ -356,7 +360,7 @@ fun ChatView(chatId: String, chatModel: ChatModel, onComposed: suspend (chatId:
}
},
syncContactConnection = { contact ->
withApi {
withBGApi {
val cStats = chatModel.controller.apiSyncContactRatchet(chatRh, contact.contactId, force = false)
if (cStats != null) {
chatModel.updateContactConnectionStats(chatRh, contact, cStats)
@@ -364,7 +368,7 @@ fun ChatView(chatId: String, chatModel: ChatModel, onComposed: suspend (chatId:
}
},
syncMemberConnection = { groupInfo, member ->
withApi {
withBGApi {
val r = chatModel.controller.apiSyncGroupMemberRatchet(chatRh, groupInfo.apiId, member.groupMemberId, force = false)
if (r != null) {
chatModel.updateGroupMemberConnectionStats(chatRh, groupInfo, r.first, r.second)
@@ -378,7 +382,7 @@ fun ChatView(chatId: String, chatModel: ChatModel, onComposed: suspend (chatId:
chatModel.groupMembers.find { it.id == memberId }
},
setReaction = { cInfo, cItem, add, reaction ->
withApi {
withBGApi {
val updatedCI = chatModel.controller.apiChatItemReaction(
rh = chatRh,
type = cInfo.chatType,
@@ -393,7 +397,7 @@ fun ChatView(chatId: String, chatModel: ChatModel, onComposed: suspend (chatId:
}
},
showItemDetails = { cInfo, cItem ->
withApi {
withBGApi {
val ciInfo = chatModel.controller.apiGetChatItemInfo(chatRh, cInfo.chatType, cInfo.apiId, cItem.id)
if (ciInfo != null) {
if (chat.chatInfo is ChatInfo.Group) {
@@ -412,7 +416,7 @@ fun ChatView(chatId: String, chatModel: ChatModel, onComposed: suspend (chatId:
},
addMembers = { groupInfo ->
hideKeyboard(view)
withApi {
withBGApi {
setGroupMembers(chatRh, groupInfo, chatModel)
ModalManager.end.closeModals()
ModalManager.end.showModalCloseable(true) { close ->
@@ -422,7 +426,7 @@ fun ChatView(chatId: String, chatModel: ChatModel, onComposed: suspend (chatId:
},
openGroupLink = { groupInfo ->
hideKeyboard(view)
withApi {
withBGApi {
val link = chatModel.controller.apiGetGroupLink(chatRh, groupInfo.groupId)
ModalManager.end.closeModals()
ModalManager.end.showModalCloseable(true) {
@@ -447,7 +451,7 @@ fun ChatView(chatId: String, chatModel: ChatModel, onComposed: suspend (chatId:
if (searchText.value == value) return@ChatLayout
if (chatModel.chatId.value != activeChat.value?.id) return@ChatLayout
val c = chatModel.getChat(chatModel.chatId.value ?: return@ChatLayout) ?: return@ChatLayout
withApi {
withBGApi {
apiFindMessages(c, chatModel, value)
searchText.value = value
}
@@ -570,6 +574,8 @@ fun ChatLayout(
bottomBar = composeView,
modifier = Modifier.navigationBarsWithImePadding(),
floatingActionButton = { floatingButton.value() },
contentColor = LocalContentColor.current,
drawerContentColor = LocalContentColor.current,
) { contentPadding ->
BoxWithConstraints(Modifier
.fillMaxHeight()

View File

@@ -267,7 +267,7 @@ fun ComposeView(
fun loadLinkPreview(url: String, wait: Long? = null) {
if (pendingLinkUrl.value == url) {
composeState.value = composeState.value.copy(preview = ComposePreview.CLinkPreview(null))
withApi {
withBGApi {
if (wait != null) delay(wait)
val lp = getLinkPreview(url)
if (lp != null && pendingLinkUrl.value == url) {
@@ -575,7 +575,7 @@ fun ComposeView(
fun allowVoiceToContact() {
val contact = (chat.chatInfo as ChatInfo.Direct?)?.contact ?: return
withApi {
withBGApi {
chatModel.controller.allowFeatureToContact(chat.remoteHostId, contact, ChatFeature.Voice)
}
}

View File

@@ -35,7 +35,7 @@ fun ContactPreferencesView(
var currentFeaturesAllowed by rememberSaveable(ct, stateSaver = serializableSaver()) { mutableStateOf(featuresAllowed) }
fun savePrefs(afterSave: () -> Unit = {}) {
withApi {
withBGApi {
val prefs = contactFeaturesAllowedToPrefs(featuresAllowed)
val toContact = m.controller.apiSetContactPrefs(rhId, ct.contactId, prefs)
if (toContact != null) {

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