Merge branch 'main' into 4.15-candidate

master
ansuz 3 years ago
commit 93a9c44b6e

@ -1,3 +1,134 @@
# 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
# 4.14.0
## Goals
Our main goal for this release was to follow up on some of the findings of the [Intigriti](https://www.intigriti.com/) bug bounty program that was [sponsored by the European Commission](https://ec.europa.eu/info/news/european-commissions-open-source-programme-office-starts-bug-bounties-2022-jan-19_en). We also aimed to deploy some features that we want to have in place before the deployment of our upcoming 5.0 release and a corresponding update to our project site ([cryptpad.org](https://cryptpad.org)). You can read more about all of this in [our latest blog post](https://blog.cryptpad.org/2022/03/29/March-2022-status-catching-up-on-recent-news/).
## Update notes
This release includes **BREAKING CHANGES**, especially if you have not configured your instance correctly. We advise that you read the following section carefully and follow its recommendations as closely as possible if you operate your own CryptPad instance.
First, some review: CryptPad is designed to be deployed using two domains. One is the primary domain which users enter into their address bar, while the second is a "sandbox" that is loaded indirectly. Sensitive operations like cryptographic key management are performed in the scope of the primary domain, while the sandbox is used to load the majority of the platform's UI. If there is a vulnerability in the sandbox, it is at least limited in scope because of measures we've taken to prevent it from accessing user accounts' keys. We initially introduced this system [nearly five years ago](https://blog.cryptpad.org/2017/08/30/CryptPad-s-new-Secure-Cross-Domain-Iframe/), it is described in [our admin installation guide](https://docs.cryptpad.fr/en/admin_guide/installation.html#domains), and we've done our best to make sure admins are aware of its importance. Even so, only a small number of our admins follow our recommendations.
Since we've tried every other option we could think of to inform administrators of the risks of storing sensitive data on a misconfigured CryptPad instance, we are now adopting a more drastic policy where correct behaviour is _enforced_ in the code itself. What that means for admins is that if you fail to implement configuration parameters which we consider essential, then various parts of the codebase will detect this and _refuse to operate_.
If your instance is configured correctly, then this shouldn't impact you at all. If you're worried that you might be impacted, then the best course of action is to update to 4.13.0 (the previous release, if you aren't already running it) and to follow its recommendation to review the checkup page and ensure that your instance passes its self-diagnostic tests. _4.14.0_ introduces a large number of new tests, but those that were already present in 4.13.0 should identify the major issues that will prevent your instance from loading after the update.
Now, a bit about the situations in which CryptPad will fail to load:
* if CryptPad is loaded via any origin that does not match its configured `httpUnsafeOrigin`, then it will abort.
* hint: for cryptpad.fr, this value is `https://cryptpad.fr`
* if CryptPad's sandbox does not correctly block the use of `eval`, then it will abort.
* the use of `eval` is blocked by the recommended `Content-Security-Policy` headers. These strict headers are applied to most resources loaded from the _sandbox origin_.
* hint: for cryptpad.fr the `httpSafeOrigin` is `https://sandbox.cryptpad.info`, while our NGINX sets `$sandbox_domain` to `sandbox.cryptpad.info`.
* if CryptPad is loaded in a browser that does not enforce `Content-Security-Policy` (such as Internet Explorer or any other browser using a non-compliant configuration) then it will abort.
* if CryptPad is embedded within an iframe and you have not explicitly enabled embedding via the admin panel (more on that later) it will abort.
* if any CryptPad application that requires special permissions (drive, calendar, sheet, doc, presentation) is loaded in an iframe then it will abort.
The reasons for blocking embedding will be described in the _Features_ section below, so keep reading if you're curious.
We're also recommending a few more updates, but we don't expect that these will stop the service from loading:
* NodeJS `v12.14.0` (which we have recommended for some time) will be considered _End-Of-Life_ as of April 30th.
* We recommend updating to [NodeJS v16.14.2](https://nodejs.org/en/download/) via [NVM](https://github.com/nvm-sh/nvm).
* The API server will check the version of its runtime when it launches. It will print a warning to your server logs and set a public flag in `/api/config` indicating that it should be updated. There is a corresponding test on the checkup page which checks for the presence of this flag for admins that aren't in the habit of reviewing their logs.
* The recommended NGINX config file also includes some minor changes. You can compare the current version (in `cryptpad/docs/example.nginx.conf`) against your live config with a diff tool. There are also new tests on the checkup page which will identify whether the newly changed headers have been correctly applied.
* There are updates to our dependencies using both `npm` and `bower`.
* There are a number of new configuration parameters that can be customized via `application_config.js`. Some are optional. A number of other parameters, such as URLs for a privacy policy and terms of service, will be expected if your instance permits registration. The checkup page will display warnings if these are absent. Configuration via `application_config.js` is described in [our docs](https://docs.cryptpad.fr/en/admin_guide/customization.html#application-config).
We've also made a number of changes and additions to the instance admin panel:
* controls for archiving and restoring documents can now be found under _User storage_, rather _General_.
* Both sections now include an optional "note" field, allowing admins to specify the reason why a document was archived/restored. This value will be included in the server's logs.
* the _Performance_ tab now includes two new settings which permit admins to enable a new API endpoint (`/api/profiling`) which exposes some live performance data as JSON endpoint. If you don't know what this means you probably don't need it.
* The admin support ticket panel now responds somewhat more quickly thanks to some sorting optimizations.
* The _General_ tab now includes three new fields (instance name, instance description, hosting location).
* These are primarily intended for admins who have opted in to inclusion in the directory of public instances which we plan to deploy along with our next release.
* In the future we hope to use these values on the home page as well, making it easier to customize your instance.
To update from 4.13.0 to 4.14.0:
0. Before updating, review your instance's checkup page to see whether you have any unresolved issues
1. Install NodeJS v16.14.2
2. Update your systemd service file (or whatever method you use to launch CryptPad) to use the newer NodeJS version
3. Update your NGINX configuration file to match the provided example
4. Stop your server
5. Get the latest code with git
6. Install the latest dependencies with `bower update` and `npm i`
7. Restart your server
8. Confirm that your instance is passing all the tests included on the `/checkup/` page (on whatever devices you intend to support)
## Features
* Embedding of CryptPad in iframes on third-party websites is now disabled by default because doing so prevents a number of possible attacks in cases of overly permissive HTTP headers.
* CryptPad's editors will only load properly if the instance is explicitly configured via the admin panel to permit this behaviour.
* Even where embedding is enabled, the properties, share, access, and insert menus are disabled. Attempts to use them cause a dialog to open which prompts users to open the current document/page in a dedicated tab/window.
* The _embed_ tab of the share menu (which generates code for embedding CryptPad documents in third-party sites) is only shown if the instance administrators have enabled embedding.
* More information about the host instance is included in the _About CryptPad_ dialog which can be opened via the account administration menu in the top-right corner of the screen.
* specifically: it now displays the same configurable instance description which is displayed on the home page, as well as links to the instance's terms of service and source code (if they are available).
* The support page has a number of new features:
* A new tab is accessible via the left sidebar which displays a preview of the metadata which is included along with support tickets.
* We revised the ticket categories which are listed in the dropdown menu. Users are prompted to choose a category. Once a category is chosen, more specific information is automatically requested with links to the relevant documentation.
* The login page now features a reminder that _administrators cannot reset passwords or recover accounts_.
* Tracking parameters are automatically removed from the address bar after the page loads for cases where a third-party tool automatically added them.
* Calendars in the sidebar of the calendar app are now sorted according to their title.
* The checkup page features many new tests and improvements:
* Errors are now sorted above warnings.
* Errors and warnings are each sorted according to their test number.
* In cases where multiple tests need to inspect the HTTP headers of a common resource, the resource is only requested once and subsequent requests access it from a cache, speeding up loading time and reducing network usage.
* The _Server header_ is displayed in the page summary if it is available.
* The tests for CSP headers now describe the failures of _each misconfigured CSP directive_, rather than just the first one to fail.
* Warnings are displayed for each of several important resources (privacy policy, terms of service, etc) when the instance allows registration but has not provided this information for new users.
* Our test runner catches synchronously thrown errors and tries to display helpful messages.
* Tests will time out after 25 seconds to ensure that the set of tests eventually completes.
* A new script is executed before CryptPad's bootloader which should detect and handle bootloader errors such as missing dependencies or unreachable API endpoints.
## Bug fixes
* The checkup page now handles and error that occurred when trying to parse CSP headers that were not provided (trying to parse `null` as a string).
* The form app allowed authors to specify links (via markdown) in questions' descriptions and the form's submit message, but none of these links used CryptPad's typical link click handler. As a result these links failed to open.
* Links specified on users' profile pages are opened via the _bounce_ app, which warns users when a link will navigate outside CryptPad and blocks links which are clearly malicious in nature (trying to execute code).
* We discovered and fixed a deadlock that occurred in cases where users tried to download a folder that contained multiple Office documents.
* The drive's _history mode_ now displays the appropriate document id in the properties menu in cases where an earlier version of a document had a different id (due to a password change).
* During development of a new feature we discovered that the server could respond to HTTP requests with _stack traces_ in cases where the request triggered an error. These responses could contain information about the server's directory structure, so we now handle these errors and send the client a page indicating that there was an internal server error.
* Attempting to convert office documents could mistakenly trigger two concurrent downloads of the client-side conversion engine. Now it is only downloaded once, so conversion should be roughly twice as fast for cases where the WebAssembly blob was not already cached.
* A number of users reported various actions which could cause documents in their team drives to be duplicated. These duplicated entries are _references to the same document as the original_, not complete copies, so care should be taken **not to use the destroy option** when removing them from your drive. If a user accidentally destroys a document then it should be possible for an administrator to restore its content via the admin panel if the user can provide a [safe link](https://docs.cryptpad.fr/en/user_guide/user_account.html?highlight=safe%20link#confidentiality) that they can find using the drive's _history mode_.
# 4.13.0 # 4.13.0
## Goals ## Goals

@ -45,7 +45,7 @@
"croppie": "^2.5.0", "croppie": "^2.5.0",
"sortablejs": "^1.6.0", "sortablejs": "^1.6.0",
"saferphore": "^0.0.1", "saferphore": "^0.0.1",
"jszip": "Stuk/jszip#^3.1.5", "jszip": "3.7.1",
"requirejs-plugins": "^1.0.3", "requirejs-plugins": "^1.0.3",
"dragula.js": "3.7.2", "dragula.js": "3.7.2",
"MathJax": "3.0.5" "MathJax": "3.0.5"

@ -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",

@ -14,6 +14,7 @@ define([
var is500 = Boolean(document.querySelector('#five-hundred')); var is500 = Boolean(document.querySelector('#five-hundred'));
var brand = h('h1#cp-brand', 'CryptPad'); var brand = h('h1#cp-brand', 'CryptPad');
// Msg.fivehundred_internalServerError.four04_pageNotFound
var message = h('h2#cp-scramble', Messages[is500? 'fivehundred_internalServerError':'four04_pageNotFound']); var message = h('h2#cp-scramble', Messages[is500? 'fivehundred_internalServerError':'four04_pageNotFound']);
var title = h('h2#cp-title', is500? "500":"404"); var title = h('h2#cp-title', is500? "500":"404");

@ -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 = {};

@ -108,7 +108,7 @@ define([
return h('a', attrs, [icon, text]); return h('a', attrs, [icon, text]);
}; };
Pages.versionString = "v4.14.0"; Pages.versionString = "v4.14.1";
var customURLs = Pages.customURLs = {}; var customURLs = Pages.customURLs = {};
(function () { (function () {
@ -136,6 +136,8 @@ define([
customURLs[k] = value[l] || value['default']; customURLs[k] = value[l] || value['default'];
} }
}); });
var value = AppConfig.hostDescription;
Pages.hostDescription = (value && (value[l] || value.default)) || Msg.home_host;
}()); }());
// used for the about menu // used for the about menu

@ -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; }

@ -121,6 +121,48 @@ define([
var privacyLink = fastLink('privacy'); var privacyLink = fastLink('privacy');
var termsLink = fastLink('terms'); var termsLink = fastLink('terms');
/*
var blocks = [
h('div.row.cp-page-section', [
h('div.col-sm-6',
h('img.img-fluid.cp-img-invert', {
src:'/customize/images/shredder.png',
alt:'',
'aria-hidden': 'true'
})
),
h('div.col-sm-6', [
h('h2', Msg.home_privacy_title),
h('p', Msg.home_privacy_text)
])
]),
h('div.row.cp-page-section',
h('div.col-sm-12', [
h('h2', Msg.home_host_title),
h('p', Pages.hostDescription),
])
),
h('div.row.cp-page-section', [
h('div.col-sm-6', [
h('h2', Msg.home_opensource_title),
opensource, // XXX
h('img.small-logo.cp-img-invert', {
src: '/customize/images/logo_AGPLv3.svg',
alt: 'APGL3 License Logo'
})
]),
h('div.col-sm-6', [
h('h2', Msg.home_support_title),
supportText, // XXX
subscribeButton,
Pages.crowdfundingButton(function () {
Feedback.send('HOME_SUPPORT_CRYPTPAD');
}),
])
])
];
*/
var notice; var notice;
/* Admins can specify a notice to display in application_config.js via the `homeNotice` attribute. /* Admins can specify a notice to display in application_config.js via the `homeNotice` attribute.
If the text is the key for the translation system then then the most appropriate translated text If the text is the key for the translation system then then the most appropriate translated text

@ -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', [

@ -6,6 +6,10 @@ define([
'css!/bower_components/components-font-awesome/css/font-awesome.min.css', 'css!/bower_components/components-font-awesome/css/font-awesome.min.css',
], function ($, h, Pages, nThen) { ], function ($, h, Pages, nThen) {
// we consider that there is no valid reason to load any of the info pages
// in an iframe. abort everything if you detect that you are embedded.
if (window.top !== window) { return; }
$(function () { $(function () {
var $body = $('body'); var $body = $('body');

@ -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;
});

@ -125,8 +125,12 @@ server {
# script-src specifies valid sources for javascript, including inline handlers # script-src specifies valid sources for javascript, including inline handlers
set $scriptSrc "'self' resource: https://${main_domain}"; set $scriptSrc "'self' resource: https://${main_domain}";
# XXX frame-ancestors defines where your cryptpad instance can be embedded... # frame-ancestors specifies which origins can embed your CryptPad instance
set $frameAncestors "https://${main_domain} $https://${sandbox_domain}"; # this must include 'self' and your main domain (over HTTPS) in order for CryptPad to work
# if you have enabled remote embedding via the admin panel then this must be more permissive.
# note: cryptpad.fr permits web pages served via https: and vector: (element desktop app)
set $frameAncestors "'self' https://${main_domain}";
# set $frameAncestors "'self' https: vector:";
set $unsafe 0; set $unsafe 0;
# the following assets are loaded via the sandbox domain # the following assets are loaded via the sandbox domain
@ -233,7 +237,7 @@ server {
# The nodejs server has some built-in forwarding rules to prevent # The nodejs server has some built-in forwarding rules to prevent
# URLs like /pad from resulting in a 404. This simply adds a trailing slash # URLs like /pad from resulting in a 404. This simply adds a trailing slash
# to a variety of applications. # to a variety of applications.
location ~ ^/(register|login|settings|user|pad|drive|poll|slide|code|whiteboard|file|media|profile|contacts|todo|filepicker|debug|kanban|sheet|support|admin|notifications|teams|calendar|presentation|doc|form|report|convert)$ { location ~ ^/(register|login|settings|user|pad|drive|poll|slide|code|whiteboard|file|media|profile|contacts|todo|filepicker|debug|kanban|sheet|support|admin|notifications|teams|calendar|presentation|doc|form|report|convert|checkup)$ {
rewrite ^(.*)$ $1/ redirect; rewrite ^(.*)$ $1/ redirect;
} }

@ -32,7 +32,7 @@ Default.commonCSP = function (Env) {
"media-src blob:", "media-src blob:",
// for accounts.cryptpad.fr authentication and cross-domain iframe sandbox // for accounts.cryptpad.fr authentication and cross-domain iframe sandbox
Env.enableEmbedding? "frame-ancestors *": `frame-ancestors ${domain}${sandbox}`, Env.enableEmbedding? `frame-ancestors 'self' ${Env.protocol} vector:`: `frame-ancestors 'self' ${domain}`,
"worker-src 'self'", "worker-src 'self'",
"" ""
]; ];

@ -68,7 +68,9 @@ module.exports.create = function (config) {
} }
const Env = { const Env = {
fileHost: config.fileHost, // XXX protocol: new URL(httpUnsafeOrigin).protocol,
fileHost: config.fileHost || undefined,
NO_SANDBOX: NO_SANDBOX, NO_SANDBOX: NO_SANDBOX,
httpSafePort: httpSafePort, httpSafePort: httpSafePort,

@ -496,7 +496,8 @@ BlobStore.create = function (config, _cb) {
if (e) { CB(e); } if (e) { CB(e); }
})); }));
}).nThen(function (w) { }).nThen(function (w) {
// XXX make a placeholder file in the root of the blob path // make a placeholder file in the root of the blob path
// so that the checkup page always has a resource it can check
var fullPath = Path.join(Env.blobPath, 'placeholder.txt'); var fullPath = Path.join(Env.blobPath, 'placeholder.txt');
Fse.writeFile(fullPath, 'PLACEHOLDER\n', w()); Fse.writeFile(fullPath, 'PLACEHOLDER\n', w());
}).nThen(function () { }).nThen(function () {

1643
package-lock.json generated

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",

@ -14,13 +14,11 @@ var simpleTags = [
// FIXME register_notes // FIXME register_notes
'<ul class="cp-notes-list">', '<ul class="cp-notes-list">',
'</ul>', '</ul>',
'<li>',
'</li>',
'<span class="red">', '<span class="red">',
'</span>', '</span>',
]; ];
['a', 'b', 'em', 'p', 'i'].forEach(function (tag) { ['a', 'b', 'em', 'p', 'i', 'code', 'li',].forEach(function (tag) {
simpleTags.push('<' + tag + '>'); simpleTags.push('<' + tag + '>');
simpleTags.push('</' + tag + '>'); simpleTags.push('</' + tag + '>');
}); });
@ -36,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) {

@ -2,7 +2,7 @@
<html class="cp-app-noscroll"> <html class="cp-app-noscroll">
<head> <head>
<meta content="text/html; charset=utf-8" http-equiv="content-type"/> <meta content="text/html; charset=utf-8" http-equiv="content-type"/>
<script async data-bootload="/admin/inner.js" data-main="/common/sframe-boot.js?ver=1.8" src="/bower_components/requirejs/require.js?ver=2.3.5"></script> <script async data-bootload="/admin/inner.js" data-main="/common/sframe-boot.js?ver=1.11" src="/bower_components/requirejs/require.js?ver=2.3.5"></script>
<style> <style>
.loading-hidden { display: none; } .loading-hidden { display: none; }
</style> </style>

@ -1968,7 +1968,7 @@ define([
create['bytes-written'] = function () { create['bytes-written'] = function () {
var key = 'bytes-written'; var key = 'bytes-written';
var $div = makeBlock(key); var $div = makeBlock(key); // Msg.admin_bytesWrittenTitle.admin_bytesWrittenHint
var duration = APP.instanceStatus.profilingWindow; var duration = APP.instanceStatus.profilingWindow;
if (!isPositiveInteger(duration)) { duration = 10000; } if (!isPositiveInteger(duration)) { duration = 10000; }

@ -6,7 +6,33 @@ define([], function () {
var MESSAGES = []; var MESSAGES = [];
var assert = function (test, msg) { var assert = function (test, msg) {
MESSAGES.push(msg || false); MESSAGES.push(msg || false);
ASSERTS.push(function (cb, i) { ASSERTS.push(function (_cb, i) {
var called = false;
var to;
var cb = function (arg) {
if (to) {
clearTimeout(to);
to = undefined;
}
if (called) { return; }
if (msg && !msg.innerText) {
msg.innerText = "An unexpected error occurred. See your browser's console for more details";
}
called = true;
_cb(arg);
};
to = setTimeout(function () {
cb({
test: i,
message: msg,
output: "TIMEOUT",
});
}, 25000);
try {
test(function (result) { test(function (result) {
if (result === true) { if (result === true) {
passed++; passed++;
@ -19,6 +45,24 @@ define([], function () {
}); });
} }
}, msg); }, msg);
} catch (err) {
console.error(err);
msg.innerText = `Synchronous error thrown (${(err.message || err)}). See console for more details.`;
//from ${err.fileName} line ${err.lineNumber}`;
cb({
test: i,
message: msg,
output: {
message: err.message,
file: err.fileName,
line: err.lineNumber,
stack: typeof(err.stack) === 'string'?
err.stack.split('\n'):
err.stack,
},
});
}
}); });
}; };

@ -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([

@ -2,7 +2,7 @@
<html class="cp-app-noscroll"> <html class="cp-app-noscroll">
<head> <head>
<meta content="text/html; charset=utf-8" http-equiv="content-type"/> <meta content="text/html; charset=utf-8" http-equiv="content-type"/>
<script async data-bootload="/calendar/inner.js" data-main="/common/sframe-boot.js?ver=1.8" src="/bower_components/requirejs/require.js?ver=2.3.5"></script> <script async data-bootload="/calendar/inner.js" data-main="/common/sframe-boot.js?ver=1.11" src="/bower_components/requirejs/require.js?ver=2.3.5"></script>
<style> <style>
.loading-hidden { display: none; } .loading-hidden { display: none; }
</style> </style>

@ -134,8 +134,9 @@ define([
}; };
var getCalendars = function () { var getCalendars = function () {
var LOOKUP = {};
var TEAMS = {};
return Object.keys(APP.calendars).map(function (id) { return Object.keys(APP.calendars).map(function (id) {
var c = APP.calendars[id]; var c = APP.calendars[id];
if (c.hidden || c.restricted || c.loading) { return; } if (c.hidden || c.restricted || c.loading) { return; }
@ -149,7 +150,23 @@ define([
dragBgColor: md.color, dragBgColor: md.color,
borderColor: md.color, borderColor: md.color,
}; };
}).filter(Boolean); }).filter(Boolean).map(function (obj) {
var id = obj.id;
var cal = APP.calendars[id];
var team = cal.teams.sort()[0] || cal.roTeams.sort()[0];
var title = Util.find(cal, ['content', 'metadata', 'title']) || '';
LOOKUP[id] = title;
TEAMS[id] = team;
return obj;
}).sort(function (a, b) {
var team1 = TEAMS[a.id];
var team2 = TEAMS[b.id];
var t1 = LOOKUP[a.id];
var t2 = LOOKUP[b.id];
return team1 > team2 ? 1 :
(team1 < team2 ? -1 : (
t1 > t2 ? 1 : (t1 < t2 ? -1 : 0)));
});
}; };
var getSchedules = function () { var getSchedules = function () {
var s = []; var s = [];
@ -660,10 +677,21 @@ define([
$calendars.empty(); $calendars.empty();
var privateData = metadataMgr.getPrivateData(); var privateData = metadataMgr.getPrivateData();
var filter = function (teamId) { var filter = function (teamId) {
var LOOKUP = {};
return Object.keys(APP.calendars || {}).filter(function (id) { return Object.keys(APP.calendars || {}).filter(function (id) {
var cal = APP.calendars[id] || {}; var cal = APP.calendars[id] || {};
var teams = (cal.teams || []).map(function (tId) { return Number(tId); }); var teams = (cal.teams || []).map(function (tId) { return Number(tId); });
return teams.indexOf(typeof(teamId) !== "undefined" ? Number(teamId) : 1) !== -1; return teams.indexOf(typeof(teamId) !== "undefined" ? Number(teamId) : 1) !== -1;
}).map(function (k) {
// nearly constant-time pre-sort
var cal = APP.calendars[k] || {};
var title = Util.find(cal, ['content', 'metadata', 'title']) || '';
LOOKUP[k] = title;
return k;
}).sort(function (a, b) {
var t1 = LOOKUP[a];
var t2 = LOOKUP[b];
return t1 > t2 ? 1 : (t1 === t2 ? 0 : -1);
}); });
}; };
var tempCalendars = filter(0); var tempCalendars = filter(0);
@ -719,7 +747,7 @@ define([
editCalendar(); editCalendar();
}).appendTo($newContainer); }).appendTo($newContainer);
Object.keys(privateData.teams).forEach(function (teamId) { Object.keys(privateData.teams).sort().forEach(function (teamId) {
var calendars = filter(teamId); var calendars = filter(teamId);
if (!calendars.length) { return; } if (!calendars.length) { return; }
var team = privateData.teams[teamId]; var team = privateData.teams[teamId];

@ -0,0 +1,42 @@
(function () {
var h = (tag, children) => {
var el = document.createElement(tag);
children.forEach(child => {
if (typeof(child) === 'string') {
return void el.appendChild(document.createTextNode(child));
}
el.appendChild(child);
});
return el;
};
var first = true;
window.addEventListener('error', function (ev) {
if (!ev) { return; }
var srcElement = ev.srcElement;
if (!srcElement) { return; }
var nodeName = srcElement.nodeName;
if (nodeName !== 'SCRIPT') { return; }
var src = srcElement.src;
if (/\/api\/.*/.test(src)) {
console.error("A serverside API endpoint could not be reached.", src);
}
//if (!/\/bower_components\/.*/.test(src)) { return; }
if (first) {
document.body.appendChild(h('h1', ['Oops!']));
document.body.appendChild(h('p', [
`It's possible that this server's administrators forgot to install its client-side dependencies with 'bower update',`,
` or that some other required resource couldn't be loaded.`,
` See your browser's console for more details.`,
]));
first = false;
}
document.body.appendChild(h('p', [
'Failed to load ',
h('code', [src]),
'.',
]));
}, true);
}());

@ -3,9 +3,10 @@
<head> <head>
<meta content="text/html; charset=utf-8" http-equiv="content-type"/> <meta content="text/html; charset=utf-8" http-equiv="content-type"/>
<meta name="viewport" content="width=device-width, initial-scale=1.0"/> <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
<script data-bootload="main.js" data-main="/common/boot.js" src="/bower_components/requirejs/require.js"></script>
</head> </head>
<body> <body>
<div id="cp-progress"></div> <div id="cp-progress"></div>
<iframe-placeholder> <iframe-placeholder>
<script type="text/javascript" src="/checkup/dependency-warning.js?ver=1.0.0"></script>
<script data-bootload="main.js" data-main="/common/boot.js" src="/bower_components/requirejs/require.js"></script>

@ -2,7 +2,7 @@
<html class="cp-app-noscroll cp-app-print"> <html class="cp-app-noscroll cp-app-print">
<head> <head>
<meta content="text/html; charset=utf-8" http-equiv="content-type"/> <meta content="text/html; charset=utf-8" http-equiv="content-type"/>
<script async data-bootload="/checkup/inner.js" data-main="/common/sframe-boot.js?ver=1.8" src="/bower_components/requirejs/require.js?ver=2.3.5"></script> <script async data-bootload="/checkup/inner.js" data-main="/common/sframe-boot.js?ver=1.11" src="/bower_components/requirejs/require.js?ver=2.3.5"></script>
</head> </head>
<body class="cp-app-checkup"> <body class="cp-app-checkup">
</body> </body>

@ -990,7 +990,7 @@ define([
'img-src': ["'self'", 'data:', 'blob:', $outer], 'img-src': ["'self'", 'data:', 'blob:', $outer],
'media-src': ['blob:'], 'media-src': ['blob:'],
'frame-ancestors': ApiConfig.enableEmbedding? ['*']: [$outer, $sandbox], 'frame-ancestors': ApiConfig.enableEmbedding? ["'self'", window.location.protocol, 'vector:']: ["'self'", $outer],
'worker-src': ["'self'"], 'worker-src': ["'self'"],
}); });
cb(result); cb(result);
@ -1028,7 +1028,7 @@ define([
], ],
'img-src': ["'self'", 'data:', 'blob:', $outer], 'img-src': ["'self'", 'data:', 'blob:', $outer],
'media-src': ['blob:'], 'media-src': ['blob:'],
'frame-ancestors': ApiConfig.enableEmbedding? ['*']: [$outer, $sandbox], 'frame-ancestors': ApiConfig.enableEmbedding? ["'self'", window.location.protocol, 'vector:']: ["'self'", $outer],
'worker-src': ["'self'"],//, $outer, $sandbox], 'worker-src': ["'self'"],//, $outer, $sandbox],
}); });

@ -2,7 +2,7 @@
<html class="cp-app-noscroll cp-app-print"> <html class="cp-app-noscroll cp-app-print">
<head> <head>
<meta content="text/html; charset=utf-8" http-equiv="content-type"/> <meta content="text/html; charset=utf-8" http-equiv="content-type"/>
<script async data-bootload="/code/inner.js" data-main="/common/sframe-boot.js?ver=1.8" src="/bower_components/requirejs/require.js?ver=2.3.5"></script> <script async data-bootload="/code/inner.js" data-main="/common/sframe-boot.js?ver=1.11" src="/bower_components/requirejs/require.js?ver=2.3.5"></script>
<style> <style>
.loading-hidden { display: none; } .loading-hidden { display: none; }
#editor1 { display: none; } #editor1 { display: none; }

@ -35,7 +35,12 @@ define(function() {
//'doc', 'presentation' //'doc', 'presentation'
]; ];
// XXX /* 'doc' and 'presentation' are considered experimental and are hidden from users
* unless they have a custom quota applied via the admin panel. You can customize
* which apps are treated this way via the parameter below. This behaviour is not
* officially supported and the development team won't help you with any problems
* that you experience if you change this value.
*/
// AppConfig.premiumTypes = ['doc', 'presentation']; // AppConfig.premiumTypes = ['doc', 'presentation'];
/* CryptPad is available is multiple languages, but only English and French are maintained /* CryptPad is available is multiple languages, but only English and French are maintained
@ -107,6 +112,18 @@ define(function() {
*/ */
AppConfig.roadmap = false; AppConfig.roadmap = false;
/* By default CryptPad instances display some text on the home page indicating that
* they are an independent community instance of the software. You can provide customized messages
* by filling in the following data structure with strings for each language you intend to support.
*/
AppConfig.hostDescription = {
// default: "Hello world",
// en: "Hello world",
// fr: "Bonjour le monde",
// de: "Hallo Welt",
// "pt-br": "Olá Mundo"<
};
/* Cryptpad apps use a common API to display notifications to users /* Cryptpad apps use a common API to display notifications to users
* by default, notifications are hidden after 5 seconds * by default, notifications are hidden after 5 seconds
* You can change their duration here (measured in milliseconds) * You can change their duration here (measured in milliseconds)

@ -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;
@ -1699,6 +1696,8 @@ define([
h('span', Pages.versionString) h('span', Pages.versionString)
]), ]),
h('hr'), h('hr'),
h('p', Pages.hostDescription),
h('hr'),
faqLine, faqLine,
termsLine, termsLine,
privacyLine, privacyLine,
@ -2013,8 +2012,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);
} }
@ -2167,7 +2165,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),

@ -5,31 +5,54 @@
// grep -nr '/common/sframe-boot.js?ver=' | sed 's/:.*$//' | grep -v 'sframe-boot.js' | while read x; do \ // grep -nr '/common/sframe-boot.js?ver=' | sed 's/:.*$//' | grep -v 'sframe-boot.js' | while read x; do \
// sed -i -e 's@/common/sframe-boot.js?ver=[^"]*@/common/sframe-boot.js?ver=1.3@' $x; done // sed -i -e 's@/common/sframe-boot.js?ver=[^"]*@/common/sframe-boot.js?ver=1.3@' $x; done
;(function () { ;(function () {
var _alert = function (cb) {
return void require([
'/common/requireconfig.js',
], function (RequireConfig) {
require.config(RequireConfig());
require([
'/common/common-interface.js',
'/common/hyperscript.js',
'/customize/messages.js',
'less!/customize/src/less2/include/alertify.less',
//'less!/customize/src/less2/pages/page-boot.less',
], cb);
});
};
if (window === window.top) { if (window === window.top) {
return void setTimeout(function () { return void _alert(function (UI, h) {
var s = `sframe-boot.js must only be loaded in a nested context`; var s = `sframe-boot.js must only be loaded in a nested context`;
window.alert(s); UI.alert(h('p', s));
}); });
} }
if (typeof(Promise) !== 'function') { if (typeof(Promise) !== 'function') {
return void setTimeout(function () { return void _alert(function (UI, h) {
var s = "Internet Explorer is not supported anymore, including by Microsoft.\n\nMost of CryptPad's collaborative functionality requires a modern browser to work.\n\nWe recommend Mozilla Firefox."; var s = "Internet Explorer is not supported anymore, including by Microsoft.\n\nMost of CryptPad's collaborative functionality requires a modern browser to work.\n\nWe recommend Mozilla Firefox.";
window.alert(s); UI.alert(h('p', {
style: 'white-space: break-spaces;',
}, s));
}); });
} }
var caughtEval; var caughtEval;
console.log("Testing if CSP correctly blocks an 'eval' call");
try { try {
eval('true'); // jshint ignore:line eval('true'); // jshint ignore:line
} catch (err) { caughtEval = true; } } catch (err) { caughtEval = true; }
if (!/^\/(sheet|doc|presentation)/.test(window.location.pathname) && !caughtEval) { if (!/^\/(sheet|doc|presentation|unsafeiframe)/.test(window.location.pathname) && !caughtEval) {
return void setTimeout(function () { console.error('eval panic location:', window.location.pathname, caughtEval);
window.alert("aborting because eval should not be permitted."); return void _alert(function (UI, h, Msg) {
UI.alert(h('p', {
style: 'white-space: break-spaces',
}, Msg.error_evalPermitted));
}); });
} }
var afterLoaded = function (req) { var afterLoaded = function (req) {
req.cfg = req.cfg || {}; req.cfg = req.cfg || {};
if (req.pfx) { if (req.pfx) {

@ -70,7 +70,6 @@
"exportButton": "Exportar", "exportButton": "Exportar",
"exportButtonTitle": "Exportar aquest document a un fitxer local", "exportButtonTitle": "Exportar aquest document a un fitxer local",
"exportPrompt": "Com voleu anomenar el fitxer?", "exportPrompt": "Com voleu anomenar el fitxer?",
"changeNamePrompt": "Canvieu el vostre nom (deixeu-ho en blanc per fer-lo anònim):· ",
"user_rename": "Canvieu el nom visible", "user_rename": "Canvieu el nom visible",
"user_displayName": "Nom visible", "user_displayName": "Nom visible",
"user_accountName": "Identificador", "user_accountName": "Identificador",
@ -206,7 +205,6 @@
"canvas_currentBrush": "Pinzell actual", "canvas_currentBrush": "Pinzell actual",
"canvas_imageEmbed": "Incrusteu una imatge des del vostre dispositiu", "canvas_imageEmbed": "Incrusteu una imatge des del vostre dispositiu",
"profileButton": "Perfil", "profileButton": "Perfil",
"profile_avatar": "Avatar",
"profile_upload": " Carregueu un nou avatar", "profile_upload": " Carregueu un nou avatar",
"profile_uploadSizeError": "Error: l'avatar cal que sigui més petit que {0}", "profile_uploadSizeError": "Error: l'avatar cal que sigui més petit que {0}",
"profile_uploadTypeError": "Error: el tipus d'avatar no està permès. Els tipus permesos són: {0}", "profile_uploadTypeError": "Error: el tipus d'avatar no està permès. Els tipus permesos són: {0}",
@ -389,7 +387,7 @@
"autostore_sf": "Carpeta", "autostore_sf": "Carpeta",
"padNotPinnedVariable": "Aquest document caducarà després de {4} dies d'inactivitat, {0}inicieu una sessió{1} o {2}registreu-vos{3} per conservar-lo.", "padNotPinnedVariable": "Aquest document caducarà després de {4} dies d'inactivitat, {0}inicieu una sessió{1} o {2}registreu-vos{3} per conservar-lo.",
"uploadFolderButton": "Carregar una carpeta", "uploadFolderButton": "Carregar una carpeta",
"fm_morePads": "Més", "ui_more": "Més",
"fc_color": "Canvia el color", "fc_color": "Canvia el color",
"fc_expandAll": "Desplega-ho tot", "fc_expandAll": "Desplega-ho tot",
"fc_collapseAll": "Plega-ho tot", "fc_collapseAll": "Plega-ho tot",

@ -122,7 +122,7 @@
"fm_folderName": "Název složky", "fm_folderName": "Název složky",
"fm_folder": "Složka", "fm_folder": "Složka",
"fm_sharedFolder": "Sdílená složka", "fm_sharedFolder": "Sdílená složka",
"fm_morePads": "Více", "ui_more": "Více",
"fm_newFile": "Nový dokument", "fm_newFile": "Nový dokument",
"fm_newFolder": "Nová složka", "fm_newFolder": "Nová složka",
"userlist_addAsFriendTitle": "Poslat \"{0}\" žádost o přidání do kontatů", "userlist_addAsFriendTitle": "Poslat \"{0}\" žádost o přidání do kontatů",
@ -132,7 +132,6 @@
"profile_uploadTypeError": "Chyba: formát vašeho avataru není povolen. Povolené formáty jsou: {0}", "profile_uploadTypeError": "Chyba: formát vašeho avataru není povolen. Povolené formáty jsou: {0}",
"poll_create_user": "Přidat nového uživatele", "poll_create_user": "Přidat nového uživatele",
"profile_upload": " Nahrát nový avatar", "profile_upload": " Nahrát nový avatar",
"profile_avatar": "Avatar",
"profileButton": "Profil", "profileButton": "Profil",
"canvas_imageEmbed": "Vložit obrázek z počítače", "canvas_imageEmbed": "Vložit obrázek z počítače",
"canvas_currentBrush": "Aktuální štětec", "canvas_currentBrush": "Aktuální štětec",
@ -346,7 +345,6 @@
"exportButtonTitle": "Exportovat dokument do souboru", "exportButtonTitle": "Exportovat dokument do souboru",
"importButtonTitle": "Importovat dokument ze souboru", "importButtonTitle": "Importovat dokument ze souboru",
"initializing": "Inicializuji...", "initializing": "Inicializuji...",
"changeNamePrompt": "Změňte svoje jméno (nevyplňujte pokud chcete být anonymní): ",
"exportPrompt": "Jak chcete pojmenovat váš soubor?", "exportPrompt": "Jak chcete pojmenovat váš soubor?",
"shareSuccess": "Odkaz byl zkopírován do schránky", "shareSuccess": "Odkaz byl zkopírován do schránky",
"clickToEdit": "Klikněte pro úpravy", "clickToEdit": "Klikněte pro úpravy",
@ -714,7 +712,6 @@
"share_formView": "Účastník", "share_formView": "Účastník",
"share_formAuditor": "Auditor", "share_formAuditor": "Auditor",
"share_formEdit": "Autor", "share_formEdit": "Autor",
"admin_emailButton": "Aktualizace",
"form_text_number": "Číslo", "form_text_number": "Číslo",
"form_type_multicheck": "Mřížka zaškrtávacích políček", "form_type_multicheck": "Mřížka zaškrtávacích políček",
"form_type_checkbox": "Zaškrtávací políčko", "form_type_checkbox": "Zaškrtávací políčko",
@ -733,7 +730,6 @@
"form_maxLength": "Limit počtu znaků: {0}/{1}", "form_maxLength": "Limit počtu znaků: {0}/{1}",
"fm_moveNestedSF": "Nemůžete umístit jednu sdílenou složku do jiné. Složka {0} nebyla přesunuta.", "fm_moveNestedSF": "Nemůžete umístit jednu sdílenou složku do jiné. Složka {0} nebyla přesunuta.",
"form_maxOptions": "maximální počet odpovědí: {0}", "form_maxOptions": "maximální počet odpovědí: {0}",
"form_duplicates": "Duplicitní záznamy byly odstraněny",
"form_description_default": "Váš text", "form_description_default": "Váš text",
"form_type_page": "Konec stránky", "form_type_page": "Konec stránky",
"form_type_md": "Popis", "form_type_md": "Popis",
@ -744,7 +740,6 @@
"fo_moveFolderToChildError": "Složku nemůžete přesunout do její vlastní podsložky", "fo_moveFolderToChildError": "Složku nemůžete přesunout do její vlastní podsložky",
"form_reset": "Obnovit", "form_reset": "Obnovit",
"form_delete": "Odstranit", "form_delete": "Odstranit",
"form_sent": "Vaše odpověď byla odeslána",
"fo_unavailableName": "Soubor nebo složka se stejným názvem již v novém umístění existuje. Přejmenujte ji a zkuste to znovu.", "fo_unavailableName": "Soubor nebo složka se stejným názvem již v novém umístění existuje. Přejmenujte ji a zkuste to znovu.",
"form_updateWarning": "Přesto aktualizovat", "form_updateWarning": "Přesto aktualizovat",
"form_submitWarning": "Přesto odeslat", "form_submitWarning": "Přesto odeslat",
@ -753,7 +748,6 @@
"form_showSummary": "Zobrazit souhrn", "form_showSummary": "Zobrazit souhrn",
"form_showIndividual": "Zobrazit jednotlivé odpovědi", "form_showIndividual": "Zobrazit jednotlivé odpovědi",
"register_emailWarning2": "Narozdíl od jiných služeb u nás není možné obnovit heslo pomocí e-mailu.", "register_emailWarning2": "Narozdíl od jiných služeb u nás není možné obnovit heslo pomocí e-mailu.",
"form_form": "Formulář",
"form_editor": "Editor", "form_editor": "Editor",
"form_results_empty": "Nejsou žádné odpovědi", "form_results_empty": "Nejsou žádné odpovědi",
"register_emailWarning1": "Můžete to udělat pokud chcete, na server to však nebude odesláno.", "register_emailWarning1": "Můžete to udělat pokud chcete, na server to však nebude odesláno.",
@ -1110,7 +1104,6 @@
"admin_limit": "Aktuální limit: {0}", "admin_limit": "Aktuální limit: {0}",
"admin_setlimitButton": "Nastavit limit", "admin_setlimitButton": "Nastavit limit",
"admin_defaultlimitTitle": "Limit úložiště (MB)", "admin_defaultlimitTitle": "Limit úložiště (MB)",
"admin_registrationButton": "Zavřít",
"team_exportTitle": "Stáhnout sdílený Drive", "team_exportTitle": "Stáhnout sdílený Drive",
"admin_invalLimit": "Neplatná limitní hodnota", "admin_invalLimit": "Neplatná limitní hodnota",
"admin_invalKey": "Neplatný veřejný klíč", "admin_invalKey": "Neplatný veřejný klíč",

@ -71,7 +71,6 @@
"exportButton": "Exportieren", "exportButton": "Exportieren",
"exportButtonTitle": "Exportiere dieses Dokument als lokale Datei", "exportButtonTitle": "Exportiere dieses Dokument als lokale Datei",
"exportPrompt": "Wie möchtest du die Datei nennen?", "exportPrompt": "Wie möchtest du die Datei nennen?",
"changeNamePrompt": "Ändere deinen Namen (oder lasse dieses Feld leer, um anonym zu bleiben): ",
"user_rename": "Anzeigename ändern", "user_rename": "Anzeigename ändern",
"user_displayName": "Anzeigename", "user_displayName": "Anzeigename",
"user_accountName": "Kontoname", "user_accountName": "Kontoname",
@ -205,7 +204,6 @@
"canvas_currentBrush": "Aktueller Pinsel", "canvas_currentBrush": "Aktueller Pinsel",
"canvas_imageEmbed": "Ein Bild von deinem Computer einbetten", "canvas_imageEmbed": "Ein Bild von deinem Computer einbetten",
"profileButton": "Profil", "profileButton": "Profil",
"profile_avatar": "Avatar",
"profile_upload": " Neuen Avatar hochladen", "profile_upload": " Neuen Avatar hochladen",
"profile_uploadSizeError": "Fehler: Dein Avatar muss kleiner als {0} sein", "profile_uploadSizeError": "Fehler: Dein Avatar muss kleiner als {0} sein",
"profile_uploadTypeError": "Fehler: Der Typ dieses Bildes wird nicht unterstützt. Unterstütze Typen sind: {0}", "profile_uploadTypeError": "Fehler: Der Typ dieses Bildes wird nicht unterstützt. Unterstütze Typen sind: {0}",
@ -722,7 +720,7 @@
"requestEdit_sent": "Anfrage gesendet", "requestEdit_sent": "Anfrage gesendet",
"uploadFolderButton": "Ordner hochladen", "uploadFolderButton": "Ordner hochladen",
"properties_unknownUser": "{0} unbekannte(r) Benutzer", "properties_unknownUser": "{0} unbekannte(r) Benutzer",
"fm_morePads": "Mehr", "ui_more": "Mehr",
"uploadFolder_modal_title": "Optionen für Hochladen des Ordners", "uploadFolder_modal_title": "Optionen für Hochladen des Ordners",
"uploadFolder_modal_filesPassword": "Passwort für Dateien", "uploadFolder_modal_filesPassword": "Passwort für Dateien",
"uploadFolder_modal_owner": "Eigene Dateien", "uploadFolder_modal_owner": "Eigene Dateien",
@ -1031,7 +1029,6 @@
"admin_getlimitsHint": "Auflistung aller Speicherplatzbegrenzungen auf deiner Instanz.", "admin_getlimitsHint": "Auflistung aller Speicherplatzbegrenzungen auf deiner Instanz.",
"admin_setlimitButton": "Begrenzung eintragen", "admin_setlimitButton": "Begrenzung eintragen",
"admin_registrationTitle": "Registrierung deaktivieren", "admin_registrationTitle": "Registrierung deaktivieren",
"admin_registrationButton": "Deaktivieren",
"snapshots_notFound": "Diese Version ist nicht mehr verfügbar, da der Verlauf des Dokuments gelöscht wurde.", "snapshots_notFound": "Diese Version ist nicht mehr verfügbar, da der Verlauf des Dokuments gelöscht wurde.",
"snapshots_cantMake": "Die Version konnte nicht gespeichert. Die Verbindung wurde getrennt.", "snapshots_cantMake": "Die Version konnte nicht gespeichert. Die Verbindung wurde getrennt.",
"admin_getlimitsTitle": "Individuelle Regeln", "admin_getlimitsTitle": "Individuelle Regeln",
@ -1230,7 +1227,6 @@
"admin_emailHint": "Lege hier die Kontaktadresse für deine Instanz fest", "admin_emailHint": "Lege hier die Kontaktadresse für deine Instanz fest",
"admin_supportPrivHint": "Lasse dir den privaten Schlüssel anzeigen, den andere Administratoren zum Zugriff auf die Support-Tickets benötigen. Ein Formular zur Eingabe dieses Schlüssels wird in ihrem Administrationsbereich angezeigt.", "admin_supportPrivHint": "Lasse dir den privaten Schlüssel anzeigen, den andere Administratoren zum Zugriff auf die Support-Tickets benötigen. Ein Formular zur Eingabe dieses Schlüssels wird in ihrem Administrationsbereich angezeigt.",
"admin_supportPrivTitle": "Privater Schlüssel für das Support-Postfach", "admin_supportPrivTitle": "Privater Schlüssel für das Support-Postfach",
"admin_emailButton": "Aktualisieren",
"admin_supportPrivButton": "Schlüssel anzeigen", "admin_supportPrivButton": "Schlüssel anzeigen",
"admin_supportInitGenerate": "Support-Schlüssel generieren", "admin_supportInitGenerate": "Support-Schlüssel generieren",
"form_invalid": "Ungültiges Formular", "form_invalid": "Ungültiges Formular",
@ -1253,7 +1249,6 @@
"form_delete": "Löschen", "form_delete": "Löschen",
"form_reset": "Zurücksetzen", "form_reset": "Zurücksetzen",
"form_maxOptions": "Maximal {0} Antwort(en)", "form_maxOptions": "Maximal {0} Antwort(en)",
"form_duplicates": "Doppelte Einträge wurden entfernt",
"form_description_default": "Dein Text hier", "form_description_default": "Dein Text hier",
"form_type_page": "Seitenumbruch", "form_type_page": "Seitenumbruch",
"form_type_md": "Beschreibung", "form_type_md": "Beschreibung",
@ -1320,12 +1315,10 @@
"form_anonymous_off": "Blockiert", "form_anonymous_off": "Blockiert",
"form_invalidWarning": "Es gibt fehlerhafte Antworten:", "form_invalidWarning": "Es gibt fehlerhafte Antworten:",
"form_notAnswered": "<b>{0}</b> leere Antworten", "form_notAnswered": "<b>{0}</b> leere Antworten",
"form_form": "Formular",
"form_answered": "Du hast dieses Formular bereits beantwortet", "form_answered": "Du hast dieses Formular bereits beantwortet",
"form_cantFindAnswers": "Deine vorigen Antworten für dieses Formular konnten nicht geladen werden.", "form_cantFindAnswers": "Deine vorigen Antworten für dieses Formular konnten nicht geladen werden.",
"form_updateWarning": "Trotzdem aktualisieren", "form_updateWarning": "Trotzdem aktualisieren",
"form_submitWarning": "Trotzdem absenden", "form_submitWarning": "Trotzdem absenden",
"form_sent": "Deine Antwort wurde gesendet",
"form_update": "Aktualisieren", "form_update": "Aktualisieren",
"form_submit": "Absenden", "form_submit": "Absenden",
"form_type_checkbox": "Mehrfachauswahl", "form_type_checkbox": "Mehrfachauswahl",
@ -1463,5 +1456,11 @@
"fivehundred_internalServerError": "Interner Serverfehler", "fivehundred_internalServerError": "Interner Serverfehler",
"error_incorrectAccess": "Auf diese Seite kann nur via {0} zugegriffen werden.", "error_incorrectAccess": "Auf diese Seite kann nur via {0} zugegriffen werden.",
"admin_enableembedsHint": "Erlaubt die Einbettung von Dokumenten und Medien in andere Webseiten. Dies fügt eine Option \"Einbetten\" zum Teilen-Menü hinzu. Aus Sicherheitsgründen können Anwendungen, die auf OnlyOffice basieren (Tabelle, Dokument, Präsentation), auch bei aktivierter Option nicht eingebettet werden.", "admin_enableembedsHint": "Erlaubt die Einbettung von Dokumenten und Medien in andere Webseiten. Dies fügt eine Option \"Einbetten\" zum Teilen-Menü hinzu. Aus Sicherheitsgründen können Anwendungen, die auf OnlyOffice basieren (Tabelle, Dokument, Präsentation), auch bei aktivierter Option nicht eingebettet werden.",
"admin_cacheEvictionRequired": "Der Server hat die neue Einstellung übernommen. Bitte verwende die Schaltfläche <b>Cache leeren</b>, um sicherzustellen, dass die Änderung bei allen Benutzern wirksam wird." "admin_cacheEvictionRequired": "Der Server hat die neue Einstellung übernommen. Bitte verwende die Schaltfläche <b>Cache leeren</b>, um sicherzustellen, dass die Änderung bei allen Benutzern wirksam wird.",
"admin_bytesWrittenTitle": "Dauer der Leistungsmessung",
"admin_enableDiskMeasurementsTitle": "Messung der Festplattenleistung",
"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_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."
} }

@ -53,7 +53,6 @@
"exportButton": "Εξαγωγή", "exportButton": "Εξαγωγή",
"exportButtonTitle": "Εξάγετε αυτό το pad σε τοπικό αρχείο", "exportButtonTitle": "Εξάγετε αυτό το pad σε τοπικό αρχείο",
"exportPrompt": "Πως θα θέλατε να ονομάσετε το αρχείο σας;", "exportPrompt": "Πως θα θέλατε να ονομάσετε το αρχείο σας;",
"changeNamePrompt": "Αλλάξτε το όνομα σας (αφήστε το κενό για ανωνυμία): ",
"user_rename": "Αλλαγή εμφανιζόμενου ονόματος", "user_rename": "Αλλαγή εμφανιζόμενου ονόματος",
"user_displayName": "Εμφανιζόμενο όνομα", "user_displayName": "Εμφανιζόμενο όνομα",
"user_accountName": "Όνομα χρήστη", "user_accountName": "Όνομα χρήστη",
@ -160,7 +159,6 @@
"canvas_currentBrush": "Τρέχων πινέλο", "canvas_currentBrush": "Τρέχων πινέλο",
"canvas_imageEmbed": "Εισάγετε μια εικόνα από τον υπολογιστή σας", "canvas_imageEmbed": "Εισάγετε μια εικόνα από τον υπολογιστή σας",
"profileButton": "Προφίλ", "profileButton": "Προφίλ",
"profile_avatar": "Αβατάρ",
"profile_upload": " Μεταφορτώστε ένα νέο αβατάρ", "profile_upload": " Μεταφορτώστε ένα νέο αβατάρ",
"profile_uploadSizeError": "Σφάλμα: το αβατάρ σας πρέπει να είναι μικρότερο από {0}", "profile_uploadSizeError": "Σφάλμα: το αβατάρ σας πρέπει να είναι μικρότερο από {0}",
"profile_uploadTypeError": "Σφάλμα: αυτό το είδος αρχείου δεν επιτρέπεται. Επιτρεπόμενα αρχεία: {0}", "profile_uploadTypeError": "Σφάλμα: αυτό το είδος αρχείου δεν επιτρέπεται. Επιτρεπόμενα αρχεία: {0}",

@ -30,7 +30,6 @@
"importButtonTitle": "Importar un documento de tus archivos locales", "importButtonTitle": "Importar un documento de tus archivos locales",
"exportButtonTitle": "Exportar este documento a un archivo local", "exportButtonTitle": "Exportar este documento a un archivo local",
"exportPrompt": "¿Cómo te gustaría llamar a este archivo?", "exportPrompt": "¿Cómo te gustaría llamar a este archivo?",
"changeNamePrompt": "Cambiar tu nombre (dejar vacío para ser anónimo): ",
"clickToEdit": "Haz clic para cambiar", "clickToEdit": "Haz clic para cambiar",
"forgetPrompt": "Pulsar OK moverá este documento a tu papelera. ¿Estás seguro?", "forgetPrompt": "Pulsar OK moverá este documento a tu papelera. ¿Estás seguro?",
"shareButton": "Compartir", "shareButton": "Compartir",
@ -251,7 +250,6 @@
"historyText": "Historial", "historyText": "Historial",
"openLinkInNewTab": "Abrir enlace en pestaña nueva", "openLinkInNewTab": "Abrir enlace en pestaña nueva",
"profileButton": "Perfil", "profileButton": "Perfil",
"profile_avatar": "Imagen",
"profile_upload": " Subir una imagen de perfil", "profile_upload": " Subir una imagen de perfil",
"profile_error": "Error al crear tu perfil: {0}", "profile_error": "Error al crear tu perfil: {0}",
"profile_register": "Tienes que ingresar para crear un perfil!", "profile_register": "Tienes que ingresar para crear un perfil!",
@ -445,7 +443,7 @@
"settings_deleteModal": "Compartir la siguiente información con el administrado de su CryptDrive a fin de que sus datos sean removidos de su servidor.", "settings_deleteModal": "Compartir la siguiente información con el administrado de su CryptDrive a fin de que sus datos sean removidos de su servidor.",
"settings_deleted": "Tu cuenta de usuario ha sido borrada. Presione OK para ir a la página principal.", "settings_deleted": "Tu cuenta de usuario ha sido borrada. Presione OK para ir a la página principal.",
"uploadFolderButton": "Subir carpeta", "uploadFolderButton": "Subir carpeta",
"fm_morePads": "Más", "ui_more": "Más",
"fc_color": "Cambiar color", "fc_color": "Cambiar color",
"fc_expandAll": "Expandir todo", "fc_expandAll": "Expandir todo",
"fc_collapseAll": "Colapsar todo", "fc_collapseAll": "Colapsar todo",

@ -64,7 +64,6 @@
"user_accountName": "Kontuaren izena", "user_accountName": "Kontuaren izena",
"user_displayName": "Bistaratzeko izena", "user_displayName": "Bistaratzeko izena",
"user_rename": "Aldatu bistaratzeko izena", "user_rename": "Aldatu bistaratzeko izena",
"changeNamePrompt": "Aldatu zure izena (hutsik laga anonimo aritzeko): ",
"exportPrompt": "Zer izena jarri nahi diozu fitxategi honi?", "exportPrompt": "Zer izena jarri nahi diozu fitxategi honi?",
"exportButtonTitle": "Esportatu dokumentu hau fitxategi lokal batera", "exportButtonTitle": "Esportatu dokumentu hau fitxategi lokal batera",
"exportButton": "Esportatu", "exportButton": "Esportatu",
@ -158,7 +157,6 @@
"profile_uploadTypeError": "Errorea: zure abatar mota ez da onartzen. Onartutako mota hauek dira: {0}", "profile_uploadTypeError": "Errorea: zure abatar mota ez da onartzen. Onartutako mota hauek dira: {0}",
"profile_uploadSizeError": "Errorea: zure abatarra {0} baino txikiagoa behar du izan", "profile_uploadSizeError": "Errorea: zure abatarra {0} baino txikiagoa behar du izan",
"profile_upload": " Kargatu abatar berri bat", "profile_upload": " Kargatu abatar berri bat",
"profile_avatar": "Abatarra",
"profileButton": "Profila", "profileButton": "Profila",
"canvas_imageEmbed": "Txertatu irudi bat zure ordenagailutik", "canvas_imageEmbed": "Txertatu irudi bat zure ordenagailutik",
"canvas_currentBrush": "Uneko pintzela", "canvas_currentBrush": "Uneko pintzela",
@ -300,7 +298,7 @@
"fm_folderName": "Karpetaren izena", "fm_folderName": "Karpetaren izena",
"fm_sharedFolder": "Karpeta partekatua", "fm_sharedFolder": "Karpeta partekatua",
"fm_folder": "Karpeta", "fm_folder": "Karpeta",
"fm_morePads": "Gehiago", "ui_more": "Gehiago",
"fm_newFile": "Dokumentu berria", "fm_newFile": "Dokumentu berria",
"fm_newFolder": "Karpeta berria", "fm_newFolder": "Karpeta berria",
"fm_newButtonTitle": "Sortu dokumentu edo karpeta berria, inportatu fitxategi bat uneko karpetan.", "fm_newButtonTitle": "Sortu dokumentu edo karpeta berria, inportatu fitxategi bat uneko karpetan.",
@ -314,7 +312,7 @@
"fm_templateName": "Txantiloiak", "fm_templateName": "Txantiloiak",
"fm_filesDataName": "Fitxategi guztiak", "fm_filesDataName": "Fitxategi guztiak",
"fm_trashName": "Zakarrontzia", "fm_trashName": "Zakarrontzia",
"fm_rootName": "Drive", "fm_rootName": "Unitatea",
"contacts_online": "Gela honetako beste erabiltzaile bat linean dago", "contacts_online": "Gela honetako beste erabiltzaile bat linean dago",
"contacts_leaveRoom": "Utzi gela hau", "contacts_leaveRoom": "Utzi gela hau",
"contacts_rooms": "Gelak", "contacts_rooms": "Gelak",
@ -386,7 +384,7 @@
"settings_cat_pad": "Testu aberastua", "settings_cat_pad": "Testu aberastua",
"settings_cat_code": "Kodea", "settings_cat_code": "Kodea",
"settings_cat_cursor": "Kurtsorea", "settings_cat_cursor": "Kurtsorea",
"settings_cat_drive": "CryptDrive", "settings_cat_drive": "CryptDrive unitatea",
"settings_cat_account": "Kontua", "settings_cat_account": "Kontua",
"register_emailWarning3": "Ulertzen baduzu eta hala ere zure posta elektronikoa zure erabiltzaile-izenerako erabili nahi baduzu, sakatu Ados.", "register_emailWarning3": "Ulertzen baduzu eta hala ere zure posta elektronikoa zure erabiltzaile-izenerako erabili nahi baduzu, sakatu Ados.",
"register_emailWarning2": "Ezin izango duzu pasahitza berrezarri zure posta elektronikoa erabiliz beste zerbitzu askorekin egin dezakezun bezala.", "register_emailWarning2": "Ezin izango duzu pasahitza berrezarri zure posta elektronikoa erabiliz beste zerbitzu askorekin egin dezakezun bezala.",
@ -664,7 +662,7 @@
"team_listSlot": "Talderako tartea eskuragarri", "team_listSlot": "Talderako tartea eskuragarri",
"team_listTitle": "Zure taldeak", "team_listTitle": "Zure taldeak",
"team_maxTeams": "Erabiltzaile-kontu bakoitza {0} taldeetako kide izan daiteke soilik.", "team_maxTeams": "Erabiltzaile-kontu bakoitza {0} taldeetako kide izan daiteke soilik.",
"team_infoContent": "Talde bakoitzak bere CryptDrive, biltegiratze kuota, txata eta kideen zerrenda ditu. Taldearen jabeek talde osoa ezabatu dezakete, administratzaileek kideak gonbidatu edo bota ditzakete, kideek taldea utzi dezakete.", "team_infoContent": "Talde bakoitzak bere CryptDrive edo unitatea, biltegiratze kuota, txata eta kideen zerrenda ditu. Taldearen jabeek talde osoa ezabatu dezakete, administratzaileek kideak gonbidatu edo bota ditzakete, kideek taldea utzi dezakete.",
"team_avatarHint": "500KB gehienezko tamaina (png, jpg, jpeg, gif)", "team_avatarHint": "500KB gehienezko tamaina (png, jpg, jpeg, gif)",
"team_avatarTitle": "Taldearen avatarra", "team_avatarTitle": "Taldearen avatarra",
"team_nameHint": "Ezarri taldearen izena", "team_nameHint": "Ezarri taldearen izena",
@ -672,7 +670,7 @@
"team_admins": "Administraitzaleak", "team_admins": "Administraitzaleak",
"team_members": "Kideak", "team_members": "Kideak",
"team_owner": "Jabeak", "team_owner": "Jabeak",
"team_leaveConfirm": "Talde hau uzten baduzu, bere CryptDrive, txat historia eta beste edukietarako sarbidea galduko dituzu. Ziur zaude?", "team_leaveConfirm": "Talde hau uzten baduzu, bere CryptDrive edo unitatea, txat historia eta beste edukietarako sarbidea galduko dituzu. Ziur zaude?",
"team_leaveButton": "Utzi talde hau", "team_leaveButton": "Utzi talde hau",
"team_inviteButton": "Gonbidatu kideak", "team_inviteButton": "Gonbidatu kideak",
"team_rosterKick": "Kanporatu taldetik", "team_rosterKick": "Kanporatu taldetik",
@ -682,7 +680,7 @@
"team_createLabel": "Sortu talde berria", "team_createLabel": "Sortu talde berria",
"team_infoLabel": "Taldeei buruz", "team_infoLabel": "Taldeei buruz",
"team_cat_admin": "Administrazioa", "team_cat_admin": "Administrazioa",
"team_cat_drive": "Drive", "team_cat_drive": "Unitatea",
"team_cat_chat": "Txata", "team_cat_chat": "Txata",
"team_cat_members": "Kideak", "team_cat_members": "Kideak",
"team_cat_back": "Itzuli taldeetara", "team_cat_back": "Itzuli taldeetara",
@ -693,11 +691,11 @@
"team_acceptInvitation": "{0}-k taldean sartzeko zure eskaintza onartu du: <b>{1}</b>", "team_acceptInvitation": "{0}-k taldean sartzeko zure eskaintza onartu du: <b>{1}</b>",
"team_kickedFromTeam": "{0}-k bota zaitu taldetik: <b>{1}</b>", "team_kickedFromTeam": "{0}-k bota zaitu taldetik: <b>{1}</b>",
"team_invitedToTeam": "{0}-k bere taldean sartzera gonbidatu zaitu: <b>{1}</b>", "team_invitedToTeam": "{0}-k bere taldean sartzera gonbidatu zaitu: <b>{1}</b>",
"team_pcsSelectHelp": "Zure taldearen drive-an jabetzako dokumentu bat sortzeak taldeari jabetza emango dio.", "team_pcsSelectHelp": "Zure taldearen unitatean jabetzako dokumentu bat sortzeak taldeari jabetza emango dio.",
"team_pcsSelectLabel": "Gorde bertan", "team_pcsSelectLabel": "Gorde bertan",
"team_inviteModalButton": "Gonbidatu", "team_inviteModalButton": "Gonbidatu",
"team_pickFriends": "Aukeratu zein kontaktu gonbidatu talde honetara", "team_pickFriends": "Aukeratu zein kontaktu gonbidatu talde honetara",
"share_linkTeam": "Gehitu taldeko drive-ra", "share_linkTeam": "Gehitu taldeko unitatera",
"owner_removedPending": "{0}-k <b>{1}</b>-ren zure jabetza-eskaintza bertan behera utzi du", "owner_removedPending": "{0}-k <b>{1}</b>-ren zure jabetza-eskaintza bertan behera utzi du",
"owner_removed": "{0}-k <b>{1}</b>-ren jabetza kendu dizu", "owner_removed": "{0}-k <b>{1}</b>-ren jabetza kendu dizu",
"owner_request_declined": "{0}-k <b>{1}</b>-ren jabea izateko zure eskaintza baztertu du", "owner_request_declined": "{0}-k <b>{1}</b>-ren jabea izateko zure eskaintza baztertu du",
@ -857,9 +855,9 @@
"support_cat_bug": "Akatsen txostena", "support_cat_bug": "Akatsen txostena",
"support_cat_data": "Edukia galtzea", "support_cat_data": "Edukia galtzea",
"support_cat_account": "Erabiltzaile kontua", "support_cat_account": "Erabiltzaile kontua",
"info_privacyFlavour": "Gure <a>pribatutasun-politika</a>k zure datuak nola tratatzen ditugun deskribatzen du.", "info_privacyFlavour": "Instantzia honen <a>pribatutasun-politika</a>",
"user_about": "CryptPad-i buruz", "user_about": "CryptPad-i buruz",
"info_imprintFlavour": "<a>Instantzia honen administratzaileei buruzko legezko informazioa</a>.", "info_imprintFlavour": "Instantzia honen administratzaileei buruzko <a>legezko informazioa</a>.",
"settings_safeLinkDefault": "Esteka seguruak lehenespenez aktibatuta daude orain. Mesedez, erabili <i></i> <b>Partekatu</b> menua estekak kopiatzeko, nabigatzailearen helbide-barra baino.", "settings_safeLinkDefault": "Esteka seguruak lehenespenez aktibatuta daude orain. Mesedez, erabili <i></i> <b>Partekatu</b> menua estekak kopiatzeko, nabigatzailearen helbide-barra baino.",
"support_languagesPreamble": "Laguntza-taldeak hizkuntza hauek hitz egiten ditu:", "support_languagesPreamble": "Laguntza-taldeak hizkuntza hauek hitz egiten ditu:",
"slide_textCol": "Testuaren kolorea", "slide_textCol": "Testuaren kolorea",
@ -1035,7 +1033,6 @@
"share_formView": "Parte-hartzailea", "share_formView": "Parte-hartzailea",
"share_formAuditor": "Auditorea", "share_formAuditor": "Auditorea",
"share_formEdit": "Egilea", "share_formEdit": "Egilea",
"admin_emailButton": "Eguneratu",
"admin_supportPrivButton": "Erakutsi gakoa", "admin_supportPrivButton": "Erakutsi gakoa",
"admin_supportPrivHint": "Erakutsi beste administratzaileek laguntza-txartelak ikusteko beharko duten gako pribatua. Gako hau sartzeko inprimaki bat agertuko da bere administrazio-panelean.", "admin_supportPrivHint": "Erakutsi beste administratzaileek laguntza-txartelak ikusteko beharko duten gako pribatua. Gako hau sartzeko inprimaki bat agertuko da bere administrazio-panelean.",
"admin_supportInitGenerate": "Sortu laguntza-gakoak", "admin_supportInitGenerate": "Sortu laguntza-gakoak",
@ -1160,7 +1157,7 @@
"whatis_xwiki_info": "<p>CryptPad <a>XWiki</a>n egin da, Parisen (Frantzia) egoitza duen enpresan, eta 15 urte baino gehiago daramatza kode irekiko softwarea egiten. Informazioa antolatzeko lankidetzako softwarea egiten esperientzia handia dugu. Gure ibilbideak erakusten du CryptPad-en epe luzerako garapenarekin eta mantentzearekin konprometituta gaudela.</p>", "whatis_xwiki_info": "<p>CryptPad <a>XWiki</a>n egin da, Parisen (Frantzia) egoitza duen enpresan, eta 15 urte baino gehiago daramatza kode irekiko softwarea egiten. Informazioa antolatzeko lankidetzako softwarea egiten esperientzia handia dugu. Gure ibilbideak erakusten du CryptPad-en epe luzerako garapenarekin eta mantentzearekin konprometituta gaudela.</p>",
"whatis_model_info": "<p>CryptPad-ek 2016tik Frantziako eta Europako ikerketa-beken bidez babestuta daago, hala nola BPI France, NLNet Foundation, NGI Trust, Mozilla Open Source Support, baita cryptpad.fr-rako dohaintzak eta harpidetzak ere. Uste dugu diru publikoak kode publikoa finantzatu behar duela, beraz, zerbitzua guztiz irekia da. Horrek esan nahi du edonork erabili, ostatatu eta aldatu dezakeela softwarea.</p><p>CryptPad-ek ez du etekinik ateratzen erabiltzailearen datuetatik. Pribatutasuna errespetatzen duten lineako zerbitzuen ikuspegi baten parte da hau. Informazio pertsonalarekin irabaziak lortzen dituzten bitartean \"doakoak\" direla diruditen plataforma handiek ez bezala, CryptPad-ek erabiltzaileek borondatez finantzatutako eredu jasangarri bat eraikitzea du helburu.</p><p>CryptPad-en funtzionaltasuna doan eskaintzen dugu, guztiok pribatutasun pertsonala merezi duela uste dugulako. , ez bakarrik errenta handia duten pertsonak. Proiektua laguntzeko moduan bazaude, erabiltzaile guztiei mesede egiten dieten funtzionalitate, hobekuntza eta mantentze-lan berriak ekarriko ditugu.</p><p>Orain, proiektuaren bideragarritasuna ezarrita, hurrengo helburua da egitea da ekonomikoki jasangarria erabiltzaileen finantzaketaren bidez. CryptPad-i lagundu nahi badiozu eta plataforma handien alternatiba jasangarri bihurtzen lagundu, kontuan hartu dohaintza bat behin edo era erregularrean egitea.</p>", "whatis_model_info": "<p>CryptPad-ek 2016tik Frantziako eta Europako ikerketa-beken bidez babestuta daago, hala nola BPI France, NLNet Foundation, NGI Trust, Mozilla Open Source Support, baita cryptpad.fr-rako dohaintzak eta harpidetzak ere. Uste dugu diru publikoak kode publikoa finantzatu behar duela, beraz, zerbitzua guztiz irekia da. Horrek esan nahi du edonork erabili, ostatatu eta aldatu dezakeela softwarea.</p><p>CryptPad-ek ez du etekinik ateratzen erabiltzailearen datuetatik. Pribatutasuna errespetatzen duten lineako zerbitzuen ikuspegi baten parte da hau. Informazio pertsonalarekin irabaziak lortzen dituzten bitartean \"doakoak\" direla diruditen plataforma handiek ez bezala, CryptPad-ek erabiltzaileek borondatez finantzatutako eredu jasangarri bat eraikitzea du helburu.</p><p>CryptPad-en funtzionaltasuna doan eskaintzen dugu, guztiok pribatutasun pertsonala merezi duela uste dugulako. , ez bakarrik errenta handia duten pertsonak. Proiektua laguntzeko moduan bazaude, erabiltzaile guztiei mesede egiten dieten funtzionalitate, hobekuntza eta mantentze-lan berriak ekarriko ditugu.</p><p>Orain, proiektuaren bideragarritasuna ezarrita, hurrengo helburua da egitea da ekonomikoki jasangarria erabiltzaileen finantzaketaren bidez. CryptPad-i lagundu nahi badiozu eta plataforma handien alternatiba jasangarri bihurtzen lagundu, kontuan hartu dohaintza bat behin edo era erregularrean egitea.</p>",
"whatis_model": "Negozio eredua", "whatis_model": "Negozio eredua",
"whatis_drive_info": "<p>Gorde eta kudeatu dokumentuak CryptDrive-rekin. Sortu karpetak, karpeta partekatuak eta etiketak dokumentuak antolatzeko. Kargatu eta partekatu fitxategiak (PDFak, argazkiak, bideoak, audioak, etab.). Taldeko drive-ak erabiltzaileen artean partekatzen dira eta lankidetza-antolaketa eta sarbide-kontrol zehatzak egiteko aukera ematen dute.</p>", "whatis_drive_info": "<p>Gorde eta kudeatu dokumentuak CryptDrive unitatearekin. Sortu karpetak, karpeta partekatuak eta etiketak dokumentuak antolatzeko. Kargatu eta partekatu fitxategiak (PDFak, argazkiak, bideoak, audioak, etab.). Taldeko unitateak erabiltzaileen artean partekatzen dira eta lankidetza-antolaketa eta sarbide-kontrol zehatzak egiteko aukera ematen dute.</p>",
"whatis_apps_info": "<p>CryptPad-ek kolaborazio produktiborako beharrezkoak diren tresna guztiak dituen bulegoko suite osoa eskaintzen du. Aplikazioak honako hauek dira: Testu aberastua, Kalkulu-orriak, Kodea/Markdown, Kanban, Diapositibak, Arbel zuria eta Inkestak.</p><p>Aplikazioak lankidetza-funtzio multzo batekin osatzen dira, hala nola txata, kontaktuak, egilearen araberako kolorea (kodea/markdown), eta iruzkinak (testu aberastuan).</p>", "whatis_apps_info": "<p>CryptPad-ek kolaborazio produktiborako beharrezkoak diren tresna guztiak dituen bulegoko suite osoa eskaintzen du. Aplikazioak honako hauek dira: Testu aberastua, Kalkulu-orriak, Kodea/Markdown, Kanban, Diapositibak, Arbel zuria eta Inkestak.</p><p>Aplikazioak lankidetza-funtzio multzo batekin osatzen dira, hala nola txata, kontaktuak, egilearen araberako kolorea (kodea/markdown), eta iruzkinak (testu aberastuan).</p>",
"whatis_apps": "Aplikazio multzo osoa", "whatis_apps": "Aplikazio multzo osoa",
"whatis_collaboration_info": "<p>CryptPad lankidetza ahalbidetzeko eraiki da. Dokumentuen aldaketak denbora errealean sinkronizatzen ditu. Datu guztiak enkriptatuta daudenez, zerbitzuak eta bere administratzaileek ez dute editatzen eta gordetzen den edukia ikusteko modurik.</p>", "whatis_collaboration_info": "<p>CryptPad lankidetza ahalbidetzeko eraiki da. Dokumentuen aldaketak denbora errealean sinkronizatzen ditu. Datu guztiak enkriptatuta daudenez, zerbitzuak eta bere administratzaileek ez dute editatzen eta gordetzen den edukia ikusteko modurik.</p>",
@ -1227,8 +1224,8 @@
"fm_deletedFolder": "Karpeta ezabatua", "fm_deletedFolder": "Karpeta ezabatua",
"admin_limitUser": "Erabiltzailearen gako publikoa", "admin_limitUser": "Erabiltzailearen gako publikoa",
"team_exportButton": "Deskargatu", "team_exportButton": "Deskargatu",
"team_exportHint": "Deskargatu talde honen drive-ko dokumentu guztiak. Dokumentuak beste aplikazio batzuek irakur ditzaketen formatuetan deskargatuko dira formatu hori eskuragarri dagoenean. Formatu hori erabilgarri ez dagoenean, dokumentuak CryptPad-ek irakurtzeko moduko formatuan deskargatuko dira.", "team_exportHint": "Deskargatu talde honen unitateko dokumentu guztiak. Dokumentuak beste aplikazio batzuek irakur ditzaketen formatuetan deskargatuko dira formatu hori eskuragarri dagoenean. Formatu hori erabilgarri ez dagoenean, dokumentuak CryptPad-ek irakurtzeko moduko formatuan deskargatuko dira.",
"team_exportTitle": "Deskargatu taldeko drive-a", "team_exportTitle": "Deskargatu taldeko unitatea",
"admin_cat_quota": "Erabiltzailearen biltegiratzea", "admin_cat_quota": "Erabiltzailearen biltegiratzea",
"admin_invalLimit": "Muga baliogabea", "admin_invalLimit": "Muga baliogabea",
"admin_invalKey": "Gako publiko baliogabea", "admin_invalKey": "Gako publiko baliogabea",
@ -1243,8 +1240,7 @@
"admin_limit": "Uneko muga: {0}", "admin_limit": "Uneko muga: {0}",
"admin_setlimitButton": "Ezarri muga", "admin_setlimitButton": "Ezarri muga",
"admin_defaultlimitTitle": "Biltegiratze muga (MB)", "admin_defaultlimitTitle": "Biltegiratze muga (MB)",
"admin_defaultlimitHint": "CryptDrive-ren (erabiltzaileren zein talderen) biltegiratzeko gehienezko muga, arau pertsonalizatua aplikatzen ez denean", "admin_defaultlimitHint": "CryptDrive edo unitatearen (erabiltzaileren zein talderen) biltegiratzeko gehienezko muga, arau pertsonalizatua aplikatzen ez denean",
"admin_registrationButton": "Itxi",
"admin_registrationTitle": "Itxi izena ematea", "admin_registrationTitle": "Itxi izena ematea",
"admin_registrationHint": "Ez utzi erabiltzaile berririk izena ematen", "admin_registrationHint": "Ez utzi erabiltzaile berririk izena ematen",
"snapshots_notFound": "Babeskopia hau jada ez dago dokumentuaren historia ezabatu delako.", "snapshots_notFound": "Babeskopia hau jada ez dago dokumentuaren historia ezabatu delako.",
@ -1272,7 +1268,6 @@
"form_answerAnonymous": "Erantzun anonimoa {0}-n", "form_answerAnonymous": "Erantzun anonimoa {0}-n",
"form_showSummary": "Erakutsi laburpena", "form_showSummary": "Erakutsi laburpena",
"form_showIndividual": "Erakutsi norbanakoen erantzunak", "form_showIndividual": "Erakutsi norbanakoen erantzunak",
"form_form": "Inprimakia",
"form_editor": "Editorea", "form_editor": "Editorea",
"form_results_empty": "Ez dago erantzunik", "form_results_empty": "Ez dago erantzunik",
"form_results": "Erantzunak ({0})", "form_results": "Erantzunak ({0})",
@ -1281,13 +1276,11 @@
"form_updateWarning": "Eguneratu hala ere", "form_updateWarning": "Eguneratu hala ere",
"form_submitWarning": "Bidali hala ere", "form_submitWarning": "Bidali hala ere",
"form_delete": "Ezabatu", "form_delete": "Ezabatu",
"form_sent": "Zure erantzuna bidali da",
"form_reset": "Berrezarri", "form_reset": "Berrezarri",
"form_update": "Eguneratu", "form_update": "Eguneratu",
"form_submit": "Bidali", "form_submit": "Bidali",
"form_maxLength": "Karaktere muga: {0}/{1}", "form_maxLength": "Karaktere muga: {0}/{1}",
"form_maxOptions": "gehienez {0} erantzun", "form_maxOptions": "gehienez {0} erantzun",
"form_duplicates": "Sarrera bikoiztuak kendu dira",
"form_description_default": "Zure testua hemen", "form_description_default": "Zure testua hemen",
"form_type_page": "Orrialde jauzia", "form_type_page": "Orrialde jauzia",
"form_type_md": "Deskripzioa", "form_type_md": "Deskripzioa",
@ -1427,5 +1420,47 @@
"resources_learnWhy": "Jakin zergatik blokeatu den", "resources_learnWhy": "Jakin zergatik blokeatu den",
"resources_openInNewTab": "Ireki fitxa berri batean", "resources_openInNewTab": "Ireki fitxa berri batean",
"bounce_danger": "Sakatu duzun estekak ez du web-orri batera eramaten, kaltegarriak izan daitezkeen kode edo datu batzuetara baizik.\n\n(\"{0}\")\n\nCryptPad-ek hauek blokeatzen ditu segurtasun arrazoiengatik. Ados sakatuz gero, fitxa hau itxiko da.", "bounce_danger": "Sakatu duzun estekak ez du web-orri batera eramaten, kaltegarriak izan daitezkeen kode edo datu batzuetara baizik.\n\n(\"{0}\")\n\nCryptPad-ek hauek blokeatzen ditu segurtasun arrazoiengatik. Ados sakatuz gero, fitxa hau itxiko da.",
"bounce_confirm": "Irteteko zorian zaude: {0}\n\nZiur \"{1}\" bisitatu nahi duzula?" "bounce_confirm": "Irteteko zorian zaude: {0}\n\nZiur \"{1}\" bisitatu nahi duzula?",
"error_evalPermitted": "Abortatzen, ebaluazioa onartu behar ez delako.\n\nErrore hau Edukien-Segurtasun-Politika goiburuekin lotuta dago, arrazoiak izan daitezke: hauek onartzen ez dituen nabigatzaile zaharkitu batek, portaera zuzena oztopatzen duten nabigatzailearen gehigarriak edo CryptPad instantzia honen konfigurazio oker bat izan daiteke.",
"support_cat_drives": "Taldeko unitatea",
"error_incorrectAccess": "Orri honetara {0} bidez soilik sar daiteke.",
"error_embeddingDisabledSpecific": "Kapsulatzea desgaituta dago CryptPad aplikazio honetan.",
"error_embeddingDisabled": "Kapsulatzea desgaituta dago CryptPad instantzia honetan",
"admin_enableembedsHint": "Baimendu instantzia honetako dokumentuak eta euskarriak beste webgune batzuetan txertatzea. Honek \"Txertatu\" aukera bat gehituko du Partekatu menuan. Segurtasun arrazoiengatik OnlyOfficek erabiltzen duten aplikazioak (Orriak, Dokumentua, Aurkezpena) ezin dira txertatu ezarpen hau aktibo egon arren.",
"admin_enableembedsTitle": "Gaitu urrutiko kapsulatzea",
"ui_ms": "milisegundo",
"admin_setDuration": "Ezarri iraupena",
"admin_bytesWrittenHint": "Diskoaren errendimenduaren neurketak gaitu badituzu, leihoaren iraupena behean konfigura daiteke.",
"admin_bytesWrittenTitle": "Diskoaren errendimendua neurtzeko leihoa",
"admin_enableDiskMeasurementsHint": "Gaituta badago, JSON API amaierako puntu bat agertuko da <code>/api/profiling</code> azpian. Honek diskoko I/O-ren neurketa martxan mantentzen du beheko denbora-leihoan. Ezarpen honek zerbitzariaren errendimenduan eragina izan dezake eta datu sentikorrak ager ditzake. Ezarpen hau desgaituta uztea gomendatzen da zertan ari zaren jakin ezean.",
"admin_enableDiskMeasurementsTitle": "Neurtu diskoaren errendimendua",
"admin_infoNotice2": "Ikus 'Sarea' fitxa xehetasun gehiagorako.",
"admin_infoNotice1": "Erabili hurrengo eremuak zure instantzia deskribatzeko. Informazio hau CryptPad-en etorkizuneko bertsio batean instantziako lehen orrialdean erabiliko da. Zerbitzariaren telemetriaren zati gisa bidaltzen da CryptPad instantzia publikoen zerrendan sartzea aukeratzen baduzu soilik.",
"admin_reviewCheckupNotice": "<a>Egiaztapen</a>-orria berrikustea gomendatzen da instantzia hau behar bezala konfiguratuta dagoela baieztatzeko.",
"admin_cacheEvictionRequired": "Zerbitzaria ezarpen berriarekin eguneratu da. Mesedez, erabili <b>Flush cachea</b> botoia aldaketa hau erabiltzaile guztientzat ikusgai egongo dela ziurtatzeko.",
"fivehundred_internalServerError": "Barneko zerbitzari-errorea",
"support_debuggingDataHint": "Hurrengo informazioa bidaltzen dituzun laguntza-txarteletan sartzen da. Bakar batek ere ez die ematen administratzaileei zure dokumentuak atzitzeko edo deszifratzeko aukera. Informazio hau zifratuta dago, beraz administratzaileek bakarrik irakur dezakete.",
"support_debuggingDataTitle": "Kontuaren arazketa-informazioa",
"support_cat_debugging": "Araztu datuak",
"ui_openDirectly": "Funtzionalitate hau ez dago erabilgarri CryptPad beste gune batean txertatuta dagoenean. Dokumentu hau fitxa berri batean ireki nahi duzu?",
"support_cat_abuse": "Salatu erabilera okerra",
"support_cat_document": "Dokumentua",
"support_warning_other": "Zein da zure kontsultaren izaera? Mesedez, eman ahalik eta informazio garrantzitsuena zure arazoa azkar konpontzea errazteko",
"support_warning_abuse": "Salatu <a>zerbitzu-baldintzak</a> urratzen dituen edukia. Mesedez, eman dokumentu iraingarrietarako edo erabiltzaile-profiletarako estekak eta deskribatu baldintzak nola urratzen dituzten. Edukia edo portaera aurkitu duzun testuinguruari buruzko informazio gehigarriek administratzaileei etorkizuneko urraketak saihesten lagun diezaieke",
"support_warning_bug": "Zehaztu zein nabigatzailean gertatzen den arazoa eta gehigarririk instalatuta dagoen. Eman arazoari buruz eta bera erreproduzitzeko beharrezkoak diren urratsei buruzko ahalik eta xehetasun gehien",
"support_warning_document": "Zehaztu zein motatako dokumentuak eragiten duen arazoa eta eman <a>dokumentu-identifikatzailea</a> edo esteka bat",
"support_warning_drives": "Kontuan izan administratzaileek ezin dituztela karpetak eta dokumentuak izenez identifikatu. Karpeta partekatuetarako, eman <a>dokumentu-identifikatzaile bat</a>",
"support_warning_account": "Kontuan izan administratzaileek ezin dituztela pasahitzak berrezarri. Zure kontuaren kredentzialak galdu badituzu baina oraindik saioa hasita baduzu, <a>zure datuak kontu berri batera migra ditzakezu</a>",
"support_warning_prompt": "Aukeratu zure arazorako kategoriarik adierazgarriena. Honek administratzaileei laguntzen die eta zer informazio eman jakiteko iradokizun gehiago eskaintzen ditu",
"info_sourceFlavour": "CryptPad-erako <a>iturburu-kodea</a>",
"info_termsFlavour": "Instantzia honen <a>zerbitzu-baldintzak</a>",
"footer_source": "Kodearen iturburua",
"admin_jurisdictionHint": "Instantzia honen enkriptatutako datuak ostatatzen diren herrialdea",
"admin_jurisdictionTitle": "Ostatua",
"admin_descriptionHint": "cryptpad.org-eko instantzia publikoen zerrendan instantzia honetarako bistaratzen den deskribapen-testua",
"admin_descriptionTitle": "Instantziaren deskripzioa",
"ui_saved": "{0} gordeta",
"admin_nameHint": "cryptpad.org-eko instantzia publikoen zerrendan instantzia honen bistaratze-izena",
"admin_nameTitle": "Instantziaren izena",
"admin_archiveNote": "Oharra"
} }

@ -72,7 +72,6 @@
"exportButton": "Vie", "exportButton": "Vie",
"exportButtonTitle": "Vie padi paikalliseen tiedostoon", "exportButtonTitle": "Vie padi paikalliseen tiedostoon",
"exportPrompt": "Minkä nimen haluat antaa tiedostollesi?", "exportPrompt": "Minkä nimen haluat antaa tiedostollesi?",
"changeNamePrompt": "Vaihda nimeäsi (jätä tyhjäksi ollaksesi anonyymi): ",
"user_rename": "Vaihda näyttönimeä", "user_rename": "Vaihda näyttönimeä",
"user_displayName": "Näyttönimi", "user_displayName": "Näyttönimi",
"user_accountName": "Käyttäjätilin nimi", "user_accountName": "Käyttäjätilin nimi",
@ -209,7 +208,6 @@
"canvas_currentBrush": "Nykyinen sivellin", "canvas_currentBrush": "Nykyinen sivellin",
"canvas_imageEmbed": "Upota kuva tietokoneeltasi", "canvas_imageEmbed": "Upota kuva tietokoneeltasi",
"profileButton": "Profiili", "profileButton": "Profiili",
"profile_avatar": "Avatar-kuva",
"profile_upload": " Lataa uusi avatar-kuva", "profile_upload": " Lataa uusi avatar-kuva",
"profile_uploadSizeError": "Virhe: Avatar-kuvasi täytyy olla pienempi kuin {0}", "profile_uploadSizeError": "Virhe: Avatar-kuvasi täytyy olla pienempi kuin {0}",
"profile_uploadTypeError": "Virhe: Avatar-kuvasi tiedostotyyppi ei ole sallittu. Sallittuja tiedostotyyppejä ovat: {0}", "profile_uploadTypeError": "Virhe: Avatar-kuvasi tiedostotyyppi ei ole sallittu. Sallittuja tiedostotyyppejä ovat: {0}",
@ -252,7 +250,7 @@
"fm_newButtonTitle": "Luo uusi asiakirja tai kansio, tuo tiedosto nykyiseen kansioon.", "fm_newButtonTitle": "Luo uusi asiakirja tai kansio, tuo tiedosto nykyiseen kansioon.",
"fm_newFolder": "Uusi kansio", "fm_newFolder": "Uusi kansio",
"fm_newFile": "Uusi padi", "fm_newFile": "Uusi padi",
"fm_morePads": "Lisää", "ui_more": "Lisää",
"fm_folder": "Kansio", "fm_folder": "Kansio",
"fm_sharedFolder": "Jaettu kansio", "fm_sharedFolder": "Jaettu kansio",
"fm_folderName": "Kansion nimi", "fm_folderName": "Kansion nimi",
@ -1009,7 +1007,6 @@
"admin_getlimitsTitle": "Muokatut tallennustilakiintiöt", "admin_getlimitsTitle": "Muokatut tallennustilakiintiöt",
"admin_limit": "Nykyinen rajoitus: {0}", "admin_limit": "Nykyinen rajoitus: {0}",
"admin_setlimitButton": "Aseta rajoitus", "admin_setlimitButton": "Aseta rajoitus",
"admin_registrationButton": "Sulje",
"admin_registrationTitle": "Sulje rekisteröityminen", "admin_registrationTitle": "Sulje rekisteröityminen",
"admin_registrationHint": "Älä salli uusien käyttäjien rekisteröitymistä", "admin_registrationHint": "Älä salli uusien käyttäjien rekisteröitymistä",
"snapshots_cantMake": "Tilannevedoksen luominen epäonnistui. Yhteytesi on katkennut.", "snapshots_cantMake": "Tilannevedoksen luominen epäonnistui. Yhteytesi on katkennut.",

@ -72,7 +72,6 @@
"exportButton": "Exporter", "exportButton": "Exporter",
"exportButtonTitle": "Exporter ce document vers un fichier local", "exportButtonTitle": "Exporter ce document vers un fichier local",
"exportPrompt": "Comment souhaitez-vous nommer ce fichier ?", "exportPrompt": "Comment souhaitez-vous nommer ce fichier ?",
"changeNamePrompt": "Changer votre nom (laisser vide pour rester anonyme) : ",
"user_rename": "Changer le nom affiché", "user_rename": "Changer le nom affiché",
"user_displayName": "Nom affiché", "user_displayName": "Nom affiché",
"user_accountName": "Nom d'utilisateur", "user_accountName": "Nom d'utilisateur",
@ -209,7 +208,6 @@
"canvas_currentBrush": "Pinceau actuel", "canvas_currentBrush": "Pinceau actuel",
"canvas_imageEmbed": "Intégrer une image de votre ordinateur", "canvas_imageEmbed": "Intégrer une image de votre ordinateur",
"profileButton": "Profil", "profileButton": "Profil",
"profile_avatar": "Avatar",
"profile_upload": " Importer un nouvel avatar", "profile_upload": " Importer un nouvel avatar",
"profile_uploadSizeError": "Erreur : votre avatar doit avoir une taille inférieure à {0}", "profile_uploadSizeError": "Erreur : votre avatar doit avoir une taille inférieure à {0}",
"profile_uploadTypeError": "Erreur : le format de votre avatar est invalide. Les formats autorisés sont : {0}", "profile_uploadTypeError": "Erreur : le format de votre avatar est invalide. Les formats autorisés sont : {0}",
@ -542,7 +540,7 @@
"four04_pageNotFound": "Nous n'avons pas trouvé la page que vous cherchez.", "four04_pageNotFound": "Nous n'avons pas trouvé la page que vous cherchez.",
"header_logoTitle": "Retourner vers votre CryptDrive", "header_logoTitle": "Retourner vers votre CryptDrive",
"header_homeTitle": "Aller sur la page d'accueil", "header_homeTitle": "Aller sur la page d'accueil",
"help_genericMore": "Découvrez toutes les fonctionalités de CryptPad en lisant la <a>Documentation</a>.", "help_genericMore": "Découvrez toutes les fonctionnalités de CryptPad en lisant la <a>Documentation</a>.",
"edit": "éditer", "edit": "éditer",
"view": "voir", "view": "voir",
"feedback_about": "Si vous lisez ceci, vous vous demandez probablement pourquoi CryptPad envoie des requêtes vers des pages web quand vous réalisez certaines actions.", "feedback_about": "Si vous lisez ceci, vous vous demandez probablement pourquoi CryptPad envoie des requêtes vers des pages web quand vous réalisez certaines actions.",
@ -721,7 +719,7 @@
"requestEdit_accepted": "{1} vous a accordé les droits d'édition du document <b>{0}</b>", "requestEdit_accepted": "{1} vous a accordé les droits d'édition du document <b>{0}</b>",
"requestEdit_sent": "Demande envoyée", "requestEdit_sent": "Demande envoyée",
"properties_unknownUser": "{0} utilisateur(s) inconnu(s)", "properties_unknownUser": "{0} utilisateur(s) inconnu(s)",
"fm_morePads": "Plus", "ui_more": "Plus",
"uploadFolder_modal_title": "Options d'importation du dossier", "uploadFolder_modal_title": "Options d'importation du dossier",
"uploadFolder_modal_filesPassword": "Mot de passe des fichiers", "uploadFolder_modal_filesPassword": "Mot de passe des fichiers",
"uploadFolder_modal_owner": "Être propriétaire des fichiers", "uploadFolder_modal_owner": "Être propriétaire des fichiers",
@ -1034,7 +1032,6 @@
"admin_setlimitButton": "Fixer la limite", "admin_setlimitButton": "Fixer la limite",
"admin_defaultlimitTitle": "Limite de stockage (Mo)", "admin_defaultlimitTitle": "Limite de stockage (Mo)",
"admin_defaultlimitHint": "Limite de stockage maximum pour le CryptDrive (utilisateurs et équipes) si aucune règle spéciale n'est appliquée", "admin_defaultlimitHint": "Limite de stockage maximum pour le CryptDrive (utilisateurs et équipes) si aucune règle spéciale n'est appliquée",
"admin_registrationButton": "Fermer",
"admin_registrationTitle": "Fermer l'enregistrement", "admin_registrationTitle": "Fermer l'enregistrement",
"admin_registrationHint": "Ne pas autoriser l'enregistrement de nouveaux utilisateurs", "admin_registrationHint": "Ne pas autoriser l'enregistrement de nouveaux utilisateurs",
"snapshots_cantMake": "La capture n'a pas pu être effectuée. Vous êtes déconnecté.", "snapshots_cantMake": "La capture n'a pas pu être effectuée. Vous êtes déconnecté.",
@ -1226,7 +1223,6 @@
"register_registrationIsClosed": "Les inscriptions sont fermées.", "register_registrationIsClosed": "Les inscriptions sont fermées.",
"oo_conversionSupport": "Votre navigateur ne gère pas la conversion vers et depuis les formats office. Il est recommandé d'utiliser une version récente de Firefox ou Chrome.", "oo_conversionSupport": "Votre navigateur ne gère pas la conversion vers et depuis les formats office. Il est recommandé d'utiliser une version récente de Firefox ou Chrome.",
"oo_importBin": "Cliquez sur OK pour importer au format .bin interne à CryptPad.", "oo_importBin": "Cliquez sur OK pour importer au format .bin interne à CryptPad.",
"admin_emailButton": "Valider",
"admin_supportPrivButton": "Afficher la clé", "admin_supportPrivButton": "Afficher la clé",
"admin_supportPrivHint": "Afficher la clé privée et la transmettre aux autres administrateurs pour leur permettre de consulter les tickets de support. Un formulaire permettant de saisir cette clé est affiché dans leur espace d'administration.", "admin_supportPrivHint": "Afficher la clé privée et la transmettre aux autres administrateurs pour leur permettre de consulter les tickets de support. Un formulaire permettant de saisir cette clé est affiché dans leur espace d'administration.",
"admin_supportInitGenerate": "Créer les clés", "admin_supportInitGenerate": "Créer les clés",
@ -1300,7 +1296,6 @@
"form_answerAnonymous": "Réponse anonyme le {0}", "form_answerAnonymous": "Réponse anonyme le {0}",
"form_showSummary": "Voir le résumé", "form_showSummary": "Voir le résumé",
"form_showIndividual": "Voir les réponses individuelles", "form_showIndividual": "Voir les réponses individuelles",
"form_form": "Formulaire",
"form_editor": "Éditeur", "form_editor": "Éditeur",
"form_results_empty": "Il n'y a pas de réponses", "form_results_empty": "Il n'y a pas de réponses",
"form_results": "Réponses ({0})", "form_results": "Réponses ({0})",
@ -1309,13 +1304,11 @@
"form_updateWarning": "Mettre à jour avec erreurs", "form_updateWarning": "Mettre à jour avec erreurs",
"form_submitWarning": "Envoyer avec erreurs", "form_submitWarning": "Envoyer avec erreurs",
"form_delete": "Supprimer", "form_delete": "Supprimer",
"form_sent": "Votre réponse a été envoyée",
"form_reset": "Effacer", "form_reset": "Effacer",
"form_update": "Mettre à jour", "form_update": "Mettre à jour",
"form_submit": "Envoyer", "form_submit": "Envoyer",
"form_maxLength": "Limite de caractères : {0}/{1}", "form_maxLength": "Limite de caractères : {0}/{1}",
"form_maxOptions": "{0} réponse(s) maximum", "form_maxOptions": "{0} réponse(s) maximum",
"form_duplicates": "Les doublons ont été supprimés",
"form_description_default": "Votre texte ici", "form_description_default": "Votre texte ici",
"form_type_page": "Saut de page", "form_type_page": "Saut de page",
"form_type_md": "Description", "form_type_md": "Description",
@ -1468,5 +1461,7 @@
"support_debuggingDataHint": "Les informations suivantes sont jointes aux tickets de support que vous envoyez. Aucune de ces données ne permettent aux administrateurs d'accéder à vos documents ou de les déchiffrer. Ces informations sont chiffrées de telle sorte que seuls les administrateurs peuvent les lire.", "support_debuggingDataHint": "Les informations suivantes sont jointes aux tickets de support que vous envoyez. Aucune de ces données ne permettent aux administrateurs d'accéder à vos documents ou de les déchiffrer. Ces informations sont chiffrées de telle sorte que seuls les administrateurs peuvent les lire.",
"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.",
"ui_experimental": "Cette fonctionnalité est considérée comme expérimentale."
} }

@ -69,7 +69,6 @@
"exportButton": "Esporta", "exportButton": "Esporta",
"exportButtonTitle": "Esporta questo pad in un file locale", "exportButtonTitle": "Esporta questo pad in un file locale",
"exportPrompt": "Che nome vuoi dare al tuo file?", "exportPrompt": "Che nome vuoi dare al tuo file?",
"changeNamePrompt": "Cambia il tuo nome (lascia vuoto per essere anonimo): ",
"user_rename": "Cambia il nome mostrato", "user_rename": "Cambia il nome mostrato",
"user_displayName": "Nome mostrato", "user_displayName": "Nome mostrato",
"user_accountName": "Nome dell'account", "user_accountName": "Nome dell'account",
@ -205,7 +204,6 @@
"canvas_currentBrush": "Pennello attuale", "canvas_currentBrush": "Pennello attuale",
"canvas_imageEmbed": "Incorpora un'immagine dal tuo computer", "canvas_imageEmbed": "Incorpora un'immagine dal tuo computer",
"profileButton": "Profilo", "profileButton": "Profilo",
"profile_avatar": "Avatar",
"profile_upload": " Carica un nuovo avatar", "profile_upload": " Carica un nuovo avatar",
"profile_uploadSizeError": "Errore: il tuo avatar deve essere più piccolo di {0}", "profile_uploadSizeError": "Errore: il tuo avatar deve essere più piccolo di {0}",
"profile_uploadTypeError": "Errore: il formato del tuo avatar non è consentito. I formati consentiti sono: {0}", "profile_uploadTypeError": "Errore: il formato del tuo avatar non è consentito. I formati consentiti sono: {0}",
@ -392,7 +390,7 @@
"padNotPinnedVariable": "Questo pad scadrà dopo {4} giorni di inattività, {0}accedi{1} o {2}registrati{3} per conservarlo.", "padNotPinnedVariable": "Questo pad scadrà dopo {4} giorni di inattività, {0}accedi{1} o {2}registrati{3} per conservarlo.",
"storageStatus": "Spazio:<br><b>{0}</b> utilizzato su <b>{1}</b>", "storageStatus": "Spazio:<br><b>{0}</b> utilizzato su <b>{1}</b>",
"uploadFolderButton": "Carica cartella", "uploadFolderButton": "Carica cartella",
"fm_morePads": "Altro", "ui_more": "Altro",
"fc_color": "Cambia colore", "fc_color": "Cambia colore",
"fc_expandAll": "Espandi tutto", "fc_expandAll": "Espandi tutto",
"fc_collapseAll": "Comprimi tutto", "fc_collapseAll": "Comprimi tutto",
@ -947,7 +945,6 @@
"admin_invalKey": "Chiave pubblica non valida", "admin_invalKey": "Chiave pubblica non valida",
"admin_limitSetNote": "Nota", "admin_limitSetNote": "Nota",
"admin_limitMB": "Limite (in MB)", "admin_limitMB": "Limite (in MB)",
"admin_registrationButton": "Chiudi",
"oo_version": "Versione: ", "oo_version": "Versione: ",
"snapshots_delete": "Elimina", "snapshots_delete": "Elimina",
"snapshots_close": "Chiudi", "snapshots_close": "Chiudi",

@ -157,7 +157,6 @@
"profile_editDescription": "説明文を編集", "profile_editDescription": "説明文を編集",
"profile_addDescription": "説明文を追加", "profile_addDescription": "説明文を追加",
"profileButton": "プロフィール", "profileButton": "プロフィール",
"profile_avatar": "アバター",
"profile_upload": " 新しいアバターをアップロード", "profile_upload": " 新しいアバターをアップロード",
"teams_table_generic_edit": "編集: フォルダとドキュメントの作成、変更、削除が可能。", "teams_table_generic_edit": "編集: フォルダとドキュメントの作成、変更、削除が可能。",
"teams_table_generic_view": "表示: フォルダとドキュメントへのアクセス(閲覧のみ)。", "teams_table_generic_view": "表示: フォルダとドキュメントへのアクセス(閲覧のみ)。",
@ -354,7 +353,6 @@
"admin_cat_quota": "ユーザーストレージ", "admin_cat_quota": "ユーザーストレージ",
"admin_invalKey": "無効な公開鍵です", "admin_invalKey": "無効な公開鍵です",
"admin_limitPlan": "プラン: {0}", "admin_limitPlan": "プラン: {0}",
"admin_registrationButton": "閉じる",
"oo_version": "バージョン: ", "oo_version": "バージョン: ",
"snapshots_delete": "削除", "snapshots_delete": "削除",
"snapshots_close": "閉じる", "snapshots_close": "閉じる",
@ -551,10 +549,8 @@
"form_input_ph_email": "email@example.com", "form_input_ph_email": "email@example.com",
"form_backButton": "戻る", "form_backButton": "戻る",
"form_viewButton": "表示", "form_viewButton": "表示",
"form_form": "フォーム",
"form_editor": "エディタ", "form_editor": "エディタ",
"form_delete": "削除", "form_delete": "削除",
"form_sent": "回答を送信しました",
"form_reset": "リセット", "form_reset": "リセット",
"form_update": "更新", "form_update": "更新",
"form_submit": "送信", "form_submit": "送信",
@ -655,7 +651,6 @@
"kanban_color": "色", "kanban_color": "色",
"calendar_import_temp": "このカレンダーをインポート", "calendar_import_temp": "このカレンダーをインポート",
"settings_deleteContinue": "アカウントを削除", "settings_deleteContinue": "アカウントを削除",
"admin_emailButton": "更新",
"form_editBlock": "編集", "form_editBlock": "編集",
"fm_deleteOwnedPads": "これらのドキュメントをサーバーから完全に削除してよろしいですか?", "fm_deleteOwnedPads": "これらのドキュメントをサーバーから完全に削除してよろしいですか?",
"fm_deleteOwnedPad": "このドキュメントをサーバーから完全に削除してよろしいですか?", "fm_deleteOwnedPad": "このドキュメントをサーバーから完全に削除してよろしいですか?",
@ -901,7 +896,6 @@
"form_results": "回答({0}", "form_results": "回答({0}",
"form_answered": "このフォームは回答済みです", "form_answered": "このフォームは回答済みです",
"form_cantFindAnswers": "このフォームの既存の回答を取得できません。", "form_cantFindAnswers": "このフォームの既存の回答を取得できません。",
"form_duplicates": "重複する項目が削除されました",
"form_editType": "オプションの種類", "form_editType": "オプションの種類",
"share_formView": "参加者", "share_formView": "参加者",
"admin_supportPrivHint": "他の管理者がサポートチケットを表示するのに必要な秘密鍵を表示します。この秘密鍵を入力するフォームは、管理パネルに表示されます。", "admin_supportPrivHint": "他の管理者がサポートチケットを表示するのに必要な秘密鍵を表示します。この秘密鍵を入力するフォームは、管理パネルに表示されます。",
@ -949,9 +943,8 @@
"fm_info_recent": "あなたか共同編集者が最近開いた、もしくは編集したドキュメントの一覧です。", "fm_info_recent": "あなたか共同編集者が最近開いた、もしくは編集したドキュメントの一覧です。",
"fm_info_template": "これらのドキュメントはテンプレートとして保存されています。以下のテンプレートを使って、新しいドキュメントを作成することができます。", "fm_info_template": "これらのドキュメントはテンプレートとして保存されています。以下のテンプレートを使って、新しいドキュメントを作成することができます。",
"fm_categoryError": "選択したカテゴリーが開けません。ルートを表示します。", "fm_categoryError": "選択したカテゴリーが開けません。ルートを表示します。",
"fm_morePads": "さらに表示", "ui_more": "さらに表示",
"oo_reconnect": "サーバーの接続が回復しました。OKをクリックして再読み込みを行い、編集を継続してください。", "oo_reconnect": "サーバーの接続が回復しました。OKをクリックして再読み込みを行い、編集を継続してください。",
"changeNamePrompt": "名前を変更(匿名で利用する場合は空欄): ",
"form_text_text": "テキスト", "form_text_text": "テキスト",
"form_poll_time": "時", "form_poll_time": "時",
"form_poll_day": "日", "form_poll_day": "日",
@ -1415,7 +1408,7 @@
"fc_openIn": "{0}で開く", "fc_openIn": "{0}で開く",
"creation_new": "新しい{0}", "creation_new": "新しい{0}",
"form_conditional": "このセクションを表示する条件:", "form_conditional": "このセクションを表示する条件:",
"premiumAccess": "{0}の定期利用ユーザーであるため、このアプリケーションで新しいドキュメントを作成することができます。このアプリケーションは試験段階のため、重要なデータの取り扱いにはご注意ください。", "premiumAccess": "あなたは{0}の定期利用ユーザーであるため、このアプリケーションで新しいドキュメントを作成することができます。このアプリケーションは試験段階です。重要なデータの取り扱いにはご注意ください。",
"premiumOnly": "このアプリケーションによる新しいドキュメントの作成は、現在、{0}の定額利用ユーザーに限定されています。これはテストを目的とした、試験段階のアプリケーションです。今後{0}の全ユーザー向けに公開される予定となっています。", "premiumOnly": "このアプリケーションによる新しいドキュメントの作成は、現在、{0}の定額利用ユーザーに限定されています。これはテストを目的とした、試験段階のアプリケーションです。今後{0}の全ユーザー向けに公開される予定となっています。",
"form_answerChoice": "このフォームへの回答方法を選択してください:", "form_answerChoice": "このフォームへの回答方法を選択してください:",
"form_exportSheet": "シートにエクスポート", "form_exportSheet": "シートにエクスポート",
@ -1449,5 +1442,24 @@
"admin_descriptionHint": "cryptpad.orgにある公開インスタンスのリストに表示される、このインスタンスの説明文", "admin_descriptionHint": "cryptpad.orgにある公開インスタンスのリストに表示される、このインスタンスの説明文",
"admin_descriptionTitle": "インスタンスの説明文", "admin_descriptionTitle": "インスタンスの説明文",
"admin_nameHint": "cryptpad.orgにある公開インスタンスのリストに表示される、このインスタンスの名称", "admin_nameHint": "cryptpad.orgにある公開インスタンスのリストに表示される、このインスタンスの名称",
"admin_nameTitle": "インスタンス名" "admin_nameTitle": "インスタンス名",
"error_incorrectAccess": "このページは{0}からのみアクセスできます。",
"error_embeddingDisabledSpecific": "このCryptPadのアプリケーションでは埋め込みが許可されていません。",
"error_embeddingDisabled": "このCryptPadのインスタンスでは埋め込みが許可されていません",
"admin_enableembedsHint": "このインスタンスのドキュメントやメディアファイルを他のウェブサイトに埋め込むことを許可します。この設定を有効にすると、共有メニューで「埋め込み」のオプションが表示されます。セキュリティー上の観点から、OnlyOfficeを使用するアプリケーションスプレッドシート、ドキュメント、プレゼンテーションの埋め込みを許可することはできません。",
"admin_enableembedsTitle": "サーバー外での埋め込みを許可",
"ui_ms": "ミリ秒",
"admin_setDuration": "時間を設定",
"admin_bytesWrittenHint": "ディスクパフォーマンスの計測を有効にした場合は、以下で実行する時間を設定できます。",
"admin_bytesWrittenTitle": "ディスクパフォーマンスの計測時間",
"admin_enableDiskMeasurementsHint": "有効にすると、JSON APIのエンドポイントが<code>/api/profiling</code>にて公開されます。以下の時間設定にあわせて、ディスクのI/Oを継続的に計測します。この設定はサーバーのパフォーマンスに影響を与えるおそれがあり、また、機密情報が漏洩する可能性があります。この設定の意味を理解していない場合は、この設定を無効にしておくことを推奨します。",
"admin_enableDiskMeasurementsTitle": "ディスクのパフォーマンスを計測",
"admin_infoNotice2": "詳細は「ネットワーク」タブからご確認ください。",
"admin_infoNotice1": "以下にインスタンスの説明文を記入してください。今後のCryptPadのバージョンで、インスタンスのフロントページに表示されます。CryptPadの公開インスタンスのリストに表示する場合にのみ、サーバーのテレメトリーの一部として送信されます。",
"admin_reviewCheckupNotice": "<a>チェック</a>用のページを確認して、このインスタンスが正しく設定されていることをご確認ください。",
"admin_cacheEvictionRequired": "サーバーは新しい設定でアップデートされました。<b>キャッシュの消去</b>ボタンを使用して、この変更を全てのユーザーに適用してください。",
"fivehundred_internalServerError": "内部サーバーエラー",
"support_debuggingDataHint": "作成するサポートチケットには以下の情報が含まれます。その情報から管理者があなたの暗号化されたドキュメントにアクセスすることはできません。以下の情報は、管理者だけが読めるように暗号化されます。",
"support_debuggingDataTitle": "アカウントのデバッグ用の情報",
"support_cat_debugging": "デバッグデータ"
} }

@ -74,7 +74,6 @@
"exportButton": "Export", "exportButton": "Export",
"exportButtonTitle": "Export this document to a local file", "exportButtonTitle": "Export this document to a local file",
"exportPrompt": "What would you like to name your file?", "exportPrompt": "What would you like to name your file?",
"changeNamePrompt": "Change your name (leave empty to be anonymous): ",
"user_rename": "Change display name", "user_rename": "Change display name",
"user_displayName": "Display name", "user_displayName": "Display name",
"user_accountName": "Account name", "user_accountName": "Account name",
@ -211,7 +210,6 @@
"canvas_currentBrush": "Current brush", "canvas_currentBrush": "Current brush",
"canvas_imageEmbed": "Embed an image from your computer", "canvas_imageEmbed": "Embed an image from your computer",
"profileButton": "Profile", "profileButton": "Profile",
"profile_avatar": "Avatar",
"profile_upload": " Upload a new avatar", "profile_upload": " Upload a new avatar",
"profile_uploadSizeError": "Error: your avatar must be smaller than {0}", "profile_uploadSizeError": "Error: your avatar must be smaller than {0}",
"profile_uploadTypeError": "Error: your avatar type is not allowed. Allowed types are: {0}", "profile_uploadTypeError": "Error: your avatar type is not allowed. Allowed types are: {0}",
@ -254,7 +252,7 @@
"fm_newButtonTitle": "Create a new document or folder, import a file in the current folder.", "fm_newButtonTitle": "Create a new document or folder, import a file in the current folder.",
"fm_newFolder": "New folder", "fm_newFolder": "New folder",
"fm_newFile": "New document", "fm_newFile": "New document",
"fm_morePads": "More", "ui_more": "More",
"fm_folder": "Folder", "fm_folder": "Folder",
"fm_sharedFolder": "Shared folder", "fm_sharedFolder": "Shared folder",
"fm_folderName": "Folder name", "fm_folderName": "Folder name",
@ -1023,7 +1021,6 @@
"snapshots_cantMake": "The snapshot could not be created. You are disconnected.", "snapshots_cantMake": "The snapshot could not be created. You are disconnected.",
"admin_registrationHint": "Do not allow any new users to register", "admin_registrationHint": "Do not allow any new users to register",
"admin_registrationTitle": "Close registration", "admin_registrationTitle": "Close registration",
"admin_registrationButton": "Close",
"admin_defaultlimitHint": "Maximum storage limit for CryptDrives (users and teams) when no custom rule is applied", "admin_defaultlimitHint": "Maximum storage limit for CryptDrives (users and teams) when no custom rule is applied",
"admin_defaultlimitTitle": "Storage limit (MB)", "admin_defaultlimitTitle": "Storage limit (MB)",
"admin_setlimitButton": "Set limit", "admin_setlimitButton": "Set limit",
@ -1232,7 +1229,6 @@
"admin_supportInitGenerate": "Generate support keys", "admin_supportInitGenerate": "Generate support keys",
"admin_supportPrivHint": "Display the private key that other admins will need to view support tickets. A form to enter this key will be displayed on their admin panel.", "admin_supportPrivHint": "Display the private key that other admins will need to view support tickets. A form to enter this key will be displayed on their admin panel.",
"admin_supportPrivButton": "Show key", "admin_supportPrivButton": "Show key",
"admin_emailButton": "Update",
"share_formEdit": "Author", "share_formEdit": "Author",
"share_formAuditor": "Auditor", "share_formAuditor": "Auditor",
"share_formView": "Participant", "share_formView": "Participant",
@ -1265,13 +1261,11 @@
"form_type_md": "Description", "form_type_md": "Description",
"form_type_page": "Page break", "form_type_page": "Page break",
"form_description_default": "Your text here", "form_description_default": "Your text here",
"form_duplicates": "Duplicate entries have been removed",
"form_maxOptions": "maximum {0} answer(s)", "form_maxOptions": "maximum {0} answer(s)",
"form_maxLength": "Character limit: {0}/{1}", "form_maxLength": "Character limit: {0}/{1}",
"form_submit": "Submit", "form_submit": "Submit",
"form_update": "Update", "form_update": "Update",
"form_reset": "Reset", "form_reset": "Reset",
"form_sent": "Your response was submitted",
"form_delete": "Delete", "form_delete": "Delete",
"form_submitWarning": "Submit anyway", "form_submitWarning": "Submit anyway",
"form_updateWarning": "Update anyway", "form_updateWarning": "Update anyway",
@ -1280,7 +1274,6 @@
"form_results": "Responses ({0})", "form_results": "Responses ({0})",
"form_results_empty": "There are no responses", "form_results_empty": "There are no responses",
"form_editor": "Editor", "form_editor": "Editor",
"form_form": "Form",
"form_showIndividual": "Show individual answers", "form_showIndividual": "Show individual answers",
"form_showSummary": "Show summary", "form_showSummary": "Show summary",
"form_answerAnonymous": "Anonymous answer on {0}", "form_answerAnonymous": "Anonymous answer on {0}",
@ -1468,5 +1461,7 @@
"admin_enableembedsHint": "Allow documents and media from this instance to be embedded on other websites. This will add an \"Embed\" option to the Share menu. For security reasons applications that use OnlyOffice (Sheets, Document, Presentation) cannot be embedded even if this setting is active.", "admin_enableembedsHint": "Allow documents and media from this instance to be embedded on other websites. This will add an \"Embed\" option to the Share menu. For security reasons applications that use OnlyOffice (Sheets, Document, Presentation) cannot be embedded even if this setting is active.",
"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.",
"ui_experimental": "This feature is considered experimental."
} }

@ -29,7 +29,6 @@
"user_accountName": "Paskyros vardas", "user_accountName": "Paskyros vardas",
"user_displayName": "Rodomas pavadinimas", "user_displayName": "Rodomas pavadinimas",
"user_rename": "Keisti rodomą pavadinimą", "user_rename": "Keisti rodomą pavadinimą",
"changeNamePrompt": "Pakeiskite savo vardą (palikite tuščią, kad būtų anoniminis): ",
"exportPrompt": "Kaip norėtumėte pavadinti savo failą?", "exportPrompt": "Kaip norėtumėte pavadinti savo failą?",
"exportButtonTitle": "Eksportuokite padą į vietinį failą", "exportButtonTitle": "Eksportuokite padą į vietinį failą",
"exportButton": "Eksportuoti", "exportButton": "Eksportuoti",

@ -66,7 +66,6 @@
"exportButton": "Eksporter", "exportButton": "Eksporter",
"exportButtonTitle": "Eksporter dette dokumentet til en lokal fil på datamaskinen din", "exportButtonTitle": "Eksporter dette dokumentet til en lokal fil på datamaskinen din",
"exportPrompt": "Hva vil du kalle filen?", "exportPrompt": "Hva vil du kalle filen?",
"changeNamePrompt": "Endre navnet ditt (eller la det stå tomt for å være anonym): ",
"user_rename": "Endre visningsnavnet ditt", "user_rename": "Endre visningsnavnet ditt",
"user_displayName": "Visningsnavn", "user_displayName": "Visningsnavn",
"user_accountName": "Kontonavn", "user_accountName": "Kontonavn",
@ -400,10 +399,9 @@
"fm_viewGridButton": "Rutenettsvisning", "fm_viewGridButton": "Rutenettsvisning",
"fm_viewListButton": "Listevisning", "fm_viewListButton": "Listevisning",
"fm_type": "Type", "fm_type": "Type",
"fm_morePads": "Mer", "ui_more": "Mer",
"contacts_padTitle": "Sludring", "contacts_padTitle": "Sludring",
"contacts_send": "Send", "contacts_send": "Send",
"profile_avatar": "Avatar",
"canvas_delete": "Slett utvalg", "canvas_delete": "Slett utvalg",
"canvas_clear": "Tøm", "canvas_clear": "Tøm",
"poll_comment_placeholder": "Din kommentar", "poll_comment_placeholder": "Din kommentar",
@ -491,7 +489,6 @@
"admin_getlimitsTitle": "Egendefinerte grenser", "admin_getlimitsTitle": "Egendefinerte grenser",
"admin_limit": "Nåværende grense: {0}", "admin_limit": "Nåværende grense: {0}",
"admin_setlimitButton": "Sett grense", "admin_setlimitButton": "Sett grense",
"admin_registrationButton": "Lukk",
"oo_version": "Versjon: ", "oo_version": "Versjon: ",
"snapshots_delete": "Slett", "snapshots_delete": "Slett",
"snapshots_close": "Lukk", "snapshots_close": "Lukk",

@ -107,7 +107,6 @@
"user_accountName": "Accountnaam", "user_accountName": "Accountnaam",
"user_displayName": "Weergavenaam", "user_displayName": "Weergavenaam",
"user_rename": "Weergavenaam wijzigen", "user_rename": "Weergavenaam wijzigen",
"changeNamePrompt": "Wijzig uw naam (vul niks in om anoniem te blijven): ",
"exportPrompt": "Hoe wilt u uw bestand noemen?", "exportPrompt": "Hoe wilt u uw bestand noemen?",
"exportButtonTitle": "Exporteer een werkomgeving naar een lokaal bestand", "exportButtonTitle": "Exporteer een werkomgeving naar een lokaal bestand",
"exportButton": "Exporteren", "exportButton": "Exporteren",
@ -214,7 +213,6 @@
"canvas_currentBrush": "Huidige borstel", "canvas_currentBrush": "Huidige borstel",
"canvas_imageEmbed": "Plaats een afbeelding van uw computer", "canvas_imageEmbed": "Plaats een afbeelding van uw computer",
"profileButton": "Profiel", "profileButton": "Profiel",
"profile_avatar": "Avatar",
"profile_upload": " Een nieuw avatar uploaden", "profile_upload": " Een nieuw avatar uploaden",
"profile_uploadSizeError": "Foutmelding: uw avatar moet kleiner zijn dan {0}", "profile_uploadSizeError": "Foutmelding: uw avatar moet kleiner zijn dan {0}",
"profile_uploadTypeError": "Foutmelding: uw avatartype is niet toegestaan. Toegestane types zijn: {0}", "profile_uploadTypeError": "Foutmelding: uw avatartype is niet toegestaan. Toegestane types zijn: {0}",
@ -301,7 +299,7 @@
"fc_hashtag": "Markeringen", "fc_hashtag": "Markeringen",
"kanban_done": "Gedaan", "kanban_done": "Gedaan",
"poll_comment_remove": "Verwijder dit commentaar", "poll_comment_remove": "Verwijder dit commentaar",
"fm_morePads": "Meer", "ui_more": "Meer",
"settings_publicSigningKey": "Openbare Ondertekeningssleutel", "settings_publicSigningKey": "Openbare Ondertekeningssleutel",
"settings_anonymous": "U bent niet ingelogd. Instellingen hier gelden alleen voor deze browser.", "settings_anonymous": "U bent niet ingelogd. Instellingen hier gelden alleen voor deze browser.",
"settings_deleted": "Uw account is nu verwijderd. Klik OK om naar de startpagina te gaan.", "settings_deleted": "Uw account is nu verwijderd. Klik OK om naar de startpagina te gaan.",

@ -31,7 +31,6 @@
"importButtonTitle": "Importuj dokument z lokalnego pliku", "importButtonTitle": "Importuj dokument z lokalnego pliku",
"exportButtonTitle": "Eksportuj ten dokument do lokalnego pliku", "exportButtonTitle": "Eksportuj ten dokument do lokalnego pliku",
"exportPrompt": "Jak chciałbyś nazwać swój plik?", "exportPrompt": "Jak chciałbyś nazwać swój plik?",
"changeNamePrompt": "Zmień swoją nazwę (Pozostaw puste, by być anonimowym): ",
"clickToEdit": "Naciśnij by edytować", "clickToEdit": "Naciśnij by edytować",
"forgetPrompt": "Klikając OK przeniesiesz ten dokument do kosza. Jesteś tego pewien?", "forgetPrompt": "Klikając OK przeniesiesz ten dokument do kosza. Jesteś tego pewien?",
"shareButton": "Udostępnij", "shareButton": "Udostępnij",
@ -156,7 +155,7 @@
"fm_sharedFolder": "Folder współdzielony", "fm_sharedFolder": "Folder współdzielony",
"fm_folderName": "Nazwa folderu", "fm_folderName": "Nazwa folderu",
"fm_folder": "Folder", "fm_folder": "Folder",
"fm_morePads": "Więcej", "ui_more": "Więcej",
"fm_newFile": "Nowy dokument", "fm_newFile": "Nowy dokument",
"fm_newButtonTitle": "Utwórz nowy dokument lub folder, zaimportuj plik do bieżącego folderu.", "fm_newButtonTitle": "Utwórz nowy dokument lub folder, zaimportuj plik do bieżącego folderu.",
"fm_newFolder": "Nowy folder", "fm_newFolder": "Nowy folder",
@ -198,7 +197,6 @@
"profile_error": "Błąd podczas tworzenia profilu: {0}", "profile_error": "Błąd podczas tworzenia profilu: {0}",
"profile_uploadTypeError": "Błąd: typ Twojego avatara jest niedozwolony. Dozwolone typy to: {0}", "profile_uploadTypeError": "Błąd: typ Twojego avatara jest niedozwolony. Dozwolone typy to: {0}",
"profile_uploadSizeError": "Błąd: Twój awatar musi być mniejszy niż {0}", "profile_uploadSizeError": "Błąd: Twój awatar musi być mniejszy niż {0}",
"profile_avatar": "Awatar",
"profile_upload": " Prześlij nowy awatar", "profile_upload": " Prześlij nowy awatar",
"profileButton": "Profil", "profileButton": "Profil",
"canvas_imageEmbed": "Dołącz obraz z komputera", "canvas_imageEmbed": "Dołącz obraz z komputera",
@ -852,13 +850,11 @@
"form_clear": "Wyczyść", "form_clear": "Wyczyść",
"form_submitWarning": "Przekaż mimo wszystko", "form_submitWarning": "Przekaż mimo wszystko",
"form_delete": "Usuń", "form_delete": "Usuń",
"form_sent": "Twoja odpowiedź została przesłana",
"form_reset": "Zresetuj", "form_reset": "Zresetuj",
"form_update": "Zaktualizuj", "form_update": "Zaktualizuj",
"form_submit": "Prześlij", "form_submit": "Prześlij",
"form_maxLength": "Limit znaków: {0}/{1}", "form_maxLength": "Limit znaków: {0}/{1}",
"form_maxOptions": "maksymalnie {0} odpowiedzi", "form_maxOptions": "maksymalnie {0} odpowiedzi",
"form_duplicates": "Duplikaty zostały usunięte",
"form_description_default": "Twój tekst tutaj", "form_description_default": "Twój tekst tutaj",
"form_type_page": "Podział strony", "form_type_page": "Podział strony",
"form_type_md": "Opis", "form_type_md": "Opis",
@ -891,7 +887,6 @@
"share_formView": "Uczestnik", "share_formView": "Uczestnik",
"share_formAuditor": "Audytor", "share_formAuditor": "Audytor",
"share_formEdit": "Autor", "share_formEdit": "Autor",
"admin_emailButton": "Zaktualizuj",
"admin_supportPrivButton": "Pokaż klucz", "admin_supportPrivButton": "Pokaż klucz",
"admin_supportPrivHint": "Wyświetl klucz prywatny, który będzie potrzebny innym administratorom do przeglądania zgłoszeń. Formularz do wprowadzenia tego klucza będzie wyświetlany w ich panelu administracyjnym.", "admin_supportPrivHint": "Wyświetl klucz prywatny, który będzie potrzebny innym administratorom do przeglądania zgłoszeń. Formularz do wprowadzenia tego klucza będzie wyświetlany w ich panelu administracyjnym.",
"admin_supportInitGenerate": "Generowanie kluczy wsparcia", "admin_supportInitGenerate": "Generowanie kluczy wsparcia",
@ -1100,7 +1095,6 @@
"admin_setlimitButton": "Ustaw limit", "admin_setlimitButton": "Ustaw limit",
"admin_defaultlimitHint": "Maksymalny limit przechowywania danych w CryptDrive (użytkownicy i zespoły), gdy nie jest stosowana żadna reguła własna", "admin_defaultlimitHint": "Maksymalny limit przechowywania danych w CryptDrive (użytkownicy i zespoły), gdy nie jest stosowana żadna reguła własna",
"admin_defaultlimitTitle": "Maksymalny limit przechowywania danych (MB)", "admin_defaultlimitTitle": "Maksymalny limit przechowywania danych (MB)",
"admin_registrationButton": "Zamknij",
"admin_registrationTitle": "Zamknij rejestrację", "admin_registrationTitle": "Zamknij rejestrację",
"admin_registrationHint": "Nie zezwalaj nowym użytkownikom na rejestrację", "admin_registrationHint": "Nie zezwalaj nowym użytkownikom na rejestrację",
"snapshots_cantMake": "Nie można utworzyć zrzutu obrazu. Jesteś rozłączony.", "snapshots_cantMake": "Nie można utworzyć zrzutu obrazu. Jesteś rozłączony.",
@ -1247,7 +1241,6 @@
"form_answerAnonymous": "Odpowiedź anonimowa w dniu {0}", "form_answerAnonymous": "Odpowiedź anonimowa w dniu {0}",
"form_showSummary": "Pokaż podsumowanie", "form_showSummary": "Pokaż podsumowanie",
"form_showIndividual": "Pokaż poszczególne odpowiedzi", "form_showIndividual": "Pokaż poszczególne odpowiedzi",
"form_form": "Formularz",
"form_editor": "Edytor", "form_editor": "Edytor",
"form_results_empty": "Nie ma żadnych odpowiedzi", "form_results_empty": "Nie ma żadnych odpowiedzi",
"form_results": "Odpowiedzi ({0})", "form_results": "Odpowiedzi ({0})",

@ -24,7 +24,7 @@
"loading": "Carregando...", "loading": "Carregando...",
"error": "Erro", "error": "Erro",
"saved": "Salvo", "saved": "Salvo",
"deleted": "Deletado", "deleted": "Apagado",
"disconnected": "Desconectado", "disconnected": "Desconectado",
"synchronizing": "Sincronizando", "synchronizing": "Sincronizando",
"reconnecting": "Reconectando", "reconnecting": "Reconectando",
@ -45,11 +45,10 @@
"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?",
"changeNamePrompt": "Mude seu nome (deixe em branco para se manter anônimo): ",
"user_rename": "Mudar nome de exibição", "user_rename": "Mudar nome de exibição",
"user_displayName": "Nome visível", "user_displayName": "Nome visível",
"user_accountName": "Nome da Conta", "user_accountName": "Nome da Conta",
@ -111,7 +110,7 @@
"fm_searchName": "Busca", "fm_searchName": "Busca",
"fm_searchPlaceholder": "Buscar...", "fm_searchPlaceholder": "Buscar...",
"fm_newButton": "Novo", "fm_newButton": "Novo",
"fm_newButtonTitle": "Criar um novo documento ou pasta, importe um arquivo na pasta atual.", "fm_newButtonTitle": "Criar novo documento ou pasta, importe um arquivo na pasta atual.",
"fm_newFolder": "Novo diretório", "fm_newFolder": "Novo diretório",
"fm_newFile": "Novo documento", "fm_newFile": "Novo documento",
"fm_folder": "Diretório", "fm_folder": "Diretório",
@ -177,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",
@ -197,7 +196,7 @@
"settings_logoutEverywhereConfirm": "Are you sure? You will need to log in with all your devices.", "settings_logoutEverywhereConfirm": "Are you sure? You will need to log in with all your devices.",
"upload_serverError": "Server Error: unable to upload your file at this time.", "upload_serverError": "Server Error: unable to upload your file at this time.",
"upload_uploadPending": "You already have an upload in progress. Cancel it and upload your new file?", "upload_uploadPending": "You already have an upload in progress. Cancel it and upload your new file?",
"upload_success": "Your file ({0}) has been successfully uploaded and added to your drive.", "upload_success": "Seu arquivo ({0}) foi enviado com sucesso e adicionado ao seu disco.",
"upload_notEnoughSpace": "There is not enough space for this file in your CryptDrive.", "upload_notEnoughSpace": "There is not enough space for this file in your CryptDrive.",
"upload_tooLarge": "Este arquivo excede o tamanho máximo permitido de envio para sua conta.", "upload_tooLarge": "Este arquivo excede o tamanho máximo permitido de envio para sua conta.",
"upload_choose": "Choose a file", "upload_choose": "Choose a file",
@ -222,8 +221,8 @@
"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 convidados. 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.",
"inactiveError": "Este documento foi apagado devido à inatividade. Pressione Esc para criar um novo documento.", "inactiveError": "Este documento foi apagado devido à inatividade. Pressione Esc para criar um novo documento.",
@ -231,23 +230,23 @@
"invalidHashError": "O documento requerido por você, apresenta uma URL inválida.", "invalidHashError": "O documento requerido por você, apresenta uma URL inválida.",
"errorCopy": " Você pode continuar usando esta versão em modo somente leitura pressionando <em>Esc</em>.", "errorCopy": " Você pode continuar usando esta versão em modo somente leitura pressionando <em>Esc</em>.",
"errorRedirectToHome": "Tecle <em>Esc</em> para ser redirecionado para seu CryptDrive.", "errorRedirectToHome": "Tecle <em>Esc</em> para ser redirecionado para seu CryptDrive.",
"newVersionError": "Uma nova versão do CryptPad está disponível. <br><a href='#'>Recarregued</a> para usar a nova versão, ou tecle Esc para acessar seu conteúdo em <b>modo offline</b>.", "newVersionError": "Uma nova versão do CryptPad está disponível. <br><a href='#'>Recarregue</a> para usar a nova versão, ou tecle Esc para acessar seu conteúdo em <b>modo offline</b>.",
"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",
"errorState": "Erro crítico: {0}", "errorState": "Erro crítico: {0}",
"userlist_offline": "Você está desconectado, a lista do usuário não está disponível.", "userlist_offline": "Você está desconectado, a lista do usuário não está disponível.",
"pinLimitReachedAlertNoAccounts": "Você alcançou 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": "Deletar", "forgetButton": "Apagar",
"userListButton": "Lista de usuário", "userListButton": "Lista de usuários",
"chatButton": "Bate papo", "chatButton": "Bate-papo",
"userAccountButton": "Menu do usuário", "userAccountButton": "Menu do usuário",
"uploadButton": "Enviar arquivos", "uploadButton": "Enviar arquivos",
"uploadFolderButton": "Enviar pasta", "uploadFolderButton": "Enviar pasta",
@ -301,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",
@ -310,7 +309,7 @@
"poll_comment_list": "Comentários", "poll_comment_list": "Comentários",
"poll_comment_add": "Adicione um comentário", "poll_comment_add": "Adicione um comentário",
"poll_comment_submit": "Enviar", "poll_comment_submit": "Enviar",
"poll_comment_remove": "Delete este comentário", "poll_comment_remove": "Remover este comentário",
"poll_comment_placeholder": "Seu comentário", "poll_comment_placeholder": "Seu comentário",
"poll_comment_disabled": "Publique esta enquete usando o botão ✓ para habilitar os comentários.", "poll_comment_disabled": "Publique esta enquete usando o botão ✓ para habilitar os comentários.",
"oo_reconnect": "A conexão com o servidor voltou. Clique OK para recarregar e continuar a edição.", "oo_reconnect": "A conexão com o servidor voltou. Clique OK para recarregar e continuar a edição.",
@ -320,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.",
@ -352,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,11 +369,11 @@
"settings_resetTipsAction": "Redefinir", "settings_resetTipsAction": "Redefinir",
"settings_resetButton": "Remover", "settings_resetButton": "Remover",
"settings_resetNewTitle": "Limpar o CryptDrive", "settings_resetNewTitle": "Limpar o CryptDrive",
"settings_exportErrorOther": "Ocorreu um erro enquanto tentava exportar este 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...",
@ -389,7 +388,7 @@
"settings_backupHint2": "Baixe todos os documentos no seu disco. Os documentos serão baixados em formatos legíveis por outras aplicações quando o formato estiver disponível. Quando um formato não estiver disponível, os documentos serão baixados em um formato legível pelo CryptPad.", "settings_backupHint2": "Baixe todos os documentos no seu disco. Os documentos serão baixados em formatos legíveis por outras aplicações quando o formato estiver disponível. Quando um formato não estiver disponível, os documentos serão baixados em um formato legível pelo CryptPad.",
"settings_backupHint": "Faça cópia de segurança ou restaure o conteúdo do seu CryptDrive. Não estará incluso o conteúdo de seus documentos, somente as chaves para acessá-los.", "settings_backupHint": "Faça cópia de segurança ou restaure o conteúdo do seu CryptDrive. Não estará incluso o conteúdo de seus documentos, somente as chaves para acessá-los.",
"settings_backupCategory": "Cópia de segurança", "settings_backupCategory": "Cópia de segurança",
"settings_cat_subscription": "Subscrição", "settings_cat_subscription": "Assinatura",
"settings_cat_pad": "Rich text", "settings_cat_pad": "Rich text",
"settings_cat_code": "Código", "settings_cat_code": "Código",
"settings_cat_cursor": "Cursor", "settings_cat_cursor": "Cursor",
@ -408,16 +407,16 @@
"fc_expandAll": "Expandir todos", "fc_expandAll": "Expandir todos",
"fc_color": "Alterar cor", "fc_color": "Alterar cor",
"fc_newsharedfolder": "Nova pasta compartilhada", "fc_newsharedfolder": "Nova pasta compartilhada",
"fm_passwordProtected": "Senha protegida", "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 usuários", "fm_tags_used": "Número de usos",
"fm_tags_name": "Nome da etiqueta", "fm_tags_name": "Nome da etiqueta",
"fm_deletedPads": "Estes documentos não mais existem no servidor, eles foram removidos do seu CryptDrive: {0}", "fm_deletedPads": "Estes documentos não mais existem no servidor, eles foram removidos do seu CryptDrive: {0}",
"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": "Apaga 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,12 +424,12 @@
"fm_viewListButton": "Visualização em lista", "fm_viewListButton": "Visualização em lista",
"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 pessoas que colaboraram.", "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",
"fm_morePads": "Mais", "ui_more": "Mais",
"fm_sharedFolderName": "Pasta compartilhada", "fm_sharedFolderName": "Pasta compartilhada",
"fm_tagsName": "Etiquetas", "fm_tagsName": "Etiquetas",
"fm_ownedPadsName": "Adquirido", "fm_ownedPadsName": "Adquirido",
@ -448,7 +447,7 @@
"contacts_info1": "Estes são seus contatos. Daqui você pode:", "contacts_info1": "Estes são seus contatos. Daqui você pode:",
"contacts_padTitle": "Bate-papo", "contacts_padTitle": "Bate-papo",
"contacts_warning": "Tudo que for digitado aqui é persistente e disponível para todos os atuais e futuros usuários deste documento. Tenha cuidado com as informações sensíveis!", "contacts_warning": "Tudo que for digitado aqui é persistente e disponível para todos os atuais e futuros usuários deste documento. Tenha cuidado com as informações sensíveis!",
"contacts_typeHere": "Digite a mensagem aqui...", "contacts_typeHere": "Digite uma mensagem aqui...",
"contacts_confirmRemove": "Tem certeza de que quer remover <em>{0}</em> dos seus contatos?", "contacts_confirmRemove": "Tem certeza de que quer remover <em>{0}</em> dos seus contatos?",
"contacts_remove": "Remover este contato", "contacts_remove": "Remover este contato",
"contacts_send": "Enviar", "contacts_send": "Enviar",
@ -463,7 +462,6 @@
"profile_uploadTypeError": "Erro: seu avatar tem um tipo não permitido. Tipos permitidos são: {0}", "profile_uploadTypeError": "Erro: seu avatar tem um tipo não permitido. Tipos permitidos são: {0}",
"profile_uploadSizeError": "Erro: seu avatar precisa ser menor que {0}", "profile_uploadSizeError": "Erro: seu avatar precisa ser menor que {0}",
"profile_upload": " Envie um novo avatar", "profile_upload": " Envie um novo avatar",
"profile_avatar": "Avatar",
"profileButton": "Perfil", "profileButton": "Perfil",
"canvas_imageEmbed": "Incorpore uma imagem do seu computador", "canvas_imageEmbed": "Incorpore uma imagem do seu computador",
"canvas_currentBrush": "Pincel atual", "canvas_currentBrush": "Pincel atual",
@ -948,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",
@ -1005,7 +1003,7 @@
"support_cat_bug": "Relatório de erro", "support_cat_bug": "Relatório de erro",
"support_cat_data": "Perda de conteúdo", "support_cat_data": "Perda de conteúdo",
"support_cat_account": "Conta do usuário", "support_cat_account": "Conta do usuário",
"info_privacyFlavour": "Nossa <a>política de privacidade</a> descreve como tratamos seus dados.", "info_privacyFlavour": "Nossa <a>política de privacidade</a> descreve como tratamos seus dados",
"user_about": "Sobre o CryptPad", "user_about": "Sobre o CryptPad",
"support_languagesPreamble": "A equipe de suporte fala os seguintes idiomas:", "support_languagesPreamble": "A equipe de suporte fala os seguintes idiomas:",
"slide_textCol": "Cor do texto", "slide_textCol": "Cor do texto",
@ -1039,7 +1037,6 @@
"fm_sort": "Ordenar", "fm_sort": "Ordenar",
"comments_error": "Não é possível acrescentar um comentário aqui", "comments_error": "Não é possível acrescentar um comentário aqui",
"settings_padNotifCheckbox": "Desabilitar notificações de comentários", "settings_padNotifCheckbox": "Desabilitar notificações de comentários",
"admin_registrationButton": "Fechar",
"earlyAccessBlocked": "Esta aplicação ainda não está disponível nesta instância", "earlyAccessBlocked": "Esta aplicação ainda não está disponível nesta instância",
"download_step3": "Convertendo...", "download_step3": "Convertendo...",
"form_conditional_hint": "Para tornar esta seção condicional, por favor, acrescente uma pergunta de escolha ou caixa de seleção acima", "form_conditional_hint": "Para tornar esta seção condicional, por favor, acrescente uma pergunta de escolha ou caixa de seleção acima",
@ -1105,7 +1102,6 @@
"form_viewButton": "Visualizar", "form_viewButton": "Visualizar",
"form_showSummary": "Mostrar resumo", "form_showSummary": "Mostrar resumo",
"form_showIndividual": "Mostrar respostas individuais", "form_showIndividual": "Mostrar respostas individuais",
"form_form": "Formulário",
"form_editor": "Editor", "form_editor": "Editor",
"form_results_empty": "Não há respostas", "form_results_empty": "Não há respostas",
"form_answered": "Você já respondeu a este formulário", "form_answered": "Você já respondeu a este formulário",
@ -1223,7 +1219,6 @@
"form_cantFindAnswers": "Não é possível recuperar suas respostas para este formulário.", "form_cantFindAnswers": "Não é possível recuperar suas respostas para este formulário.",
"form_submitWarning": "Submeter assim mesmo", "form_submitWarning": "Submeter assim mesmo",
"form_delete": "Excluir", "form_delete": "Excluir",
"form_sent": "Sua resposta foi enviada",
"form_reset": "Redefinir", "form_reset": "Redefinir",
"form_type_poll": "Enquete", "form_type_poll": "Enquete",
"form_type_radio": "Escolha", "form_type_radio": "Escolha",
@ -1283,13 +1278,11 @@
"share_formView": "Participante", "share_formView": "Participante",
"share_formAuditor": "Auditor", "share_formAuditor": "Auditor",
"share_formEdit": "Autor", "share_formEdit": "Autor",
"admin_emailButton": "Atualizar",
"fc_openIn": "Abrir em {0}", "fc_openIn": "Abrir em {0}",
"creation_new": "Novo {0}", "creation_new": "Novo {0}",
"settings_safeLinkDefault": "Os Links Seguros estão agora ligados por padrão. Por favor, use o menu <i></i> <b>Share</b> para copiar os links em vez da barra de endereços do seu navegador.", "settings_safeLinkDefault": "Os Links Seguros estão agora ligados por padrão. Por favor, use o menu <i></i> <b>Share</b> para copiar os links em vez da barra de endereços do seu navegador.",
"form_conditional_addAnd": "Adicionar condição E", "form_conditional_addAnd": "Adicionar condição E",
"form_submit": "Enviar", "form_submit": "Enviar",
"form_duplicates": "As entradas duplicadas foram removidas",
"form_description_default": "Seu texto aqui", "form_description_default": "Seu texto aqui",
"form_type_md": "Descrição", "form_type_md": "Descrição",
"form_sort_hint": "Por favor, arraste estes itens da maior (1) para a menor ({0}) preferência.", "form_sort_hint": "Por favor, arraste estes itens da maior (1) para a menor ({0}) preferência.",

@ -26,7 +26,6 @@
"importButtonTitle": "Importă un pad dintr-un fișier local", "importButtonTitle": "Importă un pad dintr-un fișier local",
"exportButtonTitle": "Exportă pad-ul acesta către un fișier local", "exportButtonTitle": "Exportă pad-ul acesta către un fișier local",
"exportPrompt": "Cum ai vrea să îți denumești fișierul?", "exportPrompt": "Cum ai vrea să îți denumești fișierul?",
"changeNamePrompt": "Schimbă-ți numele (lasă necompletat dacă vrei să fii anonim): ",
"user_rename": "Schimbă numele afișat", "user_rename": "Schimbă numele afișat",
"user_displayName": "Nume afișat", "user_displayName": "Nume afișat",
"user_accountName": "Nume cont", "user_accountName": "Nume cont",
@ -316,7 +315,6 @@
"canvas_saveToDrive": "Salvează această imagine ca fișier în CryptDrive", "canvas_saveToDrive": "Salvează această imagine ca fișier în CryptDrive",
"canvas_imageEmbed": "Încorporează o imagine din computer", "canvas_imageEmbed": "Încorporează o imagine din computer",
"profileButton": "Profil", "profileButton": "Profil",
"profile_avatar": "Avatar",
"profile_upload": " Încarcă un nou avatar", "profile_upload": " Încarcă un nou avatar",
"profile_uploadSizeError": "Eroare: avatarul tău trebuie să fie mai mic de {0}", "profile_uploadSizeError": "Eroare: avatarul tău trebuie să fie mai mic de {0}",
"profile_uploadTypeError": "Eroare: tipul de avatar ales nu este permis. Tipurile permise sunt: {0}", "profile_uploadTypeError": "Eroare: tipul de avatar ales nu este permis. Tipurile permise sunt: {0}",
@ -433,7 +431,7 @@
"register_emailWarning0": "Se pare că ai adăugat adresa ta de e-mail în loc de numele tău de utilizator.", "register_emailWarning0": "Se pare că ai adăugat adresa ta de e-mail în loc de numele tău de utilizator.",
"fc_expandAll": "Extinde", "fc_expandAll": "Extinde",
"fc_color": "Schimbă culoarea", "fc_color": "Schimbă culoarea",
"fm_morePads": "Mai mult", "ui_more": "Mai mult",
"uploadFolderButton": "Încarcă dosar", "uploadFolderButton": "Încarcă dosar",
"storageStatus": "Capacitate de stocare:<br><b>{0}</b> utilizat din <b>{1}</b>", "storageStatus": "Capacitate de stocare:<br><b>{0}</b> utilizat din <b>{1}</b>",
"fc_collapseAll": "Restrânge", "fc_collapseAll": "Restrânge",

@ -72,7 +72,6 @@
"exportButton": "Экспорт", "exportButton": "Экспорт",
"exportButtonTitle": "Экспорт этого документа в локальный файл", "exportButtonTitle": "Экспорт этого документа в локальный файл",
"exportPrompt": "Как вы хотите назвать ваш файл?", "exportPrompt": "Как вы хотите назвать ваш файл?",
"changeNamePrompt": "Измените ваше имя (или ничего не пишите, оставайтесь анонимом): ",
"user_rename": "Изменить отображаемое имя", "user_rename": "Изменить отображаемое имя",
"user_displayName": "Показать имя", "user_displayName": "Показать имя",
"user_accountName": "Имя аккаунта", "user_accountName": "Имя аккаунта",
@ -196,7 +195,6 @@
"canvas_saveToDrive": "Сохраните это изображение как файл в своём Хранилище", "canvas_saveToDrive": "Сохраните это изображение как файл в своём Хранилище",
"canvas_currentBrush": "Текущая кисть", "canvas_currentBrush": "Текущая кисть",
"profileButton": "Профиль", "profileButton": "Профиль",
"profile_avatar": "Аватар",
"profile_upload": " Загрузить новый аватар", "profile_upload": " Загрузить новый аватар",
"profile_uploadSizeError": "Ошибка: ваш аватар должен быть меньше, чем {0}", "profile_uploadSizeError": "Ошибка: ваш аватар должен быть меньше, чем {0}",
"profile_viewMyProfile": "Посмотреть мой профиль", "profile_viewMyProfile": "Посмотреть мой профиль",
@ -435,7 +433,7 @@
"settings_logoutEverywhereTitle": "Выйти везде", "settings_logoutEverywhereTitle": "Выйти везде",
"settings_logoutEverywhereButton": "Выйти", "settings_logoutEverywhereButton": "Выйти",
"settings_anonymous": "Вы не вошли в систему. Настройки будут специфичны для данного браузера.", "settings_anonymous": "Вы не вошли в систему. Настройки будут специфичны для данного браузера.",
"fm_morePads": "Ещё", "ui_more": "Ещё",
"uploadFolderButton": "Загрузить папку", "uploadFolderButton": "Загрузить папку",
"storageStatus": "Хранилище:<br><b>{0}</b> использовано из <b>{1}</b>", "storageStatus": "Хранилище:<br><b>{0}</b> использовано из <b>{1}</b>",
"padNotPinnedVariable": "Этот документ исчезнет через {4} дней неактивности, {0}войдите{1} или {2}зарегистируйтесь{3} чтобы сохранить его.", "padNotPinnedVariable": "Этот документ исчезнет через {4} дней неактивности, {0}войдите{1} или {2}зарегистируйтесь{3} чтобы сохранить его.",
@ -531,7 +529,6 @@
"snapshots_notFound": "Данного снимка больше не существует, потому что история документа была удалена.", "snapshots_notFound": "Данного снимка больше не существует, потому что история документа была удалена.",
"snapshots_cantMake": "Невозможно создать снимок. Потеряно соединение.", "snapshots_cantMake": "Невозможно создать снимок. Потеряно соединение.",
"admin_registrationTitle": "Закрыть регистрацию", "admin_registrationTitle": "Закрыть регистрацию",
"admin_registrationButton": "Закрыть",
"admin_defaultlimitTitle": "Лимит хранилища (МБ)", "admin_defaultlimitTitle": "Лимит хранилища (МБ)",
"admin_setlimitButton": "Задать лимит", "admin_setlimitButton": "Задать лимит",
"admin_limit": "Текущий лимит: {0}", "admin_limit": "Текущий лимит: {0}",
@ -1305,7 +1302,6 @@
"form_answerAnonymous": "Анонимный ответ на {0}", "form_answerAnonymous": "Анонимный ответ на {0}",
"form_showSummary": "Показать сводку", "form_showSummary": "Показать сводку",
"form_showIndividual": "Показать индивидуальные ответы", "form_showIndividual": "Показать индивидуальные ответы",
"form_form": "Форма",
"form_editor": "Редактор", "form_editor": "Редактор",
"form_results_empty": "Нет ответов", "form_results_empty": "Нет ответов",
"form_results": "Ответов ({0})", "form_results": "Ответов ({0})",
@ -1314,13 +1310,11 @@
"form_updateWarning": "Всё равно обновить", "form_updateWarning": "Всё равно обновить",
"form_submitWarning": "Всё равно отправить", "form_submitWarning": "Всё равно отправить",
"form_delete": "Удалить", "form_delete": "Удалить",
"form_sent": "Ваш ответ был отправлен",
"form_reset": "Сброс", "form_reset": "Сброс",
"form_update": "Обновить", "form_update": "Обновить",
"form_submit": "Отправить", "form_submit": "Отправить",
"form_maxLength": "Максимальное количество символов: {0}/{1}", "form_maxLength": "Максимальное количество символов: {0}/{1}",
"form_maxOptions": "максимум {0} ответ(ов)", "form_maxOptions": "максимум {0} ответ(ов)",
"form_duplicates": "Повторяющиеся записи были удалены",
"form_description_default": "Ваш текст здесь", "form_description_default": "Ваш текст здесь",
"form_type_page": "Разрыв страницы", "form_type_page": "Разрыв страницы",
"form_type_md": "Описание", "form_type_md": "Описание",
@ -1353,7 +1347,6 @@
"share_formView": "Участник", "share_formView": "Участник",
"share_formAuditor": "Аудитор", "share_formAuditor": "Аудитор",
"share_formEdit": "Автор", "share_formEdit": "Автор",
"admin_emailButton": "Обновить",
"admin_supportPrivButton": "Показать ключ", "admin_supportPrivButton": "Показать ключ",
"admin_supportPrivHint": "Показать закрытый ключ, который понадобится другим администраторам для просмотра заявок в службу поддержки. Форма для ввода этого ключа будет отображаться на их панели администратора.", "admin_supportPrivHint": "Показать закрытый ключ, который понадобится другим администраторам для просмотра заявок в службу поддержки. Форма для ввода этого ключа будет отображаться на их панели администратора.",
"admin_supportInitGenerate": "Сгенерируйте ключи техподдержки", "admin_supportInitGenerate": "Сгенерируйте ключи техподдержки",

@ -85,7 +85,6 @@
"user_accountName": "Kontonamn", "user_accountName": "Kontonamn",
"user_displayName": "Visningsnamn", "user_displayName": "Visningsnamn",
"user_rename": "Ändra ditt visningsnamn", "user_rename": "Ändra ditt visningsnamn",
"changeNamePrompt": "Ändra ditt namn (lämna tomt för att vara anonym): ",
"exportPrompt": "Vad vill du kalla din fil?", "exportPrompt": "Vad vill du kalla din fil?",
"exportButtonTitle": "Exportera detta dokument till en fil på din enhet", "exportButtonTitle": "Exportera detta dokument till en fil på din enhet",
"exportButton": "Exportera", "exportButton": "Exportera",

@ -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": "Палітра"
}

@ -49,7 +49,6 @@
"importButtonTitle": "从本地文件导入文档", "importButtonTitle": "从本地文件导入文档",
"exportButtonTitle": "将此文档导出到本地文件", "exportButtonTitle": "将此文档导出到本地文件",
"exportPrompt": "你希望怎麼命名你的檔案?", "exportPrompt": "你希望怎麼命名你的檔案?",
"changeNamePrompt": "更換你的名稱(若留空白則會成為無名氏): ",
"user_rename": "改變顯示名稱", "user_rename": "改變顯示名稱",
"user_displayName": "顯示名稱", "user_displayName": "顯示名稱",
"user_accountName": "帳號名稱", "user_accountName": "帳號名稱",
@ -263,7 +262,7 @@
"fm_deleteOwnedPads": "您确定要永久销毁这些文档吗?", "fm_deleteOwnedPads": "您确定要永久销毁这些文档吗?",
"fm_deleteOwnedPad": "您确定要永久销毁此文档吗?", "fm_deleteOwnedPad": "您确定要永久销毁此文档吗?",
"fm_sharedFolder": "共享文件夹", "fm_sharedFolder": "共享文件夹",
"fm_morePads": "更多的", "ui_more": "更多的",
"fm_sharedFolderName": "共享文件夹", "fm_sharedFolderName": "共享文件夹",
"fm_tagsName": "标签", "fm_tagsName": "标签",
"fm_ownedPadsName": "拥有的", "fm_ownedPadsName": "拥有的",
@ -296,7 +295,6 @@
"profile_uploadTypeError": "错误:您的头像类型不被允许。 允许的类型是:{0}", "profile_uploadTypeError": "错误:您的头像类型不被允许。 允许的类型是:{0}",
"profile_uploadSizeError": "错误:您的头像必须小于 {0}", "profile_uploadSizeError": "错误:您的头像必须小于 {0}",
"profile_upload": " 上传新头像", "profile_upload": " 上传新头像",
"profile_avatar": "头像",
"profileButton": "个人资料", "profileButton": "个人资料",
"canvas_currentBrush": "当前画笔", "canvas_currentBrush": "当前画笔",
"canvas_imageEmbed": "从你的计算机嵌入图像", "canvas_imageEmbed": "从你的计算机嵌入图像",

@ -2,7 +2,7 @@
<html class="cp-app-noscroll"> <html class="cp-app-noscroll">
<head> <head>
<meta content="text/html; charset=utf-8" http-equiv="content-type"/> <meta content="text/html; charset=utf-8" http-equiv="content-type"/>
<script async data-bootload="/contacts/inner.js" data-main="/common/sframe-boot.js?ver=1.8" src="/bower_components/requirejs/require.js?ver=2.3.5"></script> <script async data-bootload="/contacts/inner.js" data-main="/common/sframe-boot.js?ver=1.11" src="/bower_components/requirejs/require.js?ver=2.3.5"></script>
<style> <style>
.loading-hidden { display: none; } .loading-hidden { display: none; }
</style> </style>

@ -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);
}
});*/
}); });
}); });

@ -2,7 +2,7 @@
<html class="cp-app-noscroll"> <html class="cp-app-noscroll">
<head> <head>
<meta content="text/html; charset=utf-8" http-equiv="content-type"/> <meta content="text/html; charset=utf-8" http-equiv="content-type"/>
<script async data-bootload="/convert/inner.js" data-main="/common/sframe-boot.js?ver=1.8" src="/bower_components/requirejs/require.js?ver=2.3.5"></script> <script async data-bootload="/convert/inner.js" data-main="/common/sframe-boot.js?ver=1.11" src="/bower_components/requirejs/require.js?ver=2.3.5"></script>
<style> <style>
.loading-hidden { display: none; } .loading-hidden { display: none; }
</style> </style>

@ -2,7 +2,7 @@
<html class="cp-app-noscroll"> <html class="cp-app-noscroll">
<head> <head>
<meta content="text/html; charset=utf-8" http-equiv="content-type"/> <meta content="text/html; charset=utf-8" http-equiv="content-type"/>
<script async data-bootload="/debug/inner.js" data-main="/common/sframe-boot.js?ver=1.8" src="/bower_components/requirejs/require.js?ver=2.3.5"></script> <script async data-bootload="/debug/inner.js" data-main="/common/sframe-boot.js?ver=1.11" src="/bower_components/requirejs/require.js?ver=2.3.5"></script>
<style> <style>
.loading-hidden { display: none; } .loading-hidden { display: none; }
#editor1 { display: none; } #editor1 { display: none; }

@ -2,7 +2,7 @@
<html class="cp-app-noscroll"> <html class="cp-app-noscroll">
<head> <head>
<meta content="text/html; charset=utf-8" http-equiv="content-type"/> <meta content="text/html; charset=utf-8" http-equiv="content-type"/>
<script async data-bootload="/common/onlyoffice/inner.js" data-main="/common/sframe-boot.js?ver=1.8" src="/bower_components/requirejs/require.js?ver=2.3.5"></script> <script async data-bootload="/common/onlyoffice/inner.js" data-main="/common/sframe-boot.js?ver=1.11" src="/bower_components/requirejs/require.js?ver=2.3.5"></script>
<style> <style>
.loading-hidden { display: none; } .loading-hidden { display: none; }
</style> </style>

@ -2,7 +2,7 @@
<html class="cp-app-noscroll"> <html class="cp-app-noscroll">
<head> <head>
<meta content="text/html; charset=utf-8" http-equiv="content-type"/> <meta content="text/html; charset=utf-8" http-equiv="content-type"/>
<script async data-bootload="/drive/inner.js" data-main="/common/sframe-boot.js?ver=1.8" src="/bower_components/requirejs/require.js?ver=2.3.5"></script> <script async data-bootload="/drive/inner.js" data-main="/common/sframe-boot.js?ver=1.11" src="/bower_components/requirejs/require.js?ver=2.3.5"></script>
<style> <style>
.loading-hidden { display: none; } .loading-hidden { display: none; }
#editor1 { display: none; } #editor1 { display: none; }

@ -2,7 +2,7 @@
<html class="cp-app-noscroll"> <html class="cp-app-noscroll">
<head> <head>
<meta content="text/html; charset=utf-8" http-equiv="content-type"/> <meta content="text/html; charset=utf-8" http-equiv="content-type"/>
<script async data-bootload="/file/inner.js" data-main="/common/sframe-boot.js?ver=1.8" src="/bower_components/requirejs/require.js?ver=2.3.5"></script> <script async data-bootload="/file/inner.js" data-main="/common/sframe-boot.js?ver=1.11" src="/bower_components/requirejs/require.js?ver=2.3.5"></script>
<style> <style>
.loading-hidden { display: none; } .loading-hidden { display: none; }
#editor1 { display: none; } #editor1 { display: none; }

@ -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();

@ -713,6 +713,9 @@
color: #777; color: #777;
} }
} }
.cp-markdown-toolbar {
display: block;
}
} }
.cp-form-edit-block { .cp-form-edit-block {
&.cp-no-sortable { &.cp-no-sortable {

@ -2,7 +2,7 @@
<html class="cp-app-noscroll"> <html class="cp-app-noscroll">
<head> <head>
<meta content="text/html; charset=utf-8" http-equiv="content-type"/> <meta content="text/html; charset=utf-8" http-equiv="content-type"/>
<script async data-bootload="/form/inner.js" data-main="/common/sframe-boot.js?ver=1.8" src="/bower_components/requirejs/require.js?ver=2.3.5"></script> <script async data-bootload="/form/inner.js" data-main="/common/sframe-boot.js?ver=1.11" src="/bower_components/requirejs/require.js?ver=2.3.5"></script>
<style> <style>
.loading-hidden { display: none; } .loading-hidden { display: none; }
</style> </style>

@ -67,6 +67,9 @@
display: flex; display: flex;
flex-flow: column; flex-flow: column;
overflow: hidden; overflow: hidden;
.cp-markdown-toolbar {
display: block;
}
} }
#cp-kanban-edit-conflicts { #cp-kanban-edit-conflicts {
padding: 5px; padding: 5px;

@ -3,7 +3,7 @@
<head> <head>
<meta content="text/html; charset=utf-8" http-equiv="content-type" /> <meta content="text/html; charset=utf-8" http-equiv="content-type" />
<script async data-bootload="/kanban/inner.js" data-main="/common/sframe-boot.js?ver=1.8" src="/bower_components/requirejs/require.js?ver=2.3.5"></script> <script async data-bootload="/kanban/inner.js" data-main="/common/sframe-boot.js?ver=1.11" src="/bower_components/requirejs/require.js?ver=2.3.5"></script>
<style> <style>
.loading-hidden { .loading-hidden {
display: none; display: none;

@ -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

@ -2,7 +2,7 @@
<html class="cp-app-noscroll"> <html class="cp-app-noscroll">
<head> <head>
<meta content="text/html; charset=utf-8" http-equiv="content-type"/> <meta content="text/html; charset=utf-8" http-equiv="content-type"/>
<script async data-bootload="/notifications/inner.js" data-main="/common/sframe-boot.js?ver=1.8" src="/bower_components/requirejs/require.js?ver=2.3.5"></script> <script async data-bootload="/notifications/inner.js" data-main="/common/sframe-boot.js?ver=1.11" src="/bower_components/requirejs/require.js?ver=2.3.5"></script>
<style> <style>
.loading-hidden { display: none; } .loading-hidden { display: none; }
</style> </style>

@ -2,7 +2,7 @@
<html class="cp-app-noscroll cp-app-print"> <html class="cp-app-noscroll cp-app-print">
<head> <head>
<meta content="text/html; charset=utf-8" http-equiv="content-type"/> <meta content="text/html; charset=utf-8" http-equiv="content-type"/>
<script async data-bootload="/pad/inner.js" data-main="/common/sframe-boot.js?ver=1.8" src="/bower_components/requirejs/require.js?ver=2.3.5"></script> <script async data-bootload="/pad/inner.js" data-main="/common/sframe-boot.js?ver=1.11" src="/bower_components/requirejs/require.js?ver=2.3.5"></script>
<style> <style>
html, body { html, body {
margin: 0px; margin: 0px;

@ -3,7 +3,7 @@
<head> <head>
<meta name="viewport" content="width=device-width, initial-scale=1.0"/> <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
<meta content="text/html; charset=utf-8" http-equiv="content-type"/> <meta content="text/html; charset=utf-8" http-equiv="content-type"/>
<script async data-bootload="/poll/inner.js" data-main="/common/sframe-boot.js?ver=1.8" src="/bower_components/requirejs/require.js?ver=2.3.5"></script> <script async data-bootload="/poll/inner.js" data-main="/common/sframe-boot.js?ver=1.11" src="/bower_components/requirejs/require.js?ver=2.3.5"></script>
<style> <style>
.loading-hidden { display: none; } .loading-hidden { display: none; }
#editor1 { display: none; } #editor1 { display: none; }

@ -2,7 +2,7 @@
<html class="cp-app-noscroll"> <html class="cp-app-noscroll">
<head> <head>
<meta content="text/html; charset=utf-8" http-equiv="content-type"/> <meta content="text/html; charset=utf-8" http-equiv="content-type"/>
<script async data-bootload="/common/onlyoffice/inner.js" data-main="/common/sframe-boot.js?ver=1.8" src="/bower_components/requirejs/require.js?ver=2.3.5"></script> <script async data-bootload="/common/onlyoffice/inner.js" data-main="/common/sframe-boot.js?ver=1.11" src="/bower_components/requirejs/require.js?ver=2.3.5"></script>
<style> <style>
.loading-hidden { display: none; } .loading-hidden { display: none; }
</style> </style>

@ -2,7 +2,7 @@
<html class="cp-app-noscroll"> <html class="cp-app-noscroll">
<head> <head>
<meta content="text/html; charset=utf-8" http-equiv="content-type"/> <meta content="text/html; charset=utf-8" http-equiv="content-type"/>
<script async data-bootload="/profile/inner.js" data-main="/common/sframe-boot.js?ver=1.8" src="/bower_components/requirejs/require.js?ver=2.3.5"></script> <script async data-bootload="/profile/inner.js" data-main="/common/sframe-boot.js?ver=1.11" src="/bower_components/requirejs/require.js?ver=2.3.5"></script>
<style> <style>
.loading-hidden { display: none; } .loading-hidden { display: none; }
</style> </style>

@ -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();

@ -2,7 +2,7 @@
<html style="height: 100%; background: transparent;"> <html style="height: 100%; background: transparent;">
<head> <head>
<meta content="text/html; charset=utf-8" http-equiv="content-type"/> <meta content="text/html; charset=utf-8" http-equiv="content-type"/>
<script async data-bootload="/secureiframe/inner.js" data-main="/common/sframe-boot.js?ver=1.8" src="/bower_components/requirejs/require.js?ver=2.3.5"></script> <script async data-bootload="/secureiframe/inner.js" data-main="/common/sframe-boot.js?ver=1.11" src="/bower_components/requirejs/require.js?ver=2.3.5"></script>
<style> <style>
.loading-hidden { display: none; } .loading-hidden { display: none; }
body #cp-loading { body #cp-loading {

@ -2,7 +2,7 @@
<html class="cp-app-noscroll"> <html class="cp-app-noscroll">
<head> <head>
<meta content="text/html; charset=utf-8" http-equiv="content-type"/> <meta content="text/html; charset=utf-8" http-equiv="content-type"/>
<script async data-bootload="/settings/inner.js" data-main="/common/sframe-boot.js?ver=1.8" src="/bower_components/requirejs/require.js?ver=2.3.5"></script> <script async data-bootload="/settings/inner.js" data-main="/common/sframe-boot.js?ver=1.11" src="/bower_components/requirejs/require.js?ver=2.3.5"></script>
<style> <style>
.loading-hidden { display: none; } .loading-hidden { display: none; }
</style> </style>

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

@ -2,7 +2,7 @@
<html class="cp-app-noscroll"> <html class="cp-app-noscroll">
<head> <head>
<meta content="text/html; charset=utf-8" http-equiv="content-type"/> <meta content="text/html; charset=utf-8" http-equiv="content-type"/>
<script async data-bootload="/common/onlyoffice/inner.js" data-main="/common/sframe-boot.js?ver=1.8" src="/bower_components/requirejs/require.js?ver=2.3.5"></script> <script async data-bootload="/common/onlyoffice/inner.js" data-main="/common/sframe-boot.js?ver=1.11" src="/bower_components/requirejs/require.js?ver=2.3.5"></script>
<style> <style>
.loading-hidden { display: none; } .loading-hidden { display: none; }
</style> </style>

@ -2,7 +2,7 @@
<html class="cp-app-noscroll cp-app-print"> <html class="cp-app-noscroll cp-app-print">
<head> <head>
<meta content="text/html; charset=utf-8" http-equiv="content-type"/> <meta content="text/html; charset=utf-8" http-equiv="content-type"/>
<script async data-bootload="/slide/inner.js" data-main="/common/sframe-boot.js?ver=1.8" src="/bower_components/requirejs/require.js?ver=2.3.5"></script> <script async data-bootload="/slide/inner.js" data-main="/common/sframe-boot.js?ver=1.11" src="/bower_components/requirejs/require.js?ver=2.3.5"></script>
<style> <style>
.loading-hidden { display: none; } .loading-hidden { display: none; }
#editor1 { display: none; } #editor1 { display: none; }

@ -2,7 +2,7 @@
<html class="cp-app-noscroll"> <html class="cp-app-noscroll">
<head> <head>
<meta content="text/html; charset=utf-8" http-equiv="content-type"/> <meta content="text/html; charset=utf-8" http-equiv="content-type"/>
<script async data-bootload="/support/inner.js" data-main="/common/sframe-boot.js?ver=1.8" src="/bower_components/requirejs/require.js?ver=2.3.5"></script> <script async data-bootload="/support/inner.js" data-main="/common/sframe-boot.js?ver=1.11" src="/bower_components/requirejs/require.js?ver=2.3.5"></script>
<style> <style>
.loading-hidden { display: none; } .loading-hidden { display: none; }
</style> </style>

@ -49,7 +49,7 @@ define([
'cp-support-language', 'cp-support-language',
'cp-support-form', 'cp-support-form',
], ],
'debugging': [ 'debugging': [ // Msg.support_cat_debugging
'cp-support-debugging-data', 'cp-support-debugging-data',
], ],
}; };

@ -2,7 +2,7 @@
<html class="cp-app-noscroll"> <html class="cp-app-noscroll">
<head> <head>
<meta content="text/html; charset=utf-8" http-equiv="content-type"/> <meta content="text/html; charset=utf-8" http-equiv="content-type"/>
<script async data-bootload="/teams/inner.js" data-main="/common/sframe-boot.js?ver=1.8" src="/bower_components/requirejs/require.js?ver=2.3.5"></script> <script async data-bootload="/teams/inner.js" data-main="/common/sframe-boot.js?ver=1.11" src="/bower_components/requirejs/require.js?ver=2.3.5"></script>
<style> <style>
.loading-hidden { display: none; } .loading-hidden { display: none; }
#editor1 { display: none; } #editor1 { display: none; }

@ -2,7 +2,7 @@
<html class="cp-app-noscroll"> <html class="cp-app-noscroll">
<head> <head>
<meta content="text/html; charset=utf-8" http-equiv="content-type"/> <meta content="text/html; charset=utf-8" http-equiv="content-type"/>
<script async data-bootload="/todo/inner.js" data-main="/common/sframe-boot.js?ver=1.8" src="/bower_components/requirejs/require.js?ver=2.3.5"></script> <script async data-bootload="/todo/inner.js" data-main="/common/sframe-boot.js?ver=1.11" src="/bower_components/requirejs/require.js?ver=2.3.5"></script>
<style> <style>
.loading-hidden { display: none; } .loading-hidden { display: none; }
</style> </style>

@ -2,7 +2,7 @@
<html style="height: 100%; background: transparent;"> <html style="height: 100%; background: transparent;">
<head> <head>
<meta content="text/html; charset=utf-8" http-equiv="content-type"/> <meta content="text/html; charset=utf-8" http-equiv="content-type"/>
<script async data-bootload="/unsafeiframe/inner.js" data-main="/common/sframe-boot.js?ver=1.8" src="/bower_components/requirejs/require.js?ver=2.3.5"></script> <script async data-bootload="/unsafeiframe/inner.js" data-main="/common/sframe-boot.js?ver=1.11" src="/bower_components/requirejs/require.js?ver=2.3.5"></script>
<style> <style>
html, body { display: none; } html, body { display: none; }
</style> </style>

@ -2,7 +2,7 @@
<html class="cp-app-noscroll"> <html class="cp-app-noscroll">
<head> <head>
<meta content="text/html; charset=utf-8" http-equiv="content-type"/> <meta content="text/html; charset=utf-8" http-equiv="content-type"/>
<script async data-bootload="/whiteboard/inner.js" data-main="/common/sframe-boot.js?ver=1.8" src="/bower_components/requirejs/require.js?ver=2.3.5"></script> <script async data-bootload="/whiteboard/inner.js" data-main="/common/sframe-boot.js?ver=1.11" src="/bower_components/requirejs/require.js?ver=2.3.5"></script>
<style> <style>
.loading-hidden { display: none; } .loading-hidden { display: none; }
#editor1 { display: none; } #editor1 { display: none; }

@ -2,7 +2,7 @@
<html class="cp-app-noscroll"> <html class="cp-app-noscroll">
<head> <head>
<meta content="text/html; charset=utf-8" http-equiv="content-type"/> <meta content="text/html; charset=utf-8" http-equiv="content-type"/>
<script async data-bootload="/worker/inner.js" data-main="/common/sframe-boot.js?ver=1.8" src="/bower_components/requirejs/require.js?ver=2.3.5"></script> <script async data-bootload="/worker/inner.js" data-main="/common/sframe-boot.js?ver=1.11" src="/bower_components/requirejs/require.js?ver=2.3.5"></script>
<style> <style>
.loading-hidden { display: none; } .loading-hidden { display: none; }
</style> </style>

Loading…
Cancel
Save