spaced4ndy
2c8db2b293
core: make the badge subscription tests fail on the defects they name ( #7798 )
2026-10-22 16:51:24 +00:00
spacedandy-agents-simplex
04e316bec5
fixup! docs: tell the badge subscriptions story with tier changes and restore
2026-10-22 20:39:05 +04:00
spacedandy-agents-simplex
0ac50cd4c3
fixup! docs: describe badge tier changes and restore as the service handles them
2026-10-22 20:39:05 +04:00
spacedandy-agents-simplex
a8c1b0e228
fixup! docs: tell the badge subscriptions story with tier changes and restore
2026-10-22 20:39:05 +04:00
spacedandy-agents-simplex
e9f859759d
fixup! docs: describe badge tier changes and restore as the service handles them
2026-10-22 20:39:05 +04:00
spacedandy-agents-simplex
5e2ac775ff
docs: tell the badge subscriptions story with tier changes and restore
...
The summary now covers the whole lifecycle: buying, renewing, changing
tier, moving to another device or profile, and ending. The badge retires
as soon as the store says the subscription ended, a lapsed iOS subscriber
can resume the retired badge, an App Store raise is granted at once and
a lower tier at the renewal, and a Play plan change is a new purchase.
The known limits and the before-sale list follow the code.
The seven diagrams are updated, with stale file and line references
dropped, and two are added: a tier change and a restore. The page now
points at the diagram files instead of carrying copies of them.
2026-10-22 20:39:05 +04:00
spacedandy-agents-simplex
a43a44f2ee
docs: describe badge tier changes and restore as the service handles them
...
The RPC document splits a store tier change by store and direction: the
app never starts one, an App Store raise seen within a day of its charge
is sent as upgradeBadgeSubscription, every other change waits for the
renewal check, and a Play plan change is a new token, a new purchase.
transferBadge and its limits are checked against the handlers, and the
upgrades that are not built are marked so.
The overview admits what Restore discloses: the service links the two
purchase keys, a store receipt moves its subscription to whoever presents
it within the move limit, and a new badge or tier is shown as soon as it
is issued. The Android gap names what remains of Restore.
2026-10-22 20:39:05 +04:00
spaced4ndy
7a93b63385
badge-service: let a restore ask the store without waiting for the purchase's own check
2026-10-22 20:00:25 +04:00
spacedandy-agents-simplex
ca4c70c93e
core: test that an App Store change to a lower tier waits for the renewal
...
A Supporter charge handed over while Legend is shown is answered from the record and sends nothing, and the renewal check grants Supporter, shown once the Legend credential expires; a record an older build held for a lower tier settles with no request. Both fail if every change of tier is sent at once again.
Run: 016-tier-change-direction
2026-10-22 08:11:12 +00:00
spacedandy-agents-simplex
a0ef455aea
core: apply an App Store tier change at once only when it raises the tier
...
Apple keeps charging the old plan to the end of the period, so applying a downgrade at once took away a badge the subscriber had already paid for. A charge of another tier is now held and sent at once only from supporter to legend; a lower tier, or one that is not ranked (investor, unknown), is answered from the record and the renewal check grants it, as badges-rpc.md says. A record already held for such a change settles silently.
Run: 016-tier-change-direction
2026-10-22 07:24:53 +00:00
spacedandy-agents-simplex
0c901f9917
review: round 3 fixes
...
- R3-1: a tier change whose answer says the subscription ended is not credited, as a resume is not, so the credit's clearing of a stored ended never drops the one this answer carries.
- R3-2: the changeTier comment in two lines.
Run: 015-badge-fixes, review round 3
2026-10-21 21:37:26 +00:00
spacedandy-agents-simplex
cb1134f0bb
review: round 2 fixes
...
- R2-1: a granted tier change clears an ended state the device reported before it. A renewing report never replaces ended, and a charge of the new tier granted proves the subscription has not ended, so without this the worker retired the new tier's badge at its paid-through while the subscription renewed.
- R1-B3: test a tier change whose credential does not verify: the failure stays on the receipt record, not the purchase, and Supporter stays shown.
- R2-3: the refused tier change's test buys Supporter through an invoice, so it shows the refusal announces nothing.
- R2-2: the changeTier comment says what follows each way the record settles.
Run: 015-badge-fixes, review round 2
2026-10-21 21:14:49 +00:00
spacedandy-agents-simplex
5096b3b698
review: round 1 fixes
...
The App Store tier-change hold, reviewed for the first time:
- R1-B2: a tier change's credit now shows its purchase again (shown_badge_id) in the same transaction, as a resume's does, so a retire that ran while the change was with the service cannot leave a paid purchase unshown and never renewed.
- R1-B5: a tier change of a shown purchase is held whatever other receipt is held, as the worker serves it while the badge is shown; only a resume waits for other held receipts.
- R1-B3: test a tier change the store does not vouch for: refused in silence, the badge kept, and answered from the record after.
- R1-B8: the changeTier comment names when the record settles.
Run: 015-badge-fixes, review round 1
2026-10-21 20:33:29 +00:00
spacedandy-agents-simplex
4a9f851237
core: test that the newest issued badge credential is taken by its ledger row
...
After a tier change the newer issuance can end before the older one, so ordering issuances by period end would answer the superseded credential to the worker and to the resume and tier-change paths. Pin the row order: the test fails if the query goes back to period_end order.
Run: 015-badge-fixes, slice 3
2026-10-21 19:34:39 +00:00
spacedandy-agents-simplex
80ae767d38
core: test that every Play charge of a month-end subscription funds its month
...
Play reports only a period's end, and the service dates the charge a plan length before it, so month-end clipping could leave a charge funding less than its month. Walk a monthly and an annual Play plan anchored on 31 January through their renewals at the device's request moments, through the deployed Play verifier: each charge funds exactly its months, paid-through stays at most the grace behind Play's period end (three days at most in this walk), and no charge is left without a grant.
Run: 015-badge-fixes, slice 2
2026-10-21 19:13:44 +00:00
spacedandy-agents-simplex
3d3b410d69
core: tell the apps when a badge request banks a month without issuing it
...
A pass announced the badge state only when the balance start moved, so a charge granted onto running coverage, or a debit the service wrote, changed months left and paid-through without an event, and the apps kept showing the old renewal date until the screen was reopened. The pass now announces whenever the ledger's last entry is not the one it started from, which a moved balance start implies.
Run: 015-badge-fixes, slice 1
2026-10-21 18:53:41 +00:00
spacedandy-agents-simplex
03cc98f4db
Merge branch 'master' into f/badge-subscriptions
...
# Conflicts:
# apps/ios/SimpleX.xcodeproj/project.pbxproj
# simplex-chat.cabal
# src/Simplex/Chat/Store/SQLite/Migrations.hs
2026-10-21 18:24:09 +00:00
spaced4ndy
1bbbad99cb
core, badge-service, ios, android: change badge tier in the store, and restore a subscription on another device ( #7795 )
2026-10-21 16:53:15 +00:00
Evgeny and Evgeny @ SimpleX Chat
3126d9b544
ios: set default proxy mode ( #7790 )
...
Co-authored-by: Evgeny @ SimpleX Chat <259188159+evgeny-simplex@users.noreply.github.com >
2026-10-21 14:35:41 +01:00
spaced4ndy
f8f64a3047
core, ios, android: explain a failed badge renewal and stop retrying a subscription the store forgot; tests ( #7788 )
2026-10-21 07:44:20 +00:00
spaced4ndy
9a1d3e4969
ci: test the Android app in an emulator on GitHub's runners ( #7786 )
2026-10-20 16:55:54 +00:00
spaced4ndy
5834179be6
ci: start app tests only by hand ( #7777 )
2026-10-20 16:48:47 +00:00
spaced4ndy
6cef6b9e60
badge-service: name the purchase each request came from in the log
2026-10-20 20:32:04 +04:00
spaced4ndy
696abf13ab
badge-service: name the purchase each request came from in the log
2026-10-20 20:19:01 +04:00
spaced4ndy
b6376b90c7
fix compilation
2026-10-20 19:26:06 +04:00
spaced4ndy
a68eb91da1
badge-service: log each request's command and each store check's outcome
2026-10-20 19:16:36 +04:00
spaced4ndy
ccf136ca13
core: let a dev build ask the badge service on an interval
2026-10-20 19:03:53 +04:00
spaced4ndy
3c61a3ced4
badge-service: credit test purchases and check the store during coverage in a dev deployment
2026-10-20 18:50:52 +04:00
spaced4ndy
5fd0b5e7fd
docs: bound a badge move by the previous credential's expiry
2026-10-20 17:15:48 +04:00
SimpleX Chat
fcef2ad008
7.1-beta.7: android 387, desktop 168, ios 363
v7.1.0-beta.7-armv7a
v7.1.0-beta.7
2026-10-20 12:34:51 +00:00
spacedandy-agents-simplex
038f50ac30
core, ios, android, desktop: let a lapsed iOS subscriber subscribe again to the badge the profile retired
...
The iOS app refused any subscription to an Apple ID that ever subscribed, so a lapsed subscriber could never subscribe again in the app. Core now tells the apps each subscription's store reference (BadgeSubscription.transactionRef, optional in JSON), and the iOS gate opens a subscription card only when every earlier subscription of the Apple ID is the active profile's newest purchase, retired, of the card's badge: the one charge core resumes. Kotlin gets the model field only, as Play gives a resubscription a new token and needs no gate.
Run: 011-subscription-resume, slice S2b
2026-10-20 16:33:12 +04:00
spacedandy-agents-simplex
1d72c4c2e7
fixup! core: resume a retired Apple subscription when its store charges it again
...
Review round 1 fixes:
- R1-1: a resumable charge waiting behind another held receipt of the owner is answered held and left unfinished, rather than answered from the record and finished uncredited.
- R1-3: a resume shows the purchase again only with a credential that has not expired.
- R1-2, R1-8: tests of the resumable-charge rule and the hold's edge, of a held charge whose paid period ends before it is sent, and that a resumed profile shows the newest credential. The resume test is split in two, one environment each.
- R2-V1: a test comment that the reordered steps made false.
Run: 011-subscription-resume, review rounds 1 and 2
2026-10-20 16:33:12 +04:00
spacedandy-agents-simplex
6a00c55c7a
core: resume a retired Apple subscription when its store charges it again
...
A same-install resubscription keeps Apple's original transaction id, so its hand-over found the old credited record and was answered from it with the old credential: the subscriber paid and got nothing. A credited record is now held again when a later charge of its subscription is handed over, the charge is not revoked, its paid period runs and it is dated less than a day ahead of this device's clock, and the record's purchase is its owner's newest, a subscription and not shown, with no other receipt held. The receipt worker then sends the purchase's issueBadge, and the service grants the charge as a renewal. A covered answer shows the purchase again with the newest credential and clears an ended state. A charge the service answers without crediting is deferred an hour and refused a day after its purchase date, so it holds the profile for about a day. A refused resume is remembered on the record (every credit, re-hold and resume clears credit_error), so the app's sweep does not hold the same charge again after its day.
Run: 011-subscription-resume, slice S2a
2026-10-20 16:33:12 +04:00
spacedandy-agents-simplex
ed3e236fe9
core: retire on a device's ended report only once the paid period is over
...
StoreKit can report a subscription expired during Apple's billing retry, and Apple may then recover the charge, so retiring at once on that report left a paying user without the badge. The service's answered ended still retires at once, also while the ledger covers. A stored ended, which is how the device's report arrives, retires once paidThrough has passed.
Run: 011-subscription-resume, slice S1c
2026-10-20 16:33:09 +04:00
spacedandy-agents-simplex
5e642d49a3
core: split the badge request's lock from its body
...
The receipt worker's attempt already holds the owner's badge lock, which is not reentrant, so it cannot call requestBadgeIssue. The body becomes sendBadgeIssue, and both answer a service error as Left (code, retryAfter) instead of Nothing, so that caller can classify it as it does today. No behaviour change.
Run: 011-subscription-resume, slice S2-0
2026-10-20 15:38:12 +04:00
spacedandy-agents-simplex
0ea43ea59e
fixup! core: send a badge request at once from a build for the dev badge service
2026-10-20 15:37:53 +04:00
spacedandy-agents-simplex
c0619385e9
fixup! badge-service: let a dev deployment ask its mock store while coverage runs
2026-10-20 15:37:53 +04:00
spacedandy-agents-simplex
e570748206
fixup! badge-service: let a dev deployment ask its mock store while coverage runs
2026-10-20 15:37:53 +04:00
spacedandy-agents-simplex
1193ae953f
core: send a badge request at once from a build for the dev badge service
...
/_badge request <userId> sends the profile's badge request now, while
its badge is shown, and runs the badge pass on the answer, so a renewal
or an ended subscription can be watched by hand against the dev
service.
It is allowed only when ChatConfig's badgeDevRequests is set, which no
shipped build does and nothing sets at runtime: the dev-service branch
sets it beside its own badge service overrides. A request off the shared
expiry would tell requests apart, so every other build refuses it, and
it is refused from a paired remote controller.
Run: 011-subscription-tools, slice S3b
2026-10-20 15:37:53 +04:00
spacedandy-agents-simplex
e116987e5b
badge-service: let a dev deployment ask its mock store while coverage runs
...
[dev] check_store_during_coverage = on makes every issueBadge for a
subscription ask the dev mock, during paid coverage too, and bank the
month of a charge it can grant, issued once coverage reaches it. So a
renewal can be watched by hand without waiting a month, and a mock that
forgot the plan after a restart answers ended at once.
Off by default, and refused unless accept_unverified_store_receipts is
on, which is itself refused beside a real store: a real store has not
started its next charge while coverage runs, and asking spends the
quota every subscriber shares.
Run: 011-subscription-tools, slice S3a
2026-10-20 15:37:53 +04:00
spaced4ndy
ff22df9cdc
update plan
2026-10-20 15:27:18 +04:00
spaced4ndy
53683c415d
shorter plan
2026-10-20 14:49:13 +04:00
spaced4ndy
77479516d2
transfer plan
2026-10-20 14:35:26 +04:00
+104
8af38dc33e
ui: translations ( #7782 )
...
* Translated using Weblate (German)
Currently translated at 100.0% (2513 of 2513 strings)
Translation: SimpleX Chat/SimpleX Chat iOS
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/de/
* Translated using Weblate (German)
Currently translated at 100.0% (2513 of 2513 strings)
Translation: SimpleX Chat/SimpleX Chat iOS
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/de/
* Translated using Weblate (German)
Currently translated at 100.0% (2513 of 2513 strings)
Translation: SimpleX Chat/SimpleX Chat iOS
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/de/
* Translated using Weblate (German)
Currently translated at 100.0% (2513 of 2513 strings)
Translation: SimpleX Chat/SimpleX Chat iOS
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/de/
* Translated using Weblate (German)
Currently translated at 100.0% (2513 of 2513 strings)
Translation: SimpleX Chat/SimpleX Chat iOS
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/de/
* Translated using Weblate (German)
Currently translated at 100.0% (2513 of 2513 strings)
Translation: SimpleX Chat/SimpleX Chat iOS
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/de/
* Translated using Weblate (German)
Currently translated at 100.0% (2513 of 2513 strings)
Translation: SimpleX Chat/SimpleX Chat iOS
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/de/
* Translated using Weblate (German)
Currently translated at 100.0% (2513 of 2513 strings)
Translation: SimpleX Chat/SimpleX Chat iOS
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/de/
* Translated using Weblate (German)
Currently translated at 100.0% (2513 of 2513 strings)
Translation: SimpleX Chat/SimpleX Chat iOS
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/de/
* Translated using Weblate (German)
Currently translated at 100.0% (2513 of 2513 strings)
Translation: SimpleX Chat/SimpleX Chat iOS
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/de/
* Translated using Weblate (German)
Currently translated at 100.0% (2513 of 2513 strings)
Translation: SimpleX Chat/SimpleX Chat iOS
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/de/
* Translated using Weblate (Russian)
Currently translated at 99.5% (2501 of 2513 strings)
Translation: SimpleX Chat/SimpleX Chat iOS
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/ru/
* Translated using Weblate (Russian)
Currently translated at 99.5% (2501 of 2513 strings)
Translation: SimpleX Chat/SimpleX Chat iOS
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/ru/
* Translated using Weblate (Russian)
Currently translated at 99.5% (2501 of 2513 strings)
Translation: SimpleX Chat/SimpleX Chat iOS
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/ru/
* Translated using Weblate (Russian)
Currently translated at 99.5% (2501 of 2513 strings)
Translation: SimpleX Chat/SimpleX Chat iOS
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/ru/
* Translated using Weblate (Russian)
Currently translated at 99.5% (2501 of 2513 strings)
Translation: SimpleX Chat/SimpleX Chat iOS
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/ru/
* Translated using Weblate (Russian)
Currently translated at 99.5% (2501 of 2513 strings)
Translation: SimpleX Chat/SimpleX Chat iOS
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/ru/
* Translated using Weblate (Russian)
Currently translated at 99.5% (2501 of 2513 strings)
Translation: SimpleX Chat/SimpleX Chat iOS
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/ru/
* Translated using Weblate (Russian)
Currently translated at 99.5% (2501 of 2513 strings)
Translation: SimpleX Chat/SimpleX Chat iOS
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/ru/
* Translated using Weblate (Russian)
Currently translated at 99.5% (2501 of 2513 strings)
Translation: SimpleX Chat/SimpleX Chat iOS
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/ru/
* Translated using Weblate (Russian)
Currently translated at 99.5% (2501 of 2513 strings)
Translation: SimpleX Chat/SimpleX Chat iOS
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/ru/
* Translated using Weblate (Russian)
Currently translated at 99.5% (2501 of 2513 strings)
Translation: SimpleX Chat/SimpleX Chat iOS
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/ru/
* Translated using Weblate (Russian)
Currently translated at 99.5% (2501 of 2513 strings)
Translation: SimpleX Chat/SimpleX Chat iOS
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/ru/
* Translated using Weblate (Russian)
Currently translated at 99.5% (2501 of 2513 strings)
Translation: SimpleX Chat/SimpleX Chat iOS
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/ru/
* Translated using Weblate (Russian)
Currently translated at 99.5% (2501 of 2513 strings)
Translation: SimpleX Chat/SimpleX Chat iOS
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/ru/
* Translated using Weblate (French)
Currently translated at 100.0% (2513 of 2513 strings)
Translation: SimpleX Chat/SimpleX Chat iOS
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/fr/
* Translated using Weblate (French)
Currently translated at 100.0% (2513 of 2513 strings)
Translation: SimpleX Chat/SimpleX Chat iOS
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/fr/
* Translated using Weblate (French)
Currently translated at 100.0% (2513 of 2513 strings)
Translation: SimpleX Chat/SimpleX Chat iOS
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/fr/
* Translated using Weblate (French)
Currently translated at 100.0% (2513 of 2513 strings)
Translation: SimpleX Chat/SimpleX Chat iOS
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/fr/
* Translated using Weblate (French)
Currently translated at 100.0% (2513 of 2513 strings)
Translation: SimpleX Chat/SimpleX Chat iOS
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/fr/
* Translated using Weblate (French)
Currently translated at 100.0% (2513 of 2513 strings)
Translation: SimpleX Chat/SimpleX Chat iOS
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/fr/
* Translated using Weblate (French)
Currently translated at 100.0% (2513 of 2513 strings)
Translation: SimpleX Chat/SimpleX Chat iOS
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/fr/
* Translated using Weblate (French)
Currently translated at 100.0% (2513 of 2513 strings)
Translation: SimpleX Chat/SimpleX Chat iOS
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/fr/
* Translated using Weblate (French)
Currently translated at 100.0% (2513 of 2513 strings)
Translation: SimpleX Chat/SimpleX Chat iOS
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/fr/
* Translated using Weblate (French)
Currently translated at 100.0% (2513 of 2513 strings)
Translation: SimpleX Chat/SimpleX Chat iOS
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/fr/
* Translated using Weblate (French)
Currently translated at 100.0% (2513 of 2513 strings)
Translation: SimpleX Chat/SimpleX Chat iOS
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/fr/
* Translated using Weblate (Italian)
Currently translated at 100.0% (2513 of 2513 strings)
Translation: SimpleX Chat/SimpleX Chat iOS
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/it/
* Translated using Weblate (Italian)
Currently translated at 100.0% (2513 of 2513 strings)
Translation: SimpleX Chat/SimpleX Chat iOS
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/it/
* Translated using Weblate (Italian)
Currently translated at 100.0% (2513 of 2513 strings)
Translation: SimpleX Chat/SimpleX Chat iOS
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/it/
* Translated using Weblate (Italian)
Currently translated at 100.0% (2513 of 2513 strings)
Translation: SimpleX Chat/SimpleX Chat iOS
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/it/
* Translated using Weblate (Italian)
Currently translated at 100.0% (2513 of 2513 strings)
Translation: SimpleX Chat/SimpleX Chat iOS
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/it/
* Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 97.6% (2453 of 2513 strings)
Translation: SimpleX Chat/SimpleX Chat iOS
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/zh_Hans/
* Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 97.6% (2453 of 2513 strings)
Translation: SimpleX Chat/SimpleX Chat iOS
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/zh_Hans/
* Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 97.6% (2453 of 2513 strings)
Translation: SimpleX Chat/SimpleX Chat iOS
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/zh_Hans/
* Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 97.6% (2453 of 2513 strings)
Translation: SimpleX Chat/SimpleX Chat iOS
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/zh_Hans/
* Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 97.6% (2453 of 2513 strings)
Translation: SimpleX Chat/SimpleX Chat iOS
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/zh_Hans/
* Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 97.6% (2453 of 2513 strings)
Translation: SimpleX Chat/SimpleX Chat iOS
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/zh_Hans/
* Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 97.6% (2453 of 2513 strings)
Translation: SimpleX Chat/SimpleX Chat iOS
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/zh_Hans/
* Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 97.6% (2453 of 2513 strings)
Translation: SimpleX Chat/SimpleX Chat iOS
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/zh_Hans/
* Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 97.6% (2453 of 2513 strings)
Translation: SimpleX Chat/SimpleX Chat iOS
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/zh_Hans/
* Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 97.6% (2453 of 2513 strings)
Translation: SimpleX Chat/SimpleX Chat iOS
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/zh_Hans/
* Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 97.6% (2453 of 2513 strings)
Translation: SimpleX Chat/SimpleX Chat iOS
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/zh_Hans/
* Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 97.6% (2453 of 2513 strings)
Translation: SimpleX Chat/SimpleX Chat iOS
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/zh_Hans/
* Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 97.6% (2453 of 2513 strings)
Translation: SimpleX Chat/SimpleX Chat iOS
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/zh_Hans/
* Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 97.6% (2453 of 2513 strings)
Translation: SimpleX Chat/SimpleX Chat iOS
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/zh_Hans/
* Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 97.6% (2453 of 2513 strings)
Translation: SimpleX Chat/SimpleX Chat iOS
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/zh_Hans/
* Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 97.6% (2453 of 2513 strings)
Translation: SimpleX Chat/SimpleX Chat iOS
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/zh_Hans/
* Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 97.6% (2453 of 2513 strings)
Translation: SimpleX Chat/SimpleX Chat iOS
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/zh_Hans/
* Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 97.6% (2453 of 2513 strings)
Translation: SimpleX Chat/SimpleX Chat iOS
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/zh_Hans/
* Translated using Weblate (Chinese (Traditional Han script))
Currently translated at 96.4% (2424 of 2513 strings)
Translation: SimpleX Chat/SimpleX Chat iOS
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/zh_Hant/
* Translated using Weblate (Spanish)
Currently translated at 100.0% (2513 of 2513 strings)
Translation: SimpleX Chat/SimpleX Chat iOS
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/es/
* Translated using Weblate (Spanish)
Currently translated at 100.0% (2513 of 2513 strings)
Translation: SimpleX Chat/SimpleX Chat iOS
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/es/
* Translated using Weblate (Spanish)
Currently translated at 100.0% (2513 of 2513 strings)
Translation: SimpleX Chat/SimpleX Chat iOS
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/es/
* Translated using Weblate (Spanish)
Currently translated at 100.0% (2513 of 2513 strings)
Translation: SimpleX Chat/SimpleX Chat iOS
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/es/
* Translated using Weblate (Spanish)
Currently translated at 100.0% (2513 of 2513 strings)
Translation: SimpleX Chat/SimpleX Chat iOS
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/es/
* Translated using Weblate (Spanish)
Currently translated at 100.0% (2513 of 2513 strings)
Translation: SimpleX Chat/SimpleX Chat iOS
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/es/
* Translated using Weblate (Spanish)
Currently translated at 100.0% (2513 of 2513 strings)
Translation: SimpleX Chat/SimpleX Chat iOS
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/es/
* Translated using Weblate (Spanish)
Currently translated at 100.0% (2513 of 2513 strings)
Translation: SimpleX Chat/SimpleX Chat iOS
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/es/
* Translated using Weblate (Spanish)
Currently translated at 100.0% (2513 of 2513 strings)
Translation: SimpleX Chat/SimpleX Chat iOS
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/es/
* Translated using Weblate (Spanish)
Currently translated at 100.0% (2513 of 2513 strings)
Translation: SimpleX Chat/SimpleX Chat iOS
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/es/
* Translated using Weblate (Spanish)
Currently translated at 100.0% (2513 of 2513 strings)
Translation: SimpleX Chat/SimpleX Chat iOS
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/es/
* Translated using Weblate (Dutch)
Currently translated at 81.3% (2044 of 2513 strings)
Translation: SimpleX Chat/SimpleX Chat iOS
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/nl/
* Translated using Weblate (Dutch)
Currently translated at 81.3% (2044 of 2513 strings)
Translation: SimpleX Chat/SimpleX Chat iOS
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/nl/
* Translated using Weblate (Dutch)
Currently translated at 81.3% (2044 of 2513 strings)
Translation: SimpleX Chat/SimpleX Chat iOS
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/nl/
* Translated using Weblate (Dutch)
Currently translated at 81.3% (2044 of 2513 strings)
Translation: SimpleX Chat/SimpleX Chat iOS
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/nl/
* Translated using Weblate (Dutch)
Currently translated at 81.3% (2044 of 2513 strings)
Translation: SimpleX Chat/SimpleX Chat iOS
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/nl/
* Translated using Weblate (Japanese)
Currently translated at 48.7% (1224 of 2513 strings)
Translation: SimpleX Chat/SimpleX Chat iOS
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/ja/
* Translated using Weblate (Japanese)
Currently translated at 48.7% (1224 of 2513 strings)
Translation: SimpleX Chat/SimpleX Chat iOS
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/ja/
* Translated using Weblate (Japanese)
Currently translated at 48.7% (1224 of 2513 strings)
Translation: SimpleX Chat/SimpleX Chat iOS
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/ja/
* Translated using Weblate (Japanese)
Currently translated at 48.7% (1224 of 2513 strings)
Translation: SimpleX Chat/SimpleX Chat iOS
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/ja/
* Translated using Weblate (Japanese)
Currently translated at 48.7% (1224 of 2513 strings)
Translation: SimpleX Chat/SimpleX Chat iOS
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/ja/
* Translated using Weblate (Japanese)
Currently translated at 48.7% (1224 of 2513 strings)
Translation: SimpleX Chat/SimpleX Chat iOS
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/ja/
* Translated using Weblate (Japanese)
Currently translated at 48.7% (1224 of 2513 strings)
Translation: SimpleX Chat/SimpleX Chat iOS
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/ja/
* Translated using Weblate (Japanese)
Currently translated at 48.7% (1224 of 2513 strings)
Translation: SimpleX Chat/SimpleX Chat iOS
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/ja/
* Translated using Weblate (Japanese)
Currently translated at 48.7% (1224 of 2513 strings)
Translation: SimpleX Chat/SimpleX Chat iOS
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/ja/
* Translated using Weblate (Japanese)
Currently translated at 48.7% (1224 of 2513 strings)
Translation: SimpleX Chat/SimpleX Chat iOS
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/ja/
* Translated using Weblate (Japanese)
Currently translated at 48.7% (1224 of 2513 strings)
Translation: SimpleX Chat/SimpleX Chat iOS
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/ja/
* Translated using Weblate (Japanese)
Currently translated at 48.7% (1224 of 2513 strings)
Translation: SimpleX Chat/SimpleX Chat iOS
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/ja/
* Translated using Weblate (Japanese)
Currently translated at 48.7% (1224 of 2513 strings)
Translation: SimpleX Chat/SimpleX Chat iOS
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/ja/
* Translated using Weblate (Japanese)
Currently translated at 48.7% (1224 of 2513 strings)
Translation: SimpleX Chat/SimpleX Chat iOS
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/ja/
* Translated using Weblate (Japanese)
Currently translated at 48.7% (1224 of 2513 strings)
Translation: SimpleX Chat/SimpleX Chat iOS
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/ja/
* Translated using Weblate (Czech)
Currently translated at 50.2% (1264 of 2513 strings)
Translation: SimpleX Chat/SimpleX Chat iOS
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/cs/
* Translated using Weblate (Czech)
Currently translated at 50.2% (1264 of 2513 strings)
Translation: SimpleX Chat/SimpleX Chat iOS
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/cs/
* Translated using Weblate (Czech)
Currently translated at 50.2% (1264 of 2513 strings)
Translation: SimpleX Chat/SimpleX Chat iOS
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/cs/
* Translated using Weblate (Czech)
Currently translated at 50.2% (1264 of 2513 strings)
Translation: SimpleX Chat/SimpleX Chat iOS
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/cs/
* Translated using Weblate (Czech)
Currently translated at 50.2% (1264 of 2513 strings)
Translation: SimpleX Chat/SimpleX Chat iOS
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/cs/
* Translated using Weblate (Czech)
Currently translated at 50.2% (1264 of 2513 strings)
Translation: SimpleX Chat/SimpleX Chat iOS
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/cs/
* Translated using Weblate (Czech)
Currently translated at 50.2% (1264 of 2513 strings)
Translation: SimpleX Chat/SimpleX Chat iOS
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/cs/
* Translated using Weblate (Czech)
Currently translated at 50.2% (1264 of 2513 strings)
Translation: SimpleX Chat/SimpleX Chat iOS
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/cs/
* Translated using Weblate (Czech)
Currently translated at 50.2% (1264 of 2513 strings)
Translation: SimpleX Chat/SimpleX Chat iOS
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/cs/
* Translated using Weblate (Czech)
Currently translated at 50.2% (1264 of 2513 strings)
Translation: SimpleX Chat/SimpleX Chat iOS
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/cs/
* Translated using Weblate (Czech)
Currently translated at 50.2% (1264 of 2513 strings)
Translation: SimpleX Chat/SimpleX Chat iOS
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/cs/
* Translated using Weblate (Portuguese (Brazil))
Currently translated at 35.6% (896 of 2513 strings)
Translation: SimpleX Chat/SimpleX Chat iOS
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/pt_BR/
* Translated using Weblate (Croatian)
Currently translated at 1.8% (47 of 2513 strings)
Translation: SimpleX Chat/SimpleX Chat iOS
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/hr/
* Translated using Weblate (Arabic)
Currently translated at 29.2% (735 of 2513 strings)
Translation: SimpleX Chat/SimpleX Chat iOS
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/ar/
* Translated using Weblate (Ukrainian)
Currently translated at 85.6% (2152 of 2513 strings)
Translation: SimpleX Chat/SimpleX Chat iOS
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/uk/
* Translated using Weblate (Ukrainian)
Currently translated at 85.6% (2152 of 2513 strings)
Translation: SimpleX Chat/SimpleX Chat iOS
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/uk/
* Translated using Weblate (Ukrainian)
Currently translated at 85.6% (2152 of 2513 strings)
Translation: SimpleX Chat/SimpleX Chat iOS
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/uk/
* Translated using Weblate (Ukrainian)
Currently translated at 85.6% (2152 of 2513 strings)
Translation: SimpleX Chat/SimpleX Chat iOS
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/uk/
* Translated using Weblate (Ukrainian)
Currently translated at 85.6% (2152 of 2513 strings)
Translation: SimpleX Chat/SimpleX Chat iOS
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/uk/
* Translated using Weblate (Ukrainian)
Currently translated at 85.6% (2152 of 2513 strings)
Translation: SimpleX Chat/SimpleX Chat iOS
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/uk/
* Translated using Weblate (Ukrainian)
Currently translated at 85.6% (2152 of 2513 strings)
Translation: SimpleX Chat/SimpleX Chat iOS
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/uk/
* Translated using Weblate (Ukrainian)
Currently translated at 85.6% (2152 of 2513 strings)
Translation: SimpleX Chat/SimpleX Chat iOS
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/uk/
* Translated using Weblate (Ukrainian)
Currently translated at 85.6% (2152 of 2513 strings)
Translation: SimpleX Chat/SimpleX Chat iOS
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/uk/
* Translated using Weblate (Ukrainian)
Currently translated at 85.6% (2152 of 2513 strings)
Translation: SimpleX Chat/SimpleX Chat iOS
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/uk/
* Translated using Weblate (Ukrainian)
Currently translated at 85.6% (2152 of 2513 strings)
Translation: SimpleX Chat/SimpleX Chat iOS
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/uk/
* Translated using Weblate (Ukrainian)
Currently translated at 85.6% (2152 of 2513 strings)
Translation: SimpleX Chat/SimpleX Chat iOS
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/uk/
* Translated using Weblate (Lithuanian)
Currently translated at 1.5% (38 of 2513 strings)
Translation: SimpleX Chat/SimpleX Chat iOS
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/lt/
* Translated using Weblate (Finnish)
Currently translated at 44.2% (1113 of 2513 strings)
Translation: SimpleX Chat/SimpleX Chat iOS
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/fi/
* Translated using Weblate (Finnish)
Currently translated at 44.2% (1113 of 2513 strings)
Translation: SimpleX Chat/SimpleX Chat iOS
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/fi/
* Translated using Weblate (Finnish)
Currently translated at 44.2% (1113 of 2513 strings)
Translation: SimpleX Chat/SimpleX Chat iOS
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/fi/
* Translated using Weblate (Korean)
Currently translated at 17.5% (441 of 2513 strings)
Translation: SimpleX Chat/SimpleX Chat iOS
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/ko/
* Translated using Weblate (Polish)
Currently translated at 86.2% (2168 of 2513 strings)
Translation: SimpleX Chat/SimpleX Chat iOS
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/pl/
* Translated using Weblate (Polish)
Currently translated at 86.2% (2168 of 2513 strings)
Translation: SimpleX Chat/SimpleX Chat iOS
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/pl/
* Translated using Weblate (Polish)
Currently translated at 86.2% (2168 of 2513 strings)
Translation: SimpleX Chat/SimpleX Chat iOS
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/pl/
* Translated using Weblate (Polish)
Currently translated at 86.2% (2168 of 2513 strings)
Translation: SimpleX Chat/SimpleX Chat iOS
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/pl/
* Translated using Weblate (Polish)
Currently translated at 86.2% (2168 of 2513 strings)
Translation: SimpleX Chat/SimpleX Chat iOS
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/pl/
* Translated using Weblate (Polish)
Currently translated at 86.2% (2168 of 2513 strings)
Translation: SimpleX Chat/SimpleX Chat iOS
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/pl/
* Translated using Weblate (Polish)
Currently translated at 86.2% (2168 of 2513 strings)
Translation: SimpleX Chat/SimpleX Chat iOS
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/pl/
* Translated using Weblate (Polish)
Currently translated at 86.2% (2168 of 2513 strings)
Translation: SimpleX Chat/SimpleX Chat iOS
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/pl/
* Translated using Weblate (Portuguese)
Currently translated at 6.0% (153 of 2513 strings)
Translation: SimpleX Chat/SimpleX Chat iOS
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/pt/
* Translated using Weblate (Greek)
Currently translated at 1.0% (27 of 2513 strings)
Translation: SimpleX Chat/SimpleX Chat iOS
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/el/
* Translated using Weblate (Hebrew)
Currently translated at 26.3% (661 of 2513 strings)
Translation: SimpleX Chat/SimpleX Chat iOS
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/he/
* Translated using Weblate (Thai)
Currently translated at 42.9% (1079 of 2513 strings)
Translation: SimpleX Chat/SimpleX Chat iOS
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/th/
* Translated using Weblate (Thai)
Currently translated at 42.9% (1079 of 2513 strings)
Translation: SimpleX Chat/SimpleX Chat iOS
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/th/
* Translated using Weblate (Bengali)
Currently translated at 0.1% (3 of 2513 strings)
Translation: SimpleX Chat/SimpleX Chat iOS
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/bn/
* Translated using Weblate (Bulgarian)
Currently translated at 61.4% (1544 of 2513 strings)
Translation: SimpleX Chat/SimpleX Chat iOS
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/bg/
* Translated using Weblate (Bulgarian)
Currently translated at 61.4% (1544 of 2513 strings)
Translation: SimpleX Chat/SimpleX Chat iOS
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/bg/
* Translated using Weblate (Bulgarian)
Currently translated at 61.4% (1544 of 2513 strings)
Translation: SimpleX Chat/SimpleX Chat iOS
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/bg/
* Translated using Weblate (Turkish)
Currently translated at 85.4% (2147 of 2513 strings)
Translation: SimpleX Chat/SimpleX Chat iOS
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/tr/
* Translated using Weblate (Turkish)
Currently translated at 85.4% (2147 of 2513 strings)
Translation: SimpleX Chat/SimpleX Chat iOS
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/tr/
* Translated using Weblate (Turkish)
Currently translated at 85.4% (2147 of 2513 strings)
Translation: SimpleX Chat/SimpleX Chat iOS
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/tr/
* Translated using Weblate (Turkish)
Currently translated at 85.4% (2147 of 2513 strings)
Translation: SimpleX Chat/SimpleX Chat iOS
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/tr/
* Translated using Weblate (Turkish)
Currently translated at 85.4% (2147 of 2513 strings)
Translation: SimpleX Chat/SimpleX Chat iOS
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/tr/
* Translated using Weblate (Turkish)
Currently translated at 85.4% (2147 of 2513 strings)
Translation: SimpleX Chat/SimpleX Chat iOS
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/tr/
* Translated using Weblate (Turkish)
Currently translated at 85.4% (2147 of 2513 strings)
Translation: SimpleX Chat/SimpleX Chat iOS
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/tr/
* Translated using Weblate (Turkish)
Currently translated at 85.4% (2147 of 2513 strings)
Translation: SimpleX Chat/SimpleX Chat iOS
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/tr/
* Translated using Weblate (Turkish)
Currently translated at 85.4% (2147 of 2513 strings)
Translation: SimpleX Chat/SimpleX Chat iOS
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/tr/
* Translated using Weblate (Turkish)
Currently translated at 85.4% (2147 of 2513 strings)
Translation: SimpleX Chat/SimpleX Chat iOS
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/tr/
* Translated using Weblate (Turkish)
Currently translated at 85.4% (2147 of 2513 strings)
Translation: SimpleX Chat/SimpleX Chat iOS
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/tr/
* Translated using Weblate (Turkish)
Currently translated at 85.4% (2147 of 2513 strings)
Translation: SimpleX Chat/SimpleX Chat iOS
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/tr/
* Translated using Weblate (Turkish)
Currently translated at 85.4% (2147 of 2513 strings)
Translation: SimpleX Chat/SimpleX Chat iOS
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/tr/
* Translated using Weblate (Hungarian)
Currently translated at 100.0% (2513 of 2513 strings)
Translation: SimpleX Chat/SimpleX Chat iOS
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/hu/
* Translated using Weblate (Hungarian)
Currently translated at 100.0% (2513 of 2513 strings)
Translation: SimpleX Chat/SimpleX Chat iOS
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/hu/
* Translated using Weblate (Hungarian)
Currently translated at 100.0% (2513 of 2513 strings)
Translation: SimpleX Chat/SimpleX Chat iOS
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/hu/
* Translated using Weblate (Hungarian)
Currently translated at 100.0% (2513 of 2513 strings)
Translation: SimpleX Chat/SimpleX Chat iOS
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/hu/
* Translated using Weblate (Azerbaijani)
Currently translated at 47.0% (1183 of 2513 strings)
Translation: SimpleX Chat/SimpleX Chat iOS
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/az/
* Translated using Weblate (Azerbaijani)
Currently translated at 47.0% (1183 of 2513 strings)
Translation: SimpleX Chat/SimpleX Chat iOS
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/az/
* Translated using Weblate (Bulgarian)
Currently translated at 80.9% (2430 of 3001 strings)
Translation: SimpleX Chat/SimpleX Chat Android
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/bg/
* Translated using Weblate (Russian)
Currently translated at 93.9% (2820 of 3001 strings)
Translation: SimpleX Chat/SimpleX Chat Android
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/ru/
* Translated using Weblate (German)
Currently translated at 96.5% (2898 of 3001 strings)
Translation: SimpleX Chat/SimpleX Chat Android
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/de/
* Translated using Weblate (Lithuanian)
Currently translated at 56.6% (1701 of 3001 strings)
Translation: SimpleX Chat/SimpleX Chat Android
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/lt/
* Translated using Weblate (Chinese (Traditional Han script))
Currently translated at 92.0% (2763 of 3001 strings)
Translation: SimpleX Chat/SimpleX Chat Android
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/zh_Hant/
* Translated using Weblate (Thai)
Currently translated at 42.2% (1269 of 3001 strings)
Translation: SimpleX Chat/SimpleX Chat Android
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/th/
* Translated using Weblate (Polish)
Currently translated at 82.0% (2463 of 3001 strings)
Translation: SimpleX Chat/SimpleX Chat Android
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/pl/
* Translated using Weblate (Greek)
Currently translated at 81.7% (2454 of 3001 strings)
Translation: SimpleX Chat/SimpleX Chat Android
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/el/
* Translated using Weblate (Croatian)
Currently translated at 48.5% (1457 of 3001 strings)
Translation: SimpleX Chat/SimpleX Chat Android
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/hr/
* Translated using Weblate (Czech)
Currently translated at 89.4% (2685 of 3001 strings)
Translation: SimpleX Chat/SimpleX Chat Android
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/cs/
* Translated using Weblate (Portuguese (Brazil))
Currently translated at 96.5% (2898 of 3001 strings)
Translation: SimpleX Chat/SimpleX Chat Android
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/pt_BR/
* Translated using Weblate (Hebrew)
Currently translated at 69.1% (2074 of 3001 strings)
Translation: SimpleX Chat/SimpleX Chat Android
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/he/
* Translated using Weblate (Persian)
Currently translated at 81.1% (2434 of 3001 strings)
Translation: SimpleX Chat/SimpleX Chat Android
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/fa/
* Translated using Weblate (Dutch)
Currently translated at 78.0% (2342 of 3001 strings)
Translation: SimpleX Chat/SimpleX Chat Android
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/nl/
* Translated using Weblate (Indonesian)
Currently translated at 88.3% (2650 of 3001 strings)
Translation: SimpleX Chat/SimpleX Chat Android
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/id/
* Translated using Weblate (Bengali)
Currently translated at 1.7% (53 of 3001 strings)
Translation: SimpleX Chat/SimpleX Chat Android
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/bn/
* Translated using Weblate (Arabic)
Currently translated at 94.2% (2827 of 3001 strings)
Translation: SimpleX Chat/SimpleX Chat Android
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/ar/
* Translated using Weblate (Korean)
Currently translated at 49.5% (1488 of 3001 strings)
Translation: SimpleX Chat/SimpleX Chat Android
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/ko/
* Translated using Weblate (Italian)
Currently translated at 96.5% (2898 of 3001 strings)
Translation: SimpleX Chat/SimpleX Chat Android
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/it/
* Translated using Weblate (Hungarian)
Currently translated at 96.5% (2898 of 3001 strings)
Translation: SimpleX Chat/SimpleX Chat Android
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/hu/
* Translated using Weblate (Finnish)
Currently translated at 47.9% (1438 of 3001 strings)
Translation: SimpleX Chat/SimpleX Chat Android
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/fi/
* Translated using Weblate (French)
Currently translated at 96.5% (2898 of 3001 strings)
Translation: SimpleX Chat/SimpleX Chat Android
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/fr/
* Translated using Weblate (Romanian)
Currently translated at 82.0% (2463 of 3001 strings)
Translation: SimpleX Chat/SimpleX Chat Android
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/ro/
* Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 96.5% (2897 of 3001 strings)
Translation: SimpleX Chat/SimpleX Chat Android
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/zh_Hans/
* Translated using Weblate (Azerbaijani)
Currently translated at 0.3% (10 of 3001 strings)
Translation: SimpleX Chat/SimpleX Chat Android
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/az/
* Translated using Weblate (Ukrainian)
Currently translated at 86.3% (2590 of 3001 strings)
Translation: SimpleX Chat/SimpleX Chat Android
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/uk/
* Translated using Weblate (Japanese)
Currently translated at 91.1% (2735 of 3001 strings)
Translation: SimpleX Chat/SimpleX Chat Android
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/ja/
* Translated using Weblate (Turkish)
Currently translated at 92.8% (2787 of 3001 strings)
Translation: SimpleX Chat/SimpleX Chat Android
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/tr/
* Translated using Weblate (Spanish)
Currently translated at 96.5% (2898 of 3001 strings)
Translation: SimpleX Chat/SimpleX Chat Android
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/es/
* Translated using Weblate (Portuguese)
Currently translated at 39.3% (1180 of 3001 strings)
Translation: SimpleX Chat/SimpleX Chat Android
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/pt/
* Update translation files
Updated by "Remove blank strings" hook in Weblate.
Translation: SimpleX Chat/SimpleX Chat Android
Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/
* ios: remove empty targets, restore az/cs strings
* ios: import and export localizations
* ios: fix broken placeholders in translations
* ios: restore cs draft translations
* ios: fix more broken placeholders and link
---------
Co-authored-by: mlanp <mlanp@users.noreply.hosted.weblate.org >
Co-authored-by: Anonymous <anonymous@users.noreply.hosted.weblate.org >
Co-authored-by: Pixelcode <{pixelcode|git}@pgp.forgoodeyesonly.eu >
Co-authored-by: Evgeny Poberezkin <epoberezkin@users.noreply.hosted.weblate.org >
Co-authored-by: tn <tr4jan@users.noreply.hosted.weblate.org >
Co-authored-by: J. Lavoie <edanas@users.noreply.hosted.weblate.org >
Co-authored-by: J R <jrs@users.noreply.hosted.weblate.org >
Co-authored-by: Sarfaraz Ahmed <sahmed@users.noreply.hosted.weblate.org >
Co-authored-by: sith-on-mars <sith-on-mars@users.noreply.hosted.weblate.org >
Co-authored-by: TheFirstMonster <thefirstmonster@users.noreply.hosted.weblate.org >
Co-authored-by: khalidbelk <khalidbelk@users.noreply.hosted.weblate.org >
Co-authored-by: Near <near8954@users.noreply.hosted.weblate.org >
Co-authored-by: thedmdim <thedmdim@users.noreply.hosted.weblate.org >
Co-authored-by: Hosted Weblate user 107176 <zhuk2@users.noreply.hosted.weblate.org >
Co-authored-by: Artem Vorotnikov <vorot93@users.noreply.hosted.weblate.org >
Co-authored-by: Paul <acornacre@users.noreply.hosted.weblate.org >
Co-authored-by: А О <twofish85@users.noreply.hosted.weblate.org >
Co-authored-by: whoami11 <whoami021992@users.noreply.hosted.weblate.org >
Co-authored-by: Skyward Copied <skywardcopied@users.noreply.hosted.weblate.org >
Co-authored-by: Evgeny <esp@users.noreply.hosted.weblate.org >
Co-authored-by: Игорь Линчевский <insrtnqme@users.noreply.hosted.weblate.org >
Co-authored-by: Name Lastname <simplex-edit0r@users.noreply.hosted.weblate.org >
Co-authored-by: Ophiushi <41908476+ishi-sama@users.noreply.github.com >
Co-authored-by: Mqlx <mqlx@users.noreply.hosted.weblate.org >
Co-authored-by: Ranakan <ranak4n@users.noreply.hosted.weblate.org >
Co-authored-by: Karl Rinneberg <hundertwasser@users.noreply.hosted.weblate.org >
Co-authored-by: indiandoc <indiandoc@users.noreply.hosted.weblate.org >
Co-authored-by: cedev-1 <121963179+cedev-1@users.noreply.github.com >
Co-authored-by: Deleted User <deleted-6980@users.noreply.hosted.weblate.org >
Co-authored-by: Random <random-r@users.noreply.hosted.weblate.org >
Co-authored-by: Float <float@users.noreply.hosted.weblate.org >
Co-authored-by: Deleted User <dnstxqet@users.noreply.hosted.weblate.org >
Co-authored-by: BlacAmDK <blacamdk@users.noreply.hosted.weblate.org >
Co-authored-by: re me <jisizhang001@users.noreply.hosted.weblate.org >
Co-authored-by: Aaron H <chieferino@users.noreply.hosted.weblate.org >
Co-authored-by: Loping151 <loping151@users.noreply.hosted.weblate.org >
Co-authored-by: cllih <cllih@users.noreply.hosted.weblate.org >
Co-authored-by: Zhiyounihao <zhiyouni@users.noreply.hosted.weblate.org >
Co-authored-by: M Sarmad Qadeer <msarmadqadeer@users.noreply.hosted.weblate.org >
Co-authored-by: Albert Bob <vicdorke@users.noreply.hosted.weblate.org >
Co-authored-by: 小连招 <onecombo666@users.noreply.hosted.weblate.org >
Co-authored-by: Yay <yay9hbx5otn5@users.noreply.hosted.weblate.org >
Co-authored-by: Frank Yang <frankyang96@users.noreply.hosted.weblate.org >
Co-authored-by: Citrus <citrus@users.noreply.hosted.weblate.org >
Co-authored-by: Ross Li <ross89223@users.noreply.hosted.weblate.org >
Co-authored-by: No name <certainbot@users.noreply.hosted.weblate.org >
Co-authored-by: Luis Morillo Najarro <lsmor@users.noreply.hosted.weblate.org >
Co-authored-by: Darío Hereñú <kant@users.noreply.hosted.weblate.org >
Co-authored-by: Víctor <vzamanillo@users.noreply.hosted.weblate.org >
Co-authored-by: kudebug <kudebug@users.noreply.hosted.weblate.org >
Co-authored-by: Carlos Perez <charlieper@users.noreply.hosted.weblate.org >
Co-authored-by: Isaac ALejandro Lopez <justanormalguy@users.noreply.hosted.weblate.org >
Co-authored-by: gacarel <gacarel@users.noreply.hosted.weblate.org >
Co-authored-by: John m <jvanmanen@users.noreply.hosted.weblate.org >
Co-authored-by: M1K4 <mika-nl@users.noreply.hosted.weblate.org >
Co-authored-by: a4318 <a4318@users.noreply.hosted.weblate.org >
Co-authored-by: Miyu Sakatsuki <miyu-dev@users.noreply.hosted.weblate.org >
Co-authored-by: ikyhtr <ikyhtr@users.noreply.hosted.weblate.org >
Co-authored-by: 小林照幸 <koba-ninkigumi@users.noreply.hosted.weblate.org >
Co-authored-by: proudmuslim-dev <proudmuslim-dev@users.noreply.hosted.weblate.org >
Co-authored-by: Ikko Eltociear Ashimine <eltociear@gmail.com >
Co-authored-by: Rei <rei_@users.noreply.hosted.weblate.org >
Co-authored-by: yokoba0413 <yokoba0413@users.noreply.hosted.weblate.org >
Co-authored-by: ryokky3 <ryokky3@users.noreply.hosted.weblate.org >
Co-authored-by: koreirozzu <koreirozzu@users.noreply.hosted.weblate.org >
Co-authored-by: daydreamer-json <daydreamer-json@users.noreply.hosted.weblate.org >
Co-authored-by: acevif <acevif@users.noreply.hosted.weblate.org >
Co-authored-by: ActiveTK. <webmaster@activetk.jp >
Co-authored-by: Dima Sivan <dimasivan@users.noreply.hosted.weblate.org >
Co-authored-by: zenobit <zenobit@disroot.org >
Co-authored-by: Mehmed <don43@users.noreply.hosted.weblate.org >
Co-authored-by: mslr8 <hosted.weblate.org.poncho089@passmail.net >
Co-authored-by: Pluto <offplutonium@users.noreply.hosted.weblate.org >
Co-authored-by: idk <ciganzelezo@users.noreply.hosted.weblate.org >
Co-authored-by: Nenad <nenadmirkovic00@gmail.com >
Co-authored-by: Magorak Magorov <magorakmagorov@users.noreply.hosted.weblate.org >
Co-authored-by: Maksym Lukashenko <prototypem995@users.noreply.hosted.weblate.org >
Co-authored-by: Max <prototypem95@users.noreply.hosted.weblate.org >
Co-authored-by: ghost <ghosthamster@users.noreply.hosted.weblate.org >
Co-authored-by: rider of the storm <passat-b6-tdi@users.noreply.hosted.weblate.org >
Co-authored-by: Deleted User <mgorpinic2005@gmail.com >
Co-authored-by: Hotripak <hotr1pak@users.noreply.hosted.weblate.org >
Co-authored-by: Groovy394 <groovy394@users.noreply.hosted.weblate.org >
Co-authored-by: aquaticexpectancy <aquaticexpectancy@users.noreply.hosted.weblate.org >
Co-authored-by: Andrii Sudak <andrii-sudak@users.noreply.hosted.weblate.org >
Co-authored-by: sr sr <sr1919os@users.noreply.hosted.weblate.org >
Co-authored-by: petri <petrik@users.noreply.hosted.weblate.org >
Co-authored-by: Jiri Grönroos <artnay@users.noreply.hosted.weblate.org >
Co-authored-by: B.O.S.S <BxOxSxS@protonmail.com >
Co-authored-by: Jester Hodl <jesterhodl@users.noreply.hosted.weblate.org >
Co-authored-by: Kszyche <hostedweblate001user@users.noreply.hosted.weblate.org >
Co-authored-by: Wiesław Fijołek <percival@users.noreply.hosted.weblate.org >
Co-authored-by: Arturro43 <arturro43@users.noreply.hosted.weblate.org >
Co-authored-by: Omikorin <git@omikor.in >
Co-authored-by: Titapa (PunPun) Chaiyakiturajai <titapapunne@users.noreply.hosted.weblate.org >
Co-authored-by: elgratea <flantito@users.noreply.hosted.weblate.org >
Co-authored-by: 109247019824 <109247019824@users.noreply.hosted.weblate.org >
Co-authored-by: Kaanito <kaanito@users.noreply.hosted.weblate.org >
Co-authored-by: Abdullah Koyuncu <wiseweb-works@users.noreply.hosted.weblate.org >
Co-authored-by: goknarbahceli <goknarbahceli@users.noreply.hosted.weblate.org >
Co-authored-by: Dennis <dennnis@users.noreply.hosted.weblate.org >
Co-authored-by: cervezagua <cervezagua@users.noreply.hosted.weblate.org >
Co-authored-by: Deleted User <deleted-65564@users.noreply.hosted.weblate.org >
Co-authored-by: Egehan KAHRAMAN <vastsea0@users.noreply.hosted.weblate.org >
Co-authored-by: Omer <abulomer@users.noreply.hosted.weblate.org >
Co-authored-by: xe1st <xe1st@users.noreply.hosted.weblate.org >
Co-authored-by: echoloji <echoloji@users.noreply.hosted.weblate.org >
Co-authored-by: U.S. <usnetiz@users.noreply.hosted.weblate.org >
Co-authored-by: summoner001 <summoner@disroot.org >
Co-authored-by: Ghost of Sparta <makesocialfoss32@keemail.me >
Co-authored-by: d4f5409d <d4f5409d@users.noreply.hosted.weblate.org >
Co-authored-by: Mireli5656 <mireli5656@users.noreply.hosted.weblate.org >
Co-authored-by: Hosted Weblate <hosted@weblate.org >
2026-10-20 09:27:01 +01:00
spacedandy-agents-simplex
26f846e1a5
fixup! core: retire a subscription badge as soon as its store says it ended
2026-10-20 06:29:36 +00:00
spacedandy-agents-simplex
5dc5da61b2
docs: record that a badge subscription cannot be restored or bought again
...
Restoring a subscription on a new device or under another profile fails for two independent reasons, the client's restore reading only unfinished transactions on iOS and the service answering any key but the one it credited receipt_used, and a lapsed iOS subscriber cannot subscribe again on the same install either. Both gaps files record it in their own format, and both restorePurchases() say why reading the store's entitlements alone would not help.
Run: 010-subscription-lifecycle, slice S2c
2026-10-20 03:29:19 +00:00
spacedandy-agents-simplex
55d69781e8
core: retire a subscription badge as soon as its store says it ended
...
A subscription badge retired only on an ended answer to a request that was due, and only once the ledger's paidThrough had passed, so an ended answer while the ledger still covered, or the iOS app's report of StoreKit's expired or revoked state, left the badge shown, Support SimpleX unreachable and every purchase refused until a later request. Now an answered ended state is stored even while coverage runs (the service writes it only from a store check, after which it grants nothing), and every pass retires a subscription whose state, from this pass's answer or else as stored, is ended, whatever the ledger covers. The paidThrough guard stays at the prepaid call site, its only remaining user.
Run: 010-subscription-lifecycle, slice S1
2026-10-20 03:10:59 +00:00
Evgeny and Evgeny @ SimpleX Chat
7ffe252659
packages: npm public access ( #7779 )
...
Co-authored-by: Evgeny @ SimpleX Chat <259188159+evgeny-simplex@users.noreply.github.com >
2026-10-19 23:03:50 +01:00
Evgeny and Evgeny @ SimpleX Chat
46eb5cc001
packages: SimpleX Chat MCP server ( #7752 )
...
* packages: simplex-chat MCP server
* update
* standing approvals per chat, leave tool, simplify
* fixes
* add error messages
* LICENSE
* specification
* migration
* update simplex-chat, tests, fixes
* update simplex-chat libraries
* use agent peer type
* better server and tool descriptions
* short readme
* reference
* images
* update readme
* update readme
* update
* change links to master
* fix links to point to master branch
---------
Co-authored-by: Evgeny @ SimpleX Chat <259188159+evgeny-simplex@users.noreply.github.com >
2026-10-19 22:57:25 +01:00
Evgeny and Evgeny @ SimpleX Chat
16618c26cc
ci: reduce runners ( #7778 )
...
* ci: reduce runners
* ram disk in mac tests
---------
Co-authored-by: Evgeny @ SimpleX Chat <259188159+evgeny-simplex@users.noreply.github.com >
2026-10-19 22:36:12 +01:00