Merge branch 'history' into historyOO

This commit is contained in:
yflory 2020-09-22 15:27:20 +02:00
commit 3ae8d983f7
17 changed files with 219 additions and 146 deletions

1
.gitignore vendored
View file

@ -1,6 +1,7 @@
datastore datastore
tasks tasks
www/bower_components/* www/bower_components/*
www/accounts
node_modules node_modules
/config.js /config.js
customization customization

View file

@ -15,6 +15,7 @@ www/common/onlyoffice/v2*
server.js server.js
www/common/old-media-tag.js www/common/old-media-tag.js
www/scratch www/scratch
www/accounts
www/lib www/lib
www/accounts www/accounts

View file

@ -16,6 +16,8 @@ To upgrade from 3.21.0 to 3.22.0:
## Features ## Features
* Contributors have helped by translating more of CryptPad into Finnish and traditional Chinese via [our weblate instance](https://weblate.cryptpad.fr/projects/cryptpad/app/) * Contributors have helped by translating more of CryptPad into Finnish and traditional Chinese via [our weblate instance](https://weblate.cryptpad.fr/projects/cryptpad/app/)
* We've updated the syntax highlighting code that we use throughout the platform to include Rustlang (and possibly other languages that have been updated in the meantime).
* You can now use _ctrl-f_ in user or team drives to jump immediately to the search interface instead of possibly scrolling up to click on its entry in the sidebar.
## Bug fixes ## Bug fixes

View file

@ -5,7 +5,7 @@ var map = {
'de': 'Deutsch', 'de': 'Deutsch',
'el': 'Ελληνικά', 'el': 'Ελληνικά',
'es': 'Español', 'es': 'Español',
'fi': 'Suomalainen', 'fi': 'Suomi',
'fr': 'Français', 'fr': 'Français',
//'hi': 'हिन्दी', //'hi': 'हिन्दी',
'it': 'Italiano', 'it': 'Italiano',

View file

@ -1281,6 +1281,9 @@ define([
cb(null, $container); cb(null, $container);
return { return {
$container: $container, $container: $container,
update: function () {
common.getPinUsage(teamId, todo);
},
stop: function () { stop: function () {
clearInterval(interval); clearInterval(interval);
} }

View file

@ -7,14 +7,15 @@ define([
'/common/hyperscript.js', '/common/hyperscript.js',
'/common/inner/common-mediatag.js', '/common/inner/common-mediatag.js',
'/common/media-tag.js', '/common/media-tag.js',
'/common/highlight/highlight.pack.js',
'/customize/messages.js', '/customize/messages.js',
'/common/highlight/highlight.pack.js',
'/bower_components/diff-dom/diffDOM.js', '/bower_components/diff-dom/diffDOM.js',
'/bower_components/tweetnacl/nacl-fast.min.js', '/bower_components/tweetnacl/nacl-fast.min.js',
'css!/common/highlight/styles/github.css' 'css!/common/highlight/styles/github.css'
],function ($, ApiConfig, Marked, Hash, Util, h, MT, MediaTag, Highlight, Messages) { ],function ($, ApiConfig, Marked, Hash, Util, h, MT, MediaTag, Messages) {
var DiffMd = {}; var DiffMd = {};
var Highlight = window.hljs;
var DiffDOM = window.diffDOM; var DiffDOM = window.diffDOM;
var renderer = new Marked.Renderer(); var renderer = new Marked.Renderer();
var restrictedRenderer = new Marked.Renderer(); var restrictedRenderer = new Marked.Renderer();

View file

@ -153,6 +153,17 @@ define([
var localStore = window.cryptpadStore; var localStore = window.cryptpadStore;
APP.store = {}; APP.store = {};
$(window).keydown(function (e) {
if (e.which === 70 && e.ctrlKey) {
e.preventDefault();
e.stopPropagation();
if (APP.displayDirectory) {
APP.displayDirectory([SEARCH]);
}
return;
}
});
var makeLS = function (teamId) { var makeLS = function (teamId) {
var suffix = teamId ? ('-' + teamId) : ''; var suffix = teamId ? ('-' + teamId) : '';
var LS_LAST = "app-drive-lastOpened" + suffix; var LS_LAST = "app-drive-lastOpened" + suffix;

File diff suppressed because one or more lines are too long

View file

@ -365,7 +365,9 @@ define([
})); }));
}); });
Messages.share_bar = "Generate link"; // XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX //Messages.share_bar = "Generate link"; // XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX
Messages.share_bar = Messages.team_inviteLinkCreate; // XXX
var linkButtons = [ var linkButtons = [
makeCancelButton(), makeCancelButton(),
!opts.sharedFolder && { !opts.sharedFolder && {

View file

@ -14,6 +14,7 @@ define(['json.sortify'], function (Sortify) {
var metadataLazyObj = UNINIT; var metadataLazyObj = UNINIT;
var priv = {}; var priv = {};
var dirty = true; var dirty = true;
var history = false;
var changeHandlers = []; var changeHandlers = [];
var lazyChangeHandlers = []; var lazyChangeHandlers = [];
var titleChangeHandlers = []; var titleChangeHandlers = [];
@ -60,7 +61,7 @@ define(['json.sortify'], function (Sortify) {
var mdo = {}; var mdo = {};
// We don't want to add our user data to the object multiple times. // We don't want to add our user data to the object multiple times.
Object.keys(metadataObj.users).forEach(function (x) { Object.keys(metadataObj.users).forEach(function (x) {
if (members.indexOf(x) === -1) { return; } if (members.indexOf(x) === -1 && !history) { return; }
mdo[x] = metadataObj.users[x]; mdo[x] = metadataObj.users[x];
}); });
if (!priv.readOnly) { if (!priv.readOnly) {
@ -161,6 +162,9 @@ define(['json.sortify'], function (Sortify) {
metadataLazyObj = JSON.parse(JSON.stringify(m)); metadataLazyObj = JSON.parse(JSON.stringify(m));
change(false); change(false);
}, },
refresh : function () {
change(true);
},
updateTitle: function (t) { updateTitle: function (t) {
metadataObj.title = t; metadataObj.title = t;
change(true); change(true);
@ -207,6 +211,9 @@ define(['json.sortify'], function (Sortify) {
if (isReady) { return void f(); } if (isReady) { return void f(); }
readyHandlers.push(f); readyHandlers.push(f);
}, },
setHistory: function (bool) {
history = bool;
}
}); });
}; };
return Object.freeze({ create: create }); return Object.freeze({ create: create });

View file

@ -1458,37 +1458,27 @@ define([
var getVersionHash = function (clientId, data) { var getVersionHash = function (clientId, data) {
var validateKey; var validateKey;
var fakeNetflux = Hash.createChannelId(); var fakeNetflux = Hash.createChannelId();
nThen(function (waitFor) { Store.getHistoryRange(clientId, {
Store.getPadMetadata(null, { cpCount: 1,
channel: data.channel channel: data.channel,
}, function (md) { lastKnownHash: data.versionHash
// XXX not needed? we don't need to validate messages coming from history keeper }, function (obj) {
validateKey = md.validateKey; if (obj && obj.error) {
postMessage(clientId, "PAD_ERROR", obj.error);
return;
}
postMessage(clientId, "PAD_CONNECT", {
myID: fakeNetflux,
id: data.channel,
members: [fakeNetflux]
}); });
}).nThen(function () { (obj.messages || []).forEach(function (data) {
Store.getHistoryRange(clientId, { postMessage(clientId, "PAD_MESSAGE", {
cpCount: 1, msg: data.msg,
channel: data.channel, user: fakeNetflux.slice(0,16), // fake history keeper to avoid validate
lastKnownHash: data.versionHash
}, function (obj) {
if (obj && obj.error) {
postMessage(clientId, "PAD_ERROR", obj.error);
return;
}
postMessage(clientId, "PAD_CONNECT", {
myID: fakeNetflux,
id: data.channel,
members: [fakeNetflux]
}); });
(obj.messages || []).forEach(function (data) {
postMessage(clientId, "PAD_MESSAGE", {
msg: data.msg,
user: fakeNetflux.slice(0,16), // fake history keeper to avoid validate
validateKey: validateKey
});
});
postMessage(clientId, "PAD_READY");
}); });
postMessage(clientId, "PAD_READY");
}); });
}; };

View file

@ -262,8 +262,12 @@ define([
}; };
var setHistoryMode = function (bool, update) { var setHistoryMode = function (bool, update) {
cpNfInner.metadataMgr.setHistory(bool);
stateChange((bool) ? STATE.HISTORY_MODE : STATE.READY); stateChange((bool) ? STATE.HISTORY_MODE : STATE.READY);
if (!bool && update) { onRemote(); } if (!bool && update) { onRemote(); }
else {
setTimeout(cpNfInner.metadataMgr.refresh);
}
}; };
/* /*
@ -692,7 +696,10 @@ define([
onRemote: onRemote, onRemote: onRemote,
setHistory: setHistoryMode, setHistory: setHistoryMode,
applyVal: function (val) { applyVal: function (val) {
contentUpdate(JSON.parse(val) || ["BODY",{},[]], function (h) { var newContent = JSON.parse(val);
var meta = extractMetadata(newContent);
cpNfInner.metadataMgr.updateMetadata(meta);
contentUpdate(normalize(newContent) || ["BODY",{},[]], function (h) {
return h; return h;
}); });
}, },

View file

@ -1,11 +1,12 @@
define([ define([
'jquery', 'jquery',
'/common/common-interface.js', '/common/common-interface.js',
'/common/hyperscript.js',
'/bower_components/nthen/index.js', '/bower_components/nthen/index.js',
//'/bower_components/chainpad-json-validator/json-ot.js', //'/bower_components/chainpad-json-validator/json-ot.js',
'/bower_components/chainpad/chainpad.dist.js', '/bower_components/chainpad/chainpad.dist.js',
], function ($, UI, nThen, ChainPad /* JsonOT */) { ], function ($, UI, h, nThen, ChainPad /* JsonOT */) {
//var ChainPad = window.ChainPad; //var ChainPad = window.ChainPad;
var History = {}; var History = {};
@ -107,6 +108,7 @@ define([
var states = []; var states = [];
var c = 0;//states.length - 1; var c = 0;//states.length - 1;
var semantic = false;
var $hist = $toolbar.find('.cp-toolbar-history'); var $hist = $toolbar.find('.cp-toolbar-history');
var $bottom = $toolbar.find('.cp-toolbar-bottom'); var $bottom = $toolbar.find('.cp-toolbar-bottom');
@ -128,7 +130,7 @@ define([
return states; return states;
}; };
var $loadMore, $version, get; var $loadMore, $version, $time, get;
// Get the content of the selected version, and change the version number // Get the content of the selected version, and change the version number
var loading = false; var loading = false;
@ -157,6 +159,14 @@ define([
if (cb) { cb(); } if (cb) { cb(); }
}); });
}; };
var getIndex = function (i) {
return states.length - 1 + i;
};
var getRank = function (idx) {
return idx - states.length + 1;
};
get = function (i, blockOnly) { get = function (i, blockOnly) {
i = parseInt(i); i = parseInt(i);
if (isNaN(i)) { return; } if (isNaN(i)) { return; }
@ -165,7 +175,20 @@ define([
if (i <= -(states.length - 11)) { if (i <= -(states.length - 11)) {
loadMore(); loadMore();
} }
var idx = states.length - 1 + i;
var idx = getIndex(i);
if (semantic) {
// If semantic is truc, jump to the next patch from a different netflux ID
var author = states[idx].author;
for (j = idx; (j > 1 && j < (states.length - 1)); ((i > c) ? j++ : j--)) {
idx = j;
i = getRank(idx);
if (author !== states[j].author) {
break;
}
}
}
if (blockOnly) { return states[idx]; } if (blockOnly) { return states[idx]; }
var val = states[idx].getContent().doc; var val = states[idx].getContent().doc;
@ -190,6 +213,10 @@ define([
// Note: the first version is always empty and probably can't be displayed, so // Note: the first version is always empty and probably can't be displayed, so
// we can consider we have only states.length - 1 versions // we can consider we have only states.length - 1 versions
$version.text(idx + ' / ' + (states.length-1)); $version.text(idx + ' / ' + (states.length-1));
var time = states[idx].time;
if (time) {
$time.text(new Date(time).toLocaleString());
} else { $time.text(''); }
if (config.debug) { if (config.debug) {
console.log(states[idx]); console.log(states[idx]);
@ -218,6 +245,11 @@ define([
title: Messages.history_restoreTitle title: Messages.history_restoreTitle
}).appendTo($hist);//.text(Messages.history_restore); }).appendTo($hist);//.text(Messages.history_restore);
if (History.readOnly) { $rev.css('visibility', 'hidden'); } if (History.readOnly) { $rev.css('visibility', 'hidden'); }
Messages.history_session = "Group by user"; // XXX
var $cbox = $(UI.createCheckbox('cp-history-session',
Messages.history_session,
false, { label: { class: 'noTitle' } })).appendTo($hist);
$('<span>', {'class': 'cp-history-filler'}).appendTo($hist); $('<span>', {'class': 'cp-history-filler'}).appendTo($hist);
var $fastPrev = $('<button>', { var $fastPrev = $('<button>', {
'class': 'cp-toolbar-history-fast-previous fa fa-fast-backward buttonPrimary', 'class': 'cp-toolbar-history-fast-previous fa fa-fast-backward buttonPrimary',
@ -241,6 +273,7 @@ define([
title: Messages.shareButton title: Messages.shareButton
}).appendTo($hist); }).appendTo($hist);
$('<span>', {'class': 'cp-history-filler'}).appendTo($hist); $('<span>', {'class': 'cp-history-filler'}).appendTo($hist);
$time = $(h('div')).appendTo($hist);
var $close = $('<button>', { var $close = $('<button>', {
'class':'cp-toolbar-history-close fa fa-window-close', 'class':'cp-toolbar-history-close fa fa-window-close',
title: Messages.history_closeTitle title: Messages.history_closeTitle
@ -285,6 +318,17 @@ define([
$(window).off('keyup', onKeyUp); $(window).off('keyup', onKeyUp);
}; };
var $checkbox = $cbox.find('input').on('change', function () {
semantic = $checkbox.is(':checked');
if (semantic) {
$fastPrev.hide();
$fastNext.hide();
} else {
$fastPrev.show();
$fastNext.show();
}
});
// Version buttons // Version buttons
$prev.click(function () { render(getPrevious()); }); $prev.click(function () { render(getPrevious()); });
$next.click(function () { render(getNext()); }); $next.click(function () { render(getNext()); });
@ -292,10 +336,10 @@ define([
$fastNext.click(function () { render(getNext(10)); }); $fastNext.click(function () { render(getNext(10)); });
onKeyDown = function (e) { onKeyDown = function (e) {
var p = function () { e.preventDefault(); }; var p = function () { e.preventDefault(); };
if ([37, 40].indexOf(e.which) >= 0) { p(); return render(getPrevious()); } // Left if ([37, 40].indexOf(e.which) >= 0) { p(); return $prev.click(); } // Left
if ([38, 39].indexOf(e.which) >= 0) { p(); return render(getNext()); } // Right if ([38, 39].indexOf(e.which) >= 0) { p(); return $next.click(); } // Right
if (e.which === 33) { p(); return render(getNext(10)); } // PageUp if (e.which === 33) { p(); return $fastNext.click(); } // PageUp
if (e.which === 34) { p(); return render(getPrevious(10)); } // PageUp if (e.which === 34) { p(); return $fastPrev.click(); } // PageUp
if (e.which === 27) { p(); $close.click(); } if (e.which === 27) { p(); $close.click(); }
}; };
onKeyUp = function (e) { e.stopPropagation(); }; onKeyUp = function (e) { e.stopPropagation(); };

View file

@ -345,7 +345,7 @@
"fm_info_recent": "Diese Pads wurden kürzlich von dir oder von Personen, mit denen du zusammenarbeitest, geöffnet oder geändert.", "fm_info_recent": "Diese Pads wurden kürzlich von dir oder von Personen, mit denen du zusammenarbeitest, geöffnet oder geändert.",
"fm_info_trash": "Leere den Papierkorb, um mehr freien Platz in deinem CryptDrive zu erhalten.", "fm_info_trash": "Leere den Papierkorb, um mehr freien Platz in deinem CryptDrive zu erhalten.",
"fm_info_allFiles": "Beinhaltet alle Dateien von \"Dokumente\", \"Unsortierte Dateien\" und \"Papierkorb\". Dateien können hier nicht verschoben oder entfernt werden.", "fm_info_allFiles": "Beinhaltet alle Dateien von \"Dokumente\", \"Unsortierte Dateien\" und \"Papierkorb\". Dateien können hier nicht verschoben oder entfernt werden.",
"fm_info_anonymous": "Du bist nicht eingeloggt, daher laufen die Pads nach 3 Monaten aus (<a href=\"https://blog.cryptpad.fr/2017/05/17/You-gotta-log-in/\" target=\"_blank\">mehr dazu lesen</a>). Der Zugang zu den Pads ist in deinem Browser gespeichert, daher wird das Löschen des Browserverlaufs sie möglicherweise verschwinden lassen.<br><a href=\"/register/\">Registriere dich</a> oder <a href=\"/login/\">logge dich ein</a>, um sie dauerhaft zugänglich zu machen.<br>", "fm_info_anonymous": "Du bist nicht eingeloggt, daher laufen deine Dokumente nach {0} Tagen aus. Sie könnten durch Löschen des Browserverlaufs verloren gehen. <br><a href=\"/register/\">Registriere dich</a> (keine persönlichen Informationen benötigt) oder <a href=\"/login/\">logge dich ein</a>, um sie dauerhaft in deinem Drive zu speichern. <a href=\"https://docs.cryptpad.fr/de/user_guide/user_account.html#account-types\" target=\"_blank\">Mehr zu registrierten Accounts</a>.",
"fm_info_sharedFolder": "Dieser Ordner ist geteilt. Da du aber nicht eingeloggt bist, hast du nur einen schreibgeschützen Zugriff.<br><a href=\"/register/\">Registriere</a> oder <a href=\"/login/\">logge ich ein</a>, damit du diesen Ordner in dein CryptDrive importieren und bearbeiten kannst.", "fm_info_sharedFolder": "Dieser Ordner ist geteilt. Da du aber nicht eingeloggt bist, hast du nur einen schreibgeschützen Zugriff.<br><a href=\"/register/\">Registriere</a> oder <a href=\"/login/\">logge ich ein</a>, damit du diesen Ordner in dein CryptDrive importieren und bearbeiten kannst.",
"fm_info_owned": "Diese Pads sind deine eigenen. Das heißt, dass du sie jederzeit vom Server entfernen kannst. Wenn du das machst, dann sind sie auch für andere Nutzer nicht mehr zugänglich.", "fm_info_owned": "Diese Pads sind deine eigenen. Das heißt, dass du sie jederzeit vom Server entfernen kannst. Wenn du das machst, dann sind sie auch für andere Nutzer nicht mehr zugänglich.",
"fm_alert_backupUrl": "Backup-Link für dieses CryptDrive.<br>Es wird <strong>dringend empfohlen</strong>, diesen Link geheim zu halten.<br>Du kannst ihn benutzen, um deine gesamten Dateien abzurufen, wenn dein Browserspeicher gelöscht wurde.<br>Jede Person, die diesen Link hat, kann die Dateien in deinem CryptDrive bearbeiten oder löschen.<br>", "fm_alert_backupUrl": "Backup-Link für dieses CryptDrive.<br>Es wird <strong>dringend empfohlen</strong>, diesen Link geheim zu halten.<br>Du kannst ihn benutzen, um deine gesamten Dateien abzurufen, wenn dein Browserspeicher gelöscht wurde.<br>Jede Person, die diesen Link hat, kann die Dateien in deinem CryptDrive bearbeiten oder löschen.<br>",
@ -1294,7 +1294,7 @@
"settings_safeLinksHint": "CryptPad fügt den Pad-Links die Schlüssel zum Entschlüsseln der Inhalte hinzu. Jeder, der Zugriff auf den Browserverlauf hat, kann möglicherweise die Daten lesen. Dazu gehören Browsererweiterungen und Browser, die den Verlauf geräteübergreifend synchronisieren. Die Aktivierung von \"sicheren Links\" verhindert, dass die Schlüssel in den Browserverlauf gelangen oder in der Adressleiste angezeigt werden, wann immer dies möglich ist. Wir empfehlen dringend, diese Funktion zu aktivieren und das Menü {0} Teilen zu verwenden.", "settings_safeLinksHint": "CryptPad fügt den Pad-Links die Schlüssel zum Entschlüsseln der Inhalte hinzu. Jeder, der Zugriff auf den Browserverlauf hat, kann möglicherweise die Daten lesen. Dazu gehören Browsererweiterungen und Browser, die den Verlauf geräteübergreifend synchronisieren. Die Aktivierung von \"sicheren Links\" verhindert, dass die Schlüssel in den Browserverlauf gelangen oder in der Adressleiste angezeigt werden, wann immer dies möglich ist. Wir empfehlen dringend, diese Funktion zu aktivieren und das Menü {0} Teilen zu verwenden.",
"dontShowAgain": "Nicht mehr anzeigen", "dontShowAgain": "Nicht mehr anzeigen",
"profile_login": "Du musst dich einloggen, um diesen Benutzer zu deinen Kontakten hinzuzufügen", "profile_login": "Du musst dich einloggen, um diesen Benutzer zu deinen Kontakten hinzuzufügen",
"safeLinks_error": "Dieser Link gibt dir keinen Zugriff auf das Dokument", "safeLinks_error": "Dieser Link wurde aus der Adresszeile des Browsers kopiert und ermöglicht keinen Zugriff auf das Dokument. Bitte verwende das Menü <i class=\"fa fa-shhare-alt\"></i> <b>Teilen</b>, um das Dokument direkt mit Kontakten zu teilen oder den Link zu kopieren. <a href=\"https://docs.cryptpad.fr/de/user_guide/user_account.html#confidentiality\">Mehr zu sicheren Links</a>.\n",
"settings_safeLinksCheckbox": "Sichere Links aktivieren", "settings_safeLinksCheckbox": "Sichere Links aktivieren",
"settings_safeLinksTitle": "Sichere Links", "settings_safeLinksTitle": "Sichere Links",
"settings_trimHistoryHint": "Spare Speicherplatz, indem du den Verlauf deines CryptDrives und der Benachrichtigungen löschst. Dies hat keinen Einfluss auf den Verlauf deiner Pads. Du kannst den Verlauf der Pads in deren Eigenschaften-Dialog löschen.", "settings_trimHistoryHint": "Spare Speicherplatz, indem du den Verlauf deines CryptDrives und der Benachrichtigungen löschst. Dies hat keinen Einfluss auf den Verlauf deiner Pads. Du kannst den Verlauf der Pads in deren Eigenschaften-Dialog löschen.",

View file

@ -471,7 +471,7 @@
"printBackgroundValue": "<b>Fondo de pantalla actual</b><em>{0</em>}", "printBackgroundValue": "<b>Fondo de pantalla actual</b><em>{0</em>}",
"printBackgroundRemove": "Eliminar este fondo de pantalla", "printBackgroundRemove": "Eliminar este fondo de pantalla",
"tags_title": "Etiquetas (sólo para tí)", "tags_title": "Etiquetas (sólo para tí)",
"tags_add": "Actualizar las etiquetas de esta página", "tags_add": "Actualizar las etiquetas para los pads seleccionados",
"tags_notShared": "Tus etiquetas no están compartidas con otros usuarios", "tags_notShared": "Tus etiquetas no están compartidas con otros usuarios",
"tags_duplicate": "Duplicar etiquetas:{0}", "tags_duplicate": "Duplicar etiquetas:{0}",
"tags_noentry": "No puedes etiquetar una nota eliminada!", "tags_noentry": "No puedes etiquetar una nota eliminada!",

View file

@ -280,7 +280,7 @@
"profile_description": "Kuvaus", "profile_description": "Kuvaus",
"profile_fieldSaved": "Uusi arvo tallennettu: {0}", "profile_fieldSaved": "Uusi arvo tallennettu: {0}",
"profile_viewMyProfile": "Näytä oma profiili", "profile_viewMyProfile": "Näytä oma profiili",
"userlist_addAsFriendTitle": "Lähetä kontaktipyyntö käyttäjälle \"{0}\"", "userlist_addAsFriendTitle": "Lähetä yhteyspyyntö käyttäjälle \"{0}\"",
"contacts_title": "Yhteystiedot", "contacts_title": "Yhteystiedot",
"contacts_addError": "Virhe lisätessä yhteystietoa listaan", "contacts_addError": "Virhe lisätessä yhteystietoa listaan",
"contacts_added": "Yhteystietopyyntö hyväksytty.", "contacts_added": "Yhteystietopyyntö hyväksytty.",
@ -300,7 +300,7 @@
"contacts_confirmRemoveHistory": "Oletko varma, että haluat tyhjentää keskusteluhistorian pysyvästi? Tietoja ei voida palauttaa", "contacts_confirmRemoveHistory": "Oletko varma, että haluat tyhjentää keskusteluhistorian pysyvästi? Tietoja ei voida palauttaa",
"contacts_removeHistoryServerError": "Keskusteluhistorian poistamisessa tapahtui virhe. Yritä myöhemmin uudelleen", "contacts_removeHistoryServerError": "Keskusteluhistorian poistamisessa tapahtui virhe. Yritä myöhemmin uudelleen",
"contacts_fetchHistory": "Hae vanhempia viestejä", "contacts_fetchHistory": "Hae vanhempia viestejä",
"contacts_friends": "Kontaktit", "contacts_friends": "Yhteystiedot",
"contacts_rooms": "Keskusteluhuoneet", "contacts_rooms": "Keskusteluhuoneet",
"contacts_leaveRoom": "Lähde keskusteluhuoneesta", "contacts_leaveRoom": "Lähde keskusteluhuoneesta",
"contacts_online": "Toinen käyttäjä tästä keskusteluhuoneesta on online-tilassa", "contacts_online": "Toinen käyttäjä tästä keskusteluhuoneesta on online-tilassa",
@ -356,7 +356,7 @@
"fm_info_recent": "Tässä näytetään sinun tai yhteistyökumppaniesi äskettäin avaamat tai muokkaamat padit.", "fm_info_recent": "Tässä näytetään sinun tai yhteistyökumppaniesi äskettäin avaamat tai muokkaamat padit.",
"fm_info_trash": "Tyhjennä roskakorisi vapauttaaksesi CryptDrive-tallennustilaa.", "fm_info_trash": "Tyhjennä roskakorisi vapauttaaksesi CryptDrive-tallennustilaa.",
"fm_info_allFiles": "Sisältää kaikki tiedostot \"Asiakirjat\"- \"Lajittelemattomat\"- ja \"Roskakori\"-näkymistä. Et voi siirtää tai poistaa tiedostoja täältä.", "fm_info_allFiles": "Sisältää kaikki tiedostot \"Asiakirjat\"- \"Lajittelemattomat\"- ja \"Roskakori\"-näkymistä. Et voi siirtää tai poistaa tiedostoja täältä.",
"fm_info_anonymous": "Et ole kirjautunut sisään. Padisi vanhenevat kolmen kuukauden kuluttua (<a href=\"https://blog.cryptpad.fr/2017/05/17/You-gotta-log-in/\" target=\"_blank\">(lue lisää)</a>). Padit säilytetään paikallisesti selaimessasi, joten selaimen historiatietojen tyhjentäminen saattaa hävittää ne.<br><a href=\"/register/\">Rekisteröidy</a> tai <a href=\"/login/\">kirjaudu sisään</a> säilyttääksesi padisi palvelimella.<br>", "fm_info_anonymous": "Et ole kirjautunut sisään, joten luomasi asiakirjat vanhenevat {0} päivän päästä. Selaushistorian tyhjentäminen saattaa myös hävittää ne.<br><a href=\"/register/\">Rekisteröidy</a> (henkilötietoja ei tarvita) tai <a href=\"/login/\">kirjaudu sisään</a> säilyttääksesi luomasi asiakirjat pysyvästi CryptDrivessa. <a href=\"https://docs.cryptpad.fr/en/user_guide/user_account.html#account-types\" target=\"_blank\">Lue lisää rekisteröitymisestä ja käyttäjätileistä</a>.",
"fm_info_sharedFolder": "Tämä on jaettu kansio. Et ole kirjautunut sisään, joten voit käyttää sitä ainoastaan vain luku-tilassa.<br><a href=\"/register/\">Rekisteröidy</a> tai <a href=\"/login/\">kirjaudu sisään</a> tuodaksesi kansion omaan CryptDriveesi ja muokataksesi sen sisältöä.", "fm_info_sharedFolder": "Tämä on jaettu kansio. Et ole kirjautunut sisään, joten voit käyttää sitä ainoastaan vain luku-tilassa.<br><a href=\"/register/\">Rekisteröidy</a> tai <a href=\"/login/\">kirjaudu sisään</a> tuodaksesi kansion omaan CryptDriveesi ja muokataksesi sen sisältöä.",
"fm_info_owned": "Omistat tässä näytetyt padit. Se tarkoittaa, että voit halutessasi poistaa ne palvelimelta. Jos teet niin, muut käyttäjät eivät voi enää käyttää niitä.", "fm_info_owned": "Omistat tässä näytetyt padit. Se tarkoittaa, että voit halutessasi poistaa ne palvelimelta. Jos teet niin, muut käyttäjät eivät voi enää käyttää niitä.",
"fm_alert_backupUrl": "Driven varmuuskopiointilinkki.<br>On <strong>erittäin suositeltavaa</strong> pitää se salassa.<br>Voit käyttää varmuuskopiointilinkkiä noutaaksesi kaikki Drivellesi tallennetut tiedot, jos selaimesi välimuisti on tyhjentynyt.<br>Kuka tahansa linkin tietävä voi muokata tiedostojasi tai poistaa ne kaikki.<br>", "fm_alert_backupUrl": "Driven varmuuskopiointilinkki.<br>On <strong>erittäin suositeltavaa</strong> pitää se salassa.<br>Voit käyttää varmuuskopiointilinkkiä noutaaksesi kaikki Drivellesi tallennetut tiedot, jos selaimesi välimuisti on tyhjentynyt.<br>Kuka tahansa linkin tietävä voi muokata tiedostojasi tai poistaa ne kaikki.<br>",
@ -849,7 +849,7 @@
"features_f_social": "Sosiaaliset sovellukset", "features_f_social": "Sosiaaliset sovellukset",
"features_f_social_note": "Luo käyttäjäprofiili, käytä avatar-kuvaa, keskustele yhteystietojen kanssa", "features_f_social_note": "Luo käyttäjäprofiili, käytä avatar-kuvaa, keskustele yhteystietojen kanssa",
"features_f_file1": "Lataa ja jaa tiedostoja", "features_f_file1": "Lataa ja jaa tiedostoja",
"features_f_file1_note": "Jaa tiedostoja kontaktiesi kanssa tai upota ne padeihisi", "features_f_file1_note": "Jaa tiedostoja yhteystietojesi kanssa tai upota ne padeihisi",
"features_f_storage1": "Pysyvä tallennustila (50Mt)", "features_f_storage1": "Pysyvä tallennustila (50Mt)",
"features_f_storage1_note": "CryptDriveen tallennettuja padeja ei koskaan poisteta käyttämättömyyden takia", "features_f_storage1_note": "CryptDriveen tallennettuja padeja ei koskaan poisteta käyttämättömyyden takia",
"features_f_register": "Rekisteröidy ilmaiseksi", "features_f_register": "Rekisteröidy ilmaiseksi",
@ -952,7 +952,7 @@
"a": "Rekisteröityneille käyttäjille on tarjolla joitakin toimintoja, jotka eivät ole saatavilla rekisteröitymättömille käyttäjille. Löydät nämä toiminnot <a href='/features.html' target='_blank'>luomastamme kaaviosta</a>." "a": "Rekisteröityneille käyttäjille on tarjolla joitakin toimintoja, jotka eivät ole saatavilla rekisteröitymättömille käyttäjille. Löydät nämä toiminnot <a href='/features.html' target='_blank'>luomastamme kaaviosta</a>."
}, },
"share": { "share": {
"q": "Miten jaan salattuja padeja kontaktieni kanssa?", "q": "Miten jaan salattuja padeja yhteystietojeni kanssa?",
"a": "CryptPad laittaa URL-osoitteessa padisi salaisen salausavaimen <em>#</em>-merkin jälkeen. Tämän merkin jälkeen laitettuja tietoja ei lähetetä palvelimelle, joten emme pääse koskaan käyttämään salausavaimiasi. Jakaessasi linkin padiin jaat oikeuden lukea ja käyttää sitä." "a": "CryptPad laittaa URL-osoitteessa padisi salaisen salausavaimen <em>#</em>-merkin jälkeen. Tämän merkin jälkeen laitettuja tietoja ei lähetetä palvelimelle, joten emme pääse koskaan käyttämään salausavaimiasi. Jakaessasi linkin padiin jaat oikeuden lukea ja käyttää sitä."
}, },
"remove": { "remove": {
@ -984,7 +984,7 @@
"title": "Muita kysymyksiä", "title": "Muita kysymyksiä",
"pay": { "pay": {
"q": "Miksi minun täytyisi maksaa, kun niin monet toiminnot ovat ilmaisia?", "q": "Miksi minun täytyisi maksaa, kun niin monet toiminnot ovat ilmaisia?",
"a": "Annamme tukijoillemme lisätallennustilaa ja mahdollisuuden kasvattaa kontaktien tallennustilakiintiöitä (<a href='https://accounts.cryptpad.fr/#/faq' target='_blank'>lue lisää</a>).<br><br>Näiden lyhytaikaisten etujen lisäksi premium-tilaus auttaa rahoittamaan CryptPadin jatkuvaa, aktiivista kehitystyötä. Tähän kuuluu bugien korjaamista, uusien ominaisuuksien lisäämistä ja CryptPad-instanssien pystyttämisen ja ylläpidon helpottamista. Lisäksi autat näyttämään muille palveluntarjoajille, että ihmiset ovat valmiita tukemaan yksityisyyttä parantavia teknologioita. Toivomme, että käyttäjätietojen myymiseen perustuvat liiketoimintamallit jäävät lopulta menneeseen.<br><br>Lopuksi, tarjoamme suurimman osan CryptPadin toiminnallisuudesta ilmaiseksi, koska uskomme yksityisyyden kuuluvan kaikille - ei vain niille, joilla on varaa maksaa siitä. Tukemalla meitä autat tarjoamaan heikommassa asemassa oleville väestöille pääsyn näihin peruspalveluihin." "a": "Annamme tukijoillemme lisätallennustilaa ja mahdollisuuden kasvattaa yhteystietojen tallennustilakiintiöitä (<a href='https://accounts.cryptpad.fr/#/faq' target='_blank'>lue lisää</a>).<br><br>Näiden lyhytaikaisten etujen lisäksi premium-tilaus auttaa rahoittamaan CryptPadin jatkuvaa, aktiivista kehitystyötä. Tähän kuuluu bugien korjaamista, uusien ominaisuuksien lisäämistä ja CryptPad-instanssien pystyttämisen ja ylläpidon helpottamista. Lisäksi autat näyttämään muille palveluntarjoajille, että ihmiset ovat valmiita tukemaan yksityisyyttä parantavia teknologioita. Toivomme, että käyttäjätietojen myymiseen perustuvat liiketoimintamallit jäävät lopulta menneeseen.<br><br>Lopuksi, tarjoamme suurimman osan CryptPadin toiminnallisuudesta ilmaiseksi, koska uskomme yksityisyyden kuuluvan kaikille - ei vain niille, joilla on varaa maksaa siitä. Tukemalla meitä autat tarjoamaan heikommassa asemassa oleville väestöille pääsyn näihin peruspalveluihin."
}, },
"goal": { "goal": {
"q": "Mitkä ovat tavoitteenne?", "q": "Mitkä ovat tavoitteenne?",
@ -1046,7 +1046,7 @@
"colors": "Vaihda tekstin ja taustan väriä <span class=\"fa fa-i-cursor\"></span> ja <span class=\"fa fa-square\"></span> -painikkeilla" "colors": "Vaihda tekstin ja taustan väriä <span class=\"fa fa-i-cursor\"></span> ja <span class=\"fa fa-square\"></span> -painikkeilla"
}, },
"poll": { "poll": {
"decisions": "Tee päätöksiä luotettujen kontaktien kesken", "decisions": "Tee päätöksiä luotettujen yhteystietojen kanssa",
"options": "Ehdota vaihtoehtoja ja tuo ilmi mielipiteesi", "options": "Ehdota vaihtoehtoja ja tuo ilmi mielipiteesi",
"choices": "Napsauta sarakkeesi soluja valitaksesi kyllä- (<strong>✔</strong>), ehkä- (<strong>~</strong>), tai ei (<strong>✖</strong>) -vaihtoehdon", "choices": "Napsauta sarakkeesi soluja valitaksesi kyllä- (<strong>✔</strong>), ehkä- (<strong>~</strong>), tai ei (<strong>✖</strong>) -vaihtoehdon",
"submit": "Napsauta <strong>Lähetä</strong> tehdäksesi valintasi näkyviksi muille" "submit": "Napsauta <strong>Lähetä</strong> tehdäksesi valintasi näkyviksi muille"
@ -1064,7 +1064,7 @@
}, },
"driveReadmeTitle": "Mikä on CryptPad?", "driveReadmeTitle": "Mikä on CryptPad?",
"readme_welcome": "Tervetuloa CryptPadiin!", "readme_welcome": "Tervetuloa CryptPadiin!",
"readme_p1": "Tervetuloa CryptPadiin, täällä voit tehdä muistiinpanoja yksin tai kontaktiesi kanssa.", "readme_p1": "Tervetuloa CryptPadiin, täällä voit tehdä muistiinpanoja yksin tai yhteystietojesi kanssa.",
"settings_kanbanTagsOr": "TAI", "settings_kanbanTagsOr": "TAI",
"settings_kanbanTagsAnd": "JA", "settings_kanbanTagsAnd": "JA",
"settings_kanbanTagsHint": "Valitse, miten haluat tunnistesuodattimen toimivan useita tunnisteita käytettäessä: näytä kortit, jotka sisältävät kaikki valitut tunnisteet (JA) tai näytä kortit, jotka sisältävät jonkun tai jotkin valituista tunnisteista (TAI)", "settings_kanbanTagsHint": "Valitse, miten haluat tunnistesuodattimen toimivan useita tunnisteita käytettäessä: näytä kortit, jotka sisältävät kaikki valitut tunnisteet (JA) tai näytä kortit, jotka sisältävät jonkun tai jotkin valituista tunnisteista (TAI)",
@ -1264,7 +1264,7 @@
"footer_legal": "Oikeusasiat", "footer_legal": "Oikeusasiat",
"footer_donate": "Lahjoita", "footer_donate": "Lahjoita",
"footer_team": "Tiimimme", "footer_team": "Tiimimme",
"footer_product": "Tuote", "footer_product": "Tuotteemme",
"admin_flushCacheDone": "Välimuisti tyhjennetty onnistuneesti", "admin_flushCacheDone": "Välimuisti tyhjennetty onnistuneesti",
"admin_flushCacheButton": "Tyhjennä välimuisti", "admin_flushCacheButton": "Tyhjennä välimuisti",
"admin_flushCacheHint": "Pakota käyttäjät lataamaan uusimmat asiakassovelluksen osat (ainoastaan jos palvelimesi on fresh modessa)", "admin_flushCacheHint": "Pakota käyttäjät lataamaan uusimmat asiakassovelluksen osat (ainoastaan jos palvelimesi on fresh modessa)",
@ -1277,7 +1277,7 @@
"survey": "CryptPad-kysely", "survey": "CryptPad-kysely",
"crowdfunding_popup_no": "Ei nyt", "crowdfunding_popup_no": "Ei nyt",
"crowdfunding_popup_yes": "Mene OpenCollectiveen", "crowdfunding_popup_yes": "Mene OpenCollectiveen",
"crowdfunding_popup_text": "<h3>Tarvitsemme apuasi!</h3>Tukeaksesi CryptPadin aktiivista kehitystä, harkitse projektin tukemista <a href=\"https://opencollective.com/cryptpad\">OpenCollective-sivullamme</a>, jossa voit nähdä <b>tiekarttamme</b> ja <b>rahoitustavoitteemme</b>.", "crowdfunding_popup_text": "<h3>Tarvitsemme apuasi!</h3>Haluatko tukea CryptPadin aktiivista kehitystä? Harkitse projektin tukemista <a href=\"https://opencollective.com/cryptpad\">OpenCollective-sivullamme</a>, jossa voit nähdä <b>tiekarttamme</b> ja <b>rahoitustavoitteemme</b>.",
"crowdfunding_button2": "Auta CryptPadia", "crowdfunding_button2": "Auta CryptPadia",
"crowdfunding_button": "Tue CryptPadia", "crowdfunding_button": "Tue CryptPadia",
"crowdfunding_home2": "Napsauta painiketta saadaksesi lisätietoja joukkorahoituskampanjastamme.", "crowdfunding_home2": "Napsauta painiketta saadaksesi lisätietoja joukkorahoituskampanjastamme.",
@ -1388,7 +1388,7 @@
"kanban_body": "Sisältö", "kanban_body": "Sisältö",
"logoutEverywhere": "Kirjaudu ulos kaikkialta", "logoutEverywhere": "Kirjaudu ulos kaikkialta",
"restrictedError": "Sinulla ei ole oikeutta käyttää tätä asiakirjaa", "restrictedError": "Sinulla ei ole oikeutta käyttää tätä asiakirjaa",
"safeLinks_error": "Tämä linkki ei anna sinulle käyttöoikeutta asiakirjaan", "safeLinks_error": "Tämä linkki kopioitiin selaimen osoiteriviltä, eikä se anna käyttöoikeutta asiakirjaan. Ole hyvä ja käytä <i class=\"fa fa-shhare-alt\"></i> <b>Jaa</b> -valikkoa jakaaksesi yhteystietojen kanssa tai kopioidaksesi linkin. <a href=\"https://docs.cryptpad.fr/en/user_guide/user_account.html#confidentiality\"> Lue lisää Turvalliset linkit-ominaisuudesta</a>.\n",
"burnAfterReading_warningAccess": "Tämä asiakirja tuhoaa itsensä. Kun napsautat allaolevaa painiketta, näet sisällön kerran, jonka jälkeen se poistetaan pysyvästi. Kun suljet tämän ikkunan, et pääse enää käyttämään asiakirjan sisältöä. Jos et ole valmis jatkamaan, voit sulkea tämän ikkunan ja tulla myöhemmin takaisin.", "burnAfterReading_warningAccess": "Tämä asiakirja tuhoaa itsensä. Kun napsautat allaolevaa painiketta, näet sisällön kerran, jonka jälkeen se poistetaan pysyvästi. Kun suljet tämän ikkunan, et pääse enää käyttämään asiakirjan sisältöä. Jos et ole valmis jatkamaan, voit sulkea tämän ikkunan ja tulla myöhemmin takaisin.",
"profile_info": "Muut käyttäjät voivat löytää käyttäjäprofiilisi asiakirjojen käyttäjälistoissa näkyvän avatarin avulla.", "profile_info": "Muut käyttäjät voivat löytää käyttäjäprofiilisi asiakirjojen käyttäjälistoissa näkyvän avatarin avulla.",
"readme_cat3": "Löydä CryptPad-sovellukset", "readme_cat3": "Löydä CryptPad-sovellukset",

View file

@ -1,7 +1,7 @@
{ {
"wrongApp": "De sessie-inhoud kan niet in uw browser worden weergegeven. Probeer om de pagina te herladen.", "wrongApp": "De sessie-inhoud kan niet worden getoond in uw browser. Probeer de pagina te herladen.",
"type": { "type": {
"drive": "Opslag", "drive": "CryptDrive",
"kanban": "Kanban-bord", "kanban": "Kanban-bord",
"poll": "Peiling", "poll": "Peiling",
"pad": "Opgemaakte tekst", "pad": "Opgemaakte tekst",
@ -15,20 +15,20 @@
"slide": "Presentatie", "slide": "Presentatie",
"code": "Code" "code": "Code"
}, },
"padNotPinned": "Deze werkomgeving verloopt als deze 3 maanden niet wordt gebruikt, {0}login{1} of {2}registreer{3} om deze te behouden.", "padNotPinned": "Deze werkomgeving wordt na 3 maanden gewist als hij niet wordt gebruikt. {0}Log in{1} of {2}registreer{3} om deze te behouden.",
"onLogout": "U bent uitgelogd, {0}klik hier{1} om in te loggen<br>of druk op <em>Escape</em> om uw werkomgeving in alleen-lezen modus te bekijken.", "onLogout": "U bent uitgelogd. {0}Klik hier{1} om in te loggen<br>of druk op <em>Escape</em> om uw werkomgeving te openen in alleen-lezenmodus.",
"typeError": "Deze werkomgeving kan niet gebruikt worden met de geselecteerde applicatie", "typeError": "Deze werkomgeving kan niet worden gebruikt met het gekozen programma",
"websocketError": "Verbinden met de websocket server is niet mogelijk...", "websocketError": "Kan niet verbinden met de websocket-server...",
"common_connectionLost": "<b>Verbinding met server verbroken</b><br>Alleen-lezen modus is ingeschakeld tot de verbinding hersteld is.", "common_connectionLost": "<b>Serververbinding verbroken</b><br>De alleen-lezenmodus is ingeschakeld tot de verbinding hersteld wordt.",
"button_newkanban": "Nieuw Kanban-bord", "button_newkanban": "Nieuw Kanban-bord",
"button_newwhiteboard": "Nieuw Whiteboard", "button_newwhiteboard": "Nieuw whiteboard",
"button_newslide": "Nieuwe Presentatie", "button_newslide": "Nieuwe presentatie",
"button_newpoll": "Nieuwe Peiling", "button_newpoll": "Nieuwe peiling",
"button_newcode": "Nieuw codebestand", "button_newcode": "Nieuw codebestand",
"button_newpad": "Nieuw tekstbestand", "button_newpad": "Nieuw tekstbestand met opmaak",
"button_newsheet": "Nieuw Blad", "button_newsheet": "Nieuw blad",
"padNotPinnedVariable": "Deze werkomgeving zal na {4} dagen zonder gebruik verlopen, {0}login{1} of {2}registreer{3} om deze te behouden.", "padNotPinnedVariable": "Deze werkomgeving wordt na {4} dagen gewist als hij niet wordt gebruikt. {0}Log in{1} of {2}registreer{3} om deze te behouden.",
"anonymousStoreDisabled": "De webmaster van deze CryptPad instantie heeft opslag uitgezet voor anonieme gebruikers. Je moet inloggen om deze CryptOpslag te gebruiken.", "anonymousStoreDisabled": "De webmaster van deze CryptPad-instantie heeft opslag uitgeschakeld voor anonieme gebruikers. Log in om deze CryptOpslag te gebruiken.",
"settings_ownDriveTitle": "Account bijwerken", "settings_ownDriveTitle": "Account bijwerken",
"settings_creationSkipTrue": "Sla over", "settings_creationSkipTrue": "Sla over",
"kanban_editBoard": "Bewerk dit bord", "kanban_editBoard": "Bewerk dit bord",
@ -53,96 +53,96 @@
"fileEmbedTag": "Daarna plaatst u deze Media Tag op een lokatie naar keuze op de pagina om te integreren:", "fileEmbedTag": "Daarna plaatst u deze Media Tag op een lokatie naar keuze op de pagina om te integreren:",
"fileEmbedScript": "Om dit bestand te integreren sluit u dit script in op uw pagina om de Media Tag te laden:", "fileEmbedScript": "Om dit bestand te integreren sluit u dit script in op uw pagina om de Media Tag te laden:",
"fileEmbedTitle": "Integreer het bestand in een externe pagina", "fileEmbedTitle": "Integreer het bestand in een externe pagina",
"viewEmbedTag": "Om deze werkomgeving te integreren plaatst u dit iframe op uw pagina op een lokatie naar keuze. Maak gebruik van CSS of HTML attributen om de vormgeving aan te passsen.", "viewEmbedTag": "Om deze werkomgeving te integreren, plaatst u dit iframe op uw pagina op een locatie naar keuze. Maak gebruik van css of html-attributen om de vormgeving aan te passen.",
"fileShare": "Kopieer link", "fileShare": "Link kopiëren",
"viewOpenTitle": "Open deze werkomgeving in alleen-lezen modus in een nieuw tabblad", "viewOpenTitle": "Werkomgeving openen in alleen-lezenmodus op nieuw tabblad",
"viewOpen": "Open de alleen-lezen link in een nieuw tabblad", "viewOpen": "Alleen-lezenlink openen op nieuw tabblad",
"viewShareTitle": "Kopieer de alleen-lezen link naar het klembord", "viewShareTitle": "Alleen-lezenlink kopiëren naar klembord",
"viewShare": "Alleen-lezen link", "viewShare": "Alleen-lezenlink",
"editOpenTitle": "Open deze werkomgeving in bewerkingsmodus in een nieuw tabblad", "editOpenTitle": "Werkomgeving openen in bewerkmodus op een nieuw tabblad",
"editOpen": "Open de link om te bewerken in een nieuw tabblad", "editOpen": "Bewerklink openen op nieuw tabblad",
"editShareTitle": "Kopieer de link om te bewerken naar het klembord", "editShareTitle": "Bewerklink kopiëren naar klembord",
"editShare": "Link om te bewerken", "editShare": "Bewerklink",
"themeButtonTitle": "Kies het kleurenschema voor de code- en diabewerker", "themeButtonTitle": "Kies het kleurenschema van de code- en diabewerker",
"themeButton": "Schema", "themeButton": "Schema",
"languageButtonTitle": "Kies de taal voor syntaxisaccentuering", "languageButtonTitle": "Kies de taal voor syntaxisaccentuering",
"languageButton": "Taal", "languageButton": "Taal",
"slide_invalidLess": "Ongeldige aangepaste stijl", "slide_invalidLess": "Ongeldige aangepaste stijl",
"slideOptionsButton": "Opslaan (enter)", "slideOptionsButton": "Opslaan (enter)",
"slideOptionsTitle": "Uw dias aanpassen", "slideOptionsTitle": "Dia's aanpassen",
"slideOptionsText": "Opties", "slideOptionsText": "Opties",
"tags_noentry": "U kunt een verwijderde werkomgeving niet markeren!", "tags_noentry": "U kunt een verwijderde werkomgeving niet markeren!",
"tags_duplicate": "Gedupliceerde markering: {0}", "tags_duplicate": "Gedupliceerde markering: {0}",
"tags_notShared": "Uw markeringen worden niet gedeeld met andere gebruikers", "tags_notShared": "Uw markeringen worden niet gedeeld met andere gebruikers",
"tags_add": "Werk de markeringen van deze pagina bij", "tags_add": "Werk de markeringen van de geselecteerde werkomgevingen bij",
"tags_title": "Markeringen (alleen voor u)", "tags_title": "Markeringen (alleen voor u)",
"or": "of", "or": "of",
"filePicker_filter": "Filter bestanden op naam", "filePicker_filter": "Bestanden filteren op naam",
"filePicker_description": "Kies een bestand van uw CryptDrive om te integreren of upload een nieuw bestand", "filePicker_description": "Kies een bestand van uw CryptDrive of upload een nieuw bestand",
"filePicker_close": "Sluiten", "filePicker_close": "Sluiten",
"filePickerButton": "Integreer een bestand opgeslagen op CryptDrive", "filePickerButton": "Integreer een op CryptDrive opgeslagen bestand",
"printBackgroundRemove": "Verwijder deze achtergrondafbeelding", "printBackgroundRemove": "Achtergrondafbeelding verwijderen",
"printBackgroundNoValue": "<em>Geen achtergrondafbeelding weergegeven</em>", "printBackgroundNoValue": "<em>Geen achtergrondafbeelding</em>",
"printBackgroundValue": "<b>Huidige achtergrond:</b><em>{0}</em>", "printBackgroundValue": "<b>Huidige achtergrond:</b><em>{0}</em>",
"printBackgroundButton": "Kies een afbeelding", "printBackgroundButton": "Kies een afbeelding",
"printBackground": "Gerbuik een achtergrondafbeelding", "printBackground": "Achtergrondafbeelding gebruiken",
"printTransition": "Schakel overgangsanimaties in", "printTransition": "Overgangsanimaties gebruiken",
"printCSS": "Aangepaste stijlregels (CSS):", "printCSS": "Aangepaste stijlregels (css):",
"printTitle": "Toon naam van de werkomgeving", "printTitle": "Naam van werkomgeving tonen",
"printDate": "Toon datum", "printDate": "Datum tonen",
"printSlideNumber": "Toon dianummer", "printSlideNumber": "Dianummers tonen",
"printOptions": "Opmaak opties", "printOptions": "Vormgevingsopties",
"printButtonTitle2": "Print uw document of exporteer het als een PDF bestand", "printButtonTitle2": "Druk uw document af of exporteer het naar een pdf-bestand",
"printButton": "Printen (enter)", "printButton": "Afdrukken (enter)",
"printText": "Printen", "printText": "Afdrukken",
"propertiesButtonTitle": "Laad werkomgeving eigenschappen", "propertiesButtonTitle": "Laad de werkomgevingseigenschappen",
"propertiesButton": "Eigenschappen", "propertiesButton": "Eigenschappen",
"colorButtonTitle": "Wijzig de tekstkleur in presentatiemodus", "colorButtonTitle": "Wijzig de tekstkleur van de presentatie",
"backgroundButtonTitle": "Wijzig de achtergrondkleur van de presentatie", "backgroundButtonTitle": "Wijzig de achtergrondkleur van de presentatie",
"presentButtonTitle": "Presentatiemodus ingaan", "presentButtonTitle": "Presentatiemodus starten",
"previewButtonTitle": "Markdown voorbeeldmodus weergeven of verbergen", "previewButtonTitle": "Toon of verberg de Markdown-voorvertoning",
"useTemplateCancel": "Met leeg bestand beginnen (Esc)", "useTemplateCancel": "Met leeg bestand beginnen (Esc)",
"saveTemplatePrompt": "Kies een titel voor het sjabloon", "saveTemplatePrompt": "Geef het sjabloon een naam",
"template_empty": "Geen sjabloon beschikbaar", "template_empty": "Geen sjabloon beschikbaar",
"template_import": "Importeer een sjabloon", "template_import": "Importeer een sjabloon",
"useTemplateOK": "Kies een sjabloon (Enter)", "useTemplateOK": "Kies een sjabloon (Enter)",
"useTemplate": "Beginnen met een sjabloon?", "useTemplate": "Beginnen met een sjabloon?",
"selectTemplate": "Kies een sjabloon of druk op escape", "selectTemplate": "Kies een sjabloon of druk op escape",
"templateSaved": "Sjabloon opgeslagen!", "templateSaved": "Het sjabloon is opgeslagen!",
"saveTemplateButton": "Opslaan als sjabloon", "saveTemplateButton": "Opslaan als sjabloon",
"uploadButtonTitle": "Upload een nieuw bestand naar de huidige map", "uploadButtonTitle": "Upload een nieuw bestand naar de huidige map",
"uploadFolderButton": "Uploadmap", "uploadFolderButton": "Uploadmap",
"uploadButton": "Bestanden uploaden", "uploadButton": "Bestanden uploaden",
"newButtonTitle": "Maak een nieuwe werkomgeving aan", "newButtonTitle": "Nieuwe werkomgeving aanmaken",
"newButton": "Nieuw", "newButton": "Nieuw",
"userAccountButton": "Uw account", "userAccountButton": "Mijn account",
"chatButton": "Chat", "chatButton": "Chat",
"userListButton": "Gebruikerslijst", "userListButton": "Gebruikerslijst",
"shareSuccess": "Link gekopieerd naar het klembord", "shareSuccess": "De link is gekopieerd naar het klembord",
"shareButton": "Deel", "shareButton": "Delen",
"movedToTrash": "Die werkomgeving was verplaatst naar de prullenbak.<br><a href=\"/drive/\">Ga naar uw Drive</a>", "movedToTrash": "De werkomgeving is verplaatst naar de prullenbak.<br><a href=\"/drive/\">Ga naar uw Drive</a>",
"forgetPrompt": "Door op OK te drukken wordt deze werkomgeving verplaatst naar de prullenbak. Weet u dit zeker?", "forgetPrompt": "Weet u zeker dat u deze werkomgeving wilt verplaatsen naar de prullenbak?",
"forgetButtonTitle": "Verplaats deze werkomgeving naar de prullenbak", "forgetButtonTitle": "Werkomgeving verplaatsen naar prullenbak",
"forgetButton": "Verwijder", "forgetButton": "Verwijderen",
"saveTitle": "Titel opslaan (enter)", "saveTitle": "Titel opslaan (enter)",
"clickToEdit": "Klik om te bewerken", "clickToEdit": "Klik om te bewerken",
"user_accountName": "Accountnaam", "user_accountName": "Accountnaam",
"user_displayName": "Weergavenaam", "user_displayName": "Weergavenaam",
"user_rename": "Wijzig weergavenaam", "user_rename": "Weergavenaam wijzigen",
"changeNamePrompt": "Wijzig uw naam (leeglaten om anoniem te zijn): ", "changeNamePrompt": "Wijzig uw naam (vul niks in om anoniem te blijven): ",
"exportPrompt": "Hoe zou u uw bestand willen noemen?", "exportPrompt": "Hoe wilt u uw bestand noemen?",
"exportButtonTitle": "Exporteer een werkomgeving naar een lokaal bestand", "exportButtonTitle": "Exporteer een werkomgeving naar een lokaal bestand",
"exportButton": "Exporteer", "exportButton": "Exporteren",
"importButtonTitle": "Importeer een werkomgeving vanuit een lokaal bestand", "importButtonTitle": "Importeer een werkomgeving uit een lokaal bestand",
"importButton": "Importeer", "importButton": "Importeren",
"moreActions": "Meer acties", "moreActions": "Meer acties",
"pinLimitDrive": "U heeft uw opslaglimiet bereikt.<br>U kunt geen nieuwe werkomgevingen aanmaken.", "pinLimitDrive": "U heeft uw opslaglimiet bereikt.<br>U kunt geen nieuwe werkomgevingen aanmaken.",
"pinLimitNotPinned": "U heeft uw opslaglimiet bereikt.<br>Deze werkomgeving wordt niet opgeslagen op uw CryptDrive.", "pinLimitNotPinned": "U heeft uw opslaglimiet bereikt.<br>Deze werkomgeving wordt niet opgeslagen op uw CryptDrive.",
"pinLimitReachedAlertNoAccounts": "U heeft uw opslaglimiet bereikt", "pinLimitReachedAlertNoAccounts": "U heeft uw opslaglimiet bereikt",
"pinLimitReachedAlert": "U heeft uw opslaglimiet bereikt. Nieuwe werkomgevingen worden niet opgeslagen in uw CryptDrive.<br>U kunt werkomgevingen verwijderen van uw CryptDrive of <a href=\"https://accounts.cryptpad.fr/#!on={0}\" target=\"_blank\">aanmelden voor een premium account</a> om uw opslaglimiet te verhogen.", "pinLimitReachedAlert": "U heeft uw opslaglimiet bereikt. Nieuwe werkomgevingen worden niet opgeslagen in uw CryptDrive.<br>U kunt werkomgevingen verwijderen van uw CryptDrive of <a href=\"https://accounts.cryptpad.fr/#!on={0}\" target=\"_blank\">opwaarderen naar een premium-account</a> om uw opslaglimiet te verhogen.",
"pinLimitReached": "U heeft uw opslaglimiet bereikt", "pinLimitReached": "U heeft uw opslaglimiet bereikt",
"redLight": "U bent de verbinding kwijt met de sessie", "redLight": "De verbinding met de sessie is verbroken",
"orangeLight": "Uw langzame verbinding kan gevolgen hebben voor uw ervaring", "orangeLight": "Uw langzame verbinding kan van invloed zijn op de gebruikservaring",
"greenLight": "Alles werkt naar behoren", "greenLight": "Alles werkt naar behoren",
"formattedKB": "{0} KB", "formattedKB": "{0} KB",
"formattedGB": "{0} GB", "formattedGB": "{0} GB",
@ -152,42 +152,42 @@
"GB": "GB", "GB": "GB",
"MB": "MB", "MB": "MB",
"storageStatus": "Opslag:<br /><b>{0}</b> verbruikt van <b>{1}</b>", "storageStatus": "Opslag:<br /><b>{0}</b> verbruikt van <b>{1}</b>",
"upgradeAccount": "Upgrade account", "upgradeAccount": "Account opwaarderen",
"upgradeTitle": "Upgrade uw account om meer opslag te krijgen", "upgradeTitle": "Waarder uw account op om meer opslag te verkrijgen",
"upgrade": "Upgrade", "upgrade": "Opwaarderen",
"newVersion": "<b>CryptPad is geüpdated!</b><br>Bekijk wat veranderd is in de nieuwste versie:<br><a href=\"https://github.com/xwiki-labs/cryptpad/releases/tag/{0}\" target=\"_blank\">Release notes voor CryptPad {0}</a>", "newVersion": "<b>CryptPad is bijgewerkt!</b><br>Bekijk wat er veranderd is in de nieuwste versie:<br><a href=\"https://github.com/xwiki-labs/cryptpad/releases/tag/{0}\" target=\"_blank\">CryptPad-wijzigingslog {0}</a>",
"comingSoon": "Komt binnenkort...", "comingSoon": "Komt binnenkort...",
"language": "Taal", "language": "Taal",
"userlist_offline": "U bent nu offline, de lijst van gebruikers is niet beschikbaar.", "userlist_offline": "U bent momenteel offline. De gebruikerslijst is niet beschikbaar.",
"editors": "bewerkers", "editors": "bewerkers",
"editor": "bewerker", "editor": "bewerker",
"viewers": "kijkers", "viewers": "lezers",
"viewer": "kijker", "viewer": "lezer",
"and": "En", "and": "En",
"users": "Gebruikers", "users": "Gebruikers",
"anonymousUser": "anonieme bewerker", "anonymousUser": "anonieme bewerker",
"anonymousUsers": "anonieme bewerkers", "anonymousUsers": "anonieme bewerkers",
"yourself": "Uzelf", "yourself": "Ik",
"anonymous": "Anoniem", "anonymous": "Anoniem",
"readonly": "Alleen lezen", "readonly": "Alleen-lezen",
"lag": "Vertraging", "lag": "Vertraging",
"errorState": "Kritieke fout: {0}", "errorState": "Kritieke fout: {0}",
"forgotten": "Verplaatst naar de prullenbak", "forgotten": "Verplaatst naar de prullenbak",
"initializing": "Initialiseren...", "initializing": "Bezig met initialiseren...",
"typing": "Aan het bewerken", "typing": "Aan het bewerken",
"reconnecting": "Opnieuw aan het verbinden", "reconnecting": "Bezig met herverbinden",
"synchronizing": "Synchroniseren", "synchronizing": "Bezig met synchroniseren",
"disconnected": "Verbinding verbroken", "disconnected": "Verbinding verbroken",
"realtime_unrecoverableError": "Een onherstelbare fout heeft plaatsgevonden. Druk op OK om de pagina te herladen.", "realtime_unrecoverableError": "Er is een onherstelbare fout opgetreden. Klik op 'Oké' om de pagina te herladen.",
"disabledApp": "Deze applicatie is buiten werking gesteld. Neem contact op met de beheerder van deze CryptPad voor meer informatie.", "disabledApp": "Deze applicatie is buiten werking gesteld. Neem contact op met de beheerder van deze CryptPad-instantie.",
"mustLogin": "U moet ingelogd zijn om toegang te krijgen tot deze pagina", "mustLogin": "Log in om toegang te krijgen tot deze pagina",
"deletedFromServer": "Werkomgeving verwijderd van de server", "deletedFromServer": "Werkomgeving verwijderd van de server",
"deleted": "Verwijderd", "deleted": "Verwijderd",
"synced": "Alles is opgeslagen", "synced": "Alles is opgeslagen",
"saved": "Opgeslagen", "saved": "Opgeslagen",
"error": "Fout", "error": "Fout",
"loading": "Laden...", "loading": "Bezig met laden...",
"newVersionError": "Een nieuwe versie van CryptPad is beschikbaar.<br><a href='#'>Herlaad de pagina</a> om de nieuwe versie te gebruiken, of druk escape om uw inhoud te bekijken in <b>offline modus</b>.", "newVersionError": "Er is een nieuwe versie van CryptPad beschikbaar.<br><a href='#'>Herlaad de pagina</a> om de nieuwe versie te gebruiken of druk Esc om uw inhoud te bekijken in de <b>offline-modus</b>.",
"oo_isLocked": "synchroniseert wijzigingen, gelieve te wachten", "oo_isLocked": "synchroniseert wijzigingen, gelieve te wachten",
"settings_changePasswordTitle": "Wijzig uw wachtwoord", "settings_changePasswordTitle": "Wijzig uw wachtwoord",
"settings_ownDrivePending": "Uw account wordt geüpgraded. Gelieve deze pagina niet te sluiten of te herladen totdat dit voltooid is.", "settings_ownDrivePending": "Uw account wordt geüpgraded. Gelieve deze pagina niet te sluiten of te herladen totdat dit voltooid is.",
@ -195,12 +195,12 @@
"settings_ownDriveButton": "Upgrade uw account", "settings_ownDriveButton": "Upgrade uw account",
"settings_ownDriveHint": "Oude accounts hebben geen toegang tot de nieuwste functies. Een gratis update zal nieuwe functies inschakelen en jouw Drive voor toekomstige updates voorbereiden.", "settings_ownDriveHint": "Oude accounts hebben geen toegang tot de nieuwste functies. Een gratis update zal nieuwe functies inschakelen en jouw Drive voor toekomstige updates voorbereiden.",
"errorRedirectToHome": "Druk op <em>Esc</em> om door te gaan naar uw CryptDrive.", "errorRedirectToHome": "Druk op <em>Esc</em> om door te gaan naar uw CryptDrive.",
"errorCopy": " U kunt nog steeds toegang krijgen tot de inhoud als u op <em>Esc</em> drukt.<br>Als u dit venster sluit kunt u er geen toegang meer tot krijgen.", "errorCopy": " U kunt nog altijd toegang krijgen tot de inhoud als u op <em>Esc</em> drukt.<br>Als u dit venster sluit, kunt u er geen toegang meer tot krijgen.",
"invalidHashError": "Het document dat u opvroeg heeft een ongeldige URL.", "invalidHashError": "De url van het opgevraagde document is ongeldig.",
"chainpadError": "Er was een kritieke fout bij het updaten van uw inhoud. Deze pagina is nu alleen leesbaar om uw werk niet kwijt te raken. <br>Druk op <em>Esc</em> om verder te gaan met het bekijken van deze werkomgeving, of herlaad de pagina om te proberen deze werkomgeving weer aan te kunnen passen.", "chainpadError": "Er is een kritieke fout opgetreden tijdens het bijwerken van uw inhoud. Deze pagina bevindt zich nu in alleen-lezenmodus zodat u uw werk niet kwijtraakt. <br>Druk op <em>Esc</em> om door te gaan met het bekijken van deze werkomgeving of herlaad de pagina om te trachten deze werkomgeving weer aan te kunnen passen.",
"inactiveError": "Deze werkomgeving is verwijderd wegens gebrek aan activiteit. Druk op Esc om een nieuwe werkomgeving aan te maken.", "inactiveError": "Deze werkomgeving is verwijderd wegens gebrek aan activiteit. Druk op Esc om een nieuwe werkomgeving samen te stellen.",
"deletedError": "Deze werkomgeving is verwijderd door de eigenaar en is niet meer beschikbaar.", "deletedError": "Deze werkomgeving is verwijderd door de eigenaar en niet meer beschikbaar.",
"main_title": "CryptPad: Geen Kennis, Onvertraagd Collaboratief Aanpassen", "main_title": "CryptPad: werk samen aan documenten - geen kennis benodigd",
"fc_open_ro": "Openen (alleen-lezen)", "fc_open_ro": "Openen (alleen-lezen)",
"history_restorePrompt": "Weet u zeker dat u de bestaande documentversie wilt vervangen met de weergegeven versie?", "history_restorePrompt": "Weet u zeker dat u de bestaande documentversie wilt vervangen met de weergegeven versie?",
"history_restoreDone": "Document hersteld", "history_restoreDone": "Document hersteld",
@ -371,7 +371,7 @@
"fc_empty": "Prullenbak legen", "fc_empty": "Prullenbak legen",
"fc_prop": "Eigenschappen", "fc_prop": "Eigenschappen",
"fc_hashtag": "Markeringen", "fc_hashtag": "Markeringen",
"getEmbedCode": "Krijg integratiecode", "getEmbedCode": "Insluitcode ophalen",
"kanban_done": "Gedaan", "kanban_done": "Gedaan",
"poll_comment_remove": "Verwijder dit commentaar", "poll_comment_remove": "Verwijder dit commentaar",
"profile_fieldSaved": "Nieuwe waarde opgeslagen: {0}", "profile_fieldSaved": "Nieuwe waarde opgeslagen: {0}",