From 3b6599dcdc31fdd387ac4479751091d7a7c22ac8 Mon Sep 17 00:00:00 2001 From: Luke Barnard Date: Wed, 7 Jun 2017 15:58:21 +0100 Subject: [PATCH 01/11] Use user_directory endpoint to populate ChatInviteDialog Also attempt to slightly improve the feedback given when searching. There is still room for improvement - it's not totally obvious whether to display a spinner because it's quite jarring were it to replace the dd. This does mean that "No results" will flash awkardly between two queries, neither of which return any results. --- .../views/dialogs/ChatInviteDialog.js | 157 +++++++++--------- src/i18n/strings/en_EN.json | 1 + 2 files changed, 83 insertions(+), 75 deletions(-) diff --git a/src/components/views/dialogs/ChatInviteDialog.js b/src/components/views/dialogs/ChatInviteDialog.js index 3633670f25..867a3b423c 100644 --- a/src/components/views/dialogs/ChatInviteDialog.js +++ b/src/components/views/dialogs/ChatInviteDialog.js @@ -26,6 +26,7 @@ import AccessibleButton from '../elements/AccessibleButton'; import q from 'q'; const TRUNCATE_QUERY_LIST = 40; +const QUERY_USER_DIRECTORY_DEBOUNCE_MS = 200; module.exports = React.createClass({ displayName: "ChatInviteDialog", @@ -40,13 +41,13 @@ module.exports = React.createClass({ roomId: React.PropTypes.string, button: React.PropTypes.string, focus: React.PropTypes.bool, - onFinished: React.PropTypes.func.isRequired + onFinished: React.PropTypes.func.isRequired, }, getDefaultProps: function() { return { value: "", - focus: true + focus: true, }; }, @@ -54,12 +55,16 @@ module.exports = React.createClass({ return { error: false, - // List of AddressTile.InviteAddressType objects represeting + // List of AddressTile.InviteAddressType objects representing // the list of addresses we're going to invite inviteList: [], - // List of AddressTile.InviteAddressType objects represeting - // the set of autocompletion results for the current search + // Whether a search is ongoing + busy: false, + // The query being searched for + query: "", + // List of AddressTile.InviteAddressType objects representing + // the set of auto-completion results for the current search // query. queryList: [], }; @@ -70,7 +75,6 @@ module.exports = React.createClass({ // Set the cursor at the end of the text input this.refs.textinput.value = this.props.value; } - this._updateUserList(); }, onButtonClick: function() { @@ -137,15 +141,15 @@ module.exports = React.createClass({ } else if (e.keyCode === 38) { // up arrow e.stopPropagation(); e.preventDefault(); - this.addressSelector.moveSelectionUp(); + if (this.addressSelector) this.addressSelector.moveSelectionUp(); } else if (e.keyCode === 40) { // down arrow e.stopPropagation(); e.preventDefault(); - this.addressSelector.moveSelectionDown(); + if (this.addressSelector) this.addressSelector.moveSelectionDown(); } else if (this.state.queryList.length > 0 && (e.keyCode === 188 || e.keyCode === 13 || e.keyCode === 9)) { // comma or enter or tab e.stopPropagation(); e.preventDefault(); - this.addressSelector.chooseSelection(); + if (this.addressSelector) this.addressSelector.chooseSelection(); } else if (this.refs.textinput.value.length === 0 && this.state.inviteList.length && e.keyCode === 8) { // backspace e.stopPropagation(); e.preventDefault(); @@ -168,74 +172,79 @@ module.exports = React.createClass({ onQueryChanged: function(ev) { const query = ev.target.value.toLowerCase(); - let queryList = []; - - if (query.length < 2) { - return; - } - if (this.queryChangedDebouncer) { clearTimeout(this.queryChangedDebouncer); } - this.queryChangedDebouncer = setTimeout(() => { - // Only do search if there is something to search - if (query.length > 0 && query != '@') { - this._userList.forEach((user) => { - if (user.userId.toLowerCase().indexOf(query) === -1 && - user.displayName.toLowerCase().indexOf(query) === -1 - ) { - return; - } + // Only do search if there is something to search + if (query.length > 0 && query != '@' && query.length >= 2) { + this.queryChangedDebouncer = setTimeout(() => { + this.setState({ + busy: true, + query, + }); + MatrixClientPeg.get().searchUserDirectory({ + term: query, + }).then((resp) => { + const queryList = []; + resp.results.forEach((user) => { + if (user.user_id === MatrixClientPeg.get().credentials.userId) { + return; + } + // Return objects, structure of which is defined + // by InviteAddressType + queryList.push({ + addressType: 'mx', + address: user.user_id, + displayName: user.display_name, + avatarMxc: user.avatar_url, + isKnown: true, + }); + }); - // Return objects, structure of which is defined - // by InviteAddressType - queryList.push({ - addressType: 'mx', - address: user.userId, - displayName: user.displayName, - avatarMxc: user.avatarUrl, - isKnown: true, - order: user.getLastActiveTs(), + // If the query is a valid address, add an entry for that + // This is important, otherwise there's no way to invite + // a perfectly valid address if there are close matches. + const addrType = getAddressType(query); + if (addrType !== null) { + queryList.unshift({ + addressType: addrType, + address: query, + isKnown: false, + }); + if (this._cancelThreepidLookup) this._cancelThreepidLookup(); + if (addrType == 'email') { + this._lookupThreepid(addrType, query).done(); + } + } + this.setState({ + queryList, + error: false, + }, () => { + this.addressSelector.moveSelectionTop(); + }); + }).finally(() => { + this.setState({ + busy: false, }); }); - - queryList = queryList.sort((a,b) => { - return a.order < b.order; - }); - - // If the query is a valid address, add an entry for that - // This is important, otherwise there's no way to invite - // a perfectly valid address if there are close matches. - const addrType = getAddressType(query); - if (addrType !== null) { - queryList.unshift({ - addressType: addrType, - address: query, - isKnown: false, - }); - if (this._cancelThreepidLookup) this._cancelThreepidLookup(); - if (addrType == 'email') { - this._lookupThreepid(addrType, query).done(); - } - } - } + }, QUERY_USER_DIRECTORY_DEBOUNCE_MS); + } else { this.setState({ - queryList: queryList, - error: false, - }, () => { - this.addressSelector.moveSelectionTop(); + queryList: [], + query: "", }); - }, 200); + } }, onDismissed: function(index) { var self = this; - return function() { + return () => { var inviteList = self.state.inviteList.slice(); inviteList.splice(index, 1); self.setState({ inviteList: inviteList, queryList: [], + query: "", }); if (this._cancelThreepidLookup) this._cancelThreepidLookup(); }; @@ -254,6 +263,7 @@ module.exports = React.createClass({ this.setState({ inviteList: inviteList, queryList: [], + query: "", }); if (this._cancelThreepidLookup) this._cancelThreepidLookup(); }, @@ -342,16 +352,6 @@ module.exports = React.createClass({ this.props.onFinished(true, addrTexts); }, - _updateUserList: function() { - // Get all the users - this._userList = MatrixClientPeg.get().getUsers(); - // Remove current user - const meIx = this._userList.findIndex((u) => { - return u.userId === MatrixClientPeg.get().credentials.userId; - }); - this._userList.splice(meIx, 1); - }, - _isOnInviteList: function(uid) { for (let i = 0; i < this.state.inviteList.length; i++) { if ( @@ -419,6 +419,7 @@ module.exports = React.createClass({ this.setState({ inviteList: inviteList, queryList: [], + query: "", }); if (this._cancelThreepidLookup) this._cancelThreepidLookup(); return inviteList; @@ -454,7 +455,7 @@ module.exports = React.createClass({ displayName: res.displayname, avatarMxc: res.avatar_url, isKnown: true, - }] + }], }); }); }, @@ -486,16 +487,22 @@ module.exports = React.createClass({ placeholder={this.props.placeholder} defaultValue={this.props.value} autoFocus={this.props.focus}> - + , ); - var error; - var addressSelector; + let error; + let addressSelector; if (this.state.error) { error =
{_t("You have entered an invalid contact. Try using their Matrix ID or email address.")}
; + } else if ( + this.state.query.length > 0 && + this.state.queryList.length === 0 && + !this.state.busy + ) { + error =
{_t("No results")}
; } else { const addressSelectorHeader =
- Searching known users + { _t("Searching known users") }
; addressSelector = ( {this.addressSelector = ref;}} diff --git a/src/i18n/strings/en_EN.json b/src/i18n/strings/en_EN.json index c87ffb8cdf..eb331c24a9 100644 --- a/src/i18n/strings/en_EN.json +++ b/src/i18n/strings/en_EN.json @@ -599,6 +599,7 @@ "Who can read history?": "Who can read history?", "Who would you like to add to this room?": "Who would you like to add to this room?", "Who would you like to communicate with?": "Who would you like to communicate with?", + "Searching known users": "Searching known users", "%(senderName)s withdrew %(targetName)s's invitation.": "%(senderName)s withdrew %(targetName)s's invitation.", "Would you like to": "Would you like to", "You are already in a call.": "You are already in a call.", From 68ddf35db4e463461c9b8707c421cdb923f1c2ba Mon Sep 17 00:00:00 2001 From: Luke Barnard Date: Wed, 7 Jun 2017 17:33:15 +0100 Subject: [PATCH 02/11] Use then, catch, done and display any errors that occur during search --- .../views/dialogs/ChatInviteDialog.js | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/src/components/views/dialogs/ChatInviteDialog.js b/src/components/views/dialogs/ChatInviteDialog.js index 867a3b423c..0c65f02525 100644 --- a/src/components/views/dialogs/ChatInviteDialog.js +++ b/src/components/views/dialogs/ChatInviteDialog.js @@ -61,6 +61,8 @@ module.exports = React.createClass({ // Whether a search is ongoing busy: false, + // An error message generated during the user directory search + searchError: null, // The query being searched for query: "", // List of AddressTile.InviteAddressType objects representing @@ -181,6 +183,7 @@ module.exports = React.createClass({ this.setState({ busy: true, query, + searchError: null, }); MatrixClientPeg.get().searchUserDirectory({ term: query, @@ -222,7 +225,12 @@ module.exports = React.createClass({ }, () => { this.addressSelector.moveSelectionTop(); }); - }).finally(() => { + }).catch((err) => { + console.error('Error whilst searching user directory: ', err); + this.setState({ + searchError: err.errcode ? err.message : _t('Something went wrong!'), + }); + }).done(() => { this.setState({ busy: false, }); @@ -232,6 +240,7 @@ module.exports = React.createClass({ this.setState({ queryList: [], query: "", + searchError: null, }); } }, @@ -494,6 +503,8 @@ module.exports = React.createClass({ let addressSelector; if (this.state.error) { error =
{_t("You have entered an invalid contact. Try using their Matrix ID or email address.")}
; + } else if (this.state.searchError) { + error =
{this.state.searchError}
; } else if ( this.state.query.length > 0 && this.state.queryList.length === 0 && @@ -501,15 +512,11 @@ module.exports = React.createClass({ ) { error =
{_t("No results")}
; } else { - const addressSelectorHeader =
- { _t("Searching known users") } -
; addressSelector = ( {this.addressSelector = ref;}} addressList={ this.state.queryList } onSelected={ this.onSelected } truncateAt={ TRUNCATE_QUERY_LIST } - header={ addressSelectorHeader } /> ); } From 29da25529c903a5d621032271cf17979c36a27cc Mon Sep 17 00:00:00 2001 From: Luke Barnard Date: Wed, 7 Jun 2017 17:40:09 +0100 Subject: [PATCH 03/11] Make it backwards compatible Hit the user_directory API and if M_UNRECOGNIZED, do a local search and continue to search locally therein. --- .../views/dialogs/ChatInviteDialog.js | 154 +++++++++++------- 1 file changed, 99 insertions(+), 55 deletions(-) diff --git a/src/components/views/dialogs/ChatInviteDialog.js b/src/components/views/dialogs/ChatInviteDialog.js index 0c65f02525..2f635fd670 100644 --- a/src/components/views/dialogs/ChatInviteDialog.js +++ b/src/components/views/dialogs/ChatInviteDialog.js @@ -63,6 +63,8 @@ module.exports = React.createClass({ busy: false, // An error message generated during the user directory search searchError: null, + // Whether the server supports the user_directory API + serverSupportsUserDirectory: true, // The query being searched for query: "", // List of AddressTile.InviteAddressType objects representing @@ -180,61 +182,11 @@ module.exports = React.createClass({ // Only do search if there is something to search if (query.length > 0 && query != '@' && query.length >= 2) { this.queryChangedDebouncer = setTimeout(() => { - this.setState({ - busy: true, - query, - searchError: null, - }); - MatrixClientPeg.get().searchUserDirectory({ - term: query, - }).then((resp) => { - const queryList = []; - resp.results.forEach((user) => { - if (user.user_id === MatrixClientPeg.get().credentials.userId) { - return; - } - // Return objects, structure of which is defined - // by InviteAddressType - queryList.push({ - addressType: 'mx', - address: user.user_id, - displayName: user.display_name, - avatarMxc: user.avatar_url, - isKnown: true, - }); - }); - - // If the query is a valid address, add an entry for that - // This is important, otherwise there's no way to invite - // a perfectly valid address if there are close matches. - const addrType = getAddressType(query); - if (addrType !== null) { - queryList.unshift({ - addressType: addrType, - address: query, - isKnown: false, - }); - if (this._cancelThreepidLookup) this._cancelThreepidLookup(); - if (addrType == 'email') { - this._lookupThreepid(addrType, query).done(); - } - } - this.setState({ - queryList, - error: false, - }, () => { - this.addressSelector.moveSelectionTop(); - }); - }).catch((err) => { - console.error('Error whilst searching user directory: ', err); - this.setState({ - searchError: err.errcode ? err.message : _t('Something went wrong!'), - }); - }).done(() => { - this.setState({ - busy: false, - }); - }); + if (this.state.serverSupportsUserDirectory) { + this._doUserDirectorySearch(query); + } else { + this._doLocalSearch(query); + } }, QUERY_USER_DIRECTORY_DEBOUNCE_MS); } else { this.setState({ @@ -277,6 +229,98 @@ module.exports = React.createClass({ if (this._cancelThreepidLookup) this._cancelThreepidLookup(); }, + _doUserDirectorySearch: function(query) { + this.setState({ + busy: true, + query, + searchError: null, + }); + MatrixClientPeg.get().searchUserDirectory({ + term: query, + }).then((resp) => { + this._processResults(resp.results, query); + }).catch((err) => { + console.error('Error whilst searching user directory: ', err); + this.setState({ + searchError: err.errcode ? err.message : _t('Something went wrong!'), + }); + if (err.errcode === 'M_UNRECOGNIZED') { + this.setState({ + serverSupportsUserDirectory: false, + }); + // Do a local search immediately + this._doLocalSearch(query); + } + }).done(() => { + this.setState({ + busy: false, + }); + }); + }, + + _doLocalSearch: function(query) { + this.setState({ + query, + searchError: null, + }); + const results = []; + MatrixClientPeg.get().getUsers().forEach((user) => { + if (user.userId.toLowerCase().indexOf(query) === -1 && + user.displayName.toLowerCase().indexOf(query) === -1 + ) { + return; + } + + // Put results in the format of the new API + results.push({ + user_id: user.userId, + display_name: user.displayName, + avatar_url: user.avatarUrl, + }); + }); + this._processResults(results, query); + }, + + _processResults: function(results, query) { + const queryList = []; + results.forEach((user) => { + if (user.user_id === MatrixClientPeg.get().credentials.userId) { + return; + } + // Return objects, structure of which is defined + // by InviteAddressType + queryList.push({ + addressType: 'mx', + address: user.user_id, + displayName: user.display_name, + avatarMxc: user.avatar_url, + isKnown: true, + }); + }); + + // If the query is a valid address, add an entry for that + // This is important, otherwise there's no way to invite + // a perfectly valid address if there are close matches. + const addrType = getAddressType(query); + if (addrType !== null) { + queryList.unshift({ + addressType: addrType, + address: query, + isKnown: false, + }); + if (this._cancelThreepidLookup) this._cancelThreepidLookup(); + if (addrType == 'email') { + this._lookupThreepid(addrType, query).done(); + } + } + this.setState({ + queryList, + error: false, + }, () => { + if (this.addressSelector) this.addressSelector.moveSelectionTop(); + }); + }, + _getDirectMessageRooms: function(addr) { const dmRoomMap = new DMRoomMap(MatrixClientPeg.get()); const dmRooms = dmRoomMap.getDMRoomsForUserId(addr); From 74d680a9524aa1eb73d0b4f276c78ce80b5985f9 Mon Sep 17 00:00:00 2001 From: Matthew Hodgson Date: Wed, 7 Jun 2017 18:15:13 +0100 Subject: [PATCH 04/11] sync fullstops everywhere --- src/i18n/strings/de_DE.json | 28 ++++++++++++++-------------- src/i18n/strings/el.json | 4 ++-- src/i18n/strings/en_US.json | 10 +++++----- src/i18n/strings/es.json | 2 +- src/i18n/strings/fr.json | 10 +++++----- src/i18n/strings/pt.json | 10 +++++----- src/i18n/strings/pt_BR.json | 10 +++++----- src/i18n/strings/ru.json | 6 +++--- 8 files changed, 40 insertions(+), 40 deletions(-) diff --git a/src/i18n/strings/de_DE.json b/src/i18n/strings/de_DE.json index 15375b8f90..513faea017 100644 --- a/src/i18n/strings/de_DE.json +++ b/src/i18n/strings/de_DE.json @@ -227,7 +227,7 @@ "to join the discussion": "um an der Diskussion teilzunehmen", "To kick users": "Um Nutzer zu entfernen", "Admin": "Administrator", - "Server may be unavailable, overloaded, or you hit a bug": "Server könnte nicht verfügbar oder überlastet sein oder du bist auf einen Fehler gestoßen", + "Server may be unavailable, overloaded, or you hit a bug.": "Server könnte nicht verfügbar oder überlastet sein oder du bist auf einen Fehler gestoßen.", "Could not connect to the integration server": "Konnte keine Verbindung zum Integrations-Server herstellen", "Disable inline URL previews by default": "URL-Vorschau im Chat standardmäßig deaktivieren", "Guests can't use labs features. Please register.": "Gäste können keine Labor-Funktionen nutzen. Bitte registrieren.", @@ -280,15 +280,15 @@ "times": "mal", "Bulk Options": "Bulk-Optionen", "Call Timeout": "Anruf-Timeout", - "Conference call failed": "Konferenzgespräch fehlgeschlagen", - "Conference calling is in development and may not be reliable": "Konferenzgespräche sind in Entwicklung und evtl. nicht zuverlässig", + "Conference call failed.": "Konferenzgespräch fehlgeschlagen.", + "Conference calling is in development and may not be reliable.": "Konferenzgespräche sind in Entwicklung und evtl. nicht zuverlässig.", "Conference calls are not supported in encrypted rooms": "Konferenzgespräche werden in verschlüsselten Räumen nicht unterstützt", "Conference calls are not supported in this client": "Konferenzgespräche werden von diesem Client nicht unterstützt", "Existing Call": "Bereits bestehender Anruf", "Failed to set up conference call": "Konferenzgespräch konnte nicht gestartet werden", "Failed to verify email address: make sure you clicked the link in the email": "Verifizierung der E-Mail-Adresse fehlgeschlagen: Bitte stelle sicher, dass du den Link in der E-Mail angeklickt hast", "Failure to create room": "Raumerstellung fehlgeschlagen", - "Guest users can't create new rooms. Please register to create room and start a chat": "Gäste können keine neuen Räume erstellen. Bitte registrieren um einen Raum zu erstellen und einen Chat zu starten", + "Guest users can't create new rooms. Please register to create room and start a chat.": "Gäste können keine neuen Räume erstellen. Bitte registrieren um einen Raum zu erstellen und einen Chat zu starten.", "Riot does not have permission to send you notifications - please check your browser settings": "Riot hat keine Berechtigung Benachrichtigungen zu senden - bitte prüfe deine Browser-Einstellungen", "Riot was not given permission to send notifications - please try again": "Riot hat das Recht nicht bekommen Benachrichtigungen zu senden. Bitte erneut probieren", "This email address is already in use": "Diese E-Mail-Adresse wird bereits verwendet", @@ -302,11 +302,11 @@ "Unable to enable Notifications": "Benachrichtigungen konnten nicht aktiviert werden", "Upload Failed": "Upload fehlgeschlagen", "VoIP is unsupported": "VoIP wird nicht unterstützt", - "You are already in a call": "Du bist bereits bei einem Anruf", - "You cannot place a call with yourself": "Du kannst keinen Anruf mit dir selbst starten", - "You cannot place VoIP calls in this browser": "Du kannst kein VoIP-Gespräch in diesem Browser starten", + "You are already in a call.": "Du bist bereits bei einem Anruf.", + "You cannot place a call with yourself.": "Du kannst keinen Anruf mit dir selbst starten.", + "You cannot place VoIP calls in this browser.": "Du kannst kein VoIP-Gespräch in diesem Browser starten.", "You need to log back in to generate end-to-end encryption keys for this device and submit the public key to your homeserver. This is a once off; sorry for the inconvenience.": "Du musst dich erneut anmelden, um Ende-zu-Ende-Verschlüsselungs-Schlüssel für dieses Gerät zu generieren und um den öffentlichen Schlüssel auf deinem Homeserver zu hinterlegen. Dies muss nur einmal durchgeführt werden, bitte entschuldige die Unannehmlichkeiten.", - "Your email address does not appear to be associated with a Matrix ID on this Homeserver": "Deine E-Mail-Adresse scheint nicht mit einer Matrix-ID auf diesem Homeserver verknüpft zu sein", + "Your email address does not appear to be associated with a Matrix ID on this Homeserver.": "Deine E-Mail-Adresse scheint nicht mit einer Matrix-ID auf diesem Homeserver verknüpft zu sein.", "Sun": "So", "Mon": "Mo", "Tue": "Di", @@ -581,7 +581,7 @@ "Failed to save settings": "Einstellungen konnten nicht gespeichert werden", "Failed to set display name": "Anzeigename konnte nicht gesetzt werden", "Fill screen": "Fülle Bildschirm", - "Guest users can't upload files. Please register to upload": "Gäste können keine Dateien hochladen. Bitte zunächst registrieren", + "Guest users can't upload files. Please register to upload.": "Gäste können keine Dateien hochladen. Bitte zunächst registrieren.", "Hide Text Formatting Toolbar": "Verberge Text-Formatierungs-Toolbar", "Incorrect verification code": "Falscher Verifizierungscode", "Invalid alias format": "Ungültiges Alias-Format", @@ -608,16 +608,16 @@ "Server error": "Server-Fehler", "Server may be unavailable, overloaded, or search timed out :(": "Der Server ist entweder nicht verfügbar, überlastet oder die Suche wurde wegen Zeitüberschreitung abgebrochen :(", "Server may be unavailable, overloaded, or the file too big": "Server ist entweder nicht verfügbar, überlastet oder die Datei ist zu groß", - "Server unavailable, overloaded, or something else went wrong": "Der Server ist entweder nicht verfügbar, überlastet oder es liegt ein anderweitiger Fehler vor", - "Some of your messages have not been sent": "Einige deiner Nachrichten wurden noch nicht gesendet", + "Server unavailable, overloaded, or something else went wrong.": "Der Server ist entweder nicht verfügbar, überlastet oder es liegt ein anderweitiger Fehler vor.", + "Some of your messages have not been sent.": "Einige deiner Nachrichten wurden noch nicht gesendet.", "Submit": "Absenden", "The main address for this room is: %(canonical_alias_section)s": "Die Hauptadresse für diesen Raum ist: %(canonical_alias_section)s", "This action cannot be performed by a guest user. Please register to be able to do this": "Diese Aktion kann nicht von einem Gast ausgeführt werden. Bitte registriere dich um dies zu tun", "%(actionVerb)s this person?": "Diese Person %(actionVerb)s?", "This room has no local addresses": "Dieser Raum hat keine lokale Adresse", - "This room is private or inaccessible to guests. You may be able to join if you register": "Dieser Raum ist privat oder für Gäste nicht zugänglich. Du kannst jedoch eventuell beitreten, wenn du dich registrierst", - "Tried to load a specific point in this room's timeline, but you do not have permission to view the message in question": "Versuchte einen spezifischen Punkt in der Raum-Chronik zu laden, aber du hast keine Berechtigung die angeforderte Nachricht anzuzeigen", - "Tried to load a specific point in this room's timeline, but was unable to find it": "Der Versuch, einen spezifischen Punkt im Chatverlauf zu laden, ist fehlgeschlagen. Der Punkt konnte nicht gefunden werden", + "This room is private or inaccessible to guests. You may be able to join if you register.": "Dieser Raum ist privat oder für Gäste nicht zugänglich. Du kannst jedoch eventuell beitreten, wenn du dich registrierst.", + "Tried to load a specific point in this room's timeline, but you do not have permission to view the message in question.": "Versuchte einen spezifischen Punkt in der Raum-Chronik zu laden, aber du hast keine Berechtigung die angeforderte Nachricht anzuzeigen.", + "Tried to load a specific point in this room's timeline, but was unable to find it.": "Der Versuch, einen spezifischen Punkt im Chatverlauf zu laden, ist fehlgeschlagen. Der Punkt konnte nicht gefunden werden.", "Turn Markdown off": "Markdown abschalten", "Turn Markdown on": "Markdown einschalten", "Unable to load device list": "Geräteliste konnte nicht geladen werden", diff --git a/src/i18n/strings/el.json b/src/i18n/strings/el.json index ab2129dc81..d8729202d5 100644 --- a/src/i18n/strings/el.json +++ b/src/i18n/strings/el.json @@ -48,7 +48,7 @@ "Authentication": "Πιστοποίηση", "and": "και", "An email has been sent to": "Ένα email στάλθηκε σε", - "A new password must be entered.": "Ο νέος κωδικός πρέπει να εισαχθεί", + "A new password must be entered.": "Ο νέος κωδικός πρέπει να εισαχθεί.", "%(senderName)s answered the call.": "Ο χρήστης %(senderName)s απάντησε.", "An error has occurred.": "Ένα σφάλμα προέκυψε", "Anyone": "Oποιοσδήποτε", @@ -265,7 +265,7 @@ "For security, this session has been signed out. Please sign in again.": "Για λόγους ασφαλείας, αυτή η συνεδρία έχει τερματιστεί. Παρακαλώ συνδεθείτε ξανά.", "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.": "Για λόγους ασφαλείας, τα κλειδιά κρυπτογράφησης θα διαγράφονται από τον φυλλομετρητή κατά την αποσύνδεση σας. Εάν επιθυμείτε να αποκρυπτογραφήσετε τις συνομιλίες σας στο μέλλον, εξάγετε τα κλειδιά σας και κρατήστε τα ασφαλή.", "Found a bug?": "Βρήκατε κάποιο πρόβλημα;", - "Guest users can't upload files. Please register to upload": "Οι επισκέπτες δεν μπορούν να ανεβάσουν αρχεία. Παρακαλώ εγγραφείτε πρώτα", + "Guest users can't upload files. Please register to upload.": "Οι επισκέπτες δεν μπορούν να ανεβάσουν αρχεία. Παρακαλώ εγγραφείτε πρώτα.", "had": "είχε", "Hangup": "Κλείσε", "Historical": "Ιστορικό", diff --git a/src/i18n/strings/en_US.json b/src/i18n/strings/en_US.json index 2ad228254b..19b854e936 100644 --- a/src/i18n/strings/en_US.json +++ b/src/i18n/strings/en_US.json @@ -308,7 +308,7 @@ "Guest access is disabled on this Home Server.": "Guest access is disabled on this Home Server.", "Guests can't set avatars. Please register.": "Guests can't set avatars. Please register.", "Guest users can't create new rooms. Please register to create room and start a chat.": "Guest users can't create new rooms. Please register to create room and start a chat.", - "Guest users can't upload files. Please register to upload": "Guest users can't upload files. Please register to upload", + "Guest users can't upload files. Please register to upload.": "Guest users can't upload files. Please register to upload.", "Guests can't use labs features. Please register.": "Guests can't use labs features. Please register.", "Guests cannot join this room even if explicitly invited.": "Guests cannot join this room even if explicitly invited.", "had": "had", @@ -476,7 +476,7 @@ "since the point in time of selecting this option": "since the point in time of selecting this option", "since they joined": "since they joined", "since they were invited": "since they were invited", - "Some of your messages have not been sent": "Some of your messages have not been sent", + "Some of your messages have not been sent.": "Some of your messages have not been sent.", "Someone": "Someone", "Sorry, this homeserver is using a login which is not recognised ": "Sorry, this homeserver is using a login which is not recognized ", "Start a chat": "Start a chat", @@ -501,7 +501,7 @@ "There was a problem logging in.": "There was a problem logging in.", "This room has no local addresses": "This room has no local addresses", "This room is not recognised.": "This room is not recognized.", - "This room is private or inaccessible to guests. You may be able to join if you register": "This room is private or inaccessible to guests. You may be able to join if you register", + "This room is private or inaccessible to guests. You may be able to join if you register.": "This room is private or inaccessible to guests. You may be able to join if you register.", "These are experimental features that may break in unexpected ways": "These are experimental features that may break in unexpected ways", "The visibility of existing history will be unchanged": "The visibility of existing history will be unchanged", "This doesn't appear to be a valid email address": "This doesn't appear to be a valid email address", @@ -530,8 +530,8 @@ "to tag as %(tagName)s": "to tag as %(tagName)s", "to tag direct chat": "to tag direct chat", "To use it, just wait for autocomplete results to load and tab through them.": "To use it, just wait for autocomplete results to load and tab through them.", - "Tried to load a specific point in this room's timeline, but you do not have permission to view the message in question": "Tried to load a specific point in this room's timeline, but you do not have permission to view the message in question", - "Tried to load a specific point in this room's timeline, but was unable to find it": "Tried to load a specific point in this room's timeline, but was unable to find it", + "Tried to load a specific point in this room's timeline, but you do not have permission to view the message in question.": "Tried to load a specific point in this room's timeline, but you do not have permission to view the message in question.", + "Tried to load a specific point in this room's timeline, but was unable to find it.": "Tried to load a specific point in this room's timeline, but was unable to find it.", "Turn Markdown off": "Turn Markdown off", "Turn Markdown on": "Turn Markdown on", "%(senderName)s turned on end-to-end encryption (algorithm %(algorithm)s).": "%(senderName)s turned on end-to-end encryption (algorithm %(algorithm)s).", diff --git a/src/i18n/strings/es.json b/src/i18n/strings/es.json index 9a07710570..125a929b9f 100644 --- a/src/i18n/strings/es.json +++ b/src/i18n/strings/es.json @@ -282,7 +282,7 @@ "%(userId)s from %(fromPowerLevel)s to %(toPowerLevel)s": "%(userId)s de %(fromPowerLevel)s a %(toPowerLevel)s", "Guests can't set avatars. Please register.": "Invitados no puedes establecer avatares. Por favor regístrate.", "Guest users can't create new rooms. Please register to create room and start a chat.": "Usuarios invitados no pueden crear nuevas salas. Por favor regístrate para crear la sala y iniciar la conversación.", - "Guest users can't upload files. Please register to upload": "Usuarios invitados no puedes subir archivos. Por favor regístrate para subir tus archivos", + "Guest users can't upload files. Please register to upload.": "Usuarios invitados no puedes subir archivos. Por favor regístrate para subir tus archivos.", "Guests can't use labs features. Please register.": "Invitados no puedes usar las características en desarrollo. Por favor regístrate.", "Guests cannot join this room even if explicitly invited.": "Invitados no pueden unirse a esta sala aun cuando han sido invitados explícitamente.", "had": "tuvo", diff --git a/src/i18n/strings/fr.json b/src/i18n/strings/fr.json index 0ae02be82f..80d2479c48 100644 --- a/src/i18n/strings/fr.json +++ b/src/i18n/strings/fr.json @@ -294,7 +294,7 @@ "Found a bug?": "Trouvé un problème ?", "%(userId)s from %(fromPowerLevel)s to %(toPowerLevel)s": "%(userId)s de %(fromPowerLevel)s à %(toPowerLevel)s", "Guest users can't create new rooms. Please register to create room and start a chat.": "Les visiteurs ne peuvent créer de nouveaux salons. Merci de vous enregistrer pour commencer une discussion.", - "Guest users can't upload files. Please register to upload": "Les visiteurs ne peuvent telécharger de fichiers. Merci de vous enregistrer pour télécharger", + "Guest users can't upload files. Please register to upload.": "Les visiteurs ne peuvent telécharger de fichiers. Merci de vous enregistrer pour télécharger.", "had": "avait", "Hangup": "Raccrocher", "Hide read receipts": "Cacher les accusés de réception", @@ -457,7 +457,7 @@ "since the point in time of selecting this option": "depuis le moment où cette option a été sélectionnée", "since they joined": "depuis qu’ils ont rejoint le salon", "since they were invited": "depuis qu’ils ont été invités", - "Some of your messages have not been sent": "Certains de vos messages n’ont pas été envoyés", + "Some of your messages have not been sent.": "Certains de vos messages n’ont pas été envoyés.", "Someone": "Quelqu'un", "Sorry, this homeserver is using a login which is not recognised ": "Désolé, ce homeserver utilise un identifiant qui n’est pas reconnu ", "Start a chat": "Démarrer une conversation", @@ -478,7 +478,7 @@ "The remote side failed to pick up": "Le correspondant n’a pas décroché", "This room has no local addresses": "Ce salon n'a pas d'adresse locale", "This room is not recognised.": "Ce salon n'a pas été reconnu.", - "This room is private or inaccessible to guests. You may be able to join if you register": "Ce salon est privé ou non autorisé aux visiteurs. Vous devriez pouvoir le rejoindre si vous vous enregistrez", + "This room is private or inaccessible to guests. You may be able to join if you register.": "Ce salon est privé ou non autorisé aux visiteurs. Vous devriez pouvoir le rejoindre si vous vous enregistrez.", "These are experimental features that may break in unexpected ways": "Ces fonctionnalités sont expérimentales et risquent de mal fonctionner", "The visibility of existing history will be unchanged": "La visibilité de l’historique existant sera inchangée", "This doesn't appear to be a valid email address": "Cette adresse n’a pas l’air d’être valide", @@ -507,8 +507,8 @@ "to tag as %(tagName)s": "pour marquer comme %(tagName)s", "to tag direct chat": "pour marquer comme conversation directe", "To use it, just wait for autocomplete results to load and tab through them.": "Pour l’utiliser, attendez simplement que les résultats de l’auto-complétion s’affichent et défilez avec la touche Tab.", - "Tried to load a specific point in this room's timeline, but you do not have permission to view the message in question": "Une tentative de chargement d’un point donné dans la chronologie de ce salon a été effectuée, mais vous n’avez pas la permission de voir le message en question", - "Tried to load a specific point in this room's timeline, but was unable to find it": "Une tentative de chargement d’un point donné dans la chronologie de ce salon a été effectuée, mais il n’a pas été trouvé", + "Tried to load a specific point in this room's timeline, but you do not have permission to view the message in question.": "Une tentative de chargement d’un point donné dans la chronologie de ce salon a été effectuée, mais vous n’avez pas la permission de voir le message en question.", + "Tried to load a specific point in this room's timeline, but was unable to find it.": "Une tentative de chargement d’un point donné dans la chronologie de ce salon a été effectuée, mais il n’a pas été trouvé.", "Turn Markdown off": "Désactiver le formatage ’Markdown’", "Turn Markdown on": "Activer le formatage ’Markdown’", "%(senderName)s turned on end-to-end encryption (algorithm %(algorithm)s).": "%(senderName)s a activé l’encryption bout-en-bout (algorithme %(algorithm)s).", diff --git a/src/i18n/strings/pt.json b/src/i18n/strings/pt.json index fb90423c3a..47260b4909 100644 --- a/src/i18n/strings/pt.json +++ b/src/i18n/strings/pt.json @@ -101,7 +101,7 @@ "Guests cannot join this room even if explicitly invited.": "Visitantes não podem entrar nesta sala, mesmo se forem explicitamente convidadas/os.", "Guests can't set avatars. Please register.": "Convidados não podem definir uma foto do perfil. Por favor, registre-se.", "Guests can't use labs features. Please register.": "Convidados não podem usar as funcionalidades de laboratório (lab), por gentileza se registre.", - "Guest users can't upload files. Please register to upload": "Usuários não podem fazer envio de arquivos. Por favor se cadastre para enviar arquivos", + "Guest users can't upload files. Please register to upload.": "Usuários não podem fazer envio de arquivos. Por favor se cadastre para enviar arquivos.", "had": "teve", "Hangup": "Desligar", "Historical": "Histórico", @@ -627,15 +627,15 @@ "Server may be unavailable, overloaded, or search timed out :(": "O servidor pode estar indisponível, sobrecarregado, ou a busca ultrapassou o tempo limite :(", "Server may be unavailable, overloaded, or the file too big": "O servidor pode estar indisponível, sobrecarregado, ou o arquivo é muito grande", "Server unavailable, overloaded, or something else went wrong.": "O servidor pode estar indisponível, sobrecarregado, ou alguma outra coisa não funcionou.", - "Some of your messages have not been sent": "Algumas das suas mensagens não foram enviadas", + "Some of your messages have not been sent.": "Algumas das suas mensagens não foram enviadas.", "Submit": "Enviar", "The main address for this room is": "O endereço principal desta sala é", "This action cannot be performed by a guest user. Please register to be able to do this": "Esta ação não pode ser realizada por um/a usuário/a visitante. Por favor, registre-se para poder fazer isso", "%(actionVerb)s this person?": "%(actionVerb)s esta pessoa?", "This room has no local addresses": "Esta sala não tem endereços locais", - "This room is private or inaccessible to guests. You may be able to join if you register": "Esta sala é privada ou inacessível para visitantes. Você poderá ingressar nela se registrar-se", - "Tried to load a specific point in this room's timeline, but you do not have permission to view the message in question": "Tentei carregar um ponto específico na linha do tempo desta sala, mas parece que você não tem permissões para ver a mensagem em questão", - "Tried to load a specific point in this room's timeline, but was unable to find it": "Tentei carregar um ponto específico na linha do tempo desta sala, mas não o encontrei", + "This room is private or inaccessible to guests. You may be able to join if you register.": "Esta sala é privada ou inacessível para visitantes. Você poderá ingressar nela se registrar-se.", + "Tried to load a specific point in this room's timeline, but you do not have permission to view the message in question.": "Tentei carregar um ponto específico na linha do tempo desta sala, mas parece que você não tem permissões para ver a mensagem em questão.", + "Tried to load a specific point in this room's timeline, but was unable to find it.": "Tentei carregar um ponto específico na linha do tempo desta sala, mas não o encontrei.", "Turn Markdown off": "Desabilitar a formatação 'Markdown'", "Turn Markdown on": "Habilitar a marcação 'Markdown'", "Unable to load device list": "Não foi possível carregar a lista de dispositivos", diff --git a/src/i18n/strings/pt_BR.json b/src/i18n/strings/pt_BR.json index fc942c2ed8..13c9ec0737 100644 --- a/src/i18n/strings/pt_BR.json +++ b/src/i18n/strings/pt_BR.json @@ -101,7 +101,7 @@ "Guests cannot join this room even if explicitly invited.": "Visitantes não podem entrar nesta sala, mesmo se forem explicitamente convidadas/os.", "Guests can't set avatars. Please register.": "Convidados não podem definir uma foto do perfil. Por favor, registre-se.", "Guests can't use labs features. Please register.": "Convidados não podem usar as funcionalidades de laboratório (lab), por gentileza se registre.", - "Guest users can't upload files. Please register to upload": "Usuários não podem fazer envio de arquivos. Por favor se cadastre para enviar arquivos", + "Guest users can't upload files. Please register to upload.": "Usuários não podem fazer envio de arquivos. Por favor se cadastre para enviar arquivos.", "had": "teve", "Hangup": "Desligar", "Historical": "Histórico", @@ -627,15 +627,15 @@ "Server may be unavailable, overloaded, or search timed out :(": "O servidor pode estar indisponível, sobrecarregado, ou a busca ultrapassou o tempo limite :(", "Server may be unavailable, overloaded, or the file too big": "O servidor pode estar indisponível, sobrecarregado, ou o arquivo é muito grande", "Server unavailable, overloaded, or something else went wrong.": "O servidor pode estar indisponível, sobrecarregado, ou alguma outra coisa não funcionou.", - "Some of your messages have not been sent": "Algumas das suas mensagens não foram enviadas", + "Some of your messages have not been sent.": "Algumas das suas mensagens não foram enviadas.", "Submit": "Enviar", "The main address for this room is": "O endereço principal desta sala é", "This action cannot be performed by a guest user. Please register to be able to do this": "Esta ação não pode ser realizada por um/a usuário/a visitante. Por favor, registre-se para poder fazer isso", "%(actionVerb)s this person?": "%(actionVerb)s esta pessoa?", "This room has no local addresses": "Esta sala não tem endereços locais", - "This room is private or inaccessible to guests. You may be able to join if you register": "Esta sala é privada ou inacessível para visitantes. Você poderá ingressar nela se registrar-se", - "Tried to load a specific point in this room's timeline, but you do not have permission to view the message in question": "Tentei carregar um ponto específico na linha do tempo desta sala, mas parece que você não tem permissões para ver a mensagem em questão", - "Tried to load a specific point in this room's timeline, but was unable to find it": "Tentei carregar um ponto específico na linha do tempo desta sala, mas não o encontrei", + "This room is private or inaccessible to guests. You may be able to join if you register.": "Esta sala é privada ou inacessível para visitantes. Você poderá ingressar nela se registrar-se.", + "Tried to load a specific point in this room's timeline, but you do not have permission to view the message in question.": "Tentei carregar um ponto específico na linha do tempo desta sala, mas parece que você não tem permissões para ver a mensagem em questão.", + "Tried to load a specific point in this room's timeline, but was unable to find it.": "Tentei carregar um ponto específico na linha do tempo desta sala, mas não o encontrei.", "Turn Markdown off": "Desabilitar a formatação 'Markdown'", "Turn Markdown on": "Habilitar a marcação 'Markdown'", "Unable to load device list": "Não foi possível carregar a lista de dispositivos", diff --git a/src/i18n/strings/ru.json b/src/i18n/strings/ru.json index a0788a15dc..cf9bd78ffd 100644 --- a/src/i18n/strings/ru.json +++ b/src/i18n/strings/ru.json @@ -498,7 +498,7 @@ "Failed to set display name": "Не удалось установить отображаемое имя", "Failed to toggle moderator status": "Не удалось изменить статус модератора", "Fill screen": "Заполнить экран", - "Guest users can't upload files. Please register to upload": "Гости не могут посылать файлы. Пожалуйста, зарегистрируйтесь для отправки", + "Guest users can't upload files. Please register to upload.": "Гости не могут посылать файлы. Пожалуйста, зарегистрируйтесь для отправки.", "Hide read receipts": "Скрыть отметки о прочтении", "Hide Text Formatting Toolbar": "Скрыть панель форматирования текста", "Incorrect verification code": "Неверный код подтверждения", @@ -567,7 +567,7 @@ "since the point in time of selecting this option": "с момента выбора этой настройки", "since they joined": "с момента входа", "since they were invited": "с момента приглашения", - "Some of your messages have not been sent": "Некоторые из ваших сообщений не были отправлены", + "Some of your messages have not been sent.": "Некоторые из ваших сообщений не были отправлены.", "Someone": "Кто-то", "Submit": "Отправить", "Success": "Успех", @@ -583,7 +583,7 @@ "The remote side failed to pick up": "Удалённая сторона не смогла ответить", "This room has no local addresses": "Эта комната не имеет местного адреса", "This room is not recognised.": "Эта комната не опознана.", - "This room is private or inaccessible to guests. You may be able to join if you register": "Эта комната личная или недоступна для гостей. Мы может быть войдёте, если зарегистрируйтесь", + "This room is private or inaccessible to guests. You may be able to join if you register.": "Эта комната личная или недоступна для гостей. Мы может быть войдёте, если зарегистрируйтесь.", "These are experimental features that may break in unexpected ways": "Это экспериментальные функции, которые могут неожиданным образом вызывать ошибки", "This doesn't appear to be a valid email address": "Не похоже, что это правильный адрес электронной почты", "This is a preview of this room. Room interactions have been disabled": "Это просмотр данной комнаты. Взаимодействия с ней были отключены.", From fe487232ade5ebe30e3e1b7b60b08574d7729f0e Mon Sep 17 00:00:00 2001 From: Matthew Hodgson Date: Wed, 7 Jun 2017 18:15:48 +0100 Subject: [PATCH 05/11] sync fullstops everywhere --- scripts/fix-i18n.pl | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/scripts/fix-i18n.pl b/scripts/fix-i18n.pl index 247b2b663f..ea19d710df 100755 --- a/scripts/fix-i18n.pl +++ b/scripts/fix-i18n.pl @@ -61,6 +61,11 @@ You are already in a call. You cannot place VoIP calls in this browser. You cannot place a call with yourself. Your email address does not appear to be associated with a Matrix ID on this Homeserver. +Guest users can't upload files. Please register to upload. +Some of your messages have not been sent. +This room is private or inaccessible to guests. You may be able to join if you register. +Tried to load a specific point in this room's timeline, but was unable to find it. +Tried to load a specific point in this room's timeline, but you do not have permission to view the message in question. EOT )]; } From ef2fedc3a9ead6c38888276ad93aed361ef6d6eb Mon Sep 17 00:00:00 2001 From: Matthew Hodgson Date: Wed, 7 Jun 2017 18:24:35 +0100 Subject: [PATCH 06/11] fix missing translations and typos in i18n --- src/components/structures/CreateRoom.js | 2 +- src/components/views/dialogs/SetMxIdDialog.js | 6 +++--- src/i18n/strings/de_DE.json | 2 +- src/i18n/strings/en_EN.json | 4 +++- src/i18n/strings/en_US.json | 2 +- src/i18n/strings/fr.json | 2 +- src/i18n/strings/pt.json | 2 +- src/i18n/strings/pt_BR.json | 2 +- src/i18n/strings/ru.json | 2 +- 9 files changed, 13 insertions(+), 11 deletions(-) diff --git a/src/components/structures/CreateRoom.js b/src/components/structures/CreateRoom.js index 3e291dfd94..7ecc315ba7 100644 --- a/src/components/structures/CreateRoom.js +++ b/src/components/structures/CreateRoom.js @@ -231,7 +231,7 @@ module.exports = React.createClass({ if (curr_phase == this.phases.ERROR) { error_box = (
- {_t('An error occured: %(error_string)s', {error_string: this.state.error_string})} + {_t('An error occurred: %(error_string)s', {error_string: this.state.error_string})}
); } diff --git a/src/components/views/dialogs/SetMxIdDialog.js b/src/components/views/dialogs/SetMxIdDialog.js index 78576eb1e4..2081701c6b 100644 --- a/src/components/views/dialogs/SetMxIdDialog.js +++ b/src/components/views/dialogs/SetMxIdDialog.js @@ -125,8 +125,8 @@ export default React.createClass({ break; case "M_INVALID_USERNAME": newState.usernameError = _t( - 'Username invalid: %(errMessage)', - { errMessage: err.message}, + 'Username invalid: %(error_message)s', + { error_message: err.message}, ); break; case "M_UNRECOGNIZED": @@ -139,7 +139,7 @@ export default React.createClass({ break; default: newState.usernameError = _t( - 'An error occurred: %(errMessage)', + 'An error occurred: %(errMessage)s', { errMessage: err.message }, ); break; diff --git a/src/i18n/strings/de_DE.json b/src/i18n/strings/de_DE.json index 513faea017..798540900c 100644 --- a/src/i18n/strings/de_DE.json +++ b/src/i18n/strings/de_DE.json @@ -339,7 +339,7 @@ "User names may only contain letters, numbers, dots, hyphens and underscores.": "Benutzernamen sollen nur Buchstaben, Nummern, Binde- und Unterstriche enthalten.", "An unknown error occurred.": "Ein unbekannter Fehler trat auf.", "I already have an account": "Ich habe bereits einen Account", - "An error occured: %(error_string)s": "Ein Fehler trat auf: %(error_string)s", + "An error occurred: %(error_string)s": "Ein Fehler trat auf: %(error_string)s", "Topic": "Thema", "Make this room private": "Mache diesen Raum privat", "Share message history with new users": "Bisherigen Chatverlauf mit neuen Nutzern teilen", diff --git a/src/i18n/strings/en_EN.json b/src/i18n/strings/en_EN.json index eb331c24a9..11af1c03df 100644 --- a/src/i18n/strings/en_EN.json +++ b/src/i18n/strings/en_EN.json @@ -268,6 +268,7 @@ "End-to-end encryption information": "End-to-end encryption information", "End-to-end encryption is in beta and may not be reliable": "End-to-end encryption is in beta and may not be reliable", "Enter Code": "Enter Code", + "Enter passphrase": "Enter passphrase", "Error": "Error", "Error decrypting attachment": "Error decrypting attachment", "Error: Problem communicating with the given homeserver.": "Error: Problem communicating with the given homeserver.", @@ -580,6 +581,7 @@ "User ID": "User ID", "User Interface": "User Interface", "User name": "User name", + "Username invalid: %(errMessage)s": "Username invalid: %(errMessage)s", "Users": "Users", "User": "User", "Verification Pending": "Verification Pending", @@ -661,7 +663,7 @@ "User names may only contain letters, numbers, dots, hyphens and underscores.": "User names may only contain letters, numbers, dots, hyphens and underscores.", "An unknown error occurred.": "An unknown error occurred.", "I already have an account": "I already have an account", - "An error occured: %(error_string)s": "An error occured: %(error_string)s", + "An error occurred: %(error_string)s": "An error occurred: %(error_string)s", "Topic": "Topic", "Make Moderator": "Make Moderator", "Make this room private": "Make this room private", diff --git a/src/i18n/strings/en_US.json b/src/i18n/strings/en_US.json index 19b854e936..96f2243f63 100644 --- a/src/i18n/strings/en_US.json +++ b/src/i18n/strings/en_US.json @@ -645,7 +645,7 @@ "User names may only contain letters, numbers, dots, hyphens and underscores.": "User names may only contain letters, numbers, dots, hyphens and underscores.", "An unknown error occurred.": "An unknown error occurred.", "I already have an account": "I already have an account", - "An error occured: %(error_string)s": "An error occured: %(error_string)s", + "An error occurred: %(error_string)s": "An error occurred: %(error_string)s", "Topic": "Topic", "Make Moderator": "Make Moderator", "Make this room private": "Make this room private", diff --git a/src/i18n/strings/fr.json b/src/i18n/strings/fr.json index 80d2479c48..ff6cb57ab5 100644 --- a/src/i18n/strings/fr.json +++ b/src/i18n/strings/fr.json @@ -611,7 +611,7 @@ "User names may only contain letters, numbers, dots, hyphens and underscores.": "Les noms d’utilisateurs ne peuvent contenir que des lettres, chiffres, points et tirets hauts ou bas.", "An unknown error occurred.": "Une erreur inconnue est survenue.", "I already have an account": "J’ai déjà un compte", - "An error occured: %(error_string)s": "Une erreur est survenue : %(error_string)s", + "An error occurred: %(error_string)s": "Une erreur est survenue : %(error_string)s", "Topic": "Sujet", "Make Moderator": "Nommer modérateur", "Make this room private": "Rendre ce salon privé", diff --git a/src/i18n/strings/pt.json b/src/i18n/strings/pt.json index 47260b4909..b76cf6a274 100644 --- a/src/i18n/strings/pt.json +++ b/src/i18n/strings/pt.json @@ -417,7 +417,7 @@ "User names may only contain letters, numbers, dots, hyphens and underscores.": "Nomes de usuária/o podem conter apenas letras, números, pontos, hífens e linha inferior (_).", "An unknown error occurred.": "Um erro desconhecido ocorreu.", "I already have an account": "Eu já tenho uma conta", - "An error occured: %(error_string)s": "Um erro ocorreu: %(error_string)s", + "An error occurred: %(error_string)s": "Um erro ocorreu: %(error_string)s", "Topic": "Tópico", "Make this room private": "Tornar esta sala privada", "Share message history with new users": "Compartilhar histórico de mensagens com novas/os usuárias/os", diff --git a/src/i18n/strings/pt_BR.json b/src/i18n/strings/pt_BR.json index 13c9ec0737..f77ef74799 100644 --- a/src/i18n/strings/pt_BR.json +++ b/src/i18n/strings/pt_BR.json @@ -417,7 +417,7 @@ "User names may only contain letters, numbers, dots, hyphens and underscores.": "Nomes de usuária/o podem conter apenas letras, números, pontos, hífens e linha inferior (_).", "An unknown error occurred.": "Um erro desconhecido ocorreu.", "I already have an account": "Eu já tenho uma conta", - "An error occured: %(error_string)s": "Um erro ocorreu: %(error_string)s", + "An error occurred: %(error_string)s": "Um erro ocorreu: %(error_string)s", "Topic": "Tópico", "Make this room private": "Tornar esta sala privada", "Share message history with new users": "Compartilhar histórico de mensagens com novas/os usuárias/os", diff --git a/src/i18n/strings/ru.json b/src/i18n/strings/ru.json index cf9bd78ffd..61c82e6448 100644 --- a/src/i18n/strings/ru.json +++ b/src/i18n/strings/ru.json @@ -336,7 +336,7 @@ "User names may only contain letters, numbers, dots, hyphens and underscores.": "Имена пользователей могут только содержать буквы, числа, точки, дефисы и подчеркивания.", "An unknown error occurred.": "Произошла неизвестная ошибка.", "I already have an account": "У меня уже есть учетная запись", - "An error occured: %(error_string)s": "Произошла ошибка: %(error_string)s", + "An error occurred: %(error_string)s": "Произошла ошибка: %(error_string)s", "Topic": "Тема", "Make this room private": "Сделать эту комнату частной", "Share message history with new users": "Поделись историей сообщений с новыми учасниками", From 8228db88d2f8ea3f2acca0709dd431976c59192c Mon Sep 17 00:00:00 2001 From: Matthew Hodgson Date: Wed, 7 Jun 2017 18:28:49 +0100 Subject: [PATCH 07/11] oops, fix more i18n var name typos --- src/components/views/dialogs/SetMxIdDialog.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/components/views/dialogs/SetMxIdDialog.js b/src/components/views/dialogs/SetMxIdDialog.js index 2081701c6b..d428223ad6 100644 --- a/src/components/views/dialogs/SetMxIdDialog.js +++ b/src/components/views/dialogs/SetMxIdDialog.js @@ -125,8 +125,8 @@ export default React.createClass({ break; case "M_INVALID_USERNAME": newState.usernameError = _t( - 'Username invalid: %(error_message)s', - { error_message: err.message}, + 'Username invalid: %(errMessage)s', + { errMessage: err.message}, ); break; case "M_UNRECOGNIZED": @@ -139,8 +139,8 @@ export default React.createClass({ break; default: newState.usernameError = _t( - 'An error occurred: %(errMessage)s', - { errMessage: err.message }, + 'An error occurred: %(error_string)s', + { error_string: err.message }, ); break; } From f7ab6a574ccda7e6469ae1ec962a6aa0520c9991 Mon Sep 17 00:00:00 2001 From: David Baker Date: Wed, 7 Jun 2017 18:32:32 +0100 Subject: [PATCH 08/11] Remove unused string --- src/i18n/strings/de_DE.json | 1 - src/i18n/strings/en_EN.json | 1 - src/i18n/strings/en_US.json | 1 - src/i18n/strings/fr.json | 1 - src/i18n/strings/pt.json | 1 - src/i18n/strings/pt_BR.json | 1 - src/i18n/strings/ru.json | 1 - src/i18n/strings/th.json | 1 - 8 files changed, 8 deletions(-) diff --git a/src/i18n/strings/de_DE.json b/src/i18n/strings/de_DE.json index 798540900c..6d3abef3e4 100644 --- a/src/i18n/strings/de_DE.json +++ b/src/i18n/strings/de_DE.json @@ -615,7 +615,6 @@ "This action cannot be performed by a guest user. Please register to be able to do this": "Diese Aktion kann nicht von einem Gast ausgeführt werden. Bitte registriere dich um dies zu tun", "%(actionVerb)s this person?": "Diese Person %(actionVerb)s?", "This room has no local addresses": "Dieser Raum hat keine lokale Adresse", - "This room is private or inaccessible to guests. You may be able to join if you register.": "Dieser Raum ist privat oder für Gäste nicht zugänglich. Du kannst jedoch eventuell beitreten, wenn du dich registrierst.", "Tried to load a specific point in this room's timeline, but you do not have permission to view the message in question.": "Versuchte einen spezifischen Punkt in der Raum-Chronik zu laden, aber du hast keine Berechtigung die angeforderte Nachricht anzuzeigen.", "Tried to load a specific point in this room's timeline, but was unable to find it.": "Der Versuch, einen spezifischen Punkt im Chatverlauf zu laden, ist fehlgeschlagen. Der Punkt konnte nicht gefunden werden.", "Turn Markdown off": "Markdown abschalten", diff --git a/src/i18n/strings/en_EN.json b/src/i18n/strings/en_EN.json index 11af1c03df..6a7f01e9df 100644 --- a/src/i18n/strings/en_EN.json +++ b/src/i18n/strings/en_EN.json @@ -511,7 +511,6 @@ "There was a problem logging in.": "There was a problem logging in.", "This room has no local addresses": "This room has no local addresses", "This room is not recognised.": "This room is not recognised.", - "This room is private or inaccessible to guests. You may be able to join if you register.": "This room is private or inaccessible to guests. You may be able to join if you register.", "These are experimental features that may break in unexpected ways": "These are experimental features that may break in unexpected ways", "The visibility of existing history will be unchanged": "The visibility of existing history will be unchanged", "This doesn't appear to be a valid email address": "This doesn't appear to be a valid email address", diff --git a/src/i18n/strings/en_US.json b/src/i18n/strings/en_US.json index 96f2243f63..6736e39276 100644 --- a/src/i18n/strings/en_US.json +++ b/src/i18n/strings/en_US.json @@ -501,7 +501,6 @@ "There was a problem logging in.": "There was a problem logging in.", "This room has no local addresses": "This room has no local addresses", "This room is not recognised.": "This room is not recognized.", - "This room is private or inaccessible to guests. You may be able to join if you register.": "This room is private or inaccessible to guests. You may be able to join if you register.", "These are experimental features that may break in unexpected ways": "These are experimental features that may break in unexpected ways", "The visibility of existing history will be unchanged": "The visibility of existing history will be unchanged", "This doesn't appear to be a valid email address": "This doesn't appear to be a valid email address", diff --git a/src/i18n/strings/fr.json b/src/i18n/strings/fr.json index ff6cb57ab5..bf05173356 100644 --- a/src/i18n/strings/fr.json +++ b/src/i18n/strings/fr.json @@ -478,7 +478,6 @@ "The remote side failed to pick up": "Le correspondant n’a pas décroché", "This room has no local addresses": "Ce salon n'a pas d'adresse locale", "This room is not recognised.": "Ce salon n'a pas été reconnu.", - "This room is private or inaccessible to guests. You may be able to join if you register.": "Ce salon est privé ou non autorisé aux visiteurs. Vous devriez pouvoir le rejoindre si vous vous enregistrez.", "These are experimental features that may break in unexpected ways": "Ces fonctionnalités sont expérimentales et risquent de mal fonctionner", "The visibility of existing history will be unchanged": "La visibilité de l’historique existant sera inchangée", "This doesn't appear to be a valid email address": "Cette adresse n’a pas l’air d’être valide", diff --git a/src/i18n/strings/pt.json b/src/i18n/strings/pt.json index b76cf6a274..27d257de9e 100644 --- a/src/i18n/strings/pt.json +++ b/src/i18n/strings/pt.json @@ -633,7 +633,6 @@ "This action cannot be performed by a guest user. Please register to be able to do this": "Esta ação não pode ser realizada por um/a usuário/a visitante. Por favor, registre-se para poder fazer isso", "%(actionVerb)s this person?": "%(actionVerb)s esta pessoa?", "This room has no local addresses": "Esta sala não tem endereços locais", - "This room is private or inaccessible to guests. You may be able to join if you register.": "Esta sala é privada ou inacessível para visitantes. Você poderá ingressar nela se registrar-se.", "Tried to load a specific point in this room's timeline, but you do not have permission to view the message in question.": "Tentei carregar um ponto específico na linha do tempo desta sala, mas parece que você não tem permissões para ver a mensagem em questão.", "Tried to load a specific point in this room's timeline, but was unable to find it.": "Tentei carregar um ponto específico na linha do tempo desta sala, mas não o encontrei.", "Turn Markdown off": "Desabilitar a formatação 'Markdown'", diff --git a/src/i18n/strings/pt_BR.json b/src/i18n/strings/pt_BR.json index f77ef74799..99175c874e 100644 --- a/src/i18n/strings/pt_BR.json +++ b/src/i18n/strings/pt_BR.json @@ -633,7 +633,6 @@ "This action cannot be performed by a guest user. Please register to be able to do this": "Esta ação não pode ser realizada por um/a usuário/a visitante. Por favor, registre-se para poder fazer isso", "%(actionVerb)s this person?": "%(actionVerb)s esta pessoa?", "This room has no local addresses": "Esta sala não tem endereços locais", - "This room is private or inaccessible to guests. You may be able to join if you register.": "Esta sala é privada ou inacessível para visitantes. Você poderá ingressar nela se registrar-se.", "Tried to load a specific point in this room's timeline, but you do not have permission to view the message in question.": "Tentei carregar um ponto específico na linha do tempo desta sala, mas parece que você não tem permissões para ver a mensagem em questão.", "Tried to load a specific point in this room's timeline, but was unable to find it.": "Tentei carregar um ponto específico na linha do tempo desta sala, mas não o encontrei.", "Turn Markdown off": "Desabilitar a formatação 'Markdown'", diff --git a/src/i18n/strings/ru.json b/src/i18n/strings/ru.json index 61c82e6448..58f8e0291c 100644 --- a/src/i18n/strings/ru.json +++ b/src/i18n/strings/ru.json @@ -583,7 +583,6 @@ "The remote side failed to pick up": "Удалённая сторона не смогла ответить", "This room has no local addresses": "Эта комната не имеет местного адреса", "This room is not recognised.": "Эта комната не опознана.", - "This room is private or inaccessible to guests. You may be able to join if you register.": "Эта комната личная или недоступна для гостей. Мы может быть войдёте, если зарегистрируйтесь.", "These are experimental features that may break in unexpected ways": "Это экспериментальные функции, которые могут неожиданным образом вызывать ошибки", "This doesn't appear to be a valid email address": "Не похоже, что это правильный адрес электронной почты", "This is a preview of this room. Room interactions have been disabled": "Это просмотр данной комнаты. Взаимодействия с ней были отключены.", diff --git a/src/i18n/strings/th.json b/src/i18n/strings/th.json index db67539b38..5bafdc97cd 100644 --- a/src/i18n/strings/th.json +++ b/src/i18n/strings/th.json @@ -318,7 +318,6 @@ "The file '%(fileName)s' failed to upload": "การอัปโหลดไฟล์ '%(fileName)s' ล้มเหลว", "This Home Server does not support login using email address.": "เซิร์ฟเวอร์บ้านนี้ไม่รองรับการลงชื่อเข้าใช้ด้วยที่อยู่อีเมล", "There was a problem logging in.": "มีปัญหาในการลงชื่อเข้าใช้", - "This room is private or inaccessible to guests. You may be able to join if you register": "ห้องนี้เป็นส่วนตัวหรือไม่อนุญาตให้แขกเข้าถึง คุณอาจเข้าร่วมได้หากคุณลงทะเบียน", "this invitation?": "คำเชิญนี้?", "This is a preview of this room. Room interactions have been disabled": "นี่คือตัวอย่างของห้อง การตอบสนองภายในห้องถูกปิดใช้งาน", "This phone number is already in use": "หมายเลขโทรศัพท์นี้ถูกใช้งานแล้ว", From 5cf44454d2b463fe5543a439992a270398aec3f1 Mon Sep 17 00:00:00 2001 From: Matthew Hodgson Date: Wed, 7 Jun 2017 18:41:18 +0100 Subject: [PATCH 09/11] fix more punctuation fails --- src/i18n/strings/th.json | 1 + src/i18n/strings/zh_Hans.json | 4 ++-- src/i18n/strings/zh_Hant.json | 4 ++-- 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/src/i18n/strings/th.json b/src/i18n/strings/th.json index 5bafdc97cd..f5564415fc 100644 --- a/src/i18n/strings/th.json +++ b/src/i18n/strings/th.json @@ -318,6 +318,7 @@ "The file '%(fileName)s' failed to upload": "การอัปโหลดไฟล์ '%(fileName)s' ล้มเหลว", "This Home Server does not support login using email address.": "เซิร์ฟเวอร์บ้านนี้ไม่รองรับการลงชื่อเข้าใช้ด้วยที่อยู่อีเมล", "There was a problem logging in.": "มีปัญหาในการลงชื่อเข้าใช้", + "This room is private or inaccessible to guests. You may be able to join if you register.": "ห้องนี้เป็นส่วนตัวหรือไม่อนุญาตให้แขกเข้าถึง คุณอาจเข้าร่วมได้หากคุณลงทะเบียน", "this invitation?": "คำเชิญนี้?", "This is a preview of this room. Room interactions have been disabled": "นี่คือตัวอย่างของห้อง การตอบสนองภายในห้องถูกปิดใช้งาน", "This phone number is already in use": "หมายเลขโทรศัพท์นี้ถูกใช้งานแล้ว", diff --git a/src/i18n/strings/zh_Hans.json b/src/i18n/strings/zh_Hans.json index 54a6886b35..e0db2b525b 100644 --- a/src/i18n/strings/zh_Hans.json +++ b/src/i18n/strings/zh_Hans.json @@ -76,7 +76,7 @@ "%(userId)s from %(fromPowerLevel)s to %(toPowerLevel)s": "%(userId)s 从 %(fromPowerLevel)s 变为 %(toPowerLevel)s", "Guests can't set avatars. Please register.": "游客不能设置头像。请注册。.", "Guest users can't create new rooms. Please register to create room and start a chat.": "游客不能创建聊天室。请注册以创建聊天室和聊天.", - "Guest users can't upload files. Please register to upload": "游客不能上传文件。请注册以上传文件", + "Guest users can't upload files. Please register to upload.": "游客不能上传文件。请注册以上传文件", "Guests can't use labs features. Please register.": "游客不能使用实验性功能。请注册。.", "Guests cannot join this room even if explicitly invited.": "游客不能加入此聊天室,即使有人主动邀请。.", "had": "已经", @@ -138,7 +138,7 @@ "since the point in time of selecting this option": "从选择此选项起", "since they joined": "从他们加入时起", "since they were invited": "从他们被邀请时起", - "Some of your messages have not been sent": "部分消息发送失败", + "Some of your messages have not been sent.": "部分消息发送失败", "Someone": "某个用户", "Sorry, this homeserver is using a login which is not recognised ": "很抱歉,无法识别此主服务器使用的登录方式 ", "Start a chat": "创建聊天", diff --git a/src/i18n/strings/zh_Hant.json b/src/i18n/strings/zh_Hant.json index 250dc23ef3..17901789e9 100644 --- a/src/i18n/strings/zh_Hant.json +++ b/src/i18n/strings/zh_Hant.json @@ -194,7 +194,7 @@ "%(userId)s from %(fromPowerLevel)s to %(toPowerLevel)s": "%(userId)s 從 %(fromPowerLevel)s 變為 %(toPowerLevel)s", "Guests can't set avatars. Please register.": "游客不能設置頭像。請注冊。.", "Guest users can't create new rooms. Please register to create room and start a chat.": "游客不能創建聊天室。請注冊以創建聊天室和聊天.", - "Guest users can't upload files. Please register to upload": "游客不能上傳文件。請注冊以上傳文件", + "Guest users can't upload files. Please register to upload.": "游客不能上傳文件。請注冊以上傳文件", "Guests can't use labs features. Please register.": "游客不能使用實驗性功能。請注冊。.", "Guests cannot join this room even if explicitly invited.": "游客不能加入此聊天室,即使有人主動邀請。.", "had": "已經", @@ -265,7 +265,7 @@ "since the point in time of selecting this option": "從選擇此選項起", "since they joined": "從他們加入時起", "since they were invited": "從他們被邀請時起", - "Some of your messages have not been sent": "部分消息發送失敗", + "Some of your messages have not been sent.": "部分消息發送失敗", "Someone": "某個用戶", "Sorry, this homeserver is using a login which is not recognised ": "很抱歉,無法識別此主伺服器使用的登錄方式 ", "Start a chat": "創建聊天", From ca1c0e42b0559b2095b2a99783a0f946f020dc89 Mon Sep 17 00:00:00 2001 From: Matthew Hodgson Date: Wed, 7 Jun 2017 18:42:34 +0100 Subject: [PATCH 10/11] oops, merge correctly --- src/i18n/strings/th.json | 1 - 1 file changed, 1 deletion(-) diff --git a/src/i18n/strings/th.json b/src/i18n/strings/th.json index f5564415fc..5bafdc97cd 100644 --- a/src/i18n/strings/th.json +++ b/src/i18n/strings/th.json @@ -318,7 +318,6 @@ "The file '%(fileName)s' failed to upload": "การอัปโหลดไฟล์ '%(fileName)s' ล้มเหลว", "This Home Server does not support login using email address.": "เซิร์ฟเวอร์บ้านนี้ไม่รองรับการลงชื่อเข้าใช้ด้วยที่อยู่อีเมล", "There was a problem logging in.": "มีปัญหาในการลงชื่อเข้าใช้", - "This room is private or inaccessible to guests. You may be able to join if you register.": "ห้องนี้เป็นส่วนตัวหรือไม่อนุญาตให้แขกเข้าถึง คุณอาจเข้าร่วมได้หากคุณลงทะเบียน", "this invitation?": "คำเชิญนี้?", "This is a preview of this room. Room interactions have been disabled": "นี่คือตัวอย่างของห้อง การตอบสนองภายในห้องถูกปิดใช้งาน", "This phone number is already in use": "หมายเลขโทรศัพท์นี้ถูกใช้งานแล้ว", From ea02d8841c991e1b595a8e87f166170ddc61b2bb Mon Sep 17 00:00:00 2001 From: RiotTranslate Date: Wed, 7 Jun 2017 19:48:48 +0200 Subject: [PATCH 11/11] Update from Weblate. (#1052) * Added translation using Weblate (Thai) * Translated using Weblate (Thai) Currently translated at 2.6% (22 of 827 strings) Translation: Riot Web/matrix-react-sdk Translate-URL: https://translate.nordgedanken.de/projects/riot-web/matrix-react-sdk/th/ * Translated using Weblate (Thai) Currently translated at 8.9% (74 of 827 strings) Translation: Riot Web/matrix-react-sdk Translate-URL: https://translate.nordgedanken.de/projects/riot-web/matrix-react-sdk/th/ * Translated using Weblate (German) Currently translated at 99.8% (826 of 827 strings) Translation: Riot Web/matrix-react-sdk Translate-URL: https://translate.nordgedanken.de/projects/riot-web/matrix-react-sdk/de/ * Translated using Weblate (Swedish) Currently translated at 35.4% (293 of 827 strings) Translation: Riot Web/matrix-react-sdk Translate-URL: https://translate.nordgedanken.de/projects/riot-web/matrix-react-sdk/sv/ * Translated using Weblate (Thai) Currently translated at 9.7% (81 of 827 strings) Translation: Riot Web/matrix-react-sdk Translate-URL: https://translate.nordgedanken.de/projects/riot-web/matrix-react-sdk/th/ * Translated using Weblate (German) Currently translated at 100.0% (827 of 827 strings) Translation: Riot Web/matrix-react-sdk Translate-URL: https://translate.nordgedanken.de/projects/riot-web/matrix-react-sdk/de/ * Translated using Weblate (Russian) Currently translated at 76.9% (636 of 827 strings) Translation: Riot Web/matrix-react-sdk Translate-URL: https://translate.nordgedanken.de/projects/riot-web/matrix-react-sdk/ru/ * Translated using Weblate (Hungarian) Currently translated at 0.1% (1 of 827 strings) Translation: Riot Web/matrix-react-sdk Translate-URL: https://translate.nordgedanken.de/projects/riot-web/matrix-react-sdk/hu/ * Translated using Weblate (Thai) Currently translated at 39.2% (325 of 827 strings) Translation: Riot Web/matrix-react-sdk Translate-URL: https://translate.nordgedanken.de/projects/riot-web/matrix-react-sdk/th/ * Translated using Weblate (German) Currently translated at 99.8% (827 of 828 strings) Translation: Riot Web/matrix-react-sdk Translate-URL: https://translate.nordgedanken.de/projects/riot-web/matrix-react-sdk/de/ * Translated using Weblate (German) Currently translated at 99.8% (827 of 828 strings) Translation: Riot Web/matrix-react-sdk Translate-URL: https://translate.nordgedanken.de/projects/riot-web/matrix-react-sdk/de/ * Translated using Weblate (Thai) Currently translated at 39.7% (329 of 828 strings) Translation: Riot Web/matrix-react-sdk Translate-URL: https://translate.nordgedanken.de/projects/riot-web/matrix-react-sdk/th/ * Translated using Weblate (German) Currently translated at 99.8% (828 of 828 strings) Translation: Riot Web/matrix-react-sdk Translate-URL: https://translate.nordgedanken.de/projects/riot-web/matrix-react-sdk/de/ * Translated using Weblate (Hungarian) Currently translated at 3.1% (26 of 828 strings) Translation: Riot Web/matrix-react-sdk Translate-URL: https://translate.nordgedanken.de/projects/riot-web/matrix-react-sdk/hu/ * Translated using Weblate (Russian) Currently translated at 77.4% (641 of 828 strings) Translation: Riot Web/matrix-react-sdk Translate-URL: https://translate.nordgedanken.de/projects/riot-web/matrix-react-sdk/ru/ * Translated using Weblate (Thai) Currently translated at 39.7% (329 of 828 strings) Translation: Riot Web/matrix-react-sdk Translate-URL: https://translate.nordgedanken.de/projects/riot-web/matrix-react-sdk/th/ * Translated using Weblate (Russian) Currently translated at 100.0% (828 of 828 strings) Translation: Riot Web/matrix-react-sdk Translate-URL: https://translate.nordgedanken.de/projects/riot-web/matrix-react-sdk/ru/ * Translated using Weblate (German) Currently translated at 100.0% (828 of 828 strings) Translation: Riot Web/matrix-react-sdk Translate-URL: https://translate.nordgedanken.de/projects/riot-web/matrix-react-sdk/de/ * Translated using Weblate (Russian) Currently translated at 100.0% (828 of 828 strings) Translation: Riot Web/matrix-react-sdk Translate-URL: https://translate.nordgedanken.de/projects/riot-web/matrix-react-sdk/ru/ * Translated using Weblate (German) Currently translated at 100.0% (850 of 850 strings) Translation: Riot Web/matrix-react-sdk Translate-URL: https://translate.nordgedanken.de/projects/riot-web/matrix-react-sdk/de/ * Translated using Weblate (French) Currently translated at 96.5% (821 of 850 strings) Translation: Riot Web/matrix-react-sdk Translate-URL: https://translate.nordgedanken.de/projects/riot-web/matrix-react-sdk/fr/ * Translated using Weblate (Thai) Currently translated at 39.0% (332 of 850 strings) Translation: Riot Web/matrix-react-sdk Translate-URL: https://translate.nordgedanken.de/projects/riot-web/matrix-react-sdk/th/ --- src/i18n/strings/de_DE.json | 109 +++++++++++------ src/i18n/strings/fr.json | 5 +- src/i18n/strings/hu.json | 27 ++++- src/i18n/strings/ru.json | 228 +++++++++++++++++++++++++++++++++--- src/i18n/strings/th.json | 16 ++- 5 files changed, 322 insertions(+), 63 deletions(-) diff --git a/src/i18n/strings/de_DE.json b/src/i18n/strings/de_DE.json index 6d3abef3e4..f7b3d16ebc 100644 --- a/src/i18n/strings/de_DE.json +++ b/src/i18n/strings/de_DE.json @@ -6,7 +6,7 @@ "People": "Direkt-Chats", "Rooms": "Räume", "Low priority": "Niedrige Priorität", - "Historical": "Historisch", + "Historical": "Archiv", "New passwords must match each other.": "Die neuen Passwörter müssen identisch sein.", "A new password must be entered.": "Es muss ein neues Passwort eingegeben werden.", "The email address linked to your account must be entered.": "Es muss die Email-Adresse eingeben werden, welche zum Account gehört.", @@ -42,7 +42,7 @@ "Commands": "Kommandos", "Emoji": "Emoji", "Sorry, this homeserver is using a login which is not recognised ": "Entschuldigung, dieser Homeserver nutzt eine Anmeldetechnik, die nicht bekannt ist ", - "Login as guest": "Anmelden als Gast", + "Login as guest": "Als Gast anmelden", "Return to app": "Zurück zur Anwendung", "Sign in": "Anmelden", "Create a new account": "Erstelle einen neuen Benutzer", @@ -75,7 +75,7 @@ "changed the topic to": "änderte das Thema zu", "Changes to who can read history will only apply to future messages in this room": "Änderungen, die bestimmen, wer den Chatverlauf lesen kann, gelten nur für zukünftige Nachrichten in diesem Raum", "Clear Cache and Reload": "Cache leeren und neu laden", - "Click here": "Klicke hier", + "Click here": "Hier klicken,", "Confirm your new password": "Neues Passwort bestätigen", "Continue": "Fortfahren", "Create an account": "Erstelle einen Account", @@ -96,7 +96,7 @@ "End-to-end encryption is in beta and may not be reliable": "Die Ende-zu-Ende-Verschlüsselung befindet sich aktuell im Beta-Stadium und ist eventuell noch nicht hundertprozentig zuverlässig", "Failed to send email": "Fehler beim Senden der E-Mail", "Account": "Konto", - "Add phone number": "Füge Telefonnummer hinzu", + "Add phone number": "Telefonnummer hinzufügen", "an address": "an Adresse", "Your password was successfully changed. You will not receive push notifications on other devices until you log back in to them": "Dein Passwort wurde erfolgreich geändert. Du wirst erst Benachrichtigungen auf anderen Geräten empfangen können, wenn du dich dort erneut anmeldest", "all room members": "Alle Raum-Mitglieder", @@ -111,7 +111,7 @@ "Default": "Standard", "demote": "Berechtigungslevel herabstufen", "Export E2E room keys": "E2E-Raum-Schlüssel exportieren", - "Failed to change password. Is your password correct?": "Passwort-Änderung schlug fehl. Ist dein Passwort korrekt?", + "Failed to change password. Is your password correct?": "Passwortänderung fehlgeschlagen. Ist dein Passwort richtig?", "Failed to forget room": "Vergessen des Raums schlug fehl", "Failed to leave room": "Verlassen des Raums fehlgeschlagen", "Failed to reject invitation": "Fehler beim Abweisen der Einladung", @@ -140,12 +140,12 @@ "is a": "ist ein", "is trusted": "wird vertraut", "Sign in with": "Ich möchte mich anmelden mit", - "joined and left": "trat bei und ging", - "joined": "trat bei", + "joined and left": "hat den Raum betreten und wieder verlassen", + "joined": "hat den Raum betreten", "joined the room": "trat dem Raum bei", "Leave room": "Verlasse Raum", "left and rejoined": "ging(en) und trat(en) erneut bei", - "left": "ging", + "left": "hat den Raum verlassen", "left the room": "verließ den Raum", "Logged in as": "Angemeldet als", "Logout": "Abmelden", @@ -204,7 +204,7 @@ "Signed Out": "Abgemeldet", "Sign out": "Abmelden", "since the point in time of selecting this option": "ab dem Zeitpunkt, an dem diese Option gewählt wird", - "since they joined": "seitdem sie beitraten", + "since they joined": "ab dem Zeitpunkt, an dem sie beigetreten sind", "since they were invited": "seitdem sie eingeladen wurden", "Someone": "Jemand", "Start a chat": "Starte einen Chat", @@ -336,8 +336,8 @@ "Password too short (min %(MIN_PASSWORD_LENGTH)s).": "Passwort zu kurz (min. %(MIN_PASSWORD_LENGTH)s).", "This doesn't look like a valid email address.": "Dies scheint keine gültige E-Mail-Adresse zu sein.", "This doesn't look like a valid phone number.": "Dies scheint keine gültige Telefonnummer zu sein.", - "User names may only contain letters, numbers, dots, hyphens and underscores.": "Benutzernamen sollen nur Buchstaben, Nummern, Binde- und Unterstriche enthalten.", - "An unknown error occurred.": "Ein unbekannter Fehler trat auf.", + "User names may only contain letters, numbers, dots, hyphens and underscores.": "Benutzernamen dürfen nur Buchstaben, Nummern, Punkte, Binde- und Unterstriche enthalten.", + "An unknown error occurred.": "Ein unbekannter Fehler ist aufgetreten.", "I already have an account": "Ich habe bereits einen Account", "An error occurred: %(error_string)s": "Ein Fehler trat auf: %(error_string)s", "Topic": "Thema", @@ -352,7 +352,7 @@ "%(names)s and %(count)s others are typing": "%(names)s und %(count)s weitere Personen schreiben", "%(senderName)s answered the call.": "%(senderName)s hat den Anruf angenommen.", "%(senderName)s banned %(targetName)s.": "%(senderName)s hat %(targetName)s aus dem Raum verbannt.", - "%(senderName)s changed their display name from %(oldDisplayName)s to %(displayName)s.": "%(senderName)s hat den Anzeigenamen von %(oldDisplayName)s auf %(displayName)s geändert.", + "%(senderName)s changed their display name from %(oldDisplayName)s to %(displayName)s.": "%(senderName)s hat den Anzeigenamen von \"%(oldDisplayName)s\" auf \"%(displayName)s\" geändert.", "%(senderName)s changed their profile picture.": "%(senderName)s hat das Profilbild geändert.", "%(senderName)s changed the power level of %(powerLevelDiffText)s.": "%(senderName)s hat das Berechtigungslevel von %(powerLevelDiffText)s geändert.", "%(senderDisplayName)s changed the room name to %(roomName)s.": "%(senderDisplayName)s änderte den Raumnamen zu %(roomName)s.", @@ -364,7 +364,7 @@ "%(userId)s from %(fromPowerLevel)s to %(toPowerLevel)s": "%(userId)s von %(fromPowerLevel)s zu %(toPowerLevel)s", "%(senderName)s invited %(targetName)s.": "%(senderName)s hat %(targetName)s eingeladen.", "%(displayName)s is typing": "%(displayName)s schreibt", - "%(targetName)s joined the room.": "%(targetName)s trat dem Raum bei.", + "%(targetName)s joined the room.": "%(targetName)s hat den Raum betreten.", "%(senderName)s kicked %(targetName)s.": "%(senderName)s kickte %(targetName)s.", "%(targetName)s left the room.": "%(targetName)s hat den Raum verlassen.", "%(senderName)s made future room history visible to": "%(senderName)s machte die zukünftige Raumhistorie sichtbar für", @@ -378,12 +378,12 @@ "Reason": "Grund", "%(targetName)s rejected the invitation.": "%(targetName)s hat die Einladung abgelehnt.", "%(senderName)s removed their display name (%(oldDisplayName)s).": "%(senderName)s löschte den Anzeigenamen (%(oldDisplayName)s).", - "%(senderName)s removed their profile picture.": "%(senderName)s löschte das Profilbild.", + "%(senderName)s removed their profile picture.": "%(senderName)s hat das Profilbild gelöscht.", "%(senderName)s requested a VoIP conference.": "%(senderName)s möchte eine VoIP-Konferenz beginnen.", "Room %(roomId)s not visible": "Raum %(roomId)s ist nicht sichtbar", "%(senderDisplayName)s sent an image.": "%(senderDisplayName)s hat ein Bild gesendet.", "%(senderName)s sent an invitation to %(targetDisplayName)s to join the room.": "%(senderName)s hat %(targetDisplayName)s in diesen Raum eingeladen.", - "%(senderName)s set a profile picture.": "%(senderName)s setzte ein Profilbild.", + "%(senderName)s set a profile picture.": "%(senderName)s hat ein Profilbild gesetzt.", "%(senderName)s set their display name to %(displayName)s.": "%(senderName)s hat den Anzeigenamen geändert in %(displayName)s.", "This room is not recognised.": "Dieser Raum wurde nicht erkannt.", "These are experimental features that may break in unexpected ways": "Dies sind experimentelle Funktionen, die in unerwarteter Weise Fehler verursachen können", @@ -398,7 +398,7 @@ "There are no visible files in this room": "Es gibt keine sichtbaren Dateien in diesem Raum", "Error changing language": "Fehler beim Ändern der Sprache", "Riot was unable to find the correct Data for the selected Language.": "Riot war nicht in der Lage die korrekten Daten für die ausgewählte Sprache zu finden.", - "Connectivity to the server has been lost.": "Verbindung zum Server untergebrochen.", + "Connectivity to the server has been lost.": "Verbindung zum Server wurde unterbrochen.", "Sent messages will be stored until your connection has returned.": "Gesendete Nachrichten werden gespeichert, bis die Internetverbindung wiederhergestellt wurde.", "Auto-complete": "Autovervollständigung", "Resend all": "Alle erneut senden", @@ -427,7 +427,7 @@ "You're not in any rooms yet! Press": "Du bist noch keinem Raum beigetreten! Drücke", "click to reveal": "Klicke zum anzeigen", "To remove other users' messages": "Um Nachrichten anderer Nutzer zu verbergen", - "You are trying to access %(roomName)s": "Du versuchst auf %(roomName)s zuzugreifen", + "You are trying to access %(roomName)s": "Du versuchst, auf den Raum \"%(roomName)s\" zuzugreifen", "af": "Afrikaans", "ar-ae": "Arabisch (VAE)", "ar-bh": "Arabisch (Bahrain)", @@ -558,7 +558,7 @@ "Are you sure?": "Bist du sicher?", "Attachment": "Anhang", "Ban": "Verbannen", - "Can't connect to homeserver - please check your connectivity and ensure your homeserver's SSL certificate is trusted.": "Kann nicht zum Heimserver verbinden - bitte checke eine Verbindung und stelle sicher, dass dem SSL-Zertifikat deines Heimservers vertraut wird.", + "Can't connect to homeserver - please check your connectivity and ensure your homeserver's SSL certificate is trusted.": "Verbindungsaufbau zum Heimserver nicht möglich - bitte Internetverbindung überprüfen und sicherstellen, ob das SSL-Zertifikat des Heimservers vertrauenswürdig ist.", "Can't connect to homeserver via HTTP when an HTTPS URL is in your browser bar. Either use HTTPS or enable unsafe scripts.": "Kann nicht zum Heimserver via HTTP verbinden, wenn eine HTTPS-Url in deiner Adresszeile steht. Nutzer HTTPS oder aktiviere unsichere Skripte.", "changing room on a RoomView is not supported": "Das Ändern eines Raumes in einer RaumAnsicht wird nicht unterstützt", "Click to mute audio": "Klicke um den Ton stumm zu stellen", @@ -590,7 +590,7 @@ "'%(alias)s' is not a valid format for an alias": "'%(alias)s' hat kein valides Aliasformat", "Join Room": "Dem Raum beitreten", "Kick": "Kicke", - "Level": "Level", + "Level": "Berechtigungslevel", "Local addresses for this room:": "Lokale Adressen dieses Raumes:", "Markdown is disabled": "Markdown ist deaktiviert", "Markdown is enabled": "Markdown ist aktiviert", @@ -652,25 +652,25 @@ "%(items)s and one other": "%(items)s und ein(e) weitere(r)", "%(items)s and %(lastItem)s": "%(items)s und %(lastItem)s", "%(severalUsers)sjoined %(repeats)s times": "%(severalUsers)ssind dem Raum %(repeats)s mal beigetreten", - "%(oneUser)sjoined %(repeats)s times": "%(oneUser)strat %(repeats)s mal bei", - "%(severalUsers)sjoined": "%(severalUsers)straten bei", - "%(oneUser)sjoined": "%(oneUser)strat bei", + "%(oneUser)sjoined %(repeats)s times": "%(oneUser)shat den Raum %(repeats)s mal betreten", + "%(severalUsers)sjoined": "%(severalUsers)shaben den Raum betreten", + "%(oneUser)sjoined": "%(oneUser)shat den Raum betreten", "%(severalUsers)sleft %(repeats)s times": "%(severalUsers)sverließen %(repeats)s mal den Raum", "%(oneUser)sleft %(repeats)s times": "%(oneUser)sging %(repeats)s mal", "%(severalUsers)sleft": "%(severalUsers)shaben den Raum verlassen", "%(oneUser)sleft": "%(oneUser)sging", - "%(severalUsers)sjoined and left %(repeats)s times": "%(severalUsers)straten bei und gingen %(repeats)s mal", - "%(oneUser)sjoined and left %(repeats)s times": "%(oneUser)strat bei und ging %(repeats)s mal", - "%(severalUsers)sjoined and left": "%(severalUsers)straten bei und gingen", - "%(oneUser)sjoined and left": "%(oneUser)strat bei und ging", + "%(severalUsers)sjoined and left %(repeats)s times": "%(severalUsers)shaben den Raum %(repeats)s mal betreten und wieder verlassen", + "%(oneUser)sjoined and left %(repeats)s times": "%(oneUser)shat den Raum %(repeats)s mal betreten und wieder verlassen", + "%(severalUsers)sjoined and left": "%(severalUsers)shaben den Raum betreten und wieder verlassen", + "%(oneUser)sjoined and left": "%(oneUser)shat den Raum betreten und wieder verlassen", "%(severalUsers)sleft and rejoined %(repeats)s times": "%(severalUsers)shaben den Raum verlassen und %(repeats)s mal neu betreten", - "%(oneUser)sleft and rejoined %(repeats)s times": "%(oneUser)sging und trat %(repeats)s mal erneut bei", - "%(severalUsers)sleft and rejoined": "%(severalUsers)s gingen und traten erneut bei", + "%(oneUser)sleft and rejoined %(repeats)s times": "%(oneUser)shat den Raum %(repeats)s mal verlassen und wieder neu betreten", + "%(severalUsers)sleft and rejoined": "%(severalUsers)shaben den Raum verlassen und wieder neu betreten", "%(oneUser)sleft left and rejoined": "%(oneUser)sging und trat erneut bei", - "%(severalUsers)srejected their invitations %(repeats)s times": "%(severalUsers)s lehnten %(repeats)s mal ihre Einladung ab", + "%(severalUsers)srejected their invitations %(repeats)s times": "%(severalUsers)shaben ihre Einladung %(repeats)s mal abgelehnt", "%(oneUser)srejected their invitation %(repeats)s times": "%(oneUser)shat die Einladung %(repeats)s mal abgelehnt", - "%(severalUsers)srejected their invitations": "%(severalUsers)slehnten ihre Einladung ab", - "%(oneUser)srejected their invitation": "%(oneUser)slehnte seine/ihre Einladung ab", + "%(severalUsers)srejected their invitations": "%(severalUsers)shaben ihre Einladung abgelehnt", + "%(oneUser)srejected their invitation": "%(oneUser)shat die Einladung abgelehnt", "%(severalUsers)shad their invitations withdrawn %(repeats)s times": "%(severalUsers)szogen ihre Einladungen %(repeats)s mal zurück", "%(oneUser)shad their invitation withdrawn %(repeats)s times": "%(oneUser)szog seine/ihre Einladung %(repeats)s mal zurück", "%(severalUsers)shad their invitations withdrawn": "%(severalUsers)szogen ihre Einladungen zurück", @@ -687,16 +687,16 @@ "were kicked %(repeats)s times": "wurden %(repeats)s mal gekickt", "was kicked %(repeats)s times": "wurde %(repeats)s mal gekickt", "were kicked": "wurden aus dem Raum entfernt", - "%(severalUsers)schanged their name %(repeats)s times": "%(severalUsers)sänderten %(repeats)s mal ihre Namen", - "%(oneUser)schanged their name %(repeats)s times": "%(oneUser)sänderte %(repeats)s mal seinen/ihren Namen", + "%(severalUsers)schanged their name %(repeats)s times": "%(severalUsers)shaben ihren Namen %(repeats)s mal geändert", + "%(oneUser)schanged their name %(repeats)s times": "%(oneUser)shat den Namen %(repeats)s mal geändert", "%(severalUsers)schanged their name": "%(severalUsers)shaben ihre Namen geändert", - "%(oneUser)schanged their name": "%(oneUser)sänderte seinen/ihren Namen", + "%(oneUser)schanged their name": "%(oneUser)shat den Namen geändert", "%(severalUsers)schanged their avatar %(repeats)s times": "%(severalUsers)shaben %(repeats)s mal ihr Profilbild geändert", "%(oneUser)schanged their avatar %(repeats)s times": "%(oneUser)shat %(repeats)s mal das Profilbild geändert", "%(severalUsers)schanged their avatar": "%(severalUsers)shaben ihr Profilbild geändert", "%(oneUser)schanged their avatar": "%(oneUser)shat das Profilbild geändert", "%(weekDayName)s, %(monthName)s %(day)s %(fullYear)s %(time)s": "%(weekDayName)s, %(day)s. %(monthName)s %(fullYear)s %(time)s", - "%(oneUser)sleft and rejoined": "%(oneUser)sverließ den Raum und trat erneut bei", + "%(oneUser)sleft and rejoined": "%(oneUser)shat den Raum verlassen und wieder neu betreten", "A registered account is required for this action": "Für diese Aktion ist ein registrierter Account notwendig", "Access Token:": "Zugangs-Token:", "Always show message timestamps": "Nachrichten-Zeitstempel immer anzeigen", @@ -727,7 +727,7 @@ "Invalid file%(extra)s": "Ungültige Datei%(extra)s", "Remove %(threePid)s?": "Entferne %(threePid)s?", "Please select the destination room for this message": "Bitte den Raum auswählen, an den diese Nachricht gesendet werden soll", - "%(senderDisplayName)s removed the room name.": "%(senderDisplayName)s löschte den Raumnamen.", + "%(senderDisplayName)s removed the room name.": "%(senderDisplayName)s hat den Raum-Namen gelöscht.", "Passphrases must match": "Passphrase muss übereinstimmen", "Passphrase must not be empty": "Passphrase darf nicht leer sein", "Export room keys": "Raum-Schlüssel exportieren", @@ -861,8 +861,8 @@ "device id: ": "Geräte-ID: ", "Device key:": "Geräte-Schlüssel:", "Email address (optional)": "E-Mail-Adresse (optional)", - "List this room in %(domain)s's room directory?": "Liste diesen Raum in %(domain)s's Raumverzeichnis?", - "Mobile phone number (optional)": "Handynummer (optional)", + "List this room in %(domain)s's room directory?": "Diesen Raum zum Raum-Verzeichnis von %(domain)s hinzufügen?", + "Mobile phone number (optional)": "Mobilfunknummer (optional)", "Password:": "Passwort:", "Register": "Registrieren", "Save": "Speichern", @@ -888,5 +888,36 @@ "$senderDisplayName changed the room avatar to ": "$senderDisplayName hat das Raum-Bild geändert zu ", "%(senderDisplayName)s changed the avatar for %(roomName)s": "%(senderDisplayName)s hat das Raum-Bild für %(roomName)s geändert", "Hide removed messages": "Gelöschte Nachrichten verbergen", - "Start new chat": "Neuen Chat starten" + "Start new chat": "Neuen Chat starten", + "Disable markdown formatting": "Deaktiviere Markdown-Formatierung", + "Add": "Hinzufügen", + "%(count)s new messages.one": "%(count)s neue Nachricht", + "%(count)s new messages.other": "%(count)s neue Nachrichten", + "Error: Problem communicating with the given homeserver.": "Fehler: Problem beim kommunizieren mit dem angegebenen Heimserver.", + "Failed to fetch avatar URL": "Fehler beim holen der Avatar-URL", + "Some of your messages have not been sent.": "Einige deiner Nachrichten wurden nicht gesendet.", + "The phone number entered looks invalid": "Die Telefonnummer, die eingegeben wurde, sieht ungültig aus", + "This room is private or inaccessible to guests. You may be able to join if you register.": "Dieser Raum ist privat oder für Gäste nicht betretbar. Du kannst evtl. beitreten wenn du dich registrierst.", + "Tried to load a specific point in this room's timeline, but you do not have permission to view the message in question.": "Es wurde versucht einen spezifischen Punkt in der Chat-Historie zu laden, aber du hast keine Berechtigung diese Nachricht zu sehen.", + "Tried to load a specific point in this room's timeline, but was unable to find it.": "Es wurde versucht einen spezifischen Punkt in der Chat-Historie zu laden, aber er konnte nicht gefunden werden.", + "Uploading %(filename)s and %(count)s others.zero": "%(filename)s wird hochgeladen", + "Uploading %(filename)s and %(count)s others.one": "%(filename)s und %(count)s weitere werden hochgeladen", + "Uploading %(filename)s and %(count)s others.other": "%(filename)s und %(count)s weitere werden hochgeladen", + "You must register to use this functionality": "Du musst dich registrieren um diese Funktionalität zu nutzen", + "Resend all or cancel all now. You can also select individual messages to resend or cancel.": "Sende erneut oder breche alles ab. Du kannst auch auch individuelle Nachrichten erneut senden or abbrechen.", + "Create new room": "Erstelle neuen Raum", + "Welcome page": "Willkommensseite", + "Room directory": "Raum-Verzeichnis", + "Start chat": "Starte Chat", + "New Password": "Neues Passwort", + "Start chatting": "Starte plaudern", + "Start Chatting": "Starte Gespräche", + "Click on the button below to start chatting!": "Klicke den Button unten um das Plaudern zu beginnen!", + "Create a new chat or reuse an existing one": "Erstelle einen neuen Chat oder nutze einen existierenden", + "You already have existing direct chats with this user:": "Du hast bereits direkte Chats mit diesem Nutzer:", + "Username available": "Nutzername verfügbar", + "Username not available": "Nutzername nicht verfügbar", + "Something went wrong!": "Etwas ging schief!", + "This will be your account name on the homeserver, or you can pick a different server.": "Dies wird dein Konto-Name auf dem Heimserver, oder du kannst einen anderen Server auswählen.", + "If you already have a Matrix account you can log in instead.": "Wenn du bereits ein Matrix-Konto hast, kannst du ansonsten auch anmelden." } diff --git a/src/i18n/strings/fr.json b/src/i18n/strings/fr.json index bf05173356..ecbb20fbb7 100644 --- a/src/i18n/strings/fr.json +++ b/src/i18n/strings/fr.json @@ -826,5 +826,8 @@ "You have disabled URL previews by default.": "Vous avez désactivé les aperçus d’URL par défaut.", "You have enabled URL previews by default.": "Vous avez activé les aperçus d’URL par défaut.", "You have entered an invalid contact. Try using their Matrix ID or email address.": "Vous avez entré un contact invalide. Essayez d’utiliser leur identifiant Matrix ou leur adresse email.", - "Hide removed messages": "Cacher les messages supprimés" + "Hide removed messages": "Cacher les messages supprimés", + "Add": "Ajouter", + "%(count)s new messages.one": "%(count)s nouveau message", + "%(count)s new messages.other": "%(count)s nouveaux messages" } diff --git a/src/i18n/strings/hu.json b/src/i18n/strings/hu.json index 5430737f15..748810f76e 100644 --- a/src/i18n/strings/hu.json +++ b/src/i18n/strings/hu.json @@ -1,3 +1,28 @@ { - "Cancel": "Mégse" + "Cancel": "Mégse", + "Search": "Keresés", + "OK": "Rendben", + "Custom Server Options": "Egyedi szerver beállítások", + "Direct Chat": "Közvetlen csevegés", + "Dismiss": "Eltűntet", + "Drop here %(toAction)s": "%(toAction)s -t húzd ide", + "Error": "Hiba", + "Failed to forget room %(errCode)s": "Nem lehet eltávolítani a szobát: %(errCode)s", + "Failed to join the room": "Nem lehet csatlakozni a szobához", + "Favourite": "Kedvenc", + "Mute": "Elnémít", + "Notifications": "Értesítések", + "Operation failed": "Művelet sikertelen", + "Please Register": "Regisztrálj", + "powered by Matrix": "Matrixon alapul", + "Remove": "Töröl", + "Settings": "Beállítások", + "unknown error code": "ismeretlen hiba kód", + "Sunday": "Vasárnap", + "Monday": "Hétfő", + "Tuesday": "Kedd", + "Wednesday": "Szerda", + "Thursday": "Csütörtök", + "Friday": "Péntek", + "Saturday": "Szombat" } diff --git a/src/i18n/strings/ru.json b/src/i18n/strings/ru.json index 58f8e0291c..85b7a6a7f5 100644 --- a/src/i18n/strings/ru.json +++ b/src/i18n/strings/ru.json @@ -84,11 +84,11 @@ "Failed to upload file": "Не удалось закачать файл", "Favourite": "Избранное", "favourite": "фаворит", - "Favourites": "Фавориты", + "Favourites": "Избранное", "Filter room members": "Фильтр участников комнаты", "Forget room": "Забыть комнату", "Forgot your password?": "Вы забыли пароль?", - "For security, this session has been signed out. Please sign in again.": "Для обеспечения безопасности, эта сессия была подписана. Войдите в систему еще раз.", + "For security, this session has been signed out. Please sign in again.": "Для обеспечения безопасности эта сессия была завершена. Войдите в систему еще раз.", "Found a bug?": "Нашли ошибку?", "had": "имеет", "Hangup": "Отключение", @@ -153,7 +153,7 @@ "requested a VoIP conference": "requested a VoIP conference", "Return to login screen": "Return to login screen", "Send Reset Email": "Send Reset Email", - "sent an image": "sent an image", + "sent an image": "отправил изображение", "sent an invitation to": "sent an invitation to", "set a profile picture": "set a profile picture", "set their display name to": "set their display name to", @@ -228,7 +228,7 @@ "%(senderName)s banned %(targetName)s.": "%(senderName)s запрещенный %(targetName)s.", "Call Timeout": "Время ожидания вызова", "%(senderName)s changed their display name from %(oldDisplayName)s to %(displayName)s.": "%(senderName)s их имя измененное с %(oldDisplayName)s на %(displayName)s.", - "%(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 topic to \"%(topic)s\".": "%(senderDisplayName)s измененная тема на %(topic)s.", @@ -254,7 +254,7 @@ "%(targetName)s joined the room.": "%(targetName)s вошёл в комнату.", "%(senderName)s kicked %(targetName)s.": "%(senderName)s выкинул %(targetName)s.", "%(targetName)s left the room.": "%(targetName)s покинул комнату.", - "%(senderName)s made future room history visible to": "%(senderName)s история сделаной будущей комнаты, видимая для", + "%(senderName)s made future room history visible to": "%(senderName)s сделал видимой для всех будущую историю комнаты", "Missing room_id in request": "Отсутствует room_id в запросе", "Missing user_id in request": "Отсутствует user_id в запросе", "Must be viewing a room": "Комната должна быть посищена", @@ -356,8 +356,8 @@ "Saturday": "Суббота", "Sunday": "Воскресенье", "%(weekDayName)s %(time)s": "%(weekDayName)s %(time)s", - "Upload an avatar:": "Загрузить аватар", - "You need to be logged in.": "Вы должны быть зарегистрированы", + "Upload an avatar:": "Загрузите аватар:", + "You need to be logged in.": "Вы должны быть зарегистрированы.", "You need to be able to invite users to do that.": "Вам необходимо пригласить пользователей чтобы сделать это.", "You cannot place VoIP calls in this browser.": "Вы не можете сделать вызовы VoIP с этим браузером.", "You are already in a call.": "Вы уже находитесь в разговоре.", @@ -377,7 +377,7 @@ "Oct": "Окт.", "Nov": "Ноя.", "Dec": "Дек.", - "%(weekDayName)s, %(monthName)s %(day)s %(time)s": "%(weekDayName)s, %(monthName)s %(day)s %(time)s", + "%(weekDayName)s, %(monthName)s %(day)s %(time)s": "%(weekDayName)s, %(day)s %(monthName)s %(time)s", "Mon": "Пн", "Sun": "Вс", "Tue": "Вт", @@ -388,8 +388,8 @@ "You need to log back in to generate end-to-end encryption keys for this device and submit the public key to your homeserver. This is a once off; sorry for the inconvenience.": "Вам необходимо снова войти в генерировать сквозное шифрование (е2е) ключей для этого устройства и предоставить публичный ключ Вашему домашнему серверу. Это после выключения; приносим извинения за причиненные неудобства.", "Your email address does not appear to be associated with a Matrix ID on this Homeserver.": "Ваш адрес электронной почты, кажется, не связан с Matrix ID на этом Homeserver.", "to start a chat with someone": "Начать чат с кем-то", - "to tag direct chat": "отометить прямой чат", - "To use it, just wait for autocomplete results to load and tab through them.": "Для его использования, просто подождите результатов автозаполнения для загрузки на вкладке и через них.", + "to tag direct chat": "отметить прямой чат", + "To use it, just wait for autocomplete results to load and tab through them.": "Для его использования просто подождите загрузки результатов автозаполнения и нажимайте Tab для навигации.", "%(senderName)s turned on end-to-end encryption (algorithm %(algorithm)s).": "%(senderName)s включил сквозное шифрование (algorithm %(algorithm)s).", "Unable to restore previous session": "Невозможно востановить предыдущий сеанс", "%(senderName)s unbanned %(targetName)s.": "%(senderName)s запрет отменен %(targetName)s.", @@ -478,7 +478,7 @@ "Always show message timestamps": "Всегда показывать время сообщения", "Authentication": "Авторизация", "olm version:": "версия olm:", - "%(items)s and %(remaining)s others": "%(items)s и %(remaining)s другие", + "%(items)s and %(remaining)s others": "%(items)s и другие %(remaining)s", "%(items)s and one other": "%(items)s и ещё один", "%(items)s and %(lastItem)s": "%(items)s и %(lastItem)s", "and one other...": "и ещё один...", @@ -491,7 +491,7 @@ "Current password": "Текущий пароль", "Email": "Электронная почта", "Failed to kick": "Не удалось выгнать", - "Failed to load timeline position": "Не удалось узнать место во времени", + "Failed to load timeline position": "Не удалось загрузить позицию таймлайна", "Failed to mute user": "Не удалось заглушить", "Failed to reject invite": "Не удалось отклонить приглашение", "Failed to save settings": "Не удалось сохранить настройки", @@ -519,7 +519,7 @@ "New passwords don't match": "Пароли не совпадают", "not set": "не установлено", "not specified": "не указано", - "No devices with registered encryption keys": "Нет устройств с записанными ключами шифрования", + "No devices with registered encryption keys": "Нет устройств с зарегистрированными ключами шифрования", "No more results": "Нет больше результатов", "No results": "Нет результатов", "OK": "ОК", @@ -535,7 +535,7 @@ "rejected": "отклонено", "%(targetName)s rejected the invitation.": "%(targetName)s отклонил приглашение.", "Reject invitation": "Отклонить приглашение", - "Remove Contact Information?": "Убрать контактную информацию?", + "Remove Contact Information?": "Удалить контактную информацию?", "%(senderName)s removed their display name (%(oldDisplayName)s).": "%(senderName)s убрал своё отображаемое имя (%(oldDisplayName)s).", "%(senderName)s removed their profile picture.": "%(senderName)s убрал своё изображение.", "%(senderName)s requested a VoIP conference.": "%(senderName)s запросил голосовую конференц-связь.", @@ -585,7 +585,7 @@ "This room is not recognised.": "Эта комната не опознана.", "These are experimental features that may break in unexpected ways": "Это экспериментальные функции, которые могут неожиданным образом вызывать ошибки", "This doesn't appear to be a valid email address": "Не похоже, что это правильный адрес электронной почты", - "This is a preview of this room. Room interactions have been disabled": "Это просмотр данной комнаты. Взаимодействия с ней были отключены.", + "This is a preview of this room. Room interactions have been disabled": "Это просмотр данной комнаты. Взаимодействия с ней были отключены", "This phone number is already in use": "Этот телефонный номер уже используется", "This room's internal ID is": "Внутренний ID этой комнаты", "times": "раз", @@ -598,7 +598,7 @@ "Unknown room %(roomId)s": "Неизвестная комната %(roomId)s", "You have been invited to join this room by %(inviterName)s": "Вы были приглашены войти в эту комнату от %(inviterName)s", "You seem to be uploading files, are you sure you want to quit?": "Похоже вы передаёте файлы, вы уверены, что хотите выйти?", - "%(weekDayName)s, %(monthName)s %(day)s %(fullYear)s %(time)s": "%(weekDayName)s, %(monthName)s %(day)s %(fullYear)s %(time)s", + "%(weekDayName)s, %(monthName)s %(day)s %(fullYear)s %(time)s": "%(weekDayName)s, %(day)s %(monthName)s %(fullYear)s %(time)s", "Make Moderator": "Сделать модератором", "Room": "Комната", "Cancel": "Отмена", @@ -606,7 +606,7 @@ "italic": "наклонный", "strike": "перечёркнутый", "underline": "подчёркнутый", - "code": "текст", + "code": "код", "quote": "цитата", "bullet": "пункт", "numbullet": "нумерация", @@ -672,5 +672,197 @@ "Logged in as:": "Зарегестрирован как:", "Default Device": "Стандартное устройство", "No Webcams detected": "Веб-камера не обнаружена", - "VoIP": "VoIP" + "VoIP": "VoIP", + "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.": "Для обеспечения безопасности выход из системы удалит все ключи шифроования из этого браузера. Если вы хотите иметь возможность расшифровать переписку в будущем - вы должны экспортирвать ключи вручную.", + "Guest access is disabled on this Home Server.": "Гостевой доступ отключен на этом сервере.", + "Guests can't set avatars. Please register.": "Гости не могут устанавливать аватар. Пожалуйста, зарегистрируйтесь.", + "Guests can't use labs features. Please register.": "Гости не могут использовать экспериментальные возможности. Пожалуйста, зарегистрируйтесь.", + "Guests cannot join this room even if explicitly invited.": "Гости не могут заходить в эту комнату если не были приглашены.", + "Missing Media Permissions, click here to request.": "Отсутствуют разрешения, нажмите для запроса.", + "No media permissions": "Нет медиа разрешений", + "You may need to manually permit Riot to access your microphone/webcam": "Вам необходимо предоставить Riot доступ к микрофону или веб-камере вручную", + "Anyone": "Все", + "Are you sure you want to leave the room '%(roomName)s'?": "Вы уверены, что хотите покинуть '%(roomName)s'?", + "%(senderDisplayName)s removed the room name.": "%(senderDisplayName)s удалил имя комнаты.", + "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.": "Смена пароля также сбросит все ключи шифрования на всех устройствах, сделав зашифрованную историю недоступной, если только вы сначала не экспортируете ключи шифрования и не импортируете их потом. В будущем это будет исправлено.", + "Custom level": "Пользовательский уровень", + "(default: %(userName)s)": "(по-умолчанию: %(userName)s)", + "Device already verified!": "Устройство уже верифицировано!", + "Device ID:": "ID устройства:", + "device id: ": "id устройства: ", + "Device key:": "Ключ устройства:", + "disabled": "отключено", + "Disable markdown formatting": "Отключить форматирование Markdown", + "Email address": "Адрес email", + "Email address (optional)": "Адрем email (не обязательно)", + "enabled": "включено", + "Error decrypting attachment": "Ошибка расшифровки файла", + "Export": "Экспорт", + "Failed to register as guest:": "Ошибка регистрации как гостя:", + "Failed to set avatar.": "Не удалось установить аватар.", + "Import": "Импорт", + "Incorrect username and/or password.": "Неверное имя пользователя и/или пароль.", + "Invalid file%(extra)s": "Неправильный файл%(extra)s", + "Invited": "Приглашен", + "Jump to first unread message.": "Перейти к первому непрочитанному сообщению.", + "List this room in %(domain)s's room directory?": "Показывать эту комнату в списке комнат %(domain)s?", + "Message not sent due to unknown devices being present": "Сообщение не было отправлено из-за присутствия неизвестного устройства", + "Mobile phone number (optional)": "Номер мобильного телефона (не обязательно)", + "Once you've followed the link it contains, click below": "Как только вы пройдете по ссылке, нажмите на кнопку ниже", + "Password:": "Пароль:", + "Privacy warning": "Предупреждение приватности", + "Privileged Users": "Привилегированные пользователи", + "Revoke Moderator": "Снять модераторские права", + "Refer a friend to Riot:": "Расскажите другу о Riot:", + "Register": "Регистрация", + "Remote addresses for this room:": "Удаленные адреса для этой комнаты:", + "Remove %(threePid)s?": "Удалить %(threePid)s?", + "Results from DuckDuckGo": "Результаты от DuckDuckGo", + "Save": "Сохранить", + "Searches DuckDuckGo for results": "Ищет результаты через DuckDuckGo", + "Server error": "Ошибка сервера", + "Server may be unavailable or overloaded": "Сервер может быть недоступен или перегружен", + "Server may be unavailable, overloaded, or search timed out :(": "Сервер может быть недоступен, перегружен или поиск прекращен по тайм-ауту :(", + "Server may be unavailable, overloaded, or the file too big": "Сервер может быть недоступен, перегружен или размер файла слишком большой", + "Server may be unavailable, overloaded, or you hit a bug.": "Сервер может быть недоступен, перегружен или вы нашли баг.", + "Server unavailable, overloaded, or something else went wrong.": "Сервер может быть недоступен, перегружен или произошло что-то страшное.", + "Session ID": "ID сессии", + "%(senderName)s set a profile picture.": "%(senderName)s установил картинку профиля.", + "%(senderName)s set their display name to %(displayName)s.": "%(senderName)s установил отображаемое имя %(displayName)s.", + "Setting a user name will create a fresh account": "Установка имени пользователя создаст новую учетную запись", + "Signed Out": "Вышли", + "Sorry, this homeserver is using a login which is not recognised ": "Извините, этот Home Server использует логин, который не удалось распознать ", + "Tagged as: ": "Теги: ", + "The signing key you provided matches the signing key you received from %(userId)s's device %(deviceId)s. Device marked as verified.": "Ключ, предоставленный вами, совпадает с ключем, полученным от устройства %(userId)s с ID %(deviceId)s. Устройство помечено как верифицированное.", + "%(actionVerb)s this person?": "%(actionVerb)s этого пользователя?", + "The file '%(fileName)s' exceeds this home server's size limit for uploads": "Файл '%(fileName)s' превышает ограничение размера загрузок на этом Home Server'е", + "This Home Server does not support login using email address.": "Этот Home Server не поддерживает вход по адресу email.", + "There was a problem logging in.": "Возникла проблема входа в учетную запись.", + "The visibility of existing history will be unchanged": "Видимость текущей истории не будет изменена", + "this invitation?": "это приглашение?", + "This room is not accessible by remote Matrix servers": "Это комната закрыта для других серверов Matrix", + "To ban users": "Забанить пользователей", + "to browse the directory": "просматривать директорию", + "To configure the room": "Конфигурировать комнату", + "To invite users into the room": "Приглашать пользователей в комнату", + "to join the discussion": "присоединиться к дискуссии", + "To kick users": "Выгонять пользователей", + "To link to a room it must have": "Для создания ссылки на комнату она должна иметь", + "to make a room or": "создать комнату или", + "To remove other users' messages": "Удалять сообщения других пользователей", + "To reset your password, enter the email address linked to your account": "Чтобы сбросить ваш пароль введите адрес email, который используется аккаунтом", + "to tag as %(tagName)s": "отметить как %(tagName)s", + "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": "Вы попытались загрузить указанное сообщение в комнате, однако сервер не смог его найти", + "Unable to load device list": "Невозможно загрузить список устройств", + "Unknown (user, device) pair:": "Неизвестная пара пользователь-устройство:", + "Unmute": "Разглушить", + "Unrecognised command:": "Неизвестная команда:", + "Unrecognised room alias:": "Неизвестный псевдоним комнаты:", + "Verified key": "Верифицированный ключ", + "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!": "ВНИМАНИЕ: ОШИБКА ВЕРИФИКАЦИИ КЛЮЧЕЙ! Ключ для подписки устройства %(deviceId)s пользователя %(userId)s: \"%(fprint)s\", однако он не совпадает с предоставленным ключем \"%(fingerprint)s\". Это может означать перехват вашего канала коммуникации!", + "You have disabled URL previews by default.": "Предпросмотр ссылок отключен по-умолчанию.", + "You have enabled URL previews by default.": "Предпросмотр ссылок включен по-умолчанию.", + "You have entered an invalid contact. Try using their Matrix ID or email address.": "Вы ввели неправильный адрес. Попробуйте использовать Matrix ID или адрес email.", + "You need to enter a user name.": "Необходимо ввести имя пользователя.", + "You seem to be in a call, are you sure you want to quit?": "Вы учавствуете в звонке, вы уверены, что хотите выйти?", + "You will not be able to undo this change as you are promoting the user to have the same power level as yourself": "Вы не сможете отменить это действие так как даете пользователю такой же уровень доступа как и у вас", + "Set a Display Name": "Установить отображаемое имя", + "(~%(searchCount)s results)": "(~%(searchCount)s результатов)", + "%(severalUsers)shad their invitations withdrawn %(repeats)s times": "%(severalUsers)s отозвали свои приглашения %(repeats)s раз", + "%(oneUser)shad their invitation withdrawn %(repeats)s times": "%(oneUser)s отозвал свои приглашения %(repeats)s раз", + "%(severalUsers)shad their invitations withdrawn": "%(severalUsers)s отозвали свои приглашения", + "%(oneUser)shad their invitation withdrawn": "%(oneUser)s отозвал свое приглашение", + "Please select the destination room for this message": "Выберите комнату назначения для этого сообщения", + "Options": "Настройки", + "Passphrases must match": "Пароли должны совпадать", + "Passphrase must not be empty": "Пароль не должен быть пустым", + "Export room keys": "Экспортировать ключи", + "Enter passphrase": "Введите пароль", + "Confirm passphrase": "Подтвердите пароль", + "Import room keys": "Импортировать ключи", + "File to import": "Файл для импорта", + "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.": "Экспортированный файл позволит любому пользователю расшифровать и зашифровать сообщения, которые вы видите, поэтому вы должны быть крайне осторожны и держать файл в надежном месте. Чтобы поспособствовать этому вы должны ввести пароль, который будет использоваться для шифрования ключей. Вы сможете импоортировать ключи только зная этот пароль.", + "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.": "Экспортированный файл защищен паролем. Вы должны ввести этот пароль для расшифровки.", + "You must join the room to see its files": "Вы должны зайти в комнату для просмотра файлов", + "Reject all %(invitedRooms)s invites": "Отклонить все %(invitedRooms)s приглашения", + "Start new chat": "Начать новый чат", + "Guest users can't invite users. Please register.": "Гости не могут приглашать пользователей. Пожалуйста, зарегистрируйтесь.", + "Failed to invite": "Ошибка приглашения", + "Failed to invite user": "Ошибка приглашения пользователя", + "Failed to invite the following users to the %(roomName)s room:": "Ошибка приглашения следующих пользователей в %(roomName)s:", + "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.": "Вы уверены, что хотите удалить этот эвент? Обратите внимание, что если это смена имени комнаты или топика, то удаление отменит это изменение.", + "Unknown error": "Неизвестная ошибка", + "Incorrect password": "Неправильный пароль", + "This will make your account permanently unusable. You will not be able to re-register the same user ID.": "Это сделает вашу учетную запись нерабочей. Вы не сможете зарегистрироваться снова с тем же ID.", + "This action is irreversible.": "Это действие необратимо.", + "To continue, please enter your 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": "Я верифицирую - ключи совпадают", + "We encountered an error trying to restore your previous session. If you continue, you will need to log in again, and encrypted chat history will be unreadable.": "Обнаружена ошибка при восстановлении вашей предыдущей сессии. Вам необходимо зайти снова, шифрованные сообщения будут нечитаемы.", + "Unable to restore 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, то ваша сессия может быть несовместима с текущей. Закройте это окно и вернитесь к использованию более новой версии.", + "Continue anyway": "Все равно продолжить", + "Your display name is how you'll appear to others when you speak in rooms. What would you like it to be?": "Отображаемое имя - это то, как вы отображаетесь в чате. Какое имя вы хотите?", + "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.": "Рекомендуется сначала верифицировать устройства для подтверждения их владения правильным пользователем, но вы можете отправить сообщение без верификации, если хотите.", + "\"%(RoomName)s\" contains devices that you haven't seen before.": "\"%(RoomName)s\" содержит неизвестные прежде устройства.", + "Unknown Address": "Неизвестный адрес", + "Unblacklist": "Удалить из черного списка", + "Blacklist": "Добавить в черный список", + "Unverify": "Убрать верификацию", + "Verify...": "Верифицировать...", + "ex. @bob:example.com": "например @bob:example.com", + "Add User": "Добавить пользователя", + "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.": "Вы можете использовать пользовательские настройки сервера для использования другого Home Server'а при помощи указания его URL.", + "This allows you to use this app with an existing Matrix account on a different home server.": "Это позволяет использовать это приложение с существующей учетной записью на другом Home Server'е.", + "You can also set a custom identity server but this will typically prevent interaction with users based on email address.": "Вы также можете указать пользовательский сервер идентификации, но это обычно ломает возможность общаться с пользователями с помощью адреса email.", + "Please check your email to continue registration.": "Проверьте свою почту для продолжения регистрации.", + "Token incorrect": "Неправильный токен", + "A text message has been sent to": "Текстовое сообщение было отправлено", + "Please enter the code it contains:": "Введите содержащийся код:", + "If you don't specify an email address, you won't be able to reset your password. Are you sure?": "Если вы не укажете адрес email, то вы не сможете сбросить свой пароль в будущем. Вы уверены?", + "You are registering with %(SelectedTeamName)s": "Вы регистрируетесь на %(SelectedTeamName)s", + "Default server": "Сервер по-умолчанию", + "Custom server": "Пользовательский сервер", + "Home server URL": "URL Home Server'а", + "Identity server URL": "URL сервера идентификации", + "What does this mean?": "Что это значит?", + "Error decrypting audio": "Ошибка расшифровки аудио", + "Error decrypting image": "Ошибка расшифровки изображения", + "Image '%(Body)s' cannot be displayed.": "Изображение '%(Body)s' не может быть отображено.", + "This image cannot be displayed.": "Это изображение не может быть отображено.", + "Error decrypting video": "Ошибка расшифровки видео", + "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?": "Вы будете перенаправлены на внешний сайт, где вы сможете аутентифицировать свою учетную запись для использования с %(integrationsUrl)s. Вы хотите продолжить?", + "Removed or unknown message type": "Удаленный или неизвестный тип сообщения", + "Disable URL previews by default for participants in this room": "Отключить предпросмотр URL для участников этой комнаты по-умолчанию", + "URL previews are %(globalDisableUrlPreview)s by default for participants in this room.": "Предпросмотр URL %(globalDisableUrlPreview)s по-умолчанию для участников этой комнаты.", + "URL Previews": "Предпросмотр URL", + "Enable URL previews for this room (affects only you)": "Включить предпросмотр URL в этой комнате (только для вас)", + "Drop file here to upload": "Перетащите файл сюда для загрузки", + " (unsupported)": " (не поддерживается)", + "Ongoing conference call%(supportedText)s. %(joinText)s": "Идет конференц-звонок%(supportedText)s. %(joinText)s", + "for %(amount)ss": "для %(amount)s", + "for %(amount)sm": "для %(amount)s", + "for %(amount)sh": "для %(amount)s", + "for %(amount)sd": "для %(amount)s", + "Online": "В сети", + "Idle": "Отошел", + "Offline": "Не в сети", + "Disable URL previews for this room (affects only you)": "Отключить предпросмотр URL в этой комнате (только для вас)", + "$senderDisplayName changed the room avatar to ": "$senderDisplayName сменил аватар комнаты на ", + "%(senderDisplayName)s removed the room avatar.": "%(senderDisplayName)s удалил аватар комнаты.", + "%(senderDisplayName)s changed the avatar for %(roomName)s": "%(senderDisplayName)s сменил аватар для %(roomName)s" } diff --git a/src/i18n/strings/th.json b/src/i18n/strings/th.json index 5bafdc97cd..6608219faa 100644 --- a/src/i18n/strings/th.json +++ b/src/i18n/strings/th.json @@ -25,7 +25,7 @@ "(default: %(userName)s)": "(ค่าเริ่มต้น: %(userName)s)", "Default Device": "อุปกรณ์เริ่มต้น", "%(senderName)s banned %(targetName)s.": "%(senderName)s แบน %(targetName)s แล้ว", - "%(senderDisplayName)s changed the topic to \"%(topic)s\".": "%(senderDisplayName)s เปลี่ยนหัวข้อเป็น \"%(topic)s\" แล้ว", + "%(senderDisplayName)s changed the topic to \"%(topic)s\".": "%(senderDisplayName)s เปลี่ยนหัวข้อเป็น \"%(topic)s\"", "Decrypt %(text)s": "ถอดรหัส %(text)s", "Device ID": "ID อุปกรณ์", "Device ID:": "ID อุปกรณ์:", @@ -96,8 +96,8 @@ "all room members, from the point they are invited": "สมาชิกทั้งหมด นับตั้งแต่เมื่อได้รับคำเชิญ", "all room members, from the point they joined": "สมาชิกทั้งหมด นับตั้งแต่เมื่อเข้าร่วมห้อง", "an address": "ที่อยู่", - "%(items)s and %(remaining)s others": "%(items)s และอีก %(remaining)s อย่าง", - "%(items)s and one other": "%(items)s และอีกหนึ่งอย่าง", + "%(items)s and %(remaining)s others": "%(items)s และอีก %(remaining)s ผู้ใช้", + "%(items)s and one other": "%(items)s และอีกหนึ่งผู้ใช้", "%(items)s and %(lastItem)s": "%(items)s และ %(lastItem)s", "and %(overflowCount)s others...": "และอีก %(overflowCount)s ผู้ใช้...", "and one other...": "และอีกหนึ่งผู้ใช้...", @@ -322,5 +322,13 @@ "This is a preview of this room. Room interactions have been disabled": "นี่คือตัวอย่างของห้อง การตอบสนองภายในห้องถูกปิดใช้งาน", "This phone number is already in use": "หมายเลขโทรศัพท์นี้ถูกใช้งานแล้ว", "This room's internal ID is": "ID ภายในของห้องนี้คือ", - "times": "เวลา" + "times": "เวลา", + "%(oneUser)schanged their name": "%(oneUser)sเปลี่ยนชื่อของเขาแล้ว", + "%(severalUsers)schanged their name %(repeats)s times": "%(severalUsers)sเปลี่ยนชื่อของพวกเขา %(repeats)s ครั้ง", + "%(oneUser)schanged their name %(repeats)s times": "%(oneUser)sเปลี่ยนชื่อของเขา %(repeats)s ครั้ง", + "%(severalUsers)schanged their name": "%(severalUsers)sเปลี่ยนชื่อของพวกเขาแล้ว", + "Create new room": "สร้างห้องใหม่", + "Room directory": "ไดเรกทอรีห้อง", + "Start chat": "เริ่มแชท", + "Welcome page": "หน้าต้อนรับ" }