mirror of https://github.com/xwiki-labs/cryptpad
commit
4008bae352
33
CHANGELOG.md
33
CHANGELOG.md
|
@ -1,3 +1,36 @@
|
|||
# 5.4.1
|
||||
|
||||
## Goals
|
||||
|
||||
This point release aims to fix some deployment related issues that were identified with 5.4.0
|
||||
|
||||
## Fixes
|
||||
|
||||
- Typo in example Nginx config [[#1184](https://github.com/cryptpad/cryptpad/issues/1184)]
|
||||
- Enable port 3003 on Docker [[#1183](https://github.com/cryptpad/cryptpad/issues/1183]
|
||||
- Bind websocket to the address specified in the `httpAddress` setting [[#1182](https://github.com/cryptpad/cryptpad/issues/1182) [#1186](https://github.com/cryptpad/cryptpad/issues/1186)]
|
||||
- Fix production CSP headers [[#912](https://github.com/cryptpad/cryptpad/pull/912) thanks @superboum]
|
||||
- Fix checkup test when registration is restricted [[#1185](https://github.com/cryptpad/cryptpad/issues/1185)]
|
||||
- Fix collaboration of Nextcloud integration
|
||||
- Fix broadcast settings not applied instantly [[#1189](https://github.com/cryptpad/cryptpad/issues/1189)]
|
||||
|
||||
## Upgrade notes
|
||||
|
||||
If you are upgrading from a version older than `5.4.0` please read the upgrade notes of all versions between yours and `5.4.0` to avoid configuration issues.
|
||||
|
||||
To upgrade:
|
||||
|
||||
1. Stop your server
|
||||
2. Get the latest code with git
|
||||
|
||||
```bash
|
||||
git fetch origin --tags
|
||||
git checkout 5.4.1
|
||||
```
|
||||
|
||||
1. Restart your server
|
||||
2. Review your instance's checkup page to ensure that you are passing all tests
|
||||
|
||||
# 5.4.0
|
||||
|
||||
## Goals
|
||||
|
|
|
@ -45,7 +45,7 @@ VOLUME /cryptpad/datastore
|
|||
ENTRYPOINT ["/bin/bash", "/cryptpad/docker-entrypoint.sh"]
|
||||
|
||||
# Ports
|
||||
EXPOSE 3000 3001
|
||||
EXPOSE 3000 3001 3003
|
||||
|
||||
# Run cryptpad on startup
|
||||
CMD ["npm", "start"]
|
||||
|
|
|
@ -95,7 +95,7 @@ define([
|
|||
return h('a', attrs, [icon, text]);
|
||||
};
|
||||
|
||||
Pages.versionString = "5.4.0";
|
||||
Pages.versionString = "5.4.1";
|
||||
|
||||
var customURLs = Pages.customURLs = {};
|
||||
(function () {
|
||||
|
|
|
@ -21,6 +21,7 @@ services:
|
|||
ports:
|
||||
- "3000:3000"
|
||||
- "3001:3001"
|
||||
- "3003:3003"
|
||||
|
||||
ulimits:
|
||||
nofile:
|
||||
|
|
|
@ -244,7 +244,7 @@ server {
|
|||
proxy_hide_header 'X-Content-Type-Options';
|
||||
proxy_hide_header 'Access-Control-Allow-Origin';
|
||||
proxy_hide_header 'Permissions-Policy';
|
||||
proxy_hide_header 'X-XSS-Protection';^
|
||||
proxy_hide_header 'X-XSS-Protection';
|
||||
proxy_pass http://localhost:3000;
|
||||
}
|
||||
|
||||
|
|
|
@ -1,16 +1,17 @@
|
|||
var Default = module.exports;
|
||||
|
||||
Default.commonCSP = function (Env) {
|
||||
var domain = ' ' + Env.httpUnsafeOrigin;
|
||||
var domain = Env.httpUnsafeOrigin;
|
||||
var sandbox = Env.httpSafeOrigin;
|
||||
sandbox = (sandbox && sandbox !== domain? ' ' + sandbox: '');
|
||||
sandbox = (sandbox && sandbox !== domain ? sandbox : '');
|
||||
// Content-Security-Policy
|
||||
var accounts_api = Env.accounts_api? ' ' + Env.accounts_api: '';
|
||||
var accounts_api = Env.accounts_api || '';
|
||||
var wsURL = domain.replace('https://', 'wss://').replace('http://', 'ws://');
|
||||
|
||||
return [
|
||||
"default-src 'none'",
|
||||
"style-src 'unsafe-inline' 'self' " + domain,
|
||||
"font-src 'self' data:" + domain,
|
||||
`default-src 'none'`,
|
||||
`style-src 'unsafe-inline' 'self' ${domain}`,
|
||||
`font-src 'self' data: ${domain}`,
|
||||
|
||||
/* child-src is used to restrict iframes to a set of allowed domains.
|
||||
* connect-src is used to restrict what domains can connect to the websocket.
|
||||
|
@ -18,23 +19,23 @@ Default.commonCSP = function (Env) {
|
|||
* it is recommended that you configure these fields to match the
|
||||
* domain which will serve your CryptPad instance.
|
||||
*/
|
||||
"child-src " + domain,
|
||||
`child-src ${domain}`,
|
||||
// IE/Edge
|
||||
"frame-src 'self' blob: " + sandbox,
|
||||
`frame-src 'self' blob: ${sandbox}`,
|
||||
|
||||
/* this allows connections over secure or insecure websockets
|
||||
if you are deploying to production, you'll probably want to remove
|
||||
the ws://* directive
|
||||
*/
|
||||
"connect-src 'self' localhost blob: " + (/^https:/.test(domain)? 'wss:': domain.replace('http://', 'ws://')) + ' ' + domain + sandbox + accounts_api,
|
||||
`connect-src 'self' blob: ${domain} ${sandbox} ${accounts_api} ${wsURL}`,
|
||||
|
||||
// data: is used by codemirror
|
||||
"img-src 'self' data: blob:" + domain,
|
||||
"media-src blob:",
|
||||
`img-src 'self' data: blob: ${domain}`,
|
||||
`media-src blob:`,
|
||||
|
||||
// for accounts.cryptpad.fr authentication and cross-domain iframe sandbox
|
||||
Env.enableEmbedding? `frame-ancestors 'self' ${Env.protocol} vector:`: `frame-ancestors 'self' ${domain}`,
|
||||
"worker-src 'self'",
|
||||
`worker-src 'self'`,
|
||||
""
|
||||
];
|
||||
};
|
||||
|
|
|
@ -367,7 +367,7 @@ module.exports = function (Env, cb) {
|
|||
|
||||
TODO make this configurable ?
|
||||
*/
|
||||
var BLOOM_CAPACITY = (1 << 22) - 1; // over two million items
|
||||
var BLOOM_CAPACITY = (1 << 24) - 1; // over two million items
|
||||
var BLOOM_ERROR = 1 / 10000; // an error rate of one in ten thousand
|
||||
|
||||
// we'll use one filter for the set of active documents
|
||||
|
|
|
@ -287,6 +287,7 @@ var handleResponse = function (Env, req, res) {
|
|||
});
|
||||
return res.status(500).json({
|
||||
error: 'Execution error',
|
||||
errorCode: Util.serializeError(err)
|
||||
});
|
||||
}
|
||||
res.status(200).json(content);
|
||||
|
|
|
@ -272,9 +272,18 @@ app.get(mainPagePattern, Express.static('./customize.dist'));
|
|||
app.use("/blob", Express.static(Path.resolve(Env.paths.blob), {
|
||||
maxAge: Env.DEV_MODE? "0d": "365d"
|
||||
}));
|
||||
app.head("/datastore", Express.static(Env.paths.data, {
|
||||
maxAge: "0d"
|
||||
}));
|
||||
app.use("/datastore",
|
||||
(req, res, next) => {
|
||||
if (req.method === 'HEAD') {
|
||||
next();
|
||||
} else {
|
||||
res.status(403).end();
|
||||
}
|
||||
},
|
||||
Express.static(Env.paths.data, {
|
||||
maxAge: "0d"
|
||||
}
|
||||
));
|
||||
|
||||
app.use('/block/', function (req, res, next) {
|
||||
var parsed = Path.parse(req.url);
|
||||
|
@ -417,9 +426,9 @@ var cacheString = function () {
|
|||
|
||||
var makeRouteCache = function (template, cacheName) {
|
||||
var cleanUp = {};
|
||||
var cache = Env[cacheName] = Env[cacheName] || {};
|
||||
|
||||
return function (req, res) {
|
||||
var cache = Env[cacheName] = Env[cacheName] || {};
|
||||
var host = req.headers.host.replace(/\:[0-9]+/, '');
|
||||
res.setHeader('Content-Type', 'text/javascript');
|
||||
// don't cache anything if you're in dev mode
|
||||
|
@ -599,9 +608,9 @@ app.use(function (err, req, res /*, next*/) {
|
|||
var server = Http.createServer(app);
|
||||
|
||||
nThen(function (w) {
|
||||
server.listen(Env.httpPort, w());
|
||||
server.listen(Env.httpPort, Env.httpAddress, w());
|
||||
if (Env.httpSafePort) {
|
||||
server.listen(Env.httpSafePort, w());
|
||||
server.listen(Env.httpSafePort, Env.httpAddress, w());
|
||||
}
|
||||
server.on('upgrade', function (req, socket, head) {
|
||||
// TODO warn admins that websockets should only be proxied in this way in a dev environment
|
||||
|
|
|
@ -584,8 +584,6 @@ var getStats = function (env, channelName, cb) {
|
|||
|
||||
// TODO use ../plan.js for a smaller memory footprint
|
||||
var listChannels = function (root, handler, cb, fast) {
|
||||
// do twenty things at a time
|
||||
var sema = Semaphore.create(20);
|
||||
|
||||
var dirList = [];
|
||||
|
||||
|
@ -599,17 +597,18 @@ var listChannels = function (root, handler, cb, fast) {
|
|||
}
|
||||
dirList = list;
|
||||
}));
|
||||
}).nThen(function (w) {
|
||||
}).nThen(function (waitFor) {
|
||||
// search inside the nested directories
|
||||
// stream it so you don't put unnecessary data in memory
|
||||
var wait = w();
|
||||
//var wait = w();
|
||||
var n = nThen;
|
||||
dirList.forEach(function (dir) {
|
||||
sema.take(function (give) {
|
||||
// TODO modify the asynchronous bits here to keep less in memory at any given time
|
||||
// list a directory -> process its contents with semaphores until less than N jobs are running
|
||||
// then list the next directory...
|
||||
// Handle one directory at a time to save some memory
|
||||
n = n(function (w) {
|
||||
// do twenty things at a time
|
||||
var sema = Semaphore.create(20);
|
||||
var nestedDirPath = Path.join(root, dir);
|
||||
Fs.readdir(nestedDirPath, w(give(function (err, list) {
|
||||
Fs.readdir(nestedDirPath, w(function (err, list) {
|
||||
if (err) { return void handler(err); } // Is this correct?
|
||||
|
||||
list.forEach(function (item) {
|
||||
|
@ -660,10 +659,10 @@ var listChannels = function (root, handler, cb, fast) {
|
|||
}, isLonelyMetadata);
|
||||
});
|
||||
});
|
||||
})));
|
||||
});
|
||||
}));
|
||||
}).nThen;
|
||||
});
|
||||
wait();
|
||||
n(waitFor());
|
||||
}).nThen(function () {
|
||||
cb();
|
||||
});
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"name": "cryptpad",
|
||||
"version": "5.4.0",
|
||||
"version": "5.4.1",
|
||||
"lockfileVersion": 2,
|
||||
"requires": true,
|
||||
"packages": {
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"name": "cryptpad",
|
||||
"description": "realtime collaborative visual editor with zero knowlege server",
|
||||
"version": "5.4.0",
|
||||
"version": "5.4.1",
|
||||
"license": "AGPL-3.0+",
|
||||
"repository": {
|
||||
"type": "git",
|
||||
|
|
|
@ -81,7 +81,7 @@ nThen(function (w) {
|
|||
process.exit(1);
|
||||
}
|
||||
Env.httpServer = Http.createServer(app);
|
||||
Env.httpServer.listen(Env.websocketPort, 'localhost', w(function () {
|
||||
Env.httpServer.listen(Env.websocketPort, Env.httpAddress, w(function () {
|
||||
Env.Log.info('WEBSOCKET_LISTENING', {
|
||||
port: Env.websocketPort,
|
||||
});
|
||||
|
|
|
@ -2480,17 +2480,17 @@ Example
|
|||
// message's hash.
|
||||
// If the last BROADCAST_CUSTOM has been deleted by an admin, we can use the most recent
|
||||
// message's hash.
|
||||
var checkLastBroadcastHash = function () {
|
||||
var checkLastBroadcastHash = function (cb) {
|
||||
var deleted = [];
|
||||
|
||||
require(['/api/broadcast?'+ (+new Date())], function (BCast) {
|
||||
var hash = BCast.lastBroadcastHash || '1'; // Truthy value if no lastKnownHash
|
||||
common.mailbox.getNotificationsHistory('broadcast', null, hash, function (e, msgs) {
|
||||
if (e) { return void console.error(e); }
|
||||
if (e) { console.error(e); return void cb(e); }
|
||||
|
||||
// No history, nothing to change
|
||||
if (!Array.isArray(msgs)) { return; }
|
||||
if (!msgs.length) { return; }
|
||||
if (!Array.isArray(msgs)) { return void cb(); }
|
||||
if (!msgs.length) { return void cb(); }
|
||||
|
||||
var lastHash;
|
||||
var next = false;
|
||||
|
@ -2534,7 +2534,7 @@ Example
|
|||
});
|
||||
|
||||
// If we don't have to bump our lastBroadcastHash, abort
|
||||
if (next) { return; }
|
||||
if (next) { return void cb(); }
|
||||
|
||||
// Otherwise, bump to lastHash
|
||||
console.warn('Updating last broadcast hash to', lastHash);
|
||||
|
@ -2548,6 +2548,7 @@ Example
|
|||
return;
|
||||
}
|
||||
console.log('lastBroadcastHash updated');
|
||||
if (typeof(cb) === "function") { cb(); }
|
||||
});
|
||||
});
|
||||
});
|
||||
|
@ -2740,9 +2741,9 @@ Example
|
|||
return UI.warn(Messages.error);
|
||||
}
|
||||
UI.log(Messages.saved);
|
||||
refresh();
|
||||
|
||||
checkLastBroadcastHash();
|
||||
checkLastBroadcastHash(function () {
|
||||
setTimeout(refresh, 300);
|
||||
});
|
||||
});
|
||||
};
|
||||
|
||||
|
@ -2761,8 +2762,9 @@ Example
|
|||
}, {}, function (err) {
|
||||
if (err) { return UI.warn(Messages.error); }
|
||||
UI.log(Messages.saved);
|
||||
refresh();
|
||||
checkLastBroadcastHash();
|
||||
checkLastBroadcastHash(function () {
|
||||
setTimeout(refresh, 300);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
|
@ -2862,8 +2864,9 @@ Example
|
|||
}
|
||||
// Maintenance applied, send notification
|
||||
common.mailbox.sendTo('BROADCAST_MAINTENANCE', {}, {}, function () {
|
||||
refresh();
|
||||
checkLastBroadcastHash();
|
||||
checkLastBroadcastHash(function () {
|
||||
setTimeout(refresh, 300);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
|
@ -2959,8 +2962,9 @@ Example
|
|||
common.mailbox.sendTo('BROADCAST_SURVEY', {
|
||||
url: data
|
||||
}, {}, function () {
|
||||
refresh();
|
||||
checkLastBroadcastHash();
|
||||
checkLastBroadcastHash(function () {
|
||||
setTimeout(refresh, 300);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
|
|
|
@ -98,6 +98,15 @@ define([
|
|||
console.error(err);
|
||||
}
|
||||
|
||||
var HTTP_API_URL;
|
||||
if (API_URL) {
|
||||
try {
|
||||
var httpApi = new URL(API_URL);
|
||||
httpApi.protocol = API_URL.protocol === 'wss:' ? 'https:' : 'http:';
|
||||
HTTP_API_URL = httpApi.origin;
|
||||
} catch (e) {}
|
||||
}
|
||||
|
||||
var ACCOUNTS_URL;
|
||||
try {
|
||||
if (typeof(AppConfig.upgradeURL) === 'string') {
|
||||
|
@ -350,12 +359,12 @@ define([
|
|||
Block.writeLoginBlock({
|
||||
blockKeys: blockKeys,
|
||||
content: {}
|
||||
}, waitFor(function (e) {
|
||||
}, waitFor(function (e, obj) {
|
||||
// we should tolerate restricted registration
|
||||
// and proceed to clean up after any data we've created
|
||||
if (e === 'E_RESTRICTED') {
|
||||
if (e && obj && obj.errorCode === 'E_RESTRICTED') {
|
||||
restricted = true;
|
||||
return void cb(true);
|
||||
return;
|
||||
}
|
||||
if (e) {
|
||||
waitFor.abort();
|
||||
|
@ -1001,7 +1010,8 @@ define([
|
|||
'blob:',
|
||||
$outer,
|
||||
$sandbox,
|
||||
API_URL.origin,
|
||||
API_URL && API_URL.origin,
|
||||
(HTTP_API_URL && HTTP_API_URL !== $outer) ? HTTP_API_URL : undefined,
|
||||
isHTTPS(fileHost)? fileHost: undefined,
|
||||
// support for cryptpad.fr configuration
|
||||
accounts_api,
|
||||
|
@ -1042,6 +1052,7 @@ define([
|
|||
$outer,
|
||||
$sandbox,
|
||||
API_URL.origin,
|
||||
(HTTP_API_URL && HTTP_API_URL !== $outer) ? HTTP_API_URL : undefined,
|
||||
isHTTPS(fileHost)? fileHost: undefined,
|
||||
accounts_api,
|
||||
![trimmedUnsafe, trimmedSafe].includes(ACCOUNTS_URL)? ACCOUNTS_URL: undefined,
|
||||
|
@ -1095,7 +1106,9 @@ define([
|
|||
});
|
||||
};
|
||||
|
||||
['/', '/blob/placeholder.txt', '/block/placeholder.txt'].forEach(relativeURL => {
|
||||
// FIXME Blob and block can't be served for all origins anymore because of "Allow-Credentials"
|
||||
// for advanced authentication features: rempve the tests?
|
||||
['/'/*, '/blob/placeholder.txt', '/block/placeholder.txt'*/].forEach(relativeURL => {
|
||||
assert(function (cb, msg) {
|
||||
var header = 'Access-Control-Allow-Origin';
|
||||
var url = new URL(relativeURL, trimmedUnsafe).href;
|
||||
|
|
|
@ -235,13 +235,14 @@ define([
|
|||
|
||||
|
||||
var getFileType = function () {
|
||||
var type = common.getMetadataMgr().getPrivateData().ooType;
|
||||
var priv = common.getMetadataMgr().getPrivateData();
|
||||
var type = priv.ooType;
|
||||
var title = common.getMetadataMgr().getMetadataLazy().title;
|
||||
if (APP.downloadType) {
|
||||
type = APP.downloadType;
|
||||
title = "download";
|
||||
}
|
||||
if(title === "" && APP.startWithTemplate) {
|
||||
if(title === "" && APP.startWithTemplate && priv.fromFileData) {
|
||||
var metadata = APP.startWithTemplate.content.metadata;
|
||||
var copyTitle = Messages._getKey('copy_title', [metadata.title || metadata.defaultTitle]);
|
||||
common.getMetadataMgr().updateTitle(copyTitle);
|
||||
|
|
|
@ -88,7 +88,7 @@ define([
|
|||
console.error(err);
|
||||
// there might be more info here
|
||||
if (data) { console.error(data); }
|
||||
return void cb("RESPONSE_REJECTED");
|
||||
return void cb("RESPONSE_REJECTED", data);
|
||||
}
|
||||
cb(void 0, data);
|
||||
}));
|
||||
|
|
|
@ -350,7 +350,7 @@
|
|||
"settings_exportTitle": "Dein CryptDrive exportieren",
|
||||
"settings_exportDescription": "Bitte warte, während wir deine Dokumente herunterladen und entschlüsseln. Dies kann ein paar Minuten dauern. Wenn das Browserfenster geschlossen wird, wird der Vorgang unterbrochen.",
|
||||
"settings_exportFailed": "Wenn der Download eines Dokuments länger als eine Minute dauert, wird dieses Dokument nicht im Export enthalten sein. Für jedes nicht exportierte Dokument wird der entsprechende Link angezeigt.",
|
||||
"settings_exportWarning": "Um eine erhöhte Leistung zu erhalten, empfehlen wir dieses Browserfenster im Vordergrund zu halten.",
|
||||
"settings_exportWarning": "Um eine erhöhte Leistung zu erhalten, empfehlen wir, dieses Browserfenster im Vordergrund zu halten.",
|
||||
"settings_exportCancel": "Bist du sicher, dass du den Exportvorgang abbrechen möchtest? Der Vorgang muss das nächste Mal wieder von vorn beginnen.",
|
||||
"settings_export_reading": "Dein CryptDrive wird gelesen...",
|
||||
"settings_export_download": "Deine Dokumente werden heruntergeladen und entschlüsselt...",
|
||||
|
|
|
@ -148,7 +148,8 @@
|
|||
"kanban": "Kanban",
|
||||
"poll": "Inkesta",
|
||||
"code": "Kodea",
|
||||
"pad": "Testu aberastua"
|
||||
"pad": "Testu aberastua",
|
||||
"diagram": "Diagrama"
|
||||
},
|
||||
"userlist_addAsFriendTitle": "Bidali \"{0}\" kontaktu eskaera",
|
||||
"profile_viewMyProfile": "Bistaratu nire profila",
|
||||
|
@ -1586,5 +1587,26 @@
|
|||
"form_noCondorcetWinner": "Irabazlerik ez",
|
||||
"form_type_date": "Data",
|
||||
"form_showDetails": "Xehetasunak",
|
||||
"form_showCondorcetWinner": "irabazlea: "
|
||||
"form_showCondorcetWinner": "irabazlea: ",
|
||||
"settings_mfaHint": "Babestu zure kontua zure aukerako autentifikazio-aplikazio batek emandako egiaztapen-kode gehigarri batekin",
|
||||
"done": "Eginda",
|
||||
"continue": "Jarraitu",
|
||||
"mfa_setup_label": "2FA gaitzeko, hasi zure kontuaren pasahitza sartzen",
|
||||
"mfa_setup_button": "Hasi 2FA konfiguratzen",
|
||||
"mfa_revoke_label": "2FA desgaitzeko, hasi zure kontuaren pasahitza sartzen",
|
||||
"mfa_revoke_button": "Berretsi 2FA desgaitzea",
|
||||
"mfa_status_on": "2FA aktibo dago kontu honetan",
|
||||
"mfa_status_off": "2FA ez dago aktibo kontu honetan",
|
||||
"mfa_recovery_title": "Gorde berreskuratze-kode hau orain",
|
||||
"mfa_enable": "Gaitu 2FA",
|
||||
"mfa_disable": "Desgaitu 2FA",
|
||||
"settings_otp_code": "Egiaztapen-kodea",
|
||||
"mfa_revoke_code": "Sartu zure egiaztapen-kodea",
|
||||
"mfa_recovery_hint": "Zure autentifikazio aplikaziorako sarbidea galtzen baduzu, baliteke CryptPad kontutik kanpo gelditzea. Berreskuratzeko kode hau 2FA desgaitzeko eta berriro sartzen uzteko erabil daiteke.",
|
||||
"mfa_recovery_warning": "Kode hau ez da berriro erakutsiko, mesedez gorde ezazu orain leku seguru batean eta ez partekatu inorekin.",
|
||||
"settings_otp_invalid": "Egiaztapen-kode baliogabea",
|
||||
"settings_otp_tuto": "Eskaneatu QR kode hau zure autentifikazio-aplikazioarekin eta idatzi egiaztapen-kodea berresteko.",
|
||||
"settings_removeOwnedTitle": "Suntsitu jabetzako dokumentu guztiak",
|
||||
"settings_removeOwnedButton": "Suntsitu jabetzako dokumentuak",
|
||||
"settings_mfaTitle": "Bi faktoreko autentifikazioa (2FA)"
|
||||
}
|
||||
|
|
|
@ -15,7 +15,8 @@
|
|||
"code": "Kode",
|
||||
"presentation": "Presentasi",
|
||||
"form": "Formulir",
|
||||
"doc": "Dokumen"
|
||||
"doc": "Dokumen",
|
||||
"diagram": "Diagram"
|
||||
},
|
||||
"typeError": "Dokumen ini tidak sesuai dengan aplikasi yang dipilih",
|
||||
"common_connectionLost": "<b>Koneksi Server Terputus</b><br>Anda sekarang dalam mode hanya baca hingga koneksi telah kembali.",
|
||||
|
@ -299,7 +300,7 @@
|
|||
"uploadButton": "Unggah berkas",
|
||||
"login_hashing": "Mengacak kata sandi Anda, ini mungkin membutuhkan beberapa waktu.",
|
||||
"uploadButtonTitle": "Unggah berkas baru ke CryptDrive Anda",
|
||||
"login_noSuchUser": "Nama pengguna atau kata sandi tidak valid. Coba lagi, atau daftar",
|
||||
"login_noSuchUser": "Nama pengguna atau kata sandi tidak valid",
|
||||
"login_invalUser": "Nama pengguna dibutuhkan",
|
||||
"useTemplate": "Mulai dengan sebuah templat?",
|
||||
"template_import": "Impor templat",
|
||||
|
@ -712,7 +713,7 @@
|
|||
"contacts_mute": "Bisukan",
|
||||
"contacts_unmute": "Suarakan",
|
||||
"team_inviteFrom": "Dari:",
|
||||
"settings_cat_security": "Kerahasiaan",
|
||||
"settings_cat_security": "Keamanan & Privasi",
|
||||
"access_main": "Akses",
|
||||
"access_allow": "Daftar",
|
||||
"accessButton": "Akses",
|
||||
|
@ -1211,7 +1212,7 @@
|
|||
"form_geturl": "Salin tautan publik",
|
||||
"snapshots_button": "Snapshot",
|
||||
"calendar_rec_monthly_pick": "Pada hari",
|
||||
"creation_expiresIn": "Hancurkan pada",
|
||||
"creation_expiresIn": "Hancurkan dalam",
|
||||
"form_deleteAll": "Hapus semua",
|
||||
"form_allowNotifications": "Notifikasi untuk respons baru",
|
||||
"admin_limitNote": "Catatan: {0}",
|
||||
|
@ -1398,5 +1399,121 @@
|
|||
"form_anonAnswer": "Respons pada formulir ini dianonimkan",
|
||||
"home_location": "Data terenkripsi disimpan di {0}",
|
||||
"team_inviteEnterPassword": "Silakan masukkan kata sandi undangan untuk melanjutkan.",
|
||||
"team_inviteInvalidLinkError": "Tautan undangan ini tidak valid."
|
||||
"team_inviteInvalidLinkError": "Tautan undangan ini tidak valid.",
|
||||
"done": "Selesai",
|
||||
"continue": "Lanjutkan",
|
||||
"mfa_setup_label": "Untuk mengaktifkan 2FA, silakan mulai dengan memasukkan kata sandi akun Anda",
|
||||
"mfa_setup_button": "Mulai penyiapan 2FA",
|
||||
"mfa_disable": "Nonaktifkan 2FA",
|
||||
"settings_otp_code": "Kode verifikasi",
|
||||
"mfa_revoke_label": "Untuk menonaktifkan 2FA, silakan mulai dengan memasukkan kata sandi akun Anda",
|
||||
"recovery_header": "Pemulihan 2FA",
|
||||
"mfa_status_on": "2FA aktifk di akun ini",
|
||||
"mfa_revoke_button": "Konfirmasi menonaktifkan 2FA",
|
||||
"mfa_revoke_code": "Silakan masukkan kode verifikasi Anda",
|
||||
"owner_removedPending": "{0} telah membatalkan penawaran kepemilikan untuk <b>{1}</b>",
|
||||
"team_kickedFromTeam": "{0} telah mengeluarkan Anda dari tim: <b>{1}</b>",
|
||||
"team_inviteLinkError": "Terjadi kesalahan saat membuat tautan.",
|
||||
"info_imprintFlavour": "<a>Informasi legal</a> tentang administrator server ini",
|
||||
"snapshot_error_exists": "Sudah ada snapshot dari versi ini",
|
||||
"admin_registrationHint": "Jangan perbolehkan pengguna baru untuk mendaftar",
|
||||
"admin_unarchiveHint": "Pulihkan dokumen yang sebelumnya diarsip",
|
||||
"broadcast_newSurvey": "Sebuah survei baru telah tersedia. Klik untuk membuka.",
|
||||
"mfa_status_off": "2FA belum aktif di akun ini",
|
||||
"oo_importBin": "Klik OK untuk mengimpor format .bin internal CryptPad.",
|
||||
"admin_purpose_experiment": "Untuk menguji platform atau mengembangkan fitur baru",
|
||||
"admin_purpose_public": "Untuk menyediakan layanan gratis kepada publik",
|
||||
"error_incorrectAccess": "Laman ini hanya bisa diakses melalui {0}.",
|
||||
"settings_removeOwnedText": "Silakan tunggu, dokumen Anda sedang dihancurkan...",
|
||||
"team_invitedToTeam": "{0} telah mengundang Anda untuk bergabung ke tim mereka: <b>{1}</b>",
|
||||
"team_inviteFromMsg": "{0} telah mengundang Anda untuk bergabung ke tim <b>{1}</b>",
|
||||
"trimHistory_getSizeError": "Terjadi kesalahan saat menghitung ukuran riwayat drive Anda",
|
||||
"form_cantFindAnswers": "Tidak dapat mendapatkan jawaban yang sudah ada untuk formulir ini.",
|
||||
"admin_jurisdictionHint": "Negara di mana data server terenkripsi ini disimpan",
|
||||
"mfa_recovery_title": "Simpan kode verifikasi ini sekarang",
|
||||
"team_inviteUses": "Penggunaan yang diperbolehkan untuk tautan ini (0 = tanpa batas)",
|
||||
"settings_padNotifHint": "Abaikan notifikasi ketika seseorang membalas salah satu komentar Anda",
|
||||
"form_answerChoice": "Silakan pilih bagaimana Anda ingin menjawab formulir ini:",
|
||||
"admin_documentMetadataHint": "Kueri dokument atau berkas melalui ID atau URL-nya",
|
||||
"owner_request_accepted": "{0} telah menerima penawaran Anda untuk menjadi pemilik <b>{1}</b>",
|
||||
"team_maxTeams": "Setiap akun pengguna hanya bisa menjadi anggota {0} tim.",
|
||||
"cba_hint": "Pengaturan ini akan diingat ketika Anda membuat dokumen berikut Anda.",
|
||||
"admin_performanceProfilingHint": "Ikhtisar jumlah waktu menjalankan berbagai perintah sisi server",
|
||||
"admin_accountMetadataHint": "Masukkan kunci publik pengguna untuk mendapatkan data tentang akun mereka.",
|
||||
"calendar_rec_warn_del": "Acara ini tidak akan diulangi lagi. Acara di masa mendatang akan dihapus.",
|
||||
"recovery_mfa_secret": "Silakan masukkan kode pemulihan Anda untuk menonaktifkan 2FA untuk akun Anda:",
|
||||
"contacts_confirmCancel": "Apakah Anda yakin ingin membatalkan permintaan kontak Anda dengan <b>{0}</b>?",
|
||||
"calendar_deleteOwned": "Ini akan tetap terlihat kepada pengguna lain yang telah dibagikan kepada mereka.",
|
||||
"settings_removeOwnedHint": "Semua dokumen di mana Anda sebagai pemilik satu-satunya akan dihancurkan secara permanen",
|
||||
"team_kickConfirm": "{0} akan tahu bahwa Anda dikeluarkan dari tim. Apakah Anda yakin?",
|
||||
"share_noContactsNotLoggedIn": "Masuk atau daftar untuk melihat kontak Anda yang sudah ada dan menambahkan kontak baru.",
|
||||
"owner_add": "{0} ingin Anda menjadi pemilik dokumen <b>{1}</b>. Apakah Anda ingin menerima?",
|
||||
"mfa_enable": "Aktifkan 2FA",
|
||||
"settings_otp_invalid": "Kode verifikasi tidak valid",
|
||||
"settings_removeOwnedTitle": "Hancurkan semua dokumen yang dimiliki",
|
||||
"settings_removeOwnedButton": "Hancurkan dokumen yang dimiliki",
|
||||
"admin_totpRecoveryMethod": "Metode pemulihan 2FA",
|
||||
"admin_totpDisableButton": "Nonaktifkan",
|
||||
"admin_totpRecoveryTitle": "Pemulihan 2FA",
|
||||
"recovery_forgot": "Lupa kode pemulihan",
|
||||
"admin_totpEnabled": "2FA diaktifkan",
|
||||
"admin_totpFailed": "Verifikasi tanda tangan gagal",
|
||||
"admin_totpCheck": "Verifikasi tanda tangan berhasil",
|
||||
"admin_totpDisable": "Nonaktifkan 2FA untuk akun ini",
|
||||
"recovery_mfa_error": "Terjadi kesalahan yang tidak diketahui. Silakan muat ulang dan coba lagi.",
|
||||
"register_nameTooLong": "Nama pengguna harus lebih pendek dari {0} karakter",
|
||||
"recovery_mfa_disabled": "Autentikasi multifaktor telah dinonaktifkan untuk akun ini.",
|
||||
"loading_recover": "Tidak dapat kode? <a href=\"/recovery/\">Pulihkan akun Anda</a>",
|
||||
"loading_enter_otp": "Akun ini dilindungi dengan Autentikasi Dua Faktor. Silakan masukkan kode verifikasi Anda",
|
||||
"recovery_forgot_text": "Silakan salin informasi berikut dan <a href=\"mailto:{0}\">kirim surel</a> ke administrator server",
|
||||
"recovery_mfa_secret_ph": "Kode pemulihan",
|
||||
"settings_mfaTitle": "Autentikasi Dua Faktor (2FA)",
|
||||
"team_pickFriends": "Pilih kontak mana untuk diundang ke tim ini",
|
||||
"requestEdit_accepted": "{1} memberikan Anda hak penyuntingan untuk dokumen <b>{0}</b>",
|
||||
"owner_request": "{0} meminta Anda untuk menjadi pemilik <b>{1}</b>",
|
||||
"owner_request_declined": "{0} telah menolak penawaran Anda untuk menjadi pemilik <b>{1}</b>",
|
||||
"support_disabledHint": "Server CryptPad ini belum diatur untuk menggunakan formulir bantuan.",
|
||||
"team_pcsSelectHelp": "Membuat dokumen yang dimiliki dalam drive tim akan memberikan kepemilikan ke tim.",
|
||||
"teams_table_generic_edit": "Sunting: buat, modifikasi, dan hapus folder dan dokumen.",
|
||||
"team_pendingOwnerTitle": "Administrator belum menerima penawaran kepemilikan.",
|
||||
"team_acceptInvitation": "{0} telah menerima tawaran Anda untuk bergabung ke tim: <b>{1}</b>",
|
||||
"team_declineInvitation": "{0} telah menolak tawaran Anda untuk bergabung ke tim: <b>{1}</b>",
|
||||
"team_deleteHint": "Hapus tim dan semua dokumen yang dimiliki secara eksklusif oleh tim.",
|
||||
"teams_table_generic_admin": "Kelola Anggota: undang dan keluarkan anggota, ubah peran anggota sampai Admin.",
|
||||
"owner_team_add": "{0} ingin Anda menjadi pemilik tim <b>{1}</b>. Apakah Anda ingin menerima?",
|
||||
"properties_confirmChangeFile": "Apakah Anda yakin? Pengguna tanpa kata sandi baru akan kehilangan akses ke berkas ini.",
|
||||
"trimHistory_needMigration": "Silakan <a>perbarui CryptDrive Anda</a> untuk mengaktifkan fitur ini.",
|
||||
"restrictedError": "Anda tidak diizinkan untuk mengakses dokumen ini",
|
||||
"team_invitePleaseLogin": "Silakan masuk atau daftar untuk menerima undangan ini.",
|
||||
"burnAfterReading_generateLink": "Klik tombol di bawah untuk membuat sebuah tautan.",
|
||||
"oo_sheetMigration_loading": "Meningkatkan dokumen Anda ke versi terkini. Silakan tunggu sekitar 1 menit.",
|
||||
"profile_login": "Anda harus masuk untuk menambahkan pengguna ini ke kontak Anda",
|
||||
"oo_deletedVersion": "Versi ini tidak tersedia lagi dalam riwayat.",
|
||||
"admin_openFilesHint": "Jumlah penerang berkas yang saat ini terbuka di server.",
|
||||
"snapshots_ooPickVersion": "Anda harus memilih sebuah versi sebelum membuat snapshot",
|
||||
"snapshots_cantMake": "Snapshot tidak dapat dibuat. Anda terputus.",
|
||||
"notification_padSharedTeam": "{0} telah membagikan dokumen dengan tim {2}: <b>{1}</b>",
|
||||
"notification_fileSharedTeam": "{0} telah membagikan berkas dengan tim {2}: <b>{1}</b>",
|
||||
"notification_folderSharedTeam": "{0} telah membagikan folder dengan tim {2}: <b>{1}</b>",
|
||||
"oo_login": "Silakan masuk atau daftar untuk meningkatkan performa lembar kerja.",
|
||||
"infobar_versionHash": "Anda saat ini menampilkan versi sebelumnya dari dokumen ini ({0}).",
|
||||
"todo_move": "Daftar tugas Anda sekarang dalam kanban <b>{0}</b> dalam Drive Anda.",
|
||||
"share_noContactsOffline": "Anda saat ini luring. Kontak tidak tersedia.",
|
||||
"access_offline": "Anda saat ini luring. Pengelolaan akses saat ini tidak tersedia.",
|
||||
"admin_getlimitsHint": "Daftarkan semua batasan penyimpanan kustom yang diterapkan pada server Anda.",
|
||||
"admin_emailHint": "Tetapkan surel kontak untuk server Anda di sini",
|
||||
"settings_colorthemeHint": "Ubah warna CryptPad di perangkat ini.",
|
||||
"pad_settings_comments": "Pilih apakah Komentar tetap terlihat atau tersembunyi secara bawaan.",
|
||||
"calendar_deleteConfirm": "Apakah Anda yakin ingin menghapus kalender ini dari akun Anda?",
|
||||
"calendar_deleteTeamConfirm": "Apakah Anda yakin ingin menghapus kalender ini dari tim?",
|
||||
"pad_settings_outline": "Pilih apakah Daftar Isi tetap terlihat atau tersembunyi secara bawaan.",
|
||||
"oo_lostEdits": "Sayangnya, suntingan Anda terkini yang belum disimpan tidak dapat dipulihkan setelah menyinkronkan konten baru.",
|
||||
"form_sort_hint": "Silakan seret item berikut dari yang paling disuka (1) sampai paling tidak disuka ({0}).",
|
||||
"notification_linkShared": "{0} membagikan tautan dengan Anda: <b>{1}</b>",
|
||||
"earlyAccessBlocked": "Aplikasi ini belum ada di server ini",
|
||||
"form_responseMsg": "Pesan ini akan ditampilkan setelah peserta mengirim formulir.",
|
||||
"admin_noticeHint": "Pesan opsional untuk ditampilkan di laman beranda",
|
||||
"admin_uptimeHint": "Tanggal dan waktu ketika server diluncurkan",
|
||||
"ui_jsRequired": "JavaScript harus diaktifkan untuk melakukan enkripsi dalam peramban Anda",
|
||||
"calendar_rec_warn_update": "Aturan untuk mengulangi acara ini diubah. Acara di masa mendatang akan digantikan."
|
||||
}
|
||||
|
|
|
@ -1 +1,5 @@
|
|||
{}
|
||||
{
|
||||
"type": {
|
||||
"drive": "CryptDrive"
|
||||
}
|
||||
}
|
||||
|
|
|
@ -809,7 +809,7 @@
|
|||
"fm_info_anonymous": "Du er ikke logget inn, så dokumentene dine utløper etter {0} dager. Å tømme nettleserens historie kan få dem til å forsvinne. <br><a href=\"/register/\">Registrer deg</a> (ingen personlig informasjon kreves) eller <a href=\"/login/\">Logg på </a> for å lagre dem i lagringsenheten din på ubestemt tid. <a href=\"#docs\">Les mer om registrerte kontoer</a>.",
|
||||
"fm_info_sharedFolder": "Dette er en delt mappe. Du er ikke logget på, så du kan bare få tilgang til den i skrivebeskyttet modus.<br><a href=\"/register/\">Registrer deg</a> eller <a href=\"/login/\">Logg inn</a> for å kunne importere den til din CryptDrive og endre den.",
|
||||
"fm_info_owned": "Du er eieren av dokumentene som vises her. Dette betyr at du kan fjerne dem permanent fra serveren når du vil. Hvis du gjør det, andre brukere kunne ikke få tilgang til dem lenger.",
|
||||
"fm_burnThisDrive": "Er du sikker på at du vil fjerne alt som er lagret av CryptPad i nettleseren din? Dette vil fjerne din CryptDrive og historikken fra nettleseren din, men dokumentene dine vil fortsatt eksistere (kryptert) på serveren vår.",
|
||||
"fm_burnThisDrive": "Er du sikker på at du vil fjerne alt som er lagret av CryptPad i nettleseren din?<br>Dette vil fjerne din CryptDrive og historikken fra nettleseren din, men dokumentene dine vil fortsatt eksistere (kryptert) på serveren vår.",
|
||||
"fm_padIsOwnedOther": "Dette dokumentet eies av en annen bruker",
|
||||
"fm_deletedPads": "Disse dokumentene finnes ikke lenger på serveren, de er fjernet fra din CryptDrive: {0}",
|
||||
"calendar_update": "Oppdatering",
|
||||
|
|
|
@ -15,7 +15,8 @@
|
|||
"kanban": "Kanban",
|
||||
"presentation": "Presentation",
|
||||
"doc": "Dokument",
|
||||
"form": "Formulär"
|
||||
"form": "Formulär",
|
||||
"diagram": "Diagram"
|
||||
},
|
||||
"main_title": "CryptPad: Nollkunskap, samarbete i realtid",
|
||||
"fileEmbedScript": "För att bädda in denna fil, inkludera detta skript en gång på din sida för att ladda Media Tag:",
|
||||
|
@ -136,7 +137,7 @@
|
|||
"chainpadError": "Ett kritiskt fel har uppstått när ditt innehåll uppdaterades. Denna sida är i skrivskyddat läge för att säkerställa att du inte förlorar ditt arbete.<br>Tryck Esc för att fortsätta visa detta dokument, eller ladda om och försök redigera igen.",
|
||||
"inactiveError": "Det här dokumentet har tagits bort på grund av inaktivitet. Vänligen tryck Esc för att skapa ett nytt dokument.",
|
||||
"deletedError": "Det här dokumentet har tagits bort och är inte längre tillgängligt.",
|
||||
"expiredError": "Det här dokument har nått sitt utgångsdatum och är inte längre tillgängligt.",
|
||||
"expiredError": "Det här dokument har nått sitt makuleringsdatum och är inte längre tillgängligt.",
|
||||
"padNotPinnedVariable": "Detta dokument kommer gå ut efter {4} dagars inaktivitet, {0}logga in{1} eller {2}registrera dig{3} för att bevara det.",
|
||||
"padNotPinned": "Det här dokument kommer automatiskt gå ut efter 3 månader av inaktivitet, {0}logga in{1} eller {2}registrera dig{3} för att bevara det.",
|
||||
"onLogout": "Du är utloggad, {0}klicka här{1} för att logga in<br>eller tryck Esc för att öppna ditt dokument i skrivskyddat läge.",
|
||||
|
@ -240,7 +241,7 @@
|
|||
"accessButton": "Tillträde",
|
||||
"access_allow": "Lista",
|
||||
"access_main": "Tillträde",
|
||||
"settings_cat_security": "Sekretess",
|
||||
"settings_cat_security": "Säkerhet & Integritet",
|
||||
"team_inviteFrom": "Från:",
|
||||
"contacts_mute": "Tysta",
|
||||
"teams_table_role": "Roll",
|
||||
|
@ -479,7 +480,7 @@
|
|||
"settings_changePasswordCurrent": "Nuvarande lösenord",
|
||||
"settings_changePasswordNew": "Nytt lösenord",
|
||||
"features_f_core": "Vanliga funktioner",
|
||||
"creation_expiration": "Förfallodatum",
|
||||
"creation_expiration": "Makuleringsdatum",
|
||||
"share_linkAccess": "Behörighetsinställningar",
|
||||
"share_linkOpen": "Öppna länk",
|
||||
"share_linkCopy": "Kopiera länk",
|
||||
|
@ -739,7 +740,7 @@
|
|||
"features_f_supporter": "Support för integritet och dataskydd",
|
||||
"team_inviteRole": "Inledande roll",
|
||||
"fm_numberOfFiles": "# filer",
|
||||
"form_geturl": "Kopiera länk",
|
||||
"form_geturl": "Kopiera publik länk",
|
||||
"calendar_rec_no": "Engångshändelse",
|
||||
"admin_setlimitButton": "Sätt gräns",
|
||||
"form_deleteAll": "Ta bort alla",
|
||||
|
@ -755,7 +756,7 @@
|
|||
"admin_support_closed": "Avslutade ärenden:",
|
||||
"form_makeAnon": "Anonymisera svaren",
|
||||
"team_exportButton": "Ladda ned",
|
||||
"creation_expiresIn": "Förfaller om",
|
||||
"creation_expiresIn": "Makulera om",
|
||||
"footer_website": "Projektets webbplats",
|
||||
"form_condition_isnot": "är inte",
|
||||
"creation_expire": "Utgående dokument",
|
||||
|
@ -854,7 +855,7 @@
|
|||
"fm_categoryError": "Det gick inte att öppna den valda kategorin, visar root.",
|
||||
"oo_lostEdits": "Tyvärr kunde inte dina senaste osparade redigeringar återställas efter synkronisering av nytt innehåll.",
|
||||
"form_addMultipleHint": "Lägg till flera datum och tider",
|
||||
"login_noSuchUser": "Ogiltigt användarnamn eller lösenord. Försök igen eller registrera dig",
|
||||
"login_noSuchUser": "Ogiltigt användarnamn eller lösenord",
|
||||
"login_unhandledError": "Ett oväntat fel uppstod :(",
|
||||
"register_mustAcceptTerms": "Du måste acceptera användarvillkoren.",
|
||||
"profile_copyKey": "Kopiera publik nyckel",
|
||||
|
@ -1578,5 +1579,48 @@
|
|||
"calendar_rec_warn_update": "Regeln för att upprepa denna händelse har ändrats. Framtida händelser kommer att ersättas.",
|
||||
"admin_conflictExplanation": "Det finns två versioner av detta dokument. Att återställa den arkiverade versionen kommer att skriva över liveversionen. Arkivering av liveversionen kommer att skriva över den arkiverade versionen. Ingen av åtgärderna kan ångras.",
|
||||
"calendar_rec_warn_delall": "Denna händelse kommer inte längre att upprepas. Den första händelsen den {0} kommer att behållas, alla andra kommer att tas bort.",
|
||||
"calendar_rec_warn_updateall": "Regeln för att upprepa denna händelse har ändrats. Den första händelsen den {0} kommer att behållas, alla andra kommer att ersättas."
|
||||
"calendar_rec_warn_updateall": "Regeln för att upprepa denna händelse har ändrats. Den första händelsen den {0} kommer att behållas, alla andra kommer att ersättas.",
|
||||
"settings_mfaHint": "Skydda ditt konto med en extra verifieringskod från valfri autentiseringsapp",
|
||||
"done": "Färdigt",
|
||||
"continue": "Fortsätt",
|
||||
"mfa_setup_button": "Påbörja 2FA konfigurering",
|
||||
"mfa_revoke_label": "För att inaktivera 2FA, börja med att ange lösenordet för ditt konto",
|
||||
"mfa_revoke_button": "Bekräfta inaktivering av 2FA",
|
||||
"mfa_recovery_title": "Spara återställningskoden nu",
|
||||
"mfa_disable": "Avaktivera 2FA",
|
||||
"form_showDetails": "Detaljer",
|
||||
"mfa_setup_label": "För att aktivera 2FA, börja med att ange lösenordet för ditt konto",
|
||||
"mfa_revoke_code": "Ange din verifieringskod",
|
||||
"mfa_status_on": "2FA är aktiverat för detta konto",
|
||||
"mfa_status_off": "2FA är inte aktiverat för detta konto",
|
||||
"mfa_enable": "Aktivera 2FA",
|
||||
"settings_otp_code": "Verifieringskod",
|
||||
"settings_otp_invalid": "Ogiltig verifieringskod",
|
||||
"settings_removeOwnedTitle": "Makulera alla mina dokument",
|
||||
"settings_removeOwnedText": "Var god vänta medan ditt dokument makuleras...",
|
||||
"settings_removeOwnedHint": "Alla dokument där du är ensam ägare kommer att förstöras permanent",
|
||||
"recovery_header": "2FA återställning",
|
||||
"recovery_mfa_secret": "Ange din återställningskod för att avaktivera 2FA för ditt konto:",
|
||||
"recovery_forgot_text": "Kopiera följande information och <a href=\"mailto:{0}\">mejla det</a> till administratörerna för din instans",
|
||||
"admin_totpDisable": "Avaktivera 2FA för det här kontot",
|
||||
"loading_enter_otp": "Detta konto skyddas av tvåfaktorsautentisering. Ange din verifieringskod",
|
||||
"mfa_recovery_hint": "Om du förlorar tillgång till din autentiseringsapp kan du bli utestängd från ditt CryptPad-konto. Den här återställningskoden kan användas för att avaktivera 2FA så att du kan komma åt ditt konto igen.",
|
||||
"mfa_recovery_warning": "Koden kommer inte att kunna ses igen, spara den nu på ett säkert ställe och dela den inte med någon.",
|
||||
"settings_otp_tuto": "Skanna QR-koden med din autentiseringsapp och ange verifieringskoden för att bekräfta.",
|
||||
"recovery_mfa_description": "Om du har förlorat tillgång till din autentiseringsmetod kan du avaktivera 2FA för ditt konto med hjälp av din återställningskod. Börja med att ange användarnamn och lösenord:",
|
||||
"settings_removeOwnedButton": "Makulera ägda dokument",
|
||||
"form_type_date": "Datum",
|
||||
"admin_totpCheck": "Verifiering av signatur lyckades",
|
||||
"recovery_forgot": "Glömt återställningskod",
|
||||
"recovery_mfa_error": "Okänt fel. Uppdatera och försök igen.",
|
||||
"recovery_mfa_disabled": "Tvåfaktorsautentisering är redan avstängt för det här kontot.",
|
||||
"admin_totpRecoveryTitle": "2FA Återställning",
|
||||
"admin_totpEnabled": "2FA är aktiverat",
|
||||
"admin_totpRecoveryMethod": "2FA återställningsmetod",
|
||||
"admin_totpFailed": "Misslyckades att verifiera signaturen",
|
||||
"admin_totpDisableButton": "Avaktivera",
|
||||
"register_nameTooLong": "Användarnamn måste vara kortare än {0} tecken",
|
||||
"loading_recover": "Ingen möjlighet att få en kod? <a href=\"/recovery/\">Återställ ditt konto</a>",
|
||||
"recovery_mfa_secret_ph": "Återställningskod",
|
||||
"settings_mfaTitle": "Tvåfaktorsautentisering (2FA)"
|
||||
}
|
||||
|
|
|
@ -610,7 +610,8 @@ define([
|
|||
if (v.type === "day") {
|
||||
var dayPickr = $(calendarView).find('input')[0]._flatpickr;
|
||||
values = dayPickr.selectedDates.map(function (date) {
|
||||
return +date;
|
||||
return date.toLocaleDateString('EN-CA');
|
||||
//return +date;
|
||||
});
|
||||
} else {
|
||||
$container.find('input').each(function (i, el) {
|
||||
|
|
Loading…
Reference in New Issue