Compare commits
109 Commits
v5.1.0
...
ep/rfc-use
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
0366afbcce | ||
|
|
4c33ed92bb | ||
|
|
a0ae4125c5 | ||
|
|
34a60066fb | ||
|
|
1f50e94bc9 | ||
|
|
0e4376bada | ||
|
|
b0ad94fe7f | ||
|
|
fccd4f7ec4 | ||
|
|
3f93397031 | ||
|
|
a5f8641d50 | ||
|
|
f23c0b55f8 | ||
|
|
534151f1bb | ||
|
|
2ad9d0ddbc | ||
|
|
388bdc7083 | ||
|
|
3e370a7c16 | ||
|
|
77b3870654 | ||
|
|
b088b1c44c | ||
|
|
8abad4f711 | ||
|
|
4c668f7a34 | ||
|
|
0bf5fbd641 | ||
|
|
cfec60bf86 | ||
|
|
9caaab0e8e | ||
|
|
6da18d9b2a | ||
|
|
da2622f00e | ||
|
|
7ed581dfbf | ||
|
|
78c0fe73a7 | ||
|
|
15b00f6110 | ||
|
|
f592a26b00 | ||
|
|
30687f5fa6 | ||
|
|
bc7217d686 | ||
|
|
8e0b3fa32e | ||
|
|
d929c34e71 | ||
|
|
ec7bff9205 | ||
|
|
22f20a9c5f | ||
|
|
ddf81d28f1 | ||
|
|
5c105cb746 | ||
|
|
e1370e8f3c | ||
|
|
9fbcc2b5bb | ||
|
|
53d77b25ed | ||
|
|
e7089d4c2f | ||
|
|
6d3cb0ea2e | ||
|
|
46c6f5e615 | ||
|
|
c29c3179a0 | ||
|
|
3e84429a3a | ||
|
|
904b6db628 | ||
|
|
af4e94058a | ||
|
|
91b77b6d63 | ||
|
|
5a0c7c34bf | ||
|
|
3267b4d6ca | ||
|
|
9b302b856a | ||
|
|
4e696aed82 | ||
|
|
425c7b947f | ||
|
|
d4f9429fc1 | ||
|
|
161b43e85d | ||
|
|
d585e8f5a7 | ||
|
|
060e7cdf52 | ||
|
|
6fa002948e | ||
|
|
bbd4e6c8ba | ||
|
|
92cf945e10 | ||
|
|
cc0f55c245 | ||
|
|
22f27c4255 | ||
|
|
14a888bf43 | ||
|
|
f6fddc9436 | ||
|
|
f581e91f19 | ||
|
|
fb72dfcdee | ||
|
|
925813b14c | ||
|
|
abd410fe62 | ||
|
|
875282e9ec | ||
|
|
6afda28367 | ||
|
|
0721b24250 | ||
|
|
10b6bce8a2 | ||
|
|
0101444c5d | ||
|
|
128883b8a3 | ||
|
|
cc75b75d4e | ||
|
|
dea6cd81c7 | ||
|
|
2f53ab08b5 | ||
|
|
d7f3d1f19d | ||
|
|
a4517fcb9b | ||
|
|
4a12cf0922 | ||
|
|
0ee91b0280 | ||
|
|
e131890f54 | ||
|
|
bd069aea49 | ||
|
|
42d4f94fec | ||
|
|
3af2848275 | ||
|
|
8b1e5d3db7 | ||
|
|
57ed903a48 | ||
|
|
6093219ce9 | ||
|
|
f9f34911b1 | ||
|
|
494328541a | ||
|
|
fd2c7c888c | ||
|
|
24c09f2041 | ||
|
|
a1e6d90e31 | ||
|
|
de33fedea4 | ||
|
|
9f89104f94 | ||
|
|
f0e88220c6 | ||
|
|
6d7e16d6e1 | ||
|
|
d7d38fddb8 | ||
|
|
527a5bc6b5 | ||
|
|
9644dcb9b4 | ||
|
|
f4861482f1 | ||
|
|
dc73bb3caf | ||
|
|
bcbfc1758e | ||
|
|
e65dcf51b0 | ||
|
|
1326701440 | ||
|
|
c32e45f686 | ||
|
|
0160684004 | ||
|
|
734b920fde | ||
|
|
174e703b4c | ||
|
|
36336a3a57 |
2
.github/ISSUE_TEMPLATE/bug.yml
vendored
2
.github/ISSUE_TEMPLATE/bug.yml
vendored
@@ -1,7 +1,7 @@
|
||||
name: Bug
|
||||
description: File a bug report/issue
|
||||
title: "[Bug]: "
|
||||
labels: ["type:bug", "type:triage"]
|
||||
labels: ["bug", "triage"]
|
||||
body:
|
||||
- type: checkboxes
|
||||
attributes:
|
||||
|
||||
2
.github/ISSUE_TEMPLATE/feature.yml
vendored
2
.github/ISSUE_TEMPLATE/feature.yml
vendored
@@ -1,7 +1,7 @@
|
||||
name: Feature
|
||||
description: Suggest your feature
|
||||
title: "[Feature]: "
|
||||
labels: ["type:enhancement", "type:triage"]
|
||||
labels: ["enhancement", "triage"]
|
||||
body:
|
||||
- type: checkboxes
|
||||
attributes:
|
||||
|
||||
2
.github/ISSUE_TEMPLATE/question.yml
vendored
2
.github/ISSUE_TEMPLATE/question.yml
vendored
@@ -1,7 +1,7 @@
|
||||
name: Question
|
||||
description: Ask your question
|
||||
title: "[Q]: "
|
||||
labels: ["type:question", "type:triage"]
|
||||
labels: ["question", "triage"]
|
||||
body:
|
||||
- type: markdown
|
||||
attributes:
|
||||
|
||||
22
.github/workflows/build.yml
vendored
22
.github/workflows/build.yml
vendored
@@ -16,11 +16,11 @@ jobs:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Clone project
|
||||
uses: actions/checkout@v2
|
||||
uses: actions/checkout@v3
|
||||
|
||||
- name: Build changelog
|
||||
id: build_changelog
|
||||
uses: mikepenz/release-changelog-builder-action@v1
|
||||
uses: mikepenz/release-changelog-builder-action@v4
|
||||
with:
|
||||
configuration: .github/changelog_conf.json
|
||||
failOnError: true
|
||||
@@ -71,16 +71,16 @@ jobs:
|
||||
disk-root: "C:"
|
||||
|
||||
- name: Clone project
|
||||
uses: actions/checkout@v2
|
||||
uses: actions/checkout@v3
|
||||
|
||||
- name: Setup Haskell
|
||||
uses: haskell/actions/setup@v1
|
||||
uses: haskell/actions/setup@v2
|
||||
with:
|
||||
ghc-version: "8.10.7"
|
||||
cabal-version: "latest"
|
||||
|
||||
- name: Cache dependencies
|
||||
uses: actions/cache@v2
|
||||
uses: actions/cache@v3
|
||||
with:
|
||||
path: |
|
||||
${{ matrix.cache_path }}
|
||||
@@ -119,12 +119,6 @@ jobs:
|
||||
cabal build --enable-tests
|
||||
echo "::set-output name=bin_path::$(cabal list-bin simplex-chat)"
|
||||
|
||||
- name: Unix test
|
||||
if: matrix.os != 'windows-latest'
|
||||
timeout-minutes: 30
|
||||
shell: bash
|
||||
run: cabal test --test-show-details=direct
|
||||
|
||||
- name: Unix upload binary to release
|
||||
if: startsWith(github.ref, 'refs/tags/v') && matrix.os != 'windows-latest'
|
||||
uses: svenstaro/upload-release-action@v2
|
||||
@@ -134,6 +128,12 @@ jobs:
|
||||
asset_name: ${{ matrix.asset_name }}
|
||||
tag: ${{ github.ref }}
|
||||
|
||||
- name: Unix test
|
||||
if: matrix.os != 'windows-latest'
|
||||
timeout-minutes: 30
|
||||
shell: bash
|
||||
run: cabal test --test-show-details=direct
|
||||
|
||||
# Unix /
|
||||
|
||||
# / Windows
|
||||
|
||||
2
.github/workflows/web.yml
vendored
2
.github/workflows/web.yml
vendored
@@ -17,7 +17,7 @@ jobs:
|
||||
|
||||
strategy:
|
||||
matrix:
|
||||
node-version: [12.x]
|
||||
node-version: [16.x]
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
|
||||
48
README.md
48
README.md
@@ -64,11 +64,18 @@ You must:
|
||||
|
||||
Messages not following these rules will be deleted, the right to send messages may be revoked, and the access to the new members to the group may be temporarily restricted, to prevent re-joining under a different name - our imperfect group moderation does not have a better solution at the moment.
|
||||
|
||||
You can join an English-speaking users group if you want to ask any questions: [#SimpleX-Group-3](https://simplex.chat/contact#/?v=1-2&smp=smp%3A%2F%2FPQUV2eL0t7OStZOoAsPEV2QYWt4-xilbakvGUGOItUo%3D%40smp6.simplex.im%2Fp-j-D_PrY2UMDchFHEUtbSES0nmzCnvD%23%2F%3Fv%3D1-2%26dh%3DMCowBQYDK2VuAyEA3gBfMjB_GDEmKQwjNdqGbnX91yfuZ7nRJgQijsx5Khc%253D%26srv%3Dbylepyau3ty4czmn77q4fglvperknl4bi2eb2fdy2bh4jxtf32kf73yd.onion&data=%7B%22type%22%3A%22group%22%2C%22groupLinkId%22%3A%2262MvNZ_Ec2mmlS8V0QNtLQ%3D%3D%22%7D)
|
||||
You can join an English-speaking users group if you want to ask any questions: [#SimpleX-Group-4](https://simplex.chat/contact#/?v=1-2&smp=smp%3A%2F%2Fu2dS9sG8nMNURyZwqASV4yROM28Er0luVTx5X1CsMrU%3D%40smp4.simplex.im%2Fw2GlucRXtRVgYnbt_9ZP-kmt76DekxxS%23%2F%3Fv%3D1-2%26dh%3DMCowBQYDK2VuAyEA0tJhTyMGUxznwmjb7aT24P1I1Wry_iURTuhOFlMb1Eo%253D%26srv%3Do5vmywmrnaxalvz6wi3zicyftgio6psuvyniis6gco6bp6ekl4cqj4id.onion&data=%7B%22type%22%3A%22group%22%2C%22groupLinkId%22%3A%22WoPxjFqGEDlVazECOSi2dg%3D%3D%22%7D)
|
||||
|
||||
There is also a group [#simplex-devs](https://simplex.chat/contact#/?v=1-2&smp=smp%3A%2F%2Fu2dS9sG8nMNURyZwqASV4yROM28Er0luVTx5X1CsMrU%3D%40smp4.simplex.im%2F6eHqy7uAbZPOcA6qBtrQgQquVlt4Ll91%23%2F%3Fv%3D1-2%26dh%3DMCowBQYDK2VuAyEAqV_pg3FF00L98aCXp4D3bOs4Sxv_UmSd-gb0juVoQVs%253D%26srv%3Do5vmywmrnaxalvz6wi3zicyftgio6psuvyniis6gco6bp6ekl4cqj4id.onion&data=%7B%22type%22%3A%22group%22%2C%22groupLinkId%22%3A%22XonlixcHBIb2ijCehbZoiw%3D%3D%22%7D) for developers who build on SimpleX platform:
|
||||
|
||||
- chat bots and automations
|
||||
- integrations with other apps
|
||||
- social apps and services
|
||||
- etc.
|
||||
|
||||
There are groups in other languages, that we have the apps interface translated into. These groups are for testing, and asking questions to other SimpleX Chat users:
|
||||
|
||||
[\#SimpleX-DE](https://simplex.chat/contact#/?v=1-2&smp=smp%3A%2F%2FPQUV2eL0t7OStZOoAsPEV2QYWt4-xilbakvGUGOItUo%3D%40smp6.simplex.im%2FkIEl7OQzcp-J6aDmjdlQbRJwqkcZE7XR%23%2F%3Fv%3D1-2%26dh%3DMCowBQYDK2VuAyEAR16PCu02MobRmKAsjzhDWMZcWP9hS8l5AUZi-Gs8z18%253D%26srv%3Dbylepyau3ty4czmn77q4fglvperknl4bi2eb2fdy2bh4jxtf32kf73yd.onion&data=%7B%22type%22%3A%22group%22%2C%22groupLinkId%22%3A%22puYPMCQt11yPUvgmI5jCiw%3D%3D%22%7D) (German-speaking), [\#SimpleX-FR](https://simplex.chat/contact#/?v=1-2&smp=smp%3A%2F%2Fhpq7_4gGJiilmz5Rf-CswuU5kZGkm_zOIooSw6yALRg%3D%40smp5.simplex.im%2FvIHQDxTor53nwnWWTy5cHNwQQAdWN5Hw%23%2F%3Fv%3D1-2%26dh%3DMCowBQYDK2VuAyEAPdgK1eBnETmgiqEQufbUkydKBJafoRx4iRrtrC2NAGc%253D%26srv%3Djjbyvoemxysm7qxap7m5d5m35jzv5qq6gnlv7s4rsn7tdwwmuqciwpid.onion&data=%7B%22type%22%3A%22group%22%2C%22groupLinkId%22%3A%221FyUryBPza-1ZFFE80Ekbg%3D%3D%22%7D) (French-speaking), [\#SimpleX-RU](https://simplex.chat/contact#/?v=1-2&smp=smp%3A%2F%2FPQUV2eL0t7OStZOoAsPEV2QYWt4-xilbakvGUGOItUo%3D%40smp6.simplex.im%2FXZyt3hJmWsycpN7Dqve_wbrAqb6myk1R%23%2F%3Fv%3D1-2%26dh%3DMCowBQYDK2VuAyEAMFVIoytozTEa_QXOgoZFq_oe0IwZBYKvW50trSFXzXo%253D%26srv%3Dbylepyau3ty4czmn77q4fglvperknl4bi2eb2fdy2bh4jxtf32kf73yd.onion&data=%7B%22type%22%3A%22group%22%2C%22groupLinkId%22%3A%22xz05ngjA3pNIxLZ32a8Vxg%3D%3D%22%7D) (Russian-speaking), [\#SimpleX-IT](https://simplex.chat/contact#/?v=1-2&smp=smp%3A%2F%2Fu2dS9sG8nMNURyZwqASV4yROM28Er0luVTx5X1CsMrU%3D%40smp4.simplex.im%2F0weR-ZgDUl7ruOtI_8TZwEsnJP6UiImA%23%2F%3Fv%3D1-2%26dh%3DMCowBQYDK2VuAyEAq4PSThO9Fvb5ydF48wB0yNbpzCbuQJCW3vZ9BGUfcxk%253D%26srv%3Do5vmywmrnaxalvz6wi3zicyftgio6psuvyniis6gco6bp6ekl4cqj4id.onion&data=%7B%22type%22%3A%22group%22%2C%22groupLinkId%22%3A%22e-iceLA0SctC62eARgYDWg%3D%3D%22%7D) (Italian-speaking).
|
||||
[\#SimpleX-DE](https://simplex.chat/contact#/?v=1-2&smp=smp%3A%2F%2FPQUV2eL0t7OStZOoAsPEV2QYWt4-xilbakvGUGOItUo%3D%40smp6.simplex.im%2FkIEl7OQzcp-J6aDmjdlQbRJwqkcZE7XR%23%2F%3Fv%3D1-2%26dh%3DMCowBQYDK2VuAyEAR16PCu02MobRmKAsjzhDWMZcWP9hS8l5AUZi-Gs8z18%253D%26srv%3Dbylepyau3ty4czmn77q4fglvperknl4bi2eb2fdy2bh4jxtf32kf73yd.onion&data=%7B%22type%22%3A%22group%22%2C%22groupLinkId%22%3A%22puYPMCQt11yPUvgmI5jCiw%3D%3D%22%7D) (German-speaking), [\#SimpleX-ES](https://simplex.chat/contact#/?v=1-2&smp=smp%3A%2F%2FPQUV2eL0t7OStZOoAsPEV2QYWt4-xilbakvGUGOItUo%3D%40smp6.simplex.im%2FaJ8O1O8A8GbeoaHTo_V8dcefaCl7ouPb%23%2F%3Fv%3D1-2%26dh%3DMCowBQYDK2VuAyEA034qWTA3sWcTsi6aWhNf9BA34vKVCFaEBdP2R66z6Ao%253D%26srv%3Dbylepyau3ty4czmn77q4fglvperknl4bi2eb2fdy2bh4jxtf32kf73yd.onion&data=%7B%22type%22%3A%22group%22%2C%22groupLinkId%22%3A%22wiZ1v_wNjLPlT-nCSB-bRA%3D%3D%22%7D) (Spanish-speaking), [\#SimpleX-FR](https://simplex.chat/contact#/?v=1-2&smp=smp%3A%2F%2Fhpq7_4gGJiilmz5Rf-CswuU5kZGkm_zOIooSw6yALRg%3D%40smp5.simplex.im%2FvIHQDxTor53nwnWWTy5cHNwQQAdWN5Hw%23%2F%3Fv%3D1-2%26dh%3DMCowBQYDK2VuAyEAPdgK1eBnETmgiqEQufbUkydKBJafoRx4iRrtrC2NAGc%253D%26srv%3Djjbyvoemxysm7qxap7m5d5m35jzv5qq6gnlv7s4rsn7tdwwmuqciwpid.onion&data=%7B%22type%22%3A%22group%22%2C%22groupLinkId%22%3A%221FyUryBPza-1ZFFE80Ekbg%3D%3D%22%7D) (French-speaking), [\#SimpleX-RU](https://simplex.chat/contact#/?v=1-2&smp=smp%3A%2F%2FPQUV2eL0t7OStZOoAsPEV2QYWt4-xilbakvGUGOItUo%3D%40smp6.simplex.im%2FXZyt3hJmWsycpN7Dqve_wbrAqb6myk1R%23%2F%3Fv%3D1-2%26dh%3DMCowBQYDK2VuAyEAMFVIoytozTEa_QXOgoZFq_oe0IwZBYKvW50trSFXzXo%253D%26srv%3Dbylepyau3ty4czmn77q4fglvperknl4bi2eb2fdy2bh4jxtf32kf73yd.onion&data=%7B%22type%22%3A%22group%22%2C%22groupLinkId%22%3A%22xz05ngjA3pNIxLZ32a8Vxg%3D%3D%22%7D) (Russian-speaking), [\#SimpleX-IT](https://simplex.chat/contact#/?v=1-2&smp=smp%3A%2F%2Fu2dS9sG8nMNURyZwqASV4yROM28Er0luVTx5X1CsMrU%3D%40smp4.simplex.im%2F0weR-ZgDUl7ruOtI_8TZwEsnJP6UiImA%23%2F%3Fv%3D1-2%26dh%3DMCowBQYDK2VuAyEAq4PSThO9Fvb5ydF48wB0yNbpzCbuQJCW3vZ9BGUfcxk%253D%26srv%3Do5vmywmrnaxalvz6wi3zicyftgio6psuvyniis6gco6bp6ekl4cqj4id.onion&data=%7B%22type%22%3A%22group%22%2C%22groupLinkId%22%3A%22e-iceLA0SctC62eARgYDWg%3D%3D%22%7D) (Italian-speaking).
|
||||
|
||||
You can join either by opening these links in the app or by opening them in a desktop browser and scanning the QR code.
|
||||
|
||||
@@ -101,8 +108,10 @@ Join our translators to help SimpleX grow!
|
||||
|🇪🇸 es|Español |[Mateyhv](https://github.com/Mateyhv)|[](https://hosted.weblate.org/projects/simplex-chat/android/es/)<br>[](https://hosted.weblate.org/projects/simplex-chat/ios/es/)|[](https://hosted.weblate.org/projects/simplex-chat/website/es/)||
|
||||
|🇫🇷 fr|Français |[ishi_sama](https://github.com/ishi-sama)|[](https://hosted.weblate.org/projects/simplex-chat/android/fr/)<br>[](https://hosted.weblate.org/projects/simplex-chat/ios/fr/)|[](https://hosted.weblate.org/projects/simplex-chat/website/fr/)|[✓](https://github.com/simplex-chat/simplex-chat/tree/master/docs/lang/fr)|
|
||||
|🇮🇹 it|Italiano |[unbranched](https://github.com/unbranched)|[](https://hosted.weblate.org/projects/simplex-chat/android/it/)<br>[](https://hosted.weblate.org/projects/simplex-chat/ios/it/)|[](https://hosted.weblate.org/projects/simplex-chat/website/it/)||
|
||||
|🇯🇵 ja|Japanese ||[](https://hosted.weblate.org/projects/simplex-chat/android/ja/)<br>[](https://hosted.weblate.org/projects/simplex-chat/ios/ja/)|||
|
||||
|🇳🇱 nl|Nederlands|[mika-nl](https://github.com/mika-nl)|[](https://hosted.weblate.org/projects/simplex-chat/android/nl/)<br>[](https://hosted.weblate.org/projects/simplex-chat/ios/nl/)|[](https://hosted.weblate.org/projects/simplex-chat/website/nl/)||
|
||||
|🇵🇱 pl|Polski |[BxOxSxS](https://github.com/BxOxSxS)|[](https://hosted.weblate.org/projects/simplex-chat/android/ru/)<br>[](https://hosted.weblate.org/projects/simplex-chat/ios/pl/)|||
|
||||
|🇧🇷 pt-BR|Português||[](https://hosted.weblate.org/projects/simplex-chat/android/pt_BR/)<br>-|[](https://hosted.weblate.org/projects/simplex-chat/website/pt_BR/)||
|
||||
|🇷🇺 ru|Русский ||[](https://hosted.weblate.org/projects/simplex-chat/android/ru/)<br>[](https://hosted.weblate.org/projects/simplex-chat/ios/ru/)|||
|
||||
|🇨🇳 zh-CHS|简体中文|[sith-on-mars](https://github.com/sith-on-mars)<br><br>[Float-hu](https://github.com/Float-hu)|[](https://hosted.weblate.org/projects/simplex-chat/android/zh_Hans/)<br>[](https://hosted.weblate.org/projects/simplex-chat/ios/zh_Hans/)<br> |<br><br>[](https://hosted.weblate.org/projects/simplex-chat/website/zh_Hans/)||
|
||||
|
||||
@@ -112,6 +121,7 @@ Languages in progress: Arabic, Japanese, Korean, Portuguese and [others](https:/
|
||||
|
||||
We would love to have you join the development! You can help us with:
|
||||
|
||||
- [share the color theme](./docs/THEMES.md) you use in Android app!
|
||||
- writing a tutorial or recipes about hosting servers, chat bot automations, etc.
|
||||
- contributing to SimpleX Chat knowledge-base.
|
||||
- developing features - please connect to us via chat so we can help you get started.
|
||||
@@ -197,6 +207,8 @@ You can use SimpleX with your own servers and still communicate with people usin
|
||||
|
||||
Recent updates:
|
||||
|
||||
[May 23, 2023. SimpleX Chat: v5.1 released with message reactions and self-destruct passcode](./blog/20230523-simplex-chat-v5-1-message-reactions-self-destruct-passcode.md).
|
||||
|
||||
[Apr 22, 2023. SimpleX Chat: vision and funding, v5.0 released with videos and files up to 1gb](./blog/20230422-simplex-chat-vision-funding-v5-videos-files-passcode.md).
|
||||
|
||||
[Mar 28, 2023. v4.6 released - with Android 8+ and ARMv7a support, hidden profiles, community moderation, improved audio/video calls and reduced battery usage](./blog/20230328-simplex-chat-v4-6-hidden-profiles.md).
|
||||
@@ -245,13 +257,15 @@ See [SimpleX Chat Protocol](./docs/protocol/simplex-chat.md) for the format of m
|
||||
|
||||
SimpleX Chat is a work in progress – we are releasing improvements as they are ready. You have to decide if the current state is good enough for your usage scenario.
|
||||
|
||||
We compiled a [glossary of terms](./docs/GLOSSARY.md) used to describe communication systems to help understand some terms below and to help compare advantages and disadvantages of various communication systems.
|
||||
|
||||
What is already implemented:
|
||||
|
||||
1. Instead of user profile identifiers used by all other platforms, even the most private ones, SimpleX uses pairwise per-queue identifiers (2 addresses for each unidirectional message queue, with an optional 3rd address for push notifications on iOS, 2 queues in each connection between the users). It makes observing the network graph on the application level more difficult, as for `n` users there can be up to `n * (n-1)` message queues.
|
||||
2. End-to-end encryption in each message queue using [NaCl cryptobox](https://nacl.cr.yp.to/box.html). This is added to allow redundancy in the future (passing each message via several servers), to avoid having the same ciphertext in different queues (that would only be visible to the attacker if TLS is compromised). The encryption keys used for this encryption are not rotated, instead we are planning to rotate the queues. Curve25519 keys are used for key negotiation.
|
||||
3. [Double ratchet](https://signal.org/docs/specifications/doubleratchet/) end-to-end encryption in each conversation between two users (or group members). This is the same algorithm that is used in Signal and many other messaging apps; it provides OTR messaging with forward secrecy (each message is encrypted by its own ephemeral key), break-in recovery (the keys are frequently re-negotiated as part of the message exchange). Two pairs of Curve448 keys are used for the initial key agreement, initiating party passes these keys via the connection link, accepting side - in the header of the confirmation message.
|
||||
1. Instead of user profile identifiers used by all other platforms, even the most private ones, SimpleX uses [pairwise per-queue identifiers](./docs/GLOSSARY.md#pairwise-pseudonymous-identifier) (2 addresses for each unidirectional message queue, with an optional 3rd address for push notifications on iOS, 2 queues in each connection between the users). It makes observing the network graph on the application level more difficult, as for `n` users there can be up to `n * (n-1)` message queues.
|
||||
2. [End-to-end encryption](./docs/GLOSSARY.md#end-to-end-encryption) in each message queue using [NaCl cryptobox](https://nacl.cr.yp.to/box.html). This is added to allow redundancy in the future (passing each message via several servers), to avoid having the same ciphertext in different queues (that would only be visible to the attacker if TLS is compromised). The encryption keys used for this encryption are not rotated, instead we are planning to rotate the queues. Curve25519 keys are used for key negotiation.
|
||||
3. [Double ratchet](./docs/GLOSSARY.md#double-ratchet-algorithm) end-to-end encryption in each conversation between two users (or group members). This is the same algorithm that is used in Signal and many other messaging apps; it provides OTR messaging with [forward secrecy](./docs/GLOSSARY.md#forward-secrecy) (each message is encrypted by its own ephemeral key) and [break-in recovery](./docs/GLOSSARY.md#post-compromise-security) (the keys are frequently re-negotiated as part of the message exchange). Two pairs of Curve448 keys are used for the initial [key agreement](./docs/GLOSSARY.md#key-agreement-protocol), initiating party passes these keys via the connection link, accepting side - in the header of the confirmation message.
|
||||
4. Additional layer of encryption using NaCL cryptobox for the messages delivered from the server to the recipient. This layer avoids having any ciphertext in common between sent and received traffic of the server inside TLS (and there are no identifiers in common as well).
|
||||
5. Several levels of content padding to frustrate message size attacks.
|
||||
5. Several levels of [content padding](./docs/GLOSSARY.md#message-padding) to frustrate message size attacks.
|
||||
6. Starting from v2 of SMP protocol (the current version is v4) all message metadata, including the time when the message was received by the server (rounded to a second) is sent to the recipients inside an encrypted envelope, so even if TLS is compromised it cannot be observed.
|
||||
7. Only TLS 1.2/1.3 are allowed for client-server connections, limited to cryptographic algorithms: CHACHA20POLY1305_SHA256, Ed25519/Ed448, Curve25519/Curve448.
|
||||
8. To protect against replay attacks SimpleX servers require [tlsunique channel binding](https://www.rfc-editor.org/rfc/rfc5929.html) as session ID in each client command signed with per-queue ephemeral key.
|
||||
@@ -276,6 +290,8 @@ You can:
|
||||
|
||||
If you are considering developing with SimpleX platform please get in touch for any advice and support.
|
||||
|
||||
Please also join [#simplex-devs](https://simplex.chat/contact#/?v=1-2&smp=smp%3A%2F%2Fu2dS9sG8nMNURyZwqASV4yROM28Er0luVTx5X1CsMrU%3D%40smp4.simplex.im%2F6eHqy7uAbZPOcA6qBtrQgQquVlt4Ll91%23%2F%3Fv%3D1-2%26dh%3DMCowBQYDK2VuAyEAqV_pg3FF00L98aCXp4D3bOs4Sxv_UmSd-gb0juVoQVs%253D%26srv%3Do5vmywmrnaxalvz6wi3zicyftgio6psuvyniis6gco6bp6ekl4cqj4id.onion&data=%7B%22type%22%3A%22group%22%2C%22groupLinkId%22%3A%22XonlixcHBIb2ijCehbZoiw%3D%3D%22%7D) group to ask any questions and share your success stories.
|
||||
|
||||
## Roadmap
|
||||
|
||||
- ✅ Easy to deploy SimpleX server with in-memory message storage, without any dependencies.
|
||||
@@ -316,25 +332,27 @@ If you are considering developing with SimpleX platform please get in touch for
|
||||
- ✅ Sending and receiving large files via [XFTP protocol](./blog/20230301-simplex-file-transfer-protocol.md).
|
||||
- ✅ Video messages.
|
||||
- ✅ App access passcode.
|
||||
- 🏗 Improved Android app UI design.
|
||||
- 🏗 SMP queue redundancy and rotation (manual is supported).
|
||||
- 🏗 Reduced battery and traffic usage in large groups.
|
||||
- ✅ Improved Android app UI design.
|
||||
- ✅ Optional alternative access password.
|
||||
- ✅ Message reactions
|
||||
- ✅ Message editing history
|
||||
- ✅ Reduced battery and traffic usage in large groups.
|
||||
- 🏗 Desktop client.
|
||||
- 🏗 Message delivery confirmation (with sender opt-in or opt-out per contact, TBC).
|
||||
- SMP queue redundancy and rotation (manual is supported).
|
||||
- Include optional message into connection request sent via contact address.
|
||||
- Ephemeral/disappearing/OTR conversations with the existing contacts.
|
||||
- Optional alternative access password.
|
||||
- Local app files encryption.
|
||||
- Improved navigation and search in the conversation (expand and scroll to quoted message, scroll to search results, etc.).
|
||||
- Message delivery confirmation (with sender opt-in or opt-out per contact, TBC).
|
||||
- Privately share your location.
|
||||
- Large groups, communities and public channels.
|
||||
- Feeds/broadcasts.
|
||||
- Ephemeral/disappearing/OTR conversations with the existing contacts.
|
||||
- Privately share your location.
|
||||
- Web widgets for custom interactivity in the chats.
|
||||
- Programmable chat automations / rules (automatic replies/forward/deletion/sending, reminders, etc.).
|
||||
- Supporting the same profile on multiple devices.
|
||||
- Desktop client.
|
||||
- Privacy-preserving identity server for optional DNS-based contact/group addresses to simplify connection and discovery, but not used to deliver messages:
|
||||
- keep all your contacts and groups even if you lose the domain.
|
||||
- the server doesn't have information about your contacts and groups.
|
||||
- Hosting server for large groups, communities and public channels.
|
||||
- Message delivery relay for senders (to conceal IP address from the recipients' servers and to reduce the traffic).
|
||||
- High capacity multi-node SMP relays.
|
||||
|
||||
|
||||
20
apps/android/.gitignore
vendored
20
apps/android/.gitignore
vendored
@@ -1,20 +0,0 @@
|
||||
*.iml
|
||||
.gradle
|
||||
/local.properties
|
||||
/.idea/caches
|
||||
/.idea/libraries
|
||||
/.idea/modules.xml
|
||||
/.idea/workspace.xml
|
||||
/.idea/navEditor.xml
|
||||
/.idea/assetWizardSettings.xml
|
||||
/.idea/deploymentTargetDropDown.xml
|
||||
/.idea/misc.xml
|
||||
/.idea/uiDesigner.xml
|
||||
/.idea/kotlinc.xml
|
||||
.DS_Store
|
||||
/build
|
||||
/captures
|
||||
.externalNativeBuild
|
||||
.cxx
|
||||
local.properties
|
||||
app/src/main/cpp/libs/
|
||||
1
apps/android/.idea/.name
generated
1
apps/android/.idea/.name
generated
@@ -1 +0,0 @@
|
||||
SimpleX
|
||||
6
apps/android/.idea/compiler.xml
generated
6
apps/android/.idea/compiler.xml
generated
@@ -1,6 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="CompilerConfiguration">
|
||||
<bytecodeTargetLevel target="11" />
|
||||
</component>
|
||||
</project>
|
||||
19
apps/android/.idea/gradle.xml
generated
19
apps/android/.idea/gradle.xml
generated
@@ -1,19 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="GradleMigrationSettings" migrationVersion="1" />
|
||||
<component name="GradleSettings">
|
||||
<option name="linkedExternalProjectsSettings">
|
||||
<GradleProjectSettings>
|
||||
<option name="testRunner" value="GRADLE" />
|
||||
<option name="distributionType" value="DEFAULT_WRAPPED" />
|
||||
<option name="externalProjectPath" value="$PROJECT_DIR$" />
|
||||
<option name="modules">
|
||||
<set>
|
||||
<option value="$PROJECT_DIR$" />
|
||||
<option value="$PROJECT_DIR$/app" />
|
||||
</set>
|
||||
</option>
|
||||
</GradleProjectSettings>
|
||||
</option>
|
||||
</component>
|
||||
</project>
|
||||
@@ -1,20 +0,0 @@
|
||||
<component name="InspectionProjectProfileManager">
|
||||
<profile version="1.0">
|
||||
<option name="myName" value="Project Default" />
|
||||
<inspection_tool class="PreviewAnnotationInFunctionWithParameters" enabled="true" level="ERROR" enabled_by_default="true">
|
||||
<option name="previewFile" value="true" />
|
||||
</inspection_tool>
|
||||
<inspection_tool class="PreviewDimensionRespectsLimit" enabled="true" level="WARNING" enabled_by_default="true">
|
||||
<option name="previewFile" value="true" />
|
||||
</inspection_tool>
|
||||
<inspection_tool class="PreviewMultipleParameterProviders" enabled="true" level="ERROR" enabled_by_default="true">
|
||||
<option name="previewFile" value="true" />
|
||||
</inspection_tool>
|
||||
<inspection_tool class="PreviewMustBeTopLevelFunction" enabled="true" level="ERROR" enabled_by_default="true">
|
||||
<option name="previewFile" value="true" />
|
||||
</inspection_tool>
|
||||
<inspection_tool class="PreviewNeedsComposableAnnotation" enabled="true" level="ERROR" enabled_by_default="true">
|
||||
<option name="previewFile" value="true" />
|
||||
</inspection_tool>
|
||||
</profile>
|
||||
</component>
|
||||
6
apps/android/.idea/vcs.xml
generated
6
apps/android/.idea/vcs.xml
generated
@@ -1,6 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="VcsDirectoryMappings">
|
||||
<mapping directory="$PROJECT_DIR$/../.." vcs="Git" />
|
||||
</component>
|
||||
</project>
|
||||
@@ -1,49 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||
<string name="accept_contact_button">اقبل</string>
|
||||
<string name="about_simplex_chat">عن <xliff:g id="appNameFull"> ٍSimpleX </xliff:g></string>
|
||||
<string name="a_plus_b">a + b</string>
|
||||
<string name="accept">اقبل</string>
|
||||
<string name="chat_item_ttl_week">اسبوع 1</string>
|
||||
<string name="chat_item_ttl_month">شهر 1</string>
|
||||
<string name="color_primary">لون تمييزي</string>
|
||||
<string name="chat_item_ttl_day">يوم 1</string>
|
||||
<string name="accept_feature">اقبل</string>
|
||||
<string name="about_simplex">عن SimpleX</string>
|
||||
<string name="above_then_preposition_continuation">أعلاه ، ثم:</string>
|
||||
<string name="accept_call_on_lock_screen">اقبل</string>
|
||||
<string name="delete_chat_profile_action_cannot_be_undone_warning">لا يمكن التراجع عن هذا الإجراء - سيتم فقد ملف التعريف وجهات الاتصال والرسائل والملفات الخاصة بك بشكل نهائي.</string>
|
||||
<string name="alert_message_no_group">هذه المجموعة لم تعد موجودة.</string>
|
||||
<string name="this_QR_code_is_not_a_link">رمز QR هذا ليس رابطًا!</string>
|
||||
<string name="next_generation_of_private_messaging">الجيل القادم من الرسائل الخاصة</string>
|
||||
<string name="delete_files_and_media_desc">لا يمكن التراجع عن هذا الإجراء - سيتم حذف جميع الملفات والوسائط المستلمة والمرسلة. ستبقى الصور منخفضة الدقة.</string>
|
||||
<string name="enable_automatic_deletion_message">لا يمكن التراجع عن هذا الإجراء - سيتم حذف الرسائل المرسلة والمستلمة قبل التحديد. قد تأخذ عدة دقائق.</string>
|
||||
<string name="messages_section_description">ينطبق هذا الإعداد على الرسائل الموجودة في ملف تعريف الدردشة الحالي الخاص بك</string>
|
||||
<string name="the_messaging_and_app_platform_protecting_your_privacy_and_security">منصة الرسائل والتطبيقات تحمي خصوصيتك وأمنك.</string>
|
||||
<string name="profile_is_only_shared_with_your_contacts">يتم مشاركة ملف التعريف مع جهات الاتصال الخاصة بك فقط.</string>
|
||||
<string name="member_role_will_be_changed_with_notification">سيتم تغيير الدور إلى \"%s\". سيتم إبلاغ كل فرد في المجموعة.</string>
|
||||
<string name="member_role_will_be_changed_with_invitation">سيتم تغيير الدور إلى \"%s\". سيتلقى العضو دعوة جديدة.</string>
|
||||
<string name="smp_servers_per_user">خوادم الاتصالات الجديدة لملف تعريف الدردشة الحالي الخاص بك</string>
|
||||
<string name="switch_receiving_address_desc">هذه الميزة تجريبية! ستعمل فقط إذا كان لدى العميل الآخر الإصدار 4.2 مثبتًا. يجب أن ترى الرسالة في المحادثة بمجرد اكتمال تغيير العنوان - يرجى التحقق من أنه لا يزال بإمكانك تلقي الرسائل من جهة الاتصال هذه (أو عضو المجموعة).</string>
|
||||
<string name="this_link_is_not_a_valid_connection_link">هذا الارتباط ليس ارتباط اتصال صالح!</string>
|
||||
<string name="allow_verb">يسمح</string>
|
||||
<string name="smp_servers_preset_add">أضف خوادم محددة مسبقًا</string>
|
||||
<string name="smp_servers_add_to_another_device">أضف إلى جهاز آخر</string>
|
||||
<string name="users_delete_all_chats_deleted">سيتم حذف جميع الدردشات والرسائل - لا يمكن التراجع عن هذا!</string>
|
||||
<string name="network_enable_socks_info">الوصول إلى الخوادم عبر بروكسي SOCKS على المنفذ %d؟ يجب بدء تشغيل الوكيل قبل تمكين هذا الخيار.</string>
|
||||
<string name="smp_servers_add">إضافة خادم …</string>
|
||||
<string name="network_settings">إعدادات الشبكة المتقدمة</string>
|
||||
<string name="all_group_members_will_remain_connected">سيبقى جميع أعضاء المجموعة على اتصال.</string>
|
||||
<string name="allow_disappearing_messages_only_if">السماح باختفاء الرسائل فقط إذا سمحت جهة الاتصال الخاصة بك بذلك.</string>
|
||||
<string name="allow_irreversible_message_deletion_only_if">السماح بحذف الرسائل بشكل لا رجوع فيه فقط إذا سمحت لك جهة الاتصال بذلك.</string>
|
||||
<string name="group_member_role_admin">مسؤل</string>
|
||||
<string name="users_add">إضافة ملف التعريف</string>
|
||||
<string name="allow_direct_messages">السماح بإرسال رسائل مباشرة إلى الأعضاء.</string>
|
||||
<string name="accept_contact_incognito_button">قبول التخفي</string>
|
||||
<string name="button_add_welcome_message">أضف رسالة ترحيب</string>
|
||||
<string name="v4_3_improved_server_configuration_desc">أضف الخوادم عن طريق مسح رموز QR.</string>
|
||||
<string name="v4_2_group_links_desc">يمكن للمسؤولين إنشاء روابط للانضمام إلى المجموعات.</string>
|
||||
<string name="accept_connection_request__question">قبول طلب الاتصال؟</string>
|
||||
<string name="clear_chat_warning">سيتم حذف جميع الرسائل - لا يمكن التراجع عن هذا! سيتم حذف الرسائل فقط من أجلك.</string>
|
||||
<string name="callstatus_accepted">مكالمة مقبولة</string>
|
||||
</resources>
|
||||
@@ -1,2 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources></resources>
|
||||
@@ -1,2 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources></resources>
|
||||
@@ -583,6 +583,14 @@ final class Chat: ObservableObject, Identifiable {
|
||||
self.chatStats = chatStats
|
||||
}
|
||||
|
||||
func copy(chatInfo: ChatInfo? = nil, chatItems: [ChatItem]? = nil, chatStats: ChatStats? = nil) -> Chat {
|
||||
Chat(
|
||||
chatInfo: chatInfo ?? self.chatInfo,
|
||||
chatItems: chatItems ?? self.chatItems,
|
||||
chatStats: chatStats ?? self.chatStats
|
||||
)
|
||||
}
|
||||
|
||||
var userCanSend: Bool {
|
||||
switch chatInfo {
|
||||
case .direct: return true
|
||||
|
||||
@@ -86,6 +86,7 @@ private func withBGTask<T>(bgDelay: Double? = nil, f: @escaping () -> T) -> T {
|
||||
|
||||
func chatSendCmdSync(_ cmd: ChatCommand, bgTask: Bool = true, bgDelay: Double? = nil) -> ChatResponse {
|
||||
logger.debug("chatSendCmd \(cmd.cmdType)")
|
||||
let start = Date.now
|
||||
let resp = bgTask
|
||||
? withBGTask(bgDelay: bgDelay) { sendSimpleXCmd(cmd) }
|
||||
: sendSimpleXCmd(cmd)
|
||||
@@ -94,7 +95,7 @@ func chatSendCmdSync(_ cmd: ChatCommand, bgTask: Bool = true, bgDelay: Double? =
|
||||
logger.debug("chatSendCmd \(cmd.cmdType) response: \(json)")
|
||||
}
|
||||
DispatchQueue.main.async {
|
||||
ChatModel.shared.addTerminalItem(.cmd(.now, cmd.obfuscated))
|
||||
ChatModel.shared.addTerminalItem(.cmd(start, cmd.obfuscated))
|
||||
ChatModel.shared.addTerminalItem(.resp(.now, resp))
|
||||
}
|
||||
return resp
|
||||
@@ -243,8 +244,10 @@ func apiExportArchive(config: ArchiveConfig) async throws {
|
||||
try await sendCommandOkResp(.apiExportArchive(config: config))
|
||||
}
|
||||
|
||||
func apiImportArchive(config: ArchiveConfig) async throws {
|
||||
try await sendCommandOkResp(.apiImportArchive(config: config))
|
||||
func apiImportArchive(config: ArchiveConfig) async throws -> [ArchiveError] {
|
||||
let r = await chatSendCmd(.apiImportArchive(config: config))
|
||||
if case let .archiveImported(archiveErrors) = r { return archiveErrors }
|
||||
throw r
|
||||
}
|
||||
|
||||
func apiDeleteStorage() async throws {
|
||||
@@ -477,12 +480,28 @@ func apiGroupMemberInfo(_ groupId: Int64, _ groupMemberId: Int64) throws -> (Con
|
||||
throw r
|
||||
}
|
||||
|
||||
func apiSwitchContact(contactId: Int64) async throws {
|
||||
try await sendCommandOkResp(.apiSwitchContact(contactId: contactId))
|
||||
func apiSwitchContact(contactId: Int64) throws -> ConnectionStats {
|
||||
let r = chatSendCmdSync(.apiSwitchContact(contactId: contactId))
|
||||
if case let .contactSwitchStarted(_, _, connectionStats) = r { return connectionStats }
|
||||
throw r
|
||||
}
|
||||
|
||||
func apiSwitchGroupMember(_ groupId: Int64, _ groupMemberId: Int64) async throws {
|
||||
try await sendCommandOkResp(.apiSwitchGroupMember(groupId: groupId, groupMemberId: groupMemberId))
|
||||
func apiSwitchGroupMember(_ groupId: Int64, _ groupMemberId: Int64) throws -> ConnectionStats {
|
||||
let r = chatSendCmdSync(.apiSwitchGroupMember(groupId: groupId, groupMemberId: groupMemberId))
|
||||
if case let .groupMemberSwitchStarted(_, _, _, connectionStats) = r { return connectionStats }
|
||||
throw r
|
||||
}
|
||||
|
||||
func apiAbortSwitchContact(_ contactId: Int64) throws -> ConnectionStats {
|
||||
let r = chatSendCmdSync(.apiAbortSwitchContact(contactId: contactId))
|
||||
if case let .contactSwitchAborted(_, _, connectionStats) = r { return connectionStats }
|
||||
throw r
|
||||
}
|
||||
|
||||
func apiAbortSwitchGroupMember(_ groupId: Int64, _ groupMemberId: Int64) throws -> ConnectionStats {
|
||||
let r = chatSendCmdSync(.apiAbortSwitchGroupMember(groupId: groupId, groupMemberId: groupMemberId))
|
||||
if case let .groupMemberSwitchAborted(_, _, _, connectionStats) = r { return connectionStats }
|
||||
throw r
|
||||
}
|
||||
|
||||
func apiGetContactCode(_ contactId: Int64) async throws -> (Contact, String) {
|
||||
@@ -538,7 +557,6 @@ func apiConnect_(connReq: String) async -> (ConnReqType?, Alert?) {
|
||||
return (nil, nil)
|
||||
}
|
||||
let r = await chatSendCmd(.apiConnect(userId: userId, connReq: connReq))
|
||||
let am = AlertManager.shared
|
||||
switch r {
|
||||
case .sentConfirmation: return (.invitation, nil)
|
||||
case .sentInvitation: return (.contact, nil)
|
||||
@@ -882,7 +900,9 @@ func markChatRead(_ chat: Chat, aboveItem: ChatItem? = nil) async {
|
||||
let itemRange = (minItemId, aboveItem?.id ?? chat.chatItems.last?.id ?? minItemId)
|
||||
let cInfo = chat.chatInfo
|
||||
try await apiChatRead(type: cInfo.chatType, id: cInfo.apiId, itemRange: itemRange)
|
||||
await MainActor.run { ChatModel.shared.markChatItemsRead(cInfo, aboveItem: aboveItem) }
|
||||
await MainActor.run {
|
||||
withAnimation { ChatModel.shared.markChatItemsRead(cInfo, aboveItem: aboveItem) }
|
||||
}
|
||||
}
|
||||
if chat.chatStats.unreadChat {
|
||||
await markChatUnread(chat, unreadChat: false)
|
||||
@@ -896,7 +916,9 @@ func markChatUnread(_ chat: Chat, unreadChat: Bool = true) async {
|
||||
do {
|
||||
let cInfo = chat.chatInfo
|
||||
try await apiChatUnread(type: cInfo.chatType, id: cInfo.apiId, unreadChat: unreadChat)
|
||||
await MainActor.run { ChatModel.shared.markChatUnread(cInfo, unreadChat: unreadChat) }
|
||||
await MainActor.run {
|
||||
withAnimation { ChatModel.shared.markChatUnread(cInfo, unreadChat: unreadChat) }
|
||||
}
|
||||
} catch {
|
||||
logger.error("markChatUnread apiChatUnread error: \(responseError(error))")
|
||||
}
|
||||
@@ -1343,10 +1365,13 @@ func processReceivedMsg(_ res: ChatResponse) async {
|
||||
if active(user) {
|
||||
_ = m.upsertGroupMember(groupInfo, member)
|
||||
}
|
||||
case let .connectedToGroupMember(user, groupInfo, member):
|
||||
case let .connectedToGroupMember(user, groupInfo, member, memberContact):
|
||||
if active(user) {
|
||||
_ = m.upsertGroupMember(groupInfo, member)
|
||||
}
|
||||
if let contact = memberContact {
|
||||
m.setContactNetworkStatus(contact, .connected)
|
||||
}
|
||||
case let .groupUpdated(user, toGroup):
|
||||
if active(user) {
|
||||
m.updateGroup(toGroup)
|
||||
|
||||
@@ -13,6 +13,7 @@ final class WebRTCClient: NSObject, RTCVideoViewDelegate, RTCFrameEncryptorDeleg
|
||||
RTCInitializeSSL()
|
||||
let videoEncoderFactory = RTCDefaultVideoEncoderFactory()
|
||||
let videoDecoderFactory = RTCDefaultVideoDecoderFactory()
|
||||
videoEncoderFactory.preferredCodec = RTCVideoCodecInfo(name: kRTCVp8CodecName)
|
||||
return RTCPeerConnectionFactory(encoderFactory: videoEncoderFactory, decoderFactory: videoDecoderFactory)
|
||||
}()
|
||||
private static let ivTagBytes: Int = 28
|
||||
@@ -301,6 +302,17 @@ final class WebRTCClient: NSObject, RTCVideoViewDelegate, RTCFrameEncryptorDeleg
|
||||
}
|
||||
|
||||
func startCaptureLocalVideo(_ activeCall: Call) {
|
||||
#if targetEnvironment(simulator)
|
||||
guard
|
||||
let capturer = activeCall.localCamera as? RTCFileVideoCapturer
|
||||
else {
|
||||
logger.error("Unable to work with a file capturer")
|
||||
return
|
||||
}
|
||||
capturer.stopCapture()
|
||||
// Drag video file named `video.mp4` to `sounds` directory in the project from any other path in filesystem
|
||||
capturer.startCapturing(fromFileNamed: "sounds/video.mp4")
|
||||
#else
|
||||
guard
|
||||
let capturer = activeCall.localCamera as? RTCCameraVideoCapturer,
|
||||
let camera = (RTCCameraVideoCapturer.captureDevices().first { $0.position == activeCall.device })
|
||||
@@ -328,6 +340,7 @@ final class WebRTCClient: NSObject, RTCVideoViewDelegate, RTCFrameEncryptorDeleg
|
||||
capturer.startCapture(with: camera,
|
||||
format: format,
|
||||
fps: Int(min(24, fps.maxFrameRate)))
|
||||
#endif
|
||||
}
|
||||
|
||||
private func createAudioSender(_ connection: RTCPeerConnection) {
|
||||
|
||||
@@ -36,9 +36,8 @@ func localizedInfoRow(_ title: LocalizedStringKey, _ value: LocalizedStringKey)
|
||||
}
|
||||
}
|
||||
|
||||
@ViewBuilder func smpServers(_ title: LocalizedStringKey, _ servers: [String]?) -> some View {
|
||||
if let servers = servers,
|
||||
servers.count > 0 {
|
||||
@ViewBuilder func smpServers(_ title: LocalizedStringKey, _ servers: [String]) -> some View {
|
||||
if servers.count > 0 {
|
||||
HStack {
|
||||
Text(title).frame(width: 120, alignment: .leading)
|
||||
Button(serverHost(servers[0])) {
|
||||
@@ -76,6 +75,7 @@ struct ChatInfoView: View {
|
||||
case clearChatAlert
|
||||
case networkStatusAlert
|
||||
case switchAddressAlert
|
||||
case abortSwitchAddressAlert
|
||||
case error(title: LocalizedStringKey, error: LocalizedStringKey = "")
|
||||
|
||||
var id: String {
|
||||
@@ -84,6 +84,7 @@ struct ChatInfoView: View {
|
||||
case .clearChatAlert: return "clearChatAlert"
|
||||
case .networkStatusAlert: return "networkStatusAlert"
|
||||
case .switchAddressAlert: return "switchAddressAlert"
|
||||
case .abortSwitchAddressAlert: return "abortSwitchAddressAlert"
|
||||
case let .error(title, _): return "error \(title)"
|
||||
}
|
||||
}
|
||||
@@ -136,12 +137,19 @@ struct ChatInfoView: View {
|
||||
.onTapGesture {
|
||||
alert = .networkStatusAlert
|
||||
}
|
||||
Button("Change receiving address") {
|
||||
alert = .switchAddressAlert
|
||||
}
|
||||
if let connStats = connectionStats {
|
||||
smpServers("Receiving via", connStats.rcvServers)
|
||||
smpServers("Sending via", connStats.sndServers)
|
||||
Button("Change receiving address") {
|
||||
alert = .switchAddressAlert
|
||||
}
|
||||
.disabled(connStats.rcvQueuesInfo.contains { $0.rcvSwitchStatus != nil })
|
||||
if connStats.rcvQueuesInfo.contains { $0.rcvSwitchStatus != nil } {
|
||||
Button("Abort changing address") {
|
||||
alert = .abortSwitchAddressAlert
|
||||
}
|
||||
.disabled(connStats.rcvQueuesInfo.contains { $0.rcvSwitchStatus != nil && !$0.canAbortSwitch })
|
||||
}
|
||||
smpServers("Receiving via", connStats.rcvQueuesInfo.map { $0.rcvServer })
|
||||
smpServers("Sending via", connStats.sndQueuesInfo.map { $0.sndServer })
|
||||
}
|
||||
}
|
||||
|
||||
@@ -166,6 +174,7 @@ struct ChatInfoView: View {
|
||||
case .clearChatAlert: return clearChatAlert()
|
||||
case .networkStatusAlert: return networkStatusAlert()
|
||||
case .switchAddressAlert: return switchAddressAlert(switchContactAddress)
|
||||
case .abortSwitchAddressAlert: return abortSwitchAddressAlert(abortSwitchContactAddress)
|
||||
case let .error(title, error): return mkAlert(title: title, message: error)
|
||||
}
|
||||
}
|
||||
@@ -359,7 +368,8 @@ struct ChatInfoView: View {
|
||||
private func switchContactAddress() {
|
||||
Task {
|
||||
do {
|
||||
try await apiSwitchContact(contactId: contact.apiId)
|
||||
let stats = try apiSwitchContact(contactId: contact.apiId)
|
||||
connectionStats = stats
|
||||
} catch let error {
|
||||
logger.error("switchContactAddress apiSwitchContact error: \(responseError(error))")
|
||||
let a = getErrorAlert(error, "Error changing address")
|
||||
@@ -369,13 +379,37 @@ struct ChatInfoView: View {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private func abortSwitchContactAddress() {
|
||||
Task {
|
||||
do {
|
||||
let stats = try apiAbortSwitchContact(contact.apiId)
|
||||
connectionStats = stats
|
||||
} catch let error {
|
||||
logger.error("abortSwitchContactAddress apiAbortSwitchContact error: \(responseError(error))")
|
||||
let a = getErrorAlert(error, "Error aborting address change")
|
||||
await MainActor.run {
|
||||
alert = .error(title: a.title, error: a.message)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func switchAddressAlert(_ switchAddress: @escaping () -> Void) -> Alert {
|
||||
Alert(
|
||||
title: Text("Change receiving address?"),
|
||||
message: Text("This feature is experimental! It will only work if the other client has version 4.2 installed. You should see the message in the conversation once the address change is completed – please check that you can still receive messages from this contact (or group member)."),
|
||||
primaryButton: .destructive(Text("Change"), action: switchAddress),
|
||||
message: Text("Receiving address will be changed to a different server. Address change will complete after sender comes online."),
|
||||
primaryButton: .default(Text("Change"), action: switchAddress),
|
||||
secondaryButton: .cancel()
|
||||
)
|
||||
}
|
||||
|
||||
func abortSwitchAddressAlert(_ abortSwitchAddress: @escaping () -> Void) -> Alert {
|
||||
Alert(
|
||||
title: Text("Abort changing address?"),
|
||||
message: Text("Address change will be aborted. Old receiving address will be used."),
|
||||
primaryButton: .destructive(Text("Abort"), action: abortSwitchAddress),
|
||||
secondaryButton: .cancel()
|
||||
)
|
||||
}
|
||||
|
||||
@@ -193,7 +193,7 @@ struct ChatView: View {
|
||||
.focused($searchFocussed)
|
||||
.foregroundColor(.primary)
|
||||
.frame(maxWidth: .infinity)
|
||||
|
||||
|
||||
Button {
|
||||
searchText = ""
|
||||
} label: {
|
||||
@@ -204,7 +204,7 @@ struct ChatView: View {
|
||||
.foregroundColor(.secondary)
|
||||
.background(Color(.secondarySystemBackground))
|
||||
.cornerRadius(10.0)
|
||||
|
||||
|
||||
Button ("Cancel") {
|
||||
searchText = ""
|
||||
searchMode = false
|
||||
@@ -537,8 +537,20 @@ struct ChatView: View {
|
||||
private func menu(live: Bool) -> [UIMenuElement] {
|
||||
var menu: [UIMenuElement] = []
|
||||
if let mc = ci.content.msgContent, ci.meta.itemDeleted == nil || revealed {
|
||||
let rs = allReactions()
|
||||
if chat.chatInfo.featureEnabled(.reactions) && ci.allowAddReaction,
|
||||
let rm = reactionUIMenu() {
|
||||
rs.count > 0 {
|
||||
var rm: UIMenu
|
||||
if #available(iOS 16, *) {
|
||||
var children: [UIMenuElement] = Array(rs.prefix(topReactionsCount(rs)))
|
||||
if let sm = reactionUIMenu(rs) {
|
||||
children.append(sm)
|
||||
}
|
||||
rm = UIMenu(title: "", options: .displayInline, children: children)
|
||||
rm.preferredElementSize = .small
|
||||
} else {
|
||||
rm = reactionUIMenuPreiOS16(rs)
|
||||
}
|
||||
menu.append(rm)
|
||||
}
|
||||
if ci.meta.itemDeleted == nil && !ci.isLiveDummy && !live {
|
||||
@@ -602,20 +614,36 @@ struct ChatView: View {
|
||||
}
|
||||
}
|
||||
|
||||
private func reactionUIMenu() -> UIMenu? {
|
||||
let rs = MsgReaction.values.compactMap { r in
|
||||
private func reactionUIMenuPreiOS16(_ rs: [UIAction]) -> UIMenu {
|
||||
UIMenu(
|
||||
title: NSLocalizedString("React...", comment: "chat item menu"),
|
||||
image: UIImage(systemName: "face.smiling"),
|
||||
children: rs
|
||||
)
|
||||
}
|
||||
|
||||
@available(iOS 16.0, *)
|
||||
private func reactionUIMenu(_ rs: [UIAction]) -> UIMenu? {
|
||||
var children = rs
|
||||
children.removeFirst(min(rs.count, topReactionsCount(rs)))
|
||||
if children.count == 0 { return nil }
|
||||
return UIMenu(
|
||||
title: "",
|
||||
image: UIImage(systemName: "ellipsis"),
|
||||
children: children
|
||||
)
|
||||
}
|
||||
|
||||
private func allReactions() -> [UIAction] {
|
||||
MsgReaction.values.compactMap { r in
|
||||
ci.reactions.contains(where: { $0.userReacted && $0.reaction == r })
|
||||
? nil
|
||||
: UIAction(title: r.text) { _ in setReaction(add: true, reaction: r) }
|
||||
}
|
||||
if rs.count > 0 {
|
||||
return UIMenu(
|
||||
title: NSLocalizedString("React...", comment: "chat item menu"),
|
||||
image: UIImage(systemName: "face.smiling"),
|
||||
children: rs
|
||||
)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
private func topReactionsCount(_ rs: [UIAction]) -> Int {
|
||||
rs.count > 4 ? 3 : 4
|
||||
}
|
||||
|
||||
private func setReaction(add: Bool, reaction: MsgReaction) {
|
||||
@@ -869,9 +897,20 @@ struct ChatView: View {
|
||||
}
|
||||
|
||||
func toggleNotifications(_ chat: Chat, enableNtfs: Bool) {
|
||||
var chatSettings = chat.chatInfo.chatSettings ?? ChatSettings.defaults
|
||||
chatSettings.enableNtfs = enableNtfs
|
||||
updateChatSettings(chat, chatSettings: chatSettings)
|
||||
}
|
||||
|
||||
func toggleChatFavorite(_ chat: Chat, favorite: Bool) {
|
||||
var chatSettings = chat.chatInfo.chatSettings ?? ChatSettings.defaults
|
||||
chatSettings.favorite = favorite
|
||||
updateChatSettings(chat, chatSettings: chatSettings)
|
||||
}
|
||||
|
||||
func updateChatSettings(_ chat: Chat, chatSettings: ChatSettings) {
|
||||
Task {
|
||||
do {
|
||||
let chatSettings = ChatSettings(enableNtfs: enableNtfs)
|
||||
try await apiSetChatSettings(type: chat.chatInfo.chatType, id: chat.chatInfo.apiId, chatSettings: chatSettings)
|
||||
await MainActor.run {
|
||||
switch chat.chatInfo {
|
||||
|
||||
@@ -264,7 +264,7 @@ struct ComposeView: View {
|
||||
default: previewView()
|
||||
}
|
||||
HStack (alignment: .bottom) {
|
||||
Button {
|
||||
let b = Button {
|
||||
showChooseSource = true
|
||||
} label: {
|
||||
Image(systemName: "paperclip")
|
||||
@@ -274,6 +274,17 @@ struct ComposeView: View {
|
||||
.frame(width: 25, height: 25)
|
||||
.padding(.bottom, 12)
|
||||
.padding(.leading, 12)
|
||||
if case let .group(g) = chat.chatInfo,
|
||||
!g.fullGroupPreferences.files.on {
|
||||
b.disabled(true).onTapGesture {
|
||||
AlertManager.shared.showAlertMsg(
|
||||
title: "Files and media prohibited!",
|
||||
message: "Only group owners can enable files and media."
|
||||
)
|
||||
}
|
||||
} else {
|
||||
b
|
||||
}
|
||||
ZStack(alignment: .leading) {
|
||||
SendMessageView(
|
||||
composeState: $composeState,
|
||||
@@ -296,9 +307,7 @@ struct ComposeView: View {
|
||||
},
|
||||
finishVoiceMessageRecording: finishVoiceMessageRecording,
|
||||
allowVoiceMessagesToContact: allowVoiceMessagesToContact,
|
||||
// TODO in 5.2 - allow if ttl is not configured
|
||||
// timedMessageAllowed: chat.chatInfo.featureEnabled(.timedMessages),
|
||||
timedMessageAllowed: chat.chatInfo.featureEnabled(.timedMessages) && chat.chatInfo.timedMessagesTTL != nil,
|
||||
timedMessageAllowed: chat.chatInfo.featureEnabled(.timedMessages),
|
||||
onMediaAdded: { media in if !media.isEmpty { chosenMedia = media }},
|
||||
keyboardVisible: $keyboardVisible
|
||||
)
|
||||
@@ -726,6 +735,9 @@ struct ComposeView: View {
|
||||
}
|
||||
return chatItem
|
||||
}
|
||||
if let file = file {
|
||||
removeFile(file)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
|
||||
@@ -24,7 +24,7 @@ struct ContactPreferencesView: View {
|
||||
List {
|
||||
timedMessagesFeatureSection()
|
||||
featureSection(.fullDelete, user.fullPreferences.fullDelete.allow, contact.mergedPreferences.fullDelete, $featuresAllowed.fullDelete)
|
||||
// featureSection(.reactions, user.fullPreferences.reactions.allow, contact.mergedPreferences.reactions, $featuresAllowed.reactions)
|
||||
featureSection(.reactions, user.fullPreferences.reactions.allow, contact.mergedPreferences.reactions, $featuresAllowed.reactions)
|
||||
featureSection(.voice, user.fullPreferences.voice.allow, contact.mergedPreferences.voice, $featuresAllowed.voice)
|
||||
featureSection(.calls, user.fullPreferences.calls.allow, contact.mergedPreferences.calls, $featuresAllowed.calls)
|
||||
|
||||
|
||||
@@ -29,6 +29,8 @@ struct AddGroupMembersViewCommon: View {
|
||||
@State private var selectedContacts = Set<Int64>()
|
||||
@State private var selectedRole: GroupMemberRole = .member
|
||||
@State private var alert: AddGroupMembersAlert?
|
||||
@State private var searchText: String = ""
|
||||
@FocusState private var searchFocussed
|
||||
|
||||
private enum AddGroupMembersAlert: Identifiable {
|
||||
case prohibitedToInviteIncognito
|
||||
@@ -85,7 +87,7 @@ struct AddGroupMembersViewCommon: View {
|
||||
if showFooterCounter {
|
||||
if (count >= 1) {
|
||||
HStack {
|
||||
Button { selectedContacts.removeAll() } label: { Text("Clear") }
|
||||
Button { selectedContacts.removeAll() } label: { Text("Clear").font(.caption) }
|
||||
Spacer()
|
||||
Text("\(count) contact(s) selected")
|
||||
}
|
||||
@@ -97,7 +99,11 @@ struct AddGroupMembersViewCommon: View {
|
||||
}
|
||||
|
||||
Section {
|
||||
ForEach(membersToAdd) { contact in
|
||||
searchFieldView(text: $searchText, focussed: $searchFocussed)
|
||||
.padding(.leading, 2)
|
||||
let s = searchText.trimmingCharacters(in: .whitespaces).localizedLowercase
|
||||
let members = s == "" ? membersToAdd : membersToAdd.filter { $0.chatViewName.localizedLowercase.contains(s) }
|
||||
ForEach(members) { contact in
|
||||
contactCheckView(contact)
|
||||
}
|
||||
}
|
||||
@@ -116,6 +122,9 @@ struct AddGroupMembersViewCommon: View {
|
||||
return Alert(title: Text(title), message: Text(error))
|
||||
}
|
||||
}
|
||||
.onChange(of: selectedContacts) { _ in
|
||||
searchFocussed = false
|
||||
}
|
||||
}
|
||||
|
||||
private func inviteMembersButton() -> some View {
|
||||
@@ -199,6 +208,31 @@ struct AddGroupMembersViewCommon: View {
|
||||
}
|
||||
}
|
||||
|
||||
func searchFieldView(text: Binding<String>, focussed: FocusState<Bool>.Binding) -> some View {
|
||||
HStack {
|
||||
Image(systemName: "magnifyingglass")
|
||||
.resizable()
|
||||
.scaledToFit()
|
||||
.frame(height: 20)
|
||||
.padding(.trailing, 10)
|
||||
TextField("Search", text: text)
|
||||
.focused(focussed)
|
||||
.foregroundColor(.primary)
|
||||
.frame(maxWidth: .infinity)
|
||||
Image(systemName: "xmark.circle.fill")
|
||||
.resizable()
|
||||
.scaledToFit()
|
||||
.opacity(text.wrappedValue == "" ? 0 : 1)
|
||||
.frame(height: 20)
|
||||
.onTapGesture {
|
||||
text.wrappedValue = ""
|
||||
focussed.wrappedValue = false
|
||||
}
|
||||
}
|
||||
.foregroundColor(.secondary)
|
||||
.frame(height: 36)
|
||||
}
|
||||
|
||||
struct AddGroupMembersView_Previews: PreviewProvider {
|
||||
static var previews: some View {
|
||||
AddGroupMembersView(chat: Chat(chatInfo: ChatInfo.sampleData.group), groupInfo: GroupInfo.sampleData)
|
||||
|
||||
@@ -22,6 +22,8 @@ struct GroupChatInfoView: View {
|
||||
@State private var connectionStats: ConnectionStats?
|
||||
@State private var connectionCode: String?
|
||||
@AppStorage(DEFAULT_DEVELOPER_TOOLS) private var developerTools = false
|
||||
@State private var searchText: String = ""
|
||||
@FocusState private var searchFocussed
|
||||
|
||||
enum GroupChatInfoViewAlert: Identifiable {
|
||||
case deleteGroupAlert
|
||||
@@ -67,8 +69,14 @@ struct GroupChatInfoView: View {
|
||||
addMembersButton()
|
||||
}
|
||||
}
|
||||
if members.count > 8 {
|
||||
searchFieldView(text: $searchText, focussed: $searchFocussed)
|
||||
.padding(.leading, 8)
|
||||
}
|
||||
let s = searchText.trimmingCharacters(in: .whitespaces).localizedLowercase
|
||||
let filteredMembers = s == "" ? members : members.filter { $0.chatViewName.localizedLowercase.contains(s) }
|
||||
memberView(groupInfo.membership, user: true)
|
||||
ForEach(members) { member in
|
||||
ForEach(filteredMembers) { member in
|
||||
ZStack {
|
||||
NavigationLink {
|
||||
memberInfoView(member.groupMemberId)
|
||||
@@ -144,6 +152,7 @@ struct GroupChatInfoView: View {
|
||||
NavigationLink {
|
||||
AddGroupMembersView(chat: chat, groupInfo: groupInfo)
|
||||
.onAppear {
|
||||
searchFocussed = false
|
||||
Task {
|
||||
let groupMembers = await apiListMembers(groupInfo.groupId)
|
||||
await MainActor.run {
|
||||
|
||||
@@ -29,43 +29,33 @@ struct GroupLinkView: View {
|
||||
}
|
||||
|
||||
var body: some View {
|
||||
ScrollView {
|
||||
VStack (alignment: .leading) {
|
||||
Text("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.")
|
||||
.padding(.bottom)
|
||||
List {
|
||||
Text("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.")
|
||||
.listRowBackground(Color.clear)
|
||||
.listRowInsets(EdgeInsets(top: 0, leading: 0, bottom: 0, trailing: 0))
|
||||
Section {
|
||||
if let groupLink = groupLink {
|
||||
HStack {
|
||||
Text("Initial role")
|
||||
Picker("Initial role", selection: $groupLinkMemberRole) {
|
||||
ForEach([GroupMemberRole.member, GroupMemberRole.observer]) { role in
|
||||
Text(role.text)
|
||||
}
|
||||
Picker("Initial role", selection: $groupLinkMemberRole) {
|
||||
ForEach([GroupMemberRole.member, GroupMemberRole.observer]) { role in
|
||||
Text(role.text)
|
||||
}
|
||||
.frame(height: 36)
|
||||
}
|
||||
.frame(maxWidth: .infinity, alignment: .leading)
|
||||
.frame(height: 36)
|
||||
QRCode(uri: groupLink)
|
||||
HStack {
|
||||
Button {
|
||||
showShareSheet(items: [groupLink])
|
||||
} label: {
|
||||
Label("Share link", systemImage: "square.and.arrow.up")
|
||||
}
|
||||
.padding()
|
||||
|
||||
Button(role: .destructive) { alert = .deleteLink } label: {
|
||||
Label("Delete link", systemImage: "trash")
|
||||
}
|
||||
.padding()
|
||||
Button {
|
||||
showShareSheet(items: [groupLink])
|
||||
} label: {
|
||||
Label("Share link", systemImage: "square.and.arrow.up")
|
||||
}
|
||||
|
||||
Button(role: .destructive) { alert = .deleteLink } label: {
|
||||
Label("Delete link", systemImage: "trash")
|
||||
}
|
||||
.frame(maxWidth: .infinity)
|
||||
} else {
|
||||
Button(action: createGroupLink) {
|
||||
Label("Create link", systemImage: "link.badge.plus")
|
||||
}
|
||||
.frame(maxWidth: .infinity)
|
||||
.disabled(creatingLink)
|
||||
.padding(.bottom)
|
||||
if creatingLink {
|
||||
ProgressView()
|
||||
.scaleEffect(2)
|
||||
@@ -73,8 +63,6 @@ struct GroupLinkView: View {
|
||||
}
|
||||
}
|
||||
}
|
||||
.padding()
|
||||
.frame(maxWidth: .infinity, maxHeight: .infinity, alignment: .top)
|
||||
.alert(item: $alert) { alert in
|
||||
switch alert {
|
||||
case .deleteLink:
|
||||
|
||||
@@ -20,11 +20,13 @@ struct GroupMemberInfoView: View {
|
||||
@State private var newRole: GroupMemberRole = .member
|
||||
@State private var alert: GroupMemberInfoViewAlert?
|
||||
@AppStorage(DEFAULT_DEVELOPER_TOOLS) private var developerTools = false
|
||||
@State private var justOpened = true
|
||||
|
||||
enum GroupMemberInfoViewAlert: Identifiable {
|
||||
case removeMemberAlert(mem: GroupMember)
|
||||
case changeMemberRoleAlert(mem: GroupMember, role: GroupMemberRole)
|
||||
case switchAddressAlert
|
||||
case abortSwitchAddressAlert
|
||||
case connRequestSentAlert(type: ConnReqType)
|
||||
case error(title: LocalizedStringKey, error: LocalizedStringKey)
|
||||
case other(alert: Alert)
|
||||
@@ -34,6 +36,7 @@ struct GroupMemberInfoView: View {
|
||||
case .removeMemberAlert: return "removeMemberAlert"
|
||||
case let .changeMemberRoleAlert(_, role): return "changeMemberRoleAlert \(role.rawValue)"
|
||||
case .switchAddressAlert: return "switchAddressAlert"
|
||||
case .abortSwitchAddressAlert: return "abortSwitchAddressAlert"
|
||||
case .connRequestSentAlert: return "connRequestSentAlert"
|
||||
case let .error(title, _): return "error \(title)"
|
||||
case let .other(alert): return "other \(alert)"
|
||||
@@ -126,8 +129,15 @@ struct GroupMemberInfoView: View {
|
||||
Button("Change receiving address") {
|
||||
alert = .switchAddressAlert
|
||||
}
|
||||
smpServers("Receiving via", connStats.rcvServers)
|
||||
smpServers("Sending via", connStats.sndServers)
|
||||
.disabled(connStats.rcvQueuesInfo.contains { $0.rcvSwitchStatus != nil })
|
||||
if connStats.rcvQueuesInfo.contains { $0.rcvSwitchStatus != nil } {
|
||||
Button("Abort changing address") {
|
||||
alert = .abortSwitchAddressAlert
|
||||
}
|
||||
.disabled(connStats.rcvQueuesInfo.contains { $0.rcvSwitchStatus != nil && !$0.canAbortSwitch })
|
||||
}
|
||||
smpServers("Receiving via", connStats.rcvQueuesInfo.map { $0.rcvServer })
|
||||
smpServers("Sending via", connStats.sndQueuesInfo.map { $0.sndServer })
|
||||
}
|
||||
}
|
||||
|
||||
@@ -146,6 +156,10 @@ struct GroupMemberInfoView: View {
|
||||
}
|
||||
.navigationBarHidden(true)
|
||||
.onAppear {
|
||||
if #unavailable(iOS 16) {
|
||||
// this condition prevents re-setting picker
|
||||
if !justOpened { return }
|
||||
}
|
||||
newRole = member.memberRole
|
||||
do {
|
||||
let stats = try apiGroupMemberInfo(groupInfo.apiId, member.groupMemberId)
|
||||
@@ -156,6 +170,7 @@ struct GroupMemberInfoView: View {
|
||||
} catch let error {
|
||||
logger.error("apiGroupMemberInfo or apiGetGroupMemberCode error: \(responseError(error))")
|
||||
}
|
||||
justOpened = false
|
||||
}
|
||||
.onChange(of: newRole) { _ in
|
||||
if newRole != member.memberRole {
|
||||
@@ -169,6 +184,7 @@ struct GroupMemberInfoView: View {
|
||||
case let .removeMemberAlert(mem): return removeMemberAlert(mem)
|
||||
case let .changeMemberRoleAlert(mem, _): return changeMemberRoleAlert(mem)
|
||||
case .switchAddressAlert: return switchAddressAlert(switchMemberAddress)
|
||||
case .abortSwitchAddressAlert: return abortSwitchAddressAlert(abortSwitchMemberAddress)
|
||||
case let .connRequestSentAlert(type): return connReqSentAlert(type)
|
||||
case let .error(title, error): return Alert(title: Text(title), message: Text(error))
|
||||
case let .other(alert): return alert
|
||||
@@ -340,7 +356,8 @@ struct GroupMemberInfoView: View {
|
||||
private func switchMemberAddress() {
|
||||
Task {
|
||||
do {
|
||||
try await apiSwitchGroupMember(groupInfo.apiId, member.groupMemberId)
|
||||
let stats = try apiSwitchGroupMember(groupInfo.apiId, member.groupMemberId)
|
||||
connectionStats = stats
|
||||
} catch let error {
|
||||
logger.error("switchMemberAddress apiSwitchGroupMember error: \(responseError(error))")
|
||||
let a = getErrorAlert(error, "Error changing address")
|
||||
@@ -350,6 +367,21 @@ struct GroupMemberInfoView: View {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private func abortSwitchMemberAddress() {
|
||||
Task {
|
||||
do {
|
||||
let stats = try apiAbortSwitchGroupMember(groupInfo.apiId, member.groupMemberId)
|
||||
connectionStats = stats
|
||||
} catch let error {
|
||||
logger.error("abortSwitchMemberAddress apiAbortSwitchGroupMember error: \(responseError(error))")
|
||||
let a = getErrorAlert(error, "Error aborting address change")
|
||||
await MainActor.run {
|
||||
alert = .error(title: a.title, error: a.message)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
struct GroupMemberInfoView_Previews: PreviewProvider {
|
||||
|
||||
@@ -25,8 +25,10 @@ struct GroupPreferencesView: View {
|
||||
featureSection(.timedMessages, $preferences.timedMessages.enable)
|
||||
featureSection(.fullDelete, $preferences.fullDelete.enable)
|
||||
featureSection(.directMessages, $preferences.directMessages.enable)
|
||||
// featureSection(.reactions, $preferences.reactions.enable)
|
||||
featureSection(.reactions, $preferences.reactions.enable)
|
||||
featureSection(.voice, $preferences.voice.enable)
|
||||
// TODO uncomment in 5.3
|
||||
// featureSection(.files, $preferences.files.enable)
|
||||
|
||||
if groupInfo.canEdit {
|
||||
Section {
|
||||
@@ -79,7 +81,7 @@ struct GroupPreferencesView: View {
|
||||
DropdownCustomTimePicker(
|
||||
selection: $preferences.timedMessages.ttl,
|
||||
label: "Delete after",
|
||||
dropdownValues: TimedMessagesPreference.ttlValues.filter { $0 != nil }, // TODO in 5.2 - allow "off"
|
||||
dropdownValues: TimedMessagesPreference.ttlValues,
|
||||
customPickerConfirmButtonText: "Select",
|
||||
customPickerDescription: "Delete after"
|
||||
)
|
||||
|
||||
@@ -53,10 +53,10 @@ struct GroupWelcomeView: View {
|
||||
}
|
||||
|
||||
private func textPreview() -> some View {
|
||||
ScrollView {
|
||||
messageText(welcomeText, parseSimpleXMarkdown(welcomeText), nil)
|
||||
.allowsHitTesting(false)
|
||||
}
|
||||
messageText(welcomeText, parseSimpleXMarkdown(welcomeText), nil)
|
||||
.allowsHitTesting(false)
|
||||
.frame(minHeight: 140, alignment: .topLeading)
|
||||
.frame(maxWidth: .infinity, alignment: .leading)
|
||||
}
|
||||
|
||||
private func editorView() -> some View {
|
||||
@@ -80,7 +80,6 @@ struct GroupWelcomeView: View {
|
||||
}
|
||||
} else {
|
||||
textPreview()
|
||||
.frame(height: 140, alignment: .topLeading)
|
||||
}
|
||||
|
||||
Button {
|
||||
|
||||
@@ -27,7 +27,7 @@ private let rowHeights: [DynamicTypeSize: CGFloat] = [
|
||||
struct ChatListNavLink: View {
|
||||
@EnvironmentObject var chatModel: ChatModel
|
||||
@Environment(\.dynamicTypeSize) private var dynamicTypeSize
|
||||
@State var chat: Chat
|
||||
@ObservedObject var chat: Chat
|
||||
@State private var showContactRequestDialog = false
|
||||
@State private var showJoinGroupDialog = false
|
||||
@State private var showContactConnectionInfo = false
|
||||
@@ -57,6 +57,8 @@ struct ChatListNavLink: View {
|
||||
)
|
||||
.swipeActions(edge: .leading, allowsFullSwipe: true) {
|
||||
markReadButton()
|
||||
toggleFavoriteButton()
|
||||
toggleNtfsButton(chat)
|
||||
}
|
||||
.swipeActions(edge: .trailing, allowsFullSwipe: true) {
|
||||
if !chat.chatItems.isEmpty {
|
||||
@@ -108,6 +110,14 @@ struct ChatListNavLink: View {
|
||||
.onTapGesture {
|
||||
AlertManager.shared.showAlert(groupInvitationAcceptedAlert())
|
||||
}
|
||||
.swipeActions(edge: .trailing) {
|
||||
if (groupInfo.membership.memberCurrent) {
|
||||
leaveGroupChatButton(groupInfo)
|
||||
}
|
||||
if groupInfo.canDelete {
|
||||
deleteGroupChatButton(groupInfo)
|
||||
}
|
||||
}
|
||||
default:
|
||||
NavLinkPlain(
|
||||
tag: chat.chatInfo.id,
|
||||
@@ -118,21 +128,16 @@ struct ChatListNavLink: View {
|
||||
.frame(height: rowHeights[dynamicTypeSize])
|
||||
.swipeActions(edge: .leading, allowsFullSwipe: true) {
|
||||
markReadButton()
|
||||
toggleFavoriteButton()
|
||||
toggleNtfsButton(chat)
|
||||
}
|
||||
.swipeActions(edge: .trailing, allowsFullSwipe: true) {
|
||||
if !chat.chatItems.isEmpty {
|
||||
clearChatButton()
|
||||
}
|
||||
if (groupInfo.membership.memberCurrent) {
|
||||
Button {
|
||||
AlertManager.shared.showAlert(leaveGroupAlert(groupInfo))
|
||||
} label: {
|
||||
Label("Leave", systemImage: "rectangle.portrait.and.arrow.right")
|
||||
}
|
||||
.tint(Color.yellow)
|
||||
leaveGroupChatButton(groupInfo)
|
||||
}
|
||||
}
|
||||
.swipeActions(edge: .trailing) {
|
||||
if groupInfo.canDelete {
|
||||
deleteGroupChatButton(groupInfo)
|
||||
}
|
||||
@@ -168,6 +173,24 @@ struct ChatListNavLink: View {
|
||||
|
||||
}
|
||||
|
||||
@ViewBuilder private func toggleFavoriteButton() -> some View {
|
||||
if chat.chatInfo.chatSettings?.favorite == true {
|
||||
Button {
|
||||
toggleChatFavorite(chat, favorite: false)
|
||||
} label: {
|
||||
Label("Unfav.", systemImage: "star.slash")
|
||||
}
|
||||
.tint(.green)
|
||||
} else {
|
||||
Button {
|
||||
toggleChatFavorite(chat, favorite: true)
|
||||
} label: {
|
||||
Label("Favorite", systemImage: "star.fill")
|
||||
}
|
||||
.tint(.green)
|
||||
}
|
||||
}
|
||||
|
||||
private func clearChatButton() -> some View {
|
||||
Button {
|
||||
AlertManager.shared.showAlert(clearChatAlert())
|
||||
@@ -177,7 +200,16 @@ struct ChatListNavLink: View {
|
||||
.tint(Color.orange)
|
||||
}
|
||||
|
||||
@ViewBuilder private func deleteGroupChatButton(_ groupInfo: GroupInfo) -> some View {
|
||||
private func leaveGroupChatButton(_ groupInfo: GroupInfo) -> some View {
|
||||
Button {
|
||||
AlertManager.shared.showAlert(leaveGroupAlert(groupInfo))
|
||||
} label: {
|
||||
Label("Leave", systemImage: "rectangle.portrait.and.arrow.right")
|
||||
}
|
||||
.tint(Color.yellow)
|
||||
}
|
||||
|
||||
private func deleteGroupChatButton(_ groupInfo: GroupInfo) -> some View {
|
||||
Button {
|
||||
AlertManager.shared.showAlert(deleteGroupAlert(groupInfo))
|
||||
} label: {
|
||||
|
||||
@@ -14,7 +14,8 @@ struct ChatListView: View {
|
||||
@Binding var showSettings: Bool
|
||||
@State private var searchText = ""
|
||||
@State private var showAddChat = false
|
||||
@State var userPickerVisible = false
|
||||
@State private var userPickerVisible = false
|
||||
@AppStorage(DEFAULT_SHOW_UNREAD_AND_FAVORITES) private var showUnreadAndFavorites = false
|
||||
|
||||
var body: some View {
|
||||
ZStack(alignment: .topLeading) {
|
||||
@@ -29,11 +30,7 @@ struct ChatListView: View {
|
||||
if chatModel.chats.isEmpty {
|
||||
onboardingButtons()
|
||||
}
|
||||
if chatModel.chats.count > 8 {
|
||||
chatList.searchable(text: $searchText)
|
||||
} else {
|
||||
chatList
|
||||
}
|
||||
chatListView
|
||||
}
|
||||
}
|
||||
if userPickerVisible {
|
||||
@@ -47,18 +44,12 @@ struct ChatListView: View {
|
||||
}
|
||||
}
|
||||
|
||||
var chatList: some View {
|
||||
List {
|
||||
ForEach(filteredChats(), id: \.viewId) { chat in
|
||||
ChatListNavLink(chat: chat)
|
||||
.padding(.trailing, -16)
|
||||
.disabled(chatModel.chatRunning != true)
|
||||
}
|
||||
}
|
||||
.onChange(of: chatModel.chatId) { _ in
|
||||
if chatModel.chatId == nil, let chatId = chatModel.chatToTop {
|
||||
chatModel.chatToTop = nil
|
||||
chatModel.popChat(chatId)
|
||||
private var chatListView: some View {
|
||||
VStack {
|
||||
if chatModel.chats.count > 0 {
|
||||
chatList.searchable(text: $searchText)
|
||||
} else {
|
||||
chatList
|
||||
}
|
||||
}
|
||||
.onChange(of: chatModel.appOpenUrl) { _ in connectViaUrl() }
|
||||
@@ -66,7 +57,6 @@ struct ChatListView: View {
|
||||
.onDisappear() { withAnimation { userPickerVisible = false } }
|
||||
.offset(x: -8)
|
||||
.listStyle(.plain)
|
||||
.navigationTitle("Your chats")
|
||||
.navigationBarTitleDisplayMode(.inline)
|
||||
.toolbar {
|
||||
ToolbarItem(placement: .navigationBarLeading) {
|
||||
@@ -94,17 +84,19 @@ struct ChatListView: View {
|
||||
}
|
||||
}
|
||||
ToolbarItem(placement: .principal) {
|
||||
if (chatModel.incognito) {
|
||||
HStack {
|
||||
if (chatModel.chats.count > 8) {
|
||||
Text("Your chats").font(.headline)
|
||||
Spacer().frame(width: 16)
|
||||
}
|
||||
Image(systemName: "theatermasks").frame(maxWidth: 24, maxHeight: 24, alignment: .center).foregroundColor(.indigo)
|
||||
HStack(spacing: 4) {
|
||||
if (chatModel.incognito) {
|
||||
Image(systemName: "theatermasks")
|
||||
.foregroundColor(.indigo)
|
||||
.padding(.trailing, 8)
|
||||
}
|
||||
Text("Chats")
|
||||
.font(.headline)
|
||||
if chatModel.chats.count > 0 {
|
||||
toggleFilterButton()
|
||||
}
|
||||
} else {
|
||||
Text("Your chats").font(.headline)
|
||||
}
|
||||
.frame(maxWidth: .infinity, alignment: .center)
|
||||
}
|
||||
ToolbarItem(placement: .navigationBarTrailing) {
|
||||
switch chatModel.chatRunning {
|
||||
@@ -116,6 +108,37 @@ struct ChatListView: View {
|
||||
}
|
||||
}
|
||||
|
||||
private func toggleFilterButton() -> some View {
|
||||
Button {
|
||||
showUnreadAndFavorites = !showUnreadAndFavorites
|
||||
} label: {
|
||||
Image(systemName: "line.3.horizontal.decrease.circle" + (showUnreadAndFavorites ? ".fill" : ""))
|
||||
.foregroundColor(.accentColor)
|
||||
}
|
||||
}
|
||||
|
||||
@ViewBuilder private var chatList: some View {
|
||||
let cs = filteredChats()
|
||||
ZStack {
|
||||
List {
|
||||
ForEach(cs, id: \.viewId) { chat in
|
||||
ChatListNavLink(chat: chat)
|
||||
.padding(.trailing, -16)
|
||||
.disabled(chatModel.chatRunning != true)
|
||||
}
|
||||
}
|
||||
.onChange(of: chatModel.chatId) { _ in
|
||||
if chatModel.chatId == nil, let chatId = chatModel.chatToTop {
|
||||
chatModel.chatToTop = nil
|
||||
chatModel.popChat(chatId)
|
||||
}
|
||||
}
|
||||
if cs.isEmpty && !chatModel.chats.isEmpty {
|
||||
Text("No filtered chats").foregroundColor(.secondary)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private func unreadBadge(_ text: Text? = Text(" "), size: CGFloat = 18) -> some View {
|
||||
Circle()
|
||||
.frame(width: size, height: size)
|
||||
@@ -175,19 +198,37 @@ struct ChatListView: View {
|
||||
|
||||
private func filteredChats() -> [Chat] {
|
||||
let s = searchText.trimmingCharacters(in: .whitespaces).localizedLowercase
|
||||
return s == ""
|
||||
return s == "" && !showUnreadAndFavorites
|
||||
? chatModel.chats
|
||||
: chatModel.chats.filter { chat in
|
||||
let contains = chat.chatInfo.chatViewName.localizedLowercase.contains(s)
|
||||
switch chat.chatInfo {
|
||||
let cInfo = chat.chatInfo
|
||||
switch cInfo {
|
||||
case let .direct(contact):
|
||||
return contains
|
||||
|| contact.profile.displayName.localizedLowercase.contains(s)
|
||||
|| contact.fullName.localizedLowercase.contains(s)
|
||||
case .contactConnection: return false
|
||||
default: return contains
|
||||
return s == ""
|
||||
? filtered(chat)
|
||||
: (viewNameContains(cInfo, s) ||
|
||||
contact.profile.displayName.localizedLowercase.contains(s) ||
|
||||
contact.fullName.localizedLowercase.contains(s))
|
||||
case let .group(gInfo):
|
||||
return s == ""
|
||||
? (filtered(chat) || gInfo.membership.memberStatus == .memInvited)
|
||||
: viewNameContains(cInfo, s)
|
||||
case .contactRequest:
|
||||
return s == "" || viewNameContains(cInfo, s)
|
||||
case let .contactConnection(conn):
|
||||
return s != "" && conn.localAlias.localizedLowercase.contains(s)
|
||||
case .invalidJSON:
|
||||
return false
|
||||
}
|
||||
}
|
||||
|
||||
func filtered(_ chat: Chat) -> Bool {
|
||||
(chat.chatInfo.chatSettings?.favorite ?? false) || chat.chatStats.unreadCount > 0 || chat.chatStats.unreadChat
|
||||
}
|
||||
|
||||
func viewNameContains(_ cInfo: ChatInfo, _ s: String) -> Bool {
|
||||
cInfo.chatViewName.localizedLowercase.contains(s)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -126,6 +126,13 @@ struct ChatPreviewView: View {
|
||||
} else if !chat.chatInfo.ntfsEnabled {
|
||||
Image(systemName: "speaker.slash.fill")
|
||||
.foregroundColor(.secondary)
|
||||
} else if chat.chatInfo.chatSettings?.favorite ?? false {
|
||||
Image(systemName: "star.fill")
|
||||
.resizable()
|
||||
.scaledToFill()
|
||||
.frame(width: 18, height: 18)
|
||||
.padding(.trailing, 1)
|
||||
.foregroundColor(.secondary.opacity(0.65))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -14,6 +14,7 @@ enum DatabaseAlert: Identifiable {
|
||||
case exportProhibited
|
||||
case importArchive
|
||||
case archiveImported
|
||||
case archiveImportedWithErrors(archiveErrors: [ArchiveError])
|
||||
case deleteChat
|
||||
case chatDeleted
|
||||
case deleteLegacyDatabase
|
||||
@@ -27,6 +28,7 @@ enum DatabaseAlert: Identifiable {
|
||||
case .exportProhibited: return "exportProhibited"
|
||||
case .importArchive: return "importArchive"
|
||||
case .archiveImported: return "archiveImported"
|
||||
case .archiveImportedWithErrors: return "archiveImportedWithErrors"
|
||||
case .deleteChat: return "deleteChat"
|
||||
case .chatDeleted: return "chatDeleted"
|
||||
case .deleteLegacyDatabase: return "deleteLegacyDatabase"
|
||||
@@ -251,7 +253,11 @@ struct DatabaseView: View {
|
||||
title: Text("Chat database imported"),
|
||||
message: Text("Restart the app to use imported chat database")
|
||||
)
|
||||
|
||||
case .archiveImportedWithErrors:
|
||||
return Alert(
|
||||
title: Text("Chat database imported"),
|
||||
message: Text("Restart the app to use imported chat database") + Text("\n") + Text("Some non-fatal errors occurred during import - you may see Chat console for more details.")
|
||||
)
|
||||
case .deleteChat:
|
||||
return Alert(
|
||||
title: Text("Delete chat profile?"),
|
||||
@@ -351,9 +357,13 @@ struct DatabaseView: View {
|
||||
try await apiDeleteStorage()
|
||||
do {
|
||||
let config = ArchiveConfig(archivePath: archivePath.path)
|
||||
try await apiImportArchive(config: config)
|
||||
let archiveErrors = try await apiImportArchive(config: config)
|
||||
_ = kcDatabasePassword.remove()
|
||||
await operationEnded(.archiveImported)
|
||||
if archiveErrors.isEmpty {
|
||||
await operationEnded(.archiveImported)
|
||||
} else {
|
||||
await operationEnded(.archiveImportedWithErrors(archiveErrors: archiveErrors))
|
||||
}
|
||||
} catch let error {
|
||||
await operationEnded(.error(title: "Error importing chat database", error: responseError(error)))
|
||||
}
|
||||
|
||||
@@ -203,7 +203,7 @@ struct MigrateToAppGroupView: View {
|
||||
dbContainerGroupDefault.set(.group)
|
||||
resetChatCtrl()
|
||||
try await MainActor.run { try initializeChat(start: false) }
|
||||
try await apiImportArchive(config: config)
|
||||
let _ = try await apiImportArchive(config: config)
|
||||
await MainActor.run { setV3DBMigration(.migrated) }
|
||||
} catch let error {
|
||||
dbContainerGroupDefault.set(.documents)
|
||||
|
||||
@@ -26,8 +26,8 @@ struct CustomTimePicker: View {
|
||||
case .minute: return TimeUnitLimits.init(timeUnit: .minute, maxValue: 120)
|
||||
case .hour: return TimeUnitLimits.init(timeUnit: .hour, maxValue: 72)
|
||||
case .day: return TimeUnitLimits.init(timeUnit: .day, maxValue: 60)
|
||||
case .week: return TimeUnitLimits.init(timeUnit: .week, maxValue: 12) // TODO in 5.2 - 54
|
||||
case .month: return TimeUnitLimits.init(timeUnit: .month, maxValue: 3) // TODO in 5.2 - 12
|
||||
case .week: return TimeUnitLimits.init(timeUnit: .week, maxValue: 52)
|
||||
case .month: return TimeUnitLimits.init(timeUnit: .month, maxValue: 12)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -147,6 +147,7 @@ struct DropdownCustomTimePicker: View {
|
||||
@State private var dropdownSelection: DropdownSelection = .dropdownValue(value: nil)
|
||||
@State private var showCustomTimePicker = false
|
||||
@State private var selectedCustomTime: Int? = nil
|
||||
@State private var justOpened = true
|
||||
|
||||
enum DropdownSelection: Hashable {
|
||||
case dropdownValue(value: Int?)
|
||||
@@ -167,7 +168,12 @@ struct DropdownCustomTimePicker: View {
|
||||
}
|
||||
}
|
||||
.onAppear {
|
||||
if #unavailable(iOS 16) {
|
||||
// this condition prevents re-setting picker
|
||||
if !justOpened { return }
|
||||
}
|
||||
dropdownSelection = .dropdownValue(value: selection)
|
||||
justOpened = false
|
||||
}
|
||||
.onChange(of: selection) { v in
|
||||
logger.debug("*** .onChange(of: selection)")
|
||||
|
||||
@@ -81,12 +81,11 @@ struct CreateSimpleXAddress: View {
|
||||
DispatchQueue.main.async {
|
||||
m.userAddress = UserContactLink(connReqContact: connReqContact)
|
||||
}
|
||||
// TODO uncomment in v5.2
|
||||
// if let u = try await apiSetProfileAddress(on: true) {
|
||||
// DispatchQueue.main.async {
|
||||
// m.updateUser(u)
|
||||
// }
|
||||
// }
|
||||
if let u = try await apiSetProfileAddress(on: true) {
|
||||
DispatchQueue.main.async {
|
||||
m.updateUser(u)
|
||||
}
|
||||
}
|
||||
await MainActor.run { progressIndicator = false }
|
||||
} catch let error {
|
||||
logger.error("CreateSimpleXAddress create address: \(responseError(error))")
|
||||
@@ -102,11 +101,9 @@ struct CreateSimpleXAddress: View {
|
||||
Text("Create SimpleX address").font(.title)
|
||||
}
|
||||
Text("Your contacts in SimpleX will see it.\nYou can change it in Settings.")
|
||||
// TODO remove in in v5.2
|
||||
.foregroundColor(.clear)
|
||||
.multilineTextAlignment(.center)
|
||||
.font(.footnote)
|
||||
.padding(.horizontal, 32)
|
||||
.multilineTextAlignment(.center)
|
||||
.font(.footnote)
|
||||
.padding(.horizontal, 32)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -20,7 +20,7 @@ struct PreferencesView: View {
|
||||
List {
|
||||
timedMessagesFeatureSection($preferences.timedMessages.allow)
|
||||
featureSection(.fullDelete, $preferences.fullDelete.allow)
|
||||
// featureSection(.reactions, $preferences.reactions.allow)
|
||||
featureSection(.reactions, $preferences.reactions.allow)
|
||||
featureSection(.voice, $preferences.voice.allow)
|
||||
featureSection(.calls, $preferences.calls.allow)
|
||||
|
||||
|
||||
@@ -49,6 +49,7 @@ let DEFAULT_SHOW_MUTE_PROFILE_ALERT = "showMuteProfileAlert"
|
||||
let DEFAULT_WHATS_NEW_VERSION = "defaultWhatsNewVersion"
|
||||
let DEFAULT_ONBOARDING_STAGE = "onboardingStage"
|
||||
let DEFAULT_CUSTOM_DISAPPEARING_MESSAGE_TIME = "customDisappearingMessageTime"
|
||||
let DEFAULT_SHOW_UNREAD_AND_FAVORITES = "showUnreadAndFavorites"
|
||||
|
||||
let appDefaults: [String: Any] = [
|
||||
DEFAULT_SHOW_LA_NOTICE: false,
|
||||
@@ -78,6 +79,7 @@ let appDefaults: [String: Any] = [
|
||||
DEFAULT_SHOW_MUTE_PROFILE_ALERT: true,
|
||||
DEFAULT_ONBOARDING_STAGE: OnboardingStage.onboardingComplete.rawValue,
|
||||
DEFAULT_CUSTOM_DISAPPEARING_MESSAGE_TIME: 300,
|
||||
DEFAULT_SHOW_UNREAD_AND_FAVORITES: false
|
||||
]
|
||||
|
||||
enum SimpleXLinkMode: String, Identifiable {
|
||||
|
||||
@@ -195,8 +195,7 @@ struct UserAddressView: View {
|
||||
if MFMailComposeViewController.canSendMail() {
|
||||
shareViaEmailButton(userAddress)
|
||||
}
|
||||
// TODO uncomment in 5.2
|
||||
// shareWithContactsButton()
|
||||
shareWithContactsButton()
|
||||
autoAcceptToggle()
|
||||
learnMoreButton()
|
||||
} header: {
|
||||
@@ -223,8 +222,7 @@ struct UserAddressView: View {
|
||||
let connReqContact = try await apiCreateUserAddress()
|
||||
DispatchQueue.main.async {
|
||||
chatModel.userAddress = UserContactLink(connReqContact: connReqContact)
|
||||
// TODO uncomment in 5.2
|
||||
// alert = .shareOnCreate
|
||||
alert = .shareOnCreate
|
||||
progressIndicator = false
|
||||
}
|
||||
} catch let error {
|
||||
|
||||
@@ -9,7 +9,6 @@ import SimpleXChat
|
||||
struct UserProfilesView: View {
|
||||
@EnvironmentObject private var m: ChatModel
|
||||
@Environment(\.editMode) private var editMode
|
||||
@AppStorage(DEFAULT_PERFORM_LA) private var prefPerformLA = false
|
||||
@AppStorage(DEFAULT_SHOW_HIDDEN_PROFILES_NOTICE) private var showHiddenProfilesNotice = true
|
||||
@AppStorage(DEFAULT_SHOW_MUTE_PROFILE_ALERT) private var showMuteProfileAlert = true
|
||||
@State private var showDeleteConfirmation = false
|
||||
@@ -157,7 +156,7 @@ struct UserProfilesView: View {
|
||||
case .hiddenProfilesNotice:
|
||||
return Alert(
|
||||
title: Text("Make profile private!"),
|
||||
message: Text("You can hide or mute a user profile - swipe it to the right.\nSimpleX Lock must be enabled."),
|
||||
message: Text("You can hide or mute a user profile - swipe it to the right."),
|
||||
primaryButton: .default(Text("Don't show again")) {
|
||||
showHiddenProfilesNotice = false
|
||||
},
|
||||
@@ -338,7 +337,7 @@ struct UserProfilesView: View {
|
||||
}
|
||||
.tint(.green)
|
||||
} else {
|
||||
if visibleUsersCount > 1 && prefPerformLA {
|
||||
if visibleUsersCount > 1 {
|
||||
Button("Hide") {
|
||||
selectedUser = user
|
||||
}
|
||||
|
||||
@@ -400,6 +400,18 @@
|
||||
**Upozornění**: Pokud máte mnoho připojení, spotřeba baterie a provozu může být podstatně vyšší a některá připojení mohou selhat.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Abort" xml:space="preserve">
|
||||
<source>Abort</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Abort changing address" xml:space="preserve">
|
||||
<source>Abort changing address</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Abort changing address?" xml:space="preserve">
|
||||
<source>Abort changing address?</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="About SimpleX" xml:space="preserve">
|
||||
<source>About SimpleX</source>
|
||||
<target>O SimpleX</target>
|
||||
@@ -481,6 +493,10 @@
|
||||
<target>Adresa</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</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>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Admins can create the links to join groups." xml:space="preserve">
|
||||
<source>Admins can create the links to join groups.</source>
|
||||
<target>Správci mohou vytvářet odkazy pro připojení ke skupinám.</target>
|
||||
@@ -1780,6 +1796,10 @@
|
||||
<target>Chyba</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Error aborting address change" xml:space="preserve">
|
||||
<source>Error aborting address change</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Error accepting contact request" xml:space="preserve">
|
||||
<source>Error accepting contact request</source>
|
||||
<target>Chyba při přijímání žádosti o kontakt</target>
|
||||
@@ -2040,6 +2060,10 @@
|
||||
<target>Rychle a bez čekání, než bude odesílatel online!</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Favorite" xml:space="preserve">
|
||||
<source>Favorite</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="File will be deleted from servers." xml:space="preserve">
|
||||
<source>File will be deleted from servers.</source>
|
||||
<target>Soubor bude smazán ze serverů.</target>
|
||||
@@ -3397,6 +3421,10 @@
|
||||
<target>Přijatá zpráva</target>
|
||||
<note>message info title</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Receiving address will be changed to a different server. Address change will complete after sender comes online." xml:space="preserve">
|
||||
<source>Receiving address will be changed to a different server. Address change will complete after sender comes online.</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Receiving file will be stopped." xml:space="preserve">
|
||||
<source>Receiving file will be stopped.</source>
|
||||
<target>Příjem souboru bude zastaven.</target>
|
||||
@@ -4002,6 +4030,11 @@
|
||||
<target>Přeskočené zprávy</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Some non-fatal errors occurred during import - you may see Chat console for more details." xml:space="preserve">
|
||||
<source>Some non-fatal errors occurred during import - you may see Chat console for more details.</source>
|
||||
<target>Během importu došlo k nezávažným chybám - podrobnosti naleznete v chat konzoli.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Somebody" xml:space="preserve">
|
||||
<source>Somebody</source>
|
||||
<target>Někdo</target>
|
||||
@@ -4294,11 +4327,6 @@ Může se to stát kvůli nějaké chybě, nebo pokud je spojení kompromitován
|
||||
<target>Tato chyba je pro toto připojení trvalá, připojte se znovu.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="This feature is experimental! It will only work if the other client has version 4.2 installed. You should see the message in the conversation once the address change is completed – please check that you can still receive messages from this contact (or group member)." xml:space="preserve">
|
||||
<source>This feature is experimental! It will only work if the other client has version 4.2 installed. You should see the message in the conversation once the address change is completed – please check that you can still receive messages from this contact (or group member).</source>
|
||||
<target>Tato funkce je experimentální! Bude fungovat pouze v případě, že druhý klient má nainstalovanou verzi 4.2. Po dokončení změny adresy by se měla v konverzaci zobrazit zpráva - zkontrolujte, zda můžete od tohoto kontaktu (nebo člena skupiny) stále přijímat zprávy.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="This group no longer exists." xml:space="preserve">
|
||||
<source>This group no longer exists.</source>
|
||||
<target>Tato skupina již neexistuje.</target>
|
||||
@@ -4411,6 +4439,10 @@ Před zapnutím této funkce budete vyzváni k dokončení ověření.</target>
|
||||
<target>Neočekávaný stav přenášení</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Unfav." xml:space="preserve">
|
||||
<source>Unfav.</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Unhide" xml:space="preserve">
|
||||
<source>Unhide</source>
|
||||
<target>Odkrýt</target>
|
||||
@@ -4758,11 +4790,9 @@ Chcete-li se připojit, požádejte svůj kontakt o vytvoření dalšího odkazu
|
||||
<target>Můžete vytvořit později</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="You can hide or mute a user profile - swipe it to the right. SimpleX Lock must be enabled." xml:space="preserve">
|
||||
<source>You can hide or mute a user profile - swipe it to the right.
|
||||
SimpleX Lock must be enabled.</source>
|
||||
<target>Profil uživatele můžete skrýt nebo ztlumit - přejeďte prstem doprava.
|
||||
SimpleX zámek musí být povolen.</target>
|
||||
<trans-unit id="You can hide or mute a user profile - swipe it to the right." xml:space="preserve">
|
||||
<source>You can hide or mute a user profile - swipe it to the right.</source>
|
||||
<target>Profil uživatele můžete skrýt nebo ztlumit - přejeďte prstem doprava.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="You can now send messages to %@" xml:space="preserve">
|
||||
@@ -4970,11 +5000,6 @@ SimpleX zámek musí být povolen.</target>
|
||||
<target>Vaše chat profily</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Your chats" xml:space="preserve">
|
||||
<source>Your chats</source>
|
||||
<target>Vaše konverzace</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Your contact needs to be online for the connection to complete. You can cancel this connection and remove the contact (and try later with a new link)." xml:space="preserve">
|
||||
<source>Your contact needs to be online for the connection to complete.
|
||||
You can cancel this connection and remove the contact (and try later with a new link).</source>
|
||||
@@ -5498,6 +5523,7 @@ Servery SimpleX nevidí váš profil.</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="no text" xml:space="preserve">
|
||||
<source>no text</source>
|
||||
<target>žádný text</target>
|
||||
<note>copied message info in history</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="observer" xml:space="preserve">
|
||||
|
||||
@@ -301,9 +301,9 @@
|
||||
<source>- voice messages up to 5 minutes.
|
||||
- custom time to disappear.
|
||||
- editing history.</source>
|
||||
<target>- Bis zu 5 Minuten lange Sprachnachrichten
|
||||
- Zeit für verschwindende Nachrichten anpassen
|
||||
- Vergangenheit bearbeiten</target>
|
||||
<target>- Bis zu 5 Minuten lange Sprachnachrichten.
|
||||
- Zeitdauer für verschwindende Nachrichten anpassen.
|
||||
- Nachrichten-Historie bearbeiten.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="." xml:space="preserve">
|
||||
@@ -400,6 +400,18 @@
|
||||
**Bitte beachten Sie**: Wenn Sie viele Verbindungen haben, kann der Batterieverbrauch und die Datennutzung wesentlich höher sein und einige Verbindungen können scheitern.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Abort" xml:space="preserve">
|
||||
<source>Abort</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Abort changing address" xml:space="preserve">
|
||||
<source>Abort changing address</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Abort changing address?" xml:space="preserve">
|
||||
<source>Abort changing address?</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="About SimpleX" xml:space="preserve">
|
||||
<source>About SimpleX</source>
|
||||
<target>Über SimpleX</target>
|
||||
@@ -481,6 +493,10 @@
|
||||
<target>Adresse</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</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>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Admins can create the links to join groups." xml:space="preserve">
|
||||
<source>Admins can create the links to join groups.</source>
|
||||
<target>Administratoren können Links für den Beitritt zu Gruppen erzeugen.</target>
|
||||
@@ -493,7 +509,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="All app data is deleted." xml:space="preserve">
|
||||
<source>All app data is deleted.</source>
|
||||
<target>App-Daten werden komplett gelöscht.</target>
|
||||
<target>Werden die App-Daten komplett gelöscht.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="All chats and messages will be deleted - this cannot be undone!" xml:space="preserve">
|
||||
@@ -503,7 +519,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="All data is erased when it is entered." xml:space="preserve">
|
||||
<source>All data is erased when it is entered.</source>
|
||||
<target>Sobald es eingegeben wird, werden alle Daten gelöscht.</target>
|
||||
<target>Alle Daten werden gelöscht, sobald diese eingegeben wird.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="All group members will remain connected." xml:space="preserve">
|
||||
@@ -643,12 +659,12 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="App passcode" xml:space="preserve">
|
||||
<source>App passcode</source>
|
||||
<target>App Passwort</target>
|
||||
<target>App-Zugangscode</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="App passcode is replaced with self-destruct passcode." xml:space="preserve">
|
||||
<source>App passcode is replaced with self-destruct passcode.</source>
|
||||
<target>Das App Passwort wurde durch das Selbstzerstörungspasswort ersetzt.</target>
|
||||
<target>App-Zugangscode wurde durch den Selbstzerstörungs-Zugangscode ersetzt.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="App version" xml:space="preserve">
|
||||
@@ -663,7 +679,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="Appearance" xml:space="preserve">
|
||||
<source>Appearance</source>
|
||||
<target>Design</target>
|
||||
<target>Erscheinungsbild</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Attach" xml:space="preserve">
|
||||
@@ -838,7 +854,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="Change passcode" xml:space="preserve">
|
||||
<source>Change passcode</source>
|
||||
<target>Passwort ändern</target>
|
||||
<target>Zugangscode ändern</target>
|
||||
<note>authentication reason</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Change receiving address" xml:space="preserve">
|
||||
@@ -863,7 +879,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="Change self-destruct passcode" xml:space="preserve">
|
||||
<source>Change self-destruct passcode</source>
|
||||
<target>Selbstzerstörungspasswort ändern</target>
|
||||
<target>Selbstzerstörungs-Zugangscode ändern</target>
|
||||
<note>authentication reason
|
||||
set passcode view</note>
|
||||
</trans-unit>
|
||||
@@ -874,7 +890,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="Chat console" xml:space="preserve">
|
||||
<source>Chat console</source>
|
||||
<target>Chat Konsole</target>
|
||||
<target>Chat-Konsole</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Chat database" xml:space="preserve">
|
||||
@@ -979,7 +995,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="Confirm Passcode" xml:space="preserve">
|
||||
<source>Confirm Passcode</source>
|
||||
<target>Passwort bestätigen</target>
|
||||
<target>Zugangscode bestätigen</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Confirm database upgrades" xml:space="preserve">
|
||||
@@ -1184,7 +1200,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="Current Passcode" xml:space="preserve">
|
||||
<source>Current Passcode</source>
|
||||
<target>Aktuelles Passwort</target>
|
||||
<target>Aktueller Zugangscode</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Current passphrase…" xml:space="preserve">
|
||||
@@ -1692,7 +1708,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="Enable self-destruct passcode" xml:space="preserve">
|
||||
<source>Enable self-destruct passcode</source>
|
||||
<target>Selbstzerstörungspasswort aktivieren</target>
|
||||
<target>Selbstzerstörungs-Zugangscode aktivieren</target>
|
||||
<note>set passcode view</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Encrypt" xml:space="preserve">
|
||||
@@ -1742,7 +1758,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="Enter Passcode" xml:space="preserve">
|
||||
<source>Enter Passcode</source>
|
||||
<target>Passwort eingeben</target>
|
||||
<target>Zugangscode eingeben</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Enter correct passphrase." xml:space="preserve">
|
||||
@@ -1780,6 +1796,10 @@
|
||||
<target>Fehler</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Error aborting address change" xml:space="preserve">
|
||||
<source>Error aborting address change</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Error accepting contact request" xml:space="preserve">
|
||||
<source>Error accepting contact request</source>
|
||||
<target>Fehler beim Annehmen der Kontaktanfrage</target>
|
||||
@@ -1927,7 +1947,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="Error saving passcode" xml:space="preserve">
|
||||
<source>Error saving passcode</source>
|
||||
<target>Fehler beim Speichern des Passworts</target>
|
||||
<target>Fehler beim Speichern des Zugangscodes</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Error saving passphrase to keychain" xml:space="preserve">
|
||||
@@ -2040,6 +2060,10 @@
|
||||
<target>Schnell und ohne warten auf den Absender, bis er online ist!</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Favorite" xml:space="preserve">
|
||||
<source>Favorite</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="File will be deleted from servers." xml:space="preserve">
|
||||
<source>File will be deleted from servers.</source>
|
||||
<target>Die Datei wird von den Servern gelöscht.</target>
|
||||
@@ -2307,12 +2331,12 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="If you enter this passcode when opening the app, all app data will be irreversibly removed!" xml:space="preserve">
|
||||
<source>If you enter this passcode when opening the app, all app data will be irreversibly removed!</source>
|
||||
<target>Wenn Sie dieses Passwort während des Öffnens der App eingeben, werden alle App-Daten unwiederbringlich gelöscht!</target>
|
||||
<target>Wenn Sie diesen Zugangscode während des Öffnens der App eingeben, werden alle App-Daten unwiederbringlich gelöscht!</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="If you enter your self-destruct passcode while opening the app:" xml:space="preserve">
|
||||
<source>If you enter your self-destruct passcode while opening the app:</source>
|
||||
<target>Wenn Sie Ihr Selbstzerstörungspasswort während des Öffnens der App eingeben:</target>
|
||||
<target>Wenn Sie Ihren Selbstzerstörungs-Zugangscode während des Öffnens der App eingeben:</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="If you need to use the chat now tap **Do it later** below (you will be offered to migrate the database when you restart the app)." xml:space="preserve">
|
||||
@@ -2412,7 +2436,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="Incorrect passcode" xml:space="preserve">
|
||||
<source>Incorrect passcode</source>
|
||||
<target>Passwort falsch</target>
|
||||
<target>Zugangscode ist falsch</target>
|
||||
<note>PIN entry</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Incorrect security code!" xml:space="preserve">
|
||||
@@ -2835,7 +2859,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="New Passcode" xml:space="preserve">
|
||||
<source>New Passcode</source>
|
||||
<target>Neues Passwort</target>
|
||||
<target>Neuer Zugangscode</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="New contact request" xml:space="preserve">
|
||||
@@ -3094,27 +3118,27 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="Passcode" xml:space="preserve">
|
||||
<source>Passcode</source>
|
||||
<target>Passwort</target>
|
||||
<target>Zugangscode</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Passcode changed!" xml:space="preserve">
|
||||
<source>Passcode changed!</source>
|
||||
<target>Passwort geändert!</target>
|
||||
<target>Zugangscode wurde geändert!</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Passcode entry" xml:space="preserve">
|
||||
<source>Passcode entry</source>
|
||||
<target>Passworteingabe</target>
|
||||
<target>Eingabe des Zugangscodes</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Passcode not changed!" xml:space="preserve">
|
||||
<source>Passcode not changed!</source>
|
||||
<target>Passwort wurde nicht geändert!</target>
|
||||
<target>Der Zugangscode wurde nicht geändert!</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Passcode set!" xml:space="preserve">
|
||||
<source>Passcode set!</source>
|
||||
<target>Passwort wurde geändert!</target>
|
||||
<target>Zugangscode eingestellt!</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Password to show" xml:space="preserve">
|
||||
@@ -3194,7 +3218,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="Please remember or store it securely - there is no way to recover a lost passcode!" xml:space="preserve">
|
||||
<source>Please remember or store it securely - there is no way to recover a lost passcode!</source>
|
||||
<target>Es gibt keine Möglichkeit ein vergessenes Passwort wiederherzustellen - bitte erinnern Sie sich gut daran oder speichern Sie es sicher ab!</target>
|
||||
<target>Es gibt keine Möglichkeit einen vergessenen Zugangscode wiederherzustellen - bitte erinnern Sie sich gut daran oder speichern Sie ihn sicher ab!</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Please report it to the developers." xml:space="preserve">
|
||||
@@ -3397,6 +3421,10 @@
|
||||
<target>Empfangene Nachricht</target>
|
||||
<note>message info title</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Receiving address will be changed to a different server. Address change will complete after sender comes online." xml:space="preserve">
|
||||
<source>Receiving address will be changed to a different server. Address change will complete after sender comes online.</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Receiving file will be stopped." xml:space="preserve">
|
||||
<source>Receiving file will be stopped.</source>
|
||||
<target>Der Empfang der Datei wird beendet.</target>
|
||||
@@ -3704,17 +3732,17 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="Self-destruct passcode" xml:space="preserve">
|
||||
<source>Self-destruct passcode</source>
|
||||
<target>Selbstzerstörungspasswort</target>
|
||||
<target>Selbstzerstörungs-Zugangscode</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Self-destruct passcode changed!" xml:space="preserve">
|
||||
<source>Self-destruct passcode changed!</source>
|
||||
<target>Das Selbstzerstörungspasswort wurde geändert!</target>
|
||||
<target>Der Selbstzerstörungs-Zugangscode wurde geändert!</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Self-destruct passcode enabled!" xml:space="preserve">
|
||||
<source>Self-destruct passcode enabled!</source>
|
||||
<target>Das Selbstzerstörungspasswort wurde aktiviert!</target>
|
||||
<target>Der Selbstzerstörungs-Zugangscode wurde aktiviert!</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Send" xml:space="preserve">
|
||||
@@ -3854,7 +3882,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="Set passcode" xml:space="preserve">
|
||||
<source>Set passcode</source>
|
||||
<target>Passwort eingeben</target>
|
||||
<target>Zugangscode einstellen</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Set passphrase to export" xml:space="preserve">
|
||||
@@ -4002,6 +4030,11 @@
|
||||
<target>Übersprungene Nachrichten</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Some non-fatal errors occurred during import - you may see Chat console for more details." xml:space="preserve">
|
||||
<source>Some non-fatal errors occurred during import - you may see Chat console for more details.</source>
|
||||
<target>Während des Imports sind einige nicht schwerwiegende Fehler aufgetreten - in der Chat-Konsole finden Sie weitere Einzelheiten.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Somebody" xml:space="preserve">
|
||||
<source>Somebody</source>
|
||||
<target>Jemand</target>
|
||||
@@ -4074,7 +4107,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="Submit" xml:space="preserve">
|
||||
<source>Submit</source>
|
||||
<target>Übermitteln</target>
|
||||
<target>Bestätigen</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Support SimpleX Chat" xml:space="preserve">
|
||||
@@ -4294,11 +4327,6 @@ Dies kann passieren, wenn es einen Fehler gegeben hat oder die Verbindung kompro
|
||||
<target>Es handelt sich um einen permanenten Fehler für diese Verbindung - bitte verbinden Sie sich neu.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="This feature is experimental! It will only work if the other client has version 4.2 installed. You should see the message in the conversation once the address change is completed – please check that you can still receive messages from this contact (or group member)." xml:space="preserve">
|
||||
<source>This feature is experimental! It will only work if the other client has version 4.2 installed. You should see the message in the conversation once the address change is completed – please check that you can still receive messages from this contact (or group member).</source>
|
||||
<target>Diese Funktion ist experimentell! Sie wird nur funktionieren, wenn der Kontakt ebenfalls eine SimpleX-Version ab v4.2 installiert hat. Sobald der Adress-Wechsel abgeschlossen ist, sollten Sie die Nachricht im Chat-Verlauf sehen. Bitte prüfen Sie, ob Sie weiterhin Nachrichten von diesem Kontakt (oder Gruppenmitglied) empfangen können.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="This group no longer exists." xml:space="preserve">
|
||||
<source>This group no longer exists.</source>
|
||||
<target>Diese Gruppe existiert nicht mehr.</target>
|
||||
@@ -4411,6 +4439,10 @@ Sie werden aufgefordert, die Authentifizierung abzuschließen, bevor diese Funkt
|
||||
<target>Unerwarteter Migrationsstatus</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Unfav." xml:space="preserve">
|
||||
<source>Unfav.</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Unhide" xml:space="preserve">
|
||||
<source>Unhide</source>
|
||||
<target>Verbergen aufheben</target>
|
||||
@@ -4758,11 +4790,9 @@ Bitten Sie Ihren Kontakt darum einen weiteren Verbindungs-Link zu erzeugen, um s
|
||||
<target>Sie können dies später erstellen</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="You can hide or mute a user profile - swipe it to the right. SimpleX Lock must be enabled." xml:space="preserve">
|
||||
<source>You can hide or mute a user profile - swipe it to the right.
|
||||
SimpleX Lock must be enabled.</source>
|
||||
<target>Sie können ein Benutzerprofil verbergen oder stummschalten - wischen Sie es nach rechts.
|
||||
Dafür muss die SimpleX Sperre aktiviert sein.</target>
|
||||
<trans-unit id="You can hide or mute a user profile - swipe it to the right." xml:space="preserve">
|
||||
<source>You can hide or mute a user profile - swipe it to the right.</source>
|
||||
<target>Sie können ein Benutzerprofil verbergen oder stummschalten - wischen Sie es nach rechts.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="You can now send messages to %@" xml:space="preserve">
|
||||
@@ -4970,11 +5000,6 @@ Dafür muss die SimpleX Sperre aktiviert sein.</target>
|
||||
<target>Meine Chat-Profile</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Your chats" xml:space="preserve">
|
||||
<source>Your chats</source>
|
||||
<target>Meine Chats</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Your contact needs to be online for the connection to complete. You can cancel this connection and remove the contact (and try later with a new link)." xml:space="preserve">
|
||||
<source>Your contact needs to be online for the connection to complete.
|
||||
You can cancel this connection and remove the contact (and try later with a new link).</source>
|
||||
@@ -5498,6 +5523,7 @@ SimpleX-Server können Ihr Profil nicht einsehen.</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="no text" xml:space="preserve">
|
||||
<source>no text</source>
|
||||
<target>Kein Text</target>
|
||||
<note>copied message info in history</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="observer" xml:space="preserve">
|
||||
@@ -5668,7 +5694,7 @@ SimpleX-Server können Ihr Profil nicht einsehen.</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="you are invited to group" xml:space="preserve">
|
||||
<source>you are invited to group</source>
|
||||
<target>Sie sind zur Gruppe eingeladen</target>
|
||||
<target>Sie sind zu der Gruppe eingeladen</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="you are observer" xml:space="preserve">
|
||||
|
||||
@@ -400,6 +400,21 @@
|
||||
**Please note**: if you have many connections, your battery and traffic consumption can be substantially higher and some connections may fail.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Abort" xml:space="preserve">
|
||||
<source>Abort</source>
|
||||
<target>Abort</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>Abort changing address</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>Abort changing address?</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="About SimpleX" xml:space="preserve">
|
||||
<source>About SimpleX</source>
|
||||
<target>About SimpleX</target>
|
||||
@@ -481,6 +496,11 @@
|
||||
<target>Address</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</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>Address change will be aborted. Old receiving address will be used.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Admins can create the links to join groups." xml:space="preserve">
|
||||
<source>Admins can create the links to join groups.</source>
|
||||
<target>Admins can create the links to join groups.</target>
|
||||
@@ -1780,6 +1800,11 @@
|
||||
<target>Error</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Error aborting address change" xml:space="preserve">
|
||||
<source>Error aborting address change</source>
|
||||
<target>Error aborting address change</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Error accepting contact request" xml:space="preserve">
|
||||
<source>Error accepting contact request</source>
|
||||
<target>Error accepting contact request</target>
|
||||
@@ -2040,6 +2065,11 @@
|
||||
<target>Fast and no wait until the sender is online!</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Favorite" xml:space="preserve">
|
||||
<source>Favorite</source>
|
||||
<target>Favorite</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="File will be deleted from servers." xml:space="preserve">
|
||||
<source>File will be deleted from servers.</source>
|
||||
<target>File will be deleted from servers.</target>
|
||||
@@ -3397,6 +3427,11 @@
|
||||
<target>Received message</target>
|
||||
<note>message info title</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Receiving address will be changed to a different server. Address change will complete after sender comes online." xml:space="preserve">
|
||||
<source>Receiving address will be changed to a different server. Address change will complete after sender comes online.</source>
|
||||
<target>Receiving address will be changed to a different server. Address change will complete after sender comes online.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Receiving file will be stopped." xml:space="preserve">
|
||||
<source>Receiving file will be stopped.</source>
|
||||
<target>Receiving file will be stopped.</target>
|
||||
@@ -4002,6 +4037,11 @@
|
||||
<target>Skipped messages</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Some non-fatal errors occurred during import - you may see Chat console for more details." xml:space="preserve">
|
||||
<source>Some non-fatal errors occurred during import - you may see Chat console for more details.</source>
|
||||
<target>Some non-fatal errors occurred during import - you may see Chat console for more details.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Somebody" xml:space="preserve">
|
||||
<source>Somebody</source>
|
||||
<target>Somebody</target>
|
||||
@@ -4294,11 +4334,6 @@ It can happen because of some bug or when the connection is compromised.</target
|
||||
<target>This error is permanent for this connection, please re-connect.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="This feature is experimental! It will only work if the other client has version 4.2 installed. You should see the message in the conversation once the address change is completed – please check that you can still receive messages from this contact (or group member)." xml:space="preserve">
|
||||
<source>This feature is experimental! It will only work if the other client has version 4.2 installed. You should see the message in the conversation once the address change is completed – please check that you can still receive messages from this contact (or group member).</source>
|
||||
<target>This feature is experimental! It will only work if the other client has version 4.2 installed. You should see the message in the conversation once the address change is completed – please check that you can still receive messages from this contact (or group member).</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="This group no longer exists." xml:space="preserve">
|
||||
<source>This group no longer exists.</source>
|
||||
<target>This group no longer exists.</target>
|
||||
@@ -4411,6 +4446,11 @@ You will be prompted to complete authentication before this feature is enabled.<
|
||||
<target>Unexpected migration state</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Unfav." xml:space="preserve">
|
||||
<source>Unfav.</source>
|
||||
<target>Unfav.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Unhide" xml:space="preserve">
|
||||
<source>Unhide</source>
|
||||
<target>Unhide</target>
|
||||
@@ -4758,11 +4798,9 @@ To connect, please ask your contact to create another connection link and check
|
||||
<target>You can create it later</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="You can hide or mute a user profile - swipe it to the right. SimpleX Lock must be enabled." xml:space="preserve">
|
||||
<source>You can hide or mute a user profile - swipe it to the right.
|
||||
SimpleX Lock must be enabled.</source>
|
||||
<target>You can hide or mute a user profile - swipe it to the right.
|
||||
SimpleX Lock must be enabled.</target>
|
||||
<trans-unit id="You can hide or mute a user profile - swipe it to the right." xml:space="preserve">
|
||||
<source>You can hide or mute a user profile - swipe it to the right.</source>
|
||||
<target>You can hide or mute a user profile - swipe it to the right.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="You can now send messages to %@" xml:space="preserve">
|
||||
@@ -4970,11 +5008,6 @@ SimpleX Lock must be enabled.</target>
|
||||
<target>Your chat profiles</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Your chats" xml:space="preserve">
|
||||
<source>Your chats</source>
|
||||
<target>Your chats</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Your contact needs to be online for the connection to complete. You can cancel this connection and remove the contact (and try later with a new link)." xml:space="preserve">
|
||||
<source>Your contact needs to be online for the connection to complete.
|
||||
You can cancel this connection and remove the contact (and try later with a new link).</source>
|
||||
|
||||
@@ -400,6 +400,18 @@
|
||||
**Atención**: si tienes muchas conexiones, tu consumo de batería y tráfico pueden ser sustancialmente mayores y algunas conexiones pueden fallar.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Abort" xml:space="preserve">
|
||||
<source>Abort</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Abort changing address" xml:space="preserve">
|
||||
<source>Abort changing address</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Abort changing address?" xml:space="preserve">
|
||||
<source>Abort changing address?</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="About SimpleX" xml:space="preserve">
|
||||
<source>About SimpleX</source>
|
||||
<target>Acerca de SimpleX</target>
|
||||
@@ -481,6 +493,10 @@
|
||||
<target>Dirección</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</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>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Admins can create the links to join groups." xml:space="preserve">
|
||||
<source>Admins can create the links to join groups.</source>
|
||||
<target>Los administradores pueden crear enlaces para unirse a grupos.</target>
|
||||
@@ -498,12 +514,12 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="All chats and messages will be deleted - this cannot be undone!" xml:space="preserve">
|
||||
<source>All chats and messages will be deleted - this cannot be undone!</source>
|
||||
<target>Se eliminarán todos los chats y mensajes. ¡No se puede deshacer!</target>
|
||||
<target>Se eliminarán todos los chats y mensajes. ¡No podrá deshacerse!</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="All data is erased when it is entered." xml:space="preserve">
|
||||
<source>All data is erased when it is entered.</source>
|
||||
<target>Al introducirlo todos los datos son borrados.</target>
|
||||
<target>Al introducirlo todos los datos son eliminados.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="All group members will remain connected." xml:space="preserve">
|
||||
@@ -513,7 +529,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="All messages will be deleted - this cannot be undone! The messages will be deleted ONLY for you." xml:space="preserve">
|
||||
<source>All messages will be deleted - this cannot be undone! The messages will be deleted ONLY for you.</source>
|
||||
<target>Se eliminarán todos los mensajes SOLO para tí. ¡No se puede deshacer!</target>
|
||||
<target>Se eliminarán todos los mensajes SOLO para tí. ¡No podrá deshacerse!</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="All your contacts will remain connected." xml:space="preserve">
|
||||
@@ -1019,7 +1035,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="Connect via link / QR code" xml:space="preserve">
|
||||
<source>Connect via link / QR code</source>
|
||||
<target>Conectar mediante enlace / Código QR</target>
|
||||
<target>Conecta vía enlace / Código QR</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Connect via one-time link?" xml:space="preserve">
|
||||
@@ -1079,7 +1095,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="Contact and all messages will be deleted - this cannot be undone!" xml:space="preserve">
|
||||
<source>Contact and all messages will be deleted - this cannot be undone!</source>
|
||||
<target>El contacto y todos los mensajes serán eliminados. ¡No se puede deshacer!</target>
|
||||
<target>El contacto y todos los mensajes serán eliminados. ¡No podrá deshacerse!</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Contact hidden:" xml:space="preserve">
|
||||
@@ -1099,7 +1115,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="Contact name" xml:space="preserve">
|
||||
<source>Contact name</source>
|
||||
<target>Nombre del contacto</target>
|
||||
<target>Contacto</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Contact preferences" xml:space="preserve">
|
||||
@@ -1139,7 +1155,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="Create an address to let people connect with you." xml:space="preserve">
|
||||
<source>Create an address to let people connect with you.</source>
|
||||
<target>Crear una dirección para que la gente se pueda conectar contigo.</target>
|
||||
<target>Crear una dirección para que otras personas se puedan conectar contigo.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Create file" xml:space="preserve">
|
||||
@@ -1159,7 +1175,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="Create one-time invitation link" xml:space="preserve">
|
||||
<source>Create one-time invitation link</source>
|
||||
<target>Crear enlace de invitación de un solo uso</target>
|
||||
<target>Crea enlace de invitación de un uso</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Create queue" xml:space="preserve">
|
||||
@@ -1169,7 +1185,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="Create secret group" xml:space="preserve">
|
||||
<source>Create secret group</source>
|
||||
<target>Crear grupo secreto</target>
|
||||
<target>Crea grupo secreto</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Create your profile" xml:space="preserve">
|
||||
@@ -1209,12 +1225,12 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="Database ID" xml:space="preserve">
|
||||
<source>Database ID</source>
|
||||
<target>ID de base de datos</target>
|
||||
<target>ID base de datos</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Database ID: %d" xml:space="preserve">
|
||||
<source>Database ID: %d</source>
|
||||
<target>ID de base de datos: %d</target>
|
||||
<target>ID base de datos: %d</target>
|
||||
<note>copied message info</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Database IDs and Transport isolation option." xml:space="preserve">
|
||||
@@ -1337,7 +1353,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="Delete after" xml:space="preserve">
|
||||
<source>Delete after</source>
|
||||
<target>Eliminar después de</target>
|
||||
<target>Eliminar en</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Delete all files" xml:space="preserve">
|
||||
@@ -1452,7 +1468,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="Delete messages after" xml:space="preserve">
|
||||
<source>Delete messages after</source>
|
||||
<target>Eliminar después de</target>
|
||||
<target>Eliminar en</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Delete old database" xml:space="preserve">
|
||||
@@ -1472,7 +1488,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="Delete pending connection?" xml:space="preserve">
|
||||
<source>Delete pending connection?</source>
|
||||
<target>¿Eliminar conexion pendiente?</target>
|
||||
<target>¿Eliminar la conexion pendiente?</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Delete profile" xml:space="preserve">
|
||||
@@ -1492,12 +1508,12 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="Deleted at" xml:space="preserve">
|
||||
<source>Deleted at</source>
|
||||
<target>Eliminado el</target>
|
||||
<target>Eliminado</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Deleted at: %@" xml:space="preserve">
|
||||
<source>Deleted at: %@</source>
|
||||
<target>Eliminado el: %@</target>
|
||||
<target>Eliminado: %@</target>
|
||||
<note>copied message info</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Description" xml:space="preserve">
|
||||
@@ -1572,12 +1588,12 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="Disappears at" xml:space="preserve">
|
||||
<source>Disappears at</source>
|
||||
<target>Desaparecerá el</target>
|
||||
<target>Desaparecerá</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Disappears at: %@" xml:space="preserve">
|
||||
<source>Disappears at: %@</source>
|
||||
<target>Desaparecerá el: %@</target>
|
||||
<target>Desaparecerá: %@</target>
|
||||
<note>copied message info</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Disconnect" xml:space="preserve">
|
||||
@@ -1780,6 +1796,10 @@
|
||||
<target>Error</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Error aborting address change" xml:space="preserve">
|
||||
<source>Error aborting address change</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Error accepting contact request" xml:space="preserve">
|
||||
<source>Error accepting contact request</source>
|
||||
<target>Error aceptando la solicitud del contacto</target>
|
||||
@@ -2040,6 +2060,10 @@
|
||||
<target>¡Rápido y sin necesidad de esperar a que el remitente esté en línea!</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Favorite" xml:space="preserve">
|
||||
<source>Favorite</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="File will be deleted from servers." xml:space="preserve">
|
||||
<source>File will be deleted from servers.</source>
|
||||
<target>El archivo será eliminado de los servidores.</target>
|
||||
@@ -2212,12 +2236,12 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="Group will be deleted for all members - this cannot be undone!" xml:space="preserve">
|
||||
<source>Group will be deleted for all members - this cannot be undone!</source>
|
||||
<target>El grupo se eliminará para todos los miembros. ¡No se puede deshacer!</target>
|
||||
<target>El grupo se eliminará para todos los miembros. ¡No podrá deshacerse!</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Group will be deleted for you - this cannot be undone!" xml:space="preserve">
|
||||
<source>Group will be deleted for you - this cannot be undone!</source>
|
||||
<target>El grupo se eliminará para tí. ¡No se puede deshacer!</target>
|
||||
<target>El grupo se eliminará para tí. ¡No podrá deshacerse!</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Help" xml:space="preserve">
|
||||
@@ -2237,12 +2261,12 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="Hidden profile password" xml:space="preserve">
|
||||
<source>Hidden profile password</source>
|
||||
<target>Contraseña de perfil oculto</target>
|
||||
<target>Contraseña del perfil oculto</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Hide" xml:space="preserve">
|
||||
<source>Hide</source>
|
||||
<target>Ocultar</target>
|
||||
<target>Sin vista previa</target>
|
||||
<note>chat item action</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Hide app screen in the recent apps." xml:space="preserve">
|
||||
@@ -2550,7 +2574,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="Joining group" xml:space="preserve">
|
||||
<source>Joining group</source>
|
||||
<target>Únete al grupo</target>
|
||||
<target>Entrando al grupo</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="KeyChain error" xml:space="preserve">
|
||||
@@ -2630,12 +2654,12 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="Lock after" xml:space="preserve">
|
||||
<source>Lock after</source>
|
||||
<target>Bloquear después de</target>
|
||||
<target>Bloquear en</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Lock mode" xml:space="preserve">
|
||||
<source>Lock mode</source>
|
||||
<target>Modo de bloqueo</target>
|
||||
<target>Modo bloqueo</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Make a private connection" xml:space="preserve">
|
||||
@@ -2705,7 +2729,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="Member will be removed from group - this cannot be undone!" xml:space="preserve">
|
||||
<source>Member will be removed from group - this cannot be undone!</source>
|
||||
<target>El miembro será expulsado del grupo. ¡No se puede deshacer!</target>
|
||||
<target>El miembro será expulsado del grupo. ¡No podrá deshacerse!</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Message delivery error" xml:space="preserve">
|
||||
@@ -2735,7 +2759,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="Message text" xml:space="preserve">
|
||||
<source>Message text</source>
|
||||
<target>Texto del mensaje</target>
|
||||
<target>Contacto y texto</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Messages" xml:space="preserve">
|
||||
@@ -2780,12 +2804,12 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="Moderated at" xml:space="preserve">
|
||||
<source>Moderated at</source>
|
||||
<target>Moderado el</target>
|
||||
<target>Moderado</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Moderated at: %@" xml:space="preserve">
|
||||
<source>Moderated at: %@</source>
|
||||
<target>Moderado el: %@</target>
|
||||
<target>Moderado: %@</target>
|
||||
<note>copied message info</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="More improvements are coming soon!" xml:space="preserve">
|
||||
@@ -2870,7 +2894,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="New message" xml:space="preserve">
|
||||
<source>New message</source>
|
||||
<target>mensaje nuevo</target>
|
||||
<target>Mensaje nuevo</target>
|
||||
<note>notification</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="New passphrase…" xml:space="preserve">
|
||||
@@ -2933,8 +2957,8 @@
|
||||
- delete members' messages.
|
||||
- disable members ("observer" role)</source>
|
||||
<target>Ahora los administradores pueden:
|
||||
- borrar mensajes de los miembros.
|
||||
- desactivar el rol a miembros (pasando a rol "observador")</target>
|
||||
- eliminar mensajes de los miembros.
|
||||
- desactivar el rol miembro (a rol "observador")</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Off" xml:space="preserve">
|
||||
@@ -3154,7 +3178,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="Permanent decryption error" xml:space="preserve">
|
||||
<source>Permanent decryption error</source>
|
||||
<target>Error de descifrado</target>
|
||||
<target>Error de descifrado permanente</target>
|
||||
<note>message decrypt error item</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Please ask your contact to enable sending voice messages." xml:space="preserve">
|
||||
@@ -3194,7 +3218,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="Please remember or store it securely - there is no way to recover a lost passcode!" xml:space="preserve">
|
||||
<source>Please remember or store it securely - there is no way to recover a lost passcode!</source>
|
||||
<target>Por favor, recuerda y guarda el código de acceso en un lugar seguro. ¡No hay ninguna manera de recuperar un código perdido!</target>
|
||||
<target>Por favor, recuerda y guarda el código de acceso en un lugar seguro. ¡No hay forma de recuperar un código perdido!</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Please report it to the developers." xml:space="preserve">
|
||||
@@ -3379,12 +3403,12 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="Received at" xml:space="preserve">
|
||||
<source>Received at</source>
|
||||
<target>Recibido el</target>
|
||||
<target>Recibido</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Received at: %@" xml:space="preserve">
|
||||
<source>Received at: %@</source>
|
||||
<target>Recibido el: %@</target>
|
||||
<target>Recibido: %@</target>
|
||||
<note>copied message info</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Received file event" xml:space="preserve">
|
||||
@@ -3397,6 +3421,10 @@
|
||||
<target>Mensaje entrante</target>
|
||||
<note>message info title</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Receiving address will be changed to a different server. Address change will complete after sender comes online." xml:space="preserve">
|
||||
<source>Receiving address will be changed to a different server. Address change will complete after sender comes online.</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Receiving file will be stopped." xml:space="preserve">
|
||||
<source>Receiving file will be stopped.</source>
|
||||
<target>Se detendrá la recepción del archivo.</target>
|
||||
@@ -3414,12 +3442,12 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="Record updated at" xml:space="preserve">
|
||||
<source>Record updated at</source>
|
||||
<target>Registro actualizado</target>
|
||||
<target>Registro actualiz.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Record updated at: %@" xml:space="preserve">
|
||||
<source>Record updated at: %@</source>
|
||||
<target>Registro actualizado: %@</target>
|
||||
<target>Registro actualiz: %@</target>
|
||||
<note>copied message info</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Reduced battery usage" xml:space="preserve">
|
||||
@@ -3789,12 +3817,12 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="Sent at" xml:space="preserve">
|
||||
<source>Sent at</source>
|
||||
<target>Enviado el</target>
|
||||
<target>Enviado</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Sent at: %@" xml:space="preserve">
|
||||
<source>Sent at: %@</source>
|
||||
<target>Enviado el: %@</target>
|
||||
<target>Enviado: %@</target>
|
||||
<note>copied message info</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Sent file event" xml:space="preserve">
|
||||
@@ -4002,6 +4030,11 @@
|
||||
<target>Mensajes omitidos</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Some non-fatal errors occurred during import - you may see Chat console for more details." xml:space="preserve">
|
||||
<source>Some non-fatal errors occurred during import - you may see Chat console for more details.</source>
|
||||
<target>Algunos errores no críticos ocurrieron durante la importación - para más detalles puedes ver la consola de Chat.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Somebody" xml:space="preserve">
|
||||
<source>Somebody</source>
|
||||
<target>Alguien</target>
|
||||
@@ -4294,11 +4327,6 @@ Puede ocurrir por algún bug o cuando la conexión está comprometida.</target>
|
||||
<target>El error es permanente para esta conexión, por favor vuelve a conectarte.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="This feature is experimental! It will only work if the other client has version 4.2 installed. You should see the message in the conversation once the address change is completed – please check that you can still receive messages from this contact (or group member)." xml:space="preserve">
|
||||
<source>This feature is experimental! It will only work if the other client has version 4.2 installed. You should see the message in the conversation once the address change is completed – please check that you can still receive messages from this contact (or group member).</source>
|
||||
<target>¡Experimental! Sólo funcionará si el otro cliente tiene instalada la versión 4.2. Deberías ver el mensaje en la conversación una vez completado el cambio de dirección. Comprueba que puedes seguir recibiendo mensajes de este contacto (o miembro del grupo).</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="This group no longer exists." xml:space="preserve">
|
||||
<source>This group no longer exists.</source>
|
||||
<target>Este grupo ya no existe.</target>
|
||||
@@ -4353,7 +4381,7 @@ Se te pedirá que completes la autenticación antes de activar esta función.</t
|
||||
</trans-unit>
|
||||
<trans-unit id="To reveal your hidden profile, enter a full password into a search field in **Your chat profiles** page." xml:space="preserve">
|
||||
<source>To reveal your hidden profile, enter a full password into a search field in **Your chat profiles** page.</source>
|
||||
<target>Para hacer visible tu perfil oculto, introduce la contraseña completa en el campo de búsqueda de la página **Tus perfiles Chat**.</target>
|
||||
<target>Para hacer visible tu perfil oculto, introduce la contraseña completa en el campo de búsqueda de la página **Mis perfiles**.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="To support instant push notifications the chat database has to be migrated." xml:space="preserve">
|
||||
@@ -4411,6 +4439,10 @@ Se te pedirá que completes la autenticación antes de activar esta función.</t
|
||||
<target>Estado de migración inesperado</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Unfav." xml:space="preserve">
|
||||
<source>Unfav.</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Unhide" xml:space="preserve">
|
||||
<source>Unhide</source>
|
||||
<target>Mostrar</target>
|
||||
@@ -4676,7 +4708,7 @@ Para conectarte, pide a tu contacto que cree otro enlace de conexión y comprueb
|
||||
</trans-unit>
|
||||
<trans-unit id="When available" xml:space="preserve">
|
||||
<source>When available</source>
|
||||
<target>Si disponible</target>
|
||||
<target>Si disponibles</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="When people request to connect, you can accept or reject it." xml:space="preserve">
|
||||
@@ -4759,11 +4791,9 @@ Para conectarte, pide a tu contacto que cree otro enlace de conexión y comprueb
|
||||
<target>Puedes crearlo más tarde</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="You can hide or mute a user profile - swipe it to the right. SimpleX Lock must be enabled." xml:space="preserve">
|
||||
<source>You can hide or mute a user profile - swipe it to the right.
|
||||
SimpleX Lock must be enabled.</source>
|
||||
<target>Puedes ocultar o silenciar un perfil de usuario: deslízalo hacia la derecha.
|
||||
Bloqueo SimpleX debe estar activado.</target>
|
||||
<trans-unit id="You can hide or mute a user profile - swipe it to the right." xml:space="preserve">
|
||||
<source>You can hide or mute a user profile - swipe it to the right.</source>
|
||||
<target>Puedes ocultar o silenciar un perfil de usuario: deslízalo hacia la derecha.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="You can now send messages to %@" xml:space="preserve">
|
||||
@@ -4803,7 +4833,7 @@ Bloqueo SimpleX debe estar activado.</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="You can use markdown to format messages:" xml:space="preserve">
|
||||
<source>You can use markdown to format messages:</source>
|
||||
<target>Puedes usar la sintaxis markdown para dar formato a los mensajes:</target>
|
||||
<target>Puedes usar la sintaxis markdown para dar formato a tus mensajes:</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="You can't send messages!" xml:space="preserve">
|
||||
@@ -4843,7 +4873,7 @@ Bloqueo SimpleX debe estar activado.</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="You joined this group. Connecting to inviting group member." xml:space="preserve">
|
||||
<source>You joined this group. Connecting to inviting group member.</source>
|
||||
<target>Te has unido a este grupo. Conectando con el miembro que emite la invitacíon.</target>
|
||||
<target>Te has unido a este grupo. Conectando con el emisor de la invitacíon.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="You must use the most recent version of your chat database on one device ONLY, otherwise you may stop receiving the messages from some contacts." xml:space="preserve">
|
||||
@@ -4923,12 +4953,12 @@ Bloqueo SimpleX debe estar activado.</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="Your ICE servers" xml:space="preserve">
|
||||
<source>Your ICE servers</source>
|
||||
<target>Mis servidores ICE</target>
|
||||
<target>Servidores ICE</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Your SMP servers" xml:space="preserve">
|
||||
<source>Your SMP servers</source>
|
||||
<target>Mis servidores SMP</target>
|
||||
<target>Servidores SMP</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Your SimpleX address" xml:space="preserve">
|
||||
@@ -4938,12 +4968,12 @@ Bloqueo SimpleX debe estar activado.</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="Your XFTP servers" xml:space="preserve">
|
||||
<source>Your XFTP servers</source>
|
||||
<target>Mis servidores XFTP</target>
|
||||
<target>Servidores XFTP</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Your calls" xml:space="preserve">
|
||||
<source>Your calls</source>
|
||||
<target>Mis llamadas</target>
|
||||
<target>Llamadas</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Your chat database" xml:space="preserve">
|
||||
@@ -4971,11 +5001,6 @@ Bloqueo SimpleX debe estar activado.</target>
|
||||
<target>Mis perfiles</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Your chats" xml:space="preserve">
|
||||
<source>Your chats</source>
|
||||
<target>Mis chats</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Your contact needs to be online for the connection to complete. You can cancel this connection and remove the contact (and try later with a new link)." xml:space="preserve">
|
||||
<source>Your contact needs to be online for the connection to complete.
|
||||
You can cancel this connection and remove the contact (and try later with a new link).</source>
|
||||
@@ -5089,7 +5114,7 @@ Los servidores de SimpleX no pueden ver tu perfil.</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="above, then choose:" xml:space="preserve">
|
||||
<source>above, then choose:</source>
|
||||
<target>arriba y luego elige:</target>
|
||||
<target>y después elige:</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="accepted call" xml:space="preserve">
|
||||
@@ -5499,6 +5524,7 @@ Los servidores de SimpleX no pueden ver tu perfil.</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="no text" xml:space="preserve">
|
||||
<source>no text</source>
|
||||
<target>sin texto</target>
|
||||
<note>copied message info in history</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="observer" xml:space="preserve">
|
||||
|
||||
@@ -5,137 +5,171 @@
|
||||
<tool tool-id="com.apple.dt.xcode" tool-name="Xcode" tool-version="14.2" build-num="14C18"/>
|
||||
</header>
|
||||
<body>
|
||||
<trans-unit id=" " xml:space="preserve">
|
||||
<trans-unit id=" " xml:space="preserve" approved="no">
|
||||
<source>
|
||||
</source>
|
||||
<target state="translated">
|
||||
</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id=" " xml:space="preserve">
|
||||
<trans-unit id=" " xml:space="preserve" approved="no">
|
||||
<source> </source>
|
||||
<target state="translated"> </target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id=" " xml:space="preserve">
|
||||
<trans-unit id=" " xml:space="preserve" approved="no">
|
||||
<source> </source>
|
||||
<target state="translated"> </target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id=" " xml:space="preserve">
|
||||
<trans-unit id=" " xml:space="preserve" approved="no">
|
||||
<source> </source>
|
||||
<target state="translated"> </target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id=" (" xml:space="preserve">
|
||||
<trans-unit id=" (" xml:space="preserve" approved="no">
|
||||
<source> (</source>
|
||||
<target state="translated"> (</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id=" (can be copied)" xml:space="preserve">
|
||||
<trans-unit id=" (can be copied)" xml:space="preserve" approved="no">
|
||||
<source> (can be copied)</source>
|
||||
<target state="translated"> (voidaan kopioida)</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="!1 colored!" xml:space="preserve">
|
||||
<trans-unit id="!1 colored!" xml:space="preserve" approved="no">
|
||||
<source>!1 colored!</source>
|
||||
<target state="translated">!1 värillinen!</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="#secret#" xml:space="preserve">
|
||||
<trans-unit id="#secret#" xml:space="preserve" approved="no">
|
||||
<source>#secret#</source>
|
||||
<target state="translated">#salaisuus#</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="%@" xml:space="preserve">
|
||||
<trans-unit id="%@" xml:space="preserve" approved="no">
|
||||
<source>%@</source>
|
||||
<target state="translated">% @</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="%@ %@" xml:space="preserve">
|
||||
<trans-unit id="%@ %@" xml:space="preserve" approved="no">
|
||||
<source>%@ %@</source>
|
||||
<target state="translated">%@ % @</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="%@ / %@" xml:space="preserve">
|
||||
<trans-unit id="%@ / %@" xml:space="preserve" approved="no">
|
||||
<source>%@ / %@</source>
|
||||
<target state="translated">%@ / % @</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="%@ is connected!" xml:space="preserve">
|
||||
<trans-unit id="%@ is connected!" xml:space="preserve" approved="no">
|
||||
<source>%@ is connected!</source>
|
||||
<target state="translated">%@ on yhdistetty!</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">%@ ei ole vahvistettu</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">%@ on vahvistettu</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">%@ haluaa muodostaa yhteyden!</target>
|
||||
<note>notification title</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="%d days" xml:space="preserve">
|
||||
<trans-unit id="%d days" xml:space="preserve" approved="no">
|
||||
<source>%d days</source>
|
||||
<target state="translated">%d päivää</target>
|
||||
<note>message ttl</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="%d hours" xml:space="preserve">
|
||||
<trans-unit id="%d hours" xml:space="preserve" approved="no">
|
||||
<source>%d hours</source>
|
||||
<target state="translated">%d tuntia</target>
|
||||
<note>message ttl</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="%d min" xml:space="preserve">
|
||||
<trans-unit id="%d min" xml:space="preserve" approved="no">
|
||||
<source>%d min</source>
|
||||
<target state="translated">%d min</target>
|
||||
<note>message ttl</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="%d months" xml:space="preserve">
|
||||
<trans-unit id="%d months" xml:space="preserve" approved="no">
|
||||
<source>%d months</source>
|
||||
<target state="translated">%d kuukautta</target>
|
||||
<note>message ttl</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="%d sec" xml:space="preserve">
|
||||
<trans-unit id="%d sec" xml:space="preserve" approved="no">
|
||||
<source>%d sec</source>
|
||||
<target state="translated">%d sek</target>
|
||||
<note>message ttl</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="%d skipped message(s)" xml:space="preserve">
|
||||
<trans-unit id="%d skipped message(s)" xml:space="preserve" approved="no">
|
||||
<source>%d skipped message(s)</source>
|
||||
<target state="translated">%d ohitettua viestiä</target>
|
||||
<note>integrity error chat item</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="%lld" xml:space="preserve">
|
||||
<trans-unit id="%lld" xml:space="preserve" approved="no">
|
||||
<source>%lld</source>
|
||||
<target state="translated">%lld</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="%lld %@" xml:space="preserve">
|
||||
<trans-unit id="%lld %@" xml:space="preserve" approved="no">
|
||||
<source>%lld %@</source>
|
||||
<target state="translated">%lld %@</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="%lld contact(s) selected" xml:space="preserve">
|
||||
<trans-unit id="%lld contact(s) selected" xml:space="preserve" approved="no">
|
||||
<source>%lld contact(s) selected</source>
|
||||
<target state="translated">%lld kontaktia valittu</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="%lld file(s) with total size of %@" xml:space="preserve">
|
||||
<trans-unit id="%lld file(s) with total size of %@" xml:space="preserve" approved="no">
|
||||
<source>%lld file(s) with total size of %@</source>
|
||||
<target state="translated">%lld tiedosto(a), joiden kokonaiskoko on %@</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="%lld members" xml:space="preserve">
|
||||
<trans-unit id="%lld members" xml:space="preserve" approved="no">
|
||||
<source>%lld members</source>
|
||||
<target state="translated">%lld jäsenet</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="%lld second(s)" xml:space="preserve">
|
||||
<trans-unit id="%lld second(s)" xml:space="preserve" approved="no">
|
||||
<source>%lld second(s)</source>
|
||||
<target state="translated">%lld sekunti(a)</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="%lldd" xml:space="preserve">
|
||||
<trans-unit id="%lldd" xml:space="preserve" approved="no">
|
||||
<source>%lldd</source>
|
||||
<target state="translated">%lldd</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="%lldh" xml:space="preserve">
|
||||
<trans-unit id="%lldh" xml:space="preserve" approved="no">
|
||||
<source>%lldh</source>
|
||||
<target state="translated">%lldh</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="%lldk" xml:space="preserve">
|
||||
<trans-unit id="%lldk" xml:space="preserve" approved="no">
|
||||
<source>%lldk</source>
|
||||
<target state="translated">%lldk</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="%lldm" xml:space="preserve">
|
||||
<trans-unit id="%lldm" xml:space="preserve" approved="no">
|
||||
<source>%lldm</source>
|
||||
<target state="translated">%lldm</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="%lldmth" xml:space="preserve">
|
||||
<trans-unit id="%lldmth" xml:space="preserve" approved="no">
|
||||
<source>%lldmth</source>
|
||||
<target state="translated">%lldmth</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="%llds" xml:space="preserve">
|
||||
<trans-unit id="%llds" xml:space="preserve" approved="no">
|
||||
<source>%llds</source>
|
||||
<target state="translated">%llds</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="%lldw" xml:space="preserve">
|
||||
@@ -3750,6 +3784,41 @@ SimpleX servers cannot see your profile.</source>
|
||||
<source>\~strike~</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="%@ (current)" xml:space="preserve" approved="no">
|
||||
<source>%@ (current)</source>
|
||||
<target state="translated">%@ (nykyinen)</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="%@ (current):" xml:space="preserve" approved="no">
|
||||
<source>%@ (current):</source>
|
||||
<target state="translated">% (nykyinen):</target>
|
||||
<note>copied message info</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="%@ servers" xml:space="preserve" approved="no">
|
||||
<source>%@ servers</source>
|
||||
<target state="translated">%@ palvelimet</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="%lld minutes" xml:space="preserve" approved="no">
|
||||
<source>%lld minutes</source>
|
||||
<target state="translated">%lld minuuttia</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="%@:" xml:space="preserve" approved="no">
|
||||
<source>%@:</source>
|
||||
<target state="needs-translation">%@:</target>
|
||||
<note>copied message info</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="%d weeks" xml:space="preserve" approved="no">
|
||||
<source>%d weeks</source>
|
||||
<target state="translated">%d viikkoa</target>
|
||||
<note>time interval</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="%lld seconds" xml:space="preserve" approved="no">
|
||||
<source>%lld seconds</source>
|
||||
<target state="translated">%lld sekuntia</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="fi" datatype="plaintext">
|
||||
|
||||
@@ -400,6 +400,18 @@
|
||||
**Veuillez noter** : si vous avez de nombreuses connexions, votre consommation de batterie et de réseau peut être nettement plus élevée et certaines liaisons peuvent échouer.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Abort" xml:space="preserve">
|
||||
<source>Abort</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Abort changing address" xml:space="preserve">
|
||||
<source>Abort changing address</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Abort changing address?" xml:space="preserve">
|
||||
<source>Abort changing address?</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="About SimpleX" xml:space="preserve">
|
||||
<source>About SimpleX</source>
|
||||
<target>À propos de SimpleX</target>
|
||||
@@ -481,6 +493,10 @@
|
||||
<target>Adresse</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</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>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Admins can create the links to join groups." xml:space="preserve">
|
||||
<source>Admins can create the links to join groups.</source>
|
||||
<target>Les admins peuvent créer les liens qui permettent de rejoindre les groupes.</target>
|
||||
@@ -1572,12 +1588,12 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="Disappears at" xml:space="preserve">
|
||||
<source>Disappears at</source>
|
||||
<target>Disparaît à</target>
|
||||
<target>Disparaîtra le</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Disappears at: %@" xml:space="preserve">
|
||||
<source>Disappears at: %@</source>
|
||||
<target>Disparaît à : %@</target>
|
||||
<target>Disparaîtra le : %@</target>
|
||||
<note>copied message info</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Disconnect" xml:space="preserve">
|
||||
@@ -1780,6 +1796,10 @@
|
||||
<target>Erreur</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Error aborting address change" xml:space="preserve">
|
||||
<source>Error aborting address change</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Error accepting contact request" xml:space="preserve">
|
||||
<source>Error accepting contact request</source>
|
||||
<target>Erreur de validation de la demande de contact</target>
|
||||
@@ -2040,6 +2060,10 @@
|
||||
<target>Rapide et ne nécessitant pas d'attendre que l'expéditeur soit en ligne !</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Favorite" xml:space="preserve">
|
||||
<source>Favorite</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="File will be deleted from servers." xml:space="preserve">
|
||||
<source>File will be deleted from servers.</source>
|
||||
<target>Le fichier sera supprimé des serveurs.</target>
|
||||
@@ -3397,6 +3421,10 @@
|
||||
<target>Message reçu</target>
|
||||
<note>message info title</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Receiving address will be changed to a different server. Address change will complete after sender comes online." xml:space="preserve">
|
||||
<source>Receiving address will be changed to a different server. Address change will complete after sender comes online.</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Receiving file will be stopped." xml:space="preserve">
|
||||
<source>Receiving file will be stopped.</source>
|
||||
<target>La réception du fichier sera interrompue.</target>
|
||||
@@ -4002,6 +4030,11 @@
|
||||
<target>Messages manqués</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Some non-fatal errors occurred during import - you may see Chat console for more details." xml:space="preserve">
|
||||
<source>Some non-fatal errors occurred during import - you may see Chat console for more details.</source>
|
||||
<target>Des erreurs non fatales se sont produites lors de l'importation - vous pouvez consulter la console de chat pour plus de détails.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Somebody" xml:space="preserve">
|
||||
<source>Somebody</source>
|
||||
<target>Quelqu'un</target>
|
||||
@@ -4294,11 +4327,6 @@ Cela peut se produire en raison d'un bug ou lorsque la connexion est compromise.
|
||||
<target>Cette erreur est persistante pour cette connexion, veuillez vous reconnecter.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="This feature is experimental! It will only work if the other client has version 4.2 installed. You should see the message in the conversation once the address change is completed – please check that you can still receive messages from this contact (or group member)." xml:space="preserve">
|
||||
<source>This feature is experimental! It will only work if the other client has version 4.2 installed. You should see the message in the conversation once the address change is completed – please check that you can still receive messages from this contact (or group member).</source>
|
||||
<target>Cette fonctionnalité est expérimentale ! Elle ne fonctionnera que si l'autre client a la version 4.2 installée. Vous devriez voir le message dans la conversation une fois le changement d'adresse effectué. Vérifiez que vous pouvez toujours recevoir des messages de ce contact (ou membre du groupe).</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="This group no longer exists." xml:space="preserve">
|
||||
<source>This group no longer exists.</source>
|
||||
<target>Ce groupe n'existe plus.</target>
|
||||
@@ -4411,6 +4439,10 @@ Vous serez invité à confirmer l'authentification avant que cette fonction ne s
|
||||
<target>État de la migration inattendu</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Unfav." xml:space="preserve">
|
||||
<source>Unfav.</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Unhide" xml:space="preserve">
|
||||
<source>Unhide</source>
|
||||
<target>Dévoiler</target>
|
||||
@@ -4758,11 +4790,9 @@ Pour vous connecter, veuillez demander à votre contact de créer un autre lien
|
||||
<target>Vous pouvez la créer plus tard</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="You can hide or mute a user profile - swipe it to the right. SimpleX Lock must be enabled." xml:space="preserve">
|
||||
<source>You can hide or mute a user profile - swipe it to the right.
|
||||
SimpleX Lock must be enabled.</source>
|
||||
<target>Vous pouvez masquer ou mettre en sourdine un profil d'utilisateur - faites-le glisser vers la droite.
|
||||
SimpleX Lock doit être activé.</target>
|
||||
<trans-unit id="You can hide or mute a user profile - swipe it to the right." xml:space="preserve">
|
||||
<source>You can hide or mute a user profile - swipe it to the right.</source>
|
||||
<target>Vous pouvez masquer ou mettre en sourdine un profil d'utilisateur - faites-le glisser vers la droite.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="You can now send messages to %@" xml:space="preserve">
|
||||
@@ -4970,11 +5000,6 @@ SimpleX Lock doit être activé.</target>
|
||||
<target>Vos profils de chat</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Your chats" xml:space="preserve">
|
||||
<source>Your chats</source>
|
||||
<target>Vos chats</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Your contact needs to be online for the connection to complete. You can cancel this connection and remove the contact (and try later with a new link)." xml:space="preserve">
|
||||
<source>Your contact needs to be online for the connection to complete.
|
||||
You can cancel this connection and remove the contact (and try later with a new link).</source>
|
||||
@@ -5498,6 +5523,7 @@ Les serveurs SimpleX ne peuvent pas voir votre profil.</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="no text" xml:space="preserve">
|
||||
<source>no text</source>
|
||||
<target>aucun texte</target>
|
||||
<note>copied message info in history</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="observer" xml:space="preserve">
|
||||
|
||||
@@ -5,9 +5,11 @@
|
||||
<tool tool-id="com.apple.dt.xcode" tool-name="Xcode" tool-version="14.2" build-num="14C18"/>
|
||||
</header>
|
||||
<body>
|
||||
<trans-unit id=" " xml:space="preserve">
|
||||
<trans-unit id=" " xml:space="preserve" approved="no">
|
||||
<source>
|
||||
</source>
|
||||
<target state="translated">
|
||||
</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id=" Available in v5.1" xml:space="preserve">
|
||||
@@ -15,168 +17,209 @@
|
||||
Available in v5.1</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id=" " xml:space="preserve">
|
||||
<trans-unit id=" " xml:space="preserve" approved="no">
|
||||
<source> </source>
|
||||
<target state="translated"> </target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id=" " xml:space="preserve">
|
||||
<trans-unit id=" " xml:space="preserve" approved="no">
|
||||
<source> </source>
|
||||
<target state="translated"> </target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id=" " xml:space="preserve">
|
||||
<trans-unit id=" " xml:space="preserve" approved="no">
|
||||
<source> </source>
|
||||
<target state="translated"> </target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id=" (" xml:space="preserve">
|
||||
<trans-unit id=" (" xml:space="preserve" approved="no">
|
||||
<source> (</source>
|
||||
<target state="translated"> (</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id=" (can be copied)" xml:space="preserve">
|
||||
<trans-unit id=" (can be copied)" xml:space="preserve" approved="no">
|
||||
<source> (can be copied)</source>
|
||||
<target state="translated"> (ניתן להעתקה)</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="!1 colored!" xml:space="preserve">
|
||||
<trans-unit id="!1 colored!" xml:space="preserve" approved="no">
|
||||
<source>!1 colored!</source>
|
||||
<target state="translated">!1 צבעוני!</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="#secret#" xml:space="preserve">
|
||||
<trans-unit id="#secret#" xml:space="preserve" approved="no">
|
||||
<source>#secret#</source>
|
||||
<target state="translated">#סוד#</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="%@" xml:space="preserve">
|
||||
<trans-unit id="%@" xml:space="preserve" approved="no">
|
||||
<source>%@</source>
|
||||
<target state="translated">%@</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="%@ %@" xml:space="preserve">
|
||||
<trans-unit id="%@ %@" xml:space="preserve" approved="no">
|
||||
<source>%@ %@</source>
|
||||
<target state="translated">%@ %@</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="%@ / %@" xml:space="preserve">
|
||||
<trans-unit id="%@ / %@" xml:space="preserve" approved="no">
|
||||
<source>%@ / %@</source>
|
||||
<target state="translated">%@ / %@</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="%@ is connected!" xml:space="preserve">
|
||||
<trans-unit id="%@ is connected!" xml:space="preserve" approved="no">
|
||||
<source>%@ is connected!</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">
|
||||
<trans-unit id="%d days" xml:space="preserve" approved="no">
|
||||
<source>%d days</source>
|
||||
<target state="translated">%d ימים</target>
|
||||
<note>message ttl</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="%d hours" xml:space="preserve">
|
||||
<trans-unit id="%d hours" xml:space="preserve" approved="no">
|
||||
<source>%d hours</source>
|
||||
<target state="translated">%d שעות</target>
|
||||
<note>message ttl</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="%d min" xml:space="preserve">
|
||||
<trans-unit id="%d min" xml:space="preserve" approved="no">
|
||||
<source>%d min</source>
|
||||
<target state="translated">%d דקה</target>
|
||||
<note>message ttl</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="%d months" xml:space="preserve">
|
||||
<trans-unit id="%d months" xml:space="preserve" approved="no">
|
||||
<source>%d months</source>
|
||||
<target state="translated">%d חודשים</target>
|
||||
<note>message ttl</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="%d sec" xml:space="preserve">
|
||||
<trans-unit id="%d sec" xml:space="preserve" approved="no">
|
||||
<source>%d sec</source>
|
||||
<target state="translated">%d שנייה</target>
|
||||
<note>message ttl</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="%d skipped message(s)" xml:space="preserve">
|
||||
<trans-unit id="%d skipped message(s)" xml:space="preserve" approved="no">
|
||||
<source>%d skipped message(s)</source>
|
||||
<target state="translated">%d הודעות שדולגו</target>
|
||||
<note>integrity error chat item</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="%lld" xml:space="preserve">
|
||||
<trans-unit id="%lld" xml:space="preserve" approved="no">
|
||||
<source>%lld</source>
|
||||
<target state="translated">%lld</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="%lld %@" xml:space="preserve">
|
||||
<trans-unit id="%lld %@" xml:space="preserve" approved="no">
|
||||
<source>%lld %@</source>
|
||||
<target state="translated">%lld %@</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="%lld contact(s) selected" xml:space="preserve">
|
||||
<trans-unit id="%lld contact(s) selected" xml:space="preserve" approved="no">
|
||||
<source>%lld contact(s) selected</source>
|
||||
<target state="translated">%lld אנשי קשר נבחרו</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="%lld file(s) with total size of %@" xml:space="preserve">
|
||||
<trans-unit id="%lld file(s) with total size of %@" xml:space="preserve" approved="no">
|
||||
<source>%lld file(s) with total size of %@</source>
|
||||
<target state="translated">%lld קבצים בגודל כולל של %@</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="%lld members" xml:space="preserve">
|
||||
<trans-unit id="%lld members" xml:space="preserve" approved="no">
|
||||
<source>%lld members</source>
|
||||
<target state="translated">%lld חברי קבוצה</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="%lld minutes" xml:space="preserve">
|
||||
<trans-unit id="%lld minutes" xml:space="preserve" approved="no">
|
||||
<source>%lld minutes</source>
|
||||
<target state="translated">%lld דקות</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="%lld second(s)" xml:space="preserve">
|
||||
<trans-unit id="%lld second(s)" xml:space="preserve" approved="no">
|
||||
<source>%lld second(s)</source>
|
||||
<target state="translated">%lld שניות</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="%lld seconds" xml:space="preserve">
|
||||
<trans-unit id="%lld seconds" xml:space="preserve" approved="no">
|
||||
<source>%lld seconds</source>
|
||||
<target state="translated">%lld שניות</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="%lldd" xml:space="preserve">
|
||||
<trans-unit id="%lldd" xml:space="preserve" approved="no">
|
||||
<source>%lldd</source>
|
||||
<target state="translated">%lld ימ׳</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="%lldh" xml:space="preserve">
|
||||
<trans-unit id="%lldh" xml:space="preserve" approved="no">
|
||||
<source>%lldh</source>
|
||||
<target state="translated">%lld שע׳</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="%lldk" xml:space="preserve">
|
||||
<trans-unit id="%lldk" xml:space="preserve" approved="no">
|
||||
<source>%lldk</source>
|
||||
<target state="translated">%lld אלף</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="%lldm" xml:space="preserve">
|
||||
<trans-unit id="%lldm" xml:space="preserve" approved="no">
|
||||
<source>%lldm</source>
|
||||
<target state="translated">%lld דק׳</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="%lldmth" xml:space="preserve">
|
||||
<trans-unit id="%lldmth" xml:space="preserve" approved="no">
|
||||
<source>%lldmth</source>
|
||||
<target state="translated">%lld ח׳</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="%llds" xml:space="preserve">
|
||||
<trans-unit id="%llds" xml:space="preserve" approved="no">
|
||||
<source>%llds</source>
|
||||
<target state="translated">%lld שנ׳</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="%lldw" xml:space="preserve">
|
||||
<trans-unit id="%lldw" xml:space="preserve" approved="no">
|
||||
<source>%lldw</source>
|
||||
<target state="translated">%lld שב׳</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="%u messages failed to decrypt." xml:space="preserve">
|
||||
<trans-unit id="%u messages failed to decrypt." xml:space="preserve" approved="no">
|
||||
<source>%u messages failed to decrypt.</source>
|
||||
<target state="translated">%u הודעות לא הצליחו לעבור פענוח.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="%u messages skipped." xml:space="preserve">
|
||||
<trans-unit id="%u messages skipped." xml:space="preserve" approved="no">
|
||||
<source>%u messages skipped.</source>
|
||||
<target state="translated">%u הודעות דולגו.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="(" xml:space="preserve">
|
||||
<trans-unit id="(" xml:space="preserve" approved="no">
|
||||
<source>(</source>
|
||||
<target state="translated">(</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id=")" xml:space="preserve">
|
||||
<trans-unit id=")" xml:space="preserve" approved="no">
|
||||
<source>)</source>
|
||||
<target state="translated">)</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">
|
||||
<trans-unit id="**Add new contact**: to create your one-time QR Code for your contact." xml:space="preserve" approved="no">
|
||||
<source>**Add new contact**: to create your one-time QR Code or link for your contact.</source>
|
||||
<target state="translated">**הוסיפו איש קשר חדש**: ליצירת קוד QR או קישור חד־פעמיים עבור איש הקשר שלכם.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="**Create link / QR code** for your contact to use." xml:space="preserve">
|
||||
@@ -4162,6 +4205,26 @@ SimpleX servers cannot see your profile.</source>
|
||||
<source>\~strike~</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="%@ (current)" xml:space="preserve" approved="no">
|
||||
<source>%@ (current)</source>
|
||||
<target state="translated">%@ (נוכחי)</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="%@ (current):" xml:space="preserve" approved="no">
|
||||
<source>%@ (current):</source>
|
||||
<target state="translated">%@ (נוכחי):</target>
|
||||
<note>copied message info</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="%d weeks" xml:space="preserve" approved="no">
|
||||
<source>%d weeks</source>
|
||||
<target state="translated">%d שבועות</target>
|
||||
<note>time interval</note>
|
||||
</trans-unit>
|
||||
</body>
|
||||
</file>
|
||||
<file original="en.lproj/SimpleX--iOS--InfoPlist.strings" source-language="en" target-language="he" datatype="plaintext">
|
||||
|
||||
@@ -74,7 +74,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="%@ is connected!" xml:space="preserve">
|
||||
<source>%@ is connected!</source>
|
||||
<target>%@ è connesso!</target>
|
||||
<target>%@ è connesso/a!</target>
|
||||
<note>notification title</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="%@ is not verified" xml:space="preserve">
|
||||
@@ -400,6 +400,18 @@
|
||||
** Nota**: se hai molte connessioni, il consumo di batteria e traffico può essere notevolmente superiore e alcune connessioni potrebbero fallire.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Abort" xml:space="preserve">
|
||||
<source>Abort</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Abort changing address" xml:space="preserve">
|
||||
<source>Abort changing address</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Abort changing address?" xml:space="preserve">
|
||||
<source>Abort changing address?</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="About SimpleX" xml:space="preserve">
|
||||
<source>About SimpleX</source>
|
||||
<target>Riguardo SimpleX</target>
|
||||
@@ -481,6 +493,10 @@
|
||||
<target>Indirizzo</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</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>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Admins can create the links to join groups." xml:space="preserve">
|
||||
<source>Admins can create the links to join groups.</source>
|
||||
<target>Gli amministratori possono creare i link per entrare nei gruppi.</target>
|
||||
@@ -613,7 +629,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="Already connected?" xml:space="preserve">
|
||||
<source>Already connected?</source>
|
||||
<target>Già connesso?</target>
|
||||
<target>Già connesso/a?</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Always use relay" xml:space="preserve">
|
||||
@@ -1054,7 +1070,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="Connection request" xml:space="preserve">
|
||||
<source>Connection request</source>
|
||||
<target>Richieste di connessione</target>
|
||||
<target>Richiesta di connessione</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Connection request sent!" xml:space="preserve">
|
||||
@@ -1780,6 +1796,10 @@
|
||||
<target>Errore</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Error aborting address change" xml:space="preserve">
|
||||
<source>Error aborting address change</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Error accepting contact request" xml:space="preserve">
|
||||
<source>Error accepting contact request</source>
|
||||
<target>Errore nell'accettazione della richiesta di contatto</target>
|
||||
@@ -2040,6 +2060,10 @@
|
||||
<target>Veloce e senza aspettare che il mittente sia in linea!</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Favorite" xml:space="preserve">
|
||||
<source>Favorite</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="File will be deleted from servers." xml:space="preserve">
|
||||
<source>File will be deleted from servers.</source>
|
||||
<target>Il file verrà eliminato dai server.</target>
|
||||
@@ -3397,6 +3421,10 @@
|
||||
<target>Messaggio ricevuto</target>
|
||||
<note>message info title</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Receiving address will be changed to a different server. Address change will complete after sender comes online." xml:space="preserve">
|
||||
<source>Receiving address will be changed to a different server. Address change will complete after sender comes online.</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Receiving file will be stopped." xml:space="preserve">
|
||||
<source>Receiving file will be stopped.</source>
|
||||
<target>La ricezione del file verrà interrotta.</target>
|
||||
@@ -4002,6 +4030,11 @@
|
||||
<target>Messaggi saltati</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Some non-fatal errors occurred during import - you may see Chat console for more details." xml:space="preserve">
|
||||
<source>Some non-fatal errors occurred during import - you may see Chat console for more details.</source>
|
||||
<target>Si sono verificati alcuni errori non gravi durante l'importazione: vedi la console della chat per i dettagli.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Somebody" xml:space="preserve">
|
||||
<source>Somebody</source>
|
||||
<target>Qualcuno</target>
|
||||
@@ -4294,11 +4327,6 @@ Può accadere a causa di qualche bug o quando la connessione è compromessa.</ta
|
||||
<target>L'errore è permanente per questa connessione, riconnettiti.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="This feature is experimental! It will only work if the other client has version 4.2 installed. You should see the message in the conversation once the address change is completed – please check that you can still receive messages from this contact (or group member)." xml:space="preserve">
|
||||
<source>This feature is experimental! It will only work if the other client has version 4.2 installed. You should see the message in the conversation once the address change is completed – please check that you can still receive messages from this contact (or group member).</source>
|
||||
<target>Questa funzionalità è sperimentale! Funzionerà solo se l'altro client ha la versione 4.2 installata. Dovresti vedere il messaggio nella conversazione una volta completato il cambio di indirizzo. Controlla di potere ancora ricevere messaggi da questo contatto (o membro del gruppo).</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="This group no longer exists." xml:space="preserve">
|
||||
<source>This group no longer exists.</source>
|
||||
<target>Questo gruppo non esiste più.</target>
|
||||
@@ -4411,6 +4439,10 @@ Ti verrà chiesto di completare l'autenticazione prima di attivare questa funzio
|
||||
<target>Stato di migrazione imprevisto</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Unfav." xml:space="preserve">
|
||||
<source>Unfav.</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Unhide" xml:space="preserve">
|
||||
<source>Unhide</source>
|
||||
<target>Svela</target>
|
||||
@@ -4470,7 +4502,7 @@ Per connetterti, chiedi al tuo contatto di creare un altro link di connessione e
|
||||
</trans-unit>
|
||||
<trans-unit id="Unmute" xml:space="preserve">
|
||||
<source>Unmute</source>
|
||||
<target>Riattiva audio</target>
|
||||
<target>Riattiva notifiche</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Unread" xml:space="preserve">
|
||||
@@ -4735,7 +4767,7 @@ Per connetterti, chiedi al tuo contatto di creare un altro link di connessione e
|
||||
</trans-unit>
|
||||
<trans-unit id="You are connected to the server used to receive messages from this contact." xml:space="preserve">
|
||||
<source>You are connected to the server used to receive messages from this contact.</source>
|
||||
<target>Sei connesso al server usato per ricevere messaggi da questo contatto.</target>
|
||||
<target>Sei connesso/a al server usato per ricevere messaggi da questo contatto.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="You are invited to group" xml:space="preserve">
|
||||
@@ -4758,11 +4790,9 @@ Per connetterti, chiedi al tuo contatto di creare un altro link di connessione e
|
||||
<target>Puoi crearlo più tardi</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="You can hide or mute a user profile - swipe it to the right. SimpleX Lock must be enabled." xml:space="preserve">
|
||||
<source>You can hide or mute a user profile - swipe it to the right.
|
||||
SimpleX Lock must be enabled.</source>
|
||||
<target>Puoi nascondere o silenziare un profilo utente - scorrilo verso destra.
|
||||
SimpleX Lock deve essere attivato.</target>
|
||||
<trans-unit id="You can hide or mute a user profile - swipe it to the right." xml:space="preserve">
|
||||
<source>You can hide or mute a user profile - swipe it to the right.</source>
|
||||
<target>Puoi nascondere o silenziare un profilo utente - scorrilo verso destra.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="You can now send messages to %@" xml:space="preserve">
|
||||
@@ -4970,11 +5000,6 @@ SimpleX Lock deve essere attivato.</target>
|
||||
<target>I tuoi profili di chat</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Your chats" xml:space="preserve">
|
||||
<source>Your chats</source>
|
||||
<target>Le tue chat</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Your contact needs to be online for the connection to complete. You can cancel this connection and remove the contact (and try later with a new link)." xml:space="preserve">
|
||||
<source>Your contact needs to be online for the connection to complete.
|
||||
You can cancel this connection and remove the contact (and try later with a new link).</source>
|
||||
@@ -5188,7 +5213,7 @@ I server di SimpleX non possono vedere il tuo profilo.</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="connected" xml:space="preserve">
|
||||
<source>connected</source>
|
||||
<target>connesso</target>
|
||||
<target>connesso/a</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="connecting" xml:space="preserve">
|
||||
@@ -5398,12 +5423,12 @@ I server di SimpleX non possono vedere il tuo profilo.</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="invited" xml:space="preserve">
|
||||
<source>invited</source>
|
||||
<target>invitato</target>
|
||||
<target>ha invitato</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="invited %@" xml:space="preserve">
|
||||
<source>invited %@</source>
|
||||
<target>invitato %@</target>
|
||||
<target>ha invitato %@</target>
|
||||
<note>rcv group event chat item</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="invited to connect" xml:space="preserve">
|
||||
@@ -5428,7 +5453,7 @@ I server di SimpleX non possono vedere il tuo profilo.</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="left" xml:space="preserve">
|
||||
<source>left</source>
|
||||
<target>uscito/a</target>
|
||||
<target>è uscito/a</target>
|
||||
<note>rcv group event chat item</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="marked deleted" xml:space="preserve">
|
||||
@@ -5443,7 +5468,7 @@ I server di SimpleX non possono vedere il tuo profilo.</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="member connected" xml:space="preserve">
|
||||
<source>connected</source>
|
||||
<target>connesso</target>
|
||||
<target>connesso/a</target>
|
||||
<note>rcv group event chat item</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="message received" xml:space="preserve">
|
||||
@@ -5498,6 +5523,7 @@ I server di SimpleX non possono vedere il tuo profilo.</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="no text" xml:space="preserve">
|
||||
<source>no text</source>
|
||||
<target>nessun testo</target>
|
||||
<note>copied message info in history</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="observer" xml:space="preserve">
|
||||
@@ -5558,12 +5584,12 @@ I server di SimpleX non possono vedere il tuo profilo.</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="removed" xml:space="preserve">
|
||||
<source>removed</source>
|
||||
<target>rimosso</target>
|
||||
<target>ha rimosso</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="removed %@" xml:space="preserve">
|
||||
<source>removed %@</source>
|
||||
<target>rimosso %@</target>
|
||||
<target>ha rimosso %@</target>
|
||||
<note>rcv group event chat item</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="removed you" xml:space="preserve">
|
||||
|
||||
@@ -154,7 +154,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="%lld file(s) with total size of %@" xml:space="preserve">
|
||||
<source>%lld file(s) with total size of %@</source>
|
||||
<target>合計サイズ %@ の %lld 件のファイル</target>
|
||||
<target>%lld 個のファイル(合計サイズ: %@)</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="%lld members" xml:space="preserve">
|
||||
@@ -400,6 +400,18 @@
|
||||
**注意**:多くの接続がある場合、バッテリーと通信量の消費が大幅に増加し、一部の接続に失敗することがあります。</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Abort" xml:space="preserve">
|
||||
<source>Abort</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Abort changing address" xml:space="preserve">
|
||||
<source>Abort changing address</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Abort changing address?" xml:space="preserve">
|
||||
<source>Abort changing address?</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="About SimpleX" xml:space="preserve">
|
||||
<source>About SimpleX</source>
|
||||
<target>SimpleXについて</target>
|
||||
@@ -481,6 +493,10 @@
|
||||
<target>アドレス</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</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>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Admins can create the links to join groups." xml:space="preserve">
|
||||
<source>Admins can create the links to join groups.</source>
|
||||
<target>管理者はグループの参加リンクを生成できます。</target>
|
||||
@@ -1779,6 +1795,10 @@
|
||||
<target>エラー</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Error aborting address change" xml:space="preserve">
|
||||
<source>Error aborting address change</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Error accepting contact request" xml:space="preserve">
|
||||
<source>Error accepting contact request</source>
|
||||
<target>連絡先リクエストの承諾にエラー発生</target>
|
||||
@@ -2039,6 +2059,10 @@
|
||||
<target>送信者がオンラインになるまでの待ち時間がなく、速い!</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Favorite" xml:space="preserve">
|
||||
<source>Favorite</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="File will be deleted from servers." xml:space="preserve">
|
||||
<source>File will be deleted from servers.</source>
|
||||
<target>ファイルはサーバーから削除されます。</target>
|
||||
@@ -3395,6 +3419,10 @@
|
||||
<target>受信したメッセージ</target>
|
||||
<note>message info title</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Receiving address will be changed to a different server. Address change will complete after sender comes online." xml:space="preserve">
|
||||
<source>Receiving address will be changed to a different server. Address change will complete after sender comes online.</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Receiving file will be stopped." xml:space="preserve">
|
||||
<source>Receiving file will be stopped.</source>
|
||||
<target>ファイルの受信を停止します。</target>
|
||||
@@ -4000,6 +4028,10 @@
|
||||
<target>飛ばしたメッセージ</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Some non-fatal errors occurred during import - you may see Chat console for more details." xml:space="preserve">
|
||||
<source>Some non-fatal errors occurred during import - you may see Chat console for more details.</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Somebody" xml:space="preserve">
|
||||
<source>Somebody</source>
|
||||
<target>誰か</target>
|
||||
@@ -4292,11 +4324,6 @@ 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 feature is experimental! It will only work if the other client has version 4.2 installed. You should see the message in the conversation once the address change is completed – please check that you can still receive messages from this contact (or group member)." xml:space="preserve">
|
||||
<source>This feature is experimental! It will only work if the other client has version 4.2 installed. You should see the message in the conversation once the address change is completed – please check that you can still receive messages from this contact (or group member).</source>
|
||||
<target>開発中の機能です!相手のクライアントが4.2でなければ機能しません。アドレス変更が完了すると、会話にメッセージが出ます。連絡相手 (またはグループのメンバー) からメッセージを受信できないかをご確認ください。</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="This group no longer exists." xml:space="preserve">
|
||||
<source>This group no longer exists.</source>
|
||||
<target>このグループはもう存在しません。</target>
|
||||
@@ -4409,6 +4436,10 @@ You will be prompted to complete authentication before this feature is enabled.<
|
||||
<target>予期しない移行状態</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Unfav." xml:space="preserve">
|
||||
<source>Unfav.</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Unhide" xml:space="preserve">
|
||||
<source>Unhide</source>
|
||||
<target>表示にする</target>
|
||||
@@ -4756,11 +4787,9 @@ 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="You can hide or mute a user profile - swipe it to the right. SimpleX Lock must be enabled." xml:space="preserve">
|
||||
<source>You can hide or mute a user profile - swipe it to the right.
|
||||
SimpleX Lock must be enabled.</source>
|
||||
<target>ユーザープロファイルを右にスワイプすると、非表示またはミュートにすることができます。
|
||||
SimpleXロックが有効になっている必要があります。</target>
|
||||
<trans-unit id="You can hide or mute a user profile - swipe it to the right." xml:space="preserve">
|
||||
<source>You can hide or mute a user profile - swipe it to the right.</source>
|
||||
<target>ユーザープロファイルを右にスワイプすると、非表示またはミュートにすることができます。</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="You can now send messages to %@" xml:space="preserve">
|
||||
@@ -4968,11 +4997,6 @@ SimpleXロックが有効になっている必要があります。</target>
|
||||
<target>あなたのチャットプロフィール</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Your chats" xml:space="preserve">
|
||||
<source>Your chats</source>
|
||||
<target>あなたのチャット</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Your contact needs to be online for the connection to complete. You can cancel this connection and remove the contact (and try later with a new link)." xml:space="preserve">
|
||||
<source>Your contact needs to be online for the connection to complete.
|
||||
You can cancel this connection and remove the contact (and try later with a new link).</source>
|
||||
|
||||
4624
apps/ios/SimpleX Localizations/ml.xcloc/Localized Contents/ml.xliff
Normal file
4624
apps/ios/SimpleX Localizations/ml.xcloc/Localized Contents/ml.xliff
Normal file
File diff suppressed because it is too large
Load Diff
@@ -400,6 +400,18 @@
|
||||
**Let op**: als u veel verbindingen heeft, kan uw batterij- en verkeersverbruik aanzienlijk hoger zijn en kunnen sommige verbindingen uitvallen.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Abort" xml:space="preserve">
|
||||
<source>Abort</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Abort changing address" xml:space="preserve">
|
||||
<source>Abort changing address</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Abort changing address?" xml:space="preserve">
|
||||
<source>Abort changing address?</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="About SimpleX" xml:space="preserve">
|
||||
<source>About SimpleX</source>
|
||||
<target>Over SimpleX</target>
|
||||
@@ -481,6 +493,10 @@
|
||||
<target>Adres</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</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>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Admins can create the links to join groups." xml:space="preserve">
|
||||
<source>Admins can create the links to join groups.</source>
|
||||
<target>Beheerders kunnen de uitnodiging links naar groepen aanmaken.</target>
|
||||
@@ -1780,6 +1796,10 @@
|
||||
<target>Fout</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Error aborting address change" xml:space="preserve">
|
||||
<source>Error aborting address change</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Error accepting contact request" xml:space="preserve">
|
||||
<source>Error accepting contact request</source>
|
||||
<target>Fout bij het accepteren van een contactverzoek</target>
|
||||
@@ -2040,6 +2060,10 @@
|
||||
<target>Snel en niet wachten tot de afzender online is!</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Favorite" xml:space="preserve">
|
||||
<source>Favorite</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="File will be deleted from servers." xml:space="preserve">
|
||||
<source>File will be deleted from servers.</source>
|
||||
<target>Het bestand wordt van de servers verwijderd.</target>
|
||||
@@ -3397,6 +3421,10 @@
|
||||
<target>Ontvangen bericht</target>
|
||||
<note>message info title</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Receiving address will be changed to a different server. Address change will complete after sender comes online." xml:space="preserve">
|
||||
<source>Receiving address will be changed to a different server. Address change will complete after sender comes online.</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Receiving file will be stopped." xml:space="preserve">
|
||||
<source>Receiving file will be stopped.</source>
|
||||
<target>Het ontvangen van het bestand wordt gestopt.</target>
|
||||
@@ -4002,6 +4030,11 @@
|
||||
<target>Overgeslagen berichten</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Some non-fatal errors occurred during import - you may see Chat console for more details." xml:space="preserve">
|
||||
<source>Some non-fatal errors occurred during import - you may see Chat console for more details.</source>
|
||||
<target>Er zijn enkele niet-fatale fouten opgetreden tijdens het importeren - u kunt de Chat console raadplegen voor meer details.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Somebody" xml:space="preserve">
|
||||
<source>Somebody</source>
|
||||
<target>Iemand</target>
|
||||
@@ -4294,11 +4327,6 @@ Het kan gebeuren vanwege een bug of wanneer de verbinding is aangetast.</target>
|
||||
<target>Deze fout is permanent voor deze verbinding, maak opnieuw verbinding.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="This feature is experimental! It will only work if the other client has version 4.2 installed. You should see the message in the conversation once the address change is completed – please check that you can still receive messages from this contact (or group member)." xml:space="preserve">
|
||||
<source>This feature is experimental! It will only work if the other client has version 4.2 installed. You should see the message in the conversation once the address change is completed – please check that you can still receive messages from this contact (or group member).</source>
|
||||
<target>Deze functie is experimenteel! Het werkt alleen als op de andere client versie 4.2 is geïnstalleerd. U zou het bericht in het gesprek moeten zien zodra de adreswijziging is voltooid. Controleer of u nog steeds berichten van dit contact (of groepslid) kunt ontvangen.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="This group no longer exists." xml:space="preserve">
|
||||
<source>This group no longer exists.</source>
|
||||
<target>Deze groep bestaat niet meer.</target>
|
||||
@@ -4411,6 +4439,10 @@ U wordt gevraagd de authenticatie te voltooien voordat deze functie wordt ingesc
|
||||
<target>Onverwachte migratiestatus</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Unfav." xml:space="preserve">
|
||||
<source>Unfav.</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Unhide" xml:space="preserve">
|
||||
<source>Unhide</source>
|
||||
<target>zichtbaar maken</target>
|
||||
@@ -4758,11 +4790,9 @@ Om verbinding te maken, vraagt u uw contactpersoon om een andere verbinding link
|
||||
<target>U kan het later maken</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="You can hide or mute a user profile - swipe it to the right. SimpleX Lock must be enabled." xml:space="preserve">
|
||||
<source>You can hide or mute a user profile - swipe it to the right.
|
||||
SimpleX Lock must be enabled.</source>
|
||||
<target>U kunt een gebruikers profiel verbergen of dempen - veeg het naar rechts.
|
||||
SimpleX Lock moet ingeschakeld zijn.</target>
|
||||
<trans-unit id="You can hide or mute a user profile - swipe it to the right." xml:space="preserve">
|
||||
<source>You can hide or mute a user profile - swipe it to the right.</source>
|
||||
<target>U kunt een gebruikers profiel verbergen of dempen - veeg het naar rechts.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="You can now send messages to %@" xml:space="preserve">
|
||||
@@ -4970,11 +5000,6 @@ SimpleX Lock moet ingeschakeld zijn.</target>
|
||||
<target>Uw chat profielen</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Your chats" xml:space="preserve">
|
||||
<source>Your chats</source>
|
||||
<target>Jouw gesprekken</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Your contact needs to be online for the connection to complete. You can cancel this connection and remove the contact (and try later with a new link)." xml:space="preserve">
|
||||
<source>Your contact needs to be online for the connection to complete.
|
||||
You can cancel this connection and remove the contact (and try later with a new link).</source>
|
||||
@@ -5497,6 +5522,7 @@ SimpleX servers kunnen uw profiel niet zien.</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="no text" xml:space="preserve">
|
||||
<source>no text</source>
|
||||
<target>geen tekst</target>
|
||||
<note>copied message info in history</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="observer" xml:space="preserve">
|
||||
|
||||
@@ -400,6 +400,18 @@
|
||||
**Uwaga**: jeśli masz wiele połączeń, zużycie baterii i ruchu może być znacznie wyższe, a niektóre połączenia mogą się nie udać.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Abort" xml:space="preserve">
|
||||
<source>Abort</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Abort changing address" xml:space="preserve">
|
||||
<source>Abort changing address</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Abort changing address?" xml:space="preserve">
|
||||
<source>Abort changing address?</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="About SimpleX" xml:space="preserve">
|
||||
<source>About SimpleX</source>
|
||||
<target>O SimpleX</target>
|
||||
@@ -481,6 +493,10 @@
|
||||
<target>Adres</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</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>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Admins can create the links to join groups." xml:space="preserve">
|
||||
<source>Admins can create the links to join groups.</source>
|
||||
<target>Administratorzy mogą tworzyć linki do dołączania do grup.</target>
|
||||
@@ -1780,6 +1796,10 @@
|
||||
<target>Błąd</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Error aborting address change" xml:space="preserve">
|
||||
<source>Error aborting address change</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Error accepting contact request" xml:space="preserve">
|
||||
<source>Error accepting contact request</source>
|
||||
<target>Błąd przyjmowania prośby o kontakt</target>
|
||||
@@ -2040,6 +2060,10 @@
|
||||
<target>Szybko i bez czekania aż nadawca będzie online!</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Favorite" xml:space="preserve">
|
||||
<source>Favorite</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="File will be deleted from servers." xml:space="preserve">
|
||||
<source>File will be deleted from servers.</source>
|
||||
<target>Plik zostanie usunięty z serwerów.</target>
|
||||
@@ -3397,6 +3421,10 @@
|
||||
<target>Otrzymano wiadomość</target>
|
||||
<note>message info title</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Receiving address will be changed to a different server. Address change will complete after sender comes online." xml:space="preserve">
|
||||
<source>Receiving address will be changed to a different server. Address change will complete after sender comes online.</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Receiving file will be stopped." xml:space="preserve">
|
||||
<source>Receiving file will be stopped.</source>
|
||||
<target>Odbieranie pliku zostanie przerwane.</target>
|
||||
@@ -4002,6 +4030,10 @@
|
||||
<target>Pominięte wiadomości</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Some non-fatal errors occurred during import - you may see Chat console for more details." xml:space="preserve">
|
||||
<source>Some non-fatal errors occurred during import - you may see Chat console for more details.</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Somebody" xml:space="preserve">
|
||||
<source>Somebody</source>
|
||||
<target>Ktoś</target>
|
||||
@@ -4294,11 +4326,6 @@ Może się to zdarzyć z powodu jakiegoś błędu lub gdy połączenie jest skom
|
||||
<target>Ten błąd jest trwały dla tego połączenia, proszę o ponowne połączenie.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="This feature is experimental! It will only work if the other client has version 4.2 installed. You should see the message in the conversation once the address change is completed – please check that you can still receive messages from this contact (or group member)." xml:space="preserve">
|
||||
<source>This feature is experimental! It will only work if the other client has version 4.2 installed. You should see the message in the conversation once the address change is completed – please check that you can still receive messages from this contact (or group member).</source>
|
||||
<target>Ta funkcja jest eksperymentalna! Będzie działać tylko wtedy, gdy drugi klient ma zainstalowaną wersję 4.2. Po zakończeniu zmiany adresu powinieneś zobaczyć wiadomość w konwersacji - sprawdź, czy nadal możesz otrzymywać wiadomości od tego kontaktu (lub członka grupy).</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="This group no longer exists." xml:space="preserve">
|
||||
<source>This group no longer exists.</source>
|
||||
<target>Ta grupa już nie istnieje.</target>
|
||||
@@ -4411,6 +4438,10 @@ Przed włączeniem tej funkcji zostanie wyświetlony monit uwierzytelniania.</ta
|
||||
<target>Nieoczekiwany stan migracji</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Unfav." xml:space="preserve">
|
||||
<source>Unfav.</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Unhide" xml:space="preserve">
|
||||
<source>Unhide</source>
|
||||
<target>Odkryj</target>
|
||||
@@ -4758,11 +4789,9 @@ Aby się połączyć, poproś Twój kontakt o utworzenie kolejnego linku połąc
|
||||
<target>Możesz go utworzyć później</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="You can hide or mute a user profile - swipe it to the right. SimpleX Lock must be enabled." xml:space="preserve">
|
||||
<source>You can hide or mute a user profile - swipe it to the right.
|
||||
SimpleX Lock must be enabled.</source>
|
||||
<target>Możesz ukryć lub wyciszyć profil użytkownika - przesuń palcem w prawo.
|
||||
Funkcja blokady SimpleX musi być włączona.</target>
|
||||
<trans-unit id="You can hide or mute a user profile - swipe it to the right." xml:space="preserve">
|
||||
<source>You can hide or mute a user profile - swipe it to the right.</source>
|
||||
<target>Możesz ukryć lub wyciszyć profil użytkownika - przesuń palcem w prawo.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="You can now send messages to %@" xml:space="preserve">
|
||||
@@ -4970,11 +4999,6 @@ Funkcja blokady SimpleX musi być włączona.</target>
|
||||
<target>Twoje profile czatu</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Your chats" xml:space="preserve">
|
||||
<source>Your chats</source>
|
||||
<target>Twoje czaty</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Your contact needs to be online for the connection to complete. You can cancel this connection and remove the contact (and try later with a new link)." xml:space="preserve">
|
||||
<source>Your contact needs to be online for the connection to complete.
|
||||
You can cancel this connection and remove the contact (and try later with a new link).</source>
|
||||
@@ -5498,6 +5522,7 @@ Serwery SimpleX nie mogą zobaczyć Twojego profilu.</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="no text" xml:space="preserve">
|
||||
<source>no text</source>
|
||||
<target>brak tekstu</target>
|
||||
<note>copied message info in history</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="observer" xml:space="preserve">
|
||||
|
||||
@@ -587,8 +587,9 @@
|
||||
<target state="translated">Cancelar</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Cannot access keychain to save database password" xml:space="preserve">
|
||||
<trans-unit id="Cannot access keychain to save database password" xml:space="preserve" approved="no">
|
||||
<source>Cannot access keychain to save database password</source>
|
||||
<target state="translated">Não conseguimos acessar a keychain para guardar a palavra-passe da base de dados</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Cannot receive file" xml:space="preserve" approved="no">
|
||||
@@ -611,12 +612,14 @@
|
||||
<target state="translated">Mudar a função de membro?</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Change receiving address" xml:space="preserve">
|
||||
<trans-unit id="Change receiving address" xml:space="preserve" approved="no">
|
||||
<source>Change receiving address</source>
|
||||
<target state="translated">Mudar endereço de recepção</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Change receiving address?" xml:space="preserve">
|
||||
<trans-unit id="Change receiving address?" xml:space="preserve" approved="no">
|
||||
<source>Change receiving address?</source>
|
||||
<target state="translated">Mudar endereço de recepção?</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Change role" xml:space="preserve" approved="no">
|
||||
@@ -861,8 +864,9 @@
|
||||
<source>Core built at: %@</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Core version: v%@" xml:space="preserve">
|
||||
<trans-unit id="Core version: v%@" xml:space="preserve" approved="no">
|
||||
<source>Core version: v%@</source>
|
||||
<target state="translated">Versão Núcleo: v%@</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Create" xml:space="preserve" approved="no">
|
||||
@@ -904,8 +908,9 @@
|
||||
<target state="translated">Crie seu perfil</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Created on %@" xml:space="preserve">
|
||||
<trans-unit id="Created on %@" xml:space="preserve" approved="no">
|
||||
<source>Created on %@</source>
|
||||
<target state="translated">Criado em %@</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Current passphrase…" xml:space="preserve" approved="no">
|
||||
@@ -913,8 +918,9 @@
|
||||
<target state="translated">Senha atual…</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Currently maximum supported file size is %@." xml:space="preserve">
|
||||
<trans-unit id="Currently maximum supported file size is %@." xml:space="preserve" approved="no">
|
||||
<source>Currently maximum supported file size is %@.</source>
|
||||
<target state="translated">O tamanho de ficheiro máximo suportado atualmente é %@.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Dark" xml:space="preserve" approved="no">
|
||||
@@ -936,9 +942,11 @@
|
||||
<target state="translated">Banco de dados criptografado!</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Database encryption passphrase will be updated and stored in the keychain. " xml:space="preserve">
|
||||
<trans-unit id="Database encryption passphrase will be updated and stored in the keychain. " xml:space="preserve" approved="no">
|
||||
<source>Database encryption passphrase will be updated and stored in the keychain.
|
||||
</source>
|
||||
<target state="translated">A frase-passe criptográfica da base de dados vai ser atualizada e armazenada na keychain.
|
||||
</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Database encryption passphrase will be updated. " xml:space="preserve" approved="no">
|
||||
@@ -973,8 +981,9 @@
|
||||
<target state="translated">Senha e exportação do banco de dados</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Database passphrase is different from saved in the keychain." xml:space="preserve">
|
||||
<trans-unit id="Database passphrase is different from saved in the keychain." xml:space="preserve" approved="no">
|
||||
<source>Database passphrase is different from saved in the keychain.</source>
|
||||
<target state="translated">A frase-passe da base de dados é diferente daquela guardada na keychain.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Database passphrase is required to open chat." xml:space="preserve" approved="no">
|
||||
@@ -982,9 +991,11 @@
|
||||
<target state="translated">Senha do banco de dados é necessária para abrir o chat.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Database will be encrypted and the passphrase stored in the keychain. " xml:space="preserve">
|
||||
<trans-unit id="Database will be encrypted and the passphrase stored in the keychain. " xml:space="preserve" approved="no">
|
||||
<source>Database will be encrypted and the passphrase stored in the keychain.
|
||||
</source>
|
||||
<target state="translated">A base de dados vai ser encriptada e a frase-passe armazenada na keychain.
|
||||
</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Database will be encrypted. " xml:space="preserve" approved="no">
|
||||
@@ -994,8 +1005,9 @@
|
||||
</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Database will be migrated when the app restarts" xml:space="preserve">
|
||||
<trans-unit id="Database will be migrated when the app restarts" xml:space="preserve" approved="no">
|
||||
<source>Database will be migrated when the app restarts</source>
|
||||
<target state="translated">A base de dados vai ser migrada quando o aplicativo reiniciar</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Decentralized" xml:space="preserve" approved="no">
|
||||
@@ -1048,8 +1060,9 @@
|
||||
<target state="translated">Excluir perfil de chat?</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Delete connection" xml:space="preserve">
|
||||
<trans-unit id="Delete connection" xml:space="preserve" approved="no">
|
||||
<source>Delete connection</source>
|
||||
<target state="translated">Excluir conexão</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Delete contact" xml:space="preserve" approved="no">
|
||||
@@ -1131,16 +1144,19 @@
|
||||
<target state="translated">Excluir mensagens após</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Delete old database" xml:space="preserve">
|
||||
<trans-unit id="Delete old database" xml:space="preserve" approved="no">
|
||||
<source>Delete old database</source>
|
||||
<target state="translated">Excluir base de dados velha</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Delete old database?" xml:space="preserve">
|
||||
<trans-unit id="Delete old database?" xml:space="preserve" approved="no">
|
||||
<source>Delete old database?</source>
|
||||
<target state="translated">Apagar base de dados velha?</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Delete pending connection" xml:space="preserve">
|
||||
<trans-unit id="Delete pending connection" xml:space="preserve" approved="no">
|
||||
<source>Delete pending connection</source>
|
||||
<target state="translated">Excluir conexão pendente</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Delete pending connection?" xml:space="preserve" approved="no">
|
||||
@@ -1153,8 +1169,9 @@
|
||||
<target state="translated">Excluir fila</target>
|
||||
<note>server test step</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Delete user profile?" xml:space="preserve">
|
||||
<trans-unit id="Delete user profile?" xml:space="preserve" approved="no">
|
||||
<source>Delete user profile?</source>
|
||||
<target state="translated">Apagar o perfil de utilizador?</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Description" xml:space="preserve" approved="no">
|
||||
@@ -1162,8 +1179,9 @@
|
||||
<target state="translated">Descrição</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Develop" xml:space="preserve">
|
||||
<trans-unit id="Develop" xml:space="preserve" approved="no">
|
||||
<source>Develop</source>
|
||||
<target state="translated">Desenvolver</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Developer tools" xml:space="preserve" approved="no">
|
||||
@@ -1171,8 +1189,9 @@
|
||||
<target state="translated">Ferramentas de desenvolvimento</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Device" xml:space="preserve">
|
||||
<trans-unit id="Device" xml:space="preserve" approved="no">
|
||||
<source>Device</source>
|
||||
<target state="translated">Dispositivo</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Device authentication is disabled. Turning off SimpleX Lock." xml:space="preserve" approved="no">
|
||||
@@ -1185,8 +1204,9 @@
|
||||
<target state="translated">A autenticação do dispositivo não está habilitada. Você pode ativar o Bloqueio SimpleX em Configurações, depois de ativar a autenticação do dispositivo.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Direct messages" xml:space="preserve">
|
||||
<trans-unit id="Direct messages" xml:space="preserve" approved="no">
|
||||
<source>Direct messages</source>
|
||||
<target state="translated">Mensagens diretas</target>
|
||||
<note>chat feature</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Direct messages between members are prohibited in this group." xml:space="preserve" approved="no">
|
||||
@@ -1229,12 +1249,14 @@
|
||||
<target state="translated">Nome de exibição:</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Do NOT use SimpleX for emergency calls." xml:space="preserve">
|
||||
<trans-unit id="Do NOT use SimpleX for emergency calls." xml:space="preserve" approved="no">
|
||||
<source>Do NOT use SimpleX for emergency calls.</source>
|
||||
<target state="translated">NÃO use SimpleX para chamadas de emergência.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Do it later" xml:space="preserve">
|
||||
<trans-unit id="Do it later" xml:space="preserve" approved="no">
|
||||
<source>Do it later</source>
|
||||
<target state="translated">Fazer mais tarde</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Edit" xml:space="preserve" approved="no">
|
||||
@@ -1247,8 +1269,9 @@
|
||||
<target state="translated">Editar perfil do grupo</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Enable" xml:space="preserve">
|
||||
<trans-unit id="Enable" xml:space="preserve" approved="no">
|
||||
<source>Enable</source>
|
||||
<target state="translated">Ativar</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Enable SimpleX Lock" xml:space="preserve" approved="no">
|
||||
@@ -1266,16 +1289,19 @@
|
||||
<target state="translated">Ativar exclusão automática de mensagens?</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Enable instant notifications?" xml:space="preserve">
|
||||
<trans-unit id="Enable instant notifications?" xml:space="preserve" approved="no">
|
||||
<source>Enable instant notifications?</source>
|
||||
<target state="translated">Ativar notificações instantâneas?</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Enable notifications" xml:space="preserve">
|
||||
<trans-unit id="Enable notifications" xml:space="preserve" approved="no">
|
||||
<source>Enable notifications</source>
|
||||
<target state="translated">Ativar notificações</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Enable periodic notifications?" xml:space="preserve">
|
||||
<trans-unit id="Enable periodic notifications?" xml:space="preserve" approved="no">
|
||||
<source>Enable periodic notifications?</source>
|
||||
<target state="translated">Ativar notificações periódicas?</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Encrypt" xml:space="preserve" approved="no">
|
||||
@@ -1293,24 +1319,29 @@
|
||||
<target state="translated">Banco de dados criptografado</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Encrypted message or another event" xml:space="preserve">
|
||||
<trans-unit id="Encrypted message or another event" xml:space="preserve" approved="no">
|
||||
<source>Encrypted message or another event</source>
|
||||
<target state="translated">Mensagem encriptada ou outro evento</target>
|
||||
<note>notification</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Encrypted message: database error" xml:space="preserve">
|
||||
<trans-unit id="Encrypted message: database error" xml:space="preserve" approved="no">
|
||||
<source>Encrypted message: database error</source>
|
||||
<target state="translated">Mensagem encriptada: erro da base de dados</target>
|
||||
<note>notification</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Encrypted message: keychain error" xml:space="preserve">
|
||||
<trans-unit id="Encrypted message: keychain error" xml:space="preserve" approved="no">
|
||||
<source>Encrypted message: keychain error</source>
|
||||
<target state="translated">Mensagem encriptada: erro na keychain</target>
|
||||
<note>notification</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Encrypted message: no passphrase" xml:space="preserve">
|
||||
<trans-unit id="Encrypted message: no passphrase" xml:space="preserve" approved="no">
|
||||
<source>Encrypted message: no passphrase</source>
|
||||
<target state="translated">Mensagem encriptada: sem frase-passe</target>
|
||||
<note>notification</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Encrypted message: unexpected error" xml:space="preserve">
|
||||
<trans-unit id="Encrypted message: unexpected error" xml:space="preserve" approved="no">
|
||||
<source>Encrypted message: unexpected error</source>
|
||||
<target state="translated">Mensagem encriptada: erro inesperado</target>
|
||||
<note>notification</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Enter correct passphrase." xml:space="preserve" approved="no">
|
||||
@@ -1338,8 +1369,9 @@
|
||||
<target state="translated">Erro ao aceitar solicitação de contato</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Error accessing database file" xml:space="preserve">
|
||||
<trans-unit id="Error accessing database file" xml:space="preserve" approved="no">
|
||||
<source>Error accessing database file</source>
|
||||
<target state="translated">Erro acessando ficheiro da base de dados</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Error adding member(s)" xml:space="preserve" approved="no">
|
||||
@@ -1367,8 +1399,9 @@
|
||||
<target state="translated">Erro ao criar endereço</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Error creating group" xml:space="preserve">
|
||||
<trans-unit id="Error creating group" xml:space="preserve" approved="no">
|
||||
<source>Error creating group</source>
|
||||
<target state="translated">Erro ao criar grupo</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Error creating group link" xml:space="preserve" approved="no">
|
||||
@@ -1381,12 +1414,14 @@
|
||||
<target state="translated">Erro ao excluir banco de dados de chat</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Error deleting chat!" xml:space="preserve">
|
||||
<trans-unit id="Error deleting chat!" xml:space="preserve" approved="no">
|
||||
<source>Error deleting chat!</source>
|
||||
<target state="translated">Erro ao apagar chat!</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Error deleting connection" xml:space="preserve">
|
||||
<trans-unit id="Error deleting connection" xml:space="preserve" approved="no">
|
||||
<source>Error deleting connection</source>
|
||||
<target state="translated">Erro excluindo conexão</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Error deleting contact" xml:space="preserve" approved="no">
|
||||
@@ -1394,8 +1429,9 @@
|
||||
<target state="translated">Erro ao excluir contato</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Error deleting database" xml:space="preserve">
|
||||
<trans-unit id="Error deleting database" xml:space="preserve" approved="no">
|
||||
<source>Error deleting database</source>
|
||||
<target state="translated">Erro excluindo base de dados</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Error deleting old database" xml:space="preserve">
|
||||
@@ -4958,6 +4994,201 @@ Isso pode acontecer por causa de algum bug ou quando a conexão está comprometi
|
||||
<target state="translated">Criar endereço SimpleX</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Authentication is required before the call is connected, but you may miss calls." xml:space="preserve" approved="no">
|
||||
<source>Authentication is required before the call is connected, but you may miss calls.</source>
|
||||
<target state="translated">Autenticação é requerida antes da chamada ser conectada, mas pode perder chamadas.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="By chat profile (default) or [by connection](https://simplex.chat/blog/20230204-simplex-chat-v4-5-user-chat-profiles.html#transport-isolation) (BETA)." xml:space="preserve" approved="no">
|
||||
<source>By chat profile (default) or [by connection](https://simplex.chat/blog/20230204-simplex-chat-v4-5-user-chat-profiles.html#transport-isolation) (BETA).</source>
|
||||
<target state="translated">Por perfil de chat (predefinição) ou [por conexão](https://simplex.chat/blog/20230204-simplex-chat-v4-5-user-chat-profiles.html#transport-isolation) (BETA).</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Encrypted message: database migration error" xml:space="preserve" approved="no">
|
||||
<source>Encrypted message: database migration error</source>
|
||||
<target state="translated">Mensagem encriptada: erro na migração da base de dados</target>
|
||||
<note>notification</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Enter password above to show!" xml:space="preserve" approved="no">
|
||||
<source>Enter password above to show!</source>
|
||||
<target state="translated">Introduzir palavra-passe acima para mostrar!</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Enter welcome message… (optional)" xml:space="preserve" approved="no">
|
||||
<source>Enter welcome message… (optional)</source>
|
||||
<target state="translated">Introduzir mensagem de boas-vindas… (opcional)</target>
|
||||
<note>placeholder</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="%@ (current)" xml:space="preserve" approved="no">
|
||||
<source>%@ (current)</source>
|
||||
<target state="translated">%@ (atual)</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="%@ (current):" xml:space="preserve" approved="no">
|
||||
<source>%@ (current):</source>
|
||||
<target state="translated">%@ (atual):</target>
|
||||
<note>copied message info</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="%d weeks" xml:space="preserve" approved="no">
|
||||
<source>%d weeks</source>
|
||||
<target state="translated">%d semanas</target>
|
||||
<note>time interval</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Duration" xml:space="preserve" approved="no">
|
||||
<source>Duration</source>
|
||||
<target state="translated">Duração</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Enable self-destruct" xml:space="preserve" approved="no">
|
||||
<source>Enable self-destruct</source>
|
||||
<target state="translated">Ativar auto-destruição</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Don't create address" xml:space="preserve" approved="no">
|
||||
<source>Don't create address</source>
|
||||
<target state="translated">Não criar endereço</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Enter welcome message…" xml:space="preserve" approved="no">
|
||||
<source>Enter welcome message…</source>
|
||||
<target state="translated">Introduzir mensagem de boas-vindas…</target>
|
||||
<note>placeholder</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Change self-destruct mode" xml:space="preserve" approved="no">
|
||||
<source>Change self-destruct mode</source>
|
||||
<target state="translated">Mudar modo de auto-destruição</target>
|
||||
<note>authentication reason</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Change self-destruct passcode" xml:space="preserve" approved="no">
|
||||
<source>Change self-destruct passcode</source>
|
||||
<target state="translated">Mudar senha auto-destrutiva</target>
|
||||
<note>authentication reason
|
||||
set passcode view</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Disappears at" xml:space="preserve" approved="no">
|
||||
<source>Disappears at</source>
|
||||
<target state="translated">Desaparecerá</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Enable self-destruct passcode" xml:space="preserve" approved="no">
|
||||
<source>Enable self-destruct passcode</source>
|
||||
<target state="translated">Ativar senha auto-destrutiva</target>
|
||||
<note>set passcode view</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="1 minute" xml:space="preserve" approved="no">
|
||||
<source>1 minute</source>
|
||||
<target state="translated">1 minuto</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="30 seconds" xml:space="preserve" approved="no">
|
||||
<source>30 seconds</source>
|
||||
<target state="translated">30 segundos</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="0s" xml:space="preserve" approved="no">
|
||||
<source>0s</source>
|
||||
<target state="translated">0s</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="5 minutes" xml:space="preserve" approved="no">
|
||||
<source>5 minutes</source>
|
||||
<target state="translated">5 minutos</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="- voice messages up to 5 minutes. - custom time to disappear. - editing history." xml:space="preserve" approved="no">
|
||||
<source>- voice messages up to 5 minutes.
|
||||
- custom time to disappear.
|
||||
- editing history.</source>
|
||||
<target state="translated">- mensagens de voz até 5 minutos.
|
||||
- tempo personalizado para desaparecer.
|
||||
- histórico de edição.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="All app data is deleted." xml:space="preserve" approved="no">
|
||||
<source>All app data is deleted.</source>
|
||||
<target state="translated">Todos os dados da app são apagados.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="All data is erased when it is entered." xml:space="preserve" approved="no">
|
||||
<source>All data is erased when it is entered.</source>
|
||||
<target state="translated">Todos os dados são apagados quando introduzidos.</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" approved="no">
|
||||
<source>Allow message reactions only if your contact allows them.</source>
|
||||
<target state="translated">Permitir reações a mensagens só se o seu contacto as permitir.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Allow message reactions." xml:space="preserve" approved="no">
|
||||
<source>Allow message reactions.</source>
|
||||
<target state="translated">Permitir reações a mensagens.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Allow your contacts adding message reactions." xml:space="preserve" approved="no">
|
||||
<source>Allow your contacts adding message reactions.</source>
|
||||
<target state="translated">Permitir que os seus contactos adicionem reações a mensagens.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="An empty chat profile with the provided name is created, and the app opens as usual." xml:space="preserve" approved="no">
|
||||
<source>An empty chat profile with the provided name is created, and the app opens as usual.</source>
|
||||
<target state="translated">Um perfil vazio é criado com o nome fornecido, e a aplicação abre como de costume.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="App passcode is replaced with self-destruct passcode." xml:space="preserve" approved="no">
|
||||
<source>App passcode is replaced with self-destruct passcode.</source>
|
||||
<target state="translated">A senha é substituída por uma senha auto-destrutiva.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Better messages" xml:space="preserve" approved="no">
|
||||
<source>Better messages</source>
|
||||
<target state="translated">Mensagens melhores</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Both you and your contact can add message reactions." xml:space="preserve" approved="no">
|
||||
<source>Both you and your contact can add message reactions.</source>
|
||||
<target state="translated">Ambos você e o seu contato podem adicionar reações a mensagens.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Create an address to let people connect with you." xml:space="preserve" approved="no">
|
||||
<source>Create an address to let people connect with you.</source>
|
||||
<target state="translated">Crie um endereço para que outras pessoas se possam conectar a você.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Custom time" xml:space="preserve" approved="no">
|
||||
<source>Custom time</source>
|
||||
<target state="translated">Tempo personalizado</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Database ID: %d" xml:space="preserve" approved="no">
|
||||
<source>Database ID: %d</source>
|
||||
<target state="translated">ID da base de dados: %d</target>
|
||||
<note>copied message info</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Deleted at" xml:space="preserve" approved="no">
|
||||
<source>Deleted at</source>
|
||||
<target state="translated">Apagado em</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Deleted at: %@" xml:space="preserve" approved="no">
|
||||
<source>Deleted at: %@</source>
|
||||
<target state="translated">Apagado a: %@</target>
|
||||
<note>copied message info</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Disappearing message" xml:space="preserve" approved="no">
|
||||
<source>Disappearing message</source>
|
||||
<target state="translated">Mensagens temporárias</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Disappears at: %@" xml:space="preserve" approved="no">
|
||||
<source>Disappears at: %@</source>
|
||||
<target state="translated">Desaparecerá: %@</target>
|
||||
<note>copied message info</note>
|
||||
</trans-unit>
|
||||
</body>
|
||||
</file>
|
||||
<file original="en.lproj/SimpleX--iOS--InfoPlist.strings" source-language="en" target-language="pt-BR" datatype="plaintext">
|
||||
|
||||
@@ -400,6 +400,18 @@
|
||||
**Обратите внимание**: если у Вас много контактов, потребление батареи и трафика может быть значительно выше, и некоторые соединения могут не работать.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Abort" xml:space="preserve">
|
||||
<source>Abort</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Abort changing address" xml:space="preserve">
|
||||
<source>Abort changing address</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Abort changing address?" xml:space="preserve">
|
||||
<source>Abort changing address?</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="About SimpleX" xml:space="preserve">
|
||||
<source>About SimpleX</source>
|
||||
<target>О SimpleX</target>
|
||||
@@ -481,6 +493,10 @@
|
||||
<target>Адрес</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</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>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Admins can create the links to join groups." xml:space="preserve">
|
||||
<source>Admins can create the links to join groups.</source>
|
||||
<target>Админы могут создать ссылки для вступления в группу.</target>
|
||||
@@ -1780,6 +1796,10 @@
|
||||
<target>Ошибка</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Error aborting address change" xml:space="preserve">
|
||||
<source>Error aborting address change</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Error accepting contact request" xml:space="preserve">
|
||||
<source>Error accepting contact request</source>
|
||||
<target>Ошибка при принятии запроса на соединение</target>
|
||||
@@ -2040,6 +2060,10 @@
|
||||
<target>Быстрые и не нужно ждать, когда отправитель онлайн!</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Favorite" xml:space="preserve">
|
||||
<source>Favorite</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="File will be deleted from servers." xml:space="preserve">
|
||||
<source>File will be deleted from servers.</source>
|
||||
<target>Файл будет удалён с серверов.</target>
|
||||
@@ -3397,6 +3421,10 @@
|
||||
<target>Полученное сообщение</target>
|
||||
<note>message info title</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Receiving address will be changed to a different server. Address change will complete after sender comes online." xml:space="preserve">
|
||||
<source>Receiving address will be changed to a different server. Address change will complete after sender comes online.</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Receiving file will be stopped." xml:space="preserve">
|
||||
<source>Receiving file will be stopped.</source>
|
||||
<target>Приём файла будет прекращён.</target>
|
||||
@@ -4002,6 +4030,10 @@
|
||||
<target>Пропущенные сообщения</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Some non-fatal errors occurred during import - you may see Chat console for more details." xml:space="preserve">
|
||||
<source>Some non-fatal errors occurred during import - you may see Chat console for more details.</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Somebody" xml:space="preserve">
|
||||
<source>Somebody</source>
|
||||
<target>Контакт</target>
|
||||
@@ -4294,11 +4326,6 @@ 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 feature is experimental! It will only work if the other client has version 4.2 installed. You should see the message in the conversation once the address change is completed – please check that you can still receive messages from this contact (or group member)." xml:space="preserve">
|
||||
<source>This feature is experimental! It will only work if the other client has version 4.2 installed. You should see the message in the conversation once the address change is completed – please check that you can still receive messages from this contact (or group member).</source>
|
||||
<target>Это экспериментальная функция! Она будет работать, только если на другом клиенте установлена версия 4.2. После завершения смены адреса Вы увидите сообщение — убедитесь, что Вы все еще можете получать сообщения от этого контакта (или члена группы).</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="This group no longer exists." xml:space="preserve">
|
||||
<source>This group no longer exists.</source>
|
||||
<target>Эта группа больше не существует.</target>
|
||||
@@ -4411,6 +4438,10 @@ You will be prompted to complete authentication before this feature is enabled.<
|
||||
<target>Неожиданная ошибка при перемещении данных чата</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Unfav." xml:space="preserve">
|
||||
<source>Unfav.</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Unhide" xml:space="preserve">
|
||||
<source>Unhide</source>
|
||||
<target>Раскрыть</target>
|
||||
@@ -4758,11 +4789,9 @@ 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="You can hide or mute a user profile - swipe it to the right. SimpleX Lock must be enabled." xml:space="preserve">
|
||||
<source>You can hide or mute a user profile - swipe it to the right.
|
||||
SimpleX Lock must be enabled.</source>
|
||||
<target>Вы можете скрыть профиль или выключить уведомления - потяните его вправо.
|
||||
Блокировка SimpleX должна быть включена.</target>
|
||||
<trans-unit id="You can hide or mute a user profile - swipe it to the right." xml:space="preserve">
|
||||
<source>You can hide or mute a user profile - swipe it to the right.</source>
|
||||
<target>Вы можете скрыть профиль или выключить уведомления - потяните его вправо.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="You can now send messages to %@" xml:space="preserve">
|
||||
@@ -4970,11 +4999,6 @@ SimpleX Lock must be enabled.</source>
|
||||
<target>Ваши профили чата</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Your chats" xml:space="preserve">
|
||||
<source>Your chats</source>
|
||||
<target>Ваши чаты</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Your contact needs to be online for the connection to complete. You can cancel this connection and remove the contact (and try later with a new link)." xml:space="preserve">
|
||||
<source>Your contact needs to be online for the connection to complete.
|
||||
You can cancel this connection and remove the contact (and try later with a new link).</source>
|
||||
|
||||
4621
apps/ios/SimpleX Localizations/th.xcloc/Localized Contents/th.xliff
Normal file
4621
apps/ios/SimpleX Localizations/th.xcloc/Localized Contents/th.xliff
Normal file
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -59,10 +59,12 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="%@ (current)" xml:space="preserve">
|
||||
<source>%@ (current)</source>
|
||||
<target>%@(当前)</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="%@ (current):" xml:space="preserve">
|
||||
<source>%@ (current):</source>
|
||||
<target>%@(当前):</target>
|
||||
<note>copied message info</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="%@ / %@" xml:space="preserve">
|
||||
@@ -97,6 +99,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="%@:" xml:space="preserve">
|
||||
<source>%@:</source>
|
||||
<target>%@:</target>
|
||||
<note>copied message info</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="%d days" xml:space="preserve">
|
||||
@@ -298,6 +301,9 @@
|
||||
<source>- voice messages up to 5 minutes.
|
||||
- custom time to disappear.
|
||||
- editing history.</source>
|
||||
<target>- 语音消息最长5分钟。
|
||||
- 自定义限时消息。
|
||||
- 编辑消息历史。</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="." xml:space="preserve">
|
||||
@@ -307,6 +313,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="0s" xml:space="preserve">
|
||||
<source>0s</source>
|
||||
<target>0秒</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="1 day" xml:space="preserve">
|
||||
@@ -341,6 +348,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="5 minutes" xml:space="preserve">
|
||||
<source>5 minutes</source>
|
||||
<target>5分钟</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="6" xml:space="preserve">
|
||||
@@ -350,6 +358,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="30 seconds" xml:space="preserve">
|
||||
<source>30 seconds</source>
|
||||
<target>30秒</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id=": " xml:space="preserve">
|
||||
@@ -360,6 +369,8 @@
|
||||
<trans-unit id="<p>Hi!</p> <p><a href="%@">Connect to me via SimpleX Chat</a></p>" xml:space="preserve">
|
||||
<source><p>Hi!</p>
|
||||
<p><a href="%@">Connect to me via SimpleX Chat</a></p></source>
|
||||
<target><p>你好!</p>
|
||||
<p><a href="%@">通过 SimpleX Chat </a></p>与我联系</target>
|
||||
<note>email text</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="A new contact" xml:space="preserve">
|
||||
@@ -389,6 +400,18 @@
|
||||
请注意:如果您有许多连接,将会消耗更多的电量和流量,并且某些连接可能会失败。</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Abort" xml:space="preserve">
|
||||
<source>Abort</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Abort changing address" xml:space="preserve">
|
||||
<source>Abort changing address</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Abort changing address?" xml:space="preserve">
|
||||
<source>Abort changing address?</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="About SimpleX" xml:space="preserve">
|
||||
<source>About SimpleX</source>
|
||||
<target>关于SimpleX</target>
|
||||
@@ -401,6 +424,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="About SimpleX address" xml:space="preserve">
|
||||
<source>About SimpleX address</source>
|
||||
<target>关于 SimpleX 地址</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Accent color" xml:space="preserve">
|
||||
@@ -431,6 +455,7 @@
|
||||
</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>将地址添加到您的个人资料,以便您的联系人可以与其他人共享。个人资料更新将发送给您的联系人。</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Add preset servers" xml:space="preserve">
|
||||
@@ -465,6 +490,11 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="Address" xml:space="preserve">
|
||||
<source>Address</source>
|
||||
<target>地址</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</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>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Admins can create the links to join groups." xml:space="preserve">
|
||||
@@ -479,6 +509,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="All app data is deleted." xml:space="preserve">
|
||||
<source>All app data is deleted.</source>
|
||||
<target>已删除所有应用程序数据。</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="All chats and messages will be deleted - this cannot be undone!" xml:space="preserve">
|
||||
@@ -488,6 +519,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="All data is erased when it is entered." xml:space="preserve">
|
||||
<source>All data is erased when it is entered.</source>
|
||||
<target>所有数据在输入后将被删除。</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="All group members will remain connected." xml:space="preserve">
|
||||
@@ -507,6 +539,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>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Allow" xml:space="preserve">
|
||||
@@ -531,10 +564,12 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="Allow message reactions only if your contact allows them." xml:space="preserve">
|
||||
<source>Allow message reactions only if your contact allows them.</source>
|
||||
<target>只有您的联系人允许时才允许消息回应。</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Allow message reactions." xml:space="preserve">
|
||||
<source>Allow message reactions.</source>
|
||||
<target>允许消息回应。</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Allow sending direct messages to members." xml:space="preserve">
|
||||
@@ -569,6 +604,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="Allow your contacts adding message reactions." xml:space="preserve">
|
||||
<source>Allow your contacts adding message reactions.</source>
|
||||
<target>允许您的联系人添加消息回应。</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Allow your contacts to call you." xml:space="preserve">
|
||||
@@ -603,6 +639,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="An empty chat profile with the provided name is created, and the app opens as usual." xml:space="preserve">
|
||||
<source>An empty chat profile with the provided name is created, and the app opens as usual.</source>
|
||||
<target>已创建一个包含所提供名字的空白聊天资料,应用程序照常打开。</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Answer call" xml:space="preserve">
|
||||
@@ -627,6 +664,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="App passcode is replaced with self-destruct passcode." xml:space="preserve">
|
||||
<source>App passcode is replaced with self-destruct passcode.</source>
|
||||
<target>应用程序密码被替换为自毁密码。</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="App version" xml:space="preserve">
|
||||
@@ -691,6 +729,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="Auto-accept" xml:space="preserve">
|
||||
<source>Auto-accept</source>
|
||||
<target>自动接受</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Auto-accept contact requests" xml:space="preserve">
|
||||
@@ -720,10 +759,12 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="Better messages" xml:space="preserve">
|
||||
<source>Better messages</source>
|
||||
<target>更好的消息</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Both you and your contact can add message reactions." xml:space="preserve">
|
||||
<source>Both you and your contact can add message reactions.</source>
|
||||
<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">
|
||||
@@ -833,10 +874,12 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="Change self-destruct mode" xml:space="preserve">
|
||||
<source>Change self-destruct mode</source>
|
||||
<target>更改自毁模式</target>
|
||||
<note>authentication reason</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Change self-destruct passcode" xml:space="preserve">
|
||||
<source>Change self-destruct passcode</source>
|
||||
<target>更改自毁密码</target>
|
||||
<note>authentication reason
|
||||
set passcode view</note>
|
||||
</trans-unit>
|
||||
@@ -1087,6 +1130,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="Continue" xml:space="preserve">
|
||||
<source>Continue</source>
|
||||
<target>继续</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Copy" xml:space="preserve">
|
||||
@@ -1106,10 +1150,12 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="Create SimpleX address" xml:space="preserve">
|
||||
<source>Create SimpleX address</source>
|
||||
<target>创建 SimpleX 地址</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Create an address to let people connect with you." xml:space="preserve">
|
||||
<source>Create an address to let people connect with you.</source>
|
||||
<target>创建一个地址,让人们与您联系。</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Create file" xml:space="preserve">
|
||||
@@ -1169,6 +1215,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="Custom time" xml:space="preserve">
|
||||
<source>Custom time</source>
|
||||
<target>自定义时间</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Dark" xml:space="preserve">
|
||||
@@ -1183,6 +1230,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="Database ID: %d" xml:space="preserve">
|
||||
<source>Database ID: %d</source>
|
||||
<target>数据库 ID:%d</target>
|
||||
<note>copied message info</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Database IDs and Transport isolation option." xml:space="preserve">
|
||||
@@ -1460,10 +1508,12 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="Deleted at" xml:space="preserve">
|
||||
<source>Deleted at</source>
|
||||
<target>已删除于</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Deleted at: %@" xml:space="preserve">
|
||||
<source>Deleted at: %@</source>
|
||||
<target>已删除于:%@</target>
|
||||
<note>copied message info</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Description" xml:space="preserve">
|
||||
@@ -1518,6 +1568,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="Disappearing message" xml:space="preserve">
|
||||
<source>Disappearing message</source>
|
||||
<target>限时消息</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Disappearing messages" xml:space="preserve">
|
||||
@@ -1537,10 +1588,12 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="Disappears at" xml:space="preserve">
|
||||
<source>Disappears at</source>
|
||||
<target>消失于</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Disappears at: %@" xml:space="preserve">
|
||||
<source>Disappears at: %@</source>
|
||||
<target>消失于:%@</target>
|
||||
<note>copied message info</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Disconnect" xml:space="preserve">
|
||||
@@ -1570,6 +1623,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="Don't create address" xml:space="preserve">
|
||||
<source>Don't create address</source>
|
||||
<target>不创建地址</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Don't show again" xml:space="preserve">
|
||||
@@ -1594,6 +1648,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="Duration" xml:space="preserve">
|
||||
<source>Duration</source>
|
||||
<target>时长</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Edit" xml:space="preserve">
|
||||
@@ -1648,10 +1703,12 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="Enable self-destruct" xml:space="preserve">
|
||||
<source>Enable self-destruct</source>
|
||||
<target>启用自毁功能</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Enable self-destruct passcode" xml:space="preserve">
|
||||
<source>Enable self-destruct passcode</source>
|
||||
<target>启用自毁密码</target>
|
||||
<note>set passcode view</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Encrypt" xml:space="preserve">
|
||||
@@ -1726,10 +1783,12 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="Enter welcome message…" xml:space="preserve">
|
||||
<source>Enter welcome message…</source>
|
||||
<target>输入欢迎消息……</target>
|
||||
<note>placeholder</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Enter welcome message… (optional)" xml:space="preserve">
|
||||
<source>Enter welcome message… (optional)</source>
|
||||
<target>输入欢迎消息……(可选)</target>
|
||||
<note>placeholder</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Error" xml:space="preserve">
|
||||
@@ -1737,6 +1796,10 @@
|
||||
<target>错误</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Error aborting address change" xml:space="preserve">
|
||||
<source>Error aborting address change</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Error accepting contact request" xml:space="preserve">
|
||||
<source>Error accepting contact request</source>
|
||||
<target>接受联系人请求错误</target>
|
||||
@@ -1899,6 +1962,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="Error sending email" xml:space="preserve">
|
||||
<source>Error sending email</source>
|
||||
<target>发送电邮错误</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Error sending message" xml:space="preserve">
|
||||
@@ -1996,6 +2060,10 @@
|
||||
<target>快速且无需等待发件人在线!</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Favorite" xml:space="preserve">
|
||||
<source>Favorite</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="File will be deleted from servers." xml:space="preserve">
|
||||
<source>File will be deleted from servers.</source>
|
||||
<target>文件将从服务器中删除。</target>
|
||||
@@ -2023,6 +2091,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="Finally, we have them! 🚀" xml:space="preserve">
|
||||
<source>Finally, we have them! 🚀</source>
|
||||
<target>终于我们有它们了! 🚀</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="For console" xml:space="preserve">
|
||||
@@ -2112,6 +2181,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="Group members can add message reactions." xml:space="preserve">
|
||||
<source>Group members can add message reactions.</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">
|
||||
@@ -2216,6 +2286,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="History" xml:space="preserve">
|
||||
<source>History</source>
|
||||
<target>历史记录</target>
|
||||
<note>copied message info</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="How SimpleX works" xml:space="preserve">
|
||||
@@ -2250,6 +2321,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="If you can't meet in person, show QR code in a video call, or share the link." xml:space="preserve">
|
||||
<source>If you can't meet in person, show QR code in a video call, or share the link.</source>
|
||||
<target>如果您不能亲自见面,可以在视频通话中展示二维码,或分享链接。</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="If you cannot meet in person, you can **scan QR code in the video call**, or your contact can share an invitation link." xml:space="preserve">
|
||||
@@ -2259,10 +2331,12 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="If you enter this passcode when opening the app, all app data will be irreversibly removed!" xml:space="preserve">
|
||||
<source>If you enter this passcode when opening the app, all app data will be irreversibly removed!</source>
|
||||
<target>如果您在打开应用时输入该密码,所有应用程序数据将被不可撤回地删除!</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="If you enter your self-destruct passcode while opening the app:" xml:space="preserve">
|
||||
<source>If you enter your self-destruct passcode while opening the app:</source>
|
||||
<target>如果您在打开应用程序时输入自毁密码:</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="If you need to use the chat now tap **Do it later** below (you will be offered to migrate the database when you restart the app)." xml:space="preserve">
|
||||
@@ -2372,6 +2446,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="Info" xml:space="preserve">
|
||||
<source>Info</source>
|
||||
<target>信息</target>
|
||||
<note>chat item action</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Initial role" xml:space="preserve">
|
||||
@@ -2418,6 +2493,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="Invite friends" xml:space="preserve">
|
||||
<source>Invite friends</source>
|
||||
<target>邀请朋友</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Invite members" xml:space="preserve">
|
||||
@@ -2478,6 +2554,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="Japanese interface" xml:space="preserve">
|
||||
<source>Japanese interface</source>
|
||||
<target>日语界面</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Join" xml:space="preserve">
|
||||
@@ -2522,6 +2599,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="Learn more" xml:space="preserve">
|
||||
<source>Learn more</source>
|
||||
<target>了解更多</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Leave" xml:space="preserve">
|
||||
@@ -2541,6 +2619,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="Let's talk in SimpleX Chat" xml:space="preserve">
|
||||
<source>Let's talk in SimpleX Chat</source>
|
||||
<target>让我们一起在 SimpleX Chat 里聊天</target>
|
||||
<note>email subject</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Light" xml:space="preserve">
|
||||
@@ -2665,14 +2744,17 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="Message reactions" xml:space="preserve">
|
||||
<source>Message reactions</source>
|
||||
<target>消息回应</target>
|
||||
<note>chat feature</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Message reactions are prohibited in this chat." xml:space="preserve">
|
||||
<source>Message reactions are prohibited in this chat.</source>
|
||||
<target>该聊天禁用了消息回应。</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Message reactions are prohibited in this group." xml:space="preserve">
|
||||
<source>Message reactions are prohibited in this group.</source>
|
||||
<target>该群组禁用了消息回应。</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Message text" xml:space="preserve">
|
||||
@@ -2722,10 +2804,12 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="Moderated at" xml:space="preserve">
|
||||
<source>Moderated at</source>
|
||||
<target>已被管理员移除于</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Moderated at: %@" xml:space="preserve">
|
||||
<source>Moderated at: %@</source>
|
||||
<target>已被管理员移除于:%@</target>
|
||||
<note>copied message info</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="More improvements are coming soon!" xml:space="preserve">
|
||||
@@ -2795,6 +2879,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="New display name" xml:space="preserve">
|
||||
<source>New display name</source>
|
||||
<target>新显示名</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="New in %@" xml:space="preserve">
|
||||
@@ -2938,6 +3023,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="Only you can add message reactions." xml:space="preserve">
|
||||
<source>Only you can add message reactions.</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">
|
||||
@@ -2962,6 +3048,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="Only your contact can add message reactions." xml:space="preserve">
|
||||
<source>Only your contact can add message reactions.</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">
|
||||
@@ -3011,6 +3098,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="Opening database…" xml:space="preserve">
|
||||
<source>Opening database…</source>
|
||||
<target>打开数据库中……</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Opening the link in the browser may reduce connection privacy and security. Untrusted SimpleX links will be red." xml:space="preserve">
|
||||
@@ -3180,6 +3268,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="Preview" xml:space="preserve">
|
||||
<source>Preview</source>
|
||||
<target>预览</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Privacy & security" xml:space="preserve">
|
||||
@@ -3214,6 +3303,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="Profile update will be sent to your contacts." xml:space="preserve">
|
||||
<source>Profile update will be sent to your contacts.</source>
|
||||
<target>个人资料更新将被发送给您的联系人。</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Prohibit audio/video calls." xml:space="preserve">
|
||||
@@ -3228,10 +3318,12 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="Prohibit message reactions." xml:space="preserve">
|
||||
<source>Prohibit message reactions.</source>
|
||||
<target>禁止消息回应。</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Prohibit messages reactions." xml:space="preserve">
|
||||
<source>Prohibit messages reactions.</source>
|
||||
<target>禁止消息回应。</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Prohibit sending direct messages to members." xml:space="preserve">
|
||||
@@ -3276,6 +3368,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="React..." xml:space="preserve">
|
||||
<source>React...</source>
|
||||
<target>回应……</target>
|
||||
<note>chat item menu</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Read" xml:space="preserve">
|
||||
@@ -3285,14 +3378,17 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="Read more" xml:space="preserve">
|
||||
<source>Read more</source>
|
||||
<target>阅读更多</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</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>在 [用户指南](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/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>在 [用户指南](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">
|
||||
@@ -3307,10 +3403,12 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="Received at" xml:space="preserve">
|
||||
<source>Received at</source>
|
||||
<target>已收到于</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Received at: %@" xml:space="preserve">
|
||||
<source>Received at: %@</source>
|
||||
<target>已收到于:%@</target>
|
||||
<note>copied message info</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Received file event" xml:space="preserve">
|
||||
@@ -3320,8 +3418,13 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="Received message" xml:space="preserve">
|
||||
<source>Received message</source>
|
||||
<target>收到的信息</target>
|
||||
<note>message info title</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Receiving address will be changed to a different server. Address change will complete after sender comes online." xml:space="preserve">
|
||||
<source>Receiving address will be changed to a different server. Address change will complete after sender comes online.</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Receiving file will be stopped." xml:space="preserve">
|
||||
<source>Receiving file will be stopped.</source>
|
||||
<target>即将停止接收文件。</target>
|
||||
@@ -3339,10 +3442,12 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="Record updated at" xml:space="preserve">
|
||||
<source>Record updated at</source>
|
||||
<target>记录更新于</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Record updated at: %@" xml:space="preserve">
|
||||
<source>Record updated at: %@</source>
|
||||
<target>记录更新于:%@</target>
|
||||
<note>copied message info</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Reduced battery usage" xml:space="preserve">
|
||||
@@ -3522,6 +3627,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="Save auto-accept settings" xml:space="preserve">
|
||||
<source>Save auto-accept settings</source>
|
||||
<target>保存自动接受设置</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Save group profile" xml:space="preserve">
|
||||
@@ -3561,6 +3667,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="Save settings?" xml:space="preserve">
|
||||
<source>Save settings?</source>
|
||||
<target>保存设置?</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Save welcome message?" xml:space="preserve">
|
||||
@@ -3615,22 +3722,27 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="Select" xml:space="preserve">
|
||||
<source>Select</source>
|
||||
<target>选择</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Self-destruct" xml:space="preserve">
|
||||
<source>Self-destruct</source>
|
||||
<target>自毁</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Self-destruct passcode" xml:space="preserve">
|
||||
<source>Self-destruct passcode</source>
|
||||
<target>自毁密码</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Self-destruct passcode changed!" xml:space="preserve">
|
||||
<source>Self-destruct passcode changed!</source>
|
||||
<target>自毁密码已更改!</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Self-destruct passcode enabled!" xml:space="preserve">
|
||||
<source>Self-destruct passcode enabled!</source>
|
||||
<target>自毁密码已启用!</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Send" xml:space="preserve">
|
||||
@@ -3650,6 +3762,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="Send disappearing message" xml:space="preserve">
|
||||
<source>Send disappearing message</source>
|
||||
<target>发送限时消息中</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Send link previews" xml:space="preserve">
|
||||
@@ -3704,10 +3817,12 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="Sent at" xml:space="preserve">
|
||||
<source>Sent at</source>
|
||||
<target>已发送于</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Sent at: %@" xml:space="preserve">
|
||||
<source>Sent at: %@</source>
|
||||
<target>已发送于:%@</target>
|
||||
<note>copied message info</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Sent file event" xml:space="preserve">
|
||||
@@ -3717,6 +3832,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="Sent message" xml:space="preserve">
|
||||
<source>Sent message</source>
|
||||
<target>已发信息</target>
|
||||
<note>message info title</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Sent messages will be deleted after set time." xml:space="preserve">
|
||||
@@ -3766,6 +3882,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="Set passcode" xml:space="preserve">
|
||||
<source>Set passcode</source>
|
||||
<target>设置密码</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Set passphrase to export" xml:space="preserve">
|
||||
@@ -3800,10 +3917,12 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="Share address" xml:space="preserve">
|
||||
<source>Share address</source>
|
||||
<target>分享地址</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Share address with contacts?" xml:space="preserve">
|
||||
<source>Share address with contacts?</source>
|
||||
<target>与联系人分享地址?</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Share link" xml:space="preserve">
|
||||
@@ -3818,6 +3937,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="Share with contacts" xml:space="preserve">
|
||||
<source>Share with contacts</source>
|
||||
<target>与联系人分享</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Show calls in phone history" xml:space="preserve">
|
||||
@@ -3842,6 +3962,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="SimpleX Address" xml:space="preserve">
|
||||
<source>SimpleX Address</source>
|
||||
<target>SimpleX 地址</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="SimpleX Chat security was audited by Trail of Bits." xml:space="preserve">
|
||||
@@ -3871,6 +3992,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="SimpleX address" xml:space="preserve">
|
||||
<source>SimpleX address</source>
|
||||
<target>SimpleX 地址</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="SimpleX contact address" xml:space="preserve">
|
||||
@@ -3908,6 +4030,11 @@
|
||||
<target>已跳过消息</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Some non-fatal errors occurred during import - you may see Chat console for more details." xml:space="preserve">
|
||||
<source>Some non-fatal errors occurred during import - you may see Chat console for more details.</source>
|
||||
<target>导入过程中发生了一些非致命错误——您可以查看聊天控制台了解更多详细信息。</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Somebody" xml:space="preserve">
|
||||
<source>Somebody</source>
|
||||
<target>某人</target>
|
||||
@@ -3970,10 +4097,12 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="Stop sharing" xml:space="preserve">
|
||||
<source>Stop sharing</source>
|
||||
<target>停止分享</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Stop sharing address?" xml:space="preserve">
|
||||
<source>Stop sharing address?</source>
|
||||
<target>停止分享地址?</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Submit" xml:space="preserve">
|
||||
@@ -4198,11 +4327,6 @@ 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 feature is experimental! It will only work if the other client has version 4.2 installed. You should see the message in the conversation once the address change is completed – please check that you can still receive messages from this contact (or group member)." xml:space="preserve">
|
||||
<source>This feature is experimental! It will only work if the other client has version 4.2 installed. You should see the message in the conversation once the address change is completed – please check that you can still receive messages from this contact (or group member).</source>
|
||||
<target>此功能是实验性的! 它仅在其他客户端安装了 4.2 版时才有效。 地址更改完成后,您应该会在对话中看到该消息——请检查您是否仍能收到来自该联系人(或群组成员)的消息。</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="This group no longer exists." xml:space="preserve">
|
||||
<source>This group no longer exists.</source>
|
||||
<target>该群组已不存在。</target>
|
||||
@@ -4220,6 +4344,7 @@ It can happen because of some bug or when the connection is compromised.</source
|
||||
</trans-unit>
|
||||
<trans-unit id="To connect, your contact can scan QR code or use the link in the app." xml:space="preserve">
|
||||
<source>To connect, your contact can scan QR code or use the link in the app.</source>
|
||||
<target>您的联系人可以扫描二维码或使用应用程序中的链接来建立连接。</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="To find the profile used for an incognito connection, tap the contact or group name on top of the chat." xml:space="preserve">
|
||||
@@ -4314,6 +4439,10 @@ You will be prompted to complete authentication before this feature is enabled.<
|
||||
<target>未预料的迁移状态</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Unfav." xml:space="preserve">
|
||||
<source>Unfav.</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Unhide" xml:space="preserve">
|
||||
<source>Unhide</source>
|
||||
<target>取消隐藏</target>
|
||||
@@ -4331,6 +4460,7 @@ You will be prompted to complete authentication before this feature is enabled.<
|
||||
</trans-unit>
|
||||
<trans-unit id="Unit" xml:space="preserve">
|
||||
<source>Unit</source>
|
||||
<target>单位</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Unknown caller" xml:space="preserve">
|
||||
@@ -4582,6 +4712,7 @@ To connect, please ask your contact to create another connection link and check
|
||||
</trans-unit>
|
||||
<trans-unit id="When people request to connect, you can accept or reject it." xml:space="preserve">
|
||||
<source>When people request to connect, you can accept or reject it.</source>
|
||||
<target>当人们请求连接时,您可以接受或拒绝它。</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="When you share an incognito profile with somebody, this profile will be used for the groups they invite you to." xml:space="preserve">
|
||||
@@ -4656,13 +4787,12 @@ To connect, please ask your contact to create another connection link and check
|
||||
</trans-unit>
|
||||
<trans-unit id="You can create it later" xml:space="preserve">
|
||||
<source>You can create it later</source>
|
||||
<target>您可以以后创建它</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="You can hide or mute a user profile - swipe it to the right. SimpleX Lock must be enabled." xml:space="preserve">
|
||||
<source>You can hide or mute a user profile - swipe it to the right.
|
||||
SimpleX Lock must be enabled.</source>
|
||||
<target>您可以隐藏或静音用户个人资料——只需向右滑动。
|
||||
必须启用 SimpleX Lock。</target>
|
||||
<trans-unit id="You can hide or mute a user profile - swipe it to the right." xml:space="preserve">
|
||||
<source>You can hide or mute a user profile - swipe it to the right.</source>
|
||||
<target>您可以隐藏或静音用户个人资料——只需向右滑动。</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="You can now send messages to %@" xml:space="preserve">
|
||||
@@ -4682,6 +4812,7 @@ SimpleX Lock must be enabled.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="You can share this address with your contacts to let them connect with **%@**." xml:space="preserve">
|
||||
<source>You can share this address with your contacts to let them connect with **%@**.</source>
|
||||
<target>您可以与您的联系人分享该地址,让他们与 **%@** 联系。</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="You can share your address as a link or QR code - anybody can connect to you." xml:space="preserve">
|
||||
@@ -4801,7 +4932,7 @@ SimpleX Lock must be enabled.</source>
|
||||
</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>如果您以后删除它,您不会丢失您的联系人。</target>
|
||||
<target>如果您以后删除您的地址,您不会丢失您的联系人。</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">
|
||||
@@ -4869,11 +5000,6 @@ SimpleX Lock must be enabled.</source>
|
||||
<target>您的聊天资料</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Your chats" xml:space="preserve">
|
||||
<source>Your chats</source>
|
||||
<target>您的聊天</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Your contact needs to be online for the connection to complete. You can cancel this connection and remove the contact (and try later with a new link)." xml:space="preserve">
|
||||
<source>Your contact needs to be online for the connection to complete.
|
||||
You can cancel this connection and remove the contact (and try later with a new link).</source>
|
||||
@@ -4894,10 +5020,13 @@ You can cancel this connection and remove the contact (and try later with a new
|
||||
<trans-unit id="Your contacts in SimpleX will see it. You can change it in Settings." xml:space="preserve">
|
||||
<source>Your contacts in SimpleX will see it.
|
||||
You can change it in Settings.</source>
|
||||
<target>您的 SimpleX 的联系人会看到它。
|
||||
您可以在设置中更改它。</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Your contacts will remain connected." xml:space="preserve">
|
||||
<source>Your contacts will remain connected.</source>
|
||||
<target>与您的联系人保持连接。</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Your current chat database will be DELETED and REPLACED with the imported one." xml:space="preserve">
|
||||
@@ -5109,7 +5238,7 @@ SimpleX 服务器无法看到您的资料。</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="connecting (introduction invitation)" xml:space="preserve">
|
||||
<source>connecting (introduction invitation)</source>
|
||||
<target>连接(介绍邀请)</target>
|
||||
<target>连接中(介绍邀请)</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="connecting call" xml:space="preserve">
|
||||
@@ -5149,6 +5278,7 @@ SimpleX 服务器无法看到您的资料。</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="custom" xml:space="preserve">
|
||||
<source>custom</source>
|
||||
<target>自定义</target>
|
||||
<note>dropdown time picker choice</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="database version is newer than the app, but no down migration for: %@" xml:space="preserve">
|
||||
@@ -5158,6 +5288,7 @@ SimpleX 服务器无法看到您的资料。</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="days" xml:space="preserve">
|
||||
<source>days</source>
|
||||
<target>天</target>
|
||||
<note>time unit</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="default (%@)" xml:space="preserve">
|
||||
@@ -5237,6 +5368,7 @@ SimpleX 服务器无法看到您的资料。</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="hours" xml:space="preserve">
|
||||
<source>hours</source>
|
||||
<target>小时</target>
|
||||
<note>time unit</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="iOS Keychain is used to securely store passphrase - it allows receiving push notifications." xml:space="preserve">
|
||||
@@ -5346,6 +5478,7 @@ SimpleX 服务器无法看到您的资料。</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="minutes" xml:space="preserve">
|
||||
<source>minutes</source>
|
||||
<target>分钟</target>
|
||||
<note>time unit</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="missed call" xml:space="preserve">
|
||||
@@ -5365,6 +5498,7 @@ SimpleX 服务器无法看到您的资料。</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="months" xml:space="preserve">
|
||||
<source>months</source>
|
||||
<target>月</target>
|
||||
<note>time unit</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="never" xml:space="preserve">
|
||||
@@ -5389,6 +5523,7 @@ SimpleX 服务器无法看到您的资料。</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="no text" xml:space="preserve">
|
||||
<source>no text</source>
|
||||
<target>无文本</target>
|
||||
<note>copied message info in history</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="observer" xml:space="preserve">
|
||||
@@ -5469,6 +5604,7 @@ SimpleX 服务器无法看到您的资料。</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="seconds" xml:space="preserve">
|
||||
<source>seconds</source>
|
||||
<target>秒</target>
|
||||
<note>time unit</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="secret" xml:space="preserve">
|
||||
@@ -5548,6 +5684,7 @@ SimpleX 服务器无法看到您的资料。</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="weeks" xml:space="preserve">
|
||||
<source>weeks</source>
|
||||
<target>周</target>
|
||||
<note>time unit</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="yes" xml:space="preserve">
|
||||
|
||||
@@ -84,7 +84,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="%d days" xml:space="preserve" approved="no">
|
||||
<source>%d days</source>
|
||||
<target state="translated">%d 日</target>
|
||||
<target state="translated">%d 天</target>
|
||||
<note>message ttl</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="%d hours" xml:space="preserve" approved="no">
|
||||
@@ -234,12 +234,12 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="**e2e encrypted** audio call" xml:space="preserve" approved="no">
|
||||
<source>**e2e encrypted** audio call</source>
|
||||
<target state="translated">**已經完成端對端加密的**語音通話</target>
|
||||
<target state="translated">**端對端加密的**語音通話</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="**e2e encrypted** video call" xml:space="preserve" approved="no">
|
||||
<source>**e2e encrypted** video call</source>
|
||||
<target state="translated">**已經完成端對端加密的**視頻通話</target>
|
||||
<target state="translated">**端對端加密的**視頻通話</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="*bold*" xml:space="preserve" approved="no">
|
||||
@@ -259,7 +259,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="1 day" xml:space="preserve" approved="no">
|
||||
<source>1 day</source>
|
||||
<target state="translated">一日</target>
|
||||
<target state="translated">1天</target>
|
||||
<note>message ttl</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="1 hour" xml:space="preserve" approved="no">
|
||||
@@ -355,22 +355,22 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="Add servers by scanning QR codes." xml:space="preserve" approved="no">
|
||||
<source>Add servers by scanning QR codes.</source>
|
||||
<target state="translated">使用二維碼掃描並新增伺服器。</target>
|
||||
<target state="translated">使用二維碼掃描以新增伺服器。</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Add server…" xml:space="preserve" approved="no">
|
||||
<source>Add server…</source>
|
||||
<target state="translated">新增伺服器 …</target>
|
||||
<target state="translated">新增伺服器…</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Add to another device" xml:space="preserve" approved="no">
|
||||
<source>Add to another device</source>
|
||||
<target state="translated">加入到另一個裝置上</target>
|
||||
<target state="translated">新增到另一個裝置上</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Admins can create the links to join groups." xml:space="preserve" approved="no">
|
||||
<source>Admins can create the links to join groups.</source>
|
||||
<target state="translated">管理員可以建立可以加入群組的連結。</target>
|
||||
<target state="translated">管理員可以建立加入群組的連結。</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Advanced network settings" xml:space="preserve" approved="no">
|
||||
@@ -410,7 +410,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="Allow sending direct messages to members." xml:space="preserve" approved="no">
|
||||
<source>Allow sending direct messages to members.</source>
|
||||
<target state="translated">允許在群組內選擇成員後傳送訊息。</target>
|
||||
<target state="translated">允許向群組內的成員傳送私訊。</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Allow sending disappearing messages." xml:space="preserve" approved="no">
|
||||
@@ -430,7 +430,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="Allow voice messages only if your contact allows them." xml:space="preserve" approved="no">
|
||||
<source>Allow voice messages only if your contact allows them.</source>
|
||||
<target state="translated">只能在你的聯絡人允許使用語言訊息的時候,才能使用語音訊息。</target>
|
||||
<target state="translated">只能在你的聯絡人允許的情況下,才允許語言訊息。</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Allow voice messages?" xml:space="preserve" approved="no">
|
||||
@@ -465,7 +465,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="App build: %@" xml:space="preserve" approved="no">
|
||||
<source>App build: %@</source>
|
||||
<target state="translated">程式建構:%@</target>
|
||||
<target state="translated">應用程式建構:%@</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="App icon" xml:space="preserve" approved="no">
|
||||
@@ -485,7 +485,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="Appearance" xml:space="preserve" approved="no">
|
||||
<source>Appearance</source>
|
||||
<target state="translated">主題</target>
|
||||
<target state="translated">樣式</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Attach" xml:space="preserve" approved="no">
|
||||
@@ -560,7 +560,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="Can't invite contacts!" xml:space="preserve" approved="no">
|
||||
<source>Can't invite contacts!</source>
|
||||
<target state="translated">無法邀請該聯絡人!</target>
|
||||
<target state="translated">無法邀請聯絡人!</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Cancel" xml:space="preserve" approved="no">
|
||||
@@ -585,7 +585,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="Change database passphrase?" xml:space="preserve" approved="no">
|
||||
<source>Change database passphrase?</source>
|
||||
<target state="translated">更改數據庫密碼?</target>
|
||||
<target state="translated">修改數據庫密碼?</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Change member role?" xml:space="preserve" approved="no">
|
||||
@@ -710,7 +710,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="Confirm new passphrase…" xml:space="preserve" approved="no">
|
||||
<source>Confirm new passphrase…</source>
|
||||
<target state="translated">確定新密碼 …</target>
|
||||
<target state="translated">確定新密碼…</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Connect" xml:space="preserve" approved="no">
|
||||
@@ -735,7 +735,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="Connect via link / QR code" xml:space="preserve" approved="no">
|
||||
<source>Connect via link / QR code</source>
|
||||
<target state="translated">使用連結連接 / 使用二維碼連接</target>
|
||||
<target state="translated">透過連結 / 二維碼去連接</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Connect via one-time link?" xml:space="preserve" approved="no">
|
||||
@@ -779,7 +779,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="Connection request sent!" xml:space="preserve" approved="no">
|
||||
<source>Connection request sent!</source>
|
||||
<target state="translated">連線請求已傳送!</target>
|
||||
<target state="translated">已傳送連線請求!</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Connection timeout" xml:space="preserve" approved="no">
|
||||
@@ -1026,7 +1026,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="Delete archive" xml:space="preserve" approved="no">
|
||||
<source>Delete archive</source>
|
||||
<target state="translated">刪除封存</target>
|
||||
<target state="translated">刪除存檔</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Delete chat archive?" xml:space="preserve" approved="no">
|
||||
@@ -2224,7 +2224,7 @@ We will be adding server redundancy to prevent lost messages.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="Only group owners can change group preferences." xml:space="preserve" approved="no">
|
||||
<source>Only group owners can change group preferences.</source>
|
||||
<target state="translated">只有這個群組的負責人才能修改群組內的設定。</target>
|
||||
<target state="translated">只有群組的負責人才能修改群組內的設定。</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Only group owners can enable voice messages." xml:space="preserve" approved="no">
|
||||
@@ -2239,7 +2239,7 @@ We will be adding server redundancy to prevent lost messages.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="Only you can send disappearing messages." xml:space="preserve" approved="no">
|
||||
<source>Only you can send disappearing messages.</source>
|
||||
<target state="translated">只有你能傳送自動銷毀的訊息。</target>
|
||||
<target state="translated">只有你可以傳送自動銷毀的訊息。</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Only you can send voice messages." xml:space="preserve" approved="no">
|
||||
@@ -2249,7 +2249,7 @@ We will be adding server redundancy to prevent lost messages.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="Only your contact can irreversibly delete messages (you can mark them for deletion)." xml:space="preserve" approved="no">
|
||||
<source>Only your contact can irreversibly delete messages (you can mark them for deletion).</source>
|
||||
<target state="translated">只有你的聊絡人可以不可逆的刪除訊息(你可以將它標記為刪除)。</target>
|
||||
<target state="translated">只有你的聯絡人可以不可逆的刪除訊息(你可以將它標記為刪除)。</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Only your contact can send disappearing messages." xml:space="preserve" approved="no">
|
||||
@@ -2469,7 +2469,7 @@ We will be adding server redundancy to prevent lost messages.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="Recipients see updates as you type them." xml:space="preserve" approved="no">
|
||||
<source>Recipients see updates as you type them.</source>
|
||||
<target state="translated">當你輸入訊息時侯,對方將可以即時看到你輸入的內容。</target>
|
||||
<target state="translated">當你輸入訊息的時侯,對方會即時看到你輸入的內容。</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Reject" xml:space="preserve" approved="no">
|
||||
@@ -2779,7 +2779,7 @@ We will be adding server redundancy to prevent lost messages.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="Set 1 day" xml:space="preserve" approved="no">
|
||||
<source>Set 1 day</source>
|
||||
<target state="translated">設定為一日</target>
|
||||
<target state="translated">設定為1天</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Set contact name…" xml:space="preserve" approved="no">
|
||||
@@ -3702,7 +3702,7 @@ SimpleX 伺服器並不會看到你的個人檔案。</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="above, then choose:" xml:space="preserve" approved="no">
|
||||
<source>above, then choose:</source>
|
||||
<target state="translated">然後選按:</target>
|
||||
<target state="translated">然後,選按:</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="accepted call" xml:space="preserve" approved="no">
|
||||
@@ -3892,7 +3892,7 @@ SimpleX 伺服器並不會看到你的個人檔案。</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="e2e encrypted" xml:space="preserve" approved="no">
|
||||
<source>e2e encrypted</source>
|
||||
<target state="translated">已完成端對端加密</target>
|
||||
<target state="translated">端對端加密</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="enabled" xml:space="preserve" approved="no">
|
||||
@@ -4343,7 +4343,7 @@ SimpleX 伺服器並不會看到你的個人檔案。</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="Add welcome message" xml:space="preserve" approved="no">
|
||||
<source>Add welcome message</source>
|
||||
<target state="translated">添加歡迎訊息</target>
|
||||
<target state="translated">新增歡迎訊息</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="All chats and messages will be deleted - this cannot be undone!" xml:space="preserve" approved="no">
|
||||
@@ -4398,7 +4398,7 @@ SimpleX 伺服器並不會看到你的個人檔案。</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="Delete files for all chat profiles" xml:space="preserve" approved="no">
|
||||
<source>Delete files for all chat profiles</source>
|
||||
<target state="translated">刪除所有你的個人對話檔案及媒體檔案</target>
|
||||
<target state="translated">刪除所有你的個人對話資料的檔案</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Delete user profile?" xml:space="preserve" approved="no">
|
||||
@@ -4510,7 +4510,7 @@ SimpleX 伺服器並不會看到你的個人檔案。</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="Add profile" xml:space="preserve" approved="no">
|
||||
<source>Add profile</source>
|
||||
<target state="translated">加入新的個人檔案</target>
|
||||
<target state="translated">新增新的個人檔案</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Both you and your contact can make calls." xml:space="preserve" approved="no">
|
||||
@@ -4545,7 +4545,7 @@ SimpleX 伺服器並不會看到你的個人檔案。</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="App passcode" xml:space="preserve" approved="no">
|
||||
<source>App passcode</source>
|
||||
<target state="translated">程式密碼</target>
|
||||
<target state="translated">應用程式密碼</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="File will be deleted from servers." xml:space="preserve" approved="no">
|
||||
@@ -4732,7 +4732,7 @@ Available in v5.1</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="Audio/video calls are prohibited." xml:space="preserve" approved="no">
|
||||
<source>Audio/video calls are prohibited.</source>
|
||||
<target state="translated">禁用語言/視像通話。</target>
|
||||
<target state="translated">禁用語言/視訊通話。</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Bad message ID" xml:space="preserve" approved="no">
|
||||
@@ -4742,7 +4742,7 @@ Available in v5.1</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="Bad message hash" xml:space="preserve" approved="no">
|
||||
<source>Bad message hash</source>
|
||||
<target state="translated">錯誤訊息雜湊值</target>
|
||||
<target state="translated">錯誤的訊息雜湊值</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Change lock mode" xml:space="preserve" approved="no">
|
||||
@@ -5411,7 +5411,7 @@ SimpleX Lock must be enabled.</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" approved="no">
|
||||
<source>You can share your address as a link or QR code - anybody can connect to you.</source>
|
||||
<target state="translated">你可以將你的地址作為連接或二維碼以分享 - 任何人都可以連接到你。</target>
|
||||
<target state="translated">你可以將你的地址作為連結或二維碼以分享 - 任何人都可以連接到你。</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="You won't lose your contacts if you later delete your address." xml:space="preserve" approved="no">
|
||||
@@ -5438,7 +5438,7 @@ You can change it in Settings.</source>
|
||||
</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" approved="no">
|
||||
<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 state="translated">將聯絡地址加入到你的個人檔案中,以便你的聯絡人與其他人分享你的聯絡地址。更新了的個人檔案將傳送給你的聯絡人。</target>
|
||||
<target state="translated">將聯絡地址新增到你的個人檔案中,以便你的聯絡人與其他人分享你的聯絡地址。更新了的個人檔案將傳送給你的聯絡人。</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="You will still receive calls and notifications from muted profiles when they are active." xml:space="preserve" approved="no">
|
||||
@@ -5493,6 +5493,381 @@ It can happen because of some bug or when the connection is compromised.</source
|
||||
<target state="translated">影片和檔案和最大上限為1gb</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="%d weeks" xml:space="preserve" approved="no">
|
||||
<source>%d weeks</source>
|
||||
<target state="translated">%d 個星期</target>
|
||||
<note>time interval</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="5 minutes" xml:space="preserve" approved="no">
|
||||
<source>5 minutes</source>
|
||||
<target state="translated">5分鐘</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="All app data is deleted." xml:space="preserve" approved="no">
|
||||
<source>All app data is deleted.</source>
|
||||
<target state="translated">已刪除所有的應用程式數據。</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="App passcode is replaced with self-destruct passcode." xml:space="preserve" approved="no">
|
||||
<source>App passcode is replaced with self-destruct passcode.</source>
|
||||
<target state="translated">應用程式密碼已替換為自毀密碼。</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Disappearing message" xml:space="preserve" approved="no">
|
||||
<source>Disappearing message</source>
|
||||
<target state="translated">自動銷毀訊息</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Enable self-destruct passcode" xml:space="preserve" approved="no">
|
||||
<source>Enable self-destruct passcode</source>
|
||||
<target state="translated">啟用自毀密碼</target>
|
||||
<note>set passcode view</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Group members can add message reactions." xml:space="preserve" approved="no">
|
||||
<source>Group members can add message reactions.</source>
|
||||
<target state="translated">群組內的成員可以新增訊息互動。</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="If you enter your self-destruct passcode while opening the app:" xml:space="preserve" approved="no">
|
||||
<source>If you enter your self-destruct passcode while opening the app:</source>
|
||||
<target state="translated">如果你在開啟應用程式時輸入自毀密碼:</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Self-destruct" xml:space="preserve" approved="no">
|
||||
<source>Self-destruct</source>
|
||||
<target state="translated">自毁</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Select" xml:space="preserve" approved="no">
|
||||
<source>Select</source>
|
||||
<target state="translated">選擇</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="%@ (current)" xml:space="preserve" approved="no">
|
||||
<source>%@ (current)</source>
|
||||
<target state="translated">%@ (目前的)</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="%@ (current):" xml:space="preserve" approved="no">
|
||||
<source>%@ (current):</source>
|
||||
<target state="translated">%@ (目前的):</target>
|
||||
<note>copied message info</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="Deleted at" xml:space="preserve" approved="no">
|
||||
<source>Deleted at</source>
|
||||
<target state="translated">已刪除在</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Deleted at: %@" xml:space="preserve" approved="no">
|
||||
<source>Deleted at: %@</source>
|
||||
<target state="translated">已刪除在:%@</target>
|
||||
<note>copied message info</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="New display name" xml:space="preserve" approved="no">
|
||||
<source>New display name</source>
|
||||
<target state="translated">新的顯示名稱</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Opening database…" xml:space="preserve" approved="no">
|
||||
<source>Opening database…</source>
|
||||
<target state="translated">開啟數據庫中…</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Sent at" xml:space="preserve" approved="no">
|
||||
<source>Sent at</source>
|
||||
<target state="translated">已傳送在</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Set passcode" xml:space="preserve" approved="no">
|
||||
<source>Set passcode</source>
|
||||
<target state="translated">設定密碼</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Sent message" xml:space="preserve" approved="no">
|
||||
<source>Sent message</source>
|
||||
<target state="translated">已傳送訊息</target>
|
||||
<note>message info title</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Sent at: %@" xml:space="preserve" approved="no">
|
||||
<source>Sent at: %@</source>
|
||||
<target state="translated">已傳送在:%@</target>
|
||||
<note>copied message info</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="custom" xml:space="preserve" approved="no">
|
||||
<source>custom</source>
|
||||
<target state="translated">自定義</target>
|
||||
<note>dropdown time picker choice</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="days" xml:space="preserve" approved="no">
|
||||
<source>days</source>
|
||||
<target state="translated">天</target>
|
||||
<note>time unit</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="0s" xml:space="preserve" approved="no">
|
||||
<source>0s</source>
|
||||
<target state="translated">0秒</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="1 minute" xml:space="preserve" approved="no">
|
||||
<source>1 minute</source>
|
||||
<target state="translated">1分鐘</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Allow message reactions." xml:space="preserve" approved="no">
|
||||
<source>Allow message reactions.</source>
|
||||
<target state="translated">允許訊息回應。</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="An empty chat profile with the provided name is created, and the app opens as usual." xml:space="preserve" approved="no">
|
||||
<source>An empty chat profile with the provided name is created, and the app opens as usual.</source>
|
||||
<target state="translated">已建立一個具有所提供名稱的空白對話檔案,而應用程式將照常開啟。</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Better messages" xml:space="preserve" approved="no">
|
||||
<source>Better messages</source>
|
||||
<target state="translated">更佳的訊息</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Change self-destruct mode" xml:space="preserve" approved="no">
|
||||
<source>Change self-destruct mode</source>
|
||||
<target state="translated">修改自毁模式</target>
|
||||
<note>authentication reason</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Change self-destruct passcode" xml:space="preserve" approved="no">
|
||||
<source>Change self-destruct passcode</source>
|
||||
<target state="translated">修改自毀密碼</target>
|
||||
<note>authentication reason
|
||||
set passcode view</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Custom time" xml:space="preserve" approved="no">
|
||||
<source>Custom time</source>
|
||||
<target state="translated">自定義時間</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Database ID: %d" xml:space="preserve" approved="no">
|
||||
<source>Database ID: %d</source>
|
||||
<target state="translated">數據庫 ID:%d</target>
|
||||
<note>copied message info</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Enable self-destruct" xml:space="preserve" approved="no">
|
||||
<source>Enable self-destruct</source>
|
||||
<target state="translated">啟用自毀</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Finally, we have them! 🚀" xml:space="preserve" approved="no">
|
||||
<source>Finally, we have them! 🚀</source>
|
||||
<target state="translated">終於,我們有了它們!🚀</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="History" xml:space="preserve" approved="no">
|
||||
<source>History</source>
|
||||
<target state="translated">紀錄</target>
|
||||
<note>copied message info</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="If you enter this passcode when opening the app, all app data will be irreversibly removed!" xml:space="preserve" approved="no">
|
||||
<source>If you enter this passcode when opening the app, all app data will be irreversibly removed!</source>
|
||||
<target state="translated">如果你在開啟應用程式時輸入此密碼,所有應用程式資料將被不可逆轉地刪除!</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Info" xml:space="preserve" approved="no">
|
||||
<source>Info</source>
|
||||
<target state="translated">個人訊息</target>
|
||||
<note>chat item action</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Japanese interface" xml:space="preserve" approved="no">
|
||||
<source>Japanese interface</source>
|
||||
<target state="translated">日本語言界面</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Message reactions" xml:space="preserve" approved="no">
|
||||
<source>Message reactions</source>
|
||||
<target state="translated">訊息互動</target>
|
||||
<note>chat feature</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Moderated at: %@" xml:space="preserve" approved="no">
|
||||
<source>Moderated at: %@</source>
|
||||
<target state="translated">已移除在:%@</target>
|
||||
<note>copied message info</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Moderated at" xml:space="preserve" approved="no">
|
||||
<source>Moderated at</source>
|
||||
<target state="translated">已移除在</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Message reactions are prohibited in this group." xml:space="preserve" approved="no">
|
||||
<source>Message reactions are prohibited in this group.</source>
|
||||
<target state="translated">訊息互動於這個群組內是禁用的。</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Only you can add message reactions." xml:space="preserve" approved="no">
|
||||
<source>Only you can add message reactions.</source>
|
||||
<target state="translated">只有你可以新增訊息互動。</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Only your contact can add message reactions." xml:space="preserve" approved="no">
|
||||
<source>Only your contact can add message reactions.</source>
|
||||
<target state="translated">只有你的聯絡人可以新增訊息互動。</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Prohibit message reactions." xml:space="preserve" approved="no">
|
||||
<source>Prohibit message reactions.</source>
|
||||
<target state="translated">禁止訊息互動。</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Read more" xml:space="preserve" approved="no">
|
||||
<source>Read more</source>
|
||||
<target state="translated">查看更多</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="React..." xml:space="preserve" approved="no">
|
||||
<source>React...</source>
|
||||
<target state="translated">互動...</target>
|
||||
<note>chat item menu</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Prohibit messages reactions." xml:space="preserve" approved="no">
|
||||
<source>Prohibit messages reactions.</source>
|
||||
<target state="translated">禁止訊息互動。</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Received message" xml:space="preserve" approved="no">
|
||||
<source>Received message</source>
|
||||
<target state="translated">已接收訊息</target>
|
||||
<note>message info title</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Received at: %@" xml:space="preserve" approved="no">
|
||||
<source>Received at: %@</source>
|
||||
<target state="translated">已接收在:%@</target>
|
||||
<note>copied message info</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Received at" xml:space="preserve" approved="no">
|
||||
<source>Received at</source>
|
||||
<target state="translated">已接收在</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Record updated at: %@" xml:space="preserve" approved="no">
|
||||
<source>Record updated at: %@</source>
|
||||
<target state="translated">紀錄已更新在:%@</target>
|
||||
<note>copied message info</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Record updated at" xml:space="preserve" approved="no">
|
||||
<source>Record updated at</source>
|
||||
<target state="translated">紀錄已更新在</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Self-destruct passcode enabled!" xml:space="preserve" approved="no">
|
||||
<source>Self-destruct passcode enabled!</source>
|
||||
<target state="translated">已啟用自毀密碼!</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Self-destruct passcode changed!" xml:space="preserve" approved="no">
|
||||
<source>Self-destruct passcode changed!</source>
|
||||
<target state="translated">已修改自毀密碼!</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Self-destruct passcode" xml:space="preserve" approved="no">
|
||||
<source>Self-destruct passcode</source>
|
||||
<target state="translated">自毀密碼</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Send disappearing message" xml:space="preserve" approved="no">
|
||||
<source>Send disappearing message</source>
|
||||
<target state="translated">傳送自動銷毀訊息</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Unit" xml:space="preserve" approved="no">
|
||||
<source>Unit</source>
|
||||
<target state="translated">單位</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="hours" xml:space="preserve" approved="no">
|
||||
<source>hours</source>
|
||||
<target state="translated">小時</target>
|
||||
<note>time unit</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="minutes" xml:space="preserve" approved="no">
|
||||
<source>minutes</source>
|
||||
<target state="translated">分鐘</target>
|
||||
<note>time unit</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="weeks" xml:space="preserve" approved="no">
|
||||
<source>weeks</source>
|
||||
<target state="translated">星期</target>
|
||||
<note>time unit</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="seconds" xml:space="preserve" approved="no">
|
||||
<source>seconds</source>
|
||||
<target state="translated">秒</target>
|
||||
<note>time unit</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="months" xml:space="preserve" approved="no">
|
||||
<source>months</source>
|
||||
<target state="translated">個月</target>
|
||||
<note>time unit</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="no text" xml:space="preserve" approved="no">
|
||||
<source>no text</source>
|
||||
<target state="translated">沒有文字</target>
|
||||
<note>copied message info in history</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Message reactions are prohibited in this chat." xml:space="preserve" approved="no">
|
||||
<source>Message reactions are prohibited in this chat.</source>
|
||||
<target state="translated">訊息互動於這個聊天室是禁用的。</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="30 seconds" xml:space="preserve" approved="no">
|
||||
<source>30 seconds</source>
|
||||
<target state="translated">30秒</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Duration" xml:space="preserve" approved="no">
|
||||
<source>Duration</source>
|
||||
<target state="translated">持續時間</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Allow your contacts adding message reactions." xml:space="preserve" approved="no">
|
||||
<source>Allow your contacts adding message reactions.</source>
|
||||
<target state="translated">允許你的聯絡人新增訊息互動。</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Disappears at" xml:space="preserve" approved="no">
|
||||
<source>Disappears at</source>
|
||||
<target state="translated">銷毀於</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Disappears at: %@" xml:space="preserve" approved="no">
|
||||
<source>Disappears at: %@</source>
|
||||
<target state="translated">銷毀於: %@</target>
|
||||
<note>copied message info</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="- voice messages up to 5 minutes. - custom time to disappear. - editing history." xml:space="preserve" approved="no">
|
||||
<source>- voice messages up to 5 minutes.
|
||||
- custom time to disappear.
|
||||
- editing history.</source>
|
||||
<target state="translated">- 長達5分鐘的語音訊息。
|
||||
- 自定義銷毀時間。
|
||||
- 編輯紀錄。</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="All data is erased when it is entered." xml:space="preserve" approved="no">
|
||||
<source>All data is erased when it is entered.</source>
|
||||
<target state="translated">所有數據會在輸入後刪除。</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" approved="no">
|
||||
<source>Allow message reactions only if your contact allows them.</source>
|
||||
<target state="translated">只有你的聯絡人允許的情況下,才允許訊息互動。</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Both you and your contact can add message reactions." xml:space="preserve" approved="no">
|
||||
<source>Both you and your contact can add message reactions.</source>
|
||||
<target state="translated">你和你的聯絡人可以新增訊息互動。</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="zh-Hant" datatype="plaintext">
|
||||
|
||||
@@ -84,11 +84,6 @@
|
||||
5CA059ED279559F40002BEB4 /* ContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5CA059C4279559F40002BEB4 /* ContentView.swift */; };
|
||||
5CA059EF279559F40002BEB4 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 5CA059C5279559F40002BEB4 /* Assets.xcassets */; };
|
||||
5CA7DFC329302AF000F7FDDE /* AppSheet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5CA7DFC229302AF000F7FDDE /* AppSheet.swift */; };
|
||||
5CAC41212A1985AC00C331A2 /* libgmp.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5CAC411C2A1985AB00C331A2 /* libgmp.a */; };
|
||||
5CAC41222A1985AC00C331A2 /* libffi.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5CAC411D2A1985AB00C331A2 /* libffi.a */; };
|
||||
5CAC41232A1985AC00C331A2 /* libgmpxx.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5CAC411E2A1985AB00C331A2 /* libgmpxx.a */; };
|
||||
5CAC41242A1985AC00C331A2 /* libHSsimplex-chat-5.1.0.1-LZsKMJmAS7yI1az6ngjXWH-ghc8.10.7.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5CAC411F2A1985AC00C331A2 /* libHSsimplex-chat-5.1.0.1-LZsKMJmAS7yI1az6ngjXWH-ghc8.10.7.a */; };
|
||||
5CAC41252A1985AC00C331A2 /* libHSsimplex-chat-5.1.0.1-LZsKMJmAS7yI1az6ngjXWH.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5CAC41202A1985AC00C331A2 /* libHSsimplex-chat-5.1.0.1-LZsKMJmAS7yI1az6ngjXWH.a */; };
|
||||
5CADE79A29211BB900072E13 /* PreferencesView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5CADE79929211BB900072E13 /* PreferencesView.swift */; };
|
||||
5CADE79C292131E900072E13 /* ContactPreferencesView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5CADE79B292131E900072E13 /* ContactPreferencesView.swift */; };
|
||||
5CB0BA882826CB3A00B3292C /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 5CB0BA862826CB3A00B3292C /* InfoPlist.strings */; };
|
||||
@@ -170,6 +165,11 @@
|
||||
648010AB281ADD15009009B9 /* CIFileView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 648010AA281ADD15009009B9 /* CIFileView.swift */; };
|
||||
649BCDA0280460FD00C3A862 /* ComposeImageView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 649BCD9F280460FD00C3A862 /* ComposeImageView.swift */; };
|
||||
649BCDA22805D6EF00C3A862 /* CIImageView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 649BCDA12805D6EF00C3A862 /* CIImageView.swift */; };
|
||||
64A353102A4C84CE007CD71D /* libgmp.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 64A3530B2A4C84CE007CD71D /* libgmp.a */; };
|
||||
64A353112A4C84CE007CD71D /* libHSsimplex-chat-5.2.0.0-ESKsZ4YorLH7yFQuFvHeIm.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 64A3530C2A4C84CE007CD71D /* libHSsimplex-chat-5.2.0.0-ESKsZ4YorLH7yFQuFvHeIm.a */; };
|
||||
64A353122A4C84CE007CD71D /* libffi.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 64A3530D2A4C84CE007CD71D /* libffi.a */; };
|
||||
64A353132A4C84CE007CD71D /* libHSsimplex-chat-5.2.0.0-ESKsZ4YorLH7yFQuFvHeIm-ghc8.10.7.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 64A3530E2A4C84CE007CD71D /* libHSsimplex-chat-5.2.0.0-ESKsZ4YorLH7yFQuFvHeIm-ghc8.10.7.a */; };
|
||||
64A353142A4C84CE007CD71D /* libgmpxx.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 64A3530F2A4C84CE007CD71D /* libgmpxx.a */; };
|
||||
64AA1C6927EE10C800AC7277 /* ContextItemView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 64AA1C6827EE10C800AC7277 /* ContextItemView.swift */; };
|
||||
64AA1C6C27F3537400AC7277 /* DeletedItemView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 64AA1C6B27F3537400AC7277 /* DeletedItemView.swift */; };
|
||||
64C06EB52A0A4A7C00792D4D /* ChatItemInfoView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 64C06EB42A0A4A7C00792D4D /* ChatItemInfoView.swift */; };
|
||||
@@ -253,7 +253,7 @@
|
||||
18415B08031E8FB0F7FC27F9 /* CallViewRenderers.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CallViewRenderers.swift; sourceTree = "<group>"; };
|
||||
18415DAAAD1ADBEDB0EDA852 /* VideoPlayerView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = VideoPlayerView.swift; sourceTree = "<group>"; };
|
||||
18415FD2E36F13F596A45BB4 /* CIVideoView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CIVideoView.swift; sourceTree = "<group>"; };
|
||||
3C714779281C0F6800CB4D4B /* www */ = {isa = PBXFileReference; lastKnownFileType = folder; name = www; path = ../android/app/src/main/assets/www; sourceTree = "<group>"; };
|
||||
3C714779281C0F6800CB4D4B /* www */ = {isa = PBXFileReference; lastKnownFileType = folder; name = www; path = ../multiplatform/android/src/main/assets/www; sourceTree = "<group>"; };
|
||||
3C8C548828133C84000A3EC7 /* PasteToConnectView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PasteToConnectView.swift; sourceTree = "<group>"; };
|
||||
3CDBCF4127FAE51000354CDD /* ComposeLinkView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ComposeLinkView.swift; sourceTree = "<group>"; };
|
||||
3CDBCF4727FF621E00354CDD /* CILinkView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CILinkView.swift; sourceTree = "<group>"; };
|
||||
@@ -355,11 +355,6 @@
|
||||
5CAC41192A192D8400C331A2 /* ja */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ja; path = ja.lproj/Localizable.strings; sourceTree = "<group>"; };
|
||||
5CAC411A2A192DE800C331A2 /* ja */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ja; path = "ja.lproj/SimpleX--iOS--InfoPlist.strings"; sourceTree = "<group>"; };
|
||||
5CAC411B2A192DE800C331A2 /* ja */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ja; path = ja.lproj/InfoPlist.strings; sourceTree = "<group>"; };
|
||||
5CAC411C2A1985AB00C331A2 /* libgmp.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libgmp.a; sourceTree = "<group>"; };
|
||||
5CAC411D2A1985AB00C331A2 /* libffi.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libffi.a; sourceTree = "<group>"; };
|
||||
5CAC411E2A1985AB00C331A2 /* libgmpxx.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libgmpxx.a; sourceTree = "<group>"; };
|
||||
5CAC411F2A1985AC00C331A2 /* libHSsimplex-chat-5.1.0.1-LZsKMJmAS7yI1az6ngjXWH-ghc8.10.7.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = "libHSsimplex-chat-5.1.0.1-LZsKMJmAS7yI1az6ngjXWH-ghc8.10.7.a"; sourceTree = "<group>"; };
|
||||
5CAC41202A1985AC00C331A2 /* libHSsimplex-chat-5.1.0.1-LZsKMJmAS7yI1az6ngjXWH.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = "libHSsimplex-chat-5.1.0.1-LZsKMJmAS7yI1az6ngjXWH.a"; sourceTree = "<group>"; };
|
||||
5CADE79929211BB900072E13 /* PreferencesView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PreferencesView.swift; sourceTree = "<group>"; };
|
||||
5CADE79B292131E900072E13 /* ContactPreferencesView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContactPreferencesView.swift; sourceTree = "<group>"; };
|
||||
5CB0BA872826CB3A00B3292C /* ru */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ru; path = ru.lproj/InfoPlist.strings; sourceTree = "<group>"; };
|
||||
@@ -446,6 +441,11 @@
|
||||
6493D667280ED77F007A76FB /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/Localizable.strings; sourceTree = "<group>"; };
|
||||
649BCD9F280460FD00C3A862 /* ComposeImageView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ComposeImageView.swift; sourceTree = "<group>"; };
|
||||
649BCDA12805D6EF00C3A862 /* CIImageView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CIImageView.swift; sourceTree = "<group>"; };
|
||||
64A3530B2A4C84CE007CD71D /* libgmp.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libgmp.a; sourceTree = "<group>"; };
|
||||
64A3530C2A4C84CE007CD71D /* libHSsimplex-chat-5.2.0.0-ESKsZ4YorLH7yFQuFvHeIm.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = "libHSsimplex-chat-5.2.0.0-ESKsZ4YorLH7yFQuFvHeIm.a"; sourceTree = "<group>"; };
|
||||
64A3530D2A4C84CE007CD71D /* libffi.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libffi.a; sourceTree = "<group>"; };
|
||||
64A3530E2A4C84CE007CD71D /* libHSsimplex-chat-5.2.0.0-ESKsZ4YorLH7yFQuFvHeIm-ghc8.10.7.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = "libHSsimplex-chat-5.2.0.0-ESKsZ4YorLH7yFQuFvHeIm-ghc8.10.7.a"; sourceTree = "<group>"; };
|
||||
64A3530F2A4C84CE007CD71D /* libgmpxx.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libgmpxx.a; sourceTree = "<group>"; };
|
||||
64AA1C6827EE10C800AC7277 /* ContextItemView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContextItemView.swift; sourceTree = "<group>"; };
|
||||
64AA1C6B27F3537400AC7277 /* DeletedItemView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DeletedItemView.swift; sourceTree = "<group>"; };
|
||||
64C06EB42A0A4A7C00792D4D /* ChatItemInfoView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChatItemInfoView.swift; sourceTree = "<group>"; };
|
||||
@@ -498,12 +498,12 @@
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
5CE2BA93284534B000EC33A6 /* libiconv.tbd in Frameworks */,
|
||||
5CAC41232A1985AC00C331A2 /* libgmpxx.a in Frameworks */,
|
||||
5CAC41212A1985AC00C331A2 /* libgmp.a in Frameworks */,
|
||||
5CAC41242A1985AC00C331A2 /* libHSsimplex-chat-5.1.0.1-LZsKMJmAS7yI1az6ngjXWH-ghc8.10.7.a in Frameworks */,
|
||||
5CAC41252A1985AC00C331A2 /* libHSsimplex-chat-5.1.0.1-LZsKMJmAS7yI1az6ngjXWH.a in Frameworks */,
|
||||
64A353132A4C84CE007CD71D /* libHSsimplex-chat-5.2.0.0-ESKsZ4YorLH7yFQuFvHeIm-ghc8.10.7.a in Frameworks */,
|
||||
64A353102A4C84CE007CD71D /* libgmp.a in Frameworks */,
|
||||
64A353112A4C84CE007CD71D /* libHSsimplex-chat-5.2.0.0-ESKsZ4YorLH7yFQuFvHeIm.a in Frameworks */,
|
||||
64A353122A4C84CE007CD71D /* libffi.a in Frameworks */,
|
||||
5CE2BA94284534BB00EC33A6 /* libz.tbd in Frameworks */,
|
||||
5CAC41222A1985AC00C331A2 /* libffi.a in Frameworks */,
|
||||
64A353142A4C84CE007CD71D /* libgmpxx.a in Frameworks */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
@@ -564,11 +564,11 @@
|
||||
5C764E5C279C70B7000C6508 /* Libraries */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
5CAC411D2A1985AB00C331A2 /* libffi.a */,
|
||||
5CAC411C2A1985AB00C331A2 /* libgmp.a */,
|
||||
5CAC411E2A1985AB00C331A2 /* libgmpxx.a */,
|
||||
5CAC411F2A1985AC00C331A2 /* libHSsimplex-chat-5.1.0.1-LZsKMJmAS7yI1az6ngjXWH-ghc8.10.7.a */,
|
||||
5CAC41202A1985AC00C331A2 /* libHSsimplex-chat-5.1.0.1-LZsKMJmAS7yI1az6ngjXWH.a */,
|
||||
64A3530D2A4C84CE007CD71D /* libffi.a */,
|
||||
64A3530B2A4C84CE007CD71D /* libgmp.a */,
|
||||
64A3530F2A4C84CE007CD71D /* libgmpxx.a */,
|
||||
64A3530E2A4C84CE007CD71D /* libHSsimplex-chat-5.2.0.0-ESKsZ4YorLH7yFQuFvHeIm-ghc8.10.7.a */,
|
||||
64A3530C2A4C84CE007CD71D /* libHSsimplex-chat-5.2.0.0-ESKsZ4YorLH7yFQuFvHeIm.a */,
|
||||
);
|
||||
path = Libraries;
|
||||
sourceTree = "<group>";
|
||||
@@ -1470,7 +1470,7 @@
|
||||
CLANG_ENABLE_MODULES = YES;
|
||||
CODE_SIGN_ENTITLEMENTS = "SimpleX (iOS).entitlements";
|
||||
CODE_SIGN_STYLE = Automatic;
|
||||
CURRENT_PROJECT_VERSION = 147;
|
||||
CURRENT_PROJECT_VERSION = 151;
|
||||
DEVELOPMENT_TEAM = 5NN7GUYB6T;
|
||||
ENABLE_BITCODE = NO;
|
||||
ENABLE_PREVIEWS = YES;
|
||||
@@ -1491,7 +1491,7 @@
|
||||
"$(inherited)",
|
||||
"@executable_path/Frameworks",
|
||||
);
|
||||
MARKETING_VERSION = 5.1;
|
||||
MARKETING_VERSION = 5.2;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = chat.simplex.app;
|
||||
PRODUCT_NAME = SimpleX;
|
||||
SDKROOT = iphoneos;
|
||||
@@ -1512,7 +1512,7 @@
|
||||
CLANG_ENABLE_MODULES = YES;
|
||||
CODE_SIGN_ENTITLEMENTS = "SimpleX (iOS).entitlements";
|
||||
CODE_SIGN_STYLE = Automatic;
|
||||
CURRENT_PROJECT_VERSION = 147;
|
||||
CURRENT_PROJECT_VERSION = 151;
|
||||
DEVELOPMENT_TEAM = 5NN7GUYB6T;
|
||||
ENABLE_BITCODE = NO;
|
||||
ENABLE_PREVIEWS = YES;
|
||||
@@ -1533,7 +1533,7 @@
|
||||
"$(inherited)",
|
||||
"@executable_path/Frameworks",
|
||||
);
|
||||
MARKETING_VERSION = 5.1;
|
||||
MARKETING_VERSION = 5.2;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = chat.simplex.app;
|
||||
PRODUCT_NAME = SimpleX;
|
||||
SDKROOT = iphoneos;
|
||||
@@ -1550,7 +1550,7 @@
|
||||
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
|
||||
CODE_SIGN_STYLE = Automatic;
|
||||
CURRENT_PROJECT_VERSION = 1;
|
||||
DEVELOPMENT_TEAM = 9767FTRA3G;
|
||||
DEVELOPMENT_TEAM = 5NN7GUYB6T;
|
||||
GENERATE_INFOPLIST_FILE = YES;
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 15.0;
|
||||
MARKETING_VERSION = 1.0;
|
||||
@@ -1570,7 +1570,7 @@
|
||||
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
|
||||
CODE_SIGN_STYLE = Automatic;
|
||||
CURRENT_PROJECT_VERSION = 1;
|
||||
DEVELOPMENT_TEAM = 9767FTRA3G;
|
||||
DEVELOPMENT_TEAM = 5NN7GUYB6T;
|
||||
GENERATE_INFOPLIST_FILE = YES;
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 15.0;
|
||||
MARKETING_VERSION = 1.0;
|
||||
@@ -1592,7 +1592,7 @@
|
||||
CODE_SIGN_ENTITLEMENTS = "SimpleX NSE/SimpleX NSE.entitlements";
|
||||
CODE_SIGN_IDENTITY = "Apple Development";
|
||||
CODE_SIGN_STYLE = Automatic;
|
||||
CURRENT_PROJECT_VERSION = 147;
|
||||
CURRENT_PROJECT_VERSION = 151;
|
||||
DEVELOPMENT_TEAM = 5NN7GUYB6T;
|
||||
ENABLE_BITCODE = NO;
|
||||
GENERATE_INFOPLIST_FILE = YES;
|
||||
@@ -1605,7 +1605,7 @@
|
||||
"@executable_path/Frameworks",
|
||||
"@executable_path/../../Frameworks",
|
||||
);
|
||||
MARKETING_VERSION = 5.1;
|
||||
MARKETING_VERSION = 5.2;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = "chat.simplex.app.SimpleX-NSE";
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
PROVISIONING_PROFILE_SPECIFIER = "";
|
||||
@@ -1624,7 +1624,7 @@
|
||||
CODE_SIGN_ENTITLEMENTS = "SimpleX NSE/SimpleX NSE.entitlements";
|
||||
CODE_SIGN_IDENTITY = "Apple Development";
|
||||
CODE_SIGN_STYLE = Automatic;
|
||||
CURRENT_PROJECT_VERSION = 147;
|
||||
CURRENT_PROJECT_VERSION = 151;
|
||||
DEVELOPMENT_TEAM = 5NN7GUYB6T;
|
||||
ENABLE_BITCODE = NO;
|
||||
GENERATE_INFOPLIST_FILE = YES;
|
||||
@@ -1637,7 +1637,7 @@
|
||||
"@executable_path/Frameworks",
|
||||
"@executable_path/../../Frameworks",
|
||||
);
|
||||
MARKETING_VERSION = 5.1;
|
||||
MARKETING_VERSION = 5.2;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = "chat.simplex.app.SimpleX-NSE";
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
PROVISIONING_PROFILE_SPECIFIER = "";
|
||||
|
||||
@@ -71,6 +71,8 @@ public enum ChatCommand {
|
||||
case apiGroupMemberInfo(groupId: Int64, groupMemberId: Int64)
|
||||
case apiSwitchContact(contactId: Int64)
|
||||
case apiSwitchGroupMember(groupId: Int64, groupMemberId: Int64)
|
||||
case apiAbortSwitchContact(contactId: Int64)
|
||||
case apiAbortSwitchGroupMember(groupId: Int64, groupMemberId: Int64)
|
||||
case apiGetContactCode(contactId: Int64)
|
||||
case apiGetGroupMemberCode(groupId: Int64, groupMemberId: Int64)
|
||||
case apiVerifyContact(contactId: Int64, connectionCode: String?)
|
||||
@@ -179,6 +181,8 @@ public enum ChatCommand {
|
||||
case let .apiGroupMemberInfo(groupId, groupMemberId): return "/_info #\(groupId) \(groupMemberId)"
|
||||
case let .apiSwitchContact(contactId): return "/_switch @\(contactId)"
|
||||
case let .apiSwitchGroupMember(groupId, groupMemberId): return "/_switch #\(groupId) \(groupMemberId)"
|
||||
case let .apiAbortSwitchContact(contactId): return "/_abort switch @\(contactId)"
|
||||
case let .apiAbortSwitchGroupMember(groupId, groupMemberId): return "/_abort switch #\(groupId) \(groupMemberId)"
|
||||
case let .apiGetContactCode(contactId): return "/_get code @\(contactId)"
|
||||
case let .apiGetGroupMemberCode(groupId, groupMemberId): return "/_get code #\(groupId) \(groupMemberId)"
|
||||
case let .apiVerifyContact(contactId, .some(connectionCode)): return "/_verify code @\(contactId) \(connectionCode)"
|
||||
@@ -285,6 +289,8 @@ public enum ChatCommand {
|
||||
case .apiGroupMemberInfo: return "apiGroupMemberInfo"
|
||||
case .apiSwitchContact: return "apiSwitchContact"
|
||||
case .apiSwitchGroupMember: return "apiSwitchGroupMember"
|
||||
case .apiAbortSwitchContact: return "apiAbortSwitchContact"
|
||||
case .apiAbortSwitchGroupMember: return "apiAbortSwitchGroupMember"
|
||||
case .apiGetContactCode: return "apiGetContactCode"
|
||||
case .apiGetGroupMemberCode: return "apiGetGroupMemberCode"
|
||||
case .apiVerifyContact: return "apiVerifyContact"
|
||||
@@ -397,6 +403,10 @@ public enum ChatResponse: Decodable, Error {
|
||||
case networkConfig(networkConfig: NetCfg)
|
||||
case contactInfo(user: User, contact: Contact, connectionStats: ConnectionStats, customUserProfile: Profile?)
|
||||
case groupMemberInfo(user: User, groupInfo: GroupInfo, member: GroupMember, connectionStats_: ConnectionStats?)
|
||||
case contactSwitchStarted(user: User, contact: Contact, connectionStats: ConnectionStats)
|
||||
case groupMemberSwitchStarted(user: User, groupInfo: GroupInfo, member: GroupMember, connectionStats: ConnectionStats)
|
||||
case contactSwitchAborted(user: User, contact: Contact, connectionStats: ConnectionStats)
|
||||
case groupMemberSwitchAborted(user: User, groupInfo: GroupInfo, member: GroupMember, connectionStats: ConnectionStats)
|
||||
case contactCode(user: User, contact: Contact, connectionCode: String)
|
||||
case groupMemberCode(user: User, groupInfo: GroupInfo, member: GroupMember, connectionCode: String)
|
||||
case connectionVerified(user: User, verified: Bool, expectedCode: String)
|
||||
@@ -456,7 +466,7 @@ public enum ChatResponse: Decodable, Error {
|
||||
case groupInvitation(user: User, groupInfo: GroupInfo) // unused
|
||||
case userJoinedGroup(user: User, groupInfo: GroupInfo)
|
||||
case joinedGroupMember(user: User, groupInfo: GroupInfo, member: GroupMember)
|
||||
case connectedToGroupMember(user: User, groupInfo: GroupInfo, member: GroupMember)
|
||||
case connectedToGroupMember(user: User, groupInfo: GroupInfo, member: GroupMember, memberContact: Contact?)
|
||||
case groupRemoved(user: User, groupInfo: GroupInfo) // unused
|
||||
case groupUpdated(user: User, toGroup: GroupInfo)
|
||||
case groupLinkCreated(user: User, groupInfo: GroupInfo, connReqContact: String, memberRole: GroupMemberRole)
|
||||
@@ -495,6 +505,7 @@ public enum ChatResponse: Decodable, Error {
|
||||
case cmdOk(user: User?)
|
||||
case chatCmdError(user_: User?, chatError: ChatError)
|
||||
case chatError(user_: User?, chatError: ChatError)
|
||||
case archiveImported(archiveErrors: [ArchiveError])
|
||||
|
||||
public var responseType: String {
|
||||
get {
|
||||
@@ -515,6 +526,10 @@ public enum ChatResponse: Decodable, Error {
|
||||
case .networkConfig: return "networkConfig"
|
||||
case .contactInfo: return "contactInfo"
|
||||
case .groupMemberInfo: return "groupMemberInfo"
|
||||
case .contactSwitchStarted: return "contactSwitchStarted"
|
||||
case .groupMemberSwitchStarted: return "groupMemberSwitchStarted"
|
||||
case .contactSwitchAborted: return "contactSwitchAborted"
|
||||
case .groupMemberSwitchAborted: return "groupMemberSwitchAborted"
|
||||
case .contactCode: return "contactCode"
|
||||
case .groupMemberCode: return "groupMemberCode"
|
||||
case .connectionVerified: return "connectionVerified"
|
||||
@@ -609,6 +624,7 @@ public enum ChatResponse: Decodable, Error {
|
||||
case .cmdOk: return "cmdOk"
|
||||
case .chatCmdError: return "chatCmdError"
|
||||
case .chatError: return "chatError"
|
||||
case .archiveImported: return "archiveImported"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -631,7 +647,11 @@ public enum ChatResponse: Decodable, Error {
|
||||
case let .chatItemTTL(u, chatItemTTL): return withUser(u, String(describing: chatItemTTL))
|
||||
case let .networkConfig(networkConfig): return String(describing: networkConfig)
|
||||
case let .contactInfo(u, contact, connectionStats, customUserProfile): return withUser(u, "contact: \(String(describing: contact))\nconnectionStats: \(String(describing: connectionStats))\ncustomUserProfile: \(String(describing: customUserProfile))")
|
||||
case let .groupMemberInfo(u, groupInfo, member, connectionStats_): return withUser(u, "groupInfo: \(String(describing: groupInfo))\nmember: \(String(describing: member))\nconnectionStats_: \(String(describing: connectionStats_)))")
|
||||
case let .groupMemberInfo(u, groupInfo, member, connectionStats_): return withUser(u, "groupInfo: \(String(describing: groupInfo))\nmember: \(String(describing: member))\nconnectionStats_: \(String(describing: connectionStats_))")
|
||||
case let .contactSwitchStarted(u, contact, connectionStats): return withUser(u, "contact: \(String(describing: contact))\nconnectionStats: \(String(describing: connectionStats))")
|
||||
case let .groupMemberSwitchStarted(u, groupInfo, member, connectionStats): return withUser(u, "groupInfo: \(String(describing: groupInfo))\nmember: \(String(describing: member))\nconnectionStats: \(String(describing: connectionStats))")
|
||||
case let .contactSwitchAborted(u, contact, connectionStats): return withUser(u, "contact: \(String(describing: contact))\nconnectionStats: \(String(describing: connectionStats))")
|
||||
case let .groupMemberSwitchAborted(u, groupInfo, member, connectionStats): return withUser(u, "groupInfo: \(String(describing: groupInfo))\nmember: \(String(describing: member))\nconnectionStats: \(String(describing: connectionStats))")
|
||||
case let .contactCode(u, contact, connectionCode): return withUser(u, "contact: \(String(describing: contact))\nconnectionCode: \(connectionCode)")
|
||||
case let .groupMemberCode(u, groupInfo, member, connectionCode): return withUser(u, "groupInfo: \(String(describing: groupInfo))\nmember: \(String(describing: member))\nconnectionCode: \(connectionCode)")
|
||||
case let .connectionVerified(u, verified, expectedCode): return withUser(u, "verified: \(verified)\nconnectionCode: \(expectedCode)")
|
||||
@@ -690,7 +710,7 @@ public enum ChatResponse: Decodable, Error {
|
||||
case let .groupInvitation(u, groupInfo): return withUser(u, String(describing: groupInfo))
|
||||
case let .userJoinedGroup(u, groupInfo): return withUser(u, String(describing: groupInfo))
|
||||
case let .joinedGroupMember(u, groupInfo, member): return withUser(u, "groupInfo: \(groupInfo)\nmember: \(member)")
|
||||
case let .connectedToGroupMember(u, groupInfo, member): return withUser(u, "groupInfo: \(groupInfo)\nmember: \(member)")
|
||||
case let .connectedToGroupMember(u, groupInfo, member, memberContact): return withUser(u, "groupInfo: \(groupInfo)\nmember: \(member)\nmemberContact: \(String(describing: memberContact))")
|
||||
case let .groupRemoved(u, groupInfo): return withUser(u, String(describing: groupInfo))
|
||||
case let .groupUpdated(u, toGroup): return withUser(u, String(describing: toGroup))
|
||||
case let .groupLinkCreated(u, groupInfo, connReqContact, memberRole): return withUser(u, "groupInfo: \(groupInfo)\nconnReqContact: \(connReqContact)\nmemberRole: \(memberRole)")
|
||||
@@ -726,6 +746,7 @@ public enum ChatResponse: Decodable, Error {
|
||||
case .cmdOk: return noDetails
|
||||
case let .chatCmdError(u, chatError): return withUser(u, String(describing: chatError))
|
||||
case let .chatError(u, chatError): return withUser(u, String(describing: chatError))
|
||||
case let .archiveImported(archiveErrors): return String(describing: archiveErrors)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1069,17 +1090,42 @@ public struct KeepAliveOpts: Codable, Equatable {
|
||||
|
||||
public struct ChatSettings: Codable {
|
||||
public var enableNtfs: Bool
|
||||
public var favorite: Bool
|
||||
|
||||
public init(enableNtfs: Bool) {
|
||||
public init(enableNtfs: Bool, favorite: Bool) {
|
||||
self.enableNtfs = enableNtfs
|
||||
self.favorite = favorite
|
||||
}
|
||||
|
||||
public static let defaults: ChatSettings = ChatSettings(enableNtfs: true)
|
||||
public static let defaults: ChatSettings = ChatSettings(enableNtfs: true, favorite: false)
|
||||
}
|
||||
|
||||
public struct ConnectionStats: Codable {
|
||||
public var rcvServers: [String]?
|
||||
public var sndServers: [String]?
|
||||
public var rcvQueuesInfo: [RcvQueueInfo]
|
||||
public var sndQueuesInfo: [SndQueueInfo]
|
||||
}
|
||||
|
||||
public struct RcvQueueInfo: Codable {
|
||||
public var rcvServer: String
|
||||
public var rcvSwitchStatus: RcvSwitchStatus?
|
||||
public var canAbortSwitch: Bool
|
||||
}
|
||||
|
||||
public enum RcvSwitchStatus: String, Codable {
|
||||
case switchStarted = "switch_started"
|
||||
case sendingQADD = "sending_qadd"
|
||||
case sendingQUSE = "sending_quse"
|
||||
case receivedMessage = "received_message"
|
||||
}
|
||||
|
||||
public struct SndQueueInfo: Codable {
|
||||
public var sndServer: String
|
||||
public var sndSwitchStatus: SndSwitchStatus?
|
||||
}
|
||||
|
||||
public enum SndSwitchStatus: String, Codable {
|
||||
case sendingQKEY = "sending_qkey"
|
||||
case sendingQTEST = "sending_qtest"
|
||||
}
|
||||
|
||||
public struct UserContactLink: Decodable {
|
||||
@@ -1248,6 +1294,7 @@ public enum ChatErrorType: Decodable {
|
||||
case invalidChatItemDelete
|
||||
case agentVersion
|
||||
case commandError(message: String)
|
||||
case exception(message: String)
|
||||
}
|
||||
|
||||
public enum StoreError: Decodable {
|
||||
@@ -1386,3 +1433,8 @@ public enum SMPAgentError: Decodable {
|
||||
case A_VERSION
|
||||
case A_ENCRYPTION
|
||||
}
|
||||
|
||||
public enum ArchiveError: Decodable {
|
||||
case `import`(chatError: ChatError)
|
||||
case importFile(file: String, chatError: ChatError)
|
||||
}
|
||||
|
||||
@@ -308,7 +308,7 @@ public struct TimedMessagesPreference: Preference {
|
||||
}
|
||||
|
||||
public static var ttlValues: [Int?] {
|
||||
[3600, 8 * 3600, 86400, 7 * 86400, 30 * 86400, nil]
|
||||
[600, 3600, 86400, 7 * 86400, 30 * 86400, 3 * 30 * 86400, nil]
|
||||
}
|
||||
}
|
||||
|
||||
@@ -667,10 +667,11 @@ public enum ChatFeature: String, Decodable, Feature {
|
||||
|
||||
public enum GroupFeature: String, Decodable, Feature {
|
||||
case timedMessages
|
||||
case directMessages
|
||||
case fullDelete
|
||||
case reactions
|
||||
case voice
|
||||
case directMessages
|
||||
case files
|
||||
|
||||
public var id: Self { self }
|
||||
|
||||
@@ -688,6 +689,7 @@ public enum GroupFeature: String, Decodable, Feature {
|
||||
case .fullDelete: return NSLocalizedString("Delete for everyone", comment: "chat feature")
|
||||
case .reactions: return NSLocalizedString("Message reactions", comment: "chat feature")
|
||||
case .voice: return NSLocalizedString("Voice messages", comment: "chat feature")
|
||||
case .files: return NSLocalizedString("Files and media", comment: "chat feature")
|
||||
}
|
||||
}
|
||||
|
||||
@@ -698,6 +700,7 @@ public enum GroupFeature: String, Decodable, Feature {
|
||||
case .fullDelete: return "trash.slash"
|
||||
case .reactions: return "face.smiling"
|
||||
case .voice: return "mic"
|
||||
case .files: return "doc"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -708,6 +711,7 @@ public enum GroupFeature: String, Decodable, Feature {
|
||||
case .fullDelete: return "trash.slash.fill"
|
||||
case .reactions: return "face.smiling.fill"
|
||||
case .voice: return "mic.fill"
|
||||
case .files: return "doc.fill"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -746,6 +750,11 @@ public enum GroupFeature: String, Decodable, Feature {
|
||||
case .on: return "Allow to send voice messages."
|
||||
case .off: return "Prohibit sending voice messages."
|
||||
}
|
||||
case .files:
|
||||
switch enabled {
|
||||
case .on: return "Allow to send files and media."
|
||||
case .off: return "Prohibit sending files and media."
|
||||
}
|
||||
}
|
||||
} else {
|
||||
switch self {
|
||||
@@ -774,6 +783,11 @@ public enum GroupFeature: String, Decodable, Feature {
|
||||
case .on: return "Group members can send voice messages."
|
||||
case .off: return "Voice messages are prohibited in this group."
|
||||
}
|
||||
case .files:
|
||||
switch enabled {
|
||||
case .on: return "Group members can send files and media."
|
||||
case .off: return "Files and media are prohibited in this group."
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -912,19 +926,22 @@ public struct FullGroupPreferences: Decodable, Equatable {
|
||||
public var fullDelete: GroupPreference
|
||||
public var reactions: GroupPreference
|
||||
public var voice: GroupPreference
|
||||
public var files: GroupPreference
|
||||
|
||||
public init(
|
||||
timedMessages: TimedMessagesGroupPreference,
|
||||
directMessages: GroupPreference,
|
||||
fullDelete: GroupPreference,
|
||||
reactions: GroupPreference,
|
||||
voice: GroupPreference
|
||||
voice: GroupPreference,
|
||||
files: GroupPreference
|
||||
) {
|
||||
self.timedMessages = timedMessages
|
||||
self.directMessages = directMessages
|
||||
self.fullDelete = fullDelete
|
||||
self.reactions = reactions
|
||||
self.voice = voice
|
||||
self.files = files
|
||||
}
|
||||
|
||||
public static let sampleData = FullGroupPreferences(
|
||||
@@ -932,7 +949,8 @@ public struct FullGroupPreferences: Decodable, Equatable {
|
||||
directMessages: GroupPreference(enable: .off),
|
||||
fullDelete: GroupPreference(enable: .off),
|
||||
reactions: GroupPreference(enable: .on),
|
||||
voice: GroupPreference(enable: .on)
|
||||
voice: GroupPreference(enable: .on),
|
||||
files: GroupPreference(enable: .on)
|
||||
)
|
||||
}
|
||||
|
||||
@@ -942,19 +960,22 @@ public struct GroupPreferences: Codable {
|
||||
public var fullDelete: GroupPreference?
|
||||
public var reactions: GroupPreference?
|
||||
public var voice: GroupPreference?
|
||||
public var files: GroupPreference?
|
||||
|
||||
public init(
|
||||
timedMessages: TimedMessagesGroupPreference?,
|
||||
directMessages: GroupPreference?,
|
||||
fullDelete: GroupPreference?,
|
||||
reactions: GroupPreference?,
|
||||
voice: GroupPreference?
|
||||
voice: GroupPreference?,
|
||||
files: GroupPreference?
|
||||
) {
|
||||
self.timedMessages = timedMessages
|
||||
self.directMessages = directMessages
|
||||
self.fullDelete = fullDelete
|
||||
self.reactions = reactions
|
||||
self.voice = voice
|
||||
self.files = files
|
||||
}
|
||||
|
||||
public static let sampleData = GroupPreferences(
|
||||
@@ -962,7 +983,8 @@ public struct GroupPreferences: Codable {
|
||||
directMessages: GroupPreference(enable: .off),
|
||||
fullDelete: GroupPreference(enable: .off),
|
||||
reactions: GroupPreference(enable: .on),
|
||||
voice: GroupPreference(enable: .on)
|
||||
voice: GroupPreference(enable: .on),
|
||||
files: GroupPreference(enable: .on)
|
||||
)
|
||||
}
|
||||
|
||||
@@ -972,7 +994,8 @@ public func toGroupPreferences(_ fullPreferences: FullGroupPreferences) -> Group
|
||||
directMessages: fullPreferences.directMessages,
|
||||
fullDelete: fullPreferences.fullDelete,
|
||||
reactions: fullPreferences.reactions,
|
||||
voice: fullPreferences.voice
|
||||
voice: fullPreferences.voice,
|
||||
files: fullPreferences.files
|
||||
)
|
||||
}
|
||||
|
||||
@@ -1240,10 +1263,14 @@ public enum ChatInfo: Identifiable, Decodable, NamedChat {
|
||||
}
|
||||
|
||||
public var ntfsEnabled: Bool {
|
||||
self.chatSettings?.enableNtfs ?? false
|
||||
}
|
||||
|
||||
public var chatSettings: ChatSettings? {
|
||||
switch self {
|
||||
case let .direct(contact): return contact.chatSettings.enableNtfs
|
||||
case let .group(groupInfo): return groupInfo.chatSettings.enableNtfs
|
||||
default: return false
|
||||
case let .direct(contact): return contact.chatSettings
|
||||
case let .group(groupInfo): return groupInfo.chatSettings
|
||||
default: return nil
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2283,10 +2310,22 @@ let msgTimeFormat = Date.FormatStyle.dateTime.hour().minute()
|
||||
let msgDateFormat = Date.FormatStyle.dateTime.day(.twoDigits).month(.twoDigits)
|
||||
|
||||
public func formatTimestampText(_ date: Date) -> Text {
|
||||
let now = Calendar.current.dateComponents([.day, .hour], from: .now)
|
||||
let dc = Calendar.current.dateComponents([.day, .hour], from: date)
|
||||
let recent = now.day == dc.day || ((now.day ?? 0) - (dc.day ?? 0) == 1 && (dc.hour ?? 0) >= 18 && (now.hour ?? 0) < 12)
|
||||
return Text(date, format: recent ? msgTimeFormat : msgDateFormat)
|
||||
return Text(date, format: recent(date) ? msgTimeFormat : msgDateFormat)
|
||||
}
|
||||
|
||||
private func recent(_ date: Date) -> Bool {
|
||||
let now = Date()
|
||||
let calendar = Calendar.current
|
||||
|
||||
guard let previousDay = calendar.date(byAdding: DateComponents(day: -1), to: now),
|
||||
let previousDay18 = calendar.date(bySettingHour: 18, minute: 0, second: 0, of: previousDay),
|
||||
let currentDay00 = calendar.date(bySettingHour: 0, minute: 0, second: 0, of: now),
|
||||
let currentDay12 = calendar.date(bySettingHour: 12, minute: 0, second: 0, of: now) else {
|
||||
return false
|
||||
}
|
||||
|
||||
let isSameDay = calendar.isDate(date, inSameDayAs: now)
|
||||
return isSameDay || (now < currentDay12 && date >= previousDay18 && date < currentDay00)
|
||||
}
|
||||
|
||||
public enum CIStatus: Decodable {
|
||||
@@ -3051,6 +3090,7 @@ public enum SndConnEvent: Decodable {
|
||||
public enum SwitchPhase: String, Decodable {
|
||||
case started
|
||||
case confirmed
|
||||
case secured
|
||||
case completed
|
||||
}
|
||||
|
||||
|
||||
@@ -1995,6 +1995,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"No received or sent files" = "Žádné přijaté ani odeslané soubory";
|
||||
|
||||
/* copied message info in history */
|
||||
"no text" = "žádný text";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Notifications" = "Oznámení";
|
||||
|
||||
@@ -2695,6 +2698,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"SMP servers" = "SMP servery";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Some non-fatal errors occurred during import - you may see Chat console for more details." = "Během importu došlo k nezávažným chybám - podrobnosti naleznete v chat konzoli.";
|
||||
|
||||
/* notification title */
|
||||
"Somebody" = "Někdo";
|
||||
|
||||
@@ -2878,9 +2884,6 @@
|
||||
/* No comment provided by engineer. */
|
||||
"This error is permanent for this connection, please re-connect." = "Tato chyba je pro toto připojení trvalá, připojte se znovu.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"This feature is experimental! It will only work if the other client has version 4.2 installed. You should see the message in the conversation once the address change is completed – please check that you can still receive messages from this contact (or group member)." = "Tato funkce je experimentální! Bude fungovat pouze v případě, že druhý klient má nainstalovanou verzi 4.2. Po dokončení změny adresy by se měla v konverzaci zobrazit zpráva - zkontrolujte, zda můžete od tohoto kontaktu (nebo člena skupiny) stále přijímat zprávy.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"This group no longer exists." = "Tato skupina již neexistuje.";
|
||||
|
||||
@@ -3200,7 +3203,7 @@
|
||||
"You can create it later" = "Můžete vytvořit později";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"You can hide or mute a user profile - swipe it to the right.\nSimpleX Lock must be enabled." = "Profil uživatele můžete skrýt nebo ztlumit - přejeďte prstem doprava.\nSimpleX zámek musí být povolen.";
|
||||
"You can hide or mute a user profile - swipe it to the right." = "Profil uživatele můžete skrýt nebo ztlumit - přejeďte prstem doprava.";
|
||||
|
||||
/* notification body */
|
||||
"You can now send messages to %@" = "Nyní můžete posílat zprávy %@";
|
||||
@@ -3340,9 +3343,6 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Your chat profiles" = "Vaše chat profily";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Your chats" = "Vaše konverzace";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Your contact needs to be online for the connection to complete.\nYou can cancel this connection and remove the contact (and try later with a new link)." = "K dokončení připojení, musí být váš kontakt online.\nToto připojení můžete zrušit a kontakt odebrat (a zkusit to později s novým odkazem).";
|
||||
|
||||
|
||||
@@ -20,7 +20,7 @@
|
||||
"_italic_" = "\\_kursiv_";
|
||||
|
||||
/* 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- Zeit für verschwindende Nachrichten anpassen\n- Vergangenheit 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-Historie bearbeiten.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
", " = ", ";
|
||||
@@ -312,13 +312,13 @@
|
||||
"Advanced network settings" = "Erweiterte Netzwerkeinstellungen";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"All app data is deleted." = "App-Daten werden komplett gelöscht.";
|
||||
"All app data is deleted." = "Werden die App-Daten komplett gelöscht.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"All chats and messages will be deleted - this cannot be undone!" = "Alle Chats und Nachrichten werden gelöscht! Dies kann nicht rückgängig gemacht werden!";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"All data is erased when it is entered." = "Sobald es eingegeben wird, werden alle Daten gelöscht.";
|
||||
"All data is erased when it is entered." = "Alle Daten werden gelöscht, sobald diese eingegeben wird.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"All group members will remain connected." = "Alle Gruppenmitglieder bleiben verbunden.";
|
||||
@@ -405,10 +405,10 @@
|
||||
"App icon" = "App Icon";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"App passcode" = "App Passwort";
|
||||
"App passcode" = "App-Zugangscode";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"App passcode is replaced with self-destruct passcode." = "Das App Passwort wurde durch das Selbstzerstörungspasswort ersetzt.";
|
||||
"App passcode is replaced with self-destruct passcode." = "App-Zugangscode wurde durch den Selbstzerstörungs-Zugangscode ersetzt.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"App version" = "App Version";
|
||||
@@ -417,7 +417,7 @@
|
||||
"App version: v%@" = "App Version: v%@";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Appearance" = "Design";
|
||||
"Appearance" = "Erscheinungsbild";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Attach" = "Anhängen";
|
||||
@@ -546,7 +546,7 @@
|
||||
"Change member role?" = "Die Mitgliederrolle ändern?";
|
||||
|
||||
/* authentication reason */
|
||||
"Change passcode" = "Passwort ändern";
|
||||
"Change passcode" = "Zugangscode ändern";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Change receiving address" = "Wechseln der Empfängeradresse";
|
||||
@@ -562,7 +562,7 @@
|
||||
|
||||
/* authentication reason
|
||||
set passcode view */
|
||||
"Change self-destruct passcode" = "Selbstzerstörungspasswort ändern";
|
||||
"Change self-destruct passcode" = "Selbstzerstörungs-Zugangscode ändern";
|
||||
|
||||
/* chat item text */
|
||||
"changed address for you" = "wechselte die Adresse für Sie";
|
||||
@@ -583,7 +583,7 @@
|
||||
"Chat archive" = "Datenbank Archiv";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Chat console" = "Chat Konsole";
|
||||
"Chat console" = "Chat-Konsole";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Chat database" = "Chat-Datenbank";
|
||||
@@ -658,7 +658,7 @@
|
||||
"Confirm new passphrase…" = "Neues Passwort bestätigen…";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Confirm Passcode" = "Passwort bestätigen";
|
||||
"Confirm Passcode" = "Zugangscode bestätigen";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Confirm password" = "Passwort bestätigen";
|
||||
@@ -817,7 +817,7 @@
|
||||
"creator" = "Ersteller";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Current Passcode" = "Aktuelles Passwort";
|
||||
"Current Passcode" = "Aktueller Zugangscode";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Current passphrase…" = "Aktuelles Passwort…";
|
||||
@@ -1141,7 +1141,7 @@
|
||||
"Enable self-destruct" = "Selbstzerstörung aktivieren";
|
||||
|
||||
/* set passcode view */
|
||||
"Enable self-destruct passcode" = "Selbstzerstörungspasswort aktivieren";
|
||||
"Enable self-destruct passcode" = "Selbstzerstörungs-Zugangscode aktivieren";
|
||||
|
||||
/* authentication reason */
|
||||
"Enable SimpleX Lock" = "SimpleX Sperre aktivieren";
|
||||
@@ -1195,7 +1195,7 @@
|
||||
"Enter correct passphrase." = "Geben Sie das korrekte Passwort ein.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Enter Passcode" = "Passwort eingeben";
|
||||
"Enter Passcode" = "Zugangscode eingeben";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Enter passphrase…" = "Passwort eingeben…";
|
||||
@@ -1306,7 +1306,7 @@
|
||||
"Error saving ICE servers" = "Fehler beim Speichern der ICE-Server";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Error saving passcode" = "Fehler beim Speichern des Passworts";
|
||||
"Error saving passcode" = "Fehler beim Speichern des Zugangscodes";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Error saving passphrase to keychain" = "Fehler beim Speichern des Passworts in den Schlüsselbund";
|
||||
@@ -1543,10 +1543,10 @@
|
||||
"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 dieses Passwort während des Öffnens der App eingeben, werden alle App-Daten unwiederbringlich gelöscht!";
|
||||
"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!";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"If you enter your self-destruct passcode while opening the app:" = "Wenn Sie Ihr Selbstzerstörungspasswort während des Öffnens der App eingeben:";
|
||||
"If you enter your self-destruct passcode while opening the app:" = "Wenn Sie Ihren Selbstzerstörungs-Zugangscode während des Öffnens der App eingeben:";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"If you need to use the chat now tap **Do it later** below (you will be offered to migrate the database when you restart the app)." = "Tippen Sie unten auf **Später wiederholen**, wenn Sie den Chat jetzt benötigen (es wird Ihnen angeboten, die Datenbank bei einem Neustart der App zu migrieren).";
|
||||
@@ -1615,7 +1615,7 @@
|
||||
"Incompatible database version" = "Inkompatible Datenbank-Version";
|
||||
|
||||
/* PIN entry */
|
||||
"Incorrect passcode" = "Passwort falsch";
|
||||
"Incorrect passcode" = "Zugangscode ist falsch";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Incorrect security code!" = "Falscher Sicherheitscode!";
|
||||
@@ -1960,7 +1960,7 @@
|
||||
"New message" = "Neue Nachricht";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"New Passcode" = "Neues Passwort";
|
||||
"New Passcode" = "Neuer Zugangscode";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"New passphrase…" = "Neues Passwort…";
|
||||
@@ -1995,6 +1995,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"No received or sent files" = "Keine empfangenen oder gesendeten Dateien";
|
||||
|
||||
/* copied message info in history */
|
||||
"no text" = "Kein Text";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Notifications" = "Benachrichtigungen";
|
||||
|
||||
@@ -2114,19 +2117,19 @@
|
||||
"owner" = "Eigentümer";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Passcode" = "Passwort";
|
||||
"Passcode" = "Zugangscode";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Passcode changed!" = "Passwort geändert!";
|
||||
"Passcode changed!" = "Zugangscode wurde geändert!";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Passcode entry" = "Passworteingabe";
|
||||
"Passcode entry" = "Eingabe des Zugangscodes";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Passcode not changed!" = "Passwort wurde nicht geändert!";
|
||||
"Passcode not changed!" = "Der Zugangscode wurde nicht geändert!";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Passcode set!" = "Passwort wurde geändert!";
|
||||
"Passcode set!" = "Zugangscode eingestellt!";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Password to show" = "Passwort anzeigen";
|
||||
@@ -2183,7 +2186,7 @@
|
||||
"Please enter the previous password after restoring database backup. This action can not be undone." = "Bitte geben Sie das vorherige Passwort ein, nachdem Sie die Datenbanksicherung wiederhergestellt haben. Diese Aktion kann nicht rückgängig gemacht werden.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Please remember or store it securely - there is no way to recover a lost passcode!" = "Es gibt keine Möglichkeit ein vergessenes Passwort wiederherzustellen - bitte erinnern Sie sich gut daran oder speichern Sie es sicher ab!";
|
||||
"Please remember or store it securely - there is no way to recover a lost passcode!" = "Es gibt keine Möglichkeit einen vergessenen Zugangscode wiederherzustellen - bitte erinnern Sie sich gut daran oder speichern Sie ihn sicher ab!";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Please report it to the developers." = "Bitte melden Sie es den Entwicklern.";
|
||||
@@ -2513,13 +2516,13 @@
|
||||
"Self-destruct" = "Selbstzerstörung";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Self-destruct passcode" = "Selbstzerstörungspasswort";
|
||||
"Self-destruct passcode" = "Selbstzerstörungs-Zugangscode";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Self-destruct passcode changed!" = "Das Selbstzerstörungspasswort wurde geändert!";
|
||||
"Self-destruct passcode changed!" = "Der Selbstzerstörungs-Zugangscode wurde geändert!";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Self-destruct passcode enabled!" = "Das Selbstzerstörungspasswort wurde aktiviert!";
|
||||
"Self-destruct passcode enabled!" = "Der Selbstzerstörungs-Zugangscode wurde aktiviert!";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Send" = "Senden";
|
||||
@@ -2603,7 +2606,7 @@
|
||||
"Set it instead of system authentication." = "Anstelle der System-Authentifizierung festlegen.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Set passcode" = "Passwort eingeben";
|
||||
"Set passcode" = "Zugangscode einstellen";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Set passphrase to export" = "Passwort für den Export festlegen";
|
||||
@@ -2695,6 +2698,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"SMP servers" = "SMP-Server";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Some non-fatal errors occurred during import - you may see Chat console for more details." = "Während des Imports sind einige nicht schwerwiegende Fehler aufgetreten - in der Chat-Konsole finden Sie weitere Einzelheiten.";
|
||||
|
||||
/* notification title */
|
||||
"Somebody" = "Jemand";
|
||||
|
||||
@@ -2744,7 +2750,7 @@
|
||||
"strike" = "durchstreichen";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Submit" = "Übermitteln";
|
||||
"Submit" = "Bestätigen";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Support SimpleX Chat" = "Unterstützung von SimpleX Chat";
|
||||
@@ -2878,9 +2884,6 @@
|
||||
/* No comment provided by engineer. */
|
||||
"This error is permanent for this connection, please re-connect." = "Es handelt sich um einen permanenten Fehler für diese Verbindung - bitte verbinden Sie sich neu.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"This feature is experimental! It will only work if the other client has version 4.2 installed. You should see the message in the conversation once the address change is completed – please check that you can still receive messages from this contact (or group member)." = "Diese Funktion ist experimentell! Sie wird nur funktionieren, wenn der Kontakt ebenfalls eine SimpleX-Version ab v4.2 installiert hat. Sobald der Adress-Wechsel abgeschlossen ist, sollten Sie die Nachricht im Chat-Verlauf sehen. Bitte prüfen Sie, ob Sie weiterhin Nachrichten von diesem Kontakt (oder Gruppenmitglied) empfangen können.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"This group no longer exists." = "Diese Gruppe existiert nicht mehr.";
|
||||
|
||||
@@ -3182,7 +3185,7 @@
|
||||
"You are connected to the server used to receive messages from this contact." = "Sie sind mit dem Server verbunden, der für den Empfang von Nachrichten mit diesem Kontakt genutzt wird.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"you are invited to group" = "Sie sind zur Gruppe eingeladen";
|
||||
"you are invited to group" = "Sie sind zu der Gruppe eingeladen";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"You are invited to group" = "Sie sind zu der Gruppe eingeladen";
|
||||
@@ -3200,7 +3203,7 @@
|
||||
"You can create it later" = "Sie können dies später erstellen";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"You can hide or mute a user profile - swipe it to the right.\nSimpleX Lock must be enabled." = "Sie können ein Benutzerprofil verbergen oder stummschalten - wischen Sie es nach rechts.\nDafür muss die SimpleX Sperre aktiviert sein.";
|
||||
"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.";
|
||||
|
||||
/* notification body */
|
||||
"You can now send messages to %@" = "Sie können nun Nachrichten an %@ versenden";
|
||||
@@ -3340,9 +3343,6 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Your chat profiles" = "Meine Chat-Profile";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Your chats" = "Meine Chats";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Your contact needs to be online for the connection to complete.\nYou can cancel this connection and remove the contact (and try later with a new link)." = "Damit die Verbindung hergestellt werden kann, muss Ihr Kontakt online sein.\nSie können diese Verbindung abbrechen und den Kontakt entfernen (und es später nochmals mit einem neuen Link versuchen).";
|
||||
|
||||
|
||||
@@ -257,7 +257,7 @@
|
||||
"About SimpleX Chat" = "Sobre SimpleX Chat";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"above, then choose:" = "arriba y luego elige:";
|
||||
"above, then choose:" = "y después elige:";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Accent color" = "Color";
|
||||
@@ -315,16 +315,16 @@
|
||||
"All app data is deleted." = "Todos los datos de la aplicación se eliminarán.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"All chats and messages will be deleted - this cannot be undone!" = "Se eliminarán todos los chats y mensajes. ¡No se puede deshacer!";
|
||||
"All chats and messages will be deleted - this cannot be undone!" = "Se eliminarán todos los chats y mensajes. ¡No podrá deshacerse!";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"All data is erased when it is entered." = "Al introducirlo todos los datos son borrados.";
|
||||
"All data is erased when it is entered." = "Al introducirlo todos los datos son eliminados.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"All group members will remain connected." = "Todos los miembros del grupo permanecerán conectados.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"All messages will be deleted - this cannot be undone! The messages will be deleted ONLY for you." = "Se eliminarán todos los mensajes SOLO para tí. ¡No se puede deshacer!";
|
||||
"All messages will be deleted - this cannot be undone! The messages will be deleted ONLY for you." = "Se eliminarán todos los mensajes SOLO para tí. ¡No podrá deshacerse!";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"All your contacts will remain connected." = "Todos tus contactos permanecerán conectados.";
|
||||
@@ -679,7 +679,7 @@
|
||||
"Connect via link" = "Conectar mediante enlace";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Connect via link / QR code" = "Conectar mediante enlace / Código QR";
|
||||
"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 uso?";
|
||||
@@ -745,7 +745,7 @@
|
||||
"Contact already exists" = "El contácto ya existe";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Contact and all messages will be deleted - this cannot be undone!" = "El contacto y todos los mensajes serán eliminados. ¡No se puede deshacer!";
|
||||
"Contact and all messages will be deleted - this cannot be undone!" = "El contacto y todos los mensajes serán eliminados. ¡No podrá deshacerse!";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"contact has e2e encryption" = "el contacto dispone de cifrado de extremo a extremo";
|
||||
@@ -763,7 +763,7 @@
|
||||
"Contact is not connected yet!" = "¡El contacto aun no se ha conectado!";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Contact name" = "Nombre del contacto";
|
||||
"Contact name" = "Contacto";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Contact preferences" = "Preferencias de contacto";
|
||||
@@ -784,7 +784,7 @@
|
||||
"Create" = "Crear";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Create an address to let people connect with you." = "Crear una dirección para que la gente se pueda conectar contigo.";
|
||||
"Create an address to let people connect with you." = "Crear una dirección para que otras personas se puedan conectar contigo.";
|
||||
|
||||
/* server test step */
|
||||
"Create file" = "Crear archivo";
|
||||
@@ -796,13 +796,13 @@
|
||||
"Create link" = "Crear enlace";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Create one-time invitation link" = "Crear enlace de invitación de un solo uso";
|
||||
"Create one-time invitation link" = "Crea enlace de invitación de un uso";
|
||||
|
||||
/* server test step */
|
||||
"Create queue" = "Crear cola";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Create secret group" = "Crear grupo secreto";
|
||||
"Create secret group" = "Crea grupo secreto";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Create SimpleX address" = "Crear dirección SimpleX";
|
||||
@@ -850,10 +850,10 @@
|
||||
"Database error" = "Error de la base de datos";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Database ID" = "ID de base de datos";
|
||||
"Database ID" = "ID base de datos";
|
||||
|
||||
/* copied message info */
|
||||
"Database ID: %d" = "ID de base de datos: %d";
|
||||
"Database ID: %d" = "ID base de datos: %d";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Database IDs and Transport isolation option." = "IDs de la base de datos y opciónes de aislamiento de transporte.";
|
||||
@@ -913,7 +913,7 @@
|
||||
"Delete address?" = "¿Eliminar la dirección?";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Delete after" = "Eliminar después de";
|
||||
"Delete after" = "Eliminar en";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Delete all files" = "Eliminar todos los archivos";
|
||||
@@ -985,7 +985,7 @@
|
||||
"Delete messages" = "Eliminar mensaje";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Delete messages after" = "Eliminar después de";
|
||||
"Delete messages after" = "Eliminar en";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Delete old database" = "Eliminar base de datos antigua";
|
||||
@@ -997,7 +997,7 @@
|
||||
"Delete pending connection" = "Eliminar conexión pendiente";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Delete pending connection?" = "¿Eliminar conexion pendiente?";
|
||||
"Delete pending connection?" = "¿Eliminar la conexion pendiente?";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Delete profile" = "Eliminar perfil";
|
||||
@@ -1012,10 +1012,10 @@
|
||||
"deleted" = "eliminado";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Deleted at" = "Eliminado el";
|
||||
"Deleted at" = "Eliminado";
|
||||
|
||||
/* copied message info */
|
||||
"Deleted at: %@" = "Eliminado el: %@";
|
||||
"Deleted at: %@" = "Eliminado: %@";
|
||||
|
||||
/* rcv group event chat item */
|
||||
"deleted group" = "grupo eliminado";
|
||||
@@ -1069,10 +1069,10 @@
|
||||
"Disappearing messages are prohibited in this group." = "Los mensajes temporales no están permitidos en este grupo.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Disappears at" = "Desaparecerá el";
|
||||
"Disappears at" = "Desaparecerá";
|
||||
|
||||
/* copied message info */
|
||||
"Disappears at: %@" = "Desaparecerá el: %@";
|
||||
"Disappears at: %@" = "Desaparecerá: %@";
|
||||
|
||||
/* server test step */
|
||||
"Disconnect" = "Desconectar";
|
||||
@@ -1483,10 +1483,10 @@
|
||||
"Group welcome message" = "Mensaje de bienvenida en grupos";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Group will be deleted for all members - this cannot be undone!" = "El grupo se eliminará para todos los miembros. ¡No se puede deshacer!";
|
||||
"Group will be deleted for all members - this cannot be undone!" = "El grupo se eliminará para todos los miembros. ¡No podrá deshacerse!";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Group will be deleted for you - this cannot be undone!" = "El grupo se eliminará para tí. ¡No se puede deshacer!";
|
||||
"Group will be deleted for you - this cannot be undone!" = "El grupo se eliminará para tí. ¡No podrá deshacerse!";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Help" = "Ayuda";
|
||||
@@ -1498,10 +1498,10 @@
|
||||
"Hidden chat profiles" = "Perfiles Chat ocultos";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Hidden profile password" = "Contraseña de perfil oculto";
|
||||
"Hidden profile password" = "Contraseña del perfil oculto";
|
||||
|
||||
/* chat item action */
|
||||
"Hide" = "Ocultar";
|
||||
"Hide" = "Sin vista previa";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Hide app screen in the recent apps." = "Ocultar pantalla de aplicaciones en aplicaciones recientes.";
|
||||
@@ -1732,7 +1732,7 @@
|
||||
"Join incognito" = "Únete en modo incógnito";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Joining group" = "Únete al grupo";
|
||||
"Joining group" = "Entrando al grupo";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Keychain error" = "Error en Keychain";
|
||||
@@ -1783,10 +1783,10 @@
|
||||
"Local profile data only" = "Sólo datos del perfil local";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Lock after" = "Bloquear después de";
|
||||
"Lock after" = "Bloquear en";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Lock mode" = "Modo de bloqueo";
|
||||
"Lock mode" = "Modo bloqueo";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Make a private connection" = "Establecer una conexión privada";
|
||||
@@ -1837,7 +1837,7 @@
|
||||
"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.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Member will be removed from group - this cannot be undone!" = "El miembro será expulsado del grupo. ¡No se puede deshacer!";
|
||||
"Member will be removed from group - this cannot be undone!" = "El miembro será expulsado del grupo. ¡No podrá deshacerse!";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Message delivery error" = "Error en la entrega del mensaje";
|
||||
@@ -1858,7 +1858,7 @@
|
||||
"message received" = "mensaje recibido";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Message text" = "Texto del mensaje";
|
||||
"Message text" = "Contacto y texto";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Messages" = "Mensajes";
|
||||
@@ -1894,10 +1894,10 @@
|
||||
"moderated" = "moderado";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Moderated at" = "Moderado el";
|
||||
"Moderated at" = "Moderado";
|
||||
|
||||
/* copied message info */
|
||||
"Moderated at: %@" = "Moderado el: %@";
|
||||
"Moderated at: %@" = "Moderado: %@";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"moderated by %@" = "moderado por %@";
|
||||
@@ -1957,7 +1957,7 @@
|
||||
"new message" = "mensaje nuevo";
|
||||
|
||||
/* notification */
|
||||
"New message" = "mensaje nuevo";
|
||||
"New message" = "Mensaje nuevo";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"New Passcode" = "Código Nuevo";
|
||||
@@ -1995,6 +1995,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"No received or sent files" = "Sin archivos recibidos o enviados";
|
||||
|
||||
/* copied message info in history */
|
||||
"no text" = "sin texto";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Notifications" = "Notificaciones";
|
||||
|
||||
@@ -2002,7 +2005,7 @@
|
||||
"Notifications are disabled!" = "¡Las notificaciones están desactivadas!";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Now admins can:\n- delete members' messages.\n- disable members (\"observer\" role)" = "Ahora los administradores pueden:\n- borrar mensajes de los miembros.\n- desactivar el rol a miembros (pasando a rol \"observador\")";
|
||||
"Now admins can:\n- delete members' messages.\n- disable members (\"observer\" role)" = "Ahora los administradores pueden:\n- eliminar mensajes de los miembros.\n- desactivar el rol miembro (a rol \"observador\")";
|
||||
|
||||
/* member role */
|
||||
"observer" = "observador";
|
||||
@@ -2153,7 +2156,7 @@
|
||||
"Periodically" = "Periódico";
|
||||
|
||||
/* message decrypt error item */
|
||||
"Permanent decryption error" = "Error de descifrado";
|
||||
"Permanent decryption error" = "Error de descifrado permanente";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"PING count" = "Contador PING";
|
||||
@@ -2183,7 +2186,7 @@
|
||||
"Please enter the previous password after restoring database backup. This action can not be undone." = "Introduce la contraseña anterior después de restaurar la copia de seguridad de la base de datos. Esta acción no se puede deshacer.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Please remember or store it securely - there is no way to recover a lost passcode!" = "Por favor, recuerda y guarda el código de acceso en un lugar seguro. ¡No hay ninguna manera de recuperar un código perdido!";
|
||||
"Please remember or store it securely - there is no way to recover a lost passcode!" = "Por favor, recuerda y guarda el código de acceso en un lugar seguro. ¡No hay forma de recuperar un código perdido!";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Please report it to the developers." = "Por favor, informa a los desarrolladores.";
|
||||
@@ -2297,10 +2300,10 @@
|
||||
"received answer…" = "respuesta recibida…";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Received at" = "Recibido el";
|
||||
"Received at" = "Recibido";
|
||||
|
||||
/* copied message info */
|
||||
"Received at: %@" = "Recibido el: %@";
|
||||
"Received at: %@" = "Recibido: %@";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"received confirmation…" = "confirmación recibida…";
|
||||
@@ -2321,10 +2324,10 @@
|
||||
"Recipients see updates as you type them." = "Los destinatarios ven la actualizacion mientras escribes.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Record updated at" = "Registro actualizado";
|
||||
"Record updated at" = "Registro actualiz.";
|
||||
|
||||
/* copied message info */
|
||||
"Record updated at: %@" = "Registro actualizado: %@";
|
||||
"Record updated at: %@" = "Registro actualiz: %@";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Reduced battery usage" = "Reducción del uso de la batería";
|
||||
@@ -2564,10 +2567,10 @@
|
||||
"Sending via" = "Enviando vía";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Sent at" = "Enviado el";
|
||||
"Sent at" = "Enviado";
|
||||
|
||||
/* copied message info */
|
||||
"Sent at: %@" = "Enviado el: %@";
|
||||
"Sent at: %@" = "Enviado: %@";
|
||||
|
||||
/* notification */
|
||||
"Sent file event" = "Evento de archivo enviado";
|
||||
@@ -2695,6 +2698,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"SMP servers" = "Servidores SMP";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Some non-fatal errors occurred during import - you may see Chat console for more details." = "Algunos errores no críticos ocurrieron durante la importación - para más detalles puedes ver la consola de Chat.";
|
||||
|
||||
/* notification title */
|
||||
"Somebody" = "Alguien";
|
||||
|
||||
@@ -2878,9 +2884,6 @@
|
||||
/* No comment provided by engineer. */
|
||||
"This error is permanent for this connection, please re-connect." = "El error es permanente para esta conexión, por favor vuelve a conectarte.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"This feature is experimental! It will only work if the other client has version 4.2 installed. You should see the message in the conversation once the address change is completed – please check that you can still receive messages from this contact (or group member)." = "¡Experimental! Sólo funcionará si el otro cliente tiene instalada la versión 4.2. Deberías ver el mensaje en la conversación una vez completado el cambio de dirección. Comprueba que puedes seguir recibiendo mensajes de este contacto (o miembro del grupo).";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"This group no longer exists." = "Este grupo ya no existe.";
|
||||
|
||||
@@ -2912,7 +2915,7 @@
|
||||
"To record voice message please grant permission to use Microphone." = "Para grabar el mensaje de voz concede permiso para usar el micrófono.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"To reveal your hidden profile, enter a full password into a search field in **Your chat profiles** page." = "Para hacer visible tu perfil oculto, introduce la contraseña completa en el campo de búsqueda de la página **Tus perfiles Chat**.";
|
||||
"To reveal your hidden profile, enter a full password into a search field in **Your chat profiles** page." = "Para hacer visible tu perfil oculto, introduce la contraseña completa en el campo de búsqueda de la página **Mis perfiles**.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"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.";
|
||||
@@ -3140,7 +3143,7 @@
|
||||
"What's new" = "Novedades";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"When available" = "Si disponible";
|
||||
"When available" = "Si disponibles";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"When people request to connect, you can accept or reject it." = "Cuando alguien solicite conectarse podrás aceptar o rechazar la solicitud.";
|
||||
@@ -3200,7 +3203,7 @@
|
||||
"You can create it later" = "Puedes crearlo más tarde";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"You can hide or mute a user profile - swipe it to the right.\nSimpleX Lock must be enabled." = "Puedes ocultar o silenciar un perfil de usuario: deslízalo hacia la derecha.\nBloqueo SimpleX debe estar activado.";
|
||||
"You can hide or mute a user profile - swipe it to the right." = "Puedes ocultar o silenciar un perfil de usuario: deslízalo hacia la derecha.";
|
||||
|
||||
/* notification body */
|
||||
"You can now send messages to %@" = "Ya puedes enviar mensajes a %@";
|
||||
@@ -3224,7 +3227,7 @@
|
||||
"You can turn on SimpleX Lock via Settings." = "Puedes activar el Bloqueo SimpleX a través de Configuración.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"You can use markdown to format messages:" = "Puedes usar la sintaxis markdown para dar formato a los mensajes:";
|
||||
"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't send messages!" = "¡No puedes enviar mensajes!";
|
||||
@@ -3260,7 +3263,7 @@
|
||||
"You joined this group" = "Te has unido a este grupo";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"You joined this group. Connecting to inviting group member." = "Te has unido a este grupo. Conectando con el miembro que emite la invitacíon.";
|
||||
"You joined this group. Connecting to inviting group member." = "Te has unido a este grupo. Conectando con el emisor de la invitacíon.";
|
||||
|
||||
/* snd group event chat item */
|
||||
"you left" = "has salido";
|
||||
@@ -3323,7 +3326,7 @@
|
||||
"Your %@ servers" = "Mis servidores %@";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Your calls" = "Mis llamadas";
|
||||
"Your calls" = "Llamadas";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Your chat database" = "Base de datos Chat";
|
||||
@@ -3340,9 +3343,6 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Your chat profiles" = "Mis perfiles";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Your chats" = "Mis chats";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Your contact needs to be online for the connection to complete.\nYou can cancel this connection and remove the contact (and try later with a new link)." = "Tu contacto debe estar en línea para que se complete la conexión.\nPuedes cancelar esta conexión y eliminar el contacto (e intentarlo más tarde con un enlace nuevo).";
|
||||
|
||||
@@ -3365,7 +3365,7 @@
|
||||
"Your current profile" = "Tu perfil actual";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Your ICE servers" = "Mis servidores ICE";
|
||||
"Your ICE servers" = "Servidores ICE";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Your preferences" = "Mis preferencias";
|
||||
@@ -3398,8 +3398,8 @@
|
||||
"Your SimpleX address" = "Mi dirección SimpleX";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Your SMP servers" = "Mis servidores SMP";
|
||||
"Your SMP servers" = "Servidores SMP";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Your XFTP servers" = "Mis servidores XFTP";
|
||||
"Your XFTP servers" = "Servidores XFTP";
|
||||
|
||||
|
||||
@@ -1069,10 +1069,10 @@
|
||||
"Disappearing messages are prohibited in this group." = "Les messages éphémères sont interdits dans ce groupe.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Disappears at" = "Disparaît à";
|
||||
"Disappears at" = "Disparaîtra le";
|
||||
|
||||
/* copied message info */
|
||||
"Disappears at: %@" = "Disparaît à : %@";
|
||||
"Disappears at: %@" = "Disparaîtra le : %@";
|
||||
|
||||
/* server test step */
|
||||
"Disconnect" = "Se déconnecter";
|
||||
@@ -1995,6 +1995,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"No received or sent files" = "Aucun fichier reçu ou envoyé";
|
||||
|
||||
/* copied message info in history */
|
||||
"no text" = "aucun texte";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Notifications" = "Notifications";
|
||||
|
||||
@@ -2695,6 +2698,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"SMP servers" = "Serveurs SMP";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Some non-fatal errors occurred during import - you may see Chat console for more details." = "Des erreurs non fatales se sont produites lors de l'importation - vous pouvez consulter la console de chat pour plus de détails.";
|
||||
|
||||
/* notification title */
|
||||
"Somebody" = "Quelqu'un";
|
||||
|
||||
@@ -2878,9 +2884,6 @@
|
||||
/* No comment provided by engineer. */
|
||||
"This error is permanent for this connection, please re-connect." = "Cette erreur est persistante pour cette connexion, veuillez vous reconnecter.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"This feature is experimental! It will only work if the other client has version 4.2 installed. You should see the message in the conversation once the address change is completed – please check that you can still receive messages from this contact (or group member)." = "Cette fonctionnalité est expérimentale ! Elle ne fonctionnera que si l'autre client a la version 4.2 installée. Vous devriez voir le message dans la conversation une fois le changement d'adresse effectué. Vérifiez que vous pouvez toujours recevoir des messages de ce contact (ou membre du groupe).";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"This group no longer exists." = "Ce groupe n'existe plus.";
|
||||
|
||||
@@ -3200,7 +3203,7 @@
|
||||
"You can create it later" = "Vous pouvez la créer plus tard";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"You can hide or mute a user profile - swipe it to the right.\nSimpleX Lock must be enabled." = "Vous pouvez masquer ou mettre en sourdine un profil d'utilisateur - faites-le glisser vers la droite.\nSimpleX Lock doit être activé.";
|
||||
"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.";
|
||||
|
||||
/* notification body */
|
||||
"You can now send messages to %@" = "Vous pouvez maintenant envoyer des messages à %@";
|
||||
@@ -3340,9 +3343,6 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Your chat profiles" = "Vos profils de chat";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Your chats" = "Vos chats";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Your contact needs to be online for the connection to complete.\nYou can cancel this connection and remove the contact (and try later with a new link)." = "Votre contact a besoin d'être en ligne pour completer la connexion.\nVous pouvez annuler la connexion et supprimer le contact (et réessayer plus tard avec un autre lien).";
|
||||
|
||||
|
||||
@@ -104,7 +104,7 @@
|
||||
"%@ %@" = "%@ %@";
|
||||
|
||||
/* notification title */
|
||||
"%@ is connected!" = "%@ è connesso!";
|
||||
"%@ is connected!" = "%@ è connesso/a!";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"%@ is not verified" = "%@ non è verificato/a";
|
||||
@@ -384,7 +384,7 @@
|
||||
"Allow your contacts to send voice messages." = "Permetti ai tuoi contatti di inviare messaggi vocali.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Already connected?" = "Già connesso?";
|
||||
"Already connected?" = "Già connesso/a?";
|
||||
|
||||
/* pref value */
|
||||
"always" = "sempre";
|
||||
@@ -685,7 +685,7 @@
|
||||
"Connect via one-time link?" = "Connettere via link una tantum?";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"connected" = "connesso";
|
||||
"connected" = "connesso/a";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"connecting" = "in connessione";
|
||||
@@ -727,7 +727,7 @@
|
||||
"connection established" = "connessione stabilita";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Connection request" = "Richieste di connessione";
|
||||
"Connection request" = "Richiesta di connessione";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Connection request sent!" = "Richiesta di connessione inviata!";
|
||||
@@ -1672,10 +1672,10 @@
|
||||
"Invite to group" = "Invita al gruppo";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"invited" = "invitato";
|
||||
"invited" = "ha invitato";
|
||||
|
||||
/* rcv group event chat item */
|
||||
"invited %@" = "invitato %@";
|
||||
"invited %@" = "ha invitato %@";
|
||||
|
||||
/* chat list item title */
|
||||
"invited to connect" = "invitato a connettersi";
|
||||
@@ -1756,7 +1756,7 @@
|
||||
"Leave group?" = "Uscire dal gruppo?";
|
||||
|
||||
/* rcv group event chat item */
|
||||
"left" = "uscito/a";
|
||||
"left" = "è uscito/a";
|
||||
|
||||
/* email subject */
|
||||
"Let's talk in SimpleX Chat" = "Parliamo in SimpleX Chat";
|
||||
@@ -1828,7 +1828,7 @@
|
||||
"Member" = "Membro";
|
||||
|
||||
/* rcv group event chat item */
|
||||
"member connected" = "connesso";
|
||||
"member connected" = "connesso/a";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Member role will be changed to \"%@\". All group members will be notified." = "Il ruolo del membro verrà cambiato in \"%@\". Tutti i membri del gruppo verranno avvisati.";
|
||||
@@ -1995,6 +1995,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"No received or sent files" = "Nessun file ricevuto o inviato";
|
||||
|
||||
/* copied message info in history */
|
||||
"no text" = "nessun testo";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Notifications" = "Notifiche";
|
||||
|
||||
@@ -2360,10 +2363,10 @@
|
||||
"Remove passphrase from keychain?" = "Rimuovere la password dal portachiavi?";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"removed" = "rimosso";
|
||||
"removed" = "ha rimosso";
|
||||
|
||||
/* rcv group event chat item */
|
||||
"removed %@" = "rimosso %@";
|
||||
"removed %@" = "ha rimosso %@";
|
||||
|
||||
/* rcv group event chat item */
|
||||
"removed you" = "sei stato/a rimosso/a";
|
||||
@@ -2695,6 +2698,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"SMP servers" = "Server SMP";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Some non-fatal errors occurred during import - you may see Chat console for more details." = "Si sono verificati alcuni errori non gravi durante l'importazione: vedi la console della chat per i dettagli.";
|
||||
|
||||
/* notification title */
|
||||
"Somebody" = "Qualcuno";
|
||||
|
||||
@@ -2878,9 +2884,6 @@
|
||||
/* No comment provided by engineer. */
|
||||
"This error is permanent for this connection, please re-connect." = "L'errore è permanente per questa connessione, riconnettiti.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"This feature is experimental! It will only work if the other client has version 4.2 installed. You should see the message in the conversation once the address change is completed – please check that you can still receive messages from this contact (or group member)." = "Questa funzionalità è sperimentale! Funzionerà solo se l'altro client ha la versione 4.2 installata. Dovresti vedere il messaggio nella conversazione una volta completato il cambio di indirizzo. Controlla di potere ancora ricevere messaggi da questo contatto (o membro del gruppo).";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"This group no longer exists." = "Questo gruppo non esiste più.";
|
||||
|
||||
@@ -2984,7 +2987,7 @@
|
||||
"Unlock app" = "Sblocca l'app";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Unmute" = "Riattiva audio";
|
||||
"Unmute" = "Riattiva notifiche";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Unread" = "Non letto";
|
||||
@@ -3179,7 +3182,7 @@
|
||||
"You are already connected to %@." = "Sei già connesso/a a %@.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"You are connected to the server used to receive messages from this contact." = "Sei connesso al server usato per ricevere messaggi da questo contatto.";
|
||||
"You are connected to the server used to receive messages from this contact." = "Sei connesso/a al server usato per ricevere messaggi da questo contatto.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"you are invited to group" = "sei stato/a invitato/a al gruppo";
|
||||
@@ -3200,7 +3203,7 @@
|
||||
"You can create it later" = "Puoi crearlo più tardi";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"You can hide or mute a user profile - swipe it to the right.\nSimpleX Lock must be enabled." = "Puoi nascondere o silenziare un profilo utente - scorrilo verso destra.\nSimpleX Lock deve essere attivato.";
|
||||
"You can hide or mute a user profile - swipe it to the right." = "Puoi nascondere o silenziare un profilo utente - scorrilo verso destra.";
|
||||
|
||||
/* notification body */
|
||||
"You can now send messages to %@" = "Ora puoi inviare messaggi a %@";
|
||||
@@ -3340,9 +3343,6 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Your chat profiles" = "I tuoi profili di chat";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Your chats" = "Le tue chat";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Your contact needs to be online for the connection to complete.\nYou can cancel this connection and remove the contact (and try later with a new link)." = "Il tuo contatto deve essere in linea per completare la connessione.\nPuoi annullare questa connessione e rimuovere il contatto (e riprovare più tardi con un link nuovo).";
|
||||
|
||||
|
||||
@@ -152,7 +152,7 @@
|
||||
"%lld contact(s) selected" = "%lld 件の連絡先が選択されました";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"%lld file(s) with total size of %@" = "合計サイズ %@ の %lld 件のファイル";
|
||||
"%lld file(s) with total size of %@" = "%lld 個のファイル(合計サイズ: %@)";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"%lld members" = "%lld 人のメンバー";
|
||||
@@ -2872,9 +2872,6 @@
|
||||
/* No comment provided by engineer. */
|
||||
"This error is permanent for this connection, please re-connect." = "このエラーはこの接続では永続的なものです。再接続してください。";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"This feature is experimental! It will only work if the other client has version 4.2 installed. You should see the message in the conversation once the address change is completed – please check that you can still receive messages from this contact (or group member)." = "開発中の機能です!相手のクライアントが4.2でなければ機能しません。アドレス変更が完了すると、会話にメッセージが出ます。連絡相手 (またはグループのメンバー) からメッセージを受信できないかをご確認ください。";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"This group no longer exists." = "このグループはもう存在しません。";
|
||||
|
||||
@@ -3194,7 +3191,7 @@
|
||||
"You can create it later" = "後からでも作成できます";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"You can hide or mute a user profile - swipe it to the right.\nSimpleX Lock must be enabled." = "ユーザープロファイルを右にスワイプすると、非表示またはミュートにすることができます。\nSimpleXロックが有効になっている必要があります。";
|
||||
"You can hide or mute a user profile - swipe it to the right." = "ユーザープロファイルを右にスワイプすると、非表示またはミュートにすることができます。";
|
||||
|
||||
/* notification body */
|
||||
"You can now send messages to %@" = "%@ にメッセージを送信できるようになりました";
|
||||
@@ -3334,9 +3331,6 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Your chat profiles" = "あなたのチャットプロフィール";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Your chats" = "あなたのチャット";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Your contact needs to be online for the connection to complete.\nYou can cancel this connection and remove the contact (and try later with a new link)." = "接続を完了するには、連絡相手がオンラインになる必要があります。\nこの接続をキャンセルして、連絡先を削除をすることもできます (後でやり直すこともできます)。";
|
||||
|
||||
|
||||
@@ -1995,6 +1995,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"No received or sent files" = "Geen ontvangen of verzonden bestanden";
|
||||
|
||||
/* copied message info in history */
|
||||
"no text" = "geen tekst";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Notifications" = "Meldingen";
|
||||
|
||||
@@ -2695,6 +2698,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"SMP servers" = "SMP servers";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Some non-fatal errors occurred during import - you may see Chat console for more details." = "Er zijn enkele niet-fatale fouten opgetreden tijdens het importeren - u kunt de Chat console raadplegen voor meer details.";
|
||||
|
||||
/* notification title */
|
||||
"Somebody" = "Iemand";
|
||||
|
||||
@@ -2878,9 +2884,6 @@
|
||||
/* No comment provided by engineer. */
|
||||
"This error is permanent for this connection, please re-connect." = "Deze fout is permanent voor deze verbinding, maak opnieuw verbinding.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"This feature is experimental! It will only work if the other client has version 4.2 installed. You should see the message in the conversation once the address change is completed – please check that you can still receive messages from this contact (or group member)." = "Deze functie is experimenteel! Het werkt alleen als op de andere client versie 4.2 is geïnstalleerd. U zou het bericht in het gesprek moeten zien zodra de adreswijziging is voltooid. Controleer of u nog steeds berichten van dit contact (of groepslid) kunt ontvangen.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"This group no longer exists." = "Deze groep bestaat niet meer.";
|
||||
|
||||
@@ -3200,7 +3203,7 @@
|
||||
"You can create it later" = "U kan het later maken";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"You can hide or mute a user profile - swipe it to the right.\nSimpleX Lock must be enabled." = "U kunt een gebruikers profiel verbergen of dempen - veeg het naar rechts.\nSimpleX Lock moet ingeschakeld zijn.";
|
||||
"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.";
|
||||
|
||||
/* notification body */
|
||||
"You can now send messages to %@" = "Je kunt nu berichten sturen naar %@";
|
||||
@@ -3340,9 +3343,6 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Your chat profiles" = "Uw chat profielen";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Your chats" = "Jouw gesprekken";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Your contact needs to be online for the connection to complete.\nYou can cancel this connection and remove the contact (and try later with a new link)." = "Uw contactpersoon moet online zijn om de verbinding te voltooien.\nU kunt deze verbinding verbreken en het contact verwijderen (en later proberen met een nieuwe link).";
|
||||
|
||||
|
||||
@@ -1995,6 +1995,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"No received or sent files" = "Brak odebranych lub wysłanych plików";
|
||||
|
||||
/* copied message info in history */
|
||||
"no text" = "brak tekstu";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Notifications" = "Powiadomienia";
|
||||
|
||||
@@ -2878,9 +2881,6 @@
|
||||
/* No comment provided by engineer. */
|
||||
"This error is permanent for this connection, please re-connect." = "Ten błąd jest trwały dla tego połączenia, proszę o ponowne połączenie.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"This feature is experimental! It will only work if the other client has version 4.2 installed. You should see the message in the conversation once the address change is completed – please check that you can still receive messages from this contact (or group member)." = "Ta funkcja jest eksperymentalna! Będzie działać tylko wtedy, gdy drugi klient ma zainstalowaną wersję 4.2. Po zakończeniu zmiany adresu powinieneś zobaczyć wiadomość w konwersacji - sprawdź, czy nadal możesz otrzymywać wiadomości od tego kontaktu (lub członka grupy).";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"This group no longer exists." = "Ta grupa już nie istnieje.";
|
||||
|
||||
@@ -3200,7 +3200,7 @@
|
||||
"You can create it later" = "Możesz go utworzyć później";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"You can hide or mute a user profile - swipe it to the right.\nSimpleX Lock must be enabled." = "Możesz ukryć lub wyciszyć profil użytkownika - przesuń palcem w prawo.\nFunkcja blokady SimpleX musi być włączona.";
|
||||
"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.";
|
||||
|
||||
/* notification body */
|
||||
"You can now send messages to %@" = "Możesz teraz wysyłać wiadomości do %@";
|
||||
@@ -3340,9 +3340,6 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Your chat profiles" = "Twoje profile czatu";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Your chats" = "Twoje czaty";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Your contact needs to be online for the connection to complete.\nYou can cancel this connection and remove the contact (and try later with a new link)." = "Twój kontakt musi być online, aby połączenie zostało zakończone.\nMożesz anulować to połączenie i usunąć kontakt (i spróbować później z nowym linkiem).";
|
||||
|
||||
|
||||
@@ -2878,9 +2878,6 @@
|
||||
/* No comment provided by engineer. */
|
||||
"This error is permanent for this connection, please re-connect." = "Эта ошибка постоянная для этого соединения, пожалуйста, соединитесь снова.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"This feature is experimental! It will only work if the other client has version 4.2 installed. You should see the message in the conversation once the address change is completed – please check that you can still receive messages from this contact (or group member)." = "Это экспериментальная функция! Она будет работать, только если на другом клиенте установлена версия 4.2. После завершения смены адреса Вы увидите сообщение — убедитесь, что Вы все еще можете получать сообщения от этого контакта (или члена группы).";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"This group no longer exists." = "Эта группа больше не существует.";
|
||||
|
||||
@@ -3200,7 +3197,7 @@
|
||||
"You can create it later" = "Вы можете создать его позже";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"You can hide or mute a user profile - swipe it to the right.\nSimpleX Lock must be enabled." = "Вы можете скрыть профиль или выключить уведомления - потяните его вправо.\nБлокировка SimpleX должна быть включена.";
|
||||
"You can hide or mute a user profile - swipe it to the right." = "Вы можете скрыть профиль или выключить уведомления - потяните его вправо.";
|
||||
|
||||
/* notification body */
|
||||
"You can now send messages to %@" = "Вы теперь можете отправлять сообщения %@";
|
||||
@@ -3340,9 +3337,6 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Your chat profiles" = "Ваши профили чата";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Your chats" = "Ваши чаты";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Your contact needs to be online for the connection to complete.\nYou can cancel this connection and remove the contact (and try later with a new link)." = "Ваш контакт должен быть в сети чтобы установить соединение.\nВы можете отменить соединение и удалить контакт (и попробовать позже с другой ссылкой).";
|
||||
|
||||
|
||||
@@ -19,6 +19,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"_italic_" = "\\_斜体_";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"- voice messages up to 5 minutes.\n- custom time to disappear.\n- editing history." = "- 语音消息最长5分钟。\n- 自定义限时消息。\n- 编辑消息历史。";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
", " = ", ";
|
||||
|
||||
@@ -88,6 +91,12 @@
|
||||
/* No comment provided by engineer. */
|
||||
"%@" = "%@";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"%@ (current)" = "%@(当前)";
|
||||
|
||||
/* copied message info */
|
||||
"%@ (current):" = "%@(当前):";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"%@ / %@" = "%@ / %@";
|
||||
|
||||
@@ -109,6 +118,9 @@
|
||||
/* notification title */
|
||||
"%@ wants to connect!" = "%@ 要连接!";
|
||||
|
||||
/* copied message info */
|
||||
"%@:" = "%@:";
|
||||
|
||||
/* time interval */
|
||||
"%d days" = "%d 天";
|
||||
|
||||
@@ -184,9 +196,15 @@
|
||||
/* No comment provided by engineer. */
|
||||
"`a + b`" = "\\`a + b`";
|
||||
|
||||
/* email text */
|
||||
"<p>Hi!</p>\n<p><a href=\"%@\">Connect to me via SimpleX Chat</a></p>" = "<p>你好!</p>\n<p><a href=\"%@\">通过 SimpleX Chat </a></p>与我联系";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"~strike~" = "\\~删去~";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"0s" = "0秒";
|
||||
|
||||
/* time interval */
|
||||
"1 day" = "1天";
|
||||
|
||||
@@ -205,9 +223,15 @@
|
||||
/* No comment provided by engineer. */
|
||||
"1-time link" = "一次性链接";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"5 minutes" = "5分钟";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"6" = "6";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"30 seconds" = "30秒";
|
||||
|
||||
/* notification title */
|
||||
"A new contact" = "新联系人";
|
||||
|
||||
@@ -226,6 +250,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"About SimpleX" = "关于SimpleX";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"About SimpleX address" = "关于 SimpleX 地址";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"About SimpleX Chat" = "关于SimpleX Chat";
|
||||
|
||||
@@ -251,6 +278,9 @@
|
||||
/* call status */
|
||||
"accepted call" = "已接受通话";
|
||||
|
||||
/* 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." = "将地址添加到您的个人资料,以便您的联系人可以与其他人共享。个人资料更新将发送给您的联系人。";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Add preset servers" = "添加预设服务器";
|
||||
|
||||
@@ -269,6 +299,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Add welcome message" = "添加欢迎信息";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Address" = "地址";
|
||||
|
||||
/* member role */
|
||||
"admin" = "管理员";
|
||||
|
||||
@@ -278,9 +311,15 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Advanced network settings" = "高级网络设置";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"All app data is deleted." = "已删除所有应用程序数据。";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"All chats and messages will be deleted - this cannot be undone!" = "所有聊天记录和消息将被删除——这一行为无法撤销!";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"All data is erased when it is entered." = "所有数据在输入后将被删除。";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"All group members will remain connected." = "所有群组成员将保持连接。";
|
||||
|
||||
@@ -290,6 +329,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"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." = "您的所有联系人将保持连接。个人资料更新将发送给您的联系人。";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Allow" = "允许";
|
||||
|
||||
@@ -302,6 +344,12 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Allow irreversible message deletion only if your contact allows it to you." = "仅有您的联系人许可后才允许不可撤回消息移除。";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Allow message reactions only if your contact allows them." = "只有您的联系人允许时才允许消息回应。";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Allow message reactions." = "允许消息回应。";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Allow sending direct messages to members." = "允许向成员发送私信。";
|
||||
|
||||
@@ -320,6 +368,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Allow voice messages?" = "允许语音消息?";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Allow your contacts adding message reactions." = "允许您的联系人添加消息回应。";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Allow your contacts to call you." = "允许您的联系人给您打电话。";
|
||||
|
||||
@@ -341,6 +392,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Always use relay" = "一直使用中继";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"An empty chat profile with the provided name is created, and the app opens as usual." = "已创建一个包含所提供名字的空白聊天资料,应用程序照常打开。";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Answer call" = "接听来电";
|
||||
|
||||
@@ -353,6 +407,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"App passcode" = "应用程序密码";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"App passcode is replaced with self-destruct passcode." = "应用程序密码被替换为自毁密码。";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"App version" = "应用程序版本";
|
||||
|
||||
@@ -392,6 +449,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Authentication unavailable" = "身份验证不可用";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Auto-accept" = "自动接受";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Auto-accept contact requests" = "自动接受联系人请求";
|
||||
|
||||
@@ -413,9 +473,15 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Bad message ID" = "错误消息 ID";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Better messages" = "更好的消息";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"bold" = "加粗";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Both you and your contact can add message reactions." = "您和您的联系人都可以添加消息回应。";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Both you and your contact can irreversibly delete sent messages." = "您和您的联系人都可以不可逆转地删除已发送的消息。";
|
||||
|
||||
@@ -491,6 +557,13 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Change role" = "改变角色";
|
||||
|
||||
/* authentication reason */
|
||||
"Change self-destruct mode" = "更改自毁模式";
|
||||
|
||||
/* authentication reason
|
||||
set passcode view */
|
||||
"Change self-destruct passcode" = "更改自毁密码";
|
||||
|
||||
/* chat item text */
|
||||
"changed address for you" = "为您更改地址";
|
||||
|
||||
@@ -627,7 +700,7 @@
|
||||
"connecting (introduced)" = "连接中(已介绍)";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"connecting (introduction invitation)" = "连接(介绍邀请)";
|
||||
"connecting (introduction invitation)" = "连接中(介绍邀请)";
|
||||
|
||||
/* call status */
|
||||
"connecting call" = "连接通话中……";
|
||||
@@ -698,6 +771,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Contacts can mark messages for deletion; you will be able to view them." = "联系人可以将信息标记为删除;您将可以查看这些信息。";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Continue" = "继续";
|
||||
|
||||
/* chat item action */
|
||||
"Copy" = "复制";
|
||||
|
||||
@@ -707,6 +783,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Create" = "创建";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Create an address to let people connect with you." = "创建一个地址,让人们与您联系。";
|
||||
|
||||
/* server test step */
|
||||
"Create file" = "创建文件";
|
||||
|
||||
@@ -725,6 +804,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Create secret group" = "创建私密群组";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Create SimpleX address" = "创建 SimpleX 地址";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Create your profile" = "创建您的资料";
|
||||
|
||||
@@ -743,6 +825,12 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Currently maximum supported file size is %@." = "目前支持的最大文件大小为 %@。";
|
||||
|
||||
/* dropdown time picker choice */
|
||||
"custom" = "自定义";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Custom time" = "自定义时间";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Dark" = "深色";
|
||||
|
||||
@@ -764,6 +852,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Database ID" = "数据库 ID";
|
||||
|
||||
/* copied message info */
|
||||
"Database ID: %d" = "数据库 ID:%d";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Database IDs and Transport isolation option." = "数据库 ID 和传输隔离选项。";
|
||||
|
||||
@@ -800,6 +891,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Database will be migrated when the app restarts" = "应用程序重新启动时将迁移数据库";
|
||||
|
||||
/* time unit */
|
||||
"days" = "天";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Decentralized" = "分散式";
|
||||
|
||||
@@ -917,6 +1011,12 @@
|
||||
/* deleted chat item */
|
||||
"deleted" = "已删除";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Deleted at" = "已删除于";
|
||||
|
||||
/* copied message info */
|
||||
"Deleted at: %@" = "已删除于:%@";
|
||||
|
||||
/* rcv group event chat item */
|
||||
"deleted group" = "已删除群组";
|
||||
|
||||
@@ -956,6 +1056,9 @@
|
||||
/* authentication reason */
|
||||
"Disable SimpleX Lock" = "禁用 SimpleX 锁定";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Disappearing message" = "限时消息";
|
||||
|
||||
/* chat feature */
|
||||
"Disappearing messages" = "限时消息";
|
||||
|
||||
@@ -965,6 +1068,12 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Disappearing messages are prohibited in this group." = "该组禁止限时消息。";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Disappears at" = "消失于";
|
||||
|
||||
/* copied message info */
|
||||
"Disappears at: %@" = "消失于:%@";
|
||||
|
||||
/* server test step */
|
||||
"Disconnect" = "断开连接";
|
||||
|
||||
@@ -980,6 +1089,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Do NOT use SimpleX for emergency calls." = "请勿使用 SimpleX 进行紧急通话。";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Don't create address" = "不创建地址";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Don't show again" = "不再显示";
|
||||
|
||||
@@ -995,6 +1107,9 @@
|
||||
/* integrity error chat item */
|
||||
"duplicate message" = "重复的消息";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Duration" = "时长";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"e2e encrypted" = "端到端加密";
|
||||
|
||||
@@ -1022,6 +1137,12 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Enable periodic notifications?" = "启用定期通知?";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Enable self-destruct" = "启用自毁功能";
|
||||
|
||||
/* set passcode view */
|
||||
"Enable self-destruct passcode" = "启用自毁密码";
|
||||
|
||||
/* authentication reason */
|
||||
"Enable SimpleX Lock" = "启用 SimpleX 锁定";
|
||||
|
||||
@@ -1085,6 +1206,12 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Enter server manually" = "手动输入服务器";
|
||||
|
||||
/* placeholder */
|
||||
"Enter welcome message…" = "输入欢迎消息……";
|
||||
|
||||
/* placeholder */
|
||||
"Enter welcome message… (optional)" = "输入欢迎消息……(可选)";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"error" = "错误";
|
||||
|
||||
@@ -1187,6 +1314,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Error saving user password" = "保存用户密码时出错";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Error sending email" = "发送电邮错误";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Error sending message" = "发送消息错误";
|
||||
|
||||
@@ -1259,6 +1389,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Files & media" = "文件和媒体";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Finally, we have them! 🚀" = "终于我们有它们了! 🚀";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"For console" = "用于控制台";
|
||||
|
||||
@@ -1313,6 +1446,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Group links" = "群组链接";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Group members can add message reactions." = "群组成员可以添加信息回应。";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Group members can irreversibly delete sent messages." = "群组成员可以不可撤回地删除已发送的消息。";
|
||||
|
||||
@@ -1376,6 +1512,12 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Hide:" = "隐藏:";
|
||||
|
||||
/* copied message info */
|
||||
"History" = "历史记录";
|
||||
|
||||
/* time unit */
|
||||
"hours" = "小时";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"How it works" = "工作原理";
|
||||
|
||||
@@ -1394,9 +1536,18 @@
|
||||
/* No comment provided by engineer. */
|
||||
"ICE servers (one per line)" = "ICE 服务器(每行一个)";
|
||||
|
||||
/* 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!" = "如果您在打开应用时输入该密码,所有应用程序数据将被不可撤回地删除!";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"If you enter your self-destruct passcode while opening the app:" = "如果您在打开应用程序时输入自毁密码:";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"If you need to use the chat now tap **Do it later** below (you will be offered to migrate the database when you restart the app)." = "如果您现在需要使用聊天,请点击下面的**稍后再做**(当您重新启动应用程序时,系统会提示您迁移数据库)。";
|
||||
|
||||
@@ -1472,6 +1623,9 @@
|
||||
/* connection level description */
|
||||
"indirect (%d)" = "间接(%d)";
|
||||
|
||||
/* chat item action */
|
||||
"Info" = "信息";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Initial role" = "初始角色";
|
||||
|
||||
@@ -1508,6 +1662,9 @@
|
||||
/* group name */
|
||||
"invitation to group %@" = "邀请您加入群组 %@";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Invite friends" = "邀请朋友";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Invite members" = "邀请成员";
|
||||
|
||||
@@ -1559,6 +1716,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"italic" = "斜体";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Japanese interface" = "日语界面";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Join" = "加入";
|
||||
|
||||
@@ -1583,6 +1743,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Large file!" = "大文件!";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Learn more" = "了解更多";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Leave" = "离开";
|
||||
|
||||
@@ -1595,6 +1758,9 @@
|
||||
/* rcv group event chat item */
|
||||
"left" = "已离开";
|
||||
|
||||
/* email subject */
|
||||
"Let's talk in SimpleX Chat" = "让我们一起在 SimpleX Chat 里聊天";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Light" = "浅色";
|
||||
|
||||
@@ -1679,6 +1845,15 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Message draft" = "消息草稿";
|
||||
|
||||
/* chat feature */
|
||||
"Message reactions" = "消息回应";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Message reactions are prohibited in this chat." = "该聊天禁用了消息回应。";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Message reactions are prohibited in this group." = "该群组禁用了消息回应。";
|
||||
|
||||
/* notification */
|
||||
"message received" = "消息已收到";
|
||||
|
||||
@@ -1706,6 +1881,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Migrations: %@" = "迁移:%@";
|
||||
|
||||
/* time unit */
|
||||
"minutes" = "分钟";
|
||||
|
||||
/* call status */
|
||||
"missed call" = "未接来电";
|
||||
|
||||
@@ -1715,9 +1893,18 @@
|
||||
/* moderated chat item */
|
||||
"moderated" = "已被管理员移除";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Moderated at" = "已被管理员移除于";
|
||||
|
||||
/* copied message info */
|
||||
"Moderated at: %@" = "已被管理员移除于:%@";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"moderated by %@" = "由 %@ 审核";
|
||||
|
||||
/* time unit */
|
||||
"months" = "月";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"More improvements are coming soon!" = "更多改进即将推出!";
|
||||
|
||||
@@ -1757,6 +1944,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"New database archive" = "新数据库存档";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"New display name" = "新显示名";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"New in %@" = "%@ 的新内容";
|
||||
|
||||
@@ -1805,6 +1995,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"No received or sent files" = "未收到或发送文件";
|
||||
|
||||
/* copied message info in history */
|
||||
"no text" = "无文本";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Notifications" = "通知";
|
||||
|
||||
@@ -1866,6 +2059,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Only group owners can enable voice messages." = "只有群主可以启用语音信息。";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Only you can add message reactions." = "只有您可以添加消息回应。";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Only you can irreversibly delete messages (your contact can mark them for deletion)." = "只有您可以不可撤回地删除消息(您的联系人可以将它们标记为删除)。";
|
||||
|
||||
@@ -1878,6 +2074,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Only you can send voice messages." = "只有您可以发送语音消息。";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"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)." = "只有您的联系人才能不可撤回地删除消息(您可以将它们标记为删除)。";
|
||||
|
||||
@@ -1905,6 +2104,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Open-source protocol and code – anybody can run the servers." = "开源协议和代码——任何人都可以运行服务器。";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Opening database…" = "打开数据库中……";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Opening the link in the browser may reduce connection privacy and security. Untrusted SimpleX links will be red." = "在浏览器中打开链接可能会降低连接的隐私和安全性。SimpleX 上不受信任的链接将显示为红色。";
|
||||
|
||||
@@ -2013,6 +2215,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Preset server address" = "预设服务器地址";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Preview" = "预览";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Privacy & security" = "隐私和安全";
|
||||
|
||||
@@ -2031,12 +2236,21 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Profile password" = "个人资料密码";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Profile update will be sent to your contacts." = "个人资料更新将被发送给您的联系人。";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Prohibit audio/video calls." = "禁止音频/视频通话。";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Prohibit irreversible message deletion." = "禁止不可撤回消息删除。";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Prohibit message reactions." = "禁止消息回应。";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Prohibit messages reactions." = "禁止消息回应。";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Prohibit sending direct messages to members." = "禁止向成员发送私信。";
|
||||
|
||||
@@ -2061,9 +2275,21 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Rate the app" = "评价此应用程序";
|
||||
|
||||
/* chat item menu */
|
||||
"React..." = "回应……";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Read" = "已读";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Read more" = "阅读更多";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Read more in [User Guide](https://simplex.chat/docs/guide/app-settings.html#your-simplex-contact-address)." = "在 [用户指南](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)." = "在 [用户指南](https://simplex.chat/docs/guide/readme.html#connect-to-friends) 中阅读更多内容。";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Read more in our [GitHub repository](https://github.com/simplex-chat/simplex-chat#readme)." = "在我们的 [GitHub 仓库](https://github.com/simplex-chat/simplex-chat#readme) 中阅读更多信息。";
|
||||
|
||||
@@ -2073,12 +2299,21 @@
|
||||
/* No comment provided by engineer. */
|
||||
"received answer…" = "已收到回复……";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Received at" = "已收到于";
|
||||
|
||||
/* copied message info */
|
||||
"Received at: %@" = "已收到于:%@";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"received confirmation…" = "已受到确认……";
|
||||
|
||||
/* notification */
|
||||
"Received file event" = "收到文件项目";
|
||||
|
||||
/* message info title */
|
||||
"Received message" = "收到的信息";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Receiving file will be stopped." = "即将停止接收文件。";
|
||||
|
||||
@@ -2088,6 +2323,12 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Recipients see updates as you type them." = "对方会在您键入时看到更新。";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Record updated at" = "记录更新于";
|
||||
|
||||
/* copied message info */
|
||||
"Record updated at: %@" = "记录更新于:%@";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Reduced battery usage" = "减少电池使用量";
|
||||
|
||||
@@ -2202,6 +2443,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Save archive" = "保存存档";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Save auto-accept settings" = "保存自动接受设置";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Save group profile" = "保存群组资料";
|
||||
|
||||
@@ -2223,6 +2467,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Save servers?" = "保存服务器?";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Save settings?" = "保存设置?";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Save welcome message?" = "保存欢迎信息?";
|
||||
|
||||
@@ -2247,6 +2494,9 @@
|
||||
/* network option */
|
||||
"sec" = "秒";
|
||||
|
||||
/* time unit */
|
||||
"seconds" = "秒";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"secret" = "秘密";
|
||||
|
||||
@@ -2259,6 +2509,21 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Security code" = "安全码";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Select" = "选择";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Self-destruct" = "自毁";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Self-destruct passcode" = "自毁密码";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Self-destruct passcode changed!" = "自毁密码已更改!";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Self-destruct passcode enabled!" = "自毁密码已启用!";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Send" = "发送";
|
||||
|
||||
@@ -2268,6 +2533,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Send direct message" = "发送私信";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Send disappearing message" = "发送限时消息中";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Send link previews" = "发送链接预览";
|
||||
|
||||
@@ -2298,9 +2566,18 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Sending via" = "发送通过";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Sent at" = "已发送于";
|
||||
|
||||
/* copied message info */
|
||||
"Sent at: %@" = "已发送于:%@";
|
||||
|
||||
/* notification */
|
||||
"Sent file event" = "已发送文件项目";
|
||||
|
||||
/* message info title */
|
||||
"Sent message" = "已发信息";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Sent messages will be deleted after set time." = "已发送的消息将在设定的时间后被删除。";
|
||||
|
||||
@@ -2328,6 +2605,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Set it instead of system authentication." = "设置它以代替系统身份验证。";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Set passcode" = "设置密码";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Set passphrase to export" = "设置密码来导出";
|
||||
|
||||
@@ -2346,12 +2626,21 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Share 1-time link" = "分享一次性链接";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Share address" = "分享地址";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Share address with contacts?" = "与联系人分享地址?";
|
||||
|
||||
/* 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" = "与联系人分享";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Show calls in phone history" = "在电话历史记录中显示通话";
|
||||
|
||||
@@ -2364,6 +2653,12 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Show:" = "显示:";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"SimpleX address" = "SimpleX 地址";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"SimpleX Address" = "SimpleX 地址";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"SimpleX Chat security was audited by Trail of Bits." = "SimpleX Chat 的安全性 由 Trail of Bits 审核。";
|
||||
|
||||
@@ -2403,6 +2698,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"SMP servers" = "SMP 服务器";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Some non-fatal errors occurred during import - you may see Chat console for more details." = "导入过程中发生了一些非致命错误——您可以查看聊天控制台了解更多详细信息。";
|
||||
|
||||
/* notification title */
|
||||
"Somebody" = "某人";
|
||||
|
||||
@@ -2439,6 +2737,12 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Stop sending file?" = "停止发送文件?";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Stop sharing" = "停止分享";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Stop sharing address?" = "停止分享地址?";
|
||||
|
||||
/* authentication reason */
|
||||
"Stop SimpleX" = "停止 SimpleX";
|
||||
|
||||
@@ -2580,9 +2884,6 @@
|
||||
/* No comment provided by engineer. */
|
||||
"This error is permanent for this connection, please re-connect." = "此错误对于此连接是永久性的,请重新连接。";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"This feature is experimental! It will only work if the other client has version 4.2 installed. You should see the message in the conversation once the address change is completed – please check that you can still receive messages from this contact (or group member)." = "此功能是实验性的! 它仅在其他客户端安装了 4.2 版时才有效。 地址更改完成后,您应该会在对话中看到该消息——请检查您是否仍能收到来自该联系人(或群组成员)的消息。";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"This group no longer exists." = "该群组已不存在。";
|
||||
|
||||
@@ -2592,6 +2893,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"To ask any questions and to receive updates:" = "要提出任何问题并接收更新,请:";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"To connect, your contact can scan QR code or use the link in the app." = "您的联系人可以扫描二维码或使用应用程序中的链接来建立连接。";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"To find the profile used for an incognito connection, tap the contact or group name on top of the chat." = "要查找用于隐身聊天连接的资料,点击聊天顶部的联系人或群组名。";
|
||||
|
||||
@@ -2655,6 +2959,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Unhide profile" = "取消隐藏个人资料";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Unit" = "单位";
|
||||
|
||||
/* connection info */
|
||||
"unknown" = "未知";
|
||||
|
||||
@@ -2823,6 +3130,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"WebRTC ICE servers" = "WebRTC ICE 服务器";
|
||||
|
||||
/* time unit */
|
||||
"weeks" = "周";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Welcome %@!" = "欢迎%@!";
|
||||
|
||||
@@ -2835,6 +3145,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"When available" = "当可用时";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"When people request to connect, you can accept or reject it." = "当人们请求连接时,您可以接受或拒绝它。";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"When you share an incognito profile with somebody, this profile will be used for the groups they invite you to." = "当您与某人共享隐身聊天资料时,该资料将用于他们邀请您加入的群组。";
|
||||
|
||||
@@ -2887,7 +3200,10 @@
|
||||
"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 hide or mute a user profile - swipe it to the right.\nSimpleX Lock must be enabled." = "您可以隐藏或静音用户个人资料——只需向右滑动。\n必须启用 SimpleX Lock。";
|
||||
"You can create it later" = "您可以以后创建它";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"You can hide or mute a user profile - swipe it to the right." = "您可以隐藏或静音用户个人资料——只需向右滑动。";
|
||||
|
||||
/* notification body */
|
||||
"You can now send messages to %@" = "您现在可以给 %@ 发送消息";
|
||||
@@ -2898,6 +3214,9 @@
|
||||
/* 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." = "您可以共享链接或二维码——任何人都可以加入该群组。如果您稍后将其删除,您不会失去该组的成员。";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"You can share this address with your contacts to let them connect with **%@**." = "您可以与您的联系人分享该地址,让他们与 **%@** 联系。";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"You can share your address as a link or QR code - anybody can connect to you." = "您可以将您的地址作为链接或二维码共享——任何人都可以连接到您。";
|
||||
|
||||
@@ -2992,7 +3311,7 @@
|
||||
"You will stop receiving messages from this group. Chat history will be preserved." = "您将停止接收来自该群组的消息。聊天记录将被保留。";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"You won't lose your contacts if you later delete your address." = "如果您以后删除它,您不会丢失您的联系人。";
|
||||
"You won't lose your contacts if you later delete your address." = "如果您以后删除您的地址,您不会丢失您的联系人。";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"you: " = "您: ";
|
||||
@@ -3024,9 +3343,6 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Your chat profiles" = "您的聊天资料";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Your chats" = "您的聊天";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Your contact needs to be online for the connection to complete.\nYou can cancel this connection and remove the contact (and try later with a new link)." = "您的联系人需要在线才能完成连接。\n您可以取消此连接并删除联系人(然后尝试使用新链接)。";
|
||||
|
||||
@@ -3036,6 +3352,12 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Your contacts can allow full message deletion." = "您的联系人可以允许完全删除消息。";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Your contacts in SimpleX will see it.\nYou can change it in Settings." = "您的 SimpleX 的联系人会看到它。\n您可以在设置中更改它。";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Your contacts will remain connected." = "与您的联系人保持连接。";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Your current chat database will be DELETED and REPLACED with the imported one." = "您当前的聊天数据库将被删除并替换为导入的数据库。";
|
||||
|
||||
|
||||
20
apps/multiplatform/.gitignore
vendored
Normal file
20
apps/multiplatform/.gitignore
vendored
Normal file
@@ -0,0 +1,20 @@
|
||||
*.iml
|
||||
.gradle
|
||||
/local.properties
|
||||
/.idea
|
||||
!/.idea/codeStyles/*
|
||||
.DS_Store
|
||||
/build
|
||||
/captures
|
||||
.externalNativeBuild
|
||||
.cxx
|
||||
local.properties
|
||||
common/src/commonMain/cpp/android/libs/
|
||||
common/src/commonMain/cpp/desktop/libs/
|
||||
common/src/commonMain/resources/libs/
|
||||
android/src/main/cpp/libs/
|
||||
android/build
|
||||
android/release
|
||||
common/build
|
||||
desktop/build
|
||||
release
|
||||
@@ -5,16 +5,16 @@ plugins {
|
||||
}
|
||||
|
||||
android {
|
||||
compileSdk 32
|
||||
compileSdk 33
|
||||
|
||||
defaultConfig {
|
||||
applicationId "chat.simplex.app"
|
||||
minSdk 26
|
||||
targetSdk 32
|
||||
targetSdk 33
|
||||
// !!!
|
||||
// skip version code after release to F-Droid, as it uses two version codes
|
||||
versionCode 121
|
||||
versionName "5.1"
|
||||
versionCode 129
|
||||
versionName "5.2-beta.0"
|
||||
|
||||
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
|
||||
vectorDrawables {
|
||||
@@ -170,6 +170,7 @@ dependencies {
|
||||
androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'
|
||||
androidTestImplementation "androidx.compose.ui:ui-test-junit4:$compose_version"
|
||||
debugImplementation "androidx.compose.ui:ui-tooling:$compose_version"
|
||||
implementation "com.jakewharton:process-phoenix:2.1.2"
|
||||
}
|
||||
|
||||
// Don't do anything if no compression is needed
|
||||
@@ -231,9 +232,9 @@ tasks.register("compressApk") {
|
||||
}
|
||||
|
||||
if (project.properties['android.injected.signing.key.alias'] != null && buildType == 'release') {
|
||||
new File(outputDir, "app-release.apk").renameTo(new File(outputDir, "simplex.apk"))
|
||||
new File(outputDir, "app-armeabi-v7a-release.apk").renameTo(new File(outputDir, "simplex-armv7a.apk"))
|
||||
new File(outputDir, "app-arm64-v8a-release.apk").renameTo(new File(outputDir, "simplex.apk"))
|
||||
new File(outputDir, "android-release.apk").renameTo(new File(outputDir, "simplex.apk"))
|
||||
new File(outputDir, "android-armeabi-v7a-release.apk").renameTo(new File(outputDir, "simplex-armv7a.apk"))
|
||||
new File(outputDir, "android-arm64-v8a-release.apk").renameTo(new File(outputDir, "simplex.apk"))
|
||||
}
|
||||
|
||||
// View all gradle properties set
|
||||
@@ -6,6 +6,7 @@
|
||||
<uses-feature android:name="android.hardware.camera" />
|
||||
|
||||
<uses-permission android:name="android.permission.CAMERA" />
|
||||
<uses-permission android:name="android.permission.POST_NOTIFICATIONS" />
|
||||
<uses-permission android:name="android.permission.VIDEO_CAPTURE" />
|
||||
<uses-permission android:name="android.permission.RECORD_AUDIO" />
|
||||
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
|
||||
|
Before Width: | Height: | Size: 34 KiB After Width: | Height: | Size: 34 KiB |
|
Before Width: | Height: | Size: 32 KiB After Width: | Height: | Size: 32 KiB |
@@ -582,7 +582,7 @@ fun processNotificationIntent(intent: Intent?, chatModel: ChatModel) {
|
||||
}
|
||||
val cInfo = chatModel.getChat(chatId)?.chatInfo
|
||||
chatModel.clearOverlays.value = true
|
||||
if (cInfo != null) openChat(cInfo, chatModel)
|
||||
if (cInfo != null && (cInfo is ChatInfo.Direct || cInfo is ChatInfo.Group)) openChat(cInfo, chatModel)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -10,6 +10,7 @@ import chat.simplex.app.ui.theme.DefaultTheme
|
||||
import chat.simplex.app.views.helpers.*
|
||||
import chat.simplex.app.views.onboarding.OnboardingStage
|
||||
import chat.simplex.app.views.usersettings.NotificationsMode
|
||||
import com.jakewharton.processphoenix.ProcessPhoenix
|
||||
import kotlinx.coroutines.*
|
||||
import kotlinx.serialization.decodeFromString
|
||||
import java.io.*
|
||||
@@ -101,6 +102,9 @@ class SimplexApp: Application(), LifecycleEventObserver {
|
||||
|
||||
override fun onCreate() {
|
||||
super.onCreate()
|
||||
if (ProcessPhoenix.isPhoenixProcess(this)) {
|
||||
return;
|
||||
}
|
||||
context = this
|
||||
context.getDir("temp", MODE_PRIVATE).deleteRecursively()
|
||||
withBGApi {
|
||||
@@ -9,9 +9,9 @@ import android.util.Log
|
||||
import androidx.core.app.NotificationCompat
|
||||
import androidx.core.content.ContextCompat
|
||||
import androidx.work.*
|
||||
import chat.simplex.app.model.ChatController
|
||||
import chat.simplex.app.views.helpers.*
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.withContext
|
||||
import kotlinx.coroutines.*
|
||||
|
||||
// based on:
|
||||
// https://robertohuertas.com/2019/06/29/android_foreground_services/
|
||||
@@ -86,6 +86,7 @@ class SimplexService: Service() {
|
||||
isStartingService = true
|
||||
withApi {
|
||||
val chatController = (application as SimplexApp).chatController
|
||||
waitDbMigrationEnds(chatController)
|
||||
try {
|
||||
Log.w(TAG, "Starting foreground service")
|
||||
val chatDbStatus = chatController.chatModel.chatDbStatus.value
|
||||
@@ -165,7 +166,6 @@ class SimplexService: Service() {
|
||||
it.setPackage(packageName)
|
||||
};
|
||||
val restartServicePendingIntent: PendingIntent = PendingIntent.getService(this, 1, restartServiceIntent, PendingIntent.FLAG_ONE_SHOT or PendingIntent.FLAG_IMMUTABLE);
|
||||
applicationContext.getSystemService(Context.ALARM_SERVICE);
|
||||
val alarmService: AlarmManager = applicationContext.getSystemService(Context.ALARM_SERVICE) as AlarmManager;
|
||||
alarmService.set(AlarmManager.ELAPSED_REALTIME, SystemClock.elapsedRealtime() + 1000, restartServicePendingIntent);
|
||||
}
|
||||
@@ -324,6 +324,18 @@ class SimplexService: Service() {
|
||||
notificationManager.cancel(PASSPHRASE_NOTIFICATION_ID)
|
||||
}
|
||||
|
||||
/*
|
||||
* When the app starts the database is in migration process. It can take from seconds to tens of seconds.
|
||||
* It happens in background thread, so other places that relies on database should wait til the end of migration
|
||||
* */
|
||||
suspend fun waitDbMigrationEnds(chatController: ChatController) {
|
||||
var maxWaitTime = 50_000
|
||||
while (chatController.chatModel.chatDbStatus.value == null && maxWaitTime > 0) {
|
||||
delay(50)
|
||||
maxWaitTime -= 50
|
||||
}
|
||||
}
|
||||
|
||||
private fun getPreferences(context: Context): SharedPreferences = context.getSharedPreferences(SHARED_PREFS_ID, Context.MODE_PRIVATE)
|
||||
}
|
||||
}
|
||||
@@ -695,6 +695,13 @@ sealed class ChatInfo: SomeChat, NamedChat {
|
||||
private val invalidChatName = generalGetString(R.string.invalid_chat)
|
||||
}
|
||||
}
|
||||
|
||||
val chatSettings
|
||||
get() = when(this) {
|
||||
is Direct -> contact.chatSettings
|
||||
is Group -> groupInfo.chatSettings
|
||||
else -> null
|
||||
}
|
||||
}
|
||||
|
||||
@Serializable
|
||||
@@ -783,7 +790,7 @@ data class Contact(
|
||||
profile = LocalProfile.sampleData,
|
||||
activeConn = Connection.sampleData,
|
||||
contactUsed = true,
|
||||
chatSettings = ChatSettings(true),
|
||||
chatSettings = ChatSettings(true, false),
|
||||
userPreferences = ChatPreferences.sampleData,
|
||||
mergedPreferences = ContactUserPreferences.sampleData,
|
||||
createdAt = Clock.System.now(),
|
||||
@@ -931,7 +938,7 @@ data class GroupInfo (
|
||||
fullGroupPreferences = FullGroupPreferences.sampleData,
|
||||
membership = GroupMember.sampleData,
|
||||
hostConnCustomUserProfileId = null,
|
||||
chatSettings = ChatSettings(true),
|
||||
chatSettings = ChatSettings(true, false),
|
||||
createdAt = Clock.System.now(),
|
||||
updatedAt = Clock.System.now()
|
||||
)
|
||||
@@ -1624,8 +1631,9 @@ fun getTimestampText(t: Instant): String {
|
||||
val tz = TimeZone.currentSystemDefault()
|
||||
val now: LocalDateTime = Clock.System.now().toLocalDateTime(tz)
|
||||
val time: LocalDateTime = t.toLocalDateTime(tz)
|
||||
val period = now.date.minus(time.date)
|
||||
val recent = now.date == time.date ||
|
||||
(now.date.minus(time.date).days == 1 && now.hour < 12 && time.hour >= 18 )
|
||||
(period.years == 0 && period.months == 0 && period.days == 1 && now.hour < 12 && time.hour >= 18 )
|
||||
val dateFormatter =
|
||||
if (recent) {
|
||||
DateTimeFormatter.ofLocalizedTime(FormatStyle.SHORT)
|
||||
@@ -2351,6 +2359,7 @@ sealed class SndConnEvent {
|
||||
enum class SwitchPhase {
|
||||
@SerialName("started") Started,
|
||||
@SerialName("confirmed") Confirmed,
|
||||
@SerialName("secured") Secured,
|
||||
@SerialName("completed") Completed
|
||||
}
|
||||
|
||||
@@ -106,6 +106,7 @@ class AppPreferences(val context: Context) {
|
||||
)
|
||||
val privacyFullBackup = mkBoolPreference(SHARED_PREFS_PRIVACY_FULL_BACKUP, false)
|
||||
val experimentalCalls = mkBoolPreference(SHARED_PREFS_EXPERIMENTAL_CALLS, false)
|
||||
val showUnreadAndFavorites = mkBoolPreference(SHARED_PREFS_SHOW_UNREAD_AND_FAVORITES, false)
|
||||
val chatArchiveName = mkStrPreference(SHARED_PREFS_CHAT_ARCHIVE_NAME, null)
|
||||
val chatArchiveTime = mkDatePreference(SHARED_PREFS_CHAT_ARCHIVE_TIME, null)
|
||||
val chatLastStart = mkDatePreference(SHARED_PREFS_CHAT_LAST_START, null)
|
||||
@@ -249,6 +250,7 @@ class AppPreferences(val context: Context) {
|
||||
private const val SHARED_PREFS_PRIVACY_SIMPLEX_LINK_MODE = "PrivacySimplexLinkMode"
|
||||
internal const val SHARED_PREFS_PRIVACY_FULL_BACKUP = "FullBackup"
|
||||
private const val SHARED_PREFS_EXPERIMENTAL_CALLS = "ExperimentalCalls"
|
||||
private const val SHARED_PREFS_SHOW_UNREAD_AND_FAVORITES = "ShowUnreadAndFavorites"
|
||||
private const val SHARED_PREFS_CHAT_ARCHIVE_NAME = "ChatArchiveName"
|
||||
private const val SHARED_PREFS_CHAT_ARCHIVE_TIME = "ChatArchiveTime"
|
||||
private const val SHARED_PREFS_APP_LANGUAGE = "AppLanguage"
|
||||
@@ -545,9 +547,9 @@ open class ChatController(var ctrl: ChatCtrl?, val ntfManager: NtfManager, val a
|
||||
throw Error("failed to export archive: ${r.responseType} ${r.details}")
|
||||
}
|
||||
|
||||
suspend fun apiImportArchive(config: ArchiveConfig) {
|
||||
suspend fun apiImportArchive(config: ArchiveConfig): List<ArchiveError> {
|
||||
val r = sendCmd(CC.ApiImportArchive(config))
|
||||
if (r is CR.CmdOk) return
|
||||
if (r is CR.ArchiveImported) return r.archiveErrors
|
||||
throw Error("failed to import archive: ${r.responseType} ${r.details}")
|
||||
}
|
||||
|
||||
@@ -736,22 +738,32 @@ open class ChatController(var ctrl: ChatCtrl?, val ntfManager: NtfManager, val a
|
||||
return null
|
||||
}
|
||||
|
||||
suspend fun apiSwitchContact(contactId: Long) {
|
||||
return when (val r = sendCmd(CC.APISwitchContact(contactId))) {
|
||||
is CR.CmdOk -> {}
|
||||
else -> {
|
||||
apiErrorAlert("apiSwitchContact", generalGetString(R.string.connection_error), r)
|
||||
}
|
||||
}
|
||||
suspend fun apiSwitchContact(contactId: Long): ConnectionStats? {
|
||||
val r = sendCmd(CC.APISwitchContact(contactId))
|
||||
if (r is CR.ContactSwitchStarted) return r.connectionStats
|
||||
apiErrorAlert("apiSwitchContact", generalGetString(R.string.error_changing_address), r)
|
||||
return null
|
||||
}
|
||||
|
||||
suspend fun apiSwitchGroupMember(groupId: Long, groupMemberId: Long) {
|
||||
return when (val r = sendCmd(CC.APISwitchGroupMember(groupId, groupMemberId))) {
|
||||
is CR.CmdOk -> {}
|
||||
else -> {
|
||||
apiErrorAlert("apiSwitchGroupMember", generalGetString(R.string.error_changing_address), r)
|
||||
}
|
||||
}
|
||||
suspend fun apiSwitchGroupMember(groupId: Long, groupMemberId: Long): ConnectionStats? {
|
||||
val r = sendCmd(CC.APISwitchGroupMember(groupId, groupMemberId))
|
||||
if (r is CR.GroupMemberSwitchStarted) return r.connectionStats
|
||||
apiErrorAlert("apiSwitchGroupMember", generalGetString(R.string.error_changing_address), r)
|
||||
return null
|
||||
}
|
||||
|
||||
suspend fun apiAbortSwitchContact(contactId: Long): ConnectionStats? {
|
||||
val r = sendCmd(CC.APIAbortSwitchContact(contactId))
|
||||
if (r is CR.ContactSwitchAborted) return r.connectionStats
|
||||
apiErrorAlert("apiAbortSwitchContact", generalGetString(R.string.error_aborting_address_change), r)
|
||||
return null
|
||||
}
|
||||
|
||||
suspend fun apiAbortSwitchGroupMember(groupId: Long, groupMemberId: Long): ConnectionStats? {
|
||||
val r = sendCmd(CC.APIAbortSwitchGroupMember(groupId, groupMemberId))
|
||||
if (r is CR.GroupMemberSwitchAborted) return r.connectionStats
|
||||
apiErrorAlert("apiAbortSwitchGroupMember", generalGetString(R.string.error_aborting_address_change), r)
|
||||
return null
|
||||
}
|
||||
|
||||
suspend fun apiGetContactCode(contactId: Long): Pair<Contact, String> {
|
||||
@@ -1480,10 +1492,14 @@ open class ChatController(var ctrl: ChatCtrl?, val ntfManager: NtfManager, val a
|
||||
if (active(r.user)) {
|
||||
chatModel.upsertGroupMember(r.groupInfo, r.member)
|
||||
}
|
||||
is CR.ConnectedToGroupMember ->
|
||||
is CR.ConnectedToGroupMember -> {
|
||||
if (active(r.user)) {
|
||||
chatModel.upsertGroupMember(r.groupInfo, r.member)
|
||||
}
|
||||
if (r.memberContact != null) {
|
||||
chatModel.setContactNetworkStatus(r.memberContact, NetworkStatus.Connected())
|
||||
}
|
||||
}
|
||||
is CR.GroupUpdated ->
|
||||
if (active(r.user)) {
|
||||
chatModel.updateGroup(r.toGroup)
|
||||
@@ -1935,6 +1951,8 @@ sealed class CC {
|
||||
class APIGroupMemberInfo(val groupId: Long, val groupMemberId: Long): CC()
|
||||
class APISwitchContact(val contactId: Long): CC()
|
||||
class APISwitchGroupMember(val groupId: Long, val groupMemberId: Long): CC()
|
||||
class APIAbortSwitchContact(val contactId: Long): CC()
|
||||
class APIAbortSwitchGroupMember(val groupId: Long, val groupMemberId: Long): CC()
|
||||
class APIGetContactCode(val contactId: Long): CC()
|
||||
class APIGetGroupMemberCode(val groupId: Long, val groupMemberId: Long): CC()
|
||||
class APIVerifyContact(val contactId: Long, val connectionCode: String?): CC()
|
||||
@@ -2028,6 +2046,8 @@ sealed class CC {
|
||||
is APIGroupMemberInfo -> "/_info #$groupId $groupMemberId"
|
||||
is APISwitchContact -> "/_switch @$contactId"
|
||||
is APISwitchGroupMember -> "/_switch #$groupId $groupMemberId"
|
||||
is APIAbortSwitchContact -> "/_abort switch @$contactId"
|
||||
is APIAbortSwitchGroupMember -> "/_abort switch #$groupId $groupMemberId"
|
||||
is APIGetContactCode -> "/_get code @$contactId"
|
||||
is APIGetGroupMemberCode -> "/_get code #$groupId $groupMemberId"
|
||||
is APIVerifyContact -> "/_verify code @$contactId" + if (connectionCode != null) " $connectionCode" else ""
|
||||
@@ -2116,6 +2136,8 @@ sealed class CC {
|
||||
is APIGroupMemberInfo -> "apiGroupMemberInfo"
|
||||
is APISwitchContact -> "apiSwitchContact"
|
||||
is APISwitchGroupMember -> "apiSwitchGroupMember"
|
||||
is APIAbortSwitchContact -> "apiAbortSwitchContact"
|
||||
is APIAbortSwitchGroupMember -> "apiAbortSwitchGroupMember"
|
||||
is APIGetContactCode -> "apiGetContactCode"
|
||||
is APIGetGroupMemberCode -> "apiGetGroupMemberCode"
|
||||
is APIVerifyContact -> "apiVerifyContact"
|
||||
@@ -2499,8 +2521,13 @@ data class KeepAliveOpts(
|
||||
|
||||
@Serializable
|
||||
data class ChatSettings(
|
||||
val enableNtfs: Boolean
|
||||
)
|
||||
val enableNtfs: Boolean,
|
||||
val favorite: Boolean
|
||||
) {
|
||||
companion object {
|
||||
val defaults: ChatSettings = ChatSettings(enableNtfs = true, favorite = false)
|
||||
}
|
||||
}
|
||||
|
||||
@Serializable
|
||||
data class FullChatPreferences(
|
||||
@@ -2573,7 +2600,7 @@ data class TimedMessagesPreference(
|
||||
): ChatPreference {
|
||||
companion object {
|
||||
val ttlValues: List<Int?>
|
||||
get() = listOf(3600, 8 * 3600, 86400, 7 * 86400, 30 * 86400, null)
|
||||
get() = listOf(600, 3600, 86400, 7 * 86400, 30 * 86400, 3 * 30 * 86400, null)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2910,7 +2937,8 @@ enum class GroupFeature: Feature {
|
||||
@SerialName("directMessages") DirectMessages,
|
||||
@SerialName("fullDelete") FullDelete,
|
||||
@SerialName("reactions") Reactions,
|
||||
@SerialName("voice") Voice;
|
||||
@SerialName("voice") Voice,
|
||||
@SerialName("files") Files;
|
||||
|
||||
override val hasParam: Boolean get() = when(this) {
|
||||
TimedMessages -> true
|
||||
@@ -2924,6 +2952,7 @@ enum class GroupFeature: Feature {
|
||||
FullDelete -> generalGetString(R.string.full_deletion)
|
||||
Reactions -> generalGetString(R.string.message_reactions)
|
||||
Voice -> generalGetString(R.string.voice_messages)
|
||||
Files -> generalGetString(R.string.files_and_media)
|
||||
}
|
||||
|
||||
val icon: Painter
|
||||
@@ -2933,6 +2962,7 @@ enum class GroupFeature: Feature {
|
||||
FullDelete -> painterResource(R.drawable.ic_delete_forever)
|
||||
Reactions -> painterResource(R.drawable.ic_add_reaction)
|
||||
Voice -> painterResource(R.drawable.ic_keyboard_voice)
|
||||
Files -> painterResource(R.drawable.ic_draft)
|
||||
}
|
||||
|
||||
@Composable
|
||||
@@ -2942,6 +2972,7 @@ enum class GroupFeature: Feature {
|
||||
FullDelete -> painterResource(R.drawable.ic_delete_forever_filled)
|
||||
Reactions -> painterResource(R.drawable.ic_add_reaction_filled)
|
||||
Voice -> painterResource(R.drawable.ic_keyboard_voice_filled)
|
||||
Files -> painterResource(R.drawable.ic_draft_filled)
|
||||
}
|
||||
|
||||
fun enableDescription(enabled: GroupFeatureEnabled, canEdit: Boolean): String =
|
||||
@@ -2967,6 +2998,10 @@ enum class GroupFeature: Feature {
|
||||
GroupFeatureEnabled.ON -> generalGetString(R.string.allow_to_send_voice)
|
||||
GroupFeatureEnabled.OFF -> generalGetString(R.string.prohibit_sending_voice)
|
||||
}
|
||||
Files -> when(enabled) {
|
||||
GroupFeatureEnabled.ON -> generalGetString(R.string.allow_to_send_files)
|
||||
GroupFeatureEnabled.OFF -> generalGetString(R.string.prohibit_sending_files)
|
||||
}
|
||||
}
|
||||
} else {
|
||||
when(this) {
|
||||
@@ -2990,6 +3025,10 @@ enum class GroupFeature: Feature {
|
||||
GroupFeatureEnabled.ON -> generalGetString(R.string.group_members_can_send_voice)
|
||||
GroupFeatureEnabled.OFF -> generalGetString(R.string.voice_messages_are_prohibited)
|
||||
}
|
||||
Files -> when(enabled) {
|
||||
GroupFeatureEnabled.ON -> generalGetString(R.string.group_members_can_send_files)
|
||||
GroupFeatureEnabled.OFF -> generalGetString(R.string.files_are_prohibited_in_group)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -3102,7 +3141,8 @@ data class FullGroupPreferences(
|
||||
val directMessages: GroupPreference,
|
||||
val fullDelete: GroupPreference,
|
||||
val reactions: GroupPreference,
|
||||
val voice: GroupPreference
|
||||
val voice: GroupPreference,
|
||||
val files: GroupPreference,
|
||||
) {
|
||||
fun toGroupPreferences(): GroupPreferences =
|
||||
GroupPreferences(
|
||||
@@ -3110,7 +3150,8 @@ data class FullGroupPreferences(
|
||||
directMessages = directMessages,
|
||||
fullDelete = fullDelete,
|
||||
reactions = reactions,
|
||||
voice = voice
|
||||
voice = voice,
|
||||
files = files,
|
||||
)
|
||||
|
||||
companion object {
|
||||
@@ -3119,7 +3160,8 @@ data class FullGroupPreferences(
|
||||
directMessages = GroupPreference(GroupFeatureEnabled.OFF),
|
||||
fullDelete = GroupPreference(GroupFeatureEnabled.OFF),
|
||||
reactions = GroupPreference(GroupFeatureEnabled.ON),
|
||||
voice = GroupPreference(GroupFeatureEnabled.ON)
|
||||
voice = GroupPreference(GroupFeatureEnabled.ON),
|
||||
files = GroupPreference(GroupFeatureEnabled.ON),
|
||||
)
|
||||
}
|
||||
}
|
||||
@@ -3130,7 +3172,8 @@ data class GroupPreferences(
|
||||
val directMessages: GroupPreference?,
|
||||
val fullDelete: GroupPreference?,
|
||||
val reactions: GroupPreference?,
|
||||
val voice: GroupPreference?
|
||||
val voice: GroupPreference?,
|
||||
val files: GroupPreference?,
|
||||
) {
|
||||
companion object {
|
||||
val sampleData = GroupPreferences(
|
||||
@@ -3138,7 +3181,8 @@ data class GroupPreferences(
|
||||
directMessages = GroupPreference(GroupFeatureEnabled.OFF),
|
||||
fullDelete = GroupPreference(GroupFeatureEnabled.OFF),
|
||||
reactions = GroupPreference(GroupFeatureEnabled.ON),
|
||||
voice = GroupPreference(GroupFeatureEnabled.ON)
|
||||
voice = GroupPreference(GroupFeatureEnabled.ON),
|
||||
files = GroupPreference(GroupFeatureEnabled.ON),
|
||||
)
|
||||
}
|
||||
}
|
||||
@@ -3273,7 +3317,11 @@ sealed class CR {
|
||||
@Serializable @SerialName("chatItemTTL") class ChatItemTTL(val user: User, val chatItemTTL: Long? = null): CR()
|
||||
@Serializable @SerialName("networkConfig") class NetworkConfig(val networkConfig: NetCfg): CR()
|
||||
@Serializable @SerialName("contactInfo") class ContactInfo(val user: User, val contact: Contact, val connectionStats: ConnectionStats, val customUserProfile: Profile? = null): CR()
|
||||
@Serializable @SerialName("groupMemberInfo") class GroupMemberInfo(val user: User, val groupInfo: GroupInfo, val member: GroupMember, val connectionStats_: ConnectionStats?): CR()
|
||||
@Serializable @SerialName("groupMemberInfo") class GroupMemberInfo(val user: User, val groupInfo: GroupInfo, val member: GroupMember, val connectionStats_: ConnectionStats? = null): CR()
|
||||
@Serializable @SerialName("contactSwitchStarted") class ContactSwitchStarted(val user: User, val contact: Contact, val connectionStats: ConnectionStats): CR()
|
||||
@Serializable @SerialName("groupMemberSwitchStarted") class GroupMemberSwitchStarted(val user: User, val groupInfo: GroupInfo, val member: GroupMember, val connectionStats: ConnectionStats): CR()
|
||||
@Serializable @SerialName("contactSwitchAborted") class ContactSwitchAborted(val user: User, val contact: Contact, val connectionStats: ConnectionStats): CR()
|
||||
@Serializable @SerialName("groupMemberSwitchAborted") class GroupMemberSwitchAborted(val user: User, val groupInfo: GroupInfo, val member: GroupMember, val connectionStats: ConnectionStats): CR()
|
||||
@Serializable @SerialName("contactCode") class ContactCode(val user: User, val contact: Contact, val connectionCode: String): CR()
|
||||
@Serializable @SerialName("groupMemberCode") class GroupMemberCode(val user: User, val groupInfo: GroupInfo, val member: GroupMember, val connectionCode: String): CR()
|
||||
@Serializable @SerialName("connectionVerified") class ConnectionVerified(val user: User, val verified: Boolean, val expectedCode: String): CR()
|
||||
@@ -3333,7 +3381,7 @@ sealed class CR {
|
||||
@Serializable @SerialName("groupInvitation") class GroupInvitation(val user: User, val groupInfo: GroupInfo): CR() // unused
|
||||
@Serializable @SerialName("userJoinedGroup") class UserJoinedGroup(val user: User, val groupInfo: GroupInfo): CR()
|
||||
@Serializable @SerialName("joinedGroupMember") class JoinedGroupMember(val user: User, val groupInfo: GroupInfo, val member: GroupMember): CR()
|
||||
@Serializable @SerialName("connectedToGroupMember") class ConnectedToGroupMember(val user: User, val groupInfo: GroupInfo, val member: GroupMember): CR()
|
||||
@Serializable @SerialName("connectedToGroupMember") class ConnectedToGroupMember(val user: User, val groupInfo: GroupInfo, val member: GroupMember, val memberContact: Contact? = null): CR()
|
||||
@Serializable @SerialName("groupRemoved") class GroupRemoved(val user: User, val groupInfo: GroupInfo): CR() // unused
|
||||
@Serializable @SerialName("groupUpdated") class GroupUpdated(val user: User, val toGroup: GroupInfo): CR()
|
||||
@Serializable @SerialName("groupLinkCreated") class GroupLinkCreated(val user: User, val groupInfo: GroupInfo, val connReqContact: String, val memberRole: GroupMemberRole): CR()
|
||||
@@ -3369,6 +3417,7 @@ sealed class CR {
|
||||
@Serializable @SerialName("cmdOk") class CmdOk(val user: User?): CR()
|
||||
@Serializable @SerialName("chatCmdError") class ChatCmdError(val user_: User?, val chatError: ChatError): CR()
|
||||
@Serializable @SerialName("chatError") class ChatRespError(val user_: User?, val chatError: ChatError): CR()
|
||||
@Serializable @SerialName("archiveImported") class ArchiveImported(val archiveErrors: List<ArchiveError>): CR()
|
||||
@Serializable class Response(val type: String, val json: String): CR()
|
||||
@Serializable class Invalid(val str: String): CR()
|
||||
|
||||
@@ -3387,6 +3436,10 @@ sealed class CR {
|
||||
is NetworkConfig -> "networkConfig"
|
||||
is ContactInfo -> "contactInfo"
|
||||
is GroupMemberInfo -> "groupMemberInfo"
|
||||
is ContactSwitchStarted -> "contactSwitchStarted"
|
||||
is GroupMemberSwitchStarted -> "groupMemberSwitchStarted"
|
||||
is ContactSwitchAborted -> "contactSwitchAborted"
|
||||
is GroupMemberSwitchAborted -> "groupMemberSwitchAborted"
|
||||
is ContactCode -> "contactCode"
|
||||
is GroupMemberCode -> "groupMemberCode"
|
||||
is ConnectionVerified -> "connectionVerified"
|
||||
@@ -3478,6 +3531,7 @@ sealed class CR {
|
||||
is CmdOk -> "cmdOk"
|
||||
is ChatCmdError -> "chatCmdError"
|
||||
is ChatRespError -> "chatError"
|
||||
is ArchiveImported -> "archiveImported"
|
||||
is Response -> "* $type"
|
||||
is Invalid -> "* invalid json"
|
||||
}
|
||||
@@ -3497,6 +3551,10 @@ sealed class CR {
|
||||
is NetworkConfig -> json.encodeToString(networkConfig)
|
||||
is ContactInfo -> withUser(user, "contact: ${json.encodeToString(contact)}\nconnectionStats: ${json.encodeToString(connectionStats)}")
|
||||
is GroupMemberInfo -> withUser(user, "group: ${json.encodeToString(groupInfo)}\nmember: ${json.encodeToString(member)}\nconnectionStats: ${json.encodeToString(connectionStats_)}")
|
||||
is ContactSwitchStarted -> withUser(user, "contact: ${json.encodeToString(contact)}\nconnectionStats: ${json.encodeToString(connectionStats)}")
|
||||
is GroupMemberSwitchStarted -> withUser(user, "group: ${json.encodeToString(groupInfo)}\nmember: ${json.encodeToString(member)}\nconnectionStats: ${json.encodeToString(connectionStats)}")
|
||||
is ContactSwitchAborted -> withUser(user, "contact: ${json.encodeToString(contact)}\nconnectionStats: ${json.encodeToString(connectionStats)}")
|
||||
is GroupMemberSwitchAborted -> withUser(user, "group: ${json.encodeToString(groupInfo)}\nmember: ${json.encodeToString(member)}\nconnectionStats: ${json.encodeToString(connectionStats)}")
|
||||
is ContactCode -> withUser(user, "contact: ${json.encodeToString(contact)}\nconnectionCode: $connectionCode")
|
||||
is GroupMemberCode -> withUser(user, "groupInfo: ${json.encodeToString(groupInfo)}\nmember: ${json.encodeToString(member)}\nconnectionCode: $connectionCode")
|
||||
is ConnectionVerified -> withUser(user, "verified: $verified\nconnectionCode: $expectedCode")
|
||||
@@ -3556,7 +3614,7 @@ sealed class CR {
|
||||
is GroupInvitation -> withUser(user, json.encodeToString(groupInfo))
|
||||
is UserJoinedGroup -> withUser(user, json.encodeToString(groupInfo))
|
||||
is JoinedGroupMember -> withUser(user, "groupInfo: $groupInfo\nmember: $member")
|
||||
is ConnectedToGroupMember -> withUser(user, "groupInfo: $groupInfo\nmember: $member")
|
||||
is ConnectedToGroupMember -> withUser(user, "groupInfo: $groupInfo\nmember: $member\nmemberContact: $memberContact")
|
||||
is GroupRemoved -> withUser(user, json.encodeToString(groupInfo))
|
||||
is GroupUpdated -> withUser(user, json.encodeToString(toGroup))
|
||||
is GroupLinkCreated -> withUser(user, "groupInfo: $groupInfo\nconnReqContact: $connReqContact\nmemberRole: $memberRole")
|
||||
@@ -3590,6 +3648,7 @@ sealed class CR {
|
||||
is CmdOk -> withUser(user, noDetails())
|
||||
is ChatCmdError -> withUser(user_, chatError.string)
|
||||
is ChatRespError -> withUser(user_, chatError.string)
|
||||
is ArchiveImported -> "${archiveErrors.map { it.string } }"
|
||||
is Response -> json
|
||||
is Invalid -> str
|
||||
}
|
||||
@@ -3627,7 +3686,34 @@ abstract class TerminalItem {
|
||||
}
|
||||
|
||||
@Serializable
|
||||
class ConnectionStats(val rcvServers: List<String>?, val sndServers: List<String>?)
|
||||
class ConnectionStats(val rcvQueuesInfo: List<RcvQueueInfo>, val sndQueuesInfo: List<SndQueueInfo>)
|
||||
|
||||
@Serializable
|
||||
class RcvQueueInfo(
|
||||
val rcvServer: String,
|
||||
val rcvSwitchStatus: RcvSwitchStatus?,
|
||||
var canAbortSwitch: Boolean
|
||||
)
|
||||
|
||||
@Serializable
|
||||
enum class RcvSwitchStatus {
|
||||
@SerialName("switch_started") SwitchStarted,
|
||||
@SerialName("sending_qadd") SendingQADD,
|
||||
@SerialName("sending_quse") SendingQUSE,
|
||||
@SerialName("received_message") ReceivedMessage
|
||||
}
|
||||
|
||||
@Serializable
|
||||
class SndQueueInfo(
|
||||
val sndServer: String,
|
||||
val sndSwitchStatus: SndSwitchStatus?
|
||||
)
|
||||
|
||||
@Serializable
|
||||
enum class SndSwitchStatus {
|
||||
@SerialName("sending_qkey") SendingQKEY,
|
||||
@SerialName("sending_qtest") SendingQTEST
|
||||
}
|
||||
|
||||
@Serializable
|
||||
class UserContactLinkRec(val connReqContact: String, val autoAccept: AutoAccept? = null) {
|
||||
@@ -3678,6 +3764,7 @@ sealed class ChatErrorType {
|
||||
is InvalidConnReq -> "invalidConnReq"
|
||||
is FileAlreadyReceiving -> "fileAlreadyReceiving"
|
||||
is СommandError -> "commandError $message"
|
||||
is CEException -> "exception $message"
|
||||
}
|
||||
@Serializable @SerialName("noActiveUser") class NoActiveUser: ChatErrorType()
|
||||
@Serializable @SerialName("differentActiveUser") class DifferentActiveUser: ChatErrorType()
|
||||
@@ -3685,6 +3772,7 @@ sealed class ChatErrorType {
|
||||
@Serializable @SerialName("invalidConnReq") class InvalidConnReq: ChatErrorType()
|
||||
@Serializable @SerialName("fileAlreadyReceiving") class FileAlreadyReceiving: ChatErrorType()
|
||||
@Serializable @SerialName("commandError") class СommandError(val message: String): ChatErrorType()
|
||||
@Serializable @SerialName("exception") class CEException(val message: String): ChatErrorType()
|
||||
}
|
||||
|
||||
@Serializable
|
||||
@@ -3896,3 +3984,13 @@ sealed class XFTPErrorType {
|
||||
@Serializable @SerialName("FILE_IO") object FILE_IO: XFTPErrorType()
|
||||
@Serializable @SerialName("INTERNAL") object INTERNAL: XFTPErrorType()
|
||||
}
|
||||
|
||||
@Serializable
|
||||
sealed class ArchiveError {
|
||||
val string: String get() = when (this) {
|
||||
is ArchiveErrorImport -> "import ${chatError.string}"
|
||||
is ArchiveErrorImportFile -> "importFile $file ${chatError.string}"
|
||||
}
|
||||
@Serializable @SerialName("import") class ArchiveErrorImport(val chatError: ChatError): ArchiveError()
|
||||
@Serializable @SerialName("importFile") class ArchiveErrorImportFile(val file: String, val chatError: ChatError): ArchiveError()
|
||||
}
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user