Localazy Download (#32808)

* [create-pull-request] automated change

* test: update SC tests

* test: update SC screenshots

* test: update EW snapshots

* test: update EW tests

* test: update EW e2e tests

---------

Co-authored-by: t3chguy <2403652+t3chguy@users.noreply.github.com>
Co-authored-by: Florian Duros <florian.duros@ormaz.fr>
This commit is contained in:
ElementRobot
2026-03-18 16:53:28 +01:00
committed by GitHub
parent 2128c1884c
commit 8a38a2fe4a
105 changed files with 535 additions and 836 deletions
@@ -57,7 +57,7 @@ test.describe("Encryption state after registration", () => {
await page.getByRole("textbox", { name: "Name" }).fill("test room"); await page.getByRole("textbox", { name: "Name" }).fill("test room");
await page.getByRole("button", { name: "Create room" }).click(); await page.getByRole("button", { name: "Create room" }).click();
await expect(page.getByRole("heading", { name: "Set up recovery" })).toBeVisible(); await expect(page.getByRole("heading", { name: "Back up your chats" })).toBeVisible();
}); });
}); });
@@ -22,7 +22,7 @@ test.describe("Complete security", () => {
async ({ page, credentials, homeserver }) => { async ({ page, credentials, homeserver }) => {
await createBot(page, homeserver, credentials, true); await createBot(page, homeserver, credentials, true);
await logIntoElement(page, credentials); await logIntoElement(page, credentials);
await expect(page.getByRole("heading", { name: "Confirm your identity" })).toBeVisible(); await expect(page.getByRole("heading", { name: "Confirm your digital identity" })).toBeVisible();
await expect(page.getByRole("main")).toMatchScreenshot("complete-security.png"); await expect(page.getByRole("main")).toMatchScreenshot("complete-security.png");
}, },
); );
@@ -45,6 +45,8 @@ test.describe("Cryptography", function () {
// Log in again, and see how the message looks. // Log in again, and see how the message looks.
await logIntoElement(page, credentials); await logIntoElement(page, credentials);
// Dismiss the "Back up your chats" toast, otherwise it gets in the way of clicking the room list
await page.getByRole("button", { name: "Dismiss" }).click();
await app.viewRoomByName("Test room"); await app.viewRoomByName("Test room");
const lastTile = page.locator(".mx_EventTile").last(); const lastTile = page.locator(".mx_EventTile").last();
await expect(lastTile).toContainText("Historical messages are not available on this device"); await expect(lastTile).toContainText("Historical messages are not available on this device");
@@ -42,7 +42,7 @@ test.describe("Dehydration", () => {
await page.getByRole("button", { name: "Continue" }).click(); await page.getByRole("button", { name: "Continue" }).click();
// Set up recovery // Set up recovery
await page.getByRole("button", { name: "Set up recovery" }).click(); await page.getByRole("button", { name: "Get recovery key" }).click();
await page.getByRole("button", { name: "Continue" }).click(); await page.getByRole("button", { name: "Continue" }).click();
const recoveryKey = await page.getByTestId("recoveryKey").innerText(); const recoveryKey = await page.getByTestId("recoveryKey").innerText();
await page.getByRole("button", { name: "Continue" }).click(); await page.getByRole("button", { name: "Continue" }).click();
@@ -59,14 +59,14 @@ test.describe("Dehydration", () => {
await expect(sessionsTab.getByText("Dehydrated device")).not.toBeVisible(); await expect(sessionsTab.getByText("Dehydrated device")).not.toBeVisible();
}); });
test("'Set up recovery' creates dehydrated device", async ({ app, credentials, page }) => { test("'Get recovery key' creates dehydrated device", async ({ app, credentials, page }) => {
await logIntoElement(page, credentials); await logIntoElement(page, credentials);
const settingsDialogLocator = await app.settings.openUserSettings("Encryption"); const settingsDialogLocator = await app.settings.openUserSettings("Encryption");
await settingsDialogLocator.getByRole("button", { name: "Set up recovery" }).click(); await settingsDialogLocator.getByRole("button", { name: "Get recovery key" }).click();
// First it displays an informative panel about the recovery key // First it displays an informative panel about the recovery key
await expect(settingsDialogLocator.getByRole("heading", { name: "Set up recovery" })).toBeVisible(); await expect(settingsDialogLocator.getByRole("heading", { name: "Get recovery key" })).toBeVisible();
await settingsDialogLocator.getByRole("button", { name: "Continue" }).click(); await settingsDialogLocator.getByRole("button", { name: "Continue" }).click();
// Next, it displays the new recovery key. We click on the copy button. // Next, it displays the new recovery key. We click on the copy button.
@@ -86,7 +86,7 @@ test.describe("Dehydration", () => {
await expectDehydratedDeviceEnabled(app); await expectDehydratedDeviceEnabled(app);
}); });
test("Reset identity during login and set up recovery re-creates dehydrated device", async ({ test("Reset identity during login and back up your chats re-creates dehydrated device", async ({
page, page,
homeserver, homeserver,
app, app,
@@ -108,7 +108,7 @@ test.describe("Dehydration", () => {
// Oh no, we forgot our recovery key - reset our identity // Oh no, we forgot our recovery key - reset our identity
await page.locator(".mx_AuthPage").getByRole("button", { name: "Can't confirm" }).click(); await page.locator(".mx_AuthPage").getByRole("button", { name: "Can't confirm" }).click();
await expect( await expect(
page.getByRole("heading", { name: "Are you sure you want to reset your identity?" }), page.getByRole("heading", { name: "Are you sure you want to reset your digital identity?" }),
).toBeVisible(); ).toBeVisible();
await page.getByRole("button", { name: "Continue", exact: true }).click(); await page.getByRole("button", { name: "Continue", exact: true }).click();
await page.getByPlaceholder("Password").fill(credentials.password); await page.getByPlaceholder("Password").fill(credentials.password);
@@ -116,7 +116,7 @@ test.describe("Dehydration", () => {
// And set up recovery // And set up recovery
const settings = await app.settings.openUserSettings("Encryption"); const settings = await app.settings.openUserSettings("Encryption");
await settings.getByRole("button", { name: "Set up recovery" }).click(); await settings.getByRole("button", { name: "Get recovery key" }).click();
await settings.getByRole("button", { name: "Continue" }).click(); await settings.getByRole("button", { name: "Continue" }).click();
const recoveryKey = await settings.getByTestId("recoveryKey").innerText(); const recoveryKey = await settings.getByTestId("recoveryKey").innerText();
await settings.getByRole("button", { name: "Continue" }).click(); await settings.getByRole("button", { name: "Continue" }).click();
@@ -133,10 +133,10 @@ test.describe("Dehydration", () => {
// Create a dehydrated device by setting up recovery (see "'Set up // Create a dehydrated device by setting up recovery (see "'Set up
// recovery' creates dehydrated device" test above) // recovery' creates dehydrated device" test above)
const settingsDialogLocator = await app.settings.openUserSettings("Encryption"); const settingsDialogLocator = await app.settings.openUserSettings("Encryption");
await settingsDialogLocator.getByRole("button", { name: "Set up recovery" }).click(); await settingsDialogLocator.getByRole("button", { name: "Get recovery key" }).click();
// First it displays an informative panel about the recovery key // First it displays an informative panel about the recovery key
await expect(settingsDialogLocator.getByRole("heading", { name: "Set up recovery" })).toBeVisible(); await expect(settingsDialogLocator.getByRole("heading", { name: "Get recovery key" })).toBeVisible();
await settingsDialogLocator.getByRole("button", { name: "Continue" }).click(); await settingsDialogLocator.getByRole("button", { name: "Continue" }).click();
// Next, it displays the new recovery key. We click on the copy button. // Next, it displays the new recovery key. We click on the copy button.
@@ -302,7 +302,7 @@ test.describe("Cryptography", function () {
const last = page.locator(".mx_EventTile_last"); const last = page.locator(".mx_EventTile_last");
await expect(last).toContainText("test encrypted from user that was previously verified"); await expect(last).toContainText("test encrypted from user that was previously verified");
const lastE2eIcon = last.locator(".mx_EventTile_e2eIcon"); const lastE2eIcon = last.locator(".mx_EventTile_e2eIcon");
await expect(lastE2eIcon).toHaveAccessibleName("Sender's verified identity was reset"); await expect(lastE2eIcon).toHaveAccessibleName("Sender's verified digital identity was reset");
await expect(lastE2eIcon).toMatchScreenshot("event-shield-identity-reset.png"); await expect(lastE2eIcon).toMatchScreenshot("event-shield-identity-reset.png");
}, },
); );
@@ -52,6 +52,6 @@ test.describe("Invisible cryptography", () => {
/* should show an error for a message from a previously verified device */ /* should show an error for a message from a previously verified device */
await bobSecondDevice.sendMessage(testRoomId, "test encrypted from user that was previously verified"); await bobSecondDevice.sendMessage(testRoomId, "test encrypted from user that was previously verified");
const lastTile = page.locator(".mx_EventTile_last"); const lastTile = page.locator(".mx_EventTile_last");
await expect(lastTile).toContainText("Sender's verified identity was reset"); await expect(lastTile).toContainText("Sender's verified digital identity was reset");
}); });
}); });
@@ -23,7 +23,7 @@ test.describe("Logout tests", () => {
await sendMessageInCurrentRoom(page, "Hello secret world"); await sendMessageInCurrentRoom(page, "Hello secret world");
const locator = await app.settings.openUserMenu(); const locator = await app.settings.openUserMenu();
await locator.getByRole("menuitem", { name: "Sign out", exact: true }).click(); await locator.getByRole("menuitem", { name: "Remove this device", exact: true }).click();
const currentDialogLocator = page.locator(".mx_Dialog"); const currentDialogLocator = page.locator(".mx_Dialog");
@@ -41,11 +41,11 @@ test.describe("Logout tests", () => {
await sendMessageInCurrentRoom(page, "Hello secret world"); await sendMessageInCurrentRoom(page, "Hello secret world");
const locator = await app.settings.openUserMenu(); const locator = await app.settings.openUserMenu();
await locator.getByRole("menuitem", { name: "Sign out", exact: true }).click(); await locator.getByRole("menuitem", { name: "Remove this device", exact: true }).click();
const currentDialogLocator = page.locator(".mx_Dialog"); const currentDialogLocator = page.locator(".mx_Dialog");
await expect(currentDialogLocator.getByText("Are you sure you want to sign out?")).toBeVisible(); await expect(currentDialogLocator.getByText("Are you sure you want to Remove this device?")).toBeVisible();
}); });
test("Logout directly if the user has no room keys", async ({ page, app }) => { test("Logout directly if the user has no room keys", async ({ page, app }) => {
@@ -54,7 +54,7 @@ test.describe("Logout tests", () => {
await sendMessageInCurrentRoom(page, "Hello public world!"); await sendMessageInCurrentRoom(page, "Hello public world!");
const locator = await app.settings.openUserMenu(); const locator = await app.settings.openUserMenu();
await locator.getByRole("menuitem", { name: "Sign out", exact: true }).click(); await locator.getByRole("menuitem", { name: "Remove this device", exact: true }).click();
// Should have logged out directly // Should have logged out directly
await expect(page.getByRole("heading", { name: "Sign in" })).toBeVisible(); await expect(page.getByRole("heading", { name: "Sign in" })).toBeVisible();
@@ -61,7 +61,9 @@ test.describe("Key storage out of sync toast", () => {
await page.getByRole("button", { name: "Forgot recovery key?" }).click(); await page.getByRole("button", { name: "Forgot recovery key?" }).click();
await expect( await expect(
page.getByRole("heading", { name: "Forgot your recovery key? You’ll need to reset your identity." }), page.getByRole("heading", {
name: "Forgot your recovery key? You’ll need to reset your digital identity.",
}),
).toBeVisible(); ).toBeVisible();
}); });
}); });
+3 -3
View File
@@ -252,11 +252,11 @@ export async function logIntoElementAndVerify(page: Page, credentials: Credentia
*/ */
export async function logOutOfElement(page: Page, discardKeys: boolean = false) { export async function logOutOfElement(page: Page, discardKeys: boolean = false) {
await page.getByRole("button", { name: "User menu" }).click(); await page.getByRole("button", { name: "User menu" }).click();
await page.locator(".mx_UserMenu_contextMenu").getByRole("menuitem", { name: "Sign out" }).click(); await page.locator(".mx_UserMenu_contextMenu").getByRole("menuitem", { name: "Remove this device" }).click();
if (discardKeys) { if (discardKeys) {
await page.getByRole("button", { name: "I don't want my encrypted messages" }).click(); await page.getByRole("button", { name: "I don't want my encrypted messages" }).click();
} else { } else {
await page.locator(".mx_Dialog .mx_QuestionDialog").getByRole("button", { name: "Sign out" }).click(); await page.locator(".mx_Dialog .mx_QuestionDialog").getByRole("button", { name: "Remove this device" }).click();
} }
// Wait for the login page to load // Wait for the login page to load
@@ -315,7 +315,7 @@ export async function enableKeyBackup(app: ElementAppPage): Promise<string> {
await encryptionTab.getByRole("switch", { name: "Allow key storage" }).click(); await encryptionTab.getByRole("switch", { name: "Allow key storage" }).click();
} }
await encryptionTab.getByRole("button", { name: "Set up recovery" }).click(); await encryptionTab.getByRole("button", { name: "Get recovery key" }).click();
await encryptionTab.getByRole("button", { name: "Continue" }).click(); await encryptionTab.getByRole("button", { name: "Continue" }).click();
const recoveryKey = await encryptionTab.getByTestId("recoveryKey").innerText(); const recoveryKey = await encryptionTab.getByTestId("recoveryKey").innerText();
@@ -185,7 +185,9 @@ test.describe("Login", () => {
await page.goto("/"); await page.goto("/");
await login(page, homeserver, credentials); await login(page, homeserver, credentials);
await expect(page.getByRole("heading", { name: "Confirm your identity", level: 2 })).toBeVisible(); await expect(
page.getByRole("heading", { name: "Confirm your digital identity", level: 2 }),
).toBeVisible();
await expect(page.getByRole("button", { name: "Skip verification for now" })).toBeVisible(); await expect(page.getByRole("button", { name: "Skip verification for now" })).toBeVisible();
}); });
@@ -218,7 +220,9 @@ test.describe("Login", () => {
await page.goto("/"); await page.goto("/");
await login(page, homeserver, credentials); await login(page, homeserver, credentials);
await expect(page.getByRole("heading", { name: "Confirm your identity", level: 2 })).toBeVisible(); await expect(
page.getByRole("heading", { name: "Confirm your digital identity", level: 2 }),
).toBeVisible();
await expect(page.getByRole("button", { name: "Skip verification for now" })).toBeVisible(); await expect(page.getByRole("button", { name: "Skip verification for now" })).toBeVisible();
}); });
@@ -253,7 +257,7 @@ test.describe("Login", () => {
await page.goto("/"); await page.goto("/");
await login(page, homeserver, credentials); await login(page, homeserver, credentials);
const h2 = page.getByRole("heading", { name: "Confirm your identity", level: 2 }); const h2 = page.getByRole("heading", { name: "Confirm your digital identity", level: 2 });
await expect(h2).toBeVisible(); await expect(h2).toBeVisible();
await expect(h2.locator(".mx_CompleteSecurity_skip")).toHaveCount(0); await expect(h2.locator(".mx_CompleteSecurity_skip")).toHaveCount(0);
@@ -273,7 +277,7 @@ test.describe("Login", () => {
// Load the page and see that we are asked to verify // Load the page and see that we are asked to verify
await page.goto("/#/welcome"); await page.goto("/#/welcome");
await login(page, homeserver, credentials); await login(page, homeserver, credentials);
let h2 = page.getByRole("heading", { name: "Confirm your identity", level: 2 }); let h2 = page.getByRole("heading", { name: "Confirm your digital identity", level: 2 });
await expect(h2).toBeVisible(); await expect(h2).toBeVisible();
// Click "Use another device" // Click "Use another device"
@@ -283,7 +287,7 @@ test.describe("Login", () => {
await page.getByRole("button", { name: "Close dialog" }).click(); await page.getByRole("button", { name: "Close dialog" }).click();
// Check that we are still being asked to verify // Check that we are still being asked to verify
h2 = page.getByRole("heading", { name: "Confirm your identity", level: 2 }); h2 = page.getByRole("heading", { name: "Confirm your digital identity", level: 2 });
await expect(h2).toBeVisible(); await expect(h2).toBeVisible();
}); });
}); });
@@ -302,7 +306,9 @@ test.describe("Login", () => {
await page.goto("/"); await page.goto("/");
await login(page, homeserver, credentials); await login(page, homeserver, credentials);
await expect(page.getByRole("heading", { name: "Confirm your identity", level: 2 })).toBeVisible(); await expect(
page.getByRole("heading", { name: "Confirm your digital identity", level: 2 }),
).toBeVisible();
// Start the reset process // Start the reset process
await page.getByRole("button", { name: "Can't confirm?" }).click(); await page.getByRole("button", { name: "Can't confirm?" }).click();
@@ -335,7 +341,10 @@ test.describe("Login", () => {
// Allow the outstanding requests queue to settle before logging out // Allow the outstanding requests queue to settle before logging out
await page.waitForTimeout(2000); await page.waitForTimeout(2000);
await page.locator(".mx_UserMenu_contextMenu").getByRole("menuitem", { name: "Sign out" }).click(); await page
.locator(".mx_UserMenu_contextMenu")
.getByRole("menuitem", { name: "Remove this device" })
.click();
await expect(page).toHaveURL(/\/#\/login$/); await expect(page).toHaveURL(/\/#\/login$/);
}); });
}); });
@@ -29,7 +29,7 @@ test.describe("logout with logout_redirect_url", () => {
// give a change for the outstanding requests queue to settle before logging out // give a change for the outstanding requests queue to settle before logging out
await page.waitForTimeout(2000); await page.waitForTimeout(2000);
await page.locator(".mx_UserMenu_contextMenu").getByRole("menuitem", { name: "Sign out" }).click(); await page.locator(".mx_UserMenu_contextMenu").getByRole("menuitem", { name: "Remove this device" }).click();
await expect(page).toHaveURL(/\/decoder-ring\/$/); await expect(page).toHaveURL(/\/decoder-ring\/$/);
}); });
}); });
@@ -74,7 +74,7 @@ test.describe("OIDC Native", { tag: ["@no-firefox", "@no-webkit"] }, () => {
(request) => request.url() === revokeUri && request.postDataJSON()["token_type_hint"] === "refresh_token", (request) => request.url() === revokeUri && request.postDataJSON()["token_type_hint"] === "refresh_token",
); );
const locator = await app.settings.openUserMenu(); const locator = await app.settings.openUserMenu();
await locator.getByRole("menuitem", { name: "Sign out", exact: true }).click(); await locator.getByRole("menuitem", { name: "Remove this device", exact: true }).click();
await revokeAccessTokenPromise; await revokeAccessTokenPromise;
await revokeRefreshTokenPromise; await revokeRefreshTokenPromise;
}); });
@@ -98,7 +98,7 @@ test.describe("OIDC Native", { tag: ["@no-firefox", "@no-webkit"] }, () => {
await page.goto("http://localhost:8080"); await page.goto("http://localhost:8080");
await expect( await expect(
page.getByText("For security, this session has been signed out. Please sign in again."), page.getByText("For security, this session has been removed. Please sign in again."),
).toBeVisible(); ).toBeVisible();
//await expect(page).toMatchScreenshot("token-expired.png", { includeDialogBackground: true }); //await expect(page).toMatchScreenshot("token-expired.png", { includeDialogBackground: true });
@@ -122,7 +122,7 @@ test.describe("OIDC Native", { tag: ["@no-firefox", "@no-webkit"] }, () => {
// Allow the outstanding requests queue to settle before logging out // Allow the outstanding requests queue to settle before logging out
await page.waitForTimeout(2000); await page.waitForTimeout(2000);
await page.locator(".mx_UserMenu_contextMenu").getByRole("menuitem", { name: "Sign out" }).click(); await page.locator(".mx_UserMenu_contextMenu").getByRole("menuitem", { name: "Remove this device" }).click();
await expect(page).toHaveURL(/\/#\/login$/); await expect(page).toHaveURL(/\/#\/login$/);
// Log in again // Log in again
@@ -131,7 +131,7 @@ test.describe("OIDC Native", { tag: ["@no-firefox", "@no-webkit"] }, () => {
await page.getByRole("button", { name: "Continue" }).click(); await page.getByRole("button", { name: "Continue" }).click();
// We should be in // We should be in
await expect(page.getByText("Confirm your identity")).toBeVisible(); await expect(page.getByText("Confirm your digital identity")).toBeVisible();
}); });
test.describe("with force_verification on", () => { test.describe("with force_verification on", () => {
@@ -154,7 +154,10 @@ test.describe("OIDC Native", { tag: ["@no-firefox", "@no-webkit"] }, () => {
await page.getByRole("button", { name: "User menu" }).click(); await page.getByRole("button", { name: "User menu" }).click();
await expect(page.getByText(userId, { exact: true })).toBeVisible(); await expect(page.getByText(userId, { exact: true })).toBeVisible();
await page.waitForTimeout(2000); await page.waitForTimeout(2000);
await page.locator(".mx_UserMenu_contextMenu").getByRole("menuitem", { name: "Sign out" }).click(); await page
.locator(".mx_UserMenu_contextMenu")
.getByRole("menuitem", { name: "Remove this device" })
.click();
await expect(page).toHaveURL(/\/#\/login$/); await expect(page).toHaveURL(/\/#\/login$/);
// Log in again // Log in again
@@ -163,7 +166,7 @@ test.describe("OIDC Native", { tag: ["@no-firefox", "@no-webkit"] }, () => {
await page.getByRole("button", { name: "Continue" }).click(); await page.getByRole("button", { name: "Continue" }).click();
// We should be being warned that we need to verify (but we can't) // We should be being warned that we need to verify (but we can't)
await expect(page.getByText("Confirm your identity")).toBeVisible(); await expect(page.getByText("Confirm your digital identity")).toBeVisible();
// And there should be no way to close this prompt // And there should be no way to close this prompt
await expect(page.getByRole("button", { name: "Skip verification for now" })).not.toBeVisible(); await expect(page.getByRole("button", { name: "Skip verification for now" })).not.toBeVisible();
@@ -198,7 +201,10 @@ test.describe("OIDC Native", { tag: ["@no-firefox", "@no-webkit"] }, () => {
await page.getByRole("button", { name: "User menu" }).click(); await page.getByRole("button", { name: "User menu" }).click();
await expect(page.getByText(userId, { exact: true })).toBeVisible(); await expect(page.getByText(userId, { exact: true })).toBeVisible();
await page.waitForTimeout(2000); await page.waitForTimeout(2000);
await page.locator(".mx_UserMenu_contextMenu").getByRole("menuitem", { name: "Sign out" }).click(); await page
.locator(".mx_UserMenu_contextMenu")
.getByRole("menuitem", { name: "Remove this device" })
.click();
await expect(page).toHaveURL(/\/#\/login$/); await expect(page).toHaveURL(/\/#\/login$/);
// Log in again // Log in again
@@ -59,7 +59,7 @@ test.describe("Device manager", () => {
await filteredDeviceListItems.last().click({ force: true }); await filteredDeviceListItems.last().click({ force: true });
// sign out from list selection action buttons // sign out from list selection action buttons
await tab.getByRole("button", { name: "Sign out", exact: true }).click(); await tab.getByRole("button", { name: "Remove this device", exact: true }).click();
await page.getByRole("dialog").getByTestId("dialog-primary-button").click(); await page.getByRole("dialog").getByTestId("dialog-primary-button").click();
// list updated after sign out // list updated after sign out
@@ -88,7 +88,7 @@ test.describe("Device manager", () => {
await expect(firstSession.locator(".mx_DeviceTile h4").getByText(sessionName)).toBeVisible(); await expect(firstSession.locator(".mx_DeviceTile h4").getByText(sessionName)).toBeVisible();
// sign out using the device details sign out // sign out using the device details sign out
await firstSession.getByRole("button", { name: "Sign out of this session" }).click(); await firstSession.getByRole("button", { name: "Remove this session" }).click();
// confirm the signout // confirm the signout
await page.getByRole("dialog").getByTestId("dialog-primary-button").click(); await page.getByRole("dialog").getByTestId("dialog-primary-button").click();
@@ -64,7 +64,7 @@ test.describe("Advanced section in Encryption tab", () => {
// After resetting the identity, the user should set up a new recovery key // After resetting the identity, the user should set up a new recovery key
await expect( await expect(
util.getEncryptionRecoverySection().getByRole("button", { name: "Set up recovery" }), util.getEncryptionRecoverySection().getByRole("button", { name: "Get recovery key" }),
).toBeVisible(); ).toBeVisible();
await checkDeviceIsCrossSigned(app); await checkDeviceIsCrossSigned(app);
@@ -111,7 +111,7 @@ test.describe("Encryption tab", () => {
// The user is prompted to reset their identity // The user is prompted to reset their identity
await expect( await expect(
dialog.getByText("Forgot your recovery key? You’ll need to reset your identity."), dialog.getByText("Forgot your recovery key? You’ll need to reset your digital identity."),
).toBeVisible(); ).toBeVisible();
}); });
@@ -59,13 +59,13 @@ test.describe("Recovery section in Encryption tab", () => {
// The key backup is deleted and the user needs to set it up // The key backup is deleted and the user needs to set it up
const dialog = await util.openEncryptionTab(); const dialog = await util.openEncryptionTab();
const setupButton = dialog.getByRole("button", { name: "Set up recovery" }); const setupButton = dialog.getByRole("button", { name: "Get recovery key" });
await expect(setupButton).toBeVisible(); await expect(setupButton).toBeVisible();
await expect(util.getEncryptionRecoverySection()).toMatchScreenshot("set-up-recovery.png"); await expect(util.getEncryptionRecoverySection()).toMatchScreenshot("set-up-recovery.png");
await setupButton.click(); await setupButton.click();
// Display an informative panel about the recovery key // Display an informative panel about the recovery key
await expect(dialog.getByRole("heading", { name: "Set up recovery" })).toBeVisible(); await expect(dialog.getByRole("heading", { name: "Get recovery key" })).toBeVisible();
await expect(util.getEncryptionTabContent()).toMatchScreenshot("set-up-key-1-encryption-tab.png"); await expect(util.getEncryptionTabContent()).toMatchScreenshot("set-up-key-1-encryption-tab.png");
await dialog.getByRole("button", { name: "Continue" }).click(); await dialog.getByRole("button", { name: "Continue" }).click();
Binary file not shown.

Before

Width:  |  Height:  |  Size: 72 KiB

After

Width:  |  Height:  |  Size: 74 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 62 KiB

After

Width:  |  Height:  |  Size: 60 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 42 KiB

After

Width:  |  Height:  |  Size: 40 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 45 KiB

After

Width:  |  Height:  |  Size: 43 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 46 KiB

After

Width:  |  Height:  |  Size: 43 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 24 KiB

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 16 KiB

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 33 KiB

After

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 32 KiB

After

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 26 KiB

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 15 KiB

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 14 KiB

After

Width:  |  Height:  |  Size: 15 KiB

+2 -12
View File
@@ -1495,8 +1495,6 @@
}, },
"labs": { "labs": {
"ask_to_join": "Umožnit požádat o vstup", "ask_to_join": "Umožnit požádat o vstup",
"automatic_debug_logs": "Automaticky odesílat ladící protokoly při jakékoli chybě",
"automatic_debug_logs_decryption": "Automaticky odesílat ladící protokoly při chybách dešifrování",
"beta_description": "Co se chystá pro %(brand)s? Experimentální funkce jsou nejlepším způsobem, jak se dostat k novým věcem v raném stádiu, vyzkoušet nové funkce a pomoci je formovat ještě před jejich spuštěním.", "beta_description": "Co se chystá pro %(brand)s? Experimentální funkce jsou nejlepším způsobem, jak se dostat k novým věcem v raném stádiu, vyzkoušet nové funkce a pomoci je formovat ještě před jejich spuštěním.",
"beta_feature": "Jedná se o funkci ve vývoji", "beta_feature": "Jedná se o funkci ve vývoji",
"beta_feedback_leave_button": "Chcete-li opustit beta verzi, jděte do nastavení.", "beta_feedback_leave_button": "Chcete-li opustit beta verzi, jděte do nastavení.",
@@ -3408,8 +3406,7 @@
"voice_call_unsupported": "%(senderName)s zahájil(a) hovor. (není podporováno tímto prohlížečem)" "voice_call_unsupported": "%(senderName)s zahájil(a) hovor. (není podporováno tímto prohlížečem)"
}, },
"m.file": { "m.file": {
"error_decrypting": "Chyba při dešifrování přílohy", "error_decrypting": "Chyba při dešifrování přílohy"
"error_invalid": "Neplatný soubor"
}, },
"m.image": { "m.image": {
"error": "Obrázek nelze zobrazit kvůli chybě", "error": "Obrázek nelze zobrazit kvůli chybě",
@@ -3750,14 +3747,7 @@
"one_user": "%(displayName)s píše …", "one_user": "%(displayName)s píše …",
"two_users": "%(names)s a %(lastPerson)s píšou …" "two_users": "%(names)s a %(lastPerson)s píšou …"
}, },
"undecryptable_tooltip": "Tuto zprávu se nepodařilo dešifrovat", "undecryptable_tooltip": "Tuto zprávu se nepodařilo dešifrovat"
"url_preview": {
"close": "Zavřít náhled",
"show_n_more": {
"one": "Zobrazit %(count)s další náhled",
"other": "Zobrazit %(count)s dalších náhledů"
}
}
}, },
"truncated_list_n_more": { "truncated_list_n_more": {
"other": "A %(count)s dalších..." "other": "A %(count)s dalších..."
+2 -11
View File
@@ -1507,8 +1507,6 @@
}, },
"labs": { "labs": {
"ask_to_join": "Galluogi gofyn i ymuno", "ask_to_join": "Galluogi gofyn i ymuno",
"automatic_debug_logs": "Anfon logiau dadfygio yn awtomatig ar unrhyw wall",
"automatic_debug_logs_decryption": "Anfon logiau dadgryptio yn awtomatig ar wallau dadgryptio",
"beta_description": "Beth sydd nesaf i %(brand)s? Labs yw'r ffordd orau o gael pethau'n gynnar, profi nodweddion newydd a helpu i'w siapio cyn iddynt gael eu lansio.", "beta_description": "Beth sydd nesaf i %(brand)s? Labs yw'r ffordd orau o gael pethau'n gynnar, profi nodweddion newydd a helpu i'w siapio cyn iddynt gael eu lansio.",
"beta_feature": "Mae hon yn nodwedd beta", "beta_feature": "Mae hon yn nodwedd beta",
"beta_feedback_leave_button": "I adael y beta, ewch i'ch gosodiadau.", "beta_feedback_leave_button": "I adael y beta, ewch i'ch gosodiadau.",
@@ -3400,8 +3398,7 @@
"voice_call_unsupported": "Gosododd %(senderName)s alwad llais. (heb ei gefnogi gan y porwr hwn)" "voice_call_unsupported": "Gosododd %(senderName)s alwad llais. (heb ei gefnogi gan y porwr hwn)"
}, },
"m.file": { "m.file": {
"error_decrypting": "Gwall wrth ddadgryptio atodiad", "error_decrypting": "Gwall wrth ddadgryptio atodiad"
"error_invalid": "Ffeil annilys"
}, },
"m.image": { "m.image": {
"error": "Methu dangos delwedd oherwydd gwall", "error": "Methu dangos delwedd oherwydd gwall",
@@ -3749,13 +3746,7 @@
"one_user": "Mae %(displayName)s yn teipio…", "one_user": "Mae %(displayName)s yn teipio…",
"two_users": "Mae %(materes)s a %(lastPerson)s yn teipio…" "two_users": "Mae %(materes)s a %(lastPerson)s yn teipio…"
}, },
"undecryptable_tooltip": "Nid oedd modd dadgryptio'r neges hon", "undecryptable_tooltip": "Nid oedd modd dadgryptio'r neges hon"
"url_preview": {
"close": "Cau rhagolwg",
"show_n_more": {
"Dangos %(count)s rhagolwg arall": "other"
}
}
}, },
"truncated_list_n_more": { "truncated_list_n_more": {
"A %(count)s yn rhagor...": "other" "A %(count)s yn rhagor...": "other"
+2 -12
View File
@@ -1302,8 +1302,6 @@
}, },
"labs": { "labs": {
"ask_to_join": "Aktivér spørg om at deltage", "ask_to_join": "Aktivér spørg om at deltage",
"automatic_debug_logs": "Send automatisk fejlfindingslogfiler ved enhver fejl",
"automatic_debug_logs_decryption": "Send automatisk fejlfindingslogfiler ved dekrypteringsfejl",
"beta_description": "Hvad er det næste skridt for %(brand)s? Labs er den bedste måde at få adgang til tingene tidligt, afprøve nye funktioner og være med til at forme dem, inden de faktisk lanceres.", "beta_description": "Hvad er det næste skridt for %(brand)s? Labs er den bedste måde at få adgang til tingene tidligt, afprøve nye funktioner og være med til at forme dem, inden de faktisk lanceres.",
"beta_feature": "Dette er en betafunktion", "beta_feature": "Dette er en betafunktion",
"beta_feedback_leave_button": "For at forlade betaversionen skal du gå til dine indstillinger.", "beta_feedback_leave_button": "For at forlade betaversionen skal du gå til dine indstillinger.",
@@ -2957,8 +2955,7 @@
"voice_call_unsupported": "%(senderName)s foretog et stemmeopkald. (ikke understøttet af denne browser)" "voice_call_unsupported": "%(senderName)s foretog et stemmeopkald. (ikke understøttet af denne browser)"
}, },
"m.file": { "m.file": {
"error_decrypting": "Fejl ved dekryptering af vedhæftet fil", "error_decrypting": "Fejl ved dekryptering af vedhæftet fil"
"error_invalid": "Ugyldig fil"
}, },
"m.image": { "m.image": {
"error": "Billedet kunne ikke vises på grund af en fejl", "error": "Billedet kunne ikke vises på grund af en fejl",
@@ -3292,14 +3289,7 @@
"one_user": "%(displayName)s skriver …", "one_user": "%(displayName)s skriver …",
"two_users": "%(names)s og %(lastPerson)s skriver …" "two_users": "%(names)s og %(lastPerson)s skriver …"
}, },
"undecryptable_tooltip": "Denne besked kunne ikke dekrypteres", "undecryptable_tooltip": "Denne besked kunne ikke dekrypteres"
"url_preview": {
"close": "Luk forhåndsvisning",
"show_n_more": {
"one": "Vis %(count)s anden forhåndsvisning",
"other": "Vis %(count)s andre forhåndsvisninger"
}
}
}, },
"truncated_list_n_more": { "truncated_list_n_more": {
"other": "Og %(count)s mere..." "other": "Og %(count)s mere..."
+2 -12
View File
@@ -1495,8 +1495,6 @@
}, },
"labs": { "labs": {
"ask_to_join": "Beitrittsanfragen erlauben", "ask_to_join": "Beitrittsanfragen erlauben",
"automatic_debug_logs": "Sende bei Fehlern automatisch Protokolle zur Fehlerkorrektur",
"automatic_debug_logs_decryption": "Sende bei Entschlüsselungsfehlern automatisch Protokolle zur Fehlerkorrektur",
"beta_description": "Was passiert als nächstes in %(brand)s? Das Labor ist deine erste Anlaufstelle, um Funktionen früh zu erhalten, zu testen und mitzugestalten, bevor sie tatsächlich veröffentlicht werden.", "beta_description": "Was passiert als nächstes in %(brand)s? Das Labor ist deine erste Anlaufstelle, um Funktionen früh zu erhalten, zu testen und mitzugestalten, bevor sie tatsächlich veröffentlicht werden.",
"beta_feature": "Dies ist eine Betafunktion", "beta_feature": "Dies ist eine Betafunktion",
"beta_feedback_leave_button": "Du kannst die Beta in den Einstellungen deaktivieren.", "beta_feedback_leave_button": "Du kannst die Beta in den Einstellungen deaktivieren.",
@@ -3398,8 +3396,7 @@
"voice_call_unsupported": "%(senderName)s hat einen Sprachanruf getätigt. (Nicht von diesem Browser unterstützt)" "voice_call_unsupported": "%(senderName)s hat einen Sprachanruf getätigt. (Nicht von diesem Browser unterstützt)"
}, },
"m.file": { "m.file": {
"error_decrypting": "Fehler beim Entschlüsseln des Anhangs", "error_decrypting": "Fehler beim Entschlüsseln des Anhangs"
"error_invalid": "Ungültige Datei"
}, },
"m.image": { "m.image": {
"error": "Kann Bild aufgrund eines Fehlers nicht anzeigen", "error": "Kann Bild aufgrund eines Fehlers nicht anzeigen",
@@ -3740,14 +3737,7 @@
"one_user": "%(displayName)s tippt …", "one_user": "%(displayName)s tippt …",
"two_users": "%(names)s und %(lastPerson)s tippen …" "two_users": "%(names)s und %(lastPerson)s tippen …"
}, },
"undecryptable_tooltip": "Diese Nachricht konnte nicht enschlüsselt werden", "undecryptable_tooltip": "Diese Nachricht konnte nicht enschlüsselt werden"
"url_preview": {
"close": "Vorschau schließen",
"show_n_more": {
"one": "%(count)s andere Vorschau zeigen",
"other": "%(count)s weitere Vorschauen zeigen"
}
}
}, },
"truncated_list_n_more": { "truncated_list_n_more": {
"other": "Und %(count)s weitere …" "other": "Und %(count)s weitere …"
+1 -11
View File
@@ -1217,8 +1217,6 @@
}, },
"labs": { "labs": {
"ask_to_join": "Ενεργοποίηση αίτησης συμμετοχής", "ask_to_join": "Ενεργοποίηση αίτησης συμμετοχής",
"automatic_debug_logs": "Αυτόματη αποστολή αρχείων καταγραφής εντοπισμού σφαλμάτων για οποιοδήποτε σφάλμα",
"automatic_debug_logs_decryption": "Αυτόματη αποστολή αρχείων καταγραφής εντοπισμού σφαλμάτων για σφάλματα αποκρυπτογράφησης",
"beta_feature": "Αυτή είναι μια δυνατότητα beta", "beta_feature": "Αυτή είναι μια δυνατότητα beta",
"beta_feedback_leave_button": "Για να αποχωρήσετε από την έκδοση beta, μεταβείτε στις ρυθμίσεις σας.", "beta_feedback_leave_button": "Για να αποχωρήσετε από την έκδοση beta, μεταβείτε στις ρυθμίσεις σας.",
"bridge_state": "Εμφάνιση πληροφοριών σχετικά με τις γέφυρες στις ρυθμίσεις δωματίου", "bridge_state": "Εμφάνιση πληροφοριών σχετικά με τις γέφυρες στις ρυθμίσεις δωματίου",
@@ -2669,8 +2667,7 @@
"voice_call_unsupported": "Ο %(senderName)s έκανε μια ηχητική κλήση. (δεν υποστηρίζεται από το πρόγραμμα περιήγησης)" "voice_call_unsupported": "Ο %(senderName)s έκανε μια ηχητική κλήση. (δεν υποστηρίζεται από το πρόγραμμα περιήγησης)"
}, },
"m.file": { "m.file": {
"error_decrypting": "Σφάλμα κατά την αποκρυπτογράφηση της επισύναψης", "error_decrypting": "Σφάλμα κατά την αποκρυπτογράφηση της επισύναψης"
"error_invalid": "Μη έγκυρο αρχείο %(extra)s"
}, },
"m.image": { "m.image": {
"error_decrypting": "Σφάλμα κατά την αποκρυπτογράφηση της εικόνας", "error_decrypting": "Σφάλμα κατά την αποκρυπτογράφηση της εικόνας",
@@ -2998,13 +2995,6 @@
}, },
"one_user": "%(displayName)s πληκτρολογεί …", "one_user": "%(displayName)s πληκτρολογεί …",
"two_users": "%(names)s και %(lastPerson)s πληκτρολογούν …" "two_users": "%(names)s και %(lastPerson)s πληκτρολογούν …"
},
"url_preview": {
"close": "Κλείσιμο προεπισκόπησης",
"show_n_more": {
"other": "Εμφάνιση %(count)s άλλων προεπισκοπήσεων",
"one": "Εμφάνιση%(count)s άλλων προεπισκοπήσεων"
}
} }
}, },
"truncated_list_n_more": { "truncated_list_n_more": {
+67 -67
View File
@@ -117,7 +117,7 @@
"show_advanced": "Show advanced", "show_advanced": "Show advanced",
"show_all": "Show all", "show_all": "Show all",
"sign_in": "Sign in", "sign_in": "Sign in",
"sign_out": "Sign out", "sign_out": "Remove this device",
"skip": "Skip", "skip": "Skip",
"start": "Start", "start": "Start",
"start_chat": "Start chat", "start_chat": "Start chat",
@@ -221,11 +221,11 @@
"incorrect_password": "Incorrect password", "incorrect_password": "Incorrect password",
"log_in_new_account": "<a>Log in</a> to your new account.", "log_in_new_account": "<a>Log in</a> to your new account.",
"logout_dialog": { "logout_dialog": {
"description": "Are you sure you want to sign out?", "description": "Are you sure you want to remove this device?",
"megolm_export": "Manually export keys", "megolm_export": "Manually export keys",
"setup_key_backup_title": "You'll lose access to your encrypted messages", "setup_key_backup_title": "You'll lose access to your encrypted messages",
"setup_secure_backup_description_1": "Encrypted messages are secured with end-to-end encryption. Only you and the recipient(s) have the keys to read these messages.", "setup_secure_backup_description_1": "Encrypted messages are secured with end-to-end encryption. Only you and the recipient(s) have the keys to read these messages.",
"setup_secure_backup_description_2": "When you sign out, these keys will be deleted from this device, which means you won't be able to read encrypted messages unless you have the keys for them on your other devices, or backed them up to the server.", "setup_secure_backup_description_2": "When you remove this device you won't be able to read encrypted messages unless you have the keys for them on your other devices, or backed them up to the server.",
"skip_key_backup": "I don't want my encrypted messages" "skip_key_backup": "I don't want my encrypted messages"
}, },
"misconfigured_body": "Ask your %(brand)s admin to check <a>your config</a> for incorrect or duplicate entries.", "misconfigured_body": "Ask your %(brand)s admin to check <a>your config</a> for incorrect or duplicate entries.",
@@ -298,16 +298,16 @@
"registration_username_validation": "Use lowercase letters, numbers, dashes and underscores only", "registration_username_validation": "Use lowercase letters, numbers, dashes and underscores only",
"reset_password": { "reset_password": {
"confirm_new_password": "Confirm new password", "confirm_new_password": "Confirm new password",
"devices_logout_success": "You have been logged out of all devices and will no longer receive push notifications. To re-enable notifications, sign in again on each device.", "devices_logout_success": "All your devices have been removed and will no longer receive push notifications. To re-enable notifications, sign in again on each device.",
"other_devices_logout_warning_1": "Signing out your devices will delete the message encryption keys stored on them, making encrypted chat history unreadable.", "other_devices_logout_warning_1": "Removing your devices will delete the message encryption keys stored on them, making encrypted chat history unreadable.",
"other_devices_logout_warning_2": "If you want to retain access to your chat history in encrypted rooms, set up Key Backup or export your message keys from one of your other devices before proceeding.", "other_devices_logout_warning_2": "If you want to retain access to your chat history in encrypted rooms, get a recovery key or export your message keys from one of your other devices before proceeding.",
"password_not_entered": "A new password must be entered.", "password_not_entered": "A new password must be entered.",
"passwords_mismatch": "New passwords must match each other.", "passwords_mismatch": "New passwords must match each other.",
"rate_limit_error": "Too many attempts in a short time. Wait some time before trying again.", "rate_limit_error": "Too many attempts in a short time. Wait some time before trying again.",
"rate_limit_error_with_time": "Too many attempts in a short time. Retry after %(timeout)s.", "rate_limit_error_with_time": "Too many attempts in a short time. Retry after %(timeout)s.",
"reset_successful": "Your password has been reset.", "reset_successful": "Your password has been reset.",
"return_to_login": "Return to login screen", "return_to_login": "Return to login screen",
"sign_out_other_devices": "Sign out of all devices" "sign_out_other_devices": "Remove other devices"
}, },
"reset_password_action": "Reset password", "reset_password_action": "Reset password",
"reset_password_button": "Forgot password?", "reset_password_button": "Forgot password?",
@@ -330,8 +330,8 @@
"server_picker_title": "Sign into your homeserver", "server_picker_title": "Sign into your homeserver",
"server_picker_title_default": "Server Options", "server_picker_title_default": "Server Options",
"server_picker_title_registration": "Host account on", "server_picker_title_registration": "Host account on",
"session_logged_out_description": "For security, this session has been signed out. Please sign in again.", "session_logged_out_description": "For security, this session has been removed. Please sign in again.",
"session_logged_out_title": "Signed Out", "session_logged_out_title": "Session removed",
"set_email": { "set_email": {
"description": "This will allow you to reset your password and receive notifications.", "description": "This will allow you to reset your password and receive notifications.",
"verification_pending_description": "Please check your email and click on the link it contains. Once this is done, click continue.", "verification_pending_description": "Please check your email and click on the link it contains. Once this is done, click continue.",
@@ -371,8 +371,8 @@
"email_resent": "Resent!", "email_resent": "Resent!",
"fallback_button": "Start authentication", "fallback_button": "Start authentication",
"mas_cross_signing_reset_cta": "Continue to account", "mas_cross_signing_reset_cta": "Continue to account",
"mas_cross_signing_reset_description": "You're about to go to your %(serverName)s account to reset your identity. Once you have completed reset on your account, please return here and click Retry.", "mas_cross_signing_reset_description": "You're about to go to your %(serverName)s account to reset your digital identity. Once you have completed reset on your account, please return here and click Retry.",
"mas_cross_signing_reset_title": "Go to your account to reset your identity", "mas_cross_signing_reset_title": "Go to your account to reset your digital identity",
"msisdn": "A text message has been sent to %(msisdn)s", "msisdn": "A text message has been sent to %(msisdn)s",
"msisdn_token_incorrect": "Token incorrect", "msisdn_token_incorrect": "Token incorrect",
"msisdn_token_prompt": "Please enter the code it contains:", "msisdn_token_prompt": "Please enter the code it contains:",
@@ -774,7 +774,7 @@
"cross_signing_public_keys_on_device_status": "Cross-signing public keys:", "cross_signing_public_keys_on_device_status": "Cross-signing public keys:",
"cross_signing_ready": "Cross-signing is ready for use.", "cross_signing_ready": "Cross-signing is ready for use.",
"cross_signing_status": "Cross-signing status:", "cross_signing_status": "Cross-signing status:",
"cross_signing_untrusted": "Your account has a cross-signing identity in secret storage, but it is not yet trusted by this session.", "cross_signing_untrusted": "Your account has a digital identity in secret storage, but it is not yet trusted by this session.",
"crypto_not_available": "Cryptographic module is not available", "crypto_not_available": "Cryptographic module is not available",
"device_id": "Device ID", "device_id": "Device ID",
"key_backup_active_version": "Active backup version:", "key_backup_active_version": "Active backup version:",
@@ -902,10 +902,10 @@
"user_read_up_to_private_ignore_synthetic": "User read up to (m.read.private;ignoreSynthetic): ", "user_read_up_to_private_ignore_synthetic": "User read up to (m.read.private;ignoreSynthetic): ",
"user_room_membership": "Membership: %(membership)s", "user_room_membership": "Membership: %(membership)s",
"user_verification_status": { "user_verification_status": {
"identity_changed": "Verification status: <E2EIcon /> Unverified, and identity changed", "identity_changed": "Verification status: <E2EIcon /> Unverified, and digital identity changed",
"unverified": "Verification status: <E2EIcon /> Unverified", "unverified": "Verification status: <E2EIcon /> Unverified",
"verified": "Verification status: <E2EIcon /> Verified", "verified": "Verification status: <E2EIcon /> Verified",
"was_verified": "Verification status: <E2EIcon /> Was verified, but identity changed" "was_verified": "Verification status: <E2EIcon /> Was verified, but digital identity changed"
}, },
"users": "Users", "users": "Users",
"value": "Value", "value": "Value",
@@ -971,7 +971,7 @@
"event_shield_reason_unverified_identity": "Encrypted by an unverified user.", "event_shield_reason_unverified_identity": "Encrypted by an unverified user.",
"export_unsupported": "Your browser does not support the required cryptography extensions", "export_unsupported": "Your browser does not support the required cryptography extensions",
"forgot_recovery_key": "Forgot recovery key?", "forgot_recovery_key": "Forgot recovery key?",
"identity_needs_reset_description": "You have to reset your cryptographic identity in order to ensure access to your message history", "identity_needs_reset_description": "You have to reset your digital identity in order to ensure access to your chat history",
"import_invalid_keyfile": "Not a valid %(brand)s keyfile", "import_invalid_keyfile": "Not a valid %(brand)s keyfile",
"import_invalid_passphrase": "Authentication check failed: incorrect password?", "import_invalid_passphrase": "Authentication check failed: incorrect password?",
"key_storage_out_of_sync": "Your key storage is out of sync.", "key_storage_out_of_sync": "Your key storage is out of sync.",
@@ -991,22 +991,22 @@
"title": "New Recovery Method", "title": "New Recovery Method",
"warning": "If you didn't set the new recovery method, an attacker may be trying to access your account. Change your account password and set a new recovery method immediately in Settings." "warning": "If you didn't set the new recovery method, an attacker may be trying to access your account. Change your account password and set a new recovery method immediately in Settings."
}, },
"pinned_identity_changed": "%(displayName)s's (<b>%(userId)s</b>) identity was reset. <a>Learn more</a>", "pinned_identity_changed": "%(displayName)s's (<b>%(userId)s</b>) digital identity was reset. <a>Learn more</a>",
"pinned_identity_changed_no_displayname": "<b>%(userId)s</b>'s identity was reset. <a>Learn more</a>", "pinned_identity_changed_no_displayname": "<b>%(userId)s</b>'s digital identity was reset. <a>Learn more</a>",
"recovery_method_removed": { "recovery_method_removed": {
"description_1": "This session has detected that your Security Phrase and key for Secure Messages have been removed.", "description_1": "This session has detected that your Security Phrase and key for Secure Messages have been removed.",
"description_2": "If you did this accidentally, you can setup Secure Messages on this session which will re-encrypt this session's message history with a new recovery method.", "description_2": "If you did this accidentally, you can setup Secure Messages on this session which will re-encrypt this session's message history with a new recovery method.",
"title": "Recovery Method Removed", "title": "Recovery Method Removed",
"warning": "If you didn't remove the recovery method, an attacker may be trying to access your account. Change your account password and set a new recovery method immediately in Settings." "warning": "If you didn't remove the recovery method, an attacker may be trying to access your account. Change your account password and set a new recovery method immediately in Settings."
}, },
"set_up_recovery": "Set up recovery", "set_up_recovery": "Back up your chats",
"set_up_recovery_toast_description": "Generate a recovery key that can be used to restore your encrypted message history in case you lose access to your devices.", "set_up_recovery_toast_description": "Your chats are automatically backed up with end-to-end encryption. To restore this backup and retain your digital identity when you lose access to all your devices, you will need your recovery key.",
"set_up_toast_title": "Set up Secure Backup", "set_up_toast_title": "Set up Secure Backup",
"setup_secure_backup": { "setup_secure_backup": {
"explainer": "Back up your keys before signing out to avoid losing them." "explainer": "Back up your keys before removing this device to avoid losing them."
}, },
"turn_on_key_storage": "Turn on key storage", "turn_on_key_storage": "Turn on key storage",
"turn_on_key_storage_description": "Store your cryptographic identity and message keys securely on the server. This will allow you to view your message history on any new devices.", "turn_on_key_storage_description": "This will allow you to view your chat history on any new devices and is required for backup of chats and digital identity.",
"udd": { "udd": {
"interactive_verification_button": "Interactively verify by emoji", "interactive_verification_button": "Interactively verify by emoji",
"other_ask_verify_text": "Ask this user to verify their session, or manually verify it below.", "other_ask_verify_text": "Ask this user to verify their session, or manually verify it below.",
@@ -1030,7 +1030,7 @@
"complete_description": "You've successfully verified this user.", "complete_description": "You've successfully verified this user.",
"complete_title": "Verified!", "complete_title": "Verified!",
"confirm_identity_description": "Verify this device to set up secure messaging", "confirm_identity_description": "Verify this device to set up secure messaging",
"confirm_identity_title": "Confirm your identity", "confirm_identity_title": "Confirm your digital identity",
"confirm_the_emojis": "Confirm that the emojis below match those shown on your other device.", "confirm_the_emojis": "Confirm that the emojis below match those shown on your other device.",
"error_starting_description": "We were unable to start a chat with the other user.", "error_starting_description": "We were unable to start a chat with the other user.",
"error_starting_title": "Error starting verification", "error_starting_title": "Error starting verification",
@@ -1114,10 +1114,10 @@
"waiting_other_user": "Waiting for %(displayName)s to verify…" "waiting_other_user": "Waiting for %(displayName)s to verify…"
}, },
"verification_requested_toast_title": "Verification requested", "verification_requested_toast_title": "Verification requested",
"verified_identity_changed": "%(displayName)s's (<b>%(userId)s</b>) identity was reset. <a>Learn more</a>", "verified_identity_changed": "%(displayName)s's (<b>%(userId)s</b>) digital identity was reset. <a>Learn more</a>",
"verified_identity_changed_no_displayname": "<b>%(userId)s</b>'s identity was reset. <a>Learn more</a>", "verified_identity_changed_no_displayname": "<b>%(userId)s</b>'s digital identity was reset. <a>Learn more</a>",
"verify_toast_description": "Other users may not trust it", "verify_toast_description": "As of end of April 2026, unverified devices will not be able to send and receive messages. <a>Learn more</a>",
"verify_toast_title": "Verify this session", "verify_toast_title": "Verify this device",
"withdraw_verification_action": "Withdraw verification" "withdraw_verification_action": "Withdraw verification"
}, },
"error": { "error": {
@@ -1142,15 +1142,15 @@
"non_urgent_echo_failure_toast": "Your server isn't responding to some <a>requests</a>.", "non_urgent_echo_failure_toast": "Your server isn't responding to some <a>requests</a>.",
"resource_limits": "This homeserver has exceeded one of its resource limits.", "resource_limits": "This homeserver has exceeded one of its resource limits.",
"session_restore": { "session_restore": {
"clear_storage_button": "Clear Storage and Sign Out", "clear_storage_button": "Remove this device",
"clear_storage_description": "Sign out and remove encryption keys?", "clear_storage_description": "Remove this device together with its encryption keys?",
"description_1": "We encountered an error trying to restore your previous session.", "description_1": "We encountered an error trying to restore your session.",
"description_2": "If you have previously used a more recent version of %(brand)s, your session may be incompatible with this version. Close this window and return to the more recent version.", "description_2": "If you have previously used a more recent version of %(brand)s, your session may be incompatible with this version. Close this window and return to the more recent version.",
"description_3": "Clearing your browser's storage may fix the problem, but will sign you out and cause any encrypted chat history to become unreadable.", "description_3": "Clearing your browser's storage may fix the problem, but will remove this device and cause any encrypted chat history to become unreadable.",
"title": "Unable to restore session" "title": "Unable to restore session"
}, },
"something_went_wrong": "Something went wrong!", "something_went_wrong": "Something went wrong!",
"storage_evicted_description_1": "Some session data, including encrypted message keys, is missing. Sign out and sign in to fix this, restoring keys from backup.", "storage_evicted_description_1": "Some session data, including encrypted message keys, is missing. Remove this device and sign in again to fix this, restoring keys from backup.",
"storage_evicted_description_2": "Your browser likely removed this data when running low on disk space.", "storage_evicted_description_2": "Your browser likely removed this data when running low on disk space.",
"storage_evicted_title": "Missing session data", "storage_evicted_title": "Missing session data",
"sync": "Unable to connect to Homeserver. Retrying…", "sync": "Unable to connect to Homeserver. Retrying…",
@@ -1572,7 +1572,7 @@
"share_history_on_invite_warning": "This feature is EXPERIMENTAL and not all security precautions are implemented. Do not enable on production accounts.", "share_history_on_invite_warning": "This feature is EXPERIMENTAL and not all security precautions are implemented. Do not enable on production accounts.",
"sliding_sync": "Sliding Sync mode", "sliding_sync": "Sliding Sync mode",
"sliding_sync_description": "Under active development, cannot be disabled. Currently, not compatible with Element Call.", "sliding_sync_description": "Under active development, cannot be disabled. Currently, not compatible with Element Call.",
"sliding_sync_disabled_notice": "Log out and back in to disable", "sliding_sync_disabled_notice": "Sign in again to disable",
"sliding_sync_server_no_support": "Your server lacks support", "sliding_sync_server_no_support": "Your server lacks support",
"under_active_development": "Under active development.", "under_active_development": "Under active development.",
"unrealiable_e2e": "Unreliable in encrypted rooms", "unrealiable_e2e": "Unreliable in encrypted rooms",
@@ -1998,7 +1998,7 @@
"error_join_incompatible_version_1": "Sorry, your homeserver is too old to participate here.", "error_join_incompatible_version_1": "Sorry, your homeserver is too old to participate here.",
"error_join_incompatible_version_2": "Please contact your homeserver administrator.", "error_join_incompatible_version_2": "Please contact your homeserver administrator.",
"error_join_title": "Failed to join", "error_join_title": "Failed to join",
"error_join_unknown": "An unknonw error occured.", "error_join_unknown": "An unknown error occured.",
"error_jump_to_date": "Server returned %(statusCode)s with error code %(errorCode)s", "error_jump_to_date": "Server returned %(statusCode)s with error code %(errorCode)s",
"error_jump_to_date_connection": "A network error occurred while trying to find and jump to the given date. Your homeserver might be down or there was just a temporary problem with your internet connection. Please try again. If this continues, please contact your homeserver administrator.", "error_jump_to_date_connection": "A network error occurred while trying to find and jump to the given date. Your homeserver might be down or there was just a temporary problem with your internet connection. Please try again. If this continues, please contact your homeserver administrator.",
"error_jump_to_date_details": "Error details", "error_jump_to_date_details": "Error details",
@@ -2544,10 +2544,10 @@
"breadcrumb_page": "Reset encryption", "breadcrumb_page": "Reset encryption",
"breadcrumb_second_description": "You will lose any message history that’s stored only on the server", "breadcrumb_second_description": "You will lose any message history that’s stored only on the server",
"breadcrumb_third_description": "You will need to verify all your existing devices and contacts again", "breadcrumb_third_description": "You will need to verify all your existing devices and contacts again",
"breadcrumb_title": "Are you sure you want to reset your identity?", "breadcrumb_title": "Are you sure you want to reset your digital identity?",
"breadcrumb_title_cant_confirm": "You need to reset your identity", "breadcrumb_title_cant_confirm": "You need to reset your digital identity",
"breadcrumb_title_forgot": "Forgot your recovery key? You’ll need to reset your identity.", "breadcrumb_title_forgot": "Forgot your recovery key? You’ll need to reset your digital identity.",
"breadcrumb_title_sync_failed": "Failed to sync key storage. You need to reset your identity.", "breadcrumb_title_sync_failed": "Failed to sync key storage. You need to reset your digital identity.",
"breadcrumb_warning": "Only do this if you believe your account has been compromised.", "breadcrumb_warning": "Only do this if you believe your account has been compromised.",
"details_title": "Encryption details", "details_title": "Encryption details",
"do_not_close_warning": "Do not close this window until the reset is finished", "do_not_close_warning": "Do not close this window until the reset is finished",
@@ -2563,13 +2563,13 @@
"title": "Advanced" "title": "Advanced"
}, },
"confirm_key_storage_off": "Are you sure you want to keep key storage turned off?", "confirm_key_storage_off": "Are you sure you want to keep key storage turned off?",
"confirm_key_storage_off_description": "If you sign out of all your devices you will lose your message history and will need to verify all your existing contacts again. <a>Learn more</a>", "confirm_key_storage_off_description": "If you remove all your devices you will lose your message history and will need to verify all your existing contacts again. <a>Learn more</a>",
"delete_key_storage": { "delete_key_storage": {
"breadcrumb_page": "Delete key storage", "breadcrumb_page": "Delete key storage",
"confirm": "Delete key storage", "confirm": "Delete key storage",
"description": "Deleting key storage will remove your cryptographic identity and message keys from the server and turn off the following security features:", "description": "Deleting key storage will remove your cryptographic identity and message keys from the server and turn off the following security features:",
"list_first": "You will not have encrypted message history on new devices", "list_first": "You will not have encrypted message history on new devices",
"list_second": "You will lose access to your encrypted messages if you are signed out of %(brand)s everywhere", "list_second": "You will lose access to your encrypted messages if you're not signed in to any devices",
"title": "Are you sure you want to turn off key storage and delete it?" "title": "Are you sure you want to turn off key storage and delete it?"
}, },
"device_not_verified_button": "Verify this device", "device_not_verified_button": "Verify this device",
@@ -2578,7 +2578,7 @@
"dialog_title": "<strong>Settings:</strong> Encryption", "dialog_title": "<strong>Settings:</strong> Encryption",
"key_storage": { "key_storage": {
"allow_key_storage": "Allow key storage", "allow_key_storage": "Allow key storage",
"description": "Store your cryptographic identity and message keys securely on the server. This will allow you to view your message history on any new devices. <a>Learn more</a>", "description": "This will allow you to view your chat history on any new devices and is required for backup of chats and digital identity. <a>Learn more</a>",
"title": "Key storage" "title": "Key storage"
}, },
"recovery": { "recovery": {
@@ -2588,14 +2588,14 @@
"change_recovery_key": "Change recovery key", "change_recovery_key": "Change recovery key",
"change_recovery_key_description": "Write down this new recovery key somewhere safe. Then click Continue to confirm the change.", "change_recovery_key_description": "Write down this new recovery key somewhere safe. Then click Continue to confirm the change.",
"change_recovery_key_title": "Change recovery key?", "change_recovery_key_title": "Change recovery key?",
"description": "Recover your cryptographic identity and message history with a recovery key if you’ve lost all your existing devices.", "description": "Your chats are automatically backed up with end-to-end encryption. To restore this backup and retain your digital identity when you lose access to all your devices, you will need your recovery key.",
"enter_key_error": "The recovery key you entered is not correct.", "enter_key_error": "The recovery key you entered is not correct.",
"enter_recovery_key": "Enter recovery key", "enter_recovery_key": "Enter recovery key",
"forgot_recovery_key": "Forgot recovery key?", "forgot_recovery_key": "Forgot recovery key?",
"key_storage_warning": "Your key storage is out of sync. Click one of the buttons below to fix the problem.", "key_storage_warning": "Your key storage is out of sync. Click one of the buttons below to fix the problem.",
"save_key_description": "Do not share this with anyone!", "save_key_description": "Do not share this with anyone!",
"save_key_title": "Recovery key", "save_key_title": "Recovery key",
"set_up_recovery": "Set up recovery", "set_up_recovery": "Get recovery key",
"set_up_recovery_confirm_button": "Finish set up", "set_up_recovery_confirm_button": "Finish set up",
"set_up_recovery_confirm_description": "Enter the recovery key shown on the previous screen to finish setting up recovery.", "set_up_recovery_confirm_description": "Enter the recovery key shown on the previous screen to finish setting up recovery.",
"set_up_recovery_confirm_title": "Enter your recovery key to confirm", "set_up_recovery_confirm_title": "Enter your recovery key to confirm",
@@ -2603,7 +2603,7 @@
"set_up_recovery_save_key_description": "Write down this recovery key somewhere safe, like a password manager, encrypted note, or a physical safe.", "set_up_recovery_save_key_description": "Write down this recovery key somewhere safe, like a password manager, encrypted note, or a physical safe.",
"set_up_recovery_save_key_title": "Save your recovery key somewhere safe", "set_up_recovery_save_key_title": "Save your recovery key somewhere safe",
"set_up_recovery_secondary_description": "After clicking continue, we’ll generate a recovery key for you.", "set_up_recovery_secondary_description": "After clicking continue, we’ll generate a recovery key for you.",
"title": "Recovery" "title": "Backup"
}, },
"title": "Encryption" "title": "Encryption"
}, },
@@ -2893,28 +2893,28 @@
"send_read_receipts_unsupported": "Your server doesn't support disabling sending read receipts.", "send_read_receipts_unsupported": "Your server doesn't support disabling sending read receipts.",
"send_typing_notifications": "Send typing notifications", "send_typing_notifications": "Send typing notifications",
"sessions": { "sessions": {
"best_security_note": "For best security, verify your sessions and sign out from any session that you don't recognize or use anymore.", "best_security_note": "For best security, verify your sessions and remove any session that you don't recognize or use anymore.",
"browser": "Browser", "browser": "Browser",
"confirm_sign_out": { "confirm_sign_out": {
"one": "Confirm signing out this device", "one": "Confirm removing this device",
"other": "Confirm signing out these devices" "other": "Confirm removing these devices"
}, },
"confirm_sign_out_body": { "confirm_sign_out_body": {
"one": "Click the button below to confirm signing out this device.", "one": "Click the button below to confirm removing this device.",
"other": "Click the button below to confirm signing out these devices." "other": "Click the button below to confirm removing these devices."
}, },
"confirm_sign_out_continue": { "confirm_sign_out_continue": {
"one": "Sign out device", "one": "Remove device",
"other": "Sign out devices" "other": "Remove devices"
}, },
"confirm_sign_out_sso": { "confirm_sign_out_sso": {
"one": "Confirm logging out this device by using Single Sign On to prove your identity.", "one": "Confirm removing this device by using Single Sign On to prove your identity.",
"other": "Confirm logging out these devices by using Single Sign On to prove your identity." "other": "Confirm removing these devices by using Single Sign On to prove your identity."
}, },
"current_session": "Current session", "current_session": "Current session",
"desktop_session": "Desktop session", "desktop_session": "Desktop session",
"details_heading": "Session details", "details_heading": "Session details",
"device_unverified_description": "Verify or sign out from this session for best security and reliability.", "device_unverified_description": "Verify or remove this session for best security and reliability.",
"device_unverified_description_current": "Verify your current session for enhanced secure messaging.", "device_unverified_description_current": "Verify your current session for enhanced secure messaging.",
"device_verified_description": "This session is ready for secure messaging.", "device_verified_description": "This session is ready for secure messaging.",
"device_verified_description_current": "Your current session is ready for secure messaging.", "device_verified_description_current": "Your current session is ready for secure messaging.",
@@ -2932,7 +2932,7 @@
"inactive_sessions": "Inactive sessions", "inactive_sessions": "Inactive sessions",
"inactive_sessions_explainer_1": "Inactive sessions are sessions you have not used in some time, but they continue to receive encryption keys.", "inactive_sessions_explainer_1": "Inactive sessions are sessions you have not used in some time, but they continue to receive encryption keys.",
"inactive_sessions_explainer_2": "Removing inactive sessions improves security and performance, and makes it easier for you to identify if a new session is suspicious.", "inactive_sessions_explainer_2": "Removing inactive sessions improves security and performance, and makes it easier for you to identify if a new session is suspicious.",
"inactive_sessions_list_description": "Consider signing out from old sessions (%(inactiveAgeDays)s days or older) you don't use anymore.", "inactive_sessions_list_description": "Consider removing old sessions (%(inactiveAgeDays)s days or older) you don't use anymore.",
"ip": "IP address", "ip": "IP address",
"last_activity": "Last activity", "last_activity": "Last activity",
"manage": "Manage this session", "manage": "Manage this session",
@@ -2963,15 +2963,15 @@
"sign_in_with_qr_button": "Show QR code", "sign_in_with_qr_button": "Show QR code",
"sign_in_with_qr_description": "Use a QR code to sign in to another device and set up secure messaging.", "sign_in_with_qr_description": "Use a QR code to sign in to another device and set up secure messaging.",
"sign_in_with_qr_unsupported": "Not supported by your account provider", "sign_in_with_qr_unsupported": "Not supported by your account provider",
"sign_out": "Sign out of this session", "sign_out": "Remove this session",
"sign_out_all_other_sessions": "Sign out of all other sessions (%(otherSessionsCount)s)", "sign_out_all_other_sessions": "Remove all other sessions (%(otherSessionsCount)s)",
"sign_out_confirm_description": { "sign_out_confirm_description": {
"one": "Are you sure you want to sign out of %(count)s session?", "one": "Are you sure you want to remove %(count)s session?",
"other": "Are you sure you want to sign out of %(count)s sessions?" "other": "Are you sure you want to remove %(count)s sessions?"
}, },
"sign_out_n_sessions": { "sign_out_n_sessions": {
"one": "Sign out of %(count)s session", "one": "Remove %(count)s session",
"other": "Sign out of %(count)s sessions" "other": "Remove %(count)s sessions"
}, },
"title": "Sessions", "title": "Sessions",
"unknown_session": "Unknown session type", "unknown_session": "Unknown session type",
@@ -2980,15 +2980,15 @@
"unverified_session_explainer_2": "You won't be able to participate in rooms where encryption is enabled when using this session.", "unverified_session_explainer_2": "You won't be able to participate in rooms where encryption is enabled when using this session.",
"unverified_session_explainer_3": "For best security and privacy, it is recommended to use Matrix clients that support encryption.", "unverified_session_explainer_3": "For best security and privacy, it is recommended to use Matrix clients that support encryption.",
"unverified_sessions": "Unverified sessions", "unverified_sessions": "Unverified sessions",
"unverified_sessions_explainer_1": "Unverified sessions are sessions that have logged in with your credentials but have not been cross-verified.", "unverified_sessions_explainer_1": "Unverified sessions are sessions that have been signed in with your credentials but have not been confirmed with your digital identity.",
"unverified_sessions_explainer_2": "You should make especially certain that you recognise these sessions as they could represent an unauthorised use of your account.", "unverified_sessions_explainer_2": "You should make especially certain that you recognise these sessions as they could represent an unauthorised use of your account.",
"unverified_sessions_list_description": "Verify your sessions for enhanced secure messaging or sign out from those you don't recognize or use anymore.", "unverified_sessions_list_description": "Verify your sessions for enhanced secure messaging or remove from those you don't recognize or use anymore.",
"url": "URL", "url": "URL",
"verified_session": "Verified session", "verified_session": "Verified session",
"verified_sessions": "Verified sessions", "verified_sessions": "Verified sessions",
"verified_sessions_explainer_1": "Verified sessions are anywhere you are using this account after entering your passphrase or confirming your identity with another verified session.", "verified_sessions_explainer_1": "Verified sessions have been confirmed your digital identity.",
"verified_sessions_explainer_2": "This means that you have all the keys needed to unlock your encrypted messages and confirm to other users that you trust this session.", "verified_sessions_explainer_2": "This means that you have all the keys needed to unlock your encrypted messages and confirm to other users that you trust this session.",
"verified_sessions_list_description": "For best security, sign out from any session that you don't recognize or use anymore.", "verified_sessions_list_description": "For best security, remove any session that you don't recognize or use anymore.",
"verify_session": "Verify session", "verify_session": "Verify session",
"web_session": "Web session" "web_session": "Web session"
}, },
@@ -3157,7 +3157,7 @@
"view": "Views room with given address", "view": "Views room with given address",
"whois": "Displays information about a user" "whois": "Displays information about a user"
}, },
"sliding_sync_legacy_no_longer_supported": "Legacy sliding sync is no longer supported: please log out and back in to enable the new sliding sync flag", "sliding_sync_legacy_no_longer_supported": "Legacy sliding sync is no longer supported: please sign in again to enable the new sliding sync flag",
"space": { "space": {
"add_existing_room_space": { "add_existing_room_space": {
"create": "Want to add a new room instead?", "create": "Want to add a new room instead?",
@@ -3350,7 +3350,7 @@
"creation_summary_dm": "%(creator)s created this DM.", "creation_summary_dm": "%(creator)s created this DM.",
"creation_summary_room": "%(creator)s created and configured the room.", "creation_summary_room": "%(creator)s created and configured the room.",
"decryption_failure": { "decryption_failure": {
"sender_identity_previously_verified": "Sender's verified identity was reset", "sender_identity_previously_verified": "Sender's verified digital identity was reset",
"unable_to_decrypt": "Unable to decrypt message" "unable_to_decrypt": "Unable to decrypt message"
}, },
"disambiguated_profile": "%(displayName)s (%(matrixId)s)", "disambiguated_profile": "%(displayName)s (%(matrixId)s)",
@@ -3812,7 +3812,7 @@
"ban_space_everything": "Ban them from everything I'm able to", "ban_space_everything": "Ban them from everything I'm able to",
"ban_space_specific": "Ban them from specific things I'm able to", "ban_space_specific": "Ban them from specific things I'm able to",
"deactivate_confirm_action": "Deactivate user", "deactivate_confirm_action": "Deactivate user",
"deactivate_confirm_description": "Deactivating this user will log them out and prevent them from logging back in. Additionally, they will leave all the rooms they are in. This action cannot be reversed. Are you sure you want to deactivate this user?", "deactivate_confirm_description": "Deactivating this user will remove their devices and prevent them from logging back in. Additionally, they will leave all the rooms they are in. This action cannot be reversed. Are you sure you want to deactivate this user?",
"deactivate_confirm_title": "Deactivate user?", "deactivate_confirm_title": "Deactivate user?",
"demote_button": "Demote", "demote_button": "Demote",
"demote_self_confirm_description_space": "You will not be able to undo this change as you are demoting yourself, if you are the last privileged user in the space it will be impossible to regain privileges.", "demote_self_confirm_description_space": "You will not be able to undo this change as you are demoting yourself, if you are the last privileged user in the space it will be impossible to regain privileges.",
+1 -9
View File
@@ -2086,8 +2086,7 @@
"voice_call_unsupported": "%(senderName)s ekigis voĉvokon. (mankas subteno en ĉi tiu foliumilo)" "voice_call_unsupported": "%(senderName)s ekigis voĉvokon. (mankas subteno en ĉi tiu foliumilo)"
}, },
"m.file": { "m.file": {
"error_decrypting": "Malĉifro de aldonaĵo eraris", "error_decrypting": "Malĉifro de aldonaĵo eraris"
"error_invalid": "Malvalida dosiero%(extra)s"
}, },
"m.image": { "m.image": {
"error_decrypting": "Malĉifro de bildo eraris", "error_decrypting": "Malĉifro de bildo eraris",
@@ -2352,13 +2351,6 @@
}, },
"one_user": "%(displayName)s tajpas…", "one_user": "%(displayName)s tajpas…",
"two_users": "%(names)s kaj %(lastPerson)s tajpas…" "two_users": "%(names)s kaj %(lastPerson)s tajpas…"
},
"url_preview": {
"close": "Fermi antaŭrigardon",
"show_n_more": {
"one": "Montri %(count)s alian antaŭrigardon",
"other": "Montri %(count)s aliajn antaŭrigardojn"
}
} }
}, },
"truncated_list_n_more": { "truncated_list_n_more": {
+2 -12
View File
@@ -1270,8 +1270,6 @@
"upload_file": "Cargar un archivo" "upload_file": "Cargar un archivo"
}, },
"labs": { "labs": {
"automatic_debug_logs": "Mandar automáticamente los registros de depuración cuando ocurra cualquier error",
"automatic_debug_logs_decryption": "Enviar los registros de depuración automáticamente de fallos al descifrar",
"beta_description": "¿Qué novedades se esperan en %(brand)s? La sección de experimentos es la mejor manera de ver las cosas antes de que se publiquen, probar nuevas funcionalidades y ayudar a mejorarlas antes de su lanzamiento.", "beta_description": "¿Qué novedades se esperan en %(brand)s? La sección de experimentos es la mejor manera de ver las cosas antes de que se publiquen, probar nuevas funcionalidades y ayudar a mejorarlas antes de su lanzamiento.",
"beta_feature": "Esta funcionalidad está en beta", "beta_feature": "Esta funcionalidad está en beta",
"beta_feedback_leave_button": "Para salir de la beta, ve a tus ajustes.", "beta_feedback_leave_button": "Para salir de la beta, ve a tus ajustes.",
@@ -2755,8 +2753,7 @@
"voice_call_unsupported": "%(senderName)s hizo una llamada de voz. (no soportada por este navegador)" "voice_call_unsupported": "%(senderName)s hizo una llamada de voz. (no soportada por este navegador)"
}, },
"m.file": { "m.file": {
"error_decrypting": "Error al descifrar adjunto", "error_decrypting": "Error al descifrar adjunto"
"error_invalid": "Archivo inválido %(extra)s"
}, },
"m.image": { "m.image": {
"error": "No es posible mostrar la imagen debido a un error", "error": "No es posible mostrar la imagen debido a un error",
@@ -3080,14 +3077,7 @@
"one_user": "%(displayName)s está escribiendo…", "one_user": "%(displayName)s está escribiendo…",
"two_users": "%(names)s y %(lastPerson)s están escribiendo…" "two_users": "%(names)s y %(lastPerson)s están escribiendo…"
}, },
"undecryptable_tooltip": "No se ha podido descifrar este mensaje", "undecryptable_tooltip": "No se ha podido descifrar este mensaje"
"url_preview": {
"close": "Cerrar vista previa",
"show_n_more": {
"one": "Ver otras %(count)s vistas previas",
"other": "Ver %(count)s otra vista previa"
}
}
}, },
"truncated_list_n_more": { "truncated_list_n_more": {
"other": "Y %(count)s más…" "other": "Y %(count)s más…"
+2 -12
View File
@@ -1495,8 +1495,6 @@
}, },
"labs": { "labs": {
"ask_to_join": "Võta kasutusele liitumine kasutaja sooviavalduse alusel", "ask_to_join": "Võta kasutusele liitumine kasutaja sooviavalduse alusel",
"automatic_debug_logs": "Iga vea puhul saada silumislogid automaatselt arendajatele",
"automatic_debug_logs_decryption": "Dekrüptimisvigade puhul saada silumislogid automaatselt arendajatele",
"beta_description": "Mida %(brand)s tulevikus teha oskab? Arendusjärgus funktsionaalsuste loendist leiad võimalusi, mis varsti on kõigile saadaval, kuid sa saad neid juba katsetada ning ka mõjutada missuguseks nad lõplikukt kujunevad.", "beta_description": "Mida %(brand)s tulevikus teha oskab? Arendusjärgus funktsionaalsuste loendist leiad võimalusi, mis varsti on kõigile saadaval, kuid sa saad neid juba katsetada ning ka mõjutada missuguseks nad lõplikukt kujunevad.",
"beta_feature": "See on veel katsetamisjärgus funktsionaalsus", "beta_feature": "See on veel katsetamisjärgus funktsionaalsus",
"beta_feedback_leave_button": "Beetaversiooni saad välja lülitada rakenduse seadistustest.", "beta_feedback_leave_button": "Beetaversiooni saad välja lülitada rakenduse seadistustest.",
@@ -3398,8 +3396,7 @@
"voice_call_unsupported": "%(senderName)s alustas häälkõnet. (sellel brauseril puudub niisuguste kõnede tugi)" "voice_call_unsupported": "%(senderName)s alustas häälkõnet. (sellel brauseril puudub niisuguste kõnede tugi)"
}, },
"m.file": { "m.file": {
"error_decrypting": "Viga manuse dekrüptimisel", "error_decrypting": "Viga manuse dekrüptimisel"
"error_invalid": "Vigane fail"
}, },
"m.image": { "m.image": {
"error": "Vea tõttu ei ole võimalik pilti kuvada", "error": "Vea tõttu ei ole võimalik pilti kuvada",
@@ -3740,14 +3737,7 @@
"one_user": "%(displayName)s kirjutab midagi…", "one_user": "%(displayName)s kirjutab midagi…",
"two_users": "%(names)s ja %(lastPerson)s kirjutavad midagi…" "two_users": "%(names)s ja %(lastPerson)s kirjutavad midagi…"
}, },
"undecryptable_tooltip": "Seda sõnumit ei õnnestunud dekrüptida", "undecryptable_tooltip": "Seda sõnumit ei õnnestunud dekrüptida"
"url_preview": {
"close": "Sulge eelvaade",
"show_n_more": {
"other": "Näita %(count)s muud eelvaadet",
"one": "Näita veel %(count)s eelvaadet"
}
}
}, },
"truncated_list_n_more": { "truncated_list_n_more": {
"other": "Ja %(count)s muud..." "other": "Ja %(count)s muud..."
+1 -5
View File
@@ -1803,8 +1803,7 @@
"voice_call_unsupported": "%(senderName)s تماس صوتی برقرار کرد. (توسط این مرورگر پشتیبانی نمی شود)" "voice_call_unsupported": "%(senderName)s تماس صوتی برقرار کرد. (توسط این مرورگر پشتیبانی نمی شود)"
}, },
"m.file": { "m.file": {
"error_decrypting": "خطا در رمزگشایی پیوست", "error_decrypting": "خطا در رمزگشایی پیوست"
"error_invalid": "پرونده نامعتبر%(extra)s"
}, },
"m.image": { "m.image": {
"error_decrypting": "خطا در رمزگشایی تصویر", "error_decrypting": "خطا در رمزگشایی تصویر",
@@ -2065,9 +2064,6 @@
}, },
"one_user": "%(displayName)s در حال نوشتن…", "one_user": "%(displayName)s در حال نوشتن…",
"two_users": "%(names)s و %(lastPerson)s در حال نوشتن…" "two_users": "%(names)s و %(lastPerson)s در حال نوشتن…"
},
"url_preview": {
"close": "بستن پیش نمایش"
} }
}, },
"truncated_list_n_more": { "truncated_list_n_more": {
+2 -12
View File
@@ -1235,8 +1235,6 @@
"upload_file": "Lähetä tiedosto" "upload_file": "Lähetä tiedosto"
}, },
"labs": { "labs": {
"automatic_debug_logs": "Lähetä vianjäljityslokit automaattisesti minkä tahansa virheen tapahtuessa",
"automatic_debug_logs_decryption": "Lähetä vianjäljityslokit automaattisesti salauksen purkuun liittyvien virheiden tapahtuessa",
"beta_description": "Mitä uutta %(brand)s sisältää seuraavaksi? Laboratoriot ovat paras tapa tutustua asioihin aikaisin, testata uusia ominaisuuksia ja auttaa muokkaamaan niitä ennen julkaisua.", "beta_description": "Mitä uutta %(brand)s sisältää seuraavaksi? Laboratoriot ovat paras tapa tutustua asioihin aikaisin, testata uusia ominaisuuksia ja auttaa muokkaamaan niitä ennen julkaisua.",
"beta_feature": "Tämä on beetaominaisuus", "beta_feature": "Tämä on beetaominaisuus",
"beta_feedback_leave_button": "Poistu beetasta asetuksista.", "beta_feedback_leave_button": "Poistu beetasta asetuksista.",
@@ -2855,8 +2853,7 @@
"voice_call_unsupported": "%(senderName)s soitti äänipuhelun. (selaimesi ei tue äänipuheluita)" "voice_call_unsupported": "%(senderName)s soitti äänipuhelun. (selaimesi ei tue äänipuheluita)"
}, },
"m.file": { "m.file": {
"error_decrypting": "Virhe purettaessa liitteen salausta", "error_decrypting": "Virhe purettaessa liitteen salausta"
"error_invalid": "Virheellinen tiedosto"
}, },
"m.image": { "m.image": {
"error": "Kuvan näyttäminen epäonnistui virheen vuoksi", "error": "Kuvan näyttäminen epäonnistui virheen vuoksi",
@@ -3182,14 +3179,7 @@
"one_user": "%(displayName)s kirjoittaa…", "one_user": "%(displayName)s kirjoittaa…",
"two_users": "%(names)s ja %(lastPerson)s kirjoittavat…" "two_users": "%(names)s ja %(lastPerson)s kirjoittavat…"
}, },
"undecryptable_tooltip": "Tämän viestin salausta ei voitu purkaa", "undecryptable_tooltip": "Tämän viestin salausta ei voitu purkaa"
"url_preview": {
"close": "Sulje esikatselu",
"show_n_more": {
"one": "Näytä %(count)s muu esikatselu",
"other": "Näytä %(count)s muuta esikatselua"
}
}
}, },
"truncated_list_n_more": { "truncated_list_n_more": {
"other": "Ja %(count)s muuta..." "other": "Ja %(count)s muuta..."
+95 -92
View File
@@ -117,7 +117,7 @@
"show_advanced": "Afficher les paramètres avancés", "show_advanced": "Afficher les paramètres avancés",
"show_all": "Tout afficher", "show_all": "Tout afficher",
"sign_in": "Se connecter", "sign_in": "Se connecter",
"sign_out": "Se déconnecter", "sign_out": "Supprimer cet appareil",
"skip": "Passer", "skip": "Passer",
"start": "Commencer", "start": "Commencer",
"start_chat": "Commencer une conversation privée", "start_chat": "Commencer une conversation privée",
@@ -221,11 +221,11 @@
"incorrect_password": "Mot de passe incorrect", "incorrect_password": "Mot de passe incorrect",
"log_in_new_account": "<a>Connectez-vous</a> à votre nouveau compte.", "log_in_new_account": "<a>Connectez-vous</a> à votre nouveau compte.",
"logout_dialog": { "logout_dialog": {
"description": "Voulez-vous vraiment vous déconnecter ?", "description": "Êtes-vous sûr de vouloir supprimer cet appareil ?",
"megolm_export": "Exporter manuellement les clés", "megolm_export": "Exporter manuellement les clés",
"setup_key_backup_title": "Vous perdrez l’accès à vos messages chiffrés", "setup_key_backup_title": "Vous perdrez l’accès à vos messages chiffrés",
"setup_secure_backup_description_1": "Les messages chiffrés sont sécurisés avec un chiffrement de bout en bout. Seuls vous et le(s) destinataire(s) ont les clés pour lire ces messages.", "setup_secure_backup_description_1": "Les messages chiffrés sont sécurisés avec un chiffrement de bout en bout. Seuls vous et le(s) destinataire(s) ont les clés pour lire ces messages.",
"setup_secure_backup_description_2": "Quand vous vous déconnectez, ces clés seront supprimées de cet appareil, et vous ne pourrez plus lire les messages chiffrés à moins d’avoir les clés de ces messages sur vos autres appareils, ou de les avoir sauvegardées sur le serveur.", "setup_secure_backup_description_2": "Quand vous supprimez cet appareil, vous ne pourrez plus lire les messages chiffrés à moins d’avoir les clés de ces messages sur vos autres appareils, ou de les avoir sauvegardées sur le serveur.",
"skip_key_backup": "Je ne veux pas de mes messages chiffrés" "skip_key_backup": "Je ne veux pas de mes messages chiffrés"
}, },
"misconfigured_body": "Demandez à votre administrateur %(brand)s de vérifier que <a>votre configuration</a> ne contient pas d’entrées incorrectes ou en double.", "misconfigured_body": "Demandez à votre administrateur %(brand)s de vérifier que <a>votre configuration</a> ne contient pas d’entrées incorrectes ou en double.",
@@ -298,16 +298,16 @@
"registration_username_validation": "Utiliser uniquement des lettres minuscules, chiffres, traits d’union et tirets bas", "registration_username_validation": "Utiliser uniquement des lettres minuscules, chiffres, traits d’union et tirets bas",
"reset_password": { "reset_password": {
"confirm_new_password": "Confirmer le nouveau mot de passe", "confirm_new_password": "Confirmer le nouveau mot de passe",
"devices_logout_success": "Vous avez été déconnecté de tous vos appareils et ne recevrez plus de notification. Pour réactiver les notifications, reconnectez-vous sur chaque appareil.", "devices_logout_success": "Tous vos appareils ont été supprimés et ne recevront plus de notifications push. Pour réactiver les notifications, connectez-vous à nouveau sur chaque appareil.",
"other_devices_logout_warning_1": "La déconnexion de vos appareils va supprimer les clés de chiffrement des messages qu’ils possèdent, rendant l’historique des conversations chiffrées illisible.", "other_devices_logout_warning_1": "La suppession de vos appareils va supprimer les clés de chiffrement des messages qu’ils possèdent, rendant l’historique des discussions chiffrées illisible.",
"other_devices_logout_warning_2": "Si vous voulez garder un accès à votre historique de conversation dans les salons chiffrés, configurez la sauvegarde de clés, ou bien exportez vos clés de messages à partir de l’un de vos autres appareils avant de continuer.", "other_devices_logout_warning_2": "Si vous voulez garder un accès à votre historique de discussion dans les salons chiffrés, configurez la clé de récupération, ou bien exportez vos clés de messages à partir de l’un de vos autres appareils avant de continuer.",
"password_not_entered": "Un nouveau mot de passe doit être saisi.", "password_not_entered": "Un nouveau mot de passe doit être saisi.",
"passwords_mismatch": "Les nouveaux mots de passe doivent être identiques.", "passwords_mismatch": "Les nouveaux mots de passe doivent être identiques.",
"rate_limit_error": "Trop de tentatives consécutives. Attendez un peu avant de réessayer.", "rate_limit_error": "Trop de tentatives consécutives. Attendez un peu avant de réessayer.",
"rate_limit_error_with_time": "Trop de tentatives consécutives. Réessayez après %(timeout)s.", "rate_limit_error_with_time": "Trop de tentatives consécutives. Réessayez après %(timeout)s.",
"reset_successful": "Votre mot de passe a été réinitialisé.", "reset_successful": "Votre mot de passe a été réinitialisé.",
"return_to_login": "Retourner à l’écran de connexion", "return_to_login": "Retourner à l’écran de connexion",
"sign_out_other_devices": "Déconnecter tous les appareils" "sign_out_other_devices": "Supprimer tous les appareils"
}, },
"reset_password_action": "Réinitialiser le mot de passe", "reset_password_action": "Réinitialiser le mot de passe",
"reset_password_button": "Mot de passe oublié ?", "reset_password_button": "Mot de passe oublié ?",
@@ -331,7 +331,7 @@
"server_picker_title_default": "Options serveur", "server_picker_title_default": "Options serveur",
"server_picker_title_registration": "Héberger le compte sur", "server_picker_title_registration": "Héberger le compte sur",
"session_logged_out_description": "Par mesure de sécurité, la session a expiré. Merci de vous authentifier à nouveau.", "session_logged_out_description": "Par mesure de sécurité, la session a expiré. Merci de vous authentifier à nouveau.",
"session_logged_out_title": "Déconnecté", "session_logged_out_title": "Session supprimée",
"set_email": { "set_email": {
"description": "Ceci vous permettra de réinitialiser votre mot de passe et de recevoir des notifications.", "description": "Ceci vous permettra de réinitialiser votre mot de passe et de recevoir des notifications.",
"verification_pending_description": "Veuillez consulter vos e-mails et cliquer sur le lien que vous avez reçu. Puis cliquez sur continuer.", "verification_pending_description": "Veuillez consulter vos e-mails et cliquer sur le lien que vous avez reçu. Puis cliquez sur continuer.",
@@ -371,8 +371,8 @@
"email_resent": "Ré-envoyé !", "email_resent": "Ré-envoyé !",
"fallback_button": "Commencer l’authentification", "fallback_button": "Commencer l’authentification",
"mas_cross_signing_reset_cta": "Accédez à votre compte", "mas_cross_signing_reset_cta": "Accédez à votre compte",
"mas_cross_signing_reset_description": "Réinitialisez votre identité par l’intermédiaire de votre fournisseur de compte, puis revenez et cliquez sur « Réessayer ».", "mas_cross_signing_reset_description": "Vous êtes sur le point d'aller sur votre compte %(serverName)s pour réinitialiser votre identité numérique. Une fois la réinitialisation terminée, revenez ici et cliquez sur Réessayer.",
"mas_cross_signing_reset_title": "Accédez à votre compte pour réinitialiser votre identité", "mas_cross_signing_reset_title": "Accédez à votre compte pour réinitialiser votre identité numérique.",
"msisdn": "Un message a été envoyé à %(msisdn)s", "msisdn": "Un message a été envoyé à %(msisdn)s",
"msisdn_token_incorrect": "Jeton incorrect", "msisdn_token_incorrect": "Jeton incorrect",
"msisdn_token_prompt": "Merci de saisir le code qu’il contient :", "msisdn_token_prompt": "Merci de saisir le code qu’il contient :",
@@ -694,7 +694,7 @@
"creating_rooms": "Création des salons…", "creating_rooms": "Création des salons…",
"done_action": "Accéder à mon espace", "done_action": "Accéder à mon espace",
"done_action_first_room": "Rejoindre mon premier salon", "done_action_first_room": "Rejoindre mon premier salon",
"explainer": "Les espaces sont une nouvelle manière de regrouper les salons et les personnes. Quel type d’espace voulez-vous créer ? Vous pouvez changer ceci plus tard.", "explainer": "Les espaces permettent d'organiser et de découvrir des salons. Quel type d'espace souhaitez-vous créer ?",
"failed_create_initial_rooms": "Échec de la création des salons initiaux de l’espace", "failed_create_initial_rooms": "Échec de la création des salons initiaux de l’espace",
"failed_invite_users": "Échec de l’invitation des utilisateurs suivants à votre espace : %(csvUsers)s", "failed_invite_users": "Échec de l’invitation des utilisateurs suivants à votre espace : %(csvUsers)s",
"invite_teammates_by_username": "Inviter par nom d’utilisateur", "invite_teammates_by_username": "Inviter par nom d’utilisateur",
@@ -705,20 +705,20 @@
"name_required": "Veuillez renseigner un nom pour l’espace", "name_required": "Veuillez renseigner un nom pour l’espace",
"personal_space": "Seulement moi", "personal_space": "Seulement moi",
"personal_space_description": "Un espace privé pour organiser vos salons", "personal_space_description": "Un espace privé pour organiser vos salons",
"private_description": "Sur invitation, idéal pour vous-même ou les équipes", "private_description": "Sur invitation, pour vous-même ou les équipes",
"private_heading": "Votre espace privé", "private_heading": "Votre espace privé",
"private_only_heading": "Votre Espace", "private_only_heading": "Votre Espace",
"private_personal_description": "Assurez-vous que les bonnes personnes aient accès à %(name)s", "private_personal_description": "Assurez-vous que les bonnes personnes aient accès à %(name)s",
"private_personal_heading": "Avec qui travaillez-vous ?", "private_personal_heading": "Avec qui travaillez-vous ?",
"private_space": "Moi et mon équipe", "private_space": "Moi et mon équipe",
"private_space_description": "Un espace privé pour vous et votre équipe", "private_space_description": "Un espace privé pour vous et votre équipe",
"public_description": "Espace ouvert à tous, idéal pour les communautés", "public_description": "Tout le monde peut rejoindre, idéal pour les communautés",
"public_heading": "Votre espace public", "public_heading": "Votre espace public",
"search_public_button": "Rechercher des espaces publics", "search_public_button": "Rechercher des espaces publics",
"setup_rooms_community_description": "Créons un salon pour chacun d’entre eux.", "setup_rooms_community_description": "Commençons par créer quelques salons.",
"setup_rooms_community_heading": "De quoi voulez-vous discuter dans %(spaceName)s ?", "setup_rooms_community_heading": "De quoi voulez-vous discuter dans %(spaceName)s ?",
"setup_rooms_description": "Vous pourrez en ajouter plus tard, y compris certains déjà existant.", "setup_rooms_description": "Vous pourrez ajouter ultérieurement d'autres salons à cet espace, y compris des salons existants.",
"setup_rooms_private_description": "Nous allons créer un salon pour chacun d’entre eux.", "setup_rooms_private_description": "Commencez par créer quelques salons.",
"setup_rooms_private_heading": "Sur quels projets travaille votre équipe ?", "setup_rooms_private_heading": "Sur quels projets travaille votre équipe ?",
"share_description": "Vous êtes seul pour l’instant, ce sera plus agréable avec de la compagnie.", "share_description": "Vous êtes seul pour l’instant, ce sera plus agréable avec de la compagnie.",
"share_heading": "Partager %(name)s", "share_heading": "Partager %(name)s",
@@ -731,7 +731,7 @@
"subspace_join_rule_invite_only": "Espace privé (uniquement sur invitation)", "subspace_join_rule_invite_only": "Espace privé (uniquement sur invitation)",
"subspace_join_rule_label": "Visibilité de l’espace", "subspace_join_rule_label": "Visibilité de l’espace",
"subspace_join_rule_public_description": "Quiconque pourra trouver et rejoindre cet espace, pas seulement les membres de <SpaceName/>.", "subspace_join_rule_public_description": "Quiconque pourra trouver et rejoindre cet espace, pas seulement les membres de <SpaceName/>.",
"subspace_join_rule_restricted_description": "Tous les membres de <SpaceName/> pourront trouver et venir." "subspace_join_rule_restricted_description": "Tout le monde dans <SpaceName/> peut rejoindre."
}, },
"credits": { "credits": {
"default_cover_photo": "La <photo>photo d’illustration par défaut</photo> est © <author>Jesús Roncero</author> utilisée selon les termes <terms>CC-BY-SA 4.0</terms>.", "default_cover_photo": "La <photo>photo d’illustration par défaut</photo> est © <author>Jesús Roncero</author> utilisée selon les termes <terms>CC-BY-SA 4.0</terms>.",
@@ -751,6 +751,7 @@
"category_other": "Autre", "category_other": "Autre",
"category_room": "Salon", "category_room": "Salon",
"caution_colon": "Attention :", "caution_colon": "Attention :",
"checking_sticky_events_support": "Vérification de la prise en charge des événements persistants...",
"client_versions": "Versions des clients", "client_versions": "Versions des clients",
"crypto": { "crypto": {
"4s_public_key_in_account_data": "dans les données du compte", "4s_public_key_in_account_data": "dans les données du compte",
@@ -773,7 +774,7 @@
"cross_signing_public_keys_on_device_status": "Clés publiques de signature croisée :", "cross_signing_public_keys_on_device_status": "Clés publiques de signature croisée :",
"cross_signing_ready": "La signature croisée est prête à être utilisée.", "cross_signing_ready": "La signature croisée est prête à être utilisée.",
"cross_signing_status": "État de la signature croisée :", "cross_signing_status": "État de la signature croisée :",
"cross_signing_untrusted": "Votre compte a une identité de signature croisée dans le coffre secret, mais cette session ne lui fait pas encore confiance.", "cross_signing_untrusted": "Votre compte possède une identité numérique stockée dans le coffre secret mais celle-ci n'est pas encore approuvée par cette session.",
"crypto_not_available": "Le module cryptographique n'est pas disponible", "crypto_not_available": "Le module cryptographique n'est pas disponible",
"device_id": "Identifiant de l'appareil", "device_id": "Identifiant de l'appareil",
"key_backup_active_version": "Version de sauvegarde active :", "key_backup_active_version": "Version de sauvegarde active :",
@@ -809,13 +810,18 @@
"edit_setting": "Modifier le paramètre", "edit_setting": "Modifier le paramètre",
"edit_values": "Modifier les valeurs", "edit_values": "Modifier les valeurs",
"empty_string": "<chaîne de caractères vide>", "empty_string": "<chaîne de caractères vide>",
"error_sticky_duration_must_be_a_number": "stickyDuration doit être un nombre",
"error_sticky_duration_out_of_range": "stickyDuration doit être compris entre 0 et 36000 millisecondes (1h)",
"event_content": "Contenu de l’évènement", "event_content": "Contenu de l’évènement",
"event_id": "Identifiant d’événement : %(eventId)s", "event_id": "Identifiant d’événement : %(eventId)s",
"event_sent": "Évènement envoyé !", "event_sent": "Évènement envoyé !",
"event_type": "Type d’évènement", "event_type": "Type d’évènement",
"expired": "Expiré",
"expires_in": "Expire dans",
"explore_account_data": "Parcourir les données du compte", "explore_account_data": "Parcourir les données du compte",
"explore_room_account_data": "Parcourir les données de compte du salon", "explore_room_account_data": "Parcourir les données de compte du salon",
"explore_room_state": "Parcourir l’état du salon", "explore_room_state": "Parcourir l’état du salon",
"explore_sticky_state": "Explorer l'état persistant",
"failed_to_find_widget": "Erreur lors de la récupération de ce widget.", "failed_to_find_widget": "Erreur lors de la récupération de ce widget.",
"failed_to_load": "Échec du chargement.", "failed_to_load": "Échec du chargement.",
"failed_to_save": "Échec lors de la sauvegarde des paramètres.", "failed_to_save": "Échec lors de la sauvegarde des paramètres.",
@@ -829,6 +835,7 @@
"main_timeline": "Historique principal", "main_timeline": "Historique principal",
"manual_device_verification": "Vérification manuelle de l'appareil", "manual_device_verification": "Vérification manuelle de l'appareil",
"no_receipt_found": "Aucun accusé disponible", "no_receipt_found": "Aucun accusé disponible",
"no_sticky_events": "Il n'y a pas d'événements persistants dans ce salon.",
"notification_state": "L’état des notifications est <strong>%(notificationState)s</strong>", "notification_state": "L’état des notifications est <strong>%(notificationState)s</strong>",
"notifications_debug": "Débogage des notifications", "notifications_debug": "Débogage des notifications",
"number_of_users": "Nombre d’utilisateurs", "number_of_users": "Nombre d’utilisateurs",
@@ -855,6 +862,7 @@
"send_custom_account_data_event": "Envoyer des événements personnalisés de données du compte", "send_custom_account_data_event": "Envoyer des événements personnalisés de données du compte",
"send_custom_room_account_data_event": "Envoyer des événements personnalisés de données du compte du salon", "send_custom_room_account_data_event": "Envoyer des événements personnalisés de données du compte du salon",
"send_custom_state_event": "Envoyer des événements d’état personnalisés", "send_custom_state_event": "Envoyer des événements d’état personnalisés",
"send_custom_sticky_event": "Envoyer un événement personnalisé persistant",
"send_custom_timeline_event": "Envoyer des événements d’historique personnalisé", "send_custom_timeline_event": "Envoyer des événements d’historique personnalisé",
"server_info": "Infos du serveur", "server_info": "Infos du serveur",
"server_versions": "Versions des serveurs", "server_versions": "Versions des serveurs",
@@ -874,6 +882,9 @@
"other": "<%(count)s espaces>" "other": "<%(count)s espaces>"
}, },
"state_key": "Clé d’état", "state_key": "Clé d’état",
"sticky_duration": "Durée de persistance (ms)",
"sticky_events_not_supported": "Votre serveur d'accueil ne prend pas encore en charge les événements persistants.",
"sticky_key": "Clé persistante",
"thread_root_id": "ID du fil de discussion racine : %(threadRootId)s", "thread_root_id": "ID du fil de discussion racine : %(threadRootId)s",
"threads_timeline": "Historique des fils de discussion", "threads_timeline": "Historique des fils de discussion",
"title": "Outils de développement", "title": "Outils de développement",
@@ -891,10 +902,10 @@
"user_read_up_to_private_ignore_synthetic": "L’utilisateur a lu jusqu’à (m.read.private;ignoreSynthetic) : ", "user_read_up_to_private_ignore_synthetic": "L’utilisateur a lu jusqu’à (m.read.private;ignoreSynthetic) : ",
"user_room_membership": "Adhésion : %(membership)s", "user_room_membership": "Adhésion : %(membership)s",
"user_verification_status": { "user_verification_status": {
"identity_changed": "Statut de la vérification : <E2EIcon /> Non vérifié, et identité modifiée", "identity_changed": "Statut de la vérification : <E2EIcon /> Non vérifié, et identité numérique changée",
"unverified": "Statut de la vérification vérification : <E2EIcon /> Non vérifié", "unverified": "Statut de la vérification vérification : <E2EIcon /> Non vérifié",
"verified": "Statut de la vérification : <E2EIcon /> Vérifié", "verified": "Statut de la vérification : <E2EIcon /> Vérifié",
"was_verified": "Statut de la vérifcation vérification : <E2EIcon /> Etait vérifié, mais l'identité a changé." "was_verified": "Statut de la vérifcation vérification : <E2EIcon /> Etait vérifié, mais l'identité numérique a changé."
}, },
"users": "Utilisateurs", "users": "Utilisateurs",
"value": "Valeur", "value": "Valeur",
@@ -960,7 +971,7 @@
"event_shield_reason_unverified_identity": "Chiffré par un utilisateur non vérifié.", "event_shield_reason_unverified_identity": "Chiffré par un utilisateur non vérifié.",
"export_unsupported": "Votre navigateur ne prend pas en charge les extensions cryptographiques nécessaires", "export_unsupported": "Votre navigateur ne prend pas en charge les extensions cryptographiques nécessaires",
"forgot_recovery_key": "Clé de récupération oubliée ?", "forgot_recovery_key": "Clé de récupération oubliée ?",
"identity_needs_reset_description": "Vous devez réinitialiser votre identité cryptographique pour garantir l'accès à votre historique de messages.", "identity_needs_reset_description": "Vous devez réinitialiser votre identité numérique pour garantir l'accès à votre historique de discussions.",
"import_invalid_keyfile": "Fichier de clé %(brand)s non valide", "import_invalid_keyfile": "Fichier de clé %(brand)s non valide",
"import_invalid_passphrase": "Erreur d’authentification : mot de passe incorrect ?", "import_invalid_passphrase": "Erreur d’authentification : mot de passe incorrect ?",
"key_storage_out_of_sync": "Le stockage de vos clés n'est pas synchronisé.", "key_storage_out_of_sync": "Le stockage de vos clés n'est pas synchronisé.",
@@ -980,22 +991,22 @@
"title": "Nouvelle méthode de récupération", "title": "Nouvelle méthode de récupération",
"warning": "Si vous n’avez pas activé de nouvelle méthode de récupération, un attaquant essaye peut-être d’accéder à votre compte. Changez immédiatement le mot de passe de votre compte et configurez une nouvelle méthode de récupération dans les paramètres." "warning": "Si vous n’avez pas activé de nouvelle méthode de récupération, un attaquant essaye peut-être d’accéder à votre compte. Changez immédiatement le mot de passe de votre compte et configurez une nouvelle méthode de récupération dans les paramètres."
}, },
"pinned_identity_changed": "L'identité de %(displayName)s (<b>%(userId)s</b>) semble avoir changé. <a>En savoir plus</a>", "pinned_identity_changed": "L'identité numérique de %(displayName)s (<b>%(userId)s</b> a été réinitialisée.<a>En savoir plus</a>",
"pinned_identity_changed_no_displayname": "<b>%(userId)s</b>semble avoir changé d'identité. <a>En savoir plus</a>", "pinned_identity_changed_no_displayname": "L' identité numérique de <b>%(userId)s</b> a été réinitialisée.<a>En savoir plus</a>",
"recovery_method_removed": { "recovery_method_removed": {
"description_1": "Cette session a détecté que votre phrase de sécurité et clé de sécurité pour les messages sécurisés ont été supprimées.", "description_1": "Cette session a détecté que votre phrase de sécurité et clé de sécurité pour les messages sécurisés ont été supprimées.",
"description_2": "Si vous l’avez fait accidentellement, vous pouvez configurer les messages sécurisés sur cette session ce qui re-chiffrera l’historique des messages de cette session avec une nouvelle méthode de récupération.", "description_2": "Si vous l’avez fait accidentellement, vous pouvez configurer les messages sécurisés sur cette session ce qui re-chiffrera l’historique des messages de cette session avec une nouvelle méthode de récupération.",
"title": "Méthode de récupération supprimée", "title": "Méthode de récupération supprimée",
"warning": "Si vous n’avez pas supprimé la méthode de récupération, un attaquant peut être en train d’essayer d’accéder à votre compte. Modifiez le mot de passe de votre compte et configurez une nouvelle méthode de récupération dans les réglages." "warning": "Si vous n’avez pas supprimé la méthode de récupération, un attaquant peut être en train d’essayer d’accéder à votre compte. Modifiez le mot de passe de votre compte et configurez une nouvelle méthode de récupération dans les réglages."
}, },
"set_up_recovery": "Configurer la récupération", "set_up_recovery": "Sauvegardez vos discussions",
"set_up_recovery_toast_description": "Générez une clé de récupération qui peut être utilisée pour restaurer l'historique de vos messages chiffrés au cas où vous perdriez l'accès à vos appareils.", "set_up_recovery_toast_description": "Vos discussions sont automatiquement sauvegardées grâce à un chiffrement de bout en bout. Pour restaurer cette sauvegarde et conserver votre identité numérique en cas de perte d'accès à tous vos appareils, vous aurez besoin de votre clé de récupération.",
"set_up_toast_title": "Configurer la sauvegarde sécurisée", "set_up_toast_title": "Configurer la sauvegarde sécurisée",
"setup_secure_backup": { "setup_secure_backup": {
"explainer": "Sauvegardez vos clés avant de vous déconnecter pour éviter de les perdre." "explainer": "Sauvegardez vos clés avant de supprimer cet appareil pour éviter de les perdre."
}, },
"turn_on_key_storage": "Activer le stockage des clés", "turn_on_key_storage": "Activer le stockage des clés",
"turn_on_key_storage_description": "Stockez votre identité cryptographique et vos clés de message en toute sécurité sur le serveur. Cela vous permettra de consulter l'historique de vos messages sur tous les nouveaux appareils.", "turn_on_key_storage_description": "Cela vous permettra de consulter votre historique de conversations sur tous vos nouveaux appareils et est nécessaire pour la sauvegarde de vos discussions et de votre identité numérique.",
"udd": { "udd": {
"interactive_verification_button": "Vérifier de façon interactive avec des émojis", "interactive_verification_button": "Vérifier de façon interactive avec des émojis",
"other_ask_verify_text": "Demandez à cet utilisateur de vérifier sa session, ou vérifiez-la manuellement ci-dessous.", "other_ask_verify_text": "Demandez à cet utilisateur de vérifier sa session, ou vérifiez-la manuellement ci-dessous.",
@@ -1019,7 +1030,7 @@
"complete_description": "Vous avez vérifié cet utilisateur avec succès.", "complete_description": "Vous avez vérifié cet utilisateur avec succès.",
"complete_title": "Vérifié !", "complete_title": "Vérifié !",
"confirm_identity_description": "Vérifier cet appareil pour configurer votre messagerie sécurisée", "confirm_identity_description": "Vérifier cet appareil pour configurer votre messagerie sécurisée",
"confirm_identity_title": "Confirmez votre identité", "confirm_identity_title": "Confirmez votre identité numérique",
"confirm_the_emojis": "Confirmez que les émojis ci-dessous correspondent à ceux affichés sur votre autre appareil.", "confirm_the_emojis": "Confirmez que les émojis ci-dessous correspondent à ceux affichés sur votre autre appareil.",
"error_starting_description": "Nous n’avons pas pu démarrer une conversation avec l’autre utilisateur.", "error_starting_description": "Nous n’avons pas pu démarrer une conversation avec l’autre utilisateur.",
"error_starting_title": "Erreur en démarrant la vérification", "error_starting_title": "Erreur en démarrant la vérification",
@@ -1103,10 +1114,10 @@
"waiting_other_user": "En attente de la vérification de %(displayName)s…" "waiting_other_user": "En attente de la vérification de %(displayName)s…"
}, },
"verification_requested_toast_title": "Vérification requise", "verification_requested_toast_title": "Vérification requise",
"verified_identity_changed": "L'identité de %(displayName)s (<b>%(userId)s</b>) a été réinitialisée. <a>En savoir plus</a>", "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>", "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": "D’autres utilisateurs pourraient ne pas lui faire confiance", "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_title": "Vérifier cette session", "verify_toast_title": "Vérifiez cet appareil",
"withdraw_verification_action": "Révoquer la vérification" "withdraw_verification_action": "Révoquer la vérification"
}, },
"error": { "error": {
@@ -1131,15 +1142,15 @@
"non_urgent_echo_failure_toast": "Votre serveur ne répond pas à certaines <a>requêtes</a>.", "non_urgent_echo_failure_toast": "Votre serveur ne répond pas à certaines <a>requêtes</a>.",
"resource_limits": "Ce serveur d’accueil a dépassé une de ses limites de ressources.", "resource_limits": "Ce serveur d’accueil a dépassé une de ses limites de ressources.",
"session_restore": { "session_restore": {
"clear_storage_button": "Effacer le stockage et se déconnecter", "clear_storage_button": "Supprimer cet appareil",
"clear_storage_description": "Se déconnecter et supprimer les clés de chiffrement ?", "clear_storage_description": "Supprimer cet appareil avec ses les clés de chiffrement ?",
"description_1": "Une erreur est survenue lors de la restauration de la dernière session.", "description_1": "Une erreur est survenue lors de la restauration de la session.",
"description_2": "Si vous avez utilisé une version plus récente de %(brand)s précédemment, votre session risque d’être incompatible avec cette version. Fermez cette fenêtre et retournez à la version plus récente.", "description_2": "Si vous avez utilisé une version plus récente de %(brand)s précédemment, votre session risque d’être incompatible avec cette version. Fermez cette fenêtre et retournez à la version plus récente.",
"description_3": "Effacer le stockage de votre navigateur peut résoudre le problème. Ceci vous déconnectera et tous les historiques de conversations chiffrées seront illisibles.", "description_3": "Effacer le stockage de votre navigateur peut résoudre le problème. Ceci supprimera cet appareil et les historiques de conversations chiffrées seront illisibles.",
"title": "Impossible de restaurer la session" "title": "Impossible de restaurer la session"
}, },
"something_went_wrong": "Quelque chose s’est mal déroulé !", "something_went_wrong": "Quelque chose s’est mal déroulé !",
"storage_evicted_description_1": "Des données de la session, dont les clés des messages chiffrés, sont manquantes. Déconnectez-vous et reconnectez-vous pour régler ce problème, en restaurant les clés depuis la sauvegarde.", "storage_evicted_description_1": "Certaines données de session, notamment les clés de chiffrement des messages, sont manquantes. Supprimez cet appareil et reconnectez-vous pour résoudre ce problème et restaurer les clés à partir de votre sauvegarde.",
"storage_evicted_description_2": "Votre navigateur a sûrement supprimé ces données car il restait peu d’espace sur le disque.", "storage_evicted_description_2": "Votre navigateur a sûrement supprimé ces données car il restait peu d’espace sur le disque.",
"storage_evicted_title": "Données de la session manquantes", "storage_evicted_title": "Données de la session manquantes",
"sync": "Impossible de se connecter au serveur d’accueil. Reconnexion…", "sync": "Impossible de se connecter au serveur d’accueil. Reconnexion…",
@@ -1495,8 +1506,6 @@
}, },
"labs": { "labs": {
"ask_to_join": "Activer demander à venir", "ask_to_join": "Activer demander à venir",
"automatic_debug_logs": "Envoyer automatiquement les journaux de débogage en cas d’erreur",
"automatic_debug_logs_decryption": "Envoyer automatiquement les journaux de débogage en cas d’erreurs de déchiffrement",
"beta_description": "Que va-t-il se passer dans %(brand)s ? La section expérimentale est la meilleure manière d’avoir des choses en avance, tester les nouvelles fonctionnalités et d’aider à les affiner avant leur lancement officiel.", "beta_description": "Que va-t-il se passer dans %(brand)s ? La section expérimentale est la meilleure manière d’avoir des choses en avance, tester les nouvelles fonctionnalités et d’aider à les affiner avant leur lancement officiel.",
"beta_feature": "Il s'agit d'une fonctionnalité bêta", "beta_feature": "Il s'agit d'une fonctionnalité bêta",
"beta_feedback_leave_button": "Pour quitter la bêta, consultez les paramètres.", "beta_feedback_leave_button": "Pour quitter la bêta, consultez les paramètres.",
@@ -1563,7 +1572,7 @@
"share_history_on_invite_warning": "Cette fonctionnalité est EXPÉRIMENTALE et toutes les précautions de sécurité ne sont pas mises en œuvre. Ne l'activez pas sur les comptes en production.", "share_history_on_invite_warning": "Cette fonctionnalité est EXPÉRIMENTALE et toutes les précautions de sécurité ne sont pas mises en œuvre. Ne l'activez pas sur les comptes en production.",
"sliding_sync": "Mode synchronisation progressive", "sliding_sync": "Mode synchronisation progressive",
"sliding_sync_description": "En cours de développement, ne peut être désactivé.", "sliding_sync_description": "En cours de développement, ne peut être désactivé.",
"sliding_sync_disabled_notice": "Déconnectez et revenez pour désactiver", "sliding_sync_disabled_notice": "Connectez-vous à nouveau pour désactiver",
"sliding_sync_server_no_support": "Votre serveur n'est pas pris en charge", "sliding_sync_server_no_support": "Votre serveur n'est pas pris en charge",
"under_active_development": "En cours de développement.", "under_active_development": "En cours de développement.",
"unrealiable_e2e": "Non fiable dans les salons chiffrés", "unrealiable_e2e": "Non fiable dans les salons chiffrés",
@@ -1988,6 +1997,7 @@
"error_join_incompatible_version_1": "Désolé, votre serveur d'accueil est trop vieux pour participer ici.", "error_join_incompatible_version_1": "Désolé, votre serveur d'accueil est trop vieux pour participer ici.",
"error_join_incompatible_version_2": "Veuillez contacter l’administrateur de votre serveur d’accueil.", "error_join_incompatible_version_2": "Veuillez contacter l’administrateur de votre serveur d’accueil.",
"error_join_title": "Impossible de rejoindre", "error_join_title": "Impossible de rejoindre",
"error_join_unknown": "Une erreur inconnue s'est produite",
"error_jump_to_date": "Le serveur a renvoyé %(statusCode)s avec le code d’erreur %(errorCode)s", "error_jump_to_date": "Le serveur a renvoyé %(statusCode)s avec le code d’erreur %(errorCode)s",
"error_jump_to_date_connection": "Une erreur réseau s’est produite en tentant de chercher et d’aller à la date choisie. Votre serveur d’accueil est peut-être hors-ligne, ou bien c’est un problème temporaire avec connexion Internet. Veuillez réessayer. Si cela persiste, veuillez contacter l’administrateur de votre serveur d’accueil.", "error_jump_to_date_connection": "Une erreur réseau s’est produite en tentant de chercher et d’aller à la date choisie. Votre serveur d’accueil est peut-être hors-ligne, ou bien c’est un problème temporaire avec connexion Internet. Veuillez réessayer. Si cela persiste, veuillez contacter l’administrateur de votre serveur d’accueil.",
"error_jump_to_date_details": "Détails de l’erreur", "error_jump_to_date_details": "Détails de l’erreur",
@@ -2357,21 +2367,22 @@
"join_rule_invite_description": "Seules les personnes invitées peuvent venir.", "join_rule_invite_description": "Seules les personnes invitées peuvent venir.",
"join_rule_knock": "Demander à venir", "join_rule_knock": "Demander à venir",
"join_rule_knock_description": "Les personnes ne peuvent pas venir tant que l’accès ne leur est pas autorisé.", "join_rule_knock_description": "Les personnes ne peuvent pas venir tant que l’accès ne leur est pas autorisé.",
"join_rule_public": "Quiconque",
"join_rule_public_description": "Tout le monde peut joindre", "join_rule_public_description": "Tout le monde peut joindre",
"join_rule_restricted": "Membres de l’espace", "join_rule_restricted": "Membres de l’espace",
"join_rule_restricted_description": "Tout le monde dans un espace peut trouver et venir. <a>Modifier les accès des espaces ici.</a>", "join_rule_restricted_description": "Toute personne se trouvant dans un espace autorisé peut rejoindre sans invitation.<a> Gérer les espaces</a>",
"join_rule_restricted_description_active_space": "Quiconque dans <spaceName/> peut trouver et rejoindre. Vous pouvez également choisir d’autres espaces.", "join_rule_restricted_description_active_space": "N'importe qui dans<spaceName/> peut joindre.",
"join_rule_restricted_description_prompt": "Tout le monde dans un espace peut trouver et venir. Vous pouvez sélectionner plusieurs espaces.", "join_rule_restricted_description_prompt": "Toute personne présente dans un espace peut rejoindre.",
"join_rule_restricted_description_spaces": "Espaces avec accès", "join_rule_restricted_description_spaces": "Espaces autorisés",
"join_rule_restricted_dialog_description": "Choisir quels espaces peuvent accéder à ce salon. Si un espace est sélectionné, ses membres pourront trouver et rejoindre <RoomName/>.", "join_rule_restricted_dialog_description": "Espaces où les membres peuvent rejoindre <RoomName/> sans invitation.",
"join_rule_restricted_dialog_empty_warning": "Vous allez supprimer tous les espaces. L’accès se fera sur invitation uniquement par défaut", "join_rule_restricted_dialog_empty_warning": "Vous supprimez tous les espaces autorisés. L'accès sera par défaut limité aux invitations.",
"join_rule_restricted_dialog_filter_placeholder": "Rechercher des espaces", "join_rule_restricted_dialog_filter_placeholder": "Rechercher des espaces",
"join_rule_restricted_dialog_heading_known": "Autres espaces que vous connaissez", "join_rule_restricted_dialog_heading_known": "Vos espaces qui ne contiennent pas ce salon",
"join_rule_restricted_dialog_heading_other": "Autres espaces ou salons que vous pourriez ne pas connaître", "join_rule_restricted_dialog_heading_other": "Autres espaces dont vous n'êtes pas membre",
"join_rule_restricted_dialog_heading_room": "Les espaces connus qui contiennent ce salon", "join_rule_restricted_dialog_heading_room": "Vos espaces qui contiennent ce salon",
"join_rule_restricted_dialog_heading_space": "Les espaces connus qui contiennent cet espace", "join_rule_restricted_dialog_heading_space": "Les espaces connus qui contiennent cet espace",
"join_rule_restricted_dialog_heading_unknown": "Ces autres administrateurs du salon en font probablement partie.", "join_rule_restricted_dialog_heading_unknown": "Ces autres administrateurs du salon en font probablement partie.",
"join_rule_restricted_dialog_title": "Sélectionner des espaces", "join_rule_restricted_dialog_title": "Gérer les espaces",
"join_rule_restricted_n_more": { "join_rule_restricted_n_more": {
"other": "& %(count)s de plus", "other": "& %(count)s de plus",
"one": "& %(count)s autres" "one": "& %(count)s autres"
@@ -2404,17 +2415,17 @@
"upload_avatar_label": "Envoyer un avatar", "upload_avatar_label": "Envoyer un avatar",
"visibility": { "visibility": {
"alias_section": "Adresse", "alias_section": "Adresse",
"error_failed_save": "Échec de la mise à jour de la visibilité de cet espace", "error_failed_save": "Impossible de mettre à jour les paramètres de cet espace.",
"error_update_guest_access": "Échec de la mise à jour de l’accès visiteur de cet espace", "error_update_guest_access": "Échec de la mise à jour de l’accès visiteur de cet espace",
"error_update_history_visibility": "Échec de la mise à jour de la visibilité de l’historique pour cet espace", "error_update_history_visibility": "Échec de la mise à jour de la visibilité de l’historique pour cet espace",
"guest_access_disabled": "Vous n'êtes pas autorisé à modifier les accès invités.", "guest_access_disabled": "Vous n'êtes pas autorisé à modifier les accès invités.",
"guest_access_explainer": "Les visiteurs peuvent rejoindre un espace sans disposer d’un compte. Ceci est utile pour les espaces publiques.", "guest_access_explainer": "Les visiteurs peuvent rejoindre un espace sans disposer d’un compte. Ceci est utile pour les espaces publiques.",
"guest_access_label": "Activer l’accès visiteur", "guest_access_label": "Activer l’accès visiteur",
"history_visibility_anyone_space": "Aperçu de l’espace", "history_visibility_anyone_space": "Aperçu de l'espace",
"history_visibility_anyone_space_description": "Permettre aux personnes d’avoir un aperçu de l’espace avant de le rejoindre.", "history_visibility_anyone_space_description": "Permettre aux personnes d’avoir un aperçu de l’espace avant de le rejoindre.",
"history_visibility_anyone_space_disabled": "Vous n'êtes pas autorisé à modifier la visibilité de l'historique.", "history_visibility_anyone_space_disabled": "Vous n'êtes pas autorisé à modifier la visibilité de l'historique.",
"history_visibility_anyone_space_recommendation": "Recommandé pour les espaces publics.", "history_visibility_anyone_space_recommendation": "Recommandé pour les espaces publics.",
"title": "Visibilité" "title": "Sécurité et confidentialité"
}, },
"voip": { "voip": {
"call_type_section": "Type d’appel", "call_type_section": "Type d’appel",
@@ -2532,10 +2543,10 @@
"breadcrumb_page": "Réinitialiser le chiffrement", "breadcrumb_page": "Réinitialiser le chiffrement",
"breadcrumb_second_description": "Vous perdrez l’historique de vos messages", "breadcrumb_second_description": "Vous perdrez l’historique de vos messages",
"breadcrumb_third_description": "Vous devrez vérifier à nouveau tous vos appareils et tous vos contacts", "breadcrumb_third_description": "Vous devrez vérifier à nouveau tous vos appareils et tous vos contacts",
"breadcrumb_title": "Êtes-vous sûr de vouloir réinitialiser votre identité ?", "breadcrumb_title": "Êtes-vous sûr de vouloir réinitialiser votre identité numérique ?",
"breadcrumb_title_cant_confirm": "Vous devez réinitialiser votre identité", "breadcrumb_title_cant_confirm": "Vous devez réinitialiser votre identité numérique",
"breadcrumb_title_forgot": "Vous avez oublié votre clé de récupération ? Vous devez réinitialiser votre identité.", "breadcrumb_title_forgot": "Vous avez oublié votre clé de récupération ? Vous devez réinitialiser votre identité numérique.",
"breadcrumb_title_sync_failed": "Impossible de synchroniser le stockage des clés. Vous devez réinitialiser votre identité.", "breadcrumb_title_sync_failed": "Impossible de synchroniser le stockage des clés. Vous devez réinitialiser votre identité numérique.",
"breadcrumb_warning": "Ne faites cela que si vous pensez que votre compte a été compromis.", "breadcrumb_warning": "Ne faites cela que si vous pensez que votre compte a été compromis.",
"details_title": "Détails du chiffrement", "details_title": "Détails du chiffrement",
"do_not_close_warning": "Ne fermez pas cette fenêtre tant que la réinitialisation n'est pas terminée", "do_not_close_warning": "Ne fermez pas cette fenêtre tant que la réinitialisation n'est pas terminée",
@@ -2551,13 +2562,13 @@
"title": "Avancé" "title": "Avancé"
}, },
"confirm_key_storage_off": "Êtes-vous sûr de vouloir désactiver le stockage des clés ?", "confirm_key_storage_off": "Êtes-vous sûr de vouloir désactiver le stockage des clés ?",
"confirm_key_storage_off_description": "Si vous vous déconnectez de tous vos appareils, vous perdrez l'historique de vos messages et vous devrez vérifier à nouveau tous vos contacts existants. <a>En savoir plus </a>", "confirm_key_storage_off_description": "Si vous supprimez tous vos appareils, vous perdrez l'historique de vos messages et devrez vérifier à nouveau tous vos contacts existants.<a>En savoir plus</a>",
"delete_key_storage": { "delete_key_storage": {
"breadcrumb_page": "Désactiver la sauvegarde", "breadcrumb_page": "Désactiver la sauvegarde",
"confirm": "Désactiver la sauvegarde", "confirm": "Désactiver la sauvegarde",
"description": "Désactiver la sauvegarde supprimera votre clé de récupération actuelle et désactivera d’autres mesures de sécurité. Dans ce cas :", "description": "Désactiver la sauvegarde supprimera votre clé de récupération actuelle et désactivera d’autres mesures de sécurité. Dans ce cas :",
"list_first": "Pas d’accès à l’historique des discussions chiffrées sur vos nouveaux appareils", "list_first": "Pas d’accès à l’historique des discussions chiffrées sur vos nouveaux appareils",
"list_second": "Vous perdrez l'accès à vos messages chiffrés si vous êtes déconnecté de %(brand)s sur tout vos appareils", "list_second": "Vous perdrez l'accès à vos messages chiffrés si vous n'êtes connecté à aucun appareil.",
"title": "Êtes-vous certain de vouloir désactiver la sauvegarde ?" "title": "Êtes-vous certain de vouloir désactiver la sauvegarde ?"
}, },
"device_not_verified_button": "Vérifiez cet appareil", "device_not_verified_button": "Vérifiez cet appareil",
@@ -2566,7 +2577,7 @@
"dialog_title": "<strong>Paramètres : </strong> Chiffrement", "dialog_title": "<strong>Paramètres : </strong> Chiffrement",
"key_storage": { "key_storage": {
"allow_key_storage": "Autoriser le stockage des clés", "allow_key_storage": "Autoriser le stockage des clés",
"description": "Stockez votre identité cryptographique et vos clés de message en toute sécurité sur le serveur. Cela vous permettra de consulter l'historique de vos messages sur tous les nouveaux appareils. <a>En savoir plus</a>", "description": "Cela vous permettra de consulter votre historique de discussions sur tous vos nouveaux appareils. Nécessaire pour la sauvegarde de vos discussions et de votre identité numérique.<a>En savoir plus</a>",
"title": "Stockage des clés" "title": "Stockage des clés"
}, },
"recovery": { "recovery": {
@@ -2576,14 +2587,14 @@
"change_recovery_key": "Changer la clé de récupération", "change_recovery_key": "Changer la clé de récupération",
"change_recovery_key_description": "Notez cette nouvelle clé de récupération dans un endroit sûr. Cliquez ensuite sur Continuer pour confirmer la modification.", "change_recovery_key_description": "Notez cette nouvelle clé de récupération dans un endroit sûr. Cliquez ensuite sur Continuer pour confirmer la modification.",
"change_recovery_key_title": "Changer la clé de récupération ?", "change_recovery_key_title": "Changer la clé de récupération ?",
"description": "Récupérez votre identité cryptographique et l'historique de vos messages à l'aide d'une clé de récupération si vous avez perdu tous vos appareils existants.", "description": "Vos discussions sont automatiquement sauvegardées grâce à un chiffrement de bout en bout. Pour restaurer cette sauvegarde et conserver votre identité numérique en cas de perte d'accès à tous vos appareils, vous aurez besoin de votre clé de récupération.",
"enter_key_error": "La clé de récupération que vous avez saisie est incorrecte.", "enter_key_error": "La clé de récupération que vous avez saisie est incorrecte.",
"enter_recovery_key": "Saisir la clé de récupération", "enter_recovery_key": "Saisir la clé de récupération",
"forgot_recovery_key": "Clé de récupération oubliée ?", "forgot_recovery_key": "Clé de récupération oubliée ?",
"key_storage_warning": "Le stockage de vos clés n'est pas synchronisé. Cliquez sur l'un des boutons ci-dessous pour résoudre le problème.", "key_storage_warning": "Le stockage de vos clés n'est pas synchronisé. Cliquez sur l'un des boutons ci-dessous pour résoudre le problème.",
"save_key_description": "Ne partagez cela avec personne !", "save_key_description": "Ne partagez cela avec personne !",
"save_key_title": "Clé de récupération", "save_key_title": "Clé de récupération",
"set_up_recovery": "Configurer la sauvegarde", "set_up_recovery": "Obtenir la clé de récupération",
"set_up_recovery_confirm_button": "Terminer la configuration", "set_up_recovery_confirm_button": "Terminer la configuration",
"set_up_recovery_confirm_description": "Saisissez la clé de récupération affichée sur l’écran précédent pour terminer la configuration de la récupération.", "set_up_recovery_confirm_description": "Saisissez la clé de récupération affichée sur l’écran précédent pour terminer la configuration de la récupération.",
"set_up_recovery_confirm_title": "Saisissez votre clé de récupération pour confirmer", "set_up_recovery_confirm_title": "Saisissez votre clé de récupération pour confirmer",
@@ -2591,7 +2602,7 @@
"set_up_recovery_save_key_description": "Recopier cette clé de récupération dans un endroit sûr, comme un gestionnaire de mots de passe, une note chiffrée ou un coffre-fort physique.", "set_up_recovery_save_key_description": "Recopier cette clé de récupération dans un endroit sûr, comme un gestionnaire de mots de passe, une note chiffrée ou un coffre-fort physique.",
"set_up_recovery_save_key_title": "Enregistrez votre clé de récupération dans un endroit sûr", "set_up_recovery_save_key_title": "Enregistrez votre clé de récupération dans un endroit sûr",
"set_up_recovery_secondary_description": "Après avoir cliqué sur continuer, nous allons générer une clé de récupération pour vous.", "set_up_recovery_secondary_description": "Après avoir cliqué sur continuer, nous allons générer une clé de récupération pour vous.",
"title": "Récupération" "title": "Sauvegarde"
}, },
"title": "Chiffrement" "title": "Chiffrement"
}, },
@@ -2881,28 +2892,28 @@
"send_read_receipts_unsupported": "Votre serveur ne supporte pas la désactivation de l’envoi des accusés de réception.", "send_read_receipts_unsupported": "Votre serveur ne supporte pas la désactivation de l’envoi des accusés de réception.",
"send_typing_notifications": "Envoyer des notifications de saisie", "send_typing_notifications": "Envoyer des notifications de saisie",
"sessions": { "sessions": {
"best_security_note": "Pour une sécurité optimale, vérifiez vos sessions et déconnectez-vous de toute session que vous ne reconnaissez pas ou que vous n’utilisez plus.", "best_security_note": "Pour une sécurité optimale, vérifiez vos sessions et supprimez toutes sessions que vous ne reconnaissez pas ou que vous n’utilisez plus.",
"browser": "Navigateur", "browser": "Navigateur",
"confirm_sign_out": { "confirm_sign_out": {
"one": "Confirmer la déconnexion de cet appareil", "one": "Confirmer la suppression de cet appareil",
"other": "Confirmer la déconnexion de ces appareils" "other": "Confirmer la suppression de ces appareils"
}, },
"confirm_sign_out_body": { "confirm_sign_out_body": {
"one": "Cliquer sur le bouton ci-dessous pour confirmer la déconnexion de cet appareil.", "one": "Cliquez sur le bouton ci-dessous pour confirmer la suppression de cet appareil.",
"other": "Cliquer sur le bouton ci-dessous pour confirmer la déconnexion de ces appareils." "other": "Cliquez sur le bouton ci-dessous pour confirmer la suppression de ces périphériques."
}, },
"confirm_sign_out_continue": { "confirm_sign_out_continue": {
"one": "Déconnecter l’appareil", "one": "Supprimer l'appareil",
"other": "Déconnecter les appareils" "other": "Supprimer les appareils"
}, },
"confirm_sign_out_sso": { "confirm_sign_out_sso": {
"one": "Confirmez la déconnexion de cet appareil en utilisant l’authentification unique pour prouver votre identité.", "one": "Confirmez la suppression de cet appareil en utilisant l'Authentification Unique pour prouver votre identitée.",
"other": "Confirmez la déconnexion de ces appareils en utilisant l’authentification unique pour prouver votre identité." "other": "Confirmez la suppression de ces appareils en utilisant l'Authentification Unique pour prouver votre identitée."
}, },
"current_session": "Cette session", "current_session": "Cette session",
"desktop_session": "Session de bureau", "desktop_session": "Session de bureau",
"details_heading": "Détails de session", "details_heading": "Détails de session",
"device_unverified_description": "Vérifiez ou déconnectez cette session pour une meilleure sécurité et fiabilité.", "device_unverified_description": "Vérifiez ou supprimez cette session pour une meilleure sécurité et fiabilité.",
"device_unverified_description_current": "Vérifiez cette session pour renforcer la sécurité de votre messagerie.", "device_unverified_description_current": "Vérifiez cette session pour renforcer la sécurité de votre messagerie.",
"device_verified_description": "Cette session est prête pour l’envoi de messages sécurisés.", "device_verified_description": "Cette session est prête pour l’envoi de messages sécurisés.",
"device_verified_description_current": "Votre session actuelle est prête pour une messagerie sécurisée.", "device_verified_description_current": "Votre session actuelle est prête pour une messagerie sécurisée.",
@@ -2951,11 +2962,11 @@
"sign_in_with_qr_button": "Afficher le QR code", "sign_in_with_qr_button": "Afficher le QR code",
"sign_in_with_qr_description": "Utilisez un code QR pour vous connecter à un autre appareil et configurer votre messagerie sécurisée.", "sign_in_with_qr_description": "Utilisez un code QR pour vous connecter à un autre appareil et configurer votre messagerie sécurisée.",
"sign_in_with_qr_unsupported": "Non pris en charge par votre fournisseur de compte", "sign_in_with_qr_unsupported": "Non pris en charge par votre fournisseur de compte",
"sign_out": "Se déconnecter de cette session", "sign_out": "Supprimer cette session",
"sign_out_all_other_sessions": "Déconnecter toutes les autres sessions (%(otherSessionsCount)s)", "sign_out_all_other_sessions": "Supprimer toutes les autres sessions (%(otherSessionsCount)s )",
"sign_out_confirm_description": { "sign_out_confirm_description": {
"one": "Voulez-vous vraiment déconnecter %(count)s session ?", "one": "Voulez-vous vraiment supprimer %(count)s session ?",
"other": "Voulez-vous vraiment déconnecter %(count)s de vos sessions ?" "other": "Voulez-vous vraiment supprimer %(count)s sessions ?"
}, },
"sign_out_n_sessions": { "sign_out_n_sessions": {
"one": "Déconnecter %(count)s session", "one": "Déconnecter %(count)s session",
@@ -2968,15 +2979,15 @@
"unverified_session_explainer_2": "Vous ne pourrez pas participer aux salons qui ont activé le chiffrement en utilisant cette session.", "unverified_session_explainer_2": "Vous ne pourrez pas participer aux salons qui ont activé le chiffrement en utilisant cette session.",
"unverified_session_explainer_3": "Pour de meilleures sécurité et confidentialité, il est recommandé d’utiliser des clients Matrix qui prennent en charge le chiffrement.", "unverified_session_explainer_3": "Pour de meilleures sécurité et confidentialité, il est recommandé d’utiliser des clients Matrix qui prennent en charge le chiffrement.",
"unverified_sessions": "Sessions non vérifiées", "unverified_sessions": "Sessions non vérifiées",
"unverified_sessions_explainer_1": "Les sessions non vérifiées se sont identifiées avec vos identifiants mais n’ont pas fait de vérification croisée.", "unverified_sessions_explainer_1": "Les sessions non vérifiées sont des sessions pour lesquelles vous vous êtes connecté avec vos identifiants, mais qui n'ont pas été confirmées avec votre identité numérique.",
"unverified_sessions_explainer_2": "Vous devriez vous tout particulièrement vous assurer que vous connaissez ces sessions, car elles peuvent représenter un usage frauduleux de votre compte.", "unverified_sessions_explainer_2": "Vous devriez vous tout particulièrement vous assurer que vous connaissez ces sessions, car elles peuvent représenter un usage frauduleux de votre compte.",
"unverified_sessions_list_description": "Vérifiez vos sessions pour améliorer la sécurité de votre messagerie, ou déconnectez celles que vous ne connaissez pas ou n’utilisez plus.", "unverified_sessions_list_description": "Vérifiez vos sessions pour améliorer la sécurité de votre messagerie, ou déconnectez celles que vous ne connaissez pas ou n’utilisez plus.",
"url": "URL", "url": "URL",
"verified_session": "Session vérifiée", "verified_session": "Session vérifiée",
"verified_sessions": "Sessions vérifiées", "verified_sessions": "Sessions vérifiées",
"verified_sessions_explainer_1": "Les sessions vérifiées sont toutes celles qui utilisent ce compte après avoir saisie la phrase de sécurité ou confirmé votre identité à l’aide d’une autre session vérifiée.", "verified_sessions_explainer_1": "Les sessions vérifiées ont confirmé votre identité numérique.",
"verified_sessions_explainer_2": "Cela veut dire qu’elles disposent de toutes les clés nécessaires pour lire les messages chiffrés, et confirment aux autres utilisateur que vous faites confiance à cette session.", "verified_sessions_explainer_2": "Cela veut dire qu’elles disposent de toutes les clés nécessaires pour lire les messages chiffrés, et confirment aux autres utilisateur que vous faites confiance à cette session.",
"verified_sessions_list_description": "Pour une meilleure sécurité, déconnectez toutes les sessions que vous ne connaissez pas ou que vous n’utilisez plus.", "verified_sessions_list_description": "Pour une meilleure sécurité, supprimez toutes les sessions que vous ne connaissez pas ou que vous n’utilisez plus.",
"verify_session": "Vérifier la session", "verify_session": "Vérifier la session",
"web_session": "session internet" "web_session": "session internet"
}, },
@@ -3145,7 +3156,7 @@
"view": "Affiche le salon avec cette adresse", "view": "Affiche le salon avec cette adresse",
"whois": "Affiche des informations à propos de l’utilisateur" "whois": "Affiche des informations à propos de l’utilisateur"
}, },
"sliding_sync_legacy_no_longer_supported": "L'ancienne fonctionnalité Sliding Sync n'est plus prise en charge : veuillez vous déconnecter puis vous reconnecter pour activer la nouvelle fonctionnalité Sliding Sync", "sliding_sync_legacy_no_longer_supported": "L'ancienne fonctionnalité Sliding Sync n'est plus prise en charge : veuillez vous déconnecter puis vous reconnecter pour activer la nouvelle version de la fonctionnalité Sliding Sync",
"space": { "space": {
"add_existing_room_space": { "add_existing_room_space": {
"create": "Voulez-vous plutôt ajouter un nouveau salon ?", "create": "Voulez-vous plutôt ajouter un nouveau salon ?",
@@ -3338,7 +3349,7 @@
"creation_summary_dm": "%(creator)s a créé cette conversation privée.", "creation_summary_dm": "%(creator)s a créé cette conversation privée.",
"creation_summary_room": "%(creator)s a créé et configuré le salon.", "creation_summary_room": "%(creator)s a créé et configuré le salon.",
"decryption_failure": { "decryption_failure": {
"sender_identity_previously_verified": "L'identité vérifiée de l'expéditeur a changé", "sender_identity_previously_verified": "L'identité numérique vérifiée de l'expéditeur a été réinitialisée.",
"unable_to_decrypt": "Impossible de déchiffrer le message" "unable_to_decrypt": "Impossible de déchiffrer le message"
}, },
"disambiguated_profile": "%(displayName)s (%(matrixId)s)", "disambiguated_profile": "%(displayName)s (%(matrixId)s)",
@@ -3398,8 +3409,7 @@
"voice_call_unsupported": "%(senderName)s a passé un appel audio. (non pris en charge par ce navigateur)" "voice_call_unsupported": "%(senderName)s a passé un appel audio. (non pris en charge par ce navigateur)"
}, },
"m.file": { "m.file": {
"error_decrypting": "Erreur lors du déchiffrement de la pièce jointe", "error_decrypting": "Erreur lors du déchiffrement de la pièce jointe"
"error_invalid": "Fichier invalide"
}, },
"m.image": { "m.image": {
"error": "Impossible d’afficher l’image à cause d’une erreur", "error": "Impossible d’afficher l’image à cause d’une erreur",
@@ -3740,14 +3750,7 @@
"one_user": "%(displayName)s est en train d'écrire…", "one_user": "%(displayName)s est en train d'écrire…",
"two_users": "%(names)s et %(lastPerson)s sont en train d’écrire…" "two_users": "%(names)s et %(lastPerson)s sont en train d’écrire…"
}, },
"undecryptable_tooltip": "Ce message n’a pas pu être déchiffré", "undecryptable_tooltip": "Ce message n’a pas pu être déchiffré"
"url_preview": {
"close": "Fermer l’aperçu",
"show_n_more": {
"one": "Afficher %(count)s autre aperçu",
"other": "Afficher %(count)s autres aperçus"
}
}
}, },
"truncated_list_n_more": { "truncated_list_n_more": {
"other": "Et %(count)s autres…" "other": "Et %(count)s autres…"
@@ -3806,7 +3809,7 @@
"ban_space_everything": "Les bannir de partout où j’ai le droit de le faire", "ban_space_everything": "Les bannir de partout où j’ai le droit de le faire",
"ban_space_specific": "Les bannir de certains endroits où j’ai le droit de le faire", "ban_space_specific": "Les bannir de certains endroits où j’ai le droit de le faire",
"deactivate_confirm_action": "Désactiver l’utilisateur", "deactivate_confirm_action": "Désactiver l’utilisateur",
"deactivate_confirm_description": "Désactiver cet utilisateur le déconnectera et l’empêchera de se reconnecter. De plus, il quittera tous les salons qu’il a rejoints. Cette action ne peut pas être annulée. Voulez-vous vraiment désactiver cet utilisateur ?", "deactivate_confirm_description": "La désactivation de cet utilisateur entraînera la suppression de ses appareils et l\"empêchera de se reconnecter. De plus, il quittera tous les salons auxquels il participe. Cette action est irréversible. Êtes-vous sûr de vouloir désactiver cet utilisateur ?",
"deactivate_confirm_title": "Désactiver l’utilisateur ?", "deactivate_confirm_title": "Désactiver l’utilisateur ?",
"demote_button": "Rétrograder", "demote_button": "Rétrograder",
"demote_self_confirm_description_space": "Vous ne pourrez pas annuler ce changement puisque vous vous rétrogradez. Si vous êtes le dernier utilisateur a privilèges de cet espace, il deviendra impossible d’en reprendre contrôle.", "demote_self_confirm_description_space": "Vous ne pourrez pas annuler ce changement puisque vous vous rétrogradez. Si vous êtes le dernier utilisateur a privilèges de cet espace, il deviendra impossible d’en reprendre contrôle.",
+1 -11
View File
@@ -1088,8 +1088,6 @@
"upload_file": "Subir ficheiro" "upload_file": "Subir ficheiro"
}, },
"labs": { "labs": {
"automatic_debug_logs": "Enviar automáticamente rexistros de depuración para calquera fallo",
"automatic_debug_logs_decryption": "Envía automáticamente rexistro de depuración se hai erros no cifrado",
"beta_feature": "Esta é unha característica beta", "beta_feature": "Esta é unha característica beta",
"beta_feedback_leave_button": "Para saír da beta, vai aos axustes.", "beta_feedback_leave_button": "Para saír da beta, vai aos axustes.",
"beta_feedback_title": "Informe sobre %(featureName)s Beta", "beta_feedback_title": "Informe sobre %(featureName)s Beta",
@@ -2423,8 +2421,7 @@
"voice_call_unsupported": "%(senderName)s fixo unha chamada de voz. (non soportado neste navegador)" "voice_call_unsupported": "%(senderName)s fixo unha chamada de voz. (non soportado neste navegador)"
}, },
"m.file": { "m.file": {
"error_decrypting": "Fallo descifrando o anexo", "error_decrypting": "Fallo descifrando o anexo"
"error_invalid": "Ficheiro non válido %(extra)s"
}, },
"m.image": { "m.image": {
"error_decrypting": "Fallo ao descifrar a imaxe", "error_decrypting": "Fallo ao descifrar a imaxe",
@@ -2742,13 +2739,6 @@
}, },
"one_user": "%(displayName)s está escribindo…", "one_user": "%(displayName)s está escribindo…",
"two_users": "%(names)s e %(lastPerson)s están escribindo…" "two_users": "%(names)s e %(lastPerson)s están escribindo…"
},
"url_preview": {
"close": "Pechar vista previa",
"show_n_more": {
"one": "Mostrar %(count)s outra vista previa",
"other": "Mostrar outras %(count)s vistas previas"
}
} }
}, },
"truncated_list_n_more": { "truncated_list_n_more": {
+1 -5
View File
@@ -1971,8 +1971,7 @@
"voice_call_unsupported": "%(senderName)s התחיל שיחה קולית. (אינו נתמך בדפדפן זה)" "voice_call_unsupported": "%(senderName)s התחיל שיחה קולית. (אינו נתמך בדפדפן זה)"
}, },
"m.file": { "m.file": {
"error_decrypting": "שגיאה בפענוח קבצים מצורפים", "error_decrypting": "שגיאה בפענוח קבצים מצורפים"
"error_invalid": "קובץ לא תקין %(extra)s"
}, },
"m.image": { "m.image": {
"error_decrypting": "שגיאה בפענוח הודעה", "error_decrypting": "שגיאה בפענוח הודעה",
@@ -2239,9 +2238,6 @@
}, },
"one_user": "%(displayName)s כותב…", "one_user": "%(displayName)s כותב…",
"two_users": "%(names)s ו%(lastPerson)s כותבים…" "two_users": "%(names)s ו%(lastPerson)s כותבים…"
},
"url_preview": {
"close": "סגור תצוגה מקדימה"
} }
}, },
"truncated_list_n_more": { "truncated_list_n_more": {
+2 -13
View File
@@ -1508,8 +1508,6 @@
}, },
"labs": { "labs": {
"ask_to_join": "Omogući traženje pridruživanja", "ask_to_join": "Omogući traženje pridruživanja",
"automatic_debug_logs": "Automatsko slanje zapisnika o svakoj pogrešci",
"automatic_debug_logs_decryption": "Automatsko slanje zapisnika o otklanjanju pogrešaka dešifriranja",
"beta_description": "Što je sljedeće za %(brand)s? Labs su najbolji način da među prvima isprobate novosti, testirate nove značajke i pomognete ih oblikovati prije nego što službeno postanu dostupne.", "beta_description": "Što je sljedeće za %(brand)s? Labs su najbolji način da među prvima isprobate novosti, testirate nove značajke i pomognete ih oblikovati prije nego što službeno postanu dostupne.",
"beta_feature": "Ovo je beta značajka", "beta_feature": "Ovo je beta značajka",
"beta_feedback_leave_button": "Da biste napustili beta inačicu, idite na postavke.", "beta_feedback_leave_button": "Da biste napustili beta inačicu, idite na postavke.",
@@ -3442,8 +3440,7 @@
"voice_call_unsupported": "%(senderName)s uputio/la je glasovni poziv. (Ne podržava ovaj preglednik.)" "voice_call_unsupported": "%(senderName)s uputio/la je glasovni poziv. (Ne podržava ovaj preglednik.)"
}, },
"m.file": { "m.file": {
"error_decrypting": "Pogreška pri dešifriranju privitka", "error_decrypting": "Pogreška pri dešifriranju privitka"
"error_invalid": "Nevažeća datoteka"
}, },
"m.image": { "m.image": {
"error": "Nije moguće prikazati sliku zbog pogreške", "error": "Nije moguće prikazati sliku zbog pogreške",
@@ -3821,15 +3818,7 @@
"one_user": "%(displayName)s tipka…", "one_user": "%(displayName)s tipka…",
"two_users": "%(names)s i %(lastPerson)s tipkaju…" "two_users": "%(names)s i %(lastPerson)s tipkaju…"
}, },
"undecryptable_tooltip": "Ova se poruka nije mogla dešifrirati", "undecryptable_tooltip": "Ova se poruka nije mogla dešifrirati"
"url_preview": {
"close": "Zatvori pretpregled",
"show_n_more": {
"one": "Prikaži %(count)s drugi pregled",
"few": "Prikaži %(count)s druga pregleda",
"other": "Prikaži %(count)s drugih pregleda"
}
}
}, },
"truncated_list_n_more": { "truncated_list_n_more": {
"one": "I još %(count)s...", "one": "I još %(count)s...",
+53 -61
View File
@@ -371,8 +371,8 @@
"email_resent": "Újraküldve!", "email_resent": "Újraküldve!",
"fallback_button": "Hitelesítés indítása", "fallback_button": "Hitelesítés indítása",
"mas_cross_signing_reset_cta": "Ugrás a fiókjához", "mas_cross_signing_reset_cta": "Ugrás a fiókjához",
"mas_cross_signing_reset_description": "Állítsa alaphelyzetbe személyazonosságát a fiókszolgáltatón keresztül, majd térjen vissza, és kattintson az „Újra” gombra.", "mas_cross_signing_reset_description": "Arra készül, hogy a(z) %(serverName)s kiszolgálón lévő fiókjához menjen, hogy alaphelyzetbe állítsa a digitiális személyazonosságát. Amint befejezte a fiókja alaphelyezbe állítását, térjen vissza, és kattintson az „Újra” gombra.",
"mas_cross_signing_reset_title": "Ugorjon a fiókjához a személyazonossága alaphelyzetbe állításához", "mas_cross_signing_reset_title": "Ugorjon a fiókjához a digitális személyazonossága alaphelyzetbe állításához",
"msisdn": "Szöveges üzenet küldve ide: %(msisdn)s", "msisdn": "Szöveges üzenet küldve ide: %(msisdn)s",
"msisdn_token_incorrect": "Helytelen token", "msisdn_token_incorrect": "Helytelen token",
"msisdn_token_prompt": "Adja meg a benne lévő kódot:", "msisdn_token_prompt": "Adja meg a benne lévő kódot:",
@@ -666,8 +666,8 @@
"join_rule_knock_label": "Bárki kérheti a belépést, de az adminisztrátoroknak vagy moderátoroknak kell engedélyezniük. Ezt később megváltoztathatja.", "join_rule_knock_label": "Bárki kérheti a belépést, de az adminisztrátoroknak vagy moderátoroknak kell engedélyezniük. Ezt később megváltoztathatja.",
"join_rule_public_label": "Bárki megtalálhatja és beléphet ebbe a szobába.", "join_rule_public_label": "Bárki megtalálhatja és beléphet ebbe a szobába.",
"join_rule_public_parent_space_label": "Bárki megtalálhatja és beléphet a szobába, nem csak <SpaceName/> tér tagsága.", "join_rule_public_parent_space_label": "Bárki megtalálhatja és beléphet a szobába, nem csak <SpaceName/> tér tagsága.",
"join_rule_restricted": "Tér tagsága számára látható", "join_rule_restricted": "Szokásos",
"join_rule_restricted_label": "A(z) <SpaceName/> térben bárki megtalálhatja és beléphet a szobába.", "join_rule_restricted_label": "A(z) <SpaceName/> térből bárki beléphet.",
"name_validation_required": "Adjon meg egy nevet a szobához", "name_validation_required": "Adjon meg egy nevet a szobához",
"room_visibility_label": "Szoba láthatósága", "room_visibility_label": "Szoba láthatósága",
"state_encrypted_warning": "Engedélyezi az állapotesemények titkosításának kísérleti támogatását, amely elrejti a metaadatokat, például a szobák nevét és témáit a kiszolgáló elől. Ezek a metaadatok a később a szobákhoz csatlakozók, valamint az MSC4362 szabványt nem támogató ügyfelek elől is rejtve lesznek.", "state_encrypted_warning": "Engedélyezi az állapotesemények titkosításának kísérleti támogatását, amely elrejti a metaadatokat, például a szobák nevét és témáit a kiszolgáló elől. Ezek a metaadatok a később a szobákhoz csatlakozók, valamint az MSC4362 szabványt nem támogató ügyfelek elől is rejtve lesznek.",
@@ -692,7 +692,7 @@
"creating_rooms": "Szobák létrehozása…", "creating_rooms": "Szobák létrehozása…",
"done_action": "Ugrás a saját teréhez", "done_action": "Ugrás a saját teréhez",
"done_action_first_room": "Ugrás az első szobájához", "done_action_first_room": "Ugrás az első szobájához",
"explainer": "A terek a szobák és emberek csoportosításának új módja. Milyen teret szeretne létrehozni? Később megváltoztathatja.", "explainer": "A terek a szobák és emberek csoportosításának egy módja. Milyen teret szeretne létrehozni?",
"failed_create_initial_rooms": "Térhez tartozó kezdő szobákat nem sikerült elkészíteni", "failed_create_initial_rooms": "Térhez tartozó kezdő szobákat nem sikerült elkészíteni",
"failed_invite_users": "Az alábbi felhasználókat nem sikerült meghívni a térbe: %(csvUsers)s", "failed_invite_users": "Az alábbi felhasználókat nem sikerült meghívni a térbe: %(csvUsers)s",
"invite_teammates_by_username": "Meghívás felhasználónévvel", "invite_teammates_by_username": "Meghívás felhasználónévvel",
@@ -703,20 +703,20 @@
"name_required": "Adjon meg egy nevet a térhez", "name_required": "Adjon meg egy nevet a térhez",
"personal_space": "Csak én", "personal_space": "Csak én",
"personal_space_description": "Privát tér a szobái csoportosításához", "personal_space_description": "Privát tér a szobái csoportosításához",
"private_description": "Csak meghívóval, saját célra és csoportok számára ideális", "private_description": "Csak meghívóval, személyes beszélgetéshez vagy a csapatok számára",
"private_heading": "Saját privát tér", "private_heading": "Saját privát tér",
"private_only_heading": "Saját tér", "private_only_heading": "Saját tér",
"private_personal_description": "Ellenőrizze, hogy a megfelelő személyeknek hozzáférése van ehhez: %(name)s", "private_personal_description": "Ellenőrizze, hogy a megfelelő személyeknek hozzáférése van ehhez: %(name)s",
"private_personal_heading": "Kivel dolgozik együtt?", "private_personal_heading": "Kivel dolgozik együtt?",
"private_space": "Én és a csoporttársaim", "private_space": "Én és a csoporttársaim",
"private_space_description": "Privát tér önnek és a csoporttársainak", "private_space_description": "Privát tér önnek és a csoporttársainak",
"public_description": "Mindenki számára nyílt tér, a közösségek számára ideális", "public_description": "Bárki csatlakozhat, a közösségek számára a legjobb",
"public_heading": "Saját nyilvános tér", "public_heading": "Saját nyilvános tér",
"search_public_button": "Nyilvános terek keresése", "search_public_button": "Nyilvános terek keresése",
"setup_rooms_community_description": "Készítsünk szobát mindhez.", "setup_rooms_community_description": "Kezdésként hozzunk létre néhány szobát.",
"setup_rooms_community_heading": "Mik azok amikről beszélni szeretne itt: %(spaceName)s?", "setup_rooms_community_heading": "Mik azok amikről beszélni szeretne itt: %(spaceName)s?",
"setup_rooms_description": "Később is hozzáadhat többet, beleértve meglévőket is.", "setup_rooms_description": "Később további szobákat is hozzáadhat a térhez, beleértve a meglévő szobákat is.",
"setup_rooms_private_description": "Mindenhez készítünk egy szobát.", "setup_rooms_private_description": "Kezdésként hozzunk létre néhány szobát.",
"setup_rooms_private_heading": "Milyen projekteken dolgozik a csoportja?", "setup_rooms_private_heading": "Milyen projekteken dolgozik a csoportja?",
"share_description": "Egyenlőre csak ön, még jobb lehet másokkal együtt.", "share_description": "Egyenlőre csak ön, még jobb lehet másokkal együtt.",
"share_heading": "Megosztás: %(name)s", "share_heading": "Megosztás: %(name)s",
@@ -729,7 +729,7 @@
"subspace_join_rule_invite_only": "Privát tér (csak meghívóval)", "subspace_join_rule_invite_only": "Privát tér (csak meghívóval)",
"subspace_join_rule_label": "Tér láthatósága", "subspace_join_rule_label": "Tér láthatósága",
"subspace_join_rule_public_description": "Bárki megtalálhatja és beléphet a térbe, nem csak a(z) <SpaceName/> tér tagsága.", "subspace_join_rule_public_description": "Bárki megtalálhatja és beléphet a térbe, nem csak a(z) <SpaceName/> tér tagsága.",
"subspace_join_rule_restricted_description": "A(z) <SpaceName/> téren bárki megtalálhatja és beléphet." "subspace_join_rule_restricted_description": "A(z) <SpaceName/> térből bárki beléphet."
}, },
"credits": { "credits": {
"default_cover_photo": "Az <photo>alapértelmezett borítóképre</photo> a következő vonatkozik: © <author>Jesús Roncero</author>, a <terms>CC BY-SA 4.0</terms> licenc feltételei szerint használva.", "default_cover_photo": "Az <photo>alapértelmezett borítóképre</photo> a következő vonatkozik: © <author>Jesús Roncero</author>, a <terms>CC BY-SA 4.0</terms> licenc feltételei szerint használva.",
@@ -771,7 +771,7 @@
"cross_signing_public_keys_on_device_status": "Az eszközök közti hitelesítés nyilvános kulcsai:", "cross_signing_public_keys_on_device_status": "Az eszközök közti hitelesítés nyilvános kulcsai:",
"cross_signing_ready": "Az eszközök közti hitelesítés használatra kész.", "cross_signing_ready": "Az eszközök közti hitelesítés használatra kész.",
"cross_signing_status": "Eszközök közti hitelesítés állapota:", "cross_signing_status": "Eszközök közti hitelesítés állapota:",
"cross_signing_untrusted": "A fiókjához tartozik egy eszközök közti hitelesítési személyazonosság, de ez a munkamenet még nem jelölte megbízhatónak.", "cross_signing_untrusted": "A fiókjához tartozik egy digitális személyazonosság a titkos tárolóban, de ez a munkamenet még nem lett megbízhatónak jelölve.",
"crypto_not_available": "A kriptográfiai modul nem érhető el", "crypto_not_available": "A kriptográfiai modul nem érhető el",
"device_id": "Eszközazonosító", "device_id": "Eszközazonosító",
"key_backup_active_version": "Aktív biztonsági mentés verziója:", "key_backup_active_version": "Aktív biztonsági mentés verziója:",
@@ -888,10 +888,10 @@
"user_read_up_to_private_ignore_synthetic": "A felhasználó eddig olvasott felfelé (m.read.private;ignoreSynthetic): ", "user_read_up_to_private_ignore_synthetic": "A felhasználó eddig olvasott felfelé (m.read.private;ignoreSynthetic): ",
"user_room_membership": "Tagság: %(membership)s", "user_room_membership": "Tagság: %(membership)s",
"user_verification_status": { "user_verification_status": {
"identity_changed": "Ellenőrzés állapota: <E2EIcon /> Nincs ellenőrizve, és a személyazonosság megváltozott", "identity_changed": "Ellenőrzés állapota: <E2EIcon /> Nincs ellenőrizve, és a digitális személyazonosság megváltozott",
"unverified": "Ellenőrzés állapota: <E2EIcon /> Nem ellenőrzött", "unverified": "Ellenőrzés állapota: <E2EIcon /> Nem ellenőrzött",
"verified": "Ellenőrzés állapota: <E2EIcon /> Ellenőrzött", "verified": "Ellenőrzés állapota: <E2EIcon /> Ellenőrzött",
"was_verified": "Ellenőrzési állapot:<E2EIcon /> Ellenőrzés megtörtént, de a személyazonosság megváltozott" "was_verified": "Ellenőrzési állapot: <E2EIcon /> Ellenőrizve, de a digitális személyazonosság megváltozott"
}, },
"users": "Felhasználók", "users": "Felhasználók",
"value": "Érték", "value": "Érték",
@@ -957,7 +957,7 @@
"event_shield_reason_unverified_identity": "Nem ellenőrzött felhasználó által titkosítva.", "event_shield_reason_unverified_identity": "Nem ellenőrzött felhasználó által titkosítva.",
"export_unsupported": "A böngészője nem támogatja a szükséges titkosítási kiterjesztéseket", "export_unsupported": "A böngészője nem támogatja a szükséges titkosítási kiterjesztéseket",
"forgot_recovery_key": "Elfelejtette a helyreállítási kulcsot?", "forgot_recovery_key": "Elfelejtette a helyreállítási kulcsot?",
"identity_needs_reset_description": "Az üzenetelőzményekhez való hozzáférés biztosítása érdekében vissza kell állítania titkosítási személyazonosságát.", "identity_needs_reset_description": "Az csevegéselőzményekhez való hozzáférés biztosítása érdekében alaphelyzetbe kell állítania a digitális személyazonosságát.",
"import_invalid_keyfile": "Nem érvényes %(brand)s kulcsfájl", "import_invalid_keyfile": "Nem érvényes %(brand)s kulcsfájl",
"import_invalid_passphrase": "Hitelesítési ellenőrzés sikertelen: hibás jelszó?", "import_invalid_passphrase": "Hitelesítési ellenőrzés sikertelen: hibás jelszó?",
"key_storage_out_of_sync": "A kulcstároló nincs szinkronban.", "key_storage_out_of_sync": "A kulcstároló nincs szinkronban.",
@@ -977,22 +977,22 @@
"title": "Új helyreállítási mód", "title": "Új helyreállítási mód",
"warning": "Ha nem Ön állította be az új helyreállítási módot, akkor lehet, hogy egy támadó próbálja elérni a fiókját. Változtassa meg a fiókja jelszavát, és amint csak lehet, állítsa be az új helyreállítási módot a Beállításokban." "warning": "Ha nem Ön állította be az új helyreállítási módot, akkor lehet, hogy egy támadó próbálja elérni a fiókját. Változtassa meg a fiókja jelszavát, és amint csak lehet, állítsa be az új helyreállítási módot a Beállításokban."
}, },
"pinned_identity_changed": "Úgy tűnik, hogy %(displayName)s (<b>%(userId)s</b>) személyazonossága megváltozott. <a>További információ</a>", "pinned_identity_changed": "Úgy tűnik, hogy %(displayName)s (<b>%(userId)s</b>) digitális személyazonossága alaphelyzetbe lett állítva. <a>További információ</a>",
"pinned_identity_changed_no_displayname": "Úgy tűnik, hogy <b>%(userId)s</b> személyazonossága megváltozott. <a>További információ</a>", "pinned_identity_changed_no_displayname": "<b>%(userId)s</b> digitális személyazonossága alaphelyzetbe lett állítva. <a>További információ</a>",
"recovery_method_removed": { "recovery_method_removed": {
"description_1": "Ez a munkamenet azt észlelte, hogy a biztonságos üzenetek biztonsági jelmondata és kulcsa törölve lett.", "description_1": "Ez a munkamenet azt észlelte, hogy a biztonságos üzenetek biztonsági jelmondata és kulcsa törölve lett.",
"description_2": "Ha véletlenül tette, akkor beállíthatja a biztonságos üzeneteket ebben a munkamenetben, ami újra titkosítja a régi üzeneteket a helyreállítási móddal.", "description_2": "Ha véletlenül tette, akkor beállíthatja a biztonságos üzeneteket ebben a munkamenetben, ami újra titkosítja a régi üzeneteket a helyreállítási móddal.",
"title": "Helyreállítási mód eltávolítva", "title": "Helyreállítási mód eltávolítva",
"warning": "Ha nem Ön távolított el a helyreállítási módot, akkor lehet, hogy egy támadó hozzá akar férni a fiókjához. Azonnal változtassa meg a jelszavát, és állítson be egy helyreállítási módot a Beállításokban." "warning": "Ha nem Ön távolított el a helyreállítási módot, akkor lehet, hogy egy támadó hozzá akar férni a fiókjához. Azonnal változtassa meg a jelszavát, és állítson be egy helyreállítási módot a Beállításokban."
}, },
"set_up_recovery": "Helyreállítás beállítása", "set_up_recovery": "Csevegések biztonsági mentése",
"set_up_recovery_toast_description": "Létrehozhat egy helyreállítási kulcsot, amellyel helyreállíthatja a titkosított üzenetelőzményeit, ha elveszíti a hozzáférést az eszközeihez.", "set_up_recovery_toast_description": "A csevegései automatikusan mentve vannak, végpontok közti titkosítással Ahhoz, hogy az eszközei elvesztése esetén helyre tudja állítani a biztonsági mentést és megtartsa a digitális személyazonosságát, egy helyreállítási kulcsra van szüksége.",
"set_up_toast_title": "Biztonsági mentés beállítása", "set_up_toast_title": "Biztonsági mentés beállítása",
"setup_secure_backup": { "setup_secure_backup": {
"explainer": "Mentse a kulcsait a kiszolgálóra kijelentkezés előtt, hogy ne veszítse el azokat." "explainer": "Mentse a kulcsait a kiszolgálóra kijelentkezés előtt, hogy ne veszítse el azokat."
}, },
"turn_on_key_storage": "A kulcstárolás bekapcsolása", "turn_on_key_storage": "A kulcstárolás bekapcsolása",
"turn_on_key_storage_description": "Tárolja biztonságosan a kriptográfiai azonosító- és üzenetkulcsokat a kiszolgálón. Ez lehetővé teszi az üzenetek előzményeinek megtekintését bármely új eszközön.", "turn_on_key_storage_description": "Ez lehetővé teszi az üzenetelőzmények megtekintését bármely új eszközön, és szükséges a csevegések és a digitális személyazonossága biztonsági mentéséhez.",
"udd": { "udd": {
"interactive_verification_button": "Interaktív ellenőrzés emodzsikkal", "interactive_verification_button": "Interaktív ellenőrzés emodzsikkal",
"other_ask_verify_text": "Kérje meg a felhasználót, hogy hitelesítse a munkamenetét, vagy ellenőrizze kézzel lentebb.", "other_ask_verify_text": "Kérje meg a felhasználót, hogy hitelesítse a munkamenetét, vagy ellenőrizze kézzel lentebb.",
@@ -1016,7 +1016,7 @@
"complete_description": "Sikeresen ellenőrizte ezt a felhasználót.", "complete_description": "Sikeresen ellenőrizte ezt a felhasználót.",
"complete_title": "Ellenőrizve!", "complete_title": "Ellenőrizve!",
"confirm_identity_description": "A biztonságos üzenetkezelés beállításához ellenőrizze ezt az eszközt.", "confirm_identity_description": "A biztonságos üzenetkezelés beállításához ellenőrizze ezt az eszközt.",
"confirm_identity_title": "Erősítse meg, hogy Ön az", "confirm_identity_title": "Erősítse meg digitális személyazonosságát",
"confirm_the_emojis": "Erősítse meg, hogy a lenti emodzsik megegyeznek a másik eszközön megjelenítettekkel.", "confirm_the_emojis": "Erősítse meg, hogy a lenti emodzsik megegyeznek a másik eszközön megjelenítettekkel.",
"error_starting_description": "A beszélgetést a másik felhasználóval nem lehetett elindítani.", "error_starting_description": "A beszélgetést a másik felhasználóval nem lehetett elindítani.",
"error_starting_title": "Hiba az ellenőrzés indításakor", "error_starting_title": "Hiba az ellenőrzés indításakor",
@@ -1100,8 +1100,8 @@
"waiting_other_user": "Várakozás %(displayName)s felhasználóra az ellenőrzéshez…" "waiting_other_user": "Várakozás %(displayName)s felhasználóra az ellenőrzéshez…"
}, },
"verification_requested_toast_title": "Hitelesítés kérés elküldve", "verification_requested_toast_title": "Hitelesítés kérés elküldve",
"verified_identity_changed": "%(displayName)s (<b>%(userId)s</b> ) ellenőrzött személyazonossága megváltozott. <a>További információ</a>", "verified_identity_changed": "%(displayName)s (<b>%(userId)s</b> ) digitális személyazonossága alaphelyzetbe lett állítva. <a>További információ</a>",
"verified_identity_changed_no_displayname": "<b>%(userId)s</b> ellenőrzött személyazonossága megváltozott. <a>További információ</a>", "verified_identity_changed_no_displayname": "<b>%(userId)s</b> digitális személyazonossága alaphelyzetbe lett állítva. <a>További információ</a>",
"verify_toast_description": "Más felhasználók lehet, hogy nem bíznak benne", "verify_toast_description": "Más felhasználók lehet, hogy nem bíznak benne",
"verify_toast_title": "Munkamenet ellenőrzése", "verify_toast_title": "Munkamenet ellenőrzése",
"withdraw_verification_action": "Ellenőrzés visszavonása" "withdraw_verification_action": "Ellenőrzés visszavonása"
@@ -1487,8 +1487,6 @@
}, },
"labs": { "labs": {
"ask_to_join": "A kérést igénylő csatlakozás engedélyezése", "ask_to_join": "A kérést igénylő csatlakozás engedélyezése",
"automatic_debug_logs": "Hibakeresési naplók automatikus küldése bármilyen hiba esetén",
"automatic_debug_logs_decryption": "Hibakeresési naplók automatikus küldése titkosítás-visszafejtési hiba esetén",
"beta_description": "Mi várható a(z) %(brand)s fejlesztésében? A labor a legjobb hely az új dolgok kipróbálásához, visszajelzés adásához és a funkciók éles indulás előtti kialakításában történő segítséghez.", "beta_description": "Mi várható a(z) %(brand)s fejlesztésében? A labor a legjobb hely az új dolgok kipróbálásához, visszajelzés adásához és a funkciók éles indulás előtti kialakításában történő segítséghez.",
"beta_feature": "Ez egy beta állapotú funkció", "beta_feature": "Ez egy beta állapotú funkció",
"beta_feedback_leave_button": "A beállításokban tudja elhagyni a bétát.", "beta_feedback_leave_button": "A beállításokban tudja elhagyni a bétát.",
@@ -2336,31 +2334,32 @@
"history_visibility_warning": "A változtatások nem érintik a korábbi üzeneteket, csak az újakat.<a>Tudjon meg többet</a>", "history_visibility_warning": "A változtatások nem érintik a korábbi üzeneteket, csak az újakat.<a>Tudjon meg többet</a>",
"history_visibility_world_readable": "Bárki (az előzmények nyilvánosak)", "history_visibility_world_readable": "Bárki (az előzmények nyilvánosak)",
"join_rule_description": "Döntse el ki léphet be ide: %(roomName)s.", "join_rule_description": "Döntse el ki léphet be ide: %(roomName)s.",
"join_rule_invite": "Privát (csak meghívóval)", "join_rule_invite": "Csak meghívóval",
"join_rule_invite_description": "Csak a meghívott emberek léphetnek be.", "join_rule_invite_description": "Csak a meghívott emberek léphetnek be.",
"join_rule_knock": "Kérjen csatlakozást", "join_rule_knock": "Kérjen csatlakozást",
"join_rule_knock_description": "Az emberek nem léphetnek be, hacsak nem kapnak engedélyt a belépéshez.", "join_rule_knock_description": "Az emberek nem léphetnek be, hacsak nem kapnak engedélyt a belépéshez.",
"join_rule_public_description": "Bárki megtalálhatja és beléphet.", "join_rule_public": "Bárki",
"join_rule_public_description": "Bárki csatlakozhat.",
"join_rule_restricted": "Tértagság", "join_rule_restricted": "Tértagság",
"join_rule_restricted_description": "A téren bárki megtalálhatja és beléphet. <a>Szerkessze, hogy melyik tér férhet hozzá.</a>", "join_rule_restricted_description": "Az engedélyezett terekben bárki csatlakozhat meghívó nélkül. <a>Terek kezelése</a>",
"join_rule_restricted_description_active_space": "A(z) <spaceName/> téren bárki megtalálhatja és beléphet. Kiválaszthat más tereket is.", "join_rule_restricted_description_active_space": "A(z) <spaceName/> térből bárki beléphet.",
"join_rule_restricted_description_prompt": "A téren bárki megtalálhatja és beléphet. Több teret is kiválaszthat.", "join_rule_restricted_description_prompt": "Bárki csatlakozhat, aki a téren van.",
"join_rule_restricted_description_spaces": "Terek hozzáféréssel", "join_rule_restricted_description_spaces": "Engedélyezett terek",
"join_rule_restricted_dialog_description": "Döntse el melyik terek férhetnek hozzá ehhez a szobához. Ha a tér ki van választva a tagsága megtalálhatja és beléphet ebbe a szobába: <RoomName/>.", "join_rule_restricted_dialog_description": "Terek, ahol a tagok meghívás nélkül csatlakozhatnak ide: <RoomName/>.",
"join_rule_restricted_dialog_empty_warning": "Az összes teret törli. A hozzáférés alapállapota „csak meghívóval” lesz.", "join_rule_restricted_dialog_empty_warning": "Az összes engedélyezett teret eltávolítja. A hozzáférés alapértelmezés szerint csak meghívóval lesz elérhető.",
"join_rule_restricted_dialog_filter_placeholder": "Terek keresése", "join_rule_restricted_dialog_filter_placeholder": "Terek keresése",
"join_rule_restricted_dialog_heading_known": "Más terek, amelyeket ismerhet", "join_rule_restricted_dialog_heading_known": "Az Ön terei közül azok, amelyek nem tartalmazzák ezt a szobát",
"join_rule_restricted_dialog_heading_other": "Más terek vagy szobák melyről lehet, hogy nem tud", "join_rule_restricted_dialog_heading_other": "Egyéb terek, amelyeknek nem tagja",
"join_rule_restricted_dialog_heading_room": "Terek melyről tudja, hogy ezt a szobát tartalmazzák", "join_rule_restricted_dialog_heading_room": "Az Ön terei, amelyek ezt a szobát tartalmazzák",
"join_rule_restricted_dialog_heading_space": "Terek melyről tudja, hogy ezt a teret tartalmazzák", "join_rule_restricted_dialog_heading_space": "Terek melyről tudja, hogy ezt a teret tartalmazzák",
"join_rule_restricted_dialog_heading_unknown": "Ezek valószínűleg olyanok, amelyeknek más szobaadminisztrátorok is tagjai.", "join_rule_restricted_dialog_heading_unknown": "Ezek valószínűleg olyanok, amelyeknek más szobaadminisztrátorok is tagjai.",
"join_rule_restricted_dialog_title": "Terek kiválasztása", "join_rule_restricted_dialog_title": "Terek kezelése",
"join_rule_restricted_n_more": { "join_rule_restricted_n_more": {
"és még %(count)s": "one" "és még %(count)s": "one"
}, },
"join_rule_restricted_summary": { "join_rule_restricted_summary": {
"Jelenleg %(count)s tér rendelkezik hozzáféréssel": "other", "one": "Jelenleg egy tér engedélyezett",
"Jelenleg egy tér rendelkezik hozzáféréssel": "one" "other": "Jelenleg %(count)s tér engedélyezett"
}, },
"join_rule_restricted_upgrade_description": "Ez a fejlesztés lehetővé teszi, hogy a kiválasztott terek tagjai meghívó nélkül is elérjék ezt a szobát.", "join_rule_restricted_upgrade_description": "Ez a fejlesztés lehetővé teszi, hogy a kiválasztott terek tagjai meghívó nélkül is elérjék ezt a szobát.",
"join_rule_restricted_upgrade_warning": "Ez a szoba olyan terekben is benne van, amelynek nem Ön az adminisztrátora. Ezekben a terekben továbbra is a régi szoba jelenik meg, de az emberek jelzést kapnak, hogy lépjenek be az újba.", "join_rule_restricted_upgrade_warning": "Ez a szoba olyan terekben is benne van, amelynek nem Ön az adminisztrátora. Ezekben a terekben továbbra is a régi szoba jelenik meg, de az emberek jelzést kapnak, hogy lépjenek be az újba.",
@@ -2386,7 +2385,7 @@
"upload_avatar_label": "Profilkép feltöltése", "upload_avatar_label": "Profilkép feltöltése",
"visibility": { "visibility": {
"alias_section": "Cím", "alias_section": "Cím",
"error_failed_save": "A tér láthatóságának frissítése sikertelen", "error_failed_save": "Nem sikerült frissíteni a tér beállításait",
"error_update_guest_access": "A tér vendéghozzáférésének frissítése sikertelen", "error_update_guest_access": "A tér vendéghozzáférésének frissítése sikertelen",
"error_update_history_visibility": "A tér régi üzeneteinek láthatóságának frissítése sikertelen", "error_update_history_visibility": "A tér régi üzeneteinek láthatóságának frissítése sikertelen",
"guest_access_disabled": "Nincs jogosultsága a vendéghozzáférés módosítására.", "guest_access_disabled": "Nincs jogosultsága a vendéghozzáférés módosítására.",
@@ -2396,7 +2395,7 @@
"history_visibility_anyone_space_description": "A tér előnézetének engedélyezése a belépés előtt.", "history_visibility_anyone_space_description": "A tér előnézetének engedélyezése a belépés előtt.",
"history_visibility_anyone_space_disabled": "Nincs jogosultsága az előzmények láthatóságának módosítására.", "history_visibility_anyone_space_disabled": "Nincs jogosultsága az előzmények láthatóságának módosítására.",
"history_visibility_anyone_space_recommendation": "A nyilvános terekhez ajánlott.", "history_visibility_anyone_space_recommendation": "A nyilvános terekhez ajánlott.",
"title": "Láthatóság" "title": "Biztonság és adatvédelem"
}, },
"voip": { "voip": {
"call_type_section": "Hívás típusa", "call_type_section": "Hívás típusa",
@@ -2514,10 +2513,10 @@
"breadcrumb_page": "Titkosítás alaphelyzetbe állítása", "breadcrumb_page": "Titkosítás alaphelyzetbe állítása",
"breadcrumb_second_description": "Elveszít minden olyan üzenetelőzményt, amely csak a kiszolgálón van tárolva.", "breadcrumb_second_description": "Elveszít minden olyan üzenetelőzményt, amely csak a kiszolgálón van tárolva.",
"breadcrumb_third_description": "Újra ellenőriznie kell az összes meglévő eszközét és névjegyét", "breadcrumb_third_description": "Újra ellenőriznie kell az összes meglévő eszközét és névjegyét",
"breadcrumb_title": "Biztos, hogy alaphelyzetbe állítja a személyazonosságát?", "breadcrumb_title": "Biztos, hogy alaphelyzetbe állítja a digitális személyazonosságát?",
"breadcrumb_title_cant_confirm": "Alaphelyzetbe kell állítania a személyazonosságát", "breadcrumb_title_cant_confirm": "Alaphelyzetbe kell állítania a digitális személyazonosságát",
"breadcrumb_title_forgot": "Elfelejtette a helyreállítási kulcsot? Alaphelyzetbe kell állítania a személyazonosságát.", "breadcrumb_title_forgot": "Elfelejtette a helyreállítási kulcsot? Alaphelyzetbe kell állítania a digitális személyazonosságát.",
"breadcrumb_title_sync_failed": "A kulcstároló szinkronizálása sikertelen. Alaphelyzetbe kell állítania személyazonosságát.", "breadcrumb_title_sync_failed": "A kulcstároló szinkronizálása sikertelen. Alaphelyzetbe kell állítania a digitális személyazonosságát.",
"breadcrumb_warning": "Csak akkor tegye ezt, ha úgy gondolja, hogy fiókját feltörték.", "breadcrumb_warning": "Csak akkor tegye ezt, ha úgy gondolja, hogy fiókját feltörték.",
"details_title": "Titkosítás részletei", "details_title": "Titkosítás részletei",
"do_not_close_warning": "Ne zárja be ezt az ablakot, amíg az alaphelyzetbe állítás be nem fejeződik", "do_not_close_warning": "Ne zárja be ezt az ablakot, amíg az alaphelyzetbe állítás be nem fejeződik",
@@ -2548,7 +2547,7 @@
"dialog_title": "<strong>Beállítások:</strong> Titkosítás", "dialog_title": "<strong>Beállítások:</strong> Titkosítás",
"key_storage": { "key_storage": {
"allow_key_storage": "Kulcstárolás engedélyezése", "allow_key_storage": "Kulcstárolás engedélyezése",
"description": "Tárolja biztonságosan a kriptográfiai személyazonosságát és az üzenetkulcsait a kiszolgálón. Ez lehetővé teszi az üzenetek előzményeinek megtekintését bármely új eszközön. <a>További információ</a>", "description": "Ez lehetővé teszi az üzenetelőzmények megtekintését bármely új eszközön, és szükséges a csevegések és a digitális személyazonossága biztonsági mentéséhez. <a>További információ</a>",
"title": "Kulcstároló" "title": "Kulcstároló"
}, },
"recovery": { "recovery": {
@@ -2558,14 +2557,14 @@
"change_recovery_key": "Helyreállítási kulcs módosítása", "change_recovery_key": "Helyreállítási kulcs módosítása",
"change_recovery_key_description": "Írja le ezt az új helyreállítási kulcsot egy biztonságos helyre. Ezután kattintson a Folytatás gombra a módosítás megerősítéséhez.", "change_recovery_key_description": "Írja le ezt az új helyreállítási kulcsot egy biztonságos helyre. Ezután kattintson a Folytatás gombra a módosítás megerősítéséhez.",
"change_recovery_key_title": "Módosítja a helyreállítási kulcsot?", "change_recovery_key_title": "Módosítja a helyreállítási kulcsot?",
"description": "Ha az összes meglévő eszközét elvesztette, akkor egy helyreállítási kulccsal visszaszerezheti a kriptográfiai személyazonosságát és az üzenetelőzményeit.", "description": "A csevegései automatikusan mentve vannak, végpontok közti titkosítással Ahhoz, hogy az eszközei elvesztése esetén helyre tudja állítani a biztonsági mentést és megtartsa a digitális személyazonosságát, egy helyreállítási kulcsra van szüksége.",
"enter_key_error": "A megadott helyreállítási kulcs helytelen.", "enter_key_error": "A megadott helyreállítási kulcs helytelen.",
"enter_recovery_key": "Adja meg a helyreállítási kulcsot", "enter_recovery_key": "Adja meg a helyreállítási kulcsot",
"forgot_recovery_key": "Elfelejtette a helyreállítási kulcsot?", "forgot_recovery_key": "Elfelejtette a helyreállítási kulcsot?",
"key_storage_warning": "A kulcstároló nincs szinkronban. Kattintson az alábbi gombra a probléma megoldásához.", "key_storage_warning": "A kulcstároló nincs szinkronban. Kattintson az alábbi gombra a probléma megoldásához.",
"save_key_description": "Ne ossza meg ezt senkivel!", "save_key_description": "Ne ossza meg ezt senkivel!",
"save_key_title": "Helyreállítási kulcs", "save_key_title": "Helyreállítási kulcs",
"set_up_recovery": "A helyreállítás beállítása", "set_up_recovery": "Helyreállítási kulcs beszerzése",
"set_up_recovery_confirm_button": "Beállítás befejezése", "set_up_recovery_confirm_button": "Beállítás befejezése",
"set_up_recovery_confirm_description": "Adja meg az előző képernyőn látható helyreállítási kulcsot a helyreállítás beállításának befejezéséhez.", "set_up_recovery_confirm_description": "Adja meg az előző képernyőn látható helyreállítási kulcsot a helyreállítás beállításának befejezéséhez.",
"set_up_recovery_confirm_title": "A megerősítéshez adja meg a helyreállítási kulcsot", "set_up_recovery_confirm_title": "A megerősítéshez adja meg a helyreállítási kulcsot",
@@ -2573,7 +2572,7 @@
"set_up_recovery_save_key_description": "Jegyezze fel ezt a helyreállítási kulcsot egy biztonságos helyre, például jelszókezelőbe, titkosított jegyzetbe vagy fizikai széfbe.", "set_up_recovery_save_key_description": "Jegyezze fel ezt a helyreállítási kulcsot egy biztonságos helyre, például jelszókezelőbe, titkosított jegyzetbe vagy fizikai széfbe.",
"set_up_recovery_save_key_title": "Mentse a helyreállítási kulcsot egy biztonságos helyre", "set_up_recovery_save_key_title": "Mentse a helyreállítási kulcsot egy biztonságos helyre",
"set_up_recovery_secondary_description": "Miután rákattintott a folytatásra, létrehozunk Önnek egy helyreállítási kulcsot.", "set_up_recovery_secondary_description": "Miután rákattintott a folytatásra, létrehozunk Önnek egy helyreállítási kulcsot.",
"title": "Helyreállítás" "title": "Biztonsági mentés"
}, },
"title": "Titkosítás" "title": "Titkosítás"
}, },
@@ -2946,13 +2945,13 @@
"unverified_session_explainer_2": "Ezzel a munkamenettel azokban szobákban nem tud részt venni, ahol a titkosítás be van kapcsolva.", "unverified_session_explainer_2": "Ezzel a munkamenettel azokban szobákban nem tud részt venni, ahol a titkosítás be van kapcsolva.",
"unverified_session_explainer_3": "A biztonság és adatvédelem érdekében javasolt olyan Matrix klienst használni, amely támogatja a titkosítást.", "unverified_session_explainer_3": "A biztonság és adatvédelem érdekében javasolt olyan Matrix klienst használni, amely támogatja a titkosítást.",
"unverified_sessions": "Nem ellenőrzött munkamenetek", "unverified_sessions": "Nem ellenőrzött munkamenetek",
"unverified_sessions_explainer_1": "A nem ellenőrzött munkamenetek olyanok, amelyek a jelszavával bejelentkeztek, de nem lettek ellenőrizve.", "unverified_sessions_explainer_1": "A nem ellenőrzött munkamenetek olyanok, amelyek a hitelesítő adataival bejelentkeztek, de a digitális személyazonosságát nem ellenőrizték.",
"unverified_sessions_explainer_2": "Egészen bizonyosodjon meg arról, hogy ismeri ezeket a munkameneteket, mivel elképzelhető, hogy jogosulatlan fiókhasználatot jeleznek.", "unverified_sessions_explainer_2": "Egészen bizonyosodjon meg arról, hogy ismeri ezeket a munkameneteket, mivel elképzelhető, hogy jogosulatlan fiókhasználatot jeleznek.",
"unverified_sessions_list_description": "Erősítse meg a munkameneteit a még biztonságosabb csevegéshez vagy jelentkezzen ki ezekből, ha nem ismeri fel vagy már nem használja őket.", "unverified_sessions_list_description": "Erősítse meg a munkameneteit a még biztonságosabb csevegéshez vagy jelentkezzen ki ezekből, ha nem ismeri fel vagy már nem használja őket.",
"url": "Webcím", "url": "Webcím",
"verified_session": "Ellenőrzött munkamenet", "verified_session": "Ellenőrzött munkamenet",
"verified_sessions": "Ellenőrzött munkamenetek", "verified_sessions": "Ellenőrzött munkamenetek",
"verified_sessions_explainer_1": "Mindenhol ellenőrzött munkamenetek vannak ahol ezt a fiókot használja a jelmondattal vagy azonosította magát egy másik ellenőrzött munkamenetből.", "verified_sessions_explainer_1": "Az ellenőrzött munkamenetek megerősítették a digitális személyazonosságát.",
"verified_sessions_explainer_2": "Ez azt jelenti, hogy a titkosított üzenetek visszafejtéséhez minden kulccsal rendelkezik valamint a többi felhasználó megbízhat ebben a munkamenetben.", "verified_sessions_explainer_2": "Ez azt jelenti, hogy a titkosított üzenetek visszafejtéséhez minden kulccsal rendelkezik valamint a többi felhasználó megbízhat ebben a munkamenetben.",
"verified_sessions_list_description": "A legbiztonságosabb, ha minden olyan munkamenetből kijelentkezel, melyet már nem ismersz fel vagy nem használsz.", "verified_sessions_list_description": "A legbiztonságosabb, ha minden olyan munkamenetből kijelentkezel, melyet már nem ismersz fel vagy nem használsz.",
"verify_session": "Munkamenet ellenőrzése", "verify_session": "Munkamenet ellenőrzése",
@@ -3314,7 +3313,7 @@
"creation_summary_dm": "%(creator)s hozta létre ezt az üzenetet.", "creation_summary_dm": "%(creator)s hozta létre ezt az üzenetet.",
"creation_summary_room": "%(creator)s elkészítette és beállította a szobát.", "creation_summary_room": "%(creator)s elkészítette és beállította a szobát.",
"decryption_failure": { "decryption_failure": {
"sender_identity_previously_verified": "A feladó ellenőrzött személyazonossága megváltozott", "sender_identity_previously_verified": "A feladó ellenőrzött digitális személyazonossága alaphelyzetbe lett állítva",
"unable_to_decrypt": "Nem sikerült visszafejteni az üzenetet" "unable_to_decrypt": "Nem sikerült visszafejteni az üzenetet"
}, },
"disambiguated_profile": "%(displayName)s (%(matrixId)s)", "disambiguated_profile": "%(displayName)s (%(matrixId)s)",
@@ -3374,8 +3373,7 @@
"voice_call_unsupported": "%(senderName)s hanghívást indított. (ebben a böngészőben nem támogatott)" "voice_call_unsupported": "%(senderName)s hanghívást indított. (ebben a böngészőben nem támogatott)"
}, },
"m.file": { "m.file": {
"error_decrypting": "Csatolmány visszafejtése sikertelen", "error_decrypting": "Csatolmány visszafejtése sikertelen"
"error_invalid": "Hibás fájl"
}, },
"m.image": { "m.image": {
"error": "Kép megjelenítése egy hiba miatt nem lehetséges", "error": "Kép megjelenítése egy hiba miatt nem lehetséges",
@@ -3714,13 +3712,7 @@
"one_user": "%(displayName)s gépel…", "one_user": "%(displayName)s gépel…",
"two_users": "%(names)s és %(lastPerson)s gépelnek…" "two_users": "%(names)s és %(lastPerson)s gépelnek…"
}, },
"undecryptable_tooltip": "Ezt az üzenetet nem lehet visszafejteni", "undecryptable_tooltip": "Ezt az üzenetet nem lehet visszafejteni"
"url_preview": {
"close": "Előnézet bezárása",
"show_n_more": {
"%(count)s további előnézet megjelenítése": "other"
}
}
}, },
"truncated_list_n_more": { "truncated_list_n_more": {
"És még %(count)s...": "other" "És még %(count)s...": "other"
+2 -12
View File
@@ -1439,8 +1439,6 @@
}, },
"labs": { "labs": {
"ask_to_join": "Միացնել միանալու հարցումը", "ask_to_join": "Միացնել միանալու հարցումը",
"automatic_debug_logs": "Ավտոմատ կերպով ուղարկել կարգաբերման տեղեկամատյանները(debug logs) ցանկացած սխալի վերաբերյալ",
"automatic_debug_logs_decryption": "Ավտոմատ կերպով ուղարկել կարգաբերման տեղեկամատյանները(debug logs) վերծանման սխալների վերաբերյալ",
"beta_description": "Ի՞նչ է սպասվում %(brand)s-ին հաջորդիվ։ Լաբորատորիաները լավագույն միջոցն են ամեն ինչ վաղ փուլում սկսելու, նոր գործառույթները փորձարկելու և դրանք ձևավորելու համար, նախքան դրանց թողարկումը։", "beta_description": "Ի՞նչ է սպասվում %(brand)s-ին հաջորդիվ։ Լաբորատորիաները լավագույն միջոցն են ամեն ինչ վաղ փուլում սկսելու, նոր գործառույթները փորձարկելու և դրանք ձևավորելու համար, նախքան դրանց թողարկումը։",
"beta_feature": "Սա բետա առանձնահատկություն է", "beta_feature": "Սա բետա առանձնահատկություն է",
"beta_feedback_leave_button": "Բետա տարբերակից դուրս գալու համար այցելեք ձեր կարգավորումները:", "beta_feedback_leave_button": "Բետա տարբերակից դուրս գալու համար այցելեք ձեր կարգավորումները:",
@@ -3301,8 +3299,7 @@
"voice_call_unsupported": "%(senderName)s-ը տեղադրել է ձայնային զանգ․ (չի աջակցվում այս զննարկիչի կողմից)" "voice_call_unsupported": "%(senderName)s-ը տեղադրել է ձայնային զանգ․ (չի աջակցվում այս զննարկիչի կողմից)"
}, },
"m.file": { "m.file": {
"error_decrypting": "Կցորդի վերծանման սխալ", "error_decrypting": "Կցորդի վերծանման սխալ"
"error_invalid": "Անվավեր ֆայլ"
}, },
"m.image": { "m.image": {
"error": "Սխալի պատճառով նկարը չի կարող ցուցադրվել", "error": "Սխալի պատճառով նկարը չի կարող ցուցադրվել",
@@ -3643,14 +3640,7 @@
"one_user": "%(displayName)s-ը գրում է ...", "one_user": "%(displayName)s-ը գրում է ...",
"two_users": "%(names)s-ը և %(lastPerson)s-ը գրում են ․․․" "two_users": "%(names)s-ը և %(lastPerson)s-ը գրում են ․․․"
}, },
"undecryptable_tooltip": "Անհնար է վերծանել այս հաղորդագրությունը", "undecryptable_tooltip": "Անհնար է վերծանել այս հաղորդագրությունը"
"url_preview": {
"close": "Փակել նախադիտումը",
"show_n_more": {
"one": "Ցույց տալ %(count)s այլ նախադիտում",
"other": "Ցույց տալ %(count)s այլ նախադիտումներ"
}
}
}, },
"truncated_list_n_more": { "truncated_list_n_more": {
"one": "", "one": "",
+2 -12
View File
@@ -1494,8 +1494,6 @@
}, },
"labs": { "labs": {
"ask_to_join": "Aktifkan bertanya untuk bergabung", "ask_to_join": "Aktifkan bertanya untuk bergabung",
"automatic_debug_logs": "Kirim catatan pengawakutu secara otomatis saat ada kesalahan",
"automatic_debug_logs_decryption": "Kirim catatan pengawakutu secara otomatis ketika terjadi kesalahan pendekripsian",
"beta_description": "Apa berikutnya untuk %(brand)s? Fitur Uji Coba merupakan cara yang terbaik untuk mendapatkan hal-hal baru lebih awal, mencoba fitur baru dan membantu memperbaikinya sebelum diluncurkan.", "beta_description": "Apa berikutnya untuk %(brand)s? Fitur Uji Coba merupakan cara yang terbaik untuk mendapatkan hal-hal baru lebih awal, mencoba fitur baru dan membantu memperbaikinya sebelum diluncurkan.",
"beta_feature": "Ini adalah fitur beta", "beta_feature": "Ini adalah fitur beta",
"beta_feedback_leave_button": "Untuk keluar dari beta, pergi ke pengaturan Anda.", "beta_feedback_leave_button": "Untuk keluar dari beta, pergi ke pengaturan Anda.",
@@ -3385,8 +3383,7 @@
"voice_call_unsupported": "%(senderName)s melakukan panggilan suara. (tidak didukung oleh browser ini)" "voice_call_unsupported": "%(senderName)s melakukan panggilan suara. (tidak didukung oleh browser ini)"
}, },
"m.file": { "m.file": {
"error_decrypting": "Terjadi kesalahan mendekripsi lampiran", "error_decrypting": "Terjadi kesalahan mendekripsi lampiran"
"error_invalid": "Berkas tidak valid"
}, },
"m.image": { "m.image": {
"error": "Tidak dapat menampilkan gambar karena kesalahan", "error": "Tidak dapat menampilkan gambar karena kesalahan",
@@ -3727,14 +3724,7 @@
"one_user": "%(displayName)s sedang mengetik …", "one_user": "%(displayName)s sedang mengetik …",
"two_users": "%(names)s dan %(lastPerson)s sedang mengetik …" "two_users": "%(names)s dan %(lastPerson)s sedang mengetik …"
}, },
"undecryptable_tooltip": "Pesan ini tidak dapat didekripsi", "undecryptable_tooltip": "Pesan ini tidak dapat didekripsi"
"url_preview": {
"close": "Tutup tampilan",
"show_n_more": {
"one": "Tampilkan %(count)s tampilan lainnya",
"other": "Tampilkan %(count)s tampilan lainnya"
}
}
}, },
"truncated_list_n_more": { "truncated_list_n_more": {
"other": "Dan %(count)s lagi..." "other": "Dan %(count)s lagi..."
+2 -12
View File
@@ -1049,8 +1049,6 @@
"upload_file": "Senda inn skrá" "upload_file": "Senda inn skrá"
}, },
"labs": { "labs": {
"automatic_debug_logs": "Senda atvikaskrár sjálfkrafa við allar villur",
"automatic_debug_logs_decryption": "Senda atvikaskrár sjálfkrafa við afkóðunarvillur",
"beta_description": "Hvað er væntanlegt í %(brand)s? Að taka þátt í tilraunum gefur færi á að sjá nýja hluti fyrr, prófa nýja eiginleika og vera með í að móta þá áður en þeir fara í almenna notkun.", "beta_description": "Hvað er væntanlegt í %(brand)s? Að taka þátt í tilraunum gefur færi á að sjá nýja hluti fyrr, prófa nýja eiginleika og vera með í að móta þá áður en þeir fara í almenna notkun.",
"beta_feature": "Þetta er beta-prófunareiginleiki", "beta_feature": "Þetta er beta-prófunareiginleiki",
"beta_feedback_leave_button": "Til að hætta í beta-prófunarútgáfunni, skaltu fara í stillingarnar þínar.", "beta_feedback_leave_button": "Til að hætta í beta-prófunarútgáfunni, skaltu fara í stillingarnar þínar.",
@@ -2357,8 +2355,7 @@
"voice_call_unsupported": "%(senderName)s hringdi raddsímtal. (Ekki stutt af þessum vafra)" "voice_call_unsupported": "%(senderName)s hringdi raddsímtal. (Ekki stutt af þessum vafra)"
}, },
"m.file": { "m.file": {
"error_decrypting": "Villa við afkóðun viðhengis", "error_decrypting": "Villa við afkóðun viðhengis"
"error_invalid": "Ógild skrá%(extra)s"
}, },
"m.image": { "m.image": {
"error": "Get ekki birt mynd vegna villu", "error": "Get ekki birt mynd vegna villu",
@@ -2669,14 +2666,7 @@
"one_user": "%(displayName)s er að skrifa…", "one_user": "%(displayName)s er að skrifa…",
"two_users": "%(names)s og %(lastPerson)s eru að skrifa…… …" "two_users": "%(names)s og %(lastPerson)s eru að skrifa…… …"
}, },
"undecryptable_tooltip": "Þessi skilaboð er ekki hægt að afkóða", "undecryptable_tooltip": "Þessi skilaboð er ekki hægt að afkóða"
"url_preview": {
"close": "Loka forskoðun",
"show_n_more": {
"one": "Sýna %(count)s forskoðun til viðbótar",
"other": "Sýna %(count)s forskoðanir til viðbótar"
}
}
}, },
"truncated_list_n_more": { "truncated_list_n_more": {
"other": "Og %(count)s til viðbótar..." "other": "Og %(count)s til viðbótar..."
+2 -12
View File
@@ -1265,8 +1265,6 @@
}, },
"labs": { "labs": {
"ask_to_join": "Attiva \"Chiedi di entrare\"", "ask_to_join": "Attiva \"Chiedi di entrare\"",
"automatic_debug_logs": "Invia automaticamente log di debug per qualsiasi errore",
"automatic_debug_logs_decryption": "Invia automaticamente log di debug per errori di decifrazione",
"beta_description": "Cosa riserva il futuro di %(brand)s? I laboratori sono il miglior modo di provare cose in anticipo, testare nuove funzioni ed aiutare a plasmarle prima che vengano distribuite.", "beta_description": "Cosa riserva il futuro di %(brand)s? I laboratori sono il miglior modo di provare cose in anticipo, testare nuove funzioni ed aiutare a plasmarle prima che vengano distribuite.",
"beta_feature": "Questa è una funzionalità beta", "beta_feature": "Questa è una funzionalità beta",
"beta_feedback_leave_button": "Per abbandonare la beta, vai nelle impostazioni.", "beta_feedback_leave_button": "Per abbandonare la beta, vai nelle impostazioni.",
@@ -2896,8 +2894,7 @@
"voice_call_unsupported": "%(senderName)s ha iniziato una telefonata. (non supportata da questo browser)" "voice_call_unsupported": "%(senderName)s ha iniziato una telefonata. (non supportata da questo browser)"
}, },
"m.file": { "m.file": {
"error_decrypting": "Errore decifratura allegato", "error_decrypting": "Errore decifratura allegato"
"error_invalid": "File non valido %(extra)s"
}, },
"m.image": { "m.image": {
"error": "Impossibile mostrare l'immagine per un errore", "error": "Impossibile mostrare l'immagine per un errore",
@@ -3234,14 +3231,7 @@
"one_user": "%(displayName)s sta scrivendo …", "one_user": "%(displayName)s sta scrivendo …",
"two_users": "%(names)s e %(lastPerson)s stanno scrivendo …" "two_users": "%(names)s e %(lastPerson)s stanno scrivendo …"
}, },
"undecryptable_tooltip": "Non è stato possibile decifrare questo messaggio", "undecryptable_tooltip": "Non è stato possibile decifrare questo messaggio"
"url_preview": {
"close": "Chiudi anteprima",
"show_n_more": {
"one": "Mostra %(count)s altra anteprima",
"other": "Mostra altre %(count)s anteprime"
}
}
}, },
"truncated_list_n_more": { "truncated_list_n_more": {
"other": "E altri %(count)s ..." "other": "E altri %(count)s ..."
+2 -12
View File
@@ -1181,8 +1181,6 @@
"upload_file": "ファイルをアップロード" "upload_file": "ファイルをアップロード"
}, },
"labs": { "labs": {
"automatic_debug_logs": "エラーが生じた際に、自動的にデバッグログを送信",
"automatic_debug_logs_decryption": "復号化エラーが生じた際に、自動的にデバッグログを送信",
"beta_description": "%(brand)sのラボでは、最新の機能をいち早く使用したり、テストしたりできるほか、機能が実際にリリースされる前の改善作業を支援することができます。", "beta_description": "%(brand)sのラボでは、最新の機能をいち早く使用したり、テストしたりできるほか、機能が実際にリリースされる前の改善作業を支援することができます。",
"beta_feature": "この機能はベータ版です", "beta_feature": "この機能はベータ版です",
"beta_feedback_leave_button": "ベータ版の使用を終了するには、設定を開いてください。", "beta_feedback_leave_button": "ベータ版の使用を終了するには、設定を開いてください。",
@@ -2640,8 +2638,7 @@
"voice_call_unsupported": "%(senderName)sが音声通話を行いました。(このブラウザーではサポートされていません)" "voice_call_unsupported": "%(senderName)sが音声通話を行いました。(このブラウザーではサポートされていません)"
}, },
"m.file": { "m.file": {
"error_decrypting": "添付ファイルを復号化する際にエラーが発生しました", "error_decrypting": "添付ファイルを復号化する際にエラーが発生しました"
"error_invalid": "無効なファイル %(extra)s"
}, },
"m.image": { "m.image": {
"error": "エラーにより画像を表示できません", "error": "エラーにより画像を表示できません",
@@ -2965,14 +2962,7 @@
"one_user": "%(displayName)sが入力しています…", "one_user": "%(displayName)sが入力しています…",
"two_users": "%(names)sと%(lastPerson)sが入力しています…" "two_users": "%(names)sと%(lastPerson)sが入力しています…"
}, },
"undecryptable_tooltip": "このメッセージを復号化できませんでした", "undecryptable_tooltip": "このメッセージを復号化できませんでした"
"url_preview": {
"close": "プレビューを閉じる",
"show_n_more": {
"one": "他%(count)s個のプレビューを表示",
"other": "他%(count)s個のプレビューを表示"
}
}
}, },
"truncated_list_n_more": { "truncated_list_n_more": {
"other": "他%(count)s人以上…" "other": "他%(count)s人以上…"
+2 -12
View File
@@ -977,8 +977,6 @@
}, },
"labs": { "labs": {
"ask_to_join": "ჩართეთ შეერთების მოთხოვნა", "ask_to_join": "ჩართეთ შეერთების მოთხოვნა",
"automatic_debug_logs": "ავტომატურად გაგზავნეთ გამართვის ჟურნალი ნებისმიერი შეცდომის შესახებ",
"automatic_debug_logs_decryption": "გაშიფვრის შეცდომებზე გამართვის ჟურნალების ავტომატურად გაგზავნა",
"beta_description": "რა არის შემდეგი%(brand)s ? ლაბორატორიები საუკეთესო საშუალებაა ნივთების ადრეულ ეტაპზე მისაღებად, ახალი ფუნქციების შესამოწმებლად და მათ ჩამოყალიბებაში, სანამ ისინი რეალურად დაიწყება.", "beta_description": "რა არის შემდეგი%(brand)s ? ლაბორატორიები საუკეთესო საშუალებაა ნივთების ადრეულ ეტაპზე მისაღებად, ახალი ფუნქციების შესამოწმებლად და მათ ჩამოყალიბებაში, სანამ ისინი რეალურად დაიწყება.",
"beta_feature": "ეს არის ბეტა ფუნქცია", "beta_feature": "ეს არის ბეტა ფუნქცია",
"beta_feedback_leave_button": "ბეტადან გასასვლელად ეწვიეთ თქვენს პარამეტრებს.", "beta_feedback_leave_button": "ბეტადან გასასვლელად ეწვიეთ თქვენს პარამეტრებს.",
@@ -2252,8 +2250,7 @@
"voice_call_unsupported": "%(senderName)sმოახდინა ხმოვანი ზარი. (ამ ბრაუზერის მიერ არ არის მხარდაჭერილი)" "voice_call_unsupported": "%(senderName)sმოახდინა ხმოვანი ზარი. (ამ ბრაუზერის მიერ არ არის მხარდაჭერილი)"
}, },
"m.file": { "m.file": {
"error_decrypting": "შეცდომა დანართის გაშიფვრისას", "error_decrypting": "შეცდომა დანართის გაშიფვრისას"
"error_invalid": "არასწორი ფაილი"
}, },
"m.image": { "m.image": {
"error": "შეცდომის გამო სურათის ჩვენება შეუძლებელია", "error": "შეცდომის გამო სურათის ჩვენება შეუძლებელია",
@@ -2583,14 +2580,7 @@
"one_user": "%(displayName)sაკრეფებს...", "one_user": "%(displayName)sაკრეფებს...",
"two_users": "%(names)sდა აკ %(lastPerson)s რეფენ..." "two_users": "%(names)sდა აკ %(lastPerson)s რეფენ..."
}, },
"undecryptable_tooltip": "ამ შეტყობინების გაშიფვრა ვერ მოხერხდა", "undecryptable_tooltip": "ამ შეტყობინების გაშიფვრა ვერ მოხერხდა"
"url_preview": {
"close": "გადახედვის დახურვა",
"show_n_more": {
"one": "ჩვენება%(count)s სხვა გადახედვა",
"other": "ჩვენება%(count)s სხვა გადახედვები"
}
}
}, },
"unsupported_server_description": "ეს სერვერი იყენებს Matrix-ის ძველ ვერსიას. განაახლეთ Matrix-ზე%(version)s გამოიყენოს%(brand)s შეცდომების გარეშე.", "unsupported_server_description": "ეს სერვერი იყენებს Matrix-ის ძველ ვერსიას. განაახლეთ Matrix-ზე%(version)s გამოიყენოს%(brand)s შეცდომების გარეშე.",
"unsupported_server_title": "თქვენი სერვერი მხარდაჭერილი არ არის", "unsupported_server_title": "თქვენი სერვერი მხარდაჭერილი არ არის",
+2 -11
View File
@@ -1481,8 +1481,6 @@
}, },
"labs": { "labs": {
"ask_to_join": "참가 요청 허용", "ask_to_join": "참가 요청 허용",
"automatic_debug_logs": "오류 발생 시 자동으로 디버그 로그를 전송합니다",
"automatic_debug_logs_decryption": "복호화 오류 시 디버그 로그 자동 전송",
"beta_description": "%(brand)s 의 다음 단계는 무엇일까요? Labs는 새로운 기능을 가장 먼저 접하고 테스트해 볼 수 있는 최고의 방법이며, 정식 출시 전에 기능 개발에 기여할 수 있는 기회입니다.", "beta_description": "%(brand)s 의 다음 단계는 무엇일까요? Labs는 새로운 기능을 가장 먼저 접하고 테스트해 볼 수 있는 최고의 방법이며, 정식 출시 전에 기능 개발에 기여할 수 있는 기회입니다.",
"beta_feature": "이것은 베타 기능입니다", "beta_feature": "이것은 베타 기능입니다",
"beta_feedback_leave_button": "베타를 종료하려면 설정을 방문하세요.", "beta_feedback_leave_button": "베타를 종료하려면 설정을 방문하세요.",
@@ -3338,8 +3336,7 @@
"voice_call_unsupported": "%(senderName)s님이 음성 통화를 시작했습니다. (이 브라우저에서는 지원되지 않음)" "voice_call_unsupported": "%(senderName)s님이 음성 통화를 시작했습니다. (이 브라우저에서는 지원되지 않음)"
}, },
"m.file": { "m.file": {
"error_decrypting": "첨부 파일 복호화 중 오류", "error_decrypting": "첨부 파일 복호화 중 오류"
"error_invalid": "잘못된 파일입니다."
}, },
"m.image": { "m.image": {
"error": "오류로 인해 이미지를 표시할 수 없습니다", "error": "오류로 인해 이미지를 표시할 수 없습니다",
@@ -3643,13 +3640,7 @@
"one_user": "%(displayName)s님이 적고 있습니다 …", "one_user": "%(displayName)s님이 적고 있습니다 …",
"two_users": "%(names)s님과 %(lastPerson)s님이 적고 있습니다 …" "two_users": "%(names)s님과 %(lastPerson)s님이 적고 있습니다 …"
}, },
"undecryptable_tooltip": "이 메일은 복호화할 수 없습니다.", "undecryptable_tooltip": "이 메일은 복호화할 수 없습니다."
"url_preview": {
"close": "미리보기 닫기",
"show_n_more": {
"other": "%(count)s 개의 다른 미리보기를 표시"
}
}
}, },
"truncated_list_n_more": { "truncated_list_n_more": {
"other": "외 %(count)s개 더..." "other": "외 %(count)s개 더..."
+1 -11
View File
@@ -1072,8 +1072,6 @@
"upload_file": "ອັບໂຫຼດໄຟລ໌" "upload_file": "ອັບໂຫຼດໄຟລ໌"
}, },
"labs": { "labs": {
"automatic_debug_logs": "ສົ່ງບັນທຶກ ບັນຫາບັກ ໂດຍອັດຕະໂນມັດກ່ຽວກັບຂໍ້ຜິດພາດໃດໆ",
"automatic_debug_logs_decryption": "ສົ່ງບັນທຶກການດີບັ໊ກໂດຍອັດຕະໂນມັດໃນຄວາມຜິດພາດການຖອດລະຫັດ",
"beta_feature": "ນີ້ແມ່ນຄຸນສົມບັດເບຕ້າ", "beta_feature": "ນີ້ແມ່ນຄຸນສົມບັດເບຕ້າ",
"beta_feedback_leave_button": "ເພື່ອອອກຈາກເບຕ້າ, ໃຫ້ເຂົ້າໄປທີ່ການຕັ້ງຄ່າຂອງທ່ານ.", "beta_feedback_leave_button": "ເພື່ອອອກຈາກເບຕ້າ, ໃຫ້ເຂົ້າໄປທີ່ການຕັ້ງຄ່າຂອງທ່ານ.",
"beta_feedback_title": "%(featureName)s ຄຳຕິຊົມເບຕ້າ", "beta_feedback_title": "%(featureName)s ຄຳຕິຊົມເບຕ້າ",
@@ -2327,8 +2325,7 @@
"voice_call_unsupported": "%(senderName)s ການໂທດ້ວຍສຽງ. (ບຣາວເຊີນີ້ບໍ່ຮອງຮັບ)" "voice_call_unsupported": "%(senderName)s ການໂທດ້ວຍສຽງ. (ບຣາວເຊີນີ້ບໍ່ຮອງຮັບ)"
}, },
"m.file": { "m.file": {
"error_decrypting": "ເກີດຄວາມຜິດພາດໃນການຖອດລະຫັດໄຟລ໌ຄັດຕິດ", "error_decrypting": "ເກີດຄວາມຜິດພາດໃນການຖອດລະຫັດໄຟລ໌ຄັດຕິດ"
"error_invalid": "ໄຟລ໌ບໍ່ຖືກຕ້ອງ%(extra)s"
}, },
"m.image": { "m.image": {
"error_decrypting": "ການຖອດລະຫັດຮູບພາບຜິດພາດ", "error_decrypting": "ການຖອດລະຫັດຮູບພາບຜິດພາດ",
@@ -2647,13 +2644,6 @@
}, },
"one_user": "%(displayName)s ກຳລັງພິມ…", "one_user": "%(displayName)s ກຳລັງພິມ…",
"two_users": "%(names)s ແລະ %(lastPerson)s ກຳລັງພິມ…" "two_users": "%(names)s ແລະ %(lastPerson)s ກຳລັງພິມ…"
},
"url_preview": {
"close": "ປິດຕົວຢ່າງ",
"show_n_more": {
"one": "ສະແດງຕົວຢ່າງ %(count)s ອື່ນໆ",
"other": "ສະແດງຕົວຢ່າງອື່ນໆ %(count)s"
}
} }
}, },
"truncated_list_n_more": { "truncated_list_n_more": {
+1 -11
View File
@@ -824,8 +824,6 @@
"upload_file": "Įkelti failą" "upload_file": "Įkelti failą"
}, },
"labs": { "labs": {
"automatic_debug_logs": "Automatiškai siųsti derinimo žurnalus esant bet kokiai klaidai",
"automatic_debug_logs_decryption": "Automatiškai siųsti derinimo žurnalus apie iššifravimo klaidas",
"beta_feedback_leave_button": "Norėdami išeiti iš beta versijos, apsilankykite savo nustatymuose.", "beta_feedback_leave_button": "Norėdami išeiti iš beta versijos, apsilankykite savo nustatymuose.",
"bridge_state": "Rodyti informaciją apie tiltus kambario nustatymuose", "bridge_state": "Rodyti informaciją apie tiltus kambario nustatymuose",
"bridge_state_channel": "Kanalas: <channelLink/>", "bridge_state_channel": "Kanalas: <channelLink/>",
@@ -1852,8 +1850,7 @@
"voice_call_unsupported": "%(senderName)s pradėjo vaizdo skambutį. (nepalaikoma šios naršyklės)" "voice_call_unsupported": "%(senderName)s pradėjo vaizdo skambutį. (nepalaikoma šios naršyklės)"
}, },
"m.file": { "m.file": {
"error_decrypting": "Klaida iššifruojant priedą", "error_decrypting": "Klaida iššifruojant priedą"
"error_invalid": "Neteisingas failas %(extra)s"
}, },
"m.image": { "m.image": {
"error_decrypting": "Klaida iššifruojant vaizdą", "error_decrypting": "Klaida iššifruojant vaizdą",
@@ -2125,13 +2122,6 @@
}, },
"one_user": "%(displayName)s rašo …", "one_user": "%(displayName)s rašo …",
"two_users": "%(names)s ir %(lastPerson)s rašo …" "two_users": "%(names)s ir %(lastPerson)s rašo …"
},
"url_preview": {
"close": "Uždaryti peržiūrą",
"show_n_more": {
"one": "Rodyti %(count)s kitą peržiūrą",
"other": "Rodyti %(count)s kitas peržiūras"
}
} }
}, },
"truncated_list_n_more": { "truncated_list_n_more": {
+2 -12
View File
@@ -1225,8 +1225,6 @@
}, },
"labs": { "labs": {
"ask_to_join": "Iespējot aicinājumus pievienoties", "ask_to_join": "Iespējot aicinājumus pievienoties",
"automatic_debug_logs": "Automātiski nosūtīt atkļūdošanas žurnālus par jebkuru kļūdu",
"automatic_debug_logs_decryption": "Automātiski nosūtīt atkļūdošanas žurnālus par atšifrēšanas kļūdām",
"beta_description": "Kas gaidāms %(brand)s? Laboratorijas ir labākais veids, kā agri iegūt un izmēģināt jaunas iespējas un palīdzēt tās pilnveidot, pirms tās tiek izlaistas.", "beta_description": "Kas gaidāms %(brand)s? Laboratorijas ir labākais veids, kā agri iegūt un izmēģināt jaunas iespējas un palīdzēt tās pilnveidot, pirms tās tiek izlaistas.",
"beta_feature": "Šī ir beta funkcija", "beta_feature": "Šī ir beta funkcija",
"beta_feedback_leave_button": "Lai izietu no beta versijas, atveriet iestatījumus.", "beta_feedback_leave_button": "Lai izietu no beta versijas, atveriet iestatījumus.",
@@ -2822,8 +2820,7 @@
"voice_call_unsupported": "%(senderName)s uzsāka balss zvanu. (Netiek atbalstīts šajā pārlūkā)" "voice_call_unsupported": "%(senderName)s uzsāka balss zvanu. (Netiek atbalstīts šajā pārlūkā)"
}, },
"m.file": { "m.file": {
"error_decrypting": "Kļūda pielikuma atšifrēšanā", "error_decrypting": "Kļūda pielikuma atšifrēšanā"
"error_invalid": "Nederīga datne %(extra)s"
}, },
"m.image": { "m.image": {
"error": "Nevar parādīt attēlu kļūdas dēļ", "error": "Nevar parādīt attēlu kļūdas dēļ",
@@ -3192,14 +3189,7 @@
"one_user": "%(displayName)s raksta…", "one_user": "%(displayName)s raksta…",
"two_users": "%(names)s un %(lastPerson)s raksta…" "two_users": "%(names)s un %(lastPerson)s raksta…"
}, },
"undecryptable_tooltip": "Šo ziņu nevarēja atšifrēt", "undecryptable_tooltip": "Šo ziņu nevarēja atšifrēt"
"url_preview": {
"close": "Aizvērt priekšskatījumu",
"show_n_more": {
"one": "Rādīt %(count)s citu priekšskatījumu",
"other": "Rādīt %(count)s citus priekšskatījumus"
}
}
}, },
"truncated_list_n_more": { "truncated_list_n_more": {
"other": "Un par %(count)s vairāk..." "other": "Un par %(count)s vairāk..."
+2 -12
View File
@@ -1250,8 +1250,6 @@
}, },
"labs": { "labs": {
"ask_to_join": "Alefaso ny fangatahana hiditra", "ask_to_join": "Alefaso ny fangatahana hiditra",
"automatic_debug_logs": "Alefaso ho azy ny log debug amin'ny lesoka rehetra",
"automatic_debug_logs_decryption": "Alefaso ho azy ny diarin'ny debug momba ny lesoka decryption",
"beta_description": "Inona no manaraka%(brand)s ? Labs no fomba tsara indrindra hahazoana zavatra mialoha, hizaha toetra vaovao ary hanampy amin'ny famolavolana azy ireo alohany hanombohany.", "beta_description": "Inona no manaraka%(brand)s ? Labs no fomba tsara indrindra hahazoana zavatra mialoha, hizaha toetra vaovao ary hanampy amin'ny famolavolana azy ireo alohany hanombohany.",
"beta_feature": "Ity dia endri-javatra beta", "beta_feature": "Ity dia endri-javatra beta",
"beta_feedback_leave_button": "Raha te hiala amin'ny beta dia tsidiho ny kiranao.", "beta_feedback_leave_button": "Raha te hiala amin'ny beta dia tsidiho ny kiranao.",
@@ -2879,8 +2877,7 @@
"voice_call_unsupported": "%(senderName)snametraka antso an-tariby. (tsy tohanan'ity toeram-pivohizana ity)" "voice_call_unsupported": "%(senderName)snametraka antso an-tariby. (tsy tohanan'ity toeram-pivohizana ity)"
}, },
"m.file": { "m.file": {
"error_decrypting": "Nisy olana teo am-pamakiana ny famaha", "error_decrypting": "Nisy olana teo am-pamakiana ny famaha"
"error_invalid": "Rakitra tsy mety %(Supplémentaires"
}, },
"m.image": { "m.image": {
"error": "Tsy afaka mampiseho sary noho ny fahadisoana", "error": "Tsy afaka mampiseho sary noho ny fahadisoana",
@@ -3214,14 +3211,7 @@
"one_user": "%(displayName)sdia manoratra", "one_user": "%(displayName)sdia manoratra",
"two_users": "%(names)sSY%(lastPerson)s mitendry…" "two_users": "%(names)sSY%(lastPerson)s mitendry…"
}, },
"undecryptable_tooltip": "Ity hafatra ity dia tsy azo decryption", "undecryptable_tooltip": "Ity hafatra ity dia tsy azo decryption"
"url_preview": {
"close": "Akatona mialoha",
"show_n_more": {
"one": "FAMPISEHOANA%(count)s preview hafa",
"other": "FAMPISEHOANA%(count)s fijery hafa"
}
}
}, },
"truncated_list_n_more": { "truncated_list_n_more": {
"one": "", "one": "",
+2 -12
View File
@@ -1495,8 +1495,6 @@
}, },
"labs": { "labs": {
"ask_to_join": "Aktiver be om å bli med", "ask_to_join": "Aktiver be om å bli med",
"automatic_debug_logs": "Send automatisk feilsøkingslogger ved eventuelle feil",
"automatic_debug_logs_decryption": "Send automatisk feilsøkingslogger ved dekrypteringsfeil",
"beta_description": "Hva er det neste for %(brand)s? Labs er den beste måten å få ting tidlig på, teste ut nye funksjoner og hjelpe til med å forme dem før de lanseres.", "beta_description": "Hva er det neste for %(brand)s? Labs er den beste måten å få ting tidlig på, teste ut nye funksjoner og hjelpe til med å forme dem før de lanseres.",
"beta_feature": "Dette er en betafunksjon", "beta_feature": "Dette er en betafunksjon",
"beta_feedback_leave_button": "For å forlate betaen, gå til innstillingene dine.", "beta_feedback_leave_button": "For å forlate betaen, gå til innstillingene dine.",
@@ -3395,8 +3393,7 @@
"voice_call_unsupported": "%(senderName)s gjorde et taleanrop. (støttes ikke av denne nettleseren)" "voice_call_unsupported": "%(senderName)s gjorde et taleanrop. (støttes ikke av denne nettleseren)"
}, },
"m.file": { "m.file": {
"error_decrypting": "Feil ved dekryptering av vedlegg", "error_decrypting": "Feil ved dekryptering av vedlegg"
"error_invalid": "Ugyldig fil"
}, },
"m.image": { "m.image": {
"error": "Kan ikke vise bilde på grunn av feil", "error": "Kan ikke vise bilde på grunn av feil",
@@ -3734,14 +3731,7 @@
"one_user": "%(displayName)s skriver …", "one_user": "%(displayName)s skriver …",
"two_users": "%(names)s og %(lastPerson)s skriver …" "two_users": "%(names)s og %(lastPerson)s skriver …"
}, },
"undecryptable_tooltip": "Denne meldingen kunne ikke dekrypteres", "undecryptable_tooltip": "Denne meldingen kunne ikke dekrypteres"
"url_preview": {
"close": "Lukk forhåndsvisning",
"show_n_more": {
"one": "Vis %(count)s annen forhåndsvisning",
"other": "Vis %(count)s andre forhåndsvisninger"
}
}
}, },
"truncated_list_n_more": { "truncated_list_n_more": {
"Og %(count)s til...": "other" "Og %(count)s til...": "other"
+1 -11
View File
@@ -1101,8 +1101,6 @@
"upload_file": "Bestand uploaden" "upload_file": "Bestand uploaden"
}, },
"labs": { "labs": {
"automatic_debug_logs": "Automatisch foutenlogboek versturen bij een fout",
"automatic_debug_logs_decryption": "Automatisch foutopsporingslogboeken versturen bij decoderingsfouten",
"beta_feature": "Dit is een bètafunctie", "beta_feature": "Dit is een bètafunctie",
"beta_feedback_leave_button": "Om de beta te verlaten, ga naar je instellingen.", "beta_feedback_leave_button": "Om de beta te verlaten, ga naar je instellingen.",
"beta_feedback_title": "%(featureName)s Bèta-feedback", "beta_feedback_title": "%(featureName)s Bèta-feedback",
@@ -2474,8 +2472,7 @@
"voice_call_unsupported": "%(senderName)s poogt je te bellen, maar jouw browser ondersteunt dat niet" "voice_call_unsupported": "%(senderName)s poogt je te bellen, maar jouw browser ondersteunt dat niet"
}, },
"m.file": { "m.file": {
"error_decrypting": "Fout bij het ontsleutelen van de bijlage", "error_decrypting": "Fout bij het ontsleutelen van de bijlage"
"error_invalid": "Ongeldig bestand %(extra)s"
}, },
"m.image": { "m.image": {
"error_decrypting": "Fout bij het ontsleutelen van de afbeelding", "error_decrypting": "Fout bij het ontsleutelen van de afbeelding",
@@ -2793,13 +2790,6 @@
}, },
"one_user": "%(displayName)s is aan het typen…", "one_user": "%(displayName)s is aan het typen…",
"two_users": "%(names)s en %(lastPerson)s zijn aan het typen…" "two_users": "%(names)s en %(lastPerson)s zijn aan het typen…"
},
"url_preview": {
"close": "Voorbeeld sluiten",
"show_n_more": {
"one": "%(count)s andere preview weergeven",
"other": "%(count)s andere previews weergeven"
}
} }
}, },
"truncated_list_n_more": { "truncated_list_n_more": {
+2 -13
View File
@@ -1472,8 +1472,6 @@
}, },
"labs": { "labs": {
"ask_to_join": "Włącz prośby o dołączenie", "ask_to_join": "Włącz prośby o dołączenie",
"automatic_debug_logs": "Automatycznie wysyłaj logi debugowania po wystąpieniu jakiegokolwiek błędu",
"automatic_debug_logs_decryption": "Automatycznie wysyłaj logi debugowania po wystąpieniu błędów deszyfrowania",
"beta_description": "Co następne dla %(brand)s? Laboratoria to najlepsze miejsce do przetestowania nowych funkcji i możliwość pomocy w testowaniu, zanim dotrą one do szerszego grona użytkowników.", "beta_description": "Co następne dla %(brand)s? Laboratoria to najlepsze miejsce do przetestowania nowych funkcji i możliwość pomocy w testowaniu, zanim dotrą one do szerszego grona użytkowników.",
"beta_feature": "To jest funkcja beta", "beta_feature": "To jest funkcja beta",
"beta_feedback_leave_button": "Aby wyjść z bety, odwiedź swoje ustawienia.", "beta_feedback_leave_button": "Aby wyjść z bety, odwiedź swoje ustawienia.",
@@ -3356,8 +3354,7 @@
"voice_call_unsupported": "%(senderName)s wykonał połączenie głosowe. (nie wspierane przez tę przeglądarkę)" "voice_call_unsupported": "%(senderName)s wykonał połączenie głosowe. (nie wspierane przez tę przeglądarkę)"
}, },
"m.file": { "m.file": {
"error_decrypting": "Błąd odszyfrowywania załącznika", "error_decrypting": "Błąd odszyfrowywania załącznika"
"error_invalid": "Nieprawidłowy plik"
}, },
"m.image": { "m.image": {
"error": "Nie można pokazać zdjęcia z powodu błędu", "error": "Nie można pokazać zdjęcia z powodu błędu",
@@ -3704,15 +3701,7 @@
"one_user": "%(displayName)s pisze…", "one_user": "%(displayName)s pisze…",
"two_users": "%(names)s i %(lastPerson)s piszą…" "two_users": "%(names)s i %(lastPerson)s piszą…"
}, },
"undecryptable_tooltip": "Wiadomość nie mogła zostać rozszyfrowana", "undecryptable_tooltip": "Wiadomość nie mogła zostać rozszyfrowana"
"url_preview": {
"close": "Zamknij podgląd",
"show_n_more": {
"one": "Pokaż %(count)s inny podgląd",
"few": "Pokaż %(count)s inne podglądy",
"many": "Pokaż %(count)s innych podglądów"
}
}
}, },
"truncated_list_n_more": { "truncated_list_n_more": {
"other": "I %(count)s więcej…" "other": "I %(count)s więcej…"
+2 -12
View File
@@ -1391,8 +1391,6 @@
}, },
"labs": { "labs": {
"ask_to_join": "Permitir pedir para participar", "ask_to_join": "Permitir pedir para participar",
"automatic_debug_logs": "Envia automaticamente registos de depuração em qualquer erro",
"automatic_debug_logs_decryption": "Envia automaticamente registos de depuração em caso de erros de desencriptação",
"beta_description": "O que vais fazer a seguir em %(brand)s? Os laboratórios são a melhor forma de obteres informações antecipadas, testares novas funcionalidades e ajudares a moldá-las antes do seu lançamento efetivo.", "beta_description": "O que vais fazer a seguir em %(brand)s? Os laboratórios são a melhor forma de obteres informações antecipadas, testares novas funcionalidades e ajudares a moldá-las antes do seu lançamento efetivo.",
"beta_feature": "Esta é uma funcionalidade beta", "beta_feature": "Esta é uma funcionalidade beta",
"beta_feedback_leave_button": "Para sair da versão beta, visita as tuas definições.", "beta_feedback_leave_button": "Para sair da versão beta, visita as tuas definições.",
@@ -3211,8 +3209,7 @@
"voice_call_unsupported": "%(senderName)s fez uma chamada de voz. (não suportada por este navegador)" "voice_call_unsupported": "%(senderName)s fez uma chamada de voz. (não suportada por este navegador)"
}, },
"m.file": { "m.file": {
"error_decrypting": "Erro ao descriptografar o anexo", "error_decrypting": "Erro ao descriptografar o anexo"
"error_invalid": "Ficheiro inválido"
}, },
"m.image": { "m.image": {
"error": "Não é possível mostrar a imagem devido a um erro", "error": "Não é possível mostrar a imagem devido a um erro",
@@ -3552,14 +3549,7 @@
"one_user": "%(displayName)s está a escrever ...", "one_user": "%(displayName)s está a escrever ...",
"two_users": "%(names)s e %(lastPerson)s estão a escrever …" "two_users": "%(names)s e %(lastPerson)s estão a escrever …"
}, },
"undecryptable_tooltip": "Esta mensagem não pôde ser desencriptada", "undecryptable_tooltip": "Esta mensagem não pôde ser desencriptada"
"url_preview": {
"close": "Fechar pré-visualização",
"show_n_more": {
"one": "Mostra %(count)s outra pré-visualização",
"other": "Mostra %(count)s outras pré-visualizações"
}
}
}, },
"truncated_list_n_more": { "truncated_list_n_more": {
"one": "", "one": "",
+2 -12
View File
@@ -1488,8 +1488,6 @@
}, },
"labs": { "labs": {
"ask_to_join": "Habilitar pedir para participar", "ask_to_join": "Habilitar pedir para participar",
"automatic_debug_logs": "Enviar automaticamente logs de depuração em qualquer erro",
"automatic_debug_logs_decryption": "Enviar automaticamente logs sobre erros de descriptografia",
"beta_description": "O que vem por aí no %(brand)s? Os laboratórios são a melhor maneira de obter informações antecipadas, testar novos recursos e ajudar a moldá-los antes do lançamento.", "beta_description": "O que vem por aí no %(brand)s? Os laboratórios são a melhor maneira de obter informações antecipadas, testar novos recursos e ajudar a moldá-los antes do lançamento.",
"beta_feature": "Este é um recurso beta", "beta_feature": "Este é um recurso beta",
"beta_feedback_leave_button": "Para sair do beta, vá nas suas configurações.", "beta_feedback_leave_button": "Para sair do beta, vá nas suas configurações.",
@@ -3367,8 +3365,7 @@
"voice_call_unsupported": "%(senderName)s iniciou uma chamada de voz. (não suportada por este navegador)" "voice_call_unsupported": "%(senderName)s iniciou uma chamada de voz. (não suportada por este navegador)"
}, },
"m.file": { "m.file": {
"error_decrypting": "Erro ao descriptografar o anexo", "error_decrypting": "Erro ao descriptografar o anexo"
"error_invalid": "Arquivo inválido"
}, },
"m.image": { "m.image": {
"error": "Não é possível mostrar a imagem devido a um erro", "error": "Não é possível mostrar a imagem devido a um erro",
@@ -3709,14 +3706,7 @@
"one_user": "%(displayName)s está digitando…", "one_user": "%(displayName)s está digitando…",
"two_users": "%(names)s e %(lastPerson)s estão digitando…" "two_users": "%(names)s e %(lastPerson)s estão digitando…"
}, },
"undecryptable_tooltip": "Esta mensagem não pôde ser descriptografada", "undecryptable_tooltip": "Esta mensagem não pôde ser descriptografada"
"url_preview": {
"close": "Fechar a visualização",
"show_n_more": {
"one": "Exibir a %(count)s outra prévia",
"other": "Exibir as %(count)s outras prévias"
}
}
}, },
"truncated_list_n_more": { "truncated_list_n_more": {
"other": "E %(count)s mais..." "other": "E %(count)s mais..."
+2 -12
View File
@@ -1493,8 +1493,6 @@
}, },
"labs": { "labs": {
"ask_to_join": "Включить запрос на присоединение", "ask_to_join": "Включить запрос на присоединение",
"automatic_debug_logs": "Автоматическая отправка журналов отладки при любой ошибке",
"automatic_debug_logs_decryption": "Автоматическая отправка журналов отладки при ошибках расшифровки",
"beta_description": "Что нового в %(brand)s? Labs — это лучший способ получить и испытать новые функции, помогая сформировать их перед выходом в свет.", "beta_description": "Что нового в %(brand)s? Labs — это лучший способ получить и испытать новые функции, помогая сформировать их перед выходом в свет.",
"beta_feature": "Это бета-функция", "beta_feature": "Это бета-функция",
"beta_feedback_leave_button": "Чтобы выйти из бета-версии, зайдите в настройки.", "beta_feedback_leave_button": "Чтобы выйти из бета-версии, зайдите в настройки.",
@@ -3401,8 +3399,7 @@
"voice_call_unsupported": "%(senderName)s сделал голосовой вызов. (не поддерживается этим браузером)" "voice_call_unsupported": "%(senderName)s сделал голосовой вызов. (не поддерживается этим браузером)"
}, },
"m.file": { "m.file": {
"error_decrypting": "Ошибка расшифровки вложения", "error_decrypting": "Ошибка расшифровки вложения"
"error_invalid": "Недопустимый формат файла"
}, },
"m.image": { "m.image": {
"error": "Невозможно показать изображение из-за ошибки", "error": "Невозможно показать изображение из-за ошибки",
@@ -3745,14 +3742,7 @@
"one_user": "%(displayName)s печатает…", "one_user": "%(displayName)s печатает…",
"two_users": "%(names)s и %(lastPerson)s печатают…" "two_users": "%(names)s и %(lastPerson)s печатают…"
}, },
"undecryptable_tooltip": "Это сообщение не удалось расшифровать", "undecryptable_tooltip": "Это сообщение не удалось расшифровать"
"url_preview": {
"close": "Закрыть предпросмотр",
"show_n_more": {
"one": "Показать %(count)s другой предварительный просмотр",
"other": "Показать %(count)s других предварительных просмотров"
}
}
}, },
"truncated_list_n_more": { "truncated_list_n_more": {
"one": "%(count)s...", "one": "%(count)s...",
+2 -12
View File
@@ -1509,8 +1509,6 @@
}, },
"labs": { "labs": {
"ask_to_join": "Umožniť požiadať o pripojenie", "ask_to_join": "Umožniť požiadať o pripojenie",
"automatic_debug_logs": "Automatické odosielanie záznamov ladenia pri akejkoľvek chybe",
"automatic_debug_logs_decryption": "Automatické odosielanie záznamov ladenia pri chybe dešifrovania",
"beta_description": "Čo vás čaká v aplikácii %(brand)s? Laboratóriá sú najlepším spôsobom, ako získať funkcie v predstihu, otestovať nové funkcie a pomôcť ich vytvoriť ešte pred ich skutočným spustením.", "beta_description": "Čo vás čaká v aplikácii %(brand)s? Laboratóriá sú najlepším spôsobom, ako získať funkcie v predstihu, otestovať nové funkcie a pomôcť ich vytvoriť ešte pred ich skutočným spustením.",
"beta_feature": "Toto je funkcia vo verzii beta", "beta_feature": "Toto je funkcia vo verzii beta",
"beta_feedback_leave_button": "Ak chcete opustiť beta verziu, navštívte svoje nastavenia.", "beta_feedback_leave_button": "Ak chcete opustiť beta verziu, navštívte svoje nastavenia.",
@@ -3437,8 +3435,7 @@
"voice_call_unsupported": "%(senderName)s uskutočnil telefonát. (Nepodporované týmto prehliadačom)" "voice_call_unsupported": "%(senderName)s uskutočnil telefonát. (Nepodporované týmto prehliadačom)"
}, },
"m.file": { "m.file": {
"error_decrypting": "Chyba pri dešifrovaní prílohy", "error_decrypting": "Chyba pri dešifrovaní prílohy"
"error_invalid": "Neplatný súbor"
}, },
"m.image": { "m.image": {
"error": "Nie je možné zobraziť obrázok kvôli chybe", "error": "Nie je možné zobraziť obrázok kvôli chybe",
@@ -3811,14 +3808,7 @@
"one_user": "%(displayName)s píše …", "one_user": "%(displayName)s píše …",
"two_users": "%(names)s a %(lastPerson)s píšu …" "two_users": "%(names)s a %(lastPerson)s píšu …"
}, },
"undecryptable_tooltip": "Túto správu sa nepodarilo dešifrovať", "undecryptable_tooltip": "Túto správu sa nepodarilo dešifrovať"
"url_preview": {
"close": "Zatvoriť náhľad",
"show_n_more": {
"one": "Zobraziť %(count)s ďalší náhľad",
"other": "Zobraziť %(count)s ďalších náhľadov"
}
}
}, },
"truncated_list_n_more": { "truncated_list_n_more": {
"other": "A %(count)s ďalších…" "other": "A %(count)s ďalších…"
+2 -12
View File
@@ -1191,8 +1191,6 @@
"upload_file": "Ngarkoni një kartelë" "upload_file": "Ngarkoni një kartelë"
}, },
"labs": { "labs": {
"automatic_debug_logs": "Me çdo gabim, dërgo automatikisht regjistra diagnostikimi",
"automatic_debug_logs_decryption": "Dërgo automatikisht regjistra diagnostikimi, gjatë gabimesh shfshehtëzimi",
"beta_description": "Ç’vjen më pas për %(brand)s? Labs janë mënyra më e mirë për t’i pasur gjërat që herët, për të testuar veçori të reja dhe për të ndihmuar t’u jepet formë para se të hidhen faktikisht në qarkullim.", "beta_description": "Ç’vjen më pas për %(brand)s? Labs janë mënyra më e mirë për t’i pasur gjërat që herët, për të testuar veçori të reja dhe për të ndihmuar t’u jepet formë para se të hidhen faktikisht në qarkullim.",
"beta_feature": "Kjo është një veçori beta", "beta_feature": "Kjo është një veçori beta",
"beta_feedback_leave_button": "Që të braktisni beta-n, vizitoni rregullimet tuaja.", "beta_feedback_leave_button": "Që të braktisni beta-n, vizitoni rregullimet tuaja.",
@@ -2702,8 +2700,7 @@
"voice_call_unsupported": "%(senderName)s bëri një thirrje zanore. (e pambuluar nga ky shfletues)" "voice_call_unsupported": "%(senderName)s bëri një thirrje zanore. (e pambuluar nga ky shfletues)"
}, },
"m.file": { "m.file": {
"error_decrypting": "Gabim në shfshehtëzim bashkëngjitjeje", "error_decrypting": "Gabim në shfshehtëzim bashkëngjitjeje"
"error_invalid": "Kartelë e pavlefshme%(extra)s"
}, },
"m.image": { "m.image": {
"error": "S’arrihet të shihet figurë, për shkak gabimi", "error": "S’arrihet të shihet figurë, për shkak gabimi",
@@ -3029,14 +3026,7 @@
"one_user": "%(displayName)s po shtyp …", "one_user": "%(displayName)s po shtyp …",
"two_users": "%(names)s dhe %(lastPerson)s të tjerë po shtypin …" "two_users": "%(names)s dhe %(lastPerson)s të tjerë po shtypin …"
}, },
"undecryptable_tooltip": "Ky mesazh s’u shfshehtëzua dot", "undecryptable_tooltip": "Ky mesazh s’u shfshehtëzua dot"
"url_preview": {
"close": "Mbylle paraparjen",
"show_n_more": {
"one": "Shfaq %(count)s paraparje tjetër",
"other": "Shfaq %(count)s paraparje të tjera"
}
}
}, },
"truncated_list_n_more": { "truncated_list_n_more": {
"other": "Dhe %(count)s të tjerë…" "other": "Dhe %(count)s të tjerë…"
+2 -12
View File
@@ -1438,8 +1438,6 @@
}, },
"labs": { "labs": {
"ask_to_join": "Aktivera fråga om att gå med", "ask_to_join": "Aktivera fråga om att gå med",
"automatic_debug_logs": "Skicka automatiskt felsökningsloggar vid fel",
"automatic_debug_logs_decryption": "Skicka automatiskt avbuggningsloggar vid avkrypteringsfel",
"beta_description": "Vad händer härnäst med %(brand)s? Experiment är det bästa sättet att få saker tidigt, pröva nya funktioner, och hjälpa till att forma dem innan de egentligen släpps.", "beta_description": "Vad händer härnäst med %(brand)s? Experiment är det bästa sättet att få saker tidigt, pröva nya funktioner, och hjälpa till att forma dem innan de egentligen släpps.",
"beta_feature": "Det här är en betafunktion", "beta_feature": "Det här är en betafunktion",
"beta_feedback_leave_button": "För att lämna betan, besök dina inställningar.", "beta_feedback_leave_button": "För att lämna betan, besök dina inställningar.",
@@ -3299,8 +3297,7 @@
"voice_call_unsupported": "%(senderName)s ringde ett röstsamtal. (stöds inte av denna webbläsare)" "voice_call_unsupported": "%(senderName)s ringde ett röstsamtal. (stöds inte av denna webbläsare)"
}, },
"m.file": { "m.file": {
"error_decrypting": "Fel vid avkryptering av bilagan", "error_decrypting": "Fel vid avkryptering av bilagan"
"error_invalid": "Ogiltig fil"
}, },
"m.image": { "m.image": {
"error": "Kunde inte visa bild på grund av fel", "error": "Kunde inte visa bild på grund av fel",
@@ -3641,14 +3638,7 @@
"one_user": "%(displayName)s skriver …", "one_user": "%(displayName)s skriver …",
"two_users": "%(names)s och %(lastPerson)s skriver …" "two_users": "%(names)s och %(lastPerson)s skriver …"
}, },
"undecryptable_tooltip": "Det här meddelandet kunde inte avkrypteras", "undecryptable_tooltip": "Det här meddelandet kunde inte avkrypteras"
"url_preview": {
"close": "Stäng förhandsgranskning",
"show_n_more": {
"one": "Visa %(count)s annan förhandsgranskning",
"other": "Visa %(count)s andra förhandsgranskningar"
}
}
}, },
"truncated_list_n_more": { "truncated_list_n_more": {
"other": "Och %(count)s till…" "other": "Och %(count)s till…"
+2 -12
View File
@@ -1389,8 +1389,6 @@
}, },
"labs": { "labs": {
"ask_to_join": "Katılma isteğini etkinleştir", "ask_to_join": "Katılma isteğini etkinleştir",
"automatic_debug_logs": "Herhangi bir hatada otomatik olarak hata ayıklama günlükleri gönder",
"automatic_debug_logs_decryption": "Şifre çözme hatalarında otomatik olarak hata ayıklama günlükleri gönder",
"beta_description": "%(brand)s için sırada ne var? Labsr, bir şeyleri erkenden elde etmenin, yeni özellikleri test etmenin ve piyasaya sürülmeden önce şekillendirmeye yardımcı olmanın en iyi yoludur.", "beta_description": "%(brand)s için sırada ne var? Labsr, bir şeyleri erkenden elde etmenin, yeni özellikleri test etmenin ve piyasaya sürülmeden önce şekillendirmeye yardımcı olmanın en iyi yoludur.",
"beta_feature": "Bu bir beta özelliğidir", "beta_feature": "Bu bir beta özelliğidir",
"beta_feedback_leave_button": "Beta sürümünden çıkmak için ayarlarınızı ziyaret edin.", "beta_feedback_leave_button": "Beta sürümünden çıkmak için ayarlarınızı ziyaret edin.",
@@ -3201,8 +3199,7 @@
"voice_call_unsupported": "%(senderName)s bir çağrı başlattı. (Bu tarayıcı tarafından desteklenmiyor)" "voice_call_unsupported": "%(senderName)s bir çağrı başlattı. (Bu tarayıcı tarafından desteklenmiyor)"
}, },
"m.file": { "m.file": {
"error_decrypting": "Ek şifresini çözme hatası", "error_decrypting": "Ek şifresini çözme hatası"
"error_invalid": "Geçersiz dosya"
}, },
"m.image": { "m.image": {
"error": "Hata nedeniyle görüntü gösterilemiyor", "error": "Hata nedeniyle görüntü gösterilemiyor",
@@ -3538,14 +3535,7 @@
"one_user": "%(displayName)s yazıyor…", "one_user": "%(displayName)s yazıyor…",
"two_users": "%(names)s ve %(lastPerson)s yazıyor…" "two_users": "%(names)s ve %(lastPerson)s yazıyor…"
}, },
"undecryptable_tooltip": "Bu mesajın şifresi çözülemedi", "undecryptable_tooltip": "Bu mesajın şifresi çözülemedi"
"url_preview": {
"close": "Önizlemeyi kapat",
"show_n_more": {
"one": "%(count)s diğer önizlemeyi göster",
"other": "%(count)s diğer önizlemeyi göster"
}
}
}, },
"truncated_list_n_more": { "truncated_list_n_more": {
"other": "ve %(count)s kez daha..." "other": "ve %(count)s kez daha..."
+2 -12
View File
@@ -1492,8 +1492,6 @@
}, },
"labs": { "labs": {
"ask_to_join": "Увімкнути запити на приєднання", "ask_to_join": "Увімкнути запити на приєднання",
"automatic_debug_logs": "Автоматично надсилати журнал зневадження про всі помилки",
"automatic_debug_logs_decryption": "Автоматично надсилати журнали зневадження при збоях розшифрування",
"beta_description": "Що далі для %(brand)s? Експериментальні — це найкращий спосіб спробувати функції на ранній стадії розробки, протестувати їх і допомогти сформувати їх до фактичного запуску.", "beta_description": "Що далі для %(brand)s? Експериментальні — це найкращий спосіб спробувати функції на ранній стадії розробки, протестувати їх і допомогти сформувати їх до фактичного запуску.",
"beta_feature": "Це бета-можливість", "beta_feature": "Це бета-можливість",
"beta_feedback_leave_button": "Щоб вийти з бета-тестування, перейдіть до налаштувань.", "beta_feedback_leave_button": "Щоб вийти з бета-тестування, перейдіть до налаштувань.",
@@ -3392,8 +3390,7 @@
"voice_call_unsupported": "%(senderName)s розпочинає голосовий виклик. (не підтримується цим браузером)" "voice_call_unsupported": "%(senderName)s розпочинає голосовий виклик. (не підтримується цим браузером)"
}, },
"m.file": { "m.file": {
"error_decrypting": "Помилка розшифрування вкладення", "error_decrypting": "Помилка розшифрування вкладення"
"error_invalid": "Недійсний файл"
}, },
"m.image": { "m.image": {
"error": "Не вдалося показати зображення через помилку", "error": "Не вдалося показати зображення через помилку",
@@ -3743,14 +3740,7 @@
"one_user": "%(displayName)s пише…", "one_user": "%(displayName)s пише…",
"two_users": "%(names)s та %(lastPerson)s пишуть…" "two_users": "%(names)s та %(lastPerson)s пишуть…"
}, },
"undecryptable_tooltip": "Не вдалося розшифрувати це повідомлення", "undecryptable_tooltip": "Не вдалося розшифрувати це повідомлення"
"url_preview": {
"close": "Закрити попередній перегляд",
"show_n_more": {
"one": "Показати %(count)s інший попередній перегляд",
"other": "Показати %(count)s інших попередніх переглядів"
}
}
}, },
"truncated_list_n_more": { "truncated_list_n_more": {
"one": "", "one": "",
+2 -12
View File
@@ -1186,8 +1186,6 @@
}, },
"labs": { "labs": {
"ask_to_join": "Bật yêu cầu để tham gia", "ask_to_join": "Bật yêu cầu để tham gia",
"automatic_debug_logs": "Tự động gửi debug log khi có bất kỳ lỗi nào",
"automatic_debug_logs_decryption": "Tự động gửi nhật ký gỡ lỗi mỗi lúc gặp lỗi khi giải mã",
"beta_description": "Những gì sắp đến với %(brand)s? Phòng thí điểm là nơi tốt nhất để có mọi thứ sớm, thử nghiệm tính năng mới và giúp hoàn thiện trước khi chúng thực sự ra mắt.", "beta_description": "Những gì sắp đến với %(brand)s? Phòng thí điểm là nơi tốt nhất để có mọi thứ sớm, thử nghiệm tính năng mới và giúp hoàn thiện trước khi chúng thực sự ra mắt.",
"beta_feature": "Đây là một tính năng thử nghiệm beta", "beta_feature": "Đây là một tính năng thử nghiệm beta",
"beta_feedback_leave_button": "Để rời khỏi bản beta, hãy truy cập mục cài đặt của bạn.", "beta_feedback_leave_button": "Để rời khỏi bản beta, hãy truy cập mục cài đặt của bạn.",
@@ -2653,8 +2651,7 @@
"voice_call_unsupported": "%(senderName)s đã thực hiện một cuộc gọi thoại. (không được hỗ trợ bởi trình duyệt này)" "voice_call_unsupported": "%(senderName)s đã thực hiện một cuộc gọi thoại. (không được hỗ trợ bởi trình duyệt này)"
}, },
"m.file": { "m.file": {
"error_decrypting": "Lỗi khi giải mã tệp đính kèm", "error_decrypting": "Lỗi khi giải mã tệp đính kèm"
"error_invalid": "Tệp%(extra)s không hợp lệ"
}, },
"m.image": { "m.image": {
"error": "Không thể hiển thị hình ảnh do lỗi", "error": "Không thể hiển thị hình ảnh do lỗi",
@@ -2970,14 +2967,7 @@
"one_user": "%(displayName)s đang gõ …", "one_user": "%(displayName)s đang gõ …",
"two_users": "%(names)s và %(lastPerson)s đang gõ …" "two_users": "%(names)s và %(lastPerson)s đang gõ …"
}, },
"undecryptable_tooltip": "Không giải mã được tin nhắn", "undecryptable_tooltip": "Không giải mã được tin nhắn"
"url_preview": {
"close": "Đóng bản xem trước",
"show_n_more": {
"one": "Hiển thị %(count)s bản xem trước khác",
"other": "Hiển thị %(count)s bản xem trước khác"
}
}
}, },
"truncated_list_n_more": { "truncated_list_n_more": {
"other": "Và %(count)s thêm…" "other": "Và %(count)s thêm…"
+1 -11
View File
@@ -1158,8 +1158,6 @@
}, },
"labs": { "labs": {
"ask_to_join": "启用 “需要验证加入请求”", "ask_to_join": "启用 “需要验证加入请求”",
"automatic_debug_logs": "遇到任何错误自动发送调试日志",
"automatic_debug_logs_decryption": "自动发送有关解密错误的debug日志",
"beta_description": "%(brand)s的下一步是什么?实验室是早期获得东西、测试新功能和在它们发布前帮助塑造的最好方式。", "beta_description": "%(brand)s的下一步是什么?实验室是早期获得东西、测试新功能和在它们发布前帮助塑造的最好方式。",
"beta_feature": "这是beta功能", "beta_feature": "这是beta功能",
"beta_feedback_leave_button": "要离开beta,请访问你的设置。", "beta_feedback_leave_button": "要离开beta,请访问你的设置。",
@@ -2576,8 +2574,7 @@
"voice_call_unsupported": "%(senderName)s 发起了语音通话。(此浏览器不支持)" "voice_call_unsupported": "%(senderName)s 发起了语音通话。(此浏览器不支持)"
}, },
"m.file": { "m.file": {
"error_decrypting": "解密附件时出错", "error_decrypting": "解密附件时出错"
"error_invalid": "无效文件 %(extra)s"
}, },
"m.image": { "m.image": {
"error_decrypting": "解密图像时出错", "error_decrypting": "解密图像时出错",
@@ -2897,13 +2894,6 @@
}, },
"one_user": "%(displayName)s 正在输入…", "one_user": "%(displayName)s 正在输入…",
"two_users": "%(names)s和%(lastPerson)s正在输入……" "two_users": "%(names)s和%(lastPerson)s正在输入……"
},
"url_preview": {
"close": "关闭预览",
"show_n_more": {
"one": "显示 %(count)s 个其他预览",
"other": "显示 %(count)s 个其他预览"
}
} }
}, },
"truncated_list_n_more": { "truncated_list_n_more": {
+2 -12
View File
@@ -1256,8 +1256,6 @@
}, },
"labs": { "labs": {
"ask_to_join": "啟用要求加入", "ask_to_join": "啟用要求加入",
"automatic_debug_logs": "自動在發生錯誤時傳送除錯日誌",
"automatic_debug_logs_decryption": "自動傳送關於解密錯誤的除錯紀錄檔",
"beta_description": "%(brand)s 的下一步是什麼?實驗室是提早取得資訊、測試新功能,並在實際釋出前協助塑造它們的最佳方式。", "beta_description": "%(brand)s 的下一步是什麼?實驗室是提早取得資訊、測試新功能,並在實際釋出前協助塑造它們的最佳方式。",
"beta_feature": "這是 Beta 測試功能", "beta_feature": "這是 Beta 測試功能",
"beta_feedback_leave_button": "請到設定頁面離開 Beta 測試版。", "beta_feedback_leave_button": "請到設定頁面離開 Beta 測試版。",
@@ -2892,8 +2890,7 @@
"voice_call_unsupported": "%(senderName)s 撥打了語音通話。(不被此瀏覽器支援)" "voice_call_unsupported": "%(senderName)s 撥打了語音通話。(不被此瀏覽器支援)"
}, },
"m.file": { "m.file": {
"error_decrypting": "解密附件時出錯", "error_decrypting": "解密附件時出錯"
"error_invalid": "不存在的文件 %(extra)s"
}, },
"m.image": { "m.image": {
"error": "因為錯誤而無法顯示圖片", "error": "因為錯誤而無法顯示圖片",
@@ -3228,14 +3225,7 @@
"one_user": "%(displayName)s 正在打字…", "one_user": "%(displayName)s 正在打字…",
"two_users": "%(names)s 與 %(lastPerson)s 正在打字…" "two_users": "%(names)s 與 %(lastPerson)s 正在打字…"
}, },
"undecryptable_tooltip": "此訊息無法解密", "undecryptable_tooltip": "此訊息無法解密"
"url_preview": {
"close": "關閉預覽",
"show_n_more": {
"one": "顯示 %(count)s 個其他預覽",
"other": "顯示 %(count)s 個其他預覽"
}
}
}, },
"truncated_list_n_more": { "truncated_list_n_more": {
"other": "與更多 %(count)s 個…" "other": "與更多 %(count)s 個…"
@@ -1086,10 +1086,10 @@ describe("<MatrixChat />", () => {
getComponent(); getComponent();
// Then we are asked to verify our device // Then we are asked to verify our device
await screen.findByRole("heading", { name: "Confirm your identity", level: 2 }); await screen.findByRole("heading", { name: "Confirm your digital identity", level: 2 });
// Sanity: we are not racing with another screen update, so this heading stays visible // Sanity: we are not racing with another screen update, so this heading stays visible
await screen.findByRole("heading", { name: "Confirm your identity", level: 2 }); await screen.findByRole("heading", { name: "Confirm your digital identity", level: 2 });
}); });
it("should not open app after cancelling device verify if unskippable verification is on", async () => { it("should not open app after cancelling device verify if unskippable verification is on", async () => {
// See https://github.com/element-hq/element-web/issues/29230 // See https://github.com/element-hq/element-web/issues/29230
@@ -1106,7 +1106,7 @@ describe("<MatrixChat />", () => {
getComponent(); getComponent();
// When we click "Use another device" // When we click "Use another device"
await screen.findByRole("heading", { name: "Confirm your identity", level: 2 }); await screen.findByRole("heading", { name: "Confirm your digital identity", level: 2 });
const verify = screen.getByRole("button", { name: "Use another device" }); const verify = screen.getByRole("button", { name: "Use another device" });
act(() => verify.click()); act(() => verify.click());
@@ -1115,7 +1115,7 @@ describe("<MatrixChat />", () => {
act(() => closeButton.click()); act(() => closeButton.click());
// Then we are not allowed in - we are still being asked to verify // Then we are not allowed in - we are still being asked to verify
await screen.findByRole("heading", { name: "Confirm your identity", level: 2 }); await screen.findByRole("heading", { name: "Confirm your digital identity", level: 2 });
}); });
describe("when query params have a loginToken", () => { describe("when query params have a loginToken", () => {
@@ -1160,7 +1160,7 @@ describe("<MatrixChat />", () => {
); );
// Then we are not allowed in - we are being asked to verify // Then we are not allowed in - we are being asked to verify
await screen.findByRole("heading", { name: "Confirm your identity", level: 2 }); await screen.findByRole("heading", { name: "Confirm your digital identity", level: 2 });
}); });
}); });
@@ -1382,7 +1382,7 @@ describe("<MatrixChat />", () => {
await getComponentAndLogin(); await getComponentAndLogin();
// Complete security begin screen is rendered // Complete security begin screen is rendered
await screen.findByText("Confirm your identity"); await screen.findByText("Confirm your digital identity");
expect(loginClient.getCrypto()!.userHasCrossSigningKeys).toHaveBeenCalled(); expect(loginClient.getCrypto()!.userHasCrossSigningKeys).toHaveBeenCalled();
}); });
@@ -53,7 +53,7 @@ describe("<UserMenu>", () => {
const spy = jest.spyOn(defaultDispatcher, "dispatch"); const spy = jest.spyOn(defaultDispatcher, "dispatch");
screen.getByRole("button", { name: /User menu/i }).click(); screen.getByRole("button", { name: /User menu/i }).click();
(await screen.findByRole("menuitem", { name: /Sign out/i })).click(); (await screen.findByRole("menuitem", { name: /Remove this device/i })).click();
await waitFor(() => { await waitFor(() => {
expect(spy).toHaveBeenCalledWith({ action: "logout" }); expect(spy).toHaveBeenCalledWith({ action: "logout" });
}); });
@@ -77,7 +77,7 @@ describe("<UserMenu>", () => {
const spy = jest.spyOn(defaultDispatcher, "dispatch"); const spy = jest.spyOn(defaultDispatcher, "dispatch");
screen.getByRole("button", { name: /User menu/i }).click(); screen.getByRole("button", { name: /User menu/i }).click();
(await screen.findByRole("menuitem", { name: /Sign out/i })).click(); (await screen.findByRole("menuitem", { name: /Remove this device/i })).click();
await waitFor(() => { await waitFor(() => {
expect(spy).toHaveBeenCalledWith({ action: "logout" }); expect(spy).toHaveBeenCalledWith({ action: "logout" });
}); });
@@ -103,7 +103,7 @@ describe("<UserMenu>", () => {
const spy = jest.spyOn(Modal, "createDialog"); const spy = jest.spyOn(Modal, "createDialog");
screen.getByRole("button", { name: /User menu/i }).click(); screen.getByRole("button", { name: /User menu/i }).click();
(await screen.findByRole("menuitem", { name: /Sign out/i })).click(); (await screen.findByRole("menuitem", { name: /Remove this device/i })).click();
await waitFor(() => { await waitFor(() => {
expect(spy).toHaveBeenCalledWith(LogoutDialog); expect(spy).toHaveBeenCalledWith(LogoutDialog);
@@ -92,7 +92,7 @@ describe("CompleteSecurity", () => {
await act(async () => panel.getByRole("button", { name: "Can't confirm?" }).click()); await act(async () => panel.getByRole("button", { name: "Can't confirm?" }).click());
// Then the reset identity dialog appears // Then the reset identity dialog appears
expect(screen.getByRole("heading", { name: "You need to reset your identity" })).toBeInTheDocument(); expect(screen.getByRole("heading", { name: "You need to reset your digital identity" })).toBeInTheDocument();
expect(panel.getByRole("button", { name: "Continue" })).toBeInTheDocument(); expect(panel.getByRole("button", { name: "Continue" })).toBeInTheDocument();
}); });
@@ -117,7 +117,7 @@ describe("CompleteSecurity", () => {
// Then the reset identity dialog appears, and should have a different // Then the reset identity dialog appears, and should have a different
// title from when there were no verification methods available. // title from when there were no verification methods available.
expect( expect(
screen.getByRole("heading", { name: "Are you sure you want to reset your identity?" }), screen.getByRole("heading", { name: "Are you sure you want to reset your digital identity?" }),
).toBeInTheDocument(); ).toBeInTheDocument();
}); });
@@ -142,7 +142,7 @@ describe("CompleteSecurity", () => {
// Then the reset identity dialog appears, and should have a different // Then the reset identity dialog appears, and should have a different
// title from when there were no verification methods available. // title from when there were no verification methods available.
expect( expect(
screen.getByRole("heading", { name: "Are you sure you want to reset your identity?" }), screen.getByRole("heading", { name: "Are you sure you want to reset your digital identity?" }),
).toBeInTheDocument(); ).toBeInTheDocument();
}); });
}); });
@@ -367,16 +367,16 @@ describe("<ForgotPassword>", () => {
}); });
}); });
describe("and clicking »Sign out of all devices« and »Reset password«", () => { describe("and clicking »Remove other devices« and »Reset password«", () => {
beforeEach(async () => { beforeEach(async () => {
await click(screen.getByText("Sign out of all devices")); await click(screen.getByText("Remove other devices"));
await click(screen.getByText("Reset password")); await click(screen.getByText("Reset password"));
}); });
it("should show the sign out warning dialog", async () => { it("should show the removing warning dialog", async () => {
await expect( await expect(
screen.findByText( screen.findByText(
"Signing out your devices will delete the message encryption keys stored on them, making encrypted chat history unreadable.", "Removing your devices will delete the message encryption keys stored on them, making encrypted chat history unreadable.",
), ),
).resolves.toBeInTheDocument(); ).resolves.toBeInTheDocument();
@@ -71,7 +71,7 @@ exports[`CompleteSecurity Allows verifying with another device if one is availab
<h2 <h2
class="_typography_6v6n8_153 _font-heading-sm-semibold_6v6n8_93" class="_typography_6v6n8_153 _font-heading-sm-semibold_6v6n8_93"
> >
Confirm your identity Confirm your digital identity
</h2> </h2>
</div> </div>
<div <div
@@ -146,7 +146,7 @@ exports[`CompleteSecurity Allows verifying with another device if one is availab
role="button" role="button"
tabindex="0" tabindex="0"
> >
Sign out Remove this device
</button> </button>
</div> </div>
</div> </div>
@@ -263,7 +263,7 @@ exports[`CompleteSecurity Allows verifying with recovery key if one is available
<h2 <h2
class="_typography_6v6n8_153 _font-heading-sm-semibold_6v6n8_93" class="_typography_6v6n8_153 _font-heading-sm-semibold_6v6n8_93"
> >
Confirm your identity Confirm your digital identity
</h2> </h2>
</div> </div>
<div <div
@@ -327,7 +327,7 @@ exports[`CompleteSecurity Allows verifying with recovery key if one is available
role="button" role="button"
tabindex="0" tabindex="0"
> >
Sign out Remove this device
</button> </button>
</div> </div>
</div> </div>
@@ -136,9 +136,9 @@ describe("useUserInfoHeaderViewModel", () => {
danger: true, danger: true,
description: ( description: (
<div> <div>
Deactivating this user will log them out and prevent them from logging back in. Additionally, Deactivating this user will remove their devices and prevent them from logging back in.
they will leave all the rooms they are in. This action cannot be reversed. Are you sure you want Additionally, they will leave all the rooms they are in. This action cannot be reversed. Are you
to deactivate this user? sure you want to deactivate this user?
</div> </div>
), ),
title: "Deactivate user?", title: "Deactivate user?",
@@ -63,10 +63,10 @@ exports[`<MasUnlockCrossSigningAuthEntry/> should render 1`] = `
<h2 <h2
class="_typography_6v6n8_153 _font-heading-sm-semibold_6v6n8_93" class="_typography_6v6n8_153 _font-heading-sm-semibold_6v6n8_93"
> >
Go to your account to reset your identity Go to your account to reset your digital identity
</h2> </h2>
<span> <span>
You're about to go to your matrix.org account to reset your identity. Once you have completed reset on your account, please return here and click Retry. You're about to go to your matrix.org account to reset your digital identity. Once you have completed reset on your account, please return here and click Retry.
</span> </span>
</div> </div>
<div <div
@@ -41,7 +41,7 @@ describe("LogoutDialog", () => {
it("shows a regular dialog when crypto is disabled", async () => { it("shows a regular dialog when crypto is disabled", async () => {
mocked(mockClient.getCrypto).mockReturnValue(undefined); mocked(mockClient.getCrypto).mockReturnValue(undefined);
const rendered = renderComponent(); const rendered = renderComponent();
await rendered.findByText("Are you sure you want to sign out?"); await rendered.findByText("Are you sure you want to remove this device?");
expect(rendered.container).toMatchSnapshot(); expect(rendered.container).toMatchSnapshot();
}); });
@@ -49,7 +49,7 @@ describe("LogoutDialog", () => {
mockCrypto.getActiveSessionBackupVersion.mockResolvedValue("1"); mockCrypto.getActiveSessionBackupVersion.mockResolvedValue("1");
mockCrypto.isSecretStorageReady.mockResolvedValue(true); mockCrypto.isSecretStorageReady.mockResolvedValue(true);
const rendered = renderComponent(); const rendered = renderComponent();
await rendered.findByText("Are you sure you want to sign out?"); await rendered.findByText("Are you sure you want to remove this device?");
}); });
it("prompts user to set up recovery if backups are enabled but recovery isn't", async () => { it("prompts user to set up recovery if backups are enabled but recovery isn't", async () => {
@@ -31,7 +31,7 @@ exports[`ConfirmKeyStorageOffDialog renders 1`] = `
</h2> </h2>
</div> </div>
<span> <span>
If you sign out of all your devices you will lose your message history and will need to verify all your existing contacts again. If you remove all your devices you will lose your message history and will need to verify all your existing contacts again.
<br /> <br />
<a <a
href="https://element.io/help#encryption5" href="https://element.io/help#encryption5"
@@ -35,10 +35,10 @@ exports[`LogoutDialog Prompts user to go to settings if there is a backup on the
Encrypted messages are secured with end-to-end encryption. Only you and the recipient(s) have the keys to read these messages. Encrypted messages are secured with end-to-end encryption. Only you and the recipient(s) have the keys to read these messages.
</p> </p>
<p> <p>
When you sign out, these keys will be deleted from this device, which means you won't be able to read encrypted messages unless you have the keys for them on your other devices, or backed them up to the server. When you remove this device you won't be able to read encrypted messages unless you have the keys for them on your other devices, or backed them up to the server.
</p> </p>
<p> <p>
Back up your keys before signing out to avoid losing them. Back up your keys before removing this device to avoid losing them.
</p> </p>
</div> </div>
</div> </div>
@@ -136,10 +136,10 @@ exports[`LogoutDialog Prompts user to go to settings if there is no backup on th
Encrypted messages are secured with end-to-end encryption. Only you and the recipient(s) have the keys to read these messages. Encrypted messages are secured with end-to-end encryption. Only you and the recipient(s) have the keys to read these messages.
</p> </p>
<p> <p>
When you sign out, these keys will be deleted from this device, which means you won't be able to read encrypted messages unless you have the keys for them on your other devices, or backed them up to the server. When you remove this device you won't be able to read encrypted messages unless you have the keys for them on your other devices, or backed them up to the server.
</p> </p>
<p> <p>
Back up your keys before signing out to avoid losing them. Back up your keys before removing this device to avoid losing them.
</p> </p>
</div> </div>
</div> </div>
@@ -224,14 +224,14 @@ exports[`LogoutDialog shows a regular dialog when crypto is disabled 1`] = `
class="mx_Heading_h3 mx_Dialog_title" class="mx_Heading_h3 mx_Dialog_title"
id="mx_BaseDialog_title" id="mx_BaseDialog_title"
> >
Sign out Remove this device
</h1> </h1>
</div> </div>
<div <div
class="mx_Dialog_content" class="mx_Dialog_content"
id="mx_Dialog_content" id="mx_Dialog_content"
> >
Are you sure you want to sign out? Are you sure you want to remove this device?
</div> </div>
<div <div
class="mx_Dialog_buttons" class="mx_Dialog_buttons"
@@ -250,7 +250,7 @@ exports[`LogoutDialog shows a regular dialog when crypto is disabled 1`] = `
data-testid="dialog-primary-button" data-testid="dialog-primary-button"
type="button" type="button"
> >
Sign out Remove this device
</button> </button>
</span> </span>
</div> </div>
@@ -309,7 +309,7 @@ describe("EventTile", () => {
], ],
[EventShieldReason.MISMATCHED_SENDER_KEY, "Encrypted by an unverified session"], [EventShieldReason.MISMATCHED_SENDER_KEY, "Encrypted by an unverified session"],
[EventShieldReason.SENT_IN_CLEAR, "Not encrypted"], [EventShieldReason.SENT_IN_CLEAR, "Not encrypted"],
[EventShieldReason.VERIFICATION_VIOLATION, "Sender's verified identity was reset"], [EventShieldReason.VERIFICATION_VIOLATION, "Sender's verified digital identity was reset"],
[ [
EventShieldReason.MISMATCHED_SENDER, EventShieldReason.MISMATCHED_SENDER,
"The sender of the event does not match the owner of the device that sent it.", "The sender of the event does not match the owner of the device that sent it.",
@@ -145,7 +145,7 @@ describe("UserIdentityWarning", () => {
renderComponent(client, room); renderComponent(client, room);
await waitFor(() => await waitFor(() =>
expect(getWarningByText("Alice's (@alice:example.org) identity was reset.")).toBeInTheDocument(), expect(getWarningByText("Alice's (@alice:example.org) digital identity was reset.")).toBeInTheDocument(),
); );
await userEvent.click(screen.getByRole("button")!); await userEvent.click(screen.getByRole("button")!);
await waitFor(() => expect(crypto.pinCurrentUserIdentity).toHaveBeenCalledWith("@alice:example.org")); await waitFor(() => expect(crypto.pinCurrentUserIdentity).toHaveBeenCalledWith("@alice:example.org"));
@@ -166,7 +166,7 @@ describe("UserIdentityWarning", () => {
renderComponent(client, room); renderComponent(client, room);
await waitFor(() => await waitFor(() =>
expect(getWarningByText("Alice's (@alice:example.org) identity was reset.")).toBeInTheDocument(), expect(getWarningByText("Alice's (@alice:example.org) digital identity was reset.")).toBeInTheDocument(),
); );
expect( expect(
@@ -190,7 +190,7 @@ describe("UserIdentityWarning", () => {
renderComponent(client, room); renderComponent(client, room);
await sleep(10); // give it some time to finish initialising await sleep(10); // give it some time to finish initialising
expect(() => getWarningByText("Alice's (@alice:example.org) identity was reset.")).toThrow(); expect(() => getWarningByText("Alice's (@alice:example.org) digital identity was reset.")).toThrow();
}); });
// We don't display warnings in non-encrypted rooms, but if encryption is // We don't display warnings in non-encrypted rooms, but if encryption is
@@ -210,7 +210,7 @@ describe("UserIdentityWarning", () => {
renderComponent(client, room); renderComponent(client, room);
await sleep(10); // give it some time to finish initialising await sleep(10); // give it some time to finish initialising
expect(() => getWarningByText("Alice's (@alice:example.org) identity was reset.")).toThrow(); expect(() => getWarningByText("Alice's (@alice:example.org) digital identity was reset.")).toThrow();
// Encryption gets enabled in the room. We should now warn that Alice's // Encryption gets enabled in the room. We should now warn that Alice's
// identity changed. // identity changed.
@@ -231,7 +231,7 @@ describe("UserIdentityWarning", () => {
null, null,
); );
await waitFor(() => await waitFor(() =>
expect(getWarningByText("Alice's (@alice:example.org) identity was reset.")).toBeInTheDocument(), expect(getWarningByText("Alice's (@alice:example.org) digital identity was reset.")).toBeInTheDocument(),
); );
}); });
@@ -250,7 +250,9 @@ describe("UserIdentityWarning", () => {
crypto.pinCurrentUserIdentity = jest.fn(); crypto.pinCurrentUserIdentity = jest.fn();
renderComponent(client, room); renderComponent(client, room);
await waitFor(() => expect(getWarningByText("@a:example.org's identity was reset.")).toBeInTheDocument()); await waitFor(() =>
expect(getWarningByText("@a:example.org's digital identity was reset.")).toBeInTheDocument(),
);
}); });
it("Ensure existing prompt stays even if a new violation with lower lexicographic order detected", async () => { it("Ensure existing prompt stays even if a new violation with lower lexicographic order detected", async () => {
@@ -266,7 +268,9 @@ describe("UserIdentityWarning", () => {
crypto.pinCurrentUserIdentity = jest.fn(); crypto.pinCurrentUserIdentity = jest.fn();
renderComponent(client, room); renderComponent(client, room);
await waitFor(() => expect(getWarningByText("@b:example.org's identity was reset.")).toBeInTheDocument()); await waitFor(() =>
expect(getWarningByText("@b:example.org's digital identity was reset.")).toBeInTheDocument(),
);
// Simulate a new member joined with lower lexico order and also in violation // Simulate a new member joined with lower lexico order and also in violation
mockMembershipForRoom(room, ["@a:example.org", "@b:example.org"]); mockMembershipForRoom(room, ["@a:example.org", "@b:example.org"]);
@@ -276,7 +280,9 @@ describe("UserIdentityWarning", () => {
}); });
// We should still display the warning for @b:example.org // We should still display the warning for @b:example.org
await waitFor(() => expect(getWarningByText("@b:example.org's identity was reset.")).toBeInTheDocument()); await waitFor(() =>
expect(getWarningByText("@b:example.org's digital identity was reset.")).toBeInTheDocument(),
);
}); });
}); });
@@ -296,7 +302,7 @@ describe("UserIdentityWarning", () => {
await sleep(50); await sleep(50);
}); });
expect(() => getWarningByText("Alice's (@alice:example.org) identity was reset.")).toThrow(); expect(() => getWarningByText("Alice's (@alice:example.org) digital identity was reset.")).toThrow();
// The user changes their identity, so we should show the warning. // The user changes their identity, so we should show the warning.
act(() => { act(() => {
@@ -306,7 +312,7 @@ describe("UserIdentityWarning", () => {
}); });
await waitFor(() => await waitFor(() =>
expect(getWarningByText("Alice's (@alice:example.org) identity was reset.")).toBeInTheDocument(), expect(getWarningByText("Alice's (@alice:example.org) digital identity was reset.")).toBeInTheDocument(),
); );
// Simulate the user's new identity having been approved, so we no // Simulate the user's new identity having been approved, so we no
@@ -317,7 +323,7 @@ describe("UserIdentityWarning", () => {
client.emit(CryptoEvent.UserTrustStatusChanged, "@alice:example.org", newStatus); client.emit(CryptoEvent.UserTrustStatusChanged, "@alice:example.org", newStatus);
}); });
await waitFor(() => await waitFor(() =>
expect(() => getWarningByText("Alice's (@alice:example.org) identity was reset.")).toThrow(), expect(() => getWarningByText("Alice's (@alice:example.org) digital identity was reset.")).toThrow(),
); );
}); });
@@ -342,7 +348,7 @@ describe("UserIdentityWarning", () => {
}); });
await waitFor(() => await waitFor(() =>
expect(getWarningByText("@alice:example.org's identity was reset.")).toBeInTheDocument(), expect(getWarningByText("@alice:example.org's digital identity was reset.")).toBeInTheDocument(),
); );
// Bob is invited. His identity needs approval, so we should show a // Bob is invited. His identity needs approval, so we should show a
@@ -359,8 +365,12 @@ describe("UserIdentityWarning", () => {
emitMembershipChange(client, "@alice:example.org", "leave"); emitMembershipChange(client, "@alice:example.org", "leave");
}); });
await waitFor(() => expect(() => getWarningByText("@alice:example.org's identity was reset.")).toThrow()); await waitFor(() =>
await waitFor(() => expect(getWarningByText("@bob:example.org's identity was reset.")).toBeInTheDocument()); expect(() => getWarningByText("@alice:example.org's digital identity was reset.")).toThrow(),
);
await waitFor(() =>
expect(getWarningByText("@bob:example.org's digital identity was reset.")).toBeInTheDocument(),
);
}); });
it("when invited users cannot see encrypted messages", async () => { it("when invited users cannot see encrypted messages", async () => {
@@ -382,7 +392,7 @@ describe("UserIdentityWarning", () => {
emitMembershipChange(client, "@alice:example.org", "join"); emitMembershipChange(client, "@alice:example.org", "join");
}); });
await waitFor(() => await waitFor(() =>
expect(getWarningByText("@alice:example.org's identity was reset.")).toBeInTheDocument(), expect(getWarningByText("@alice:example.org's digital identity was reset.")).toBeInTheDocument(),
); );
// Bob is invited. His identity needs approval, but we don't encrypt // Bob is invited. His identity needs approval, but we don't encrypt
@@ -402,8 +412,12 @@ describe("UserIdentityWarning", () => {
mockMembershipForRoom(room, [["@bob:example.org", "invited"]]); mockMembershipForRoom(room, [["@bob:example.org", "invited"]]);
emitMembershipChange(client, "@alice:example.org", "leave"); emitMembershipChange(client, "@alice:example.org", "leave");
}); });
await waitFor(() => expect(() => getWarningByText("@alice:example.org's identity was reset.")).toThrow()); await waitFor(() =>
await waitFor(() => expect(() => getWarningByText("@bob:example.org's identity was reset.")).toThrow()); expect(() => getWarningByText("@alice:example.org's digital identity was reset.")).toThrow(),
);
await waitFor(() =>
expect(() => getWarningByText("@bob:example.org's digital identity was reset.")).toThrow(),
);
}); });
it("when member leaves immediately after component is loaded", async () => { it("when member leaves immediately after component is loaded", async () => {
@@ -427,7 +441,7 @@ describe("UserIdentityWarning", () => {
renderComponent(client, room); renderComponent(client, room);
await sleep(10); await sleep(10);
}); });
expect(() => getWarningByText("@alice:example.org's identity was reset.")).toThrow(); expect(() => getWarningByText("@alice:example.org's digital identity was reset.")).toThrow();
}); });
it("when member leaves immediately after joining", async () => { it("when member leaves immediately after joining", async () => {
@@ -475,7 +489,7 @@ describe("UserIdentityWarning", () => {
null, null,
); );
await sleep(10); // give it some time to finish await sleep(10); // give it some time to finish
expect(() => getWarningByText("@alice:example.org's identity was reset.")).toThrow(); expect(() => getWarningByText("@alice:example.org's digital identity was reset.")).toThrow();
}); });
}); });
@@ -495,7 +509,7 @@ describe("UserIdentityWarning", () => {
renderComponent(client, room); renderComponent(client, room);
// We should warn about Alice's identity first. // We should warn about Alice's identity first.
await waitFor(() => await waitFor(() =>
expect(getWarningByText("Alice's (@alice:example.org) identity was reset.")).toBeInTheDocument(), expect(getWarningByText("Alice's (@alice:example.org) digital identity was reset.")).toBeInTheDocument(),
); );
// Simulate Alice's new identity having been approved, so now we warn // Simulate Alice's new identity having been approved, so now we warn
@@ -511,7 +525,9 @@ describe("UserIdentityWarning", () => {
}); });
client.emit(CryptoEvent.UserTrustStatusChanged, "@alice:example.org", newStatus); client.emit(CryptoEvent.UserTrustStatusChanged, "@alice:example.org", newStatus);
}); });
await waitFor(() => expect(getWarningByText("@bob:example.org's identity was reset.")).toBeInTheDocument()); await waitFor(() =>
expect(getWarningByText("@bob:example.org's digital identity was reset.")).toBeInTheDocument(),
);
}); });
it("displays the next user when the verification requirement is withdrawn", async () => { it("displays the next user when the verification requirement is withdrawn", async () => {
@@ -531,7 +547,7 @@ describe("UserIdentityWarning", () => {
renderComponent(client, room); renderComponent(client, room);
// We should warn about Alice's identity first. // We should warn about Alice's identity first.
await waitFor(() => await waitFor(() =>
expect(getWarningByText("Alice's (@alice:example.org) identity was reset.")).toBeInTheDocument(), expect(getWarningByText("Alice's (@alice:example.org) digital identity was reset.")).toBeInTheDocument(),
); );
// Simulate Alice's new identity having been approved, so now we warn // Simulate Alice's new identity having been approved, so now we warn
@@ -550,6 +566,8 @@ describe("UserIdentityWarning", () => {
new UserVerificationStatus(false, false, false, false), new UserVerificationStatus(false, false, false, false),
); );
}); });
await waitFor(() => expect(getWarningByText("@bob:example.org's identity was reset.")).toBeInTheDocument()); await waitFor(() =>
expect(getWarningByText("@bob:example.org's digital identity was reset.")).toBeInTheDocument(),
);
}); });
}); });
@@ -221,7 +221,7 @@ describe("ProfileSettings", () => {
it("signs out directly if no rooms are encrypted", async () => { it("signs out directly if no rooms are encrypted", async () => {
renderProfileSettings(toastRack, client); renderProfileSettings(toastRack, client);
const signOutButton = await screen.findByText("Sign out"); const signOutButton = await screen.findByText("Remove this device");
await userEvent.click(signOutButton); await userEvent.click(signOutButton);
expect(dis.dispatch).toHaveBeenCalledWith({ action: "logout" }); expect(dis.dispatch).toHaveBeenCalledWith({ action: "logout" });
@@ -238,7 +238,7 @@ describe("ProfileSettings", () => {
renderProfileSettings(toastRack, client); renderProfileSettings(toastRack, client);
const signOutButton = await screen.findByText("Sign out"); const signOutButton = await screen.findByText("Remove this device");
await userEvent.click(signOutButton); await userEvent.click(signOutButton);
expect(Modal.createDialog).toHaveBeenCalled(); expect(Modal.createDialog).toHaveBeenCalled();
@@ -120,7 +120,7 @@ HTMLCollection [
<span <span
class="mx_DeviceDetails_signOutButtonContent" class="mx_DeviceDetails_signOutButtonContent"
> >
Sign out of this session Remove this session
</span> </span>
</div> </div>
</section> </section>
@@ -110,7 +110,7 @@ exports[`<DeviceDetails /> renders a verified device 1`] = `
<span <span
class="mx_DeviceDetails_signOutButtonContent" class="mx_DeviceDetails_signOutButtonContent"
> >
Sign out of this session Remove this session
</span> </span>
</div> </div>
</section> </section>
@@ -174,7 +174,7 @@ exports[`<DeviceDetails /> renders device with metadata 1`] = `
<p <p
class="mx_DeviceSecurityCard_description" class="mx_DeviceSecurityCard_description"
> >
Verify or sign out from this session for best security and reliability. Verify or remove this session for best security and reliability.
<div <div
class="mx_AccessibleButton mx_LearnMore_button mx_AccessibleButton_hasKind mx_AccessibleButton_kind_link_inline" class="mx_AccessibleButton mx_LearnMore_button mx_AccessibleButton_hasKind mx_AccessibleButton_kind_link_inline"
role="button" role="button"
@@ -326,7 +326,7 @@ exports[`<DeviceDetails /> renders device with metadata 1`] = `
<span <span
class="mx_DeviceDetails_signOutButtonContent" class="mx_DeviceDetails_signOutButtonContent"
> >
Sign out of this session Remove this session
</span> </span>
</div> </div>
</section> </section>
@@ -390,7 +390,7 @@ exports[`<DeviceDetails /> renders device without metadata 1`] = `
<p <p
class="mx_DeviceSecurityCard_description" class="mx_DeviceSecurityCard_description"
> >
Verify or sign out from this session for best security and reliability. Verify or remove this session for best security and reliability.
<div <div
class="mx_AccessibleButton mx_LearnMore_button mx_AccessibleButton_hasKind mx_AccessibleButton_kind_link_inline" class="mx_AccessibleButton mx_LearnMore_button mx_AccessibleButton_hasKind mx_AccessibleButton_kind_link_inline"
role="button" role="button"
@@ -442,7 +442,7 @@ exports[`<DeviceDetails /> renders device without metadata 1`] = `
<span <span
class="mx_DeviceDetails_signOutButtonContent" class="mx_DeviceDetails_signOutButtonContent"
> >
Sign out of this session Remove this session
</span> </span>
</div> </div>
</section> </section>
@@ -123,7 +123,7 @@ exports[`<DeviceVerificationStatusCard /> renders an unverified device 1`] = `
<p <p
class="mx_DeviceSecurityCard_description" class="mx_DeviceSecurityCard_description"
> >
Verify or sign out from this session for best security and reliability. Verify or remove this session for best security and reliability.
<div <div
class="mx_AccessibleButton mx_LearnMore_button mx_AccessibleButton_hasKind mx_AccessibleButton_kind_link_inline" class="mx_AccessibleButton mx_LearnMore_button mx_AccessibleButton_hasKind mx_AccessibleButton_kind_link_inline"
role="button" role="button"
@@ -38,7 +38,7 @@ HTMLCollection [
class="mx_DeviceSecurityCard_description" class="mx_DeviceSecurityCard_description"
> >
<span> <span>
Consider signing out from old sessions (90 days or older) you don't use anymore. Consider removing old sessions (90 days or older) you don't use anymore.
<div <div
class="mx_AccessibleButton mx_LearnMore_button mx_AccessibleButton_hasKind mx_AccessibleButton_kind_link_inline" class="mx_AccessibleButton mx_LearnMore_button mx_AccessibleButton_hasKind mx_AccessibleButton_kind_link_inline"
role="button" role="button"
@@ -89,7 +89,7 @@ HTMLCollection [
class="mx_DeviceSecurityCard_description" class="mx_DeviceSecurityCard_description"
> >
<span> <span>
Verify your sessions for enhanced secure messaging or sign out from those you don't recognize or use anymore. Verify your sessions for enhanced secure messaging or remove from those you don't recognize or use anymore.
<div <div
class="mx_AccessibleButton mx_LearnMore_button mx_AccessibleButton_hasKind mx_AccessibleButton_kind_link_inline" class="mx_AccessibleButton mx_LearnMore_button mx_AccessibleButton_hasKind mx_AccessibleButton_kind_link_inline"
role="button" role="button"
@@ -142,7 +142,7 @@ HTMLCollection [
class="mx_DeviceSecurityCard_description" class="mx_DeviceSecurityCard_description"
> >
<span> <span>
For best security, sign out from any session that you don't recognize or use anymore. For best security, remove any session that you don't recognize or use anymore.
<div <div
class="mx_AccessibleButton mx_LearnMore_button mx_AccessibleButton_hasKind mx_AccessibleButton_kind_link_inline" class="mx_AccessibleButton mx_LearnMore_button mx_AccessibleButton_hasKind mx_AccessibleButton_kind_link_inline"
role="button" role="button"
@@ -56,7 +56,7 @@ exports[`<SecurityRecommendations /> renders both cards when user has both unver
<p <p
class="mx_DeviceSecurityCard_description" class="mx_DeviceSecurityCard_description"
> >
Verify your sessions for enhanced secure messaging or sign out from those you don't recognize or use anymore. Verify your sessions for enhanced secure messaging or remove from those you don't recognize or use anymore.
<div <div
class="mx_AccessibleButton mx_LearnMore_button mx_AccessibleButton_hasKind mx_AccessibleButton_kind_link_inline" class="mx_AccessibleButton mx_LearnMore_button mx_AccessibleButton_hasKind mx_AccessibleButton_kind_link_inline"
role="button" role="button"
@@ -104,7 +104,7 @@ exports[`<SecurityRecommendations /> renders both cards when user has both unver
<p <p
class="mx_DeviceSecurityCard_description" class="mx_DeviceSecurityCard_description"
> >
Consider signing out from old sessions (90 days or older) you don't use anymore. Consider removing old sessions (90 days or older) you don't use anymore.
<div <div
class="mx_AccessibleButton mx_LearnMore_button mx_AccessibleButton_hasKind mx_AccessibleButton_kind_link_inline" class="mx_AccessibleButton mx_LearnMore_button mx_AccessibleButton_hasKind mx_AccessibleButton_kind_link_inline"
role="button" role="button"
@@ -188,7 +188,7 @@ exports[`<SecurityRecommendations /> renders inactive devices section when user
<p <p
class="mx_DeviceSecurityCard_description" class="mx_DeviceSecurityCard_description"
> >
Verify your sessions for enhanced secure messaging or sign out from those you don't recognize or use anymore. Verify your sessions for enhanced secure messaging or remove from those you don't recognize or use anymore.
<div <div
class="mx_AccessibleButton mx_LearnMore_button mx_AccessibleButton_hasKind mx_AccessibleButton_kind_link_inline" class="mx_AccessibleButton mx_LearnMore_button mx_AccessibleButton_hasKind mx_AccessibleButton_kind_link_inline"
role="button" role="button"
@@ -236,7 +236,7 @@ exports[`<SecurityRecommendations /> renders inactive devices section when user
<p <p
class="mx_DeviceSecurityCard_description" class="mx_DeviceSecurityCard_description"
> >
Consider signing out from old sessions (90 days or older) you don't use anymore. Consider removing old sessions (90 days or older) you don't use anymore.
<div <div
class="mx_AccessibleButton mx_LearnMore_button mx_AccessibleButton_hasKind mx_AccessibleButton_kind_link_inline" class="mx_AccessibleButton mx_LearnMore_button mx_AccessibleButton_hasKind mx_AccessibleButton_kind_link_inline"
role="button" role="button"
@@ -320,7 +320,7 @@ exports[`<SecurityRecommendations /> renders unverified devices section when use
<p <p
class="mx_DeviceSecurityCard_description" class="mx_DeviceSecurityCard_description"
> >
Verify your sessions for enhanced secure messaging or sign out from those you don't recognize or use anymore. Verify your sessions for enhanced secure messaging or remove from those you don't recognize or use anymore.
<div <div
class="mx_AccessibleButton mx_LearnMore_button mx_AccessibleButton_hasKind mx_AccessibleButton_kind_link_inline" class="mx_AccessibleButton mx_LearnMore_button mx_AccessibleButton_hasKind mx_AccessibleButton_kind_link_inline"
role="button" role="button"
@@ -368,7 +368,7 @@ exports[`<SecurityRecommendations /> renders unverified devices section when use
<p <p
class="mx_DeviceSecurityCard_description" class="mx_DeviceSecurityCard_description"
> >
Consider signing out from old sessions (90 days or older) you don't use anymore. Consider removing old sessions (90 days or older) you don't use anymore.
<div <div
class="mx_AccessibleButton mx_LearnMore_button mx_AccessibleButton_hasKind mx_AccessibleButton_kind_link_inline" class="mx_AccessibleButton mx_LearnMore_button mx_AccessibleButton_hasKind mx_AccessibleButton_kind_link_inline"
role="button" role="button"
@@ -4,30 +4,30 @@ exports[`deleteDevices() opens interactive auth dialog when delete fails with 40
{ {
"m.login.sso": { "m.login.sso": {
"1": { "1": {
"body": "Confirm logging out these devices by using Single Sign On to prove your identity.", "body": "Confirm removing these devices by using Single Sign On to prove your identity.",
"continueKind": "primary", "continueKind": "primary",
"continueText": "Single Sign On", "continueText": "Single Sign On",
"title": "Use Single Sign On to continue", "title": "Use Single Sign On to continue",
}, },
"2": { "2": {
"body": "Click the button below to confirm signing out these devices.", "body": "Click the button below to confirm removing these devices.",
"continueKind": "danger", "continueKind": "danger",
"continueText": "Sign out devices", "continueText": "Remove devices",
"title": "Confirm signing out these devices", "title": "Confirm removing these devices",
}, },
}, },
"org.matrix.login.sso": { "org.matrix.login.sso": {
"1": { "1": {
"body": "Confirm logging out these devices by using Single Sign On to prove your identity.", "body": "Confirm removing these devices by using Single Sign On to prove your identity.",
"continueKind": "primary", "continueKind": "primary",
"continueText": "Single Sign On", "continueText": "Single Sign On",
"title": "Use Single Sign On to continue", "title": "Use Single Sign On to continue",
}, },
"2": { "2": {
"body": "Click the button below to confirm signing out these devices.", "body": "Click the button below to confirm removing these devices.",
"continueKind": "danger", "continueKind": "danger",
"continueText": "Sign out devices", "continueText": "Remove devices",
"title": "Confirm signing out these devices", "title": "Confirm removing these devices",
}, },
}, },
} }
@@ -42,10 +42,10 @@ describe("<RecoveryPanel />", () => {
const onChangeRecoveryKeyClick = jest.fn(); const onChangeRecoveryKeyClick = jest.fn();
const { asFragment } = renderRecoverPanel(onChangeRecoveryKeyClick); const { asFragment } = renderRecoverPanel(onChangeRecoveryKeyClick);
await waitFor(() => screen.getByRole("button", { name: "Set up recovery" })); await waitFor(() => screen.getByRole("button", { name: "Get recovery key" }));
expect(asFragment()).toMatchSnapshot(); expect(asFragment()).toMatchSnapshot();
await user.click(screen.getByRole("button", { name: "Set up recovery" })); await user.click(screen.getByRole("button", { name: "Get recovery key" }));
expect(onChangeRecoveryKeyClick).toHaveBeenCalledWith(true); expect(onChangeRecoveryKeyClick).toHaveBeenCalledWith(true);
}); });
@@ -212,7 +212,7 @@ exports[`<ChangeRecoveryKey /> flow to set up a recovery key should ask the user
aria-current="page" aria-current="page"
class="_last-page_1xygz_30" class="_last-page_1xygz_30"
> >
Set up recovery Get recovery key
</span> </span>
</li> </li>
</ol> </ol>
@@ -371,7 +371,7 @@ exports[`<ChangeRecoveryKey /> flow to set up a recovery key should ask the user
aria-current="page" aria-current="page"
class="_last-page_1xygz_30" class="_last-page_1xygz_30"
> >
Set up recovery Get recovery key
</span> </span>
</li> </li>
</ol> </ol>
@@ -552,7 +552,7 @@ exports[`<ChangeRecoveryKey /> flow to set up a recovery key should display info
aria-current="page" aria-current="page"
class="_last-page_1xygz_30" class="_last-page_1xygz_30"
> >
Set up recovery Get recovery key
</span> </span>
</li> </li>
</ol> </ol>
@@ -582,7 +582,7 @@ exports[`<ChangeRecoveryKey /> flow to set up a recovery key should display info
<h2 <h2
class="_typography_6v6n8_153 _font-heading-sm-semibold_6v6n8_93" class="_typography_6v6n8_153 _font-heading-sm-semibold_6v6n8_93"
> >
Set up recovery Get recovery key
</h2> </h2>
<span> <span>
Your key storage is protected by a recovery key. If you need a new recovery key after setup, you can recreate it by selecting ‘Change recovery key’. Your key storage is protected by a recovery key. If you need a new recovery key after setup, you can recreate it by selecting ‘Change recovery key’.
@@ -669,7 +669,7 @@ exports[`<ChangeRecoveryKey /> flow to set up a recovery key should display the
aria-current="page" aria-current="page"
class="_last-page_1xygz_30" class="_last-page_1xygz_30"
> >
Set up recovery Get recovery key
</span> </span>
</li> </li>
</ol> </ol>
@@ -125,7 +125,7 @@ exports[`<DeleteKeyStoragePanel /> should match snapshot 1`] = `
d="M6.293 6.293a1 1 0 0 1 1.414 0L12 10.586l4.293-4.293a1 1 0 1 1 1.414 1.414L13.414 12l4.293 4.293a1 1 0 0 1-1.414 1.414L12 13.414l-4.293 4.293a1 1 0 0 1-1.414-1.414L10.586 12 6.293 7.707a1 1 0 0 1 0-1.414" d="M6.293 6.293a1 1 0 0 1 1.414 0L12 10.586l4.293-4.293a1 1 0 1 1 1.414 1.414L13.414 12l4.293 4.293a1 1 0 0 1-1.414 1.414L12 13.414l-4.293 4.293a1 1 0 0 1-1.414-1.414L10.586 12 6.293 7.707a1 1 0 0 1 0-1.414"
/> />
</svg> </svg>
You will lose access to your encrypted messages if you are signed out of Element everywhere You will lose access to your encrypted messages if you're not signed in to any devices
</li> </li>
</ul> </ul>
</div> </div>
@@ -12,9 +12,9 @@ exports[`<RecoveryPanel /> should allow to change the recovery key when everythi
<h2 <h2
class="_typography_6v6n8_153 _font-heading-sm-semibold_6v6n8_93 mx_SettingsHeader" class="_typography_6v6n8_153 _font-heading-sm-semibold_6v6n8_93 mx_SettingsHeader"
> >
Recovery Backup
</h2> </h2>
Recover your cryptographic identity and message history with a recovery key if you’ve lost all your existing devices. Your chats are automatically backed up with end-to-end encryption. To restore this backup and retain your digital identity when you lose access to all your devices, you will need your recovery key.
</div> </div>
<button <button
class="_button_13vu4_8 _has-icon_13vu4_60" class="_button_13vu4_8 _has-icon_13vu4_60"
@@ -53,9 +53,9 @@ exports[`<RecoveryPanel /> should ask to set up a recovery key when there is no
<h2 <h2
class="_typography_6v6n8_153 _font-heading-sm-semibold_6v6n8_93 mx_SettingsHeader mx_SettingsHeader_recommended" class="_typography_6v6n8_153 _font-heading-sm-semibold_6v6n8_93 mx_SettingsHeader mx_SettingsHeader_recommended"
> >
Recovery Backup
</h2> </h2>
Recover your cryptographic identity and message history with a recovery key if you’ve lost all your existing devices. Your chats are automatically backed up with end-to-end encryption. To restore this backup and retain your digital identity when you lose access to all your devices, you will need your recovery key.
</div> </div>
<button <button
class="_button_13vu4_8 _has-icon_13vu4_60" class="_button_13vu4_8 _has-icon_13vu4_60"
@@ -76,7 +76,7 @@ exports[`<RecoveryPanel /> should ask to set up a recovery key when there is no
d="M7 14q-.824 0-1.412-.588A1.93 1.93 0 0 1 5 12q0-.825.588-1.412A1.93 1.93 0 0 1 7 10q.824 0 1.412.588Q9 11.175 9 12t-.588 1.412A1.93 1.93 0 0 1 7 14m0 4q-2.5 0-4.25-1.75T1 12t1.75-4.25T7 6q1.676 0 3.037.825A6.2 6.2 0 0 1 12.2 9h8.375q.2 0 .387.075.188.075.338.225l2 2q.15.15.212.325.063.175.063.375t-.062.375a.9.9 0 0 1-.213.325l-3.175 3.175a1 1 0 0 1-.3.2q-.175.075-.35.1a.8.8 0 0 1-.35-.025.9.9 0 0 1-.325-.175L17.5 15l-1.425 1.075a.95.95 0 0 1-.887.15.9.9 0 0 1-.288-.15L13.375 15H12.2a6.2 6.2 0 0 1-2.162 2.175Q8.675 18 7 18m0-2q1.4 0 2.463-.85A4.03 4.03 0 0 0 10.875 13H14l1.45 1.025L17.5 12.5l1.775 1.375L21.15 12l-1-1h-9.275a4.03 4.03 0 0 0-1.412-2.15Q8.4 8 7 8 5.35 8 4.175 9.175T3 12t1.175 2.825T7 16" d="M7 14q-.824 0-1.412-.588A1.93 1.93 0 0 1 5 12q0-.825.588-1.412A1.93 1.93 0 0 1 7 10q.824 0 1.412.588Q9 11.175 9 12t-.588 1.412A1.93 1.93 0 0 1 7 14m0 4q-2.5 0-4.25-1.75T1 12t1.75-4.25T7 6q1.676 0 3.037.825A6.2 6.2 0 0 1 12.2 9h8.375q.2 0 .387.075.188.075.338.225l2 2q.15.15.212.325.063.175.063.375t-.062.375a.9.9 0 0 1-.213.325l-3.175 3.175a1 1 0 0 1-.3.2q-.175.075-.35.1a.8.8 0 0 1-.35-.025.9.9 0 0 1-.325-.175L17.5 15l-1.425 1.075a.95.95 0 0 1-.887.15.9.9 0 0 1-.288-.15L13.375 15H12.2a6.2 6.2 0 0 1-2.162 2.175Q8.675 18 7 18m0-2q1.4 0 2.463-.85A4.03 4.03 0 0 0 10.875 13H14l1.45 1.025L17.5 12.5l1.775 1.375L21.15 12l-1-1h-9.275a4.03 4.03 0 0 0-1.412-2.15Q8.4 8 7 8 5.35 8 4.175 9.175T3 12t1.175 2.825T7 16"
/> />
</svg> </svg>
Set up recovery Get recovery key
</button> </button>
</div> </div>
</DocumentFragment> </DocumentFragment>
@@ -94,9 +94,9 @@ exports[`<RecoveryPanel /> should be in loading state when checking the recovery
<h2 <h2
class="_typography_6v6n8_153 _font-heading-sm-semibold_6v6n8_93 mx_SettingsHeader" class="_typography_6v6n8_153 _font-heading-sm-semibold_6v6n8_93 mx_SettingsHeader"
> >
Recovery Backup
</h2> </h2>
Recover your cryptographic identity and message history with a recovery key if you’ve lost all your existing devices. Your chats are automatically backed up with end-to-end encryption. To restore this backup and retain your digital identity when you lose access to all your devices, you will need your recovery key.
</div> </div>
<svg <svg
aria-label="Loading…" aria-label="Loading…"
@@ -12,12 +12,12 @@ exports[`<RecoveyPanelOutOfSync /> should render 1`] = `
<h2 <h2
class="_typography_6v6n8_153 _font-heading-sm-semibold_6v6n8_93 mx_SettingsHeader" class="_typography_6v6n8_153 _font-heading-sm-semibold_6v6n8_93 mx_SettingsHeader"
> >
Recovery Backup
</h2> </h2>
<div <div
class="mx_SettingsSubheader" class="mx_SettingsSubheader"
> >
Recover your cryptographic identity and message history with a recovery key if you’ve lost all your existing devices. Your chats are automatically backed up with end-to-end encryption. To restore this backup and retain your digital identity when you lose access to all your devices, you will need your recovery key.
<span <span
class="mx_SettingsSubheader_error" class="mx_SettingsSubheader_error"
> >
@@ -80,7 +80,7 @@ exports[`<ResetIdentityPanel /> should display the 'forgot recovery key' variant
<h2 <h2
class="_typography_6v6n8_153 _font-heading-sm-semibold_6v6n8_93" class="_typography_6v6n8_153 _font-heading-sm-semibold_6v6n8_93"
> >
Forgot your recovery key? You’ll need to reset your identity. Forgot your recovery key? You’ll need to reset your digital identity.
</h2> </h2>
</div> </div>
<div <div
@@ -263,7 +263,7 @@ exports[`<ResetIdentityPanel /> should display the 'sync failed' variant correct
<h2 <h2
class="_typography_6v6n8_153 _font-heading-sm-semibold_6v6n8_93" class="_typography_6v6n8_153 _font-heading-sm-semibold_6v6n8_93"
> >
Failed to sync key storage. You need to reset your identity. Failed to sync key storage. You need to reset your digital identity.
</h2> </h2>
</div> </div>
<div <div
@@ -446,7 +446,7 @@ exports[`<ResetIdentityPanel /> should reset the encryption when the continue bu
<h2 <h2
class="_typography_6v6n8_153 _font-heading-sm-semibold_6v6n8_93" class="_typography_6v6n8_153 _font-heading-sm-semibold_6v6n8_93"
> >
Are you sure you want to reset your identity? Are you sure you want to reset your digital identity?
</h2> </h2>
</div> </div>
<div <div
@@ -632,7 +632,7 @@ exports[`<ResetIdentityPanel /> should reset the encryption when the continue bu
<h2 <h2
class="_typography_6v6n8_153 _font-heading-sm-semibold_6v6n8_93" class="_typography_6v6n8_153 _font-heading-sm-semibold_6v6n8_93"
> >
Are you sure you want to reset your identity? Are you sure you want to reset your digital identity?
</h2> </h2>
</div> </div>
<div <div
@@ -71,7 +71,7 @@ describe("<EncryptionUserSettingsTab />", () => {
it("should display the recovery panel when key storage is enabled", async () => { it("should display the recovery panel when key storage is enabled", async () => {
jest.spyOn(matrixClient.getCrypto()!, "getActiveSessionBackupVersion").mockResolvedValue("1"); jest.spyOn(matrixClient.getCrypto()!, "getActiveSessionBackupVersion").mockResolvedValue("1");
renderComponent(); renderComponent();
await waitFor(() => expect(screen.getByText("Recovery")).toBeInTheDocument()); await waitFor(() => expect(screen.getByText("Backup")).toBeInTheDocument());
}); });
it("should not display the recovery panel when key storage is not enabled", async () => { it("should not display the recovery panel when key storage is not enabled", async () => {
@@ -92,7 +92,9 @@ describe("<EncryptionUserSettingsTab />", () => {
await user.click(screen.getByRole("button", { name: "Forgot recovery key?" })); await user.click(screen.getByRole("button", { name: "Forgot recovery key?" }));
expect( expect(
screen.getByRole("heading", { name: "Forgot your recovery key? You’ll need to reset your identity." }), screen.getByRole("heading", {
name: "Forgot your recovery key? You’ll need to reset your digital identity.",
}),
).toBeVisible(); ).toBeVisible();
}); });
@@ -117,11 +119,11 @@ describe("<EncryptionUserSettingsTab />", () => {
const { asFragment } = renderComponent(); const { asFragment } = renderComponent();
await waitFor(() => { await waitFor(() => {
const button = screen.getByRole("button", { name: "Set up recovery" }); const button = screen.getByRole("button", { name: "Get recovery key" });
expect(button).toBeInTheDocument(); expect(button).toBeInTheDocument();
user.click(button); user.click(button);
}); });
await waitFor(() => expect(screen.getByText("Set up recovery")).toBeInTheDocument()); await waitFor(() => expect(screen.getByText("Get recovery key")).toBeInTheDocument());
expect(asFragment()).toMatchSnapshot(); expect(asFragment()).toMatchSnapshot();
}); });
@@ -137,7 +139,7 @@ describe("<EncryptionUserSettingsTab />", () => {
user.click(button); user.click(button);
}); });
await waitFor(() => await waitFor(() =>
expect(screen.getByText("Are you sure you want to reset your identity?")).toBeInTheDocument(), expect(screen.getByText("Are you sure you want to reset your digital identity?")).toBeInTheDocument(),
); );
expect(asFragment()).toMatchSnapshot(); expect(asFragment()).toMatchSnapshot();
}); });
@@ -149,7 +151,7 @@ describe("<EncryptionUserSettingsTab />", () => {
expect( expect(
await screen.findByRole("heading", { await screen.findByRole("heading", {
name: "Forgot your recovery key? You’ll need to reset your identity.", name: "Forgot your recovery key? You’ll need to reset your digital identity.",
}), }),
).toBeVisible(); ).toBeVisible();
}); });
@@ -161,7 +163,7 @@ describe("<EncryptionUserSettingsTab />", () => {
expect( expect(
await screen.findByRole("heading", { await screen.findByRole("heading", {
name: "Failed to sync key storage. You need to reset your identity.", name: "Failed to sync key storage. You need to reset your digital identity.",
}), }),
).toBeVisible(); ).toBeVisible();
}); });
@@ -171,7 +173,7 @@ describe("<EncryptionUserSettingsTab />", () => {
renderComponent(); renderComponent();
await expect(await screen.findByRole("heading", { name: "Recovery" })).toBeVisible(); await expect(await screen.findByRole("heading", { name: "Backup" })).toBeVisible();
jest.spyOn(matrixClient.getCrypto()!, "getActiveSessionBackupVersion").mockResolvedValue(null); jest.spyOn(matrixClient.getCrypto()!, "getActiveSessionBackupVersion").mockResolvedValue(null);
@@ -180,7 +182,7 @@ describe("<EncryptionUserSettingsTab />", () => {
}); });
await waitFor(() => { await waitFor(() => {
expect(screen.queryByRole("heading", { name: "Recovery" })).toBeNull(); expect(screen.queryByRole("heading", { name: "Backup" })).toBeNull();
}); });
}); });
@@ -192,7 +194,9 @@ describe("<EncryptionUserSettingsTab />", () => {
renderComponent({ initialState: "reset_identity_forgot" }); renderComponent({ initialState: "reset_identity_forgot" });
expect( expect(
screen.getByRole("heading", { name: "Forgot your recovery key? You’ll need to reset your identity." }), screen.getByRole("heading", {
name: "Forgot your recovery key? You’ll need to reset your digital identity.",
}),
).toBeVisible(); ).toBeVisible();
await user.click(screen.getByRole("button", { name: "Back" })); await user.click(screen.getByRole("button", { name: "Back" }));
@@ -211,6 +215,6 @@ describe("<EncryptionUserSettingsTab />", () => {
expect(asFragment()).toMatchSnapshot(); expect(asFragment()).toMatchSnapshot();
await user.click(screen.getByRole("button", { name: "Continue with reset" })); await user.click(screen.getByRole("button", { name: "Continue with reset" }));
expect(screen.getByRole("heading", { name: "You need to reset your identity" })).toBeVisible(); expect(screen.getByRole("heading", { name: "You need to reset your digital identity" })).toBeVisible();
}); });
}); });
@@ -806,7 +806,7 @@ describe("<SessionManagerTab />", () => {
}); });
fireEvent.click(getByTestId("current-session-menu")); fireEvent.click(getByTestId("current-session-menu"));
fireEvent.click(getByLabelText("Sign out")); fireEvent.click(getByLabelText("Remove this device"));
// logout dialog opened // logout dialog opened
expect(modalSpy).toHaveBeenCalledWith(LogoutDialog, {}, undefined, false, true); expect(modalSpy).toHaveBeenCalledWith(LogoutDialog, {}, undefined, false, true);
@@ -823,7 +823,7 @@ describe("<SessionManagerTab />", () => {
}); });
fireEvent.click(getByTestId("current-session-menu")); fireEvent.click(getByTestId("current-session-menu"));
expect(queryByLabelText("Sign out of all other sessions")).toBeFalsy(); expect(queryByLabelText("Remove all other sessions")).toBeFalsy();
}); });
it("signs out of all other devices from current session context menu", async () => { it("signs out of all other devices from current session context menu", async () => {
@@ -837,7 +837,7 @@ describe("<SessionManagerTab />", () => {
}); });
fireEvent.click(getByTestId("current-session-menu")); fireEvent.click(getByTestId("current-session-menu"));
fireEvent.click(getByLabelText("Sign out of all other sessions (2)")); fireEvent.click(getByLabelText("Remove all other sessions (2)"));
await confirmSignout(getByTestId); await confirmSignout(getByTestId);
// other devices deleted, excluding current device // other devices deleted, excluding current device
@@ -878,7 +878,7 @@ describe("<SessionManagerTab />", () => {
expect(mockClient.deleteAccountData).not.toHaveBeenCalled(); expect(mockClient.deleteAccountData).not.toHaveBeenCalled();
fireEvent.click(getByTestId("current-session-menu")); fireEvent.click(getByTestId("current-session-menu"));
fireEvent.click(getByLabelText("Sign out of all other sessions (2)")); fireEvent.click(getByLabelText("Remove all other sessions (2)"));
await confirmSignout(getByTestId); await confirmSignout(getByTestId);
// only called once for signed out device with account data event // only called once for signed out device with account data event
@@ -1165,7 +1165,7 @@ describe("<SessionManagerTab />", () => {
}); });
fireEvent.click(getByTestId("other-sessions-menu")); fireEvent.click(getByTestId("other-sessions-menu"));
fireEvent.click(getByLabelText("Sign out of 2 sessions")); fireEvent.click(getByLabelText("Remove 2 sessions"));
await confirmSignout(getByTestId); await confirmSignout(getByTestId);
// other devices deleted, excluding current device // other devices deleted, excluding current device
@@ -1219,7 +1219,7 @@ describe("<SessionManagerTab />", () => {
}); });
fireEvent.click(getByTestId("current-session-menu")); fireEvent.click(getByTestId("current-session-menu"));
expect(screen.queryByLabelText("Sign out of all other sessions (2)")).not.toBeInTheDocument(); expect(screen.queryByLabelText("Remove all other sessions (2)")).not.toBeInTheDocument();
}); });
describe("other devices", () => { describe("other devices", () => {
@@ -1534,7 +1534,7 @@ describe("<SessionManagerTab />", () => {
expect(isSelectAllChecked(getByTestId)).toBeTruthy(); expect(isSelectAllChecked(getByTestId)).toBeTruthy();
// sign out of all selected sessions // Remove of all selected sessions
fireEvent.click(getByTestId("sign-out-selection-cta")); fireEvent.click(getByTestId("sign-out-selection-cta"));
await confirmSignout(getByTestId); await confirmSignout(getByTestId);
@@ -118,7 +118,7 @@ exports[`<EncryptionUserSettingsTab /> should display the identity needs reset p
d="M12 17q.424 0 .713-.288A.97.97 0 0 0 13 16a.97.97 0 0 0-.287-.713A.97.97 0 0 0 12 15a.97.97 0 0 0-.713.287A.97.97 0 0 0 11 16q0 .424.287.712.288.288.713.288m0-4q.424 0 .713-.287A.97.97 0 0 0 13 12V8a.97.97 0 0 0-.287-.713A.97.97 0 0 0 12 7a.97.97 0 0 0-.713.287A.97.97 0 0 0 11 8v4q0 .424.287.713.288.287.713.287m0 9a9.7 9.7 0 0 1-3.9-.788 10.1 10.1 0 0 1-3.175-2.137q-1.35-1.35-2.137-3.175A9.7 9.7 0 0 1 2 12q0-2.075.788-3.9a10.1 10.1 0 0 1 2.137-3.175q1.35-1.35 3.175-2.137A9.7 9.7 0 0 1 12 2q2.075 0 3.9.788a10.1 10.1 0 0 1 3.175 2.137q1.35 1.35 2.137 3.175A9.7 9.7 0 0 1 22 12a9.7 9.7 0 0 1-.788 3.9 10.1 10.1 0 0 1-2.137 3.175q-1.35 1.35-3.175 2.137A9.7 9.7 0 0 1 12 22" d="M12 17q.424 0 .713-.288A.97.97 0 0 0 13 16a.97.97 0 0 0-.287-.713A.97.97 0 0 0 12 15a.97.97 0 0 0-.713.287A.97.97 0 0 0 11 16q0 .424.287.712.288.288.713.288m0-4q.424 0 .713-.287A.97.97 0 0 0 13 12V8a.97.97 0 0 0-.287-.713A.97.97 0 0 0 12 7a.97.97 0 0 0-.713.287A.97.97 0 0 0 11 8v4q0 .424.287.713.288.287.713.287m0 9a9.7 9.7 0 0 1-3.9-.788 10.1 10.1 0 0 1-3.175-2.137q-1.35-1.35-2.137-3.175A9.7 9.7 0 0 1 2 12q0-2.075.788-3.9a10.1 10.1 0 0 1 2.137-3.175q1.35-1.35 3.175-2.137A9.7 9.7 0 0 1 12 2q2.075 0 3.9.788a10.1 10.1 0 0 1 3.175 2.137q1.35 1.35 2.137 3.175A9.7 9.7 0 0 1 22 12a9.7 9.7 0 0 1-.788 3.9 10.1 10.1 0 0 1-2.137 3.175q-1.35 1.35-3.175 2.137A9.7 9.7 0 0 1 12 22"
/> />
</svg> </svg>
You have to reset your cryptographic identity in order to ensure access to your message history You have to reset your digital identity in order to ensure access to your chat history
</span> </span>
</div> </div>
</div> </div>
@@ -158,12 +158,12 @@ exports[`<EncryptionUserSettingsTab /> should display the recovery out of sync p
<h2 <h2
class="_typography_6v6n8_153 _font-heading-sm-semibold_6v6n8_93 mx_SettingsHeader" class="_typography_6v6n8_153 _font-heading-sm-semibold_6v6n8_93 mx_SettingsHeader"
> >
Recovery Backup
</h2> </h2>
<div <div
class="mx_SettingsSubheader" class="mx_SettingsSubheader"
> >
Recover your cryptographic identity and message history with a recovery key if you’ve lost all your existing devices. Your chats are automatically backed up with end-to-end encryption. To restore this backup and retain your digital identity when you lose access to all your devices, you will need your recovery key.
<span <span
class="mx_SettingsSubheader_error" class="mx_SettingsSubheader_error"
> >
@@ -309,7 +309,7 @@ exports[`<EncryptionUserSettingsTab /> should display the reset identity panel w
<h2 <h2
class="_typography_6v6n8_153 _font-heading-sm-semibold_6v6n8_93" class="_typography_6v6n8_153 _font-heading-sm-semibold_6v6n8_93"
> >
Are you sure you want to reset your identity? Are you sure you want to reset your digital identity?
</h2> </h2>
</div> </div>
<div <div
@@ -55,7 +55,7 @@ exports[`<SessionManagerTab /> Sign out Signs out of current device 1`] = `
<span <span
class="mx_DeviceDetails_signOutButtonContent" class="mx_DeviceDetails_signOutButtonContent"
> >
Sign out of this session Remove this session
</span> </span>
</div> </div>
`; `;
@@ -70,7 +70,7 @@ exports[`<SessionManagerTab /> Sign out for an OIDC-aware server Signs out of cu
<span <span
class="mx_DeviceDetails_signOutButtonContent" class="mx_DeviceDetails_signOutButtonContent"
> >
Sign out of this session Remove this session
</span> </span>
</div> </div>
`; `;
@@ -36,11 +36,11 @@ describe("SetupEncryptionToast", () => {
render(<ToastContainer />); render(<ToastContainer />);
}); });
describe("Set up recovery", () => { describe("Back up your chats", () => {
it("should render the toast", async () => { it("should render the toast", async () => {
act(() => showToast("set_up_recovery")); act(() => showToast("set_up_recovery"));
expect(await screen.findByRole("heading", { name: "Set up recovery" })).toBeInTheDocument(); expect(await screen.findByRole("heading", { name: "Back up your chats" })).toBeInTheDocument();
}); });
it("should dismiss the toast when 'Dismiss' button clicked, and remember it", async () => { it("should dismiss the toast when 'Dismiss' button clicked, and remember it", async () => {
@@ -334,11 +334,11 @@ describe("SetupEncryptionToast", () => {
}); });
}); });
describe("Verify this session", () => { describe("Verify this device", () => {
it("should render the toast", async () => { it("should render the toast", async () => {
act(() => showToast("verify_this_session")); act(() => showToast("verify_this_session"));
await expect(screen.findByText("Verify this session")).resolves.toBeInTheDocument(); await expect(screen.findByText("Verify this device")).resolves.toBeInTheDocument();
await expect(screen.findByRole("button", { name: "Later" })).resolves.toBeInTheDocument(); await expect(screen.findByRole("button", { name: "Later" })).resolves.toBeInTheDocument();
await expect(screen.findByRole("button", { name: "Continue" })).resolves.toBeInTheDocument(); await expect(screen.findByRole("button", { name: "Continue" })).resolves.toBeInTheDocument();
}); });
@@ -375,7 +375,7 @@ describe("SetupEncryptionToast", () => {
await expect(screen.findByText("Your key storage is out of sync.")).resolves.toBeInTheDocument(); await expect(screen.findByText("Your key storage is out of sync.")).resolves.toBeInTheDocument();
await expect( await expect(
screen.findByText( screen.findByText(
"You have to reset your cryptographic identity in order to ensure access to your message history", "You have to reset your digital identity in order to ensure access to your chat history",
), ),
).resolves.toBeInTheDocument(); ).resolves.toBeInTheDocument();
await expect(screen.findByRole("button", { name: "Continue with reset" })).resolves.toBeInTheDocument(); await expect(screen.findByRole("button", { name: "Continue with reset" })).resolves.toBeInTheDocument();
Binary file not shown.

Before

Width:  |  Height:  |  Size: 21 KiB

After

Width:  |  Height:  |  Size: 22 KiB

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