{_t(
+ "Type in your Recovery Passphrase to confirm you remember it. " +
+ "If it helps, add it to your password manager or store it " +
+ "somewhere safe.",
+ )}
+ {_t(
+ "Without setting up Secure Message Recovery, you won't be able to restore your " +
+ "encrypted message history if you log out or use another device.",
+ )}
+
+
+
+
;
+ },
+
+ _titleForPhase: function(phase) {
+ switch (phase) {
+ case PHASE_PASSPHRASE:
+ return _t('Create a Recovery Passphrase');
+ case PHASE_PASSPHRASE_CONFIRM:
+ return _t('Confirm Recovery Passphrase');
+ case PHASE_OPTOUT_CONFIRM:
+ return _t('Warning!');
+ case PHASE_SHOWKEY:
+ return _t('Recovery Key');
+ case PHASE_KEEPITSAFE:
+ return _t('Keep it safe');
+ case PHASE_BACKINGUP:
+ return _t('Backing up...');
+ default:
+ return _t("Create Key Backup");
+ }
+ },
+
+ render: function() {
+ const BaseDialog = sdk.getComponent('views.dialogs.BaseDialog');
+
+ let content;
+ if (this.state.error) {
+ const DialogButtons = sdk.getComponent('views.elements.DialogButtons');
+ content =
);
- }
+ },
});
// Similar to matrix-react-sdk's MatrixTools.getDisplayAliasForRoom
// but works with the objects we get from the public room list
function get_display_alias_for_room(room) {
- return room.canonical_alias || (room.aliases ? room.aliases[0] : "");
+ return room.canonical_alias || (room.aliases ? room.aliases[0] : "");
}
diff --git a/src/components/structures/RoomStatusBar.js b/src/components/structures/RoomStatusBar.js
index 4f9ac153f5..b4d70f3397 100644
--- a/src/components/structures/RoomStatusBar.js
+++ b/src/components/structures/RoomStatusBar.js
@@ -37,7 +37,7 @@ function getUnsentMessages(room) {
return room.getPendingEvents().filter(function(ev) {
return ev.status === Matrix.EventStatus.NOT_SENT;
});
-};
+}
module.exports = React.createClass({
displayName: 'RoomStatusBar',
@@ -66,6 +66,10 @@ module.exports = React.createClass({
// result in "X, Y, Z and 100 others are typing."
whoIsTypingLimit: PropTypes.number,
+ // true if the room is being peeked at. This affects components that shouldn't
+ // logically be shown when peeking, such as a prompt to invite people to a room.
+ isPeeking: PropTypes.bool,
+
// callback for when the user clicks on the 'resend all' button in the
// 'unsent messages' bar
onResendAllClick: PropTypes.func,
@@ -299,7 +303,7 @@ module.exports = React.createClass({
const errorIsMauError = Boolean(
this.state.syncStateData &&
this.state.syncStateData.error &&
- this.state.syncStateData.error.errcode === 'M_RESOURCE_LIMIT_EXCEEDED'
+ this.state.syncStateData.error.errcode === 'M_RESOURCE_LIMIT_EXCEEDED',
);
return this.state.syncState === "ERROR" && !errorIsMauError;
},
@@ -457,7 +461,7 @@ module.exports = React.createClass({
}
// If you're alone in the room, and have sent a message, suggest to invite someone
- if (this.props.sentMessageAndIsAlone) {
+ if (this.props.sentMessageAndIsAlone && !this.props.isPeeking) {
return (
{ _t("There's no one else here! Would you like to invite others " +
diff --git a/src/components/structures/RoomView.js b/src/components/structures/RoomView.js
index 7b2b59f440..934031e98d 100644
--- a/src/components/structures/RoomView.js
+++ b/src/components/structures/RoomView.js
@@ -89,6 +89,9 @@ module.exports = React.createClass({
// is the RightPanel collapsed?
collapsedRhs: PropTypes.bool,
+
+ // Servers the RoomView can use to try and assist joins
+ viaServers: PropTypes.arrayOf(PropTypes.string),
},
getInitialState: function() {
@@ -708,8 +711,8 @@ module.exports = React.createClass({
if (!room) return;
console.log("Tinter.tint from updateTint");
- const color_scheme = SettingsStore.getValue("roomColor", room.roomId);
- Tinter.tint(color_scheme.primary_color, color_scheme.secondary_color);
+ const colorScheme = SettingsStore.getValue("roomColor", room.roomId);
+ Tinter.tint(colorScheme.primary_color, colorScheme.secondary_color);
},
onAccountData: function(event) {
@@ -724,10 +727,10 @@ module.exports = React.createClass({
if (room.roomId == this.state.roomId) {
const type = event.getType();
if (type === "org.matrix.room.color_scheme") {
- const color_scheme = event.getContent();
+ const colorScheme = event.getContent();
// XXX: we should validate the event
console.log("Tinter.tint from onRoomAccountData");
- Tinter.tint(color_scheme.primary_color, color_scheme.secondary_color);
+ Tinter.tint(colorScheme.primary_color, colorScheme.secondary_color);
} else if (type === "org.matrix.room.preview_urls" || type === "im.vector.web.settings") {
// non-e2ee url previews are stored in legacy event type `org.matrix.room.preview_urls`
this._updatePreviewUrlVisibility(room);
@@ -863,7 +866,7 @@ module.exports = React.createClass({
action: 'do_after_sync_prepared',
deferred_action: {
action: 'join_room',
- opts: { inviteSignUrl: signUrl },
+ opts: { inviteSignUrl: signUrl, viaServers: this.props.viaServers },
},
});
@@ -905,7 +908,7 @@ module.exports = React.createClass({
this.props.thirdPartyInvite.inviteSignUrl : undefined;
dis.dispatch({
action: 'join_room',
- opts: { inviteSignUrl: signUrl },
+ opts: { inviteSignUrl: signUrl, viaServers: this.props.viaServers },
});
return Promise.resolve();
});
@@ -1553,6 +1556,7 @@ module.exports = React.createClass({
canPreview={false} error={this.state.roomLoadError}
roomAlias={roomAlias}
spinner={this.state.joining}
+ spinnerState="joining"
inviterName={inviterName}
invitedEmail={invitedEmail}
room={this.state.room}
@@ -1597,6 +1601,7 @@ module.exports = React.createClass({
inviterName={inviterName}
canPreview={false}
spinner={this.state.joining}
+ spinnerState="joining"
room={this.state.room}
/>
@@ -1634,6 +1639,7 @@ module.exports = React.createClass({
atEndOfLiveTimeline={this.state.atEndOfLiveTimeline}
sentMessageAndIsAlone={this.state.isAlone}
hasActiveCall={inCall}
+ isPeeking={myMembership !== "join"}
onInviteClick={this.onInviteButtonClick}
onStopWarningClick={this.onStopAloneWarningClick}
onScrollToBottomClick={this.jumpToLiveTimeline}
@@ -1683,6 +1689,7 @@ module.exports = React.createClass({
onForgetClick={this.onForgetClick}
onRejectClick={this.onRejectThreepidInviteButtonClicked}
spinner={this.state.joining}
+ spinnerState="joining"
inviterName={inviterName}
invitedEmail={invitedEmail}
canPreview={this.state.canPeek}
@@ -1705,10 +1712,10 @@ module.exports = React.createClass({
);
- let messageComposer, searchInfo;
+ let messageComposer; let searchInfo;
const canSpeak = (
// joined and not showing search results
- myMembership == 'join' && !this.state.searchResults
+ myMembership === 'join' && !this.state.searchResults
);
if (canSpeak) {
messageComposer =
@@ -1723,6 +1730,11 @@ module.exports = React.createClass({
/>;
}
+ if (MatrixClientPeg.get().isGuest()) {
+ const LoginBox = sdk.getComponent('structures.LoginBox');
+ messageComposer = ;
+ }
+
// TODO: Why aren't we storing the term/scope/count in this format
// in this.state if this is what RoomHeader desires?
if (this.state.searchResults) {
@@ -1734,7 +1746,7 @@ module.exports = React.createClass({
}
if (inCall) {
- let zoomButton, voiceMuteButton, videoMuteButton;
+ let zoomButton; let voiceMuteButton; let videoMuteButton;
if (call.type === "video") {
zoomButton = (
diff --git a/src/components/structures/SearchBox.js b/src/components/structures/SearchBox.js
index 459df3bd26..d1f4cd30fa 100644
--- a/src/components/structures/SearchBox.js
+++ b/src/components/structures/SearchBox.js
@@ -72,7 +72,7 @@ module.exports = React.createClass({
function() {
this.props.onSearch(this.refs.search.value);
},
- 100
+ 100,
),
onToggleCollapse: function(show) {
@@ -80,8 +80,7 @@ module.exports = React.createClass({
dis.dispatch({
action: 'show_left_panel',
});
- }
- else {
+ } else {
dis.dispatch({
action: 'hide_left_panel',
});
@@ -103,25 +102,24 @@ module.exports = React.createClass({
},
render: function() {
- var TintableSvg = sdk.getComponent('elements.TintableSvg');
+ const TintableSvg = sdk.getComponent('elements.TintableSvg');
- var collapseTabIndex = this.refs.search && this.refs.search.value !== "" ? "-1" : "0";
+ const collapseTabIndex = this.refs.search && this.refs.search.value !== "" ? "-1" : "0";
- var toggleCollapse;
+ let toggleCollapse;
if (this.props.collapsed) {
toggleCollapse =
-
-
- }
- else {
+
+ ;
+ } else {
toggleCollapse =
-
-
+
+ ;
}
- var searchControls;
+ let searchControls;
if (!this.props.collapsed) {
searchControls = [
this.state.searchTerm.length > 0 ?
@@ -148,16 +146,16 @@ module.exports = React.createClass({
onChange={ this.onChange }
onKeyDown={ this._onKeyDown }
placeholder={ _t('Filter room names') }
- />
+ />,
];
}
- var self = this;
+ const self = this;
return (
+ {"\uD83D\uDC4D "}{_t("This looks like a valid recovery key!")}
+
;
+ } else {
+ keyStatus =
+ {"\uD83D\uDC4E "}{_t("Not a valid recovery key")}
+
;
+ }
+
+ content =
+ {_t(
+ "Access your secure message history and set up secure " +
+ "messaging by entering your recovery key.",
+ )}
+
+
+
+ {keyStatus}
+
+
+ {_t(
+ "If you've forgotten your recovery passphrase you can "+
+ ""
+ , {}, {
+ button: s =>
+ {s}
+ ,
+ })}
+
;
+ }
+
+ return (
+
+
+ {content}
+
+
+ );
+ },
+});
diff --git a/src/components/views/directory/NetworkDropdown.js b/src/components/views/directory/NetworkDropdown.js
index b45bd286f2..ad51f501fb 100644
--- a/src/components/views/directory/NetworkDropdown.js
+++ b/src/components/views/directory/NetworkDropdown.js
@@ -153,8 +153,8 @@ export default class NetworkDropdown extends React.Component {
const sortedInstances = this.props.protocols[proto].instances;
sortedInstances.sort(function(x, y) {
- const a = x.desc
- const b = y.desc
+ const a = x.desc;
+ const b = y.desc;
if (a < b) {
return -1;
} else if (a > b) {
@@ -208,7 +208,7 @@ export default class NetworkDropdown extends React.Component {
return
{icon}
{name}
-
+ ;
}
render() {
@@ -223,11 +223,11 @@ export default class NetworkDropdown extends React.Component {
current_value =
+ />;
} else {
const instance = instanceForInstanceId(this.props.protocols, this.state.selectedInstanceId);
current_value = this._makeMenuOption(
- this.state.selectedServer, instance, this.state.includeAll, false
+ this.state.selectedServer, instance, this.state.includeAll, false,
);
}
diff --git a/src/components/views/elements/AppTile.js b/src/components/views/elements/AppTile.js
index 7be0bab33c..23b24adbb4 100644
--- a/src/components/views/elements/AppTile.js
+++ b/src/components/views/elements/AppTile.js
@@ -318,6 +318,19 @@ export default class AppTile extends React.Component {
}
this.setState({deleting: true});
+ // HACK: This is a really dirty way to ensure that Jitsi cleans up
+ // its hold on the webcam. Without this, the widget holds a media
+ // stream open, even after death. See https://github.com/vector-im/riot-web/issues/7351
+ if (this.refs.appFrame) {
+ // In practice we could just do `+= ''` to trick the browser
+ // into thinking the URL changed, however I can foresee this
+ // being optimized out by a browser. Instead, we'll just point
+ // the iframe at a page that is reasonably safe to use in the
+ // event the iframe doesn't wink away.
+ // This is relative to where the Riot instance is located.
+ this.refs.appFrame.src = 'about:blank';
+ }
+
WidgetUtils.setRoomWidget(
this.props.room.roomId,
this.props.id,
diff --git a/src/components/views/elements/DeviceVerifyButtons.js b/src/components/views/elements/DeviceVerifyButtons.js
index c775cba610..b88fbdfc06 100644
--- a/src/components/views/elements/DeviceVerifyButtons.js
+++ b/src/components/views/elements/DeviceVerifyButtons.js
@@ -78,7 +78,7 @@ export default React.createClass({
},
render: function() {
- let blacklistButton = null, verifyButton = null;
+ let blacklistButton = null; let verifyButton = null;
if (this.state.device.isBlocked()) {
blacklistButton = (
diff --git a/src/components/views/elements/DialogButtons.js b/src/components/views/elements/DialogButtons.js
index baf831415f..70355b56b7 100644
--- a/src/components/views/elements/DialogButtons.js
+++ b/src/components/views/elements/DialogButtons.js
@@ -43,7 +43,11 @@ module.exports = React.createClass({
focus: PropTypes.bool,
+ // disables the primary and cancel buttons
disabled: PropTypes.bool,
+
+ // disables only the primary button
+ primaryDisabled: PropTypes.bool,
},
getDefaultProps: function() {
@@ -70,15 +74,15 @@ module.exports = React.createClass({
}
return (
;
+ }
+ }
+}
diff --git a/src/components/views/settings/Notifications.js b/src/components/views/settings/Notifications.js
index ea727a03b5..72ad2943aa 100644
--- a/src/components/views/settings/Notifications.js
+++ b/src/components/views/settings/Notifications.js
@@ -67,7 +67,7 @@ module.exports = React.createClass({
phases: {
LOADING: "LOADING", // The component is loading or sending data to the hs
DISPLAY: "DISPLAY", // The component is ready and display data
- ERROR: "ERROR", // There was an error
+ ERROR: "ERROR", // There was an error
},
propTypes: {
@@ -86,14 +86,14 @@ module.exports = React.createClass({
getInitialState: function() {
return {
phase: this.phases.LOADING,
- masterPushRule: undefined, // The master rule ('.m.rule.master')
- vectorPushRules: [], // HS default push rules displayed in Vector UI
- vectorContentRules: { // Keyword push rules displayed in Vector UI
+ masterPushRule: undefined, // The master rule ('.m.rule.master')
+ vectorPushRules: [], // HS default push rules displayed in Vector UI
+ vectorContentRules: { // Keyword push rules displayed in Vector UI
vectorState: PushRuleVectorState.ON,
rules: [],
},
- externalPushRules: [], // Push rules (except content rule) that have been defined outside Vector UI
- externalContentRules: [], // Keyword push rules that have been defined outside Vector UI
+ externalPushRules: [], // Push rules (except content rule) that have been defined outside Vector UI
+ externalContentRules: [], // Keyword push rules that have been defined outside Vector UI
};
},
@@ -290,7 +290,7 @@ module.exports = React.createClass({
for (const i in this.state.vectorContentRules.rules) {
const rule = this.state.vectorContentRules.rules[i];
- let enabled, actions;
+ let enabled; let actions;
switch (newPushRuleVectorState) {
case PushRuleVectorState.ON:
if (rule.actions.length !== 1) {
diff --git a/src/i18n/strings/bg.json b/src/i18n/strings/bg.json
index 9921662964..246d53c8d2 100644
--- a/src/i18n/strings/bg.json
+++ b/src/i18n/strings/bg.json
@@ -1288,5 +1288,16 @@
"You've previously used Riot on %(host)s with lazy loading of members enabled. In this version lazy loading is disabled. As the local cache is not compatible between these two settings, Riot needs to resync your account.": "Преди сте използвали Riot на %(host)s с включено постепенно зареждане на членове. В тази версия, тази настройка е изключена. Понеже локалният кеш не е съвместим при тези две настройки, Riot трябва да синхронизира акаунта Ви наново.",
"If the other version of Riot is still open in another tab, please close it as using Riot on the same host with both lazy loading enabled and disabled simultaneously will cause issues.": "Ако другата версия на Riot все още е отворена в друг таб, моля затворете я. Използването на Riot на един адрес във версии с постепенно и без постепенно зареждане ще причини проблеми.",
"Incompatible local cache": "Несъвместим локален кеш",
- "Clear cache and resync": "Изчисти кеша и ресинхронизирай"
+ "Clear cache and resync": "Изчисти кеша и ресинхронизирай",
+ "Please accept all of the policies": "Моля, приемете всички политики",
+ "Please review and accept the policies of this homeserver:": "Моля, прегледайте и приемете политиките на този сървър:",
+ "Add some now": "Добави сега",
+ "Pin unread rooms to the top of the room list": "Закачане на непрочетени стаи най-отгоре в списъка",
+ "Pin rooms I'm mentioned in to the top of the room list": "Закачане на споменаващи ме стаи най-отгоре в списъка",
+ "Joining room...": "Влизане в стая...",
+ "You are an administrator of this community. You will not be able to rejoin without an invite from another administrator.": "Вие сте администратор на тази общност. Няма да можете да се присъедините пак без покана от друг администратор.",
+ "Open Devtools": "Отвори инструментите за разработчици",
+ "Show developer tools": "Покажи инструментите за разработчици",
+ "If you would like to create a Matrix account you can register now.": "Ако искате да създадете Matrix акаунт, може да се регистрирате тук.",
+ "You are currently using Riot anonymously as a guest.": "В момента използвате Riot анонимно, като гост."
}
diff --git a/src/i18n/strings/de_DE.json b/src/i18n/strings/de_DE.json
index b183c8bfcd..fffacf786e 100644
--- a/src/i18n/strings/de_DE.json
+++ b/src/i18n/strings/de_DE.json
@@ -1289,5 +1289,16 @@
"You've previously used Riot on %(host)s with lazy loading of members enabled. In this version lazy loading is disabled. As the local cache is not compatible between these two settings, Riot needs to resync your account.": "Du hast zuvor Riot auf %(host)s ohne verzögertem Laden von Mitgliedern genutzt. In dieser Version war das verzögerte Laden deaktiviert. Da die lokal zwischengespeicherten Daten zwischen diesen Einstellungen nicht kompatibel ist, muss Riot dein Konto neu synchronisieren.",
"If the other version of Riot is still open in another tab, please close it as using Riot on the same host with both lazy loading enabled and disabled simultaneously will cause issues.": "Wenn Riot mit der alten Version in einem anderen Tab geöffnet ist, schließe dies bitte, da das parallele Nutzen von Riot auf demselben Host mit aktivierten und deaktivierten verzögertem Laden, Probleme verursachen wird.",
"Incompatible local cache": "Inkompatibler lokaler Zwischenspeicher",
- "Clear cache and resync": "Zwischenspeicher löschen und erneut synchronisieren"
+ "Clear cache and resync": "Zwischenspeicher löschen und erneut synchronisieren",
+ "Please accept all of the policies": "Bitte akzeptiere alle Bedingungen",
+ "Please review and accept the policies of this homeserver:": "Bitte sieh dir alle Bedingungen dieses Heimservers an und akzeptiere sie:",
+ "Pin unread rooms to the top of the room list": "Ungelesene Räume oben an der Raumliste anheften",
+ "Pin rooms I'm mentioned in to the top of the room list": "Räume mit Erwähnungen oben an der Raumliste anheften",
+ "Joining room...": "Trete Raum bei...",
+ "Add some now": "Füge jetzt hinzu",
+ "You are an administrator of this community. You will not be able to rejoin without an invite from another administrator.": "Du bist ein Administrator dieser Community. Du wirst nicht erneut hinzutreten können, wenn du nicht von einem anderen Administrator eingeladen wirst.",
+ "Open Devtools": "Öffne Entwickler-Werkzeuge",
+ "Show developer tools": "Zeige Entwickler-Werkzeuge",
+ "If you would like to create a Matrix account you can register now.": "Wenn du ein Matrix-Konto erstellen möchtest, kannst du dich jetzt registrieren.",
+ "You are currently using Riot anonymously as a guest.": "Du benutzt aktuell Riot anonym als Gast."
}
diff --git a/src/i18n/strings/en_EN.json b/src/i18n/strings/en_EN.json
index fe70da61d9..e4aad2c55d 100644
--- a/src/i18n/strings/en_EN.json
+++ b/src/i18n/strings/en_EN.json
@@ -43,10 +43,6 @@
"The file '%(fileName)s' failed to upload": "The file '%(fileName)s' failed to upload",
"The file '%(fileName)s' exceeds this home server's size limit for uploads": "The file '%(fileName)s' exceeds this home server's size limit for uploads",
"Upload Failed": "Upload Failed",
- "Failure to create room": "Failure to create room",
- "Server may be unavailable, overloaded, or you hit a bug.": "Server may be unavailable, overloaded, or you hit a bug.",
- "Send anyway": "Send anyway",
- "Send": "Send",
"Sun": "Sun",
"Mon": "Mon",
"Tue": "Tue",
@@ -86,7 +82,8 @@
"Failed to invite users to community": "Failed to invite users to community",
"Failed to invite users to %(groupId)s": "Failed to invite users to %(groupId)s",
"Failed to add the following rooms to %(groupId)s:": "Failed to add the following rooms to %(groupId)s:",
- "Unnamed Room": "Unnamed Room",
+ "Unable to load! Check your network connectivity and try again.": "Unable to load! Check your network connectivity and try again.",
+ "Dismiss": "Dismiss",
"Riot does not have permission to send you notifications - please check your browser settings": "Riot does not have permission to send you notifications - please check your browser settings",
"Riot was not given permission to send notifications - please try again": "Riot was not given permission to send notifications - please try again",
"Unable to enable Notifications": "Unable to enable Notifications",
@@ -211,6 +208,11 @@
"%(names)s and %(count)s others are typing|other": "%(names)s and %(count)s others are typing",
"%(names)s and %(count)s others are typing|one": "%(names)s and one other is typing",
"%(names)s and %(lastPerson)s are typing": "%(names)s and %(lastPerson)s are typing",
+ "Failure to create room": "Failure to create room",
+ "Server may be unavailable, overloaded, or you hit a bug.": "Server may be unavailable, overloaded, or you hit a bug.",
+ "Send anyway": "Send anyway",
+ "Send": "Send",
+ "Unnamed Room": "Unnamed Room",
"This homeserver has hit its Monthly Active User limit.": "This homeserver has hit its Monthly Active User limit.",
"This homeserver has exceeded one of its resource limits.": "This homeserver has exceeded one of its resource limits.",
"Please contact your service administrator to continue using the service.": "Please contact your service administrator to continue using the service.",
@@ -223,6 +225,7 @@
"Failed to join room": "Failed to join room",
"Message Pinning": "Message Pinning",
"Increase performance by only loading room members on first view": "Increase performance by only loading room members on first view",
+ "Backup of encryption keys to server": "Backup of encryption keys to server",
"Disable Emoji suggestions while typing": "Disable Emoji suggestions while typing",
"Use compact timeline layout": "Use compact timeline layout",
"Hide removed messages": "Hide removed messages",
@@ -249,8 +252,11 @@
"Enable URL previews for this room (only affects you)": "Enable URL previews for this room (only affects you)",
"Enable URL previews by default for participants in this room": "Enable URL previews by default for participants in this room",
"Room Colour": "Room Colour",
+ "Pin rooms I'm mentioned in to the top of the room list": "Pin rooms I'm mentioned in to the top of the room list",
+ "Pin unread rooms to the top of the room list": "Pin unread rooms to the top of the room list",
"Enable widget screenshots on supported widgets": "Enable widget screenshots on supported widgets",
"Show empty room list headings": "Show empty room list headings",
+ "Show developer tools": "Show developer tools",
"Collecting app version information": "Collecting app version information",
"Collecting logs": "Collecting logs",
"Uploading report": "Uploading report",
@@ -304,6 +310,24 @@
"Failed to set display name": "Failed to set display name",
"Disable Notifications": "Disable Notifications",
"Enable Notifications": "Enable Notifications",
+ "Delete Backup": "Delete Backup",
+ "Delete your backed up encryption keys from the server? You will no longer be able to use your recovery key to read encrypted message history": "Delete your backed up encryption keys from the server? You will no longer be able to use your recovery key to read encrypted message history",
+ "Delete backup": "Delete backup",
+ "Unable to load key backup status": "Unable to load key backup status",
+ "This device is uploading keys to this backup": "This device is uploading keys to this backup",
+ "This device is not uploading keys to this backup": "This device is not uploading keys to this backup",
+ "Backup has a valid signature from this device": "Backup has a valid signature from this device",
+ "Backup has a valid signature from verified device x": "Backup has a valid signature from verified device x",
+ "Backup has a valid signature from unverified device ": "Backup has a valid signature from unverified device ",
+ "Backup has an invalid signature from verified device ": "Backup has an invalid signature from verified device ",
+ "Backup has an invalid signature from unverified device ": "Backup has an invalid signature from unverified device ",
+ "Verify...": "Verify...",
+ "Backup is not signed by any of your devices": "Backup is not signed by any of your devices",
+ "Backup version: ": "Backup version: ",
+ "Algorithm: ": "Algorithm: ",
+ "Restore backup": "Restore backup",
+ "No backup is present": "No backup is present",
+ "Start a new backup": "Start a new backup",
"Error saving email notification preferences": "Error saving email notification preferences",
"An error occurred whilst saving your email notification preferences.": "An error occurred whilst saving your email notification preferences.",
"Keywords": "Keywords",
@@ -331,31 +355,6 @@
"Off": "Off",
"On": "On",
"Noisy": "Noisy",
- "Invalid alias format": "Invalid alias format",
- "'%(alias)s' is not a valid format for an alias": "'%(alias)s' is not a valid format for an alias",
- "Invalid address format": "Invalid address format",
- "'%(alias)s' is not a valid format for an address": "'%(alias)s' is not a valid format for an address",
- "not specified": "not specified",
- "not set": "not set",
- "Remote addresses for this room:": "Remote addresses for this room:",
- "Addresses": "Addresses",
- "The main address for this room is": "The main address for this room is",
- "Local addresses for this room:": "Local addresses for this room:",
- "This room has no local addresses": "This room has no local addresses",
- "New address (e.g. #foo:%(localDomain)s)": "New address (e.g. #foo:%(localDomain)s)",
- "Invalid community ID": "Invalid community ID",
- "'%(groupId)s' is not a valid community ID": "'%(groupId)s' is not a valid community ID",
- "Flair": "Flair",
- "Showing flair for these communities:": "Showing flair for these communities:",
- "This room is not showing flair for any communities": "This room is not showing flair for any communities",
- "New community ID (e.g. +foo:%(localDomain)s)": "New community ID (e.g. +foo:%(localDomain)s)",
- "You have enabled URL previews by default.": "You have enabled URL previews by default.",
- "You have disabled URL previews by default.": "You have disabled URL previews by default.",
- "URL previews are enabled by default for participants in this room.": "URL previews are enabled by default for participants in this room.",
- "URL previews are disabled by default for participants in this room.": "URL previews are disabled by default for participants in this room.",
- "In encrypted rooms, like this one, URL previews are disabled by default to ensure that your homeserver (where the previews are generated) cannot gather information about links you see in this room.": "In encrypted rooms, like this one, URL previews are disabled by default to ensure that your homeserver (where the previews are generated) cannot gather information about links you see in this room.",
- "URL Previews": "URL Previews",
- "When someone puts a URL in their message, a URL preview can be shown to give more information about that link such as the title, description, and an image from the website.": "When someone puts a URL in their message, a URL preview can be shown to give more information about that link such as the title, description, and an image from the website.",
"Cannot add any more widgets": "Cannot add any more widgets",
"The maximum permitted number of widgets have already been added to this room.": "The maximum permitted number of widgets have already been added to this room.",
"Add a widget": "Add a widget",
@@ -419,6 +418,7 @@
"Make Moderator": "Make Moderator",
"Admin Tools": "Admin Tools",
"Level:": "Level:",
+ "Close": "Close",
"and %(count)s others...|other": "and %(count)s others...",
"and %(count)s others...|one": "and one other...",
"Invited": "Invited",
@@ -460,11 +460,11 @@
"At this time it is not possible to reply with an emote.": "At this time it is not possible to reply with an emote.",
"Markdown is disabled": "Markdown is disabled",
"Markdown is enabled": "Markdown is enabled",
+ "Unpin Message": "Unpin Message",
+ "Jump to message": "Jump to message",
"No pinned messages.": "No pinned messages.",
"Loading...": "Loading...",
"Pinned Messages": "Pinned Messages",
- "Unpin Message": "Unpin Message",
- "Jump to message": "Jump to message",
"%(duration)ss": "%(duration)ss",
"%(duration)sm": "%(duration)sm",
"%(duration)sh": "%(duration)sh",
@@ -512,6 +512,7 @@
"You have no historical rooms": "You have no historical rooms",
"Historical": "Historical",
"System Alerts": "System Alerts",
+ "Joining room...": "Joining room...",
"Unable to ascertain that the address this invite was sent to matches one associated with your account.": "Unable to ascertain that the address this invite was sent to matches one associated with your account.",
"This invitation was sent to an email address which is not associated with this account:": "This invitation was sent to an email address which is not associated with this account:",
"You may wish to login with a different account, or add this email to this account.": "You may wish to login with a different account, or add this email to this account.",
@@ -574,6 +575,7 @@
"Click here to fix": "Click here to fix",
"To send events of type , you must be a": "To send events of type , you must be a",
"Upgrade room to version %(ver)s": "Upgrade room to version %(ver)s",
+ "Open Devtools": "Open Devtools",
"Who can access this room?": "Who can access this room?",
"Only people who have been invited": "Only people who have been invited",
"Anyone who knows the room's link, apart from guests": "Anyone who knows the room's link, apart from guests",
@@ -598,13 +600,37 @@
"All Rooms": "All Rooms",
"Cancel": "Cancel",
"You don't currently have any stickerpacks enabled": "You don't currently have any stickerpacks enabled",
- "Add a stickerpack": "Add a stickerpack",
+ "Add some now": "Add some now",
"Stickerpack": "Stickerpack",
"Hide Stickers": "Hide Stickers",
"Show Stickers": "Show Stickers",
"Scroll to unread messages": "Scroll to unread messages",
"Jump to first unread message.": "Jump to first unread message.",
- "Close": "Close",
+ "Invalid alias format": "Invalid alias format",
+ "'%(alias)s' is not a valid format for an alias": "'%(alias)s' is not a valid format for an alias",
+ "Invalid address format": "Invalid address format",
+ "'%(alias)s' is not a valid format for an address": "'%(alias)s' is not a valid format for an address",
+ "not specified": "not specified",
+ "not set": "not set",
+ "Remote addresses for this room:": "Remote addresses for this room:",
+ "Addresses": "Addresses",
+ "The main address for this room is": "The main address for this room is",
+ "Local addresses for this room:": "Local addresses for this room:",
+ "This room has no local addresses": "This room has no local addresses",
+ "New address (e.g. #foo:%(localDomain)s)": "New address (e.g. #foo:%(localDomain)s)",
+ "Invalid community ID": "Invalid community ID",
+ "'%(groupId)s' is not a valid community ID": "'%(groupId)s' is not a valid community ID",
+ "Flair": "Flair",
+ "Showing flair for these communities:": "Showing flair for these communities:",
+ "This room is not showing flair for any communities": "This room is not showing flair for any communities",
+ "New community ID (e.g. +foo:%(localDomain)s)": "New community ID (e.g. +foo:%(localDomain)s)",
+ "You have enabled URL previews by default.": "You have enabled URL previews by default.",
+ "You have disabled URL previews by default.": "You have disabled URL previews by default.",
+ "URL previews are enabled by default for participants in this room.": "URL previews are enabled by default for participants in this room.",
+ "URL previews are disabled by default for participants in this room.": "URL previews are disabled by default for participants in this room.",
+ "In encrypted rooms, like this one, URL previews are disabled by default to ensure that your homeserver (where the previews are generated) cannot gather information about links you see in this room.": "In encrypted rooms, like this one, URL previews are disabled by default to ensure that your homeserver (where the previews are generated) cannot gather information about links you see in this room.",
+ "URL Previews": "URL Previews",
+ "When someone puts a URL in their message, a URL preview can be shown to give more information about that link such as the title, description, and an image from the website.": "When someone puts a URL in their message, a URL preview can be shown to give more information about that link such as the title, description, and an image from the website.",
"Sunday": "Sunday",
"Monday": "Monday",
"Tuesday": "Tuesday",
@@ -635,14 +661,14 @@
"Message removed": "Message removed",
"Robot check is currently unavailable on desktop - please use a web browser": "Robot check is currently unavailable on desktop - please use a web browser",
"This Home Server would like to make sure you are not a robot": "This Home Server would like to make sure you are not a robot",
- "Sign in with CAS": "Sign in with CAS",
"Custom Server Options": "Custom Server Options",
"You can use the custom server options to sign into other Matrix servers by specifying a different Home server URL.": "You can use the custom server options to sign into other Matrix servers by specifying a different Home server URL.",
"This allows you to use this app with an existing Matrix account on a different home server.": "This allows you to use this app with an existing Matrix account on a different home server.",
"You can also set a custom identity server but this will typically prevent interaction with users based on email address.": "You can also set a custom identity server but this will typically prevent interaction with users based on email address.",
- "Dismiss": "Dismiss",
"To continue, please enter your password.": "To continue, please enter your password.",
"Password:": "Password:",
+ "Please review and accept all of the homeserver's policies": "Please review and accept all of the homeserver's policies",
+ "Please review and accept the policies of this homeserver:": "Please review and accept the policies of this homeserver:",
"An email has been sent to %(emailAddress)s": "An email has been sent to %(emailAddress)s",
"Please check your email to continue registration.": "Please check your email to continue registration.",
"Token incorrect": "Token incorrect",
@@ -733,7 +759,6 @@
"Unblacklist": "Unblacklist",
"Blacklist": "Blacklist",
"Unverify": "Unverify",
- "Verify...": "Verify...",
"No results": "No results",
"Delete": "Delete",
"Communities": "Communities",
@@ -845,6 +870,11 @@
"Advanced options": "Advanced options",
"Block users on other matrix homeservers from joining this room": "Block users on other matrix homeservers from joining this room",
"This setting cannot be changed later!": "This setting cannot be changed later!",
+ "Sign out": "Sign out",
+ "To avoid losing your chat history, you must export your room keys before logging out. You will need to go back to the newer version of Riot to do this": "To avoid losing your chat history, you must export your room keys before logging out. You will need to go back to the newer version of Riot to do this",
+ "You've previously used a newer version of Riot on %(host)s. To use this version again with end to end encryption, you will need to sign out and back in again. ": "You've previously used a newer version of Riot on %(host)s. To use this version again with end to end encryption, you will need to sign out and back in again. ",
+ "Incompatible Database": "Incompatible Database",
+ "Continue With Encryption Disabled": "Continue With Encryption Disabled",
"Failed to indicate account erasure": "Failed to indicate account erasure",
"Unknown error": "Unknown error",
"Incorrect password": "Incorrect password",
@@ -884,6 +914,10 @@
"Ignore request": "Ignore request",
"Loading device info...": "Loading device info...",
"Encryption key request": "Encryption key request",
+ "You've previously used Riot on %(host)s with lazy loading of members enabled. In this version lazy loading is disabled. As the local cache is not compatible between these two settings, Riot needs to resync your account.": "You've previously used Riot on %(host)s with lazy loading of members enabled. In this version lazy loading is disabled. As the local cache is not compatible between these two settings, Riot needs to resync your account.",
+ "If the other version of Riot is still open in another tab, please close it as using Riot on the same host with both lazy loading enabled and disabled simultaneously will cause issues.": "If the other version of Riot is still open in another tab, please close it as using Riot on the same host with both lazy loading enabled and disabled simultaneously will cause issues.",
+ "Incompatible local cache": "Incompatible local cache",
+ "Clear cache and resync": "Clear cache and resync",
"Riot now uses 3-5x less memory, by only loading information about other users when needed. Please wait whilst we resynchronise with the server!": "Riot now uses 3-5x less memory, by only loading information about other users when needed. Please wait whilst we resynchronise with the server!",
"Updating Riot": "Updating Riot",
"Failed to upgrade room": "Failed to upgrade room",
@@ -895,7 +929,6 @@
"Update any local room aliases to point to the new room": "Update any local room aliases to point to the new room",
"Stop users from speaking in the old version of the room, and post a message advising users to move to the new room": "Stop users from speaking in the old version of the room, and post a message advising users to move to the new room",
"Put a link back to the old room at the start of the new room so people can see old messages": "Put a link back to the old room at the start of the new room so people can see old messages",
- "Sign out": "Sign out",
"Log out and remove encryption keys?": "Log out and remove encryption keys?",
"Clear Storage and Sign Out": "Clear Storage and Sign Out",
"Send Logs": "Send Logs",
@@ -940,6 +973,55 @@
"Room contains unknown devices": "Room contains unknown devices",
"\"%(RoomName)s\" contains devices that you haven't seen before.": "\"%(RoomName)s\" contains devices that you haven't seen before.",
"Unknown devices": "Unknown devices",
+ "Secure your encrypted message history with a Recovery Passphrase.": "Secure your encrypted message history with a Recovery Passphrase.",
+ "You'll need it if you log out or lose access to this device.": "You'll need it if you log out or lose access to this device.",
+ "Enter a passphrase...": "Enter a passphrase...",
+ "Next": "Next",
+ "If you don't want encrypted message history to be availble on other devices, .": "If you don't want encrypted message history to be availble on other devices, .",
+ "Or, if you don't want to create a Recovery Passphrase, skip this step and .": "Or, if you don't want to create a Recovery Passphrase, skip this step and .",
+ "That matches!": "That matches!",
+ "That doesn't match.": "That doesn't match.",
+ "Go back to set it again.": "Go back to set it again.",
+ "Type in your Recovery Passphrase to confirm you remember it. If it helps, add it to your password manager or store it somewhere safe.": "Type in your Recovery Passphrase to confirm you remember it. If it helps, add it to your password manager or store it somewhere safe.",
+ "Repeat your passphrase...": "Repeat your passphrase...",
+ "Make a copy of this Recovery Key and keep it safe.": "Make a copy of this Recovery Key and keep it safe.",
+ "As a safety net, you can use it to restore your encrypted message history if you forget your Recovery Passphrase.": "As a safety net, you can use it to restore your encrypted message history if you forget your Recovery Passphrase.",
+ "Your Recovery Key": "Your Recovery Key",
+ "Copy to clipboard": "Copy to clipboard",
+ "Download": "Download",
+ "I've made a copy": "I've made a copy",
+ "Your Recovery Key has been copied to your clipboard, paste it to:": "Your Recovery Key has been copied to your clipboard, paste it to:",
+ "Your Recovery Key is in your Downloads folder.": "Your Recovery Key is in your Downloads folder.",
+ "Print it and store it somewhere safe": "Print it and store it somewhere safe",
+ "Save it on a USB key or backup drive": "Save it on a USB key or backup drive",
+ "Copy it to your personal cloud storage": "Copy it to your personal cloud storage",
+ "Got it": "Got it",
+ "Backup created": "Backup created",
+ "Your encryption keys are now being backed up to your Homeserver.": "Your encryption keys are now being backed up to your Homeserver.",
+ "Without setting up Secure Message Recovery, you won't be able to restore your encrypted message history if you log out or use another device.": "Without setting up Secure Message Recovery, you won't be able to restore your encrypted message history if you log out or use another device.",
+ "Set up Secure Message Recovery": "Set up Secure Message Recovery",
+ "Create a Recovery Passphrase": "Create a Recovery Passphrase",
+ "Confirm Recovery Passphrase": "Confirm Recovery Passphrase",
+ "Recovery Key": "Recovery Key",
+ "Keep it safe": "Keep it safe",
+ "Backing up...": "Backing up...",
+ "Create Key Backup": "Create Key Backup",
+ "Unable to create key backup": "Unable to create key backup",
+ "Retry": "Retry",
+ "Unable to load backup status": "Unable to load backup status",
+ "Unable to restore backup": "Unable to restore backup",
+ "No backup found!": "No backup found!",
+ "Backup Restored": "Backup Restored",
+ "Failed to decrypt %(failedCount)s sessions!": "Failed to decrypt %(failedCount)s sessions!",
+ "Restored %(sessionCount)s session keys": "Restored %(sessionCount)s session keys",
+ "Enter Recovery Passphrase": "Enter Recovery Passphrase",
+ "Access your secure message history and set up secure messaging by entering your recovery passphrase.": "Access your secure message history and set up secure messaging by entering your recovery passphrase.",
+ "If you've forgotten your recovery passphrase you can use your recovery key or set up new recovery options": "If you've forgotten your recovery passphrase you can use your recovery key or set up new recovery options",
+ "Enter Recovery Key": "Enter Recovery Key",
+ "This looks like a valid recovery key!": "This looks like a valid recovery key!",
+ "Not a valid recovery key": "Not a valid recovery key",
+ "Access your secure message history and set up secure messaging by entering your recovery key.": "Access your secure message history and set up secure messaging by entering your recovery key.",
+ "If you've forgotten your recovery passphrase you can ": "If you've forgotten your recovery passphrase you can ",
"Private Chat": "Private Chat",
"Public Chat": "Public Chat",
"Custom": "Custom",
@@ -984,7 +1066,7 @@
"You must register to use this functionality": "You must register to use this functionality",
"You must join the room to see its files": "You must join the room to see its files",
"There are no visible files in this room": "There are no visible files in this room",
- "
HTML for your community's page
\r\n
\r\n Use the long description to introduce new members to the community, or distribute\r\n some important links\r\n
\r\n
\r\n You can even use 'img' tags\r\n
\r\n": "
HTML for your community's page
\r\n
\r\n Use the long description to introduce new members to the community, or distribute\r\n some important links\r\n
\r\n
\r\n You can even use 'img' tags\r\n
\r\n",
+ "
HTML for your community's page
\n
\n Use the long description to introduce new members to the community, or distribute\n some important links\n
\n
\n You can even use 'img' tags\n
\n": "
HTML for your community's page
\n
\n Use the long description to introduce new members to the community, or distribute\n some important links\n
\n
\n You can even use 'img' tags\n
\n",
"Add rooms to the community summary": "Add rooms to the community summary",
"Which rooms would you like to add to this summary?": "Which rooms would you like to add to this summary?",
"Add to summary": "Add to summary",
@@ -1002,6 +1084,7 @@
"Failed to update community": "Failed to update community",
"Unable to accept invite": "Unable to accept invite",
"Unable to join community": "Unable to join community",
+ "You are an administrator of this community. You will not be able to rejoin without an invite from another administrator.": "You are an administrator of this community. You will not be able to rejoin without an invite from another administrator.",
"Leave Community": "Leave Community",
"Leave %(groupName)s?": "Leave %(groupName)s?",
"Unable to leave community": "Unable to leave community",
@@ -1025,6 +1108,8 @@
"This Home server does not support communities": "This Home server does not support communities",
"Failed to load %(groupId)s": "Failed to load %(groupId)s",
"Couldn't load home page": "Couldn't load home page",
+ "You are currently using Riot anonymously as a guest.": "You are currently using Riot anonymously as a guest.",
+ "If you would like to create a Matrix account you can register now.": "If you would like to create a Matrix account you can register now.",
"Login": "Login",
"Failed to reject invitation": "Failed to reject invitation",
"This room is not public. You will not be able to rejoin without an invite.": "This room is not public. You will not be able to rejoin without an invite.",
@@ -1133,6 +1218,7 @@
"Autocomplete Delay (ms):": "Autocomplete Delay (ms):",
"": "",
"Import E2E room keys": "Import E2E room keys",
+ "Key Backup": "Key Backup",
"Cryptography": "Cryptography",
"Device ID:": "Device ID:",
"Device key:": "Device key:",
@@ -1202,11 +1288,15 @@
"Incorrect username and/or password.": "Incorrect username and/or password.",
"Please note you are logging into the %(hs)s server, not matrix.org.": "Please note you are logging into the %(hs)s server, not matrix.org.",
"Guest access is disabled on this Home Server.": "Guest access is disabled on this Home Server.",
+ "Failed to perform homeserver discovery": "Failed to perform homeserver discovery",
"The phone number entered looks invalid": "The phone number entered looks invalid",
+ "Invalid homeserver discovery response": "Invalid homeserver discovery response",
+ "Cannot find homeserver": "Cannot find homeserver",
"This homeserver doesn't offer any login flows which are supported by this client.": "This homeserver doesn't offer any login flows which are supported by this client.",
"Error: Problem communicating with the given homeserver.": "Error: Problem communicating with the given homeserver.",
"Can't connect to homeserver via HTTP when an HTTPS URL is in your browser bar. Either use HTTPS or enable unsafe scripts.": "Can't connect to homeserver via HTTP when an HTTPS URL is in your browser bar. Either use HTTPS or enable unsafe scripts.",
"Can't connect to homeserver - please check your connectivity, ensure your homeserver's SSL certificate is trusted, and that a browser extension is not blocking requests.": "Can't connect to homeserver - please check your connectivity, ensure your homeserver's SSL certificate is trusted, and that a browser extension is not blocking requests.",
+ "Sign in with single sign-on": "Sign in with single sign-on",
"Try the app first": "Try the app first",
"Sign in to get started": "Sign in to get started",
"Failed to fetch avatar URL": "Failed to fetch avatar URL",
diff --git a/src/i18n/strings/en_US.json b/src/i18n/strings/en_US.json
index 6f0708f0c2..aa7140aaa8 100644
--- a/src/i18n/strings/en_US.json
+++ b/src/i18n/strings/en_US.json
@@ -567,7 +567,7 @@
"Active call (%(roomName)s)": "Active call (%(roomName)s)",
"Accept": "Accept",
"Add": "Add",
- "Admin Tools": "Admin tools",
+ "Admin Tools": "Admin Tools",
"Alias (optional)": "Alias (optional)",
"Can't connect to homeserver - please check your connectivity, ensure your homeserver's SSL certificate is trusted, and that a browser extension is not blocking requests.": "Can't connect to homeserver - please check your connectivity, ensure your homeserver's SSL certificate is trusted, and that a browser extension is not blocking requests.",
"Click here to join the discussion!": "Click here to join the discussion!",
@@ -644,7 +644,9 @@
"Username not available": "Username not available",
"Something went wrong!": "Something went wrong!",
"This will be your account name on the homeserver, or you can pick a different server.": "This will be your account name on the homeserver, or you can pick a different server.",
+ "If you would like to create a Matrix account you can register now.": "If you would like to create a Matrix account you can register now.",
"If you already have a Matrix account you can log in instead.": "If you already have a Matrix account you can log in instead.",
+ "You are currently using Riot anonymously as a guest.": "You are currently using Riot anonymously as a guest.",
"Your browser does not support the required cryptography extensions": "Your browser does not support the required cryptography extensions",
"Not a valid Riot keyfile": "Not a valid Riot keyfile",
"Authentication check failed: incorrect password?": "Authentication check failed: incorrect password?",
@@ -828,5 +830,55 @@
"Collapse panel": "Collapse panel",
"With your current browser, the look and feel of the application may be completely incorrect, and some or all features may not function. If you want to try it anyway you can continue, but you are on your own in terms of any issues you may encounter!": "With your current browser, the look and feel of the application may be completely incorrect, and some or all features may not function. If you want to try it anyway you can continue, but you are on your own in terms of any issues you may encounter!",
"Checking for an update...": "Checking for an update...",
- "There are advanced notifications which are not shown here": "There are advanced notifications which are not shown here"
+ "There are advanced notifications which are not shown here": "There are advanced notifications which are not shown here",
+ "The platform you're on": "The platform you're on",
+ "The version of Riot.im": "The version of Riot.im",
+ "Whether or not you're logged in (we don't record your user name)": "Whether or not you're logged in (we don't record your user name)",
+ "Your language of choice": "Your language of choice",
+ "Which officially provided instance you are using, if any": "Which officially provided instance you are using, if any",
+ "Whether or not you're using the Richtext mode of the Rich Text Editor": "Whether or not you're using the Richtext mode of the Rich Text Editor",
+ "Your homeserver's URL": "Your homeserver's URL",
+ "Your identity server's URL": "Your identity server's URL",
+ "e.g. %(exampleValue)s": "e.g. %(exampleValue)s",
+ "Every page you use in the app": "Every page you use in the app",
+ "e.g. ": "e.g. ",
+ "Your User Agent": "Your User Agent",
+ "Your device resolution": "Your device resolution",
+ "The information being sent to us to help make Riot.im better includes:": "The information being sent to us to help make Riot.im better includes:",
+ "Where this page includes identifiable information, such as a room, user or group ID, that data is removed before being sent to the server.": "Where this page includes identifiable information, such as a room, user or group ID, that data is removed before being sent to the server.",
+ "Call Failed": "Call Failed",
+ "There are unknown devices in this room: if you proceed without verifying them, it will be possible for someone to eavesdrop on your call.": "There are unknown devices in this room: if you proceed without verifying them, it will be possible for someone to eavesdrop on your call.",
+ "Review Devices": "Review Devices",
+ "Call Anyway": "Call Anyway",
+ "Answer Anyway": "Answer Anyway",
+ "Call": "Call",
+ "Answer": "Answer",
+ "A conference call could not be started because the intgrations server is not available": "A conference call could not be started because the integrations server is not available",
+ "Call in Progress": "Call in Progress",
+ "A call is currently being placed!": "A call is currently being placed!",
+ "A call is already in progress!": "A call is already in progress!",
+ "Permission Required": "Permission Required",
+ "You do not have permission to start a conference call in this room": "You do not have permission to start a conference call in this room",
+ "%(weekDayName)s, %(monthName)s %(day)s %(fullYear)s": "%(weekDayName)s, %(monthName)s %(day)s %(fullYear)s",
+ "Who would you like to add to this community?": "Who would you like to add to this community?",
+ "Warning: any person you add to a community will be publicly visible to anyone who knows the community ID": "Warning: any person you add to a community will be publicly visible to anyone who knows the community ID",
+ "Invite new community members": "Invite new community members",
+ "Name or matrix ID": "Name or matrix ID",
+ "Invite to Community": "Invite to Community",
+ "Which rooms would you like to add to this community?": "Which rooms would you like to add to this community?",
+ "Show these rooms to non-members on the community page and room list?": "Show these rooms to non-members on the community page and room list?",
+ "Add rooms to the community": "Add rooms to the community",
+ "Room name or alias": "Room name or alias",
+ "Add to community": "Add to community",
+ "Failed to invite the following users to %(groupId)s:": "Failed to invite the following users to %(groupId)s:",
+ "Failed to invite users to community": "Failed to invite users to community",
+ "Failed to invite users to %(groupId)s": "Failed to invite users to %(groupId)s",
+ "Failed to add the following rooms to %(groupId)s:": "Failed to add the following rooms to %(groupId)s:",
+ "Registration Required": "Registration Required",
+ "You need to register to do this. Would you like to register now?": "You need to register to do this. Would you like to register now?",
+ "Restricted": "Restricted",
+ "Missing roomId.": "Missing roomId.",
+ "Opens the Developer Tools dialog": "Opens the Developer Tools dialog",
+ "Forces the current outbound group session in an encrypted room to be discarded": "Forces the current outbound group session in an encrypted room to be discarded",
+ "%(oldDisplayName)s changed their display name to %(displayName)s.": "%(oldDisplayName)s changed their display name to %(displayName)s."
}
diff --git a/src/i18n/strings/eo.json b/src/i18n/strings/eo.json
index 74cd5b255f..aad2c0de8e 100644
--- a/src/i18n/strings/eo.json
+++ b/src/i18n/strings/eo.json
@@ -251,7 +251,7 @@
"Encrypted by a verified device": "Ĉifrita de kontrolita aparato",
"Encrypted by an unverified device": "Ĉifrita de nekontrolita aparato",
"Unencrypted message": "Neĉifrita mesaĝo",
- "Please select the destination room for this message": "Bonvolu elekti celan ĉambron por ĉi tiu mesaĝo",
+ "Please select the destination room for this message": "Bonvolu elekti celan babilejon por tiu mesaĝo",
"Blacklisted": "Senpova legi ĉifritajn mesaĝojn",
"Verified": "Kontrolita",
"Unverified": "Nekontrolita",
@@ -292,19 +292,19 @@
"and %(count)s others...|other": "kaj %(count)s aliaj…",
"and %(count)s others...|one": "kaj unu alia…",
"Invited": "Invititaj",
- "Filter room members": "Filtri ĉambranojn",
+ "Filter room members": "Filtri babilejanojn",
"%(userName)s (power %(powerLevelNumber)s)": "%(userName)s (potenco je %(powerLevelNumber)s)",
"Attachment": "Kunsendaĵo",
"Upload Files": "Alŝuti dosierojn",
"Are you sure you want to upload the following files?": "Ĉu vi certe volas alŝuti la jenajn dosierojn?",
- "Encrypted room": "Ĉifrita ĉambro",
- "Unencrypted room": "Neĉifrita ĉambro",
+ "Encrypted room": "Ĉifrita babilejo",
+ "Unencrypted room": "Neĉifrita babilejo",
"Hangup": "Fini vokon",
"Voice call": "Voĉvoko",
"Video call": "Vidvoko",
"Upload file": "Alŝuti dosieron",
"Show Text Formatting Toolbar": "Montri tekstaranĝan breton",
- "You do not have permission to post to this room": "Mankas al vi permeso afiŝi en la ĉambro",
+ "You do not have permission to post to this room": "Mankas al vi permeso afiŝi en tiu babilejo",
"Turn Markdown on": "Ŝalti Marksubon",
"Turn Markdown off": "Malŝalti Marksubon",
"Hide Text Formatting Toolbar": "Kaŝi tekstaranĝan breton",
@@ -339,7 +339,7 @@
"Offline": "Eksterreta",
"Unknown": "Nekonata",
"Seen by %(userName)s at %(dateTime)s": "Vidita de %(userName)s je %(dateTime)s",
- "Unnamed room": "Sennoma ĉambro",
+ "Unnamed room": "Sennoma babilejo",
"World readable": "Legebla de ĉiuj",
"Guests can join": "Gastoj povas aliĝi",
"No rooms to show": "Neniuj ĉambroj montreblas",
@@ -347,11 +347,11 @@
"Save": "Konservi",
"(~%(count)s results)|other": "(~%(count)s rezultoj)",
"(~%(count)s results)|one": "(~%(count)s rezulto)",
- "Join Room": "Aliĝi al ĉambro",
+ "Join Room": "Aliĝi al Babilejo",
"Upload avatar": "Alŝuti profilbildon",
"Remove avatar": "Forigi profilbildon",
"Settings": "Agordoj",
- "Forget room": "Forgesi ĉambron",
+ "Forget room": "Forgesi babilejon",
"Search": "Serĉi",
"Show panel": "Montri panelon",
"Drop here to favourite": "Demetu tien ĉi por ŝati",
@@ -360,7 +360,7 @@
"Drop here to demote": "Demeti tien ĉi por malpligravigi",
"Drop here to tag %(section)s": "Demeti tien ĉi por marki %(section)s",
"Press to start a chat with someone": "Premu por komenci babilon kun iu",
- "You're not in any rooms yet! Press to make a room or to browse the directory": "Vi ankoraŭ estas en neniu ĉambro! Premu por krei ĉambron aŭ por esplori la ĉambrujon",
+ "You're not in any rooms yet! Press to make a room or to browse the directory": "Vi ankoraŭ estas en neniuj Babilejoj! Premu por krei Babilejon aŭ por esplori la Babilejujon",
"Community Invites": "Komunumaj invitoj",
"Invites": "Invitoj",
"Favourites": "Ŝatataj",
@@ -371,19 +371,19 @@
"Unable to ascertain that the address this invite was sent to matches one associated with your account.": "Ne certigeblas, ke la adreso, kien ĉi tiu invito sendiĝis, kongruas kun tiu rilata al via konto.",
"This invitation was sent to an email address which is not associated with this account:": "Ĉi tiu invito sendiĝis al retpoŝtadreso, kiu ne rilatas al ĉi tiu konto:",
"You may wish to login with a different account, or add this email to this account.": "Vi povas saluti per alia konto, aŭ aldoni ĉi tiun retpoŝtadreson al tiu ĉi konto.",
- "You have been invited to join this room by %(inviterName)s": "%(inviterName)s vin invitis al ĉi tiu ĉambro",
+ "You have been invited to join this room by %(inviterName)s": "%(inviterName)s vin invitis al ĉi tiu babilejo",
"Would you like to accept or decline this invitation?": "Ĉu vi volas akcepti aŭ rifuzi ĉi tiun inviton?",
"Reason: %(reasonText)s": "Kialo: %(reasonText)s",
"Rejoin": "Realiĝi",
"You have been kicked from %(roomName)s by %(userName)s.": "%(userName)s vin forpelis de %(roomName)s.",
- "You have been kicked from this room by %(userName)s.": "%(userName)s vin forpelis de tiu ĉi ĉambro.",
+ "You have been kicked from this room by %(userName)s.": "%(userName)s vin forpelis de tiu babilejo.",
"You have been banned from %(roomName)s by %(userName)s.": "%(userName)s vi forbaris de %(roomName)s.",
- "You have been banned from this room by %(userName)s.": "%(userName)s vin forbaris de tiu ĉi ĉambro.",
- "This room": "Ĉi tiu ĉambro",
+ "You have been banned from this room by %(userName)s.": "%(userName)s vin forbaris de tiu babilejo.",
+ "This room": "Ĉi tiu babilejo",
"%(roomName)s does not exist.": "%(roomName)s ne ekzistas.",
"%(roomName)s is not accessible at this time.": "%(roomName)s ne estas atingebla nun.",
"You are trying to access %(roomName)s.": "Vi provas atingi %(roomName)s.",
- "You are trying to access a room.": "Vi provas atingi ĉambron.",
+ "You are trying to access a room.": "Vi provas aliri babilejon.",
"Click here to join the discussion!": "Klaku ĉi tie por aliĝi al la diskuto!",
"This is a preview of this room. Room interactions have been disabled": "Tio ĉi estas antaŭrigardo al la ĉambro. Ĉambraj interagoj estas malŝaltitaj",
"To change the room's avatar, you must be a": "Por ŝanĝi la ĉambran profilbildon, vi devas esti",
@@ -419,7 +419,7 @@
"To link to a room it must have an address.": "Por esti ligebla, ĉambro devas havi adreson.",
"Guests cannot join this room even if explicitly invited.": "Gastoj ne povas aliĝi ĉi tiun ĉambron eĉ kun malimplica invito.",
"Click here to fix": "Klaku ĉi tie por riparo",
- "Who can access this room?": "Kiu povas atingi ĉi tiun ĉambron?",
+ "Who can access this room?": "Kiu povas aliri ĉi tiun ĉambron?",
"Only people who have been invited": "Nur invititaj uzantoj",
"Anyone who knows the room's link, apart from guests": "Iu ajn kun la ligilo, krom gastoj",
"Anyone who knows the room's link, including guests": "Iu ajn kun la ligilo, inkluzive gastojn",
@@ -453,17 +453,17 @@
"not set": "neagordita",
"Remote addresses for this room:": "Foraj adresoj de ĉi tiu ĉambro:",
"Addresses": "Adresoj",
- "The main address for this room is": "La ĉefadreso por ĉi tiu ĉambro estas",
- "Local addresses for this room:": "Lokaj adresoj por ĉi tiu ĉambro:",
- "This room has no local addresses": "Ĉi tiu ĉambro ne havas lokajn adresojn",
+ "The main address for this room is": "La ĉefadreso por ĉi tiu babilejo estas",
+ "Local addresses for this room:": "Lokaj adresoj por ĉi tiu babilejo:",
+ "This room has no local addresses": "Ĉi tiu babilejo ne havas lokajn adresojn",
"New address (e.g. #foo:%(localDomain)s)": "Nova adreso (ekz-e #io:%(localDomain)s)",
"Invalid community ID": "Malvalida komunuma identigaĵo",
"'%(groupId)s' is not a valid community ID": "‹%(groupId)s› ne estas valida komunuma identigaĵo",
"New community ID (e.g. +foo:%(localDomain)s)": "Nova komunuma identigaĵo (ekz-e +io:%(localDomain)s)",
"You have enabled URL previews by default.": "Vi ŝaltis implicitajn antaŭrigardojn al retpaĝoj.",
"You have disabled URL previews by default.": "Vi malŝaltis implicitajn antaŭrigardojn al retpaĝoj.",
- "URL previews are enabled by default for participants in this room.": "Antaŭrigardoj al retpaĝoj estas implicite ŝaltitaj por ĉambranoj ĉi tie.",
- "URL previews are disabled by default for participants in this room.": "Antaŭrigardoj al retpaĝoj estas implicite malŝaltitaj por ĉambranoj ĉi tie.",
+ "URL previews are enabled by default for participants in this room.": "Antaŭrigardoj de URL-oj estas implicite ŝaltitaj por anoj de tiu ĉi babilejo.",
+ "URL previews are disabled by default for participants in this room.": "Antaŭrigardoj de URL-oj estas implicite malŝaltitaj por anoj de tiu ĉi babilejo.",
"URL Previews": "Antaŭrigardoj al retpaĝoj",
"Error decrypting audio": "Eraro malĉifrante sonon",
"Error decrypting attachment": "Eraro malĉifrante kunsendaĵon",
@@ -1110,5 +1110,19 @@
"Re-request encryption keys from your other devices.": "Redemandi ĉifroŝlosilojn el viaj aliaj aparatoj.",
"Encrypting": "Ĉifranta",
"Encrypted, not sent": "Ĉifrita, ne sendita",
- "If your other devices do not have the key for this message you will not be able to decrypt them.": "Se viaj aliaj aparatoj ne havas la ŝlosilon por ĉi tiu mesaĝo, vi ne povos malĉifri ĝin."
+ "If your other devices do not have the key for this message you will not be able to decrypt them.": "Se viaj aliaj aparatoj ne havas la ŝlosilon por ĉi tiu mesaĝo, vi ne povos malĉifri ĝin.",
+ "Permission Required": "Necesas permeso",
+ "Registration Required": "Necesas registriĝo",
+ "You need to register to do this. Would you like to register now?": "Por fari ĉi tion, vi bezonas registriĝi. Ĉu vi volas registriĝi nun?",
+ "Missing roomId.": "Mankas identigilo de la ĉambro.",
+ "%(senderName)s added %(count)s %(addedAddresses)s as addresses for this room.|other": "%(senderName)s aldonis %(addedAddresses)s kiel adresojn por la ĉambro.",
+ "%(senderName)s added %(count)s %(addedAddresses)s as addresses for this room.|one": "%(senderName)s aldonis %(addedAddresses)s kiel adreson por la ĉambro.",
+ "%(senderName)s removed %(count)s %(removedAddresses)s as addresses for this room.|other": "%(senderName)s forigis %(removedAddresses)s kiel adresojn por la ĉambro.",
+ "%(senderName)s removed %(count)s %(removedAddresses)s as addresses for this room.|one": "%(senderName)s forigis %(removedAddresses)s kiel adreson por la ĉambro.",
+ "%(senderName)s added %(addedAddresses)s and removed %(removedAddresses)s as addresses for this room.": "%(senderName)s aldonis %(addedAddresses)s kaj forigis %(removedAddresses)s kiel adresojn por la ĉambro.",
+ "%(senderName)s set the main address for this room to %(address)s.": "%(senderName)s agordis la ĉefan adreson por la ĉambro al %(address)s.",
+ "%(senderName)s removed the main address for this room.": "%(senderName)s forigis la ĉefan adreson de la ĉambro.",
+ "Please contact your service administrator to continue using the service.": "Bonvolu kontakti administranton de la servo por daŭre uzadi la servon.",
+ "Pin unread rooms to the top of the room list": "Fiksi nelegitajn ĉambrojn supre de la listo",
+ "Pin rooms I'm mentioned in to the top of the room list": "Fiksi ĉambrojn kun mencioj de mia nomo supre de la listo"
}
diff --git a/src/i18n/strings/eu.json b/src/i18n/strings/eu.json
index 96f201672d..1c9c07d305 100644
--- a/src/i18n/strings/eu.json
+++ b/src/i18n/strings/eu.json
@@ -1285,5 +1285,20 @@
"
HTML for your community's page
\r\n
\r\n Use the long description to introduce new members to the community, or distribute\r\n some important links\r\n
\r\n
\r\n You can even use 'img' tags\r\n
\r\n": "
Zure komunitatearen orriaren HTMLa
\n
\n Erabili deskripzio luzea kide berriek komunitatea ezagutu dezaten, edo eman ezagutzera esteka garrantzitsuak\n
\n
\n 'img' etiketak erabili ditzakezu ere\n
\n",
"Submit Debug Logs": "Bidali arazketa egunkariak",
"An email address is required to register on this homeserver.": "e-mail helbide bat behar da hasiera-zerbitzari honetan izena emateko.",
- "A phone number is required to register on this homeserver.": "telefono zenbaki bat behar da hasiera-zerbitzari honetan izena emateko."
+ "A phone number is required to register on this homeserver.": "telefono zenbaki bat behar da hasiera-zerbitzari honetan izena emateko.",
+ "Please accept all of the policies": "Onartu mesedez politika guztiak",
+ "Please review and accept the policies of this homeserver:": "Irakurri eta onartu hasiera zerbitzari honen politikak:",
+ "You've previously used Riot on %(host)s with lazy loading of members enabled. In this version lazy loading is disabled. As the local cache is not compatible between these two settings, Riot needs to resync your account.": "Aurretik Riot erabili duzu %(host)s zerbitzarian kideen karga alferra gaituta zenuela. Bertsio honetan karga alferra desgaituta dago. Katxe lokala bi ezarpen hauen artean bateragarria ez denez, Riotek zure kontua berriro sinkronizatu behar du.",
+ "If the other version of Riot is still open in another tab, please close it as using Riot on the same host with both lazy loading enabled and disabled simultaneously will cause issues.": "Rioten beste bertsioa oraindik beste fitxat batean irekita badago, itxi ezazu zerbitzari bera aldi berean karga alferra gaituta eta desgaituta erabiltzeak arazoak sor ditzakeelako.",
+ "Incompatible local cache": "Katxe lokal bateraezina",
+ "Clear cache and resync": "Garbitu katxea eta sinkronizatu berriro",
+ "Add some now": "Gehitu batzuk orain",
+ "Joining room...": "Gelara elkartzen...",
+ "You are an administrator of this community. You will not be able to rejoin without an invite from another administrator.": "Komunitate honen administratzailea zara. Ezin izango duzu berriro elkartu ez bazaitu beste administratzaile batek gonbidatzen.",
+ "Open Devtools": "Ireki garapen tresnak",
+ "Show developer tools": "Erakutsi garapen tresnak",
+ "Pin unread rooms to the top of the room list": "Finkatu irakurri gabeko gelak gelen zerrendaren goialdean",
+ "Pin rooms I'm mentioned in to the top of the room list": "Finkatu aipatu nauten gelak gelen zerrendaren goialdean",
+ "If you would like to create a Matrix account you can register now.": "Matrix kontu bat sortu nahi baduzu, izena eman dezakezu.",
+ "You are currently using Riot anonymously as a guest.": "Riot anonimoki gonbidatu gisa erabiltzen ari zara."
}
diff --git a/src/i18n/strings/fr.json b/src/i18n/strings/fr.json
index ede9c26656..cdb8f78931 100644
--- a/src/i18n/strings/fr.json
+++ b/src/i18n/strings/fr.json
@@ -102,7 +102,7 @@
"Devices": "Appareils",
"Devices will not yet be able to decrypt history from before they joined the room": "Les appareils ne pourront pas encore déchiffrer l'historique de messages d'avant leur arrivée sur le salon",
"Failed to join room": "Échec de l’inscription au salon",
- "Failed to kick": "Échec de l'exclusion",
+ "Failed to kick": "Échec de l'expulsion",
"Failed to leave room": "Échec du départ du salon",
"Failed to load timeline position": "Échec du chargement de la position dans l'historique",
"Failed to mute user": "Échec de la mise en sourdine de l'utilisateur",
@@ -157,9 +157,9 @@
"Join Room": "Rejoindre le salon",
"%(targetName)s joined the room.": "%(targetName)s a rejoint le salon.",
"Joins room with given alias": "Rejoint le salon avec l'alias renseigné",
- "%(senderName)s kicked %(targetName)s.": "%(senderName)s a exclu %(targetName)s.",
- "Kick": "Exclure",
- "Kicks user with given id": "Exclut l'utilisateur à partir de son identifiant",
+ "%(senderName)s kicked %(targetName)s.": "%(senderName)s a expulsé %(targetName)s.",
+ "Kick": "Expulser",
+ "Kicks user with given id": "Expulse l'utilisateur à partir de son identifiant",
"Labs": "Laboratoire",
"Leave room": "Quitter le salon",
"%(targetName)s left the room.": "%(targetName)s a quitté le salon.",
@@ -592,7 +592,7 @@
"Verified": "Vérifié",
"Would you like to accept or decline this invitation?": "Souhaitez-vous accepter ou refuser cette invitation ?",
"You have been banned from %(roomName)s by %(userName)s.": "Vous avez été banni(e) de %(roomName)s par %(userName)s.",
- "You have been kicked from %(roomName)s by %(userName)s.": "Vous avez été exclu de %(roomName)s par %(userName)s.",
+ "You have been kicked from %(roomName)s by %(userName)s.": "%(userName)s vous a expulsé de %(roomName)s.",
"You may wish to login with a different account, or add this email to this account.": "Vous souhaiteriez peut-être vous identifier avec un autre compte, ou ajouter cette e-mail à votre compte.",
"Your home server does not support device management.": "Votre serveur d'accueil ne prend pas en charge la gestion d'appareils.",
"(~%(count)s results)|one": "(~%(count)s résultat)",
@@ -637,7 +637,7 @@
"Define the power level of a user": "Définir le rang d'un utilisateur",
"Edit": "Modifier",
"Enable automatic language detection for syntax highlighting": "Activer la détection automatique de la langue pour la correction orthographique",
- "Hide join/leave messages (invites/kicks/bans unaffected)": "Masquer les messages d'arrivée/départ (n'affecte pas les invitations/exclusions/bannissements)",
+ "Hide join/leave messages (invites/kicks/bans unaffected)": "Masquer les messages d'arrivée/départ (n'affecte pas les invitations/expulsions/bannissements)",
"Revoke widget access": "Révoquer les accès du widget",
"Sets the room topic": "Défini le sujet du salon",
"To get started, please pick a username!": "Pour commencer, choisissez un nom d'utilisateur !",
@@ -719,7 +719,7 @@
"Guests can join": "Les invités peuvent rejoindre le salon",
"To invite users into the room, you must be a": "Pour inviter des utilisateurs dans le salon, vous devez être un(e)",
"To configure the room, you must be a": "Pour configurer le salon, vous devez être un(e)",
- "To kick users, you must be a": "Pour exclure des utilisateurs, vous devez être un(e)",
+ "To kick users, you must be a": "Pour expulser des utilisateurs, vous devez être",
"To ban users, you must be a": "Pour bannir des utilisateurs, vous devez être un(e)",
"To remove other users' messages, you must be a": "Pour supprimer les messages d'autres utilisateurs, vous devez être un(e)",
"To send events of type , you must be a": "Pour envoyer des évènements du type , vous devez être un",
@@ -730,14 +730,14 @@
"%(senderName)s sent a video": "%(senderName)s a envoyé une vidéo",
"%(senderName)s uploaded a file": "%(senderName)s a transféré un fichier",
"Disinvite this user?": "Désinviter l'utilisateur ?",
- "Kick this user?": "Exclure cet utilisateur ?",
+ "Kick this user?": "Expulser cet utilisateur ?",
"Unban this user?": "Révoquer le bannissement de cet utilisateur ?",
"Ban this user?": "Bannir cet utilisateur ?",
"Drop here to favourite": "Déposer ici pour mettre en favori",
"Drop here to tag direct chat": "Déposer ici pour marquer comme conversation directe",
"Drop here to restore": "Déposer ici pour restaurer",
"Drop here to demote": "Déposer ici pour rétrograder",
- "You have been kicked from this room by %(userName)s.": "Vous avez été exclu de ce salon par %(userName)s.",
+ "You have been kicked from this room by %(userName)s.": "%(userName)s vous a expulsé de ce salon.",
"You have been banned from this room by %(userName)s.": "Vous avez été banni de ce salon par %(userName)s.",
"You are trying to access a room.": "Vous essayez d'accéder à un salon.",
"Members only (since the point in time of selecting this option)": "Seulement les membres (depuis la sélection de cette option)",
@@ -798,10 +798,10 @@
"were unbanned %(count)s times|one": "ont vu leur bannissement révoqué",
"was unbanned %(count)s times|other": "a vu son bannissement révoqué %(count)s fois",
"was unbanned %(count)s times|one": "a vu son bannissement révoqué",
- "were kicked %(count)s times|other": "ont été exclus %(count)s fois",
- "were kicked %(count)s times|one": "ont été exclus",
- "was kicked %(count)s times|other": "a été exclu %(count)s fois",
- "was kicked %(count)s times|one": "a été exclu",
+ "were kicked %(count)s times|other": "ont été expulsés %(count)s fois",
+ "were kicked %(count)s times|one": "ont été expulsés",
+ "was kicked %(count)s times|other": "a été expulsé %(count)s fois",
+ "was kicked %(count)s times|one": "a été expulsé",
"%(severalUsers)schanged their name %(count)s times|other": "%(severalUsers)s ont changé de nom %(count)s fois",
"%(severalUsers)schanged their name %(count)s times|one": "%(severalUsers)s ont changé de nom",
"%(oneUser)schanged their name %(count)s times|other": "%(oneUser)s a changé de nom %(count)s fois",
@@ -1291,5 +1291,16 @@
"You've previously used Riot on %(host)s with lazy loading of members enabled. In this version lazy loading is disabled. As the local cache is not compatible between these two settings, Riot needs to resync your account.": "Vous avez utilisé auparavant Riot sur %(host)s avec le chargement différé activé. Dans cette version le chargement différé est désactivé. Comme le cache local n'est pas compatible entre ces deux réglages, Riot doit resynchroniser votre compte.",
"If the other version of Riot is still open in another tab, please close it as using Riot on the same host with both lazy loading enabled and disabled simultaneously will cause issues.": "Si l'autre version de Riot est encore ouverte dans un autre onglet, merci de le fermer car l'utilisation de Riot sur le même hôte avec le chargement différé activé et désactivé à la fois causera des problèmes.",
"Incompatible local cache": "Cache local incompatible",
- "Clear cache and resync": "Vider le cache et resynchroniser"
+ "Clear cache and resync": "Vider le cache et resynchroniser",
+ "Please accept all of the policies": "Veuillez accepter toutes les politiques",
+ "Please review and accept the policies of this homeserver:": "Veuillez lire et accepter les politiques de ce serveur d'accueil :",
+ "Add some now": "En ajouter maintenant",
+ "Joining room...": "Adhésion au salon…",
+ "You are an administrator of this community. You will not be able to rejoin without an invite from another administrator.": "Vous êtes administrateur de cette communauté. Vous ne pourrez pas revenir sans une invitation d'un autre administrateur.",
+ "Open Devtools": "Ouvrir les outils développeur",
+ "Show developer tools": "Afficher les outils de développeur",
+ "Pin unread rooms to the top of the room list": "Épingler les salons non lus en haut de la liste des salons",
+ "Pin rooms I'm mentioned in to the top of the room list": "Épingler les salons où l'on me mentionne en haut de la liste des salons",
+ "If you would like to create a Matrix account you can register now.": "Si vous souhaitez créer un compte Matrix, vous pouvez vous inscrire maintenant.",
+ "You are currently using Riot anonymously as a guest.": "Vous utilisez Riot de façon anonyme en tant qu'invité."
}
diff --git a/src/i18n/strings/hu.json b/src/i18n/strings/hu.json
index 51105ed5c5..9d0589bb17 100644
--- a/src/i18n/strings/hu.json
+++ b/src/i18n/strings/hu.json
@@ -1291,5 +1291,16 @@
"You've previously used Riot on %(host)s with lazy loading of members enabled. In this version lazy loading is disabled. As the local cache is not compatible between these two settings, Riot needs to resync your account.": "Előzőleg a szoba tagság késleltetett betöltésének engedélyével itt használtad a Riotot: %(host)s. Ebben a verzióban viszont a késleltetett betöltés nem engedélyezett. Mivel a két gyorsítótár nem kompatibilis egymással így Riotnak újra kell szinkronizálnia a fiókot.",
"If the other version of Riot is still open in another tab, please close it as using Riot on the same host with both lazy loading enabled and disabled simultaneously will cause issues.": "Ha a másik Riot verzió fut még egy másik fülön, kérlek zárd be, mivel ha ugyanott használod a Riotot bekapcsolt késleltetett betöltéssel és kikapcsolva is akkor problémák adódhatnak.",
"Incompatible local cache": "A helyi gyorsítótár nem kompatibilis ezzel a verzióval",
- "Clear cache and resync": "Gyorsítótár törlése és újraszinkronizálás"
+ "Clear cache and resync": "Gyorsítótár törlése és újraszinkronizálás",
+ "Please accept all of the policies": "Kérlek fogadd el a felhasználói feltételeket",
+ "Please review and accept the policies of this homeserver:": "Kérlek nézd át és fogadd el a Matrix szerver felhasználói feltételeit:",
+ "Add some now": "Adj hozzá párat",
+ "Joining room...": "Belépés a szobába..",
+ "You are an administrator of this community. You will not be able to rejoin without an invite from another administrator.": "Te vagy ennek a közösségnek az adminisztrátora. Egy másik adminisztrátortól kapott meghívó nélkül nem tudsz majd újra csatlakozni.",
+ "Open Devtools": "Fejlesztői eszközök megnyitása",
+ "Show developer tools": "Fejlesztői eszközök megjelenítése",
+ "Pin unread rooms to the top of the room list": "Nem olvasott üzeneteket tartalmazó szobák a szobalista elejére",
+ "Pin rooms I'm mentioned in to the top of the room list": "Megemlítéseket tartalmazó szobák a szobalista elejére",
+ "If you would like to create a Matrix account you can register now.": "Ha létre szeretnél hozni egy Matrix fiókot most regisztrálhatsz.",
+ "You are currently using Riot anonymously as a guest.": "A Riotot ismeretlen vendégként használod."
}
diff --git a/src/i18n/strings/it.json b/src/i18n/strings/it.json
index d877be6c9e..e367e8196f 100644
--- a/src/i18n/strings/it.json
+++ b/src/i18n/strings/it.json
@@ -1288,5 +1288,14 @@
"You've previously used Riot on %(host)s with lazy loading of members enabled. In this version lazy loading is disabled. As the local cache is not compatible between these two settings, Riot needs to resync your account.": "Hai usato Riot precedentemente su %(host)s con il caricamento lento dei membri attivato. In questa versione il caricamento lento è disattivato. Dato che la cache locale non è compatibile tra queste due impostazioni, Riot deve risincronizzare il tuo account.",
"If the other version of Riot is still open in another tab, please close it as using Riot on the same host with both lazy loading enabled and disabled simultaneously will cause issues.": "Se l'altra versione di Riot è ancora aperta in un'altra scheda, chiudila perchè usare Riot nello stesso host con il caricamento lento sia attivato che disattivato può causare errori.",
"Incompatible local cache": "Cache locale non compatibile",
- "Clear cache and resync": "Svuota cache e risincronizza"
+ "Clear cache and resync": "Svuota cache e risincronizza",
+ "Please accept all of the policies": "Si prega di accettare tutte le condizioni",
+ "Please review and accept the policies of this homeserver:": "Consulta ed accetta le condizioni di questo homeserver:",
+ "Pin unread rooms to the top of the room list": "Fissa le stanze non lette in cima all'elenco stanze",
+ "Pin rooms I'm mentioned in to the top of the room list": "Fissa le stanze dove sono menzionato in cima all'elenco stanze",
+ "Joining room...": "Ingresso nella stanza...",
+ "Add some now": "Aggiungine ora",
+ "You are an administrator of this community. You will not be able to rejoin without an invite from another administrator.": "Sei un amministratore di questa comunità. Non potrai rientrare senza un invito da parte di un altro amministratore.",
+ "Open Devtools": "Apri Devtools",
+ "Show developer tools": "Mostra strumenti sviluppatore"
}
diff --git a/src/i18n/strings/ja.json b/src/i18n/strings/ja.json
index 741de4b551..fb4e384819 100644
--- a/src/i18n/strings/ja.json
+++ b/src/i18n/strings/ja.json
@@ -14,7 +14,7 @@
"Encryption is enabled in this room": "この部屋の発言は暗号化されています",
"Favourite": "お気に入り",
"Favourites": "お気に入り",
- "Hide read receipts": "発言を読んでも既読状態にしない",
+ "Hide read receipts": "既読を表示しない",
"Invited": "招待中",
"%(displayName)s is typing": "%(displayName)s 文字入力中",
"%(targetName)s joined the room.": "%(targetName)s 部屋に参加しました。",
@@ -36,7 +36,7 @@
"%(count)s new messages|one": "新しい発言 %(count)s",
"%(count)s new messages|other": "新しい発言 %(count)s",
"Don't send typing notifications": "文字入力中であることを公表しない",
- "Filter room members": "参加者検索",
+ "Filter room members": "部屋メンバーの絞り込み",
"Show timestamps in 12 hour format (e.g. 2:30pm)": "発言時刻を12時間形式で表示 (例 2:30PM)",
"Upload avatar": "アイコン画像を変更",
"Upload file": "添付ファイル送信",
@@ -65,7 +65,7 @@
"Unpin Message": "メッセージの固定を外す",
"Online": "オンライン",
"unknown error code": "不明なエラーコード",
- "Failed to forget room %(errCode)s": "部屋の記憶を消すのに失敗しました %(errCode)s",
+ "Failed to forget room %(errCode)s": "部屋の履歴を消すのに失敗しました %(errCode)s",
"Register": "登録",
"Rooms": "部屋",
"Add rooms to this community": "このコミュニティに部屋を追加する",
@@ -117,7 +117,7 @@
"Failed to change settings": "設定の変更に失敗しました",
"Mentions only": "呼び掛けられた時のみ",
"Collecting app version information": "アプリのバージョン情報を収集",
- "Filter room names": "部屋名検索",
+ "Filter room names": "部屋名の絞り込み",
"Changelog": "変更履歴",
"Invite to this room": "この部屋へ招待",
"Waiting for response from server": "サーバからの応答を待っています",
@@ -125,7 +125,7 @@
"Leave": "退室",
"Enable notifications for this account": "このアカウントで通知を行う",
"Failed to update keywords": "キーワードの更新に失敗しました",
- "Enable email notifications": "電子メールでの通知を行う",
+ "Enable email notifications": "電子メール通知を有効にする",
"Directory": "部屋一覧",
"Download this file": "この添付ファイルをダウンロード",
"Failed to get public room list": "公開部屋一覧の取得に失敗しました",
@@ -176,7 +176,7 @@
"You have successfully set a password!": "パスワードの設定に成功しました!",
"Explore Room State": "部屋の状態を調べる",
"Source URL": "ソースのURL",
- "Filter results": "フィルター結果",
+ "Filter results": "絞り込み結果",
"Noisy": "音量大",
"Delete the room alias %(alias)s and remove %(name)s from the directory?": "部屋のエイリアス %(alias)s を削除し、ディレクトリから %(name)s を消去しますか?",
"This will allow you to return to your account after signing out, and sign in on other devices.": "これにより、サインアウト後にあなたのアカウントに戻る、また、他の端末でサインインすることができます。",
@@ -240,5 +240,1040 @@
"Checking for an update...": "アップデートを確認しています…",
"There are advanced notifications which are not shown here": "ここに表示されない詳細な通知があります",
"Call": "通話",
- "Answer": "応答"
+ "Answer": "応答",
+ "e.g. ": "凡例: ",
+ "Your device resolution": "端末の解像度",
+ "Where this page includes identifiable information, such as a room, user or group ID, that data is removed before being sent to the server.": "このページに部屋、ユーザー、グループIDなどの識別可能な情報が含まれている場合、そのデータはサーバーに送信される前に削除されます。",
+ "There are unknown devices in this room: if you proceed without verifying them, it will be possible for someone to eavesdrop on your call.": "この部屋には未知の端末があります。確認せずに進むと、誰かがあなたの呼び出しを盗聴する可能性があります。",
+ "Answer Anyway": "とにかく応答",
+ "Call Anyway": "とにかく通話",
+ "Call Timeout": "通話タイムアウト",
+ "The remote side failed to pick up": "相手が応答しなかった",
+ "Unable to capture screen": "画面をキャプチャできません",
+ "Existing Call": "既存の通話",
+ "You are already in a call.": "すでに通話中です。",
+ "VoIP is unsupported": "VoIPはサポートされていません",
+ "You cannot place VoIP calls in this browser.": "このブラウザにはVoIP通話はできません。",
+ "You cannot place a call with yourself.": "自分で電話をかけることはできません。",
+ "Could not connect to the integration server": "統合サーバーに接続できません",
+ "A conference call could not be started because the intgrations server is not available": "統合サーバーが使用できないため、会議通話を開始できませんでした",
+ "Call in Progress": "発信中",
+ "A call is currently being placed!": "現在発信中です!",
+ "A call is already in progress!": "既に発信しています!",
+ "Permission Required": "権限必要",
+ "You do not have permission to start a conference call in this room": "この部屋で電話会議を開始する権限がありません",
+ "The file '%(fileName)s' failed to upload": "'%(fileName)s' ファイルのアップロードに失敗しました",
+ "The file '%(fileName)s' exceeds this home server's size limit for uploads": "'%(fileName)s' ファイルは、このホームサーバーのアップロードのサイズ制限を超えています",
+ "Upload Failed": "アップロードに失敗しました",
+ "Sun": "日",
+ "Mon": "月",
+ "Tue": "火",
+ "Wed": "水",
+ "Thu": "木",
+ "Fri": "金",
+ "Sat": "土",
+ "Jan": "1月",
+ "Feb": "2月",
+ "Mar": "3月",
+ "Apr": "4月",
+ "May": "5月",
+ "Jun": "6月",
+ "Jul": "7月",
+ "Aug": "8月",
+ "Sep": "9月",
+ "Oct": "10月",
+ "Nov": "11月",
+ "Dec": "12月",
+ "PM": "午後",
+ "AM": "午前",
+ "%(weekDayName)s %(time)s": "%(weekDayName)s %(time)s",
+ "%(weekDayName)s, %(monthName)s %(day)s %(time)s": "%(monthName)s %(day)s日 %(weekDayName)s曜日 %(time)s",
+ "%(weekDayName)s, %(monthName)s %(day)s %(fullYear)s": "%(fullYear)s年 %(monthName)s %(day)s日 (%(weekDayName)s)",
+ "%(weekDayName)s, %(monthName)s %(day)s %(fullYear)s %(time)s": "%(fullYear)s年 %(monthName)s %(day)s日 %(weekDayName)s曜日 %(time)s",
+ "Who would you like to add to this community?": "このコミュニティに誰を追加しますか?",
+ "Warning: any person you add to a community will be publicly visible to anyone who knows the community ID": "警告:あなたがコミュニティに追加する人は誰でも、コミュニティIDを知っている人には公開されます",
+ "Invite new community members": "新しいコミュニティメンバーを招待する",
+ "Name or matrix ID": "名前または matrix ID",
+ "Invite to Community": "コミュニティに招待",
+ "Which rooms would you like to add to this community?": "このコミュニティに追加したい部屋はどれですか?",
+ "Show these rooms to non-members on the community page and room list?": "コミュニティページとルームリストのメンバー以外にこれらの部屋を公開しますか?",
+ "Add rooms to the community": "コミュニティに部屋を追加します",
+ "Room name or alias": "部屋名またはエイリアス",
+ "Add to community": "コミュニティに追加",
+ "Failed to invite the following users to %(groupId)s:": "次のユーザーを %(groupId)s に招待できませんでした:",
+ "Failed to invite users to community": "ユーザーをコミュニティに招待できませんでした",
+ "Failed to invite users to %(groupId)s": "ユーザーを %(groupId)s に招待できませんでした",
+ "Failed to add the following rooms to %(groupId)s:": "次の部屋を %(groupId)s に追加できませんでした:",
+ "Riot does not have permission to send you notifications - please check your browser settings": "Riotに通知を送信する権限がありません - ブラウザの設定を確認してください",
+ "Riot was not given permission to send notifications - please try again": "Riotに通知を送信する権限がありませんでした。もう一度お試しください",
+ "Unable to enable Notifications": "通知を有効にできません",
+ "This email address was not found": "このメールアドレスが見つかりませんでした",
+ "Your email address does not appear to be associated with a Matrix ID on this Homeserver.": "あなたのメールアドレスは、このホームサーバー上のマトリックスIDと関連付けられていないようです。",
+ "Registration Required": "登録が必要です",
+ "You need to register to do this. Would you like to register now?": "これを行うには登録する必要があります。 今すぐ登録しますか?",
+ "Default": "既定値",
+ "Restricted": "制限",
+ "Moderator": "仲裁者",
+ "Admin": "管理者",
+ "Start a chat": "チャットを開始する",
+ "Who would you like to communicate with?": "誰と通信しますか?",
+ "Email, name or matrix ID": "メールアドレス、名前、またはマトリックスID",
+ "Invite new room members": "新しい部屋のメンバーを招待します",
+ "Who would you like to add to this room?": "誰をこの部屋に追加しますか?",
+ "Send Invites": "招待状を送る",
+ "Failed to invite user": "ユーザーを招待できませんでした",
+ "Failed to invite": "招待できませんでした",
+ "Failed to invite the following users to the %(roomName)s room:": "次のユーザーを %(roomName)s の部屋に招待できませんでした:",
+ "You need to be logged in.": "ログインする必要があります。",
+ "You need to be able to invite users to do that.": "それをするためにユーザーを招待できる必要があります。",
+ "Unable to create widget.": "ウィジェットを作成できません。",
+ "Missing roomId.": "roomIdがありません。",
+ "Failed to send request.": "リクエストの送信に失敗しました。",
+ "This room is not recognised.": "この部屋は認識されません。",
+ "Power level must be positive integer.": "権限レベルは正の整数でなければなりません。",
+ "You are not in this room.": "この部屋のメンバーではありません。",
+ "You do not have permission to do that in this room.": "あなたはこの部屋でそれを行う許可を持っていません。",
+ "Missing room_id in request": "リクエストにroom_idがありません",
+ "Room %(roomId)s not visible": "部屋 %(roomId)s は見えません",
+ "Missing user_id in request": "リクエストにuser_idがありません",
+ "Usage": "用法",
+ "Searches DuckDuckGo for results": "DuckDuckGoを検索します",
+ "/ddg is not a command": "/ddg はコマンドではありません",
+ "To use it, just wait for autocomplete results to load and tab through them.": "それを使用するには、結果が完全にロードされるのを待ってから、Tabキーを押してください。",
+ "Changes your display nickname": "表示されるニックネームを変更",
+ "Changes colour scheme of current room": "現在の部屋のスキームを変更する",
+ "Sets the room topic": "部屋のトピックを設定",
+ "Invites user with given id to current room": "指定されたIDを持つユーザーを現在のルームに招待する",
+ "Joins room with given alias": "指定された別名で部屋に参加する",
+ "Leave room": "部屋を出る",
+ "Unrecognised room alias:": "認識されない部屋の別名:",
+ "Kicks user with given id": "与えられたIDを持つユーザーを追放する",
+ "Bans user with given id": "指定されたIDでユーザーをブロックする",
+ "Unbans user with given id": "指定されたIDでユーザーをブロック解除する",
+ "Ignores a user, hiding their messages from you": "ユーザーを無視し、自分からのメッセージを隠す",
+ "Ignored user": "無視されたユーザー",
+ "You are now ignoring %(userId)s": "%(userId)s を無視しています",
+ "Stops ignoring a user, showing their messages going forward": "ユーザー無視を止めてメッセージを表示する",
+ "Unignored user": "無記名ユーザー",
+ "You are no longer ignoring %(userId)s": "あなたはもはや %(userId)s を無視していません",
+ "Define the power level of a user": "ユーザーの権限レベルを定義",
+ "Deops user with given id": "指定されたIDのユーザーを非表示",
+ "Opens the Developer Tools dialog": "開発者ツールダイアログを開きます",
+ "Verifies a user, device, and pubkey tuple": "ユーザー、端末、および公開鍵タプルを検証します",
+ "Unknown (user, device) pair:": "不明な(ユーザー、端末) ペア:",
+ "Device already verified!": "端末はすでに確認済みです!",
+ "WARNING: Device already verified, but keys do NOT MATCH!": "警告:端末はすでに検証済みですが、キーは一致しません!",
+ "WARNING: KEY VERIFICATION FAILED! The signing key for %(userId)s and device %(deviceId)s is \"%(fprint)s\" which does not match the provided key \"%(fingerprint)s\". This could mean your communications are being intercepted!": "警告: キー確認が失敗しました! %(userId)s と端末 %(deviceId)s の署名鍵は、提供された鍵 \"%(fingerprint)s\" と一致しない \"%(fprint)s\" です。 通信が傍受されている可能性があります!",
+ "Verified key": "確認済みのキー",
+ "The signing key you provided matches the signing key you received from %(userId)s's device %(deviceId)s. Device marked as verified.": "指定した署名鍵は、%(userId)s の端末%(deviceId)s から受け取った署名鍵と一致します。端末を検証済みとしてマークしました。",
+ "Displays action": "アクションを表示",
+ "Forces the current outbound group session in an encrypted room to be discarded": "暗号化されたルーム内の現在のアウトバウンドグループセッションを強制的に破棄します",
+ "Unrecognised command:": "認識できないコマンド:",
+ "Reason": "理由",
+ "%(targetName)s accepted the invitation for %(displayName)s.": "%(targetName)s は %(displayName)s の招待を受け入れました。",
+ "%(targetName)s accepted an invitation.": "%(targetName)s は招待を受け入れました。",
+ "%(senderName)s requested a VoIP conference.": "%(senderName)s はVoIP会議を要求しました。",
+ "%(senderName)s invited %(targetName)s.": "%(senderName)s は %(targetName)s を招待しました。",
+ "%(senderName)s banned %(targetName)s.": "%(senderName)s は %(targetName)s をブロックしました。",
+ "%(oldDisplayName)s changed their display name to %(displayName)s.": "%(oldDisplayName)s は、表示名を %(displayName)s に変更しました。",
+ "%(senderName)s set their display name to %(displayName)s.": "%(senderName)s は、表示名を %(displayName)s に設定します。",
+ "%(senderName)s removed their display name (%(oldDisplayName)s).": "%(senderName)s は表示名 (%(oldDisplayName)s) を削除しました。",
+ "%(senderName)s removed their profile picture.": "%(senderName)s はプロフィール画像を削除しました。",
+ "%(senderName)s changed their profile picture.": "%(senderName)s はプロフィール画像を変更しました。",
+ "%(senderName)s set a profile picture.": "%(senderName)s はプロフィール画像を設定しました。",
+ "VoIP conference started.": "VoIP会議が開始されました。",
+ "VoIP conference finished.": "VoIP会議が終了しました。",
+ "%(targetName)s rejected the invitation.": "%(targetName)s は招待を拒否しました。",
+ "%(targetName)s left the room.": "%(targetName)s は部屋を退出しました。",
+ "%(senderName)s unbanned %(targetName)s.": "%(senderName)s は %(targetName)s をブロック解除しました。",
+ "%(senderName)s kicked %(targetName)s.": "%(senderName)s は %(targetName)s を追放しました。",
+ "%(senderName)s withdrew %(targetName)s's invitation.": "%(senderName)s は %(targetName)s の招待を撤回しました。",
+ "%(senderDisplayName)s changed the topic to \"%(topic)s\".": "%(senderDisplayName)s はトピックを \"%(topic)s\" に変更しました。",
+ "%(senderDisplayName)s removed the room name.": "%(senderDisplayName)s はルーム名を削除しました。",
+ "%(senderDisplayName)s changed the room name to %(roomName)s.": "%(senderDisplayName)s はルーム名を %(roomName)s に変更しました。",
+ "%(senderDisplayName)s sent an image.": "%(senderDisplayName)s はイメージを送信しました。",
+ "%(senderName)s added %(count)s %(addedAddresses)s as addresses for this room.|other": "%(senderName)s はこの部屋のアドレスとして %(addedAddresses)s を追加しました。",
+ "%(senderName)s added %(count)s %(addedAddresses)s as addresses for this room.|one": "%(senderName)s はこの部屋のアドレスとして %(addedAddresses)s を追加しました。",
+ "%(senderName)s removed %(count)s %(removedAddresses)s as addresses for this room.|other": "%(senderName)s はこの部屋のアドレスとして %(removedAddresses)s を削除しました。",
+ "%(senderName)s removed %(count)s %(removedAddresses)s as addresses for this room.|one": "%(senderName)s はこの部屋のアドレスとして %(removedAddresses)s を削除しました。",
+ "%(senderName)s added %(addedAddresses)s and removed %(removedAddresses)s as addresses for this room.": "%(senderName)s はこの部屋のアドレスとして %(addedAddresses)s を追加し、%(removedAddresses)s を削除しました。",
+ "%(senderName)s set the main address for this room to %(address)s.": "%(senderName)s は、この部屋の主アドレスを %(address)s に設定しました。",
+ "%(senderName)s removed the main address for this room.": "%(senderName)s はこの部屋の主アドレスを削除しました。",
+ "Someone": "誰か",
+ "(not supported by this browser)": "(このブラウザではサポートされていません)",
+ "%(senderName)s answered the call.": "%(senderName)s が応答しました。",
+ "(could not connect media)": "(メディアを接続できませんでした)",
+ "(no answer)": "(応答なし)",
+ "(unknown failure: %(reason)s)": "(不明なエラー: %(reason)s)",
+ "%(senderName)s ended the call.": "%(senderName)s は通話を終了しました。",
+ "%(senderName)s placed a %(callType)s call.": "%(senderName)s は %(callType)s 電話をかけました。",
+ "%(senderName)s sent an invitation to %(targetDisplayName)s to join the room.": "%(senderName)s は部屋に加わるよう %(targetDisplayName)s に招待状を送りました。",
+ "%(senderName)s made future room history visible to all room members, from the point they are invited.": "%(senderName)s は、部屋のメンバー全員に招待された時点からの部屋履歴を参照できるようにしました。",
+ "%(senderName)s made future room history visible to all room members, from the point they joined.": "%(senderName)s は、部屋のメンバー全員に参加した時点からの部屋履歴を参照できるようにしました。",
+ "%(senderName)s made future room history visible to all room members.": "%(senderName)s は、部屋のメンバー全員に部屋履歴を参照できるようにしました。",
+ "%(senderName)s made future room history visible to anyone.": "%(senderName)s は、部屋履歴を誰でも参照できるようにしました。",
+ "%(senderName)s made future room history visible to unknown (%(visibility)s).": "%(senderName)s は 見知らぬ (%(visibility)s) に部屋履歴を参照できるようにしました。",
+ "%(senderName)s turned on end-to-end encryption (algorithm %(algorithm)s).": "%(senderName)s はエンドツーエンドの暗号化をオンにしました (アルゴリズム %(algorithm)s)。",
+ "%(userId)s from %(fromPowerLevel)s to %(toPowerLevel)s": "%(userId)s は %(fromPowerLevel)s から %(toPowerLevel)s",
+ "%(senderName)s changed the power level of %(powerLevelDiffText)s.": "%(senderName)s は %(powerLevelDiffText)s の権限レベルを変更しました。",
+ "%(senderName)s changed the pinned messages for the room.": "%(senderName)s は、その部屋の固定メッセージを変更しました。",
+ "%(widgetName)s widget modified by %(senderName)s": "%(widgetName)s ウィジェットは %(senderName)s によって変更されました",
+ "%(widgetName)s widget added by %(senderName)s": "%(widgetName)s ウィジェットが %(senderName)s によって追加されました",
+ "%(widgetName)s widget removed by %(senderName)s": "%(widgetName)s ウィジェットが %(senderName)s によって削除されました",
+ "%(names)s and %(count)s others are typing|other": "%(names)s と 他 %(count)s 人が入力中です",
+ "%(names)s and %(count)s others are typing|one": "%(names)s ともう1人が入力中です",
+ "%(names)s and %(lastPerson)s are typing": "%(names)s と %(lastPerson)s が入力しています",
+ "Failure to create room": "部屋の作成に失敗しました",
+ "Server may be unavailable, overloaded, or you hit a bug.": "サーバーが使用できない、オーバーロードされている、またはバグが発生した可能性があります。",
+ "Send anyway": "とにかく送る",
+ "Unnamed Room": "名前のない部屋",
+ "This homeserver has hit its Monthly Active User limit.": "このホームサーバーは、月間アクティブユーザー制限を超えています。",
+ "This homeserver has exceeded one of its resource limits.": "このホームサーバーは、リソース制限の1つを超えています。",
+ "Please contact your service administrator to continue using the service.": "サービスを引き続き使用するには、サービス管理者にお問い合わせください。",
+ "Unable to connect to Homeserver. Retrying...": "ホームサーバーに接続できません。 再試行中...",
+ "Your browser does not support the required cryptography extensions": "お使いのブラウザは、必要な暗号化拡張機能をサポートしていません",
+ "Not a valid Riot keyfile": "有効なRiotキーファイルではありません",
+ "Authentication check failed: incorrect password?": "認証チェックに失敗しました: パスワードの間違い?",
+ "Sorry, your homeserver is too old to participate in this room.": "申し訳ありませんが、あなたのホームサーバーはこの部屋に参加するには古すぎます。",
+ "Please contact your homeserver administrator.": "ホームサーバー管理者に連絡してください。",
+ "Failed to join room": "部屋に参加できませんでした",
+ "Message Pinning": "メッセージ留め",
+ "Increase performance by only loading room members on first view": "最初のビューでは部屋のメンバーを読み込むだけにしてパフォーマンスを向上させる",
+ "Disable Emoji suggestions while typing": "入力中に絵文字の候補を無効にする",
+ "Hide join/leave messages (invites/kicks/bans unaffected)": "参加/退出メッセージを非表示にする (招待/追放/ブロックは影響を受けない)",
+ "Hide avatar changes": "アバター変更を隠す",
+ "Hide display name changes": "表示名の変更を表示しない",
+ "Always show encryption icons": "常に暗号化アイコンを表示する",
+ "Enable automatic language detection for syntax highlighting": "構文強調表示の自動言語検出を有効にする",
+ "Hide avatars in user and room mentions": "ユーザーや部屋でアバターを非表示にする",
+ "Disable big emoji in chat": "チャットで大きな絵文字を無効にする",
+ "Mirror local video feed": "ローカルビデオ映像送信",
+ "Disable Community Filter Panel": "コミュニティフィルタパネルを無効にする",
+ "Disable Peer-to-Peer for 1:1 calls": "1対1通話でピアツーピアを無効にする",
+ "Send analytics data": "分析データを送信する",
+ "Never send encrypted messages to unverified devices from this device": "この端末から未認証の端末に暗号化されたメッセージを送信しない",
+ "Never send encrypted messages to unverified devices in this room from this device": "この端末からこの部屋の未認証の端末に暗号化されたメッセージを送信しないでください",
+ "Enable inline URL previews by default": "デフォルトでインラインURLプレビューを有効にする",
+ "Enable URL previews for this room (only affects you)": "この部屋のURLプレビューを有効にする (あなたにのみ影響する)",
+ "Enable URL previews by default for participants in this room": "この部屋の参加者のためにデフォルトでURLプレビューを有効にする",
+ "Room Colour": "部屋の色",
+ "Enable widget screenshots on supported widgets": "サポートされているウィジェットでウィジェットのスクリーンショットを有効にする",
+ "Show empty room list headings": "空の部屋リスト見出しを表示する",
+ "Active call (%(roomName)s)": "アクティブな通話 (%(roomName)s)",
+ "unknown caller": "不明な発信者",
+ "Incoming voice call from %(name)s": "%(name)s からの着信音声コール",
+ "Incoming video call from %(name)s": "%(name)s からの着信ビデオコール",
+ "Incoming call from %(name)s": "%(name)s からの着信コール",
+ "Decline": "辞退",
+ "Accept": "受諾",
+ "A text message has been sent to +%(msisdn)s. Please enter the verification code it contains": "テキストメッセージが +%(msisdn)s に送信されました。 含まれている確認コードを入力してください",
+ "Incorrect verification code": "認証コードの誤りです",
+ "Enter Code": "コードを入力する",
+ "Submit": "提出",
+ "Phone": "電話",
+ "Add phone number": "電話番号を追加",
+ "Failed to upload profile picture!": "プロフィール写真をアップロードできませんでした!",
+ "Upload new:": "新しいアップロード:",
+ "No display name": "表示名なし",
+ "New passwords don't match": "新しいパスワードが一致しません",
+ "Passwords can't be empty": "パスワードを空にすることはできません",
+ "Warning!": "警告!",
+ "Changing password will currently reset any end-to-end encryption keys on all devices, making encrypted chat history unreadable, unless you first export your room keys and re-import them afterwards. In future this will be improved.": "パスワードを変更すると、すべての端末のエンドツーエンドの暗号化キーがリセットされ、暗号化されたチャット履歴は読み取れなくなります (最初にルームキーをエクスポートしてから再インポートする場合を除く)。 将来これは改善されるでしょう。",
+ "Export E2E room keys": "E2Eルームキーをエクスポートする",
+ "Do you want to set an email address?": "メールアドレスを設定しますか?",
+ "Password": "パスワード",
+ "Confirm password": "確認のパスワード",
+ "Your home server does not support device management.": "ホームサーバーは端末管理をサポートしていません。",
+ "Unable to load device list": "端末リストを読み込めません",
+ "Authentication": "認証",
+ "Delete %(count)s devices|other": "%(count)s 件の端末を削除する",
+ "Delete %(count)s devices|one": "端末を削除する",
+ "Device ID": "端末ID",
+ "Device Name": "端末名",
+ "Last seen": "最後のシーン",
+ "Select devices": "端末の選択",
+ "Failed to set display name": "表示名の設定に失敗しました",
+ "Disable Notifications": "通知を無効にする",
+ "Enable Notifications": "通知を有効にする",
+ "Off": "オフ",
+ "On": "オン",
+ "Cannot add any more widgets": "ウィジェットを追加できません",
+ "The maximum permitted number of widgets have already been added to this room.": "この部屋にウィジェットの最大許容数が既に追加されています。",
+ "Add a widget": "ウィジェットを追加する",
+ "Drop File Here": "ここにファイルをドロップする",
+ "Drop file here to upload": "アップロードするファイルをここにドロップする",
+ " (unsupported)": " (サポートされていない)",
+ "Join as voice or video.": "音声またはビデオとして参加してください。",
+ "Ongoing conference call%(supportedText)s.": "進行中の会議通話 %(supportedText)s",
+ "This event could not be displayed": "このイベントは表示できませんでした",
+ "%(senderName)s sent an image": "%(senderName)s が画像を送信しました",
+ "%(senderName)s sent a video": "%(senderName)s が動画を送信しました",
+ "%(senderName)s uploaded a file": "%(senderName)s がファイルをアップロードしました",
+ "Options": "オプション",
+ "Your key share request has been sent - please check your other devices for key share requests.": "共有キーリクエストが送信されました - 共有キーリクエスト用の他の端末を確認してください。",
+ "Key share requests are sent to your other devices automatically. If you rejected or dismissed the key share request on your other devices, click here to request the keys for this session again.": "共有キーリクエストは、他の端末に自動的に送信されます。 他の端末での共有キーリクエストを拒否または却下した場合は、ここをクリックしてこのセッションのキーを再度要求してください。",
+ "If your other devices do not have the key for this message you will not be able to decrypt them.": "他の端末にこのメッセージのキーがない場合、それらの端末を復号化することはできません。",
+ "Key request sent.": "キーリクエストが送信されました。",
+ "Re-request encryption keys from your other devices.": "他の端末から暗号化キーを再リクエスト requestLink>します。",
+ "Undecryptable": "解読不能",
+ "Encrypting": "暗号化",
+ "Encrypted, not sent": "暗号化され、送信されません",
+ "Encrypted by a verified device": "検証された端末によって暗号化されました",
+ "Encrypted by an unverified device": "未検証の端末によって暗号化されました",
+ "Unencrypted message": "暗号化されていないメッセージ",
+ "Please select the destination room for this message": "このメッセージを送り先部屋を選択してください",
+ "Blacklisted": "ブラックリストに載せた",
+ "Verified": "検証済み",
+ "Unverified": "未検証",
+ "device id: ": "端末id: ",
+ "Disinvite": "招待拒否",
+ "Kick": "追放する",
+ "Disinvite this user?": "このユーザーを招待拒否しますか?",
+ "Kick this user?": "このユーザーを追放しますか?",
+ "Failed to kick": "追放できませんでした",
+ "e.g. %(exampleValue)s": "例えば %(exampleValue)s",
+ "Every page you use in the app": "アプリで使用するすべてのページ",
+ "Your User Agent": "ユーザーエージェント",
+ "Call Failed": "呼び出しに失敗しました",
+ "Review Devices": "端末を確認する",
+ "Automatically replace plain text Emoji": "自動的にプレーンテキスト絵文字を置き換える",
+ "Pin unread rooms to the top of the room list": "未読の部屋を部屋リストの上部にピン止めする",
+ "Pin rooms I'm mentioned in to the top of the room list": "ルームリストの上部に記載された部屋をピン止めする",
+ "Demote yourself?": "自身を降格しますか?",
+ "You will not be able to undo this change as you are demoting yourself, if you are the last privileged user in the room it will be impossible to regain privileges.": "自分自身を降格させるときにこの変更を元に戻すことはできません。あなたが部屋の最後の特権ユーザーである場合、特権を回復することは不可能です。",
+ "Demote": "降格",
+ "Failed to mute user": "ユーザーのミュートに失敗しました",
+ "Failed to toggle moderator status": "モデレータステータスを切り替えることができませんでした",
+ "Failed to change power level": "権限レベルの変更に失敗しました",
+ "You will not be able to undo this change as you are promoting the user to have the same power level as yourself.": "この変更を元に戻すことはできません。そのユーザーが自分と同じ権限レベルを持つように促します。",
+ "No devices with registered encryption keys": "登録された暗号化キーを持つ端末はありません",
+ "Devices": "端末",
+ "Ignore": "無視",
+ "Jump to read receipt": "既読へジャンプ",
+ "Invite": "招待",
+ "Share Link to User": "ユーザーへのリンクを共有する",
+ "User Options": "ユーザーオプション",
+ "Unmute": "ミュート解除",
+ "Revoke Moderator": "モデレーターを取り消す",
+ "Make Moderator": "モデレーターにする",
+ "Admin Tools": "管理者ツール",
+ "Level:": "レベル:",
+ "and %(count)s others...|other": "そして、他 %(count)s ...",
+ "and %(count)s others...|one": "そして、もう1つ...",
+ "%(userName)s (power %(powerLevelNumber)s)": "%(userName)s (パワー %(powerLevelNumber)s)",
+ "deleted": "deleted",
+ "Attachment": "付属品",
+ "At this time it is not possible to reply with a file so this will be sent without being a reply.": "現時点ではファイルで返信することはできませんので、返信なしに送信されます。",
+ "Upload Files": "ファイルをアップロードする",
+ "Are you sure you want to upload the following files?": "次のファイルをアップロードしますか?",
+ "Encrypted room": "暗号化された部屋",
+ "Unencrypted room": "暗号化されていない部屋",
+ "Hangup": "電話を切る",
+ "Voice call": "音声通話",
+ "Video call": "ビデオ通話",
+ "Show Text Formatting Toolbar": "テキストの書式設定ツールバーを表示する",
+ "Send an encrypted reply…": "暗号化された返信を送信する…",
+ "Send a reply (unencrypted)…": "(暗号化されていない) 返信を送信する…",
+ "Send an encrypted message…": "暗号化されたメッセージを送信する…",
+ "Send a message (unencrypted)…": "(暗号化されていない) メッセージを送信する…",
+ "This room has been replaced and is no longer active.": "この部屋は交換されており、もうアクティブではありません。",
+ "The conversation continues here.": "会話はここで続けられます。",
+ "You do not have permission to post to this room": "この部屋に投稿する権限がありません",
+ "Turn Markdown off": "マークダウンをオフにする",
+ "Turn Markdown on": "マークダウンをオンにする",
+ "Hide Text Formatting Toolbar": "テキストの書式設定ツールバーを隠す",
+ "Server error": "サーバーエラー",
+ "Server unavailable, overloaded, or something else went wrong.": "サーバーが使用できない、オーバーロードされている、または何かが間違っていました。",
+ "Command error": "コマンドエラー",
+ "Unable to reply": "返信できません",
+ "At this time it is not possible to reply with an emote.": "現時点では、エモートで返信することはできません。",
+ "Markdown is disabled": "マークダウンは無効です",
+ "Markdown is enabled": "マークダウンは有効です",
+ "Jump to message": "メッセージにジャンプ",
+ "No pinned messages.": "固定メッセージはありません。",
+ "Loading...": "読み込み中...",
+ "Pinned Messages": "固定メッセージ",
+ "%(duration)ss": "%(duration)s 秒",
+ "%(duration)sm": "%(duration)s 分",
+ "%(duration)sh": "%(duration)s 時",
+ "%(duration)sd": "%(duration)s 日",
+ "Online for %(duration)s": "オンライン時間 %(duration)s",
+ "Idle for %(duration)s": "アイドル時間 %(duration)s",
+ "Offline for %(duration)s": "オフライン時間 %(duration)s",
+ "Unknown for %(duration)s": "不明な時間 %(duration)s",
+ "Idle": "アイドル",
+ "Offline": "オフライン",
+ "Unknown": "未知の",
+ "Seen by %(userName)s at %(dateTime)s": "%(dateTime)s に %(userName)s が見た",
+ "Seen by %(displayName)s (%(userName)s) at %(dateTime)s": "%(dateTime)s に %(displayName)s (%(userName)s) が見た",
+ "Replying": "返信中",
+ "Failed to set avatar.": "アバターを設定できませんでした。",
+ "Save": "保存",
+ "(~%(count)s results)|other": "(~%(count)s 結果)",
+ "(~%(count)s results)|one": "(~%(count)s 結果)",
+ "Join Room": "部屋に入る",
+ "Remove avatar": "アバターを削除",
+ "Forget room": "部屋を忘れる",
+ "Share room": "部屋を共有する",
+ "Show panel": "パネルを表示する",
+ "Drop here to favourite": "お気に入りはここにドロップする",
+ "Drop here to tag direct chat": "ダイレクトチャットにタグを付けるためにここにドロップ",
+ "Drop here to restore": "復元するにはここにドロップ",
+ "Drop here to demote": "降格するにはここにドロップ",
+ "Drop here to tag %(section)s": "%(section)s にタグを付けるにはここにドロップ",
+ "Press to start a chat with someone": "を押すと、誰かとチャットを開始します",
+ "You're not in any rooms yet! Press to make a room or to browse the directory": "あなたはまだどの部屋にもいません! を押してルームを作成するか、を押してディレクトリをブラウズします",
+ "Community Invites": "コミュニティへの招待",
+ "Invites": "招待",
+ "Unban": "ブロック解除",
+ "Ban": "ブロックする",
+ "Unban this user?": "このユーザーをブロック解除しますか?",
+ "Ban this user?": "このユーザーをブロックしますか?",
+ "Failed to ban user": "ユーザーをブロックできませんでした",
+ "System Alerts": "システムアラート",
+ "Joining room...": "部屋に入る...",
+ "Unable to ascertain that the address this invite was sent to matches one associated with your account.": "この招待状が送信されたアドレスがあなたのアカウントに関連付けられているアドレスと一致しているかどうかを確認できません。",
+ "This invitation was sent to an email address which is not associated with this account:": "この招待状はこのアカウントに関連付けられていないメールアドレスに送信されました:",
+ "You may wish to login with a different account, or add this email to this account.": "別のアカウントでログインするか、このメールをこのアカウントに追加することができます。",
+ "You have been invited to join this room by %(inviterName)s": "%(inviterName)s からこの部屋に参加するように招待されました",
+ "Would you like to accept or decline this invitation?": "この招待状を受諾または辞退しますか?",
+ "Reason: %(reasonText)s": "理由: %(reasonText)s",
+ "Rejoin": "再参加",
+ "You have been kicked from %(roomName)s by %(userName)s.": "あなたは %(userName)s により %(roomName)s から追放されました。",
+ "You have been kicked from this room by %(userName)s.": "あなたは %(userName)s によりこの部屋から追放されました。",
+ "You have been banned from %(roomName)s by %(userName)s.": "あなたは %(userName)s により %(roomName)s からブロックされました。",
+ "You have been banned from this room by %(userName)s.": "あなたは %(userName)s によってこの部屋からブロックされました。",
+ "This room": "この部屋",
+ "%(roomName)s does not exist.": "%(roomName)s は存在しません。",
+ "%(roomName)s is not accessible at this time.": "%(roomName)s は現在アクセスできません。",
+ "You are trying to access %(roomName)s.": "%(roomName)s にアクセスしようとしています。",
+ "You are trying to access a room.": "ある部屋にアクセスしようとしています。",
+ "Click here to join the discussion!": "ここをクリックしてディスカッションに参加してください!",
+ "This is a preview of this room. Room interactions have been disabled": "この部屋のプレビューです。 部屋の相互作用が無効になっています",
+ "To change the room's avatar, you must be a": "部屋のアバターを変更するのに必要な権限",
+ "To change the room's name, you must be a": "部屋の名前を変更するのに必要な権限",
+ "To change the room's main address, you must be a": "部屋の主アドレスを変更するのに必要な権限",
+ "To change the room's history visibility, you must be a": "部屋履歴の可視性を変更するのに必要な権限",
+ "To change the permissions in the room, you must be a": "部屋のパーミッションを変更するのに必要な権限",
+ "To change the topic, you must be a": "トピックを変更するのに必要な権限",
+ "To modify widgets in the room, you must be a": "部屋のウィジェットを変更するのに必要な権限",
+ "Failed to unban": "ブロック解除に失敗しました",
+ "Banned by %(displayName)s": "%(displayName)s によってブロックされました",
+ "Privacy warning": "プライバシーに関する警告",
+ "Changes to who can read history will only apply to future messages in this room": "履歴を読むことができる人への変更は、この部屋の将来のメッセージにのみ適用されます",
+ "The visibility of existing history will be unchanged": "既存の履歴の可視性は変更されません",
+ "End-to-end encryption is in beta and may not be reliable": "エンドツーエンドの暗号化はベータ版であり、信頼性がないかもしれません",
+ "You should not yet trust it to secure data": "データを保護するためにまだそれを信用すべきではありません",
+ "Devices will not yet be able to decrypt history from before they joined the room": "端末はまだ部屋に入る前の履歴を復号化することはできません",
+ "Once encryption is enabled for a room it cannot be turned off again (for now)": "部屋の暗号化が有効になったら、(今のところ) もう一度電源を切ることはできません",
+ "Encrypted messages will not be visible on clients that do not yet implement encryption": "暗号化されたメッセージは、まだ暗号化を実装していないクライアントでは表示されません",
+ "Encryption is not enabled in this room": "この部屋では暗号化が有効になっていません",
+ "The default role for new room members is": "新しい部屋メンバーの既定の役割は次のとおり",
+ "To send messages, you must be a": "メッセージを送信するのに必要な権限",
+ "To invite users into the room, you must be a": "ユーザーを会議室に招待するのに必要な権限",
+ "To configure the room, you must be a": "部屋を設定するのに必要な権限",
+ "To kick users, you must be a": "ユーザーを追放するのに必要な権限",
+ "To ban users, you must be a": "ユーザーをブロックするのに必要な権限",
+ "To remove other users' messages, you must be a": "他のユーザーのメッセージを削除するのに必要な権限",
+ "To notify everyone in the room, you must be a": "部屋の全員に通知するのに必要な権限",
+ "No users have specific privileges in this room": "この部屋には特定の権限を持つユーザーはいません",
+ "%(user)s is a %(userRole)s": "%(user)s は %(userRole)s です",
+ "Privileged Users": "特権ユーザー",
+ "Muted Users": "ミュートされたユーザー",
+ "Banned users": "ブロックされたユーザー",
+ "This room is not accessible by remote Matrix servers": "この部屋はリモートのMatrixサーバーからアクセスできない",
+ "Tagged as: ": "タグ付き: ",
+ "To link to a room it must have an address.": "部屋にリンクするにはアドレスが必要です。",
+ "Guests cannot join this room even if explicitly invited.": "ゲストは、明示的に招待された場合でもこの部屋に参加することはできません。",
+ "Click here to fix": "修正するにはここをクリック",
+ "To send events of type , you must be a": "タイプのイベントを送信するのに必要な権限",
+ "Upgrade room to version %(ver)s": "部屋をバージョン %(ver)s にアップグレードする",
+ "Who can access this room?": "誰がこの部屋にアクセスできますか?",
+ "Publish this room to the public in %(domain)s's room directory?": "%(domain)s のルームディレクトリにこの部屋を公開しますか?",
+ "Who can read history?": "誰が履歴を読むことができますか?",
+ "Members only (since the point in time of selecting this option)": "メンバーのみ (このオプションを選択した時点以降)",
+ "Members only (since they were invited)": "メンバーのみ (招待されて以来)",
+ "Members only (since they joined)": "メンバーのみ (参加して以来)",
+ "Permissions": "アクセス許可",
+ "Advanced": "詳細",
+ "Internal room ID: ": "内部の部屋ID: ",
+ "Room version number: ": "部屋のバージョン番号: ",
+ "Add a topic": "トピックを追加",
+ "There is a known vulnerability affecting this room.": "この部屋には既知の脆弱性が存在します。",
+ "This room version is vulnerable to malicious modification of room state.": "この部屋のバージョンは、部屋の状態の悪意のある変更に対して脆弱です。",
+ "Click here to upgrade to the latest room version and ensure room integrity is protected.": "最新の部屋のバージョンにアップグレードし、部屋の完全性が確保されていることを確認するには、ここをクリックしてください。",
+ "Only room administrators will see this warning": "この警告はルーム管理者のみに表示されます",
+ "You don't currently have any stickerpacks enabled": "現在、使用可能なステッカーパックはありません",
+ "Add some now": "今すぐ追加",
+ "Stickerpack": "ステッカーパック",
+ "Hide Stickers": "ステッカーを隠す",
+ "Show Stickers": "ステッカーを表示",
+ "Scroll to unread messages": "未読メッセージにスクロールする",
+ "Jump to first unread message.": "最初の未読メッセージにジャンプします。",
+ "Invalid alias format": "無効なエイリアス形式",
+ "'%(alias)s' is not a valid format for an alias": "'%(alias)s' はエイリアスの有効な形式ではありません",
+ "Invalid address format": "無効なアドレス形式",
+ "'%(alias)s' is not a valid format for an address": "'%(alias)s' は有効なアドレス形式ではありません",
+ "not specified": "指定されていない",
+ "not set": "設定されていない",
+ "Remote addresses for this room:": "この部屋のリモートアドレス:",
+ "Addresses": "アドレス",
+ "The main address for this room is": "この部屋の主アドレスは",
+ "Local addresses for this room:": "この部屋のローカルアドレス:",
+ "This room has no local addresses": "この部屋にはローカルアドレスはありません",
+ "New address (e.g. #foo:%(localDomain)s)": "新しいアドレス (例 #foo:%(localDomain)s)",
+ "Invalid community ID": "無効なコミュニティID",
+ "'%(groupId)s' is not a valid community ID": "'%(groupId)s' は有効なコミュニティIDではありません",
+ "Showing flair for these communities:": "これらのコミュニティの特色を示す:",
+ "This room is not showing flair for any communities": "この部屋はどんなコミュニティに対しても特色を表示していません",
+ "New community ID (e.g. +foo:%(localDomain)s)": "新しいコミュニティID (例 +foo:%(localDomain)s)",
+ "You have enabled URL previews by default.": "デフォルトでURLプレビューが有効です。",
+ "You have disabled URL previews by default.": "デフォルトでURLプレビューが無効です。",
+ "URL previews are enabled by default for participants in this room.": "この部屋の参加者は、デフォルトでURLプレビューが有効です。",
+ "URL previews are disabled by default for participants in this room.": "この部屋の参加者は、デフォルトでURLプレビューが無効です。",
+ "In encrypted rooms, like this one, URL previews are disabled by default to ensure that your homeserver (where the previews are generated) cannot gather information about links you see in this room.": "このような暗号化された部屋では、URLプレビューはデフォルトで無効になっており、あなたのホームサーバー(プレビューが生成された場所)がこの部屋に表示されているリンクに関する情報を収集できないようにしています。",
+ "URL Previews": "URLプレビュー",
+ "You have no historical rooms": "履歴のある部屋がありません",
+ "Historical": "履歴のある",
+ "When someone puts a URL in their message, a URL preview can be shown to give more information about that link such as the title, description, and an image from the website.": "メッセージにURLを入力すると、URLプレビューが表示され、タイトル、説明、ウェブサイトからの画像など、そのリンクに関する詳細情報が表示されます。",
+ "Error decrypting audio": "オーディオの復号化エラー",
+ "Error decrypting attachment": "添付ファイルの復号化エラー",
+ "Decrypt %(text)s": "%(text)s を解読する",
+ "Download %(text)s": "%(text)s をダウンロード",
+ "Invalid file%(extra)s": "無効なファイル %(extra)s",
+ "Error decrypting image": "イメージの復号化エラー",
+ "Error decrypting video": "動画の復号化エラー",
+ "%(senderDisplayName)s changed the avatar for %(roomName)s": "%(senderDisplayName)s が %(roomName)s のアバターを変更しました",
+ "%(senderDisplayName)s removed the room avatar.": "%(senderDisplayName)s がルームアバターを削除しました。",
+ "%(senderDisplayName)s changed the room avatar to ": "%(senderDisplayName)s はルームアバターをに変更しました",
+ "This room is a continuation of another conversation.": "この部屋は別の会話の続きです。",
+ "Click here to see older messages.": "古いメッセージを見るにはここをクリックしてください。",
+ "Copied!": "コピーされました!",
+ "Failed to copy": "コピーに失敗しました",
+ "Add an Integration": "統合を追加する",
+ "You are about to be taken to a third-party site so you can authenticate your account for use with %(integrationsUrl)s. Do you wish to continue?": "サードパーティのサイトに移動して、%(integationsUrl)s で使用するためにアカウントを認証できるようになります。続行しますか?",
+ "Removed or unknown message type": "削除されたまたは未知のメッセージタイプ",
+ "Message removed by %(userId)s": "%(userId)s によってメッセージが削除されました",
+ "Message removed": "メッセージが削除された",
+ "Robot check is currently unavailable on desktop - please use a web browser": "現在のところ、ロボットチェックはデスクトップ上ではご利用いただけません - ウェブブラウザを使用してください",
+ "This Home Server would like to make sure you are not a robot": "このHome Serverはあなたがロボットではないことを確認します",
+ "Sign in with CAS": "CASでサインインする",
+ "You can use the custom server options to sign into other Matrix servers by specifying a different Home server URL.": "カスタムサーバーオプションを使用して、別のホームサーバーURLを指定して、他のMatrixサーバーにサインインすることができます。",
+ "This allows you to use this app with an existing Matrix account on a different home server.": "これにより、別のホームサーバー上の既存のMatrixアカウントでこのアプリケーションを使用することができます。",
+ "You can also set a custom identity server but this will typically prevent interaction with users based on email address.": "カスタムアイデンティティサーバーを設定することもできますが、通常は電子メールアドレスに基づいてユーザーとのやりとりを防止します。",
+ "To continue, please enter your password.": "続行するには、パスワードを入力してください。",
+ "Password:": "パスワード:",
+ "Please review and accept the policies of this homeserver:": "このホームサーバーのポリシーを確認し、同意してください:",
+ "An email has been sent to %(emailAddress)s": "電子メールが %(emailAddress)s に送信されました",
+ "Please check your email to continue registration.": "登録を続行するにはメールをご確認ください。",
+ "Token incorrect": "間違ったトークン",
+ "A text message has been sent to %(msisdn)s": "テキストメッセージが %(msisdn)s に送信されました",
+ "Please enter the code it contains:": "それに含まれるコードを入力してください:",
+ "Code": "コード",
+ "Start authentication": "認証を開始する",
+ "The email field must not be blank.": "電子メールフィールドは空白であってはいけません。",
+ "The user name field must not be blank.": "ユーザー名フィールドは空白であってはなりません。",
+ "The phone number field must not be blank.": "電話番号フィールドは空白であってはいけません。",
+ "The password field must not be blank.": "パスワードフィールドは空白であってはいけません。",
+ "Username on %(hs)s": "%(hs)s のユーザー名",
+ "User name": "ユーザー名",
+ "Mobile phone number": "携帯電話番号",
+ "Forgot your password?": "パスワードを忘れましたか?",
+ "%(serverName)s Matrix ID": "%(serverName)s Matrix ID",
+ "Sign in with": "にログインする",
+ "Email address": "メールアドレス",
+ "Sign in": "サインイン",
+ "If you don't specify an email address, you won't be able to reset your password. Are you sure?": "メールアドレスを指定しないと、パスワードをリセットできません。間違いありませんか?",
+ "Email address (optional)": "メールアドレス (オプション)",
+ "You are registering with %(SelectedTeamName)s": "あなたは %(SelectedTeamName)s で登録しています",
+ "Mobile phone number (optional)": "携帯電話番号 (オプション)",
+ "Default server": "デフォルトサーバー",
+ "Custom server": "カスタムサーバー",
+ "Home server URL": "ホームサーバーのURL",
+ "Identity server URL": "アイデンティティ・サーバーのURL",
+ "What does this mean?": "これはどういう意味ですか?",
+ "Remove from community": "コミュニティから削除",
+ "Disinvite this user from community?": "このユーザーをコミュニティから拒否しますか?",
+ "Remove this user from community?": "コミュニティからこのユーザーを削除しますか?",
+ "Failed to withdraw invitation": "招待を撤回できませんでした",
+ "Failed to remove user from community": "コミュニティからユーザーを削除できませんでした",
+ "Filter community members": "コミュニティメンバーを絞り込む",
+ "Are you sure you want to remove '%(roomName)s' from %(groupId)s?": "%(roomName)s を %(groupId)s から削除してもよろしいですか?",
+ "Removing a room from the community will also remove it from the community page.": "コミュニティから部屋を削除すると、コミュニティページからもその部屋が削除されます。",
+ "Failed to remove room from community": "コミュニティからの部屋の削除に失敗しました",
+ "Failed to remove '%(roomName)s' from %(groupId)s": "%(groupName)s から '%(roomName)s' を削除できませんでした",
+ "Something went wrong!": "何かが間違っていた!",
+ "The visibility of '%(roomName)s' in %(groupId)s could not be updated.": "%(groupId)s の '%(roomName)s' の表示を更新できませんでした。",
+ "Visibility in Room List": "ルームリストの可視性",
+ "Visible to everyone": "みんなに見える",
+ "Only visible to community members": "コミュニティメンバーにのみ表示されます",
+ "Filter community rooms": "コミュニティルームを絞り込む",
+ "Something went wrong when trying to get your communities.": "コミュニティに参加しようとすると何かがうまくいかなかった。",
+ "Display your community flair in rooms configured to show it.": "それを表示するように構成された部屋にコミュニティの特色を表示します。",
+ "Show developer tools": "開発者ツールを表示",
+ "You're not currently a member of any communities.": "あなたは現在、どのコミュニティのメンバーでもありません。",
+ "Please help improve Riot.im by sending anonymous usage data. This will use a cookie (please see our Cookie Policy).": "匿名利用データを送信して、Riot.imの改善を支援してください。 これはCookieを使用します (クッキーポリシーをご覧ください)>。",
+ "Please help improve Riot.im by sending anonymous usage data. This will use a cookie.": "匿名利用データを送信して、Riot.imの改善を支援してください。 これはクッキーを使用します。",
+ "Yes, I want to help!": "はい、協力します!",
+ "Please contact your service administrator to get this limit increased.": "この制限を増やすには、サービス管理者にお問い合わせください。",
+ "This homeserver has hit its Monthly Active User limit so some users will not be able to log in.": "このホームサーバーは月間アクティブユーザー数の上限に達しているため、一部のユーザーはログインできません b>。",
+ "This homeserver has exceeded one of its resource limits so some users will not be able to log in.": "このホームサーバーはリソース制限の1つを超えており、一部のユーザーはログインできません。",
+ "Unknown Address": "不明な住所",
+ "NOTE: Apps are not end-to-end encrypted": "注: アプリはエンドツーエンド暗号化されていません",
+ "Warning: This widget might use cookies.": "警告: このウィジェットはCookieを使用することがあります。",
+ "Do you want to load widget from URL:": "URLからウィジェットをロードしますか:",
+ "Allow": "許可",
+ "Delete Widget": "ウィジェットを削除",
+ "Deleting a widget removes it for all users in this room. Are you sure you want to delete this widget?": "ウィジェットを削除すると、この部屋のすべてのユーザーのウィジェットが削除されます。 このウィジェットを削除してもいいですか?",
+ "Delete widget": "ウィジェットを削除",
+ "Failed to remove widget": "ウィジェットを削除できませんでした",
+ "An error ocurred whilst trying to remove the widget from the room": "ウィジェットをその部屋から削除しようとしているときにエラーが発生しました",
+ "Revoke widget access": "ウィジェットへのアクセスを取り消す",
+ "Minimize apps": "アプリを最小化する",
+ "Reload widget": "ウィジェットを再ロード",
+ "Popout widget": "ウィジェットをポップアウト",
+ "Picture": "画像",
+ "Unblacklist": "ブラックリスト解除",
+ "Blacklist": "ブラックリスト",
+ "Verify...": "検証中...",
+ "No results": "結果がありません",
+ "Communities": "コミュニティ",
+ "Home": "ホーム",
+ "Integrations Error": "統合エラー",
+ "Manage Integrations": "統合管理",
+ "%(nameList)s %(transitionList)s": "%(nameList)s %(transitionList)s",
+ "%(severalUsers)sjoined %(count)s times|other": "%(severalUsers)s が %(count)s 回参加しました",
+ "%(severalUsers)sjoined %(count)s times|one": "%(severalUsers)s が参加しました",
+ "%(oneUser)sjoined %(count)s times|other": "%(oneUser)s が %(count)s 回参加しました",
+ "%(oneUser)sjoined %(count)s times|one": "%(oneUser)s が参加しました",
+ "%(severalUsers)sleft %(count)s times|other": "%(severalUers)s は %(count)s 回退出しました",
+ "%(severalUsers)sleft %(count)s times|one": "%(severalUsers)s は退出しました",
+ "%(oneUser)sleft %(count)s times|other": "%(oneUser)s は %(count)s 回退出しました",
+ "%(oneUser)sleft %(count)s times|one": "%(oneUser)s は退出しました",
+ "%(severalUsers)sjoined and left %(count)s times|other": "%(severalUsers)s が%(count)s 回参加し、退出した",
+ "%(severalUsers)sjoined and left %(count)s times|one": "%(severalUsers)s は参加して退出しました",
+ "%(oneUser)sjoined and left %(count)s times|other": "%(oneUser)s が %(count)s 回参加し退出しました",
+ "%(oneUser)sjoined and left %(count)s times|one": "%(oneUser)s が参加し退出しました",
+ "%(severalUsers)sleft and rejoined %(count)s times|other": "%(severalUsers)s が %(count)s 回退出し再参加しました",
+ "%(severalUsers)sleft and rejoined %(count)s times|one": "%(severalUsers)s が退出し再参加しました",
+ "%(oneUser)sleft and rejoined %(count)s times|other": "%(oneUser)s が %(count)s 回退出し再参加しました",
+ "%(oneUser)sleft and rejoined %(count)s times|one": "%(oneUser)s が退出し再参加しました",
+ "%(severalUsers)srejected their invitations %(count)s times|other": "%(severalUsers)s が %(count)s 回招待を拒否しました",
+ "%(severalUsers)srejected their invitations %(count)s times|one": "%(severalUsers)s が招待を拒否しました",
+ "%(oneUser)srejected their invitation %(count)s times|other": "%(oneUser)s が %(count)s 回招待を拒否しました",
+ "%(oneUser)srejected their invitation %(count)s times|one": "%(oneUser)s が招待を拒否しました",
+ "%(severalUsers)shad their invitations withdrawn %(count)s times|one": "%(severalUsers)s が招待を取り消しました",
+ "%(oneUser)shad their invitation withdrawn %(count)s times|other": "%(oneUser)s が %(count)s 回招待を取り消しました",
+ "%(oneUser)shad their invitation withdrawn %(count)s times|one": "%(oneUser)s が招待を取り消しました",
+ "were invited %(count)s times|other": "%(count)s 回招待されました",
+ "were invited %(count)s times|one": "招待されました",
+ "was invited %(count)s times|other": "%(count)s 回招待されました",
+ "was invited %(count)s times|one": "招待されました",
+ "were banned %(count)s times|other": "%(count)s 回ブロックされました",
+ "were banned %(count)s times|one": "ブロックされました",
+ "was banned %(count)s times|other": "%(count)s 回ブロックされました",
+ "was banned %(count)s times|one": "ブロックされました",
+ "were unbanned %(count)s times|other": "%(count)s 回ブロック解除されました",
+ "were unbanned %(count)s times|one": "ブロック解除されました",
+ "was unbanned %(count)s times|other": "%(count)s 回ブロック解除されました",
+ "were kicked %(count)s times|other": "%(count)s 回追放しました",
+ "were kicked %(count)s times|one": "追放されました",
+ "was kicked %(count)s times|other": "%(count)s 回追放されました",
+ "was kicked %(count)s times|one": "追放されました",
+ "%(severalUsers)schanged their name %(count)s times|other": "%(severalUsers)s が %(count)s 回名前を変更しました",
+ "%(severalUsers)schanged their name %(count)s times|one": "%(severalUsers)s が名前を変更しました",
+ "%(oneUser)schanged their name %(count)s times|other": "%(oneUser)s が %(count)s 回名前を変更しました",
+ "%(oneUser)schanged their name %(count)s times|one": "%(oneUser)s が名前を変更しました",
+ "%(severalUsers)schanged their avatar %(count)s times|other": "%(severalUsers)s が %(count)s 回アバターを変更しました",
+ "%(severalUsers)schanged their avatar %(count)s times|one": "%(severalUsers)s がアバターを変更しました",
+ "%(oneUser)schanged their avatar %(count)s times|other": "%(oneUser)s がアバターを %(count)s 回変更しました",
+ "%(oneUser)schanged their avatar %(count)s times|one": "%(oneUser)s がアバターを変更しました",
+ "%(items)s and %(count)s others|other": "%(items)s と 他 %(count)s 回",
+ "%(items)s and %(count)s others|one": "%(items)s と他の1つ",
+ "%(items)s and %(lastItem)s": "%(items)s と %(lastItem)s",
+ "collapse": "崩壊",
+ "expand": "拡大する",
+ "Custom of %(powerLevel)s": "%(powerLevel)s のカスタム",
+ "Custom level": "カスタムレベル",
+ "Unable to load event that was replied to, it either does not exist or you do not have permission to view it.": "返信されたイベントを読み込めません。存在しないか、表示する権限がありません。",
+ "In reply to": "返信",
+ "And %(count)s more...|other": "そして %(count)s もっと...",
+ "ex. @bob:example.com": "例 @bob:example.com",
+ "Add User": "ユーザーを追加",
+ "Matrix ID": "Matirx ID",
+ "Matrix Room ID": "Matrix 部屋ID",
+ "email address": "メールアドレス",
+ "You have entered an invalid address.": "無効なアドレスを入力しました。",
+ "Try using one of the following valid address types: %(validTypesList)s.": "次の有効なアドレスタイプのいずれかを使用してください:%(validTypesList)s",
+ "Before submitting logs, you must create a GitHub issue to describe your problem.": "ログを送信する前に、問題を説明するためにGitHubに論点を作成する必要があります。",
+ "What GitHub issue are these logs for?": "これらのログはどのGitHubの問題ですか?",
+ "Create a new chat or reuse an existing one": "新しいチャットを作成するか、既存のチャットを再利用する",
+ "Start new chat": "新しいチャットを開始",
+ "You already have existing direct chats with this user:": "このユーザーには既に既存のチャットがあります:",
+ "Click on the button below to start chatting!": "チャットを開始するには、下のボタンをクリックしてください!",
+ "Confirm Removal": "削除の確認",
+ "Are you sure you wish to remove (delete) this event? Note that if you delete a room name or topic change, it could undo the change.": "このイベントを削除してもよろしいですか?部屋の名前やトピックの変更を削除すると、変更が取り消される可能性があります。",
+ "Community IDs cannot be empty.": "コミュニティIDは空にできません。",
+ "Community IDs may only contain characters a-z, 0-9, or '=_-./'": "コミュニティIDには次の文字のみを含めることができます a-z, 0-9, or '=_-./'",
+ "Something went wrong whilst creating your community": "コミュニティを作成する時に何かがうまくいかなかった",
+ "Create Community": "コミュニティを作成する",
+ "Community Name": "コミュニティ名",
+ "Example": "例",
+ "Community ID": "コミュニティID",
+ "example": "例",
+ "Create": "作成する",
+ "Room name (optional)": "部屋名 (オプション)",
+ "Advanced options": "詳細オプション",
+ "Block users on other matrix homeservers from joining this room": "他のmatrixホームサーバーのユーザーをこの部屋に参加させないようにする",
+ "This setting cannot be changed later!": "この設定は後で変更することはできません!",
+ "Failed to indicate account erasure": "アカウントの削除を示すことができませんでした",
+ "Unknown error": "不明なエラー",
+ "Incorrect password": "間違ったパスワード",
+ "Deactivate Account": "アカウントを無効にする",
+ "This will make your account permanently unusable. You will not be able to log in, and no one will be able to re-register the same user ID. This will cause your account to leave all rooms it is participating in, and it will remove your account details from your identity server. This action is irreversible.": "これにより、あなたのアカウントは永久に使用できなくなります。ログインできなくなり、誰も同じユーザーIDを再登録できなくなります。これにより、参加しているすべてのルームから退室し、 IDサーバからあなたのアカウントの詳細が削除されます。この操作は元に戻すことができません。",
+ "Deactivating your account does not by default cause us to forget messages you have sent. If you would like us to forget your messages, please tick the box below.": "アカウントを無効にしても、送信されたメッセージはデフォルトではなくなりません。メッセージを忘れてしまった場合は、下のボックスにチェックを入れてください。",
+ "Message visibility in Matrix is similar to email. Our forgetting your messages means that messages you have sent will not be shared with any new or unregistered users, but registered users who already have access to these messages will still have access to their copy.": "Matrixのメッセージの可視性は電子メールと似ています。メッセージを忘れると、新規または未登録のユーザーと共有することができませんが、既にこれらのメッセージにアクセスしている登録ユーザーは、依然としてそのコピーにアクセスできます。",
+ "Please forget all messages I have sent when my account is deactivated (Warning: this will cause future users to see an incomplete view of conversations)": "アカウントを無効にしたときに送信したすべてのメッセージを忘れてください (警告:これにより、今後のユーザーは会話履歴の全文を見ることができなくなります)",
+ "To continue, please enter your password:": "続行するには、パスワードを入力してください:",
+ "password": "パスワード",
+ "To verify that this device can be trusted, please contact its owner using some other means (e.g. in person or a phone call) and ask them whether the key they see in their User Settings for this device matches the key below:": "この端末が信頼できることを確認するには、他の方法 (個人や電話など) で所有者に連絡し、端末のユーザー設定で表示される鍵が以下のキーと一致するかどうかを尋ねてください:",
+ "Device name": "端末名",
+ "Device key": "端末キー",
+ "If it matches, press the verify button below. If it doesn't, then someone else is intercepting this device and you probably want to press the blacklist button instead.": "一致する場合は下の確認ボタンを押し、そうでない場合は他の誰かがこのデバイスを傍受しているので、代わりにブラックリストボタンを押してください。",
+ "In future this verification process will be more sophisticated.": "将来この検証プロセスはより洗練されたものになるでしょう。",
+ "Verify device": "デバイスの検証",
+ "I verify that the keys match": "キーが一致することを確認します",
+ "An error has occurred.": "エラーが発生しました。",
+ "You added a new device '%(displayName)s', which is requesting encryption keys.": "暗号化キーを要求している新しい端末 '%(displayName)s' を追加しました。",
+ "Your unverified device '%(displayName)s' is requesting encryption keys.": "未確認の端末 '%(displayName)s' が暗号化キーを要求しています。",
+ "Start verification": "検証を開始する",
+ "Share without verifying": "検証せずに共有する",
+ "Ignore request": "要求を無視する",
+ "Loading device info...": "端末情報を読み込んでいます...",
+ "Encryption key request": "暗号化キー要求",
+ "You've previously used Riot on %(host)s with lazy loading of members enabled. In this version lazy loading is disabled. As the local cache is not compatible between these two settings, Riot needs to resync your account.": "以前 %(host)s にて、メンバーの遅延ロードを有効にしたRiotを使用していました。このバージョンでは、遅延ロードは無効です。ローカルキャッシュはこれらの2つの設定の間で互換性がないため、Riotはアカウントを再同期する必要があります。",
+ "If the other version of Riot is still open in another tab, please close it as using Riot on the same host with both lazy loading enabled and disabled simultaneously will cause issues.": "他のバージョンのRiotがまだ別のタブで開いている場合は、同じホスト上でRiotを使用するように閉じてください。遅延ロードが同時に有効と無効になっていると問題が発生します。",
+ "Incompatible local cache": "互換性のないローカルキャッシュ",
+ "Clear cache and resync": "キャッシュをクリアして再同期する",
+ "Riot now uses 3-5x less memory, by only loading information about other users when needed. Please wait whilst we resynchronise with the server!": "Riotは、必要に応じて他のユーザーに関する情報をロードするだけで、メモリの使用量を3〜5倍減らしました。サーバーと再同期するのを待ってください!",
+ "Updating Riot": "Riot更新中",
+ "Failed to upgrade room": "部屋をアップグレードできませんでした",
+ "The room upgrade could not be completed": "部屋のアップグレードを完了できませんでした",
+ "Upgrade this room to version %(version)s": "この部屋をバージョン %(version)s にアップグレードします",
+ "Upgrade Room Version": "アップグレードルームバージョン",
+ "Upgrading this room requires closing down the current instance of the room and creating a new room it its place. To give room members the best possible experience, we will:": "この部屋をアップグレードするには、現在の部屋のインスタンスを閉じて、新しい部屋を作成する必要があります。 部屋のメンバーに最高の体験を提供するため、私たちは以下を行います:",
+ "Create a new room with the same name, description and avatar": "同じ名前、説明、アバターで新しい部屋を作成する",
+ "Update any local room aliases to point to the new room": "新しいルームを指すようにローカルルームのエイリアスを更新する",
+ "Stop users from speaking in the old version of the room, and post a message advising users to move to the new room": "古いバージョンの部屋でのユーザーの発言を停止し、新しい部屋に移動するようユーザーに通知するメッセージを投稿する",
+ "Mention": "記載",
+ "Flair will appear if enabled in room settings": "部屋の設定で有効になると、特色が表示されます",
+ "Unverify": "未検証",
+ "%(severalUsers)shad their invitations withdrawn %(count)s times|other": "%(severalUsers)s が %(count)s 回招待を撤回した",
+ "was unbanned %(count)s times|one": "ブロック解除されました",
+ "Put a link back to the old room at the start of the new room so people can see old messages": "新しい部屋の始めに古い部屋にリンクを張って、人々が古いメッセージを見ることができるようにする",
+ "Sign out": "サインアウト",
+ "Log out and remove encryption keys?": "ログアウトして暗号化キーを削除しますか?",
+ "Clear Storage and Sign Out": "ストレージのクリアとログアウト",
+ "Send Logs": "ログを送信する",
+ "Refresh": "リフレッシュ",
+ "Unable to restore session": "セッションを復元できません",
+ "We encountered an error trying to restore your previous session.": "以前のセッションを復元しようとしてエラーが発生しました。",
+ "If you have previously used a more recent version of Riot, your session may be incompatible with this version. Close this window and return to the more recent version.": "以前にRiotの最新バージョンを使用していた場合、セッションはこのバージョンと互換性がない可能性があります。 このウィンドウを閉じて、最新のバージョンに戻ります。",
+ "Clearing your browser's storage may fix the problem, but will sign you out and cause any encrypted chat history to become unreadable.": "ブラウザのストレージをクリアすると問題は解決するかもしれませんが、ログアウトして暗号化されたチャット履歴を読むことができなくなります。",
+ "Invalid Email Address": "無効なメールアドレス",
+ "This doesn't appear to be a valid email address": "これは有効なメールアドレスではないようです",
+ "Verification Pending": "検証の保留中",
+ "Please check your email and click on the link it contains. Once this is done, click continue.": "メールをチェックし、それに含まれているリンクをクリックしてください。 これが完了したら、[続行]をクリックします。",
+ "Unable to add email address": "メールアドレスを追加できません",
+ "Unable to verify email address.": "メールアドレスを確認できません。",
+ "This will allow you to reset your password and receive notifications.": "これにより、パスワードをリセットして通知を受け取ることができます。",
+ "Skip": "スキップ",
+ "User names may only contain letters, numbers, dots, hyphens and underscores.": "ユーザー名には、文字、数字、ドット、ハイフン、アンダースコアのみを使用できます。",
+ "Username not available": "ユーザー名は利用できません",
+ "Username invalid: %(errMessage)s": "ユーザー名が無効です: %(errMessage)s",
+ "An error occurred: %(error_string)s": "エラーが発生しました: %(error_string)s",
+ "Username available": "利用可能なユーザー名",
+ "To get started, please pick a username!": "開始するには、ユーザー名を選んでください!",
+ "This will be your account name on the homeserver, or you can pick a different server.": "これはホームサーバー上のアカウント名ですが、別のサーバーを選択することもできます。",
+ "If you already have a Matrix account you can log in instead.": "すでにMatrixアカウントをお持ちの場合は、代わりにログインすることができます。",
+ "Share Room": "共有部屋",
+ "Link to most recent message": "最新のメッセージへのリンク",
+ "Share User": "ユーザーを共有",
+ "Share Community": "コミュニティを共有",
+ "Share Room Message": "部屋のメッセージを共有",
+ "Link to selected message": "選択したメッセージにリンクする",
+ "COPY": "コピー",
+ "You are currently blacklisting unverified devices; to send messages to these devices you must verify them.": "現在、未検証の端末をブラックリストに登録しています。 これらの端末にメッセージを送信するには、それらの端末を検証する必要があります。",
+ "We recommend you go through the verification process for each device to confirm they belong to their legitimate owner, but you can resend the message without verifying if you prefer.": "各端末の正当な所有者に属していることを確認するために各端末の検証プロセスを進めることをおすすめしますが、あなたが好むかどうかを確認せずにメッセージを再送信することができます。",
+ "Room contains unknown devices": "部屋には未知の端末が含まれています",
+ "\"%(RoomName)s\" contains devices that you haven't seen before.": "\"%(RoomName)s\"には以前見たことのない端末が含まれています。",
+ "Unknown devices": "未知の端末",
+ "Private Chat": "プライベートチャット",
+ "Public Chat": "パブリックチャット",
+ "Custom": "カスタム",
+ "Alias (optional)": "エイリアス (オプション)",
+ "Reject invitation": "招待を拒否する",
+ "Are you sure you want to reject the invitation?": "招待を拒否しますか?",
+ "Unable to reject invite": "招待を拒否できません",
+ "Share Message": "メッセージを共有",
+ "Collapse Reply Thread": "返信スレッドを折りたたむ",
+ "Name": "名前",
+ "Topic": "トピック",
+ "Make this room private": "この部屋をプライベートにする",
+ "Share message history with new users": "新しいユーザーとメッセージの履歴を共有する",
+ "Encrypt room": "部屋を暗号化",
+ "You must register to use this functionality": "この機能を使用するには登録する必要があります",
+ "You must join the room to see its files": "そのファイルを見るために部屋に参加する必要があります",
+ "There are no visible files in this room": "この部屋には目に見えるファイルはありません",
+ "
HTML for your community's page
\n
\n Use the long description to introduce new members to the community, or distribute\n some important links\n
\n",
+ "Add rooms to the community summary": "コミュニティサマリーに部屋を追加する",
+ "Which rooms would you like to add to this summary?": "このサマリーにどの部屋を追加したいですか?",
+ "Add to summary": "サマリーに追加",
+ "Failed to add the following rooms to the summary of %(groupId)s:": "%(groupId)s の要約に次の部屋を追加できませんでした:",
+ "Add a Room": "部屋を追加",
+ "Failed to remove the room from the summary of %(groupId)s": "%(groupId)s の要約から部屋を削除できませんでした",
+ "The room '%(roomName)s' could not be removed from the summary.": "'%(roomName)s' 部屋をサマリーから削除できませんでした。",
+ "Add users to the community summary": "コミュニティサマリーにユーザーを追加する",
+ "Who would you like to add to this summary?": "この要約に誰を追加しますか?",
+ "Failed to add the following users to the summary of %(groupId)s:": "%(groupId)s のサマリーに次のユーザーを追加できませんでした。",
+ "Add a User": "ユーザーを追加",
+ "Failed to remove a user from the summary of %(groupId)s": "%(groupId)s のサマリーからユーザーを削除できませんでした",
+ "The user '%(displayName)s' could not be removed from the summary.": "ユーザー '%(displayName)s' をサマリーから削除できませんでした。",
+ "Failed to upload image": "画像のアップロードに失敗しました",
+ "Failed to update community": "コミュニティの更新に失敗しました",
+ "Unable to accept invite": "招待を受け入れることができません",
+ "Unable to join community": "コミュニティに参加できません",
+ "You are an administrator of this community. You will not be able to rejoin without an invite from another administrator.": "あなたはこのコミュニティの管理者です。 別の管理者からの招待なしには、再び参加することはできません。",
+ "Leave Community": "コミュニティから脱退する",
+ "Leave %(groupName)s?": "%(groupName)s を離れますか?",
+ "Unable to leave community": "コミュニティを離れることができません",
+ "Community Settings": "コミュニティ設定",
+ "Changes made to your community name and avatar might not be seen by other users for up to 30 minutes.": "コミュニティ名とアバターに対する変更は、他のユーザーには最大30分間表示されないことがあります。",
+ "These rooms are displayed to community members on the community page. Community members can join the rooms by clicking on them.": "これらの部屋は、コミュニティページのコミュニティメンバーに表示されます。 コミュニティメンバーは、それらをクリックして部屋に参加できます。",
+ "Featured Rooms:": "部屋の特徴:",
+ "Featured Users:": "ユーザーの特徴:",
+ "%(inviter)s has invited you to join this community": "%(inviter)s があなたをこのコミュニティに招待しました",
+ "Join this community": "このコミュニティに参加する",
+ "Leave this community": "このコミュニティを離れる",
+ "You are an administrator of this community": "あなたはこのコミュニティの管理者です",
+ "You are a member of this community": "あなたはこのコミュニティのメンバーです",
+ "Who can join this community?": "誰がこのコミュニティに参加できますか?",
+ "Everyone": "全員",
+ "Your community hasn't got a Long Description, a HTML page to show to community members. Click here to open settings and give it one!": "あなたのコミュニティには、説明がありません。コミュニティのメンバーに見せるHTMLページです。 ここをクリックして設定を開き、説明を加えてください!",
+ "Long Description (HTML)": "詳細説明 (HTML)",
+ "Description": "説明",
+ "Community %(groupId)s not found": "コミュニティ %(groupId)s が見つかりません",
+ "This Home server does not support communities": "このホームサーバーはコミュニティをサポートしていません",
+ "Failed to load %(groupId)s": "%(groupId)s をロードできませんでした",
+ "Failed to reject invitation": "招待を拒否できませんでした",
+ "This room is not public. You will not be able to rejoin without an invite.": "この部屋は公開されていません。 あなたは招待なしで再び参加することはできません。",
+ "Are you sure you want to leave the room '%(roomName)s'?": "本当にその部屋 '%(roomName)s' を離れますか?",
+ "Failed to leave room": "部屋を離れることができなかった",
+ "Can't leave Server Notices room": "サーバー通知部屋を離れることはできません",
+ "This room is used for important messages from the Homeserver, so you cannot leave it.": "この部屋はホームサーバーからの重要なメッセージに使用されるため、そこを離れることはできません。",
+ "Signed Out": "サインアウト",
+ "For security, this session has been signed out. Please sign in again.": "セキュリティ上、このセッションはログアウトされています。 もう一度サインインしてください。",
+ "Terms and Conditions": "利用規約",
+ "To continue using the %(homeserverDomain)s homeserver you must review and agree to our terms and conditions.": "%(homeserverDomain)s ホームサーバーを引き続き使用するには、利用規約を確認して同意する必要があります。",
+ "Review terms and conditions": "利用規約を確認する",
+ "Old cryptography data detected": "古い暗号化データが検出されました",
+ "Data from an older version of Riot has been detected. This will have caused end-to-end cryptography to malfunction in the older version. End-to-end encrypted messages exchanged recently whilst using the older version may not be decryptable in this version. This may also cause messages exchanged with this version to fail. If you experience problems, log out and back in again. To retain message history, export and re-import your keys.": "Riotの古いバージョンのデータが検出されました。 これにより、古いバージョンではエンドツーエンドの暗号化が機能しなくなります。 古いバージョンを使用している間に最近交換されたエンドツーエンドの暗号化されたメッセージは、このバージョンでは復号化できません。 これにより、このバージョンで交換されたメッセージが失敗することもあります。 問題が発生した場合は、ログアウトして再度ログインしてください。 メッセージ履歴を保持するには、キーをエクスポートして再インポートします。",
+ "Logout": "ログアウト",
+ "Your Communities": "あなたのコミュニティ",
+ "Did you know: you can use communities to filter your Riot.im experience!": "知っていましたか: コミュニティを使ってRiot.imの経験を絞り込むことができます!",
+ "To set up a filter, drag a community avatar over to the filter panel on the far left hand side of the screen. You can click on an avatar in the filter panel at any time to see only the rooms and people associated with that community.": "フィルターを設定するには、画面左側のフィルターパネルへコミュニティアバターをドラッグします。フィルタパネルのアバターをクリックすると、そのコミュニティに関連付けられた部屋や人だけが表示されます。",
+ "Error whilst fetching joined communities": "参加したコミュニティを取得中にエラーが発生しました",
+ "Create a new community": "新しいコミュニティを作成する",
+ "Create a community to group together users and rooms! Build a custom homepage to mark out your space in the Matrix universe.": "ユーザーと部屋をグループ化するコミュニティを作成してください! Matrixユニバースにあなたの空間を目立たせるためにカスタムホームページを作成してください。",
+ "You have no visible notifications": "表示される通知はありません",
+ "Scroll to bottom of page": "ページの一番下にスクロールする",
+ "Message not sent due to unknown devices being present": "未知の端末が存在するためにメッセージが送信されない",
+ "Show devices, send anyway or cancel.": "端末表示、とにかく送信または キャンセル。",
+ "You can't send any messages until you review and agree to our terms and conditions.": "利用規約 を確認して同意するまでは、いかなるメッセージも送信できません。",
+ "Your message wasn't sent because this homeserver has hit its Monthly Active User Limit. Please contact your service administrator to continue using the service.": "このホームサーバーが月間アクティブユーザー制限を超えたため、メッセージは送信されませんでした。 サービスを引き続き使用するには、サービス管理者にお問い合わせください。",
+ "Your message wasn't sent because this homeserver has exceeded a resource limit. Please contact your service administrator to continue using the service.": "このホームサーバーがリソース制限を超えたため、メッセージは送信されませんでした。 サービスを引き続き使用するには、サービス管理者にお問い合わせください。",
+ "%(count)s of your messages have not been sent.|other": "メッセージの一部が送信されていません。",
+ "%(count)s of your messages have not been sent.|one": "あなたのメッセージは送信されませんでした。",
+ "%(count)s Resend all or cancel all now. You can also select individual messages to resend or cancel.|other": "すべて再送信またはすべてキャンセル。個々のメッセージを選択して、再送信またはキャンセルすることもできます。",
+ "%(count)s Resend all or cancel all now. You can also select individual messages to resend or cancel.|one": "メッセージ再送信またはメッセージキャンセル。",
+ "Connectivity to the server has been lost.": "サーバーへの接続が失われました。",
+ "Sent messages will be stored until your connection has returned.": "送信されたメッセージは、接続が返されるまで保存されます。",
+ "Active call": "アクティブコール",
+ "There's no one else here! Would you like to invite others or stop warning about the empty room?": "他に誰もいません! 他のユーザーを招待または空の部屋に関する警告を停止しますか?",
+ "You seem to be uploading files, are you sure you want to quit?": "ファイルをアップロードしているようですが、中止しますか?",
+ "You seem to be in a call, are you sure you want to quit?": "通話中のようですが、本当にやめたいですか?",
+ "Failed to upload file": "ファイルのアップロードに失敗しました",
+ "Server may be unavailable, overloaded, or the file too big": "サーバーが使用できない、過負荷がかかっている、またはファイルが大きすぎるようです",
+ "Search failed": "検索に失敗しました",
+ "Server may be unavailable, overloaded, or search timed out :(": "サーバーが使用できない、オーバーロードされている、または検索がタイムアウトしているようです :(",
+ "No more results": "もう結果はありません",
+ "Unknown room %(roomId)s": "未知の部屋 %(roomId)s",
+ "Room": "部屋",
+ "Failed to save settings": "設定を保存できませんでした",
+ "Failed to reject invite": "招待を拒否できませんでした",
+ "Click to unmute video": "ビデオの音消解除するにはクリックしてください",
+ "Click to mute video": "ビデオの音を消すにはクリックしてください",
+ "Click to unmute audio": "オーディオの音消解除するにはクリックしてください",
+ "Click to mute audio": "オーディオの音を消すにはクリックしてください",
+ "Clear filter": "フィルタークリア",
+ "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 was unable to find it.": "この部屋のタイムラインに特定のポイントをロードしようとしましたが、それを見つけることができませんでした。",
+ "Failed to load timeline position": "タイムラインの位置を読み込めませんでした",
+ "Uploading %(filename)s and %(count)s others|other": "%(filename)s アップロード中、他 %(count)s 件",
+ "Uploading %(filename)s and %(count)s others|zero": "%(filename)s アップロード中",
+ "Uploading %(filename)s and %(count)s others|one": "%(filename)s アップロード中、他 %(count)s 件",
+ "Can't load user settings": "ユーザー設定を読み込めません",
+ "Server may be unavailable or overloaded": "サーバーが使用できないか、またはオーバーロードされているようです",
+ "For security, logging out will delete any end-to-end encryption keys from this browser. If you want to be able to decrypt your conversation history from future Riot sessions, please export your room keys for safe-keeping.": "セキュリティのため、ログアウトするとこのブラウザからエンドツーエンドの暗号化キーがすべて削除されます。 将来のRiotセッションからの会話履歴を復号化できるようにしたい場合は、安全のためにルームキーをエクスポートしてください。",
+ "Success": "成功",
+ "Your password was successfully changed. You will not receive push notifications on other devices until you log back in to them": "パスワードが変更されました。再ログインするまで、他の端末のプッシュ通知を受け取ることはありません",
+ "Remove Contact Information?": "連絡先情報を削除しますか?",
+ "Remove %(threePid)s?": "%(threePid)s を削除しますか?",
+ "Unable to remove contact information": "連絡先情報を削除できません",
+ "Refer a friend to Riot:": "Riotに友達を紹介する:",
+ "Interface Language": "インタフェース言語",
+ "User Interface": "ユーザーインターフェース",
+ "Autocomplete Delay (ms):": "オートコンプリート遅延 (ms):",
+ "": "<サポート対象外>",
+ "Import E2E room keys": "E2Eルームキーのインポート",
+ "Cryptography": "暗号",
+ "Device ID:": "端末ID:",
+ "Device key:": "端末キー:",
+ "Ignored Users": "無視されたユーザー",
+ "Submit Debug Logs": "デバッグログを送信する",
+ "If you've submitted a bug via GitHub, debug logs can help us track down the problem. Debug logs contain application usage data including your username, the IDs or aliases of the rooms or groups you have visited and the usernames of other users. They do not contain messages.": "GitHub経由でバグを提出した場合、デバッグログは問題の追跡に役立ちます。 デバッグログには、ユーザー名、訪問した部屋またはグループIDまたはエイリアス、および他のユーザーのユーザー名を含むアプリケーション使用データが含まれます。 それらはメッセージを含んでいません。",
+ "Privacy is important to us, so we don't collect any personal or identifiable data for our analytics.": "プライバシーは私たちにとって重要なので、私たちは分析のための個人情報や識別可能なデータを収集しません。",
+ "Learn more about how we use analytics.": "アナリティクスの使用方法の詳細については、こちらをご覧ください。",
+ "Labs": "ラボ",
+ "These are experimental features that may break in unexpected ways": "これらは予期しない方法で破られるかもしれない実験的な機能です",
+ "Use with caution": "慎重に使用する",
+ "Lazy loading members not supported": "遅延ローディングのメンバーはサポートされていません",
+ "Lazy loading is not supported by your current homeserver.": "遅延ロードは、現在のホームサーバーでサポートされていません。",
+ "Deactivate my account": "アカウントを無効にします",
+ "Legal": "法的",
+ "Clear Cache": "キャッシュの消去",
+ "Clear Cache and Reload": "キャッシュの消去と再ロード",
+ "Updates": "更新",
+ "Check for update": "更新を確認",
+ "Reject all %(invitedRooms)s invites": "%(invitedRooms)s すべての招待を拒否する",
+ "Bulk Options": "一括オプション",
+ "Desktop specific": "デスクトップ固有",
+ "Start automatically after system login": "システムログイン後に自動的に起動する",
+ "No media permissions": "メディア権限がありません",
+ "You may need to manually permit Riot to access your microphone/webcam": "自分のマイク/ウェブカメラにアクセスするために手動でRiotを許可する必要があるかもしれません",
+ "Missing Media Permissions, click here to request.": "メディアアクセス権がありません。ここをクリックしてリクエストしてください。",
+ "No Audio Outputs detected": "オーディオ出力が検出されなかった",
+ "Default Device": "標準端末",
+ "Audio Output": "音声出力",
+ "VoIP": "VoIP",
+ "Email": "Eメール",
+ "Add email address": "メールアドレスを追加",
+ "Profile": "プロフィール",
+ "Account": "アカウント",
+ "To return to your account in future you need to set a password": "将来あなたのアカウントに戻るには、パスワードを設定する必要があります",
+ "Logged in as:": "ログイン as:",
+ "Access Token:": "アクセストークン:",
+ "click to reveal": "クリックすると表示されます",
+ "Homeserver is": "ホームサーバーは",
+ "Identity Server is": "アイデンティティ・サーバー",
+ "matrix-react-sdk version:": "matrix-react-sdk version:",
+ "riot-web version:": "riot-web version:",
+ "olm version:": "olm version:",
+ "Failed to send email": "メールを送信できませんでした",
+ "The email address linked to your account must be entered.": "あなたのアカウントにリンクされているメールアドレスを入力する必要があります。",
+ "A new password must be entered.": "新しいパスワードを入力する必要があります。",
+ "New passwords must match each other.": "新しいパスワードは互いに一致する必要があります。",
+ "Resetting password will currently reset any end-to-end encryption keys on all devices, making encrypted chat history unreadable, unless you first export your room keys and re-import them afterwards. In future this will be improved.": "現在、パスワードをリセットすると、すべての端末のエンドツーエンドの暗号化キーがリセットされ、暗号化されたチャット履歴は読み取れなくなります。最初にルームキーをエクスポートしてから再インポートする必要があります。 将来これは改善されるでしょう。",
+ "An email has been sent to %(emailAddress)s. Once you've followed the link it contains, click below.": "メールが %(emailAddress)s に送信されました。 リンクをたどったら、以下をクリックしてください。",
+ "I have verified my email address": "メールアドレスを確認しました",
+ "Your password has been reset": "あなたのパスワードはリセットされました",
+ "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": "あなたはすべての端末からログアウトしており、プッシュ通知を受け取ることはありません。 通知を再度有効にするには、各端末でもう一度ログインしてください",
+ "Return to login screen": "ログイン画面に戻る",
+ "To reset your password, enter the email address linked to your account": "パスワードをリセットするには、アカウントにリンクされているメールアドレスを入力してください",
+ "Confirm your new password": "新しいパスワードを確認する",
+ "Send Reset Email": "リセットメールを送信",
+ "Create an account": "アカウントを作成する",
+ "This Home Server does not support login using email address.": "このホームサーバーはメールアドレスを使用したログインをサポートしていません。",
+ "Please contact your service administrator to continue using this service.": "このサービスを続行するには、サービス管理者にお問い合わせください。",
+ "Incorrect username and/or password.": "不正なユーザー名またはパスワード。",
+ "Please note you are logging into the %(hs)s server, not matrix.org.": "matrix.orgではなく、%(hs)s サーバーにログインしていることに注意してください。",
+ "Guest access is disabled on this Home Server.": "このホームサーバーでゲストアクセスが無効になっています。",
+ "The phone number entered looks invalid": "入力された電話番号が無効です",
+ "This homeserver doesn't offer any login flows which are supported by this client.": "このホームサーバーは、このクライアントでサポートされているログインフローを提供していません。",
+ "Error: Problem communicating with the given homeserver.": "エラー: 指定されたホームサーバーとの通信に問題があります。",
+ "Can't connect to homeserver via HTTP when an HTTPS URL is in your browser bar. Either use HTTPS or enable unsafe scripts.": "HTTPS URLがブラウザバーにある場合、HTTP経由でホームサーバーに接続できません。 HTTPSを使用するか安全でないスクリプトを有効にする。",
+ "Can't connect to homeserver - please check your connectivity, ensure your homeserver's SSL certificate is trusted, and that a browser extension is not blocking requests.": "ホームサーバーに接続できません - 接続を確認し、ホームサーバーのSSL証明書が信頼できるものであり、ブラウザの拡張機能が要求をブロックしていないことを確認してください。",
+ "Try the app first": "最初にアプリを試してみてください",
+ "Sign in to get started": "開始するにはサインインしてください",
+ "Failed to fetch avatar URL": "アバターURLを取得できませんでした",
+ "Set a display name:": "表示名を設定する:",
+ "Upload an avatar:": "アバターをアップロードする:",
+ "Unable to query for supported registration methods": "サポートされている登録メソッドを照会できません",
+ "This server does not support authentication with a phone number.": "このサーバーは、電話番号による認証をサポートしていません。",
+ "Missing password.": "パスワードがありません。",
+ "Passwords don't match.": "パスワードが一致しません。",
+ "Password too short (min %(MIN_PASSWORD_LENGTH)s).": "パスワードが短すぎます (min %(MIN_PASSWORD_LENGTH)s)。",
+ "This doesn't look like a valid email address.": "有効なメールアドレスではないようです。",
+ "This doesn't look like a valid phone number.": "有効な電話番号ではないようです。",
+ "An email address is required to register on this homeserver.": "このホームサーバーに登録するには、メールアドレスが必要です。",
+ "A phone number is required to register on this homeserver.": "このホームサーバーに登録するには、電話番号が必要です。",
+ "You need to enter a user name.": "ユーザー名を入力する必要があります。",
+ "An unknown error occurred.": "不明なエラーが発生しました。",
+ "I already have an account": "私はすでにアカウントを持っています",
+ "Commands": "コマンド",
+ "Results from DuckDuckGo": "DuckDuckGoの結果",
+ "Emoji": "絵文字",
+ "Notify the whole room": "部屋全体に通知する",
+ "Room Notification": "ルーム通知",
+ "Users": "ユーザー",
+ "unknown device": "未知の端末",
+ "NOT verified": "検証されていない",
+ "verified": "検証済み",
+ "Verification": "検証",
+ "Ed25519 fingerprint": "Ed25519 fingerprint",
+ "User ID": "ユーザーID",
+ "Curve25519 identity key": "Curve25519 identity key",
+ "none": "無し",
+ "Claimed Ed25519 fingerprint key": "Claimed Ed25519 fingerprint key",
+ "Algorithm": "アルゴリズム",
+ "unencrypted": "暗号化されていない",
+ "Decryption error": "復号化エラー",
+ "Session ID": "セッションID",
+ "End-to-end encryption information": "エンドツーエンド暗号化情報",
+ "Event information": "イベント情報",
+ "Sender device information": "送信者端末情報",
+ "Passphrases must match": "パスフレーズは一致する必要があります",
+ "Passphrase must not be empty": "パスフレーズは空であってはいけません",
+ "Export room keys": "ルームキーのエクスポート",
+ "This process allows you to export the keys for messages you have received in encrypted rooms to a local file. You will then be able to import the file into another Matrix client in the future, so that client will also be able to decrypt these messages.": "このプロセスでは、暗号化されたルームで受信したメッセージのキーをローカルファイルにエクスポートできます。 その後、クライアントがこれらのメッセージを復号化できるように、ファイルを別のMatrixクライアントにインポートすることができます。",
+ "The exported file will allow anyone who can read it to decrypt any encrypted messages that you can see, so you should be careful to keep it secure. To help with this, you should enter a passphrase below, which will be used to encrypt the exported data. It will only be possible to import the data by using the same passphrase.": "エクスポートされたファイルは、誰でも閲覧できる暗号化されたメッセージを復号化することができるので、安全に保つように注意する必要があります。 これを助けるには、下にあるパスフレーズを入力して、エクスポートされたデータを暗号化する必要があります。 同じパスフレーズを使用してデータをインポートすることは可能です。",
+ "Enter passphrase": "パスフレーズを入力",
+ "Confirm passphrase": "パスフレーズを確認",
+ "Export": "エクスポート",
+ "Import room keys": "ルームキーをインポートする",
+ "This process allows you to import encryption keys that you had previously exported from another Matrix client. You will then be able to decrypt any messages that the other client could decrypt.": "このプロセスでは、以前に別のMatrixクライアントからエクスポートした暗号化キーをインポートできます。 これにより、他のクライアントが解読できるすべてのメッセージを解読することができます。",
+ "The export file will be protected with a passphrase. You should enter the passphrase here, to decrypt the file.": "エクスポートファイルはパスフレーズで保護されます。 ファイルを解読するには、パスフレーズをここに入力する必要があります。",
+ "File to import": "インポートするファイル",
+ "Import": "インポート",
+ "Failed to set direct chat tag": "直接チャットタグを設定できませんでした",
+ "Failed to remove tag %(tagName)s from room": "部屋からタグ %(tagName)s を削除できませんでした",
+ "Failed to add tag %(tagName)s to room": "部屋にタグ %(tagName)s を追加できませんでした",
+ "Open Devtools": "開発ツールを開く",
+ "bold": "bold",
+ "italic": "italic",
+ "underlined": "underlined",
+ "inline-code": "inline-code",
+ "block-quote": "block-quote",
+ "bulleted-list": "bulleted-list",
+ "numbered-list": "numbered-list",
+ "People": "人々",
+ "Flair": "特色",
+ "Flair will not appear": "特色は現れない",
+ "Fill screen": "フィルスクリーン",
+ "Light theme": "明るいテーマ",
+ "Dark theme": "暗いテーマ",
+ "Status.im theme": "Status.im テーマ",
+ "Unignore": "無視しない",
+ "If you would like to create a Matrix account you can register now.": "Matrixアカウントを作成したい場合は、今すぐ登録することができます。",
+ "You are currently using Riot anonymously as a guest.": "現在、Riotをゲストとして匿名で使用しています。"
}
diff --git a/src/i18n/strings/lt.json b/src/i18n/strings/lt.json
index 776445e40d..1f8963babb 100644
--- a/src/i18n/strings/lt.json
+++ b/src/i18n/strings/lt.json
@@ -872,5 +872,16 @@
"You have no historical rooms": "Jūs neturite istorinių kambarių",
"Historical": "Istoriniai",
"Every page you use in the app": "Kiekvienas puslapis, kurį naudoji programoje",
- "Call Timeout": "Skambučio laikas baigėsi"
+ "Call Timeout": "Skambučio laikas baigėsi",
+ "%(senderName)s added %(count)s %(addedAddresses)s as addresses for this room.|other": "%(senderName)s kaip šio kambario adresus pridėjo %(addedAddresses)s.",
+ "%(senderName)s added %(count)s %(addedAddresses)s as addresses for this room.|one": "%(senderName)s kaip šio kambario adresą pridėjo %(addedAddresses)s.",
+ "%(senderName)s removed %(count)s %(removedAddresses)s as addresses for this room.|other": "%(senderName)s kaip šio kambario adresus pašalino %(removedAddresses)s.",
+ "%(senderName)s removed %(count)s %(removedAddresses)s as addresses for this room.|one": "%(senderName)s kaip šio kambario adresą pašalino %(removedAddresses)s.",
+ "%(senderName)s added %(addedAddresses)s and removed %(removedAddresses)s as addresses for this room.": "%(senderName)s kaip šio kambario adresus pridėjo %(addedAddresses)s ir pašalino %(removedAddresses)s.",
+ "%(senderName)s set the main address for this room to %(address)s.": "%(senderName)s nustatė pagrindinį šio kambario adresą į %(address)s.",
+ "%(senderName)s removed the main address for this room.": "%(senderName)s pašalino pagrindinį šio kambario adresą.",
+ "Disinvite": "Atšaukti pakvietimą",
+ "Disinvite this user?": "Atšaukti pakvietimą šiam naudotojui?",
+ "Unknown for %(duration)s": "Nežinoma jau %(duration)s",
+ "(warning: cannot be disabled again!)": "(įspėjimas: nebeįmanoma bus išjungti!)"
}
diff --git a/src/i18n/strings/pl.json b/src/i18n/strings/pl.json
index 3bbc9b1d73..045b04cc94 100644
--- a/src/i18n/strings/pl.json
+++ b/src/i18n/strings/pl.json
@@ -143,11 +143,11 @@
"Can't connect to homeserver via HTTP when an HTTPS URL is in your browser bar. Either use HTTPS or enable unsafe scripts.": "Nie można nawiązać połączenia z serwerem przy użyciu HTTP podczas korzystania z HTTPS dla bieżącej strony. Użyj HTTPS lub włącz niebezpieczne skrypty.",
"Can't load user settings": "Nie można załadować ustawień użytkownika",
"Cannot add any more widgets": "Nie można dodać już więcej widżetów",
- "%(senderName)s changed their profile picture.": "%(senderName)s zmienił swoje zdjęcie profilowe.",
- "%(senderName)s changed the power level of %(powerLevelDiffText)s.": "%(senderName)s zmienił poziom mocy %(powerLevelDiffText)s.",
- "%(senderDisplayName)s changed the room name to %(roomName)s.": "%(senderDisplayName)s zmienił nazwę pokoju na %(roomName)s.",
- "%(senderDisplayName)s removed the room name.": "%(senderDisplayName)s usunął nazwę pokoju.",
- "%(senderDisplayName)s changed the topic to \"%(topic)s\".": "%(senderDisplayName)s zmienił temat na \"%(topic)s\".",
+ "%(senderName)s changed their profile picture.": "%(senderName)s zmienił(a) swoje zdjęcie profilowe.",
+ "%(senderName)s changed the power level of %(powerLevelDiffText)s.": "%(senderName)s zmienił(a) poziom mocy %(powerLevelDiffText)s.",
+ "%(senderDisplayName)s changed the room name to %(roomName)s.": "%(senderDisplayName)s zmienił(a) nazwę pokoju na %(roomName)s.",
+ "%(senderDisplayName)s removed the room name.": "%(senderDisplayName)s usunął(-ęła) nazwę pokoju.",
+ "%(senderDisplayName)s changed the topic to \"%(topic)s\".": "%(senderDisplayName)s zmienił(a) temat na \"%(topic)s\".",
"Changes to who can read history will only apply to future messages in this room": "Zmiany w dostępie do historii będą dotyczyć tylko przyszłych wiadomości w tym pokoju",
"Changes your display nickname": "Zmień swój pseudonim",
"Changes colour scheme of current room": "Zmień schemat kolorystyczny bieżącego pokoju",
@@ -370,8 +370,8 @@
"Rejoin": "Dołącz ponownie",
"Remote addresses for this room:": "Adresy zdalne dla tego pokoju:",
"Remove Contact Information?": "Usunąć dane kontaktowe?",
- "%(senderName)s removed their display name (%(oldDisplayName)s).": "%(senderName)s usunął swoją nazwę ekranową (%(oldDisplayName)s).",
- "%(senderName)s removed their profile picture.": "%(senderName)s usunął swoje zdjęcie profilowe.",
+ "%(senderName)s removed their display name (%(oldDisplayName)s).": "%(senderName)s usunął(-ęła) swoją wyświetlaną nazwę (%(oldDisplayName)s).",
+ "%(senderName)s removed their profile picture.": "%(senderName)s usunął(-ęła) swoje zdjęcie profilowe.",
"Remove %(threePid)s?": "Usunąć %(threePid)s?",
"%(senderName)s requested a VoIP conference.": "%(senderName)s zażądał grupowego połączenia głosowego VoIP.",
"Results from DuckDuckGo": "Wyniki z DuckDuckGo",
@@ -548,8 +548,8 @@
"code": "kod",
"quote": "cytat",
"Create": "Utwórz",
- "Online": "Dostępny",
- "Offline": "Niedostępny",
+ "Online": "Dostępny(-a)",
+ "Offline": "Niedostępny(-a)",
"Add an Integration": "Dodaj integrację",
"Token incorrect": "Niepoprawny token",
"To link to a room it must have an address.": "Aby móc stworzyć link do pokoju musi on mieć swój adres.",
@@ -629,9 +629,9 @@
" (unsupported)": " (niewspierany)",
"Idle": "Bezczynny",
"Check for update": "Sprawdź aktualizacje",
- "%(senderDisplayName)s changed the room avatar to ": "%(senderDisplayName)s zmienił awatar pokoju na ",
- "%(senderDisplayName)s removed the room avatar.": "%(senderDisplayName)s usunął awatar pokoju.",
- "%(senderDisplayName)s changed the avatar for %(roomName)s": "%(senderDisplayName)s zmienił awatar %(roomName)s",
+ "%(senderDisplayName)s changed the room avatar to ": "%(senderDisplayName)s zmienił(a) awatar pokoju na ",
+ "%(senderDisplayName)s removed the room avatar.": "%(senderDisplayName)s usunął(-ęła) awatar pokoju.",
+ "%(senderDisplayName)s changed the avatar for %(roomName)s": "%(senderDisplayName)s zmienił(a) awatar %(roomName)s",
"This will be your account name on the homeserver, or you can pick a different server.": "To będzie twoja nazwa konta na serwerze domowym; możesz też wybrać inny serwer.",
"If you already have a Matrix account you can log in instead.": "Jeśli już posiadasz konto Matrix możesz się zalogować.",
"Not a valid Riot keyfile": "Niepoprawny plik klucza Riot",
@@ -640,7 +640,7 @@
"Do you want to set an email address?": "Czy chcesz ustawić adres e-mail?",
"To return to your account in future you need to set a password": "By móc powrócić do swojego konta w przyszłości musisz ustawić hasło",
"Share without verifying": "Udostępnij bez weryfikacji",
- "You added a new device '%(displayName)s', which is requesting encryption keys.": "Dodałeś nowe urządzenie '%(displayName)s', które żąda kluczy szyfrujących.",
+ "You added a new device '%(displayName)s', which is requesting encryption keys.": "Dodałeś(-aś) nowe urządzenie '%(displayName)s', które żąda kluczy szyfrujących.",
"Your unverified device '%(displayName)s' is requesting encryption keys.": "Twoje niezweryfikowane urządzenie '%(displayName)s' żąda kluczy szyfrujących.",
"Encryption key request": "Żądanie klucza szyfrującego",
"Autocomplete Delay (ms):": "Opóźnienie autouzupełniania (ms):",
@@ -700,8 +700,8 @@
"Ignored user": "Użytkownik ignorowany",
"You are now ignoring %(userId)s": "Ignorujesz teraz %(userId)s",
"You are no longer ignoring %(userId)s": "Nie ignorujesz już %(userId)s",
- "%(oldDisplayName)s changed their display name to %(displayName)s.": "%(oldDisplayName)s zmienił swoją wyświetlaną nazwę na %(displayName)s.",
- "%(senderName)s changed the pinned messages for the room.": "%(senderName)s zmienił przypiętą wiadomość dla tego pokoju.",
+ "%(oldDisplayName)s changed their display name to %(displayName)s.": "%(oldDisplayName)s zmienił(a) swoją wyświetlaną nazwę na %(displayName)s.",
+ "%(senderName)s changed the pinned messages for the room.": "%(senderName)s zmienił(a) przypiętą wiadomość dla tego pokoju.",
"Message Pinning": "Przypinanie wiadomości",
"%(names)s and %(count)s others are typing|other": "%(names)s oraz %(count)s innych piszą",
"%(names)s and %(count)s others are typing|one": "%(names)s oraz jedna inna osoba piszą",
@@ -775,7 +775,7 @@
"Failed to get protocol list from Home Server": "Nie można pobrać listy protokołów z serwera domowego",
"You are not receiving desktop notifications": "Nie otrzymujesz powiadomień na pulpit",
"Friday": "Piątek",
- "Update": "Uaktualnienie",
+ "Update": "Zaktualizuj",
"What's New": "Co nowego",
"Add an email address above to configure email notifications": "Dodaj adres e-mail powyżej, aby skonfigurować powiadomienia e-mailowe",
"Expand panel": "Rozwiń panel",
@@ -1146,5 +1146,66 @@
"was invited %(count)s times|one": "został zaproszony",
"was banned %(count)s times|one": "został zablokowany",
"was kicked %(count)s times|one": "został wyrzucony",
- "Whether or not you're using the Richtext mode of the Rich Text Editor": ""
+ "Whether or not you're using the Richtext mode of the Rich Text Editor": "Niezależnie od tego, czy używasz trybu Richtext edytora tekstu w formacie RTF",
+ "Call in Progress": "Łączenie w toku",
+ "Permission Required": "Wymagane Pozwolenie",
+ "Registration Required": "Wymagana Rejestracja",
+ "You need to register to do this. Would you like to register now?": "Musisz się zarejestrować, aby to zrobić. Czy chcesz się teraz zarejestrować?",
+ "underlined": "podkreślenie",
+ "deleted": "przekreślenie",
+ "numbered-list": "lista numerowana",
+ "bulleted-list": "wykropkowana lista",
+ "block-quote": "blok cytowany",
+ "A conference call could not be started because the intgrations server is not available": "Połączenie grupowe nie może zostać rozpoczęte, ponieważ serwer jest niedostępny",
+ "A call is currently being placed!": "W tej chwili trwa rozmowa!",
+ "A call is already in progress!": "W tej chwili trwa połączenie!",
+ "You do not have permission to start a conference call in this room": "Nie posiadasz permisji do rozpoczęcia rozmowy grupowej w tym pokoju",
+ "Unignored user": "Nieignorowany użytkownik",
+ "Forces the current outbound group session in an encrypted room to be discarded": "Wymusza odrzucenie bieżącej sesji grupy wychodzącej w zaszyfrowanym pokoju",
+ "%(senderName)s added %(count)s %(addedAddresses)s as addresses for this room.|other": "%(senderName)s dodał(a) %(addedAddresses)s jako adres tego pokoju.",
+ "%(senderName)s added %(count)s %(addedAddresses)s as addresses for this room.|one": "%(senderName)s dodał(a) %(addedAddresses)s jako adres tego pokoju.",
+ "%(senderName)s removed %(count)s %(removedAddresses)s as addresses for this room.|other": "%(senderName)s usunął(-ęła) %(removedAddresses)s jako adres tego pokoju.",
+ "%(senderName)s removed %(count)s %(removedAddresses)s as addresses for this room.|one": "%(senderName)s usunął(-ęła) %(removedAddresses)s jako adres tego pokoju.",
+ "%(senderName)s added %(addedAddresses)s and removed %(removedAddresses)s as addresses for this room.": "%(senderName)s dodał %(addedAddresses)s i %(removedAddresses)s usunął adresy z tego pokoju.",
+ "%(senderName)s set the main address for this room to %(address)s.": "%(senderName)s ustawił(a) główny adres dla tego pokoju na %(address)s.",
+ "%(senderName)s removed the main address for this room.": "%(senderName)s usunął(-ęła) główny adres tego pokoju.",
+ "This homeserver has hit its Monthly Active User limit.": "Ten serwer osiągnął miesięczny limit aktywnego użytkownika.",
+ "This homeserver has exceeded one of its resource limits.": "Ten serwer przekroczył jeden z limitów.",
+ "Please contact your service administrator to continue using the service.": "Proszę, skontaktuj się z administratorem aby korzystać dalej z funkcji.",
+ "Unable to connect to Homeserver. Retrying...": "Nie można się połączyć z serwerem. Ponawanianie...",
+ "Sorry, your homeserver is too old to participate in this room.": "Przepraszamy, twój serwer jest zbyt stary by wziąć udział w tym pokoju.",
+ "Please contact your homeserver administrator.": "Proszę o kontakt z administratorem serwera.",
+ "Increase performance by only loading room members on first view": "Zwiększ wydajność, ładując tylko członków pokoju w pierwszym widoku",
+ "Enable widget screenshots on supported widgets": "Włącz widżety zrzutów ekranów na obsługiwanych widżetach",
+ "Show empty room list headings": "Pokaż nagłówki z pustym pokojem",
+ "In encrypted rooms, like this one, URL previews are disabled by default to ensure that your homeserver (where the previews are generated) cannot gather information about links you see in this room.": "W zaszyfrowanych pokojach, takich jak ten, podgląd adresów URL jest domyślnie wyłączony, aby upewnić się, że serwer (w którym generowane są podglądy) nie może zbierać informacji o linkach widocznych w tym pokoju.",
+ "When someone puts a URL in their message, a URL preview can be shown to give more information about that link such as the title, description, and an image from the website.": "Gdy ktoś umieści URL w wiadomości, można wyświetlić podgląd adresu URL, aby podać więcej informacji o tym łączu, takich jak tytuł, opis i obraz ze strony internetowej.",
+ "This event could not be displayed": "Ten event nie może zostać wyświetlony",
+ "This room has been replaced and is no longer active.": "Ten pokój został zamieniony i nie jest już aktywny.",
+ "The conversation continues here.": "Konwersacja jest kontynuowana tutaj.",
+ "System Alerts": "Alerty systemowe",
+ "You don't currently have any stickerpacks enabled": "Nie masz obecnie włączonych żadnych pakietów naklejek",
+ "Stickerpack": "Pakiet naklejek",
+ "This room is a continuation of another conversation.": "Ten pokój jest kontynuacją innej rozmowy.",
+ "Click here to see older messages.": "Kliknij tutaj, aby zobaczyć starsze wiadomości.",
+ "This homeserver has hit its Monthly Active User limit so some users will not be able to log in.": "Ten serwer osiągnął miesięczny limit aktywnych użytkowników, więc niektórzy użytkownicy nie będą mogli się zalogować.",
+ "This homeserver has exceeded one of its resource limits so some users will not be able to log in.": "Ten serwer przekroczył jeden z limitów, więc niektórzy użytkownicy nie będą mogli się zalogować.",
+ "%(severalUsers)sjoined %(count)s times|other": "%(severalUsers)s dołączyli(-ły) %(count)s razy",
+ "%(oneUser)sjoined %(count)s times|other": "%(oneUser)s dołączył(a) %(count)s razy",
+ "%(oneUser)sjoined %(count)s times|one": "%(oneUser)s dołączył(a)",
+ "%(severalUsers)sleft %(count)s times|one": "%(severalUsers)s wyszli(-ły)",
+ "Internal room ID: ": "Wewnętrzny identyfikator pokoju ",
+ "were invited %(count)s times|one": "zostali(-ły) zaproszeni(-one)",
+ "Show developer tools": "Pokaż narzędzia deweloperskie",
+ "An email address is required to register on this homeserver.": "Adres e-mail jest wymagany do rejestracji na tym serwerze domowym.",
+ "A phone number is required to register on this homeserver.": "Numer telefonu jest wymagany do rejestracji na tym serwerze domowym.",
+ "Updating Riot": "Aktualizowanie Riot",
+ "Submit Debug Logs": "Wyślij dzienniki błędów",
+ "Please contact your service administrator to continue using this service.": "Proszę, skontaktuj się z administratorem aby korzystać dalej z funkcji.",
+ "Only room administrators will see this warning": "Tylko administratorzy pokojów widzą to ostrzeżenie",
+ "Open Devtools": "Otwórz narzędzia deweloperskie",
+ "Clear cache and resync": "Wyczyść pamięć podręczną i zsynchronizuj ponownie",
+ "Riot now uses 3-5x less memory, by only loading information about other users when needed. Please wait whilst we resynchronise with the server!": "Riot używa teraz 3-5x mniej pamięci, ładując informacje o innych użytkownikach tylko wtedy, gdy jest to konieczne. Poczekaj, aż ponownie zsynchronizujemy się z serwerem!",
+ "If the other version of Riot is still open in another tab, please close it as using Riot on the same host with both lazy loading enabled and disabled simultaneously will cause issues.": "Jeśli inna wersja Riot jest nadal otwarta w innej zakładce, proszę zamknij ją, ponieważ używanie Riot na tym samym komputerze z włączonym i wyłączonym jednocześnie leniwym ładowaniem będzie powodować problemy.",
+ "And %(count)s more...|other": "I %(count)s więcej…"
}
diff --git a/src/i18n/strings/ro.json b/src/i18n/strings/ro.json
new file mode 100644
index 0000000000..0967ef424b
--- /dev/null
+++ b/src/i18n/strings/ro.json
@@ -0,0 +1 @@
+{}
diff --git a/src/i18n/strings/ru.json b/src/i18n/strings/ru.json
index 25e0d0b78d..b711b43447 100644
--- a/src/i18n/strings/ru.json
+++ b/src/i18n/strings/ru.json
@@ -1234,5 +1234,7 @@
"Put a link back to the old room at the start of the new room so people can see old messages": "Разместим ссылку на старую комнату, чтобы люди могли видеть старые сообщения",
"Please contact your service administrator to continue using this service.": "Пожалуйста, обратитесь к вашему администратору, чтобы продолжить использовать этот сервис.",
"Increase performance by only loading room members on first view": "Увеличьте производительность, загрузив только список участников комнаты",
- "Lazy loading members not supported": "Задержка загрузки элементов не поддерживается"
+ "Lazy loading members not supported": "Задержка загрузки элементов не поддерживается",
+ "Registration Required": "Требуется регистрация",
+ "You need to register to do this. Would you like to register now?": "Необходимо зарегистрироваться. Хотите зарегистрироваться?"
}
diff --git a/src/i18n/strings/sq.json b/src/i18n/strings/sq.json
index 72097f8ab1..12a30ef657 100644
--- a/src/i18n/strings/sq.json
+++ b/src/i18n/strings/sq.json
@@ -1,45 +1,45 @@
{
- "This email address is already in use": "Kjo adresë e-mail-i tashmë është në përdorim",
- "This phone number is already in use": "Ky numër telefoni tashmë është në përdorim",
+ "This email address is already in use": "Kjo adresë email është tashmë në përdorim",
+ "This phone number is already in use": "Ky numër telefoni është tashmë në përdorim",
"Failed to verify email address: make sure you clicked the link in the email": "Vërtetimi i adresës e-mail i pasukseshëm: Sigurohu që ke klikuar lidhjen në e-mail",
- "The platform you're on": "Platforma që jë duke përdorur",
+ "The platform you're on": "Platforma ku gjendeni",
"The version of Riot.im": "Versioni i Riot.im-it",
"Whether or not you're logged in (we don't record your user name)": "A je i lajmëruar apo jo (ne nuk do të inçizojmë emrin përdorues tëndë)",
- "Your language of choice": "Gjuha jote e zgjedhur",
- "Which officially provided instance you are using, if any": "Cilën instancë zyrtarisht të ofruar je duke përdorur, në rast që je",
+ "Your language of choice": "Gjuha juaj e zgjedhur",
+ "Which officially provided instance you are using, if any": "Cilën instancë të furnizuar zyrtarish po përdorni, në pastë",
"Whether or not you're using the Richtext mode of the Rich Text Editor": "A je duke e përdorur mënyrën e tekstit të pasuruar të redaktionuesit të tekstit të pasuruar apo jo",
- "Your homeserver's URL": "URL-ja e server-it shtëpiak tëndë",
- "Your identity server's URL": "URL-ja e server-it identiteti tëndë",
+ "Your homeserver's URL": "URL e Shërbyesit tuaj Home",
+ "Your identity server's URL": "URL e shërbyesit tuaj të identiteteve",
"Analytics": "Analiza",
"The information being sent to us to help make Riot.im better includes:": "Informacionet që dërgohen për t'i ndihmuar Riot.im-it të përmirësohet përmbajnë:",
"Where this page includes identifiable information, such as a room, user or group ID, that data is removed before being sent to the server.": "Kur kjo faqe pëmban informacione që mund të të identifikojnë, sikur një dhomë, përdorues apo identifikatues grupi, këto të dhëna do të mënjanohen para se t‘i dërgohën një server-it.",
- "Call Failed": "Thirrja nuk mundej të realizohet",
+ "Call Failed": "Thirrja Dështoi",
"There are unknown devices in this room: if you proceed without verifying them, it will be possible for someone to eavesdrop on your call.": "Pajisje të panjohura ndodhen në këtë dhomë: nësë vazhdon pa i vërtetuar, është e mundshme që dikush të jua përgjon thirrjen.",
"Review Devices": "Rishiko pajisjet",
- "Call Anyway": "Thirr prapëseprapë",
- "Answer Anyway": "Prano prapëseprapë",
- "Call": "Thirr",
- "Answer": "Prano",
+ "Call Anyway": "Thirre Sido Qoftë",
+ "Answer Anyway": "Përgjigju Sido Qoftë",
+ "Call": "Thirrje",
+ "Answer": "Përgjigje",
"Call Timeout": "Skadim kohe thirrjeje",
- "The remote side failed to pick up": "Ana e kundërt nuk arriti të pranojë",
+ "The remote side failed to pick up": "Ana e largët dështoi të përgjigjet",
"Unable to capture screen": "Ekrani nuk mundi të inçizohej",
"Existing Call": "Thirrje aktuale",
- "You are already in a call.": "Tashmë je në thirrje.",
+ "You are already in a call.": "Jeni tashmë në një thirrje.",
"VoIP is unsupported": "VoIP nuk mbulohet",
"You cannot place VoIP calls in this browser.": "Thirrjet me VoIP nuk mbulohen nga ky kërkues uebi.",
- "You cannot place a call with yourself.": "Nuk mund të realizosh thirrje me vetveten.",
+ "You cannot place a call with yourself.": "S’mund të bëni thirrje me vetveten.",
"Conference calls are not supported in this client": "Thirrjet konference nuk mbulohen nga ky klienti",
"Conference calls are not supported in encrypted rooms": "Thirrjet konference nuk mbulohen në dhoma të shifruara",
- "Warning!": "Paralajmërim!",
+ "Warning!": "Sinjalizim!",
"Conference calling is in development and may not be reliable.": "Thirrja konference ende është në zhvillim dhe mund të jetë e paqëndrueshme.",
"Failed to set up conference call": "Thirrja konference nuk mundi të realizohej",
"Conference call failed.": "Thirrja konference dështoi.",
- "The file '%(fileName)s' failed to upload": "Fajli '%(fileName)s' nuk mundi të mbartet",
+ "The file '%(fileName)s' failed to upload": "Dështoi ngarkimi i kartelës '%(fileName)s'",
"The file '%(fileName)s' exceeds this home server's size limit for uploads": "Fajli '%(fileName)s' tejkalon kufirin madhësie për mbartje e këtij server-i shtëpiak",
- "Upload Failed": "Mbartja dështoi",
+ "Upload Failed": "Ngarkimi Dështoi",
"Failure to create room": "Dhoma nuk mundi të krijohet",
"Server may be unavailable, overloaded, or you hit a bug.": "Server-i është i padisponueshëm, i ngarkuar tej mase, apo ka një gabim.",
- "Send anyway": "Dërgo prapëseprapë",
+ "Send anyway": "Dërgoje sido qoftë",
"Send": "Dërgoje",
"Sun": "Die",
"Mon": "Hën",
@@ -51,15 +51,15 @@
"%(weekDayName)s, %(monthName)s %(day)s %(time)s": "%(weekDayName)s, %(day)s %(monthName)s %(time)s",
"%(weekDayName)s, %(monthName)s %(day)s %(fullYear)s": "%(weekDayName)s, %(day)s %(monthName)s %(fullYear)s",
"%(weekDayName)s, %(monthName)s %(day)s %(fullYear)s %(time)s": "%(weekDayName)s, %(day)s %(monthName)s %(fullYear)s %(time)s",
- "Who would you like to add to this community?": "Kë kishe dashur të shtosh në këtë komunitet?",
+ "Who would you like to add to this community?": "Kë do të donit të shtonit te kjo bashkësi?",
"Warning: any person you add to a community will be publicly visible to anyone who knows the community ID": "Paralajmërim: se cili që e shton në një komunitet do t‘i doket se cilit që e di identifikatuesin e komunitetit",
- "Invite new community members": "Fto anëtar të ri komuniteti",
- "Name or matrix ID": "Emri apo identifikatuesi matrix-i",
+ "Invite new community members": "Ftoni anëtarë të rinj bashkësie",
+ "Name or matrix ID": "Emër ose ID matrix-i",
"Invite to Community": "Fto në komunitet",
"Which rooms would you like to add to this community?": "Cilët dhoma kishe dashur t‘i shtosh në këtë komunitet?",
"Show these rooms to non-members on the community page and room list?": "A t‘i duken dhomat joanëtarëvë ne faqën komuniteti si dhe listën dhome?",
- "Add rooms to the community": "Shto dhoma komunitetit",
- "Add to community": "Shto në komunitet",
+ "Add rooms to the community": "Shtoni dhoma te bashkësia",
+ "Add to community": "Shtoje te kjo bashkësi",
"Jan": "Jan",
"Feb": "Shk",
"Mar": "Mar",
@@ -77,42 +77,42 @@
"Failed to invite users to community": "Përdoruesit nuk mundën të ftohën",
"Failed to invite users to %(groupId)s": "Nuk mundën të ftohën përdoruesit në %(groupId)s",
"Failed to add the following rooms to %(groupId)s:": "Nuk mundën të shtohen dhomat vijuese në %(groupId)s:",
- "Unnamed Room": "Dhomë paemër",
+ "Unnamed Room": "Dhomë e Paemërtuar",
"Riot does not have permission to send you notifications - please check your browser settings": "Riot nuk ka lejim të të dergojë lajmërime - të lutem kontrollo rregullimet e kërkuesit ueb tëndë",
"Riot was not given permission to send notifications - please try again": "Riot-it nuk i është dhënë leje të dërgojë lajmërime - të lutëm përpjeku serish",
"Unable to enable Notifications": "Lajmërimet nuk mundën të lëshohen",
- "This email address was not found": "Kjo adresë e-mail-i nuk është gjetur",
- "Your email address does not appear to be associated with a Matrix ID on this Homeserver.": "Adresa e-mail-i yt nuk duket së është lidhur më një indentifikatues matrix në këtë server shtëpiak.",
- "Default": "Standardi",
- "Restricted": "Kufizuar",
+ "This email address was not found": "Kjo adresë email s’u gjet",
+ "Your email address does not appear to be associated with a Matrix ID on this Homeserver.": "Adresa juaj email s’duket të jetë e përshoqëruar me një ID Matrix në këtë shërbyes Home.",
+ "Default": "Parazgjedhje",
+ "Restricted": "E kufizuar",
"Moderator": "Moderator",
- "Admin": "Administrator",
- "Start a chat": "Fillo bisedë",
- "Who would you like to communicate with?": "Me kë kishe dashur të bisedosh?",
- "Email, name or matrix ID": "E-mail-i, emri apo identifikatuesi matrix",
- "Start Chat": "Fillo bisedë",
- "Invite new room members": "Fto anëtar dhome të rinjë",
- "Who would you like to add to this room?": "Kë kishe dashur të shtosh në këtë dhomë?",
- "Send Invites": "Dërgo ftesa",
+ "Admin": "Përgjegjës",
+ "Start a chat": "Nisni një fjalosje",
+ "Who would you like to communicate with?": "Me kë do të donit të komunikonit?",
+ "Email, name or matrix ID": "Email, emër ose ID matrix",
+ "Start Chat": "Filloni Fjalosje",
+ "Invite new room members": "Ftoni anëtarë të rinj dhome",
+ "Who would you like to add to this room?": "Kë do të donit të shtonit te kjo dhomë?",
+ "Send Invites": "Dërgoni Ftesa",
"Failed to invite user": "Përdoruesi nuk mundi të ftohej",
"Operation failed": "Veprimi dështoi",
"Failed to invite": "Nuk mundi të ftohet",
"Failed to invite the following users to the %(roomName)s room:": "Përdoruesit vijuesë nuk mundën të ftohen në dhomën %(roomName)s:",
- "You need to be logged in.": "Duhesh të jesh i lajmëruar.",
- "You need to be able to invite users to do that.": "Duhesh të kesh aftësinë të ftosh përdorues për të bërë këtë.",
+ "You need to be logged in.": "Lypset të jeni i futur në llogarinë tuaj.",
+ "You need to be able to invite users to do that.": "Që ta bëni këtë, lypset të jeni në gjendje të ftoni përdorues.",
"Unable to create widget.": "Widget-i nuk mundi të krijohet.",
"Failed to send request.": "Lutja nuk mundi të dërgohej.",
- "This room is not recognised.": "Kjo dhomë nuk është e njohur.",
+ "This room is not recognised.": "Kjo dhomë s’është e pranuar.",
"Power level must be positive integer.": "Niveli fuqie duhet të jetë numër i plotë pozitiv.",
- "You are not in this room.": "Ti nuk je në këtë dhomë.",
- "You do not have permission to do that in this room.": "Nuk ke leje të bësh këtë në këtë dhomë.",
- "Room %(roomId)s not visible": "Dhoma %(roomId)s e padukshme",
- "Usage": "Përdorimi",
+ "You are not in this room.": "S’gjendeni në këtë dhomë.",
+ "You do not have permission to do that in this room.": "S’keni leje për ta bërë këtë në këtë dhomë.",
+ "Room %(roomId)s not visible": "Dhoma %(roomId)s s’është e dukshme",
+ "Usage": "Përdorim",
"/ddg is not a command": "/ddg s'është komandë",
"To use it, just wait for autocomplete results to load and tab through them.": "Për të përdorur, thjesht prit derisa të mbushën rezultatat vetëplotësuese dhe pastaj shfletoji.",
- "Unrecognised room alias:": "Emri i dhomës të panjohur:",
- "Ignored user": "Përdoruesë të shpërfillur",
- "You are now ignoring %(userId)s": "Tash %(userId)s shpërfillet prej teje",
+ "Unrecognised room alias:": "Alias dhome jo i pranuar:",
+ "Ignored user": "Përdorues i shpërfillur",
+ "You are now ignoring %(userId)s": "Tani po e shpërfillni %(userId)s",
"Unignored user": "Përdorues jo më i shpërfillur",
"Fetching third party location failed": "Dështoi prurja e vendndodhjes së palës së tretë",
"A new version of Riot is available.": "Ka gati një version të ri Riot-it.",
@@ -269,7 +269,7 @@
"Enable audible notifications in web client": "Aktivizoni njoftime audio te klienti web",
"Register": "Regjistrohuni",
"Off": "Off",
- "Edit": "Përpunoni",
+ "Edit": "Përpuno",
"Riot does not know how to join a room on this network": "Riot-i nuk di si të hyjë në një dhomë në këtë rrjet",
"Mentions only": "Vetëm @përmendje",
"remove %(name)s from the directory.": "hiqe %(name)s prej drejtorie.",
@@ -287,7 +287,7 @@
"%(count)s Members|one": "%(count)s Anëtar",
"Developer Tools": "Mjete Zhvilluesi",
"View Source": "Shihini Burimin",
- "Custom Server Options": "Mundësi Vetjake Shërbyesi",
+ "Custom Server Options": "Mundësi Shërbyesi Vetjak",
"Event Content": "Lëndë Akti",
"Rooms": "Dhoma",
"#example": "#shembull",
@@ -295,5 +295,429 @@
"With your current browser, the look and feel of the application may be completely incorrect, and some or all features may not function. If you want to try it anyway you can continue, but you are on your own in terms of any issues you may encounter!": "Me shfletuesin tuaj të tanishëm, pamja dhe ndjesitë nga aplikacioni mund të jenë plotësisht të pasakta, dhe disa nga ose krejt veçoritë të mos funksionojnë. Nëse doni ta provoni sido qoftë, mund të vazhdoni, por mos u ankoni për çfarëdo problemesh që mund të hasni!",
"Checking for an update...": "Po kontrollohet për një përditësim…",
"There are advanced notifications which are not shown here": "Ka njoftime të thelluara që nuk shfaqen këtu",
- "Show empty room list headings": "Shfaqi emrat e listave të zbrazëta dhomash"
+ "Show empty room list headings": "Shfaqi emrat e listave të zbrazëta dhomash",
+ "PM": "PM",
+ "AM": "AM",
+ "Room name or alias": "Emër dhome ose alias",
+ "Unknown (user, device) pair:": "Çift (përdorues, pajisje) i panjohur:",
+ "Device already verified!": "Pajisjeje tashmë e verifikuar!",
+ "Verified key": "Kyç i verifikuar",
+ "Unrecognised command:": "Urdhër jo i pranuar: ",
+ "Reason": "Arsye",
+ "%(senderName)s requested a VoIP conference.": "%(senderName)s kërkoi një konferencë VoIP.",
+ "VoIP conference started.": "Konferenca VoIP filloi.",
+ "VoIP conference finished.": "Konferenca VoIP përfundoi.",
+ "Someone": "Dikush",
+ "(no answer)": "(s’ka përgjigje)",
+ "%(senderName)s made future room history visible to all room members, from the point they are invited.": "%(senderName)s e bëri historikun e ardhshëm të dhomës të dukshëm për krejt anëtarët e dhomës, prej çastit kur janë ftuar.",
+ "%(senderName)s made future room history visible to all room members, from the point they joined.": "%(senderName)s e bëri historikun e ardhshëm të dhomës të dukshëm për krejt anëtarët e dhomës, prej çastit kur morën pjesë.",
+ "%(senderName)s made future room history visible to all room members.": "%(senderName)s e bëri historikun e ardhshëm të dhomës të dukshëm për krejt anëtarët e dhomës.",
+ "%(senderName)s made future room history visible to anyone.": "%(senderName)s e bëri historikun e ardhshëm të dhomës të dukshëm për këdo.",
+ "%(displayName)s is typing": "%(displayName)s po shtyp",
+ "Use compact timeline layout": "Përdorni skemë grafike kompakte për rrjedhën kohore",
+ "Always show message timestamps": "Shfaq përherë vula kohore për mesazhet",
+ "Room Colour": "Ngjyrë Dhome",
+ "unknown caller": "thirrës i panjohur",
+ "Decline": "Hidhe poshtë",
+ "Accept": "Pranoje",
+ "Incorrect verification code": "Kod verifikimi i pasaktë",
+ "Enter Code": "Jepni Kod",
+ "Submit": "Parashtroje",
+ "Phone": "Telefon",
+ "Add phone number": "Shtoni numër telefoni",
+ "Add": "Shtojeni",
+ "Upload new:": "Ngarko të re:",
+ "No display name": "S’ka emër shfaqjeje",
+ "New passwords don't match": "Fjalëkalimet e reja s’përputhen",
+ "Passwords can't be empty": "Fjalëkalimet s’mund të jenë të zbrazët",
+ "Export E2E room keys": "Eksporto kyçe dhome E2E",
+ "Do you want to set an email address?": "Doni të caktoni një adresë email?",
+ "Current password": "Fjalëkalimi i tanishëm",
+ "Password": "Fjalëkalim",
+ "New Password": "Fjalëkalim i Ri",
+ "Confirm password": "Ripohoni frazëkalimin",
+ "Change Password": "Ndryshoni Fjalëkalimin",
+ "Authentication": "Mirëfilltësim",
+ "Delete %(count)s devices|one": "Fshije pajisjen",
+ "Device ID": "ID Pajisjeje",
+ "Device Name": "Emër Pajisjeje",
+ "Last seen": "Parë së fundi më",
+ "Select devices": "Përzgjidhni pajisje",
+ "Disable Notifications": "Çaktivizo Njoftimet",
+ "Enable Notifications": "Aktivizo Njoftimet",
+ "Invalid alias format": "Format i pavlefshëm aliasesh",
+ "Invalid address format": "Format i pavlefshëm adresash",
+ "not specified": "e papërcaktuar",
+ "not set": "s’është caktuar",
+ "Remote addresses for this room:": "Adresa të largëta për këtë dhomë:",
+ "Addresses": "Adresa",
+ "The main address for this room is": "Adresa kryesore për këtë dhomë është",
+ "Local addresses for this room:": "Adresa vendore për këtë dhomë:",
+ "This room has no local addresses": "Kjo dhomë s’ka adresë vendore",
+ "Invalid community ID": "ID bashkësie e pavlefshme",
+ "URL Previews": "Paraparje URL-sh",
+ "Add a widget": "Shtoni një widget",
+ "Drop File Here": "Hidheni Kartelën Këtu",
+ "Drop file here to upload": "Hidheni kartelën këtu që të ngarkohet",
+ " (unsupported)": " (e pambuluar)",
+ "%(senderName)s sent an image": "%(senderName)s dërgoi një figurë",
+ "%(senderName)s sent a video": "%(senderName)s dërgoi një video",
+ "Options": "Mundësi",
+ "Key request sent.": "Kërkesa për kyç u dërgua.",
+ "Encrypted by a verified device": "Fshehtëzuar nga një pajisje e verifikuar",
+ "Encrypted by an unverified device": "Fshehtëzuar nga një pajisje e paverifikuar",
+ "Unencrypted message": "Mesazh i pafshehtëzuar",
+ "Please select the destination room for this message": "Ju lutemi, përzgjidhni dhomën vendmbërritje për këtë mesazh",
+ "Blacklisted": "Në Listë të Zezë",
+ "Verified": "E verifikuar",
+ "Unverified": "I paverifikuar",
+ "device id: ": "ID pajisjeje: ",
+ "Kick": "Përzëre",
+ "Kick this user?": "Të përzihet ky përdorues?",
+ "Unban": "Hiqja dëbimin",
+ "Ban": "Dëboje",
+ "Ban this user?": "Të dëbohet ky përdorues?",
+ "Are you sure?": "Jeni i sigurt?",
+ "You will not be able to undo this change as you are promoting the user to have the same power level as yourself.": "S’do të jeni në gjendje ta zhbëni këtë ndryshim, ngaqë po e promovoni përdoruesin të ketë të njëjtën shkallë pushteti si ju vetë.",
+ "No devices with registered encryption keys": "S’ka pajisje me kyçe fshehtëzimi të regjistruar",
+ "Devices": "Pajisje",
+ "Unignore": "Shpërfille",
+ "Ignore": "Shpërfille",
+ "Mention": "Përmendje",
+ "Invite": "Ftoje",
+ "User Options": "Mundësi Përdoruesi",
+ "Direct chats": "Fjalosje të drejtpërdrejta",
+ "Make Moderator": "Kaloje Moderator",
+ "Admin Tools": "Mjete Përgjegjësi",
+ "Level:": "Nivel:",
+ "and %(count)s others...|other": "dhe %{count} të tjerë…",
+ "and %(count)s others...|one": "dhe një tjetër…",
+ "Filter room members": "Filtroni anëtarë dhome",
+ "Attachment": "Bashkëngjitje",
+ "Upload Files": "Ngarkoni Kartela",
+ "Are you sure you want to upload the following files?": "Jeni i sigurt se doni të ngarkohen kartelat vijuese?",
+ "Encrypted room": "Dhomë e fshehtëzuar",
+ "Unencrypted room": "Dhomë e pafshehtëzuar",
+ "Voice call": "Thirrje audio",
+ "Video call": "Thirrje video",
+ "Upload file": "Ngarkoni kartelë",
+ "Show Text Formatting Toolbar": "Shfaq Panel Formatimi Tekstesh",
+ "Send an encrypted reply…": "Dërgoni një përgjigje të fshehtëzuar…",
+ "Send a reply (unencrypted)…": "Dërgoni një përgjigje (të pafshehtëzuar)…",
+ "Send an encrypted message…": "Dërgoni një mesazh të fshehtëzuar…",
+ "Send a message (unencrypted)…": "Dërgoni një mesazh (të pafshehtëzuar)…",
+ "You do not have permission to post to this room": "S’keni leje të postoni në këtë dhomë",
+ "Server error": "Gabim shërbyesi",
+ "Command error": "Gabim urdhri",
+ "bold": "të trasha",
+ "italic": "të pjerrta",
+ "Markdown is disabled": "Markdown është i çaktivizuar",
+ "Markdown is enabled": "Markdown është i aktivizuar",
+ "Loading...": "Po ngarkohet…",
+ "Pinned Messages": "Mesazhe të Fiksuar",
+ "Jump to message": "Kalo te mesazhi",
+ "%(duration)ss": "%(duration)ss",
+ "%(duration)sm": "%(duration)sm",
+ "%(duration)sh": "%(duration)sh",
+ "%(duration)sd": "%(duration)sd",
+ "Online for %(duration)s": "Në linjë për %(duration)s",
+ "Idle for %(duration)s": "I plogësht për %(duration)s",
+ "Offline for %(duration)s": "Jo në linjë për %(duration)s",
+ "Idle": "I plogësht",
+ "Offline": "Jo në linjë",
+ "Unknown": "I panjohur",
+ "Seen by %(userName)s at %(dateTime)s": "Parë nga %(userName)s më %(dateTime)s",
+ "Save": "Ruaje",
+ "Join Room": "Hyni në dhomë",
+ "Upload avatar": "Ngarkoni avatar",
+ "Remove avatar": "Hiqe avatarin",
+ "Settings": "Rregullime",
+ "Forget room": "Harroje dhomën",
+ "Show panel": "Shfaq panel",
+ "Community Invites": "Ftesa Bashkësie",
+ "Invites": "Ftesa",
+ "Favourites": "Të parapëlqyer",
+ "People": "Persona",
+ "Low priority": "Me përparësi të ulët",
+ "You may wish to login with a different account, or add this email to this account.": "Mund të doni të hyni me një llogari tjetër, ose ta shtoni këtë email te kjo llogari.",
+ "You have been invited to join this room by %(inviterName)s": "Jeni ftuar të merrni pjesë në këtë dhomë nga %(inviterName)s",
+ "Reason: %(reasonText)s": "Arsye: %(reasonText)s",
+ "Rejoin": "Rifutuni",
+ "You have been kicked from %(roomName)s by %(userName)s.": "Jeni përzënë prej %(roomName)s nga %(userName)s.",
+ "You have been kicked from this room by %(userName)s.": "Jeni përzënë nga kjo dhomë prej %(userName)s.",
+ "You have been banned from %(roomName)s by %(userName)s.": "Jeni dëbuar prej %(roomName)s ngas %(userName)s.",
+ "You have been banned from this room by %(userName)s.": "Jeni dëbuar prej kësaj dhome nga %(userName)s.",
+ "This room": "Këtë dhomë",
+ "%(roomName)s does not exist.": "%(roomName)s s’ekziston.",
+ "You are trying to access a room.": "Po provoni të hyni në një dhomë.",
+ "This is a preview of this room. Room interactions have been disabled": "Kjo është një paraparje e kësaj dhome. Ndërveprimet në dhomë janë çaktivizuar",
+ "Banned by %(displayName)s": "Dëbuar nga %(displayName)s",
+ "Privacy warning": "Sinjalizim privatësie",
+ "The visibility of existing history will be unchanged": "Dukshmëria e historikut ekzistues nuk do të ndryshohet.",
+ "You should not yet trust it to secure data": "S’duhet t’i zini ende besë për sigurim të dhënash.",
+ "Enable encryption": "Aktivizoni fshehtëzim",
+ "Encryption is enabled in this room": "Në këtë dhomë është i aktivizuar fshehtëzimi",
+ "Encryption is not enabled in this room": "Në këtë dhomë s’është i aktivizuar fshehtëzimi",
+ "The default role for new room members is": "Roli parazgjedhje për përdorues të ri në dhomë është",
+ "Privileged Users": "Përdorues të Privilegjuar",
+ "Banned users": "Përdorues të dëbuar",
+ "Leave room": "Dilni nga dhomë",
+ "Tagged as: ": "Etiketuar me:",
+ "Click here to fix": "Klikoni këtu për ta ndrequr",
+ "Who can access this room?": "Kush mund të hyjë në këtë dhomë?",
+ "Only people who have been invited": "Vetëm persona që janë ftuar",
+ "Anyone who knows the room's link, apart from guests": "Cilido që di lidhjen e dhomës, hiq vizitorët",
+ "Anyone who knows the room's link, including guests": "Cilido që di lidhjen e dhomës, përfshi vizitorë",
+ "Who can read history?": "Kush mund të lexojë historikun?",
+ "Anyone": "Cilido",
+ "Permissions": "Leje",
+ "Advanced": "Të mëtejshme",
+ "Add a topic": "Shtoni një temë",
+ "Decrypt %(text)s": "Shfshehtëzoje %(text)s",
+ "Copied!": "U kopjua!",
+ "Add an Integration": "Shtoni një Integrim",
+ "This Home Server would like to make sure you are not a robot": "Ky Shërbyes Home do të donte të sigurohej se s’jeni robot",
+ "Sign in with CAS": "Hyni me CAS",
+ "You can use the custom server options to sign into other Matrix servers by specifying a different Home server URL.": "Mund t’i përdorni mundësitë e shërbyesit vetjak për të hyrë në shërbyes të tjerë Matrix, duke dhënë URL-në e një tjetër shërbyesi Home.",
+ "Password:": "Fjalëkalim:",
+ "Please check your email to continue registration.": "Ju lutemi, që të vazhdojë regjistrimi, kontrolloni email-in tuaj.",
+ "Please enter the code it contains:": "Ju lutemi, jepni kodin që përmbahet:",
+ "Code": "Kod",
+ "Start authentication": "Fillo mirëfilltësim",
+ "Username on %(hs)s": "Emër përdoruesi në %(hs)s",
+ "User name": "Emër përdoruesi",
+ "Mobile phone number": "Numër telefoni celular",
+ "Forgot your password?": "Harruat fjalëkalimin tuaj?",
+ "Sign in with": "Hyni me",
+ "Email address": "Adresë email",
+ "Sign in": "Hyni",
+ "Email address (optional)": "Adresë email (opsionale)",
+ "You are registering with %(SelectedTeamName)s": "Po regjistroheni te %(SelectedTeamName)s",
+ "Mobile phone number (optional)": "Numër telefoni celular (opsionale)",
+ "Default server": "Shërbyes parazgjedhje",
+ "Custom server": "Shërbyes vetjak",
+ "Home server URL": "URL shërbyesi Home",
+ "Identity server URL": "URL shërbyesi identitetesh",
+ "What does this mean?": "Ç’do të thotë kjo?",
+ "Filter community members": "Filtroni anëtarë bashkësie",
+ "Something went wrong!": "Diçka shkoi ters!",
+ "Visibility in Room List": "Dukshmëri në Listë Dhomash",
+ "Visible to everyone": "I dukshëm për këdo",
+ "Only visible to community members": "E dukshme vetëm për anëtarë të bashkësisë",
+ "Filter community rooms": "Filtroni dhoma bashkësie",
+ "You're not currently a member of any communities.": "Hëpërhë, s’jeni anëtar i ndonjë bashkësie.",
+ "Unknown Address": "Adresë e Panjohur",
+ "Allow": "Lejoje",
+ "Revoke widget access": "Shfuqizo hyrje widget",
+ "Create new room": "Krijoni dhomë të re",
+ "Unblacklist": "Hiqe nga listë e zezë",
+ "Blacklist": "Listë e zezë",
+ "Unverify": "Hiqi verifikimin",
+ "Verify...": "Verifikoni…",
+ "No results": "S’ka përfundime",
+ "Delete": "Fshije",
+ "Communities": "Bashkësi",
+ "Home": "Kreu",
+ "Integrations Error": "Gabim Integrimesh",
+ "Could not connect to the integration server": "S’u lidh dot te shërbyesi i integrimt",
+ "Manage Integrations": "Administroni Integrime",
+ "were invited %(count)s times|one": "janë ftuar",
+ "was invited %(count)s times|other": "është ftuar %(count)s herë",
+ "was invited %(count)s times|one": "është ftuar",
+ "were banned %(count)s times|one": "janë dëbuar",
+ "was banned %(count)s times|other": "është dëbuar %(count)s herë",
+ "was banned %(count)s times|one": "është dëbuar",
+ "were unbanned %(count)s times|one": "u është hequr dëbimi",
+ "was unbanned %(count)s times|other": "i është hequr dëbimi %(count)s herë",
+ "was unbanned %(count)s times|one": "i është hequr dëbimi",
+ "were kicked %(count)s times|one": "janë përzënë",
+ "was kicked %(count)s times|other": "është përzënë %(count)s herë",
+ "was kicked %(count)s times|one": "është përzënë",
+ "%(items)s and %(count)s others|other": "%(items)s dhe %(count)s të tjerë",
+ "%(items)s and %(count)s others|one": "%(items)s dhe një tjetër",
+ "%(items)s and %(lastItem)s": "%(items)s dhe %(lastItem)s",
+ "collapse": "tkurre",
+ "expand": "zgjeroje",
+ "Custom level": "Nivel vetjak",
+ "In reply to": "Në Përgjigje të",
+ "Room directory": "Drejtori Dhome",
+ "Start chat": "Filloni fjalosje",
+ "Add User": "Shtoni Përdorues",
+ "Matrix ID": "ID Matrix",
+ "Matrix Room ID": "ID Matrix dhome",
+ "email address": "adresë email",
+ "You have entered an invalid address.": "Keni dhënë adresë email të pavlefshme.",
+ "Start new chat": "Filloni fjalosje të re",
+ "Confirm Removal": "Ripohoni Heqjen",
+ "Create Community": "Krijoje Bashkësinë",
+ "Community Name": "Emër Bashkësie",
+ "Example": "Shembull",
+ "Community ID": "ID Bashkësie",
+ "example": "shembull",
+ "Create": "Krijoje",
+ "Create Room": "Krijoje Dhomën",
+ "Room name (optional)": "Emër dhome (në daçi)",
+ "Advanced options": "Mundësi të mëtejshme",
+ "Unknown error": "Gabim i panjohur",
+ "Incorrect password": "Fjalëkalim i pasaktë",
+ "Deactivate Account": "Çaktivizoje Llogarinë",
+ "Device name": "Emër pajisjeje",
+ "Device key": "Kyç pajisjeje",
+ "Verify device": "Verifiko pajisjen",
+ "An error has occurred.": "Ndodhi një gabim.",
+ "You added a new device '%(displayName)s', which is requesting encryption keys.": "Shtuat një pajisje të re '%(displayName)s', e cila po kërkon kyçe fshehtëzimi.",
+ "Your unverified device '%(displayName)s' is requesting encryption keys.": "Pajisja juaj e paverifikuar '%(displayName)s' po kërkon kyçe fshehtëzimi.",
+ "Start verification": "Fillo verifikimin",
+ "Share without verifying": "Ndajeni me të tjerë pa e verifikuar",
+ "Ignore request": "Shpërfille kërkesën",
+ "Loading device info...": "Po ngarkohen të dhëna pajisjeje…",
+ "Encryption key request": "Kërkesë kyçi fshehtëzimesh",
+ "Invalid Email Address": "Adresë Email e Pavlefshme",
+ "This doesn't appear to be a valid email address": "Kjo s’duket se është adresë email e vlefshme",
+ "Verification Pending": "Verifikim Në Pritje të Miratimit",
+ "Skip": "Anashkaloje",
+ "User names may only contain letters, numbers, dots, hyphens and underscores.": "Emrat e përdoruesve mund të përmbajnë vetëm shkronja, numra, pika, vija ndarëse dhe nënvija",
+ "Username not available": "Emri i përdoruesit s’është i lirë",
+ "Username invalid: %(errMessage)s": "Emër përdoruesi i pavlefshëm: %(errMessage)s",
+ "Username available": "Emri i përdoruesit është i lirë",
+ "Room contains unknown devices": "Dhoma përmban pajisje të panjohura",
+ "Unknown devices": "Pajisje të panjohura",
+ "Private Chat": "Fjalosje Private",
+ "Public Chat": "Fjalosje Publike",
+ "Custom": "Vetjak",
+ "Alias (optional)": "Alias (opsional)",
+ "Name": "Emër",
+ "Topic": "Temë",
+ "Make this room private": "Kaloje këtë dhomë si private",
+ "Encrypt room": "Fshehtëzoje dhomën",
+ "You must register to use this functionality": "Që të përdorni këtë funksion, duhet të regjistroheni",
+ "Add rooms to the community summary": "Shtoni dhoma te përmbledhja mbi bashkësinë",
+ "Add to summary": "Shtoje te përmbledhja",
+ "Add a Room": "Shtoni një Dhomë",
+ "Add users to the community summary": "Shtoni përdorues te përmbledhja mbi bashkësinë",
+ "Who would you like to add to this summary?": "Kë do të donit të shtonit te kjo përmbledhje?",
+ "Add a User": "Shtoni një Përdorues",
+ "Leave Community": "Braktiseni Bashkësinë",
+ "Leave %(groupName)s?": "Të braktiset {groupName}?",
+ "Community Settings": "Rregullime Bashkësie",
+ "%(inviter)s has invited you to join this community": "%s ju ftoi të bëheni pjesë e kësaj bashkësie",
+ "You are an administrator of this community": "Jeni një përgjegjës i kësaj bashkësie",
+ "You are a member of this community": "Jeni anëtar i këtij ekipi",
+ "Long Description (HTML)": "Përshkrim i Gjatë (HTML)",
+ "Description": "Përshkrim",
+ "Reject invitation": "Hidheni tej ftesën",
+ "Are you sure you want to reject the invitation?": "Jeni i sigurt se doni të hidhet tej kjo ftesë?",
+ "Are you sure you want to leave the room '%(roomName)s'?": "Jeni i sigurt se doni të dilni nga dhoma '%(roomName)s'?",
+ "Signed Out": "I dalë",
+ "Old cryptography data detected": "U pikasën të dhëna kriptografie të vjetër",
+ "Logout": "Dalje",
+ "Your Communities": "Bashkësitë Tuaja",
+ "Create a new community": "Krijoni një bashkësi të re",
+ "You have no visible notifications": "S’keni njoftime të dukshme.",
+ "%(count)s of your messages have not been sent.|other": "Disa nga mesazhet tuaj s’janë dërguar.",
+ "%(count)s of your messages have not been sent.|one": "Mesazhi juaj s’u dërgua.",
+ "%(count)s new messages|other": "%(count)s mesazhe të rinj",
+ "%(count)s new messages|one": "%(count)s mesazh i ri",
+ "Active call": "Thirrje aktive",
+ "You seem to be in a call, are you sure you want to quit?": "Duket se jeni në një thirrje, jeni i sigurt se doni të dilet?",
+ "Search failed": "Kërkimi shtoi",
+ "No more results": "Jo më tepër përfundime",
+ "Room": "Dhomë",
+ "Clear filter": "Pastroje filtrin",
+ "Uploading %(filename)s and %(count)s others|other": "Po ngarkohet %(filename)s dhe %(count)s të tjera",
+ "Uploading %(filename)s and %(count)s others|zero": "Po ngarkohet %(filename)s",
+ "Uploading %(filename)s and %(count)s others|one": "Po ngarkohet %(filename)s dhe %(count)s tjetër",
+ "Light theme": "Temë e çelët",
+ "Dark theme": "Temë e errët",
+ "Status.im theme": "Temë Status.im",
+ "Can't load user settings": "S’ngarkohen dot rregullime përdoruesi",
+ "Server may be unavailable or overloaded": "Shërbyesi mund të jetë i pakapshëm ose i mbingarkuar",
+ "Sign out": "Dilni",
+ "Success": "Sukses",
+ "Remove %(threePid)s?": "Të hiqet %(threePid)s?",
+ "Refer a friend to Riot:": "Tregojini një shoku për Riot-in:",
+ "Interface Language": "Gjuhë Ndërfaqeje",
+ "User Interface": "Ndërfaqe Përdoruesi",
+ "Cryptography": "Kriptografi",
+ "Device ID:": "ID Pajisjeje:",
+ "Device key:": "Kyç pajisjeje:",
+ "Ignored Users": "Përdorues të Shpërfillur",
+ "Riot collects anonymous analytics to allow us to improve the application.": "Riot-i grumbullon të dhëna analitike anonime që të na lejojë ta përmirësojmë aplikacionin.",
+ "These are experimental features that may break in unexpected ways": "Këto janë veçori eksperimentale që mund të ngecin në rrugë të papritura",
+ "Use with caution": "Përdoreni me masë",
+ "Deactivate my account": "Çaktivizoje llogarinë time",
+ "Clear Cache": "Pastroje Fshehtinën",
+ "Updates": "Përditësime",
+ "Check for update": "Kontrollo për përditësime",
+ "Bulk Options": "Veprime Masive",
+ "No media permissions": "S’ka leje mediash",
+ "No Microphones detected": "S’u pikasën Mikrofona",
+ "No Webcams detected": "S’u pikasën kamera",
+ "Default Device": "Pajisje Parazgjedhje",
+ "Microphone": "Mikrofon",
+ "Camera": "Kamerë",
+ "VoIP": "VOIP",
+ "Email": "Email",
+ "Add email address": "Shtoni adresë email",
+ "Profile": "Profil",
+ "Display name": "Emër në ekran",
+ "Account": "Llogari",
+ "Logged in as:": "I futur si:",
+ "Access Token:": "Token Hyrjesh:",
+ "Identity Server is": "Shërbyes Identitetesh është",
+ "riot-web version:": "Version riot-web:",
+ "olm version:": "version olm:",
+ "The email address linked to your account must be entered.": "Duhet dhënë adresa email e lidhur me llogarinë tuaj.",
+ "Your password has been reset": "Fjalëkalimi juaj u ricaktua",
+ "Return to login screen": "Kthehuni te skena e hyrjeve",
+ "New password": "Fjalëkalim i ri",
+ "Confirm your new password": "Ripohoni fjalëkalimin tuaj të ri",
+ "Send Reset Email": "Dërgo Email Ricaktimi",
+ "Create an account": "Krijoni një llogari",
+ "Incorrect username and/or password.": "Emër përdoruesi dhe/ose fjalëkalim i pasaktë.",
+ "The phone number entered looks invalid": "Numri i telefonit që u dha duket i pavlefshëm",
+ "Sign in to get started": "Që t’ia filloni, bëni hyrjen",
+ "Set a display name:": "Caktoni emër ekrani",
+ "Upload an avatar:": "Ngarkoni një avatar:",
+ "This server does not support authentication with a phone number.": "Ky shërbyes nuk mbulon mirëfilltësim me një numër telefoni.",
+ "Missing password.": "Mungon fjalëkalimi.",
+ "Passwords don't match.": "Fjalëkalimet s’përputhen.",
+ "This doesn't look like a valid email address.": "Kjo s’duket si adresë email e vlefshme.",
+ "This doesn't look like a valid phone number.": "Ky s’duket si numër telefoni i vlefshëm.",
+ "You need to enter a user name.": "Lypset të jepni një emër përdoruesi.",
+ "I already have an account": "Kam tashmë një llogari",
+ "Bans user with given id": "Dëbon përdoruesin me ID-në e dhënë",
+ "Unbans user with given id": "I heq dëbimin përdoruesit me ID-në e dhënë",
+ "Sets the room topic": "Caktoni temë dhome",
+ "Kicks user with given id": "Përzë përdoruesin me ID-në e dhënë",
+ "Opens the Developer Tools dialog": "Hap dialogun Mjete Zhvilluesi",
+ "Commands": "Urdhra",
+ "Results from DuckDuckGo": "Përfundimet vijnë nga DuckDuckGo",
+ "Notify the whole room": "Njofto krejt dhomën",
+ "Room Notification": "Njoftim Dhome",
+ "Users": "Përdorues",
+ "unknown device": "pajisje e panjohur",
+ "NOT verified": "JO e verifikua",
+ "verified": "e verifikuar",
+ "Verification": "Verifikim",
+ "User ID": "ID përdoruesi",
+ "Curve25519 identity key": "Kyç identiteti Curve25519",
+ "none": "asnjë",
+ "Algorithm": "Algoritëm",
+ "unencrypted": "të pafshehtëzuara",
+ "Decryption error": "Gabim shfshehtëzimi",
+ "Session ID": "ID sesioni",
+ "End-to-end encryption information": "Të dhëna fshehtëzimi skaj-më-skaj",
+ "Event information": "Të dhëna akti",
+ "Sender device information": "Të dhëna pajisjeje dërguesi",
+ "Passphrases must match": "Frazëkalimet duhet të përputhen",
+ "Passphrase must not be empty": "Frazëkalimi s’mund të jetë i zbrazët",
+ "Export room keys": "Eksporto kyçe dhome",
+ "This process allows you to export the keys for messages you have received in encrypted rooms to a local file. You will then be able to import the file into another Matrix client in the future, so that client will also be able to decrypt these messages.": "Ky proces ju lejon të eksportoni te një kartelë vendore kyçet për mesazhe që keni marrë në dhoma të fshehtëzuara. Mandej do të jeni në gjendje ta importoni kartelën te një tjetër klient Matrix në të ardhmen, që kështu ai klient të jetë në gjendje t’i fshehtëzojë këto mesazhe.",
+ "Enter passphrase": "Jepni frazëkalimin",
+ "Confirm passphrase": "Ripohoni frazëkalimin",
+ "Export": "Eksporto",
+ "Import room keys": "Importo kyçe dhome",
+ "This process allows you to import encryption keys that you had previously exported from another Matrix client. You will then be able to decrypt any messages that the other client could decrypt.": "Ky proces ju lejon të importoni kyçe fshehtëzimi që keni eksportuar më parë nga një tjetër klient Matrix. Mandej do të jeni në gjendje të shfshehtëzoni çfarëdo mesazhesh që mund të shfshehtëzojë ai klient tjetër.",
+ "The export file will be protected with a passphrase. You should enter the passphrase here, to decrypt the file.": "Kartela e eksportit është e mbrojtur me një frazëkalim. Që të shfshehtëzoni kartelën, duhet ta jepni frazëkalimin këtu."
}
diff --git a/src/i18n/strings/sv.json b/src/i18n/strings/sv.json
index 4a3c81774a..c0ce097a91 100644
--- a/src/i18n/strings/sv.json
+++ b/src/i18n/strings/sv.json
@@ -1267,5 +1267,28 @@
"You need to register to do this. Would you like to register now?": "Du måste registrera dig för att göra detta. Vill du registrera dig nu?",
"Forces the current outbound group session in an encrypted room to be discarded": "Tvingar den aktuella utgående gruppsessionen i ett krypterat rum att överges",
"Unable to connect to Homeserver. Retrying...": "Det gick inte att ansluta till hemserver. Försöker igen ...",
- "Unable to query for supported registration methods": "Det gick inte att hämta stödda registreringsmetoder"
+ "Unable to query for supported registration methods": "Det gick inte att hämta stödda registreringsmetoder",
+ "%(senderName)s set the main address for this room to %(address)s.": "%(senderName)s satte huvudadressen för detta rum till %(address)s.",
+ "%(senderName)s added %(count)s %(addedAddresses)s as addresses for this room.|other": "%(senderName)s lade till %(addedAddresses)s som adresser för detta rum.",
+ "%(senderName)s added %(count)s %(addedAddresses)s as addresses for this room.|one": "%(senderName)s lade till %(addedAddresses)s som adress för detta rum.",
+ "%(senderName)s removed %(count)s %(removedAddresses)s as addresses for this room.|other": "%(senderName)s tog bort %(removedAddresses)s som adresser för detta rum.",
+ "%(senderName)s removed %(count)s %(removedAddresses)s as addresses for this room.|one": "%(senderName)s tog bort %(removedAddresses)s som adress för detta rum.",
+ "%(senderName)s added %(addedAddresses)s and removed %(removedAddresses)s as addresses for this room.": "%(senderName)s lade till %(addedAddresses)s och tog bort %(removedAddresses)s som adresser för detta rum.",
+ "%(senderName)s removed the main address for this room.": "%(senderName)s tog bort huvudadressen för detta rum.",
+ "Pin unread rooms to the top of the room list": "Nåla fast olästa rum längst upp i rumslistan",
+ "Pin rooms I'm mentioned in to the top of the room list": "Nåla fast rum jag nämns i längst upp i rumslistan",
+ "Joining room...": "Går med i rum...",
+ "Add some now": "Lägg till några nu",
+ "Please review and accept the policies of this homeserver:": "Granska och acceptera policyn för denna hemserver:",
+ "Before submitting logs, you must create a GitHub issue to describe your problem.": "Innan du skickar in loggar måste du skapa en GitHub-bugg för att beskriva problemet.",
+ "What GitHub issue are these logs for?": "Vilken GitHub-bugg är dessa loggar för?",
+ "Updating Riot": "Uppdaterar Riot",
+ "Submit Debug Logs": "Skicka felsökningsloggar",
+ "An email address is required to register on this homeserver.": "En epostadress krävs för att registrera sig på denna hemserver.",
+ "A phone number is required to register on this homeserver.": "Ett telefonnummer krävs för att registrera sig på denna hemserver.",
+ "Open Devtools": "Öppna Devtools",
+ "Show developer tools": "Visa utvecklingsverktyg",
+ "You are currently using Riot anonymously as a guest.": "Du använder för närvarande Riot anonymt som gäst.",
+ "You are an administrator of this community. You will not be able to rejoin without an invite from another administrator.": "Du är administratör för denna community. Du kommer inte kunna gå med igen utan en inbjudan från en annan administratör.",
+ "If you would like to create a Matrix account you can register now.": "Om du vill skapa ett Matrix-konto kan du registrera dig nu."
}
diff --git a/src/i18n/strings/te.json b/src/i18n/strings/te.json
index b6102a5eb5..9dc5221223 100644
--- a/src/i18n/strings/te.json
+++ b/src/i18n/strings/te.json
@@ -53,10 +53,10 @@
"%(senderDisplayName)s removed the room name.": "%(senderDisplayName)s గది పేరు తొలగించబడింది.",
"Changes to who can read history will only apply to future messages in this room": "చరిత్ర చదివేవారికి మార్పులు ఈ గదిలో భవిష్య సందేశాలకు మాత్రమే వర్తిస్తాయి",
"Changes your display nickname": "మీ ప్రదర్శన మారుపేరుని మారుస్తుంది",
- "You cannot place a call with yourself.": "మీరు మీతో కాల్ చేయలేరు.",
+ "You cannot place a call with yourself.": "మీకు మీరే కాల్ చేయలేరు.",
"You are already in a call.": "మీరు ఇప్పటికే కాల్లో ఉన్నారు.",
"You are trying to access %(roomName)s.": "మీరు %(roomName)s లను యాక్సెస్ చేయడానికి ప్రయత్నిస్తున్నారు.",
- "You cannot place VoIP calls in this browser.": "మీరు ఈ బ్రౌజర్లో VoIP కాల్లను ఉంచలేరు.",
+ "You cannot place VoIP calls in this browser.": "మీరు ఈ బ్రౌజర్లో కాల్లను చేయలేరు.",
"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": "మీరు అన్ని పరికరాల నుండి లాగ్ అవుట్ అయ్యారు మరియు ఇకపై పుష్ ఉండదు.\nప్రకటనలను నోటిఫికేషన్లను పునఃప్రారంభించడానికి, ప్రతి పరికరంలో మళ్లీ సైన్ ఇన్ చేయండి",
"You have no visible notifications": "మీకు కనిపించే నోటిఫికేషన్లు లేవు",
"You need to be able to invite users to do that.": "మీరు దీన్ని చేయడానికి వినియోగదారులను ఆహ్వానించగలరు.",
@@ -275,5 +275,26 @@
"#example": "#ఉదాహరణ",
"Collapse panel": "ప్యానెల్ కుదించు",
"Checking for an update...": "నవీకరణ కోసం చూస్తోంది...",
- "Saturday": "శనివారం"
+ "Saturday": "శనివారం",
+ "This email address is already in use": "ఈ ఇమెయిల్ అడ్రస్ ఇప్పటికే వాడుకం లో ఉంది",
+ "This phone number is already in use": "ఈ ఫోన్ నంబర్ ఇప్పటికే వాడుకం లో ఉంది",
+ "Failed to verify email address: make sure you clicked the link in the email": "ఇమెయిల్ అడ్రస్ ని నిరూపించలేక పోయాము. ఈమెయిల్ లో వచ్చిన లింక్ ని నొక్కారా",
+ "The platform you're on": "మీరు ఉన్న ప్లాట్ఫార్మ్",
+ "The version of Riot.im": "రయట్.ఐఎమ్ యొక్క వెర్సన్",
+ "Your homeserver's URL": "మీ హోమ్ సర్వర్ యొక్క URL",
+ "Your identity server's URL": "మీ ఐడెంటిటి సర్వర్ యొక్క URL",
+ "e.g. %(exampleValue)s": "ఉ.దా. %(exampleValue)s 1",
+ "Every page you use in the app": "ఆప్ లో మీరు వాడే ప్రతి పేజి",
+ "e.g. ": "ఉ.దా. ",
+ "Your User Agent": "మీ యీసర్ ఏజెంట్",
+ "Call Failed": "కాల్ విఫలమయింది",
+ "Review Devices": "పరికరాలని ఒక మారు చూసుకో",
+ "Call": "కాల్",
+ "Answer": "ఎత్తు",
+ "The remote side failed to pick up": "అటు వైపు ఎత్తలేకపోయారు",
+ "Unable to capture screen": "తెరని చూపలేకపోతున్నారు",
+ "Existing Call": "నజుస్తున్న కాల్",
+ "VoIP is unsupported": "కాల్ చేయుట ఈ పరికరం పోషించలేదు",
+ "A conference call could not be started because the intgrations server is not available": "ఇంటిగ్రేషన్ సర్వర్ లేనప్పుడు కాన్ఫరెన్స్ కాల్ మొదలుపెట్టలేరు",
+ "Call in Progress": "నడుస్తున్న కాల్"
}
diff --git a/src/i18n/strings/uk.json b/src/i18n/strings/uk.json
index b36642691c..2f3f563f0d 100644
--- a/src/i18n/strings/uk.json
+++ b/src/i18n/strings/uk.json
@@ -23,8 +23,8 @@
"A text message has been sent to +%(msisdn)s. Please enter the verification code it contains": "Текстове повідомлення було надіслано +%(msisdn)s. Введіть, будь ласка, код підтвердження з цього повідомлення",
"Accept": "Прийняти",
"Account": "Обліковка",
- "%(targetName)s accepted an invitation.": "%(targetName)s прийняв запрошення.",
- "%(targetName)s accepted the invitation for %(displayName)s.": "%(targetName)s прийняв запрошення від %(displayName)s.",
+ "%(targetName)s accepted an invitation.": "%(targetName)s прийняв/ла запрошення.",
+ "%(targetName)s accepted the invitation for %(displayName)s.": "Запрошення від %(displayName)s прийнято %(targetName)s.",
"Access Token:": "Токен доступу:",
"Active call (%(roomName)s)": "Активний виклик (%(roomName)s)",
"Add": "Додати",
@@ -57,7 +57,7 @@
"A new password must be entered.": "Має бути введений новий пароль.",
"Add a widget": "Добавити віджет",
"Allow": "Принюти",
- "%(senderName)s answered the call.": "%(senderName)s відповіла на дзвінок.",
+ "%(senderName)s answered the call.": "%(senderName)s відповів/ла на дзвінок.",
"An error has occurred.": "Трапилась помилка.",
"Anyone": "Кожний",
"Anyone who knows the room's link, apart from guests": "Кожний, хто знає посилання на кімнату, окрім гостей",
@@ -68,10 +68,10 @@
"Are you sure you want to upload the following files?": "Ви впевнені, що ви хочете відправити наступний файл?",
"Attachment": "Прикріплення",
"Autoplay GIFs and videos": "Автовідтворення GIF і відео",
- "%(senderName)s banned %(targetName)s.": "%(senderName)s заблокував(ла) %(targetName)s.",
+ "%(senderName)s banned %(targetName)s.": "%(senderName)s заблокував/ла %(targetName)s.",
"Ban": "Заблокувати",
"Banned users": "Заблоковані користувачі",
- "Bans user with given id": "Блокує користувача з заданим ID",
+ "Bans user with given id": "Блокує користувача з вказаним ID",
"Blacklisted": "В чорному списку",
"Bulk Options": "Групові параметри",
"Call Timeout": "Час очікування виклика",
@@ -79,22 +79,22 @@
"Can't load user settings": "Неможливо завантажити настройки користувача",
"Cannot add any more widgets": "Неможливо додати більше віджетів",
"Change Password": "Поміняти пароль",
- "%(senderName)s changed their profile picture.": "%(senderName)s змінив зображення профіля.",
+ "%(senderName)s changed their profile picture.": "%(senderName)s змінив/ла зображення профілю.",
"%(senderName)s changed the power level of %(powerLevelDiffText)s.": "%(senderName)s змінив(ла) рівень доступу для %(powerLevelDiffText)s.",
- "%(senderDisplayName)s changed the room name to %(roomName)s.": "%(senderDisplayName)s змінив(ла) назву кімнати на %(roomName)s.",
+ "%(senderDisplayName)s changed the room name to %(roomName)s.": "%(senderDisplayName)s змінив/ла назву кімнати на %(roomName)s.",
"%(senderDisplayName)s removed the room name.": "%(senderDisplayName)s видалив ім'я кімнати.",
"%(senderDisplayName)s changed the topic to \"%(topic)s\".": "%(senderDisplayName)s змінив тему на %(topic)s.",
"Email": "е-пошта",
"Email address": "Адреса е-почти",
"Email address (optional)": "Адреса е-почти (не обов'язково)",
- "Email, name or matrix ID": "Е-почта, ім'я або matrix ID",
+ "Email, name or matrix ID": "Електронна пошта, ім'я або matrix ID",
"Failed to send email": "Помилка відправки е-почти",
"Edit": "Редактувати",
"Unpin Message": "Відкріпити повідомлення",
- "Register": "Зарегіструватись",
+ "Register": "Зареєструватися",
"Rooms": "Кімнати",
"Add rooms to this community": "Добавити кімнати в це суспільство",
- "This email address is already in use": "Ця е-пошта вже використовується",
+ "This email address is already in use": "Ця електронна пошта вже використовується",
"This phone number is already in use": "Цей телефонний номер вже використовується",
"Fetching third party location failed": "Не вдалось отримати стороннє місцеперебування",
"Messages in one-to-one chats": "Повідомлення у чатах \"сам на сам\"",
@@ -267,10 +267,10 @@
"The version of Riot.im": "Версія Riot.im",
"Whether or not you're logged in (we don't record your user name)": "Чи увійшли ви, чи ні (ми не зберігаємо ваше ім'я користувача)",
"Your language of choice": "Обрана мова",
- "Which officially provided instance you are using, if any": "Яким офіційно наданим примірником ви користуєтесь (якщо користуєтесь)",
- "Whether or not you're using the Richtext mode of the Rich Text Editor": "Чи використовуєте ви режим Richtext у редакторі Rich Text Editor",
- "Your homeserver's URL": "URL адреса вашого домашнього серверу",
- "Failed to verify email address: make sure you clicked the link in the email": "Не вдалось перевірити адресу е-пошти: переконайтесь, що ви перейшли за посиланням у листі",
+ "Which officially provided instance you are using, if any": "Яким офіційно наданим клієнтом ви користуєтесь (якщо користуєтесь)",
+ "Whether or not you're using the Richtext mode of the Rich Text Editor": "Чи використовуєте ви режим форматованого тексту у редакторі Rich Text Editor",
+ "Your homeserver's URL": "URL адреса вашого домашнього сервера",
+ "Failed to verify email address: make sure you clicked the link in the email": "Не вдалось перевірити адресу електронної пошти: переконайтесь, що ви перейшли за посиланням у листі",
"The platform you're on": "Використовувана платформа",
"Your identity server's URL": "URL адреса серверу ідентифікації",
"e.g. %(exampleValue)s": "напр. %(exampleValue)s",
@@ -329,5 +329,248 @@
"%(weekDayName)s, %(monthName)s %(day)s %(time)s": "%(weekDayName)s, %(monthName)s, %(day)s, %(time)s",
"%(weekDayName)s, %(monthName)s %(day)s %(fullYear)s": "%(weekDayName)s, %(monthName)s, %(day)s, %(fullYear)s",
"%(weekDayName)s, %(monthName)s %(day)s %(fullYear)s %(time)s": "%(weekDayName)s, %(monthName)s %(day)s %(fullYear)s %(time)s",
- "Who would you like to add to this community?": "Кого ви хочете додати до цієї спільноти?"
+ "Who would you like to add to this community?": "Кого ви хочете додати до цієї спільноти?",
+ "Where this page includes identifiable information, such as a room, user or group ID, that data is removed before being sent to the server.": "Якщо сторінка містить ідентифікаційну інформацію, як то ідентифікатор кімнати, користувача чи групи, ці дані будуть вилучені перед надсиланням на сервер.",
+ "Could not connect to the integration server": "Неможливо приєднатися до інтеграційного сервера",
+ "A conference call could not be started because the intgrations server is not available": "Неможливо здійснити дзвінок-конференцію, оскільки інтеграційний сервер недоступний",
+ "Call in Progress": "Іде виклик",
+ "A call is currently being placed!": "Зараз іде виклик!",
+ "A call is already in progress!": "Вже здійснюється дзвінок!",
+ "Permission Required": "Потрібен дозвіл",
+ "You do not have permission to start a conference call in this room": "У вас немає дозволу, щоб розпочати дзвінок-конференцію в цій кімнаті",
+ "Warning: any person you add to a community will be publicly visible to anyone who knows the community ID": "Зверніть увагу: будь-яка людина, яку ви додаєте до спільноти, буде публічно видимою тим, хто знає ідентифікатор спільноти",
+ "Invite new community members": "Запросити до спільноти",
+ "Name or matrix ID": "Ім'я або ідентифікатор matrix",
+ "Invite to Community": "Запросити до спільноти",
+ "Which rooms would you like to add to this community?": "Які кімнати ви хочете додати до цієї спільноти?",
+ "Show these rooms to non-members on the community page and room list?": "Показувати ці кімнати тим, хто не належить до спільноти, на сторінці спільноти та списку кімнат?",
+ "Add rooms to the community": "Додати кімнати до спільноти",
+ "Room name or alias": "Назва або псевдонім кімнати",
+ "Add to community": "Додати до спільноти",
+ "Failed to invite the following users to %(groupId)s:": "Не вдалося запросити таких користувачів до %(groupId)s:",
+ "Failed to invite users to community": "Не вдалося запросити користувачів до кімнати",
+ "Failed to invite users to %(groupId)s": "Не вдалося запросити користувачів до %(groupId)s",
+ "Failed to add the following rooms to %(groupId)s:": "Не вдалося додати такі кімнати до %(groupId)s:",
+ "Riot does not have permission to send you notifications - please check your browser settings": "Riot не має дозволу надсилати вам сповіщення — будь ласка, перевірте налаштування переглядача",
+ "Riot was not given permission to send notifications - please try again": "Riot не має дозволу надсилати сповіщення — будь ласка, спробуйте ще раз",
+ "Unable to enable Notifications": "Не вдалося увімкнути сповіщення",
+ "This email address was not found": "Не знайдено адресу електронної пошти",
+ "Your email address does not appear to be associated with a Matrix ID on this Homeserver.": "Схоже, ваша адреса електронної пошти не пов'язана з жодним ідентифікатор Matrix на цьому домашньому сервері.",
+ "Registration Required": "Потрібна реєстрація",
+ "You need to register to do this. Would you like to register now?": "Вам потрібно зареєструватися, щоб це зробити. Бажаєте зареєструватися зараз?",
+ "Restricted": "Обмежено",
+ "Moderator": "Модератор",
+ "Start a chat": "Розпочати балачку",
+ "Who would you like to communicate with?": "З ким бажаєте спілкуватися?",
+ "Start Chat": "Розпочати балачку",
+ "Invite new room members": "Запросити до кімнати",
+ "Who would you like to add to this room?": "Кого бажаєте додати до цієї кімнати?",
+ "Send Invites": "Надіслати запрошення",
+ "Failed to invite user": "Не вдалося запросити користувача",
+ "Failed to invite": "Не вдалося запросити",
+ "Failed to invite the following users to the %(roomName)s room:": "Не вдалося запросити таких користувачів до кімнати %(roomName)s:",
+ "You need to be logged in.": "Вам потрібно увійти.",
+ "You need to be able to invite users to do that.": "Щоб це зробити, вам необхідно мати можливість запрошувати людей.",
+ "Unable to create widget.": "Неможливо створити віджет.",
+ "Missing roomId.": "Бракує ідентифікатора кімнати.",
+ "Failed to send request.": "Не вдалося надіслати запит.",
+ "This room is not recognised.": "Кімнату не знайдено.",
+ "Power level must be positive integer.": "Рівень прав мусить бути додатнім цілим числом.",
+ "You are not in this room.": "Вас немає в цій кімнаті.",
+ "You do not have permission to do that in this room.": "У вас немає прав виконувати для цього в цій кімнаті.",
+ "Missing room_id in request": "У запиті бракує room_id",
+ "Room %(roomId)s not visible": "Кімната %(roomId)s не видима",
+ "Missing user_id in request": "У запиті пропущено user_id",
+ "Usage": "Використання",
+ "Searches DuckDuckGo for results": "Здійснює пошук через DuckDuckGo",
+ "/ddg is not a command": "/ddg — це не команда",
+ "To use it, just wait for autocomplete results to load and tab through them.": "Щоб цим скористатися, просто почекайте на підказки доповнення й перемикайтеся між ними клавішею TAB.",
+ "Changes your display nickname": "Змінює ваш нік",
+ "Changes colour scheme of current room": "Змінює кольорову схему кімнати",
+ "Sets the room topic": "Встановлює тему кімнати",
+ "Invites user with given id to current room": "Запрошує користувача з вказаним ідентифікатором до кімнати",
+ "Joins room with given alias": "Приєднується до кімнати з поданим ідентифікатором",
+ "Leave room": "Покинути кімнату",
+ "Unrecognised room alias:": "Кімнату не знайдено:",
+ "Kicks user with given id": "Викинути з кімнати користувача з вказаним ідентифікатором",
+ "Unbans user with given id": "Розблоковує користувача з вказаним ідентифікатором",
+ "Ignores a user, hiding their messages from you": "Ігнорувати користувача (приховує повідомлення від них)",
+ "Ignored user": "Користувача ігноровано",
+ "You are now ignoring %(userId)s": "Ви ігноруєте %(userId)s",
+ "Stops ignoring a user, showing their messages going forward": "Припинити ігнорувати користувача (показує їхні повідомлення від цього моменту)",
+ "Unignored user": "Припинено ігнорування користувача",
+ "You are no longer ignoring %(userId)s": "Ви більше не ігноруєте %(userId)s",
+ "Define the power level of a user": "Вказати рівень прав користувача",
+ "Deops user with given id": "Знімає права оператора з користувача з вказаним ідентифікатором",
+ "Opens the Developer Tools dialog": "Відкриває вікно інструментів розробника",
+ "Verifies a user, device, and pubkey tuple": "Перевіряє комбінацію користувача, пристрою і публічного ключа",
+ "Unknown (user, device) pair:": "Невідома комбінація користувача і пристрою:",
+ "Device already verified!": "Пристрій вже перевірено!",
+ "WARNING: Device already verified, but keys do NOT MATCH!": "УВАГА: Пристрій уже перевірено, але ключі НЕ ЗБІГАЮТЬСЯ!",
+ "WARNING: KEY VERIFICATION FAILED! The signing key for %(userId)s and device %(deviceId)s is \"%(fprint)s\" which does not match the provided key \"%(fingerprint)s\". This could mean your communications are being intercepted!": "УВАГА: КЛЮЧ НЕ ПРОЙШОВ ПЕРЕВІРКУ! Підписний ключ %(userId)s на пристрої %(deviceId)s — це «%(fprint)s», і він не збігається з наданим ключем «%(fingerprint)s». Це може означати, що ваші повідомлення перехоплюють!",
+ "Verified key": "Ключ перевірено",
+ "The signing key you provided matches the signing key you received from %(userId)s's device %(deviceId)s. Device marked as verified.": "Підписний ключ, який ви вказали, збігається з підписним ключем, отриманим від пристрою %(deviceId)s користувача %(userId)s. Пристрій позначено як перевірений.",
+ "Displays action": "Показує дію",
+ "Unrecognised command:": "Невідома команда:",
+ "Reason": "Причина",
+ "%(senderName)s requested a VoIP conference.": "%(senderName)s бажає розпочати дзвінок-конференцію.",
+ "%(senderName)s invited %(targetName)s.": "%(senderName)s запросив/ла %(targetName)s.",
+ "%(oldDisplayName)s changed their display name to %(displayName)s.": "%(oldDisplayName)s змінив/ла своє видиме ім'я на %(displayName)s.",
+ "%(senderName)s set their display name to %(displayName)s.": "%(senderName)s вказав/ла своє видиме ім'я: %(displayName)s.",
+ "%(senderName)s removed their display name (%(oldDisplayName)s).": "%(senderName)s ліквідував/ла своє видиме ім'я (%(oldDisplayName)s).",
+ "%(senderName)s removed their profile picture.": "%(senderName)s вилучав/ла свою світлину профілю.",
+ "%(senderName)s set a profile picture.": "%(senderName)s встановив/ла світлину профілю.",
+ "VoIP conference started.": "Розпочато дзвінок-конференцію.",
+ "%(targetName)s joined the room.": "%(targetName)s приєднав/лася до кімнати.",
+ "VoIP conference finished.": "Дзвінок-конференцію завершено.",
+ "%(targetName)s rejected the invitation.": "%(targetName)s відкинув/ла запрошення.",
+ "%(targetName)s left the room.": "%(targetName)s залишив/ла кімнату.",
+ "%(senderName)s unbanned %(targetName)s.": "%(senderName)s розблокував/ла %(targetName)s.",
+ "%(senderName)s kicked %(targetName)s.": "%(senderName)s викинув/ла %(targetName)s.",
+ "%(senderName)s withdrew %(targetName)s's invitation.": "%(senderName)s відкликав/ла запрошення %(targetName)s.",
+ "%(senderDisplayName)s sent an image.": "%(senderDisplayName)s надіслав/ла зображення.",
+ "%(senderName)s added %(count)s %(addedAddresses)s as addresses for this room.|other": "%(senderName)s додав/ла %(addedAddresses)s як адреси цієї кімнати.",
+ "%(senderName)s added %(count)s %(addedAddresses)s as addresses for this room.|one": "%(senderName)s додав/ла %(addedAddresses)s як адресу цієї кімнати.",
+ "%(senderName)s removed %(count)s %(removedAddresses)s as addresses for this room.|other": "%(senderName)s вилучив/ла %(removedAddresses)s з адрес цієї кімнати.",
+ "%(senderName)s removed %(count)s %(removedAddresses)s as addresses for this room.|one": "%(senderName)s вилучив/ла %(removedAddresses)s з адрес цієї кімнати.",
+ "%(senderName)s added %(addedAddresses)s and removed %(removedAddresses)s as addresses for this room.": "%(senderName)s додав/ла %(addedAddresses)s і вилучив/ла %(removedAddresses)s з адрес цієї кімнати.",
+ "%(senderName)s set the main address for this room to %(address)s.": "%(senderName)s призначив/ла основну адресу цієї кімнати: %(address)s.",
+ "%(senderName)s removed the main address for this room.": "%(senderName)s вилучив/ла основу адресу цієї кімнати.",
+ "Someone": "Хтось",
+ "(not supported by this browser)": "(не підтримується цією веб-переглядачкою)",
+ "(could not connect media)": "(не можливо під'єднати медіа)",
+ "(no answer)": "(немає відповіді)",
+ "(unknown failure: %(reason)s)": "(невідома помилка: %(reason)s)",
+ "%(senderName)s ended the call.": "%(senderName)s завершив/ла дзвінок.",
+ "%(senderName)s placed a %(callType)s call.": "%(senderName)s ініціював/ла дзвінок %(callType)s.",
+ "%(senderName)s sent an invitation to %(targetDisplayName)s to join the room.": "%(senderName)s надіслав/ла запрошення %(targetDisplayName)s приєднатися до кімнати.",
+ "Show developer tools": "Показати інструменти розробки",
+ "Default": "Типово",
+ "%(senderName)s made future room history visible to all room members, from the point they are invited.": "%(senderName)s зробив/ла майбутню історію кімнати видимою для всіх учасників, з моменту, коли вони приєдналися.",
+ "%(senderName)s made future room history visible to all room members, from the point they joined.": "%(senderName)s зробив/ла майбутню історію кімнати видимою для всіх учасників, з моменту, коли вони приєдналися.",
+ "%(senderName)s made future room history visible to all room members.": "%(senderName)s зробив/ла майбутню історію видимою для всіх учасників кімнати.",
+ "%(senderName)s made future room history visible to anyone.": "%(senderName)s зробив/ла майбутню історію кімнати видимою для всіх.",
+ "%(senderName)s made future room history visible to unknown (%(visibility)s).": "%(senderName)s зробив/ла майбутню історію видимою невідомим (%(visibility)s).",
+ "%(senderName)s turned on end-to-end encryption (algorithm %(algorithm)s).": "%(senderName)s увімкнув/ла наскрізне шифрування (алгоритм %(algorithm)s).",
+ "%(userId)s from %(fromPowerLevel)s to %(toPowerLevel)s": "%(userId)s з %(fromPowerLevel)s до %(toPowerLevel)s",
+ "%(senderName)s changed the pinned messages for the room.": "%(senderName)s змінив/ла прикріплені повідомлення для кімнати.",
+ "%(widgetName)s widget modified by %(senderName)s": "%(senderName)s змінив/ла %(widgetName)s",
+ "%(widgetName)s widget added by %(senderName)s": "%(senderName)s додав/ла %(widgetName)s",
+ "%(widgetName)s widget removed by %(senderName)s": "%(senderName)s вилучив/ла %(widgetName)s",
+ "%(displayName)s is typing": "%(displayName)s пише",
+ "%(names)s and %(count)s others are typing|other": "%(names)s і %(count)s пишуть",
+ "%(names)s and %(count)s others are typing|one": "%(names)s та ще одна особа пишуть",
+ "Failure to create room": "Не вдалося створити кімнату",
+ "Server may be unavailable, overloaded, or you hit a bug.": "Сервер може бути недоступний, перевантажений, або ж ви натрапили на ваду.",
+ "Send anyway": "Все-таки надіслати",
+ "Unnamed Room": "Кімната без назви",
+ "This homeserver has hit its Monthly Active User limit.": "Цей домашній сервер досягнув свого ліміту щомісячних активних користувачів.",
+ "This homeserver has exceeded one of its resource limits.": "Цей домашній сервер досягнув одного зі своїх лімітів ресурсів.",
+ "Please contact your service administrator to continue using the service.": "Будь ласка, зв'яжіться з адміністратором вашого сервісу, щоб продовжити користуватися цим сервісом.",
+ "Unable to connect to Homeserver. Retrying...": "Не вдається приєднатися до домашнього сервера. Повторення спроби...",
+ "Your browser does not support the required cryptography extensions": "Ваша веб-переглядачка не підтримує необхідних криптографічних функцій",
+ "Not a valid Riot keyfile": "Файл ключа Riot некоректний",
+ "Authentication check failed: incorrect password?": "Помилка автентифікації: неправильний пароль?",
+ "Sorry, your homeserver is too old to participate in this room.": "Вибачте, ваш домашній сервер занадто старий, щоб приєднатися до цієї кімнати.",
+ "Please contact your homeserver administrator.": "Будь ласка, зв'яжіться з адміністратором вашого домашнього сервера.",
+ "Failed to join room": "Не вдалося приєднатися до кімнати",
+ "Message Pinning": "Прикріплені повідомлення",
+ "Increase performance by only loading room members on first view": "Покращити швидкодію, завантажуючи список учасників кімнати лише при першому перегляді",
+ "Disable Emoji suggestions while typing": "Вимкнути підказки емоційок під час писання",
+ "Use compact timeline layout": "Використовувати компактну розкладку стрічки",
+ "Hide join/leave messages (invites/kicks/bans unaffected)": "Приховувати повідомлення про приєднання/вихід (не стосується запрошень, викидань і блокувань)",
+ "Hide avatar changes": "Приховувати зміни аватарів",
+ "Hide display name changes": "Приховувати зміни видимих імен",
+ "Hide read receipts": "Приховувати сповіщення про прочитання",
+ "Show timestamps in 12 hour format (e.g. 2:30pm)": "Показувати час у 12-годинному форматі (напр. 2:30 pm)",
+ "Always show encryption icons": "Завжди показувати значки шифрування",
+ "Enable automatic language detection for syntax highlighting": "Показувати автоматичне визначення мови для підсвічування синтаксису",
+ "Hide avatars in user and room mentions": "Приховувати аватари у згадках користувачів і кімнат",
+ "Disable big emoji in chat": "Вимкнути великі емоційки в балачці",
+ "Don't send typing notifications": "Не надсилати сповіщення «пишу»",
+ "Automatically replace plain text Emoji": "Автоматично замінювати емоційки в простому тексті",
+ "Mirror local video feed": "Показувати локальне відео віддзеркалено",
+ "Disable Community Filter Panel": "Вимкнути панель фільтру спільнот",
+ "Disable Peer-to-Peer for 1:1 calls": "Вимкнути peer-to-peer для дзвінків 1:1",
+ "Send analytics data": "Надсилати дані аналітики",
+ "Never send encrypted messages to unverified devices from this device": "Ніколи не надсилати шифрованих повідомлень до неперевірених пристроїв з цього пристрою",
+ "Never send encrypted messages to unverified devices in this room from this device": "Ніколи не надсилати шифрованих повідомлень до неперевірених пристроїв у цій кімнаті з цього пристрою",
+ "Enable inline URL previews by default": "Увімкнути вбудований перегляд гіперпосилань за умовчанням",
+ "Enable URL previews for this room (only affects you)": "Увімкнути попередній перегляд гіперпосилань в цій кімнаті (стосується тільки вас)",
+ "Enable URL previews by default for participants in this room": "Увімкнути попередній перегляд гіперпосилань за умовчанням для учасників цієї кімнати",
+ "Room Colour": "Колір кімнати",
+ "Pin unread rooms to the top of the room list": "Прикріпити кімнати з непрочитаними повідомленнями на початку списку",
+ "Pin rooms I'm mentioned in to the top of the room list": "Прикріпити кімнати, у яких мене згадували, на початку списку",
+ "Incoming voice call from %(name)s": "Вхідний дзвінок від %(name)s",
+ "Incoming video call from %(name)s": "Вхідний відеодзвінок від %(name)s",
+ "Incoming call from %(name)s": "Вхідний дзвінок від %(name)s",
+ "Decline": "Відхилити",
+ "Incorrect verification code": "Неправильний код перевірки",
+ "Enter Code": "Вкажіть код",
+ "Submit": "Надіслати",
+ "Phone": "Телефон",
+ "Failed to upload profile picture!": "Не вдалося завантажити світлину профілю!",
+ "Upload new:": "Завантажити нову:",
+ "No display name": "Немає імені для показу",
+ "New passwords don't match": "Нові паролі не збігаються",
+ "Passwords can't be empty": "Пароль не може бути пустим",
+ "Changing password will currently reset any end-to-end encryption keys on all devices, making encrypted chat history unreadable, unless you first export your room keys and re-import them afterwards. In future this will be improved.": "Зміна пароля поки що також скидає ключі наскрізного шифрування на всіх пристроях, внаслідок чого шифрована історія балачки стає недоступною, якщо ви не експортуєте ключі шифрування кімнат і не імпортуєте їх після зміни пароля. У майбутньому це буде поліпшено.",
+ "Export E2E room keys": "Експортувати ключі наскрізного шифрування кімнат",
+ "Do you want to set an email address?": "Бажаєте вказати адресу електронної пошти?",
+ "Current password": "Поточний пароль",
+ "Password": "Пароль",
+ "New Password": "Новий пароль",
+ "Confirm password": "Підтвердження пароля",
+ "Your home server does not support device management.": "Ваш домашній сервер не підтримує керування пристроями.",
+ "Unable to load device list": "Не вдалося завантажити перелік пристроїв",
+ "Delete %(count)s devices|other": "Вилучити %(count)s пристроїв",
+ "Delete %(count)s devices|one": "Вилучити пристрій",
+ "Device ID": "ID пристрою",
+ "Device Name": "Назва пристрою",
+ "Last seen": "Востаннє з'являвся",
+ "Select devices": "Вибрати пристрої",
+ "Failed to set display name": "Не вдалося встановити ім'я для показу",
+ "Disable Notifications": "Вимкнути сповіщення",
+ "Enable Notifications": "Увімкнути сповіщення",
+ "The maximum permitted number of widgets have already been added to this room.": "Максимально дозволену кількість віджетів уже додано до цієї кімнати.",
+ "Drop File Here": "Киньте файл сюди",
+ "Drop file here to upload": "Киньте файл сюди, щоб вивантажити",
+ " (unsupported)": " (не підтримується)",
+ "Join as voice or video.": "Приєднатися голосом або відео.",
+ "Ongoing conference call%(supportedText)s.": "Триває дзвінок-конференція%(supportedText)s.",
+ "This event could not be displayed": "Неможливо показати цю подію",
+ "%(senderName)s sent an image": "%(senderName)s надіслав/ла зображення",
+ "%(senderName)s sent a video": "%(senderName)s надіслав/ла відео",
+ "%(senderName)s uploaded a file": "%(senderName)s надіслав/ла файл",
+ "Options": "Налаштування",
+ "Your key share request has been sent - please check your other devices for key share requests.": "Ваш запит поширення ключа надіслано — гляньте запити поширення ключа на своїх інших пристроях.",
+ "Key share requests are sent to your other devices automatically. If you rejected or dismissed the key share request on your other devices, click here to request the keys for this session again.": "Запити поширення ключа надсилаються на ваші пристрої автоматично. Якщо ви відкинули запит поширення ключа на своїх інших пристроях, натисніть тут, щоб наново надіслати запит поширення ключа для цього сеансу.",
+ "If your other devices do not have the key for this message you will not be able to decrypt them.": "Якщо на ваших інших пристроях немає ключа для цього повідомлення, ви не зможете його прочитати.",
+ "Key request sent.": "Запит ключа надіслано.",
+ "Re-request encryption keys from your other devices.": "Наново надіслати запит ключів шифрування на ваші інші пристрої.",
+ "Undecryptable": "Неможливо розшифрувати",
+ "Encrypting": "Шифрування",
+ "Encrypted, not sent": "Зашифровано, не надіслано",
+ "Encrypted by a verified device": "Зашифровано перевіреним пристроєм",
+ "Encrypted by an unverified device": "Зашифровано неперевіреним пристроєм",
+ "Unencrypted message": "Незашифроване повідомлення",
+ "Please select the destination room for this message": "Будь ласка, виберіть кімнату, куди потрібно надіслати це повідомлення",
+ "Verified": "Перевірено",
+ "Unverified": "Неперевірено",
+ "device id: ": "id пристрою: ",
+ "Disinvite": "Скасувати запрошення",
+ "Kick": "Викинути",
+ "Disinvite this user?": "Скасувати запрошення для цього користувача?",
+ "Kick this user?": "Викинути цього користувача?",
+ "Failed to kick": "Не вдалося викинути",
+ "Unban": "Розблокувати",
+ "Unban this user?": "Розблокувати цього користувача?",
+ "Ban this user?": "Заблокувати цього користувача?",
+ "Failed to ban user": "Не вдалося заблокувати користувача",
+ "Demote yourself?": "Знизити свій рівень прав?",
+ "You will not be able to undo this change as you are demoting yourself, if you are the last privileged user in the room it will be impossible to regain privileges.": "Ви не зможете скасувати цю дію, оскільки ви знижуєте свій рівень прав. Якщо ви останній користувач з правами в цій кімнаті, ви не зможете отримати повноваження знову.",
+ "Demote": "Знизити рівень прав",
+ "Failed to mute user": "Не вдалося заглушити користувача",
+ "Failed to toggle moderator status": "Не вдалося перемкнути статус модератора",
+ "Failed to change power level": "Не вдалося змінити рівень повноважень"
}
diff --git a/src/i18n/strings/zh_Hans.json b/src/i18n/strings/zh_Hans.json
index cd8ae2f0e3..e062663cad 100644
--- a/src/i18n/strings/zh_Hans.json
+++ b/src/i18n/strings/zh_Hans.json
@@ -17,7 +17,7 @@
"Disinvite": "取消邀请",
"Display name": "昵称",
"Displays action": "显示操作",
- "Don't send typing notifications": "不要发送我的打字状态",
+ "Don't send typing notifications": "不要发送“正在输入”提示",
"Download %(text)s": "下载 %(text)s",
"Email": "电子邮箱",
"Email address": "邮箱地址",
@@ -155,7 +155,7 @@
"New password": "新密码",
"Add a topic": "添加主题",
"Admin": "管理员",
- "Admin Tools": "管理工具",
+ "Admin Tools": "管理员工具",
"VoIP": "IP 电话",
"Missing Media Permissions, click here to request.": "没有媒体存储权限,点此获取。",
"No Microphones detected": "未检测到麦克风",
@@ -424,7 +424,7 @@
"Unable to capture screen": "无法录制屏幕",
"Unable to enable Notifications": "无法启用通知",
"Unable to load device list": "无法加载设备列表",
- "Undecryptable": "无法解密的",
+ "Undecryptable": "无法解密",
"Unencrypted room": "未加密的聊天室",
"unencrypted": "未加密的",
"Unencrypted message": "未加密消息",
@@ -488,7 +488,7 @@
"This room is not recognised.": "无法识别此聊天室。",
"To get started, please pick a username!": "请点击用户名!",
"Unable to add email address": "无法添加邮箱地址",
- "Automatically replace plain text Emoji": "文字、表情自动转换",
+ "Automatically replace plain text Emoji": "将符号表情转换为 Emoji",
"To reset your password, enter the email address linked to your account": "要重置你的密码,请输入关联你的帐号的邮箱地址",
"Unable to verify email address.": "无法验证邮箱地址。",
"Unknown room %(roomId)s": "未知聊天室 %(roomId)s",
@@ -498,7 +498,7 @@
"Use with caution": "谨慎使用",
"User Interface": "用户界面",
"User name": "用户名",
- "(no answer)": "(无响应)",
+ "(no answer)": "(无回复)",
"(warning: cannot be disabled again!)": "(警告:无法再被禁用!)",
"WARNING: Device already verified, but keys do NOT MATCH!": "警告:设备已验证,但密钥不匹配!",
"Who can access this room?": "谁有权访问此聊天室?",
@@ -807,7 +807,7 @@
"Re-request encryption keys from your other devices.": "从其他设备上 重新请求密钥。",
"You will not be able to undo this change as you are demoting yourself, if you are the last privileged user in the room it will be impossible to regain privileges.": "如果您是房间中最后一位有权限的用户,在您降低自己的权限等级后将无法撤回此修改,因为你将无法重新获得权限。",
"You will not be able to undo this change as you are promoting the user to have the same power level as yourself.": "您将无法撤回此修改,因为您正在将此用户的滥权等级提升至与你相同。",
- "No devices with registered encryption keys": "没有设备有已注册的加密密钥",
+ "No devices with registered encryption keys": "没有已注册加密密钥的设备",
"Unmute": "取消静音",
"%(userName)s (power %(powerLevelNumber)s)": "%(userName)s(滥权等级 %(powerLevelNumber)s)",
"Hide Stickers": "隐藏贴图",
@@ -817,15 +817,15 @@
"%(duration)sh": "%(duration)s 小时",
"%(duration)sd": "%(duration)s 天",
"Online for %(duration)s": "已上线 %(duration)s",
- "Idle for %(duration)s": "已 idle %(duration)s",
+ "Idle for %(duration)s": "已闲置%(duration)s",
"Offline for %(duration)s": "已离线 %(duration)s",
- "Unknown for %(duration)s": "在线状态未知 %(duration)s",
+ "Unknown for %(duration)s": "未知状态 %(duration)s",
"Seen by %(displayName)s (%(userName)s) at %(dateTime)s": "%(displayName)s (%(userName)s) 在 %(dateTime)s 看到这里",
"Remove avatar": "移除头像",
"Drop here to favourite": "拖动到这里以加入收藏",
"Drop here to tag direct chat": "拖动到这里以加入私聊",
"Drop here to restore": "拖动到这里以还原",
- "Drop here to demote": "拖动到这里以加入低优先级",
+ "Drop here to demote": "拖动到这里以降低优先级",
"Unable to ascertain that the address this invite was sent to matches one associated with your account.": "无法确定此邀请发送给的邮件地址是否与您帐户所关联的邮件地址相匹配。",
"You have been kicked from this room by %(userName)s.": "您已被 %(userName)s 从此聊天室中移除。",
"'%(groupId)s' is not a valid community ID": "“%(groupId)s” 不是有效的社区 ID",
@@ -885,7 +885,7 @@
"To change the room's avatar, you must be a": "无法修改此聊天室的头像,因为您不是此聊天室的",
"To change the room's name, you must be a": "无法修改此聊天室的名称,因为您不是此聊天室的",
"To change the room's main address, you must be a": "无法修改此聊天室的主地址,因为您不是此聊天室的",
- "To change the room's history visibility, you must be a": "无法修改此聊天室的历史聊天记录可见性,因为您不是此聊天室的",
+ "To change the room's history visibility, you must be a": "无法更改本聊天室历史记录的可见性,您必须为",
"To change the permissions in the room, you must be a": "无法修改此聊天室中的权限情况,因为您不是此聊天室的",
"Showing flair for these communities:": "为这些社区显示 flair:",
"This room is not showing flair for any communities": "此聊天室没有对任何社区显示 flair",
@@ -1150,7 +1150,7 @@
"A call is currently being placed!": "已发起一次通话!",
"Permission Required": "需要权限",
"You do not have permission to start a conference call in this room": "您没有在此聊天室发起通话会议的权限",
- "Show empty room list headings": "为空的聊天室列表显示 heading",
+ "Show empty room list headings": "为空的聊天室列表显示标题",
"This event could not be displayed": "无法显示此事件",
"Share Link to User": "分享链接给其他用户",
"deleted": "删除线",
@@ -1210,7 +1210,7 @@
"These rooms are displayed to community members on the community page. Community members can join the rooms by clicking on them.": "这些聊天室对社区成员可见。社区成员可通过点击来加入它们。",
"Your community hasn't got a Long Description, a HTML page to show to community members. Click here to open settings and give it one!": "您的社区还没有详细介绍,一个展示给社区成员的 HTML 页面。 点击这里即可打开设置添加详细介绍!",
"Failed to load %(groupId)s": "%(groupId)s 加载失败",
- "This room is not public. You will not be able to rejoin without an invite.": "此聊天室不是公开的。没有邀请的话,您将无法重新加入。",
+ "This room is not public. You will not be able to rejoin without an invite.": "此聊天室不是公开聊天室。如果没有成员邀请,您将无法重新加入。",
"Can't leave Server Notices room": "无法退出服务器公告聊天室",
"This room is used for important messages from the Homeserver, so you cannot leave it.": "此聊天室是用于发布来自主服务器的重要讯息的,所以您不能退出它。",
"Terms and Conditions": "条款与要求",
diff --git a/src/i18n/strings/zh_Hant.json b/src/i18n/strings/zh_Hant.json
index 5b259066a7..242990264c 100644
--- a/src/i18n/strings/zh_Hant.json
+++ b/src/i18n/strings/zh_Hant.json
@@ -165,7 +165,7 @@
"Success": "成功",
"The default role for new room members is": "此聊天室新成員的預設角色是",
"The main address for this room is": "此聊天室的主要地址是",
- "This email address is already in use": "此電子郵件地址已經被使用",
+ "This email address is already in use": "這個電子郵件位址已被使用",
"This email address was not found": "未找到此電子郵件地址",
"The email address linked to your account must be entered.": "必須輸入和你帳號關聯的電子郵件地址。",
"The file '%(fileName)s' exceeds this home server's size limit for uploads": "文件 '%(fileName)s' 超過了這個家伺服器的上傳大小限制",
@@ -1289,5 +1289,16 @@
"You've previously used Riot on %(host)s with lazy loading of members enabled. In this version lazy loading is disabled. As the local cache is not compatible between these two settings, Riot needs to resync your account.": "您之前曾在 %(host)s 上使用 Riot 並啟用成員列表的延遲載入。在此版本中延遲載入已停用。由於本機快取在這兩個設定間不相容,Riot 必須重新同步您的帳號。",
"If the other version of Riot is still open in another tab, please close it as using Riot on the same host with both lazy loading enabled and disabled simultaneously will cause issues.": "若其他分頁仍有不同版本的 Riot,請將其關閉,因為在同一個主機上同時啟用和停用延遲載入將會發生問題。",
"Incompatible local cache": "不相容的本機快取",
- "Clear cache and resync": "清除快取並重新同步"
+ "Clear cache and resync": "清除快取並重新同步",
+ "Please accept all of the policies": "請接受所有政策",
+ "Please review and accept the policies of this homeserver:": "請審閱並接受此家伺服器的政策:",
+ "Add some now": "現在就新增一些",
+ "Joining room...": "正在加入聊天室……",
+ "Pin unread rooms to the top of the room list": "釘選未讀的聊天示到聊天室清單頂端",
+ "Pin rooms I'm mentioned in to the top of the room list": "釘選我被提及的聊天室到聊天室清單頂端",
+ "If you would like to create a Matrix account you can register now.": "若您想要建立一個 Matrix 帳號,您現在可以註冊了。",
+ "You are currently using Riot anonymously as a guest.": "您目前是以訪客的身份匿名使用 Riot。",
+ "You are an administrator of this community. You will not be able to rejoin without an invite from another administrator.": "您是此社群的管理員。您將無法在沒有其他管理員的邀請下重新加入。",
+ "Open Devtools": "開啟開發者工具",
+ "Show developer tools": "顯示開發者工具"
}
diff --git a/src/matrix-to.js b/src/matrix-to.js
index 90b0a66090..b5827f671a 100644
--- a/src/matrix-to.js
+++ b/src/matrix-to.js
@@ -14,11 +14,24 @@ See the License for the specific language governing permissions and
limitations under the License.
*/
+import MatrixClientPeg from "./MatrixClientPeg";
+
export const host = "matrix.to";
export const baseUrl = `https://${host}`;
+// The maximum number of servers to pick when working out which servers
+// to add to permalinks. The servers are appended as ?via=example.org
+const MAX_SERVER_CANDIDATES = 3;
+
export function makeEventPermalink(roomId, eventId) {
- return `${baseUrl}/#/${roomId}/${eventId}`;
+ const permalinkBase = `${baseUrl}/#/${roomId}/${eventId}`;
+
+ // If the roomId isn't actually a room ID, don't try to list the servers.
+ // Aliases are already routable, and don't need extra information.
+ if (roomId[0] !== '!') return permalinkBase;
+
+ const serverCandidates = pickServerCandidates(roomId);
+ return `${permalinkBase}${encodeServerCandidates(serverCandidates)}`;
}
export function makeUserPermalink(userId) {
@@ -26,9 +39,98 @@ export function makeUserPermalink(userId) {
}
export function makeRoomPermalink(roomId) {
- return `${baseUrl}/#/${roomId}`;
+ const permalinkBase = `${baseUrl}/#/${roomId}`;
+
+ // If the roomId isn't actually a room ID, don't try to list the servers.
+ // Aliases are already routable, and don't need extra information.
+ if (roomId[0] !== '!') return permalinkBase;
+
+ const serverCandidates = pickServerCandidates(roomId);
+ return `${permalinkBase}${encodeServerCandidates(serverCandidates)}`;
}
export function makeGroupPermalink(groupId) {
return `${baseUrl}/#/${groupId}`;
}
+
+export function encodeServerCandidates(candidates) {
+ if (!candidates || candidates.length === 0) return '';
+ return `?via=${candidates.map(c => encodeURIComponent(c)).join("&via=")}`;
+}
+
+export function pickServerCandidates(roomId) {
+ const client = MatrixClientPeg.get();
+ const room = client.getRoom(roomId);
+ if (!room) return [];
+
+ // Permalinks can have servers appended to them so that the user
+ // receiving them can have a fighting chance at joining the room.
+ // These servers are called "candidates" at this point because
+ // it is unclear whether they are going to be useful to actually
+ // join in the future.
+ //
+ // We pick 3 servers based on the following criteria:
+ //
+ // Server 1: The highest power level user in the room, provided
+ // they are at least PL 50. We don't calculate "what is a moderator"
+ // here because it is less relevant for the vast majority of rooms.
+ // We also want to ensure that we get an admin or high-ranking mod
+ // as they are less likely to leave the room. If no user happens
+ // to meet this criteria, we'll pick the most popular server in the
+ // room.
+ //
+ // Server 2: The next most popular server in the room (in user
+ // distribution). This cannot be the same as Server 1. If no other
+ // servers are available then we'll only return Server 1.
+ //
+ // Server 3: The next most popular server by user distribution. This
+ // has the same rules as Server 2, with the added exception that it
+ // must be unique from Server 1 and 2.
+
+ // Rationale for popular servers: It's hard to get rid of people when
+ // they keep flocking in from a particular server. Sure, the server could
+ // be ACL'd in the future or for some reason be evicted from the room
+ // however an event like that is unlikely the larger the room gets.
+
+ // Note: we don't pick the server the room was created on because the
+ // homeserver should already be using that server as a last ditch attempt
+ // and there's less of a guarantee that the server is a resident server.
+ // Instead, we actively figure out which servers are likely to be residents
+ // in the future and try to use those.
+
+ // Note: Users receiving permalinks that happen to have all 3 potential
+ // servers fail them (in terms of joining) are somewhat expected to hunt
+ // down the person who gave them the link to ask for a participating server.
+ // The receiving user can then manually append the known-good server to
+ // the list and magically have the link work.
+
+ const populationMap: {[server:string]:number} = {};
+ const highestPlUser = {userId: null, powerLevel: 0, serverName: null};
+
+ for (const member of room.getJoinedMembers()) {
+ const serverName = member.userId.split(":").splice(1).join(":");
+ if (member.powerLevel > highestPlUser.powerLevel) {
+ highestPlUser.userId = member.userId;
+ highestPlUser.powerLevel = member.powerLevel;
+ highestPlUser.serverName = serverName;
+ }
+
+ if (!populationMap[serverName]) populationMap[serverName] = 0;
+ populationMap[serverName]++;
+ }
+
+ const candidates = [];
+ if (highestPlUser.powerLevel >= 50) candidates.push(highestPlUser.serverName);
+
+ const beforePopulation = candidates.length;
+ const serversByPopulation = Object.keys(populationMap)
+ .sort((a, b) => populationMap[b] - populationMap[a])
+ .filter(a => !candidates.includes(a));
+ for (let i = beforePopulation; i <= MAX_SERVER_CANDIDATES; i++) {
+ const idx = i - beforePopulation;
+ if (idx >= serversByPopulation.length) break;
+ candidates.push(serversByPopulation[idx]);
+ }
+
+ return candidates;
+}
diff --git a/src/notifications/StandardActions.js b/src/notifications/StandardActions.js
index 22a8f1db40..30d6ea5975 100644
--- a/src/notifications/StandardActions.js
+++ b/src/notifications/StandardActions.js
@@ -16,9 +16,9 @@ limitations under the License.
'use strict';
-var NotificationUtils = require('./NotificationUtils');
+const NotificationUtils = require('./NotificationUtils');
-var encodeActions = NotificationUtils.encodeActions;
+const encodeActions = NotificationUtils.encodeActions;
module.exports = {
ACTION_NOTIFY: encodeActions({notify: true}),
diff --git a/src/phonenumber.js b/src/phonenumber.js
index aaf018ba26..3b7e4ba4f1 100644
--- a/src/phonenumber.js
+++ b/src/phonenumber.js
@@ -14,7 +14,7 @@ See the License for the specific language governing permissions and
limitations under the License.
*/
-const PHONE_NUMBER_REGEXP = /^[0-9 -\.]+$/;
+const PHONE_NUMBER_REGEXP = /^[0-9 -.]+$/;
/*
* Do basic validation to determine if the given input could be
diff --git a/src/settings/Settings.js b/src/settings/Settings.js
index 021942c6f2..eb702a729c 100644
--- a/src/settings/Settings.js
+++ b/src/settings/Settings.js
@@ -90,6 +90,12 @@ export const SETTINGS = {
controller: new LazyLoadingController(),
default: true,
},
+ "feature_keybackup": {
+ isFeature: true,
+ displayName: _td("Backup of encryption keys to server"),
+ supportedLevels: LEVELS_FEATURE,
+ default: false,
+ },
"MessageComposerInput.dontSuggestEmoji": {
supportedLevels: LEVELS_ACCOUNT_SETTINGS,
displayName: _td('Disable Emoji suggestions while typing'),
@@ -276,6 +282,16 @@ export const SETTINGS = {
default: true,
controller: new AudioNotificationsEnabledController(),
},
+ "pinMentionedRooms": {
+ supportedLevels: LEVELS_ACCOUNT_SETTINGS,
+ displayName: _td("Pin rooms I'm mentioned in to the top of the room list"),
+ default: false,
+ },
+ "pinUnreadRooms": {
+ supportedLevels: LEVELS_ACCOUNT_SETTINGS,
+ displayName: _td("Pin unread rooms to the top of the room list"),
+ default: false,
+ },
"enableWidgetScreenshots": {
supportedLevels: LEVELS_ACCOUNT_SETTINGS,
displayName: _td('Enable widget screenshots on supported widgets'),
@@ -290,4 +306,9 @@ export const SETTINGS = {
displayName: _td('Show empty room list headings'),
default: true,
},
+ "showDeveloperTools": {
+ supportedLevels: LEVELS_ACCOUNT_SETTINGS,
+ displayName: _td('Show developer tools'),
+ default: false,
+ },
};
diff --git a/src/settings/SettingsStore.js b/src/settings/SettingsStore.js
index cb6d83e884..bb3f412a9b 100644
--- a/src/settings/SettingsStore.js
+++ b/src/settings/SettingsStore.js
@@ -248,7 +248,7 @@ export default class SettingsStore {
if (actualValue !== undefined && actualValue !== null) return actualValue;
return calculatedValue;
}
- /* eslint-disable valid-jsdoc */ //https://github.com/eslint/eslint/issues/7307
+ /* eslint-disable valid-jsdoc */ //https://github.com/eslint/eslint/issues/7307
/**
* Sets the value for a setting. The room ID is optional if the setting is not being
* set for a particular room, otherwise it should be supplied. The value may be null
diff --git a/src/settings/controllers/SettingController.js b/src/settings/controllers/SettingController.js
index 0ebe0042e6..a7d0ccf21a 100644
--- a/src/settings/controllers/SettingController.js
+++ b/src/settings/controllers/SettingController.js
@@ -23,7 +23,6 @@ limitations under the License.
* intended to handle environmental factors for specific settings.
*/
export default class SettingController {
-
/**
* Gets the overridden value for the setting, if any. This must return null if the
* value is not to be overridden, otherwise it must return the new value.
diff --git a/src/stores/RoomListStore.js b/src/stores/RoomListStore.js
index 67c0c13be7..0f8e5d7b4d 100644
--- a/src/stores/RoomListStore.js
+++ b/src/stores/RoomListStore.js
@@ -17,13 +17,13 @@ import {Store} from 'flux/utils';
import dis from '../dispatcher';
import DMRoomMap from '../utils/DMRoomMap';
import Unread from '../Unread';
+import SettingsStore from "../settings/SettingsStore";
/**
* A class for storing application state for categorising rooms in
* the RoomList.
*/
class RoomListStore extends Store {
-
static _listOrders = {
"m.favourite": "manual",
"im.vector.fake.invite": "recent",
@@ -54,6 +54,24 @@ class RoomListStore extends Store {
"im.vector.fake.archived": [],
},
ready: false,
+
+ // The room cache stores a mapping of roomId to cache record.
+ // Each cache record is a key/value pair for various bits of
+ // data used to sort the room list. Currently this stores the
+ // following bits of informations:
+ // "timestamp": number, The timestamp of the last relevant
+ // event in the room.
+ // "notifications": boolean, Whether or not the user has been
+ // highlighted on any unread events.
+ // "unread": boolean, Whether or not the user has any
+ // unread events.
+ //
+ // All of the cached values are lazily loaded on read in the
+ // recents comparator. When an event is received for a particular
+ // room, all the cached values are invalidated - forcing the
+ // next read to set new values. The entries do not expire on
+ // their own.
+ roomCache: {},
};
}
@@ -85,6 +103,8 @@ class RoomListStore extends Store {
!payload.isLiveUnfilteredRoomTimelineEvent ||
!this._eventTriggersRecentReorder(payload.event)
) break;
+
+ this._clearCachedRoomState(payload.event.getRoomId());
this._generateRoomLists();
}
break;
@@ -112,6 +132,8 @@ class RoomListStore extends Store {
if (liveTimeline !== eventTimeline ||
!this._eventTriggersRecentReorder(payload.event)
) break;
+
+ this._clearCachedRoomState(payload.event.getRoomId());
this._generateRoomLists();
}
break;
@@ -120,6 +142,13 @@ class RoomListStore extends Store {
this._generateRoomLists();
}
break;
+ case 'MatrixActions.Room.accountData': {
+ if (payload.event_type === 'm.fully_read') {
+ this._clearCachedRoomState(payload.room.roomId);
+ this._generateRoomLists();
+ }
+ }
+ break;
case 'MatrixActions.Room.myMembership': {
this._generateRoomLists();
}
@@ -217,11 +246,18 @@ class RoomListStore extends Store {
}
});
+ // Note: we check the settings up here instead of in the forEach or
+ // in the _recentsComparator to avoid hitting the SettingsStore a few
+ // thousand times.
+ const pinUnread = SettingsStore.getValue("pinUnreadRooms");
+ const pinMentioned = SettingsStore.getValue("pinMentionedRooms");
Object.keys(lists).forEach((listKey) => {
let comparator;
switch (RoomListStore._listOrders[listKey]) {
case "recent":
- comparator = this._recentsComparator;
+ comparator = (roomA, roomB) => {
+ return this._recentsComparator(roomA, roomB, pinUnread, pinMentioned);
+ };
break;
case "manual":
default:
@@ -237,6 +273,44 @@ class RoomListStore extends Store {
});
}
+ _updateCachedRoomState(roomId, type, value) {
+ const roomCache = this._state.roomCache;
+ if (!roomCache[roomId]) roomCache[roomId] = {};
+
+ if (value) roomCache[roomId][type] = value;
+ else delete roomCache[roomId][type];
+
+ this._setState({roomCache});
+ }
+
+ _clearCachedRoomState(roomId) {
+ const roomCache = this._state.roomCache;
+ delete roomCache[roomId];
+ this._setState({roomCache});
+ }
+
+ _getRoomState(room, type) {
+ const roomId = room.roomId;
+ const roomCache = this._state.roomCache;
+ if (roomCache[roomId] && typeof roomCache[roomId][type] !== 'undefined') {
+ return roomCache[roomId][type];
+ }
+
+ if (type === "timestamp") {
+ const ts = this._tsOfNewestEvent(room);
+ this._updateCachedRoomState(roomId, "timestamp", ts);
+ return ts;
+ } else if (type === "unread") {
+ const unread = room.getUnreadNotificationCount() > 0;
+ this._updateCachedRoomState(roomId, "unread", unread);
+ return unread;
+ } else if (type === "notifications") {
+ const notifs = room.getUnreadNotificationCount("highlight") > 0;
+ this._updateCachedRoomState(roomId, "notifications", notifs);
+ return notifs;
+ } else throw new Error("Unrecognized room cache type: " + type);
+ }
+
_eventTriggersRecentReorder(ev) {
return ev.getTs() && (
Unread.eventTriggersUnreadCount(ev) ||
@@ -262,10 +336,40 @@ class RoomListStore extends Store {
}
}
- _recentsComparator(roomA, roomB) {
- // XXX: We could use a cache here and update it when we see new
- // events that trigger a reorder
- return this._tsOfNewestEvent(roomB) - this._tsOfNewestEvent(roomA);
+ _recentsComparator(roomA, roomB, pinUnread, pinMentioned) {
+ // We try and set the ordering to be Mentioned > Unread > Recent
+ // assuming the user has the right settings, of course.
+
+ const timestampA = this._getRoomState(roomA, "timestamp");
+ const timestampB = this._getRoomState(roomB, "timestamp");
+ const timestampDiff = timestampB - timestampA;
+
+ if (pinMentioned) {
+ const mentionsA = this._getRoomState(roomA, "notifications");
+ const mentionsB = this._getRoomState(roomB, "notifications");
+ if (mentionsA && !mentionsB) return -1;
+ if (!mentionsA && mentionsB) return 1;
+
+ // If they both have notifications, sort by timestamp.
+ // If neither have notifications (the fourth check not shown
+ // here), then try and sort by unread messages and finally by
+ // timestamp.
+ if (mentionsA && mentionsB) return timestampDiff;
+ }
+
+ if (pinUnread) {
+ const unreadA = this._getRoomState(roomA, "unread");
+ const unreadB = this._getRoomState(roomB, "unread");
+ if (unreadA && !unreadB) return -1;
+ if (!unreadA && unreadB) return 1;
+
+ // If they both have unread messages, sort by timestamp
+ // If nether have unread message (the fourth check not shown
+ // here), then just sort by timestamp anyways.
+ if (unreadA && unreadB) return timestampDiff;
+ }
+
+ return timestampDiff;
}
_lexicographicalComparator(roomA, roomB) {
diff --git a/src/utils/DMRoomMap.js b/src/utils/DMRoomMap.js
index bb5e4d706b..af65b6f001 100644
--- a/src/utils/DMRoomMap.js
+++ b/src/utils/DMRoomMap.js
@@ -93,7 +93,7 @@ export default class DMRoomMap {
return {userId, roomId};
}
}
- }).filter((ids) => !!ids); //filter out
+ }).filter((ids) => !!ids); //filter out
// these are actually all legit self-chats
// bail out
if (!guessedUserIdsThatChanged.length) {
diff --git a/src/utils/DecryptFile.js b/src/utils/DecryptFile.js
index 92c2e3644d..ea0e4c3fb0 100644
--- a/src/utils/DecryptFile.js
+++ b/src/utils/DecryptFile.js
@@ -77,7 +77,7 @@ const ALLOWED_BLOB_MIMETYPES = {
'audio/x-pn-wav': true,
'audio/flac': true,
'audio/x-flac': true,
-}
+};
/**
* Decrypt a file attached to a matrix event.
diff --git a/test/matrix-to-test.js b/test/matrix-to-test.js
new file mode 100644
index 0000000000..70533575c4
--- /dev/null
+++ b/test/matrix-to-test.js
@@ -0,0 +1,349 @@
+/*
+Copyright 2018 New Vector Ltd
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+ http://www.apache.org/licenses/LICENSE-2.0
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+
+import expect from 'expect';
+import peg from '../src/MatrixClientPeg';
+import {
+ makeEventPermalink,
+ makeGroupPermalink,
+ makeRoomPermalink,
+ makeUserPermalink,
+ pickServerCandidates,
+} from "../src/matrix-to";
+import * as testUtils from "./test-utils";
+
+
+describe('matrix-to', function() {
+ let sandbox;
+
+ beforeEach(function() {
+ testUtils.beforeEach(this);
+ sandbox = testUtils.stubClient();
+ peg.get().credentials = { userId: "@test:example.com" };
+ });
+
+ afterEach(function() {
+ sandbox.restore();
+ });
+
+ it('should pick no candidate servers when the room is not found', function() {
+ peg.get().getRoom = () => null;
+ const pickedServers = pickServerCandidates("!somewhere:example.org");
+ expect(pickedServers).toExist();
+ expect(pickedServers.length).toBe(0);
+ });
+
+ it('should pick no candidate servers when the room has no members', function() {
+ peg.get().getRoom = () => {
+ return {
+ getJoinedMembers: () => [],
+ };
+ };
+ const pickedServers = pickServerCandidates("!somewhere:example.org");
+ expect(pickedServers).toExist();
+ expect(pickedServers.length).toBe(0);
+ });
+
+ it('should pick a candidate server for the highest power level user in the room', function() {
+ peg.get().getRoom = () => {
+ return {
+ getJoinedMembers: () => [
+ {
+ userId: "@alice:pl_50",
+ powerLevel: 50,
+ },
+ {
+ userId: "@alice:pl_75",
+ powerLevel: 75,
+ },
+ {
+ userId: "@alice:pl_95",
+ powerLevel: 95,
+ },
+ ],
+ };
+ };
+ const pickedServers = pickServerCandidates("!somewhere:example.org");
+ expect(pickedServers).toExist();
+ expect(pickedServers.length).toBe(3);
+ expect(pickedServers[0]).toBe("pl_95");
+ // we don't check the 2nd and 3rd servers because that is done by the next test
+ });
+
+ it('should pick candidate servers based on user population', function() {
+ peg.get().getRoom = () => {
+ return {
+ getJoinedMembers: () => [
+ {
+ userId: "@alice:first",
+ powerLevel: 0,
+ },
+ {
+ userId: "@bob:first",
+ powerLevel: 0,
+ },
+ {
+ userId: "@charlie:first",
+ powerLevel: 0,
+ },
+ {
+ userId: "@alice:second",
+ powerLevel: 0,
+ },
+ {
+ userId: "@bob:second",
+ powerLevel: 0,
+ },
+ {
+ userId: "@charlie:third",
+ powerLevel: 0,
+ },
+ ],
+ };
+ };
+ const pickedServers = pickServerCandidates("!somewhere:example.org");
+ expect(pickedServers).toExist();
+ expect(pickedServers.length).toBe(3);
+ expect(pickedServers[0]).toBe("first");
+ expect(pickedServers[1]).toBe("second");
+ expect(pickedServers[2]).toBe("third");
+ });
+
+ it('should pick prefer candidate servers with higher power levels', function() {
+ peg.get().getRoom = () => {
+ return {
+ getJoinedMembers: () => [
+ {
+ userId: "@alice:first",
+ powerLevel: 100,
+ },
+ {
+ userId: "@alice:second",
+ powerLevel: 0,
+ },
+ {
+ userId: "@bob:second",
+ powerLevel: 0,
+ },
+ {
+ userId: "@charlie:third",
+ powerLevel: 0,
+ },
+ ],
+ };
+ };
+ const pickedServers = pickServerCandidates("!somewhere:example.org");
+ expect(pickedServers).toExist();
+ expect(pickedServers.length).toBe(3);
+ expect(pickedServers[0]).toBe("first");
+ expect(pickedServers[1]).toBe("second");
+ expect(pickedServers[2]).toBe("third");
+ });
+
+ it('should work with IPv4 hostnames', function() {
+ peg.get().getRoom = () => {
+ return {
+ getJoinedMembers: () => [
+ {
+ userId: "@alice:127.0.0.1",
+ powerLevel: 100,
+ },
+ ],
+ };
+ };
+ const pickedServers = pickServerCandidates("!somewhere:example.org");
+ expect(pickedServers).toExist();
+ expect(pickedServers.length).toBe(1);
+ expect(pickedServers[0]).toBe("127.0.0.1");
+ });
+
+ it('should work with IPv6 hostnames', function() {
+ peg.get().getRoom = () => {
+ return {
+ getJoinedMembers: () => [
+ {
+ userId: "@alice:[::1]",
+ powerLevel: 100,
+ },
+ ],
+ };
+ };
+ const pickedServers = pickServerCandidates("!somewhere:example.org");
+ expect(pickedServers).toExist();
+ expect(pickedServers.length).toBe(1);
+ expect(pickedServers[0]).toBe("[::1]");
+ });
+
+ it('should work with IPv4 hostnames with ports', function() {
+ peg.get().getRoom = () => {
+ return {
+ getJoinedMembers: () => [
+ {
+ userId: "@alice:127.0.0.1:8448",
+ powerLevel: 100,
+ },
+ ],
+ };
+ };
+ const pickedServers = pickServerCandidates("!somewhere:example.org");
+ expect(pickedServers).toExist();
+ expect(pickedServers.length).toBe(1);
+ expect(pickedServers[0]).toBe("127.0.0.1:8448");
+ });
+
+ it('should work with IPv6 hostnames with ports', function() {
+ peg.get().getRoom = () => {
+ return {
+ getJoinedMembers: () => [
+ {
+ userId: "@alice:[::1]:8448",
+ powerLevel: 100,
+ },
+ ],
+ };
+ };
+ const pickedServers = pickServerCandidates("!somewhere:example.org");
+ expect(pickedServers).toExist();
+ expect(pickedServers.length).toBe(1);
+ expect(pickedServers[0]).toBe("[::1]:8448");
+ });
+
+ it('should work with hostnames with ports', function() {
+ peg.get().getRoom = () => {
+ return {
+ getJoinedMembers: () => [
+ {
+ userId: "@alice:example.org:8448",
+ powerLevel: 100,
+ },
+ ],
+ };
+ };
+ const pickedServers = pickServerCandidates("!somewhere:example.org");
+ expect(pickedServers).toExist();
+ expect(pickedServers.length).toBe(1);
+ expect(pickedServers[0]).toBe("example.org:8448");
+ });
+
+ it('should generate an event permalink for room IDs with no candidate servers', function() {
+ peg.get().getRoom = () => null;
+ const result = makeEventPermalink("!somewhere:example.org", "$something:example.com");
+ expect(result).toBe("https://matrix.to/#/!somewhere:example.org/$something:example.com");
+ });
+
+ it('should generate an event permalink for room IDs with some candidate servers', function() {
+ peg.get().getRoom = () => {
+ return {
+ getJoinedMembers: () => [
+ {
+ userId: "@alice:first",
+ powerLevel: 100,
+ },
+ {
+ userId: "@bob:second",
+ powerLevel: 0,
+ },
+ ],
+ };
+ };
+ const result = makeEventPermalink("!somewhere:example.org", "$something:example.com");
+ expect(result).toBe("https://matrix.to/#/!somewhere:example.org/$something:example.com?via=first&via=second");
+ });
+
+ it('should generate a room permalink for room IDs with no candidate servers', function() {
+ peg.get().getRoom = () => null;
+ const result = makeRoomPermalink("!somewhere:example.org");
+ expect(result).toBe("https://matrix.to/#/!somewhere:example.org");
+ });
+
+ it('should generate a room permalink for room IDs with some candidate servers', function() {
+ peg.get().getRoom = () => {
+ return {
+ getJoinedMembers: () => [
+ {
+ userId: "@alice:first",
+ powerLevel: 100,
+ },
+ {
+ userId: "@bob:second",
+ powerLevel: 0,
+ },
+ ],
+ };
+ };
+ const result = makeRoomPermalink("!somewhere:example.org");
+ expect(result).toBe("https://matrix.to/#/!somewhere:example.org?via=first&via=second");
+ });
+
+ // Technically disallowed but we'll test it anyways
+ it('should generate an event permalink for room aliases with no candidate servers', function() {
+ peg.get().getRoom = () => null;
+ const result = makeEventPermalink("#somewhere:example.org", "$something:example.com");
+ expect(result).toBe("https://matrix.to/#/#somewhere:example.org/$something:example.com");
+ });
+
+ // Technically disallowed but we'll test it anyways
+ it('should generate an event permalink for room aliases without candidate servers', function() {
+ peg.get().getRoom = () => {
+ return {
+ getJoinedMembers: () => [
+ {
+ userId: "@alice:first",
+ powerLevel: 100,
+ },
+ {
+ userId: "@bob:second",
+ powerLevel: 0,
+ },
+ ],
+ };
+ };
+ const result = makeEventPermalink("#somewhere:example.org", "$something:example.com");
+ expect(result).toBe("https://matrix.to/#/#somewhere:example.org/$something:example.com");
+ });
+
+ it('should generate a room permalink for room aliases with no candidate servers', function() {
+ peg.get().getRoom = () => null;
+ const result = makeRoomPermalink("#somewhere:example.org");
+ expect(result).toBe("https://matrix.to/#/#somewhere:example.org");
+ });
+
+ it('should generate a room permalink for room aliases without candidate servers', function() {
+ peg.get().getRoom = () => {
+ return {
+ getJoinedMembers: () => [
+ {
+ userId: "@alice:first",
+ powerLevel: 100,
+ },
+ {
+ userId: "@bob:second",
+ powerLevel: 0,
+ },
+ ],
+ };
+ };
+ const result = makeRoomPermalink("#somewhere:example.org");
+ expect(result).toBe("https://matrix.to/#/#somewhere:example.org");
+ });
+
+ it('should generate a user permalink', function() {
+ const result = makeUserPermalink("@someone:example.org");
+ expect(result).toBe("https://matrix.to/#/@someone:example.org");
+ });
+
+ it('should generate a group permalink', function() {
+ const result = makeGroupPermalink("+community:example.org");
+ expect(result).toBe("https://matrix.to/#/+community:example.org");
+ });
+});