diff --git a/src/components/views/globals/NewVersionBar.js b/src/components/views/globals/NewVersionBar.js
index 219ef02a9a..d25fa3a6f2 100644
--- a/src/components/views/globals/NewVersionBar.js
+++ b/src/components/views/globals/NewVersionBar.js
@@ -96,7 +96,7 @@ export default React.createClass({
}
return (
-

+
{_t("A new version of Riot is available.")}
diff --git a/src/components/views/globals/UpdateCheckBar.js b/src/components/views/globals/UpdateCheckBar.js
index d72ccefff4..4949c4426d 100644
--- a/src/components/views/globals/UpdateCheckBar.js
+++ b/src/components/views/globals/UpdateCheckBar.js
@@ -77,7 +77,7 @@ export default React.createClass({
render: function() {
let image;
if (this.state.done) {
- image =

;
+ image =

;
} else {
image =

;
}
From 4c8ff0955db14c78d73a2db43d7ca7a8de7a3b6c Mon Sep 17 00:00:00 2001
From: Michael Telatynski <7t3chguy@gmail.com>
Date: Sun, 11 Jun 2017 16:43:20 +0100
Subject: [PATCH 030/213] move electron update logic into own file, tidy tidy
tidy
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
---
electron_app/src/electron-main.js | 72 +++----------------------------
electron_app/src/updater.js | 65 ++++++++++++++++++++++++++++
2 files changed, 70 insertions(+), 67 deletions(-)
create mode 100644 electron_app/src/updater.js
diff --git a/electron_app/src/electron-main.js b/electron_app/src/electron-main.js
index f1a9e37a73..d793ab9be9 100644
--- a/electron_app/src/electron-main.js
+++ b/electron_app/src/electron-main.js
@@ -28,6 +28,7 @@ const AutoLaunch = require('auto-launch');
const tray = require('./tray');
const vectorMenu = require('./vectormenu');
const webContentsHandler = require('./webcontents-handler');
+const updater = require('./updater');
const windowStateKeeper = require('electron-window-state');
@@ -45,69 +46,9 @@ try {
// Continue with the defaults (ie. an empty config)
}
-const UPDATE_POLL_INTERVAL_MS = 60 * 60 * 1000;
-const INITIAL_UPDATE_DELAY_MS = 30 * 1000;
-
let mainWindow = null;
-let appQuitting = false;
+global.appQuitting = false;
-function installUpdate() {
- // for some reason, quitAndInstall does not fire the
- // before-quit event, so we need to set the flag here.
- appQuitting = true;
- electron.autoUpdater.quitAndInstall();
-}
-
-function pollForUpdates() {
- try {
- electron.autoUpdater.checkForUpdates();
- } catch (e) {
- console.log('Couldn\'t check for update', e);
- }
-}
-
-function startAutoUpdate(updateBaseUrl) {
- if (updateBaseUrl.slice(-1) !== '/') {
- updateBaseUrl = updateBaseUrl + '/';
- }
- try {
- // For reasons best known to Squirrel, the way it checks for updates
- // is completely different between macOS and windows. On macOS, it
- // hits a URL that either gives it a 200 with some json or
- // 204 No Content. On windows it takes a base path and looks for
- // files under that path.
- if (process.platform === 'darwin') {
- // include the current version in the URL we hit. Electron doesn't add
- // it anywhere (apart from the User-Agent) so it's up to us. We could
- // (and previously did) just use the User-Agent, but this doesn't
- // rely on NSURLConnection setting the User-Agent to what we expect,
- // and also acts as a convenient cache-buster to ensure that when the
- // app updates it always gets a fresh value to avoid update-looping.
- electron.autoUpdater.setFeedURL(
- `${updateBaseUrl}macos/?localVersion=${encodeURIComponent(electron.app.getVersion())}`);
-
- } else if (process.platform === 'win32') {
- electron.autoUpdater.setFeedURL(`${updateBaseUrl}win32/${process.arch}/`);
- } else {
- // Squirrel / electron only supports auto-update on these two platforms.
- // I'm not even going to try to guess which feed style they'd use if they
- // implemented it on Linux, or if it would be different again.
- console.log('Auto update not supported on this platform');
- }
- // We check for updates ourselves rather than using 'updater' because we need to
- // do it in the main process (and we don't really need to check every 10 minutes:
- // every hour should be just fine for a desktop app)
- // However, we still let the main window listen for the update events.
- // We also wait a short time before checking for updates the first time because
- // of squirrel on windows and it taking a small amount of time to release a
- // lock file.
- setTimeout(pollForUpdates, INITIAL_UPDATE_DELAY_MS);
- setInterval(pollForUpdates, UPDATE_POLL_INTERVAL_MS);
- } catch (err) {
- // will fail if running in debug mode
- console.log('Couldn\'t enable update checking', err);
- }
-}
// handle uncaught errors otherwise it displays
// stack traces in popup dialogs, which is terrible (which
@@ -119,9 +60,6 @@ process.on('uncaughtException', function(error) {
console.log('Unhandled exception', error);
});
-electron.ipcMain.on('install_update', installUpdate);
-electron.ipcMain.on('checkForUpdates', pollForUpdates);
-
let focusHandlerAttached = false;
electron.ipcMain.on('setBadgeCount', function(ev, count) {
electron.app.setBadgeCount(count);
@@ -219,7 +157,7 @@ electron.ipcMain.on('settings_set', function(ev, key, value) {
electron.app.on('ready', () => {
if (vectorConfig.update_base_url) {
console.log(`Starting auto update with base URL: ${vectorConfig.update_base_url}`);
- startAutoUpdate(vectorConfig.update_base_url);
+ updater.start(vectorConfig.update_base_url)
} else {
console.log('No update_base_url is defined: auto update is disabled');
}
@@ -265,7 +203,7 @@ electron.app.on('ready', () => {
mainWindow = null;
});
mainWindow.on('close', (e) => {
- if (!appQuitting && (tray.hasTray() || process.platform === 'darwin')) {
+ if (!global.appQuitting && (tray.hasTray() || process.platform === 'darwin')) {
// On Mac, closing the window just hides it
// (this is generally how single-window Mac apps
// behave, eg. Mail.app)
@@ -288,7 +226,7 @@ electron.app.on('activate', () => {
});
electron.app.on('before-quit', () => {
- appQuitting = true;
+ global.appQuitting = true;
});
// Set the App User Model ID to match what the squirrel
diff --git a/electron_app/src/updater.js b/electron_app/src/updater.js
new file mode 100644
index 0000000000..ea7b259fb4
--- /dev/null
+++ b/electron_app/src/updater.js
@@ -0,0 +1,65 @@
+const { app, autoUpdater, ipcMain } = require('electron');
+
+const UPDATE_POLL_INTERVAL_MS = 60 * 60 * 1000;
+const INITIAL_UPDATE_DELAY_MS = 30 * 1000;
+
+function installUpdate() {
+ // for some reason, quitAndInstall does not fire the
+ // before-quit event, so we need to set the flag here.
+ global.appQuitting = true;
+ autoUpdater.quitAndInstall();
+}
+
+function pollForUpdates() {
+ try {
+ autoUpdater.checkForUpdates();
+ } catch (e) {
+ console.log('Couldn\'t check for update', e);
+ }
+}
+
+module.exports = {};
+module.exports.start = function startAutoUpdate(updateBaseUrl) {
+ if (updateBaseUrl.slice(-1) !== '/') {
+ updateBaseUrl = updateBaseUrl + '/';
+ }
+ try {
+ // For reasons best known to Squirrel, the way it checks for updates
+ // is completely different between macOS and windows. On macOS, it
+ // hits a URL that either gives it a 200 with some json or
+ // 204 No Content. On windows it takes a base path and looks for
+ // files under that path.
+ if (process.platform === 'darwin') {
+ // include the current version in the URL we hit. Electron doesn't add
+ // it anywhere (apart from the User-Agent) so it's up to us. We could
+ // (and previously did) just use the User-Agent, but this doesn't
+ // rely on NSURLConnection setting the User-Agent to what we expect,
+ // and also acts as a convenient cache-buster to ensure that when the
+ // app updates it always gets a fresh value to avoid update-looping.
+ autoUpdater.setFeedURL(`${updateBaseUrl}macos/?localVersion=${encodeURIComponent(app.getVersion())}`);
+
+ } else if (process.platform === 'win32') {
+ autoUpdater.setFeedURL(`${updateBaseUrl}win32/${process.arch}/`);
+ } else {
+ // Squirrel / electron only supports auto-update on these two platforms.
+ // I'm not even going to try to guess which feed style they'd use if they
+ // implemented it on Linux, or if it would be different again.
+ console.log('Auto update not supported on this platform');
+ }
+ // We check for updates ourselves rather than using 'updater' because we need to
+ // do it in the main process (and we don't really need to check every 10 minutes:
+ // every hour should be just fine for a desktop app)
+ // However, we still let the main window listen for the update events.
+ // We also wait a short time before checking for updates the first time because
+ // of squirrel on windows and it taking a small amount of time to release a
+ // lock file.
+ setTimeout(pollForUpdates, INITIAL_UPDATE_DELAY_MS);
+ setInterval(pollForUpdates, UPDATE_POLL_INTERVAL_MS);
+ } catch (err) {
+ // will fail if running in debug mode
+ console.log('Couldn\'t enable update checking', err);
+ }
+}
+
+ipcMain.on('install_update', installUpdate);
+ipcMain.on('checkForUpdates', pollForUpdates);
From c4fd139586f14449bb830f2dc62c6b053c41dcdd Mon Sep 17 00:00:00 2001
From: Michael Telatynski <7t3chguy@gmail.com>
Date: Sun, 11 Jun 2017 16:46:47 +0100
Subject: [PATCH 031/213] get rid of pointless interval and timeout on linux
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
---
electron_app/src/updater.js | 27 ++++++++++++++++-----------
1 file changed, 16 insertions(+), 11 deletions(-)
diff --git a/electron_app/src/updater.js b/electron_app/src/updater.js
index ea7b259fb4..e585dc977d 100644
--- a/electron_app/src/updater.js
+++ b/electron_app/src/updater.js
@@ -24,6 +24,7 @@ module.exports.start = function startAutoUpdate(updateBaseUrl) {
updateBaseUrl = updateBaseUrl + '/';
}
try {
+ let url;
// For reasons best known to Squirrel, the way it checks for updates
// is completely different between macOS and windows. On macOS, it
// hits a URL that either gives it a 200 with some json or
@@ -36,25 +37,29 @@ module.exports.start = function startAutoUpdate(updateBaseUrl) {
// rely on NSURLConnection setting the User-Agent to what we expect,
// and also acts as a convenient cache-buster to ensure that when the
// app updates it always gets a fresh value to avoid update-looping.
- autoUpdater.setFeedURL(`${updateBaseUrl}macos/?localVersion=${encodeURIComponent(app.getVersion())}`);
+ url = `${updateBaseUrl}macos/?localVersion=${encodeURIComponent(app.getVersion())}`;
} else if (process.platform === 'win32') {
- autoUpdater.setFeedURL(`${updateBaseUrl}win32/${process.arch}/`);
+ url = `${updateBaseUrl}win32/${process.arch}/`;
} else {
// Squirrel / electron only supports auto-update on these two platforms.
// I'm not even going to try to guess which feed style they'd use if they
// implemented it on Linux, or if it would be different again.
console.log('Auto update not supported on this platform');
}
- // We check for updates ourselves rather than using 'updater' because we need to
- // do it in the main process (and we don't really need to check every 10 minutes:
- // every hour should be just fine for a desktop app)
- // However, we still let the main window listen for the update events.
- // We also wait a short time before checking for updates the first time because
- // of squirrel on windows and it taking a small amount of time to release a
- // lock file.
- setTimeout(pollForUpdates, INITIAL_UPDATE_DELAY_MS);
- setInterval(pollForUpdates, UPDATE_POLL_INTERVAL_MS);
+
+ if (url) {
+ autoUpdater.setFeedURL(url);
+ // We check for updates ourselves rather than using 'updater' because we need to
+ // do it in the main process (and we don't really need to check every 10 minutes:
+ // every hour should be just fine for a desktop app)
+ // However, we still let the main window listen for the update events.
+ // We also wait a short time before checking for updates the first time because
+ // of squirrel on windows and it taking a small amount of time to release a
+ // lock file.
+ setTimeout(pollForUpdates, INITIAL_UPDATE_DELAY_MS);
+ setInterval(pollForUpdates, UPDATE_POLL_INTERVAL_MS);
+ }
} catch (err) {
// will fail if running in debug mode
console.log('Couldn\'t enable update checking', err);
From e5b6d0a43c9962f30b6b580769610a0391573743 Mon Sep 17 00:00:00 2001
From: Tom Tryfonidis
Date: Sun, 11 Jun 2017 16:33:13 +0000
Subject: [PATCH 032/213] Translated using Weblate (Greek)
Currently translated at 97.9% (194 of 198 strings)
Translation: Riot Web/riot-web
Translate-URL: https://translate.riot.im/projects/riot-web/riot-web/el/
---
src/i18n/strings/el.json | 133 +++++++++++++++++++++++++--------------
1 file changed, 85 insertions(+), 48 deletions(-)
diff --git a/src/i18n/strings/el.json b/src/i18n/strings/el.json
index 2cb2973c0f..22d0775ec8 100644
--- a/src/i18n/strings/el.json
+++ b/src/i18n/strings/el.json
@@ -7,34 +7,34 @@
"An error occurred whilst saving your email notification preferences.": "Ένα σφάλμα προέκυψε κατά την αποθήκευση των ρυθμίσεων σας.",
"Call invitation": "Πρόσκληση σε κλήση",
"Cancel": "Ακύρωση",
- "Cancel Sending": "Ακύρωση Αποστολής",
+ "Cancel Sending": "Ακύρωση αποστολής",
"Can't update user notification settings": "Δεν είναι δυνατή η ενημέρωση των ρυθμίσεων ειδοποίησης χρήστη",
"Changelog": "Αλλαγές",
"Close": "Κλείσιμο",
"Collapse panel": "Ελαχιστοποίηση καρτέλας",
- "Create new room": "Δημιούργησε ένα νέο δωμάτιο",
+ "Create new room": "Δημιουργία νέου δωματίου",
"Custom Server Options": "Προσαρμοσμένες ρυθμίσεις διακομιστή",
- "Describe your problem here.": "Περιέγραψε το πρόβλημα σου εδώ.",
- "Direct Chat": "Απευθείας Συνομιλία",
+ "Describe your problem here.": "Περιγράψτε το πρόβλημα σας εδώ.",
+ "Direct Chat": "Απευθείας συνομιλία",
"Directory": "Ευρετήριο",
- "Download this file": "Κατέβασε το αρχείο",
- "Enable audible notifications in web client": "Ενεργοποίηση των ηχητικών ειδοποιήσεων",
- "Enable email notifications": "Ενεργοποίηση ειδοποιήσεων μέσω email",
+ "Download this file": "Λήψη αρχείου",
+ "Enable audible notifications in web client": "Ενεργοποίηση ηχητικών ειδοποιήσεων",
+ "Enable email notifications": "Ενεργοποίηση ειδοποιήσεων μέσω μηνυμάτων ηλ. αλληλογραφίας",
"Enable notifications for this account": "Ενεργοποίηση ειδοποιήσεων γι' αυτό το λογαριασμό",
"Enter keywords separated by a comma:": "Πρόσθεσε λέξεις κλειδιά χωρισμένες με κόμμα:",
"Error": "Σφάλμα",
"#example": "#παράδειγμα",
"Expand panel": "Μεγιστοποίηση καρτέλας",
"Safari and Opera work too.": "Safari και Opera λειτουργούν επίσης.",
- "Add an email address above to configure email notifications": "Πρόσθεσε μια διεύθυνση email στο παραπάνω πεδίο, για να έχεις τη δυνατότητα να λαμβάνεις ειδοποιήσεις",
+ "Add an email address above to configure email notifications": "Προσθέστε μια διεύθυνση ηλεκτρονικής αλληλογραφίας στο παραπάνω πεδίο, για να έχετε τη δυνατότητα να λαμβάνετε ειδοποιήσεις",
"Collecting app version information": "Συγκέντρωση πληροφοριών σχετικά με την έκδοση της εφαρμογής",
- "customServer_text": "Μπορείτε να χρησιμοποιήσετε τις προσαρμοσμένες ρυθμίσεις για να εισέλθετε σε άλλους διακομιστές Matrix επιλέγοντας ένα διαφορετικό URL για το διακομιστή.
Αυτό σας επιτρέπει να χρησιμοποιήσετε την εφαρμογή Riot με έναν υπάρχοντα λογαριασμό σε διαφορετικό διακομιστή.
Επίσης μπορείτε να επιλέξετε ένα διαφορετικό διακομιστή ταυτότητας αλλά δεν θα έχετε τη δυνατότητα να προσκαλέσετε άλλους χρήστες ή να σας προσκαλέσουν, μέσω email.",
+ "customServer_text": "Μπορείτε να χρησιμοποιήσετε τις προσαρμοσμένες ρυθμίσεις για να εισέλθετε σε άλλους διακομιστές Matrix επιλέγοντας μια διαφορετική διεύθυνση για το διακομιστή.
Αυτό σας επιτρέπει να χρησιμοποιήσετε την εφαρμογή Riot με έναν υπάρχοντα λογαριασμό σε διαφορετικό διακομιστή.
Επίσης μπορείτε να επιλέξετε ένα διαφορετικό διακομιστή ταυτότητας αλλά δεν θα έχετε τη δυνατότητα να προσκαλέσετε άλλους χρήστες ή να σας προσκαλέσουν μέσω μηνυμάτων ηλεκτρονικής αλληλογραφίας.",
"%(appName)s via %(browserName)s on %(osName)s": "%(appName)s μέσω %(browserName)s σε %(osName)s",
"All messages (loud)": "Όλα τα μηνύματα (δυνατά)",
- "delete the alias.": "διέγραψε το ψευδώνυμο.",
+ "delete the alias.": "διαγραφή ψευδώνυμου.",
"Delete the room alias %(alias)s and remove %(name)s from the directory?": "Διαγραφή του ψευδώνυμου %(alias)s και αφαίρεση του %(name)s από το ευρετήριο;",
- "Dismiss": "Αγνόησε",
- "Failed to add tag %(tagName)s to room": "Δεν ήταν δυνατή η εισαγωγή του tag %(tagName)s στο δωμάτιο",
+ "Dismiss": "Απόρριψη",
+ "Failed to add tag %(tagName)s to room": "Δεν ήταν δυνατή η προσθήκη της ετικέτας %(tagName)s στο δωμάτιο",
"Failed to change settings": "Δεν ήταν δυνατή η αλλαγή των ρυθμίσεων",
"Failed to join the room": "Δεν ήταν δυνατή η σύνδεση στο δωμάτιο",
"Favourite": "Αγαπημένο",
@@ -43,13 +43,13 @@
"Forward Message": "Προώθηση",
" from room": " από το δωμάτιο",
"Guests can join": "Επισκέπτες μπορούν να συνδεθούν",
- "Guest users can't invite users. Please register to invite.": "Οι επισκέπτες δεν έχουν τη δυνατότητα να προσκαλέσουν άλλους χρήστες. Παρακαλώ εγγραφείτε πρώτα.",
- "Hide panel": "Κρύψε τη καρτέλα",
+ "Guest users can't invite users. Please register to invite.": "Οι επισκέπτες δεν έχουν τη δυνατότητα να προσκαλέσουν άλλους χρήστες. Παρακαλούμε εγγραφείτε πρώτα.",
+ "Hide panel": "Απόκρυψη καρτέλας",
"I understand the risks and wish to continue": "Κατανοώ του κινδύνους και επιθυμώ να συνεχίσω",
- "Invite to this room": "Προσκάλεσε",
+ "Invite to this room": "Πρόσκληση σε αυτό το δωμάτιο",
"Keywords": "Λέξεις κλειδιά",
- "Leave": "Αποχώρησε",
- "Low Priority": "Χαμηλής Προτεραιότητας",
+ "Leave": "Αποχώρηση",
+ "Low Priority": "Χαμηλή προτεραιότητα",
"Members": "Μέλη",
"Messages containing keywords": "Μηνύματα που περιέχουν λέξεις κλειδιά",
"Messages containing my user name": "Μηνύματα που περιέχουν το ψευδώνυμο μου",
@@ -62,49 +62,49 @@
"Noisy": "Δυνατά",
"Notifications": "Ειδοποιήσεις",
"Notifications on the following keywords follow rules which can’t be displayed here:": "Οι ειδοποιήσεις για τις επόμενες λέξεις κλειδία ακολουθούν κανόνες που δεν είναι δυνατόν να εμφανιστούν εδώ:",
- "Notify for all other messages/rooms": "Στείλε ειδοποιήσεις για όλα τα υπόλοιπα μηνύματα/δωμάτια",
- "Notify me for anything else": "Ειδοποίησέ με για οτιδήποτε άλλο",
+ "Notify for all other messages/rooms": "Ειδοποίηση για όλα τα υπόλοιπα μηνύματα/δωμάτια",
+ "Notify me for anything else": "Ειδοποίηση για οτιδήποτε άλλο",
"Operation failed": "Η λειτουργία απέτυχε",
- "Please describe the bug. What did you do? What did you expect to happen? What actually happened?": "Παρακαλώ περιγράψτε το σφάλμα. Τι κάνατε; Τι περιμένατε να συμβεί; Τι έγινε τελικά;",
- "Please Register": "Παρακαλώ εγγραφείτε",
- "Redact": "Ανακάλεσε",
- "Reject": "Απέρριψε",
- "Remove": "Αφαίρεσε",
- "Remove from Directory": "Αφαίρεση από το Ευρετήριο",
- "Resend": "Ξαναστείλε",
+ "Please describe the bug. What did you do? What did you expect to happen? What actually happened?": "Παρακαλούμε περιγράψτε το σφάλμα. Τι κάνατε; Τι περιμένατε να συμβεί; Τι έγινε τελικά;",
+ "Please Register": "Παρακαλούμε εγγραφείτε",
+ "Redact": "Ανάκληση",
+ "Reject": "Απόρριψη",
+ "Remove": "Αφαίρεση",
+ "Remove from Directory": "Αφαίρεση από το ευρετήριο",
+ "Resend": "Αποστολή ξανά",
"Riot Desktop on %(platformName)s": "Riot Desktop σε %(platformName)s",
"Room directory": "Ευρετήριο",
"Room not found": "Το δωμάτιο δεν βρέθηκε",
"Search": "Αναζήτηση",
"Search…": "Αναζήτηση…",
- "Send": "Στείλε",
+ "Send": "Αποστολή",
"Settings": "Ρυθμίσεις",
- "Start chat": "Άρχισε μια συνομιλία",
+ "Start chat": "Έναρξη συνομιλίας",
"This Room": "Στο δωμάτιο",
"Unavailable": "Μη διαθέσιμο",
"Unknown device": "Άγνωστη συσκευή",
"Update": "Ενημέρωση",
"Enable desktop notifications": "Ενεργοποίηση ειδοποιήσεων στην επιφάνεια εργασίας",
"Error saving email notification preferences": "Σφάλμα κατά την αποθήκευση των προτιμήσεων",
- "Failed to send report: ": "Η αποστολή της αναφοράς απέτυχε: ",
+ "Failed to send report: ": "Απέτυχε η αποστολή της αναφοράς: ",
"Loading bug report module": "Φόρτωση μονάδας αναφοράς σφαλμάτων",
- "Mentions only": "Αναφορές μόνο",
+ "Mentions only": "Μόνο αναφορές",
"Messages containing my display name": "Μηνύματα που περιέχουν το όνομα μου",
"Off": "Ανενεργό",
"On": "Ενεργό",
"Permalink": "Μόνιμος σύνδεσμος",
- "Please install Chrome or Firefox for the best experience.": "Παρακαλώ εγκαταστήστε έναν από τους φυλλομετρητές Chrome ή Firefox για την καλύτερη δυνατή εμπειρία.",
- "Report a bug": "Ανεφέρε κάποιο πρόβλημα",
+ "Please install Chrome or Firefox for the best experience.": "Παρακαλούμε εγκαταστήστε έναν από τους φυλλομετρητές Chrome ή Firefox για την καλύτερη δυνατή εμπειρία.",
+ "Report a bug": "Αναφορά σφάλματος",
"Riot does not know how to join a room on this network": "To Riot δεν γνωρίζει πως να συνδεθεί σε δωμάτια που ανήκουν σ' αυτό το δίκτυο",
- "Search for a room": "Αναζήτησε κάποιο δωμάτιο",
+ "Search for a room": "Αναζήτηση δωματίου",
"Sorry, your browser is not able to run Riot.": "Λυπούμαστε, αλλά ο φυλλομετρητής σας δεν υποστηρίζεται από το Riot.",
"There are advanced notifications which are not shown here": "Υπάρχουν προχωρημένες ειδοποιήσεις οι οποίες δεν εμφανίζονται εδώ",
"This room is inaccessible to guests. You may be able to join if you register.": "Το δωμάτιο δεν είναι προσβάσιμο σε επισκέπτες. Πιθανόν να μπορέσετε να συνδεθείτε εάν εγγραφείτε.",
"Unable to join network": "Δεν είναι δυνατή η σύνδεση στο δίκτυο",
"unknown error code": "άγνωστος κωδικός σφάλματος",
- "Unnamed room": "Δωμάτιο χωρίς όνομα",
- "Uploaded on %(date)s by %(user)s": "Ανέβηκε την %(date)s από %(user)s",
- "Uploading report": "Ανέβασμα αναφοράς",
+ "Unnamed room": "Ανώνυμο δωμάτιο",
+ "Uploaded on %(date)s by %(user)s": "Απεστάλη στις %(date)s από %(user)s",
+ "Uploading report": "Αποστολή αναφοράς",
"What's New": "Τι νέο υπάρχει",
"What's new?": "Τι νέο υπάρχει;",
"When I'm invited to a room": "Όταν με προσκαλούν σ' ένα δωμάτιο",
@@ -121,39 +121,76 @@
"Saturday": "Σάββατο",
"Today": "Σήμερα",
"Yesterday": "Χθές",
- "OK": "ΟΚ",
+ "OK": "Εντάξει",
"You need to be using HTTPS to place a screen-sharing call.": "Απαιτείται η χρήση HTTPS για το διαμοιρασμό της επιφάνειας εργασίας μέσω κλήσης.",
"Welcome page": "Αρχική σελίδα",
- "Forget": "Διαγραφή",
+ "Forget": "Παράλειψη",
"Riot is not supported on mobile web. Install the app?": "Το Riot δεν υποστηρίζεται από φυλλομετρητές κινητών. Θέλετε να εγκαταστήσετε την εφαρμογή;",
"Unhide Preview": "Προεπισκόπηση",
"Waiting for response from server": "Αναμονή απάντησης από τον διακομιστή",
- "You are Rioting as a guest. Register or sign in to access more rooms and features!": "Χρησιμοποιείς το Riot ως επισκέπτης. Κάνε εγγραφή ή συνδέσου για να αποκτήσεις πρόσβαση σε περισσότερα δωμάτια και επιλογές!",
+ "You are Rioting as a guest. Register or sign in to access more rooms and features!": "Χρησιμοποιείτε το Riot ως επισκέπτης. Εγγραφείτε ή συνδεθείτε για να αποκτήσετε πρόσβαση σε περισσότερα δωμάτια και χαρακτηριστικά!",
"Collecting logs": "Συγκέντρωση πληροφοριών",
"Enable them now": "Ενεργοποίηση",
"Failed to forget room %(errCode)s": "Δεν ήταν δυνατή η διαγραφή του δωματίου (%(errCode)s)",
"Failed to update keywords": "Οι λέξεις κλειδιά δεν ενημερώθηκαν",
"Failed to get protocol list from Home Server": "Δεν ήταν δυνατή η εύρεση των διαθέσιμων πρωτοκόλλων από το διακομιστή",
- "Failed to remove tag %(tagName)s from room": "Δεν ήταν δυνατή η διαγραφή του tag %(tagName)s από το δωμάτιο",
+ "Failed to remove tag %(tagName)s from room": "Δεν ήταν δυνατή η διαγραφή της ετικέτας %(tagName)s από το δωμάτιο",
"Notification targets": "Στόχοι ειδοποιήσεων",
- "Please describe the bug and/or send logs.": "Παρακαλώ περιγράψτε το πρόβλημα και/ή στείλτε πληροφορίες σχετικά με την εφαρμογή.",
+ "Please describe the bug and/or send logs.": "Παρακαλούμε περιγράψτε το σφάλμα και/ή στείλτε πληροφορίες σχετικά με την εφαρμογή.",
"Remove %(name)s from the directory?": "Αφαίρεση του %(name)s από το ευρετήριο;",
"remove %(name)s from the directory.": "αφαίρεση του %(name)s από το ευρετήριο.",
- "Send logs": "Στείλε πληροφορίες",
+ "Send logs": "Αποστολή πληροφοριών",
"Source URL": "Πηγαίο URL",
"The server may be unavailable or overloaded": "Ο διακομιστής είναι μη διαθέσιμος ή υπερφορτωμένος",
" to room": " στο δωμάτιο",
"Unable to fetch notification target list": "Δεν ήταν δυνατή η εύρεση στόχων για τις ειδοποιήσεις",
"Unable to look up room ID from server": "Δεν είναι δυνατή η εύρεση του ID για το δωμάτιο",
- "View Decrypted Source": "Δες τον αποκρυπτογραφημένο κώδικα",
- "View Source": "Δες τον κώδικα",
- "You might have configured them in a client other than Riot. You cannot tune them in Riot but they still apply": "Ισως έχεις κάνει τις ρυθμίσεις σε άλλη εφαρμογή εκτός του Riot. Δεν μπορείς να τις αλλάξεις μέσω του Riot αλλά ισχύουν κανονικά",
+ "View Decrypted Source": "Προβολή του αποκρυπτογραφημένου κώδικα",
+ "View Source": "Προβολή κώδικα",
+ "You might have configured them in a client other than Riot. You cannot tune them in Riot but they still apply": "Ισως να έχετε κάνει τις ρυθμίσεις σε άλλη εφαρμογή εκτός του Riot. Δεν μπορείτε να τις αλλάξετε μέσω του Riot αλλά ισχύουν κανονικά",
"Couldn't find a matching Matrix room": "Δεν βρέθηκε κάποιο δωμάτιο",
- "Drop here %(toAction)s": "Σύρε εδώ %(toAction)s",
+ "Drop here %(toAction)s": "Απόθεση εδώ %(toAction)s",
"Failed to": "Αποτυχία να",
"Failed to get public room list": "Δεν ήταν δυνατή η λήψη της λίστας με τα δημόσια δωμάτια",
"Failed to set direct chat tag": "Δεν ήταν δυνατός ο χαρακτηρισμός της συνομιλίας ως 1-προς-1",
"powered by Matrix": "βασισμένο στο πρωτόκολλο Matrix",
- "Quote": "Αναφορά",
- "Fetching third party location failed": "Η λήψη τοποθεσίας απέτυχε"
+ "Quote": "Παράθεση",
+ "Fetching third party location failed": "Η λήψη τοποθεσίας απέτυχε",
+ " (HTTP status %(httpStatus))": "(Κατάσταση HTTP %(httpStatus))",
+ "Login": "Σύνδεση",
+ "Riot uses many advanced browser features, some of which are not available or experimental in your current browser.": "Το Riot χρησιμοποιεί αρκετά προχωρημένα χαρακτηριστικά των περιηγητών Ιστού, ορισμένα από τα οποία δεν είναι διαθέσιμα ή είναι σε πειραματικό στάδιο στον περιηγητή σας.",
+ "The Home Server may be too old to support third party networks": "Ο διακομιστής μπορεί να είναι αρκετά παλιός για να υποστηρίζει δίκτυα τρίτων",
+ "Welcome to Riot.im": "Καλώς ήλθατε στο Riot.im",
+ "Decentralised, encrypted chat & collaboration powered by [matrix]": "Αποκεντρωμένη, κρυπτογραφημένη συνομιλία & συνεργασία με τη βοήθεια του [matrix]",
+ "Search the room directory": "Αναζήτηση του ευρετηρίου δωματίων",
+ "Chat with Riot Bot": "Συνομιλία με το Riot Bot",
+ "Get started with some tips from Riot Bot!": "Ξεκινήστε με μερικές συμβουλές από το Riot Bot!",
+ "General discussion about Matrix and Riot": "Γενική συζήτηση σχετικά με Matrix και Riot",
+ "Discussion of all things Matrix!": "Συζήτηση για όλα τα πράγματα του Matrix!",
+ "Riot/Web & Desktop chat": "Συνομιλία για Riot/Web & Desktop",
+ "Riot/iOS & matrix-ios-sdk chat": "Συνομιλία για Riot/iOS & matrix-ios-sdk",
+ "Riot/Android & matrix-android-sdk chat": "Συνομιλία για Riot/Android & matrix-android-sdk",
+ "Matrix technical discussions": "Τεχνικές συζητήσεις σχετικά με το Matrix",
+ "Running Matrix services": "Εκτέλεση υπηρεσιών Matrix",
+ "Community-run support for Synapse": "Κοινοτική υποστήριξη για το Synapse",
+ "Admin support for Dendrite": "Υποστήριξη διαχειριστή για το Dendrite",
+ "Announcements about Synapse releases": "Ανακοινώσεις σχετικά με τις εκδόσεις του Synapse",
+ "Support for those using and running matrix-appservice-irc": "Υποστήριξη για τους χρήστες που χρησιμοποιούν το matrix-appservice-irc",
+ "Building services on Matrix": "Ανάπτυξη υπηρεσιών στο Matrix",
+ "Support for those using the Matrix spec": "Υποστήριξη για τους χρήστες που χρησιμοποιούν το Matrix spec",
+ "Design and implementation of E2E in Matrix": "Σχεδιασμός και υλοποίηση του E2E στο Matrix",
+ "Implementing VR services with Matrix": "Υλοποίηση υπηρεσίων VR με το Matrix",
+ "Implementing VoIP services with Matrix": "Υλοποίηση υπηρεσίων VoIP με το Matrix",
+ "Discussion of the Identity Service API": "Συζήτηση σχετικά με το Identity Service API",
+ "Contributing code to Matrix and Riot": "Συνεισφορά κώδικα στο Matrix και Riot",
+ "Dev chat for the Riot/Web dev team": "Συνομιλία για την ομάδα ανάπτυξης του Riot/Web",
+ "Dev chat for the Dendrite dev team": "Συνομιλία για την ομάδα ανάπτυξης του Dendrite",
+ "Co-ordination for Riot/Web translators": "Συντονισμός για μεταφραστές του Riot/Web",
+ "Lots of rooms already exist in Matrix, linked to existing networks (Slack, IRC, Gitter etc) or independent. Check out the directory!": "Αρκετά δωμάτια υπάρχουν ήδη στο Matrix, συνδεδεμένα σε υπάρχοντα δίκτυα (Slack, IRC, Gitter κ.λπ) ή αυτόνομα. Ρίξτε μια ματιά στο ευρετήριο!",
+ "Failed to change password. Is your password correct?": "Δεν ήταν δυνατή η αλλαγή του κωδικού πρόσβασης. Είναι σωστός ο κωδικός πρόσβασης;",
+ "You have successfully set a password!": "Ο κωδικός πρόσβασης ορίστηκε επιτυχώς!",
+ "You can now return to your account after signing out, and sign in on other devices.": "Μπορείτε να επιστρέψετε στον λογαριασμό σας αφού αποσυνδεθείτε και συνδεθείτε από άλλες συσκευές.",
+ "Continue": "Συνέχεια",
+ "Please set a password!": "Παρακαλούμε ορίστε έναν κωδικό πρόσβασης!",
+ "This will allow you to return to your account after signing out, and sign in on other devices.": "Αυτό θα σας επιτρέψει να επιστρέψετε στον λογαριασμό σας αφού αποσυνδεθείτε και συνδεθείτε από άλλες συσκευές"
}
From bd583f86b0ccdc9c3fa4c954aac8228bf2723d78 Mon Sep 17 00:00:00 2001
From: Tom Tryfonidis
Date: Sun, 11 Jun 2017 16:43:08 +0000
Subject: [PATCH 033/213] Translated using Weblate (Greek)
Currently translated at 100.0% (198 of 198 strings)
Translation: Riot Web/riot-web
Translate-URL: https://translate.riot.im/projects/riot-web/riot-web/el/
---
src/i18n/strings/el.json | 8 ++++++--
1 file changed, 6 insertions(+), 2 deletions(-)
diff --git a/src/i18n/strings/el.json b/src/i18n/strings/el.json
index 22d0775ec8..542d3f22af 100644
--- a/src/i18n/strings/el.json
+++ b/src/i18n/strings/el.json
@@ -125,7 +125,7 @@
"You need to be using HTTPS to place a screen-sharing call.": "Απαιτείται η χρήση HTTPS για το διαμοιρασμό της επιφάνειας εργασίας μέσω κλήσης.",
"Welcome page": "Αρχική σελίδα",
"Forget": "Παράλειψη",
- "Riot is not supported on mobile web. Install the app?": "Το Riot δεν υποστηρίζεται από φυλλομετρητές κινητών. Θέλετε να εγκαταστήσετε την εφαρμογή;",
+ "Riot is not supported on mobile web. Install the app?": "Το Riot δεν υποστηρίζεται από περιηγητές κινητών. Θέλετε να εγκαταστήσετε την εφαρμογή;",
"Unhide Preview": "Προεπισκόπηση",
"Waiting for response from server": "Αναμονή απάντησης από τον διακομιστή",
"You are Rioting as a guest. Register or sign in to access more rooms and features!": "Χρησιμοποιείτε το Riot ως επισκέπτης. Εγγραφείτε ή συνδεθείτε για να αποκτήσετε πρόσβαση σε περισσότερα δωμάτια και χαρακτηριστικά!",
@@ -192,5 +192,9 @@
"You can now return to your account after signing out, and sign in on other devices.": "Μπορείτε να επιστρέψετε στον λογαριασμό σας αφού αποσυνδεθείτε και συνδεθείτε από άλλες συσκευές.",
"Continue": "Συνέχεια",
"Please set a password!": "Παρακαλούμε ορίστε έναν κωδικό πρόσβασης!",
- "This will allow you to return to your account after signing out, and sign in on other devices.": "Αυτό θα σας επιτρέψει να επιστρέψετε στον λογαριασμό σας αφού αποσυνδεθείτε και συνδεθείτε από άλλες συσκευές"
+ "This will allow you to return to your account after signing out, and sign in on other devices.": "Αυτό θα σας επιτρέψει να επιστρέψετε στον λογαριασμό σας αφού αποσυνδεθείτε και συνδεθείτε από άλλες συσκευές.",
+ "In order to diagnose problems, logs from this client will be sent with this bug report. If you would prefer to only send the text above, please untick:": "Προκειμένου να διαγνωστούν προβλήματα, τα αρχεία καταγραφής από αυτόν τον πελάτη θα σταλούν με αυτήν την αναφορά σφάλματος. Αν προτιμάτε να στείλετε μόνο το παραπάνω κείμενο, απενεργοποιήστε:",
+ "With your current browser, the look and feel of the application may be completely incorrect, and some or all features may not function. If you want to try it anyway you can continue, but you are on your own in terms of any issues you may encounter!": "Με τον τρέχον περιηγητή, η εμφάνιση και η αίσθηση της εφαρμογής ενδέχεται να είναι εντελώς εσφαλμένη και ορισμένες ή όλες οι λειτουργίες ενδέχεται να μην λειτουργούν. Εάν θέλετε να το δοκιμάσετε ούτως ή άλλως μπορείτε να συνεχίσετε, αλλά είστε μόνοι σας σε ό, τι αφορά τα προβλήματα που μπορεί να αντιμετωπίσετε!",
+ "Failed to set Direct Message status of room": "Δεν ήταν δυνατός ο ορισμός της κατάστασης Direct Message του δωματίου",
+ "Support for those using, running and writing other bridges": "Υποστήριξη ηια τους χρήστες που χρησιμοποιούν ή αναπτύσσουν εφαρμογές ενσωμάτωσης για το Matrix"
}
From eabfce8aa9c721bf7af043b11f61cf15e6de626f Mon Sep 17 00:00:00 2001
From: abugandar
Date: Sun, 11 Jun 2017 10:36:28 +0000
Subject: [PATCH 034/213] Translated using Weblate (Arabic)
Currently translated at 2.0% (4 of 198 strings)
Translation: Riot Web/riot-web
Translate-URL: https://translate.riot.im/projects/riot-web/riot-web/ar/
---
src/i18n/strings/ar.json | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
diff --git a/src/i18n/strings/ar.json b/src/i18n/strings/ar.json
index 5dd1a2cd42..075c0b5957 100644
--- a/src/i18n/strings/ar.json
+++ b/src/i18n/strings/ar.json
@@ -1,3 +1,6 @@
{
- "All messages": "كل الرسائل"
+ "All messages": "كل الرسائل",
+ "Continue": "استمر",
+ "Please set a password!": "يرجى تعيين كلمة مرور!",
+ "This will allow you to return to your account after signing out, and sign in on other devices.": "سيسمح لك هذا بالعودة إلى حسابك بعد الخروج، وتسجيل الدخول على الأجهزة الأخرى."
}
From 6d72e0633bf8d8687e0026b415c2f1424bd5fa13 Mon Sep 17 00:00:00 2001
From: Radium
Date: Sun, 11 Jun 2017 03:26:19 +0000
Subject: [PATCH 035/213] Translated using Weblate (Chinese (Simplified))
Currently translated at 2.5% (5 of 198 strings)
Translation: Riot Web/riot-web
Translate-URL: https://translate.riot.im/projects/riot-web/riot-web/zh_Hans/
---
src/i18n/strings/zh_Hans.json | 6 +++++-
1 file changed, 5 insertions(+), 1 deletion(-)
diff --git a/src/i18n/strings/zh_Hans.json b/src/i18n/strings/zh_Hans.json
index a9c61ad9b5..f76aa160dd 100644
--- a/src/i18n/strings/zh_Hans.json
+++ b/src/i18n/strings/zh_Hans.json
@@ -1,3 +1,7 @@
{
- "Close": "关闭"
+ "Close": "关闭",
+ "Mute": "静音",
+ "Notifications": "通知",
+ "OK": "确定",
+ "Operation failed": "操作失败"
}
From 6d5e980c6c2c096b801c83d426996a68a170e8c5 Mon Sep 17 00:00:00 2001
From: Tom Tryfonidis
Date: Sun, 11 Jun 2017 16:45:59 +0000
Subject: [PATCH 036/213] Translated using Weblate (Greek)
Currently translated at 100.0% (198 of 198 strings)
Translation: Riot Web/riot-web
Translate-URL: https://translate.riot.im/projects/riot-web/riot-web/el/
---
src/i18n/strings/el.json | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/src/i18n/strings/el.json b/src/i18n/strings/el.json
index 542d3f22af..cbb2a819cf 100644
--- a/src/i18n/strings/el.json
+++ b/src/i18n/strings/el.json
@@ -93,11 +93,11 @@
"Off": "Ανενεργό",
"On": "Ενεργό",
"Permalink": "Μόνιμος σύνδεσμος",
- "Please install Chrome or Firefox for the best experience.": "Παρακαλούμε εγκαταστήστε έναν από τους φυλλομετρητές Chrome ή Firefox για την καλύτερη δυνατή εμπειρία.",
+ "Please install Chrome or Firefox for the best experience.": "Παρακαλούμε εγκαταστήστε έναν από τους περιηγητές Chrome ή Firefox για την καλύτερη δυνατή εμπειρία.",
"Report a bug": "Αναφορά σφάλματος",
"Riot does not know how to join a room on this network": "To Riot δεν γνωρίζει πως να συνδεθεί σε δωμάτια που ανήκουν σ' αυτό το δίκτυο",
"Search for a room": "Αναζήτηση δωματίου",
- "Sorry, your browser is not able to run Riot.": "Λυπούμαστε, αλλά ο φυλλομετρητής σας δεν υποστηρίζεται από το Riot.",
+ "Sorry, your browser is not able to run Riot.": "Λυπούμαστε, αλλά ο περιηγητές σας δεν υποστηρίζεται από το Riot.",
"There are advanced notifications which are not shown here": "Υπάρχουν προχωρημένες ειδοποιήσεις οι οποίες δεν εμφανίζονται εδώ",
"This room is inaccessible to guests. You may be able to join if you register.": "Το δωμάτιο δεν είναι προσβάσιμο σε επισκέπτες. Πιθανόν να μπορέσετε να συνδεθείτε εάν εγγραφείτε.",
"Unable to join network": "Δεν είναι δυνατή η σύνδεση στο δίκτυο",
From a520f0bfedade23ecd532c2293d677bb790d1170 Mon Sep 17 00:00:00 2001
From: Michael Telatynski <7t3chguy@gmail.com>
Date: Sun, 11 Jun 2017 19:19:17 +0100
Subject: [PATCH 037/213] move all logic, make bar more generic pass through
actual errors and tidy needs testing
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
---
electron_app/src/updater.js | 22 +++++-
.../views/globals/UpdateCheckBar.js | 74 ++++++-------------
src/i18n/strings/en_EN.json | 5 +-
src/vector/platform/ElectronPlatform.js | 70 ++++++++++--------
src/vector/platform/VectorBasePlatform.js | 29 +++++++-
src/vector/platform/WebPlatform.js | 34 +++++++--
6 files changed, 138 insertions(+), 96 deletions(-)
diff --git a/electron_app/src/updater.js b/electron_app/src/updater.js
index e585dc977d..106e3d2f23 100644
--- a/electron_app/src/updater.js
+++ b/electron_app/src/updater.js
@@ -67,4 +67,24 @@ module.exports.start = function startAutoUpdate(updateBaseUrl) {
}
ipcMain.on('install_update', installUpdate);
-ipcMain.on('checkForUpdates', pollForUpdates);
+
+let ipcChannel;
+ipcMain.on('check_updates', function(event) {
+ ipcChannel = event.sender;
+ pollForUpdates();
+ // event.sender.send('check_updates') // true/false/error = available(downloading)/notAvailable/error
+});
+
+function ipcChannelSendUpdateStatus(status) {
+ if (ipcChannel) {
+ ipcChannel.send('check_updates', status);
+ }
+}
+
+autoUpdater.on('update-available', function() {
+ ipcChannelSendUpdateStatus(true);
+}).on('update-not-available', function() {
+ ipcChannelSendUpdateStatus(false);
+}).on('error', function(error) {
+ ipcChannelSendUpdateStatus(error.message);
+});
diff --git a/src/components/views/globals/UpdateCheckBar.js b/src/components/views/globals/UpdateCheckBar.js
index 4949c4426d..557698c711 100644
--- a/src/components/views/globals/UpdateCheckBar.js
+++ b/src/components/views/globals/UpdateCheckBar.js
@@ -17,76 +17,50 @@ limitations under the License.
'use strict';
import React from 'react';
-import dis from 'matrix-react-sdk/lib/dispatcher';
import { _t } from 'matrix-react-sdk/lib/languageHandler';
import PlatformPeg from 'matrix-react-sdk/lib/PlatformPeg';
-import {updateStateEnum} from '../../../vector/platform/VectorBasePlatform';
+import {updateCheckStatusEnum} from '../../../vector/platform/VectorBasePlatform';
import AccessibleButton from 'matrix-react-sdk/lib/components/views/elements/AccessibleButton';
+const statusText = {
+ CHECKING: 'Checking for an update...',
+ ERROR: 'Error encountered (%(errorDetail)s).',
+ NOTAVAILABLE: 'No update available.',
+ DOWNLOADING: 'Downloading update...',
+};
+
+const doneStatuses = [
+ updateCheckStatusEnum.ERROR,
+ updateCheckStatusEnum.NOTAVAILABLE,
+];
+
export default React.createClass({
-
- getInitialState: function() {
- return {
- message: _t('Checking for an update...'),
- done: false,
- };
- },
-
- componentWillMount: function() {
- PlatformPeg.get().checkForUpdate().done((state) => {
- if (this._unmounted) return;
-
- console.log('checkForUpdate done, ', state);
-
- // We will be replaced by NewVersionBar
- if (state === updateStateEnum.READY) return;
-
- let done = true;
- let message;
- switch (state) {
- case updateStateEnum.ERROR:
- message = _t('Error encountered when checking for an update.');
- break;
- case updateStateEnum.TIMEOUT:
- message = _t('Update Check timed out, try again later.');
- break;
- case updateStateEnum.NOTAVAILABLE:
- message = _t('No update found.');
- break;
- case updateStateEnum.DOWNLOADING:
- message = _t('Update is being downloaded.');
- done = false;
- break;
- }
-
- this.setState({message, done});
- });
- },
-
- componentWillUnmount: function() {
- this._unmounted = true;
+ propTypes: {
+ status: React.PropTypes.oneOf(Object.values(updateCheckStatusEnum)).isRequired,
+ // Currently for error detail but will be usable for download progress
+ // once that is a thing that squirrel passes through electron.
+ detail: React.PropTypes.string,
},
hideToolbar: function() {
- dis.dispatch({
- action: 'check_updates',
- value: false,
- });
+ PlatformPeg.get().stopUpdateCheck();
},
render: function() {
+ const message = _t(statusText[this.props.status], { errorDetail: this.props.detail });
+
let image;
- if (this.state.done) {
+ if (doneStatuses.includes(this.props.status)) {
image =
;
} else {
- image =
;
+ image =
;
}
return (
{image}
- {this.state.message}
+ {message}
diff --git a/src/i18n/strings/en_EN.json b/src/i18n/strings/en_EN.json
index 2bce407061..1755fd620b 100644
--- a/src/i18n/strings/en_EN.json
+++ b/src/i18n/strings/en_EN.json
@@ -159,8 +159,9 @@
"Yesterday": "Yesterday",
"OK": "OK",
"Checking for an update...": "Checking for an update...",
- "Error encountered when checking for an update.": "Error encountered when checking for an update.",
- "Update Check timed out, try again later.": "Update Check timed out, try again later.",
+ "Error encountered (%(errorDetail)s).": "Error encountered (%(errorDetail)s).",
+ "No update available.": "No update available.",
+ "Downloading update...": "Downloading update...",
"No update found.": "No update found.",
"Update is being downloaded.": "Update is being downloaded.",
"You need to be using HTTPS to place a screen-sharing call.": "You need to be using HTTPS to place a screen-sharing call.",
diff --git a/src/vector/platform/ElectronPlatform.js b/src/vector/platform/ElectronPlatform.js
index 519cadc09d..7a1bf58292 100644
--- a/src/vector/platform/ElectronPlatform.js
+++ b/src/vector/platform/ElectronPlatform.js
@@ -17,11 +17,11 @@ See the License for the specific language governing permissions and
limitations under the License.
*/
-import VectorBasePlatform, {updateStateEnum} from './VectorBasePlatform';
+import VectorBasePlatform, {updateCheckStatusEnum} from './VectorBasePlatform';
import dis from 'matrix-react-sdk/lib/dispatcher';
import { _t } from 'matrix-react-sdk/lib/languageHandler';
import q from 'q';
-import electron, {remote, ipcRenderer} from 'electron';
+import {remote, ipcRenderer} from 'electron';
remote.autoUpdater.on('update-downloaded', onUpdateDownloaded);
@@ -62,11 +62,42 @@ function _onAction(payload: Object) {
}
}
+function getUpdateCheckStatus(status) {
+ if (status === true) {
+ return { status: updateCheckStatusEnum.DOWNLOADING };
+ } else if (status === false) {
+ return { status: updateCheckStatusEnum.NOTAVAILABLE };
+ } else {
+ return {
+ status: updateCheckStatusEnum.ERROR,
+ detail: status,
+ };
+ }
+}
+
export default class ElectronPlatform extends VectorBasePlatform {
constructor() {
super();
dis.register(_onAction);
this.updatable = Boolean(remote.autoUpdater.getFeedURL());
+
+ /*
+ IPC Call `check_updates` returns:
+ true if there is an update available
+ false if there is not
+ or the error if one is encountered
+ */
+ ipcRenderer.on('check_updates', (event, status) => {
+ if (!this.showUpdateCheck) return;
+ dis.dispatch({
+ action: 'check_updates',
+ value: getUpdateCheckStatus(status),
+ });
+ this.showUpdateCheck = false;
+ });
+
+ this.startUpdateCheck = this.startUpdateCheck.bind(this);
+ this.stopUpdateCheck = this.stopUpdateCheck.bind(this);
}
getHumanReadableName(): string {
@@ -138,43 +169,18 @@ export default class ElectronPlatform extends VectorBasePlatform {
return q(remote.app.getVersion());
}
- checkForUpdate() { // manual update check for this platform
- const deferred = q.defer();
+ startUpdateCheck() {
+ if (this.showUpdateCheck) return;
+ super.startUpdateCheck();
- const _onUpdateAvailable = function() {
- remote.autoUpdater.removeListener('update-not-available', _onUpdateNotAvailable);
- remote.autoUpdater.removeListener('error', _onError);
- deferred.resolve(updateStateEnum.DOWNLOADING);
- }
- const _onUpdateNotAvailable = function() {
- remote.autoUpdater.removeListener('update-available', _onUpdateAvailable);
- remote.autoUpdater.removeListener('error', _onError);
- deferred.resolve(updateStateEnum.NOTAVAILABLE);
- }
- const _onError = function() {
- remote.autoUpdater.removeListener('update-not-available', _onUpdateNotAvailable);
- remote.autoUpdater.removeListener('update-available', _onUpdateAvailable);
- deferred.resolve(updateStateEnum.ERROR);
- }
-
- remote.autoUpdater.once('update-available', _onUpdateAvailable);
- remote.autoUpdater.once('update-not-available', _onUpdateNotAvailable);
- remote.autoUpdater.once('error', _onError);
-
- remote.ipcRenderer.send('checkForUpdates');
- return deferred.promise.timeout(10000).catch(() => {
- remote.autoUpdater.removeListener('update-not-available', _onUpdateNotAvailable);
- remote.autoUpdater.removeListener('update-available', _onUpdateAvailable);
- remote.autoUpdater.removeListener('error', _onError);
- return updateStateEnum.TIMEOUT;
- });
+ ipcRenderer.send('check_updates');
}
installUpdate() {
// IPC to the main process to install the update, since quitAndInstall
// doesn't fire the before-quit event so the main process needs to know
// it should exit.
- electron.ipcRenderer.send('install_update');
+ ipcRenderer.send('install_update');
}
getDefaultDeviceDisplayName(): string {
diff --git a/src/vector/platform/VectorBasePlatform.js b/src/vector/platform/VectorBasePlatform.js
index 074be91c83..0e84e5fcd5 100644
--- a/src/vector/platform/VectorBasePlatform.js
+++ b/src/vector/platform/VectorBasePlatform.js
@@ -19,12 +19,13 @@ limitations under the License.
import BasePlatform from 'matrix-react-sdk/lib/BasePlatform';
import { _t } from 'matrix-react-sdk/lib/languageHandler';
+import dis from 'matrix-react-sdk/lib/dispatcher';
import Favico from 'favico.js';
-export const updateStateEnum = {
+export const updateCheckStatusEnum = {
+ CHECKING: 'CHECKING',
ERROR: 'ERROR',
- TIMEOUT: 'TIMEOUT',
NOTAVAILABLE: 'NOTAVAILABLE',
DOWNLOADING: 'DOWNLOADING',
READY: 'READY',
@@ -42,8 +43,12 @@ export default class VectorBasePlatform extends BasePlatform {
// and we set the state each time, even if the value hasn't changed,
// so we'd need to fix that if enabling the animation.
this.favicon = new Favico({animation: 'none'});
+ this.showUpdateCheck = false;
this._updateFavicon();
this.updatable = true;
+
+ this.startUpdateCheck = this.startUpdateCheck.bind(this);
+ this.stopUpdateCheck = this.stopUpdateCheck.bind(this);
}
getHumanReadableName(): string {
@@ -96,14 +101,30 @@ export default class VectorBasePlatform extends BasePlatform {
return this.updatable;
}
+ startUpdateCheck() {
+ this.showUpdateCheck = true;
+ dis.dispatch({
+ action: 'check_updates',
+ value: { status: updateCheckStatusEnum.CHECKING },
+ });
+ }
+
+ stopUpdateCheck() {
+ this.showUpdateCheck = false;
+ dis.dispatch({
+ action: 'check_updates',
+ value: false,
+ })
+ }
+
/**
* Check for the availability of an update to the version of the
* app that's currently running.
* If an update is available, this function should dispatch the
* 'new_version' action.
- * @returns Promise
+ * @returns Promise
*/
- checkForUpdate(): Promise {
+ pollForUpdate(): Promise {
}
/**
diff --git a/src/vector/platform/WebPlatform.js b/src/vector/platform/WebPlatform.js
index dd6b91de91..02632ba049 100644
--- a/src/vector/platform/WebPlatform.js
+++ b/src/vector/platform/WebPlatform.js
@@ -17,7 +17,7 @@ See the License for the specific language governing permissions and
limitations under the License.
*/
-import VectorBasePlatform, {updateStateEnum} from './VectorBasePlatform';
+import VectorBasePlatform, {updateCheckStatusEnum} from './VectorBasePlatform';
import request from 'browser-request';
import dis from 'matrix-react-sdk/lib/dispatcher.js';
import { _t } from 'matrix-react-sdk/lib/languageHandler';
@@ -32,6 +32,9 @@ export default class WebPlatform extends VectorBasePlatform {
constructor() {
super();
this.runningVersion = null;
+
+ this.startUpdateCheck = this.startUpdateCheck.bind(this);
+ this.stopUpdateCheck = this.stopUpdateCheck.bind(this);
}
getHumanReadableName(): string {
@@ -135,11 +138,11 @@ export default class WebPlatform extends VectorBasePlatform {
}
startUpdater() {
- this.checkForUpdate();
- setInterval(this.checkForUpdate, POKE_RATE_MS);
+ this.pollForUpdate();
+ setInterval(this.pollForUpdate.bind(this), POKE_RATE_MS);
}
- checkForUpdate() {
+ pollForUpdate() {
return this._getVersion().then((ver) => {
if (this.runningVersion === null) {
this.runningVersion = ver;
@@ -149,12 +152,29 @@ export default class WebPlatform extends VectorBasePlatform {
currentVersion: this.runningVersion,
newVersion: ver,
});
- return updateStateEnum.READY;
+ // Return to skip a MatrixChat state update
+ return;
}
- return updateStateEnum.NOTAVAILABLE;
+ return { status: updateCheckStatusEnum.NOTAVAILABLE };
}, (err) => {
console.error("Failed to poll for update", err);
- return updateStateEnum.ERROR;
+ return {
+ status: updateCheckStatusEnum.ERROR,
+ detail: err.message || err.status ? err.status.toString() : 'Unknown Error',
+ };
+ });
+ }
+
+ startUpdateCheck() {
+ if (this.showUpdateCheck) return;
+ super.startUpdateCheck();
+ this.pollForUpdate().then((updateState) => {
+ if (!this.showUpdateCheck) return;
+ if (!updateState) return;
+ dis.dispatch({
+ action: 'check_updates',
+ value: updateState,
+ });
});
}
From 5d66a539b7f09d235a7c7fd002a99ba7478e59a0 Mon Sep 17 00:00:00 2001
From: Riot Translate Bot
Date: Sun, 11 Jun 2017 20:42:24 +0100
Subject: [PATCH 038/213] Update from Weblate. (#4272)
* Translated using Weblate (Russian)
Currently translated at 100.0% (198 of 198 strings)
Translation: Riot Web/riot-web
Translate-URL: https://translate.riot.im/projects/riot-web/riot-web/ru/
* Translated using Weblate (Hungarian)
Currently translated at 100.0% (198 of 198 strings)
Translation: Riot Web/riot-web
Translate-URL: https://translate.riot.im/projects/riot-web/riot-web/hu/
* Translated using Weblate (English (United States))
Currently translated at 85.3% (169 of 198 strings)
Translation: Riot Web/riot-web
Translate-URL: https://translate.riot.im/projects/riot-web/riot-web/en_US/
* Translated using Weblate (Russian)
Currently translated at 100.0% (198 of 198 strings)
Translation: Riot Web/riot-web
Translate-URL: https://translate.riot.im/projects/riot-web/riot-web/ru/
* Translated using Weblate (Hungarian)
Currently translated at 100.0% (198 of 198 strings)
Translation: Riot Web/riot-web
Translate-URL: https://translate.riot.im/projects/riot-web/riot-web/hu/
* Translated using Weblate (Thai)
Currently translated at 100.0% (198 of 198 strings)
Translation: Riot Web/riot-web
Translate-URL: https://translate.riot.im/projects/riot-web/riot-web/th/
* Added translation using Weblate (Chinese (Simplified))
* Added translation using Weblate (Arabic)
* Translated using Weblate (Thai)
Currently translated at 100.0% (198 of 198 strings)
Translation: Riot Web/riot-web
Translate-URL: https://translate.riot.im/projects/riot-web/riot-web/th/
* Translated using Weblate (Chinese (Traditional))
Currently translated at 81.8% (162 of 198 strings)
Translation: Riot Web/riot-web
Translate-URL: https://translate.riot.im/projects/riot-web/riot-web/zh_Hant/
* Translated using Weblate (Chinese (Simplified))
Currently translated at 0.5% (1 of 198 strings)
Translation: Riot Web/riot-web
Translate-URL: https://translate.riot.im/projects/riot-web/riot-web/zh_Hans/
* Translated using Weblate (Malayalam)
Currently translated at 2.0% (4 of 198 strings)
Translation: Riot Web/riot-web
Translate-URL: https://translate.riot.im/projects/riot-web/riot-web/ml/
* Translated using Weblate (Arabic)
Currently translated at 0.5% (1 of 198 strings)
Translation: Riot Web/riot-web
Translate-URL: https://translate.riot.im/projects/riot-web/riot-web/ar/
* Translated using Weblate (German)
Currently translated at 100.0% (198 of 198 strings)
Translation: Riot Web/riot-web
Translate-URL: https://translate.riot.im/projects/riot-web/riot-web/de/
* Translated using Weblate (Greek)
Currently translated at 97.9% (194 of 198 strings)
Translation: Riot Web/riot-web
Translate-URL: https://translate.riot.im/projects/riot-web/riot-web/el/
* Translated using Weblate (Greek)
Currently translated at 100.0% (198 of 198 strings)
Translation: Riot Web/riot-web
Translate-URL: https://translate.riot.im/projects/riot-web/riot-web/el/
* Translated using Weblate (Chinese (Simplified))
Currently translated at 2.5% (5 of 198 strings)
Translation: Riot Web/riot-web
Translate-URL: https://translate.riot.im/projects/riot-web/riot-web/zh_Hans/
* Translated using Weblate (Arabic)
Currently translated at 2.0% (4 of 198 strings)
Translation: Riot Web/riot-web
Translate-URL: https://translate.riot.im/projects/riot-web/riot-web/ar/
* Translated using Weblate (Greek)
Currently translated at 100.0% (198 of 198 strings)
Translation: Riot Web/riot-web
Translate-URL: https://translate.riot.im/projects/riot-web/riot-web/el/
---
src/i18n/strings/ar.json | 6 ++
src/i18n/strings/de_DE.json | 2 +-
src/i18n/strings/el.json | 141 ++++++++++++++++++++++------------
src/i18n/strings/en_US.json | 6 +-
src/i18n/strings/hu.json | 40 +++++++++-
src/i18n/strings/ml.json | 5 +-
src/i18n/strings/ru.json | 17 +++-
src/i18n/strings/th.json | 6 +-
src/i18n/strings/zh_Hans.json | 7 ++
src/i18n/strings/zh_Hant.json | 2 +-
10 files changed, 171 insertions(+), 61 deletions(-)
create mode 100644 src/i18n/strings/ar.json
create mode 100644 src/i18n/strings/zh_Hans.json
diff --git a/src/i18n/strings/ar.json b/src/i18n/strings/ar.json
new file mode 100644
index 0000000000..075c0b5957
--- /dev/null
+++ b/src/i18n/strings/ar.json
@@ -0,0 +1,6 @@
+{
+ "All messages": "كل الرسائل",
+ "Continue": "استمر",
+ "Please set a password!": "يرجى تعيين كلمة مرور!",
+ "This will allow you to return to your account after signing out, and sign in on other devices.": "سيسمح لك هذا بالعودة إلى حسابك بعد الخروج، وتسجيل الدخول على الأجهزة الأخرى."
+}
diff --git a/src/i18n/strings/de_DE.json b/src/i18n/strings/de_DE.json
index a289d08edc..dfd84ecbd8 100644
--- a/src/i18n/strings/de_DE.json
+++ b/src/i18n/strings/de_DE.json
@@ -145,7 +145,7 @@
"Collecting logs": "Protokolle werden abgerufen",
"Describe your problem here.": "Beschreibe dein Problem hier.",
"Failed to send report: ": "Senden des Reports fehlgeschlagen: ",
- "Forward Message": "Leite Nachricht weiter",
+ "Forward Message": "Nachricht weiterleiten",
"Hide panel": "Verberge Feld",
"In order to diagnose problems, logs from this client will be sent with this bug report. If you would prefer to only send the text above, please untick:": "Um Probleme zu diagnostizieren werden mit diesem Fehlerbericht Protokolle von diesem Client gesendet. Wenn du nur obigen text senden willst, deselektiere folgendes:",
"Loading bug report module": "Lade Fehlerbericht-Modul",
diff --git a/src/i18n/strings/el.json b/src/i18n/strings/el.json
index 2cb2973c0f..cbb2a819cf 100644
--- a/src/i18n/strings/el.json
+++ b/src/i18n/strings/el.json
@@ -7,34 +7,34 @@
"An error occurred whilst saving your email notification preferences.": "Ένα σφάλμα προέκυψε κατά την αποθήκευση των ρυθμίσεων σας.",
"Call invitation": "Πρόσκληση σε κλήση",
"Cancel": "Ακύρωση",
- "Cancel Sending": "Ακύρωση Αποστολής",
+ "Cancel Sending": "Ακύρωση αποστολής",
"Can't update user notification settings": "Δεν είναι δυνατή η ενημέρωση των ρυθμίσεων ειδοποίησης χρήστη",
"Changelog": "Αλλαγές",
"Close": "Κλείσιμο",
"Collapse panel": "Ελαχιστοποίηση καρτέλας",
- "Create new room": "Δημιούργησε ένα νέο δωμάτιο",
+ "Create new room": "Δημιουργία νέου δωματίου",
"Custom Server Options": "Προσαρμοσμένες ρυθμίσεις διακομιστή",
- "Describe your problem here.": "Περιέγραψε το πρόβλημα σου εδώ.",
- "Direct Chat": "Απευθείας Συνομιλία",
+ "Describe your problem here.": "Περιγράψτε το πρόβλημα σας εδώ.",
+ "Direct Chat": "Απευθείας συνομιλία",
"Directory": "Ευρετήριο",
- "Download this file": "Κατέβασε το αρχείο",
- "Enable audible notifications in web client": "Ενεργοποίηση των ηχητικών ειδοποιήσεων",
- "Enable email notifications": "Ενεργοποίηση ειδοποιήσεων μέσω email",
+ "Download this file": "Λήψη αρχείου",
+ "Enable audible notifications in web client": "Ενεργοποίηση ηχητικών ειδοποιήσεων",
+ "Enable email notifications": "Ενεργοποίηση ειδοποιήσεων μέσω μηνυμάτων ηλ. αλληλογραφίας",
"Enable notifications for this account": "Ενεργοποίηση ειδοποιήσεων γι' αυτό το λογαριασμό",
"Enter keywords separated by a comma:": "Πρόσθεσε λέξεις κλειδιά χωρισμένες με κόμμα:",
"Error": "Σφάλμα",
"#example": "#παράδειγμα",
"Expand panel": "Μεγιστοποίηση καρτέλας",
"Safari and Opera work too.": "Safari και Opera λειτουργούν επίσης.",
- "Add an email address above to configure email notifications": "Πρόσθεσε μια διεύθυνση email στο παραπάνω πεδίο, για να έχεις τη δυνατότητα να λαμβάνεις ειδοποιήσεις",
+ "Add an email address above to configure email notifications": "Προσθέστε μια διεύθυνση ηλεκτρονικής αλληλογραφίας στο παραπάνω πεδίο, για να έχετε τη δυνατότητα να λαμβάνετε ειδοποιήσεις",
"Collecting app version information": "Συγκέντρωση πληροφοριών σχετικά με την έκδοση της εφαρμογής",
- "customServer_text": "Μπορείτε να χρησιμοποιήσετε τις προσαρμοσμένες ρυθμίσεις για να εισέλθετε σε άλλους διακομιστές Matrix επιλέγοντας ένα διαφορετικό URL για το διακομιστή.
Αυτό σας επιτρέπει να χρησιμοποιήσετε την εφαρμογή Riot με έναν υπάρχοντα λογαριασμό σε διαφορετικό διακομιστή.
Επίσης μπορείτε να επιλέξετε ένα διαφορετικό διακομιστή ταυτότητας αλλά δεν θα έχετε τη δυνατότητα να προσκαλέσετε άλλους χρήστες ή να σας προσκαλέσουν, μέσω email.",
+ "customServer_text": "Μπορείτε να χρησιμοποιήσετε τις προσαρμοσμένες ρυθμίσεις για να εισέλθετε σε άλλους διακομιστές Matrix επιλέγοντας μια διαφορετική διεύθυνση για το διακομιστή.
Αυτό σας επιτρέπει να χρησιμοποιήσετε την εφαρμογή Riot με έναν υπάρχοντα λογαριασμό σε διαφορετικό διακομιστή.
Επίσης μπορείτε να επιλέξετε ένα διαφορετικό διακομιστή ταυτότητας αλλά δεν θα έχετε τη δυνατότητα να προσκαλέσετε άλλους χρήστες ή να σας προσκαλέσουν μέσω μηνυμάτων ηλεκτρονικής αλληλογραφίας.",
"%(appName)s via %(browserName)s on %(osName)s": "%(appName)s μέσω %(browserName)s σε %(osName)s",
"All messages (loud)": "Όλα τα μηνύματα (δυνατά)",
- "delete the alias.": "διέγραψε το ψευδώνυμο.",
+ "delete the alias.": "διαγραφή ψευδώνυμου.",
"Delete the room alias %(alias)s and remove %(name)s from the directory?": "Διαγραφή του ψευδώνυμου %(alias)s και αφαίρεση του %(name)s από το ευρετήριο;",
- "Dismiss": "Αγνόησε",
- "Failed to add tag %(tagName)s to room": "Δεν ήταν δυνατή η εισαγωγή του tag %(tagName)s στο δωμάτιο",
+ "Dismiss": "Απόρριψη",
+ "Failed to add tag %(tagName)s to room": "Δεν ήταν δυνατή η προσθήκη της ετικέτας %(tagName)s στο δωμάτιο",
"Failed to change settings": "Δεν ήταν δυνατή η αλλαγή των ρυθμίσεων",
"Failed to join the room": "Δεν ήταν δυνατή η σύνδεση στο δωμάτιο",
"Favourite": "Αγαπημένο",
@@ -43,13 +43,13 @@
"Forward Message": "Προώθηση",
" from room": " από το δωμάτιο",
"Guests can join": "Επισκέπτες μπορούν να συνδεθούν",
- "Guest users can't invite users. Please register to invite.": "Οι επισκέπτες δεν έχουν τη δυνατότητα να προσκαλέσουν άλλους χρήστες. Παρακαλώ εγγραφείτε πρώτα.",
- "Hide panel": "Κρύψε τη καρτέλα",
+ "Guest users can't invite users. Please register to invite.": "Οι επισκέπτες δεν έχουν τη δυνατότητα να προσκαλέσουν άλλους χρήστες. Παρακαλούμε εγγραφείτε πρώτα.",
+ "Hide panel": "Απόκρυψη καρτέλας",
"I understand the risks and wish to continue": "Κατανοώ του κινδύνους και επιθυμώ να συνεχίσω",
- "Invite to this room": "Προσκάλεσε",
+ "Invite to this room": "Πρόσκληση σε αυτό το δωμάτιο",
"Keywords": "Λέξεις κλειδιά",
- "Leave": "Αποχώρησε",
- "Low Priority": "Χαμηλής Προτεραιότητας",
+ "Leave": "Αποχώρηση",
+ "Low Priority": "Χαμηλή προτεραιότητα",
"Members": "Μέλη",
"Messages containing keywords": "Μηνύματα που περιέχουν λέξεις κλειδιά",
"Messages containing my user name": "Μηνύματα που περιέχουν το ψευδώνυμο μου",
@@ -62,49 +62,49 @@
"Noisy": "Δυνατά",
"Notifications": "Ειδοποιήσεις",
"Notifications on the following keywords follow rules which can’t be displayed here:": "Οι ειδοποιήσεις για τις επόμενες λέξεις κλειδία ακολουθούν κανόνες που δεν είναι δυνατόν να εμφανιστούν εδώ:",
- "Notify for all other messages/rooms": "Στείλε ειδοποιήσεις για όλα τα υπόλοιπα μηνύματα/δωμάτια",
- "Notify me for anything else": "Ειδοποίησέ με για οτιδήποτε άλλο",
+ "Notify for all other messages/rooms": "Ειδοποίηση για όλα τα υπόλοιπα μηνύματα/δωμάτια",
+ "Notify me for anything else": "Ειδοποίηση για οτιδήποτε άλλο",
"Operation failed": "Η λειτουργία απέτυχε",
- "Please describe the bug. What did you do? What did you expect to happen? What actually happened?": "Παρακαλώ περιγράψτε το σφάλμα. Τι κάνατε; Τι περιμένατε να συμβεί; Τι έγινε τελικά;",
- "Please Register": "Παρακαλώ εγγραφείτε",
- "Redact": "Ανακάλεσε",
- "Reject": "Απέρριψε",
- "Remove": "Αφαίρεσε",
- "Remove from Directory": "Αφαίρεση από το Ευρετήριο",
- "Resend": "Ξαναστείλε",
+ "Please describe the bug. What did you do? What did you expect to happen? What actually happened?": "Παρακαλούμε περιγράψτε το σφάλμα. Τι κάνατε; Τι περιμένατε να συμβεί; Τι έγινε τελικά;",
+ "Please Register": "Παρακαλούμε εγγραφείτε",
+ "Redact": "Ανάκληση",
+ "Reject": "Απόρριψη",
+ "Remove": "Αφαίρεση",
+ "Remove from Directory": "Αφαίρεση από το ευρετήριο",
+ "Resend": "Αποστολή ξανά",
"Riot Desktop on %(platformName)s": "Riot Desktop σε %(platformName)s",
"Room directory": "Ευρετήριο",
"Room not found": "Το δωμάτιο δεν βρέθηκε",
"Search": "Αναζήτηση",
"Search…": "Αναζήτηση…",
- "Send": "Στείλε",
+ "Send": "Αποστολή",
"Settings": "Ρυθμίσεις",
- "Start chat": "Άρχισε μια συνομιλία",
+ "Start chat": "Έναρξη συνομιλίας",
"This Room": "Στο δωμάτιο",
"Unavailable": "Μη διαθέσιμο",
"Unknown device": "Άγνωστη συσκευή",
"Update": "Ενημέρωση",
"Enable desktop notifications": "Ενεργοποίηση ειδοποιήσεων στην επιφάνεια εργασίας",
"Error saving email notification preferences": "Σφάλμα κατά την αποθήκευση των προτιμήσεων",
- "Failed to send report: ": "Η αποστολή της αναφοράς απέτυχε: ",
+ "Failed to send report: ": "Απέτυχε η αποστολή της αναφοράς: ",
"Loading bug report module": "Φόρτωση μονάδας αναφοράς σφαλμάτων",
- "Mentions only": "Αναφορές μόνο",
+ "Mentions only": "Μόνο αναφορές",
"Messages containing my display name": "Μηνύματα που περιέχουν το όνομα μου",
"Off": "Ανενεργό",
"On": "Ενεργό",
"Permalink": "Μόνιμος σύνδεσμος",
- "Please install Chrome or Firefox for the best experience.": "Παρακαλώ εγκαταστήστε έναν από τους φυλλομετρητές Chrome ή Firefox για την καλύτερη δυνατή εμπειρία.",
- "Report a bug": "Ανεφέρε κάποιο πρόβλημα",
+ "Please install Chrome or Firefox for the best experience.": "Παρακαλούμε εγκαταστήστε έναν από τους περιηγητές Chrome ή Firefox για την καλύτερη δυνατή εμπειρία.",
+ "Report a bug": "Αναφορά σφάλματος",
"Riot does not know how to join a room on this network": "To Riot δεν γνωρίζει πως να συνδεθεί σε δωμάτια που ανήκουν σ' αυτό το δίκτυο",
- "Search for a room": "Αναζήτησε κάποιο δωμάτιο",
- "Sorry, your browser is not able to run Riot.": "Λυπούμαστε, αλλά ο φυλλομετρητής σας δεν υποστηρίζεται από το Riot.",
+ "Search for a room": "Αναζήτηση δωματίου",
+ "Sorry, your browser is not able to run Riot.": "Λυπούμαστε, αλλά ο περιηγητές σας δεν υποστηρίζεται από το Riot.",
"There are advanced notifications which are not shown here": "Υπάρχουν προχωρημένες ειδοποιήσεις οι οποίες δεν εμφανίζονται εδώ",
"This room is inaccessible to guests. You may be able to join if you register.": "Το δωμάτιο δεν είναι προσβάσιμο σε επισκέπτες. Πιθανόν να μπορέσετε να συνδεθείτε εάν εγγραφείτε.",
"Unable to join network": "Δεν είναι δυνατή η σύνδεση στο δίκτυο",
"unknown error code": "άγνωστος κωδικός σφάλματος",
- "Unnamed room": "Δωμάτιο χωρίς όνομα",
- "Uploaded on %(date)s by %(user)s": "Ανέβηκε την %(date)s από %(user)s",
- "Uploading report": "Ανέβασμα αναφοράς",
+ "Unnamed room": "Ανώνυμο δωμάτιο",
+ "Uploaded on %(date)s by %(user)s": "Απεστάλη στις %(date)s από %(user)s",
+ "Uploading report": "Αποστολή αναφοράς",
"What's New": "Τι νέο υπάρχει",
"What's new?": "Τι νέο υπάρχει;",
"When I'm invited to a room": "Όταν με προσκαλούν σ' ένα δωμάτιο",
@@ -121,39 +121,80 @@
"Saturday": "Σάββατο",
"Today": "Σήμερα",
"Yesterday": "Χθές",
- "OK": "ΟΚ",
+ "OK": "Εντάξει",
"You need to be using HTTPS to place a screen-sharing call.": "Απαιτείται η χρήση HTTPS για το διαμοιρασμό της επιφάνειας εργασίας μέσω κλήσης.",
"Welcome page": "Αρχική σελίδα",
- "Forget": "Διαγραφή",
- "Riot is not supported on mobile web. Install the app?": "Το Riot δεν υποστηρίζεται από φυλλομετρητές κινητών. Θέλετε να εγκαταστήσετε την εφαρμογή;",
+ "Forget": "Παράλειψη",
+ "Riot is not supported on mobile web. Install the app?": "Το Riot δεν υποστηρίζεται από περιηγητές κινητών. Θέλετε να εγκαταστήσετε την εφαρμογή;",
"Unhide Preview": "Προεπισκόπηση",
"Waiting for response from server": "Αναμονή απάντησης από τον διακομιστή",
- "You are Rioting as a guest. Register or sign in to access more rooms and features!": "Χρησιμοποιείς το Riot ως επισκέπτης. Κάνε εγγραφή ή συνδέσου για να αποκτήσεις πρόσβαση σε περισσότερα δωμάτια και επιλογές!",
+ "You are Rioting as a guest. Register or sign in to access more rooms and features!": "Χρησιμοποιείτε το Riot ως επισκέπτης. Εγγραφείτε ή συνδεθείτε για να αποκτήσετε πρόσβαση σε περισσότερα δωμάτια και χαρακτηριστικά!",
"Collecting logs": "Συγκέντρωση πληροφοριών",
"Enable them now": "Ενεργοποίηση",
"Failed to forget room %(errCode)s": "Δεν ήταν δυνατή η διαγραφή του δωματίου (%(errCode)s)",
"Failed to update keywords": "Οι λέξεις κλειδιά δεν ενημερώθηκαν",
"Failed to get protocol list from Home Server": "Δεν ήταν δυνατή η εύρεση των διαθέσιμων πρωτοκόλλων από το διακομιστή",
- "Failed to remove tag %(tagName)s from room": "Δεν ήταν δυνατή η διαγραφή του tag %(tagName)s από το δωμάτιο",
+ "Failed to remove tag %(tagName)s from room": "Δεν ήταν δυνατή η διαγραφή της ετικέτας %(tagName)s από το δωμάτιο",
"Notification targets": "Στόχοι ειδοποιήσεων",
- "Please describe the bug and/or send logs.": "Παρακαλώ περιγράψτε το πρόβλημα και/ή στείλτε πληροφορίες σχετικά με την εφαρμογή.",
+ "Please describe the bug and/or send logs.": "Παρακαλούμε περιγράψτε το σφάλμα και/ή στείλτε πληροφορίες σχετικά με την εφαρμογή.",
"Remove %(name)s from the directory?": "Αφαίρεση του %(name)s από το ευρετήριο;",
"remove %(name)s from the directory.": "αφαίρεση του %(name)s από το ευρετήριο.",
- "Send logs": "Στείλε πληροφορίες",
+ "Send logs": "Αποστολή πληροφοριών",
"Source URL": "Πηγαίο URL",
"The server may be unavailable or overloaded": "Ο διακομιστής είναι μη διαθέσιμος ή υπερφορτωμένος",
" to room": " στο δωμάτιο",
"Unable to fetch notification target list": "Δεν ήταν δυνατή η εύρεση στόχων για τις ειδοποιήσεις",
"Unable to look up room ID from server": "Δεν είναι δυνατή η εύρεση του ID για το δωμάτιο",
- "View Decrypted Source": "Δες τον αποκρυπτογραφημένο κώδικα",
- "View Source": "Δες τον κώδικα",
- "You might have configured them in a client other than Riot. You cannot tune them in Riot but they still apply": "Ισως έχεις κάνει τις ρυθμίσεις σε άλλη εφαρμογή εκτός του Riot. Δεν μπορείς να τις αλλάξεις μέσω του Riot αλλά ισχύουν κανονικά",
+ "View Decrypted Source": "Προβολή του αποκρυπτογραφημένου κώδικα",
+ "View Source": "Προβολή κώδικα",
+ "You might have configured them in a client other than Riot. You cannot tune them in Riot but they still apply": "Ισως να έχετε κάνει τις ρυθμίσεις σε άλλη εφαρμογή εκτός του Riot. Δεν μπορείτε να τις αλλάξετε μέσω του Riot αλλά ισχύουν κανονικά",
"Couldn't find a matching Matrix room": "Δεν βρέθηκε κάποιο δωμάτιο",
- "Drop here %(toAction)s": "Σύρε εδώ %(toAction)s",
+ "Drop here %(toAction)s": "Απόθεση εδώ %(toAction)s",
"Failed to": "Αποτυχία να",
"Failed to get public room list": "Δεν ήταν δυνατή η λήψη της λίστας με τα δημόσια δωμάτια",
"Failed to set direct chat tag": "Δεν ήταν δυνατός ο χαρακτηρισμός της συνομιλίας ως 1-προς-1",
"powered by Matrix": "βασισμένο στο πρωτόκολλο Matrix",
- "Quote": "Αναφορά",
- "Fetching third party location failed": "Η λήψη τοποθεσίας απέτυχε"
+ "Quote": "Παράθεση",
+ "Fetching third party location failed": "Η λήψη τοποθεσίας απέτυχε",
+ " (HTTP status %(httpStatus))": "(Κατάσταση HTTP %(httpStatus))",
+ "Login": "Σύνδεση",
+ "Riot uses many advanced browser features, some of which are not available or experimental in your current browser.": "Το Riot χρησιμοποιεί αρκετά προχωρημένα χαρακτηριστικά των περιηγητών Ιστού, ορισμένα από τα οποία δεν είναι διαθέσιμα ή είναι σε πειραματικό στάδιο στον περιηγητή σας.",
+ "The Home Server may be too old to support third party networks": "Ο διακομιστής μπορεί να είναι αρκετά παλιός για να υποστηρίζει δίκτυα τρίτων",
+ "Welcome to Riot.im": "Καλώς ήλθατε στο Riot.im",
+ "Decentralised, encrypted chat & collaboration powered by [matrix]": "Αποκεντρωμένη, κρυπτογραφημένη συνομιλία & συνεργασία με τη βοήθεια του [matrix]",
+ "Search the room directory": "Αναζήτηση του ευρετηρίου δωματίων",
+ "Chat with Riot Bot": "Συνομιλία με το Riot Bot",
+ "Get started with some tips from Riot Bot!": "Ξεκινήστε με μερικές συμβουλές από το Riot Bot!",
+ "General discussion about Matrix and Riot": "Γενική συζήτηση σχετικά με Matrix και Riot",
+ "Discussion of all things Matrix!": "Συζήτηση για όλα τα πράγματα του Matrix!",
+ "Riot/Web & Desktop chat": "Συνομιλία για Riot/Web & Desktop",
+ "Riot/iOS & matrix-ios-sdk chat": "Συνομιλία για Riot/iOS & matrix-ios-sdk",
+ "Riot/Android & matrix-android-sdk chat": "Συνομιλία για Riot/Android & matrix-android-sdk",
+ "Matrix technical discussions": "Τεχνικές συζητήσεις σχετικά με το Matrix",
+ "Running Matrix services": "Εκτέλεση υπηρεσιών Matrix",
+ "Community-run support for Synapse": "Κοινοτική υποστήριξη για το Synapse",
+ "Admin support for Dendrite": "Υποστήριξη διαχειριστή για το Dendrite",
+ "Announcements about Synapse releases": "Ανακοινώσεις σχετικά με τις εκδόσεις του Synapse",
+ "Support for those using and running matrix-appservice-irc": "Υποστήριξη για τους χρήστες που χρησιμοποιούν το matrix-appservice-irc",
+ "Building services on Matrix": "Ανάπτυξη υπηρεσιών στο Matrix",
+ "Support for those using the Matrix spec": "Υποστήριξη για τους χρήστες που χρησιμοποιούν το Matrix spec",
+ "Design and implementation of E2E in Matrix": "Σχεδιασμός και υλοποίηση του E2E στο Matrix",
+ "Implementing VR services with Matrix": "Υλοποίηση υπηρεσίων VR με το Matrix",
+ "Implementing VoIP services with Matrix": "Υλοποίηση υπηρεσίων VoIP με το Matrix",
+ "Discussion of the Identity Service API": "Συζήτηση σχετικά με το Identity Service API",
+ "Contributing code to Matrix and Riot": "Συνεισφορά κώδικα στο Matrix και Riot",
+ "Dev chat for the Riot/Web dev team": "Συνομιλία για την ομάδα ανάπτυξης του Riot/Web",
+ "Dev chat for the Dendrite dev team": "Συνομιλία για την ομάδα ανάπτυξης του Dendrite",
+ "Co-ordination for Riot/Web translators": "Συντονισμός για μεταφραστές του Riot/Web",
+ "Lots of rooms already exist in Matrix, linked to existing networks (Slack, IRC, Gitter etc) or independent. Check out the directory!": "Αρκετά δωμάτια υπάρχουν ήδη στο Matrix, συνδεδεμένα σε υπάρχοντα δίκτυα (Slack, IRC, Gitter κ.λπ) ή αυτόνομα. Ρίξτε μια ματιά στο ευρετήριο!",
+ "Failed to change password. Is your password correct?": "Δεν ήταν δυνατή η αλλαγή του κωδικού πρόσβασης. Είναι σωστός ο κωδικός πρόσβασης;",
+ "You have successfully set a password!": "Ο κωδικός πρόσβασης ορίστηκε επιτυχώς!",
+ "You can now return to your account after signing out, and sign in on other devices.": "Μπορείτε να επιστρέψετε στον λογαριασμό σας αφού αποσυνδεθείτε και συνδεθείτε από άλλες συσκευές.",
+ "Continue": "Συνέχεια",
+ "Please set a password!": "Παρακαλούμε ορίστε έναν κωδικό πρόσβασης!",
+ "This will allow you to return to your account after signing out, and sign in on other devices.": "Αυτό θα σας επιτρέψει να επιστρέψετε στον λογαριασμό σας αφού αποσυνδεθείτε και συνδεθείτε από άλλες συσκευές.",
+ "In order to diagnose problems, logs from this client will be sent with this bug report. If you would prefer to only send the text above, please untick:": "Προκειμένου να διαγνωστούν προβλήματα, τα αρχεία καταγραφής από αυτόν τον πελάτη θα σταλούν με αυτήν την αναφορά σφάλματος. Αν προτιμάτε να στείλετε μόνο το παραπάνω κείμενο, απενεργοποιήστε:",
+ "With your current browser, the look and feel of the application may be completely incorrect, and some or all features may not function. If you want to try it anyway you can continue, but you are on your own in terms of any issues you may encounter!": "Με τον τρέχον περιηγητή, η εμφάνιση και η αίσθηση της εφαρμογής ενδέχεται να είναι εντελώς εσφαλμένη και ορισμένες ή όλες οι λειτουργίες ενδέχεται να μην λειτουργούν. Εάν θέλετε να το δοκιμάσετε ούτως ή άλλως μπορείτε να συνεχίσετε, αλλά είστε μόνοι σας σε ό, τι αφορά τα προβλήματα που μπορεί να αντιμετωπίσετε!",
+ "Failed to set Direct Message status of room": "Δεν ήταν δυνατός ο ορισμός της κατάστασης Direct Message του δωματίου",
+ "Support for those using, running and writing other bridges": "Υποστήριξη ηια τους χρήστες που χρησιμοποιούν ή αναπτύσσουν εφαρμογές ενσωμάτωσης για το Matrix"
}
diff --git a/src/i18n/strings/en_US.json b/src/i18n/strings/en_US.json
index 04409be07a..8500886541 100644
--- a/src/i18n/strings/en_US.json
+++ b/src/i18n/strings/en_US.json
@@ -163,5 +163,9 @@
"With your current browser, the look and feel of the application may be completely incorrect, and some or all features may not function. If you want to try it anyway you can continue, but you are on your own in terms of any issues you may encounter!": "With your current browser, the look and feel of the application may be completely incorrect, and some or all features may not function. If you want to try it anyway you can continue, but you are on your own in terms of any issues you may encounter!",
"Login": "Login",
"Continue": "Continue",
- "Failed to change password. Is your password correct?": "Failed to change password. Is your password correct?"
+ "Failed to change password. Is your password correct?": "Failed to change password. Is your password correct?",
+ " (HTTP status %(httpStatus))": "(HTTP status %(httpStatus))",
+ "Welcome to Riot.im": "Welcome to Riot.im",
+ "Decentralised, encrypted chat & collaboration powered by [matrix]": "Decentralised, encrypted chat & collaboration powered by [matrix]",
+ "Chat with Riot Bot": "Chat with Riot Bot"
}
diff --git a/src/i18n/strings/hu.json b/src/i18n/strings/hu.json
index d5d33930ab..9f8b2bef8f 100644
--- a/src/i18n/strings/hu.json
+++ b/src/i18n/strings/hu.json
@@ -9,7 +9,7 @@
"Cancel Sending": "Küldés megszakítása",
"Can't update user notification settings": "Nem sikerül frissíteni az értesítési beállításokat",
"Close": "Bezár",
- "Create new room": "Új szoba készítés",
+ "Create new room": "Új szoba létrehozása",
"Couldn't find a matching Matrix room": "Nem található a keresett Matrix szoba",
"Custom Server Options": "Egyedi szerver beállítások",
"delete the alias.": "becenév törlése.",
@@ -160,5 +160,41 @@
"OK": "Rendben",
"You need to be using HTTPS to place a screen-sharing call.": "HTTPS-t kell használnod hogy képernyőmegosztásos hívást kezdeményezz.",
"In order to diagnose problems, logs from this client will be sent with this bug report. If you would prefer to only send the text above, please untick:": "A problémák diagnosztizálása érdekében erről a kliensről a hibajelentésben naplók lesznek elküldve. Ha csak az alábbi szöveget szeretnéd elküldeni akkor ezt ne jelöld meg:",
- "Please describe the bug. What did you do? What did you expect to happen? What actually happened?": "Írd le a hibát. Mit csináltál? Mi az amit szerettél volna ha történik? Ezzel szemben mi az ami történt?"
+ "Please describe the bug. What did you do? What did you expect to happen? What actually happened?": "Írd le a hibát. Mit csináltál? Mi az amit szerettél volna ha történik? Ezzel szemben mi az ami történt?",
+ "Login": "Bejelentkezés",
+ "Welcome to Riot.im": "Üdvözlünk a Riot.im-en",
+ "Decentralised, encrypted chat & collaboration powered by [matrix]": "Decentralizált, titkosított csevegés és kollaboráció [matrix] alapokon",
+ "Search the room directory": "Keresés a szobák jegyzékében",
+ "Chat with Riot Bot": "Csevegés a Riot Robottal",
+ "Get started with some tips from Riot Bot!": "Kezdd el a Riot használatát a Riot Robot tippjei segítségével!",
+ "General discussion about Matrix and Riot": "Általános beszélgetések a Matrixról és a Riotról",
+ "Discussion of all things Matrix!": "Beszélgetések mindenről, ami a Matrixhoz kapcsolódik!",
+ "Riot/Web & Desktop chat": "Riot/Web és asztali csevegés",
+ "Riot/iOS & matrix-ios-sdk chat": "Riot/iOS és matrix-ios-sdk csevegés",
+ "Riot/Android & matrix-android-sdk chat": "Riot/Android és matrix-android-sdk csevegés",
+ "Matrix technical discussions": "Technikai jellegű beszélgetések a Matrixról",
+ "Community-run support for Synapse": "Közösségi támogatás a Synapse-hez",
+ "Admin support for Dendrite": "Adminisztrációs támogatás a Dendrite-hoz",
+ "Announcements about Synapse releases": "Bejelentések a Synapse kiadásairól",
+ "Running Matrix services": "Matrixszolgáltatások működtetése",
+ "Support for those using and running matrix-appservice-irc": "Támogatás a matrix-appservice-irc használatáról és működtetéséről",
+ "Building services on Matrix": "Szolgáltatások fejlesztése a Matrixra",
+ "Support for those using the Matrix spec": "Támogatás a Matrix specifikáció használatáról",
+ "Design and implementation of E2E in Matrix": "A végponttól végpontig történő titkosítás (E2E) tervezése és implementációja a Matrixban",
+ "Implementing VR services with Matrix": "A Matrixszal együttműködő virtuális valóság (VR) szolgáltatások implementációja",
+ "Implementing VoIP services with Matrix": "A Matrixszal együttműködő VoIP szolgáltatások implementációja",
+ "Discussion of the Identity Service API": "Beszélgetések az Identity Service API-ról",
+ "Support for those using, running and writing other bridges": "Támogatás egyéb hídak használáról, működtetéséről és fejlesztéséről",
+ "Contributing code to Matrix and Riot": "Hozzájárulás a Matrix és Riot programkódjának fejlesztéséhez",
+ "Dev chat for the Riot/Web dev team": "Csevegés a Riot/Web fejlesztői csapatával fejlesztőknek",
+ "Dev chat for the Dendrite dev team": "Csevegés a Dendrite fejlesztői csapatával fejlesztőknek",
+ "Co-ordination for Riot/Web translators": "Egyeztetés a Riot/Web fordítóival",
+ "Failed to change password. Is your password correct?": "Nem sikerült megváltoztatni a jelszót. Helyesen írtad be a jelszavadat?",
+ "Lots of rooms already exist in Matrix, linked to existing networks (Slack, IRC, Gitter etc) or independent. Check out the directory!": "Már sok létező szoba van a Matrixon, melyek más hálózatokkal vannak összekapcsolva (Slack, IRC, Gitter stb.) vagy függetlenek. Látogasd meg a szobajegyzéket!",
+ "You have successfully set a password!": "Sikeresen állítottál be jelszót!",
+ "You can now return to your account after signing out, and sign in on other devices.": "Most már visszatérhetsz a fiókodhoz kijelentkezés után, és más eszközökkel is be tudsz jelentkezni.",
+ "Continue": "Folytatás",
+ "Please set a password!": "Kérlek, állíts be egy jelszót!",
+ "This will allow you to return to your account after signing out, and sign in on other devices.": "Ezzel visszatérhetsz kijelentkezés után a fiókodhoz és más eszközökkel is be tudsz jelentkezni.",
+ " (HTTP status %(httpStatus))": "(HTTP állapot %(httpStatus))"
}
diff --git a/src/i18n/strings/ml.json b/src/i18n/strings/ml.json
index e67ece484c..1059888544 100644
--- a/src/i18n/strings/ml.json
+++ b/src/i18n/strings/ml.json
@@ -1,5 +1,6 @@
{
"Add an email address above to configure email notifications": "ഇ മെയില് അറിയിപ്പുകൾ ലഭിക്കാന് മുകളില് ഇ-മെയില് വിലാസം നല്കൂ",
"All messages": "എല്ലാ സന്ദേശങ്ങളും",
- "All messages (loud)": "എല്ലാ സന്ദേശങ്ങളും (ഉച്ചത്തിൽ)"
-}
\ No newline at end of file
+ "All messages (loud)": "എല്ലാ സന്ദേശങ്ങളും (ഉച്ചത്തിൽ)",
+ "%(appName)s via %(browserName)s on %(osName)s": "%(osName)ല് %(browserName) വഴി %(appName)"
+}
diff --git a/src/i18n/strings/ru.json b/src/i18n/strings/ru.json
index 573a09cc05..b9dcf10d56 100644
--- a/src/i18n/strings/ru.json
+++ b/src/i18n/strings/ru.json
@@ -9,7 +9,7 @@
"Custom Server Options": "Расширенные настройки сервера",
"delete the alias.": "удалить привязку.",
"Delete the room alias": "Удалить привязку комнаты",
- "Direct Chat": "Персональное сообщение",
+ "Direct Chat": "Приватный чат",
"Directory": "Каталог",
"Dismiss": "Отказ",
"Drop here to": "Перетащите сюда",
@@ -190,5 +190,18 @@
"Support for those using and running matrix-appservice-irc": "Поддержка тех, кто matrix-appservice-irc эксплуатирует и использует",
"You have successfully set a password!": "Вы успешно установили пароль!",
"Continue": "Продолжить",
- "Please set a password!": "Задайте пароль!"
+ "Please set a password!": "Задайте пароль!",
+ "Lots of rooms already exist in Matrix, linked to existing networks (Slack, IRC, Gitter etc) or independent. Check out the directory!": "В Matrix существует множество комнат, связанных с существующими сетями (Slack, IRC, Gitter и т.д.) Или независимыми. Ищите в каталоге!",
+ "Failed to change password. Is your password correct?": "Не удалось сменить пароль. Вы правильно ввели текущий пароль?",
+ "You can now return to your account after signing out, and sign in on other devices.": "Теперь вы можете вернуться в свою учетную запись после выхода из системы, и войти в систему на других устройствах.",
+ "Support for those using the Matrix spec": "Поддержка для тех, кто использует спецификацию Matrix",
+ "Design and implementation of E2E in Matrix": "Разработка и внедрение E2E в Matrix",
+ "Implementing VR services with Matrix": "Внедрение служб VR с помощью Matrix",
+ "Discussion of the Identity Service API": "Обсуждение службы идентификации API",
+ "Support for those using, running and writing other bridges": "Поддержка тех, кто использует, работает и пишет другие мосты (bridges)",
+ "Contributing code to Matrix and Riot": "Взаимодействующий код для Matrix и Riot",
+ "Dev chat for the Riot/Web dev team": "Dev chat для группы разработчиков Riot/Web",
+ "Dev chat for the Dendrite dev team": "Dev chat для группы разработчиков Dendrite",
+ "Co-ordination for Riot/Web translators": "Координирование для переводчиков Riot / Web",
+ "This will allow you to return to your account after signing out, and sign in on other devices.": "Это позволит Вам вернуться в свою учетную запись после выхода, и войти в систему на других устройствах."
}
diff --git a/src/i18n/strings/th.json b/src/i18n/strings/th.json
index c993079cd9..c770dc3e43 100644
--- a/src/i18n/strings/th.json
+++ b/src/i18n/strings/th.json
@@ -187,7 +187,7 @@
"Dev chat for the Dendrite dev team": "แชทสำหรับทีมพัฒนา Dendrite",
"Co-ordination for Riot/Web translators": "แชทสำหรับประสานงานการแปล Riot บนเว็บ",
"Failed to change password. Is your password correct?": "การเปลี่ยนรหัสผ่านล้มเหลว รหัสผ่านของคุณถูกต้องหรือไม่?",
- "Lots of rooms already exist in Matrix, linked to existing networks (Slack, IRC, Gitter etc) or independent. Check out the directory!": "มีห้องอยู่มากมายใน Matrix ทั้งห้องที่เชื่อมไปยังเคีือข่ายอื่น (Slack, IRC, Gitter ฯลฯ) และห้องที่อยู่ด้วยตัวเอง ลองดูไดเรกทอรีสิ!",
+ "Lots of rooms already exist in Matrix, linked to existing networks (Slack, IRC, Gitter etc) or independent. Check out the directory!": "มีห้องอยู่มากมายใน Matrix ทั้งห้องที่เชื่อมไปยังเครือข่ายอื่น (Slack, IRC, Gitter ฯลฯ) และห้องที่อยู่ด้วยตัวเอง ลองดูไดเรกทอรีสิ!",
"You have successfully set a password!": "การตั้งรหัสผ่านเสร็จสมบูรณ์!",
"You can now return to your account after signing out, and sign in on other devices.": "คุณสามารถกลับไปยังบัญชีของคุณหลังจากออกจากระบบ แล้วกลับเขาสู่ระบบบนอุปกรณ์อื่น ๆ",
"Continue": "ดำเนินการต่อ",
@@ -195,5 +195,7 @@
"This will allow you to return to your account after signing out, and sign in on other devices.": "เพื่อคุณจะได้กลับมายังบัญชีเดิมของคุณได้ หลังจากออกจากระบบ แล้วกลับเข้าสู่ระบบในอุปกรณ์อื่น ๆ",
"Design and implementation of E2E in Matrix": "การออกแบบและใช้งาน E2E ใน Matrix",
"Discussion of the Identity Service API": "พูดคุยเกี่ยวกับ Identity Service API",
- "Decentralised, encrypted chat & collaboration powered by [matrix]": "แชทและประสานงานบนระบบที่ทั้งเข้ารหัสได้และกระจายศูนย์กลาง โดยใช้เทคโนโลยีจาก [matrix]"
+ "Decentralised, encrypted chat & collaboration powered by [matrix]": "ระบบแชทและประสานงาน ไร้ศูนย์กลางและเข้ารหัสได้ โดยใช้เทคโนโลยีจาก [matrix]",
+ "General discussion about Matrix and Riot": "พูดคุยเรื่องทั่วไป ทั้ง Matrix และ Riot",
+ " (HTTP status %(httpStatus))": "(สถานะ HTTP %(httpStatus))"
}
diff --git a/src/i18n/strings/zh_Hans.json b/src/i18n/strings/zh_Hans.json
new file mode 100644
index 0000000000..f76aa160dd
--- /dev/null
+++ b/src/i18n/strings/zh_Hans.json
@@ -0,0 +1,7 @@
+{
+ "Close": "关闭",
+ "Mute": "静音",
+ "Notifications": "通知",
+ "OK": "确定",
+ "Operation failed": "操作失败"
+}
diff --git a/src/i18n/strings/zh_Hant.json b/src/i18n/strings/zh_Hant.json
index d6f0930a77..5b22640d87 100644
--- a/src/i18n/strings/zh_Hant.json
+++ b/src/i18n/strings/zh_Hant.json
@@ -98,7 +98,7 @@
"OK": "OK",
"You need to be using HTTPS to place a screen-sharing call.": "你需要使用 HTTPS 來置放畫面分享的通話。",
"Welcome page": "歡迎頁",
- "A new version of Riot is available.": " Riot 發佈了新版本",
+ "A new version of Riot is available.": "Riot 發佈了新版本",
"Add an email address above to configure email notifications": "在上面新增電子郵件以設定電郵通知",
"All notifications are currently disabled for all targets.": "目前所有的通知功能已取消",
"An error occurred whilst saving your email notification preferences.": "在儲存你的電郵通知偏好時發生錯誤",
From 89533706a8cfc6f2bd1a6749dc2dbb9473fec3e6 Mon Sep 17 00:00:00 2001
From: Michael Telatynski <7t3chguy@gmail.com>
Date: Sun, 11 Jun 2017 23:39:21 +0100
Subject: [PATCH 039/213] pollForUpdate is now internal/private to a Platform.
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
---
src/vector/platform/VectorBasePlatform.js | 10 ----------
1 file changed, 10 deletions(-)
diff --git a/src/vector/platform/VectorBasePlatform.js b/src/vector/platform/VectorBasePlatform.js
index 0e84e5fcd5..c3df04f5b7 100644
--- a/src/vector/platform/VectorBasePlatform.js
+++ b/src/vector/platform/VectorBasePlatform.js
@@ -117,16 +117,6 @@ export default class VectorBasePlatform extends BasePlatform {
})
}
- /**
- * Check for the availability of an update to the version of the
- * app that's currently running.
- * If an update is available, this function should dispatch the
- * 'new_version' action.
- * @returns Promise
- */
- pollForUpdate(): Promise {
- }
-
/**
* Update the currently running app to the latest available
* version and replace this instance of the app with the
From a32ce4fbf6208294d506d3b2dc3d4bcb76875e28 Mon Sep 17 00:00:00 2001
From: Michael Telatynski <7t3chguy@gmail.com>
Date: Sun, 11 Jun 2017 23:57:03 +0100
Subject: [PATCH 040/213] remove unused string
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
---
src/i18n/strings/en_EN.json | 1 -
1 file changed, 1 deletion(-)
diff --git a/src/i18n/strings/en_EN.json b/src/i18n/strings/en_EN.json
index a06c443989..751249a3bc 100644
--- a/src/i18n/strings/en_EN.json
+++ b/src/i18n/strings/en_EN.json
@@ -165,7 +165,6 @@
"No update available.": "No update available.",
"Downloading update...": "Downloading update...",
"No update found.": "No update found.",
- "Update is being downloaded.": "Update is being downloaded.",
"You need to be using HTTPS to place a screen-sharing call.": "You need to be using HTTPS to place a screen-sharing call.",
"Welcome page": "Welcome page",
"With your current browser, the look and feel of the application may be completely incorrect, and some or all features may not function. If you want to try it anyway you can continue, but you are on your own in terms of any issues you may encounter!": "With your current browser, the look and feel of the application may be completely incorrect, and some or all features may not function. If you want to try it anyway you can continue, but you are on your own in terms of any issues you may encounter!",
From 2bfaf2f802acf0cdfeb6bb248a9aaa5c690e3aa3 Mon Sep 17 00:00:00 2001
From: Tom Tryfonidis
Date: Mon, 12 Jun 2017 09:20:18 +0000
Subject: [PATCH 041/213] Translated using Weblate (Greek)
Currently translated at 100.0% (198 of 198 strings)
Translation: Riot Web/riot-web
Translate-URL: https://translate.riot.im/projects/riot-web/riot-web/el/
---
src/i18n/strings/el.json | 10 +++++-----
1 file changed, 5 insertions(+), 5 deletions(-)
diff --git a/src/i18n/strings/el.json b/src/i18n/strings/el.json
index cbb2a819cf..c060f3bdb3 100644
--- a/src/i18n/strings/el.json
+++ b/src/i18n/strings/el.json
@@ -20,7 +20,7 @@
"Download this file": "Λήψη αρχείου",
"Enable audible notifications in web client": "Ενεργοποίηση ηχητικών ειδοποιήσεων",
"Enable email notifications": "Ενεργοποίηση ειδοποιήσεων μέσω μηνυμάτων ηλ. αλληλογραφίας",
- "Enable notifications for this account": "Ενεργοποίηση ειδοποιήσεων γι' αυτό το λογαριασμό",
+ "Enable notifications for this account": "Ενεργοποίηση ειδοποιήσεων για τον λογαριασμό",
"Enter keywords separated by a comma:": "Πρόσθεσε λέξεις κλειδιά χωρισμένες με κόμμα:",
"Error": "Σφάλμα",
"#example": "#παράδειγμα",
@@ -31,7 +31,7 @@
"customServer_text": "Μπορείτε να χρησιμοποιήσετε τις προσαρμοσμένες ρυθμίσεις για να εισέλθετε σε άλλους διακομιστές Matrix επιλέγοντας μια διαφορετική διεύθυνση για το διακομιστή.
Αυτό σας επιτρέπει να χρησιμοποιήσετε την εφαρμογή Riot με έναν υπάρχοντα λογαριασμό σε διαφορετικό διακομιστή.
Επίσης μπορείτε να επιλέξετε ένα διαφορετικό διακομιστή ταυτότητας αλλά δεν θα έχετε τη δυνατότητα να προσκαλέσετε άλλους χρήστες ή να σας προσκαλέσουν μέσω μηνυμάτων ηλεκτρονικής αλληλογραφίας.",
"%(appName)s via %(browserName)s on %(osName)s": "%(appName)s μέσω %(browserName)s σε %(osName)s",
"All messages (loud)": "Όλα τα μηνύματα (δυνατά)",
- "delete the alias.": "διαγραφή ψευδώνυμου.",
+ "delete the alias.": "διέγραψε το ψευδώνυμο.",
"Delete the room alias %(alias)s and remove %(name)s from the directory?": "Διαγραφή του ψευδώνυμου %(alias)s και αφαίρεση του %(name)s από το ευρετήριο;",
"Dismiss": "Απόρριψη",
"Failed to add tag %(tagName)s to room": "Δεν ήταν δυνατή η προσθήκη της ετικέτας %(tagName)s στο δωμάτιο",
@@ -39,7 +39,7 @@
"Failed to join the room": "Δεν ήταν δυνατή η σύνδεση στο δωμάτιο",
"Favourite": "Αγαπημένο",
"Files": "Αρχεία",
- "Filter room names": "Φίλτραρε τα δωμάτια",
+ "Filter room names": "Φιλτράρισμα δωματίων",
"Forward Message": "Προώθηση",
" from room": " από το δωμάτιο",
"Guests can join": "Επισκέπτες μπορούν να συνδεθούν",
@@ -150,7 +150,7 @@
"You might have configured them in a client other than Riot. You cannot tune them in Riot but they still apply": "Ισως να έχετε κάνει τις ρυθμίσεις σε άλλη εφαρμογή εκτός του Riot. Δεν μπορείτε να τις αλλάξετε μέσω του Riot αλλά ισχύουν κανονικά",
"Couldn't find a matching Matrix room": "Δεν βρέθηκε κάποιο δωμάτιο",
"Drop here %(toAction)s": "Απόθεση εδώ %(toAction)s",
- "Failed to": "Αποτυχία να",
+ "Failed to": "Απέτυχε να",
"Failed to get public room list": "Δεν ήταν δυνατή η λήψη της λίστας με τα δημόσια δωμάτια",
"Failed to set direct chat tag": "Δεν ήταν δυνατός ο χαρακτηρισμός της συνομιλίας ως 1-προς-1",
"powered by Matrix": "βασισμένο στο πρωτόκολλο Matrix",
@@ -196,5 +196,5 @@
"In order to diagnose problems, logs from this client will be sent with this bug report. If you would prefer to only send the text above, please untick:": "Προκειμένου να διαγνωστούν προβλήματα, τα αρχεία καταγραφής από αυτόν τον πελάτη θα σταλούν με αυτήν την αναφορά σφάλματος. Αν προτιμάτε να στείλετε μόνο το παραπάνω κείμενο, απενεργοποιήστε:",
"With your current browser, the look and feel of the application may be completely incorrect, and some or all features may not function. If you want to try it anyway you can continue, but you are on your own in terms of any issues you may encounter!": "Με τον τρέχον περιηγητή, η εμφάνιση και η αίσθηση της εφαρμογής ενδέχεται να είναι εντελώς εσφαλμένη και ορισμένες ή όλες οι λειτουργίες ενδέχεται να μην λειτουργούν. Εάν θέλετε να το δοκιμάσετε ούτως ή άλλως μπορείτε να συνεχίσετε, αλλά είστε μόνοι σας σε ό, τι αφορά τα προβλήματα που μπορεί να αντιμετωπίσετε!",
"Failed to set Direct Message status of room": "Δεν ήταν δυνατός ο ορισμός της κατάστασης Direct Message του δωματίου",
- "Support for those using, running and writing other bridges": "Υποστήριξη ηια τους χρήστες που χρησιμοποιούν ή αναπτύσσουν εφαρμογές ενσωμάτωσης για το Matrix"
+ "Support for those using, running and writing other bridges": "Υποστήριξη για τους χρήστες που χρησιμοποιούν ή αναπτύσσουν εφαρμογές ενσωμάτωσης για το Matrix"
}
From 9493f4a8720432c66acb9a7b45f6c3f6e6641c2b Mon Sep 17 00:00:00 2001
From: Michael Telatynski <7t3chguy@gmail.com>
Date: Mon, 12 Jun 2017 10:42:44 +0100
Subject: [PATCH 042/213] fallback from undefined for interpolation because _t
called with undefined interpolation name: errorDetail even though when its
undef its not used to sprinf-js would have been fine...
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
---
src/components/views/globals/UpdateCheckBar.js | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/components/views/globals/UpdateCheckBar.js b/src/components/views/globals/UpdateCheckBar.js
index 557698c711..d19a21cb8f 100644
--- a/src/components/views/globals/UpdateCheckBar.js
+++ b/src/components/views/globals/UpdateCheckBar.js
@@ -47,7 +47,7 @@ export default React.createClass({
},
render: function() {
- const message = _t(statusText[this.props.status], { errorDetail: this.props.detail });
+ const message = _t(statusText[this.props.status], { errorDetail: this.props.detail || '' });
let image;
if (doneStatuses.includes(this.props.status)) {
From 53e2ce33b878e61913958b2faced44f43eb4731a Mon Sep 17 00:00:00 2001
From: Michael Telatynski <7t3chguy@gmail.com>
Date: Mon, 12 Jun 2017 13:39:35 +0100
Subject: [PATCH 043/213] remove unused i18n
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
---
src/i18n/strings/en_EN.json | 1 -
1 file changed, 1 deletion(-)
diff --git a/src/i18n/strings/en_EN.json b/src/i18n/strings/en_EN.json
index 751249a3bc..135c6dabda 100644
--- a/src/i18n/strings/en_EN.json
+++ b/src/i18n/strings/en_EN.json
@@ -164,7 +164,6 @@
"Error encountered (%(errorDetail)s).": "Error encountered (%(errorDetail)s).",
"No update available.": "No update available.",
"Downloading update...": "Downloading update...",
- "No update found.": "No update found.",
"You need to be using HTTPS to place a screen-sharing call.": "You need to be using HTTPS to place a screen-sharing call.",
"Welcome page": "Welcome page",
"With your current browser, the look and feel of the application may be completely incorrect, and some or all features may not function. If you want to try it anyway you can continue, but you are on your own in terms of any issues you may encounter!": "With your current browser, the look and feel of the application may be completely incorrect, and some or all features may not function. If you want to try it anyway you can continue, but you are on your own in terms of any issues you may encounter!",
From b6d2ba2019ed4ca5a9f75bfb065ddbe8509ec02a Mon Sep 17 00:00:00 2001
From: Michael Telatynski <7t3chguy@gmail.com>
Date: Mon, 12 Jun 2017 13:47:29 +0100
Subject: [PATCH 044/213] store window ref globally so when splitting files its
easier to access.
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
---
electron_app/src/electron-main.js | 6 +++---
electron_app/src/tray.js | 18 +++++++++---------
electron_app/src/updater.js | 12 +++---------
3 files changed, 15 insertions(+), 21 deletions(-)
diff --git a/electron_app/src/electron-main.js b/electron_app/src/electron-main.js
index b0d4de4c21..5f9598afaf 100644
--- a/electron_app/src/electron-main.js
+++ b/electron_app/src/electron-main.js
@@ -185,7 +185,7 @@ electron.app.on('ready', () => {
defaultHeight: 768,
});
- mainWindow = new electron.BrowserWindow({
+ mainWindow = global.mainWindow = new electron.BrowserWindow({
icon: iconPath,
show: false,
autoHideMenuBar: true,
@@ -203,7 +203,7 @@ electron.app.on('ready', () => {
mainWindow.hide();
// Create trayIcon icon
- tray.create(mainWindow, {
+ tray.create({
icon_path: iconPath,
brand: vectorConfig.brand || 'Riot',
});
@@ -215,7 +215,7 @@ electron.app.on('ready', () => {
}
mainWindow.on('closed', () => {
- mainWindow = null;
+ mainWindow = global.mainWindow = null;
});
mainWindow.on('close', (e) => {
if (!global.appQuitting && (tray.hasTray() || process.platform === 'darwin')) {
diff --git a/electron_app/src/tray.js b/electron_app/src/tray.js
index 039e7133fa..4225e1f6f3 100644
--- a/electron_app/src/tray.js
+++ b/electron_app/src/tray.js
@@ -26,17 +26,17 @@ exports.hasTray = function hasTray() {
return (trayIcon !== null);
};
-exports.create = function(win, config) {
+exports.create = function(config) {
// no trays on darwin
if (process.platform === 'darwin' || trayIcon) return;
const toggleWin = function() {
- if (win.isVisible() && !win.isMinimized()) {
- win.hide();
+ if (global.mainWindow.isVisible() && !global.mainWindow.isMinimized()) {
+ global.mainWindow.hide();
} else {
- if (win.isMinimized()) win.restore();
- if (!win.isVisible()) win.show();
- win.focus();
+ if (global.mainWindow.isMinimized()) global.mainWindow.restore();
+ if (!global.mainWindow.isVisible()) global.mainWindow.show();
+ global.mainWindow.focus();
}
};
@@ -60,7 +60,7 @@ exports.create = function(win, config) {
trayIcon.on('click', toggleWin);
let lastFavicon = null;
- win.webContents.on('page-favicon-updated', async function(ev, favicons) {
+ global.mainWindow.webContents.on('page-favicon-updated', async function(ev, favicons) {
let newFavicon = config.icon_path;
if (favicons && favicons.length > 0 && favicons[0].startsWith('data:')) {
newFavicon = favicons[0];
@@ -85,10 +85,10 @@ exports.create = function(win, config) {
}
trayIcon.setImage(newFavicon);
- win.setIcon(newFavicon);
+ global.mainWindow.setIcon(newFavicon);
});
- win.webContents.on('page-title-updated', function(ev, title) {
+ global.mainWindow.webContents.on('page-title-updated', function(ev, title) {
trayIcon.setToolTip(title);
});
};
diff --git a/electron_app/src/updater.js b/electron_app/src/updater.js
index 106e3d2f23..49fa4e0419 100644
--- a/electron_app/src/updater.js
+++ b/electron_app/src/updater.js
@@ -67,17 +67,11 @@ module.exports.start = function startAutoUpdate(updateBaseUrl) {
}
ipcMain.on('install_update', installUpdate);
-
-let ipcChannel;
-ipcMain.on('check_updates', function(event) {
- ipcChannel = event.sender;
- pollForUpdates();
- // event.sender.send('check_updates') // true/false/error = available(downloading)/notAvailable/error
-});
+ipcMain.on('check_updates', pollForUpdates);
function ipcChannelSendUpdateStatus(status) {
- if (ipcChannel) {
- ipcChannel.send('check_updates', status);
+ if (global.mainWindow) {
+ global.mainWindow.webContents.send('check_updates', status);
}
}
From 051db65188d5eb4ce9b2bc1a6618d64db16a8447 Mon Sep 17 00:00:00 2001
From: Jean
Date: Mon, 12 Jun 2017 15:02:46 +0000
Subject: [PATCH 045/213] Translated using Weblate (French)
Currently translated at 84.8% (168 of 198 strings)
Translation: Riot Web/riot-web
Translate-URL: https://translate.riot.im/projects/riot-web/riot-web/fr/
---
src/i18n/strings/fr.json | 12 +++++++++---
1 file changed, 9 insertions(+), 3 deletions(-)
diff --git a/src/i18n/strings/fr.json b/src/i18n/strings/fr.json
index 47fb52532c..cc5d2d24fc 100644
--- a/src/i18n/strings/fr.json
+++ b/src/i18n/strings/fr.json
@@ -10,7 +10,7 @@
"Create new room": "Créer un nouveau salon",
"Couldn't find a matching Matrix room": "Impossible de trouver un salon Matrix",
"Custom Server Options": "Options de serveur personnalisées",
- "delete the alias.": "Supprimer l'alias.",
+ "delete the alias.": "supprimer l'alias.",
"Delete the room alias %(alias)s and remove %(name)s from the directory?": "Supprimer l'alias %(alias)s du salon et supprimer %(name)s du répertoire ?",
"Direct Chat": "Conversation Directe",
"Directory": "Répertoire",
@@ -118,7 +118,7 @@
"Guests can join": "Ouvert aux visiteurs",
" to room": " au salon",
"Advanced notification settings": "Paramètres de notification avancés",
- "customServer_text": "Vous pouvez utiliser l'option de serveur personnalisé pour vous connectez à d'autres serveurs Matrix, en spécifiant une adresse de homerserver différente.
Cela permet d'utiliser Riot avec un compte existant sur un homeserverdifférent.
Vous pouvez aussi indiquer un serveur d'identité personnel mais vous ne pourrez plus inviter des utilisateurs par email, ou être invité par email.",
+ "customServer_text": "Vous pouvez utiliser l'option de serveur personnalisé pour vous connectez à d'autres serveurs Matrix, en spécifiant une adresse de homerserver différente.
Cela permet d'utiliser Riot avec un compte existant sur un homeserver différent.
Vous pouvez aussi indiquer un serveur d'identité personnel mais vous ne pourrez plus inviter des utilisateurs par email, ou être invité par email.",
"Notifications on the following keywords follow rules which can’t be displayed here:": "Les notifications pour les mots-clés suivant répondent à des critères qui ne peuvent pas être affichés ici :",
"Collapse panel": "Cacher le panneau",
"Expand panel": "Dévoiler le panneau",
@@ -161,5 +161,11 @@
"Waiting for response from server": "En attente d’une réponse du serveur",
"You are Rioting as a guest. Register or sign in to access more rooms and features!": "Vous utilisez Riot en tant que visiteur. Enregistrez vous ou identifiez vous pour accéder à plus de salons et de fonctionnalités !",
"You need to be using HTTPS to place a screen-sharing call.": "Vous devez utiliser HTTPS pour effectuer un appel en partage d’écran.",
- "OK": "OK"
+ "OK": "OK",
+ "Failed to change password. Is your password correct?": "Échec du changement de mot de passe. Votre mot de passe est-il correct ?",
+ "You have successfully set a password!": "Vous avez paramétré un mot de passe avec succès !",
+ "Continue": "Continuer",
+ "Please set a password!": "Veuillez paramétrer un mot de passe !",
+ "You can now return to your account after signing out, and sign in on other devices.": "Vous pouvez maintenant revenir sur votre compte après vous être déconnecté, et vous identifier sur d'autres appareils.",
+ "This will allow you to return to your account after signing out, and sign in on other devices.": "Cela vous permettra de retourner sur votre compte après vous être déconnecté, et de vous identifier sur d'autres appareils."
}
From a3240b934f1a115d8dfae9e6244f450a4055dc95 Mon Sep 17 00:00:00 2001
From: David Baker
Date: Mon, 12 Jun 2017 16:49:09 +0100
Subject: [PATCH 046/213] Missing bracket in translation
---
src/i18n/strings/nl.json | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/i18n/strings/nl.json b/src/i18n/strings/nl.json
index 70860d27e7..1b497ff3ad 100644
--- a/src/i18n/strings/nl.json
+++ b/src/i18n/strings/nl.json
@@ -102,7 +102,7 @@
"View Source": "Bekijk bron",
"When I'm invited to a room": "Wanneer ik uitgenodigt wordt naar een kamer",
"World readable": "Door iedereen leesbaar",
- "You cannot delete this image. (%(code)s)": "Je kunt deze afbeelding niet verwijderen. %(code)s)",
+ "You cannot delete this image. (%(code)s)": "Je kunt deze afbeelding niet verwijderen. (%(code)s)",
"You cannot delete this message. (%(code)s)": "Je kunt dit bericht niet verwijderen. (%(code)s)",
"You are not receiving desktop notifications": "Je ontvangt momenteel geen desktop notificaties",
"You might have configured them in a client other than Riot. You cannot tune them in Riot but they still apply": "Je hebt ze mogelijk ingesteld in een andere client dan Riot. Je kunt ze niet aanpassen in Riot maar ze zijn wel actief",
From bbb9dd9228a3b707fccd23f08bcc3cc460447d88 Mon Sep 17 00:00:00 2001
From: David Baker
Date: Mon, 12 Jun 2017 17:33:02 +0100
Subject: [PATCH 047/213] Fix broken riot.im link on homepage
For want of a quote the something something
Also add noopeners
---
src/components/structures/HomePage.js | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/src/components/structures/HomePage.js b/src/components/structures/HomePage.js
index e1e700f21e..2311cc1f30 100644
--- a/src/components/structures/HomePage.js
+++ b/src/components/structures/HomePage.js
@@ -46,8 +46,8 @@ module.exports = React.createClass({
translate: function(s) {
s = sanitizeHtml(_t(s));
// ugly fix for https://github.com/vector-im/riot-web/issues/4243
- s = s.replace(/Riot\.im/, 'Riot.im');
- s = s.replace(/\[matrix\]/, '
');
+ s = s.replace(/Riot\.im/, 'Riot.im');
+ s = s.replace(/\[matrix\]/, '
');
return s;
},
From ac25cf56fbaedbb0f7b7d7b838fe8874d4efccc5 Mon Sep 17 00:00:00 2001
From: David Baker
Date: Mon, 12 Jun 2017 17:33:02 +0100
Subject: [PATCH 048/213] Fix broken riot.im link on homepage
For want of a quote the something something
Also add noopeners
---
src/components/structures/HomePage.js | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/src/components/structures/HomePage.js b/src/components/structures/HomePage.js
index e1e700f21e..2311cc1f30 100644
--- a/src/components/structures/HomePage.js
+++ b/src/components/structures/HomePage.js
@@ -46,8 +46,8 @@ module.exports = React.createClass({
translate: function(s) {
s = sanitizeHtml(_t(s));
// ugly fix for https://github.com/vector-im/riot-web/issues/4243
- s = s.replace(/Riot\.im/, 'Riot.im');
- s = s.replace(/\[matrix\]/, '
');
+ s = s.replace(/Riot\.im/, 'Riot.im');
+ s = s.replace(/\[matrix\]/, '
');
return s;
},
From c43b30f2fd2d4d2ed2a373d4cafda89d84c5bb5d Mon Sep 17 00:00:00 2001
From: David Baker
Date: Mon, 12 Jun 2017 16:49:09 +0100
Subject: [PATCH 049/213] Missing bracket in translation
---
src/i18n/strings/nl.json | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/i18n/strings/nl.json b/src/i18n/strings/nl.json
index 70860d27e7..1b497ff3ad 100644
--- a/src/i18n/strings/nl.json
+++ b/src/i18n/strings/nl.json
@@ -102,7 +102,7 @@
"View Source": "Bekijk bron",
"When I'm invited to a room": "Wanneer ik uitgenodigt wordt naar een kamer",
"World readable": "Door iedereen leesbaar",
- "You cannot delete this image. (%(code)s)": "Je kunt deze afbeelding niet verwijderen. %(code)s)",
+ "You cannot delete this image. (%(code)s)": "Je kunt deze afbeelding niet verwijderen. (%(code)s)",
"You cannot delete this message. (%(code)s)": "Je kunt dit bericht niet verwijderen. (%(code)s)",
"You are not receiving desktop notifications": "Je ontvangt momenteel geen desktop notificaties",
"You might have configured them in a client other than Riot. You cannot tune them in Riot but they still apply": "Je hebt ze mogelijk ingesteld in een andere client dan Riot. Je kunt ze niet aanpassen in Riot maar ze zijn wel actief",
From 91295c68adee3e728f58cdcd4a65f9c862e587d5 Mon Sep 17 00:00:00 2001
From: David Baker
Date: Mon, 12 Jun 2017 17:54:58 +0100
Subject: [PATCH 050/213] Don't show the tooltips when filtering rooms
Fixes https://github.com/vector-im/riot-web/issues/4281
---
src/components/structures/RoomSubList.js | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/components/structures/RoomSubList.js b/src/components/structures/RoomSubList.js
index 2740c6a400..092ed9cca0 100644
--- a/src/components/structures/RoomSubList.js
+++ b/src/components/structures/RoomSubList.js
@@ -530,7 +530,7 @@ var RoomSubList = React.createClass({
var label = this.props.collapsed ? null : this.props.label;
let content;
- if (this.state.sortedList.length == 0) {
+ if (this.state.sortedList.length == 0 && !this.props.searchFilter) {
content = this.props.emptyContent;
} else {
content = this.makeRoomTiles();
From 0b83baeaf499d4ed426f875bde2e5858df6e6a88 Mon Sep 17 00:00:00 2001
From: David Baker
Date: Mon, 12 Jun 2017 17:54:58 +0100
Subject: [PATCH 051/213] Don't show the tooltips when filtering rooms
Fixes https://github.com/vector-im/riot-web/issues/4281
---
src/components/structures/RoomSubList.js | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/components/structures/RoomSubList.js b/src/components/structures/RoomSubList.js
index 2740c6a400..092ed9cca0 100644
--- a/src/components/structures/RoomSubList.js
+++ b/src/components/structures/RoomSubList.js
@@ -530,7 +530,7 @@ var RoomSubList = React.createClass({
var label = this.props.collapsed ? null : this.props.label;
let content;
- if (this.state.sortedList.length == 0) {
+ if (this.state.sortedList.length == 0 && !this.props.searchFilter) {
content = this.props.emptyContent;
} else {
content = this.makeRoomTiles();
From 8967403bcafcb01354e7a2638de4bda8c4fc8303 Mon Sep 17 00:00:00 2001
From: Justin
Date: Mon, 12 Jun 2017 21:47:38 +0000
Subject: [PATCH 052/213] Translated using Weblate (Dutch)
Currently translated at 95.4% (189 of 198 strings)
Translation: Riot Web/riot-web
Translate-URL: https://translate.riot.im/projects/riot-web/riot-web/nl/
---
src/i18n/strings/nl.json | 158 +++++++++++++++++++++++++++------------
1 file changed, 112 insertions(+), 46 deletions(-)
diff --git a/src/i18n/strings/nl.json b/src/i18n/strings/nl.json
index 1b497ff3ad..ac8cf1fb60 100644
--- a/src/i18n/strings/nl.json
+++ b/src/i18n/strings/nl.json
@@ -1,42 +1,42 @@
{
- "Add an email address above to configure email notifications": "Voeg een email adres toe om email notificaties te ontvangen",
- "Advanced notification settings": "Geavanceerde notificatie instellingen",
+ "Add an email address above to configure email notifications": "Voeg een e-mailadres toe om e-mailmeldingen te ontvangen",
+ "Advanced notification settings": "Geavanceerde meldingsinstellingen",
"All messages": "Alle berichten",
"All messages (loud)": "Alle berichten (luid)",
- "All notifications are currently disabled for all targets.": "Alle notificaties zijn op het moment uitgeschakeld voor alle doelen.",
- "An error occurred whilst saving your email notification preferences.": "Er is een fout ontstaan tijdens het opslaan van jouw email notificatie voorkeuren.",
- "Call invitation": "Audio gesprek uitnodiging",
- "Cancel Sending": "Annuleren verzending",
- "Can't update user notification settings": "Het is niet gelukt om de gebruiker notificatie instellingen bij te werken",
+ "All notifications are currently disabled for all targets.": "Alle meldingen zijn momenteel uitgeschakeld voor alle doelen.",
+ "An error occurred whilst saving your email notification preferences.": "Er is een fout ontstaan tijdens het opslaan van uw e-mailmeldingsvoorkeuren.",
+ "Call invitation": "Oproep-uitnodiging",
+ "Cancel Sending": "Versturen annuleren",
+ "Can't update user notification settings": "Het is niet gelukt om de meldingsinstellingen van de gebruiker bij te werken",
"Close": "Sluiten",
- "Create new room": "Maak een nieuwe kamer",
+ "Create new room": "Een nieuwe kamer maken",
"Couldn't find a matching Matrix room": "Het is niet gelukt om een bijbehorende Matrix kamer te vinden",
- "Custom Server Options": "Aangepaste server instellingen",
- "customServer_text": "Je kunt de aangepaste server instellingen gebruiken om in te loggen bij andere Matrix servers door een andere home server URL in te voeren.
Dit maakt het mogelijk om Riot te gebruiken met een bestaand Matrix account op een andere home server.
Je kunt ook een aangepaste identiteit server instellen, maar het is dan niet mogelijk om gebruikers uit te nodigen met behulp van een email adres of zelf uitgenodigt te worden met een email adres.",
+ "Custom Server Options": "Aangepaste serverinstellingen",
+ "customServer_text": "U kunt de aangepaste serverinstellingen gebruiken om in te loggen bij andere Matrix-servers door een andere homeserver-URL in te voeren.
Dit maakt het mogelijk om Riot te gebruiken met een bestaand Matrix-account op een andere homeserver.
U kunt ook een aangepaste identiteitsserver instellen, maar het is dan niet mogelijk om gebruikers uit te nodigen met behulp van een e-mailadres of zelf uitgenodigd te worden met een e-mailadres.",
"delete the alias.": "verwijder de alias.",
- "Delete the room alias %(alias)s and remove %(name)s from the directory?": "Verwijder de alias %(alias)s en verwijder %(name)s uit de map?",
- "Direct Chat": "Privé gesprek",
- "Directory": "Kamer lijst",
+ "Delete the room alias %(alias)s and remove %(name)s from the directory?": "De alias %(alias)s verwijderen en %(name)s uit de kamerlijst verwijderen?",
+ "Direct Chat": "Direct chatten",
+ "Directory": "Kamerlijst",
"Dismiss": "Afwijzen",
"Download this file": "Download dit bestand",
- "Enable audible notifications in web client": "Zet notificaties aan in de web client",
- "Enable desktop notifications": "Zet desktop notificaties aan",
- "Enable email notifications": "Zet email notificaties aan",
- "Enable notifications for this account": "Zet notificaties aan voor dit account",
- "Enable them now": "Zet ze nu aan",
+ "Enable audible notifications in web client": "Meldingen in de webclient aanzetten",
+ "Enable desktop notifications": "Desktopmeldingen aanzetten",
+ "Enable email notifications": "E-mailmeldingen aanzetten",
+ "Enable notifications for this account": "Meldingen voor dit account aanzetten",
+ "Enable them now": "Deze nu aanzetten",
"Enter keywords separated by a comma:": "Voeg trefwoorden toe, gesplitst door een komma:",
"Error": "Fout",
- "Error saving email notification preferences": "Fout bij het opslaan van de email notificatie voorkeuren",
+ "Error saving email notification preferences": "Fout bij het opslaan van de meldingsvoorkeuren voor e-mail",
"#example": "#voorbeeld",
"Failed to": "Mislukt om",
"Failed to add tag %(tagName)s to room": "Mislukt om de label %(tagName)s aan de kamer toe te voegen",
- "Failed to change settings": "Het is mislukt om de instellingen te wijzigen",
- "Failed to forget room %(errCode)s": "Het is mislukt om de kamer te vergeten %(errCode)s",
- "Failed to update keywords": "Het is mislukt om de trefwoorden bij te werken",
- "Failed to get protocol list from Home Server": "Het is mislukt om de protocol lijst op te halen van de home server",
- "Failed to get public room list": "Het is mislukt om de lijst van publieke kamers op te halen",
- "Failed to join the room": "Het is mislukt om de kamer toe te treden",
- "Failed to remove tag %(tagName)s from room": "Het is mislukt om de label %(tagName)s van de kamer te verwijderen",
+ "Failed to change settings": "Instellingen wijzigen mislukt",
+ "Failed to forget room %(errCode)s": "Kamer vergeten mislukt %(errCode)s",
+ "Failed to update keywords": "Sleutelwoorden bijwerken mislukt",
+ "Failed to get protocol list from Home Server": "Protocollijst ophalen van de homeserver mislukt",
+ "Failed to get public room list": "Lijst met publieke kamers ophalen mislukt",
+ "Failed to join the room": "Kamer binnengaan mislukt",
+ "Failed to remove tag %(tagName)s from room": "Label %(tagName)s van de kamer verwijderen mislukt",
"Failed to set direct chat tag": "Het is mislukt om de privé chat label weg te halen",
"Favourite": "Favoriet",
"Fetching third party location failed": "Het ophalen van de locatie van de derde partij is mislukt",
@@ -54,38 +54,38 @@
"Mentions only": "Alleen vermeldingen",
"Messages containing my display name": "Berichten die mijn weergavenaam bevatten",
"Messages containing my user name": "Berichten die mijn gebruikersnaam bevatten",
- "Messages in group chats": "Berichten in groep gesprekken",
- "Messages in one-to-one chats": "Berichten in één-op-één gesprekken",
+ "Messages in group chats": "Berichten in groepsgesprekken",
+ "Messages in one-to-one chats": "Berichten in één-op-één-gesprekken",
"Messages sent by bot": "Berichten verzonden bij een bot",
"more": "meer",
"Mute": "Dempen",
"No rooms to show": "Geen kamers om te laten zien",
"Noisy": "Luidruchtig",
"Notification targets": "Notificatie doelen",
- "Notifications": "Notificaties",
+ "Notifications": "Meldingen",
"Notifications on the following keywords follow rules which can’t be displayed here:": "Notificaties op de volgende trefwoorden volgen regels die hier niet kunnen worden laten zien:",
"Notify for all other messages/rooms": "Informeer mij voor alle andere berichten/kamers",
"Notify me for anything else": "Informeer mij voor al het andere",
"Off": "Uit",
"On": "Aan",
"Operation failed": "Actie mislukt",
- "Permalink": "Permalink",
- "Please Register": "Registreer alsjeblieft",
- "powered by Matrix": "aangedreven door Matrix",
- "Quote": "Quote",
+ "Permalink": "Permanente link",
+ "Please Register": "Registreer alstublieft",
+ "powered by Matrix": "mogelijk gemaakt door Matrix",
+ "Quote": "Citaat",
"Reject": "Afwijzen",
- "Remove %(name)s from the directory?": "Verwijder %(name)s uit de kamer lijst?",
- "Remove": "Verwijder",
- "remove %(name)s from the directory.": "verwijder %(name)s uit de kamer lijst.",
- "Remove from Directory": "Verwijder uit de kamer lijst",
+ "Remove %(name)s from the directory?": "%(name)s uit de kamerlijst verwijderen?",
+ "Remove": "Verwijderen",
+ "remove %(name)s from the directory.": "verwijder %(name)s uit de kamerlijst.",
+ "Remove from Directory": "Uit de kamerlijst verwijderen",
"Resend": "Opnieuw verzenden",
"Riot does not know how to join a room on this network": "Riot weet niet hoe het moet toetreden tot een kamer op dit netwerk",
- "Room directory": "Kamer lijst",
+ "Room directory": "Kamerlijst",
"Room not found": "De kamer is niet gevonden",
- "Search for a room": "Zoek naar een kamer",
+ "Search for a room": "Een kamer zoeken",
"Settings": "Instellingen",
"Source URL": "Bron URL",
- "Start chat": "Start gesprek",
+ "Start chat": "Gesprek starten",
"The Home Server may be too old to support third party networks": "De home server is misschien te oud om netwerken van derde partijen te ondersteunen",
"There are advanced notifications which are not shown here": "Er zijn geavanceerde notificaties die hier niet worden laten zien",
"The server may be unavailable or overloaded": "De server is misschien niet beschikbaar of overbeladen",
@@ -95,7 +95,7 @@
"Unable to join network": "Het is mislukt om toe te treden tot dit netwerk",
"Unable to look up room ID from server": "Het is mislukt om de kamer ID op te halen van de server",
"Unhide Preview": "Zichtbaar maken preview",
- "unknown error code": "niet bekende foutcode",
+ "unknown error code": "onbekende foutcode",
"Unnamed room": "Kamer zonder naam",
"Uploaded on %(date)s by %(user)s": "Geüpload op %(date)s door %(user)s",
"View Decrypted Source": "Bekijk gedecodeerde bron",
@@ -115,11 +115,77 @@
"Saturday": "Zaterdag",
"Today": "Vandaag",
"Yesterday": "Gisteren",
- "Welcome page": "Welkom pagina",
- "Drop here %(toAction)s": "%(toAction)s hier naar toe verplaatsen",
+ "Welcome page": "Welkomstpagina",
+ "Drop here %(toAction)s": "%(toAction)s hier naartoe verplaatsen",
"Failed to set Direct Message status of room": "Het is mislukt om de directe berichten status van de kamer in te stellen",
"Redact": "Redigeren",
- "A new version of Riot is available.": "Nieuwe Riot versie is beschikbaar.",
- "All Rooms": "Alle Kamers",
- "Cancel": "Annuleer"
+ "A new version of Riot is available.": "Nieuwe Riot-versie is beschikbaar.",
+ "All Rooms": "Alle kamers",
+ "Cancel": "Annuleren",
+ "Safari and Opera work too.": "Safari en Opera werken ook.",
+ "Changelog": "Logboek van wijzigingen",
+ "Collapse panel": "Paneel inklappen",
+ "Collecting app version information": "App-versieinformatie verzamelen",
+ "Collecting logs": "Logboeken verzamelen",
+ "Describe your problem here.": "Beschrijf uw probleem hier.",
+ "Expand panel": "Paneel uitklappen",
+ "Failed to send report: ": "Rapport verzenden mislukt: ",
+ "Forward Message": "Bericht doorsturen",
+ "Hide panel": "Paneel verbergen",
+ " (HTTP status %(httpStatus))": "(HTTP-status %(httpStatus))",
+ "I understand the risks and wish to continue": "Ik begrijp de risico's en wil graag verder gaan",
+ "Login": "Aanmelden",
+ "Loading bug report module": "Bugrapporteermodule laden",
+ "Messages containing keywords": "Berichten die sleutelwoorden bevatten",
+ "Please install Chrome or Firefox for the best experience.": "Installeer Chrome of Firefox voor de beste ervaring.",
+ "Report a bug": "Een bug rapporteren",
+ "Riot Desktop on %(platformName)s": "Riot Desktop op %(platformName)s",
+ "Riot is not supported on mobile web. Install the app?": "Riot wordt niet ondersteund op het mobiele web. De app installeren?",
+ "Search": "Zoeken",
+ "Search…": "Zoeken…",
+ "Send": "Versturen",
+ "Send logs": "Logboeken versturen",
+ "Sorry, your browser is not able to run Riot.": "Sorry, uw browser werkt niet met Riot.",
+ "This Room": "Deze ruimte",
+ "Unavailable": "Niet beschikbaar",
+ "Unknown device": "Onbekend apparaat",
+ "Update": "Bijwerken",
+ "Uploading report": "Rapport uploaden",
+ "What's New": "Wat is er nieuw",
+ "What's new?": "Wat is er nieuw?",
+ "Waiting for response from server": "Wachten op antwoord van de server",
+ "You are Rioting as a guest. Register or sign in to access more rooms and features!": "U gebruikt Riot als gast. Registreren of aanmelden om voor meer ruimtes en functies!",
+ "OK": "OK",
+ "You need to be using HTTPS to place a screen-sharing call.": "U moet HTTPS gebruiken om een oproep met schermdelen te kunnen starten.",
+ "Welcome to Riot.im": "Welkom bij Riot.im",
+ "Decentralised, encrypted chat & collaboration powered by [matrix]": "Gedecentaliseerd en versleuteld chatten & samenwerking mogelijk gemaakt door [matrix]",
+ "Search the room directory": "De kamerlijst doorzoeken",
+ "Chat with Riot Bot": "Met Riot Bot chatten",
+ "Get started with some tips from Riot Bot!": "Begin met enkele tips van Riot-bot!",
+ "General discussion about Matrix and Riot": "Algemene discussie over Matrix en Riot",
+ "Discussion of all things Matrix!": "Discussie over alle Matrix-dingen!",
+ "Riot/Web & Desktop chat": "Riot/Web & Desktop-chat",
+ "Riot/iOS & matrix-ios-sdk chat": "Riot/iOS & matrix-ios-sdk-chat",
+ "Riot/Android & matrix-android-sdk chat": "Riot/Android & matrix-android-sdk-chat",
+ "Matrix technical discussions": "Technische discussies over Matrix",
+ "Running Matrix services": "Matrixdiensten beheren",
+ "Community-run support for Synapse": "Synapse-ondersteuning vanuit de gemeenschap",
+ "Admin support for Dendrite": "Beheerondersteuning voor Dendrite",
+ "Announcements about Synapse releases": "Aankondigingen over Synapse-uitgaven",
+ "Support for those using and running matrix-appservice-irc": "Ondersteuning voor hen die matrix-appservice-irc gebruiken en beheren",
+ "Building services on Matrix": "Diensten op Matrix bouwen",
+ "Support for those using the Matrix spec": "Ondersteuning voor hen die de Matrix-specificatie gebruiken",
+ "Contributing code to Matrix and Riot": "Code bijdragen aan Matrix en Riot",
+ "Lots of rooms already exist in Matrix, linked to existing networks (Slack, IRC, Gitter etc) or independent. Check out the directory!": "Veel ruimtes bestaan al in Matrix, gelinkt aan bestaande netwerken (Slack, IRC, Gitter enz.) of onafhankelijk. Bekijk de kamerlijst!",
+ "Failed to change password. Is your password correct?": "Wachtwoord wijzigen mislukt. Is uw wachtwoord juist?",
+ "You have successfully set a password!": "U heeft met succes een wachtwoord ingesteld!",
+ "You can now return to your account after signing out, and sign in on other devices.": "U kunt nu terugkeren naar uw account nadat u bent afgemeld, en aanmelden op andere apparaten.",
+ "Continue": "Doorgaan",
+ "Please set a password!": "Stel een wachtwoord in!",
+ "This will allow you to return to your account after signing out, and sign in on other devices.": "Hiermee kunt u naar uw account terugkeren nadat u zich heeft afgemeld, en aanmelden op andere apparaten.",
+ "%(appName)s via %(browserName)s on %(osName)s": "%(appName)s via %(browserName)s op %(osName)s",
+ "Please describe the bug. What did you do? What did you expect to happen? What actually happened?": "Beschrijf de bug. Wat deed u? Wat verwachtte u? Wat gebeurde er in werkelijkheid?",
+ "Please describe the bug and/or send logs.": "Beschrijf de bug en/of verstuur logboeken.",
+ "Riot uses many advanced browser features, some of which are not available or experimental in your current browser.": "Riot gebrukt veel geavanceerde browserfuncties, waarvan enkele niet of experimenteel in uw webbrowser beschikbaar zijn.",
+ "Co-ordination for Riot/Web translators": "Coördinatie voor Riot/Web-vertalers"
}
From 278bd61ad9711f89688ac7e794115dd4999d4e23 Mon Sep 17 00:00:00 2001
From: Travis Ralston
Date: Mon, 12 Jun 2017 22:22:45 +0000
Subject: [PATCH 053/213] Translated using Weblate (English (United States))
Currently translated at 100.0% (198 of 198 strings)
Translation: Riot Web/riot-web
Translate-URL: https://translate.riot.im/projects/riot-web/riot-web/en_US/
---
src/i18n/strings/en_US.json | 31 ++++++++++++++++++++++++++++++-
1 file changed, 30 insertions(+), 1 deletion(-)
diff --git a/src/i18n/strings/en_US.json b/src/i18n/strings/en_US.json
index 8500886541..63fadbe006 100644
--- a/src/i18n/strings/en_US.json
+++ b/src/i18n/strings/en_US.json
@@ -167,5 +167,34 @@
" (HTTP status %(httpStatus))": "(HTTP status %(httpStatus))",
"Welcome to Riot.im": "Welcome to Riot.im",
"Decentralised, encrypted chat & collaboration powered by [matrix]": "Decentralised, encrypted chat & collaboration powered by [matrix]",
- "Chat with Riot Bot": "Chat with Riot Bot"
+ "Chat with Riot Bot": "Chat with Riot Bot",
+ "Search the room directory": "Search the room directory",
+ "Get started with some tips from Riot Bot!": "Get started with some tips from Riot Bot!",
+ "General discussion about Matrix and Riot": "General discussion about Matrix and Riot",
+ "Discussion of all things Matrix!": "Discussion of all things Matrix!",
+ "Matrix technical discussions": "Matrix technical discussions",
+ "Running Matrix services": "Running Matrix services",
+ "Community-run support for Synapse": "Community-run support for Synapse",
+ "Admin support for Dendrite": "Admin support for Dendrite",
+ "Announcements about Synapse releases": "Announcements about Synapse releases",
+ "Support for those using and running matrix-appservice-irc": "Support for those using and running matrix-appservice-irc",
+ "Building services on Matrix": "Building services on Matrix",
+ "Support for those using the Matrix spec": "Support for those using the Matrix spec",
+ "Design and implementation of E2E in Matrix": "Design and implementation of E2E in Matrix",
+ "Implementing VR services with Matrix": "Implementing VR services with Matrix",
+ "Implementing VoIP services with Matrix": "Implementing VoIP services with Matrix",
+ "Discussion of the Identity Service API": "Discussion of the Identity Service API",
+ "Support for those using, running and writing other bridges": "Support for those using, running and writing other bridges",
+ "Contributing code to Matrix and Riot": "Contributing code to Matrix and Riot",
+ "Dev chat for the Riot/Web dev team": "Dev chat for the Riot/Web dev team",
+ "Dev chat for the Dendrite dev team": "Dev chat for the Dendrite dev team",
+ "Co-ordination for Riot/Web translators": "Co-ordination for Riot/Web translators",
+ "Lots of rooms already exist in Matrix, linked to existing networks (Slack, IRC, Gitter etc) or independent. Check out the directory!": "Lots of rooms already exist in Matrix, linked to existing networks (Slack, IRC, Gitter etc) or independent. Check out the directory!",
+ "You have successfully set a password!": "You have successfully set a password!",
+ "You can now return to your account after signing out, and sign in on other devices.": "You can now return to your account after signing out, and sign in on other devices.",
+ "Please set a password!": "Please set a password!",
+ "This will allow you to return to your account after signing out, and sign in on other devices.": "This will allow you to return to your account after signing out, and sign in on other devices.",
+ "Riot/Android & matrix-android-sdk chat": "Riot/Android & matrix-android-sdk chat",
+ "Riot/Web & Desktop chat": "Riot/Web & Desktop chat",
+ "Riot/iOS & matrix-ios-sdk chat": "Riot/iOS & matrix-ios-sdk chat"
}
From 5e530a20658cabafe3a70aeb2a90b04c473b00d0 Mon Sep 17 00:00:00 2001
From: David Baker
Date: Tue, 13 Jun 2017 10:06:10 +0100
Subject: [PATCH 054/213] New icons for riot-ios & riot-translations
---
res/home/rooms/riot-ios.png | Bin 3828 -> 5324 bytes
res/home/rooms/riot-translations.png | Bin 146 -> 8409 bytes
2 files changed, 0 insertions(+), 0 deletions(-)
diff --git a/res/home/rooms/riot-ios.png b/res/home/rooms/riot-ios.png
index 83306f7cb8bae371ca455a6ff601a89fe624cf8e..6a0c598fe579a63739302ec951760936f69da3f4 100644
GIT binary patch
literal 5324
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
qwZS1lZE#3X8yphU28RT-!T$qEf`uj-&gkl
diff --git a/res/home/rooms/riot-translations.png b/res/home/rooms/riot-translations.png
index ee0f85589570374f5e1dec95ff7867a6c731f7bf..2ae95836e70a2e56e5f666be9bbee8b3053a62f2 100644
GIT binary patch
literal 8409
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
Date: Mon, 12 Jun 2017 21:48:12 +0000
Subject: [PATCH 055/213] Translated using Weblate (Dutch)
Currently translated at 95.4% (189 of 198 strings)
Translation: Riot Web/riot-web
Translate-URL: https://translate.riot.im/projects/riot-web/riot-web/nl/
---
src/i18n/strings/nl.json | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/i18n/strings/nl.json b/src/i18n/strings/nl.json
index ac8cf1fb60..d9e459d551 100644
--- a/src/i18n/strings/nl.json
+++ b/src/i18n/strings/nl.json
@@ -15,7 +15,7 @@
"customServer_text": "U kunt de aangepaste serverinstellingen gebruiken om in te loggen bij andere Matrix-servers door een andere homeserver-URL in te voeren.
Dit maakt het mogelijk om Riot te gebruiken met een bestaand Matrix-account op een andere homeserver.
U kunt ook een aangepaste identiteitsserver instellen, maar het is dan niet mogelijk om gebruikers uit te nodigen met behulp van een e-mailadres of zelf uitgenodigd te worden met een e-mailadres.",
"delete the alias.": "verwijder de alias.",
"Delete the room alias %(alias)s and remove %(name)s from the directory?": "De alias %(alias)s verwijderen en %(name)s uit de kamerlijst verwijderen?",
- "Direct Chat": "Direct chatten",
+ "Direct Chat": "Privégesprek",
"Directory": "Kamerlijst",
"Dismiss": "Afwijzen",
"Download this file": "Download dit bestand",
From 5812dd8f3f1110ad42dc3c00496d454cd609895e Mon Sep 17 00:00:00 2001
From: Jean
Date: Tue, 13 Jun 2017 09:05:39 +0000
Subject: [PATCH 056/213] Translated using Weblate (French)
Currently translated at 92.9% (184 of 198 strings)
Translation: Riot Web/riot-web
Translate-URL: https://translate.riot.im/projects/riot-web/riot-web/fr/
---
src/i18n/strings/fr.json | 19 ++++++++++++++++++-
1 file changed, 18 insertions(+), 1 deletion(-)
diff --git a/src/i18n/strings/fr.json b/src/i18n/strings/fr.json
index cc5d2d24fc..c57a6d17d3 100644
--- a/src/i18n/strings/fr.json
+++ b/src/i18n/strings/fr.json
@@ -167,5 +167,22 @@
"Continue": "Continuer",
"Please set a password!": "Veuillez paramétrer un mot de passe !",
"You can now return to your account after signing out, and sign in on other devices.": "Vous pouvez maintenant revenir sur votre compte après vous être déconnecté, et vous identifier sur d'autres appareils.",
- "This will allow you to return to your account after signing out, and sign in on other devices.": "Cela vous permettra de retourner sur votre compte après vous être déconnecté, et de vous identifier sur d'autres appareils."
+ "This will allow you to return to your account after signing out, and sign in on other devices.": "Cela vous permettra de retourner sur votre compte après vous être déconnecté, et de vous identifier sur d'autres appareils.",
+ "Welcome to Riot.im": "Bienvenue sur Riot.im",
+ " (HTTP status %(httpStatus))": "(statut HTTP %(httpStatus))",
+ "Login": "S'identifier",
+ "Chat with Riot Bot": "Discussion avec le Robot Riot",
+ "Search the room directory": "Rechercher dans le répertoire de salon",
+ "Get started with some tips from Riot Bot!": "Démarrer avec quelques astuces du Robot Riot !",
+ "Riot/Android & matrix-android-sdk chat": "Discussions Riot/Android & matrix-android-sd",
+ "Riot/iOS & matrix-ios-sdk chat": "Discussions Riot/iOS & matrix-ios-sdk",
+ "General discussion about Matrix and Riot": "Discussion générale sur Matrix et Riot",
+ "Riot/Web & Desktop chat": "Discussions Riot/Web & Desktop",
+ "Running Matrix services": "Exécution de services Matrix",
+ "Admin support for Dendrite": "Support admin pour Dendrite",
+ "Announcements about Synapse releases": "Communiqués sur les nouvelles versions de Synapses",
+ "Matrix technical discussions": "Discussions techniques sur Matrix",
+ "Community-run support for Synapse": "Support communautaire sur Synape",
+ "Support for those using and running matrix-appservice-irc": "Support pour ceux qui utilisent et exécutent matrix-appservice-irc",
+ "Building services on Matrix": ""
}
From e2f2d3469879cfbe9b7b2895cb6c30f783cb7eb7 Mon Sep 17 00:00:00 2001
From: Tom Tryfonidis
Date: Tue, 13 Jun 2017 10:45:15 +0000
Subject: [PATCH 057/213] Translated using Weblate (Greek)
Currently translated at 100.0% (198 of 198 strings)
Translation: Riot Web/riot-web
Translate-URL: https://translate.riot.im/projects/riot-web/riot-web/el/
---
src/i18n/strings/el.json | 16 ++++++++--------
1 file changed, 8 insertions(+), 8 deletions(-)
diff --git a/src/i18n/strings/el.json b/src/i18n/strings/el.json
index c060f3bdb3..821f2aa778 100644
--- a/src/i18n/strings/el.json
+++ b/src/i18n/strings/el.json
@@ -21,7 +21,7 @@
"Enable audible notifications in web client": "Ενεργοποίηση ηχητικών ειδοποιήσεων",
"Enable email notifications": "Ενεργοποίηση ειδοποιήσεων μέσω μηνυμάτων ηλ. αλληλογραφίας",
"Enable notifications for this account": "Ενεργοποίηση ειδοποιήσεων για τον λογαριασμό",
- "Enter keywords separated by a comma:": "Πρόσθεσε λέξεις κλειδιά χωρισμένες με κόμμα:",
+ "Enter keywords separated by a comma:": "Προσθέστε λέξεις κλειδιά χωρισμένες με κόμμα:",
"Error": "Σφάλμα",
"#example": "#παράδειγμα",
"Expand panel": "Μεγιστοποίηση καρτέλας",
@@ -86,7 +86,7 @@
"Update": "Ενημέρωση",
"Enable desktop notifications": "Ενεργοποίηση ειδοποιήσεων στην επιφάνεια εργασίας",
"Error saving email notification preferences": "Σφάλμα κατά την αποθήκευση των προτιμήσεων",
- "Failed to send report: ": "Απέτυχε η αποστολή της αναφοράς: ",
+ "Failed to send report: ": "Δεν ήταν δυνατή η αποστολή της αναφοράς: ",
"Loading bug report module": "Φόρτωση μονάδας αναφοράς σφαλμάτων",
"Mentions only": "Μόνο αναφορές",
"Messages containing my display name": "Μηνύματα που περιέχουν το όνομα μου",
@@ -167,11 +167,11 @@
"Get started with some tips from Riot Bot!": "Ξεκινήστε με μερικές συμβουλές από το Riot Bot!",
"General discussion about Matrix and Riot": "Γενική συζήτηση σχετικά με Matrix και Riot",
"Discussion of all things Matrix!": "Συζήτηση για όλα τα πράγματα του Matrix!",
- "Riot/Web & Desktop chat": "Συνομιλία για Riot/Web & Desktop",
- "Riot/iOS & matrix-ios-sdk chat": "Συνομιλία για Riot/iOS & matrix-ios-sdk",
- "Riot/Android & matrix-android-sdk chat": "Συνομιλία για Riot/Android & matrix-android-sdk",
+ "Riot/Web & Desktop chat": "Συζήτηση για το Riot/Web & Desktop",
+ "Riot/iOS & matrix-ios-sdk chat": "Συζήτηση για το Riot/iOS & matrix-ios-sdk",
+ "Riot/Android & matrix-android-sdk chat": "Συζήτηση για το Riot/Android & matrix-android-sdk",
"Matrix technical discussions": "Τεχνικές συζητήσεις σχετικά με το Matrix",
- "Running Matrix services": "Εκτέλεση υπηρεσιών Matrix",
+ "Running Matrix services": "Χρησιμοποιώντας τις υπηρεσίες του Matrix",
"Community-run support for Synapse": "Κοινοτική υποστήριξη για το Synapse",
"Admin support for Dendrite": "Υποστήριξη διαχειριστή για το Dendrite",
"Announcements about Synapse releases": "Ανακοινώσεις σχετικά με τις εκδόσεις του Synapse",
@@ -183,8 +183,8 @@
"Implementing VoIP services with Matrix": "Υλοποίηση υπηρεσίων VoIP με το Matrix",
"Discussion of the Identity Service API": "Συζήτηση σχετικά με το Identity Service API",
"Contributing code to Matrix and Riot": "Συνεισφορά κώδικα στο Matrix και Riot",
- "Dev chat for the Riot/Web dev team": "Συνομιλία για την ομάδα ανάπτυξης του Riot/Web",
- "Dev chat for the Dendrite dev team": "Συνομιλία για την ομάδα ανάπτυξης του Dendrite",
+ "Dev chat for the Riot/Web dev team": "Συζήτηση με την ομάδα ανάπτυξης του Riot/Web",
+ "Dev chat for the Dendrite dev team": "Συζήτηση με την ομάδα ανάπτυξης του Dendrite",
"Co-ordination for Riot/Web translators": "Συντονισμός για μεταφραστές του Riot/Web",
"Lots of rooms already exist in Matrix, linked to existing networks (Slack, IRC, Gitter etc) or independent. Check out the directory!": "Αρκετά δωμάτια υπάρχουν ήδη στο Matrix, συνδεδεμένα σε υπάρχοντα δίκτυα (Slack, IRC, Gitter κ.λπ) ή αυτόνομα. Ρίξτε μια ματιά στο ευρετήριο!",
"Failed to change password. Is your password correct?": "Δεν ήταν δυνατή η αλλαγή του κωδικού πρόσβασης. Είναι σωστός ο κωδικός πρόσβασης;",
From aa07266f12e53519291df9a6d221f8dd8d40052a Mon Sep 17 00:00:00 2001
From: Richard van der Hoff
Date: Tue, 13 Jun 2017 12:52:35 +0100
Subject: [PATCH 058/213] Test that we handle stored mx_last_room_id correctly
* Do we show the last room correctly on resume?
* Do we show the home page if we have no last room?
* If we follow a login link, and re-log-in, do we correctly vape the
mx_last_room_id (#4283)
---
test/app-tests/loading.js | 124 +++++++++++++++++++++++++++++---------
1 file changed, 95 insertions(+), 29 deletions(-)
diff --git a/test/app-tests/loading.js b/test/app-tests/loading.js
index b6e4324f27..3f98b4f11b 100644
--- a/test/app-tests/loading.js
+++ b/test/app-tests/loading.js
@@ -222,33 +222,7 @@ describe('loading:', function () {
// Wait for another trip around the event loop for the UI to update
return q.delay(1);
}).then(() => {
- // we expect a single component
- let login = ReactTestUtils.findRenderedComponentWithType(
- matrixChat, sdk.getComponent('structures.login.Login'));
- httpBackend.when('POST', '/login').check(function(req) {
- console.log(req);
- expect(req.data.type).toEqual('m.login.password');
- expect(req.data.identifier.type).toEqual('m.id.user');
- expect(req.data.identifier.user).toEqual('user');
- expect(req.data.password).toEqual('pass');
- }).respond(200, {
- user_id: '@user:id',
- device_id: 'DEVICE_ID',
- access_token: 'access_token',
- });
- login.onPasswordLogin("user", undefined, undefined, "pass")
- return httpBackend.flush();
- }).then(() => {
- // Wait for another trip around the event loop for the UI to update
- return q.delay(1);
- }).then(() => {
- // we expect a spinner
- ReactTestUtils.findRenderedComponentWithType(
- matrixChat, sdk.getComponent('elements.Spinner'));
-
- httpBackend.when('GET', '/pushrules').respond(200, {});
- httpBackend.when('POST', '/filter').respond(200, { filter_id: 'fid' });
- return expectAndAwaitSync();
+ return completeLogin(matrixChat);
}).then(() => {
// once the sync completes, we should have a room view
return awaitRoomView(matrixChat);
@@ -271,9 +245,30 @@ describe('loading:', function () {
localStorage.setItem("mx_is_url", "http://localhost" );
localStorage.setItem("mx_access_token", "access_token");
localStorage.setItem("mx_user_id", "@me:localhost");
+ localStorage.setItem("mx_last_room_id", "!last_room:id");
+ });
+
+ it('shows the last known room by default', function() {
+ httpBackend.when('GET', '/pushrules').respond(200, {});
+ httpBackend.when('POST', '/filter').respond(200, { filter_id: 'fid' });
+
+ loadApp();
+
+ return awaitSyncingSpinner(matrixChat).then(() => {
+ // we got a sync spinner - let the sync complete
+ return expectAndAwaitSync();
+ }).then(() => {
+ // once the sync completes, we should have a room view
+ return awaitRoomView(matrixChat);
+ }).then(() => {
+ httpBackend.verifyNoOutstandingExpectation();
+ expect(windowLocation.hash).toEqual("#/room/!last_room:id");
+ });
});
it('shows a home page by default if we have no joined rooms', function(done) {
+ localStorage.removeItem("mx_last_room_id");
+
httpBackend.when('GET', '/pushrules').respond(200, {});
httpBackend.when('POST', '/filter').respond(200, { filter_id: 'fid' });
@@ -309,7 +304,37 @@ describe('loading:', function () {
httpBackend.verifyNoOutstandingExpectation();
expect(windowLocation.hash).toEqual("#/room/!room:id");
}).done(done, done);
+ });
+ describe('/#/login link:', function() {
+ beforeEach(function() {
+ httpBackend.when('GET', '/pushrules').respond(200, {});
+ httpBackend.when('POST', '/filter').respond(200, { filter_id: 'fid' });
+
+ loadApp({
+ uriFragment: "#/login",
+ });
+
+ return expectAndAwaitSync().then(() => {
+ return q.delay(1);
+ });
+ });
+
+ it('shows a login view', function() {
+ // we expect a single component
+ const login = ReactTestUtils.findRenderedComponentWithType(
+ matrixChat, sdk.getComponent('structures.login.Login')
+ );
+ });
+
+ it('shows the homepage after login', function() {
+ return completeLogin(matrixChat).then(() => {
+ // we should see a home page if we previously had no room
+ ReactTestUtils.findRenderedComponentWithType(
+ matrixChat, sdk.getComponent('structures.HomePage'));
+ expect(windowLocation.hash).toEqual("#/home");
+ });
+ });
});
});
@@ -450,6 +475,45 @@ describe('loading:', function () {
}).done(done, done);
});
});
+
+
+ // check that we have a Login component, send a 'user:pass' login,
+ // and await the HTTP requests.
+ function completeLogin(matrixChat) {
+ // we expect a single component
+ const login = ReactTestUtils.findRenderedComponentWithType(
+ matrixChat, sdk.getComponent('structures.login.Login'));
+
+ httpBackend.when('POST', '/login').check(function(req) {
+ console.log(req);
+ expect(req.data.type).toEqual('m.login.password');
+ expect(req.data.identifier.type).toEqual('m.id.user');
+ expect(req.data.identifier.user).toEqual('user');
+ expect(req.data.password).toEqual('pass');
+ }).respond(200, {
+ user_id: '@user:id',
+ device_id: 'DEVICE_ID',
+ access_token: 'access_token',
+ });
+ login.onPasswordLogin("user", undefined, undefined, "pass");
+
+ return httpBackend.flush().then(() => {
+ // Wait for another trip around the event loop for the UI to update
+ return q.delay(1);
+ }).then(() => {
+ // we expect a spinner
+ ReactTestUtils.findRenderedComponentWithType(
+ matrixChat, sdk.getComponent('elements.Spinner'));
+
+ httpBackend.when('GET', '/pushrules').respond(200, {});
+ httpBackend.when('POST', '/filter').respond(200, { filter_id: 'fid' });
+ return expectAndAwaitSync().catch((e) => {
+ throw new Error("Never got /sync after login: did the client start?");
+ });
+ }).then(() => {
+ httpBackend.verifyNoOutstandingExpectation();
+ });
+ }
});
// assert that we are on the loading page
@@ -465,7 +529,7 @@ function assertAtLoadingSpinner(matrixChat) {
// the page includes a logout link.
function awaitSyncingSpinner(matrixChat, retryLimit, retryCount) {
if (retryLimit === undefined) {
- retryLimit = 5;
+ retryLimit = 10;
}
if (retryCount === undefined) {
retryCount = 0;
@@ -477,7 +541,9 @@ function awaitSyncingSpinner(matrixChat, retryLimit, retryCount) {
throw new Error("MatrixChat still not loaded after " +
retryCount + " tries");
}
- return q.delay(0).then(() => {
+ // loading can take quite a long time, because we delete the
+ // indexedDB store.
+ return q.delay(5).then(() => {
return awaitSyncingSpinner(matrixChat, retryLimit, retryCount + 1);
});
}
From dfd9f7c27b86f43697c95a417c84c7ec3b02e307 Mon Sep 17 00:00:00 2001
From: David Baker
Date: Tue, 13 Jun 2017 10:06:10 +0100
Subject: [PATCH 059/213] New icons for riot-ios & riot-translations
---
res/home/rooms/riot-ios.png | Bin 3828 -> 5324 bytes
res/home/rooms/riot-translations.png | Bin 146 -> 8409 bytes
2 files changed, 0 insertions(+), 0 deletions(-)
diff --git a/res/home/rooms/riot-ios.png b/res/home/rooms/riot-ios.png
index 83306f7cb8bae371ca455a6ff601a89fe624cf8e..6a0c598fe579a63739302ec951760936f69da3f4 100644
GIT binary patch
literal 5324
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
qwZS1lZE#3X8yphU28RT-!T$qEf`uj-&gkl
diff --git a/res/home/rooms/riot-translations.png b/res/home/rooms/riot-translations.png
index ee0f85589570374f5e1dec95ff7867a6c731f7bf..2ae95836e70a2e56e5f666be9bbee8b3053a62f2 100644
GIT binary patch
literal 8409
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