cryptpad: pull from upstream at tag 4.14.1

This is the release 4.14.1 at
https://github.com/xwiki-labs/cryptpad/releases/tag/4.14.1

Currently, we're at 4.14.0. So, one patch-release away from latest.
pull/1/head v4.14.1
alex 3 years ago
commit 04ca05aca4

@ -1,3 +1,39 @@
# 4.14.1
This minor release fixes a number of bugs that we noticed after deploying 4.14.0.
* A bug in the code responsible for loading document metadata caused documents to be incorrectly treated as if they had no owners. As a result, several options in the Drive's UI did not work as expected:
* owned documents could not be destroyed from the access menu.
* document passwords could not be changed from the access menu.
* document history could not be trimmed from the properties menu.
* We also found that some components did not behave as expected in the Drive UI while in history mode:
* it was not possible to open shared folders' menus (properties, share, access) to view what their properties were in the past (in the event that they had been deleted or had their passwords changed).
* shared folders names were not correctly displayed even when their data was available.
* Some last minute changes to the checkup page before the 4.14.0 release caused a default error message to be incorrectly concatenated with the intended error message for each failing test.
* A rule in one of our translation linting scripts incorrectly flagged the "ise" in the word "milliseconds" as an instance of the UK-English "-ise" suffix (we use "-ize" elsewhere).
* An admin of a third-party instance found that they were unable to load their checkup page. As it turned out, they were trying to access it via `/checkup` instead of `/checkup/`. We've updated our example NGINX config to rewrite this URL to include the trailing slash.
* Some of the comments in `cryptpad/config/config.example.js` were outdated or incorrect and have been removed or corrected.
* The "About CryptPad" now correctly accepts handles custom links provided as protocol-relative URLs.
* A number of pages did not set custom titles and instead used the default "CryptPad". They now update the document title, making it possible to distinguish between such pages when you have multiple tabs open.
* The forms and kanban apps both allow users to write content in Markdown, but did not always display the toolbar above their editors. This was because they inferred the user's preferred editor configuration based on whether they had collapsed the toolbar in the code editor. Since these apps don't offer an easy way to display the toolbar once more, we decided that it was better to just display it all the time.
We've also merged a few significant improvements:
* The Polish translation was updated by Dariusz Laska.
* A significant percentage (currently 66%) of the Ukrainian translation has also been completed and enabled.
* We've updated Mermaidjs to version 9.0.0, which fixes a number of bugs and also introduces support for [`gitGraph` diagrams](https://mermaid-js.github.io/mermaid/#/gitgraph?id=gitgraph-diagrams)
* Users on cryptpad.fr will no longer be warned that they are leaving the platform when they open a link to our documentation. Users on third-party instances will continue to see the usual warning, since they really are navigating to a site operated by different admins.
Our `4.14.0` release notes introduced breaking changes. If you are not already running `4.14.0` we recommend updating to that first, then updating to `4.14.1` once you've confirmed that you are correctly passing all the tests on your instance's checkup page.S
To do so:
1. Stop your server
2. Get the latest code with git
3. Install the latest dependencies with `bower update` and `npm i`
4. Restart your server
5. Review your instance's checkup page to ensure that you are passing all tests
# 4.14.0 # 4.14.0
## Goals ## Goals

@ -45,21 +45,13 @@ module.exports = {
* In such a case this should be also handled by NGINX, as documented in * In such a case this should be also handled by NGINX, as documented in
* cryptpad/docs/example.nginx.conf (see the $main_domain variable) * cryptpad/docs/example.nginx.conf (see the $main_domain variable)
* *
* Note: you may provide multiple origins for the purpose of accessing
* a development instance via different URLs, like so:
* httpUnsafeOrigin: 'http://127.0.0.1:3000/ http://localhost:3000/',
*
* Such configuration is not recommended for production instances,
* as the development team does not actively test such configuration
* and it may have unintended consequences in practice.
*
*/ */
httpUnsafeOrigin: 'http://localhost:3000', httpUnsafeOrigin: 'http://localhost:3000',
/* httpSafeOrigin is the URL that is used for the 'sandbox' described above. /* httpSafeOrigin is the URL that is used for the 'sandbox' described above.
* If you're testing or developing with CryptPad on your local machine then * If you're testing or developing with CryptPad on your local machine then
* it is appropriate to leave this blank. The default behaviour is to serve * it is appropriate to leave this blank. The default behaviour is to serve
* the main domain over port 3000 and to serve the content over port 3001. * the main domain over port 3000 and to serve the sandbox content over port 3001.
* *
* This is not appropriate in a production environment where invasive networks * This is not appropriate in a production environment where invasive networks
* may filter traffic going over abnormal ports. * may filter traffic going over abnormal ports.
@ -70,6 +62,9 @@ module.exports = {
* This value corresponds to the $sandbox_domain variable * This value corresponds to the $sandbox_domain variable
* in the example nginx file. * in the example nginx file.
* *
* Note that in order for the sandboxing system to be effective
* httpSafeOrigin must be different from httpUnsafeOrigin.
*
* CUSTOMIZE AND UNCOMMENT THIS FOR PRODUCTION INSTALLATIONS. * CUSTOMIZE AND UNCOMMENT THIS FOR PRODUCTION INSTALLATIONS.
*/ */
// httpSafeOrigin: "https://some-other-domain.xyz", // httpSafeOrigin: "https://some-other-domain.xyz",

@ -13,14 +13,15 @@ var map = {
'it': 'Italiano', 'it': 'Italiano',
'ja': '日本語', 'ja': '日本語',
'nb': 'Norwegian Bokmål', 'nb': 'Norwegian Bokmål',
//'pl': 'Polski', //'nl': 'Nederlands'
'pl': 'Polski',
'pt-br': 'Português do Brasil', 'pt-br': 'Português do Brasil',
'ro': 'Română', 'ro': 'Română',
'ru': 'Русский', 'ru': 'Русский',
//'sv': 'Svenska', //'sv': 'Svenska',
//'te': 'తెలుగు', //'te': 'తెలుగు',
'uk': 'Українська',
'zh': '繁體中文', 'zh': '繁體中文',
//'nl': 'Nederlands'
}; };
var messages = {}; var messages = {};

@ -103,7 +103,7 @@ define([
return h('a', attrs, text); return h('a', attrs, text);
}; };
Pages.versionString = "v4.14.0"; Pages.versionString = "v4.14.1";
var customURLs = Pages.customURLs = {}; var customURLs = Pages.customURLs = {};
(function () { (function () {

@ -7,6 +7,7 @@ define([
], function (Config, h, Msg, Pages, LocalStore) { ], function (Config, h, Msg, Pages, LocalStore) {
return function () { return function () {
document.title = Msg.contact;
var developerEmail = "contact@cryptpad.fr"; var developerEmail = "contact@cryptpad.fr";
var adminEmail = Config.adminEmail && [ var adminEmail = Config.adminEmail && [
'i.did.not.read.my.config@cryptpad.fr', 'i.did.not.read.my.config@cryptpad.fr',

@ -12,6 +12,7 @@ define([
var accounts = Pages.accounts; var accounts = Pages.accounts;
return function () { return function () {
document.title = Msg.features;
Msg.features_f_apps_note = AppConfig.availablePadTypes.map(function (app) { Msg.features_f_apps_note = AppConfig.availablePadTypes.map(function (app) {
if (AppConfig.registeredOnlyTypes.indexOf(app) !== -1) { return; } if (AppConfig.registeredOnlyTypes.indexOf(app) !== -1) { return; }
if (AppConfig.premiumTypes && AppConfig.premiumTypes.includes(app)) { return; } if (AppConfig.premiumTypes && AppConfig.premiumTypes.includes(app)) { return; }

@ -6,6 +6,7 @@ define([
'/api/config', '/api/config',
], function (h, UI, Msg, Pages, Config) { ], function (h, UI, Msg, Pages, Config) {
return function () { return function () {
document.title = Msg.login_login;
return [h('div#cp-main', [ return [h('div#cp-main', [
Pages.infopageTopbar(), Pages.infopageTopbar(),
h('div.container.cp-container', [ h('div.container.cp-container', [

@ -7,6 +7,7 @@ define([
'/customize/pages.js' '/customize/pages.js'
], function (Config, $, h, UI, Msg, Pages) { ], function (Config, $, h, UI, Msg, Pages) {
return function () { return function () {
document.title = Msg.register_header;
var urlArgs = Config.requireConf.urlArgs; var urlArgs = Config.requireConf.urlArgs;
var tos = $(UI.createCheckbox('accept-terms')).find('.cp-checkmark-label').append(Msg.register_acceptTerms).parent()[0]; var tos = $(UI.createCheckbox('accept-terms')).find('.cp-checkmark-label').append(Msg.register_acceptTerms).parent()[0];

@ -4,6 +4,7 @@ define([
'/customize/pages.js' '/customize/pages.js'
], function (h, Msg, Pages) { ], function (h, Msg, Pages) {
return function () { return function () {
document.title = Msg.footer_tos;
return h('div#cp-main', [ return h('div#cp-main', [
Pages.infopageTopbar(), Pages.infopageTopbar(),
h('div.container.cp-container', [ h('div.container.cp-container', [

@ -0,0 +1,14 @@
/*
* You can override the translation text using this file.
* The recommended method is to make a copy of this file (/customize.dist/translations/messages.{LANG}.js)
in a 'customize' directory (/customize/translations/messages.{LANG}.js).
* If you want to check all the existing translation keys, you can open the internal language file
but you should not change it directly (/common/translations/messages.{LANG}.js)
*/
define(['/common/translations/messages.uk.js'], function (Messages) {
// Replace the existing keys in your copied file here:
// Messages.button_newpad = "New Rich Text Document";
return Messages;
});

File diff suppressed because it is too large Load Diff

@ -1,7 +1,7 @@
{ {
"name": "cryptpad", "name": "cryptpad",
"description": "realtime collaborative visual editor with zero knowlege server", "description": "realtime collaborative visual editor with zero knowlege server",
"version": "4.14.0", "version": "4.14.1",
"license": "AGPL-3.0+", "license": "AGPL-3.0+",
"repository": { "repository": {
"type": "git", "type": "git",

@ -34,7 +34,7 @@ var special_rules = {};
special_rules.en = function (s) { special_rules.en = function (s) {
// Prefer the american -ize suffix for verbs rather than -ise // Prefer the american -ize suffix for verbs rather than -ise
return /[^w]ise/.test(s); return /[^w]ise(\s|$)/.test(s);
}; };
special_rules.fr = function (s) { special_rules.fr = function (s) {

@ -59,6 +59,15 @@ define(['/api/config'], function (ApiConfig) {
// Local URLs don't require any warning and can navigate directly without user input. // Local URLs don't require any warning and can navigate directly without user input.
if (target.host === host.host) { return void go(); } if (target.host === host.host) { return void go(); }
// It's annoying to be prompted that you are leaving the platform to visit its docs
// but marking the docs domain as trusted undermines third-party admins' autonomy.
// If we ever abandon the cryptpad.fr domain someone could squat it and abuse this trust.
// If the docs domain is a subdomain of the current one then redirect automatically.
// We might make the docs domain configurable at some point in the future.
if (target.host === 'docs.cryptpad.fr' && target.host.endsWith(host.host)) {
return void go();
}
// Everything else requires user input, so we load the platform's translations. // Everything else requires user input, so we load the platform's translations.
// FIXME: this seems to infer language preferences from the browser instead of the user's account preferences // FIXME: this seems to infer language preferences from the browser instead of the user's account preferences
require([ require([

@ -1365,7 +1365,7 @@ define([
else if (quota < 1) { $usage.addClass('cp-limit-usage-warning'); } else if (quota < 1) { $usage.addClass('cp-limit-usage-warning'); }
else { $usage.addClass('cp-limit-usage-above'); } else { $usage.addClass('cp-limit-usage-above'); }
var $text = $('<span>', {'class': 'cp-limit-usage-text'}); var $text = $('<span>', {'class': 'cp-limit-usage-text'});
$text.html(Messages._getKey('storageStatus', [prettyUsage, prettyLimit])); $text.html(Messages._getKey('storageStatus', [prettyUsage, prettyLimit])); // TODO avoid use of .html() if possible
$container.prepend($text); $container.prepend($text);
$limit.append($usage); $limit.append($usage);
}; };
@ -1476,7 +1476,7 @@ define([
options.forEach(function (o) { options.forEach(function (o) {
if (!isValidOption(o)) { return; } if (!isValidOption(o)) { return; }
if (isElement(o)) { return $innerblock.append(o); } if (isElement(o)) { return $innerblock.append(o); }
var $el = $('<' + o.tag + '>', o.attributes || {}); var $el = $(h(o.tag, (o.attributes || {})));
if (typeof(o.content) === 'string' || (o.content instanceof Element)) { if (typeof(o.content) === 'string' || (o.content instanceof Element)) {
o.content = [o.content]; o.content = [o.content];
@ -1666,17 +1666,14 @@ define([
var template = function (line, link) { var template = function (line, link) {
if (!line || !link) { return; } if (!line || !link) { return; }
var p = $('<p>').html(line)[0]; // XXX var p = Pages.setHTML(h('p'), line);
var sub = link.cloneNode(true); var sub = link.cloneNode(true);
var href;
// XXX use URL if you need to? try {
/* This is a hack to make relative URLs point to the main domain href = new URL(sub.getAttribute('href'), origin).href;
instead of the sandbox domain. It will break if the admins have specified } catch (err) {
some less common URL formats for their customizable links, such as if they've return; // don't return anything to display if their href causes URL to throw
used a protocal-relative absolute URL. The URL API isn't quite safe to use }
because of IE (thanks, Bill). */
var href = sub.getAttribute('href');
if (/^\//.test(href)) { sub.setAttribute('href', origin + href); }
var a = p.querySelector('a'); var a = p.querySelector('a');
if (!a) { return; } if (!a) { return; }
sub.innerText = a.innerText; sub.innerText = a.innerText;
@ -2007,8 +2004,7 @@ define([
} }
} }
var $icon = $('<span>', {'class': 'fa fa-user-secret'}); var $icon = $('<span>', {'class': 'fa fa-user-secret'});
//var $userbig = $('<span>', {'class': 'big'}).append($displayedName.clone()); var $userButton = $('<div>').append($icon);
var $userButton = $('<div>').append($icon);//.append($userbig);
if (accountName) { if (accountName) {
$userButton = $('<div>').append(accountName); $userButton = $('<div>').append(accountName);
} }
@ -2161,7 +2157,7 @@ define([
var $modal = modal.$modal; var $modal = modal.$modal;
var $title = $(h('h3', [ h('i.fa.fa-plus'), ' ', Messages.fm_newButton ])); var $title = $(h('h3', [ h('i.fa.fa-plus'), ' ', Messages.fm_newButton ]));
var $description = $('<p>').html(Messages.creation_newPadModalDescription); var $description = $(Pages.setHTML(h('p'), Messages.creation_newPadModalDescription));
$modal.find('.cp-modal').append($title); $modal.find('.cp-modal').append($title);
$modal.find('.cp-modal').append($description); $modal.find('.cp-modal').append($description);

@ -201,7 +201,7 @@ define([
renderer.code = function (code, language) { renderer.code = function (code, language) {
if (!code || typeof(code) !== 'string' || !code.trim()) { return defaultCode.apply(renderer, arguments); } if (!code || typeof(code) !== 'string' || !code.trim()) { return defaultCode.apply(renderer, arguments); }
if (language === 'mermaid' && code.match(/^(flowchart|graph|pie|gantt|sequenceDiagram|classDiagram|gitGraph|stateDiagram|erDiagram|journey|requirementDiagram)/)) { if (language === 'mermaid' && code.match(/^(flowchart|graph|pie|gantt|sequenceDiagram|classDiagram|gitGraph|stateDiagram|erDiagram|journey|requirementDiagram|GitGraph)/)) {
return '<pre class="mermaid" data-plugin="mermaid">'+Util.fixHTML(code)+'</pre>'; return '<pre class="mermaid" data-plugin="mermaid">'+Util.fixHTML(code)+'</pre>';
} else if (language === 'markmap') { } else if (language === 'markmap') {
return '<pre class="markmap" data-plugin="markmap">'+Util.fixHTML(code)+'</pre>'; return '<pre class="markmap" data-plugin="markmap">'+Util.fixHTML(code)+'</pre>';

@ -4525,6 +4525,14 @@ define([
var type = $contextMenu.attr('data-menu-type'); var type = $contextMenu.attr('data-menu-type');
var $this = $(this); var $this = $(this);
var prefix = /cp\-app\-drive\-context\-/;
var command = Util.slice(this.classList)
.map(c => {
if (!prefix.test(c)) { return; }
return c.replace(prefix, '');
}).filter(Boolean);
console.log(command);
var el, data; var el, data;
if (paths.length === 0) { if (paths.length === 0) {
log(Messages.fm_forbidden); log(Messages.fm_forbidden);
@ -4784,9 +4792,13 @@ define([
common: common common: common
}; };
if (padType === 'file') { if (padType === 'file') {
return void Share.getFileShareModal(common, padData); return void Share.getFileShareModal(common, padData, function (err) {
if (err) { UI.warn(Messages.error); }
});
} }
Share.getShareModal(common, padData); Share.getShareModal(common, padData, function (err) {
if (err) { UI.warn(Messages.error); }
});
} }
} }
else if ($this.hasClass('cp-app-drive-context-savelocal')) { else if ($this.hasClass('cp-app-drive-context-savelocal')) {
@ -4875,7 +4887,10 @@ define([
el = manager.find(paths[0].path.slice(1), APP.newSharedFolder); el = manager.find(paths[0].path.slice(1), APP.newSharedFolder);
} }
APP.getProperties(el, function (e) { APP.getProperties(el, function (e) {
if (e) { return void logError(e); } if (e) {
UI.warn(Messages.error);
return void logError(e, el);
}
}); });
} }
else if ($this.hasClass("cp-app-drive-context-access")) { else if ($this.hasClass("cp-app-drive-context-access")) {
@ -4886,7 +4901,10 @@ define([
el = manager.find(paths[0].path.slice(1), APP.newSharedFolder); el = manager.find(paths[0].path.slice(1), APP.newSharedFolder);
} }
APP.getAccess(el, function (e) { APP.getAccess(el, function (e) {
if (e) { return void logError(e); } if (e) {
UI.warn(Messages.error);
return void logError(e);
}
}); });
} }
else if ($this.hasClass("cp-app-drive-context-hashtag")) { else if ($this.hasClass("cp-app-drive-context-hashtag")) {
@ -5130,14 +5148,17 @@ define([
if (!obj || typeof(obj) !== "object" || Object.keys(obj).length === 0) { if (!obj || typeof(obj) !== "object" || Object.keys(obj).length === 0) {
return; return;
} }
manager.setHistoryMode(true);
copyObjectValue(folders[history.sfId], obj); copyObjectValue(folders[history.sfId], obj);
refresh(); refresh();
return; return;
} }
history.sfId = false; history.sfId = false;
var ok = manager.isValidDrive(obj.drive); var ok = manager.isValidDrive(obj.drive);
if (!ok) { return; } if (!ok) { return; }
manager.setHistoryMode(true);
var restricted = files.restrictedFolders; var restricted = files.restrictedFolders;
copyObjectValue(files, obj.drive); copyObjectValue(files, obj.drive);
@ -5147,6 +5168,7 @@ define([
refresh(); refresh();
}; };
history.onLeaveHistory = function () { history.onLeaveHistory = function () {
manager.setHistoryMode(false);
copyObjectValue(files, proxy.drive); copyObjectValue(files, proxy.drive);
refresh(); refresh();
}; };

@ -18,6 +18,8 @@ define([
data.allowed = obj.allowed; data.allowed = obj.allowed;
data.rejected = obj.rejected; data.rejected = obj.rejected;
}; };
// trying to get data from server
// should be authoritative, so override whatever you have in memory
Modal.loadMetadata = function (Env, data, waitFor, redraw) { Modal.loadMetadata = function (Env, data, waitFor, redraw) {
Env.common.getPadMetadata({ Env.common.getPadMetadata({
channel: data.channel channel: data.channel
@ -35,6 +37,7 @@ define([
nThen(function (waitFor) { nThen(function (waitFor) {
var priv = common.getMetadataMgr().getPrivateData(); var priv = common.getMetadataMgr().getPrivateData();
var base = priv.origin; var base = priv.origin;
// this fetches attributes from your shared worker's memory
common.getPadAttribute('', waitFor(function (err, val) { common.getPadAttribute('', waitFor(function (err, val) {
if (err || !val) { if (err || !val) {
if (opts.access) { if (opts.access) {
@ -50,6 +53,14 @@ define([
} }
return; return;
} }
// we delete owners because this query to the worker
// is concurrent with the call to the server.
// we shouldn't trust local information about ownership or expiration
// over that provided by the server, so we simply ignore the local version.
// this could be made more correct at the expense of some latency by not
// running the two queries concurrently, but we consider responsiveness
// more of a priority I guess. Maybe reconsider that if you find
// that this causes any bugs.
if (!val.fileType) { if (!val.fileType) {
delete val.owners; delete val.owners;
delete val.expire; delete val.expire;
@ -59,8 +70,10 @@ define([
if (data.roHref) { data.roHref = base + data.roHref; } if (data.roHref) { data.roHref = base + data.roHref; }
}), opts.href); }), opts.href);
if (opts.channel) { data.channel = opts.channel; }
// If this is a file, don't try to look for metadata // If this is a file, don't try to look for metadata
if (opts.channel && opts.channel.length > 32) { return; } if (opts.channel && opts.channel.length > 32) { return; }
// this fetches data from the server
Modal.loadMetadata(Env, data, waitFor); Modal.loadMetadata(Env, data, waitFor);
}).nThen(function () { }).nThen(function () {
if (opts.channel) { data.channel = opts.channel; } if (opts.channel) { data.channel = opts.channel; }

@ -730,7 +730,7 @@ define([
opts.access = true; // Allow the use of the modal even if the pad is not stored opts.access = true; // Allow the use of the modal even if the pad is not stored
var hashes = opts.hashes; var hashes = opts.hashes;
if (!hashes || (!hashes.editHash && !hashes.viewHash && !opts.static)) { return; } if (!hashes || (!hashes.editHash && !hashes.viewHash && !opts.static)) { return cb("NO_HASHES"); }
var teams = getEditableTeams(common, opts); var teams = getEditableTeams(common, opts);
opts.teams = teams; opts.teams = teams;

@ -236,8 +236,10 @@ define([
}; };
var getSharedFolderData = function (Env, id) { var getSharedFolderData = function (Env, id) {
if (!Env.folders[id]) { return {}; } var inHistory;
var proxy = Env.folders[id].proxy; if (Env.isHistoryMode && !Env.folders[id]) { inHistory = true; }
else if (!Env.folders[id]) { return {}; }
var proxy = inHistory? {}: Env.folders[id].proxy;
// Clean deprecated values // Clean deprecated values
if (Object.keys(proxy.metadata || {}).length > 1) { if (Object.keys(proxy.metadata || {}).length > 1) {
@ -522,6 +524,7 @@ define([
href: '/drive/#' + hashes.editHash, href: '/drive/#' + hashes.editHash,
roHref: '/drive/#' + hashes.viewHash, roHref: '/drive/#' + hashes.viewHash,
channel: secret.channel, channel: secret.channel,
lastTitle: data.name,
ctime: +new Date(), ctime: +new Date(),
}; };
if (data.password) { folderData.password = data.password; } if (data.password) { folderData.password = data.password; }
@ -1562,6 +1565,10 @@ define([
return Env.user.userObject.getOwnedPads(Env.edPublic); return Env.user.userObject.getOwnedPads(Env.edPublic);
}; };
var setHistoryMode = function (Env, flag) {
Env.isHistoryMode = Boolean(flag);
};
var getFolderData = function (Env, path) { var getFolderData = function (Env, path) {
var resolved = _resolvePath(Env, path); var resolved = _resolvePath(Env, path);
if (!resolved || !resolved.userObject) { return {}; } if (!resolved || !resolved.userObject) { return {}; }
@ -1657,6 +1664,7 @@ define([
// Manager // Manager
addProxy: callWithEnv(addProxy), addProxy: callWithEnv(addProxy),
removeProxy: callWithEnv(removeProxy), removeProxy: callWithEnv(removeProxy),
setHistoryMode: callWithEnv(setHistoryMode),
// Drive RPC commands // Drive RPC commands
rename: callWithEnv(renameInner), rename: callWithEnv(renameInner),
move: callWithEnv(moveInner), move: callWithEnv(moveInner),

@ -1462,5 +1462,6 @@
"admin_bytesWrittenHint": "Wenn du die Messung der Festplattenleistung aktiviert hast, kann die Dauer unten konfiguriert werden.", "admin_bytesWrittenHint": "Wenn du die Messung der Festplattenleistung aktiviert hast, kann die Dauer unten konfiguriert werden.",
"admin_enableDiskMeasurementsHint": "Wenn aktiviert, wird ein JSON-API-Endpunkt unter <code>/api/profiling</code> bereitgestellt. Damit wird eine laufende Messung der Festplattenzugriffe innerhalb des unten festgelegten Zeitfensters durchgeführt. Diese Einstellung kann die Leistung des Servers beeinträchtigen und möglicherweise sensible Daten offenlegen. Es wird empfohlen, diese Einstellung deaktiviert zu lassen, wenn du nicht weißt, was du tust.", "admin_enableDiskMeasurementsHint": "Wenn aktiviert, wird ein JSON-API-Endpunkt unter <code>/api/profiling</code> bereitgestellt. Damit wird eine laufende Messung der Festplattenzugriffe innerhalb des unten festgelegten Zeitfensters durchgeführt. Diese Einstellung kann die Leistung des Servers beeinträchtigen und möglicherweise sensible Daten offenlegen. Es wird empfohlen, diese Einstellung deaktiviert zu lassen, wenn du nicht weißt, was du tust.",
"admin_setDuration": "Dauer festlegen", "admin_setDuration": "Dauer festlegen",
"error_evalPermitted": "Abbruch, weil eval nicht erlaubt sein sollte.\n\nDieser Fehler steht in Zusammenhang mit Content-Security-Policy-Headern und könnte folgende Ursachen haben: ein veralteter Browser, der diese nicht unterstützt, Browser-Erweiterungen, die das korrekte Verhalten beeinträchtigen, oder eine falsche Konfiguration dieser CryptPad-Instanz." "error_evalPermitted": "Abbruch, weil eval nicht erlaubt sein sollte.\n\nDieser Fehler steht in Zusammenhang mit Content-Security-Policy-Headern und könnte folgende Ursachen haben: ein veralteter Browser, der diese nicht unterstützt, Browser-Erweiterungen, die das korrekte Verhalten beeinträchtigen, oder eine falsche Konfiguration dieser CryptPad-Instanz.",
"ui_experimental": "Diese Funktion wird als experimentell betrachtet."
} }

@ -1462,5 +1462,6 @@
"support_debuggingDataTitle": "Informations pour le diagnostic du compte", "support_debuggingDataTitle": "Informations pour le diagnostic du compte",
"support_cat_debugging": "Diagnostic", "support_cat_debugging": "Diagnostic",
"ui_openDirectly": "Cette fonctionnalité n'est pas disponible lorsque CryptPad est intégré dans un autre site. Ouvrir ce document dans un nouvel onglet ?", "ui_openDirectly": "Cette fonctionnalité n'est pas disponible lorsque CryptPad est intégré dans un autre site. Ouvrir ce document dans un nouvel onglet ?",
"error_evalPermitted": "Abandon car eval ne devrait pas être autorisé.\n\nCette erreur est liée aux headers Content-Security-Policy, elle peut être due à : un navigateur obsolète qui ne les prend pas en charge, des extensions de navigateur qui interfèrent avec leur fonctionnement, ou une configuration incorrecte de cette instance CryptPad." "error_evalPermitted": "Abandon car eval ne devrait pas être autorisé.\n\nCette erreur est liée aux headers Content-Security-Policy, elle peut être due à : un navigateur obsolète qui ne les prend pas en charge, des extensions de navigateur qui interfèrent avec leur fonctionnement, ou une configuration incorrecte de cette instance CryptPad.",
"ui_experimental": "Cette fonctionnalité est considérée comme expérimentale."
} }

@ -1462,5 +1462,6 @@
"error_embeddingDisabled": "Embedding is disabled for this CryptPad instance", "error_embeddingDisabled": "Embedding is disabled for this CryptPad instance",
"error_embeddingDisabledSpecific": "Embedding is disabled for this CryptPad application.", "error_embeddingDisabledSpecific": "Embedding is disabled for this CryptPad application.",
"error_incorrectAccess": "This page can only be accessed via {0}.", "error_incorrectAccess": "This page can only be accessed via {0}.",
"error_evalPermitted": "Aborting because eval should not be permitted.\n\nThis error is linked to Content-Security-Policy headers, it could be due to: an outdated browser that does not support them, browser extensions that interfere with their correct behaviour, or an incorrect configuration of this CryptPad instance." "error_evalPermitted": "Aborting because eval should not be permitted.\n\nThis error is linked to Content-Security-Policy headers, it could be due to: an outdated browser that does not support them, browser extensions that interfere with their correct behaviour, or an incorrect configuration of this CryptPad instance.",
"ui_experimental": "This feature is considered experimental."
} }

@ -45,7 +45,7 @@
"pinLimitReached": "Você alcançou o limite de armazenamento", "pinLimitReached": "Você alcançou o limite de armazenamento",
"pinLimitReachedAlert": "Você atingiu seu limite de armazenamento. Novos documentos não serão armazenados em seu CryptDrive.<br> Você pode remover documentos de seu CryptDrive ou <a>se inscrever como premium</a> para aumentar seu limite.", "pinLimitReachedAlert": "Você atingiu seu limite de armazenamento. Novos documentos não serão armazenados em seu CryptDrive.<br> Você pode remover documentos de seu CryptDrive ou <a>se inscrever como premium</a> para aumentar seu limite.",
"pinLimitNotPinned": "Você atingiu seu limite de armazenamento.<br>Este documento não está armazenado em seu CryptDrive.", "pinLimitNotPinned": "Você atingiu seu limite de armazenamento.<br>Este documento não está armazenado em seu CryptDrive.",
"pinLimitDrive": "Você alcançou o limite de armazenamento.<br>Você não pode criar novos documentos.", "pinLimitDrive": "Você atingiu o limite de armazenamento.<br>Você não pode criar novos documentos.",
"importButtonTitle": "Importar um documento de um arquivo local", "importButtonTitle": "Importar um documento de um arquivo local",
"exportButtonTitle": "Exportar este documento para um arquivo local", "exportButtonTitle": "Exportar este documento para um arquivo local",
"exportPrompt": "Como deseja nomear seu arquivo?", "exportPrompt": "Como deseja nomear seu arquivo?",
@ -176,7 +176,7 @@
"settings_backup": "Backup", "settings_backup": "Backup",
"settings_restore": "Restaurar", "settings_restore": "Restaurar",
"settings_reset": "Remover todos os arquivos e pastas do seu CryptDrive", "settings_reset": "Remover todos os arquivos e pastas do seu CryptDrive",
"settings_resetPrompt": "Esta ação removerá todos os documentos de sua unidade.<br>Você tem certeza que quer continuar?<br>Digite \"<em>Eu amo o CryptPad</em>\" para confirmar.", "settings_resetPrompt": "Esta ação removerá todos os documentos do seu disco.<br>Você tem certeza que quer continuar?<br>Digite \"<em>Eu amo o CryptPad</em>\" para confirmar.",
"settings_resetDone": "Seu disco está vazio!", "settings_resetDone": "Seu disco está vazio!",
"settings_resetError": "Incorrect verification text. Your CryptDrive has not been changed.", "settings_resetError": "Incorrect verification text. Your CryptDrive has not been changed.",
"settings_resetTips": "Tips in CryptDrive", "settings_resetTips": "Tips in CryptDrive",
@ -221,7 +221,7 @@
"feedback_about": "Se você está lendo isso, provavelmente está curioso para saber por que o CryptPad está solicitando páginas da web quando você executa certas ações.", "feedback_about": "Se você está lendo isso, provavelmente está curioso para saber por que o CryptPad está solicitando páginas da web quando você executa certas ações.",
"feedback_privacy": "We care about your privacy, and at the same time we want CryptPad to be very easy to use. We use this file to figure out which UI features matter to our users, by requesting it along with a parameter specifying which action was taken.", "feedback_privacy": "We care about your privacy, and at the same time we want CryptPad to be very easy to use. We use this file to figure out which UI features matter to our users, by requesting it along with a parameter specifying which action was taken.",
"feedback_optout": "If you would like to opt out, visit <a>your user settings page</a>, where you'll find a checkbox to enable or disable user feedback.", "feedback_optout": "If you would like to opt out, visit <a>your user settings page</a>, where you'll find a checkbox to enable or disable user feedback.",
"padNotPinned": "Esse documento vai expirar depois de 3 meses de inatividade. Faça {0}login{1} ou clique em {2}registrar-se{3} para preservá-lo.", "padNotPinned": "Este documento vai expirar depois de 3 meses de inatividade. Faça {0}login{1} ou clique em {2}registrar-se{3} para preservá-lo.",
"anonymousStoreDisabled": "O administrador desta instância do CryptPad desabilitou o armazenamento para usuários anônimos. Faça login para acessar seu próprio CryptDrive.", "anonymousStoreDisabled": "O administrador desta instância do CryptPad desabilitou o armazenamento para usuários anônimos. Faça login para acessar seu próprio CryptDrive.",
"expiredError": "Este documento atingiu seu tempo de validade e não está mais disponível.", "expiredError": "Este documento atingiu seu tempo de validade e não está mais disponível.",
"deletedError": "Este documento foi apagado e não está mais disponível.", "deletedError": "Este documento foi apagado e não está mais disponível.",
@ -234,7 +234,7 @@
"deletedFromServer": "Documento destruído", "deletedFromServer": "Documento destruído",
"mustLogin": "Você precisa estar logado para acessar esta página", "mustLogin": "Você precisa estar logado para acessar esta página",
"disabledApp": "Esta aplicação foi desabilitada. Contate o administrador deste CryptPad para mais informações.", "disabledApp": "Esta aplicação foi desabilitada. Contate o administrador deste CryptPad para mais informações.",
"realtime_unrecoverableError": "Um erro irrecuperável ocorreu. Click em OK para recarregar.", "realtime_unrecoverableError": "Ocorreu um erro irrecuperável. Clique em OK para recarregar.",
"typing": "Editando", "typing": "Editando",
"initializing": "Inicializando...", "initializing": "Inicializando...",
"forgotten": "Movido para a lixeira", "forgotten": "Movido para a lixeira",
@ -243,7 +243,7 @@
"pinLimitReachedAlertNoAccounts": "Você atingiu o seu limite de armazenamento", "pinLimitReachedAlertNoAccounts": "Você atingiu o seu limite de armazenamento",
"importButton": "Importar", "importButton": "Importar",
"exportButton": "Exportar", "exportButton": "Exportar",
"saveTitle": "Salve o título (enter)", "saveTitle": "Salvar o título (enter)",
"forgetButton": "Apagar", "forgetButton": "Apagar",
"userListButton": "Lista de usuários", "userListButton": "Lista de usuários",
"chatButton": "Bate-papo", "chatButton": "Bate-papo",
@ -300,7 +300,7 @@
"kanban_todo": "A fazer", "kanban_todo": "A fazer",
"kanban_done": "Feito", "kanban_done": "Feito",
"kanban_working": "Em progresso", "kanban_working": "Em progresso",
"kanban_addBoard": "Adicionar uma board", "kanban_addBoard": "Adicionar um quadro",
"poll_remove": "Remover", "poll_remove": "Remover",
"poll_edit": "Editar", "poll_edit": "Editar",
"poll_locked": "Bloqueado", "poll_locked": "Bloqueado",
@ -319,7 +319,7 @@
"canvas_widthLabel": "Largura: {0}", "canvas_widthLabel": "Largura: {0}",
"storageStatus": "Armazenamento:<br><b>{0}</b> usados do total <b>{1}</b>", "storageStatus": "Armazenamento:<br><b>{0}</b> usados do total <b>{1}</b>",
"upgradeAccount": "Atualizar conta", "upgradeAccount": "Atualizar conta",
"padNotPinnedVariable": "Este pad vai expirar depois de {4} dias de inatividade, {0} faça login{1} ou {2}registre-se{3} para preserva-lo.", "padNotPinnedVariable": "Este documento vai expirar depois de {4} dias de inatividade, {0} faça login{1} ou {2}registre-se{3} para preservá-lo.",
"settings_cursorColorTitle": "Cor do cursor", "settings_cursorColorTitle": "Cor do cursor",
"settings_changePasswordNewPasswordSameAsOld": "Sua nova senha precisa ser diferente da sua senha atual.", "settings_changePasswordNewPasswordSameAsOld": "Sua nova senha precisa ser diferente da sua senha atual.",
"settings_changePasswordPending": "Sua senha está sendo atualizada. Por favor, não feche ou recarregue esta página enquanto o processo não termina.", "settings_changePasswordPending": "Sua senha está sendo atualizada. Por favor, não feche ou recarregue esta página enquanto o processo não termina.",
@ -351,9 +351,9 @@
"settings_logoutEverywhereButton": "Sair", "settings_logoutEverywhereButton": "Sair",
"settings_deleted": "Sua conta foi deletada. Tecle OK para ir para a página inicial.", "settings_deleted": "Sua conta foi deletada. Tecle OK para ir para a página inicial.",
"settings_deleteModal": "Compartilhe a seguinte informação com o administrador do seu CryptPad para que os dados sejam removidos do servidor deles.", "settings_deleteModal": "Compartilhe a seguinte informação com o administrador do seu CryptPad para que os dados sejam removidos do servidor deles.",
"settings_deleteButton": "Deletar sua conta", "settings_deleteButton": "Apagar sua conta",
"settings_deleteHint": "Deletar a conta é uma ação permanente. Seu CryptDrive e sua lista de documentos serão deletados do servidor. O restante de seus documentos será deletado em 90 dias caso ninguém mais os tiver armazenado em seus CryptDrives.", "settings_deleteHint": "Deletar a conta é uma ação permanente. Seu CryptDrive e sua lista de documentos serão deletados do servidor. O restante de seus documentos será deletado em 90 dias caso ninguém mais os tiver armazenado em seus CryptDrives.",
"settings_deleteTitle": "Deletar conta", "settings_deleteTitle": "Remover a conta",
"settings_userFeedbackTitle": "Comentário", "settings_userFeedbackTitle": "Comentário",
"settings_autostoreNo": "Manual (nunca perguntar)", "settings_autostoreNo": "Manual (nunca perguntar)",
"settings_autostoreMaybe": "Manual (sempre perguntar)", "settings_autostoreMaybe": "Manual (sempre perguntar)",
@ -370,10 +370,10 @@
"settings_resetButton": "Remover", "settings_resetButton": "Remover",
"settings_resetNewTitle": "Limpar o CryptDrive", "settings_resetNewTitle": "Limpar o CryptDrive",
"settings_exportErrorOther": "Ocorreu um erro durante a exportação deste documento: {0}", "settings_exportErrorOther": "Ocorreu um erro durante a exportação deste documento: {0}",
"settings_exportErrorMissing": "Este documento não foi encontrado em nossos servidores (expirou ou foi deletado pelo dono)", "settings_exportErrorMissing": "Este documento não foi encontrado em nossos servidores (expirou ou foi removido pelo dono)",
"settings_exportErrorEmpty": "Este documento não pode ser exportado (vazio ou conteúdo inválido).", "settings_exportErrorEmpty": "Este documento não pode ser exportado (vazio ou conteúdo inválido).",
"settings_exportErrorDescription": "Nós não conseguimos adicionar os seguintes documentos para exportar:", "settings_exportErrorDescription": "Não conseguimos adicionar os seguintes documentos para exportar:",
"settings_exportError": "Visualizar erros", "settings_exportError": "Ver erros",
"settings_export_done": "Pronto para baixar!", "settings_export_done": "Pronto para baixar!",
"settings_export_compressing": "Compactando dados...", "settings_export_compressing": "Compactando dados...",
"settings_export_download": "Baixando e desencriptando seus documentos...", "settings_export_download": "Baixando e desencriptando seus documentos...",
@ -408,7 +408,7 @@
"fc_color": "Alterar cor", "fc_color": "Alterar cor",
"fc_newsharedfolder": "Nova pasta compartilhada", "fc_newsharedfolder": "Nova pasta compartilhada",
"fm_passwordProtected": "Protegido por senha", "fm_passwordProtected": "Protegido por senha",
"fm_moveNestedSF": "Você não pode colocar uma pasta compartilhada com outra. A pasta {0} não foi movida.", "fm_moveNestedSF": "Você não pode colocar uma pasta compartilhada dentro de outra. A pasta {0} não foi movida.",
"fm_restoreDrive": "Restaurando seu disco para um estado anterior. Para melhores resultados, não faça alterações no seu disco enquanto este processo está em andamento.", "fm_restoreDrive": "Restaurando seu disco para um estado anterior. Para melhores resultados, não faça alterações no seu disco enquanto este processo está em andamento.",
"fm_tags_used": "Número de usos", "fm_tags_used": "Número de usos",
"fm_tags_name": "Nome da etiqueta", "fm_tags_name": "Nome da etiqueta",
@ -416,7 +416,7 @@
"fm_burnThisDrive": "Você tem certeza que deseja remover tudo que foi armazenado pelo CryptPad no seu navegador?<br>Isto removerá seu CryptDrive e seu histórico presente no navegador, mas seus documentos continuarão existindo (encriptados) no seu servidor.", "fm_burnThisDrive": "Você tem certeza que deseja remover tudo que foi armazenado pelo CryptPad no seu navegador?<br>Isto removerá seu CryptDrive e seu histórico presente no navegador, mas seus documentos continuarão existindo (encriptados) no seu servidor.",
"fm_padIsOwnedOther": "Este documento pertence a outro usuário", "fm_padIsOwnedOther": "Este documento pertence a outro usuário",
"fm_padIsOwned": "Você é o dono deste documento", "fm_padIsOwned": "Você é o dono deste documento",
"fm_burnThisDriveButton": "Apague todas as informações guardadas CryptPad pelo no seu navegador", "fm_burnThisDriveButton": "Apague todas as informações guardadas pelo CryptPad no seu navegador",
"fm_prop_tagsList": "Etiquetas", "fm_prop_tagsList": "Etiquetas",
"fm_canBeShared": "Esta pasta pode ser compartilhada", "fm_canBeShared": "Esta pasta pode ser compartilhada",
"fm_renamedPad": "Você deu um nome customizado para este documento. O título compartilhado é:<br><b>{0}</b>", "fm_renamedPad": "Você deu um nome customizado para este documento. O título compartilhado é:<br><b>{0}</b>",
@ -425,7 +425,7 @@
"fm_info_owned": "Você é o dono dos documentos aqui mostrados. Isto quer dizer que você pode removê-los permanentemente do servidor quando quiser. Se você o fizer, outros usuários não conseguirão acessá-los.", "fm_info_owned": "Você é o dono dos documentos aqui mostrados. Isto quer dizer que você pode removê-los permanentemente do servidor quando quiser. Se você o fizer, outros usuários não conseguirão acessá-los.",
"fm_info_sharedFolder": "Esta é uma pasta compartilhada. Você não está logado, então só pode acessar no modo somente leitura.<br><a href=\"/register/\">Registre-se</a> ou <a href=\"/login/\">Faça login</a> para habilitar a importação para seu CryptDrive ou poder modifica-la.", "fm_info_sharedFolder": "Esta é uma pasta compartilhada. Você não está logado, então só pode acessar no modo somente leitura.<br><a href=\"/register/\">Registre-se</a> ou <a href=\"/login/\">Faça login</a> para habilitar a importação para seu CryptDrive ou poder modifica-la.",
"fm_info_recent": "Estes documentos foram recentemente abertos ou modificados por você ou colaboradores.", "fm_info_recent": "Estes documentos foram recentemente abertos ou modificados por você ou colaboradores.",
"fm_info_template": "Esses documentos são guardados como modelos e você pode reutilizá-los quando for criar novos.", "fm_info_template": "Esses documentos são guardados como modelos. Eles podem ser reutilizados na criação de novos.",
"fm_deleteOwnedPads": "Você tem certeza de que quer remover permanentemente estes documentos?", "fm_deleteOwnedPads": "Você tem certeza de que quer remover permanentemente estes documentos?",
"fm_deleteOwnedPad": "Você tem certeza de que quer remover permanentemente este documento?", "fm_deleteOwnedPad": "Você tem certeza de que quer remover permanentemente este documento?",
"fm_sharedFolder": "Pasta compartilhada", "fm_sharedFolder": "Pasta compartilhada",
@ -946,7 +946,7 @@
"contacts_mute": "Mudo", "contacts_mute": "Mudo",
"share_noContactsNotLoggedIn": "Faça login ou registre-se para ver seus contatos existentes e adicionar novos.", "share_noContactsNotLoggedIn": "Faça login ou registre-se para ver seus contatos existentes e adicionar novos.",
"share_copyProfileLink": "Copiar link do perfil", "share_copyProfileLink": "Copiar link do perfil",
"settings_padOpenLinkTitle": "Forma", "settings_padOpenLinkTitle": "Abra links no primeiro clique",
"settings_padOpenLinkHint": "Com esta opção, você pode abrir links incorporados com um clique, sem o pop-up de visualização", "settings_padOpenLinkHint": "Com esta opção, você pode abrir links incorporados com um clique, sem o pop-up de visualização",
"settings_padOpenLinkLabel": "Habilitar abertura de link direto", "settings_padOpenLinkLabel": "Habilitar abertura de link direto",
"settings_padNotifHint": "Ignorar notificações quando alguém responder a um de seus comentários", "settings_padNotifHint": "Ignorar notificações quando alguém responder a um de seus comentários",

@ -0,0 +1,970 @@
{
"login_confirm": "Підтвердьте пароль",
"login_password": "Пароль",
"login_username": "Псевдонім",
"settingsButton": "Параметри",
"logoutButton": "Вийти",
"login_register": "Зареєструватись",
"login_login": "Увійти",
"fo_unavailableName": "Файл чи каталог із такою ж назвою вже є за новою адресою. Перейменуйте його й повторіть спробу.",
"fo_moveFolderToChildError": "Посунути каталог до вкладеного в нього ж каталогу неможливо",
"fo_existingNameError": "Назву вже використано в цьому каталозі. Оберіть іншу.",
"fo_moveUnsortedError": "Зробити каталог шаблоном неможливо",
"fc_hashtag": "Мітки",
"fc_prop": "Властивості",
"fc_empty": "Спорожнити смітник",
"fc_remove_sharedfolder": "Вилучити",
"fc_remove": "Вилучити",
"fc_restore": "Відновити",
"fc_delete_owned": "Знищити",
"fc_delete": "Посунути до смітника",
"fc_collapseAll": "Згорнути все",
"fc_expandAll": "Розгорнути все",
"fc_open_ro": "Відкрити (лише читання)",
"fc_open": "Відкрити",
"fc_color": "Змінити колір",
"fc_rename": "Перейменувати",
"fc_newsharedfolder": "Створити спільний каталог",
"fc_newfolder": "Створити каталог",
"fm_passwordProtected": "Захищено паролем",
"fm_moveNestedSF": "Вкласти один спільний каталог до іншого неможливо. Каталог {0} залишився на місці.",
"fm_restoreDrive": "Каталог відновлюється до раннього стану. Не вносьте змін до каталогу, доки цей процес не завершиться.",
"fm_tags_used": "Кількість використань",
"fm_tags_name": "Назва мітки",
"fm_deletedPads": "Цих документів більше нема на сервері, їх вилучено з вашого CryptDrive-каталогу: {0}",
"fm_padIsOwnedOther": "Документ у власності іншого облікового запису",
"fm_padIsOwned": "Документ у вашій власності",
"fm_burnThisDrive": "Точно стерти все, що CryptPad зберігає у вашому переглядачі?<br>Це вилучить із переглядача ваш CryptDrive-каталог і його історію, але ваші зашифровані документи все ще зберігатимуться на нашому сервері.",
"fm_burnThisDriveButton": "Стерти всі дані, які CryptPad зберігає в цьому переглядачі",
"fm_prop_tagsList": "Мітки",
"fm_canBeShared": "Каталог можна поширити",
"fm_renamedPad": "Ви зазначили власну назву для цього документа. Спільна назва:<br><b>{0}</b>",
"fm_viewGridButton": "Сітка",
"fm_viewListButton": "Перелік",
"fm_error_cantPin": "Внутрішня помилка сервера. Перезавантажте сторінку й повторіть спробу.",
"fm_info_owned": "Тут показано документи у вашій власності. Це означає, що ви можете назовсім вилучити їх із сервера, коли забажаєте. Якщо ви це зробите, інші більше не зможуть їх доступатися.",
"fm_info_sharedFolder": "Це спільний каталог. Ви не ввійшли, тож можете переглядати його лише в режимі читання.<br><a href=\"/register/\">Зареєструйтесь</a> чи <a href=\"/login/\">ввійдіть</a>, щоб імпортувати його до свого CryptDrive-каталогу й почати редагування.",
"fm_info_anonymous": "Ви не ввійшли, тож ваші документи буде стерто через {0} днів. Очищення історії переглядача може їх видалити.<br><a href=\"/register/\">Зареєструйтесь</a> (особових даних не потрібно) чи <a href=\"/login/\">ввійдіть</a>, щоб зберегти їх до свого каталогу на довільний термін. <a href=\"#docs\">Докладніше про реєстрацію облікових записів</a>.",
"fm_info_trash": "Спорожніть смітник, щоб звільнити простір у своєму CryptDrive-каталозі.",
"fm_info_recent": "Ви чи хтось, із ким ви працюєте, нещодавно відкривали чи редагували ці документи.",
"fm_info_template": "Ці документи збережено як шаблони. Може брати їх за основу при створенні нових.",
"fm_info_root": "Можете створювати вкладені каталоги, якщо вам так зручніше впорядковувати файли.",
"fm_categoryError": "Не вдалося відкрити обрану категорію. Показано корінь.",
"fm_selectError": "Не вдалося обрати вказаний файл. Якщо проблема повторюється, спробуйте перезавантажити сторінку.",
"fm_contextMenuError": "Не вдалося відкрити контекстне меню цього файлу. Якщо проблема повторюється, спробуйте перезавантажити сторінку.",
"fm_unknownFolderError": "Обраного чи востаннє відвіданого каталогу більше не існує. Відкриття вищого каталогу…",
"fm_restoreDialog": "Точно відновити {0} за попередньою адресою?",
"fm_deleteOwnedPads": "Точно назовсім знищити ці документи?",
"fm_deleteOwnedPad": "Точно назовсім знищити цей документ?",
"fm_removePermanentlyDialog": "Точно вилучити цей файл із вашого каталогу? Він залишиться в каталогах тих, хто собі його зберегли.",
"fm_removeSeveralPermanentlyDialog": "Точно вилучити файли ({0} шт.) із вашого каталогу? Вони залишаться в каталогах тих, хто собі їх зберегли.",
"fm_emptyTrashDialog": "Точно спорожнити смітник?",
"fm_noname": "Документ без назви",
"fm_openParent": "Показати в каталозі",
"fm_originalPath": "Початковий шлях",
"fm_forbidden": "Дію заборонено",
"fm_creation": "Створення",
"fm_lastAccess": "Останній доступ",
"fm_type": "Тип",
"fm_fileName": "Назва файлу",
"fm_numberOfFiles": "Кількість файлів",
"fm_numberOfFolders": "Кількість каталогів",
"fm_folderName": "Назва каталогу",
"fm_sharedFolder": "Спільний каталог",
"fm_folder": "Каталог",
"ui_more": "Більше",
"fm_newFile": "Створити документ",
"fm_newFolder": "Створити каталог",
"fm_newButtonTitle": "Створіть документ чи каталог — або імпортуйте файл до поточного каталогу.",
"fm_newButton": "Створити",
"fm_searchPlaceholder": "Пошук…",
"fm_sharedFolderName": "Спільний каталог",
"fm_tagsName": "Мітки",
"fm_ownedPadsName": "Власні",
"fm_recentPadsName": "Нещодавні",
"fm_searchName": "Пошук",
"fm_templateName": "Шаблони",
"fm_filesDataName": "Усі файли",
"fm_trashName": "Смітник",
"fm_rootName": "Каталог",
"contacts_online": "Ще хтось у цій кімнаті зараз у мережі",
"contacts_leaveRoom": "Вийти з кімнати",
"contacts_rooms": "Кімнати",
"contacts_fetchHistory": "Отримати старішу історію",
"contacts_removeHistoryServerError": "Виникла помилка вилучення історії бесіди. Повторіть спробу згодом",
"contacts_confirmRemoveHistory": "Точно назовсім стерти історію бесіди? Відновити дані буде неможливо",
"contacts_removeHistoryTitle": "Стерти історію бесіди",
"contacts_info4": "Будь-який бік може назовсім стерти історію бесіди",
"contacts_info3": "Двічі натиснути зображення, щоб переглянути профіль",
"contacts_info2": "Натиснути чиєсь зображення, щоб поговорити з ними",
"contacts_info1": "Це ваші контакти. Тут ви можете:",
"contacts_padTitle": "Бесіда",
"contacts_warning": "Все, що ви пишете, зберігається й стає доступним усім тим, хто переглядає чи згодом переглядатиме документ. Будьте обачні з чутливими даними!",
"contacts_typeHere": "Напишіть повідомлення…",
"contacts_confirmRemove": "Точно вилучити <em>{0]</em> із контактів?",
"contacts_remove": "Вилучити контакт",
"contacts_send": "Надіслати",
"contacts_request": "<em>{0}</em> пропонує вам контакт. <b>Прийняти<b>?",
"contacts_rejected": "Запрошення на контакт відхилено",
"contacts_added": "Запрошення на контакт прийнято.",
"contacts_title": "Контакти",
"userlist_addAsFriendTitle": "Запропонувати «{0}» контакт",
"profile_viewMyProfile": "Мій профіль",
"profile_register": "Зареєструйтесь, щоб створити профіль!",
"profile_error": "Помилка створення профілю: {0}",
"profile_uploadTypeError": "Помилка: тип аватару не підтримується. Дозволені типи: {0}",
"profile_uploadSizeError": "Помилка: аватар мусить бути меншим, ніж {0}",
"profile_upload": " Вивантажити новий аватар",
"profileButton": "Профіль",
"canvas_imageEmbed": "Вбудувати зображення з комп'ютера",
"canvas_currentBrush": "Поточний пензель",
"canvas_saveToDrive": "Зберегти файл зображення до вашого CryptDrive-каталогу",
"canvas_widthLabel": "Ширина: {0}",
"canvas_opacityLabel": "Непрозорість: {0}",
"canvas_opacity": "Непрозорість",
"canvas_width": "Ширина",
"canvas_delete": "Видалити обране",
"canvas_clear": "Стерти",
"oo_uploaded": "Вивантаження завершено. Сторінку буде перезавантажено — або скасуйте перезавантаження й продовжуйте в режимі читання.",
"oo_cantUpload": "Вивантажити не можна, доки інші не вийдуть.",
"oo_reconnect": "З'єднання з сервером відновлено. Файл буде перезавантажено, щоб ви змогли продовжити редагування.",
"poll_comment_disabled": "Оприлюдніть опитування кнопкою ✓, щоб дозволити коментування.",
"poll_comment_placeholder": "Ваш коментар",
"poll_comment_remove": "Видалити коментар",
"poll_comment_submit": "Надіслати",
"poll_comment_add": "Додати коментар",
"poll_comment_list": "Коментарі",
"poll_total": "ВСЬОГО",
"poll_bookmarked_col": "Ви додали цю колонку в закладки. Для вас її завжди буде розблоковано й показано на початку.",
"poll_bookmark_col": "Додайте колонку в закладки, щоб для вас її завжди було розблоковано й показано на початку",
"poll_unlocked": "Розблоковано",
"poll_locked": "Заблоковано",
"poll_edit": "Редагувати",
"poll_remove": "Вилучити",
"poll_descriptionHint": "Опишіть своє опитування й натисніть кнопку ✓ (оприлюднити).\nМожете використати синтаксис Markdown і вбудувати медіафайли зі свого CryptDrive-каталогу.\nЗмінити опис за посиланням може будь-хто, але так робити не рекомендується.",
"poll_removeUser": "Точно вилучити цей обліковий запис?",
"poll_removeOption": "Точно вилучити цей варіант?",
"poll_userPlaceholder": "Ваше ім'я",
"poll_optionPlaceholder": "Варіант",
"poll_commit": "Надіслати",
"poll_create_option": "Додати варіант",
"poll_create_user": "Додати обліковий запис",
"poll_publish_button": "Оприлюднити",
"kanban_addBoard": "Додати дошку",
"kanban_working": "У роботі",
"kanban_done": "Готово",
"kanban_todo": "План",
"kanban_item": "Пункт {0}",
"kanban_newBoard": "Створити дошку",
"pad_mediatagOptions": "Властивості зображення",
"pad_mediatagImport": "Зберегти до CryptDrive-каталогу",
"pad_mediatagPreview": "Переглянути",
"pad_mediatagBorder": "Ширина рамки (пікс.)",
"pad_mediatagRatio": "Дотримувати пропорцію",
"pad_mediatagHeight": "Висота (пікс.)",
"pad_mediatagWidth": "Ширина (пікс.)",
"pad_mediatagTitle": "Параметри тегу «media»",
"openLinkInNewTab": "Відкрити посилання в новій вкладці",
"history_restoreDone": "Документ відновлено",
"history_restorePrompt": "Точно замінити поточну версію документа показаною версією?",
"history_restoreTitle": "Відновити обрану версію документа",
"history_closeTitle": "Закрити історію",
"history_loadMore": "Більше історії",
"history_prev": "Попередня версія",
"history_next": "Наступна версія",
"historyButton": "Показати історію документа",
"historyText": "Історія",
"help_button": "Довідка",
"show_help_button": "Показати довідку",
"cancel": "Скасувати",
"cancelButton": "Скасувати (Esc)",
"okButton": "Гаразд (Enter)",
"ok": "Гаразд",
"notifyLeft": "{0} виходить зі спільного сеансу",
"notifyRenamed": "{0} змінює ім'я на {1}",
"notifyJoined": "{0} приєднується до спільного сеансу",
"fileEmbedTag": "Тоді додайте цей тег «media» в те місце сторінки, куди бажаєте вбудувати файл:",
"fileEmbedScript": "Щоб вбудувати файл, додайте цей скрипт завантаження тегу «media» на сторінку:",
"viewEmbedTag": "Щоб вбудувати документ, додайте цей iframe у бажане місце сторінки. Можете змінити його стиль за допомогою CSS чи атрибутів HTML.",
"viewShare": "Лише читання",
"editShare": "Редагування посилання",
"themeButtonTitle": "Обрати палітру для редагування коду й слайдів",
"themeButton": "Тема",
"languageButtonTitle": "Обрати мову для підсвітки синтаксису",
"languageButton": "Мова",
"slide_invalidLess": "Хибний власний стиль",
"slideOptionsTitle": "Налаштувати слайди",
"slideOptionsText": "Параметри",
"tags_noentry": "Додати мітку видаленому документу неможливо",
"tags_duplicate": "Мітка вже є: {0}",
"tags_notShared": "Ваших міток іншим не видно",
"tags_add": "Оновити мітки обраних документів",
"tags_title": "Мітки (лише для вас)",
"filePicker_filter": "Фільтрувати файли за назвою",
"filePicker_description": "Оберіть файл зі свого CryptDrive-каталогу чи вивантажте новий файл для вбудування",
"filePicker_close": "Закрити",
"filePickerButton": "Вбудувати файл із CryptDrive-каталогу",
"printBackgroundRemove": "Вилучити це зображення тла",
"printBackgroundNoValue": "<em>Зображення тла відсутнє</em>",
"printBackgroundValue": "<b>Поточне тло:</b> <em>{0}</em>",
"printBackgroundButton": "Обрати зображення",
"printBackground": "Використати зображення тла",
"printTransition": "Анімувати переходи",
"printCSS": "Власні стильові правила (CSS):",
"printTitle": "Показати заголовок документа",
"printDate": "Показати дату",
"printSlideNumber": "Показати номер слайду",
"printOptions": "Параметри розмітки",
"printButtonTitle2": "Роздрукувати документ чи експортувати його до PDF-файлу",
"printButton": "Друкувати (Enter)",
"printText": "Друкувати",
"propertiesButtonTitle": "Переглянути властивості документа",
"propertiesButton": "Властивості",
"colorButtonTitle": "Змінити колір тексту презентації",
"backgroundButtonTitle": "Змінити колір тла презентації",
"presentButtonTitle": "Запустити режим презентації",
"previewButtonTitle": "Перемкнути режим перегляду Markdown",
"template_empty": "Шаблонів іще нема",
"template_import": "Імпортувати шаблон",
"saveTitle": "Зберегти заголовок (Enter)",
"useTemplateCancel": "Почати наново (Esc)",
"useTemplateOK": "Обрати шаблон (Enter)",
"useTemplate": "Почати з шаблону?",
"selectTemplate": "Оберіть шаблон чи натисніть Escape",
"templateSaved": "Шаблон збережено!",
"saveTemplatePrompt": "Оберіть заголовок шаблону",
"saveTemplateButton": "Зберегти як шаблон",
"uploadButtonTitle": "Вивантажити новий файл у свій CryptDrive-каталог",
"uploadFolderButton": "Вивантажити каталог",
"uploadButton": "Вивантажити файли",
"newButtonTitle": "Створити документ",
"newButton": "Створити",
"userAccountButton": "Користувацьке меню",
"chatButton": "Бесіда",
"userListButton": "Перелік облікових записів",
"shareSuccess": "Посилання скопійовано в буфер",
"shareButton": "Поширити",
"movedToTrash": "Документ посунуто до смітника.<br><a>Перейти до CryptDrive-каталогу</a>",
"forgetPrompt": "Точно посунути документ до смітника?",
"forgetButton": "Видалити",
"clickToEdit": "Натисніть, щоб редагувати",
"user_accountName": "Назва облікового запису",
"user_displayName": "Видима назва",
"user_rename": "Змінити видиму назву",
"exportPrompt": "Як назвати файл?",
"exportButtonTitle": "Експортувати цей документ до локального файлу",
"exportButton": "Експорт",
"importButtonTitle": "Імпортувати документ із локального файлу",
"importButton": "Імпорт",
"pinLimitDrive": "Вага вашого каталогу досягла межі.<br>Ви не можете створювати нових документів.",
"pinLimitNotPinned": "Вага вашого каталогу досягла межі.<br>Документ не потрапить до вашого CryptDrive-каталогу.",
"pinLimitReachedAlertNoAccounts": "Вага вашого каталогу досягла межі",
"pinLimitReachedAlert": "Вага вашого каталогу досягла межі. Нові документи не потраплятимуть до вашого CryptDrive-каталогу.<br>Можете вилучити документи зі свого CryptDrive-каталогу — чи підвищити межу <a>платною підпискою</a>.",
"pinLimitReached": "Вага вашого каталогу досягла межі",
"formattedKB": "{0} кБ",
"formattedGB": "{0} ГБ",
"formattedMB": "{0} МБ",
"KB": "кБ",
"GB": "ГБ",
"MB": "МБ",
"storageStatus": "Каталог:<br>використано <b>{0}</b> з <b>{1}</b>",
"upgradeAccount": "Поліпшити обліковий запис",
"upgrade": "Поліпшити",
"language": "Мова",
"userlist_offline": "Поки ви поза мережею, список облікових записів недоступний.",
"editor": "редагує",
"viewers": "читають",
"viewer": "читає",
"users": "Облікові записи",
"anonymous": "Хтось",
"readonly": "Лише читання",
"errorState": "Критична помилка: {0}",
"forgotten": "Посунуто до смітника",
"initializing": "Запуск…",
"typing": "Редагування",
"reconnecting": "Під'єднання",
"synchronizing": "Синхронізація",
"disconnected": "Від'єднано",
"realtime_unrecoverableError": "Виникла помилка, відновитись після якої неможливо. Сторінку буде перезавантажено.",
"disabledApp": "Застосунок вимкнено. Напишіть адміністрації цього сервера CryptPad, щоб дізнатися більше.",
"mustLogin": "Ввійдіть, щоб переглянути цю сторінку",
"deletedFromServer": "Документ знищено",
"settings_logoutEverywhereConfirm": "Точно? Вам доведеться ввійти заново на всіх пристроях.",
"settings_logoutEverywhere": "Примусово вийти з усіх інших вебсеансів",
"settings_logoutEverywhereTitle": "Припинити віддалені сеанси",
"settings_logoutEverywhereButton": "Вийти",
"settings_publicSigningKey": "Відкритий ключ підпису",
"settings_anonymous": "Ви не ввійшли. Параметри стосуватимуться лише цього переглядача.",
"settings_deleted": "Обліковий запис видалено. Буде відкрито головну сторінку.",
"settings_deleteModal": "Передайте наступне адміністрації свого сервера CryptPad, щоб вони вилучили ваші дані з сервера.",
"settings_deleteButton": "Видалити обліковий запис",
"settings_deleteHint": "Обліковий запис видаляється назовсім. Ваш CryptDrive-каталог і перелік ваших документів буде видалено з сервера. Решту ваших документів буде видалено через 90 днів, якщо більше ніхто не зберігали їх до своїх CryptDrive-каталогів.",
"settings_deleteTitle": "Видалення облікового запису",
"settings_userFeedback": "Ввімкнути зворотний зв'язок",
"settings_userFeedbackHint2": "Вміст ваших документів ніколи не передаватиметься серверу.",
"settings_userFeedbackHint1": "CryptPad може надсилати серверу мінімальний зворотний відгук, щоб ми розуміли, як слід удосконалити інтерфейс. ",
"settings_userFeedbackTitle": "Зворотний зв'язок",
"settings_autostoreMaybe": "Вручну",
"settings_autostoreNo": "Запитувати",
"settings_autostoreYes": "Автоматично",
"settings_autostoreHint": "<b>Автоматично</b> Всі відкриті документи зберігатимуться до вашого CryptDrive-каталогу.<br><b>Запитувати</b> Якщо ваш CryptDrive-каталог ще не містить документа, вам буде запропоновано його туди зберегти.<br><b>Вручну</b> Жодних документів не буде автоматично збережено до CryptDrive-каталогу. Пропозицію їх зберегти буде сховано.",
"settings_autostoreTitle": "Зберігати до CryptDrive-каталогу",
"settings_importDone": "Імпорт завершено",
"settings_importConfirm": "Точно імпортувати нещодавні документи цього переглядача до CryptDrive-каталогу вашого облікового запису?",
"settings_import": "Імпорт",
"settings_importTitle": "Імпорт нещодавніх документів переглядача до CryptDrive-каталогу",
"settings_resetThumbnailsDone": "Всі мініатюри стерто.",
"settings_resetThumbnailsDescription": "Стерти всі мініатюри документів, збережені у вашому переглядачі.",
"settings_resetThumbnailsAction": "Стерти",
"settings_disableThumbnailsDescription": "Мініатюри автоматично створюються й зберігаються у вашому переглядачі, коли ви переглядаєте той чи інший документ. Цю функцію можна вимкнути.",
"settings_disableThumbnailsAction": "Вимкнути створення мініатюр у CryptDrive-каталозі",
"settings_thumbnails": "Мініатюри",
"settings_resetTipsDone": "Всі поради буде показано ще раз.",
"settings_resetTipsButton": "Відновити доступні поради щодо CryptDrive-каталогу",
"settings_resetTipsAction": "Відновити",
"settings_resetTips": "Поради",
"settings_resetError": "Хибний текст підтвердження. Ваш CryptDrive-каталог залишивсь недоторканим.",
"settings_resetDone": "Ваш каталог знов порожній!",
"settings_resetPrompt": "З вашого каталогу буде вилучено всі документи.<br>Точно продовжити?<br>Щоб підтвердити, напишіть: «<em>I love CryptPad</em>».",
"settings_reset": "Вилучити всі файли й каталоги з вашого CryptDrive-каталогу",
"settings_resetButton": "Вилучити",
"settings_resetNewTitle": "Стерти CryptDrive-каталог",
"settings_exportErrorOther": "Виникла помилка експорту документа: {0}",
"settings_exportErrorMissing": "Документ стерто через бездіяльність (чи видалено тими, в чиїй власності він був)",
"settings_exportErrorEmpty": "Документ неможливо експортувати, бо він порожній чи пошкоджений.",
"settings_exportErrorDescription": "Не вдалося експортувати наступні документи:",
"settings_exportError": "Переглянути помилки",
"settings_export_done": "Завантаження готове!",
"settings_export_compressing": "Стиснення даних…",
"settings_export_download": "Завантаження й розшифрування документів…",
"settings_export_reading": "Читання CryptDrive-каталогу…",
"settings_exportCancel": "Точно скасувати експорт? Наступного разу вам доведеться почати заново.",
"settings_exportWarning": "Увага: розробка засобу ще триває. Можливі проблеми залежно від обсягу. Щоб це спрацювало швидше, не перемикайте вкладки.",
"settings_exportFailed": "Експорт документів, що завантажуються понад хвилину, буде припинено. Замість них буде показано посилання на кожен документ, який не вдалося експортувати.",
"settings_exportDescription": "Зачекайте, поки ми завантажуємо й розшифровуємо ваші документи. Це може тривати кілька хвилин. Закриття вкладки припинить процес.",
"settings_exportTitle": "Експорт CryptDrive-каталогу",
"settings_backup2Confirm": "Це завантажить усі документи й файли вашого CryptDrive-каталогу. Щоб продовжити, оберіть назву",
"settings_backup2": "Завантажити CryptDrive-каталог",
"settings_backupHint2": "Завантажити всі документи каталогу. Всі документи, формат яких можуть читати інші застосунки, буде збережено саме в такому форматі. Документи, в яких такого формату нема, буде завантажено в форматі, читати який може CryptPad.",
"settings_restore": "Імпорт",
"settings_backup": "Експорт",
"settings_backupHint": "Експортуйте й імпортуйте резервні копії всього вашого CryptDrive-каталогу. Вони міститимуть не вміст ваших документів, а лише ключі до них.",
"settings_backupCategory": "Резерв",
"settings_save": "Зберегти",
"settings_title": "Параметри",
"settings_cat_subscription": "Підписка",
"settings_cat_pad": "Гіпертекст",
"settings_cat_code": "Код",
"settings_cat_cursor": "Курсор",
"settings_cat_drive": "CryptDrive-каталог",
"settings_cat_account": "Обліковий запис",
"register_emailWarning3": "Продовжуйте лише в тому разі, якщо розумієте це й усе одно бажаєте використати е-пошту як псевдонім.",
"register_emailWarning2": "Ви не зможете скинути пароль за допомогою е-пошти, як на деяких інших службах.",
"register_emailWarning1": "Це дозволено, але її не буде надіслано на наш сервер.",
"register_emailWarning0": "Схоже, ви зазначили адресу е-пошти як псевдонім.",
"register_alreadyRegistered": "Обліковий запис уже існує, бажаєте ввійти?",
"register_warning": "Увага",
"register_cancel": "Скасувати",
"register_writtenPassword": "Підтвердити, що псевдонім і пароль занотовано",
"register_header": "Зареєструватись",
"register_whyRegister": "Навіщо реєструватись?",
"register_mustAcceptTerms": "Ви мусите прийняти умови надання послуг.",
"register_passwordTooShort": "Паролі мусять містити не менше, ніж {0} символів.",
"register_passwordsDontMatch": "Паролі не збіжні!",
"register_acceptTerms": "Приймаю <a>умови надання послуг</a>",
"register_importRecent": "Імпортувати документи з гостьового сеансу",
"login_unhandledError": "Виникла неочікувана помилка :(",
"login_invalPass": "Пароль обов'язковий",
"login_invalUser": "Псевдонім обов'язковий",
"login_noSuchUser": "Хибний псевдонім чи пароль. Повторіть спробу чи зареєструйтесь",
"login_hashing": "Триває хешування паролю, просимо зачекати.",
"deleted": "Видалено",
"saved": "Збережено",
"error": "Помилка",
"loading": "Завантаження...",
"newVersionError": "Доступна нова версія CryptPad.<br><a href='#'>Перезавантажте</a>, щоб скористатись новою версією, або натисніть Esc, щоб переглянути свої файли <b>автономно</b>.",
"errorRedirectToHome": "Натисніть <em>Esc</em>, щоб перейти до свого CryptDrive-каталогу.",
"errorCopy": " Щоб повернутись до поточної версії в режимі читання, натисніть <em>Esc</em>.",
"invalidHashError": "Ви спробували переглянути документ за хибною URL-адресою.",
"chainpadError": "При оновленні вашого файлу виникла критична помилка. Сторінку переведено до режиму читання, щоб ви не втратили своєї роботи.<br>Натисніть <em>Esc</em>, щоб переглянути документ, або перезавантажте, щоб продовжити редагування.",
"inactiveError": "Документ видалено через бездіяльність. Натисніть Esc, щоб створити новий.",
"expiredError": "Документ стерто через бездіяльність.",
"deletedError": "Документ видалено.",
"anonymousStoreDisabled": "Адміністрація цього сервера CryptPad вимкнула гостьовий доступ до файлів. Увійдіть, щоб доступитися свого CryptDrive-каталогу.",
"padNotPinnedVariable": "Документ буде стерто через {4} дні бездіяльності. {0}Ввійдіть{1] або {2}зареєструйтесь{3}, щоб зберігати його довше.",
"padNotPinned": "Документ буде стерто через 3 місяці бездіяльності. {0}Ввійдіть{1} або {2}зареєструйтесь{3}, щоб зберігати його довше.",
"onLogout": "{0}Ввійдіть до облікового запису{1} —<br>або натисніть <em>Escape</em> для доступу в режимі читання.",
"typeError": "Документ несумісний з обраним застосунком",
"common_connectionLost": "<b>Втрачено з'єднання з сервером</b><br>До відновлення з'єднання ви зможете лише читати.",
"type": {
"presentation": "Презентація",
"doc": "Документ",
"form": "Форма",
"teams": "Команди",
"sheet": "Таблиця",
"contacts": "Контакти",
"todo": "План",
"media": "Медіафайл",
"file": "Файл",
"whiteboard": "Дошка",
"drive": "CryptDrive-каталог",
"slide": "Markdown-слайди",
"kanban": "Канбан",
"poll": "Опитування",
"code": "Код",
"pad": "Гіпертекст"
},
"main_title": "CryptPad: спільне редагування наживо — це просто",
"upload_modal_owner": "Власний файл",
"upload_modal_filename": "Назва файлу (суфікс <em>{0}</em> додається автоматично)",
"upload_modal_title": "Параметри вивантаження",
"upload_title": "Вивантажити файл",
"settings_cursorShowLabel": "Показувати курсори",
"settings_cursorShowHint": "Оберіть, чи бажаєте бачити, де в спільних документах зараз працюють інші.",
"settings_cursorShowTitle": "Показувати курсори інших облікових записів",
"settings_cursorShareLabel": "Поширювати курсор",
"settings_cursorShareHint": "Визначте, чи слід іншим бачити, де в спільних документах зараз ваш курсор.",
"settings_cursorShareTitle": "Поширювати, де мій курсор",
"settings_cursorColorHint": "Змініть колір позначення свого облікового запису в спільних документах.",
"settings_cursorColorTitle": "Колір курсору",
"settings_changePasswordNewPasswordSameAsOld": "Новий пароль мусить відрізнятись від поточного.",
"settings_changePasswordPending": "Пароль оновлюється. Не закривайте й не перезавантажуйте цієї сторінки до завершення.",
"settings_changePasswordError": "Виникла несподівана помилка. Якщо вам не вдається ввійти чи змінити пароль, напишіть адміністрації свого сервера CryptPad.",
"settings_changePasswordConfirm": "Точно змінити пароль? Вам доведеться ввійти на всі пристрої заново.",
"settings_changePasswordNewConfirm": "Підтвердьте новий пароль",
"settings_changePasswordNew": "Новий пароль",
"settings_changePasswordCurrent": "Поточний пароль",
"settings_changePasswordButton": "Змінити пароль",
"settings_changePasswordHint": "Змініть пароль облікового запису: введіть поточний пароль і підтвердьте його ще раз.<br><b>Скинути забутий пароль буде неможливо, тож будьте обачні!</b>",
"settings_changePasswordTitle": "Змінити пароль",
"settings_ownDrivePending": "Ваш обліковий запис поліпшується. Не закривайте й не перезавантажуйте цієї сторінки до завершення.",
"settings_ownDriveConfirm": "Поліпшення облікового запису відносно повільне. Вам доведеться ввійти на всіх пристроях заново. Точно поліпшити?",
"settings_ownDriveButton": "Поліпшити обліковий запис",
"settings_ownDriveHint": "Старим обліковим записам найновіші функції недоступні з технічних причин. Безкоштовне оновлення ввімкне поточні функції й підготує ваш CryptDrive-каталог до майбутніх оновлень.",
"settings_ownDriveTitle": "Оновити обліковий запис",
"settings_padOpenLinkLabel": "Відкривати посилання одразу",
"settings_padOpenLinkHint": "Дає змогу відкривати вбудовані посилання натиском без спливного попереднього перегляду",
"settings_padOpenLinkTitle": "Відкривати посилання одним натиском",
"settings_padSpellcheckLabel": "Перевіряти правопис у гіпертекстових документах",
"settings_padSpellcheckHint": "Дає змогу вмикати перевірку правопису в гіпертекстових документах. Орфографічні помилки буде підкреслено червоним, а щоб побачити варіанти виправлень, затискайте клавішу Ctrl чи Meta.",
"settings_padSpellcheckTitle": "Правопис",
"settings_padWidthLabel": "Звузити редактор",
"settings_padWidthHint": "Перемикайтесь між сторінковим режимом (усталеним), який обмежує ширину текстового редактора, й повноекранним режимом.",
"settings_padWidth": "Максимальна ширина редактора",
"settings_codeFontSize": "Розмір шрифту в редакторі коду",
"settings_codeUseTabs": "Відступати табуляцією (замість пробілів)",
"settings_codeIndentation": "Відступи редактора коду (пробіли)",
"settings_driveDuplicateLabel": "Ховати дублі",
"settings_driveDuplicateHint": "Коли ви посуваєте власні документи до спільного каталогу, ваш CryptDrive-каталог зберігає копію, щоб забезпечити вам над нею контроль. Можна ховати такі дублі файлів. Лише спільну версію буде показано, доки її не видалять, після чого оригінал знов стане видно за попередньою адресою.",
"settings_driveDuplicateTitle": "Дублі власних документів",
"features_f_storage1_note": "Збережені в CryptDrive-каталозі документи не стираються через бездіяльність",
"features_f_storage1": "Особистий простір ({0})",
"features_f_file1_note": "Збереження файлів до CryptDrive-каталогу: зображень, PDF, відео тощо. Поширення їх контактам і вбудова їх у документи (до {0}МБ)",
"features_f_file1": "Вивантаження й поширення файлів",
"features_f_social_note": "Додання контактів і захищена спільна робота, створення профілю, налаштування доступу",
"features_f_social": "Функції для спільнот",
"features_f_devices_note": "Доступ до CryptDrive-каталогу будь-де, звідки ви входите до облікового запису",
"features_f_devices": "Документи одразу на всіх ваших пристроях",
"features_f_cryptdrive1_note": "Підкаталоги, спільні каталоги, шаблони, мітки",
"features_f_cryptdrive1": "Повний функціонал CryptDrive-каталогу",
"features_f_anon_note": "Плюс додаткові можливості",
"features_f_anon": "Всі анонімні функції",
"features_f_storage0_note": "Документи буде стерто через {0} днів бездіяльності",
"features_f_storage0": "Обмежений термін зберігання",
"features_f_cryptdrive0_note": "Можливість зберегти відвідані документи в переглядачі й відкрити їх згодом",
"features_f_cryptdrive0": "Частковий функціонал CryptDrive-каталогу",
"features_f_file0_note": "Перегляд і завантаження документів, поширених іншими",
"features_f_file0": "Відкриття документів",
"features_f_core_note": "Редагування, імпорт-експорт, історія, перелік облікових записів, бесіди",
"features_f_core": "Загальнодоступні функції",
"features_f_apps": "Доступ до всіх застосунків",
"features_premium": "Платно",
"features_registered": "З обліковим записом",
"features_anon": "Анонімно",
"features_title": "Функції",
"features": "Функції",
"whatis_drive": "Структурований CryptDrive-каталог",
"whatis_collaboration": "Приватне спільне редагування",
"whatis_title": "Що таке CryptPad?",
"topbar_whatIsCryptpad": "Що таке CryptPad",
"blog": "Блог",
"terms": "Умови",
"contact": "Зв'язок",
"privacy": "Політика приватності",
"about": "Про застосунок",
"footer_aboutUs": "Про нас",
"main_catch_phrase": "Редагуйте спільно<br>вільними програмами з наскрізним шифруванням",
"home_host": "Це незалежний громадський сервер CryptPad.",
"mdToolbar_toc": "Зміст",
"mdToolbar_code": "Код",
"mdToolbar_check": "Завдання",
"mdToolbar_list": "Перелік",
"mdToolbar_nlist": "Нумерація",
"mdToolbar_quote": "Цитата",
"mdToolbar_link": "Посилання",
"mdToolbar_heading": "Заголовок",
"mdToolbar_strikethrough": "Перекреслення",
"mdToolbar_italic": "Курсив",
"mdToolbar_bold": "Грубий",
"mdToolbar_help": "Довідка",
"mdToolbar_defaultText": "Ваш текст",
"mdToolbar_button": "Перемкнути показ панелі Markdown",
"pad_base64": "Документ містить неоптимізовані зображення. Ці зображення зроблять документ у вашому CryptDrive-каталозі значно важчим, і його завантаження сповільняться. Виокремити ці файли до CryptDrive-каталогу в оптимізованому форматі?",
"todo_removeTaskTitle": "Вилучити завдання з плану",
"todo_markAsIncompleteTitle": "Позначити завдання незавершеним",
"todo_markAsCompleteTitle": "Позначити завдання завершеним",
"todo_title": "CryptTodo-план",
"download_step2": "Розшифрування",
"download_step1": "Завантаження",
"download_dl": "Завантажити",
"download_mt_button": "Завантажити",
"upload_up": "Вивантажити",
"upload_mustLogin": "Ввійдіть, щоб вивантажити файли",
"upload_size": "Вага",
"upload_cancelled": "Скасовано",
"upload_pending": "Очікування",
"upload_choose": "Обрати файл",
"upload_tooLargeBrief": "Файл перевищує межу: {0}МБ",
"upload_tooLarge": "Файл важить більше, ніж дозволено вивантажувати вашим обліковим записом.",
"upload_notEnoughSpaceBrief": "Бракує простору",
"upload_notEnoughSpace": "Простору в CryptDrive-каталозі недостатньо для цього файлу.",
"upload_success": "Файл {0} успішно вивантажено й додано до вашого каталогу.",
"upload_uploadPending": "Ви вже щось вивантажуєте. Скасувати це й вивантажити новий файл?",
"upload_serverError": "Помилка сервера: поки що вивантажити файл неможливо.",
"uploadFolder_modal_forceSave": "Зберегти файли до CryptDrive-каталогу",
"uploadFolder_modal_owner": "Власні файли",
"uploadFolder_modal_filesPassword": "Пароль до файлів",
"uploadFolder_modal_title": "Параметри вивантаження",
"header_homeTitle": "Перейти до головної сторінки CryptPad",
"header_logoTitle": "Перейти до свого CryptDrive-каталогу",
"four04_pageNotFound": "Не вдалося знайти шукану вами сторінку.",
"tos_3rdparties": "Ми не надаємо персоналізованих даних стороннім особам, коли законодавство нас до цього не зобов'язує.",
"tos_logs": "Метадані, надані серверу переглядачем, можуть журналюватися для супроводу служби.",
"tos_e2ee": "Прочитати чи змінити CryptPad-документ може будь-хто, кому вдасться вгадати чи іншим чином отримати ідентифікатор того чи іншого фрагменту. Радимо поширювати посилання лише за допомогою технологій наскрізно зашифрованого листування — й не несемо відповідальності за наслідки можливого витоку таких посилань.",
"tos_availability": "Сподіваємось, що ця служба принесе вам користь, але не можемо гарантувати доступність чи швидкодію. Будь ласка, регулярно експортуйте дані.",
"tos_legal": "Не зловживайте й не робіть нічого зловмисного чи протизаконного.",
"tos_title": "Умови надання послуг CryptPad",
"features_f_subscribe_note": "Щоб підписатись, потрібно зареєструвати обліковий запис",
"features_f_subscribe": "Підписатись",
"features_f_supporter_note": "Допомагайте CryptPad покривати витрати й просувайте нову норму — добровільну підтримку дружніх до приватності програм власним коштом",
"features_f_supporter": "Підтримка приватності",
"features_f_support_note": "Пріоритетна відповідь команди адміністрування поштою й через вбудовану систему заявок",
"features_f_support": "Швидша підтримка",
"features_f_storage2_note": "Від 5 до 50 ГБ залежно від плану, й можна вивантажувати більші файли — до {0} МБ",
"features_f_storage2": "Більше простору",
"features_f_reg_note": "Плюс додаткові переваги",
"features_f_reg": "Весь функціонал облікових записів",
"features_f_register": "Безкоштовна реєстрація",
"creation_owned": "Власний документ",
"creation_404": "Документу більше нема. Створіть новий за допомогою цієї форми.",
"feedback_optout": "Якщо бажаєте відмовитись, перейдіть до <a>сторінки користувацьких параметрів</a>, на якій знайдете пташку — вимикач зворотного зв'язку.",
"feedback_privacy": "Ми захищаємо вашу приватність і водночас бажаємо, щоб використовувати CryptPad було якнайпростіше. Цей файл дає нам змогу дізнаватись, які функції інтерфейсу корисні нашій авдиторії: коли ви користуєтесь певними функціями, ми запитуємо цей файл із відповідним параметром.",
"feedback_about": "Якщо ви це читаєте, ймовірно вам цікаво, чому CryptPad робить запити до вебсторінок, коли ви виконуєте певні дії.",
"view": "переглянути",
"edit": "редагувати",
"help_genericMore": "Дізнайтесь, чим CryptPad може бути корисним саме вам, прочитавши нашу <a>документацію</a>",
"error_embeddingDisabled": "На цьому сервері CryptPad вбудовування заборонено",
"error_embeddingDisabledSpecific": "Вбудовувати цей застосунок CryptPad заборонено.",
"error_incorrectAccess": "Ця сторінка доступна лише через {0}.",
"error_evalPermitted": "Скасовано, бо eval має бути заборонено.\n\nЦя помилка пов'язана з хедерами Content-Security-Policy, її можливі причини: або застарілий переглядач їх не підтримує, або розширення переглядача втручаються в їхню коректну поведінку, або цей сервер CryptPad хибно налаштовано.",
"ui_experimental": "Ця функція все ще в розробці.",
"form_updateWarning": "Все одно оновити",
"form_update": "Оновити",
"form_viewAllAnswers": "Переглянути всі відповіді ({0})",
"form_open": "Відкрити",
"form_willClose": "Цю форму буде закрито {0}",
"form_viewAnswer": "Переглянути мої відповіді",
"form_addMultiple": "Додати всі",
"form_template_poll": "Швидке опитування про розклад",
"form_requiredWarning": "Відповісти на деякі запитання обов'язково:",
"form_submitWarning": "Усе одно надіслати",
"form_results_empty": "Відповідей нема",
"form_notAnswered": "Порожніх відповідей: <b>{0}</b>",
"form_textType": "Тип тексту",
"form_text_number": "Число",
"form_text_email": "Е-пошта",
"form_text_url": "Посилання",
"form_text_text": "Текст",
"form_newItem": "Новий пункт",
"form_newOption": "Новий варіант",
"form_poll_time": "Час",
"form_poll_day": "День",
"form_input_ph_email": "пошта@зразок.укр",
"form_input_ph_url": "https://зразок.укр",
"form_clear": "Стерти",
"form_cantFindAnswers": "Не вдалося отримати ваші наявні відповіді на цю форму.",
"form_anonAnswer": "Відповіді на цю форму анонімні",
"form_authAnswer": "Цю форму не можна надіслати анонімно",
"form_addMultipleHint": "Додати кілька днів і годин",
"form_answerWarning": "Непідтверджена особа",
"form_invalidQuestion": "Запитання {0}",
"form_invalidWarning": "Деякі відповіді хибні:",
"form_invalid": "Хибна форма",
"form_corruptAnswers": "Форма вже має відповіді. Зміна типу запитання може стерти дані попередніх відповідей.",
"form_editable": "Редагування після надсилання",
"form_editType": "Тип варіанту",
"form_editMaxLength": "Максимум символів",
"form_maxOptions": "максимум {0}",
"form_editMax": "Максимум обраних відповідей",
"form_editor": "Редагувати",
"form_showIndividual": "Окремі відповіді",
"form_showSummary": "Підсумок",
"form_backButton": "Назад",
"form_viewButton": "Переглянути",
"form_answerName": "Відповідь {0} {1}",
"form_answerAnonymous": "Анонімна відповідь {0}",
"form_exportSheet": "Експорт до таблиці",
"form_exportCSV": "Експорт до CSV",
"form_totalResponses": "Усього відповідей: {0}",
"form_pollTotal": "Усього",
"form_editAnswer": "Редагувати мої відповіді",
"form_alreadyAnswered": "Ви відповіли на цю форму {0}",
"form_submit": "Надіслати",
"form_reset": "Скинути",
"form_answerAs": "Відповісти як",
"form_anonName": "Ваше ім'я",
"form_anonymousBox": "Відповісти анонімно",
"form_answered": "Ви вже відповіли на цю форму",
"form_answerChoice": "Оберіть, як ви бажаєте відповісти на цю форму:",
"form_changeTypeConfirm": "Оберіть тип нового запитання.",
"form_condition_hasnot": "не містить",
"form_condition_has": "містить",
"form_condition_isnot": "це не",
"form_condition_is": "це",
"form_condition_v": "Оберіть варіант",
"form_condition_q": "Оберіть запитання",
"form_conditional_addAnd": "Додати умову ТА",
"form_conditional_add": "Додати умову АБО",
"form_conditional": "Показувати цей розділ лише за умови:",
"form_conditional_hint": "Щоб зробити розділ умовним, додайте над ним запитання з вибором чи пташками",
"form_type_section": "Умовний розділ",
"form_page": "Сторінка {0}/{1}",
"form_type_page": "Розрив сторінки",
"form_poll_hint": "<i></i>: Так, <i></i>: Ні, <i></i>: Можливо",
"form_pollYourAnswers": "Ваші відповіді",
"form_poll_switch": "Обернути осі",
"form_poll_text": "Текст",
"form_type_poll": "Опитування",
"form_sort_hint": "Впорядкуйте від найбільш (1) до найменш (2) пріоритетного.",
"form_add_item": "Додати пункт",
"form_defaultItem": "Пункт {0}",
"form_type_multicheck": "Таблиця пташок",
"form_type_multiradio": "Таблиця вибору",
"form_required_off": "Необов'язково",
"form_required_on": "Обов'язково",
"form_required_answer": "Відповісти: ",
"form_add_option": "Додати варіант",
"form_defaultOption": "Варіант {0}",
"form_maxLength": "Використано символів: {0}/{1}",
"form_type_textarea": "Абзац",
"form_default": "Ваше запитання?",
"form_preview_button": "Попередній перегляд",
"form_type_sort": "Пріоритетність",
"form_type_checkbox": "Пташки",
"form_type_radio": "Вибір",
"form_delete": "Видалити",
"form_editBlock": "Редагувати",
"form_description_default": "Ваш текст",
"form_type_md": "Опис",
"form_type_input": "Текст",
"form_updateMsg": "Оновити текст подяки",
"form_responseMsg": "Цей текст бачитимуть, надіславши відповідь на форму.",
"form_addMsg": "Додати текст подяки",
"form_colors": "Палітра",
"toolbar_collapse": "Звузити пенал",
"toolbar_expand": "Розширити пенал",
"toolbar_savetodrive": "Зберегти як зображення",
"toolbar_insert": "Вставити",
"toolbar_preview": "Переглянути",
"makeACopy": "Дублювати",
"kanban_editCard": "Редагувати цю картку",
"kanban_editBoard": "Редагувати цю дошку",
"kanban_clearFilter": "Скасувати фільтр",
"kanban_noTags": "Міток нема",
"kanban_tags": "Фільтр за міткою",
"kanban_delete": "Видалити",
"kanban_color": "Колір",
"kanban_body": "Вміст",
"kanban_title": "Заголовок",
"areYouSure": "Точно?",
"settings_cacheCheckbox": "Увімкнути кеш на цьому пристрої",
"settings_cacheButton": "Стерти наявний кеш",
"settings_cacheHint": "CryptPad зберігає частини ваших документів у пам'яті переглядача, щоб заощаджувати вам трафік і швидше завантажувати файли. Можете вимкнути кеш, якщо на пристрої бракує простору. З міркувань безпеки, кеш стирається при кожному виході, але можете стерти його вручну, якщо бажаєте звільнити дисковий простір на своєму комп'ютері.",
"settings_safeLinksCheckbox": "Увімкнути безпечні посилання",
"settings_safeLinkDefault": "Безпечні посилання тепер усталено ввімкнено. Щоб копіювати посилання, використовуйте меню <i></i> <b>Поширити</b>, а не рядок адреси переглядача.",
"settings_safeLinksHint": "CryptPad вкладає до посилань на документи ключі для їхнього розшифрування. Будь-хто з доступом до історії ваших переглядів потенційно може читати ваші дані. Зокрема це розширення переглядача, які втручаються в сторінку, й переглядачі, які синхронізують історію між пристроями. За кожної можливості вмикайте «безпечні посилання», щоб ключі не потрапляли до історії ваших переглядів і їх не було видно в рядку адреси. Радимо ввімкнути цю функцію й використовувати меню {0} Поширити для створення посилань, якими можливо ділитися.",
"settings_notifCalendarCheckbox": "Увімкнути календарні сповіщення",
"settings_notifCalendarTitle": "Календарні сповіщення",
"settings_notifCalendarHint": "Увімкніть чи вимкніть усі сповіщення про найближчі календарні події.",
"settings_codeBrackets": "Закривати дужки автоматично",
"settings_padNotifCheckbox": "Вимкнути сповіщення про коментарі",
"settings_padNotifHint": "Нехтувати сповіщеннями, коли хтось відповідає на один із ваших коментарів",
"settings_padNotifTitle": "Сповіщення про коментарі",
"settings_mediatagSizeHint": "Максимальна вага в мегабайтах (МБ) автоматичного завантаження медіафайлів (зображень, відео, pdf), вкладених до документів. Більші файли можливо завантажити вручну. Зазначте «-1», щоб завжди автоматично завантажувати всі медіафайли.",
"settings_mediatagSizeTitle": "Межа самозавантаження",
"features_noData": "Особових даних не потрібно",
"features_emailRequired": "Потрібна адреса е-пошти",
"notifications_dismissAll": "Відхилити всі",
"allowNotifications": "Дозволити сповіщення",
"allow_disabled": "вимкнено",
"allow_enabled": "увімкнено",
"allow_checkbox": "Увімкнути перелік доступу",
"teams": "Команди",
"allow_text": "Використання переліку доступу означає, що крім власниці чи власника, лише обрані облікові записи можуть відкривати документ.",
"allow_label": "Перелік доступу: {0}",
"errorPopupBlocked": "Робота з CryptPad передбачає відкриття нових вкладок. Будь ласка, дозвольте в рядку адреси переглядача спливні вікна. Ці вікна ніколи нічого вам не рекламуватимуть.",
"share_copyProfileLink": "Копіювати посилання на профіль",
"share_mediatagCopy": "Копіювати медіатег до буферу",
"share_linkCopy": "Копіювати посилання",
"access_allow": "Перелік",
"access_main": "Доступ",
"copy_title": "{0} (копія)",
"copyToClipboard": "Копіювати до буфера",
"settings_driveRedirect": "Автоматично переспрямовувати",
"settings_driveRedirectHint": "Автоматичне переспрямування з головної сторінки на диск після входу більше не усталено. Застарілу поведінку можна ввімкнути внизу.",
"settings_driveRedirectTitle": "Переспрямування головної сторінки",
"homePage": "Головна сторінка",
"share_formView": "Бере участь",
"share_formAuditor": "Рецензує",
"share_noContactsOffline": "Зараз ви поза мережею. Контакти недоступні.",
"share_noContactsLoggedIn": "Ви ще не маєте CryptPad-контактів. Поширте посилання на свій профіль, щоб інші могли надсилати вам запити на контакт.",
"share_noContactsNotLoggedIn": "Увійдіть чи зареєструйтесь, щоб переглянути наявні контакти й додати нові.",
"share_linkWarning": "Посилання містить ключі вашого документа. Всі, до кого воно потрапляє, незворотно отримують доступ до вашого файлу.",
"drive_treeButton": "Файли",
"toolbar_file": "Файл",
"oo_isLocked": "синхронізація змін, дочекайтесь",
"history_close": "Закрити",
"history_restoreDriveDone": "CryptDrive-каталог відновлено",
"history_restore": "Відновити",
"history_shareTitle": "Поширити посилання на цю версію",
"oo_version_latest": "Найновіша",
"oo_version": "Версія: ",
"snapshots_button": "Знімки",
"calendar_import": "Додати до своїх календарів",
"pad_goToAnchor": "Перейти до якоря",
"pad_mediatagOpen": "Відкрити файл",
"pad_mediatagShare": "Поширити файл",
"mediatag_notReady": "Будь ласка, завершіть завантаження",
"mediatag_loadButton": "Завантажити вкладення",
"mediatag_defaultImageName": "зображення",
"mediatag_saveButton": "Зберегти",
"restrictedError": "У вас нема прав доступу до цього документа",
"Offline": "Поза мережею",
"accessButton": "Доступ",
"tag_edit": "Редагувати",
"tag_add": "Додати",
"loading_state_5": "Формування документу",
"loading_state_4": "Завантаження команд",
"loading_state_3": "Завантаження спільних каталогів",
"loading_state_2": "Оновлення файлів",
"loading_state_1": "Завантаження каталогу",
"loading_state_0": "Збірка інтерфейсу",
"home_privacy_title": "Приватність як основа",
"importError": "Не вдалось імпортувати (хибний формат)",
"register_warning_note": "Через зашифровану природу CryptPad, адміністрація служби не зможе відновити дані, якщо ви забудете псевдонім та/або пароль. Будь ласка, зберігайте їх у безпечному місці.",
"contacts_confirmCancel": "Точно відкликати ваш запит на контакт до <b>{0}</b>?",
"contacts": "Контакти",
"settings_colorthemeHint": "Змініть загальні кольори CryptPad на цьому пристрої.",
"settings_colortheme_light": "Світла",
"settings_colortheme_default": "Усталена системна ({0})",
"settings_colortheme_dark": "Тьмяна",
"settings_colortheme_custom": "Власна",
"settings_colorthemeTitle": "Палітра",
"settings_cat_style": "Оформлення",
"settings_cat_kanban": "Канбан",
"settings_cat_security": "Конфіденційність",
"slide_textCol": "Колір тексту",
"slide_backCol": "Колір тла",
"infobar_versionHash": "Ви переглядаєте стару версію цього документа ({0}).",
"imprint": "Правові положення",
"info_sourceFlavour": "<a>Вихідний код</a> CryptPad",
"support_cat_account": "Обліковий запис",
"info_privacyFlavour": "<a>Політика приватності</a> цього сервера",
"user_about": "Про CryptPad",
"info_imprintFlavour": "<a>Правові положення</a> адміністрації цього сервера",
"info_termsFlavour": "<a>Умови надання послуг</a> цього сервера",
"register_notes_title": "Важливі зауваження",
"register_notes": "<ul class=\"cp-notes-list\"><li>Ваш пароль — це таємний ключ шифрування всіх ваших документів. <span class=\"red\">Якщо ви його втратите, ми жодним чином не зможемо відновити ваші дані.</span></li><li>Використовуючи спільний комп'ютер, <span class=\"red\">обов'язково вийдіть із сеансу</span> по завершенню роботи. Якщо ви лише закриєте вікно, переглядач зберігатиме доступ до вашого облікового запису. </li><li>Щоб зберегти документи, які ви створили й/або переглянули анонімно, поставте пташку «Імпортувати документи з гостьового сеансу». </li></ul>",
"whatis_xwiki_info": "<p>CryptPad розроблено <a>XWiki</a> — паризькою компанією, що створює вільне програмне забезпечення вже понад 15 років. Маємо широкий досвід розробки програм упорядкування даних. Розробка й супровід CryptPad — наше довгострокове зобов'язання, й наша історія показує, що ми його дотримуємо.</p>",
"whatis_xwiki": "Зроблено XWiki",
"whatis_model_info": "<p>CryptPad підтримується з 2016 французькими та європейськими дослідницькими грантами, зокрема від BPI France, NLNet Foundation, NGI Trust і Mozilla Open Source Support, а також пожертвами й підписками на cryptpad.fr. Ми віримо, що громадські кошти мусять фінансувати громадський код, тож весь код нашої служби відкритий. Тобто будь-хто може використовувати, розгортати й змінювати наше програмне забезпечення.</p><p>CryptPad не отримує прибутку з користувацьких даних. Це частина нашого бачення мережних служб із повагою до приватності. На відміну від великих платформ, які вдають «безкоштовність», перетворюючи ваші особисті дані на товар, CryptPad має на меті вибудувати стійку модель, добровільно фінансовану користувацькими внесками.</p><p>Ми надаємо функціонал CryptPad безкоштовно, тому що віримо: на особисту приватність заслуговують усі, а не лише люди з зайвими коштами. Якщо маєте змогу підтримати проєкт, допомагайте розроблювати нові функції, вдосконалити й супроводжувати наявні — це піде на користь усій авдиторії.</p><p>Практичність нашого проєкту доведено, й наступна мета — зробити його фінансово стійким завдяки користувацьким внескам. Якщо бажаєте підтримати CryptPad і зробити його стійкою альтернативою великим платформам, просимо допомогти нам одноразовим чи повторюваним внеском.</p>",
"whatis_model": "Бізнес-модель",
"whatis_drive_info": "<p>Зберігайте документи до CryptDrive-каталогу й керуйте ними. Створюйте підкаталоги, спільні каталоги й мітки для впорядкування документів. Вивантажуйте й поширюйте файли (PDF, фото, відео, звук тощо). Командні каталоги, спільні для користувачок і користувачів, дають змогу працювати разом і детально розмежовувати доступи.</p>",
"whatis_apps_info": "<p>CryptPad надає повномасштабний офісний набір усіх засобів, необхідних для дієвої співпраці. Доступні застосунки: гіпертекст, таблиці, код, Markdown, канбан, слайди, дошка й опитування.</p><p>Разом із застосунками ви отримуєте набір функцій для спільної роботи: бесіди, контакти, підсвічення авторства (код і Markdown), а також коментарі зі згадками (гіпертекст).</p>",
"whatis_apps": "Повний набір застосунків",
"whatis_collaboration_info": "<p>CryptPad розроблено, щоб надати вам змогу спільно працювати. Зміни документів синхронізуються наживо. Оскільки всі дані зашифровано, службі та її адміністрації не видно вміст жодних редагувань чи збережень.</p>",
"dontShowAgain": "Більше не показувати",
"documentID": "Ідентифікатор документа",
"settings_cacheTitle": "Кеш",
"docs_link": "Документація",
"creation_helperText": "Відкрити документацію",
"creation_new": "Створити {0}",
"creation_expiresIn": "Чинно ще",
"home_privacy_text": "CryptPad розроблено, щоб надати вам змогу спільно працювати, зберігаючи приватність даних. Увесь вміст шифрується й розшифровується вашим переглядачем. Тобто документи, бесіди й файли неможливо прочитати за межами вашого сеансу входу. Навіть адміністрація служб не має доступу до ваших даних.",
"register_registrationIsClosed": "Реєстрацію закрито.",
"home_support": "<p>Команда розробки не отримує жодного прибутку з користувацьких даних. Це частина нашого бачення мережних служб із повагою до приватності. На відміну від великих платформ, які вдають «безкоштовність», перетворюючи ваші особисті дані на товар, ми маємо на меті вибудувати стійку модель, добровільно фінансовану користувацькими внесками. </p><p>Підтримайте проєкт одноразовим чи повторюваним внеском через наш Open Collective. Наш бюджет прозорий і ми регулярно публікуємо оновлення. Також є декілька <a>нефінансових шляхів зробити внесок</a>.</p>",
"home_support_title": "Підтримайте CryptPad",
"home_opensource": "Будь-хто може розгорнути свій CryptPad-сервер і надавати особисті чи професійні послуги. Вихідний код відкрито на <a>GitHub</a>.",
"home_opensource_title": "Вільні програми",
"home_host_title": "Про цей сервер",
"admin_supportInitHelp": "Для вашого сервера ще не налаштовано скриньки підтримки. Якщо бажаєте отримувати на скриньку підтримки листи від користувачок і користувачів, попрохайте адміністрацію сервера запустити скрипт «./scripts/generate-admin-keys.js», додати відкритий ключ у файл «config.js» і надіслати вам закритий ключ.",
"admin_cat_support": "Підтримка",
"supportPage": "Підтримка",
"fm_info_sharedFolderHistory": "Це лише історія вашого поширеного каталогу: <b>{0}</b><br>Ваш CryptDrive-каталог не буде змінено при її перегляді.",
"notifications_dismiss": "Відхилити",
"share_withFriends": "Поширити",
"share_linkFriends": "Поширити контактам",
"share_filterFriend": "Пошук за іменем",
"notification_folderShared": "{0} поширює вам каталог: <b>{1}</b>",
"notification_fileShared": "{0} поширює вам файл: <b>{1}</b>",
"notification_padShared": "{0} поширює вам документ: <b>{1}</b>",
"isNotContact": "{0} <b>не</b> є вашим контактом",
"isContact": "{0} є вашим контактом",
"profile_friendRequestSent": "Запит на контакт подано…",
"profile_addLink": "Додати посилання на вебсайт",
"profile_editDescription": "Редагувати опис",
"profile_addDescription": "Додати опис",
"notifications_empty": "Сповіщень нема",
"friendRequest_notification": "<b>{0}</b> надсилає вам запит на контакт",
"friendRequest_received": "<b>{0}</b> бажає сконтактувати з вами",
"friendRequest_accepted": "<b>{0}</b> приймає ваш запит на контакт",
"friendRequest_declined": "<b>{0}</b> відхиляє ваш запит на контакт",
"friendRequest_decline": "Відхилити",
"friendRequest_accept": "Прийняти (Enter)",
"friendRequest_later": "Вирішити згодом",
"drive_activeOld": "Більш давні",
"drive_active28Days": "Останні 4 тижні",
"drive_active7Days": "Останні 7 днів",
"drive_active1Day": "Останні 24 години",
"settings_codeSpellcheckLabel": "Перевіряти правопис у редакторі коду",
"settings_codeSpellcheckTitle": "Правопис",
"admin_diskUsageButton": "Згенерувати звіт",
"admin_diskUsageHint": "Кількість простору, спожитого різними ресурсами CryptPad",
"admin_diskUsageTitle": "Використання диска",
"timeoutError": "Втрачено з'єднання з сервером. <br>Натисніть <em>Esc</em>, щоб перезавантажити сторінку.",
"contact_email": "Е-пошта",
"contact_chat": "Бесіда",
"contact_bug": "Звіт про ваду",
"contact_devHint": "Щодо бажаних функцій, удосконалення інтерфейсу чи просто подяки.",
"contact_dev": "Зв'язатися з командою розробки",
"contact_adminHint": "Щодо будь-яких проблем з обліковим записом, просторовим обмеженням чи доступністю служби.\n",
"contact_admin": "Зв'язатися з адміністрацією",
"footer_tos": "Умови надання послуг",
"footer_legal": "Положення",
"footer_donate": "Пожертвувати",
"footer_team": "Команда",
"footer_product": "Виріб",
"admin_flushCacheDone": "Кеш успішно стерто",
"admin_flushCacheButton": "Стерти кеш",
"admin_flushCacheHint": "Примусити користувачок і користувачів завантажити найновіші клієнтські ресурси (лише якщо ваш сервер — у режимі «fresh»)",
"admin_flushCacheTitle": "Стерти HTTP-кеш",
"admin_updateLimitDone": "Оновлення успішно завершено",
"admin_updateLimitButton": "Оновити квоти",
"admin_updateLimitHint": "Примусово оновити обмеження користувацького простору можна будь-коли, але це потрібно лише при виникненні помилок",
"admin_updateLimitTitle": "Оновити користувацькі квоти",
"admin_registeredHint": "Кількість облікових записів, зареєстрованих на вашому сервері",
"admin_registeredTitle": "Облікові записи",
"admin_activePadsHint": "Кількість унікальних документів, які хтось зараз переглядає чи редагує",
"admin_activePadsTitle": "Активні документи",
"admin_activeSessionsHint": "Кількість активних WebSocket-з'єднань (і унікальних з'єднаних IP-адрес)",
"admin_activeSessionsTitle": "Активні з'єднання",
"adminPage": "Адміністрування",
"admin_cat_stats": "Статистика",
"admin_cat_general": "Загальне",
"admin_authError": "Лише адміністрація може доступатися цієї сторінки",
"fm_expirablePad": "Дійсно до: {0}",
"markdown_toc": "Зміст",
"survey": "Опитування CryptPad",
"crowdfunding_popup_no": "Поки ні",
"crowdfunding_popup_text": "<h3>Нам потрібна ваша допомога!</h3> Щоб активна розробка CryptPad тривала, підтримайте проєкт через сторінку OpenCollective, де ви можете переглянути <b>план</b> і <b>фінансові цілі</b>.",
"crowdfunding_button2": "Допомогти CryptPad",
"crowdfunding_button": "Підтримати CryptPad",
"autostore_notAvailable": "Збережіть цей документ до свого CryptDrive-каталогу, щоб змогти використати цю функцію.",
"autostore_forceSave": "Зберегти файл до CryptDrive-каталогу",
"autostore_saved": "Документ успішно збережено до вашого CryptDrive-каталогу!",
"autostore_error": "Неочікувана помилка: не вдалося зберегти документ, повторіть спробу згодом.",
"autostore_hide": "Не зберігати",
"autostore_store": "Зберегти",
"autostore_settings": "Можете ввімкнути автоматичне збереження документів на сторінці <a>параметрів</a>.",
"autostore_notstored": "Цей {0} відсутній у вашому CryptDrive-каталозі. Зберегти його туди?",
"autostore_pad": "блокнот",
"autostore_sf": "каталог",
"autostore_file": "файл",
"chrome68": "Схоже, ви використовуєте переглядач Chrome чи Chromium версії 68, через ваду в якій сторінка стає порожньою за кілька секунд або перестає сприймати натиски. Коли виникає така проблема, переходьте на іншу вкладку й вертайтесь до цієї чи пробуйте гортати сторінку. Цю ваду має бути виправлено в наступній версії переглядача.",
"convertFolderToSF_confirm": "Перетворити каталог на спільний, щоб інші могли його переглядати?",
"convertFolderToSF_SFChildren": "Цей каталог неможливо перетворити на спільний, бо він уже містить спільні каталоги. Посуньте їх за його межі, щоб продовжити.",
"sharedFolders_share": "Передайте це посилання іншим зареєстрованим, щоб надати їм доступ до спільного каталогу. Коли вони відкриють посилання, спільний каталог буде додано до їхнього CryptDrive-каталогу.",
"sharedFolders_create_owned": "Власний каталог",
"sharedFolders_create_name": "Назва каталогу",
"sharedFolders_create": "Створити спільний каталог",
"sharedFolders_duplicate": "Деякі з документів, які ви намагаєтесь посунути, вже поширено в цільовому каталозі.",
"sharedFolders_forget": "Документ збережено лише в спільному каталозі, його не можна посунути до смітника. Використовуйте CryptDrive-каталог, щоб мати змогу видаляти.",
"share_embedCategory": "Вбудувати",
"share_contactCategory": "Контакти",
"share_linkOpen": "Відкрити посилання",
"share_linkPresent": "Показувати",
"share_linkEmbed": "Вбудовувати (без панелі й переліку облікових записів)",
"share_linkView": "Переглядати",
"share_linkEdit": "Редагувати",
"share_linkAccess": "Права доступу",
"share_linkCategory": "Посилання",
"properties_changePasswordButton": "Надіслати",
"properties_passwordSuccess": "Пароль успішно змінено.<br>Сторінку буде перезавантажено з оновленими правами доступу.",
"properties_passwordWarning": "Пароль успішно змінено, але нам не вдалось оновити дані у вашому CryptDrive-каталозі. Можливо, вам доведеться вручну вилучити стару версію документа.<br>Сторінку буде перезавантажено з оновленими правами доступу.",
"properties_passwordError": "Виникла помилка зміни пароля. Будь ласка, повторіть спробу.",
"properties_passwordSame": "Нові паролі мусять відрізнятись від поточного.",
"properties_confirmChange": "Точно змінити пароль? Зміна пароля вилучить історію документа. Облікові записи без нового пароля втратять доступ до документа",
"properties_confirmNew": "Точно додати пароль? Це змінить URL-адресу документа й вилучить його історію. Облікові записи без пароля втратять доступ до документа",
"properties_changePassword": "Змінити пароль",
"properties_addPassword": "Додати пароль",
"password_submit": "Надіслати",
"password_placeholder": "Введіть пароль…",
"password_error": "Документа не знайдено<br>На це може бути дві причини: або пароль хибний, або документ було знищено.",
"password_info": "Документ, який ви намагаєтесь відкрити, було стерто чи захищено новим паролем. Введіть чинний пароль, щоб доступитися вмісту.",
"creation_newPadModalDescription": "Натисніть застосунок, яким слід створити документ. Або оберіть його клавішею <b>Tab</b> і підтвердьте клавішею <b>Enter</b>.",
"creation_passwordValue": "Пароль",
"creation_expiration": "Дійсний до",
"creation_noOwner": "Нічий",
"creation_owners": "Власність",
"creation_create": "Створити",
"creation_newTemplate": "Створити шаблон",
"creation_noTemplate": "Чистий документ",
"creation_password": "Пароль\n",
"creation_expireMonths": "Місяців",
"creation_expireDays": "Днів",
"creation_expireHours": "Годин",
"creation_expireFalse": "Не тимчасовий",
"creation_expire": "Тимчасовий документ",
"creation_owned1": "Свій <b>власний</b> файл ви можете знищити коли завгодно. Знищення власного файлу робить його недоступним і для CryptDrive-каталогів інших.",
"form_makePublicWarning": "Точно зробити відповіді на цю форму загальнодоступними? Наявні й майбутні відповіді стануть всім, хто бере участь. Цього неможливо скасувати.",
"form_makePublic": "Оприлюднити відповіді",
"form_isPrivate": "Відповіді приватні",
"form_isPublic": "Відповіді загальнодоступні",
"form_anonymous_blocked": "На цю форму відповідати без реєстрації заборонено. <a href=\"/login/\">Ввійдіть</a> чи <a href=\"/register/\">зареєструйтеся</a>, щоб відповісти.",
"form_anonymous_off": "Заборонено",
"form_anonymous_on": "Дозволено",
"form_anonymous": "Доступ без реєстрації",
"form_makeAnon": "Анонімні відповіді",
"form_removeEnd": "Вилучити дату закриття",
"form_setEnd": "Вказати дату закриття",
"form_isClosed": "Форму закрито {0}",
"form_isOpen": "Форму відкрито",
"form_geturl": "Копіювати посилання",
"form_preview": "Переглянути форму",
"form_results": "Відповіді ({0})",
"canvas_select": "Обрання",
"canvas_brush": "Пензель",
"profile_copyKey": "Копіювати відкритий ключ",
"redo": "Повторити",
"undo": "Повернути",
"userlist_visitProfile": "Переглянути профіль",
"ui_saved": "{0} збережено",
"ui_ms": "мс",
"calendar_import_temp": "Імпортувати цей календар",
"profile_info": "Інші зможуть знайти ваш профіль через аватар у переліку облікових записів, пов'язаних із документом.",
"convertFolderToSF_SFParent": "Неможливо перетворити цей каталог на спільний за поточною адресою. Посуньте його за межі вже наявного спільного каталогу, щоб продовжити.",
"genericCopySuccess": "Скопійовано до буфера",
"toolbar_tools": "Розмітка",
"toolbar_storeInDrive": "Зберегти до CryptDrive-каталогу",
"toolbar_theme": "Палітра"
}

@ -55,17 +55,8 @@ define([
APP.toolbar.$rightside.hide(); APP.toolbar.$rightside.hide();
MessengerUI.create($(appElement), common); MessengerUI.create($(appElement), common);
common.setTabTitle(Messages.contacts);
UI.removeLoadingScreen(); UI.removeLoadingScreen();
/*
sFrameChan.query('Q_HEY_BUDDY', null, function (err, data) {
if (!data) { return; }
if (data.error) {
UI.warn(data.error);
} else {
UI.log(data.response);
}
});*/
}); });
}); });

@ -156,6 +156,7 @@ define([
return; return;
} }
common.setTabTitle(Messages.uploadButton);
// we're in upload mode // we're in upload mode
if (!common.isLoggedIn()) { if (!common.isLoggedIn()) {
UI.removeLoadingScreen(); UI.removeLoadingScreen();

@ -8,6 +8,6 @@ This file is intended to be used as a log of what third-party source we have ven
* [jscolor v2.0.5](https://jscolor.com/) for providing a consistent color picker across all browsers * [jscolor v2.0.5](https://jscolor.com/) for providing a consistent color picker across all browsers
* [jquery.ui 1.12.1](https://jqueryui.com/) for its 'autocomplete' extension which is used for our tag picker * [jquery.ui 1.12.1](https://jqueryui.com/) for its 'autocomplete' extension which is used for our tag picker
* [pdfjs](https://mozilla.github.io/pdf.js/) with some minor modifications to prevent CSP errors * [pdfjs](https://mozilla.github.io/pdf.js/) with some minor modifications to prevent CSP errors
* [mermaid 8.13.10](https://github.com/mermaid-js/mermaid/releases/tag/8.13.4) extends our markdown integration to support a variety of diagram types * [mermaid 9.0.0](https://github.com/mermaid-js/mermaid/releases/tag/8.13.4) extends our markdown integration to support a variety of diagram types
* [Fabricjs 4.6.0](https://github.com/fabricjs/fabric.js) and [Fabric-history](https://github.com/lyzerk/fabric-history) for the whiteboard app * [Fabricjs 4.6.0](https://github.com/fabricjs/fabric.js) and [Fabric-history](https://github.com/lyzerk/fabric-history) for the whiteboard app

File diff suppressed because one or more lines are too long

@ -607,6 +607,7 @@ define([
APP.origin = privateData.origin; APP.origin = privateData.origin;
APP.readOnly = privateData.readOnly; APP.readOnly = privateData.readOnly;
common.setTabTitle(Messages.profileButton);
// If not logged in, you can only view other users's profile // If not logged in, you can only view other users's profile
if (!privateData.readOnly && !common.isLoggedIn()) { if (!privateData.readOnly && !common.isLoggedIn()) {
UI.removeLoadingScreen(); UI.removeLoadingScreen();

@ -1811,6 +1811,7 @@ define([
createLeftside(); createLeftside();
createUsageButton(); createUsageButton();
common.setTabTitle(Messages.settings_title);
UI.removeLoadingScreen(); UI.removeLoadingScreen();
}); });
}); });

Loading…
Cancel
Save