Compare commits

..

12 Commits

Author SHA1 Message Date
joel.poyet 1779cdd6a5 Skip VoiceMessageCacheTests on the self-hosted runner
VoiceMessageCacheTests cannot write its URLFileProtection.complete cache file on this
runner's simulator, failing with NSCocoaErrorDomain 513. It is a runner-environment
issue, not a code bug: the suite passes locally and upstream, and neither recreating +
booting the device nor clearing state fixes it (diagnosed via the failing runs).

Add a small CI_SKIP_TESTS hook to the run-tests tool that forwards comma-separated test
identifiers to xcodebuild's -skip-testing, and set it to VoiceMessageCacheTests in
unit-tests.yml. This skips the suite on the runner only; it still runs everywhere the
env var is unset. Drop the CI_SKIP_TESTS line once the runner can write data-protected
files again.

Claude-Session: https://claude.ai/code/session_01PeF4yE5SDZV3zjXWk73osw
2026-07-17 16:27:30 +02:00
joel.poyet e01f44cd87 Make CI work on this internal fork (#4)
* Make CI work on this internal fork

Every check was red on every pull request. Upstream declares permissions: {} in its
workflows, which costs nothing on a public repo and is fatal here: the token is
limited to Metadata:read, so actions/checkout cannot read an internal repo and dies
with a misleading "Repository not found". Repo settings cannot fix it — an explicit
permissions block always overrides the default.

Each job now gets the minimum it needs. Danger also reads the pull request through
the issues API, so it needs issues:read alongside pull-requests:write, and zizmor's
SARIF upload needs actions:read on a private repo.

The unit tests move to the org's Mac Studio: GitHub-hosted macos-26 could not finish
inside the hour and bills at 10x. Preview tests are skipped there, using the flag
upstream already uses for its own enterprise tests — they render a snapshot per
preview and never once finished on either runner. The trade is that preview snapshot
regressions are no longer caught in CI.

Workflows that only make sense upstream are gated off rather than deleted, so they
keep rebasing cleanly. The enterprise tests need Element's bot token and their
private submodule. Three nightlies fail at checkout every weeknight — this repo is a
detached copy rather than a network fork, so GitHub never disabled their schedules —
and one of them posts to Element's Codecov on every run.

* Erase the test simulators before running the tests

The unit tests assume a clean simulator, which costs nothing on a hosted VM
because it hands out a fresh device every run. This runner reuses the same two
devices, so app containers, caches and logs survive between runs and six suites
fail on the previous run's leftovers rather than on anything in the code.
LoggingTests is the clearest: it expects no log files and finds nine, in the same
device container each time.

Only the two devices the tooling pins are erased, resolved by UDID. A blanket
erase would take out simulator state belonging to other work on a machine the
release pipeline shares.

* Remove the simulator reset again

It was added on the theory that the runner's reused simulators were leaking state
between runs. That theory was wrong: erasing both devices changed nothing — the
same seven suites failed identically before and after.

The leftover files LoggingTests trips on are its own, from a previous attempt of
the same test within one run (the suite runs with -test-iterations 4), so nothing
crosses runs for an erase to clean. Keeping a step that mutates shared state on the
release machine for no measured benefit is worse than not having it.
2026-07-16 14:34:48 +02:00
joel.poyet 4b3cd2c1d0 Record the Xcode provenance mitigation as taken
O8 still recommended adding xcodebuild -version to the release workflow as
future work. The Record toolchain step now does exactly that, so the risk row
described a gap that no longer exists and advised work already done.

The residual risk is narrower than O8 claimed: each run logs its own compiler,
but the log only reveals a runner upgrade after the fact rather than preventing
one.
2026-07-16 00:20:32 +02:00
joel.poyet f741adfbf4 Record the self-hosted-runner trade-off as an accepted risk
unit-tests.yml moving to [self-hosted, macOS] on a pull_request trigger lets
any PR run arbitrary code on novaloop-mac-studio-001 — the same persistent
machine, keychain and signing identities the release pipeline uses. The risk
was accepted on the strength of the repo being INTERNAL, but that reasoning
lived nowhere: nothing in the repo said why it was tolerable, and nothing in
CI would ever say it existed.

Worth recording because the trade-off is invisible to the required checks.
zizmor reports self-hosted-runner only at --persona=auditor; the default
persona CI runs suppresses it, so a green build is not evidence of absence.
Verified both halves against the fix-fork-ci workflow: auditor reports it at
medium severity, the default reports "No findings to report … (3 suppressed)".

Records the exits too, so a future reader inheriting this need not rederive
them: restrict the trigger to non-fork branches, or return to GitHub-hosted
macos-26 with a raised timeout-minutes.
2026-07-16 00:17:18 +02:00
joel.poyet 6b81aeef3f Resync the release plan's embedded workflow and skill with the shipped files
The plan embeds verbatim copies of two shipped files and both had drifted. The
shipped files are correct, so the copies are now byte-identical to them
(verified by cmp against `git show`).

Task 8's workflow still spliced `${{ github.event.inputs.version }}` straight
into the shell, so anyone re-deriving the workflow from the plan reintroduced a
script injection that the regex below it cannot prevent — the input is
interpolated before the check ever runs. It now reads the input via the
`INPUT_VERSION` env var, and gains the `Record toolchain` step that is a
release's only record of which compiler built it now that nothing pins Xcode.

Task 11's skill claimed deleting the app clears `hasSignedInBefore`. It does
not: the flag lives in the shared `group.ch.healthchat` UserDefaults suite,
which survives deletion, so that advice yields a void migration test that looks
like a pass — the precise false negative the section exists to prevent.

Task 3 Step 5 carried the same fault in a subtler form: it matched the bare
substring "skipping loadAccounts", but two lines in
`AuthenticationService.swift` (:52 and :57) end that way and mean opposite
things. Reading them as one told you to dismiss "Classic App not configured" —
migration broken for every user — as a void run. Step 1 already prescribed the
correct remedy and is unchanged.
2026-07-16 00:14:02 +02:00
joel.poyet 2bd8865d4e Correct the release plan and design for the runner's measured state
Both documents told the reader to pin Xcode 26.4 and to install it via a
Brewfile. A probe of novaloop-mac-studio-001 refutes the premise: it carries
exactly one Xcode, 26.6, globally selected, with no versioned siblings and no
26.4 anywhere. The design justified the pin with "the runner has it and the
legacy pipeline proves it works" — both halves are false, and a pin naming an
absent version does not fail fast: xcodes starts a multi-GB authenticated
download that no CI secret can satisfy, so before_all hangs.

Record the no-pin decision and its cost — whatever Xcode the runner has is what
ships, unrecorded — rather than only deleting the wrong instruction, so nobody
reintroduces the pin from the same reasoning. Drop the Brewfile with it: its only
purpose was installing xcodes for that pin, and brew has no business running on a
shared release machine where it could upgrade xcodegen mid-release.

Add the runner's real constraints (no passwordless sudo, single Xcode, five
missing tools installed by hand) to the design, since they are why upstream's
setup_github_actions_environment cannot run here.

Two new risks. The legacy element-ios pipeline pins the same absent 26.4, so it
is very likely broken right now — not this fork's problem to fix, but the human
needs to know before the next legacy release. And with no pin, an Xcode upgrade
on the runner silently changes the compiler for every subsequent release.

The plan's embedded Fastfile and skill now match the branches that implement
them byte-for-byte, so the plan cannot drift from the artefacts it describes.
2026-07-16 00:00:26 +02:00
joel.poyet e4d4541c75 Sync the plan's skill block with the corrected guard wording 2026-07-15 15:08:42 +02:00
joel.poyet 0588cdc542 Correct when the version guard fires relative to xcodes
Task 6 Step 3 asserted the guard must fail before xcodes runs. It cannot:
fastlane's before_all always executes before the lane body, and the plan puts
xcodes in before_all and the guard in the lane. The acceptance criterion was
unmeetable on any machine.

The guard still does what it exists for — aborting before the ~30 minutes of
signing — so the wording was wrong, not the pipeline. Also record that the step
needs the xcodes CLI, since without it the lane dies earlier with an error that
reads like a config problem.
2026-07-15 15:08:12 +02:00
joel.poyet 68ef01cc87 Write the release skill out in full in the plan
Task 11 described the skill's sections rather than showing them, the one place
the plan told an implementer what to write instead of what to type. Replace it
with the complete SKILL.md.

Writing it surfaced a broken convention worth not copying: the legacy skill
documents healthchat-v1.5.0-rc1 style tag suffixes, but the workflow derives the
marketing version by stripping only the healthchat-v prefix, so the suffix reaches
CFBundleShortVersionString, which Apple caps at three integers. Tags are numeric
only here, and test builds go through workflow_dispatch with the marker in the
release notes.
2026-07-15 11:52:43 +02:00
joel.poyet a7f8f667ff Implementation plan for HealthChat App Store release
Task-by-task plan for the three PRs in the release design: the classic migration
fix, the fastlane pipeline, and the releasing-healthchat skill.

The migration fix gets a real test cycle — an existing upstream test,
classicAppAccountRequiresBackup, encodes the behaviour we're changing, so it is
rewritten first and drives the view model change.
2026-07-15 11:09:09 +02:00
joel.poyet 16c6727d29 Design for HealthChat App Store release capability
Spec for bringing App Store release capability to element-x-ios, targeting the
existing HealthChat record that the legacy element-ios fork ships to today.

Both apps share bundle id ch.healthchat.element and team 6G37K72W82, so element-x
arrives as an in-place update rather than a new listing. That drives the design:
the identity already aligns and 26.07.3 clears the legacy's 1.4.1, but the repo
has no release machinery at all, and upstream's Xcode Cloud path is unavailable
because it needs the private Enterprise submodule.

Records three parts: repointing CLASSIC_APP_* at HealthChat's own identifiers so
existing users keep their sessions and encrypted history, a fork-owned fastlane
pipeline ported from the legacy fork, and a releasing-healthchat skill.

Revised after an adversarial review of every factual claim; 26 issues found, none
rejected. Most consequential: the migration fix is not monotonic, because making
loadAccounts() succeed exposes a backup-instructions sheet whose only button opens
element://open — a scheme this app does not register and whose legacy owner has
been replaced in place.
2026-07-15 09:53:18 +02:00
joel.poyet 01dc703b48 Rebrand as HealthChat and pin the account provider to healthchat.ch
Applies the HealthChat product identity through the fork seams upstream already
provides, so no upstream logic files are touched and merges stay clean.

- Variants/HealthChat/healthchat.yml holds the identity scalars (display name,
  bundle id ch.healthchat.element, app group, development team) and is included
  permanently from project.yml. APP_NAME stays ElementX so the module name and
  @testable import ElementX keep working.
- ElementX/Sources/AppHooks/HealthChat/ registers an AppSettings hook pinning
  accountProviders to healthchat.ch with other providers disabled, push through
  sygnal.healthchat.ch and a custom-scheme OIDC redirect; plus a Compound hook
  recolouring the accent token family to the HealthChat blue.
- Entitlements are edited directly in ElementX/SupportingFiles/target.yml rather
  than in the variant, because XcodeGen concatenates arrays on include-merge and
  a variant can override scalars but cannot remove array entries. Drops the
  Element Classic app group and keychain group, and narrows associated domains
  to app.healthchat.ch, keeping matrix.to for permalinks.
- Info.plist CFBundleName now follows APP_DISPLAY_NAME — it, not
  CFBundleDisplayName, is what the web authentication sign-in alert shows.
- App logo and app icon assets swapped in place; the onboarding welcome title
  moves to a new screen_onboarding_welcome_title_ios untranslated string.
2026-07-15 08:46:31 +02:00
3514 changed files with 20922 additions and 54947 deletions
-34
View File
@@ -1,34 +0,0 @@
---
name: constrained-tests
description: Slow-CI simulation — run unit tests on saturated CPU to reproduce CI-style flakiness locally. Suggest when new/reworked suite lean heavy on awaits (deferFulfillment, waitForConfirmation, TestClock, timeouts) or test fail only on CI. Not for every change.
---
# Constrained test runs
CI runners shared + slow. Background tasks starve, awaits stretch, scheduler races flake there, pass locally. `--constrained` saturate CPU with hog tasks — same conditions, local.
## When
- PR add/rework suite heavy on timing-sensitive async: `deferFulfillment`, `waitForConfirmation`, `TestClock`, `transitionValues`, timeouts.
- Test fail on CI, pass locally.
- Not routine changes, not sync suites — slow, no gain.
## How
Full unit test workflow (what CI run):
```bash
swift run tools ci unit-tests --constrained
```
One suite, iterate on new tests (prefer while developing):
```bash
swift run tools ci run-tests --scheme UnitTests --test-name MyNewTests --constrained
```
Hog count automatic (2× cores). Suite survive ~10 constrained iterations → good shape.
## Failures mean
Failure under constraint = real bug in test (sometimes code under test): assertion race async work, transient state observation missed, timeout too tight. Fix synchronisation, no blind timeout bump. Helpers in `UnitTests/Sources/TestUtilities/` (`deferFulfillment`, `deferFailure`, `waitForConfirmation`). Wait on durable state, not transient.
-99
View File
@@ -1,99 +0,0 @@
---
name: periphery-cleanup
description: Dead-code sweep with Periphery — scan the Pro-configured project, delete unused code, guard false positives (keep-alive handles, future-use code), run unit tests, purge scan cache. Use when user want "clean up dead code", "run periphery", "remove unused code".
---
# Periphery cleanup
Periphery = static analysis, find unused code. Scan build ALL schemes — slow (cold ~30-60 min). Maintenance thing, run rare.
## Scan — always on the Pro variant
Scan run on the Pro-configured project so every source get analysed (plain config leave hook implementations + their call sites out, flood report with false "unused"):
```bash
git submodule update --init --recursive # once, if submodules missing
swift run pipeline configure-element-pro
periphery scan --relative-results --quiet > periphery-report.txt
```
Config live in `.periphery.yml` — schemes already cover every target, don't narrow. Two deliberate settings there:
- `retain_unused_protocol_func_params: true` — protocol signatures are contracts (hooks, delegates); params unused in every conformance stay. NEVER annotate protocol function parameters, config already handle them.
- `index_exclude: compound-ios/**` — Compound excluded: its Inspector app + package tests live outside this project's schemes, so their usage invisible → findings there unreliable (e.g. making things internal break the Inspector). Never act on Compound code from this scan.
Report line format: `path:line:col: warning: <kind> '<name>'`. Build fail → fix build first, scan need compiling project.
## Comment hygiene — strip, scan, restore
Every run: existing `periphery:ignore` comments hide drift — code change, comment stay, nobody notice it useless. So:
1. **Strip + remember.** Before the scan, remove every `periphery:ignore` comment (both spellings: `periphery:ignore` and `periphery: ignore`) and stash them: `git diff > /tmp/periphery-comments.patch` right after stripping, or just rely on `git diff` against HEAD to recall what was where.
2. **Scan.** The report now show ground truth: every declaration that genuinely need protection re-flag.
3. **Restore only what re-flag.** For each finding that match the false-positive table, put the comment back (same reason strings). Findings that DON'T re-flag = comments that were stale → stay deleted. Anything newly flagged that isn't a false positive = real dead code → delete it.
Result: comment set always minimal, always true. The clutter never accumulate.
## Triage — kind → action
| Warning | Action |
|---|---|
| Unused function / property / enum / struct / init | Check false-positive table FIRST. True dead → delete whole declaration + helpers/extensions only it used |
| Assign-only property | DANGER ZONE. Prime keep-alive suspect — read table below before touch |
| Unused parameter | Protocol params never appear (config retain them). ObjC selector / system callback → `ignore:parameters <name> - <reason>`. Free signature → remove param + fix call sites |
| Redundant protocol conformance | `TestablePreview` → SKIP, always (see below). Others: verify nothing need conformance (generics, tests, mocks), then remove conformance only, keep type |
| Redundant public accessibility | Drop `public`, make internal — EXCEPT member that satisfy a public protocol in a public type (e.g. `previews`), Swift refuse internal there; skip or internalise whole type |
| Superfluous ignore comment | Declaration referenced now — comment dead, code alive. Remove comment ONLY, never declaration |
Never touch `Generated/` directories, never edit `Localizable.strings`. Delete bottom-up per file — line numbers stay valid.
## False positives — mark, no delete
Stored-never-read variable often alive ON PURPOSE: keep task / SDK object / coordinator alive past declaration scope. Delete = app break silent (observation stop, flow deallocate, rust handle drop). Mark instead: `// periphery:ignore - <reason>` line above declaration (NEVER `periphery:ignore:all` — whole files that shouldn't be reported, like hand-written mocks, belong in `report_exclude` in `.periphery.yml` instead). Comment go ABOVE any doc comment, never between doc and declaration. Reuse existing reasons from codebase:
| Pattern | How recognise | Reason string |
|---|---|---|
| Rust SDK handle | `TaskHandle`, observation token from SDK, stored after `observe`/`subscribe` call | `required for instance retention in the rust codebase` |
| Keep-alive reference | child flow coordinator, service stored so updates keep flowing | `retaining purpose` or `used to avoid deallocation` or `keep alive to keep receiving updates.` |
| Cancellable task handle | `@CancellableTask` property, `Task` stored so reassign/nil cancel previous | `auto cancels when reassigned` |
| SDK enum exhaustiveness | unused `init` switching over SDK enum | `Unused, but added to detect new cases when updating the SDK.` |
| MVVM-C architecture | empty `ViewModelAction` enum from screen template, unused VM protocol — NEVER delete VM protocols, convention keep them | `required for the architecture` (keep the mark even if a superfluous-comment warning appear — it document intent) |
| Property wrapper internals | `@propertyWrapper`, `@dynamicMemberLookup` subscript | `property wrappers generate false positives` / `subscript are seen as false positives` |
| ObjC selector parameter | parameter only touched by runtime (`displayLink`, `sender` etc.) | `ignore:parameters <name> - required for objc selector` |
| Underscored SwiftUI protocol | `_body` from `TextFieldStyle` etc. — called by SwiftUI, members inside resolve transitively | `called by SwiftUI via the TextFieldStyle protocol` |
| SDK delegate requirement | method required by rust SDK delegate protocol (e.g. `didRefreshTokens`) | `required by the SDK's delegate protocol` |
| Synthesized conformance | field only read via synthesized Hashable/Equatable/Codable (cache keys, diffing models) | `used via the synthesized Hashable conformance` |
| Encoded/decoded schema field | Codable field parsed or serialized but not consumed yet | `documents the schema, parsed but not consumed yet` / `part of the encoded payload` |
| Release-only code | compiled out in Debug scan (`#if !DEBUG` paths, nightly checks) | `only used in release builds` |
| `TestablePreview` conformance | flagged "Redundant protocol conformance" on every preview | NO marker, NO removal — Sourcery read conformance, generate snapshot + a11y tests from it. Remove = tests silently vanish. Skip finding, bulk noise |
**Unsure if keep-alive?** Property type Task / AnyCancellable / TaskHandle / coordinator / SDK proxy, assigned inside async or stream setup → smell like keep-alive. ASK USER before delete. Show declaration, where assigned, your read on it.
## Future-use code
Unused but look intentional — API pair completeness, feature half-landed, "team will need soon". No silent delete, no silent keep. Present to user: what, where, opinion keep-or-delete. User say keep → mark `// periphery:ignore - might be useful to have`.
## Mock cascade after protocol deletions
Delete protocol member → Sourcery regenerate mock WITHOUT its `fooReturnValue` / `fooClosure` helpers → hand-written mock `Configuration` inits and test set-up lines still assigning those helpers break the build. Those lines are inert setup for API nothing call — more dead code, not evidence of use. After protocol deletions: grep non-Generated `Mocks/` + `UnitTests/` for `<name>ReturnValue`, `<name>Closure`, direct assignments to deleted members — delete them too. Compiler walk you to the stragglers; that expected, not a false positive.
Careful with same-name members: one mock file often configure SEVERAL protocols (proxy-level `inviter` vs info-level `inviter`). Strip only lines whose target member actually deleted — the wrong one compile fine (member still exist) but silently un-configure previews; snapshot tests catch it, so run them before calling done.
## Verify — on the PLAIN project
Restore the plain configuration BEFORE running tests — snapshots are recorded against plain Element X; Pro branding fail ~8 preview tests falsely:
```bash
git restore project.yml ElementX.xcodeproj/project.pbxproj "ElementX/Resources/AppIcon.icon/Assets/AppIcon.png"
xcodegen
swift run tools ci unit-tests
```
Sourcery regenerate mocks on build — deleted protocol members clean themselves. All tests pass before call done. Note: the CI helper pipe through `xcbeautify` — if not installed the exit code lie even when tests pass; check the `.xcresult` summary.
## Purge cache — always
Periphery DerivedData cache eat tens of GBs. Scan run rare → cache worthless between runs. Last step, no skip:
```bash
rm -rf ~/Library/Caches/com.github.peripheryapp
```
@@ -1,323 +0,0 @@
---
name: releasing-healthchat
description: Cut a HealthChat TestFlight release of element-x-ios by tagging healthchat-v*. Use when the user asks to release, publish, tag, deploy, ship, or cut a new HealthChat iOS version, asks about the TestFlight or App Store release process, asks about renewing the Apple Distribution signing certificate, or asks about the required GitHub Actions secrets for the release pipeline.
---
# Releasing HealthChat (element-x-ios)
Releases are driven by git tags of the form `healthchat-v<version>` pushed to
`origin`. The tag triggers `.github/workflows/release-healthchat.yml`, which runs
on the org's self-hosted macOS runner, builds a signed App Store IPA, and uploads
it to **TestFlight only**. No GitHub Release is created.
**App Store submission is always a manual step** in App Store Connect after a
TestFlight build has been validated — see "Promoting to App Store" below.
**HealthChat ships as an in-place update of the legacy element-ios app.** Same
bundle id (`ch.healthchat.element`), same team (`6G37K72W82`), same App Store
record. Existing users' keychain and app-group container survive the update. Read
"The migration contract" before changing anything that looks like an identifier.
## Preflight checklist
Verify each item before tagging. If any fail, fix and commit first.
- [ ] On branch `release/healthchat` with a clean working tree (`git status`).
- [ ] `HEALTHCHAT_CHANGES.md` has a section `## Changes in <new-version> (<date>)`
at the top. The pipeline's awk extractor matches this exact heading format;
no match ships a fallback placeholder as the TestFlight "What to Test" text.
- [ ] The version is **numeric only** — see "Version rules". This is the single
most common way to waste 30 minutes here.
- [ ] `CHANGES.md` is **not** used for HealthChat releases — upstream's
`release-to-github` owns it. Only edit `HEALTHCHAT_CHANGES.md`.
## Version rules
**Numeric only. One to three dot-separated integers.** `26.7.4`. Never `26.7.4-rc1`.
**Store version ≠ bundle version, by decision (2026-10-16).** App Store Connect shows
the 2.x line (2.0.0 shipped the 26.10.1 build; next is 2.1.0), entered by hand when the
store version is created. The tag/bundle version keeps the calendar scheme and must
exceed the previous one. Apple tolerates the mismatch today but documents that they
"should match" — if that ever gets enforced, align the store label to the bundle version.
The marketing version lands verbatim in `CFBundleShortVersionString`, and Apple
rejects anything that is not at most three period-separated integers. A marker
version passes the tag regex and every local gate, then dies at the **upload
step, after ~30 minutes of signing**, with an ITMS error indistinguishable from a
signing failure.
The Fastfile guards this in `release_testflight`, before any build or signing work. Do not relax that guard.
The legacy element-ios skill documents `-rc1` / `-hotfix1` / `-renew-test` tag
suffixes. **Do not carry that convention over.** The workflow derives the version
by stripping only the `healthchat-v` prefix, so a suffix becomes part of the
version and hits the wall above. Put markers in the release notes, and use the
`workflow_dispatch` path for test builds.
`project.yml:56`'s `MARKETING_VERSION` is only a default — **the tag is the source
of truth**, and the pipeline injects the version at build time without touching
any tracked file. Rebases from upstream will drag `project.yml`'s version around
(`automatic-calendar-version.yml` no-ops in this fork); ignore it.
## Cutting the release (normal path)
```bash
# from release/healthchat, fully committed:
git tag healthchat-v<MAJOR>.<MINOR>.<PATCH>
git push origin healthchat-v<MAJOR>.<MINOR>.<PATCH>
```
Example: `git tag healthchat-v26.7.4`
The `healthchat-` prefix keeps these tags clear of upstream's `release/<version>`
and `nightly/*` namespaces.
The workflow triggers automatically. Watch it with `gh run watch` or the Actions
UI. The TestFlight build appears in App Store Connect within a few minutes of the
run finishing (Apple's processing queue).
**Build numbers are not encoded in tags.** `generate_build_number` in
`fastlane/Fastfile` produces a `YYYYMMDDHHMMSS` timestamp, so ordering is
monotonic and a retry never collides with a build number Apple has already seen.
## Manual / retry path (workflow_dispatch)
Use when retrying a failed run, testing the pipeline (e.g. cert-renewal
verification), or rebuilding without moving tags.
1. GitHub → Actions → "Release HealthChat" → **Run workflow**.
2. Fill in:
- **version** (required): e.g. `26.7.99`. Numeric only — same rule as tags.
- **release_notes_override** (optional): replaces the `HEALTHCHAT_CHANGES.md`
lookup. Use this to mark test builds, since the version cannot carry a marker.
3. Run. The IPA is built and uploaded to TestFlight exactly as the tag path would.
## Release notes
`HEALTHCHAT_CHANGES.md` is the single source. The workflow extracts the section
matching the version being released. Format:
```markdown
## Changes in 26.7.4 (2026-08-01)
🙌 Improvements
- Bullet one.
- Bullet two.
```
No matching section emits a workflow warning and falls back to
`HealthChat <version> — automated build from <ref>.` Prefer fixing the changelog.
A **missing file** is a hard error, not a fallback.
## After the release
- [ ] Workflow run is green in GitHub Actions.
- [ ] Build appears under App Store Connect → TestFlight within ~10 minutes.
- [ ] Internal testers are invited (the auto-distribution group may handle this).
- [ ] Artifacts (IPA, dSYM, Gym logs) attached to the run, retained 90 days.
## Never commit the post-lane tree
A local lane run rewrites `ElementX.xcodeproj/project.pbxproj` — `xcodegen`
regenerates it, then `disable_automatic_code_signing` and
`update_project_provisioning` write Manual signing and profile UUIDs into it. That
file is tracked.
```bash
git checkout -- ElementX.xcodeproj
```
Committing it pins every future build to one machine's profile UUIDs.
## Required GitHub Actions secrets
Five. Missing any fails the workflow at the signing step with a clear error.
| Secret | Source |
|---|---|
| `HEALTHCHAT_ASC_KEY_ID` | App Store Connect → Users and Access → Integrations → Team Keys (10-char Key ID) |
| `HEALTHCHAT_ASC_KEY_ISSUER_ID` | Same page, UUID at the top |
| `HEALTHCHAT_ASC_KEY_CONTENT` | `.p8` contents including the `-----BEGIN/END PRIVATE KEY-----` lines |
| `HEALTHCHAT_CERTIFICATES_P12` | Base64 distribution cert (`base64 -i healthchat.p12 \| pbcopy`) |
| `HEALTHCHAT_CERTIFICATES_P12_PASSWORD` | Password used when exporting the `.p12` |
**There is no `HEALTHCHAT_KEYCHAIN_PASSWORD`.** The legacy skill lists one and the
legacy workflow references it, but it exists at neither repo nor org level and
that pipeline runs green anyway — `import-codesign-certs` tolerates its absence.
Do not add it back.
Managing these needs the `snowping` GitHub account; this repo is INTERNAL and
invisible to the other account.
## Self-hosted runner requirements
Runs on `novaloop-mac-studio-001` — an **org-level** runner (`[self-hosted,
macOS, ARM64]`) shared with the legacy fork, not registered per-repo. One machine,
three names: `novaloop-mac-studio-001` in GitHub, hostname `novaloop-mac-studio-2`
(macOS appended `-2` in October 2026), `novaloops-mac-studio` on Tailscale.
- **One Xcode, globally selected.** A single install at `/Applications/Xcode.app`
(**27.1**, build `27A9275`, since 2026-10-16; upgraded in place via the App Store)
— no versioned `Xcode_*.app` siblings. Upstream 26.10.3+ needs the iOS 27 SDK.
**Nothing pins it.** The Fastfile builds with whatever `xcode-select` points at, so
**whatever the runner has is what ships**. Upgrading the runner's Xcode silently
changes the compiler every subsequent release is built with — no tag, no diff, no
review. Treat that upgrade as a release-affecting change.
- **Do not reintroduce a version pin.** Pinning a version the runner lacks sends
`xcodes` into a multi-GB authenticated download that no CI secret can satisfy, and
the run hangs. Change the runner's Xcode instead.
- **Toolchain installed once by hand**, never by CI: `xcodegen swiftlint swiftformat
xcbeautify xcresultparser pkl` (`xcresultparser` is not in homebrew-core — only
`a7ex/homebrew-formulae/xcresultparser` ships it). `git-lfs`, `xcodes`, `brew` and
rbenv `ruby`/`bundle` are already present. There is deliberately **no `brew bundle`
step and no `Brewfile`**: this machine is shared with CI, and a per-run
`brew update` could upgrade `xcodegen` underneath a running release. CI asserts the
tools are present and fails loudly naming the fix; it never provisions.
- **No passwordless sudo.** Nothing in CI may call `sudo` — that is why upstream's
`setup_github_actions_environment` cannot run here.
- **`APPLE_ID`** exported as a machine-level shell variable — the `Appfile` reads
it and it is not carried in any secret.
- Network access to `developer.apple.com`, `api.appstoreconnect.apple.com`,
`github.com`, `rubygems.org`.
**A release's only Xcode provenance is its own log.** `release-healthchat.yml` runs
`xcodebuild -version` (`Record toolchain`) before every build, so each run records the
compiler that produced it. Nothing pins that version — upgrading the runner's Xcode
silently changes the compiler every subsequent release is built with, and that log
line is the only place it shows up. Do not reconstruct a past build's toolchain from
the runner: it answers for today, not for the build you are asking about. Read the
run's log.
## Renewing the Apple Distribution certificate (annual)
Apple Distribution certificates are valid for **exactly 1 year**. There is no
longer-lived option. Last renewed **2026-04-07**, so the next is due around
**April 2027**. Renew proactively.
1. **~4 weeks before expiry**, check on the Mac holding the private key:
```bash
security find-certificate -c "Apple Distribution: E-HealthSolutions GmbH" -p | openssl x509 -noout -enddate
```
2. **Generate a CSR** on whichever Mac will hold the new private key: Keychain
Access → Certificate Assistant → Request a Certificate from a Certificate
Authority… → "Saved to disk".
3. **Apple Developer portal → Certificates** → **+** → Apple Distribution → upload
the CSR → download the `.cer` → double-click to install.
4. **Regenerate all 3 App Store provisioning profiles** — they reference the old
cert and become invalid:
- `HealthChat App Store`
- `HealthChat NSE: App Store`
- `HealthChat Share Extension: App Store`
5. **Verify locally**: archive in Xcode → Distribute App → App Store Connect →
Upload. TestFlight accepting the build proves the cert works.
6. **Export as `.p12`**: Keychain Access → My Certificates → right-click the new
`Apple Distribution: E-HealthSolutions GmbH` → Export → set a password.
7. **Re-encode and update secrets**: `base64 -i healthchat-new.p12 | pbcopy`, then
replace `HEALTHCHAT_CERTIFICATES_P12` and `HEALTHCHAT_CERTIFICATES_P12_PASSWORD`.
8. **Run the workflow** via `workflow_dispatch` with a throwaway numeric version
to verify end-to-end. Discard the resulting build.
9. **Revoke the old cert** once the new one works in both Xcode and CI.
**Keep the expired `.p12` archived for 2 weeks** in case a rollback is needed.
## Promoting a TestFlight build to the App Store
TestFlight and App Store builds are the same binary. To release a validated one:
1. App Store Connect → My Apps → HealthChat → **TestFlight** → find the build.
2. Confirm it passed internal testing.
3. **Distribution** tab → **+** next to "iOS App" → "Prepare for Submission" →
fill in metadata → **Add for Review**.
4. Wait for review (24–48 hours typical).
5. Release manually, or configure automatic release.
**Deliberately not automated.** Automating submission needs `fastlane/metadata/`
plus HealthChat-branded screenshots (neither exists) and a `Deliverfile`
refactored for API key auth.
**Before the first submission**, confirm the install base against the iOS floor:
element-x requires **iOS 18.5**, the legacy required 15.1. Every user below 18.5
stays on 1.4.1 forever — the App Store will not offer them the update, silently.
That floor is upstream's and cannot be lowered.
## Rollback
- **Bad build, notes fine** → fix, commit, tag the next patch version. TestFlight
supersedes the bad build. (Build numbers are timestamps, so no version games.)
- **Bad release notes only** → edit `HEALTHCHAT_CHANGES.md`, then update the
TestFlight "What to Test" text in App Store Connect by hand — the pipeline only
writes it at upload time.
- **Wrong version number** → treat as burned; tag a higher one.
- **Rolling back to legacy 1.4.1 loses push** — element-x overwrites the user's
sygnal pusher in place on first launch (same app id and pushkey).
## The migration contract
**Read this before "cleaning up" anything.** HealthChat replaces the legacy app in
place, and these are what stop existing users being silently logged out.
- **`CLASSIC_APP_*` in `Variants/HealthChat/healthchat.yml` is load-bearing.**
`ClassicAppManager` reads the legacy account and crypto-store keys through them.
Upstream's defaults in `app.yml` point at Element's own `group.im.vector` /
`im.vector.app.*`, which this team cannot provision. **Never restore upstream's
values.** Failure is silent — `loadAccounts()` throws, and
`AuthenticationService` logs it without telling the user or you.
- **The classic keychain group in `ElementX/SupportingFiles/target.yml` must stay
in the `keychain-access-groups` array.** Entitlement arrays live there, never in
the variant — XcodeGen concatenates arrays on include-merge and only overrides
scalars.
- **The `.requiresBackup` fall-through in `AuthenticationStartScreenViewModel` is a
deliberate upstream divergence.** Upstream sends those accounts to a sheet that
tells the user to open Element Classic. That app no longer exists — this update
replaced it — and the sheet's button opens a URL scheme nothing registers. A
rebase that reverts this reintroduces a dead button.
- **Both apps share the `group.ch.healthchat` UserDefaults suite**
(`AppSettings.swift:56`). An unqualified `@UserPreference` name lands in a suite
the legacy also writes to. Collisions are cheap to introduce.
- **`hasSignedInBefore` voids migration testing.** It lives in that shared suite,
survives app deletion, and short-circuits `loadAccounts()`. Any device that has
run an element-x HealthChat build shows a plain login screen *while migration
works perfectly*. Test on a device that has never run an element-x HealthChat
build, or clear the `group.ch.healthchat` suite first;
`"Already signed in to Element X before, skipping loadAccounts"` in the log
means the run is **void, not failed**. A
`"Classic App not configured, skipping loadAccounts"` line is the opposite —
the `CLASSIC_APP_*` Info.plist keys are missing, `ClassicAppManager` never
initialised, and migration is broken for every user. Investigate, do not
dismiss.
## Known branch divergence on rebase
`fastlane/`, `.github/workflows/release-healthchat.yml`, `HEALTHCHAT_CHANGES.md`,
`Gemfile` and this skill are **fork-only** — upstream element-x-ios has
no `fastlane/` directory at all. A rebase conflict in any of them means something
upstream has started to overlap; keep `--ours` and investigate.
What does need watching:
- **`project.yml`'s `MARKETING_VERSION`** — `automatic-calendar-version.yml` and
`post-release.yml` are gated on `github.repository == 'element-hq/element-x-ios'`
and silently no-op here, so rebases drag upstream's version along. Harmless: the
tag is the source of truth.
- **Upstream files this fork edits** (expect conflicts here on every sync):
`AuthenticationStartScreenViewModel` (migration fall-through, see "The migration
contract"), `AppHooks/UserHooks.swift` (two HealthChat hook fields),
`AppSettings.swift` (VoIP push properties for the NSE), `ElementCallService.swift`
(PushKit token storage, expiration parsing), `NSE/Sources/NotificationHandler.swift`
(VoIP push request to Sygnal), `UserSessionFlowCoordinator` (Members tab),
the `SettingsScreen` files, `RoomMemberDetailsScreen` and `UserProfileScreen`
(extended profile section).
- **Sync strategy: patch stack, like healthchat-web.** `release/healthchat` is
upstream's release tag plus the HealthChat commits on top, nothing else. To sync:
rebase the stack onto the new upstream tag (or rebuild it from the resolved final
tree, one commit per topic), verify tree and tests, then force-push
`release/healthchat`. Older release tags keep their commits alive but leave the
branch line, as on the web fork after its rebase onto v1.12.21. `AGENTS.md`'s
no-rewrite rule is about PR branches; this sync is the one sanctioned rewrite.
- **Unit tests need an iOS 27 simulator.** Upstream's video-size expectations are
encoder-dependent; on iOS 26.5 two `MediaUploadingPreprocessorTests` fail for no
real reason.
- **`app.yml`'s `CLASSIC_APP_*`** — upstream owns these and they stay pointed at
Element's ids. The variant overrides them. Do not "fix" `app.yml`.
@@ -1,135 +0,0 @@
---
name: syncing-upstream-healthchat
description: Bring the HealthChat fork (release/healthchat) onto a newer element-hq/element-x-ios release tag. Use when the user asks to rebase, sync, merge or update to upstream, take a new Element X version, or asks why the fork is behind upstream. Covers the patch-stack model, LFS, conflicts, verification, the force-push and the rewind.
---
# Syncing the HealthChat fork with upstream
`release/healthchat` = upstream release tag + HealthChat commits on top. Patch stack, same as
healthchat-web. A sync replaces the stack's base and force-pushes the branch. That is the one
sanctioned history rewrite in this repo; everything else in `AGENTS.md` still holds.
First done 26.09.1 → 26.10.3 (2026-10-16 to 10-19). Numbers below come from that run.
## Before touching anything
- [ ] **Toolchain.** Upstream pins Xcode + iOS in its CI (`runs-on:` in `.github/workflows/`,
`#available(iOS N)` in sources). Dev Mac AND the runner need it. 26.10.3 needed Xcode 27 /
iOS 27 SDK; the runner still had 26.6 and nobody knew — check `xcodebuild -version` on the
Studio (`novaloops-mac-studio` on Tailscale, runner `novaloop-mac-studio-001`). Upgrade via
App Store in place, open once for the licence, `xcodebuild -downloadPlatform iOS`.
- [ ] **Upstream remote.** `git remote add upstream https://github.com/element-hq/element-x-ios.git`
then `git fetch upstream tag release/<old> tag release/<new> --no-tags`. Release tags are
`release/<version>`. After adding the remote, `gh` resolves to upstream — always pass
`-R Novaloop-AG/element-x-ios`.
- [ ] **A 1.4.1 for the migration test.** Legacy users still exist. No 1.4.1 exists anywhere
(TestFlight builds expire, legacy pipeline last built it 2026-04). Build it from Xcode:
worktree of `Novaloop-AG/element-ios` at tag `healthchat-v1.4.1`, submodule
`matrix-ios-sdk`, `xcodegen`, `pod install`, open `Riot.xcworkspace`, scheme `Riot`,
run on the device with automatic signing. Builds on Xcode 27 (warnings only).
- [ ] **Decisions, product owner:** store version label (stays 2.x, bundle version stays
calendar — see releasing skill), new upstream features on/off (26.10.3: search tab on,
search breadcrumbs kept).
## The stack
```bash
git log --oneline release/<old>..release/healthchat --no-merges # the fork's commits
git merge-base --is-ancestor release/<old> release/healthchat # must be true
```
Upstream files the fork edits — conflicts live here every time:
`AuthenticationStartScreenViewModel` (migration fall-through, see releasing skill "The
migration contract"), `AppHooks/UserHooks.swift` (two HealthChat hook fields),
`AppSettings.swift` (VoIP push properties for the NSE), `ElementCallService.swift` (PushKit
token, expiration parsing), `NSE/Sources/NotificationHandler.swift` (VoIP push to Sygnal),
`UserSessionFlowCoordinator` (Members tab), `SettingsScreen*` (account status section, Labs
gate), the five help URLs are `URL?` (`AppSettings`, `SessionVerificationScreen*`,
`IdentityConfirmationScreen*`, `SecureBackupScreen*`, `RoomScreenModels` + `RoomScreenFooterView`,
`SecurityAndPrivacyScreenModels`, `TimelineViewModel` alert — nil hides the "Learn more" link), `UnitTests/Sources/AnalyticsTests.swift` (suite skipped without PostHog secrets),
`Components/Secrets/Secrets.swift` (analytics/sentry/rageshake nil, hand-edited; upstream's setup
marks it `assume-unchanged`, so run `git update-index --no-assume-unchanged` on it before an
edit shows up in `git status` or a commit),
`RoomMemberDetailsScreen*` + `UserProfileScreen*` (extended profile section), the five fork-gated
CI workflows, `.gitignore`, `project.pbxproj` (never resolve by hand — `xcodegen`).
## Two ways to rebuild the stack
**A. Plain rebase** — `git rebase --onto release/<new> release/<old> release/healthchat` on a
scratch branch, resolve per commit. Faithful, but every conflicting commit must be resolved in
its own context; upstream API removals (26.10.3: `AppHooks.configure(with:)`, `HomeTabsHook`,
`CommonSettingsProtocol`, `appSettings` out of flow parameters) cannot be "resolved", they
need new code. Expect rebased intermediates that do not compile; only the tip has to.
**B. Resolve once, assemble the stack** (used for 26.10.3):
1. Scratch branch off `release/healthchat`, `git merge --no-commit release/<new>`, resolve all
conflicts once, add the rework commits until it builds and tests pass. This is the
*final tree*. Verify it fully (next section) — the stack only reproduces it.
2. Scratch branch off `release/<new>`, rebase the original commits with conflicts resolved to
the fork side blindly (`git checkout --theirs`), then append fix commits whose content is
`git checkout <final tree> -- <files>` per topic:
`chore(healthchat): resolve the rebase onto upstream <new>` (leftovers: workflows, package
pins, Enterprise pointer, start screen), one commit per rework topic, `test(healthchat):
refresh snapshots after rebase onto <new>`, docs. Order of fix commits: resolution first.
3. `git diff --stat <final tree> HEAD` must be empty.
Reproducing historic commits: commit with `--no-verify`, else the SwiftFormat hook rewrites
them. `git cherry-pick` has no `-q`. In zsh, `for c in $VAR` does not split on newlines and a
variable named `path` *is* `PATH` — use `while read`, never name a variable `path`.
## Git LFS — the part that bites
- Checkouts/merges done with `GIT_LFS_SKIP_SMUDGE=1` leave pointer files. Run
`git lfs checkout` before any test run: media fixtures (`UnitTests/Resources`) as pointers
fail `MediaUploadingPreprocessorTests`, `MediaProviderTests`, `VoiceMessageRecorderTests`.
- origin is a standalone repo; upstream's LFS objects are not there. GitHub rejects a push
whose *history* references LFS objects it lacks (`GH008 … unknown Git LFS objects`).
`git lfs fetch upstream release/<new>` gets the tip only. Fetch the tree of every upstream
commit that touched LFS paths, one by one:
```bash
git log --format=%H release/<old>..release/<new> -- '*.png' '*.jpg' '*.gif' '*.mp4' '*.m4a' \
| sort -u | while read c; do git lfs fetch upstream "$c"; done
git lfs push origin <branch> # must report no "(missing)"; then git push
```
A single missing object = one failed fetch; refetch that commit. 26.10.3: 35 commits, ~5 GB.
- Snapshot recording (`swift run tools ci preview-tests --record`, iPhone SE 3rd gen,
iOS version from `Tools/Sources/Commands/CI/CI.swift`) re-records upstream references too
(284 of ~2400 differed on our Mac). Keep only `healthChat*` snapshots; revert upstream's.
## Verification of the final tree
- Build ElementX, NSE, ShareExtension (`xcodebuild build -scheme ElementX` covers all three).
- Unit tests on an **iOS 27+ simulator** matching upstream's CI OS; two video-size tests are
encoder-dependent and fail on older simulators for no reason.
- Migration guard: `healthChatProviderAllowsLegacyAccount` in
`AuthenticationStartScreenViewModelTests` (real hook values → `.welcomeBack`) and
`classicAppAccountRequiresBackupFallsThroughToLogin` must pass.
- Runner: push the branch, `gh workflow run unit-tests.yml --ref <branch>` if the
`pull_request` trigger stays silent. A job whose predecessor was cancelled mid-run can crash
the test host at launch ("Early unexpected exit … signal kill") — plain re-run.
- Device matrix (owner): 1.4.1 → new on a never-used device (log "Already signed in to
Element X before" = void run, "Classic App not configured" = broken), previous release → new,
VoIP ringing on a Debug build (Sygnal `.dev` entries need `platform: sandbox`), push +
badges, Members tab next to any new upstream tab.
## Force-push, rewind
```bash
git push origin <old tip>:refs/heads/backup/release-healthchat-before-<new>
git push --force-with-lease=release/healthchat:<old tip> origin <stack>:release/healthchat
git checkout release/healthchat && git reset --hard origin/release/healthchat # every clone
```
Branch is unprotected: the push lands immediately. Old release tags keep their commits alive
and off the branch line. Rewind = `git push --force origin healthchat-v<last>^{commit}:release/healthchat`.
A rewind does not remove a tag or TestFlight build made on the new history — tag only after
the device tests. Then update `HEALTHCHAT_CHANGES.md`, the releasing skill (Xcode, divergence
list) and this skill with what changed.
## What not to do
- Squash the fork into a side branch and *merge* upstream there: merging back into the
unsquashed branch conflicts on every file (81 on 26.10.3) and duplicates every commit.
- Resolve `project.pbxproj` by hand. Commit the post-lane project file. Pull on a rewritten
branch (merges the old history back in).
+1 -1
View File
@@ -1,5 +1,5 @@
UITests/Sources/__Snapshots__/** filter=lfs diff=lfs merge=lfs -text UITests/Sources/__Snapshots__/** filter=lfs diff=lfs merge=lfs -text
Components/DevelopmentAssets/Media/** filter=lfs diff=lfs merge=lfs -text DevelopmentAssets/Media/** filter=lfs diff=lfs merge=lfs -text
UnitTests/__Snapshots__/** filter=lfs diff=lfs merge=lfs -text UnitTests/__Snapshots__/** filter=lfs diff=lfs merge=lfs -text
PreviewTests/Sources/__Snapshots__/** filter=lfs diff=lfs merge=lfs -text PreviewTests/Sources/__Snapshots__/** filter=lfs diff=lfs merge=lfs -text
compound-ios/Tests/CompoundTests/__Snapshots__/** filter=lfs diff=lfs merge=lfs -text compound-ios/Tests/CompoundTests/__Snapshots__/** filter=lfs diff=lfs merge=lfs -text
+1 -1
View File
@@ -6,7 +6,7 @@ git lfs post-checkout "$@"
export PATH="$PATH:/opt/homebrew/bin" export PATH="$PATH:/opt/homebrew/bin"
# ignores updates of 'Secrets.swift' to avoid pushing sensitive data by mistake # ignores updates of 'Secrets.swift' to avoid pushing sensitive data by mistake
git update-index --assume-unchanged Components/Secrets/Secrets.swift git update-index --assume-unchanged Secrets/Secrets.swift
LOCAL_SCRIPT_PATH="$HOME/.local/elementx_local_dev/post-checkout" LOCAL_SCRIPT_PATH="$HOME/.local/elementx_local_dev/post-checkout"
if [ -x "$LOCAL_SCRIPT_PATH" ]; then if [ -x "$LOCAL_SCRIPT_PATH" ]; then
-1
View File
@@ -4,7 +4,6 @@
- [ ] I am aware of the [etiquette](https://github.com/element-hq/element-x-ios/blob/develop/CONTRIBUTING.md#etiquette). - [ ] I am aware of the [etiquette](https://github.com/element-hq/element-x-ios/blob/develop/CONTRIBUTING.md#etiquette).
- [ ] Pull request contains a [changelog label](https://github.com/element-hq/element-x-ios/blob/develop/CONTRIBUTING.md#changelog). - [ ] Pull request contains a [changelog label](https://github.com/element-hq/element-x-ios/blob/develop/CONTRIBUTING.md#changelog).
- [ ] This PR has been made with the help of an LLM. - [ ] This PR has been made with the help of an LLM.
- Model and harness used: <!-- e.g. Claude Opus 5.5 with Claude Code -->
**UI changes have been tested with:** **UI changes have been tested with:**
- [ ] iPhone and iPad simulators in portrait and landscape orientations. - [ ] iPhone and iPad simulators in portrait and landscape orientations.
-4
View File
@@ -28,10 +28,6 @@ changelog:
labels: labels:
- pr-wip - pr-wip
- title: 💼 Element Pro
labels:
- pr-element-pro
- title: Others - title: Others
labels: labels:
- pr-misc - pr-misc
+2 -2
View File
@@ -16,7 +16,7 @@ jobs:
# than deleted so the file keeps rebasing cleanly. Run locally with # than deleted so the file keeps rebasing cleanly. Run locally with
# `swift run tools ci accessibility-tests`. # `swift run tools ci accessibility-tests`.
if: github.repository == 'element-hq/element-x-ios' if: github.repository == 'element-hq/element-x-ios'
runs-on: xcode-27 runs-on: macos-26
timeout-minutes: 150 timeout-minutes: 150
concurrency: concurrency:
@@ -36,7 +36,7 @@ jobs:
run: swift run -q tools ci accessibility-tests run: swift run -q tools ci accessibility-tests
- name: Archive artifacts - name: Archive artifacts
uses: actions/upload-artifact@cf430e030ddbb5b0abf93d22962f4752f3646cd9 # v7.0.2 uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
if: failure() if: failure()
with: with:
name: Results name: Results
@@ -13,14 +13,14 @@ permissions: {}
# Patch bumps are handled by the release script. # Patch bumps are handled by the release script.
jobs: jobs:
automatic-calendar-version: automatic-calendar-version:
runs-on: xcode-27 runs-on: macos-26
timeout-minutes: 15 timeout-minutes: 15
# Skip in forks # Skip in forks
if: github.repository == 'element-hq/element-x-ios' if: github.repository == 'element-hq/element-x-ios'
steps: steps:
- name: Checkout - name: Checkout
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
with: with:
persist-credentials: false persist-credentials: false
+8 -8
View File
@@ -25,8 +25,8 @@ jobs:
# permissions: {} leaves a metadata-only token that cannot read an INTERNAL repo. Gated rather # permissions: {} leaves a metadata-only token that cannot read an INTERNAL repo. Gated rather
# than deleted so the file keeps rebasing cleanly. # than deleted so the file keeps rebasing cleanly.
if: github.repository == 'element-hq/element-x-ios' if: github.repository == 'element-hq/element-x-ios'
runs-on: xcode-27 runs-on: macos-26
timeout-minutes: 25 timeout-minutes: 15
concurrency: concurrency:
# When running on develop, use the sha to allow all runs of this workflow to run concurrently. # When running on develop, use the sha to allow all runs of this workflow to run concurrently.
@@ -39,8 +39,8 @@ jobs:
with: with:
persist-credentials: false persist-credentials: false
- name: Configure Xcode 27 - name: Configure Xcode 26
run: sudo xcode-select -s /Applications/Xcode_27.app run: sudo xcode-select -s /Applications/Xcode_26.5.app
- name: Install sourcery - name: Install sourcery
run: brew install sourcery run: brew install sourcery
@@ -50,11 +50,11 @@ jobs:
run: sourcery --config Tools/Sourcery/PreviewTestsConfig.yml run: sourcery --config Tools/Sourcery/PreviewTestsConfig.yml
- name: Create simulator - name: Create simulator
run: xcrun simctl create "Snapshots" "iPhone SE (3rd generation)" "com.apple.CoreSimulator.SimRuntime.iOS-27-0" run: xcrun simctl create "Snapshots" "iPhone SE (3rd generation)" "com.apple.CoreSimulator.SimRuntime.iOS-26-5"
- name: Run tests - name: Run tests
working-directory: compound-ios working-directory: compound-ios
run: set -o pipefail && xcodebuild test -scheme 'Compound' -sdk iphonesimulator -destination 'platform=iOS Simulator,name=Snapshots,OS=27.0' -skipPackagePluginValidation -resultBundlePath Logs/CompoundTests.xcresult | xcbeautify --renderer github-actions run: set -o pipefail && xcodebuild test -scheme 'Compound' -sdk iphonesimulator -destination 'platform=iOS Simulator,name=Snapshots,OS=26.5' -skipPackagePluginValidation -resultBundlePath Logs/CompoundTests.xcresult | xcbeautify --renderer github-actions
- name: Zip artifacts - name: Zip artifacts
if: failure() # We only care about artefacts if the tests fail if: failure() # We only care about artefacts if the tests fail
@@ -62,7 +62,7 @@ jobs:
run: zip -r Logs/CompoundTests.xcresult.zip Logs/CompoundTests.xcresult/ run: zip -r Logs/CompoundTests.xcresult.zip Logs/CompoundTests.xcresult/
- name: Archive artifacts - name: Archive artifacts
uses: actions/upload-artifact@cf430e030ddbb5b0abf93d22962f4752f3646cd9 # v7.0.2 uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
if: failure() # We only care about artefacts if the tests fail if: failure() # We only care about artefacts if the tests fail
with: with:
name: test-results name: test-results
@@ -71,7 +71,7 @@ jobs:
if-no-files-found: ignore if-no-files-found: ignore
- name: Upload coverage to Codecov - name: Upload coverage to Codecov
uses: codecov/codecov-action@303a32d7a59b442fa8d48b6a1cc6825c09c847a5 # v7.1.1 uses: codecov/codecov-action@fb8b3582c8e4def4969c97caa2f19720cb33a72f # v7.0.0
with: with:
fail_ci_if_error: false fail_ci_if_error: false
token: ${{ secrets.CODECOV_TOKEN }} token: ${{ secrets.CODECOV_TOKEN }}
+33
View File
@@ -0,0 +1,33 @@
name: Danger CI
on:
pull_request:
types: [labeled, synchronize, opened, reopened]
permissions: {}
jobs:
build:
name: Danger
runs-on: ubuntu-latest
timeout-minutes: 15
permissions:
contents: read # HealthChat: this fork is INTERNAL, so a metadata-only token 404s on checkout. Upstream is public, hence permissions: {} there.
issues: read # HealthChat: Danger reads the PR via the issues API (a PR is an issue there); pull-requests alone 403s on GET /issues/{n}.
pull-requests: write # HealthChat: Danger posts its report comment and inline SwiftLint review comments (Dangerfile.swift:5 sets inline: true) with GITHUB_TOKEN.
concurrency:
# Only allow a single run of this workflow on each branch, automatically cancelling older runs.
group: ${{ format('danger-ci-{0}', github.ref) }}
cancel-in-progress: true
steps:
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
with:
persist-credentials: false
- name: Danger
uses: danger/swift@434d7c25f3b02d490a340b23f5e78dd15a5670bc # 3.22.1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+6 -8
View File
@@ -18,7 +18,7 @@ jobs:
# HealthChatAppSettingsHook sets allowOtherAccountProviders: false, hiding the change-server UI # HealthChatAppSettingsHook sets allowOtherAccountProviders: false, hiding the change-server UI
# these tests drive. Gated rather than deleted so the file keeps rebasing cleanly. # these tests drive. Gated rather than deleted so the file keeps rebasing cleanly.
if: github.repository == 'element-hq/element-x-ios' if: github.repository == 'element-hq/element-x-ios'
runs-on: xcode-27 runs-on: macos-26
timeout-minutes: 45 timeout-minutes: 45
concurrency: concurrency:
@@ -27,7 +27,7 @@ jobs:
cancel-in-progress: false cancel-in-progress: false
steps: steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
with: with:
persist-credentials: false persist-credentials: false
@@ -42,21 +42,19 @@ jobs:
INTEGRATION_TESTS_PASSWORD: ${{ secrets.INTEGRATION_TESTS_PASSWORD }} INTEGRATION_TESTS_PASSWORD: ${{ secrets.INTEGRATION_TESTS_PASSWORD }}
- name: Archive artifacts - name: Archive artifacts
uses: actions/upload-artifact@cf430e030ddbb5b0abf93d22962f4752f3646cd9 # v7.0.2 uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
# We only care about artefacts if the tests fail # We only care about artefacts if the tests fail
if: failure() if: failure()
with: with:
name: Results name: Results
path: | path: test_output/IntegrationTests.xcresult.zip
test_output/IntegrationTests.xcresult.zip
test_output/console*
retention-days: 7 retention-days: 7
if-no-files-found: ignore if-no-files-found: ignore
- name: Upload coverage to Codecov - name: Upload coverage to Codecov
# Skip if not successful and in forks # Skip if not successful and in forks
if: ${{ success() && (github.event_name != 'pull_request' || github.event.pull_request.head.repo.full_name == github.repository) }} if: ${{ success() && (github.event_name != 'pull_request' || github.event.pull_request.head.repo.full_name == github.repository) }}
uses: codecov/codecov-action@303a32d7a59b442fa8d48b6a1cc6825c09c847a5 # v7.1.1 uses: codecov/codecov-action@fb8b3582c8e4def4969c97caa2f19720cb33a72f # v7.0.0
with: with:
report_type: coverage report_type: coverage
files: test_output/integration-cobertura.xml files: test_output/integration-cobertura.xml
@@ -68,7 +66,7 @@ jobs:
- name: Upload test results to Codecov - name: Upload test results to Codecov
# Skip if cancelled and in forks # Skip if cancelled and in forks
if: ${{ !cancelled() && (github.event_name != 'pull_request' || github.event.pull_request.head.repo.full_name == github.repository) }} if: ${{ !cancelled() && (github.event_name != 'pull_request' || github.event.pull_request.head.repo.full_name == github.repository) }}
uses: codecov/codecov-action@303a32d7a59b442fa8d48b6a1cc6825c09c847a5 # v7.1.1 uses: codecov/codecov-action@fb8b3582c8e4def4969c97caa2f19720cb33a72f # v7.0.0
continue-on-error: true continue-on-error: true
with: with:
report_type: test_results report_type: test_results
-109
View File
@@ -1,109 +0,0 @@
name: PR Checks
on:
# Privilege escalation necessary to comment on pull requests from forks.
# 🚨 We must not check out or execute any code here, and be careful around use of user-controlled inputs.
pull_request_target: # zizmor: ignore[dangerous-triggers]
types: [opened, reopened, edited, synchronize, labeled, unlabeled]
permissions: {}
jobs:
pr-checks:
name: PR Checks
runs-on: ubuntu-latest
timeout-minutes: 5
concurrency:
# Only allow a single run of this workflow on each branch, automatically cancelling older runs.
group: ${{ format('pr-checks-{0}', github.ref) }}
cancel-in-progress: true
permissions:
pull-requests: write
steps:
- name: Check the pull request
uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0
with:
script: |
const pr = context.payload.pull_request;
const body = pr.body ?? "";
const files = await github.paginate(github.rest.pulls.listFiles, {
owner: context.repo.owner,
repo: context.repo.repo,
pull_number: pr.number
});
const paths = files.map(file => file.filename.toLowerCase());
const warnings = [];
const failures = [];
if (pr.additions > 1000) {
warnings.push("This pull request seems relatively large. Please consider splitting it into multiple smaller ones.");
}
if (!body) {
warnings.push("Please provide a description for this PR.");
}
if (paths.some(path => path.includes("/view")) && !body.includes("user-attachments")) {
warnings.push("You seem to have made changes to views. Please consider adding screenshots.");
}
if (paths.some(path => path.includes(".xcassets") && path.endsWith(".png"))) {
warnings.push("You seem to have made changes to some resource images. Please consider using an SVG or PDF.");
}
if (pr.title.endsWith("…") || /^(Fixes|Fix) #\d+/.test(pr.title) || /^\w+\(\w+\):/.test(pr.title)) {
failures.push("Please provide a complete title that can be used as a changelog entry.");
}
if (pr.labels.filter(label => label.name.startsWith("pr-")).length !== 1) {
failures.push("Please add a `pr-` label to categorise the changelog entry.");
}
warnings.forEach(warning => core.warning(warning));
failures.forEach(failure => core.error(failure));
// Keep a single comment up to date rather than adding a new one on every run.
const marker = "<!-- pr-checks -->";
const comments = await github.paginate(github.rest.issues.listComments, {
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: pr.number
});
const existing = comments.find(comment => comment.body.includes(marker));
if (warnings.length || failures.length) {
const lines = [...failures.map(failure => `- ❌ ${failure}`),
...warnings.map(warning => `- ⚠️ ${warning}`)];
const commentBody = `${marker}\n### PR Checks\n\n${lines.join("\n")}`;
if (existing) {
await github.rest.issues.updateComment({
owner: context.repo.owner,
repo: context.repo.repo,
comment_id: existing.id,
body: commentBody
});
} else {
await github.rest.issues.createComment({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: pr.number,
body: commentBody
});
}
} else if (existing) {
await github.rest.issues.deleteComment({
owner: context.repo.owner,
repo: context.repo.repo,
comment_id: existing.id
});
}
if (failures.length) {
core.setFailed(`${failures.length} check(s) failed, see the comment on the pull request.`);
}
+2 -2
View File
@@ -10,8 +10,8 @@ permissions: {}
jobs: jobs:
record-snapshots: record-snapshots:
name: Record Preview Snapshots name: Record Preview Snapshots
runs-on: xcode-27 runs-on: macos-26
timeout-minutes: 60 timeout-minutes: 45
if: > if: >
github.event.label.name == 'record-snapshots' && github.event.label.name == 'record-snapshots' &&
-133
View File
@@ -1,133 +0,0 @@
name: Release HealthChat
on:
push:
tags:
- 'healthchat-v*'
workflow_dispatch:
inputs:
version:
description: 'Marketing version (e.g. 26.7.4). Must be 1-3 dot-separated integers — Apple rejects anything else.'
required: true
type: string
release_notes_override:
description: 'Optional release notes. If empty, falls back to the HEALTHCHAT_CHANGES.md section for the given version.'
required: false
type: string
permissions:
# Minimum needed for actions/checkout to clone an internal repo. The workflow does not push,
# comment, or create releases — everything else authenticates with the ASC key and .p12.
contents: read
concurrency:
group: release-healthchat-${{ github.event.inputs.version || github.ref_name }}
cancel-in-progress: false
jobs:
release:
name: Build & upload to TestFlight
runs-on: [self-hosted, macOS]
timeout-minutes: 90
steps:
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
with:
# This repo's only submodule is element-hq's private Enterprise repo, which Novaloop
# cannot clone. Checking out submodules fails the job on its very first step.
submodules: false
persist-credentials: false
- name: Record toolchain
# HealthChat: nothing pins Xcode (the runner carries a single globally-selected one), so this
# log line is the only record of which compiler produced a given TestFlight build.
run: xcodebuild -version
- name: Resolve marketing version
id: version
env:
# Read via env, never `${{ }}` inside the script: the input is attacker-controlled text
# that GitHub would splice into the shell before the regex below could reject it.
INPUT_VERSION: ${{ github.event.inputs.version }}
run: |
set -euo pipefail
if [[ "${{ github.event_name }}" == "workflow_dispatch" ]]; then
VERSION="$INPUT_VERSION"
else
VERSION="${GITHUB_REF_NAME#healthchat-v}"
fi
# Apple caps CFBundleShortVersionString at three integers. The Fastfile guards this too,
# but failing here costs seconds instead of a signing run.
if ! [[ "$VERSION" =~ ^[0-9]+(\.[0-9]+){0,2}$ ]]; then
echo "::error::Invalid marketing version '$VERSION' — expected 1-3 dot-separated integers, e.g. 26.7.4"
exit 1
fi
echo "version=$VERSION" >> "$GITHUB_OUTPUT"
echo "Resolved marketing version: $VERSION"
- name: Extract release notes
id: notes
env:
VERSION: ${{ steps.version.outputs.version }}
OVERRIDE: ${{ github.event.inputs.release_notes_override }}
run: |
set -euo pipefail
if [[ -n "$OVERRIDE" ]]; then
NOTES="$OVERRIDE"
echo "Using release notes from the workflow input"
elif [[ ! -f HEALTHCHAT_CHANGES.md ]]; then
echo "::error::HEALTHCHAT_CHANGES.md is missing — it is the release-notes source"
exit 1
else
NOTES=$(awk -v ver="$VERSION" '
/^## Changes in / {
if (found) { exit }
if ($0 ~ "## Changes in " ver "( |$|\\()") { found = 1; next }
}
found { print }
' HEALTHCHAT_CHANGES.md | sed '/^[[:space:]]*$/{N;/^\n$/D;}')
if [[ -z "$NOTES" ]]; then
NOTES="HealthChat ${VERSION} — automated build from ${GITHUB_REF_NAME}."
echo "::warning::No HEALTHCHAT_CHANGES.md section found for $VERSION — using fallback"
fi
fi
{
echo 'notes<<NOTES_EOF'
echo "$NOTES"
echo 'NOTES_EOF'
} >> "$GITHUB_OUTPUT"
- name: Bundle install
run: |
bundle config path vendor/bundle
bundle install --jobs 4 --retry 3
- name: Import signing certificate
uses: apple-actions/import-codesign-certs@b610f78488812c1e56b20e6df63ec42d833f2d14 # v6.0.0
with:
p12-file-base64: ${{ secrets.HEALTHCHAT_CERTIFICATES_P12 }}
p12-password: ${{ secrets.HEALTHCHAT_CERTIFICATES_P12_PASSWORD }}
- name: Build & upload to TestFlight
run: bundle exec fastlane release_testflight
env:
# Passed via env rather than lane options so multi-line notes containing quotes,
# $, or backticks survive without shell escaping.
HEALTHCHAT_MARKETING_VERSION: ${{ steps.version.outputs.version }}
HEALTHCHAT_RELEASE_NOTES: ${{ steps.notes.outputs.notes }}
APPSTORECONNECT_KEY_ID: ${{ secrets.HEALTHCHAT_ASC_KEY_ID }}
APPSTORECONNECT_KEY_ISSUER_ID: ${{ secrets.HEALTHCHAT_ASC_KEY_ISSUER_ID }}
APPSTORECONNECT_KEY_CONTENT: ${{ secrets.HEALTHCHAT_ASC_KEY_CONTENT }}
TEAM_ID: '6G37K72W82'
- name: Upload artifacts
if: always()
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
with:
name: healthchat-${{ steps.version.outputs.version }}
path: |
out/ElementX.ipa
out/ElementX.app.dSYM.zip
build/Logs/Gym/*.log
retention-days: 90
if-no-files-found: warn
+3 -3
View File
@@ -11,7 +11,7 @@ permissions: {}
jobs: jobs:
update-project: update-project:
name: Update Xcode project name: Update Xcode project
runs-on: xcode-27 runs-on: macos-26
timeout-minutes: 20 timeout-minutes: 20
permissions: permissions:
contents: write contents: write
@@ -25,7 +25,7 @@ jobs:
steps: steps:
- name: Checkout - name: Checkout
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
with: with:
ref: ${{ github.head_ref }} ref: ${{ github.head_ref }}
token: ${{ secrets.ELEMENT_BOT_TOKEN }} token: ${{ secrets.ELEMENT_BOT_TOKEN }}
@@ -48,7 +48,7 @@ jobs:
run: xcodebuild -scheme ElementX -project ElementX.xcodeproj -destination 'generic/platform=iOS Simulator' build run: xcodebuild -scheme ElementX -project ElementX.xcodeproj -destination 'generic/platform=iOS Simulator' build
- name: Update Acknowledgements - name: Update Acknowledgements
run: swift-package-list ElementX.xcodeproj --requires-license --ignore-package compound-ios --ignore-package compound-design-tokens --ignore-package matrix-rich-text-editor-swift --ignore-package element-call-swift --ignore-package element-call-ios --ignore-package matrix-rust-rtc --output-type settings-bundle --output-path ElementX/SupportingFiles run: swift-package-list ElementX.xcodeproj --requires-license --ignore-package compound-ios --ignore-package compound-design-tokens --ignore-package matrix-rich-text-editor-swift --ignore-package element-call-swift --output-type settings-bundle --output-path ElementX/SupportingFiles
- name: Commit and push changes - name: Commit and push changes
run: | run: |
+7 -11
View File
@@ -13,21 +13,17 @@ jobs:
issues: write issues: write
pull-requests: write pull-requests: write
steps: steps:
- uses: actions/stale@4391f3da665fdf50b6810c1a66712fb9ba21aa93 # v11 - uses: actions/stale@eb5cf3af3ac0a1aa4c9c45633dd1ae542a27a899 # v10.3.0
with: with:
labels-to-remove-when-unstale: "X-Needs-Info" only-labels: "X-Needs-Info"
# Issues
only-issue-labels: "X-Needs-Info"
days-before-issue-stale: 30 days-before-issue-stale: 30
days-before-issue-close: 7 days-before-issue-close: 7
stale-issue-label: "Stale"
stale-issue-message: "This issue has been awaiting further information for the past 30 days so will now be marked as stale. Please provide the requested information within the next 7 days to keep it open."
close-issue-message: "This issue is being closed due to inactivity after further information was requested."
# Pull requests
days-before-pr-stale: 30 days-before-pr-stale: 30
days-before-pr-close: 7 days-before-pr-close: 7
stale-pr-label: "Stale" stale-pr-label: "stale"
stale-pr-message: "This pull request has seen no activity for the past 30 days and will now be marked as stale. Please update it or leave a comment within the next 7 days to keep it open." stale-pr-message: "This pull request has seen no activity for the past 30 days and will now be marked as stale. Please update it or leave a comment within the next 7 days to keep it open."
close-pr-message: "This pull request is being closed due to inactivity." close-pr-message: "This pull request is being closed due to inactivity."
stale-issue-label: "stale"
labels-to-remove-when-unstale: "X-Needs-Info"
stale-issue-message: "This issue has been awaiting further information for the past 30 days so will now be marked as stale. Please provide the requested information within the next 7 days to keep it open."
close-issue-message: "This issue is being closed due to inactivity after further information was requested."
+2 -2
View File
@@ -9,14 +9,14 @@ permissions: {}
jobs: jobs:
open-translations-pr: open-translations-pr:
runs-on: xcode-27 runs-on: macos-26
timeout-minutes: 15 timeout-minutes: 15
# Skip in forks # Skip in forks
if: github.repository == 'element-hq/element-x-ios' if: github.repository == 'element-hq/element-x-ios'
steps: steps:
- name: Checkout - name: Checkout
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
with: with:
persist-credentials: false persist-credentials: false
+4 -4
View File
@@ -21,7 +21,7 @@ jobs:
# UITests snapshot, so it would fail on content instead. Gated rather than deleted so the file # UITests snapshot, so it would fail on content instead. Gated rather than deleted so the file
# keeps rebasing cleanly. Run locally with `swift run tools ci ui-tests`. # keeps rebasing cleanly. Run locally with `swift run tools ci ui-tests`.
if: github.repository == 'element-hq/element-x-ios' if: github.repository == 'element-hq/element-x-ios'
runs-on: xcode-27 runs-on: macos-26
timeout-minutes: 90 timeout-minutes: 90
strategy: strategy:
fail-fast: false fail-fast: false
@@ -52,7 +52,7 @@ jobs:
GITHUB_EVENT_INPUTS_TEST_NAME: ${{ github.event.inputs.test_name }} GITHUB_EVENT_INPUTS_TEST_NAME: ${{ github.event.inputs.test_name }}
- name: Archive artifacts - name: Archive artifacts
uses: actions/upload-artifact@cf430e030ddbb5b0abf93d22962f4752f3646cd9 # v7.0.2 uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
# We only care about artefacts if the tests fail # We only care about artefacts if the tests fail
if: failure() if: failure()
with: with:
@@ -64,7 +64,7 @@ jobs:
- name: Upload coverage to Codecov - name: Upload coverage to Codecov
# Skip if not successful and in forks # Skip if not successful and in forks
if: ${{ success() && (github.event_name != 'pull_request' || github.event.pull_request.head.repo.full_name == github.repository) }} if: ${{ success() && (github.event_name != 'pull_request' || github.event.pull_request.head.repo.full_name == github.repository) }}
uses: codecov/codecov-action@303a32d7a59b442fa8d48b6a1cc6825c09c847a5 # v7.1.1 uses: codecov/codecov-action@fb8b3582c8e4def4969c97caa2f19720cb33a72f # v7.0.0
with: with:
report_type: coverage report_type: coverage
files: test_output/ui-cobertura.xml files: test_output/ui-cobertura.xml
@@ -76,7 +76,7 @@ jobs:
- name: Upload test results to Codecov - name: Upload test results to Codecov
# Skip if cancelled and in forks # Skip if cancelled and in forks
if: ${{ !cancelled() && (github.event_name != 'pull_request' || github.event.pull_request.head.repo.full_name == github.repository) }} if: ${{ !cancelled() && (github.event_name != 'pull_request' || github.event.pull_request.head.repo.full_name == github.repository) }}
uses: codecov/codecov-action@303a32d7a59b442fa8d48b6a1cc6825c09c847a5 # v7.1.1 uses: codecov/codecov-action@fb8b3582c8e4def4969c97caa2f19720cb33a72f # v7.0.0
continue-on-error: true continue-on-error: true
with: with:
report_type: test_results report_type: test_results
+3 -18
View File
@@ -13,8 +13,8 @@ permissions: {}
jobs: jobs:
tests: tests:
name: Tests (Enterprise) name: Tests (Enterprise)
runs-on: xcode-27 runs-on: macos-26
timeout-minutes: 60 timeout-minutes: 45
# Skip in forks # Skip in forks
# HealthChat: this job can never pass in this fork — it needs # HealthChat: this job can never pass in this fork — it needs
@@ -41,29 +41,14 @@ jobs:
- name: Setup environment - name: Setup environment
run: source ci_scripts/ci_common.sh && setup_github_actions_environment run: source ci_scripts/ci_common.sh && setup_github_actions_environment
- name: Restore compilation cache
uses: actions/cache/restore@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0
with:
path: ~/Library/Developer/Xcode/CompilationCache.noindex
key: compilation-cache-unit-tests-enterprise-${{ github.sha }}
restore-keys: compilation-cache-unit-tests-enterprise-
- name: Configure Enterprise - name: Configure Enterprise
run: swift run -q pipeline configure-element-pro run: swift run -q pipeline configure-element-pro
- name: Run tests - name: Run tests
run: swift run -q tools ci unit-tests --skip-previews run: swift run -q tools ci unit-tests --skip-previews
- name: Save compilation cache
# Only develop populates the cache, all of the other runs simply read from it.
if: ${{ !cancelled() && github.event_name == 'push' && github.ref == 'refs/heads/develop' }}
uses: actions/cache/save@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0
with:
path: ~/Library/Developer/Xcode/CompilationCache.noindex
key: compilation-cache-unit-tests-enterprise-${{ github.sha }}
- name: Archive artifacts - name: Archive artifacts
uses: actions/upload-artifact@cf430e030ddbb5b0abf93d22962f4752f3646cd9 # v7.0.2 uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
# We only care about artefacts if the tests fail # We only care about artefacts if the tests fail
if: failure() if: failure()
with: with:
+3 -18
View File
@@ -71,13 +71,6 @@ jobs:
# of which Xcode built a given run. # of which Xcode built a given run.
xcodebuild -version xcodebuild -version
- name: Restore compilation cache
uses: actions/cache/restore@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0
with:
path: ~/Library/Developer/Xcode/CompilationCache.noindex
key: compilation-cache-unit-tests-${{ github.sha }}
restore-keys: compilation-cache-unit-tests-
- name: Run tests - name: Run tests
# HealthChat: previews are skipped. PreviewTests renders a snapshot for every preview in the # HealthChat: previews are skipped. PreviewTests renders a snapshot for every preview in the
# app and was the entire reason this job could not fit in an hour — it never once finished, # app and was the entire reason this job could not fit in an hour — it never once finished,
@@ -93,16 +86,8 @@ jobs:
CI_SKIP_TESTS: VoiceMessageCacheTests CI_SKIP_TESTS: VoiceMessageCacheTests
run: swift run -q tools ci unit-tests --skip-previews run: swift run -q tools ci unit-tests --skip-previews
- name: Save compilation cache
# Only develop populates the cache, all of the other runs simply read from it.
if: ${{ !cancelled() && github.event_name == 'push' && github.ref == 'refs/heads/develop' }}
uses: actions/cache/save@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0
with:
path: ~/Library/Developer/Xcode/CompilationCache.noindex
key: compilation-cache-unit-tests-${{ github.sha }}
- name: Archive artifacts - name: Archive artifacts
uses: actions/upload-artifact@cf430e030ddbb5b0abf93d22962f4752f3646cd9 # v7.0.2 uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
# We only care about artefacts if the tests fail # We only care about artefacts if the tests fail
if: failure() if: failure()
with: with:
@@ -118,7 +103,7 @@ jobs:
# runs without a CODECOV_TOKEN — which fails the job via # runs without a CODECOV_TOKEN — which fails the job via
# fail_ci_if_error. Gate on the upstream repo as post-release.yml does. # fail_ci_if_error. Gate on the upstream repo as post-release.yml does.
if: ${{ success() && github.repository == 'element-hq/element-x-ios' && (github.event_name != 'pull_request' || github.event.pull_request.head.repo.full_name == github.repository) }} if: ${{ success() && github.repository == 'element-hq/element-x-ios' && (github.event_name != 'pull_request' || github.event.pull_request.head.repo.full_name == github.repository) }}
uses: codecov/codecov-action@303a32d7a59b442fa8d48b6a1cc6825c09c847a5 # v7.1.1 uses: codecov/codecov-action@fb8b3582c8e4def4969c97caa2f19720cb33a72f # v7.0.0
with: with:
report_type: coverage report_type: coverage
files: test_output/unit-cobertura.xml,test_output/preview-cobertura.xml files: test_output/unit-cobertura.xml,test_output/preview-cobertura.xml
@@ -132,7 +117,7 @@ jobs:
# HealthChat: gated on the upstream repo for the same reason as the # HealthChat: gated on the upstream repo for the same reason as the
# coverage step above — no CODECOV_TOKEN exists in this fork. # coverage step above — no CODECOV_TOKEN exists in this fork.
if: ${{ !cancelled() && github.repository == 'element-hq/element-x-ios' && (github.event_name != 'pull_request' || github.event.pull_request.head.repo.full_name == github.repository) }} if: ${{ !cancelled() && github.repository == 'element-hq/element-x-ios' && (github.event_name != 'pull_request' || github.event.pull_request.head.repo.full_name == github.repository) }}
uses: codecov/codecov-action@303a32d7a59b442fa8d48b6a1cc6825c09c847a5 # v7.1.1 uses: codecov/codecov-action@fb8b3582c8e4def4969c97caa2f19720cb33a72f # v7.0.0
continue-on-error: true continue-on-error: true
with: with:
report_type: test_results report_type: test_results
+2 -2
View File
@@ -18,9 +18,9 @@ jobs:
actions: read # HealthChat: upload-sarif additionally needs this on private/internal repos; public upstream does not. actions: read # HealthChat: upload-sarif additionally needs this on private/internal repos; public upstream does not.
steps: steps:
- name: Checkout repository - name: Checkout repository
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
with: with:
persist-credentials: false persist-credentials: false
- name: Run zizmor 🌈 - name: Run zizmor 🌈
uses: zizmorcore/zizmor-action@cc914d7f3750a2d13d75c7f184a1060aa0e9d482 # v0.6.4 uses: zizmorcore/zizmor-action@192e21d79ab29983730a13d1382995c2307fbcaa # v0.5.7
+16 -17
View File
@@ -18,9 +18,22 @@ DerivedData/
.swiftpm .swiftpm
.netrc .netrc
# fastlane
#
# It is recommended to not store the screenshots in the git repo.
# Instead, use fastlane to re-generate the screenshots whenever they are needed.
# For more information about the recommended setup visit:
# https://docs.fastlane.tools/best-practices/source-control/#source-control
fastlane/report.xml
fastlane/Preview.html
fastlane/screenshots/**/*.png
fastlane/test_output
towncrier.toml.tmp
version_changes.md
build build
/vendor/ /vendor/
*/xcshareddata/xcodecloud
## macOS Files ## macOS Files
.DS_Store .DS_Store
@@ -34,19 +47,5 @@ build
test_output test_output
# Only commit Pkl packages (there may be other caches in here). # Only commit Pkl packages (there may be other caches in here).
Components/Secrets/vendor/* Secrets/vendor/*
!Components/Secrets/vendor/package-2 !Secrets/vendor/package-2
# fastlane release outputs
out/
provisioning_profiles/
# Regenerated by every fastlane invocation, including on the runner. Ignored rather than
# committed, matching element-ios.
fastlane/README.md
# Review working data (per-machine)
.claude/review-context/
.claude/review-log.jsonl
# Local SDK development override
matrix-rust-components-swift
+10 -22
View File
@@ -1,31 +1,19 @@
project: ElementX.xcodeproj project: ElementX.xcodeproj
# Periphery scans all targets built by these schemes. The ElementX scheme also
# builds NSE, ShareExtension and MatrixRustSDKMocks as dependencies. Always run
# the scan with the project configured for the Pro variant so that all of the
# sources are analysed (see the periphery-cleanup skill).
schemes: schemes:
- ElementX - ElementX
- UnitTests - UnitTests
- PreviewTests - PreviewTests
- UITests - UITests
- IntegrationTests - IntegrationTests
- AccessibilityTests targets:
# Compound is excluded: its Inspector app and package tests aren't part of any - ElementX
# scheme in this project, so usage from them is invisible to the analysis. - NSE
index_exclude: - ShareExtension
- "**/*?.build/**/*" - UnitTests
- "**/SourcePackages/checkouts/**" - PreviewTests
- "compound-ios/**" - UITests
- IntegrationTests
report_exclude: report_exclude:
- "**/Generated/**" - ElementX/Sources/Mocks/Generated/GeneratedMocks.swift
# Hand-written mocks: configuration surface is deliberately broader than any test uses. - ElementX/Sources/Mocks/Generated/SDKGeneratedMocks.swift
- "**/Mocks/**"
- "ElementX/Sources/Services/AppLock/LAContextMock.swift"
# Pure payload schema, fields exist to be encoded.
- "ElementX/Sources/Services/Notification/Manager/APNSPayload.swift"
# Backports: everything gated on #available, cleaned up with each OS drop.
- "ElementX/Sources/Other/SwiftUI/Backports.swift"
retain_swift_ui_previews: true retain_swift_ui_previews: true
# Protocol signatures are contracts (hooks, delegates) — parameters unused in
# every current conformance are still part of the interface's design.
retain_unused_protocol_func_params: true
+1 -1
View File
@@ -1,6 +1,6 @@
--swiftversion 5.6 --swiftversion 5.6
--exclude **/Sources/**/Generated,vendor,**/Package.swift,Components/Secrets/**,build --exclude **/Sources/**/Generated,vendor,**/Package.swift,Secrets/**
--disable wrapMultiLineStatementBraces --disable wrapMultiLineStatementBraces
--disable hoistPatternLet --disable hoistPatternLet
+1 -2
View File
@@ -3,7 +3,6 @@ disabled_rules:
- unused_setter_value - unused_setter_value
- redundant_discardable_let - redundant_discardable_let
- identifier_name - identifier_name
- void_function_in_ternary
opt_in_rules: opt_in_rules:
- force_unwrapping - force_unwrapping
@@ -18,7 +17,7 @@ included:
excluded: excluded:
- "*/Sources/Generated/*" - "*/Sources/Generated/*"
- Tools/Sources # Our command-line tools use a lot of print commands. - Tools/Sources # Our command-line tools use a lot of print commands.
- Components/Secrets - Secrets
- compound-ios/Inspector - compound-ios/Inspector
line_length: line_length:
+3 -38
View File
@@ -14,9 +14,6 @@ PRs must follow rules. Prefer Xcode MCP tools over terminal commands.
- **SwiftLint** (.swiftlint.yml) + **SwiftFormat** (.swiftformat) enforce style on build. Warnings show in Xcode. Build before **XcodeRefreshCodeIssuesInFile**. - **SwiftLint** (.swiftlint.yml) + **SwiftFormat** (.swiftformat) enforce style on build. Warnings show in Xcode. Build before **XcodeRefreshCodeIssuesInFile**.
- Follow [Swift API Design Guidelines](https://www.swift.org/documentation/api-design-guidelines/) everywhere, Rust SDK wrappers too (`ID` not `Id`, `URL` not `Url`, `configuration` not `config` or `cfg`). - Follow [Swift API Design Guidelines](https://www.swift.org/documentation/api-design-guidelines/) everywhere, Rust SDK wrappers too (`ID` not `Id`, `URL` not `Url`, `configuration` not `config` or `cfg`).
- File headers live in `IDETemplateMacros.plist`. - File headers live in `IDETemplateMacros.plist`.
- **Import `SwiftUI`, not `UIKit`** — need `UIPasteboard` etc, `SwiftUI` bring it. `SwiftUI` re-export `Foundation` too, so no `import Foundation` beside it.
- **Clean Code** (Robert C. Martin) Newspaper order: headline first, detail down. Stepdown rule: caller above callee, calls point down. Tests: test cases first, helpers below. Swift idiom always win on clash.
- **Member order in type**: properties (stored + computed, public + private) → `init` → functions. `View` types: properties → `init` → views (`body` first) → functions.
### Comments ### Comments
@@ -55,12 +52,10 @@ PRs must follow rules. Prefer Xcode MCP tools over terminal commands.
## Pull Request Guidelines ## Pull Request Guidelines
- New branch from `develop` must not track `develop`.
- Sentence-style titles (no conventional commits). - Sentence-style titles (no conventional commits).
- Exactly one `pr-` label (see `.github/release.yml`). - Exactly one `pr-` label (see `.github/release.yml`).
- Title = changelog entry — descriptive, no "Fixes #…". - Title = changelog entry — descriptive, no "Fixes #…".
- Leave description template for developer. Point them to [contributing etiquette](CONTRIBUTING.md#etiquette). - Leave description template for developer. Point them to [contributing etiquette](CONTRIBUTING.md#etiquette).
- Only fill template LLM line: tick box, name model + harness that made PR (e.g. Claude Opus 5.5, Claude Code).
- Screenshots/videos for visual changes. - Screenshots/videos for visual changes.
- 500 additions max — split big changes. - 500 additions max — split big changes.
- Commits need title + description. No tiny commits, no massive commits. - Commits need title + description. No tiny commits, no massive commits.
@@ -68,17 +63,6 @@ PRs must follow rules. Prefer Xcode MCP tools over terminal commands.
--- ---
## Releasing
HealthChat ship via tag `healthchat-v*` → TestFlight. Full runbook in
`.agents/skills/releasing-healthchat/SKILL.md`. `release/healthchat` = upstream tag +
HealthChat commits on top (patch stack). Upstream sync rebase stack, force-push branch —
only rewrite allowed; procedure in
`.agents/skills/syncing-upstream-healthchat/SKILL.md`. Read skill before release, cert
renewal, or touching `fastlane/`. No duplicate runbook here.
---
## Project Structure ## Project Structure
### Build System ### Build System
@@ -285,16 +269,13 @@ Services = where product-level opinions live (Rust SDK stays spec-faithful).
- Inject via `init` parameters. - Inject via `init` parameters.
- Screen coordinators get `Parameters` struct with specific dependencies. - Screen coordinators get `Parameters` struct with specific dependencies.
- `CommonFlowParameters` flow-coordinator-only. - `CommonFlowParameters` flow-coordinator-only.
- `UserSession` = per-account dependency container (`clientProxy`, `userSettings`, `mediaProvider`…). - `ServiceLocator` **deprecated** — never use services directly. Always inject from above.
- Need 2+ from it? Pass `userSession` down. Need 1? Pass that one direct.
- Receiver may store only pieces it need (e.g. `clientProxy`, `userSettings`).
- Never pass `userSession` plus value it already owns (e.g. `userSession` + `userSettings`).
--- ---
## Concurrency & Actors ## Concurrency & Actors
- All targets **Swift 6** language mode (`SWIFT_VERSION: 6`), approachable concurrency. Compiler version come from Xcode toolchain. - All targets **Swift 6.2**, approachable concurrency.
- **ElementX** app, **UnitTests** + **PreviewTests**: `SWIFT_DEFAULT_ACTOR_ISOLATION = MainActor` — no redundant `@MainActor`. Other targets (incl. app extensions) nonisolated. - **ElementX** app, **UnitTests** + **PreviewTests**: `SWIFT_DEFAULT_ACTOR_ISOLATION = MainActor` — no redundant `@MainActor`. Other targets (incl. app extensions) nonisolated.
- Services + data-layer types: `nonisolated` + `Sendable` when background work need. - Services + data-layer types: `nonisolated` + `Sendable` when background work need.
- Never `@unchecked Sendable` / `nonisolated(unsafe)`. Dev add these. - Never `@unchecked Sendable` / `nonisolated(unsafe)`. Dev add these.
@@ -389,22 +370,6 @@ Same pattern for publishers.
--- ---
## Xcode Agent Skills
Apple ship agent skills with Xcode 27. Installed per machine, not in repo. Skill missing? Suggest user export them (Xcode running): `xcrun agent skills export --output-dir <agent skills dir>` (Claude Code: `~/.claude/skills`). User decline? Skip skill, carry on.
Skill clash this file? This file win. Build settings, entitlements, Info.plist keys, targets → `project.yml`/`target.yml` + `xcodegen`, never `.xcodeproj` or Xcode project-write tools (`UpdateTargetBuildSetting`, `AddEntitlement`…). API newer than target's deployment target → `#available`.
| Skill | Best moment |
|-------|-------------|
| `swiftui-specialist` | Writing/reviewing views: data flow, `ForEach`/`List` identity, environment, perf. `L10n` + Compound tokens beat its samples. |
| `device-interaction` | Runtime check of UI/flow change (subagent skill). Xcode must open this checkout. No login: env `UI_TESTS_SCREEN=<UITestsScreenIdentifier case>` launch that case's mock fixture, no real session. `roomLayout*`, `appLockFlow*`, `*Pagination` need UITests runner. |
| `swiftui-whats-new-27` | SDK 27 `@State`/`@ContentBuilder` compile errors, or adopting iOS 27 SwiftUI APIs. Keep `AlertInfo` alerts. |
| `modernize-tests` | Modernizing UnitTests suites (`@Test(arguments:)`, `withKnownIssue`, `#require`). XCUI targets stay XCTest. Keep `deferFulfillment`/`waitForConfirmation` — bare `confirmation()` no wait async. No `.serialized`/`@MainActor` adds. |
| `app-intents-specialist`, `app-intents-whats-new-27` | Adding App Intents/Shortcuts/Siri/controls (full support planned; iOS 26+ APIs → `-whats-new-27`). Not SiriKit `IN*` code. Intent strings need `LocalizedStringResource` — `L10n` return `String`. |
---
## Key Files ## Key Files
| File | Purpose | | File | Purpose |
@@ -413,7 +378,7 @@ Skill clash this file? This file win. Build settings, entitlements, Info.plist k
| `app.yml` | App-level XcodeGen config | | `app.yml` | App-level XcodeGen config |
| `.swiftlint.yml` | SwiftLint rules | | `.swiftlint.yml` | SwiftLint rules |
| `.swiftformat` | SwiftFormat rules | | `.swiftformat` | SwiftFormat rules |
| `.github/workflows/pr-checks.yml` | PR metadata checks (title, labels, size, screenshots) | | `Dangerfile.swift` | Danger PR checks |
| `Package.swift` | SPM manifest (Tools CLI) | | `Package.swift` | SPM manifest (Tools CLI) |
| `localazy.json` | Localazy translation config | | `localazy.json` | Localazy translation config |
| `codecov.yml` | Codecov config | | `codecov.yml` | Codecov config |
@@ -53,10 +53,6 @@ final class AccessibilityTests: XCTestCase {
private func performAccessibilityAuditForPreview(named name: String) { private func performAccessibilityAuditForPreview(named name: String) {
// Alows us to log the name of the preview that is being tested // Alows us to log the name of the preview that is being tested
XCTContext.runActivity(named: name) { _ in XCTContext.runActivity(named: name) { _ in
// Previews that focus a text field bring up the system keyboard, which we can't fix.
// Snapshot the keyboard in one query so one that's dismissing can't fail the test between checking and reading it.
let keyboardFrame = (try? app.keyboards.firstMatch.snapshot().frame) ?? .null
do { do {
// We have removed `textClipped` and `contrast` for now // We have removed `textClipped` and `contrast` for now
try app.performAccessibilityAudit(for: [.dynamicType, .elementDetection, .hitRegion, .sufficientElementDescription, .trait]) { issue in try app.performAccessibilityAudit(for: [.dynamicType, .elementDetection, .hitRegion, .sufficientElementDescription, .trait]) { issue in
@@ -70,11 +66,6 @@ final class AccessibilityTests: XCTestCase {
return true return true
} }
// The system keyboard's own elements aren't ours to fix
if keyboardFrame.contains(element.frame) {
return true
}
// We are fine with elements that only partially support dynamic types // We are fine with elements that only partially support dynamic types
guard issue.compactDescription != Self.partiallyUnsupportedDynamicTypeMessage else { guard issue.compactDescription != Self.partiallyUnsupportedDynamicTypeMessage else {
return true return true
@@ -107,6 +98,7 @@ final class AccessibilityTests: XCTestCase {
private static let partiallyUnsupportedDynamicTypeMessage = "Dynamic Type font sizes are partially unsupported" private static let partiallyUnsupportedDynamicTypeMessage = "Dynamic Type font sizes are partially unsupported"
private static let notHumanReadableMessage = "Label not human-readable" private static let notHumanReadableMessage = "Label not human-readable"
private static let elementHasNoDescription = "Element has no description"
/// Use this array to filter add specific filters to ignore specific issues for certain elements /// Use this array to filter add specific filters to ignore specific issues for certain elements
private static let ignoredA11yIdentifiers: [String: [FilterType]] = [ private static let ignoredA11yIdentifiers: [String: [FilterType]] = [
@@ -116,7 +108,11 @@ final class AccessibilityTests: XCTestCase {
/// Use this array to filter add specific filters to ignore specific tests /// Use this array to filter add specific filters to ignore specific tests
private static let ignoredA11yTest: [String: [FilterType]] = [ private static let ignoredA11yTest: [String: [FilterType]] = [
// It's an image rendering test doesn't need to have descriptions // It's an image rendering test doesn't need to have descriptions
"RoomAvatarImage_Previews-0": [.auditType(.sufficientElementDescription)] "RoomAvatarImage_Previews-0": [.auditType(.sufficientElementDescription)],
// Empty container slots of the principal search toolbar, system chrome with nothing to describe
"SearchScreen_Previews-Empty": [.emptyContainerDescription],
"SearchScreen_Previews-No results": [.emptyContainerDescription],
"SearchScreen_Previews-Loaded": [.emptyContainerDescription]
] ]
} }
@@ -125,6 +121,8 @@ private enum FilterType {
case compactDescription(String) case compactDescription(String)
/// Filter by the type of the issue /// Filter by the type of the issue
case auditType(XCUIAccessibilityAuditType) case auditType(XCUIAccessibilityAuditType)
/// Filter "no description" issues on empty container elements (label + identifier empty), e.g. system toolbar slots
case emptyContainerDescription
} }
private extension Array where Element == FilterType { private extension Array where Element == FilterType {
@@ -136,6 +134,14 @@ private extension Array where Element == FilterType {
return true return true
case .compactDescription(issue.compactDescription): case .compactDescription(issue.compactDescription):
return true return true
case .emptyContainerDescription:
if issue.auditType == .sufficientElementDescription,
let element = issue.element,
element.elementType == .other,
element.label.isEmpty,
element.identifier.isEmpty {
return true
}
default: default:
break break
} }
@@ -7,8 +7,8 @@
extension AccessibilityTests { extension AccessibilityTests {
func testActiveCallTimelineItemView() async throws { func testAdvancedSettingsScreen() async throws {
try await performAccessibilityAudit(named: "ActiveCallTimelineItemView_Previews") try await performAccessibilityAudit(named: "AdvancedSettingsScreen_Previews")
} }
func testAnalyticsPromptScreen() async throws { func testAnalyticsPromptScreen() async throws {
@@ -55,10 +55,6 @@ extension AccessibilityTests {
try await performAccessibilityAudit(named: "AvatarHeaderView_Previews") try await performAccessibilityAudit(named: "AvatarHeaderView_Previews")
} }
func testAvatarSettingsButton() async throws {
try await performAccessibilityAudit(named: "AvatarSettingsButton_Previews")
}
func testBadgeLabel() async throws { func testBadgeLabel() async throws {
try await performAccessibilityAudit(named: "BadgeLabel_Previews") try await performAccessibilityAudit(named: "BadgeLabel_Previews")
} }
@@ -187,30 +183,6 @@ extension AccessibilityTests {
try await performAccessibilityAudit(named: "FullscreenDialog_Previews") try await performAccessibilityAudit(named: "FullscreenDialog_Previews")
} }
func testGalleryRoomTimelineView() async throws {
try await performAccessibilityAudit(named: "GalleryRoomTimelineView_Previews")
}
func testHealthChatAccountStatusSection() async throws {
try await performAccessibilityAudit(named: "HealthChatAccountStatusSection_Previews")
}
func testHealthChatExtendedProfileSection() async throws {
try await performAccessibilityAudit(named: "HealthChatExtendedProfileSection_Previews")
}
func testHealthChatInviteMemberScreen() async throws {
try await performAccessibilityAudit(named: "HealthChatInviteMemberScreen_Previews")
}
func testHealthChatMemberDirectoryScreen() async throws {
try await performAccessibilityAudit(named: "HealthChatMemberDirectoryScreen_Previews")
}
func testHealthChatProfileEditScreen() async throws {
try await performAccessibilityAudit(named: "HealthChatProfileEditScreen_Previews")
}
func testHighlightedTimelineItemModifier() async throws { func testHighlightedTimelineItemModifier() async throws {
try await performAccessibilityAudit(named: "HighlightedTimelineItemModifier_Previews") try await performAccessibilityAudit(named: "HighlightedTimelineItemModifier_Previews")
} }
@@ -355,10 +327,6 @@ extension AccessibilityTests {
try await performAccessibilityAudit(named: "LocationSharingScreen_Previews") try await performAccessibilityAudit(named: "LocationSharingScreen_Previews")
} }
func testLocationSharingSettingsScreen() async throws {
try await performAccessibilityAudit(named: "LocationSharingSettingsScreen_Previews")
}
func testLoginScreen() async throws { func testLoginScreen() async throws {
try await performAccessibilityAudit(named: "LoginScreen_Previews") try await performAccessibilityAudit(named: "LoginScreen_Previews")
} }
@@ -391,10 +359,6 @@ extension AccessibilityTests {
try await performAccessibilityAudit(named: "MediaUploadPreviewScreen_Previews") try await performAccessibilityAudit(named: "MediaUploadPreviewScreen_Previews")
} }
func testMediaUploadQualitySettingsScreen() async throws {
try await performAccessibilityAudit(named: "MediaUploadQualitySettingsScreen_Previews")
}
func testMentionSuggestionItemView() async throws { func testMentionSuggestionItemView() async throws {
try await performAccessibilityAudit(named: "MentionSuggestionItemView_Previews") try await performAccessibilityAudit(named: "MentionSuggestionItemView_Previews")
} }
@@ -415,22 +379,10 @@ extension AccessibilityTests {
try await performAccessibilityAudit(named: "MessageText_Previews") try await performAccessibilityAudit(named: "MessageText_Previews")
} }
func testModerationAndSafetySettingsScreen() async throws {
try await performAccessibilityAudit(named: "ModerationAndSafetySettingsScreen_Previews")
}
func testMultiAccountAnnouncementView() async throws {
try await performAccessibilityAudit(named: "MultiAccountAnnouncementView_Previews")
}
func testNoticeRoomTimelineView() async throws { func testNoticeRoomTimelineView() async throws {
try await performAccessibilityAudit(named: "NoticeRoomTimelineView_Previews") try await performAccessibilityAudit(named: "NoticeRoomTimelineView_Previews")
} }
func testNotificationCountBadge() async throws {
try await performAccessibilityAudit(named: "NotificationCountBadge_Previews")
}
func testNotificationPermissionsScreen() async throws { func testNotificationPermissionsScreen() async throws {
try await performAccessibilityAudit(named: "NotificationPermissionsScreen_Previews") try await performAccessibilityAudit(named: "NotificationPermissionsScreen_Previews")
} }
@@ -527,10 +479,6 @@ extension AccessibilityTests {
try await performAccessibilityAudit(named: "ReadReceiptsSummaryView_Previews") try await performAccessibilityAudit(named: "ReadReceiptsSummaryView_Previews")
} }
func testRedactConfirmationView() async throws {
try await performAccessibilityAudit(named: "RedactConfirmationView_Previews")
}
func testRedactedRoomTimelineView() async throws { func testRedactedRoomTimelineView() async throws {
try await performAccessibilityAudit(named: "RedactedRoomTimelineView_Previews") try await performAccessibilityAudit(named: "RedactedRoomTimelineView_Previews")
} }
@@ -699,6 +647,10 @@ extension AccessibilityTests {
try await performAccessibilityAudit(named: "SeparatorRoomTimelineView_Previews") try await performAccessibilityAudit(named: "SeparatorRoomTimelineView_Previews")
} }
func testServerConfirmationScreen() async throws {
try await performAccessibilityAudit(named: "ServerConfirmationScreen_Previews")
}
func testServerSelection() async throws { func testServerSelection() async throws {
try await performAccessibilityAudit(named: "ServerSelection_Previews") try await performAccessibilityAudit(named: "ServerSelection_Previews")
} }
@@ -711,14 +663,6 @@ extension AccessibilityTests {
try await performAccessibilityAudit(named: "SessionVerification_Previews") try await performAccessibilityAudit(named: "SessionVerification_Previews")
} }
func testSettingsScreenUserStatusPickerView() async throws {
try await performAccessibilityAudit(named: "SettingsScreenUserStatusPickerView_Previews")
}
func testSettingsScreenUserStatusRow() async throws {
try await performAccessibilityAudit(named: "SettingsScreenUserStatusRow_Previews")
}
func testSettingsScreen() async throws { func testSettingsScreen() async throws {
try await performAccessibilityAudit(named: "SettingsScreen_Previews") try await performAccessibilityAudit(named: "SettingsScreen_Previews")
} }
@@ -795,6 +739,10 @@ extension AccessibilityTests {
try await performAccessibilityAudit(named: "SwipeRightAction_Previews") try await performAccessibilityAudit(named: "SwipeRightAction_Previews")
} }
func testSwipeToReplyView() async throws {
try await performAccessibilityAudit(named: "SwipeToReplyView_Previews")
}
func testTextRoomTimelineView() async throws { func testTextRoomTimelineView() async throws {
try await performAccessibilityAudit(named: "TextRoomTimelineView_Previews") try await performAccessibilityAudit(named: "TextRoomTimelineView_Previews")
} }
@@ -839,10 +787,6 @@ extension AccessibilityTests {
try await performAccessibilityAudit(named: "TimelineMediaPreviewRedactConfirmationView_Previews") try await performAccessibilityAudit(named: "TimelineMediaPreviewRedactConfirmationView_Previews")
} }
func testTimelineMessageSelectionActionBar() async throws {
try await performAccessibilityAudit(named: "TimelineMessageSelectionActionBar_Previews")
}
func testTimelineReactionView() async throws { func testTimelineReactionView() async throws {
try await performAccessibilityAudit(named: "TimelineReactionView_Previews") try await performAccessibilityAudit(named: "TimelineReactionView_Previews")
} }
@@ -9,6 +9,9 @@
} }
], ],
"defaultOptions" : { "defaultOptions" : {
"addressSanitizer" : {
"enabled" : true
},
"codeCoverage" : { "codeCoverage" : {
"targets" : [ "targets" : [
{ {
@@ -18,7 +21,7 @@
} }
] ]
}, },
"defaultTestExecutionTimeAllowance" : 240, "defaultTestExecutionTimeAllowance" : 120,
"environmentVariableEntries" : [ "environmentVariableEntries" : [
], ],
@@ -33,7 +36,8 @@
"identifier" : "C0C687DE1D270F9895FEE186", "identifier" : "C0C687DE1D270F9895FEE186",
"name" : "AccessibilityTests" "name" : "AccessibilityTests"
}, },
"testTimeoutsEnabled" : true "testTimeoutsEnabled" : true,
"undefinedBehaviorSanitizerEnabled" : true
}, },
"testTargets" : [ "testTargets" : [
{ {
@@ -36,7 +36,7 @@ targets:
base: base:
PRODUCT_NAME: AccessibilityTests PRODUCT_NAME: AccessibilityTests
PRODUCT_BUNDLE_IDENTIFIER: ${BASE_BUNDLE_IDENTIFIER}.accessibility.tests PRODUCT_BUNDLE_IDENTIFIER: ${BASE_BUNDLE_IDENTIFIER}.accessibility.tests
SWIFT_VERSION: 6 SWIFT_VERSION: 6.2
SWIFT_APPROACHABLE_CONCURRENCY: YES SWIFT_APPROACHABLE_CONCURRENCY: YES
configs: configs:
# This is required to remove the $(inherited) flags # This is required to remove the $(inherited) flags
@@ -6,8 +6,8 @@
"kind" : "remoteSourceControl", "kind" : "remoteSourceControl",
"location" : "https://github.com/swiftlang/swift-syntax", "location" : "https://github.com/swiftlang/swift-syntax",
"state" : { "state" : {
"revision" : "050f1a346fbbac0ca2cfb15a95274f7bd1cf0ccf", "revision" : "79e4b74a295b6eb74a8b585e3a39d29e70c1dbd1",
"version" : "604.0.0" "version" : "603.0.2"
} }
} }
], ],
@@ -5,15 +5,12 @@ import PackageDescription
let package = Package( let package = Package(
name: "BuildExtensions", name: "BuildExtensions",
platforms: [ platforms: [.macOS(.v15)],
.macOS(.v15),
.iOS(.v18) // Only necessary for Previews
],
products: [ products: [
.library(name: "Macros", targets: ["Macros"]) .library(name: "Macros", targets: ["Macros"])
], ],
dependencies: [ dependencies: [
.package(url: "https://github.com/swiftlang/swift-syntax", from: "604.0.0") .package(url: "https://github.com/swiftlang/swift-syntax", from: "603.0.2")
], ],
targets: [ targets: [
// The public macro declarations imported by the app. // The public macro declarations imported by the app.
@@ -16,7 +16,7 @@
/// persisted under a legacy key). /// persisted under a legacy key).
/// ///
/// A `reset<Name>()` method is also generated, which clears the stored value so it reverts to the /// A `reset<Name>()` method is also generated, which clears the stored value so it reverts to the
/// default. Non-volatile preferences also get a `<name>Key` property exposing the storage key. /// default.
@attached(accessor) @attached(accessor)
@attached(peer, names: arbitrary) @attached(peer, names: arbitrary)
public macro UserPreference<Value>(key: String? = nil, defaultValue: Value, volatile: Bool = false) = public macro UserPreference<Value>(key: String? = nil, defaultValue: Value, volatile: Bool = false) =
@@ -27,13 +27,3 @@ public macro UserPreference<Value>(key: String? = nil, defaultValue: Value, vola
@attached(peer, names: arbitrary) @attached(peer, names: arbitrary)
public macro UserPreference(key: String? = nil, volatile: Bool = false) = public macro UserPreference(key: String? = nil, volatile: Bool = false) =
#externalMacro(module: "MacrosImplementation", type: "UserPreferenceMacro") #externalMacro(module: "MacrosImplementation", type: "UserPreferenceMacro")
/// The storage key of a `@UserPreference`, distinct from `String` so that only a generated
/// `<name>Key` property can be passed where a preference key is expected.
public struct UserPreferenceKey: Sendable {
public let rawValue: String
public init(_ rawValue: String) {
self.rawValue = rawValue
}
}
@@ -10,5 +10,5 @@ import SwiftSyntaxMacros
@main @main
struct BuildExtensionsPlugin: CompilerPlugin { struct BuildExtensionsPlugin: CompilerPlugin {
let providingMacros: [Macro.Type] = [UserPreferenceMacro.self, AppHookMacro.self] let providingMacros: [Macro.Type] = [UserPreferenceMacro.self]
} }
@@ -14,7 +14,7 @@ import SwiftSyntaxMacros
/// ///
/// A `volatile` preference instead reads and writes through a generated in-memory store, so its /// A `volatile` preference instead reads and writes through a generated in-memory store, so its
/// value is never persisted and resets on each launch. /// value is never persisted and resets on each launch.
enum UserPreferenceMacro { public enum UserPreferenceMacro {
enum DiagnosticError: Error, CustomStringConvertible { enum DiagnosticError: Error, CustomStringConvertible {
case notAStoredProperty case notAStoredProperty
case missingTypeAnnotation case missingTypeAnnotation
@@ -45,10 +45,6 @@ enum UserPreferenceMacro {
"_\(raw: name)VolatileValue" "_\(raw: name)VolatileValue"
} }
var keyPropertyName: TokenSyntax {
"\(raw: name)Key"
}
var resetMethodName: TokenSyntax { var resetMethodName: TokenSyntax {
"reset\(raw: name.prefix(1).uppercased() + name.dropFirst())" "reset\(raw: name.prefix(1).uppercased() + name.dropFirst())"
} }
@@ -89,7 +85,7 @@ enum UserPreferenceMacro {
} }
extension UserPreferenceMacro: AccessorMacro { extension UserPreferenceMacro: AccessorMacro {
static func expansion(of node: AttributeSyntax, public static func expansion(of node: AttributeSyntax,
providingAccessorsOf declaration: some DeclSyntaxProtocol, providingAccessorsOf declaration: some DeclSyntaxProtocol,
in context: some MacroExpansionContext) throws -> [AccessorDeclSyntax] { in context: some MacroExpansionContext) throws -> [AccessorDeclSyntax] {
let preference = try preference(for: declaration, node: node) let preference = try preference(for: declaration, node: node)
@@ -141,7 +137,7 @@ extension UserPreferenceMacro: AccessorMacro {
} }
extension UserPreferenceMacro: PeerMacro { extension UserPreferenceMacro: PeerMacro {
static func expansion(of node: AttributeSyntax, public static func expansion(of node: AttributeSyntax,
providingPeersOf declaration: some DeclSyntaxProtocol, providingPeersOf declaration: some DeclSyntaxProtocol,
in context: some MacroExpansionContext) throws -> [DeclSyntax] { in context: some MacroExpansionContext) throws -> [DeclSyntax] {
let preference = try preference(for: declaration, node: node) let preference = try preference(for: declaration, node: node)
@@ -161,14 +157,6 @@ extension UserPreferenceMacro: PeerMacro {
} }
""") """)
if !preference.isVolatile {
peers.append("""
var \(preference.keyPropertyName): UserPreferenceKey {
.init(\(preference.key))
}
""")
}
peers.append(resetMethod(for: preference)) peers.append(resetMethod(for: preference))
return peers return peers
@@ -5,7 +5,7 @@
// Please see LICENSE files in the repository root for full details. // Please see LICENSE files in the repository root for full details.
// //
@testable import MacrosImplementation import MacrosImplementation
import SwiftSyntaxMacrosTestSupport import SwiftSyntaxMacrosTestSupport
import XCTest import XCTest
@@ -35,10 +35,6 @@ final class UserPreferenceMacroTests: XCTestCase {
_hasSeenNewSoundBannerSubject.prepend(hasSeenNewSoundBanner).eraseToAnyPublisher() _hasSeenNewSoundBannerSubject.prepend(hasSeenNewSoundBanner).eraseToAnyPublisher()
} }
var hasSeenNewSoundBannerKey: UserPreferenceKey {
.init("hasSeenNewSoundBanner")
}
func resetHasSeenNewSoundBanner() { func resetHasSeenNewSoundBanner() {
store.removeObject(forKey: "hasSeenNewSoundBanner") store.removeObject(forKey: "hasSeenNewSoundBanner")
} }
@@ -69,10 +65,6 @@ final class UserPreferenceMacroTests: XCTestCase {
_liveLocationSharingSessionsByRoomIDSubject.prepend(liveLocationSharingSessionsByRoomID).eraseToAnyPublisher() _liveLocationSharingSessionsByRoomIDSubject.prepend(liveLocationSharingSessionsByRoomID).eraseToAnyPublisher()
} }
var liveLocationSharingSessionsByRoomIDKey: UserPreferenceKey {
.init("liveLocationSharingTimeoutDatesByRoomID")
}
func resetLiveLocationSharingSessionsByRoomID() { func resetLiveLocationSharingSessionsByRoomID() {
store.removeObject(forKey: "liveLocationSharingTimeoutDatesByRoomID") store.removeObject(forKey: "liveLocationSharingTimeoutDatesByRoomID")
} }
@@ -103,10 +95,6 @@ final class UserPreferenceMacroTests: XCTestCase {
_pusherProfileTagSubject.prepend(pusherProfileTag).eraseToAnyPublisher() _pusherProfileTagSubject.prepend(pusherProfileTag).eraseToAnyPublisher()
} }
var pusherProfileTagKey: UserPreferenceKey {
.init("pusherProfileTag")
}
func resetPusherProfileTag() { func resetPusherProfileTag() {
store.removeObject(forKey: "pusherProfileTag") store.removeObject(forKey: "pusherProfileTag")
} }
@@ -137,10 +125,6 @@ final class UserPreferenceMacroTests: XCTestCase {
_viewSourceEnabledSubject.prepend(viewSourceEnabled).eraseToAnyPublisher() _viewSourceEnabledSubject.prepend(viewSourceEnabled).eraseToAnyPublisher()
} }
var viewSourceEnabledKey: UserPreferenceKey {
.init("viewSourceEnabled")
}
func resetViewSourceEnabled() { func resetViewSourceEnabled() {
store.removeObject(forKey: "viewSourceEnabled") store.removeObject(forKey: "viewSourceEnabled")
} }
-436
View File
@@ -1,439 +1,3 @@
## Changes in 26.09.2 (2026-09-23)
### What's Changed
🙌 Improvements
* Add an `AccountProvider` type and use it within the authentication flow. by @pixlwave in https://github.com/element-hq/element-x-ios/pull/6103
* Update the Start Chat button's icon. by @pixlwave in https://github.com/element-hq/element-x-ios/pull/6179
🐛 Bugfixes
* Update the read marker colour to match the Figma. by @pixlwave in https://github.com/element-hq/element-x-ios/pull/6146
* Fix some isolation errors when compiling with Swift 6.4. by @pixlwave in https://github.com/element-hq/element-x-ios/pull/6148
* Cancel message edit if content remains unchanged by @thepearl in https://github.com/element-hq/element-x-ios/pull/6153
* Fix HDR UI bugs on iOS 27.0. by @pixlwave in https://github.com/element-hq/element-x-ios/pull/6177
* Fix the split view layout on iOS 27. by @pixlwave in https://github.com/element-hq/element-x-ios/pull/6180
* Only make toolbar buttons prominent when tinted. by @pixlwave in https://github.com/element-hq/element-x-ios/pull/6188
🗣 Translations
* Translations update by @RiotRobot in https://github.com/element-hq/element-x-ios/pull/6151
* Translations update by @RiotRobot in https://github.com/element-hq/element-x-ios/pull/6164
🚧 In development 🚧
* Introduce a local mechanism for managing the app's badge count by @stefanceriu in https://github.com/element-hq/element-x-ios/pull/6135
* Various search tab tweaks by @stefanceriu in https://github.com/element-hq/element-x-ios/pull/6157
* Add experimental native calls behind a developer flag by @BillCarsonFr in https://github.com/element-hq/element-x-ios/pull/6159
* Bump element-call-ios to 0.1.0-rc.7 by @BillCarsonFr in https://github.com/element-hq/element-x-ios/pull/6168
* Add specific prefix for native call logs by @BillCarsonFr in https://github.com/element-hq/element-x-ios/pull/6169
* Bump element-call native to 0.1.0-rc.8 by @BillCarsonFr in https://github.com/element-hq/element-x-ios/pull/6181
Others
* Update Project Dependencies by @renovate[bot] in https://github.com/element-hq/element-x-ios/pull/6136
* Fix some SwiftLint warnings. by @pixlwave in https://github.com/element-hq/element-x-ios/pull/6149
* Update zizmorcore/zizmor-action action to v0.6.4 by @renovate[bot] in https://github.com/element-hq/element-x-ios/pull/6155
* Bump the RustSDK to v26.09.17 by @stefanceriu in https://github.com/element-hq/element-x-ios/pull/6160
* Update codecov/codecov-action action to v7.1.0 by @renovate[bot] in https://github.com/element-hq/element-x-ios/pull/6176
* Update dependency siteline/SwiftUI-Introspect to v27 by @renovate[bot] in https://github.com/element-hq/element-x-ios/pull/6175
* Drop Intel device support from the build scripts and project by @stefanceriu in https://github.com/element-hq/element-x-ios/pull/6171
* Update the SDK. by @pixlwave in https://github.com/element-hq/element-x-ios/pull/6182
**Full Changelog**: https://github.com/element-hq/element-x-ios/compare/release/26.09.1...release/26.09.2
## Changes in 26.09.1 (2026-09-10)
### What's Changed
✨ Features
* Add a developer option and selection mode for timeline messages by @Velin92 in https://github.com/element-hq/element-x-ios/pull/6102
🐛 Bugfixes
* Limit the custom status input to 30 characters. by @pixlwave in https://github.com/element-hq/element-x-ios/pull/6139
* Scope dark mode change only to the presenting sheet by @Velin92 in https://github.com/element-hq/element-x-ios/pull/6144
🚧 In development 🚧
* Show message counts on room list notification badges by @stefanceriu in https://github.com/element-hq/element-x-ios/pull/6132
Others
* Fix start chat UI test snapshots following copy changes by @stefanceriu in https://github.com/element-hq/element-x-ios/pull/6137
* Add a couple of points about code style/ordering to the AGENTS.md by @pixlwave in https://github.com/element-hq/element-x-ios/pull/6133
* Update the SDK. by @pixlwave in https://github.com/element-hq/element-x-ios/pull/6147
**Full Changelog**: https://github.com/element-hq/element-x-ios/compare/release/26.09.0...release/26.09.1
## Changes in 26.09.0 (2026-09-08)
### What's Changed
✨ Features
* Autoplay the next voice message if it is the next timeline item. by @Velin92 in https://github.com/element-hq/element-x-ios/pull/6089
* Add a Mentions room list filter by @ara4n in https://github.com/element-hq/element-x-ios/pull/5885
* Add support for `<details>` and `<summary>` tags by @stefanceriu in https://github.com/element-hq/element-x-ios/pull/6077
* Redaction reason by @Velin92 in https://github.com/element-hq/element-x-ios/pull/6098
🙌 Improvements
* Advance the join room screen if we're autojoined by the server by @ara4n in https://github.com/element-hq/element-x-ios/pull/5875
* Updates to Notification Settings by @americanrefugee in https://github.com/element-hq/element-x-ios/pull/6075
* Use server name from user id function by @Velin92 in https://github.com/element-hq/element-x-ios/pull/6082
🐛 Bugfixes
* Fix crash when activating incompatible room filters by @sergeyospanov in https://github.com/element-hq/element-x-ios/pull/6087
* hide the forward action on live location shares by @thepearl in https://github.com/element-hq/element-x-ios/pull/6091
* Fix photo picker selection tint on iOS 26 by @thepearl in https://github.com/element-hq/element-x-ios/pull/6095
* Fix the tab rail flickering on narrow iPad windows by @stefanceriu in https://github.com/element-hq/element-x-ios/pull/6107
* Minor quicklook fixes. by @pixlwave in https://github.com/element-hq/element-x-ios/pull/6112
* Use disambiguated display name for avatar change events by @Velin92 in https://github.com/element-hq/element-x-ios/pull/6131
🗣 Translations
* Translations update by @RiotRobot in https://github.com/element-hq/element-x-ios/pull/6088
* Translations update by @RiotRobot in https://github.com/element-hq/element-x-ios/pull/6111
🧱 Build
* Pin project dependencies to exact versions given we have Renovate. by @pixlwave in https://github.com/element-hq/element-x-ios/pull/6078
* Try using Danger with the Node/Docker fix? by @pixlwave in https://github.com/element-hq/element-x-ios/pull/6079
* Replace danger-swift with a actions/github-script version by @stefanceriu in https://github.com/element-hq/element-x-ios/pull/6080
* Bump the calendar version ready for the next release by @RiotRobot in https://github.com/element-hq/element-x-ios/pull/6092
Others
* Use the `ClientFactory` pattern everywhere replacing raw `ClientBuilders`. by @pixlwave in https://github.com/element-hq/element-x-ios/pull/6054
* Add tests for the UserSessionStore. by @pixlwave in https://github.com/element-hq/element-x-ios/pull/6065
* Update Project Dependencies by @renovate[bot] in https://github.com/element-hq/element-x-ios/pull/6068
* Allow copying blocked user id by @Velin92 in https://github.com/element-hq/element-x-ios/pull/6071
* Don't focus the user status text field during tests. by @pixlwave in https://github.com/element-hq/element-x-ios/pull/6076
* Limit link previews width in the timeline to 300 points. by @stefanceriu in https://github.com/element-hq/element-x-ios/pull/6069
* Fix UI test snapshots following copy changes and filter reordering by @stefanceriu in https://github.com/element-hq/element-x-ios/pull/6100
* Feature flag tweaks by @stefanceriu in https://github.com/element-hq/element-x-ios/pull/6096
* Update dependency siteline/SwiftUI-Introspect to v26.0.2 by @renovate[bot] in https://github.com/element-hq/element-x-ios/pull/6104
* Update zizmorcore/zizmor-action action to v0.6.3 by @renovate[bot] in https://github.com/element-hq/element-x-ios/pull/6109
* Bump the RustSDK to v26.09.07 by @stefanceriu in https://github.com/element-hq/element-x-ios/pull/6110
* Update the Enterprise submodule. by @pixlwave in https://github.com/element-hq/element-x-ios/pull/6114
* Update the SDK. by @pixlwave in https://github.com/element-hq/element-x-ios/pull/6134
### New Contributors
* @sergeyospanov made their first contribution in https://github.com/element-hq/element-x-ios/pull/6087
* @thepearl made their first contribution in https://github.com/element-hq/element-x-ios/pull/6091
**Full Changelog**: https://github.com/element-hq/element-x-ios/compare/release/26.08.4...release/26.09.0
## Changes in 26.08.4 (2026-08-25)
### What's Changed
✨ Features
* Enable the User Status feature on supported homeservers. by @pixlwave in https://github.com/element-hq/element-x-ios/pull/6059
🐛 Bugfixes
* Attributed string builder tweaks by @stefanceriu in https://github.com/element-hq/element-x-ios/pull/6055
🗣 Translations
* Translations update by @RiotRobot in https://github.com/element-hq/element-x-ios/pull/6058
🚧 In development 🚧
* More tweaks for User Status. by @pixlwave in https://github.com/element-hq/element-x-ios/pull/6051
Others
* Various tweaks and fixes by @stefanceriu in https://github.com/element-hq/element-x-ios/pull/6045
* Update dependency element-hq/compound-design-tokens to v10.2.4 by @renovate[bot] in https://github.com/element-hq/element-x-ios/pull/6048
* Update the Enterprise submodule by @pixlwave in https://github.com/element-hq/element-x-ios/pull/6053
* Fix missing back pagination attempt by @stefanceriu in https://github.com/element-hq/element-x-ios/pull/6056
* Stop the integration tests from backgrounding the web authentication session by @stefanceriu in https://github.com/element-hq/element-x-ios/pull/6060
* Preserve the blank lines typed after a list by @stefanceriu in https://github.com/element-hq/element-x-ios/pull/6061
* Update the Enterprise submodule. by @pixlwave in https://github.com/element-hq/element-x-ios/pull/6063
* Fixed one accessibility test and an UI test snapshot by @stefanceriu in https://github.com/element-hq/element-x-ios/pull/6064
* Update sdk to 26.08.25 by @Velin92 in https://github.com/element-hq/element-x-ios/pull/6067
**Full Changelog**: https://github.com/element-hq/element-x-ios/compare/release/26.08.3...release/26.08.4
## Changes in 26.08.3 (2026-08-20)
### What's Changed
✨ Features
* Load MapLibre lazily instead of at every app launch by @stefanceriu in https://github.com/element-hq/element-x-ios/pull/6012
🙌 Improvements
* Offer Retry and Remove actions with a reason when tapping a failed message by @ara4n in https://github.com/element-hq/element-x-ios/pull/5988
* Update the toolbars in the Chats/Spaces screens. by @pixlwave in https://github.com/element-hq/element-x-ios/pull/6043
🐛 Bugfixes
* Avoid race conditions between the home screen's crash alert and Sentry's `onLastRunStatusDetermined` by @stefanceriu in https://github.com/element-hq/element-x-ios/pull/6017
* Prevent invalid composer mode crashes by @stefanceriu in https://github.com/element-hq/element-x-ios/pull/6018
* Delay secondary room summary provider setup by @stefanceriu in https://github.com/element-hq/element-x-ios/pull/6038
🗣 Translations
* Translations update by @RiotRobot in https://github.com/element-hq/element-x-ios/pull/6036
🧱 Build
* Re-run XcodeGen. by @RiotRobot in https://github.com/element-hq/element-x-ios/pull/6040
🚧 In development 🚧
* Update the SDK fixing some user status bugs. by @pixlwave in https://github.com/element-hq/element-x-ios/pull/6037
* Fix the emoji picker's title when setting a custom status. by @pixlwave in https://github.com/element-hq/element-x-ios/pull/6039
Others
* Update Project Dependencies by @renovate[bot] in https://github.com/element-hq/element-x-ios/pull/6011
* Move various top level folder to the `Components` one by @stefanceriu in https://github.com/element-hq/element-x-ios/pull/6014
* Update dependency PostHog to v3.69.1 by @renovate[bot] in https://github.com/element-hq/element-x-ios/pull/6013
* Avoid re-applying identical room list filters by @stefanceriu in https://github.com/element-hq/element-x-ios/pull/6016
* Detach the Client's `cacheAccountURL` call by @stefanceriu in https://github.com/element-hq/element-x-ios/pull/6019
* Update the Enterprise submodule. by @pixlwave in https://github.com/element-hq/element-x-ios/pull/6023
* Fix the flaky ElementCallServiceTests by replacing TestClock by @stefanceriu in https://github.com/element-hq/element-x-ios/pull/6022
* Implement TimelineItemProvider diff `truncate` mechanism by @stefanceriu in https://github.com/element-hq/element-x-ios/pull/6029
* Update the SDK. by @pixlwave in https://github.com/element-hq/element-x-ios/pull/6030
* Attempt another kind of fix for the encryption settings UI test by @stefanceriu in https://github.com/element-hq/element-x-ios/pull/6035
* Fail fast on the integration tests when encountering the first failed assert by @stefanceriu in https://github.com/element-hq/element-x-ios/pull/6041
* Various unit test improvements by @stefanceriu in https://github.com/element-hq/element-x-ios/pull/6042
* Update the Enterprise submodule. by @pixlwave in https://github.com/element-hq/element-x-ios/pull/6049
**Full Changelog**: https://github.com/element-hq/element-x-ios/compare/release/26.08.2...release/26.08.3
## Changes in 26.08.2 (2026-08-11)
### What's Changed
✨ Features
* Allow tapping the avatar in the room member bottom sheet to view it fullscreen by @danderson-cont in https://github.com/element-hq/element-x-ios/pull/5989
🙌 Improvements
* Remove map tiler url from matrix wellknown by @Velin92 in https://github.com/element-hq/element-x-ios/pull/5983
* Combine the Server Selection screen into the Server Confirmation screen and add autocompletion when entering an account provider. by @mredig in https://github.com/element-hq/element-x-ios/pull/5949
🐛 Bugfixes
* Fix broken avatar aspect ratio in the share sheet and notifications by @ara4n in https://github.com/element-hq/element-x-ios/pull/5972
* Fix Pro Max In Call Rotation Bug by @mredig in https://github.com/element-hq/element-x-ios/pull/5990
* Update the SDK with a fix for read receipts. by @pixlwave in https://github.com/element-hq/element-x-ios/pull/5991
* Fix tracing span panic when accessed from multiple threads by @stefanceriu in https://github.com/element-hq/element-x-ios/pull/5996
* Make sure the Tab Rail's background matches the split view's detail background. by @pixlwave in https://github.com/element-hq/element-x-ios/pull/6003
* Fix a simulcast bug in Element Call. by @pixlwave in https://github.com/element-hq/element-x-ios/pull/6009
🗣 Translations
* Translations update by @RiotRobot in https://github.com/element-hq/element-x-ios/pull/5999
🧱 Build
* Add an HTTP_PROXY environment variable too (also disabled). by @pixlwave in https://github.com/element-hq/element-x-ios/pull/5984
* Annotate failures for Github Actions so they're easier to spot. by @stefanceriu in https://github.com/element-hq/element-x-ios/pull/6004
* Run XcodeGen by @RiotRobot in https://github.com/element-hq/element-x-ios/pull/6006
* Drop the `addressSanitizer` and `undefinedBehaviorSanitizer` from the Accessibility and UI tests by @stefanceriu in https://github.com/element-hq/element-x-ios/pull/6008
* Reinforce text typing within XCUITests by @stefanceriu in https://github.com/element-hq/element-x-ios/pull/6007
🚧 In development 🚧
* Add timeouts after verifying the device owner when linking a new device. by @pixlwave in https://github.com/element-hq/element-x-ios/pull/5970
* Show loading/failure states when setting/clearing user status. by @pixlwave in https://github.com/element-hq/element-x-ios/pull/5993
* Enable automatic call status under the User Status feature flag. by @pixlwave in https://github.com/element-hq/element-x-ios/pull/5994
Others
* Update dependency pointfreeco/swift-snapshot-testing to v1.19.4 by @renovate[bot] in https://github.com/element-hq/element-x-ios/pull/5981
* Add hooks for the RoomDetails, RoomMemberDetails and UserProfile screens. by @pixlwave in https://github.com/element-hq/element-x-ios/pull/5980
* Improve the room member part of the UI test user session flows by @stefanceriu in https://github.com/element-hq/element-x-ios/pull/5985
* Update the SDK and handle some API breaks. by @pixlwave in https://github.com/element-hq/element-x-ios/pull/5986
* Update Contributing.md with snapshot testing instructions by @mredig in https://github.com/element-hq/element-x-ios/pull/5974
* Update zizmorcore/zizmor-action action to v0.6.2 by @renovate[bot] in https://github.com/element-hq/element-x-ios/pull/5998
* Set the finalised OAuth Client URI path to match the new EXI page. by @pixlwave in https://github.com/element-hq/element-x-ios/pull/5992
* Improve integration test diagnostics in an attempt to catch run crashes by @stefanceriu in https://github.com/element-hq/element-x-ios/pull/6000
* Prevent invalid snapshots on timeline replies by waiting for the keyboard to appear for longer by @stefanceriu in https://github.com/element-hq/element-x-ios/pull/6001
* Update the SDK. by @pixlwave in https://github.com/element-hq/element-x-ios/pull/6010
**Full Changelog**: https://github.com/element-hq/element-x-ios/compare/release/26.08.1...release/26.08.2
## Changes in 26.08.1 (2026-08-04)
### What's Changed
✨ Features
* Render replies to gallery items by @Velin92 in https://github.com/element-hq/element-x-ios/pull/5942
* Render gallery items in the media browser/gallery by @Velin92 in https://github.com/element-hq/element-x-ios/pull/5955
🙌 Improvements
* Allow previews in the timeline to include filtered galleries by @Velin92 in https://github.com/element-hq/element-x-ios/pull/5943
* Set gallery sending limit to 60 when the gallery ff is on by @Velin92 in https://github.com/element-hq/element-x-ios/pull/5960
* Add a custom TabRail on iPad instead of the top tab bar. by @pixlwave in https://github.com/element-hq/element-x-ios/pull/5964
* Small gallery tweaks by @Velin92 in https://github.com/element-hq/element-x-ios/pull/5957
* Add call icon next to members in call by @nankeen by @pixlwave in https://github.com/element-hq/element-x-ios/pull/5968
🐛 Bugfixes
* Fix rageshake upload progress bar by @danderson-cont in https://github.com/element-hq/element-x-ios/pull/5950
* Fix for pagination getting stuck loading when swiping media previews in the timeline by @Velin92 in https://github.com/element-hq/element-x-ios/pull/5963
* Manually publish room list range updates when the content isn't scrollable by @stefanceriu in https://github.com/element-hq/element-x-ios/pull/5956
🗣 Translations
* Translations update by @RiotRobot in https://github.com/element-hq/element-x-ios/pull/5965
🦻 Accessibility
* A11y for Galleries by @Velin92 in https://github.com/element-hq/element-x-ios/pull/5969
🚧 In development 🚧
* Fix a couple of missing `UserStatus` values. by @pixlwave in https://github.com/element-hq/element-x-ios/pull/5944
* Allow clearing your own call status. by @pixlwave in https://github.com/element-hq/element-x-ios/pull/5959
Others
* Fix for some flaky tests part 2 by @Velin92 in https://github.com/element-hq/element-x-ios/pull/5939
* Update the Enterprise submodule. by @pixlwave in https://github.com/element-hq/element-x-ios/pull/5953
* Update zizmorcore/zizmor-action action to v0.6.1 by @renovate[bot] in https://github.com/element-hq/element-x-ios/pull/5961
* Update Project Dependencies by @renovate[bot] in https://github.com/element-hq/element-x-ios/pull/5940
* Update actions/stale action to v11 by @renovate[bot] in https://github.com/element-hq/element-x-ios/pull/5971
* Accessibility tests fixes by @stefanceriu in https://github.com/element-hq/element-x-ios/pull/5976
* Disable the store pausing feature as we encountered cases in which it doesn't work properly by @stefanceriu in https://github.com/element-hq/element-x-ios/pull/5977
* Fix various UI test snapshots by @stefanceriu in https://github.com/element-hq/element-x-ios/pull/5975
* Tweak the stalebot configuration by @stefanceriu in https://github.com/element-hq/element-x-ios/pull/5978
**Full Changelog**: https://github.com/element-hq/element-x-ios/compare/release/26.08.0...release/26.08.1
## Changes in 26.08.0 (2026-07-28)
### What's Changed
✨ Features
* Add support for active call item rendering in timeline by @BillCarsonFr in https://github.com/element-hq/element-x-ios/pull/5775
* Add content scanner to the NSE Client by @Velin92 in https://github.com/element-hq/element-x-ios/pull/5926
* Render image and video in galleries as a grid by @Velin92 in https://github.com/element-hq/element-x-ios/pull/5929
* Render galleries with non-visual attachments as a list by @Velin92 in https://github.com/element-hq/element-x-ios/pull/5932
* Open a full-screen preview when tapping a gallery item by @Velin92 in https://github.com/element-hq/element-x-ios/pull/5936
🙌 Improvements
* Report user presence on app lifecycle transitions by @lhjt in https://github.com/element-hq/element-x-ios/pull/5838
* Content scanner also checks for thumbnails by @Velin92 in https://github.com/element-hq/element-x-ios/pull/5911
* Remove the requiresExtraAccountSetup badge. by @pixlwave in https://github.com/element-hq/element-x-ios/pull/5921
* Implements push notifications for LLS via MSC4505 by @ara4n in https://github.com/element-hq/element-x-ios/pull/5872
🐛 Bugfixes
* Enable client pausing and resuming for all builds by @stefanceriu in https://github.com/element-hq/element-x-ios/pull/5904
🗣 Translations
* Translations update by @RiotRobot in https://github.com/element-hq/element-x-ios/pull/5901
* Translations update by @RiotRobot in https://github.com/element-hq/element-x-ios/pull/5931
🧱 Build
* Re-run xcodegen. by @RiotRobot in https://github.com/element-hq/element-x-ios/pull/5907
* Bump the calendar version ready for the next release by @RiotRobot in https://github.com/element-hq/element-x-ios/pull/5937
📄 Documentation
* Group Element Pro changes into a dedicated release notes section by @manuroe in https://github.com/element-hq/element-x-ios/pull/5899
🚧 In development 🚧
* Add the UI for your own user status in the Settings screen. by @pixlwave in https://github.com/element-hq/element-x-ios/pull/5888
* Support sending gallery messages behind a feature flag by @Velin92 in https://github.com/element-hq/element-x-ios/pull/5909
* Update the SDK and hook up the status from Room Heroes. by @pixlwave in https://github.com/element-hq/element-x-ios/pull/5905
* Hook up the emoji picker to the custom status row. by @pixlwave in https://github.com/element-hq/element-x-ios/pull/5902
* Search tab tweaks by @stefanceriu in https://github.com/element-hq/element-x-ios/pull/5910
* Add support for showing the user's own status over their avatar on the app's Settings button. by @pixlwave in https://github.com/element-hq/element-x-ios/pull/5912
* Add a warning to the Link New Device instructions. by @pixlwave in https://github.com/element-hq/element-x-ios/pull/5916
* Add the gallery timeline item rendered as a placeholder by @Velin92 in https://github.com/element-hq/element-x-ios/pull/5928
* Gate user status behind server support as well as the feature flag. by @pixlwave in https://github.com/element-hq/element-x-ios/pull/5920
Others
* Update dependency pointfreeco/swift-snapshot-testing to v1.19.3 by @renovate[bot] in https://github.com/element-hq/element-x-ios/pull/5892
* Update enterprise by @Velin92 in https://github.com/element-hq/element-x-ios/pull/5894
* Update dependency Sentry to v9.21.0 by @renovate[bot] in https://github.com/element-hq/element-x-ios/pull/5891
* Update actions/stale action to v10.4.0 by @renovate[bot] in https://github.com/element-hq/element-x-ios/pull/5898
* Several small, independent accessibility fixes (VoiceOver labels/traits, contrast) by @unclejay80 in https://github.com/element-hq/element-x-ios/pull/5890
* Periphery cleanup by @Velin92 in https://github.com/element-hq/element-x-ios/pull/5893
* Various project warning fixes by @stefanceriu in https://github.com/element-hq/element-x-ios/pull/5908
* Add signed in flag to the developer options screen hook by @Velin92 in https://github.com/element-hq/element-x-ios/pull/5914
* Update zizmorcore/zizmor-action action to v0.6.0 by @renovate[bot] in https://github.com/element-hq/element-x-ios/pull/5917
* Update SDK to 26.07.22 by @Velin92 in https://github.com/element-hq/element-x-ios/pull/5919
* Small tweaks to the Presence feature. by @pixlwave in https://github.com/element-hq/element-x-ios/pull/5918
* Fix call timeline item snapshots. by @pixlwave in https://github.com/element-hq/element-x-ios/pull/5923
* Bump the RustSDK to v26.07.23 by @stefanceriu in https://github.com/element-hq/element-x-ios/pull/5925
* Update actions/checkout action to v7.0.1 by @renovate[bot] in https://github.com/element-hq/element-x-ios/pull/5935
* Add an `oAuthClientURIPath` option to AppSettings. by @pixlwave in https://github.com/element-hq/element-x-ios/pull/5934
* update sdk to 26-7-28 by @Velin92 in https://github.com/element-hq/element-x-ios/pull/5938
### New Contributors
* @unclejay80 made their first contribution in https://github.com/element-hq/element-x-ios/pull/5890
* @lhjt made their first contribution in https://github.com/element-hq/element-x-ios/pull/5838
**Full Changelog**: https://github.com/element-hq/element-x-ios/compare/release/26.07.4...release/26.08.0
## Changes in 26.07.4 (2026-07-15)
### What's Changed
✨ Features
* Force Disable E2EE for Element Pro by @Velin92 in https://github.com/element-hq/element-x-ios/pull/5866
🙌 Improvements
* Use dark theme for Element Call by @toger5 in https://github.com/element-hq/element-x-ios/pull/5860
🐛 Bugfixes
* Fix for NSE and ShareExtension individual builds by @mredig in https://github.com/element-hq/element-x-ios/pull/5856
* Fix CurrentValuePublisher.map dropping updates when the mapped publisher is chained inline by @ara4n in https://github.com/element-hq/element-x-ios/pull/5870
* Fix a bug where rooms couldn't be opened when returning to the foreground whilst offline. by @pixlwave in https://github.com/element-hq/element-x-ios/pull/5867
🗣 Translations
* Translations update by @RiotRobot in https://github.com/element-hq/element-x-ios/pull/5865
🧱 Build
* Fix UI tests by @pixlwave in https://github.com/element-hq/element-x-ios/pull/5862
* Add CurrentValuePublisherTests to the UnitTests target by @ara4n in https://github.com/element-hq/element-x-ios/pull/5884
🚧 In development 🚧
* Display other users' User Status. by @pixlwave in https://github.com/element-hq/element-x-ios/pull/5859
Others
* Update the SDK and Compound tokens. by @pixlwave in https://github.com/element-hq/element-x-ios/pull/5857
* Use deferFulfillment in flow coordinator tests by @Velin92 in https://github.com/element-hq/element-x-ios/pull/5861
* Update the SDK and handle API breaks. by @pixlwave in https://github.com/element-hq/element-x-ios/pull/5871
* Fix for flaky tests by @Velin92 in https://github.com/element-hq/element-x-ios/pull/5869
* Constrained tests tool implementation + skill by @Velin92 in https://github.com/element-hq/element-x-ios/pull/5873
* Update dependency Mantis to v3 by @renovate[bot] in https://github.com/element-hq/element-x-ios/pull/5887
* Update Project Dependencies by @renovate[bot] in https://github.com/element-hq/element-x-ios/pull/5886
* Update the SDK. by @pixlwave in https://github.com/element-hq/element-x-ios/pull/5889
**Full Changelog**: https://github.com/element-hq/element-x-ios/compare/release/26.07.3...release/26.07.4
## Changes in 26.07.3 (2026-07-09)
### What's Changed
✨ Features
* Content Scanning View by @Velin92 in https://github.com/element-hq/element-x-ios/pull/5831
* Content scanning view for reply preview by @Velin92 in https://github.com/element-hq/element-x-ios/pull/5842
* Scanning states for the media events timeline screen by @Velin92 in https://github.com/element-hq/element-x-ios/pull/5847
* Media Preview content scanning by @Velin92 in https://github.com/element-hq/element-x-ios/pull/5851
🙌 Improvements
* Don't keep re-prompting the user to migrate if they get spontaneously logged out. by @ara4n in https://github.com/element-hq/element-x-ios/pull/5844
* New location request permission strings by @Velin92 in https://github.com/element-hq/element-x-ios/pull/5854
🐛 Bugfixes
* Fix voice message recording crashes caused by an isolation assertion failure by @stefanceriu in https://github.com/element-hq/element-x-ios/pull/5820
* Stop reserving space for the non-existant icon background in ListRowLabel on iOS 26. by @pixlwave in https://github.com/element-hq/element-x-ios/pull/5822
* Fix for the media browser showing also images and videos in file mode by @Velin92 in https://github.com/element-hq/element-x-ios/pull/5853
🗣 Translations
* Translations update by @RiotRobot in https://github.com/element-hq/element-x-ios/pull/5845
🦻 Accessibility
* Fix AccessibilityTests hang on previews expecting expired transient state by @stefanceriu in https://github.com/element-hq/element-x-ios/pull/5821
* Remove the "unflip" of the timeline when in voice over mode by @Velin92 in https://github.com/element-hq/element-x-ios/pull/5835
🧱 Build
* Remove Hyperion from the Compound Inspector app. by @pixlwave in https://github.com/element-hq/element-x-ios/pull/5828
* Switch back to using the stable version of SwiftFormat. by @pixlwave in https://github.com/element-hq/element-x-ios/pull/5850
* Introduce a build setting to detect Nightly builds. by @pixlwave in https://github.com/element-hq/element-x-ios/pull/5852
🚧 In development 🚧
* Make LinkNewDeviceScreen fall back to the App Lock PIN code when there's no passcode. by @pixlwave in https://github.com/element-hq/element-x-ios/pull/5794
* Add the content scanner URL to the app settings by @Velin92 in https://github.com/element-hq/element-x-ios/pull/5823
* User Status preparation. by @pixlwave in https://github.com/element-hq/element-x-ios/pull/5825
* Content Scanner Service by @Velin92 in https://github.com/element-hq/element-x-ios/pull/5826
* Add message support to the new search tab by @stefanceriu in https://github.com/element-hq/element-x-ios/pull/5829
Others
* Bump the RustSDK to a new "apple-release" profile build distribution by @stefanceriu in https://github.com/element-hq/element-x-ios/pull/5834
* Update the readme to fix the unit tests shield and remove the SonarCloud ones by @stefanceriu in https://github.com/element-hq/element-x-ios/pull/5832
* Fix various project warnings by @stefanceriu in https://github.com/element-hq/element-x-ios/pull/5833
* Swift format enforce isEmpty rule by @Velin92 in https://github.com/element-hq/element-x-ios/pull/5843
* Update Project Dependencies by @renovate[bot] in https://github.com/element-hq/element-x-ios/pull/5818
**Full Changelog**: https://github.com/element-hq/element-x-ios/compare/release/26.07.0...release/26.07.3
## Changes in 26.07.1 (2026-07-03) ## Changes in 26.07.1 (2026-07-03)
### What's Changed ### What's Changed
+2 -10
View File
@@ -30,7 +30,7 @@ Only once all of the above is met should you open a PR with your proposed change
* Don't submit large PRs, especially if not previously talked about. Anything above 200 lines is large (excluding generated code e.g. tests, translations, mocks) * Don't submit large PRs, especially if not previously talked about. Anything above 200 lines is large (excluding generated code e.g. tests, translations, mocks)
* Please don't open unfinished PRs and expect us to fill in the details * Please don't open unfinished PRs and expect us to fill in the details
* If you would like our opinion/direction on unfinished code please link your branch or idea in the ticket * If you would like our opinion/direction on unfinished code please link your branch or idea in the ticket
* Please limit the number of commits in a single PR. We are perfectly happy with splitting work across multiple sessions as long as they're logically independent and show promise of progress (ideally expressed through a ticket) * Please limit the number of commits in a single PR. We are perfectly happy with splitting work across multiple sessions as long as they're logically independant and show promise of progress (ideally expressed through a ticket)
* Each and every commit should stand on its own, clearly explaining what it does and why * Each and every commit should stand on its own, clearly explaining what it does and why
* Once a PR goes into review please don't rewrite the history unless agreed so with the reviewer. * Once a PR goes into review please don't rewrite the history unless agreed so with the reviewer.
* Tweaks and fixes following review can be directly committed (to be interactively rebased later) or as fixups * Tweaks and fixes following review can be directly committed (to be interactively rebased later) or as fixups
@@ -95,14 +95,6 @@ git lfs install
If you make changes to the UI you may cause existing UI and Preview test snapshots to fail. The UITests run user flows and record snapshots while doing so using the settings defined under [checkEnvironments](https://github.com/element-hq/element-x-ios/blob/c29175d1f924e58b9646a200dbab0301fce3c258/UITests/Sources/Application.swift#L35-L37) while the PreviewTests use the settings defined in [PreviewTests.swift](https://github.com/element-hq/element-x-ios/blob/c29175d1f924e58b9646a200dbab0301fce3c258/PreviewTests/Sources/PreviewTests.swift#L18-L20). The snapshots are stored under `Sources/__Snapshots__` in their respective target's folder. If you make changes to the UI you may cause existing UI and Preview test snapshots to fail. The UITests run user flows and record snapshots while doing so using the settings defined under [checkEnvironments](https://github.com/element-hq/element-x-ios/blob/c29175d1f924e58b9646a200dbab0301fce3c258/UITests/Sources/Application.swift#L35-L37) while the PreviewTests use the settings defined in [PreviewTests.swift](https://github.com/element-hq/element-x-ios/blob/c29175d1f924e58b9646a200dbab0301fce3c258/PreviewTests/Sources/PreviewTests.swift#L18-L20). The snapshots are stored under `Sources/__Snapshots__` in their respective target's folder.
To run the preview tests:
1. Use an iPhone SE (3rd generation) simulator running iOS 27.0.
2. On that simulator, go to Settings -> General -> Language & Region and select United States as the region, with English (US) as the only preferred language. This is a one time setup, as long as you keep using the same simulator.
3. Select the `PreviewTests` scheme and run the tests.
Newly created screens will automatically have their screenshots added based off their `TestablePreview` Swift previews. If you are modifying an existing screen, you will first need to delete the old snapshots for that screen before running the tests. Alternatively, if you enable `RECORD_FAILURES` in the preview test plans's environment variables (`PreviewTests/SupportingFiles/Previewtests.xctestplan`), it will overwrite snapshot failures with the updated screenshot.
### Githooks ### Githooks
The project uses its own shared githooks stored in the .githooks folder, you will need to configure git to use such folder, this is already done if you have run the setup tool with `swift run tools setup-project` otherwise you would need to run: The project uses its own shared githooks stored in the .githooks folder, you will need to configure git to use such folder, this is already done if you have run the setup tool with `swift run tools setup-project` otherwise you would need to run:
@@ -150,7 +142,7 @@ Our [changelog](CHANGES.md) is automatically generated by GitHub, based on the P
For Swift coding style we use [SwiftLint](https://github.com/realm/SwiftLint) to check some conventions at compile time (rules are located in the `.swiftlint.yml` file). For Swift coding style we use [SwiftLint](https://github.com/realm/SwiftLint) to check some conventions at compile time (rules are located in the `.swiftlint.yml` file).
Otherwise please have a look to [Apple Swift conventions](https://swift.org/documentation/api-design-guidelines.html#conventions). We are also using some of the conventions of [raywenderlich.com Swift style guide](https://github.com/raywenderlich/swift-style-guide). Otherwise please have a look to [Apple Swift conventions](https://swift.org/documentation/api-design-guidelines.html#conventions). We are also using some of the conventions of [raywenderlich.com Swift style guide](https://github.com/raywenderlich/swift-style-guide).
We enforce the coding style by running checks on the CI for every PR through [PR Checks](.github/workflows/pr-checks.yml), [SwiftLint](.swiftlint.yml), [SwiftFormat](.swiftformat) and [SonarCloud](https://sonarcloud.io/project/overview?id=element-x-ios) We enforce the coding style by running checks on the CI for every PR through [Danger](Dangerfile.swift), [SwiftLint](.swiftlint.yml), [SwiftFormat](.swiftformat) and [SonarCloud](https://sonarcloud.io/project/overview?id=element-x-ios)
We also gather coverage reports on every PR through [Codecov](https://app.codecov.io/gh/element-hq/element-x-ios) and will eventually start enforcing minimums. We also gather coverage reports on every PR through [Codecov](https://app.codecov.io/gh/element-hq/element-x-ios) and will eventually start enforcing minimums.
@@ -1,16 +0,0 @@
//
// Copyright 2026 Element Creations Ltd.
//
// SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial.
// Please see LICENSE files in the repository root for full details.
//
/// Exposes a `Mutex`-backed hook as a read-only computed property, alongside a `register<Name>`
/// peer that swaps in a replacement hook.
///
/// The `default` argument provides the hook used until (and unless) a replacement is registered.
/// The enclosing type must have `Synchronization` in scope for the generated `Mutex` storage.
@attached(accessor)
@attached(peer, names: arbitrary)
public macro AppHook<Value>(default: Value) =
#externalMacro(module: "MacrosImplementation", type: "AppHookMacro")
@@ -1,98 +0,0 @@
//
// Copyright 2026 Element Creations Ltd.
//
// SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial.
// Please see LICENSE files in the repository root for full details.
//
import SwiftSyntax
import SwiftSyntaxMacros
/// Implements `@AppHook`. The generated property reads through a `Mutex`-backed store, and a
/// generated `register<Name>` method swaps in a replacement hook.
enum AppHookMacro {
enum DiagnosticError: Error, CustomStringConvertible {
case notAStoredProperty
case missingTypeAnnotation
case missingDefault
var description: String {
switch self {
case .notAStoredProperty:
"@AppHook can only be applied to a stored property."
case .missingTypeAnnotation:
"@AppHook requires an explicit type annotation."
case .missingDefault:
"@AppHook requires a default value."
}
}
}
private struct AppHook {
let name: String
let type: TypeSyntax
let defaultValue: ExprSyntax
var storageName: TokenSyntax {
"_\(raw: name)"
}
var registerMethodName: TokenSyntax {
"register\(raw: name.prefix(1).uppercased() + name.dropFirst())"
}
}
private static func appHook(for declaration: some DeclSyntaxProtocol, node: AttributeSyntax) throws -> AppHook {
guard let variable = declaration.as(VariableDeclSyntax.self),
let binding = variable.bindings.first,
let identifier = binding.pattern.as(IdentifierPatternSyntax.self)?.identifier else {
throw DiagnosticError.notAStoredProperty
}
guard let type = binding.typeAnnotation?.type.trimmed else {
throw DiagnosticError.missingTypeAnnotation
}
var defaultValue: ExprSyntax?
if let list = node.arguments?.as(LabeledExprListSyntax.self) {
for argument in list where argument.label?.text == "default" {
defaultValue = argument.expression
}
}
guard let defaultValue else {
throw DiagnosticError.missingDefault
}
return AppHook(name: identifier.text, type: type, defaultValue: defaultValue)
}
}
extension AppHookMacro: AccessorMacro {
static func expansion(of node: AttributeSyntax,
providingAccessorsOf declaration: some DeclSyntaxProtocol,
in context: some MacroExpansionContext) throws -> [AccessorDeclSyntax] {
let appHook = try appHook(for: declaration, node: node)
return [
"""
get {
\(appHook.storageName).withLock { $0 }
}
"""
]
}
}
extension AppHookMacro: PeerMacro {
static func expansion(of node: AttributeSyntax,
providingPeersOf declaration: some DeclSyntaxProtocol,
in context: some MacroExpansionContext) throws -> [DeclSyntax] {
let appHook = try appHook(for: declaration, node: node)
return [
"private let \(appHook.storageName) = Mutex<\(appHook.type)>(\(appHook.defaultValue))",
"""
func \(appHook.registerMethodName)(_ hook: \(appHook.type)) {
\(appHook.storageName).withLock { $0 = hook }
}
"""
]
}
}
@@ -1,3 +0,0 @@
version https://git-lfs.github.com/spec/v1
oid sha256:0b1465b1e379f4356e0cbde2ecc1a9cd2a58c7a69be7ca9f7b3b2df2e911e60c
size 2004302
@@ -1,19 +0,0 @@
//
// Copyright 2026 Element Creations Ltd.
//
// SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial.
// Please see LICENSE files in the repository root for full details.
//
import SwiftUI
/// Implemented by MapLibreShim's entry point, which the app instantiates after
/// `dlopen`-ing the framework.
public protocol MapLibreShimProtocol {
/// Routes MapLibre's logs into the app's logger. Call once after loading the shim.
func configureLogging(_ handler: @escaping @Sendable (MapLogSeverity, String) -> Void)
/// Builds the interactive map view. The app-side `MapLibreMapView` forwards every
/// body evaluation here so SwiftUI updates flow through to the underlying map.
func makeMapView(configuration: MapViewConfiguration) -> AnyView
}
@@ -1,56 +0,0 @@
//
// Copyright 2026 Element Creations Ltd.
// Copyright 2023-2025 New Vector Ltd.
//
// SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial.
// Please see LICENSE files in the repository root for full details.
//
import CoreLocation
import Foundation
/**
Behavior mode of the current user's location, can be hidden, only shown and shown following the user
*/
public enum ShowUserLocationMode: Equatable {
/// this mode will show the user pin in map
case show
/// this mode will show the user pin in map and track him, panning the map automatically
case showAndFollow
/// this mode will not show the user pin in map
case hide
/// this mode will not show the user pin in map and will follow the marker with the given id,
/// panning the map automatically.
case hideAndFollowMarker(id: String)
/// The id of the marker the map should follow when in the `hideAndFollowMarker` mode, nil otherwise.
public var followedMarkerID: String? {
guard case .hideAndFollowMarker(let id) = self else { return nil }
return id
}
}
public enum MapLibreError: Error, Hashable {
case failedLoadingMap
case failedLocatingUser
}
/// The severity of a map log message forwarded to the app.
public enum MapLogSeverity {
case error
case warning
case info
case debug
case verbose
}
/// A marker shown on the map, identified so that it can be moved in place when its coordinate changes.
public struct MapAnnotation {
public let id: String
public let coordinate: CLLocationCoordinate2D
public init(id: String, coordinate: CLLocationCoordinate2D) {
self.id = id
self.coordinate = coordinate
}
}
@@ -1,76 +0,0 @@
//
// Copyright 2026 Element Creations Ltd.
//
// SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial.
// Please see LICENSE files in the repository root for full details.
//
import CoreLocation
import SwiftUI
/// Everything the map implementation needs in order to render, expressed without app
/// types so that the implementation framework can be loaded on demand.
public struct MapViewConfiguration {
/// the final zoom level used when the first user location emit
public let zoomLevel: Double
/// The initial zoom level used when the map it firstly loaded and the user location is not yet available, in case of annotations this property is not being used
public let initialZoomLevel: Double
/// The initial map center
public let mapCenter: CLLocationCoordinate2D
/// Map annotations
public let annotations: [MapAnnotation]
/// The style to load the map with, for either the dark or the light appearance.
public let styleURL: (_ isDark: Bool) -> URL?
public let tintColor: UIColor
/// The content of the marker representing the annotation with the given id.
public let markerView: (_ annotationID: String) -> AnyView?
/// Behavior mode of the current user's location, can be hidden, only shown and shown following the user
public let showsUserLocationMode: Binding<ShowUserLocationMode>
/// Bind view errors if any
public let error: Binding<MapLibreError?>
/// Coordinate of the center of the map
public let mapCenterCoordinate: Binding<CLLocationCoordinate2D?>
public let hasLoadedUserLocation: Binding<Bool>
public let isLocationAuthorized: Binding<Bool?>
/// The radius of uncertainty for the location, measured in meters.
public let geolocationUncertainty: Binding<CLLocationAccuracy?>
/// Called when the user pan on the map
public let userDidPan: (() -> Void)?
public init(zoomLevel: Double,
initialZoomLevel: Double,
mapCenter: CLLocationCoordinate2D,
annotations: [MapAnnotation] = [],
styleURL: @escaping (_ isDark: Bool) -> URL?,
tintColor: UIColor,
markerView: @escaping (_ annotationID: String) -> AnyView?,
showsUserLocationMode: Binding<ShowUserLocationMode>,
error: Binding<MapLibreError?>,
mapCenterCoordinate: Binding<CLLocationCoordinate2D?>,
hasLoadedUserLocation: Binding<Bool>,
isLocationAuthorized: Binding<Bool?>,
geolocationUncertainty: Binding<CLLocationAccuracy?>,
userDidPan: (() -> Void)? = nil) {
self.zoomLevel = zoomLevel
self.initialZoomLevel = initialZoomLevel
self.mapCenter = mapCenter
self.annotations = annotations
self.styleURL = styleURL
self.tintColor = tintColor
self.markerView = markerView
self.showsUserLocationMode = showsUserLocationMode
self.error = error
self.mapCenterCoordinate = mapCenterCoordinate
self.hasLoadedUserLocation = hasLoadedUserLocation
self.isLocationAuthorized = isLocationAuthorized
self.geolocationUncertainty = geolocationUncertainty
self.userDidPan = userDidPan
}
}
@@ -1,19 +0,0 @@
# The types shared between the app and the MapLibreShim framework. The app links this
# (tiny, initialiser-free) framework instead of MapLibre, see MapLibreShim's target.yml.
name: MapLibreInterface
targets:
MapLibreInterface:
type: framework
platform: iOS
settings:
base:
PRODUCT_BUNDLE_IDENTIFIER: $(BASE_BUNDLE_IDENTIFIER).maplibre-interface
GENERATE_INFOPLIST_FILE: YES
SWIFT_VERSION: 6
SWIFT_APPROACHABLE_CONCURRENCY: YES
SWIFT_DEFAULT_ACTOR_ISOLATION: MainActor
sources:
- path: ../Sources
@@ -1,60 +0,0 @@
//
// Copyright 2026 Element Creations Ltd.
// Copyright 2023-2025 New Vector Ltd.
//
// SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial.
// Please see LICENSE files in the repository root for full details.
//
import CoreLocation
import MapLibre
import MapLibreInterface
import SwiftUI
final class MapLibreAnnotation: NSObject, MLNAnnotation, Identifiable {
let id: String
// @objc dynamic is required to make animations work
@objc dynamic var coordinate: CLLocationCoordinate2D
// MARK: - Setup
init(_ annotation: MapAnnotation) {
id = annotation.id
coordinate = annotation.coordinate
super.init()
}
}
final class MapLibreAnnotationView: MLNUserLocationAnnotationView {
private var hostingController: UIHostingController<AnyView>?
// MARK: - Setup
override init(annotation: MLNAnnotation?, reuseIdentifier: String?) {
super.init(annotation: annotation, reuseIdentifier:
reuseIdentifier)
}
convenience init(annotation: MapLibreAnnotation, content: AnyView?) {
self.init(annotation: annotation, reuseIdentifier: "\(Self.self)")
let hostingController = UIHostingController(rootView: content ?? AnyView(EmptyView()))
self.hostingController = hostingController
let view: UIView = hostingController.view
view.backgroundColor = .clear
view.anchorPoint = .init(x: 0.5, y: 1.0)
addSubview(view)
view.bounds.size = view.intrinsicContentSize
}
func updateContent(_ content: AnyView?) {
hostingController?.rootView = content ?? AnyView(EmptyView())
if let hostedView = hostingController?.view {
hostedView.bounds.size = hostedView.intrinsicContentSize
}
}
@available(*, unavailable)
required init?(coder: NSCoder) {
fatalError()
}
}
@@ -1,297 +0,0 @@
//
// Copyright 2026 Element Creations Ltd.
// Copyright 2023-2025 New Vector Ltd.
//
// SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial.
// Please see LICENSE files in the repository root for full details.
//
import MapLibre
import MapLibreInterface
import SwiftUI
struct MapLibreMapView: UIViewRepresentable {
// MARK: - Properties
@Environment(\.colorScheme) private var colorScheme
let configuration: MapViewConfiguration
// MARK: - UIViewRepresentable
func makeUIView(context: Context) -> MLNMapView {
let mapView = makeMapView()
mapView.delegate = context.coordinator
setupMap(mapView: mapView)
return mapView
}
func updateUIView(_ mapView: MLNMapView, context: Context) {
// Don't set the same value twice. Otherwise, if there is an error loading the map, a loop
// is caused as the `error` binding being set, which triggers this update, which sets a
// new URL, which causes another error, and so it goes on round and round in a circle.
let dynamicMapURL = configuration.styleURL(colorScheme == .dark)
if mapView.styleURL != dynamicMapURL {
mapView.styleURL = dynamicMapURL
}
// If the center coordinate was updated externally (not by the map itself), move the map.
// Not applied while following a marker, where the camera is driven by the marker's position.
if configuration.showsUserLocationMode.wrappedValue.followedMarkerID == nil,
let newCenter = configuration.mapCenterCoordinate.wrappedValue,
newCenter.latitude != context.coordinator.lastReportedCenter?.latitude
|| newCenter.longitude != context.coordinator.lastReportedCenter?.longitude {
context.coordinator.lastReportedCenter = newCenter
mapView.setCenter(newCenter, animated: true)
}
// Update existing annotation views with fresh SwiftUI content.
// This handles the case where the annotation's view data changes after
// the annotation was initially placed (e.g. user avatar loads asynchronously).
updateAnnotations(in: mapView)
showUserLocation(in: mapView)
context.coordinator.updateMarkerFollowing(in: mapView, markerID: configuration.showsUserLocationMode.wrappedValue.followedMarkerID)
}
func makeCoordinator() -> Coordinator {
Coordinator(self)
}
// MARK: - Private
private func setupMap(mapView: MLNMapView) {
mapView.addAnnotations(configuration.annotations.map(MapLibreAnnotation.init))
mapView.zoomLevel = configuration.annotations.isEmpty ? configuration.initialZoomLevel : configuration.zoomLevel
mapView.centerCoordinate = configuration.mapCenter
}
private func updateAnnotations(in mapView: MLNMapView) {
let existingByID = Dictionary(uniqueKeysWithValues:
(mapView.annotations ?? []).compactMap { $0 as? MapLibreAnnotation }.map { ($0.id, $0) })
let updatedByID = Dictionary(uniqueKeysWithValues: configuration.annotations.map { ($0.id, $0) })
let existingIDs = Set(existingByID.keys)
let updatedIDs = Set(updatedByID.keys)
// Remove annotations that are no longer present
let removedIDs = existingIDs.subtracting(updatedIDs)
if !removedIDs.isEmpty {
let toRemove = removedIDs.compactMap { existingByID[$0] }
mapView.removeAnnotations(toRemove)
}
// Add new annotations
let addedIDs = updatedIDs.subtracting(existingIDs)
if !addedIDs.isEmpty {
let toAdd = addedIDs.compactMap { updatedByID[$0] }.map(MapLibreAnnotation.init)
mapView.addAnnotations(toAdd)
}
// Update existing annotations that are still present
let keptIDs = existingIDs.intersection(updatedIDs)
for id in keptIDs {
guard let existingAnnotation = existingByID[id],
let updatedAnnotation = updatedByID[id] else {
continue
}
CoordinateAnimator.animate(annotation: existingAnnotation,
to: updatedAnnotation.coordinate,
duration: 1.0)
if let annotationView = mapView.view(for: existingAnnotation) as? MapLibreAnnotationView {
annotationView.updateContent(configuration.markerView(id))
}
}
}
private func makeMapView() -> MLNMapView {
let mapView = MLNMapView(frame: .zero, styleURL: configuration.styleURL(colorScheme == .dark))
mapView.logoViewPosition = .topLeft
mapView.attributionButtonPosition = .topLeft
mapView.attributionButtonMargins = .init(x: mapView.logoView.frame.maxX + 8, y: mapView.logoView.center.y / 2)
mapView.tintColor = configuration.tintColor
mapView.allowsRotating = false
mapView.allowsTilting = false
return mapView
}
private func showUserLocation(in mapView: MLNMapView) {
switch (configuration.showsUserLocationMode.wrappedValue, configuration.annotations) {
case (.showAndFollow, _):
mapView.userTrackingMode = .follow
case (.show, let annotations) where !annotations.isEmpty:
// In the show mode, if there are annotations, we check the authorizationStatus,
// if it's not determined, we wont prompt the user with a request for permissions,
// because they should be able to see the annotations without sharing their location information.
guard mapView.locationManager.authorizationStatus != .notDetermined else { return }
fallthrough
case (.show, _):
mapView.showsUserLocation = true
mapView.setUserTrackingMode(.none, animated: false, completionHandler: nil)
case (.hide, _), (.hideAndFollowMarker, _):
// In hideAndFollowMarker mode the camera following is handled by the coordinator.
mapView.showsUserLocation = false
mapView.setUserTrackingMode(.none, animated: false, completionHandler: nil)
}
}
}
// MARK: - Coordinator
extension MapLibreMapView {
class Coordinator: NSObject, MLNMapViewDelegate {
// MARK: - Properties
var mapLibreView: MapLibreMapView
private var previousUserLocation: MLNUserLocation?
/// Tracks the last center coordinate reported by the map (or set programmatically),
/// so that `updateUIView` can tell apart external binding changes from internal ones.
var lastReportedCenter: CLLocationCoordinate2D?
/// The annotation the camera is currently locked on while in the `hideAndFollowMarker` mode.
private weak var followedAnnotation: MapLibreAnnotation?
/// Observes the followed annotation's coordinate, updated every frame by the `CoordinateAnimator`.
private var followedAnnotationObservation: NSKeyValueObservation?
// MARK: - Setup
init(_ mapLibreView: MapLibreMapView) {
self.mapLibreView = mapLibreView
}
// MARK: - Marker following
/// Keeps the camera locked on the marker with the given id, or stops following when nil.
func updateMarkerFollowing(in mapView: MLNMapView, markerID: String?) {
guard let markerID else {
stopFollowingMarker()
return
}
guard let annotation = (mapView.annotations ?? [])
.compactMap({ $0 as? MapLibreAnnotation })
.first(where: { $0.id == markerID }) else {
// The marker isn't on the map (yet), resolve it again on the next update.
stopFollowingMarker()
return
}
guard annotation !== followedAnnotation else { return }
startFollowingMarker(annotation, in: mapView)
}
private func startFollowingMarker(_ annotation: MapLibreAnnotation, in mapView: MLNMapView) {
followedAnnotation = annotation
followedAnnotationObservation = nil
// Animate to the marker first, attaching the per-frame tracking only on completion
// so that it doesn't cancel the transition.
mapView.setCenter(annotation.coordinate,
zoomLevel: mapView.zoomLevel,
direction: -1, // negative value keeps the current direction
animated: true) { [weak self, weak annotation, weak mapView] in
guard let self, let annotation, let mapView, annotation === followedAnnotation else { return }
// Mirror every animated coordinate update to keep the camera as smooth as the marker.
followedAnnotationObservation = annotation.observe(\.coordinate) { [weak mapView] annotation, _ in
// The coordinate is only ever updated by SwiftUI so KVO fires on the main actor.
MainActor.assumeIsolated {
mapView?.setCenter(annotation.coordinate, animated: false)
}
}
}
}
private func stopFollowingMarker() {
followedAnnotation = nil
followedAnnotationObservation = nil
}
// MARK: - MLNMapViewDelegate
func mapView(_ mapView: MLNMapView, viewFor annotation: MLNAnnotation) -> MLNAnnotationView? {
guard let annotation = annotation as? MapLibreAnnotation else {
return nil
}
return MapLibreAnnotationView(annotation: annotation, content: mapLibreView.configuration.markerView(annotation.id))
}
func mapViewDidFailLoadingMap(_ mapView: MLNMapView, withError error: Error) {
if mapLibreView.configuration.error.wrappedValue != .failedLoadingMap {
mapLibreView.configuration.error.wrappedValue = .failedLoadingMap
}
}
func mapView(_ mapView: MLNMapView, didUpdate userLocation: MLNUserLocation?) {
guard let userLocation else { return }
mapLibreView.configuration.hasLoadedUserLocation.wrappedValue = true
if previousUserLocation == nil, mapLibreView.configuration.annotations.isEmpty {
DispatchQueue.main.asyncAfter(deadline: .now() + 1) {
mapView.setCenter(userLocation.coordinate, zoomLevel: self.mapLibreView.configuration.zoomLevel, animated: true)
}
}
previousUserLocation = userLocation
updateGeolocationUncertainty(location: userLocation)
}
func mapView(_ mapView: MLNMapView, didChangeLocationManagerAuthorization manager: MLNLocationManager) {
switch manager.authorizationStatus {
case .denied, .restricted:
mapLibreView.configuration.isLocationAuthorized.wrappedValue = false
case .authorizedAlways, .authorizedWhenInUse:
mapLibreView.configuration.isLocationAuthorized.wrappedValue = true
case .notDetermined:
mapLibreView.configuration.isLocationAuthorized.wrappedValue = nil
@unknown default:
break
}
}
func mapView(_ mapView: MLNMapView, regionDidChangeAnimated animated: Bool) {
// While following a marker, don't flood the center binding with per-frame camera updates.
// Leaving `lastReportedCenter` untouched avoids an external re-centering when following stops.
guard mapLibreView.configuration.showsUserLocationMode.wrappedValue.followedMarkerID == nil else { return }
// Avoid `Publishing changes from within view update` warnings
DispatchQueue.main.async { [mapLibreView, weak self] in
let center = mapView.centerCoordinate
self?.lastReportedCenter = center
mapLibreView.configuration.mapCenterCoordinate.wrappedValue = center
}
}
func mapView(_ mapView: MLNMapView, shouldChangeFrom oldCamera: MLNMapCamera, to newCamera: MLNMapCamera, reason: MLNCameraChangeReason) -> Bool {
// Send userDidPan only for gestures that actually change the map center. The reason
// is an option set and gestures can come combined with other reasons, so check for
// containment instead of an exact match.
let centerChangingGestures: MLNCameraChangeReason = [.gesturePan, .gesturePinch, .gestureRotate]
if !reason.isDisjoint(with: centerChangingGestures) {
// Stop following immediately, the camera would fight the gesture otherwise.
stopFollowingMarker()
mapLibreView.configuration.userDidPan?()
}
return true
}
// MARK: Callout
func mapView(_ mapView: MLNMapView, annotationCanShowCallout annotation: MLNAnnotation) -> Bool {
false
}
// MARK: Private
private func updateGeolocationUncertainty(location: MLNUserLocation) {
guard let clLocation = location.location, clLocation.horizontalAccuracy >= 0 else {
mapLibreView.configuration.geolocationUncertainty.wrappedValue = nil
return
}
mapLibreView.configuration.geolocationUncertainty.wrappedValue = clLocation.horizontalAccuracy
}
}
}
@@ -1,39 +0,0 @@
//
// Copyright 2026 Element Creations Ltd.
//
// SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial.
// Please see LICENSE files in the repository root for full details.
//
import MapLibre
import MapLibreInterface
import SwiftUI
/// The shim's entry point: the app looks this class up by name through the ObjC runtime
/// after `dlopen`-ing the framework, keeping MapLibre off the app's launch path.
@objc(MapLibreShim)
public final class MapLibreShim: NSObject, MapLibreShimProtocol {
public func configureLogging(_ handler: @escaping @Sendable (MapLogSeverity, String) -> Void) {
MLNLoggingConfiguration.shared.loggingLevel = .debug
MLNLoggingConfiguration.shared.handler = { loggingLevel, _, _, message in
switch loggingLevel {
case .error:
handler(.error, message)
case .warning:
handler(.warning, message)
case .info:
handler(.info, message)
case .debug:
handler(.debug, message)
case .verbose:
handler(.verbose, message)
default:
break
}
}
}
public func makeMapView(configuration: MapViewConfiguration) -> AnyView {
AnyView(MapLibreMapView(configuration: configuration))
}
}
@@ -1,26 +0,0 @@
# The interactive map, split out of the app so MapLibre's static initialisers stay off the
# launch path: the app links only the tiny MapLibreInterface framework, while MapLibreShim (the
# only image linking MapLibre) is embedded unlinked and dlopen'd on first map use.
name: MapLibreShim
targets:
MapLibreShim:
type: framework
platform: iOS
settings:
base:
PRODUCT_BUNDLE_IDENTIFIER: $(BASE_BUNDLE_IDENTIFIER).maplibre-shim
GENERATE_INFOPLIST_FILE: YES
SWIFT_VERSION: 6
SWIFT_APPROACHABLE_CONCURRENCY: YES
SWIFT_DEFAULT_ACTOR_ISOLATION: MainActor
dependencies:
- target: MapLibreInterface
embed: false
- package: MapLibre
embed: false
sources:
- path: ../Sources
-9
View File
@@ -1,9 +0,0 @@
nonisolated enum Secrets {
static let sentryDSN: String? = nil
static let sentryRustDSN: String? = nil
static let postHogHost: String? = nil
static let postHogAPIKey: String? = nil
static let rageshakeURL: String? = nil
static let mapLibreAPIKey: String? = "your_key"
}
+52
View File
@@ -0,0 +1,52 @@
import Danger
import Foundation
SwiftLint.lint(.modifiedAndCreatedFiles(directory: nil),
inline: true,
configFile: nil,
strict: false,
quiet: true,
swiftlintPath: nil,
markdownAction: { _ in })
let danger = Danger()
/// All of the new and modified files together.
let editedFiles = danger.git.modifiedFiles + danger.git.createdFiles
// Warn when there is a big PR
if (danger.github.pullRequest.additions ?? 0) > 1000 {
warn("This pull request seems relatively large. Please consider splitting it into multiple smaller ones.")
}
// Check that the PR has a description
if danger.github.pullRequest.body?.isEmpty ?? true {
warn("Please provide a description for this PR.")
}
/// Check for screenshots on view changes
let hasChangedViews = editedFiles.contains { $0.lowercased().contains("/view") }
if hasChangedViews {
if (danger.github.pullRequest.body?.contains("user-attachments") ?? false) == false {
warn("You seem to have made changes to views. Please consider adding screenshots.")
}
}
/// Check for pngs on resources
let hasPngs = editedFiles.contains { $0.lowercased().contains(".xcassets") && $0.lowercased().hasSuffix(".png") }
if hasPngs {
warn("You seem to have made changes to some resource images. Please consider using an SVG or PDF.")
}
// Check for nice PR titles
let prTitle = danger.github.pullRequest.title
let fixesRegex = try! Regex("(Fixes|Fix) #\\d+")
let semanticRegex = try! Regex("\\w+\\(\\w+\\):")
if prTitle.hasSuffix("…") || prTitle.starts(with: fixesRegex) || prTitle.starts(with: semanticRegex) {
fail("Please provide a complete title that can be used as a changelog entry.")
}
// Check for changelog tags
if danger.github.issue.labels.filter({ $0.name.hasPrefix("pr-") }).count != 1 {
fail("Please add a `pr-` label to categorise the changelog entry.")
}
@@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:cc39671ee91a08779e4149589a4635fa6b91519b07bfb2dee621ccab031a75c5
size 5825201
File diff suppressed because it is too large Load Diff
@@ -1,13 +1,13 @@
{ {
"originHash" : "fbdb76ae8c78e5a86db4812456fcb4da5795eed4bc8f6715726fec41e87a1e0f", "originHash" : "1c7d307d80ee561100a0432a5ae13f345392a1175c7f6c17c2eb0da269382c57",
"pins" : [ "pins" : [
{ {
"identity" : "compound-design-tokens", "identity" : "compound-design-tokens",
"kind" : "remoteSourceControl", "kind" : "remoteSourceControl",
"location" : "https://github.com/element-hq/compound-design-tokens", "location" : "https://github.com/element-hq/compound-design-tokens",
"state" : { "state" : {
"revision" : "28b921601ac0ff49a572b6f18526d97bd14e5d91", "revision" : "6e33c5bf3cbb4c29dbe5fc063d24b375849c0fac",
"version" : "11.3.1" "version" : "10.2.2"
} }
}, },
{ {
@@ -15,8 +15,8 @@
"kind" : "remoteSourceControl", "kind" : "remoteSourceControl",
"location" : "https://github.com/devicekit/DeviceKit", "location" : "https://github.com/devicekit/DeviceKit",
"state" : { "state" : {
"revision" : "19528aa07e1426626ea9fb2c4a161edf43c4f9e8", "revision" : "56b997e8a61707218f9af09f32b2a1d1806fd792",
"version" : "5.9.0" "version" : "5.8.0"
} }
}, },
{ {
@@ -55,22 +55,13 @@
"version" : "1.2.0" "version" : "1.2.0"
} }
}, },
{
"identity" : "element-call-ios",
"kind" : "remoteSourceControl",
"location" : "https://github.com/element-hq/element-call-ios",
"state" : {
"revision" : "d77b4ee326582083cabe53ffbd872a751c3cb989",
"version" : "0.1.0-rc.11"
}
},
{ {
"identity" : "element-call-swift", "identity" : "element-call-swift",
"kind" : "remoteSourceControl", "kind" : "remoteSourceControl",
"location" : "https://github.com/element-hq/element-call-swift", "location" : "https://github.com/element-hq/element-call-swift",
"state" : { "state" : {
"revision" : "befb5d37a7859ad38cf83719cbfd4abaffa04d82", "revision" : "d2ecef5a54e5718ed6344dde6f72a4da42f1fcd9",
"version" : "0.26.1" "version" : "0.20.2"
} }
}, },
{ {
@@ -104,8 +95,8 @@
"kind" : "remoteSourceControl", "kind" : "remoteSourceControl",
"location" : "https://github.com/onevcat/Kingfisher", "location" : "https://github.com/onevcat/Kingfisher",
"state" : { "state" : {
"revision" : "8648fe649c5d62be38721110f835821906e9242a", "revision" : "ac632bd26a1c00f139ff62fd01806f21cf67325e",
"version" : "8.13.0" "version" : "8.10.0"
} }
}, },
{ {
@@ -131,8 +122,8 @@
"kind" : "remoteSourceControl", "kind" : "remoteSourceControl",
"location" : "https://github.com/nicklockwood/LRUCache", "location" : "https://github.com/nicklockwood/LRUCache",
"state" : { "state" : {
"revision" : "f0570e943ea4445d258113ba73f50cb2b7e564ac", "revision" : "cb5b2bd0da83ad29c0bec762d39f41c8ad0eaf3e",
"version" : "1.3.0" "version" : "1.2.1"
} }
}, },
{ {
@@ -140,8 +131,8 @@
"kind" : "remoteSourceControl", "kind" : "remoteSourceControl",
"location" : "https://github.com/guoyingtao/Mantis", "location" : "https://github.com/guoyingtao/Mantis",
"state" : { "state" : {
"revision" : "0960be1feed2e62f62a5fddbb8d72b26008db881", "revision" : "b3c237aff54b8307440157a2f5956bdea2e76791",
"version" : "3.1.0" "version" : "2.31.2"
} }
}, },
{ {
@@ -149,8 +140,8 @@
"kind" : "remoteSourceControl", "kind" : "remoteSourceControl",
"location" : "https://github.com/maplibre/maplibre-gl-native-distribution", "location" : "https://github.com/maplibre/maplibre-gl-native-distribution",
"state" : { "state" : {
"revision" : "13e41ab3d77ff5113e7e5d4ee87803b1f81f5683", "revision" : "84a79bc375a301169390ac110c868f06c857b83f",
"version" : "6.31.0" "version" : "6.27.0"
} }
}, },
{ {
@@ -158,8 +149,8 @@
"kind" : "remoteSourceControl", "kind" : "remoteSourceControl",
"location" : "https://github.com/matrix-org/matrix-analytics-events", "location" : "https://github.com/matrix-org/matrix-analytics-events",
"state" : { "state" : {
"revision" : "7d668b3e4be493843805b8a1ff4e13b261a19965", "revision" : "4b143b14a16a231bd4fc3c6705845f852177abe3",
"version" : "0.38.0" "version" : "0.37.0"
} }
}, },
{ {
@@ -167,8 +158,8 @@
"kind" : "remoteSourceControl", "kind" : "remoteSourceControl",
"location" : "https://github.com/element-hq/matrix-rich-text-editor-swift", "location" : "https://github.com/element-hq/matrix-rich-text-editor-swift",
"state" : { "state" : {
"revision" : "56077711bf495db926ec3f3efd36ed127fb9ceb1", "revision" : "c0877fb9323d1ec2de56e4fe2da97f73cac36c38",
"version" : "2.42.1" "version" : "2.42.0"
} }
}, },
{ {
@@ -176,17 +167,8 @@
"kind" : "remoteSourceControl", "kind" : "remoteSourceControl",
"location" : "https://github.com/element-hq/matrix-rust-components-swift", "location" : "https://github.com/element-hq/matrix-rust-components-swift",
"state" : { "state" : {
"revision" : "dbdf59e13d0eade7fd9cbd01cfd564693b85b761", "revision" : "24c26f6697e03e42d176c61b5923ac958f5fa32d",
"version" : "26.10.15" "version" : "26.7.3"
}
},
{
"identity" : "matrix-rust-rtc",
"kind" : "remoteSourceControl",
"location" : "https://github.com/element-hq/matrix-rust-rtc",
"state" : {
"revision" : "c7a81b6742dc5e571b90b05f5109677384efb933",
"version" : "0.5.0-rc.5"
} }
}, },
{ {
@@ -212,8 +194,8 @@
"kind" : "remoteSourceControl", "kind" : "remoteSourceControl",
"location" : "https://github.com/PostHog/posthog-ios", "location" : "https://github.com/PostHog/posthog-ios",
"state" : { "state" : {
"revision" : "d97d9a0babda42ecee026bd0a5a9ea1756349dc1", "revision" : "6e70aa24bbd3778182fe039f7f5800a17674a6d6",
"version" : "3.85.3" "version" : "3.61.1"
} }
}, },
{ {
@@ -221,8 +203,8 @@
"kind" : "remoteSourceControl", "kind" : "remoteSourceControl",
"location" : "https://github.com/getsentry/sentry-cocoa", "location" : "https://github.com/getsentry/sentry-cocoa",
"state" : { "state" : {
"revision" : "8689e780a295dfdc6501ac0dbb502461e16d6551", "revision" : "43abfbf9a26089ad34604c718ad0935440caf1d4",
"version" : "9.29.2" "version" : "9.18.0"
} }
}, },
{ {
@@ -248,8 +230,17 @@
"kind" : "remoteSourceControl", "kind" : "remoteSourceControl",
"location" : "https://github.com/apple/swift-async-algorithms", "location" : "https://github.com/apple/swift-async-algorithms",
"state" : { "state" : {
"revision" : "789dcf1f3d3f00251482f40a432ab7144c181987", "revision" : "d0b4a06d0f173a2f3be27d3ea21b3c3aa18db440",
"version" : "1.1.6" "version" : "1.1.4"
}
},
{
"identity" : "swift-clocks",
"kind" : "remoteSourceControl",
"location" : "https://github.com/pointfreeco/swift-clocks",
"state" : {
"revision" : "72d749bf341b78851203066ab421869b783ec42a",
"version" : "1.1.0"
} }
}, },
{ {
@@ -257,8 +248,17 @@
"kind" : "remoteSourceControl", "kind" : "remoteSourceControl",
"location" : "https://github.com/apple/swift-collections", "location" : "https://github.com/apple/swift-collections",
"state" : { "state" : {
"revision" : "98ef3c98609a1e31b7e157b5b619579001a789d6", "revision" : "a0cb0954ecb21e4e31b0070e6ed5674e8556685a",
"version" : "1.7.1" "version" : "1.6.0"
}
},
{
"identity" : "swift-concurrency-extras",
"kind" : "remoteSourceControl",
"location" : "https://github.com/pointfreeco/swift-concurrency-extras",
"state" : {
"revision" : "5a3825302b1a0d744183200915a47b508c828e6f",
"version" : "1.3.2"
} }
}, },
{ {
@@ -293,8 +293,8 @@
"kind" : "remoteSourceControl", "kind" : "remoteSourceControl",
"location" : "https://github.com/pointfreeco/swift-snapshot-testing", "location" : "https://github.com/pointfreeco/swift-snapshot-testing",
"state" : { "state" : {
"revision" : "28e5de025e3fd98991791bfbf83023ab3708da03", "revision" : "ad5e3190cc63dc288f28546f9c6827efc1e9d495",
"version" : "1.19.6" "version" : "1.19.2"
} }
}, },
{ {
@@ -302,8 +302,8 @@
"kind" : "remoteSourceControl", "kind" : "remoteSourceControl",
"location" : "https://github.com/swiftlang/swift-syntax", "location" : "https://github.com/swiftlang/swift-syntax",
"state" : { "state" : {
"revision" : "050f1a346fbbac0ca2cfb15a95274f7bd1cf0ccf", "revision" : "79e4b74a295b6eb74a8b585e3a39d29e70c1dbd1",
"version" : "604.0.0" "version" : "603.0.2"
} }
}, },
{ {
@@ -311,8 +311,8 @@
"kind" : "remoteSourceControl", "kind" : "remoteSourceControl",
"location" : "https://github.com/scinfu/SwiftSoup.git", "location" : "https://github.com/scinfu/SwiftSoup.git",
"state" : { "state" : {
"revision" : "18b80329749eca5ea29fc50211dca5c7eff5bfec", "revision" : "49dcadd93161f4a44b4994d3a3e8de9f085aface",
"version" : "2.13.9" "version" : "2.13.5"
} }
}, },
{ {
@@ -329,8 +329,8 @@
"kind" : "remoteSourceControl", "kind" : "remoteSourceControl",
"location" : "https://github.com/tevelee/SwiftUI-Flow.git", "location" : "https://github.com/tevelee/SwiftUI-Flow.git",
"state" : { "state" : {
"revision" : "19e86b750b3c67260cbb28c459004c0dfdb11899", "revision" : "798364823cdfc6afb4aff43eff5a3ddbca89b54f",
"version" : "3.5.1" "version" : "3.4.0"
} }
}, },
{ {
@@ -338,8 +338,8 @@
"kind" : "remoteSourceControl", "kind" : "remoteSourceControl",
"location" : "https://github.com/siteline/SwiftUI-Introspect", "location" : "https://github.com/siteline/SwiftUI-Introspect",
"state" : { "state" : {
"revision" : "a37eca1db7bebc9437ee89508e7b4433ff34adb4", "revision" : "26986a57e31c813f98262ddb62d4b07d40008535",
"version" : "27.0.0" "version" : "26.0.1"
} }
}, },
{ {
@@ -4,7 +4,8 @@
version = "1.7"> version = "1.7">
<BuildAction <BuildAction
parallelizeBuildables = "YES" parallelizeBuildables = "YES"
buildImplicitDependencies = "YES"> buildImplicitDependencies = "YES"
runPostActionsOnFailure = "NO">
<BuildActionEntries> <BuildActionEntries>
<BuildActionEntry <BuildActionEntry
buildForTesting = "YES" buildForTesting = "YES"
@@ -26,7 +27,14 @@
buildConfiguration = "Debug" buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
shouldUseLaunchSchemeArgsEnv = "YES"> shouldUseLaunchSchemeArgsEnv = "YES"
onlyGenerateCoverageForSpecifiedTargets = "NO">
<TestPlans>
<TestPlanReference
default = "YES"
reference = "container:AccessibilityTests/SupportingFiles/AccessibilityTests.xctestplan">
</TestPlanReference>
</TestPlans>
<MacroExpansion> <MacroExpansion>
<BuildableReference <BuildableReference
BuildableIdentifier = "primary" BuildableIdentifier = "primary"
@@ -36,12 +44,10 @@
ReferencedContainer = "container:ElementX.xcodeproj"> ReferencedContainer = "container:ElementX.xcodeproj">
</BuildableReference> </BuildableReference>
</MacroExpansion> </MacroExpansion>
<TestPlans> <Testables>
<TestPlanReference </Testables>
reference = "container:AccessibilityTests/SupportingFiles/AccessibilityTests.xctestplan" <CommandLineArguments>
default = "YES"> </CommandLineArguments>
</TestPlanReference>
</TestPlans>
</TestAction> </TestAction>
<LaunchAction <LaunchAction
buildConfiguration = "Debug" buildConfiguration = "Debug"
@@ -62,6 +68,8 @@
ReferencedContainer = "container:ElementX.xcodeproj"> ReferencedContainer = "container:ElementX.xcodeproj">
</BuildableReference> </BuildableReference>
</MacroExpansion> </MacroExpansion>
<CommandLineArguments>
</CommandLineArguments>
</LaunchAction> </LaunchAction>
<ProfileAction <ProfileAction
buildConfiguration = "Release" buildConfiguration = "Release"
@@ -69,6 +77,8 @@
savedToolIdentifier = "" savedToolIdentifier = ""
useCustomWorkingDirectory = "NO" useCustomWorkingDirectory = "NO"
debugDocumentVersioning = "YES"> debugDocumentVersioning = "YES">
<CommandLineArguments>
</CommandLineArguments>
<MacroExpansion> <MacroExpansion>
<BuildableReference <BuildableReference
BuildableIdentifier = "primary" BuildableIdentifier = "primary"
@@ -4,7 +4,8 @@
version = "1.7"> version = "1.7">
<BuildAction <BuildAction
parallelizeBuildables = "YES" parallelizeBuildables = "YES"
buildImplicitDependencies = "YES"> buildImplicitDependencies = "YES"
runPostActionsOnFailure = "NO">
<BuildActionEntries> <BuildActionEntries>
<BuildActionEntry <BuildActionEntry
buildForTesting = "YES" buildForTesting = "YES"
@@ -29,6 +30,12 @@
shouldUseLaunchSchemeArgsEnv = "YES" shouldUseLaunchSchemeArgsEnv = "YES"
codeCoverageEnabled = "YES" codeCoverageEnabled = "YES"
onlyGenerateCoverageForSpecifiedTargets = "YES"> onlyGenerateCoverageForSpecifiedTargets = "YES">
<TestPlans>
<TestPlanReference
default = "YES"
reference = "container:UnitTests/SupportingFiles/UnitTests.xctestplan">
</TestPlanReference>
</TestPlans>
<MacroExpansion> <MacroExpansion>
<BuildableReference <BuildableReference
BuildableIdentifier = "primary" BuildableIdentifier = "primary"
@@ -38,6 +45,10 @@
ReferencedContainer = "container:ElementX.xcodeproj"> ReferencedContainer = "container:ElementX.xcodeproj">
</BuildableReference> </BuildableReference>
</MacroExpansion> </MacroExpansion>
<Testables>
</Testables>
<CommandLineArguments>
</CommandLineArguments>
<CodeCoverageTargets> <CodeCoverageTargets>
<BuildableReference <BuildableReference
BuildableIdentifier = "primary" BuildableIdentifier = "primary"
@@ -47,12 +58,6 @@
ReferencedContainer = "container:ElementX.xcodeproj"> ReferencedContainer = "container:ElementX.xcodeproj">
</BuildableReference> </BuildableReference>
</CodeCoverageTargets> </CodeCoverageTargets>
<TestPlans>
<TestPlanReference
reference = "container:UnitTests/SupportingFiles/UnitTests.xctestplan"
default = "YES">
</TestPlanReference>
</TestPlans>
</TestAction> </TestAction>
<LaunchAction <LaunchAction
buildConfiguration = "Debug" buildConfiguration = "Debug"
@@ -74,17 +79,14 @@
ReferencedContainer = "container:ElementX.xcodeproj"> ReferencedContainer = "container:ElementX.xcodeproj">
</BuildableReference> </BuildableReference>
</BuildableProductRunnable> </BuildableProductRunnable>
<CommandLineArguments>
</CommandLineArguments>
<EnvironmentVariables> <EnvironmentVariables>
<EnvironmentVariable <EnvironmentVariable
key = "HTTPS_PROXY" key = "HTTPS_PROXY"
value = "localhost:9090" value = "localhost:9090"
isEnabled = "NO"> isEnabled = "NO">
</EnvironmentVariable> </EnvironmentVariable>
<EnvironmentVariable
key = "HTTP_PROXY"
value = "localhost:9090"
isEnabled = "NO">
</EnvironmentVariable>
<EnvironmentVariable <EnvironmentVariable
key = "UI_TESTS_SCREEN" key = "UI_TESTS_SCREEN"
value = "" value = ""
@@ -113,6 +115,8 @@
ReferencedContainer = "container:ElementX.xcodeproj"> ReferencedContainer = "container:ElementX.xcodeproj">
</BuildableReference> </BuildableReference>
</BuildableProductRunnable> </BuildableProductRunnable>
<CommandLineArguments>
</CommandLineArguments>
</ProfileAction> </ProfileAction>
<AnalyzeAction <AnalyzeAction
buildConfiguration = "Debug"> buildConfiguration = "Debug">
@@ -4,7 +4,8 @@
version = "1.7"> version = "1.7">
<BuildAction <BuildAction
parallelizeBuildables = "YES" parallelizeBuildables = "YES"
buildImplicitDependencies = "YES"> buildImplicitDependencies = "YES"
runPostActionsOnFailure = "NO">
<BuildActionEntries> <BuildActionEntries>
<BuildActionEntry <BuildActionEntry
buildForTesting = "YES" buildForTesting = "YES"
@@ -29,6 +30,12 @@
shouldUseLaunchSchemeArgsEnv = "YES" shouldUseLaunchSchemeArgsEnv = "YES"
codeCoverageEnabled = "YES" codeCoverageEnabled = "YES"
onlyGenerateCoverageForSpecifiedTargets = "YES"> onlyGenerateCoverageForSpecifiedTargets = "YES">
<TestPlans>
<TestPlanReference
default = "YES"
reference = "container:IntegrationTests/SupportingFiles/IntegrationTests.xctestplan">
</TestPlanReference>
</TestPlans>
<MacroExpansion> <MacroExpansion>
<BuildableReference <BuildableReference
BuildableIdentifier = "primary" BuildableIdentifier = "primary"
@@ -38,6 +45,10 @@
ReferencedContainer = "container:ElementX.xcodeproj"> ReferencedContainer = "container:ElementX.xcodeproj">
</BuildableReference> </BuildableReference>
</MacroExpansion> </MacroExpansion>
<Testables>
</Testables>
<CommandLineArguments>
</CommandLineArguments>
<CodeCoverageTargets> <CodeCoverageTargets>
<BuildableReference <BuildableReference
BuildableIdentifier = "primary" BuildableIdentifier = "primary"
@@ -47,12 +58,6 @@
ReferencedContainer = "container:ElementX.xcodeproj"> ReferencedContainer = "container:ElementX.xcodeproj">
</BuildableReference> </BuildableReference>
</CodeCoverageTargets> </CodeCoverageTargets>
<TestPlans>
<TestPlanReference
reference = "container:IntegrationTests/SupportingFiles/IntegrationTests.xctestplan"
default = "YES">
</TestPlanReference>
</TestPlans>
</TestAction> </TestAction>
<LaunchAction <LaunchAction
buildConfiguration = "Debug" buildConfiguration = "Debug"
@@ -73,6 +78,8 @@
ReferencedContainer = "container:ElementX.xcodeproj"> ReferencedContainer = "container:ElementX.xcodeproj">
</BuildableReference> </BuildableReference>
</MacroExpansion> </MacroExpansion>
<CommandLineArguments>
</CommandLineArguments>
</LaunchAction> </LaunchAction>
<ProfileAction <ProfileAction
buildConfiguration = "Release" buildConfiguration = "Release"
@@ -80,6 +87,8 @@
savedToolIdentifier = "" savedToolIdentifier = ""
useCustomWorkingDirectory = "NO" useCustomWorkingDirectory = "NO"
debugDocumentVersioning = "YES"> debugDocumentVersioning = "YES">
<CommandLineArguments>
</CommandLineArguments>
<MacroExpansion> <MacroExpansion>
<BuildableReference <BuildableReference
BuildableIdentifier = "primary" BuildableIdentifier = "primary"
@@ -5,7 +5,8 @@
version = "1.7"> version = "1.7">
<BuildAction <BuildAction
parallelizeBuildables = "YES" parallelizeBuildables = "YES"
buildImplicitDependencies = "YES"> buildImplicitDependencies = "YES"
runPostActionsOnFailure = "NO">
<BuildActionEntries> <BuildActionEntries>
<BuildActionEntry <BuildActionEntry
buildForTesting = "YES" buildForTesting = "YES"
@@ -27,7 +28,8 @@
buildConfiguration = "Debug" buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
shouldUseLaunchSchemeArgsEnv = "YES"> shouldUseLaunchSchemeArgsEnv = "YES"
onlyGenerateCoverageForSpecifiedTargets = "NO">
<MacroExpansion> <MacroExpansion>
<BuildableReference <BuildableReference
BuildableIdentifier = "primary" BuildableIdentifier = "primary"
@@ -39,6 +41,8 @@
</MacroExpansion> </MacroExpansion>
<Testables> <Testables>
</Testables> </Testables>
<CommandLineArguments>
</CommandLineArguments>
</TestAction> </TestAction>
<LaunchAction <LaunchAction
buildConfiguration = "Debug" buildConfiguration = "Debug"
@@ -62,6 +66,8 @@
ReferencedContainer = "container:ElementX.xcodeproj"> ReferencedContainer = "container:ElementX.xcodeproj">
</BuildableReference> </BuildableReference>
</BuildableProductRunnable> </BuildableProductRunnable>
<CommandLineArguments>
</CommandLineArguments>
</LaunchAction> </LaunchAction>
<ProfileAction <ProfileAction
buildConfiguration = "Release" buildConfiguration = "Release"
@@ -79,6 +85,8 @@
ReferencedContainer = "container:ElementX.xcodeproj"> ReferencedContainer = "container:ElementX.xcodeproj">
</BuildableReference> </BuildableReference>
</BuildableProductRunnable> </BuildableProductRunnable>
<CommandLineArguments>
</CommandLineArguments>
</ProfileAction> </ProfileAction>
<AnalyzeAction <AnalyzeAction
buildConfiguration = "Debug"> buildConfiguration = "Debug">
@@ -4,7 +4,8 @@
version = "1.7"> version = "1.7">
<BuildAction <BuildAction
parallelizeBuildables = "YES" parallelizeBuildables = "YES"
buildImplicitDependencies = "YES"> buildImplicitDependencies = "YES"
runPostActionsOnFailure = "NO">
<BuildActionEntries> <BuildActionEntries>
<BuildActionEntry <BuildActionEntry
buildForTesting = "YES" buildForTesting = "YES"
@@ -29,6 +30,12 @@
shouldUseLaunchSchemeArgsEnv = "YES" shouldUseLaunchSchemeArgsEnv = "YES"
codeCoverageEnabled = "YES" codeCoverageEnabled = "YES"
onlyGenerateCoverageForSpecifiedTargets = "YES"> onlyGenerateCoverageForSpecifiedTargets = "YES">
<TestPlans>
<TestPlanReference
default = "YES"
reference = "container:PreviewTests/SupportingFiles/PreviewTests.xctestplan">
</TestPlanReference>
</TestPlans>
<MacroExpansion> <MacroExpansion>
<BuildableReference <BuildableReference
BuildableIdentifier = "primary" BuildableIdentifier = "primary"
@@ -38,6 +45,10 @@
ReferencedContainer = "container:ElementX.xcodeproj"> ReferencedContainer = "container:ElementX.xcodeproj">
</BuildableReference> </BuildableReference>
</MacroExpansion> </MacroExpansion>
<Testables>
</Testables>
<CommandLineArguments>
</CommandLineArguments>
<CodeCoverageTargets> <CodeCoverageTargets>
<BuildableReference <BuildableReference
BuildableIdentifier = "primary" BuildableIdentifier = "primary"
@@ -47,12 +58,6 @@
ReferencedContainer = "container:ElementX.xcodeproj"> ReferencedContainer = "container:ElementX.xcodeproj">
</BuildableReference> </BuildableReference>
</CodeCoverageTargets> </CodeCoverageTargets>
<TestPlans>
<TestPlanReference
reference = "container:PreviewTests/SupportingFiles/PreviewTests.xctestplan"
default = "YES">
</TestPlanReference>
</TestPlans>
</TestAction> </TestAction>
<LaunchAction <LaunchAction
buildConfiguration = "Debug" buildConfiguration = "Debug"
@@ -73,6 +78,8 @@
ReferencedContainer = "container:ElementX.xcodeproj"> ReferencedContainer = "container:ElementX.xcodeproj">
</BuildableReference> </BuildableReference>
</MacroExpansion> </MacroExpansion>
<CommandLineArguments>
</CommandLineArguments>
</LaunchAction> </LaunchAction>
<ProfileAction <ProfileAction
buildConfiguration = "Release" buildConfiguration = "Release"
@@ -80,6 +87,8 @@
savedToolIdentifier = "" savedToolIdentifier = ""
useCustomWorkingDirectory = "NO" useCustomWorkingDirectory = "NO"
debugDocumentVersioning = "YES"> debugDocumentVersioning = "YES">
<CommandLineArguments>
</CommandLineArguments>
<MacroExpansion> <MacroExpansion>
<BuildableReference <BuildableReference
BuildableIdentifier = "primary" BuildableIdentifier = "primary"
@@ -5,7 +5,8 @@
version = "1.7"> version = "1.7">
<BuildAction <BuildAction
parallelizeBuildables = "YES" parallelizeBuildables = "YES"
buildImplicitDependencies = "YES"> buildImplicitDependencies = "YES"
runPostActionsOnFailure = "NO">
<BuildActionEntries> <BuildActionEntries>
<BuildActionEntry <BuildActionEntry
buildForTesting = "YES" buildForTesting = "YES"
@@ -27,7 +28,8 @@
buildConfiguration = "Debug" buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
shouldUseLaunchSchemeArgsEnv = "YES"> shouldUseLaunchSchemeArgsEnv = "YES"
onlyGenerateCoverageForSpecifiedTargets = "NO">
<MacroExpansion> <MacroExpansion>
<BuildableReference <BuildableReference
BuildableIdentifier = "primary" BuildableIdentifier = "primary"
@@ -39,6 +41,8 @@
</MacroExpansion> </MacroExpansion>
<Testables> <Testables>
</Testables> </Testables>
<CommandLineArguments>
</CommandLineArguments>
</TestAction> </TestAction>
<LaunchAction <LaunchAction
buildConfiguration = "Debug" buildConfiguration = "Debug"
@@ -62,6 +66,8 @@
ReferencedContainer = "container:ElementX.xcodeproj"> ReferencedContainer = "container:ElementX.xcodeproj">
</BuildableReference> </BuildableReference>
</BuildableProductRunnable> </BuildableProductRunnable>
<CommandLineArguments>
</CommandLineArguments>
</LaunchAction> </LaunchAction>
<ProfileAction <ProfileAction
buildConfiguration = "Release" buildConfiguration = "Release"
@@ -79,6 +85,8 @@
ReferencedContainer = "container:ElementX.xcodeproj"> ReferencedContainer = "container:ElementX.xcodeproj">
</BuildableReference> </BuildableReference>
</BuildableProductRunnable> </BuildableProductRunnable>
<CommandLineArguments>
</CommandLineArguments>
</ProfileAction> </ProfileAction>
<AnalyzeAction <AnalyzeAction
buildConfiguration = "Debug"> buildConfiguration = "Debug">
@@ -4,7 +4,8 @@
version = "1.7"> version = "1.7">
<BuildAction <BuildAction
parallelizeBuildables = "YES" parallelizeBuildables = "YES"
buildImplicitDependencies = "YES"> buildImplicitDependencies = "YES"
runPostActionsOnFailure = "NO">
<BuildActionEntries> <BuildActionEntries>
<BuildActionEntry <BuildActionEntry
buildForTesting = "YES" buildForTesting = "YES"
@@ -26,7 +27,14 @@
buildConfiguration = "Debug" buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
shouldUseLaunchSchemeArgsEnv = "YES"> shouldUseLaunchSchemeArgsEnv = "YES"
onlyGenerateCoverageForSpecifiedTargets = "NO">
<TestPlans>
<TestPlanReference
default = "YES"
reference = "container:UITests/SupportingFiles/UITests.xctestplan">
</TestPlanReference>
</TestPlans>
<MacroExpansion> <MacroExpansion>
<BuildableReference <BuildableReference
BuildableIdentifier = "primary" BuildableIdentifier = "primary"
@@ -36,12 +44,10 @@
ReferencedContainer = "container:ElementX.xcodeproj"> ReferencedContainer = "container:ElementX.xcodeproj">
</BuildableReference> </BuildableReference>
</MacroExpansion> </MacroExpansion>
<TestPlans> <Testables>
<TestPlanReference </Testables>
reference = "container:UITests/SupportingFiles/UITests.xctestplan" <CommandLineArguments>
default = "YES"> </CommandLineArguments>
</TestPlanReference>
</TestPlans>
</TestAction> </TestAction>
<LaunchAction <LaunchAction
buildConfiguration = "Debug" buildConfiguration = "Debug"
@@ -62,6 +68,8 @@
ReferencedContainer = "container:ElementX.xcodeproj"> ReferencedContainer = "container:ElementX.xcodeproj">
</BuildableReference> </BuildableReference>
</MacroExpansion> </MacroExpansion>
<CommandLineArguments>
</CommandLineArguments>
</LaunchAction> </LaunchAction>
<ProfileAction <ProfileAction
buildConfiguration = "Release" buildConfiguration = "Release"
@@ -69,6 +77,8 @@
savedToolIdentifier = "" savedToolIdentifier = ""
useCustomWorkingDirectory = "NO" useCustomWorkingDirectory = "NO"
debugDocumentVersioning = "YES"> debugDocumentVersioning = "YES">
<CommandLineArguments>
</CommandLineArguments>
<MacroExpansion> <MacroExpansion>
<BuildableReference <BuildableReference
BuildableIdentifier = "primary" BuildableIdentifier = "primary"
@@ -4,7 +4,8 @@
version = "1.7"> version = "1.7">
<BuildAction <BuildAction
parallelizeBuildables = "YES" parallelizeBuildables = "YES"
buildImplicitDependencies = "YES"> buildImplicitDependencies = "YES"
runPostActionsOnFailure = "NO">
<BuildActionEntries> <BuildActionEntries>
<BuildActionEntry <BuildActionEntry
buildForTesting = "YES" buildForTesting = "YES"
@@ -29,6 +30,12 @@
shouldUseLaunchSchemeArgsEnv = "YES" shouldUseLaunchSchemeArgsEnv = "YES"
codeCoverageEnabled = "YES" codeCoverageEnabled = "YES"
onlyGenerateCoverageForSpecifiedTargets = "YES"> onlyGenerateCoverageForSpecifiedTargets = "YES">
<TestPlans>
<TestPlanReference
default = "YES"
reference = "container:UnitTests/SupportingFiles/UnitTests.xctestplan">
</TestPlanReference>
</TestPlans>
<MacroExpansion> <MacroExpansion>
<BuildableReference <BuildableReference
BuildableIdentifier = "primary" BuildableIdentifier = "primary"
@@ -38,6 +45,10 @@
ReferencedContainer = "container:ElementX.xcodeproj"> ReferencedContainer = "container:ElementX.xcodeproj">
</BuildableReference> </BuildableReference>
</MacroExpansion> </MacroExpansion>
<Testables>
</Testables>
<CommandLineArguments>
</CommandLineArguments>
<CodeCoverageTargets> <CodeCoverageTargets>
<BuildableReference <BuildableReference
BuildableIdentifier = "primary" BuildableIdentifier = "primary"
@@ -47,12 +58,6 @@
ReferencedContainer = "container:ElementX.xcodeproj"> ReferencedContainer = "container:ElementX.xcodeproj">
</BuildableReference> </BuildableReference>
</CodeCoverageTargets> </CodeCoverageTargets>
<TestPlans>
<TestPlanReference
reference = "container:UnitTests/SupportingFiles/UnitTests.xctestplan"
default = "YES">
</TestPlanReference>
</TestPlans>
</TestAction> </TestAction>
<LaunchAction <LaunchAction
buildConfiguration = "Debug" buildConfiguration = "Debug"
@@ -73,6 +78,8 @@
ReferencedContainer = "container:ElementX.xcodeproj"> ReferencedContainer = "container:ElementX.xcodeproj">
</BuildableReference> </BuildableReference>
</MacroExpansion> </MacroExpansion>
<CommandLineArguments>
</CommandLineArguments>
</LaunchAction> </LaunchAction>
<ProfileAction <ProfileAction
buildConfiguration = "Release" buildConfiguration = "Release"
@@ -80,6 +87,8 @@
savedToolIdentifier = "" savedToolIdentifier = ""
useCustomWorkingDirectory = "NO" useCustomWorkingDirectory = "NO"
debugDocumentVersioning = "YES"> debugDocumentVersioning = "YES">
<CommandLineArguments>
</CommandLineArguments>
<MacroExpansion> <MacroExpansion>
<BuildableReference <BuildableReference
BuildableIdentifier = "primary" BuildableIdentifier = "primary"
@@ -1,6 +0,0 @@
"NSCameraUsageDescription" = "يحتاج Element X إلى الوصول إلى الكاميرا لالتقاط الصور أو مقاطع الفيديو وإرسالها كرسائل.";
"NSFaceIDUsageDescription" = "يُستخدم Face ID لحماية الوصول إلى حسابك.";
"NSLocationAlwaysAndWhenInUseUsageDescription" = "لمشاركة موقعك المباشر، يحتاج Element X إلى الوصول إلى الموقع عندما يكون التطبيق في الخلفية.";
"NSLocationWhenInUseUsageDescription" = "امنح الوصول إلى الموقع حتى يتمكن Element X من مشاركة موقعك.";
"NSMicrophoneUsageDescription" = "يحتاج Element X إلى الوصول إلى الميكروفون لتسجيل الرسائل الصوتية وإرسالها.";
"NSPhotoLibraryUsageDescription" = "يتيح لك هذا حفظ الصور ومقاطع الفيديو في مكتبة الصور لديك.";
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
@@ -1,64 +0,0 @@
"aeroplane" = "طَائِرة";
"anchor" = "مِرسَاة";
"apple" = "تُفَّاحَة";
"ball" = "كُرَة";
"banana" = "مَوزَة";
"bell" = "جَرَس";
"bicycle" = "دَرّاجَة";
"book" = "كِتَاب";
"butterfly" = "فَرَاشَة";
"cactus" = "صبار";
"cake" = "كَعكَة";
"cat" = "هِرَّة";
"clock" = "سَاعَة";
"cloud" = "سَحابَة";
"corn" = "ذُرَة";
"dog" = "كلب";
"elephant" = "فِيل";
"fire" = "نار";
"fish" = "سَمَكة";
"flag" = "عَلَم";
"flower" = "زَهرَة";
"folder" = "مُجَلَّد";
"gift" = "هَدِيَّة";
"glasses" = "نَظَّارَة";
"globe" = "كُرَةٌ أرضِيَّة";
"guitar" = "غيتار";
"hammer" = "مِطرَقَة";
"hat" = "قُبَّعَة";
"headphones" = "سَمّاعَة رَأس";
"heart" = "قَلب";
"horse" = "حِصَان";
"hourglass" = "سَاعَةٌ رَملِيَّة";
"key" = "مِفتَاح";
"light_bulb" = "مِصبَاح";
"lion" = "أَسَد";
"lock" = "قُفل";
"moon" = "قَمَر";
"mushroom" = "فُطر";
"octopus" = "أُخطُبُوط";
"panda" = "باندَا";
"paperclip" = "مِشبَكُ وَرَق";
"pencil" = "قَلَمُ رَصاص";
"penguin" = "بطريق";
"pig" = "خِنزِير";
"pin" = "دَبُّوس";
"pizza" = "بِيتزا";
"rabbit" = "أَرنَب";
"robot" = "رُوبُوت";
"rocket" = "صَارُوخ";
"rooster" = "دِيك";
"santa" = "سانتا";
"scissors" = "مِقَصّ";
"smiley" = "اِبتِسَامَة";
"spanner" = "مِفتَاحُ رَبط";
"strawberry" = "فَراوِلَة";
"telephone" = "تِلِفُون";
"thumbs_up" = "رَفعُ إِبهَام";
"train" = "قِطَار";
"tree" = "شَجَرَة";
"trophy" = "كَأسُ النَّصر";
"trumpet" = "بُوق";
"turtle" = "سُلحفاة";
"umbrella" = "مِظَلَّة";
"unicorn" = "حصان وحيد القرن";
@@ -1,6 +1,6 @@
"NSCameraUsageDescription" = "Каб зрабіць фота ці відэа і адправіць іх у выглядзе паведамлення, Element X патрабуе доступу да камеры."; "NSCameraUsageDescription" = "Каб зрабіць фота ці відэа і адправіць іх у выглядзе паведамлення, Element X патрабуе доступу да камеры.";
"NSFaceIDUsageDescription" = "Face ID выкарыстоўваецца для доступу да праграмы."; "NSFaceIDUsageDescription" = "Face ID выкарыстоўваецца для доступу да праграмы.";
"NSLocationAlwaysAndWhenInUseUsageDescription" = "To share your location live in chats, location access is needed when the app is in the background."; "NSLocationAlwaysAndWhenInUseUsageDescription" = "To share your live location, Element X needs location access when the app is in the background.";
"NSLocationWhenInUseUsageDescription" = "Дайце доступ да месцазнаходжання, каб Element X мог падзяліцца вашым месцазнаходжаннем."; "NSLocationWhenInUseUsageDescription" = "Дайце доступ да месцазнаходжання, каб Element X мог падзяліцца вашым месцазнаходжаннем.";
"NSMicrophoneUsageDescription" = "Каб запісваць і адпраўляць паведамленні з гукам, Element X патрабуе доступу да мікрафона."; "NSMicrophoneUsageDescription" = "Каб запісваць і адпраўляць паведамленні з гукам, Element X патрабуе доступу да мікрафона.";
"NSPhotoLibraryUsageDescription" = "Дазваляе захоўваць фатаграфіі і відэа ў вашу бібліятэку."; "NSPhotoLibraryUsageDescription" = "Дазваляе захоўваць фатаграфіі і відэа ў вашу бібліятэку.";
@@ -1,4 +1,4 @@
"a11y_add_avatar" = "Дадаць аватар"; "a11y_add_avatar" = "Add avatar";
"a11y_add_reaction" = "Дадаць рэакцыю: %1$@"; "a11y_add_reaction" = "Дадаць рэакцыю: %1$@";
"a11y_address" = "Адрас"; "a11y_address" = "Адрас";
"a11y_avatar" = "Аватар"; "a11y_avatar" = "Аватар";
@@ -6,23 +6,16 @@
"a11y_collapse_message_text_field" = "Minimise message text field"; "a11y_collapse_message_text_field" = "Minimise message text field";
"a11y_create_poll_votes_allowed_decrease" = "Decrease votes allowed per person"; "a11y_create_poll_votes_allowed_decrease" = "Decrease votes allowed per person";
"a11y_create_poll_votes_allowed_increase" = "Increase votes allowed per person"; "a11y_create_poll_votes_allowed_increase" = "Increase votes allowed per person";
"a11y_custom_emoji" = "Custom emoji";
"a11y_delete" = "Выдаліць"; "a11y_delete" = "Выдаліць";
"a11y_duration" = "Працягласць: %1$@"; "a11y_duration" = "Duration: %1$@";
"a11y_edit_avatar" = "Змяніць аватар"; "a11y_edit_avatar" = "Змяніць аватар";
"a11y_edit_room_address_hint" = "Поўны адрас будзе %1$@"; "a11y_edit_room_address_hint" = "Поўны адрас будзе %1$@";
"a11y_expand_message_text_field" = "Expand message text field"; "a11y_expand_message_text_field" = "Expand message text field";
"a11y_gallery_attachment" = "Gallery, attachment %1$d";
"a11y_gallery_failed_scan" = "Gallery, failed scan %1$d";
"a11y_gallery_image" = "Gallery, image %1$d";
"a11y_gallery_scanning" = "Gallery, scanning %1$d";
"a11y_gallery_video" = "Gallery, video %1$d";
"a11y_hide_password" = "Схаваць пароль"; "a11y_hide_password" = "Схаваць пароль";
"a11y_info" = "Інфармацыя"; "a11y_info" = "Інфармацыя";
"a11y_join_call" = "Далучыцца да выкліку"; "a11y_join_call" = "Далучыцца да выкліку";
"a11y_jump_to_bottom" = "Перайсці ўніз"; "a11y_jump_to_bottom" = "Перайсці ўніз";
"a11y_jump_to_unread" = "Перайсці да непрачытаных"; "a11y_jump_to_unread" = "Jump to unread";
"a11y_jump_to_unread_messages" = "Jump to first unread message";
"a11y_notifications_mentions_only" = "Толькі згадкі"; "a11y_notifications_mentions_only" = "Толькі згадкі";
"a11y_notifications_muted" = "Гук адключаны"; "a11y_notifications_muted" = "Гук адключаны";
"a11y_notifications_new_mentions" = "Новыя згадкі"; "a11y_notifications_new_mentions" = "Новыя згадкі";
@@ -40,7 +33,7 @@
"a11y_poll_end" = "Апытанне скончана"; "a11y_poll_end" = "Апытанне скончана";
"a11y_polls_will_remove_selection" = "Will remove previous selection"; "a11y_polls_will_remove_selection" = "Will remove previous selection";
"a11y_polls_winning_answer" = "This is the winning answer"; "a11y_polls_winning_answer" = "This is the winning answer";
"a11y_position" = "Пазіцыя: %1$@"; "a11y_position" = "Position: %1$@";
"a11y_qr_code" = "QR-код"; "a11y_qr_code" = "QR-код";
"a11y_react_with" = "Рэагаваць з %1$@"; "a11y_react_with" = "Рэагаваць з %1$@";
"a11y_react_with_other_emojis" = "Рэагаваць з іншымі эмодзі"; "a11y_react_with_other_emojis" = "Рэагаваць з іншымі эмодзі";
@@ -57,7 +50,6 @@
"a11y_start_call" = "Пазваніць"; "a11y_start_call" = "Пазваніць";
"a11y_start_video_call" = "Start a video call"; "a11y_start_video_call" = "Start a video call";
"a11y_start_voice_call" = "Start a voice call"; "a11y_start_voice_call" = "Start a voice call";
"a11y_status" = "Статус";
"a11y_tombstoned_room" = "Tombstoned room"; "a11y_tombstoned_room" = "Tombstoned room";
"a11y_user_menu" = "Меню карыстальніка"; "a11y_user_menu" = "Меню карыстальніка";
"a11y_video_preview" = "Video preview"; "a11y_video_preview" = "Video preview";
@@ -83,10 +75,9 @@
"action_call" = "Званок"; "action_call" = "Званок";
"action_cancel" = "Скасаваць"; "action_cancel" = "Скасаваць";
"action_cancel_for_now" = "Адмяніць пакуль"; "action_cancel_for_now" = "Адмяніць пакуль";
"action_choose_file" = "Выбраць файл"; "action_choose_file" = "Choose file";
"action_choose_photo" = "Выбраць фота"; "action_choose_photo" = "Выбраць фота";
"action_clear" = "Ачысціць"; "action_clear" = "Ачысціць";
"action_clear_all" = "Clear all";
"action_close" = "Закрыць"; "action_close" = "Закрыць";
"action_complete_verification" = "Праверка завершана"; "action_complete_verification" = "Праверка завершана";
"action_confirm" = "Пацвердзіць"; "action_confirm" = "Пацвердзіць";
@@ -97,10 +88,9 @@
"action_copy_link" = "Скапіраваць спасылку"; "action_copy_link" = "Скапіраваць спасылку";
"action_copy_link_to_message" = "Скапіраваць спасылку на паведамленне"; "action_copy_link_to_message" = "Скапіраваць спасылку на паведамленне";
"action_copy_text" = "Скапіяваць тэкст"; "action_copy_text" = "Скапіяваць тэкст";
"action_copy_to_clipboard" = "Copy to clipboard";
"action_create" = "Стварыць"; "action_create" = "Стварыць";
"action_create_room" = "Стварыце пакой"; "action_create_room" = "Стварыце пакой";
"action_create_space" = "Стварыць прастору"; "action_create_space" = "Create space";
"action_deactivate" = "Дэактываваць"; "action_deactivate" = "Дэактываваць";
"action_deactivate_account" = "Дэактываваць уліковы запіс"; "action_deactivate_account" = "Дэактываваць уліковы запіс";
"action_decline" = "Адхіліць"; "action_decline" = "Адхіліць";
@@ -145,14 +135,13 @@
"action_manage_account_and_devices" = "Manage account & devices"; "action_manage_account_and_devices" = "Manage account & devices";
"action_manage_devices" = "Кіраванне прыладамі"; "action_manage_devices" = "Кіраванне прыладамі";
"action_manage_rooms" = "Manage rooms"; "action_manage_rooms" = "Manage rooms";
"action_mark_as_read" = "Пазначыць як прачытанае";
"action_message" = "Паведамленне"; "action_message" = "Паведамленне";
"action_minimize" = "Minimise"; "action_minimize" = "Minimise";
"action_next" = "Далей"; "action_next" = "Далей";
"action_no" = "Не"; "action_no" = "Не";
"action_not_now" = "Не зараз"; "action_not_now" = "Не зараз";
"action_ok" = "Добра"; "action_ok" = "Добра";
"action_open_context_menu" = "Адкрыць кантэкстнае меню"; "action_open_context_menu" = "Open context menu";
"action_open_settings" = "Налады"; "action_open_settings" = "Налады";
"action_open_with" = "Адкрыць з дапамогай"; "action_open_with" = "Адкрыць з дапамогай";
"action_pin" = "Замацаваць"; "action_pin" = "Замацаваць";
@@ -220,8 +209,7 @@
"call_invalid_audio_device_bluetooth_devices_disabled" = "Element Call does not support using Bluetooth audio devices in this Android version. Please select a different audio device."; "call_invalid_audio_device_bluetooth_devices_disabled" = "Element Call does not support using Bluetooth audio devices in this Android version. Please select a different audio device.";
"common_about" = "Аб праграме"; "common_about" = "Аб праграме";
"common_acceptable_use_policy" = "Палітыка дапушчальнага выкарыстання"; "common_acceptable_use_policy" = "Палітыка дапушчальнага выкарыстання";
"common_account_settings" = "Account settings"; "common_add_account" = "Add an account";
"common_add_account" = "Дадаць уліковы запіс";
"common_add_another_account" = "Add account"; "common_add_another_account" = "Add account";
"common_adding_caption" = "Adding caption"; "common_adding_caption" = "Adding caption";
"common_advanced_settings" = "Пашыраныя налады"; "common_advanced_settings" = "Пашыраныя налады";
@@ -229,7 +217,6 @@
"common_analytics" = "Аналітыка"; "common_analytics" = "Аналітыка";
"common_android_shortcuts_remove_reason_left_room" = "Вы выйшлі з пакоя"; "common_android_shortcuts_remove_reason_left_room" = "Вы выйшлі з пакоя";
"common_android_shortcuts_remove_reason_session_logged_out" = "You were logged out of the session"; "common_android_shortcuts_remove_reason_session_logged_out" = "You were logged out of the session";
"common_app_settings" = "App settings";
"common_appearance" = "Знешні выгляд"; "common_appearance" = "Знешні выгляд";
"common_audio" = "Аўдыя"; "common_audio" = "Аўдыя";
"common_beta" = "Beta"; "common_beta" = "Beta";
@@ -240,20 +227,18 @@
"common_call_started" = "Званок пачаўся"; "common_call_started" = "Званок пачаўся";
"common_call_you_declined" = "You declined a call"; "common_call_you_declined" = "You declined a call";
"common_chat_backup" = "Рэзервовае капіраванне чатаў"; "common_chat_backup" = "Рэзервовае капіраванне чатаў";
"common_chats" = "Chats";
"common_code_block" = "Code block";
"common_copied_to_clipboard" = "Скапіравана ў буфер абмену"; "common_copied_to_clipboard" = "Скапіравана ў буфер абмену";
"common_copyright" = "Аўтарскае права"; "common_copyright" = "Аўтарскае права";
"common_creating_room" = "Стварэнне пакоя…"; "common_creating_room" = "Стварэнне пакоя…";
"common_creating_space" = "Стварэнне прасторы…"; "common_creating_space" = "Creating space…";
"common_current_user_canceled_knock" = "Request canceled"; "common_current_user_canceled_knock" = "Request canceled";
"common_current_user_left_room" = "Выйшаў з пакоя"; "common_current_user_left_room" = "Выйшаў з пакоя";
"common_current_user_left_space" = "Left space"; "common_current_user_left_space" = "Left space";
"common_current_user_rejected_invite" = "Invite declined"; "common_current_user_rejected_invite" = "Invite declined";
"common_date_date_at_time" = "%1$@ у %2$@"; "common_date_date_at_time" = "%1$@ at %2$@";
"common_date_this_month" = "This month"; "common_date_this_month" = "This month";
"common_decryption_error" = "Памылка расшыфроўкі"; "common_decryption_error" = "Памылка расшыфроўкі";
"common_description" = "Апісанне"; "common_description" = "Description";
"common_developer_options" = "Параметры распрацоўшчыка"; "common_developer_options" = "Параметры распрацоўшчыка";
"common_device_id" = "Device ID"; "common_device_id" = "Device ID";
"common_direct_chat" = "Прамы чат"; "common_direct_chat" = "Прамы чат";
@@ -264,7 +249,7 @@
"common_editing" = "Рэдагаванне"; "common_editing" = "Рэдагаванне";
"common_editing_caption" = "Editing caption"; "common_editing_caption" = "Editing caption";
"common_emote" = "* %1$@ %2$@"; "common_emote" = "* %1$@ %2$@";
"common_empty_file" = "Пусты файл"; "common_empty_file" = "Empty file";
"common_encryption" = "Encryption"; "common_encryption" = "Encryption";
"common_encryption_enabled" = "Шыфраванне ўключана"; "common_encryption_enabled" = "Шыфраванне ўключана";
"common_ends_at" = "Ends at %1$@"; "common_ends_at" = "Ends at %1$@";
@@ -276,15 +261,13 @@
"common_favourite" = "Абраць"; "common_favourite" = "Абраць";
"common_favourited" = "Абранае"; "common_favourited" = "Абранае";
"common_file" = "Файл"; "common_file" = "Файл";
"common_file_deleted" = "Файл выдалены"; "common_file_deleted" = "File deleted";
"common_file_saved" = "Файл захаваны"; "common_file_saved" = "File saved";
"common_forward_message" = "Перасылка паведамлення"; "common_forward_message" = "Перасылка паведамлення";
"common_forward_to" = "Forward to";
"common_frequently_used" = "Frequently used"; "common_frequently_used" = "Frequently used";
"common_gallery" = "Галерэя"; "common_gallery" = "Gallery";
"common_gif" = "GIF"; "common_gif" = "GIF";
"common_group_call_in_progress" = "Group call in progress"; "common_group_call_in_progress" = "Group call in progress";
"common_header_rooms" = "Rooms";
"common_image" = "Відарыс"; "common_image" = "Відарыс";
"common_in_reply_to" = "У адказ на %1$@"; "common_in_reply_to" = "У адказ на %1$@";
"common_invite_unknown_profile" = "Гэты Matrix ID не знойдзены, таму запрашэнне можа быць не атрымана."; "common_invite_unknown_profile" = "Гэты Matrix ID не знойдзены, таму запрашэнне можа быць не атрымана.";
@@ -297,25 +280,20 @@
"common_live_location_ended" = "Live location ended"; "common_live_location_ended" = "Live location ended";
"common_loading" = "Загрузка…"; "common_loading" = "Загрузка…";
"common_loading_more" = "Loading more…"; "common_loading_more" = "Loading more…";
"common_location_sharing" = "Location sharing";
"common_media_upload_quality" = "Media upload quality";
"common_message" = "Паведамленне"; "common_message" = "Паведамленне";
"common_message_actions" = "Дзеянні з паведамленням"; "common_message_actions" = "Дзеянні з паведамленням";
"common_message_failed_to_send" = "Message failed to send"; "common_message_failed_to_send" = "Message failed to send";
"common_message_layout" = "Выгляд паведамлення"; "common_message_layout" = "Выгляд паведамлення";
"common_message_removed" = "Паведамленне выдалена"; "common_message_removed" = "Паведамленне выдалена";
"common_moderation_and_safety" = "Moderation & safety";
"common_modern" = "Сучасны"; "common_modern" = "Сучасны";
"common_mute" = "Адкл. гук"; "common_mute" = "Адкл. гук";
"common_name" = "Імя"; "common_name" = "Імя";
"common_name_and_id" = "%1$@ (%2$@)"; "common_name_and_id" = "%1$@ (%2$@)";
"common_no_results" = "Вынікаў няма"; "common_no_results" = "Вынікаў няма";
"common_no_results_for" = "There are no results for “%1$@”. Try a new search term.";
"common_no_room_name" = "Няма назвы пакоя"; "common_no_room_name" = "Няма назвы пакоя";
"common_no_space_name" = "No space name"; "common_no_space_name" = "No space name";
"common_not_encrypted" = "Не зашыфравана"; "common_not_encrypted" = "Не зашыфравана";
"common_offline" = "Па-за сеткай"; "common_offline" = "Па-за сеткай";
"common_on_a_call" = "On a call";
"common_open_source_licenses" = "Ліцэнзіі з адкрытым зыходным кодам"; "common_open_source_licenses" = "Ліцэнзіі з адкрытым зыходным кодам";
"common_optic_id_ios" = "Optic ID"; "common_optic_id_ios" = "Optic ID";
"common_or" = "або"; "common_or" = "або";
@@ -349,9 +327,8 @@
"common_replying_to" = "Адказвае на %1$@"; "common_replying_to" = "Адказвае на %1$@";
"common_report_a_problem" = "Паведаміць аб праблеме"; "common_report_a_problem" = "Паведаміць аб праблеме";
"common_report_submitted" = "Скарга прынята"; "common_report_submitted" = "Скарга прынята";
"common_results_for" = "Results for “%1$@”";
"common_rich_text_editor" = "Рэдактар фарматаванага тэксту"; "common_rich_text_editor" = "Рэдактар фарматаванага тэксту";
"common_role" = "Роля"; "common_role" = "Role";
"common_room" = "Пакой"; "common_room" = "Пакой";
"common_room_name" = "Назва пакоя"; "common_room_name" = "Назва пакоя";
"common_room_name_placeholder" = "напрыклад, назва вашага праекта"; "common_room_name_placeholder" = "напрыклад, назва вашага праекта";
@@ -377,7 +354,6 @@
"common_shared_live_location" = "Shared live location"; "common_shared_live_location" = "Shared live location";
"common_shared_location" = "Абагулена месцазнаходжанне"; "common_shared_location" = "Абагулена месцазнаходжанне";
"common_shared_space" = "Shared space"; "common_shared_space" = "Shared space";
"common_signed_in" = "Signed in";
"common_signing_out" = "Выхад"; "common_signing_out" = "Выхад";
"common_something_went_wrong" = "Нешта пайшло не так"; "common_something_went_wrong" = "Нешта пайшло не так";
"common_something_went_wrong_message" = "We encountered an issue. Please try again."; "common_something_went_wrong_message" = "We encountered an issue. Please try again.";
@@ -389,7 +365,6 @@
"common_success" = "Поспех"; "common_success" = "Поспех";
"common_suggested" = "Suggested"; "common_suggested" = "Suggested";
"common_suggestions" = "Прапановы"; "common_suggestions" = "Прапановы";
"common_switch_accounts" = "Switch accounts";
"common_syncing" = "Сінхранізацыя"; "common_syncing" = "Сінхранізацыя";
"common_text" = "Тэкст"; "common_text" = "Тэкст";
"common_third_party_notices" = "Паведамленні трэціх асоб"; "common_third_party_notices" = "Паведамленні трэціх асоб";
@@ -418,11 +393,11 @@
"common_verify_identity" = "Verify identity"; "common_verify_identity" = "Verify identity";
"common_verify_user" = "Verify user"; "common_verify_user" = "Verify user";
"common_video" = "Відэа"; "common_video" = "Відэа";
"common_video_quality_high" = "Высокая якасць"; "common_video_quality_high" = "High quality";
"common_video_quality_high_description" = "Best quality but larger file size"; "common_video_quality_high_description" = "Best quality but larger file size";
"common_video_quality_low" = "Нізкая якасць"; "common_video_quality_low" = "Low quality";
"common_video_quality_low_description" = "Fastest upload speed and smallest file size"; "common_video_quality_low_description" = "Fastest upload speed and smallest file size";
"common_video_quality_standard" = "Стандартная якасць"; "common_video_quality_standard" = "Standard quality";
"common_video_quality_standard_description" = "Balance of quality and upload speed"; "common_video_quality_standard_description" = "Balance of quality and upload speed";
"common_voice_message" = "Галасавое паведамленне"; "common_voice_message" = "Галасавое паведамленне";
"common_waiting" = "Чакаем…"; "common_waiting" = "Чакаем…";
@@ -430,14 +405,12 @@
"common_waiting_live_location" = "Waiting for live location…"; "common_waiting_live_location" = "Waiting for live location…";
"common_world_readable_history" = "Anyone can see history"; "common_world_readable_history" = "Anyone can see history";
"common_you" = "Вы"; "common_you" = "Вы";
"common_your_account" = "Your account";
"confirm_recovery_key_banner_message" = "Пацвердзіце свой ключ аднаўлення, каб захаваць доступ да сховішча ключоў і гісторыі паведамленняў."; "confirm_recovery_key_banner_message" = "Пацвердзіце свой ключ аднаўлення, каб захаваць доступ да сховішча ключоў і гісторыі паведамленняў.";
"confirm_recovery_key_banner_primary_button_title" = "Enter your recovery key"; "confirm_recovery_key_banner_primary_button_title" = "Enter your recovery key";
"confirm_recovery_key_banner_secondary_button_title" = "Forgot your recovery key?"; "confirm_recovery_key_banner_secondary_button_title" = "Forgot your recovery key?";
"confirm_recovery_key_banner_title" = "Ваша сховішча ключоў не сінхранізавана"; "confirm_recovery_key_banner_title" = "Ваша сховішча ключоў не сінхранізавана";
"content_scanner_not_found" = "Download not available."; "content_scanner_not_found" = "Download not available.";
"content_scanner_not_found_title" = "Something went wrong"; "content_scanner_not_found_title" = "File not found";
"content_scanner_scanning" = "Scanning…";
"content_scanner_unsafe_message" = "Preview and download have been disabled."; "content_scanner_unsafe_message" = "Preview and download have been disabled.";
"content_scanner_unsafe_title" = "The file is not safe"; "content_scanner_unsafe_title" = "The file is not safe";
"crash_detection_dialog_content" = "Пры апошнім выкарыстанні %1$@ адбыўся збой. Хочаце абагуліць справаздачу аб збоі?"; "crash_detection_dialog_content" = "Пры апошнім выкарыстанні %1$@ адбыўся збой. Хочаце абагуліць справаздачу аб збоі?";
@@ -460,7 +433,7 @@
"crypto_identity_change_profile_pin_violation" = "%1$@’s digital identity was reset."; "crypto_identity_change_profile_pin_violation" = "%1$@’s digital identity was reset.";
"crypto_identity_change_verification_violation_new" = "%1$@’s %2$@ digital identity was reset. %3$@"; "crypto_identity_change_verification_violation_new" = "%1$@’s %2$@ digital identity was reset. %3$@";
"crypto_identity_change_withdraw_verification_action" = "Withdraw verification"; "crypto_identity_change_withdraw_verification_action" = "Withdraw verification";
"dialog_allow_access" = "Дазволіць доступ"; "dialog_allow_access" = "Allow access";
"dialog_confirm_link_message" = "The link %1$@ is taking you to another site %2$@\n\nAre you sure you want to continue?"; "dialog_confirm_link_message" = "The link %1$@ is taking you to another site %2$@\n\nAre you sure you want to continue?";
"dialog_confirm_link_title" = "Double-check this link"; "dialog_confirm_link_title" = "Double-check this link";
"dialog_default_video_quality_selector_subtitle" = "Select the default quality of videos you upload."; "dialog_default_video_quality_selector_subtitle" = "Select the default quality of videos you upload.";
@@ -511,11 +484,6 @@
"error_no_compatible_app_found" = "Не знойдзена сумяшчальная праграма для выканання гэтага дзеяння."; "error_no_compatible_app_found" = "Не знойдзена сумяшчальная праграма для выканання гэтага дзеяння.";
"error_room_address_already_exists" = "This room address already exists. Please try editing the room address field or change the room name"; "error_room_address_already_exists" = "This room address already exists. Please try editing the room address field or change the room name";
"error_room_address_invalid_symbols" = "Some characters are not allowed. Only letters, digits and the following symbols are supported ! $ & ‘ ( ) * + / ; = ? @ [ ] - . _"; "error_room_address_invalid_symbols" = "Some characters are not allowed. Only letters, digits and the following symbols are supported ! $ & ‘ ( ) * + / ; = ? @ [ ] - . _";
"error_sending_failure_invalid_mime_type" = "Invalid mime type: %@";
"error_sending_failure_missing_media_content" = "Missing media content";
"error_sending_failure_other" = "Error details: %@";
"error_sending_failure_sending_from_unverified_device" = "Sending from unverified device";
"error_sending_failure_unknown" = "Unknown error";
"error_some_messages_have_not_been_sent" = "Некаторыя паведамленні не былі адпраўлены"; "error_some_messages_have_not_been_sent" = "Некаторыя паведамленні не былі адпраўлены";
"error_unknown" = "Выбачце, адбылася памылка"; "error_unknown" = "Выбачце, адбылася памылка";
"error.account_already_logged_in" = "You're already logged in on this device as %1$@."; "error.account_already_logged_in" = "You're already logged in on this device as %1$@.";
@@ -545,8 +513,6 @@
"notification_invitation_action_reject" = "Адхіліць"; "notification_invitation_action_reject" = "Адхіліць";
"notification_invite_body" = "Запрасіў(-ла) вас у чат"; "notification_invite_body" = "Запрасіў(-ла) вас у чат";
"notification_invite_body_with_sender" = "%1$@ запрасіў(-ла) вас у чат"; "notification_invite_body_with_sender" = "%1$@ запрасіў(-ла) вас у чат";
"notification_knock_request_body" = "Requested to join";
"notification_live_location_started_body" = "Started sharing their live location";
"notification_mentioned_you_body" = "Згадаў(-ла) вас: %1$@"; "notification_mentioned_you_body" = "Згадаў(-ла) вас: %1$@";
"notification_new_messages" = "Новыя паведамленні"; "notification_new_messages" = "Новыя паведамленні";
"notification_reaction_body" = "Адрэагаваў(-ла) на %1$@"; "notification_reaction_body" = "Адрэагаваў(-ла) на %1$@";
@@ -634,8 +600,8 @@
"screen_advanced_settings_share_presence_description" = "Калі гэта выключана, вы не зможаце адпраўляць або атрымліваць апавяшчэнні аб прачытанні або апавяшчэнні аб наборы тэксту"; "screen_advanced_settings_share_presence_description" = "Калі гэта выключана, вы не зможаце адпраўляць або атрымліваць апавяшчэнні аб прачытанні або апавяшчэнні аб наборы тэксту";
"screen_advanced_settings_show_media_timeline_always_hide" = "Always hide"; "screen_advanced_settings_show_media_timeline_always_hide" = "Always hide";
"screen_advanced_settings_show_media_timeline_always_show" = "Always show"; "screen_advanced_settings_show_media_timeline_always_show" = "Always show";
"screen_advanced_settings_show_media_timeline_private_rooms" = "Show in private rooms"; "screen_advanced_settings_show_media_timeline_private_rooms" = "In private rooms";
"screen_advanced_settings_show_media_timeline_subtitle" = "Hidden media can always be shown by tapping on it."; "screen_advanced_settings_show_media_timeline_subtitle" = "A hidden media can always be shown by tapping on it";
"screen_advanced_settings_show_media_timeline_title" = "Show media in timeline"; "screen_advanced_settings_show_media_timeline_title" = "Show media in timeline";
"screen_advanced_settings_view_source_description" = "Уключыце опцыю для прагляду паведамленняў у хроніцы."; "screen_advanced_settings_view_source_description" = "Уключыце опцыю для прагляду паведамленняў у хроніцы.";
"screen_analytics_prompt_data_usage" = "Мы не будзем запісваць або прафіляваць любыя асабістыя даныя"; "screen_analytics_prompt_data_usage" = "Мы не будзем запісваць або прафіляваць любыя асабістыя даныя";
@@ -731,22 +697,14 @@
"screen_change_server_error_element_pro_required_title" = "Element Pro required"; "screen_change_server_error_element_pro_required_title" = "Element Pro required";
"screen_change_server_error_invalid_homeserver" = "Нам не ўдалося звязацца з гэтым хатнім серверам. Упэўніцеся, што вы правільна ўвялі URL-адрас хатняга сервера. Калі URL-адрас пазначаны правільна, звярніцеся да адміністратара хатняга сервера за дадатковай дапамогай."; "screen_change_server_error_invalid_homeserver" = "Нам не ўдалося звязацца з гэтым хатнім серверам. Упэўніцеся, што вы правільна ўвялі URL-адрас хатняга сервера. Калі URL-адрас пазначаны правільна, звярніцеся да адміністратара хатняга сервера за дадатковай дапамогай.";
"screen_change_server_error_invalid_well_known" = "Sliding sync недаступны з-за праблемы ў вядомым файле:\n%1$@"; "screen_change_server_error_invalid_well_known" = "Sliding sync недаступны з-за праблемы ў вядомым файле:\n%1$@";
"screen_change_server_error_no_sliding_sync_message" = "The selected account provider does not support sliding sync. The server needs to be upgraded to use %1$@."; "screen_change_server_error_no_sliding_sync_message" = "The selected account provider does not support sliding sync. An upgrade to the server is needed to use %1$@.";
"screen_change_server_error_unauthorized_homeserver" = "%1$@ is not allowed to connect to %2$@."; "screen_change_server_error_unauthorized_homeserver" = "%1$@ is not allowed to connect to %2$@.";
"screen_change_server_error_unauthorized_homeserver_content" = "This app has been configured to allow: %1$@."; "screen_change_server_error_unauthorized_homeserver_content" = "This app has been configured to allow: %1$@.";
"screen_change_server_error_unauthorized_homeserver_title" = "Account provider %1$@ not allowed."; "screen_change_server_error_unauthorized_homeserver_title" = "Account provider %1$@ not allowed.";
"screen_change_server_form_header" = "URL хатняга сервера"; "screen_change_server_form_header" = "URL хатняга сервера";
"screen_change_server_form_notice" = "Enter a domain address."; "screen_change_server_form_notice" = "Enter a domain address.";
"screen_change_server_navigation_title_login" = "Sign in";
"screen_change_server_navigation_title_register" = "Create account";
"screen_change_server_subtitle" = "Які адрас вашага сервера?"; "screen_change_server_subtitle" = "Які адрас вашага сервера?";
"screen_change_server_textfield_footer_login" = "If your account is provided by your company or a community, then change the account provider (example: companyname.com).";
"screen_change_server_textfield_footer_register" = "Create an account on matrix.org for free. If you want to create an account with a different provider, then change it accordingly (example: communityname.org).";
"screen_change_server_textfield_header" = "Account provider";
"screen_change_server_textfield_placeholder" = "example.com";
"screen_change_server_title" = "Выберыце свой сервер"; "screen_change_server_title" = "Выберыце свой сервер";
"screen_change_server_title_login" = "Enter your account provider";
"screen_change_server_title_register" = "Choose an account provider";
"screen_chat_backup_key_backup_action_disable" = "Выключыць рэзервовае капіраванне"; "screen_chat_backup_key_backup_action_disable" = "Выключыць рэзервовае капіраванне";
"screen_chat_backup_key_backup_action_enable" = "Уключыце рэзервовае капіраванне"; "screen_chat_backup_key_backup_action_enable" = "Уключыце рэзервовае капіраванне";
"screen_chat_backup_key_backup_description" = "Надзейна захоўвайце вашу крыптаграфічную ідэнтыфікацыю і ключы паведамленняў на серверы. Гэта дазволіць вам праглядаць гісторыю паведамленняў на любых новых прыладах.%1$@ ."; "screen_chat_backup_key_backup_description" = "Надзейна захоўвайце вашу крыптаграфічную ідэнтыфікацыю і ключы паведамленняў на серверы. Гэта дазволіць вам праглядаць гісторыю паведамленняў на любых новых прыладах.%1$@ .";
@@ -793,7 +751,7 @@
"screen_create_room_private_option_description" = "Толькі запрошаныя людзі могуць атрымаць доступ да гэтага пакоя. Усе паведамленні абаронены end-to-end шыфраваннем."; "screen_create_room_private_option_description" = "Толькі запрошаныя людзі могуць атрымаць доступ да гэтага пакоя. Усе паведамленні абаронены end-to-end шыфраваннем.";
"screen_create_room_private_option_title" = "Private"; "screen_create_room_private_option_title" = "Private";
"screen_create_room_public_option_description" = "Любы можа знайсці гэты пакой. \nВы можаце змяніць гэта ў любы час у наладах пакоя."; "screen_create_room_public_option_description" = "Любы можа знайсці гэты пакой. \nВы можаце змяніць гэта ў любы час у наладах пакоя.";
"screen_create_room_public_option_short_description" = "Anyone can join, including people outside your organisation."; "screen_create_room_public_option_short_description" = "Anyone can join.";
"screen_create_room_public_option_title" = "Public"; "screen_create_room_public_option_title" = "Public";
"screen_create_room_room_access_section_knocking_option_description" = "Anyone can ask to join but an administrator or a moderator must accept the request."; "screen_create_room_room_access_section_knocking_option_description" = "Anyone can ask to join but an administrator or a moderator must accept the request.";
"screen_create_room_room_access_section_knocking_option_title" = "Папрасіце далучыцца"; "screen_create_room_room_access_section_knocking_option_title" = "Папрасіце далучыцца";
@@ -801,7 +759,7 @@
"screen_create_room_room_access_section_knocking_restricted_option_title" = "Ask to join"; "screen_create_room_room_access_section_knocking_restricted_option_title" = "Ask to join";
"screen_create_room_room_access_section_private_option_description" = "Only people invited can join."; "screen_create_room_room_access_section_private_option_description" = "Only people invited can join.";
"screen_create_room_room_access_section_private_option_title" = "Private"; "screen_create_room_room_access_section_private_option_title" = "Private";
"screen_create_room_room_access_section_public_option_description" = "Anyone can join, including people outside your organisation."; "screen_create_room_room_access_section_public_option_description" = "Anyone can join.";
"screen_create_room_room_access_section_public_option_title" = "Public"; "screen_create_room_room_access_section_public_option_title" = "Public";
"screen_create_room_room_access_section_restricted_option_description" = "Anyone in %1$@ can join."; "screen_create_room_room_access_section_restricted_option_description" = "Anyone in %1$@ can join.";
"screen_create_room_room_access_section_restricted_option_title" = "Standard"; "screen_create_room_room_access_section_restricted_option_title" = "Standard";
@@ -966,10 +924,6 @@
"screen_knock_requests_list_empty_state_title" = "No pending request to join"; "screen_knock_requests_list_empty_state_title" = "No pending request to join";
"screen_knock_requests_list_initial_loading_title" = "Loading requests to join…"; "screen_knock_requests_list_initial_loading_title" = "Loading requests to join…";
"screen_knock_requests_list_title" = "Requests to join"; "screen_knock_requests_list_title" = "Requests to join";
"screen_labs_enable_gallery" = "Gallery messages";
"screen_labs_enable_gallery_description" = "Send multiple images or videos in one go. Stable on mobile, but not yet supported by web.";
"screen_labs_enable_knocking" = "Ask to join";
"screen_labs_enable_knocking_description" = "Users can request access to a room that is not open for anyone to join. Stable on mobile, web implementation exists but is experimental.";
"screen_labs_enable_threads" = "Enable thread replies"; "screen_labs_enable_threads" = "Enable thread replies";
"screen_labs_enable_threads_description" = "The app will restart to apply this change."; "screen_labs_enable_threads_description" = "The app will restart to apply this change.";
"screen_labs_header_description" = "Try out our latest ideas in development. These features are not finalised; they may be unstable, may change."; "screen_labs_header_description" = "Try out our latest ideas in development. These features are not finalised; they may be unstable, may change.";
@@ -978,11 +932,11 @@
"screen_leave_space_choose_owners_action" = "Choose owners"; "screen_leave_space_choose_owners_action" = "Choose owners";
"screen_leave_space_last_admin_info" = "%1$@ (Admin)"; "screen_leave_space_last_admin_info" = "%1$@ (Admin)";
"screen_leave_space_subtitle" = "Select the rooms you’d like to leave which you're not the only administrator for:"; "screen_leave_space_subtitle" = "Select the rooms you’d like to leave which you're not the only administrator for:";
"screen_leave_space_subtitle_last_admin" = "You need to assign another administrator for this space before you can leave."; "screen_leave_space_subtitle_last_admin" = "You need to assign another admin for this space before you can leave.";
"screen_leave_space_subtitle_last_owner" = "You are the only owner of %1$@. You need to transfer ownership to someone else before you leave."; "screen_leave_space_subtitle_last_owner" = "You are the only owner of %1$@. You need to transfer ownership to someone else before you leave.";
"screen_leave_space_subtitle_only_last_admin" = "You will not be removed from the following room(s) because you're the only administrator:"; "screen_leave_space_subtitle_only_last_admin" = "You will not be removed from the following room(s) because you're the only administrator:";
"screen_leave_space_title" = "Leave %1$@?"; "screen_leave_space_title" = "Leave %1$@?";
"screen_leave_space_title_last_admin" = "You are the only administrator for %1$@"; "screen_leave_space_title_last_admin" = "You are the only admin for %1$@";
"screen_leave_space_title_last_owner" = "Transfer ownership"; "screen_leave_space_title_last_owner" = "Transfer ownership";
"screen_link_new_device_authentication_reason_ios" = "Confirm it's you before linking a new device."; "screen_link_new_device_authentication_reason_ios" = "Confirm it's you before linking a new device.";
"screen_link_new_device_desktop_scanning_title" = "Сканіраваць QR-код"; "screen_link_new_device_desktop_scanning_title" = "Сканіраваць QR-код";
@@ -990,7 +944,6 @@
"screen_link_new_device_desktop_step3" = "Адсканіруйце QR-код з дапамогай гэтай прылады"; "screen_link_new_device_desktop_step3" = "Адсканіруйце QR-код з дапамогай гэтай прылады";
"screen_link_new_device_desktop_submit" = "Гатовы да сканіравання"; "screen_link_new_device_desktop_submit" = "Гатовы да сканіравання";
"screen_link_new_device_desktop_title" = "Open %1$@ on a desktop computer to get the QR code"; "screen_link_new_device_desktop_title" = "Open %1$@ on a desktop computer to get the QR code";
"screen_link_new_device_desktop_warning" = "Only scan a QR code after following the steps above on your own device. Never scan a code sent by another person.";
"screen_link_new_device_enter_number_error_numbers_do_not_match" = "The numbers don’t match"; "screen_link_new_device_enter_number_error_numbers_do_not_match" = "The numbers don’t match";
"screen_link_new_device_enter_number_notice" = "Enter 2-digit code"; "screen_link_new_device_enter_number_notice" = "Enter 2-digit code";
"screen_link_new_device_enter_number_subtitle" = "This will verify that the connection to your other device is secure."; "screen_link_new_device_enter_number_subtitle" = "This will verify that the connection to your other device is secure.";
@@ -1017,8 +970,6 @@
"screen_live_location_sheet_nobody_sharing" = "Nobody is sharing their location"; "screen_live_location_sheet_nobody_sharing" = "Nobody is sharing their location";
"screen_live_location_sheet_sharing_live_location" = "Sharing live location"; "screen_live_location_sheet_sharing_live_location" = "Sharing live location";
"screen_live_location_sheet_title" = "On the map"; "screen_live_location_sheet_title" = "On the map";
"screen_local_network_opt_in_subtitle" = "Your homeserver is on your local network. To connect, %1$@ needs permission to reach devices on this network.";
"screen_local_network_opt_in_title" = "Allow access to local network";
"screen_login_error_deactivated_account" = "Гэты ўліковы запіс быў выдалены."; "screen_login_error_deactivated_account" = "Гэты ўліковы запіс быў выдалены.";
"screen_login_error_invalid_credentials" = "Няправільнае імя карыстальніка і/або пароль"; "screen_login_error_invalid_credentials" = "Няправільнае імя карыстальніка і/або пароль";
"screen_login_error_invalid_user_id" = "Гэта несапраўдны ідэнтыфікатар карыстальніка. Чаканы фармат: ‘@user:homeserver.org’"; "screen_login_error_invalid_user_id" = "Гэта несапраўдны ідэнтыфікатар карыстальніка. Чаканы фармат: ‘@user:homeserver.org’";
@@ -1069,16 +1020,10 @@
"screen_missing_key_backup_open_element_classic" = "Open Element Classic"; "screen_missing_key_backup_open_element_classic" = "Open Element Classic";
"screen_missing_key_backup_step_1" = "Open Element Classic on your device"; "screen_missing_key_backup_step_1" = "Open Element Classic on your device";
"screen_missing_key_backup_step_2_ios" = "Go to User settings > Security"; "screen_missing_key_backup_step_2_ios" = "Go to User settings > Security";
"screen_missing_key_backup_step_3_ios" = "Scroll down to Chat Backup and tap on Set up"; "screen_missing_key_backup_step_3_ios" = "Scroll down to Secure Backup and tap on Set up";
"screen_missing_key_backup_step_4" = "Follow the instructions to enable your key storage"; "screen_missing_key_backup_step_4" = "Follow the instructions to enable your key storage";
"screen_missing_key_backup_step_5" = "Come back to %1$@"; "screen_missing_key_backup_step_5" = "Come back to %1$@";
"screen_missing_key_backup_title" = "Enable your key storage before proceeding to %1$@"; "screen_missing_key_backup_title" = "Enable your key storage before proceeding to %1$@";
"screen_moderation_and_safety_invites_heading" = "Invites";
"screen_moderation_and_safety_other_users_heading" = "Other users";
"screen_moderation_and_safety_share_presence_heading" = "Your appearance";
"screen_multi_account_announcement_action" = "Add account";
"screen_multi_account_announcement_description" = "Go to %1$@ to sign into another account. Then you can easily switch between them.";
"screen_multi_account_announcement_title" = "You can now add multiple accounts";
"screen_notification_optin_subtitle" = "Вы можаце змяніць налады пазней."; "screen_notification_optin_subtitle" = "Вы можаце змяніць налады пазней.";
"screen_notification_optin_title" = "Дазвольце апавяшчэнні і ніколі не прапускайце іх"; "screen_notification_optin_title" = "Дазвольце апавяшчэнні і ніколі не прапускайце іх";
"screen_notification_settings_additional_settings_section_title" = "Дадатковыя налады"; "screen_notification_settings_additional_settings_section_title" = "Дадатковыя налады";
@@ -1107,8 +1052,6 @@
"screen_notification_settings_mode_mentions" = "Згадванні"; "screen_notification_settings_mode_mentions" = "Згадванні";
"screen_notification_settings_notification_section_title" = "Апавясціць мяне"; "screen_notification_settings_notification_section_title" = "Апавясціць мяне";
"screen_notification_settings_room_mention_label" = "Апавясціць пра @room"; "screen_notification_settings_room_mention_label" = "Апавясціць пра @room";
"screen_notification_settings_show_all_activity_subtitle" = "Dots or number of unread messages";
"screen_notification_settings_show_all_activity_title" = "Show all activity in the room list";
"screen_notification_settings_sound_custom_fallback" = "Custom"; "screen_notification_settings_sound_custom_fallback" = "Custom";
"screen_notification_settings_sound_custom_sound_button_title" = "Custom sound..."; "screen_notification_settings_sound_custom_sound_button_title" = "Custom sound...";
"screen_notification_settings_sound_delete_sound_error_title" = "Error deleting file"; "screen_notification_settings_sound_delete_sound_error_title" = "Error deleting file";
@@ -1169,14 +1112,6 @@
"screen_polls_history_filter_ongoing" = "Бягучыя"; "screen_polls_history_filter_ongoing" = "Бягучыя";
"screen_polls_history_filter_past" = "Мінулыя"; "screen_polls_history_filter_past" = "Мінулыя";
"screen_polls_history_title" = "Апытанні"; "screen_polls_history_title" = "Апытанні";
"screen_ptt_settings_battery_optimization" = "Ignore battery optimisation";
"screen_ptt_settings_battery_optimization_description" = "Stay active in background";
"screen_ptt_settings_covert_mode" = "Covert mode";
"screen_ptt_settings_covert_mode_description" = "Mute all channels";
"screen_ptt_settings_lock_screen" = "Show on lock screen";
"screen_ptt_settings_lock_screen_description" = "Access from the lock screen";
"screen_ptt_settings_system_overlay" = "Enable system overlay";
"screen_ptt_settings_system_overlay_description" = "Access a floating action button";
"screen_push_history_title" = "Push history"; "screen_push_history_title" = "Push history";
"screen_qr_code_login_connecting_subtitle" = "Ўсталяванне бяспечнага злучэння"; "screen_qr_code_login_connecting_subtitle" = "Ўсталяванне бяспечнага злучэння";
"screen_qr_code_login_connection_note_secure_state_description" = "Не атрымалася ўсталяваць бяспечнае злучэнне з новай прыладай. Існуючыя прылады па-ранейшаму ў бяспецы, і вам не трэба турбавацца пра іх."; "screen_qr_code_login_connection_note_secure_state_description" = "Не атрымалася ўсталяваць бяспечнае злучэнне з новай прыладай. Існуючыя прылады па-ранейшаму ў бяспецы, і вам не трэба турбавацца пра іх.";
@@ -1254,7 +1189,7 @@
"screen_report_content_hint" = "Прычына, па якой вы паскардзіліся на гэты змест"; "screen_report_content_hint" = "Прычына, па якой вы паскардзіліся на гэты змест";
"screen_report_room_leave_failed_alert_message" = "Your report was submitted successfully, but we encountered an issue while trying to leave the room. Please try again."; "screen_report_room_leave_failed_alert_message" = "Your report was submitted successfully, but we encountered an issue while trying to leave the room. Please try again.";
"screen_report_room_leave_failed_alert_title" = "Unable to Leave Room"; "screen_report_room_leave_failed_alert_title" = "Unable to Leave Room";
"screen_report_room_reason_footer" = "Report this chat to your account provider. If the messages are encrypted, your account provider will not be able to read them."; "screen_report_room_reason_footer" = "Report this room to your admin. If the messages are encrypted, your admin will not be able to read them.";
"screen_report_room_reason_placeholder" = "Describe the reason to report…"; "screen_report_room_reason_placeholder" = "Describe the reason to report…";
"screen_report_room_title" = "Report room"; "screen_report_room_title" = "Report room";
"screen_reset_encryption_confirmation_alert_action" = "Так, скінуць зараз"; "screen_reset_encryption_confirmation_alert_action" = "Так, скінуць зараз";
@@ -1321,14 +1256,7 @@
"screen_room_change_role_section_users" = "Удзельнікі"; "screen_room_change_role_section_users" = "Удзельнікі";
"screen_room_change_role_unsaved_changes_description" = "У вас ёсць незахаваныя змены."; "screen_room_change_role_unsaved_changes_description" = "У вас ёсць незахаваныя змены.";
"screen_room_change_role_unsaved_changes_title" = "Захаваць змены?"; "screen_room_change_role_unsaved_changes_title" = "Захаваць змены?";
"screen_room_confirm_removal_reason_label" = "Reason (optional)";
"screen_room_confirm_removal_reason_placeholder" = "Enter reason…";
"screen_room_confirm_removal_reason_supporting_text" = "(Optional)";
"screen_room_confirm_removal_title" = "Remove message?";
"screen_room_details_add_topic_title" = "Дадаць тэму"; "screen_room_details_add_topic_title" = "Дадаць тэму";
"screen_room_details_audio_push_to_talk" = "Push to talk";
"screen_room_details_audio_title" = "Room Audio";
"screen_room_details_audio_video_calls" = "Video calls";
"screen_room_details_badge_encrypted" = "Зашыфраваны"; "screen_room_details_badge_encrypted" = "Зашыфраваны";
"screen_room_details_badge_not_encrypted" = "Не зашыфраваны"; "screen_room_details_badge_not_encrypted" = "Не зашыфраваны";
"screen_room_details_badge_public" = "Публічны пакой"; "screen_room_details_badge_public" = "Публічны пакой";
@@ -1354,9 +1282,6 @@
"screen_room_details_profile_row_title" = "Профіль"; "screen_room_details_profile_row_title" = "Профіль";
"screen_room_details_requests_to_join_title" = "Requests to join"; "screen_room_details_requests_to_join_title" = "Requests to join";
"screen_room_details_roles_and_permissions" = "Ролі і дазволы"; "screen_room_details_roles_and_permissions" = "Ролі і дазволы";
"screen_room_details_room_audio_ptt" = "Push to talk";
"screen_room_details_room_audio_title" = "Room Audio";
"screen_room_details_room_audio_video_calls" = "Video calls";
"screen_room_details_room_name_label" = "Імя"; "screen_room_details_room_name_label" = "Імя";
"screen_room_details_security_and_privacy_title" = "Security & privacy"; "screen_room_details_security_and_privacy_title" = "Security & privacy";
"screen_room_details_security_title" = "Бяспека"; "screen_room_details_security_title" = "Бяспека";
@@ -1376,7 +1301,6 @@
"screen_room_invite_again_alert_message" = "Вы хочаце запрасіць іх назад?"; "screen_room_invite_again_alert_message" = "Вы хочаце запрасіць іх назад?";
"screen_room_invite_again_alert_title" = "Вы адзін у гэтым чаце"; "screen_room_invite_again_alert_title" = "Вы адзін у гэтым чаце";
"screen_room_live_location_banner" = "Sharing live location"; "screen_room_live_location_banner" = "Sharing live location";
"screen_room_maximum_messages_selected" = "Maximum messages selected";
"screen_room_member_details_block_alert_action" = "Заблакіраваць"; "screen_room_member_details_block_alert_action" = "Заблакіраваць";
"screen_room_member_details_block_alert_description" = "Заблакіраваныя карыстальнікі не змогуць адпраўляць вам паведамленні, і ўсе іх паведамленні будуць схаваны. Вы можаце разблакіраваць іх у любы час."; "screen_room_member_details_block_alert_description" = "Заблакіраваныя карыстальнікі не змогуць адпраўляць вам паведамленні, і ўсе іх паведамленні будуць схаваны. Вы можаце разблакіраваць іх у любы час.";
"screen_room_member_details_block_user" = "Заблакіраваць карыстальніка"; "screen_room_member_details_block_user" = "Заблакіраваць карыстальніка";
@@ -1417,8 +1341,7 @@
"screen_room_notification_settings_error_setting_mode" = "Не ўдалося наладзіць рэжым, паспрабуйце яшчэ раз."; "screen_room_notification_settings_error_setting_mode" = "Не ўдалося наладзіць рэжым, паспрабуйце яшчэ раз.";
"screen_room_notification_settings_mentions_only_disclaimer" = "Ваш хатні сервер не падтрымлівае гэту опцыю ў зашыфраваных пакоях, вы не атрымаеце апавяшчэнне ў гэтым пакоі."; "screen_room_notification_settings_mentions_only_disclaimer" = "Ваш хатні сервер не падтрымлівае гэту опцыю ў зашыфраваных пакоях, вы не атрымаеце апавяшчэнне ў гэтым пакоі.";
"screen_room_notification_settings_mode_all_messages" = "Усе паведамленні"; "screen_room_notification_settings_mode_all_messages" = "Усе паведамленні";
"screen_room_notification_settings_mode_mentions_and_keywords" = "Mentions and replies only"; "screen_room_notification_settings_mode_mentions_and_keywords" = "Толькі згадванні і ключавыя словы";
"screen_room_notification_settings_mode_mute" = "Mute";
"screen_room_notification_settings_room_custom_settings_title" = "У гэтым пакоі паведаміце мяне пра"; "screen_room_notification_settings_room_custom_settings_title" = "У гэтым пакоі паведаміце мяне пра";
"screen_room_pinned_banner_indicator" = "%1$@ з %2$@"; "screen_room_pinned_banner_indicator" = "%1$@ з %2$@";
"screen_room_pinned_banner_indicator_description" = "%1$@ Замацаваныя паведамленні"; "screen_room_pinned_banner_indicator_description" = "%1$@ Замацаваныя паведамленні";
@@ -1443,7 +1366,6 @@
"screen_room_roles_and_permissions_room_details" = "Дэталі пакоя"; "screen_room_roles_and_permissions_room_details" = "Дэталі пакоя";
"screen_room_roles_and_permissions_space_details" = "Space details"; "screen_room_roles_and_permissions_space_details" = "Space details";
"screen_room_roles_and_permissions_title" = "Ролі і дазволы"; "screen_room_roles_and_permissions_title" = "Ролі і дазволы";
"screen_room_select_error_cannot_load_rooms" = "The room list associated with this account cannot be loaded.";
"screen_room_single_knock_request_accept_button_title" = "Прыняць"; "screen_room_single_knock_request_accept_button_title" = "Прыняць";
"screen_room_single_knock_request_title" = "%1$@ wants to join this room"; "screen_room_single_knock_request_title" = "%1$@ wants to join this room";
"screen_room_single_knock_request_view_button_title" = "View"; "screen_room_single_knock_request_view_button_title" = "View";
@@ -1480,8 +1402,6 @@
"screen_roomlist_filter_invites_empty_state_title" = "У вас няма непрынятых запрашэнняў."; "screen_roomlist_filter_invites_empty_state_title" = "У вас няма непрынятых запрашэнняў.";
"screen_roomlist_filter_low_priority" = "Нізкі прыярытэт"; "screen_roomlist_filter_low_priority" = "Нізкі прыярытэт";
"screen_roomlist_filter_low_priority_empty_state_title" = "You don’t have any low priority chats yet"; "screen_roomlist_filter_low_priority_empty_state_title" = "You don’t have any low priority chats yet";
"screen_roomlist_filter_mention" = "Mention";
"screen_roomlist_filter_mention_empty_state_title" = "You don’t have any unread mentions";
"screen_roomlist_filter_mixed_empty_state_subtitle" = "Вы можаце прыбраць фільтры, каб убачыць іншыя вашыя чаты."; "screen_roomlist_filter_mixed_empty_state_subtitle" = "Вы можаце прыбраць фільтры, каб убачыць іншыя вашыя чаты.";
"screen_roomlist_filter_mixed_empty_state_title" = "У вас няма чатаў для гэтай катэгорыі"; "screen_roomlist_filter_mixed_empty_state_title" = "У вас няма чатаў для гэтай катэгорыі";
"screen_roomlist_filter_people" = "Людзі"; "screen_roomlist_filter_people" = "Людзі";
@@ -1507,7 +1427,7 @@
"screen_security_and_privacy_encryption_section_footer" = "Once enabled, encryption cannot be disabled."; "screen_security_and_privacy_encryption_section_footer" = "Once enabled, encryption cannot be disabled.";
"screen_security_and_privacy_encryption_section_header" = "Encryption"; "screen_security_and_privacy_encryption_section_header" = "Encryption";
"screen_security_and_privacy_encryption_toggle_title" = "Enable end-to-end encryption"; "screen_security_and_privacy_encryption_toggle_title" = "Enable end-to-end encryption";
"screen_security_and_privacy_room_access_anyone_option_description" = "Anyone can join, including people outside your organisation."; "screen_security_and_privacy_room_access_anyone_option_description" = "Anyone can join.";
"screen_security_and_privacy_room_access_anyone_option_title" = "Anyone"; "screen_security_and_privacy_room_access_anyone_option_title" = "Anyone";
"screen_security_and_privacy_room_access_footer" = "Choose which spaces’ members can join this room without an invitation. %1$@"; "screen_security_and_privacy_room_access_footer" = "Choose which spaces’ members can join this room without an invitation. %1$@";
"screen_security_and_privacy_room_access_footer_manage_spaces_action" = "Manage spaces"; "screen_security_and_privacy_room_access_footer_manage_spaces_action" = "Manage spaces";
@@ -1568,13 +1488,10 @@
"screen_session_verification_request_title" = "Verification requested"; "screen_session_verification_request_title" = "Verification requested";
"screen_session_verification_they_dont_match" = "Яны не супадаюць"; "screen_session_verification_they_dont_match" = "Яны не супадаюць";
"screen_session_verification_they_match" = "Яны супадаюць"; "screen_session_verification_they_match" = "Яны супадаюць";
"screen_session_verification_unavailable_subtitle" = "Please use another device or recovery key.";
"screen_session_verification_unavailable_title" = "Verification with this device is currently unavailable";
"screen_session_verification_use_another_device_subtitle" = "Make sure you have the app open in the other device before starting verification from here."; "screen_session_verification_use_another_device_subtitle" = "Make sure you have the app open in the other device before starting verification from here.";
"screen_session_verification_use_another_device_title" = "Open the app on another verified device"; "screen_session_verification_use_another_device_title" = "Open the app on another verified device";
"screen_session_verification_user_initiator_subtitle" = "For extra security, verify this user by comparing a set of emojis on your devices. Do this by using a trusted way to communicate."; "screen_session_verification_user_initiator_subtitle" = "For extra security, verify this user by comparing a set of emojis on your devices. Do this by using a trusted way to communicate.";
"screen_session_verification_user_initiator_title" = "Verify this user?"; "screen_session_verification_user_initiator_title" = "Verify this user?";
"screen_session_verification_user_requesting_verification" = "User requesting verification:";
"screen_session_verification_user_responder_subtitle" = "For extra security, another user wants to verify your digital identity. You’ll be shown a set of emojis to compare."; "screen_session_verification_user_responder_subtitle" = "For extra security, another user wants to verify your digital identity. You’ll be shown a set of emojis to compare.";
"screen_session_verification_waiting_another_device_subtitle" = "You should see a popup on the other device. Start the verification from there now."; "screen_session_verification_waiting_another_device_subtitle" = "You should see a popup on the other device. Start the verification from there now.";
"screen_session_verification_waiting_another_device_title" = "Start verification on the other device"; "screen_session_verification_waiting_another_device_title" = "Start verification on the other device";
@@ -1583,15 +1500,6 @@
"screen_session_verification_waiting_subtitle" = "Once accepted you’ll be able to continue with the verification."; "screen_session_verification_waiting_subtitle" = "Once accepted you’ll be able to continue with the verification.";
"screen_session_verification_waiting_to_accept_subtitle" = "Для працягу працы прыміце запыт на запуск працэсу праверкі ў іншым сеансе."; "screen_session_verification_waiting_to_accept_subtitle" = "Для працягу працы прыміце запыт на запуск працэсу праверкі ў іншым сеансе.";
"screen_session_verification_waiting_to_accept_title" = "Чаканне прыняцця запыту"; "screen_session_verification_waiting_to_accept_title" = "Чаканне прыняцця запыту";
"screen_settings_add_account" = "Add account";
"screen_settings_user_status_away" = "Away";
"screen_settings_user_status_be_right_back" = "Be right back";
"screen_settings_user_status_custom" = "Custom…";
"screen_settings_user_status_custom_hint" = "Custom status…";
"screen_settings_user_status_focus_time" = "Focus time";
"screen_settings_user_status_in_a_meeting" = "In a meeting";
"screen_settings_user_status_on_the_road" = "On the road";
"screen_settings_user_status_placeholder" = "What's your status?";
"screen_share_location_live_location_disclaimer_title" = "Your live location history will be stored in the room and visible to members after the session ends."; "screen_share_location_live_location_disclaimer_title" = "Your live location history will be stored in the room and visible to members after the session ends.";
"screen_share_location_live_location_duration_picker_title" = "Choose how long to share your live location."; "screen_share_location_live_location_duration_picker_title" = "Choose how long to share your live location.";
"screen_share_location_live_location_missing_permissions" = "You do not have permissions to share your live location in this room"; "screen_share_location_live_location_missing_permissions" = "You do not have permissions to share your live location in this room";
@@ -1606,7 +1514,6 @@
"screen_signed_out_reason_2" = "Вы выдалілі сеанс з іншага сеансу"; "screen_signed_out_reason_2" = "Вы выдалілі сеанс з іншага сеансу";
"screen_signed_out_reason_3" = "Адміністратар вашага сервера ануляваў ваш доступ"; "screen_signed_out_reason_3" = "Адміністратар вашага сервера ануляваў ваш доступ";
"screen_signed_out_subtitle" = "Магчыма, вы выйшлі з сістэмы па адной з прычын, пералічаных ніжэй. Калі ласка, увайдзіце яшчэ раз, каб працягнуць выкарыстанне %@."; "screen_signed_out_subtitle" = "Магчыма, вы выйшлі з сістэмы па адной з прычын, пералічаных ніжэй. Калі ласка, увайдзіце яшчэ раз, каб працягнуць выкарыстанне %@.";
"screen_signed_out_subtitle_v2" = "This device was removed for one of the reasons listed below. Please sign in again to connect this device to your account.";
"screen_signed_out_title" = "Вы выйшлі з сістэмы"; "screen_signed_out_title" = "Вы выйшлі з сістэмы";
"screen_signout_confirmation_dialog_content" = "Вы ўпэўненыя, што хочаце выдаліць гэту прыладу?"; "screen_signout_confirmation_dialog_content" = "Вы ўпэўненыя, што хочаце выдаліць гэту прыладу?";
"screen_signout_confirmation_dialog_submit" = "Выйсці"; "screen_signout_confirmation_dialog_submit" = "Выйсці";
@@ -1632,7 +1539,7 @@
"screen_space_list_parent_space" = "%1$@ space"; "screen_space_list_parent_space" = "%1$@ space";
"screen_space_list_title" = "Прасторы"; "screen_space_list_title" = "Прасторы";
"screen_space_menu_action_members" = "View members"; "screen_space_menu_action_members" = "View members";
"screen_space_remove_rooms_confirmation_content" = "Removing a room will not affect the room access. To change the access go to Room info > Security & privacy."; "screen_space_remove_rooms_confirmation_content" = "Removing a room will not affect the room access. To change the access go to Room info > Privacy & security.";
"screen_space_remove_rooms_confirmation_title_ios" = "Remove rooms from %1$@?"; "screen_space_remove_rooms_confirmation_title_ios" = "Remove rooms from %1$@?";
"screen_space_settings_leave_space" = "Пакінуць прастору"; "screen_space_settings_leave_space" = "Пакінуць прастору";
"screen_space_settings_roles_and_permissions" = "Ролі і дазволы"; "screen_space_settings_roles_and_permissions" = "Ролі і дазволы";
@@ -1783,7 +1690,6 @@
"troubleshoot_notifications_test_push_loop_back_failure_2" = "Памылка: %1$@."; "troubleshoot_notifications_test_push_loop_back_failure_2" = "Памылка: %1$@.";
"troubleshoot_notifications_test_push_loop_back_failure_3" = "Памылка, немагчыма праверыць push-апавяшчэнне."; "troubleshoot_notifications_test_push_loop_back_failure_3" = "Памылка, немагчыма праверыць push-апавяшчэнне.";
"troubleshoot_notifications_test_push_loop_back_failure_4" = "Памылка, тайм-аўт у чаканні push-апавяшчэння."; "troubleshoot_notifications_test_push_loop_back_failure_4" = "Памылка, тайм-аўт у чаканні push-апавяшчэння.";
"troubleshoot_notifications_test_push_loop_back_failure_rate_limit" = "Error: the push gateway is rate limiting this device, so notifications won't be reliable. Please set up a different push gateway.";
"troubleshoot_notifications_test_push_loop_back_success" = "Зварот цыклу назад заняў %1$d мс."; "troubleshoot_notifications_test_push_loop_back_success" = "Зварот цыклу назад заняў %1$d мс.";
"troubleshoot_notifications_test_push_loop_back_title" = "Тэст Націсніце кнопку вярнуцца"; "troubleshoot_notifications_test_push_loop_back_title" = "Тэст Націсніце кнопку вярнуцца";
"troubleshoot_notifications_test_unified_push_description" = "Пераканайцеся, што размеркавальнікі UnifiedPush даступныя."; "troubleshoot_notifications_test_unified_push_description" = "Пераканайцеся, што размеркавальнікі UnifiedPush даступныя.";
@@ -20,22 +20,6 @@
<key>NSStringLocalizedFormatKey</key> <key>NSStringLocalizedFormatKey</key>
<string>%#@COUNT@</string> <string>%#@COUNT@</string>
</dict> </dict>
<key>a11y_gallery_more_media</key>
<dict>
<key>COUNT</key>
<dict>
<key>NSStringFormatSpecTypeKey</key>
<string>NSStringPluralRuleType</string>
<key>NSStringFormatValueTypeKey</key>
<string>d</string>
<key>one</key>
<string>Gallery, %1$d more media</string>
<key>other</key>
<string>Gallery, %1$d more medias</string>
</dict>
<key>NSStringLocalizedFormatKey</key>
<string>%#@COUNT@</string>
</dict>
<key>a11y_polls_percent_of_total</key> <key>a11y_polls_percent_of_total</key>
<dict> <dict>
<key>COUNT</key> <key>COUNT</key>
@@ -70,54 +54,6 @@
<key>NSStringLocalizedFormatKey</key> <key>NSStringLocalizedFormatKey</key>
<string>%#@COUNT@</string> <string>%#@COUNT@</string>
</dict> </dict>
<key>action_forward_messages</key>
<dict>
<key>COUNT</key>
<dict>
<key>NSStringFormatSpecTypeKey</key>
<string>NSStringPluralRuleType</string>
<key>NSStringFormatValueTypeKey</key>
<string>d</string>
<key>one</key>
<string>Forward %1$d message</string>
<key>other</key>
<string>Forward %1$d messages</string>
</dict>
<key>NSStringLocalizedFormatKey</key>
<string>%#@COUNT@</string>
</dict>
<key>common_gallery_reply_attachments</key>
<dict>
<key>COUNT</key>
<dict>
<key>NSStringFormatSpecTypeKey</key>
<string>NSStringPluralRuleType</string>
<key>NSStringFormatValueTypeKey</key>
<string>d</string>
<key>one</key>
<string>%1$d attachment…</string>
<key>other</key>
<string>%1$d attachments…</string>
</dict>
<key>NSStringLocalizedFormatKey</key>
<string>%#@COUNT@</string>
</dict>
<key>common_gallery_reply_media_items</key>
<dict>
<key>COUNT</key>
<dict>
<key>NSStringFormatSpecTypeKey</key>
<string>NSStringPluralRuleType</string>
<key>NSStringFormatValueTypeKey</key>
<string>d</string>
<key>one</key>
<string>%1$d media item…</string>
<key>other</key>
<string>%1$d media items…</string>
</dict>
<key>NSStringLocalizedFormatKey</key>
<string>%#@COUNT@</string>
</dict>
<key>common_many_members</key> <key>common_many_members</key>
<dict> <dict>
<key>COUNT</key> <key>COUNT</key>
@@ -288,22 +224,6 @@
<key>NSStringLocalizedFormatKey</key> <key>NSStringLocalizedFormatKey</key>
<string>%#@COUNT@</string> <string>%#@COUNT@</string>
</dict> </dict>
<key>notification_gallery_body</key>
<dict>
<key>COUNT</key>
<dict>
<key>NSStringFormatSpecTypeKey</key>
<string>NSStringPluralRuleType</string>
<key>NSStringFormatValueTypeKey</key>
<string>d</string>
<key>one</key>
<string>Shared %1$d attachment</string>
<key>other</key>
<string>Shared %1$d attachments</string>
</dict>
<key>NSStringLocalizedFormatKey</key>
<string>%#@COUNT@</string>
</dict>
<key>notification_invitations</key> <key>notification_invitations</key>
<dict> <dict>
<key>COUNT</key> <key>COUNT</key>
@@ -376,22 +296,6 @@
<key>NSStringLocalizedFormatKey</key> <key>NSStringLocalizedFormatKey</key>
<string>%#@COUNT@</string> <string>%#@COUNT@</string>
</dict> </dict>
<key>screen.room.timeline_redacted_messages</key>
<dict>
<key>COUNT</key>
<dict>
<key>NSStringFormatSpecTypeKey</key>
<string>NSStringPluralRuleType</string>
<key>NSStringFormatValueTypeKey</key>
<string>d</string>
<key>one</key>
<string>%1$d removed message</string>
<key>other</key>
<string>%1$d removed messages</string>
</dict>
<key>NSStringLocalizedFormatKey</key>
<string>%#@COUNT@</string>
</dict>
<key>screen_advanced_settings_live_location_update_distance</key> <key>screen_advanced_settings_live_location_update_distance</key>
<dict> <dict>
<key>COUNT</key> <key>COUNT</key>
@@ -576,22 +480,6 @@
<key>NSStringLocalizedFormatKey</key> <key>NSStringLocalizedFormatKey</key>
<string>%#@COUNT@</string> <string>%#@COUNT@</string>
</dict> </dict>
<key>screen_room_messages_forwarded</key>
<dict>
<key>COUNT</key>
<dict>
<key>NSStringFormatSpecTypeKey</key>
<string>NSStringPluralRuleType</string>
<key>NSStringFormatValueTypeKey</key>
<string>d</string>
<key>one</key>
<string>%1$d message forwarded</string>
<key>other</key>
<string>%1$d messages forwarded</string>
</dict>
<key>NSStringLocalizedFormatKey</key>
<string>%#@COUNT@</string>
</dict>
<key>screen_room_multiple_knock_requests_title</key> <key>screen_room_multiple_knock_requests_title</key>
<dict> <dict>
<key>COUNT</key> <key>COUNT</key>
@@ -608,22 +496,6 @@
<key>NSStringLocalizedFormatKey</key> <key>NSStringLocalizedFormatKey</key>
<string>%#@COUNT@</string> <string>%#@COUNT@</string>
</dict> </dict>
<key>screen_room_selection_count</key>
<dict>
<key>COUNT</key>
<dict>
<key>NSStringFormatSpecTypeKey</key>
<string>NSStringPluralRuleType</string>
<key>NSStringFormatValueTypeKey</key>
<string>d</string>
<key>one</key>
<string>%1$d message selected</string>
<key>other</key>
<string>%1$d messages selected</string>
</dict>
<key>NSStringLocalizedFormatKey</key>
<string>%#@COUNT@</string>
</dict>
<key>screen_room_timeline_reaction_a11y</key> <key>screen_room_timeline_reaction_a11y</key>
<dict> <dict>
<key>COUNT</key> <key>COUNT</key>
@@ -726,7 +598,7 @@
<key>NSStringLocalizedFormatKey</key> <key>NSStringLocalizedFormatKey</key>
<string>%#@COUNT@</string> <string>%#@COUNT@</string>
</dict> </dict>
<key>screen_timeline_active_call_joined_count</key> <key>screen_timeline_active_call_extra_joined_count</key>
<dict> <dict>
<key>COUNT</key> <key>COUNT</key>
<dict> <dict>
@@ -735,9 +607,9 @@
<key>NSStringFormatValueTypeKey</key> <key>NSStringFormatValueTypeKey</key>
<string>d</string> <string>d</string>
<key>one</key> <key>one</key>
<string>%1$d joined</string> <string>+ %1$d joined</string>
<key>other</key> <key>other</key>
<string>%1$d joined</string> <string>+ %1$d joined</string>
</dict> </dict>
<key>NSStringLocalizedFormatKey</key> <key>NSStringLocalizedFormatKey</key>
<string>%#@COUNT@</string> <string>%#@COUNT@</string>
@@ -1,6 +1,6 @@
"NSCameraUsageDescription" = "За да правите снимки или видеа и да ги изпращате като съобщение, Element X се нуждае от достъп до камерата."; "NSCameraUsageDescription" = "За да правите снимки или видеа и да ги изпращате като съобщение, Element X се нуждае от достъп до камерата.";
"NSFaceIDUsageDescription" = "Face ID is used to protect access to your account."; "NSFaceIDUsageDescription" = "Face ID is used to protect access to your account.";
"NSLocationAlwaysAndWhenInUseUsageDescription" = "To share your location live in chats, location access is needed when the app is in the background."; "NSLocationAlwaysAndWhenInUseUsageDescription" = "To share your live location, Element X needs location access when the app is in the background.";
"NSLocationWhenInUseUsageDescription" = "Предоставете достъп до местоположението, за да може Element X да споделя местоположението ви."; "NSLocationWhenInUseUsageDescription" = "Предоставете достъп до местоположението, за да може Element X да споделя местоположението ви.";
"NSMicrophoneUsageDescription" = "За да записвате и изпращате съобщения с аудио, Element X се нуждае от достъп до микрофона."; "NSMicrophoneUsageDescription" = "За да записвате и изпращате съобщения с аудио, Element X се нуждае от достъп до микрофона.";
"NSPhotoLibraryUsageDescription" = "This lets you save images and videos to your photo library."; "NSPhotoLibraryUsageDescription" = "This lets you save images and videos to your photo library.";
@@ -6,23 +6,16 @@
"a11y_collapse_message_text_field" = "Minimise message text field"; "a11y_collapse_message_text_field" = "Minimise message text field";
"a11y_create_poll_votes_allowed_decrease" = "Decrease votes allowed per person"; "a11y_create_poll_votes_allowed_decrease" = "Decrease votes allowed per person";
"a11y_create_poll_votes_allowed_increase" = "Increase votes allowed per person"; "a11y_create_poll_votes_allowed_increase" = "Increase votes allowed per person";
"a11y_custom_emoji" = "Custom emoji";
"a11y_delete" = "Изтриване"; "a11y_delete" = "Изтриване";
"a11y_duration" = "Duration: %1$@"; "a11y_duration" = "Duration: %1$@";
"a11y_edit_avatar" = "Edit avatar"; "a11y_edit_avatar" = "Edit avatar";
"a11y_edit_room_address_hint" = "Пълният адрес ще бъде %1$@"; "a11y_edit_room_address_hint" = "Пълният адрес ще бъде %1$@";
"a11y_expand_message_text_field" = "Expand message text field"; "a11y_expand_message_text_field" = "Expand message text field";
"a11y_gallery_attachment" = "Gallery, attachment %1$d";
"a11y_gallery_failed_scan" = "Gallery, failed scan %1$d";
"a11y_gallery_image" = "Gallery, image %1$d";
"a11y_gallery_scanning" = "Gallery, scanning %1$d";
"a11y_gallery_video" = "Gallery, video %1$d";
"a11y_hide_password" = "Скриване на паролата"; "a11y_hide_password" = "Скриване на паролата";
"a11y_info" = "Info"; "a11y_info" = "Info";
"a11y_join_call" = "Присъединяване към обаждане"; "a11y_join_call" = "Присъединяване към обаждане";
"a11y_jump_to_bottom" = "Скок към най-долу"; "a11y_jump_to_bottom" = "Скок към най-долу";
"a11y_jump_to_unread" = "Jump to unread"; "a11y_jump_to_unread" = "Jump to unread";
"a11y_jump_to_unread_messages" = "Jump to first unread message";
"a11y_notifications_mentions_only" = "Само споменавания"; "a11y_notifications_mentions_only" = "Само споменавания";
"a11y_notifications_muted" = "Заглушено"; "a11y_notifications_muted" = "Заглушено";
"a11y_notifications_new_mentions" = "Нови споменавания"; "a11y_notifications_new_mentions" = "Нови споменавания";
@@ -57,7 +50,6 @@
"a11y_start_call" = "Започнете обаждане"; "a11y_start_call" = "Започнете обаждане";
"a11y_start_video_call" = "Start a video call"; "a11y_start_video_call" = "Start a video call";
"a11y_start_voice_call" = "Start a voice call"; "a11y_start_voice_call" = "Start a voice call";
"a11y_status" = "Status";
"a11y_tombstoned_room" = "Tombstoned room"; "a11y_tombstoned_room" = "Tombstoned room";
"a11y_user_menu" = "Потребителско меню"; "a11y_user_menu" = "Потребителско меню";
"a11y_video_preview" = "Video preview"; "a11y_video_preview" = "Video preview";
@@ -86,7 +78,6 @@
"action_choose_file" = "Choose file"; "action_choose_file" = "Choose file";
"action_choose_photo" = "Избор на снимка"; "action_choose_photo" = "Избор на снимка";
"action_clear" = "Изчистване"; "action_clear" = "Изчистване";
"action_clear_all" = "Clear all";
"action_close" = "Затваряне"; "action_close" = "Затваряне";
"action_complete_verification" = "Завършване на потвърждаването"; "action_complete_verification" = "Завършване на потвърждаването";
"action_confirm" = "Потвърждаване"; "action_confirm" = "Потвърждаване";
@@ -97,7 +88,6 @@
"action_copy_link" = "Копиране на връзката"; "action_copy_link" = "Копиране на връзката";
"action_copy_link_to_message" = "Копиране на връзката към съобщението"; "action_copy_link_to_message" = "Копиране на връзката към съобщението";
"action_copy_text" = "Копиране на текста"; "action_copy_text" = "Копиране на текста";
"action_copy_to_clipboard" = "Copy to clipboard";
"action_create" = "Създаване"; "action_create" = "Създаване";
"action_create_room" = "Създаване на стая"; "action_create_room" = "Създаване на стая";
"action_create_space" = "Create space"; "action_create_space" = "Create space";
@@ -145,7 +135,6 @@
"action_manage_account_and_devices" = "Manage account & devices"; "action_manage_account_and_devices" = "Manage account & devices";
"action_manage_devices" = "Управление на устройствата"; "action_manage_devices" = "Управление на устройствата";
"action_manage_rooms" = "Manage rooms"; "action_manage_rooms" = "Manage rooms";
"action_mark_as_read" = "Mark as read";
"action_message" = "Съобщение"; "action_message" = "Съобщение";
"action_minimize" = "Minimise"; "action_minimize" = "Minimise";
"action_next" = "Напред"; "action_next" = "Напред";
@@ -210,7 +199,7 @@
"banner_migrate_to_native_sliding_sync_action" = "Log Out & Upgrade"; "banner_migrate_to_native_sliding_sync_action" = "Log Out & Upgrade";
"banner_migrate_to_native_sliding_sync_app_force_logout_title" = "%1$@ no longer supports the old protocol. Please log out and log back in to continue using the app."; "banner_migrate_to_native_sliding_sync_app_force_logout_title" = "%1$@ no longer supports the old protocol. Please log out and log back in to continue using the app.";
"banner_migrate_to_native_sliding_sync_description" = "Your server now supports a new, faster protocol. Log out and log back in to upgrade now. Doing this now will help you avoid a forced logout when the old protocol is removed later."; "banner_migrate_to_native_sliding_sync_description" = "Your server now supports a new, faster protocol. Log out and log back in to upgrade now. Doing this now will help you avoid a forced logout when the old protocol is removed later.";
"banner_migrate_to_native_sliding_sync_force_logout_title" = "Your account provider no longer supports the old protocol. Please sign out and sign back in to continue using the app."; "banner_migrate_to_native_sliding_sync_force_logout_title" = "Your homeserver no longer supports the old protocol. Please log out and log back in to continue using the app.";
"banner_migrate_to_native_sliding_sync_title" = "Upgrade available"; "banner_migrate_to_native_sliding_sync_title" = "Upgrade available";
"banner_new_sound_message" = "Your notification ping has been updated—clearer, quicker, and less disruptive."; "banner_new_sound_message" = "Your notification ping has been updated—clearer, quicker, and less disruptive.";
"banner_new_sound_title" = "We’ve refreshed your sounds"; "banner_new_sound_title" = "We’ve refreshed your sounds";
@@ -220,7 +209,6 @@
"call_invalid_audio_device_bluetooth_devices_disabled" = "Element Call does not support using Bluetooth audio devices in this Android version. Please select a different audio device."; "call_invalid_audio_device_bluetooth_devices_disabled" = "Element Call does not support using Bluetooth audio devices in this Android version. Please select a different audio device.";
"common_about" = "Относно"; "common_about" = "Относно";
"common_acceptable_use_policy" = "Политика за приемлива употреба"; "common_acceptable_use_policy" = "Политика за приемлива употреба";
"common_account_settings" = "Account settings";
"common_add_account" = "Добавяне на акаунт"; "common_add_account" = "Добавяне на акаунт";
"common_add_another_account" = "Добавяне на друг акаунт"; "common_add_another_account" = "Добавяне на друг акаунт";
"common_adding_caption" = "Adding caption"; "common_adding_caption" = "Adding caption";
@@ -229,7 +217,6 @@
"common_analytics" = "Статистика"; "common_analytics" = "Статистика";
"common_android_shortcuts_remove_reason_left_room" = "Вие напуснахте стаята"; "common_android_shortcuts_remove_reason_left_room" = "Вие напуснахте стаята";
"common_android_shortcuts_remove_reason_session_logged_out" = "You were logged out of the session"; "common_android_shortcuts_remove_reason_session_logged_out" = "You were logged out of the session";
"common_app_settings" = "App settings";
"common_appearance" = "Облик"; "common_appearance" = "Облик";
"common_audio" = "Аудио"; "common_audio" = "Аудио";
"common_beta" = "Beta"; "common_beta" = "Beta";
@@ -240,8 +227,6 @@
"common_call_started" = "Започнато обаждане"; "common_call_started" = "Започнато обаждане";
"common_call_you_declined" = "You declined a call"; "common_call_you_declined" = "You declined a call";
"common_chat_backup" = "Резервно копие на чатовете"; "common_chat_backup" = "Резервно копие на чатовете";
"common_chats" = "Chats";
"common_code_block" = "Code block";
"common_copied_to_clipboard" = "Copied to clipboard"; "common_copied_to_clipboard" = "Copied to clipboard";
"common_copyright" = "Авторски права"; "common_copyright" = "Авторски права";
"common_creating_room" = "Създаване на стая…"; "common_creating_room" = "Създаване на стая…";
@@ -279,12 +264,10 @@
"common_file_deleted" = "Файлът е изтрит"; "common_file_deleted" = "Файлът е изтрит";
"common_file_saved" = "Файлът е запазен"; "common_file_saved" = "Файлът е запазен";
"common_forward_message" = "Препращане на съобщението"; "common_forward_message" = "Препращане на съобщението";
"common_forward_to" = "Forward to";
"common_frequently_used" = "Frequently used"; "common_frequently_used" = "Frequently used";
"common_gallery" = "Gallery"; "common_gallery" = "Gallery";
"common_gif" = "GIF"; "common_gif" = "GIF";
"common_group_call_in_progress" = "Group call in progress"; "common_group_call_in_progress" = "Group call in progress";
"common_header_rooms" = "Rooms";
"common_image" = "Изображение"; "common_image" = "Изображение";
"common_in_reply_to" = "В отговор на %1$@"; "common_in_reply_to" = "В отговор на %1$@";
"common_invite_unknown_profile" = "Този Matrix ID не може да бъде намерен, така че поканата може да не бъде получена."; "common_invite_unknown_profile" = "Този Matrix ID не може да бъде намерен, така че поканата може да не бъде получена.";
@@ -297,25 +280,20 @@
"common_live_location_ended" = "Live location ended"; "common_live_location_ended" = "Live location ended";
"common_loading" = "Зарежда се…"; "common_loading" = "Зарежда се…";
"common_loading_more" = "Зарежда се още…"; "common_loading_more" = "Зарежда се още…";
"common_location_sharing" = "Location sharing";
"common_media_upload_quality" = "Media upload quality";
"common_message" = "Съобщение"; "common_message" = "Съобщение";
"common_message_actions" = "Message actions"; "common_message_actions" = "Message actions";
"common_message_failed_to_send" = "Message failed to send"; "common_message_failed_to_send" = "Message failed to send";
"common_message_layout" = "Оформление на съобщенията"; "common_message_layout" = "Оформление на съобщенията";
"common_message_removed" = "Съобщението е премахнато"; "common_message_removed" = "Съобщението е премахнато";
"common_moderation_and_safety" = "Moderation & safety";
"common_modern" = "Модерно"; "common_modern" = "Модерно";
"common_mute" = "Заглушаване"; "common_mute" = "Заглушаване";
"common_name" = "Name"; "common_name" = "Name";
"common_name_and_id" = "%1$@ (%2$@)"; "common_name_and_id" = "%1$@ (%2$@)";
"common_no_results" = "Няма резултати"; "common_no_results" = "Няма резултати";
"common_no_results_for" = "There are no results for “%1$@”. Try a new search term.";
"common_no_room_name" = "Няма име на стая"; "common_no_room_name" = "Няма име на стая";
"common_no_space_name" = "Няма име на пространство"; "common_no_space_name" = "Няма име на пространство";
"common_not_encrypted" = "Без шифроване"; "common_not_encrypted" = "Без шифроване";
"common_offline" = "Офлайн"; "common_offline" = "Офлайн";
"common_on_a_call" = "On a call";
"common_open_source_licenses" = "Лицензи за отворен код"; "common_open_source_licenses" = "Лицензи за отворен код";
"common_optic_id_ios" = "Optic ID"; "common_optic_id_ios" = "Optic ID";
"common_or" = "или"; "common_or" = "или";
@@ -349,7 +327,6 @@
"common_replying_to" = "В отговор на %1$@"; "common_replying_to" = "В отговор на %1$@";
"common_report_a_problem" = "Съобщаване за проблем"; "common_report_a_problem" = "Съобщаване за проблем";
"common_report_submitted" = "Докладът е изпратен"; "common_report_submitted" = "Докладът е изпратен";
"common_results_for" = "Results for “%1$@”";
"common_rich_text_editor" = "Редактор на богат текст"; "common_rich_text_editor" = "Редактор на богат текст";
"common_role" = "Role"; "common_role" = "Role";
"common_room" = "Стая"; "common_room" = "Стая";
@@ -377,7 +354,6 @@
"common_shared_live_location" = "Shared live location"; "common_shared_live_location" = "Shared live location";
"common_shared_location" = "Споделено местоположение"; "common_shared_location" = "Споделено местоположение";
"common_shared_space" = "Shared space"; "common_shared_space" = "Shared space";
"common_signed_in" = "Signed in";
"common_signing_out" = "Излизате"; "common_signing_out" = "Излизате";
"common_something_went_wrong" = "Нещо се обърка"; "common_something_went_wrong" = "Нещо се обърка";
"common_something_went_wrong_message" = "Възникна проблем. Моля, опитайте отново."; "common_something_went_wrong_message" = "Възникна проблем. Моля, опитайте отново.";
@@ -389,7 +365,6 @@
"common_success" = "Успешно"; "common_success" = "Успешно";
"common_suggested" = "Suggested"; "common_suggested" = "Suggested";
"common_suggestions" = "Предложения"; "common_suggestions" = "Предложения";
"common_switch_accounts" = "Switch accounts";
"common_syncing" = "Синхронизиране"; "common_syncing" = "Синхронизиране";
"common_text" = "Текст"; "common_text" = "Текст";
"common_third_party_notices" = "Уведомления от трети страни"; "common_third_party_notices" = "Уведомления от трети страни";
@@ -430,14 +405,12 @@
"common_waiting_live_location" = "Waiting for live location…"; "common_waiting_live_location" = "Waiting for live location…";
"common_world_readable_history" = "Anyone can see history"; "common_world_readable_history" = "Anyone can see history";
"common_you" = "Вие"; "common_you" = "Вие";
"common_your_account" = "Your account";
"confirm_recovery_key_banner_message" = "Потвърдете ключа си за възстановяване, за да запазите достъп до хранилището за ключове и историята на съобщенията си."; "confirm_recovery_key_banner_message" = "Потвърдете ключа си за възстановяване, за да запазите достъп до хранилището за ключове и историята на съобщенията си.";
"confirm_recovery_key_banner_primary_button_title" = "Въведете ключа си за възстановяване"; "confirm_recovery_key_banner_primary_button_title" = "Въведете ключа си за възстановяване";
"confirm_recovery_key_banner_secondary_button_title" = "Forgot your recovery key?"; "confirm_recovery_key_banner_secondary_button_title" = "Forgot your recovery key?";
"confirm_recovery_key_banner_title" = "Хранилището ви за ключове не е синхронизирано"; "confirm_recovery_key_banner_title" = "Хранилището ви за ключове не е синхронизирано";
"content_scanner_not_found" = "Download not available."; "content_scanner_not_found" = "Download not available.";
"content_scanner_not_found_title" = "Something went wrong"; "content_scanner_not_found_title" = "File not found";
"content_scanner_scanning" = "Scanning…";
"content_scanner_unsafe_message" = "Preview and download have been disabled."; "content_scanner_unsafe_message" = "Preview and download have been disabled.";
"content_scanner_unsafe_title" = "The file is not safe"; "content_scanner_unsafe_title" = "The file is not safe";
"crash_detection_dialog_content" = "%1$@ се срина при последното използване. Искате ли да споделите доклад за срива с нас?"; "crash_detection_dialog_content" = "%1$@ се срина при последното използване. Искате ли да споделите доклад за срива с нас?";
@@ -499,7 +472,7 @@
"emoji_picker_category_recent" = "Recent emojis"; "emoji_picker_category_recent" = "Recent emojis";
"emoji_picker_category_symbols" = "Символи"; "emoji_picker_category_symbols" = "Символи";
"emoji_picker_search_placeholder" = "Search emojis"; "emoji_picker_search_placeholder" = "Search emojis";
"error_account_creation_not_possible" = "Your account provider needs to be upgraded to support Matrix Authentication Service and account creation."; "error_account_creation_not_possible" = "Your homeserver needs to be upgraded to support Matrix Authentication Service and account creation.";
"error_failed_creating_the_permalink" = "Неуспешно създаване на постоянна връзка"; "error_failed_creating_the_permalink" = "Неуспешно създаване на постоянна връзка";
"error_failed_loading_map" = "%1$@ не успя да зареди картата. Моля, опитайте отново по-късно."; "error_failed_loading_map" = "%1$@ не успя да зареди картата. Моля, опитайте отново по-късно.";
"error_failed_loading_messages" = "Неуспешно зареждане на съобщения"; "error_failed_loading_messages" = "Неуспешно зареждане на съобщения";
@@ -511,11 +484,6 @@
"error_no_compatible_app_found" = "No compatible app was found to handle this action."; "error_no_compatible_app_found" = "No compatible app was found to handle this action.";
"error_room_address_already_exists" = "This room address already exists. Please try editing the room address field or change the room name"; "error_room_address_already_exists" = "This room address already exists. Please try editing the room address field or change the room name";
"error_room_address_invalid_symbols" = "Some characters are not allowed. Only letters, digits and the following symbols are supported ! $ & ‘ ( ) * + / ; = ? @ [ ] - . _"; "error_room_address_invalid_symbols" = "Some characters are not allowed. Only letters, digits and the following symbols are supported ! $ & ‘ ( ) * + / ; = ? @ [ ] - . _";
"error_sending_failure_invalid_mime_type" = "Invalid mime type: %@";
"error_sending_failure_missing_media_content" = "Missing media content";
"error_sending_failure_other" = "Error details: %@";
"error_sending_failure_sending_from_unverified_device" = "Sending from unverified device";
"error_sending_failure_unknown" = "Unknown error";
"error_some_messages_have_not_been_sent" = "Някои съобщения не са изпратени"; "error_some_messages_have_not_been_sent" = "Някои съобщения не са изпратени";
"error_unknown" = "Съжаляваме, възникна грешка"; "error_unknown" = "Съжаляваме, възникна грешка";
"error.account_already_logged_in" = "You're already logged in on this device as %1$@."; "error.account_already_logged_in" = "You're already logged in on this device as %1$@.";
@@ -545,8 +513,6 @@
"notification_invitation_action_reject" = "Reject"; "notification_invitation_action_reject" = "Reject";
"notification_invite_body" = "Поканиха ви за чат"; "notification_invite_body" = "Поканиха ви за чат";
"notification_invite_body_with_sender" = "%1$@ invited you to chat"; "notification_invite_body_with_sender" = "%1$@ invited you to chat";
"notification_knock_request_body" = "Requested to join";
"notification_live_location_started_body" = "Started sharing their live location";
"notification_mentioned_you_body" = "Ви спомена: %1$@"; "notification_mentioned_you_body" = "Ви спомена: %1$@";
"notification_new_messages" = "Нови съобщения"; "notification_new_messages" = "Нови съобщения";
"notification_reaction_body" = "Реагира с %1$@"; "notification_reaction_body" = "Реагира с %1$@";
@@ -731,22 +697,14 @@
"screen_change_server_error_element_pro_required_title" = "Element Pro required"; "screen_change_server_error_element_pro_required_title" = "Element Pro required";
"screen_change_server_error_invalid_homeserver" = "Не можахме да достигнем този сървър. Моля, проверете дали сте въвели правилно URL адреса на сървъра. Ако URL адресът е правилен, свържете се с администратора на вашия сървър за допълнителна помощ."; "screen_change_server_error_invalid_homeserver" = "Не можахме да достигнем този сървър. Моля, проверете дали сте въвели правилно URL адреса на сървъра. Ако URL адресът е правилен, свържете се с администратора на вашия сървър за допълнителна помощ.";
"screen_change_server_error_invalid_well_known" = "Server isn't available due to an issue in the .well-known file:\n%1$@"; "screen_change_server_error_invalid_well_known" = "Server isn't available due to an issue in the .well-known file:\n%1$@";
"screen_change_server_error_no_sliding_sync_message" = "The selected account provider does not support sliding sync. The server needs to be upgraded to use %1$@."; "screen_change_server_error_no_sliding_sync_message" = "The selected account provider does not support sliding sync. An upgrade to the server is needed to use %1$@.";
"screen_change_server_error_unauthorized_homeserver" = "%1$@ is not allowed to connect to %2$@."; "screen_change_server_error_unauthorized_homeserver" = "%1$@ is not allowed to connect to %2$@.";
"screen_change_server_error_unauthorized_homeserver_content" = "This app has been configured to allow: %1$@."; "screen_change_server_error_unauthorized_homeserver_content" = "This app has been configured to allow: %1$@.";
"screen_change_server_error_unauthorized_homeserver_title" = "Account provider %1$@ not allowed."; "screen_change_server_error_unauthorized_homeserver_title" = "Account provider %1$@ not allowed.";
"screen_change_server_form_header" = "URL адрес на сървъра"; "screen_change_server_form_header" = "URL адрес на сървъра";
"screen_change_server_form_notice" = "Enter a domain address."; "screen_change_server_form_notice" = "Enter a domain address.";
"screen_change_server_navigation_title_login" = "Sign in";
"screen_change_server_navigation_title_register" = "Create account";
"screen_change_server_subtitle" = "Какъв е адресът на вашия сървър?"; "screen_change_server_subtitle" = "Какъв е адресът на вашия сървър?";
"screen_change_server_textfield_footer_login" = "If your account is provided by your company or a community, then change the account provider (example: companyname.com).";
"screen_change_server_textfield_footer_register" = "Create an account on matrix.org for free. If you want to create an account with a different provider, then change it accordingly (example: communityname.org).";
"screen_change_server_textfield_header" = "Account provider";
"screen_change_server_textfield_placeholder" = "example.com";
"screen_change_server_title" = "Изберете своя сървър"; "screen_change_server_title" = "Изберете своя сървър";
"screen_change_server_title_login" = "Enter your account provider";
"screen_change_server_title_register" = "Choose an account provider";
"screen_chat_backup_key_backup_action_disable" = "Изтриване на хранилището за ключове"; "screen_chat_backup_key_backup_action_disable" = "Изтриване на хранилището за ключове";
"screen_chat_backup_key_backup_action_enable" = "Включване на резервните копия"; "screen_chat_backup_key_backup_action_enable" = "Включване на резервните копия";
"screen_chat_backup_key_backup_description" = "Съхранявайте сигурно криптографската си самоличност и ключовете за съобщения на сървъра. Това ще ви позволи да преглеждате историята на съобщенията си на всички нови устройства.%1$@ ."; "screen_chat_backup_key_backup_description" = "Съхранявайте сигурно криптографската си самоличност и ключовете за съобщения на сървъра. Това ще ви позволи да преглеждате историята на съобщенията си на всички нови устройства.%1$@ .";
@@ -761,7 +719,7 @@
"screen_chat_backup_recovery_action_setup" = "Get recovery key"; "screen_chat_backup_recovery_action_setup" = "Get recovery key";
"screen_chat_backup_recovery_action_setup_description" = "Your chats are automatically backed up with end-to-end encryption. To restore this backup and retain your digital identity when you lose access to all your devices, you will need your recovery key."; "screen_chat_backup_recovery_action_setup_description" = "Your chats are automatically backed up with end-to-end encryption. To restore this backup and retain your digital identity when you lose access to all your devices, you will need your recovery key.";
"screen_create_account_title" = "Създаване на акаунт"; "screen_create_account_title" = "Създаване на акаунт";
"screen_create_new_recovery_key_list_item_1" = "Open %1$@ on a desktop device"; "screen_create_new_recovery_key_list_item_1" = "Open %1$@ in a desktop device";
"screen_create_new_recovery_key_list_item_2" = "Sign into your account again"; "screen_create_new_recovery_key_list_item_2" = "Sign into your account again";
"screen_create_new_recovery_key_list_item_3" = "When asked to verify your device, select %1$@"; "screen_create_new_recovery_key_list_item_3" = "When asked to verify your device, select %1$@";
"screen_create_new_recovery_key_list_item_3_reset_all" = "“Reset all”"; "screen_create_new_recovery_key_list_item_3_reset_all" = "“Reset all”";
@@ -793,7 +751,7 @@
"screen_create_room_private_option_description" = "Само поканени хора имат достъп до тази стая. Всички съобщения са шифровани от край до край."; "screen_create_room_private_option_description" = "Само поканени хора имат достъп до тази стая. Всички съобщения са шифровани от край до край.";
"screen_create_room_private_option_title" = "Private"; "screen_create_room_private_option_title" = "Private";
"screen_create_room_public_option_description" = "Всеки може да намери тази стая.\nМожете да промените това по всяко време в настройките на стаята."; "screen_create_room_public_option_description" = "Всеки може да намери тази стая.\nМожете да промените това по всяко време в настройките на стаята.";
"screen_create_room_public_option_short_description" = "Anyone can join, including people outside your organisation."; "screen_create_room_public_option_short_description" = "Anyone can join.";
"screen_create_room_public_option_title" = "Public"; "screen_create_room_public_option_title" = "Public";
"screen_create_room_room_access_section_knocking_option_description" = "Anyone can ask to join but an administrator or a moderator must accept the request."; "screen_create_room_room_access_section_knocking_option_description" = "Anyone can ask to join but an administrator or a moderator must accept the request.";
"screen_create_room_room_access_section_knocking_option_title" = "Allow ask to join"; "screen_create_room_room_access_section_knocking_option_title" = "Allow ask to join";
@@ -865,10 +823,10 @@
"screen_edit_profile_updating_details" = "Обновяване на профила…"; "screen_edit_profile_updating_details" = "Обновяване на профила…";
"screen_edit_room_address_room_address_section_footer" = "You’ll need an address in order to make it visible in the public directory."; "screen_edit_room_address_room_address_section_footer" = "You’ll need an address in order to make it visible in the public directory.";
"screen_edit_room_address_title" = "Edit address"; "screen_edit_room_address_title" = "Edit address";
"screen_encryption_reset_action_continue_reset" = "Continue"; "screen_encryption_reset_action_continue_reset" = "Continue reset";
"screen_encryption_reset_bullet_1" = "Your account details, contacts, preferences, and chat list will be kept"; "screen_encryption_reset_bullet_1" = "Your account details, contacts, preferences, and chat list will be kept";
"screen_encryption_reset_bullet_2" = "You will lose any message history that’s stored only on the server"; "screen_encryption_reset_bullet_2" = "You will lose any message history that’s stored only on the server";
"screen_encryption_reset_bullet_3" = "Other users will see that your digital identity has been reset"; "screen_encryption_reset_bullet_3" = "You will need to verify all your existing devices and contacts again";
"screen_encryption_reset_footer" = "Only reset your digital identity if you don't have access to another verified device and you don't have your recovery key."; "screen_encryption_reset_footer" = "Only reset your digital identity if you don't have access to another verified device and you don't have your recovery key.";
"screen_encryption_reset_title" = "Can't confirm? You’ll need to reset your digital identity."; "screen_encryption_reset_title" = "Can't confirm? You’ll need to reset your digital identity.";
"screen_home_tab_chats" = "Всички чатове"; "screen_home_tab_chats" = "Всички чатове";
@@ -930,7 +888,7 @@
"screen_join_room_loading_alert_title" = "We couldn’t display this room preview"; "screen_join_room_loading_alert_title" = "We couldn’t display this room preview";
"screen_join_room_space_not_supported_description" = "%1$@ does not support spaces yet. You can access spaces on web."; "screen_join_room_space_not_supported_description" = "%1$@ does not support spaces yet. You can access spaces on web.";
"screen_join_room_space_not_supported_title" = "Spaces are not supported yet"; "screen_join_room_space_not_supported_title" = "Spaces are not supported yet";
"screen_join_room_subtitle_knock" = "Tap the button below and a chat administrator will be notified. You'll be able to join the conversation once approved."; "screen_join_room_subtitle_knock" = "Click the button below and a room administrator will be notified. You’ll be able to join the conversation once approved.";
"screen_join_room_subtitle_no_preview" = "You must be a member of this room to view the message history."; "screen_join_room_subtitle_no_preview" = "You must be a member of this room to view the message history.";
"screen_join_room_title_knock" = "Want to join this room?"; "screen_join_room_title_knock" = "Want to join this room?";
"screen_join_room_title_no_preview" = "Preview is not available"; "screen_join_room_title_no_preview" = "Preview is not available";
@@ -966,10 +924,6 @@
"screen_knock_requests_list_empty_state_title" = "No pending request to join"; "screen_knock_requests_list_empty_state_title" = "No pending request to join";
"screen_knock_requests_list_initial_loading_title" = "Loading requests to join…"; "screen_knock_requests_list_initial_loading_title" = "Loading requests to join…";
"screen_knock_requests_list_title" = "Requests to join"; "screen_knock_requests_list_title" = "Requests to join";
"screen_labs_enable_gallery" = "Gallery messages";
"screen_labs_enable_gallery_description" = "Send multiple images or videos in one go. Stable on mobile, but not yet supported by web.";
"screen_labs_enable_knocking" = "Ask to join";
"screen_labs_enable_knocking_description" = "Users can request access to a room that is not open for anyone to join. Stable on mobile, web implementation exists but is experimental.";
"screen_labs_enable_threads" = "Включване на отговори в нишка"; "screen_labs_enable_threads" = "Включване на отговори в нишка";
"screen_labs_enable_threads_description" = "The app will restart to apply this change."; "screen_labs_enable_threads_description" = "The app will restart to apply this change.";
"screen_labs_header_description" = "Try out our latest ideas in development. These features are not finalised; they may be unstable, may change."; "screen_labs_header_description" = "Try out our latest ideas in development. These features are not finalised; they may be unstable, may change.";
@@ -978,11 +932,11 @@
"screen_leave_space_choose_owners_action" = "Choose owners"; "screen_leave_space_choose_owners_action" = "Choose owners";
"screen_leave_space_last_admin_info" = "%1$@ (Admin)"; "screen_leave_space_last_admin_info" = "%1$@ (Admin)";
"screen_leave_space_subtitle" = "Select the rooms you’d like to leave which you're not the only administrator for:"; "screen_leave_space_subtitle" = "Select the rooms you’d like to leave which you're not the only administrator for:";
"screen_leave_space_subtitle_last_admin" = "You need to assign another administrator for this space before you can leave."; "screen_leave_space_subtitle_last_admin" = "You need to assign another admin for this space before you can leave.";
"screen_leave_space_subtitle_last_owner" = "You are the only owner of %1$@. You need to transfer ownership to someone else before you leave."; "screen_leave_space_subtitle_last_owner" = "You are the only owner of %1$@. You need to transfer ownership to someone else before you leave.";
"screen_leave_space_subtitle_only_last_admin" = "You will not be removed from the following room(s) because you're the only administrator:"; "screen_leave_space_subtitle_only_last_admin" = "You will not be removed from the following room(s) because you're the only administrator:";
"screen_leave_space_title" = "Leave %1$@?"; "screen_leave_space_title" = "Leave %1$@?";
"screen_leave_space_title_last_admin" = "You are the only administrator for %1$@"; "screen_leave_space_title_last_admin" = "You are the only admin for %1$@";
"screen_leave_space_title_last_owner" = "Transfer ownership"; "screen_leave_space_title_last_owner" = "Transfer ownership";
"screen_link_new_device_authentication_reason_ios" = "Confirm it's you before linking a new device."; "screen_link_new_device_authentication_reason_ios" = "Confirm it's you before linking a new device.";
"screen_link_new_device_desktop_scanning_title" = "Scan the QR code"; "screen_link_new_device_desktop_scanning_title" = "Scan the QR code";
@@ -990,7 +944,6 @@
"screen_link_new_device_desktop_step3" = "Scan the QR code with this device"; "screen_link_new_device_desktop_step3" = "Scan the QR code with this device";
"screen_link_new_device_desktop_submit" = "Ready to scan"; "screen_link_new_device_desktop_submit" = "Ready to scan";
"screen_link_new_device_desktop_title" = "Open %1$@ on a desktop computer to get the QR code"; "screen_link_new_device_desktop_title" = "Open %1$@ on a desktop computer to get the QR code";
"screen_link_new_device_desktop_warning" = "Only scan a QR code after following the steps above on your own device. Never scan a code sent by another person.";
"screen_link_new_device_enter_number_error_numbers_do_not_match" = "The numbers don’t match"; "screen_link_new_device_enter_number_error_numbers_do_not_match" = "The numbers don’t match";
"screen_link_new_device_enter_number_notice" = "Enter 2-digit code"; "screen_link_new_device_enter_number_notice" = "Enter 2-digit code";
"screen_link_new_device_enter_number_subtitle" = "This will verify that the connection to your other device is secure."; "screen_link_new_device_enter_number_subtitle" = "This will verify that the connection to your other device is secure.";
@@ -1017,8 +970,6 @@
"screen_live_location_sheet_nobody_sharing" = "Nobody is sharing their location"; "screen_live_location_sheet_nobody_sharing" = "Nobody is sharing their location";
"screen_live_location_sheet_sharing_live_location" = "Sharing live location"; "screen_live_location_sheet_sharing_live_location" = "Sharing live location";
"screen_live_location_sheet_title" = "On the map"; "screen_live_location_sheet_title" = "On the map";
"screen_local_network_opt_in_subtitle" = "Your homeserver is on your local network. To connect, %1$@ needs permission to reach devices on this network.";
"screen_local_network_opt_in_title" = "Allow access to local network";
"screen_login_error_deactivated_account" = "Този акаунт бе деактивиран."; "screen_login_error_deactivated_account" = "Този акаунт бе деактивиран.";
"screen_login_error_invalid_credentials" = "Неправилно потребителско име и/или парола"; "screen_login_error_invalid_credentials" = "Неправилно потребителско име и/или парола";
"screen_login_error_invalid_user_id" = "Това не е валиден потребителски идентификатор. Очакван формат: ‘@user:homeserver.org’"; "screen_login_error_invalid_user_id" = "Това не е валиден потребителски идентификатор. Очакван формат: ‘@user:homeserver.org’";
@@ -1069,16 +1020,10 @@
"screen_missing_key_backup_open_element_classic" = "Open Element Classic"; "screen_missing_key_backup_open_element_classic" = "Open Element Classic";
"screen_missing_key_backup_step_1" = "Open Element Classic on your device"; "screen_missing_key_backup_step_1" = "Open Element Classic on your device";
"screen_missing_key_backup_step_2_ios" = "Go to User settings > Security"; "screen_missing_key_backup_step_2_ios" = "Go to User settings > Security";
"screen_missing_key_backup_step_3_ios" = "Scroll down to Chat Backup and tap on Set up"; "screen_missing_key_backup_step_3_ios" = "Scroll down to Secure Backup and tap on Set up";
"screen_missing_key_backup_step_4" = "Follow the instructions to enable your key storage"; "screen_missing_key_backup_step_4" = "Follow the instructions to enable your key storage";
"screen_missing_key_backup_step_5" = "Come back to %1$@"; "screen_missing_key_backup_step_5" = "Come back to %1$@";
"screen_missing_key_backup_title" = "Enable your key storage before proceeding to %1$@"; "screen_missing_key_backup_title" = "Enable your key storage before proceeding to %1$@";
"screen_moderation_and_safety_invites_heading" = "Invites";
"screen_moderation_and_safety_other_users_heading" = "Other users";
"screen_moderation_and_safety_share_presence_heading" = "Your appearance";
"screen_multi_account_announcement_action" = "Add account";
"screen_multi_account_announcement_description" = "Go to %1$@ to sign into another account. Then you can easily switch between them.";
"screen_multi_account_announcement_title" = "You can now add multiple accounts";
"screen_notification_optin_subtitle" = "Можете да промените настройките си по-късно."; "screen_notification_optin_subtitle" = "Можете да промените настройките си по-късно.";
"screen_notification_optin_title" = "Разрешете известията и никога не пропускайте съобщение"; "screen_notification_optin_title" = "Разрешете известията и никога не пропускайте съобщение";
"screen_notification_settings_additional_settings_section_title" = "Допълнителни настройки"; "screen_notification_settings_additional_settings_section_title" = "Допълнителни настройки";
@@ -1107,8 +1052,6 @@
"screen_notification_settings_mode_mentions" = "Споменавания"; "screen_notification_settings_mode_mentions" = "Споменавания";
"screen_notification_settings_notification_section_title" = "Да бъда известяван за"; "screen_notification_settings_notification_section_title" = "Да бъда известяван за";
"screen_notification_settings_room_mention_label" = "Известяване за @room"; "screen_notification_settings_room_mention_label" = "Известяване за @room";
"screen_notification_settings_show_all_activity_subtitle" = "Dots or number of unread messages";
"screen_notification_settings_show_all_activity_title" = "Show all activity in the room list";
"screen_notification_settings_sound_custom_fallback" = "Custom"; "screen_notification_settings_sound_custom_fallback" = "Custom";
"screen_notification_settings_sound_custom_sound_button_title" = "Custom sound..."; "screen_notification_settings_sound_custom_sound_button_title" = "Custom sound...";
"screen_notification_settings_sound_delete_sound_error_title" = "Error deleting file"; "screen_notification_settings_sound_delete_sound_error_title" = "Error deleting file";
@@ -1169,14 +1112,6 @@
"screen_polls_history_filter_ongoing" = "Текущи"; "screen_polls_history_filter_ongoing" = "Текущи";
"screen_polls_history_filter_past" = "Приключили"; "screen_polls_history_filter_past" = "Приключили";
"screen_polls_history_title" = "Анкети"; "screen_polls_history_title" = "Анкети";
"screen_ptt_settings_battery_optimization" = "Ignore battery optimisation";
"screen_ptt_settings_battery_optimization_description" = "Stay active in background";
"screen_ptt_settings_covert_mode" = "Covert mode";
"screen_ptt_settings_covert_mode_description" = "Mute all channels";
"screen_ptt_settings_lock_screen" = "Show on lock screen";
"screen_ptt_settings_lock_screen_description" = "Access from the lock screen";
"screen_ptt_settings_system_overlay" = "Enable system overlay";
"screen_ptt_settings_system_overlay_description" = "Access a floating action button";
"screen_push_history_title" = "Push history"; "screen_push_history_title" = "Push history";
"screen_qr_code_login_connecting_subtitle" = "Establishing a secure connection"; "screen_qr_code_login_connecting_subtitle" = "Establishing a secure connection";
"screen_qr_code_login_connection_note_secure_state_description" = "A secure connection could not be made to the new device. Your existing devices are still safe and you don't need to worry about them."; "screen_qr_code_login_connection_note_secure_state_description" = "A secure connection could not be made to the new device. Your existing devices are still safe and you don't need to worry about them.";
@@ -1254,7 +1189,7 @@
"screen_report_content_hint" = "Причина за докладване на това съдържание"; "screen_report_content_hint" = "Причина за докладване на това съдържание";
"screen_report_room_leave_failed_alert_message" = "Your report was submitted successfully, but we encountered an issue while trying to leave the room. Please try again."; "screen_report_room_leave_failed_alert_message" = "Your report was submitted successfully, but we encountered an issue while trying to leave the room. Please try again.";
"screen_report_room_leave_failed_alert_title" = "Unable to Leave Room"; "screen_report_room_leave_failed_alert_title" = "Unable to Leave Room";
"screen_report_room_reason_footer" = "Report this chat to your account provider. If the messages are encrypted, your account provider will not be able to read them."; "screen_report_room_reason_footer" = "Report this room to your admin. If the messages are encrypted, your admin will not be able to read them.";
"screen_report_room_reason_placeholder" = "Describe the reason to report…"; "screen_report_room_reason_placeholder" = "Describe the reason to report…";
"screen_report_room_title" = "Докладване на стаята"; "screen_report_room_title" = "Докладване на стаята";
"screen_reset_encryption_confirmation_alert_action" = "Yes, reset now"; "screen_reset_encryption_confirmation_alert_action" = "Yes, reset now";
@@ -1321,14 +1256,7 @@
"screen_room_change_role_section_users" = "Членове"; "screen_room_change_role_section_users" = "Членове";
"screen_room_change_role_unsaved_changes_description" = "You have unsaved changes."; "screen_room_change_role_unsaved_changes_description" = "You have unsaved changes.";
"screen_room_change_role_unsaved_changes_title" = "Save changes?"; "screen_room_change_role_unsaved_changes_title" = "Save changes?";
"screen_room_confirm_removal_reason_label" = "Reason (optional)";
"screen_room_confirm_removal_reason_placeholder" = "Enter reason…";
"screen_room_confirm_removal_reason_supporting_text" = "(Optional)";
"screen_room_confirm_removal_title" = "Remove message?";
"screen_room_details_add_topic_title" = "Добавяне на тема"; "screen_room_details_add_topic_title" = "Добавяне на тема";
"screen_room_details_audio_push_to_talk" = "Push to talk";
"screen_room_details_audio_title" = "Room Audio";
"screen_room_details_audio_video_calls" = "Video calls";
"screen_room_details_badge_encrypted" = "С шифроване"; "screen_room_details_badge_encrypted" = "С шифроване";
"screen_room_details_badge_not_encrypted" = "Без шифроване"; "screen_room_details_badge_not_encrypted" = "Без шифроване";
"screen_room_details_badge_public" = "Общодостъпна стая"; "screen_room_details_badge_public" = "Общодостъпна стая";
@@ -1354,9 +1282,6 @@
"screen_room_details_profile_row_title" = "Профил"; "screen_room_details_profile_row_title" = "Профил";
"screen_room_details_requests_to_join_title" = "Requests to join"; "screen_room_details_requests_to_join_title" = "Requests to join";
"screen_room_details_roles_and_permissions" = "Роли и разрешения"; "screen_room_details_roles_and_permissions" = "Роли и разрешения";
"screen_room_details_room_audio_ptt" = "Push to talk";
"screen_room_details_room_audio_title" = "Room Audio";
"screen_room_details_room_audio_video_calls" = "Video calls";
"screen_room_details_room_name_label" = "Name"; "screen_room_details_room_name_label" = "Name";
"screen_room_details_security_and_privacy_title" = "Защита и поверителност"; "screen_room_details_security_and_privacy_title" = "Защита и поверителност";
"screen_room_details_security_title" = "Защита"; "screen_room_details_security_title" = "Защита";
@@ -1376,7 +1301,6 @@
"screen_room_invite_again_alert_message" = "Искате ли да ги поканите обратно?"; "screen_room_invite_again_alert_message" = "Искате ли да ги поканите обратно?";
"screen_room_invite_again_alert_title" = "Вие сте сами в този чат"; "screen_room_invite_again_alert_title" = "Вие сте сами в този чат";
"screen_room_live_location_banner" = "Sharing live location"; "screen_room_live_location_banner" = "Sharing live location";
"screen_room_maximum_messages_selected" = "Maximum messages selected";
"screen_room_member_details_block_alert_action" = "Блокиране"; "screen_room_member_details_block_alert_action" = "Блокиране";
"screen_room_member_details_block_alert_description" = "Блокираните потребители няма да могат да ви изпращат съобщения и всички техни съобщения ще бъдат скрити. Можете да ги отблокирате по всяко време."; "screen_room_member_details_block_alert_description" = "Блокираните потребители няма да могат да ви изпращат съобщения и всички техни съобщения ще бъдат скрити. Можете да ги отблокирате по всяко време.";
"screen_room_member_details_block_user" = "Блокиране на потребителя"; "screen_room_member_details_block_user" = "Блокиране на потребителя";
@@ -1415,10 +1339,9 @@
"screen_room_notification_settings_error_loading_settings" = "Възникна грешка при зареждането на настройките за известия."; "screen_room_notification_settings_error_loading_settings" = "Възникна грешка при зареждането на настройките за известия.";
"screen_room_notification_settings_error_restoring_default" = "Неуспешно възстановяване на режима по подразбиране, моля, опитайте отново."; "screen_room_notification_settings_error_restoring_default" = "Неуспешно възстановяване на режима по подразбиране, моля, опитайте отново.";
"screen_room_notification_settings_error_setting_mode" = "Неуспешно задаване на режима, моля, опитайте отново."; "screen_room_notification_settings_error_setting_mode" = "Неуспешно задаване на режима, моля, опитайте отново.";
"screen_room_notification_settings_mentions_only_disclaimer" = "Your account provider does not support this option in encrypted chats, you won't get notified in this chat."; "screen_room_notification_settings_mentions_only_disclaimer" = "Your homeserver does not support this option in encrypted rooms, you won't get notified in this room.";
"screen_room_notification_settings_mode_all_messages" = "Всички съобщения"; "screen_room_notification_settings_mode_all_messages" = "Всички съобщения";
"screen_room_notification_settings_mode_mentions_and_keywords" = "Mentions and replies only"; "screen_room_notification_settings_mode_mentions_and_keywords" = "Само споменавания и ключови думи";
"screen_room_notification_settings_mode_mute" = "Mute";
"screen_room_notification_settings_room_custom_settings_title" = "В тази стая, да бъда известяван за"; "screen_room_notification_settings_room_custom_settings_title" = "В тази стая, да бъда известяван за";
"screen_room_pinned_banner_indicator" = "%1$@ of %2$@"; "screen_room_pinned_banner_indicator" = "%1$@ of %2$@";
"screen_room_pinned_banner_indicator_description" = "%1$@ Pinned messages"; "screen_room_pinned_banner_indicator_description" = "%1$@ Pinned messages";
@@ -1443,7 +1366,6 @@
"screen_room_roles_and_permissions_room_details" = "Подробности за стаята"; "screen_room_roles_and_permissions_room_details" = "Подробности за стаята";
"screen_room_roles_and_permissions_space_details" = "Подробности за пространството"; "screen_room_roles_and_permissions_space_details" = "Подробности за пространството";
"screen_room_roles_and_permissions_title" = "Роли и разрешения"; "screen_room_roles_and_permissions_title" = "Роли и разрешения";
"screen_room_select_error_cannot_load_rooms" = "The room list associated with this account cannot be loaded.";
"screen_room_single_knock_request_accept_button_title" = "Приемане"; "screen_room_single_knock_request_accept_button_title" = "Приемане";
"screen_room_single_knock_request_title" = "%1$@ wants to join this room"; "screen_room_single_knock_request_title" = "%1$@ wants to join this room";
"screen_room_single_knock_request_view_button_title" = "View"; "screen_room_single_knock_request_view_button_title" = "View";
@@ -1480,8 +1402,6 @@
"screen_roomlist_filter_invites_empty_state_title" = "Нямате чакащи покани."; "screen_roomlist_filter_invites_empty_state_title" = "Нямате чакащи покани.";
"screen_roomlist_filter_low_priority" = "Нисък приоритет"; "screen_roomlist_filter_low_priority" = "Нисък приоритет";
"screen_roomlist_filter_low_priority_empty_state_title" = "You don’t have any low priority chats yet"; "screen_roomlist_filter_low_priority_empty_state_title" = "You don’t have any low priority chats yet";
"screen_roomlist_filter_mention" = "Mention";
"screen_roomlist_filter_mention_empty_state_title" = "You don’t have any unread mentions";
"screen_roomlist_filter_mixed_empty_state_subtitle" = "Можете да премахнете избора на филтрите, за да видите другите си чатове"; "screen_roomlist_filter_mixed_empty_state_subtitle" = "Можете да премахнете избора на филтрите, за да видите другите си чатове";
"screen_roomlist_filter_mixed_empty_state_title" = "You don’t have chats for this selection"; "screen_roomlist_filter_mixed_empty_state_title" = "You don’t have chats for this selection";
"screen_roomlist_filter_people" = "Хора"; "screen_roomlist_filter_people" = "Хора";
@@ -1568,13 +1488,10 @@
"screen_session_verification_request_title" = "Поискано е потвърждение"; "screen_session_verification_request_title" = "Поискано е потвърждение";
"screen_session_verification_they_dont_match" = "Те не съвпадат"; "screen_session_verification_they_dont_match" = "Те не съвпадат";
"screen_session_verification_they_match" = "Те съвпадат"; "screen_session_verification_they_match" = "Те съвпадат";
"screen_session_verification_unavailable_subtitle" = "Please use another device or recovery key.";
"screen_session_verification_unavailable_title" = "Verification with this device is currently unavailable";
"screen_session_verification_use_another_device_subtitle" = "Уверете се, че приложението е отворено на другото устройство, преди да започнете потвърждението оттук."; "screen_session_verification_use_another_device_subtitle" = "Уверете се, че приложението е отворено на другото устройство, преди да започнете потвърждението оттук.";
"screen_session_verification_use_another_device_title" = "Отворете приложението на друго потвърдено устройство"; "screen_session_verification_use_another_device_title" = "Отворете приложението на друго потвърдено устройство";
"screen_session_verification_user_initiator_subtitle" = "For extra security, verify this user by comparing a set of emojis on your devices. Do this by using a trusted way to communicate."; "screen_session_verification_user_initiator_subtitle" = "For extra security, verify this user by comparing a set of emojis on your devices. Do this by using a trusted way to communicate.";
"screen_session_verification_user_initiator_title" = "Потвърждаване на този потребител?"; "screen_session_verification_user_initiator_title" = "Потвърждаване на този потребител?";
"screen_session_verification_user_requesting_verification" = "User requesting verification:";
"screen_session_verification_user_responder_subtitle" = "For extra security, another user wants to verify your digital identity. You’ll be shown a set of emojis to compare."; "screen_session_verification_user_responder_subtitle" = "For extra security, another user wants to verify your digital identity. You’ll be shown a set of emojis to compare.";
"screen_session_verification_waiting_another_device_subtitle" = "You should see a popup on the other device. Start the verification from there now."; "screen_session_verification_waiting_another_device_subtitle" = "You should see a popup on the other device. Start the verification from there now.";
"screen_session_verification_waiting_another_device_title" = "Start verification on the other device"; "screen_session_verification_waiting_another_device_title" = "Start verification on the other device";
@@ -1583,15 +1500,6 @@
"screen_session_verification_waiting_subtitle" = "След като бъдете приети, ще можете да продължите потвърждението."; "screen_session_verification_waiting_subtitle" = "След като бъдете приети, ще можете да продължите потвърждението.";
"screen_session_verification_waiting_to_accept_subtitle" = "Приемете заявката, за да започнете процеса на потвърждаване в другата си сесия, за да продължите."; "screen_session_verification_waiting_to_accept_subtitle" = "Приемете заявката, за да започнете процеса на потвърждаване в другата си сесия, за да продължите.";
"screen_session_verification_waiting_to_accept_title" = "В очакване на приемане на заявка"; "screen_session_verification_waiting_to_accept_title" = "В очакване на приемане на заявка";
"screen_settings_add_account" = "Add account";
"screen_settings_user_status_away" = "Away";
"screen_settings_user_status_be_right_back" = "Be right back";
"screen_settings_user_status_custom" = "Custom…";
"screen_settings_user_status_custom_hint" = "Custom status…";
"screen_settings_user_status_focus_time" = "Focus time";
"screen_settings_user_status_in_a_meeting" = "In a meeting";
"screen_settings_user_status_on_the_road" = "On the road";
"screen_settings_user_status_placeholder" = "What's your status?";
"screen_share_location_live_location_disclaimer_title" = "Your live location history will be stored in the room and visible to members after the session ends."; "screen_share_location_live_location_disclaimer_title" = "Your live location history will be stored in the room and visible to members after the session ends.";
"screen_share_location_live_location_duration_picker_title" = "Choose how long to share your live location."; "screen_share_location_live_location_duration_picker_title" = "Choose how long to share your live location.";
"screen_share_location_live_location_missing_permissions" = "You do not have permissions to share your live location in this room"; "screen_share_location_live_location_missing_permissions" = "You do not have permissions to share your live location in this room";
@@ -1603,10 +1511,9 @@
"screen_share_this_location_action" = "Споделяне на това местоположение"; "screen_share_this_location_action" = "Споделяне на това местоположение";
"screen_sharing_location_option_sheet_title" = "Sharing options"; "screen_sharing_location_option_sheet_title" = "Sharing options";
"screen_signed_out_reason_1" = "Променили сте паролата си в друга сесия"; "screen_signed_out_reason_1" = "Променили сте паролата си в друга сесия";
"screen_signed_out_reason_2" = "You’ve changed your password on another device"; "screen_signed_out_reason_2" = "You have deleted the session from another session";
"screen_signed_out_reason_3" = "Your server's session expired or the administrator has blocked your access"; "screen_signed_out_reason_3" = "Your server’s administrator has invalidated your access";
"screen_signed_out_subtitle" = "You might have been signed out for one of the reasons listed below. Please sign in again to continue using %@."; "screen_signed_out_subtitle" = "You might have been signed out for one of the reasons listed below. Please sign in again to continue using %@.";
"screen_signed_out_subtitle_v2" = "This device was removed for one of the reasons listed below. Please sign in again to connect this device to your account.";
"screen_signed_out_title" = "Излезли сте"; "screen_signed_out_title" = "Излезли сте";
"screen_signout_confirmation_dialog_content" = "Сигурни ли сте, че искате да излезете?"; "screen_signout_confirmation_dialog_content" = "Сигурни ли сте, че искате да излезете?";
"screen_signout_confirmation_dialog_submit" = "Изход"; "screen_signout_confirmation_dialog_submit" = "Изход";
@@ -1632,7 +1539,7 @@
"screen_space_list_parent_space" = "%1$@ пространство"; "screen_space_list_parent_space" = "%1$@ пространство";
"screen_space_list_title" = "Пространства"; "screen_space_list_title" = "Пространства";
"screen_space_menu_action_members" = "Преглед на членовете"; "screen_space_menu_action_members" = "Преглед на членовете";
"screen_space_remove_rooms_confirmation_content" = "Removing a room will not affect the room access. To change the access go to Room info > Security & privacy."; "screen_space_remove_rooms_confirmation_content" = "Removing a room will not affect the room access. To change the access go to Room info > Privacy & security.";
"screen_space_remove_rooms_confirmation_title_ios" = "Remove rooms from %1$@?"; "screen_space_remove_rooms_confirmation_title_ios" = "Remove rooms from %1$@?";
"screen_space_settings_leave_space" = "Напускане на пространството"; "screen_space_settings_leave_space" = "Напускане на пространството";
"screen_space_settings_roles_and_permissions" = "Роли и разрешения"; "screen_space_settings_roles_and_permissions" = "Роли и разрешения";
@@ -1783,7 +1690,6 @@
"troubleshoot_notifications_test_push_loop_back_failure_2" = "Грешка: %1$@"; "troubleshoot_notifications_test_push_loop_back_failure_2" = "Грешка: %1$@";
"troubleshoot_notifications_test_push_loop_back_failure_3" = "Error, cannot test push."; "troubleshoot_notifications_test_push_loop_back_failure_3" = "Error, cannot test push.";
"troubleshoot_notifications_test_push_loop_back_failure_4" = "Error, timeout waiting for push."; "troubleshoot_notifications_test_push_loop_back_failure_4" = "Error, timeout waiting for push.";
"troubleshoot_notifications_test_push_loop_back_failure_rate_limit" = "Error: the push gateway is rate limiting this device, so notifications won't be reliable. Please set up a different push gateway.";
"troubleshoot_notifications_test_push_loop_back_success" = "Push loop back took %1$d ms."; "troubleshoot_notifications_test_push_loop_back_success" = "Push loop back took %1$d ms.";
"troubleshoot_notifications_test_push_loop_back_title" = "Test Push loop back"; "troubleshoot_notifications_test_push_loop_back_title" = "Test Push loop back";
"troubleshoot_notifications_test_unified_push_description" = "Ensure that UnifiedPush distributors are available."; "troubleshoot_notifications_test_unified_push_description" = "Ensure that UnifiedPush distributors are available.";
@@ -18,22 +18,6 @@
<key>NSStringLocalizedFormatKey</key> <key>NSStringLocalizedFormatKey</key>
<string>%#@COUNT@</string> <string>%#@COUNT@</string>
</dict> </dict>
<key>a11y_gallery_more_media</key>
<dict>
<key>COUNT</key>
<dict>
<key>NSStringFormatSpecTypeKey</key>
<string>NSStringPluralRuleType</string>
<key>NSStringFormatValueTypeKey</key>
<string>d</string>
<key>one</key>
<string>Gallery, %1$d more media</string>
<key>other</key>
<string>Gallery, %1$d more medias</string>
</dict>
<key>NSStringLocalizedFormatKey</key>
<string>%#@COUNT@</string>
</dict>
<key>a11y_polls_percent_of_total</key> <key>a11y_polls_percent_of_total</key>
<dict> <dict>
<key>COUNT</key> <key>COUNT</key>
@@ -66,54 +50,6 @@
<key>NSStringLocalizedFormatKey</key> <key>NSStringLocalizedFormatKey</key>
<string>%#@COUNT@</string> <string>%#@COUNT@</string>
</dict> </dict>
<key>action_forward_messages</key>
<dict>
<key>COUNT</key>
<dict>
<key>NSStringFormatSpecTypeKey</key>
<string>NSStringPluralRuleType</string>
<key>NSStringFormatValueTypeKey</key>
<string>d</string>
<key>one</key>
<string>Forward %1$d message</string>
<key>other</key>
<string>Forward %1$d messages</string>
</dict>
<key>NSStringLocalizedFormatKey</key>
<string>%#@COUNT@</string>
</dict>
<key>common_gallery_reply_attachments</key>
<dict>
<key>COUNT</key>
<dict>
<key>NSStringFormatSpecTypeKey</key>
<string>NSStringPluralRuleType</string>
<key>NSStringFormatValueTypeKey</key>
<string>d</string>
<key>one</key>
<string>%1$d attachment…</string>
<key>other</key>
<string>%1$d attachments…</string>
</dict>
<key>NSStringLocalizedFormatKey</key>
<string>%#@COUNT@</string>
</dict>
<key>common_gallery_reply_media_items</key>
<dict>
<key>COUNT</key>
<dict>
<key>NSStringFormatSpecTypeKey</key>
<string>NSStringPluralRuleType</string>
<key>NSStringFormatValueTypeKey</key>
<string>d</string>
<key>one</key>
<string>%1$d media item…</string>
<key>other</key>
<string>%1$d media items…</string>
</dict>
<key>NSStringLocalizedFormatKey</key>
<string>%#@COUNT@</string>
</dict>
<key>common_many_members</key> <key>common_many_members</key>
<dict> <dict>
<key>COUNT</key> <key>COUNT</key>
@@ -274,22 +210,6 @@
<key>NSStringLocalizedFormatKey</key> <key>NSStringLocalizedFormatKey</key>
<string>%#@COUNT@</string> <string>%#@COUNT@</string>
</dict> </dict>
<key>notification_gallery_body</key>
<dict>
<key>COUNT</key>
<dict>
<key>NSStringFormatSpecTypeKey</key>
<string>NSStringPluralRuleType</string>
<key>NSStringFormatValueTypeKey</key>
<string>d</string>
<key>one</key>
<string>Shared %1$d attachment</string>
<key>other</key>
<string>Shared %1$d attachments</string>
</dict>
<key>NSStringLocalizedFormatKey</key>
<string>%#@COUNT@</string>
</dict>
<key>notification_invitations</key> <key>notification_invitations</key>
<dict> <dict>
<key>COUNT</key> <key>COUNT</key>
@@ -354,22 +274,6 @@
<key>NSStringLocalizedFormatKey</key> <key>NSStringLocalizedFormatKey</key>
<string>%#@COUNT@</string> <string>%#@COUNT@</string>
</dict> </dict>
<key>screen.room.timeline_redacted_messages</key>
<dict>
<key>COUNT</key>
<dict>
<key>NSStringFormatSpecTypeKey</key>
<string>NSStringPluralRuleType</string>
<key>NSStringFormatValueTypeKey</key>
<string>d</string>
<key>one</key>
<string>%1$d removed message</string>
<key>other</key>
<string>%1$d removed messages</string>
</dict>
<key>NSStringLocalizedFormatKey</key>
<string>%#@COUNT@</string>
</dict>
<key>screen_advanced_settings_live_location_update_distance</key> <key>screen_advanced_settings_live_location_update_distance</key>
<dict> <dict>
<key>COUNT</key> <key>COUNT</key>
@@ -546,22 +450,6 @@
<key>NSStringLocalizedFormatKey</key> <key>NSStringLocalizedFormatKey</key>
<string>%#@COUNT@</string> <string>%#@COUNT@</string>
</dict> </dict>
<key>screen_room_messages_forwarded</key>
<dict>
<key>COUNT</key>
<dict>
<key>NSStringFormatSpecTypeKey</key>
<string>NSStringPluralRuleType</string>
<key>NSStringFormatValueTypeKey</key>
<string>d</string>
<key>one</key>
<string>%1$d message forwarded</string>
<key>other</key>
<string>%1$d messages forwarded</string>
</dict>
<key>NSStringLocalizedFormatKey</key>
<string>%#@COUNT@</string>
</dict>
<key>screen_room_multiple_knock_requests_title</key> <key>screen_room_multiple_knock_requests_title</key>
<dict> <dict>
<key>COUNT</key> <key>COUNT</key>
@@ -578,22 +466,6 @@
<key>NSStringLocalizedFormatKey</key> <key>NSStringLocalizedFormatKey</key>
<string>%#@COUNT@</string> <string>%#@COUNT@</string>
</dict> </dict>
<key>screen_room_selection_count</key>
<dict>
<key>COUNT</key>
<dict>
<key>NSStringFormatSpecTypeKey</key>
<string>NSStringPluralRuleType</string>
<key>NSStringFormatValueTypeKey</key>
<string>d</string>
<key>one</key>
<string>%1$d message selected</string>
<key>other</key>
<string>%1$d messages selected</string>
</dict>
<key>NSStringLocalizedFormatKey</key>
<string>%#@COUNT@</string>
</dict>
<key>screen_room_timeline_reaction_a11y</key> <key>screen_room_timeline_reaction_a11y</key>
<dict> <dict>
<key>COUNT</key> <key>COUNT</key>
@@ -690,7 +562,7 @@
<key>NSStringLocalizedFormatKey</key> <key>NSStringLocalizedFormatKey</key>
<string>%#@COUNT@</string> <string>%#@COUNT@</string>
</dict> </dict>
<key>screen_timeline_active_call_joined_count</key> <key>screen_timeline_active_call_extra_joined_count</key>
<dict> <dict>
<key>COUNT</key> <key>COUNT</key>
<dict> <dict>
@@ -699,9 +571,9 @@
<key>NSStringFormatValueTypeKey</key> <key>NSStringFormatValueTypeKey</key>
<string>d</string> <string>d</string>
<key>one</key> <key>one</key>
<string>%1$d joined</string> <string>+ %1$d joined</string>
<key>other</key> <key>other</key>
<string>%1$d joined</string> <string>+ %1$d joined</string>
</dict> </dict>
<key>NSStringLocalizedFormatKey</key> <key>NSStringLocalizedFormatKey</key>
<string>%#@COUNT@</string> <string>%#@COUNT@</string>
@@ -1,6 +1,6 @@
"NSCameraUsageDescription" = "Per fer fotos o vídeos i enviar-los com a missatge, Element X necessita accés a la càmera."; "NSCameraUsageDescription" = "Per fer fotos o vídeos i enviar-los com a missatge, Element X necessita accés a la càmera.";
"NSFaceIDUsageDescription" = "Face ID s'utilitza per accedir a l'aplicació."; "NSFaceIDUsageDescription" = "Face ID s'utilitza per accedir a l'aplicació.";
"NSLocationAlwaysAndWhenInUseUsageDescription" = "To share your location live in chats, location access is needed when the app is in the background."; "NSLocationAlwaysAndWhenInUseUsageDescription" = "To share your live location, Element X needs location access when the app is in the background.";
"NSLocationWhenInUseUsageDescription" = "Concedeix accés a la ubicació perquè Element X pugui compartir la teva ubicació."; "NSLocationWhenInUseUsageDescription" = "Concedeix accés a la ubicació perquè Element X pugui compartir la teva ubicació.";
"NSMicrophoneUsageDescription" = "Per gravar i enviar missatges amb àudio, Element X necessita accedir al micròfon."; "NSMicrophoneUsageDescription" = "Per gravar i enviar missatges amb àudio, Element X necessita accedir al micròfon.";
"NSPhotoLibraryUsageDescription" = "Això permet desar imatges i vídeos a la biblioteca de fotos."; "NSPhotoLibraryUsageDescription" = "Això permet desar imatges i vídeos a la biblioteca de fotos.";
@@ -6,23 +6,16 @@
"a11y_collapse_message_text_field" = "Minimise message text field"; "a11y_collapse_message_text_field" = "Minimise message text field";
"a11y_create_poll_votes_allowed_decrease" = "Decrease votes allowed per person"; "a11y_create_poll_votes_allowed_decrease" = "Decrease votes allowed per person";
"a11y_create_poll_votes_allowed_increase" = "Increase votes allowed per person"; "a11y_create_poll_votes_allowed_increase" = "Increase votes allowed per person";
"a11y_custom_emoji" = "Custom emoji";
"a11y_delete" = "Elimina"; "a11y_delete" = "Elimina";
"a11y_duration" = "Duration: %1$@"; "a11y_duration" = "Duration: %1$@";
"a11y_edit_avatar" = "Edit avatar"; "a11y_edit_avatar" = "Edit avatar";
"a11y_edit_room_address_hint" = "The full address will be %1$@"; "a11y_edit_room_address_hint" = "The full address will be %1$@";
"a11y_expand_message_text_field" = "Expand message text field"; "a11y_expand_message_text_field" = "Expand message text field";
"a11y_gallery_attachment" = "Gallery, attachment %1$d";
"a11y_gallery_failed_scan" = "Gallery, failed scan %1$d";
"a11y_gallery_image" = "Gallery, image %1$d";
"a11y_gallery_scanning" = "Gallery, scanning %1$d";
"a11y_gallery_video" = "Gallery, video %1$d";
"a11y_hide_password" = "Amaga contrasenya"; "a11y_hide_password" = "Amaga contrasenya";
"a11y_info" = "Info"; "a11y_info" = "Info";
"a11y_join_call" = "Uneix-te a la trucada"; "a11y_join_call" = "Uneix-te a la trucada";
"a11y_jump_to_bottom" = "Vés al final"; "a11y_jump_to_bottom" = "Vés al final";
"a11y_jump_to_unread" = "Jump to unread"; "a11y_jump_to_unread" = "Jump to unread";
"a11y_jump_to_unread_messages" = "Jump to first unread message";
"a11y_notifications_mentions_only" = "Només mencions"; "a11y_notifications_mentions_only" = "Només mencions";
"a11y_notifications_muted" = "Silenciat"; "a11y_notifications_muted" = "Silenciat";
"a11y_notifications_new_mentions" = "Noves mencions"; "a11y_notifications_new_mentions" = "Noves mencions";
@@ -57,7 +50,6 @@
"a11y_start_call" = "Inicia trucada"; "a11y_start_call" = "Inicia trucada";
"a11y_start_video_call" = "Start a video call"; "a11y_start_video_call" = "Start a video call";
"a11y_start_voice_call" = "Start a voice call"; "a11y_start_voice_call" = "Start a voice call";
"a11y_status" = "Status";
"a11y_tombstoned_room" = "Tombstoned room"; "a11y_tombstoned_room" = "Tombstoned room";
"a11y_user_menu" = "Menú d'usuari"; "a11y_user_menu" = "Menú d'usuari";
"a11y_video_preview" = "Video preview"; "a11y_video_preview" = "Video preview";
@@ -86,7 +78,6 @@
"action_choose_file" = "Choose file"; "action_choose_file" = "Choose file";
"action_choose_photo" = "Tria una foto"; "action_choose_photo" = "Tria una foto";
"action_clear" = "Esborra"; "action_clear" = "Esborra";
"action_clear_all" = "Clear all";
"action_close" = "Tanca"; "action_close" = "Tanca";
"action_complete_verification" = "Completa la verificació"; "action_complete_verification" = "Completa la verificació";
"action_confirm" = "Confirma"; "action_confirm" = "Confirma";
@@ -97,7 +88,6 @@
"action_copy_link" = "Copia l'enllaç"; "action_copy_link" = "Copia l'enllaç";
"action_copy_link_to_message" = "Copia l'enllaç al missatge"; "action_copy_link_to_message" = "Copia l'enllaç al missatge";
"action_copy_text" = "Copia text"; "action_copy_text" = "Copia text";
"action_copy_to_clipboard" = "Copy to clipboard";
"action_create" = "Crea"; "action_create" = "Crea";
"action_create_room" = "Crea sala"; "action_create_room" = "Crea sala";
"action_create_space" = "Create space"; "action_create_space" = "Create space";
@@ -145,7 +135,6 @@
"action_manage_account_and_devices" = "Manage account & devices"; "action_manage_account_and_devices" = "Manage account & devices";
"action_manage_devices" = "Gestiona dispositius"; "action_manage_devices" = "Gestiona dispositius";
"action_manage_rooms" = "Manage rooms"; "action_manage_rooms" = "Manage rooms";
"action_mark_as_read" = "Mark as read";
"action_message" = "Envia missatge"; "action_message" = "Envia missatge";
"action_minimize" = "Minimise"; "action_minimize" = "Minimise";
"action_next" = "Següent"; "action_next" = "Següent";
@@ -220,7 +209,6 @@
"call_invalid_audio_device_bluetooth_devices_disabled" = "Element Call does not support using Bluetooth audio devices in this Android version. Please select a different audio device."; "call_invalid_audio_device_bluetooth_devices_disabled" = "Element Call does not support using Bluetooth audio devices in this Android version. Please select a different audio device.";
"common_about" = "Sobre l'aplicació"; "common_about" = "Sobre l'aplicació";
"common_acceptable_use_policy" = "Política d'ús a acceptar"; "common_acceptable_use_policy" = "Política d'ús a acceptar";
"common_account_settings" = "Account settings";
"common_add_account" = "Add an account"; "common_add_account" = "Add an account";
"common_add_another_account" = "Add account"; "common_add_another_account" = "Add account";
"common_adding_caption" = "Afegint llegenda"; "common_adding_caption" = "Afegint llegenda";
@@ -229,7 +217,6 @@
"common_analytics" = "Analítiques"; "common_analytics" = "Analítiques";
"common_android_shortcuts_remove_reason_left_room" = "Has sortit de la sala"; "common_android_shortcuts_remove_reason_left_room" = "Has sortit de la sala";
"common_android_shortcuts_remove_reason_session_logged_out" = "You were logged out of the session"; "common_android_shortcuts_remove_reason_session_logged_out" = "You were logged out of the session";
"common_app_settings" = "App settings";
"common_appearance" = "Aspecte"; "common_appearance" = "Aspecte";
"common_audio" = "Àudio"; "common_audio" = "Àudio";
"common_beta" = "Beta"; "common_beta" = "Beta";
@@ -240,8 +227,6 @@
"common_call_started" = "Trucada iniciada"; "common_call_started" = "Trucada iniciada";
"common_call_you_declined" = "You declined a call"; "common_call_you_declined" = "You declined a call";
"common_chat_backup" = "Còpia de seguretat de xat"; "common_chat_backup" = "Còpia de seguretat de xat";
"common_chats" = "Chats";
"common_code_block" = "Code block";
"common_copied_to_clipboard" = "Copiat al porta-retalls"; "common_copied_to_clipboard" = "Copiat al porta-retalls";
"common_copyright" = "Drets d'autor"; "common_copyright" = "Drets d'autor";
"common_creating_room" = "Creant sala…"; "common_creating_room" = "Creant sala…";
@@ -279,12 +264,10 @@
"common_file_deleted" = "Fitxer eliminat"; "common_file_deleted" = "Fitxer eliminat";
"common_file_saved" = "Fitxer desat"; "common_file_saved" = "Fitxer desat";
"common_forward_message" = "Reenvia missatge"; "common_forward_message" = "Reenvia missatge";
"common_forward_to" = "Forward to";
"common_frequently_used" = "Utilitzats freqüentment"; "common_frequently_used" = "Utilitzats freqüentment";
"common_gallery" = "Gallery"; "common_gallery" = "Gallery";
"common_gif" = "GIF"; "common_gif" = "GIF";
"common_group_call_in_progress" = "Group call in progress"; "common_group_call_in_progress" = "Group call in progress";
"common_header_rooms" = "Rooms";
"common_image" = "Imatge"; "common_image" = "Imatge";
"common_in_reply_to" = "En resposta a %1$@"; "common_in_reply_to" = "En resposta a %1$@";
"common_invite_unknown_profile" = "No s'ha trobat l'ID de Matrix, és possible que la invitació no s'hagi rebut."; "common_invite_unknown_profile" = "No s'ha trobat l'ID de Matrix, és possible que la invitació no s'hagi rebut.";
@@ -297,25 +280,20 @@
"common_live_location_ended" = "Live location ended"; "common_live_location_ended" = "Live location ended";
"common_loading" = "S'està carregant…"; "common_loading" = "S'està carregant…";
"common_loading_more" = "Carregant més…"; "common_loading_more" = "Carregant més…";
"common_location_sharing" = "Location sharing";
"common_media_upload_quality" = "Media upload quality";
"common_message" = "Missatge"; "common_message" = "Missatge";
"common_message_actions" = "Accions de missatge"; "common_message_actions" = "Accions de missatge";
"common_message_failed_to_send" = "Message failed to send"; "common_message_failed_to_send" = "Message failed to send";
"common_message_layout" = "Estil dels missatges"; "common_message_layout" = "Estil dels missatges";
"common_message_removed" = "Missatge eliminat"; "common_message_removed" = "Missatge eliminat";
"common_moderation_and_safety" = "Moderation & safety";
"common_modern" = "Modern"; "common_modern" = "Modern";
"common_mute" = "Silencia"; "common_mute" = "Silencia";
"common_name" = "Name"; "common_name" = "Name";
"common_name_and_id" = "%1$@ (%2$@)"; "common_name_and_id" = "%1$@ (%2$@)";
"common_no_results" = "Sense resultats"; "common_no_results" = "Sense resultats";
"common_no_results_for" = "There are no results for “%1$@”. Try a new search term.";
"common_no_room_name" = "Sala sense nom"; "common_no_room_name" = "Sala sense nom";
"common_no_space_name" = "No space name"; "common_no_space_name" = "No space name";
"common_not_encrypted" = "Sense xifrar"; "common_not_encrypted" = "Sense xifrar";
"common_offline" = "Fora de línia"; "common_offline" = "Fora de línia";
"common_on_a_call" = "On a call";
"common_open_source_licenses" = "Llicències de codi obert"; "common_open_source_licenses" = "Llicències de codi obert";
"common_optic_id_ios" = "Optic ID"; "common_optic_id_ios" = "Optic ID";
"common_or" = "o"; "common_or" = "o";
@@ -349,7 +327,6 @@
"common_replying_to" = "Responent a %1$@"; "common_replying_to" = "Responent a %1$@";
"common_report_a_problem" = "Informa d'un problema"; "common_report_a_problem" = "Informa d'un problema";
"common_report_submitted" = "S'ha enviat"; "common_report_submitted" = "S'ha enviat";
"common_results_for" = "Results for “%1$@”";
"common_rich_text_editor" = "Editor de text enriquit"; "common_rich_text_editor" = "Editor de text enriquit";
"common_role" = "Role"; "common_role" = "Role";
"common_room" = "Sala"; "common_room" = "Sala";
@@ -377,7 +354,6 @@
"common_shared_live_location" = "Shared live location"; "common_shared_live_location" = "Shared live location";
"common_shared_location" = "Ubicació compartida"; "common_shared_location" = "Ubicació compartida";
"common_shared_space" = "Shared space"; "common_shared_space" = "Shared space";
"common_signed_in" = "Signed in";
"common_signing_out" = "Tancant sessió"; "common_signing_out" = "Tancant sessió";
"common_something_went_wrong" = "Alguna cosa ha anat malament"; "common_something_went_wrong" = "Alguna cosa ha anat malament";
"common_something_went_wrong_message" = "S'ha produït un problema. Torna-ho a intentar."; "common_something_went_wrong_message" = "S'ha produït un problema. Torna-ho a intentar.";
@@ -389,7 +365,6 @@
"common_success" = "Correcte"; "common_success" = "Correcte";
"common_suggested" = "Suggested"; "common_suggested" = "Suggested";
"common_suggestions" = "Suggeriments"; "common_suggestions" = "Suggeriments";
"common_switch_accounts" = "Switch accounts";
"common_syncing" = "Sincronitzant"; "common_syncing" = "Sincronitzant";
"common_text" = "Text"; "common_text" = "Text";
"common_third_party_notices" = "Avisos de tercers"; "common_third_party_notices" = "Avisos de tercers";
@@ -430,14 +405,12 @@
"common_waiting_live_location" = "Waiting for live location…"; "common_waiting_live_location" = "Waiting for live location…";
"common_world_readable_history" = "Anyone can see history"; "common_world_readable_history" = "Anyone can see history";
"common_you" = "Tu"; "common_you" = "Tu";
"common_your_account" = "Your account";
"confirm_recovery_key_banner_message" = "Confirma la clau de recuperació per mantenir l'accés a l'emmagatzematge de claus i a l'historial de missatges."; "confirm_recovery_key_banner_message" = "Confirma la clau de recuperació per mantenir l'accés a l'emmagatzematge de claus i a l'historial de missatges.";
"confirm_recovery_key_banner_primary_button_title" = "Introdueix clau de recuperació"; "confirm_recovery_key_banner_primary_button_title" = "Introdueix clau de recuperació";
"confirm_recovery_key_banner_secondary_button_title" = "Has oblidat la clau de recuperació?"; "confirm_recovery_key_banner_secondary_button_title" = "Has oblidat la clau de recuperació?";
"confirm_recovery_key_banner_title" = "L'emmagatzematge de claus no està sincronitzat"; "confirm_recovery_key_banner_title" = "L'emmagatzematge de claus no està sincronitzat";
"content_scanner_not_found" = "Download not available."; "content_scanner_not_found" = "Download not available.";
"content_scanner_not_found_title" = "Something went wrong"; "content_scanner_not_found_title" = "File not found";
"content_scanner_scanning" = "Scanning…";
"content_scanner_unsafe_message" = "Preview and download have been disabled."; "content_scanner_unsafe_message" = "Preview and download have been disabled.";
"content_scanner_unsafe_title" = "The file is not safe"; "content_scanner_unsafe_title" = "The file is not safe";
"crash_detection_dialog_content" = "%1$@ ha fallat l'últim cop que es va utilitzar. Vols enviar un informe d'errors?"; "crash_detection_dialog_content" = "%1$@ ha fallat l'últim cop que es va utilitzar. Vols enviar un informe d'errors?";
@@ -511,11 +484,6 @@
"error_no_compatible_app_found" = "No s'ha trobat cap aplicació compatible per gestionar aquesta acció."; "error_no_compatible_app_found" = "No s'ha trobat cap aplicació compatible per gestionar aquesta acció.";
"error_room_address_already_exists" = "Aquesta adreça de sala ja existeix. Prova d'editar el camp d'adreça o de canviar el nom de sala"; "error_room_address_already_exists" = "Aquesta adreça de sala ja existeix. Prova d'editar el camp d'adreça o de canviar el nom de sala";
"error_room_address_invalid_symbols" = "Alguns caràcters no estan permesos. Només s'admeten lletres, dígits i els símbols següents: ! $ & ‘ ( ) * + / ; = ? @ [ ] - . _"; "error_room_address_invalid_symbols" = "Alguns caràcters no estan permesos. Només s'admeten lletres, dígits i els símbols següents: ! $ & ‘ ( ) * + / ; = ? @ [ ] - . _";
"error_sending_failure_invalid_mime_type" = "Invalid mime type: %@";
"error_sending_failure_missing_media_content" = "Missing media content";
"error_sending_failure_other" = "Error details: %@";
"error_sending_failure_sending_from_unverified_device" = "Sending from unverified device";
"error_sending_failure_unknown" = "Unknown error";
"error_some_messages_have_not_been_sent" = "Alguns missatges no s'han enviat"; "error_some_messages_have_not_been_sent" = "Alguns missatges no s'han enviat";
"error_unknown" = "S'ha produït un error"; "error_unknown" = "S'ha produït un error";
"error.account_already_logged_in" = "You're already logged in on this device as %1$@."; "error.account_already_logged_in" = "You're already logged in on this device as %1$@.";
@@ -545,8 +513,6 @@
"notification_invitation_action_reject" = "Rebutja"; "notification_invitation_action_reject" = "Rebutja";
"notification_invite_body" = "T'ha convidat a xatejar"; "notification_invite_body" = "T'ha convidat a xatejar";
"notification_invite_body_with_sender" = "%1$@ t'ha convidat a xatejar"; "notification_invite_body_with_sender" = "%1$@ t'ha convidat a xatejar";
"notification_knock_request_body" = "Requested to join";
"notification_live_location_started_body" = "Started sharing their live location";
"notification_mentioned_you_body" = "T'ha mencionat: %1$@"; "notification_mentioned_you_body" = "T'ha mencionat: %1$@";
"notification_new_messages" = "Missatges nous"; "notification_new_messages" = "Missatges nous";
"notification_reaction_body" = "Ha reaccionat amb %1$@"; "notification_reaction_body" = "Ha reaccionat amb %1$@";
@@ -731,22 +697,14 @@
"screen_change_server_error_element_pro_required_title" = "Element Pro required"; "screen_change_server_error_element_pro_required_title" = "Element Pro required";
"screen_change_server_error_invalid_homeserver" = "No s'ha pogut accedir a aquest servidor. Comprova que hagis introduït correctament l'URL del servidor. Si ja és correcte, posa't en contacte amb l'administrador del servidor per a més informació."; "screen_change_server_error_invalid_homeserver" = "No s'ha pogut accedir a aquest servidor. Comprova que hagis introduït correctament l'URL del servidor. Si ja és correcte, posa't en contacte amb l'administrador del servidor per a més informació.";
"screen_change_server_error_invalid_well_known" = "Servidor no disponible a causa d'un problema al fitxer .well-known:\n%1$@"; "screen_change_server_error_invalid_well_known" = "Servidor no disponible a causa d'un problema al fitxer .well-known:\n%1$@";
"screen_change_server_error_no_sliding_sync_message" = "The selected account provider does not support sliding sync. The server needs to be upgraded to use %1$@."; "screen_change_server_error_no_sliding_sync_message" = "The selected account provider does not support sliding sync. An upgrade to the server is needed to use %1$@.";
"screen_change_server_error_unauthorized_homeserver" = "%1$@ is not allowed to connect to %2$@."; "screen_change_server_error_unauthorized_homeserver" = "%1$@ is not allowed to connect to %2$@.";
"screen_change_server_error_unauthorized_homeserver_content" = "This app has been configured to allow: %1$@."; "screen_change_server_error_unauthorized_homeserver_content" = "This app has been configured to allow: %1$@.";
"screen_change_server_error_unauthorized_homeserver_title" = "Account provider %1$@ not allowed."; "screen_change_server_error_unauthorized_homeserver_title" = "Account provider %1$@ not allowed.";
"screen_change_server_form_header" = "URL del servidor"; "screen_change_server_form_header" = "URL del servidor";
"screen_change_server_form_notice" = "Introdueix un domini."; "screen_change_server_form_notice" = "Introdueix un domini.";
"screen_change_server_navigation_title_login" = "Sign in";
"screen_change_server_navigation_title_register" = "Create account";
"screen_change_server_subtitle" = "Quina és l'adreça del teu servidor?"; "screen_change_server_subtitle" = "Quina és l'adreça del teu servidor?";
"screen_change_server_textfield_footer_login" = "If your account is provided by your company or a community, then change the account provider (example: companyname.com).";
"screen_change_server_textfield_footer_register" = "Create an account on matrix.org for free. If you want to create an account with a different provider, then change it accordingly (example: communityname.org).";
"screen_change_server_textfield_header" = "Account provider";
"screen_change_server_textfield_placeholder" = "example.com";
"screen_change_server_title" = "Selecciona el teu servidor"; "screen_change_server_title" = "Selecciona el teu servidor";
"screen_change_server_title_login" = "Enter your account provider";
"screen_change_server_title_register" = "Choose an account provider";
"screen_chat_backup_key_backup_action_disable" = "Elimina l'emmagatzematge de claus"; "screen_chat_backup_key_backup_action_disable" = "Elimina l'emmagatzematge de claus";
"screen_chat_backup_key_backup_action_enable" = "Activa còpia de seguretat"; "screen_chat_backup_key_backup_action_enable" = "Activa còpia de seguretat";
"screen_chat_backup_key_backup_description" = "Emmagatzema la teva identitat criptogràfica i les claus de missatge de forma segura al servidor. Això et permetrà veure l'historial de missatges en qualsevol dispositiu nou. %1$@."; "screen_chat_backup_key_backup_description" = "Emmagatzema la teva identitat criptogràfica i les claus de missatge de forma segura al servidor. Això et permetrà veure l'historial de missatges en qualsevol dispositiu nou. %1$@.";
@@ -793,7 +751,7 @@
"screen_create_room_private_option_description" = "Només s'hi poden unir les persones convidades."; "screen_create_room_private_option_description" = "Només s'hi poden unir les persones convidades.";
"screen_create_room_private_option_title" = "Private"; "screen_create_room_private_option_title" = "Private";
"screen_create_room_public_option_description" = "Tothom pot trobar aquesta sala.\nPots canviar-ho en qualsevol moment a la configuració de sala."; "screen_create_room_public_option_description" = "Tothom pot trobar aquesta sala.\nPots canviar-ho en qualsevol moment a la configuració de sala.";
"screen_create_room_public_option_short_description" = "Anyone can join, including people outside your organisation."; "screen_create_room_public_option_short_description" = "Anyone can join.";
"screen_create_room_public_option_title" = "Public"; "screen_create_room_public_option_title" = "Public";
"screen_create_room_room_access_section_knocking_option_description" = "Qualsevol persona pot sol·licitar unir-s'hi però un administrador o moderador l'haurà d'acceptar"; "screen_create_room_room_access_section_knocking_option_description" = "Qualsevol persona pot sol·licitar unir-s'hi però un administrador o moderador l'haurà d'acceptar";
"screen_create_room_room_access_section_knocking_option_title" = "Permet sol·licituds d'unió"; "screen_create_room_room_access_section_knocking_option_title" = "Permet sol·licituds d'unió";
@@ -966,10 +924,6 @@
"screen_knock_requests_list_empty_state_title" = "No hi ha sol·licituds d'unió pendents"; "screen_knock_requests_list_empty_state_title" = "No hi ha sol·licituds d'unió pendents";
"screen_knock_requests_list_initial_loading_title" = "Carregant sol·licituds d'unió…"; "screen_knock_requests_list_initial_loading_title" = "Carregant sol·licituds d'unió…";
"screen_knock_requests_list_title" = "Sol·licituds d'unió"; "screen_knock_requests_list_title" = "Sol·licituds d'unió";
"screen_labs_enable_gallery" = "Gallery messages";
"screen_labs_enable_gallery_description" = "Send multiple images or videos in one go. Stable on mobile, but not yet supported by web.";
"screen_labs_enable_knocking" = "Ask to join";
"screen_labs_enable_knocking_description" = "Users can request access to a room that is not open for anyone to join. Stable on mobile, web implementation exists but is experimental.";
"screen_labs_enable_threads" = "Enable thread replies"; "screen_labs_enable_threads" = "Enable thread replies";
"screen_labs_enable_threads_description" = "The app will restart to apply this change."; "screen_labs_enable_threads_description" = "The app will restart to apply this change.";
"screen_labs_header_description" = "Try out our latest ideas in development. These features are not finalised; they may be unstable, may change."; "screen_labs_header_description" = "Try out our latest ideas in development. These features are not finalised; they may be unstable, may change.";
@@ -978,11 +932,11 @@
"screen_leave_space_choose_owners_action" = "Choose owners"; "screen_leave_space_choose_owners_action" = "Choose owners";
"screen_leave_space_last_admin_info" = "%1$@ (Admin)"; "screen_leave_space_last_admin_info" = "%1$@ (Admin)";
"screen_leave_space_subtitle" = "Select the rooms you’d like to leave which you're not the only administrator for:"; "screen_leave_space_subtitle" = "Select the rooms you’d like to leave which you're not the only administrator for:";
"screen_leave_space_subtitle_last_admin" = "You need to assign another administrator for this space before you can leave."; "screen_leave_space_subtitle_last_admin" = "You need to assign another admin for this space before you can leave.";
"screen_leave_space_subtitle_last_owner" = "You are the only owner of %1$@. You need to transfer ownership to someone else before you leave."; "screen_leave_space_subtitle_last_owner" = "You are the only owner of %1$@. You need to transfer ownership to someone else before you leave.";
"screen_leave_space_subtitle_only_last_admin" = "You will not be removed from the following room(s) because you're the only administrator:"; "screen_leave_space_subtitle_only_last_admin" = "You will not be removed from the following room(s) because you're the only administrator:";
"screen_leave_space_title" = "Leave %1$@?"; "screen_leave_space_title" = "Leave %1$@?";
"screen_leave_space_title_last_admin" = "You are the only administrator for %1$@"; "screen_leave_space_title_last_admin" = "You are the only admin for %1$@";
"screen_leave_space_title_last_owner" = "Transfer ownership"; "screen_leave_space_title_last_owner" = "Transfer ownership";
"screen_link_new_device_authentication_reason_ios" = "Confirm it's you before linking a new device."; "screen_link_new_device_authentication_reason_ios" = "Confirm it's you before linking a new device.";
"screen_link_new_device_desktop_scanning_title" = "Escaneja el QR"; "screen_link_new_device_desktop_scanning_title" = "Escaneja el QR";
@@ -990,7 +944,6 @@
"screen_link_new_device_desktop_step3" = "Escaneja el codi QR amb aquest dispositiu"; "screen_link_new_device_desktop_step3" = "Escaneja el codi QR amb aquest dispositiu";
"screen_link_new_device_desktop_submit" = "Preparat per escanejar"; "screen_link_new_device_desktop_submit" = "Preparat per escanejar";
"screen_link_new_device_desktop_title" = "Open %1$@ on a desktop computer to get the QR code"; "screen_link_new_device_desktop_title" = "Open %1$@ on a desktop computer to get the QR code";
"screen_link_new_device_desktop_warning" = "Only scan a QR code after following the steps above on your own device. Never scan a code sent by another person.";
"screen_link_new_device_enter_number_error_numbers_do_not_match" = "The numbers don’t match"; "screen_link_new_device_enter_number_error_numbers_do_not_match" = "The numbers don’t match";
"screen_link_new_device_enter_number_notice" = "Enter 2-digit code"; "screen_link_new_device_enter_number_notice" = "Enter 2-digit code";
"screen_link_new_device_enter_number_subtitle" = "This will verify that the connection to your other device is secure."; "screen_link_new_device_enter_number_subtitle" = "This will verify that the connection to your other device is secure.";
@@ -1017,8 +970,6 @@
"screen_live_location_sheet_nobody_sharing" = "Nobody is sharing their location"; "screen_live_location_sheet_nobody_sharing" = "Nobody is sharing their location";
"screen_live_location_sheet_sharing_live_location" = "Sharing live location"; "screen_live_location_sheet_sharing_live_location" = "Sharing live location";
"screen_live_location_sheet_title" = "On the map"; "screen_live_location_sheet_title" = "On the map";
"screen_local_network_opt_in_subtitle" = "Your homeserver is on your local network. To connect, %1$@ needs permission to reach devices on this network.";
"screen_local_network_opt_in_title" = "Allow access to local network";
"screen_login_error_deactivated_account" = "Aquest compte s'ha desactivat."; "screen_login_error_deactivated_account" = "Aquest compte s'ha desactivat.";
"screen_login_error_invalid_credentials" = "Usuari i/o contrasenya incorrectes"; "screen_login_error_invalid_credentials" = "Usuari i/o contrasenya incorrectes";
"screen_login_error_invalid_user_id" = "Identificador d'usuari invàlid. Format esperat: ‘@usuari:servidor.org’"; "screen_login_error_invalid_user_id" = "Identificador d'usuari invàlid. Format esperat: ‘@usuari:servidor.org’";
@@ -1069,16 +1020,10 @@
"screen_missing_key_backup_open_element_classic" = "Open Element Classic"; "screen_missing_key_backup_open_element_classic" = "Open Element Classic";
"screen_missing_key_backup_step_1" = "Open Element Classic on your device"; "screen_missing_key_backup_step_1" = "Open Element Classic on your device";
"screen_missing_key_backup_step_2_ios" = "Go to User settings > Security"; "screen_missing_key_backup_step_2_ios" = "Go to User settings > Security";
"screen_missing_key_backup_step_3_ios" = "Scroll down to Chat Backup and tap on Set up"; "screen_missing_key_backup_step_3_ios" = "Scroll down to Secure Backup and tap on Set up";
"screen_missing_key_backup_step_4" = "Follow the instructions to enable your key storage"; "screen_missing_key_backup_step_4" = "Follow the instructions to enable your key storage";
"screen_missing_key_backup_step_5" = "Come back to %1$@"; "screen_missing_key_backup_step_5" = "Come back to %1$@";
"screen_missing_key_backup_title" = "Enable your key storage before proceeding to %1$@"; "screen_missing_key_backup_title" = "Enable your key storage before proceeding to %1$@";
"screen_moderation_and_safety_invites_heading" = "Invites";
"screen_moderation_and_safety_other_users_heading" = "Other users";
"screen_moderation_and_safety_share_presence_heading" = "Your appearance";
"screen_multi_account_announcement_action" = "Add account";
"screen_multi_account_announcement_description" = "Go to %1$@ to sign into another account. Then you can easily switch between them.";
"screen_multi_account_announcement_title" = "You can now add multiple accounts";
"screen_notification_optin_subtitle" = "Pots canviar la configuració més tard."; "screen_notification_optin_subtitle" = "Pots canviar la configuració més tard.";
"screen_notification_optin_title" = "Permet les notificacions i no perdis cap missatge"; "screen_notification_optin_title" = "Permet les notificacions i no perdis cap missatge";
"screen_notification_settings_additional_settings_section_title" = "Configuració addicional"; "screen_notification_settings_additional_settings_section_title" = "Configuració addicional";
@@ -1107,8 +1052,6 @@
"screen_notification_settings_mode_mentions" = "Mencions"; "screen_notification_settings_mode_mentions" = "Mencions";
"screen_notification_settings_notification_section_title" = "Notifica'm a"; "screen_notification_settings_notification_section_title" = "Notifica'm a";
"screen_notification_settings_room_mention_label" = "Notifica'm a @sala"; "screen_notification_settings_room_mention_label" = "Notifica'm a @sala";
"screen_notification_settings_show_all_activity_subtitle" = "Dots or number of unread messages";
"screen_notification_settings_show_all_activity_title" = "Show all activity in the room list";
"screen_notification_settings_sound_custom_fallback" = "Custom"; "screen_notification_settings_sound_custom_fallback" = "Custom";
"screen_notification_settings_sound_custom_sound_button_title" = "Custom sound..."; "screen_notification_settings_sound_custom_sound_button_title" = "Custom sound...";
"screen_notification_settings_sound_delete_sound_error_title" = "Error deleting file"; "screen_notification_settings_sound_delete_sound_error_title" = "Error deleting file";
@@ -1169,14 +1112,6 @@
"screen_polls_history_filter_ongoing" = "En curs"; "screen_polls_history_filter_ongoing" = "En curs";
"screen_polls_history_filter_past" = "Pasades"; "screen_polls_history_filter_past" = "Pasades";
"screen_polls_history_title" = "Votacions"; "screen_polls_history_title" = "Votacions";
"screen_ptt_settings_battery_optimization" = "Ignore battery optimisation";
"screen_ptt_settings_battery_optimization_description" = "Stay active in background";
"screen_ptt_settings_covert_mode" = "Covert mode";
"screen_ptt_settings_covert_mode_description" = "Mute all channels";
"screen_ptt_settings_lock_screen" = "Show on lock screen";
"screen_ptt_settings_lock_screen_description" = "Access from the lock screen";
"screen_ptt_settings_system_overlay" = "Enable system overlay";
"screen_ptt_settings_system_overlay_description" = "Access a floating action button";
"screen_push_history_title" = "Push history"; "screen_push_history_title" = "Push history";
"screen_qr_code_login_connecting_subtitle" = "Establint una connexió segura"; "screen_qr_code_login_connecting_subtitle" = "Establint una connexió segura";
"screen_qr_code_login_connection_note_secure_state_description" = "No s'ha pogut establir una connexió segura amb el dispositiu nou. Els dispositius existents continuen sent segurs, no te n'has de preocupar."; "screen_qr_code_login_connection_note_secure_state_description" = "No s'ha pogut establir una connexió segura amb el dispositiu nou. Els dispositius existents continuen sent segurs, no te n'has de preocupar.";
@@ -1321,14 +1256,7 @@
"screen_room_change_role_section_users" = "Membres"; "screen_room_change_role_section_users" = "Membres";
"screen_room_change_role_unsaved_changes_description" = "Hi ha canvis sense desar."; "screen_room_change_role_unsaved_changes_description" = "Hi ha canvis sense desar.";
"screen_room_change_role_unsaved_changes_title" = "Desar canvis?"; "screen_room_change_role_unsaved_changes_title" = "Desar canvis?";
"screen_room_confirm_removal_reason_label" = "Reason (optional)";
"screen_room_confirm_removal_reason_placeholder" = "Enter reason…";
"screen_room_confirm_removal_reason_supporting_text" = "(Optional)";
"screen_room_confirm_removal_title" = "Remove message?";
"screen_room_details_add_topic_title" = "Afegeix tema"; "screen_room_details_add_topic_title" = "Afegeix tema";
"screen_room_details_audio_push_to_talk" = "Push to talk";
"screen_room_details_audio_title" = "Room Audio";
"screen_room_details_audio_video_calls" = "Video calls";
"screen_room_details_badge_encrypted" = "Xifrada"; "screen_room_details_badge_encrypted" = "Xifrada";
"screen_room_details_badge_not_encrypted" = "No xifrada"; "screen_room_details_badge_not_encrypted" = "No xifrada";
"screen_room_details_badge_public" = "Sala pública"; "screen_room_details_badge_public" = "Sala pública";
@@ -1354,9 +1282,6 @@
"screen_room_details_profile_row_title" = "Perfil"; "screen_room_details_profile_row_title" = "Perfil";
"screen_room_details_requests_to_join_title" = "Sol·licituds d'unió"; "screen_room_details_requests_to_join_title" = "Sol·licituds d'unió";
"screen_room_details_roles_and_permissions" = "Rols i permisos"; "screen_room_details_roles_and_permissions" = "Rols i permisos";
"screen_room_details_room_audio_ptt" = "Push to talk";
"screen_room_details_room_audio_title" = "Room Audio";
"screen_room_details_room_audio_video_calls" = "Video calls";
"screen_room_details_room_name_label" = "Name"; "screen_room_details_room_name_label" = "Name";
"screen_room_details_security_and_privacy_title" = "Seguretat i privadesa"; "screen_room_details_security_and_privacy_title" = "Seguretat i privadesa";
"screen_room_details_security_title" = "Seguretat"; "screen_room_details_security_title" = "Seguretat";
@@ -1376,7 +1301,6 @@
"screen_room_invite_again_alert_message" = "Vols tornar-los a convidar-los?"; "screen_room_invite_again_alert_message" = "Vols tornar-los a convidar-los?";
"screen_room_invite_again_alert_title" = "No hi ha ningú més al xat"; "screen_room_invite_again_alert_title" = "No hi ha ningú més al xat";
"screen_room_live_location_banner" = "Sharing live location"; "screen_room_live_location_banner" = "Sharing live location";
"screen_room_maximum_messages_selected" = "Maximum messages selected";
"screen_room_member_details_block_alert_action" = "Bloqueja"; "screen_room_member_details_block_alert_action" = "Bloqueja";
"screen_room_member_details_block_alert_description" = "Els usuaris bloquejats no podran enviar-te missatges i tots els seus missatges s'amagaran. Pots desbloquejar-los en qualsevol moment."; "screen_room_member_details_block_alert_description" = "Els usuaris bloquejats no podran enviar-te missatges i tots els seus missatges s'amagaran. Pots desbloquejar-los en qualsevol moment.";
"screen_room_member_details_block_user" = "Bloqueja usuari"; "screen_room_member_details_block_user" = "Bloqueja usuari";
@@ -1416,9 +1340,8 @@
"screen_room_notification_settings_error_restoring_default" = "No s'ha pogut restaurar el mode predeterminat. Torna-ho a provar."; "screen_room_notification_settings_error_restoring_default" = "No s'ha pogut restaurar el mode predeterminat. Torna-ho a provar.";
"screen_room_notification_settings_error_setting_mode" = "No s'ha pogut configurar el mode. Torna-ho a provar."; "screen_room_notification_settings_error_setting_mode" = "No s'ha pogut configurar el mode. Torna-ho a provar.";
"screen_room_notification_settings_mentions_only_disclaimer" = "El servidor no admet aquesta opció en sales xifrades, no rebras notificacions en aquesta sala."; "screen_room_notification_settings_mentions_only_disclaimer" = "El servidor no admet aquesta opció en sales xifrades, no rebras notificacions en aquesta sala.";
"screen_room_notification_settings_mode_all_messages" = "All messages"; "screen_room_notification_settings_mode_all_messages" = "Tots els missatges";
"screen_room_notification_settings_mode_mentions_and_keywords" = "Mentions and replies only"; "screen_room_notification_settings_mode_mentions_and_keywords" = "Mencions y paraules clau (només)";
"screen_room_notification_settings_mode_mute" = "Mute";
"screen_room_notification_settings_room_custom_settings_title" = "En aquesta sala, notifica'm en"; "screen_room_notification_settings_room_custom_settings_title" = "En aquesta sala, notifica'm en";
"screen_room_pinned_banner_indicator" = "%1$@ de %2$@"; "screen_room_pinned_banner_indicator" = "%1$@ de %2$@";
"screen_room_pinned_banner_indicator_description" = "%1$@ missatges fixats"; "screen_room_pinned_banner_indicator_description" = "%1$@ missatges fixats";
@@ -1443,7 +1366,6 @@
"screen_room_roles_and_permissions_room_details" = "Detalls de sala"; "screen_room_roles_and_permissions_room_details" = "Detalls de sala";
"screen_room_roles_and_permissions_space_details" = "Space details"; "screen_room_roles_and_permissions_space_details" = "Space details";
"screen_room_roles_and_permissions_title" = "Rols i permisos"; "screen_room_roles_and_permissions_title" = "Rols i permisos";
"screen_room_select_error_cannot_load_rooms" = "The room list associated with this account cannot be loaded.";
"screen_room_single_knock_request_accept_button_title" = "Accepta"; "screen_room_single_knock_request_accept_button_title" = "Accepta";
"screen_room_single_knock_request_title" = "%1$@ vol unir-se a aquesta sala"; "screen_room_single_knock_request_title" = "%1$@ vol unir-se a aquesta sala";
"screen_room_single_knock_request_view_button_title" = "View"; "screen_room_single_knock_request_view_button_title" = "View";
@@ -1480,8 +1402,6 @@
"screen_roomlist_filter_invites_empty_state_title" = "No tens cap invitació pendent."; "screen_roomlist_filter_invites_empty_state_title" = "No tens cap invitació pendent.";
"screen_roomlist_filter_low_priority" = "Prioritat baixa"; "screen_roomlist_filter_low_priority" = "Prioritat baixa";
"screen_roomlist_filter_low_priority_empty_state_title" = "You don’t have any low priority chats yet"; "screen_roomlist_filter_low_priority_empty_state_title" = "You don’t have any low priority chats yet";
"screen_roomlist_filter_mention" = "Mention";
"screen_roomlist_filter_mention_empty_state_title" = "You don’t have any unread mentions";
"screen_roomlist_filter_mixed_empty_state_subtitle" = "Pots desseleccionar els filtres per veure els altres xats"; "screen_roomlist_filter_mixed_empty_state_subtitle" = "Pots desseleccionar els filtres per veure els altres xats";
"screen_roomlist_filter_mixed_empty_state_title" = "Cap xats per a aquesta selecció"; "screen_roomlist_filter_mixed_empty_state_title" = "Cap xats per a aquesta selecció";
"screen_roomlist_filter_people" = "Persones"; "screen_roomlist_filter_people" = "Persones";
@@ -1568,13 +1488,10 @@
"screen_session_verification_request_title" = "Verificació sol·licitada"; "screen_session_verification_request_title" = "Verificació sol·licitada";
"screen_session_verification_they_dont_match" = "No coincideixen"; "screen_session_verification_they_dont_match" = "No coincideixen";
"screen_session_verification_they_match" = "Coincideixen"; "screen_session_verification_they_match" = "Coincideixen";
"screen_session_verification_unavailable_subtitle" = "Please use another device or recovery key.";
"screen_session_verification_unavailable_title" = "Verification with this device is currently unavailable";
"screen_session_verification_use_another_device_subtitle" = "Assegura't que tens l'aplicació oberta a l'altre dispositiu abans d'inicar la verificació des d'aquí."; "screen_session_verification_use_another_device_subtitle" = "Assegura't que tens l'aplicació oberta a l'altre dispositiu abans d'inicar la verificació des d'aquí.";
"screen_session_verification_use_another_device_title" = "Obre l'aplicació en un altre dispositiu verificat"; "screen_session_verification_use_another_device_title" = "Obre l'aplicació en un altre dispositiu verificat";
"screen_session_verification_user_initiator_subtitle" = "Per a més seguretat, verifica aquest usuari comparant un conjunt d'emoticones vostres dispositius. Fes-ho a través d'un mitjà de comunicació fiable, o en persona."; "screen_session_verification_user_initiator_subtitle" = "Per a més seguretat, verifica aquest usuari comparant un conjunt d'emoticones vostres dispositius. Fes-ho a través d'un mitjà de comunicació fiable, o en persona.";
"screen_session_verification_user_initiator_title" = "Vols verificar aquest usuari?"; "screen_session_verification_user_initiator_title" = "Vols verificar aquest usuari?";
"screen_session_verification_user_requesting_verification" = "User requesting verification:";
"screen_session_verification_user_responder_subtitle" = "Per a més seguretat, un altre usuari vol verificar la teva identitat. Se't mostrarà un conjunt d'emoticones a comparar."; "screen_session_verification_user_responder_subtitle" = "Per a més seguretat, un altre usuari vol verificar la teva identitat. Se't mostrarà un conjunt d'emoticones a comparar.";
"screen_session_verification_waiting_another_device_subtitle" = "Hauries de veure una finestra emergent a l'altre dispositiu. Inicia, ara, la verificació des d'allà."; "screen_session_verification_waiting_another_device_subtitle" = "Hauries de veure una finestra emergent a l'altre dispositiu. Inicia, ara, la verificació des d'allà.";
"screen_session_verification_waiting_another_device_title" = "Inicia la verificació a l'altre dispositiu"; "screen_session_verification_waiting_another_device_title" = "Inicia la verificació a l'altre dispositiu";
@@ -1583,15 +1500,6 @@
"screen_session_verification_waiting_subtitle" = "Un cop acceptat, podràs continuar amb la verificació."; "screen_session_verification_waiting_subtitle" = "Un cop acceptat, podràs continuar amb la verificació.";
"screen_session_verification_waiting_to_accept_subtitle" = "Per continuar, accepta la sol·licitud per iniciar el procés de verificació a l'altra sessió."; "screen_session_verification_waiting_to_accept_subtitle" = "Per continuar, accepta la sol·licitud per iniciar el procés de verificació a l'altra sessió.";
"screen_session_verification_waiting_to_accept_title" = "Esperant que s'accepti la sol·licitud"; "screen_session_verification_waiting_to_accept_title" = "Esperant que s'accepti la sol·licitud";
"screen_settings_add_account" = "Add account";
"screen_settings_user_status_away" = "Away";
"screen_settings_user_status_be_right_back" = "Be right back";
"screen_settings_user_status_custom" = "Custom…";
"screen_settings_user_status_custom_hint" = "Custom status…";
"screen_settings_user_status_focus_time" = "Focus time";
"screen_settings_user_status_in_a_meeting" = "In a meeting";
"screen_settings_user_status_on_the_road" = "On the road";
"screen_settings_user_status_placeholder" = "What's your status?";
"screen_share_location_live_location_disclaimer_title" = "Your live location history will be stored in the room and visible to members after the session ends."; "screen_share_location_live_location_disclaimer_title" = "Your live location history will be stored in the room and visible to members after the session ends.";
"screen_share_location_live_location_duration_picker_title" = "Choose how long to share your live location."; "screen_share_location_live_location_duration_picker_title" = "Choose how long to share your live location.";
"screen_share_location_live_location_missing_permissions" = "You do not have permissions to share your live location in this room"; "screen_share_location_live_location_missing_permissions" = "You do not have permissions to share your live location in this room";
@@ -1606,7 +1514,6 @@
"screen_signed_out_reason_2" = "Has eliminat la sessió des d'una altra sessió"; "screen_signed_out_reason_2" = "Has eliminat la sessió des d'una altra sessió";
"screen_signed_out_reason_3" = "L'administrador del teu servidor t'ha invalidat l'accés"; "screen_signed_out_reason_3" = "L'administrador del teu servidor t'ha invalidat l'accés";
"screen_signed_out_subtitle" = "S'ha tancat la sessió per algun dels motius enumerats a continuació. Torna a iniciar sessió per continuar utilitzant %@."; "screen_signed_out_subtitle" = "S'ha tancat la sessió per algun dels motius enumerats a continuació. Torna a iniciar sessió per continuar utilitzant %@.";
"screen_signed_out_subtitle_v2" = "This device was removed for one of the reasons listed below. Please sign in again to connect this device to your account.";
"screen_signed_out_title" = "Has tancat sessió"; "screen_signed_out_title" = "Has tancat sessió";
"screen_signout_confirmation_dialog_content" = "Segur que vols tancar sessió?"; "screen_signout_confirmation_dialog_content" = "Segur que vols tancar sessió?";
"screen_signout_confirmation_dialog_submit" = "Tanca sessió"; "screen_signout_confirmation_dialog_submit" = "Tanca sessió";
@@ -1632,7 +1539,7 @@
"screen_space_list_parent_space" = "%1$@ space"; "screen_space_list_parent_space" = "%1$@ space";
"screen_space_list_title" = "Spaces"; "screen_space_list_title" = "Spaces";
"screen_space_menu_action_members" = "View members"; "screen_space_menu_action_members" = "View members";
"screen_space_remove_rooms_confirmation_content" = "Removing a room will not affect the room access. To change the access go to Room info > Security & privacy."; "screen_space_remove_rooms_confirmation_content" = "Removing a room will not affect the room access. To change the access go to Room info > Privacy & security.";
"screen_space_remove_rooms_confirmation_title_ios" = "Remove rooms from %1$@?"; "screen_space_remove_rooms_confirmation_title_ios" = "Remove rooms from %1$@?";
"screen_space_settings_leave_space" = "Leave space"; "screen_space_settings_leave_space" = "Leave space";
"screen_space_settings_roles_and_permissions" = "Rols i permisos"; "screen_space_settings_roles_and_permissions" = "Rols i permisos";
@@ -1783,7 +1690,6 @@
"troubleshoot_notifications_test_push_loop_back_failure_2" = "Error: %1$@."; "troubleshoot_notifications_test_push_loop_back_failure_2" = "Error: %1$@.";
"troubleshoot_notifications_test_push_loop_back_failure_3" = "Error, no s'han pogut provar les notificacions push."; "troubleshoot_notifications_test_push_loop_back_failure_3" = "Error, no s'han pogut provar les notificacions push.";
"troubleshoot_notifications_test_push_loop_back_failure_4" = "Error, s'ha acabat el temps d'espera de la notificació push."; "troubleshoot_notifications_test_push_loop_back_failure_4" = "Error, s'ha acabat el temps d'espera de la notificació push.";
"troubleshoot_notifications_test_push_loop_back_failure_rate_limit" = "Error: the push gateway is rate limiting this device, so notifications won't be reliable. Please set up a different push gateway.";
"troubleshoot_notifications_test_push_loop_back_success" = "El bucle de notificacions push ha tardat %1$d ms."; "troubleshoot_notifications_test_push_loop_back_success" = "El bucle de notificacions push ha tardat %1$d ms.";
"troubleshoot_notifications_test_push_loop_back_title" = "Prova el bucle de notificacions push"; "troubleshoot_notifications_test_push_loop_back_title" = "Prova el bucle de notificacions push";
"troubleshoot_notifications_test_unified_push_description" = "Assegura't que hi hagi distribuïdors d'UnifiedPush disponibles."; "troubleshoot_notifications_test_unified_push_description" = "Assegura't que hi hagi distribuïdors d'UnifiedPush disponibles.";
@@ -18,22 +18,6 @@
<key>NSStringLocalizedFormatKey</key> <key>NSStringLocalizedFormatKey</key>
<string>%#@COUNT@</string> <string>%#@COUNT@</string>
</dict> </dict>
<key>a11y_gallery_more_media</key>
<dict>
<key>COUNT</key>
<dict>
<key>NSStringFormatSpecTypeKey</key>
<string>NSStringPluralRuleType</string>
<key>NSStringFormatValueTypeKey</key>
<string>d</string>
<key>one</key>
<string>Gallery, %1$d more media</string>
<key>other</key>
<string>Gallery, %1$d more medias</string>
</dict>
<key>NSStringLocalizedFormatKey</key>
<string>%#@COUNT@</string>
</dict>
<key>a11y_polls_percent_of_total</key> <key>a11y_polls_percent_of_total</key>
<dict> <dict>
<key>COUNT</key> <key>COUNT</key>
@@ -66,54 +50,6 @@
<key>NSStringLocalizedFormatKey</key> <key>NSStringLocalizedFormatKey</key>
<string>%#@COUNT@</string> <string>%#@COUNT@</string>
</dict> </dict>
<key>action_forward_messages</key>
<dict>
<key>COUNT</key>
<dict>
<key>NSStringFormatSpecTypeKey</key>
<string>NSStringPluralRuleType</string>
<key>NSStringFormatValueTypeKey</key>
<string>d</string>
<key>one</key>
<string>Forward %1$d message</string>
<key>other</key>
<string>Forward %1$d messages</string>
</dict>
<key>NSStringLocalizedFormatKey</key>
<string>%#@COUNT@</string>
</dict>
<key>common_gallery_reply_attachments</key>
<dict>
<key>COUNT</key>
<dict>
<key>NSStringFormatSpecTypeKey</key>
<string>NSStringPluralRuleType</string>
<key>NSStringFormatValueTypeKey</key>
<string>d</string>
<key>one</key>
<string>%1$d attachment…</string>
<key>other</key>
<string>%1$d attachments…</string>
</dict>
<key>NSStringLocalizedFormatKey</key>
<string>%#@COUNT@</string>
</dict>
<key>common_gallery_reply_media_items</key>
<dict>
<key>COUNT</key>
<dict>
<key>NSStringFormatSpecTypeKey</key>
<string>NSStringPluralRuleType</string>
<key>NSStringFormatValueTypeKey</key>
<string>d</string>
<key>one</key>
<string>%1$d media item…</string>
<key>other</key>
<string>%1$d media items…</string>
</dict>
<key>NSStringLocalizedFormatKey</key>
<string>%#@COUNT@</string>
</dict>
<key>common_many_members</key> <key>common_many_members</key>
<dict> <dict>
<key>COUNT</key> <key>COUNT</key>
@@ -274,22 +210,6 @@
<key>NSStringLocalizedFormatKey</key> <key>NSStringLocalizedFormatKey</key>
<string>%#@COUNT@</string> <string>%#@COUNT@</string>
</dict> </dict>
<key>notification_gallery_body</key>
<dict>
<key>COUNT</key>
<dict>
<key>NSStringFormatSpecTypeKey</key>
<string>NSStringPluralRuleType</string>
<key>NSStringFormatValueTypeKey</key>
<string>d</string>
<key>one</key>
<string>Shared %1$d attachment</string>
<key>other</key>
<string>Shared %1$d attachments</string>
</dict>
<key>NSStringLocalizedFormatKey</key>
<string>%#@COUNT@</string>
</dict>
<key>notification_invitations</key> <key>notification_invitations</key>
<dict> <dict>
<key>COUNT</key> <key>COUNT</key>
@@ -354,22 +274,6 @@
<key>NSStringLocalizedFormatKey</key> <key>NSStringLocalizedFormatKey</key>
<string>%#@COUNT@</string> <string>%#@COUNT@</string>
</dict> </dict>
<key>screen.room.timeline_redacted_messages</key>
<dict>
<key>COUNT</key>
<dict>
<key>NSStringFormatSpecTypeKey</key>
<string>NSStringPluralRuleType</string>
<key>NSStringFormatValueTypeKey</key>
<string>d</string>
<key>one</key>
<string>%1$d removed message</string>
<key>other</key>
<string>%1$d removed messages</string>
</dict>
<key>NSStringLocalizedFormatKey</key>
<string>%#@COUNT@</string>
</dict>
<key>screen_advanced_settings_live_location_update_distance</key> <key>screen_advanced_settings_live_location_update_distance</key>
<dict> <dict>
<key>COUNT</key> <key>COUNT</key>
@@ -546,22 +450,6 @@
<key>NSStringLocalizedFormatKey</key> <key>NSStringLocalizedFormatKey</key>
<string>%#@COUNT@</string> <string>%#@COUNT@</string>
</dict> </dict>
<key>screen_room_messages_forwarded</key>
<dict>
<key>COUNT</key>
<dict>
<key>NSStringFormatSpecTypeKey</key>
<string>NSStringPluralRuleType</string>
<key>NSStringFormatValueTypeKey</key>
<string>d</string>
<key>one</key>
<string>%1$d message forwarded</string>
<key>other</key>
<string>%1$d messages forwarded</string>
</dict>
<key>NSStringLocalizedFormatKey</key>
<string>%#@COUNT@</string>
</dict>
<key>screen_room_multiple_knock_requests_title</key> <key>screen_room_multiple_knock_requests_title</key>
<dict> <dict>
<key>COUNT</key> <key>COUNT</key>
@@ -578,22 +466,6 @@
<key>NSStringLocalizedFormatKey</key> <key>NSStringLocalizedFormatKey</key>
<string>%#@COUNT@</string> <string>%#@COUNT@</string>
</dict> </dict>
<key>screen_room_selection_count</key>
<dict>
<key>COUNT</key>
<dict>
<key>NSStringFormatSpecTypeKey</key>
<string>NSStringPluralRuleType</string>
<key>NSStringFormatValueTypeKey</key>
<string>d</string>
<key>one</key>
<string>%1$d message selected</string>
<key>other</key>
<string>%1$d messages selected</string>
</dict>
<key>NSStringLocalizedFormatKey</key>
<string>%#@COUNT@</string>
</dict>
<key>screen_room_timeline_reaction_a11y</key> <key>screen_room_timeline_reaction_a11y</key>
<dict> <dict>
<key>COUNT</key> <key>COUNT</key>
@@ -690,7 +562,7 @@
<key>NSStringLocalizedFormatKey</key> <key>NSStringLocalizedFormatKey</key>
<string>%#@COUNT@</string> <string>%#@COUNT@</string>
</dict> </dict>
<key>screen_timeline_active_call_joined_count</key> <key>screen_timeline_active_call_extra_joined_count</key>
<dict> <dict>
<key>COUNT</key> <key>COUNT</key>
<dict> <dict>
@@ -699,9 +571,9 @@
<key>NSStringFormatValueTypeKey</key> <key>NSStringFormatValueTypeKey</key>
<string>d</string> <string>d</string>
<key>one</key> <key>one</key>
<string>%1$d joined</string> <string>+ %1$d joined</string>
<key>other</key> <key>other</key>
<string>%1$d joined</string> <string>+ %1$d joined</string>
</dict> </dict>
<key>NSStringLocalizedFormatKey</key> <key>NSStringLocalizedFormatKey</key>
<string>%#@COUNT@</string> <string>%#@COUNT@</string>
@@ -1,6 +1,6 @@
"NSCameraUsageDescription" = "Chcete-li pořizovat snímky nebo videa a odesílat je jako zprávu, potřebuje Element X přístup k fotoaparátu."; "NSCameraUsageDescription" = "Chcete-li pořizovat snímky nebo videa a odesílat je jako zprávu, potřebuje Element X přístup k fotoaparátu.";
"NSFaceIDUsageDescription" = "K ochraně přístupu k vašemu účtu se používá Face ID."; "NSFaceIDUsageDescription" = "K přístupu do aplikace se používá Face ID.";
"NSLocationAlwaysAndWhenInUseUsageDescription" = "Chcete-li v chatech sdílet svou polohu v reálném čase, je nutné povolit přístup k poloze, i když je aplikace spuštěna na pozadí."; "NSLocationAlwaysAndWhenInUseUsageDescription" = "Aby mohla aplikace Element X sdílet vaši aktuální polohu, potřebuje přístup k poloze, i když je aplikace spuštěna na pozadí.";
"NSLocationWhenInUseUsageDescription" = "Díky tomu můžete v chatech sdílet svou aktuální polohu nebo místa v okolí."; "NSLocationWhenInUseUsageDescription" = "Udělte přístup k poloze, aby mohl Element X sdílet vaši polohu.";
"NSMicrophoneUsageDescription" = "Aby bylo možné nahrávat a odesílat zprávy se zvukem, potřebuje Element X přístup k mikrofonu."; "NSMicrophoneUsageDescription" = "Aby bylo možné nahrávat a odesílat zprávy se zvukem, potřebuje Element X přístup k mikrofonu.";
"NSPhotoLibraryUsageDescription" = "To vám umožní ukládat obrázky a videa do knihovny fotografií."; "NSPhotoLibraryUsageDescription" = "To vám umožní ukládat obrázky a videa do knihovny fotografií.";
@@ -1,4 +1,4 @@
"a11y_add_avatar" = "Přidat avatar"; "a11y_add_avatar" = "Add avatar";
"a11y_add_reaction" = "Přidat reakci: %1$@"; "a11y_add_reaction" = "Přidat reakci: %1$@";
"a11y_address" = "Adresa"; "a11y_address" = "Adresa";
"a11y_avatar" = "Profilový obrázek"; "a11y_avatar" = "Profilový obrázek";
@@ -6,23 +6,16 @@
"a11y_collapse_message_text_field" = "Minimalizovat textové pole zprávy"; "a11y_collapse_message_text_field" = "Minimalizovat textové pole zprávy";
"a11y_create_poll_votes_allowed_decrease" = "Decrease votes allowed per person"; "a11y_create_poll_votes_allowed_decrease" = "Decrease votes allowed per person";
"a11y_create_poll_votes_allowed_increase" = "Increase votes allowed per person"; "a11y_create_poll_votes_allowed_increase" = "Increase votes allowed per person";
"a11y_custom_emoji" = "Custom emoji";
"a11y_delete" = "Smazat"; "a11y_delete" = "Smazat";
"a11y_duration" = "Doba trvání: %1$@"; "a11y_duration" = "Duration: %1$@";
"a11y_edit_avatar" = "Upravit avatar"; "a11y_edit_avatar" = "Upravit avatar";
"a11y_edit_room_address_hint" = "Úplná adresa bude %1$@"; "a11y_edit_room_address_hint" = "Úplná adresa bude %1$@";
"a11y_expand_message_text_field" = "Rozbalit textové pole zprávy"; "a11y_expand_message_text_field" = "Rozbalit textové pole zprávy";
"a11y_gallery_attachment" = "Gallery, attachment %1$d";
"a11y_gallery_failed_scan" = "Gallery, failed scan %1$d";
"a11y_gallery_image" = "Gallery, image %1$d";
"a11y_gallery_scanning" = "Gallery, scanning %1$d";
"a11y_gallery_video" = "Gallery, video %1$d";
"a11y_hide_password" = "Skrýt heslo"; "a11y_hide_password" = "Skrýt heslo";
"a11y_info" = "Informace"; "a11y_info" = "Informace";
"a11y_join_call" = "Připojit se k hovoru"; "a11y_join_call" = "Připojit se k hovoru";
"a11y_jump_to_bottom" = "Přejít dolů"; "a11y_jump_to_bottom" = "Přejít dolů";
"a11y_jump_to_unread" = "Přejít na nepřečtené"; "a11y_jump_to_unread" = "Jump to unread";
"a11y_jump_to_unread_messages" = "Jump to first unread message";
"a11y_notifications_mentions_only" = "Pouze zmínky"; "a11y_notifications_mentions_only" = "Pouze zmínky";
"a11y_notifications_muted" = "Ztišeno"; "a11y_notifications_muted" = "Ztišeno";
"a11y_notifications_new_mentions" = "Nové zmínky"; "a11y_notifications_new_mentions" = "Nové zmínky";
@@ -40,12 +33,12 @@
"a11y_poll_end" = "Hlasování ukončeno"; "a11y_poll_end" = "Hlasování ukončeno";
"a11y_polls_will_remove_selection" = "Odstraní předchozí výběr"; "a11y_polls_will_remove_selection" = "Odstraní předchozí výběr";
"a11y_polls_winning_answer" = "Toto je vítězná odpověď"; "a11y_polls_winning_answer" = "Toto je vítězná odpověď";
"a11y_position" = "Pozice: %1$@"; "a11y_position" = "Position: %1$@";
"a11y_qr_code" = "QR kód"; "a11y_qr_code" = "QR kód";
"a11y_react_with" = "Reagovat s %1$@"; "a11y_react_with" = "Reagovat s %1$@";
"a11y_react_with_other_emojis" = "Reagovat s dalšími emoji"; "a11y_react_with_other_emojis" = "Reagovat s dalšími emoji";
"a11y_read_receipts_multiple" = "Předchozí zprávu přečetli %1$@ a %2$@"; "a11y_read_receipts_multiple" = "%1$@ a %2$@ přečetli";
"a11y_read_receipts_single" = "Předchozí zprávu přečetl(a) %1$@"; "a11y_read_receipts_single" = "%1$@ přečetl(a)";
"a11y_read_receipts_tap_to_show_all_ios" = "Klepnutím zobrazíte vše"; "a11y_read_receipts_tap_to_show_all_ios" = "Klepnutím zobrazíte vše";
"a11y_remove_reaction" = "Odstraňit reakci s %1$@"; "a11y_remove_reaction" = "Odstraňit reakci s %1$@";
"a11y_remove_reaction_with" = "Odstranit reakci pomocí %1$@"; "a11y_remove_reaction_with" = "Odstranit reakci pomocí %1$@";
@@ -57,7 +50,6 @@
"a11y_start_call" = "Zahájit hovor"; "a11y_start_call" = "Zahájit hovor";
"a11y_start_video_call" = "Zahájit videohovor"; "a11y_start_video_call" = "Zahájit videohovor";
"a11y_start_voice_call" = "Zahájit hlasový hovor"; "a11y_start_voice_call" = "Zahájit hlasový hovor";
"a11y_status" = "Status";
"a11y_tombstoned_room" = "Místnost s náhrobkem"; "a11y_tombstoned_room" = "Místnost s náhrobkem";
"a11y_user_menu" = "Uživatelské menu"; "a11y_user_menu" = "Uživatelské menu";
"a11y_video_preview" = "Video preview"; "a11y_video_preview" = "Video preview";
@@ -86,7 +78,6 @@
"action_choose_file" = "Vyberte soubor"; "action_choose_file" = "Vyberte soubor";
"action_choose_photo" = "Vybrat fotku"; "action_choose_photo" = "Vybrat fotku";
"action_clear" = "Vymazat"; "action_clear" = "Vymazat";
"action_clear_all" = "Clear all";
"action_close" = "Zavřít"; "action_close" = "Zavřít";
"action_complete_verification" = "Dokončit ověření"; "action_complete_verification" = "Dokončit ověření";
"action_confirm" = "Potvrdit"; "action_confirm" = "Potvrdit";
@@ -97,7 +88,6 @@
"action_copy_link" = "Kopírovat odkaz"; "action_copy_link" = "Kopírovat odkaz";
"action_copy_link_to_message" = "Kopírovat odkaz na zprávu"; "action_copy_link_to_message" = "Kopírovat odkaz na zprávu";
"action_copy_text" = "Kopírovat text"; "action_copy_text" = "Kopírovat text";
"action_copy_to_clipboard" = "Copy to clipboard";
"action_create" = "Vytvořit"; "action_create" = "Vytvořit";
"action_create_room" = "Vytvořit místnost"; "action_create_room" = "Vytvořit místnost";
"action_create_space" = "Vytvořte prostor"; "action_create_space" = "Vytvořte prostor";
@@ -107,7 +97,7 @@
"action_decline_and_block" = "Odmítnout a zablokovat"; "action_decline_and_block" = "Odmítnout a zablokovat";
"action_delete" = "Smazat"; "action_delete" = "Smazat";
"action_delete_account" = "Smazat účet"; "action_delete_account" = "Smazat účet";
"action_delete_file" = "Smazat soubor"; "action_delete_file" = "Delete file";
"action_delete_poll" = "Odstranit hlasování"; "action_delete_poll" = "Odstranit hlasování";
"action_deselect_all" = "Odznačit vše"; "action_deselect_all" = "Odznačit vše";
"action_disable" = "Zakázat"; "action_disable" = "Zakázat";
@@ -145,7 +135,6 @@
"action_manage_account_and_devices" = "Správa účtu a zařízení"; "action_manage_account_and_devices" = "Správa účtu a zařízení";
"action_manage_devices" = "Spravovat zařízení"; "action_manage_devices" = "Spravovat zařízení";
"action_manage_rooms" = "Spravovat místnosti"; "action_manage_rooms" = "Spravovat místnosti";
"action_mark_as_read" = "Mark as read";
"action_message" = "Zpráva"; "action_message" = "Zpráva";
"action_minimize" = "Minimalizovat"; "action_minimize" = "Minimalizovat";
"action_next" = "Další"; "action_next" = "Další";
@@ -210,7 +199,7 @@
"banner_migrate_to_native_sliding_sync_action" = "Odhlásit se a upgradovat"; "banner_migrate_to_native_sliding_sync_action" = "Odhlásit se a upgradovat";
"banner_migrate_to_native_sliding_sync_app_force_logout_title" = "%1$@ již nepodporuje starý protokol. Odhlaste se a znovu přihlaste, abyste mohli pokračovat v používání aplikace."; "banner_migrate_to_native_sliding_sync_app_force_logout_title" = "%1$@ již nepodporuje starý protokol. Odhlaste se a znovu přihlaste, abyste mohli pokračovat v používání aplikace.";
"banner_migrate_to_native_sliding_sync_description" = "Váš server nyní podporuje nový, rychlejší protokol. Chcete-li upgradovat, odhlaste se a znovu se přihlaste. Pokud to uděláte nyní, pomůže vám vyhnout se nucenému odhlášení, když bude starý protokol později odstraněn."; "banner_migrate_to_native_sliding_sync_description" = "Váš server nyní podporuje nový, rychlejší protokol. Chcete-li upgradovat, odhlaste se a znovu se přihlaste. Pokud to uděláte nyní, pomůže vám vyhnout se nucenému odhlášení, když bude starý protokol později odstraněn.";
"banner_migrate_to_native_sliding_sync_force_logout_title" = "Váš poskytovatel účtu již nepodporuje starý protokol. Chcete-li aplikaci nadále používat, odhlaste se a znovu se přihlaste."; "banner_migrate_to_native_sliding_sync_force_logout_title" = "Váš domovský server již nepodporuje starý protokol. Chcete-li pokračovat v používání aplikace, odhlaste se a znovu se přihlaste.";
"banner_migrate_to_native_sliding_sync_title" = "Upgrade k dispozici"; "banner_migrate_to_native_sliding_sync_title" = "Upgrade k dispozici";
"banner_new_sound_message" = "Váš zvuk oznámení byl aktualizován – je jasnější, rychlejší a méně rušivý."; "banner_new_sound_message" = "Váš zvuk oznámení byl aktualizován – je jasnější, rychlejší a méně rušivý.";
"banner_new_sound_title" = "Aktualizovali jsme vaše zvuky"; "banner_new_sound_title" = "Aktualizovali jsme vaše zvuky";
@@ -220,7 +209,6 @@
"call_invalid_audio_device_bluetooth_devices_disabled" = "Element Call nepodporuje používání Bluetooth zvukových zařízení v této verzi systému Android. Vyberte jiné zvukové zařízení."; "call_invalid_audio_device_bluetooth_devices_disabled" = "Element Call nepodporuje používání Bluetooth zvukových zařízení v této verzi systému Android. Vyberte jiné zvukové zařízení.";
"common_about" = "O aplikaci"; "common_about" = "O aplikaci";
"common_acceptable_use_policy" = "Zásady používání"; "common_acceptable_use_policy" = "Zásady používání";
"common_account_settings" = "Account settings";
"common_add_account" = "Přidat účet"; "common_add_account" = "Přidat účet";
"common_add_another_account" = "Přidat další účet"; "common_add_another_account" = "Přidat další účet";
"common_adding_caption" = "Přidání titulku"; "common_adding_caption" = "Přidání titulku";
@@ -229,7 +217,6 @@
"common_analytics" = "Analytika"; "common_analytics" = "Analytika";
"common_android_shortcuts_remove_reason_left_room" = "Opustili jste místnost"; "common_android_shortcuts_remove_reason_left_room" = "Opustili jste místnost";
"common_android_shortcuts_remove_reason_session_logged_out" = "Byli jste odhlášeni z relace"; "common_android_shortcuts_remove_reason_session_logged_out" = "Byli jste odhlášeni z relace";
"common_app_settings" = "App settings";
"common_appearance" = "Vzhled"; "common_appearance" = "Vzhled";
"common_audio" = "Zvuk"; "common_audio" = "Zvuk";
"common_beta" = "Beta"; "common_beta" = "Beta";
@@ -240,8 +227,6 @@
"common_call_started" = "Hovor zahájen"; "common_call_started" = "Hovor zahájen";
"common_call_you_declined" = "Odmítli jste hovor"; "common_call_you_declined" = "Odmítli jste hovor";
"common_chat_backup" = "Záloha chatu"; "common_chat_backup" = "Záloha chatu";
"common_chats" = "Chats";
"common_code_block" = "Code block";
"common_copied_to_clipboard" = "Zkopírováno do schránky"; "common_copied_to_clipboard" = "Zkopírováno do schránky";
"common_copyright" = "Autorská práva"; "common_copyright" = "Autorská práva";
"common_creating_room" = "Vytváření místnosti…"; "common_creating_room" = "Vytváření místnosti…";
@@ -279,12 +264,10 @@
"common_file_deleted" = "Soubor smazán"; "common_file_deleted" = "Soubor smazán";
"common_file_saved" = "Soubor uložen"; "common_file_saved" = "Soubor uložen";
"common_forward_message" = "Přeposlat zprávu"; "common_forward_message" = "Přeposlat zprávu";
"common_forward_to" = "Forward to";
"common_frequently_used" = "Často používané"; "common_frequently_used" = "Často používané";
"common_gallery" = "Gallery"; "common_gallery" = "Gallery";
"common_gif" = "GIF"; "common_gif" = "GIF";
"common_group_call_in_progress" = "Group call in progress"; "common_group_call_in_progress" = "Group call in progress";
"common_header_rooms" = "Rooms";
"common_image" = "Obrázek"; "common_image" = "Obrázek";
"common_in_reply_to" = "V odpovědi na %1$@"; "common_in_reply_to" = "V odpovědi na %1$@";
"common_invite_unknown_profile" = "Tento Matrix identifikátor nelze najít, takže pozvánka nemusí být přijata."; "common_invite_unknown_profile" = "Tento Matrix identifikátor nelze najít, takže pozvánka nemusí být přijata.";
@@ -297,25 +280,20 @@
"common_live_location_ended" = "Sdílení aktuální polohy skončilo"; "common_live_location_ended" = "Sdílení aktuální polohy skončilo";
"common_loading" = "Načítání…"; "common_loading" = "Načítání…";
"common_loading_more" = "Načítání dalších…"; "common_loading_more" = "Načítání dalších…";
"common_location_sharing" = "Location sharing";
"common_media_upload_quality" = "Media upload quality";
"common_message" = "Zpráva"; "common_message" = "Zpráva";
"common_message_actions" = "Akce zprávy"; "common_message_actions" = "Akce zprávy";
"common_message_failed_to_send" = "Zprávu se nepodařilo odeslat"; "common_message_failed_to_send" = "Zprávu se nepodařilo odeslat";
"common_message_layout" = "Zobrazení zpráv"; "common_message_layout" = "Zobrazení zpráv";
"common_message_removed" = "Zpráva byla odstraněna"; "common_message_removed" = "Zpráva byla odstraněna";
"common_moderation_and_safety" = "Moderation & safety";
"common_modern" = "Moderní"; "common_modern" = "Moderní";
"common_mute" = "Ztlumit"; "common_mute" = "Ztlumit";
"common_name" = "Název"; "common_name" = "Název";
"common_name_and_id" = "%1$@ (%2$@)"; "common_name_and_id" = "%1$@ (%2$@)";
"common_no_results" = "Žádné výsledky"; "common_no_results" = "Žádné výsledky";
"common_no_results_for" = "There are no results for “%1$@”. Try a new search term.";
"common_no_room_name" = "Žádný název místnosti"; "common_no_room_name" = "Žádný název místnosti";
"common_no_space_name" = "Žádný název prostoru"; "common_no_space_name" = "Žádný název prostoru";
"common_not_encrypted" = "Nešifrováno"; "common_not_encrypted" = "Nešifrováno";
"common_offline" = "Offline"; "common_offline" = "Offline";
"common_on_a_call" = "On a call";
"common_open_source_licenses" = "Licence s otevřeným zdrojovým kódem"; "common_open_source_licenses" = "Licence s otevřeným zdrojovým kódem";
"common_optic_id_ios" = "Optic ID"; "common_optic_id_ios" = "Optic ID";
"common_or" = "nebo"; "common_or" = "nebo";
@@ -329,7 +307,7 @@
"common_please_wait" = "Počkejte prosím..."; "common_please_wait" = "Počkejte prosím...";
"common_poll_end_confirmation" = "Opravdu chcete ukončit toto hlasování?"; "common_poll_end_confirmation" = "Opravdu chcete ukončit toto hlasování?";
"common_poll_summary" = "Hlasování: %1$@"; "common_poll_summary" = "Hlasování: %1$@";
"common_poll_summary_prefix" = "Hlasování"; "common_poll_summary_prefix" = "Poll";
"common_poll_total_votes" = "Celkový počet hlasů: %1$@"; "common_poll_total_votes" = "Celkový počet hlasů: %1$@";
"common_poll_undisclosed_text" = "Výsledky se zobrazí po skončení hlasování"; "common_poll_undisclosed_text" = "Výsledky se zobrazí po skončení hlasování";
"common_preparing" = "Příprava…"; "common_preparing" = "Příprava…";
@@ -349,7 +327,6 @@
"common_replying_to" = "Odpověď na %1$@"; "common_replying_to" = "Odpověď na %1$@";
"common_report_a_problem" = "Nahlásit problém"; "common_report_a_problem" = "Nahlásit problém";
"common_report_submitted" = "Zpráva odeslána"; "common_report_submitted" = "Zpráva odeslána";
"common_results_for" = "Results for “%1$@”";
"common_rich_text_editor" = "Editor formátovaného textu"; "common_rich_text_editor" = "Editor formátovaného textu";
"common_role" = "Role"; "common_role" = "Role";
"common_room" = "Místnost"; "common_room" = "Místnost";
@@ -377,7 +354,6 @@
"common_shared_live_location" = "Sdílená aktuální poloha"; "common_shared_live_location" = "Sdílená aktuální poloha";
"common_shared_location" = "Sdílená poloha"; "common_shared_location" = "Sdílená poloha";
"common_shared_space" = "Sdílený prostor"; "common_shared_space" = "Sdílený prostor";
"common_signed_in" = "Signed in";
"common_signing_out" = "Odebrání zařízení"; "common_signing_out" = "Odebrání zařízení";
"common_something_went_wrong" = "Něco se nepovedlo"; "common_something_went_wrong" = "Něco se nepovedlo";
"common_something_went_wrong_message" = "Narazili jsme na problém. Zkuste to prosím znovu."; "common_something_went_wrong_message" = "Narazili jsme na problém. Zkuste to prosím znovu.";
@@ -389,7 +365,6 @@
"common_success" = "Úspěch"; "common_success" = "Úspěch";
"common_suggested" = "Doporučeno"; "common_suggested" = "Doporučeno";
"common_suggestions" = "Návrhy"; "common_suggestions" = "Návrhy";
"common_switch_accounts" = "Switch accounts";
"common_syncing" = "Synchronizace"; "common_syncing" = "Synchronizace";
"common_text" = "Text"; "common_text" = "Text";
"common_third_party_notices" = "Oznámení třetích stran"; "common_third_party_notices" = "Oznámení třetích stran";
@@ -430,14 +405,12 @@
"common_waiting_live_location" = "Čekání na aktuální polohu…"; "common_waiting_live_location" = "Čekání na aktuální polohu…";
"common_world_readable_history" = "Kdokoli může vidět historii"; "common_world_readable_history" = "Kdokoli může vidět historii";
"common_you" = "Vy"; "common_you" = "Vy";
"common_your_account" = "Your account";
"confirm_recovery_key_banner_message" = "Potvrďte klíč pro obnovení, abyste zachovali přístup k úložišti klíčů a historii zpráv."; "confirm_recovery_key_banner_message" = "Potvrďte klíč pro obnovení, abyste zachovali přístup k úložišti klíčů a historii zpráv.";
"confirm_recovery_key_banner_primary_button_title" = "Zadejte klíč pro obnovení"; "confirm_recovery_key_banner_primary_button_title" = "Zadejte klíč pro obnovení";
"confirm_recovery_key_banner_secondary_button_title" = "Zapomněli jste klíč pro obnovení?"; "confirm_recovery_key_banner_secondary_button_title" = "Zapomněli jste klíč pro obnovení?";
"confirm_recovery_key_banner_title" = "Vaše úložiště klíčů není synchronizováno"; "confirm_recovery_key_banner_title" = "Vaše úložiště klíčů není synchronizováno";
"content_scanner_not_found" = "Download not available."; "content_scanner_not_found" = "Download not available.";
"content_scanner_not_found_title" = "Something went wrong"; "content_scanner_not_found_title" = "File not found";
"content_scanner_scanning" = "Scanning…";
"content_scanner_unsafe_message" = "Preview and download have been disabled."; "content_scanner_unsafe_message" = "Preview and download have been disabled.";
"content_scanner_unsafe_title" = "The file is not safe"; "content_scanner_unsafe_title" = "The file is not safe";
"crash_detection_dialog_content" = "%1$@ havaroval při posledním použití. Chcete se s námi podělit o zprávu o selhání?"; "crash_detection_dialog_content" = "%1$@ havaroval při posledním použití. Chcete se s námi podělit o zprávu o selhání?";
@@ -499,7 +472,7 @@
"emoji_picker_category_recent" = "Nedávné emotikony"; "emoji_picker_category_recent" = "Nedávné emotikony";
"emoji_picker_category_symbols" = "Symboly"; "emoji_picker_category_symbols" = "Symboly";
"emoji_picker_search_placeholder" = "Hledat emotikony"; "emoji_picker_search_placeholder" = "Hledat emotikony";
"error_account_creation_not_possible" = "Váš poskytovatel účtu musí být upgradeován, aby podporoval Matrix Authentication Service a vytváření účtů."; "error_account_creation_not_possible" = "Váš domovský server je třeba upgradovat, aby podporoval službu Matrix Authentication Service a vytváření účtu.";
"error_failed_creating_the_permalink" = "Vytvoření trvalého odkazu se nezdařilo"; "error_failed_creating_the_permalink" = "Vytvoření trvalého odkazu se nezdařilo";
"error_failed_loading_map" = "%1$@ nemohl načíst mapu. Zkuste to prosím později."; "error_failed_loading_map" = "%1$@ nemohl načíst mapu. Zkuste to prosím později.";
"error_failed_loading_messages" = "Načítání zpráv se nezdařilo"; "error_failed_loading_messages" = "Načítání zpráv se nezdařilo";
@@ -511,11 +484,6 @@
"error_no_compatible_app_found" = "Nebyla nalezena žádná kompatibilní aplikace, která by tuto akci zpracovala."; "error_no_compatible_app_found" = "Nebyla nalezena žádná kompatibilní aplikace, která by tuto akci zpracovala.";
"error_room_address_already_exists" = "Tato adresa místnosti již existuje, zkuste prosím upravit pole adresy místnosti nebo změnit název místnosti"; "error_room_address_already_exists" = "Tato adresa místnosti již existuje, zkuste prosím upravit pole adresy místnosti nebo změnit název místnosti";
"error_room_address_invalid_symbols" = "Některé znaky nejsou povoleny. Podporovány jsou pouze písmena, číslice a následující symboly ! $ & ‘ ( ) * + / ; = ? @ [ ] - . _"; "error_room_address_invalid_symbols" = "Některé znaky nejsou povoleny. Podporovány jsou pouze písmena, číslice a následující symboly ! $ & ‘ ( ) * + / ; = ? @ [ ] - . _";
"error_sending_failure_invalid_mime_type" = "Invalid mime type: %@";
"error_sending_failure_missing_media_content" = "Missing media content";
"error_sending_failure_other" = "Error details: %@";
"error_sending_failure_sending_from_unverified_device" = "Sending from unverified device";
"error_sending_failure_unknown" = "Unknown error";
"error_some_messages_have_not_been_sent" = "Některé zprávy nebyly odeslány"; "error_some_messages_have_not_been_sent" = "Některé zprávy nebyly odeslány";
"error_unknown" = "Omlouváme se, došlo k chybě"; "error_unknown" = "Omlouváme se, došlo k chybě";
"error.account_already_logged_in" = "Na tomto zařízení jste již přihlášeni jako %1$@."; "error.account_already_logged_in" = "Na tomto zařízení jste již přihlášeni jako %1$@.";
@@ -545,8 +513,6 @@
"notification_invitation_action_reject" = "Odmítnout"; "notification_invitation_action_reject" = "Odmítnout";
"notification_invite_body" = "Vás pozval(a) do chatu"; "notification_invite_body" = "Vás pozval(a) do chatu";
"notification_invite_body_with_sender" = "%1$@ vás pozval(a) do chatu"; "notification_invite_body_with_sender" = "%1$@ vás pozval(a) do chatu";
"notification_knock_request_body" = "Requested to join";
"notification_live_location_started_body" = "Started sharing their live location";
"notification_mentioned_you_body" = "Zmínili vás: %1$@"; "notification_mentioned_you_body" = "Zmínili vás: %1$@";
"notification_new_messages" = "Nové zprávy"; "notification_new_messages" = "Nové zprávy";
"notification_reaction_body" = "Reagoval(a) s %1$@"; "notification_reaction_body" = "Reagoval(a) s %1$@";
@@ -559,7 +525,7 @@
"notification_sender_mention_reply" = "%1$@ zmínil(a) nebo odpověděl(a)"; "notification_sender_mention_reply" = "%1$@ zmínil(a) nebo odpověděl(a)";
"notification_space_invite_body" = "Pozvali vás do prostoru"; "notification_space_invite_body" = "Pozvali vás do prostoru";
"notification_space_invite_body_with_sender" = "%1$@ vás pozvali do prostoru"; "notification_space_invite_body_with_sender" = "%1$@ vás pozvali do prostoru";
"notification_test_push_notification_content" = "Prohlížíte si oznámení! Klepněte na mě!"; "notification_test_push_notification_content" = "Prohlížíte si oznámení! Klikněte na mě!";
"notification_thread_in_room" = "Vlákno v %1$@"; "notification_thread_in_room" = "Vlákno v %1$@";
"notification_ticker_text_dm" = "%1$@: %2$@"; "notification_ticker_text_dm" = "%1$@: %2$@";
"notification_ticker_text_group" = "%1$@: %2$@ %3$@"; "notification_ticker_text_group" = "%1$@: %2$@ %3$@";
@@ -634,8 +600,8 @@
"screen_advanced_settings_share_presence_description" = "Pokud je tato funkce vypnutá, nebudete moci odesílat ani přijímat potvrzení o přečtení ani upozornění o psaní."; "screen_advanced_settings_share_presence_description" = "Pokud je tato funkce vypnutá, nebudete moci odesílat ani přijímat potvrzení o přečtení ani upozornění o psaní.";
"screen_advanced_settings_show_media_timeline_always_hide" = "Vždy skrýt"; "screen_advanced_settings_show_media_timeline_always_hide" = "Vždy skrýt";
"screen_advanced_settings_show_media_timeline_always_show" = "Vždy zobrazit"; "screen_advanced_settings_show_media_timeline_always_show" = "Vždy zobrazit";
"screen_advanced_settings_show_media_timeline_private_rooms" = "Zobrazit v soukromých místnostech"; "screen_advanced_settings_show_media_timeline_private_rooms" = "V soukromých místnostech";
"screen_advanced_settings_show_media_timeline_subtitle" = "Skrytá média lze vždy zobrazit klepnutím na ně."; "screen_advanced_settings_show_media_timeline_subtitle" = "Skryté médium lze vždy zobrazit klepnutím na něj";
"screen_advanced_settings_show_media_timeline_title" = "Zobrazit média na časové ose"; "screen_advanced_settings_show_media_timeline_title" = "Zobrazit média na časové ose";
"screen_advanced_settings_view_source_description" = "Povolit možnost zobrazení zdroje zprávy na časové ose."; "screen_advanced_settings_view_source_description" = "Povolit možnost zobrazení zdroje zprávy na časové ose.";
"screen_analytics_prompt_data_usage" = "Nezaznamenáváme ani neprofilujeme žádné údaje o účtu"; "screen_analytics_prompt_data_usage" = "Nezaznamenáváme ani neprofilujeme žádné údaje o účtu";
@@ -711,8 +677,8 @@
"screen_bug_report_editor_placeholder" = "Popište chybu…"; "screen_bug_report_editor_placeholder" = "Popište chybu…";
"screen_bug_report_editor_supporting" = "Pokud je to možné, prosím, napište popis anglicky."; "screen_bug_report_editor_supporting" = "Pokud je to možné, prosím, napište popis anglicky.";
"screen_bug_report_error_description_too_short" = "Popis je příliš krátký, uveďte prosím více podrobností o tom, co se stalo. Děkujeme!"; "screen_bug_report_error_description_too_short" = "Popis je příliš krátký, uveďte prosím více podrobností o tom, co se stalo. Děkujeme!";
"screen_bug_report_github_issue_description" = "Můžete zadat číslo souvisejícího problému na GitHubu, pokud existuje."; "screen_bug_report_github_issue_description" = "You can enter the number of an associated GitHub issue, if any.";
"screen_bug_report_github_issue_label" = "Issue na GitHubu"; "screen_bug_report_github_issue_label" = "GitHub issue";
"screen_bug_report_include_crash_logs" = "Odeslat záznamy o selhání"; "screen_bug_report_include_crash_logs" = "Odeslat záznamy o selhání";
"screen_bug_report_include_logs" = "Povolit protokoly"; "screen_bug_report_include_logs" = "Povolit protokoly";
"screen_bug_report_include_logs_error" = "Vaše protokoly jsou příliš velké, proto je nelze zahrnout do této zprávy. Zašlete nám je prosím jiným způsobem."; "screen_bug_report_include_logs_error" = "Vaše protokoly jsou příliš velké, proto je nelze zahrnout do této zprávy. Zašlete nám je prosím jiným způsobem.";
@@ -729,7 +695,7 @@
"screen_change_server_error_element_pro_required_action_ios" = "App Store"; "screen_change_server_error_element_pro_required_action_ios" = "App Store";
"screen_change_server_error_element_pro_required_message" = "Na %1$@ je vyžadována aplikace Element Pro. Stáhněte si ji prosím z obchodu."; "screen_change_server_error_element_pro_required_message" = "Na %1$@ je vyžadována aplikace Element Pro. Stáhněte si ji prosím z obchodu.";
"screen_change_server_error_element_pro_required_title" = "Vyžadován Element Pro"; "screen_change_server_error_element_pro_required_title" = "Vyžadován Element Pro";
"screen_change_server_error_invalid_homeserver" = "Nepodařilo se nám spojit s tímto poskytovatelem účtu. Zkontrolujte prosím, zda jste správně zadali URL adresu poskytovatele účtu. Pokud je URL adresa správná, obraťte se na administrátora poskytovatele účtu, který vám poskytne další pomoc."; "screen_change_server_error_invalid_homeserver" = "Nepodařilo se nám připojit k tomuto domovskému serveru. Zkontrolujte prosím, zda jste správně zadali adresu URL domovského serveru. Pokud je adresa URL správná, obraťte se na správce domovského serveru, který vám poskytne další pomoc.";
"screen_change_server_error_invalid_well_known" = "Server není k dispozici kvůli problému se souborem well-known:\n%1$@"; "screen_change_server_error_invalid_well_known" = "Server není k dispozici kvůli problému se souborem well-known:\n%1$@";
"screen_change_server_error_no_sliding_sync_message" = "Vybraný poskytovatel účtu nepodporuje klouzavou synchronizaci. Pro použití %1$@ je nutná aktualizace serveru."; "screen_change_server_error_no_sliding_sync_message" = "Vybraný poskytovatel účtu nepodporuje klouzavou synchronizaci. Pro použití %1$@ je nutná aktualizace serveru.";
"screen_change_server_error_unauthorized_homeserver" = "Uživateli %1$@ není dovoleno se připojit do %2$@."; "screen_change_server_error_unauthorized_homeserver" = "Uživateli %1$@ není dovoleno se připojit do %2$@.";
@@ -737,16 +703,8 @@
"screen_change_server_error_unauthorized_homeserver_title" = "Poskytovatel účtu %1$@ není povolen."; "screen_change_server_error_unauthorized_homeserver_title" = "Poskytovatel účtu %1$@ není povolen.";
"screen_change_server_form_header" = "Adresa URL domovského serveru"; "screen_change_server_form_header" = "Adresa URL domovského serveru";
"screen_change_server_form_notice" = "Zadejte adresu domény."; "screen_change_server_form_notice" = "Zadejte adresu domény.";
"screen_change_server_navigation_title_login" = "Sign in";
"screen_change_server_navigation_title_register" = "Create account";
"screen_change_server_subtitle" = "Jaká je adresa vašeho serveru?"; "screen_change_server_subtitle" = "Jaká je adresa vašeho serveru?";
"screen_change_server_textfield_footer_login" = "If your account is provided by your company or a community, then change the account provider (example: companyname.com).";
"screen_change_server_textfield_footer_register" = "Create an account on matrix.org for free. If you want to create an account with a different provider, then change it accordingly (example: communityname.org).";
"screen_change_server_textfield_header" = "Account provider";
"screen_change_server_textfield_placeholder" = "example.com";
"screen_change_server_title" = "Vyberte váš server"; "screen_change_server_title" = "Vyberte váš server";
"screen_change_server_title_login" = "Enter your account provider";
"screen_change_server_title_register" = "Choose an account provider";
"screen_chat_backup_key_backup_action_disable" = "Vypnout zálohování"; "screen_chat_backup_key_backup_action_disable" = "Vypnout zálohování";
"screen_chat_backup_key_backup_action_enable" = "Zapnout zálohování"; "screen_chat_backup_key_backup_action_enable" = "Zapnout zálohování";
"screen_chat_backup_key_backup_description" = "To vám umožní zobrazit historii chatu na všech nových zařízeních a je to nutné pro zálohování chatů a digitální identity. %1$@ ."; "screen_chat_backup_key_backup_description" = "To vám umožní zobrazit historii chatu na všech nových zařízeních a je to nutné pro zálohování chatů a digitální identity. %1$@ .";
@@ -793,7 +751,7 @@
"screen_create_room_private_option_description" = "Do této místnosti mohou vstoupit pouze pozvaní."; "screen_create_room_private_option_description" = "Do této místnosti mohou vstoupit pouze pozvaní.";
"screen_create_room_private_option_title" = "Soukromé"; "screen_create_room_private_option_title" = "Soukromé";
"screen_create_room_public_option_description" = "Tuto místnost může najít kdokoli.\nTo můžete kdykoli změnit v nastavení místnosti."; "screen_create_room_public_option_description" = "Tuto místnost může najít kdokoli.\nTo můžete kdykoli změnit v nastavení místnosti.";
"screen_create_room_public_option_short_description" = "Připojit se může kdokoli, včetně osob mimo vaši organizaci."; "screen_create_room_public_option_short_description" = "Vstoupit může kdokoli.";
"screen_create_room_public_option_title" = "Veřejné"; "screen_create_room_public_option_title" = "Veřejné";
"screen_create_room_room_access_section_knocking_option_description" = "Kdokoli může požádat o vstup do místnosti, ale správce nebo moderátor bude muset žádost přijmout."; "screen_create_room_room_access_section_knocking_option_description" = "Kdokoli může požádat o vstup do místnosti, ale správce nebo moderátor bude muset žádost přijmout.";
"screen_create_room_room_access_section_knocking_option_title" = "Povolit žádost o vstup"; "screen_create_room_room_access_section_knocking_option_title" = "Povolit žádost o vstup";
@@ -801,7 +759,7 @@
"screen_create_room_room_access_section_knocking_restricted_option_title" = "Požádat o vstup"; "screen_create_room_room_access_section_knocking_restricted_option_title" = "Požádat o vstup";
"screen_create_room_room_access_section_private_option_description" = "Vstoupit mohou pouze pozvaní lidé."; "screen_create_room_room_access_section_private_option_description" = "Vstoupit mohou pouze pozvaní lidé.";
"screen_create_room_room_access_section_private_option_title" = "Soukromé"; "screen_create_room_room_access_section_private_option_title" = "Soukromé";
"screen_create_room_room_access_section_public_option_description" = "Připojit se může kdokoli, včetně osob mimo vaši organizaci."; "screen_create_room_room_access_section_public_option_description" = "Vstoupit může kdokoli.";
"screen_create_room_room_access_section_public_option_title" = "Veřejné"; "screen_create_room_room_access_section_public_option_title" = "Veřejné";
"screen_create_room_room_access_section_restricted_option_description" = "Kdokoli může vstoupit do %1$@."; "screen_create_room_room_access_section_restricted_option_description" = "Kdokoli může vstoupit do %1$@.";
"screen_create_room_room_access_section_restricted_option_title" = "Standard"; "screen_create_room_room_access_section_restricted_option_title" = "Standard";
@@ -817,8 +775,8 @@
"screen_create_room_topic_placeholder" = "Přidat popis…"; "screen_create_room_topic_placeholder" = "Přidat popis…";
"screen_custom_recovery_key_confirm_error_mismatch" = "The recovery key you entered doesn't match"; "screen_custom_recovery_key_confirm_error_mismatch" = "The recovery key you entered doesn't match";
"screen_custom_recovery_key_confirm_submit" = "Finish setup"; "screen_custom_recovery_key_confirm_submit" = "Finish setup";
"screen_custom_recovery_key_confirm_subtitle" = "Zadejte znovu svůj klíč pro obnovení."; "screen_custom_recovery_key_confirm_subtitle" = "Enter your recovery key again.";
"screen_custom_recovery_key_confirm_title" = "Potvrďte svůj klíč pro obnovení"; "screen_custom_recovery_key_confirm_title" = "Confirm your recovery key";
"screen_custom_recovery_key_input_strength" = "Strength"; "screen_custom_recovery_key_input_strength" = "Strength";
"screen_custom_recovery_key_input_strength_a11y" = "Passphrase strength: %1$@"; "screen_custom_recovery_key_input_strength_a11y" = "Passphrase strength: %1$@";
"screen_custom_recovery_key_input_strength_moderate" = "Moderate"; "screen_custom_recovery_key_input_strength_moderate" = "Moderate";
@@ -826,12 +784,12 @@
"screen_custom_recovery_key_input_strength_very_strong" = "Very strong"; "screen_custom_recovery_key_input_strength_very_strong" = "Very strong";
"screen_custom_recovery_key_input_strength_very_weak" = "Very weak"; "screen_custom_recovery_key_input_strength_very_weak" = "Very weak";
"screen_custom_recovery_key_input_strength_weak" = "Weak"; "screen_custom_recovery_key_input_strength_weak" = "Weak";
"screen_custom_recovery_key_input_subtitle" = "Vyberte si klíč pro obnovení, který si budete moci zapamatovat."; "screen_custom_recovery_key_input_subtitle" = "Choose a recovery key that you can memorize.";
"screen_custom_recovery_key_input_title" = "Zadejte klíč pro obnovení"; "screen_custom_recovery_key_input_title" = "Enter a recovery key";
"screen_custom_recovery_key_loading_a11y" = "Loading recovery key requirements"; "screen_custom_recovery_key_loading_a11y" = "Loading recovery key requirements";
"screen_custom_recovery_key_success_notice" = "To change your recovery key, go to Settings → Encryption → Backup"; "screen_custom_recovery_key_success_notice" = "To change your recovery key, go to Settings → Encryption → Backup";
"screen_custom_recovery_key_success_subtitle" = "Pomocí svého klíče pro obnovení můžete potvrdit nová zařízení nebo obnovit šifrované chaty, pokud ztratíte přístup ke všem svým zařízením."; "screen_custom_recovery_key_success_subtitle" = "You can use your recovery key to confirm new devices or restore your encrypted chats if you lose access to all your devices.";
"screen_custom_recovery_key_success_title" = "Vaše záloha je nyní plně nastavena"; "screen_custom_recovery_key_success_title" = "Your backup is now fully set up";
"screen_deactivate_account_confirmation_dialog_content" = "Potvrďte prosím, že chcete smazat svůj účet. Tuto akci nelze vrátit zpět."; "screen_deactivate_account_confirmation_dialog_content" = "Potvrďte prosím, že chcete smazat svůj účet. Tuto akci nelze vrátit zpět.";
"screen_deactivate_account_delete_all_messages" = "Smazat všechny mé zprávy"; "screen_deactivate_account_delete_all_messages" = "Smazat všechny mé zprávy";
"screen_deactivate_account_delete_all_messages_notice" = "Upozornění: Budoucí uživatelé mohou vidět neúplné konverzace."; "screen_deactivate_account_delete_all_messages_notice" = "Upozornění: Budoucí uživatelé mohou vidět neúplné konverzace.";
@@ -871,7 +829,7 @@
"screen_encryption_reset_bullet_3" = "Budete muset znovu ověřit všechna stávající zařízení a kontakty"; "screen_encryption_reset_bullet_3" = "Budete muset znovu ověřit všechna stávající zařízení a kontakty";
"screen_encryption_reset_footer" = "Digitální identitu resetujte pouze v případě, že nemáte přístup k jinému ověřenému zařízení a nemáte klíč pro obnovení."; "screen_encryption_reset_footer" = "Digitální identitu resetujte pouze v případě, že nemáte přístup k jinému ověřenému zařízení a nemáte klíč pro obnovení.";
"screen_encryption_reset_title" = "Nelze potvrdit? Budete muset resetovat svou digitální identitu."; "screen_encryption_reset_title" = "Nelze potvrdit? Budete muset resetovat svou digitální identitu.";
"screen_home_tab_chats" = "Chaty"; "screen_home_tab_chats" = "Všechny chaty";
"screen_home_tab_spaces" = "Prostory"; "screen_home_tab_spaces" = "Prostory";
"screen_identity_confirmation_cannot_confirm" = "Nemůžete potvrdit?"; "screen_identity_confirmation_cannot_confirm" = "Nemůžete potvrdit?";
"screen_identity_confirmation_create_new_recovery_key" = "Vytvoření nového klíče pro obnovení"; "screen_identity_confirmation_create_new_recovery_key" = "Vytvoření nového klíče pro obnovení";
@@ -883,14 +841,14 @@
"screen_identity_confirmed_title" = "Zařízení ověřeno"; "screen_identity_confirmed_title" = "Zařízení ověřeno";
"screen_identity_use_another_device" = "Použít jiné zařízení"; "screen_identity_use_another_device" = "Použít jiné zařízení";
"screen_identity_waiting_on_other_device" = "Čekání na jiném zařízení..."; "screen_identity_waiting_on_other_device" = "Čekání na jiném zařízení...";
"screen_image_edition_a11y_flip_image_horizontally" = "Otočit obrázek vodorovně"; "screen_image_edition_a11y_flip_image_horizontally" = "Flip image horizontally";
"screen_image_edition_a11y_flip_image_horizontally_state_flipped" = "Otočeno vodorovně"; "screen_image_edition_a11y_flip_image_horizontally_state_flipped" = "Flipped horizontally";
"screen_image_edition_a11y_flip_image_horizontally_state_original" = "Originál"; "screen_image_edition_a11y_flip_image_horizontally_state_original" = "Original";
"screen_image_edition_a11y_flip_image_vertically" = "Otočit obrázek svisle"; "screen_image_edition_a11y_flip_image_vertically" = "Flip image vertically";
"screen_image_edition_a11y_flip_image_vertically_state_flipped" = "Otočeno svisle "; "screen_image_edition_a11y_flip_image_vertically_state_flipped" = "Flipped vertically";
"screen_image_edition_a11y_flip_image_vertically_state_original" = "Originál"; "screen_image_edition_a11y_flip_image_vertically_state_original" = "Original";
"screen_image_edition_a11y_rotate_to_the_left" = "Otočit obrázek doleva"; "screen_image_edition_a11y_rotate_to_the_left" = "Rotate the image to the left";
"screen_image_edition_title" = "Upravit fotku"; "screen_image_edition_title" = "Edit photo";
"screen_invite_users_already_a_member" = "Již členem"; "screen_invite_users_already_a_member" = "Již členem";
"screen_invite_users_already_invited" = "Již pozván(a)"; "screen_invite_users_already_invited" = "Již pozván(a)";
"screen_invite_users_confirm_dialog_subtitle_multiple_users" = "Momentálně s těmito kontakty nemáte žádné chaty. Před pokračováním potvrďte jejich pozvání do této místnosti."; "screen_invite_users_confirm_dialog_subtitle_multiple_users" = "Momentálně s těmito kontakty nemáte žádné chaty. Před pokračováním potvrďte jejich pozvání do této místnosti.";
@@ -930,7 +888,7 @@
"screen_join_room_loading_alert_title" = "Náhled této místnosti jsme nemohli zobrazit"; "screen_join_room_loading_alert_title" = "Náhled této místnosti jsme nemohli zobrazit";
"screen_join_room_space_not_supported_description" = "%1$@ zatím nepodporuje prostory. Prostory můžete používat na webu."; "screen_join_room_space_not_supported_description" = "%1$@ zatím nepodporuje prostory. Prostory můžete používat na webu.";
"screen_join_room_space_not_supported_title" = "Prostory zatím nejsou podporovány"; "screen_join_room_space_not_supported_title" = "Prostory zatím nejsou podporovány";
"screen_join_room_subtitle_knock" = "Klepněte na tlačítko níže a správce místnosti bude informován. Po schválení se budete moci připojit ke konverzaci."; "screen_join_room_subtitle_knock" = "Klikněte na tlačítko níže a správce místnosti bude informován. Po schválení se budete moci připojit ke konverzaci.";
"screen_join_room_subtitle_no_preview" = "Pro zobrazení historie zpráv musíte být členem této místnosti."; "screen_join_room_subtitle_no_preview" = "Pro zobrazení historie zpráv musíte být členem této místnosti.";
"screen_join_room_title_knock" = "Chcete se připojit k této místnosti?"; "screen_join_room_title_knock" = "Chcete se připojit k této místnosti?";
"screen_join_room_title_no_preview" = "Náhled není k dispozici"; "screen_join_room_title_no_preview" = "Náhled není k dispozici";
@@ -966,10 +924,6 @@
"screen_knock_requests_list_empty_state_title" = "Žádná čekající žádost o vstup"; "screen_knock_requests_list_empty_state_title" = "Žádná čekající žádost o vstup";
"screen_knock_requests_list_initial_loading_title" = "Načítání žádostí o vstup..."; "screen_knock_requests_list_initial_loading_title" = "Načítání žádostí o vstup...";
"screen_knock_requests_list_title" = "Žádosti o vstup"; "screen_knock_requests_list_title" = "Žádosti o vstup";
"screen_labs_enable_gallery" = "Gallery messages";
"screen_labs_enable_gallery_description" = "Send multiple images or videos in one go. Stable on mobile, but not yet supported by web.";
"screen_labs_enable_knocking" = "Ask to join";
"screen_labs_enable_knocking_description" = "Users can request access to a room that is not open for anyone to join. Stable on mobile, web implementation exists but is experimental.";
"screen_labs_enable_threads" = "Povolit odpovědi ve vlákně"; "screen_labs_enable_threads" = "Povolit odpovědi ve vlákně";
"screen_labs_enable_threads_description" = "Aplikace se restartuje, aby se tato změna projevila."; "screen_labs_enable_threads_description" = "Aplikace se restartuje, aby se tato změna projevila.";
"screen_labs_header_description" = "Vyzkoušejte naše nejnovější nápady, které jsou ve vývoji. Tyto funkce nejsou finalizované; mohou být nestabilní a mohou se změnit."; "screen_labs_header_description" = "Vyzkoušejte naše nejnovější nápady, které jsou ve vývoji. Tyto funkce nejsou finalizované; mohou být nestabilní a mohou se změnit.";
@@ -990,7 +944,6 @@
"screen_link_new_device_desktop_step3" = "Naskenujte QR kód pomocí tohoto zařízení"; "screen_link_new_device_desktop_step3" = "Naskenujte QR kód pomocí tohoto zařízení";
"screen_link_new_device_desktop_submit" = "Připraveno ke skenování"; "screen_link_new_device_desktop_submit" = "Připraveno ke skenování";
"screen_link_new_device_desktop_title" = "Otevřete %1$@ na stolním počítači a získejte QR kód"; "screen_link_new_device_desktop_title" = "Otevřete %1$@ na stolním počítači a získejte QR kód";
"screen_link_new_device_desktop_warning" = "Only scan a QR code after following the steps above on your own device. Never scan a code sent by another person.";
"screen_link_new_device_enter_number_error_numbers_do_not_match" = "Čísla se neshodují"; "screen_link_new_device_enter_number_error_numbers_do_not_match" = "Čísla se neshodují";
"screen_link_new_device_enter_number_notice" = "Zadejte dvoumístný kód"; "screen_link_new_device_enter_number_notice" = "Zadejte dvoumístný kód";
"screen_link_new_device_enter_number_subtitle" = "Tím ověříte, zda je připojení k druhému zařízení bezpečné."; "screen_link_new_device_enter_number_subtitle" = "Tím ověříte, zda je připojení k druhému zařízení bezpečné.";
@@ -1017,13 +970,11 @@
"screen_live_location_sheet_nobody_sharing" = "Nikdo nesdílí svou polohu"; "screen_live_location_sheet_nobody_sharing" = "Nikdo nesdílí svou polohu";
"screen_live_location_sheet_sharing_live_location" = "Sdílení aktuální polohy"; "screen_live_location_sheet_sharing_live_location" = "Sdílení aktuální polohy";
"screen_live_location_sheet_title" = "Na mapě"; "screen_live_location_sheet_title" = "Na mapě";
"screen_local_network_opt_in_subtitle" = "Your homeserver is on your local network. To connect, %1$@ needs permission to reach devices on this network.";
"screen_local_network_opt_in_title" = "Allow access to local network";
"screen_login_error_deactivated_account" = "Tento účet byl smazán."; "screen_login_error_deactivated_account" = "Tento účet byl smazán.";
"screen_login_error_invalid_credentials" = "Nesprávné uživatelské jméno nebo heslo"; "screen_login_error_invalid_credentials" = "Nesprávné uživatelské jméno nebo heslo";
"screen_login_error_invalid_user_id" = "Toto není platný identifikátor uživatele. Očekávaný formát: '@user:homeserver.org'"; "screen_login_error_invalid_user_id" = "Toto není platný identifikátor uživatele. Očekávaný formát: '@user:homeserver.org'";
"screen_login_error_refresh_tokens" = "Tento server je nakonfigurován tak, aby používal obnovovací tokeny. Ty nejsou podporovány při použití přihlašovacích údajů založených na hesle."; "screen_login_error_refresh_tokens" = "Tento server je nakonfigurován tak, aby používal obnovovací tokeny. Ty nejsou podporovány při použití přihlašovacích údajů založených na hesle.";
"screen_login_error_unsupported_authentication" = "Vybraný poskytovatel účtu nepodporuje přihlášení pomocí hesla ani OAuth. Kontaktujte prosím svého poskytovatele účtu nebo zvolte jiného."; "screen_login_error_unsupported_authentication" = "Vybraný domovský server nepodporuje přihlášení pomocí hesla nebo OAuth. Kontaktujte prosím svého správce nebo vyberte jiný domovský server.";
"screen_login_form_header" = "Zadejte své údaje"; "screen_login_form_header" = "Zadejte své údaje";
"screen_login_subtitle" = "Matrix je otevřená síť pro bezpečnou a decentralizovanou komunikaci."; "screen_login_subtitle" = "Matrix je otevřená síť pro bezpečnou a decentralizovanou komunikaci.";
"screen_login_title" = "Vítejte zpět!"; "screen_login_title" = "Vítejte zpět!";
@@ -1063,26 +1014,20 @@
"screen_media_upload_preview_item_count" = "Položka %1$d z %2$d"; "screen_media_upload_preview_item_count" = "Položka %1$d z %2$d";
"screen_media_upload_preview_optimize_image_quality_title" = "Optimalizace kvality obrazu"; "screen_media_upload_preview_optimize_image_quality_title" = "Optimalizace kvality obrazu";
"screen_media_upload_preview_processing" = "Probíhá zpracování…"; "screen_media_upload_preview_processing" = "Probíhá zpracování…";
"screen_media_upload_preview_title" = "Přidat média"; "screen_media_upload_preview_title" = "Add media";
"screen_migration_message" = "Jedná se o jednorázový proces, prosíme o strpení."; "screen_migration_message" = "Jedná se o jednorázový proces, prosíme o strpení.";
"screen_migration_title" = "Nastavení vašeho účtu"; "screen_migration_title" = "Nastavení vašeho účtu";
"screen_missing_key_backup_open_element_classic" = "Otevřít Element Classic"; "screen_missing_key_backup_open_element_classic" = "Otevřít Element Classic";
"screen_missing_key_backup_step_1" = "Otevřete Element Classic na svém zařízení"; "screen_missing_key_backup_step_1" = "Otevřete Element Classic na svém zařízení";
"screen_missing_key_backup_step_2_ios" = "Přejděte do Nastavení uživatele > Zabezpečení"; "screen_missing_key_backup_step_2_ios" = "Přejděte do Nastavení uživatele > Zabezpečení";
"screen_missing_key_backup_step_3_ios" = "Přejděte dolů na položku Zálohování chatu a klepněte na Nastavit"; "screen_missing_key_backup_step_3_ios" = "Přejděte dolů na Bezpečné zálohování a klepněte na Nastavení";
"screen_missing_key_backup_step_4" = "Postupujte podle pokynů k povolení úložiště klíčů"; "screen_missing_key_backup_step_4" = "Postupujte podle pokynů k povolení úložiště klíčů";
"screen_missing_key_backup_step_5" = "Vraťte se do %1$@"; "screen_missing_key_backup_step_5" = "Vraťte se do %1$@";
"screen_missing_key_backup_title" = "Povolte úložiště klíčů, než budete pokračovat na %1$@"; "screen_missing_key_backup_title" = "Povolte úložiště klíčů, než budete pokračovat na %1$@";
"screen_moderation_and_safety_invites_heading" = "Invites";
"screen_moderation_and_safety_other_users_heading" = "Other users";
"screen_moderation_and_safety_share_presence_heading" = "Your appearance";
"screen_multi_account_announcement_action" = "Add account";
"screen_multi_account_announcement_description" = "Go to %1$@ to sign into another account. Then you can easily switch between them.";
"screen_multi_account_announcement_title" = "You can now add multiple accounts";
"screen_notification_optin_subtitle" = "Nastavení můžete později změnit."; "screen_notification_optin_subtitle" = "Nastavení můžete později změnit.";
"screen_notification_optin_title" = "Povolte oznámení a nezmeškejte žádnou zprávu"; "screen_notification_optin_title" = "Povolte oznámení a nezmeškejte žádnou zprávu";
"screen_notification_settings_additional_settings_section_title" = "Další nastavení"; "screen_notification_settings_additional_settings_section_title" = "Další nastavení";
"screen_notification_settings_call_ringtone_label" = "Vyzváněcí tón hovoru"; "screen_notification_settings_call_ringtone_label" = "Call ringtone";
"screen_notification_settings_calls_label" = "Halsové a video hovory"; "screen_notification_settings_calls_label" = "Halsové a video hovory";
"screen_notification_settings_configuration_mismatch" = "Neshoda konfigurace"; "screen_notification_settings_configuration_mismatch" = "Neshoda konfigurace";
"screen_notification_settings_configuration_mismatch_description" = "Zjednodušili jsme nastavení oznámení, abychom usnadnili hledání možností. \n\nNěkterá vlastní nastavení, která jste si vybrali v minulosti, se zde nezobrazují, ale jsou stále aktivní. \n\nPokud budete pokračovat, některá nastavení se mohou změnit."; "screen_notification_settings_configuration_mismatch_description" = "Zjednodušili jsme nastavení oznámení, abychom usnadnili hledání možností. \n\nNěkterá vlastní nastavení, která jste si vybrali v minulosti, se zde nezobrazují, ale jsou stále aktivní. \n\nPokud budete pokračovat, některá nastavení se mohou změnit.";
@@ -1097,56 +1042,54 @@
"screen_notification_settings_failed_fixing_configuration" = "Konfigurace nebyla opravena, zkuste to prosím znovu."; "screen_notification_settings_failed_fixing_configuration" = "Konfigurace nebyla opravena, zkuste to prosím znovu.";
"screen_notification_settings_group_chats" = "Skupinové chaty"; "screen_notification_settings_group_chats" = "Skupinové chaty";
"screen_notification_settings_invite_for_me_label" = "Pozvánky"; "screen_notification_settings_invite_for_me_label" = "Pozvánky";
"screen_notification_settings_mentions_only_disclaimer" = "Váš poskytovatel účtu tuto možnost v encrypted chatech nepodporuje, v některých chatech se vám proto nemusí zobrazovat oznámení."; "screen_notification_settings_mentions_only_disclaimer" = "Váš domovský server tuto možnost v zašifrovaných místnostech nepodporuje, v některých místnostech nemusíte být upozorněni.";
"screen_notification_settings_mentions_section_title" = "Zmínky"; "screen_notification_settings_mentions_section_title" = "Zmínky";
"screen_notification_settings_message_sound_dialog_choose_other" = "Vyberte jiný zvuk…"; "screen_notification_settings_message_sound_dialog_choose_other" = "Choose another sound…";
"screen_notification_settings_message_sound_dialog_current_subtitle" = "Aktuálně používáte %1$@"; "screen_notification_settings_message_sound_dialog_current_subtitle" = "Currently using %1$@";
"screen_notification_settings_message_sound_dialog_title" = "Zvuk zprávy"; "screen_notification_settings_message_sound_dialog_title" = "Message sound";
"screen_notification_settings_message_sound_label" = "Zvuk zprávy"; "screen_notification_settings_message_sound_label" = "Message sound";
"screen_notification_settings_mode_all" = "Vše"; "screen_notification_settings_mode_all" = "Vše";
"screen_notification_settings_mode_mentions" = "Zmínky"; "screen_notification_settings_mode_mentions" = "Zmínky";
"screen_notification_settings_notification_section_title" = "Upozornit mě na"; "screen_notification_settings_notification_section_title" = "Upozornit mě na";
"screen_notification_settings_room_mention_label" = "Zmínky o @room"; "screen_notification_settings_room_mention_label" = "Upozornit mě na @room";
"screen_notification_settings_show_all_activity_subtitle" = "Dots or number of unread messages"; "screen_notification_settings_sound_custom_fallback" = "Custom";
"screen_notification_settings_show_all_activity_title" = "Show all activity in the room list"; "screen_notification_settings_sound_custom_sound_button_title" = "Custom sound...";
"screen_notification_settings_sound_custom_fallback" = "Vlastní"; "screen_notification_settings_sound_delete_sound_error_title" = "Error deleting file";
"screen_notification_settings_sound_custom_sound_button_title" = "Vlastní zvuk..."; "screen_notification_settings_sound_element_default" = "Element Default";
"screen_notification_settings_sound_delete_sound_error_title" = "Chyba při mazání souboru";
"screen_notification_settings_sound_element_default" = "Výchozí nastavení Elementu";
"screen_notification_settings_sound_element_fade" = "Element Fade"; "screen_notification_settings_sound_element_fade" = "Element Fade";
"screen_notification_settings_sound_import_sound_error_title" = "Chyba při importu souboru"; "screen_notification_settings_sound_import_sound_error_title" = "Error importing file";
"screen_notification_settings_sound_preview_sound_error_title" = "Problém s náhledem zvuku upozornění"; "screen_notification_settings_sound_preview_sound_error_title" = "Problem previewing alert sound";
"screen_notification_settings_sound_section_title" = "Zvuk"; "screen_notification_settings_sound_section_title" = "Sound";
"screen_notification_settings_sound_set_sound_error_dismiss_a11y" = "Zrušit chybu zvukového upozornění"; "screen_notification_settings_sound_set_sound_error_dismiss_a11y" = "Dismiss alert sound error";
"screen_notification_settings_sound_set_sound_error_title" = "Problém s nastavením zvuku upozornění"; "screen_notification_settings_sound_set_sound_error_title" = "Problem setting alert sound";
"screen_notification_settings_sound_silent" = "Tichý"; "screen_notification_settings_sound_silent" = "Silent";
"screen_notification_settings_sound_system_alert_ios" = "Upozornění"; "screen_notification_settings_sound_system_alert_ios" = "Alert";
"screen_notification_settings_sound_system_anticipate_ios" = "Předvídat"; "screen_notification_settings_sound_system_anticipate_ios" = "Anticipate";
"screen_notification_settings_sound_system_bell_ios" = "Zvon"; "screen_notification_settings_sound_system_bell_ios" = "Bell";
"screen_notification_settings_sound_system_bloom_ios" = "Květ"; "screen_notification_settings_sound_system_bloom_ios" = "Bloom";
"screen_notification_settings_sound_system_calypso_ios" = "Calypso"; "screen_notification_settings_sound_system_calypso_ios" = "Calypso";
"screen_notification_settings_sound_system_chime_ios" = "Rozeznít"; "screen_notification_settings_sound_system_chime_ios" = "Chime";
"screen_notification_settings_sound_system_choo_choo_ios" = "Choo Choo"; "screen_notification_settings_sound_system_choo_choo_ios" = "Choo Choo";
"screen_notification_settings_sound_system_default" = "Výchozí nastavení systému"; "screen_notification_settings_sound_system_default" = "System Default";
"screen_notification_settings_sound_system_descent_ios" = "Klesání"; "screen_notification_settings_sound_system_descent_ios" = "Descent";
"screen_notification_settings_sound_system_electronic_ios" = "Elektronický"; "screen_notification_settings_sound_system_electronic_ios" = "Electronic";
"screen_notification_settings_sound_system_fanfare_ios" = "Fanfára"; "screen_notification_settings_sound_system_fanfare_ios" = "Fanfare";
"screen_notification_settings_sound_system_glass_ios" = "Sklo"; "screen_notification_settings_sound_system_glass_ios" = "Glass";
"screen_notification_settings_sound_system_horn_ios" = "Roh"; "screen_notification_settings_sound_system_horn_ios" = "Horn";
"screen_notification_settings_sound_system_ladder_ios" = "Žebřík"; "screen_notification_settings_sound_system_ladder_ios" = "Ladder";
"screen_notification_settings_sound_system_minuet_ios" = "Minuet"; "screen_notification_settings_sound_system_minuet_ios" = "Minuet";
"screen_notification_settings_sound_system_news_flash_ios" = "Bleskové zprávy"; "screen_notification_settings_sound_system_news_flash_ios" = "News Flash";
"screen_notification_settings_sound_system_noir_ios" = "Noir"; "screen_notification_settings_sound_system_noir_ios" = "Noir";
"screen_notification_settings_sound_system_sherwood_forest_ios" = "Sherwoodský les"; "screen_notification_settings_sound_system_sherwood_forest_ios" = "Sherwood Forest";
"screen_notification_settings_sound_system_spell_ios" = "Kouzlo"; "screen_notification_settings_sound_system_spell_ios" = "Spell";
"screen_notification_settings_sound_system_suspense_ios" = "Napětí"; "screen_notification_settings_sound_system_suspense_ios" = "Suspense";
"screen_notification_settings_sound_system_swish_ios" = "Svištění"; "screen_notification_settings_sound_system_swish_ios" = "Swish";
"screen_notification_settings_sound_system_telegraph_ios" = "Telegraf"; "screen_notification_settings_sound_system_telegraph_ios" = "Telegraph";
"screen_notification_settings_sound_system_tiptoes_ios" = "Tiptoes"; "screen_notification_settings_sound_system_tiptoes_ios" = "Tiptoes";
"screen_notification_settings_sound_system_tri_tone_ios" = "Třítónový"; "screen_notification_settings_sound_system_tri_tone_ios" = "Tri-tone";
"screen_notification_settings_sound_system_tweet_ios" = "Tweet"; "screen_notification_settings_sound_system_tweet_ios" = "Tweet";
"screen_notification_settings_sound_system_typewriters_ios" = "Psací stroje"; "screen_notification_settings_sound_system_typewriters_ios" = "Typewriters";
"screen_notification_settings_sound_system_update_ios" = "Aktualizace"; "screen_notification_settings_sound_system_update_ios" = "Update";
"screen_notification_settings_system_notifications_action_required" = "Chcete-li dostávat oznámení, změňte prosím svůj %1$@."; "screen_notification_settings_system_notifications_action_required" = "Chcete-li dostávat oznámení, změňte prosím svůj %1$@.";
"screen_notification_settings_system_notifications_action_required_content_link" = "systémová nastavení"; "screen_notification_settings_system_notifications_action_required_content_link" = "systémová nastavení";
"screen_notification_settings_system_notifications_turned_off" = "Systémová oznámení byla vypnuta"; "screen_notification_settings_system_notifications_turned_off" = "Systémová oznámení byla vypnuta";
@@ -1169,14 +1112,6 @@
"screen_polls_history_filter_ongoing" = "Probíhající"; "screen_polls_history_filter_ongoing" = "Probíhající";
"screen_polls_history_filter_past" = "Minulé"; "screen_polls_history_filter_past" = "Minulé";
"screen_polls_history_title" = "Hlasování"; "screen_polls_history_title" = "Hlasování";
"screen_ptt_settings_battery_optimization" = "Ignore battery optimisation";
"screen_ptt_settings_battery_optimization_description" = "Stay active in background";
"screen_ptt_settings_covert_mode" = "Covert mode";
"screen_ptt_settings_covert_mode_description" = "Mute all channels";
"screen_ptt_settings_lock_screen" = "Show on lock screen";
"screen_ptt_settings_lock_screen_description" = "Access from the lock screen";
"screen_ptt_settings_system_overlay" = "Enable system overlay";
"screen_ptt_settings_system_overlay_description" = "Access a floating action button";
"screen_push_history_title" = "Historie push oznámení"; "screen_push_history_title" = "Historie push oznámení";
"screen_qr_code_login_connecting_subtitle" = "Navazování zabezpečeného spojení"; "screen_qr_code_login_connecting_subtitle" = "Navazování zabezpečeného spojení";
"screen_qr_code_login_connection_note_secure_state_description" = "K novému zařízení se nepodařilo navázat bezpečné připojení. Vaše stávající zařízení jsou stále v bezpečí a nemusíte se o ně obávat."; "screen_qr_code_login_connection_note_secure_state_description" = "K novému zařízení se nepodařilo navázat bezpečné připojení. Vaše stávající zařízení jsou stále v bezpečí a nemusíte se o ně obávat.";
@@ -1250,11 +1185,11 @@
"screen_recovery_key_setup_title" = "Získat klíč pro obnovení"; "screen_recovery_key_setup_title" = "Získat klíč pro obnovení";
"screen_report_content_block_user" = "Zablokovat uživatele"; "screen_report_content_block_user" = "Zablokovat uživatele";
"screen_report_content_block_user_hint" = "Zaškrtněte, pokud chcete skrýt všechny aktuální a budoucí zprávy od tohoto uživatele"; "screen_report_content_block_user_hint" = "Zaškrtněte, pokud chcete skrýt všechny aktuální a budoucí zprávy od tohoto uživatele";
"screen_report_content_explanation" = "Tato zpráva bude nahlášena vašemu poskytovateli účtu. Nebude moci číst žádné šifrované zprávy."; "screen_report_content_explanation" = "Tato zpráva bude nahlášena správci vašeho domovského serveru. Nebude si moci přečíst žádné šifrované zprávy.";
"screen_report_content_hint" = "Důvod nahlášení tohoto obsahu"; "screen_report_content_hint" = "Důvod nahlášení tohoto obsahu";
"screen_report_room_leave_failed_alert_message" = "Vaše hlášení bylo úspěšně odesláno, ale při pokusu o opuštění místnosti jsme narazili na problém. Zkuste to prosím znovu."; "screen_report_room_leave_failed_alert_message" = "Vaše hlášení bylo úspěšně odesláno, ale při pokusu o opuštění místnosti jsme narazili na problém. Zkuste to prosím znovu.";
"screen_report_room_leave_failed_alert_title" = "Nelze opustit místnost"; "screen_report_room_leave_failed_alert_title" = "Nelze opustit místnost";
"screen_report_room_reason_footer" = "Nahlaste tento chat poskytovateli vašeho účtu. Pokud jsou zprávy šifrované, poskytovatel vašeho účtu si je nebude moci přečíst."; "screen_report_room_reason_footer" = "Nahlaste tuto místnost svému administrátorovi. Pokud jsou zprávy zašifrované, váš administrátor je nebude moci číst.";
"screen_report_room_reason_placeholder" = "Popište důvod..."; "screen_report_room_reason_placeholder" = "Popište důvod...";
"screen_report_room_title" = "Nahlásit místnost"; "screen_report_room_title" = "Nahlásit místnost";
"screen_reset_encryption_confirmation_alert_action" = "Ano, resetovat nyní"; "screen_reset_encryption_confirmation_alert_action" = "Ano, resetovat nyní";
@@ -1321,14 +1256,7 @@
"screen_room_change_role_section_users" = "Členové"; "screen_room_change_role_section_users" = "Členové";
"screen_room_change_role_unsaved_changes_description" = "Máte neuložené změny."; "screen_room_change_role_unsaved_changes_description" = "Máte neuložené změny.";
"screen_room_change_role_unsaved_changes_title" = "Uložit změny?"; "screen_room_change_role_unsaved_changes_title" = "Uložit změny?";
"screen_room_confirm_removal_reason_label" = "Reason (optional)";
"screen_room_confirm_removal_reason_placeholder" = "Enter reason…";
"screen_room_confirm_removal_reason_supporting_text" = "(Optional)";
"screen_room_confirm_removal_title" = "Remove message?";
"screen_room_details_add_topic_title" = "Přidat téma"; "screen_room_details_add_topic_title" = "Přidat téma";
"screen_room_details_audio_push_to_talk" = "Push to talk";
"screen_room_details_audio_title" = "Room Audio";
"screen_room_details_audio_video_calls" = "Video calls";
"screen_room_details_badge_encrypted" = "Šifrováno"; "screen_room_details_badge_encrypted" = "Šifrováno";
"screen_room_details_badge_not_encrypted" = "Není šifrováno"; "screen_room_details_badge_not_encrypted" = "Není šifrováno";
"screen_room_details_badge_public" = "Veřejná místnost"; "screen_room_details_badge_public" = "Veřejná místnost";
@@ -1354,9 +1282,6 @@
"screen_room_details_profile_row_title" = "Profil"; "screen_room_details_profile_row_title" = "Profil";
"screen_room_details_requests_to_join_title" = "Žádosti o vstup"; "screen_room_details_requests_to_join_title" = "Žádosti o vstup";
"screen_room_details_roles_and_permissions" = "Role a oprávnění"; "screen_room_details_roles_and_permissions" = "Role a oprávnění";
"screen_room_details_room_audio_ptt" = "Push to talk";
"screen_room_details_room_audio_title" = "Room Audio";
"screen_room_details_room_audio_video_calls" = "Video calls";
"screen_room_details_room_name_label" = "Název"; "screen_room_details_room_name_label" = "Název";
"screen_room_details_security_and_privacy_title" = "Zabezpečení a soukromí"; "screen_room_details_security_and_privacy_title" = "Zabezpečení a soukromí";
"screen_room_details_security_title" = "Zabezpečení"; "screen_room_details_security_title" = "Zabezpečení";
@@ -1376,7 +1301,6 @@
"screen_room_invite_again_alert_message" = "Chtěli byste je pozvat zpět?"; "screen_room_invite_again_alert_message" = "Chtěli byste je pozvat zpět?";
"screen_room_invite_again_alert_title" = "V tomto chatu jste sami"; "screen_room_invite_again_alert_title" = "V tomto chatu jste sami";
"screen_room_live_location_banner" = "Sdílení aktuální polohy"; "screen_room_live_location_banner" = "Sdílení aktuální polohy";
"screen_room_maximum_messages_selected" = "Maximum messages selected";
"screen_room_member_details_block_alert_action" = "Zablokovat"; "screen_room_member_details_block_alert_action" = "Zablokovat";
"screen_room_member_details_block_alert_description" = "Blokovaní uživatelé vám nebudou moci posílat zprávy a všechny jejich zprávy budou skryty. Můžete je kdykoli odblokovat."; "screen_room_member_details_block_alert_description" = "Blokovaní uživatelé vám nebudou moci posílat zprávy a všechny jejich zprávy budou skryty. Můžete je kdykoli odblokovat.";
"screen_room_member_details_block_user" = "Zablokovat uživatele"; "screen_room_member_details_block_user" = "Zablokovat uživatele";
@@ -1415,10 +1339,9 @@
"screen_room_notification_settings_error_loading_settings" = "Při načítání nastavení oznámení došlo k chybě."; "screen_room_notification_settings_error_loading_settings" = "Při načítání nastavení oznámení došlo k chybě.";
"screen_room_notification_settings_error_restoring_default" = "Obnovení výchozího režimu se nezdařilo, zkuste to prosím znovu."; "screen_room_notification_settings_error_restoring_default" = "Obnovení výchozího režimu se nezdařilo, zkuste to prosím znovu.";
"screen_room_notification_settings_error_setting_mode" = "Nastavení režimu se nezdařilo, zkuste to prosím znovu."; "screen_room_notification_settings_error_setting_mode" = "Nastavení režimu se nezdařilo, zkuste to prosím znovu.";
"screen_room_notification_settings_mentions_only_disclaimer" = "Váš poskytovatel účtu tuto možnost v encrypted chatech nepodporuje, v tomto chatu tedy nebudete dostávat oznámení."; "screen_room_notification_settings_mentions_only_disclaimer" = "Váš domovský server tuto možnost nepodporuje v šifrovaných místnostech, v této místnosti nebudete dostávat upozornění.";
"screen_room_notification_settings_mode_all_messages" = "Všechny zprávy"; "screen_room_notification_settings_mode_all_messages" = "Všechny zprávy";
"screen_room_notification_settings_mode_mentions_and_keywords" = "Pouze zmínky a odpovědi"; "screen_room_notification_settings_mode_mentions_and_keywords" = "Pouze zmínky a klíčová slova";
"screen_room_notification_settings_mode_mute" = "Mute";
"screen_room_notification_settings_room_custom_settings_title" = "V této místnosti mě upozornit na"; "screen_room_notification_settings_room_custom_settings_title" = "V této místnosti mě upozornit na";
"screen_room_pinned_banner_indicator" = "%1$@ z %2$@"; "screen_room_pinned_banner_indicator" = "%1$@ z %2$@";
"screen_room_pinned_banner_indicator_description" = "%1$@ Připnuté zprávy"; "screen_room_pinned_banner_indicator_description" = "%1$@ Připnuté zprávy";
@@ -1443,7 +1366,6 @@
"screen_room_roles_and_permissions_room_details" = "Podrobnosti místnosti"; "screen_room_roles_and_permissions_room_details" = "Podrobnosti místnosti";
"screen_room_roles_and_permissions_space_details" = "Detaily prostoru"; "screen_room_roles_and_permissions_space_details" = "Detaily prostoru";
"screen_room_roles_and_permissions_title" = "Role a oprávnění"; "screen_room_roles_and_permissions_title" = "Role a oprávnění";
"screen_room_select_error_cannot_load_rooms" = "The room list associated with this account cannot be loaded.";
"screen_room_single_knock_request_accept_button_title" = "Přijmout"; "screen_room_single_knock_request_accept_button_title" = "Přijmout";
"screen_room_single_knock_request_title" = "%1$@ chce vstoupit do této místnosti"; "screen_room_single_knock_request_title" = "%1$@ chce vstoupit do této místnosti";
"screen_room_single_knock_request_view_button_title" = "Zobrazit"; "screen_room_single_knock_request_view_button_title" = "Zobrazit";
@@ -1480,8 +1402,6 @@
"screen_roomlist_filter_invites_empty_state_title" = "Nemáte žádné nevyřízené pozvánky."; "screen_roomlist_filter_invites_empty_state_title" = "Nemáte žádné nevyřízené pozvánky.";
"screen_roomlist_filter_low_priority" = "Nízká priorita"; "screen_roomlist_filter_low_priority" = "Nízká priorita";
"screen_roomlist_filter_low_priority_empty_state_title" = "Zatím nemáte žádné chaty s nízkou prioritou"; "screen_roomlist_filter_low_priority_empty_state_title" = "Zatím nemáte žádné chaty s nízkou prioritou";
"screen_roomlist_filter_mention" = "Mention";
"screen_roomlist_filter_mention_empty_state_title" = "You don’t have any unread mentions";
"screen_roomlist_filter_mixed_empty_state_subtitle" = "Můžete zrušit výběr filtrů, abyste viděli své další chaty"; "screen_roomlist_filter_mixed_empty_state_subtitle" = "Můžete zrušit výběr filtrů, abyste viděli své další chaty";
"screen_roomlist_filter_mixed_empty_state_title" = "Nemáte chaty pro tento výběr"; "screen_roomlist_filter_mixed_empty_state_title" = "Nemáte chaty pro tento výběr";
"screen_roomlist_filter_people" = "Lidé"; "screen_roomlist_filter_people" = "Lidé";
@@ -1491,7 +1411,7 @@
"screen_roomlist_filter_unreads" = "Nepřečtené"; "screen_roomlist_filter_unreads" = "Nepřečtené";
"screen_roomlist_filter_unreads_empty_state_title" = "Gratulujeme!\nNemáte žádné nepřečtené zprávy!"; "screen_roomlist_filter_unreads_empty_state_title" = "Gratulujeme!\nNemáte žádné nepřečtené zprávy!";
"screen_roomlist_knock_event_sent_description" = "Žádost o vstup odeslána"; "screen_roomlist_knock_event_sent_description" = "Žádost o vstup odeslána";
"screen_roomlist_main_space_title" = "Chaty"; "screen_roomlist_main_space_title" = "Všechny chaty";
"screen_roomlist_mark_as_read" = "Označit jako přečtené"; "screen_roomlist_mark_as_read" = "Označit jako přečtené";
"screen_roomlist_mark_as_unread" = "Označit jako nepřečtené"; "screen_roomlist_mark_as_unread" = "Označit jako nepřečtené";
"screen_roomlist_tombstoned_room_description" = "Tato místnost byla aktualizována"; "screen_roomlist_tombstoned_room_description" = "Tato místnost byla aktualizována";
@@ -1507,7 +1427,7 @@
"screen_security_and_privacy_encryption_section_footer" = "Jakmile je povoleno, šifrování nelze zakázat."; "screen_security_and_privacy_encryption_section_footer" = "Jakmile je povoleno, šifrování nelze zakázat.";
"screen_security_and_privacy_encryption_section_header" = "Šifrování"; "screen_security_and_privacy_encryption_section_header" = "Šifrování";
"screen_security_and_privacy_encryption_toggle_title" = "Povolit koncové šifrování"; "screen_security_and_privacy_encryption_toggle_title" = "Povolit koncové šifrování";
"screen_security_and_privacy_room_access_anyone_option_description" = "Připojit se může kdokoli, včetně osob mimo vaši organizaci."; "screen_security_and_privacy_room_access_anyone_option_description" = "Vstoupit může kdokoli.";
"screen_security_and_privacy_room_access_anyone_option_title" = "Kdokoli"; "screen_security_and_privacy_room_access_anyone_option_title" = "Kdokoli";
"screen_security_and_privacy_room_access_footer" = "Vyberte, kteří členové prostorů mohou vstoupit do této místnosti bez pozvánky. %1$@"; "screen_security_and_privacy_room_access_footer" = "Vyberte, kteří členové prostorů mohou vstoupit do této místnosti bez pozvánky. %1$@";
"screen_security_and_privacy_room_access_footer_manage_spaces_action" = "Spravovat prostory"; "screen_security_and_privacy_room_access_footer_manage_spaces_action" = "Spravovat prostory";
@@ -1568,13 +1488,10 @@
"screen_session_verification_request_title" = "Požadováno ověření"; "screen_session_verification_request_title" = "Požadováno ověření";
"screen_session_verification_they_dont_match" = "Neshodují se"; "screen_session_verification_they_dont_match" = "Neshodují se";
"screen_session_verification_they_match" = "Shodují se"; "screen_session_verification_they_match" = "Shodují se";
"screen_session_verification_unavailable_subtitle" = "Please use another device or recovery key.";
"screen_session_verification_unavailable_title" = "Verification with this device is currently unavailable";
"screen_session_verification_use_another_device_subtitle" = "Před zahájením ověřování se ujistěte, že máte aplikaci otevřenou na druhém zařízení."; "screen_session_verification_use_another_device_subtitle" = "Před zahájením ověřování se ujistěte, že máte aplikaci otevřenou na druhém zařízení.";
"screen_session_verification_use_another_device_title" = "Otevřete aplikaci na jiném ověřeném zařízení"; "screen_session_verification_use_another_device_title" = "Otevřete aplikaci na jiném ověřeném zařízení";
"screen_session_verification_user_initiator_subtitle" = "Pro větší bezpečnost ověřte tohoto uživatele porovnáním sady emotikonů na svých zařízeních. Proveďte to pomocí důvěryhodného způsobu komunikace."; "screen_session_verification_user_initiator_subtitle" = "Pro větší bezpečnost ověřte tohoto uživatele porovnáním sady emotikonů na svých zařízeních. Proveďte to pomocí důvěryhodného způsobu komunikace.";
"screen_session_verification_user_initiator_title" = "Ověřte tohoto uživatele?"; "screen_session_verification_user_initiator_title" = "Ověřte tohoto uživatele?";
"screen_session_verification_user_requesting_verification" = "User requesting verification:";
"screen_session_verification_user_responder_subtitle" = "Z důvodu zvýšené bezpečnosti chce jiný uživatel ověřit vaši digitální identitu. Zobrazí se vám sada emodži, které je třeba porovnat."; "screen_session_verification_user_responder_subtitle" = "Z důvodu zvýšené bezpečnosti chce jiný uživatel ověřit vaši digitální identitu. Zobrazí se vám sada emodži, které je třeba porovnat.";
"screen_session_verification_waiting_another_device_subtitle" = "Na druhém zařízení byste měli vidět vyskakovací okno. Začněte s ověrením tam."; "screen_session_verification_waiting_another_device_subtitle" = "Na druhém zařízení byste měli vidět vyskakovací okno. Začněte s ověrením tam.";
"screen_session_verification_waiting_another_device_title" = "Spusťte ověření na druhém zařízení"; "screen_session_verification_waiting_another_device_title" = "Spusťte ověření na druhém zařízení";
@@ -1583,15 +1500,6 @@
"screen_session_verification_waiting_subtitle" = "Po přijetí budete moci pokračovat v ověřování."; "screen_session_verification_waiting_subtitle" = "Po přijetí budete moci pokračovat v ověřování.";
"screen_session_verification_waiting_to_accept_subtitle" = "Pro pokračování přijměte požadavek na zahájení ověření v jiné relaci."; "screen_session_verification_waiting_to_accept_subtitle" = "Pro pokračování přijměte požadavek na zahájení ověření v jiné relaci.";
"screen_session_verification_waiting_to_accept_title" = "Čekání na přijetí žádosti"; "screen_session_verification_waiting_to_accept_title" = "Čekání na přijetí žádosti";
"screen_settings_add_account" = "Add account";
"screen_settings_user_status_away" = "Away";
"screen_settings_user_status_be_right_back" = "Be right back";
"screen_settings_user_status_custom" = "Custom…";
"screen_settings_user_status_custom_hint" = "Custom status…";
"screen_settings_user_status_focus_time" = "Focus time";
"screen_settings_user_status_in_a_meeting" = "In a meeting";
"screen_settings_user_status_on_the_road" = "On the road";
"screen_settings_user_status_placeholder" = "What's your status?";
"screen_share_location_live_location_disclaimer_title" = "Vaše historie aktuální polohy bude uložena v místnosti a bude viditelná pro členy i po skončení relace."; "screen_share_location_live_location_disclaimer_title" = "Vaše historie aktuální polohy bude uložena v místnosti a bude viditelná pro členy i po skončení relace.";
"screen_share_location_live_location_duration_picker_title" = "Zvolte, jak dlouho chcete sdílet svou aktuální polohu."; "screen_share_location_live_location_duration_picker_title" = "Zvolte, jak dlouho chcete sdílet svou aktuální polohu.";
"screen_share_location_live_location_missing_permissions" = "Nemáte oprávnění sdílet svou aktuální polohu v této místnosti."; "screen_share_location_live_location_missing_permissions" = "Nemáte oprávnění sdílet svou aktuální polohu v této místnosti.";
@@ -1606,7 +1514,6 @@
"screen_signed_out_reason_2" = "Odstranili jste relaci z jiné relace"; "screen_signed_out_reason_2" = "Odstranili jste relaci z jiné relace";
"screen_signed_out_reason_3" = "Správce vašeho serveru zrušil váš přístup"; "screen_signed_out_reason_3" = "Správce vašeho serveru zrušil váš přístup";
"screen_signed_out_subtitle" = "Je možné, že jste byli odhlášeni z některého z níže uvedených důvodů. Chcete-li pokračovat v používání %@, přihlaste se znovu."; "screen_signed_out_subtitle" = "Je možné, že jste byli odhlášeni z některého z níže uvedených důvodů. Chcete-li pokračovat v používání %@, přihlaste se znovu.";
"screen_signed_out_subtitle_v2" = "This device was removed for one of the reasons listed below. Please sign in again to connect this device to your account.";
"screen_signed_out_title" = "Jste odhlášeni"; "screen_signed_out_title" = "Jste odhlášeni";
"screen_signout_confirmation_dialog_content" = "Opravdu chcete odstranit toto zařízení?"; "screen_signout_confirmation_dialog_content" = "Opravdu chcete odstranit toto zařízení?";
"screen_signout_confirmation_dialog_submit" = "Odebrat toto zařízení"; "screen_signout_confirmation_dialog_submit" = "Odebrat toto zařízení";
@@ -1640,7 +1547,7 @@
"screen_start_chat_error_starting_chat" = "Při pokusu o zahájení chatu došlo k chybě"; "screen_start_chat_error_starting_chat" = "Při pokusu o zahájení chatu došlo k chybě";
"screen_start_chat_join_room_by_address_action" = "Vstoupit do místnosti pomocí adresy"; "screen_start_chat_join_room_by_address_action" = "Vstoupit do místnosti pomocí adresy";
"screen_start_chat_join_room_by_address_invalid_address" = "Neplatná adresa"; "screen_start_chat_join_room_by_address_invalid_address" = "Neplatná adresa";
"screen_start_chat_join_room_by_address_placeholder" = "Zadejte adresu…"; "screen_start_chat_join_room_by_address_placeholder" = "Zadejte...";
"screen_start_chat_join_room_by_address_room_found" = "Odpovídající místnost nalezena"; "screen_start_chat_join_room_by_address_room_found" = "Odpovídající místnost nalezena";
"screen_start_chat_join_room_by_address_room_not_found" = "Místnost nebyla nalezena"; "screen_start_chat_join_room_by_address_room_not_found" = "Místnost nebyla nalezena";
"screen_start_chat_join_room_by_address_supporting_text" = "např. #room-name:matrix.org"; "screen_start_chat_join_room_by_address_supporting_text" = "např. #room-name:matrix.org";
@@ -1769,7 +1676,7 @@
"troubleshoot_notifications_test_display_notification_permission_failure" = "Oznámení nelze zobrazit."; "troubleshoot_notifications_test_display_notification_permission_failure" = "Oznámení nelze zobrazit.";
"troubleshoot_notifications_test_display_notification_success" = "Na oznámení bylo kliknuto!"; "troubleshoot_notifications_test_display_notification_success" = "Na oznámení bylo kliknuto!";
"troubleshoot_notifications_test_display_notification_title" = "Zobrazit oznámení"; "troubleshoot_notifications_test_display_notification_title" = "Zobrazit oznámení";
"troubleshoot_notifications_test_display_notification_waiting" = "Klepnutím na oznámení pokračujte v testu."; "troubleshoot_notifications_test_display_notification_waiting" = "Kliknutím na oznámení pokračujte v testu.";
"troubleshoot_notifications_test_firebase_availability_description" = "Ujistěte se, že je k dispozici Firebase."; "troubleshoot_notifications_test_firebase_availability_description" = "Ujistěte se, že je k dispozici Firebase.";
"troubleshoot_notifications_test_firebase_availability_failure" = "Firebase není k dispozici."; "troubleshoot_notifications_test_firebase_availability_failure" = "Firebase není k dispozici.";
"troubleshoot_notifications_test_firebase_availability_success" = "Firebase je k dispozici."; "troubleshoot_notifications_test_firebase_availability_success" = "Firebase je k dispozici.";
@@ -1783,11 +1690,10 @@
"troubleshoot_notifications_test_push_loop_back_failure_2" = "Chyba: %1$@."; "troubleshoot_notifications_test_push_loop_back_failure_2" = "Chyba: %1$@.";
"troubleshoot_notifications_test_push_loop_back_failure_3" = "Chyba, nelze otestovat push."; "troubleshoot_notifications_test_push_loop_back_failure_3" = "Chyba, nelze otestovat push.";
"troubleshoot_notifications_test_push_loop_back_failure_4" = "Chyba, časový limit čekání na push."; "troubleshoot_notifications_test_push_loop_back_failure_4" = "Chyba, časový limit čekání na push.";
"troubleshoot_notifications_test_push_loop_back_failure_rate_limit" = "Error: the push gateway is rate limiting this device, so notifications won't be reliable. Please set up a different push gateway.";
"troubleshoot_notifications_test_push_loop_back_success" = "Push zpětná smyčka trvala %1$d ms."; "troubleshoot_notifications_test_push_loop_back_success" = "Push zpětná smyčka trvala %1$d ms.";
"troubleshoot_notifications_test_push_loop_back_title" = "Otestovat push pomocí zpětného volání"; "troubleshoot_notifications_test_push_loop_back_title" = "Otestovat push pomocí zpětného volání";
"troubleshoot_notifications_test_unified_push_description" = "Ujistěte se, že jsou k dispozici distributoři UnifiedPush."; "troubleshoot_notifications_test_unified_push_description" = "Ujistěte se, že jsou k dispozici distributoři UnifiedPush.";
"troubleshoot_notifications_test_unified_push_failure" = "Nebyli nalezeni žádní push distributoři."; "troubleshoot_notifications_test_unified_push_failure" = "Nebyli nalezeni žádní push distributoři.";
"troubleshoot_notifications_test_unified_push_title" = "Zkontrolovat UnifiedPush"; "troubleshoot_notifications_test_unified_push_title" = "Zkontrolovat UnifiedPush";
"vulkan_not_supported_dialog_content_android" = "Vaše zařízení je příliš staré, je vyžadováno zařízení s Androidem 8 nebo novějším."; "vulkan_not_supported_dialog_content_android" = "Your device is too old, a device with Android 8 or newer is required.";
"vulkan_not_supported_dialog_title_android" = "Vykreslování map není podporováno"; "vulkan_not_supported_dialog_title_android" = "Rendering maps is not supported";
@@ -20,22 +20,6 @@
<key>NSStringLocalizedFormatKey</key> <key>NSStringLocalizedFormatKey</key>
<string>%#@COUNT@</string> <string>%#@COUNT@</string>
</dict> </dict>
<key>a11y_gallery_more_media</key>
<dict>
<key>COUNT</key>
<dict>
<key>NSStringFormatSpecTypeKey</key>
<string>NSStringPluralRuleType</string>
<key>NSStringFormatValueTypeKey</key>
<string>d</string>
<key>one</key>
<string>Gallery, %1$d more media</string>
<key>other</key>
<string>Gallery, %1$d more medias</string>
</dict>
<key>NSStringLocalizedFormatKey</key>
<string>%#@COUNT@</string>
</dict>
<key>a11y_polls_percent_of_total</key> <key>a11y_polls_percent_of_total</key>
<dict> <dict>
<key>COUNT</key> <key>COUNT</key>
@@ -63,59 +47,11 @@
<key>NSStringFormatValueTypeKey</key> <key>NSStringFormatValueTypeKey</key>
<string>d</string> <string>d</string>
<key>few</key> <key>few</key>
<string></string> <string>Přečetl(a) %1$@ a %2$d další</string>
<key>one</key> <key>one</key>
<string>Předchozí zprávu přečetl(a) %1$@ a %2$d další</string> <string>Přečetl(a) %1$@ a %2$d další</string>
<key>other</key> <key>other</key>
<string>Předchozí zprávu přečetl(a) %1$@ a %2$d další</string> <string>Přečetl(a) %1$@ a %2$d dalších</string>
</dict>
<key>NSStringLocalizedFormatKey</key>
<string>%#@COUNT@</string>
</dict>
<key>action_forward_messages</key>
<dict>
<key>COUNT</key>
<dict>
<key>NSStringFormatSpecTypeKey</key>
<string>NSStringPluralRuleType</string>
<key>NSStringFormatValueTypeKey</key>
<string>d</string>
<key>one</key>
<string>Forward %1$d message</string>
<key>other</key>
<string>Forward %1$d messages</string>
</dict>
<key>NSStringLocalizedFormatKey</key>
<string>%#@COUNT@</string>
</dict>
<key>common_gallery_reply_attachments</key>
<dict>
<key>COUNT</key>
<dict>
<key>NSStringFormatSpecTypeKey</key>
<string>NSStringPluralRuleType</string>
<key>NSStringFormatValueTypeKey</key>
<string>d</string>
<key>one</key>
<string>%1$d attachment…</string>
<key>other</key>
<string>%1$d attachments…</string>
</dict>
<key>NSStringLocalizedFormatKey</key>
<string>%#@COUNT@</string>
</dict>
<key>common_gallery_reply_media_items</key>
<dict>
<key>COUNT</key>
<dict>
<key>NSStringFormatSpecTypeKey</key>
<string>NSStringPluralRuleType</string>
<key>NSStringFormatValueTypeKey</key>
<string>d</string>
<key>one</key>
<string>%1$d media item…</string>
<key>other</key>
<string>%1$d media items…</string>
</dict> </dict>
<key>NSStringLocalizedFormatKey</key> <key>NSStringLocalizedFormatKey</key>
<string>%#@COUNT@</string> <string>%#@COUNT@</string>
@@ -296,22 +232,6 @@
<key>NSStringLocalizedFormatKey</key> <key>NSStringLocalizedFormatKey</key>
<string>%#@COUNT@</string> <string>%#@COUNT@</string>
</dict> </dict>
<key>notification_gallery_body</key>
<dict>
<key>COUNT</key>
<dict>
<key>NSStringFormatSpecTypeKey</key>
<string>NSStringPluralRuleType</string>
<key>NSStringFormatValueTypeKey</key>
<string>d</string>
<key>one</key>
<string>Shared %1$d attachment</string>
<key>other</key>
<string>Shared %1$d attachments</string>
</dict>
<key>NSStringLocalizedFormatKey</key>
<string>%#@COUNT@</string>
</dict>
<key>notification_invitations</key> <key>notification_invitations</key>
<dict> <dict>
<key>COUNT</key> <key>COUNT</key>
@@ -384,22 +304,6 @@
<key>NSStringLocalizedFormatKey</key> <key>NSStringLocalizedFormatKey</key>
<string>%#@COUNT@</string> <string>%#@COUNT@</string>
</dict> </dict>
<key>screen.room.timeline_redacted_messages</key>
<dict>
<key>COUNT</key>
<dict>
<key>NSStringFormatSpecTypeKey</key>
<string>NSStringPluralRuleType</string>
<key>NSStringFormatValueTypeKey</key>
<string>d</string>
<key>one</key>
<string>%1$d removed message</string>
<key>other</key>
<string>%1$d removed messages</string>
</dict>
<key>NSStringLocalizedFormatKey</key>
<string>%#@COUNT@</string>
</dict>
<key>screen_advanced_settings_live_location_update_distance</key> <key>screen_advanced_settings_live_location_update_distance</key>
<dict> <dict>
<key>COUNT</key> <key>COUNT</key>
@@ -478,12 +382,10 @@
<string>NSStringPluralRuleType</string> <string>NSStringPluralRuleType</string>
<key>NSStringFormatValueTypeKey</key> <key>NSStringFormatValueTypeKey</key>
<string>d</string> <string>d</string>
<key>few</key>
<string>%1$d stupně</string>
<key>one</key> <key>one</key>
<string>%1$d stupeň</string> <string>%1$d degree</string>
<key>other</key> <key>other</key>
<string>%1$d stupňů</string> <string>%1$d degrees</string>
</dict> </dict>
<key>NSStringLocalizedFormatKey</key> <key>NSStringLocalizedFormatKey</key>
<string>%#@COUNT@</string> <string>%#@COUNT@</string>
@@ -596,22 +498,6 @@
<key>NSStringLocalizedFormatKey</key> <key>NSStringLocalizedFormatKey</key>
<string>%#@COUNT@</string> <string>%#@COUNT@</string>
</dict> </dict>
<key>screen_room_messages_forwarded</key>
<dict>
<key>COUNT</key>
<dict>
<key>NSStringFormatSpecTypeKey</key>
<string>NSStringPluralRuleType</string>
<key>NSStringFormatValueTypeKey</key>
<string>d</string>
<key>one</key>
<string>%1$d message forwarded</string>
<key>other</key>
<string>%1$d messages forwarded</string>
</dict>
<key>NSStringLocalizedFormatKey</key>
<string>%#@COUNT@</string>
</dict>
<key>screen_room_multiple_knock_requests_title</key> <key>screen_room_multiple_knock_requests_title</key>
<dict> <dict>
<key>COUNT</key> <key>COUNT</key>
@@ -630,22 +516,6 @@
<key>NSStringLocalizedFormatKey</key> <key>NSStringLocalizedFormatKey</key>
<string>%#@COUNT@</string> <string>%#@COUNT@</string>
</dict> </dict>
<key>screen_room_selection_count</key>
<dict>
<key>COUNT</key>
<dict>
<key>NSStringFormatSpecTypeKey</key>
<string>NSStringPluralRuleType</string>
<key>NSStringFormatValueTypeKey</key>
<string>d</string>
<key>one</key>
<string>%1$d message selected</string>
<key>other</key>
<string>%1$d messages selected</string>
</dict>
<key>NSStringLocalizedFormatKey</key>
<string>%#@COUNT@</string>
</dict>
<key>screen_room_timeline_reaction_a11y</key> <key>screen_room_timeline_reaction_a11y</key>
<dict> <dict>
<key>COUNT</key> <key>COUNT</key>
@@ -754,7 +624,7 @@
<key>NSStringLocalizedFormatKey</key> <key>NSStringLocalizedFormatKey</key>
<string>%#@COUNT@</string> <string>%#@COUNT@</string>
</dict> </dict>
<key>screen_timeline_active_call_joined_count</key> <key>screen_timeline_active_call_extra_joined_count</key>
<dict> <dict>
<key>COUNT</key> <key>COUNT</key>
<dict> <dict>
@@ -763,9 +633,9 @@
<key>NSStringFormatValueTypeKey</key> <key>NSStringFormatValueTypeKey</key>
<string>d</string> <string>d</string>
<key>one</key> <key>one</key>
<string>%1$d joined</string> <string>+ %1$d joined</string>
<key>other</key> <key>other</key>
<string>%1$d joined</string> <string>+ %1$d joined</string>
</dict> </dict>
<key>NSStringLocalizedFormatKey</key> <key>NSStringLocalizedFormatKey</key>
<string>%#@COUNT@</string> <string>%#@COUNT@</string>
@@ -1,6 +1,6 @@
"NSCameraUsageDescription" = "Er mwyn tynnu lluniau neu fideos a'u hanfon fel neges mae Elfen X angen mynediad i'r camera."; "NSCameraUsageDescription" = "Er mwyn tynnu lluniau neu fideos a'u hanfon fel neges mae Elfen X angen mynediad i'r camera.";
"NSFaceIDUsageDescription" = "Mae Face ID yn cael ei ddefnyddio i gael mynediad i'ch ap."; "NSFaceIDUsageDescription" = "Mae Face ID yn cael ei ddefnyddio i gael mynediad i'ch ap.";
"NSLocationAlwaysAndWhenInUseUsageDescription" = "To share your location live in chats, location access is needed when the app is in the background."; "NSLocationAlwaysAndWhenInUseUsageDescription" = "To share your live location, Element X needs location access when the app is in the background.";
"NSLocationWhenInUseUsageDescription" = "Caniatewch fynediad lleoliad fel y gall Elfen X rannu eich lleoliad."; "NSLocationWhenInUseUsageDescription" = "Caniatewch fynediad lleoliad fel y gall Elfen X rannu eich lleoliad.";
"NSMicrophoneUsageDescription" = "I recordio ac anfon negeseuon gyda sain, mae angen i Elfen X gael mynediad i'r meicroffon."; "NSMicrophoneUsageDescription" = "I recordio ac anfon negeseuon gyda sain, mae angen i Elfen X gael mynediad i'r meicroffon.";
"NSPhotoLibraryUsageDescription" = "Mae hyn yn caniatáu ichi gadw delweddau a fideos i'ch llyfrgell ffotograffau."; "NSPhotoLibraryUsageDescription" = "Mae hyn yn caniatáu ichi gadw delweddau a fideos i'ch llyfrgell ffotograffau.";
@@ -6,23 +6,16 @@
"a11y_collapse_message_text_field" = "Lleihau maes testun neges"; "a11y_collapse_message_text_field" = "Lleihau maes testun neges";
"a11y_create_poll_votes_allowed_decrease" = "Decrease votes allowed per person"; "a11y_create_poll_votes_allowed_decrease" = "Decrease votes allowed per person";
"a11y_create_poll_votes_allowed_increase" = "Increase votes allowed per person"; "a11y_create_poll_votes_allowed_increase" = "Increase votes allowed per person";
"a11y_custom_emoji" = "Custom emoji";
"a11y_delete" = "Dileu"; "a11y_delete" = "Dileu";
"a11y_duration" = "Duration: %1$@"; "a11y_duration" = "Duration: %1$@";
"a11y_edit_avatar" = "Golygu afatar"; "a11y_edit_avatar" = "Golygu afatar";
"a11y_edit_room_address_hint" = "Bydd y cyfeiriad llawn yn%1$@"; "a11y_edit_room_address_hint" = "Bydd y cyfeiriad llawn yn%1$@";
"a11y_expand_message_text_field" = "Ehangu maes testun neges"; "a11y_expand_message_text_field" = "Ehangu maes testun neges";
"a11y_gallery_attachment" = "Gallery, attachment %1$d";
"a11y_gallery_failed_scan" = "Gallery, failed scan %1$d";
"a11y_gallery_image" = "Gallery, image %1$d";
"a11y_gallery_scanning" = "Gallery, scanning %1$d";
"a11y_gallery_video" = "Gallery, video %1$d";
"a11y_hide_password" = "Cuddio cyfrinair"; "a11y_hide_password" = "Cuddio cyfrinair";
"a11y_info" = "Info"; "a11y_info" = "Info";
"a11y_join_call" = "Ymuno â galwad"; "a11y_join_call" = "Ymuno â galwad";
"a11y_jump_to_bottom" = "Symud i'r gwaelod"; "a11y_jump_to_bottom" = "Symud i'r gwaelod";
"a11y_jump_to_unread" = "Jump to unread"; "a11y_jump_to_unread" = "Jump to unread";
"a11y_jump_to_unread_messages" = "Jump to first unread message";
"a11y_notifications_mentions_only" = "Crybwylliadau'n unig"; "a11y_notifications_mentions_only" = "Crybwylliadau'n unig";
"a11y_notifications_muted" = "Wedi'i Dewi"; "a11y_notifications_muted" = "Wedi'i Dewi";
"a11y_notifications_new_mentions" = "Crybwylliadau newydd"; "a11y_notifications_new_mentions" = "Crybwylliadau newydd";
@@ -57,7 +50,6 @@
"a11y_start_call" = "Cychwyn galwad"; "a11y_start_call" = "Cychwyn galwad";
"a11y_start_video_call" = "Start a video call"; "a11y_start_video_call" = "Start a video call";
"a11y_start_voice_call" = "Start a voice call"; "a11y_start_voice_call" = "Start a voice call";
"a11y_status" = "Status";
"a11y_tombstoned_room" = "Ystafell Tombstoned"; "a11y_tombstoned_room" = "Ystafell Tombstoned";
"a11y_user_menu" = "Dewislen defnyddiwr"; "a11y_user_menu" = "Dewislen defnyddiwr";
"a11y_video_preview" = "Video preview"; "a11y_video_preview" = "Video preview";
@@ -86,7 +78,6 @@
"action_choose_file" = "Choose file"; "action_choose_file" = "Choose file";
"action_choose_photo" = "Dewis llun"; "action_choose_photo" = "Dewis llun";
"action_clear" = "Clirio"; "action_clear" = "Clirio";
"action_clear_all" = "Clear all";
"action_close" = "Cau"; "action_close" = "Cau";
"action_complete_verification" = "Cwblhau'r gwirio"; "action_complete_verification" = "Cwblhau'r gwirio";
"action_confirm" = "Cadarnhau"; "action_confirm" = "Cadarnhau";
@@ -97,7 +88,6 @@
"action_copy_link" = "Copïo dolen"; "action_copy_link" = "Copïo dolen";
"action_copy_link_to_message" = "Copïo dolen i'r neges"; "action_copy_link_to_message" = "Copïo dolen i'r neges";
"action_copy_text" = "Copïo testun"; "action_copy_text" = "Copïo testun";
"action_copy_to_clipboard" = "Copy to clipboard";
"action_create" = "Creu"; "action_create" = "Creu";
"action_create_room" = "Creu ystafell"; "action_create_room" = "Creu ystafell";
"action_create_space" = "Create space"; "action_create_space" = "Create space";
@@ -145,7 +135,6 @@
"action_manage_account_and_devices" = "Manage account & devices"; "action_manage_account_and_devices" = "Manage account & devices";
"action_manage_devices" = "Rheoli dyfeisiau"; "action_manage_devices" = "Rheoli dyfeisiau";
"action_manage_rooms" = "Manage rooms"; "action_manage_rooms" = "Manage rooms";
"action_mark_as_read" = "Mark as read";
"action_message" = "Neges"; "action_message" = "Neges";
"action_minimize" = "Minimise"; "action_minimize" = "Minimise";
"action_next" = "Nesaf"; "action_next" = "Nesaf";
@@ -220,7 +209,6 @@
"call_invalid_audio_device_bluetooth_devices_disabled" = "Nid yw Element Call yn cefnogi defnyddio dyfeisiau sain Bluetooth yn y fersiwn Android hon. Dewiswch ddyfais sain wahanol."; "call_invalid_audio_device_bluetooth_devices_disabled" = "Nid yw Element Call yn cefnogi defnyddio dyfeisiau sain Bluetooth yn y fersiwn Android hon. Dewiswch ddyfais sain wahanol.";
"common_about" = "Ynghylch"; "common_about" = "Ynghylch";
"common_acceptable_use_policy" = "Polisi defnydd derbyniol"; "common_acceptable_use_policy" = "Polisi defnydd derbyniol";
"common_account_settings" = "Account settings";
"common_add_account" = "Ychwanegu cyfrif"; "common_add_account" = "Ychwanegu cyfrif";
"common_add_another_account" = "Ychwanegu cyfrif arall"; "common_add_another_account" = "Ychwanegu cyfrif arall";
"common_adding_caption" = "Ychwanegu capsiwn"; "common_adding_caption" = "Ychwanegu capsiwn";
@@ -229,7 +217,6 @@
"common_analytics" = "Dadansoddeg"; "common_analytics" = "Dadansoddeg";
"common_android_shortcuts_remove_reason_left_room" = "Rydych wedi gadael yr ystafell"; "common_android_shortcuts_remove_reason_left_room" = "Rydych wedi gadael yr ystafell";
"common_android_shortcuts_remove_reason_session_logged_out" = "Rydych wedi'ch allgofnodi o'r sesiwn"; "common_android_shortcuts_remove_reason_session_logged_out" = "Rydych wedi'ch allgofnodi o'r sesiwn";
"common_app_settings" = "App settings";
"common_appearance" = "Gwedd"; "common_appearance" = "Gwedd";
"common_audio" = "Sain"; "common_audio" = "Sain";
"common_beta" = "Beta"; "common_beta" = "Beta";
@@ -240,8 +227,6 @@
"common_call_started" = "Galwad wedi dechrau"; "common_call_started" = "Galwad wedi dechrau";
"common_call_you_declined" = "You declined a call"; "common_call_you_declined" = "You declined a call";
"common_chat_backup" = "Sgwrs wrth gefn"; "common_chat_backup" = "Sgwrs wrth gefn";
"common_chats" = "Chats";
"common_code_block" = "Code block";
"common_copied_to_clipboard" = "Wedi'i gopïo i'r clipfwrdd"; "common_copied_to_clipboard" = "Wedi'i gopïo i'r clipfwrdd";
"common_copyright" = "Hawlfraint"; "common_copyright" = "Hawlfraint";
"common_creating_room" = "Wrthi'n creu ystafell…"; "common_creating_room" = "Wrthi'n creu ystafell…";
@@ -279,12 +264,10 @@
"common_file_deleted" = "Ffeil wedi'i dileu"; "common_file_deleted" = "Ffeil wedi'i dileu";
"common_file_saved" = "Ffeil wedi'i chadw"; "common_file_saved" = "Ffeil wedi'i chadw";
"common_forward_message" = "Anfonwyd neges ymlaen"; "common_forward_message" = "Anfonwyd neges ymlaen";
"common_forward_to" = "Forward to";
"common_frequently_used" = "Defnydd cyffredin"; "common_frequently_used" = "Defnydd cyffredin";
"common_gallery" = "Gallery"; "common_gallery" = "Gallery";
"common_gif" = "GIF"; "common_gif" = "GIF";
"common_group_call_in_progress" = "Group call in progress"; "common_group_call_in_progress" = "Group call in progress";
"common_header_rooms" = "Rooms";
"common_image" = "Delwedd"; "common_image" = "Delwedd";
"common_in_reply_to" = "Mewn ymateb i %1$@"; "common_in_reply_to" = "Mewn ymateb i %1$@";
"common_invite_unknown_profile" = "Nid oes modd dod o hyd i'r ID Matrics hwn, felly mae'n bosibl na fydd y gwahoddiad yn cael ei dderbyn."; "common_invite_unknown_profile" = "Nid oes modd dod o hyd i'r ID Matrics hwn, felly mae'n bosibl na fydd y gwahoddiad yn cael ei dderbyn.";
@@ -297,25 +280,20 @@
"common_live_location_ended" = "Live location ended"; "common_live_location_ended" = "Live location ended";
"common_loading" = "Yn Llwytho…"; "common_loading" = "Yn Llwytho…";
"common_loading_more" = "Wrthi'n llwytho mwy…"; "common_loading_more" = "Wrthi'n llwytho mwy…";
"common_location_sharing" = "Location sharing";
"common_media_upload_quality" = "Media upload quality";
"common_message" = "Neges"; "common_message" = "Neges";
"common_message_actions" = "Gweithredoedd neges"; "common_message_actions" = "Gweithredoedd neges";
"common_message_failed_to_send" = "Message failed to send"; "common_message_failed_to_send" = "Message failed to send";
"common_message_layout" = "Cynllun y neges"; "common_message_layout" = "Cynllun y neges";
"common_message_removed" = "Neges wedi'i thynnu"; "common_message_removed" = "Neges wedi'i thynnu";
"common_moderation_and_safety" = "Moderation & safety";
"common_modern" = "Cyfoes"; "common_modern" = "Cyfoes";
"common_mute" = "Tewi"; "common_mute" = "Tewi";
"common_name" = "Name"; "common_name" = "Name";
"common_name_and_id" = "%1$@ (%2$@)"; "common_name_and_id" = "%1$@ (%2$@)";
"common_no_results" = "Dim canlyniadau"; "common_no_results" = "Dim canlyniadau";
"common_no_results_for" = "There are no results for “%1$@”. Try a new search term.";
"common_no_room_name" = "Dim enw i'r ystafell"; "common_no_room_name" = "Dim enw i'r ystafell";
"common_no_space_name" = "Dim enw gofod"; "common_no_space_name" = "Dim enw gofod";
"common_not_encrypted" = "Heb ei amgryptio"; "common_not_encrypted" = "Heb ei amgryptio";
"common_offline" = "All-lein"; "common_offline" = "All-lein";
"common_on_a_call" = "On a call";
"common_open_source_licenses" = "Trwyddedau cod agored"; "common_open_source_licenses" = "Trwyddedau cod agored";
"common_optic_id_ios" = "ID optig"; "common_optic_id_ios" = "ID optig";
"common_or" = "neu"; "common_or" = "neu";
@@ -349,7 +327,6 @@
"common_replying_to" = "Yn ymateb i %1$@"; "common_replying_to" = "Yn ymateb i %1$@";
"common_report_a_problem" = "Adrodd am broblem"; "common_report_a_problem" = "Adrodd am broblem";
"common_report_submitted" = "Adroddiad wedi ei gyflwyno"; "common_report_submitted" = "Adroddiad wedi ei gyflwyno";
"common_results_for" = "Results for “%1$@”";
"common_rich_text_editor" = "Golygydd testun cyfoethog"; "common_rich_text_editor" = "Golygydd testun cyfoethog";
"common_role" = "Role"; "common_role" = "Role";
"common_room" = "Ystafell"; "common_room" = "Ystafell";
@@ -377,7 +354,6 @@
"common_shared_live_location" = "Shared live location"; "common_shared_live_location" = "Shared live location";
"common_shared_location" = "Lleoliad yn cael ei rannu"; "common_shared_location" = "Lleoliad yn cael ei rannu";
"common_shared_space" = "Shared space"; "common_shared_space" = "Shared space";
"common_signed_in" = "Signed in";
"common_signing_out" = "Allgofnodi"; "common_signing_out" = "Allgofnodi";
"common_something_went_wrong" = "Aeth rhywbeth o'i le"; "common_something_went_wrong" = "Aeth rhywbeth o'i le";
"common_something_went_wrong_message" = "Wedi canfod mater. Ceisiwch eto."; "common_something_went_wrong_message" = "Wedi canfod mater. Ceisiwch eto.";
@@ -389,7 +365,6 @@
"common_success" = "Llwyddiant"; "common_success" = "Llwyddiant";
"common_suggested" = "Suggested"; "common_suggested" = "Suggested";
"common_suggestions" = "Awgrymiadau"; "common_suggestions" = "Awgrymiadau";
"common_switch_accounts" = "Switch accounts";
"common_syncing" = "Cydweddu"; "common_syncing" = "Cydweddu";
"common_text" = "Testun"; "common_text" = "Testun";
"common_third_party_notices" = "Hysbysiadau trydydd parti"; "common_third_party_notices" = "Hysbysiadau trydydd parti";
@@ -430,14 +405,12 @@
"common_waiting_live_location" = "Waiting for live location…"; "common_waiting_live_location" = "Waiting for live location…";
"common_world_readable_history" = "Anyone can see history"; "common_world_readable_history" = "Anyone can see history";
"common_you" = "Chi"; "common_you" = "Chi";
"common_your_account" = "Your account";
"confirm_recovery_key_banner_message" = "Cadarnhewch eich allwedd adfer i gynnal mynediad i'ch storfa allweddi a'ch hanes negeseuon."; "confirm_recovery_key_banner_message" = "Cadarnhewch eich allwedd adfer i gynnal mynediad i'ch storfa allweddi a'ch hanes negeseuon.";
"confirm_recovery_key_banner_primary_button_title" = "Rhowch eich allwedd adfer"; "confirm_recovery_key_banner_primary_button_title" = "Rhowch eich allwedd adfer";
"confirm_recovery_key_banner_secondary_button_title" = "Wedi anghofio'ch allwedd adfer?"; "confirm_recovery_key_banner_secondary_button_title" = "Wedi anghofio'ch allwedd adfer?";
"confirm_recovery_key_banner_title" = "Dyw eich allwedd storfa heb ei gydweddu"; "confirm_recovery_key_banner_title" = "Dyw eich allwedd storfa heb ei gydweddu";
"content_scanner_not_found" = "Download not available."; "content_scanner_not_found" = "Download not available.";
"content_scanner_not_found_title" = "Something went wrong"; "content_scanner_not_found_title" = "File not found";
"content_scanner_scanning" = "Scanning…";
"content_scanner_unsafe_message" = "Preview and download have been disabled."; "content_scanner_unsafe_message" = "Preview and download have been disabled.";
"content_scanner_unsafe_title" = "The file is not safe"; "content_scanner_unsafe_title" = "The file is not safe";
"crash_detection_dialog_content" = "Chwalodd %1$@ y tro diwethaf iddo gael ei ddefnyddio. Hoffech chi rannu adroddiad gwall gyda ni?"; "crash_detection_dialog_content" = "Chwalodd %1$@ y tro diwethaf iddo gael ei ddefnyddio. Hoffech chi rannu adroddiad gwall gyda ni?";
@@ -511,11 +484,6 @@
"error_no_compatible_app_found" = "Heb ganfod ap cydnaws i drin y weithred hon."; "error_no_compatible_app_found" = "Heb ganfod ap cydnaws i drin y weithred hon.";
"error_room_address_already_exists" = "Mae'r cyfeiriad ystafell hwn yn bodoli eisoes. Ceisiwch olygu'r maes cyfeiriad ystafell neu newid enw'r ystafell"; "error_room_address_already_exists" = "Mae'r cyfeiriad ystafell hwn yn bodoli eisoes. Ceisiwch olygu'r maes cyfeiriad ystafell neu newid enw'r ystafell";
"error_room_address_invalid_symbols" = "Dyw rhai nodau ddim yn cael eu caniatáu. Dim ond llythrennau, digidau a'r symbolau canlynol sy'n cael eu cefnogi ! $ & ‘ ( ) * + / ; = ? @ [ ] - . _"; "error_room_address_invalid_symbols" = "Dyw rhai nodau ddim yn cael eu caniatáu. Dim ond llythrennau, digidau a'r symbolau canlynol sy'n cael eu cefnogi ! $ & ‘ ( ) * + / ; = ? @ [ ] - . _";
"error_sending_failure_invalid_mime_type" = "Invalid mime type: %@";
"error_sending_failure_missing_media_content" = "Missing media content";
"error_sending_failure_other" = "Error details: %@";
"error_sending_failure_sending_from_unverified_device" = "Sending from unverified device";
"error_sending_failure_unknown" = "Unknown error";
"error_some_messages_have_not_been_sent" = "Nid yw rhai negeseuon wedi'u hanfon"; "error_some_messages_have_not_been_sent" = "Nid yw rhai negeseuon wedi'u hanfon";
"error_unknown" = "Ymddiheuriadau, mae gwall wedi digwydd"; "error_unknown" = "Ymddiheuriadau, mae gwall wedi digwydd";
"error.account_already_logged_in" = "Rydych chi eisoes wedi mewngofnodi ar y ddyfais hon fel %1$@ ."; "error.account_already_logged_in" = "Rydych chi eisoes wedi mewngofnodi ar y ddyfais hon fel %1$@ .";
@@ -545,8 +513,6 @@
"notification_invitation_action_reject" = "Gwrthod"; "notification_invitation_action_reject" = "Gwrthod";
"notification_invite_body" = "Wedi eich gwahodd i sgwrsio"; "notification_invite_body" = "Wedi eich gwahodd i sgwrsio";
"notification_invite_body_with_sender" = "Mae %1$@ wedi eich gwahodd i sgwrsio"; "notification_invite_body_with_sender" = "Mae %1$@ wedi eich gwahodd i sgwrsio";
"notification_knock_request_body" = "Requested to join";
"notification_live_location_started_body" = "Started sharing their live location";
"notification_mentioned_you_body" = "Wedi eich crybwyll: %1$@"; "notification_mentioned_you_body" = "Wedi eich crybwyll: %1$@";
"notification_new_messages" = "Negeseuon Newydd"; "notification_new_messages" = "Negeseuon Newydd";
"notification_reaction_body" = "Wedi ymateb gyda %1$@"; "notification_reaction_body" = "Wedi ymateb gyda %1$@";
@@ -737,16 +703,8 @@
"screen_change_server_error_unauthorized_homeserver_title" = "Dyw darparwr cyfrif %1$@ dddim yn cael ei ganiatáu."; "screen_change_server_error_unauthorized_homeserver_title" = "Dyw darparwr cyfrif %1$@ dddim yn cael ei ganiatáu.";
"screen_change_server_form_header" = "URL y Gweinydd Cartref"; "screen_change_server_form_header" = "URL y Gweinydd Cartref";
"screen_change_server_form_notice" = "Rhowch gyfeiriad parth."; "screen_change_server_form_notice" = "Rhowch gyfeiriad parth.";
"screen_change_server_navigation_title_login" = "Sign in";
"screen_change_server_navigation_title_register" = "Create account";
"screen_change_server_subtitle" = "Beth yw cyfeiriad eich gweinydd?"; "screen_change_server_subtitle" = "Beth yw cyfeiriad eich gweinydd?";
"screen_change_server_textfield_footer_login" = "If your account is provided by your company or a community, then change the account provider (example: companyname.com).";
"screen_change_server_textfield_footer_register" = "Create an account on matrix.org for free. If you want to create an account with a different provider, then change it accordingly (example: communityname.org).";
"screen_change_server_textfield_header" = "Account provider";
"screen_change_server_textfield_placeholder" = "example.com";
"screen_change_server_title" = "Dewiswch eich gweinydd"; "screen_change_server_title" = "Dewiswch eich gweinydd";
"screen_change_server_title_login" = "Enter your account provider";
"screen_change_server_title_register" = "Choose an account provider";
"screen_chat_backup_key_backup_action_disable" = "Dileu storfa allweddi"; "screen_chat_backup_key_backup_action_disable" = "Dileu storfa allweddi";
"screen_chat_backup_key_backup_action_enable" = "Trowch y copi wrth gefn ymlaen"; "screen_chat_backup_key_backup_action_enable" = "Trowch y copi wrth gefn ymlaen";
"screen_chat_backup_key_backup_description" = "Cadwch eich hunaniaeth cryptograffig a'ch allweddi neges yn ddiogel ar y gweinydd. Bydd hyn yn caniatáu ichi weld hanes eich neges ar unrhyw ddyfeisiau newydd. %1$@."; "screen_chat_backup_key_backup_description" = "Cadwch eich hunaniaeth cryptograffig a'ch allweddi neges yn ddiogel ar y gweinydd. Bydd hyn yn caniatáu ichi weld hanes eich neges ar unrhyw ddyfeisiau newydd. %1$@.";
@@ -793,7 +751,7 @@
"screen_create_room_private_option_description" = "Dim ond pobl wahoddwyd all gael mynediad i'r ystafell hon. Mae pob neges wedi'i hamgryptio o'r dechrau i'r diwedd."; "screen_create_room_private_option_description" = "Dim ond pobl wahoddwyd all gael mynediad i'r ystafell hon. Mae pob neges wedi'i hamgryptio o'r dechrau i'r diwedd.";
"screen_create_room_private_option_title" = "Private"; "screen_create_room_private_option_title" = "Private";
"screen_create_room_public_option_description" = "Gall unrhyw un ddod o hyd i'r ystafell hon.\nGallwch newid hyn unrhyw bryd yng ngosodiadau ystafell."; "screen_create_room_public_option_description" = "Gall unrhyw un ddod o hyd i'r ystafell hon.\nGallwch newid hyn unrhyw bryd yng ngosodiadau ystafell.";
"screen_create_room_public_option_short_description" = "Anyone can join, including people outside your organisation."; "screen_create_room_public_option_short_description" = "Anyone can join.";
"screen_create_room_public_option_title" = "Public"; "screen_create_room_public_option_title" = "Public";
"screen_create_room_room_access_section_knocking_option_description" = "Gall unrhyw un ofyn am gael ymuno â'r ystafell ond bydd rhaid i weinyddwr neu gymedrolwr dderbyn y cais"; "screen_create_room_room_access_section_knocking_option_description" = "Gall unrhyw un ofyn am gael ymuno â'r ystafell ond bydd rhaid i weinyddwr neu gymedrolwr dderbyn y cais";
"screen_create_room_room_access_section_knocking_option_title" = "Gofyn i gael ymuno"; "screen_create_room_room_access_section_knocking_option_title" = "Gofyn i gael ymuno";
@@ -966,10 +924,6 @@
"screen_knock_requests_list_empty_state_title" = "Dim cais i ymuno yn disgwyl"; "screen_knock_requests_list_empty_state_title" = "Dim cais i ymuno yn disgwyl";
"screen_knock_requests_list_initial_loading_title" = "Yn llwytho ceisiadau i ymuno…"; "screen_knock_requests_list_initial_loading_title" = "Yn llwytho ceisiadau i ymuno…";
"screen_knock_requests_list_title" = "Ceisiadau i ymuno"; "screen_knock_requests_list_title" = "Ceisiadau i ymuno";
"screen_labs_enable_gallery" = "Gallery messages";
"screen_labs_enable_gallery_description" = "Send multiple images or videos in one go. Stable on mobile, but not yet supported by web.";
"screen_labs_enable_knocking" = "Ask to join";
"screen_labs_enable_knocking_description" = "Users can request access to a room that is not open for anyone to join. Stable on mobile, web implementation exists but is experimental.";
"screen_labs_enable_threads" = "Enable thread replies"; "screen_labs_enable_threads" = "Enable thread replies";
"screen_labs_enable_threads_description" = "The app will restart to apply this change."; "screen_labs_enable_threads_description" = "The app will restart to apply this change.";
"screen_labs_header_description" = "Try out our latest ideas in development. These features are not finalised; they may be unstable, may change."; "screen_labs_header_description" = "Try out our latest ideas in development. These features are not finalised; they may be unstable, may change.";
@@ -978,11 +932,11 @@
"screen_leave_space_choose_owners_action" = "Dewiswch Berchnogion"; "screen_leave_space_choose_owners_action" = "Dewiswch Berchnogion";
"screen_leave_space_last_admin_info" = "%1$@ (Gweinyddwr)"; "screen_leave_space_last_admin_info" = "%1$@ (Gweinyddwr)";
"screen_leave_space_subtitle" = "Dewiswch yr ystafelloedd yr hoffech chi eu gadael nad chi yw'r unig weinyddwr ar eu cyfer:"; "screen_leave_space_subtitle" = "Dewiswch yr ystafelloedd yr hoffech chi eu gadael nad chi yw'r unig weinyddwr ar eu cyfer:";
"screen_leave_space_subtitle_last_admin" = "You need to assign another administrator for this space before you can leave."; "screen_leave_space_subtitle_last_admin" = "You need to assign another admin for this space before you can leave.";
"screen_leave_space_subtitle_last_owner" = "You are the only owner of %1$@. You need to transfer ownership to someone else before you leave."; "screen_leave_space_subtitle_last_owner" = "You are the only owner of %1$@. You need to transfer ownership to someone else before you leave.";
"screen_leave_space_subtitle_only_last_admin" = "You will not be removed from the following room(s) because you're the only administrator:"; "screen_leave_space_subtitle_only_last_admin" = "You will not be removed from the following room(s) because you're the only administrator:";
"screen_leave_space_title" = "Gadael %1$@ ?"; "screen_leave_space_title" = "Gadael %1$@ ?";
"screen_leave_space_title_last_admin" = "You are the only administrator for %1$@"; "screen_leave_space_title_last_admin" = "You are the only admin for %1$@";
"screen_leave_space_title_last_owner" = "Transfer ownership"; "screen_leave_space_title_last_owner" = "Transfer ownership";
"screen_link_new_device_authentication_reason_ios" = "Confirm it's you before linking a new device."; "screen_link_new_device_authentication_reason_ios" = "Confirm it's you before linking a new device.";
"screen_link_new_device_desktop_scanning_title" = "Sganiwch y cod QR"; "screen_link_new_device_desktop_scanning_title" = "Sganiwch y cod QR";
@@ -990,7 +944,6 @@
"screen_link_new_device_desktop_step3" = "Sganiwch y cod QR gyda'r ddyfais hon"; "screen_link_new_device_desktop_step3" = "Sganiwch y cod QR gyda'r ddyfais hon";
"screen_link_new_device_desktop_submit" = "Yn barod i sganio"; "screen_link_new_device_desktop_submit" = "Yn barod i sganio";
"screen_link_new_device_desktop_title" = "Open %1$@ on a desktop computer to get the QR code"; "screen_link_new_device_desktop_title" = "Open %1$@ on a desktop computer to get the QR code";
"screen_link_new_device_desktop_warning" = "Only scan a QR code after following the steps above on your own device. Never scan a code sent by another person.";
"screen_link_new_device_enter_number_error_numbers_do_not_match" = "The numbers don’t match"; "screen_link_new_device_enter_number_error_numbers_do_not_match" = "The numbers don’t match";
"screen_link_new_device_enter_number_notice" = "Enter 2-digit code"; "screen_link_new_device_enter_number_notice" = "Enter 2-digit code";
"screen_link_new_device_enter_number_subtitle" = "This will verify that the connection to your other device is secure."; "screen_link_new_device_enter_number_subtitle" = "This will verify that the connection to your other device is secure.";
@@ -1017,8 +970,6 @@
"screen_live_location_sheet_nobody_sharing" = "Nobody is sharing their location"; "screen_live_location_sheet_nobody_sharing" = "Nobody is sharing their location";
"screen_live_location_sheet_sharing_live_location" = "Sharing live location"; "screen_live_location_sheet_sharing_live_location" = "Sharing live location";
"screen_live_location_sheet_title" = "On the map"; "screen_live_location_sheet_title" = "On the map";
"screen_local_network_opt_in_subtitle" = "Your homeserver is on your local network. To connect, %1$@ needs permission to reach devices on this network.";
"screen_local_network_opt_in_title" = "Allow access to local network";
"screen_login_error_deactivated_account" = "Mae'r cyfrif hwn wedi'i gau."; "screen_login_error_deactivated_account" = "Mae'r cyfrif hwn wedi'i gau.";
"screen_login_error_invalid_credentials" = "Enw defnyddiwr a/neu gyfrinair anghywir"; "screen_login_error_invalid_credentials" = "Enw defnyddiwr a/neu gyfrinair anghywir";
"screen_login_error_invalid_user_id" = "Nid yw hwn yn ddynodwr defnyddiwr dilys. Fformat disgwyliedig: ‘@user:homeserver.org’"; "screen_login_error_invalid_user_id" = "Nid yw hwn yn ddynodwr defnyddiwr dilys. Fformat disgwyliedig: ‘@user:homeserver.org’";
@@ -1069,16 +1020,10 @@
"screen_missing_key_backup_open_element_classic" = "Open Element Classic"; "screen_missing_key_backup_open_element_classic" = "Open Element Classic";
"screen_missing_key_backup_step_1" = "Open Element Classic on your device"; "screen_missing_key_backup_step_1" = "Open Element Classic on your device";
"screen_missing_key_backup_step_2_ios" = "Go to User settings > Security"; "screen_missing_key_backup_step_2_ios" = "Go to User settings > Security";
"screen_missing_key_backup_step_3_ios" = "Scroll down to Chat Backup and tap on Set up"; "screen_missing_key_backup_step_3_ios" = "Scroll down to Secure Backup and tap on Set up";
"screen_missing_key_backup_step_4" = "Follow the instructions to enable your key storage"; "screen_missing_key_backup_step_4" = "Follow the instructions to enable your key storage";
"screen_missing_key_backup_step_5" = "Come back to %1$@"; "screen_missing_key_backup_step_5" = "Come back to %1$@";
"screen_missing_key_backup_title" = "Enable your key storage before proceeding to %1$@"; "screen_missing_key_backup_title" = "Enable your key storage before proceeding to %1$@";
"screen_moderation_and_safety_invites_heading" = "Invites";
"screen_moderation_and_safety_other_users_heading" = "Other users";
"screen_moderation_and_safety_share_presence_heading" = "Your appearance";
"screen_multi_account_announcement_action" = "Add account";
"screen_multi_account_announcement_description" = "Go to %1$@ to sign into another account. Then you can easily switch between them.";
"screen_multi_account_announcement_title" = "You can now add multiple accounts";
"screen_notification_optin_subtitle" = "Gallwch newid eich gosodiadau yn nes ymlaen."; "screen_notification_optin_subtitle" = "Gallwch newid eich gosodiadau yn nes ymlaen.";
"screen_notification_optin_title" = "Caniatáu hysbysiadau a pheidio byth â cholli neges"; "screen_notification_optin_title" = "Caniatáu hysbysiadau a pheidio byth â cholli neges";
"screen_notification_settings_additional_settings_section_title" = "Gosodiadau ychwanegol"; "screen_notification_settings_additional_settings_section_title" = "Gosodiadau ychwanegol";
@@ -1107,8 +1052,6 @@
"screen_notification_settings_mode_mentions" = "Crybwyll"; "screen_notification_settings_mode_mentions" = "Crybwyll";
"screen_notification_settings_notification_section_title" = "Rhoi gwybod i mi am"; "screen_notification_settings_notification_section_title" = "Rhoi gwybod i mi am";
"screen_notification_settings_room_mention_label" = "Rhoi gwybod i mi ar @ystafell"; "screen_notification_settings_room_mention_label" = "Rhoi gwybod i mi ar @ystafell";
"screen_notification_settings_show_all_activity_subtitle" = "Dots or number of unread messages";
"screen_notification_settings_show_all_activity_title" = "Show all activity in the room list";
"screen_notification_settings_sound_custom_fallback" = "Custom"; "screen_notification_settings_sound_custom_fallback" = "Custom";
"screen_notification_settings_sound_custom_sound_button_title" = "Custom sound..."; "screen_notification_settings_sound_custom_sound_button_title" = "Custom sound...";
"screen_notification_settings_sound_delete_sound_error_title" = "Error deleting file"; "screen_notification_settings_sound_delete_sound_error_title" = "Error deleting file";
@@ -1169,14 +1112,6 @@
"screen_polls_history_filter_ongoing" = "Parhaus"; "screen_polls_history_filter_ongoing" = "Parhaus";
"screen_polls_history_filter_past" = "Gorffennol"; "screen_polls_history_filter_past" = "Gorffennol";
"screen_polls_history_title" = "Pleidleisiau"; "screen_polls_history_title" = "Pleidleisiau";
"screen_ptt_settings_battery_optimization" = "Ignore battery optimisation";
"screen_ptt_settings_battery_optimization_description" = "Stay active in background";
"screen_ptt_settings_covert_mode" = "Covert mode";
"screen_ptt_settings_covert_mode_description" = "Mute all channels";
"screen_ptt_settings_lock_screen" = "Show on lock screen";
"screen_ptt_settings_lock_screen_description" = "Access from the lock screen";
"screen_ptt_settings_system_overlay" = "Enable system overlay";
"screen_ptt_settings_system_overlay_description" = "Access a floating action button";
"screen_push_history_title" = "Hanes gwthio"; "screen_push_history_title" = "Hanes gwthio";
"screen_qr_code_login_connecting_subtitle" = "Yn creu cysylltiad diogel"; "screen_qr_code_login_connecting_subtitle" = "Yn creu cysylltiad diogel";
"screen_qr_code_login_connection_note_secure_state_description" = "Nid oedd modd gwneud cysylltiad diogel â'r ddyfais newydd. Mae eich dyfeisiau presennol yn dal yn ddiogel a does dim angen i chi boeni amdanyn nhw."; "screen_qr_code_login_connection_note_secure_state_description" = "Nid oedd modd gwneud cysylltiad diogel â'r ddyfais newydd. Mae eich dyfeisiau presennol yn dal yn ddiogel a does dim angen i chi boeni amdanyn nhw.";
@@ -1321,14 +1256,7 @@
"screen_room_change_role_section_users" = "Aelodau"; "screen_room_change_role_section_users" = "Aelodau";
"screen_room_change_role_unsaved_changes_description" = "Mae gennych newidiadau heb eu cadw."; "screen_room_change_role_unsaved_changes_description" = "Mae gennych newidiadau heb eu cadw.";
"screen_room_change_role_unsaved_changes_title" = "Cadw'r newidiadau?"; "screen_room_change_role_unsaved_changes_title" = "Cadw'r newidiadau?";
"screen_room_confirm_removal_reason_label" = "Reason (optional)";
"screen_room_confirm_removal_reason_placeholder" = "Enter reason…";
"screen_room_confirm_removal_reason_supporting_text" = "(Optional)";
"screen_room_confirm_removal_title" = "Remove message?";
"screen_room_details_add_topic_title" = "Ychwanegu pwnc"; "screen_room_details_add_topic_title" = "Ychwanegu pwnc";
"screen_room_details_audio_push_to_talk" = "Push to talk";
"screen_room_details_audio_title" = "Room Audio";
"screen_room_details_audio_video_calls" = "Video calls";
"screen_room_details_badge_encrypted" = "Wedi'i amgryptio"; "screen_room_details_badge_encrypted" = "Wedi'i amgryptio";
"screen_room_details_badge_not_encrypted" = "Heb ei amgryptio"; "screen_room_details_badge_not_encrypted" = "Heb ei amgryptio";
"screen_room_details_badge_public" = "Ystafell gyhoeddus"; "screen_room_details_badge_public" = "Ystafell gyhoeddus";
@@ -1354,9 +1282,6 @@
"screen_room_details_profile_row_title" = "Proffil"; "screen_room_details_profile_row_title" = "Proffil";
"screen_room_details_requests_to_join_title" = "Ceisiadau i ymuno"; "screen_room_details_requests_to_join_title" = "Ceisiadau i ymuno";
"screen_room_details_roles_and_permissions" = "Rolau a chaniatâd"; "screen_room_details_roles_and_permissions" = "Rolau a chaniatâd";
"screen_room_details_room_audio_ptt" = "Push to talk";
"screen_room_details_room_audio_title" = "Room Audio";
"screen_room_details_room_audio_video_calls" = "Video calls";
"screen_room_details_room_name_label" = "Name"; "screen_room_details_room_name_label" = "Name";
"screen_room_details_security_and_privacy_title" = "Diogelwch a phreifatrwydd"; "screen_room_details_security_and_privacy_title" = "Diogelwch a phreifatrwydd";
"screen_room_details_security_title" = "Diogelwch"; "screen_room_details_security_title" = "Diogelwch";
@@ -1376,7 +1301,6 @@
"screen_room_invite_again_alert_message" = "Hoffech chi eu gwahodd yn ôl?"; "screen_room_invite_again_alert_message" = "Hoffech chi eu gwahodd yn ôl?";
"screen_room_invite_again_alert_title" = "Rydych chi ar eich pen eich hun yn y sgwrs hon"; "screen_room_invite_again_alert_title" = "Rydych chi ar eich pen eich hun yn y sgwrs hon";
"screen_room_live_location_banner" = "Sharing live location"; "screen_room_live_location_banner" = "Sharing live location";
"screen_room_maximum_messages_selected" = "Maximum messages selected";
"screen_room_member_details_block_alert_action" = "Rhwystro"; "screen_room_member_details_block_alert_action" = "Rhwystro";
"screen_room_member_details_block_alert_description" = "Fydd defnyddwyr sydd wedi'u rhwystro ddim yn gallu anfon negeseuon atoch a bydd eu holl negeseuon yn cael eu cuddio. Gallwch eu dadrwystro unrhyw bryd."; "screen_room_member_details_block_alert_description" = "Fydd defnyddwyr sydd wedi'u rhwystro ddim yn gallu anfon negeseuon atoch a bydd eu holl negeseuon yn cael eu cuddio. Gallwch eu dadrwystro unrhyw bryd.";
"screen_room_member_details_block_user" = "Rhwystro defnyddiwr"; "screen_room_member_details_block_user" = "Rhwystro defnyddiwr";
@@ -1417,8 +1341,7 @@
"screen_room_notification_settings_error_setting_mode" = "Wedi methu gosod y modd, ceisiwch eto."; "screen_room_notification_settings_error_setting_mode" = "Wedi methu gosod y modd, ceisiwch eto.";
"screen_room_notification_settings_mentions_only_disclaimer" = "Nid yw eich gweinydd cartref yn cefnogi'r dewis hwn mewn ystafelloedd sydd wedi'u hamgryptio, chewch chi ddim eich hysbysu yn yr ystafell hon."; "screen_room_notification_settings_mentions_only_disclaimer" = "Nid yw eich gweinydd cartref yn cefnogi'r dewis hwn mewn ystafelloedd sydd wedi'u hamgryptio, chewch chi ddim eich hysbysu yn yr ystafell hon.";
"screen_room_notification_settings_mode_all_messages" = "Pob neges"; "screen_room_notification_settings_mode_all_messages" = "Pob neges";
"screen_room_notification_settings_mode_mentions_and_keywords" = "Dim ond Crybwylliadau ac Allweddeiriau"; "screen_room_notification_settings_mode_mentions_and_keywords" = "Crybwylliadau ac Allweddeiriau'n unig";
"screen_room_notification_settings_mode_mute" = "Mute";
"screen_room_notification_settings_room_custom_settings_title" = "Yn yr ystafell hon, rhowch wybod i mi am"; "screen_room_notification_settings_room_custom_settings_title" = "Yn yr ystafell hon, rhowch wybod i mi am";
"screen_room_pinned_banner_indicator" = "%1$@ o %2$@"; "screen_room_pinned_banner_indicator" = "%1$@ o %2$@";
"screen_room_pinned_banner_indicator_description" = "%1$@ Neges wedi'u pinio"; "screen_room_pinned_banner_indicator_description" = "%1$@ Neges wedi'u pinio";
@@ -1443,7 +1366,6 @@
"screen_room_roles_and_permissions_room_details" = "Manylion yr ystafell"; "screen_room_roles_and_permissions_room_details" = "Manylion yr ystafell";
"screen_room_roles_and_permissions_space_details" = "Space details"; "screen_room_roles_and_permissions_space_details" = "Space details";
"screen_room_roles_and_permissions_title" = "Rolau a chaniatâd"; "screen_room_roles_and_permissions_title" = "Rolau a chaniatâd";
"screen_room_select_error_cannot_load_rooms" = "The room list associated with this account cannot be loaded.";
"screen_room_single_knock_request_accept_button_title" = "Derbyn"; "screen_room_single_knock_request_accept_button_title" = "Derbyn";
"screen_room_single_knock_request_title" = "Mae %1$@ eisiau ymuno â'r ystafell hon"; "screen_room_single_knock_request_title" = "Mae %1$@ eisiau ymuno â'r ystafell hon";
"screen_room_single_knock_request_view_button_title" = "Golwg"; "screen_room_single_knock_request_view_button_title" = "Golwg";
@@ -1480,8 +1402,6 @@
"screen_roomlist_filter_invites_empty_state_title" = "Does gennych chi ddim gwahoddiadau yn aros."; "screen_roomlist_filter_invites_empty_state_title" = "Does gennych chi ddim gwahoddiadau yn aros.";
"screen_roomlist_filter_low_priority" = "Blaenoriaeth Isel"; "screen_roomlist_filter_low_priority" = "Blaenoriaeth Isel";
"screen_roomlist_filter_low_priority_empty_state_title" = "Does gennych chi ddim sgyrsiau blaenoriaeth isel eto"; "screen_roomlist_filter_low_priority_empty_state_title" = "Does gennych chi ddim sgyrsiau blaenoriaeth isel eto";
"screen_roomlist_filter_mention" = "Mention";
"screen_roomlist_filter_mention_empty_state_title" = "You don’t have any unread mentions";
"screen_roomlist_filter_mixed_empty_state_subtitle" = "Gallwch ddad-ddewis hidlwyr er mwyn gweld eich sgyrsiau eraill"; "screen_roomlist_filter_mixed_empty_state_subtitle" = "Gallwch ddad-ddewis hidlwyr er mwyn gweld eich sgyrsiau eraill";
"screen_roomlist_filter_mixed_empty_state_title" = "Does gennych chi ddim sgyrsiau ar gyfer y dewis hwn"; "screen_roomlist_filter_mixed_empty_state_title" = "Does gennych chi ddim sgyrsiau ar gyfer y dewis hwn";
"screen_roomlist_filter_people" = "Pobl"; "screen_roomlist_filter_people" = "Pobl";
@@ -1568,13 +1488,10 @@
"screen_session_verification_request_title" = "Gofynnwyd am ddilysiad"; "screen_session_verification_request_title" = "Gofynnwyd am ddilysiad";
"screen_session_verification_they_dont_match" = "Dy'n nhw ddim yn cyfateb"; "screen_session_verification_they_dont_match" = "Dy'n nhw ddim yn cyfateb";
"screen_session_verification_they_match" = "Maen nhw'n cyfateb"; "screen_session_verification_they_match" = "Maen nhw'n cyfateb";
"screen_session_verification_unavailable_subtitle" = "Please use another device or recovery key.";
"screen_session_verification_unavailable_title" = "Verification with this device is currently unavailable";
"screen_session_verification_use_another_device_subtitle" = "Gwnewch yn siŵr fod gennych yr ap ar agor yn y ddyfais arall cyn dechrau dilysu o'r fan hon."; "screen_session_verification_use_another_device_subtitle" = "Gwnewch yn siŵr fod gennych yr ap ar agor yn y ddyfais arall cyn dechrau dilysu o'r fan hon.";
"screen_session_verification_use_another_device_title" = "Agorwch yr ap ar ddyfais arall sydd wedi'i gwirio"; "screen_session_verification_use_another_device_title" = "Agorwch yr ap ar ddyfais arall sydd wedi'i gwirio";
"screen_session_verification_user_initiator_subtitle" = "Er mwyn sicrhau diogelwch ychwanegol, gwiriwch y defnyddiwr hwn trwy gymharu set o emojis ar eich dyfeisiau. Gwnewch hyn trwy ddefnyddio ffordd ddibynadwy o gyfathrebu."; "screen_session_verification_user_initiator_subtitle" = "Er mwyn sicrhau diogelwch ychwanegol, gwiriwch y defnyddiwr hwn trwy gymharu set o emojis ar eich dyfeisiau. Gwnewch hyn trwy ddefnyddio ffordd ddibynadwy o gyfathrebu.";
"screen_session_verification_user_initiator_title" = "Dilysu'r defnyddiwr hwn?"; "screen_session_verification_user_initiator_title" = "Dilysu'r defnyddiwr hwn?";
"screen_session_verification_user_requesting_verification" = "User requesting verification:";
"screen_session_verification_user_responder_subtitle" = "Er mwyn diogelwch ychwanegol, mae defnyddiwr arall eisiau gwirio pwy ydych chi. Bydd set o emojis yn cael eu dangos i chi eu cymharu."; "screen_session_verification_user_responder_subtitle" = "Er mwyn diogelwch ychwanegol, mae defnyddiwr arall eisiau gwirio pwy ydych chi. Bydd set o emojis yn cael eu dangos i chi eu cymharu.";
"screen_session_verification_waiting_another_device_subtitle" = "Dylech weld llamlen ar y ddyfais arall. Dechreuwch y dilysiad o'r fan honno nawr."; "screen_session_verification_waiting_another_device_subtitle" = "Dylech weld llamlen ar y ddyfais arall. Dechreuwch y dilysiad o'r fan honno nawr.";
"screen_session_verification_waiting_another_device_title" = "Cychwyn dilysu ar y ddyfais arall"; "screen_session_verification_waiting_another_device_title" = "Cychwyn dilysu ar y ddyfais arall";
@@ -1583,15 +1500,6 @@
"screen_session_verification_waiting_subtitle" = "Unwaith y byddwch wedi'ch derbyn, byddwch yn gallu parhau â'r dilysu."; "screen_session_verification_waiting_subtitle" = "Unwaith y byddwch wedi'ch derbyn, byddwch yn gallu parhau â'r dilysu.";
"screen_session_verification_waiting_to_accept_subtitle" = "Derbyniwch y cais i gychwyn y broses ddilysu yn eich sesiwn arall i barhau."; "screen_session_verification_waiting_to_accept_subtitle" = "Derbyniwch y cais i gychwyn y broses ddilysu yn eich sesiwn arall i barhau.";
"screen_session_verification_waiting_to_accept_title" = "Yn aros i dderbyn cais"; "screen_session_verification_waiting_to_accept_title" = "Yn aros i dderbyn cais";
"screen_settings_add_account" = "Add account";
"screen_settings_user_status_away" = "Away";
"screen_settings_user_status_be_right_back" = "Be right back";
"screen_settings_user_status_custom" = "Custom…";
"screen_settings_user_status_custom_hint" = "Custom status…";
"screen_settings_user_status_focus_time" = "Focus time";
"screen_settings_user_status_in_a_meeting" = "In a meeting";
"screen_settings_user_status_on_the_road" = "On the road";
"screen_settings_user_status_placeholder" = "What's your status?";
"screen_share_location_live_location_disclaimer_title" = "Your live location history will be stored in the room and visible to members after the session ends."; "screen_share_location_live_location_disclaimer_title" = "Your live location history will be stored in the room and visible to members after the session ends.";
"screen_share_location_live_location_duration_picker_title" = "Choose how long to share your live location."; "screen_share_location_live_location_duration_picker_title" = "Choose how long to share your live location.";
"screen_share_location_live_location_missing_permissions" = "You do not have permissions to share your live location in this room"; "screen_share_location_live_location_missing_permissions" = "You do not have permissions to share your live location in this room";
@@ -1606,7 +1514,6 @@
"screen_signed_out_reason_2" = "Rydych chi wedi dileu'r sesiwn o sesiwn arall"; "screen_signed_out_reason_2" = "Rydych chi wedi dileu'r sesiwn o sesiwn arall";
"screen_signed_out_reason_3" = "Mae gweinyddwr eich gweinydd wedi annilysu eich mynediad"; "screen_signed_out_reason_3" = "Mae gweinyddwr eich gweinydd wedi annilysu eich mynediad";
"screen_signed_out_subtitle" = "Efallai eich bod wedi cael eich allgofnodi am un o'r rhesymau sy'n cael eu rhestru isod. Mewngofnodwch eto i barhau i ddefnyddio %@."; "screen_signed_out_subtitle" = "Efallai eich bod wedi cael eich allgofnodi am un o'r rhesymau sy'n cael eu rhestru isod. Mewngofnodwch eto i barhau i ddefnyddio %@.";
"screen_signed_out_subtitle_v2" = "This device was removed for one of the reasons listed below. Please sign in again to connect this device to your account.";
"screen_signed_out_title" = "Rydych wedi'ch allgofnodi"; "screen_signed_out_title" = "Rydych wedi'ch allgofnodi";
"screen_signout_confirmation_dialog_content" = "Ydych chi'n siŵr eich bod am allgofnodi?"; "screen_signout_confirmation_dialog_content" = "Ydych chi'n siŵr eich bod am allgofnodi?";
"screen_signout_confirmation_dialog_submit" = "Allgofnodi"; "screen_signout_confirmation_dialog_submit" = "Allgofnodi";
@@ -1632,7 +1539,7 @@
"screen_space_list_parent_space" = "Gofod %1$@"; "screen_space_list_parent_space" = "Gofod %1$@";
"screen_space_list_title" = "Gofodau"; "screen_space_list_title" = "Gofodau";
"screen_space_menu_action_members" = "View members"; "screen_space_menu_action_members" = "View members";
"screen_space_remove_rooms_confirmation_content" = "Removing a room will not affect the room access. To change the access go to Room info > Security & privacy."; "screen_space_remove_rooms_confirmation_content" = "Removing a room will not affect the room access. To change the access go to Room info > Privacy & security.";
"screen_space_remove_rooms_confirmation_title_ios" = "Remove rooms from %1$@?"; "screen_space_remove_rooms_confirmation_title_ios" = "Remove rooms from %1$@?";
"screen_space_settings_leave_space" = "Gadael y gofod"; "screen_space_settings_leave_space" = "Gadael y gofod";
"screen_space_settings_roles_and_permissions" = "Rolau a chaniatâd"; "screen_space_settings_roles_and_permissions" = "Rolau a chaniatâd";
@@ -1783,7 +1690,6 @@
"troubleshoot_notifications_test_push_loop_back_failure_2" = "Gwall: %1$@."; "troubleshoot_notifications_test_push_loop_back_failure_2" = "Gwall: %1$@.";
"troubleshoot_notifications_test_push_loop_back_failure_3" = "Gwall, methu profi'r gwthio."; "troubleshoot_notifications_test_push_loop_back_failure_3" = "Gwall, methu profi'r gwthio.";
"troubleshoot_notifications_test_push_loop_back_failure_4" = "Gwall, terfyn amser wrth aros am y gwthio."; "troubleshoot_notifications_test_push_loop_back_failure_4" = "Gwall, terfyn amser wrth aros am y gwthio.";
"troubleshoot_notifications_test_push_loop_back_failure_rate_limit" = "Error: the push gateway is rate limiting this device, so notifications won't be reliable. Please set up a different push gateway.";
"troubleshoot_notifications_test_push_loop_back_success" = "Cymerodd dolen gwthio nôl %1$d ms."; "troubleshoot_notifications_test_push_loop_back_success" = "Cymerodd dolen gwthio nôl %1$d ms.";
"troubleshoot_notifications_test_push_loop_back_title" = "Prawf dolen gwthio'n ôl"; "troubleshoot_notifications_test_push_loop_back_title" = "Prawf dolen gwthio'n ôl";
"troubleshoot_notifications_test_unified_push_description" = "Sicrhewch fod dosbarthwyr UnifiedPush ar gael."; "troubleshoot_notifications_test_unified_push_description" = "Sicrhewch fod dosbarthwyr UnifiedPush ar gael.";
@@ -26,22 +26,6 @@
<key>NSStringLocalizedFormatKey</key> <key>NSStringLocalizedFormatKey</key>
<string>%#@COUNT@</string> <string>%#@COUNT@</string>
</dict> </dict>
<key>a11y_gallery_more_media</key>
<dict>
<key>COUNT</key>
<dict>
<key>NSStringFormatSpecTypeKey</key>
<string>NSStringPluralRuleType</string>
<key>NSStringFormatValueTypeKey</key>
<string>d</string>
<key>one</key>
<string>Gallery, %1$d more media</string>
<key>other</key>
<string>Gallery, %1$d more medias</string>
</dict>
<key>NSStringLocalizedFormatKey</key>
<string>%#@COUNT@</string>
</dict>
<key>a11y_polls_percent_of_total</key> <key>a11y_polls_percent_of_total</key>
<dict> <dict>
<key>COUNT</key> <key>COUNT</key>
@@ -90,54 +74,6 @@
<key>NSStringLocalizedFormatKey</key> <key>NSStringLocalizedFormatKey</key>
<string>%#@COUNT@</string> <string>%#@COUNT@</string>
</dict> </dict>
<key>action_forward_messages</key>
<dict>
<key>COUNT</key>
<dict>
<key>NSStringFormatSpecTypeKey</key>
<string>NSStringPluralRuleType</string>
<key>NSStringFormatValueTypeKey</key>
<string>d</string>
<key>one</key>
<string>Forward %1$d message</string>
<key>other</key>
<string>Forward %1$d messages</string>
</dict>
<key>NSStringLocalizedFormatKey</key>
<string>%#@COUNT@</string>
</dict>
<key>common_gallery_reply_attachments</key>
<dict>
<key>COUNT</key>
<dict>
<key>NSStringFormatSpecTypeKey</key>
<string>NSStringPluralRuleType</string>
<key>NSStringFormatValueTypeKey</key>
<string>d</string>
<key>one</key>
<string>%1$d attachment…</string>
<key>other</key>
<string>%1$d attachments…</string>
</dict>
<key>NSStringLocalizedFormatKey</key>
<string>%#@COUNT@</string>
</dict>
<key>common_gallery_reply_media_items</key>
<dict>
<key>COUNT</key>
<dict>
<key>NSStringFormatSpecTypeKey</key>
<string>NSStringPluralRuleType</string>
<key>NSStringFormatValueTypeKey</key>
<string>d</string>
<key>one</key>
<string>%1$d media item…</string>
<key>other</key>
<string>%1$d media items…</string>
</dict>
<key>NSStringLocalizedFormatKey</key>
<string>%#@COUNT@</string>
</dict>
<key>common_many_members</key> <key>common_many_members</key>
<dict> <dict>
<key>COUNT</key> <key>COUNT</key>
@@ -362,22 +298,6 @@
<key>NSStringLocalizedFormatKey</key> <key>NSStringLocalizedFormatKey</key>
<string>%#@COUNT@</string> <string>%#@COUNT@</string>
</dict> </dict>
<key>notification_gallery_body</key>
<dict>
<key>COUNT</key>
<dict>
<key>NSStringFormatSpecTypeKey</key>
<string>NSStringPluralRuleType</string>
<key>NSStringFormatValueTypeKey</key>
<string>d</string>
<key>one</key>
<string>Shared %1$d attachment</string>
<key>other</key>
<string>Shared %1$d attachments</string>
</dict>
<key>NSStringLocalizedFormatKey</key>
<string>%#@COUNT@</string>
</dict>
<key>notification_invitations</key> <key>notification_invitations</key>
<dict> <dict>
<key>COUNT</key> <key>COUNT</key>
@@ -474,22 +394,6 @@
<key>NSStringLocalizedFormatKey</key> <key>NSStringLocalizedFormatKey</key>
<string>%#@COUNT@</string> <string>%#@COUNT@</string>
</dict> </dict>
<key>screen.room.timeline_redacted_messages</key>
<dict>
<key>COUNT</key>
<dict>
<key>NSStringFormatSpecTypeKey</key>
<string>NSStringPluralRuleType</string>
<key>NSStringFormatValueTypeKey</key>
<string>d</string>
<key>one</key>
<string>%1$d removed message</string>
<key>other</key>
<string>%1$d removed messages</string>
</dict>
<key>NSStringLocalizedFormatKey</key>
<string>%#@COUNT@</string>
</dict>
<key>screen_advanced_settings_live_location_update_distance</key> <key>screen_advanced_settings_live_location_update_distance</key>
<dict> <dict>
<key>COUNT</key> <key>COUNT</key>
@@ -706,22 +610,6 @@
<key>NSStringLocalizedFormatKey</key> <key>NSStringLocalizedFormatKey</key>
<string>%#@COUNT@</string> <string>%#@COUNT@</string>
</dict> </dict>
<key>screen_room_messages_forwarded</key>
<dict>
<key>COUNT</key>
<dict>
<key>NSStringFormatSpecTypeKey</key>
<string>NSStringPluralRuleType</string>
<key>NSStringFormatValueTypeKey</key>
<string>d</string>
<key>one</key>
<string>%1$d message forwarded</string>
<key>other</key>
<string>%1$d messages forwarded</string>
</dict>
<key>NSStringLocalizedFormatKey</key>
<string>%#@COUNT@</string>
</dict>
<key>screen_room_multiple_knock_requests_title</key> <key>screen_room_multiple_knock_requests_title</key>
<dict> <dict>
<key>COUNT</key> <key>COUNT</key>
@@ -746,22 +634,6 @@
<key>NSStringLocalizedFormatKey</key> <key>NSStringLocalizedFormatKey</key>
<string>%#@COUNT@</string> <string>%#@COUNT@</string>
</dict> </dict>
<key>screen_room_selection_count</key>
<dict>
<key>COUNT</key>
<dict>
<key>NSStringFormatSpecTypeKey</key>
<string>NSStringPluralRuleType</string>
<key>NSStringFormatValueTypeKey</key>
<string>d</string>
<key>one</key>
<string>%1$d message selected</string>
<key>other</key>
<string>%1$d messages selected</string>
</dict>
<key>NSStringLocalizedFormatKey</key>
<string>%#@COUNT@</string>
</dict>
<key>screen_room_timeline_reaction_a11y</key> <key>screen_room_timeline_reaction_a11y</key>
<dict> <dict>
<key>COUNT</key> <key>COUNT</key>
@@ -898,7 +770,7 @@
<key>NSStringLocalizedFormatKey</key> <key>NSStringLocalizedFormatKey</key>
<string>%#@COUNT@</string> <string>%#@COUNT@</string>
</dict> </dict>
<key>screen_timeline_active_call_joined_count</key> <key>screen_timeline_active_call_extra_joined_count</key>
<dict> <dict>
<key>COUNT</key> <key>COUNT</key>
<dict> <dict>
@@ -907,9 +779,9 @@
<key>NSStringFormatValueTypeKey</key> <key>NSStringFormatValueTypeKey</key>
<string>d</string> <string>d</string>
<key>one</key> <key>one</key>
<string>%1$d joined</string> <string>+ %1$d joined</string>
<key>other</key> <key>other</key>
<string>%1$d joined</string> <string>+ %1$d joined</string>
</dict> </dict>
<key>NSStringLocalizedFormatKey</key> <key>NSStringLocalizedFormatKey</key>
<string>%#@COUNT@</string> <string>%#@COUNT@</string>
@@ -6,23 +6,16 @@
"a11y_collapse_message_text_field" = "Minimér tekstfeltet for beskeder"; "a11y_collapse_message_text_field" = "Minimér tekstfeltet for beskeder";
"a11y_create_poll_votes_allowed_decrease" = "Decrease votes allowed per person"; "a11y_create_poll_votes_allowed_decrease" = "Decrease votes allowed per person";
"a11y_create_poll_votes_allowed_increase" = "Increase votes allowed per person"; "a11y_create_poll_votes_allowed_increase" = "Increase votes allowed per person";
"a11y_custom_emoji" = "Custom emoji";
"a11y_delete" = "Slet"; "a11y_delete" = "Slet";
"a11y_duration" = "Duration: %1$@"; "a11y_duration" = "Duration: %1$@";
"a11y_edit_avatar" = "Redigér avatar"; "a11y_edit_avatar" = "Redigér avatar";
"a11y_edit_room_address_hint" = "Den fulde adresse vil være %1$@"; "a11y_edit_room_address_hint" = "Den fulde adresse vil være %1$@";
"a11y_expand_message_text_field" = "Udvid tekstfeltet for beskeder"; "a11y_expand_message_text_field" = "Udvid tekstfeltet for beskeder";
"a11y_gallery_attachment" = "Gallery, attachment %1$d";
"a11y_gallery_failed_scan" = "Gallery, failed scan %1$d";
"a11y_gallery_image" = "Gallery, image %1$d";
"a11y_gallery_scanning" = "Gallery, scanning %1$d";
"a11y_gallery_video" = "Gallery, video %1$d";
"a11y_hide_password" = "Skjul adgangskode"; "a11y_hide_password" = "Skjul adgangskode";
"a11y_info" = "Info"; "a11y_info" = "Info";
"a11y_join_call" = "Deltag i opkald"; "a11y_join_call" = "Deltag i opkald";
"a11y_jump_to_bottom" = "Hop til bunden"; "a11y_jump_to_bottom" = "Hop til bunden";
"a11y_jump_to_unread" = "Jump to unread"; "a11y_jump_to_unread" = "Jump to unread";
"a11y_jump_to_unread_messages" = "Jump to first unread message";
"a11y_notifications_mentions_only" = "Kun omtaler"; "a11y_notifications_mentions_only" = "Kun omtaler";
"a11y_notifications_muted" = "Lyd slået fra"; "a11y_notifications_muted" = "Lyd slået fra";
"a11y_notifications_new_mentions" = "Nye omtaler"; "a11y_notifications_new_mentions" = "Nye omtaler";
@@ -57,7 +50,6 @@
"a11y_start_call" = "Start et opkald"; "a11y_start_call" = "Start et opkald";
"a11y_start_video_call" = "Start et videoopkald"; "a11y_start_video_call" = "Start et videoopkald";
"a11y_start_voice_call" = "Start et taleopkald"; "a11y_start_voice_call" = "Start et taleopkald";
"a11y_status" = "Status";
"a11y_tombstoned_room" = "Deaktiveret rum"; "a11y_tombstoned_room" = "Deaktiveret rum";
"a11y_user_menu" = "Brugermenu"; "a11y_user_menu" = "Brugermenu";
"a11y_video_preview" = "Video preview"; "a11y_video_preview" = "Video preview";
@@ -86,7 +78,6 @@
"action_choose_file" = "Choose file"; "action_choose_file" = "Choose file";
"action_choose_photo" = "Vælg billede"; "action_choose_photo" = "Vælg billede";
"action_clear" = "Ryd"; "action_clear" = "Ryd";
"action_clear_all" = "Clear all";
"action_close" = "Luk"; "action_close" = "Luk";
"action_complete_verification" = "Fuldfør verifikation"; "action_complete_verification" = "Fuldfør verifikation";
"action_confirm" = "Bekræft"; "action_confirm" = "Bekræft";
@@ -97,7 +88,6 @@
"action_copy_link" = "Kopiér link"; "action_copy_link" = "Kopiér link";
"action_copy_link_to_message" = "Kopiér link til besked"; "action_copy_link_to_message" = "Kopiér link til besked";
"action_copy_text" = "Kopiér tekst"; "action_copy_text" = "Kopiér tekst";
"action_copy_to_clipboard" = "Copy to clipboard";
"action_create" = "Opret"; "action_create" = "Opret";
"action_create_room" = "Opret et rum"; "action_create_room" = "Opret et rum";
"action_create_space" = "Opret en klynge"; "action_create_space" = "Opret en klynge";
@@ -145,7 +135,6 @@
"action_manage_account_and_devices" = "Administrer konto og enheder"; "action_manage_account_and_devices" = "Administrer konto og enheder";
"action_manage_devices" = "Administrer enheder"; "action_manage_devices" = "Administrer enheder";
"action_manage_rooms" = "Administrer rum"; "action_manage_rooms" = "Administrer rum";
"action_mark_as_read" = "Mark as read";
"action_message" = "Besked"; "action_message" = "Besked";
"action_minimize" = "Minimér"; "action_minimize" = "Minimér";
"action_next" = "Næste"; "action_next" = "Næste";
@@ -220,7 +209,6 @@
"call_invalid_audio_device_bluetooth_devices_disabled" = "Element Call understøtter desværre ikke brug af Bluetooth-lydenheder i denne Android-version. Vælg venligst en anden lydenhed."; "call_invalid_audio_device_bluetooth_devices_disabled" = "Element Call understøtter desværre ikke brug af Bluetooth-lydenheder i denne Android-version. Vælg venligst en anden lydenhed.";
"common_about" = "Om"; "common_about" = "Om";
"common_acceptable_use_policy" = "Politik for acceptabel brug"; "common_acceptable_use_policy" = "Politik for acceptabel brug";
"common_account_settings" = "Account settings";
"common_add_account" = "Tilføj en konto"; "common_add_account" = "Tilføj en konto";
"common_add_another_account" = "Tilføj en anden konto"; "common_add_another_account" = "Tilføj en anden konto";
"common_adding_caption" = "Tilføjelse af billedtekst"; "common_adding_caption" = "Tilføjelse af billedtekst";
@@ -229,7 +217,6 @@
"common_analytics" = "Analyse-værktøj"; "common_analytics" = "Analyse-værktøj";
"common_android_shortcuts_remove_reason_left_room" = "Du forlod rummet"; "common_android_shortcuts_remove_reason_left_room" = "Du forlod rummet";
"common_android_shortcuts_remove_reason_session_logged_out" = "Du blev logget ud af sessionen"; "common_android_shortcuts_remove_reason_session_logged_out" = "Du blev logget ud af sessionen";
"common_app_settings" = "App settings";
"common_appearance" = "Udseende"; "common_appearance" = "Udseende";
"common_audio" = "Lyd"; "common_audio" = "Lyd";
"common_beta" = "Beta"; "common_beta" = "Beta";
@@ -240,8 +227,6 @@
"common_call_started" = "Opkald startet"; "common_call_started" = "Opkald startet";
"common_call_you_declined" = "Du afviste et opkald"; "common_call_you_declined" = "Du afviste et opkald";
"common_chat_backup" = "Backup af samtale"; "common_chat_backup" = "Backup af samtale";
"common_chats" = "Chats";
"common_code_block" = "Code block";
"common_copied_to_clipboard" = "Kopieret til udklipsholder"; "common_copied_to_clipboard" = "Kopieret til udklipsholder";
"common_copyright" = "Ophavsret"; "common_copyright" = "Ophavsret";
"common_creating_room" = "Opretter rum..."; "common_creating_room" = "Opretter rum...";
@@ -279,12 +264,10 @@
"common_file_deleted" = "Fil slettet"; "common_file_deleted" = "Fil slettet";
"common_file_saved" = "Fil gemt"; "common_file_saved" = "Fil gemt";
"common_forward_message" = "Videresend besked"; "common_forward_message" = "Videresend besked";
"common_forward_to" = "Forward to";
"common_frequently_used" = "Ofte brugt"; "common_frequently_used" = "Ofte brugt";
"common_gallery" = "Gallery"; "common_gallery" = "Gallery";
"common_gif" = "GIF"; "common_gif" = "GIF";
"common_group_call_in_progress" = "Group call in progress"; "common_group_call_in_progress" = "Group call in progress";
"common_header_rooms" = "Rooms";
"common_image" = "Billede"; "common_image" = "Billede";
"common_in_reply_to" = "Som svar på %1$@"; "common_in_reply_to" = "Som svar på %1$@";
"common_invite_unknown_profile" = "Dette Matrix-ID kan ikke findes, så invitationen modtages muligvis ikke."; "common_invite_unknown_profile" = "Dette Matrix-ID kan ikke findes, så invitationen modtages muligvis ikke.";
@@ -297,25 +280,20 @@
"common_live_location_ended" = "Aktuel position afsluttet"; "common_live_location_ended" = "Aktuel position afsluttet";
"common_loading" = "Indlæser..."; "common_loading" = "Indlæser...";
"common_loading_more" = "Indlæser flere..."; "common_loading_more" = "Indlæser flere...";
"common_location_sharing" = "Location sharing";
"common_media_upload_quality" = "Media upload quality";
"common_message" = "Besked"; "common_message" = "Besked";
"common_message_actions" = "Beskedhandlinger"; "common_message_actions" = "Beskedhandlinger";
"common_message_failed_to_send" = "Beskeden blev ikke sendt"; "common_message_failed_to_send" = "Beskeden blev ikke sendt";
"common_message_layout" = "Layout på beskeder"; "common_message_layout" = "Layout på beskeder";
"common_message_removed" = "Beskeden er fjernet"; "common_message_removed" = "Beskeden er fjernet";
"common_moderation_and_safety" = "Moderation & safety";
"common_modern" = "Moderne"; "common_modern" = "Moderne";
"common_mute" = "Lydløs"; "common_mute" = "Lydløs";
"common_name" = "Navn"; "common_name" = "Navn";
"common_name_and_id" = "%1$@ (%2$@)"; "common_name_and_id" = "%1$@ (%2$@)";
"common_no_results" = "Ingen resultater"; "common_no_results" = "Ingen resultater";
"common_no_results_for" = "There are no results for “%1$@”. Try a new search term.";
"common_no_room_name" = "Intet rumnavn"; "common_no_room_name" = "Intet rumnavn";
"common_no_space_name" = "Intet klyngenavn"; "common_no_space_name" = "Intet klyngenavn";
"common_not_encrypted" = "Ikke krypteret"; "common_not_encrypted" = "Ikke krypteret";
"common_offline" = "Offline"; "common_offline" = "Offline";
"common_on_a_call" = "On a call";
"common_open_source_licenses" = "Open Source-licenser"; "common_open_source_licenses" = "Open Source-licenser";
"common_optic_id_ios" = "Optisk ID"; "common_optic_id_ios" = "Optisk ID";
"common_or" = "eller"; "common_or" = "eller";
@@ -349,7 +327,6 @@
"common_replying_to" = "Svarer til %1$@"; "common_replying_to" = "Svarer til %1$@";
"common_report_a_problem" = "Anmeld et problem"; "common_report_a_problem" = "Anmeld et problem";
"common_report_submitted" = "Anmeldelsen er indsendt"; "common_report_submitted" = "Anmeldelsen er indsendt";
"common_results_for" = "Results for “%1$@”";
"common_rich_text_editor" = "Rich text editor"; "common_rich_text_editor" = "Rich text editor";
"common_role" = "Rolle"; "common_role" = "Rolle";
"common_room" = "Rum"; "common_room" = "Rum";
@@ -377,7 +354,6 @@
"common_shared_live_location" = "Deling af aktuel position"; "common_shared_live_location" = "Deling af aktuel position";
"common_shared_location" = "Delt placering"; "common_shared_location" = "Delt placering";
"common_shared_space" = "Delt klynge"; "common_shared_space" = "Delt klynge";
"common_signed_in" = "Signed in";
"common_signing_out" = "Fjerner enhed"; "common_signing_out" = "Fjerner enhed";
"common_something_went_wrong" = "Noget gik galt"; "common_something_went_wrong" = "Noget gik galt";
"common_something_went_wrong_message" = "Vi stødte på et problem. Prøv venligst igen."; "common_something_went_wrong_message" = "Vi stødte på et problem. Prøv venligst igen.";
@@ -389,7 +365,6 @@
"common_success" = "Succes"; "common_success" = "Succes";
"common_suggested" = "Forslag"; "common_suggested" = "Forslag";
"common_suggestions" = "Forslag"; "common_suggestions" = "Forslag";
"common_switch_accounts" = "Switch accounts";
"common_syncing" = "Synkroniserer"; "common_syncing" = "Synkroniserer";
"common_text" = "Tekst"; "common_text" = "Tekst";
"common_third_party_notices" = "Tredjepartsmeddelelser"; "common_third_party_notices" = "Tredjepartsmeddelelser";
@@ -430,14 +405,12 @@
"common_waiting_live_location" = "Venter på aktuel position..."; "common_waiting_live_location" = "Venter på aktuel position...";
"common_world_readable_history" = "Alle kan se historikken"; "common_world_readable_history" = "Alle kan se historikken";
"common_you" = "Dig"; "common_you" = "Dig";
"common_your_account" = "Your account";
"confirm_recovery_key_banner_message" = "Bekræft din gendannelsesnøgle for at bevare adgangen til nøglelager og meddelelseshistorik."; "confirm_recovery_key_banner_message" = "Bekræft din gendannelsesnøgle for at bevare adgangen til nøglelager og meddelelseshistorik.";
"confirm_recovery_key_banner_primary_button_title" = "Indtast din gendannelsesnøgle"; "confirm_recovery_key_banner_primary_button_title" = "Indtast din gendannelsesnøgle";
"confirm_recovery_key_banner_secondary_button_title" = "Har du glemt din gendannelsesnøgle?"; "confirm_recovery_key_banner_secondary_button_title" = "Har du glemt din gendannelsesnøgle?";
"confirm_recovery_key_banner_title" = "Dit nøglelager er ikke synkroniseret"; "confirm_recovery_key_banner_title" = "Dit nøglelager er ikke synkroniseret";
"content_scanner_not_found" = "Download not available."; "content_scanner_not_found" = "Download not available.";
"content_scanner_not_found_title" = "Something went wrong"; "content_scanner_not_found_title" = "File not found";
"content_scanner_scanning" = "Scanning…";
"content_scanner_unsafe_message" = "Preview and download have been disabled."; "content_scanner_unsafe_message" = "Preview and download have been disabled.";
"content_scanner_unsafe_title" = "The file is not safe"; "content_scanner_unsafe_title" = "The file is not safe";
"crash_detection_dialog_content" = "%1$@ crashede sidste gang den blev brugt. Vil du dele en ulykkesrapport med os?"; "crash_detection_dialog_content" = "%1$@ crashede sidste gang den blev brugt. Vil du dele en ulykkesrapport med os?";
@@ -511,11 +484,6 @@
"error_no_compatible_app_found" = "Der blev ikke fundet nogen kompatibel app til at håndtere denne handling."; "error_no_compatible_app_found" = "Der blev ikke fundet nogen kompatibel app til at håndtere denne handling.";
"error_room_address_already_exists" = "Denne rumadresse er allerede taget. Prøv at redigere rummets adressefelt eller at skifte rummets navn"; "error_room_address_already_exists" = "Denne rumadresse er allerede taget. Prøv at redigere rummets adressefelt eller at skifte rummets navn";
"error_room_address_invalid_symbols" = "Nogle tegn er ikke tilladt. Kun bogstaver, cifre og følgende symboler understøttes! $ & '() * +/; =? @ [] - . _"; "error_room_address_invalid_symbols" = "Nogle tegn er ikke tilladt. Kun bogstaver, cifre og følgende symboler understøttes! $ & '() * +/; =? @ [] - . _";
"error_sending_failure_invalid_mime_type" = "Invalid mime type: %@";
"error_sending_failure_missing_media_content" = "Missing media content";
"error_sending_failure_other" = "Error details: %@";
"error_sending_failure_sending_from_unverified_device" = "Sending from unverified device";
"error_sending_failure_unknown" = "Unknown error";
"error_some_messages_have_not_been_sent" = "Nogle beskeder er ikke blevet sendt"; "error_some_messages_have_not_been_sent" = "Nogle beskeder er ikke blevet sendt";
"error_unknown" = "Beklager, der opstod en fejl"; "error_unknown" = "Beklager, der opstod en fejl";
"error.account_already_logged_in" = "Du er allerede logget ind på denne enhed som %1$@."; "error.account_already_logged_in" = "Du er allerede logget ind på denne enhed som %1$@.";
@@ -545,8 +513,6 @@
"notification_invitation_action_reject" = "Afvis"; "notification_invitation_action_reject" = "Afvis";
"notification_invite_body" = "Inviterede dig til at samtale"; "notification_invite_body" = "Inviterede dig til at samtale";
"notification_invite_body_with_sender" = "%1$@ inviterede dig til at samtale"; "notification_invite_body_with_sender" = "%1$@ inviterede dig til at samtale";
"notification_knock_request_body" = "Requested to join";
"notification_live_location_started_body" = "Started sharing their live location";
"notification_mentioned_you_body" = "Nævnte dig: %1$@"; "notification_mentioned_you_body" = "Nævnte dig: %1$@";
"notification_new_messages" = "Nye beskeder"; "notification_new_messages" = "Nye beskeder";
"notification_reaction_body" = "Reagerede med%1$@"; "notification_reaction_body" = "Reagerede med%1$@";
@@ -737,16 +703,8 @@
"screen_change_server_error_unauthorized_homeserver_title" = "Kontoudbyder %1$@ er ikke tilladt."; "screen_change_server_error_unauthorized_homeserver_title" = "Kontoudbyder %1$@ er ikke tilladt.";
"screen_change_server_form_header" = "URL-adressen på din hjemmeserver"; "screen_change_server_form_header" = "URL-adressen på din hjemmeserver";
"screen_change_server_form_notice" = "Indtast en domæneadresse."; "screen_change_server_form_notice" = "Indtast en domæneadresse.";
"screen_change_server_navigation_title_login" = "Sign in";
"screen_change_server_navigation_title_register" = "Create account";
"screen_change_server_subtitle" = "Hvad er adressen på din server?"; "screen_change_server_subtitle" = "Hvad er adressen på din server?";
"screen_change_server_textfield_footer_login" = "If your account is provided by your company or a community, then change the account provider (example: companyname.com).";
"screen_change_server_textfield_footer_register" = "Create an account on matrix.org for free. If you want to create an account with a different provider, then change it accordingly (example: communityname.org).";
"screen_change_server_textfield_header" = "Account provider";
"screen_change_server_textfield_placeholder" = "example.com";
"screen_change_server_title" = "Vælg din server"; "screen_change_server_title" = "Vælg din server";
"screen_change_server_title_login" = "Enter your account provider";
"screen_change_server_title_register" = "Choose an account provider";
"screen_chat_backup_key_backup_action_disable" = "Slet nøglelager"; "screen_chat_backup_key_backup_action_disable" = "Slet nøglelager";
"screen_chat_backup_key_backup_action_enable" = "Aktivér sikkerhedskopiering"; "screen_chat_backup_key_backup_action_enable" = "Aktivér sikkerhedskopiering";
"screen_chat_backup_key_backup_description" = "Dette giver dig mulighed for at se din chathistorik på alle nye enheder og er påkrævet til sikkerhedskopiering af chats og digital identitet.%1$@ ."; "screen_chat_backup_key_backup_description" = "Dette giver dig mulighed for at se din chathistorik på alle nye enheder og er påkrævet til sikkerhedskopiering af chats og digital identitet.%1$@ .";
@@ -966,10 +924,6 @@
"screen_knock_requests_list_empty_state_title" = "Ingen ventende anmodning om at deltage"; "screen_knock_requests_list_empty_state_title" = "Ingen ventende anmodning om at deltage";
"screen_knock_requests_list_initial_loading_title" = "Indlæser anmodninger om at deltage..."; "screen_knock_requests_list_initial_loading_title" = "Indlæser anmodninger om at deltage...";
"screen_knock_requests_list_title" = "Anmodninger om at deltage"; "screen_knock_requests_list_title" = "Anmodninger om at deltage";
"screen_labs_enable_gallery" = "Gallery messages";
"screen_labs_enable_gallery_description" = "Send multiple images or videos in one go. Stable on mobile, but not yet supported by web.";
"screen_labs_enable_knocking" = "Ask to join";
"screen_labs_enable_knocking_description" = "Users can request access to a room that is not open for anyone to join. Stable on mobile, web implementation exists but is experimental.";
"screen_labs_enable_threads" = "Aktivér svar-tråde"; "screen_labs_enable_threads" = "Aktivér svar-tråde";
"screen_labs_enable_threads_description" = "Appen genstarter for at anvende denne ændring."; "screen_labs_enable_threads_description" = "Appen genstarter for at anvende denne ændring.";
"screen_labs_header_description" = "Prøv vores nyeste idéer under udvikling. Disse funktioner er ikke færdige; de ​​kan være ustabile og kan ændre sig."; "screen_labs_header_description" = "Prøv vores nyeste idéer under udvikling. Disse funktioner er ikke færdige; de ​​kan være ustabile og kan ændre sig.";
@@ -990,7 +944,6 @@
"screen_link_new_device_desktop_step3" = "Scan QR-koden med denne enhed"; "screen_link_new_device_desktop_step3" = "Scan QR-koden med denne enhed";
"screen_link_new_device_desktop_submit" = "Klar til at scanne"; "screen_link_new_device_desktop_submit" = "Klar til at scanne";
"screen_link_new_device_desktop_title" = "Åbn %1$@ på en stationær computer for at få QR-koden"; "screen_link_new_device_desktop_title" = "Åbn %1$@ på en stationær computer for at få QR-koden";
"screen_link_new_device_desktop_warning" = "Only scan a QR code after following the steps above on your own device. Never scan a code sent by another person.";
"screen_link_new_device_enter_number_error_numbers_do_not_match" = "Tallene stemmer ikke overens"; "screen_link_new_device_enter_number_error_numbers_do_not_match" = "Tallene stemmer ikke overens";
"screen_link_new_device_enter_number_notice" = "Indtast 2-cifret kode"; "screen_link_new_device_enter_number_notice" = "Indtast 2-cifret kode";
"screen_link_new_device_enter_number_subtitle" = "Dette vil bekræfte, at forbindelsen til din anden enhed er sikker."; "screen_link_new_device_enter_number_subtitle" = "Dette vil bekræfte, at forbindelsen til din anden enhed er sikker.";
@@ -1017,8 +970,6 @@
"screen_live_location_sheet_nobody_sharing" = "Ingen deler deres placering"; "screen_live_location_sheet_nobody_sharing" = "Ingen deler deres placering";
"screen_live_location_sheet_sharing_live_location" = "Deler placering live"; "screen_live_location_sheet_sharing_live_location" = "Deler placering live";
"screen_live_location_sheet_title" = "På kortet"; "screen_live_location_sheet_title" = "På kortet";
"screen_local_network_opt_in_subtitle" = "Your homeserver is on your local network. To connect, %1$@ needs permission to reach devices on this network.";
"screen_local_network_opt_in_title" = "Allow access to local network";
"screen_login_error_deactivated_account" = "Denne konto er blevet slettet."; "screen_login_error_deactivated_account" = "Denne konto er blevet slettet.";
"screen_login_error_invalid_credentials" = "Forkert brugernavn og/eller adgangskode"; "screen_login_error_invalid_credentials" = "Forkert brugernavn og/eller adgangskode";
"screen_login_error_invalid_user_id" = "Dette er ikke en gyldig brugeridentifikation. Forventet format: '@bruger:hjemmeserver.org'"; "screen_login_error_invalid_user_id" = "Dette er ikke en gyldig brugeridentifikation. Forventet format: '@bruger:hjemmeserver.org'";
@@ -1073,12 +1024,6 @@
"screen_missing_key_backup_step_4" = "Følg instruktionerne for at aktivere dit nøglelager"; "screen_missing_key_backup_step_4" = "Følg instruktionerne for at aktivere dit nøglelager";
"screen_missing_key_backup_step_5" = "Gå tilbage til %1$@"; "screen_missing_key_backup_step_5" = "Gå tilbage til %1$@";
"screen_missing_key_backup_title" = "Aktivér dit nøglelager, før du fortsætter til %1$@"; "screen_missing_key_backup_title" = "Aktivér dit nøglelager, før du fortsætter til %1$@";
"screen_moderation_and_safety_invites_heading" = "Invites";
"screen_moderation_and_safety_other_users_heading" = "Other users";
"screen_moderation_and_safety_share_presence_heading" = "Your appearance";
"screen_multi_account_announcement_action" = "Add account";
"screen_multi_account_announcement_description" = "Go to %1$@ to sign into another account. Then you can easily switch between them.";
"screen_multi_account_announcement_title" = "You can now add multiple accounts";
"screen_notification_optin_subtitle" = "Du kan ændre dine indstillinger senere."; "screen_notification_optin_subtitle" = "Du kan ændre dine indstillinger senere.";
"screen_notification_optin_title" = "Tillad notifikationer, og gå aldrig glip af en besked"; "screen_notification_optin_title" = "Tillad notifikationer, og gå aldrig glip af en besked";
"screen_notification_settings_additional_settings_section_title" = "Yderligere indstillinger"; "screen_notification_settings_additional_settings_section_title" = "Yderligere indstillinger";
@@ -1107,8 +1052,6 @@
"screen_notification_settings_mode_mentions" = "Omtaler"; "screen_notification_settings_mode_mentions" = "Omtaler";
"screen_notification_settings_notification_section_title" = "Giv mig besked om"; "screen_notification_settings_notification_section_title" = "Giv mig besked om";
"screen_notification_settings_room_mention_label" = "Giv mig besked ved @room"; "screen_notification_settings_room_mention_label" = "Giv mig besked ved @room";
"screen_notification_settings_show_all_activity_subtitle" = "Dots or number of unread messages";
"screen_notification_settings_show_all_activity_title" = "Show all activity in the room list";
"screen_notification_settings_sound_custom_fallback" = "Custom"; "screen_notification_settings_sound_custom_fallback" = "Custom";
"screen_notification_settings_sound_custom_sound_button_title" = "Custom sound..."; "screen_notification_settings_sound_custom_sound_button_title" = "Custom sound...";
"screen_notification_settings_sound_delete_sound_error_title" = "Error deleting file"; "screen_notification_settings_sound_delete_sound_error_title" = "Error deleting file";
@@ -1169,14 +1112,6 @@
"screen_polls_history_filter_ongoing" = "Igangværende"; "screen_polls_history_filter_ongoing" = "Igangværende";
"screen_polls_history_filter_past" = "Tidligere"; "screen_polls_history_filter_past" = "Tidligere";
"screen_polls_history_title" = "Afstemninger"; "screen_polls_history_title" = "Afstemninger";
"screen_ptt_settings_battery_optimization" = "Ignore battery optimisation";
"screen_ptt_settings_battery_optimization_description" = "Stay active in background";
"screen_ptt_settings_covert_mode" = "Covert mode";
"screen_ptt_settings_covert_mode_description" = "Mute all channels";
"screen_ptt_settings_lock_screen" = "Show on lock screen";
"screen_ptt_settings_lock_screen_description" = "Access from the lock screen";
"screen_ptt_settings_system_overlay" = "Enable system overlay";
"screen_ptt_settings_system_overlay_description" = "Access a floating action button";
"screen_push_history_title" = "Push-historik"; "screen_push_history_title" = "Push-historik";
"screen_qr_code_login_connecting_subtitle" = "Etablerer en sikker forbindelse"; "screen_qr_code_login_connecting_subtitle" = "Etablerer en sikker forbindelse";
"screen_qr_code_login_connection_note_secure_state_description" = "Der kunne ikke oprettes en sikker forbindelse til den nye enhed. Dine eksisterende enheder er stadig sikre, og du behøver ikke bekymre dig om dem."; "screen_qr_code_login_connection_note_secure_state_description" = "Der kunne ikke oprettes en sikker forbindelse til den nye enhed. Dine eksisterende enheder er stadig sikre, og du behøver ikke bekymre dig om dem.";
@@ -1321,14 +1256,7 @@
"screen_room_change_role_section_users" = "Medlemmer"; "screen_room_change_role_section_users" = "Medlemmer";
"screen_room_change_role_unsaved_changes_description" = "Du har ændringer, der ikke er gemt."; "screen_room_change_role_unsaved_changes_description" = "Du har ændringer, der ikke er gemt.";
"screen_room_change_role_unsaved_changes_title" = "Gem ændringer?"; "screen_room_change_role_unsaved_changes_title" = "Gem ændringer?";
"screen_room_confirm_removal_reason_label" = "Reason (optional)";
"screen_room_confirm_removal_reason_placeholder" = "Enter reason…";
"screen_room_confirm_removal_reason_supporting_text" = "(Optional)";
"screen_room_confirm_removal_title" = "Remove message?";
"screen_room_details_add_topic_title" = "Tilføj emne"; "screen_room_details_add_topic_title" = "Tilføj emne";
"screen_room_details_audio_push_to_talk" = "Push to talk";
"screen_room_details_audio_title" = "Room Audio";
"screen_room_details_audio_video_calls" = "Video calls";
"screen_room_details_badge_encrypted" = "Krypteret"; "screen_room_details_badge_encrypted" = "Krypteret";
"screen_room_details_badge_not_encrypted" = "Ikke krypteret"; "screen_room_details_badge_not_encrypted" = "Ikke krypteret";
"screen_room_details_badge_public" = "Offentligt rum"; "screen_room_details_badge_public" = "Offentligt rum";
@@ -1354,9 +1282,6 @@
"screen_room_details_profile_row_title" = "Profil"; "screen_room_details_profile_row_title" = "Profil";
"screen_room_details_requests_to_join_title" = "Anmodninger om at deltage"; "screen_room_details_requests_to_join_title" = "Anmodninger om at deltage";
"screen_room_details_roles_and_permissions" = "Roller og tilladelser"; "screen_room_details_roles_and_permissions" = "Roller og tilladelser";
"screen_room_details_room_audio_ptt" = "Push to talk";
"screen_room_details_room_audio_title" = "Room Audio";
"screen_room_details_room_audio_video_calls" = "Video calls";
"screen_room_details_room_name_label" = "Navn"; "screen_room_details_room_name_label" = "Navn";
"screen_room_details_security_and_privacy_title" = "Sikkerhed og privatliv"; "screen_room_details_security_and_privacy_title" = "Sikkerhed og privatliv";
"screen_room_details_security_title" = "Sikkerhed"; "screen_room_details_security_title" = "Sikkerhed";
@@ -1376,7 +1301,6 @@
"screen_room_invite_again_alert_message" = "Vil du invitere dem igen?"; "screen_room_invite_again_alert_message" = "Vil du invitere dem igen?";
"screen_room_invite_again_alert_title" = "Du er alene i denne samtale"; "screen_room_invite_again_alert_title" = "Du er alene i denne samtale";
"screen_room_live_location_banner" = "Deler placering live"; "screen_room_live_location_banner" = "Deler placering live";
"screen_room_maximum_messages_selected" = "Maximum messages selected";
"screen_room_member_details_block_alert_action" = "Bloker"; "screen_room_member_details_block_alert_action" = "Bloker";
"screen_room_member_details_block_alert_description" = "Blokerede brugere vil ikke være i stand til at sende dig beskeder, og alle deres beskeder vil blive skjult. Du kan fjerne blokeringen af dem når som helst."; "screen_room_member_details_block_alert_description" = "Blokerede brugere vil ikke være i stand til at sende dig beskeder, og alle deres beskeder vil blive skjult. Du kan fjerne blokeringen af dem når som helst.";
"screen_room_member_details_block_user" = "Bloker bruger"; "screen_room_member_details_block_user" = "Bloker bruger";
@@ -1416,9 +1340,8 @@
"screen_room_notification_settings_error_restoring_default" = "Gendannelse af standardtilstanden mislykkedes. Prøv igen."; "screen_room_notification_settings_error_restoring_default" = "Gendannelse af standardtilstanden mislykkedes. Prøv igen.";
"screen_room_notification_settings_error_setting_mode" = "Kunne ikke indstille tilstanden. Prøv igen."; "screen_room_notification_settings_error_setting_mode" = "Kunne ikke indstille tilstanden. Prøv igen.";
"screen_room_notification_settings_mentions_only_disclaimer" = "Din hjemmeserver understøtter ikke denne indstilling i krypterede rum, du får ikke besked i dette rum."; "screen_room_notification_settings_mentions_only_disclaimer" = "Din hjemmeserver understøtter ikke denne indstilling i krypterede rum, du får ikke besked i dette rum.";
"screen_room_notification_settings_mode_all_messages" = "All messages"; "screen_room_notification_settings_mode_all_messages" = "Alle beskeder";
"screen_room_notification_settings_mode_mentions_and_keywords" = "Mentions and replies only"; "screen_room_notification_settings_mode_mentions_and_keywords" = "Kun omtaler og nøgleord";
"screen_room_notification_settings_mode_mute" = "Mute";
"screen_room_notification_settings_room_custom_settings_title" = "Giv mig besked i dette rum for"; "screen_room_notification_settings_room_custom_settings_title" = "Giv mig besked i dette rum for";
"screen_room_pinned_banner_indicator" = "%1$@ af %2$@"; "screen_room_pinned_banner_indicator" = "%1$@ af %2$@";
"screen_room_pinned_banner_indicator_description" = "%1$@ Fastgjorte beskeder"; "screen_room_pinned_banner_indicator_description" = "%1$@ Fastgjorte beskeder";
@@ -1443,7 +1366,6 @@
"screen_room_roles_and_permissions_room_details" = "Detaljer om rummet"; "screen_room_roles_and_permissions_room_details" = "Detaljer om rummet";
"screen_room_roles_and_permissions_space_details" = "Detaljer om klynge"; "screen_room_roles_and_permissions_space_details" = "Detaljer om klynge";
"screen_room_roles_and_permissions_title" = "Roller og tilladelser"; "screen_room_roles_and_permissions_title" = "Roller og tilladelser";
"screen_room_select_error_cannot_load_rooms" = "The room list associated with this account cannot be loaded.";
"screen_room_single_knock_request_accept_button_title" = "Accepter"; "screen_room_single_knock_request_accept_button_title" = "Accepter";
"screen_room_single_knock_request_title" = "%1$@ ønsker at deltage i dette rum"; "screen_room_single_knock_request_title" = "%1$@ ønsker at deltage i dette rum";
"screen_room_single_knock_request_view_button_title" = "Vis"; "screen_room_single_knock_request_view_button_title" = "Vis";
@@ -1480,8 +1402,6 @@
"screen_roomlist_filter_invites_empty_state_title" = "Du har ingen afventende invitationer."; "screen_roomlist_filter_invites_empty_state_title" = "Du har ingen afventende invitationer.";
"screen_roomlist_filter_low_priority" = "Lav prioritet"; "screen_roomlist_filter_low_priority" = "Lav prioritet";
"screen_roomlist_filter_low_priority_empty_state_title" = "Du har endnu ingen chats med lav prioritet"; "screen_roomlist_filter_low_priority_empty_state_title" = "Du har endnu ingen chats med lav prioritet";
"screen_roomlist_filter_mention" = "Mention";
"screen_roomlist_filter_mention_empty_state_title" = "You don’t have any unread mentions";
"screen_roomlist_filter_mixed_empty_state_subtitle" = "Du kan fravælge filtre for at se dine andre samtaler"; "screen_roomlist_filter_mixed_empty_state_subtitle" = "Du kan fravælge filtre for at se dine andre samtaler";
"screen_roomlist_filter_mixed_empty_state_title" = "Du har ingen samtaler til dette valg"; "screen_roomlist_filter_mixed_empty_state_title" = "Du har ingen samtaler til dette valg";
"screen_roomlist_filter_people" = "Brugere"; "screen_roomlist_filter_people" = "Brugere";
@@ -1568,13 +1488,10 @@
"screen_session_verification_request_title" = "Anmodet om verifikation"; "screen_session_verification_request_title" = "Anmodet om verifikation";
"screen_session_verification_they_dont_match" = "De matcher ikke"; "screen_session_verification_they_dont_match" = "De matcher ikke";
"screen_session_verification_they_match" = "De matcher"; "screen_session_verification_they_match" = "De matcher";
"screen_session_verification_unavailable_subtitle" = "Please use another device or recovery key.";
"screen_session_verification_unavailable_title" = "Verification with this device is currently unavailable";
"screen_session_verification_use_another_device_subtitle" = "Sørg for, at du har appen åben på den anden enhed, før du starter verifikationen herfra."; "screen_session_verification_use_another_device_subtitle" = "Sørg for, at du har appen åben på den anden enhed, før du starter verifikationen herfra.";
"screen_session_verification_use_another_device_title" = "Åbn appen på en anden bekræftet enhed"; "screen_session_verification_use_another_device_title" = "Åbn appen på en anden bekræftet enhed";
"screen_session_verification_user_initiator_subtitle" = "For ekstra sikkerhed, verificér denne bruger ved at sammenligne et sæt emojier på jeres enheder. Gør dette ved at bruge en kommunikationsmetode i stoler på."; "screen_session_verification_user_initiator_subtitle" = "For ekstra sikkerhed, verificér denne bruger ved at sammenligne et sæt emojier på jeres enheder. Gør dette ved at bruge en kommunikationsmetode i stoler på.";
"screen_session_verification_user_initiator_title" = "Verificér denne bruger?"; "screen_session_verification_user_initiator_title" = "Verificér denne bruger?";
"screen_session_verification_user_requesting_verification" = "User requesting verification:";
"screen_session_verification_user_responder_subtitle" = "For ekstra sikkerhed ønsker en anden bruger at bekræfte din digitale identitet. I vil blive vist et sæt emojis, der skal sammenlignes."; "screen_session_verification_user_responder_subtitle" = "For ekstra sikkerhed ønsker en anden bruger at bekræfte din digitale identitet. I vil blive vist et sæt emojis, der skal sammenlignes.";
"screen_session_verification_waiting_another_device_subtitle" = "Du burde se en popup på den anden enhed. Start verifikationen derfra nu."; "screen_session_verification_waiting_another_device_subtitle" = "Du burde se en popup på den anden enhed. Start verifikationen derfra nu.";
"screen_session_verification_waiting_another_device_title" = "Start verifikation på den anden enhed"; "screen_session_verification_waiting_another_device_title" = "Start verifikation på den anden enhed";
@@ -1583,15 +1500,6 @@
"screen_session_verification_waiting_subtitle" = "Når du er blevet accepteret, kan du fortsætte med verifikationen."; "screen_session_verification_waiting_subtitle" = "Når du er blevet accepteret, kan du fortsætte med verifikationen.";
"screen_session_verification_waiting_to_accept_subtitle" = "Accepter anmodningen om at starte bekræftelsesprocessen i din anden session for at fortsætte."; "screen_session_verification_waiting_to_accept_subtitle" = "Accepter anmodningen om at starte bekræftelsesprocessen i din anden session for at fortsætte.";
"screen_session_verification_waiting_to_accept_title" = "Venter på at acceptere anmodningen"; "screen_session_verification_waiting_to_accept_title" = "Venter på at acceptere anmodningen";
"screen_settings_add_account" = "Add account";
"screen_settings_user_status_away" = "Away";
"screen_settings_user_status_be_right_back" = "Be right back";
"screen_settings_user_status_custom" = "Custom…";
"screen_settings_user_status_custom_hint" = "Custom status…";
"screen_settings_user_status_focus_time" = "Focus time";
"screen_settings_user_status_in_a_meeting" = "In a meeting";
"screen_settings_user_status_on_the_road" = "On the road";
"screen_settings_user_status_placeholder" = "What's your status?";
"screen_share_location_live_location_disclaimer_title" = "Din live-positionshistorik gemmes i rummet og er synlig for medlemmerne, når sessionen er afsluttet."; "screen_share_location_live_location_disclaimer_title" = "Din live-positionshistorik gemmes i rummet og er synlig for medlemmerne, når sessionen er afsluttet.";
"screen_share_location_live_location_duration_picker_title" = "Vælg, hvor længe du vil dele din aktuelle position."; "screen_share_location_live_location_duration_picker_title" = "Vælg, hvor længe du vil dele din aktuelle position.";
"screen_share_location_live_location_missing_permissions" = "You do not have permissions to share your live location in this room"; "screen_share_location_live_location_missing_permissions" = "You do not have permissions to share your live location in this room";
@@ -1606,7 +1514,6 @@
"screen_signed_out_reason_2" = "Du har slettet sessionen fra en anden session"; "screen_signed_out_reason_2" = "Du har slettet sessionen fra en anden session";
"screen_signed_out_reason_3" = "Din serveradministrator har lukket for din adgang"; "screen_signed_out_reason_3" = "Din serveradministrator har lukket for din adgang";
"screen_signed_out_subtitle" = "Du er muligvis blevet logget ud på grund af en af nedenstående årsager. Log ind igen for at fortsætte med at bruge%@."; "screen_signed_out_subtitle" = "Du er muligvis blevet logget ud på grund af en af nedenstående årsager. Log ind igen for at fortsætte med at bruge%@.";
"screen_signed_out_subtitle_v2" = "This device was removed for one of the reasons listed below. Please sign in again to connect this device to your account.";
"screen_signed_out_title" = "Du er logget ud"; "screen_signed_out_title" = "Du er logget ud";
"screen_signout_confirmation_dialog_content" = "Er du sikker på, at ønsker at fjerne denne enhed?"; "screen_signout_confirmation_dialog_content" = "Er du sikker på, at ønsker at fjerne denne enhed?";
"screen_signout_confirmation_dialog_submit" = "Fjern denne enhed"; "screen_signout_confirmation_dialog_submit" = "Fjern denne enhed";
@@ -1783,7 +1690,6 @@
"troubleshoot_notifications_test_push_loop_back_failure_2" = "Fejl: %1$@."; "troubleshoot_notifications_test_push_loop_back_failure_2" = "Fejl: %1$@.";
"troubleshoot_notifications_test_push_loop_back_failure_3" = "Fejl, kan ikke teste push."; "troubleshoot_notifications_test_push_loop_back_failure_3" = "Fejl, kan ikke teste push.";
"troubleshoot_notifications_test_push_loop_back_failure_4" = "Fejl, timeout venter på push."; "troubleshoot_notifications_test_push_loop_back_failure_4" = "Fejl, timeout venter på push.";
"troubleshoot_notifications_test_push_loop_back_failure_rate_limit" = "Error: the push gateway is rate limiting this device, so notifications won't be reliable. Please set up a different push gateway.";
"troubleshoot_notifications_test_push_loop_back_success" = "Push loop back tog %1$d ms."; "troubleshoot_notifications_test_push_loop_back_success" = "Push loop back tog %1$d ms.";
"troubleshoot_notifications_test_push_loop_back_title" = "Afprøv Push loop back"; "troubleshoot_notifications_test_push_loop_back_title" = "Afprøv Push loop back";
"troubleshoot_notifications_test_unified_push_description" = "Sørg for, at UnifiedPush-distributører er tilgængelige."; "troubleshoot_notifications_test_unified_push_description" = "Sørg for, at UnifiedPush-distributører er tilgængelige.";

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