Merge branch 'develop' of ssh://github.com/element-hq/element-web into t3chguy/pnpm-audit

# Conflicts:
#	package.json
#	pnpm-lock.yaml
This commit is contained in:
Michael Telatynski 2026-04-17 09:10:24 +01:00
commit 2fc56cfe07
No known key found for this signature in database
GPG Key ID: A2B008A5F49F5D0D
252 changed files with 24603 additions and 18820 deletions

15
.github/renovate.json vendored
View File

@ -5,8 +5,8 @@
"packageRules": [
{
"groupName": "testcontainers docker digests",
"groupSlug": "{{manager}}-docker-digests",
"matchManagers": ["custom.regex"],
"groupSlug": "testcontainers-docker",
"matchDepTypes": ["testcontainers-docker"],
"matchPackageNames": ["*"]
}
],
@ -17,7 +17,16 @@
"versioningTemplate": "loose",
"description": "Update testcontainers docker digests",
"managerFilePatterns": ["**/testcontainers/*.ts"],
"matchStrings": ["\\s+\"(?<depName>[^@]+):(?<currentValue>[^@]+)@(?<currentDigest>sha256:[a-f0-9]+)\""]
"matchStrings": ["\\s+\"(?<depName>[^@]+):(?<currentValue>[^@]+)@(?<currentDigest>sha256:[a-f0-9]+)\""],
"depTypeTemplate": "testcontainers-docker"
},
{
"customType": "jsonata",
"managerFilePatterns": ["/(^|/)package\\.json$/"],
"fileFormat": "json",
"matchStrings": ["hakDependencies.$each(function($v, $k) { { 'packageName': $k, 'currentValue': $v } })"],
"datasourceTemplate": "npm",
"depTypeTemplate": "hak"
}
]
}

View File

@ -54,6 +54,8 @@ jobs:
outputs:
num-runners: ${{ env.NUM_RUNNERS }}
runners-matrix: ${{ steps.runner-vars.outputs.matrix }}
# Skip pull_request runs on renovate PRs to speed up CI time, delegating to the full run in merge queue
skip: ${{ inputs.skip || (github.event_name == 'pull_request' && startsWith(github.head_ref, 'renovate/')) }}
steps:
- name: Checkout code
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
@ -102,7 +104,7 @@ jobs:
playwright_ew:
name: "Run Tests [${{ matrix.project }}] ${{ matrix.runner }}/${{ needs.build_ew.outputs.num-runners }}"
needs: build_ew
if: inputs.skip != true
if: needs.build_ew.outputs.skip == 'false'
runs-on: ubuntu-24.04
permissions:
actions: read
@ -182,7 +184,7 @@ jobs:
downstream-modules:
name: Downstream Playwright tests [element-modules]
needs: build_ew
if: inputs.skip != true && github.event_name == 'merge_group'
if: needs.build_ew.outputs.skip == 'false' && github.event_name == 'merge_group'
uses: element-hq/element-modules/.github/workflows/reusable-playwright-tests.yml@main # zizmor: ignore[unpinned-uses]
with:
webapp-artifact: webapp
@ -192,7 +194,7 @@ jobs:
name: "Prepare Element Desktop"
uses: ./.github/workflows/build_desktop_prepare.yaml
needs: build_ew
if: inputs.skip != true
if: needs.build_ew.outputs.skip == 'false'
permissions:
contents: read
with:
@ -204,7 +206,6 @@ jobs:
needs: prepare_ed
name: "Desktop Windows"
uses: ./.github/workflows/build_desktop_windows.yaml
if: inputs.skip != true
strategy:
matrix:
arch: [x64, ia32, arm64]
@ -216,7 +217,6 @@ jobs:
needs: prepare_ed
name: "Desktop Linux"
uses: ./.github/workflows/build_desktop_linux.yaml
if: inputs.skip != true
strategy:
matrix:
sqlcipher: [system, static]
@ -236,13 +236,13 @@ jobs:
needs: prepare_ed
name: "Desktop macOS"
uses: ./.github/workflows/build_desktop_macos.yaml
if: inputs.skip != true
with:
blob_report: true
complete:
name: end-to-end-tests
needs:
- build_ew
- playwright_ew
- downstream-modules
- prepare_ed
@ -253,25 +253,25 @@ jobs:
runs-on: ubuntu-24.04
steps:
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
if: inputs.skip != true
if: needs.build_ew.outputs.skip == 'false'
with:
persist-credentials: false
repository: element-hq/element-web
- uses: pnpm/action-setup@fc06bc1257f339d1d5d8b3a19a8cae5388b55320 # v5
if: inputs.skip != true
if: needs.build_ew.outputs.skip == 'false'
- uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f # v6
if: inputs.skip != true
if: needs.build_ew.outputs.skip == 'false'
with:
cache: "pnpm"
node-version: "lts/*"
- name: Install dependencies
if: inputs.skip != true
if: needs.build_ew.outputs.skip == 'false'
run: pnpm install --frozen-lockfile
- name: Download blob reports from GitHub Actions Artifacts
if: inputs.skip != true
if: needs.build_ew.outputs.skip == 'false'
uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8
with:
pattern: blob-report-*
@ -279,7 +279,7 @@ jobs:
merge-multiple: true
- name: Merge into HTML Report
if: inputs.skip != true
if: needs.build_ew.outputs.skip == 'false'
run: |
pnpm playwright merge-reports \
--config=playwright-merge.config.ts \
@ -291,7 +291,7 @@ jobs:
# Upload the HTML report even if one of our reporters fails, this can happen when stale screenshots are detected
- name: Upload HTML report
if: always() && inputs.skip != true
if: always() && needs.build_ew.outputs.skip == 'false'
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7
with:
name: html-report

View File

@ -133,7 +133,7 @@ jobs:
# This allows contributors to test changes to the dockerbuild image within a pull request
- name: Build docker image
uses: docker/build-push-action@d08e5c354a6adb9ed34480a06d141179aa583294 # v7
uses: docker/build-push-action@bcafcacb16a39f128d818304e6c9c0c18556b85f # v7
if: steps.changed_files.outputs.any_modified == 'true'
with:
file: apps/desktop/dockerbuild/Dockerfile

View File

@ -111,7 +111,7 @@ jobs:
running-workflow-name: "Build & Deploy develop.element.io"
repo-token: ${{ secrets.GITHUB_TOKEN }}
wait-interval: 10
check-regexp: ^((?!SonarCloud|SonarQube|issue|board|label|Release|prepare|GitHub Pages|Upload|Netlify).)*$
check-regexp: ^((?!SonarCloud|SonarQube|issue|board|label|Release|prepare|GitHub Pages|Upload|Netlify|Report).)*$
# We keep the latest develop.tar.gz on R2 instead of relying on the github artifact uploaded earlier
# as the expires after 24h and requires auth to download.

View File

@ -50,7 +50,7 @@ jobs:
run: "pnpm install --frozen-lockfile"
- name: Login to GitHub Container Registry
uses: docker/login-action@b45d80f862d83dbcd57f89517bcf500b2ab88fb2 # v4
uses: docker/login-action@4907a6ddec9925e35a0a9e82d7399ccc52663121 # v4
with:
registry: ghcr.io
username: ${{ github.repository_owner }}

View File

@ -39,7 +39,7 @@ jobs:
- name: Build and load
id: test-build
uses: docker/build-push-action@d08e5c354a6adb9ed34480a06d141179aa583294 # v7
uses: docker/build-push-action@bcafcacb16a39f128d818304e6c9c0c18556b85f # v7
with:
context: .
file: apps/web/Dockerfile
@ -97,14 +97,14 @@ jobs:
latest=${{ contains(github.ref_name, '-rc.') && 'false' || 'auto' }}
- name: Login to Docker Hub
uses: docker/login-action@b45d80f862d83dbcd57f89517bcf500b2ab88fb2 # v4
uses: docker/login-action@4907a6ddec9925e35a0a9e82d7399ccc52663121 # v4
if: github.event_name != 'pull_request'
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: Login to GitHub Container Registry
uses: docker/login-action@b45d80f862d83dbcd57f89517bcf500b2ab88fb2 # v4
uses: docker/login-action@4907a6ddec9925e35a0a9e82d7399ccc52663121 # v4
if: github.event_name != 'pull_request'
with:
registry: ghcr.io
@ -140,7 +140,7 @@ jobs:
services/web-repositories/secret/data/oci.element.io password | OCI_PASSWORD ;
- name: Login to oci.element.io Registry
uses: docker/login-action@b45d80f862d83dbcd57f89517bcf500b2ab88fb2 # v4
uses: docker/login-action@4907a6ddec9925e35a0a9e82d7399ccc52663121 # v4
if: github.event_name != 'pull_request'
with:
registry: oci-push.vpn.infra.element.io
@ -149,7 +149,7 @@ jobs:
- name: Build and push
id: build-and-push
uses: docker/build-push-action@d08e5c354a6adb9ed34480a06d141179aa583294 # v7
uses: docker/build-push-action@bcafcacb16a39f128d818304e6c9c0c18556b85f # v7
if: github.event_name != 'pull_request'
with:
context: .

View File

@ -36,7 +36,7 @@ jobs:
run: pnpm run docs:build
- name: Upload artifact
uses: actions/upload-pages-artifact@7b1f4a764d45c48632c6b24a0339c27f5614fb0b # v4
uses: actions/upload-pages-artifact@fc324d3547104276b827a68afc52ff2a11cc49c9 # v5
with:
path: ./docs/.vitepress/dist

View File

@ -26,7 +26,7 @@ jobs:
path: storybook-static
- name: 🚀 Deploy to Cloudflare Pages
uses: cloudflare/wrangler-action@da0e0dfe58b7a431659754fdf3f186c529afbe65 # v3
uses: cloudflare/wrangler-action@9acf94ace14e7dc412b076f2c5c20b8ce93c79cd # v3
with:
apiToken: ${{ secrets.CF_PAGES_TOKEN }}
accountId: ${{ secrets.CF_PAGES_ACCOUNT_ID }}

View File

@ -87,7 +87,7 @@ jobs:
persist-credentials: false
- name: Run zizmor
uses: zizmorcore/zizmor-action@71321a20a9ded102f6e9ce5718a2fcec2c4f70d8 # v0.5.2
uses: zizmorcore/zizmor-action@b1d7e1fb5de872772f31590499237e7cce841e8e # v0.5.3
i18n:
strategy:
@ -125,7 +125,9 @@ jobs:
# Dummy job to simplify branch protections
ci:
name: Static Analysis
needs: [lint, i18n]
needs: [lint, i18n, zizmor]
if: always()
runs-on: ubuntu-24.04
steps:
- run: echo "Ok"
- if: contains(needs.*.result, 'failure') || contains(needs.*.result, 'cancelled')
run: exit 1

View File

@ -105,7 +105,7 @@
"typescript": "5.9.3"
},
"hakDependencies": {
"matrix-seshat": "4.0.1"
"matrix-seshat": "4.2.0"
},
"packageManager": "pnpm@10.33.0+sha512.10568bb4a6afb58c9eb3630da90cc9516417abebd3fabbe6739f0ae795728da1491e9db5a544c76ad8eb7570f5c4bb3d6c637b2cb41bfdcdb47fa823c8649319"
}

View File

@ -22,7 +22,9 @@
"about": "关于",
"brand_help": "%(brand)s帮助",
"help": "帮助",
"preferences": "偏好"
"no": "不",
"preferences": "偏好",
"yes": "是"
},
"confirm_quit": "你确定要退出吗?",
"edit_menu": {
@ -30,9 +32,20 @@
"speech_start_speaking": "开始讲话",
"speech_stop_speaking": "停止讲话"
},
"eol": {
"no_more_updates": "您正在使用不受支持的macOS版本。请升级以获取%(brand)s 更新。",
"title": "系统不支持",
"warning": "您正在使用不受支持的macOS版本。请升级系统以确保%(brand)s 能持续正常运行。"
},
"file_menu": {
"label": "文件"
},
"icon_overlay": {
"description_error": "错误",
"description_notifications": {
"other": "您有%(count)s 条未读通知。"
}
},
"menu": {
"hide": "隐藏",
"hide_others": "隐藏其他",
@ -49,6 +62,21 @@
"save_image_as_error_description": "图片保存失败",
"save_image_as_error_title": "图片保存失败"
},
"store": {
"error": {
"backend_changed": "清除数据并重新加载?",
"backend_changed_detail": "无法从系统密钥环访问密钥,该密钥似乎已被更改。",
"backend_changed_title": "数据库加载失败",
"backend_no_encryption": "您的系统支持密钥环,但加密功能不可用。",
"backend_no_encryption_detail": "Electron检测到您的密钥环%(backend)s 不支持加密功能。请确保已安装该密钥环。若已安装,请重启设备后重试。您也可选择允许%(brand)s 使用较弱的加密方式。",
"backend_no_encryption_title": "不支持加密",
"unsupported_keyring": "您的系统存在未受支持的密钥环,这意味着无法打开数据库。",
"unsupported_keyring_detail": "Electron的密钥环检测未找到受支持的后端。您可以尝试通过命令行参数启动%(brand)s 来手动配置后端,此操作仅需执行一次。详情请参阅:%(link)s 。",
"unsupported_keyring_title": "系统不支持",
"unsupported_keyring_use_basic_text": "使用较弱的加密",
"unsupported_keyring_use_plaintext": "不使用加密"
}
},
"view_menu": {
"actual_size": "实际大小",
"toggle_developer_tools": "切换开发者工具",

View File

@ -101,7 +101,7 @@
"react-transition-group": "^4.4.1",
"rfc4648": "^1.4.0",
"sanitize-filename": "^1.6.3",
"sanitize-html": "2.17.2",
"sanitize-html": "2.17.3",
"tar-js": "^0.3.0",
"ua-parser-js": "1.0.40",
"uuid": "^13.0.0",

View File

@ -91,7 +91,7 @@ export default defineConfig<{}, WorkerOptions>({
trace: "on-first-retry",
},
webServer: {
command: process.env.CI ? "npx serve -p 8080 -L ./webapp" : "pnpm start",
command: process.env.CI ? "npx serve -p 8080 -L ./webapp" : "nx --outputStyle stream start",
url: `${baseURL}/config.json`,
reuseExistingServer: true,
timeout: (process.env.CI ? 30 : 120) * 1000,

View File

@ -21,7 +21,6 @@ import {
waitForVerificationRequest,
} from "./utils";
import { type Bot } from "../../pages/bot";
import { Toasts } from "../../pages/toasts.ts";
import type { ElementAppPage } from "../../pages/ElementAppPage.ts";
test.describe("Device verification", { tag: "@no-webkit" }, () => {
@ -82,7 +81,11 @@ test.describe("Device verification", { tag: "@no-webkit" }, () => {
);
// Regression test for https://github.com/element-hq/element-web/issues/29110
test("No toast after verification, even if the secrets take a while to arrive", async ({ page, credentials }) => {
test("No toast after verification, even if the secrets take a while to arrive", async ({
page,
credentials,
toasts,
}) => {
// Before we log in, the bot creates an encrypted room, so that we can test the toast behaviour that only happens
// when we are in an encrypted room.
await aliceBotClient.createRoom({
@ -121,7 +124,6 @@ test.describe("Device verification", { tag: "@no-webkit" }, () => {
await infoDialog.getByRole("button", { name: "Got it" }).click();
// There should be no toast (other than the notifications one)
const toasts = new Toasts(page);
await toasts.rejectToast("Notifications");
await toasts.assertNoToasts();

View File

@ -24,7 +24,6 @@ import type { IConfigOptions } from "../src/IConfigOptions";
import { type Credentials } from "./plugins/homeserver";
import { ElementAppPage } from "./pages/ElementAppPage";
import { Crypto } from "./pages/crypto";
import { Toasts } from "./pages/toasts";
import { Bot, type CreateBotOpts } from "./pages/bot";
import { Webserver } from "./plugins/webserver";
import { type WorkerOptions, type Services, test as base } from "./services";
@ -52,7 +51,6 @@ export interface TestFixtures extends BaseTestFixtures {
crypto: Crypto;
room?: { roomId: string };
toasts: Toasts;
uut?: Locator; // Unit Under Test, useful place to refer a prepared locator
botCreateOpts: CreateBotOpts;
bot: Bot;
@ -92,9 +90,6 @@ export const test = base.extend<TestFixtures>({
crypto: async ({ page, homeserver, request }, use) => {
await use(new Crypto(page, homeserver, request));
},
toasts: async ({ page }, use) => {
await use(new Toasts(page));
},
botCreateOpts: {},
bot: async ({ page, homeserver, botCreateOpts, user }, use, testInfo) => {

View File

@ -1,53 +0,0 @@
/*
Copyright 2024 New Vector Ltd.
Copyright 2023 The Matrix.org Foundation C.I.C.
SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only OR LicenseRef-Element-Commercial
Please see LICENSE files in the repository root for full details.
*/
import { type Page, expect, type Locator } from "@playwright/test";
export class Toasts {
public constructor(private readonly page: Page) {}
/**
* Assert that a toast with the given title exists, and return it
*
* @param expectedTitle - Expected title of the toast
* @param timeout Time to retry the assertion for in milliseconds. Defaults to `timeout` in `TestConfig.expect`.
* @returns the Locator for the matching toast
*/
public async getToast(expectedTitle: string, timeout?: number): Promise<Locator> {
const toast = this.page.locator(".mx_Toast_toast", { hasText: expectedTitle }).first();
await expect(toast).toBeVisible({ timeout });
return toast;
}
/**
* Assert that no toasts exist
*/
public async assertNoToasts(): Promise<void> {
await expect(this.page.locator(".mx_Toast_toast")).not.toBeVisible();
}
/**
* Accept a toast with the given title, only works for the first toast in the stack
*
* @param expectedTitle - Expected title of the toast
*/
public async acceptToast(expectedTitle: string): Promise<void> {
const toast = await this.getToast(expectedTitle);
await toast.locator('.mx_Toast_buttons button[data-kind="primary"]').click();
}
/**
* Reject a toast with the given title, only works for the first toast in the stack
*
* @param expectedTitle - Expected title of the toast
*/
public async rejectToast(expectedTitle: string): Promise<void> {
const toast = await this.getToast(expectedTitle);
await toast.locator('.mx_Toast_buttons button[data-kind="secondary"]').click();
}
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 114 KiB

After

Width:  |  Height:  |  Size: 114 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 76 KiB

After

Width:  |  Height:  |  Size: 76 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 63 KiB

After

Width:  |  Height:  |  Size: 63 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 63 KiB

After

Width:  |  Height:  |  Size: 61 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 165 KiB

After

Width:  |  Height:  |  Size: 167 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 116 KiB

After

Width:  |  Height:  |  Size: 116 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 268 KiB

After

Width:  |  Height:  |  Size: 268 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 106 KiB

After

Width:  |  Height:  |  Size: 106 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 35 KiB

After

Width:  |  Height:  |  Size: 35 KiB

View File

@ -834,18 +834,6 @@ legend {
}
}
@define-mixin ButtonResetDefault {
appearance: none;
background: none;
border: none;
padding: 0;
margin: 0;
font-size: inherit;
font-family: inherit;
line-height: inherit;
cursor: pointer;
}
@define-mixin LegacyCallButton {
box-sizing: border-box;
font-weight: var(--cpd-font-weight-semibold);

View File

@ -68,7 +68,6 @@
@import "./structures/_LeftPanel.pcss";
@import "./structures/_MainSplit.pcss";
@import "./structures/_MatrixChat.pcss";
@import "./structures/_MessagePanel.pcss";
@import "./structures/_NonUrgentToastContainer.pcss";
@import "./structures/_PictureInPictureDragger.pcss";
@import "./structures/_QuickSettingsButton.pcss";

View File

@ -13,8 +13,7 @@ Please see LICENSE files in the repository root for full details.
top: 0;
}
.mx_ShareDialogButtons_button {
@mixin ButtonResetDefault;
button.mx_ShareDialogButtons_button {
height: 24px;
width: 24px;
border-radius: 50%;

View File

@ -1,29 +0,0 @@
/*
Copyright 2024 New Vector Ltd.
Copyright 2023 The Matrix.org Foundation C.I.C.
SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only OR LicenseRef-Element-Commercial
Please see LICENSE files in the repository root for full details.
*/
.mx_MessagePanel_myReadMarker {
height: 0;
margin: 0;
padding: 0;
border: 0;
hr {
border-top: solid 1px $accent;
border-bottom: solid 1px $accent;
margin-top: 0;
position: relative;
top: -1px;
z-index: 1;
will-change: width;
transition:
width 400ms easeinsine 1s,
opacity 400ms easeinsine 1s;
width: 99%;
opacity: 1;
}
}

View File

@ -9,6 +9,19 @@ Please see LICENSE files in the repository root for full details.
.mx_AccessibleButton {
cursor: pointer;
&:where(button) {
/* Clear default button styling */
appearance: none;
background: none;
border: none;
padding: 0;
margin: 0;
font-size: inherit;
font-family: inherit;
line-height: inherit;
box-sizing: content-box;
}
&.mx_AccessibleButton_disabled {
cursor: not-allowed;

View File

@ -28,7 +28,6 @@ Please see LICENSE files in the repository root for full details.
/* using em here to adapt to the local font size */
width: 1em;
height: 1em;
cursor: pointer;
padding-left: 12px;
padding-right: 10px;
display: block;

View File

@ -12,12 +12,6 @@ Please see LICENSE files in the repository root for full details.
gap: 32px;
display: flex;
flex-direction: column;
> form {
gap: 32px;
display: flex;
flex-direction: column;
}
}
.mx_SettingsSubsection_description {

View File

@ -14,12 +14,13 @@ Please see LICENSE files in the repository root for full details.
color: $links;
}
form:not(.mx_EncryptionUserSettingsTab form) {
form {
display: flex;
flex-direction: column;
gap: $spacing-8;
gap: var(--cpd-space-3x);
flex-grow: 1;
}
// never want full width buttons
// event when other content is 100% width
.mx_AccessibleButton {

View File

@ -18,7 +18,6 @@ import {
decodeBase64,
} from "matrix-js-sdk/src/matrix";
import { type AESEncryptedSecretStoragePayload } from "matrix-js-sdk/src/types";
import { type QueryDict } from "matrix-js-sdk/src/utils";
import { logger } from "matrix-js-sdk/src/logger";
import { type IMatrixClientCreds, MatrixClientPeg, type MatrixClientPegAssignOpts } from "./MatrixClientPeg";
@ -81,6 +80,7 @@ import {
} from "./utils/tokens/tokens";
import { TokenRefresher } from "./utils/oidc/TokenRefresher";
import { checkBrowserSupport } from "./SupportedBrowser";
import { type URLParams } from "./vector/url_utils.ts";
const HOMESERVER_URL_KEY = "mx_hs_url";
const ID_SERVER_URL_KEY = "mx_is_url";
@ -148,7 +148,7 @@ interface ILoadSessionOpts {
guestIsUrl?: string;
ignoreGuest?: boolean;
defaultDeviceDisplayName?: string;
fragmentQueryParams?: QueryDict;
urlParams?: URLParams;
abortSignal?: AbortSignal;
}
@ -187,7 +187,7 @@ export async function loadSession(opts: ILoadSessionOpts = {}): Promise<boolean>
let enableGuest = opts.enableGuest || false;
const guestHsUrl = opts.guestHsUrl;
const guestIsUrl = opts.guestIsUrl;
const fragmentQueryParams = opts.fragmentQueryParams || {};
const urlParams = opts.urlParams;
const defaultDeviceDisplayName = opts.defaultDeviceDisplayName;
if (enableGuest && !guestHsUrl) {
@ -195,12 +195,12 @@ export async function loadSession(opts: ILoadSessionOpts = {}): Promise<boolean>
enableGuest = false;
}
if (enableGuest && guestHsUrl && fragmentQueryParams.guest_user_id && fragmentQueryParams.guest_access_token) {
if (enableGuest && guestHsUrl && urlParams?.guest?.guest_user_id && urlParams?.guest?.guest_access_token) {
logger.log("Using guest access credentials");
await doSetLoggedIn(
{
userId: fragmentQueryParams.guest_user_id as string,
accessToken: fragmentQueryParams.guest_access_token as string,
userId: urlParams.guest.guest_user_id,
accessToken: urlParams.guest.guest_access_token,
homeserverUrl: guestHsUrl,
identityServerUrl: guestIsUrl,
guest: true,
@ -264,38 +264,43 @@ export async function getStoredSessionOwner(): Promise<[string, boolean] | [null
* If query string includes OIDC authorization code flow parameters attempt to login using oidc flow
* Else, we may be returning from SSO - attempt token login
*
* @param {Object} queryParams string->string map of the
* query-parameters extracted from the real query-string of the starting
* URI.
* @param urlParams the parameters read in at app load time from the url
*
* @param {string} defaultDeviceDisplayName
* @param {string} fragmentAfterLogin path to go to after a successful login, only used for "Try again"
* @param defaultDeviceDisplayName
* @param fragmentAfterLogin path to go to after a successful login, only used for "Try again"
*
* @returns {Promise} promise which resolves to true if we completed the delegated auth login
* @returns promise which resolves to true if we completed the delegated auth login
* else false
*/
export async function attemptDelegatedAuthLogin(
queryParams: QueryDict,
urlParams: URLParams,
defaultDeviceDisplayName?: string,
fragmentAfterLogin?: string,
): Promise<boolean> {
if (queryParams.code && queryParams.state) {
console.log("We have OIDC params - attempting OIDC login");
return attemptOidcNativeLogin(queryParams);
if (urlParams.oidc_fragment) {
return attemptOidcNativeLogin(urlParams.oidc_fragment, "fragment");
} else if (urlParams.oidc_query) {
return attemptOidcNativeLogin(urlParams.oidc_query, "query");
}
return attemptTokenLogin(queryParams, defaultDeviceDisplayName, fragmentAfterLogin);
return attemptTokenLogin(urlParams["legacy_sso"], defaultDeviceDisplayName, fragmentAfterLogin);
}
/**
* Attempt to login by completing OIDC authorization code flow
* @param queryParams string->string map of the query-parameters extracted from the real query-string of the starting URI.
* @returns Promise that resolves to true when login succceeded, else false
* @param urlParams subset of app-load url parameters relating to oidc auth
* @param responseMode - the response_mode used in the auth request
* @returns Promise that resolves to true when login succeeded, else false
*/
async function attemptOidcNativeLogin(queryParams: QueryDict): Promise<boolean> {
async function attemptOidcNativeLogin(
urlParams: NonNullable<URLParams["oidc_fragment"]>,
responseMode: "fragment" | "query",
): Promise<boolean> {
console.log("We have OIDC params - attempting OIDC login");
try {
const { accessToken, refreshToken, homeserverUrl, identityServerUrl, idToken, clientId, issuer } =
await completeOidcLogin(queryParams);
await completeOidcLogin(urlParams, responseMode);
const {
user_id: userId,
@ -354,22 +359,20 @@ async function getUserIdFromAccessToken(
}
/**
* @param {QueryDict} queryParams string->string map of the
* query-parameters extracted from the real query-string of the starting
* URI.
@param urlParams subset of app-load url parameters relating to legacy sso auth
*
* @param {string} defaultDeviceDisplayName
* @param {string} fragmentAfterLogin path to go to after a successful login, only used for "Try again"
* @param defaultDeviceDisplayName
* @param fragmentAfterLogin path to go to after a successful login, only used for "Try again"
*
* @returns {Promise} promise which resolves to true if we completed the token
* @returns promise which resolves to true if we completed the token
* login, else false
*/
export function attemptTokenLogin(
queryParams: QueryDict,
urlParams: URLParams["legacy_sso"],
defaultDeviceDisplayName?: string,
fragmentAfterLogin?: string,
): Promise<boolean> {
if (!queryParams.loginToken) {
if (!urlParams?.loginToken) {
return Promise.resolve(false);
}
@ -384,7 +387,7 @@ export function attemptTokenLogin(
}
return sendLoginRequest(homeserver, identityServer, "m.login.token", {
token: queryParams.loginToken as string,
token: urlParams.loginToken,
initial_device_display_name: defaultDeviceDisplayName,
})
.then(async function (creds) {
@ -1040,7 +1043,7 @@ export function isLoggingOut(): boolean {
* By the time this method is called, we have successfully logged in if necessary, and the client has been set up with
* the access token.
*
* Emits {@link Acction.WillStartClient} before starting the client, and {@link Action.ClientStarted} when the client has
* Emits {@link Action.WillStartClient} before starting the client, and {@link Action.ClientStarted} when the client has
* been started.
*
* @param client the matrix client to start

View File

@ -20,7 +20,6 @@ import {
type SyncStateData,
type TimelineEvents,
} from "matrix-js-sdk/src/matrix";
import { type QueryDict } from "matrix-js-sdk/src/utils";
import { logger } from "matrix-js-sdk/src/logger";
import { throttle } from "lodash";
import { CryptoEvent, type KeyBackupInfo } from "matrix-js-sdk/src/crypto-api";
@ -141,6 +140,8 @@ import Markdown from "../../Markdown";
import { LinkedTextConfiguration, sanitizeHtmlParams } from "../../Linkify";
import { isOnlyAdmin } from "../../utils/membership";
import { ModuleApi } from "../../modules/Api.ts";
import { type IScreen } from "../../vector/routing.ts";
import { type URLParams } from "../../vector/url_utils.ts";
// legacy export
export { default as Views } from "../../Views";
@ -152,21 +153,14 @@ const AUTH_SCREENS = ["register", "mobile_register", "login", "forgot_password",
// re-factoring to be included in this list in future.
const ONBOARDING_FLOW_STARTERS = [Action.ViewUserSettings, Action.CreateChat, Action.CreateRoom];
interface IScreen {
screen: string;
params?: QueryDict;
}
interface IProps {
config: ConfigOptions;
onNewScreen: (screen: string, replaceLast: boolean) => void;
enableGuest?: boolean;
// the queryParams extracted from the [real] query-string of the URI
realQueryParams: QueryDict;
// the initial queryParams extracted from the hash-fragment of the URI
startingFragmentQueryParams?: QueryDict;
// the params extracted from the [real] query-string & fragment of the URI
urlParams: URLParams;
// called when we have completed a token login
onTokenLoginCompleted: () => void;
onTokenLoginCompleted: (urlParams: URLParams, fragmentAfterLogin: string) => void;
// Represents the screen to display as a result of parsing the initial window.location
initialScreenAfterLogin?: IScreen;
// displayname, if any, to set on the device when logging in/registering.
@ -227,11 +221,8 @@ interface IState {
export default class MatrixChat extends React.PureComponent<IProps, IState> {
public static displayName = "MatrixChat";
public static defaultProps = {
realQueryParams: {},
startingFragmentQueryParams: {},
public static defaultProps: Partial<IProps> = {
config: {},
onTokenLoginCompleted: (): void => {},
};
private firstSyncComplete = false;
@ -353,18 +344,18 @@ export default class MatrixChat extends React.PureComponent<IProps, IState> {
// Otherwise, the first thing to do is to try the token params in the query-string
const delegatedAuthSucceeded = await Lifecycle.attemptDelegatedAuthLogin(
this.props.realQueryParams,
this.props.urlParams,
this.props.defaultDeviceDisplayName,
this.getFragmentAfterLogin(),
);
// remove the loginToken or auth code from the URL regardless
if (
this.props.realQueryParams?.loginToken ||
this.props.realQueryParams?.code ||
this.props.realQueryParams?.state
!!this.props.urlParams.legacy_sso ||
!!this.props.urlParams.oidc_fragment ||
!!this.props.urlParams.oidc_query
) {
this.props.onTokenLoginCompleted();
this.props.onTokenLoginCompleted(this.props.urlParams, this.getFragmentAfterLogin());
}
if (delegatedAuthSucceeded) {
@ -421,7 +412,7 @@ export default class MatrixChat extends React.PureComponent<IProps, IState> {
* {@link onWillStartClient} and {@link onClientStarted} will already have been called (but not necessarily
* completed).
*
* This method either calls {@link onLiggedIn} directly, or switches to {@link Views.E2E_SETUP} or
* This method either calls {@link onLoggedIn} directly, or switches to {@link Views.E2E_SETUP} or
* {@link Views.COMPLETE_SECURITY}, which will later call {@link onCompleteSecurityE2eSetupFinished}.
*/
private async postLoginSetup(): Promise<void> {
@ -592,7 +583,7 @@ export default class MatrixChat extends React.PureComponent<IProps, IState> {
return Promise.resolve()
.then(() => {
return Lifecycle.loadSession({
fragmentQueryParams: this.props.startingFragmentQueryParams,
urlParams: this.props.urlParams,
enableGuest: this.props.enableGuest,
guestHsUrl: this.getServerProperties().serverConfig.hsUrl,
guestIsUrl: this.getServerProperties().serverConfig.isUrl,
@ -1835,7 +1826,7 @@ export default class MatrixChat extends React.PureComponent<IProps, IState> {
}
}
public showScreen(screen: string, params?: { [key: string]: any }): void {
public showScreen(screen: string, params?: Record<string, any>): void {
logger.debug(`showScreen ${screen}`);
const cli = MatrixClientPeg.get();
@ -2267,14 +2258,14 @@ export default class MatrixChat extends React.PureComponent<IProps, IState> {
onForgotPasswordClick={showPasswordReset ? this.onForgotPasswordClick : undefined}
onServerConfigChange={this.onServerConfigChange}
fragmentAfterLogin={fragmentAfterLogin}
defaultUsername={this.props.startingFragmentQueryParams?.defaultUsername as string | undefined}
defaultUsername={this.props.urlParams?.defaults?.defaultUsername}
{...this.getServerProperties()}
/>
);
} else if (this.state.view === Views.SOFT_LOGOUT) {
view = (
<SoftLogout
realQueryParams={this.props.realQueryParams}
urlParams={this.props.urlParams}
onTokenLoginCompleted={this.props.onTokenLoginCompleted}
fragmentAfterLogin={fragmentAfterLogin}
/>

View File

@ -6,7 +6,7 @@ SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only OR LicenseRef-Element-Com
Please see LICENSE files in the repository root for full details.
*/
import React, { type JSX, createRef, type ReactNode, type TransitionEvent } from "react";
import React, { type JSX, createRef, type ReactNode, type TransitionEventHandler } from "react";
import classNames from "classnames";
import {
type Room,
@ -20,6 +20,7 @@ import { logger } from "matrix-js-sdk/src/logger";
import { isSupportedReceiptType } from "matrix-js-sdk/src/utils";
import {
DateSeparatorView,
ReadMarker,
TimelineSeparator,
useCreateAutoDisposedViewModel,
} from "@element-hq/web-shared-components";
@ -271,7 +272,7 @@ export default class MessagePanel extends React.Component<IProps, IState> {
private readonly _showHiddenEvents: boolean;
private unmounted = false;
private readMarkerNode = createRef<HTMLLIElement>();
private readMarkerNode: HTMLLIElement | null = null;
private whoIsTyping = createRef<WhoIsTypingTile>();
public scrollPanel = createRef<ScrollPanel>();
@ -403,7 +404,7 @@ export default class MessagePanel extends React.Component<IProps, IState> {
// 0: read marker is within the window
// +1: read marker is below the window
public getReadMarkerPosition(): number | null {
const readMarker = this.readMarkerNode.current;
const readMarker = this.readMarkerNode;
const messageWrapper = this.scrollPanel.current?.divScroll;
if (!readMarker || !messageWrapper) {
@ -507,29 +508,18 @@ export default class MessagePanel extends React.Component<IProps, IState> {
public readMarkerForEvent(eventId: string, isLastEvent: boolean): ReactNode {
if (this.context.timelineRenderingType === TimelineRenderingType.File) return null;
const visible = !isLastEvent && this.props.readMarkerVisible;
const showLine = !isLastEvent && !!this.props.readMarkerVisible;
if (this.props.readMarkerEventId === eventId) {
let hr;
// if the read marker comes at the end of the timeline (except
// for local echoes, which are excluded from RMs, because they
// don't have useful event ids), we don't want to show it, but
// we still want to create the <li/> for it so that the
// algorithms which depend on its position on the screen aren't
// confused.
if (visible) {
hr = <hr style={{ opacity: 1, width: "99%" }} />;
}
return (
<li
<ReadMarker
key={"readMarker_" + eventId}
ref={this.readMarkerNode}
eventId={eventId}
kind="current"
showLine={showLine}
onCurrentMarkerRef={this.collectReadMarker}
className="mx_MessagePanel_myReadMarker"
data-scroll-tokens={eventId}
>
{hr}
</li>
/>
);
} else if (this.state.ghostReadMarkers.includes(eventId)) {
// We render 'ghost' read markers in the DOM while they
@ -542,28 +532,30 @@ export default class MessagePanel extends React.Component<IProps, IState> {
// case is a little more complex because only some of the items
// transition (ie. the read markers do but the event tiles do not)
// and TransitionGroup requires that all its children are Transitions.
const hr = (
<hr
ref={this.collectGhostReadMarker}
onTransitionEnd={this.onGhostTransitionEnd}
data-eventid={eventId}
/>
);
// give it a key which depends on the event id. That will ensure that
// we get a new DOM node (restarting the animation) when the ghost
// moves to a different event.
return (
<li key={"_readuptoghost_" + eventId} className="mx_MessagePanel_myReadMarker">
{hr}
</li>
<ReadMarker
key={"_readuptoghost_" + eventId}
eventId={eventId}
kind="ghost"
showLine={true}
onGhostLineRef={this.collectGhostReadMarker}
onGhostTransitionEnd={this.onGhostTransitionEnd}
className="mx_MessagePanel_myReadMarker"
/>
);
}
return null;
}
private collectGhostReadMarker = (node: HTMLElement | null): void => {
private collectReadMarker = (node: HTMLLIElement | null): void => {
this.readMarkerNode = node;
};
private collectGhostReadMarker = (node: HTMLHRElement | null): void => {
if (node) {
// now the element has appeared, change the style which will trigger the CSS transition
requestAnimationFrame(() => {
@ -573,7 +565,7 @@ export default class MessagePanel extends React.Component<IProps, IState> {
}
};
private onGhostTransitionEnd = (ev: TransitionEvent): void => {
private onGhostTransitionEnd: TransitionEventHandler<HTMLHRElement> = (ev): void => {
// we can now clean up the ghost element
const finishedEventId = (ev.target as HTMLElement).dataset.eventid;
this.setState({

View File

@ -184,6 +184,10 @@ const Tile: React.FC<ITileProps> = ({
aria-labelledby={checkboxLabelId}
checked={!!selected}
tabIndex={-1}
onChange={(e) => {
e.stopPropagation();
onToggleClick();
}}
/>
);
} else {
@ -311,9 +315,9 @@ const Tile: React.FC<ITileProps> = ({
};
childSection = (
<div className="mx_SpaceHierarchy_subspace_children" onKeyDown={onChildrenKeyDown} role="group">
<ul className="mx_SpaceHierarchy_subspace_children" onKeyDown={onChildrenKeyDown} role="group">
{children}
</div>
</ul>
);
}

View File

@ -12,7 +12,7 @@ import React, { type JSX, type ReactNode } from "react";
import { logger } from "matrix-js-sdk/src/logger";
import { sleep } from "matrix-js-sdk/src/utils";
import { LockSolidIcon, CheckIcon } from "@vector-im/compound-design-tokens/assets/web/icons";
import { Button } from "@vector-im/compound-web";
import { Button, Form } from "@vector-im/compound-web";
import { _t, _td } from "../../../languageHandler";
import Modal from "../../../Modal";
@ -380,7 +380,7 @@ export default class ForgotPassword extends React.Component<Props, State> {
<>
<LockSolidIcon className="mx_AuthBody_lockIcon" />
<h1>{_t("auth|reset_password_title")}</h1>
<form onSubmit={this.onSubmitForm}>
<Form.Root onSubmit={this.onSubmitForm}>
<fieldset disabled={this.state.phase === Phase.ResettingPassword}>
<div className="mx_AuthBody_fieldRow">
<PassphraseField
@ -413,6 +413,7 @@ export default class ForgotPassword extends React.Component<Props, State> {
<StyledCheckbox
onChange={() => this.setState({ logoutDevices: !this.state.logoutDevices })}
checked={this.state.logoutDevices}
formWrap={false}
>
{_t("auth|reset_password|sign_out_other_devices")}
</StyledCheckbox>
@ -422,7 +423,7 @@ export default class ForgotPassword extends React.Component<Props, State> {
{submitButtonChild}
</Button>
</fieldset>
</form>
</Form.Root>
</>
);
}

View File

@ -26,6 +26,7 @@ import Spinner from "../../views/elements/Spinner";
import AuthHeader from "../../views/auth/AuthHeader";
import AuthBody from "../../views/auth/AuthBody";
import { SDKContext } from "../../../contexts/SDKContext";
import { type URLParams } from "../../../vector/url_utils.ts";
enum LoginView {
Loading,
@ -43,14 +44,11 @@ const STATIC_FLOWS_TO_VIEWS: Record<string, LoginView> = {
};
interface IProps {
// Query parameters from MatrixChat
realQueryParams: {
loginToken?: string;
};
fragmentAfterLogin?: string;
urlParams: URLParams;
fragmentAfterLogin: string;
// Called when the SSO login completes
onTokenLoginCompleted: () => void;
onTokenLoginCompleted: (urlParams: URLParams, fragmentAfterLogin: string) => void;
}
interface IState {
@ -98,8 +96,7 @@ export default class SoftLogout extends React.Component<IProps, IState> {
};
private async initLogin(): Promise<void> {
const queryParams = this.props.realQueryParams;
const hasAllParams = queryParams?.["loginToken"];
const hasAllParams = !!this.props.urlParams?.legacy_sso;
if (hasAllParams) {
this.setState({ loginView: LoginView.Loading });
@ -189,7 +186,7 @@ export default class SoftLogout extends React.Component<IProps, IState> {
const isUrl = localStorage.getItem(SSO_ID_SERVER_URL_KEY) || MatrixClientPeg.safeGet().getIdentityServerUrl();
const loginType = "m.login.token";
const loginParams = {
token: this.props.realQueryParams["loginToken"],
token: this.props.urlParams?.legacy_sso?.loginToken,
device_id: MatrixClientPeg.safeGet().getDeviceId() ?? undefined,
};
@ -204,9 +201,7 @@ export default class SoftLogout extends React.Component<IProps, IState> {
return Lifecycle.hydrateSession(credentials)
.then(() => {
if (this.props.onTokenLoginCompleted) {
this.props.onTokenLoginCompleted();
}
this.props.onTokenLoginCompleted(this.props.urlParams, this.props.fragmentAfterLogin);
return true;
})
.catch((e) => {

View File

@ -459,8 +459,8 @@ export class EmailIdentityAuthEntry extends React.Component<
{
a: (text: string) => (
<Fragment>
<AccessibleButton kind="link_inline" onClick={null} disabled>
{text} <Spinner size={14} />
<AccessibleButton element="a" kind="link_inline" onClick={null} disabled>
{text} <Spinner as="span" size={14} />
</AccessibleButton>
</Fragment>
),
@ -475,6 +475,7 @@ export class EmailIdentityAuthEntry extends React.Component<
{
a: (text: string) => (
<AccessibleButton
element="a"
kind="link_inline"
title={
this.state.requested ? _t("auth|uia|email_resent") : _t("action|resend")

View File

@ -50,9 +50,13 @@ interface IProps {
// CSS class to apply to dialog div
"className"?: string;
// if true, dialog container is 60% of the viewport width. Otherwise,
// the container will have no fixed size, allowing its contents to
// determine its size. Default: true.
/**
* If true, dialog container is between 60% of the viewport width and 704 pixels (depending on screen size and dialog contents).
*
* Otherwise, the container will have no fixed width, allowing its contents to determine its size.
*
* Default: true.
*/
"fixedWidth"?: boolean;
// To be displayed at the top of the dialog. Even above the title.

View File

@ -12,10 +12,9 @@ import { KnownMembership } from "matrix-js-sdk/src/types";
import { type MatrixCall } from "matrix-js-sdk/src/webrtc/call";
import { logger } from "matrix-js-sdk/src/logger";
import { uniqBy } from "lodash";
import { RichList, RichItem, PillInput, Pill } from "@element-hq/web-shared-components";
import { Pill, PillInput, RichList } from "@element-hq/web-shared-components";
import { DialPadIcon, UserProfileSolidIcon } from "@vector-im/compound-design-tokens/assets/web/icons";
import { Icon as EmailPillAvatarIcon } from "../../../../res/img/icon-email-pill-avatar.svg";
import { _t, _td } from "../../../languageHandler";
import { MatrixClientPeg } from "../../../MatrixClientPeg";
import { makeRoomPermalink, makeUserPermalink } from "../../../utils/permalinks/Permalinks";
@ -31,8 +30,6 @@ import { DefaultTagID } from "../../../stores/room-list-v3/skip-list/tag";
import RoomListStore from "../../../stores/room-list/RoomListStore";
import SettingsStore from "../../../settings/SettingsStore";
import { UIFeature } from "../../../settings/UIFeature";
import { mediaFromMxc } from "../../../customisations/Media";
import BaseAvatar from "../avatars/BaseAvatar";
import { SearchResultAvatar } from "../avatars/SearchResultAvatar";
import AccessibleButton, { type ButtonEvent } from "../elements/AccessibleButton";
import { selectText } from "../../../utils/strings";
@ -43,7 +40,6 @@ import QuestionDialog from "./QuestionDialog";
import BaseDialog from "./BaseDialog";
import DialPadBackspaceButton from "../elements/DialPadBackspaceButton";
import LegacyCallHandler from "../../../LegacyCallHandler";
import UserIdentifierCustomisations from "../../../customisations/UserIdentifier";
import CopyableText from "../elements/CopyableText";
import { type ScreenName } from "../../../PosthogTrackers";
import { KeyBindingAction } from "../../../accessibility/KeyboardShortcuts";
@ -64,9 +60,7 @@ import { SdkContextClass } from "../../../contexts/SDKContext";
import { type UserProfilesStore } from "../../../stores/UserProfilesStore";
import InviteProgressBody from "./InviteProgressBody.tsx";
import MultiInviter, { type CompletionStates as MultiInviterCompletionStates } from "../../../utils/MultiInviter.ts";
// we have a number of types defined from the Matrix spec which can't reasonably be altered here.
/* eslint-disable camelcase */
import { DMRoomTile } from "./invite/DMRoomTile.tsx";
interface Result {
userId: string;
@ -117,62 +111,6 @@ const toMember = (member: RoomMember | Member): Member => {
: member;
};
interface IDMRoomTileProps {
member: Member;
lastActiveTs?: number;
onToggle(member: Member): void;
isSelected: boolean;
}
class DMRoomTile extends React.PureComponent<IDMRoomTileProps> {
private onClick = (e: ButtonEvent): void => {
// Stop the browser from highlighting text
e.preventDefault();
e.stopPropagation();
this.props.onToggle(this.props.member);
};
public render(): React.ReactNode {
const avatarSize = "32px";
const avatar = (this.props.member as ThreepidMember).isEmail ? (
<EmailPillAvatarIcon width={avatarSize} height={avatarSize} />
) : (
<BaseAvatar
url={
this.props.member.getMxcAvatarUrl()
? mediaFromMxc(this.props.member.getMxcAvatarUrl()!).getSquareThumbnailHttp(
parseInt(avatarSize, 10),
)
: null
}
name={this.props.member.name}
idName={this.props.member.userId}
size={avatarSize}
/>
);
const userIdentifier = UserIdentifierCustomisations.getDisplayUserIdentifier(this.props.member.userId, {
withDisplayName: true,
});
const caption = (this.props.member as ThreepidMember).isEmail
? _t("invite|email_caption")
: userIdentifier || this.props.member.userId;
return (
<RichItem
avatar={avatar}
title={this.props.member.name}
description={caption}
timestamp={this.props.lastActiveTs}
onClick={this.onClick}
selected={this.props.isSelected}
/>
);
}
}
interface BaseProps {
// Takes a boolean which is true if a user / users were invited /
// a call transfer was initiated or false if the dialog was cancelled
@ -1186,8 +1124,7 @@ export default class InviteDialog extends React.PureComponent<Props, IInviteDial
}
/**
* Render content of the common "users" tab that is shown whether we have a regular invite dialog or a
* "CallTransfer" one.
* Render content of the "users" that is used for both invites and "start chat".
*/
private renderMainTab(): JSX.Element {
let helpText;
@ -1275,26 +1212,23 @@ export default class InviteDialog extends React.PureComponent<Props, IInviteDial
buttonText = _t("action|invite");
goButtonFn = this.inviteUsers;
} else {
throw new Error("Unknown InviteDialog kind: " + this.props.kind);
}
const goButton =
this.props.kind == InviteKind.CallTransfer ? null : (
<AccessibleButton
kind="primary"
onClick={goButtonFn}
className="mx_InviteDialog_goButton"
disabled={this.state.busy || !this.hasSelection()}
>
{buttonText}
</AccessibleButton>
);
return (
<React.Fragment>
<p className="mx_InviteDialog_helpText">{helpText}</p>
<div className="mx_InviteDialog_addressBar">
{this.renderEditor()}
{goButton}
<AccessibleButton
kind="primary"
onClick={goButtonFn}
className="mx_InviteDialog_goButton"
disabled={this.state.busy || !this.hasSelection()}
>
{buttonText}
</AccessibleButton>
</div>
{this.state.busy ? <InviteProgressBody /> : this.renderSuggestions()}
</React.Fragment>
@ -1342,7 +1276,12 @@ export default class InviteDialog extends React.PureComponent<Props, IInviteDial
* See also: {@link renderRegularDialog}.
*/
private renderCallTransferDialog(): React.ReactNode {
const usersSection = this.renderMainTab();
const usersSection = (
<React.Fragment>
<div className="mx_InviteDialog_addressBar">{this.renderEditor()}</div>
{this.state.busy ? <InviteProgressBody /> : this.renderSuggestions()}
</React.Fragment>
);
const tabs: NonEmptyArray<Tab<TabId>> = [
new Tab(

View File

@ -104,7 +104,12 @@ export default class WidgetCapabilitiesPromptDialog extends React.PureComponent<
return (
<div className="mx_WidgetCapabilitiesPromptDialog_cap" key={cap + i}>
<StyledCheckbox checked={isChecked} onChange={() => this.onToggle(cap)} description={text.byline}>
<StyledCheckbox
checked={isChecked}
onChange={() => this.onToggle(cap)}
description={text.byline}
formWrap={false}
>
{text.primary}
</StyledCheckbox>
</div>

View File

@ -110,7 +110,11 @@ function KeyStorage(): JSX.Element {
return (
<table aria-label={_t("devtools|crypto|key_storage")}>
<thead>{_t("devtools|crypto|key_storage")}</thead>
<thead>
<tr>
<th colSpan={2}>{_t("devtools|crypto|key_storage")}</th>
</tr>
</thead>
<tbody>
<tr>
<th scope="row">{_t("devtools|crypto|key_backup_latest_version")}</th>
@ -212,7 +216,11 @@ function CrossSigning(): JSX.Element {
return (
<table aria-label={_t("devtools|crypto|cross_signing")}>
<thead>{_t("devtools|crypto|cross_signing")}</thead>
<thead>
<tr>
<th colSpan={2}>{_t("devtools|crypto|cross_signing")}</th>
</tr>
</thead>
<tbody>
<tr>
<th scope="row">{_t("devtools|crypto|cross_signing_status")}</th>
@ -303,7 +311,11 @@ function Session(): JSX.Element {
return (
<table aria-label={_t("devtools|crypto|session")}>
<thead>{_t("devtools|crypto|session")}</thead>
<thead>
<tr>
<th colSpan={2}>{_t("devtools|crypto|session")}</th>
</tr>
</thead>
<tbody>
<tr>
<th scope="row">{_t("devtools|crypto|device_id")}</th>

View File

@ -0,0 +1,74 @@
/*
Copyright 2026 Element Creations Ltd.
SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only OR LicenseRef-Element-Commercial
Please see LICENSE files in the repository root for full details.
*/
import React from "react";
import { RichItem } from "@element-hq/web-shared-components";
import { type Member, type ThreepidMember } from "../../../../utils/direct-messages.ts";
import type { ButtonEvent } from "../../elements/AccessibleButton.tsx";
import BaseAvatar from "../../avatars/BaseAvatar.tsx";
import { mediaFromMxc } from "../../../../customisations/Media.ts";
import UserIdentifierCustomisations from "../../../../customisations/UserIdentifier.ts";
import { _t } from "../../../../languageHandler.tsx";
import { Icon as EmailPillAvatarIcon } from "../../../../../res/img/icon-email-pill-avatar.svg";
interface IDMRoomTileProps {
member: Member;
lastActiveTs?: number;
onToggle(member: Member): void;
isSelected: boolean;
}
/** A tile representing a single user in the "suggestions"/"recents" section of the invite dialog. */
export class DMRoomTile extends React.PureComponent<IDMRoomTileProps> {
private onClick = (e: ButtonEvent): void => {
// Stop the browser from highlighting text
e.preventDefault();
e.stopPropagation();
this.props.onToggle(this.props.member);
};
public render(): React.ReactNode {
const avatarSize = "32px";
const avatar = (this.props.member as ThreepidMember).isEmail ? (
<EmailPillAvatarIcon width={avatarSize} height={avatarSize} />
) : (
<BaseAvatar
url={
this.props.member.getMxcAvatarUrl()
? mediaFromMxc(this.props.member.getMxcAvatarUrl()!).getSquareThumbnailHttp(
parseInt(avatarSize, 10),
)
: null
}
name={this.props.member.name}
idName={this.props.member.userId}
size={avatarSize}
/>
);
const userIdentifier = UserIdentifierCustomisations.getDisplayUserIdentifier(this.props.member.userId, {
withDisplayName: true,
});
const caption = (this.props.member as ThreepidMember).isEmail
? _t("invite|email_caption")
: userIdentifier || this.props.member.userId;
return (
<RichItem
avatar={avatar}
title={this.props.member.name}
description={caption}
timestamp={this.props.lastActiveTs}
onClick={this.onClick}
selected={this.props.isSelected}
/>
);
}
}

View File

@ -152,46 +152,49 @@ const AccessibleButton = function AccessibleButton<T extends ElementType = typeo
} else {
newProps.onClick = onClick ?? undefined;
}
// We need to consume enter onKeyDown and space onKeyUp
// otherwise we are risking also activating other keyboard focusable elements
// that might receive focus as a result of the AccessibleButtonClick action
// It's because we are using html buttons at a few places e.g. inside dialogs
// And divs which we report as role button to assistive technologies.
// Browsers handle space and enter key presses differently and we are only adjusting to the
// inconsistencies here
newProps.onKeyDown = (e: KeyboardEvent<never>) => {
const action = getKeyBindingsManager().getAccessibilityAction(e);
switch (action) {
case KeyBindingAction.Enter:
e.stopPropagation();
e.preventDefault();
return onClick?.(e);
case KeyBindingAction.Space:
e.stopPropagation();
e.preventDefault();
break;
default:
onKeyDown?.(e);
}
};
newProps.onKeyUp = (e: KeyboardEvent<never>) => {
const action = getKeyBindingsManager().getAccessibilityAction(e);
if (element !== "button") {
// We need to consume enter onKeyDown and space onKeyUp
// otherwise we are risking also activating other keyboard focusable elements
// that might receive focus as a result of the AccessibleButtonClick action
// It's because we are using html buttons at a few places e.g. inside dialogs
// And divs which we report as role button to assistive technologies.
// Browsers handle space and enter key presses differently and we are only adjusting to the
// inconsistencies here
newProps.onKeyDown = (e: KeyboardEvent<never>) => {
const action = getKeyBindingsManager().getAccessibilityAction(e);
switch (action) {
case KeyBindingAction.Enter:
e.stopPropagation();
e.preventDefault();
break;
case KeyBindingAction.Space:
e.stopPropagation();
e.preventDefault();
return onClick?.(e);
default:
onKeyUp?.(e);
break;
}
};
switch (action) {
case KeyBindingAction.Enter:
e.stopPropagation();
e.preventDefault();
return onClick?.(e);
case KeyBindingAction.Space:
e.stopPropagation();
e.preventDefault();
break;
default:
onKeyDown?.(e);
}
};
newProps.onKeyUp = (e: KeyboardEvent<never>) => {
const action = getKeyBindingsManager().getAccessibilityAction(e);
switch (action) {
case KeyBindingAction.Enter:
e.stopPropagation();
e.preventDefault();
break;
case KeyBindingAction.Space:
e.stopPropagation();
e.preventDefault();
return onClick?.(e);
default:
onKeyUp?.(e);
break;
}
};
}
}
// Pass through the ref - used for keyboard shortcut access to some buttons

View File

@ -63,7 +63,7 @@ import { toWidgetDescriptor } from "../../../modules/WidgetLifecycleApi";
import { parseUrl } from "../../../utils/UrlUtils";
import RightPanelStore from "../../../stores/right-panel/RightPanelStore.ts";
import { RightPanelPhases } from "../../../stores/right-panel/RightPanelStorePhases.ts";
import { WidgetContextMenu } from "../../../viewmodels/right-panel/WidgetContextMenuViewModel.tsx";
import { WidgetContextMenu } from "../../../viewmodels/room/right-panel/WidgetContextMenuViewModel.tsx";
// Note that there is advice saying allow-scripts shouldn't be used with allow-same-origin
// because that would allow the iframe to programmatically remove the sandbox attribute, but

View File

@ -44,6 +44,7 @@ export const CopyTextButton: React.FC<Pick<IProps, "getTextToCopy" | "className"
return (
<AccessibleButton
element="button"
title={tooltip ?? _t("action|copy")}
onClick={onCopyClickInternal}
className={className}
@ -62,12 +63,12 @@ const CopyableText: React.FC<IProps> = ({ children, getTextToCopy, border = true
});
return (
<div className={combinedClassName} {...props}>
<span className={combinedClassName} {...props}>
{children}
<CopyTextButton getTextToCopy={getTextToCopy} className="mx_CopyableText_copyButton">
<CopyIcon />
</CopyTextButton>
</div>
</span>
);
};

View File

@ -13,7 +13,7 @@ import Modal from "../../../Modal";
import InfoDialog from "../dialogs/InfoDialog";
import AccessibleButton, { type ButtonProps } from "./AccessibleButton";
type Props = Omit<ButtonProps<"div">, "element" | "kind" | "onClick" | "className"> & {
type Props = Omit<ButtonProps<"button">, "element" | "kind" | "onClick" | "className"> & {
title: string;
description: string | React.ReactNode;
};
@ -29,7 +29,13 @@ const LearnMore: React.FC<Props> = ({ title, description, ...rest }) => {
};
return (
<AccessibleButton {...rest} kind="link_inline" onClick={onClick} className="mx_LearnMore_button">
<AccessibleButton
{...rest}
element="button"
kind="link_inline"
onClick={onClick}
className="mx_LearnMore_button"
>
{_t("action|learn_more")}
</AccessibleButton>
);

View File

@ -15,6 +15,11 @@ interface IProps {
size?: number;
message?: string;
onFinished: any; // XXX: Spinner pretends to be a dialog so it must accept an onFinished, but it never calls it
/**
* Whether to render the content in a div or span.
* @default "div"
*/
as?: "span" | "div";
}
export default class Spinner extends React.PureComponent<IProps> {
@ -23,16 +28,16 @@ export default class Spinner extends React.PureComponent<IProps> {
};
public render(): React.ReactNode {
const { size, message } = this.props;
const { size, message, as: Component = "div" } = this.props;
return (
<div className="mx_Spinner">
<Component className="mx_Spinner">
{message && (
<React.Fragment>
<div className="mx_Spinner_Msg">{message}</div>&nbsp;
</React.Fragment>
)}
<InlineSpinner size={size} aria-label={_t("common|loading")} role="progressbar" data-testid="spinner" />
</div>
</Component>
);
}
}

View File

@ -14,6 +14,7 @@ interface IProps extends React.InputHTMLAttributes<HTMLInputElement> {
inputRef?: Ref<HTMLInputElement>;
id?: string;
description?: ReactNode;
formWrap?: boolean;
}
const StyledCheckbox: React.FC<IProps> = ({
@ -22,30 +23,36 @@ const StyledCheckbox: React.FC<IProps> = ({
className,
inputRef,
description,
formWrap = true,
...otherProps
}) => {
const id = initialId || "checkbox_" + secureRandomString(10);
const name = useId();
const descriptionId = useId();
return (
<Form.Root>
<InlineField
className={className}
name={name}
control={
<CheckboxInput
ref={inputRef}
aria-describedby={description ? descriptionId : undefined}
id={id}
{...otherProps}
/>
}
>
{label && <Label htmlFor={id}>{label}</Label>}
{description && <HelpMessage id={descriptionId}>{description}</HelpMessage>}
</InlineField>
</Form.Root>
const field = (
<InlineField
className={className}
name={name}
control={
<CheckboxInput
ref={inputRef}
aria-describedby={description ? descriptionId : undefined}
id={id}
{...otherProps}
/>
}
>
{label && <Label htmlFor={id}>{label}</Label>}
{description && <HelpMessage id={descriptionId}>{description}</HelpMessage>}
</InlineField>
);
if (formWrap) {
return <Form.Root>{field}</Form.Root>;
}
return field;
};
export default StyledCheckbox;

View File

@ -31,7 +31,7 @@ import { IntegrationManagers } from "../../../integrations/IntegrationManagers";
import EmptyState from "./EmptyState";
import { shouldShowComponent } from "../../../customisations/helpers/UIComponents.ts";
import { UIComponent } from "../../../settings/UIFeature.ts";
import { WidgetContextMenu } from "../../../viewmodels/right-panel/WidgetContextMenuViewModel.tsx";
import { WidgetContextMenu } from "../../../viewmodels/room/right-panel/WidgetContextMenuViewModel.tsx";
interface Props {
room: Room;

View File

@ -255,7 +255,7 @@ export default class VerificationPanel extends React.PureComponent<IProps, IStat
} else {
body = (
<p>
<Spinner />
<Spinner as="span" />
</p>
);
}

View File

@ -18,7 +18,7 @@ import { ContextMenuButton, useContextMenu } from "../../structures/ContextMenu"
import { WidgetLayoutStore } from "../../../stores/widgets/WidgetLayoutStore";
import RightPanelStore from "../../../stores/right-panel/RightPanelStore";
import Heading from "../typography/Heading";
import { WidgetContextMenu } from "../../../viewmodels/right-panel/WidgetContextMenuViewModel";
import { WidgetContextMenu } from "../../../viewmodels/room/right-panel/WidgetContextMenuViewModel";
interface IProps {
room: Room;

View File

@ -8,7 +8,7 @@ Please see LICENSE files in the repository root for full details.
import React, { type ChangeEventHandler } from "react";
import { JoinRule, Visibility } from "matrix-js-sdk/src/matrix";
import { SettingsToggleInput } from "@vector-im/compound-web";
import { Form, SettingsToggleInput } from "@vector-im/compound-web";
import { logger } from "matrix-js-sdk/src/logger";
import { _t } from "../../../languageHandler";
@ -16,6 +16,7 @@ import { MatrixClientPeg } from "../../../MatrixClientPeg";
import DirectoryCustomisations from "../../../customisations/Directory";
import Modal from "../../../Modal";
import ErrorDialog from "../dialogs/ErrorDialog";
import { onSubmitPreventDefault } from "../../../utils/form.ts";
interface IProps {
roomId: string;
@ -90,16 +91,18 @@ export default class RoomPublishSetting extends React.PureComponent<IProps, ISta
const enabled = canSetCanonicalAlias && (isRoomPublishable || this.state.isRoomPublished);
return (
<SettingsToggleInput
name="room-publish"
checked={this.state.isRoomPublished}
onChange={this.onRoomPublishChange}
disabled={!enabled || this.state.busy}
disabledMessage={disabledMessage}
label={_t("room_settings|general|publish_toggle", {
domain: client.getDomain(),
})}
/>
<Form.Root onSubmit={onSubmitPreventDefault}>
<SettingsToggleInput
name="room-publish"
checked={this.state.isRoomPublished}
onChange={this.onRoomPublishChange}
disabled={!enabled || this.state.busy}
disabledMessage={disabledMessage}
label={_t("room_settings|general|publish_toggle", {
domain: client.getDomain(),
})}
/>
</Form.Root>
);
}
}

View File

@ -220,7 +220,12 @@ export default class EventIndexPanel extends React.Component<EmptyObject, IState
: _t("error|unknown")}
</code>
<p>
<AccessibleButton key="delete" kind="danger" onClick={this.confirmEventStoreReset}>
<AccessibleButton
element="button"
key="delete"
kind="danger"
onClick={this.confirmEventStoreReset}
>
{_t("action|reset")}
</AccessibleButton>
</p>

View File

@ -52,6 +52,7 @@ import { SettingsSubsectionHeading } from "./shared/SettingsSubsectionHeading";
import { SettingsSubsection } from "./shared/SettingsSubsection";
import { doesRoomHaveUnreadMessages } from "../../../Unread";
import SettingsFlag from "../elements/SettingsFlag";
import { onSubmitPreventDefault } from "../../../utils/form.ts";
// TODO: this "view" component still has far too much application logic in it,
// which should be factored out to other files.
@ -651,7 +652,7 @@ export default class Notifications extends React.PureComponent<EmptyObject, ISta
// If all the rules are inhibited, don't show anything.
if (this.isInhibited) {
return masterSwitch;
return <Form.Root onSubmit={onSubmitPreventDefault}>{masterSwitch}</Form.Root>;
}
const emailSwitches = (this.state.threepids || [])
@ -669,19 +670,21 @@ export default class Notifications extends React.PureComponent<EmptyObject, ISta
return (
<SettingsSubsection>
{masterSwitch}
<Form.Root onSubmit={onSubmitPreventDefault}>
{masterSwitch}
<SettingsFlag name="deviceNotificationsEnabled" level={SettingLevel.DEVICE} />
<SettingsFlag name="deviceNotificationsEnabled" level={SettingLevel.DEVICE} />
{this.state.deviceNotificationsEnabled && (
<>
<SettingsFlag name="notificationsEnabled" level={SettingLevel.DEVICE} />
<SettingsFlag name="notificationBodyEnabled" level={SettingLevel.DEVICE} />
<SettingsFlag name="audioNotificationsEnabled" level={SettingLevel.DEVICE} />
</>
)}
{this.state.deviceNotificationsEnabled && (
<>
<SettingsFlag name="notificationsEnabled" level={SettingLevel.DEVICE} />
<SettingsFlag name="notificationBodyEnabled" level={SettingLevel.DEVICE} />
<SettingsFlag name="audioNotificationsEnabled" level={SettingLevel.DEVICE} />
</>
)}
{emailSwitches}
{emailSwitches}
</Form.Root>
</SettingsSubsection>
);
}

View File

@ -7,7 +7,7 @@ Please see LICENSE files in the repository root for full details.
*/
import React, { type JSX, useState } from "react";
import { SettingsToggleInput } from "@vector-im/compound-web";
import { Form, SettingsToggleInput } from "@vector-im/compound-web";
import NewAndImprovedIcon from "../../../../../res/img/element-icons/new-and-improved.svg";
import { useMatrixClientContext } from "../../../../contexts/MatrixClientContext";
@ -33,6 +33,7 @@ import { SettingsSubsection } from "../shared/SettingsSubsection";
import { NotificationPusherSettings } from "./NotificationPusherSettings";
import SettingsFlag from "../../elements/SettingsFlag";
import { SettingsSubsectionHeading } from "../shared/SettingsSubsectionHeading";
import { onSubmitPreventDefault } from "../../../../utils/form.ts";
enum NotificationDefaultLevels {
AllMessages = "all_messages",
@ -111,7 +112,7 @@ export default function NotificationSettings2(): JSX.Element {
</SettingsBanner>
)}
<SettingsSection>
<div className="mx_SettingsSubsection_content mx_NotificationSettings2_flags">
<Form.Root className="mx_SettingsSubsection_content" onSubmit={onSubmitPreventDefault}>
<SettingsToggleInput
name="enable_notifications_account"
label={_t("settings|notifications|enable_notifications_account")}
@ -131,7 +132,7 @@ export default function NotificationSettings2(): JSX.Element {
level={SettingLevel.DEVICE}
/>
<SettingsFlag name="audioNotificationsEnabled" level={SettingLevel.DEVICE} />
</div>
</Form.Root>
<SettingsSubsection
heading={
<SettingsSubsectionHeading
@ -346,8 +347,10 @@ export default function NotificationSettings2(): JSX.Element {
placeholder={_t("notifications|keyword_new")}
/>
<SettingsFlag name="Notifications.showbold" level={SettingLevel.DEVICE} />
<SettingsFlag name="Notifications.tac_only_notifications" level={SettingLevel.DEVICE} />
<Form.Root onSubmit={onSubmitPreventDefault}>
<SettingsFlag name="Notifications.showbold" level={SettingLevel.DEVICE} />
<SettingsFlag name="Notifications.tac_only_notifications" level={SettingLevel.DEVICE} />
</Form.Root>
</SettingsSubsection>
<NotificationPusherSettings />
<SettingsSubsection heading={_t("settings|notifications|quick_actions_section")}>

View File

@ -8,7 +8,6 @@ Please see LICENSE files in the repository root for full details.
import React, { type ContextType } from "react";
import { type Room } from "matrix-js-sdk/src/matrix";
import { KnownMembership } from "matrix-js-sdk/src/types";
import { Form } from "@vector-im/compound-web";
import { _t } from "../../../../../languageHandler";
import RoomProfileSettings from "../../../room_settings/RoomProfileSettings";
@ -72,32 +71,25 @@ export default class GeneralRoomSettingsTab extends React.Component<IProps, ISta
return (
<SettingsTab data-testid="General">
<Form.Root
onSubmit={(evt) => {
evt.preventDefault();
evt.stopPropagation();
}}
>
<SettingsSection heading={_t("common|general")}>
<RoomProfileSettings roomId={room.roomId} />
</SettingsSection>
<SettingsSection heading={_t("common|general")}>
<RoomProfileSettings roomId={room.roomId} />
</SettingsSection>
<SettingsSection heading={_t("room_settings|general|aliases_section")}>
<AliasSettings
roomId={room.roomId}
canSetCanonicalAlias={canSetCanonical}
canSetAliases={canSetAliases}
canonicalAliasEvent={canonicalAliasEv}
/>
</SettingsSection>
<SettingsSection heading={_t("room_settings|general|aliases_section")}>
<AliasSettings
roomId={room.roomId}
canSetCanonicalAlias={canSetCanonical}
canSetAliases={canSetAliases}
canonicalAliasEvent={canonicalAliasEv}
/>
</SettingsSection>
<SettingsSection heading={_t("room_settings|general|other_section")}>
<SettingsSubsection heading={_t("common|moderation_and_safety")} legacy={false}>
<MediaPreviewAccountSettings roomId={room.roomId} />
</SettingsSubsection>
{leaveSection}
</SettingsSection>
</Form.Root>
<SettingsSection heading={_t("room_settings|general|other_section")}>
<SettingsSubsection heading={_t("common|moderation_and_safety")} legacy={false}>
<MediaPreviewAccountSettings roomId={room.roomId} />
</SettingsSubsection>
{leaveSection}
</SettingsSection>
</SettingsTab>
);
}

View File

@ -137,6 +137,7 @@ export default class SecurityRoomSettingsTab extends React.Component<IProps, ISt
{
a: (sub) => (
<AccessibleButton
element="a"
kind="link_inline"
onClick={() => {
dialog.close();
@ -334,6 +335,7 @@ export default class SecurityRoomSettingsTab extends React.Component<IProps, ISt
{_t("room_settings|security|encrypted_room_public_confirm_description_2", undefined, {
a: (sub) => (
<AccessibleButton
element="a"
kind="link_inline"
onClick={(): void => {
dialog.close();

View File

@ -7,7 +7,6 @@ Please see LICENSE files in the repository root for full details.
*/
import React from "react";
import { Form } from "@vector-im/compound-web";
import { Features } from "../../../../../settings/Settings";
import SettingsStore from "../../../../../settings/SettingsStore";
@ -22,20 +21,13 @@ export default class NotificationUserSettingsTab extends React.Component {
return (
<SettingsTab>
<Form.Root
onSubmit={(evt) => {
evt.preventDefault();
evt.stopPropagation();
}}
>
{newNotificationSettingsEnabled ? (
<NotificationSettings2 />
) : (
<SettingsSection>
<Notifications />
</SettingsSection>
)}
</Form.Root>
{newNotificationSettingsEnabled ? (
<NotificationSettings2 />
) : (
<SettingsSection>
<Notifications />
</SettingsSection>
)}
</SettingsTab>
);
}

View File

@ -184,14 +184,7 @@ const SpaceSettingsVisibilityTab: React.FC<IProps> = ({ matrixClient: cli, space
</Form.Root>
</SettingsFieldset>
<Form.Root
onSubmit={(evt) => {
evt.preventDefault();
evt.stopPropagation();
}}
>
{addressesSection}
</Form.Root>
{addressesSection}
</SettingsSection>
</SettingsTab>
);

View File

@ -2227,8 +2227,6 @@
"aliases_section": "Adresy místnosti",
"avatar_field_label": "Avatar místnosti",
"canonical_alias_field_label": "Hlavní adresa",
"default_url_previews_off": "Ve výchozím nastavení jsou náhledy URL adres zakázané pro členy této místnosti.",
"default_url_previews_on": "Ve výchozím nastavení jsou náhledy URL adres povolené pro členy této místnosti.",
"description_space": "Upravte nastavení týkající se vašeho prostoru.",
"error_creating_alias_description": "Při vytváření adresy došlo k chybě. Mohl to zakázat server, nebo mohlo dojít k dočasnému selhání.",
"error_creating_alias_title": "Chyba při tvorbě adresy",
@ -2259,12 +2257,7 @@
"published_aliases_explainer_space": "Zveřejněné adresy může použít kdokoli na jakémkoli serveru, aby se připojil k vašemu prostoru.",
"published_aliases_section": "Publikovaná adresa",
"save": "Uložit změny",
"topic_field_label": "Téma místnosti",
"url_preview_encryption_warning": "V šifrovaných místnostech, jako je tato, jsou URL náhledy ve výchozím nastavení vypnuté, aby bylo možné zajistit, že váš domovský server neshromažďuje informace o odkazech, které v této místnosti vidíte.",
"url_preview_explainer": "Když někdo ve zprávě pošle URL adresu, může být zobrazen její náhled obsahující informace jako titulek, popis a obrázek z cílové stránky.",
"url_previews_section": "Náhledy webových adres",
"user_url_previews_default_off": "<a>Vypnuli</a> jste automatické náhledy webových adres.",
"user_url_previews_default_on": "<a>Zapnuli</a> jste automatické náhledy webových adres."
"topic_field_label": "Téma místnosti"
},
"notifications": {
"browse_button": "Procházet",
@ -2687,8 +2680,6 @@
"username": "Uživatelské jméno"
},
"inline_url_previews_default": "Nastavit povolení náhledů URL adres jako výchozí",
"inline_url_previews_room": "Povolit náhledy URL adres pro členy této místnosti jako výchozí",
"inline_url_previews_room_account": "Povolit náhledy URL adres pro tuto místnost (ovlivňuje pouze vás)",
"insert_trailing_colon_mentions": "Vložit dvojtečku za zmínku o uživateli na začátku zprávy",
"invite_controls": {
"default_label": "Povolit uživatelům pozvat vás do místností"

View File

@ -2227,8 +2227,6 @@
"aliases_section": "Cyfeiriadau Ystafell",
"avatar_field_label": "Afatar ystafell",
"canonical_alias_field_label": "Prif gyfeiriad",
"default_url_previews_off": "Mae rhagolygon URL wedi'u hanalluogi fel rhagosodiad ar gyfer cyfranogwyr yn yr ystafell hon.",
"default_url_previews_on": "Mae rhagolygon URL wedi'u galluogi fel rhagosodiad ar gyfer cyfranogwyr yn yr ystafell hon.",
"description_space": "Golygu gosodiadau sy'n ymwneud â'ch gofod.",
"error_creating_alias_description": "Bu gwall wrth greu'r cyfeiriad hwnnw. Mae'n bosib na chaiff ei ganiatáu gan y gweinydd neu fe ddigwyddodd methiant dros dro.",
"error_creating_alias_title": "Gwall wrth greu cyfeiriad",
@ -2259,12 +2257,7 @@
"published_aliases_explainer_space": "Gall unrhyw un ar unrhyw weinydd ddefnyddio cyfeiriadau cyhoeddedig i ymuno â'ch gofod.",
"published_aliases_section": "Cyfeiriadau Cyhoeddedig",
"save": "Cadw'r Newidiadau",
"topic_field_label": "Pwnc yr Ystafell",
"url_preview_encryption_warning": "Mewn ystafelloedd wedi'u hamgryptio, fel yr un hon, mae rhagolygon URL yn cael eu hanalluogi fel rhagosodiad i sicrhau na all eich gweinydd cartref (lle mae'r rhagolygon yn cael eu cynhyrchu) gasglu gwybodaeth am ddolenni welwch yn yr ystafell hon.",
"url_preview_explainer": "Pan fydd rhywun yn rhoi URL yn eu neges, mae modd dangos rhagolwg URL i roi mwy o wybodaeth am y ddolen honno fel y teitl, disgrifiad, a delwedd o'r wefan.",
"url_previews_section": "Rhagolygon URL",
"user_url_previews_default_off": "Rydych wedi <a>analluogi</a> rhagolygon URL fel rhagosodiad.",
"user_url_previews_default_on": "Rydych chi wedi <a>galluogi</a> rhagolygon URL fel rhagosodiad."
"topic_field_label": "Pwnc yr Ystafell"
},
"notifications": {
"browse_button": "Pori",
@ -2685,8 +2678,6 @@
"username": "Enw defnyddiwr"
},
"inline_url_previews_default": "Galluogi rhagolygon URL mewnol fel rhagosodiad",
"inline_url_previews_room": "Galluogi rhagolygon URL fel rhagosodiad ar gyfer cyfranogwyr yn yr ystafell hon",
"inline_url_previews_room_account": "Galluogi rhagolygon URL ar gyfer yr ystafell hon (yn effeithio arnoch chi yn unig)",
"insert_trailing_colon_mentions": "Mewnosod colon sy'n llusgo ar ôl i'r defnyddiwr sôn amdano ar ddechrau neges",
"invite_controls": {
"default_label": "Caniatáu i ddefnyddwyr eich gwahodd i ystafelloedd"

View File

@ -114,7 +114,7 @@
"show_advanced": "Vis avanceret",
"show_all": "Vis alle",
"sign_in": "Log ind",
"sign_out": "Log ud",
"sign_out": "Fjern denne enhed",
"skip": "Spring over",
"start": "Start",
"start_chat": "Start samtale",
@ -705,6 +705,7 @@
"decline_invitation_dialog": {
"title": "Afvis invitation"
},
"desktop_default_device_name": "%(brand)s Skrivebord: %(platformName)s",
"devtools": {
"active_widgets": "Aktive widgets",
"category_other": "Andre",
@ -979,6 +980,8 @@
"unknown_error_code": "Ukendt fejlkode",
"update_power_level": "Kunne ikke ændre effektniveau"
},
"error_app_open_in_another_tab_title": "%(brand)s er åbnet i et andet faneblad",
"error_app_opened_in_another_window": "%(brand)s er åben i et andet vindue. Klik på \"%(label)s\" for at bruge %(brand)s her og frakoble det andet vindue.",
"error_database_closed_description": {
"for_desktop": "Din disk er måske fyldt. Vær venlig at rydde noget plads og genindlæse.",
"for_web": "Hvis du har ryddet browserdata, er denne meddelelse forventet. %(brand)s kan også være åben i en anden fane, eller din disk er fuld. Ryd venligst lidt plads og genindlæs"
@ -1146,6 +1149,7 @@
"continue": "Fortsæt alligevel",
"linux": "Linux",
"macos": "Mac",
"title": "%(brand)s understøtter ikke denne browser",
"windows_64bit": "Windows (64-bit)",
"windows_arm_64bit": "Windows (ARM 64-bit)"
},
@ -1938,8 +1942,6 @@
"aliases_section": "Rummets adresser",
"avatar_field_label": "Avatar for rummet",
"canonical_alias_field_label": "Hovedadresse",
"default_url_previews_off": "URL-forhåndsvisninger er som standard deaktiveret for deltagere i dette rum.",
"default_url_previews_on": "URL-forhåndsvisninger er som standard aktiveret for deltagere i dette rum.",
"description_space": "Redigér indstillinger for din klynge.",
"error_creating_alias_description": "Der opstod en fejl under oprettelsen af adressen. Den er muligvis ikke tilladt af serveren, eller der er opstået en midlertidig fejl.",
"error_creating_alias_title": "Fejl ved oprettelse af adresse",
@ -1966,12 +1968,7 @@
"published_aliases_explainer_space": "Publicerede adresser kan bruges af alle til at tilslutte sig din klynge.",
"published_aliases_section": "Offentliggjorte adresser",
"save": "Gem ændringer",
"topic_field_label": "Rummets emne",
"url_preview_encryption_warning": "I krypterede rum, som dette, er URL-forhåndsvisninger som standard deaktiveret for at sikre, at din hjemmeserver (hvor forhåndsvisningerne genereres) ikke kan indsamle oplysninger om links, du ser i dette rum.",
"url_preview_explainer": "Når nogen indtaster en URL i sin besked, kan der vises en forhåndsvisning af URL'en, der giver flere oplysninger om linket, f.eks. titel, beskrivelse og et billede fra webstedet.",
"url_previews_section": "URL-forhåndsvisninger",
"user_url_previews_default_off": "Du har <a>deaktiveret</a> URL-forhåndsvisning som standard.",
"user_url_previews_default_on": "Du har <a>aktiveret</a> URL-forhåndsvisninger som standard."
"topic_field_label": "Rummets emne"
},
"notifications": {
"browse_button": "Gennemse",
@ -2291,9 +2288,7 @@
"remove_msisdn_prompt": "Fjern %(phone)s?",
"spell_check_locale_placeholder": "Vælg en lokalitet"
},
"inline_url_previews_default": "Aktivér indbyggede URL-forhåndsvisninger som standard",
"inline_url_previews_room": "Aktivér forhåndsvisning af URL-adresser som standard for deltagere i dette rum",
"inline_url_previews_room_account": "Aktivér forhåndsvisning af URL-adresser for dette rum (påvirker kun dig)",
"inline_url_previews_default": "Aktivér forhåndsvisninger",
"insert_trailing_colon_mentions": "Indsæt et afsluttende kolon efter brugeromtaler i starten af en meddelelse",
"jump_to_bottom_on_send": "Gå til bunden af tidslinjen, når du sender en besked",
"key_backup": {
@ -2462,20 +2457,20 @@
"best_security_note": "For at opnå den bedste sikkerhed skal du bekræfte dine sessioner og logge ud fra enhver session, som du ikke genkender eller bruger længere.",
"browser": "Browser",
"confirm_sign_out": {
"one": "Bekræft, at du logger af denne enhed",
"other": "Bekræft, at du logger af disse enheder"
"one": "Bekræft fjernelse af denne enhed",
"other": "Bekræft fjernelse af disse enheder"
},
"confirm_sign_out_body": {
"one": "Klik på knappen herunder for at bekræfte, at du logger af denne enhed.",
"other": "Klik på knappen herunder for at bekræfte, at du logger af disse enheder."
"one": "Klik på knappen nedenfor for at bekræfte fjernelse af denne enhed.",
"other": "Klik på knappen nedenfor for at bekræfte fjernelse af disse enheder."
},
"confirm_sign_out_continue": {
"one": "Log ud af enheden",
"other": "Log ud af enheder"
"one": "Fjern enhed",
"other": "Fjern enheder"
},
"confirm_sign_out_sso": {
"one": "Bekræft, at du logger af denne enhed ved at bruge Single Sign On for at bevise din identitet.",
"other": "Bekræft, at du logger af disse enheder ved at bruge Single Sign On for at bevise din identitet."
"one": "Bekræft fjernelse af denne enhed ved at bruge Single Sign-On til at bevise din identitet.",
"other": "Bekræft fjernelse af disse enheder ved at bruge Single Sign-On til at bevise din identitet."
},
"current_session": "Nuværende session",
"desktop_session": "Skrivebordssession",
@ -2526,7 +2521,7 @@
"sign_in_with_qr": "Forbind ny enhed",
"sign_in_with_qr_button": "Vis QR-kode",
"sign_in_with_qr_description": "Brug en QR-kode til at logge ind på en anden enhed og opsætte sikker beskedkommunikation.",
"sign_out": "Log ud af denne session",
"sign_out": "Fjern denne session",
"sign_out_all_other_sessions": "Log ud af alle andre sessioner (%(otherSessionsCount)s)",
"sign_out_confirm_description": {
"one": "Er du sikker på, at du vil logge ud af %(count)s sessionen?",
@ -3284,6 +3279,9 @@
"truncated_list_n_more": {
"other": "Og %(count)s mere..."
},
"unsupported_browser": {
"title": "%(brand)s understøtter ikke denne browser"
},
"unsupported_server_description": "Denne server bruger en ældre version af Matrix. Opgrader til Matrix %(version)s for at kunne bruge %(brand)s uden fejl.",
"unsupported_server_title": "Din server er ikke understøttet",
"update": {
@ -3487,6 +3485,7 @@
"voice_call": "Stemmeopkald",
"you_are_presenting": "Du præsenterer"
},
"web_default_device_name": "%(appName)s: %(browserName)s på %(osName)s",
"welcome_to_element": "Velkommen til Element",
"widget": {
"added_by": "Widget tilføjet af",

View File

@ -2219,8 +2219,6 @@
"aliases_section": "Chatadressen",
"avatar_field_label": "Chat Avatar",
"canonical_alias_field_label": "Primäre Adresse",
"default_url_previews_off": "URL-Vorschau ist für Mitglieder des Chats standardmäßig deaktiviert.",
"default_url_previews_on": "URL-Vorschau ist für Mitglieder des Chats standardmäßig aktiviert.",
"description_space": "Einstellungen vom Space bearbeiten.",
"error_creating_alias_description": "Es gab einen Fehler beim Anlegen der Adresse. Entweder erlaubt es der Server nicht oder es gab ein temporäres Problem.",
"error_creating_alias_title": "Fehler beim Anlegen der Adresse",
@ -2251,12 +2249,7 @@
"published_aliases_explainer_space": "Veröffentlichte Adressen erlauben jedem, den Space zu betreten.",
"published_aliases_section": "Öffentliche Adresse",
"save": "Speichern",
"topic_field_label": "Chat-Thema",
"url_preview_encryption_warning": "In verschlüsselten Chats wie diesem ist die Linkvorschau standardmäßig deaktiviert, damit dein Homeserver (der die Vorschau erzeugt) keine Informationen über Links in diesem Chat erhält.",
"url_preview_explainer": "Die URL-Vorschau kann Informationen wie den Titel, die Beschreibung sowie ein Vorschaubild der Website enthalten.",
"url_previews_section": "URL-Vorschau",
"user_url_previews_default_off": "Du hast die URL-Vorschau <a>standardmäßig deaktiviert</a>.",
"user_url_previews_default_on": "Du hast die URL-Vorschau <a>standardmäßig aktiviert</a>."
"topic_field_label": "Chat-Thema"
},
"notifications": {
"browse_button": "Durchsuchen",
@ -2678,8 +2671,6 @@
"username": "Benutzername"
},
"inline_url_previews_default": "URL-Vorschau standardmäßig aktivieren",
"inline_url_previews_room": "URL-Vorschau für Chat Mitglieder",
"inline_url_previews_room_account": "URL-Vorschau für dich in diesem Chat",
"insert_trailing_colon_mentions": "Doppelpunkt nach Erwähnungen einfügen",
"invite_controls": {
"default_label": "Nutzern erlauben, dich in Chats einzuladen"

View File

@ -1728,8 +1728,6 @@
"aliases_section": "Διευθύνσεις δωματίων",
"avatar_field_label": "Εικόνα δωματίου",
"canonical_alias_field_label": "Κύρια διεύθυνση",
"default_url_previews_off": "Η προεπισκόπηση διευθύνσεων URL είναι απενεργοποιημένη από προεπιλογή για τους συμμετέχοντες σε αυτό το δωμάτιο.",
"default_url_previews_on": "Η προεπισκόπηση διευθύνσεων URL είναι ενεργοποιημένη από προεπιλογή για τους συμμετέχοντες σε αυτό το δωμάτιο.",
"description_space": "Επεξεργαστείτε τις ρυθμίσεις που σχετίζονται με τον χώρο σας.",
"error_creating_alias_description": "Παρουσιάστηκε σφάλμα κατά τη δημιουργία αυτής της διεύθυνσης. Ενδέχεται να μην επιτρέπεται από τον διακομιστή ή να έχει παρουσιαστεί προσωρινή αποτυχία.",
"error_creating_alias_title": "Σφάλμα δημιουργίας διεύθυνσης",
@ -1756,12 +1754,7 @@
"published_aliases_explainer_space": "Οι δημοσιευμένες διευθύνσεις μπορούν να χρησιμοποιηθούν από οποιονδήποτε σε οποιονδήποτε διακομιστή για να συμμετάσχει στο χώρο σας.",
"published_aliases_section": "Δημοσιευμένες Διευθύνσεις",
"save": "Αποθήκευση Αλλαγών",
"topic_field_label": "Θέμα Δωματίου",
"url_preview_encryption_warning": "Σε κρυπτογραφημένα δωμάτια, όπως αυτό, οι προεπισκόπηση URL είναι απενεργοποιημένη από προεπιλογή για να διασφαλιστεί ότι ο κεντρικός σας διακομιστής (όπου δημιουργείται μια προεπισκόπηση) δεν μπορεί να συγκεντρώσει πληροφορίες σχετικά με συνδέσμους που βλέπετε σε αυτό το δωμάτιο.",
"url_preview_explainer": "Όταν κάποιος εισάγει μια διεύθυνση URL στο μήνυμά του, μπορεί να εμφανιστεί μια προεπισκόπηση του URL για να δώσει περισσότερες πληροφορίες σχετικά με αυτόν τον σύνδεσμο, όπως τον τίτλο, την περιγραφή και μια εικόνα από τον ιστότοπο.",
"url_previews_section": "Προεπισκόπηση συνδέσμων",
"user_url_previews_default_off": "Έχετε <a>απενεργοποιημένη</a> από προεπιλογή την προεπισκόπηση συνδέσμων.",
"user_url_previews_default_on": "Έχετε <a>ενεργοποιημένη</a> από προεπιλογή την προεπισκόπηση συνδέσμων."
"topic_field_label": "Θέμα Δωματίου"
},
"notifications": {
"browse_button": "Εξερεύνηση",
@ -2039,8 +2032,6 @@
"spell_check_locale_placeholder": "Επιλογή τοπικών ρυθμίσεων"
},
"inline_url_previews_default": "Ενεργοποιήστε τις ενσωματωμένες προεπισκοπήσεις URL από προεπιλογή",
"inline_url_previews_room": "Ενεργοποιήστε τις προεπισκοπήσεις URL από προεπιλογή για τους συμμετέχοντες σε αυτό το δωμάτιο",
"inline_url_previews_room_account": "Ενεργοποίηση προεπισκόπισης URL για αυτό το δωμάτιο (επηρεάζει μόνο εσάς)",
"insert_trailing_colon_mentions": "Εισαγάγετε άνω και κάτω τελεία μετά την αναφορά του χρήστη στην αρχή ενός μηνύματος",
"jump_to_bottom_on_send": "Μεταβείτε στο τέλος του χρονολογίου όταν στέλνετε ένα μήνυμα",
"key_backup": {

View File

@ -1381,8 +1381,6 @@
"aliases_section": "Adresoj de ĉambro",
"avatar_field_label": "Profilbildo de ĉambro",
"canonical_alias_field_label": "Ĉefa adreso",
"default_url_previews_off": "Antaŭrigardoj de URL-oj estas implicite malŝaltitaj por anoj de tiu ĉi ĉambro.",
"default_url_previews_on": "Antaŭrigardoj de URL-oj estas implicite ŝaltitaj por anoj de tiu ĉi ĉambro.",
"description_space": "Redaktu agordojn pri via aro.",
"error_creating_alias_description": "Eraris kreado de tiu adreso. Eble ĝi ne estas permesata de la servilo, aŭ okazis portempa fiasko.",
"error_creating_alias_title": "Eraris kreado de adreso",
@ -1409,12 +1407,7 @@
"published_aliases_explainer_space": "Publikigitajn adresojn povas uzi ajna persono sur ajna servilo por aliĝi al via aro.",
"published_aliases_section": "Publikigitaj adresoj",
"save": "Konservi ŝanĝojn",
"topic_field_label": "Temo de ĉambro",
"url_preview_encryption_warning": "En ĉifritaj ĉambroj, kiel ĉi tiu, antaŭrigardoj al URL-oj estas implicite malŝaltitaj por certigi, ke via hejmservilo (kie la antaŭrigardoj estas generataj) ne povas kolekti informojn pri ligiloj en ĉi tiu ĉambro.",
"url_preview_explainer": "Kiam iu metas URL-on en sian mesaĝon, antaŭrigardo al tiu URL povas montriĝi, por doni pliajn informojn pri tiu ligilo, kiel ekzemple la titolon, priskribon, kaj bildon el la retejo.",
"url_previews_section": "Antaŭrigardoj al retpaĝoj",
"user_url_previews_default_off": "Vi <a>malŝaltis</a> implicitajn antaŭrigardojn al retpaĝoj.",
"user_url_previews_default_on": "Vi <a>ŝaltis</a> implicitajn antaŭrigardojn al retpaĝoj."
"topic_field_label": "Temo de ĉambro"
},
"notifications": {
"browse_button": "Foliumi",
@ -1657,8 +1650,6 @@
"remove_msisdn_prompt": "Ĉu forigi %(phone)s?"
},
"inline_url_previews_default": "Ŝalti entekstan antaŭrigardon al retadresoj",
"inline_url_previews_room": "Ŝalti URL-antaŭrigardon por anoj de ĉi tiu ĉambro",
"inline_url_previews_room_account": "Ŝalti URL-antaŭrigardon en ĉi tiu ĉambro (nur por vi)",
"jump_to_bottom_on_send": "Salti al subo de historio sendinte mesaĝon",
"key_backup": {
"setup_secure_backup": {

View File

@ -1847,8 +1847,6 @@
"aliases_section": "Direcciones de la sala",
"avatar_field_label": "Avatar de la sala",
"canonical_alias_field_label": "Dirección principal",
"default_url_previews_off": "La vista previa de URLs se desactiva por defecto para los participantes de esta sala.",
"default_url_previews_on": "La vista previa de URLs se activa por defecto en los participantes de esta sala.",
"description_space": "Edita los ajustes de tu espacio.",
"error_creating_alias_description": "Hubo un error al crear esa dirección. Es posible que el servidor no lo permita o que haya ocurrido una falla temporal.",
"error_creating_alias_title": "Error al crear la dirección",
@ -1875,12 +1873,7 @@
"published_aliases_explainer_space": "Los espacios publicados pueden usarse por cualquiera, independientemente de su servidor base.",
"published_aliases_section": "Direcciones publicadas",
"save": "Guardar cambios",
"topic_field_label": "Asunto de la sala",
"url_preview_encryption_warning": "En salas cifradas como ésta, la vista previa de las URLs se desactiva por defecto para asegurar que el servidor base (donde se generan) no pueda recopilar información de los enlaces que veas en esta sala.",
"url_preview_explainer": "Cuando alguien incluya una dirección URL en su mensaje, puede mostrarse una vista previa para ofrecer información sobre el enlace, que incluirá el título, descripción, y una imagen del sitio web.",
"url_previews_section": "Vista previa de enlaces",
"user_url_previews_default_off": "Has <a>desactivado</a> la vista previa de URLs por defecto.",
"user_url_previews_default_on": "Has <a>activado</a> las vista previa de URLs por defecto."
"topic_field_label": "Asunto de la sala"
},
"notifications": {
"browse_button": "Seleccionar",
@ -2172,8 +2165,6 @@
"spell_check_locale_placeholder": "Elige un idioma"
},
"inline_url_previews_default": "Activar la vista previa de URLs en línea por defecto",
"inline_url_previews_room": "Activar la vista previa de URLs por defecto para los participantes de esta sala",
"inline_url_previews_room_account": "Activar la vista previa de URLs en esta sala (solo para ti)",
"insert_trailing_colon_mentions": "Inserta automáticamente dos puntos después de las menciones que hagas al principio de los mensajes",
"jump_to_bottom_on_send": "Saltar abajo del todo al enviar un mensaje",
"key_backup": {

View File

@ -2219,8 +2219,6 @@
"aliases_section": "Jututubade aadressid",
"avatar_field_label": "Jututoa tunnuspilt ehk avatar",
"canonical_alias_field_label": "Põhiaadress",
"default_url_previews_off": "URL'ide eelvaated on vaikimisi lülitatud välja selles jututoas osalejate jaoks.",
"default_url_previews_on": "URL'ide eelvaated on vaikimisi kasutusel selles jututoas osalejate jaoks.",
"description_space": "Muuda oma kogukonnakeskuse seadistusi.",
"error_creating_alias_description": "Aadressi loomisel tekkis viga. See kas on serveri poolt keelatud või tekkis ajutine tõrge.",
"error_creating_alias_title": "Viga aadressi loomisel",
@ -2251,12 +2249,7 @@
"published_aliases_explainer_space": "Avaldatud aadresse saab igaüks igast serverist kasutada liitumiseks sinu kogukonnakeskusega.",
"published_aliases_section": "Avaldatud aadressid",
"save": "Salvesta muutused",
"topic_field_label": "Jututoa teema",
"url_preview_encryption_warning": "Krüptitud jututubades, nagu see praegune, URL'ide eelvaated ei ole vaikimisi kasutusel. See tagab, et sinu koduserver (kus eelvaated luuakse) ei saaks koguda teavet viidete kohta, mida sa siin jututoas näed.",
"url_preview_explainer": "Kui keegi lisab oma sõnumisse URL'i, siis võidakse näidata selle URL'i eelvaadet, mis annab lisateavet tema kohta, nagu näiteks pealkiri, kirjeldus ja kuidas ta välja näeb.",
"url_previews_section": "URL'ide eelvaated",
"user_url_previews_default_off": "Vaikimisi oled URL'ide eelvaated <a>lülitanud välja</a>.",
"user_url_previews_default_on": "Vaikimisi oled URL'ide eelvaated <a>võtnud kasutusele</a>."
"topic_field_label": "Jututoa teema"
},
"notifications": {
"browse_button": "Sirvi",
@ -2678,8 +2671,6 @@
"username": "Kasutajanimi"
},
"inline_url_previews_default": "Luba URL'ide vaikimisi eelvaated",
"inline_url_previews_room": "Luba URL'ide vaikimisi eelvaated selles jututoas osalejate jaoks",
"inline_url_previews_room_account": "Luba URL'ide eelvaated selle jututoa jaoks (mõjutab vaid sind)",
"insert_trailing_colon_mentions": "Mainimiste järel näita sõnumi alguses koolonit",
"invite_controls": {
"default_label": "Luba kasutajatel sind kutsida jututubadesse"

View File

@ -1253,8 +1253,6 @@
"aliases_section": "آدرس‌های اتاق",
"avatar_field_label": "آواتار اتاق",
"canonical_alias_field_label": "آدرس اصلی",
"default_url_previews_off": "پیش نمایش URL به طور پیش فرض برای شرکت کنندگان در این اتاق غیرفعال است.",
"default_url_previews_on": "پیش نمایش URL به طور پیش فرض برای شرکت کنندگان در این اتاق فعال است.",
"description_space": "تنظیمات مربوط به فضای کاری خود را ویرایش کنید.",
"error_creating_alias_description": "هنگام ایجاد آدرس خطایی روی داد. ممکن است سرور مجاز نباشد و یا اینکه خطایی موقت رخ داده باشد.",
"error_creating_alias_title": "خطا در ایجاد آدرس",
@ -1276,12 +1274,7 @@
"publish_toggle": "این اتاق را در فهرست اتاق %(domain)s برای عموم منتشر شود؟",
"published_aliases_section": "آدرس‌های منتشر شده",
"save": "ذخیره تغییرات",
"topic_field_label": "موضوع اتاق",
"url_preview_encryption_warning": "در اتاق های رمزگذاری شده، مانند این اتاق، پیش نمایش URL به طور پیش فرض غیرفعال است تا اطمینان حاصل شود که سرور شما (جایی که پیش نمایش ها ایجاد می شود) نمی تواند اطلاعات مربوط به پیوندهایی را که در این اتاق مشاهده می کنید جمع آوری کند.",
"url_preview_explainer": "هنگامی که فردی یک URL را در پیام خود قرار می دهد، می توان با مشاهده پیش نمایش آن URL، اطلاعات بیشتری در مورد آن پیوند مانند عنوان ، توضیحات و یک تصویر از وب سایت دریافت کرد.",
"url_previews_section": "پیش‌نمایش URL",
"user_url_previews_default_off": "شما به طور پیش فرض پیش نمایش url را <a>غیر فعال</a> کرده اید.",
"user_url_previews_default_on": "شما به طور پیش فرض پیش نمایش url را <a>فعال</a> کرده اید."
"topic_field_label": "موضوع اتاق"
},
"notifications": {
"browse_button": "جستجو",
@ -1460,8 +1453,6 @@
"remove_msisdn_prompt": "%(phone)s را پاک می‌کنید؟"
},
"inline_url_previews_default": "فعال‌سازی پیش‌نمایش URL به صورت پیش‌فرض",
"inline_url_previews_room": "امکان پیش‌نمایش URL را به صورت پیش‌فرض برای اعضای این اتاق فعال کن",
"inline_url_previews_room_account": "فعال‌سازی پیش‌نمایش URL برای این اتاق (تنها شما را تحت تاثیر قرار می‌دهد)",
"jump_to_bottom_on_send": "زمانی که پیام ارسال می‌کنید، به صورت خودکار به آخرین پیام پرش کن",
"key_backup": {
"setup_secure_backup": {

View File

@ -1839,8 +1839,6 @@
"aliases_section": "Huoneen osoitteet",
"avatar_field_label": "Huoneen kuva",
"canonical_alias_field_label": "Pääosoite",
"default_url_previews_off": "URL-esikatselut ovat oletuksena pois päältä tämän huoneen jäsenillä.",
"default_url_previews_on": "URL-esikatselut on päällä oletusarvoisesti tämän huoneen jäsenillä.",
"description_space": "Muokkaa tilaasi liittyviä asetuksia.",
"error_creating_alias_description": "Osoitetta luotaessa tapahtui virhe. Voi olla, että palvelin ei salli sitä tai kyseessä oli tilapäinen virhe.",
"error_creating_alias_title": "Virhe osoitetta luotaessa",
@ -1869,12 +1867,7 @@
"published_aliases_explainer_space": "Julkaistuja osoitteita voi käyttää kuka tahansa millä tahansa palvelimella liittyäkseen tilaasi.",
"published_aliases_section": "Julkaistut osoitteet",
"save": "Tallenna muutokset",
"topic_field_label": "Huoneen aihe",
"url_preview_encryption_warning": "Salatuissa huoneissa, kuten tässä, osoitteiden esikatselut ovat oletuksena pois käytöstä, jotta kotipalvelimesi (missä osoitteiden esikatselut luodaan) ei voi kerätä tietoa siitä, mitä linkkejä näet tässä huoneessa.",
"url_preview_explainer": "Kun joku asettaa osoitteen linkiksi viestiinsä, URL-esikatselu voi näyttää tietoja linkistä kuten otsikon, kuvauksen ja kuvan verkkosivulta.",
"url_previews_section": "URL-esikatselut",
"user_url_previews_default_off": "Olet oletusarvoisesti ottanut URL-esikatselut <a>pois käytöstä</a>.",
"user_url_previews_default_on": "Olet oletusarvoisesti ottanut URL-esikatselut <a>käyttöön</a>."
"topic_field_label": "Huoneen aihe"
},
"notifications": {
"browse_button": "Selaa",
@ -2222,8 +2215,6 @@
"username": "Käyttäjätunnus"
},
"inline_url_previews_default": "Ota linkkien esikatselu käyttöön oletusarvoisesti",
"inline_url_previews_room": "Ota linkkien esikatselu käyttöön kaikille huoneen jäsenille",
"inline_url_previews_room_account": "Ota linkkien esikatselut käyttöön tässä huoneessa (koskee ainoastaan sinua)",
"insert_trailing_colon_mentions": "Lisää kaksoispiste käyttäjän maininnan perään viestin alussa",
"jump_to_bottom_on_send": "Siirry aikajanan pohjalle, kun lähetät viestin",
"key_backup": {

View File

@ -829,7 +829,7 @@
"invalid_json": "Ne semble pas être du JSON valide.",
"level": "Rang",
"low_bandwidth_mode": "Mode faible bande passante",
"low_bandwidth_mode_description": "Nécessite un serveur daccueil compatible.",
"low_bandwidth_mode_description": "Désactive le chiffrement, la présence, les avatars, les accusés de lecture et les notifications de saisie.",
"main_timeline": "Historique principal",
"manual_device_verification": "Vérification manuelle de l'appareil",
"no_receipt_found": "Aucun accusé disponible",
@ -1114,7 +1114,7 @@
"verification_requested_toast_title": "Vérification requise",
"verified_identity_changed": "L'identité numérique de %(displayName)s (<b>%(userId)s</b>) a été réinitialisée. <a>En savoir plus</a>",
"verified_identity_changed_no_displayname": "L'identité de <b>%(userId)s</b> a été réinitialisée. <a>En savoir plus </a>",
"verify_toast_description": "À compter de fin avril 2026, les appareils non vérifiés ne pourront plus envoyer ni recevoir de messages.<a>En savoir plus</a>",
"verify_toast_description": "À compter de fin octobre 2026, les appareils non vérifiés ne pourront plus envoyer ni recevoir de messages.<a>En savoir plus</a>",
"verify_toast_title": "Vérifiez cet appareil",
"withdraw_verification_action": "Révoquer la vérification"
},
@ -2237,8 +2237,6 @@
"aliases_section": "Adresses du salon",
"avatar_field_label": "Avatar du salon",
"canonical_alias_field_label": "Adresse principale",
"default_url_previews_off": "Les aperçus d'URL sont désactivés par défaut pour les participants de ce salon.",
"default_url_previews_on": "Les aperçus d'URL sont activés par défaut pour les participants de ce salon.",
"description_space": "Modifiez les paramètres de votre espace.",
"error_creating_alias_description": "Une erreur est survenue lors de la création de ladresse. Ce nest peut-être pas autorisé par le serveur ou une erreur temporaire est survenue.",
"error_creating_alias_title": "Erreur lors de la création de ladresse",
@ -2269,12 +2267,7 @@
"published_aliases_explainer_space": "Les adresses publiées peuvent être utilisées par tout le monde sur tous les serveurs pour rejoindre votre espace.",
"published_aliases_section": "Adresses publiées",
"save": "Enregistrer les modifications",
"topic_field_label": "Sujet du salon",
"url_preview_encryption_warning": "Dans les salons chiffrés, comme celui-ci, laperçu des liens est désactivé par défaut pour sassurer que le serveur daccueil (où sont générés les aperçus) ne puisse pas collecter dinformations sur les liens qui apparaissent dans ce salon.",
"url_preview_explainer": "Quand quelquun met un lien dans son message, un aperçu du lien peut être affiché afin de fournir plus dinformations sur ce lien comme le titre, la description et une image du site.",
"url_previews_section": "Aperçus des liens",
"user_url_previews_default_off": "Vous avez <a>désactivé</a> les aperçus dURL par défaut.",
"user_url_previews_default_on": "Vous avez <a>activé</a> les aperçus dURL par défaut."
"topic_field_label": "Sujet du salon"
},
"notifications": {
"browse_button": "Parcourir",
@ -2696,9 +2689,8 @@
"unable_to_load_msisdns": "Impossible de charger les numéros de téléphone",
"username": "Nom dutilisateur"
},
"inline_url_previews_default": "Activer laperçu des URL par défaut",
"inline_url_previews_room": "Activer laperçu des URL par défaut pour les participants de ce salon",
"inline_url_previews_room_account": "Activer laperçu des URL pour ce salon (naffecte que vous)",
"inline_url_previews_default": "Activer les aperçus",
"inline_url_previews_encrypted": "Activer les aperçus dans les sallons chiffrés",
"insert_trailing_colon_mentions": "Insérer deux-points après les mentions de l'utilisateur au début d'un message",
"invite_controls": {
"default_label": "Autoriser les utilisateurs à vous inviter dans les salons"
@ -2836,6 +2828,8 @@
"enable_tray_icon": "Afficher licône dans la barre détat et minimiser la fenêtre lors de la fermeture",
"keyboard_heading": "Raccourcis clavier",
"keyboard_view_shortcuts_button": "Pour voir tous les raccourcis claviers, <a>cliquez ici</a>.",
"link_previews_description": "Affiche des informations sur les liens sous les messages",
"link_previews_heading": "Aperçus des liens",
"media_heading": "Images, GIF et vidéos",
"presence_description": "Partager votre activité et votre statut avec les autres.",
"publish_timezone": "Publier le fuseau horaire sur le profil public",
@ -4002,6 +3996,7 @@
"change_name_this_room": "Changer le nom de ce salon",
"change_topic_active_room": "Changer le sujet dans le salon actuel",
"change_topic_this_room": "Changer le sujet de ce salon",
"download_file": "Télécharger des fichiers depuis le dépôt multimédia",
"receive_membership_active_room": "Afficher quand des personnes rejoignent, partent, ou sont invités dans votre salon actif",
"receive_membership_this_room": "Voir quand une personne rejoint, quitte ou est invitée sur ce salon",
"remove_ban_invite_leave_active_room": "Expulser, bannir ou inviter des personnes dans votre salon actif et en partir",

View File

@ -1608,8 +1608,6 @@
"aliases_section": "Enderezos da sala",
"avatar_field_label": "Avatar da sala",
"canonical_alias_field_label": "Enderezo principal",
"default_url_previews_off": "As vistas previas de URL están desactivadas por defecto para as participantes desta sala.",
"default_url_previews_on": "As vistas previas de URL están activas por defecto para os participantes desta sala.",
"description_space": "Editar os axustes relativos ao teu espazo.",
"error_creating_alias_description": "Algo fallou ao crear ese enderezo. Podería non estar autorizado polo servidor ou ser un fallo temporal.",
"error_creating_alias_title": "Fallo ao crear o enderezo",
@ -1636,12 +1634,7 @@
"published_aliases_explainer_space": "Os enderezos publicados podense usar por calquera en calquera servidor para unirse ao teu espazo.",
"published_aliases_section": "Enderezos publicados",
"save": "Gardar cambios",
"topic_field_label": "Asunto da sala",
"url_preview_encryption_warning": "Nas salas cifradas, como é esta, está desactivado por defecto a previsualización das URL co fin de asegurarse de que o servidor local (que é onde se gardan as previsualizacións) non poida recoller información sobre das ligazóns que se ven nesta sala.",
"url_preview_explainer": "Cando alguén pon unha URL na mensaxe, esta previsualízarase para que así se coñezan xa cousas delas como o título, a descrición ou as imaxes que inclúe ese sitio web.",
"url_previews_section": "Vista previa de URL",
"user_url_previews_default_off": "<a>Desactivou</a> a vista previa de URL por defecto.",
"user_url_previews_default_on": "<a>Activou</a> a vista previa de URL por defecto."
"topic_field_label": "Asunto da sala"
},
"notifications": {
"browse_button": "Buscar",
@ -1907,8 +1900,6 @@
"spell_check_locale_placeholder": "Elixe o idioma"
},
"inline_url_previews_default": "Activar por defecto as vistas previas en liña de URL",
"inline_url_previews_room": "Activar a vista previa de URL por defecto para as participantes nesta sala",
"inline_url_previews_room_account": "Activar vista previa de URL nesta sala (só che afecta a ti)",
"insert_trailing_colon_mentions": "Inserir dous puntos tras mencionar a outra usuaria no inicio da mensaxe",
"jump_to_bottom_on_send": "Ir ao final da cronoloxía cando envías unha mensaxe",
"key_backup": {

View File

@ -1325,8 +1325,6 @@
"aliases_section": "כתובות חדרים",
"avatar_field_label": "אוואטר של החדר",
"canonical_alias_field_label": "כתובת ראשית",
"default_url_previews_off": "תצוגות מקדימות של כתובות אתרים מושבתות כברירת מחדל עבור משתתפים בחדר זה.",
"default_url_previews_on": "תצוגות מקדימות של כתובות אתרים מופעלות כברירת מחדל עבור משתתפים בחדר זה.",
"description_space": "שינוי הגדרות הנוגעות למרחב העבודה שלכם.",
"error_creating_alias_description": "אירעה שגיאה ביצירת כתובת זו. ייתכן שהשרת אינו מאפשר זאת או שהתרחש כשל זמני.",
"error_creating_alias_title": "שגיאה ביצירת כתובת",
@ -1353,12 +1351,7 @@
"published_aliases_explainer_space": "כל אחד בכל שרת יכול להשתמש בכתובות שפורסמו כדי להצטרף למרחב העבודה שלכם.",
"published_aliases_section": "כתובות מפורסמות",
"save": "שמור שינוייים",
"topic_field_label": "נושא החדר",
"url_preview_encryption_warning": "בחדרים מוצפנים, כמו זה, תצוגות מקדימות של כתובות אתרים מושבתות כברירת מחדל כדי להבטיח ששרת הבית שלך (במקום בו נוצרות התצוגות המקדימות) אינו יכול לאסוף מידע על קישורים שאתה רואה בחדר זה.",
"url_preview_explainer": "כאשר מישהו מכניס כתובת URL להודעה שלו, ניתן להציג תצוגה מקדימה של כתובת אתר כדי לתת מידע נוסף על קישור זה, כמו הכותרת, התיאור והתמונה מהאתר.",
"url_previews_section": "תצוגת קישורים",
"user_url_previews_default_off": "יש לך <a> השבת </a> תצוגות מקדימות של כתובות אתרים כברירת מחדל.",
"user_url_previews_default_on": "כברירת מחדל, <a> הפעלת </a> תצוגה מקדימה של כתובות אתרים."
"topic_field_label": "נושא החדר"
},
"notifications": {
"browse_button": "דפדף",
@ -1587,8 +1580,6 @@
"remove_msisdn_prompt": "הסר מספרי %(phone)s ?"
},
"inline_url_previews_default": "אפשר צפייה של תצוגת קישורים בצאט כברירת מחדל",
"inline_url_previews_room": "אפשר לחברים בחדר זה לצפות בתצוגת קישורים",
"inline_url_previews_room_account": "הראה תצוגה מקדימה של קישורים בחדר זה (משפיע רק עליכם)",
"insert_trailing_colon_mentions": "הוסף נקודתיים לאחר אזכור המשתמש בתחילת ההודעה",
"jump_to_bottom_on_send": "קפוץ לתחתית השיחה בעת שליחת הודעה",
"key_backup": {

View File

@ -2250,8 +2250,6 @@
"aliases_section": "Adrese soba",
"avatar_field_label": "Avatar sobe",
"canonical_alias_field_label": "Glavna adresa",
"default_url_previews_off": "Pregledi URL-ova zadano su onemogućeni za sudionike u ovoj sobi.",
"default_url_previews_on": "Pregledi URL-ova zadano su omogućeni za sudionike u ovoj sobi.",
"description_space": "Uredite postavke koje se odnose na vaš prostor.",
"error_creating_alias_description": "Došlo je do pogreške prilikom izrade te adrese. Poslužitelj to možda ne dopušta ili je došlo do privremenog kvara.",
"error_creating_alias_title": "Pogreška prilikom izrade adrese",
@ -2282,12 +2280,7 @@
"published_aliases_explainer_space": "Objavljene adrese može upotrebljavati svatko na svakom poslužitelju kako bi se pridružio vašem prostoru.",
"published_aliases_section": "Objavljene adrese",
"save": "Spremi promjene",
"topic_field_label": "Tema sobe",
"url_preview_encryption_warning": "U šifriranim sobama, poput ove, pregledi URL-ova zadano su onemogućeni kako bi se osiguralo da vaš matični poslužitelj (na kojem se generiraju pregledi) ne može prikupljati informacije o poveznicama koje vidite u ovoj sobi.",
"url_preview_explainer": "Kada netko u svoju poruku unese URL, može se prikazati pregled URL-a kako bi se dobile dodatne informacije o toj poveznici, kao što su naslov, opis i slika s mrežnog mjesta.",
"url_previews_section": "Pregledi URL-ova",
"user_url_previews_default_off": "Zadano <a>onemogućili</a> preglede URL-ova.",
"user_url_previews_default_on": "Zadano ste <a>omogućili</a> preglede URL-ova."
"topic_field_label": "Tema sobe"
},
"notifications": {
"browse_button": "Pregledaj",
@ -2713,8 +2706,6 @@
"username": "Korisničko ime"
},
"inline_url_previews_default": "Zadano omogući umetnute pretpreglede URL-ova",
"inline_url_previews_room": "Omogući preglede URL-ova prema zadanim postavkama za sudionike u ovoj sobi",
"inline_url_previews_room_account": "Omogući preglede URL-ova za ovu sobu (utječe samo na vas)",
"insert_trailing_colon_mentions": "Umetni dvotočku nakon što spominjanja korisnika na početku poruke",
"invite_controls": {
"default_label": "Dopustite korisnicima da vas pozovu u sobe"

View File

@ -2219,8 +2219,6 @@
"aliases_section": "Szobacímek",
"avatar_field_label": "Szoba profilképe",
"canonical_alias_field_label": "Fő cím",
"default_url_previews_off": "A webcím-előnézet alapértelmezetten tiltva van a szobában lévőknek.",
"default_url_previews_on": "A webcím-előnézet alapértelmezetten engedélyezve van a szobában lévőknek.",
"description_space": "A tér beállításainak szerkesztése.",
"error_creating_alias_description": "Hiba történt a cím létrehozása során. Nincs engedélyezve a kiszolgálón, vagy átmeneti hiba történt.",
"error_creating_alias_title": "Cím beállítási hiba",
@ -2251,12 +2249,7 @@
"published_aliases_explainer_space": "A közzétett címet bárki használhatja a térbe való belépéshez, bármelyik kiszolgálóról.",
"published_aliases_section": "Nyilvánosságra hozott cím",
"save": "Változtatások mentése",
"topic_field_label": "Szoba témája",
"url_preview_encryption_warning": "A titkosított szobákban, mint például ez is, a webcím-előnézet alapértelmezetten ki van kapcsolva, hogy biztosított legyen, hogy a Matrix-kiszolgáló (amelyen az előnézet készül) ne tudjon információt gyűjteni arról, hogy milyen hivatkozásokat lát ebben a szobában.",
"url_preview_explainer": "Ha valaki webcímet helyez az üzenetébe, akkor lehetőség van egy előnézet megjelenítésére, amellyel további információt kaphat a hivatkozásról, mint a cím, a leírás és a weboldal képe.",
"url_previews_section": "Webcím-előnézet",
"user_url_previews_default_off": "A webcím-előnézet alapból <a>tiltva</a> van.",
"user_url_previews_default_on": "A webcím-előnézet alapból <a>engedélyezve</a> van."
"topic_field_label": "Szoba témája"
},
"notifications": {
"browse_button": "Böngészés",
@ -2678,8 +2671,6 @@
"username": "Felhasználónév"
},
"inline_url_previews_default": "Beágyazott webcím-előnézetek alapértelmezett engedélyezése",
"inline_url_previews_room": "Webcím-előnézetek alapértelmezett engedélyezése a szobatagok számára",
"inline_url_previews_room_account": "Webcím-előnézetek engedélyezése ebben a szobában (csak Önt érinti)",
"insert_trailing_colon_mentions": "Záró kettőspont beszúrása egy felhasználó üzenet elején való megemlítésekor",
"invite_controls": {
"default_label": "Felhasználók meghívhatják szobákba"

View File

@ -2143,8 +2143,6 @@
"aliases_section": "Սենյակի հասցեներ",
"avatar_field_label": "Սենյակի ավատար",
"canonical_alias_field_label": "Հիմնական հասցե",
"default_url_previews_off": "URL նախադիտումները լռելյայն անջատված են այս սենյակի մասնակիցների համար:",
"default_url_previews_on": "URL- ի նախադիտումները միացված են լռելյայն այս սենյակի մասնակիցների համար:",
"description_space": "Խմբագրել ձեր տարածքին վերաբերող կարգավորումները:",
"error_creating_alias_description": "Այդ հասցեն ստեղծելիս սխալ տեղի ունեցավ։ Հնարավոր է՝ սերվերը թույլ չի տվել դա, կամ ժամանակավոր խափանում է տեղի ունեցել։",
"error_creating_alias_title": "Հասցեի ստեղծման սխալ",
@ -2173,12 +2171,7 @@
"published_aliases_explainer_space": "Հրապարակված հասցեները կարող են օգտագործվել ցանկացած մեկի կողմից ցանկացած սերվերում` ձեր տարածքին միանալու համար:",
"published_aliases_section": "Հրապարակված հասցեներ",
"save": "Պահպանել փոփոխությունները",
"topic_field_label": "Սենյակի թեմա",
"url_preview_encryption_warning": "Գաղտնագրված սենյակներում, ինչպես այս մեկը, URL նախադիտումները անջատվում են լռելյայն `ապահովելու համար, որ ձեր homeserver-ը (որտեղ առաջանում են նախադիտումները) չկարողանա տեղեկություններ հավաքել այս սենյակում տեսած հղումների մասին:",
"url_preview_explainer": "Երբ ինչոր մեկը URL է դնում իր հաղորդագրության մեջ, URL- ի նախադիտումը կարող է ցուցադրվել` այդ հղման մասին լրացուցիչ տեղեկություններ տալու համար, ինչպիսիք են վերնագիրը, նկարագրությունը և կայքէջից պատկերը:",
"url_previews_section": "URL- ի նախադիտումներ",
"user_url_previews_default_off": "Դուք լռելյայն <a>անջատել եք</a> URL- ի նախադիտումները:",
"user_url_previews_default_on": "Դուք լռելյայն <a>միացրել եք</a> URL- ի նախադիտումները:"
"topic_field_label": "Սենյակի թեմա"
},
"notifications": {
"browse_button": "Զննել",
@ -2591,8 +2584,6 @@
"username": "Օգտանուն"
},
"inline_url_previews_default": "Լռելյայն միացնել URL- ի ներդիրային նախադիտումները",
"inline_url_previews_room": "Միացնել URL-ների նախադիտումները լռելյայնորեն այս սենյակի մասնակիցների համար",
"inline_url_previews_room_account": "Միացնել URL-ների նախադիտումները այս սենյակի համար (ազդում է միայն ձեզ վրա)",
"insert_trailing_colon_mentions": "Հաղորդագրության սկզբում գտնվող օգտատիրոջ հիշատակումից հետո ավելացնել երկկետ",
"invite_controls": {
"default_label": "Թույլատրել օգտատերերին հրավիրել ձեզ սենյակներ"

View File

@ -115,7 +115,7 @@
"show_advanced": "Tampilkan lanjutan",
"show_all": "Tampilkan semua",
"sign_in": "Masuk",
"sign_out": "Keluar",
"sign_out": "Hapus perangkat ini",
"skip": "Lewat",
"start": "Mulai",
"start_chat": "Mulai obrolan",
@ -2208,8 +2208,6 @@
"aliases_section": "Alamat Ruangan",
"avatar_field_label": "Avatar ruangan",
"canonical_alias_field_label": "Alamat utama",
"default_url_previews_off": "Tampilan URL dinonaktifkan secara bawaan untuk anggota di ruangan ini.",
"default_url_previews_on": "Tampilan URL diaktifkan secara bawaan untuk anggota di ruangan ini.",
"description_space": "Edit pengaturan yang berkaitan dengan space Anda.",
"error_creating_alias_description": "Terjadi sebuah kesalahan membuat alamat. Ini mungkin tidak diperbolehkan oleh servernya atau ada kegagalan sementara.",
"error_creating_alias_title": "Terjadi kesalahan membuat alamat",
@ -2240,12 +2238,7 @@
"published_aliases_explainer_space": "Alamat yang dipublikasikan dapat digunakan oleh siapa saja di server apa saja untuk bergabung dengan space Anda.",
"published_aliases_section": "Alamat yang Dipublikasikan",
"save": "Simpan Perubahan",
"topic_field_label": "Topik Ruangan",
"url_preview_encryption_warning": "Di ruangan terenkripsi, seperti ruangan ini, tampilan URL dinonaktifkan secara bawaan untuk memastikan homeserver Anda (di mana tampilannya dibuat) tidak mendapatkan informasi tentang tautan yang Anda lihat di ruangan ini.",
"url_preview_explainer": "Ketika seseorang menambahkan URL di pesannya, sebuah tampilan URL dapat ditampilkan untuk memberikan informasi lainnya tentang tautan itu seperti judul, deskripsi, dan sebuah gambar dari website.",
"url_previews_section": "Tampilan URL",
"user_url_previews_default_off": "Anda telah <a>menonaktifkan</a> tampilan URL secara bawaan.",
"user_url_previews_default_on": "Anda telah <a>mengaktifkan</a> tampilan URL secara bawaan."
"topic_field_label": "Topik Ruangan"
},
"notifications": {
"browse_button": "Jelajahi",
@ -2667,8 +2660,6 @@
"username": "Nama pengguna"
},
"inline_url_previews_default": "Aktifkan tampilan URL secara bawaan",
"inline_url_previews_room": "Aktifkan tampilan URL secara bawaan untuk anggota di ruangan ini",
"inline_url_previews_room_account": "Aktifkan tampilan URL secara bawaan (hanya memengaruhi Anda)",
"insert_trailing_colon_mentions": "Tambahkan sebuah karakter titik dua sesudah sebutan pengguna dari awal pesan",
"invite_controls": {
"default_label": "Izinkan pengguna mengundang Anda ke ruangan"

View File

@ -1543,8 +1543,6 @@
"aliases_section": "Vistföng spjallrása",
"avatar_field_label": "Auðkennismynd spjallrásar",
"canonical_alias_field_label": "Aðalvistfang",
"default_url_previews_off": "Forskoðun vefslóða er sjálfgefið óvirk fyrir þátttakendur í þessari spjallrás.",
"default_url_previews_on": "Forskoðun vefslóða er sjálfgefið virk fyrir þátttakendur í þessari spjallrás.",
"description_space": "Breyta stillingum viðkomandi svæðinu þínu.",
"error_creating_alias_title": "Villa við að búa til vistfang",
"error_deleting_alias_description_forbidden": "Þú hefur ekki heimild til að eyða vistfanginu.",
@ -1564,11 +1562,7 @@
"publish_toggle": "Birta þessa spjallrás opinberlega á skrá %(domain)s yfir spjallrásir?",
"published_aliases_section": "Birt vistföng",
"save": "Vista breytingar",
"topic_field_label": "Umfjöllunarefni spjallrásar",
"url_preview_encryption_warning": "Í dulrituðum spjallrásum, eins og þessari, er sjálfgefið slökkt á forskoðun vefslóða til að tryggja að heimaþjónn þinn (þar sem forskoðunin myndast) geti ekki safnað upplýsingum um tengla sem þú sérð í þessari spjallrás.",
"url_previews_section": "Forskoðun vefslóða",
"user_url_previews_default_off": "Þú hefur <a>óvirkt</a> forskoðun vefslóða sjálfgefið.",
"user_url_previews_default_on": "Þú hefur <a>virkt</a> forskoðun vefslóða sjálfgefið."
"topic_field_label": "Umfjöllunarefni spjallrásar"
},
"notifications": {
"browse_button": "Skoða",
@ -1809,8 +1803,6 @@
"spell_check_locale_placeholder": "Veldu staðfærslu"
},
"inline_url_previews_default": "Sjálfgefið virkja forskoðun innfelldra vefslóða",
"inline_url_previews_room": "Virkja forskoðun vefslóða sjálfgefið fyrir þátttakendur í þessari spjallrás",
"inline_url_previews_room_account": "Virkja forskoðun vefslóða fyrir þessa spjallrás (einungis fyrir þig)",
"insert_trailing_colon_mentions": "Setja tvípunkt á eftir þar sem minnst er á notanda í upphafi skilaboða",
"jump_to_bottom_on_send": "Hoppa neðst á tímalínuna þegar þú sendir skilaboð",
"key_backup": {

View File

@ -1908,8 +1908,6 @@
"aliases_section": "Indirizzi stanza",
"avatar_field_label": "Avatar della stanza",
"canonical_alias_field_label": "Indirizzo principale",
"default_url_previews_off": "Le anteprime degli URL sono inattive in modo predefinito per i partecipanti di questa stanza.",
"default_url_previews_on": "Le anteprime degli URL sono attive in modo predefinito per i partecipanti di questa stanza.",
"description_space": "Modifica le impostazioni relative al tuo spazio.",
"error_creating_alias_description": "Si è verificato un errore creando l'indirizzo. Potrebbe non essere permesso dal server o un problema temporaneo.",
"error_creating_alias_title": "Errore creazione indirizzo",
@ -1936,12 +1934,7 @@
"published_aliases_explainer_space": "Gli indirizzi pubblicati possono essere usati da chiunque su tutti i server per entrare nel tuo spazio.",
"published_aliases_section": "Indirizzi pubblicati",
"save": "Salva modifiche",
"topic_field_label": "Argomento stanza",
"url_preview_encryption_warning": "Nelle stanze criptate, come questa, le anteprime degli URL sono disattivate in modo predefinito per garantire che il tuo homeserver (dove vengono generate le anteprime) non possa raccogliere informazioni sui collegamenti che vedi in questa stanza.",
"url_preview_explainer": "Quando qualcuno inserisce un URL nel proprio messaggio, è possibile mostrare un'anteprima dell'URL per fornire maggiori informazioni su quel collegamento, come il titolo, la descrizione e un'immagine dal sito web.",
"url_previews_section": "Anteprime URL",
"user_url_previews_default_off": "Hai <a>disattivato</a> le anteprime degli URL in modo predefinito.",
"user_url_previews_default_on": "Hai <a>attivato</a> le anteprime degli URL in modo predefinito."
"topic_field_label": "Argomento stanza"
},
"notifications": {
"browse_button": "Sfoglia",
@ -2247,8 +2240,6 @@
"spell_check_locale_placeholder": "Scegli una lingua"
},
"inline_url_previews_default": "Attiva le anteprime URL in modo predefinito",
"inline_url_previews_room": "Attiva le anteprime URL in modo predefinito per i partecipanti in questa stanza",
"inline_url_previews_room_account": "Attiva le anteprime URL in questa stanza (riguarda solo te)",
"insert_trailing_colon_mentions": "Inserisci dei due punti dopo le citazioni degli utenti all'inizio di un messaggio",
"jump_to_bottom_on_send": "Salta in fondo alla linea temporale quando invii un messaggio",
"key_backup": {

View File

@ -1739,8 +1739,6 @@
"aliases_section": "ルームのアドレス",
"avatar_field_label": "ルームのアバター",
"canonical_alias_field_label": "メインアドレス",
"default_url_previews_off": "このルームの参加者には、既定でURLプレビューが無効です。",
"default_url_previews_on": "このルームの参加者には、既定でURLプレビューが有効です。",
"description_space": "スペースの設定を変更します。",
"error_creating_alias_description": "アドレスを作成する際にエラーが発生しました。サーバーで許可されていないか、一時的な障害が発生した可能性があります。",
"error_creating_alias_title": "アドレスを作成する際にエラーが発生しました",
@ -1767,12 +1765,7 @@
"published_aliases_explainer_space": "公開アドレスを設定すると、どのサーバーのユーザーでも、あなたのスペースに参加できるようになります。",
"published_aliases_section": "公開アドレス",
"save": "変更を保存",
"topic_field_label": "ルームのトピック",
"url_preview_encryption_warning": "このルームを含めて、暗号化されたルームでは、あなたのホームサーバーこれがプレビューを作成しますによるリンクの情報の収集を防ぐため、URLプレビューは既定で無効になっています。",
"url_preview_explainer": "メッセージにURLが含まれる場合、タイトル、説明、ウェブサイトの画像などがURLプレビューとして表示されます。",
"url_previews_section": "URLプレビュー",
"user_url_previews_default_off": "URLプレビューが既定で<a>無効</a>です。",
"user_url_previews_default_on": "URLプレビューが既定で<a>有効</a>です。"
"topic_field_label": "ルームのトピック"
},
"notifications": {
"browse_button": "参照",
@ -2048,8 +2041,6 @@
"spell_check_locale_placeholder": "ロケールを選択"
},
"inline_url_previews_default": "既定でインラインURLプレビューを有効にする",
"inline_url_previews_room": "このルームの参加者のために既定でURLプレビューを有効にする",
"inline_url_previews_room_account": "このルームのURLプレビューを有効にするあなたにのみ適用",
"insert_trailing_colon_mentions": "ユーザーをメンションする際にコロンを挿入",
"jump_to_bottom_on_send": "メッセージを送信する際にタイムラインの最下部に移動",
"key_backup": {

View File

@ -1386,8 +1386,6 @@
"aliases_section": "ოთახის მისამართები",
"avatar_field_label": "ოთახის ავატარი",
"canonical_alias_field_label": "მთავარი მისამართი",
"default_url_previews_off": "URL-ის გადახედვა ნაგულისხმევად გამორთულია ამ ოთახში მონაწილეებისთვის.",
"default_url_previews_on": "URL-ის გადახედვა ნაგულისხმევად ჩართულია ამ ოთახში მონაწილეებისთვის.",
"description_space": "შეცვალეთ პარამეტრები, რომლებიც დაკავშირებულია თქვენს სივრცესთან.",
"error_creating_alias_description": "ამ მისამართის შექმნისას მოხდა შეცდომა. ეს შეიძლება არ იყოს დაშვებული სერვერის მიერ ან მოხდა დროებითი უკმარისობა.",
"error_creating_alias_title": "შეცდომა მისამართის შექმნისას",
@ -1414,12 +1412,7 @@
"published_aliases_explainer_space": "გამოქვეყნებული მისამართები შეიძლება გამოყენებულ იქნას ნებისმიერ სერვერზე, რათა შეუერთდეს თქვენს სივრცეს.",
"published_aliases_section": "გამოქვეყნებული მისამართები",
"save": "ცვლილებების შენახვა",
"topic_field_label": "ოთახის თემა",
"url_preview_encryption_warning": "დაშიფრულ ოთახებში, როგორიცაა ეს, URL-ის გადახედვა ნაგულისხმევად გამორთულია, რათა უზრუნველყოს, რომ თქვენი სახლის სერვერი (სადაც იქმნება გადახედვები) ვერ შეაგროვებს ინფორმაციას ამ ოთახში ნახულ ბმულებზე.",
"url_preview_explainer": "როდესაც ვინმე ათავსებს URL-ს თავის შეტყობინებაში, URL-ის გადახედვა შეიძლება ნაჩვენები იყოს ამ ბმულის შესახებ მეტი ინფორმაციის მისაღებად, როგორიცაა სათაური, აღწერა და სურათი ვებსაიტიდან.",
"url_previews_section": "URL გადახედვები",
"user_url_previews_default_off": "თქვენ გაქვთ<a> ინვალიდი</a> URL-ის გადახედვა ნაგულისხმევად.",
"user_url_previews_default_on": "თქვენ გაქვთ<a> ჩართულია</a> URL-ის გადახედვა ნაგულისხმევად."
"topic_field_label": "ოთახის თემა"
},
"notifications": {
"browse_button": "დათვალიერება",
@ -1685,8 +1678,6 @@
"spell_check_locale_placeholder": "აირჩიეთ ლოკალი"
},
"inline_url_previews_default": "ნაგულისხმევად ჩართული URL-ის გადახედვის ჩართვა",
"inline_url_previews_room": "URL-ის გადახედვის ჩართვა ნაგულისხმევად ამ ოთახში მონაწილეებისთვის",
"inline_url_previews_room_account": "ამ ოთახისთვის URL-ის გადახედვის ჩართვა (მხოლოდ თქვენზე მოქმედებს)",
"insert_trailing_colon_mentions": "ჩადეთ ბოლო ორწერტილი მას შემდეგ, რაც მომხმარებელი აღნიშნავს შეტყობინების დასაწყისში",
"jump_to_bottom_on_send": "შეტყობინების გაგზავნისას გადადით ქრონოლოგიის ბოლოში",
"key_backup": {

View File

@ -2196,8 +2196,6 @@
"aliases_section": "방 주소",
"avatar_field_label": "방 아바타",
"canonical_alias_field_label": "기본 주소",
"default_url_previews_off": "기본으로 URL 미리 보기가 이 방에 참여한 사람들 모두에게 꺼졌습니다.",
"default_url_previews_on": "기본으로 URL 미리 보기가 이 방에 참여한 사람들 모두에게 켜졌습니다.",
"description_space": "스페이스와 관련된 설정을 편집하세요.",
"error_creating_alias_description": "해당 주소를 생성하는 과정에서 오류가 발생했습니다. 서버에서 허용하지 않거나 일시적인 오류가 발생했을 수 있습니다.",
"error_creating_alias_title": "주소 생성 중 오류 발생",
@ -2226,12 +2224,7 @@
"published_aliases_explainer_space": "공개된 주소는 어떤 서버의 누구든지 귀하의 공간에 참여하는 데 사용할 수 있습니다.",
"published_aliases_section": "공개된 주소",
"save": "변경 사항 저장",
"topic_field_label": "방 주제",
"url_preview_encryption_warning": "지금 이 방처럼, 암호화된 방에서는 홈서버 (미리 보기가 만들어지는 곳)에서 이 방에서 보여지는 링크에 대해 알 수 없도록 기본으로 URL 미리 보기가 꺼집니다.",
"url_preview_explainer": "누군가 메시지에 URL을 넣으면, URL 미리 보기로 웹사이트에서 온 제목, 설명, 그리고 이미지 등 그 링크에 대한 정보가 표시됩니다.",
"url_previews_section": "URL 미리보기",
"user_url_previews_default_off": "기본으로 URL 미리 보기를 <a>껐습니다</a>.",
"user_url_previews_default_on": "기본으로 URL 미리 보기를 <a>켰습니다</a>."
"topic_field_label": "방 주제"
},
"notifications": {
"browse_button": "찾기",
@ -2648,8 +2641,6 @@
"username": "사용자 이름"
},
"inline_url_previews_default": "기본으로 인라인 URL 미리 보기 사용하기",
"inline_url_previews_room": "이 방에 참여한 모두에게 기본으로 URL 미리보기 사용하기",
"inline_url_previews_room_account": "이 방에서 URL 미리보기 사용하기 (오직 나만 영향을 받음)",
"insert_trailing_colon_mentions": "메시지 시작 부분에 사용자 언급 뒤에 콜론을 추가합니다",
"invite_controls": {
"default_label": "사용자가 방에 초대할 수 있도록 허용"

View File

@ -1574,8 +1574,6 @@
"aliases_section": "ທີ່ຢູ່ຂອງຫ້ອງ",
"avatar_field_label": "ຮູບ avatar ຫ້ອງ",
"canonical_alias_field_label": "ທີ່ຢູ່ຫຼັກ",
"default_url_previews_off": "ການສະແດງຕົວຢ່າງ URL ຖືກປິດການນຳໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນສຳລັບຜູ້ເຂົ້າຮ່ວມໃນຫ້ອງນີ້.",
"default_url_previews_on": "ການສະແດງຕົວຢ່າງ URL ຖືກເປີດໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນສໍາລັບຜູ້ເຂົ້າຮ່ວມໃນຫ້ອງນີ້.",
"description_space": "ແກ້ໄຂການຕັ້ງຄ່າທີ່ກ່ຽວຂ້ອງກັບພື້ນທີ່ຂອງທ່ານ.",
"error_creating_alias_description": "ເກີດຄວາມຜິດພາດໃນການສ້າງທີ່ຢູ່ນັ້ນ. ມັນອາດຈະບໍ່ໄດ້ຮັບການອະນຸຍາດຈາກເຊີບເວີ ຫຼືບໍ່ສຳເລັດ ຊົ່ວຄາວເກີດຂຶ້ນ.",
"error_creating_alias_title": "ເກີດຄວາມຜິດພາດໃນການສ້າງທີ່ຢູ່",
@ -1602,12 +1600,7 @@
"published_aliases_explainer_space": "ທີ່ຢູ່ທີ່ເຜີຍແຜ່ສາມາດຖືກນໍາໃຊ້ໂດຍຜູ້ໃດຜູ້ຫນຶ່ງໃນເຊີບເວີຂອງການເຂົ້າຮ່ວມຊ່ອງຂອງທ່ານ.",
"published_aliases_section": "ທີ່ຢູ່ເຜີຍແຜ່",
"save": "ບັນທຶກການປ່ຽນແປງ",
"topic_field_label": "ຫົວຂໍ້ຫ້ອງ",
"url_preview_encryption_warning": "ໃນຫ້ອງທີ່ເຂົ້າລະຫັດ, ເຊັ່ນດຽວກັບ, ການສະແດງຕົວຢ່າງ URLໄດ້ປິດໃຊ້ງານໂດຍຄ່າເລີ່ມຕົ້ນເພື່ອຮັບປະກັນວ່າ homeserver ຂອງທ່ານ (ບ່ອນສະແດງຕົວຢ່າງ) ບໍ່ສາມາດລວບລວມຂໍ້ມູນກ່ຽວກັບການເຊື່ອມຕໍ່ທີ່ທ່ານເຫັນຢູ່ໃນຫ້ອງນີ້.",
"url_preview_explainer": "ເມື່ອຜູ້ໃດຜູ້ນຶ່ງໃສ່ URL ໃນຂໍ້ຄວາມຂອງພວກເຂົາ, ການສະແດງຕົວຢ່າງ URL ສາມາດສະແດງເພື່ອໃຫ້ຂໍ້ມູນເພີ່ມເຕີມກ່ຽວກັບການເຊື່ອມຕໍ່ນັ້ນເຊັ່ນຫົວຂໍ້, ຄໍາອະທິບາຍແລະຮູບພາບຈາກເວັບໄຊທ໌.",
"url_previews_section": "ຕົວຢ່າງ URL",
"user_url_previews_default_off": "ທ່ານໄດ້ <a>ປິດໃຊ້ງານ</a> ຕົວຢ່າງ URL ຕາມຄ່າເລີ່ມຕົ້ນ.",
"user_url_previews_default_on": "ທ່ານໄດ້ <a>ເປີດໃຊ້ງານ</a> ຕົວຢ່າງ URL ຕາມຄ່າເລີ່ມຕົ້ນ."
"topic_field_label": "ຫົວຂໍ້ຫ້ອງ"
},
"notifications": {
"browse_button": "ຄົ້ນຫາ",
@ -1869,8 +1862,6 @@
"remove_msisdn_prompt": "ລຶບ %(phone)sອອກບໍ?"
},
"inline_url_previews_default": "ເປີດໃຊ້ການສະແດງຕົວຢ່າງ URL ໃນແຖວຕາມຄ່າເລີ່ມຕົ້ນ",
"inline_url_previews_room": "ເປີດໃຊ້ການສະແດງຕົວຢ່າງ URL ໂດຍຄ່າເລີ່ມຕົ້ນສໍາລັບຜູ້ເຂົ້າຮ່ວມໃນຫ້ອງນີ້",
"inline_url_previews_room_account": "ເປີດໃຊ້ຕົວຢ່າງ URL ສໍາລັບຫ້ອງນີ້ (ມີຜົນຕໍ່ທ່ານເທົ່ານັ້ນ)",
"insert_trailing_colon_mentions": "ຈໍ້າສອງເມັດພາຍຫຼັງຈາກຜູ້ໃຊ້ກ່າວເຖິງໃນຕອນເລີ່ມຕົ້ນຂອງຂໍ້ຄວາມ",
"jump_to_bottom_on_send": "ໄປຫາລຸ່ມສຸດຂອງທາມລາຍເມື່ອທ່ານສົ່ງຂໍ້ຄວາມ",
"key_backup": {

View File

@ -1197,8 +1197,6 @@
"aliases_section": "Kambario Adresai",
"avatar_field_label": "Kambario pseudoportretas",
"canonical_alias_field_label": "Pagrindinis adresas",
"default_url_previews_off": "URL nuorodų peržiūros šio kambario dalyviams yra išjungtos kaip numatytosios.",
"default_url_previews_on": "URL nuorodų peržiūros šio kambario dalyviams yra įjungtos kaip numatytosios.",
"description_space": "Redaguoti su savo erdve susijusius nustatymus.",
"error_creating_alias_description": "Kuriant šį adresą įvyko klaida. Gali būti, kad serveris jo neleidžia arba įvyko laikina klaida.",
"error_creating_alias_title": "Klaida kuriant adresą",
@ -1225,12 +1223,7 @@
"published_aliases_explainer_space": "Paskelbtus adresus gali naudoti bet kas bet kuriame serveryje, prisijungimui prie jūsų erdvės.",
"published_aliases_section": "Paskelbti Adresai",
"save": "Išsaugoti Pakeitimus",
"topic_field_label": "Kambario Tema",
"url_preview_encryption_warning": "Šifruotuose kambariuose, tokiuose kaip šis, URL nuorodų peržiūros pagal numatymą yra išjungtos, kad būtų užtikrinta, jog jūsų serveris (kur yra generuojamos peržiūros) negali rinkti informacijos apie jūsų šiame kambaryje peržiūrėtas nuorodas.",
"url_preview_explainer": "Kai kas nors į savo žinutę įtraukia URL, gali būti rodoma URL peržiūra, suteikianti daugiau informacijos apie tą nuorodą, tokios kaip pavadinimas, aprašymas ir vaizdas iš svetainės.",
"url_previews_section": "URL nuorodų peržiūros",
"user_url_previews_default_off": "Jūs <a>išjungėte</a> URL nuorodų peržiūras kaip numatytasias.",
"user_url_previews_default_on": "Jūs <a>įjungėte</a> URL nuorodų peržiūras kaip numatytasias."
"topic_field_label": "Kambario Tema"
},
"notifications": {
"browse_button": "Naršyti",
@ -1475,8 +1468,6 @@
"remove_msisdn_prompt": "Pašalinti %(phone)s?"
},
"inline_url_previews_default": "Įjungti URL nuorodų peržiūras kaip numatytasias",
"inline_url_previews_room": "Įjungti URL nuorodų peržiūras kaip numatytasias šiame kambaryje esantiems dalyviams",
"inline_url_previews_room_account": "Įjungti URL nuorodų peržiūras šiame kambaryje (įtakoja tik jus)",
"insert_trailing_colon_mentions": "Įterpti dvitaškį po naudotojo paminėjimų žinutės pradžioje",
"jump_to_bottom_on_send": "Peršokti į laiko juostos apačią, kai siunčiate žinutę",
"key_backup": {

View File

@ -1841,8 +1841,6 @@
"aliases_section": "Istabas adreses",
"avatar_field_label": "Istabas avatars",
"canonical_alias_field_label": "Galvenā adrese",
"default_url_previews_off": "ULR priekšskatījumi šīs istabas dalībniekiem pēc noklusējuma ir atspējoti.",
"default_url_previews_on": "URL priekšskatījumi šīs istabas dalībniekiem pēc noklusējuma ir iespējoti.",
"description_space": "Rediģējiet ar jūsu telpu saistītos iestatījumus.",
"error_creating_alias_description": "Veidojot šo adresi, radās kļūda. Iespējams, serveris to neatļauj vai arī ir radusies īslaicīga kļūme.",
"error_creating_alias_title": "Veidojot adresi, radās kļūda",
@ -1869,12 +1867,7 @@
"published_aliases_explainer_space": "Publicētās adreses var izmantot ikviens jebkurā serverī, lai pievienotos jūsu telpai.",
"published_aliases_section": "Publiskotās adreses",
"save": "Saglabāt izmaiņas",
"topic_field_label": "Istabas temats",
"url_preview_encryption_warning": "Šifrētās istabās, tādās kā šī, URL priekšskatījumi pēc noklusējumi ir atspējoti, lai nodrošinātu, ka mājasserveris (kurā priekšskatījumi tiek izveidoti) nevar iegūt informāciju par šajā istabā redzamajām saitēm.",
"url_preview_explainer": "Kad kāds savā ziņā ievieto URL, var tikt parādīts priekšskatījums, lai sniegtu vairāk informācijas par saiti, kā piemēram, virsraksts, apraksts un attēls no tīmekļvietnes.",
"url_previews_section": "URL priekšskatījumi",
"user_url_previews_default_off": "Tu pēc noklusējuma esi <a>atspējojis</a> URL priekšskatījumus.",
"user_url_previews_default_on": "Tu pēc noklusējuma esi <a>iespējojis</a> URL priekšskatījumus."
"topic_field_label": "Istabas temats"
},
"notifications": {
"browse_button": "Pārlūkot",
@ -2164,8 +2157,6 @@
"spell_check_locale_placeholder": "Izvēlieties lokalizāciju"
},
"inline_url_previews_default": "Iespējot URL priekšskatījumus pēc noklusējuma",
"inline_url_previews_room": "Iespējot URL priekšskatījumus pēc noklusējuma visiem šīs istabas dalībniekiem",
"inline_url_previews_room_account": "Iespējot URL priekšskatījumus šajā istabā (ietekmē tikai Tevi)",
"insert_trailing_colon_mentions": "Jāievieto beigu kols pēc lietotāja pieminēšanas ziņas sākumā",
"jump_to_bottom_on_send": "Nosūtot ziņu, pāriet uz laika skalas beigām",
"key_backup": {

View File

@ -1892,8 +1892,6 @@
"aliases_section": "Adiresy ao amin'ny efitrano",
"avatar_field_label": "Avatar efitra",
"canonical_alias_field_label": "Adiresy lehibe",
"default_url_previews_off": "Ny fijeriny URL dia esorina hoany mpandray anjara amin'ity efitrano ity.",
"default_url_previews_on": "Ny fijerena URL dia alefa amin'ny alàlany default hoany mpandray anjara amin'ity efitrano ity.",
"description_space": "Ahitsio ny kira mifandraika amin'ny habakabaka.",
"error_creating_alias_description": "Nisy lesoka tamin'ny famoronana io adiresy io. Mety tsy avelany mpizara izany na nisy tsy fahombiazana vonjimaika.",
"error_creating_alias_title": "Hadisoana tamin'ny famoronana adiresy",
@ -1920,12 +1918,7 @@
"published_aliases_explainer_space": "Ny adiresy navoaka dia azon'ny olona ampiasaina aminy mpizara rehetra mba hiditra amin'ny habakao.",
"published_aliases_section": "Adiresy navoaka",
"save": "Alaina ny fanovana",
"topic_field_label": "Lohahevitra Efitrano",
"url_preview_encryption_warning": "Ao aminy efitrano misy miafina, toa an'ity iray ity, ny fijerena URL dia kilemaina amin'ny alàlany default mba hahazoana antoka fa tsy afaka manangona fampahalalana momba ny rohy hitanao ao amin'ity efitrano ity ny mpampiantrano anao (izay anaovana ny preview).",
"url_preview_explainer": "Rehefa misy olona mametraka URL ao amin'ny hafany, dia azo aseho ny fijerena URL mba hanomezana fampahalalana bebe kokoa momba an'io rohy io toy ny lohateny, famaritana, ary sary avy aminy tranokala.",
"url_previews_section": "Topi-maso amin'ny Url",
"user_url_previews_default_off": "Ianao dia manana<a> sembana</a> Zahao ny URL amin'ny alàlany default.",
"user_url_previews_default_on": "Ianao dia manana<a> afaka</a> Zahao ny URL aminy alàlan'ny default."
"topic_field_label": "Lohahevitra Efitrano"
},
"notifications": {
"browse_button": "Mikaroka",
@ -2231,8 +2224,6 @@
"spell_check_locale_placeholder": "Misafidiana toerana iray"
},
"inline_url_previews_default": "Alefaso ny fijerena URL an-tserasera aminy alàlan'ny default",
"inline_url_previews_room": "Alefaso amin'ny alàlany ara-pototra hoany mpandray anjara amin'ity efitrano ity ny fijerena URL",
"inline_url_previews_room_account": "Alefaso ny fijerena URL ho an'ity efitrano ity (miantraika aminao ihany)",
"insert_trailing_colon_mentions": "Ampidiro tsangambato aoriana aorian'ny fiteny mpampiasa eo am-piandohany hafatra",
"jump_to_bottom_on_send": "Mankanesa any amin'ny farany fandaharam-potoana rehefa mandefa hafatra ianao",
"key_backup": {

View File

@ -2218,8 +2218,6 @@
"aliases_section": "Rom-adresser",
"avatar_field_label": "Rommets avatar",
"canonical_alias_field_label": "Hovedadresse",
"default_url_previews_off": "URL-forhåndsvisninger er skrudd av som standard for deltakerene i dette rommet.",
"default_url_previews_on": "URL-forhåndsvisninger er skrudd på som standard for deltakerene i dette rommet.",
"description_space": "Rediger innstillinger knyttet til området ditt.",
"error_creating_alias_description": "Det oppstod en feil ved opprettelsen av adressen. Det kan hende at serveren ikke tillater det, eller at det oppstod en midlertidig feil.",
"error_creating_alias_title": "Feil ved oppretting av adresse",
@ -2250,12 +2248,7 @@
"published_aliases_explainer_space": "Publiserte adresser kan brukes av hvem som helst på hvilken som helst server for å bli med i ditt område.",
"published_aliases_section": "Publiserte adresser",
"save": "Lagre endringer",
"topic_field_label": "Rommets tema",
"url_preview_encryption_warning": "I krypterte rom som denne, er URL-forhåndsvisninger skrudd av som standard for å sikre at hjemmeserveren din (der forhåndsvisningene blir generert) ikke kan samle inn informasjon om lenkene som du ser i dette rommet.",
"url_preview_explainer": "Når noen legger til en URL i meldingene deres, kan en URL-forhåndsvisning bli vist for å gi mere informasjonen om den lenken, f.eks. tittelen, beskrivelsen, og et bilde fra nettstedet.",
"url_previews_section": "URL-forhåndsvisninger",
"user_url_previews_default_off": "Du har <a>skrudd av</a> URL-forhåndsvisninger som standard.",
"user_url_previews_default_on": "Du har <a>skrudd på</a> URL-forhåndsvisninger som standard."
"topic_field_label": "Rommets tema"
},
"notifications": {
"browse_button": "Bla",
@ -2677,8 +2670,6 @@
"username": "Brukernavn"
},
"inline_url_previews_default": "Skru på URL-forhåndsvisninger inni meldinger som standard",
"inline_url_previews_room": "Skru på URL-forhåndsvisninger som standard for deltakerne i dette rommet",
"inline_url_previews_room_account": "Skru på URL-forhåndsvisninger for dette rommet (Påvirker bare deg)",
"insert_trailing_colon_mentions": "Sett inn et etterfølgende kolon etter at brukeromtaler i starten av en melding",
"invite_controls": {
"default_label": "Tillat brukere å invitere deg til rom"

View File

@ -1619,8 +1619,6 @@
"aliases_section": "Kameradressen",
"avatar_field_label": "Kamerafbeelding",
"canonical_alias_field_label": "Hoofdadres",
"default_url_previews_off": "URL-voorvertoningen zijn voor deelnemers van deze kamer standaard uitgeschakeld.",
"default_url_previews_on": "URL-voorvertoningen zijn voor deelnemers van deze kamer standaard ingeschakeld.",
"description_space": "Bewerk instellingen gerelateerd aan jouw space.",
"error_creating_alias_description": "Er is een fout opgetreden bij het aanmaken van dit adres. Dit wordt mogelijk niet toegestaan door de server, of er is een tijdelijk probleem opgetreden.",
"error_creating_alias_title": "Fout bij aanmaken van het adres",
@ -1647,12 +1645,7 @@
"published_aliases_explainer_space": "Gepubliceerde adressen kunnen door iedereen op elke server gebruikt worden om jouw Space te betreden.",
"published_aliases_section": "Gepubliceerde adressen",
"save": "Wijzigingen opslaan",
"topic_field_label": "Kameronderwerp",
"url_preview_encryption_warning": "In versleutelde kamers zoals deze zijn URL-voorvertoningen standaard uitgeschakeld, om te voorkomen dat jouw homeserver (waar de voorvertoningen worden gemaakt) informatie kan verzamelen over de koppelingen die je hier ziet.",
"url_preview_explainer": "Als iemand een URL in een bericht invoegt, kan er een URL-voorvertoning weergegeven worden met meer informatie over de koppeling, zoals de titel, omschrijving en een afbeelding van de website.",
"url_previews_section": "URL-voorvertoningen",
"user_url_previews_default_off": "Je hebt URL-voorvertoningen standaard <a>uitgeschakeld</a>.",
"user_url_previews_default_on": "Je hebt URL-voorvertoningen standaard <a>ingeschakeld</a>."
"topic_field_label": "Kameronderwerp"
},
"notifications": {
"browse_button": "Bladeren",
@ -1924,8 +1917,6 @@
"spell_check_locale_placeholder": "Kies een landinstelling"
},
"inline_url_previews_default": "Inline URL-voorvertoning standaard inschakelen",
"inline_url_previews_room": "URL-voorvertoning voor alle deelnemers aan deze kamer standaard inschakelen",
"inline_url_previews_room_account": "URL-voorvertoning in dit kamer inschakelen (geldt alleen voor jou)",
"insert_trailing_colon_mentions": "Voeg een dubbele punt in nadat de persoon het aan het begin van een bericht heeft vermeld",
"jump_to_bottom_on_send": "Naar de onderkant van de tijdlijn springen wanneer je een bericht verstuurd",
"key_backup": {

View File

@ -2184,8 +2184,6 @@
"aliases_section": "Adresy pokoju",
"avatar_field_label": "Awatar pokoju",
"canonical_alias_field_label": "Główny adres",
"default_url_previews_off": "Podgląd linków są domyślnie wyłączone dla uczestników tego pokoju.",
"default_url_previews_on": "Podgląd linków są domyślnie włączone dla uczestników tego pokoju.",
"description_space": "Edytuj ustawienia powiązane z twoją przestrzenią.",
"error_creating_alias_description": "Wystąpił błąd podczas aktualizowania tego adresu. Serwer mógł odrzucić żądanie lub wystąpił błąd tymczasowy.",
"error_creating_alias_title": "Wystąpił błąd podczas tworzenia adresu",
@ -2214,12 +2212,7 @@
"published_aliases_explainer_space": "Opublikowane adresy mogą być używane przez każdego, kto dołączył do Twojej przestrzeni.",
"published_aliases_section": "Opublikowane adresy",
"save": "Zapisz zmiany",
"topic_field_label": "Temat pokoju",
"url_preview_encryption_warning": "W pokojach szyfrowanych, takich jak ten, podgląd adresów URL jest domyślnie wyłączony, aby upewnić się, że serwer (na którym generowane są podglądy) nie może zbierać informacji o linkach, które widzisz w pokoju.",
"url_preview_explainer": "Gdy ktoś umieści URL w wiadomości, można wyświetlić podgląd adresu URL, aby podać więcej informacji o tym łączu, takich jak tytuł, opis i obraz ze strony internetowej.",
"url_previews_section": "Podgląd linków",
"user_url_previews_default_off": "Podgląd linków jest domyślnie <a>wyłączony</a>.",
"user_url_previews_default_on": "Podgląd linków jest domyślnie <a>włączony</a>."
"topic_field_label": "Temat pokoju"
},
"notifications": {
"browse_button": "Przeglądaj",
@ -2639,8 +2632,6 @@
"username": "Nazwa użytkownika"
},
"inline_url_previews_default": "Włącz domyślny podgląd URL w tekście",
"inline_url_previews_room": "Włącz domyślny podgląd URL dla uczestników w tym pokoju",
"inline_url_previews_room_account": "Włącz podgląd URL dla tego pokoju (dotyczy tylko Ciebie)",
"insert_trailing_colon_mentions": "Wstawiaj dwukropek po wzmiance użytkownika na początku wiadomości",
"invite_controls": {
"default_label": "Zezwól użytkownikom na zapraszanie Cię do pokojów"

View File

@ -2082,8 +2082,6 @@
"aliases_section": "Endereços de salas",
"avatar_field_label": "Avatar da sala",
"canonical_alias_field_label": "Endereço principal",
"default_url_previews_off": "As pré-visualizações de URL estão desactivadas por predefinição para os participantes nesta sala.",
"default_url_previews_on": "As pré-visualizações de URL estão activadas por predefinição para os participantes nesta sala.",
"description_space": "Edita as definições relativas ao teu espaço.",
"error_creating_alias_description": "Ocorreu um erro ao criares esse endereço. Pode não ser permitido pelo servidor ou ocorreu uma falha temporária.",
"error_creating_alias_title": "Erro ao criar o endereço",
@ -2112,12 +2110,7 @@
"published_aliases_explainer_space": "Os endereços publicados podem ser usados por qualquer pessoa em qualquer servidor para se juntar ao teu espaço.",
"published_aliases_section": "Endereços publicados",
"save": "Salvar Alterações",
"topic_field_label": "Tópico da sala",
"url_preview_encryption_warning": "Em salas encriptadas, como esta, as pré-visualizações de URL são desactivadas por predefinição para garantir que o teu servidor doméstico (onde as pré-visualizações são geradas) não pode recolher informações sobre as ligações que vês nesta sala.",
"url_preview_explainer": "Quando alguém coloca um URL na sua mensagem, pode ser mostrada uma pré-visualização do URL para dar mais informações sobre essa ligação, como o título, a descrição e uma imagem do sítio Web.",
"url_previews_section": "Pré-visualização de links",
"user_url_previews_default_off": "Você <a>desabilitou</a> pré-visualizações de links por padrão.",
"user_url_previews_default_on": "Você <a>habilitou</a> pré-visualizações de links por padrão."
"topic_field_label": "Tópico da sala"
},
"notifications": {
"browse_button": "Navegar",
@ -2520,8 +2513,6 @@
"username": "Nome de utilizador"
},
"inline_url_previews_default": "Ativar pré-visualizações de URL embutidas por predefinição",
"inline_url_previews_room": "Ativar pré-visualizações de URL por defeito para os participantes nesta sala",
"inline_url_previews_room_account": "Ativar pré-visualizações URL para esta sala (só te afeta a ti)",
"insert_trailing_colon_mentions": "Insere dois pontos após as menções do utilizador no início de uma mensagem",
"jump_to_bottom_on_send": "Salta para o fundo da linha de tempo quando enviar uma mensagem",
"key_backup": {

View File

@ -2195,8 +2195,6 @@
"aliases_section": "Endereços da sala",
"avatar_field_label": "Foto da sala",
"canonical_alias_field_label": "Endereço principal",
"default_url_previews_off": "Pré-visualizações de links estão desativadas por padrão para participantes desta sala.",
"default_url_previews_on": "Pré-visualizações de links estão ativadas por padrão para participantes desta sala.",
"description_space": "Editar configurações relacionadas ao seu espaço.",
"error_creating_alias_description": "Ocorreu um erro ao criar esse endereço. Isso pode não ser permitido pelo servidor ou houve um problema temporário.",
"error_creating_alias_title": "Erro ao criar o endereço",
@ -2225,12 +2223,7 @@
"published_aliases_explainer_space": "Endereços publicados podem ser usados por qualquer um em qualquer servidor para entrar em seu espaço.",
"published_aliases_section": "Endereços publicados",
"save": "Salvar alterações",
"topic_field_label": "Descrição da sala",
"url_preview_encryption_warning": "Em salas criptografadas, como esta, as pré-visualizações de links estão desativadas por padrão para garantir que o seu servidor local (onde as visualizações são geradas) não possa coletar informações sobre os links que você vê nesta sala.",
"url_preview_explainer": "Quando alguém inclui um link em uma mensagem, a pré-visualização do link pode ser exibida para fornecer mais informações sobre esse link, como o título, a descrição e uma imagem do site.",
"url_previews_section": "Pré-visualização de links",
"user_url_previews_default_off": "Você <a>desativou</a> pré-visualizações de links por padrão.",
"user_url_previews_default_on": "Você <a>ativou</a> pré-visualizações de links por padrão."
"topic_field_label": "Descrição da sala"
},
"notifications": {
"browse_button": "Buscar",
@ -2650,8 +2643,6 @@
"username": "Nome de usuário"
},
"inline_url_previews_default": "Ativar, por padrão, a visualização de resumo de links",
"inline_url_previews_room": "Ativar, para todos os participantes desta sala, a visualização de links",
"inline_url_previews_room_account": "Ativar, para esta sala, a visualização de links (só afeta você)",
"insert_trailing_colon_mentions": "Insira dois pontos à direita após o usuário mencionar no início de uma mensagem",
"invite_controls": {
"default_label": "Permitir que usuários convidem você para salas"

View File

@ -11,18 +11,18 @@
"other": "%(count)s непрочитанных сообщения(-й), включая упоминания.",
"one": "1 непрочитанное упоминание."
},
"recent_rooms": "Недавние комнаты",
"room_name": "Комната %(name)s",
"room_status_bar": "Строка состояния комнаты",
"recent_rooms": "Недавние чаты",
"room_name": "Чат %(name)s",
"room_status_bar": "Строка состояния чата",
"seek_bar_label": "Панель поиска аудио",
"unread_messages": "Непрочитанные сообщения.",
"user_menu": "Меню пользователя"
},
"a11y_jump_first_unread_room": "Перейти в первую непрочитанную комнату.",
"a11y_jump_first_unread_room": "Перейти в первый непрочитанный чат.",
"action": {
"accept": "Принять",
"add": "Добавить",
"add_existing_room": "Добавить существующую комнату",
"add_existing_room": "Добавить существующий чат",
"add_people": "Добавить людей",
"apply": "Применить",
"approve": "Согласиться",
@ -41,7 +41,7 @@
"copy": "Копировать",
"copy_link": "Копировать ссылку",
"create": "Создать",
"create_a_room": "Создать комнату",
"create_a_room": "Создать чат",
"create_account": "Создать учётную запись",
"decline": "Отклонить",
"decline_and_block": "Отклонить и заблокировать",
@ -58,7 +58,7 @@
"enter_fullscreen": "Перейти в полноэкранный режим",
"exit_fullscreeen": "Выйти из полноэкранного режима",
"expand": "Развернуть",
"explore_public_rooms": "Просмотреть публичные комнаты",
"explore_public_rooms": "Просмотреть публичные групповые чаты",
"explore_rooms": "Обзор комнат",
"export": "Экспорт",
"forward": "Переслать",
@ -75,14 +75,14 @@
"join": "Войти",
"learn_more": "Узнать больше",
"leave": "Покинуть",
"leave_room": "Покинуть комнату",
"leave_room": "Покинуть чат",
"logout": "Выйти",
"manage": "Управление",
"maximise": "Развернуть",
"mention": "Упомянуть",
"minimise": "Свернуть",
"new_room": "Новая комната",
"new_video_room": "Новая видеокомната",
"new_room": "Новый чат",
"new_video_room": "Новый видеочат",
"next": "Далее",
"no": "Нет",
"ok": "ОК",
@ -147,7 +147,7 @@
},
"analytics": {
"accept_button": "Всё в порядке",
"bullet_1": "Мы <<Bold>не</Bold> записываем и <Bold>не</Bold> профилируем любые данные учетной записи",
"bullet_1": "Мы <Bold>не</Bold> записываем и <Bold>не</Bold> профилируем любые данные аккаунта",
"bullet_2": "Мы <Bold>не</Bold> передаем информацию третьим лицам",
"consent_migration": "Ранее вы давали согласие на передачу нам анонимных данных об использовании. Мы изменили порядок предоставления этих данных.",
"disable_prompt": "Вы можете отключить это в любое время в настройках",
@ -219,7 +219,7 @@
"incorrect_password": "Неверный пароль",
"log_in_new_account": "<a>Войти</a> в новую учётную запись.",
"logout_dialog": {
"description": "Уверены, что хотите выйти?",
"description": "Вы уверены, что хотите удалить это устройство?",
"megolm_export": "Выгрузить ключи вручную",
"setup_key_backup_title": "Вы потеряете доступ к вашим шифрованным сообщениям",
"setup_secure_backup_description_1": "Эти сообщения защищены сквозным шифрованием. Только вы и ваш собеседник имеете ключи для их расшифровки и чтения.",
@ -229,7 +229,7 @@
"misconfigured_body": "Попросите администратора %(brand)s проверить <a>конфигурационный файл</a> на наличие неправильных или повторяющихся записей.",
"misconfigured_title": "Ваш %(brand)s неправильно настроен",
"mobile_create_account_title": "Вы собираетесь создать учетную запись на %(hsName)s",
"msisdn_field_description": "Другие пользователи могут приглашать вас в комнаты, используя ваши контактные данные",
"msisdn_field_description": "Другие пользователи могут приглашать вас в чаты, используя ваши контактные данные",
"msisdn_field_label": "Телефон",
"msisdn_field_number_invalid": "Этот номер телефона неправильный, проверьте его и повторите попытку",
"msisdn_field_required_invalid": "Введите номер телефона",
@ -298,7 +298,7 @@
"confirm_new_password": "Подтвердите новый пароль",
"devices_logout_success": "Вы вышли из всех устройств и больше не будете получать push-уведомления. Для повторного включения уведомлений снова войдите на каждом устройстве.",
"other_devices_logout_warning_1": "При выходе из устройств удаляются хранящиеся на них ключи шифрования сообщений, что сделает зашифрованную историю чатов нечитаемой.",
"other_devices_logout_warning_2": "Если вы хотите сохранить доступ к истории общения в зашифрованных комнатах, настройте резервное копирование ключей или экспортируйте ключи сообщений с одного из других ваших устройств, прежде чем продолжить.",
"other_devices_logout_warning_2": "Если вы хотите сохранить доступ к истории общения в зашифрованных чатах, настройте резервное копирование ключей или экспортируйте ключи сообщений с одного из других ваших устройств, прежде чем продолжить.",
"password_not_entered": "Введите новый пароль.",
"passwords_mismatch": "Новые пароли должны совпадать.",
"rate_limit_error": "Слишком много попыток за короткое время. Подождите некоторое время, прежде чем повторить попытку.",
@ -329,7 +329,7 @@
"server_picker_title_default": "Параметры сервера",
"server_picker_title_registration": "Ваша учётная запись обслуживается",
"session_logged_out_description": "Для обеспечения безопасности ваш сеанс был завершён. Пожалуйста, войдите снова.",
"session_logged_out_title": "Выполнен выход",
"session_logged_out_title": "Сеанс удалён",
"set_email": {
"description": "Это позволит при необходимости сбросить пароль и получать уведомления.",
"verification_pending_description": "Проверьте свою электронную почту и нажмите на ссылку в письме. После этого нажмите кнопку Продолжить.",
@ -359,7 +359,7 @@
"sso_complete_in_browser_dialog_title": "Перейдите в браузер для завершения входа",
"sso_failed_missing_storage": "Мы попросили браузер запомнить, какой домашний сервер вы используете для входа в систему, но, к сожалению, ваш браузер забыл об этом. Перейдите на страницу входа и попробуйте ещё раз.",
"sso_or_username_password": "%(ssoButtons)s или %(usernamePassword)s",
"sync_footer_subtitle": "Если вы присоединились к большому количеству комнат, это может занять некоторое время",
"sync_footer_subtitle": "Если вы присоединились к большому количеству чатов, это может занять некоторое время",
"syncing": "Синхронизация…",
"uia": {
"code": "Код",
@ -369,8 +369,8 @@
"email_resent": "Отправлено повторно!",
"fallback_button": "Начать аутентификацию",
"mas_cross_signing_reset_cta": "Перейти к учетной записи",
"mas_cross_signing_reset_description": "Сбросьте свои данные через поставщика учетной записи, а затем вернитесь и нажмите «Повторить».",
"mas_cross_signing_reset_title": "Перейдите в свою учетную запись, чтобы сбросить свою личность",
"mas_cross_signing_reset_description": "Вы собираетесь перейти в свой аккаунт %(serverName)s, чтобы сбросить настройки своей идентификации. Как только вы завершите сброс настроек в аккаунте, вернитесь сюда и нажми «Повторить».",
"mas_cross_signing_reset_title": "Перейдите в свою учетную запись, чтобы сбросить идентификацию",
"msisdn": "Текстовое сообщение отправлено на %(msisdn)s",
"msisdn_token_incorrect": "Неверный код проверки",
"msisdn_token_prompt": "Введите полученный код:",
@ -529,7 +529,7 @@
"offline": "Не в сети",
"on": "Включить",
"options": "Дополнительно",
"orphan_rooms": "Прочие комнаты",
"orphan_rooms": "Прочие чаты",
"password": "Пароль",
"people": "Люди",
"preferences": "Параметры",
@ -537,20 +537,20 @@
"preview_message": "Эй! Ты лучший!",
"privacy": "Конфиденциальность",
"private": "Приватное",
"private_room": "Приватная комната",
"private_room": "Приватный чат",
"private_space": "Приватное пространство",
"profile": "Профиль",
"public": "Публичное",
"public_room": "Публичная комната",
"public_room": "Публичный чат",
"public_space": "Публичное пространство",
"qr_code": "QR-код",
"random": "Случайный",
"reactions": "Реакции",
"recommended": "Рекомендуемое",
"report_a_bug": "Сообщить об ошибке",
"room": "Комната",
"room_name": "Название комнаты",
"rooms": "Комнаты",
"room": "Чат",
"room_name": "Название чата",
"rooms": "Чаты",
"save": "Сохранить",
"saved": "Сохранено",
"saving": "Сохранение…",
@ -577,7 +577,7 @@
"unavailable": "недоступен",
"unencrypted": "Не зашифровано",
"unmute": "Вернуть право речи",
"unnamed_room": "Комната без названия",
"unnamed_room": "Чат без названия",
"unnamed_space": "Безымянное пространство",
"unverified": "Не заверено",
"updating": "Обновление…",
@ -587,20 +587,20 @@
"verified": "Заверено",
"version": "Версия",
"video": "Видео",
"video_room": "Видеокомната",
"video_room": "Видеочат",
"view_message": "Посмотреть сообщение",
"voice": "Голос",
"warning": "Внимание"
},
"composer": {
"autocomplete": {
"@room_description": "Уведомить всю комнату",
"@room_description": "Уведомить весь чат",
"command_a11y": "Автозаполнение команды",
"command_description": "Команды",
"emoji_a11y": "Автодополнение смайлов",
"notification_a11y": "Автозаполнение уведомлений",
"notification_description": "Уведомления комнаты",
"room_a11y": "Автозаполнение комнаты",
"notification_description": "Уведомления чата",
"room_a11y": "Автозаполнение чата",
"space_a11y": "Автозаполнение пространства",
"user_a11y": "Автозаполнение пользователя",
"user_description": "Пользователи"
@ -629,7 +629,7 @@
},
"mode_plain": "Скрыть форматирование",
"mode_rich_text": "Показать форматирование",
"no_perms_notice": "Вы не можете писать в эту комнату",
"no_perms_notice": "Вы не можете писать в этот чат",
"placeholder": "Отправить незашифрованное сообщение...",
"placeholder_encrypted": "Отправить зашифрованное сообщение…",
"placeholder_reply": "Отправить незашифрованный ответ…",
@ -637,12 +637,12 @@
"placeholder_thread": "Ответить в небезопасном обсуждение…",
"placeholder_thread_encrypted": "Ответить в обсуждение…",
"poll_button": "Опрос",
"poll_button_no_perms_description": "У вас нет разрешения начинать опросы в этой комнате.",
"poll_button_no_perms_description": "У вас нет разрешения начинать опросы в этом чате",
"poll_button_no_perms_title": "Требуется разрешение",
"replying_title": "Отвечает",
"room_unencrypted": "Сообщения в этой комнате не защищены сквозным шифрованием.",
"room_upgraded_link": "Разговор продолжается здесь.",
"room_upgraded_notice": "Эта комната заменена и более неактивна.",
"room_upgraded_notice": "Этот чат заменён и более неактивен.",
"send_button_title": "Отправить сообщение",
"send_button_voice_message": "Отправить голосовое сообщение",
"send_voice_message": "Отправить голосовое сообщение",
@ -653,33 +653,33 @@
"console_scam_warning": "Если кто-то сказал вам скопировать/вставить что-то здесь, велика вероятность, что вас пытаются обмануть!",
"console_wait": "Подождите!",
"create_room": {
"action_create_room": "Создать комнату",
"action_create_video_room": "Создать видеокомнату",
"encrypted_video_room_warning": "Вы не сможете отключить это позже. Комната будет зашифрована, а встроенный вызов — нет.",
"action_create_room": "Создать чат",
"action_create_video_room": "Создать видеочат",
"encrypted_video_room_warning": "Вы не сможете отключить это позже. Чат будет зашифрован, а встроенный вызов — нет.",
"encrypted_warning": "Вы не сможете отключить это позже. Мосты и большинство ботов пока не будут работать.",
"encryption_forced": "Вашему серверу необходимо включить шифрование в приватных комнатах.",
"encryption_forced": "Вашему серверу необходимо включить шифрование в приватных чатах.",
"encryption_label": "Включить сквозное шифрование",
"error_title": "Не удалось создать комнату",
"error_title": "Не удалось создать чат",
"generic_error": "Возможно, сервер недоступен, перегружен или случилась ошибка.",
"join_rule_change_notice": "Вы можете изменить это в любое время из настроек комнаты.",
"join_rule_invite": "Приватная комната (только по приглашению)",
"join_rule_invite_label": "Только приглашенные люди смогут найти и присоединиться к этой комнате.",
"join_rule_change_notice": "Вы можете изменить это в любое время из настроек чата.",
"join_rule_invite": "Приватный чат (только по приглашению)",
"join_rule_invite_label": "Только приглашенные люди смогут найти и присоединиться к этому чату.",
"join_rule_knock_label": "Любой желающий может подать заявку на участие, но администраторы или модераторы должны предоставить доступ. Это можно изменить позже.",
"join_rule_public_label": "Любой желающий сможет найти эту комнату и присоединиться к ней.",
"join_rule_public_parent_space_label": "Любой сможет найти и присоединиться к этой комнате, а не только участники <SpaceName/>.",
"join_rule_public_label": "Любой желающий сможет найти этот чат и присоединиться к нему.",
"join_rule_public_parent_space_label": "Любой сможет найти и присоединиться к этому чату, а не только участники <SpaceName/>.",
"join_rule_restricted": "Стандартная",
"join_rule_restricted_label": "Любой может присоединиться в <SpaceName/>.",
"name_validation_required": "Пожалуйста, введите название комнаты",
"room_visibility_label": "Видимость комнаты",
"name_validation_required": "Пожалуйста, введите название чата",
"room_visibility_label": "Видимость чата",
"state_encryption_label": "Шифровать события состояния",
"title_private_room": "Создать приватную комнату",
"title_public_room": "Создать публичную комнату",
"title_private_room": "Создать приватный чат",
"title_public_room": "Создать групповой чат",
"title_video_room": "Создайте видеокомнату",
"topic_label": "Тема (опционально)",
"unfederated": "Запретить кому-либо, не входящему в %(serverName)s, когда-либо присоединяться к этой комнате.",
"unfederated": "Запретить кому-либо, не входящему в %(serverName)s, когда-либо присоединяться к этому чату.",
"unfederated_label_default_off": "Вы можете включить это, если комната будет использоваться только для совместной работы с внутренними командами на вашем домашнем сервере. Это не может быть изменено позже.",
"unfederated_label_default_on": "Вы можете отключить это, если комната будет использоваться для совместной работы с внешними командами, у которых есть собственный домашний сервер. Это не может быть изменено позже.",
"unsupported_version": "Сервер не поддерживает указанную версию комнаты."
"unsupported_version": "Сервер не поддерживает указанную версию чата."
},
"create_space": {
"add_details_prompt": "Добавьте некоторые подробности, чтобы помочь людям узнать его.",
@ -689,11 +689,11 @@
"address_label": "Адрес",
"address_placeholder": "например, my-space",
"creating": "Создание…",
"creating_rooms": "Создание комнат…",
"creating_rooms": "Создание чата…",
"done_action": "В моё пространство",
"done_action_first_room": "Перейти в мою первую комнату",
"explainer": "Пространства — это новый способ организации комнат и людей. Какой вид пространства вы хотите создать? Вы можете изменить это позже.",
"failed_create_initial_rooms": "Не удалось создать первоначальные комнаты пространства",
"done_action_first_room": "Перейти в мой первый чат",
"explainer": "Пространства — это новый способ организации комнат. Какой тип пространства вы хотите создать?",
"failed_create_initial_rooms": "Не удалось создать первоначальные чаты пространства",
"failed_invite_users": "Не удалось пригласить следующих пользователей в ваше пространство: %(csvUsers)s",
"invite_teammates_by_username": "Пригласить по имени пользователя",
"invite_teammates_description": "Убедитесь, что правильные люди имеют доступ. Вы можете пригласить больше людей позже.",
@ -703,20 +703,20 @@
"name_required": "Пожалуйста, введите название пространства",
"personal_space": "Только я",
"personal_space_description": "Приватное пространство для организации ваших комнат",
"private_description": "Только по приглашениям, лучший вариант для себя или команды",
"private_description": "Только по приглашению, для личного пользования или для команды.",
"private_heading": "Ваше приватное пространство",
"private_only_heading": "Ваше пространство",
"private_personal_description": "Убедитесь, что правильные люди имеют доступ к %(name)s",
"private_personal_heading": "С кем вы работаете?",
"private_space": "Я и мои товарищи по команде",
"private_space_description": "Приватное пространство для вас и ваших товарищей по команде",
"public_description": "Открытое пространство для всех, лучший вариант для сообществ",
"public_description": "Присоединиться может кто угодно, лучший вариант для создания сообществ.",
"public_heading": "Ваше публичное пространство",
"search_public_button": "Поиск публичных пространств",
"setup_rooms_community_description": авайте создадим для каждого из них отдельную комнату.",
"setup_rooms_community_description": ля начала создайте несколько чатов.",
"setup_rooms_community_heading": "Какие вещи вы хотите обсуждать в %(spaceName)s?",
"setup_rooms_description": "Позже можно добавить и другие, в том числе уже существующие.",
"setup_rooms_private_description": "Мы создадим комнаты для каждого из них.",
"setup_rooms_private_description": "Для начала создайте несколько комнат.",
"setup_rooms_private_heading": "Над какими проектами ваша команда работает?",
"share_description": "Сейчас здесь только ты, с другими будет ещё лучше.",
"share_heading": "Поделиться %(name)s",
@ -738,16 +738,16 @@
},
"decline_invitation_dialog": {
"confirm": "Вы действительно хотите отклонить приглашение присоединиться \"%(roomName)s\"?",
"ignore_user_help": "Вы не увидите сообщений или приглашений в комнату от этого пользователя.",
"ignore_user_help": "Вы не увидите сообщений или приглашений в чатах от этого пользователя.",
"reason_description": "Опишите причину сообщения о проблеме.",
"report_room_description": "Сообщите об этой комнате своему поставщику учетной записи.",
"report_room_description": "Сообщите об этом чате своему поставщику учетной записи.",
"title": "Отклонить приглашение"
},
"desktop_default_device_name": "%(brand)s Рабочий стол: %(platformName)s",
"devtools": {
"active_widgets": "Активные виджеты",
"category_other": "Другие",
"category_room": "Комната",
"category_room": "Чат",
"caution_colon": "Предупреждение:",
"client_versions": "Версия клиента",
"crypto": {
@ -810,9 +810,10 @@
"event_sent": "Событие отправлено!",
"event_type": "Тип события",
"expired": "Срок действия истек",
"expires_in": "Истекает через",
"explore_account_data": "Посмотреть данные учётной записи",
"explore_room_account_data": "Посмотреть данные учётной записи комнаты",
"explore_room_state": "Посмотреть состояние комнаты",
"explore_room_account_data": "Посмотреть данные учётной записи чата",
"explore_room_state": "Посмотреть состояние чата",
"failed_to_find_widget": "При обнаружении этого виджета произошла ошибка.",
"failed_to_load": "Не удалось загрузить.",
"failed_to_save": "Не удалось сохранить настройки.",
@ -832,9 +833,9 @@
"only_joined_members": "Только зарегистрированные пользователи",
"original_event_source": "Оригинальный исходный код",
"restore_from_backup": "Восстановить из резервной копии",
"room_encrypted": "Комната <strong> зашифрована ✅</strong>",
"room_id": "ID комнаты: %(roomId)s",
"room_not_encrypted": "Комната <strong> не имеет шифрования 🚨</strong>",
"room_encrypted": "Чат <strong> зашифрован ✅</strong>",
"room_id": "ID чата: %(roomId)s",
"room_not_encrypted": "Чат <strong> не имеет шифрования 🚨</strong>",
"room_notifications_dot": "Точка: ",
"room_notifications_highlight": "Выделение: ",
"room_notifications_last_event": "Последнее событие:",
@ -842,7 +843,7 @@
"room_notifications_thread_id": "Id обсуждения: ",
"room_notifications_total": "Всего: ",
"room_notifications_type": "Тип: ",
"room_status": "Статус комнаты",
"room_status": "Статус чата",
"room_unread_status_count": {
"one": "Статус непрочитанной комнаты: <strong>%(status)s</strong>, количество: <strong>%(count)s</strong>",
"few": "Статус непрочитанных комнат: <strong>%(status)s</strong>, количество: <strong>%(count)s</strong>",
@ -851,13 +852,13 @@
"save_setting_values": "Сохранить значения настроек",
"see_history": "Посмотреть историю",
"send_custom_account_data_event": "Отправить пользовательское событие данных учётной записи",
"send_custom_room_account_data_event": "Отправить пользовательское событие данных учётной записи комнаты",
"send_custom_room_account_data_event": "Отправить пользовательское событие данных учётной записи чата",
"send_custom_state_event": "Оправить пользовательское событие состояния",
"send_custom_timeline_event": "Отправить пользовательское событие ленты сообщений",
"server_info": "Информация сервера",
"server_versions": "Версия сервера",
"settable_global": "Устанавливается на глобальном уровне",
"settable_room": "Устанавливается для комнаты",
"settable_room": "Устанавливается для чата",
"setting_colon": "Настройки:",
"setting_definition": "Установка определения:",
"setting_id": "ID настроек",
@ -898,7 +899,7 @@
"users": "Пользователи",
"value": "Значение",
"value_colon": "Значение:",
"value_in_this_room": "Значение в этой комнате",
"value_in_this_room": "Значение в этом чате",
"value_this_room_colon": "Значение в этой комнате:",
"values_explicit": "Значения на явных уровнях",
"values_explicit_colon": "Значения на явных уровнях:",
@ -959,7 +960,7 @@
"event_shield_reason_unverified_identity": "Зашифровано неподтвержденным пользователем.",
"export_unsupported": "Ваш браузер не поддерживает необходимые криптографические расширения",
"forgot_recovery_key": "Забыли ключ восстановления?",
"identity_needs_reset_description": "Для обеспечения доступа к истории сообщений необходимо сбросить криптографическую идентификацию.",
"identity_needs_reset_description": "Для обеспечения доступа к истории сообщений необходимо сбросить идентификацию.",
"import_invalid_keyfile": "Недействительный файл ключей %(brand)s",
"import_invalid_passphrase": "Ошибка аутентификации: возможно, неправильный пароль?",
"key_storage_out_of_sync": "Хранилище ключей не синхронизировано.",
@ -986,7 +987,7 @@
"title": "Метод восстановления удален",
"warning": "Если вы не убрали метод восстановления, злоумышленник может получить доступ к вашей учётной записи. Смените пароль учётной записи и сразу задайте новый способ восстановления в настройках."
},
"set_up_recovery": "Настроить восстановление",
"set_up_recovery": "Создать резервную копию своих чатов.",
"set_up_recovery_toast_description": "Создайте ключ восстановления, который можно использовать для восстановления зашифрованной истории сообщений в случае потери доступа к своим устройствам.",
"set_up_toast_title": "Настроить безопасное резервное копирование",
"setup_secure_backup": {
@ -1114,7 +1115,7 @@
"cannot_load_config": "Не удалось загрузить файл конфигурации. Попробуйте обновить страницу.",
"connection": "Возникла проблема при обмене данными с домашним сервером. Повторите попытку позже.",
"dialog_description_default": "Произошла ошибка.",
"download_media": "Не удалось загрузить исходный медиафайл, исходный URL-адрес не найден",
"download_media": "Не удалось скачать исходный медиафайл, исходный URL-адрес не найден",
"edit_history_unsupported": "Ваш сервер, похоже, не поддерживает эту возможность.",
"failed_copy": "Не удалось скопировать",
"hs_blocked": "Доступ к этому домашнему серверу заблокирован вашим администратором.",
@ -1129,7 +1130,7 @@
"non_urgent_echo_failure_toast": "Ваш сервер не отвечает на некоторые <a>запросы</a>.",
"resource_limits": "Превышен один из лимитов на ресурсы сервера.",
"session_restore": {
"clear_storage_button": "Очистить хранилище и выйти",
"clear_storage_button": "Удалить это устройство",
"clear_storage_description": "Выйти и удалить ключи шифрования?",
"description_1": "Произошла ошибка при попытке восстановить предыдущий сеанс.",
"description_2": "Если вы использовали более новую версию %(brand)s, то ваш сеанс может быть несовместим с ней. Закройте это окно и вернитесь к более новой версии.",
@ -1549,7 +1550,8 @@
"render_reaction_images": "Обработка пользовательских изображений в реакциях",
"render_reaction_images_description": "Иногда их называют \"пользовательскими эмодзи\".",
"report_to_moderators": "Пожаловаться модераторам",
"report_to_moderators_description": "В поддерживающих модерирование комнатах, кнопка \"Пожаловаться\" позволит вам сообщить о нарушении модераторам комнаты.",
"report_to_moderators_description": "В поддерживающих модерирование чатах, кнопка \"Пожаловаться\" позволит вам сообщить о нарушении модераторам комнаты.",
"room_list_sections": "Разделы списка чатов",
"share_history_on_invite": "Поделиться зашифрованной историей с новыми участниками",
"share_history_on_invite_description": "Приглашая пользователя в зашифрованную комнату, для которой установлена видимость истории как «общая», поделитесь зашифрованной историей с этим пользователем и примите зашифрованную историю, когда вас приглашают в такую комнату.",
"share_history_on_invite_warning": "Эта функция ЭКСПЕРИМЕНТАЛЬНАЯ и в ней реализованы не все меры безопасности. Не включайте её в рабочих учётных записях.",
@ -1754,6 +1756,11 @@
"failed_send_poll_title": "Не удалось отправить опрос",
"notes": "Результаты отображаются только после завершения опроса",
"option_label": "Вариант %(number)s, %(answer)s",
"option_label_with_total": {
"one": "Вариант %(number)s, %(answer)s, %(count)s голос",
"few": "Вариант %(number)s, %(answer)s, %(count)s голоса",
"many": "Вариант %(number)s, %(answer)s, %(count)s голосов"
},
"options_add_button": "Добавить вариант",
"options_heading": "Создать варианты",
"options_label": "Вариант %(number)s",
@ -1976,6 +1983,7 @@
"error_join_incompatible_version_1": "К сожалению, ваш домашний сервер слишком старый для участия.",
"error_join_incompatible_version_2": "Пожалуйста, свяжитесь с администратором вашего сервера.",
"error_join_title": "Не удалось войти",
"error_join_unknown": "Произошла неизвестная ошибка.",
"error_jump_to_date": "Сервер вернул %(statusCode)s с кодом ошибки %(errorCode)s",
"error_jump_to_date_connection": "При попытке найти указанную дату и перейти к ней, произошла сетевая ошибка. Возможно, ваш домашний сервер не работает или возникла временная проблема с подключением к Интернету. Пожалуйста, попробуйте еще раз. Если это продолжится, обратитесь к администратору homeserver.",
"error_jump_to_date_details": "Сведения об ошибке",
@ -2005,7 +2013,9 @@
"few": "%(count)s пользователя запрашивают присоединения",
"many": "%(count)s пользователей запрашивают присоединения"
},
"room_is_public": "Это публичная комната"
"room_is_public": "Это публичная комната",
"shared_history_tooltip": "Новые участники могут видеть историю",
"world_readable_history_tooltip": "Кто угодно может видеть историю"
},
"header_avatar_open_settings_label": "Открыть настройки комнаты",
"header_face_pile_tooltip": "Люди",
@ -2034,11 +2044,11 @@
"invite_email_mismatch_suggestion": "Введите адрес эл.почты в Настройках, чтобы получать приглашения прямо в %(brand)s.",
"invite_sent_to_email": "Это приглашение было отправлено на %(email)s",
"invite_sent_to_email_room": "Это приглашение в %(roomName)s было отправлено на %(email)s",
"invite_subtitle": "<userName/> пригласил(а) вас",
"invite_subtitle": "<userName/> приглашает вас",
"invite_this_room": "Пригласить в комнату",
"invite_title": "Хотите присоединиться к %(roomName)s?",
"inviter_unknown": "Неизвестно",
"invites_you_text": "<inviter/> пригласил(а) тебя",
"invites_you_text": "<inviter/> приглашает вас",
"join_button_account": "Зарегистрироваться",
"join_failed_needs_invite": "Для просмотра %(roomName)s необходимо приглашение",
"join_the_discussion": "Войти в комнату",
@ -2050,7 +2060,7 @@
"jump_read_marker": "Перейти к первому непрочитанному сообщению.",
"jump_to_bottom_button": "Перейти к последним сообщениям",
"kick_reason": "Причина: %(reason)s",
"kicked_by": "%(memberName)s исключил(а) вас",
"kicked_by": "%(memberName)s исключил вас",
"kicked_from_room_by": "%(memberName)s удалил(а) вас из %(roomName)s",
"knock_cancel_action": "Отменить запрос",
"knock_denied_subtitle": "Поскольку вам отказали в доступе, вы не сможете присоединиться к группе, пока вас не пригласит администратор или модератор группы.",
@ -2079,6 +2089,7 @@
"button_view_all": "Посмотреть все",
"description": "Закрепленные сообщения",
"go_to_newest_message": "Посмотрите закрепленное сообщение на временной шкале и самое новое закрепленное сообщение здесь.",
"go_to_next_message": "Просмотрите это и предыдущее закрепленное сообщение в истории сообщений здесь",
"title": "<bold>%(index)s из %(length)s</bold> Закрепленные сообщения"
},
"read_topic": "Нажмите, чтобы увидеть тему",
@ -2129,8 +2140,9 @@
"home_menu_label": "Параметры раздела \"Главная\"",
"join_public_room_label": "Присоединиться к публичной комнате",
"joining_rooms_status": {
"one": "Сейчас вы состоите в %(count)s комнате",
"other": "Сейчас вы состоите в %(count)s комнатах"
"one": "Сейчас вы состоите в %(count)s чате",
"few": "Сейчас вы состоите в %(count)s чатах",
"many": "Сейчас вы состоите в %(count)s чатах"
},
"list_title": "Список комнат",
"more_options": {
@ -2141,6 +2153,11 @@
"one": "Удаляются сообщения в %(count)s комнате",
"other": "Удаляются сообщения в %(count)s комнатах"
},
"section": {
"chats": "Чаты",
"favourites": "Избранное",
"low_priority": "Низкий приоритет"
},
"show_less": "Показать меньше",
"show_n_more": {
"other": "Показать ещё %(count)s",
@ -2214,8 +2231,6 @@
"aliases_section": "Адреса комнаты",
"avatar_field_label": "Аватар комнаты",
"canonical_alias_field_label": "Главный адрес",
"default_url_previews_off": "Предпросмотр ссылок по умолчанию выключен для участников этой комнаты.",
"default_url_previews_on": "Предпросмотр ссылок по умолчанию включен для участников этой комнаты.",
"description_space": "Редактировать настройки, относящиеся к вашему пространству.",
"error_creating_alias_description": "При создании этого адреса произошла ошибка. Это может быть запрещено сервером или произошел временный сбой.",
"error_creating_alias_title": "Ошибка при создании адреса",
@ -2246,12 +2261,7 @@
"published_aliases_explainer_space": "Опубликованные адреса могут быть использованы любым человеком на любом сервере для присоединения к вашему пространству.",
"published_aliases_section": "Публичные адреса",
"save": "Сохранить изменения",
"topic_field_label": "Тема комнаты",
"url_preview_encryption_warning": "В зашифрованных комнатах, подобных этой, предварительный просмотр URL-адресов отключен по умолчанию, чтобы гарантировать, что ваш сервер (где создаются предварительные просмотры) не может собирать информацию о ссылках, которые вы видите в этой комнате.",
"url_preview_explainer": "Когда кто-то вставляет URL-адрес в свое сообщение, то можно просмотреть его, чтобы получить дополнительную информацию об этой ссылке, такую как название, описание и изображение с веб-сайта.",
"url_previews_section": "Предпросмотр содержимого ссылок",
"user_url_previews_default_off": "Предпросмотр ссылок по умолчанию <a>выключен</a> для вас.",
"user_url_previews_default_on": "Предпросмотр ссылок по умолчанию <a>включен</a> для вас."
"topic_field_label": "Тема комнаты"
},
"notifications": {
"browse_button": "Просматривать",
@ -2283,7 +2293,7 @@
"error_unbanning": "Не удалось разблокировать",
"events_default": "Отправить сообщения",
"invite": "Пригласить пользователей",
"kick": "Удалять пользователей",
"kick": "Исключить пользователей",
"m.call": "Начать %(brand)s звонок",
"m.call.member": "Присоединяйтесь к %(brand)s звонку",
"m.reaction": "Отправлять реакции",
@ -2341,25 +2351,26 @@
"history_visibility_warning": "Изменения не затронут старые сообщения, только новые. <a>Подробнее</a>",
"history_visibility_world_readable": "Любой (история общедоступна)",
"join_rule_description": "Укажите, кто может присоединиться к %(roomName)s.",
"join_rule_invite": "Приватное (только по приглашению)",
"join_rule_invite": "Только по приглашению",
"join_rule_invite_description": "Присоединиться могут только приглашенные люди.",
"join_rule_knock": "Присоединиться",
"join_rule_knock_description": "Люди не могут присоединиться до тех пор, пока им не будет предоставлен доступ.",
"join_rule_public_description": "Любой желающий может найти и присоединиться.",
"join_rule_public": "Любой",
"join_rule_public_description": "Любой желающий может присоединиться.",
"join_rule_restricted": "Участники пространства",
"join_rule_restricted_description": "Любой человек в пространстве может найти и присоединиться. <a>Укажите здесь, какие пространства могут получить доступ.</a>",
"join_rule_restricted_description_active_space": "Любой человек в <spaceName/> может найти и присоединиться. Вы можете выбрать и другие пространства.",
"join_rule_restricted_description_prompt": "Любой человек в пространстве может найти и присоединиться. Вы можете выбрать несколько пространств.",
"join_rule_restricted_description_spaces": "Пространства с доступом",
"join_rule_restricted_description": "Любой человек в пространстве может присоединиться без приглашения. <a>Укажите здесь, какие пространства могут получить доступ.</a>",
"join_rule_restricted_description_active_space": "Любой человек в <spaceName/> может присоединиться.",
"join_rule_restricted_description_prompt": "Любой человек в пространстве может присоединиться.",
"join_rule_restricted_description_spaces": "Разрешённые пространства",
"join_rule_restricted_dialog_description": "Определите, какие пространства могут получить доступ к этой комнате. Если пространство выбрано, его члены могут найти и присоединиться к <RoomName/>.",
"join_rule_restricted_dialog_empty_warning": "Вы удаляете все пространства. Доступ будет по умолчанию только по приглашениям",
"join_rule_restricted_dialog_filter_placeholder": "Поиск пространств",
"join_rule_restricted_dialog_heading_known": "Другие пространства, которые вы знаете",
"join_rule_restricted_dialog_heading_other": "Другие пространства или комнаты, которые вы могли не знать",
"join_rule_restricted_dialog_heading_room": "Пространства, которые вы знаете, уже содержат эту комнату",
"join_rule_restricted_dialog_heading_known": "Ваши пространства, которые не содержат эту комнату",
"join_rule_restricted_dialog_heading_other": "Другие пространства, в которых вы не участвуете",
"join_rule_restricted_dialog_heading_room": "Ваши пространства, которые содержат эту комнату",
"join_rule_restricted_dialog_heading_space": "Пространства, которые вы знаете, уже содержат эту комнату",
"join_rule_restricted_dialog_heading_unknown": "Это, скорее всего, те, в которых участвуют другие администраторы комнат.",
"join_rule_restricted_dialog_title": "Выберите места",
"join_rule_restricted_dialog_title": "Выберите пространства",
"join_rule_restricted_n_more": {
"one": "и еще %(count)s",
"few": "и еще %(count)s",
@ -2396,7 +2407,7 @@
"upload_avatar_label": "Загрузить аватар",
"visibility": {
"alias_section": "Адрес",
"error_failed_save": "Не удалось обновить видимость этого пространства",
"error_failed_save": "Не удалось обновить параметры этого пространства",
"error_update_guest_access": "Не удалось обновить гостевой доступ к этому пространству",
"error_update_history_visibility": "Не удалось обновить видимость истории этого пространства",
"guest_access_disabled": "У тебя нет прав на изменение гостевого доступа.",
@ -2406,7 +2417,7 @@
"history_visibility_anyone_space_description": "Дайте людям возможность предварительно ознакомиться с вашим пространством, прежде чем они присоединятся к нему.",
"history_visibility_anyone_space_disabled": "У тебя нет прав на изменение видимости истории.",
"history_visibility_anyone_space_recommendation": "Рекомендуется для публичных пространств.",
"title": "Видимость"
"title": "Безопасность и приватность"
},
"voip": {
"call_type_section": "Тип звонка",
@ -2476,7 +2487,7 @@
"settings": {
"account": {
"dialog_title": "<strong>Настройки:</strong> Учетная запись",
"title": "Учетная запись"
"title": "Аккаунт"
},
"all_rooms_home": "Показывать все комнаты на Главной",
"all_rooms_home_description": "Все комнаты, в которых вы находитесь, будут отображаться на Главной.",
@ -2490,8 +2501,8 @@
"custom_font_name": "Название системного шрифта",
"custom_font_size": "Использовать другой размер",
"custom_theme_add": "Добавить пользовательскую тему",
"custom_theme_downloading": "Загрузка пользовательской темы…",
"custom_theme_error_downloading": "Ошибка при загрузке темы",
"custom_theme_downloading": "Скачивание пользовательской темы…",
"custom_theme_error_downloading": "Ошибка при скачивании темы",
"custom_theme_help": "Введите URL-адрес пользовательской темы, которую вы хотите применить.",
"custom_theme_invalid": "Неверная схема темы.",
"dialog_title": "<strong>Настройки:</strong> Внешний вид",
@ -2534,7 +2545,7 @@
"export_keys": "Экспортировать ключи",
"import_keys": "Импортировать ключи",
"other_people_device_description": "Внимание: пользователи, которые явно не подтвердили вашу личность (например, с помощью эмодзи), не получат ваши зашифрованные сообщения. Кроме того, неверифицированные устройства верифицированных пользователей не будут получать ваши зашифрованные сообщения.",
"other_people_device_label": "В зашифрованных комнатах отправляйте сообщения только проверенным пользователям",
"other_people_device_label": "В зашифрованных чатах отправляйте сообщения только проверенным пользователям",
"other_people_device_title": "Устройства других людей",
"reset_identity": "Сбросить криптографическую идентификацию",
"reset_in_progress": "Выполняется сброс...",
@ -2575,7 +2586,7 @@
"key_storage_warning": "Хранилище ключей не синхронизировано. Нажмите кнопку ниже, чтобы устранить проблему.",
"save_key_description": "Не сообщайте эту информацию никому!",
"save_key_title": "Ключ восстановления",
"set_up_recovery": "Настройка восстановления",
"set_up_recovery": "Получить ключ восстановления",
"set_up_recovery_confirm_button": "Завершить настройку",
"set_up_recovery_confirm_description": "Введите ключ восстановления, показанный на предыдущем экране, чтобы завершить настройку восстановления.",
"set_up_recovery_confirm_title": "Для подтверждения введите ключ восстановления",
@ -2677,8 +2688,7 @@
"username": "Имя пользователя"
},
"inline_url_previews_default": "Предпросмотр ссылок по умолчанию",
"inline_url_previews_room": "Включить предпросмотр ссылок для участников этой комнаты по умолчанию",
"inline_url_previews_room_account": "Включить предпросмотр ссылок в этой комнате (влияет только на вас)",
"inline_url_previews_encrypted": "Включить предварительный просмотр в зашифрованных комнатах",
"insert_trailing_colon_mentions": "Вставлять двоеточие после упоминания пользователя в начале сообщения",
"invite_controls": {
"default_label": "Разрешить пользователям приглашать вас в комнаты"
@ -2823,7 +2833,7 @@
"rm_lifetime_offscreen": "Задержка прочтения сообщения при отсутствии активности (мс)",
"room_directory_heading": "Каталог комнат",
"room_list_heading": "Список комнат",
"show_avatars_pills": "Показывать аватары в упоминаниях пользователей, комнатах и событиях",
"show_avatars_pills": "Показывать аватары в упоминаниях пользователей, чатах и событиях",
"show_polls_button": "Показывать кнопку опроса",
"startup_window_behaviour_label": "Запуск и поведение окна",
"surround_text": "Обводить выделенный текст при вводе специальных символов",
@ -2841,7 +2851,7 @@
"dehydrated_device_enabled": "Устройство в автономном режиме",
"dialog_title": "<strong>Настройки:</strong> Безопасность и конфиденциальность",
"e2ee_default_disabled_warning": "Администратор вашего сервера отключил сквозное шифрование по умолчанию в приватных комнатах и диалогах.",
"enable_message_search": "Включить поиск сообщений в зашифрованных комнатах",
"enable_message_search": "Включить поиск сообщений в зашифрованных чатах",
"encryption_section": "Шифрование",
"ignore_users_empty": "У вас нет игнорируемых пользователей.",
"ignore_users_section": "Игнорируемые пользователи",
@ -2861,7 +2871,7 @@
"message_search_pending_rooms": "Комнаты, ожидающие индексации: %(pendingRooms)s",
"message_search_room_progress": "%(doneRooms)s из %(totalRooms)s",
"message_search_section": "Поиск по сообщениям",
"message_search_sleep_time": "Как быстро сообщения должны быть загружены.",
"message_search_sleep_time": "Как быстро сообщения должны быть скачаны.",
"message_search_space_used": "Занято места:",
"message_search_unsupported": "Отсутствуют некоторые необходимые компоненты для %(brand)s, чтобы безопасно кэшировать шифрованные сообщения локально. Если вы хотите попробовать эту возможность, соберите самостоятельно %(brand)s Desktop с <nativeLink>добавлением поисковых компонентов</nativeLink>.",
"message_search_unsupported_web": "%(brand)s не может безопасно кэшировать зашифрованные сообщения локально во время работы в веб-браузере. Используйте <desktopLink>%(brand)s Desktop</desktopLink>, чтобы зашифрованные сообщения появились в результатах поиска.",
@ -2938,7 +2948,7 @@
"rename_form_caption": "Пожалуйста, имейте в виду, что названия сеансов также видны людям, с которыми вы общаетесь.",
"rename_form_heading": "Переименовать сеанс",
"rename_form_learn_more": "Переименование сеансов",
"rename_form_learn_more_description_1": "Другие пользователи, будучи в личных сообщениях и посещаемых вами комнатах, могут видеть полный перечень ваших сеансов.",
"rename_form_learn_more_description_1": "Другие пользователи, будучи в личных сообщениях и посещаемых вами чатах, могут видеть полный перечень ваших сеансов.",
"rename_form_learn_more_description_2": "Это даёт им уверенности в том, с кем они общаются, но также означает, что они могут видеть вводимое здесь название сеанса.",
"security_recommendations": "Рекомендации по безопасности",
"security_recommendations_description": "Усильте защиту учётной записи, следуя этим рекомендациям.",
@ -2964,7 +2974,7 @@
"unknown_session": "Неизвестный тип сеанса",
"unverified_session": "Незаверенный сеанс",
"unverified_session_explainer_1": "Этот сеанс не поддерживает шифрование, потому и не может быть подтверждён.",
"unverified_session_explainer_2": "Через этот сеанс вы не можете участвовать в комнатах с шифрованием.",
"unverified_session_explainer_2": "Через этот сеанс вы не можете участвовать в чатах с шифрованием.",
"unverified_session_explainer_3": "Для лучшей безопасности и конфиденциальности, рекомендуется использовать клиенты Matrix с поддержкой шифрования.",
"unverified_sessions": "Незаверенные сеансы",
"unverified_sessions_explainer_1": "Неподтверждённые сеансы — это сеансы, вошедшие с вашими учётными данными, но до сих пор не подтверждённые.",
@ -3029,11 +3039,13 @@
"connection_section": "Соединение",
"dialog_title": "<strong>Настройки:</strong> Голос и видео",
"echo_cancellation": "Эхоподавление",
"echo_cancellation_description": "Устраняет эхо микрофона во время звонков. Эта настройка также влияет на Element Call.",
"enable_fallback_ice_server": "Разрешить резервный сервер помощи при вызове (%(server)s)",
"enable_fallback_ice_server_description": "Только применяется, когда у домашнего сервера нет своего TURN-сервера. Ваш IP-адрес будет виден на время звонка.",
"mirror_local_feed": "Зеркально отражать видео со своей камеры",
"missing_permissions_prompt": "Отсутствуют разрешения для доступа к камере/микрофону. Нажмите кнопку ниже, чтобы запросить их.",
"noise_suppression": "Подавление шума",
"noise_suppression_description": "Уменьшает фоновый шум микрофона во время звонков. Эта настройка также влияет на Element Call.",
"request_permissions": "Запросить доступ к медиа устройству",
"title": "Голос и видео",
"video_input_empty": "Веб-камера не обнаружена",
@ -3100,7 +3112,7 @@
"manual_device_verification_confirm_title": "Внимание: ручная проверка устройства",
"me": "Отображение действий",
"msg": "Отправить сообщение данному пользователю",
"myavatar": "Меняет изображение профиля во всех комнатах",
"myavatar": "Меняет изображение профиля во всех чатах",
"myroomavatar": "Меняет изображение профиля только в текущей комнате",
"myroomnick": "Изменяет ваш псевдоним только для текущей комнаты",
"nick": "Изменяет ваш псевдоним",
@ -3341,9 +3353,9 @@
"unable_to_decrypt": "Не удалось расшифровать сообщение"
},
"disambiguated_profile": "%(displayName)s (%(matrixId)s)",
"download_action_downloading": "Загрузка",
"download_failed": "Загрузка не удалась",
"download_failed_description": "Произошла ошибка при загрузке этого файла",
"download_action_downloading": "Скачивание",
"download_failed": "Скачивание не удалось",
"download_failed_description": "Произошла ошибка при скачивании этого файла",
"e2e_state": "Состояние сквозного шифрования",
"edits": {
"tooltip_label": "Изменено %(date)s. Нажмите для посмотра истории изменений.",
@ -3362,7 +3374,7 @@
"unable_to_find": "Попытка загрузить выбранный интервал истории чата этой комнаты не удалась, так как запрошенный элемент не найден."
},
"m.audio": {
"error_downloading_audio": "Ошибка загрузки аудио",
"error_downloading_audio": "Ошибка скачивания аудио",
"error_processing_audio": "Ошибка обработки звукового сообщения",
"error_processing_voice_message": "Ошибка при обработке голосового сообщения"
},
@ -3459,7 +3471,7 @@
"m.room.history_visibility": {
"invited": "%(senderName)s сделал(а) историю разговора видимой для всех собеседников с момента их приглашения.",
"joined": "%(senderName)s сделал(а) историю разговора видимой для всех собеседников с момента их входа в комнату.",
"shared": "%(senderName)s сделал(а) историю разговора видимой для всех собеседников.",
"shared": "%(senderName)s делает историю разговора видимой для всех собеседников.",
"unknown": "%(senderName)s сделал(а) историю комнаты видимой в неизвестном режиме (%(visibility)s).",
"world_readable": "%(senderName)s сделал(а) историю разговора видимой для всех."
},
@ -3481,11 +3493,11 @@
"change_name_avatar": "%(oldDisplayName)s изменил(а) имя и аватар",
"invite": "%(senderName)s пригласил(а) %(targetName)s",
"join": "%(targetName)s теперь с нами",
"kick": "%(senderName)s удалил(а) %(targetName)s",
"kick_reason": "%(senderName)s удалил(а) %(targetName)s: %(reason)s",
"kick": "%(senderName)s исключает %(targetName)s",
"kick_reason": "%(senderName)s исключил %(targetName)s: %(reason)s",
"left": "%(targetName)s покинул(а) комнату",
"left_reason": "%(targetName)s покинул(а) комнату: %(reason)s",
"no_change": "%(senderName)s не сделал(а) изменений",
"no_change": "%(senderName)s не сделано изменений",
"reject_invite": "%(targetName)s отклонил(а) приглашение",
"reject_invite_reason": "%(targetName)s отклонил приглашение: %(reason)s",
"remove_avatar": "%(senderName)s удалил(а) аватар",
@ -3651,8 +3663,9 @@
"one": "%(oneUser)s присоединился(лась)"
},
"joined_and_left": {
"other": "%(oneUser)s присоединился(лась) и покинул(а) %(count)s раз(а)",
"one": "%(oneUser)s присоединился(лась) и покинул(а)"
"one": "%(oneUser)s присоединяется и покидает",
"few": "%(oneUser)s присоединяется и покидает %(count)s раза",
"many": "%(oneUser)s присоединяется и покидает %(count)s раз"
},
"joined_and_left_multiple": {
"other": "%(severalUsers)s присоединились и покинули %(count)s раз(а)",
@ -3663,16 +3676,18 @@
"one": "%(severalUsers)s присоединились"
},
"kicked": {
"one": "был удалён",
"other": "удалено %(count)s раз(а)"
"one": "исключили",
"few": "исключили %(count)s раза",
"many": "исключили %(count)s раз"
},
"kicked_multiple": {
"one": "были удалены",
"other": "удалены %(count)s раз(а)"
},
"left": {
"other": "%(oneUser)s покинул(а) %(count)s раз(а)",
"one": "%(oneUser)s покинул(а)"
"one": "%(oneUser)s покидает",
"few": "%(oneUser)s покидает %(count)s раза",
"many": "%(oneUser)s покидает %(count)s раз"
},
"left_multiple": {
"other": "%(severalUsers)s покинули %(count)s раз(а)",
@ -3753,7 +3768,7 @@
"changelog": "История изменений",
"check_action": "Проверить наличие обновлений",
"checking": "Проверка наличия обновлений…",
"downloading": "Загрузка обновления…",
"downloading": "Скачивание обновления…",
"error_encountered": "Обнаружена ошибка (%(errorDetail)s).",
"error_unable_load_commit": "Не возможно загрузить детали подтверждения:: %(msg)s",
"new_version_available": "Доступна новая версия. <a>Обновить сейчас.</a>",
@ -3808,7 +3823,7 @@
"disinvite_button_space": "Отозвать приглашение в пространство",
"error_ban_user": "Не удалось заблокировать пользователя",
"error_deactivate": "Не удалось деактивировать пользователя",
"error_kicking_user": "Не удалось удалить пользователя",
"error_kicking_user": "Не удалось исключить пользователя",
"error_mute_user": "Не удалось заглушить пользователя",
"error_revoke_3pid_invite_description": "Не удалось отозвать приглашение. Возможно, на сервере возникла вре́менная проблема или у вас недостаточно прав для отзыва приглашения.",
"error_revoke_3pid_invite_title": "Не удалось отменить приглашение",
@ -3817,11 +3832,11 @@
"ignore_confirm_title": "Игнорировать %(user)s",
"invited_by": "Приглашен %(sender)s",
"jump_to_rr_button": "Перейти к последнему прочитанному сообщению",
"kick_button_room": "Удалить из комнаты",
"kick_button_room_name": "Удалить из %(roomName)s",
"kick_button_room": "Исключить из комнаты",
"kick_button_room_name": "Исключить из %(roomName)s",
"kick_button_space": "Исключить из пространства",
"kick_button_space_everything": "Удалить их отовсюду, где я могу",
"kick_space_specific": "Удалить их из некоторых мест, где я могу",
"kick_button_space_everything": "Исключить участника отовсюду, где я могу",
"kick_space_specific": "Исключить участника из некоторых мест, где я могу",
"kick_space_warning": "Они по-прежнему смогут получить доступ ко всему, где вы не являетесь администратором.",
"promote_warning": "Вы не сможете отменить это действие, так как этот пользователь получит уровень прав, равный вашему.",
"redact": {
@ -3845,7 +3860,7 @@
"room_encrypted": "Сообщения в этой комнате защищены сквозным шифрованием.",
"room_encrypted_detail": "Ваши сообщения в безопасности, ключи для расшифровки есть только у вас и получателя.",
"room_unencrypted": "Сообщения в этой комнате не защищены сквозным шифрованием.",
"room_unencrypted_detail": "В зашифрованных комнатах ваши сообщения в безопасности: только у вас и у получателя есть ключи для расшифровки.",
"room_unencrypted_detail": "В зашифрованных чатах ваши сообщения в безопасности: только у вас и у получателя есть ключи для расшифровки.",
"send_message": "Отправить сообщение",
"share_button": "Поделиться профилем",
"unban_button_room": "Разблокировать в комнате",
@ -4021,8 +4036,8 @@
"see_videos_sent_active_room": "Посмотрите видео размещённые в вашей активной комнате",
"see_videos_sent_this_room": "Посмотрите видео размещённые в этой комнате",
"send_emotes_active_room": "Отправляйте эмоции от своего имени в активную комнату",
"send_emotes_this_room": "Отправляйте эмоции от своего имени в эту комнату",
"send_event_type_active_room": "Отправляйте <b>%(eventType)s</b> события от своего имени в вашей активной комнате",
"send_emotes_this_room": "Отправляйте смайлики от своего имени в это чат",
"send_event_type_active_room": "Отправляйте события <b>%(eventType)s</b> от своего имени в вашем активном чате",
"send_event_type_this_room": "Отправляйте события <b>%(eventType)s</b> от своего имени в этой комнате",
"send_files_active_room": "Отправьте файлы от своего имени в активной комнате",
"send_files_this_room": "Отправьте файлы от своего имени в этой комнате",
@ -4053,7 +4068,7 @@
"remove": "Убрать для всех",
"revoke": "Отозвать разрешения",
"screenshot": "Сделать снимок",
"start_audio_stream": "Запустить аудио трансляцию"
"start_audio_stream": "Запустить аудиотрансляцию"
},
"cookie_warning": "Этот виджет может использовать куки.",
"error_hangup_description": "Вас отключили от звонка. (Ошибка: %(message)s)",
@ -4118,10 +4133,10 @@
"recentYears": "Последние года легко угадываемы",
"sequences": "Последовательности типа abc или 6543 легко угадываемы",
"similarToCommon": "Это похоже на распространённый пароль",
"simpleRepeat": "Повторы типа \"ааа\" легко угадываемы",
"simpleRepeat": "Повторы типа «ааа» легко угадываемы",
"straightRow": "Прямые ряды клавиш легко угадываемы",
"topHundred": "Это топ-100 распространённых паролей",
"topTen": "Это топ-10 распространённых паролей",
"topHundred": "Это 100 самых распространённых паролей",
"topTen": "Это 10 самых распространённых паролей",
"userInputs": "Не должно быть никаких личных данных или данных, связанных со страницами.",
"wordByItself": "Общеупотребительные слова легко угадываемы"
}

View File

@ -2251,8 +2251,6 @@
"aliases_section": "Adresy miestnosti",
"avatar_field_label": "Obrázok miestnosti",
"canonical_alias_field_label": "Hlavná adresa",
"default_url_previews_off": "Náhľady URL adries sú predvolene zakázané pre členov tejto miestnosti.",
"default_url_previews_on": "Náhľady URL adries sú predvolene povolené pre členov tejto miestnosti.",
"description_space": "Upravte nastavenia týkajúce sa vášho priestoru.",
"error_creating_alias_description": "Pri vytváraní tejto adresy došlo k chybe. Je možné, že ju server nepovoľuje alebo došlo k dočasnému zlyhaniu.",
"error_creating_alias_title": "Chyba pri vytváraní adresy",
@ -2283,12 +2281,7 @@
"published_aliases_explainer_space": "Zverejnené adresy môže použiť ktokoľvek na akomkoľvek serveri, aby sa pripojil k vášmu priestoru.",
"published_aliases_section": "Zverejnené adresy",
"save": "Uložiť zmeny",
"topic_field_label": "Téma miestnosti",
"url_preview_encryption_warning": "Náhľady URL adries sú v šifrovaných miestnostiach ako je táto predvolene zakázané, aby ste si mohli byť istí, že obsah odkazov z vašej konverzácii nebude zaznamenaný na vašom domovskom serveri počas ich generovania.",
"url_preview_explainer": "Ak niekto vo svojej správe pošle URL adresu, môže byť zobrazený jej náhľad obsahujúci názov, popis a obrázok z cieľovej web stránky.",
"url_previews_section": "Náhľady URL adries",
"user_url_previews_default_off": "Predvolene máte <a>zakázané</a> náhľady URL adries.",
"user_url_previews_default_on": "Predvolene máte <a>povolené</a> náhľady URL adries."
"topic_field_label": "Téma miestnosti"
},
"notifications": {
"browse_button": "Prechádzať",
@ -2713,8 +2706,6 @@
"username": "Používateľské meno"
},
"inline_url_previews_default": "Predvolene povoliť náhľady URL adries",
"inline_url_previews_room": "Predvolene povoliť náhľady URL adries pre členov tejto miestnosti",
"inline_url_previews_room_account": "Povoliť náhľady URL adries pre túto miestnosť (ovplyvňuje len vás)",
"insert_trailing_colon_mentions": "Vložiť na koniec dvojbodku za zmienkou používateľa na začiatku správy",
"invite_controls": {
"default_label": "Povoliť používateľom pozývať vás do miestností"

View File

@ -1786,8 +1786,6 @@
"aliases_section": "Adresa Dhomash",
"avatar_field_label": "Avatar dhome",
"canonical_alias_field_label": "Adresë kryesore",
"default_url_previews_off": "Për pjesëmarrësit në këtë dhomë paraparja e URL-ve është e çaktivizuar, si parazgjedhje.",
"default_url_previews_on": "Për pjesëmarrësit në këtë dhomë paraparja e URL-ve është e aktivizuar, si parazgjedhje.",
"description_space": "Përpunoni rregullime që lidhen me hapësirën tuaj.",
"error_creating_alias_description": "Pati një gabim në krijimin e asaj adrese. Mund të mos lejohet nga shërbyesi, ose ndodhi një gabim i përkohshëm.",
"error_creating_alias_title": "Gabim në krijim adrese",
@ -1814,12 +1812,7 @@
"published_aliases_explainer_space": "Adresat e publikuara mund të përdoren nga cilido, në cilindo shërbyes, për të hyrë në hapësirën tuaj.",
"published_aliases_section": "Adresa të Publikuara",
"save": "Ruaji Ndryshimet",
"topic_field_label": "Temë Dhome",
"url_preview_encryption_warning": "Në dhoma të fshehtëzuara, si kjo, paraparja e URL-ve është e çaktivizuar, si parazgjedhje, për të garantuar që shërbyesi juaj home (ku edhe prodhohen paraparjet) të mos grumbullojë të dhëna rreth lidhjesh që shihni në këtë dhomë.",
"url_preview_explainer": "Kur dikush vë një URL në mesazh, për të dhënë rreth lidhjes më tepër të dhëna, të tilla si titulli, përshkrimi dhe një figurë e sajtit, do të shfaqet një paraparje e URL-së.",
"url_previews_section": "Paraparje URL-sh",
"user_url_previews_default_off": "E keni <a>çaktivizuar</a>, si parazgjedhje, paraparjen e URL-ve.",
"user_url_previews_default_on": "E keni <a>aktivizuar</a>, si parazgjedhje, paraparjen e URL-ve."
"topic_field_label": "Temë Dhome"
},
"notifications": {
"browse_button": "Shfletoni",
@ -2108,8 +2101,6 @@
"spell_check_locale_placeholder": "Zgjidhni vendore"
},
"inline_url_previews_default": "Aktivizo, si parazgjedhje, paraparje URL-sh brendazi",
"inline_url_previews_room": "Aktivizo, si parazgjedhje, paraparje URL-sh për pjesëmarrësit në këtë dhomë",
"inline_url_previews_room_account": "Aktivizo paraparje URL-sh për këtë dhomë (prek vetëm ju)",
"insert_trailing_colon_mentions": "Fut dy pika pas përmendjesh përdoruesi, në fillim të një mesazhi",
"jump_to_bottom_on_send": "Kalo te fundi i rrjedhës kohore, kur dërgoni një mesazh",
"key_backup": {

View File

@ -2141,8 +2141,6 @@
"aliases_section": "Rumsadresser",
"avatar_field_label": "Rumsavatar",
"canonical_alias_field_label": "Huvudadress",
"default_url_previews_off": "URL-förhandsgranskning är inaktiverat som förval för deltagare i detta rum.",
"default_url_previews_on": "URL-förhandsgranskning är aktiverat som förval för deltagare i detta rum.",
"description_space": "Redigera inställningar relaterat till ditt utrymme.",
"error_creating_alias_description": "Ett fel inträffade vid skapande av adressen. Det kanske inte tillåts av servern, eller så inträffade ett tillfälligt fel.",
"error_creating_alias_title": "Fel vid skapande av adress",
@ -2171,12 +2169,7 @@
"published_aliases_explainer_space": "Publicerade adresser kan användas av vem som helst på vilken server som helst för att gå med i ditt utrymme.",
"published_aliases_section": "Publicerade adresser",
"save": "Spara ändringar",
"topic_field_label": "Rumsämne",
"url_preview_encryption_warning": "I krypterade rum, som detta, är URL-förhandsgranskning inaktiverad som förval för att säkerställa att din hemserver (där förhandsgranskningar genereras) inte kan samla information om länkar du ser i rummet.",
"url_preview_explainer": "När någon lägger en URL i sitt meddelande, kan URL-förhandsgranskning ge mer information om länken, såsom titel, beskrivning, och en bild från webbplatsen.",
"url_previews_section": "URL-förhandsgranskning",
"user_url_previews_default_off": "Du har <a>inaktiverat</a> URL-förhandsgranskning som förval.",
"user_url_previews_default_on": "Du har <a>aktiverat</a> URL-förhandsgranskning som förval."
"topic_field_label": "Rumsämne"
},
"notifications": {
"browse_button": "Bläddra",
@ -2589,8 +2582,6 @@
"username": "Användarnamn"
},
"inline_url_previews_default": "Aktivera inbäddad URL-förhandsgranskning som standard",
"inline_url_previews_room": "Aktivera URL-förhandsgranskning som standard för deltagare i detta rum",
"inline_url_previews_room_account": "Aktivera URL-förhandsgranskning för detta rum (påverkar bara dig)",
"insert_trailing_colon_mentions": "Infoga kolon efter användaromnämnande på början av ett meddelande",
"invite_controls": {
"default_label": "Tillåt användare att bjuda in dig till rum"

View File

@ -2078,8 +2078,6 @@
"aliases_section": "Oda Adresleri",
"avatar_field_label": "Oda avatarı",
"canonical_alias_field_label": "Ana adres",
"default_url_previews_off": "URL ön izlemeleri, bu odadaki kullanıcılar için varsayılan olarak devre dışı bıraktırılmıştır.",
"default_url_previews_on": "URL önizlemeleri, bu odadaki katılımcılar için varsayılan olarak etkin.",
"description_space": "Alanınızla ilgili ayarları düzenleyin.",
"error_creating_alias_description": "Adres oluşturulurken hata ile karşılaşıldı. Sunucu tarafından izin verilmemiş yada geçici bir hata olabilir.",
"error_creating_alias_title": "Adres oluşturulurken hata",
@ -2108,12 +2106,7 @@
"published_aliases_explainer_space": "Yayınlanan adresler, herhangi bir sunucudaki herkes tarafından alanınıza katılmak için kullanılabilir.",
"published_aliases_section": "Yayınlanmış adresler",
"save": "Değişiklikleri Kaydet",
"topic_field_label": "Oda Başlığı",
"url_preview_encryption_warning": "Bunun gibi şifreli odalarda, ana sunucunuzun (önizlemelerin oluşturulduğu yer) bu odada gördüğünüz bağlantılar hakkında bilgi toplayamamasını sağlamak için URL önizlemeleri varsayılan olarak devre dışı bırakılır.",
"url_preview_explainer": "Birisi mesajına bir URL eklediğinde, bu bağlantı hakkında başlık, açıklama ve web sitesinden bir görüntü gibi daha fazla bilgi vermek için bir URL önizlemesi gösterilebilir.",
"url_previews_section": "URL önizlemeleri",
"user_url_previews_default_off": "URL önizlemelerini varsayılan olarak <a> devre dışı </a> bıraktınız.",
"user_url_previews_default_on": "URL önizlemelerini varsayılan olarak <a>etkinleştirdiniz</a>."
"topic_field_label": "Oda Başlığı"
},
"notifications": {
"browse_button": "Gözat",
@ -2510,8 +2503,6 @@
"username": "Kullanıcı Adı"
},
"inline_url_previews_default": "Varsayılan olarak satır içi URL önizlemeleri aç",
"inline_url_previews_room": "Bu odadaki katılımcılar için URL önizlemeyi varsayılan olarak açık hale getir",
"inline_url_previews_room_account": "Bu oda için URL önizlemeyi aç (sadece sizi etkiler)",
"insert_trailing_colon_mentions": "Mesajın başında kullanıcı etiketlerinden sonra iki nokta üst üste ekle",
"jump_to_bottom_on_send": "Mesaj gönderdiğinizde zaman çizelgesinin en sonuna atla",
"key_backup": {

View File

@ -2215,8 +2215,6 @@
"aliases_section": "Адреси кімнати",
"avatar_field_label": "Аватар кімнати",
"canonical_alias_field_label": "Основна адреса",
"default_url_previews_off": "Попередній перегляд URL-адрес типово вимкнений для учасників цієї кімнати.",
"default_url_previews_on": "Попередній перегляд URL-адрес типово увімкнений для учасників цієї кімнати.",
"description_space": "Змінити налаштування, що стосуються вашого простору.",
"error_creating_alias_description": "Помилка створення такої адреси. Можливо, сервер цього не дозволяє або стався тимчасовий збій.",
"error_creating_alias_title": "Помилка створення адреси",
@ -2247,12 +2245,7 @@
"published_aliases_explainer_space": "Загальнодоступні адреси можуть бути використані будь-ким на будь-якому сервері для приєднання до вашого простору.",
"published_aliases_section": "Загальнодоступні адреси",
"save": "Зберегти зміни",
"topic_field_label": "Тема кімнати",
"url_preview_encryption_warning": "У кімнатах з шифруванням, як у цій, попередній перегляд посилань усталено вимкнено. Це робиться, щоб гарантувати, що ваш домашній сервер (на якому генеруються перегляди) не матиме змоги збирати дані щодо посилань, які ви бачите у цій кімнаті.",
"url_preview_explainer": "Коли хтось додає URL-адресу у повідомлення, можливо автоматично показувати для цієї URL-адресу попередній перегляд його заголовку, опису й зображення.",
"url_previews_section": "Попередній перегляд URL-адрес",
"user_url_previews_default_off": "Ви <a>вимкнули</a> усталений попередній перегляд URL-адрес.",
"user_url_previews_default_on": "Ви <a>увімкнули</a> усталений попередній перегляд URL-адрес."
"topic_field_label": "Тема кімнати"
},
"notifications": {
"browse_button": "Огляд",
@ -2674,8 +2667,6 @@
"username": "Ім'я користувача"
},
"inline_url_previews_default": "Увімкнути вбудований перегляд гіперпосилань за умовчанням",
"inline_url_previews_room": "Увімкнути попередній перегляд гіперпосилань за умовчанням для учасників цієї кімнати",
"inline_url_previews_room_account": "Увімкнути попередній перегляд гіперпосилань в цій кімнаті (стосується тільки вас)",
"insert_trailing_colon_mentions": "Додавати двокрапку після згадки користувача на початку повідомлення",
"invite_controls": {
"default_label": "Дозволити користувачам запрошувати вас до кімнат"

View File

@ -1726,8 +1726,6 @@
"aliases_section": "Các địa chỉ Phòng",
"avatar_field_label": "Hình đại diện phòng",
"canonical_alias_field_label": "Địa chỉ chính",
"default_url_previews_off": "Xem trước URL bị tắt theo mặc định đối với những người tham gia trong phòng này.",
"default_url_previews_on": "Xem trước URL được bật theo mặc định cho những người tham gia trong phòng này.",
"description_space": "Chỉnh sửa cài đặt liên quan đến space của bạn.",
"error_creating_alias_description": "Đã xảy ra lỗi khi tạo địa chỉ đó. Nó có thể không được máy chủ cho phép hoặc xảy ra lỗi tạm thời.",
"error_creating_alias_title": "Lỗi khi tạo địa chỉ",
@ -1754,12 +1752,7 @@
"published_aliases_explainer_space": "Địa chỉ đã xuất bản có thể được sử dụng bởi bất kỳ ai trên bất kỳ máy chủ nào để tham gia space của bạn.",
"published_aliases_section": "Các địa chỉ công khai",
"save": "Lưu thay đổi",
"topic_field_label": "Chủ đề phòng",
"url_preview_encryption_warning": "Trong các phòng được mã hóa, như phòng này, tính năng xem trước URL bị tắt theo mặc định để đảm bảo rằng máy chủ của bạn (nơi tạo bản xem trước) không thể thu thập thông tin về các liên kết mà bạn nhìn thấy trong phòng này.",
"url_preview_explainer": "Khi ai đó đặt URL trong tin nhắn của họ, bản xem trước URL có thể được hiển thị để cung cấp thêm thông tin về liên kết đó như tiêu đề, mô tả và hình ảnh từ trang web.",
"url_previews_section": "Xem trước URL",
"user_url_previews_default_off": "Bạn đã tắt <a>disabled</a> xem trước URL theo mặc định.",
"user_url_previews_default_on": "Bạn đã bật <a>enabled</a> URL xem trước URL theo mặc định."
"topic_field_label": "Chủ đề phòng"
},
"notifications": {
"browse_button": "Duyệt qua",
@ -2053,8 +2046,6 @@
"spell_check_locale_placeholder": "Chọn vùng miền"
},
"inline_url_previews_default": "Bật xem trước nội dung liên kết theo mặc định",
"inline_url_previews_room": "Bật xem trước nội dung liên kết cho mọi người trong phòng này",
"inline_url_previews_room_account": "Bật xem trước nội dung liên kết trong phòng này (chỉ với bạn)",
"insert_trailing_colon_mentions": "Chèn dấu hai chấm phía sau các đề cập người dùng ở đầu một tin nhắn",
"jump_to_bottom_on_send": "Chuyển đến cuối dòng thời gian khi bạn gửi tin nhắn",
"key_backup": {

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