Commit Graph
6424 Commits
Author SHA1 Message Date
spaced4ndy 261e6103f8 wip 2026-08-12 18:31:55 +04:00
spaced4ndy 247e327ebe wip 2026-08-11 19:55:39 +04:00
spaced4ndy b999b585cf update plan 2026-08-11 12:10:30 +04:00
spaced4ndyandGitHub 98850917d7 directory: fix search cursor (#7361) 2026-08-11 07:18:59 +00:00
spaced4ndy 687f437d83 wip 2026-08-10 19:08:48 +04:00
spaced4ndy 105c18f2f2 Merge branch 'master' into f/directory-integration-plan 2026-08-10 17:45:36 +04:00
24816b66fe core: enhance server test result handling with additional server info (#7357)
* core: enhance server test result handling with additional server info

* simpler

* nix

---------

Co-authored-by: Ed Asriyan <service.github@asriyan.me>
2026-08-09 16:09:29 +01:00
spaced4ndyandGitHub e04e080a3d core: prevent remote controller from writing files outside files folder (#7352) 2026-08-07 13:26:48 +00:00
Evgeny Poberezkin b832d7c8f7 Merge branch 'stable' 2026-08-07 10:14:02 +01:00
Evgeny Poberezkin 302988a50b docs: add email updates signup link to contact us page 2026-08-06 23:21:45 +01:00
Narasimha-scandGitHub f921bd47bb android, desktop: fix live message sent to the chat opened after switching (#7323)
* android, desktop: fix live message sent to the chat opened after switching

A live message is sent when the chat is switched, but by then this view
already shows the chat that was opened - the effect that sends it runs
with that chat, so the message typed in one chat was sent to another.

The chat the message was composed in is passed to the send, and it is
resolved by the chat id from before the switch. If that chat is no longer
there the message is not sent at all, rather than sent to the chat opened
instead. The draft cleared after sending is the one of that chat too.

* plan: correct references; clear the draft of the chat the message is sent to

* plan: note the blast radius and how to resolve the overlap with #7308

* android, desktop: only pass the chat to what a live message can reach

A live message has no context item, so the forwarding, editing and
reporting branches of the send cannot run for it - they keep using the
chat of the view, and the chat it was composed in is passed only to the
message send, to the update of an already sent live message, and to
clearing the draft after sending.

* android, desktop: give the opened chat its own compose state while the live message is sent

Sending the live message to the chat it was composed in is not enough on
its own: composeState is shared between the chats opened in this view, and
the chat switch branch of KeyChangeEffect is the only one that neither
resets it nor loads the opened chat's draft - the branch that loads a
draft is later in the same if chain and cannot be reached.

sendMessageAsync then made it visible. It runs on Dispatchers.Default, so
its writes land after the switch: the whole composed state (via
cs.copy(liveMessage = null)) and its spinner (sending()) were written to
the compose state of a view that already shows another chat, which then
displayed the text composed in the previous one until the send completed.
The draft it should have shown was still in the model, and the next switch
away dropped it.

- sendMessageAsync takes composed, and sendMessage takes it as null by
  default, so only the chat switch passes a state and every other sender
  reads it inside the coroutine, where the send read it before. The chat
  switch captures it on the main thread before replacing it - otherwise
  the send would read the compose state of the chat that was opened and
  send its draft to the previous chat.
- checkLinkPreview takes that state too. It re-read composeState rather
  than what was passed in, and every text live message reaches it through
  updateMsgContent, so it would have rebuilt the message from the opened
  chat's draft instead of committing what was composed.
- every composeState write in sendMessageAsync is guarded by
  composeIsForSend() (toChat.id == chat.id), which compares the two chats
  instead of checking which one is open, so this send never takes the
  compose state back if that chat is opened again before it completes.
- the chat switch branch then resets composeState to the opened chat's
  draft, or to an empty state, like the branches below it do.

* plan: document the compose state handoff; correct the #7308 overlap resolution

The note on resolving the overlap with #7308 said its cs.liveMessage !=
null clause "already covers the send made by the chat switch". It does
not - in #7308 that clause sits outside the chatIsOpen check, which is
correct only while a live message is always sent to the chat that is
open, the assumption this fix removes. Read as written it exempts the
chat switch send from the guard that protects the opened chat, and a
merge that follows it reintroduces the leak.

Also records what manual test 2 was found failing on, and adds a slow
send variant so the window between the switch and the send completing is
long enough to type in the chat that was opened.

* android, desktop: keep reading the current state where a forward appends it

checkLinkPreview taking the composed state is needed where a live message
reaches it, but the forwarding branch is not one of those - it cannot run
with a chat other than the view's - and forwardItem suspends before it. So
there the captured state is stale by a network round trip, and text typed
while the forward was in flight stopped being appended to the message it
adds, while still being cleared when the send completed.

* plan: correct references and the claims that no longer hold

Line references were against the base this branch forked from, before
#7308 landed. Also: the live message loop no longer exits because the send
clears liveMessage - the chat switch replaces the compose state, on the
main thread, before the send runs; checkLinkPreview is not passed the
captured state everywhere; and chatsCtx.getChat can only return null in a
secondary context, which is not how "the chat is gone" reads.

Adds the two manual checks the review implied: a live message carrying a
link preview, which is what breaks if checkLinkPreview stops reading the
state it was given, and returning to the chat before the send completes.

* android, desktop: narrow the change to what the fix needs

- the draft id a failed message is saved under keeps using chat: that
  branch is behind !liveSend, which the send made by a chat switch never
  satisfies, so toChat is always chat where it is read;
- the state the chat switch installs no longer carries maxFileSize over.
  That field is kept in sync on chat switch by LaunchedEffect(chat.chatInfo),
  which is why the branches below this one construct it without one, and
  the paths where that effect does not re-run are the ones where the send
  overwrites the state anyway;
- sendMessageAsync takes its cs as a parameter rather than aliasing a
  separately named one.

* plan: follow the narrowed change

* android, desktop: shorten the comments

The threading mechanism behind cs is explained where it is used, so the
function comment only has to say what it is; the rest is rewording.
2026-08-06 23:08:15 +01:00
Narasimha-scandEvgeny Poberezkin 0b2f030dc6 support bot: add crowdfunding announcement to welcome message (#7351) 2026-08-06 15:51:23 +01:00
Narasimha-scandGitHub 67fd6f528a support bot: add crowdfunding announcement to welcome message (#7351) 2026-08-06 15:50:36 +01:00
spaced4ndy 33af132085 wip 2026-08-05 21:55:54 +04:00
spaced4ndy e54aaf71e4 wip 2026-08-05 21:55:05 +04:00
spaced4ndy 64ef22755d wip 2026-08-05 21:40:14 +04:00
spaced4ndy 660084f24b wip 2026-08-05 21:25:14 +04:00
spaced4ndy 844e340509 wip 2026-08-05 21:20:20 +04:00
spaced4ndy 592627e448 wip 2026-08-05 21:10:54 +04:00
spaced4ndy c875c435ac wip 2026-08-05 20:49:27 +04:00
spaced4ndy 2aa7ff3104 wip 2026-08-05 19:19:05 +04:00
spaced4ndyandGitHub 8c9c0211f9 core: prohibit admission review in channels, don't send history to pending members (#7347) 2026-08-05 14:52:45 +00:00
spaced4ndy b9cc71d531 docs: directory integration plan 2026-08-05 16:32:38 +04:00
Evgeny Poberezkin 1a56b7f0f8 Merge branch 'stable' 2026-08-05 11:51:17 +01:00
EvgenyGitHubEvgeny @ SimpleX Chat <259188159+evgeny-simplex@users.noreply.github.com>
970ef89325 website: link to wefunder (#7344)
Co-authored-by: Evgeny @ SimpleX Chat <259188159+evgeny-simplex@users.noreply.github.com>
2026-08-05 11:36:43 +01:00
EvgenyandGitHub 77c5fa34a6 docs: update readme (#7341) 2026-08-05 07:53:23 +01:00
Narasimha-scandGitHub 7e99e68950 android, desktop: fix draft appearing in another chat when switching chats while sending (#7308)
* ios, android, desktop: fix message being sent leaking into another chat

Compose state is shared between the chats opened in the same view, and
the send is launched in a scope that outlives the chat, so a send that
was still in flight when the chat was switched put its message (with the
reply context) into the compose state and then the draft of another chat,
and a late success cleared whatever was typed in the meantime.

The message being sent is no longer kept in the compose state when
leaving the chat, and the compose state is only cleared or restored after
sending if it still holds the message that was sent - the same check is
used by the other senders that show progress in the compose. A message
that failed to send is restored in the chat it was composed in, or kept
as its draft when another chat is open (iOS has no failed message
restore, there the message is dropped as before).

* android, desktop: keep only the chat switch fix

Revert the iOS changes and the same check in the three senders that
connect a prepared chat, leaving the fix for the compose state shared
between the chats opened in one view.

* plan: document what the narrowed change leaves to the connect senders

* android, desktop: use the same check where the sending flag is shared

The senders that connect a prepared chat set the same inProgress flag,
so a connect completing after the chat was switched cleared it for a
send started in the chat opened next, and that sent message was then
left in the compose.

* android, desktop: keep the live message clauses inside the open chat check

live and cs.liveMessage != null were alternatives to chatIsOpen, which
holds only while a live message is always sent to the chat that is open.
#7323 removes that: the live message committed by a chat switch is sent
to the chat it was composed in, while this view already shows another
one, so an unguarded clause here clears that chat's compose state - the
leak this fix exists to prevent.

liveSend stays an alternative to inProgress inside the guard, so a live
send behaves exactly as before while its chat is open, and it is excluded
from the restore/draft branch, which would otherwise write a draft on
every failing keystroke send once that chat is no longer open. On this
branch the only behaviour change is a live send completing after its chat
was left, which now leaves the opened chat alone.

Also load the draft of the chat opened next when the compose state is
cleared on switching away from a send in flight: clearState() returns
before the branch that loads a draft, so that draft was never shown, and
being in the slot but in no compose state it was then dropped by
clearPrevDraft on the next chat switch.

* plan: explain why live sends are guarded by the open chat check

Records that the exemption in "Deliberately unchanged" is from a guard
based on inProgress, not from chatIsOpen, and why the earlier form broke
once #7323 sends a live message to a chat other than the one open.
2026-08-04 21:01:35 +01:00
Narasimha-scandGitHub 0324517bfe android, desktop: keep database passphrase toggle inside the section card (#7326)
The "Save passphrase in settings/Keychain" label had no weight, so Row
measured it at full available width, the weighted spacer collapsed to 0
and the trailing DefaultSwitch was placed past the row's right edge.

Harmless until #6777: the section card is now inset by CARD_PADDING and
clipped with SectionCardShape, which cut the row from 348dp to 316dp on
the desktop start pane and made the overflowing switch both invisible
and unclickable, since Modifier.clip clips pointer input too. With a
custom passphrase set the toggle is enabled but unreachable, so the
passphrase stays saved in settings and the app never prompts for it on
start.

Give the label weight(1f) and drop the weighted spacer, matching what
SettingsActionItemWithContent does for every other toggle row.
2026-08-04 08:09:47 +01:00
EvgenyandGitHub 34b74d1c49 directory: remove support for directory log file (#7331)
* directory: remove support for directory log file

* remove unused exports
2026-08-02 16:01:22 +01:00
EvgenyandGitHub 31faceef73 docs: add bot library APIs (#7334) 2026-08-02 14:12:57 +01:00
Evgeny Poberezkin cbae9c5e87 core: 7.1.0.0 (simplexmq 7.1.0.0) 2026-08-01 13:13:40 +01:00
EvgenyGitHubEvgeny @ SimpleX Chat <259188159+evgeny-simplex@users.noreply.github.com>Evgeny @ SimpleX Chat <259188159+evgeny-simplex@users.noreply.github.com>Evgeny @ SimpleX Chat <259188159+evgeny-simplex@users.noreply.github.com>
e1a349b90f core: support contact addresses with DR keys, service requests (#7310)
* core: use double ratchet keys in contact address (#7278)

* core: use double ratchet keys in contact address

* use PQ from the first message

* query plans

* update simplexmq

* api to rotate keys, option to show full links in CLI

* shorter description

* ui: add error parameters

* disable DR in addresses

* core: parameter for create address command to configure ratchet keys

* add pqRatchet param to address-related commands

* query plan

* fix parser

* fix kotlin

---------

Co-authored-by: Evgeny @ SimpleX Chat <259188159+evgeny-simplex@users.noreply.github.com>

* core: contact request rejection and service requests (#7292)

* update simplexmq

* implement service requests and rejections

* tests

* migration

* fix migration

* add api event and response

* bot api, postgres migration

* nix shas

* bot types, rename property

* update bot type

* sign service requests

* update bots api

* query plan

* update plan

* update simplexmq

* fix test, update bot api

* fix bot api

* resolve name for service request

* refactor

---------

Co-authored-by: Evgeny @ SimpleX Chat <259188159+evgeny-simplex@users.noreply.github.com>

* update simplexmq

* update simplexmq

* test delays

---------

Co-authored-by: Evgeny @ SimpleX Chat <259188159+evgeny-simplex@users.noreply.github.com>
2026-08-01 12:51:03 +01:00
EvgenyGitHubEvgeny @ SimpleX Chat <259188159+evgeny-simplex@users.noreply.github.com>
61012d208e core, ui: extend profile peer type (#7277)
* core, ui: extend profile peer type

* remove comments

Co-authored-by: Evgeny <evgeny@poberezkin.com>

---------

Co-authored-by: Evgeny @ SimpleX Chat <259188159+evgeny-simplex@users.noreply.github.com>
2026-07-31 23:53:12 +01:00
EvgenyGitHubEvgeny @ SimpleX Chat <259188159+evgeny-simplex@users.noreply.github.com>
f1418f9e55 core: drop support of chat versions older than 08/2024 (#7319)
* core: drop support of chat versions older than 08/2024

* fix encoding tests

* skip failing tests

* rename

* fix

* query plans

* remove unused legacy code

* remove more unused

* remove unused

* remove unused names

---------

Co-authored-by: Evgeny @ SimpleX Chat <259188159+evgeny-simplex@users.noreply.github.com>
2026-07-29 19:06:20 +01:00
EvgenyGitHubEvgeny @ SimpleX Chat <259188159+evgeny-simplex@users.noreply.github.com>
64bf358040 core: fix version update on binary chunks (#7320)
* core: fix version update on binary chunks

* pass chat event

* pass encoding

* revert

---------

Co-authored-by: Evgeny @ SimpleX Chat <259188159+evgeny-simplex@users.noreply.github.com>
2026-07-28 17:51:01 +01:00
Evgeny Poberezkin 8dc387cb56 Merge branch 'stable' 2026-07-28 16:58:15 +01:00
SimpleX ChatandEvgeny Poberezkin e11128ce5b 7.0: android 366, desktop 155, ios 345 v7.0.0 2026-07-28 16:41:46 +01:00
Narasimha-scandGitHub bd298a1d4a ios, android, desktop: fix draft in support chat appearing in group chat (#7309)
Group chat and its support chats have the same chat id, so a draft saved
in "chat with admins" was restored in the group chat and shown as its draft
in the chat list. Include chat scope in the draft chat id.

Also save the draft when support chat is closed without changing chat id -
in that case KeyChangeEffect that saves drafts doesn't run.
2026-07-28 13:55:49 +01:00
spaced4ndyandGitHub 7c931d08ea ui: show "connect to name" button starting with 5 characters; ios: show button in New chat view search (#7318)
* ui: show "connect to name" button starting with 5 characters

* show button in new chat view search
2026-07-28 12:03:42 +01:00
shGitHubmlanpEvgeny PoberezkinHosted Weblate user 54392No nameEvgeny @ SimpleX Chat <259188159+evgeny-simplex@users.noreply.github.com>Narasimha-sc
a58cd51c49 ui: translations (#7317)
* Translated using Weblate (German)

Currently translated at 100.0% (2899 of 2899 strings)

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

* Translated using Weblate (Russian)

Currently translated at 97.5% (2829 of 2899 strings)

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

* Translated using Weblate (Chinese (Simplified Han script))

Currently translated at 99.9% (2898 of 2899 strings)

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

* Translated using Weblate (Spanish)

Currently translated at 100.0% (2899 of 2899 strings)

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

* Translated using Weblate (Spanish)

Currently translated at 100.0% (2497 of 2497 strings)

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

* ru translations

* Translated using Weblate (German)

Currently translated at 100.0% (2899 of 2899 strings)

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

* Translated using Weblate (Russian)

Currently translated at 97.5% (2829 of 2899 strings)

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

* Translated using Weblate (Chinese (Simplified Han script))

Currently translated at 99.9% (2898 of 2899 strings)

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

* Translated using Weblate (Spanish)

Currently translated at 100.0% (2899 of 2899 strings)

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

* Translated using Weblate (Spanish)

Currently translated at 100.0% (2497 of 2497 strings)

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

* process translations

* ui: fix translation errors in es, ru, de, it, hu

Review of the translations in this PR against the English originals.
Values only - no keys added, removed or renamed.

Spanish:
- "The sender deleted the connection request." said "El servidor..."
  (the server), attributing the deletion to a server rather than the
  sender. Restored "El remitente".
- "Require/Do not require signing messages." were rendered as statements
  ("Se requieren mensajes firmados."), making the toggle options read
  identically to the separate status strings "Message signing is
  (not) required.". Restored the imperative.
- "...compare (or scan) the code on your devices." said "en tu
  dispositivo" (singular); the code has to be compared on both.
- "How to register a test name" was pluralised to "nombres en pruebas".

Russian:
- "Помошь и поддержка" -> "Помощь и поддержка" (spelling).
- "File servers" was the calque "Файл серверы" -> "Серверы файлов",
  matching the iOS translation of the same string.
- "Если Вы выберите" -> "выберете" (imperative used for future).
- "Create web preview." said "Создать веб страницу." (web page, also
  missing the hyphen) -> "Создать веб-предпросмотр.".
- webpage_info dropped "to show your channel preview to visitors before
  they subscribe"; webpage_url_footer said "страницы канала" instead of
  the preview. Both restored from the iOS wording.
- "Enter description (optional)" lost "(optional)"; "Error adding
  relays" was truncated to "Ошибка добавления".
- "Add contributors." used "авторов"; the member role is "соавтор".
- "удален(а)" -> "удалён", "подтвержденный" -> "подтверждённый".

German, Italian, Hungarian:
- The source strings "Names for your channel or business." and
  "SimpleX names (BETA)" were renamed to "Public names..." and
  "SimpleX public names (BETA)", but the old values were carried over,
  so "public" was missing. Android German and Chinese had already been
  updated in this PR; this brings iOS German, and both platforms for
  Italian and Hungarian, in line.
- iOS German "How to register a test name" still read "Einen Test-Namen
  registrieren", while Android German was updated in this PR.

---------

Co-authored-by: mlanp <github@lang.xyz>
Co-authored-by: Evgeny Poberezkin <e.poberezkin@me.com>
Co-authored-by: Hosted Weblate user 54392 <hamburger2048@users.noreply.hosted.weblate.org>
Co-authored-by: No name <usir.alerts@onionmail.org>
Co-authored-by: Evgeny @ SimpleX Chat <259188159+evgeny-simplex@users.noreply.github.com>
Co-authored-by: Narasimha-sc <166327228+Narasimha-sc@users.noreply.github.com>
2026-07-28 11:26:04 +01:00
Narasimha-scandGitHub 02178fb611 android, desktop: fix accepting contact request from notification for non-active profile (#7316)
* android, desktop: switch to the request's profile when accepting contact request from notification

* plans: justify accepting contact request from notification fix
2026-07-27 20:25:56 +01:00
spaced4ndyandGitHub b414d7579a ios: fix connection dialogue not shown if app is opened via link before onboarding (#7301)
* ios: fix connection dialogue not shown if app is opened via link before onboarding

* wip

* debug

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* comment
2026-07-27 18:00:32 +01:00
spaced4ndyandGitHub 6152f2a7ee ios: fix chat not opening when contact connects via 1-time link (#7315) 2026-07-27 15:04:45 +00:00
spaced4ndyandGitHub 45ee868e0b android, desktop: fix reply header not filling message width for emoji (#7314) 2026-07-27 14:47:05 +00:00
Narasimha-scandGitHub 1108e87ee2 desktop: fix forwarding moving message draft to another chat (#7307)
* desktop: fix forwarding moving message draft to another chat

The same ComposeView is reused when switching chats, so the `chat`
captured by the desktop-only `onDispose` is the chat that was open when
the view was first composed, not the one the message is forwarded from.
The draft was saved under that stale chat id, and when it happened to be
the chat forwarded to, sending the forward restored the draft there.

* plan: justify desktop forward/draft fix and cross-platform findings
2026-07-25 18:23:04 +01:00
Evgeny Poberezkin 4b97110fd9 7.0.0-beta.6: android 365, desktop 154 v7.0.0-beta.6 2026-07-25 18:16:23 +01:00
Evgeny Poberezkin 15ef21de0c ios: build 344 2026-07-25 17:17:39 +01:00
Evgeny Poberezkin 09254c5a53 ui: update whats new 2026-07-25 16:14:22 +01:00
+16 8c80e4fd57 ui: translations (#7305)
* Translated using Weblate (German)

Currently translated at 100.0% (2897 of 2897 strings)

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

* Translated using Weblate (German)

Currently translated at 100.0% (2495 of 2495 strings)

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

* Translated using Weblate (French)

Currently translated at 82.3% (2387 of 2897 strings)

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

* Translated using Weblate (Italian)

Currently translated at 100.0% (2897 of 2897 strings)

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

* Translated using Weblate (Italian)

Currently translated at 100.0% (2897 of 2897 strings)

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

* Translated using Weblate (Italian)

Currently translated at 100.0% (2495 of 2495 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 99.9% (2896 of 2897 strings)

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

* Translated using Weblate (Chinese (Traditional Han script))

Currently translated at 96.7% (2803 of 2897 strings)

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

* Translated using Weblate (Dutch)

Currently translated at 82.2% (2382 of 2897 strings)

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

* Translated using Weblate (Japanese)

Currently translated at 96.9% (2810 of 2897 strings)

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

* Translated using Weblate (Czech)

Currently translated at 93.6% (2712 of 2897 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 80.2% (2325 of 2897 strings)

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

* Translated using Weblate (Arabic)

Currently translated at 100.0% (2897 of 2897 strings)

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

* Translated using Weblate (Ukrainian)

Currently translated at 91.8% (2660 of 2897 strings)

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

* Translated using Weblate (Lithuanian)

Currently translated at 58.5% (1696 of 2897 strings)

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

* Translated using Weblate (Finnish)

Currently translated at 49.2% (1427 of 2897 strings)

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

* Translated using Weblate (Korean)

Currently translated at 50.5% (1463 of 2897 strings)

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

* Translated using Weblate (Polish)

Currently translated at 86.8% (2516 of 2897 strings)

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

* Translated using Weblate (Hebrew)

Currently translated at 71.0% (2058 of 2897 strings)

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

* Translated using Weblate (Thai)

Currently translated at 42.5% (1233 of 2897 strings)

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

* Translated using Weblate (Bulgarian)

Currently translated at 85.4% (2476 of 2897 strings)

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

* Translated using Weblate (Turkish)

Currently translated at 98.7% (2862 of 2897 strings)

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

* Translated using Weblate (Hungarian)

Currently translated at 100.0% (2897 of 2897 strings)

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

* Translated using Weblate (Persian)

Currently translated at 84.9% (2461 of 2897 strings)

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

* Translated using Weblate (Hungarian)

Currently translated at 100.0% (2495 of 2495 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% (2899 of 2899 strings)

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

* Translated using Weblate (Chinese (Simplified Han script))

Currently translated at 99.9% (2898 of 2899 strings)

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

* Translated using Weblate (Italian)

Currently translated at 100.0% (2899 of 2899 strings)

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

* Translated using Weblate (Italian)

Currently translated at 100.0% (2495 of 2495 strings)

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

* Translated using Weblate (German)

Currently translated at 100.0% (2899 of 2899 strings)

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

* Translated using Weblate (German)

Currently translated at 100.0% (2495 of 2495 strings)

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

* Translated using Weblate (Arabic)

Currently translated at 100.0% (2899 of 2899 strings)

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

* process translations

* ui: fix translation errors found in review

Android (strings.xml):
- de: "Fehler beim SimpleX-Name" -> "-Namen" (dative of Name)
- de: connection_error_auth title updated to match new EN
  "Connection link removed"; fix reflexive "Um Sie" -> "Um sich"
- hu: typo "egyszer használató" -> "használható"
- hu, it: connection_error_auth title updated to match new EN
- ar: "استيثاق الجهاز غير مفعّلة" -> "مفعّل" (masculine agreement,
  stale after the المصادقة -> الاستيثاق terminology change)
- ar: "الذين شاركَ الرابط معهم" -> "شاركتَ" (subjectless verb)
- ar: "سيظل جميع جهات اتصالك متصلين" -> "ستظل ... متصلة" (x2,
  جهات is feminine plural)
- ar: add missing trailing period to v7_0_channels_relays
- ar: passive voice for skipped-message counters, matching EN
- zh-rCN: connection_error_auth reworded as a title, not a
  subjectless clause; restore the \n dropped from _desc

iOS:
- de: same dative fix in Localizable.strings and de.xliff
- de, hu, it: add missing File servers / "File servers: %@"
  targets, ported from the Android translations in this PR

---------

Co-authored-by: mlanp <github@lang.xyz>
Co-authored-by: Ophiushi <41908476+ishi-sama@users.noreply.github.com>
Co-authored-by: Deleted User <noreply+6980@weblate.org>
Co-authored-by: Random <random-r@users.noreply.hosted.weblate.org>
Co-authored-by: Hosted Weblate user 54392 <hamburger2048@users.noreply.hosted.weblate.org>
Co-authored-by: Olivia Ng <uloo592@gmail.com>
Co-authored-by: John m <jvanmanen@gmail.com>
Co-authored-by: tomato potato <tomato.games@protonmail.com>
Co-authored-by: M Sarmad Qadeer <msarmadqadeer@gmail.com>
Co-authored-by: HypocrisyCollector <work.j6nnu@slmail.me>
Co-authored-by: jonnysemon <jonnysemon@users.noreply.hosted.weblate.org>
Co-authored-by: Maksym Lukashenko <livelmaxim@gmail.com>
Co-authored-by: Anonimas <anonimas3@users.noreply.hosted.weblate.org>
Co-authored-by: petri <pkajander@gmail.com>
Co-authored-by: 5olivetree <5olivetree+github.com@mailbox.org>
Co-authored-by: B.O.S.S <BxOxSxS@protonmail.com>
Co-authored-by: Roee Hershberg <roihershberg@protonmail.com>
Co-authored-by: Titapa (PunPun) Chaiyakiturajai <titapapunne@gmail.com>
Co-authored-by: elgratea <weblate@fastmail.com>
Co-authored-by: Kaanito <kaanpeker196@gmail.com>
Co-authored-by: summoner001 <summoner@disroot.org>
Co-authored-by: Siavash <ciavash@proton.me>
Co-authored-by: Narasimha-sc <166327228+Narasimha-sc@users.noreply.github.com>
Co-authored-by: Evgeny Poberezkin <evgeny@poberezkin.com>
2026-07-25 16:07:00 +01:00
9d47d88311 website: translations (#7306)
* Translated using Weblate (German)

Currently translated at 100.0% (374 of 374 strings)

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

* Translated using Weblate (Italian)

Currently translated at 100.0% (374 of 374 strings)

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

* Translated using Weblate (Hungarian)

Currently translated at 100.0% (374 of 374 strings)

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

* Translated using Weblate (German)

Currently translated at 100.0% (374 of 374 strings)

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

* Translated using Weblate (Italian)

Currently translated at 100.0% (374 of 374 strings)

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

* Translated using Weblate (Hungarian)

Currently translated at 100.0% (374 of 374 strings)

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

* website: fix Italian translation of 'Host Chat Relay'

'Gestisci' means manage/run, not host. The sibling entries in the same
docs dropdown ('Host SMP Server', 'Host XFTP Server') use 'Ospita', and
all three render adjacently in the menu.

---------

Co-authored-by: mlanp <github@lang.xyz>
Co-authored-by: Random <random-r@users.noreply.hosted.weblate.org>
Co-authored-by: summoner001 <summoner@disroot.org>
Co-authored-by: Narasimha-sc <166327228+Narasimha-sc@users.noreply.github.com>
2026-07-25 16:03:11 +01:00