From 0210591af7ad288798592b446095f219f82f452f Mon Sep 17 00:00:00 2001 From: sh <37271604+shumvgolove@users.noreply.github.com> Date: Tue, 25 Aug 2026 12:40:13 +0400 Subject: [PATCH 01/15] desktop: fix nanohttpd submodule check never running (#7408) --- .../external/nanohttpd/build.gradle.kts | 21 +++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/apps/multiplatform/external/nanohttpd/build.gradle.kts b/apps/multiplatform/external/nanohttpd/build.gradle.kts index fb24922208..7841d8f803 100644 --- a/apps/multiplatform/external/nanohttpd/build.gradle.kts +++ b/apps/multiplatform/external/nanohttpd/build.gradle.kts @@ -26,16 +26,25 @@ java { targetCompatibility = jvmVersion } -// Without this the jar records the build machine's timestamps, file order and file modes, -// which makes the desktop packages unreproducible -tasks.jar { - // Checked here and not during configuration, so that Android builds, which don't use nanohttpd, - // work without the submodule +val upstreamSources = sourceSets.main.get().java.matching { include("org/nanohttpd/**") } + +// compileJava and jar silently succeed without the sources, so the check needs its own task. +// It cannot run during configuration, Android builds must work without the submodule. +val checkUpstreamSources by tasks.registering { doFirst { - if (!upstream.file("core/src/main/java").asFile.isDirectory) { + if (upstreamSources.isEmpty) { throw GradleException("nanohttpd sources are missing, run: git submodule update --init --recursive") } } +} + +tasks.compileJava { + dependsOn(checkUpstreamSources) +} + +// Without this the jar records the build machine's timestamps, file order and file modes, +// which makes the desktop packages unreproducible +tasks.jar { isPreserveFileTimestamps = false isReproducibleFileOrder = true filePermissions { unix("644") } From a99541d0fe9c227703448b4dd07198029a6dce93 Mon Sep 17 00:00:00 2001 From: sh <37271604+shumvgolove@users.noreply.github.com> Date: Wed, 26 Aug 2026 12:10:41 +0400 Subject: [PATCH 02/15] scripts: add chat relay docker setup (#7406) * scripts: add chat relay docker setup * docs: add docker setup to chat relay guide * scripts: bump relay ref and add RTS options * scripts: reduce comments in relay setup * scripts: increase relay pool and queue size * scripts: add relay metrics exporter * docs: trim docker section in chat relay guide * scripts: bump cabal for hackage key rotation * scripts: retry cabal update on mirror failure * scripts: split cabal update into its own layer * scripts: allow setting relay address server * docs: adjust systemd service limits * docs: mention docker volume full path --- docs/CHAT-RELAY.md | 75 +++++++++++++++++++-- scripts/relay/.dockerignore | 4 ++ scripts/relay/.env.example | 21 ++++++ scripts/relay/Dockerfile | 70 ++++++++++++++++++++ scripts/relay/docker-compose.yaml | 87 +++++++++++++++++++++++++ scripts/relay/entrypoint.py | 105 ++++++++++++++++++++++++++++++ scripts/relay/sql_exporter.yml | 71 ++++++++++++++++++++ 7 files changed, 429 insertions(+), 4 deletions(-) create mode 100644 scripts/relay/.dockerignore create mode 100644 scripts/relay/.env.example create mode 100644 scripts/relay/Dockerfile create mode 100644 scripts/relay/docker-compose.yaml create mode 100755 scripts/relay/entrypoint.py create mode 100644 scripts/relay/sql_exporter.yml diff --git a/docs/CHAT-RELAY.md b/docs/CHAT-RELAY.md index a06c06026f..8f94aa8090 100644 --- a/docs/CHAT-RELAY.md +++ b/docs/CHAT-RELAY.md @@ -1,6 +1,6 @@ --- title: Hosting your own Chat Relay -revision: 16.07.2026 +revision: 28.07.2026 --- # Hosting your own Chat Relay @@ -20,6 +20,7 @@ This guide explains how to set up a chat relay on a Linux server, how to run it, - [Relay options](#relay-options) - [Get the relay address](#get-the-relay-address) - [Run relay commands](#run-relay-commands) +- [Run with Docker](#run-with-docker) - [Channel web previews](#channel-web-previews) - [Relay web options](#relay-web-options) - [Serve the previews with Caddy](#serve-the-previews-with-caddy) @@ -126,6 +127,73 @@ simplex-chat-relay -d /home/relay/relay -e "/set profile image file /home/relay/ systemctl start simplex-relay ``` +## Run with Docker + +The relay can also be built and run with Docker Compose, using PostgreSQL for storage. The files are in [`scripts/relay`](https://github.com/simplex-chat/simplex-chat/tree/master/scripts/relay). + +1. Clone the repository and switch to the relay directory: + + ```sh + git clone https://github.com/simplex-chat/simplex-chat + cd simplex-chat/scripts/relay + ``` + +2. Copy the example environment file, then set `RELAY_NAME`, `RELAY_WEB_DOMAIN` and `POSTGRES_PASSWORD` in it: + + ```sh + cp .env.example .env + ``` + +3. Create the directory for the previews and the CORS file, owned by the container's user (UID `1000`): + + ```sh + mkdir -p /var/www/relay-web-channels/channel + chown -R 1000:1000 /var/www/relay-web-channels + chmod 0755 /var/www/relay-web-channels + ``` + +4. Create the output directory for the relay address, then build and start: + + ```sh + mkdir -p out && chown 1000:1000 out + docker compose build + docker compose up -d + ``` + + The first build compiles from source and takes a while. + +5. Read the relay address, written on the first start: + + ```sh + cat out/relay-address.txt + ``` + +To give the relay a picture, put a small `.png`/`.jpg`/`.jpeg` file (large images are rejected) next to the compose file and add a `docker-compose.override.yml`: + +```yaml +services: + relay: + environment: + RELAY_IMAGE_FILE: /avatar.png + volumes: + - ./avatar.png:/avatar.png:ro +``` + +To run a one-off command against the relay's database, override the entrypoint: + +```sh +docker compose run --rm --entrypoint sh relay -c \ + 'simplex-chat-relay -d "$DB_CONN" -e "/set profile image file /avatar.png"' +``` + +Relay metrics from the database are published by [sql_exporter](https://github.com/burningalchemist/sql_exporter) on `127.0.0.1:9399/metrics`, with the queries in `sql_exporter.yml`. + +Relay database live in PostgreSQL docker volume. To print the full path to PostgreSQL database, execute in the host: + +```sh +docker volume inspect simplex-chat-relay_pgdata --format '{{.Mountpoint}}' +``` + ## Channel web previews Chat relays can render recent messages of its public channels as JSON files, which can be served over HTTPS using a web server to create channel web previews. This is optional. @@ -219,11 +287,9 @@ Create `/etc/systemd/system/simplex-cors-sync.service`: ```ini [Unit] Description=Sync SimpleX relay CORS config to Caddy -StartLimitIntervalSec=30 -StartLimitBurst=10 +StartLimitIntervalSec=0 [Service] Type=oneshot -ExecStartPre=/bin/sleep 2 ExecStart=/usr/local/bin/simplex-cors-sync.sh ``` @@ -236,6 +302,7 @@ After=caddy.service [Path] PathChanged=/var/www/relay-web-channels/cors.conf Unit=simplex-cors-sync.service +TriggerLimitIntervalSec=0 [Install] WantedBy=multi-user.target ``` diff --git a/scripts/relay/.dockerignore b/scripts/relay/.dockerignore new file mode 100644 index 0000000000..00bc43ddaf --- /dev/null +++ b/scripts/relay/.dockerignore @@ -0,0 +1,4 @@ +# The Dockerfile clones the source itself and only needs entrypoint.py from the +# build context. Exclude everything else, especially .env (secrets) and out/. +* +!entrypoint.py diff --git a/scripts/relay/.env.example b/scripts/relay/.env.example new file mode 100644 index 0000000000..7bfbd89615 --- /dev/null +++ b/scripts/relay/.env.example @@ -0,0 +1,21 @@ +# Copy to .env and edit. + +RELAY_NAME="My Relay" +RELAY_WEB_DOMAIN=relay1.example.com + +POSTGRES_USER=simplex +POSTGRES_DB=simplex_chat_relay +POSTGRES_PASSWORD=change-me + +# Ref to build: tag, branch or commit. +CHAT_REF=88df79d1e26921c7d1835fc8484fade596356fb6 + +# SMP server for the relay address, used when the address is created. +#RELAY_ADDRESS_SERVER=smp://@smp.example.com + +# GHC runtime options, without the +RTS/-RTS markers. +#RELAY_RTS_OPTS="-N -F1.2 -A16m -I0.01 -Iw15" + +# Database connection pool and internal queue size. +#RELAY_POOL_SIZE=4 +#RELAY_QUEUE_SIZE=65536 diff --git a/scripts/relay/Dockerfile b/scripts/relay/Dockerfile new file mode 100644 index 0000000000..1a731adf41 --- /dev/null +++ b/scripts/relay/Dockerfile @@ -0,0 +1,70 @@ +# syntax=docker/dockerfile:1 + +ARG CHAT_REF=88df79d1e26921c7d1835fc8484fade596356fb6 +ARG GHC=9.6.3 +# 3.10.1.0 predates the Hackage root key rotation and fails `cabal update`. +ARG CABAL=3.10.2.0 + +# ---- build ---------------------------------------------------------------- +FROM ubuntu:22.04 AS build + +ARG GHC +ARG CABAL +ENV DEBIAN_FRONTEND=noninteractive \ + PATH="/root/.cabal/bin:/root/.ghcup/bin:$PATH" + +RUN apt-get update && apt-get install -y --no-install-recommends \ + ca-certificates curl git build-essential \ + libpq-dev libgmp3-dev zlib1g-dev libnuma-dev libssl-dev \ + llvm-12 llvm-12-dev \ + && rm -rf /var/lib/apt/lists/* + +RUN curl --proto '=https' --tlsv1.2 -sSf https://get-ghcup.haskell.org \ + | BOOTSTRAP_HASKELL_NONINTERACTIVE=1 \ + BOOTSTRAP_HASKELL_GHC_VERSION="${GHC}" \ + BOOTSTRAP_HASKELL_CABAL_VERSION="${CABAL}" sh \ + && ghcup set ghc "${GHC}" \ + && ghcup set cabal "${CABAL}" + +# Kept out of the layer above so that a failure here does not reinstall GHC. +# Retried because a failed fetch falls back to the mirrors in Hackage's +# mirrors.json, which are dead, and the last one aborts the build. +RUN cabal update || { sleep 5; cabal update; } || { sleep 20; cabal update; } + +# Declared after the toolchain layers so that changing the ref does not rebuild +# them. Unlike `clone --branch`, this form also accepts a commit hash. +ARG CHAT_REF +WORKDIR /project +RUN git init -q . \ + && git remote add origin https://github.com/simplex-chat/simplex-chat \ + && git fetch -q --depth 1 origin "${CHAT_REF}" \ + && git checkout -q FETCH_HEAD + +# The cache mounts keep compiled dependencies across ref changes. +RUN --mount=type=cache,target=/root/.cabal/store,sharing=locked \ + --mount=type=cache,target=/project/dist-newstyle,sharing=locked \ + cp scripts/cabal.project.local.linux cabal.project.local \ + && cabal build -fclient_postgres exe:simplex-chat \ + && bin=$(find dist-newstyle -name simplex-chat -type f -executable | head -n1) \ + && install -m 0755 "$bin" /simplex-chat-relay \ + && strip /simplex-chat-relay + +# ---- runtime -------------------------------------------------------------- +FROM debian:stable-slim AS runtime + +# The binary is dynamically linked, so it needs these libraries at runtime. +RUN apt-get update && apt-get install -y --no-install-recommends \ + ca-certificates python3 \ + libpq5 libgmp10 libssl3 zlib1g libnuma1 libffi8 \ + && rm -rf /var/lib/apt/lists/* \ + && useradd -m -u 1000 relay + +COPY --from=build /simplex-chat-relay /usr/local/bin/simplex-chat-relay +COPY entrypoint.py /usr/local/bin/entrypoint.py + +# Bind-mounted host directories must be writable by this UID. +USER relay + +# The relay shuts down cleanly on SIGINT, not SIGTERM. +STOPSIGNAL SIGINT +ENTRYPOINT ["python3", "/usr/local/bin/entrypoint.py"] diff --git a/scripts/relay/docker-compose.yaml b/scripts/relay/docker-compose.yaml new file mode 100644 index 0000000000..569d403966 --- /dev/null +++ b/scripts/relay/docker-compose.yaml @@ -0,0 +1,87 @@ +name: simplex-chat-relay + +services: + relay: + build: + context: . + args: + CHAT_REF: ${CHAT_REF:-88df79d1e26921c7d1835fc8484fade596356fb6} + image: chat-relay:latest # set your image/registry name + container_name: chat-relay + depends_on: + db: + condition: service_healthy + environment: + RELAY_NAME: ${RELAY_NAME} + RELAY_WEB_DOMAIN: ${RELAY_WEB_DOMAIN} + RELAY_ADDRESS_SERVER: ${RELAY_ADDRESS_SERVER:-} + # Empty values fall back to the entrypoint defaults. + RELAY_RTS_OPTS: ${RELAY_RTS_OPTS:-} + RELAY_POOL_SIZE: ${RELAY_POOL_SIZE:-} + RELAY_QUEUE_SIZE: ${RELAY_QUEUE_SIZE:-} + # Password is passed as PGPASSWORD to keep it out of argv. + DB_CONN: postgresql://${POSTGRES_USER}@db:5432/${POSTGRES_DB} + PGPASSWORD: ${POSTGRES_PASSWORD} + volumes: + - /var/www/relay-web-channels:/var/www/relay-web-channels + - ./out:/out + restart: unless-stopped + + metrics: + image: burningalchemist/sql_exporter:latest + container_name: chat-relay-metrics + depends_on: + db: + condition: service_healthy + environment: + # Percent-encode the password if it contains URL-reserved characters. + SQLEXPORTER_TARGET_DSN: postgresql://${POSTGRES_USER}:${POSTGRES_PASSWORD}@db:5432/${POSTGRES_DB}?sslmode=disable + volumes: + - ./sql_exporter.yml:/etc/sql_exporter/sql_exporter.yml:ro + command: ["-config.file=/etc/sql_exporter/sql_exporter.yml"] + ports: + - "127.0.0.1:9399:9399" + restart: unless-stopped + + db: + image: postgres:18 + container_name: chat-relay-db + environment: + POSTGRES_USER: ${POSTGRES_USER} + POSTGRES_DB: ${POSTGRES_DB} + POSTGRES_PASSWORD: ${POSTGRES_PASSWORD} + shm_size: 256mb # parallel workers need more than the 64 MB default + volumes: + # PG18+ keeps PGDATA in a version-specific subdirectory of this volume. + - pgdata:/var/lib/postgresql + healthcheck: + test: ["CMD-SHELL", "pg_isready -U $$POSTGRES_USER -d $$POSTGRES_DB"] + interval: 5s + timeout: 5s + retries: 10 + # Tuning for ~5 GB RAM / 4 cores. Match to the actual server. + command: + - postgres + - --max_connections=100 + - --shared_buffers=1280MB + - --effective_cache_size=3840MB + - --maintenance_work_mem=320MB + - --checkpoint_completion_target=0.9 + - --wal_buffers=16MB + - --default_statistics_target=100 + - --random_page_cost=1.1 + - --effective_io_concurrency=200 + - --work_mem=6301kB + - --huge_pages=off + - --jit=off + - --wal_compression=lz4 + - --min_wal_size=1GB + - --max_wal_size=4GB + - --max_worker_processes=4 + - --max_parallel_workers_per_gather=2 + - --max_parallel_workers=4 + - --max_parallel_maintenance_workers=2 + restart: unless-stopped + +volumes: + pgdata: diff --git a/scripts/relay/entrypoint.py b/scripts/relay/entrypoint.py new file mode 100755 index 0000000000..522e87eb22 --- /dev/null +++ b/scripts/relay/entrypoint.py @@ -0,0 +1,105 @@ +#!/usr/bin/env python3 +"""Save the relay address on first start, then exec the relay. + +The address is printed only when it is created, and is not stored in the +database in its displayed form, so it is captured from the relay's output. +""" +import os +import shlex +import subprocess +import sys + +BIN = "simplex-chat-relay" +WEB_ROOT = "/var/www/relay-web-channels" +ADDR_FILE = "/out/relay-address.txt" +CAPTURE_TIMEOUT = 180 # seconds +DEFAULT_RTS_OPTS = "-N -F1.2 -A16m -I0.01 -Iw15" +DEFAULT_POOL_SIZE = "4" # the binary defaults to a single connection +DEFAULT_QUEUE_SIZE = "65536" + + +def require(name): + value = os.environ.get(name) + if not value: + sys.exit(f"{name} is required") + return value + + +def rts_args(): + """RELAY_RTS_OPTS holds bare options; the +RTS/-RTS markers are added here.""" + opts = [ + o + for o in shlex.split(os.environ.get("RELAY_RTS_OPTS") or DEFAULT_RTS_OPTS) + if o not in ("+RTS", "-RTS") + ] + return ["+RTS", *opts, "-RTS"] if opts else [] + + +def find_address(text): + for token in text.split(): + if token.startswith("https://") or token.startswith("simplex:"): + return token + return None + + +def capture_address(oneshot): + """Create the address if needed and save it. Runs before the relay starts.""" + cmd = oneshot + ["--create-schema", "-t", "0", "-e", "/sa"] + try: + out = subprocess.run( + cmd, + stdout=subprocess.PIPE, + stderr=subprocess.STDOUT, + text=True, + errors="replace", + timeout=CAPTURE_TIMEOUT, + ).stdout + except subprocess.TimeoutExpired as exc: + out = exc.stdout or "" + sys.stdout.write(out) + sys.stdout.flush() + + address = find_address(out) + if address: + with open(ADDR_FILE, "w") as f: + f.write(address + "\n") + else: + sys.stderr.write("entrypoint: relay address not captured; will retry next start\n") + + +def main(): + name = require("RELAY_NAME") + domain = require("RELAY_WEB_DOMAIN") + conn = require("DB_CONN") + image_file = os.environ.get("RELAY_IMAGE_FILE") + + os.makedirs(f"{WEB_ROOT}/channel", exist_ok=True) + os.makedirs("/out", exist_ok=True) + + common = [BIN, "--relay", "--headless", "--user-display-name", name] + + # Only applied when the address is created, which the one-shot below does. + address_server = os.environ.get("RELAY_ADDRESS_SERVER") + if address_server: + common += ["--relay-address-server", address_server] + + # The image is applied only when the profile is created. + if not os.path.exists(ADDR_FILE): + oneshot = common + (["--user-image-file", image_file] if image_file else []) + ["-d", conn] + capture_address(oneshot) + + relay = common + [ + "--relay-web-domain", domain, + "--relay-web-dir", f"{WEB_ROOT}/channel", + "--relay-web-cors-file", f"{WEB_ROOT}/cors.conf", + "--relay-web-interval", "30", + "-d", conn, + "--create-schema", + "--pool-size", os.environ.get("RELAY_POOL_SIZE") or DEFAULT_POOL_SIZE, + "--queue-size", os.environ.get("RELAY_QUEUE_SIZE") or DEFAULT_QUEUE_SIZE, + ] + rts_args() + os.execvp(relay[0], relay) + + +if __name__ == "__main__": + main() diff --git a/scripts/relay/sql_exporter.yml b/scripts/relay/sql_exporter.yml new file mode 100644 index 0000000000..ee8f62218b --- /dev/null +++ b/scripts/relay/sql_exporter.yml @@ -0,0 +1,71 @@ +global: + min_interval: 0s + max_connections: 3 + max_idle_connections: 3 + +target: + name: chat_relay + # Replaced by SQLEXPORTER_TARGET_DSN. A non-empty value is required here + # because the DSN is validated before environment variables are applied. + data_source_name: "postgresql://replaced-by-env" + collectors: [chat_relay] + +collectors: + - collector_name: chat_relay + metrics: + - metric_name: chat_relay_channels + type: gauge + help: "Channels by relay status." + key_labels: [status] + values: [channels] + query: | + SELECT relay_own_status AS status, count(*) AS channels + FROM simplex_v1_chat_schema.groups + WHERE relay_own_status IS NOT NULL + GROUP BY relay_own_status + + - metric_name: chat_relay_published_channels + type: gauge + help: "Served channels that have a public address." + values: [channels] + query: | + SELECT count(*) AS channels + FROM simplex_v1_chat_schema.groups g + JOIN simplex_v1_chat_schema.group_profiles gp + ON gp.group_profile_id = g.group_profile_id + WHERE gp.public_group_id IS NOT NULL + AND g.relay_own_status IN ('active', 'accepted') + + - metric_name: chat_relay_members + type: gauge + help: "Members across all channels." + values: [members] + query: | + SELECT count(*) AS members FROM simplex_v1_chat_schema.group_members + + - metric_name: chat_relay_pending_deliveries + type: gauge + help: "Messages queued for delivery." + values: [deliveries] + query: | + SELECT count(*) AS deliveries + FROM simplex_v1_chat_schema.msg_deliveries + WHERE delivery_status = 'snd_pending' + + - metric_name: chat_relay_oldest_pending_delivery_seconds + type: gauge + help: "Age of the oldest message queued for delivery." + values: [age] + query: | + SELECT COALESCE(EXTRACT(EPOCH FROM (now() - min(created_at))), 0) AS age + FROM simplex_v1_chat_schema.msg_deliveries + WHERE delivery_status = 'snd_pending' + + - metric_name: chat_relay_messages_24h + type: gauge + help: "Chat items created in the last 24 hours." + values: [messages] + query: | + SELECT count(*) AS messages + FROM simplex_v1_chat_schema.chat_items + WHERE created_at > now() - interval '24 hours' From 4e1d14a10ae898a1070db6c5dcec102d9112d4b3 Mon Sep 17 00:00:00 2001 From: Evgeny Poberezkin Date: Wed, 26 Aug 2026 10:55:57 +0100 Subject: [PATCH 03/15] website: update livestream page --- website/src/crowdfunding.md | 2 +- website/src/livestream.html | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/website/src/crowdfunding.md b/website/src/crowdfunding.md index 0ccc1d38c6..8d0c1c37b8 100644 --- a/website/src/crowdfunding.md +++ b/website/src/crowdfunding.md @@ -33,7 +33,7 @@ SimpleX Chat — the company that builds the first and the only messaging ne Live event SimpleX Chat: Foundation for the Future -Livestream and Q&A for SimpleX Chat crowdfunding investors. Tuesday, September 15, 2026 at 5:00 PM UTC. +Livestream and Q&A about SimpleX Chat roadmap and crowdfunding. Tuesday, September 15, 2026 at 5:00 PM UTC. Open event page diff --git a/website/src/livestream.html b/website/src/livestream.html index dc88553b30..093fae001b 100644 --- a/website/src/livestream.html +++ b/website/src/livestream.html @@ -70,7 +70,7 @@ templateEngineOverride: njk

SimpleX Chat:
Foundation
For the Future

-

Livestream and Q&A for SimpleX Chat Crowdfunding Investors

+

Livestream and Q&A about SimpleX Chat roadmap and crowdfunding

From 10adabf5f7290aa5488e9533eb66afb64546136e Mon Sep 17 00:00:00 2001 From: Evgeny Date: Wed, 26 Aug 2026 11:43:36 +0100 Subject: [PATCH 04/15] ui: show role (if exists) and remove "new" in open channel/group alerts (#7417) * ui: show role (if exists) and remove "new" in open channel/group alerts * restore removed strings * info color * docs --------- Co-authored-by: Evgeny @ SimpleX Chat <259188159+evgeny-simplex@users.noreply.github.com> --- .../ios/Shared/Views/Helpers/ShareSheet.swift | 7 +++- .../Shared/Views/NewChat/NewChatView.swift | 32 +++++++++++++------ apps/ios/bg.lproj/Localizable.strings | 12 +++++++ apps/ios/cs.lproj/Localizable.strings | 12 +++++++ apps/ios/de.lproj/Localizable.strings | 21 ++++++++++++ apps/ios/es.lproj/Localizable.strings | 21 ++++++++++++ apps/ios/fi.lproj/Localizable.strings | 12 +++++++ apps/ios/fr.lproj/Localizable.strings | 21 ++++++++++++ apps/ios/hu.lproj/Localizable.strings | 21 ++++++++++++ apps/ios/it.lproj/Localizable.strings | 21 ++++++++++++ apps/ios/ja.lproj/Localizable.strings | 12 +++++++ apps/ios/nl.lproj/Localizable.strings | 15 +++++++++ apps/ios/pl.lproj/Localizable.strings | 15 +++++++++ apps/ios/product/flows/connection.md | 2 +- apps/ios/product/views/new-chat.md | 12 +++++-- apps/ios/ru.lproj/Localizable.strings | 21 ++++++++++++ apps/ios/spec/client/navigation.md | 4 +-- apps/ios/th.lproj/Localizable.strings | 12 +++++++ apps/ios/tr.lproj/Localizable.strings | 15 +++++++++ apps/ios/uk.lproj/Localizable.strings | 15 +++++++++ apps/ios/zh-Hans.lproj/Localizable.strings | 18 +++++++++++ .../common/views/helpers/AlertManager.kt | 2 ++ .../common/views/newchat/ConnectPlan.kt | 19 +++++++++-- .../commonMain/resources/MR/ar/strings.xml | 7 ++++ .../commonMain/resources/MR/base/strings.xml | 7 ++++ .../commonMain/resources/MR/bg/strings.xml | 5 +++ .../commonMain/resources/MR/bn/strings.xml | 1 + .../commonMain/resources/MR/ca/strings.xml | 5 +++ .../commonMain/resources/MR/cs/strings.xml | 5 +++ .../commonMain/resources/MR/da/strings.xml | 2 ++ .../commonMain/resources/MR/de/strings.xml | 7 ++++ .../commonMain/resources/MR/el/strings.xml | 5 +++ .../commonMain/resources/MR/es/strings.xml | 7 ++++ .../commonMain/resources/MR/fa/strings.xml | 5 +++ .../commonMain/resources/MR/fi/strings.xml | 4 +++ .../commonMain/resources/MR/fr/strings.xml | 7 ++++ .../commonMain/resources/MR/hi/strings.xml | 3 ++ .../commonMain/resources/MR/hr/strings.xml | 5 +++ .../commonMain/resources/MR/hu/strings.xml | 7 ++++ .../commonMain/resources/MR/in/strings.xml | 7 ++++ .../commonMain/resources/MR/it/strings.xml | 7 ++++ .../commonMain/resources/MR/iw/strings.xml | 4 +++ .../commonMain/resources/MR/ja/strings.xml | 6 ++++ .../commonMain/resources/MR/ko/strings.xml | 4 +++ .../commonMain/resources/MR/lt/strings.xml | 4 +++ .../commonMain/resources/MR/lv/strings.xml | 1 + .../commonMain/resources/MR/ml/strings.xml | 3 ++ .../resources/MR/nb-rNO/strings.xml | 1 + .../commonMain/resources/MR/nl/strings.xml | 5 +++ .../commonMain/resources/MR/pl/strings.xml | 5 +++ .../resources/MR/pt-rBR/strings.xml | 7 ++++ .../commonMain/resources/MR/pt/strings.xml | 3 ++ .../commonMain/resources/MR/ro/strings.xml | 5 +++ .../commonMain/resources/MR/ru/strings.xml | 7 ++++ .../commonMain/resources/MR/sk/strings.xml | 7 ++++ .../commonMain/resources/MR/th/strings.xml | 4 +++ .../commonMain/resources/MR/tr/strings.xml | 7 ++++ .../commonMain/resources/MR/uk/strings.xml | 6 ++++ .../commonMain/resources/MR/vi/strings.xml | 6 ++++ .../resources/MR/zh-rCN/strings.xml | 7 ++++ .../resources/MR/zh-rTW/strings.xml | 7 ++++ 61 files changed, 518 insertions(+), 19 deletions(-) diff --git a/apps/ios/Shared/Views/Helpers/ShareSheet.swift b/apps/ios/Shared/Views/Helpers/ShareSheet.swift index 670cc7cae0..56e437e5c8 100644 --- a/apps/ios/Shared/Views/Helpers/ShareSheet.swift +++ b/apps/ios/Shared/Views/Helpers/ShareSheet.swift @@ -142,6 +142,7 @@ class OpenChatAlertViewController: UIViewController { private let profileBadge: LocalBadge? private let subtitle: String? private let information: String? + private let secondaryInformation: Bool private let cancelTitle: String private let confirmTitle: String? private let secondTitle: String? @@ -156,6 +157,7 @@ class OpenChatAlertViewController: UIViewController { profileBadge: LocalBadge? = nil, subtitle: String? = nil, information: String? = nil, + secondaryInformation: Bool = false, cancelTitle: String = "Cancel", confirmTitle: String? = "Open", secondTitle: String? = nil, @@ -169,6 +171,7 @@ class OpenChatAlertViewController: UIViewController { self.profileBadge = profileBadge self.subtitle = subtitle self.information = information + self.secondaryInformation = secondaryInformation self.cancelTitle = cancelTitle self.confirmTitle = confirmTitle self.secondTitle = secondTitle @@ -248,7 +251,7 @@ class OpenChatAlertViewController: UIViewController { let infoLabel = UILabel() infoLabel.text = information infoLabel.font = UIFont.preferredFont(forTextStyle: .footnote) - infoLabel.textColor = .label + infoLabel.textColor = secondaryInformation ? .secondaryLabel : .label infoLabel.numberOfLines = 3 infoLabel.textAlignment = .center infoLabel.translatesAutoresizingMaskIntoConstraints = false @@ -426,6 +429,7 @@ func showOpenChatAlert( theme: AppTheme, subtitle: String? = nil, information: String? = nil, + secondaryInformation: Bool = false, cancelTitle: String = "Cancel", confirmTitle: String? = "Open", secondTitle: String? = nil, @@ -446,6 +450,7 @@ func showOpenChatAlert( profileBadge: profileBadge, subtitle: subtitle, information: information, + secondaryInformation: secondaryInformation, cancelTitle: cancelTitle, confirmTitle: confirmTitle, secondTitle: secondTitle, diff --git a/apps/ios/Shared/Views/NewChat/NewChatView.swift b/apps/ios/Shared/Views/NewChat/NewChatView.swift index 51746766bd..f938fb0063 100644 --- a/apps/ios/Shared/Views/NewChat/NewChatView.swift +++ b/apps/ios/Shared/Views/NewChat/NewChatView.swift @@ -1195,8 +1195,8 @@ private func showPrepareGroupAlert( information: ownerVerificationMessage(ownerVerification), cancelTitle: NSLocalizedString("Cancel", comment: "new chat action"), confirmTitle: isChannel - ? NSLocalizedString("Open new channel", comment: "new chat action") - : NSLocalizedString("Open new group", comment: "new chat action"), + ? NSLocalizedString("Open channel", comment: "new chat action") + : NSLocalizedString("Open group", comment: "new chat action"), secondTitle: connectOtherButton, onCancel: { cleanup?() }, onConfirm: { @@ -1259,6 +1259,20 @@ private func showOpenKnownContactAlert( ) } +private func memberRoleInformation(_ role: GroupMemberRole, isChannel: Bool) -> String { + switch role { + case .observer: isChannel + ? NSLocalizedString("You are a subscriber", comment: "new chat alert") + : NSLocalizedString("You are an observer", comment: "new chat alert") + case .moderator: NSLocalizedString("You are a moderator", comment: "new chat alert") + case .admin: NSLocalizedString("You are an admin", comment: "new chat alert") + case .owner: NSLocalizedString("You are an owner", comment: "new chat alert") + default: isChannel + ? NSLocalizedString("You are a contributor", comment: "new chat alert") + : NSLocalizedString("You are a member", comment: "new chat alert") + } +} + private func showOpenKnownGroupAlert( _ groupInfo: GroupInfo, theme: AppTheme, @@ -1278,18 +1292,16 @@ private func showOpenKnownGroupAlert( ), theme: theme, subtitle: groupInfo.useRelays ? subscriberCount : nil, + information: groupInfo.nextConnectPrepared || groupInfo.businessChat != nil + ? nil + : memberRoleInformation(groupInfo.membership.memberRole, isChannel: groupInfo.useRelays), + secondaryInformation: true, cancelTitle: NSLocalizedString("Cancel", comment: "new chat action"), confirmTitle: groupInfo.useRelays - ? ( groupInfo.nextConnectPrepared - ? NSLocalizedString("Open new channel", comment: "new chat action") - : NSLocalizedString("Open channel", comment: "new chat action") - ) + ? NSLocalizedString("Open channel", comment: "new chat action") : groupInfo.businessChat == nil - ? ( groupInfo.nextConnectPrepared - ? NSLocalizedString("Open new group", comment: "new chat action") - : NSLocalizedString("Open group", comment: "new chat action") - ) + ? NSLocalizedString("Open group", comment: "new chat action") : ( groupInfo.nextConnectPrepared ? NSLocalizedString("Open new chat", comment: "new chat action") : NSLocalizedString("Open chat", comment: "new chat action") diff --git a/apps/ios/bg.lproj/Localizable.strings b/apps/ios/bg.lproj/Localizable.strings index e27ef696d4..05f5185e4d 100644 --- a/apps/ios/bg.lproj/Localizable.strings +++ b/apps/ios/bg.lproj/Localizable.strings @@ -4420,6 +4420,18 @@ server test failure */ /* No comment provided by engineer. */ "you are observer" = "вие сте наблюдател"; +/* new chat alert */ +"You are an observer" = "Вие сте наблюдател"; + +/* new chat alert */ +"You are a member" = "Вие сте член"; + +/* new chat alert */ +"You are an admin" = "Вие сте админ"; + +/* new chat alert */ +"You are an owner" = "Вие сте собственик"; + /* snd group event chat item */ "you blocked %@" = "вие блокирахте %@"; diff --git a/apps/ios/cs.lproj/Localizable.strings b/apps/ios/cs.lproj/Localizable.strings index 165177876c..cb596480dc 100644 --- a/apps/ios/cs.lproj/Localizable.strings +++ b/apps/ios/cs.lproj/Localizable.strings @@ -3514,6 +3514,18 @@ server test failure */ /* No comment provided by engineer. */ "you are observer" = "jste pozorovatel"; +/* new chat alert */ +"You are an observer" = "Jste pozorovatel"; + +/* new chat alert */ +"You are a member" = "Jste člen"; + +/* new chat alert */ +"You are an admin" = "Jste správce"; + +/* new chat alert */ +"You are an owner" = "Jste vlastník"; + /* No comment provided by engineer. */ "You can accept calls from lock screen, without device and app authentication." = "Můžete přijímat hovory z obrazovky zámku, bez ověření zařízení a aplikace."; diff --git a/apps/ios/de.lproj/Localizable.strings b/apps/ios/de.lproj/Localizable.strings index dda49b67b8..924cbc2735 100644 --- a/apps/ios/de.lproj/Localizable.strings +++ b/apps/ios/de.lproj/Localizable.strings @@ -7052,6 +7052,27 @@ alert title */ /* No comment provided by engineer. */ "you are observer" = "Sie sind Beobachter"; +/* new chat alert */ +"You are an observer" = "Sie sind Beobachter"; + +/* new chat alert */ +"You are a member" = "Sie sind Mitglied"; + +/* new chat alert */ +"You are a moderator" = "Sie sind Moderator"; + +/* new chat alert */ +"You are an admin" = "Sie sind Admin"; + +/* new chat alert */ +"You are an owner" = "Sie sind Eigentümer"; + +/* new chat alert */ +"You are a subscriber" = "Sie sind Abonnent"; + +/* new chat alert */ +"You are a contributor" = "Sie sind Mitwirkender"; + /* No comment provided by engineer. */ "you are subscriber" = "Sie sind Abonnent"; diff --git a/apps/ios/es.lproj/Localizable.strings b/apps/ios/es.lproj/Localizable.strings index 5c72f88b2c..02f6415cca 100644 --- a/apps/ios/es.lproj/Localizable.strings +++ b/apps/ios/es.lproj/Localizable.strings @@ -7052,6 +7052,27 @@ alert title */ /* No comment provided by engineer. */ "you are observer" = "Tu rol es observador"; +/* new chat alert */ +"You are an observer" = "Eres observador"; + +/* new chat alert */ +"You are a member" = "Eres miembro"; + +/* new chat alert */ +"You are a moderator" = "Eres moderador"; + +/* new chat alert */ +"You are an admin" = "Eres administrador"; + +/* new chat alert */ +"You are an owner" = "Eres propietario"; + +/* new chat alert */ +"You are a subscriber" = "Eres suscriptor"; + +/* new chat alert */ +"You are a contributor" = "Eres colaborador"; + /* No comment provided by engineer. */ "you are subscriber" = "eres suscriptor"; diff --git a/apps/ios/fi.lproj/Localizable.strings b/apps/ios/fi.lproj/Localizable.strings index dfe1b6479d..8abb4e69f8 100644 --- a/apps/ios/fi.lproj/Localizable.strings +++ b/apps/ios/fi.lproj/Localizable.strings @@ -3150,6 +3150,18 @@ server test failure */ /* No comment provided by engineer. */ "you are observer" = "olet tarkkailija"; +/* new chat alert */ +"You are an observer" = "Olet tarkkailija"; + +/* new chat alert */ +"You are a member" = "Olet jäsen"; + +/* new chat alert */ +"You are an admin" = "Olet ylläpitäjä"; + +/* new chat alert */ +"You are an owner" = "Olet omistaja"; + /* No comment provided by engineer. */ "You can accept calls from lock screen, without device and app authentication." = "Voit vastaanottaa puheluita lukitusnäytöltä ilman laitteen ja sovelluksen todennusta."; diff --git a/apps/ios/fr.lproj/Localizable.strings b/apps/ios/fr.lproj/Localizable.strings index c3bea2ff40..6816de9f5f 100644 --- a/apps/ios/fr.lproj/Localizable.strings +++ b/apps/ios/fr.lproj/Localizable.strings @@ -7052,6 +7052,27 @@ alert title */ /* No comment provided by engineer. */ "you are observer" = "vous êtes observateur"; +/* new chat alert */ +"You are an observer" = "Vous êtes observateur"; + +/* new chat alert */ +"You are a member" = "Vous êtes membre"; + +/* new chat alert */ +"You are a moderator" = "Vous êtes modérateur"; + +/* new chat alert */ +"You are an admin" = "Vous êtes admin"; + +/* new chat alert */ +"You are an owner" = "Vous êtes propriétaire"; + +/* new chat alert */ +"You are a subscriber" = "Vous êtes abonné·e"; + +/* new chat alert */ +"You are a contributor" = "Vous êtes contributeur"; + /* No comment provided by engineer. */ "you are subscriber" = "vous êtes abonné·e"; diff --git a/apps/ios/hu.lproj/Localizable.strings b/apps/ios/hu.lproj/Localizable.strings index 873fc56584..004111f914 100644 --- a/apps/ios/hu.lproj/Localizable.strings +++ b/apps/ios/hu.lproj/Localizable.strings @@ -7052,6 +7052,27 @@ alert title */ /* No comment provided by engineer. */ "you are observer" = "Ön megfigyelő"; +/* new chat alert */ +"You are an observer" = "Ön megfigyelő"; + +/* new chat alert */ +"You are a member" = "Ön tag"; + +/* new chat alert */ +"You are a moderator" = "Ön moderátor"; + +/* new chat alert */ +"You are an admin" = "Ön adminisztrátor"; + +/* new chat alert */ +"You are an owner" = "Ön tulajdonos"; + +/* new chat alert */ +"You are a subscriber" = "Ön feliratkozó"; + +/* new chat alert */ +"You are a contributor" = "Ön közreműködő"; + /* No comment provided by engineer. */ "you are subscriber" = "Ön feliratkozó"; diff --git a/apps/ios/it.lproj/Localizable.strings b/apps/ios/it.lproj/Localizable.strings index c57daef544..dd364b27ce 100644 --- a/apps/ios/it.lproj/Localizable.strings +++ b/apps/ios/it.lproj/Localizable.strings @@ -7052,6 +7052,27 @@ alert title */ /* No comment provided by engineer. */ "you are observer" = "sei un osservatore"; +/* new chat alert */ +"You are an observer" = "Sei un osservatore"; + +/* new chat alert */ +"You are a member" = "Sei un membro"; + +/* new chat alert */ +"You are a moderator" = "Sei un moderatore"; + +/* new chat alert */ +"You are an admin" = "Sei un amministratore"; + +/* new chat alert */ +"You are an owner" = "Sei un proprietario"; + +/* new chat alert */ +"You are a subscriber" = "Sei iscritto/a"; + +/* new chat alert */ +"You are a contributor" = "Sei un collaboratore"; + /* No comment provided by engineer. */ "you are subscriber" = "sei iscritto/a"; diff --git a/apps/ios/ja.lproj/Localizable.strings b/apps/ios/ja.lproj/Localizable.strings index 60ef7e2d36..3eb5fa5d8b 100644 --- a/apps/ios/ja.lproj/Localizable.strings +++ b/apps/ios/ja.lproj/Localizable.strings @@ -3484,6 +3484,18 @@ server test failure */ /* No comment provided by engineer. */ "you are observer" = "あなたはオブザーバーです"; +/* new chat alert */ +"You are an observer" = "あなたはオブザーバーです"; + +/* new chat alert */ +"You are a member" = "あなたはメンバーです"; + +/* new chat alert */ +"You are an admin" = "あなたは管理者です"; + +/* new chat alert */ +"You are an owner" = "あなたはオーナーです"; + /* No comment provided by engineer. */ "You can accept calls from lock screen, without device and app authentication." = "デバイスやアプリの認証を行わずに、ロック画面から通話を受けることができます。"; diff --git a/apps/ios/nl.lproj/Localizable.strings b/apps/ios/nl.lproj/Localizable.strings index d644779e7d..7164633090 100644 --- a/apps/ios/nl.lproj/Localizable.strings +++ b/apps/ios/nl.lproj/Localizable.strings @@ -5739,6 +5739,21 @@ server test failure */ /* No comment provided by engineer. */ "you are observer" = "je bent waarnemer"; +/* new chat alert */ +"You are an observer" = "Je bent waarnemer"; + +/* new chat alert */ +"You are a member" = "Je bent lid"; + +/* new chat alert */ +"You are a moderator" = "Je bent moderator"; + +/* new chat alert */ +"You are an admin" = "Je bent beheerder"; + +/* new chat alert */ +"You are an owner" = "Je bent eigenaar"; + /* snd group event chat item */ "you blocked %@" = "je hebt %@ geblokkeerd"; diff --git a/apps/ios/pl.lproj/Localizable.strings b/apps/ios/pl.lproj/Localizable.strings index a41a8bc0ea..eb5074dc00 100644 --- a/apps/ios/pl.lproj/Localizable.strings +++ b/apps/ios/pl.lproj/Localizable.strings @@ -6095,6 +6095,21 @@ alert title */ /* No comment provided by engineer. */ "you are observer" = "jesteś obserwatorem"; +/* new chat alert */ +"You are an observer" = "Jesteś obserwatorem"; + +/* new chat alert */ +"You are a member" = "Jesteś członkiem"; + +/* new chat alert */ +"You are a moderator" = "Jesteś moderatorem"; + +/* new chat alert */ +"You are an admin" = "Jesteś administratorem"; + +/* new chat alert */ +"You are an owner" = "Jesteś właścicielem"; + /* snd group event chat item */ "you blocked %@" = "zablokowałeś %@"; diff --git a/apps/ios/product/flows/connection.md b/apps/ios/product/flows/connection.md index 115e420f7c..7073e07070 100644 --- a/apps/ios/product/flows/connection.md +++ b/apps/ios/product/flows/connection.md @@ -113,7 +113,7 @@ Establishing contact between two SimpleX Chat users. SimpleX uses no user identi 1. When connecting to a channel link (`GroupShortLinkInfo.direct == false`): 2. `apiPrepareGroup(connLink:directLink:groupShortLinkData:)` is called with `directLink: false`, preparing the channel locally. 3. `groupShortLinkInfo.groupRelays` (hostnames) stored in `ChatModel.shared.channelRelayHostnames[groupId]`. -4. Pre-join UI shows channel icon and "Open new channel" (not "Open new group"). +4. Pre-join UI shows channel icon and "Open channel" (not "Open group"). 5. `apiConnectPreparedGroup(groupId:incognito:msg:)` returns `(GroupInfo, [RelayConnectionResult])`. 6. `RelayConnectionResult` contains `relayMember: GroupMember` and optional `relayError: ChatError?` per relay. 7. Relay members are upserted to `chatModel.groupMembers`; `channelRelayHostnames` entry is cleared. diff --git a/apps/ios/product/views/new-chat.md b/apps/ios/product/views/new-chat.md index 1ab84c098a..0d1e384325 100644 --- a/apps/ios/product/views/new-chat.md +++ b/apps/ios/product/views/new-chat.md @@ -118,10 +118,18 @@ When `planAndConnect` encounters a `.simplexLink(_, .relay, _, _)`, it shows a " | Context | Channel behavior | Group behavior | |---|---|---| | Prepare alert icon | `antenna.radiowaves.left.and.right.circle.fill` | `person.2.circle.fill` | -| Prepare alert title | "Open new channel" | "Open new group" | +| Prepare alert title | "Open channel" | "Open group" | | Error text | "Error opening channel" | "Error opening group" | | Own-link confirm | "This is your link for channel" with only "Open channel" + "Cancel" (no incognito/profile options) | Full incognito/profile selection | -| Known group alert | "Open channel" / "Open new channel" | "Open group" / "Open new group" | +| Known group alert | "Open channel", with the membership role line | "Open group", with the membership role line | + +The known group alert shows an information line with the user's role, in the +secondary color (matching the subscriber count): "You are a subscriber" / +"You are a contributor" for channels, "You are an observer" / "You are a +member" for groups, and "You are a moderator" / "You are an admin" / +"You are an owner" for both. The line is omitted for prepared chats +(`nextConnectPrepared`) and business chats, so the prepare and known alerts +differ only by this line. ### Pre-Join Relay Info diff --git a/apps/ios/ru.lproj/Localizable.strings b/apps/ios/ru.lproj/Localizable.strings index 389cce9efe..92bb8f4590 100644 --- a/apps/ios/ru.lproj/Localizable.strings +++ b/apps/ios/ru.lproj/Localizable.strings @@ -7055,6 +7055,27 @@ alert title */ /* No comment provided by engineer. */ "you are subscriber" = "Вы подписчик"; +/* new chat alert */ +"You are an observer" = "Вы читатель"; + +/* new chat alert */ +"You are a member" = "Вы член группы"; + +/* new chat alert */ +"You are a moderator" = "Вы модератор"; + +/* new chat alert */ +"You are an admin" = "Вы админ"; + +/* new chat alert */ +"You are an owner" = "Вы владелец"; + +/* new chat alert */ +"You are a subscriber" = "Вы подписчик"; + +/* new chat alert */ +"You are a contributor" = "Вы соавтор"; + /* snd group event chat item */ "you blocked %@" = "Вы заблокировали %@"; diff --git a/apps/ios/spec/client/navigation.md b/apps/ios/spec/client/navigation.md index 920780cc0f..64d0940e39 100644 --- a/apps/ios/spec/client/navigation.md +++ b/apps/ios/spec/client/navigation.md @@ -344,7 +344,7 @@ Similarly, in `planAndConnect()` (`NewChatView.swift`), `.simplexLink(_, .relay, When `groupShortLinkInfo?.direct == false` (channel relay link), the prepare alert uses: - Channel icon: `antenna.radiowaves.left.and.right.circle.fill` -- Title: "Open new channel" +- Title: "Open channel" - Error: "Error opening channel" - `apiPrepareGroup` call passes `directLink: false` - Stores `groupShortLinkInfo.groupRelays` in `ChatModel.shared.channelRelayHostnames` @@ -355,7 +355,7 @@ For channels: shows "This is your link for channel" with only "Open channel" + " ### Known Group Alert (`showOpenKnownGroupAlert`) -For channels (`groupInfo.useRelays`): titles become "Open channel" / "Open new channel". +For channels (`groupInfo.useRelays`): the title is "Open channel"; for groups, "Open group"; business chats keep "Open chat" / "Open new chat". Unless the chat is merely prepared (`nextConnectPrepared`) or a business chat, the alert shows an information line with the user's membership role (`memberRoleInformation`) in the secondary color: subscriber/contributor for channels, observer/member for groups, moderator/admin/owner for both. --- diff --git a/apps/ios/th.lproj/Localizable.strings b/apps/ios/th.lproj/Localizable.strings index 8114685292..d92174d281 100644 --- a/apps/ios/th.lproj/Localizable.strings +++ b/apps/ios/th.lproj/Localizable.strings @@ -3054,6 +3054,18 @@ server test failure */ /* No comment provided by engineer. */ "you are observer" = "คุณเป็นผู้สังเกตการณ์"; +/* new chat alert */ +"You are an observer" = "คุณเป็นผู้สังเกตการณ์"; + +/* new chat alert */ +"You are a member" = "คุณเป็นสมาชิก"; + +/* new chat alert */ +"You are an admin" = "คุณเป็นผู้ดูแลระบบ"; + +/* new chat alert */ +"You are an owner" = "คุณเป็นเจ้าของ"; + /* No comment provided by engineer. */ "You can accept calls from lock screen, without device and app authentication." = "คุณสามารถรับสายจากหน้าจอล็อกโดยไม่ต้องมีการตรวจสอบสิทธิ์อุปกรณ์และแอป"; diff --git a/apps/ios/tr.lproj/Localizable.strings b/apps/ios/tr.lproj/Localizable.strings index 4ac1840c6e..c5251f482e 100644 --- a/apps/ios/tr.lproj/Localizable.strings +++ b/apps/ios/tr.lproj/Localizable.strings @@ -6042,6 +6042,21 @@ alert title */ /* No comment provided by engineer. */ "you are observer" = "gözlemcisiniz"; +/* new chat alert */ +"You are an observer" = "Gözlemcisiniz"; + +/* new chat alert */ +"You are a member" = "Üyesiniz"; + +/* new chat alert */ +"You are a moderator" = "Moderatörsünüz"; + +/* new chat alert */ +"You are an admin" = "Yöneticisiniz"; + +/* new chat alert */ +"You are an owner" = "Sahipsiniz"; + /* snd group event chat item */ "you blocked %@" = "engelledin %@"; diff --git a/apps/ios/uk.lproj/Localizable.strings b/apps/ios/uk.lproj/Localizable.strings index cd46b33067..513b7c34b6 100644 --- a/apps/ios/uk.lproj/Localizable.strings +++ b/apps/ios/uk.lproj/Localizable.strings @@ -6057,6 +6057,21 @@ alert title */ /* No comment provided by engineer. */ "you are observer" = "ви спостерігач"; +/* new chat alert */ +"You are an observer" = "Ви спостерігач"; + +/* new chat alert */ +"You are a member" = "Ви учасник"; + +/* new chat alert */ +"You are a moderator" = "Ви модератор"; + +/* new chat alert */ +"You are an admin" = "Ви адмін"; + +/* new chat alert */ +"You are an owner" = "Ви власник"; + /* snd group event chat item */ "you blocked %@" = "ви заблокували %@"; diff --git a/apps/ios/zh-Hans.lproj/Localizable.strings b/apps/ios/zh-Hans.lproj/Localizable.strings index b4ae54a6c5..7340147bf7 100644 --- a/apps/ios/zh-Hans.lproj/Localizable.strings +++ b/apps/ios/zh-Hans.lproj/Localizable.strings @@ -6916,6 +6916,24 @@ alert title */ /* No comment provided by engineer. */ "you are subscriber" = "你是订阅者"; +/* new chat alert */ +"You are an observer" = "你是观察者"; + +/* new chat alert */ +"You are a member" = "你是成员"; + +/* new chat alert */ +"You are a moderator" = "你是协管"; + +/* new chat alert */ +"You are an admin" = "你是管理员"; + +/* new chat alert */ +"You are an owner" = "你是群主"; + +/* new chat alert */ +"You are a subscriber" = "你是订阅者"; + /* snd group event chat item */ "you blocked %@" = "你阻止了%@"; diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/helpers/AlertManager.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/helpers/AlertManager.kt index f70e4d0048..62ba2c10f3 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/helpers/AlertManager.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/helpers/AlertManager.kt @@ -294,6 +294,7 @@ class AlertManager { nameCaption: String? = null, subtitle: String? = null, information: String? = null, + secondaryInformation: Boolean = false, confirmText: String? = generalGetString(MR.strings.connect_plan_open_chat), onConfirm: (() -> Unit)? = null, connectOtherButton: String? = null, @@ -378,6 +379,7 @@ class AlertManager { information, textAlign = TextAlign.Center, style = MaterialTheme.typography.body2, + color = if (secondaryInformation) MaterialTheme.colors.secondary else Color.Unspecified, maxLines = 3, modifier = Modifier.fillMaxWidth() ) diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/newchat/ConnectPlan.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/newchat/ConnectPlan.kt index 161681c91d..5e5769891a 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/newchat/ConnectPlan.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/newchat/ConnectPlan.kt @@ -656,11 +656,24 @@ private fun showOpenKnownGroupAlert(chatModel: ChatModel, rhId: Long?, close: (( }, nameCaption = planSimplexName?.shortStr, subtitle = subscriberCount, + information = if (groupInfo.nextConnectPrepared || groupInfo.businessChat != null) { + null + } else { + val isChannel = groupInfo.useRelays + generalGetString(when (groupInfo.membership.memberRole) { + GroupMemberRole.Observer -> if (isChannel) MR.strings.connect_plan_you_are_subscriber else MR.strings.connect_plan_you_are_observer + GroupMemberRole.Moderator -> MR.strings.connect_plan_you_are_moderator + GroupMemberRole.Admin -> MR.strings.connect_plan_you_are_admin + GroupMemberRole.Owner -> MR.strings.connect_plan_you_are_owner + else -> if (isChannel) MR.strings.connect_plan_you_are_contributor else MR.strings.connect_plan_you_are_member + }) + }, + secondaryInformation = true, confirmText = generalGetString( if (groupInfo.useRelays) { - if (groupInfo.nextConnectPrepared) MR.strings.connect_plan_open_new_channel else MR.strings.connect_plan_open_channel + MR.strings.connect_plan_open_channel } else if (groupInfo.businessChat == null) { - if (groupInfo.nextConnectPrepared) MR.strings.connect_plan_open_new_group else MR.strings.connect_plan_open_group + MR.strings.connect_plan_open_group } else { if (groupInfo.nextConnectPrepared) MR.strings.connect_plan_open_new_chat else MR.strings.connect_plan_open_chat } @@ -761,7 +774,7 @@ fun showPrepareGroupAlert( nameCaption = planSimplexName?.shortStr, subtitle = subscriberCount, information = ownerVerificationMessage(ownerVerification), - confirmText = generalGetString(if (isChannel) MR.strings.connect_plan_open_new_channel else MR.strings.connect_plan_open_new_group), + confirmText = generalGetString(if (isChannel) MR.strings.connect_plan_open_channel else MR.strings.connect_plan_open_group), onConfirm = { AlertManager.privacySensitive.hideAlert() withBGApi { diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/ar/strings.xml b/apps/multiplatform/common/src/commonMain/resources/MR/ar/strings.xml index f66d9c8f0f..0df6dafacb 100644 --- a/apps/multiplatform/common/src/commonMain/resources/MR/ar/strings.xml +++ b/apps/multiplatform/common/src/commonMain/resources/MR/ar/strings.xml @@ -1219,6 +1219,13 @@ تحديث إعدادات الشبكة؟ سيؤدي تحديث الإعدادات إلى إعادة توصيل العميل بجميع الخوادم. أنت المراقب + أنت المراقب + أنت عضو + أنت مُشرف + أنت المُدير + أنت المالك + أنت مشترك + أنت مساهم أنت مدعو إلى المجموعة في انتظار التأكيد… خطأ غير معروف في قاعدة البيانات: %s diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/base/strings.xml b/apps/multiplatform/common/src/commonMain/resources/MR/base/strings.xml index 9e1da97c27..45f63d4cf9 100644 --- a/apps/multiplatform/common/src/commonMain/resources/MR/base/strings.xml +++ b/apps/multiplatform/common/src/commonMain/resources/MR/base/strings.xml @@ -20,6 +20,11 @@ Open new chat Open group Open new group + You are an observer + You are a member + You are a moderator + You are an admin + You are an owner Invalid link Please check that SimpleX link is correct. @@ -3171,6 +3176,8 @@ This is a chat relay address, it cannot be used to connect. Open channel Open new channel + You are a subscriber + You are a contributor Your channel %1$s!]]> Error opening channel diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/bg/strings.xml b/apps/multiplatform/common/src/commonMain/resources/MR/bg/strings.xml index 65c19107c7..c79aa07a1e 100644 --- a/apps/multiplatform/common/src/commonMain/resources/MR/bg/strings.xml +++ b/apps/multiplatform/common/src/commonMain/resources/MR/bg/strings.xml @@ -1301,6 +1301,11 @@ Отключи Ще трябва да се идентифицирате, когато стартирате или възобновите приложението след 30 секунди във фонов режим. вие сте наблюдател + Вие сте наблюдател + Вие сте член + Вие сте модератор + Вие сте админ + Вие сте собственик Видео се свържете с разработчиците на SimpleX Chat, за да задавате въпроси и да получавате актуализации;.]]> иска да се свърже с вас! diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/bn/strings.xml b/apps/multiplatform/common/src/commonMain/resources/MR/bn/strings.xml index bb448339bd..dfcfb1685c 100644 --- a/apps/multiplatform/common/src/commonMain/resources/MR/bn/strings.xml +++ b/apps/multiplatform/common/src/commonMain/resources/MR/bn/strings.xml @@ -23,6 +23,7 @@ কলটি গৃহীত হয়েছে পূর্বনির্ধারিত সার্ভারগুলি যুক্ত করুন অ্যাডমিন + আপনি একজন অ্যাডমিন স্বাগত বার্তা যুক্ত করুন প্রোফাইল যুক্ত করুন আনুষঙ্গিক রং diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/ca/strings.xml b/apps/multiplatform/common/src/commonMain/resources/MR/ca/strings.xml index 5467ddf043..3d49c533ff 100644 --- a/apps/multiplatform/common/src/commonMain/resources/MR/ca/strings.xml +++ b/apps/multiplatform/common/src/commonMain/resources/MR/ca/strings.xml @@ -1715,6 +1715,11 @@ La imatge no es pot descodificar. Si us plau, proveu amb una imatge diferent o contacteu amb els desenvolupadors. El vídeo no es pot descodificar. Si us plau, prova amb un vídeo diferent o contacta amb els desenvolupadors. ets observador + Ets observador + Ets membre + Ets moderador + Ets administrador + Ets propietari ets observador(a) Poseu-vos en contacte amb l\'administrador del grup. Només els propietaris del grup poden activar fitxers i mitjans. diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/cs/strings.xml b/apps/multiplatform/common/src/commonMain/resources/MR/cs/strings.xml index 5dfe53fb1c..16241e07e2 100644 --- a/apps/multiplatform/common/src/commonMain/resources/MR/cs/strings.xml +++ b/apps/multiplatform/common/src/commonMain/resources/MR/cs/strings.xml @@ -931,6 +931,11 @@ Moderovat Kontaktujte prosím správce skupiny. jste pozorovatel + Jste pozorovatel + Jste člen + Jste moderátor + Jste správce + Jste vlastník pozorovatel Zpráva bude smazána pro všechny členy. Zpráva bude pro všechny členy označena jako moderovaná. diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/da/strings.xml b/apps/multiplatform/common/src/commonMain/resources/MR/da/strings.xml index 03c9a49278..82f8ae5770 100644 --- a/apps/multiplatform/common/src/commonMain/resources/MR/da/strings.xml +++ b/apps/multiplatform/common/src/commonMain/resources/MR/da/strings.xml @@ -635,6 +635,8 @@ du forlod kan ikke sende beskeder du er observatør + Du er observatør + Du er administrator gennemgået af administratorer medlemmet har en gammel version Billede diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/de/strings.xml b/apps/multiplatform/common/src/commonMain/resources/MR/de/strings.xml index f62d8256ba..26ddf2107d 100644 --- a/apps/multiplatform/common/src/commonMain/resources/MR/de/strings.xml +++ b/apps/multiplatform/common/src/commonMain/resources/MR/de/strings.xml @@ -1012,6 +1012,13 @@ Moderieren Diese Nachricht wird für alle Mitglieder als moderiert gekennzeichnet. Sie sind Beobachter + Sie sind Beobachter + Sie sind Mitglied + Sie sind Moderator + Sie sind Admin + Sie sind Eigentümer + Sie sind Abonnent + Sie sind Mitwirkender Sie sind Beobachter Beobachter Anfängliche Rolle diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/el/strings.xml b/apps/multiplatform/common/src/commonMain/resources/MR/el/strings.xml index 5caed9b913..73abd7d876 100644 --- a/apps/multiplatform/common/src/commonMain/resources/MR/el/strings.xml +++ b/apps/multiplatform/common/src/commonMain/resources/MR/el/strings.xml @@ -2429,6 +2429,11 @@ Δεν είσαι συνδεδεμένος στον διακομιστή που χρησιμοποιείται για τη λήψη μηνυμάτων από αυτή τη σύνδεση (δεν υπάρχει συνδρομή). Δεν είσαι συνδεδεμένος σε αυτούς τους διακομιστές. Για την παράδοση μηνυμάτων σε αυτούς, χρησιμοποιείται ιδιωτική δρομολόγηση. είσαι παρατηρητής + Είσαι παρατηρητής + Είσαι μέλος + Είσαι διαχειριστής + Είσαι διαχειριστής + Είσαι ιδιοκτήτης είσαι παρατηρητής μπλόκαρες %s Μπορείς να το αλλάξεις στις ρυθμίσεις Εμφάνισης. diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/es/strings.xml b/apps/multiplatform/common/src/commonMain/resources/MR/es/strings.xml index 41cb15e0c6..4e63f2c76a 100644 --- a/apps/multiplatform/common/src/commonMain/resources/MR/es/strings.xml +++ b/apps/multiplatform/common/src/commonMain/resources/MR/es/strings.xml @@ -2665,6 +2665,13 @@ Espera respuesta eres suscriptor + Eres observador + Eres miembro + Eres moderador + Eres administrador + Eres propietario + Eres suscriptor + Eres colaborador Puedes compartir el enlace o código QR. Cualquiera podrá unirse al canal. Te conectaste al canal mediante este enlace de servidor. Tu canal diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/fa/strings.xml b/apps/multiplatform/common/src/commonMain/resources/MR/fa/strings.xml index 71387e9561..b65fc5ab93 100644 --- a/apps/multiplatform/common/src/commonMain/resources/MR/fa/strings.xml +++ b/apps/multiplatform/common/src/commonMain/resources/MR/fa/strings.xml @@ -437,6 +437,11 @@ تایید شما ممکن نیست؛ لطفا دوباره امتحان کنید. فایل شما ناظر هستید + شما ناظر هستید + شما عضو هستید + شما مدیر هستید + شما مدیر هستید + شما صاحب هستید چت پاک شود؟ تمام پیام‌ها حذف خواهند شد - این عمل قابل برگشت نیست! حذف diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/fi/strings.xml b/apps/multiplatform/common/src/commonMain/resources/MR/fi/strings.xml index 7ae3f506a2..e5e7c525a5 100644 --- a/apps/multiplatform/common/src/commonMain/resources/MR/fi/strings.xml +++ b/apps/multiplatform/common/src/commonMain/resources/MR/fi/strings.xml @@ -1169,6 +1169,10 @@ SimpleX-taustapalvelu – se kuluttaa muutaman prosentin akusta päivässä.]]> Avaa olet tarkkailija + Olet tarkkailija + Olet jäsen + Olet ylläpitäjä + Olet omistaja Liikaa videoita! Ääniviesti Odottaa videota diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/fr/strings.xml b/apps/multiplatform/common/src/commonMain/resources/MR/fr/strings.xml index 10b0215d3b..1997a54dca 100644 --- a/apps/multiplatform/common/src/commonMain/resources/MR/fr/strings.xml +++ b/apps/multiplatform/common/src/commonMain/resources/MR/fr/strings.xml @@ -929,6 +929,13 @@ Le message sera supprimé pour tous les membres. Le message sera marqué comme modéré pour tous les membres. vous êtes observateur + Vous êtes observateur + Vous êtes membre + Vous êtes modérateur(trice) + Vous êtes admin + Vous êtes propriétaire + Vous êtes abonné + Vous êtes contributeur Erreur lors de la mise à jour du lien de groupe Rôle initial Veuillez contacter l\'administrateur du groupe. diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/hi/strings.xml b/apps/multiplatform/common/src/commonMain/resources/MR/hi/strings.xml index f3b1df5a40..3f17a6d8a7 100644 --- a/apps/multiplatform/common/src/commonMain/resources/MR/hi/strings.xml +++ b/apps/multiplatform/common/src/commonMain/resources/MR/hi/strings.xml @@ -283,6 +283,9 @@ सदस्य को समूह से निकाल दिया जाएगा - इसे पूर्ववत नहीं किया जा सकता! सदस्य सदस्य + आप सदस्य हैं + आप व्यवस्थापक हैं + आप स्वामी हैं खोजें बंद है संपर्क पते के माध्यम से कनेक्ट करें? diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/hr/strings.xml b/apps/multiplatform/common/src/commonMain/resources/MR/hr/strings.xml index b64dc65119..3493f56711 100644 --- a/apps/multiplatform/common/src/commonMain/resources/MR/hr/strings.xml +++ b/apps/multiplatform/common/src/commonMain/resources/MR/hr/strings.xml @@ -1435,6 +1435,11 @@ Za pozive je potreban podrazumevani veb pretraživač. Molimo vas da konfigurišete podrazumevani pretraživač u sistemu i podelite više informacija sa programerima. odblokirali ste %s Vi ste posmatrač. + Vi ste posmatrač + Vi ste član + Vi ste moderator + Vi ste administrator + Vi ste vlasnik Unapređena privatnost i bezbednost Migriraj na drugi uređaj pomoću QR koda. odbijeno diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/hu/strings.xml b/apps/multiplatform/common/src/commonMain/resources/MR/hu/strings.xml index f6551d7572..2fca87fdcd 100644 --- a/apps/multiplatform/common/src/commonMain/resources/MR/hu/strings.xml +++ b/apps/multiplatform/common/src/commonMain/resources/MR/hu/strings.xml @@ -1127,6 +1127,13 @@ Üzenetek fogadása… %s és %s kapcsolódott Ön megfigyelő + Ön megfigyelő + Ön tag + Ön moderátor + Ön adminisztrátor + Ön tulajdonos + Ön feliratkozó + Ön közreműködő Port Jelkód beállítása Újdonságok diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/in/strings.xml b/apps/multiplatform/common/src/commonMain/resources/MR/in/strings.xml index 544e6d572e..b5c35bc7c6 100644 --- a/apps/multiplatform/common/src/commonMain/resources/MR/in/strings.xml +++ b/apps/multiplatform/common/src/commonMain/resources/MR/in/strings.xml @@ -2010,6 +2010,13 @@ Kunci salah atau alamat potongan berkas tidak dikenal - kemungkinan berkas dihapus. Versi server tidak kompatibel dengan pengaturan jaringan. Anda adalah pengamat + Anda adalah pengamat + Anda adalah anggota + Anda adalah moderator + Anda adalah admin + Anda adalah pemilik + Anda adalah pelanggan + Anda adalah kontributor Untuk memulai obrolan baru Video Koneksi yang Anda terima akan dibatalkan! diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/it/strings.xml b/apps/multiplatform/common/src/commonMain/resources/MR/it/strings.xml index d5a4080b61..eba8b408df 100644 --- a/apps/multiplatform/common/src/commonMain/resources/MR/it/strings.xml +++ b/apps/multiplatform/common/src/commonMain/resources/MR/it/strings.xml @@ -934,6 +934,13 @@ Il messaggio verrà eliminato per tutti i membri. Il messaggio sarà segnato come moderato per tutti i membri. sei un osservatore + Sei un osservatore + Sei un membro + Sei un moderatore + Sei un amministratore + Sei un proprietario + Sei iscritto/a + Sei un collaboratore Ruolo iniziale Errore nell\'aggiornamento del link del gruppo osservatore diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/iw/strings.xml b/apps/multiplatform/common/src/commonMain/resources/MR/iw/strings.xml index efa9f0d1f8..8487614c9a 100644 --- a/apps/multiplatform/common/src/commonMain/resources/MR/iw/strings.xml +++ b/apps/multiplatform/common/src/commonMain/resources/MR/iw/strings.xml @@ -1128,6 +1128,10 @@ %1$d הודעות שדולגו שבועות הינך צופה + הינך צופה + הינך חבר קבוצה + הינך מנהל + הינך בעלים אין באפשרותך לשלוח הודעות! סרטון נשלח הודעה קולית diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/ja/strings.xml b/apps/multiplatform/common/src/commonMain/resources/MR/ja/strings.xml index 61e887f092..1e0686d2de 100644 --- a/apps/multiplatform/common/src/commonMain/resources/MR/ja/strings.xml +++ b/apps/multiplatform/common/src/commonMain/resources/MR/ja/strings.xml @@ -990,6 +990,12 @@ ビデオ メッセージのハッシュ値問題 あなたはオブザーバーです + あなたはオブザーバーです + あなたはメンバーです + あなたはモデレーターです + あなたは管理者です + あなたはオーナーです + あなたは購読者です グループの管理者に連絡してください。 動画は相手がアップロードを完了した時点で受信するができます。 .onion hostを使用する、は「いいえ」に設定します。]]> diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/ko/strings.xml b/apps/multiplatform/common/src/commonMain/resources/MR/ko/strings.xml index ea87347a13..a987a0c92e 100644 --- a/apps/multiplatform/common/src/commonMain/resources/MR/ko/strings.xml +++ b/apps/multiplatform/common/src/commonMain/resources/MR/ko/strings.xml @@ -468,6 +468,10 @@ 나감 멤버 소유자 + 당신은 관찰자입니다 + 당신은 멤버입니다 + 당신은 관리자입니다 + 당신은 소유자입니다 그룹 삭제됨 초대됨 강퇴됨 diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/lt/strings.xml b/apps/multiplatform/common/src/commonMain/resources/MR/lt/strings.xml index eeba2cb6c0..aa1da521bb 100644 --- a/apps/multiplatform/common/src/commonMain/resources/MR/lt/strings.xml +++ b/apps/multiplatform/common/src/commonMain/resources/MR/lt/strings.xml @@ -1547,6 +1547,10 @@ Jums reikės autentifikuotis kai paleidžiate programėlę arba pratęsiate jos naudojimą po 30 sekundžių fone. Nėra istorijos esate stebėtojas + Esate stebėtojas + Esate narys + Esate administratorius + Esate savininkas (saugo tik grupės nariai) Jūsų SimpleX adresas Nuskanuoti serverio QR kodą diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/lv/strings.xml b/apps/multiplatform/common/src/commonMain/resources/MR/lv/strings.xml index 673fe74c77..a6882871c7 100644 --- a/apps/multiplatform/common/src/commonMain/resources/MR/lv/strings.xml +++ b/apps/multiplatform/common/src/commonMain/resources/MR/lv/strings.xml @@ -283,6 +283,7 @@ Nevar nosūtīt ziņu, jūs esat izgājis Nevar nosūtīt ziņu Jūs esat vērotājs + Jūs esat vērotājs Pārbaudīts ar administratoriem Nevar nosūtīt ziņu, dalībniekam ir veca versija Nevar Nosūtīt Komandas Brīdinājuma Teksts diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/ml/strings.xml b/apps/multiplatform/common/src/commonMain/resources/MR/ml/strings.xml index 19aa92a4a0..008ad2bb81 100644 --- a/apps/multiplatform/common/src/commonMain/resources/MR/ml/strings.xml +++ b/apps/multiplatform/common/src/commonMain/resources/MR/ml/strings.xml @@ -295,6 +295,9 @@ സ്വാഗതം! ഈ വാചകം ക്രമീകരണങ്ങളിൽ ലഭ്യമാണ് നിങ്ങൾ നിരീക്ഷകനാണ് + നിങ്ങൾ നിരീക്ഷകനാണ് + നിങ്ങൾ അംഗമാണ് + നിങ്ങൾ ഉടമയാണ് തീർപ്പാക്കാത്തത് സന്ദേശം അയയ്ക്കുക തത്സമയ സന്ദേശം അയയ്ക്കുക diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/nb-rNO/strings.xml b/apps/multiplatform/common/src/commonMain/resources/MR/nb-rNO/strings.xml index 1275c31573..eeddfd1b38 100644 --- a/apps/multiplatform/common/src/commonMain/resources/MR/nb-rNO/strings.xml +++ b/apps/multiplatform/common/src/commonMain/resources/MR/nb-rNO/strings.xml @@ -61,6 +61,7 @@ Legg til velkomstmelding Legg til dine teammedlemmer i samtalene. administrator + Du er administrator administratorer Administratorer kan blokkere ett medlem for alle. Administratorer kan lage lenker for å bli med i grupper. diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/nl/strings.xml b/apps/multiplatform/common/src/commonMain/resources/MR/nl/strings.xml index 4db882608f..2ec65534a4 100644 --- a/apps/multiplatform/common/src/commonMain/resources/MR/nl/strings.xml +++ b/apps/multiplatform/common/src/commonMain/resources/MR/nl/strings.xml @@ -936,6 +936,11 @@ Waarnemer jij bent waarnemer je bent waarnemer + Je bent waarnemer + Je bent lid + Je bent moderator + Je bent beheerder + Je bent eigenaar Systeem Audio en video oproepen Bevestig wachtwoord diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/pl/strings.xml b/apps/multiplatform/common/src/commonMain/resources/MR/pl/strings.xml index 8792d7ffac..bf47cebdb5 100644 --- a/apps/multiplatform/common/src/commonMain/resources/MR/pl/strings.xml +++ b/apps/multiplatform/common/src/commonMain/resources/MR/pl/strings.xml @@ -179,6 +179,11 @@ Oczekiwanie na film Oczekiwanie na film jesteś obserwatorem + Jesteś obserwatorem + Jesteś członkiem + Jesteś moderatorem + Jesteś administratorem + Jesteś właścicielem Jesteś obserwatorem Połączony Obecnie maksymalny obsługiwany rozmiar pliku to %1$s. diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/pt-rBR/strings.xml b/apps/multiplatform/common/src/commonMain/resources/MR/pt-rBR/strings.xml index 256f388cf7..3b28d2fd20 100644 --- a/apps/multiplatform/common/src/commonMain/resources/MR/pt-rBR/strings.xml +++ b/apps/multiplatform/common/src/commonMain/resources/MR/pt-rBR/strings.xml @@ -874,6 +874,13 @@ Trocar Totalmente descentralizado — visível apenas para os membros. você é um observador + Você é um observador + Você é um membro + Você é um moderador + Você é um administrador + Você é um proprietário + Você é um inscrito + Você é um colaborador Mensagem de voz (%1$s) Compartilhar link Para proteger sua privacidade, o SimpleX usa IDs separados para cada um dos seus contatos. diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/pt/strings.xml b/apps/multiplatform/common/src/commonMain/resources/MR/pt/strings.xml index 08285dbe78..6ab12f76f6 100644 --- a/apps/multiplatform/common/src/commonMain/resources/MR/pt/strings.xml +++ b/apps/multiplatform/common/src/commonMain/resources/MR/pt/strings.xml @@ -88,6 +88,9 @@ enviada você está convidado para o grupo você é observador + Você é observador + Você é membro + Você é administrador Notificações Desconectado Definir nome do contato… diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/ro/strings.xml b/apps/multiplatform/common/src/commonMain/resources/MR/ro/strings.xml index dfde10dbbf..f2437af22b 100644 --- a/apps/multiplatform/common/src/commonMain/resources/MR/ro/strings.xml +++ b/apps/multiplatform/common/src/commonMain/resources/MR/ro/strings.xml @@ -2195,6 +2195,11 @@ Se opresc conversațiile Total ești observator + Ești observator + Ești membru + Ești moderator + Ești administrator + Ești proprietar Videoclipul nu poate fi decodificat. Vă rugăm să încercați un alt videoclip sau să contactați dezvoltatorii. Puteți copia și micșora dimensiunea mesajului pentru a-l trimite. aștept răspunsul… diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/ru/strings.xml b/apps/multiplatform/common/src/commonMain/resources/MR/ru/strings.xml index e769453e0a..44f3d3858e 100644 --- a/apps/multiplatform/common/src/commonMain/resources/MR/ru/strings.xml +++ b/apps/multiplatform/common/src/commonMain/resources/MR/ru/strings.xml @@ -2771,6 +2771,13 @@ (от владельца) Ошибка при публикации канала Вы подписчик + Вы читатель + Вы член группы + Вы модератор + Вы админ + Вы владелец + Вы подписчик + Вы соавтор Новая одноразовая ссылка Или покажите QR лично или через видеозвонок. Используйте этот адрес в профиле социальных сетей, на сайте или в подписи email. diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/sk/strings.xml b/apps/multiplatform/common/src/commonMain/resources/MR/sk/strings.xml index ed729b3ce2..dfd1f3d1f5 100644 --- a/apps/multiplatform/common/src/commonMain/resources/MR/sk/strings.xml +++ b/apps/multiplatform/common/src/commonMain/resources/MR/sk/strings.xml @@ -595,6 +595,13 @@ Počiatočná rola člen moderátor + Ste pozorovateľ + Ste člen + Ste moderátor + Ste správca + Ste majiteľ + Ste odberateľ + Ste prispievateľ moderátori Nová skupinová rola: Moderátor Nová rola člena diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/th/strings.xml b/apps/multiplatform/common/src/commonMain/resources/MR/th/strings.xml index ddc258490f..da2aea2868 100644 --- a/apps/multiplatform/common/src/commonMain/resources/MR/th/strings.xml +++ b/apps/multiplatform/common/src/commonMain/resources/MR/th/strings.xml @@ -1078,6 +1078,10 @@ คุณไม่มีการแชท แชท คุณเป็นผู้สังเกตการณ์ + คุณเป็นผู้สังเกตการณ์ + คุณเป็นสมาชิก + คุณเป็นผู้ดูแลระบบ + คุณเป็นเจ้าของ ภาพไม่สามารถถอดรหัส ได้ โปรดลองใช้รูปภาพอื่นหรือติดต่อนักพัฒนา คุณไม่สามารถส่งข้อความได้! กําลังรอภาพ diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/tr/strings.xml b/apps/multiplatform/common/src/commonMain/resources/MR/tr/strings.xml index 42eec6e0bc..bacc84b0f7 100644 --- a/apps/multiplatform/common/src/commonMain/resources/MR/tr/strings.xml +++ b/apps/multiplatform/common/src/commonMain/resources/MR/tr/strings.xml @@ -842,6 +842,13 @@ Gruba davetlisiniz Hiç sohbetiniz yok Gözlemcisiniz + Gözlemcisiniz + Üyesiniz + Yöneticisiniz + Yöneticisiniz + Sahipsiniz + Abonesiniz + Katkıda bulunansınız sen gözlemcisin Güvenlik kodunu görüntüle Sesli mesaj gönderebilmeniz için kişinizin de sesli mesaj göndermesine izin vermeniz gerekir. diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/uk/strings.xml b/apps/multiplatform/common/src/commonMain/resources/MR/uk/strings.xml index 5ef2a424cf..457fd4abe1 100644 --- a/apps/multiplatform/common/src/commonMain/resources/MR/uk/strings.xml +++ b/apps/multiplatform/common/src/commonMain/resources/MR/uk/strings.xml @@ -1155,6 +1155,12 @@ Забагато зображень! Забагато відео! ви спостерігач + Ви спостерігач + Ви учасник + Ви модератор + Ви адміністратор + Ви власник + Ви автор кольоровий дзвінок завершено %1$s помилка дзвінка diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/vi/strings.xml b/apps/multiplatform/common/src/commonMain/resources/MR/vi/strings.xml index ca361a494b..aac2109d11 100644 --- a/apps/multiplatform/common/src/commonMain/resources/MR/vi/strings.xml +++ b/apps/multiplatform/common/src/commonMain/resources/MR/vi/strings.xml @@ -2213,6 +2213,12 @@ Bạn có thể tùy chỉnh các máy chủ thông qua cài đặt. Bạn có thể đặt tên kết nối, để nhớ xem đường dẫn đã được chia sẻ với ai. bạn là quan sát viên + Bạn là quan sát viên + Bạn là thành viên + Bạn là kiểm duyệt viên + Bạn là quản trị viên + Bạn là chủ sở hữu + Bạn là người theo dõi Bạn có thể sao chép và giảm kích thước tin nhắn để gửi nó đi. Bạn có thể bật chúng vào lúc sau thông qua cài đặt Quyền riêng tư & Bảo mật của ứng dụng. Bạn có thể ẩn hoặc tắt thông báo một hồ sơ người dùng - giữ nó trong phần menu. diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/zh-rCN/strings.xml b/apps/multiplatform/common/src/commonMain/resources/MR/zh-rCN/strings.xml index e4849cea39..2d51120ac2 100644 --- a/apps/multiplatform/common/src/commonMain/resources/MR/zh-rCN/strings.xml +++ b/apps/multiplatform/common/src/commonMain/resources/MR/zh-rCN/strings.xml @@ -927,6 +927,13 @@ 删除成员消息? 观察员 你是观察者 + 你是观察员 + 你是成员 + 你是协管 + 你是管理员 + 你是群主 + 你是订阅者 + 你是贡献者 更新群链接错误 你是观察员 初始角色 diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/zh-rTW/strings.xml b/apps/multiplatform/common/src/commonMain/resources/MR/zh-rTW/strings.xml index e0f280ee2e..05e3cd8030 100644 --- a/apps/multiplatform/common/src/commonMain/resources/MR/zh-rTW/strings.xml +++ b/apps/multiplatform/common/src/commonMain/resources/MR/zh-rTW/strings.xml @@ -926,6 +926,13 @@ 該訊息將對所有成員標記為已移除。 你是觀察員 你是觀察員 + 你是觀察員 + 你是成員 + 你是審核員 + 你是管理員 + 你是擁有者 + 你是訂閱者 + 你是貢獻者 觀察員 更新群組連接時出錯 請聯絡群組管理員。 From 3923cb0f2a756f084f78fc4d6a7e383bd61766f3 Mon Sep 17 00:00:00 2001 From: Evgeny Date: Wed, 26 Aug 2026 18:33:44 +0100 Subject: [PATCH 05/15] website: update livestream page (#7422) Co-authored-by: Evgeny @ SimpleX Chat <259188159+evgeny-simplex@users.noreply.github.com> --- website/src/js/livestream.js | 10 ++++++++++ website/src/livestream.html | 1 + 2 files changed, 11 insertions(+) diff --git a/website/src/js/livestream.js b/website/src/js/livestream.js index 0b170bd9df..71941cffba 100644 --- a/website/src/js/livestream.js +++ b/website/src/js/livestream.js @@ -19,6 +19,15 @@ function showLocalTime() { local.removeAttribute('hidden'); } +function setSignupSource() { + const field = document.querySelector('input[name="SOURCE"]'); + if (!field) return; + + const inHash = new URLSearchParams(location.hash.replace(/^#\??/, '')).get('utm_source'); + const source = inHash ?? new URLSearchParams(location.search).get('utm_source'); + if (source && /^[\w.-]{1,40}$/.test(source)) field.value = source; +} + function setupRegisterOverlay() { const overlay = document.getElementById('register'); const openBtn = document.querySelector('.register-btn'); @@ -67,5 +76,6 @@ function trackNavColor() { } showLocalTime(); +setSignupSource(); setupRegisterOverlay(); trackNavColor(); diff --git a/website/src/livestream.html b/website/src/livestream.html index 093fae001b..57dd3c28af 100644 --- a/website/src/livestream.html +++ b/website/src/livestream.html @@ -96,6 +96,7 @@ templateEngineOverride: njk
+ From f2856c1be13f111e5e43dd2ddbdce1e985376fb5 Mon Sep 17 00:00:00 2001 From: Evgeny Poberezkin Date: Thu, 27 Aug 2026 08:01:18 +0100 Subject: [PATCH 06/15] website: fix image --- website/src/img/crowdfunding/why-now.png | Bin 0 -> 268208 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 website/src/img/crowdfunding/why-now.png diff --git a/website/src/img/crowdfunding/why-now.png b/website/src/img/crowdfunding/why-now.png new file mode 100644 index 0000000000000000000000000000000000000000..ee03c19686c4969847786f37e9fe5939eec2d4c7 GIT binary patch literal 268208 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%0D}84z7Yh4nt~F&8xkLIiAL25-ZSe3G;OQX)j` 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%0Ao~Jg(U`tWI2PdVG7j=Fr_PC7z@%) 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 Ee+79M4*&oF literal 0 HcmV?d00001 From d7e0f859764a2e90af13da2d9acfcd8153b026f7 Mon Sep 17 00:00:00 2001 From: Narasimha-sc <166327228+Narasimha-sc@users.noreply.github.com> Date: Thu, 27 Aug 2026 10:08:05 +0000 Subject: [PATCH 07/15] desktop: fix rotated video squashed on playback and preview rotated twice (#7413) * desktop: fix rotated video squashed on playback and preview rotated twice vlc applies the display matrix before a frame reaches the vmem callback, so the buffer has to be requested with the sides swapped for the transposed orientations, and the snapshot must not be rotated again by hand. Read the snapshot on the event thread, where the render callback writes it, and draw the inline playback surface with FillWidth so a video narrower than the item fills it like its preview does. Bound the requested buffer: the size comes from a received file, so it is capped by area, cannot be zero, and a frame that does not fill the bitmap is dropped. * desktop: harden the video frame path against crafted files Only transpose the buffer for the track's own sides - the size libvlc passes is already rotated, so swapping it would recreate the squash for a file declaring a rotation with a zero-sized track. Copy the frame inside the render callback, on vlc's thread, where the native buffer is guaranteed to exist, and hand only the copy to the event thread. Drop a frame rendered with a format the bitmap was not sized by, or arriving before any buffer was allocated. Divide the pixel budget by a side pinned at 1 instead of scaling both sides, so a 2000000000x1 declaration cannot take 45 times the budget. Publish the bitmap only when skia took the pixels, size the copy after a rewind, and log a failed snapshot conversion instead of throwing it into callers that have no handler for it. --- .../videoplayer/SkiaBitmapVideoSurface.kt | 91 +++++++++++++-- .../common/platform/VideoPlayer.desktop.kt | 28 ++--- .../views/chat/item/CIVideoView.desktop.kt | 6 +- .../chat/item/ImageFullScreenView.desktop.kt | 4 +- ...26-08-24-desktop-rotated-video-playback.md | 109 ++++++++++++++++++ 5 files changed, 214 insertions(+), 24 deletions(-) create mode 100644 plans/2026-08-24-desktop-rotated-video-playback.md diff --git a/apps/multiplatform/common/src/desktopMain/kotlin/chat/simplex/common/other/videoplayer/SkiaBitmapVideoSurface.kt b/apps/multiplatform/common/src/desktopMain/kotlin/chat/simplex/common/other/videoplayer/SkiaBitmapVideoSurface.kt index f5bba2d344..26748b8425 100644 --- a/apps/multiplatform/common/src/desktopMain/kotlin/chat/simplex/common/other/videoplayer/SkiaBitmapVideoSurface.kt +++ b/apps/multiplatform/common/src/desktopMain/kotlin/chat/simplex/common/other/videoplayer/SkiaBitmapVideoSurface.kt @@ -8,6 +8,7 @@ import org.jetbrains.skia.Bitmap import org.jetbrains.skia.ColorAlphaType import org.jetbrains.skia.ColorType import org.jetbrains.skia.ImageInfo +import uk.co.caprica.vlcj.media.VideoOrientation import uk.co.caprica.vlcj.player.base.MediaPlayer import uk.co.caprica.vlcj.player.embedded.videosurface.CallbackVideoSurface import uk.co.caprica.vlcj.player.embedded.videosurface.VideoSurface @@ -22,10 +23,42 @@ import javax.swing.SwingUtilities // https://github.com/JetBrains/compose-multiplatform/pull/3336/files internal class SkiaBitmapVideoSurface : VideoSurface(VideoSurfaceAdapters.getVideoSurfaceAdapter()) { + private companion object { + // A received file declares its own size, and vlc allocates the buffer we ask for here (and we copy + // it into a java array of the same size), so an unbounded request is an out-of-memory from a message. + // Above the budget the picture is scaled down keeping its aspect - 4096x4096 of RV32 is 64 MB + const val MAX_BUFFER_PIXELS = 4096L * 4096L + val transposedOrientations = setOf( + VideoOrientation.LEFT_TOP, + VideoOrientation.LEFT_BOTTOM, + VideoOrientation.RIGHT_TOP, + VideoOrientation.RIGHT_BOTTOM, + ) + + // Keeps the aspect, never returns a side below 1, and keeps width * height * 4 inside an Int + fun boundedSize(width: Int, height: Int): Pair { + val w = width.coerceAtLeast(1) + val h = height.coerceAtLeast(1) + val pixels = w.toLong() * h.toLong() + if (pixels <= MAX_BUFFER_PIXELS) return w to h + val scale = kotlin.math.sqrt(MAX_BUFFER_PIXELS.toDouble() / pixels.toDouble()) + var sw = (w * scale).toInt().coerceAtLeast(1) + var sh = (h * scale).toInt().coerceAtLeast(1) + // Scaling both sides assumes both shrink; a side pinned at 1 only shrinks the area linearly, + // so a 2_000_000_000 x 1 declaration would still get 45 times the budget. Divide the budget + // by the pinned side instead + if (sw.toLong() * sh.toLong() > MAX_BUFFER_PIXELS) { + if (sw >= sh) sw = (MAX_BUFFER_PIXELS / sh).toInt() else sh = (MAX_BUFFER_PIXELS / sw).toInt() + } + return sw to sh + } + } + private val videoSurface = SkiaBitmapVideoSurface() @Volatile private var mediaPlayer: MediaPlayer? = null private lateinit var imageInfo: ImageInfo private lateinit var frameBytes: ByteArray + @Volatile private var allocated = false private val skiaBitmap: Bitmap = Bitmap() private val composeBitmap = mutableStateOf(null) @@ -49,19 +82,37 @@ internal class SkiaBitmapVideoSurface : VideoSurface(VideoSurfaceAdapters.getVid val tracks = player?.media()?.info()?.videoTracks() val playingTrack = player?.video()?.track() val track = tracks?.firstOrNull { it.id() == playingTrack } ?: tracks?.singleOrNull() - this.sourceWidth = track?.width()?.takeIf { it > 0 } ?: sourceWidth - this.sourceHeight = track?.height()?.takeIf { it > 0 } ?: sourceHeight - return RV32BufferFormat(this.sourceWidth, this.sourceHeight) + // Both track sides or neither: one side from the track and the other from the padded size libvlc + // passed never described the same picture, and transposing such a pair compounds the mismatch + val trackW = track?.width() ?: 0 + val trackH = track?.height() ?: 0 + val useTrack = trackW > 0 && trackH > 0 + val width = if (useTrack) trackW else sourceWidth + val height = if (useTrack) trackH else sourceHeight + // The track carries the size before rotation, but vlc rotates the picture before it reaches + // this buffer, so for the transposed orientations the picture arrives with the sides swapped. + // Only when the track's own sides are used: the size libvlc passed is already rotated + val transposed = useTrack && (track?.orientation() in transposedOrientations) + val orientedWidth = if (transposed) height else width + val orientedHeight = if (transposed) width else height + val (w, h) = boundedSize(orientedWidth, orientedHeight) + this.sourceWidth = w + this.sourceHeight = h + return RV32BufferFormat(w, h) } override fun allocatedBuffers(buffers: Array) { - frameBytes = buffers[0].run { ByteArray(remaining()).also(::get) } + // rewind first, as in display: remaining() on an already-read buffer would size this short + frameBytes = buffers[0].run { rewind(); ByteArray(remaining()).also(::get) } imageInfo = ImageInfo( sourceWidth, sourceHeight, ColorType.BGRA_8888, ColorAlphaType.PREMUL, ) + // Last, and volatile: vlc calls this on its own thread while display reads imageInfo and + // frameBytes on the event thread, and this write is what publishes them to it + this@SkiaBitmapVideoSurface.allocated = true } } @@ -71,11 +122,35 @@ internal class SkiaBitmapVideoSurface : VideoSurface(VideoSurfaceAdapters.getVid nativeBuffers: Array, bufferFormat: BufferFormat, ) { + // The native buffer belongs to vlc and is only guaranteed to exist for the duration of this + // callback, so everything that touches it has to happen here, on vlc's thread - deferred code + // would read through a pointer vlc may have freed on a format change. Only the copy is done + // here; skia and compose are event-thread objects and get the private copy + if (!this@SkiaBitmapVideoSurface.allocated) return + val info = imageInfo + // imageInfo comes from the format that was last allocated and this frame from the format it was + // rendered with; they differ across a renegotiation, and the pixels would be read with the + // wrong stride, so display only what matches + if (bufferFormat.width != info.width || bufferFormat.height != info.height) return + val rowBytes = info.width.toLong() * 4 + val needed = rowBytes * info.height + val buffer = nativeBuffers[0] + // rewind first: the same buffer is reused for every frame, so its position is at the end of + // the previous read and remaining() would be 0 + buffer.rewind() + // Capture the array: a renegotiation replaces the field with one of another size before the + // deferred install runs, and info's geometry must be read against the array it was copied into. + // The next frame's copy can overwrite it while the install reads - a torn frame at worst, since + // the geometry checks above hold for both frames of the same format + val bytes = frameBytes + if (needed > bytes.size || buffer.remaining().toLong() < needed) return + buffer.get(bytes, 0, needed.toInt()) SwingUtilities.invokeLater { - nativeBuffers[0].rewind() - nativeBuffers[0].get(frameBytes) - skiaBitmap.installPixels(imageInfo, frameBytes, bufferFormat.width * 4) - composeBitmap.value = skiaBitmap.asComposeImageBitmap() + // installPixels reports whether skia took the pixels; publishing the bitmap when it did not + // would hand compose a bitmap with no pixels behind it + if (skiaBitmap.installPixels(info, bytes, rowBytes.toInt())) { + composeBitmap.value = skiaBitmap.asComposeImageBitmap() + } } } } diff --git a/apps/multiplatform/common/src/desktopMain/kotlin/chat/simplex/common/platform/VideoPlayer.desktop.kt b/apps/multiplatform/common/src/desktopMain/kotlin/chat/simplex/common/platform/VideoPlayer.desktop.kt index 768d2f421d..d9375f5d79 100644 --- a/apps/multiplatform/common/src/desktopMain/kotlin/chat/simplex/common/platform/VideoPlayer.desktop.kt +++ b/apps/multiplatform/common/src/desktopMain/kotlin/chat/simplex/common/platform/VideoPlayer.desktop.kt @@ -11,7 +11,6 @@ import uk.co.caprica.vlcj.media.Media import uk.co.caprica.vlcj.media.MediaEventAdapter import uk.co.caprica.vlcj.media.MediaParsedStatus import uk.co.caprica.vlcj.media.ParseFlag -import uk.co.caprica.vlcj.media.VideoOrientation import uk.co.caprica.vlcj.player.base.* import uk.co.caprica.vlcj.player.component.CallbackMediaPlayerComponent import uk.co.caprica.vlcj.player.component.EmbeddedMediaPlayerComponent @@ -232,7 +231,18 @@ actual class VideoPlayer actual constructor( player.media().startPaused(uri.toFile().absolutePath) val snap = withTimeoutOrNull(1500L) { while (surface.bitmap.value == null) delay(50) - surface.bitmap.value!!.toAwtImage() + // The render callback installs pixels into the surface bitmap on the event thread, so read it + // there too - converting off that thread races a resize on format renegotiation and segfaults + // inside skia while reading pixels of the previous, smaller buffer + val holder = java.util.concurrent.atomic.AtomicReference(null) + // invokeAndWait rethrows whatever the conversion threw, wrapped, and the callers of this have + // no handler; a frame that cannot be converted is a missing preview, not a failed send + try { + javax.swing.SwingUtilities.invokeAndWait { holder.set(surface.bitmap.value?.toAwtImage()) } + } catch (e: Exception) { + Log.e(TAG, "getBitmapFromVideo snapshot failed: ${e.stackTraceToString()}") + } + holder.get() } val orientation = player.media().info().videoTracks().firstOrNull()?.orientation() if (orientation == null) { @@ -242,17 +252,9 @@ actual class VideoPlayer actual constructor( return@withContext VideoPlayerInterface.PreviewAndDuration(preview = defaultPreview, timestamp = 0L, duration = 0L) } - val preview: ImageBitmap? = when (orientation) { - VideoOrientation.TOP_LEFT -> snap - VideoOrientation.TOP_RIGHT -> snap?.flip(false, true) - VideoOrientation.BOTTOM_LEFT -> snap?.flip(true, false) - VideoOrientation.BOTTOM_RIGHT -> snap?.rotate(180.0) - VideoOrientation.LEFT_TOP -> snap /* Transposed */ - VideoOrientation.LEFT_BOTTOM -> snap?.rotate(-90.0) - VideoOrientation.RIGHT_TOP -> snap?.rotate(90.0) - VideoOrientation.RIGHT_BOTTOM -> snap /* Anti-transposed */ - else -> snap - }?.toComposeImageBitmap() + // vlc applies the display matrix before the frame reaches the video surface, so the snapshot + // arrives upright; orienting it again here would undo that + val preview: ImageBitmap? = snap?.toComposeImageBitmap() val duration = player.duration.toLong() player.stop() putHelperPlayer(mediaComponent) diff --git a/apps/multiplatform/common/src/desktopMain/kotlin/chat/simplex/common/views/chat/item/CIVideoView.desktop.kt b/apps/multiplatform/common/src/desktopMain/kotlin/chat/simplex/common/views/chat/item/CIVideoView.desktop.kt index bdfbf6863f..d60790b694 100644 --- a/apps/multiplatform/common/src/desktopMain/kotlin/chat/simplex/common/views/chat/item/CIVideoView.desktop.kt +++ b/apps/multiplatform/common/src/desktopMain/kotlin/chat/simplex/common/views/chat/item/CIVideoView.desktop.kt @@ -4,6 +4,7 @@ import androidx.compose.foundation.combinedClickable import androidx.compose.foundation.layout.* import androidx.compose.runtime.* import androidx.compose.ui.Modifier +import androidx.compose.ui.layout.ContentScale import androidx.compose.ui.platform.LocalDensity import androidx.compose.ui.platform.LocalWindowInfo import androidx.compose.ui.unit.Dp @@ -14,6 +15,8 @@ import java.awt.Window @Composable actual fun PlayerView(player: VideoPlayer, width: Dp, onClick: () -> Unit, onLongClick: () -> Unit, stop: () -> Unit) { Box { + // The preview this replaces while playing is drawn with FillWidth, so a video smaller than the + // item width has to grow the same way here - Fit would leave it at its own size in the middle SurfaceFromPlayer(player, Modifier .width(width) @@ -21,7 +24,8 @@ actual fun PlayerView(player: VideoPlayer, width: Dp, onClick: () -> Unit, onLon onLongClick = onLongClick, onClick = { if (player.player.isPlaying) stop() else onClick() } ) - .onRightClick(onLongClick) + .onRightClick(onLongClick), + contentScale = ContentScale.FillWidth ) } } diff --git a/apps/multiplatform/common/src/desktopMain/kotlin/chat/simplex/common/views/chat/item/ImageFullScreenView.desktop.kt b/apps/multiplatform/common/src/desktopMain/kotlin/chat/simplex/common/views/chat/item/ImageFullScreenView.desktop.kt index 583aa8f52f..9fb4afbf7d 100644 --- a/apps/multiplatform/common/src/desktopMain/kotlin/chat/simplex/common/views/chat/item/ImageFullScreenView.desktop.kt +++ b/apps/multiplatform/common/src/desktopMain/kotlin/chat/simplex/common/views/chat/item/ImageFullScreenView.desktop.kt @@ -43,7 +43,7 @@ actual fun FullScreenVideoView(player: VideoPlayer, modifier: Modifier, close: ( } @Composable -fun BoxScope.SurfaceFromPlayer(player: VideoPlayer, modifier: Modifier) { +fun BoxScope.SurfaceFromPlayer(player: VideoPlayer, modifier: Modifier, contentScale: ContentScale = ContentScale.Fit) { val surface = remember { SkiaBitmapVideoSurface().also { player.player.videoSurface().set(it) @@ -54,7 +54,7 @@ fun BoxScope.SurfaceFromPlayer(player: VideoPlayer, modifier: Modifier) { bitmap, modifier = modifier.align(Alignment.Center), contentDescription = null, - contentScale = ContentScale.Fit, + contentScale = contentScale, alignment = Alignment.Center, ) } diff --git a/plans/2026-08-24-desktop-rotated-video-playback.md b/plans/2026-08-24-desktop-rotated-video-playback.md new file mode 100644 index 0000000000..0ef27efbaf --- /dev/null +++ b/plans/2026-08-24-desktop-rotated-video-playback.md @@ -0,0 +1,109 @@ +# Desktop: rotated videos squashed on playback, preview rotated twice, snapshot crash + +## Problem + +A video carrying rotation metadata - what a phone records in portrait - is squashed when it +plays in a chat item on desktop, while its preview looks correct. Re-sending such a video from +desktop produces a preview that is wrong for every recipient. Attaching one can take the app +down with a SIGSEGV inside skia. Separately, any video smaller than the width of the message +item plays at its own size in the middle of the item instead of filling it, though its preview +fills the width. + +## Cause + +Three defects, of different ages, on the path a frame takes from libvlc to the screen. + +**The buffer is sized from the wrong dimensions.** `SkiaBitmapVideoSurface` asks libvlc for a +buffer of `track.width() x track.height()`. The track carries the size before rotation, but vlc +applies the display matrix before the frame reaches the vmem callback, so the picture arriving +is transposed with respect to the buffer, and vlc stretches it to fill. Measured with a +1920x1080 HEVC file whose display matrix is -90: + +| source | value | +| -------------------------- | -------------------- | +| size libvlc offers | 1088x1920 (rotated) | +| `track.width()/height()` | 1920x1080 (coded) | +| buffer requested before fix | 1920x1080 | + +Asking for the track size was introduced to drop the decoder's padding (#7391); it is right for +an unrotated video and wrong for a rotated one, because it discards the orientation libvlc had +already applied. + +**The preview is oriented twice.** `previewAndDuration` takes a snapshot from the same surface +and then rotates it by hand. The snapshot arrives at 1080x1920 and already upright - dumping it +to a PNG confirms the content, not just the dimensions - and the manual rotation turns it back +to 1920x1080. Before this change the two errors cancelled: a wrongly shaped buffer plus a +manual rotation produced a preview that looked right, which is why the preview was correct while +playback was not. + +**The snapshot races the render callback.** The render callback installs pixels into the shared +bitmap on the event thread; the snapshot converted it on the preview thread. The format is +renegotiated several times per file, so a resize between `installPixels` and `readPixels` makes +skia read past the end of the buffer: + +``` +SIGSEGV ... C [libskiko-linux-x64.so+0x1e7807] sse2::load_8888(...) + at org.jetbrains.skia.Bitmap.readPixels + at chat.simplex.common.platform.VideoPlayer$Companion$getBitmapFromVideo$2$snap$1 +``` + +**Small videos do not fill the item.** The preview is drawn with `ContentScale.FillWidth` and +the playback surface with `ContentScale.Fit`. `Fit` never exceeds the height of the box, so a +320x240 video stays at its own size, centred, while its preview fills the width. This is only +visible for sources narrower than the item. + +## Fix + +Swap the requested width and height for the four transposed orientations, so the buffer matches +the picture vlc delivers, and keep the track size otherwise so the padding fix still holds. +Drop the manual orientation handling from the preview, since the frame is already upright. Read +the snapshot on the event thread, where the render callback writes it. Draw the inline playback +surface with `FillWidth`, as its preview is drawn. + +## Bounds + +The dimensions come from a received file, so they are attacker-chosen and are treated as such. + +- Both track sides are used or neither. One side from the track beside the other from libvlc's + padded size never described the same picture, and transposing such a pair compounds it. +- The requested area is capped, scaling down and keeping the aspect where both sides can shrink; + a side pinned at 1 takes the whole budget on the other side instead, since scaling cannot keep + the aspect of a 2000000000x1 declaration and hold the area at once. An unbounded request is an + out-of-memory from a message: 16000x16000 is 1 GB of RV32, requested from vlc and copied into + a java array of the same size. The cap also keeps `width * height * 4` inside an `Int`. +- Neither side can be zero, so a 1x4000 or 4000x1 file cannot produce an empty buffer. +- The sides are only swapped when the track's own sides are used. The size libvlc passes is + already rotated, so swapping that pair would recreate the squash for a file that declares a + rotation and a zero-sized track. +- A frame is dropped rather than displayed when it does not fill the bitmap skia is told to + read, when the format it was rendered with is not the one the bitmap was sized by, and before + any buffer has been allocated. The checks and the copy run inside the render callback, on + vlc's thread: the native buffer is only guaranteed to exist for the duration of the callback, + so code deferred to another thread would read through a pointer vlc may have freed on a format + change. Only the copied frame is handed to the event thread. +- The bitmap is published only when skia reports that it took the pixels, and a snapshot that + cannot be converted is logged and left empty rather than thrown into callers that have no + handler for it. + +## Testing + +Fifteen files covering 320x240 to 3840x2160, square, odd, and 1234x567 sizes, h264, vp9, av1 +and hevc, unrotated and 90/180/270, plus 1x4000, 4000x1 and 16000x16000. Checked that rotated +videos play upright and preview upright, that a re-sent video keeps its shape, that attaching +does not crash, that a 320x240 video fills the item, that the AV1 padding fix still holds, and +that the 16000x16000 file is scaled to the cap instead of allocating a gigabyte. + +## Android + +None of these reach android. The buffer format callback is desktop only - android renders +through exoplayer's `StyledPlayerView`, with no buffer for us to size - and its preview comes +from `MediaMetadataRetriever.getFrameAtTime`, which returns an oriented frame and is not +rotated again. The event thread race is skia and swing. Android already fills the item width +with `RESIZE_MODE_FIXED_WIDTH`, which is what the `FillWidth` change gives desktop. + +## Not addressed + +`CIVideoView` bounds the item's aspect ratio above at 2.33 but not below, so a 4000x1 video +still lays out with a height that rounds to zero. The snapshot's `invokeAndWait` is not +cancellable, so its 1.5s timeout cannot interrupt a wedged event thread. Both are outside the +functions this change touches. From 647ba691ef6e710293b06b02583d6c147c3e6f9f Mon Sep 17 00:00:00 2001 From: sh <37271604+shumvgolove@users.noreply.github.com> Date: Sat, 29 Aug 2026 18:30:22 +0400 Subject: [PATCH 08/15] desktop: bump vlc to v3.0.23-2 (#7407) --- scripts/desktop/prepare-vlc-linux.sh | 2 +- scripts/desktop/prepare-vlc-mac.sh | 2 +- scripts/desktop/prepare-vlc-windows.sh | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/scripts/desktop/prepare-vlc-linux.sh b/scripts/desktop/prepare-vlc-linux.sh index ef1ee1b308..be30c7a4c9 100755 --- a/scripts/desktop/prepare-vlc-linux.sh +++ b/scripts/desktop/prepare-vlc-linux.sh @@ -12,7 +12,7 @@ vlc_dir=$root_dir/apps/multiplatform/common/src/commonMain/cpp/desktop/libs/linu mkdir $vlc_dir || exit 0 -vlc_tag='v3.0.21-1' +vlc_tag='v3.0.23-2' vlc_url="https://github.com/simplex-chat/vlc/releases/download/${vlc_tag}/vlc-linux-${ARCH}.appimage" cd /tmp diff --git a/scripts/desktop/prepare-vlc-mac.sh b/scripts/desktop/prepare-vlc-mac.sh index 180acf4426..0e83f44dcf 100755 --- a/scripts/desktop/prepare-vlc-mac.sh +++ b/scripts/desktop/prepare-vlc-mac.sh @@ -10,7 +10,7 @@ else vlc_arch=intel64 fi -vlc_tag='v3.0.21-1' +vlc_tag='v3.0.23-2' vlc_url="https://github.com/simplex-chat/vlc/releases/download/${vlc_tag}/vlc-macos-${ARCH}.zip" function readlink() { diff --git a/scripts/desktop/prepare-vlc-windows.sh b/scripts/desktop/prepare-vlc-windows.sh index 4e65528ca0..cf9b553f15 100644 --- a/scripts/desktop/prepare-vlc-windows.sh +++ b/scripts/desktop/prepare-vlc-windows.sh @@ -10,7 +10,7 @@ vlc_dir=$root_dir/apps/multiplatform/common/src/commonMain/cpp/desktop/libs/wind rm -rf $vlc_dir mkdir -p $vlc_dir/vlc || exit 0 -vlc_tag='v3.0.21-1' +vlc_tag='v3.0.23-2' vlc_url="https://github.com/simplex-chat/vlc/releases/download/${vlc_tag}/vlc-win-x86_64.zip" cd /tmp From d1c6a5717a6a313e001b6c7ed2d4396e86879d6b Mon Sep 17 00:00:00 2001 From: Evgeny Date: Sat, 29 Aug 2026 18:59:12 +0100 Subject: [PATCH 09/15] ui: show countdown until SimpleX domains sale launch (#7434) * ui: show countdown until SimpleX domains sale launch * list * ios: update * update kotlin, ios countdown * kotlin countdown * fix formats * padding * update --------- Co-authored-by: Evgeny @ SimpleX Chat <259188159+evgeny-simplex@users.noreply.github.com> --- .../Views/UserSettings/UserAddressView.swift | 45 ++++++++++++++++++- apps/multiplatform/common/build.gradle.kts | 4 +- .../views/usersettings/SetSimplexNameView.kt | 45 ++++++++++++++++++- .../commonMain/resources/MR/base/strings.xml | 5 +++ 4 files changed, 94 insertions(+), 5 deletions(-) diff --git a/apps/ios/Shared/Views/UserSettings/UserAddressView.swift b/apps/ios/Shared/Views/UserSettings/UserAddressView.swift index b9048becda..02d6f1402e 100644 --- a/apps/ios/Shared/Views/UserSettings/UserAddressView.swift +++ b/apps/ios/Shared/Views/UserSettings/UserAddressView.swift @@ -802,6 +802,8 @@ private func saveAddressSettings(_ settings: AddressSettingsState, _ savedSettin } } +private let simplexNameSaleStart = Calendar(identifier: .gregorian).date(from: DateComponents(timeZone: TimeZone(identifier: "UTC"), year: 2026, month: 12, day: 12, hour: 18))! + struct SetSimplexDomainView: View { let title: LocalizedStringKey let footer: LocalizedStringKey @@ -815,6 +817,8 @@ struct SetSimplexDomainView: View { @State private var original = "" @State private var didSave = false @State private var editing = false + @State private var timeToSaleStart = simplexNameSaleStart.timeIntervalSinceNow + @State private var saleTimer: Timer? = nil @FocusState private var nameFocused: Bool init(title: LocalizedStringKey, footer: LocalizedStringKey, prompt: String, simplexName: String, broadcastWarning: String? = nil, save: @escaping (String?) async -> Bool) { @@ -873,7 +877,7 @@ struct SetSimplexDomainView: View { Section { if editing { Button { - openBrowserAlert(uri: "https://github.com/simplex-chat/simplex-chat/blob/master/docs/guide/register-simplex-name.md") + openBrowserAlert(uri: "https://simplex.domains/#testing") } label: { HStack { Text("How to register a test name") @@ -901,15 +905,39 @@ struct SetSimplexDomainView: View { } } } + Section { + VStack(alignment: .leading, spacing: 4) { + Text(verbatim: saleCountdown(timeToSaleStart)) + Text(timeToSaleStart > 0 ? "until you can register a SimpleX domain" : "Update the app to register a SimpleX domain") + .font(.caption) + .foregroundColor(theme.colors.secondary) + } + } header: { + Text("SimpleX name sale starts in") + .foregroundColor(theme.colors.secondary) + } footer: { + Text("Crowdfunding investors can reserve their name before sale starts: [simplex.domains](https://simplex.domains/)") + .foregroundColor(theme.colors.secondary) + .padding(.bottom) + } } + .modifier(ThemedBackground(grouped: true)) .navigationTitle(title) .navigationBarTitleDisplayMode(.large) .onAppear { if editing { DispatchQueue.main.asyncAfter(deadline: .now() + 0.6) { nameFocused = true } } + if timeToSaleStart > 0 { + saleTimer = Timer.scheduledTimer(withTimeInterval: 1.0, repeats: true) { t in + timeToSaleStart = simplexNameSaleStart.timeIntervalSinceNow + if timeToSaleStart <= 0 { t.invalidate() } + } + } } .onDisappear { + saleTimer?.invalidate() + saleTimer = nil if !didSave, !saving, changed, isValid { let domain = normalized(simplexName) let saveName = save @@ -948,6 +976,21 @@ struct SetSimplexDomainView: View { : addSimplexTLD((t.hasPrefix("@") || t.hasPrefix("#") ? String(t.dropFirst()) : t).lowercased()) } + private func saleCountdown(_ remaining: TimeInterval) -> String { + let total = max(0, Int(remaining)) + let days = total / 86400 + let dayStr = String.localizedStringWithFormat( + days == 1 + ? NSLocalizedString("%d day", comment: "time interval") + : NSLocalizedString("%d days", comment: "time interval"), + days + ) + return dayStr + " " + String.localizedStringWithFormat( + NSLocalizedString("%02d hrs %02d min %02d sec", comment: "countdown"), + total / 3600 % 24, total / 60 % 60, total % 60 + ) + } + private func addSimplexTLD(_ d: String) -> String { if d.contains(".") { d } else { "\(d).simplex" } } diff --git a/apps/multiplatform/common/build.gradle.kts b/apps/multiplatform/common/build.gradle.kts index 43bc114f21..5b91b0574d 100644 --- a/apps/multiplatform/common/build.gradle.kts +++ b/apps/multiplatform/common/build.gradle.kts @@ -212,7 +212,7 @@ afterEvaluate { val fontLtGtRegex = Regex("[^>]*>.*<font[^>]*>.*</font>.*") val unbracketedColorRegex = Regex("color=#[abcdefABCDEF0-9]{3,6}") val correctHtmlRegex = Regex("[^>]*>.*.*.*|[^>]*>.*.*.*|[^>]*>.*.*.*|[^>]*>.*]*>.*.*") - val possibleFormat = listOf("s", "d", "1\$s", "2\$s", "3\$s", "4\$s", "1\$d", "2\$d", "3\$d", "4\$d", "2s", "f") + val possibleFormat = listOf("s", "d", "1\$s", "2\$s", "3\$s", "4\$s", "1\$d", "2\$d", "3\$d", "4\$d", "1\$02d", "2\$02d", "3\$02d", "2s", "f") fun String.id(): String = replace(" 0) { + delay(1000) + msToSaleStart.value = simplexNameSaleStart.toEpochMilliseconds() - System.currentTimeMillis() + } + } + SectionView(stringResource(MR.strings.simplex_name_sales)) { + SectionItemView { + Column(verticalArrangement = Arrangement.spacedBy(4.dp)) { + Text(saleCountdown(msToSaleStart.value)) + Text( + stringResource(if (msToSaleStart.value > 0) MR.strings.until_register_simplex_domain else MR.strings.update_app_register_simplex_domain), + color = MaterialTheme.colors.secondary, + fontSize = 12.sp + ) + } + } + } + SectionTextFooter(buildAnnotatedString { + append(generalGetString(MR.strings.simplex_name_sales_footer)) + append(" ") + withLink(LinkAnnotation.Url(SIMPLEX_DOMAINS_URL) { uriHandler.openUriCatching(SIMPLEX_DOMAINS_URL) }) { + withStyle(SpanStyle(color = MaterialTheme.colors.primary)) { + append("simplex.domains") + } + } + }) SectionBottomSpacer() } } diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/base/strings.xml b/apps/multiplatform/common/src/commonMain/resources/MR/base/strings.xml index 739467b3ff..b4a1b49eca 100644 --- a/apps/multiplatform/common/src/commonMain/resources/MR/base/strings.xml +++ b/apps/multiplatform/common/src/commonMain/resources/MR/base/strings.xml @@ -397,6 +397,11 @@ Get SimpleX name (BETA) Channel SimpleX name How to register a test name + SimpleX name sale starts in + until you can register a SimpleX domain + Update the app to register a SimpleX domain + %1$02d hrs %2$02d min %3$02d sec + Crowdfunding investors can reserve their name before sale starts: Remove name Save Edit From 2961fecc3585c9bc3a25085d53573d125034e4e5 Mon Sep 17 00:00:00 2001 From: Evgeny Poberezkin Date: Sat, 29 Aug 2026 19:12:40 +0100 Subject: [PATCH 10/15] ui: update strings --- apps/ios/Shared/Views/UserSettings/UserAddressView.swift | 2 +- .../common/src/commonMain/resources/MR/base/strings.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/ios/Shared/Views/UserSettings/UserAddressView.swift b/apps/ios/Shared/Views/UserSettings/UserAddressView.swift index 02d6f1402e..9711f3d6f8 100644 --- a/apps/ios/Shared/Views/UserSettings/UserAddressView.swift +++ b/apps/ios/Shared/Views/UserSettings/UserAddressView.swift @@ -916,7 +916,7 @@ struct SetSimplexDomainView: View { Text("SimpleX name sale starts in") .foregroundColor(theme.colors.secondary) } footer: { - Text("Crowdfunding investors can reserve their name before sale starts: [simplex.domains](https://simplex.domains/)") + Text("Crowdfunding investors can reserve names before the sale starts: [simplex.domains](https://simplex.domains/)") .foregroundColor(theme.colors.secondary) .padding(.bottom) } diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/base/strings.xml b/apps/multiplatform/common/src/commonMain/resources/MR/base/strings.xml index b4a1b49eca..7c1c7ad44f 100644 --- a/apps/multiplatform/common/src/commonMain/resources/MR/base/strings.xml +++ b/apps/multiplatform/common/src/commonMain/resources/MR/base/strings.xml @@ -401,7 +401,7 @@ until you can register a SimpleX domain Update the app to register a SimpleX domain %1$02d hrs %2$02d min %3$02d sec - Crowdfunding investors can reserve their name before sale starts: + Crowdfunding investors can reserve names before the sale starts: Remove name Save Edit From 6b705490aa87b731257d998d3f3a2378f1150efe Mon Sep 17 00:00:00 2001 From: Evgeny Date: Sun, 30 Aug 2026 10:55:19 +0100 Subject: [PATCH 11/15] ios: export localizations (#7437) --- .../bg.xcloc/Localized Contents/bg.xliff | 74 +++++++++++++--- .../cs.xcloc/Localized Contents/cs.xliff | 72 +++++++++++++--- .../de.xcloc/Localized Contents/de.xliff | 79 ++++++++++++++--- .../en.xcloc/Localized Contents/en.xliff | 86 ++++++++++++++++--- .../es.xcloc/Localized Contents/es.xliff | 79 ++++++++++++++--- .../fi.xcloc/Localized Contents/fi.xliff | 72 +++++++++++++--- .../fr.xcloc/Localized Contents/fr.xliff | 79 ++++++++++++++--- .../hu.xcloc/Localized Contents/hu.xliff | 79 ++++++++++++++--- .../it.xcloc/Localized Contents/it.xliff | 79 ++++++++++++++--- .../ja.xcloc/Localized Contents/ja.xliff | 72 +++++++++++++--- .../nl.xcloc/Localized Contents/nl.xliff | 75 +++++++++++++--- .../pl.xcloc/Localized Contents/pl.xliff | 76 +++++++++++++--- .../ru.xcloc/Localized Contents/ru.xliff | 79 ++++++++++++++--- .../th.xcloc/Localized Contents/th.xliff | 72 +++++++++++++--- .../tr.xcloc/Localized Contents/tr.xliff | 76 +++++++++++++--- .../uk.xcloc/Localized Contents/uk.xliff | 76 +++++++++++++--- .../Localized Contents/zh-Hans.xliff | 78 ++++++++++++++--- apps/ios/bg.lproj/Localizable.strings | 26 +++--- apps/ios/cs.lproj/Localizable.strings | 24 +++--- apps/ios/de.lproj/Localizable.strings | 52 +++++------ apps/ios/es.lproj/Localizable.strings | 52 +++++------ apps/ios/fi.lproj/Localizable.strings | 24 +++--- apps/ios/fr.lproj/Localizable.strings | 52 +++++------ apps/ios/hu.lproj/Localizable.strings | 52 +++++------ apps/ios/it.lproj/Localizable.strings | 52 +++++------ apps/ios/ja.lproj/Localizable.strings | 24 +++--- apps/ios/nl.lproj/Localizable.strings | 34 ++++---- apps/ios/pl.lproj/Localizable.strings | 37 ++++---- apps/ios/ru.lproj/Localizable.strings | 52 +++++------ apps/ios/th.lproj/Localizable.strings | 24 +++--- apps/ios/tr.lproj/Localizable.strings | 37 ++++---- apps/ios/uk.lproj/Localizable.strings | 37 ++++---- apps/ios/zh-Hans.lproj/Localizable.strings | 46 +++++----- 33 files changed, 1388 insertions(+), 540 deletions(-) diff --git a/apps/ios/SimpleX Localizations/bg.xcloc/Localized Contents/bg.xliff b/apps/ios/SimpleX Localizations/bg.xcloc/Localized Contents/bg.xliff index d0e27058e8..9b35dc90e6 100644 --- a/apps/ios/SimpleX Localizations/bg.xcloc/Localized Contents/bg.xliff +++ b/apps/ios/SimpleX Localizations/bg.xcloc/Localized Contents/bg.xliff @@ -39,6 +39,10 @@ %1$@ supported SimpleX Chat. The badge expired on %2$@. badge alert + + %1$02d hrs %2$02d min %3$02d sec + countdown + %@ %@ @@ -152,6 +156,10 @@ %@: copied message info + + %d day + time interval + %d days %d дни @@ -2603,6 +2611,10 @@ This is your own one-time link! Линкът се създава… No comment provided by engineer. + + Crowdfunding investors can reserve names before the sale starts: [simplex.domains](https://simplex.domains/) + No comment provided by engineer. + Crowdfunding on Wefunder No comment provided by engineer. @@ -6311,18 +6323,10 @@ alert button Отвори миграцията към друго устройство authentication reason - - Open new channel - new chat action - Open new chat new chat action - - Open new group - new chat action - Open to accept No comment provided by engineer. @@ -8287,6 +8291,10 @@ copied message info SimpleX name not verified alert title + + SimpleX name sale starts in + No comment provided by engineer. + SimpleX one-time invitation Еднократна покана за SimpleX @@ -9325,6 +9333,10 @@ You will be prompted to complete authentication before this feature is enabled.< Update settings? No comment provided by engineer. + + Update the app to register a SimpleX domain + No comment provided by engineer. + Updated conditions No comment provided by engineer. @@ -9841,6 +9853,23 @@ alert title Вече имате чат профил със същото име. Моля, изберете друго име. No comment provided by engineer. + + You are a contributor + new chat alert + + + You are a member + Вие сте член + new chat alert + + + You are a moderator + new chat alert + + + You are a subscriber + new chat alert + You are already connected to %@. Вече сте вече свързани с %@. @@ -9882,6 +9911,21 @@ Repeat join request? Изпрати отново заявката за присъединяване? new chat sheet title + + You are an admin + Вие сте админ + new chat alert + + + You are an observer + Вие сте наблюдател + new chat alert + + + You are an owner + Вие сте собственик + new chat alert + You are connected to the server used to receive messages from this connection. subscription status explanation @@ -10815,6 +10859,10 @@ pref value препратено No comment provided by engineer. + + forwarded from + No comment provided by engineer. + group shown on group welcome message @@ -11194,9 +11242,9 @@ time to disappear запазено No comment provided by engineer. - - saved from %@ - запазено от %@ + + saved from + запазено от No comment provided by engineer. @@ -11286,6 +11334,10 @@ last received msg: %2$@ unprotected No comment provided by engineer. + + until you can register a SimpleX domain + No comment provided by engineer. + updated channel profile rcv group event chat item diff --git a/apps/ios/SimpleX Localizations/cs.xcloc/Localized Contents/cs.xliff b/apps/ios/SimpleX Localizations/cs.xcloc/Localized Contents/cs.xliff index 26c97d549d..28fc9e9244 100644 --- a/apps/ios/SimpleX Localizations/cs.xcloc/Localized Contents/cs.xliff +++ b/apps/ios/SimpleX Localizations/cs.xcloc/Localized Contents/cs.xliff @@ -39,6 +39,10 @@ %1$@ supported SimpleX Chat. The badge expired on %2$@. badge alert + + %1$02d hrs %2$02d min %3$02d sec + countdown + %@ %@ @@ -152,6 +156,10 @@ %@: copied message info + + %d day + time interval + %d days %d dní @@ -2499,6 +2507,10 @@ Toto je váš vlastní jednorázový odkaz! Creating link… No comment provided by engineer. + + Crowdfunding investors can reserve names before the sale starts: [simplex.domains](https://simplex.domains/) + No comment provided by engineer. + Crowdfunding on Wefunder No comment provided by engineer. @@ -6120,18 +6132,10 @@ alert button Open migration to another device authentication reason - - Open new channel - new chat action - Open new chat new chat action - - Open new group - new chat action - Open to accept No comment provided by engineer. @@ -8056,6 +8060,10 @@ copied message info SimpleX name not verified alert title + + SimpleX name sale starts in + No comment provided by engineer. + SimpleX one-time invitation Jednorázová pozvánka SimpleX @@ -9074,6 +9082,10 @@ Před zapnutím této funkce budete vyzváni k dokončení ověření. Update settings? No comment provided by engineer. + + Update the app to register a SimpleX domain + No comment provided by engineer. + Updated conditions No comment provided by engineer. @@ -9567,6 +9579,23 @@ alert title Již máte profil chatu se stejným zobrazovacím názvem. Zvolte prosím jiné jméno. No comment provided by engineer. + + You are a contributor + new chat alert + + + You are a member + Jste člen + new chat alert + + + You are a moderator + new chat alert + + + You are a subscriber + new chat alert + You are already connected to %@. Již jste připojeni k %@. @@ -9601,6 +9630,21 @@ alert title Repeat join request? new chat sheet title + + You are an admin + Jste správce + new chat alert + + + You are an observer + Jste pozorovatel + new chat alert + + + You are an owner + Jste vlastník + new chat alert + You are connected to the server used to receive messages from this connection. subscription status explanation @@ -10519,6 +10563,10 @@ pref value forwarded No comment provided by engineer. + + forwarded from + No comment provided by engineer. + group shown on group welcome message @@ -10892,8 +10940,8 @@ time to disappear saved No comment provided by engineer. - - saved from %@ + + saved from No comment provided by engineer. @@ -10978,6 +11026,10 @@ last received msg: %2$@ unprotected No comment provided by engineer. + + until you can register a SimpleX domain + No comment provided by engineer. + updated channel profile rcv group event chat item diff --git a/apps/ios/SimpleX Localizations/de.xcloc/Localized Contents/de.xliff b/apps/ios/SimpleX Localizations/de.xcloc/Localized Contents/de.xliff index 1265c782e0..e5cfc54b2c 100644 --- a/apps/ios/SimpleX Localizations/de.xcloc/Localized Contents/de.xliff +++ b/apps/ios/SimpleX Localizations/de.xcloc/Localized Contents/de.xliff @@ -40,6 +40,10 @@ %1$@ hat SimpleX Chat unterstützt. Das Abzeichen ist am %2$@ abgelaufen. badge alert + + %1$02d hrs %2$02d min %3$02d sec + countdown + %@ %@ @@ -155,6 +159,10 @@ %@: copied message info + + %d day + time interval + %d days %d Tage @@ -2715,6 +2723,10 @@ Das ist Ihr eigener Einmal-Link! Link wird erstellt… No comment provided by engineer. + + Crowdfunding investors can reserve names before the sale starts: [simplex.domains](https://simplex.domains/) + No comment provided by engineer. + Crowdfunding on Wefunder No comment provided by engineer. @@ -6744,21 +6756,11 @@ alert button Migration auf ein anderes Gerät öffnen authentication reason - - Open new channel - Neuen Kanal öffnen - new chat action - Open new chat Neuen Chat öffnen new chat action - - Open new group - Neue Gruppe öffnen - new chat action - Open to accept Zum Akzeptieren öffnen @@ -8945,6 +8947,10 @@ copied message info SimpleX-Name ist nicht verifiziert alert title + + SimpleX name sale starts in + No comment provided by engineer. + SimpleX one-time invitation SimpleX-Einmal-Einladung @@ -10098,6 +10104,10 @@ Sie werden aufgefordert, die Authentifizierung abzuschließen, bevor diese Funkt Einstellungen aktualisieren? No comment provided by engineer. + + Update the app to register a SimpleX domain + No comment provided by engineer. + Updated conditions Aktualisierte Nutzungsbedingungen @@ -10664,6 +10674,26 @@ alert title Sie haben schon ein Chat-Profil mit dem gleichen Anzeigenamen. Bitte wählen Sie einen anderen Namen aus. No comment provided by engineer. + + You are a contributor + Sie sind Mitwirkender + new chat alert + + + You are a member + Sie sind Mitglied + new chat alert + + + You are a moderator + Sie sind Moderator + new chat alert + + + You are a subscriber + Sie sind Abonnent + new chat alert + You are already connected to %@. Sie sind bereits mit %@ verbunden. @@ -10706,6 +10736,21 @@ Repeat join request? Verbindungsanfrage wiederholen? new chat sheet title + + You are an admin + Sie sind Admin + new chat alert + + + You are an observer + Sie sind Beobachter + new chat alert + + + You are an owner + Sie sind Eigentümer + new chat alert + You are connected to the server used to receive messages from this connection. Sie sind mit dem Server verbunden, der für den Empfang von Nachrichten dieser Verbindung genutzt wird. @@ -11708,6 +11753,10 @@ pref value weitergeleitet No comment provided by engineer. + + forwarded from + No comment provided by engineer. + group Gruppe @@ -12116,9 +12165,9 @@ time to disappear abgespeichert No comment provided by engineer. - - saved from %@ - abgespeichert von %@ + + saved from + abgespeichert von No comment provided by engineer. @@ -12215,6 +12264,10 @@ Zuletzt empfangene Nachricht: %2$@ Ungeschützt No comment provided by engineer. + + until you can register a SimpleX domain + No comment provided by engineer. + updated channel profile Kanalprofil aktualisiert diff --git a/apps/ios/SimpleX Localizations/en.xcloc/Localized Contents/en.xliff b/apps/ios/SimpleX Localizations/en.xcloc/Localized Contents/en.xliff index 38e0ecfe85..184c9fd6b4 100644 --- a/apps/ios/SimpleX Localizations/en.xcloc/Localized Contents/en.xliff +++ b/apps/ios/SimpleX Localizations/en.xcloc/Localized Contents/en.xliff @@ -40,6 +40,11 @@ %1$@ supported SimpleX Chat. The badge expired on %2$@. badge alert + + %1$02d hrs %2$02d min %3$02d sec + %1$02d hrs %2$02d min %3$02d sec + countdown + %@ %@ @@ -155,6 +160,11 @@ %@: copied message info + + %d day + %d day + time interval + %d days %d days @@ -2715,6 +2725,11 @@ This is your own one-time link! Creating link… No comment provided by engineer. + + Crowdfunding investors can reserve names before the sale starts: [simplex.domains](https://simplex.domains/) + Crowdfunding investors can reserve names before the sale starts: [simplex.domains](https://simplex.domains/) + No comment provided by engineer. + Crowdfunding on Wefunder Crowdfunding on Wefunder @@ -6747,21 +6762,11 @@ alert button Open migration to another device authentication reason - - Open new channel - Open new channel - new chat action - Open new chat Open new chat new chat action - - Open new group - Open new group - new chat action - Open to accept Open to accept @@ -8948,6 +8953,11 @@ copied message info SimpleX name not verified alert title + + SimpleX name sale starts in + SimpleX name sale starts in + No comment provided by engineer. + SimpleX one-time invitation SimpleX one-time invitation @@ -10101,6 +10111,11 @@ You will be prompted to complete authentication before this feature is enabled.< Update settings? No comment provided by engineer. + + Update the app to register a SimpleX domain + Update the app to register a SimpleX domain + No comment provided by engineer. + Updated conditions Updated conditions @@ -10667,6 +10682,26 @@ alert title You already have a chat profile with the same display name. Please choose another name. No comment provided by engineer. + + You are a contributor + You are a contributor + new chat alert + + + You are a member + You are a member + new chat alert + + + You are a moderator + You are a moderator + new chat alert + + + You are a subscriber + You are a subscriber + new chat alert + You are already connected to %@. You are already connected to %@. @@ -10709,6 +10744,21 @@ Repeat join request? Repeat join request? new chat sheet title + + You are an admin + You are an admin + new chat alert + + + You are an observer + You are an observer + new chat alert + + + You are an owner + You are an owner + new chat alert + You are connected to the server used to receive messages from this connection. You are connected to the server used to receive messages from this connection. @@ -11713,6 +11763,11 @@ pref value forwarded No comment provided by engineer. + + forwarded from + forwarded from + No comment provided by engineer. + group group @@ -12121,9 +12176,9 @@ time to disappear saved No comment provided by engineer. - - saved from %@ - saved from %@ + + saved from + saved from No comment provided by engineer. @@ -12220,6 +12275,11 @@ last received msg: %2$@ unprotected No comment provided by engineer. + + until you can register a SimpleX domain + until you can register a SimpleX domain + No comment provided by engineer. + updated channel profile updated channel profile diff --git a/apps/ios/SimpleX Localizations/es.xcloc/Localized Contents/es.xliff b/apps/ios/SimpleX Localizations/es.xcloc/Localized Contents/es.xliff index 60f0dd3e2d..82ba09d6a9 100644 --- a/apps/ios/SimpleX Localizations/es.xcloc/Localized Contents/es.xliff +++ b/apps/ios/SimpleX Localizations/es.xcloc/Localized Contents/es.xliff @@ -40,6 +40,10 @@ %1$@ ha apoyado a SimpleX Chat. La insignia caducó el %2$@. badge alert + + %1$02d hrs %2$02d min %3$02d sec + countdown + %@ %@ @@ -155,6 +159,10 @@ %@: copied message info + + %d day + time interval + %d days %d día(s) @@ -2715,6 +2723,10 @@ This is your own one-time link! Creando enlace… No comment provided by engineer. + + Crowdfunding investors can reserve names before the sale starts: [simplex.domains](https://simplex.domains/) + No comment provided by engineer. + Crowdfunding on Wefunder No comment provided by engineer. @@ -6744,21 +6756,11 @@ alert button Abrir menú migración a otro dispositivo authentication reason - - Open new channel - Abrir canal nuevo - new chat action - Open new chat Abrir chat nuevo new chat action - - Open new group - Abrir grupo nuevo - new chat action - Open to accept Abrir para aceptar @@ -8945,6 +8947,10 @@ copied message info Nombre SimpleX no verificado alert title + + SimpleX name sale starts in + No comment provided by engineer. + SimpleX one-time invitation Invitación SimpleX de un uso @@ -10098,6 +10104,10 @@ Se te pedirá que completes la autenticación antes de activar esta función.¿Actualizar configuración? No comment provided by engineer. + + Update the app to register a SimpleX domain + No comment provided by engineer. + Updated conditions Condiciones actualizadas @@ -10664,6 +10674,26 @@ alert title Ya tienes un perfil con este nombre mostrado. Por favor, elige otro nombre. No comment provided by engineer. + + You are a contributor + Eres colaborador + new chat alert + + + You are a member + Eres miembro + new chat alert + + + You are a moderator + Eres moderador + new chat alert + + + You are a subscriber + Eres suscriptor + new chat alert + You are already connected to %@. Ya estás conectado con %@. @@ -10706,6 +10736,21 @@ Repeat join request? ¿Repetir solicitud de admisión? new chat sheet title + + You are an admin + Eres administrador + new chat alert + + + You are an observer + Eres observador + new chat alert + + + You are an owner + Eres propietario + new chat alert + You are connected to the server used to receive messages from this connection. Estás conectado al servidor usado para recibir mensajes de esta conexión. @@ -11708,6 +11753,10 @@ pref value reenviado No comment provided by engineer. + + forwarded from + No comment provided by engineer. + group grupo @@ -12116,9 +12165,9 @@ time to disappear guardado No comment provided by engineer. - - saved from %@ - Guardado desde %@ + + saved from + Guardado desde No comment provided by engineer. @@ -12215,6 +12264,10 @@ last received msg: %2$@ desprotegida No comment provided by engineer. + + until you can register a SimpleX domain + No comment provided by engineer. + updated channel profile perfil del canal actualizado diff --git a/apps/ios/SimpleX Localizations/fi.xcloc/Localized Contents/fi.xliff b/apps/ios/SimpleX Localizations/fi.xcloc/Localized Contents/fi.xliff index 78caebe522..e01c47949d 100644 --- a/apps/ios/SimpleX Localizations/fi.xcloc/Localized Contents/fi.xliff +++ b/apps/ios/SimpleX Localizations/fi.xcloc/Localized Contents/fi.xliff @@ -39,6 +39,10 @@ %1$@ supported SimpleX Chat. The badge expired on %2$@. badge alert + + %1$02d hrs %2$02d min %3$02d sec + countdown + %@ % @ @@ -144,6 +148,10 @@ %@: copied message info + + %d day + time interval + %d days %d päivää @@ -2386,6 +2394,10 @@ This is your own one-time link! Creating link… No comment provided by engineer. + + Crowdfunding investors can reserve names before the sale starts: [simplex.domains](https://simplex.domains/) + No comment provided by engineer. + Crowdfunding on Wefunder No comment provided by engineer. @@ -6000,18 +6012,10 @@ alert button Open migration to another device authentication reason - - Open new channel - new chat action - Open new chat new chat action - - Open new group - new chat action - Open to accept No comment provided by engineer. @@ -7935,6 +7939,10 @@ copied message info SimpleX name not verified alert title + + SimpleX name sale starts in + No comment provided by engineer. + SimpleX one-time invitation SimpleX-kertakutsu @@ -8948,6 +8956,10 @@ Sinua kehotetaan suorittamaan todennus loppuun, ennen kuin tämä ominaisuus ote Update settings? No comment provided by engineer. + + Update the app to register a SimpleX domain + No comment provided by engineer. + Updated conditions No comment provided by engineer. @@ -9441,6 +9453,23 @@ alert title Sinulla on jo keskusteluprofiili samalla näyttönimellä. Valitse toinen nimi. No comment provided by engineer. + + You are a contributor + new chat alert + + + You are a member + Olet jäsen + new chat alert + + + You are a moderator + new chat alert + + + You are a subscriber + new chat alert + You are already connected to %@. Olet jo muodostanut yhteyden %@:n kanssa. @@ -9475,6 +9504,21 @@ alert title Repeat join request? new chat sheet title + + You are an admin + Olet ylläpitäjä + new chat alert + + + You are an observer + Olet tarkkailija + new chat alert + + + You are an owner + Olet omistaja + new chat alert + You are connected to the server used to receive messages from this connection. subscription status explanation @@ -10391,6 +10435,10 @@ pref value forwarded No comment provided by engineer. + + forwarded from + No comment provided by engineer. + group shown on group welcome message @@ -10764,8 +10812,8 @@ time to disappear saved No comment provided by engineer. - - saved from %@ + + saved from No comment provided by engineer. @@ -10850,6 +10898,10 @@ last received msg: %2$@ unprotected No comment provided by engineer. + + until you can register a SimpleX domain + No comment provided by engineer. + updated channel profile rcv group event chat item diff --git a/apps/ios/SimpleX Localizations/fr.xcloc/Localized Contents/fr.xliff b/apps/ios/SimpleX Localizations/fr.xcloc/Localized Contents/fr.xliff index 78e8e30096..7305dc4346 100644 --- a/apps/ios/SimpleX Localizations/fr.xcloc/Localized Contents/fr.xliff +++ b/apps/ios/SimpleX Localizations/fr.xcloc/Localized Contents/fr.xliff @@ -40,6 +40,10 @@ %1$@ a soutenu SimpleX Chat. Le badge a expiré le %2$@. badge alert + + %1$02d hrs %2$02d min %3$02d sec + countdown + %@ %@ @@ -155,6 +159,10 @@ %@ : copied message info + + %d day + time interval + %d days %d jours @@ -2715,6 +2723,10 @@ Il s'agit de votre propre lien unique ! Création d'un lien… No comment provided by engineer. + + Crowdfunding investors can reserve names before the sale starts: [simplex.domains](https://simplex.domains/) + No comment provided by engineer. + Crowdfunding on Wefunder No comment provided by engineer. @@ -6744,21 +6756,11 @@ alert button Ouvrir le transfert vers un autre appareil authentication reason - - Open new channel - Ouvrir un nouveau canal - new chat action - Open new chat Ouvrir une nouvelle conversation new chat action - - Open new group - Ouvrir le nouveau groupe - new chat action - Open to accept Ouvrir pour accepter @@ -8945,6 +8947,10 @@ copied message info Nom SimpleX non vérifié alert title + + SimpleX name sale starts in + No comment provided by engineer. + SimpleX one-time invitation Invitation unique SimpleX @@ -10098,6 +10104,10 @@ Vous serez invité à confirmer l'authentification avant que cette fonction ne s Mettre à jour les paramètres ? No comment provided by engineer. + + Update the app to register a SimpleX domain + No comment provided by engineer. + Updated conditions Conditions mises à jour @@ -10664,6 +10674,26 @@ alert title Vous avez déjà un profil de messagerie avec le même nom d’affichage. Veuillez choisir un autre nom. No comment provided by engineer. + + You are a contributor + Vous êtes contributeur + new chat alert + + + You are a member + Vous êtes membre + new chat alert + + + You are a moderator + Vous êtes modérateur + new chat alert + + + You are a subscriber + Vous êtes abonné·e + new chat alert + You are already connected to %@. Vous êtes déjà connecté·e à %@ via ce lien. @@ -10706,6 +10736,21 @@ Repeat join request? Répéter la demande d'adhésion ? new chat sheet title + + You are an admin + Vous êtes admin + new chat alert + + + You are an observer + Vous êtes observateur + new chat alert + + + You are an owner + Vous êtes propriétaire + new chat alert + You are connected to the server used to receive messages from this connection. Vous êtes connecté au serveur utilisé pour recevoir les messages de cette connexion. @@ -11708,6 +11753,10 @@ pref value transféré No comment provided by engineer. + + forwarded from + No comment provided by engineer. + group groupe @@ -12116,9 +12165,9 @@ time to disappear enregistré No comment provided by engineer. - - saved from %@ - enregistré à partir de %@ + + saved from + enregistré à partir de No comment provided by engineer. @@ -12215,6 +12264,10 @@ dernier message reçu : %2$@ non protégé No comment provided by engineer. + + until you can register a SimpleX domain + No comment provided by engineer. + updated channel profile profil du canal mis à jour diff --git a/apps/ios/SimpleX Localizations/hu.xcloc/Localized Contents/hu.xliff b/apps/ios/SimpleX Localizations/hu.xcloc/Localized Contents/hu.xliff index 4663996480..ee4aae63a2 100644 --- a/apps/ios/SimpleX Localizations/hu.xcloc/Localized Contents/hu.xliff +++ b/apps/ios/SimpleX Localizations/hu.xcloc/Localized Contents/hu.xliff @@ -40,6 +40,10 @@ %1$@ támogatta a SimpleX Chatet. A kitűző lejárt ekkor: %2$@. badge alert + + %1$02d hrs %2$02d min %3$02d sec + countdown + %@ %@ @@ -155,6 +159,10 @@ %@: copied message info + + %d day + time interval + %d days %d nap @@ -2715,6 +2723,10 @@ Ez a saját egyszer használható meghívója! Hivatkozás létrehozása… No comment provided by engineer. + + Crowdfunding investors can reserve names before the sale starts: [simplex.domains](https://simplex.domains/) + No comment provided by engineer. + Crowdfunding on Wefunder No comment provided by engineer. @@ -6744,21 +6756,11 @@ alert button Átköltöztetés indítása egy másik eszközre authentication reason - - Open new channel - Új csatorna megnyitása - new chat action - Open new chat Új csevegés megnyitása new chat action - - Open new group - Új csoport megnyitása - new chat action - Open to accept Megnyitás az elfogadáshoz @@ -8945,6 +8947,10 @@ copied message info Nincs ellenőrizve a SimpleX-név alert title + + SimpleX name sale starts in + No comment provided by engineer. + SimpleX one-time invitation Egyszer használható SimpleX meghívó @@ -10098,6 +10104,10 @@ A funkció bekapcsolása előtt a rendszer felszólítja a képernyőzár beáll Frissíti a beállításokat? No comment provided by engineer. + + Update the app to register a SimpleX domain + No comment provided by engineer. + Updated conditions Frissített feltételek @@ -10664,6 +10674,26 @@ alert title Már van egy csevegési profil ugyanezzel a megjelenítendő névvel. Válasszon egy másik nevet. No comment provided by engineer. + + You are a contributor + Ön közreműködő + new chat alert + + + You are a member + Ön tag + new chat alert + + + You are a moderator + Ön moderátor + new chat alert + + + You are a subscriber + Ön feliratkozó + new chat alert + You are already connected to %@. Ön már kapcsolódott a következőhöz: %@. @@ -10706,6 +10736,21 @@ Repeat join request? Megismétli a csatlakozási kérést? new chat sheet title + + You are an admin + Ön adminisztrátor + new chat alert + + + You are an observer + Ön megfigyelő + new chat alert + + + You are an owner + Ön tulajdonos + new chat alert + You are connected to the server used to receive messages from this connection. Ön kapcsolódott ahhoz a kiszolgálóhoz, amely az adott partnerétől érkező üzenetek fogadására szolgál. @@ -11708,6 +11753,10 @@ pref value továbbított No comment provided by engineer. + + forwarded from + No comment provided by engineer. + group csoport @@ -12116,9 +12165,9 @@ time to disappear mentett No comment provided by engineer. - - saved from %@ - mentve innen: %@ + + saved from + mentve innen: No comment provided by engineer. @@ -12215,6 +12264,10 @@ utoljára fogadott üzenet: %2$@ nem védett No comment provided by engineer. + + until you can register a SimpleX domain + No comment provided by engineer. + updated channel profile frissítette a csatorna profilját diff --git a/apps/ios/SimpleX Localizations/it.xcloc/Localized Contents/it.xliff b/apps/ios/SimpleX Localizations/it.xcloc/Localized Contents/it.xliff index 80f6c9a224..d1b0e19478 100644 --- a/apps/ios/SimpleX Localizations/it.xcloc/Localized Contents/it.xliff +++ b/apps/ios/SimpleX Localizations/it.xcloc/Localized Contents/it.xliff @@ -40,6 +40,10 @@ %1$@ ha sostenuto SimpleX Chat. La targhetta è scaduta il %2$@. badge alert + + %1$02d hrs %2$02d min %3$02d sec + countdown + %@ %@ @@ -155,6 +159,10 @@ %@: copied message info + + %d day + time interval + %d days %d giorni @@ -2715,6 +2723,10 @@ Questo è il tuo link una tantum! Creazione link… No comment provided by engineer. + + Crowdfunding investors can reserve names before the sale starts: [simplex.domains](https://simplex.domains/) + No comment provided by engineer. + Crowdfunding on Wefunder No comment provided by engineer. @@ -6744,21 +6756,11 @@ alert button Apri migrazione ad un altro dispositivo authentication reason - - Open new channel - Apri il nuovo canale - new chat action - Open new chat Apri la nuova chat new chat action - - Open new group - Apri il nuovo gruppo - new chat action - Open to accept Apri per accettare @@ -8945,6 +8947,10 @@ copied message info Nome SimpleX non verificato alert title + + SimpleX name sale starts in + No comment provided by engineer. + SimpleX one-time invitation Invito SimpleX una tantum @@ -10098,6 +10104,10 @@ Ti verrà chiesto di completare l'autenticazione prima di attivare questa funzio Aggiornare le impostazioni? No comment provided by engineer. + + Update the app to register a SimpleX domain + No comment provided by engineer. + Updated conditions Condizioni aggiornate @@ -10664,6 +10674,26 @@ alert title Hai già un profilo chat con lo stesso nome da mostrare. Scegli un altro nome. No comment provided by engineer. + + You are a contributor + Sei un collaboratore + new chat alert + + + You are a member + Sei un membro + new chat alert + + + You are a moderator + Sei un moderatore + new chat alert + + + You are a subscriber + Sei iscritto/a + new chat alert + You are already connected to %@. Sei già connesso/a a %@. @@ -10706,6 +10736,21 @@ Repeat join request? Ripetere la richiesta di ingresso? new chat sheet title + + You are an admin + Sei un amministratore + new chat alert + + + You are an observer + Sei un osservatore + new chat alert + + + You are an owner + Sei un proprietario + new chat alert + You are connected to the server used to receive messages from this connection. Sei connesso/a al server usato per ricevere messaggi da questa connessione. @@ -11708,6 +11753,10 @@ pref value inoltrato No comment provided by engineer. + + forwarded from + No comment provided by engineer. + group gruppo @@ -12116,9 +12165,9 @@ time to disappear salvato No comment provided by engineer. - - saved from %@ - salvato da %@ + + saved from + salvato da No comment provided by engineer. @@ -12215,6 +12264,10 @@ ultimo msg ricevuto: %2$@ non protetto No comment provided by engineer. + + until you can register a SimpleX domain + No comment provided by engineer. + updated channel profile profilo del canale aggiornato diff --git a/apps/ios/SimpleX Localizations/ja.xcloc/Localized Contents/ja.xliff b/apps/ios/SimpleX Localizations/ja.xcloc/Localized Contents/ja.xliff index 345e6836a6..5d9be60493 100644 --- a/apps/ios/SimpleX Localizations/ja.xcloc/Localized Contents/ja.xliff +++ b/apps/ios/SimpleX Localizations/ja.xcloc/Localized Contents/ja.xliff @@ -39,6 +39,10 @@ %1$@ supported SimpleX Chat. The badge expired on %2$@. badge alert + + %1$02d hrs %2$02d min %3$02d sec + countdown + %@ %@ @@ -152,6 +156,10 @@ %@: copied message info + + %d day + time interval + %d days %d 日 @@ -2491,6 +2499,10 @@ This is your own one-time link! Creating link… No comment provided by engineer. + + Crowdfunding investors can reserve names before the sale starts: [simplex.domains](https://simplex.domains/) + No comment provided by engineer. + Crowdfunding on Wefunder No comment provided by engineer. @@ -6120,18 +6132,10 @@ alert button Open migration to another device authentication reason - - Open new channel - new chat action - Open new chat new chat action - - Open new group - new chat action - Open to accept No comment provided by engineer. @@ -8048,6 +8052,10 @@ copied message info SimpleX name not verified alert title + + SimpleX name sale starts in + No comment provided by engineer. + SimpleX one-time invitation SimpleX使い捨て招待リンク @@ -9061,6 +9069,10 @@ You will be prompted to complete authentication before this feature is enabled.< Update settings? No comment provided by engineer. + + Update the app to register a SimpleX domain + No comment provided by engineer. + Updated conditions No comment provided by engineer. @@ -9554,6 +9566,23 @@ alert title 同じ表示名前のチャットプロフィールが既にあります。別のを選んでください。 No comment provided by engineer. + + You are a contributor + new chat alert + + + You are a member + あなたはメンバーです + new chat alert + + + You are a moderator + new chat alert + + + You are a subscriber + new chat alert + You are already connected to %@. すでに %@ に接続されています。 @@ -9588,6 +9617,21 @@ alert title Repeat join request? new chat sheet title + + You are an admin + あなたは管理者です + new chat alert + + + You are an observer + あなたはオブザーバーです + new chat alert + + + You are an owner + あなたはオーナーです + new chat alert + You are connected to the server used to receive messages from this connection. subscription status explanation @@ -10506,6 +10550,10 @@ pref value forwarded No comment provided by engineer. + + forwarded from + No comment provided by engineer. + group shown on group welcome message @@ -10879,8 +10927,8 @@ time to disappear saved No comment provided by engineer. - - saved from %@ + + saved from No comment provided by engineer. @@ -10965,6 +11013,10 @@ last received msg: %2$@ unprotected No comment provided by engineer. + + until you can register a SimpleX domain + No comment provided by engineer. + updated channel profile rcv group event chat item diff --git a/apps/ios/SimpleX Localizations/nl.xcloc/Localized Contents/nl.xliff b/apps/ios/SimpleX Localizations/nl.xcloc/Localized Contents/nl.xliff index 5ebd47c99a..d1b092f63b 100644 --- a/apps/ios/SimpleX Localizations/nl.xcloc/Localized Contents/nl.xliff +++ b/apps/ios/SimpleX Localizations/nl.xcloc/Localized Contents/nl.xliff @@ -39,6 +39,10 @@ %1$@ supported SimpleX Chat. The badge expired on %2$@. badge alert + + %1$02d hrs %2$02d min %3$02d sec + countdown + %@ %@ @@ -152,6 +156,10 @@ %@: copied message info + + %d day + time interval + %d days %d dagen @@ -2603,6 +2611,10 @@ Dit is uw eigen eenmalige link! Link maken… No comment provided by engineer. + + Crowdfunding investors can reserve names before the sale starts: [simplex.domains](https://simplex.domains/) + No comment provided by engineer. + Crowdfunding on Wefunder No comment provided by engineer. @@ -6508,18 +6520,10 @@ alert button Open de migratie naar een ander apparaat authentication reason - - Open new channel - new chat action - Open new chat new chat action - - Open new group - new chat action - Open to accept No comment provided by engineer. @@ -8613,6 +8617,10 @@ copied message info SimpleX name not verified alert title + + SimpleX name sale starts in + No comment provided by engineer. + SimpleX one-time invitation Eenmalige SimpleX uitnodiging @@ -9705,6 +9713,10 @@ U wordt gevraagd de authenticatie te voltooien voordat deze functie wordt ingesc Instellingen actualiseren? No comment provided by engineer. + + Update the app to register a SimpleX domain + No comment provided by engineer. + Updated conditions Bijgewerkte voorwaarden @@ -10248,6 +10260,24 @@ alert title Je hebt al een chatprofiel met dezelfde weergave naam. Kies een andere naam. No comment provided by engineer. + + You are a contributor + new chat alert + + + You are a member + Je bent lid + new chat alert + + + You are a moderator + Je bent moderator + new chat alert + + + You are a subscriber + new chat alert + You are already connected to %@. U bent al verbonden met %@. @@ -10290,6 +10320,21 @@ Repeat join request? Deelnameverzoek herhalen? new chat sheet title + + You are an admin + Je bent beheerder + new chat alert + + + You are an observer + Je bent waarnemer + new chat alert + + + You are an owner + Je bent eigenaar + new chat alert + You are connected to the server used to receive messages from this connection. subscription status explanation @@ -11254,6 +11299,10 @@ pref value doorgestuurd No comment provided by engineer. + + forwarded from + No comment provided by engineer. + group shown on group welcome message @@ -11651,9 +11700,9 @@ time to disappear opgeslagen No comment provided by engineer. - - saved from %@ - opgeslagen van %@ + + saved from + opgeslagen van No comment provided by engineer. @@ -11749,6 +11798,10 @@ laatst ontvangen bericht: %2$@ onbeschermd No comment provided by engineer. + + until you can register a SimpleX domain + No comment provided by engineer. + updated channel profile rcv group event chat item diff --git a/apps/ios/SimpleX Localizations/pl.xcloc/Localized Contents/pl.xliff b/apps/ios/SimpleX Localizations/pl.xcloc/Localized Contents/pl.xliff index 68f836184f..a48e4219d4 100644 --- a/apps/ios/SimpleX Localizations/pl.xcloc/Localized Contents/pl.xliff +++ b/apps/ios/SimpleX Localizations/pl.xcloc/Localized Contents/pl.xliff @@ -39,6 +39,10 @@ %1$@ supported SimpleX Chat. The badge expired on %2$@. badge alert + + %1$02d hrs %2$02d min %3$02d sec + countdown + %@ %@ @@ -152,6 +156,10 @@ %@: copied message info + + %d day + time interval + %d days %d dni @@ -2622,6 +2630,10 @@ To jest twój jednorazowy link! Tworzenie linku… No comment provided by engineer. + + Crowdfunding investors can reserve names before the sale starts: [simplex.domains](https://simplex.domains/) + No comment provided by engineer. + Crowdfunding on Wefunder No comment provided by engineer. @@ -6565,20 +6577,11 @@ alert button Otwórz migrację na innym urządzeniu authentication reason - - Open new channel - new chat action - Open new chat Otwórz nowy czat new chat action - - Open new group - Otwórz nową grupę - new chat action - Open to accept Otwórz by zaakceptować @@ -8699,6 +8702,10 @@ copied message info SimpleX name not verified alert title + + SimpleX name sale starts in + No comment provided by engineer. + SimpleX one-time invitation Zaproszenie jednorazowe SimpleX @@ -9805,6 +9812,10 @@ Przed włączeniem tej funkcji zostanie wyświetlony monit uwierzytelniania.Zaktualizować ustawienia? No comment provided by engineer. + + Update the app to register a SimpleX domain + No comment provided by engineer. + Updated conditions Zaktualizowane warunki @@ -10357,6 +10368,24 @@ alert title Masz już profil czatu o tej samej nazwie wyświetlanej. Proszę wybrać inną nazwę. No comment provided by engineer. + + You are a contributor + new chat alert + + + You are a member + Jesteś członkiem + new chat alert + + + You are a moderator + Jesteś moderatorem + new chat alert + + + You are a subscriber + new chat alert + You are already connected to %@. Jesteś już połączony z %@. @@ -10399,6 +10428,21 @@ Repeat join request? Powtórzyć prośbę dołączenia? new chat sheet title + + You are an admin + Jesteś administratorem + new chat alert + + + You are an observer + Jesteś obserwatorem + new chat alert + + + You are an owner + Jesteś właścicielem + new chat alert + You are connected to the server used to receive messages from this connection. Jesteś połączony z serwerem służącym do odbierania wiadomości z tego połączenia. @@ -11374,6 +11418,10 @@ pref value przekazane dalej No comment provided by engineer. + + forwarded from + No comment provided by engineer. + group grupa @@ -11776,9 +11824,9 @@ time to disappear zapisane No comment provided by engineer. - - saved from %@ - zapisane od %@ + + saved from + zapisane od No comment provided by engineer. @@ -11874,6 +11922,10 @@ ostatnia otrzymana wiadomość: %2$@ niezabezpieczony No comment provided by engineer. + + until you can register a SimpleX domain + No comment provided by engineer. + updated channel profile rcv group event chat item diff --git a/apps/ios/SimpleX Localizations/ru.xcloc/Localized Contents/ru.xliff b/apps/ios/SimpleX Localizations/ru.xcloc/Localized Contents/ru.xliff index 4d08db0a99..67d70d9708 100644 --- a/apps/ios/SimpleX Localizations/ru.xcloc/Localized Contents/ru.xliff +++ b/apps/ios/SimpleX Localizations/ru.xcloc/Localized Contents/ru.xliff @@ -40,6 +40,10 @@ %1$@ поддерживал(а) SimpleX Chat. Срок действия значка истёк %2$@. badge alert + + %1$02d hrs %2$02d min %3$02d sec + countdown + %@ %@ @@ -155,6 +159,10 @@ %@: copied message info + + %d day + time interval + %d days %d дней @@ -2715,6 +2723,10 @@ This is your own one-time link! Создаётся ссылка… No comment provided by engineer. + + Crowdfunding investors can reserve names before the sale starts: [simplex.domains](https://simplex.domains/) + No comment provided by engineer. + Crowdfunding on Wefunder No comment provided by engineer. @@ -6743,21 +6755,11 @@ alert button Открытие миграции на другое устройство authentication reason - - Open new channel - Открыть новый канал - new chat action - Open new chat Открыть новый чат new chat action - - Open new group - Открыть новую группу - new chat action - Open to accept Откройте чтобы принять @@ -8944,6 +8946,10 @@ copied message info SimpleX имя не проверено alert title + + SimpleX name sale starts in + No comment provided by engineer. + SimpleX one-time invitation SimpleX одноразовая ссылка @@ -10097,6 +10103,10 @@ You will be prompted to complete authentication before this feature is enabled.< Обновить настройки? No comment provided by engineer. + + Update the app to register a SimpleX domain + No comment provided by engineer. + Updated conditions Обновлённые условия @@ -10663,6 +10673,26 @@ alert title У Вас уже есть профиль с таким именем. Пожалуйста, выберите другое имя. No comment provided by engineer. + + You are a contributor + Вы соавтор + new chat alert + + + You are a member + Вы член группы + new chat alert + + + You are a moderator + Вы модератор + new chat alert + + + You are a subscriber + Вы подписчик + new chat alert + You are already connected to %@. Вы уже соединены с контактом %@. @@ -10705,6 +10735,21 @@ Repeat join request? Повторить запрос на вступление? new chat sheet title + + You are an admin + Вы админ + new chat alert + + + You are an observer + Вы читатель + new chat alert + + + You are an owner + Вы владелец + new chat alert + You are connected to the server used to receive messages from this connection. Вы подключены к серверу, используемому для приёма сообщений от этого соединения. @@ -11707,6 +11752,10 @@ pref value переслано No comment provided by engineer. + + forwarded from + No comment provided by engineer. + group группа @@ -12115,9 +12164,9 @@ time to disappear сохранено No comment provided by engineer. - - saved from %@ - сохранено из %@ + + saved from + сохранено из No comment provided by engineer. @@ -12214,6 +12263,10 @@ last received msg: %2$@ незащищённый No comment provided by engineer. + + until you can register a SimpleX domain + No comment provided by engineer. + updated channel profile обновил профиль канала diff --git a/apps/ios/SimpleX Localizations/th.xcloc/Localized Contents/th.xliff b/apps/ios/SimpleX Localizations/th.xcloc/Localized Contents/th.xliff index 5859a228a3..b77da016c7 100644 --- a/apps/ios/SimpleX Localizations/th.xcloc/Localized Contents/th.xliff +++ b/apps/ios/SimpleX Localizations/th.xcloc/Localized Contents/th.xliff @@ -36,6 +36,10 @@ %1$@ supported SimpleX Chat. The badge expired on %2$@. badge alert + + %1$02d hrs %2$02d min %3$02d sec + countdown + %@ %@ @@ -139,6 +143,10 @@ %@: copied message info + + %d day + time interval + %d days %d วัน @@ -2375,6 +2383,10 @@ This is your own one-time link! Creating link… No comment provided by engineer. + + Crowdfunding investors can reserve names before the sale starts: [simplex.domains](https://simplex.domains/) + No comment provided by engineer. + Crowdfunding on Wefunder No comment provided by engineer. @@ -5979,18 +5991,10 @@ alert button Open migration to another device authentication reason - - Open new channel - new chat action - Open new chat new chat action - - Open new group - new chat action - Open to accept No comment provided by engineer. @@ -7907,6 +7911,10 @@ copied message info SimpleX name not verified alert title + + SimpleX name sale starts in + No comment provided by engineer. + SimpleX one-time invitation คำเชิญ SimpleX แบบครั้งเดียว @@ -8918,6 +8926,10 @@ You will be prompted to complete authentication before this feature is enabled.< Update settings? No comment provided by engineer. + + Update the app to register a SimpleX domain + No comment provided by engineer. + Updated conditions No comment provided by engineer. @@ -9409,6 +9421,23 @@ alert title คุณมีโปรไฟล์แชทที่ใช้ชื่อแสดงเดียวกันอยู่แล้ว กรุณาเลือกชื่ออื่น No comment provided by engineer. + + You are a contributor + new chat alert + + + You are a member + คุณเป็นสมาชิก + new chat alert + + + You are a moderator + new chat alert + + + You are a subscriber + new chat alert + You are already connected to %@. คุณได้เชื่อมต่อกับ %@ แล้ว @@ -9443,6 +9472,21 @@ alert title Repeat join request? new chat sheet title + + You are an admin + คุณเป็นผู้ดูแลระบบ + new chat alert + + + You are an observer + คุณเป็นผู้สังเกตการณ์ + new chat alert + + + You are an owner + คุณเป็นเจ้าของ + new chat alert + You are connected to the server used to receive messages from this connection. subscription status explanation @@ -10356,6 +10400,10 @@ pref value forwarded No comment provided by engineer. + + forwarded from + No comment provided by engineer. + group shown on group welcome message @@ -10729,8 +10777,8 @@ time to disappear saved No comment provided by engineer. - - saved from %@ + + saved from No comment provided by engineer. @@ -10815,6 +10863,10 @@ last received msg: %2$@ unprotected No comment provided by engineer. + + until you can register a SimpleX domain + No comment provided by engineer. + updated channel profile rcv group event chat item diff --git a/apps/ios/SimpleX Localizations/tr.xcloc/Localized Contents/tr.xliff b/apps/ios/SimpleX Localizations/tr.xcloc/Localized Contents/tr.xliff index f6c20f8cdd..7b34d788cc 100644 --- a/apps/ios/SimpleX Localizations/tr.xcloc/Localized Contents/tr.xliff +++ b/apps/ios/SimpleX Localizations/tr.xcloc/Localized Contents/tr.xliff @@ -40,6 +40,10 @@ %1$@, SimpleX Chat'i destekledi. Rozetin süresi %2$@ tarihinde doldu. badge alert + + %1$02d hrs %2$02d min %3$02d sec + countdown + %@ %@ @@ -155,6 +159,10 @@ %@: copied message info + + %d day + time interval + %d days %d gün @@ -2633,6 +2641,10 @@ Bu senin kendi tek kullanımlık bağlantın! Link oluşturuluyor… No comment provided by engineer. + + Crowdfunding investors can reserve names before the sale starts: [simplex.domains](https://simplex.domains/) + No comment provided by engineer. + Crowdfunding on Wefunder No comment provided by engineer. @@ -6561,20 +6573,11 @@ alert button Başka bir cihaza açık geçiş authentication reason - - Open new channel - new chat action - Open new chat Yeni sohbet aç new chat action - - Open new group - Yeni grup aç - new chat action - Open to accept Kabul etmek için aç @@ -8689,6 +8692,10 @@ copied message info SimpleX name not verified alert title + + SimpleX name sale starts in + No comment provided by engineer. + SimpleX one-time invitation SimpleX tek kullanımlık davet @@ -9791,6 +9798,10 @@ Bu özellik etkinleştirilmeden önce kimlik doğrulamayı tamamlamanız istenec Ayarları güncelleyelim mi? No comment provided by engineer. + + Update the app to register a SimpleX domain + No comment provided by engineer. + Updated conditions Güncellenmiş koşullar @@ -10342,6 +10353,24 @@ alert title Aynı görünen ada sahip bir konuşma profilin zaten var. Lütfen başka bir ad seç. No comment provided by engineer. + + You are a contributor + new chat alert + + + You are a member + Üyesiniz + new chat alert + + + You are a moderator + Moderatörsünüz + new chat alert + + + You are a subscriber + new chat alert + You are already connected to %@. Zaten %@'a bağlısınız. @@ -10384,6 +10413,21 @@ Repeat join request? Katılma isteği tekrarlansın mı? new chat sheet title + + You are an admin + Yöneticisiniz + new chat alert + + + You are an observer + Gözlemcisiniz + new chat alert + + + You are an owner + Sahipsiniz + new chat alert + You are connected to the server used to receive messages from this connection. subscription status explanation @@ -11354,6 +11398,10 @@ pref value iletildi No comment provided by engineer. + + forwarded from + No comment provided by engineer. + group grup @@ -11755,9 +11803,9 @@ time to disappear kaydedildi No comment provided by engineer. - - saved from %@ - %@ tarafından kaydedildi + + saved from + kaydedildi: No comment provided by engineer. @@ -11853,6 +11901,10 @@ son alınan msj: %2$@ korumasız No comment provided by engineer. + + until you can register a SimpleX domain + No comment provided by engineer. + updated channel profile rcv group event chat item diff --git a/apps/ios/SimpleX Localizations/uk.xcloc/Localized Contents/uk.xliff b/apps/ios/SimpleX Localizations/uk.xcloc/Localized Contents/uk.xliff index 1d6c687a94..e2df9d37af 100644 --- a/apps/ios/SimpleX Localizations/uk.xcloc/Localized Contents/uk.xliff +++ b/apps/ios/SimpleX Localizations/uk.xcloc/Localized Contents/uk.xliff @@ -40,6 +40,10 @@ %1$@ підтримував SimpleX Chat. Термін дії значка вичерпався %2$@. badge alert + + %1$02d hrs %2$02d min %3$02d sec + countdown + %@ %@ @@ -155,6 +159,10 @@ %@: copied message info + + %d day + time interval + %d days %d днів @@ -2654,6 +2662,10 @@ This is your own one-time link! Створення посилання… No comment provided by engineer. + + Crowdfunding investors can reserve names before the sale starts: [simplex.domains](https://simplex.domains/) + No comment provided by engineer. + Crowdfunding on Wefunder No comment provided by engineer. @@ -6573,20 +6585,11 @@ alert button Відкрита міграція на інший пристрій authentication reason - - Open new channel - new chat action - Open new chat Відкрити новий чат new chat action - - Open new group - Відкрити нову групу - new chat action - Open to accept Відкрити для прийняття @@ -8699,6 +8702,10 @@ copied message info SimpleX name not verified alert title + + SimpleX name sale starts in + No comment provided by engineer. + SimpleX one-time invitation Одноразове запрошення SimpleX @@ -9799,6 +9806,10 @@ You will be prompted to complete authentication before this feature is enabled.< Оновити налаштування? No comment provided by engineer. + + Update the app to register a SimpleX domain + No comment provided by engineer. + Updated conditions Оновлені умови @@ -10350,6 +10361,24 @@ alert title Ви вже маєте профіль у чаті з таким самим іменем. Будь ласка, виберіть інше ім'я. No comment provided by engineer. + + You are a contributor + new chat alert + + + You are a member + Ви учасник + new chat alert + + + You are a moderator + Ви модератор + new chat alert + + + You are a subscriber + new chat alert + You are already connected to %@. Ви вже підключені до %@. @@ -10392,6 +10421,21 @@ Repeat join request? Повторити запит на приєднання? new chat sheet title + + You are an admin + Ви адмін + new chat alert + + + You are an observer + Ви спостерігач + new chat alert + + + You are an owner + Ви власник + new chat alert + You are connected to the server used to receive messages from this connection. subscription status explanation @@ -11362,6 +11406,10 @@ pref value переслано No comment provided by engineer. + + forwarded from + No comment provided by engineer. + group група @@ -11762,9 +11810,9 @@ time to disappear збережено No comment provided by engineer. - - saved from %@ - збережено з %@ + + saved from + збережено з No comment provided by engineer. @@ -11860,6 +11908,10 @@ last received msg: %2$@ незахищені No comment provided by engineer. + + until you can register a SimpleX domain + No comment provided by engineer. + updated channel profile rcv group event chat item diff --git a/apps/ios/SimpleX Localizations/zh-Hans.xcloc/Localized Contents/zh-Hans.xliff b/apps/ios/SimpleX Localizations/zh-Hans.xcloc/Localized Contents/zh-Hans.xliff index c977009785..1f7e0c5fa2 100644 --- a/apps/ios/SimpleX Localizations/zh-Hans.xcloc/Localized Contents/zh-Hans.xliff +++ b/apps/ios/SimpleX Localizations/zh-Hans.xcloc/Localized Contents/zh-Hans.xliff @@ -40,6 +40,10 @@ %1$@ 曾是 SimpleX Chat 支持者。徽章已于 %2$@ 过期。 badge alert + + %1$02d hrs %2$02d min %3$02d sec + countdown + %@ %@ @@ -155,6 +159,10 @@ %@: copied message info + + %d day + time interval + %d days %d 天 @@ -2710,6 +2718,10 @@ This is your own one-time link! 创建链接中… No comment provided by engineer. + + Crowdfunding investors can reserve names before the sale starts: [simplex.domains](https://simplex.domains/) + No comment provided by engineer. + Crowdfunding on Wefunder No comment provided by engineer. @@ -6725,21 +6737,11 @@ alert button 打开迁移到另一台设备 authentication reason - - Open new channel - 打开新频道 - new chat action - Open new chat 打开新聊天 new chat action - - Open new group - 打开新群 - new chat action - Open to accept 打开以接受 @@ -8913,6 +8915,10 @@ copied message info SimpleX 名称未验证 alert title + + SimpleX name sale starts in + No comment provided by engineer. + SimpleX one-time invitation SimpleX 一次性邀请 @@ -10056,6 +10062,10 @@ You will be prompted to complete authentication before this feature is enabled.< 更新设置? No comment provided by engineer. + + Update the app to register a SimpleX domain + No comment provided by engineer. + Updated conditions 条款已更新 @@ -10620,6 +10630,25 @@ alert title 您已经有一个显示名相同的聊天资料。请选择另一个名字。 No comment provided by engineer. + + You are a contributor + new chat alert + + + You are a member + 你是成员 + new chat alert + + + You are a moderator + 你是协管 + new chat alert + + + You are a subscriber + 你是订阅者 + new chat alert + You are already connected to %@. 您已经连接到 %@。 @@ -10662,6 +10691,21 @@ Repeat join request? 重复加入请求? new chat sheet title + + You are an admin + 你是管理员 + new chat alert + + + You are an observer + 你是观察者 + new chat alert + + + You are an owner + 你是群主 + new chat alert + You are connected to the server used to receive messages from this connection. 你已连接到用于接收该连接消息的服务器。 @@ -11662,6 +11706,10 @@ pref value 已转发 No comment provided by engineer. + + forwarded from + No comment provided by engineer. + group @@ -12070,9 +12118,9 @@ time to disappear 已保存 No comment provided by engineer. - - saved from %@ - 保存自 %@ + + saved from + 保存自 No comment provided by engineer. @@ -12168,6 +12216,10 @@ last received msg: %2$@ 未受保护 No comment provided by engineer. + + until you can register a SimpleX domain + No comment provided by engineer. + updated channel profile 频道更新了频道资料 diff --git a/apps/ios/bg.lproj/Localizable.strings b/apps/ios/bg.lproj/Localizable.strings index 05f5185e4d..4eecbe2fdc 100644 --- a/apps/ios/bg.lproj/Localizable.strings +++ b/apps/ios/bg.lproj/Localizable.strings @@ -3516,10 +3516,10 @@ chat item action */ "Saved" = "Запазено"; /* No comment provided by engineer. */ -"Saved from" = "Запазено от"; +"saved from" = "запазено от"; /* No comment provided by engineer. */ -"saved from" = "запазено от"; +"Saved from" = "Запазено от"; /* message info title */ "Saved message" = "Запазено съобщение"; @@ -4393,6 +4393,9 @@ server test failure */ /* No comment provided by engineer. */ "You already have a chat profile with the same display name. Please choose another name." = "Вече имате чат профил със същото име. Моля, изберете друго име."; +/* new chat alert */ +"You are a member" = "Вие сте член"; + /* No comment provided by engineer. */ "You are already connected to %@." = "Вече сте вече свързани с %@."; @@ -4414,24 +4417,21 @@ server test failure */ /* new chat sheet title */ "You are already joining the group!\nRepeat join request?" = "Вече се присъединихте към групата!\nИзпрати отново заявката за присъединяване?"; -/* No comment provided by engineer. */ -"You are invited to group" = "Поканени сте в групата"; - -/* No comment provided by engineer. */ -"you are observer" = "вие сте наблюдател"; +/* new chat alert */ +"You are an admin" = "Вие сте админ"; /* new chat alert */ "You are an observer" = "Вие сте наблюдател"; -/* new chat alert */ -"You are a member" = "Вие сте член"; - -/* new chat alert */ -"You are an admin" = "Вие сте админ"; - /* new chat alert */ "You are an owner" = "Вие сте собственик"; +/* No comment provided by engineer. */ +"You are invited to group" = "Поканени сте в групата"; + +/* No comment provided by engineer. */ +"you are observer" = "вие сте наблюдател"; + /* snd group event chat item */ "you blocked %@" = "вие блокирахте %@"; diff --git a/apps/ios/cs.lproj/Localizable.strings b/apps/ios/cs.lproj/Localizable.strings index cb596480dc..d9d723be36 100644 --- a/apps/ios/cs.lproj/Localizable.strings +++ b/apps/ios/cs.lproj/Localizable.strings @@ -3505,27 +3505,27 @@ server test failure */ /* No comment provided by engineer. */ "You already have a chat profile with the same display name. Please choose another name." = "Již máte profil chatu se stejným zobrazovacím názvem. Zvolte prosím jiné jméno."; +/* new chat alert */ +"You are a member" = "Jste člen"; + /* No comment provided by engineer. */ "You are already connected to %@." = "Již jste připojeni k %@."; +/* new chat alert */ +"You are an admin" = "Jste správce"; + +/* new chat alert */ +"You are an observer" = "Jste pozorovatel"; + +/* new chat alert */ +"You are an owner" = "Jste vlastník"; + /* No comment provided by engineer. */ "You are invited to group" = "Jste pozváni do skupiny"; /* No comment provided by engineer. */ "you are observer" = "jste pozorovatel"; -/* new chat alert */ -"You are an observer" = "Jste pozorovatel"; - -/* new chat alert */ -"You are a member" = "Jste člen"; - -/* new chat alert */ -"You are an admin" = "Jste správce"; - -/* new chat alert */ -"You are an owner" = "Jste vlastník"; - /* No comment provided by engineer. */ "You can accept calls from lock screen, without device and app authentication." = "Můžete přijímat hovory z obrazovky zámku, bez ověření zařízení a aplikace."; diff --git a/apps/ios/de.lproj/Localizable.strings b/apps/ios/de.lproj/Localizable.strings index 924cbc2735..7d6fda744f 100644 --- a/apps/ios/de.lproj/Localizable.strings +++ b/apps/ios/de.lproj/Localizable.strings @@ -4464,15 +4464,9 @@ alert button */ /* authentication reason */ "Open migration to another device" = "Migration auf ein anderes Gerät öffnen"; -/* new chat action */ -"Open new channel" = "Neuen Kanal öffnen"; - /* new chat action */ "Open new chat" = "Neuen Chat öffnen"; -/* new chat action */ -"Open new group" = "Neue Gruppe öffnen"; - /* No comment provided by engineer. */ "Open Settings" = "Geräte-Einstellungen öffnen"; @@ -5343,10 +5337,10 @@ chat item action */ "Saved" = "Abgespeichert"; /* No comment provided by engineer. */ -"Saved from" = "Abgespeichert von"; +"saved from" = "abgespeichert von"; /* No comment provided by engineer. */ -"saved from" = "abgespeichert von"; +"Saved from" = "Abgespeichert von"; /* message info title */ "Saved message" = "Gespeicherte Nachricht"; @@ -7013,6 +7007,18 @@ alert title */ /* No comment provided by engineer. */ "You already have a chat profile with the same display name. Please choose another name." = "Sie haben schon ein Chat-Profil mit dem gleichen Anzeigenamen. Bitte wählen Sie einen anderen Namen aus."; +/* new chat alert */ +"You are a contributor" = "Sie sind Mitwirkender"; + +/* new chat alert */ +"You are a member" = "Sie sind Mitglied"; + +/* new chat alert */ +"You are a moderator" = "Sie sind Moderator"; + +/* new chat alert */ +"You are a subscriber" = "Sie sind Abonnent"; + /* No comment provided by engineer. */ "You are already connected to %@." = "Sie sind bereits mit %@ verbunden."; @@ -7037,6 +7043,15 @@ alert title */ /* new chat sheet title */ "You are already joining the group!\nRepeat join request?" = "Sie sind bereits Mitglied dieser Gruppe!\nVerbindungsanfrage wiederholen?"; +/* new chat alert */ +"You are an admin" = "Sie sind Admin"; + +/* new chat alert */ +"You are an observer" = "Sie sind Beobachter"; + +/* new chat alert */ +"You are an owner" = "Sie sind Eigentümer"; + /* subscription status explanation */ "You are connected to the server used to receive messages from this connection." = "Sie sind mit dem Server verbunden, der für den Empfang von Nachrichten dieser Verbindung genutzt wird."; @@ -7052,27 +7067,6 @@ alert title */ /* No comment provided by engineer. */ "you are observer" = "Sie sind Beobachter"; -/* new chat alert */ -"You are an observer" = "Sie sind Beobachter"; - -/* new chat alert */ -"You are a member" = "Sie sind Mitglied"; - -/* new chat alert */ -"You are a moderator" = "Sie sind Moderator"; - -/* new chat alert */ -"You are an admin" = "Sie sind Admin"; - -/* new chat alert */ -"You are an owner" = "Sie sind Eigentümer"; - -/* new chat alert */ -"You are a subscriber" = "Sie sind Abonnent"; - -/* new chat alert */ -"You are a contributor" = "Sie sind Mitwirkender"; - /* No comment provided by engineer. */ "you are subscriber" = "Sie sind Abonnent"; diff --git a/apps/ios/es.lproj/Localizable.strings b/apps/ios/es.lproj/Localizable.strings index 02f6415cca..cca9ef9ba5 100644 --- a/apps/ios/es.lproj/Localizable.strings +++ b/apps/ios/es.lproj/Localizable.strings @@ -4464,15 +4464,9 @@ alert button */ /* authentication reason */ "Open migration to another device" = "Abrir menú migración a otro dispositivo"; -/* new chat action */ -"Open new channel" = "Abrir canal nuevo"; - /* new chat action */ "Open new chat" = "Abrir chat nuevo"; -/* new chat action */ -"Open new group" = "Abrir grupo nuevo"; - /* No comment provided by engineer. */ "Open Settings" = "Abrir Configuración"; @@ -5343,10 +5337,10 @@ chat item action */ "Saved" = "Guardado"; /* No comment provided by engineer. */ -"Saved from" = "Guardado desde"; +"saved from" = "Guardado desde"; /* No comment provided by engineer. */ -"saved from" = "Guardado desde"; +"Saved from" = "Guardado desde"; /* message info title */ "Saved message" = "Mensaje guardado"; @@ -7013,6 +7007,18 @@ alert title */ /* No comment provided by engineer. */ "You already have a chat profile with the same display name. Please choose another name." = "Ya tienes un perfil con este nombre mostrado. Por favor, elige otro nombre."; +/* new chat alert */ +"You are a contributor" = "Eres colaborador"; + +/* new chat alert */ +"You are a member" = "Eres miembro"; + +/* new chat alert */ +"You are a moderator" = "Eres moderador"; + +/* new chat alert */ +"You are a subscriber" = "Eres suscriptor"; + /* No comment provided by engineer. */ "You are already connected to %@." = "Ya estás conectado con %@."; @@ -7037,6 +7043,15 @@ alert title */ /* new chat sheet title */ "You are already joining the group!\nRepeat join request?" = "¡En proceso de unirte al grupo!\n¿Repetir solicitud de admisión?"; +/* new chat alert */ +"You are an admin" = "Eres administrador"; + +/* new chat alert */ +"You are an observer" = "Eres observador"; + +/* new chat alert */ +"You are an owner" = "Eres propietario"; + /* subscription status explanation */ "You are connected to the server used to receive messages from this connection." = "Estás conectado al servidor usado para recibir mensajes de esta conexión."; @@ -7052,27 +7067,6 @@ alert title */ /* No comment provided by engineer. */ "you are observer" = "Tu rol es observador"; -/* new chat alert */ -"You are an observer" = "Eres observador"; - -/* new chat alert */ -"You are a member" = "Eres miembro"; - -/* new chat alert */ -"You are a moderator" = "Eres moderador"; - -/* new chat alert */ -"You are an admin" = "Eres administrador"; - -/* new chat alert */ -"You are an owner" = "Eres propietario"; - -/* new chat alert */ -"You are a subscriber" = "Eres suscriptor"; - -/* new chat alert */ -"You are a contributor" = "Eres colaborador"; - /* No comment provided by engineer. */ "you are subscriber" = "eres suscriptor"; diff --git a/apps/ios/fi.lproj/Localizable.strings b/apps/ios/fi.lproj/Localizable.strings index 8abb4e69f8..0ec2565331 100644 --- a/apps/ios/fi.lproj/Localizable.strings +++ b/apps/ios/fi.lproj/Localizable.strings @@ -3141,27 +3141,27 @@ server test failure */ /* No comment provided by engineer. */ "You already have a chat profile with the same display name. Please choose another name." = "Sinulla on jo keskusteluprofiili samalla näyttönimellä. Valitse toinen nimi."; +/* new chat alert */ +"You are a member" = "Olet jäsen"; + /* No comment provided by engineer. */ "You are already connected to %@." = "Olet jo muodostanut yhteyden %@:n kanssa."; +/* new chat alert */ +"You are an admin" = "Olet ylläpitäjä"; + +/* new chat alert */ +"You are an observer" = "Olet tarkkailija"; + +/* new chat alert */ +"You are an owner" = "Olet omistaja"; + /* No comment provided by engineer. */ "You are invited to group" = "Sinut on kutsuttu ryhmään"; /* No comment provided by engineer. */ "you are observer" = "olet tarkkailija"; -/* new chat alert */ -"You are an observer" = "Olet tarkkailija"; - -/* new chat alert */ -"You are a member" = "Olet jäsen"; - -/* new chat alert */ -"You are an admin" = "Olet ylläpitäjä"; - -/* new chat alert */ -"You are an owner" = "Olet omistaja"; - /* No comment provided by engineer. */ "You can accept calls from lock screen, without device and app authentication." = "Voit vastaanottaa puheluita lukitusnäytöltä ilman laitteen ja sovelluksen todennusta."; diff --git a/apps/ios/fr.lproj/Localizable.strings b/apps/ios/fr.lproj/Localizable.strings index 6816de9f5f..65e81432be 100644 --- a/apps/ios/fr.lproj/Localizable.strings +++ b/apps/ios/fr.lproj/Localizable.strings @@ -4464,15 +4464,9 @@ alert button */ /* authentication reason */ "Open migration to another device" = "Ouvrir le transfert vers un autre appareil"; -/* new chat action */ -"Open new channel" = "Ouvrir un nouveau canal"; - /* new chat action */ "Open new chat" = "Ouvrir une nouvelle conversation"; -/* new chat action */ -"Open new group" = "Ouvrir le nouveau groupe"; - /* No comment provided by engineer. */ "Open Settings" = "Ouvrir les Paramètres"; @@ -5343,10 +5337,10 @@ chat item action */ "Saved" = "Enregistré"; /* No comment provided by engineer. */ -"Saved from" = "Enregistré depuis"; +"saved from" = "enregistré à partir de"; /* No comment provided by engineer. */ -"saved from" = "enregistré à partir de"; +"Saved from" = "Enregistré depuis"; /* message info title */ "Saved message" = "Message enregistré"; @@ -7013,6 +7007,18 @@ alert title */ /* No comment provided by engineer. */ "You already have a chat profile with the same display name. Please choose another name." = "Vous avez déjà un profil de messagerie avec le même nom d’affichage. Veuillez choisir un autre nom."; +/* new chat alert */ +"You are a contributor" = "Vous êtes contributeur"; + +/* new chat alert */ +"You are a member" = "Vous êtes membre"; + +/* new chat alert */ +"You are a moderator" = "Vous êtes modérateur"; + +/* new chat alert */ +"You are a subscriber" = "Vous êtes abonné·e"; + /* No comment provided by engineer. */ "You are already connected to %@." = "Vous êtes déjà connecté·e à %@ via ce lien."; @@ -7037,6 +7043,15 @@ alert title */ /* new chat sheet title */ "You are already joining the group!\nRepeat join request?" = "Vous êtes déjà membre de ce groupe !\nRépéter la demande d'adhésion ?"; +/* new chat alert */ +"You are an admin" = "Vous êtes admin"; + +/* new chat alert */ +"You are an observer" = "Vous êtes observateur"; + +/* new chat alert */ +"You are an owner" = "Vous êtes propriétaire"; + /* subscription status explanation */ "You are connected to the server used to receive messages from this connection." = "Vous êtes connecté au serveur utilisé pour recevoir les messages de cette connexion."; @@ -7052,27 +7067,6 @@ alert title */ /* No comment provided by engineer. */ "you are observer" = "vous êtes observateur"; -/* new chat alert */ -"You are an observer" = "Vous êtes observateur"; - -/* new chat alert */ -"You are a member" = "Vous êtes membre"; - -/* new chat alert */ -"You are a moderator" = "Vous êtes modérateur"; - -/* new chat alert */ -"You are an admin" = "Vous êtes admin"; - -/* new chat alert */ -"You are an owner" = "Vous êtes propriétaire"; - -/* new chat alert */ -"You are a subscriber" = "Vous êtes abonné·e"; - -/* new chat alert */ -"You are a contributor" = "Vous êtes contributeur"; - /* No comment provided by engineer. */ "you are subscriber" = "vous êtes abonné·e"; diff --git a/apps/ios/hu.lproj/Localizable.strings b/apps/ios/hu.lproj/Localizable.strings index 004111f914..a468ad982b 100644 --- a/apps/ios/hu.lproj/Localizable.strings +++ b/apps/ios/hu.lproj/Localizable.strings @@ -4464,15 +4464,9 @@ alert button */ /* authentication reason */ "Open migration to another device" = "Átköltöztetés indítása egy másik eszközre"; -/* new chat action */ -"Open new channel" = "Új csatorna megnyitása"; - /* new chat action */ "Open new chat" = "Új csevegés megnyitása"; -/* new chat action */ -"Open new group" = "Új csoport megnyitása"; - /* No comment provided by engineer. */ "Open Settings" = "Beállítások megnyitása"; @@ -5343,10 +5337,10 @@ chat item action */ "Saved" = "Mentett"; /* No comment provided by engineer. */ -"Saved from" = "Mentve innen"; +"saved from" = "mentve innen:"; /* No comment provided by engineer. */ -"saved from" = "mentve innen:"; +"Saved from" = "Mentve innen"; /* message info title */ "Saved message" = "Mentett üzenet"; @@ -7013,6 +7007,18 @@ alert title */ /* No comment provided by engineer. */ "You already have a chat profile with the same display name. Please choose another name." = "Már van egy csevegési profil ugyanezzel a megjelenítendő névvel. Válasszon egy másik nevet."; +/* new chat alert */ +"You are a contributor" = "Ön közreműködő"; + +/* new chat alert */ +"You are a member" = "Ön tag"; + +/* new chat alert */ +"You are a moderator" = "Ön moderátor"; + +/* new chat alert */ +"You are a subscriber" = "Ön feliratkozó"; + /* No comment provided by engineer. */ "You are already connected to %@." = "Ön már kapcsolódott a következőhöz: %@."; @@ -7037,6 +7043,15 @@ alert title */ /* new chat sheet title */ "You are already joining the group!\nRepeat join request?" = "A csatlakozás már folyamatban van a csoporthoz!\nMegismétli a csatlakozási kérést?"; +/* new chat alert */ +"You are an admin" = "Ön adminisztrátor"; + +/* new chat alert */ +"You are an observer" = "Ön megfigyelő"; + +/* new chat alert */ +"You are an owner" = "Ön tulajdonos"; + /* subscription status explanation */ "You are connected to the server used to receive messages from this connection." = "Ön kapcsolódott ahhoz a kiszolgálóhoz, amely az adott partnerétől érkező üzenetek fogadására szolgál."; @@ -7052,27 +7067,6 @@ alert title */ /* No comment provided by engineer. */ "you are observer" = "Ön megfigyelő"; -/* new chat alert */ -"You are an observer" = "Ön megfigyelő"; - -/* new chat alert */ -"You are a member" = "Ön tag"; - -/* new chat alert */ -"You are a moderator" = "Ön moderátor"; - -/* new chat alert */ -"You are an admin" = "Ön adminisztrátor"; - -/* new chat alert */ -"You are an owner" = "Ön tulajdonos"; - -/* new chat alert */ -"You are a subscriber" = "Ön feliratkozó"; - -/* new chat alert */ -"You are a contributor" = "Ön közreműködő"; - /* No comment provided by engineer. */ "you are subscriber" = "Ön feliratkozó"; diff --git a/apps/ios/it.lproj/Localizable.strings b/apps/ios/it.lproj/Localizable.strings index dd364b27ce..6a36b39e96 100644 --- a/apps/ios/it.lproj/Localizable.strings +++ b/apps/ios/it.lproj/Localizable.strings @@ -4464,15 +4464,9 @@ alert button */ /* authentication reason */ "Open migration to another device" = "Apri migrazione ad un altro dispositivo"; -/* new chat action */ -"Open new channel" = "Apri il nuovo canale"; - /* new chat action */ "Open new chat" = "Apri la nuova chat"; -/* new chat action */ -"Open new group" = "Apri il nuovo gruppo"; - /* No comment provided by engineer. */ "Open Settings" = "Apri le impostazioni"; @@ -5343,10 +5337,10 @@ chat item action */ "Saved" = "Salvato"; /* No comment provided by engineer. */ -"Saved from" = "Salvato da"; +"saved from" = "salvato da"; /* No comment provided by engineer. */ -"saved from" = "salvato da"; +"Saved from" = "Salvato da"; /* message info title */ "Saved message" = "Messaggio salvato"; @@ -7013,6 +7007,18 @@ alert title */ /* No comment provided by engineer. */ "You already have a chat profile with the same display name. Please choose another name." = "Hai già un profilo chat con lo stesso nome da mostrare. Scegli un altro nome."; +/* new chat alert */ +"You are a contributor" = "Sei un collaboratore"; + +/* new chat alert */ +"You are a member" = "Sei un membro"; + +/* new chat alert */ +"You are a moderator" = "Sei un moderatore"; + +/* new chat alert */ +"You are a subscriber" = "Sei iscritto/a"; + /* No comment provided by engineer. */ "You are already connected to %@." = "Sei già connesso/a a %@."; @@ -7037,6 +7043,15 @@ alert title */ /* new chat sheet title */ "You are already joining the group!\nRepeat join request?" = "Stai già entrando nel gruppo!\nRipetere la richiesta di ingresso?"; +/* new chat alert */ +"You are an admin" = "Sei un amministratore"; + +/* new chat alert */ +"You are an observer" = "Sei un osservatore"; + +/* new chat alert */ +"You are an owner" = "Sei un proprietario"; + /* subscription status explanation */ "You are connected to the server used to receive messages from this connection." = "Sei connesso/a al server usato per ricevere messaggi da questa connessione."; @@ -7052,27 +7067,6 @@ alert title */ /* No comment provided by engineer. */ "you are observer" = "sei un osservatore"; -/* new chat alert */ -"You are an observer" = "Sei un osservatore"; - -/* new chat alert */ -"You are a member" = "Sei un membro"; - -/* new chat alert */ -"You are a moderator" = "Sei un moderatore"; - -/* new chat alert */ -"You are an admin" = "Sei un amministratore"; - -/* new chat alert */ -"You are an owner" = "Sei un proprietario"; - -/* new chat alert */ -"You are a subscriber" = "Sei iscritto/a"; - -/* new chat alert */ -"You are a contributor" = "Sei un collaboratore"; - /* No comment provided by engineer. */ "you are subscriber" = "sei iscritto/a"; diff --git a/apps/ios/ja.lproj/Localizable.strings b/apps/ios/ja.lproj/Localizable.strings index 3eb5fa5d8b..9d5d160b0a 100644 --- a/apps/ios/ja.lproj/Localizable.strings +++ b/apps/ios/ja.lproj/Localizable.strings @@ -3475,27 +3475,27 @@ server test failure */ /* No comment provided by engineer. */ "You already have a chat profile with the same display name. Please choose another name." = "同じ表示名前のチャットプロフィールが既にあります。別のを選んでください。"; +/* new chat alert */ +"You are a member" = "あなたはメンバーです"; + /* No comment provided by engineer. */ "You are already connected to %@." = "すでに %@ に接続されています。"; +/* new chat alert */ +"You are an admin" = "あなたは管理者です"; + +/* new chat alert */ +"You are an observer" = "あなたはオブザーバーです"; + +/* new chat alert */ +"You are an owner" = "あなたはオーナーです"; + /* No comment provided by engineer. */ "You are invited to group" = "グループ招待が届きました"; /* No comment provided by engineer. */ "you are observer" = "あなたはオブザーバーです"; -/* new chat alert */ -"You are an observer" = "あなたはオブザーバーです"; - -/* new chat alert */ -"You are a member" = "あなたはメンバーです"; - -/* new chat alert */ -"You are an admin" = "あなたは管理者です"; - -/* new chat alert */ -"You are an owner" = "あなたはオーナーです"; - /* No comment provided by engineer. */ "You can accept calls from lock screen, without device and app authentication." = "デバイスやアプリの認証を行わずに、ロック画面から通話を受けることができます。"; diff --git a/apps/ios/nl.lproj/Localizable.strings b/apps/ios/nl.lproj/Localizable.strings index 7164633090..4161bac952 100644 --- a/apps/ios/nl.lproj/Localizable.strings +++ b/apps/ios/nl.lproj/Localizable.strings @@ -4408,10 +4408,10 @@ chat item action */ "Saved" = "Opgeslagen"; /* No comment provided by engineer. */ -"Saved from" = "Opgeslagen van"; +"saved from" = "opgeslagen van"; /* No comment provided by engineer. */ -"saved from" = "opgeslagen van"; +"Saved from" = "Opgeslagen van"; /* message info title */ "Saved message" = "Opgeslagen bericht"; @@ -5706,6 +5706,12 @@ server test failure */ /* No comment provided by engineer. */ "You already have a chat profile with the same display name. Please choose another name." = "Je hebt al een chatprofiel met dezelfde weergave naam. Kies een andere naam."; +/* new chat alert */ +"You are a member" = "Je bent lid"; + +/* new chat alert */ +"You are a moderator" = "Je bent moderator"; + /* No comment provided by engineer. */ "You are already connected to %@." = "U bent al verbonden met %@."; @@ -5730,6 +5736,15 @@ server test failure */ /* new chat sheet title */ "You are already joining the group!\nRepeat join request?" = "Je sluit je al aan bij de groep!\nDeelnameverzoek herhalen?"; +/* new chat alert */ +"You are an admin" = "Je bent beheerder"; + +/* new chat alert */ +"You are an observer" = "Je bent waarnemer"; + +/* new chat alert */ +"You are an owner" = "Je bent eigenaar"; + /* No comment provided by engineer. */ "You are invited to group" = "Je bent uitgenodigd voor de groep"; @@ -5739,21 +5754,6 @@ server test failure */ /* No comment provided by engineer. */ "you are observer" = "je bent waarnemer"; -/* new chat alert */ -"You are an observer" = "Je bent waarnemer"; - -/* new chat alert */ -"You are a member" = "Je bent lid"; - -/* new chat alert */ -"You are a moderator" = "Je bent moderator"; - -/* new chat alert */ -"You are an admin" = "Je bent beheerder"; - -/* new chat alert */ -"You are an owner" = "Je bent eigenaar"; - /* snd group event chat item */ "you blocked %@" = "je hebt %@ geblokkeerd"; diff --git a/apps/ios/pl.lproj/Localizable.strings b/apps/ios/pl.lproj/Localizable.strings index eb5074dc00..3288d2545b 100644 --- a/apps/ios/pl.lproj/Localizable.strings +++ b/apps/ios/pl.lproj/Localizable.strings @@ -3900,9 +3900,6 @@ alert button */ /* new chat action */ "Open new chat" = "Otwórz nowy czat"; -/* new chat action */ -"Open new group" = "Otwórz nową grupę"; - /* No comment provided by engineer. */ "Open Settings" = "Otwórz Ustawienia"; @@ -4643,10 +4640,10 @@ chat item action */ "Saved" = "Zapisane"; /* No comment provided by engineer. */ -"Saved from" = "Zapisane od"; +"saved from" = "zapisane od"; /* No comment provided by engineer. */ -"saved from" = "zapisane od"; +"Saved from" = "Zapisane od"; /* message info title */ "Saved message" = "Zachowano wiadomość"; @@ -6056,6 +6053,12 @@ alert title */ /* No comment provided by engineer. */ "You already have a chat profile with the same display name. Please choose another name." = "Masz już profil czatu o tej samej nazwie wyświetlanej. Proszę wybrać inną nazwę."; +/* new chat alert */ +"You are a member" = "Jesteś członkiem"; + +/* new chat alert */ +"You are a moderator" = "Jesteś moderatorem"; + /* No comment provided by engineer. */ "You are already connected to %@." = "Jesteś już połączony z %@."; @@ -6080,6 +6083,15 @@ alert title */ /* new chat sheet title */ "You are already joining the group!\nRepeat join request?" = "Już dołączasz do grupy!\nPowtórzyć prośbę dołączenia?"; +/* new chat alert */ +"You are an admin" = "Jesteś administratorem"; + +/* new chat alert */ +"You are an observer" = "Jesteś obserwatorem"; + +/* new chat alert */ +"You are an owner" = "Jesteś właścicielem"; + /* subscription status explanation */ "You are connected to the server used to receive messages from this connection." = "Jesteś połączony z serwerem służącym do odbierania wiadomości z tego połączenia."; @@ -6095,21 +6107,6 @@ alert title */ /* No comment provided by engineer. */ "you are observer" = "jesteś obserwatorem"; -/* new chat alert */ -"You are an observer" = "Jesteś obserwatorem"; - -/* new chat alert */ -"You are a member" = "Jesteś członkiem"; - -/* new chat alert */ -"You are a moderator" = "Jesteś moderatorem"; - -/* new chat alert */ -"You are an admin" = "Jesteś administratorem"; - -/* new chat alert */ -"You are an owner" = "Jesteś właścicielem"; - /* snd group event chat item */ "you blocked %@" = "zablokowałeś %@"; diff --git a/apps/ios/ru.lproj/Localizable.strings b/apps/ios/ru.lproj/Localizable.strings index 92bb8f4590..db62641eb8 100644 --- a/apps/ios/ru.lproj/Localizable.strings +++ b/apps/ios/ru.lproj/Localizable.strings @@ -4464,15 +4464,9 @@ alert button */ /* authentication reason */ "Open migration to another device" = "Открытие миграции на другое устройство"; -/* new chat action */ -"Open new channel" = "Открыть новый канал"; - /* new chat action */ "Open new chat" = "Открыть новый чат"; -/* new chat action */ -"Open new group" = "Открыть новую группу"; - /* No comment provided by engineer. */ "Open Settings" = "Открыть Настройки"; @@ -5343,10 +5337,10 @@ chat item action */ "Saved" = "Сохранено"; /* No comment provided by engineer. */ -"Saved from" = "Сохранено из"; +"saved from" = "сохранено из"; /* No comment provided by engineer. */ -"saved from" = "сохранено из"; +"Saved from" = "Сохранено из"; /* message info title */ "Saved message" = "Сохранённое сообщение"; @@ -7013,6 +7007,18 @@ alert title */ /* No comment provided by engineer. */ "You already have a chat profile with the same display name. Please choose another name." = "У Вас уже есть профиль с таким именем. Пожалуйста, выберите другое имя."; +/* new chat alert */ +"You are a contributor" = "Вы соавтор"; + +/* new chat alert */ +"You are a member" = "Вы член группы"; + +/* new chat alert */ +"You are a moderator" = "Вы модератор"; + +/* new chat alert */ +"You are a subscriber" = "Вы подписчик"; + /* No comment provided by engineer. */ "You are already connected to %@." = "Вы уже соединены с контактом %@."; @@ -7037,6 +7043,15 @@ alert title */ /* new chat sheet title */ "You are already joining the group!\nRepeat join request?" = "Вы уже вступаете в группу!\nПовторить запрос на вступление?"; +/* new chat alert */ +"You are an admin" = "Вы админ"; + +/* new chat alert */ +"You are an observer" = "Вы читатель"; + +/* new chat alert */ +"You are an owner" = "Вы владелец"; + /* subscription status explanation */ "You are connected to the server used to receive messages from this connection." = "Вы подключены к серверу, используемому для приёма сообщений от этого соединения."; @@ -7055,27 +7070,6 @@ alert title */ /* No comment provided by engineer. */ "you are subscriber" = "Вы подписчик"; -/* new chat alert */ -"You are an observer" = "Вы читатель"; - -/* new chat alert */ -"You are a member" = "Вы член группы"; - -/* new chat alert */ -"You are a moderator" = "Вы модератор"; - -/* new chat alert */ -"You are an admin" = "Вы админ"; - -/* new chat alert */ -"You are an owner" = "Вы владелец"; - -/* new chat alert */ -"You are a subscriber" = "Вы подписчик"; - -/* new chat alert */ -"You are a contributor" = "Вы соавтор"; - /* snd group event chat item */ "you blocked %@" = "Вы заблокировали %@"; diff --git a/apps/ios/th.lproj/Localizable.strings b/apps/ios/th.lproj/Localizable.strings index d92174d281..087baff8d8 100644 --- a/apps/ios/th.lproj/Localizable.strings +++ b/apps/ios/th.lproj/Localizable.strings @@ -3045,27 +3045,27 @@ server test failure */ /* No comment provided by engineer. */ "You already have a chat profile with the same display name. Please choose another name." = "คุณมีโปรไฟล์แชทที่ใช้ชื่อแสดงเดียวกันอยู่แล้ว กรุณาเลือกชื่ออื่น"; +/* new chat alert */ +"You are a member" = "คุณเป็นสมาชิก"; + /* No comment provided by engineer. */ "You are already connected to %@." = "คุณได้เชื่อมต่อกับ %@ แล้ว"; +/* new chat alert */ +"You are an admin" = "คุณเป็นผู้ดูแลระบบ"; + +/* new chat alert */ +"You are an observer" = "คุณเป็นผู้สังเกตการณ์"; + +/* new chat alert */ +"You are an owner" = "คุณเป็นเจ้าของ"; + /* No comment provided by engineer. */ "You are invited to group" = "คุณได้รับเชิญให้เข้าร่วมกลุ่ม"; /* No comment provided by engineer. */ "you are observer" = "คุณเป็นผู้สังเกตการณ์"; -/* new chat alert */ -"You are an observer" = "คุณเป็นผู้สังเกตการณ์"; - -/* new chat alert */ -"You are a member" = "คุณเป็นสมาชิก"; - -/* new chat alert */ -"You are an admin" = "คุณเป็นผู้ดูแลระบบ"; - -/* new chat alert */ -"You are an owner" = "คุณเป็นเจ้าของ"; - /* No comment provided by engineer. */ "You can accept calls from lock screen, without device and app authentication." = "คุณสามารถรับสายจากหน้าจอล็อกโดยไม่ต้องมีการตรวจสอบสิทธิ์อุปกรณ์และแอป"; diff --git a/apps/ios/tr.lproj/Localizable.strings b/apps/ios/tr.lproj/Localizable.strings index c5251f482e..9444453779 100644 --- a/apps/ios/tr.lproj/Localizable.strings +++ b/apps/ios/tr.lproj/Localizable.strings @@ -3886,9 +3886,6 @@ alert button */ /* new chat action */ "Open new chat" = "Yeni sohbet aç"; -/* new chat action */ -"Open new group" = "Yeni grup aç"; - /* No comment provided by engineer. */ "Open Settings" = "Ayarları aç"; @@ -4626,10 +4623,10 @@ chat item action */ "Saved" = "Kaydedildi"; /* No comment provided by engineer. */ -"Saved from" = "Tarafından kaydedildi"; +"saved from" = "kaydedildi:"; /* No comment provided by engineer. */ -"saved from" = "kaydedildi:"; +"Saved from" = "Tarafından kaydedildi"; /* message info title */ "Saved message" = "Kaydedilmiş mesaj"; @@ -6009,6 +6006,12 @@ alert title */ /* No comment provided by engineer. */ "You already have a chat profile with the same display name. Please choose another name." = "Aynı görünen ada sahip bir konuşma profilin zaten var. Lütfen başka bir ad seç."; +/* new chat alert */ +"You are a member" = "Üyesiniz"; + +/* new chat alert */ +"You are a moderator" = "Moderatörsünüz"; + /* No comment provided by engineer. */ "You are already connected to %@." = "Zaten %@'a bağlısınız."; @@ -6033,6 +6036,15 @@ alert title */ /* new chat sheet title */ "You are already joining the group!\nRepeat join request?" = "Gruba zaten katılıyorsunuz!\nKatılma isteği tekrarlansın mı?"; +/* new chat alert */ +"You are an admin" = "Yöneticisiniz"; + +/* new chat alert */ +"You are an observer" = "Gözlemcisiniz"; + +/* new chat alert */ +"You are an owner" = "Sahipsiniz"; + /* No comment provided by engineer. */ "You are invited to group" = "Gruba davet edildiniz"; @@ -6042,21 +6054,6 @@ alert title */ /* No comment provided by engineer. */ "you are observer" = "gözlemcisiniz"; -/* new chat alert */ -"You are an observer" = "Gözlemcisiniz"; - -/* new chat alert */ -"You are a member" = "Üyesiniz"; - -/* new chat alert */ -"You are a moderator" = "Moderatörsünüz"; - -/* new chat alert */ -"You are an admin" = "Yöneticisiniz"; - -/* new chat alert */ -"You are an owner" = "Sahipsiniz"; - /* snd group event chat item */ "you blocked %@" = "engelledin %@"; diff --git a/apps/ios/uk.lproj/Localizable.strings b/apps/ios/uk.lproj/Localizable.strings index 513b7c34b6..9046e21f9b 100644 --- a/apps/ios/uk.lproj/Localizable.strings +++ b/apps/ios/uk.lproj/Localizable.strings @@ -3919,9 +3919,6 @@ alert button */ /* new chat action */ "Open new chat" = "Відкрити новий чат"; -/* new chat action */ -"Open new group" = "Відкрити нову групу"; - /* No comment provided by engineer. */ "Open Settings" = "Відкрийте Налаштування"; @@ -4647,10 +4644,10 @@ chat item action */ "Saved" = "Збережено"; /* No comment provided by engineer. */ -"Saved from" = "Збережено з"; +"saved from" = "збережено з"; /* No comment provided by engineer. */ -"saved from" = "збережено з"; +"Saved from" = "Збережено з"; /* message info title */ "Saved message" = "Збережене повідомлення"; @@ -6024,6 +6021,12 @@ alert title */ /* No comment provided by engineer. */ "You already have a chat profile with the same display name. Please choose another name." = "Ви вже маєте профіль у чаті з таким самим іменем. Будь ласка, виберіть інше ім'я."; +/* new chat alert */ +"You are a member" = "Ви учасник"; + +/* new chat alert */ +"You are a moderator" = "Ви модератор"; + /* No comment provided by engineer. */ "You are already connected to %@." = "Ви вже підключені до %@."; @@ -6048,6 +6051,15 @@ alert title */ /* new chat sheet title */ "You are already joining the group!\nRepeat join request?" = "Ви вже приєдналися до групи!\nПовторити запит на приєднання?"; +/* new chat alert */ +"You are an admin" = "Ви адмін"; + +/* new chat alert */ +"You are an observer" = "Ви спостерігач"; + +/* new chat alert */ +"You are an owner" = "Ви власник"; + /* No comment provided by engineer. */ "You are invited to group" = "Запрошуємо вас до групи"; @@ -6057,21 +6069,6 @@ alert title */ /* No comment provided by engineer. */ "you are observer" = "ви спостерігач"; -/* new chat alert */ -"You are an observer" = "Ви спостерігач"; - -/* new chat alert */ -"You are a member" = "Ви учасник"; - -/* new chat alert */ -"You are a moderator" = "Ви модератор"; - -/* new chat alert */ -"You are an admin" = "Ви адмін"; - -/* new chat alert */ -"You are an owner" = "Ви власник"; - /* snd group event chat item */ "you blocked %@" = "ви заблокували %@"; diff --git a/apps/ios/zh-Hans.lproj/Localizable.strings b/apps/ios/zh-Hans.lproj/Localizable.strings index 7340147bf7..4ef03cb433 100644 --- a/apps/ios/zh-Hans.lproj/Localizable.strings +++ b/apps/ios/zh-Hans.lproj/Localizable.strings @@ -4404,15 +4404,9 @@ alert button */ /* authentication reason */ "Open migration to another device" = "打开迁移到另一台设备"; -/* new chat action */ -"Open new channel" = "打开新频道"; - /* new chat action */ "Open new chat" = "打开新聊天"; -/* new chat action */ -"Open new group" = "打开新群"; - /* No comment provided by engineer. */ "Open Settings" = "打开设置"; @@ -5268,10 +5262,10 @@ chat item action */ "Saved" = "已保存"; /* No comment provided by engineer. */ -"Saved from" = "保存自"; +"saved from" = "保存自"; /* No comment provided by engineer. */ -"saved from" = "保存自"; +"Saved from" = "保存自"; /* message info title */ "Saved message" = "已保存的消息"; @@ -6874,6 +6868,15 @@ alert title */ /* No comment provided by engineer. */ "You already have a chat profile with the same display name. Please choose another name." = "您已经有一个显示名相同的聊天资料。请选择另一个名字。"; +/* new chat alert */ +"You are a member" = "你是成员"; + +/* new chat alert */ +"You are a moderator" = "你是协管"; + +/* new chat alert */ +"You are a subscriber" = "你是订阅者"; + /* No comment provided by engineer. */ "You are already connected to %@." = "您已经连接到 %@。"; @@ -6898,6 +6901,15 @@ alert title */ /* new chat sheet title */ "You are already joining the group!\nRepeat join request?" = "您已经加入了这个群组!\n重复加入请求?"; +/* new chat alert */ +"You are an admin" = "你是管理员"; + +/* new chat alert */ +"You are an observer" = "你是观察者"; + +/* new chat alert */ +"You are an owner" = "你是群主"; + /* subscription status explanation */ "You are connected to the server used to receive messages from this connection." = "你已连接到用于接收该连接消息的服务器。"; @@ -6916,24 +6928,6 @@ alert title */ /* No comment provided by engineer. */ "you are subscriber" = "你是订阅者"; -/* new chat alert */ -"You are an observer" = "你是观察者"; - -/* new chat alert */ -"You are a member" = "你是成员"; - -/* new chat alert */ -"You are a moderator" = "你是协管"; - -/* new chat alert */ -"You are an admin" = "你是管理员"; - -/* new chat alert */ -"You are an owner" = "你是群主"; - -/* new chat alert */ -"You are a subscriber" = "你是订阅者"; - /* snd group event chat item */ "you blocked %@" = "你阻止了%@"; From 90340b116de25323bbb147a68b93c38f956d424c Mon Sep 17 00:00:00 2001 From: Evgeny Date: Mon, 31 Aug 2026 23:41:54 +0100 Subject: [PATCH 12/15] website: update livestream page (#7439) * website: update livestream page * update --------- Co-authored-by: Evgeny @ SimpleX Chat <259188159+evgeny-simplex@users.noreply.github.com> --- docs/CHAT-RELAY.md | 1 + website/src/_includes/footer.html | 4 +- website/src/css/livestream.css | 62 +++++++++++++++++++++++++++---- website/src/js/livestream.js | 39 +++++++++++++++++-- website/src/livestream.html | 6 ++- 5 files changed, 97 insertions(+), 15 deletions(-) diff --git a/docs/CHAT-RELAY.md b/docs/CHAT-RELAY.md index 8f94aa8090..38c88d560e 100644 --- a/docs/CHAT-RELAY.md +++ b/docs/CHAT-RELAY.md @@ -1,6 +1,7 @@ --- title: Hosting your own Chat Relay revision: 28.07.2026 +templateEngineOverride: md --- # Hosting your own Chat Relay diff --git a/website/src/_includes/footer.html b/website/src/_includes/footer.html index 27fb44b178..31c9d9e557 100644 --- a/website/src/_includes/footer.html +++ b/website/src/_includes/footer.html @@ -63,7 +63,7 @@

- + @@ -108,7 +108,7 @@ 19.3216 25.0173 19.3216C23.9563 19.3216 23.0902 20.1878 23.0902 21.2488Z" /> - + diff --git a/website/src/css/livestream.css b/website/src/css/livestream.css index ef1d2e69c2..fd2633acd3 100644 --- a/website/src/css/livestream.css +++ b/website/src/css/livestream.css @@ -60,7 +60,7 @@ } .livestream .text-container .event-utc, -.livestream .text-container .event-local { +.livestream .text-container .event-join { font-family: "Manrope", sans-serif; font-weight: 300; font-size: calc(var(--sec-vwu) * 1.4); @@ -69,16 +69,36 @@ color: #000000; } -.dark .livestream .text-container .event-utc { +.dark .livestream .text-container .event-utc, +.dark .livestream .text-container .event-join { color: #ffffff; } -.livestream .text-container .event-local { +.livestream .text-container .event-join { font-size: calc(var(--sec-vwu) * 1.3); - color: #009df7; } -.dark .livestream .text-container .event-local { +.livestream .text-container .event-join span { + font-weight: inherit; +} + +.livestream .text-container .event-join .join-count { + margin-right: 0.3em; +} + +.livestream .text-container .event-join.counting .join-where { + display: block; +} + +.livestream .text-container .event-join a { + color: #009df7; + font-family: inherit; + font-weight: inherit; + font-size: inherit; + max-width: none; +} + +.dark .livestream .text-container .event-join a { color: #64fdff; } @@ -152,12 +172,12 @@ } .livestream .text-container .event-utc, - .livestream .text-container .event-local { + .livestream .text-container .event-join { font-size: calc(var(--sec-vwu) * 3.9); max-width: calc(var(--sec-vwu) * 80); } - .livestream .text-container .event-local { + .livestream .text-container .event-join { font-size: calc(var(--sec-vwu) * 3.3); } @@ -273,6 +293,34 @@ color: #000000; } +.register-card .channel-link { + display: inline-flex; + align-items: center; + margin-top: 18px; + font-family: "Manrope", sans-serif; + font-weight: 500; + font-size: 16px; + color: #0053d0; + text-decoration: none; +} + +.register-card .channel-link:hover { + text-decoration: underline; + text-underline-offset: 3px; +} + +.dark .register-card .channel-link { + color: #70f0f9; +} + +.register-card .channel-link svg { + width: 0.82em; + height: 0.82em; + margin-left: 0.4em; + fill: currentColor; + flex: none; +} + .register-card .close-register { position: absolute; top: 16px; diff --git a/website/src/js/livestream.js b/website/src/js/livestream.js index 71941cffba..cc236ee221 100644 --- a/website/src/js/livestream.js +++ b/website/src/js/livestream.js @@ -1,7 +1,6 @@ function showLocalTime() { const utc = document.querySelector('.event-utc'); - const local = document.querySelector('.event-local'); - if (!utc || !local) return; + if (!utc) return; const start = new Date(utc.dateTime); if (isNaN(start.getTime())) return; @@ -15,8 +14,39 @@ function showLocalTime() { timeZoneName: 'short' }); - local.textContent = 'Your time: ' + format.format(start); - local.removeAttribute('hidden'); + utc.textContent = format.format(start); +} + +function startCountdown() { + const utc = document.querySelector('.event-utc'); + const join = document.querySelector('.event-join'); + const count = join && join.querySelector('.join-count'); + if (!utc || !count) return; + + const start = new Date(utc.dateTime); + if (isNaN(start.getTime())) return; + + const pad = (n) => String(n).padStart(2, '0'); + + function tick() { + const left = Math.floor((start.getTime() - Date.now()) / 1000); + if (left <= 0) { + count.textContent = 'now'; + join.classList.remove('counting'); + } else { + const days = Math.floor(left / 86400); + const dayPart = days ? days + (days === 1 ? ' day ' : ' days ') : ''; + count.textContent = 'in ' + dayPart + + pad(Math.floor((left % 86400) / 3600)) + ' hrs ' + + pad(Math.floor((left % 3600) / 60)) + ' min ' + + pad(left % 60) + ' sec'; + join.classList.add('counting'); + } + count.removeAttribute('hidden'); + } + + tick(); + setInterval(tick, 1000); } function setSignupSource() { @@ -76,6 +106,7 @@ function trackNavColor() { } showLocalTime(); +startCountdown(); setSignupSource(); setupRegisterOverlay(); trackNavColor(); diff --git a/website/src/livestream.html b/website/src/livestream.html index 57dd3c28af..ea2665ac6f 100644 --- a/website/src/livestream.html +++ b/website/src/livestream.html @@ -74,11 +74,11 @@ templateEngineOverride: njk
@@ -103,6 +103,8 @@ templateEngineOverride: njk + Or join our SimpleX Crowdfunding News channel +