Merge branch 'develop' into johannes/find-myself

This commit is contained in:
Johannes Marbach 2023-02-07 20:35:06 +01:00
commit c5fa3fc796
49 changed files with 1153 additions and 528 deletions

View file

@ -1,6 +1,9 @@
module.exports = { module.exports = {
plugins: ["matrix-org"], plugins: ["matrix-org"],
extends: ["plugin:matrix-org/babel", "plugin:matrix-org/react", "plugin:matrix-org/a11y"], extends: ["plugin:matrix-org/babel", "plugin:matrix-org/react", "plugin:matrix-org/a11y"],
parserOptions: {
project: ["./tsconfig.json"],
},
env: { env: {
browser: true, browser: true,
node: true, node: true,
@ -168,6 +171,12 @@ module.exports = {
"@typescript-eslint/explicit-member-accessibility": "off", "@typescript-eslint/explicit-member-accessibility": "off",
}, },
}, },
{
files: ["cypress/**/*.ts"],
parserOptions: {
project: ["./cypress/tsconfig.json"],
},
},
], ],
settings: { settings: {
react: { react: {

View file

@ -21,7 +21,6 @@ jobs:
commit_message: ${{ steps.commit.outputs.message }} commit_message: ${{ steps.commit.outputs.message }}
commit_author: ${{ steps.commit.outputs.author }} commit_author: ${{ steps.commit.outputs.author }}
commit_email: ${{ steps.commit.outputs.email }} commit_email: ${{ steps.commit.outputs.email }}
percy_enable: ${{ steps.percy.outputs.value || '1' }}
testrail_enable: ${{ steps.testrail.outputs.value || '1' }} testrail_enable: ${{ steps.testrail.outputs.value || '1' }}
steps: steps:
# We create the status here and then update it to success/failure in the `report` stage # We create the status here and then update it to success/failure in the `report` stage
@ -56,14 +55,6 @@ jobs:
core.setOutput("author", response.data.author.name); core.setOutput("author", response.data.author.name);
core.setOutput("email", response.data.author.email); core.setOutput("email", response.data.author.email);
# Only run Percy when it is demanded or on develop
- name: Disable Percy if not needed
id: percy
if: |
github.event.workflow_run.event == 'pull_request' &&
!contains(fromJSON(steps.prdetails.outputs.data).labels.*.name, 'X-Needs-Percy')
run: echo "::set-output name=value::0"
# Only run Testrail when it is demanded or on develop # Only run Testrail when it is demanded or on develop
- name: Disable Testrail if not needed - name: Disable Testrail if not needed
id: testrail id: testrail
@ -156,7 +147,7 @@ jobs:
# pass the Percy token as an environment variable # pass the Percy token as an environment variable
PERCY_TOKEN: ${{ secrets.PERCY_TOKEN }} PERCY_TOKEN: ${{ secrets.PERCY_TOKEN }}
PERCY_ENABLE: ${{ needs.prepare.outputs.percy_enable }} PERCY_ENABLE: 1
PERCY_BROWSER_EXECUTABLE: /usr/bin/chromium-browser PERCY_BROWSER_EXECUTABLE: /usr/bin/chromium-browser
# tell Percy more details about the context of this run # tell Percy more details about the context of this run
PERCY_BRANCH: ${{ github.event.workflow_run.head_branch }} PERCY_BRANCH: ${{ github.event.workflow_run.head_branch }}

View file

@ -52,6 +52,8 @@ const handleVerificationRequest = (request: VerificationRequest): Chainable<Emoj
verifier.on("show_sas", onShowSas); verifier.on("show_sas", onShowSas);
verifier.verify(); verifier.verify();
}), }),
// extra timeout, as this sometimes takes a while
{ timeout: 30_000 },
); );
}; };
@ -111,9 +113,8 @@ describe("Decryption Failure Bar", () => {
}) })
.then(() => { .then(() => {
cy.botSendMessage(bot, roomId, "test"); cy.botSendMessage(bot, roomId, "test");
cy.wait(5000); cy.contains(
cy.get(".mx_DecryptionFailureBar .mx_DecryptionFailureBar_message_headline").should( ".mx_DecryptionFailureBar .mx_DecryptionFailureBar_message_headline",
"have.text",
"Verify this device to access all messages", "Verify this device to access all messages",
); );
@ -124,6 +125,7 @@ describe("Decryption Failure Bar", () => {
const verificationRequestPromise = waitForVerificationRequest(otherDevice); const verificationRequestPromise = waitForVerificationRequest(otherDevice);
cy.get(".mx_CompleteSecurity_actionRow .mx_AccessibleButton").click(); cy.get(".mx_CompleteSecurity_actionRow .mx_AccessibleButton").click();
cy.contains("To proceed, please accept the verification request on your other device.");
cy.wrap(verificationRequestPromise).then((verificationRequest: VerificationRequest) => { cy.wrap(verificationRequestPromise).then((verificationRequest: VerificationRequest) => {
cy.wrap(verificationRequest.accept()); cy.wrap(verificationRequest.accept());
handleVerificationRequest(verificationRequest).then((emojis) => { handleVerificationRequest(verificationRequest).then((emojis) => {
@ -170,9 +172,8 @@ describe("Decryption Failure Bar", () => {
); );
cy.botSendMessage(bot, roomId, "test"); cy.botSendMessage(bot, roomId, "test");
cy.wait(5000); cy.contains(
cy.get(".mx_DecryptionFailureBar .mx_DecryptionFailureBar_message_headline").should( ".mx_DecryptionFailureBar .mx_DecryptionFailureBar_message_headline",
"have.text",
"Reset your keys to prevent future decryption errors", "Reset your keys to prevent future decryption errors",
); );

View file

@ -163,6 +163,8 @@ function setupBotClient(
} }
}) })
.then(() => cli), .then(() => cli),
// extra timeout, as this sometimes takes a while
{ timeout: 30_000 },
); );
}); });
} }

View file

@ -190,7 +190,7 @@
"eslint-plugin-deprecate": "^0.7.0", "eslint-plugin-deprecate": "^0.7.0",
"eslint-plugin-import": "^2.25.4", "eslint-plugin-import": "^2.25.4",
"eslint-plugin-jsx-a11y": "^6.5.1", "eslint-plugin-jsx-a11y": "^6.5.1",
"eslint-plugin-matrix-org": "0.9.0", "eslint-plugin-matrix-org": "0.10.0",
"eslint-plugin-react": "^7.28.0", "eslint-plugin-react": "^7.28.0",
"eslint-plugin-react-hooks": "^4.3.0", "eslint-plugin-react-hooks": "^4.3.0",
"eslint-plugin-unicorn": "^45.0.0", "eslint-plugin-unicorn": "^45.0.0",

View file

@ -38,6 +38,8 @@ limitations under the License.
} }
.mx_AddExistingToSpace_section { .mx_AddExistingToSpace_section {
margin-right: 12px; // provides space for scrollbar so that checkbox and scrollbar do not collide
&:not(:first-child) { &:not(:first-child) {
margin-top: 24px; margin-top: 24px;
} }

View file

@ -139,6 +139,7 @@ import GenericToast from "../views/toasts/GenericToast";
import RovingSpotlightDialog, { Filter } from "../views/dialogs/spotlight/SpotlightDialog"; import RovingSpotlightDialog, { Filter } from "../views/dialogs/spotlight/SpotlightDialog";
import { findDMForUser } from "../../utils/dm/findDMForUser"; import { findDMForUser } from "../../utils/dm/findDMForUser";
import { Linkify } from "../../HtmlUtils"; import { Linkify } from "../../HtmlUtils";
import { NotificationColor } from "../../stores/notifications/NotificationColor";
// legacy export // legacy export
export { default as Views } from "../../Views"; export { default as Views } from "../../Views";
@ -1961,6 +1962,8 @@ export default class MatrixChat extends React.PureComponent<IProps, IState> {
} }
if (numUnreadRooms > 0) { if (numUnreadRooms > 0) {
this.subTitleStatus += `[${numUnreadRooms}]`; this.subTitleStatus += `[${numUnreadRooms}]`;
} else if (notificationState.color >= NotificationColor.Bold) {
this.subTitleStatus += `*`;
} }
this.setPageSubtitle(); this.setPageSubtitle();

View file

@ -192,10 +192,7 @@ class PipContainerInner extends React.Component<IProps, IState> {
}; };
private onWidgetPersistence = (): void => { private onWidgetPersistence = (): void => {
this.updateShowWidgetInPip( this.updateShowWidgetInPip();
ActiveWidgetStore.instance.getPersistentWidgetId(),
ActiveWidgetStore.instance.getPersistentRoomId(),
);
}; };
private onWidgetDockChanges = (): void => { private onWidgetDockChanges = (): void => {
@ -234,11 +231,10 @@ class PipContainerInner extends React.Component<IProps, IState> {
} }
}; };
// Accepts a persistentWidgetId to be able to skip awaiting the setState for persistentWidgetId public updateShowWidgetInPip(): void {
public updateShowWidgetInPip( const persistentWidgetId = ActiveWidgetStore.instance.getPersistentWidgetId();
persistentWidgetId = this.state.persistentWidgetId, const persistentRoomId = ActiveWidgetStore.instance.getPersistentRoomId();
persistentRoomId = this.state.persistentRoomId,
): void {
let fromAnotherRoom = false; let fromAnotherRoom = false;
let notDocked = false; let notDocked = false;
// Sanity check the room - the widget may have been destroyed between render cycles, and // Sanity check the room - the widget may have been destroyed between render cycles, and

View file

@ -48,7 +48,8 @@ export default class ServerOfflineDialog extends React.PureComponent<IProps> {
private renderTimeline(): React.ReactElement[] { private renderTimeline(): React.ReactElement[] {
return EchoStore.instance.contexts.map((c, i) => { return EchoStore.instance.contexts.map((c, i) => {
if (!c.firstFailedTime) return null; // not useful if (!c.firstFailedTime) return null; // not useful
if (!(c instanceof RoomEchoContext)) throw new Error("Cannot render unknown context: " + c); if (!(c instanceof RoomEchoContext))
throw new Error("Cannot render unknown context: " + c.constructor.name);
const header = ( const header = (
<div className="mx_ServerOfflineDialog_content_context_timeline_header"> <div className="mx_ServerOfflineDialog_content_context_timeline_header">
<RoomAvatar width={24} height={24} room={c.room} /> <RoomAvatar width={24} height={24} room={c.room} />

View file

@ -507,39 +507,36 @@ export default class EventListSummary extends React.Component<IProps> {
eventsToRender.forEach((e, index) => { eventsToRender.forEach((e, index) => {
const type = e.getType(); const type = e.getType();
let userId = e.getSender(); let userKey = e.getSender()!;
if (type === EventType.RoomMember) { if (type === EventType.RoomThirdPartyInvite) {
userId = e.getStateKey(); userKey = e.getContent().display_name;
} else if (type === EventType.RoomMember) {
userKey = e.getStateKey();
} else if (e.isRedacted()) { } else if (e.isRedacted()) {
userId = e.getUnsigned()?.redacted_because?.sender; userKey = e.getUnsigned()?.redacted_because?.sender;
} }
// Initialise a user's events // Initialise a user's events
if (!userEvents[userId]) { if (!userEvents[userKey]) {
userEvents[userId] = []; userEvents[userKey] = [];
} }
let displayName = userId; let displayName = userKey;
if (type === EventType.RoomThirdPartyInvite) { if (e.isRedacted()) {
displayName = e.getContent().display_name; const sender = this.context?.room?.getMember(userKey);
if (e.sender) {
latestUserAvatarMember.set(userId, e.sender);
}
} else if (e.isRedacted()) {
const sender = this.context?.room.getMember(userId);
if (sender) { if (sender) {
displayName = sender.name; displayName = sender.name;
latestUserAvatarMember.set(userId, sender); latestUserAvatarMember.set(userKey, sender);
} }
} else if (e.target && TARGET_AS_DISPLAY_NAME_EVENTS.includes(type as EventType)) { } else if (e.target && TARGET_AS_DISPLAY_NAME_EVENTS.includes(type as EventType)) {
displayName = e.target.name; displayName = e.target.name;
latestUserAvatarMember.set(userId, e.target); latestUserAvatarMember.set(userKey, e.target);
} else if (e.sender) { } else if (e.sender && type !== EventType.RoomThirdPartyInvite) {
displayName = e.sender.name; displayName = e.sender.name;
latestUserAvatarMember.set(userId, e.sender); latestUserAvatarMember.set(userKey, e.sender);
} }
userEvents[userId].push({ userEvents[userKey].push({
mxEvent: e, mxEvent: e,
displayName, displayName,
index: index, index: index,

View file

@ -185,6 +185,10 @@ export default class ProfileSettings extends React.Component<{}, IState> {
withDisplayName: true, withDisplayName: true,
}); });
// False negative result from no-base-to-string rule, doesn't seem to account for Symbol.toStringTag
// eslint-disable-next-line @typescript-eslint/no-base-to-string
const avatarUrl = this.state.avatarUrl?.toString();
return ( return (
<form onSubmit={this.saveProfile} autoComplete="off" noValidate={true} className="mx_ProfileSettings"> <form onSubmit={this.saveProfile} autoComplete="off" noValidate={true} className="mx_ProfileSettings">
<input <input
@ -216,7 +220,7 @@ export default class ProfileSettings extends React.Component<{}, IState> {
</p> </p>
</div> </div>
<AvatarSetting <AvatarSetting
avatarUrl={this.state.avatarUrl?.toString()} avatarUrl={avatarUrl}
avatarName={this.state.displayName || this.state.userId} avatarName={this.state.displayName || this.state.userId}
avatarAltText={_t("Profile picture")} avatarAltText={_t("Profile picture")}
uploadAvatar={this.uploadAvatar} uploadAvatar={this.uploadAvatar}

View file

@ -3204,11 +3204,9 @@
"%(count)s participants|other": "%(count)s účastníků", "%(count)s participants|other": "%(count)s účastníků",
"New video room": "Nová video místnost", "New video room": "Nová video místnost",
"New room": "Nová místnost", "New room": "Nová místnost",
"<a>Give feedback</a>": "<a>Poskytnout zpětnou vazbu</a>",
"%(featureName)s Beta feedback": "Zpětná vazba beta funkce %(featureName)s", "%(featureName)s Beta feedback": "Zpětná vazba beta funkce %(featureName)s",
"Beta feature. Click to learn more.": "Beta funkce. Kliknutím získáte další informace.", "Beta feature. Click to learn more.": "Beta funkce. Kliknutím získáte další informace.",
"Beta feature": "Beta funkce", "Beta feature": "Beta funkce",
"Threads are a beta feature": "Vlákna jsou beta funkcí",
"Threads help keep your conversations on-topic and easy to track.": "Vlákna pomáhají udržovat konverzace k tématu a snadno je sledovat.", "Threads help keep your conversations on-topic and easy to track.": "Vlákna pomáhají udržovat konverzace k tématu a snadno je sledovat.",
"Threads help keep conversations on-topic and easy to track. <a>Learn more</a>.": "Vlákna pomáhají udržovat konverzace k tématu a snadno je sledovat. <a>Další informace</a>.", "Threads help keep conversations on-topic and easy to track. <a>Learn more</a>.": "Vlákna pomáhají udržovat konverzace k tématu a snadno je sledovat. <a>Další informace</a>.",
"Keep discussions organised with threads.": "Diskuse udržovat organizované pomocí vláken.", "Keep discussions organised with threads.": "Diskuse udržovat organizované pomocí vláken.",
@ -3532,7 +3530,6 @@
"Italic": "Kurzíva", "Italic": "Kurzíva",
"Notifications silenced": "Oznámení ztlumena", "Notifications silenced": "Oznámení ztlumena",
"Yes, stop broadcast": "Ano, zastavit vysílání", "Yes, stop broadcast": "Ano, zastavit vysílání",
"Are you sure you want to stop your live broadcast?This will end the broadcast and the full recording will be available in the room.": "Opravdu chcete ukončit živé vysílání? Tím se vysílání ukončí a v místnosti bude k dispozici celý záznam.",
"Stop live broadcasting?": "Ukončit živé vysílání?", "Stop live broadcasting?": "Ukončit živé vysílání?",
"Someone else is already recording a voice broadcast. Wait for their voice broadcast to end to start a new one.": "Hlasové vysílání už nahrává někdo jiný. Počkejte, až jeho hlasové vysílání skončí, a spusťte nové.", "Someone else is already recording a voice broadcast. Wait for their voice broadcast to end to start a new one.": "Hlasové vysílání už nahrává někdo jiný. Počkejte, až jeho hlasové vysílání skončí, a spusťte nové.",
"You don't have the required permissions to start a voice broadcast in this room. Contact a room administrator to upgrade your permissions.": "Nemáte potřebná oprávnění ke spuštění hlasového vysílání v této místnosti. Obraťte se na správce místnosti, aby vám zvýšil oprávnění.", "You don't have the required permissions to start a voice broadcast in this room. Contact a room administrator to upgrade your permissions.": "Nemáte potřebná oprávnění ke spuštění hlasového vysílání v této místnosti. Obraťte se na správce místnosti, aby vám zvýšil oprávnění.",
@ -3641,7 +3638,6 @@
"Right panel stays open": "Pravý panel zůstane otevřený", "Right panel stays open": "Pravý panel zůstane otevřený",
"Currently experimental.": "V současnosti experimentální.", "Currently experimental.": "V současnosti experimentální.",
"New ways to ignore people": "Nové způsoby ignorování lidí", "New ways to ignore people": "Nové způsoby ignorování lidí",
"Use rich text instead of Markdown in the message composer. Plain text mode coming soon.": "V editoru zpráv používat formátovaný text namísto Markdownu. Brzy bude k dispozici režim prostého textu.",
"In rooms that support moderation, the “Report” button will let you report abuse to room moderators.": "V místnostech, které podporují moderování, můžete pomocí tlačítka \"Nahlásit\" nahlásit zneužití moderátorům místnosti.", "In rooms that support moderation, the “Report” button will let you report abuse to room moderators.": "V místnostech, které podporují moderování, můžete pomocí tlačítka \"Nahlásit\" nahlásit zneužití moderátorům místnosti.",
"Report to moderators": "Nahlásit moderátorům", "Report to moderators": "Nahlásit moderátorům",
"You have unverified sessions": "Máte neověřené relace", "You have unverified sessions": "Máte neověřené relace",
@ -3661,19 +3657,19 @@
"%(senderName)s ended a <a>voice broadcast</a>": "%(senderName)s ukončil(a) <a>hlasové vysílání</a>", "%(senderName)s ended a <a>voice broadcast</a>": "%(senderName)s ukončil(a) <a>hlasové vysílání</a>",
"You ended a <a>voice broadcast</a>": "Ukončili jste <a>hlasové vysílání</a>", "You ended a <a>voice broadcast</a>": "Ukončili jste <a>hlasové vysílání</a>",
"Threaded messages": "Zprávy ve vláknech", "Threaded messages": "Zprávy ve vláknech",
"Unable to decrypt message": "Nelze dešifrovat zprávu", "Unable to decrypt message": "Nepodařilo se dešifrovat zprávu",
"This message could not be decrypted": "Tuto zprávu se nepodařilo dešifrovat", "This message could not be decrypted": "Tuto zprávu se nepodařilo dešifrovat",
"Resend key requests": "Opětovně odeslat žádosti o klíč", "Resend key requests": "Opětovně odeslat žádosti o klíč",
"Unfortunately, there are no other verified devices to request decryption keys from. Signing in and verifying other devices may help avoid this situation in the future.": "Bohužel neexistují žádná další ověřená zařízení, ze kterých by si bylo možné vyžádat dešifrovací klíče. Přihlášení a ověření dalších zařízení může pomoci této situaci v budoucnu předejít.", "Unfortunately, there are no other verified devices to request decryption keys from. Signing in and verifying other devices may help avoid this situation in the future.": "Bohužel neexistují žádná další ověřená zařízení, ze kterých by si bylo možné vyžádat dešifrovací klíče. Přihlášení a ověření dalších zařízení může pomoci této situaci v budoucnu předejít.",
"Some messages could not be decrypted": "Některé zprávy nebylo možné dešifrovat", "Some messages could not be decrypted": "Některé zprávy nebylo možné dešifrovat",
"View your device list": "Zobrazit seznam vašich zařízení", "View your device list": "Zobrazit seznam vašich zařízení",
"This device is requesting decryption keys from your other devices. Opening one of your other devices may speed this up.": "Toto zařízení si vyžádá dešifrovací klíče z ostatních zařízení. Otevření některého z vašich dalších zařízení to může urychlit.", "This device is requesting decryption keys from your other devices. Opening one of your other devices may speed this up.": "Toto zařízení požaduje dešifrovací klíče z vašich ostatních zařízení. Otevření některého z vašich dalších zařízení to může urychlit.",
"Open another device to load encrypted messages": "Otevřete jiné zařízení pro načtení zašifrovaných zpráv", "Open another device to load encrypted messages": "Otevřete jiné zařízení pro načtení zašifrovaných zpráv",
"You will not be able to access old undecryptable messages, but resetting your keys will allow you to receive new messages.": "Ke starým nedešifrovatelným zprávám nebudete mít přístup, ale resetování klíčů vám umožní přijímat nové zprávy.", "You will not be able to access old undecryptable messages, but resetting your keys will allow you to receive new messages.": "Ke starým nedešifrovatelným zprávám nebudete mít přístup, ale resetování klíčů vám umožní přijímat nové zprávy.",
"Reset your keys to prevent future decryption errors": "Resetujte své klíče, abyste předešli budoucím chybám při dešifrování", "Reset your keys to prevent future decryption errors": "Resetujte své klíče, abyste předešli budoucím chybám při dešifrování",
"This device was unable to decrypt some messages because it has not been verified yet.": "Toto zařízení nebylo schopno dešifrovat některé zprávy, protože dosud nebylo ověřeno.", "This device was unable to decrypt some messages because it has not been verified yet.": "Toto zařízení nebylo schopno dešifrovat některé zprávy, protože dosud nebylo ověřeno.",
"Verify this device to access all messages": "Ověřte toto zařízení pro přístup ke všem zprávám", "Verify this device to access all messages": "Ověřte toto zařízení pro přístup ke všem zprávám",
"Please wait as we try to decrypt your messages. This may take a few moments.": "Počkejte prosím, než se pokusíme vaše zprávy dešifrovat. Může to chvíli trvat.", "Please wait as we try to decrypt your messages. This may take a few moments.": "Počkejte prosím, zatímco se snažíme dešifrovat vaše zprávy. Může to chvíli trvat.",
"Decrypting messages...": "Dešifrování zpráv...", "Decrypting messages...": "Dešifrování zpráv...",
"%(senderName)s ended a voice broadcast": "%(senderName)s ukončil(a) hlasové vysílání", "%(senderName)s ended a voice broadcast": "%(senderName)s ukončil(a) hlasové vysílání",
"You ended a voice broadcast": "Ukončili jste hlasové vysílání", "You ended a voice broadcast": "Ukončili jste hlasové vysílání",
@ -3710,5 +3706,44 @@
"Decrypted source unavailable": "Dešifrovaný zdroj není dostupný", "Decrypted source unavailable": "Dešifrovaný zdroj není dostupný",
"Connection error - Recording paused": "Chyba připojení - nahrávání pozastaveno", "Connection error - Recording paused": "Chyba připojení - nahrávání pozastaveno",
"%(senderName)s started a voice broadcast": "%(senderName)s zahájil(a) hlasové vysílání", "%(senderName)s started a voice broadcast": "%(senderName)s zahájil(a) hlasové vysílání",
"%(displayName)s (%(matrixId)s)": "%(displayName)s (%(matrixId)s)" "%(displayName)s (%(matrixId)s)": "%(displayName)s (%(matrixId)s)",
"Unable to play this voice broadcast": "Nelze přehrát toto hlasové vysílání",
"Registration token": "Registrační token",
"Enter a registration token provided by the homeserver administrator.": "Zadejte registrační token poskytnutý správcem domovského serveru.",
"Manage account": "Spravovat účet",
"Your account details are managed separately at <code>%(hostname)s</code>.": "Údaje o vašem účtu jsou spravovány samostatně na adrese <code>%(hostname)s</code>.",
"Enable MSC3946 (to support late-arriving room archives)": "Povolit MSC3946 (podpora pozdních archivů místností)",
"Dynamic room predecessors": "Předchůdci dynamické místnosti",
"All messages and invites from this user will be hidden. Are you sure you want to ignore them?": "Všechny zprávy a pozvánky od tohoto uživatele budou skryty. Opravdu je chcete ignorovat?",
"Ignore %(user)s": "Ignorovat %(user)s",
"Indent decrease": "Zmenšit odsazení",
"Indent increase": "Zvětšit odsazení",
"View a list of polls in a room. (Under active development)": "Zobrazit seznam hlasování v místnosti. (V aktivním vývoji)",
"Polls history": "Historie hlasování",
"Unable to decrypt voice broadcast": "Nelze dešifrovat hlasové vysílání",
"Use rich text instead of Markdown in the message composer.": "V editoru zpráv použít formátovaný text namísto Markdown.",
"There are no polls in this room": "V této místnosti nejsou žádná hlasování",
"Thread Id: ": "Id vlákna: ",
"Threads timeline": "Časová osa vláken",
"Sender: ": "Odesílatel: ",
"Type: ": "Typ: ",
"ID: ": "ID: ",
"Last event:": "Poslední událost:",
"No receipt found": "Žádné potvrzení o přečtení",
"User read up to: ": "Uživatel přečetl až: ",
"Dot: ": "Tečka: ",
"Highlight: ": "Nejdůležitější: ",
"Total: ": "Celkem: ",
"Main timeline": "Hlavní časová osa",
"not encrypted 🚨": "nešifrovaná 🚨",
"encrypted ✅": "šifrovaná ✅",
"Room is ": "Místnost je ",
"Notification state is": "Stav oznámení je",
", count:": ", počet:",
"Room unread status: ": "Stav nepřečtené místnosti: ",
"Room status": "Stav místnosti",
"Notifications debug": "Ladění oznámení",
"unknown": "neznámé",
"Red": "Červená",
"Grey": "Šedá"
} }

View file

@ -1298,7 +1298,7 @@
"Accepting…": "Annehmen…", "Accepting…": "Annehmen…",
"Start Verification": "Verifizierung starten", "Start Verification": "Verifizierung starten",
"Messages in this room are end-to-end encrypted.": "Nachrichten in diesem Raum sind Ende-zu-Ende verschlüsselt.", "Messages in this room are end-to-end encrypted.": "Nachrichten in diesem Raum sind Ende-zu-Ende verschlüsselt.",
"Your messages are secured and only you and the recipient have the unique keys to unlock them.": "Diese Nachrichten sind verschlüsselt und nur du und der Empfänger könnt sie lesen.", "Your messages are secured and only you and the recipient have the unique keys to unlock them.": "Diese Nachricht ist verschlüsselt. Nur Sie und der Empfänger haben den Schlüssel, um die Nachricht zu entschlüsseln.",
"In encrypted rooms, your messages are secured and only you and the recipient have the unique keys to unlock them.": "Nachrichten in verschlüsselten Räumen können nur von dir und vom Empfänger gelesen werden.", "In encrypted rooms, your messages are secured and only you and the recipient have the unique keys to unlock them.": "Nachrichten in verschlüsselten Räumen können nur von dir und vom Empfänger gelesen werden.",
"Verify User": "Nutzer verifizieren", "Verify User": "Nutzer verifizieren",
"For extra security, verify this user by checking a one-time code on both of your devices.": "Für zusätzliche Sicherheit, verifiziere diesen Nutzer, durch Vergleichen eines Einmal-Codes auf euren beiden Geräten.", "For extra security, verify this user by checking a one-time code on both of your devices.": "Für zusätzliche Sicherheit, verifiziere diesen Nutzer, durch Vergleichen eines Einmal-Codes auf euren beiden Geräten.",
@ -3246,8 +3246,6 @@
"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.": "Du wurdest von allen Geräten abgemeldet und erhältst keine Push-Benachrichtigungen mehr. Um Benachrichtigungen wieder zu aktivieren, melde dich auf jedem Gerät erneut an.", "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.": "Du wurdest von allen Geräten abgemeldet und erhältst keine Push-Benachrichtigungen mehr. Um Benachrichtigungen wieder zu aktivieren, melde dich auf jedem Gerät erneut an.",
"Resetting your password on this homeserver will cause all of your devices to be signed out. This will delete the message encryption keys stored on them, making encrypted chat history unreadable.": "Wenn du dein Passwort zurücksetzt, werden all deine anderen Geräte abgemeldet. Wenn auf diesen Ende-zu-Ende-Schlüssel gespeichert sind, kann der Verlauf deiner verschlüsselten Unterhaltungen verloren gehen.", "Resetting your password on this homeserver will cause all of your devices to be signed out. This will delete the message encryption keys stored on them, making encrypted chat history unreadable.": "Wenn du dein Passwort zurücksetzt, werden all deine anderen Geräte abgemeldet. Wenn auf diesen Ende-zu-Ende-Schlüssel gespeichert sind, kann der Verlauf deiner verschlüsselten Unterhaltungen verloren gehen.",
"Event ID: %(eventId)s": "Event-ID: %(eventId)s", "Event ID: %(eventId)s": "Event-ID: %(eventId)s",
"<a>Give feedback</a>": "<a>Rückmeldung geben</a>",
"Threads are a beta feature": "Threads sind eine Betafunktion",
"Threads help keep your conversations on-topic and easy to track.": "Threads helfen dabei, dass deine Konversationen beim Thema und leicht nachverfolgbar bleiben.", "Threads help keep your conversations on-topic and easy to track.": "Threads helfen dabei, dass deine Konversationen beim Thema und leicht nachverfolgbar bleiben.",
"Your message wasn't sent because this homeserver has been blocked by its administrator. Please <a>contact your service administrator</a> to continue using the service.": "Deine Nachricht wurde nicht gesendet, weil dieser Heim-Server von dessen Administration gesperrt wurde. Bitte <a>kontaktiere deine Dienstadministration</a>, um den Dienst weiterzunutzen.", "Your message wasn't sent because this homeserver has been blocked by its administrator. Please <a>contact your service administrator</a> to continue using the service.": "Deine Nachricht wurde nicht gesendet, weil dieser Heim-Server von dessen Administration gesperrt wurde. Bitte <a>kontaktiere deine Dienstadministration</a>, um den Dienst weiterzunutzen.",
"Video rooms": "Videoräume", "Video rooms": "Videoräume",
@ -3531,7 +3529,6 @@
"Italic": "Kursiv", "Italic": "Kursiv",
"Underline": "Unterstrichen", "Underline": "Unterstrichen",
"Notifications silenced": "Benachrichtigungen stummgeschaltet", "Notifications silenced": "Benachrichtigungen stummgeschaltet",
"Are you sure you want to stop your live broadcast?This will end the broadcast and the full recording will be available in the room.": "Möchtest du die Übertragung wirklich beenden? Dies wird die Übertragung beenden und die vollständige Aufnahme im Raum bereitstellen.",
"Yes, stop broadcast": "Ja, Übertragung beenden", "Yes, stop broadcast": "Ja, Übertragung beenden",
"Stop live broadcasting?": "Live-Übertragung beenden?", "Stop live broadcasting?": "Live-Übertragung beenden?",
"Sign in with QR code": "Mit QR-Code anmelden", "Sign in with QR code": "Mit QR-Code anmelden",
@ -3627,7 +3624,6 @@
"What's next for %(brand)s? Labs are the best way to get things early, test out new features and help shape them before they actually launch.": "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.", "What's next for %(brand)s? Labs are the best way to get things early, test out new features and help shape them before they actually launch.": "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.",
"Upcoming features": "Zukünftige Funktionen", "Upcoming features": "Zukünftige Funktionen",
"Low bandwidth mode": "Modus für geringe Bandbreite", "Low bandwidth mode": "Modus für geringe Bandbreite",
"Use rich text instead of Markdown in the message composer. Plain text mode coming soon.": "Nutze direkte Formatierungen statt Markdown im Eingabefeld. Einen Klartextmodus gibts auch bald.",
"Rich text editor": "Textverarbeitungs-Editor", "Rich text editor": "Textverarbeitungs-Editor",
"<w>WARNING:</w> <description/>": "<w>WARNUNG:</w> <description/>", "<w>WARNING:</w> <description/>": "<w>WARNUNG:</w> <description/>",
"Requires compatible homeserver.": "Benötigt kompatiblen Heim-Server.", "Requires compatible homeserver.": "Benötigt kompatiblen Heim-Server.",
@ -3710,5 +3706,45 @@
"Decrypted source unavailable": "Entschlüsselte Quelle nicht verfügbar", "Decrypted source unavailable": "Entschlüsselte Quelle nicht verfügbar",
"Connection error - Recording paused": "Verbindungsfehler Aufnahme pausiert", "Connection error - Recording paused": "Verbindungsfehler Aufnahme pausiert",
"%(senderName)s started a voice broadcast": "%(senderName)s begann eine Sprachübertragung", "%(senderName)s started a voice broadcast": "%(senderName)s begann eine Sprachübertragung",
"%(displayName)s (%(matrixId)s)": "%(displayName)s (%(matrixId)s)" "%(displayName)s (%(matrixId)s)": "%(displayName)s (%(matrixId)s)",
"Unable to play this voice broadcast": "Wiedergabe der Sprachübertragung nicht möglich",
"Registration token": "Registrierungstoken",
"Enter a registration token provided by the homeserver administrator.": "Gib einen von deiner Home-Server-Administration zur Verfügung gestellten Registrierungstoken ein.",
"Manage account": "Konto verwalten",
"Your account details are managed separately at <code>%(hostname)s</code>.": "Deine Kontodaten werden separat auf <code>%(hostname)s</code> verwaltet.",
"Dynamic room predecessors": "Veränderbare Raumvorgänger",
"Enable MSC3946 (to support late-arriving room archives)": "MSC3946 aktivieren (zur Verknüpfung von Raumarchiven nach der Raumerstellung)",
"All messages and invites from this user will be hidden. Are you sure you want to ignore them?": "Alle Nachrichten und Einladungen der Person werden verborgen. Bist du sicher, dass du sie ignorieren möchtest?",
"Ignore %(user)s": "%(user)s ignorieren",
"Indent decrease": "Einrückung verringern",
"Indent increase": "Einrückung erhöhen",
"Unable to decrypt voice broadcast": "Entschlüsseln der Sprachübertragung nicht möglich",
"View a list of polls in a room. (Under active development)": "Betrachte Raumumfragen in Listenform. (In aktiver Entwicklung)",
"Polls history": "Umfrageverlauf",
"Use rich text instead of Markdown in the message composer.": "Verwende Textverarbeitung (Rich-Text) statt Markdown im Eingabefeld.",
"There are no polls in this room": "In diesem Raum gibt es keine Umfragen",
"Thread Id: ": "Thread-ID: ",
"Threads timeline": "Thread-Verlauf",
"Type: ": "Typ: ",
"ID: ": "ID: ",
"Last event:": "Neuestes Ereignis:",
"Total: ": "Insgesamt: ",
"Main timeline": "Hauptverlauf",
"not encrypted 🚨": "nicht verschlüsselt 🚨",
"encrypted ✅": "verschlüsselt ✅",
"Room status": "Raumstatus",
"unknown": "unbekannt",
"Red": "Rot",
"Grey": "Grau",
"Sender: ": "Absender: ",
"No receipt found": "Keine Bestätigung gefunden",
"User read up to: ": "Der Benutzer hat gelesen bis: ",
"Dot: ": "Punkt: ",
"Highlight: ": "Höhepunkt: ",
"Room is ": "Der Raum ist ",
"Notification state is": "Der Benachrichtigung-Status ist",
", count:": ", Anzahl:",
"Room unread status: ": "Ungelesenstatus des Raumes: ",
"Notifications debug": "Debug-Modus für Benachrichtigungen",
"Are you sure you want to stop your live broadcast? This will end the broadcast and the full recording will be available in the room.": "Möchtest du deine Übertragung wirklich beenden? Dies wird die Übertragung abschließen und die vollständige Aufnahme im Raum bereitstellen."
} }

View file

@ -3198,7 +3198,6 @@
"Close dialog or context menu": "Κλείσιμο διαλόγου ή μενού περιβάλλοντος", "Close dialog or context menu": "Κλείσιμο διαλόγου ή μενού περιβάλλοντος",
"Threads help keep conversations on-topic and easy to track. <a>Learn more</a>.": "Τα νήματα βοηθούν στην καλύτερη οργάνωση των συζητήσεων και στην εύκολη παρακολούθηση. <a>Μάθετε περισσότερα</a>.", "Threads help keep conversations on-topic and easy to track. <a>Learn more</a>.": "Τα νήματα βοηθούν στην καλύτερη οργάνωση των συζητήσεων και στην εύκολη παρακολούθηση. <a>Μάθετε περισσότερα</a>.",
"Keep discussions organised with threads.": "Διατηρήστε τις συζητήσεις οργανωμένες σε νήματα.", "Keep discussions organised with threads.": "Διατηρήστε τις συζητήσεις οργανωμένες σε νήματα.",
"Threads are a beta feature": "Τα νήματα είναι μια δοκιμαστική δυνατότητα",
"Close sidebar": "Κλείσιμο πλαϊνής γραμμής", "Close sidebar": "Κλείσιμο πλαϊνής γραμμής",
"View List": "Προβολή Λίστας", "View List": "Προβολή Λίστας",
"View list": "Προβολή λίστας", "View list": "Προβολή λίστας",

View file

@ -662,7 +662,7 @@
"Unable to decrypt voice broadcast": "Unable to decrypt voice broadcast", "Unable to decrypt voice broadcast": "Unable to decrypt voice broadcast",
"Unable to play this voice broadcast": "Unable to play this voice broadcast", "Unable to play this voice broadcast": "Unable to play this voice broadcast",
"Stop live broadcasting?": "Stop live broadcasting?", "Stop live broadcasting?": "Stop live broadcasting?",
"Are you sure you want to stop your live broadcast?This will end the broadcast and the full recording will be available in the room.": "Are you sure you want to stop your live broadcast?This will end the broadcast and the full recording will be available in the room.", "Are you sure you want to stop your live broadcast? This will end the broadcast and the full recording will be available in the room.": "Are you sure you want to stop your live broadcast? This will end the broadcast and the full recording will be available in the room.",
"Yes, stop broadcast": "Yes, stop broadcast", "Yes, stop broadcast": "Yes, stop broadcast",
"Listen to live broadcast?": "Listen to live broadcast?", "Listen to live broadcast?": "Listen to live broadcast?",
"If you start listening to this live broadcast, your current live broadcast recording will be ended.": "If you start listening to this live broadcast, your current live broadcast recording will be ended.", "If you start listening to this live broadcast, your current live broadcast recording will be ended.": "If you start listening to this live broadcast, your current live broadcast recording will be ended.",

View file

@ -451,5 +451,8 @@
"Answered Elsewhere": "Answered Elsewhere", "Answered Elsewhere": "Answered Elsewhere",
"The call could not be established": "The call could not be established", "The call could not be established": "The call could not be established",
"The user you called is busy.": "The user you called is busy.", "The user you called is busy.": "The user you called is busy.",
"User Busy": "User Busy" "User Busy": "User Busy",
"%(seconds)ss left": "%(seconds)ss left",
"%(minutes)sm %(seconds)ss left": "%(minutes)sm %(seconds)ss left",
"%(hours)sh %(minutes)sm %(seconds)ss left": "%(hours)sh %(minutes)sm %(seconds)ss left"
} }

View file

@ -2876,7 +2876,6 @@
"Unverified sessions": "Nekontrolitaj salutaĵoj", "Unverified sessions": "Nekontrolitaj salutaĵoj",
"From the beginning": "De la komenco", "From the beginning": "De la komenco",
"Current Timeline": "Nuna historio", "Current Timeline": "Nuna historio",
"Use rich text instead of Markdown in the message composer. Plain text mode coming soon.": "Uzu riĉan tekston anstataŭ Markdown en la mesaĝkomponilo. Plata teksta reĝimo baldaŭ venos.",
"Plain Text": "Plata Teksto", "Plain Text": "Plata Teksto",
"Show HTML representation of room topics": "Montru HTML-prezenton de ĉambrotemoj", "Show HTML representation of room topics": "Montru HTML-prezenton de ĉambrotemoj",
"Creating HTML...": "Kreante HTML...", "Creating HTML...": "Kreante HTML...",
@ -2888,7 +2887,6 @@
"Media omitted - file size limit exceeded": "Amaskomunikilaro preterlasis - dosiero tro granda", "Media omitted - file size limit exceeded": "Amaskomunikilaro preterlasis - dosiero tro granda",
"Select from the options below to export chats from your timeline": "Elektu el la subaj elektoj por eksporti babilojn el via historio", "Select from the options below to export chats from your timeline": "Elektu el la subaj elektoj por eksporti babilojn el via historio",
"Public rooms": "Publikajn ĉambrojn", "Public rooms": "Publikajn ĉambrojn",
"<a>Give feedback</a>": "<a>Doni komentojn</a>",
"Results not as expected? Please <a>give feedback</a>.": "Rezultoj ne kiel atenditaj? Bonvolu <a>doni komentojn</a>.", "Results not as expected? Please <a>give feedback</a>.": "Rezultoj ne kiel atenditaj? Bonvolu <a>doni komentojn</a>.",
"Show details": "Montri detalojn", "Show details": "Montri detalojn",
"Hide details": "Kaŝi detalojn", "Hide details": "Kaŝi detalojn",
@ -2897,7 +2895,6 @@
"Push notifications": "Puŝaj sciigoj", "Push notifications": "Puŝaj sciigoj",
"IP address": "IP-adreso", "IP address": "IP-adreso",
"Browser": "Retumilo", "Browser": "Retumilo",
"Are you sure you want to stop your live broadcast?This will end the broadcast and the full recording will be available in the room.": "Ĉu vi certas, ke vi volas fini la elsendon? Ĉi tio finos la transdonon kaj provizos la plenan registradon en la ĉambro.",
"Add privileged users": "Aldoni rajtigitan uzanton", "Add privileged users": "Aldoni rajtigitan uzanton",
"Number of messages": "Nombro da mesaĝoj", "Number of messages": "Nombro da mesaĝoj",
"Number of messages can only be a number between %(min)s and %(max)s": "Nombro da mesaĝoj povas esti nur nombro inter %(min)s kaj %(max)s", "Number of messages can only be a number between %(min)s and %(max)s": "Nombro da mesaĝoj povas esti nur nombro inter %(min)s kaj %(max)s",

View file

@ -454,7 +454,7 @@
"%(items)s and %(count)s others|other": "%(items)s y otros %(count)s", "%(items)s and %(count)s others|other": "%(items)s y otros %(count)s",
"%(items)s and %(count)s others|one": "%(items)s y otro más", "%(items)s and %(count)s others|one": "%(items)s y otro más",
"collapse": "encoger", "collapse": "encoger",
"expand": "despregar", "expand": "desplegar",
"Unable to load event that was replied to, it either does not exist or you do not have permission to view it.": "No se pudo cargar el evento al que se respondió, bien porque no existe o no tiene permiso para verlo.", "Unable to load event that was replied to, it either does not exist or you do not have permission to view it.": "No se pudo cargar el evento al que se respondió, bien porque no existe o no tiene permiso para verlo.",
"<a>In reply to</a> <pill>": "<a>Respondiendo a </a> <pill>", "<a>In reply to</a> <pill>": "<a>Respondiendo a </a> <pill>",
"And %(count)s more...|other": "Y %(count)s más…", "And %(count)s more...|other": "Y %(count)s más…",
@ -3164,8 +3164,6 @@
"Send custom room account data event": "Enviar evento personalizado de cuenta de la sala", "Send custom room account data event": "Enviar evento personalizado de cuenta de la sala",
"Send custom timeline event": "Enviar evento personalizado de historial de mensajes", "Send custom timeline event": "Enviar evento personalizado de historial de mensajes",
"Help us identify issues and improve %(analyticsOwner)s by sharing anonymous usage data. To understand how people use multiple devices, we'll generate a random identifier, shared by your devices.": "Ayúdanos a identificar problemas y a mejorar %(analyticsOwner)s. Comparte datos anónimos sobre cómo usas la aplicación para que entendamos mejor cómo usa la gente varios dispositivos. Generaremos un identificador aleatorio que usarán todos tus dispositivos.", "Help us identify issues and improve %(analyticsOwner)s by sharing anonymous usage data. To understand how people use multiple devices, we'll generate a random identifier, shared by your devices.": "Ayúdanos a identificar problemas y a mejorar %(analyticsOwner)s. Comparte datos anónimos sobre cómo usas la aplicación para que entendamos mejor cómo usa la gente varios dispositivos. Generaremos un identificador aleatorio que usarán todos tus dispositivos.",
"<a>Give feedback</a>": "<a>Danos tu opinión</a>",
"Threads are a beta feature": "Los hilos son una funcionalidad beta",
"Create room": "Crear sala", "Create room": "Crear sala",
"Create a video room": "Crear una sala de vídeo", "Create a video room": "Crear una sala de vídeo",
"Create video room": "Crear sala de vídeo", "Create video room": "Crear sala de vídeo",
@ -3587,7 +3585,6 @@
"Right panel stays open": "El panel derecho se mantiene abierto", "Right panel stays open": "El panel derecho se mantiene abierto",
"Currently experimental.": "Actualmente en fase experimental.", "Currently experimental.": "Actualmente en fase experimental.",
"New ways to ignore people": "Nuevas maneras de ignorar a otras personas", "New ways to ignore people": "Nuevas maneras de ignorar a otras personas",
"Use rich text instead of Markdown in the message composer. Plain text mode coming soon.": "Usar el editor de texto enriquecido en lugar de Markdown en la barra de escritura. El modo de texto plano estará disponible próximamente.",
"Rich text editor": "Editor de texto enriquecido", "Rich text editor": "Editor de texto enriquecido",
"Threaded messages": "Hilos de mensajes", "Threaded messages": "Hilos de mensajes",
"In rooms that support moderation, the “Report” button will let you report abuse to room moderators.": "En las salas que sean compatible con la moderación, el botón de «Denunciar» avisará a los moderadores de la sala.", "In rooms that support moderation, the “Report” button will let you report abuse to room moderators.": "En las salas que sean compatible con la moderación, el botón de «Denunciar» avisará a los moderadores de la sala.",

View file

@ -2701,7 +2701,7 @@
"Verify with Security Key or Phrase": "Verifitseeri turvavõtme või turvafraasiga", "Verify with Security Key or Phrase": "Verifitseeri turvavõtme või turvafraasiga",
"Skip verification for now": "Jäta verifitseerimine praegu vahele", "Skip verification for now": "Jäta verifitseerimine praegu vahele",
"Really reset verification keys?": "Kas tõesti kustutame kõik verifitseerimisvõtmed?", "Really reset verification keys?": "Kas tõesti kustutame kõik verifitseerimisvõtmed?",
"Create poll": "Koosta üks küsitlus", "Create poll": "Loo selline küsitlus",
"Space Autocomplete": "Kogukonnakeskuste dünaamiline otsing", "Space Autocomplete": "Kogukonnakeskuste dünaamiline otsing",
"Updating spaces... (%(progress)s out of %(count)s)|one": "Uuendan kogukonnakeskust...", "Updating spaces... (%(progress)s out of %(count)s)|one": "Uuendan kogukonnakeskust...",
"Updating spaces... (%(progress)s out of %(count)s)|other": "Uuendan kogukonnakeskuseid... (%(progress)s / %(count)s)", "Updating spaces... (%(progress)s out of %(count)s)|other": "Uuendan kogukonnakeskuseid... (%(progress)s / %(count)s)",
@ -2786,7 +2786,7 @@
"Write something...": "Kirjuta midagi...", "Write something...": "Kirjuta midagi...",
"Question or topic": "Küsimus või teema", "Question or topic": "Küsimus või teema",
"What is your poll question or topic?": "Mis on küsitluse teema?", "What is your poll question or topic?": "Mis on küsitluse teema?",
"Create Poll": "Koosta üks küsitlus", "Create Poll": "Loo selline küsitlus",
"You do not have permission to start polls in this room.": "Sul ei ole õigusi küsitluste korraldamiseks siin jututoas.", "You do not have permission to start polls in this room.": "Sul ei ole õigusi küsitluste korraldamiseks siin jututoas.",
"Copy link to thread": "Kopeeri jutulõnga link", "Copy link to thread": "Kopeeri jutulõnga link",
"Thread options": "Jutulõnga valikud", "Thread options": "Jutulõnga valikud",
@ -3058,8 +3058,8 @@
"Show current avatar and name for users in message history": "Sõnumite ajaloos leiduvate kasutajate puhul näita kehtivat tunnuspilti ning nime", "Show current avatar and name for users in message history": "Sõnumite ajaloos leiduvate kasutajate puhul näita kehtivat tunnuspilti ning nime",
"Results will be visible when the poll is ended": "Tulemused on näha siis, kui küsitlus on lõppenud", "Results will be visible when the poll is ended": "Tulemused on näha siis, kui küsitlus on lõppenud",
"Poll type": "Küsitluse tüüp", "Poll type": "Küsitluse tüüp",
"Open poll": "Pooleliolev küsitlus", "Open poll": "Avatud valikutega küsitlus",
"Closed poll": "Lõppenud küsitlus", "Closed poll": "Suletud valikutega küsitlus",
"Voters see results as soon as they have voted": "Osalejad näevad tulemusi kohe peale oma valiku tegemist", "Voters see results as soon as they have voted": "Osalejad näevad tulemusi kohe peale oma valiku tegemist",
"Results are only revealed when you end the poll": "Tulemused on näha vaid siis, kui küsitlus in lõppenud", "Results are only revealed when you end the poll": "Tulemused on näha vaid siis, kui küsitlus in lõppenud",
"Search Dialog": "Otsinguvaade", "Search Dialog": "Otsinguvaade",
@ -3204,8 +3204,6 @@
"%(count)s participants|other": "%(count)s oselejat", "%(count)s participants|other": "%(count)s oselejat",
"New video room": "Uus videotuba", "New video room": "Uus videotuba",
"New room": "Uus jututuba", "New room": "Uus jututuba",
"<a>Give feedback</a>": "<a>Jaga tagasisidet</a>",
"Threads are a beta feature": "Jutulõngad on beetajärgus funktsionaalsus",
"Threads help keep your conversations on-topic and easy to track.": "Jutulõngad aitavad hoida vestlused teemakohastena ning mugavalt loetavatena.", "Threads help keep your conversations on-topic and easy to track.": "Jutulõngad aitavad hoida vestlused teemakohastena ning mugavalt loetavatena.",
"%(featureName)s Beta feedback": "%(featureName)s beetaversiooni tagasiside", "%(featureName)s Beta feedback": "%(featureName)s beetaversiooni tagasiside",
"Beta feature. Click to learn more.": "Beetafunktsionaalsus. Lisateabe lugemiseks klõpsi siin.", "Beta feature. Click to learn more.": "Beetafunktsionaalsus. Lisateabe lugemiseks klõpsi siin.",
@ -3557,7 +3555,6 @@
"You can use this device to sign in a new device with a QR code. You will need to scan the QR code shown on this device with your device that's signed out.": "Sa saad kasutada seda seadet mõne muu seadme logimiseks Matrix'i võrku QR-koodi alusel. Selleks skaneeri võrgust väljalogitud seadmega seda QR-koodi.", "You can use this device to sign in a new device with a QR code. You will need to scan the QR code shown on this device with your device that's signed out.": "Sa saad kasutada seda seadet mõne muu seadme logimiseks Matrix'i võrku QR-koodi alusel. Selleks skaneeri võrgust väljalogitud seadmega seda QR-koodi.",
"Allow a QR code to be shown in session manager to sign in another device (requires compatible homeserver)": "Teise seadme sisselogimiseks luba QR-koodi kuvamine sessioonihalduris (eeldab, et koduserver sellist võimalust toetab)", "Allow a QR code to be shown in session manager to sign in another device (requires compatible homeserver)": "Teise seadme sisselogimiseks luba QR-koodi kuvamine sessioonihalduris (eeldab, et koduserver sellist võimalust toetab)",
"Yes, stop broadcast": "Jah, lõpeta", "Yes, stop broadcast": "Jah, lõpeta",
"Are you sure you want to stop your live broadcast?This will end the broadcast and the full recording will be available in the room.": "Kas sa oled kindel, et soovid otseeetri lõpetada? Sellega ringhäälingukõne salvestamine lõppeb ja salvestis on kättesaadav kõigile jututoas.",
"Stop live broadcasting?": "Kas lõpetame otseeetri?", "Stop live broadcasting?": "Kas lõpetame otseeetri?",
"Someone else is already recording a voice broadcast. Wait for their voice broadcast to end to start a new one.": "Keegi juba salvestab ringhäälingukõnet. Uue ringhäälingukõne salvestamiseks palun oota, kuni see teine ringhäälingukõne on lõppenud.", "Someone else is already recording a voice broadcast. Wait for their voice broadcast to end to start a new one.": "Keegi juba salvestab ringhäälingukõnet. Uue ringhäälingukõne salvestamiseks palun oota, kuni see teine ringhäälingukõne on lõppenud.",
"You don't have the required permissions to start a voice broadcast in this room. Contact a room administrator to upgrade your permissions.": "Sul pole piisavalt õigusi selles jututoas ringhäälingukõne algatamiseks. Õiguste lisamiseks palun võta ühendust jututoa haldajaga.", "You don't have the required permissions to start a voice broadcast in this room. Contact a room administrator to upgrade your permissions.": "Sul pole piisavalt õigusi selles jututoas ringhäälingukõne algatamiseks. Õiguste lisamiseks palun võta ühendust jututoa haldajaga.",
@ -3628,7 +3625,6 @@
"Right panel stays open": "Parem paan jääb avatuks", "Right panel stays open": "Parem paan jääb avatuks",
"Currently experimental.": "Parasjagu katsejärgus.", "Currently experimental.": "Parasjagu katsejärgus.",
"New ways to ignore people": "Uued võimalused osalejate eiramiseks", "New ways to ignore people": "Uued võimalused osalejate eiramiseks",
"Use rich text instead of Markdown in the message composer. Plain text mode coming soon.": "Sõnumi kirjutamisel võid tavalise Markdown-vormingu asemel kasutada kujundatud teksti. Lihtteksti kasutamise võimalus lisandub varsti.",
"Rich text editor": "Kujundatud teksti toimeti", "Rich text editor": "Kujundatud teksti toimeti",
"In rooms that support moderation, the “Report” button will let you report abuse to room moderators.": "Kui jututoas on modereerimine kasutusel, siis nupust „Teata sisust“ avaneva vormi abil saad jututoa reegleid rikkuvast sisust teatada moderaatoritele.", "In rooms that support moderation, the “Report” button will let you report abuse to room moderators.": "Kui jututoas on modereerimine kasutusel, siis nupust „Teata sisust“ avaneva vormi abil saad jututoa reegleid rikkuvast sisust teatada moderaatoritele.",
"Report to moderators": "Teata moderaatoritele", "Report to moderators": "Teata moderaatoritele",
@ -3710,5 +3706,44 @@
"Decrypted source unavailable": "Dekrüptitud lähteandmed pole saadaval", "Decrypted source unavailable": "Dekrüptitud lähteandmed pole saadaval",
"Connection error - Recording paused": "Viga võrguühenduses - salvestamine on peatatud", "Connection error - Recording paused": "Viga võrguühenduses - salvestamine on peatatud",
"%(senderName)s started a voice broadcast": "%(senderName)s alustas ringhäälingukõnet", "%(senderName)s started a voice broadcast": "%(senderName)s alustas ringhäälingukõnet",
"%(displayName)s (%(matrixId)s)": "%(displayName)s (%(matrixId)s)" "%(displayName)s (%(matrixId)s)": "%(displayName)s (%(matrixId)s)",
"Registration token": "Registreerimise tunnuskood",
"Enter a registration token provided by the homeserver administrator.": "Sisesta koduserveri haldaja poolt antud tunnuskood.",
"Unable to play this voice broadcast": "Selle ringhäälingukõne esitamine ei õnnestu",
"Enable MSC3946 (to support late-arriving room archives)": "Võta kasutusele MSC3946 (jututoa ajaloo aeglane laadimine)",
"Your account details are managed separately at <code>%(hostname)s</code>.": "Sinu kasutajakonto lisateave on hallatav siin serveris - <code>%(hostname)s</code>.",
"Manage account": "Halda kasutajakontot",
"Indent decrease": "Vähenda taandrida",
"Indent increase": "Suurenda taandrida",
"All messages and invites from this user will be hidden. Are you sure you want to ignore them?": "Kõik selle kasutaja sõnumid ja kutsed saava olema peidetud. Kas sa oled kindel, et soovid teda eirata?",
"Ignore %(user)s": "Eira kasutajat %(user)s",
"Dynamic room predecessors": "Jututoa dünaamilised eellased",
"Unable to decrypt voice broadcast": "Ringhäälingukõne dekrüptimine ei õnnestu",
"Polls history": "Küsitluste ajalugu",
"View a list of polls in a room. (Under active development)": "Vaata jututoas leiduvaid küsitlusi (funktsionaalsus on aktiivsel arendamisel)",
"Thread Id: ": "Jutulõnga tunnus: ",
"Threads timeline": "Jutulõngade ajajoon",
"Sender: ": "Saatja: ",
"Type: ": "Tüüp: ",
"ID: ": "ID: ",
"Last event:": "Viimane sündmus:",
"No receipt found": "Lugemisteatist ei leidu",
"User read up to: ": "Kasutaja on lugenud kuni: ",
"Dot: ": "Punkt: ",
"Highlight: ": "Esiletõstetud: ",
"Total: ": "Kokku: ",
"Main timeline": "Peamine ajajoon",
"not encrypted 🚨": "krüptimata 🚨",
"encrypted ✅": "krüptitud ✅",
"Room is ": "Jututuba on ",
"Notification state is": "Teavituste olek on",
", count:": ", kokku:",
"Room unread status: ": "Jututoa lugemata sõnumite olek: ",
"Room status": "Jututoa sõnumite olek",
"There are no polls in this room": "Selles jututoas pole küsitlusi",
"Notifications debug": "Teavituste silumine",
"Use rich text instead of Markdown in the message composer.": "Sõnumite kirjutamisel kasuta Markdown'i asemel täisfunktsionaalset küljendust.",
"unknown": "teadmata",
"Red": "Punane",
"Grey": "Hall"
} }

View file

@ -2582,7 +2582,6 @@
"resume voice broadcast": "بازگشت به صدای جمعی", "resume voice broadcast": "بازگشت به صدای جمعی",
"play voice broadcast": "پخش صدای جمعی", "play voice broadcast": "پخش صدای جمعی",
"Yes, stop broadcast": "بله، توقف ارسال جمعی", "Yes, stop broadcast": "بله، توقف ارسال جمعی",
"Are you sure you want to stop your live broadcast?This will end the broadcast and the full recording will be available in the room.": "آیا میخواهید ارسال جمعی زنده متوقف شود؟ ارسال جمعی متوقف شده و کل صدای ضبط شده اتاق در دسترس خواهد بود.",
"Stop live broadcasting?": "آیا ارسال جمعی زنده متوقف شود؟", "Stop live broadcasting?": "آیا ارسال جمعی زنده متوقف شود؟",
"Someone else is already recording a voice broadcast. Wait for their voice broadcast to end to start a new one.": "شخص دیگری در حال ضبط صدا برای ارسال جمعی است. برای ارسال صدای جمعی باید منتظر بمانید تا کار ایشان به پایان برسد.", "Someone else is already recording a voice broadcast. Wait for their voice broadcast to end to start a new one.": "شخص دیگری در حال ضبط صدا برای ارسال جمعی است. برای ارسال صدای جمعی باید منتظر بمانید تا کار ایشان به پایان برسد.",
"You don't have the required permissions to start a voice broadcast in this room. Contact a room administrator to upgrade your permissions.": "شما دسترسی لازم برای ارسال صدای جمعی در این اتاق را ندارید. لطفا با مدیر اتاق تماس بگیرید.", "You don't have the required permissions to start a voice broadcast in this room. Contact a room administrator to upgrade your permissions.": "شما دسترسی لازم برای ارسال صدای جمعی در این اتاق را ندارید. لطفا با مدیر اتاق تماس بگیرید.",

View file

@ -2795,7 +2795,6 @@
"Device verified": "Laite vahvistettu", "Device verified": "Laite vahvistettu",
"Verify this device": "Vahvista tämä laite", "Verify this device": "Vahvista tämä laite",
"Unable to verify this device": "Tätä laitetta ei voitu vahvistaa", "Unable to verify this device": "Tätä laitetta ei voitu vahvistaa",
"<a>Give feedback</a>": "<a>Anna palautetta</a>",
"Failed to load list of rooms.": "Huoneluettelon lataaminen epäonnistui.", "Failed to load list of rooms.": "Huoneluettelon lataaminen epäonnistui.",
"Joined": "Liitytty", "Joined": "Liitytty",
"Joining": "Liitytään", "Joining": "Liitytään",
@ -2982,7 +2981,6 @@
"%(senderName)s removed %(targetName)s": "%(senderName)s poisti %(targetName)s", "%(senderName)s removed %(targetName)s": "%(senderName)s poisti %(targetName)s",
"%(senderName)s removed %(targetName)s: %(reason)s": "%(senderName)s poisti %(targetName)s: %(reason)s", "%(senderName)s removed %(targetName)s: %(reason)s": "%(senderName)s poisti %(targetName)s: %(reason)s",
"Jump to the given date in the timeline": "Siirry annetulle päivälle aikajanalla", "Jump to the given date in the timeline": "Siirry annetulle päivälle aikajanalla",
"Threads are a beta feature": "Ketjut ovat beetaominaisuus",
"Keep discussions organised with threads": "Pidä keskustelut järjestyksessä ketjuissa", "Keep discussions organised with threads": "Pidä keskustelut järjestyksessä ketjuissa",
"Show all threads": "Näytä kaikki ketjut", "Show all threads": "Näytä kaikki ketjut",
"Shows all threads you've participated in": "Näyttää kaikki ketjut, joissa olet ollut osallinen", "Shows all threads you've participated in": "Näyttää kaikki ketjut, joissa olet ollut osallinen",

View file

@ -2174,7 +2174,7 @@
"Recently visited rooms": "Salons visités récemment", "Recently visited rooms": "Salons visités récemment",
"Back up your encryption keys with your account data in case you lose access to your sessions. Your keys will be secured with a unique Security Key.": "Sauvegardez vos clés de chiffrement et les données de votre compte au cas où vous perdiez laccès à vos sessions. Vos clés seront sécurisés avec une Clé de Sécurité unique.", "Back up your encryption keys with your account data in case you lose access to your sessions. Your keys will be secured with a unique Security Key.": "Sauvegardez vos clés de chiffrement et les données de votre compte au cas où vous perdiez laccès à vos sessions. Vos clés seront sécurisés avec une Clé de Sécurité unique.",
"Securely cache encrypted messages locally for them to appear in search results, using %(size)s to store messages from %(rooms)s rooms.|one": "Mettre en cache localement et de manière sécurisée les messages chiffrés pour quils apparaissent dans les résultats de recherche, en utilisant %(size)s pour stocker les messages de %(rooms)s salons.", "Securely cache encrypted messages locally for them to appear in search results, using %(size)s to store messages from %(rooms)s rooms.|one": "Mettre en cache localement et de manière sécurisée les messages chiffrés pour quils apparaissent dans les résultats de recherche, en utilisant %(size)s pour stocker les messages de %(rooms)s salons.",
"Securely cache encrypted messages locally for them to appear in search results, using %(size)s to store messages from %(rooms)s rooms.|other": "Mettre en cache localement et de manière sécurisée les messages chiffrés pour quils apparaissent dans les résultats de recherche, en utilisant %(size)s pour stocker les messages de %(rooms)s salons.", "Securely cache encrypted messages locally for them to appear in search results, using %(size)s to store messages from %(rooms)s rooms.|other": "Mettre en cache localement et de manière sécurisée les messages chiffrés pour quils apparaissent dans les résultats de recherche. Actuellement %(size)s sont utilisé pour stocker les messages de %(rooms)s salons.",
"Channel: <channelLink/>": "Canal : <channelLink/>", "Channel: <channelLink/>": "Canal : <channelLink/>",
"Workspace: <networkLink/>": "Espace de travail : <networkLink/>", "Workspace: <networkLink/>": "Espace de travail : <networkLink/>",
"Dial pad": "Pavé de numérotation", "Dial pad": "Pavé de numérotation",
@ -3164,8 +3164,6 @@
"%(value)sm": "%(value)sm", "%(value)sm": "%(value)sm",
"%(value)sh": "%(value)sh", "%(value)sh": "%(value)sh",
"%(value)sd": "%(value)sd", "%(value)sd": "%(value)sd",
"<a>Give feedback</a>": "<a>Faire un commentaire</a>",
"Threads are a beta feature": "Les fils de discussion sont une fonctionnalité bêta",
"Threads help keep your conversations on-topic and easy to track.": "Les fils de discussion vous permettent de recentrer vos conversations et de les rendre facile à suivre.", "Threads help keep your conversations on-topic and easy to track.": "Les fils de discussion vous permettent de recentrer vos conversations et de les rendre facile à suivre.",
"An error occurred while stopping your live location, please try again": "Une erreur sest produite en arrêtant le partage de votre position, veuillez réessayer", "An error occurred while stopping your live location, please try again": "Une erreur sest produite en arrêtant le partage de votre position, veuillez réessayer",
"Create room": "Créer un salon", "Create room": "Créer un salon",
@ -3557,7 +3555,6 @@
"Browser": "Navigateur", "Browser": "Navigateur",
"Notifications silenced": "Notifications silencieuses", "Notifications silenced": "Notifications silencieuses",
"Yes, stop broadcast": "Oui, arrêter la diffusion", "Yes, stop broadcast": "Oui, arrêter la diffusion",
"Are you sure you want to stop your live broadcast?This will end the broadcast and the full recording will be available in the room.": "Êtes-vous sûr de vouloir arrêter votre diffusion en direct ? Cela terminera la diffusion et lenregistrement complet sera disponible dans le salon.",
"Stop live broadcasting?": "Arrêter la diffusion en direct ?", "Stop live broadcasting?": "Arrêter la diffusion en direct ?",
"Someone else is already recording a voice broadcast. Wait for their voice broadcast to end to start a new one.": "Une autre personne est déjà en train de réaliser une diffusion audio. Attendez que sa diffusion audio soit terminée pour en démarrer une nouvelle.", "Someone else is already recording a voice broadcast. Wait for their voice broadcast to end to start a new one.": "Une autre personne est déjà en train de réaliser une diffusion audio. Attendez que sa diffusion audio soit terminée pour en démarrer une nouvelle.",
"You don't have the required permissions to start a voice broadcast in this room. Contact a room administrator to upgrade your permissions.": "Vous navez pas les permissions requises pour démarrer une nouvelle diffusion audio dans ce salon. Contactez un administrateur du salon pour mettre-à-jour vos permissions.", "You don't have the required permissions to start a voice broadcast in this room. Contact a room administrator to upgrade your permissions.": "Vous navez pas les permissions requises pour démarrer une nouvelle diffusion audio dans ce salon. Contactez un administrateur du salon pour mettre-à-jour vos permissions.",
@ -3640,7 +3637,6 @@
"Right panel stays open": "Le panneau de droite reste ouvert", "Right panel stays open": "Le panneau de droite reste ouvert",
"Currently experimental.": "Actuellement expérimental.", "Currently experimental.": "Actuellement expérimental.",
"New ways to ignore people": "Nouvelles manières dignorer des gens", "New ways to ignore people": "Nouvelles manières dignorer des gens",
"Use rich text instead of Markdown in the message composer. Plain text mode coming soon.": "Utilise le texte formaté au lieu de Markdown dans le compositeur de message. Le mode texte brut arrive bientôt.",
"Rich text editor": "Éditeur de texte formaté", "Rich text editor": "Éditeur de texte formaté",
"In rooms that support moderation, the “Report” button will let you report abuse to room moderators.": "Dans les salons prenant en charge la modération, le bouton « Signaler » vous permet de signaler des abus aux modérateurs du salon.", "In rooms that support moderation, the “Report” button will let you report abuse to room moderators.": "Dans les salons prenant en charge la modération, le bouton « Signaler » vous permet de signaler des abus aux modérateurs du salon.",
"Report to moderators": "Signaler aux modérateurs", "Report to moderators": "Signaler aux modérateurs",
@ -3710,5 +3706,44 @@
"Decrypted source unavailable": "Source déchiffrée non disponible", "Decrypted source unavailable": "Source déchiffrée non disponible",
"Connection error - Recording paused": "Erreur de connexion Enregistrement en pause", "Connection error - Recording paused": "Erreur de connexion Enregistrement en pause",
"%(senderName)s started a voice broadcast": "%(senderName)s a démarré une diffusion audio", "%(senderName)s started a voice broadcast": "%(senderName)s a démarré une diffusion audio",
"%(displayName)s (%(matrixId)s)": "%(displayName)s (%(matrixId)s)" "%(displayName)s (%(matrixId)s)": "%(displayName)s (%(matrixId)s)",
"Registration token": "Jeton denregistrement",
"Enter a registration token provided by the homeserver administrator.": "Saisissez un jeton denregistrement fourni par ladministrateur du serveur daccueil.",
"Unable to play this voice broadcast": "Impossible de lire cette diffusion audio",
"Manage account": "Gérer le compte",
"Your account details are managed separately at <code>%(hostname)s</code>.": "Les détails de votre compte sont gérés séparément sur <code>%(hostname)s</code>.",
"Enable MSC3946 (to support late-arriving room archives)": "Active MSC3946 (pour prendre en charge les archives de salon après création)",
"Dynamic room predecessors": "Prédécesseurs de salon dynamique",
"All messages and invites from this user will be hidden. Are you sure you want to ignore them?": "Tous les messages et invitations de cette utilisateur seront cachés. Êtes-vous sûr de vouloir les ignorer ?",
"Ignore %(user)s": "Ignorer %(user)s",
"Indent decrease": "Réduire lindentation",
"Indent increase": "Augmenter lindentation",
"View a list of polls in a room. (Under active development)": "Voir une liste des sondages présents dans un salon. (En cours de développement)",
"Polls history": "Historique des sondages",
"Unable to decrypt voice broadcast": "Impossible de décrypter la diffusion audio",
"There are no polls in this room": "Il ny a aucun sondage dans ce salon",
"Use rich text instead of Markdown in the message composer.": "Utilise le texte formaté au lieu de Markdown dans le compositeur de message.",
"Thread Id: ": "Id du fil de discussion : ",
"Threads timeline": "Historique des fils de discussion",
"Sender: ": "Expéditeur : ",
"Type: ": "Type : ",
"ID: ": "ID : ",
"Last event:": "Dernier évènement :",
"No receipt found": "Aucun accusé disponible",
"User read up to: ": "Lutilisateur a lu jusquà : ",
"Dot: ": "Point : ",
"Highlight: ": "Mentions : ",
"Total: ": "Total : ",
"Main timeline": "Historique principal",
"not encrypted 🚨": "non chiffré 🚨",
"encrypted ✅": "chiffré ✅",
"Room is ": "Le salon est ",
"Notification state is": "Létat de notification est",
", count:": ", total :",
"Room unread status: ": "Statut non-lu du salon : ",
"Room status": "Statut du salon",
"Notifications debug": "Débogage des notifications",
"unknown": "inconnu",
"Red": "Rouge",
"Grey": "Gris"
} }

View file

@ -3172,8 +3172,6 @@
"User is already invited to the space": "A usuaria xa está convidada ao espazo", "User is already invited to the space": "A usuaria xa está convidada ao espazo",
"You do not have permission to invite people to this space.": "Non tes permiso para convidar persoas a este espazo.", "You do not have permission to invite people to this space.": "Non tes permiso para convidar persoas a este espazo.",
"Failed to invite users to %(roomName)s": "Fallou o convite das usuarias para %(roomName)s", "Failed to invite users to %(roomName)s": "Fallou o convite das usuarias para %(roomName)s",
"<a>Give feedback</a>": "<a>Informar e dar opinión</a>",
"Threads are a beta feature": "Os fíos son unha ferramenta beta",
"Threads help keep your conversations on-topic and easy to track.": "Os fíos axúdanche a manter as conversas no tema e facilitan o seguimento.", "Threads help keep your conversations on-topic and easy to track.": "Os fíos axúdanche a manter as conversas no tema e facilitan o seguimento.",
"An error occurred while stopping your live location, please try again": "Algo fallou ao deter a túa localización en directo, inténtao outra vez", "An error occurred while stopping your live location, please try again": "Algo fallou ao deter a túa localización en directo, inténtao outra vez",
"Create room": "Crear sala", "Create room": "Crear sala",

View file

@ -2458,7 +2458,6 @@
"We're creating a room with %(names)s": "יצרנו חדר עם %(names)s", "We're creating a room with %(names)s": "יצרנו חדר עם %(names)s",
"Jump to the given date in the timeline": "קיפצו לתאריך הנתון בציר הזמן", "Jump to the given date in the timeline": "קיפצו לתאריך הנתון בציר הזמן",
"Thread": "שרשורים", "Thread": "שרשורים",
"Threads are a beta feature": "שרשורים הם תכונה ניסיונית",
"Keep discussions organised with threads": "שימרו על דיונים מאורגנים בשרשורים", "Keep discussions organised with threads": "שימרו על דיונים מאורגנים בשרשורים",
"<b>Tip:</b> Use “%(replyInThread)s” when hovering over a message.": "<b>טיפ:</b> השתמש ב-\"%(replyInThread)s\" כשאתם מרחפים מעל הודעה.", "<b>Tip:</b> Use “%(replyInThread)s” when hovering over a message.": "<b>טיפ:</b> השתמש ב-\"%(replyInThread)s\" כשאתם מרחפים מעל הודעה.",
"Threads help keep your conversations on-topic and easy to track.": "שרשורים עוזרים לשמור על השיחות שלכם בנושא וקל למעקב.", "Threads help keep your conversations on-topic and easy to track.": "שרשורים עוזרים לשמור על השיחות שלכם בנושא וקל למעקב.",

View file

@ -3180,8 +3180,6 @@
"Disinvite from space": "Meghívó visszavonása a térről", "Disinvite from space": "Meghívó visszavonása a térről",
"An error (%(errcode)s) was returned while trying to validate your invite. You could try to pass this information on to the person who invited you.": "A meghívó ellenőrzésekor az alábbi hibát kaptuk: %(errcode)s. Ezt az információt megpróbálhatja eljuttatni a szoba gazdájának.", "An error (%(errcode)s) was returned while trying to validate your invite. You could try to pass this information on to the person who invited you.": "A meghívó ellenőrzésekor az alábbi hibát kaptuk: %(errcode)s. Ezt az információt megpróbálhatja eljuttatni a szoba gazdájának.",
"Joining …": "Belépés…", "Joining …": "Belépés…",
"<a>Give feedback</a>": "<a>Visszajelzés küldése</a>",
"Threads are a beta feature": "Az üzenetszálak béta funkció",
"<b>Tip:</b> Use “%(replyInThread)s” when hovering over a message.": "<b>Tipp:</b> Használja a „%(replyInThread)s” lehetőséget a szöveg fölé navigálva.", "<b>Tip:</b> Use “%(replyInThread)s” when hovering over a message.": "<b>Tipp:</b> Használja a „%(replyInThread)s” lehetőséget a szöveg fölé navigálva.",
"Threads help keep your conversations on-topic and easy to track.": "Az üzenetszálak segítenek a különböző témájú beszélgetések figyelemmel kísérésében.", "Threads help keep your conversations on-topic and easy to track.": "Az üzenetszálak segítenek a különböző témájú beszélgetések figyelemmel kísérésében.",
"An error occurred while stopping your live location, please try again": "Élő pozíció megosztás befejezése közben hiba történt, kérjük próbálja újra", "An error occurred while stopping your live location, please try again": "Élő pozíció megosztás befejezése közben hiba történt, kérjük próbálja újra",
@ -3563,7 +3561,6 @@
"You can use this device to sign in a new device with a QR code. You will need to scan the QR code shown on this device with your device that's signed out.": "Ennek az eszköznek a felhasználásával és a QR kóddal beléptethet egy másik eszközt. Be kell olvasni a QR kódot azon az eszközön ami még nincs belépve.", "You can use this device to sign in a new device with a QR code. You will need to scan the QR code shown on this device with your device that's signed out.": "Ennek az eszköznek a felhasználásával és a QR kóddal beléptethet egy másik eszközt. Be kell olvasni a QR kódot azon az eszközön ami még nincs belépve.",
"Allow a QR code to be shown in session manager to sign in another device (requires compatible homeserver)": "QR kód megjelenítésének engedélyezése a munkamenet kezelőben, hogy másik eszközzel bejelentkezhessen vele (kompatibilis matrix szervert igényel)", "Allow a QR code to be shown in session manager to sign in another device (requires compatible homeserver)": "QR kód megjelenítésének engedélyezése a munkamenet kezelőben, hogy másik eszközzel bejelentkezhessen vele (kompatibilis matrix szervert igényel)",
"play voice broadcast": "hang közvetítés lejátszása", "play voice broadcast": "hang közvetítés lejátszása",
"Are you sure you want to stop your live broadcast?This will end the broadcast and the full recording will be available in the room.": "Biztos, hogy befejezi az élő közvetítést? Ez befejezi a közvetítést és a felvétel az egész szoba számára elérhető lesz.",
"Are you sure you want to sign out of %(count)s sessions?|one": "Biztos, hogy ki szeretne lépni %(count)s munkamenetből?", "Are you sure you want to sign out of %(count)s sessions?|one": "Biztos, hogy ki szeretne lépni %(count)s munkamenetből?",
"Are you sure you want to sign out of %(count)s sessions?|other": "Biztos, hogy ki szeretne lépni %(count)s munkamenetből?", "Are you sure you want to sign out of %(count)s sessions?|other": "Biztos, hogy ki szeretne lépni %(count)s munkamenetből?",
"Show formatting": "Formázás megjelenítése", "Show formatting": "Formázás megjelenítése",
@ -3618,7 +3615,6 @@
"For best security and privacy, it is recommended to use Matrix clients that support encryption.": "A biztonság és adatbiztonság érdekében javasolt olyan Matrix klienst használni ami támogatja a titkosítást.", "For best security and privacy, it is recommended to use Matrix clients that support encryption.": "A biztonság és adatbiztonság érdekében javasolt olyan Matrix klienst használni ami támogatja a titkosítást.",
"You won't be able to participate in rooms where encryption is enabled when using this session.": "Ezzel a munkamenettel olyan szobákban ahol a titkosítás be van kapcsolva nem tud részt venni.", "You won't be able to participate in rooms where encryption is enabled when using this session.": "Ezzel a munkamenettel olyan szobákban ahol a titkosítás be van kapcsolva nem tud részt venni.",
"Feeling experimental? Try out our latest ideas in development. These features are not finalised; they may be unstable, may change, or may be dropped altogether. <a>Learn more</a>.": "Kísérletező kedvében van? Próbálja ki a legújabb fejlesztési ötleteinket. Ezek nem befejezettek; lehetnek instabilak, változhatnak vagy el is tűnhetnek. <a>Tudjon meg többet</a>.", "Feeling experimental? Try out our latest ideas in development. These features are not finalised; they may be unstable, may change, or may be dropped altogether. <a>Learn more</a>.": "Kísérletező kedvében van? Próbálja ki a legújabb fejlesztési ötleteinket. Ezek nem befejezettek; lehetnek instabilak, változhatnak vagy el is tűnhetnek. <a>Tudjon meg többet</a>.",
"Use rich text instead of Markdown in the message composer. Plain text mode coming soon.": "Szövegszerkesztő használata a Markdown helyett az üzenetek írásakor. Nemsokára érkezik az egyszerű szöveges mód.",
"Rich text editor": "Szövegszerkesztő használata", "Rich text editor": "Szövegszerkesztő használata",
"Sign in instead": "Bejelentkezés inkább", "Sign in instead": "Bejelentkezés inkább",
"Re-enter email address": "E-mail cím megadása újból", "Re-enter email address": "E-mail cím megadása újból",
@ -3710,5 +3706,16 @@
"Decrypted source unavailable": "A visszafejtett forrás nem érhető el", "Decrypted source unavailable": "A visszafejtett forrás nem érhető el",
"%(displayName)s (%(matrixId)s)": "%(displayName)s (%(matrixId)s)", "%(displayName)s (%(matrixId)s)": "%(displayName)s (%(matrixId)s)",
"Connection error - Recording paused": "Kapcsolódási hiba Felvétel szüneteltetve", "Connection error - Recording paused": "Kapcsolódási hiba Felvétel szüneteltetve",
"%(senderName)s started a voice broadcast": "%(senderName)s hangos közvetítést indított" "%(senderName)s started a voice broadcast": "%(senderName)s hangos közvetítést indított",
"Unable to play this voice broadcast": "A hang közvetítés nem játszható le",
"Registration token": "Regisztrációs kulcs",
"Enter a registration token provided by the homeserver administrator.": "Adja meg a regisztrációs kulcsot amit a szolgáltató szerver adminisztrátora adott meg.",
"All messages and invites from this user will be hidden. Are you sure you want to ignore them?": "Minden üzenet és meghívó ettől a felhasználótól rejtve marad. Biztos, hogy figyelmen kívül hagyja?",
"Ignore %(user)s": "%(user)s figyelmen kívül hagyása",
"Manage account": "Fiók kezelése",
"Your account details are managed separately at <code>%(hostname)s</code>.": "A fiók adatok külön vannak kezelve itt: <code>%(hostname)s</code>.",
"Enable MSC3946 (to support late-arriving room archives)": "MSC3946 engedélyezése (a későn érkező szoba archívum támogatáshoz)",
"Dynamic room predecessors": "Dinamikus szoba előfutára",
"Indent decrease": "Behúzás csökkentés",
"Indent increase": "Behúzás növelés"
} }

View file

@ -3210,8 +3210,6 @@
"Beta feature": "Fitur beta", "Beta feature": "Fitur beta",
"Threads help keep conversations on-topic and easy to track. <a>Learn more</a>.": "Utasan membantu membuat percakapan sesuai topik dan mudah untuk dilacak. <a>Pelajari lebih lanjut</a>.", "Threads help keep conversations on-topic and easy to track. <a>Learn more</a>.": "Utasan membantu membuat percakapan sesuai topik dan mudah untuk dilacak. <a>Pelajari lebih lanjut</a>.",
"Keep discussions organised with threads.": "Buat diskusi tetap teratur dengan utasan.", "Keep discussions organised with threads.": "Buat diskusi tetap teratur dengan utasan.",
"<a>Give feedback</a>": "<a>Berikan masukan</a>",
"Threads are a beta feature": "Utasan adalah fitur beta",
"sends hearts": "mengirim hati", "sends hearts": "mengirim hati",
"Sends the given message with hearts": "Kirim pesan dengan hati", "Sends the given message with hearts": "Kirim pesan dengan hati",
"Confirm signing out these devices|one": "Konfirmasi mengeluarkan perangkat ini", "Confirm signing out these devices|one": "Konfirmasi mengeluarkan perangkat ini",
@ -3558,7 +3556,6 @@
"Allow a QR code to be shown in session manager to sign in another device (requires compatible homeserver)": "Perbolehkan sebuah kode QR untuk ditampilkan dalam pengelola sesi untuk masuk ke perangkat lain (membutuhkan homeserver yang kompatibel)", "Allow a QR code to be shown in session manager to sign in another device (requires compatible homeserver)": "Perbolehkan sebuah kode QR untuk ditampilkan dalam pengelola sesi untuk masuk ke perangkat lain (membutuhkan homeserver yang kompatibel)",
"play voice broadcast": "mainkan siaran suara", "play voice broadcast": "mainkan siaran suara",
"Yes, stop broadcast": "Iya, hentikan siaran", "Yes, stop broadcast": "Iya, hentikan siaran",
"Are you sure you want to stop your live broadcast?This will end the broadcast and the full recording will be available in the room.": "Apakah Anda yakin ingin menghentikan siaran langsung Anda? Ini akan mengakhiri siaran dan rekaman lengkap akan tersedia di ruangan.",
"Stop live broadcasting?": "Hentikan siaran langsung?", "Stop live broadcasting?": "Hentikan siaran langsung?",
"Someone else is already recording a voice broadcast. Wait for their voice broadcast to end to start a new one.": "Ada orang lain yang saat ini merekam sebuah siaran suara. Tunggu siaran suaranya berakhir untuk memulai yang baru.", "Someone else is already recording a voice broadcast. Wait for their voice broadcast to end to start a new one.": "Ada orang lain yang saat ini merekam sebuah siaran suara. Tunggu siaran suaranya berakhir untuk memulai yang baru.",
"You don't have the required permissions to start a voice broadcast in this room. Contact a room administrator to upgrade your permissions.": "Anda tidak memiliki izin untuk memulai sebuah siaran suara di ruangan ini. Hubungi sebuah administrator ruangan untuk meningkatkan izin Anda.", "You don't have the required permissions to start a voice broadcast in this room. Contact a room administrator to upgrade your permissions.": "Anda tidak memiliki izin untuk memulai sebuah siaran suara di ruangan ini. Hubungi sebuah administrator ruangan untuk meningkatkan izin Anda.",
@ -3640,7 +3637,6 @@
"Right panel stays open": "Panel kanan tetap buka", "Right panel stays open": "Panel kanan tetap buka",
"Currently experimental.": "Saat ini masih dalam uji coba.", "Currently experimental.": "Saat ini masih dalam uji coba.",
"New ways to ignore people": "Cara baru mengabaikan orang", "New ways to ignore people": "Cara baru mengabaikan orang",
"Use rich text instead of Markdown in the message composer. Plain text mode coming soon.": "Gunakan teks kaya daripada Markdown dalam komposer pesan. Mode teks biasa akan datang.",
"Rich text editor": "Editor teks kaya", "Rich text editor": "Editor teks kaya",
"Report to moderators": "Laporkan ke moderator", "Report to moderators": "Laporkan ke moderator",
"In rooms that support moderation, the “Report” button will let you report abuse to room moderators.": "Dalam ruangan yang mendukung moderasi, tombol “Laporkan” memungkinkan Anda untuk melaporkan penyalahgunaan ke moderator ruangan.", "In rooms that support moderation, the “Report” button will let you report abuse to room moderators.": "Dalam ruangan yang mendukung moderasi, tombol “Laporkan” memungkinkan Anda untuk melaporkan penyalahgunaan ke moderator ruangan.",
@ -3710,5 +3706,44 @@
"Decrypted source unavailable": "Sumber terdekripsi tidak tersedia", "Decrypted source unavailable": "Sumber terdekripsi tidak tersedia",
"Connection error - Recording paused": "Kesalahan koneksi - Perekaman dijeda", "Connection error - Recording paused": "Kesalahan koneksi - Perekaman dijeda",
"%(senderName)s started a voice broadcast": "%(senderName)s memulai sebuah siaran suara", "%(senderName)s started a voice broadcast": "%(senderName)s memulai sebuah siaran suara",
"%(displayName)s (%(matrixId)s)": "%(displayName)s (%(matrixId)s)" "%(displayName)s (%(matrixId)s)": "%(displayName)s (%(matrixId)s)",
"Registration token": "Token pendaftaran",
"Enter a registration token provided by the homeserver administrator.": "Masukkan token pendaftaran yang disediakan oleh administrator homeserver.",
"Unable to play this voice broadcast": "Tidak dapat memutar siaran suara ini",
"Manage account": "Kelola akun",
"Your account details are managed separately at <code>%(hostname)s</code>.": "Detail akun Anda dikelola secara terpisah di <code>%(hostname)s</code>.",
"Enable MSC3946 (to support late-arriving room archives)": "Aktifkan MSC3946 (untuk mendukung arsip ruangan yang datang terlambat)",
"Dynamic room predecessors": "Pendahulu ruang dinamis",
"All messages and invites from this user will be hidden. Are you sure you want to ignore them?": "Semua pesan dan undangan dari pengguna ini akan disembunyikan. Apakah Anda yakin ingin mengabaikan?",
"Ignore %(user)s": "Abaikan %(user)s",
"Indent increase": "Tambahkan indentasi",
"Indent decrease": "Kurangi indentasi",
"Unable to decrypt voice broadcast": "Tidak dapat mendekripsi siaran suara",
"View a list of polls in a room. (Under active development)": "Tampilkan peminkam. (Dalam pengemabgan aktif)",
"Polls history": "Riwatar pegunungan next2 i1 ak suara",
"Use rich text instead of Markdown in the message composer.": "Menggunakan teks kaya daripada Markdown dalam komposer pesan.",
"There are no polls in this room": "Tidak ada pemungutan suara di ruangan ini",
"Thread Id: ": "ID utasan: ",
"Threads timeline": "Lini masa utasan",
"Sender: ": "Pengirim: ",
"Type: ": "Jenis: ",
"ID: ": "ID: ",
"Last event:": "Peristiwa terakhir:",
"No receipt found": "Tidak ada laporan yang ditemukan",
"User read up to: ": "Pembacaan pengguna sampai: ",
"Dot: ": "Titik: ",
"Highlight: ": "Sorotan: ",
"Total: ": "Jumlah: ",
"Main timeline": "Lini masa utama",
"not encrypted 🚨": "tidak terenkripsi 🚨",
"encrypted ✅": "terenkripsi ✅",
"Room is ": "Ruangan ",
"Notification state is": "Keadaan notifikasi",
", count:": ", jumlah:",
"Room unread status: ": "Keadaan ruangan belum dibaca: ",
"Room status": "Keadaan ruangan",
"Notifications debug": "Pengawakutuan notifikasi",
"unknown": "tidak diketahui",
"Red": "Merah",
"Grey": "Abu-Abu"
} }

View file

@ -2986,7 +2986,6 @@
"Enter fullscreen": "Fara í fullskjásstillingu", "Enter fullscreen": "Fara í fullskjásstillingu",
"Show spaces": "Sýna svæði", "Show spaces": "Sýna svæði",
"Failed to set direct message tag": "Ekki tókst að stilla merki um bein skilaboð", "Failed to set direct message tag": "Ekki tókst að stilla merki um bein skilaboð",
"<a>Give feedback</a>": "<a>Gefðu umsögn</a>",
"Check your email to continue": "Skoðaðu tölvupóstinn þinn til að halda áfram", "Check your email to continue": "Skoðaðu tölvupóstinn þinn til að halda áfram",
"Stop and close": "Hætta og loka", "Stop and close": "Hætta og loka",
"Show rooms": "Sýna spjallrásir", "Show rooms": "Sýna spjallrásir",
@ -3180,7 +3179,6 @@
"resume voice broadcast": "halda áfram með talútsendingu", "resume voice broadcast": "halda áfram með talútsendingu",
"Listen to live broadcast?": "Hlusta á beina útsendingu?", "Listen to live broadcast?": "Hlusta á beina útsendingu?",
"Yes, stop broadcast": "Já, stöðva útsendingu", "Yes, stop broadcast": "Já, stöðva útsendingu",
"Are you sure you want to stop your live broadcast?This will end the broadcast and the full recording will be available in the room.": "Ertu viss um að þú viljir stöðva þessa beinu útsendingu? Þetta mun stöðva útsendinguna og full skráning hennar verður tiltæk á spjallrásinni.",
"Stop live broadcasting?": "Stöðva beina útsendingu?", "Stop live broadcasting?": "Stöðva beina útsendingu?",
"%(senderName)s ended a voice broadcast": "%(senderName)s endaði talútsendingu", "%(senderName)s ended a voice broadcast": "%(senderName)s endaði talútsendingu",
"You ended a voice broadcast": "Þú endaðir talútsendingu", "You ended a voice broadcast": "Þú endaðir talútsendingu",

View file

@ -3205,8 +3205,6 @@
"New video room": "Nuova stanza video", "New video room": "Nuova stanza video",
"New room": "Nuova stanza", "New room": "Nuova stanza",
"Threads help keep conversations on-topic and easy to track. <a>Learn more</a>.": "Le conversazioni aiutano a tenere le discussioni in tema e rintracciabili. <a>Maggiori info</a>.", "Threads help keep conversations on-topic and easy to track. <a>Learn more</a>.": "Le conversazioni aiutano a tenere le discussioni in tema e rintracciabili. <a>Maggiori info</a>.",
"<a>Give feedback</a>": "<a>Lascia feedback</a>",
"Threads are a beta feature": "Le conversazioni sono una funzionalità beta",
"Threads help keep your conversations on-topic and easy to track.": "Le conversazioni ti aiutano a tenere le tue discussioni in tema e rintracciabili.", "Threads help keep your conversations on-topic and easy to track.": "Le conversazioni ti aiutano a tenere le tue discussioni in tema e rintracciabili.",
"%(featureName)s Beta feedback": "Feedback %(featureName)s beta", "%(featureName)s Beta feedback": "Feedback %(featureName)s beta",
"Beta feature. Click to learn more.": "Funzionalità beta. Clicca per maggiori informazioni.", "Beta feature. Click to learn more.": "Funzionalità beta. Clicca per maggiori informazioni.",
@ -3532,7 +3530,6 @@
"pause voice broadcast": "sospendi trasmissione vocale", "pause voice broadcast": "sospendi trasmissione vocale",
"Notifications silenced": "Notifiche silenziose", "Notifications silenced": "Notifiche silenziose",
"Yes, stop broadcast": "Sì, ferma la trasmissione", "Yes, stop broadcast": "Sì, ferma la trasmissione",
"Are you sure you want to stop your live broadcast?This will end the broadcast and the full recording will be available in the room.": "Vuoi davvero fermare la tua trasmissione in diretta? Verrà terminata la trasmissione e la registrazione completa sarà disponibile nella stanza.",
"Stop live broadcasting?": "Fermare la trasmissione in diretta?", "Stop live broadcasting?": "Fermare la trasmissione in diretta?",
"You don't have the required permissions to start a voice broadcast in this room. Contact a room administrator to upgrade your permissions.": "Non hai l'autorizzazione necessaria per iniziare una trasmissione vocale in questa stanza. Contatta un amministratore della stanza per aggiornare le tue autorizzazioni.", "You don't have the required permissions to start a voice broadcast in this room. Contact a room administrator to upgrade your permissions.": "Non hai l'autorizzazione necessaria per iniziare una trasmissione vocale in questa stanza. Contatta un amministratore della stanza per aggiornare le tue autorizzazioni.",
"You are already recording a voice broadcast. Please end your current voice broadcast to start a new one.": "Stai già registrando una trasmissione vocale. Termina quella in corso per iniziarne una nuova.", "You are already recording a voice broadcast. Please end your current voice broadcast to start a new one.": "Stai già registrando una trasmissione vocale. Termina quella in corso per iniziarne una nuova.",
@ -3636,7 +3633,6 @@
"Right panel stays open": "Il pannello destro resta aperto", "Right panel stays open": "Il pannello destro resta aperto",
"Currently experimental.": "Al momento è sperimentale.", "Currently experimental.": "Al momento è sperimentale.",
"New ways to ignore people": "Nuovi modi di ignorare le persone", "New ways to ignore people": "Nuovi modi di ignorare le persone",
"Use rich text instead of Markdown in the message composer. Plain text mode coming soon.": "Usa il formato rich text invece del markdown nella scrittura dei messaggi. La modalità in testo semplice è in arrivo.",
"Rich text editor": "Editor in rich text", "Rich text editor": "Editor in rich text",
"In rooms that support moderation, the “Report” button will let you report abuse to room moderators.": "Nelle stanze che supportano la moderazione, il pulsante \"Segnala\" ti permetterà di segnalare abusi ai moderatori della stanza.", "In rooms that support moderation, the “Report” button will let you report abuse to room moderators.": "Nelle stanze che supportano la moderazione, il pulsante \"Segnala\" ti permetterà di segnalare abusi ai moderatori della stanza.",
"Report to moderators": "Segnala ai moderatori", "Report to moderators": "Segnala ai moderatori",
@ -3710,5 +3706,44 @@
"Bulleted list": "Elenco puntato", "Bulleted list": "Elenco puntato",
"Connection error - Recording paused": "Errore di connessione - Registrazione in pausa", "Connection error - Recording paused": "Errore di connessione - Registrazione in pausa",
"%(senderName)s started a voice broadcast": "%(senderName)s ha iniziato una trasmissione vocale", "%(senderName)s started a voice broadcast": "%(senderName)s ha iniziato una trasmissione vocale",
"%(displayName)s (%(matrixId)s)": "%(displayName)s (%(matrixId)s)" "%(displayName)s (%(matrixId)s)": "%(displayName)s (%(matrixId)s)",
"Registration token": "Token di registrazione",
"Enter a registration token provided by the homeserver administrator.": "Inserisci un token di registrazione fornito dall'amministratore dell'homeserver.",
"Unable to play this voice broadcast": "Impossibile avviare questa trasmissione vocale",
"All messages and invites from this user will be hidden. Are you sure you want to ignore them?": "Tutti i messaggi e gli inviti da questo utente verranno nascosti. Vuoi davvero ignorarli?",
"Ignore %(user)s": "Ignora %(user)s",
"Indent decrease": "Diminuzione indentazione",
"Indent increase": "Aumento indentazione",
"Manage account": "Gestisci account",
"Your account details are managed separately at <code>%(hostname)s</code>.": "I dettagli del tuo account sono gestiti separatamente su <code>%(hostname)s</code>.",
"Enable MSC3946 (to support late-arriving room archives)": "Attiva MSC3946 (per supportare archivi della stanza arrivati in ritardo)",
"There are no polls in this room": "Non ci sono sondaggi in questa stanza",
"Dynamic room predecessors": "Predecessori della stanza dinamici",
"View a list of polls in a room. (Under active development)": "Vedi una lista di sondaggi in una stanza. (In sviluppo attivo)",
"Polls history": "Cronologia sondaggi",
"Use rich text instead of Markdown in the message composer.": "Usa il rich text invece del Markdown nel compositore di messaggi.",
"Unable to decrypt voice broadcast": "Impossibile decifrare la trasmissione vocale",
"Thread Id: ": "ID conversazione: ",
"Threads timeline": "Linea temporale conversazioni",
"Sender: ": "Mittente: ",
"Type: ": "Tipo: ",
"ID: ": "ID: ",
"Last event:": "Ultimo evento:",
"No receipt found": "Nessuna ricevuta trovata",
"User read up to: ": "L'utente ha letto fino: ",
"Dot: ": "Punto: ",
"Highlight: ": "Evidenziazione: ",
"Total: ": "Totale: ",
"Main timeline": "Linea temporale principale",
"not encrypted 🚨": "non crittografata 🚨",
"encrypted ✅": "crittografata ✅",
"Room is ": "La stanza è ",
"Notification state is": "Lo stato di notifica è",
", count:": ", conteggio:",
"Room unread status: ": "Stato non letto della stanza: ",
"Room status": "Stato della stanza",
"Notifications debug": "Debug notifiche",
"unknown": "sconosciuto",
"Red": "Rosso",
"Grey": "Grigio"
} }

File diff suppressed because it is too large Load diff

View file

@ -962,8 +962,6 @@
"Tried to load a specific point in this room's timeline, but was unable to find it.": "ພະຍາຍາມໂຫຼດຈຸດສະເພາະໃນທາມລາຍຂອງຫ້ອງນີ້, ແຕ່ບໍ່ສາມາດຊອກຫາມັນໄດ້.", "Tried to load a specific point in this room's timeline, but was unable to find it.": "ພະຍາຍາມໂຫຼດຈຸດສະເພາະໃນທາມລາຍຂອງຫ້ອງນີ້, ແຕ່ບໍ່ສາມາດຊອກຫາມັນໄດ້.",
"Tried to load a specific point in this room's timeline, but you do not have permission to view the message in question.": "ພະຍາຍາມໂຫຼດຈຸດສະເພາະຢູ່ໃນທາມລາຍຂອງຫ້ອງນີ້, ແຕ່ທ່ານບໍ່ໄດ້ຮັບອະນຸຍາດໃຫ້ເບິ່ງຂໍ້ຄວາມທີ່ເປັນຄໍາຖາມ.", "Tried to load a specific point in this room's timeline, but you do not have permission to view the message in question.": "ພະຍາຍາມໂຫຼດຈຸດສະເພາະຢູ່ໃນທາມລາຍຂອງຫ້ອງນີ້, ແຕ່ທ່ານບໍ່ໄດ້ຮັບອະນຸຍາດໃຫ້ເບິ່ງຂໍ້ຄວາມທີ່ເປັນຄໍາຖາມ.",
"Thread": "ກະທູ້", "Thread": "ກະທູ້",
"<a>Give feedback</a>": "<a>ໃຫ້ຄໍາຄິດເຫັນ</a>",
"Threads are a beta feature": "ກະທູ້ແມ່ນຄຸນສົມບັດຂອງເບຕ້າ",
"Keep discussions organised with threads": "ຮັກສາການສົນທະນາທີ່ມີການຈັດລະບຽບ", "Keep discussions organised with threads": "ຮັກສາການສົນທະນາທີ່ມີການຈັດລະບຽບ",
"<b>Tip:</b> Use “%(replyInThread)s” when hovering over a message.": "<b>ເຄັດລັບ:</b> ໃຊ້ “%(replyInThread)s” ເມື່ອເລື່ອນໃສ່ຂໍ້ຄວາມ.", "<b>Tip:</b> Use “%(replyInThread)s” when hovering over a message.": "<b>ເຄັດລັບ:</b> ໃຊ້ “%(replyInThread)s” ເມື່ອເລື່ອນໃສ່ຂໍ້ຄວາມ.",
"Threads help keep your conversations on-topic and easy to track.": "ກະທູ້ຊ່ວຍໃຫ້ການສົນທະນາຂອງທ່ານຢູ່ໃນຫົວຂໍ້ ແລະ ງ່າຍຕໍ່ການຕິດຕາມ.", "Threads help keep your conversations on-topic and easy to track.": "ກະທູ້ຊ່ວຍໃຫ້ການສົນທະນາຂອງທ່ານຢູ່ໃນຫົວຂໍ້ ແລະ ງ່າຍຕໍ່ການຕິດຕາມ.",

View file

@ -3201,8 +3201,6 @@
"Toggle Link": "Koppeling wisselen", "Toggle Link": "Koppeling wisselen",
"Accessibility": "Toegankelijkheid", "Accessibility": "Toegankelijkheid",
"Event ID: %(eventId)s": "Gebeurtenis ID: %(eventId)s", "Event ID: %(eventId)s": "Gebeurtenis ID: %(eventId)s",
"<a>Give feedback</a>": "<a>Feedback geven</a>",
"Threads are a beta feature": "Threads zijn een bètafunctie",
"Threads help keep your conversations on-topic and easy to track.": "Threads helpen jou gesprekken on-topic te houden en gemakkelijk bij te houden.", "Threads help keep your conversations on-topic and easy to track.": "Threads helpen jou gesprekken on-topic te houden en gemakkelijk bij te houden.",
"Reply to an ongoing thread or use “%(replyInThread)s” when hovering over a message to start a new one.": "Reageer op een lopende thread of gebruik \"%(replyInThread)s\" wanneer je de muisaanwijzer op een bericht plaatst om een nieuwe te starten.", "Reply to an ongoing thread or use “%(replyInThread)s” when hovering over a message to start a new one.": "Reageer op een lopende thread of gebruik \"%(replyInThread)s\" wanneer je de muisaanwijzer op een bericht plaatst om een nieuwe te starten.",
"We'll create rooms for each of them.": "We zullen kamers voor elk van hen maken.", "We'll create rooms for each of them.": "We zullen kamers voor elk van hen maken.",
@ -3567,7 +3565,6 @@
"resume voice broadcast": "hervat spraakuitzending", "resume voice broadcast": "hervat spraakuitzending",
"play voice broadcast": "spraakuitzending afspelen", "play voice broadcast": "spraakuitzending afspelen",
"Yes, stop broadcast": "Ja, stop uitzending", "Yes, stop broadcast": "Ja, stop uitzending",
"Are you sure you want to stop your live broadcast?This will end the broadcast and the full recording will be available in the room.": "Weet u zeker dat u de live uitzending wilt stoppen? Hiermee wordt de uitzending beëindigd en is de volledige opname beschikbaar in de kamer.",
"Stop live broadcasting?": "Live uitzending stoppen?", "Stop live broadcasting?": "Live uitzending stoppen?",
"Someone else is already recording a voice broadcast. Wait for their voice broadcast to end to start a new one.": "Iemand anders neemt al een spraakuitzending op. Wacht tot de spraakuitzending is afgelopen om een nieuwe te starten.", "Someone else is already recording a voice broadcast. Wait for their voice broadcast to end to start a new one.": "Iemand anders neemt al een spraakuitzending op. Wacht tot de spraakuitzending is afgelopen om een nieuwe te starten.",
"You don't have the required permissions to start a voice broadcast in this room. Contact a room administrator to upgrade your permissions.": "U heeft niet de vereiste rechten om een spraakuitzending in deze kamer te starten. Neem contact op met een kamer beheerder om uw machtiging aan te passen.", "You don't have the required permissions to start a voice broadcast in this room. Contact a room administrator to upgrade your permissions.": "U heeft niet de vereiste rechten om een spraakuitzending in deze kamer te starten. Neem contact op met een kamer beheerder om uw machtiging aan te passen.",

View file

@ -2846,7 +2846,6 @@
"Fetching events...": "Buscando eventos...", "Fetching events...": "Buscando eventos...",
"Starting export process...": "Iniciando processo de exportação...", "Starting export process...": "Iniciando processo de exportação...",
"Yes, stop broadcast": "Sim, interromper a transmissão", "Yes, stop broadcast": "Sim, interromper a transmissão",
"Are you sure you want to stop your live broadcast?This will end the broadcast and the full recording will be available in the room.": "Tem certeza de que deseja interromper sua transmissão ao vivo? Isso encerrará a transmissão e a gravação completa estará disponível na sala.",
"Stop live broadcasting?": "Parar a transmissão ao vivo?", "Stop live broadcasting?": "Parar a transmissão ao vivo?",
"Someone else is already recording a voice broadcast. Wait for their voice broadcast to end to start a new one.": "Outra pessoa já está gravando uma transmissão de voz. Aguarde o término da transmissão de voz para iniciar uma nova.", "Someone else is already recording a voice broadcast. Wait for their voice broadcast to end to start a new one.": "Outra pessoa já está gravando uma transmissão de voz. Aguarde o término da transmissão de voz para iniciar uma nova.",
"You don't have the required permissions to start a voice broadcast in this room. Contact a room administrator to upgrade your permissions.": "Você não tem as permissões necessárias para iniciar uma transmissão de voz nesta sala. Entre em contato com um administrador de sala para atualizar suas permissões.", "You don't have the required permissions to start a voice broadcast in this room. Contact a room administrator to upgrade your permissions.": "Você não tem as permissões necessárias para iniciar uma transmissão de voz nesta sala. Entre em contato com um administrador de sala para atualizar suas permissões.",

View file

@ -3192,7 +3192,6 @@
"Signing out your devices will delete the message encryption keys stored on them, making encrypted chat history unreadable.": "При выходе из устройств удаляются хранящиеся на них ключи шифрования сообщений, что сделает зашифрованную историю чатов нечитаемой.", "Signing out your devices will delete the message encryption keys stored on them, making encrypted chat history unreadable.": "При выходе из устройств удаляются хранящиеся на них ключи шифрования сообщений, что сделает зашифрованную историю чатов нечитаемой.",
"Resetting your password on this homeserver will cause all of your devices to be signed out. This will delete the message encryption keys stored on them, making encrypted chat history unreadable.": "Сброс пароля на этом домашнем сервере приведет к тому, что все ваши устройства будут отключены. Это приведет к удалению хранящихся на них ключей шифрования сообщений, что сделает зашифрованную историю чата нечитаемой.", "Resetting your password on this homeserver will cause all of your devices to be signed out. This will delete the message encryption keys stored on them, making encrypted chat history unreadable.": "Сброс пароля на этом домашнем сервере приведет к тому, что все ваши устройства будут отключены. Это приведет к удалению хранящихся на них ключей шифрования сообщений, что сделает зашифрованную историю чата нечитаемой.",
"Event ID: %(eventId)s": "ID события: %(eventId)s", "Event ID: %(eventId)s": "ID события: %(eventId)s",
"Threads are a beta feature": "Обсуждения — бета-функция",
"Your message wasn't sent because this homeserver has been blocked by its administrator. Please <a>contact your service administrator</a> to continue using the service.": "Ваше сообщение не отправлено, поскольку домашний сервер заблокирован его администратором. <a>Обратитесь к администратору службы</a>, чтобы продолжить её использование.", "Your message wasn't sent because this homeserver has been blocked by its administrator. Please <a>contact your service administrator</a> to continue using the service.": "Ваше сообщение не отправлено, поскольку домашний сервер заблокирован его администратором. <a>Обратитесь к администратору службы</a>, чтобы продолжить её использование.",
"Resent!": "Отправлено повторно!", "Resent!": "Отправлено повторно!",
"Did not receive it? <a>Resend it</a>": "Не получили? <a>Отправить его повторно</a>", "Did not receive it? <a>Resend it</a>": "Не получили? <a>Отправить его повторно</a>",
@ -3335,7 +3334,6 @@
"Please note: this is a labs feature using a temporary implementation. This means you will not be able to delete your location history, and advanced users will be able to see your location history even after you stop sharing your live location with this room.": "Обратите внимание: это временная реализация функции. Это означает, что вы не сможете удалить свою историю местоположений, а опытные пользователи смогут просмотреть вашу историю местоположений даже после того, как вы перестанете делиться своим местоположением в этой комнате.", "Please note: this is a labs feature using a temporary implementation. This means you will not be able to delete your location history, and advanced users will be able to see your location history even after you stop sharing your live location with this room.": "Обратите внимание: это временная реализация функции. Это означает, что вы не сможете удалить свою историю местоположений, а опытные пользователи смогут просмотреть вашу историю местоположений даже после того, как вы перестанете делиться своим местоположением в этой комнате.",
"View live location": "Посмотреть трансляцию местоположения", "View live location": "Посмотреть трансляцию местоположения",
"Live location enabled": "Трансляция местоположения включена", "Live location enabled": "Трансляция местоположения включена",
"<a>Give feedback</a>": "<a>Оставить отзыв</a>",
"If you can't find the room you're looking for, ask for an invite or create a new room.": "Если не можете найти нужную комнату, просто попросите пригласить вас или создайте новую комнату.", "If you can't find the room you're looking for, ask for an invite or create a new room.": "Если не можете найти нужную комнату, просто попросите пригласить вас или создайте новую комнату.",
"Send custom timeline event": "Отправить пользовательское событие ленты сообщений", "Send custom timeline event": "Отправить пользовательское событие ленты сообщений",
"No verification requests found": "Запросов проверки не найдено", "No verification requests found": "Запросов проверки не найдено",
@ -3503,7 +3501,6 @@
"resume voice broadcast": "продолжить голосовую трансляцию", "resume voice broadcast": "продолжить голосовую трансляцию",
"play voice broadcast": "проиграть голосовую трансляцию", "play voice broadcast": "проиграть голосовую трансляцию",
"Yes, stop broadcast": "Да, остановить трансляцию", "Yes, stop broadcast": "Да, остановить трансляцию",
"Are you sure you want to stop your live broadcast?This will end the broadcast and the full recording will be available in the room.": "Вы уверены в том, что хотите остановить голосовую трансляцию? Это закончит трансляцию и полная запись станет доступной в комнате.",
"Stop live broadcasting?": "Закончить голосовую трансляцию?", "Stop live broadcasting?": "Закончить голосовую трансляцию?",
"Someone else is already recording a voice broadcast. Wait for their voice broadcast to end to start a new one.": "Кто-то уже записывает голосовую трансляцию. Ждите окончания их голосовой трансляции, чтобы начать новую.", "Someone else is already recording a voice broadcast. Wait for their voice broadcast to end to start a new one.": "Кто-то уже записывает голосовую трансляцию. Ждите окончания их голосовой трансляции, чтобы начать новую.",
"You don't have the required permissions to start a voice broadcast in this room. Contact a room administrator to upgrade your permissions.": "У вас нет необходимых разрешений, чтобы начать голосовую трансляцию в этой комнате. Свяжитесь с администратором комнаты для получения разрешений.", "You don't have the required permissions to start a voice broadcast in this room. Contact a room administrator to upgrade your permissions.": "У вас нет необходимых разрешений, чтобы начать голосовую трансляцию в этой комнате. Свяжитесь с администратором комнаты для получения разрешений.",

View file

@ -3203,8 +3203,6 @@
"%(count)s participants|other": "%(count)s účastníkov", "%(count)s participants|other": "%(count)s účastníkov",
"New video room": "Nová video miestnosť", "New video room": "Nová video miestnosť",
"New room": "Nová miestnosť", "New room": "Nová miestnosť",
"<a>Give feedback</a>": "<a>Poskytnúť spätnú väzbu</a>",
"Threads are a beta feature": "Vlákna sú beta funkciou",
"Threads help keep your conversations on-topic and easy to track.": "Vlákna pomáhajú udržiavať konverzácie v téme a uľahčujú ich sledovanie.", "Threads help keep your conversations on-topic and easy to track.": "Vlákna pomáhajú udržiavať konverzácie v téme a uľahčujú ich sledovanie.",
"%(featureName)s Beta feedback": "%(featureName)s Beta spätná väzba", "%(featureName)s Beta feedback": "%(featureName)s Beta spätná väzba",
"Beta feature. Click to learn more.": "Beta funkcia. Kliknutím sa dozviete viac.", "Beta feature. Click to learn more.": "Beta funkcia. Kliknutím sa dozviete viac.",
@ -3557,7 +3555,6 @@
"Browser": "Prehliadač", "Browser": "Prehliadač",
"Allow a QR code to be shown in session manager to sign in another device (requires compatible homeserver)": "Umožniť zobrazenie QR kódu v správcovi relácií na prihlásenie do iného zariadenia (vyžaduje kompatibilný domovský server)", "Allow a QR code to be shown in session manager to sign in another device (requires compatible homeserver)": "Umožniť zobrazenie QR kódu v správcovi relácií na prihlásenie do iného zariadenia (vyžaduje kompatibilný domovský server)",
"Yes, stop broadcast": "Áno, zastaviť vysielanie", "Yes, stop broadcast": "Áno, zastaviť vysielanie",
"Are you sure you want to stop your live broadcast?This will end the broadcast and the full recording will be available in the room.": "Určite chcete zastaviť vaše vysielanie naživo? Tým sa vysielanie ukončí a v miestnosti bude k dispozícii celý záznam.",
"Stop live broadcasting?": "Zastaviť vysielanie naživo?", "Stop live broadcasting?": "Zastaviť vysielanie naživo?",
"Someone else is already recording a voice broadcast. Wait for their voice broadcast to end to start a new one.": "Niekto iný už nahráva hlasové vysielanie. Počkajte, kým sa skončí jeho hlasové vysielanie, a potom spustite nové.", "Someone else is already recording a voice broadcast. Wait for their voice broadcast to end to start a new one.": "Niekto iný už nahráva hlasové vysielanie. Počkajte, kým sa skončí jeho hlasové vysielanie, a potom spustite nové.",
"You don't have the required permissions to start a voice broadcast in this room. Contact a room administrator to upgrade your permissions.": "Nemáte požadované oprávnenia na spustenie hlasového vysielania v tejto miestnosti. Obráťte sa na správcu miestnosti, aby vám rozšíril oprávnenia.", "You don't have the required permissions to start a voice broadcast in this room. Contact a room administrator to upgrade your permissions.": "Nemáte požadované oprávnenia na spustenie hlasového vysielania v tejto miestnosti. Obráťte sa na správcu miestnosti, aby vám rozšíril oprávnenia.",
@ -3639,7 +3636,6 @@
"Right panel stays open": "Pravý panel zostáva otvorený", "Right panel stays open": "Pravý panel zostáva otvorený",
"Currently experimental.": "V súčasnosti experimentálne.", "Currently experimental.": "V súčasnosti experimentálne.",
"New ways to ignore people": "Nové spôsoby ignorovania ľudí", "New ways to ignore people": "Nové spôsoby ignorovania ľudí",
"Use rich text instead of Markdown in the message composer. Plain text mode coming soon.": "Používajte rozšírený režim textu v správach. Obyčajný text už čoskoro.",
"Rich text editor": "Rozšírený textový editor", "Rich text editor": "Rozšírený textový editor",
"In rooms that support moderation, the “Report” button will let you report abuse to room moderators.": "V miestnostiach, ktoré podporujú moderovanie, môžete pomocou tlačidla \"Nahlásiť\" nahlásiť porušovanie pravidiel moderátorom miestnosti.", "In rooms that support moderation, the “Report” button will let you report abuse to room moderators.": "V miestnostiach, ktoré podporujú moderovanie, môžete pomocou tlačidla \"Nahlásiť\" nahlásiť porušovanie pravidiel moderátorom miestnosti.",
"Report to moderators": "Nahlásiť moderátorom", "Report to moderators": "Nahlásiť moderátorom",
@ -3710,5 +3706,45 @@
"Decrypted source unavailable": "Dešifrovaný zdroj nie je dostupný", "Decrypted source unavailable": "Dešifrovaný zdroj nie je dostupný",
"Connection error - Recording paused": "Chyba pripojenia - nahrávanie pozastavené", "Connection error - Recording paused": "Chyba pripojenia - nahrávanie pozastavené",
"%(senderName)s started a voice broadcast": "%(senderName)s začal/a hlasové vysielanie", "%(senderName)s started a voice broadcast": "%(senderName)s začal/a hlasové vysielanie",
"%(displayName)s (%(matrixId)s)": "%(displayName)s (%(matrixId)s)" "%(displayName)s (%(matrixId)s)": "%(displayName)s (%(matrixId)s)",
"Registration token": "Registračný token",
"Enter a registration token provided by the homeserver administrator.": "Zadajte registračný token poskytnutý správcom domovského servera.",
"Unable to play this voice broadcast": "Toto hlasové vysielanie nie je možné prehrať",
"Dynamic room predecessors": "Predchodcovia dynamickej miestnosti",
"Manage account": "Spravovať účet",
"Your account details are managed separately at <code>%(hostname)s</code>.": "Údaje o vašom účte sú spravované samostatne na adrese <code>%(hostname)s</code>.",
"Enable MSC3946 (to support late-arriving room archives)": "Zapnúť MSC3946 (na podporu neskorých archívov miestností)",
"All messages and invites from this user will be hidden. Are you sure you want to ignore them?": "Všetky správy a pozvánky od tohto používateľa budú skryté. Ste si istí, že ich chcete ignorovať?",
"Ignore %(user)s": "Ignorovať %(user)s",
"Indent decrease": "Zmenšenie odsadenia",
"Indent increase": "Zväčšenie odsadenia",
"Unable to decrypt voice broadcast": "Hlasové vysielanie sa nedá dešifrovať",
"View a list of polls in a room. (Under active development)": "Zobraziť zoznam ankiet v miestnosti. (V štádiu aktívneho vývoja)",
"Polls history": "História ankety",
"Use rich text instead of Markdown in the message composer.": "Použiť rozšírený text namiesto Markdown v správach.",
"No receipt found": "Nenašlo sa žiadne potvrdenie",
"User read up to: ": "Používateľ sa dočítal až do: ",
"Dot: ": "Bodka: ",
"Room unread status: ": "Stav neprečítaných v miestnosti: ",
"Thread Id: ": "ID vlákna: ",
"Threads timeline": "Časová os vlákien",
"Sender: ": "Odosielateľ: ",
"ID: ": "ID: ",
"Type: ": "Typ: ",
"Last event:": "Posledná udalosť:",
"Highlight: ": "Zvýraznené: ",
"Total: ": "Celkom: ",
"Main timeline": "Hlavná časová os",
"not encrypted 🚨": "nezašifrovaná 🚨",
"encrypted ✅": "zašifrovaná ✅",
"Room is ": "Miestnosť je ",
"Notification state is": "Stav oznámenia je",
", count:": ", počet:",
"Room status": "Stav miestnosti",
"There are no polls in this room": "V tejto miestnosti nie sú žiadne ankety",
"Notifications debug": "Ladenie oznámení",
"unknown": "neznáme",
"Red": "Červená",
"Grey": "Sivá",
"Are you sure you want to stop your live broadcast? This will end the broadcast and the full recording will be available in the room.": "Určite chcete zastaviť vysielanie naživo? Tým sa vysielanie ukončí a v miestnosti bude k dispozícii celý záznam."
} }

View file

@ -3199,8 +3199,6 @@
"%(count)s participants|other": "%(count)s pjesëmarrës", "%(count)s participants|other": "%(count)s pjesëmarrës",
"New video room": "Dhomë e re me video", "New video room": "Dhomë e re me video",
"New room": "Dhomë e re", "New room": "Dhomë e re",
"<a>Give feedback</a>": "<a>Jepni përshtypjet</a>",
"Threads are a beta feature": "Rrjedhat janë një veçori beta",
"Threads help keep your conversations on-topic and easy to track.": "Rrjedhat ndihmojnë që të mbahen bisedat tuaja brenda temës dhe të ndiqen kollaj.", "Threads help keep your conversations on-topic and easy to track.": "Rrjedhat ndihmojnë që të mbahen bisedat tuaja brenda temës dhe të ndiqen kollaj.",
"%(featureName)s Beta feedback": "Përshtypje për %(featureName)s Beta", "%(featureName)s Beta feedback": "Përshtypje për %(featureName)s Beta",
"Beta feature. Click to learn more.": "Veçori në version beta. Klikoni për të mësuar më tepër.", "Beta feature. Click to learn more.": "Veçori në version beta. Klikoni për të mësuar më tepër.",
@ -3566,7 +3564,6 @@
"Show shortcut to welcome checklist above the room list": "Shhkurtoren e listës së hapave të mirëseardhjes shfaqe mbi listën e dhomave", "Show shortcut to welcome checklist above the room list": "Shhkurtoren e listës së hapave të mirëseardhjes shfaqe mbi listën e dhomave",
"Allow a QR code to be shown in session manager to sign in another device (requires compatible homeserver)": "Lejoni shfaqjen e një kodi QR në përgjegjës sesioni, për hyrje në një pajisje tjetër (lyp shërbyes Home të përputhshëm)", "Allow a QR code to be shown in session manager to sign in another device (requires compatible homeserver)": "Lejoni shfaqjen e një kodi QR në përgjegjës sesioni, për hyrje në një pajisje tjetër (lyp shërbyes Home të përputhshëm)",
"Our new sessions manager provides better visibility of all your sessions, and greater control over them including the ability to remotely toggle push notifications.": "Përgjegjësi ynë i ri i sesioneve furnizon dukshmëri më të mirë të krejt sesioneve tuaja dhe kontroll më të fortë mbi ta, përfshi aftësinë për aktivizim/çaktivizim së largëti të njoftimeve push.", "Our new sessions manager provides better visibility of all your sessions, and greater control over them including the ability to remotely toggle push notifications.": "Përgjegjësi ynë i ri i sesioneve furnizon dukshmëri më të mirë të krejt sesioneve tuaja dhe kontroll më të fortë mbi ta, përfshi aftësinë për aktivizim/çaktivizim së largëti të njoftimeve push.",
"Are you sure you want to stop your live broadcast?This will end the broadcast and the full recording will be available in the room.": "Jeni i sigurt se doni të ndalet transmetimi juaj i drejtpërdrejtë? Kjo do të përfundojë transmetimin dhe regjistrimi i plotë do të jetë i passhëm te dhoma.",
"We need to know its you before resetting your password.\n Click the link in the email we just sent to <b>%(email)s</b>": "Duhet të dimë se jeni ju, përpara ricaktimit të fjalëkalimt.\n Klikoni lidhjen te email-i që sapo ju dërguam te <b>%(email)s</b>", "We need to know its you before resetting your password.\n Click the link in the email we just sent to <b>%(email)s</b>": "Duhet të dimë se jeni ju, përpara ricaktimit të fjalëkalimt.\n Klikoni lidhjen te email-i që sapo ju dërguam te <b>%(email)s</b>",
"Verify your email to continue": "Që të vazhdohet, verifikoni email-in tuaj", "Verify your email to continue": "Që të vazhdohet, verifikoni email-in tuaj",
"<b>%(homeserver)s</b> will send you a verification link to let you reset your password.": "<b>%(homeserver)s</b> do tju dërgojë një lidhje verifikimi, që tju lejojë të ricaktoni fjalëkalimin tuaj.", "<b>%(homeserver)s</b> will send you a verification link to let you reset your password.": "<b>%(homeserver)s</b> do tju dërgojë një lidhje verifikimi, që tju lejojë të ricaktoni fjalëkalimin tuaj.",
@ -3629,7 +3626,6 @@
"Right panel stays open": "Paneli i djathtë mbetet i hapur", "Right panel stays open": "Paneli i djathtë mbetet i hapur",
"Currently experimental.": "Aktualisht eksperimental.", "Currently experimental.": "Aktualisht eksperimental.",
"New ways to ignore people": "Rrugë të reja për të shpërfillur njerëz", "New ways to ignore people": "Rrugë të reja për të shpërfillur njerëz",
"Use rich text instead of Markdown in the message composer. Plain text mode coming soon.": "Përdorni te hartuesi i mesazheve tekst të pasur, në vend se Markdown. Së shpejti vjen mënyra tekst i thjeshtë.",
"Rich text editor": "Përpunues teksti të pasur", "Rich text editor": "Përpunues teksti të pasur",
"In rooms that support moderation, the “Report” button will let you report abuse to room moderators.": "Në dhoma që mbulojnë moderimin, butoni “Raportojeni” do tju lejojë tu raportoni abuzim moderatorëve të dhomës.", "In rooms that support moderation, the “Report” button will let you report abuse to room moderators.": "Në dhoma që mbulojnë moderimin, butoni “Raportojeni” do tju lejojë tu raportoni abuzim moderatorëve të dhomës.",
"Report to moderators": "Raportojeni te moderatorët", "Report to moderators": "Raportojeni te moderatorët",
@ -3689,7 +3685,7 @@
"Yes, end my recording": "Po, përfundoje regjistrimin tim", "Yes, end my recording": "Po, përfundoje regjistrimin tim",
"If you start listening to this live broadcast, your current live broadcast recording will be ended.": "Nëse filloni të dëgjoni te ky transmetim i drejtpërdrejtë, regjistrimi juaj i tanishëm i një transmetimi të drejtpërdrejtë do të përfundojë.", "If you start listening to this live broadcast, your current live broadcast recording will be ended.": "Nëse filloni të dëgjoni te ky transmetim i drejtpërdrejtë, regjistrimi juaj i tanishëm i një transmetimi të drejtpërdrejtë do të përfundojë.",
"Listen to live broadcast?": "Të dëgjohet te transmetimi i drejtpërdrejtë?", "Listen to live broadcast?": "Të dëgjohet te transmetimi i drejtpërdrejtë?",
"You can't start a voice message as you are currently recording a live broadcast. Please end your live broadcast in order to start recording a voice message.": "Smund të niset mesazh zanor, ngaqë aktualisht po regjistroni një transmetim të drejtpërdrejtë. Ju lutemi, përfundoni transmetimin e drejtpërdrejtë, që të mund të nisni regjistrimin e një mesazhi zanor", "You can't start a voice message as you are currently recording a live broadcast. Please end your live broadcast in order to start recording a voice message.": "Smund të niset mesazh zanor, ngaqë aktualisht po incizoni një transmetim të drejtpërdrejtë. Ju lutemi, përfundoni transmetimin e drejtpërdrejtë, që të mund të nisni incizimin e një mesazhi zanor.",
"Can't start voice message": "Sniset dot mesazh zanor", "Can't start voice message": "Sniset dot mesazh zanor",
"Edit link": "Përpunoni lidhje", "Edit link": "Përpunoni lidhje",
"Numbered list": "Listë e numërtuar", "Numbered list": "Listë e numërtuar",
@ -3697,5 +3693,40 @@
"Connection error - Recording paused": "Gabim lidhjeje - Regjistrimi u ndal", "Connection error - Recording paused": "Gabim lidhjeje - Regjistrimi u ndal",
"Unfortunately we're unable to start a recording right now. Please try again later.": "Mjerisht, sqemë në gjendje të nisnim tani një regjistrim. Ju lutemi, riprovoni më vonë.", "Unfortunately we're unable to start a recording right now. Please try again later.": "Mjerisht, sqemë në gjendje të nisnim tani një regjistrim. Ju lutemi, riprovoni më vonë.",
"Connection error": "Gabim lidhjeje", "Connection error": "Gabim lidhjeje",
"%(senderName)s started a voice broadcast": "%(senderName)s nisi një transmetim zanor" "%(senderName)s started a voice broadcast": "%(senderName)s nisi një transmetim zanor",
"Decrypted source unavailable": "Burim i shfshehtëzuar jo i passhëm",
"Registration token": "Token regjistrimi",
"Enter a registration token provided by the homeserver administrator.": "Jepni një token regjistrimi dhënë nga përgjegjësi i shërbyesit Home.",
"All messages and invites from this user will be hidden. Are you sure you want to ignore them?": "Krejt mesazhet dhe ftesat prej këtij përdoruesi do të fshihen. Jeni i sigurt se doni të shpërfillet?",
"Ignore %(user)s": "Shpërfille %(user)s",
"Manage account": "Administroni llogari",
"Your account details are managed separately at <code>%(hostname)s</code>.": "Hollësitë e llogarisë tuaj administrohen ndarazi te <code>%(hostname)s</code>.",
"Unable to play this voice broadcast": "Sarrihet të luhet ky transmetim zanor",
"Threads timeline": "Rrjedhë kohore rrjedhash",
"Sender: ": "Dërgues: ",
"Type: ": "Lloj: ",
"ID: ": "ID: ",
"Last event:": "Veprimtaria e fundit",
"No receipt found": "Su gjet dëftesë",
"Highlight: ": "Theksoje: ",
"Total: ": "Gjithsej: ",
"Main timeline": "Rrjedhë kohore kryesore",
"not encrypted 🚨": "jo i fshehtëzuar 🚨",
"encrypted ✅": "fshehtëzuar ✅",
"Room is ": "Dhoma është ",
"Notification state is": "Gjendje njoftimesh është",
", count:": ", numër:",
"Room status": "Gjendje dhome",
"There are no polls in this room": "Ska pyetësorë në këtë dhomë",
"Notifications debug": "Diagnostikim njoftimesh",
"%(displayName)s (%(matrixId)s)": "%(displayName)s (%(matrixId)s)",
"Indent decrease": "Zvogëlim shmangieje kryeradhe",
"Indent increase": "Rritje shmangieje kryeradhe",
"View a list of polls in a room. (Under active development)": "Shihni një listë pyetësorësh në një dhomë. (Nën zhvillim aktiv)",
"Polls history": "Historik pyetësorësh",
"Use rich text instead of Markdown in the message composer.": "Përdor tekst të pasur, në vend se Markdown, te hartuesi i mesazheve.",
"unknown": "e panjohur",
"Red": "E kuqe",
"Grey": "Gri",
"Unable to decrypt voice broadcast": "Sarrihet të shfshehtëzohet transmetim zanor"
} }

View file

@ -3167,8 +3167,6 @@
"Toggle Link": "Växla länk av/på", "Toggle Link": "Växla länk av/på",
"Toggle Code Block": "Växla kodblock av/på", "Toggle Code Block": "Växla kodblock av/på",
"Event ID: %(eventId)s": "Händelse-ID: %(eventId)s", "Event ID: %(eventId)s": "Händelse-ID: %(eventId)s",
"<a>Give feedback</a>": "<a>Ge återkoppling</a>",
"Threads are a beta feature": "Trådar är en beta-funktion",
"<b>Tip:</b> Use “%(replyInThread)s” when hovering over a message.": "<b>Tips:</b> Välj \"%(replyInThread)s\" när du håller över ett meddelande.", "<b>Tip:</b> Use “%(replyInThread)s” when hovering over a message.": "<b>Tips:</b> Välj \"%(replyInThread)s\" när du håller över ett meddelande.",
"Threads help keep your conversations on-topic and easy to track.": "Trådar underlättar för att hålla konversationer till ämnet och gör dem lättare att följa.", "Threads help keep your conversations on-topic and easy to track.": "Trådar underlättar för att hålla konversationer till ämnet och gör dem lättare att följa.",
"Reply to an ongoing thread or use “%(replyInThread)s” when hovering over a message to start a new one.": "Svara i en pågående tråd eller använd \"%(replyInThread)s\" när du håller över ett meddelande för att starta en ny tråd.", "Reply to an ongoing thread or use “%(replyInThread)s” when hovering over a message to start a new one.": "Svara i en pågående tråd eller använd \"%(replyInThread)s\" när du håller över ett meddelande för att starta en ny tråd.",
@ -3393,7 +3391,6 @@
"resume voice broadcast": "återuppta röstsändning", "resume voice broadcast": "återuppta röstsändning",
"play voice broadcast": "spela röstsändning", "play voice broadcast": "spela röstsändning",
"Yes, stop broadcast": "Ja, avsluta sändning", "Yes, stop broadcast": "Ja, avsluta sändning",
"Are you sure you want to stop your live broadcast?This will end the broadcast and the full recording will be available in the room.": "Är du säker på att du vill avsluta din livesändning? Det här kommer att avsluta sändningen och den fulla inspelningen kommer att vara tillgänglig i rummet.",
"Allow a QR code to be shown in session manager to sign in another device (requires compatible homeserver)": "Låt en QR-kod visas i sessionshanteraren för att logga in en annan enhet (kräver en kompatibel hemserver)", "Allow a QR code to be shown in session manager to sign in another device (requires compatible homeserver)": "Låt en QR-kod visas i sessionshanteraren för att logga in en annan enhet (kräver en kompatibel hemserver)",
"Our new sessions manager provides better visibility of all your sessions, and greater control over them including the ability to remotely toggle push notifications.": "Vår nya sessionshanterare ger dig bättre insyn i alla dina sessioner, och större kontroll över dem, inklusive förmågan att växla pushnotiser på håll.", "Our new sessions manager provides better visibility of all your sessions, and greater control over them including the ability to remotely toggle push notifications.": "Vår nya sessionshanterare ger dig bättre insyn i alla dina sessioner, och större kontroll över dem, inklusive förmågan att växla pushnotiser på håll.",
"Have greater visibility and control over all your sessions.": "Ha bättre insyn och kontroll över alla dina sessioner.", "Have greater visibility and control over all your sessions.": "Ha bättre insyn och kontroll över alla dina sessioner.",
@ -3488,7 +3485,6 @@
"Right panel stays open": "Högerpanelen hålls öppen", "Right panel stays open": "Högerpanelen hålls öppen",
"Currently experimental.": "För närvarande experimentellt.", "Currently experimental.": "För närvarande experimentellt.",
"New ways to ignore people": "Nya sätt att ignorera personer", "New ways to ignore people": "Nya sätt att ignorera personer",
"Use rich text instead of Markdown in the message composer. Plain text mode coming soon.": "Använd rik text istället för Markdown i meddelanderedigeraren. Vanligt textläge kommer snart.",
"Rich text editor": "Riktextredigerare", "Rich text editor": "Riktextredigerare",
"In rooms that support moderation, the “Report” button will let you report abuse to room moderators.": "I rum som stöder moderering så låter \"Rapportera\"-knappen dig rapportera trakasseri till rumsmoderatorer.", "In rooms that support moderation, the “Report” button will let you report abuse to room moderators.": "I rum som stöder moderering så låter \"Rapportera\"-knappen dig rapportera trakasseri till rumsmoderatorer.",
"Report to moderators": "Rapportera till moderatorer", "Report to moderators": "Rapportera till moderatorer",
@ -3706,5 +3702,48 @@
"Failed to read events": "Misslyckades att läsa händelser", "Failed to read events": "Misslyckades att läsa händelser",
"Failed to send event": "Misslyckades att skicka händelse", "Failed to send event": "Misslyckades att skicka händelse",
"Numbered list": "Numrerad lista", "Numbered list": "Numrerad lista",
"Bulleted list": "Punktlista" "Bulleted list": "Punktlista",
"Decrypted source unavailable": "Avkrypterad källa otillgänglig",
"Registration token": "Registreringstoken",
"Enter a registration token provided by the homeserver administrator.": "Ange en registreringstoken försedd av hemserveradministratören.",
"%(displayName)s (%(matrixId)s)": "%(displayName)s (%(matrixId)s)",
"Manage account": "Hantera konto",
"Your account details are managed separately at <code>%(hostname)s</code>.": "Dina rumsdetaljer hanteras separat av <code>%(hostname)s</code>.",
"Enable MSC3946 (to support late-arriving room archives)": "Aktivera MSC3946 (för att stöda sen-ankomna rumsarkiv)",
"Dynamic room predecessors": "Dynamiska rumsföregångare",
"Connection error - Recording paused": "Anslutningsfel - Inspelning pausad",
"Unable to play this voice broadcast": "Kan inte spela den här röstsändningen",
"%(senderName)s started a voice broadcast": "%(senderName)s startade en röstsändning",
"Thread Id: ": "Tråd-ID: ",
"Threads timeline": "Trådtidslinje",
"Sender: ": "Avsändare: ",
"Type: ": "Typ: ",
"ID: ": "ID: ",
"Last event:": "Senaste händelsen:",
"No receipt found": "Inga kvitton hittade",
"User read up to: ": "Användaren har läst fram till: ",
"Dot: ": "Punkt: ",
"Highlight: ": "Markering: ",
"Total: ": "Totalt: ",
"Main timeline": "Huvudtidslinje",
"not encrypted 🚨": "inte krypterad 🚨",
"encrypted ✅": "krypterad ✅",
"Room is ": "Rum är ",
"Notification state is": "Aviseringsstatus är",
", count:": ", antal:",
"Room unread status: ": "Rummets oläststatus: ",
"Room status": "Rumsstatus",
"There are no polls in this room": "Det finns inga omröstningar i det här rummet",
"Notifications debug": "Aviseringsfelsökning",
"All messages and invites from this user will be hidden. Are you sure you want to ignore them?": "Alla meddelanden och inbjudningar från den här användaren kommer att döljas. Är du säker på att du vill ignorera denne?",
"Ignore %(user)s": "Ignorera %(user)s",
"Indent decrease": "Minska indrag",
"Indent increase": "Öka indrad",
"View a list of polls in a room. (Under active development)": "Visa lista över omröstningar i ett rum. (Under aktiv utveckling)",
"Polls history": "Omröstningshistorik",
"Use rich text instead of Markdown in the message composer.": "Använd rik text istället för Markdown i meddelanderedigeraren.",
"unknown": "okänd",
"Red": "Röd",
"Grey": "Grå",
"Unable to decrypt voice broadcast": "Kunde inte kryptera röstsändning"
} }

View file

@ -3204,8 +3204,6 @@
"%(count)s participants|other": "%(count)s учасників", "%(count)s participants|other": "%(count)s учасників",
"New video room": "Нова відеокімната", "New video room": "Нова відеокімната",
"New room": "Нова кімната", "New room": "Нова кімната",
"<a>Give feedback</a>": "<a>Залиште відгук</a>",
"Threads are a beta feature": "Гілки — бета-функція",
"Threads help keep your conversations on-topic and easy to track.": "Гілки допомагають підтримувати розмови за темою та за ними легко стежити.", "Threads help keep your conversations on-topic and easy to track.": "Гілки допомагають підтримувати розмови за темою та за ними легко стежити.",
"%(featureName)s Beta feedback": "%(featureName)s — відгук про бетаверсію", "%(featureName)s Beta feedback": "%(featureName)s — відгук про бетаверсію",
"Beta feature. Click to learn more.": "Бетафункція. Натисніть, щоб дізнатися більше.", "Beta feature. Click to learn more.": "Бетафункція. Натисніть, щоб дізнатися більше.",
@ -3535,7 +3533,6 @@
"Browser": "Браузер", "Browser": "Браузер",
"Allow a QR code to be shown in session manager to sign in another device (requires compatible homeserver)": "Дозволити показ QR-коду в менеджері сеансів для входу на іншому пристрої (потрібен сумісний домашній сервер)", "Allow a QR code to be shown in session manager to sign in another device (requires compatible homeserver)": "Дозволити показ QR-коду в менеджері сеансів для входу на іншому пристрої (потрібен сумісний домашній сервер)",
"Yes, stop broadcast": "Так, припинити трансляцію", "Yes, stop broadcast": "Так, припинити трансляцію",
"Are you sure you want to stop your live broadcast?This will end the broadcast and the full recording will be available in the room.": "Ви впевнені, що хочете припинити голосову трансляцію? На цьому трансляція завершиться, і повний запис буде доступний у кімнаті.",
"Stop live broadcasting?": "Припинити голосову трансляцію?", "Stop live broadcasting?": "Припинити голосову трансляцію?",
"Someone else is already recording a voice broadcast. Wait for their voice broadcast to end to start a new one.": "Хтось інший вже записує голосову трансляцію. Зачекайте, поки запис завершиться, щоб розпочати новий.", "Someone else is already recording a voice broadcast. Wait for their voice broadcast to end to start a new one.": "Хтось інший вже записує голосову трансляцію. Зачекайте, поки запис завершиться, щоб розпочати новий.",
"You don't have the required permissions to start a voice broadcast in this room. Contact a room administrator to upgrade your permissions.": "Ви не маєте необхідних дозволів для початку голосової трансляції в цю кімнату. Зверніться до адміністратора кімнати, щоб оновити ваші дозволи.", "You don't have the required permissions to start a voice broadcast in this room. Contact a room administrator to upgrade your permissions.": "Ви не маєте необхідних дозволів для початку голосової трансляції в цю кімнату. Зверніться до адміністратора кімнати, щоб оновити ваші дозволи.",
@ -3640,7 +3637,6 @@
"Right panel stays open": "Права панель залишається відкритою", "Right panel stays open": "Права панель залишається відкритою",
"Currently experimental.": "Наразі експериментально.", "Currently experimental.": "Наразі експериментально.",
"New ways to ignore people": "Нові способи нехтувати людей", "New ways to ignore people": "Нові способи нехтувати людей",
"Use rich text instead of Markdown in the message composer. Plain text mode coming soon.": "Використовуйте розширений текст замість Markdown у редакторі повідомлень. Режим звичайного тексту з'явиться незабаром.",
"Rich text editor": "Розширений текстовий редактор", "Rich text editor": "Розширений текстовий редактор",
"Report to moderators": "Поскаржитись модераторам", "Report to moderators": "Поскаржитись модераторам",
"In rooms that support moderation, the “Report” button will let you report abuse to room moderators.": "У кімнатах, які підтримують модерацію, кнопка «Поскаржитися» дає змогу повідомити про зловживання модераторам кімнати.", "In rooms that support moderation, the “Report” button will let you report abuse to room moderators.": "У кімнатах, які підтримують модерацію, кнопка «Поскаржитися» дає змогу повідомити про зловживання модераторам кімнати.",
@ -3710,5 +3706,45 @@
"Decrypted source unavailable": "Розшифроване джерело недоступне", "Decrypted source unavailable": "Розшифроване джерело недоступне",
"Connection error - Recording paused": "Помилка з'єднання - Запис призупинено", "Connection error - Recording paused": "Помилка з'єднання - Запис призупинено",
"%(senderName)s started a voice broadcast": "%(senderName)s розпочинає голосову трансляцію", "%(senderName)s started a voice broadcast": "%(senderName)s розпочинає голосову трансляцію",
"%(displayName)s (%(matrixId)s)": "%(displayName)s (%(matrixId)s)" "%(displayName)s (%(matrixId)s)": "%(displayName)s (%(matrixId)s)",
"Registration token": "Токен реєстрації",
"Enter a registration token provided by the homeserver administrator.": "Введіть реєстраційний токен, наданий адміністратором домашнього сервера.",
"Unable to play this voice broadcast": "Неможливо відтворити цю голосову трансляцію",
"Manage account": "Керувати обліковим записом",
"Your account details are managed separately at <code>%(hostname)s</code>.": "Ваші дані облікового запису керуються окремо за адресою <code>%(hostname)s</code>.",
"Enable MSC3946 (to support late-arriving room archives)": "Увімкнути MSC3946 (для підтримки архівів пізніх кімнат)",
"Dynamic room predecessors": "Попередники динамічної кімнати",
"All messages and invites from this user will be hidden. Are you sure you want to ignore them?": "Усі повідомлення та запрошення від цього користувача будуть приховані. Ви впевнені, що хочете їх нехтувати?",
"Ignore %(user)s": "Нехтувати %(user)s",
"Indent decrease": "Зменшення відступу",
"Indent increase": "Збільшення відступу",
"Unable to decrypt voice broadcast": "Невдалося розшифрувати голосову трансляцію",
"View a list of polls in a room. (Under active development)": "Перегляд списку опитувань у кімнаті (в активній розробці)",
"Polls history": "Історія опитувань",
"Use rich text instead of Markdown in the message composer.": "Використовувати розширений текст замість розмітки в редакторі повідомлень.",
"Thread Id: ": "Id стрічки: ",
"Threads timeline": "Стрічка гілок",
"Sender: ": "Відправник: ",
"Type: ": "Тип: ",
"ID: ": "ID: ",
"Last event:": "Остання подія:",
"No receipt found": "Підтвердження не знайдено",
"User read up to: ": "Користувач прочитав до: ",
"Dot: ": "Крапка: ",
"Highlight: ": "Виділене: ",
"Total: ": "Загалом: ",
"Main timeline": "Основна стрічка",
"not encrypted 🚨": "не зашифрована 🚨",
"encrypted ✅": "зашифрована ✅",
"Room is ": "Кімната ",
"Notification state is": "Стан сповіщення",
", count:": ", кількість:",
"Room unread status: ": "Статус непрочитаного в кімнаті: ",
"Room status": "Статус кімнати",
"There are no polls in this room": "У цій кімнаті немає опитувань",
"Notifications debug": "Сповіщення зневадження",
"unknown": "невідомо",
"Red": "Черврний",
"Grey": "Сірий",
"Are you sure you want to stop your live broadcast? This will end the broadcast and the full recording will be available in the room.": "Ви впевнені, що хочете припинити пряму трансляцію? Це призведе до завершення трансляції, а повний запис буде доступний у кімнаті."
} }

View file

@ -3108,7 +3108,6 @@
"Threads help keep your conversations on-topic and easy to track.": "消息列帮助保持你的对话切题并易于追踪。", "Threads help keep your conversations on-topic and easy to track.": "消息列帮助保持你的对话切题并易于追踪。",
"Reply to an ongoing thread or use “%(replyInThread)s” when hovering over a message to start a new one.": "回复进行中的消息列或当悬停在消息上时使用%(replyInThread)s来发起新的消息列。", "Reply to an ongoing thread or use “%(replyInThread)s” when hovering over a message to start a new one.": "回复进行中的消息列或当悬停在消息上时使用%(replyInThread)s来发起新的消息列。",
"Can't create a thread from an event with an existing relation": "无法从既有关系的事件创建消息列", "Can't create a thread from an event with an existing relation": "无法从既有关系的事件创建消息列",
"Threads are a beta feature": "消息列是beta功能",
"Joining the beta will reload %(brand)s.": "加入beta会重载%(brand)s。", "Joining the beta will reload %(brand)s.": "加入beta会重载%(brand)s。",
"Leaving the beta will reload %(brand)s.": "离开beta会重载%(brand)s。", "Leaving the beta will reload %(brand)s.": "离开beta会重载%(brand)s。",
"This is a beta feature": "这是beta功能", "This is a beta feature": "这是beta功能",
@ -3464,7 +3463,6 @@
"resume voice broadcast": "恢复语音广播", "resume voice broadcast": "恢复语音广播",
"play voice broadcast": "播放语音广播", "play voice broadcast": "播放语音广播",
"Yes, stop broadcast": "是的,停止广播", "Yes, stop broadcast": "是的,停止广播",
"Are you sure you want to stop your live broadcast?This will end the broadcast and the full recording will be available in the room.": "你确定要停止你的直播吗?这将结束直播,房间里将有完整的录音。",
"Stop live broadcasting?": "停止直播吗?", "Stop live broadcasting?": "停止直播吗?",
"Someone else is already recording a voice broadcast. Wait for their voice broadcast to end to start a new one.": "别人已经在录制语音广播了。等到他们的语音广播结束后再开始新的广播。", "Someone else is already recording a voice broadcast. Wait for their voice broadcast to end to start a new one.": "别人已经在录制语音广播了。等到他们的语音广播结束后再开始新的广播。",
"Upcoming features": "即将到来的功能", "Upcoming features": "即将到来的功能",
@ -3513,7 +3511,6 @@
"Right panel stays open": "右侧面板保持打开状态", "Right panel stays open": "右侧面板保持打开状态",
"Currently experimental.": "目前是实验性的。", "Currently experimental.": "目前是实验性的。",
"New ways to ignore people": "忽略他人的新方式", "New ways to ignore people": "忽略他人的新方式",
"Use rich text instead of Markdown in the message composer. Plain text mode coming soon.": "在消息撰写器中使用富文本而不是Markdown。纯文本模式即将到来。",
"Join %(brand)s calls": "加入%(brand)s呼叫", "Join %(brand)s calls": "加入%(brand)s呼叫",
"Start %(brand)s calls": "开始%(brand)s呼叫", "Start %(brand)s calls": "开始%(brand)s呼叫",
"Automatically adjust the microphone volume": "自动调整话筒音量", "Automatically adjust the microphone volume": "自动调整话筒音量",

View file

@ -3197,8 +3197,6 @@
"You do not have permission to invite people to this space.": "您無權邀請他人加入此空間。", "You do not have permission to invite people to this space.": "您無權邀請他人加入此空間。",
"Failed to invite users to %(roomName)s": "未能邀請使用者加入 %(roomName)s", "Failed to invite users to %(roomName)s": "未能邀請使用者加入 %(roomName)s",
"An error occurred while stopping your live location, please try again": "停止您的即時位置時發生錯誤,請再試一次", "An error occurred while stopping your live location, please try again": "停止您的即時位置時發生錯誤,請再試一次",
"<a>Give feedback</a>": "<a>給予回饋</a>",
"Threads are a beta feature": "討論串是測試版功能",
"Threads help keep your conversations on-topic and easy to track.": "討論串可讓您的對話不離題且易於追蹤。", "Threads help keep your conversations on-topic and easy to track.": "討論串可讓您的對話不離題且易於追蹤。",
"Create room": "建立聊天室", "Create room": "建立聊天室",
"Create video room": "建立視訊聊天室", "Create video room": "建立視訊聊天室",
@ -3557,7 +3555,6 @@
"Browser": "瀏覽器", "Browser": "瀏覽器",
"Allow a QR code to be shown in session manager to sign in another device (requires compatible homeserver)": "允許在工作階段管理程式中顯示 QR code 以在另一台裝置上登入(需要相容的家伺服器)", "Allow a QR code to be shown in session manager to sign in another device (requires compatible homeserver)": "允許在工作階段管理程式中顯示 QR code 以在另一台裝置上登入(需要相容的家伺服器)",
"Yes, stop broadcast": "是的,停止廣播", "Yes, stop broadcast": "是的,停止廣播",
"Are you sure you want to stop your live broadcast?This will end the broadcast and the full recording will be available in the room.": "您確定您要停止您的即時廣播嗎?這將會結束廣播,聊天室內將會提供完整的錄製內容。",
"Stop live broadcasting?": "停止即時廣播?", "Stop live broadcasting?": "停止即時廣播?",
"Someone else is already recording a voice broadcast. Wait for their voice broadcast to end to start a new one.": "其他人已在錄製語音廣播。等待他們的語音廣播結束以開始新的語音廣播。", "Someone else is already recording a voice broadcast. Wait for their voice broadcast to end to start a new one.": "其他人已在錄製語音廣播。等待他們的語音廣播結束以開始新的語音廣播。",
"You don't have the required permissions to start a voice broadcast in this room. Contact a room administrator to upgrade your permissions.": "您沒有在此聊天室內開始語音廣播所需的權限。請聯絡聊天室管理員升級您的權限。", "You don't have the required permissions to start a voice broadcast in this room. Contact a room administrator to upgrade your permissions.": "您沒有在此聊天室內開始語音廣播所需的權限。請聯絡聊天室管理員升級您的權限。",
@ -3639,7 +3636,6 @@
"Right panel stays open": "右側面板維持開啟狀態", "Right panel stays open": "右側面板維持開啟狀態",
"Currently experimental.": "目前為實驗性。", "Currently experimental.": "目前為實驗性。",
"New ways to ignore people": "忽略人們的新方式", "New ways to ignore people": "忽略人們的新方式",
"Use rich text instead of Markdown in the message composer. Plain text mode coming soon.": "在訊息編輯器中使用格式化文字而非 Markdown。純文字模式即將到來。",
"Rich text editor": "格式化文字編輯器", "Rich text editor": "格式化文字編輯器",
"In rooms that support moderation, the “Report” button will let you report abuse to room moderators.": "在支援審核的聊天室中,「回報」按鈕讓您可以回報濫用行為給聊天室管理員。", "In rooms that support moderation, the “Report” button will let you report abuse to room moderators.": "在支援審核的聊天室中,「回報」按鈕讓您可以回報濫用行為給聊天室管理員。",
"Report to moderators": "回報給管理員", "Report to moderators": "回報給管理員",
@ -3710,5 +3706,44 @@
"Bulleted list": "項目符號清單", "Bulleted list": "項目符號清單",
"Connection error - Recording paused": "連線錯誤 - 紀錄已暫停", "Connection error - Recording paused": "連線錯誤 - 紀錄已暫停",
"%(senderName)s started a voice broadcast": "%(senderName)s 開始了語音廣播", "%(senderName)s started a voice broadcast": "%(senderName)s 開始了語音廣播",
"%(displayName)s (%(matrixId)s)": "%(displayName)s (%(matrixId)s)" "%(displayName)s (%(matrixId)s)": "%(displayName)s (%(matrixId)s)",
"Registration token": "註冊權杖",
"Enter a registration token provided by the homeserver administrator.": "輸入由家伺服器管理員提供的註冊權杖。",
"Manage account": "管理帳號",
"Your account details are managed separately at <code>%(hostname)s</code>.": "您的帳號詳細資訊在 <code>%(hostname)s</code> 中單獨管理。",
"Enable MSC3946 (to support late-arriving room archives)": "啟用 MSC3946為了支援遲到聊天室存檔",
"Dynamic room predecessors": "動態聊天室前身",
"Unable to play this voice broadcast": "無法播放此音訊廣播",
"All messages and invites from this user will be hidden. Are you sure you want to ignore them?": "來自該使用者的所有訊息與邀請都將被隱藏。您確定要忽略它們嗎?",
"Ignore %(user)s": "忽略 %(user)s",
"Indent decrease": "減少縮排",
"Indent increase": "增加縮排",
"View a list of polls in a room. (Under active development)": "檢視聊天室中的投票清單。(積極開發中)",
"Polls history": "投票歷史紀錄",
"Unable to decrypt voice broadcast": "無法解密語音廣播",
"There are no polls in this room": "此聊天室中沒有投票",
"Use rich text instead of Markdown in the message composer.": "在訊息編輯器中使用格式化文字而非 Markdown。",
"Thread Id: ": "討論串 ID ",
"Threads timeline": "討論串時間軸",
"Sender: ": "傳送者: ",
"Type: ": "類型: ",
"ID: ": "ID ",
"Last event:": "最後活動:",
"No receipt found": "找不到回條",
"User read up to: ": "使用者讀取至: ",
"Dot: ": "點: ",
"Highlight: ": "突顯: ",
"Total: ": "總共: ",
"Main timeline": "主時間軸",
"not encrypted 🚨": "未加密 🚨",
"encrypted ✅": "已加密 ✅",
"Room is ": "聊天室為 ",
"Notification state is": "通知狀態為",
", count:": ", 計數:",
"Room unread status: ": "聊天室未讀狀態: ",
"Room status": "聊天室狀態",
"Notifications debug": "通知除錯",
"unknown": "未知",
"Red": "紅",
"Grey": "灰"
} }

View file

@ -260,7 +260,7 @@ export async function downloadBugReport(opts: IOpts = {}): Promise<void> {
reader.readAsArrayBuffer(value as Blob); reader.readAsArrayBuffer(value as Blob);
}); });
} else { } else {
metadata += `${key} = ${value}\n`; metadata += `${key} = ${value as string}\n`;
} }
} }
tape.append("issue.txt", metadata); tape.append("issue.txt", metadata);

View file

@ -389,7 +389,7 @@ export class StopGapWidget extends EventEmitter {
// Now open the integration manager // Now open the integration manager
// TODO: Spec this interaction. // TODO: Spec this interaction.
const data = ev.detail.data; const data = ev.detail.data;
const integType = data?.integType; const integType = data?.integType as string;
const integId = <string>data?.integId; const integId = <string>data?.integId;
// noinspection JSIgnoredPromiseFromCall // noinspection JSIgnoredPromiseFromCall

View file

@ -69,7 +69,7 @@ export function presentableTextForFile(
// it since it is "ugly", users generally aren't aware what it // it since it is "ugly", users generally aren't aware what it
// means and the type of the attachment can usually be inferred // means and the type of the attachment can usually be inferred
// from the file extension. // from the file extension.
text += " (" + filesize(content.info.size) + ")"; text += " (" + <string>filesize(content.info.size) + ")";
} }
return text; return text;
} }

View file

@ -19,7 +19,7 @@ import { logger } from "matrix-js-sdk/src/logger";
import { IDestroyable } from "./IDestroyable"; import { IDestroyable } from "./IDestroyable";
import { arrayFastClone } from "./arrays"; import { arrayFastClone } from "./arrays";
export type WhenFn<T> = (w: Whenable<T>) => void; export type WhenFn<T extends string | number> = (w: Whenable<T>) => void;
/** /**
* Whenables are a cheap way to have Observable patterns mixed with typical * Whenables are a cheap way to have Observable patterns mixed with typical
@ -27,7 +27,7 @@ export type WhenFn<T> = (w: Whenable<T>) => void;
* are intended to be used when a condition will be met multiple times and * are intended to be used when a condition will be met multiple times and
* the consumer needs to know *when* that happens. * the consumer needs to know *when* that happens.
*/ */
export abstract class Whenable<T> implements IDestroyable { export abstract class Whenable<T extends string | number> implements IDestroyable {
private listeners: { condition: T | null; fn: WhenFn<T> }[] = []; private listeners: { condition: T | null; fn: WhenFn<T> }[] = [];
/** /**

View file

@ -14,7 +14,7 @@ See the License for the specific language governing permissions and
limitations under the License. limitations under the License.
*/ */
import React, { ReactNode } from "react"; import React from "react";
import ReactDOM from "react-dom"; import ReactDOM from "react-dom";
import { Room } from "matrix-js-sdk/src/models/room"; import { Room } from "matrix-js-sdk/src/models/room";
import { MatrixEvent } from "matrix-js-sdk/src/models/event"; import { MatrixEvent } from "matrix-js-sdk/src/models/event";
@ -65,7 +65,7 @@ export default class HTMLExporter extends Exporter {
this.threadsEnabled = SettingsStore.getValue("feature_threadenabled"); this.threadsEnabled = SettingsStore.getValue("feature_threadenabled");
} }
protected async getRoomAvatar(): Promise<ReactNode> { protected async getRoomAvatar(): Promise<string> {
let blob: Blob | undefined = undefined; let blob: Blob | undefined = undefined;
const avatarUrl = Avatar.avatarUrlForRoom(this.room, 32, 32, "crop"); const avatarUrl = Avatar.avatarUrlForRoom(this.room, 32, 32, "crop");
const avatarPath = "room.png"; const avatarPath = "room.png";

View file

@ -36,7 +36,7 @@ const showStopBroadcastingDialog = async (): Promise<boolean> => {
description: ( description: (
<p> <p>
{_t( {_t(
"Are you sure you want to stop your live broadcast?" + "Are you sure you want to stop your live broadcast? " +
"This will end the broadcast and the full recording will be available in the room.", "This will end the broadcast and the full recording will be available in the room.",
)} )}
</p> </p>

View file

@ -396,7 +396,11 @@ export class VoiceBroadcastPlayback
} }
if (!this.playbacks.has(eventId)) { if (!this.playbacks.has(eventId)) {
// set to buffering while loading the chunk data
const currentState = this.getState();
this.setState(VoiceBroadcastPlaybackState.Buffering);
await this.loadPlayback(event); await this.loadPlayback(event);
this.setState(currentState);
} }
const playback = this.playbacks.get(eventId); const playback = this.playbacks.get(eventId);

View file

@ -21,6 +21,7 @@ import { MatrixEvent, RoomMember } from "matrix-js-sdk/src/matrix";
import { import {
getMockClientWithEventEmitter, getMockClientWithEventEmitter,
mkEvent,
mkMembership, mkMembership,
mockClientMethodsUser, mockClientMethodsUser,
unmockClientPeg, unmockClientPeg,
@ -100,7 +101,7 @@ describe("EventListSummary", function () {
// is created by replacing the first "$" in userIdTemplate with `i` for // is created by replacing the first "$" in userIdTemplate with `i` for
// `i = 0 .. n`. // `i = 0 .. n`.
const generateEventsForUsers = (userIdTemplate, n, events) => { const generateEventsForUsers = (userIdTemplate, n, events) => {
let eventsForUsers = []; let eventsForUsers: MatrixEvent[] = [];
let userId = ""; let userId = "";
for (let i = 0; i < n; i++) { for (let i = 0; i < n; i++) {
userId = userIdTemplate.replace("$", i); userId = userIdTemplate.replace("$", i);
@ -656,4 +657,56 @@ describe("EventListSummary", function () {
expect(summaryText).toBe("user_0, user_1 and 18 others joined"); expect(summaryText).toBe("user_0, user_1 and 18 others joined");
}); });
it("should not blindly group 3pid invites and treat them as distinct users instead", () => {
const events = [
mkEvent({
event: true,
skey: "randomstring1",
user: "@user1:server",
type: "m.room.third_party_invite",
content: {
display_name: "n...@d...",
key_validity_url: "https://blah",
public_key: "public_key",
},
}),
mkEvent({
event: true,
skey: "randomstring2",
user: "@user1:server",
type: "m.room.third_party_invite",
content: {
display_name: "n...@d...",
key_validity_url: "https://blah",
public_key: "public_key",
},
}),
mkEvent({
event: true,
skey: "randomstring3",
user: "@user1:server",
type: "m.room.third_party_invite",
content: {
display_name: "d...@w...",
key_validity_url: "https://blah",
public_key: "public_key",
},
}),
];
const props = {
events: events,
children: generateTiles(events),
summaryLength: 2,
avatarsMaxLength: 5,
threshold: 3,
};
const wrapper = renderComponent(props);
const summary = wrapper.find(".mx_GenericEventListSummary_summary");
const summaryText = summary.text();
expect(summaryText).toBe("n...@d... was invited 2 times, d...@w... was invited");
});
}); });

View file

@ -18,6 +18,7 @@ import { mocked } from "jest-mock";
import { screen } from "@testing-library/react"; import { screen } from "@testing-library/react";
import userEvent from "@testing-library/user-event"; import userEvent from "@testing-library/user-event";
import { MatrixClient, MatrixEvent, MatrixEventEvent, Room } from "matrix-js-sdk/src/matrix"; import { MatrixClient, MatrixEvent, MatrixEventEvent, Room } from "matrix-js-sdk/src/matrix";
import { defer } from "matrix-js-sdk/src/utils";
import { Playback, PlaybackState } from "../../../src/audio/Playback"; import { Playback, PlaybackState } from "../../../src/audio/Playback";
import { PlaybackManager } from "../../../src/audio/PlaybackManager"; import { PlaybackManager } from "../../../src/audio/PlaybackManager";
@ -31,9 +32,10 @@ import {
VoiceBroadcastPlaybackState, VoiceBroadcastPlaybackState,
VoiceBroadcastRecording, VoiceBroadcastRecording,
} from "../../../src/voice-broadcast"; } from "../../../src/voice-broadcast";
import { filterConsole, flushPromises, stubClient } from "../../test-utils"; import { filterConsole, flushPromises, flushPromisesWithFakeTimers, stubClient } from "../../test-utils";
import { createTestPlayback } from "../../test-utils/audio"; import { createTestPlayback } from "../../test-utils/audio";
import { mkVoiceBroadcastChunkEvent, mkVoiceBroadcastInfoStateEvent } from "../utils/test-utils"; import { mkVoiceBroadcastChunkEvent, mkVoiceBroadcastInfoStateEvent } from "../utils/test-utils";
import { LazyValue } from "../../../src/utils/LazyValue";
jest.mock("../../../src/utils/MediaEventHelper", () => ({ jest.mock("../../../src/utils/MediaEventHelper", () => ({
MediaEventHelper: jest.fn(), MediaEventHelper: jest.fn(),
@ -49,6 +51,7 @@ describe("VoiceBroadcastPlayback", () => {
let playback: VoiceBroadcastPlayback; let playback: VoiceBroadcastPlayback;
let onStateChanged: (state: VoiceBroadcastPlaybackState) => void; let onStateChanged: (state: VoiceBroadcastPlaybackState) => void;
let chunk1Event: MatrixEvent; let chunk1Event: MatrixEvent;
let deplayedChunk1Event: MatrixEvent;
let chunk2Event: MatrixEvent; let chunk2Event: MatrixEvent;
let chunk2BEvent: MatrixEvent; let chunk2BEvent: MatrixEvent;
let chunk3Event: MatrixEvent; let chunk3Event: MatrixEvent;
@ -58,6 +61,7 @@ describe("VoiceBroadcastPlayback", () => {
const chunk1Data = new ArrayBuffer(2); const chunk1Data = new ArrayBuffer(2);
const chunk2Data = new ArrayBuffer(3); const chunk2Data = new ArrayBuffer(3);
const chunk3Data = new ArrayBuffer(3); const chunk3Data = new ArrayBuffer(3);
let delayedChunk1Helper: MediaEventHelper;
let chunk1Helper: MediaEventHelper; let chunk1Helper: MediaEventHelper;
let chunk2Helper: MediaEventHelper; let chunk2Helper: MediaEventHelper;
let chunk3Helper: MediaEventHelper; let chunk3Helper: MediaEventHelper;
@ -97,8 +101,8 @@ describe("VoiceBroadcastPlayback", () => {
}; };
const startPlayback = () => { const startPlayback = () => {
beforeEach(async () => { beforeEach(() => {
await playback.start(); playback.start();
}); });
}; };
@ -127,11 +131,36 @@ describe("VoiceBroadcastPlayback", () => {
}; };
}; };
const mkDeplayedChunkHelper = (data: ArrayBuffer): MediaEventHelper => {
const deferred = defer<LazyValue<Blob>>();
setTimeout(() => {
deferred.resolve({
// @ts-ignore
arrayBuffer: jest.fn().mockResolvedValue(data),
});
}, 7500);
return {
sourceBlob: {
cachedValue: new Blob(),
done: false,
// @ts-ignore
value: deferred.promise,
},
};
};
const simulateFirstChunkArrived = async (): Promise<void> => {
jest.advanceTimersByTime(10000);
await flushPromisesWithFakeTimers();
};
const mkInfoEvent = (state: VoiceBroadcastInfoState) => { const mkInfoEvent = (state: VoiceBroadcastInfoState) => {
return mkVoiceBroadcastInfoStateEvent(roomId, state, userId, deviceId); return mkVoiceBroadcastInfoStateEvent(roomId, state, userId, deviceId);
}; };
const mkPlayback = async () => { const mkPlayback = async (fakeTimers = false): Promise<VoiceBroadcastPlayback> => {
const playback = new VoiceBroadcastPlayback( const playback = new VoiceBroadcastPlayback(
infoEvent, infoEvent,
client, client,
@ -140,7 +169,7 @@ describe("VoiceBroadcastPlayback", () => {
jest.spyOn(playback, "removeAllListeners"); jest.spyOn(playback, "removeAllListeners");
jest.spyOn(playback, "destroy"); jest.spyOn(playback, "destroy");
playback.on(VoiceBroadcastPlaybackEvent.StateChanged, onStateChanged); playback.on(VoiceBroadcastPlaybackEvent.StateChanged, onStateChanged);
await flushPromises(); fakeTimers ? await flushPromisesWithFakeTimers() : await flushPromises();
return playback; return playback;
}; };
@ -152,6 +181,7 @@ describe("VoiceBroadcastPlayback", () => {
const createChunkEvents = () => { const createChunkEvents = () => {
chunk1Event = mkVoiceBroadcastChunkEvent(infoEvent.getId()!, userId, roomId, chunk1Length, 1); chunk1Event = mkVoiceBroadcastChunkEvent(infoEvent.getId()!, userId, roomId, chunk1Length, 1);
deplayedChunk1Event = mkVoiceBroadcastChunkEvent(infoEvent.getId()!, userId, roomId, chunk1Length, 1);
chunk2Event = mkVoiceBroadcastChunkEvent(infoEvent.getId()!, userId, roomId, chunk2Length, 2); chunk2Event = mkVoiceBroadcastChunkEvent(infoEvent.getId()!, userId, roomId, chunk2Length, 2);
chunk2Event.setTxnId("tx-id-1"); chunk2Event.setTxnId("tx-id-1");
chunk2BEvent = mkVoiceBroadcastChunkEvent(infoEvent.getId()!, userId, roomId, chunk2Length, 2); chunk2BEvent = mkVoiceBroadcastChunkEvent(infoEvent.getId()!, userId, roomId, chunk2Length, 2);
@ -159,6 +189,7 @@ describe("VoiceBroadcastPlayback", () => {
chunk3Event = mkVoiceBroadcastChunkEvent(infoEvent.getId()!, userId, roomId, chunk3Length, 3); chunk3Event = mkVoiceBroadcastChunkEvent(infoEvent.getId()!, userId, roomId, chunk3Length, 3);
chunk1Helper = mkChunkHelper(chunk1Data); chunk1Helper = mkChunkHelper(chunk1Data);
delayedChunk1Helper = mkDeplayedChunkHelper(chunk1Data);
chunk2Helper = mkChunkHelper(chunk2Data); chunk2Helper = mkChunkHelper(chunk2Data);
chunk3Helper = mkChunkHelper(chunk3Data); chunk3Helper = mkChunkHelper(chunk3Data);
@ -181,6 +212,7 @@ describe("VoiceBroadcastPlayback", () => {
mocked(MediaEventHelper).mockImplementation((event: MatrixEvent): any => { mocked(MediaEventHelper).mockImplementation((event: MatrixEvent): any => {
if (event === chunk1Event) return chunk1Helper; if (event === chunk1Event) return chunk1Helper;
if (event === deplayedChunk1Event) return delayedChunk1Helper;
if (event === chunk2Event) return chunk2Helper; if (event === chunk2Event) return chunk2Helper;
if (event === chunk3Event) return chunk3Helper; if (event === chunk3Event) return chunk3Helper;
}); });
@ -488,11 +520,17 @@ describe("VoiceBroadcastPlayback", () => {
describe("when there is a stopped voice broadcast", () => { describe("when there is a stopped voice broadcast", () => {
beforeEach(async () => { beforeEach(async () => {
jest.useFakeTimers();
infoEvent = mkInfoEvent(VoiceBroadcastInfoState.Stopped); infoEvent = mkInfoEvent(VoiceBroadcastInfoState.Stopped);
createChunkEvents(); createChunkEvents();
setUpChunkEvents([chunk2Event, chunk1Event, chunk3Event]); // use delayed first chunk here to simulate loading time
room.addLiveEvents([infoEvent, chunk1Event, chunk2Event, chunk3Event]); setUpChunkEvents([chunk2Event, deplayedChunk1Event, chunk3Event]);
playback = await mkPlayback(); room.addLiveEvents([infoEvent, deplayedChunk1Event, chunk2Event, chunk3Event]);
playback = await mkPlayback(true);
});
afterEach(() => {
jest.useRealTimers();
}); });
it("should expose the info event", () => { it("should expose the info event", () => {
@ -504,166 +542,174 @@ describe("VoiceBroadcastPlayback", () => {
describe("and calling start", () => { describe("and calling start", () => {
startPlayback(); startPlayback();
itShouldSetTheStateTo(VoiceBroadcastPlaybackState.Playing); itShouldSetTheStateTo(VoiceBroadcastPlaybackState.Buffering);
it("should play the chunks beginning with the first one", () => {
// assert that the first chunk is being played
expect(chunk1Playback.play).toHaveBeenCalled();
expect(chunk2Playback.play).not.toHaveBeenCalled();
});
describe("and calling start again", () => {
it("should not play the first chunk a second time", () => {
expect(chunk1Playback.play).toHaveBeenCalledTimes(1);
});
});
describe("and the chunk playback progresses", () => {
beforeEach(() => {
chunk1Playback.clockInfo.liveData.update([11]);
});
it("should update the time", () => {
expect(playback.timeSeconds).toBe(11);
expect(playback.timeLeftSeconds).toBe(2);
});
});
describe("and the chunk playback progresses across the actual time", () => {
// This can be the case if the meta data is out of sync with the actual audio data.
beforeEach(() => {
chunk1Playback.clockInfo.liveData.update([15]);
});
it("should update the time", () => {
expect(playback.timeSeconds).toBe(15);
expect(playback.timeLeftSeconds).toBe(0);
});
});
describe("and skipping to the middle of the second chunk", () => {
const middleOfSecondChunk = (chunk1Length + chunk2Length / 2) / 1000;
describe("and the first chunk data has been loaded", () => {
beforeEach(async () => { beforeEach(async () => {
await playback.skipTo(middleOfSecondChunk); await simulateFirstChunkArrived();
}); });
it("should play the second chunk", () => { itShouldSetTheStateTo(VoiceBroadcastPlaybackState.Playing);
expect(chunk1Playback.stop).toHaveBeenCalled();
expect(chunk1Playback.destroy).toHaveBeenCalled(); it("should play the chunks beginning with the first one", () => {
expect(chunk2Playback.play).toHaveBeenCalled(); // assert that the first chunk is being played
expect(chunk1Playback.play).toHaveBeenCalled();
expect(chunk2Playback.play).not.toHaveBeenCalled();
}); });
it("should update the time", () => { describe("and calling start again", () => {
expect(playback.timeSeconds).toBe(middleOfSecondChunk); it("should not play the first chunk a second time", () => {
expect(chunk1Playback.play).toHaveBeenCalledTimes(1);
});
}); });
describe("and skipping to the start", () => { describe("and the chunk playback progresses", () => {
beforeEach(async () => { beforeEach(() => {
await playback.skipTo(0); chunk1Playback.clockInfo.liveData.update([11]);
}); });
it("should play the first chunk", () => { it("should update the time", () => {
expect(playback.timeSeconds).toBe(11);
});
});
describe("and the chunk playback progresses across the actual time", () => {
// This can be the case if the meta data is out of sync with the actual audio data.
beforeEach(() => {
chunk1Playback.clockInfo.liveData.update([15]);
});
it("should update the time", () => {
expect(playback.timeSeconds).toBe(15);
expect(playback.timeLeftSeconds).toBe(0);
});
});
describe("and skipping to the middle of the second chunk", () => {
const middleOfSecondChunk = (chunk1Length + chunk2Length / 2) / 1000;
beforeEach(async () => {
await playback.skipTo(middleOfSecondChunk);
});
it("should play the second chunk", () => {
expect(chunk1Playback.stop).toHaveBeenCalled();
expect(chunk1Playback.destroy).toHaveBeenCalled();
expect(chunk2Playback.play).toHaveBeenCalled();
});
it("should update the time", () => {
expect(playback.timeSeconds).toBe(middleOfSecondChunk);
});
describe("and skipping to the start", () => {
beforeEach(async () => {
await playback.skipTo(0);
});
it("should play the first chunk", () => {
expect(chunk2Playback.stop).toHaveBeenCalled();
expect(chunk2Playback.destroy).toHaveBeenCalled();
expect(chunk1Playback.play).toHaveBeenCalled();
});
it("should update the time", () => {
expect(playback.timeSeconds).toBe(0);
});
});
});
describe("and skipping multiple times", () => {
beforeEach(async () => {
return Promise.all([
playback.skipTo(middleOfSecondChunk),
playback.skipTo(middleOfThirdChunk),
playback.skipTo(0),
]);
});
it("should only skip to the first and last position", () => {
expect(chunk1Playback.stop).toHaveBeenCalled();
expect(chunk1Playback.destroy).toHaveBeenCalled();
expect(chunk2Playback.play).toHaveBeenCalled();
expect(chunk3Playback.play).not.toHaveBeenCalled();
expect(chunk2Playback.stop).toHaveBeenCalled(); expect(chunk2Playback.stop).toHaveBeenCalled();
expect(chunk2Playback.destroy).toHaveBeenCalled(); expect(chunk2Playback.destroy).toHaveBeenCalled();
expect(chunk1Playback.play).toHaveBeenCalled(); expect(chunk1Playback.play).toHaveBeenCalled();
}); });
it("should update the time", () => {
expect(playback.timeSeconds).toBe(0);
});
});
});
describe("and skipping multiple times", () => {
beforeEach(async () => {
return Promise.all([
playback.skipTo(middleOfSecondChunk),
playback.skipTo(middleOfThirdChunk),
playback.skipTo(0),
]);
}); });
it("should only skip to the first and last position", () => { describe("and the first chunk ends", () => {
expect(chunk1Playback.stop).toHaveBeenCalled(); beforeEach(() => {
expect(chunk1Playback.destroy).toHaveBeenCalled(); chunk1Playback.emit(PlaybackState.Stopped);
expect(chunk2Playback.play).toHaveBeenCalled();
expect(chunk3Playback.play).not.toHaveBeenCalled();
expect(chunk2Playback.stop).toHaveBeenCalled();
expect(chunk2Playback.destroy).toHaveBeenCalled();
expect(chunk1Playback.play).toHaveBeenCalled();
});
});
describe("and the first chunk ends", () => {
beforeEach(() => {
chunk1Playback.emit(PlaybackState.Stopped);
});
it("should play until the end", () => {
// assert first chunk was unloaded
expect(chunk1Playback.destroy).toHaveBeenCalled();
// assert that the second chunk is being played
expect(chunk2Playback.play).toHaveBeenCalled();
// simulate end of second and third chunk
chunk2Playback.emit(PlaybackState.Stopped);
chunk3Playback.emit(PlaybackState.Stopped);
// assert that the entire playback is now in stopped state
expect(playback.getState()).toBe(VoiceBroadcastPlaybackState.Stopped);
});
});
describe("and calling pause", () => {
pausePlayback();
itShouldSetTheStateTo(VoiceBroadcastPlaybackState.Paused);
itShouldEmitAStateChangedEvent(VoiceBroadcastPlaybackState.Paused);
});
describe("and calling stop", () => {
stopPlayback();
itShouldSetTheStateTo(VoiceBroadcastPlaybackState.Stopped);
it("should stop the playback", () => {
expect(chunk1Playback.stop).toHaveBeenCalled();
});
describe("and skipping to somewhere in the middle of the first chunk", () => {
beforeEach(async () => {
mocked(chunk1Playback.play).mockClear();
await playback.skipTo(1);
}); });
it("should not start the playback", () => { it("should play until the end", () => {
expect(chunk1Playback.play).not.toHaveBeenCalled(); // assert first chunk was unloaded
expect(chunk1Playback.destroy).toHaveBeenCalled();
// assert that the second chunk is being played
expect(chunk2Playback.play).toHaveBeenCalled();
// simulate end of second and third chunk
chunk2Playback.emit(PlaybackState.Stopped);
chunk3Playback.emit(PlaybackState.Stopped);
// assert that the entire playback is now in stopped state
expect(playback.getState()).toBe(VoiceBroadcastPlaybackState.Stopped);
}); });
}); });
});
describe("and calling destroy", () => { describe("and calling pause", () => {
beforeEach(() => { pausePlayback();
playback.destroy(); itShouldSetTheStateTo(VoiceBroadcastPlaybackState.Paused);
itShouldEmitAStateChangedEvent(VoiceBroadcastPlaybackState.Paused);
}); });
it("should call removeAllListeners", () => { describe("and calling stop", () => {
expect(playback.removeAllListeners).toHaveBeenCalled(); stopPlayback();
itShouldSetTheStateTo(VoiceBroadcastPlaybackState.Stopped);
it("should stop the playback", () => {
expect(chunk1Playback.stop).toHaveBeenCalled();
});
describe("and skipping to somewhere in the middle of the first chunk", () => {
beforeEach(async () => {
mocked(chunk1Playback.play).mockClear();
await playback.skipTo(1);
});
it("should not start the playback", () => {
expect(chunk1Playback.play).not.toHaveBeenCalled();
});
});
}); });
it("should call destroy on the playbacks", () => { describe("and calling destroy", () => {
expect(chunk1Playback.destroy).toHaveBeenCalled(); beforeEach(() => {
expect(chunk2Playback.destroy).toHaveBeenCalled(); playback.destroy();
});
it("should call removeAllListeners", () => {
expect(playback.removeAllListeners).toHaveBeenCalled();
});
it("should call destroy on the playbacks", () => {
expect(chunk1Playback.destroy).toHaveBeenCalled();
expect(chunk2Playback.destroy).toHaveBeenCalled();
});
}); });
}); });
}); });
describe("and calling toggle for the first time", () => { describe("and calling toggle for the first time", () => {
beforeEach(async () => { beforeEach(async () => {
await playback.toggle(); playback.toggle();
await simulateFirstChunkArrived();
}); });
itShouldSetTheStateTo(VoiceBroadcastPlaybackState.Playing); itShouldSetTheStateTo(VoiceBroadcastPlaybackState.Playing);
@ -693,7 +739,8 @@ describe("VoiceBroadcastPlayback", () => {
describe("and calling toggle", () => { describe("and calling toggle", () => {
beforeEach(async () => { beforeEach(async () => {
mocked(onStateChanged).mockReset(); mocked(onStateChanged).mockReset();
await playback.toggle(); playback.toggle();
await simulateFirstChunkArrived();
}); });
itShouldSetTheStateTo(VoiceBroadcastPlaybackState.Playing); itShouldSetTheStateTo(VoiceBroadcastPlaybackState.Playing);

View file

@ -4226,10 +4226,10 @@ eslint-plugin-jsx-a11y@^6.5.1:
minimatch "^3.1.2" minimatch "^3.1.2"
semver "^6.3.0" semver "^6.3.0"
eslint-plugin-matrix-org@0.9.0: eslint-plugin-matrix-org@0.10.0:
version "0.9.0" version "0.10.0"
resolved "https://registry.yarnpkg.com/eslint-plugin-matrix-org/-/eslint-plugin-matrix-org-0.9.0.tgz#b2a5186052ddbfa7dc9878779bafa5d68681c7b4" resolved "https://registry.yarnpkg.com/eslint-plugin-matrix-org/-/eslint-plugin-matrix-org-0.10.0.tgz#8d0998641a4d276343cae2abf253a01bb4d4cc60"
integrity sha512-+j6JuMnFH421Z2vOxc+0YMt5Su5vD76RSatviy3zHBaZpgd+sOeAWoCLBHD5E7mMz5oKae3Y3wewCt9LRzq2Nw== integrity sha512-L7ail0x1yUlF006kn4mHc+OT8/aYZI++i852YXPHxCbM1EY7jeg/fYAQ8tCx5+x08LyqXeS7inAVSL784m0C6Q==
eslint-plugin-react-hooks@^4.3.0: eslint-plugin-react-hooks@^4.3.0:
version "4.6.0" version "4.6.0"