mirror of https://github.com/xwiki-labs/cryptpad
Merge branch 'staging' into new-asciidoc
This commit is contained in:
commit
bfd1b5138a
|
@ -1,45 +0,0 @@
|
|||
---
|
||||
name: Bug report
|
||||
about: Report a bug in the software
|
||||
title: ''
|
||||
labels: ''
|
||||
assignees: ''
|
||||
|
||||
---
|
||||
|
||||
**Describe the bug**
|
||||
A clear and concise description of what the bug is.
|
||||
|
||||
**Where did it happen?**
|
||||
Did the issue occur on CryptPad.fr or an instance hosted by a third-party?
|
||||
If on another instance, please provide its full URL.
|
||||
|
||||
**To Reproduce**
|
||||
Steps to reproduce the behavior:
|
||||
1. Go to '...'
|
||||
2. Click on '....'
|
||||
3. Scroll down to '....'
|
||||
4. See error
|
||||
|
||||
**Expected behavior**
|
||||
A clear and concise description of what you expected to happen.
|
||||
|
||||
**Screenshots**
|
||||
If applicable, add screenshots to help explain your problem.
|
||||
|
||||
**Browser (please complete the following information):**
|
||||
- OS: [e.g. iOS]
|
||||
- Browser [e.g. firefox, tor browser, chrome, safari, brave, edge, ???]
|
||||
- variations [e.g. Firefox nightly, Firefox ESR, Chromium, Ungoogled chrome]
|
||||
- Version [e.g. 22]
|
||||
- Extensions installed (UBlock Origin, Passbolt, LibreJS]
|
||||
- Browser tweaks [e.g. firefox "Enhanced Tracking Protection" strict/custom mode, tor browser "safer" security level, chrome incognito mode]
|
||||
|
||||
**Smartphone (please complete the following information):**
|
||||
- Device: [e.g. iPhone6]
|
||||
- OS: [e.g. iOS8.1]
|
||||
- Browser [e.g. stock browser, safari]
|
||||
- Version [e.g. 22]
|
||||
|
||||
**Additional context**
|
||||
Add any other context about the problem here.
|
|
@ -0,0 +1,60 @@
|
|||
name: Reproducible bug report
|
||||
description: Report a reproducible bug ONLY, otherwise see the links below
|
||||
labels: ["bug"]
|
||||
body:
|
||||
- type: checkboxes
|
||||
attributes:
|
||||
label: Contribution guidelines
|
||||
description: Please read the code of conduct before proceeding.
|
||||
options:
|
||||
- label: I've read the [code of conduct](https://github.com/xwiki-labs/cryptpad/blob/main/CODE_OF_CONDUCT.md) and wholeheartedly agree
|
||||
required: true
|
||||
- type: checkboxes
|
||||
attributes:
|
||||
label: I've found a bug and checked that ...
|
||||
description: Prior to placing the issue, please check following:** *(fill out each checkbox with an `X` once done)*
|
||||
options:
|
||||
- label: I understand that not following the below instructions will result in immediate closure and/or deletion of my issue.
|
||||
required: true
|
||||
- label: I have understood that this bug report is dedicated for bugs, and not for support-related inquiries.
|
||||
required: true
|
||||
- label: I have understood that answers are voluntary and community-driven, and not commercial support.
|
||||
required: true
|
||||
- label: I have verified that my issue has not been already answered in the past. I've read the [Common issues documentation section](https://docs.cryptpad.org/en/FAQ.html#common-issues) and I also checked [previous issues](https://github.com/xwiki-labs/cryptpad/issues).
|
||||
required: true
|
||||
- type: textarea
|
||||
attributes:
|
||||
label: Description
|
||||
description: Please provide a brief description of the bug in 1-2 sentences. If applicable, add screenshots to help explain your problem. Very useful for bugs in CryptPad UI.
|
||||
validations:
|
||||
required: true
|
||||
- type: textarea
|
||||
attributes:
|
||||
label: Steps to reproduce
|
||||
description: Please describe the steps to reproduce the bug. Screenshots can be added, if helpful.
|
||||
placeholder: |-
|
||||
1. ...
|
||||
2. ...
|
||||
3. ...
|
||||
validations:
|
||||
required: true
|
||||
- type: textarea
|
||||
attributes:
|
||||
label: Expected behavior
|
||||
description: A clear and concise description of what you expected to happen.
|
||||
validations:
|
||||
required: true
|
||||
- type: textarea
|
||||
attributes:
|
||||
label: System information
|
||||
description: In this stage we would kindly ask you to attach general system information about your setup.
|
||||
value: |-
|
||||
| Question | Answer |
|
||||
| --- | --- |
|
||||
| Operating system and version | I_DO_REPLY_HERE |
|
||||
| Web browser and version| I_DO_REPLY_HERE |
|
||||
| Extensions installed | I_DO_REPLY_HERE |
|
||||
| Browser tweaks | I_DO_REPLY_HERE |
|
||||
| CryptPad version | I_DO_REPLY_HERE |
|
||||
validations:
|
||||
required: true
|
|
@ -0,0 +1,17 @@
|
|||
blank_issues_enabled: false
|
||||
contact_links:
|
||||
- name: Bug report
|
||||
url: https://forum.cryptpad.org/t/bug-report
|
||||
about: Use the appropriate tags & describe your issue in much details as possible
|
||||
- name: Feature request
|
||||
url: https://forum.cryptpad.org/t/feature-request
|
||||
about: Check if an existing topic doesn't already cover the feature you'd like
|
||||
- name: Generic question
|
||||
url: https://forum.cryptpad.org/t/general
|
||||
about: Feel free to use the forum to ask any question you might have
|
||||
- name: CryptPad.fr flagship instance issue
|
||||
url: https://cryptpad.fr/support/#new
|
||||
about: Issue with an account or document on cryptpad.fr only
|
||||
- name: Report a security vulnerability
|
||||
url: https://ouvaton.link/pOgHev
|
||||
about: Please give us appropriate time to verify, respond and fix before disclosure
|
|
@ -1,57 +0,0 @@
|
|||
---
|
||||
name: Initial instance configuration
|
||||
about: Difficulty configuring a CryptPad instance
|
||||
title: CONFIG
|
||||
labels: configuration
|
||||
assignees: ''
|
||||
|
||||
---
|
||||
|
||||
We receive many issues from people that have tried to set up a new CryptPad instance that does not load any of the interactive editors or which mostly works but has particular problems with the sheet editor.
|
||||
|
||||
Before you create an issue:
|
||||
|
||||
## Confirm that the problem stems from your instance and not from your browser
|
||||
|
||||
Not all browsers support CryptPad correctly, and various browser extensions interfere with its intended behaviour.
|
||||
|
||||
https://CryptPad.fr is a good reference point that you can use to confirm that your browser can load a correctly configured instance. If you can't load CryptPad.fr then the problem may be with your browser, its configuration, or one of its active extensions.
|
||||
|
||||
## See your instance's checkup page
|
||||
|
||||
If your instance is able to at least partially load some pages then you should be able to access the diagnostic page `http(s)://<your-domain>/checkup/`. It will perform some automated tests of your instance's configuration and will provide hints indicating:
|
||||
|
||||
1. what is incorrect about your configuration
|
||||
2. what to change in order to correct the problem
|
||||
|
||||
## Write down the exact steps you followed to configure your instance
|
||||
|
||||
0. Provide the URL of the guide you followed
|
||||
1. Confirm that your system has the necessary pre-requisites
|
||||
* Did you fetch the source code with `git` as recommended?
|
||||
* Have you installed the recommend version of Nodejs (12.14.0) using [NVM](https://github.com/nvm-sh/nvm)?
|
||||
* Have you installed `bower` using `npm`?
|
||||
* Have you fetched the latest source code? Run `git branch` and confirm that it returns either `main` or [the latest of our releases](github.com/xwiki-labs/cryptpad/releases/latest).
|
||||
2. Did you copy `cryptpad/config/config.example.js` to `cryptpad/config/config.js`, read the comments, and edit the fields which are described as being necessary for a production environment?
|
||||
3. Did you restart the application server (`server.js`) after making configuration changes?
|
||||
4. Are you running NGINX as a reverse proxy as we recommend?
|
||||
5. Have you generated an SSL certificate that is valid for both the domains that are required by the sandboxing system?
|
||||
6. Do the domains in your NGINX conf match those in `cryptpad/config/config.js`?
|
||||
|
||||
## Review the steps you took
|
||||
|
||||
If the answer to any of the above questions is _No_ then that is the most likely cause of your difficulty.
|
||||
|
||||
Identifying the problem on your own reduces the time we spend answering GitHub issues and leaves more time to fix actual bugs and develop new features.
|
||||
|
||||
## Create a detailed report
|
||||
|
||||
If you believe you've done all of those steps correctly then proceed with creating an issue with the following:
|
||||
|
||||
0. A concise description of the problem you're experiencing and why you believe it stems from a bug in the software and not a configuration issue
|
||||
1. The list of all the steps you wrote down when following our instructions above
|
||||
2. A link to your instance so we can easily load your `/checkup/` page for ourselves
|
||||
3. A list of any errors visible in your browser's console on whichever page is not behaving as expected
|
||||
4. A list of any further steps you've taken to debug the problem on your own
|
||||
|
||||
Finally, remove the text of this issue template and leave only the content you've written.
|
|
@ -44,7 +44,7 @@
|
|||
"emptyRule": { "enabled": true },
|
||||
"hexValidation": { "enabled": true }, // disallow actual garbage color hex codes (e.g. #ab)
|
||||
"propertyUnits": {
|
||||
"valid": ["rem", "vw", "em", "px"], // These units are allowed for all properties
|
||||
"valid": ["rem", "vw", "em", "px", "ch"], // These units are allowed for all properties
|
||||
"invalid": ["pt"], // The 'pt' unit is not allowed under any circumstances
|
||||
"properties": {
|
||||
//"line-height": [] // No units are allowed for line-height
|
||||
|
|
95
CHANGELOG.md
95
CHANGELOG.md
|
@ -1,3 +1,76 @@
|
|||
# 5.1.0
|
||||
|
||||
## Goals
|
||||
|
||||
We had two new members join our team in the time since our previous release.
|
||||
|
||||
Mathilde joined us as an administrator of CryptPad.fr, so we decided to put some unplanned time towards the platform's administrative tooling to simplify some common workflows.
|
||||
|
||||
Maxime joined us for a summer internship as a front-end developer, and took initiative on a number of popular issues from our tracker on GitHub.
|
||||
|
||||
## Update notes
|
||||
|
||||
* We applied a minor optimization to CryptPad's caching rules which should result in a slight decrease of many pages' loading times, thanks to some helpful profiling by one of our users.
|
||||
|
||||
|
||||
* We have started implementing a very basic build system for CryptPad which, at the moment, is only responsible for generating a few static HTML pages.
|
||||
* These pages include the _opengraph_ tags which describe how previews of the page should be rendered in social media posts, messenger applications, and search engine summaries.
|
||||
* For the moment we haven't configured the system to build distinct pages for every language, so they will include text which is hardcoded in a single language which defaults to English. This can be configured in `config/config.js` (for example: `preferredLanguage: 'de',`). We intend to improve this in the future.
|
||||
* They also update the content of the page's `<noscript>` tag, which is displayed in the event that the user has disabled JavaScript in their browser. The build system includes every translation of this message that is available, rather than just the English and French translations that were displayed previously.
|
||||
* We've included some new tests on the checkup page to detect whether these customized pages have been built, and to remind administrators to generate them otherwise (using `npm run build`).
|
||||
* Because the generated pages are based on the current default versions of these pages, updating to future versions of the software without re-building could result in errors due to outdated code being served. We'll include reminders in the update steps as we do for other common errors.
|
||||
|
||||
|
||||
* In order for the above changes to be effective, you'll need to update your NGINX configuration file. You can use git to see what has changed since v5.0.0 by running `git diff 5.0.0...main ./docs` in the root of your CryptPad repository.
|
||||
|
||||
|
||||
* We've updated the home page to use a distinct version of the CryptPad logo for its main image. This makes it easier to customize the home page itself without impacting the rest of the platform. To override the default image, include your own at `/customize/CryptPad_logo_hero.svg`.
|
||||
|
||||
|
||||
* Finally, a number of admins had opted into inclusion in our public instance directory but had not configured pages for their privacy policy or terms of service, which caused the checkup page to display an error. We've updated this error message to point directly to the relevant documentation, since the previous values were not sufficiently clear.
|
||||
|
||||
|
||||
To update from `5.0.0` to `5.1.0`:
|
||||
|
||||
1. Update your reverse proxy configuration to match the settings in our current `./docs/example.nginx.conf` and reload its configuration
|
||||
2. Stop your API server
|
||||
3. Fetch the latest code with git
|
||||
4. Install the latest dependencies with `bower update` and `npm i`
|
||||
5. Run `npm run build` to generate the new static pages
|
||||
5. Restart your server
|
||||
6. Review your instance's checkup page to ensure that you are passing all tests
|
||||
|
||||
## Features
|
||||
|
||||
* Administration:
|
||||
* The instance admin panel now features a "Database" tab which makes it possible to generate reports for accounts, documents, and "login blocks". This finally enables administrators to review document and account metadata, archive or restore data, and generally perform actions that used to require specialized knowledge about the platform's data storage formats.
|
||||
* Since the _Database_ tab identifies accounts by their public signing keys, we made it easier to access these keys by adding a button to support tickets which copies the author's key to your clipboard.
|
||||
* Thanks to contributors, the platform is now available in Spanish (100%) and European Portuguese (91%).
|
||||
* We've updated our mermaid integration to [v9.1.7](https://github.com/mermaid-js/mermaid/releases/tag/v9.1.7).
|
||||
* Spellcheck is now enabled by default in our rich text editor and can be disabled via the settings page in case you have not already done so.
|
||||
* Our code editor now includes a highlighting module for _asciidoc_ syntax.
|
||||
* The contact page has been updated to reflect that we have migrated our Mastodon account to [Fosstodon.org/@cryptpad](https://fosstodon.org/@cryptpad)
|
||||
* Various links throughout the platform have been updated to reflect that we've migrated our documentation from docs.cryptpad.fr to [docs.cryptpad.org](https://docs.cryptpad.org). The old domain now redirects to the new one to preserve compatibility with old instances or any other pages that have linked to it.
|
||||
* We've updated our issue templates on GitHub to use their new _Issue Forms_ functionality, making it easier to correctly submit a well-formatted bug report or feature request.
|
||||
* The project's readme now includes a widget indicating the completeness of CryptPad's translations on our Weblate instance.
|
||||
* We've added a placeholder to pages' basic HTML to make it easier to tell that something is happening before the proper loading screen is displayed.
|
||||
|
||||
## Bug fixes
|
||||
|
||||
* Thanks to some detailed reports from users of our spreadsheet editor we were able to reproduce an error that caused very large changes to be saved incorrectly. Such changes trigger multi-part messages to be created, but only the first message was correctly sent to the server. The client has now been updated to correctly send each part of the patch.
|
||||
* The behaviour of the long-form text input editor in our form app was not consistent with markdown-editing interfaces on the rest of the platform, so we enabled the same functionality as elsewhere.
|
||||
* Administration
|
||||
* We found that the quantity of support tickets shown for each category was sometimes inaccurate, so we corrected the way this number was computed.
|
||||
* A change in the internal format of each instance's name, location, and description caused these fields not to be included in telemetry for instances that had opted into the [public instance directory](https://cryptpad.org/instances/). We've corrected this so such instances provide all the necessary information.
|
||||
* We've corrected some logic for displaying configured URLs for privacy policies, terms of service, and similar resources such that relative URLs are considered relative to the top-level domain (rather than the sandbox domain).
|
||||
* The "Launch time" value on the admin panel was using a hard-coded rather than the relevant translation, and was not correctly updating when the "Refresh" button was clicked. Both issues have been fixed.
|
||||
* Members of editing sessions are correctly informed when administrators archive active channels.
|
||||
* The _Custom limits_ section of the API is now displayed in a somewhat nicer table.
|
||||
* A flaw in some of the styles for the kanban app made it impossible to add text to an empty card via the usual inline text field UI. Adding placeholder content to this field made the default click events work as expected.
|
||||
* Dropdowns with text content containing quotes (such as those that could be created in the form app) caused an invalid CSS selector to be constructed, which resulted in rendering issues. Such quotes are now properly escaped.
|
||||
* We found that some message handlers in CryptPad were receiving and trying to parse messages from unexpected sources (browser extensions). These messages triggered parsing errors which cause CryptPad's error screen to be displayed. We now guard against such messages and ignore them when they are not in the expected format or when they otherwise trigger parsing errors.
|
||||
* We updated our translation linting script to compare markup and variable substitution patterns across different translations. We identified and fixed quite a few errors (invalid markup, incomplete translations), and expect to have an easier time ensuring consistency going forward.
|
||||
|
||||
# 5.0.0
|
||||
|
||||
## Goals
|
||||
|
@ -108,7 +181,7 @@ Our main goal for this release was to follow up on some of the findings of the [
|
|||
|
||||
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.
|
||||
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.org/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_.
|
||||
|
||||
|
@ -134,7 +207,7 @@ We're also recommending a few more updates, but we don't expect that these will
|
|||
* 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).
|
||||
* 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.org/en/admin_guide/customization.html#application-config).
|
||||
|
||||
We've also made a number of changes and additions to the instance admin panel:
|
||||
|
||||
|
@ -192,7 +265,7 @@ To update from 4.13.0 to 4.14.0:
|
|||
* 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_.
|
||||
* 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.org/en/user_guide/user_account.html?highlight=safe%20link#confidentiality) that they can find using the drive's _history mode_.
|
||||
|
||||
# 4.13.0
|
||||
|
||||
|
@ -329,7 +402,7 @@ We've also updated the checkup page to test for the expected server behaviour an
|
|||
|
||||
Our team has limited resources, so we've chosen to introduce the new (and **experimental**) office editors gradually to avoid getting overwhelmed by support tickets as was the case when we introduced the current spreadsheet editor in 2019. In order to support this we've implemented an **early access** system which _optionally_ restricts the use of these editors to premium subscribers. We will enable this system on CryptPad.fr, but admins of independent instances can enable them at their discretion.
|
||||
|
||||
To enable the use of the OnlyOffice Document and Presentation editor for everyone on your instance, edit your [customize/application_config.js](https://docs.cryptpad.fr/en/admin_guide/customization.html#application-config) file to include `AppConfig.enableEarlyAccess = true;`.
|
||||
To enable the use of the OnlyOffice Document and Presentation editor for everyone on your instance, edit your [customize/application_config.js](https://docs.cryptpad.org/en/admin_guide/customization.html#application-config) file to include `AppConfig.enableEarlyAccess = true;`.
|
||||
|
||||
If you wish to avoid a rush of support tickets from your users by limiting early access to users with custom quota increases, add another line like so `AppConfig.premiumTypes = ['doc', 'presentation'];`.
|
||||
|
||||
|
@ -392,7 +465,7 @@ To update from 4.10.0 to 4.11.0:
|
|||
* The term "Anonymous" was only ever intended to convey the classical sense of the word ("without name or attribution") rather than the stricter modern sense "indistinguishable from a meaningfully large set of other individuals". To be clear, this is a change of terminology, not behaviour. To prevent your IP address from being revealed to the host server while using CryptPad the best option has always been, and continues to be [Tor browser](https://www.torproject.org/download/).
|
||||
* Going forward, if you see "anonymize" in CryptPad (such as in forms), you can take it to mean that extra efforts are being taken to make protocol-level metadata indistinguishable from that of other users, while "Guest" means only that you haven't registered or have removed your display name.
|
||||
* While we were reconsidering the notion of guest accounts we decided that it would be useful to be able to distinguish one guest from another. We decided to implement this by hooking into the existing system for displaying users' profile pictures by mapping a list of emojis to guests' randomly generated identifiers.
|
||||
* We chose a list of emojis that we hoped nobody would find objectionable ('🙈 🦀 🐞 🦋 🐬 🐋 🐢 🦉 🦆 🐧 🦡 🦘 🦨 🦦 🦥 🐼 🐻 🦝 🦓 🐄 💮️ 🐙️ 🌸️ 🌻️ 🐝️ 🐐 🦙 🦒 🐘 🦏 🐁 🐹 🐰 🦫 🦔 🐨 🐱 🐺 👺 👹 👽 👾 🤖'), but we realize that cultures and contexts differ widely. As such, we've made this configurable on a per-instance basis. A custom list of emojis can be set in `customize/application_config.js` as an array of single-emoji strings (`AppConfig.emojiAvatars = ['🥦', '🧄', '🍄', '🌶️'];`) or as an empty array if you prefer not to display any emojis (`AppConfig.emojiAvatars = [];`). See [our admin docs](https://docs.cryptpad.fr/en/admin_guide/customization.html#application-config) for more info on customization.
|
||||
* We chose a list of emojis that we hoped nobody would find objectionable ('🙈 🦀 🐞 🦋 🐬 🐋 🐢 🦉 🦆 🐧 🦡 🦘 🦨 🦦 🦥 🐼 🐻 🦝 🦓 🐄 💮️ 🐙️ 🌸️ 🌻️ 🐝️ 🐐 🦙 🦒 🐘 🦏 🐁 🐹 🐰 🦫 🦔 🐨 🐱 🐺 👺 👹 👽 👾 🤖'), but we realize that cultures and contexts differ widely. As such, we've made this configurable on a per-instance basis. A custom list of emojis can be set in `customize/application_config.js` as an array of single-emoji strings (`AppConfig.emojiAvatars = ['🥦', '🧄', '🍄', '🌶️'];`) or as an empty array if you prefer not to display any emojis (`AppConfig.emojiAvatars = [];`). See [our admin docs](https://docs.cryptpad.org/en/admin_guide/customization.html#application-config) for more info on customization.
|
||||
* Users can edit their display name inline in the user list or on their settings page, in which case their avatar will be one or two letters from their name (their first two initials if their name contains at least one space, otherwise the first two letters of their name).
|
||||
* Once these initial improvements had been made to the user list, the lack of support for emoji avatars in a number of places felt very conspicuous, so we've done our best to implement them consistently across every social aspect of the platform. Default emoji avatars are also displayed in comments in the rich text editor, in authorship data in our code/markdown editor, in tooltips when you hover over the marker for remote users' cursor location, in the "currently editing" indicator for Kanban cards, in the share and access menus, and in the "contacts" app.
|
||||
* The file upload dialog now includes a preview of the media that you are about to upload (as long as it's something CryptPad is capable of displaying) as well as a text field for describing the media. Descriptive text is added to the file's encrypted metadata and is applied to rendered media as `alt` or `title` attributes wherever applicable. This coincides with a broader effort to improve keyboard navigation and add support for screen-readers.
|
||||
|
@ -442,7 +515,7 @@ It seems that some browser developers thought to do the same thing, because we n
|
|||
|
||||
## Update notes
|
||||
|
||||
4.10.0 includes some minor changes to [the checkup page](https://docs.cryptpad.fr/fr/admin_guide/installation.html#diagnostics). Some admins have included screenshots of this page in bug reports or requests for support along with details of problems they suspect of being related. Because we've observed that the root of many issues is the browser (sometimes in addition to the server) we have decided to include details about the browser in this page's summary.
|
||||
4.10.0 includes some minor changes to [the checkup page](https://docs.cryptpad.org/fr/admin_guide/installation.html#diagnostics). Some admins have included screenshots of this page in bug reports or requests for support along with details of problems they suspect of being related. Because we've observed that the root of many issues is the browser (sometimes in addition to the server) we have decided to include details about the browser in this page's summary.
|
||||
|
||||
Up until now the checkup page only tested observable behaviour of the server such as HTTP headers on particular resources, configuration parameters distributed to the client, and the availability of essential resources. This practice meant that a report for an instance should have been the same regardless of the device that was used to generate the report. In light of a serious regression in Chrome (and all its derivatives) we decided that objectiveness was less important than utility and introduced some tests which check whether the client running the diagnostics interprets the provided server configuration. Terrible browsers (ie. every browser that is available on iOS) will fail these tests every time because they don't implement the expected APIs, but we've tried to detect these cases and warn that they are expected.
|
||||
|
||||
|
@ -499,7 +572,7 @@ We allocated most of this release cycle towards a schedule of one-on-one user in
|
|||
|
||||
It appears our promotion of the checkup page through our recent release notes and the inclusion of a link to it from the instance admin have been moderately successful. We've observed that more instance admins are noticing and fixing some common configuration issues.
|
||||
|
||||
This release features some minor changes to one instance configuration test which incorrectly provided an exemption for the use of `http://localhost:3000` as an `httpUnsafeOrigin` value. This exemption was provided because this value is valid for local development. However, it suppressed errors when this configuration was used for production instances where it could cause a variety of problems. As usual, we recommend checking your instance's admin page after updating to confirm that you are passing the latest tests. Information about the checkup page is included in [our documentation](https://docs.cryptpad.fr/en/admin_guide/admin_panel.html#network).
|
||||
This release features some minor changes to one instance configuration test which incorrectly provided an exemption for the use of `http://localhost:3000` as an `httpUnsafeOrigin` value. This exemption was provided because this value is valid for local development. However, it suppressed errors when this configuration was used for production instances where it could cause a variety of problems. As usual, we recommend checking your instance's admin page after updating to confirm that you are passing the latest tests. Information about the checkup page is included in [our documentation](https://docs.cryptpad.org/en/admin_guide/admin_panel.html#network).
|
||||
|
||||
To update from 4.8.0 to 4.9.0:
|
||||
|
||||
|
@ -697,7 +770,7 @@ This release includes very few new features aside from those already mentioned i
|
|||
|
||||
## Goals
|
||||
|
||||
This release cycle we aimed to complete three major milestones: the official release of our calendar app, the ability for admins to close registration on their instance, and the deployment of the admin section of our [official documentation](https://docs.cryptpad.fr/en/admin_guide/index.html). We spent the remainder of our time addressing a growing backlog of issues on GitHub by fixing a number of weird bugs.
|
||||
This release cycle we aimed to complete three major milestones: the official release of our calendar app, the ability for admins to close registration on their instance, and the deployment of the admin section of our [official documentation](https://docs.cryptpad.org/en/admin_guide/index.html). We spent the remainder of our time addressing a growing backlog of issues on GitHub by fixing a number of weird bugs.
|
||||
|
||||
## Update notes
|
||||
|
||||
|
@ -893,7 +966,7 @@ To update from 4.1.0 to 4.2.0:
|
|||
* We've reverted the styles for the rich text editor so that the document always has a white background, even in dark mode, since we could not guarantee that documents would be legible to all users if custom text colors had been applied. While we were looking at this editor, we also repositioned several buttons used to control the page's layout, including the width of the document, the presence of the table of contents, and its comments.
|
||||
* We've continued to improve several key parts of the platform to accommodate offline usage. Teams, shared folders within teams, and the file app can now load and display content cached within the browser even if the client cannot establish a connection to our API server.
|
||||
* The content of _whiteboard_ documents can now be downloaded directly from within team or user drives, rather than exclusively from within the whiteboard editor itself. To do so, right-click a whiteboard and choose _download_ to export a PNG file.
|
||||
* Since we now regularly serve more than 125 thousand visitors a week it's gotten quite difficult to keep up with support tickets. To help alleviate this burden we're taking steps to increase the visibility of our documentation (https://docs.cryptpad.fr). The support ticket page now displays a link to that documentation above the form to create a new ticket.
|
||||
* Since we now regularly serve more than 125 thousand visitors a week it's gotten quite difficult to keep up with support tickets. To help alleviate this burden we're taking steps to increase the visibility of our documentation (https://docs.cryptpad.org). The support ticket page now displays a link to that documentation above the form to create a new ticket.
|
||||
* Several users have reported confusion regarding various password fields in CryptPad, in the access menu, pad creation screen, when uploading new files, and when creating a shared folder. We've updated the text associated with these fields to better indicate that they are not requesting your user password, but rather that they allow you to add an optional password as an additional layer of protection.
|
||||
* Server administrators can now refresh the _performance_ table on the admin panel without reloading the page.
|
||||
* We've begun working on a _checkup_ page for CryptPad to help administrators identify and fix common misconfigurations of the platform. It's still in a very basic state, but we hope to to make it a core part of the server installation guide that is under development.
|
||||
|
@ -1011,7 +1084,7 @@ To update from 3.25.1 to 4.0.0:
|
|||
Finally, the "rebrand" part of this release:
|
||||
|
||||
* Our home page features our new logo, a cleaner layout, new text (notably dropping the use of "zero-knowledge" from our explanation), new app icons, softer colors, neater fonts, and a custom illustration of a document shredder that hints at how CryptPad works.
|
||||
* We no longer include a FAQ page with each instance, and instead link to relevant parts of our dedicated documentation platform (https://docs.cryptpad.fr) from any place that previously referenced the FAQ. This will make it easier for translators to focus on text for the platform's interface if they wish. An updated Frequently Asked Questions will be added to the documentation in the near future.
|
||||
* We no longer include a FAQ page with each instance, and instead link to relevant parts of our dedicated documentation platform (https://docs.cryptpad.org) from any place that previously referenced the FAQ. This will make it easier for translators to focus on text for the platform's interface if they wish. An updated Frequently Asked Questions will be added to the documentation in the near future.
|
||||
* Each of our editors now features a dedicated favicon to make it easier to distinguish different CryptPad tabs in your browser.
|
||||
* The contact page now points to _Element_ instead of Riot, since the Matrix team rebranded in the last while as well.
|
||||
* The "pricing" or "features" page (features.html) reads the server's configured storage limits from a server endpoint and displays them, rather than hardcoding the default values in the text.
|
||||
|
@ -1317,7 +1390,7 @@ This release was developed over a longer period than usual due to holidays, our
|
|||
|
||||
We've had a few disgruntled administrators contact us about our apparent _failure to provide a docker image_ or to otherwise support their preferred configuration. With that in mind, this is a periodic reminder that CryptPad is provided to the public under the terms of the AGPL (found within this repository in the [LICENSE file](./LICENSE)) which implies on our part no warranty, liability, or responsibility to configure your server for you. We do our best to provide the necessary information to correctly launch your own instance of the software given our limited budget, however, all such files are provided **AS IS** and are only intended to function under the narrow circumstances of usage which we recommend within the comments of the provided example configuration files.
|
||||
|
||||
With that said, the vast majority of our community acts kindly and courteously towards us and each other. We really do appreciate it, and we'll continue to help you to the best of our ability. With that in mind, we're happy to announce that we've written and deployed a first version of our user guide, available at https://docs.cryptpad.fr. The work that went into this was funded by NLnet foundation as an NGI Zero PET (Privacy-Enhancing Technology) grant. We are currently working on two more guides intended for developers and administrators, and will deploy them to the same domain as they are completed. In the meantime we have begun to update our README, GitHub wiki, and other resources to reflect the current recommended practices and remove references to unsupported configurations.
|
||||
With that said, the vast majority of our community acts kindly and courteously towards us and each other. We really do appreciate it, and we'll continue to help you to the best of our ability. With that in mind, we're happy to announce that we've written and deployed a first version of our user guide, available at https://docs.cryptpad.org. The work that went into this was funded by NLnet foundation as an NGI Zero PET (Privacy-Enhancing Technology) grant. We are currently working on two more guides intended for developers and administrators, and will deploy them to the same domain as they are completed. In the meantime we have begun to update our README, GitHub wiki, and other resources to reflect the current recommended practices and remove references to unsupported configurations.
|
||||
|
||||
If you're only reading this for instructions on how to update your instance from 3.20.1 to 3.21.0:
|
||||
|
||||
|
|
|
@ -110,12 +110,15 @@ module.exports = {
|
|||
* To give access to the admin panel to a user account, just add their public signing
|
||||
* key, which can be found on the settings page for registered users.
|
||||
* Entries should be strings separated by a comma.
|
||||
* adminKeys: [
|
||||
* "[cryptpad-user1@my.awesome.website/YZgXQxKR0Rcb6r6CmxHPdAGLVludrAF2lEnkbx1vVOo=]",
|
||||
* "[cryptpad-user2@my.awesome.website/jA-9c5iNuG7SyxzGCjwJXVnk5NPfAOO8fQuQ0dC83RE=]",
|
||||
* ]
|
||||
*
|
||||
*/
|
||||
/*
|
||||
adminKeys: [
|
||||
//"[cryptpad-user1@my.awesome.website/YZgXQxKR0Rcb6r6CmxHPdAGLVludrAF2lEnkbx1vVOo=]",
|
||||
|
||||
],
|
||||
*/
|
||||
|
||||
/* =====================
|
||||
* STORAGE
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
<!DOCTYPE html>
|
||||
<html class="cp" id="four-oh-four">
|
||||
<html id="four-oh-four">
|
||||
<!-- If this file is not called customize.dist/src/template.html, it is generated -->
|
||||
<head>
|
||||
<title data-localization="main_title">CryptPad: Collaboration suite, encrypted and open-source</title>
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
<!DOCTYPE html>
|
||||
<html class="cp" id="five-hundred">
|
||||
<html id="five-hundred">
|
||||
<!-- If this file is not called customize.dist/src/template.html, it is generated -->
|
||||
<head>
|
||||
<title data-localization="main_title">CryptPad: Collaboration suite, encrypted and open-source</title>
|
||||
|
|
|
@ -1,16 +1,15 @@
|
|||
<!DOCTYPE html>
|
||||
<html class="cp">
|
||||
<html>
|
||||
<!-- If this file is not called customize.dist/src/template.html, it is generated -->
|
||||
<head>
|
||||
<title data-localization="main_title">CryptPad: Collaboration suite, encrypted and open-source</title>
|
||||
<meta content="text/html; charset=utf-8" http-equiv="content-type"/>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
|
||||
<link rel="icon" type="image/png" href="/customize/favicon/main-favicon.png" id="favicon"/>
|
||||
<script src="/customize/pre-loading.js?ver=1.1"></script>
|
||||
<link href="/customize/src/pre-loading.css?ver=1.0" rel="stylesheet" type="text/css">
|
||||
<script async data-bootload="/customize/template.js" data-main="/common/boot.js?ver=1.0" src="/bower_components/requirejs/require.js?ver=2.3.5"></script>
|
||||
</head>
|
||||
<body class="html">
|
||||
<noscript>
|
||||
<p><strong>OOPS</strong> In order to do encryption in your browser, Javascript is really <strong>really</strong> required.</p>
|
||||
<p><strong>OUPS</strong> Afin de pouvoir réaliser le chiffrement dans votre navigateur, Javascript est <strong>vraiment</strong> nécessaire.</p>
|
||||
</noscript>
|
||||
</html>
|
||||
<noscript></noscript>
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
<!DOCTYPE html>
|
||||
<html class="cp" id="four-oh-four">
|
||||
<html id="four-oh-four">
|
||||
<!-- If this file is not called customize.dist/src/template.html, it is generated -->
|
||||
<head>
|
||||
<title data-localization="main_title">CryptPad: Zero Knowledge, Collaborative Real Time Editing</title>
|
||||
|
|
|
@ -1,16 +1,14 @@
|
|||
<!DOCTYPE html>
|
||||
<html class="cp">
|
||||
<html>
|
||||
<!-- If this file is not called customize.dist/src/template.html, it is generated -->
|
||||
<head>
|
||||
<title data-localization="main_title">CryptPad: Collaboration suite, encrypted and open-source</title>
|
||||
<meta content="text/html; charset=utf-8" http-equiv="content-type"/>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
|
||||
<link rel="icon" type="image/png" href="/customize/favicon/main-favicon.png" id="favicon"/>
|
||||
<script src="/customize/pre-loading.js?ver=1.1"></script>
|
||||
<link href="/customize/src/pre-loading.css?ver=1.0" rel="stylesheet" type="text/css">
|
||||
<script async data-bootload="/customize/template.js" data-main="/common/boot.js?ver=1.0" src="/bower_components/requirejs/require.js?ver=2.3.5"></script>
|
||||
</head>
|
||||
<body class="html">
|
||||
<noscript>
|
||||
<p><strong>OOPS</strong> In order to do encryption in your browser, Javascript is really <strong>really</strong> required.</p>
|
||||
<p><strong>OUPS</strong> Afin de pouvoir réaliser le chiffrement dans votre navigateur, Javascript est <strong>vraiment</strong> nécessaire.</p>
|
||||
</noscript>
|
||||
</html>
|
||||
<noscript></noscript>
|
||||
|
|
Binary file not shown.
After Width: | Height: | Size: 12 KiB |
|
@ -1,16 +1,14 @@
|
|||
<!DOCTYPE html>
|
||||
<html class="cp">
|
||||
<html>
|
||||
<!-- If this file is not called customize.dist/src/template.html, it is generated -->
|
||||
<head>
|
||||
<title data-localization="main_title">CryptPad: Collaboration suite, encrypted and open-source</title>
|
||||
<meta content="text/html; charset=utf-8" http-equiv="content-type"/>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
|
||||
<link rel="icon" type="image/png" href="/customize/favicon/main-favicon.png" id="favicon"/>
|
||||
<script src="/customize/pre-loading.js?ver=1.1"></script>
|
||||
<link href="/customize/src/pre-loading.css?ver=1.0" rel="stylesheet" type="text/css">
|
||||
<script async data-bootload="/customize/template.js" data-main="/common/boot.js?ver=1.0" src="/bower_components/requirejs/require.js?ver=2.3.5"></script>
|
||||
</head>
|
||||
<body class="html">
|
||||
<noscript>
|
||||
<p><strong>OOPS</strong> In order to do encryption in your browser, Javascript is really <strong>really</strong> required.</p>
|
||||
<p><strong>OUPS</strong> Afin de pouvoir réaliser le chiffrement dans votre navigateur, Javascript est <strong>vraiment</strong> nécessaire.</p>
|
||||
</noscript>
|
||||
</html>
|
||||
<noscript></noscript>
|
||||
|
|
|
@ -16,6 +16,7 @@ var map = {
|
|||
//'nl': 'Nederlands'
|
||||
'pl': 'Polski',
|
||||
'pt-br': 'Português do Brasil',
|
||||
'pt-pt': 'Português do Portugal',
|
||||
'ro': 'Română',
|
||||
'ru': 'Русский',
|
||||
//'sv': 'Svenska',
|
||||
|
|
|
@ -95,7 +95,7 @@ define([
|
|||
return h('a', attrs, [icon, text]);
|
||||
};
|
||||
|
||||
Pages.versionString = "5.0.0";
|
||||
Pages.versionString = "5.1.0";
|
||||
|
||||
var customURLs = Pages.customURLs = {};
|
||||
(function () {
|
||||
|
@ -143,14 +143,14 @@ define([
|
|||
Pages.privacyLink = footLink(customURLs.privacy, 'privacy');
|
||||
Pages.termsLink = footLink(customURLs.terms, 'terms');
|
||||
Pages.sourceLink = footLink(customURLs.source, 'footer_source');
|
||||
Pages.docsLink = footLink('https://docs.cryptpad.fr', 'docs_link');
|
||||
Pages.docsLink = footLink('https://docs.cryptpad.org', 'docs_link');
|
||||
Pages.roadmapLink = footLink(customURLs.roadmap, 'footer_roadmap');
|
||||
|
||||
|
||||
Pages.infopageFooter = function () {
|
||||
var donateButton;
|
||||
if (!ApiConfig.removeDonateButton) {
|
||||
donateButton = footLink('https://opencollective.com/cryptpad/contribute/', 'footer_donate', null, 'money'); // XXX DB: add OpenCollective icon // XXX
|
||||
donateButton = footLink('https://opencollective.com/cryptpad/contribute/', 'footer_donate', null, 'money'); // TODO migrate to forkawesome and use the OpenCollective icon
|
||||
}
|
||||
|
||||
return h('footer.cp-footer', [
|
||||
|
@ -228,7 +228,7 @@ define([
|
|||
h('i.fa.fa-info-circle'),
|
||||
Pages.areSubscriptionsAllowed()? Msg.pricing: Msg.features
|
||||
]),
|
||||
h('a.nav-item.nav-link', { href: 'https://docs.cryptpad.fr'},
|
||||
h('a.nav-item.nav-link', { href: 'https://docs.cryptpad.org'},
|
||||
[h('i.fa.fa-book', {'aria-hidden':'true'}),Msg.docs_link]),
|
||||
].concat(rightLinks)
|
||||
);
|
||||
|
|
|
@ -75,7 +75,7 @@ define([
|
|||
)
|
||||
),
|
||||
h('div',
|
||||
h('a.card-small', {href : "https://social.weho.st/@cryptpad"},
|
||||
h('a.card-small', {href : "https://fosstodon.org/@cryptpad"},
|
||||
h('div.card-body',
|
||||
h('p', [
|
||||
h('img', {
|
||||
|
|
|
@ -0,0 +1,58 @@
|
|||
(function () {
|
||||
var logoPath = '/customize/CryptPad_logo.svg';
|
||||
if (location.pathname === '/' || location.pathname === '/index.html') {
|
||||
logoPath = '/customize/CryptPad_logo_hero.svg';
|
||||
}
|
||||
|
||||
var elem = document.createElement('div');
|
||||
elem.setAttribute('id', 'placeholder');
|
||||
elem.innerHTML = [
|
||||
'<div class="placeholder-logo-container">',
|
||||
'<img class="placeholder-logo" src="' + logoPath + '">',
|
||||
'</div>',
|
||||
'<div class="placeholder-message-container">',
|
||||
'<p>Loading...</p>',
|
||||
'</div>'
|
||||
].join('');
|
||||
|
||||
var key = 'CRYPTPAD_STORE|colortheme'; // handle outer
|
||||
if (localStorage[key] && localStorage[key] === 'dark') {
|
||||
elem.classList.add('dark-theme');
|
||||
}
|
||||
if (!localStorage[key] && localStorage[key+'_default'] && localStorage[key+'_default'] === 'dark') {
|
||||
elem.classList.add('dark-theme');
|
||||
}
|
||||
|
||||
var req;
|
||||
try {
|
||||
req = JSON.parse(decodeURIComponent(window.location.hash.substring(1)));
|
||||
if ((req.theme || req.themeOS) === 'dark') { // handle inner
|
||||
elem.classList.add('dark-theme');
|
||||
}
|
||||
} catch (e) {}
|
||||
|
||||
document.addEventListener('DOMContentLoaded', function() {
|
||||
document.body.appendChild(elem);
|
||||
window.CP_preloadingTime = +new Date();
|
||||
|
||||
// soft transition between inner and outer placeholders
|
||||
if (req && req.time && (+new Date() - req.time > 2000)) {
|
||||
try {
|
||||
var logo = document.querySelector('.placeholder-logo-container');
|
||||
var message = document.querySelector('.placeholder-message-container');
|
||||
logo.style.opacity = 100;
|
||||
message.style.opacity = 100;
|
||||
logo.style.animation = 'none';
|
||||
message.style.animation = 'none';
|
||||
} catch (err) {}
|
||||
}
|
||||
|
||||
// fallback if CSS animations not available
|
||||
setTimeout(() => {
|
||||
try {
|
||||
document.querySelector('.placeholder-logo-container').style.opacity = 100;
|
||||
document.querySelector('.placeholder-message-container').style.opacity = 100;
|
||||
} catch (e) {}
|
||||
}, 3000);
|
||||
});
|
||||
}());
|
|
@ -5,6 +5,7 @@
|
|||
& {
|
||||
|
||||
each(@colortheme_apps, {
|
||||
button .cp-icon-color-@{key},
|
||||
.cp-icon-color-@{key} { color: @value; }
|
||||
});
|
||||
|
||||
|
|
|
@ -15,7 +15,14 @@
|
|||
margin-bottom: 10px !important;
|
||||
}
|
||||
}
|
||||
// todo ul, ol
|
||||
|
||||
// fix silly spacing around sublists in "loose lists"
|
||||
:is(ul, ol) li > p {
|
||||
& + :is(ul, ol) {
|
||||
margin-bottom: 1rem;
|
||||
}
|
||||
}
|
||||
|
||||
// TOC
|
||||
div.cp-md-toc {
|
||||
background: @cp_markdown-bg;
|
||||
|
|
|
@ -967,6 +967,9 @@
|
|||
}
|
||||
}
|
||||
}
|
||||
.cp-toolbar-dropdown-nowrap {
|
||||
white-space: nowrap;
|
||||
}
|
||||
.cp-toolbar-bottom {
|
||||
color: @cp_toolbar-bottom-fg;
|
||||
display: inline-flex;
|
||||
|
@ -998,11 +1001,15 @@
|
|||
.fa, .cptools {
|
||||
margin-right: 5px;
|
||||
}
|
||||
.cp-dropdown-button-title .cp-icon {
|
||||
margin-left: 5px;
|
||||
}
|
||||
&:hover {
|
||||
background-color: fade(@cp_toolbar-bottom-bg, 70%);
|
||||
}
|
||||
}
|
||||
.cp-toolbar-bottom-left > button,
|
||||
.cp-toolbar-bottom-left > span > button,
|
||||
.cp-toolbar-bottom-mid > button,
|
||||
.cp-toolbar-bottom-right > button,
|
||||
.cp-toolbar-bottom-right > span > button {
|
||||
|
@ -1070,7 +1077,7 @@
|
|||
.cp-toolbar-name, .cp-button-name {
|
||||
display: none;
|
||||
}
|
||||
i {
|
||||
i, span {
|
||||
margin-right: 0;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -73,6 +73,7 @@
|
|||
.tag-line {
|
||||
text-align: center;
|
||||
font-size: 1.4em;
|
||||
max-width: 50ch;
|
||||
}
|
||||
.cp-instance-location {
|
||||
margin-top: 20px;
|
||||
|
|
|
@ -0,0 +1,114 @@
|
|||
.cp-app-noscroll body {
|
||||
background: transparent;
|
||||
}
|
||||
.cp-app-noscroll #placeholder {
|
||||
z-index: 9999999; /* loading screen -1 */
|
||||
background-color: transparent;
|
||||
}
|
||||
|
||||
#placeholder {
|
||||
visibility: visible;
|
||||
position: fixed;
|
||||
z-index: -10;
|
||||
top: 0px;
|
||||
bottom: 0px;
|
||||
left: 0px;
|
||||
right: 0px;
|
||||
background-color: #EEEEEE; /* @cp_loading-bg */
|
||||
color: #424242; /* @cp_loading-fg */
|
||||
font-size: 1.3em;
|
||||
line-height: 120%;
|
||||
opacity: 1;
|
||||
display: flex;
|
||||
flex-flow: column;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
font: 20px 'Helvetica Neue', sans-serif !important;
|
||||
}
|
||||
html:not(.cp-app-noscroll) #placeholder.dark-theme {
|
||||
background-color: #212121; /* @cp_loading-bg (dark) */
|
||||
}
|
||||
#placeholder.dark-theme {
|
||||
color: #EEEEEE; /* @cp_loading-fg (dark) */
|
||||
}
|
||||
|
||||
#placeholder .placeholder-logo-container {
|
||||
height: 300px;
|
||||
width: 300px;
|
||||
margin-top: 50px;
|
||||
flex: 0 1 auto;
|
||||
min-height: 0;
|
||||
text-align: center;
|
||||
opacity: 0;
|
||||
animation: fadein 5s ease 2s forwards;
|
||||
}
|
||||
#placeholder .placeholder-logo-container img {
|
||||
max-width: 100%;
|
||||
max-height: 100%;
|
||||
}
|
||||
#placeholder .placeholder-message-container {
|
||||
width: 700px;
|
||||
max-width: 90vw;
|
||||
height: 236px;
|
||||
max-height: calc(100vh - 20px);
|
||||
margin: 50px;
|
||||
flex-shrink: 0;
|
||||
display: flex;
|
||||
flex-flow: column;
|
||||
align-items: center;
|
||||
opacity: 0;
|
||||
animation: fadein 5s ease 2s forwards;
|
||||
}
|
||||
#placeholder .placeholder-message-container p {
|
||||
margin-top: 0;
|
||||
}
|
||||
#placeholder .placeholder-logo {
|
||||
margin-left: auto;
|
||||
margin-right: auto;
|
||||
max-width: 90vw;
|
||||
max-height: 300px;
|
||||
width: auto;
|
||||
height: auto;
|
||||
margin-bottom: 2em;
|
||||
}
|
||||
|
||||
@keyframes fadein {
|
||||
from { opacity: 0; }
|
||||
to { opacity: 1; }
|
||||
}
|
||||
|
||||
@media screen and (max-width: 500px) {
|
||||
#placeholder {
|
||||
font-size: 16px !important;
|
||||
}
|
||||
#placeholder .placeholder-message-container {
|
||||
height: 206px;
|
||||
}
|
||||
}
|
||||
@media screen and (max-height: 700px) {
|
||||
#placeholder {
|
||||
font-size: 16px !important;
|
||||
}
|
||||
#placeholder .placeholder-message-container {
|
||||
height: 206px;
|
||||
}
|
||||
}
|
||||
@media screen and (max-height: 500px) {
|
||||
#placeholder .placeholder-logo-container {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
:is(div, noscript) > p.noscript {
|
||||
font-family: sans-serif;
|
||||
z-index: 999;
|
||||
padding: 15px;
|
||||
font-size: 20px;
|
||||
margin-top: 30px !important;
|
||||
max-width: 800px;
|
||||
margin: auto;
|
||||
|
||||
background-color: #424242;
|
||||
color: #eee;
|
||||
border-radius: 5px;
|
||||
}
|
||||
|
|
@ -1,16 +1,14 @@
|
|||
<!DOCTYPE html>
|
||||
<html class="cp">
|
||||
<html>
|
||||
<!-- If this file is not called customize.dist/src/template.html, it is generated -->
|
||||
<head>
|
||||
<title data-localization="main_title">CryptPad: Collaboration suite,encrypted and open-source</title>
|
||||
<title data-localization="main_title">CryptPad: Collaboration suite, encrypted and open-source</title>
|
||||
<meta content="text/html; charset=utf-8" http-equiv="content-type"/>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
|
||||
<link rel="icon" type="image/png" href="/customize/favicon/main-favicon.png" id="favicon"/>
|
||||
<script src="/customize/pre-loading.js?ver=1.1"></script>
|
||||
<link href="/customize/src/pre-loading.css?ver=1.0" rel="stylesheet" type="text/css">
|
||||
<script async data-bootload="/customize/template.js" data-main="/common/boot.js?ver=1.0" src="/bower_components/requirejs/require.js?ver=2.3.5"></script>
|
||||
</head>
|
||||
<body class="html">
|
||||
<noscript>
|
||||
<p><strong>OOPS</strong> In order to do encryption in your browser, Javascript is really <strong>really</strong> required.</p>
|
||||
<p><strong>OUPS</strong> Afin de pouvoir réaliser le chiffrement dans votre navigateur, Javascript est <strong>vraiment</strong> nécessaire.</p>
|
||||
</noscript>
|
||||
</html>
|
||||
<noscript></noscript>
|
||||
|
|
|
@ -47,6 +47,8 @@ $(function () {
|
|||
], function () {
|
||||
var $main = $(infoPage());
|
||||
|
||||
$('#placeholder').remove();
|
||||
|
||||
$body.append($main);
|
||||
|
||||
if (/^\/register\//.test(pathname)) {
|
||||
|
|
|
@ -1,6 +1,8 @@
|
|||
# Translations
|
||||
|
||||
Translations can now be made using [Weblate](https://weblate.cryptpad.fr). We may still accept PRs for the internal translation files, but we won't provide support for this.
|
||||
Translations can now be made using [Weblate](https://weblate.cryptpad.fr). We may still accept PRs for the internal translation files, but we won't provide support for this. See the state of the translated languages:
|
||||
|
||||
![](https://weblate.cryptpad.fr/widgets/cryptpad/-/app/multi-auto.svg)
|
||||
|
||||
## Request a new language
|
||||
|
||||
|
|
|
@ -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.pt-pt.js'], function (Messages) {
|
||||
// Replace the existing keys in your copied file here:
|
||||
// Messages.button_newpad = "New Rich Text Document";
|
||||
|
||||
return Messages;
|
||||
});
|
||||
|
|
@ -87,9 +87,14 @@ server {
|
|||
if ($args ~ ver=) {
|
||||
set $cacheControl max-age=31536000;
|
||||
}
|
||||
if ($uri ~ ^/.*(\/|\.html)$) {
|
||||
# This rule overrides the above caching directive and makes things somewhat less efficient.
|
||||
# We had inverted them as an optimization, but Safari 16 introduced a bug that interpreted
|
||||
# some important headers incorrectly when loading these files from cache.
|
||||
# This is why we can't have nice things :(
|
||||
if ($uri ~ ^(\/|.*\/|.*\.html)$) {
|
||||
set $cacheControl no-cache;
|
||||
}
|
||||
|
||||
# Will not set any header if it is emptystring
|
||||
add_header Cache-Control $cacheControl;
|
||||
|
||||
|
@ -242,5 +247,5 @@ server {
|
|||
}
|
||||
|
||||
# Finally, serve anything the above exceptions don't govern.
|
||||
try_files /customize/www/$uri/index.html /www/$uri /www/$uri/index.html /customize/$uri;
|
||||
try_files /customize/www/$uri /customize/www/$uri/index.html /www/$uri /www/$uri/index.html /customize/$uri;
|
||||
}
|
||||
|
|
|
@ -6,6 +6,9 @@ const Util = require("../common-util");
|
|||
const Ulimit = require("ulimit");
|
||||
const Decrees = require("../decrees");
|
||||
const Pinning = require("./pin-rpc");
|
||||
const Core = require("./core");
|
||||
const Channel = require("./channel");
|
||||
const BlockStore = require("../storage/block");
|
||||
|
||||
var Fs = require("fs");
|
||||
|
||||
|
@ -170,13 +173,15 @@ var archiveDocument = function (Env, Server, cb, data) {
|
|||
|
||||
switch (id.length) {
|
||||
case 32:
|
||||
// TODO disconnect users from active sessions
|
||||
return void Env.msgStore.archiveChannel(id, Util.both(cb, function (err) {
|
||||
Env.Log.info("ARCHIVAL_CHANNEL_BY_ADMIN_RPC", {
|
||||
channelId: id,
|
||||
reason: reason,
|
||||
status: err? String(err): "SUCCESS",
|
||||
});
|
||||
Channel.disconnectChannelMembers(Env, Server, id, 'EDELETED', err => {
|
||||
if (err) { } // TODO
|
||||
});
|
||||
}));
|
||||
case 48:
|
||||
return void Env.blobStore.archive.blob(id, Util.both(cb, function (err) {
|
||||
|
@ -195,6 +200,46 @@ var archiveDocument = function (Env, Server, cb, data) {
|
|||
// Env.blobStore.archive.proof(userSafeKey, blobId, cb)
|
||||
};
|
||||
|
||||
var removeDocument = function (Env, Server, cb, data) {
|
||||
if (!Array.isArray(data)) { return void cb("EINVAL"); }
|
||||
var args = data[1];
|
||||
|
||||
var id, reason;
|
||||
if (typeof(args) === 'string') {
|
||||
id = args;
|
||||
} else if (args && typeof(args) === 'object') {
|
||||
id = args.id;
|
||||
reason = args.reason;
|
||||
}
|
||||
|
||||
if (typeof(id) !== 'string' || id.length < 32) { return void cb("EINVAL"); }
|
||||
|
||||
switch (id.length) {
|
||||
case 32:
|
||||
return void Env.msgStore.removeChannel(id, Util.both(cb, function (err) {
|
||||
Env.Log.info("REMOVAL_CHANNEL_BY_ADMIN_RPC", {
|
||||
channelId: id,
|
||||
reason: reason,
|
||||
status: err? String(err): "SUCCESS",
|
||||
});
|
||||
Channel.disconnectChannelMembers(Env, Server, id, 'EDELETED', err => {
|
||||
if (err) { } // TODO
|
||||
});
|
||||
}));
|
||||
case 48:
|
||||
return void Env.blobStore.remove.blob(id, Util.both(cb, function (err) {
|
||||
Env.Log.info("REMOVAL_BLOB_BY_ADMIN_RPC", {
|
||||
id: id,
|
||||
reason: reason,
|
||||
status: err? String(err): "SUCCESS",
|
||||
});
|
||||
}));
|
||||
default:
|
||||
return void cb("INVALID_ID_LENGTH");
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
var restoreArchivedDocument = function (Env, Server, cb, data) {
|
||||
if (!Array.isArray(data)) { return void cb("EINVAL"); }
|
||||
var args = data[1];
|
||||
|
@ -368,11 +413,314 @@ var getLimits = function (Env, Server, cb) {
|
|||
cb(void 0, Env.limits);
|
||||
};
|
||||
|
||||
var isValidKey = key => {
|
||||
return typeof(key) === 'string' && key.length === 44;
|
||||
};
|
||||
|
||||
// CryptPad_AsyncStore.rpc.send('ADMIN', ['GET_USER_TOTAL_SIZE', "CrufexqXcY/z+eKJlEbNELVy5Sb7E/EAAEFI8GnEtZ0="], console.log)
|
||||
var getUserTotalSize = function (Env, Server, cb, data) {
|
||||
var signingKey = Array.isArray(data) && data[1];
|
||||
if (typeof(signingKey) !== 'string' || signingKey.length < 44) { return void cb("EINVAL"); } // FIXME use a standard check for this
|
||||
Pinning.getTotalSize(Env, signingKey, cb);
|
||||
if (!isValidKey(signingKey)) { return void cb("EINVAL"); }
|
||||
var safeKey = Util.escapeKeyCharacters(signingKey);
|
||||
Pinning.getTotalSize(Env, safeKey, cb);
|
||||
};
|
||||
|
||||
var getPinActivity = function (Env, Server, cb, data) {
|
||||
var signingKey = Array.isArray(data) && data[1];
|
||||
if (!isValidKey(signingKey)) { return void cb("EINVAL"); }
|
||||
// the db-worker ensures the signing key is of the appropriate form
|
||||
Env.getPinActivity(signingKey, function (err, response) {
|
||||
if (err) { return void cb(err && err.code); }
|
||||
cb(void 0, response);
|
||||
});
|
||||
};
|
||||
|
||||
var isUserOnline = function (Env, Server, cb, data) {
|
||||
var key = Array.isArray(data) && data[1];
|
||||
if (!isValidKey(key)) { return void cb("EINVAL"); }
|
||||
key = Util.unescapeKeyCharacters(key);
|
||||
var online = false;
|
||||
try {
|
||||
Object.keys(Env.netfluxUsers).some(function (netfluxId) {
|
||||
if (!Env.netfluxUsers[netfluxId][key]) { return; }
|
||||
online = true;
|
||||
return true;
|
||||
});
|
||||
} catch (err) {
|
||||
Env.Log.error('ADMIN_USER_ONLINE_CHECK', {
|
||||
error: err,
|
||||
key: key,
|
||||
});
|
||||
return void cb("SERVER_ERROR");
|
||||
}
|
||||
cb(void 0, online);
|
||||
};
|
||||
|
||||
var getPinLogStatus = function (Env, Server, cb, data) {
|
||||
var key = Array.isArray(data) && data[1];
|
||||
if (!isValidKey(key)) { return void cb("EINVAL"); }
|
||||
var safeKey = Util.escapeKeyCharacters(key);
|
||||
|
||||
var response = {};
|
||||
nThen(function (w) {
|
||||
Env.pinStore.isChannelAvailable(safeKey, w(function (err, result) {
|
||||
if (err) {
|
||||
return void Env.Log.error('PIN_LOG_STATUS_AVAILABLE', err);
|
||||
}
|
||||
response.live = result;
|
||||
}));
|
||||
Env.pinStore.isChannelArchived(safeKey, w(function (err, result) {
|
||||
if (err) {
|
||||
return void Env.Log.error('PIN_LOG_STATUS_ARCHIVED', err);
|
||||
}
|
||||
response.archived = result;
|
||||
}));
|
||||
}).nThen(function () {
|
||||
cb(void 0, response);
|
||||
});
|
||||
};
|
||||
|
||||
var getDocumentStatus = function (Env, Server, cb, data) {
|
||||
var id = Array.isArray(data) && data[1];
|
||||
if (typeof(id) !== 'string') { return void cb("EINVAL"); }
|
||||
var response = {};
|
||||
if (id.length === 44) {
|
||||
return void nThen(function (w) {
|
||||
BlockStore.isAvailable(Env, id, w(function (err, result) {
|
||||
if (err) {
|
||||
return void Env.Log.error('BLOCK_STATUS_AVAILABLE', err);
|
||||
}
|
||||
response.live = result;
|
||||
}));
|
||||
BlockStore.isArchived(Env, id, w(function (err, result) {
|
||||
if (err) {
|
||||
return void Env.Log.error('BLOCK_STATUS_ARCHIVED', err);
|
||||
}
|
||||
response.archived = result;
|
||||
}));
|
||||
}).nThen(function () {
|
||||
cb(void 0, response);
|
||||
});
|
||||
}
|
||||
if (id.length === 48) {
|
||||
return void nThen(function (w) {
|
||||
Env.blobStore.isBlobAvailable(id, w(function (err, result) {
|
||||
if (err) {
|
||||
return void Env.Log.error('BLOB_STATUS_AVAILABLE', err);
|
||||
}
|
||||
response.live = result;
|
||||
}));
|
||||
Env.blobStore.isBlobArchived(id, w(function (err, result) {
|
||||
if (err) {
|
||||
return void Env.Log.error('BLOB_STATUS_ARCHIVED', err);
|
||||
}
|
||||
response.archived = result;
|
||||
}));
|
||||
}).nThen(function () {
|
||||
cb(void 0, response);
|
||||
});
|
||||
}
|
||||
if (id.length !== 32) { return void cb("EINVAL"); }
|
||||
nThen(function (w) {
|
||||
Env.store.isChannelAvailable(id, w(function (err, result) {
|
||||
if (err) {
|
||||
return void Env.Log.error('CHANNEL_STATUS_AVAILABLE', err);
|
||||
}
|
||||
response.live = result;
|
||||
}));
|
||||
Env.store.isChannelArchived(id, w(function (err, result) {
|
||||
if (err) {
|
||||
return void Env.Log.error('CHANNEL_STATUS_ARCHIVED', err);
|
||||
}
|
||||
response.archived = result;
|
||||
}));
|
||||
}).nThen(function () {
|
||||
cb(void 0, response);
|
||||
});
|
||||
};
|
||||
|
||||
var getPinList = function (Env, Server, cb, data) {
|
||||
var key = Array.isArray(data) && data[1];
|
||||
if (!isValidKey(key)) { return void cb("EINVAL"); }
|
||||
var safeKey = Util.escapeKeyCharacters(key);
|
||||
|
||||
Env.getPinState(safeKey, function (err, value) {
|
||||
if (err) { return void cb(err); }
|
||||
try {
|
||||
return void cb(void 0, Object.keys(value).filter(k => value[k]));
|
||||
} catch (err2) { }
|
||||
cb("UNEXPECTED_SERVER_ERROR");
|
||||
});
|
||||
};
|
||||
|
||||
var getPinHistory = function (Env, Server, cb, data) {
|
||||
Env.Log.debug('GET_PIN_HISTORY', data);
|
||||
cb("NOT_IMPLEMENTED");
|
||||
};
|
||||
|
||||
var archivePinLog = function (Env, Server, cb, data) {
|
||||
var args = Array.isArray(data) && data[1];
|
||||
if (!args || typeof(args) !== 'object') { return void cb("EINVAL"); }
|
||||
var key = args.key;
|
||||
var reason = args.reason || '';
|
||||
if (!isValidKey(key)) { return void cb("EINVAL"); }
|
||||
var safeKey = Util.escapeKeyCharacters(key);
|
||||
|
||||
Env.pinStore.archiveChannel(safeKey, function (err) {
|
||||
Core.expireSession(Env.Sessions, safeKey);
|
||||
if (err) {
|
||||
Env.Log.error('ARCHIVE_PIN_LOG_BY_ADMIN', {
|
||||
error: err,
|
||||
safeKey: safeKey,
|
||||
reason: reason,
|
||||
});
|
||||
} else {
|
||||
Env.Log.info('ARCHIVE_PIN_LOG_BY_ADMIN', {
|
||||
safeKey: safeKey,
|
||||
reason: reason,
|
||||
});
|
||||
}
|
||||
cb(err);
|
||||
});
|
||||
};
|
||||
|
||||
var archiveBlock = function (Env, Server, cb, data) {
|
||||
var args = Array.isArray(data) && data[1];
|
||||
if (!args) { return void cb("INVALID_ARGS"); }
|
||||
var key = args.key;
|
||||
var reason = args.reason;
|
||||
if (!isValidKey(key)) { return void cb("EINVAL"); }
|
||||
BlockStore.archive(Env, key, err => {
|
||||
Env.Log.info("ARCHIVE_BLOCK_BY_ADMIN", {
|
||||
error: err,
|
||||
key: key,
|
||||
reason: reason || '',
|
||||
});
|
||||
cb(err);
|
||||
});
|
||||
};
|
||||
|
||||
var restoreArchivedBlock = function (Env, Server, cb, data) {
|
||||
var args = Array.isArray(data) && data[1];
|
||||
if (!args) { return void cb("INVALID_ARGS"); }
|
||||
var key = args.key;
|
||||
var reason = args.reason;
|
||||
if (!isValidKey(key)) { return void cb("EINVAL"); }
|
||||
BlockStore.restore(Env, key, err => {
|
||||
Env.Log.info("RESTORE_ARCHIVED_BLOCK_BY_ADMIN", {
|
||||
error: err,
|
||||
key: key,
|
||||
reason: reason || '',
|
||||
});
|
||||
cb(err);
|
||||
});
|
||||
};
|
||||
|
||||
var restoreArchivedPinLog = function (Env, Server, cb, data) {
|
||||
var args = Array.isArray(data) && data[1];
|
||||
if (!args || typeof(args) !== 'object') { return void cb("EINVAL"); }
|
||||
var key = args.key;
|
||||
var reason = args.reason || '';
|
||||
if (!isValidKey(key)) { return void cb("EINVAL"); }
|
||||
var safeKey = Util.escapeKeyCharacters(key);
|
||||
Env.pinStore.restoreArchivedChannel(safeKey, function (err) {
|
||||
Core.expireSession(Env.Sessions, safeKey);
|
||||
if (err) {
|
||||
Env.Log.error("RESTORE_ARCHIVED_PIN_LOG_BY_ADMIN", {
|
||||
error: err,
|
||||
safeKey: safeKey,
|
||||
reason: reason,
|
||||
});
|
||||
} else {
|
||||
Env.Log.info('RESTORE_ARCHIVED_PIN_LOG_BY_ADMIN', {
|
||||
safeKey: safeKey,
|
||||
reason: reason,
|
||||
});
|
||||
}
|
||||
cb(err);
|
||||
});
|
||||
};
|
||||
|
||||
var archiveOwnedDocuments = function (Env, Server, cb, data) {
|
||||
Env.Log.debug('ARCHIVE_OWNED_DOCUMENTS', data);
|
||||
cb("NOT_IMPLEMENTED");
|
||||
};
|
||||
|
||||
// quotas...
|
||||
var getUserQuota = function (Env, Server, cb, data) {
|
||||
var key = Array.isArray(data) && data[1];
|
||||
if (!isValidKey(key)) { return void cb("EINVAL"); }
|
||||
Pinning.getLimit(Env, key, cb);
|
||||
};
|
||||
|
||||
var getUserStorageStats = function (Env, Server, cb, data) {
|
||||
var key = Array.isArray(data) && data[1];
|
||||
if (!isValidKey(key)) { return void cb("EINVAL"); }
|
||||
var safeKey = Util.escapeKeyCharacters(key);
|
||||
|
||||
Env.getPinState(safeKey, function (err, value) {
|
||||
if (err) { return void cb(err); }
|
||||
try {
|
||||
var res = {
|
||||
channels: 0,
|
||||
files: 0,
|
||||
};
|
||||
Object.keys(value).forEach(k => {
|
||||
switch (k.length) {
|
||||
case 32: return void ((res.channels++));
|
||||
case 48: return void ((res.files++));
|
||||
}
|
||||
});
|
||||
return void cb(void 0, res);
|
||||
} catch (err2) { }
|
||||
cb("UNEXPECTED_SERVER_ERROR");
|
||||
});
|
||||
};
|
||||
|
||||
var getStoredMetadata = function (Env, Server, cb, data) {
|
||||
var id = Array.isArray(data) && data[1];
|
||||
if (!Core.isValidId(id)) { return void cb('INVALID_CHAN'); }
|
||||
Env.computeMetadata(id, function (err, data) {
|
||||
cb(err, data);
|
||||
});
|
||||
};
|
||||
|
||||
var getDocumentSize = function (Env, Server, cb, data) {
|
||||
var id = Array.isArray(data) && data[1];
|
||||
if (!Core.isValidId(id)) { return void cb('INVALID_CHAN'); }
|
||||
Env.getFileSize(id, (err, size) => {
|
||||
if (err) { return void cb(err); }
|
||||
cb(err, size);
|
||||
});
|
||||
};
|
||||
|
||||
var getLastChannelTime = function (Env, Server, cb, data) {
|
||||
var id = Array.isArray(data) && data[1];
|
||||
if (!Core.isValidId(id)) { return void cb('INVALID_CHAN'); }
|
||||
Env.getLastChannelTime(id, function (err, time) {
|
||||
if (err) { return void cb(err && err.code); }
|
||||
cb(err, time);
|
||||
});
|
||||
};
|
||||
|
||||
var getMetadataHistory = function (Env, Server, cb, data) {
|
||||
var id = Array.isArray(data) && data[1];
|
||||
if (!Core.isValidId(id)) { return void cb('INVALID_CHAN'); }
|
||||
|
||||
var lines = [];
|
||||
Env.msgStore.readChannelMetadata(id, (err, line) => {
|
||||
if (err) { return; }
|
||||
lines.push(line);
|
||||
}, err => {
|
||||
if (err) {
|
||||
Env.Log.error('ADMIN_GET_METADATA_HISTORY', {
|
||||
error: err,
|
||||
id: id,
|
||||
});
|
||||
return void cb(err);
|
||||
}
|
||||
cb(void 0, lines);
|
||||
});
|
||||
};
|
||||
|
||||
var commands = {
|
||||
|
@ -386,6 +734,27 @@ var commands = {
|
|||
GET_FILE_DESCRIPTOR_LIMIT: getFileDescriptorLimit,
|
||||
GET_CACHE_STATS: getCacheStats,
|
||||
|
||||
GET_PIN_ACTIVITY: getPinActivity,
|
||||
IS_USER_ONLINE: isUserOnline,
|
||||
GET_USER_QUOTA: getUserQuota,
|
||||
GET_USER_STORAGE_STATS: getUserStorageStats,
|
||||
GET_PIN_LOG_STATUS: getPinLogStatus,
|
||||
|
||||
GET_METADATA_HISTORY: getMetadataHistory,
|
||||
GET_STORED_METADATA: getStoredMetadata,
|
||||
GET_DOCUMENT_SIZE: getDocumentSize,
|
||||
GET_LAST_CHANNEL_TIME: getLastChannelTime,
|
||||
GET_DOCUMENT_STATUS: getDocumentStatus,
|
||||
|
||||
GET_PIN_LIST: getPinList,
|
||||
GET_PIN_HISTORY: getPinHistory,
|
||||
ARCHIVE_PIN_LOG: archivePinLog,
|
||||
ARCHIVE_OWNED_DOCUMENTS: archiveOwnedDocuments,
|
||||
RESTORE_ARCHIVED_PIN_LOG: restoreArchivedPinLog,
|
||||
|
||||
ARCHIVE_BLOCK: archiveBlock,
|
||||
RESTORE_ARCHIVED_BLOCK: restoreArchivedBlock,
|
||||
|
||||
ARCHIVE_DOCUMENT: archiveDocument,
|
||||
RESTORE_ARCHIVED_DOCUMENT: restoreArchivedDocument,
|
||||
|
||||
|
@ -404,6 +773,8 @@ var commands = {
|
|||
SET_LAST_EVICTION: setLastEviction,
|
||||
GET_WORKER_PROFILES: getWorkerProfiles,
|
||||
GET_USER_TOTAL_SIZE: getUserTotalSize,
|
||||
|
||||
REMOVE_DOCUMENT: removeDocument,
|
||||
};
|
||||
|
||||
Admin.command = function (Env, safeKey, data, _cb, Server) {
|
||||
|
|
|
@ -7,6 +7,56 @@ const Core = require("./core");
|
|||
const Metadata = require("./metadata");
|
||||
const HK = require("../hk-util");
|
||||
|
||||
Channel.disconnectChannelMembers = function (Env, Server, channelId, code, cb) {
|
||||
var done = Util.once(Util.mkAsync(cb));
|
||||
if (!Core.isValidId(channelId)) { return done('INVALID_ID'); }
|
||||
|
||||
const channel_cache = Env.channel_cache;
|
||||
const metadata_cache = Env.metadata_cache;
|
||||
|
||||
const clear = function () {
|
||||
delete channel_cache[channelId];
|
||||
Server.clearChannel(channelId);
|
||||
delete metadata_cache[channelId];
|
||||
};
|
||||
|
||||
|
||||
// an owner of a channel deleted it
|
||||
nThen(function (w) {
|
||||
// close the channel in the store
|
||||
Env.msgStore.closeChannel(channelId, w());
|
||||
}).nThen(function (w) {
|
||||
// Server.channelBroadcast would be better
|
||||
// but we can't trust it to track even one callback,
|
||||
// let alone many in parallel.
|
||||
// so we simulate it on this side to avoid race conditions
|
||||
Server.getChannelUserList(channelId).forEach(function (userId) {
|
||||
Server.send(userId, [
|
||||
0,
|
||||
Env.historyKeeper.id,
|
||||
"MSG",
|
||||
userId,
|
||||
JSON.stringify({
|
||||
error: code, //'EDELETED',
|
||||
channel: channelId,
|
||||
})
|
||||
], w());
|
||||
});
|
||||
}).nThen(function () {
|
||||
// clear the channel's data from memory
|
||||
// once you've sent everyone a notice that the channel has been deleted
|
||||
clear();
|
||||
done();
|
||||
}).orTimeout(function () {
|
||||
Env.Log.warn('DISCONNECT_CHANNEL_MEMBERS_TIMEOUT', {
|
||||
channelId,
|
||||
code,
|
||||
});
|
||||
clear();
|
||||
done();
|
||||
}, 30000);
|
||||
};
|
||||
|
||||
Channel.clearOwnedChannel = function (Env, safeKey, channelId, cb, Server) {
|
||||
if (typeof(channelId) !== 'string' || channelId.length !== 32) {
|
||||
return cb('INVALID_ARGUMENTS');
|
||||
|
@ -90,44 +140,9 @@ var archiveOwnedChannel = function (Env, safeKey, channelId, __cb, Server) {
|
|||
}
|
||||
cb(void 0, 'OK');
|
||||
|
||||
const channel_cache = Env.channel_cache;
|
||||
const metadata_cache = Env.metadata_cache;
|
||||
|
||||
const clear = function () {
|
||||
delete channel_cache[channelId];
|
||||
Server.clearChannel(channelId);
|
||||
delete metadata_cache[channelId];
|
||||
};
|
||||
|
||||
// an owner of a channel deleted it
|
||||
nThen(function (w) {
|
||||
// close the channel in the store
|
||||
Env.msgStore.closeChannel(channelId, w());
|
||||
}).nThen(function (w) {
|
||||
// Server.channelBroadcast would be better
|
||||
// but we can't trust it to track even one callback,
|
||||
// let alone many in parallel.
|
||||
// so we simulate it on this side to avoid race conditions
|
||||
Server.getChannelUserList(channelId).forEach(function (userId) {
|
||||
Server.send(userId, [
|
||||
0,
|
||||
Env.historyKeeper.id,
|
||||
"MSG",
|
||||
userId,
|
||||
JSON.stringify({
|
||||
error: 'EDELETED',
|
||||
channel: channelId,
|
||||
})
|
||||
], w());
|
||||
});
|
||||
}).nThen(function () {
|
||||
// clear the channel's data from memory
|
||||
// once you've sent everyone a notice that the channel has been deleted
|
||||
clear();
|
||||
}).orTimeout(function () {
|
||||
Env.Log.warn('ON_CHANNEL_DELETED_TIMEOUT', channelId);
|
||||
clear();
|
||||
}, 30000);
|
||||
Channel.disconnectChannelMembers(Env, Server, channelId, 'EDELETED', err => {
|
||||
if (err) { } // TODO
|
||||
});
|
||||
});
|
||||
});
|
||||
};
|
||||
|
|
|
@ -116,6 +116,7 @@ Pinning.getTotalSize = function (Env, safeKey, cb) {
|
|||
Pinning.removePins = function (Env, safeKey, cb) {
|
||||
// FIXME respect the queue
|
||||
Env.pinStore.archiveChannel(safeKey, function (err) {
|
||||
Core.expireSession(Env.Sessions, safeKey);
|
||||
Env.Log.info('ARCHIVAL_PIN_BY_OWNER_RPC', {
|
||||
safeKey: safeKey,
|
||||
status: err? String(err): 'SUCCESS',
|
||||
|
@ -293,4 +294,3 @@ Pinning.getDeletedPads = function (Env, channels, cb) {
|
|||
Pinning.isChannelPinned = function (Env, channel, cb) {
|
||||
return void cb(void 0, true);
|
||||
};
|
||||
|
||||
|
|
|
@ -174,7 +174,7 @@ var queryQuotaServer = function (Env, cb) {
|
|||
var body = JSON.stringify(rawBody);
|
||||
|
||||
var options = {
|
||||
host: Env.quota_api,
|
||||
host: undefined,
|
||||
path: '/api/getquota',
|
||||
method: 'POST',
|
||||
headers: {
|
||||
|
@ -184,11 +184,23 @@ var queryQuotaServer = function (Env, cb) {
|
|||
};
|
||||
|
||||
var H = Https;
|
||||
|
||||
if (Env.quota_api === 'localhost:3002') {
|
||||
H = Http;
|
||||
options.host = 'localhost';
|
||||
options.port = 3002;
|
||||
if (typeof(Env.accounts_api) === 'string') {
|
||||
try {
|
||||
let url = new URL(Env.accounts_api);
|
||||
if (!['https:', 'http:'].includes(url.protocol)) { throw new Error("INVALID_PROTOCOL"); }
|
||||
if (url.protocol === 'http:') { H = Http; }
|
||||
let port = Number(url.port);
|
||||
if (port && typeof(port) === 'number') { options.port = port; }
|
||||
options.host = url.hostname;
|
||||
Env.Log.info("USING_CUSTOM_ACCOUNTS_API", {
|
||||
value: Env.accounts_api,
|
||||
});
|
||||
} catch (err) {
|
||||
Env.Log.error("INVALID_CUSTOM_QUOTA_API", {
|
||||
error: err.message,
|
||||
value: Env.accounts_api,
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
var req = H.request(options, function (response) {
|
||||
|
@ -230,7 +242,7 @@ Quota.updateCachedLimits = function (Env, _cb) {
|
|||
|
||||
Quota.applyCustomLimits(Env);
|
||||
|
||||
if (!Env.allowSubscriptions && !Env.quota_api) { return void cb(); }
|
||||
if (!Env.allowSubscriptions || !Env.accounts_api) { return void cb(); }
|
||||
Quota.queryQuotaServer(Env, function (err, json) {
|
||||
if (err) { return void cb(err); }
|
||||
if (!json) { return void cb(); }
|
||||
|
|
|
@ -74,7 +74,6 @@ module.exports.create = function (config) {
|
|||
NO_SANDBOX: NO_SANDBOX,
|
||||
httpSafePort: httpSafePort,
|
||||
accounts_api: config.accounts_api || undefined, // this simplifies integration with an accounts page
|
||||
quota_api: config.quota_api || undefined, // hourly check quota
|
||||
|
||||
shouldUpdateNode: !isRecentVersion(),
|
||||
|
||||
|
|
|
@ -203,15 +203,15 @@ RPC.create = function (Env, cb) {
|
|||
var updateLimitInterval = function () {
|
||||
Quota.updateCachedLimits(Env, function (e) {
|
||||
// failure is expected if they have not specified a quota API endpoint
|
||||
if (!Env.quota_api) { return; }
|
||||
if (!Env.accounts_api) { return; }
|
||||
if (e) {
|
||||
Env.WARN('limitUpdate', e);
|
||||
Env.WARN('LIMIT_UPDATE', e);
|
||||
}
|
||||
});
|
||||
};
|
||||
Quota.applyCustomLimits(Env);
|
||||
updateLimitInterval();
|
||||
if (Env.quota_api) {
|
||||
if (Env.accounts_api) {
|
||||
Env.intervals.quotaUpdate = setInterval(updateLimitInterval, 3600*1000);
|
||||
}
|
||||
|
||||
|
|
|
@ -73,9 +73,11 @@ Stats.instanceData = function (Env) {
|
|||
//data.archiveRetentionTime = Env.archiveRetentionTime,
|
||||
}
|
||||
|
||||
// we won't consider instances for public listings
|
||||
// unless they opt to provide more info about themselves
|
||||
if (!Env.provideAggregateStatistics) { return data; }
|
||||
// Admins can opt-in to providing more detailed information about the extent of the instance's usage
|
||||
if (!Env.provideAggregateStatistics) {
|
||||
// check how many instances provide stats before we put more work into it
|
||||
data.providesAggregateStatistics = true;
|
||||
}
|
||||
|
||||
return data;
|
||||
};
|
||||
|
|
|
@ -585,6 +585,19 @@ BlobStore.create = function (config, _cb) {
|
|||
},
|
||||
},
|
||||
|
||||
isBlobAvailable: function (blobId, _cb) {
|
||||
var cb = Util.once(Util.mkAsync(_cb));
|
||||
if (!isValidId(blobId)) { return void cb("INVALID_ID"); }
|
||||
var path = makeBlobPath(Env, blobId);
|
||||
isFile(path, cb);
|
||||
},
|
||||
isBlobArchived: function (blobId, _cb) {
|
||||
var cb = Util.once(Util.mkAsync(_cb));
|
||||
if (!isValidId(blobId)) { return void cb("INVALID_ID"); }
|
||||
var path = prependArchive(Env, makeBlobPath(Env, blobId));
|
||||
isFile(path, cb);
|
||||
},
|
||||
|
||||
closeBlobstage: function (safeKey) {
|
||||
closeBlobstage(Env, safeKey);
|
||||
},
|
||||
|
|
|
@ -55,6 +55,61 @@ Block.archive = function (Env, publicKey, _cb) {
|
|||
}, cb);
|
||||
};
|
||||
|
||||
Block.restore = function (Env, publicKey, _cb) {
|
||||
var cb = Util.once(Util.mkAsync(_cb));
|
||||
|
||||
// derive the filepath
|
||||
var livePath = Block.mkPath(Env, publicKey);
|
||||
|
||||
// make sure the path is valid
|
||||
if (typeof(livePath) !== 'string') {
|
||||
return void cb('E_INVALID_BLOCK_PATH');
|
||||
}
|
||||
|
||||
var archivePath = Block.mkArchivePath(Env, publicKey);
|
||||
// make sure the path is valid
|
||||
if (typeof(archivePath) !== 'string') {
|
||||
return void cb('E_INVALID_BLOCK_ARCHIVAL_PATH');
|
||||
}
|
||||
|
||||
// TODO Env.incrementBytesWritten
|
||||
Fse.move(archivePath, livePath, {
|
||||
//overwrite: true,
|
||||
}, cb);
|
||||
};
|
||||
|
||||
var isValidKey = function (publicKey) {
|
||||
return typeof(publicKey) === 'string' && publicKey.length === 44;
|
||||
};
|
||||
|
||||
var exists = function (path, cb) {
|
||||
Fs.stat(path, function (err, stat) {
|
||||
if (err) {
|
||||
if (err.code === 'ENOENT') {
|
||||
return void cb(void 0, false);
|
||||
}
|
||||
return void cb(err);
|
||||
}
|
||||
if (!stat.isFile()) { return void cb('E_NOT_FILE'); }
|
||||
return void cb(void 0, true);
|
||||
});
|
||||
};
|
||||
|
||||
var checkPath = function (Env, publicKey, pathFunction, _cb) {
|
||||
var cb = Util.once(Util.mkAsync(_cb));
|
||||
if (!isValidKey(publicKey)) { return void cb("INVALID_ARGS"); }
|
||||
var path = pathFunction(Env, publicKey);
|
||||
exists(path, cb);
|
||||
};
|
||||
|
||||
Block.isAvailable = function (Env, publicKey, _cb) {
|
||||
checkPath(Env, publicKey, Block.mkPath, _cb);
|
||||
};
|
||||
|
||||
Block.isArchived = function (Env, publicKey, _cb) {
|
||||
checkPath(Env, publicKey, Block.mkArchivePath, _cb);
|
||||
};
|
||||
|
||||
Block.check = function (Env, publicKey, _cb) { // 'check' because 'exists' implies boolean
|
||||
var cb = Util.once(Util.mkAsync(_cb));
|
||||
var path = Block.mkPath(Env, publicKey);
|
||||
|
|
|
@ -85,6 +85,62 @@ var channelExists = function (filepath, cb) {
|
|||
});
|
||||
};
|
||||
|
||||
var isChannelAvailable = function (env, channelName, cb) {
|
||||
// construct the path
|
||||
var filepath = mkPath(env, channelName);
|
||||
var metapath = mkMetadataPath(env, channelName);
|
||||
|
||||
// (ansuz) I'm uncertain whether this task should be unordered or ordered.
|
||||
// there's a round trip to the client (and possibly the user) before they decide
|
||||
// to act on the information of whether there is already content present in this channel.
|
||||
// so it's practically impossible to avoid race conditions where someone else creates
|
||||
// some content before you.
|
||||
// if that's the case, it's basically impossible that you'd generate the same signing key,
|
||||
// and thus historykeeper should reject the signed messages of whoever loses the race.
|
||||
// thus 'unordered' seems appropriate.
|
||||
env.schedule.unordered(channelName, function (next) {
|
||||
var done = Util.once(Util.mkAsync(Util.both(cb, next)));
|
||||
var exists = false;
|
||||
var handler = function (err, _exists) {
|
||||
if (err) { return void done(err); }
|
||||
exists = exists || _exists;
|
||||
};
|
||||
|
||||
nThen(function (w) {
|
||||
channelExists(filepath, w(handler));
|
||||
channelExists(metapath, w(handler));
|
||||
}).nThen(function () {
|
||||
done(void 0, exists);
|
||||
});
|
||||
});
|
||||
};
|
||||
|
||||
var isChannelArchived = function (env, channelName, cb) {
|
||||
// construct the path
|
||||
var filepath = mkArchivePath(env, channelName);
|
||||
var metapath = mkArchiveMetadataPath(env, channelName);
|
||||
|
||||
// as with the method above, somebody might remove, restore, or overwrite an archive
|
||||
// in the time that it takes to answer this query and to execute whatever follows.
|
||||
// since it's impossible to win the race every time let's just make this 'unordered'
|
||||
|
||||
env.schedule.unordered(channelName, function (next) {
|
||||
var done = Util.once(Util.mkAsync(Util.both(cb, next)));
|
||||
var exists = false;
|
||||
var handler = function (err, _exists) {
|
||||
if (err) { return void done(err); }
|
||||
exists = exists || _exists;
|
||||
};
|
||||
|
||||
nThen(function (w) {
|
||||
channelExists(filepath, w(handler));
|
||||
channelExists(metapath, w(handler));
|
||||
}).nThen(function () {
|
||||
done(void 0, exists);
|
||||
});
|
||||
});
|
||||
};
|
||||
|
||||
const destroyStream = function (stream) {
|
||||
if (!stream) { return; }
|
||||
try {
|
||||
|
@ -683,6 +739,7 @@ var unarchiveChannel = function (env, channelName, cb) {
|
|||
// so unlike 'archiveChannel' we won't overwrite.
|
||||
// Fse.move will call back with EEXIST in such a situation
|
||||
|
||||
var ENOENT = false;
|
||||
nThen(function (w) {
|
||||
// if either metadata or a file exist in prod, abort
|
||||
channelExists(channelPath, w(function (err, exists) {
|
||||
|
@ -702,7 +759,7 @@ var unarchiveChannel = function (env, channelName, cb) {
|
|||
}
|
||||
if (exists) {
|
||||
w.abort();
|
||||
return CB("UNARCHIVE_METADATA_CONFLICT");
|
||||
return CB("UNARCHIVE_METADATA_CONFLICT"); // XXX
|
||||
}
|
||||
}));
|
||||
}).nThen(function (w) {
|
||||
|
@ -710,6 +767,10 @@ var unarchiveChannel = function (env, channelName, cb) {
|
|||
var archiveChannelPath = mkArchivePath(env, channelName);
|
||||
// restore the archived channel
|
||||
Fse.move(archiveChannelPath, channelPath, w(function (err) {
|
||||
if (err && err.code === 'ENOENT') {
|
||||
ENOENT = true;
|
||||
return;
|
||||
}
|
||||
if (err) {
|
||||
w.abort();
|
||||
return void CB(err);
|
||||
|
@ -723,6 +784,10 @@ var unarchiveChannel = function (env, channelName, cb) {
|
|||
Fse.move(archiveMetadataPath, metadataPath, w(function (err) {
|
||||
// if there's nothing to move, you're done.
|
||||
if (err && err.code === 'ENOENT') {
|
||||
if (ENOENT) {
|
||||
// nothing was deleted? the client probably wants to know about that.
|
||||
return void cb("ENOENT");
|
||||
}
|
||||
return CB();
|
||||
}
|
||||
// call back with an error if something goes wrong
|
||||
|
@ -1175,31 +1240,12 @@ module.exports.create = function (conf, _cb) {
|
|||
// check if a channel exists in the database
|
||||
isChannelAvailable: function (channelName, cb) {
|
||||
if (!isValidChannelId(channelName)) { return void cb(new Error('EINVAL')); }
|
||||
// construct the path
|
||||
var filepath = mkPath(env, channelName);
|
||||
// (ansuz) I'm uncertain whether this task should be unordered or ordered.
|
||||
// there's a round trip to the client (and possibly the user) before they decide
|
||||
// to act on the information of whether there is already content present in this channel.
|
||||
// so it's practically impossible to avoid race conditions where someone else creates
|
||||
// some content before you.
|
||||
// if that's the case, it's basically impossible that you'd generate the same signing key,
|
||||
// and thus historykeeper should reject the signed messages of whoever loses the race.
|
||||
// thus 'unordered' seems appropriate.
|
||||
schedule.unordered(channelName, function (next) {
|
||||
channelExists(filepath, Util.both(cb, next));
|
||||
});
|
||||
isChannelAvailable(env, channelName, cb);
|
||||
},
|
||||
// check if a channel exists in the archive
|
||||
isChannelArchived: function (channelName, cb) {
|
||||
if (!isValidChannelId(channelName)) { return void cb(new Error('EINVAL')); }
|
||||
// construct the path
|
||||
var filepath = mkArchivePath(env, channelName);
|
||||
// as with the method above, somebody might remove, restore, or overwrite an archive
|
||||
// in the time that it takes to answer this query and to execute whatever follows.
|
||||
// since it's impossible to win the race every time let's just make this 'unordered'
|
||||
schedule.unordered(channelName, function (next) {
|
||||
channelExists(filepath, Util.both(cb, next));
|
||||
});
|
||||
isChannelArchived(env, channelName, cb);
|
||||
},
|
||||
// move a channel from the database to the archive, along with its metadata
|
||||
archiveChannel: function (channelName, cb) {
|
||||
|
|
|
@ -381,8 +381,8 @@ const getOlderHistory = function (data, cb) {
|
|||
};
|
||||
|
||||
const getPinState = function (data, cb) {
|
||||
const safeKey = data.key;
|
||||
|
||||
if (typeof(data.key) !== 'string') { return void cb('INVALID_KEY'); }
|
||||
const safeKey = Util.escapeKeyCharacters(data.key);
|
||||
var ref = {};
|
||||
var lineHandler = Pins.createLineHandler(ref, Env.Log.error);
|
||||
|
||||
|
@ -504,8 +504,9 @@ const getHashOffset = function (data, cb) {
|
|||
};
|
||||
|
||||
const removeOwnedBlob = function (data, cb) {
|
||||
if (typeof(data.safeKey) !== 'string') { return void cb("INVALID_KEY"); }
|
||||
const blobId = data.blobId;
|
||||
const safeKey = data.safeKey;
|
||||
const safeKey = Util.escapeKeyCharacters(data.safeKey);
|
||||
|
||||
nThen(function (w) {
|
||||
// check if you have permissions
|
||||
|
@ -570,8 +571,9 @@ var reportStatus = function (Env, label, safeKey, err, id, size) {
|
|||
|
||||
const completeUpload = function (data, cb) {
|
||||
if (!data) { return void cb('INVALID_ARGS'); }
|
||||
if (typeof(data.safeKey) !== 'string') { return void cb("INVALID_KEY"); }
|
||||
var owned = data.owned;
|
||||
var safeKey = data.safeKey;
|
||||
var safeKey = Util.escapeKeyCharacters(data.safeKey);
|
||||
var arg = data.arg;
|
||||
var size = data.size;
|
||||
|
||||
|
@ -591,6 +593,47 @@ const completeUpload = function (data, cb) {
|
|||
});
|
||||
};
|
||||
|
||||
const getPinActivity = function (data, cb) {
|
||||
if (!data) { return void cb("INVALID_ARGS"); }
|
||||
if (typeof(data.key) !== 'string') { return void cb("INVALID_KEY"); }
|
||||
var safeKey = Util.escapeKeyCharacters(data.key);
|
||||
var first;
|
||||
var latest;
|
||||
pinStore.getMessages(safeKey, line => {
|
||||
if (!line || !line.trim()) { return; }
|
||||
try {
|
||||
var parsed = JSON.parse(line);
|
||||
var temp = parsed[parsed.length - 1];
|
||||
if (!temp || typeof(temp) !== 'number') { return; }
|
||||
latest = temp;
|
||||
if (first) { return; }
|
||||
first = latest;
|
||||
} catch (err) { }
|
||||
}, function (err) {
|
||||
if (err) { return void cb(err); }
|
||||
cb(void 0, {
|
||||
first: first,
|
||||
latest: latest,
|
||||
});
|
||||
});
|
||||
};
|
||||
|
||||
const getLastChannelTime = function (data, cb) {
|
||||
if (!data) { return void cb("INVALID_ARGS"); }
|
||||
var latest;
|
||||
store.getMessages(data.channel, function (line) {
|
||||
try {
|
||||
var parsed = JSON.parse(line);
|
||||
var temp = parsed[parsed.length - 1];
|
||||
if (!temp || typeof(temp) !== 'number') { return; }
|
||||
latest = temp;
|
||||
} catch (err) { }
|
||||
}, function (err) {
|
||||
if (err) { return void cb(err); }
|
||||
cb(void 0, latest);
|
||||
});
|
||||
};
|
||||
|
||||
const COMMANDS = {
|
||||
COMPUTE_INDEX: computeIndex,
|
||||
COMPUTE_METADATA: computeMetadata,
|
||||
|
@ -606,6 +649,8 @@ const COMMANDS = {
|
|||
WRITE_TASK: writeTask,
|
||||
EVICT_INACTIVE: evictInactive,
|
||||
COMPLETE_UPLOAD: completeUpload,
|
||||
GET_PIN_ACTIVITY: getPinActivity,
|
||||
GET_LAST_CHANNEL_TIME: getLastChannelTime,
|
||||
};
|
||||
|
||||
COMMANDS.INLINE = function (data, cb) {
|
||||
|
|
|
@ -340,10 +340,26 @@ Workers.initialize = function (Env, config, _cb) {
|
|||
});
|
||||
};
|
||||
|
||||
Env.getPinActivity = function (safeKey, cb) {
|
||||
Env.pinStore.getWeakLock(safeKey, function (next) {
|
||||
sendCommand({
|
||||
key: safeKey,
|
||||
command: 'GET_PIN_ACTIVITY',
|
||||
}, Util.both(next, cb));
|
||||
});
|
||||
};
|
||||
|
||||
Env.getLastChannelTime = function (channel, cb) {
|
||||
sendCommand({
|
||||
command: 'GET_LAST_CHANNEL_TIME',
|
||||
channel: channel,
|
||||
}, cb);
|
||||
};
|
||||
|
||||
Env.getFileSize = function (channel, cb) {
|
||||
sendCommand({
|
||||
command: 'GET_FILE_SIZE',
|
||||
channel: channel,
|
||||
channel: channel,
|
||||
}, cb);
|
||||
};
|
||||
|
||||
|
|
|
@ -1,12 +1,12 @@
|
|||
{
|
||||
"name": "cryptpad",
|
||||
"version": "5.0.0",
|
||||
"version": "5.1.0",
|
||||
"lockfileVersion": 2,
|
||||
"requires": true,
|
||||
"packages": {
|
||||
"": {
|
||||
"name": "cryptpad",
|
||||
"version": "5.0.0",
|
||||
"version": "5.1.0",
|
||||
"license": "AGPL-3.0+",
|
||||
"dependencies": {
|
||||
"@mcrowe/minibloom": "^0.2.0",
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"name": "cryptpad",
|
||||
"description": "realtime collaborative visual editor with zero knowlege server",
|
||||
"version": "5.0.0",
|
||||
"version": "5.1.0",
|
||||
"license": "AGPL-3.0+",
|
||||
"repository": {
|
||||
"type": "git",
|
||||
|
@ -49,9 +49,7 @@
|
|||
"unused-translations": "node ./scripts/translations/unused-translations.js",
|
||||
"test": "node scripts/TestSelenium.js",
|
||||
"test-rpc": "cd scripts/tests && node test-rpc",
|
||||
"template": "cd customize.dist/src && for page in ../index.html ../contact.html ../features.html ../../www/login/index.html ../../www/register/index.html ../../www/user/index.html;do echo $page; cp template.html $page; done;",
|
||||
"evict-inactive": "node scripts/evict-inactive.js",
|
||||
"make-opengraph": "node scripts/build.js",
|
||||
"clean-opengraph": "rm -rf customize/www/"
|
||||
"build": "node scripts/build.js"
|
||||
}
|
||||
}
|
||||
|
|
25
readme.md
25
readme.md
|
@ -2,17 +2,19 @@
|
|||
|
||||
CryptPad is a collaboration suite that is end-to-end-encrypted and open-source. It is built to enable collaboration, synchronizing changes to documents in real time. Because all data is encrypted, the service and its administrators have no way of seeing the content being edited and stored.
|
||||
|
||||
![CryptPad screenshot](screenshot.png "Private real-time collaboration on a Rich Text document.")
|
||||
![Drive screenshot](screenshot.png "preview of the CryptDrive")
|
||||
|
||||
![Suite screenshots](screenshot-suite.png "all CyptPad applications: Document, Sheet, Presentation, Form, Kanban, Code, Rich Text, Whiteboard")
|
||||
|
||||
# Installation
|
||||
|
||||
## For development
|
||||
|
||||
Our [developer guide](https://docs.cryptpad.fr/en/dev_guide/setup.html) provides instructions for setting up a local instance without HTTPS or our more advanced security features.
|
||||
Our [developer guide](https://docs.cryptpad.org/en/dev_guide/setup.html) provides instructions for setting up a local instance without HTTPS or our more advanced security features.
|
||||
|
||||
## For production
|
||||
|
||||
Configuring CryptPad for production requires a little more work, but the process is described in our [admin installation guide](https://docs.cryptpad.fr/en/admin_guide/installation.html). From there you can find more information about customization and maintenance.
|
||||
Configuring CryptPad for production requires a little more work, but the process is described in our [admin installation guide](https://docs.cryptpad.org/en/admin_guide/installation.html). From there you can find more information about customization and maintenance.
|
||||
|
||||
## Current version
|
||||
|
||||
|
@ -54,15 +56,20 @@ meet our strict criteria for safety.
|
|||
# Translations
|
||||
|
||||
CryptPad can be translated with nothing more than a web browser via our
|
||||
[Weblate instance](https://weblate.cryptpad.fr/projects/cryptpad/app/).
|
||||
[Weblate instance](https://weblate.cryptpad.fr/projects/cryptpad/app/). See the state of the translated languages:
|
||||
|
||||
![](https://weblate.cryptpad.fr/widgets/cryptpad/-/app/multi-auto.svg)
|
||||
|
||||
More information about this can be found in [our translation guide](/customize.dist/translations/README.md).
|
||||
|
||||
# Contacting Us
|
||||
|
||||
You can reach members of the CryptPad development team on [Twitter](https://twitter.com/cryptpad),
|
||||
via our [GitHub issue tracker](https://github.com/xwiki-labs/cryptpad/issues/), on our
|
||||
[Matrix channel](https://riot.im/app/#/room/#cryptpad:matrix.org), or by
|
||||
[e-mail](mailto:research@xwiki.com).
|
||||
The best places to reach the development team and the community are the [CryptPad Forum](https://forum.cryptpad.org) and the [Matrix chat](https://matrix.to/#/#cryptpad:matrix.xwiki.com)
|
||||
|
||||
The team is also on social media:
|
||||
- Mastodon: [@cryptpad@fosstodon.org](https://fosstodon.org/@cryptpad)
|
||||
- Twitter: [@cryptpad](https://twitter.com/cryptpad)
|
||||
|
||||
|
||||
# Team
|
||||
|
||||
|
@ -70,7 +77,7 @@ CryptPad is actively developed by a team at [XWiki SAS](https://www.xwiki.com),
|
|||
|
||||
# Contributing
|
||||
|
||||
We love Open Source and we love contribution. Learn more about [contributing](https://docs.cryptpad.fr/en/how_to_contribute.html).
|
||||
We love Open Source and we love contribution. Learn more about [contributing](https://docs.cryptpad.org/en/how_to_contribute.html).
|
||||
|
||||
If you have any questions or comments, or if you're interested in contributing to CryptPad, come say hi in our [Matrix channel](https://app.element.io/#/room/#cryptpad:matrix.xwiki.com).
|
||||
|
||||
|
|
Binary file not shown.
After Width: | Height: | Size: 207 KiB |
BIN
screenshot.png
BIN
screenshot.png
Binary file not shown.
Before Width: | Height: | Size: 116 KiB After Width: | Height: | Size: 125 KiB |
311
scripts/build.js
311
scripts/build.js
|
@ -3,29 +3,8 @@
|
|||
var Fs = require("fs");
|
||||
var Fse = require("fs-extra");
|
||||
var Path = require("path");
|
||||
var OS = require("os");
|
||||
|
||||
if (process.env.CRYPTPAD_CONFIG) {
|
||||
/* using Fs.existsSync() function and __dirname variable here won't filter
|
||||
environment variables like CRYPTPAD_CONFIG='/../docs/config2.js', while require()
|
||||
inside load-config.js will, outputing some non intellegible error messages.
|
||||
(plus, it won't handle missing '.js' in file names neither) */
|
||||
try {
|
||||
require.resolve(process.env.CRYPTPAD_CONFIG);
|
||||
} catch (e) {
|
||||
console.error(`The configuration file ${process.env.CRYPTPAD_CONFIG} can not
|
||||
be loaded. Please review your CRYPTPAD_CONFIG environment variable.`
|
||||
.replace(/\s{2,}/g, ' '));
|
||||
process.exit(1);
|
||||
}
|
||||
} else {
|
||||
if (!Fs.existsSync(__dirname + '/../config/config.js')) {
|
||||
console.error(`This script needs the file config/config.js to work properly.
|
||||
You can make one by copying config/config.example.js. Check the
|
||||
value of httpUnsafeOrigin for this script to behave as expected.`
|
||||
.replace(/\s{2,}/g, ' '));
|
||||
process.exit(1);
|
||||
}
|
||||
}
|
||||
var config = require("../lib/load-config");
|
||||
|
||||
var swap = function (s, o) {
|
||||
|
@ -50,40 +29,88 @@ var swap = function (s, o) {
|
|||
});
|
||||
};
|
||||
|
||||
const ogData = `
|
||||
<meta property="og:url" content="{{rootUrl}}/{{app}}/">
|
||||
<meta property="og:type" content="website">
|
||||
<meta property="og:title" content="{{title}}">
|
||||
<meta property="og:description" content="CryptPad: end-to-end encrypted collaboration suite">
|
||||
<meta property="og:image" content="{{rootUrl}}/customize/images/opengraph_preview/{{image}}">`;
|
||||
var Messages = require("../www/common/translations/messages.json");
|
||||
|
||||
var previewExists = function (name) {
|
||||
if (Fs.existsSync(__dirname + '/../customize/images/opengraph_preview/')) {
|
||||
return Fs.existsSync(__dirname + `/../customize/images/opengraph_preview/${name}`);
|
||||
var types = Messages.type;
|
||||
[ 'calendar', 'notifications', ].forEach(k => { types[k] = Messages[k]; });
|
||||
|
||||
// FIXME it would be better if these were just included in the translated list of types
|
||||
types.settings = Messages.settings_title;
|
||||
types.support = Messages.supportPage;
|
||||
types.profile = Messages.profilePage;
|
||||
|
||||
var translations;
|
||||
try {
|
||||
translations = Fs.readdirSync('./www/common/translations/').filter(name => {
|
||||
return /messages\..*\.json$/.test(name);
|
||||
});
|
||||
} catch (err) {
|
||||
console.error(err);
|
||||
}
|
||||
|
||||
var preferredLanguage = config.preferredLanguage;
|
||||
var Preferred;
|
||||
|
||||
var noScriptContent = [ Messages.ui_jsRequired ];
|
||||
translations.forEach(name => {
|
||||
var path = `./www/common/translations/${name}`;
|
||||
var content;
|
||||
try {
|
||||
content = JSON.parse(Fs.readFileSync(path, 'utf-8'));
|
||||
} catch (err) {
|
||||
return void console.error(`Failed to parse ${path}`);
|
||||
}
|
||||
return Fs.existsSync(__dirname + `/../customize.dist/images/opengraph_preview/${name}`);
|
||||
|
||||
if (name === `messages.${preferredLanguage}.json`) { Preferred = content; }
|
||||
|
||||
if (typeof(content.ui_jsRequired) !== 'string') { return; }
|
||||
noScriptContent.push(content.ui_jsRequired);
|
||||
});
|
||||
|
||||
var makeNoscript = (indent) => {
|
||||
var lines = noScriptContent.map(s => {
|
||||
return `${indent + indent}<p class="noscript">${s}</p>`;
|
||||
}).join('\n');
|
||||
return `${indent}<noscript>\n${lines}\n${indent}</noscript>`;
|
||||
};
|
||||
|
||||
var templateOG = function (a, type) {
|
||||
return swap(ogData, {
|
||||
rootUrl: config.httpUnsafeOrigin,
|
||||
app: a,
|
||||
title: type && `Encrypted ${type}` || 'CryptPad',
|
||||
image: previewExists(`og-${a}.png`) && `og-${a}.png` || `og-default.png`
|
||||
var getKey = function (key, args) {
|
||||
var source;
|
||||
|
||||
if (Preferred && Preferred[key]) {
|
||||
source = Preferred[key];
|
||||
} else if (Messages && Messages[key]) {
|
||||
source = Messages[key];
|
||||
} else {
|
||||
return '?';
|
||||
}
|
||||
|
||||
if (typeof(source) !== 'string') { return '?'; }
|
||||
if (!Array.isArray(args)) { return source; }
|
||||
|
||||
return source.replace(/\{(\d+)\}/g, (str, p1) => {
|
||||
if (['string', 'number'].includes(typeof(p1))) { return args[p1]; }
|
||||
console.error("Only strings and numbers can be used in _getKey params.\nAborting...");
|
||||
process.exit(1);
|
||||
});
|
||||
};
|
||||
|
||||
var insert = function (src, template) {
|
||||
var matchs = src.match(/(<meta .*>)|(.*<\/title>)/g);
|
||||
|
||||
if (!matchs || !matchs.length) {
|
||||
return src;
|
||||
var previewExists = function (name) {
|
||||
if (Fs.existsSync('./customize/images/opengraph_preview/')) {
|
||||
return Fs.existsSync(`./customize/images/opengraph_preview/${name}`);
|
||||
}
|
||||
return src.replace(matchs.at(-1), `$& ${template}`);
|
||||
return Fs.existsSync(`./customize.dist/images/opengraph_preview/${name}`);
|
||||
};
|
||||
|
||||
var buildPath = __dirname + '/../customize/www';
|
||||
var tmpPath = __dirname + '/../CRYPTPAD_TEMP_BUILD';
|
||||
var imagePath = `/customize/images/opengraph_preview/`;
|
||||
|
||||
var appImagePath = a => {
|
||||
var partial = previewExists(`og-${a}.png`) && `og-${a}.png` || `og-default.png`;
|
||||
return new URL(imagePath + partial, config.httpUnsafeOrigin).href;
|
||||
};
|
||||
|
||||
var buildPath = Path.resolve('./customize');
|
||||
var tmpPath = Path.join(OS.tmpdir(), '/CRYPTPAD_TEMP_BUILD/');
|
||||
|
||||
var write = function (content, dest) {
|
||||
console.log(`Creating ${dest}`);
|
||||
|
@ -92,15 +119,12 @@ var write = function (content, dest) {
|
|||
var dirPath = Path.dirname(path);
|
||||
Fse.mkdirpSync(dirPath);
|
||||
Fs.writeFileSync(path, content);
|
||||
console.log();
|
||||
};
|
||||
|
||||
console.log("Creating target directories");
|
||||
// remove tmp path so we start fresh
|
||||
Fse.removeSync(tmpPath);
|
||||
Fse.mkdirpSync(tmpPath);
|
||||
|
||||
var srcAppTypes = Fs.readFileSync(__dirname + '/../www/common/translations/messages.json', 'utf8');
|
||||
var types = JSON.parse(srcAppTypes).type;
|
||||
|
||||
var appIndexesToBuild = [
|
||||
'sheet',
|
||||
|
@ -114,25 +138,182 @@ var appIndexesToBuild = [
|
|||
'whiteboard',
|
||||
'slide',
|
||||
'file',
|
||||
'calendar',
|
||||
'drive',
|
||||
'teams'
|
||||
'teams',
|
||||
'contacts',
|
||||
|
||||
'notifications',
|
||||
'checkup',
|
||||
'file',
|
||||
'profile',
|
||||
'settings',
|
||||
'support',
|
||||
// bounce ??
|
||||
];
|
||||
|
||||
var baseAppPath = './www/';
|
||||
const ogData = `
|
||||
<meta property="og:url" content="{{url}}">
|
||||
<meta property="og:type" content="website">
|
||||
<meta property="og:title" content="{{title}}">
|
||||
<meta property="og:description" content="{{description}}">
|
||||
<meta property="og:image" content="{{image}}">
|
||||
<meta property="twitter:card" content="summary_large_image">`;
|
||||
|
||||
|
||||
var versionString = String(+new Date());
|
||||
|
||||
var processPage = (src) => {
|
||||
return src
|
||||
.replace(/(\s*)<noscript>([\s\S]*)<\/noscript>/, (all, space /*, content */) => {
|
||||
var indent = space.split('\n').filter(Boolean);
|
||||
if (indent && indent[0]) {
|
||||
return '\n' + makeNoscript(indent[0] || ' ');
|
||||
}
|
||||
return space + makeNoscript(' ');
|
||||
})
|
||||
.replace(/pre\-loading\.js\?ver=([^"]+)"/, (all, content) => {
|
||||
return all.replace(content, versionString);
|
||||
})
|
||||
.replace(/pre\-loading\.css\?ver=([^"]+)"/, (all, content) => {
|
||||
return all.replace(content, versionString);
|
||||
});
|
||||
};
|
||||
|
||||
var checkPage = (built, srcPath) => {
|
||||
if (!/pre\-loading\.js/.test(built)) {
|
||||
console.log(`no preloading js in ${srcPath}`);
|
||||
process.exit(1);
|
||||
}
|
||||
if (!/pre\-loading\.css/.test(built)) {
|
||||
console.log(`no preloading css in ${srcPath}`);
|
||||
process.exit(1);
|
||||
}
|
||||
|
||||
if (!/noscript/i.test(built)) {
|
||||
console.error(`NO NOSCRIPT TAG FOR ${srcPath}`);
|
||||
process.exit(1);
|
||||
}
|
||||
|
||||
if (/<\/html>/.test(built)) {
|
||||
console.log(`weird html in ${srcPath}`);
|
||||
process.exit(1);
|
||||
}
|
||||
};
|
||||
|
||||
appIndexesToBuild.forEach(function (app) {
|
||||
console.log(`Parsing www/${app}/index.html`);
|
||||
var src = Fs.readFileSync(__dirname + `/../www/${app}/index.html`, 'utf8');
|
||||
|
||||
var srcPath = Path.resolve(Path.join(baseAppPath, app, 'index.html'));
|
||||
console.log(`Parsing ${srcPath}`);
|
||||
var src = Fs.readFileSync(srcPath, 'utf8');
|
||||
|
||||
// rename types for shared documents (ones in place can sound weird)
|
||||
if (app === 'drive') { types[app] = 'Drive'; }
|
||||
if (app === 'teams') { types[app] = 'Team drive'; }
|
||||
|
||||
write(
|
||||
insert(src, templateOG(app, types[app])),
|
||||
`${app}/index.html`
|
||||
);
|
||||
if (app === 'drive') { types[app] = Messages.fm_rootName; }
|
||||
if (app === 'teams') { types[app] = Messages.og_teamDrive; }
|
||||
|
||||
var patt = /<\/title>/;
|
||||
var type = types[app];
|
||||
var built = processPage(src.replace(patt, (current) => {
|
||||
return current + swap(ogData, {
|
||||
url: new URL(`/${app}/`, config.httpUnsafeOrigin).href,
|
||||
title: type && `Encrypted ${type}` || 'CryptPad',
|
||||
image: appImagePath(app),
|
||||
description: Messages.og_default,
|
||||
});
|
||||
}));
|
||||
|
||||
if (!/noscript/i.test(built)) {
|
||||
console.error(`NO NOSCRIPT TAG FOR ${srcPath}`);
|
||||
process.exit(1);
|
||||
}
|
||||
|
||||
write(built, `./www/${app}/index.html`);
|
||||
|
||||
// XXX preloading version for inner.html
|
||||
});
|
||||
|
||||
Fse.removeSync(buildPath);
|
||||
var dirPath = Path.dirname(buildPath);
|
||||
Fse.mkdirpSync(dirPath);
|
||||
Fse.renameSync(tmpPath, buildPath);
|
||||
var instance;
|
||||
try {
|
||||
instance = new URL(config.httpUnsafeOrigin).hostname;
|
||||
} catch (err) {
|
||||
console.error("Failed to parse instance domain name\nAborting...");
|
||||
return void process.exit(1);
|
||||
}
|
||||
|
||||
[
|
||||
{
|
||||
src: './www/register/index.html',
|
||||
dest: './www/register/index.html',
|
||||
url: '/register/',
|
||||
title: getKey('og_register', [instance]),
|
||||
},
|
||||
{
|
||||
src: './www/login/index.html',
|
||||
dest: './www/login/index.html',
|
||||
url: '/login/',
|
||||
title: getKey('og_login', [instance]),
|
||||
},
|
||||
{
|
||||
src: './customize.dist/contact.html',
|
||||
dest: './www/contact.html',
|
||||
url: '/contact.html',
|
||||
title: getKey('og_contact', [instance]),
|
||||
},
|
||||
{
|
||||
src: './customize.dist/features.html',
|
||||
dest: './www/features.html',
|
||||
url: '/features.html',
|
||||
title: getKey((config.allow_subscriptions? 'og_pricing': 'og_features'), [instance]),
|
||||
},
|
||||
{
|
||||
src: './customize.dist/index.html',
|
||||
dest: './www/index.html',
|
||||
url: '/index.html',
|
||||
title: getKey('og_default'),
|
||||
}
|
||||
// TODO 404 ?
|
||||
// TODO 500 ?
|
||||
// TODO down ?
|
||||
].forEach(obj => {
|
||||
var srcPath = obj.src;
|
||||
var destPath = obj.dest;
|
||||
|
||||
console.log(`Parsing ${srcPath}`);
|
||||
var src = Fs.readFileSync(srcPath, 'utf8');
|
||||
var patt = /<\/title>/;
|
||||
var href = new URL(obj.url, config.httpUnsafeOrigin).href;
|
||||
var built = processPage(src.replace(patt, (current) => {
|
||||
return current + swap(ogData, {
|
||||
url: href,
|
||||
title: obj.title || "CryptPad",
|
||||
image: new URL(imagePath + 'og-default.png', config.httpUnsafeOrigin).href,
|
||||
description: Messages.og_default,
|
||||
});
|
||||
}));
|
||||
|
||||
checkPage(built, srcPath);
|
||||
|
||||
write(built, destPath);
|
||||
});
|
||||
|
||||
try {
|
||||
console.log(`Copying built files to target directory (${buildPath})`);
|
||||
Fse.copySync(tmpPath, buildPath, {
|
||||
overwrite: true,
|
||||
});
|
||||
} catch (err) {
|
||||
console.error(`Failed to copy generated content to ${buildPath}`);
|
||||
console.error(err);
|
||||
}
|
||||
|
||||
try {
|
||||
console.log(`Removing temporary build directory (${tmpPath})`);
|
||||
Fse.rmSync(tmpPath, {
|
||||
recursive: true,
|
||||
force: true,
|
||||
});
|
||||
console.log(`Successfully removed ${tmpPath}`);
|
||||
} catch (err) {
|
||||
console.error(err);
|
||||
}
|
||||
|
||||
|
|
|
@ -0,0 +1,27 @@
|
|||
var Meta = require("../lib/metadata");
|
||||
|
||||
var lines = [
|
||||
{
|
||||
"validateKey":"TMsHGx/I5EWBqckKTq/9t/6Xjvl7IdA/IMg0ssn27BY=",
|
||||
"owners":[
|
||||
"BpL3pEyX2IlfsvxQELB9uz5qh+40re0gD6J6LOobBm8="
|
||||
],
|
||||
"channel":"771cefbdf2e62543388f1f7acb0338c1",
|
||||
"created":1628512619236
|
||||
},
|
||||
{
|
||||
"validateKey":"TMsHGx/I5EWBqckKTq/9t/6Xjvl7IdA/IMg0ssn27BY=",
|
||||
"channel":"771cefbdf2e62543388f1f7acb0338c1",
|
||||
"created":1628512619236
|
||||
}
|
||||
];
|
||||
|
||||
|
||||
var ref = {};
|
||||
var lineHandler = Meta.createLineHandler(ref, console.log);
|
||||
|
||||
lines.forEach(line => {
|
||||
lineHandler(void 0, line);
|
||||
});
|
||||
|
||||
console.log(ref);
|
|
@ -1,4 +1,6 @@
|
|||
var EN = require("../../www/common/translations/messages.json");
|
||||
var Util = require("../../www/common/common-util.js");
|
||||
var Fs = require("fs");
|
||||
|
||||
var simpleTags = [
|
||||
'<br>',
|
||||
|
@ -51,12 +53,63 @@ special_rules.fr = function (s) {
|
|||
|
||||
var noop = function () {};
|
||||
|
||||
var getTags = S => {
|
||||
if (typeof(S) !== 'string') { return []; }
|
||||
|
||||
var tags = [];
|
||||
S.replace(/(<[\s\S]*?>|\{\d+\})/g, function (html) {
|
||||
tags.push(html);
|
||||
});
|
||||
return tags;
|
||||
};
|
||||
|
||||
var getTagCount = T => {
|
||||
var M = {};
|
||||
T.forEach(html => {
|
||||
Util.inc(M, html);
|
||||
});
|
||||
return M;
|
||||
};
|
||||
|
||||
// bidirectional comparison
|
||||
var compareMarkup = (A, B) => {
|
||||
// if the frequency of some key in A does not match that of the same key in B
|
||||
var diff = {};
|
||||
|
||||
var compare = k => {
|
||||
if (diff[k]) { return; }
|
||||
|
||||
var a = A[k] || 0;
|
||||
var b = B[k] || 0;
|
||||
if (a === b) { return; }
|
||||
diff[k] = b - a;
|
||||
};
|
||||
|
||||
Object.keys(A).forEach(compare);
|
||||
|
||||
// same for B
|
||||
Object.keys(B).forEach(compare);
|
||||
return diff;
|
||||
};
|
||||
|
||||
var getReferenceMarkup = (function () {
|
||||
var O = {};
|
||||
return function (k) {
|
||||
var val = O[k];
|
||||
if (typeof(val) !== 'undefined') { return val; }
|
||||
var tags = getTags(EN[k]);
|
||||
val = O[k] = getTagCount(tags);
|
||||
return val;
|
||||
};
|
||||
}());
|
||||
|
||||
var finalErrorCount = 0;
|
||||
var processLang = function (map, lang, primary) {
|
||||
var announced = false;
|
||||
var announce = function () {
|
||||
if (announced) { return; }
|
||||
announced = true;
|
||||
console.log("NEXT LANGUAGE: ", lang);
|
||||
console.log("## LANGUAGE: %s\n", lang);
|
||||
};
|
||||
|
||||
var special = special_rules[lang] || noop;
|
||||
|
@ -68,7 +121,20 @@ var processLang = function (map, lang, primary) {
|
|||
if (typeof(s) !== 'string') { return; }
|
||||
var usesHTML;
|
||||
|
||||
s.replace(/<[\s\S]*?>/g, function (html) {
|
||||
var ref = getReferenceMarkup(k);
|
||||
var tags = getTags(s);
|
||||
var tagCount = getTagCount(tags);
|
||||
|
||||
var markupDiff = compareMarkup(ref, tagCount);
|
||||
|
||||
//console.log(markupDiff);
|
||||
var markupMatches = Object.keys(markupDiff).length === 0;
|
||||
|
||||
//console.log(ref);
|
||||
|
||||
tags.forEach(html => {
|
||||
if (/\{\d+\}/.test(html)) { return; }
|
||||
|
||||
if (simpleTags.includes(html)) {
|
||||
found_tags[html] = 1;
|
||||
return;
|
||||
|
@ -88,41 +154,40 @@ var processLang = function (map, lang, primary) {
|
|||
|
||||
var specialViolation = special(s);
|
||||
|
||||
if (usesHTML || weirdCapitalization || specialViolation) {
|
||||
if (usesHTML || weirdCapitalization || specialViolation || !markupMatches) {
|
||||
finalErrorCount++;
|
||||
announce();
|
||||
console.log("%s", s);
|
||||
console.log("[%s]\n", k);
|
||||
console.log("`[%s]`\n", k);
|
||||
console.log("`%s`", s);
|
||||
|
||||
if (!markupMatches) {
|
||||
console.log("\nMarkup does not match base translation");
|
||||
|
||||
console.log("\n**Reference**: \n\n`%s`\n", EN[k]);
|
||||
//console.log('base', ref);
|
||||
//console.log('translation', tagCount);
|
||||
console.log('**diff**:\n\n```\n%s\n```', JSON.stringify(markupDiff, null, 2));
|
||||
|
||||
console.log();
|
||||
}
|
||||
//if (mismatchedTags.length) { console.log(mismatchedTags); } // XXX
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
var langs = Fs.readdirSync("www/common/translations").filter(name => {
|
||||
return /messages\..+\.json$/.test(name);
|
||||
}).map(name => {
|
||||
var code;
|
||||
name.replace(/messages\.(.+)\.json$/, (all, _code) => {
|
||||
code = _code;
|
||||
});
|
||||
return code;
|
||||
});
|
||||
|
||||
processLang(EN, 'en', true);
|
||||
|
||||
[
|
||||
'ar',
|
||||
//'bn_BD',
|
||||
'ca',
|
||||
'cs',
|
||||
'de',
|
||||
'es',
|
||||
'eu',
|
||||
'fi',
|
||||
'fr',
|
||||
'hi',
|
||||
'it',
|
||||
'ja',
|
||||
'nb',
|
||||
'nl',
|
||||
'pl',
|
||||
'pt-br',
|
||||
'ro',
|
||||
'ru',
|
||||
'sv',
|
||||
//'te',
|
||||
'tr',
|
||||
'uk',
|
||||
'zh',
|
||||
].forEach(function (lang) {
|
||||
langs.forEach(function (lang) {
|
||||
try {
|
||||
var map = require("../../www/common/translations/messages." + lang + ".json");
|
||||
if (!Object.keys(map).length) { return; }
|
||||
|
@ -136,3 +201,7 @@ simpleTags.forEach(html => {
|
|||
if (found_tags[html]) { return; }
|
||||
console.log(`html exemption '${html}' is unnecessary.`);
|
||||
});
|
||||
|
||||
if (finalErrorCount) {
|
||||
console.log(`\nTotal errors: ${finalErrorCount}`);
|
||||
}
|
||||
|
|
|
@ -115,11 +115,23 @@ var conditionallyPrintContent = function (output) {
|
|||
}
|
||||
};
|
||||
|
||||
var exceptions = `
|
||||
ui_more
|
||||
ui_collapse
|
||||
ui_expand
|
||||
ui_jsRequired
|
||||
|
||||
`.split(/\s+/).filter(Boolean);
|
||||
|
||||
var next = function () {
|
||||
var key = keys[0];
|
||||
if (!key) { return; }
|
||||
keys.shift();
|
||||
|
||||
if (/^og_/.test(key) || exceptions.includes(key)) {
|
||||
return void next();
|
||||
}
|
||||
|
||||
if (!limit) { return void console.log("[DONE]"); }
|
||||
limit--;
|
||||
|
||||
|
|
|
@ -241,6 +241,7 @@ var serveConfig = makeRouteCache(function (host) {
|
|||
fileHost: Env.fileHost,
|
||||
shouldUpdateNode: Env.shouldUpdateNode || undefined,
|
||||
listMyInstance: Env.listMyInstance,
|
||||
accounts_api: Env.accounts_api,
|
||||
}, null, '\t'),
|
||||
'});'
|
||||
].join(';\n')
|
||||
|
@ -304,18 +305,18 @@ var send500 = function (res, path) {
|
|||
};
|
||||
|
||||
app.get('/api/updatequota', function (req, res) {
|
||||
if (!Env.quota_api) {
|
||||
if (!Env.accounts_api) {
|
||||
res.status(404);
|
||||
return void send404(res);
|
||||
}
|
||||
var Quota = require("./lib/commands/quota");
|
||||
Quota.updateCachedLimits(Env, (e) => {
|
||||
if (e) {
|
||||
Env.warn('UPDATE_QUOTA_ERR', e);
|
||||
Env.Log.warn('UPDATE_QUOTA_ERR', e);
|
||||
res.status(500);
|
||||
return void send500(res);
|
||||
}
|
||||
Env.log('QUOTA_UPDATED', {});
|
||||
Env.Log.info('QUOTA_UPDATED', {});
|
||||
res.send();
|
||||
});
|
||||
});
|
||||
|
|
|
@ -2,7 +2,6 @@
|
|||
@import (reference) '../../customize/src/less2/include/sidebar-layout.less';
|
||||
@import (reference) '../../customize/src/less2/include/support.less';
|
||||
@import (reference) '../../customize/src/less2/include/charts.less';
|
||||
|
||||
&.cp-app-admin {
|
||||
|
||||
.framework_min_main();
|
||||
|
@ -21,11 +20,12 @@
|
|||
text-decoration: underline;
|
||||
}
|
||||
|
||||
.alert.alert-info.cp-admin-bigger-alert {
|
||||
font-size: 16px;
|
||||
.alert.alert-info, .alert.alert-danger {
|
||||
&.cp-admin-bigger-alert {
|
||||
font-size: 16px;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
.cp-admin-setlimit-form, .cp-admin-broadcast-form {
|
||||
label {
|
||||
font-weight: normal !important;
|
||||
|
@ -45,6 +45,10 @@
|
|||
}
|
||||
}
|
||||
.cp-admin-getlimits {
|
||||
td {
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
}
|
||||
code {
|
||||
cursor: pointer;
|
||||
}
|
||||
|
@ -61,12 +65,15 @@
|
|||
max-width: 500px;
|
||||
}
|
||||
@media screen and (max-width: 1200px) {
|
||||
td.note {
|
||||
button.cp-report {
|
||||
display: none;
|
||||
}
|
||||
:is(td, th).note {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
@media screen and (max-width: 1400px) {
|
||||
td.plan {
|
||||
:is(td, th).plan {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
|
@ -109,6 +116,9 @@
|
|||
align-items: top;
|
||||
.cp-support-title-buttons {
|
||||
flex-shrink: 0;
|
||||
button i {
|
||||
margin-right: 0px;
|
||||
}
|
||||
}
|
||||
}
|
||||
.cp-support-collapsed {
|
||||
|
@ -327,5 +337,27 @@
|
|||
.cp-charts-row.heading {
|
||||
font-weight: bold;
|
||||
}
|
||||
table.cp-admin-all-limits,
|
||||
table.cp-metadata-history,
|
||||
table.cp-account-stats,
|
||||
table.cp-block-stats,
|
||||
table.cp-pin-list,
|
||||
table.cp-document-stats {
|
||||
@color: #777; // XXX
|
||||
border: 1px solid @color;
|
||||
margin: 15px;
|
||||
td, pre {
|
||||
color: @cryptpad_text_col;
|
||||
}
|
||||
td, th {
|
||||
max-width: 60vw; // XXX
|
||||
border: 1px solid @color;
|
||||
padding: 5px;
|
||||
.scroll {
|
||||
max-width: 500px;
|
||||
overflow-x: auto;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -5,6 +5,8 @@
|
|||
<meta content="text/html; charset=utf-8" http-equiv="content-type"/>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<meta name="referrer" content="no-referrer" />
|
||||
<script src="/customize/pre-loading.js?ver=1.1"></script>
|
||||
<link href="/customize/src/pre-loading.css?ver=1.0" rel="stylesheet" type="text/css">
|
||||
<script async data-bootload="main.js" data-main="/common/boot.js?ver=1.0" src="/bower_components/requirejs/require.js?ver=2.3.5"></script>
|
||||
<link href="/customize/src/outer.css?ver=1.3.2" rel="stylesheet" type="text/css">
|
||||
</head>
|
||||
|
|
|
@ -2,6 +2,8 @@
|
|||
<html class="cp-app-noscroll">
|
||||
<head>
|
||||
<meta content="text/html; charset=utf-8" http-equiv="content-type"/>
|
||||
<script src="/customize/pre-loading.js?ver=1.1"></script>
|
||||
<link href="/customize/src/pre-loading.css?ver=1.0" rel="stylesheet" type="text/css">
|
||||
<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>
|
||||
.loading-hidden { display: none; }
|
||||
|
@ -10,9 +12,5 @@
|
|||
<body class="cp-app-admin">
|
||||
<div id="cp-toolbar" class="cp-toolbar-container"></div>
|
||||
<div id="cp-sidebarlayout-container"></div>
|
||||
<noscript>
|
||||
<p><strong>OOPS</strong> In order to do encryption in your browser, Javascript is really <strong>really</strong> required.</p>
|
||||
<p><strong>OUPS</strong> Afin de pouvoir réaliser le chiffrement dans votre navigateur, Javascript est <strong>vraiment</strong> nécessaire.</p>
|
||||
</noscript>
|
||||
</body>
|
||||
|
||||
|
|
1284
www/admin/inner.js
1284
www/admin/inner.js
File diff suppressed because it is too large
Load Diff
|
@ -1,5 +1,5 @@
|
|||
<!DOCTYPE html>
|
||||
<html class="cp">
|
||||
<html>
|
||||
<head>
|
||||
<title data-localization="main_title">CryptPad: Collaboration suite, encrypted and open-source</title>
|
||||
<meta content="text/html; charset=utf-8" http-equiv="content-type"/>
|
||||
|
@ -8,8 +8,4 @@
|
|||
<script async data-bootload="main.js" data-main="/common/boot.js?ver=1.0" src="/bower_components/requirejs/require.js?ver=2.3.5"></script>
|
||||
</head>
|
||||
<body class="html">
|
||||
<noscript>
|
||||
<p><strong>OOPS</strong> In order to do encryption in your browser, Javascript is really <strong>really</strong> required.</p>
|
||||
<p><strong>OUPS</strong> Afin de pouvoir réaliser le chiffrement dans votre navigateur, Javascript est <strong>vraiment</strong> nécessaire.</p>
|
||||
</noscript>
|
||||
</html>
|
||||
<noscript></noscript>
|
||||
|
|
|
@ -64,7 +64,7 @@ define(['/api/config'], function (ApiConfig) {
|
|||
// 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)) {
|
||||
if (target.host === 'docs.cryptpad.org' && target.host.endsWith(host.host)) {
|
||||
return void go();
|
||||
}
|
||||
|
||||
|
|
|
@ -5,8 +5,11 @@
|
|||
<meta content="text/html; charset=utf-8" http-equiv="content-type"/>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<meta name="referrer" content="no-referrer" />
|
||||
<script src="/customize/pre-loading.js?ver=1.1"></script>
|
||||
<link href="/customize/src/pre-loading.css?ver=1.0" rel="stylesheet" type="text/css">
|
||||
<script async data-bootload="main.js" data-main="/common/boot.js?ver=1.0" src="/bower_components/requirejs/require.js?ver=2.3.5"></script>
|
||||
<link href="/customize/src/outer.css?ver=1.3.2" rel="stylesheet" type="text/css">
|
||||
</head>
|
||||
<body>
|
||||
<noscript></noscript>
|
||||
<iframe-placeholder>
|
||||
|
|
|
@ -2,6 +2,8 @@
|
|||
<html class="cp-app-noscroll">
|
||||
<head>
|
||||
<meta content="text/html; charset=utf-8" http-equiv="content-type"/>
|
||||
<script src="/customize/pre-loading.js?ver=1.1"></script>
|
||||
<link href="/customize/src/pre-loading.css?ver=1.0" rel="stylesheet" type="text/css">
|
||||
<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>
|
||||
.loading-hidden { display: none; }
|
||||
|
@ -10,9 +12,5 @@
|
|||
<body class="cp-app-calendar">
|
||||
<div id="cp-toolbar" class="cp-toolbar-container"></div>
|
||||
<div id="cp-sidebarlayout-container"></div>
|
||||
<noscript>
|
||||
<p><strong>OOPS</strong> In order to do encryption in your browser, Javascript is really <strong>really</strong> required.</p>
|
||||
<p><strong>OUPS</strong> Afin de pouvoir réaliser le chiffrement dans votre navigateur, Javascript est <strong>vraiment</strong> nécessaire.</p>
|
||||
</noscript>
|
||||
</body>
|
||||
|
||||
|
|
|
@ -27,6 +27,7 @@ define([
|
|||
'/bower_components/file-saver/FileSaver.min.js',
|
||||
'css!/lib/calendar/tui-calendar.min.css',
|
||||
'css!/bower_components/components-font-awesome/css/font-awesome.min.css',
|
||||
'css!/bower_components/bootstrap/dist/css/bootstrap.min.css',
|
||||
'less!/calendar/app-calendar.less',
|
||||
], function (
|
||||
$,
|
||||
|
|
|
@ -21,10 +21,24 @@ html, body {
|
|||
padding-top: 15px;
|
||||
}
|
||||
|
||||
.summary, .failure, .error, .success {
|
||||
.cp-test-status, .summary {
|
||||
margin-bottom: 1em;
|
||||
border-radius: @corner;
|
||||
padding: 15px;
|
||||
&.success {
|
||||
border: 1px solid green;
|
||||
}
|
||||
&.failure {
|
||||
border: 1px solid red;
|
||||
}
|
||||
&.error {
|
||||
border: 1px solid red;
|
||||
}
|
||||
&.warning {
|
||||
border: 1px solid yellow;
|
||||
}
|
||||
}
|
||||
//.summary, .failure, .error, .success { }
|
||||
|
||||
.pending {
|
||||
border: 1px solid @cryptpad_text_col;
|
||||
|
@ -32,15 +46,6 @@ html, body {
|
|||
margin-right: 20px;
|
||||
}
|
||||
}
|
||||
.success {
|
||||
border: 1px solid green;
|
||||
}
|
||||
.failure {
|
||||
border: 1px solid red;
|
||||
}
|
||||
.error {
|
||||
border: 1px solid red;
|
||||
}
|
||||
.hidden {
|
||||
display: none;
|
||||
}
|
||||
|
@ -84,14 +89,19 @@ html, body {
|
|||
word-break: keep-all;
|
||||
font-style: italic;
|
||||
}
|
||||
a {
|
||||
color: @cryptpad_color_link;
|
||||
}
|
||||
}
|
||||
|
||||
.cp-notice-browser, .cp-notice-details, .cp-notice-other {
|
||||
a {
|
||||
color: @cryptpad_color_link;
|
||||
}
|
||||
|
||||
.cp-notice-browser, .cp-notice-details, .cp-notice-other, .cp-notice-customizations {
|
||||
font-size: 70%;
|
||||
}
|
||||
.cp-notice-customizations {
|
||||
border: 1px solid #777;
|
||||
padding: 5px;
|
||||
}
|
||||
.underline { text-decoration: underline; }
|
||||
.cp-app-checkup-version, .cp-app-checkup-browser {
|
||||
.underline;
|
||||
|
|
|
@ -5,6 +5,7 @@
|
|||
<meta name="viewport" content="width=device-width, initial-scale=1.0"/>
|
||||
</head>
|
||||
<body>
|
||||
<noscript></noscript>
|
||||
<div id="cp-progress"></div>
|
||||
<iframe-placeholder>
|
||||
<script type="text/javascript" src="/checkup/dependency-warning.js?ver=1.0.1"></script>
|
||||
|
|
|
@ -1163,11 +1163,11 @@ define([
|
|||
});
|
||||
|
||||
var POLICY_ADVISORY = " This link will be included in the home page footer and 'About CryptPad' menu. It's advised that you either provide one or disable registration.";
|
||||
var APPCONFIG_DOCS_LINK = function (key) {
|
||||
var APPCONFIG_DOCS_LINK = function (key, href) {
|
||||
return h('span', [
|
||||
" See ",
|
||||
h('a', {
|
||||
href: 'https://docs.cryptpad.fr/en/admin_guide/customization.html#application-config',
|
||||
href: href || 'https://docs.cryptpad.org/en/admin_guide/customization.html#application-config',
|
||||
target: "_blank",
|
||||
rel: 'noopener noreferrer',
|
||||
}, "the relevant documentation"),
|
||||
|
@ -1177,6 +1177,10 @@ define([
|
|||
]);
|
||||
};
|
||||
|
||||
var TERMS_DOCS_LINK = function (key) {
|
||||
return APPCONFIG_DOCS_LINK(key, 'https://docs.cryptpad.org/en/admin_guide/customization.html#links-to-terms-of-service-privacy-policy-and-imprint-pages');
|
||||
};
|
||||
|
||||
var isValidInfoURL = function (url) {
|
||||
if (!url || typeof(url) !== 'string') { return false; }
|
||||
try {
|
||||
|
@ -1201,7 +1205,7 @@ define([
|
|||
msg.appendChild(h('span', [
|
||||
'No terms of service were specified.',
|
||||
POLICY_ADVISORY,
|
||||
APPCONFIG_DOCS_LINK('terms'),
|
||||
TERMS_DOCS_LINK('terms'),
|
||||
]));
|
||||
cb(isValidInfoURL(url) || url);
|
||||
});
|
||||
|
@ -1216,7 +1220,7 @@ define([
|
|||
msg.appendChild(h('span', [
|
||||
'No legal entity data was specified.',
|
||||
POLICY_ADVISORY,
|
||||
APPCONFIG_DOCS_LINK('imprint'),
|
||||
TERMS_DOCS_LINK('imprint'),
|
||||
]));
|
||||
cb(isValidInfoURL(url) || url);
|
||||
});
|
||||
|
@ -1230,7 +1234,7 @@ define([
|
|||
msg.appendChild(h('span', [
|
||||
'No privacy policy was specified.',
|
||||
POLICY_ADVISORY,
|
||||
APPCONFIG_DOCS_LINK('privacy'),
|
||||
TERMS_DOCS_LINK('privacy'),
|
||||
]));
|
||||
cb(isValidInfoURL(url) || url);
|
||||
});
|
||||
|
@ -1416,9 +1420,136 @@ define([
|
|||
});
|
||||
});
|
||||
|
||||
[
|
||||
'/',
|
||||
'/index.html',
|
||||
'/contact.html',
|
||||
'/code/',
|
||||
'/pad/index.html',
|
||||
].forEach(url => {
|
||||
assert(function (cb, msg) {
|
||||
try {
|
||||
url = new URL(url, ApiConfig.httpUnsafeOrigin).href;
|
||||
} catch (err) {
|
||||
console.error(err);
|
||||
}
|
||||
|
||||
Tools.common_xhr(url, xhr => {
|
||||
xhr.done(res => {
|
||||
var dom = new DOMParser().parseFromString(res, 'text/html');
|
||||
var sels = [
|
||||
'og:url',
|
||||
'og:type',
|
||||
'og:title',
|
||||
'og:description',
|
||||
'og:image',
|
||||
'twitter:card',
|
||||
];
|
||||
var missing = [];
|
||||
sels.forEach(sel => {
|
||||
var selector = `meta[property="${sel}"]`;
|
||||
var el = dom.querySelector(selector);
|
||||
if (!el) { missing.push(selector); }
|
||||
});
|
||||
if (!missing.length) { return void cb(true); }
|
||||
|
||||
setWarningClass(msg);
|
||||
msg.appendChild(h('span', [
|
||||
h('p', [
|
||||
link(url, url),
|
||||
' is missing several attributes which provide better previews on social media sites and messengers. ',
|
||||
"The administrator of this instance can generate them with ", code('npm run build'), '.',
|
||||
]),
|
||||
h('p', "Missing attributes: "),
|
||||
h('ul', missing.map(q => h('li', h('code', q)))),
|
||||
]));
|
||||
cb(false);
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
assert(function (cb, msg) {
|
||||
// public instances are expected to be open for registration
|
||||
// if this is not a public instance, pass this test immediately
|
||||
if (!ApiConfig.listMyInstance) { return cb(true); }
|
||||
// if it's public but registration is not registricted, that's also a pass
|
||||
if (!ApiConfig.restrictRegistration) { return void cb(true); }
|
||||
|
||||
setWarningClass(msg);
|
||||
msg.appendChild(h('span', [
|
||||
"The administrators of this instance have opted in to inclusion in ",
|
||||
link('https://cryptpad.org/instances/', 'the public instance directory'),
|
||||
' but have disabled registration, which is expected to be open.',
|
||||
h('br'),
|
||||
h('br'),
|
||||
" Registration can be reopened using the instance's admin panel.",
|
||||
]));
|
||||
|
||||
cb(false);
|
||||
});
|
||||
|
||||
var compareCustomized = function (a, b, cb) {
|
||||
var getText = (url, done) => {
|
||||
Tools.common_xhr(url, xhr => {
|
||||
xhr.done(done);
|
||||
});
|
||||
};
|
||||
|
||||
var A, B;
|
||||
nThen(w => {
|
||||
getText(a, w(res => {
|
||||
A = res;
|
||||
}));
|
||||
getText(b, w(res => {
|
||||
B = res;
|
||||
}));
|
||||
}).nThen(() => {
|
||||
cb(void 0, A === B);
|
||||
});
|
||||
};
|
||||
|
||||
var CUSTOMIZATIONS = [];
|
||||
// check whether some important pages have been customized
|
||||
assert(function (cb /*, msg */) {
|
||||
nThen(function (w) {
|
||||
// add whatever custom pages you want here
|
||||
[
|
||||
'application_config.js',
|
||||
'pages.js',
|
||||
].forEach(resource => {
|
||||
// sort this above errors and warnings and style in a neutral color.
|
||||
var A = `/customize.dist/${resource}`;
|
||||
var B = `/customize/${resource}`;
|
||||
compareCustomized(A, B, w((err, same) => {
|
||||
if (err || same) { return; }
|
||||
CUSTOMIZATIONS.push(resource);
|
||||
}));
|
||||
});
|
||||
}).nThen(function () {
|
||||
// Implementing these checks as a test was an easy way to ensure that
|
||||
// they completed before the final report was shown. It's intentional
|
||||
// that this always passes
|
||||
cb(true);
|
||||
});
|
||||
});
|
||||
|
||||
var serverToken;
|
||||
Tools.common_xhr('/', function (xhr) {
|
||||
serverToken = xhr.getResponseHeader('server');
|
||||
assert(function (cb, msg) {
|
||||
Tools.common_xhr('/', function (xhr) {
|
||||
serverToken = xhr.getResponseHeader('server');
|
||||
|
||||
msg.appendChild(h('span', [
|
||||
`Due to its use of `,
|
||||
h('em', `CloudFlare`),
|
||||
` this instance may be inaccessible by users of the Tor network, and generally less secure because of the additional point of failure where code can be intercepted and modified by bad actors.`,
|
||||
]));
|
||||
|
||||
//if (1) { return void cb(false || {serverToken}); }
|
||||
cb(!/cloudflare/i.test(serverToken) || {
|
||||
serverToken,
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
var row = function (cells) {
|
||||
|
@ -1435,11 +1566,11 @@ define([
|
|||
console.error(err);
|
||||
}
|
||||
|
||||
return h('div.error', [
|
||||
return h(`div.errorcp-test-status.${obj.type}`, [
|
||||
h('h5', obj.message),
|
||||
h('div.table-container',
|
||||
h('table', [
|
||||
row(["Failed test number", obj.test + 1]),
|
||||
row(["Test number", obj.test + 1]),
|
||||
row(["Returned value", h('pre', code(printableValue))]),
|
||||
])
|
||||
),
|
||||
|
@ -1483,21 +1614,82 @@ define([
|
|||
};
|
||||
|
||||
Assert.run(function (state) {
|
||||
var errors = state.errors;
|
||||
var isWarning = function (x) {
|
||||
return x && /cp\-warning/.test(x.getAttribute('class'));
|
||||
};
|
||||
|
||||
var isInfo = x => x && /cp\-info/.test(x.getAttribute('class'));
|
||||
var errors = state.errors; // TODO anomalies might be better?
|
||||
|
||||
var categories = {
|
||||
error: 0,
|
||||
info: 0,
|
||||
warning: 0,
|
||||
};
|
||||
|
||||
errors.forEach(obj => {
|
||||
if (isWarning(obj.message)) {
|
||||
obj.type = 'warning';
|
||||
} else if (isInfo(obj.message)) {
|
||||
obj.type = 'info';
|
||||
state.passed++;
|
||||
} else {
|
||||
obj.type = 'error';
|
||||
}
|
||||
Util.inc(categories, obj.type);
|
||||
});
|
||||
|
||||
var failed = errors.length;
|
||||
|
||||
Messages.assert_numberOfTestsPassed = "{0} / {1} tests passed.";
|
||||
|
||||
var statusClass = failed? 'failure': 'success';
|
||||
var statusClass;
|
||||
if (categories.error !== 0) {
|
||||
statusClass = 'failure';
|
||||
} else if (categories.warning !== 0) {
|
||||
statusClass = 'failure';
|
||||
} else if (categories.info !== 0) {
|
||||
statusClass = 'neutral';
|
||||
} else {
|
||||
statusClass = 'success';
|
||||
}
|
||||
|
||||
var failedDetails = "Details found below";
|
||||
var successDetails = "This checkup only tests the most common configuration issues. You may still experience errors or incorrect behaviour.";
|
||||
var details = h('p.cp-notice-details', failed? failedDetails: successDetails);
|
||||
|
||||
var sortMethod = function (a, b) {
|
||||
if (a.type === 'info' && b.type !== 'info') {
|
||||
return 1;
|
||||
}
|
||||
if (a.type === 'warning' && b.type !== 'warning') {
|
||||
return 1;
|
||||
}
|
||||
return a.test - b.test;
|
||||
};
|
||||
|
||||
var customizations;
|
||||
if (CUSTOMIZATIONS.length) {
|
||||
customizations = h('div.cp-notice-customizations', [
|
||||
h('p', `The following assets have been customized for this instance:`),
|
||||
h('ul', CUSTOMIZATIONS.map(asset => {
|
||||
var href = `/customize/${asset}`;
|
||||
return h('li', [
|
||||
h('a', {
|
||||
href: `href?${+new Date()}`,
|
||||
target: '_blank',
|
||||
}, href),
|
||||
]);
|
||||
})),
|
||||
h('p', `Unexpected behaviour could be related to these changes. If you are this instance's administrator, please try temporarily disabling them before submitting a bug report.`),
|
||||
]);
|
||||
}
|
||||
|
||||
var summary = h('div.summary.' + statusClass, [
|
||||
versionStatement(),
|
||||
serverStatement(serverToken),
|
||||
browserStatement(),
|
||||
customizations,
|
||||
h('p', Messages._getKey('assert_numberOfTestsPassed', [
|
||||
state.passed,
|
||||
state.total
|
||||
|
@ -1505,17 +1697,6 @@ define([
|
|||
details,
|
||||
]);
|
||||
|
||||
var isWarning = function (x) {
|
||||
return x && /cp\-warning/.test(x.getAttribute('class'));
|
||||
};
|
||||
|
||||
var sortMethod = function (a, b) {
|
||||
if (isWarning(a.message) && !isWarning(b.message)) {
|
||||
return 1;
|
||||
}
|
||||
return a.test - b.test;
|
||||
};
|
||||
|
||||
var report = h('div.report', [
|
||||
summary,
|
||||
h('div.failures', errors.sort(sortMethod).map(failureReport)),
|
||||
|
|
|
@ -5,8 +5,11 @@
|
|||
<meta content="text/html; charset=utf-8" http-equiv="content-type"/>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<meta name="referrer" content="no-referrer" />
|
||||
<script src="/customize/pre-loading.js?ver=1.1"></script>
|
||||
<link href="/customize/src/pre-loading.css?ver=1.0" rel="stylesheet" type="text/css">
|
||||
<script async data-bootload="/common/sframe-app-outer.js" data-main="/common/boot.js?ver=1.0" src="/bower_components/requirejs/require.js?ver=2.3.5"></script>
|
||||
<link href="/customize/src/outer.css?ver=1.3.2" rel="stylesheet" type="text/css">
|
||||
</head>
|
||||
<body>
|
||||
<noscript></noscript>
|
||||
<iframe-placeholder>
|
||||
|
|
|
@ -2,6 +2,8 @@
|
|||
<html class="cp-app-noscroll cp-app-print">
|
||||
<head>
|
||||
<meta content="text/html; charset=utf-8" http-equiv="content-type"/>
|
||||
<script src="/customize/pre-loading.js?ver=1.1"></script>
|
||||
<link href="/customize/src/pre-loading.css?ver=1.0" rel="stylesheet" type="text/css">
|
||||
<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>
|
||||
.loading-hidden { display: none; }
|
||||
|
@ -12,13 +14,6 @@
|
|||
<body class="cp-app-code">
|
||||
<div id="cme_toolbox" class="cp-toolbar-container"></div>
|
||||
<div id="cp-app-code-editor">
|
||||
<div id="cp-app-code-container">
|
||||
<textarea id="editor1" name="editor1"></textarea>
|
||||
</div>
|
||||
<div id="cp-app-code-preview">
|
||||
<div id="cp-app-code-preview-content"></div>
|
||||
<div id="cp-app-code-print"></div>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
|
|
|
@ -618,6 +618,14 @@ define([
|
|||
}
|
||||
}, waitFor(function (fw) { framework = fw; }));
|
||||
|
||||
$('#cp-app-code-editor').append([
|
||||
h('div#cp-app-code-container', h('textarea#editor1', {name:'editor1'})),
|
||||
h('div#cp-app-code-preview', [
|
||||
h('div#cp-app-code-preview-content'),
|
||||
h('div#cp-app-code-print')
|
||||
])
|
||||
]);
|
||||
|
||||
nThen(function (waitFor) {
|
||||
$(waitFor());
|
||||
}).nThen(function () {
|
||||
|
|
|
@ -631,7 +631,7 @@ define([
|
|||
var frame = dialog.frame([
|
||||
message,
|
||||
dialog.nav(ok),
|
||||
]);
|
||||
], opt);
|
||||
|
||||
if (opt.forefront) { $(frame).addClass('forefront'); }
|
||||
var listener;
|
||||
|
@ -660,7 +660,7 @@ define([
|
|||
opt = opt || {};
|
||||
|
||||
var inputBlock = opt.password ? UI.passwordInput() :
|
||||
(opt.typeInput ? dialog.textTypeInput(opt.typeInput) : dialog.textInput());
|
||||
(opt.typeInput ? dialog.textTypeInput(opt.typeInput) : dialog.textInput(opt && opt.inputOpts));
|
||||
var input = $(inputBlock).is('input') ? inputBlock : $(inputBlock).find('input')[0];
|
||||
input.value = typeof(def) === 'string'? def: '';
|
||||
|
||||
|
@ -725,7 +725,7 @@ define([
|
|||
message,
|
||||
dialog.nav(opt.reverseOrder?
|
||||
[ok, cancel]: [cancel, ok]),
|
||||
]);
|
||||
], opt);
|
||||
|
||||
var listener;
|
||||
var close = Util.once(function (bool, ev) {
|
||||
|
@ -984,6 +984,9 @@ define([
|
|||
Loading();
|
||||
todo();
|
||||
}
|
||||
|
||||
// Remove the inner placeholder (iframe)
|
||||
$('#placeholder').remove();
|
||||
};
|
||||
UI.updateLoadingProgress = function (data) {
|
||||
if (window.CryptPad_updateLoadingProgress) {
|
||||
|
@ -1000,6 +1003,7 @@ define([
|
|||
$loading.addClass("cp-loading-hidden"); // Hide the loading screen
|
||||
$loading.find('.cp-loading-progress').remove(); // Remove the progress list
|
||||
setTimeout(cb, 750);
|
||||
$('head > link[href^="/customize/src/pre-loading.css"]').remove();
|
||||
};
|
||||
UI.errorLoadingScreen = function (error, transparent, exitable) {
|
||||
if (error === 'Error: XDR encoding failure') {
|
||||
|
@ -1037,7 +1041,7 @@ define([
|
|||
});
|
||||
if (exitable) {
|
||||
$(window).focus();
|
||||
$(window).keydown(function (e) {
|
||||
$(window).keydown(function (e) { // XXX what if they don't have a keyboard?
|
||||
if (e.which === 27) {
|
||||
$loading.hide();
|
||||
if (typeof(exitable) === "function") { exitable(); }
|
||||
|
|
|
@ -372,7 +372,7 @@ define([
|
|||
h('div.cp-teams-invite-block', [
|
||||
h('span', Messages.team_inviteLinkSetPassword),
|
||||
h('a.cp-teams-help.fa.fa-question-circle', {
|
||||
href: origin + Pages.localizeDocsLink('https://docs.cryptpad.fr/en/user_guide/security.html#passwords-for-documents-and-folders'),
|
||||
href: origin + Pages.localizeDocsLink('https://docs.cryptpad.org/en/user_guide/security.html#passwords-for-documents-and-folders'),
|
||||
target: "_blank",
|
||||
'data-tippy-placement': "right"
|
||||
})
|
||||
|
@ -1205,12 +1205,12 @@ define([
|
|||
whiteboard: 'whiteboard',
|
||||
};
|
||||
|
||||
var href = "https://docs.cryptpad.fr/en/user_guide/applications.html";
|
||||
var href = "https://docs.cryptpad.org/en/user_guide/applications.html";
|
||||
if (apps[type]) {
|
||||
href = "https://docs.cryptpad.fr/en/user_guide/apps/" + apps[type] + ".html";
|
||||
href = "https://docs.cryptpad.org/en/user_guide/apps/" + apps[type] + ".html";
|
||||
}
|
||||
if (type === 'drive') {
|
||||
href = "https://docs.cryptpad.fr/en/user_guide/drive.html";
|
||||
href = "https://docs.cryptpad.org/en/user_guide/drive.html";
|
||||
}
|
||||
href = Pages.localizeDocsLink(href);
|
||||
|
||||
|
@ -1680,6 +1680,7 @@ define([
|
|||
var a = p.querySelector('a');
|
||||
if (!a) { return; }
|
||||
sub.innerText = a.innerText;
|
||||
sub.setAttribute('href', href);
|
||||
p.replaceChild(sub, a);
|
||||
return p;
|
||||
};
|
||||
|
@ -1738,7 +1739,10 @@ define([
|
|||
tag: 'div',
|
||||
attributes: {'class': 'cp-user-menu-logo'},
|
||||
content: h('span', [
|
||||
h('img', {src: '/customize/CryptPad_logo_grey.svg',alt: 'CryptPad logo',}), // XXX hardcoded alt text?
|
||||
h('img', {
|
||||
src: '/customize/CryptPad_logo_grey.svg',
|
||||
"aria-hidden": true,
|
||||
}),
|
||||
h('span.cp-user-menu-logo-text', "CryptPad")
|
||||
]),
|
||||
});
|
||||
|
@ -1867,7 +1871,7 @@ define([
|
|||
attributes: {
|
||||
'target': '_blank',
|
||||
'rel': 'noopener',
|
||||
'href': 'https://docs.cryptpad.fr',
|
||||
'href': 'https://docs.cryptpad.org',
|
||||
'class': 'fa fa-book'
|
||||
},
|
||||
content: h('span', Messages.docs_link)
|
||||
|
@ -2382,7 +2386,7 @@ define([
|
|||
UI.getFileIcon({type: type})[0],
|
||||
h('div.cp-creation-title-text', [
|
||||
h('span', newPadH3Title),
|
||||
createHelper(Pages.localizeDocsLink('https://docs.cryptpad.fr/en/user_guide/apps/general.html#new-document'), Messages.creation_helperText)
|
||||
createHelper(Pages.localizeDocsLink('https://docs.cryptpad.org/en/user_guide/apps/general.html#new-document'), Messages.creation_helperText)
|
||||
])
|
||||
]);
|
||||
$creation.append(title);
|
||||
|
@ -2816,6 +2820,8 @@ define([
|
|||
if (err.type === 'EEXPIRED') {
|
||||
msg = Messages.expiredError;
|
||||
if (err.loaded) {
|
||||
// XXX You can still use the current version in read-only mode by pressing Esc.
|
||||
// what if they don't have a keyboard (ie. mobile)
|
||||
msg += Messages.errorCopy;
|
||||
}
|
||||
if (toolbar && typeof toolbar.deleted === "function") { toolbar.deleted(); }
|
||||
|
|
|
@ -345,7 +345,7 @@ define([
|
|||
]),
|
||||
h('br'),
|
||||
h('a.cp-learn-more', {
|
||||
href: Pages.localizeDocsLink('https://docs.cryptpad.fr/en/user_guide/security.html#remote-content'),
|
||||
href: Pages.localizeDocsLink('https://docs.cryptpad.org/en/user_guide/security.html#remote-content'),
|
||||
}, [
|
||||
Messages.resources_learnWhy
|
||||
]),
|
||||
|
|
|
@ -78,6 +78,7 @@ define([
|
|||
var TAGS_NAME = Messages.fm_tagsName;
|
||||
var SHARED_FOLDER = 'sf';
|
||||
var SHARED_FOLDER_NAME = Messages.fm_sharedFolderName;
|
||||
var FILTER = "filter";
|
||||
|
||||
// Icons
|
||||
var faFolder = 'cptools-folder';
|
||||
|
@ -1149,8 +1150,12 @@ define([
|
|||
common.getMediaTagPreview(mts, idx);
|
||||
};
|
||||
|
||||
var FILTER_BY = "filterBy";
|
||||
|
||||
var refresh = APP.refresh = function () {
|
||||
APP.displayDirectory(currentPath);
|
||||
var type = APP.store[FILTER_BY];
|
||||
var path = type ? [FILTER, type, currentPath] : currentPath;
|
||||
APP.displayDirectory(path);
|
||||
};
|
||||
|
||||
// `app`: true (force open wiht the app), false (force open in preview),
|
||||
|
@ -2645,7 +2650,7 @@ define([
|
|||
}
|
||||
if (!APP.loggedIn) {
|
||||
msg = APP.newSharedFolder ? Messages.fm_info_sharedFolder : Messages._getKey('fm_info_anonymous', [ApiConfig.inactiveTime || 90]);
|
||||
var docsLink = 'https://docs.cryptpad.fr/en/user_guide/user_account.html#account-types';
|
||||
var docsLink = 'https://docs.cryptpad.org/en/user_guide/user_account.html#account-types';
|
||||
$box.html(msg).find('a[href="#docs"]').each(function () {
|
||||
$(this).attr({
|
||||
href: Pages.localizeDocsLink(docsLink),
|
||||
|
@ -2772,7 +2777,7 @@ define([
|
|||
// Get the upload options
|
||||
var addSharedFolderModal = function (cb) {
|
||||
|
||||
var docsHref = common.getBounceURL(Pages.localizeDocsLink("https://docs.cryptpad.fr/en/user_guide/share_and_access.html#owners"));
|
||||
var docsHref = common.getBounceURL(Pages.localizeDocsLink("https://docs.cryptpad.org/en/user_guide/share_and_access.html#owners"));
|
||||
|
||||
// Ask for name, password and owner
|
||||
var content = h('div', [
|
||||
|
@ -2946,66 +2951,142 @@ define([
|
|||
openIn(type, path, APP.team);
|
||||
});
|
||||
};
|
||||
var getNewPadOptions = function (isInRoot) {
|
||||
var options = [];
|
||||
if (isInRoot) {
|
||||
options.push({
|
||||
class: 'cp-app-drive-new-folder',
|
||||
icon: $folderIcon.clone()[0],
|
||||
name: Messages.fm_folder,
|
||||
});
|
||||
if (!APP.disableSF && !manager.isInSharedFolder(currentPath)) {
|
||||
options.push({
|
||||
class: 'cp-app-drive-new-shared-folder',
|
||||
icon: $sharedFolderIcon.clone()[0],
|
||||
name: Messages.fm_sharedFolder,
|
||||
});
|
||||
}
|
||||
options.push({ separator: true });
|
||||
options.push({
|
||||
class: 'cp-app-drive-new-fileupload',
|
||||
icon: getIcon('fileupload')[0],
|
||||
name: Messages.uploadButton,
|
||||
});
|
||||
if (APP.allowFolderUpload) {
|
||||
options.push({
|
||||
class: 'cp-app-drive-new-folderupload',
|
||||
icon: getIcon('folderupload')[0],
|
||||
name: Messages.uploadFolderButton,
|
||||
});
|
||||
}
|
||||
options.push({ separator: true });
|
||||
options.push({
|
||||
class: 'cp-app-drive-new-link',
|
||||
icon: getIcon('link')[0],
|
||||
name: Messages.fm_link_new,
|
||||
});
|
||||
options.push({ separator: true });
|
||||
}
|
||||
getNewPadTypes().forEach(function (type) {
|
||||
var typeClass = 'cp-app-drive-new-doc';
|
||||
|
||||
var premium = common.checkRestrictedApp(type);
|
||||
if (premium < 0) {
|
||||
typeClass += ' cp-app-hidden cp-app-disabled';
|
||||
} else if (premium === 0) {
|
||||
typeClass += ' cp-app-disabled';
|
||||
}
|
||||
|
||||
options.push({
|
||||
class: typeClass,
|
||||
type: type,
|
||||
icon: getIcon(type)[0],
|
||||
name: Messages.type[type],
|
||||
});
|
||||
});
|
||||
|
||||
if (APP.store[FILTER_BY]) {
|
||||
var typeFilter = APP.store[FILTER_BY];
|
||||
options = options.filter((obj) => {
|
||||
if (obj.separator) { return false; }
|
||||
|
||||
if (typeFilter === 'link') {
|
||||
return obj.class.includes('cp-app-drive-new-link');
|
||||
}
|
||||
if (typeFilter === 'file') {
|
||||
return obj.class.includes('cp-app-drive-new-fileupload');
|
||||
}
|
||||
if (getNewPadTypes().indexOf(typeFilter) !== -1) {
|
||||
return typeFilter === obj.type;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
return options;
|
||||
}
|
||||
var createNewButton = function (isInRoot, $container) {
|
||||
if (!APP.editable) { return; }
|
||||
if (!APP.loggedIn) { return; } // Anonymous users can use the + menu in the toolbar
|
||||
|
||||
if (!manager.isPathIn(currentPath, [ROOT, 'hrefArray'])) { return; }
|
||||
|
||||
// Create dropdown
|
||||
var options = getNewPadOptions(isInRoot).map(function (obj) {
|
||||
if (obj.separator) { return { tag: 'hr' }; }
|
||||
var newObj = {
|
||||
tag: 'a',
|
||||
attributes: { 'class': obj.class },
|
||||
content: [ obj.icon, obj.name ]
|
||||
};
|
||||
if (obj.type) {
|
||||
newObj.attributes['data-type'] = obj.type;
|
||||
newObj.attributes['href'] = '#';
|
||||
}
|
||||
return newObj;
|
||||
});
|
||||
var dropdownConfig = {
|
||||
buttonContent: [
|
||||
h('i.fa.fa-plus'),
|
||||
h('span.cp-button-name', Messages.fm_newButton),
|
||||
],
|
||||
buttonCls: 'cp-toolbar-dropdown-nowrap',
|
||||
options: options,
|
||||
feedback: 'DRIVE_NEWPAD_LOCALFOLDER',
|
||||
common: common
|
||||
};
|
||||
var $block = UIElements.createDropdown(dropdownConfig);
|
||||
|
||||
// Custom style:
|
||||
$block.find('button').addClass('cp-app-drive-toolbar-new');
|
||||
|
||||
addNewPadHandlers($block, isInRoot);
|
||||
|
||||
$container.append($block);
|
||||
};
|
||||
|
||||
var createFilterButton = function (isTemplate, $container) {
|
||||
if (!APP.loggedIn) { return; }
|
||||
Messages.fm_filterBy = 'Filter by'; // XXX: English hardcoded
|
||||
Messages.fm_rmFilter = 'Disable filter'; // XXX: English hardcoded
|
||||
|
||||
// Create dropdown
|
||||
var options = [];
|
||||
if (isInRoot) {
|
||||
if (APP.store[FILTER_BY]) {
|
||||
options.push({
|
||||
tag: 'a',
|
||||
attributes: {'class': 'cp-app-drive-new-folder pewpew'},
|
||||
attributes: {
|
||||
'class': 'cp-app-drive-rm-filter',
|
||||
},
|
||||
content: [
|
||||
$folderIcon.clone()[0],
|
||||
Messages.fm_folder,
|
||||
],
|
||||
});
|
||||
if (!APP.disableSF && !manager.isInSharedFolder(currentPath)) {
|
||||
options.push({
|
||||
tag: 'a',
|
||||
attributes: {'class': 'cp-app-drive-new-shared-folder'},
|
||||
content: [
|
||||
$sharedFolderIcon.clone()[0],
|
||||
Messages.fm_sharedFolder,
|
||||
],
|
||||
});
|
||||
}
|
||||
options.push({tag: 'hr'});
|
||||
options.push({
|
||||
tag: 'a',
|
||||
attributes: {'class': 'cp-app-drive-new-fileupload'},
|
||||
content: [
|
||||
getIcon('fileupload')[0],
|
||||
Messages.uploadButton,
|
||||
],
|
||||
});
|
||||
if (APP.allowFolderUpload) {
|
||||
options.push({
|
||||
tag: 'a',
|
||||
attributes: {'class': 'cp-app-drive-new-folderupload'},
|
||||
content: [
|
||||
getIcon('folderupload')[0],
|
||||
Messages.uploadFolderButton,
|
||||
],
|
||||
});
|
||||
}
|
||||
options.push({tag: 'hr'});
|
||||
options.push({
|
||||
tag: 'a',
|
||||
attributes: {'class': 'cp-app-drive-new-link'},
|
||||
content: [
|
||||
getIcon('link')[0],
|
||||
Messages.fm_link_new,
|
||||
h('i.fa.fa-times'),
|
||||
Messages.fm_rmFilter,
|
||||
],
|
||||
});
|
||||
options.push({tag: 'hr'});
|
||||
}
|
||||
getNewPadTypes().forEach(function (type) {
|
||||
var attributes = {
|
||||
'class': 'cp-app-drive-new-doc',
|
||||
'class': 'cp-app-drive-filter-doc',
|
||||
'data-type': type,
|
||||
'href': '#'
|
||||
};
|
||||
|
@ -3026,21 +3107,72 @@ define([
|
|||
],
|
||||
});
|
||||
});
|
||||
if (!isTemplate) {
|
||||
options.push({tag: 'hr'});
|
||||
options.push({
|
||||
tag: 'a',
|
||||
attributes: {
|
||||
'class': 'cp-app-drive-filter-doc',
|
||||
'data-type': 'link'
|
||||
},
|
||||
content: [
|
||||
getIcon('link')[0],
|
||||
Messages.fm_link_type,
|
||||
],
|
||||
});
|
||||
options.push({
|
||||
tag: 'a',
|
||||
attributes: {
|
||||
'class': 'cp-app-drive-filter-doc',
|
||||
'data-type': 'file',
|
||||
'href': '#'
|
||||
},
|
||||
content: [
|
||||
getIcon('file')[0],
|
||||
Messages.type['file'],
|
||||
],
|
||||
});
|
||||
}
|
||||
var dropdownConfig = {
|
||||
buttonContent: [
|
||||
h('span.fa.fa-plus'),
|
||||
h('span', Messages.fm_newButton),
|
||||
h('i.fa.fa-filter'),
|
||||
h('span.cp-button-name', Messages.fm_filterBy),
|
||||
],
|
||||
buttonCls: 'cp-toolbar-dropdown-nowrap',
|
||||
options: options,
|
||||
feedback: 'DRIVE_NEWPAD_LOCALFOLDER',
|
||||
feedback: 'DRIVE_FILTERBY',
|
||||
common: common
|
||||
};
|
||||
if (APP.store[FILTER_BY]) {
|
||||
var type = APP.store[FILTER_BY];
|
||||
var message = type === 'link' ? Messages.fm_link_type : Messages.type[type];
|
||||
dropdownConfig.buttonContent.push(
|
||||
h('span.cp-button-name', ':'),
|
||||
getIcon(type)[0],
|
||||
h('span.cp-button-name', message)
|
||||
);
|
||||
}
|
||||
var $block = UIElements.createDropdown(dropdownConfig);
|
||||
|
||||
// Custom style:
|
||||
$block.find('button').addClass('cp-app-drive-toolbar-new');
|
||||
// Add style
|
||||
if (APP.store[FILTER_BY]) {
|
||||
$block.find('button').addClass('cp-toolbar-button-active');
|
||||
}
|
||||
|
||||
addNewPadHandlers($block, isInRoot);
|
||||
// Add handlers
|
||||
if (APP.store[FILTER_BY]) {
|
||||
$block.find('a.cp-app-drive-rm-filter')
|
||||
.click(function () {
|
||||
APP.store[FILTER_BY] = undefined;
|
||||
APP.displayDirectory(currentPath);
|
||||
});
|
||||
}
|
||||
$block.find('a.cp-app-drive-filter-doc')
|
||||
.click(function () {
|
||||
var type = $(this).attr('data-type') || 'invalid-filter';
|
||||
APP.store[FILTER_BY] = type;
|
||||
APP.displayDirectory([FILTER, type, currentPath]);
|
||||
});
|
||||
|
||||
$container.append($block);
|
||||
};
|
||||
|
@ -3302,65 +3434,38 @@ define([
|
|||
return keys;
|
||||
};
|
||||
|
||||
var filterPads = function (files, type, path, useId) {
|
||||
var root = path && manager.find(path);
|
||||
|
||||
return files
|
||||
.filter(function (e) {
|
||||
return useId ? manager.isFile(e) : (path && manager.isFile(root[e]));
|
||||
})
|
||||
.filter(function (e) {
|
||||
var id = useId ? e : root[e];
|
||||
var data = manager.getFileData(id);
|
||||
if (type === 'link') { return data.static; }
|
||||
var href = data.href || data.roHref;
|
||||
return href ? (href.split('/')[1] === type) : true;
|
||||
// if types are unreachable, display files to avoid misleading the user
|
||||
});
|
||||
};
|
||||
|
||||
// Create the ghost icon to add pads/folders
|
||||
var createNewPadIcons = function ($block, isInRoot) {
|
||||
var $container = $('<div>');
|
||||
if (isInRoot) {
|
||||
// Folder
|
||||
var $element1 = $('<li>', {
|
||||
'class': 'cp-app-drive-new-folder cp-app-drive-element-row ' +
|
||||
'cp-app-drive-element-grid'
|
||||
}).prepend($folderIcon.clone()).appendTo($container);
|
||||
$element1.append($('<span>', { 'class': 'cp-app-drive-new-name' })
|
||||
.text(Messages.fm_folder));
|
||||
// Shared Folder
|
||||
if (!APP.disableSF && !manager.isInSharedFolder(currentPath)) {
|
||||
var $element3 = $('<li>', {
|
||||
'class': 'cp-app-drive-new-shared-folder cp-app-drive-element-row ' +
|
||||
'cp-app-drive-element-grid'
|
||||
}).prepend($sharedFolderIcon.clone()).appendTo($container);
|
||||
$element3.append($('<span>', { 'class': 'cp-app-drive-new-name' })
|
||||
.text(Messages.fm_sharedFolder));
|
||||
}
|
||||
// Upload file
|
||||
var $elementFileUpload = $('<li>', {
|
||||
'class': 'cp-app-drive-new-fileupload cp-app-drive-element-row ' +
|
||||
'cp-app-drive-element-grid'
|
||||
}).prepend(getIcon('fileupload')).appendTo($container);
|
||||
$elementFileUpload.append($('<span>', {'class': 'cp-app-drive-new-name'})
|
||||
.text(Messages.uploadButton));
|
||||
// Upload folder
|
||||
if (APP.allowFolderUpload) {
|
||||
var $elementFolderUpload = $('<li>', {
|
||||
'class': 'cp-app-drive-new-folderupload cp-app-drive-element-row ' +
|
||||
'cp-app-drive-element-grid'
|
||||
}).prepend(getIcon('folderupload')).appendTo($container);
|
||||
$elementFolderUpload.append($('<span>', {'class': 'cp-app-drive-new-name'})
|
||||
.text(Messages.uploadFolderButton));
|
||||
}
|
||||
// Link
|
||||
var $elementLink = $('<li>', {
|
||||
'class': 'cp-app-drive-new-link cp-app-drive-element-row ' +
|
||||
'cp-app-drive-element-grid'
|
||||
}).prepend(getIcon('link')).appendTo($container);
|
||||
$elementLink.append($('<span>', {'class': 'cp-app-drive-new-name'})
|
||||
.text(Messages.fm_link_type));
|
||||
}
|
||||
// Pads
|
||||
getNewPadTypes().forEach(function (type) {
|
||||
var $element = $('<li>', {
|
||||
'class': 'cp-app-drive-new-doc cp-app-drive-element-row ' +
|
||||
'cp-app-drive-element-grid'
|
||||
}).prepend(getIcon(type)).appendTo($container);
|
||||
$element.append($('<span>', {'class': 'cp-app-drive-new-name'})
|
||||
.text(Messages.type[type]));
|
||||
$element.attr('data-type', type);
|
||||
getNewPadOptions(isInRoot).forEach(function (obj) {
|
||||
if (obj.separator) { return; }
|
||||
|
||||
var premium = common.checkRestrictedApp(type);
|
||||
if (premium < 0) {
|
||||
$element.addClass('cp-app-hidden cp-app-disabled');
|
||||
} else if (premium === 0) {
|
||||
$element.addClass('cp-app-disabled');
|
||||
var $element = $('<li>', {
|
||||
'class': obj.class + ' cp-app-drive-element-row ' +
|
||||
'cp-app-drive-element-grid'
|
||||
}).prepend(obj.icon).appendTo($container);
|
||||
$element.append($('<span>', { 'class': 'cp-app-drive-new-name' })
|
||||
.text(obj.name));
|
||||
|
||||
if (obj.type) {
|
||||
$element.attr('data-type', obj.type);
|
||||
}
|
||||
});
|
||||
|
||||
|
@ -3435,7 +3540,7 @@ define([
|
|||
|
||||
// Unsorted element are represented by "href" in an array: they don't have a filename
|
||||
// and they don't hav a hierarchical structure (folder/subfolders)
|
||||
var displayHrefArray = function ($container, rootName, draggable) {
|
||||
var displayHrefArray = function ($container, rootName, draggable, typeFilter) {
|
||||
var unsorted = files[rootName];
|
||||
if (unsorted.length) {
|
||||
var $fileHeader = getFileListHeader(true);
|
||||
|
@ -3445,6 +3550,7 @@ define([
|
|||
var sortBy = APP.store[SORT_FILE_BY];
|
||||
sortBy = sortBy === "" ? sortBy = 'name' : sortBy;
|
||||
var sortedFiles = sortElements(false, [rootName], keys, sortBy, !getSortFileDesc(), true);
|
||||
sortedFiles = typeFilter ? filterPads(sortedFiles, typeFilter, false, true) : sortedFiles;
|
||||
sortedFiles.forEach(function (id) {
|
||||
var file = manager.getFileData(id);
|
||||
if (!file) {
|
||||
|
@ -3526,7 +3632,7 @@ define([
|
|||
createGhostIcon($container);
|
||||
};
|
||||
|
||||
var displayTrashRoot = function ($list, $folderHeader, $fileHeader) {
|
||||
var displayTrashRoot = function ($list, $folderHeader, $fileHeader, typeFilter) {
|
||||
var filesList = [];
|
||||
var root = files[TRASH];
|
||||
var isEmpty = true;
|
||||
|
@ -3549,14 +3655,25 @@ define([
|
|||
isEmpty = false;
|
||||
});
|
||||
|
||||
var sortedFolders = typeFilter ? [] : sortTrashElements(true, filesList, null, !getSortFolderDesc());
|
||||
var sortedFiles = sortTrashElements(false, filesList, APP.store[SORT_FILE_BY], !getSortFileDesc);
|
||||
|
||||
if (typeFilter) {
|
||||
var ids = sortedFiles.map(function (obj) { return obj.element; });
|
||||
var idsFilter = filterPads(ids, typeFilter, false, true);
|
||||
sortedFiles = sortedFiles.filter(function (obj) {
|
||||
return (idsFilter.indexOf(obj.element) !== -1);
|
||||
});
|
||||
// prevent trash emptying while filter is active
|
||||
isEmpty = true;
|
||||
}
|
||||
|
||||
if (!isEmpty) {
|
||||
var $empty = createEmptyTrashButton();
|
||||
$content.append($empty);
|
||||
}
|
||||
|
||||
var sortedFolders = sortTrashElements(true, filesList, null, !getSortFolderDesc());
|
||||
var sortedFiles = sortTrashElements(false, filesList, APP.store[SORT_FILE_BY], !getSortFileDesc());
|
||||
if (manager.hasSubfolder(root, true)) { $list.append($folderHeader); }
|
||||
if (!typeFilter && manager.hasSubfolder(root, true)) { $list.append($folderHeader); }
|
||||
sortedFolders.forEach(function (f) {
|
||||
var $element = createElement([TRASH], f.spath, root, true);
|
||||
$list.append($element);
|
||||
|
@ -3728,7 +3845,7 @@ define([
|
|||
});
|
||||
};
|
||||
|
||||
var displayRecent = function ($list) {
|
||||
var displayRecent = function ($list, typeFilter) {
|
||||
var filesList = manager.getRecentPads();
|
||||
var limit = 20;
|
||||
|
||||
|
@ -3744,6 +3861,14 @@ define([
|
|||
var i = 0;
|
||||
var channels = [];
|
||||
|
||||
if (typeFilter) {
|
||||
var ids = filesList.map(function (arr) { return arr[0]; });
|
||||
var idsFilter = filterPads(ids, typeFilter, false, true);
|
||||
filesList = filesList.filter(function (arr) {
|
||||
return (idsFilter.indexOf(arr[0]) !== -1);
|
||||
});
|
||||
}
|
||||
|
||||
$list.append(h('li.cp-app-drive-element-separator', h('span', Messages.drive_active1Day)));
|
||||
filesList.some(function (arr) {
|
||||
var id = arr[0];
|
||||
|
@ -3932,6 +4057,17 @@ define([
|
|||
$content.html("");
|
||||
sel.$selectBox = $('<div>', {'class': 'cp-app-drive-content-select-box'})
|
||||
.appendTo($content);
|
||||
|
||||
var typeFilter;
|
||||
var isFilter = path[0] === FILTER;
|
||||
if (isFilter) {
|
||||
if (path.length < 3) { return; }
|
||||
typeFilter = path[1];
|
||||
path = path[2];
|
||||
currentPath = path;
|
||||
} else {
|
||||
APP.store[FILTER_BY] = undefined;
|
||||
}
|
||||
var isInRoot = manager.isPathIn(path, [ROOT]);
|
||||
var inTrash = manager.isPathIn(path, [TRASH]);
|
||||
var isTrashRoot = manager.comparePath(path, [TRASH]);
|
||||
|
@ -3939,6 +4075,8 @@ define([
|
|||
var isAllFiles = manager.comparePath(path, [FILES_DATA]);
|
||||
var isVirtual = virtualCategories.indexOf(path[0]) !== -1;
|
||||
var isSearch = path[0] === SEARCH;
|
||||
var isRecent = path[0] === RECENT;
|
||||
var isOwned = path[0] === OWNED;
|
||||
var isTags = path[0] === TAGS;
|
||||
// ANON_SHARED_FOLDER
|
||||
var isSharedFolder = path[0] === SHARED_FOLDER && APP.newSharedFolder;
|
||||
|
@ -4040,6 +4178,9 @@ define([
|
|||
if (!readOnlyFolder) {
|
||||
createNewButton(isInRoot, APP.toolbar.$bottomL);
|
||||
}
|
||||
if (!isTags && !isSearch) {
|
||||
createFilterButton(isTemplate, APP.toolbar.$bottomL);
|
||||
}
|
||||
|
||||
if (APP.mobile()) {
|
||||
var $context = $('<button>', {
|
||||
|
@ -4075,16 +4216,16 @@ define([
|
|||
var $fileHeader = getFileListHeader(true);
|
||||
|
||||
if (isTemplate) {
|
||||
displayHrefArray($list, path[0], true);
|
||||
displayHrefArray($list, path[0], true, typeFilter);
|
||||
} else if (isAllFiles) {
|
||||
displayAllFiles($list);
|
||||
} else if (isTrashRoot) {
|
||||
displayTrashRoot($list, $folderHeader, $fileHeader);
|
||||
displayTrashRoot($list, $folderHeader, $fileHeader, typeFilter);
|
||||
} else if (isSearch) {
|
||||
displaySearch($list, path[1]);
|
||||
} else if (path[0] === RECENT) {
|
||||
displayRecent($list);
|
||||
} else if (path[0] === OWNED) {
|
||||
} else if (isRecent) {
|
||||
displayRecent($list, typeFilter);
|
||||
} else if (isOwned) {
|
||||
displayOwned($list);
|
||||
} else if (isTags) {
|
||||
displayTags($list);
|
||||
|
@ -4093,11 +4234,12 @@ define([
|
|||
displaySharedFolder($list);
|
||||
} else {
|
||||
if (!inTrash) { $dirContent.contextmenu(openContextMenu('content')); }
|
||||
if (manager.hasSubfolder(root)) { $list.append($folderHeader); }
|
||||
if (!isFilter && manager.hasSubfolder(root)) { $list.append($folderHeader); }
|
||||
// display sub directories
|
||||
var keys = Object.keys(root);
|
||||
var sortedFolders = sortElements(true, path, keys, null, !getSortFolderDesc());
|
||||
var sortedFolders = isFilter ? [] : sortElements(true, path, keys, null, !getSortFolderDesc());
|
||||
var sortedFiles = sortElements(false, path, keys, APP.store[SORT_FILE_BY], !getSortFileDesc());
|
||||
sortedFiles = isFilter ? filterPads(sortedFiles, typeFilter, path) : sortedFiles;
|
||||
sortedFolders.forEach(function (key) {
|
||||
if (manager.isFile(root[key])) { return; }
|
||||
var $element = createElement(path, key, root, true);
|
||||
|
@ -4755,7 +4897,7 @@ define([
|
|||
style: 'display:flex;align-items:center;justify-content:space-between'
|
||||
}, [
|
||||
UI.createCheckbox('cp-upload-owned', Messages.sharedFolders_create_owned, true),
|
||||
UI.createHelper(Pages.localizeDocsLink('https://docs.cryptpad.fr/en/user_guide/share_and_access.html#owners'), Messages.creation_owned1)
|
||||
UI.createHelper(Pages.localizeDocsLink('https://docs.cryptpad.org/en/user_guide/share_and_access.html#owners'), Messages.creation_owned1)
|
||||
]),
|
||||
]);
|
||||
return void UI.confirm(convertContent, function(res) {
|
||||
|
|
|
@ -301,7 +301,7 @@ define([
|
|||
h('a', {href: '#'}, Messages.passwordFaqLink)
|
||||
]);
|
||||
$(link).click(function () {
|
||||
opts.common.openUnsafeURL(Pages.localizeDocsLink("https://docs.cryptpad.fr/en/user_guide/security.html#passwords-for-documents-and-folders"));
|
||||
opts.common.openUnsafeURL(Pages.localizeDocsLink("https://docs.cryptpad.org/en/user_guide/security.html#passwords-for-documents-and-folders"));
|
||||
});
|
||||
return link;
|
||||
};
|
||||
|
|
|
@ -590,8 +590,9 @@ define([
|
|||
if (!channel.isFriendChat) { return; }
|
||||
var curvePublic = channel.curvePublic;
|
||||
var friend = contactsData[curvePublic] || friendData;
|
||||
var name = Util.fixHTML(UI.getDisplayName(friend.name || friend.displayName));
|
||||
var content = h('div', [
|
||||
UI.setHTML(h('p'), Messages._getKey('contacts_confirmRemove', [Util.fixHTML(friend.name)])),
|
||||
UI.setHTML(h('p'), Messages._getKey('contacts_confirmRemove', [ name ])),
|
||||
]);
|
||||
UI.confirm(content, function (yes) {
|
||||
if (!yes) { return; }
|
||||
|
@ -709,6 +710,7 @@ define([
|
|||
var curvePublic = info.curvePublic;
|
||||
contactsData[curvePublic] = info;
|
||||
|
||||
if (!Array.isArray(types)) { return; }
|
||||
if (types.indexOf('displayName') !== -1) {
|
||||
var name = info.displayName;
|
||||
|
||||
|
|
|
@ -12,7 +12,7 @@ define([
|
|||
"Asterisk asterisk",
|
||||
"Brainfuck brainfuck .b",
|
||||
"C text/x-csrc .c",
|
||||
"C text/x-c++src .cpp",
|
||||
"C++ text/x-c++src .cpp",
|
||||
"C-like clike .c",
|
||||
"Clojure clojure .clj",
|
||||
"CMake cmake _", /* no extension */
|
||||
|
@ -50,7 +50,6 @@ define([
|
|||
"HTML htmlmixed .html",
|
||||
"HTTP http _", /* no extension */
|
||||
"IDL idl .idl",
|
||||
"JADE jade .jade",
|
||||
"Java text/x-java .java",
|
||||
"JavaScript javascript .js",
|
||||
"Jinja2 jinja2 .j2",
|
||||
|
|
|
@ -1253,7 +1253,9 @@ define([
|
|||
changes: parseChanges(changes, obj.type === "cp_theme"),
|
||||
changesIndex: ooChannel.cpIndex || 0,
|
||||
locks: getUserLock(getId(), true),
|
||||
excelAdditionalInfo: obj.excelAdditionalInfo
|
||||
excelAdditionalInfo: obj.excelAdditionalInfo,
|
||||
startSaveChanges: obj.startSaveChanges,
|
||||
endSaveChanges: obj.endSaveChanges
|
||||
}, null, function (err, hash) {
|
||||
if (err) {
|
||||
return void console.error(err);
|
||||
|
@ -1263,15 +1265,27 @@ define([
|
|||
clearTimeout(pendingChanges[uid]);
|
||||
delete pendingChanges[uid];
|
||||
}
|
||||
// Call unSaveLock to tell onlyoffice that the patch was sent.
|
||||
// It will allow you to make changes to another cell.
|
||||
// If there is an error and unSaveLock is not called, onlyoffice
|
||||
// will try to send the patch again
|
||||
send({
|
||||
type: "unSaveLock",
|
||||
index: ooChannel.cpIndex,
|
||||
time: +new Date()
|
||||
});
|
||||
|
||||
// If endSaveChanges is false, it means the patch is split into
|
||||
// several set of changes and this is only a part of it. The last
|
||||
// part will have this value to "true"
|
||||
if (!obj.endSaveChanges) {
|
||||
send({
|
||||
type: "savePartChanges",
|
||||
changesIndex: -1,
|
||||
time: +new Date()
|
||||
});
|
||||
} else {
|
||||
// Call unSaveLock to tell onlyoffice that the patch was sent.
|
||||
// It will allow you to make changes to another cell.
|
||||
// If there is an error and unSaveLock is not called, onlyoffice
|
||||
// will try to send the patch again
|
||||
send({
|
||||
type: "unSaveLock",
|
||||
index: ooChannel.cpIndex,
|
||||
time: +new Date()
|
||||
});
|
||||
}
|
||||
// Increment index and update latest hash
|
||||
ooChannel.cpIndex++;
|
||||
ooChannel.lastHash = hash;
|
||||
|
|
|
@ -238,6 +238,8 @@ define([
|
|||
var removeFromFriendList = function (ctx, curvePublic, cb) {
|
||||
var proxy = ctx.store.proxy;
|
||||
var friends = proxy.friends;
|
||||
// FIXME this probably shouldn't happen, but functions that take callbacks
|
||||
// should be guaranteed to call back.
|
||||
if (!friends) { return; }
|
||||
delete friends[curvePublic];
|
||||
Realtime.whenRealtimeSyncs(ctx.store.realtime, function () {
|
||||
|
@ -447,7 +449,12 @@ define([
|
|||
var msg = [Types.unfriend, proxy.curvePublic, +new Date()];
|
||||
var msgStr = JSON.stringify(msg);
|
||||
var cryptMsg = channel.encrypt(msgStr);
|
||||
channel.wc.bcast(cryptMsg).then(function () {}, function (err) {
|
||||
channel.wc.bcast(cryptMsg).then(function () {
|
||||
onFriendRemoved(ctx, curvePublic, data.channel);
|
||||
removeFromFriendList(ctx, curvePublic, function () {
|
||||
cb();
|
||||
});
|
||||
}, function (err) {
|
||||
if (err) { return void cb({error:err}); }
|
||||
onFriendRemoved(ctx, curvePublic, data.channel);
|
||||
removeFromFriendList(ctx, curvePublic, function () {
|
||||
|
|
|
@ -168,7 +168,14 @@ define([
|
|||
if (!msg.data || msg.data === '_READY') { return; }
|
||||
if (!trusted.includes(msg.origin)) { return; }
|
||||
|
||||
var data = typeof(msg.data) === "object" ? msg.data : JSON.parse(msg.data);
|
||||
var data;
|
||||
// apparently some browser extensions send messages to random targets
|
||||
// which can trigger parse errors that interrupt normal behaviour
|
||||
try {
|
||||
data = typeof(msg.data) === "object" ? msg.data : JSON.parse(msg.data);
|
||||
} catch (err) {
|
||||
console.error(err);
|
||||
}
|
||||
if (typeof(data.ack) !== "undefined") {
|
||||
if (acks[data.txid]) { acks[data.txid](!data.ack); }
|
||||
} else if (typeof(data.q) === 'string') {
|
||||
|
|
|
@ -353,7 +353,7 @@ define([
|
|||
style: 'display:flex;align-items:center;justify-content:space-between'
|
||||
}, [
|
||||
UI.createCheckbox('cp-upload-owned', Messages.upload_modal_owner, modalState.owned),
|
||||
createHelper(Pages.localizeDocsLink('https://docs.cryptpad.fr/en/user_guide/share_and_access.html#owners'), Messages.creation_owned1)
|
||||
createHelper(Pages.localizeDocsLink('https://docs.cryptpad.org/en/user_guide/share_and_access.html#owners'), Messages.creation_owned1)
|
||||
]),
|
||||
manualStore
|
||||
]);
|
||||
|
@ -411,7 +411,7 @@ define([
|
|||
style: 'display:flex;align-items:center;justify-content:space-between'
|
||||
}, [
|
||||
UI.createCheckbox('cp-upload-owned', Messages.uploadFolder_modal_owner, modalState.owned),
|
||||
createHelper(Pages.localizeDocsLink('https://docs.cryptpad.fr/en/user_guide/share_and_access.html#owners'), Messages.creation_owned1)
|
||||
createHelper(Pages.localizeDocsLink('https://docs.cryptpad.org/en/user_guide/share_and_access.html#owners'), Messages.creation_owned1)
|
||||
]),
|
||||
manualStore
|
||||
]);
|
||||
|
|
|
@ -51,7 +51,8 @@ define([
|
|||
pfx: window.location.origin,
|
||||
theme: localStorage[themeKey],
|
||||
themeOS: localStorage[themeKey+'_default'],
|
||||
lang: lang
|
||||
lang: lang,
|
||||
time: window.CP_preloadingTime
|
||||
};
|
||||
window.rc = requireConfig;
|
||||
window.apiconf = ApiConfig;
|
||||
|
@ -1954,6 +1955,12 @@ define([
|
|||
rtConfig = rtConfig || {};
|
||||
rtStarted = true;
|
||||
|
||||
// Remove the outer placeholder once iframe overwrites it for sure
|
||||
var placeholder = document.querySelector('#placeholder');
|
||||
if (placeholder && typeof(placeholder.remove) === 'function') {
|
||||
placeholder.remove();
|
||||
}
|
||||
|
||||
var replaceHash = function (hash) {
|
||||
// The pad has just been created but is not stored yet. We'll switch
|
||||
// to hidden hash once the pad is stored
|
||||
|
|
|
@ -807,7 +807,7 @@ define([
|
|||
if (i) { i.classList = 'fa fa-shhare-alt'; }
|
||||
var a = error.querySelector('a');
|
||||
if (a) {
|
||||
a.setAttribute('href', Pages.localizeDocsLink("https://docs.cryptpad.fr/en/user_guide/user_account.html#confidentiality"));
|
||||
a.setAttribute('href', Pages.localizeDocsLink("https://docs.cryptpad.org/en/user_guide/user_account.html#confidentiality"));
|
||||
}
|
||||
UI.errorLoadingScreen(error);
|
||||
});
|
||||
|
@ -856,6 +856,8 @@ define([
|
|||
ctx.sframeChan.on('EV_LOADING_ERROR', function (err) {
|
||||
var msg = err;
|
||||
if (err === 'DELETED') {
|
||||
// XXX You can still use the current version in read-only mode by pressing Esc.
|
||||
// what if they don't have a keyboard (ie. mobile)
|
||||
msg = Messages.deletedError + '<br>' + Messages.errorRedirectToHome;
|
||||
}
|
||||
if (err === "INVALID_HASH") {
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -18,16 +18,16 @@
|
|||
},
|
||||
"common_connectionLost": "<b>S'ha perdut la connexió amb el servidor</b><br>Fins que la connexió no torni, esteu en mode només de lectura.",
|
||||
"typeError": "Aquest document és incompatible amb l'aplicació seleccionada",
|
||||
"onLogout": "Esteu fora del vostre compte, {0}cliqueu aquí{1} per iniciar la sessió<br>o premeu <em>Esc</em> per accedir al vostre document en mode només de lectura.",
|
||||
"onLogout": "Esteu fora del vostre compte, {0}cliqueu aquí{1} per iniciar la sessió<br>o premeu Esc per accedir al vostre document en mode només de lectura.",
|
||||
"padNotPinned": "Aquest document caducarà després de 3 mesos d'inactivitat, {0}connecteu-vos{1} o {2}registreu-vos{3} per conservar-lo.",
|
||||
"anonymousStoreDisabled": "L'administració d'aquesta instància de CryptPad ha desactivat l'emmagatzematge pels comptes anònims. Cal que inicieu la sessió per utilitzar el CryptDrive.",
|
||||
"expiredError": "Aquest document ha caducat i ja no està disponible.",
|
||||
"deletedError": "Aquest document ha estat esborrat i ja no està disponible.",
|
||||
"inactiveError": "Donada la seva inactivitat, aquest document s'ha esborrat. Premeu Esc per crear un nou document.",
|
||||
"chainpadError": "Hi ha hagut un error crític mentre s'actualitzava el vostre contingut. Aquesta pàgina es manté en mode només de lectura per assegurar que no perdreu el que ja heu fet.<br>Premeu <em>Esc</em> per continuar veient aquest document o torneu a carregar la pàgina per provar de continuar editant-lo.",
|
||||
"chainpadError": "Hi ha hagut un error crític mentre s'actualitzava el vostre contingut. Aquesta pàgina es manté en mode només de lectura per assegurar que no perdreu el que ja heu fet.<br>Premeu Esc per continuar veient aquest document o torneu a carregar la pàgina per provar de continuar editant-lo.",
|
||||
"invalidHashError": "El document que heu demanat té una adreça URL no vàlida.",
|
||||
"errorCopy": " Encara podeu usar la versió actual en mode \"només lectura\" prement <em>Esc</em>.",
|
||||
"errorRedirectToHome": "Premeu <em>Esc</em> per tornar al vostre CryptDrive.",
|
||||
"errorCopy": " Encara podeu usar la versió actual en mode \"només lectura\" prement Esc.",
|
||||
"errorRedirectToHome": "Premeu Esc per tornar al vostre CryptDrive.",
|
||||
"newVersionError": "Hi ha una nova versió disponible de CryptPad.<br><a href='#'>Torneu a carregar</a> la pàgina per utilitzar la versió nova o premeu Esc per accedir al vostre contingut en mode <b>fora de línia</b>.",
|
||||
"loading": "Carregant...",
|
||||
"error": "Error",
|
||||
|
@ -215,7 +215,7 @@
|
|||
"contacts_title": "Contactes",
|
||||
"contacts_added": "Invitació de contacte acceptada.",
|
||||
"contacts_rejected": "Invitació de contacte rebutjada",
|
||||
"contacts_request": "<em>{0}</em> vol afegir-vos com a contacte. <b>Ho accepteu<b>?",
|
||||
"contacts_request": "<em>{0}</em> vol afegir-vos com a contacte. <b>Ho accepteu</b>?",
|
||||
"contacts_send": "Envia",
|
||||
"contacts_remove": "Suprimeix aquest contacte",
|
||||
"contacts_confirmRemove": "De debò voleu suprimir <em>{0}</em> dels vostres contactes?",
|
||||
|
@ -395,7 +395,7 @@
|
|||
"register_emailWarning1": "Podeu continuar, però aquestes dades no són necessàries i no s'enviaran al nostre servidor.",
|
||||
"register_emailWarning2": "No podreu restablir la vostra contrasenya utilitzant la vostra adreça electrònica, com en molts altres serveis.",
|
||||
"register_emailWarning3": "Si això us ha quedat clar i voleu seguir utilitzant la vostra adreça electrònica com identificador, cliqueu D'acord.",
|
||||
"settings_autostoreHint": "L'emmagatzematge <b>Automàtic</b> dels documents permet de desar tots els documents que visiteu dins el vostre CryptDrive, sense que hàgiu de fer res de la vostra part.<br>L'emmagatzematge <b>Manual (sense preguntar)</b> permet que no es desin els documents automàticament. Sempre hi haurà l'opció de desar-los, però restarà oculta.",
|
||||
"settings_autostoreHint": "L'emmagatzematge <b>Automàtic</b> dels documents permet de desar tots els documents que visiteu dins el vostre CryptDrive, sense que hàgiu de fer res de la vostra part.<br>L'emmagatzematge <b>Manual (preguntar sempre)</b> permet que es desin els documents.<br>L'emmagatzematge <b>Manual (sense preguntar)</b> sempre hi haurà l'opció de desar-los, però restarà oculta.",
|
||||
"settings_autostoreYes": "Automàtic",
|
||||
"settings_autostoreNo": "Manual (sense preguntar)",
|
||||
"settings_autostoreMaybe": "Manual (preguntar sempre)",
|
||||
|
@ -524,5 +524,7 @@
|
|||
"features_f_social": "Característiques socials",
|
||||
"features_f_devices_note": "Accés al CryptDrive des de tot arreu amb el teu compte",
|
||||
"features_f_devices": "Les teves llibretes en tots els teus dispositius",
|
||||
"features_f_cryptdrive1_note": "Carpetes, carpetes compartides, models, etiquetes"
|
||||
"features_f_cryptdrive1_note": "Carpetes, carpetes compartides, models, etiquetes",
|
||||
"ui_restore": "Restaura",
|
||||
"admin_documentType": "Tipus"
|
||||
}
|
||||
|
|
|
@ -14,7 +14,7 @@
|
|||
"login_password": "Heslo",
|
||||
"login_username": "Uživatelské jméno",
|
||||
"padNotPinned": "Tento dokument expiruje za 3 měsíce neaktivity, {0}přihlašte se{1} nebo {2}se registrujte{3} pro jeho uchování.",
|
||||
"onLogout": "Jste odhlášení, {0}klikněte zde{1} pro přihlášení<br>nebo zmáčkněte <em>Escape</em> pro čtení dokumentu.",
|
||||
"onLogout": "Jste odhlášení, {0}klikněte zde{1} pro přihlášení<br>nebo zmáčkněte Esc pro čtení dokumentu.",
|
||||
"typeError": "Tento dokument není kompatibilní s vybranou aplikací",
|
||||
"common_connectionLost": "<b>Spojení se serverem ztraceno</b><br>Nyní jste v režimu čtení, dokud nebude spojení obnoveno.",
|
||||
"type": {
|
||||
|
@ -89,9 +89,9 @@
|
|||
"disabledApp": "Tato aplikace byla zakázána. Kontaktujte administrátory této CryptPad instance pro bližší informace.",
|
||||
"mustLogin": "Pro přístup k této stránce je vyžadováno přihlášení",
|
||||
"newVersionError": "K dispozici je nová verze CryptPad.<br><a href='#'>Obnovte stránku</a> pro zobrazení nové verze nebo zmáčkněte escape pro pokračování <b>offline</b>.",
|
||||
"errorRedirectToHome": "Stiskněte <em>Esc</em> pro přesměrování do vašeho CryptDrive.",
|
||||
"errorCopy": " Stále můžete použít současnou verzi v režimu jen pro čtení stisknutím <em>Esc</em>.",
|
||||
"chainpadError": "Během nahrávání vašeho obsahu nastala kritická chyba. Tato stránka je režimu jen pro čtení, aby nedošlo ke ztrátě vaší práce.<br>Pro pokračování prohlížení tohoto dokumentu stiskněte <em>Esc</em>, nebo stránku znovu načtěte pro pokračování v úpravách.",
|
||||
"errorRedirectToHome": "Stiskněte Esc pro přesměrování do vašeho CryptDrive.",
|
||||
"errorCopy": " Stále můžete použít současnou verzi v režimu jen pro čtení stisknutím Esc.",
|
||||
"chainpadError": "Během nahrávání vašeho obsahu nastala kritická chyba. Tato stránka je režimu jen pro čtení, aby nedošlo ke ztrátě vaší práce.<br>Pro pokračování prohlížení tohoto dokumentu stiskněte Esc, nebo stránku znovu načtěte pro pokračování v úpravách.",
|
||||
"fm_tags_name": "Název štítku",
|
||||
"fm_deletedPads": "Tyto dokumenty již na serveru neexistují, byly odstraněny z vašeho CryptDrite: {0}",
|
||||
"fm_padIsOwnedOther": "Tento dokument vlastní jiný uživatel",
|
||||
|
@ -250,7 +250,7 @@
|
|||
"contacts_confirmRemove": "Jste si jistí, že chcete odstranit <em>{0}</em> z vašich kontaktů?",
|
||||
"contacts_remove": "Odebrat kontakt",
|
||||
"contacts_send": "Odeslat",
|
||||
"contacts_request": "<em>{0}</em> si vás chce přidat do kontaktů. <b>Přijmout<b>?",
|
||||
"contacts_request": "<em>{0}</em> si vás chce přidat do kontaktů. <b>Přijmout</b>?",
|
||||
"contacts_rejected": "Žádost o přidání do kontaktů zamítnuta",
|
||||
"contacts_added": "Žádost o přidání do kontatů přijata.",
|
||||
"contacts_title": "Kontakty",
|
||||
|
@ -486,8 +486,6 @@
|
|||
"pad_settings_width_large": "Plná šířka",
|
||||
"pad_settings_info": "Výchozí nastavení pro tento dokument. Bude použito, když nový uživatel navštíví tento dokument.",
|
||||
"pad_settings_title": "Nastavení dokumentu",
|
||||
"admin_getquotaButton": "Zkontrolovat",
|
||||
"admin_getquotaTitle": "Zkontrolovat úložiště účtů",
|
||||
"settings_colorthemeTitle": "Barevný motiv",
|
||||
"settings_colorthemeHint": "Změnit barevný motiv CryptPadu na tomto zařízení.",
|
||||
"settings_colortheme_default": "Výchozí nastavení ({0})",
|
||||
|
@ -506,7 +504,6 @@
|
|||
"allowNotifications": "Povolit oznámení",
|
||||
"archivedFromServer": "Dokument archivován",
|
||||
"restoredFromServer": "Dokument obnoven",
|
||||
"admin_archiveInval": "Neplatný dokument",
|
||||
"admin_archiveInput2": "Heslo dokumentu",
|
||||
"admin_archiveInput": "URL dokumentu",
|
||||
"admin_unarchiveButton": "Obnovit",
|
||||
|
@ -554,7 +551,7 @@
|
|||
"fc_newsharedfolder": "Nová sdílená složka",
|
||||
"fc_newfolder": "Nová složka",
|
||||
"fm_tags_used": "Počet uživatelů",
|
||||
"fm_removePermanentlyDialog": "Jste si jistí, že chcete odebrat tuto {0} položku z vašeho CryptDrive? Zůstane v CryptDrive dalších uživatelů, kteří si ji uložili.",
|
||||
"fm_removePermanentlyDialog": "Jste si jistí, že chcete odebrat tuto položku z vašeho CryptDrive? Zůstane v CryptDrive dalších uživatelů, kteří si ji uložili.",
|
||||
"friendRequest_accepted": "<b>{0}</b> přijal vaši žádost o přidání do kontaktů",
|
||||
"friendRequest_declined": "<b>{0}</b> odmítnul vaši žádost o přidání do kontaktů",
|
||||
"friendRequest_decline": "Odmítnout",
|
||||
|
@ -569,7 +566,7 @@
|
|||
"admin_diskUsageButton": "Vytvořit report",
|
||||
"admin_diskUsageHint": "Množství úložného prostoru spotřebovaného různými prostředky CryptPad",
|
||||
"admin_diskUsageTitle": "Využití Drive",
|
||||
"timeoutError": "Kvůli chybě došlo k přerušení spojení se serverem. <br>Stiskněte <em>Esc</em> pro obnovení stránky.",
|
||||
"timeoutError": "Kvůli chybě došlo k přerušení spojení se serverem. <br>Stiskněte Esc pro obnovení stránky.",
|
||||
"contact_email": "Email",
|
||||
"contact_chat": "Chat",
|
||||
"contact_bug": "Nahlásit chybu",
|
||||
|
@ -1287,7 +1284,6 @@
|
|||
"features_noData": "Nejsou vyžadovány žádné osobní údaje",
|
||||
"admin_archiveButton": "Archivovat",
|
||||
"pricing": "Ceník",
|
||||
"admin_archiveTitle": "Archivovat dokumenty",
|
||||
"errorPopupBlocked": "Aby mohl CryptPad fungovat, musí být schopen otevírat nové karty. Povolte prosím vyskakovací okna v adresním řádku vašeho prohlížeče. Tato okna nebudou nikdy použita k zobrazení reklamy.",
|
||||
"support_notification": "Administrátor odpověděl na váš požadavek",
|
||||
"unableToDisplay": "Dokument nelze zobrazit. Stisknutím klávesy Esc znovu načtěte stránku. Pokud problém přetrvává, kontaktujte podporu.",
|
||||
|
@ -1304,7 +1300,6 @@
|
|||
"support_listTitle": "Požadavky na podporu",
|
||||
"owner_removePendingText": "Probíhá",
|
||||
"admin_unarchiveHint": "Obnovit dokument, který byl dříve archivován",
|
||||
"admin_unarchiveTitle": "Obnovit dokumenty",
|
||||
"fileTableHeader": "Stažené a nahrané",
|
||||
"team_pcsSelectLabel": "Uložit do",
|
||||
"team_pcsSelectHelp": "Vytvořením vlastněného dokumentu na Drive vašeho týmu získá váš tým jeho vlastnictví.",
|
||||
|
@ -1381,7 +1376,6 @@
|
|||
"admin_purpose_experiment": "Pro testování platformy nebo vývoj nových funkcí",
|
||||
"form_preview": "Náhled formuláře",
|
||||
"form_addMsg": "Přidat zprávu",
|
||||
"admin_getquotaHint": "Zkontrolujte celkovou velikost položek započítanou do kvóty uživatele nebo týmu podle jejich veřejného klíče.",
|
||||
"admin_performanceProfilingTitle": "Výkon",
|
||||
"admin_cat_performance": "Výkon",
|
||||
"redo": "Znovu",
|
||||
|
@ -1437,5 +1431,9 @@
|
|||
"admin_nameTitle": "Název instance",
|
||||
"admin_archiveNote": "Poznámka",
|
||||
"bounce_danger": "Odkaz, na který jste klikli, nevede na webovou stránku, ale na kód nebo data, která mohou být škodlivá.\n\n(\"{0}\")\n\nCryptPad je z bezpečnostních důvodů blokuje. Kliknutím na tlačítko OK tuto kartu zavřete.",
|
||||
"bounce_confirm": "Chystáte se odejít: {0}\n\nJste si jistí, že chcete navštívit \"{1}\"?"
|
||||
"bounce_confirm": "Chystáte se odejít: {0}\n\nJste si jistí, že chcete navštívit \"{1}\"?",
|
||||
"ui_restore": "Obnovit",
|
||||
"ui_archive": "Archivovat",
|
||||
"ui_undefined": "neznámý",
|
||||
"admin_documentType": "Typ"
|
||||
}
|
||||
|
|
|
@ -20,15 +20,15 @@
|
|||
},
|
||||
"common_connectionLost": "<b>Die Verbindung zum Server ist abgebrochen</b><br>Du kannst das Dokument nicht bearbeiten, bis die Verbindung wieder funktioniert.",
|
||||
"typeError": "Dieses Dokument ist mit der ausgewählten Anwendung nicht kompatibel",
|
||||
"onLogout": "Du bist ausgeloggt. {0}Klicke hier{1}, um dich wieder einzuloggen,<br>oder drücke <em>Escape</em>, um dein Dokument schreibgeschützt zu öffnen.",
|
||||
"onLogout": "Du bist ausgeloggt. {0}Klicke hier{1}, um dich wieder einzuloggen,<br>oder drücke Esc, um dein Dokument schreibgeschützt zu öffnen.",
|
||||
"padNotPinned": "Dieses Dokument wird nach 3 Monaten ohne Aktivität auslaufen. {0}Logge dich ein{1} oder {2}registriere dich{3}, um das Auslaufen zu verhindern.",
|
||||
"anonymousStoreDisabled": "Der Administrator dieser CryptPad-Instanz hat die Verwendung des Speichers für Gäste deaktiviert. Logge dich ein, um dein persönliches CryptDrive zu verwenden.",
|
||||
"expiredError": "Dieses Dokument ist abgelaufen und nicht mehr verfügbar.",
|
||||
"deletedError": "Dieses Dokument wurde gelöscht und ist nicht mehr verfügbar.",
|
||||
"inactiveError": "Dieses Dokument ist wegen Inaktivität gelöscht worden. Drücke Esc, um ein neues Dokument zu erstellen.",
|
||||
"chainpadError": "Ein kritischer Fehler ist beim Aktualisieren deines Inhalts aufgetreten. Diese Seite ist schreibgeschützt, damit du sicherstellen kannst, dass kein Inhalt verloren geht.<br>Drücke <em>Esc</em>, um das Dokument schreibgeschützt zu öffnen oder lade es neu, um die Bearbeitung fortzusetzen.",
|
||||
"errorCopy": " Du kannst die aktuelle Version weiterhin schreibgeschützt verwenden, indem du <em>Esc</em> drückst.",
|
||||
"errorRedirectToHome": "Drücke <em>Esc</em>, um zu deinem CryptDrive zurückzukehren.",
|
||||
"chainpadError": "Ein kritischer Fehler ist beim Aktualisieren deines Inhalts aufgetreten. Diese Seite ist schreibgeschützt, damit du sicherstellen kannst, dass kein Inhalt verloren geht.<br>Drücke Esc, um das Dokument schreibgeschützt zu öffnen oder lade es neu, um die Bearbeitung fortzusetzen.",
|
||||
"errorCopy": " Du kannst die aktuelle Version weiterhin schreibgeschützt verwenden, indem du Esc drückst.",
|
||||
"errorRedirectToHome": "Drücke Esc, um zu deinem CryptDrive zurückzukehren.",
|
||||
"newVersionError": "Eine neue Version von CryptPad ist verfügbar.<br><a href='#'>Lade die Seite neu</a>, um die neue Version zu benutzen. Drücke Esc, um im <b>Offline-Modus</b> weiterzuarbeiten.",
|
||||
"loading": "Laden...",
|
||||
"error": "Fehler",
|
||||
|
@ -214,7 +214,7 @@
|
|||
"contacts_title": "Kontakte",
|
||||
"contacts_added": "Kontaktanfrage akzeptiert.",
|
||||
"contacts_rejected": "Kontaktanfrage abgelehnt",
|
||||
"contacts_request": "Benutzer <em>{0}</em> möchte dich als Kontakt hinzufügen. <b>Annehmen<b>?",
|
||||
"contacts_request": "<em>{0}</em> möchte dich als Kontakt hinzufügen. <b>Annehmen</b>?",
|
||||
"contacts_send": "Senden",
|
||||
"contacts_remove": "Diesen Kontakt entfernen",
|
||||
"contacts_confirmRemove": "Bist du sicher, dass du <em>{0}</em> von der Kontaktliste entfernen möchtest?",
|
||||
|
@ -624,7 +624,7 @@
|
|||
"contact_bug": "Fehlerbericht",
|
||||
"contact_chat": "Chat",
|
||||
"contact_email": "E-Mail",
|
||||
"timeoutError": "Ein Fehler hat deine Verbindung zum Server unterbrochen. <br>Drücke <em>Esc</em>, um die Seite neu zu laden.",
|
||||
"timeoutError": "Ein Fehler hat deine Verbindung zum Server unterbrochen. <br>Drücke Esc, um die Seite neu zu laden.",
|
||||
"admin_diskUsageTitle": "Speicherplatzbelegung",
|
||||
"admin_diskUsageHint": "Speicherplatz, der von verschiedenen CryptPad-Ressourcen verwendet wird",
|
||||
"admin_diskUsageButton": "Bericht generieren",
|
||||
|
@ -948,7 +948,7 @@
|
|||
"slide_backCol": "Hintergrundfarbe",
|
||||
"slide_textCol": "Textfarbe",
|
||||
"support_languagesPreamble": "Das Support-Team spricht die folgenden Sprachen:",
|
||||
"settings_safeLinkDefault": "Sichere Links sind nun standardmäßig aktiviert. Bitte verwende zum Kopieren von Links das Menü <i></i> <b>Teilen</b> und nicht die Adressleiste des Browsers.",
|
||||
"settings_safeLinkDefault": "Sichere Links sind nun standardmäßig aktiviert. Bitte verwende zum Kopieren von Links das Menü <i></i><b>Teilen</b> und nicht die Adressleiste des Browsers.",
|
||||
"info_imprintFlavour": "<a>Rechtliche Informationen</a> über die Administratoren dieses Servers",
|
||||
"info_privacyFlavour": "<a>Datenschutzerklärung</a> für diese Instanz",
|
||||
"user_about": "Über CryptPad",
|
||||
|
@ -1058,10 +1058,7 @@
|
|||
"download_zip_file": "Datei {0}/{1}",
|
||||
"archivedFromServer": "Dokument archiviert",
|
||||
"restoredFromServer": "Dokument wiederhergestellt",
|
||||
"admin_archiveInval": "Ungültiges Dokument",
|
||||
"admin_unarchiveButton": "Wiederherstellen",
|
||||
"admin_unarchiveTitle": "Dokumente wiederherstellen",
|
||||
"admin_archiveTitle": "Dokumente archivieren",
|
||||
"history_trimPrompt": "Dieses Dokument hat einen Verlauf von {0} angesammelt, was das Laden verlangsamen kann. Ziehe in Betracht, den Verlauf zu löschen, sofern er nicht benötigt wird.",
|
||||
"contacts_confirmCancel": "Bist du sicher, dass du die Kontaktanfrage an <b>{0}</b> zurücknehmen möchtest?",
|
||||
"admin_support_collapse": "Einklappen",
|
||||
|
@ -1095,7 +1092,6 @@
|
|||
"admin_performanceKeyHeading": "Befehl",
|
||||
"settings_colortheme_custom": "Benutzerdefiniert",
|
||||
"pad_settings_show": "Anzeigen",
|
||||
"admin_getquotaButton": "Überprüfen",
|
||||
"settings_colorthemeTitle": "Farbschema",
|
||||
"settings_colortheme_default": "Systemstandard ({0})",
|
||||
"settings_colortheme_light": "Hell",
|
||||
|
@ -1109,8 +1105,6 @@
|
|||
"pad_settings_outline": "Wähle aus, ob das Inhaltsverzeichnis standardmäßig angezeigt werden soll.",
|
||||
"pad_settings_width_large": "Volle Breite",
|
||||
"pad_settings_info": "Standardeinstellungen für dieses Dokument. Sie werden angewendet, wenn neue Benutzer dieses Dokument aufrufen.",
|
||||
"admin_getquotaHint": "Überprüfe anhand des öffentlichen Schlüssels die Gesamtgröße aller Elemente, die der Quota eines Benutzers oder Teams angerechnet werden.",
|
||||
"admin_getquotaTitle": "Speicherbelegung von Accounts überprüfen",
|
||||
"addOptionalPassword": "Passwort hinzufügen (optional)",
|
||||
"oo_lostEdits": "Leider konnten deine letzten ungespeicherten Bearbeitungen nach dem Synchronisieren neuer Inhalte nicht wiederhergestellt werden.",
|
||||
"fm_cantUploadHere": "Hochladen hier nicht möglich",
|
||||
|
@ -1421,7 +1415,7 @@
|
|||
"error_embeddingDisabled": "Einbettung ist für diese CryptPad-Instanz deaktiviert",
|
||||
"admin_enableembedsTitle": "Einbettung aktivieren",
|
||||
"ui_ms": "Millisekunden",
|
||||
"admin_infoNotice1": "Verwende die folgenden Felder, um deine Instanz zu beschreiben. In einer zukünftigen Version von CryptPad werden diese Informationen auf der Startseite der Instanz verwendet. Sie werden zusammen mit der Server-Telemetrie gesendet, wenn du der Aufnahme in Listen öffentlicher CryptPad-Instanzen zugestimmt hast.",
|
||||
"admin_infoNotice1": "Verwende die folgenden Felder, um deine Instanz zu beschreiben. Diese Informationen werden auf der Startseite der Instanz verwendet. Sie werden zusammen mit der Server-Telemetrie gesendet, wenn du der Aufnahme in Listen öffentlicher CryptPad-Instanzen zugestimmt hast.",
|
||||
"fivehundred_internalServerError": "Interner Serverfehler",
|
||||
"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.",
|
||||
|
@ -1439,5 +1433,72 @@
|
|||
"home_morestorage": "Für mehr Speicherplatz:",
|
||||
"home_location": "Verschlüsselte Daten werden in {0} gespeichert",
|
||||
"admin_noticeHint": "Eine optionale Nachricht, die auf der Hauptseite angezeigt wird",
|
||||
"footer_website": "Website des Projekts"
|
||||
"footer_website": "Website des Projekts",
|
||||
"admin_uptimeTitle": "Startzeit",
|
||||
"admin_restoreDocument": "Dokument wiederherstellen",
|
||||
"admin_archiveDocument": "Dokument archivieren",
|
||||
"admin_documentModifiedTime": "Zuletzt geändert",
|
||||
"admin_documentCreationTime": "Erstellt",
|
||||
"admin_documentMetadata": "Aktuelle Metadaten",
|
||||
"admin_restoreReason": "Bitte gib den Grund für die Wiederherstellung an und bestätige, dass du fortfahren möchtest",
|
||||
"admin_archiveReason": "Bitte gib den Grund für die Archivierung an und bestätige, dass du fortfahren möchtest",
|
||||
"ui_undefined": "unbekannt",
|
||||
"ui_restore": "Wiederherstellen",
|
||||
"ui_archive": "Archivieren",
|
||||
"admin_documentType": "Typ",
|
||||
"ui_success": "Erfolg",
|
||||
"ui_false": "falsch",
|
||||
"ui_true": "wahr",
|
||||
"admin_generatedAt": "Zeitstempel des Berichts",
|
||||
"admin_cat_database": "Datenbank",
|
||||
"ui_confirm": "Bestätigen",
|
||||
"ui_generateReport": "Bericht generieren",
|
||||
"admin_fileCount": "Anzahl der Dateien",
|
||||
"admin_storageUsage": "Gespeicherte Daten",
|
||||
"admin_accountMetadataPlaceholder": "Benutzerkennung (öffentlicher Schlüssel zum Unterschreiben)",
|
||||
"admin_documentMetadataPlaceholder": "URL oder Kennung des Dokuments",
|
||||
"admin_documentSize": "Größe",
|
||||
"admin_currentlyOnline": "Ist derzeit online",
|
||||
"admin_currentlyOpen": "Derzeit geöffnet",
|
||||
"admin_documentMetadataHint": "Abfrage eines Dokuments oder einer Datei über ihre ID oder URL",
|
||||
"admin_reportContent": "Inhalt des Berichts",
|
||||
"admin_planlimit": "Speicherbegrenzung",
|
||||
"admin_channelCount": "Anzahl der Dokumente",
|
||||
"admin_channelArchived": "Kanal wurde archiviert",
|
||||
"admin_channelAvailable": "Verfügbar",
|
||||
"admin_accountMetadataHint": "Gib den öffentlichen Schlüssel eines Benutzers ein, um Daten über den Account abzurufen.",
|
||||
"ui_fetch": "Abrufen",
|
||||
"admin_blockKey": "Öffentlicher Schlüssel des Blocks",
|
||||
"admin_restoreBlock": "Archivierten Block wiederherstellen",
|
||||
"admin_archiveBlock": "Block archivieren",
|
||||
"admin_blockArchived": "Block wurde archiviert",
|
||||
"admin_blockAvailable": "Block ist verfügbar",
|
||||
"admin_blockMetadataPlaceholder": "Absolute oder relative URL des Blocks",
|
||||
"admin_blockMetadataHint": "Der Login-Block ermöglicht es einem Account, sich bei CryptPad mit der Kombination aus Benutzername und Passwort anzumelden",
|
||||
"admin_blockMetadataTitle": "Login-Block-Informationen",
|
||||
"admin_documentMetadataTitle": "Dokument-Informationen",
|
||||
"admin_accountMetadataTitle": "Account-Informationen",
|
||||
"admin_uptimeHint": "Datum und Uhrzeit des Serverstarts",
|
||||
"ui_none": "kein(e)",
|
||||
"admin_getRawMetadata": "Historie der Metadaten",
|
||||
"og_encryptedAppType": "Verschlüsselt: {0}",
|
||||
"og_pricing": "{0}: Preise und Konditionen",
|
||||
"og_features": "{0}: Funktionen",
|
||||
"og_contact": "{0}: Kontakt",
|
||||
"og_teamDrive": "Team-Drive",
|
||||
"og_default": "CryptPad: Ende-zu-Ende-verschlüsselte Suite zur Zusammenarbeit",
|
||||
"ui_jsRequired": "JavaScript muss aktiviert sein, um die Verschlüsselung in deinem Browser zu ermöglichen",
|
||||
"admin_restoreArchivedPins": "Liste der Dokumente wiederherstellen",
|
||||
"admin_archivePinLog": "Liste der Dokumente archivieren",
|
||||
"admin_getPinList": "Liste der gespeicherten Dokumente",
|
||||
"admin_pinLogArchived": "Liste der Dokumente wurde archiviert",
|
||||
"admin_pinLogAvailable": "Liste der Dokumente ist verfügbar",
|
||||
"admin_lastPinTime": "Letzte Speicheraktivität",
|
||||
"admin_firstPinTime": "Erste Speicheraktivität",
|
||||
"og_login": "Melde dich bei {0} an",
|
||||
"admin_documentConflict": "Archivieren/Wiederherstellen",
|
||||
"og_register": "Registriere einen Account auf {0}",
|
||||
"admin_conflictExplanation": "Es gibt zwei Versionen dieses Dokuments. Wenn du die archivierte Version wiederherstellst, wird die aktuelle Version überschrieben. Wenn du die aktuelle Version archivierst, überschreibst du die archivierte Version. Beide Aktionen können nicht rückgängig gemacht werden.",
|
||||
"admin_note": "Abo-Notiz",
|
||||
"admin_planName": "Abo-Name"
|
||||
}
|
||||
|
|
|
@ -14,7 +14,7 @@
|
|||
},
|
||||
"common_connectionLost": "<b>Η σύνδεση με τον διακομιστή χάθηκε</b><br>Βρίσκεστε σε λειτουργία ανάγνωσης μόνο μέχρι να επανέλθει η σύνδεση.",
|
||||
"typeError": "Αυτό το pad δεν είναι συμβατό με την επιλεγμένη εφαρμογή",
|
||||
"onLogout": "Έχετε αποσυνδεθεί, {0}κάντε \"κλικ\" εδώ{1} για να συνδεθείτε<br>ή πατήστε <em>Escape</em> για να προσπελάσετε το έγγραφο σε λειτουργία ανάγνωσης μόνο.",
|
||||
"onLogout": "Έχετε αποσυνδεθεί, {0}κάντε \"κλικ\" εδώ{1} για να συνδεθείτε<br>ή πατήστε Esc για να προσπελάσετε το έγγραφο σε λειτουργία ανάγνωσης μόνο.",
|
||||
"loading": "Φόρτωση...",
|
||||
"error": "Σφάλμα",
|
||||
"saved": "Αποθηκεύτηκε",
|
||||
|
@ -44,7 +44,7 @@
|
|||
"formattedGB": "{0} GB",
|
||||
"formattedKB": "{0} KB",
|
||||
"pinLimitReached": "Έχετε φτάσει το όριο αποθηκευτικού χώρου",
|
||||
"pinLimitReachedAlert": "Έχετε φτάσει το όριο αποθηκευτικού χώρου. Τα νέα pads δεν θα αποθηκευτούν στο CryptDrive σας.<br>Μπορείτε είτε να διαγράψετε αρχεία από το CryptDrive σας, είτε να <a href=\"https://accounts.cryptpad.fr/#!on={0}\" target=\"_blank\">αναβαθμισετε τον λογαριασμό σας</a> για να αυξήσετε το όριο αποθήκευσης.",
|
||||
"pinLimitReachedAlert": "Έχετε φτάσει το όριο αποθηκευτικού χώρου. Τα νέα pads δεν θα αποθηκευτούν στο CryptDrive σας.<br>Μπορείτε είτε να διαγράψετε αρχεία από το CryptDrive σας, είτε να <a>αναβαθμισετε τον λογαριασμό σας</a> για να αυξήσετε το όριο αποθήκευσης.",
|
||||
"pinLimitReachedAlertNoAccounts": "Έχετε φτάσει το όριο αποθηκευτικού χώρου",
|
||||
"pinLimitNotPinned": "Έχετε φτάσει το όριο αποθηκευτικού χώρου.<br>Αυτό το pad δεν θα αποθηκευτεί στο CryptDrive σας.",
|
||||
"pinLimitDrive": "Έχετε φτάσει το όριο αποθηκευτικού χώρου.<br>Δεν μπορείτε να δημιουργήσετε νέα pads.",
|
||||
|
@ -60,7 +60,7 @@
|
|||
"saveTitle": "Αποθήκευση τίτλου (enter)",
|
||||
"forgetButton": "Διαγραφή",
|
||||
"forgetPrompt": "Πατώντας OK θα μετακινηθεί αυτό το pad στον κάδο ανακύκλωσης. Είστε σίγουρος;",
|
||||
"movedToTrash": "Το pad μετακινήθηκε στον κάδο.<br><a href=\"/drive/\">Μεταφερθείτε στο CryptDrive σας</a>",
|
||||
"movedToTrash": "Το pad μετακινήθηκε στον κάδο.<br><a>Μεταφερθείτε στο CryptDrive σας</a>",
|
||||
"shareButton": "Διαμοιρασμός",
|
||||
"shareSuccess": "Ο σύνδεσμος αντιγράφηκε στην προσωρινή μνήμη",
|
||||
"userListButton": "Λίστα χρηστών",
|
||||
|
@ -169,7 +169,7 @@
|
|||
"contacts_title": "Επαφές",
|
||||
"contacts_added": "Η επαφή αποδέχτηκε την πρόσκληση.",
|
||||
"contacts_rejected": "Η επαφή απέρριψε την πρόσκληση",
|
||||
"contacts_request": "Ο/Η <em>{0}</em> Θα ήθελε να σας προσθέσει ως επαφή. <b>Αποδοχή<b>;",
|
||||
"contacts_request": "Ο/Η <em>{0}</em> Θα ήθελε να σας προσθέσει ως επαφή. <b>Αποδοχή</b>;",
|
||||
"contacts_send": "Αποστολή",
|
||||
"contacts_remove": "Αφαίρεση αυτής της επαφής",
|
||||
"contacts_confirmRemove": "Είσαστε σίγουροι πως θέλετε να αφαιρέσετε τον/την <em>{0}</em> από τις επαφές σας;",
|
||||
|
@ -217,7 +217,6 @@
|
|||
"fm_info_template": "Περιέχει όλα τα pads που έχουν αποθηκευτεί ως πρότυπα και μπορείτε να ξαναχρησιμοποιήσετε όταν δημιουργείτε ένα νέο pad.",
|
||||
"fm_info_recent": "Λίστα των πρόσφατα τροποποιημένων ή ανοιγμένων pads.",
|
||||
"fm_info_trash": "Αδειάστε τον κάδο σας για να απελευθερώσετε χώρο στο CryptDrive σας.",
|
||||
"fm_info_anonymous": "Δεν έχετε συνδεθεί, οπότε τα pads σας θα διαγραφούν μετά από 3 μήνες. <a href=\"/register/\">Εγγραφείτε</a> ή <a href=\"/login/\">Συνδεθείτε</a> για να τα κρατήσετε επ' αόριστον.",
|
||||
"fm_error_cantPin": "Εσωτερικό σφάλμα διακομιστή. Παρακαλούμε επαναφορτώστε τη σελίδα και προσπαθήστε ξανά.",
|
||||
"fm_viewListButton": "Προβολή λίστας",
|
||||
"fm_viewGridButton": "Προβολή πλέγματος",
|
||||
|
@ -331,7 +330,6 @@
|
|||
"mdToolbar_list": "Λίστα με σημεία",
|
||||
"mdToolbar_check": "Λίστα εργασιών",
|
||||
"mdToolbar_code": "Κώδικας",
|
||||
"main_catch_phrase": "Το Zero Knowledge σύννεφο",
|
||||
"about": "Σχετικά",
|
||||
"privacy": "Ιδιωτικότητα",
|
||||
"contact": "Επικοινωνία",
|
||||
|
@ -343,5 +341,7 @@
|
|||
"view": "προβολή",
|
||||
"feedback_about": "Εάν το διαβάζετε αυτό, πιθανότατα ήσασταν περίεργοι για ποιο λόγο το CryptPad ζητά ιστοσελίδες όταν κάνετε συγκεκριμένες ενέργειες",
|
||||
"feedback_privacy": "Ενδιαφερόμαστε για την ιδιωτικότητά σας και ταυτόχρονα θέλουμε το CryptPad να είναι πολύ εύκολο στην χρήση. Χρησιμοποιούμε αυτό το αρχείο για να καταλάβουμε ποια χαρακτηριστικά του περιβάλλοντος διάδρασης ενδιαφέρουν τους χρήστες μας, με το να το ζητήσουμε σε συνδυασμό με μια παράμετρο η οποία μας δείχνει συγκεκριμένα ποια ενέργεια έγινε.",
|
||||
"feedback_optout": "Εάν θα θέλατε να απέχετε, επισκεφθείτε <a href='/settings/'>τη σελίδα ρυθμίσεων</a> του λογαριασμού σας, όπου θα βρείτε ένα κουτί στο οποίο μπορείτε να ενεργοποιήσετε ή να απενεργοποιήσετε την αναπληροφόρηση"
|
||||
"feedback_optout": "Εάν θα θέλατε να απέχετε, επισκεφθείτε <a>τη σελίδα ρυθμίσεων</a> του λογαριασμού σας, όπου θα βρείτε ένα κουτί στο οποίο μπορείτε να ενεργοποιήσετε ή να απενεργοποιήσετε την αναπληροφόρηση",
|
||||
"ui_restore": "Επαναφορά",
|
||||
"admin_documentType": "Τύπος"
|
||||
}
|
||||
|
|
|
@ -51,7 +51,7 @@
|
|||
"poll_descriptionHint": "Descripción",
|
||||
"header_logoTitle": "Volver a tu CryptDrive",
|
||||
"typeError": "Este documento no es compatible con la aplicación seleccionada",
|
||||
"onLogout": "Tu sesión está cerrada, {0}haz clic aquí{1} para iniciar sesión<br>o pulsa <em>Escape</em> para acceder al documento en modo sólo lectura.",
|
||||
"onLogout": "Tu sesión está cerrada, {0}haz clic aquí{1} para iniciar sesión<br>o pulsa Esc para acceder al documento en modo sólo lectura.",
|
||||
"loading": "Cargando...",
|
||||
"error": "Error",
|
||||
"language": "Idioma",
|
||||
|
@ -294,10 +294,10 @@
|
|||
"expiredError": "Este documento ha expirado y ya no está disponible.",
|
||||
"deletedError": "Este documento ha sido borrado y ya no se encuentra disponible.",
|
||||
"inactiveError": "Este documento ha sido eliminado por inactividad. Presione Esc para crear un nuev documento.",
|
||||
"chainpadError": "Ha ocurrido un error crítico al actualizar su contenido. Esta página esta en modo de sólo lectura, para asegurarse que no perderá su trabajo.<br>Hit<em>Esc</em>para continuar y ver este documento, o recargar para editar nuevamente.",
|
||||
"chainpadError": "Ha ocurrido un error crítico al actualizar su contenido. Esta página esta en modo de sólo lectura, para asegurarse que no perderá su trabajo.<br>Hit Esc para continuar y ver este documento, o recargar para editar nuevamente.",
|
||||
"invalidHashError": "El documento que has solicitado tiene una URL invalida.",
|
||||
"errorCopy": " Aún puedes acceder esta versión en modo lectura persionando <em>Esc</em>.",
|
||||
"errorRedirectToHome": "Presiona<em>Esc</em>para ser redirigido a tu Cryptdrive.",
|
||||
"errorCopy": " Aún puedes acceder esta versión en modo lectura persionando Esc.",
|
||||
"errorRedirectToHome": "Presiona Esc para ser redirigido a tu Cryptdrive.",
|
||||
"newVersionError": "Una nueva versión de CryptPad está disponible.<br><a href='#'>Recargar</a> para usar la nueva versión, o presiona escape para acceder a tu contenido en <b>modo offline</b>.",
|
||||
"deletedFromServer": "Nota borrada",
|
||||
"mustLogin": "Debes haber ingresado a tu cuenta para acceder a esta página",
|
||||
|
@ -316,7 +316,7 @@
|
|||
"printButtonTitle2": "Imprimir el documento o exportar como archivo PDF",
|
||||
"printBackground": "Usar una imagen de fondo",
|
||||
"printBackgroundButton": "Elija una imagen",
|
||||
"printBackgroundValue": "<b>Fondo de pantalla actual</b><em>{0</em>}",
|
||||
"printBackgroundValue": "<b>Fondo de pantalla actual</b><em>{0}</em>",
|
||||
"printBackgroundRemove": "Eliminar este fondo de pantalla",
|
||||
"tags_title": "Etiquetas (sólo para tí)",
|
||||
"tags_add": "Actualizar las etiquetas para los documentos seleccionados",
|
||||
|
@ -377,7 +377,7 @@
|
|||
"fm_info_recent": "Estos documentos han sido abiertas o modificadas recientemente por ti o por tus colaboradores.",
|
||||
"fm_info_sharedFolder": "Esta es una carpeta compartida. Usted no ha ingresado a su cuenta por lo que solo tiene acceso en modo solo lectura. <br><a href=\"/register/\">ingresar</a> o <a href=\"/login/\">ingresar</a> para poder importarla a su Cryptdrive y modificarla.",
|
||||
"fm_info_owned": "Usted es el dueño de los documentos que se presentan. Esto significa que puede eliminarlos de manera permanente del servidor cuando lo desee. Si lo hace, los otros usuarios no podrán acceder a ellos nunca más.",
|
||||
"fm_renamedPad": "Ha definido un nombre personalizado para este documento. El título compartido es: br><b>{0}</b>",
|
||||
"fm_renamedPad": "Ha definido un nombre personalizado para este documento. El título compartido es: <br><b>{0}</b>",
|
||||
"fm_canBeShared": "Esta carpeta puede ser compartida",
|
||||
"fm_prop_tagsList": "Etiquetas",
|
||||
"fm_burnThisDriveButton": "Borre toda la información que ha sido almacenada por CryptPad en su navegador",
|
||||
|
@ -484,12 +484,12 @@
|
|||
"uploadFolder_modal_owner": "Archivos de propiedad",
|
||||
"uploadFolder_modal_forceSave": "Almacene sus archivos en su CryptDrive",
|
||||
"upload_notEnoughSpaceBrief": "Sin espacio suficiente",
|
||||
"upload_tooLargeBrief": "El archivo supera el límite de {0}MB",
|
||||
"upload_tooLargeBrief": "El archivo supera el límite de {0}MB para esta unidad",
|
||||
"upload_up": "Subir",
|
||||
"download_dl": "Descargar",
|
||||
"download_step1": "Descargando",
|
||||
"download_step2": "Descifrando",
|
||||
"pad_base64": "Este Pad contiene imágenes almacenadas de manera ineficiente. Estas imágenes aumentarán significativamente el tamaño de la Pad en su CryptDrive y harán que la carga sea más lenta. Puede migrar estos archivos a un nuevo formato que se almacenará por separado en su CryptDrive. ¿Desea migrar estas imágenes ahora?",
|
||||
"pad_base64": "Este documento contiene imágenes almacenadas de manera ineficiente. Estas imágenes aumentarán significativamente el tamaño del documento en su CryptDrive y harán que la carga sea más lenta. Puede migrar estos archivos a un nuevo formato que se almacenará por separado en su CryptDrive. ¿Desea migrar estas imágenes ahora?",
|
||||
"mdToolbar_defaultText": "Su texto aqui",
|
||||
"mdToolbar_help": "Ayuda",
|
||||
"mdToolbar_tutorial": "https://www.markdowntutorial.com/es/",
|
||||
|
@ -516,14 +516,14 @@
|
|||
"features_f_file0": "Abrir documentos",
|
||||
"features_f_file0_note": "Ver y descargar documentos compartidos por otros usuarios",
|
||||
"features_f_cryptdrive0": "Acceso limitado a CryptDrive",
|
||||
"features_f_cryptdrive0_note": "Posibilidad de almacenar los pads visitados en su navegador para poder abrirlos más tarde",
|
||||
"features_f_cryptdrive0_note": "Posibilidad de almacenar los documentos visitados en su navegador para poder abrirlos más tarde",
|
||||
"features_f_storage0": "Tiempo de almacenamiento limitado",
|
||||
"features_f_storage0_note": "Los documentos se eliminan después de {0} días de inactividad",
|
||||
"features_f_anon": "Todas las funciones de invitado",
|
||||
"features_f_anon_note": "Con funcionalidad adicional",
|
||||
"features_f_cryptdrive1": "Funcionalidad completa de CryptDrive",
|
||||
"features_f_cryptdrive1_note": "Carpetas, compartir carpetas, plantillas, tareas",
|
||||
"features_f_devices": "Tus pads en todos tus dispositivos",
|
||||
"features_f_devices": "Tus documentos en todos tus dispositivos",
|
||||
"features_f_devices_note": "Acceda a su CryptDrive en todas partes con su cuenta de usuario",
|
||||
"features_f_social": "Características sociales",
|
||||
"features_f_social_note": "Añadir contactos para una colaboración segura, crear un perfil, controles de acceso detallados",
|
||||
|
@ -547,17 +547,17 @@
|
|||
"storageStatus": "Almacenamiento:<br><b>{0}</b> usado de <b>{1}</b>",
|
||||
"settings_cursorColorTitle": "Color de puntero",
|
||||
"mdToolbar_button": "Mostrar u ocultar la barra de herramientas de Markdown",
|
||||
"creation_404": "Este pad ya no existe. Utilice el siguiente formulario para crear un nuevo pad.",
|
||||
"creation_404": "Este documento ya no existe. Utilice el siguiente formulario para crear un nuevo documento.",
|
||||
"creation_owned1": "Un objeto <b>propiedad</b> puede ser destruido cuando el propietario lo desee. La destrucción de un objeto propio hace que no esté disponible en los CryptDrives de otros usuarios.",
|
||||
"settings_padNotifTitle": "Notificaciones de comentarios",
|
||||
"password_info": "El documento que intenta abrir no existe o está protegido con una contraseña. Ingrese la contraseña correcta para acceder a su contenido.",
|
||||
"creation_newPadModalDescription": "Haz click en un tipo de documento para crearlo. Tú también puedes presionar <b>Tab</b> para seleccionar el tipo y presiona <b>Enter</b> para confirmar.",
|
||||
"creation_newPadModalDescription": "Haz clic en una aplicación para crear un nuevo documento. Tú también puedes presionar <b>Tab</b> para seleccionar la aplicación y presiona <b>Enter</b> para confirmar.",
|
||||
"toolbar_degraded": "Actualmente hay más de {0} editores en este documento. La lista de usuarios y el chat están desactivados para mejorar el rendimiento.",
|
||||
"oo_lostEdits": "Lamentablemente, las ediciones recientes no guardadas no se pueden recuperar después de sincronizar el nuevo contenido.",
|
||||
"properties_passwordError": "Se ha producido un error al intentar cambiar la contraseña. Por favor, inténtelo de nuevo.",
|
||||
"properties_passwordSame": "Las nuevas contraseñas deben diferir de la actual.",
|
||||
"properties_confirmChange": "¿Está seguro? Al cambiar la contraseña se eliminará su historial. Los usuarios que no tengan la nueva contraseña perderán el acceso a este pad",
|
||||
"properties_confirmNew": "¿Está seguro? Añadir una contraseña cambiará la URL de este pad y eliminará su historial. Los usuarios sin la contraseña perderán el acceso a este pad",
|
||||
"properties_confirmChange": "¿Está seguro? Al cambiar la contraseña se eliminará su historial. Los usuarios que no tengan la nueva contraseña perderán el acceso a este documento",
|
||||
"properties_confirmNew": "¿Está seguro? Añadir una contraseña cambiará la URL de este documento y eliminará su historial. Los usuarios sin la contraseña perderán el acceso a este documento",
|
||||
"properties_changePassword": "Cambiar la contraseña",
|
||||
"properties_addPassword": "Añadir una contraseña",
|
||||
"password_submit": "Enviar",
|
||||
|
@ -575,10 +575,10 @@
|
|||
"creation_expireDays": "Día(s)",
|
||||
"creation_expireHours": "Hora(s)",
|
||||
"creation_expireFalse": "Ilimitado",
|
||||
"creation_expire": "Pad expirando",
|
||||
"creation_owned": "Pad propio",
|
||||
"creation_expire": "Documento expirando",
|
||||
"creation_owned": "Documento propio",
|
||||
"share_linkCategory": "Enlace",
|
||||
"sharedFolders_forget": "Este bloc sólo se almacena en una carpeta compartida, no puedes moverlo a la papelera. Puedes usar tu CryptDrive si quieres borrarlo.",
|
||||
"sharedFolders_forget": "Este documento sólo se almacena en una carpeta compartida, no puedes moverlo a la papelera. Puedes usar tu CryptDrive si quieres borrarlo.",
|
||||
"share_mediatagCopy": "Copiar mediatag al portapapeles",
|
||||
"share_contactCategory": "Contactos",
|
||||
"share_linkCopy": "Copiar enlace",
|
||||
|
@ -586,13 +586,13 @@
|
|||
"share_linkView": "Ver",
|
||||
"share_linkEdit": "Editar",
|
||||
"share_linkAccess": "Permisos de acceso",
|
||||
"properties_passwordWarning": "La contraseña ha sido cambiada con éxito pero fue incapaz de actualizar tu CryptDrive con los nuevos datos. Es posible que tenga que eliminar la versión antigua del pad manualmente.<br>Pulse OK para recargar y actualizar sus derechos de acceso.",
|
||||
"properties_passwordWarning": "La contraseña ha sido cambiada con éxito pero fue incapaz de actualizar tu CryptDrive con los nuevos datos. Es posible que tenga que eliminar la versión antigua del documento manualmente.<br>Pulse OK para recargar y actualizar sus derechos de acceso.",
|
||||
"properties_passwordSuccess": "La contraseña ha sido cambiada con éxito.<br>Pulsa OK para recargar y actualizar tus derechos de acceso.",
|
||||
"admin_updateLimitTitle": "Actualizar cuotas de usuarios",
|
||||
"admin_registeredHint": "Número de usuarios registrados en tu instancia",
|
||||
"admin_registeredTitle": "Usuarios registrados",
|
||||
"admin_activePadsHint": "Número de documentos únicos que se están viendo o editando ahora",
|
||||
"admin_activePadsTitle": "Blocs activos",
|
||||
"admin_activePadsTitle": "Documentos activos",
|
||||
"admin_activeSessionsHint": "Número de conexiones websocket activas (y direcciones IP únicas conectadas)",
|
||||
"admin_activeSessionsTitle": "Conexiones activas",
|
||||
"adminPage": "Administración",
|
||||
|
@ -603,13 +603,13 @@
|
|||
"survey": "Encuesta de CryptPad",
|
||||
"crowdfunding_popup_no": "Ahora no",
|
||||
"crowdfunding_popup_text": "<h3>¡Necesitamos tu ayuda!</h3>Para garantizar que CryptPad se desarrolle activamente, considera apoyar el proyecto a través de la página OpenCollective, donde puedes ver nuestra <b>Hoja de ruta</b> y <b>Objetivos de financiación</b>.",
|
||||
"autostore_notAvailable": "Tienes que guardar el bloc en tu CryptDrive antes de usar esta función.",
|
||||
"autostore_notAvailable": "Tienes que guardar este documento en tu CryptDrive antes de poder usar esta función.",
|
||||
"autostore_forceSave": "Guarda el fichero en tu CryptDrive",
|
||||
"autostore_saved": "El bloc se guardó correctamente en tu CryptDrive!",
|
||||
"autostore_error": "Error extraño: No pudimos guardar este bloc, inténtalo otra vez.",
|
||||
"autostore_saved": "El documento se guardó correctamente en tu CryptDrive!",
|
||||
"autostore_error": "Error inesperado: No pudimos guardar este documento, inténtalo otra vez.",
|
||||
"autostore_hide": "No guardar",
|
||||
"autostore_store": "Guardar",
|
||||
"autostore_settings": "Puedes habilitar el almacenamiento automático de blocs en su <a>Página de</a> configuración!",
|
||||
"autostore_settings": "Puedes habilitar el almacenamiento automático de documentos en su <a>Página de</a> configuración.",
|
||||
"autostore_notstored": "Este {0} no está en su CryptDrive. ¿Quieres guardarlo ahora?",
|
||||
"autostore_sf": "carpeta",
|
||||
"chrome68": "Parece que estás usando el navegador Chrome o Chromium versión 68. Contiene un error que hace que la página se vuelva completamente blanca después de unos segundos o que la página no responda a los clics. Para solucionar este problema, puede cambiar a otra pestaña y volver, o tratar de desplazarse en la página. Este error debe corregirse en la próxima versión de su navegador.",
|
||||
|
@ -626,12 +626,12 @@
|
|||
"convertFolderToSF_SFParent": "Esta carpeta no puede ser convertida a una carpeta compartida en su actual localización. Mueva la carpeta fuera de la carperta compartida para continuar.",
|
||||
"sharedFolders_share": "Comparte este enlace con otros usuarios registrados para darles accesso a la carpeta compartida. Una vez que ellos/as abran este enlace, la carpeta compartida será añadida a sus CryptDrive.",
|
||||
"sharedFolders_create": "Crear una carpeta compartida",
|
||||
"sharedFolders_duplicate": "Algunos de los documentos que intentaste mover ya estaban compartidos en la carpeta de destino",
|
||||
"sharedFolders_duplicate": "Algunos de los documentos que intentaste mover ya estaban compartidos en la carpeta de destino.",
|
||||
"admin_flushCacheTitle": "Vaciar caché HTTP",
|
||||
"admin_updateLimitDone": "Actualización correcta",
|
||||
"admin_updateLimitButton": "Actualizar cuotas",
|
||||
"admin_updateLimitHint": "Forzar una actualización de los límites de almacenamiento del usuario se puede hacer en cualquier momento, pero sólo es necesario en caso de error",
|
||||
"crowdfunding_button2": "Ayuda a CryptPad",
|
||||
"crowdfunding_button2": "Dona",
|
||||
"autostore_pad": "bloc",
|
||||
"settings_padOpenLinkTitle": "Abrir links con un click",
|
||||
"fm_expirablePad": "Expiración: {0}",
|
||||
|
@ -640,14 +640,14 @@
|
|||
"admin_diskUsageButton": "Generar informe",
|
||||
"admin_diskUsageHint": "Cantidad de almacenamiento gastado por diversos recursos de CryptPad",
|
||||
"admin_diskUsageTitle": "Almacenamiento usado",
|
||||
"timeoutError": "Algún error ha cortado la conexión al servidor. <br>Pulsa<em>Esc </em> para recargar la página.",
|
||||
"timeoutError": "Algún error ha cortado la conexión al servidor. <br>Pulsa Esc para recargar la página.",
|
||||
"contact_email": "Correo electrónico",
|
||||
"contact_chat": "Chat",
|
||||
"contact_bug": "Informe de error",
|
||||
"contact_devHint": "Para sugerencias de funciones, mejoras de usabilidad o para simplemente agradecer.",
|
||||
"contact_dev": "Contactar a los desarrolladores",
|
||||
"contact_adminHint": "Para cualquier problema relacionado con su cuenta, límites de almacenamiento o disponibilidad del servicio.\n",
|
||||
"contact_admin": "Contactar a los administradores",
|
||||
"contact_admin": "Contactar a los administradores para: {0}",
|
||||
"footer_donate": "Donar",
|
||||
"admin_flushCacheDone": "Vaciado de caché exitoso",
|
||||
"admin_flushCacheButton": "Vaciar caché",
|
||||
|
@ -685,5 +685,820 @@
|
|||
"form_editAnswer": "Editar mis respuestas",
|
||||
"form_update": "Actualizar",
|
||||
"calendar_update": "Actualizar",
|
||||
"admin_support_last": "Actualizado el: "
|
||||
"admin_support_last": "Actualizado el: ",
|
||||
"ui_restore": "Recuperar",
|
||||
"admin_documentType": "Tipo",
|
||||
"admin_supportInitHint": "Puedes configurar un buzón de soporte para que los usuarios de tu instancia de CryptPad puedan ponerse en contacto contigo de forma segura si tienen un problema con su cuenta.",
|
||||
"admin_supportInitTitle": "Apoyar la inicialización del buzón",
|
||||
"admin_supportAddError": "Clave privada no válida",
|
||||
"admin_supportAddKey": "Añadir clave privada",
|
||||
"admin_supportInitPrivate": "Tu instancia de CryptPad está configurada para utilizar un buzón de soporte, pero tu cuenta no tiene la clave privada correcta para acceder a él. Utiliza el siguiente formulario para añadir o actualizar la clave privada a tu cuenta.",
|
||||
"support_showData": "Mostrar/ocultar los datos del usuario",
|
||||
"support_remove": "Eliminar el ticket",
|
||||
"support_close": "Cerrar el ticket",
|
||||
"support_answer": "Responder",
|
||||
"support_listHint": "Aquí está la lista de tickets enviados a los administradores y sus respuestas. Un ticket cerrado no puede reabrirse, pero puedes hacer uno nuevo. Puedes ocultar los tickets que han sido cerrados.",
|
||||
"support_listTitle": "Tickets de soporte técnico",
|
||||
"support_cat_tickets": "Tickets existentes",
|
||||
"support_formMessage": "Escribe tu mensaje…",
|
||||
"support_formContentError": "Error: el contenido está vacío",
|
||||
"support_formTitleError": "Error: el título está vacío",
|
||||
"support_formButton": "Enviar",
|
||||
"support_formHint": "Utiliza este formulario para ponerte en contacto de forma segura con los administradores sobre cuestiones y preguntas.<br>Por favor, ten en cuenta que algunas cuestiones/preguntas pueden estar ya tratadas en la <a>Guía del Usuario de CryptPad</a>. Por favor, evita crear un nuevo ticket si ya tienes un ticket abierto sobre el mismo tema. En su lugar, responde a tu mensaje original con cualquier información adicional.",
|
||||
"admin_supportInitHelp": "Tu servidor aún no está configurado para tener un buzón de soporte. Si quieres un buzón de soporte para recibir mensajes de tus usuarios, debes pedirle al administrador de tu servidor que ejecute el script ubicado en «./scripts/generate-admin-keys.js», para luego almacenar la clave pública en el archivo «config.js» y enviarte la clave privada.",
|
||||
"supportPage": "Soporte",
|
||||
"admin_cat_support": "Soporte",
|
||||
"fm_info_sharedFolderHistory": "Esto es sólo el historial de tu carpeta compartida: <b>{0}</b><br>Tu CryptDrive permanecerá en modo de sólo lectura durante la navegación.",
|
||||
"share_linkFriends": "Compartir con los contactos",
|
||||
"share_filterFriend": "Buscar por nombre",
|
||||
"notification_folderShared": "{0} ha compartido una carpeta contigo: <b>{1}</b>",
|
||||
"notification_fileShared": "{0} ha compartido un archivo contigo: <b>{1}</b>",
|
||||
"notification_padShared": "{0} ha compartido un documento contigo: <b>{1}</b>",
|
||||
"isNotContact": "{0} <b>no</b> es uno de tus contactos",
|
||||
"isContact": "{0} es uno de tus contactos",
|
||||
"team_inviteFrom": "Desde:",
|
||||
"team_inviteLinkCopy": "Copiar link",
|
||||
"team_inviteLinkCreate": "Crear link",
|
||||
"team_inviteLinkErrorName": "Porfavor añade un nombre para la persona que estás invitando. Lo pueden cambiar después. ",
|
||||
"team_inviteLinkWarning": "La primera persona en acceder a este link podrá unirse a este equipo y ver sus contenidos. Compártelo cuidadosamente.",
|
||||
"team_inviteLinkLoading": "Generando tu link",
|
||||
"team_inviteLinkNoteMsg": "Este mensaje será mostrado antes de que el/a recibidor/a decida unirse a este equipo.",
|
||||
"team_inviteLinkNote": "Añadir un mensaje personal",
|
||||
"team_inviteLinkSetPassword": "Proteger el link con una contraseña (recomendado)",
|
||||
"team_inviteLinkTempName": "Nombre temporal (visible en la lista de invitaciones pendientes)",
|
||||
"team_inviteLinkTitle": "Crear una invitación personalizada a este equipo",
|
||||
"contacts_muteInfo": "No recibirás ninguna notificación o mensajes de usuarios/as silenciados/as.<br>Ellos/as no sabrán que los/as has silenciado. ",
|
||||
"contacts_mutedUsers": "Cuentas silenciadas",
|
||||
"contacts_manageMuted": "Manejar silenciados/as",
|
||||
"contacts_unmute": "Dejar de silenciar",
|
||||
"contacts_mute": "Silenciar",
|
||||
"share_noContactsNotLoggedIn": "Accede o regístrate para ver tus contactos existentes y añadir nuevos.",
|
||||
"share_copyProfileLink": "Copiar link del perfil",
|
||||
"share_noContactsLoggedIn": "No estás conectado/a con nadie en CryptPad aún. Comparte el link hacia tu perfil para que la gente te envíe solicitudes de contacto.",
|
||||
"passwordFaqLink": "Leer más acerca de las contraseñas",
|
||||
"share_embedPasswordAlert": "Este ítem está protegido con contraseña. Cuando incruste este documento se le preguntará a los/as espectadores/as la contraseña.",
|
||||
"share_contactPasswordAlert": "Este ítem está protegido con contraseña. Porque lo estás compartiendo con un contacto de CryptPad, el/la recibidor/a no tendrá que ingresar la contraseña.",
|
||||
"share_linkPasswordAlert": "Este item está protegido con contraseña. Cuando envíes el link el/la recibidor/a tendrá que ingresar la contraseña.",
|
||||
"share_linkWarning": "Este link contiene las llaves para tu documento. Los/as recibidores/as obtendrán acceso irrevocable a tu contenido.",
|
||||
"pad_wordCount": "Palabras: {0}",
|
||||
"teams_table_role": "Rol",
|
||||
"teams_table_owners": "Manejar equipo",
|
||||
"teams_table_admins": "Manejar miembros/as",
|
||||
"teams_table_specificHint": "Estas son carpetas compartidas viejas en las cuales los espectadores aún tienen permiso para editar los documentos existentes. Los documentos creados o copiados en estas carpetas tendrán permisos estándar.",
|
||||
"teams_table_specific": "Excepciones",
|
||||
"teams_table_generic_own": "Manejar equipo: cambiar el nombre del equipo y su avatar, anñadir o expulsar propietarios/as, cambiar la suscripción del equipo, eliminar al equipo.",
|
||||
"teams_table_generic_admin": "Manejar miembros/as: invitar y expulsar miembros/as, cambiar los roles de los/as miembros/as hasta administrador/a.",
|
||||
"teams_table_generic_edit": "Editar: crear, modificar, y eliminar archivos y documentos.",
|
||||
"teams_table_generic_view": "Vista: acceso a archivos y documentos (solo lectura).",
|
||||
"teams_table_generic": "Roles y permisos",
|
||||
"teams_table": "Roles",
|
||||
"driveOfflineError": "Tu conexión a CryptPad ha sido perdida. Los cambios en este documento no serán guardados en tu CryptDrive. Porfavor cierra todas las pestañas de CryptPad e intenta de nuevo en una nueva ventana. ",
|
||||
"properties_passwordSuccessFile": "La contraseña fue exitosamente cambiada.",
|
||||
"properties_passwordWarningFile": "La contraseña ha sido cambiada exitosamente pero no pudimos actualizar tu CryptDrive con los datos nuevos. Tal vez tengas que eliminar la versión vieja del archivo manualmente.",
|
||||
"properties_confirmNewFile": "¿Estás seguro/a? Añadir una contraseña cambiará la URL de este archivo. Los/as usuarios/as sin la contraseña perderán el acceso a este archivo.",
|
||||
"properties_confirmChangeFile": "¿Estás seguro/a? Los/as usuarios/as sin la contraseña nueva perderán el acceso a este archivo.",
|
||||
"password_error_seed": "¡No se ha encontrado el documento!<br>Este error puede ser causado por dos factores: O una contraseña fue agregada/cambiada, o el documento ha sido eliminado del servidor.",
|
||||
"drive_sfPasswordError": "Contraseña incorrecta",
|
||||
"drive_sfPassword": "Tu carpeta compartida {0} ya no está disponible. O ha sido eliminada por su propietario/a o ahora está protegida con una nueva contraseña. Puedes quitar esta carpeta de tu CryptDrive, o recuperar el acceso usando la nueva contraseña.",
|
||||
"team_viewers": "Espectadores",
|
||||
"settings_codeBrackets": "Soportes de autocierre",
|
||||
"team_quota": "El límite de almacenamiento de tu equipo",
|
||||
"team_title": "Equipo: {0}",
|
||||
"team_demoteMeConfirm": "Estás a punto de renunciar a tus derechos. No vas a poder deshacer esta acción. ¿Estás seguro/a?",
|
||||
"team_pendingOwnerTitle": "Este/a administrador/a no ha aceptado el ofrecimiento de propiedad todavía.",
|
||||
"team_pendingOwner": "(pendiente)",
|
||||
"team_deleteConfirm": "Estás a punto de eliminar los datos de todo un equipo. Esto puede impactar el acceso a los datos de otros/as miembros/as del equipo. Esto no se puede deshacer. ¿Estás seguro/a de que quieres proceder?",
|
||||
"team_deleteButton": "Eliminar",
|
||||
"team_deleteHint": "Eliminar el equipo y todos los documentos de propiedad exclusiva del equipo.",
|
||||
"team_deleteTitle": "Eliminación de equipo",
|
||||
"team_pending": "Invitado/a",
|
||||
"sent": "Mensaje enviado",
|
||||
"team_kickConfirm": "{0} va a saber que lo/a has quitado del equipo. ¿Estás seguro/a?",
|
||||
"team_ownerConfirm": "Copropietarios/as pueden modificar o eliminar el equipo y quitarte como propietario/a. ¿Estás seguro/a?",
|
||||
"team_rosterPromoteOwner": "Ofrecer propiedad",
|
||||
"owner_team_add": "{0} quiere que seas un/a propietario/a del equipo <b>{1}</b>. ¿Aceptas?",
|
||||
"team_listSlot": "Ranura de equipo disponible",
|
||||
"team_listTitle": "Tus equipos",
|
||||
"team_maxTeams": "Cada cuenta de usuario/a tan solo puede ser miembro/a de {0} equipos.",
|
||||
"team_infoContent": "Cada equipo tiene su propio CryptDrive, quota de almacenamiento, chat, y lista de miembros/as. Los/as propietarios/as de equipos pueden borrar todo el equipo, los/as administradores/as pueden invitar or expulsar miembros/as y los/as miembros/as pueden dejar el equipo.",
|
||||
"team_avatarHint": "Tamaño máximo 500KB (png, jpg, jpeg, gif)",
|
||||
"team_avatarTitle": "Avatar del equipo",
|
||||
"team_nameHint": "Establece el nombre del equipo",
|
||||
"team_nameTitle": "Nombre del equipo",
|
||||
"team_members": "Miembros/as",
|
||||
"team_admins": "Administradores/as",
|
||||
"team_owner": "Propietarios/as",
|
||||
"team_leaveConfirm": "Si dejas este equipo perderás acceso a su CryptDrive, historial del chat, y otros contenidos. ¿Estás seguro/a?",
|
||||
"team_leaveButton": "Dejar este equipo",
|
||||
"team_inviteButton": "Invitar miembros",
|
||||
"team_rosterKick": "Expulsar del equipo",
|
||||
"team_rosterDemote": "Degradar",
|
||||
"team_rosterPromote": "Promocionar",
|
||||
"team_createName": "Nombre del equipo",
|
||||
"team_createLabel": "Crear un nuevo equipo",
|
||||
"team_infoLabel": "Acerca de equipos",
|
||||
"team_cat_admin": "Administración",
|
||||
"team_cat_drive": "Disco",
|
||||
"team_cat_chat": "Chat",
|
||||
"team_cat_members": "Miembros",
|
||||
"team_cat_back": "Devuelta a equipos",
|
||||
"team_cat_create": "Nuevo",
|
||||
"team_cat_list": "Equipos",
|
||||
"team_cat_general": "Acerca de",
|
||||
"team_declineInvitation": "{0} ha rechazado tu ofrecimiento para unirse al equipo: <b>{1}</b>",
|
||||
"team_acceptInvitation": "{0} ha aceptado tu ofrecimiento para unirse al equipo: <b>{1}</b>",
|
||||
"team_kickedFromTeam": "{0} te ha expulsado del equipo: <b>{1}</b>",
|
||||
"team_invitedToTeam": "{0} te ha invitado a unirte a su equipo: <b>{1}</b>",
|
||||
"team_pcsSelectHelp": "Crear un documento apropiado en el disco de tu equipo le dará propiedad al equipo.",
|
||||
"team_pcsSelectLabel": "Guardar en",
|
||||
"team_inviteModalButton": "Invitar",
|
||||
"team_pickFriends": "Elige a que contactos quieres invitar a este equipo",
|
||||
"share_linkTeam": "Añadir al drive de equipo",
|
||||
"owner_removedPending": "{0} ha rechazado tu ofrecimiento de propiedad para <b>{1}</b>",
|
||||
"owner_removed": "{0} ha eliminado tu propiedad de <b>{1}</b>",
|
||||
"owner_request_declined": "{0} ha rechazado tu ofrecimiento de ser propietario de <b>{1}</b>",
|
||||
"owner_request_accepted": "{0} ha aceptado tu ofrecimiento de ser propietario de <b>{1}</b>",
|
||||
"owner_request": "{0} quiere que seas un propietario de <b>{1}</b>",
|
||||
"owner_add": "{0} quiere que seas un propietario del documento <b>{1}</b>. ¿Aceptas?",
|
||||
"owner_addConfirm": "Los copropietarios podrán cambiar el contenido y eliminarte como propietario. ¿Estás seguro?",
|
||||
"owner_removeMeConfirm": "Estás a punto de renunciar a tus derechos de propiedad. No podrás deshacer esta acción. ¿Estás seguro?",
|
||||
"owner_removeConfirm": "¿Estás seguro de quitar la titularidad a los usuarios seleccionados? Se les notificará de esta acción.",
|
||||
"owner_unknownUser": "desconocido",
|
||||
"owner_removePendingText": "Pendiente",
|
||||
"owner_removeText": "Propietarios",
|
||||
"features_pricing": "{0} a {2}€ al mes",
|
||||
"features_noData": "No se requiere información personal",
|
||||
"homePage": "Página de inicio",
|
||||
"pricing": "Precios",
|
||||
"properties_unknownUser": "{0} usuario/s desconocido/s",
|
||||
"requestEdit_sent": "Solicitud enviada",
|
||||
"requestEdit_accepted": "{1} te ha concedido derechos de edición para el documento <b>{0}</b>",
|
||||
"requestEdit_request": "{1} quiere editar el documento <b>{0}</b>",
|
||||
"later": "Decidir más tarde",
|
||||
"requestEdit_viewPad": "Abrir el documento en una nueva pestaña",
|
||||
"requestEdit_confirm": "{1} ha pedido poder editar el documento <b>{0}</b>. ¿Quieres concederle/s acceso?",
|
||||
"requestEdit_button": "Solicitar derechos de edición",
|
||||
"support_notification": "Un administrador ha respondido a tu ticket de soporte",
|
||||
"notifications_dismissAll": "Rechazar todas",
|
||||
"notifications_cat_archived": "Historial",
|
||||
"notifications_cat_pads": "Compartido conmigo",
|
||||
"notifications_cat_friends": "Solicitudes de contacto",
|
||||
"notifications_cat_all": "Todas",
|
||||
"openNotificationsApp": "Abrir panel de notificaciones",
|
||||
"notificationsPage": "Notificaciones",
|
||||
"fc_noAction": "Ninguna acción disponible",
|
||||
"support_closed": "Este ticket ha sido cerrado",
|
||||
"support_from": "<b>De:</b> {0}",
|
||||
"support_formTitle": "Ticket nuevo",
|
||||
"support_cat_new": "Ticket nuevo",
|
||||
"support_disabledHint": "Esta instancia de CryptPad aún no está configurada para usar un formulario de soporte.",
|
||||
"support_disabledTitle": "El soporte no está habilitado",
|
||||
"admin_supportListHint": "Aquí está la lista de tickets enviados por los usuarios al buzón de soporte. Todos los administradores pueden ver los mensajes y sus respuestas. Un ticket cerrado no se puede volver a abrir. Solo puedes eliminar (ocultar) tickets cerrados, y los tickets eliminados siguen siendo visibles para otros administradores.",
|
||||
"admin_supportListTitle": "Buzón de soporte",
|
||||
"form_willClose": "Este formulario cerrará en {0}",
|
||||
"form_isClosed": "Este formulario fue cerrado en {0}",
|
||||
"form_isOpen": "Este formulario está abierto",
|
||||
"form_removeEnd": "Eliminar fecha de cierre",
|
||||
"form_setEnd": "Establecer fecha de cierre",
|
||||
"form_open": "Abrir",
|
||||
"form_isPrivate": "Las respuestas son privadas",
|
||||
"form_isPublic": "Las respuestas son públicas",
|
||||
"form_makePublicWarning": "¿Estás seguro/a que quieres hacer las respuestas a este formulario públicas? Las respuestas pasadas y futuras serán visibles por los participantes. Esto no se puede deshacer.",
|
||||
"form_makePublic": "Publicar respuestas",
|
||||
"form_invalidQuestion": "Pregunta {0}",
|
||||
"form_invalidWarning": "Hay errores en algunas respuestas:",
|
||||
"form_input_ph_url": "https://ejemplo.com",
|
||||
"form_input_ph_email": "email@ejemplo.com",
|
||||
"form_notAnswered": "<b>{0}</b> respuestas vacías",
|
||||
"form_answerWarning": "Identidad sin confirmar",
|
||||
"form_answerName": "Respuesta desde {0} en {1}",
|
||||
"form_backButton": "Atrás",
|
||||
"form_viewButton": "Ver",
|
||||
"form_answerAnonymous": "Respuesta anónima en {0}",
|
||||
"form_showSummary": "Mostrar sumario",
|
||||
"form_showIndividual": "Mostrar respuestas individuales",
|
||||
"form_editor": "Editor",
|
||||
"form_results_empty": "No hay respuestas",
|
||||
"form_results": "Respuestas ({0})",
|
||||
"form_answered": "Ya has respondido a este formulario",
|
||||
"form_cantFindAnswers": "No se pudieron recuperar tus respuestas existentes para este formulario.",
|
||||
"form_updateWarning": "Actualizar de todos modos",
|
||||
"form_submitWarning": "Enviar de todos modos",
|
||||
"form_delete": "Eliminar",
|
||||
"form_reset": "Reiniciar",
|
||||
"form_submit": "Enviar",
|
||||
"form_maxOptions": "respuesta(s) máximas {0}",
|
||||
"form_description_default": "Tu texto aquí",
|
||||
"form_type_page": "Salto de página",
|
||||
"form_type_md": "Descripción",
|
||||
"form_sort_hint": "Por favor arrastre estos ítems desde el más (1) al menos ({0}) preferido.",
|
||||
"form_type_sort": "Lista ordenada",
|
||||
"form_type_poll": "Encuesta",
|
||||
"form_type_multicheck": "Cuadrícula de casillas de verificación",
|
||||
"form_type_checkbox": "Casilla de verificación",
|
||||
"form_type_multiradio": "Escoge la red",
|
||||
"form_type_radio": "Opción",
|
||||
"form_type_textarea": "Párrafo",
|
||||
"form_type_input": "Texto",
|
||||
"form_default": "¿Tu pregunta aquí?",
|
||||
"form_text_number": "Número",
|
||||
"form_text_email": "Correo",
|
||||
"form_text_url": "Link",
|
||||
"form_text_text": "Texto",
|
||||
"form_textType": "Tipo de texto",
|
||||
"form_pollYourAnswers": "Tus respuestas",
|
||||
"form_pollTotal": "Total",
|
||||
"form_poll_switch": "Intercambio de ejes",
|
||||
"form_poll_time": "Tiempo",
|
||||
"form_poll_day": "Día",
|
||||
"form_poll_text": "Texto",
|
||||
"form_editType": "Tipo de opción",
|
||||
"form_editMaxLength": "Máximos carácteres",
|
||||
"form_editMax": "Máximas opciones seleccionables",
|
||||
"form_editBlock": "Editar",
|
||||
"form_invalid": "Formulario inválido",
|
||||
"share_formView": "Participante",
|
||||
"share_formAuditor": "Auditor/a",
|
||||
"share_formEdit": "Autor/a",
|
||||
"admin_supportPrivButton": "Mostrar llave",
|
||||
"admin_supportPrivHint": "Muestra la llave privada que otros/as administradores/as necesitarán para ver tickets de soporte. Una forma de ingresar esta llave será mostrada en su panel de administrador/a.",
|
||||
"admin_supportInitGenerate": "Generar llaves de soporte",
|
||||
"admin_supportPrivTitle": "Llave privada del buzón de soporte",
|
||||
"admin_emailHint": "Establece el correo de contacto para tu instancia aquí",
|
||||
"admin_emailTitle": "Correo de contacto del administrador/a",
|
||||
"oo_importBin": "Presiona OK para importar el formato .bin interno de CryptPad.",
|
||||
"oo_conversionSupport": "Tu navegador no puede manejar la conversión hacia y desde formatos de office. Sugerimos usar una versión reciente de Firefox o Chrome.",
|
||||
"register_registrationIsClosed": "La registración está cerrada.",
|
||||
"mediatag_defaultImageName": "imágen",
|
||||
"genericCopySuccess": "Copiado al portapapeles",
|
||||
"toolbar_storeInDrive": "Guardar en CryptDrive",
|
||||
"calendar_noNotification": "Ninguno",
|
||||
"calendar_addNotification": "Añadir recordatorio",
|
||||
"calendar_notifications": "Recordatorios",
|
||||
"settings_notifCalendarCheckbox": "Activar notificaciones del calendario",
|
||||
"settings_notifCalendarHint": "Activa/desactiva todas las notificaciones para los próximos eventos del calendario.",
|
||||
"settings_notifCalendarTitle": "Notificaciones del calendario",
|
||||
"reminder_date": "<b>{0}</b> en {1}",
|
||||
"reminder_time": "<b>{0}</b> hoy a las {1}",
|
||||
"reminder_minutes": "<b>{0}</b> empezará en {1} minuto(s)",
|
||||
"reminder_inProgressAllDay": "Hoy: <b>{0}</b>",
|
||||
"reminder_inProgress": "<b>{0}</b> ha empezado en {1}",
|
||||
"reminder_now": "<b>{0}</b> ha empezado",
|
||||
"reminder_missed": "<b>{0}</b> tuvo lugar en {1}",
|
||||
"calendar_more": "{0} más",
|
||||
"calendar_days": "Días",
|
||||
"calendar_hours": "Horas",
|
||||
"calendar_minutes": "Minutos",
|
||||
"calendar_allDay": "Todo el día",
|
||||
"calendar_location": "Localización: {0}",
|
||||
"calendar_loc": "Localización",
|
||||
"calendar_title": "Título",
|
||||
"calendar_dateTimeRange": "{0} {1} - {2}",
|
||||
"calendar_dateRange": "{0} - {1}",
|
||||
"calendar_newEvent": "Nuevo evento",
|
||||
"calendar_import": "Añadir a mis calendarios",
|
||||
"calendar_errorNoCalendar": "Ningún calendario editable seleccionado",
|
||||
"calendar_deleteOwned": "Se mantendrá visible para otros/as usuarios/as con los que se haya compartido.",
|
||||
"calendar_deleteTeamConfirm": "¿Estás seguro/a que quieres eliminar este calendario del equipo?",
|
||||
"calendar_deleteConfirm": "¿Estás seguro/a que quieres eliminar este calendario de tu cuenta?",
|
||||
"calendar_today": "Hoy",
|
||||
"calendar_month": "Mes",
|
||||
"calendar_week": "Semana",
|
||||
"calendar_day": "Día",
|
||||
"calendar_new": "Nuevo calendario",
|
||||
"calendar_default": "Mi calendario",
|
||||
"calendar": "Calendario",
|
||||
"calendar_before": "antes",
|
||||
"calendar_weekNumber": "Semana {0}",
|
||||
"calendar_import_temp": "Importar este calendario",
|
||||
"pad_goToAnchor": "Ir al anclaje",
|
||||
"oo_cantMigrate": "Esta hoja excede el tamaño máximo de subida y es muy grande para ser migrada.",
|
||||
"footer_roadmap": "Hoja de ruta",
|
||||
"settings_deleteSubscription": "Manejar mi suscripción",
|
||||
"settings_deleteContinue": "Eliminar mi cuenta",
|
||||
"settings_deleteWarning": "Advertencia: actualmente estás suscrito/a a un plan premium (pagado o dado por otro/a usuario/a). Por favor cancela tu plan antes de eliminar tu cuenta ya que no será posible sin contactar a soporte una vez tu cuenta esté eliminada.",
|
||||
"broadcast_newCustom": "Mensaje de los/as administradores/as",
|
||||
"broadcast_preview": "Previsualizar notificación",
|
||||
"broadcast_defaultLanguage": "Volver a este idioma",
|
||||
"broadcast_translations": "Traducciones",
|
||||
"admin_broadcastCancel": "Eliminar mensaje",
|
||||
"admin_broadcastActive": "Mensaje activo",
|
||||
"admin_broadcastButton": "Envíar",
|
||||
"admin_broadcastHint": "Envía un mensaje a todos/as los/as usuarios/as en esta instancia. Todos/as los/as usuarios/as nuevos/as y existentes lo recibirán como una notificación. Previsualiza los mensajes antes de enviarlos con \"Previsualizar notificación\". Las notificaciones de previsualización tienen un ícono rojo y son visibles sólo para ti.",
|
||||
"admin_broadcastTitle": "Mensaje de difusión",
|
||||
"broadcast_surveyURL": "Link del cuestionario",
|
||||
"admin_surveyActive": "Abrir cuestionario",
|
||||
"admin_surveyCancel": "Eliminar",
|
||||
"admin_surveyButton": "Guardar cuestionario",
|
||||
"broadcast_newSurvey": "Un nuevo cuestionario está disponible. Presiona para abrir.",
|
||||
"admin_surveyHint": "Añade, actualiza o borra un link a un cuestionario externo. Los/as usuarios/as recibirán una notificación y el cuestionario se mantendrá disponible desde el menú de usuario/a.",
|
||||
"admin_surveyTitle": "Cuestionario",
|
||||
"broadcast_maintenance": "Un mantenimiento está planeado entre las <b>{0}</b> y <b>{1}</b>. CryptPad puede no estar disponible durante ese tiempo.",
|
||||
"broadcast_end": "Terminar",
|
||||
"broadcast_start": "Empezar",
|
||||
"admin_maintenanceCancel": "Cancelar mantenimiento",
|
||||
"admin_maintenanceButton": "Planear mantenimiento",
|
||||
"admin_maintenanceHint": "Planear un mantenimiento en esta instancia y notificar a todos/as los/as usuarios/as. Limitado a un mantenimiento activo en un momento dado.",
|
||||
"admin_maintenanceTitle": "Mantenimiento",
|
||||
"admin_cat_broadcast": "Difusión",
|
||||
"fm_cantUploadHere": "No se puede subir un archivo aquí",
|
||||
"importError": "Fallo al importar (formato incorrecto)",
|
||||
"addOptionalPassword": "Añadir una contraseña (opcional)",
|
||||
"settings_colortheme_custom": "Personalizado",
|
||||
"pad_settings_show": "Mostrar",
|
||||
"pad_settings_hide": "Esconder",
|
||||
"pad_settings_comments": "Escoge si los comentarios deberían ser visibles o escondidos por defecto.",
|
||||
"pad_settings_outline": "Escoge si la tabla de contemidos debería ser visible o escondida por defecto.",
|
||||
"pad_settings_width_large": "Ancho total",
|
||||
"pad_settings_width_small": "Modo de página",
|
||||
"pad_settings_info": "Configuraciones por defecto para este documento. Estos serán aplicados cuando usuarios/as nuevos/as visiten este documento.",
|
||||
"pad_settings_title": "Configuración del documento",
|
||||
"settings_colorthemeTitle": "Tema del color",
|
||||
"settings_colorthemeHint": "Cambiar los colores en general de CryptPad en este dispositivo.",
|
||||
"settings_colortheme_default": "Tema del sistema por defecto ({0})",
|
||||
"settings_colortheme_light": "Blanco",
|
||||
"settings_colortheme_dark": "Negro",
|
||||
"settings_cat_style": "Apariencia",
|
||||
"admin_performancePercentHeading": "Porcentaje",
|
||||
"admin_performanceTimeHeading": "Tiempo (segundos)",
|
||||
"admin_performanceKeyHeading": "Comando",
|
||||
"admin_performanceProfilingTitle": "Rendimiento",
|
||||
"admin_performanceProfilingHint": "Una visión general del tiempo total gastado ejecutando varios comandos en el lado del servidor",
|
||||
"admin_cat_performance": "Rendimiento",
|
||||
"redo": "Rehacer",
|
||||
"undo": "Deshacer",
|
||||
"settings_cacheButton": "Limpiar caché existente",
|
||||
"settings_cacheCheckbox": "Activar caché en este dispositivo",
|
||||
"settings_cacheHint": "CryptPad guarda partes de tus documentos en la memoria de tu navegador para poder ahorrar en uso de la red y mejorar los tiempos de carga. Puedes desactivar el caché si tu dispositivo no tiene mucho espacio libre. Por razones de seguridad, el caché siempre es limpiado cuando cierras sesión, pero puedes limpiarlo manualmente si quieres recuperar espacio de almacenamiento en tu máquina.",
|
||||
"settings_cacheTitle": "Caché",
|
||||
"docs_link": "Documentación",
|
||||
"creation_helperText": "Abrir en documentación",
|
||||
"creation_expiresIn": "Expira en",
|
||||
"register_warning_note": "Debido a la naturaleza encriptada de CryptPad, los/as administradores/as de servicio no podrán recuperar los datos en caso de que olvides tu nombre de usuario/a y/o contraseña. Por favor guardalos en un lugar seguro.",
|
||||
"register_notes": "<ul class=\"cp-notes-list\"><li>Tu contraseña es la llave secreta que encripta todos tus documentos. <span class=\"red\">Si la pierdes no hay forma que podamos recuperar tus datos.</span></li><li>Si estás usando una computadora compartida, <span class=\"red\">recuerda cerrar la sesión</span> cuando estés listo/a. Tan solo cerrar la ventana del navegador dejará a tu cuenta expuesta. </li><li>Para mantener los documentos que creaste y/o guardaste sin acceder, marca \"Importar documentos de tu sesión de invitado/a\".</li></ul>",
|
||||
"register_notes_title": "Notas importantes",
|
||||
"offlineError": "No se han podido sincronizar los datos más recientes, esta página no puede ser mostrada ahora. La carga continuará cuando tu conexión al servicio sea restaurada.",
|
||||
"share_noContactsOffline": "Actualmente estás fuera de línea. Los contactos no están disponibles.",
|
||||
"access_offline": "Actualmente estás fuera de línea. Manejo de acceso no está disponible.",
|
||||
"admin_support_first": "Creado en: ",
|
||||
"admin_support_collapse": "Colapsar",
|
||||
"admin_support_open": "Mostrar",
|
||||
"admin_support_closed": "Tickets cerrados:",
|
||||
"admin_support_answered": "Tickets respondidos:",
|
||||
"admin_support_normal": "Tickets sin responder:",
|
||||
"admin_support_premium": "Tickets premium:",
|
||||
"contacts_confirmCancel": "¿Estás seguro/a que quieres cancelar tu solicitud de contacto con <b>{0}</b>?",
|
||||
"history_trimPrompt": "Este documento ha acumulado {0} de historial que puede ralentizar el tiempo de carga. Considere borrar el historial si no es necesario.",
|
||||
"mediatag_loadButton": "Cargar adjunto",
|
||||
"settings_mediatagSizeHint": "Tamaño máximo en megabytes (MB) para automáticamente cargar elementos multimedia (imágenes, vídeos, pdf) incrustados en documentos. Elementos más grandes que el tamaño especificado pueden ser cargados manualmente. Use \"-1\" para siempre cargar los elementos multimedia automáticamente.",
|
||||
"settings_mediatagSizeTitle": "Límite automático de descarga",
|
||||
"mediatag_notReady": "Por favor complete la descarga",
|
||||
"pad_mediatagOpen": "Abrir archivo",
|
||||
"pad_mediatagShare": "Compartir archivo",
|
||||
"mediatag_saveButton": "Guardar",
|
||||
"Offline": "Fuera de línea",
|
||||
"download_zip_file": "Archivo {0}/{1}",
|
||||
"download_zip": "Construyendo archivo ZIP…",
|
||||
"fileTableHeader": "Descargas y subidas",
|
||||
"allowNotifications": "Permitir notificaciones",
|
||||
"archivedFromServer": "Documento archivado",
|
||||
"restoredFromServer": "Documento restaurado",
|
||||
"admin_archiveInput2": "Contraseña del documento",
|
||||
"admin_archiveInput": "URL del documento",
|
||||
"admin_unarchiveButton": "Restaurar",
|
||||
"admin_unarchiveHint": "Restaurar un documento que fue previamente archivado",
|
||||
"admin_archiveButton": "Archivo",
|
||||
"admin_archiveHint": "Hacer un documento no disponible sin eliminarlo permanentemente. Será puesto en un directorio 'archivo' y eliminado luego de unos días (configurable en el archivo de configuración del servidor).",
|
||||
"errorPopupBlocked": "CryptPad necesita poder abrir nuevas pestañas para operar. Por favor permita las ventanas emergentes en la barra de direcciones de su navegador. Estas ventanas nunca van a ser usadas para mostrarle anuncios.",
|
||||
"unableToDisplay": "No se puede mostrar este documento. Por favor presione Esc para recargar la página. Si el problema persiste, por favor contacte a soporte.",
|
||||
"documentID": "Identificador del documento",
|
||||
"error_unhelpfulScriptError": "Error de script: Vea la consola del navegador para los detalles",
|
||||
"tag_edit": "Editar",
|
||||
"tag_add": "Añadir",
|
||||
"loading_state_5": "Reconstruir documento",
|
||||
"loading_state_4": "Cargar equipos",
|
||||
"loading_state_3": "Cargar carpetas compartidas",
|
||||
"loading_state_2": "Actualizar el contenido",
|
||||
"loading_state_1": "Cargar el disco",
|
||||
"loading_state_0": "Construir interfaz",
|
||||
"fm_shareFolderPassword": "Proteger esta carpeta con una contraseña (opcional)",
|
||||
"access_destroyPad": "Destruir este documento o carpeta permanentemente",
|
||||
"fm_deletedFolder": "Carpeta eliminada",
|
||||
"admin_limitUser": "Llave pública del usuario/a",
|
||||
"team_exportButton": "Descargar",
|
||||
"team_exportHint": "Descargar todos los documentos en el disco de este equipo. Los documentos serán descargados en formatos que sean legibles para otras aplicaciones cuando cierto formato esté disponible. Cuando cierto formato no esté disponible, los documentos serán descargados en un formato legible por CryptPad.",
|
||||
"team_exportTitle": "Descargar disco del equipo",
|
||||
"admin_cat_quota": "Almacenamiento del usuario/a",
|
||||
"admin_invalLimit": "Valor de límite inválido",
|
||||
"admin_invalKey": "Llave pública inválida",
|
||||
"admin_limitSetNote": "Nota",
|
||||
"admin_limitMB": "Límite (en MB)",
|
||||
"admin_setlimitTitle": "Aplicar un límite personalizado",
|
||||
"admin_setlimitHint": "Establecer límites personalizados para usuarios/as usando su llave pública. Puedes actualizar o borrar un límite existente.",
|
||||
"admin_limitNote": "Nota: {0}",
|
||||
"admin_limitPlan": "Plan: {0}",
|
||||
"admin_getlimitsTitle": "Límites personalizados",
|
||||
"admin_getlimitsHint": "Enlistar todos los límites de almacenamiento personalizados aplicados en tu instancia.",
|
||||
"admin_limit": "Límite actual: {0}",
|
||||
"admin_setlimitButton": "Establecer límite",
|
||||
"admin_defaultlimitTitle": "Límite de almacenamiento (MB)",
|
||||
"admin_defaultlimitHint": "Límite de almacenamiento máximo para los CryptDrives (usuarios/as y equipos) cuando no hay una regla personalizada aplicada",
|
||||
"admin_registrationTitle": "Cerrar registración",
|
||||
"admin_registrationHint": "No permitir a ningún usuario/a nuevo/a registrarse",
|
||||
"snapshots_cantMake": "La instantánea no pudo ser creada. Estás desconectado/a.",
|
||||
"snapshots_notFound": "Esta instantánea ya no existe debido a que el historial del documento ha sido borrado.",
|
||||
"snapshot_error_exists": "Ya hay una instantánea de esta versión",
|
||||
"snapshots_ooPickVersion": "Debes seleccionar una versión antes de crear una instantánea",
|
||||
"oo_version": "Versión: ",
|
||||
"oo_version_latest": "Último",
|
||||
"snapshots_delete": "Eliminar",
|
||||
"oo_deletedVersion": "Esta versión ya no existe en el historial.",
|
||||
"snapshots_close": "Cerrar",
|
||||
"snapshots_restore": "Restaurar",
|
||||
"snapshots_open": "Abrir",
|
||||
"snapshots_placeholder": "Título de la instantánea",
|
||||
"snapshots_new": "Nueva Instantánea",
|
||||
"snapshots_button": "Instantáneas",
|
||||
"snaphot_title": "Instantánea",
|
||||
"infobar_versionHash": "Actualmente estás viendo una versión pasada de este documento ({0}).",
|
||||
"history_restoreDriveDone": "CryptDrive restaurado",
|
||||
"history_restoreDrivePrompt": "¿Estás seguro/a de que quieres reemplazar la versión actual del CryptDrive con la versión mostrada?",
|
||||
"history_restoreDriveTitle": "Restaurar la versión seleccionada del CryptDrive",
|
||||
"history_userNext": "Siguiente autor/a",
|
||||
"history_fastNext": "Siguiente sesión de edición",
|
||||
"history_userPrev": "Autor/a previo/a",
|
||||
"history_fastPrev": "Sesión de edición previa",
|
||||
"share_versionHash": "Estás a punto de compartir la versión del historial seleccionado del documento en el modo de solo lectura. Esto también <b>dará acceso de visión</b> para todas las versiones del documento.",
|
||||
"history_shareTitle": "Compartir un link a esta versión",
|
||||
"history_cantRestore": "Restauración fallida. Estás desconectado/a.",
|
||||
"history_close": "Cerrar",
|
||||
"history_restore": "Restaurar",
|
||||
"share_bar": "Crear link",
|
||||
"settings_cat_kanban": "Kanban",
|
||||
"settings_kanbanTagsOr": "O",
|
||||
"settings_kanbanTagsAnd": "Y",
|
||||
"settings_kanbanTagsHint": "Selecciona como quieres que actúe el filtro de etiquetas cuando se seleccionen múltiples etiquetas: solo mostrar tarjetas conteniendo todas las etiquetas seleccionadas (Y) o mostrar tarjetas conteniendo cualquiera de las etiquetas seleccionadas (O)",
|
||||
"settings_kanbanTagsTitle": "Filtro de etiquetas",
|
||||
"pad_tocHide": "Esquema",
|
||||
"fm_noResult": "No se encontraron resultados",
|
||||
"fm_restricted": "No tienes acceso",
|
||||
"fm_emptyTrashOwned": "Tu basurero contiene documentos que te pertenecen. Puedes <b>borrarlos</b> solamente de tu disco, o <b>detruirlos</b> para todos/as los/as usuarios/as.",
|
||||
"support_formCategoryError": "Error: la categoría está vacía",
|
||||
"support_category": "Escoge una categoría",
|
||||
"oo_refresh": "Refrescar",
|
||||
"notification_folderSharedTeam": "{0} ha compartido una carpet con el equipo {2}: <b>{1}</b>",
|
||||
"notification_fileSharedTeam": "{0} ha compartido un archivo con el equipo {2}: <b>{1}</b>",
|
||||
"notification_padSharedTeam": "{0} ha compartido un documento con el equipo {2}: <b>{1}</b>",
|
||||
"support_addAttachment": "Añadir adjunto",
|
||||
"support_attachments": "Adjuntos",
|
||||
"support_cat_all": "Todo",
|
||||
"support_cat_other": "Otros",
|
||||
"support_cat_bug": "Reporte de fallos",
|
||||
"support_cat_data": "Pérdida de contenido",
|
||||
"support_cat_account": "Cuenta de usuario/a",
|
||||
"info_privacyFlavour": "<a>Política de privacidad</a> para esta instancia",
|
||||
"user_about": "Acerca de CryptPad",
|
||||
"info_imprintFlavour": "<a>Información legal</a> acerca de los/as administradores/as de esta instancia",
|
||||
"settings_safeLinkDefault": "Los links seguros ahora están activados por defecto. Por favor usa el menú <i></i><b>Compartir</b> para compartir links en lugar de la barra de direcciones de tu navegador.",
|
||||
"support_languagesPreamble": "El equipo de soporte habla los siguientes idiomas:",
|
||||
"slide_textCol": "Color del texto",
|
||||
"slide_backCol": "Color de fondo",
|
||||
"toolbar_file": "Archivo",
|
||||
"code_editorTheme": "Tema del editor",
|
||||
"drive_treeButton": "Archivos",
|
||||
"toolbar_tools": "Herramientas",
|
||||
"toolbar_savetodrive": "Guardar como imagen",
|
||||
"toolbar_insert": "Insertar",
|
||||
"toolbar_theme": "Tema",
|
||||
"todo_move": "Tu lista de cosas por hacer ahora está en el kanban <b>{0}</b> en tu Disco.",
|
||||
"fm_sort": "Ordenar",
|
||||
"comments_error": "No se puede comentar aquí",
|
||||
"settings_padNotifCheckbox": "Desactivar las notificaciones de comentarios",
|
||||
"settings_padNotifHint": "Ignorar las notificaciones cuando alguien responda a uno de tus comentarios",
|
||||
"comments_comment": "Comentar",
|
||||
"comments_resolve": "Resolver",
|
||||
"comments_reply": "Responder",
|
||||
"comments_submit": "Envíar",
|
||||
"comments_edited": "Editado",
|
||||
"comments_deleted": "Comentario eliminado por su autor/a",
|
||||
"mentions_notification": "{0} te ha mencionado en <b>{1}</b>",
|
||||
"unknownPad": "Documento desconocido",
|
||||
"comments_notification": "Responde a tu comentario \"{0}\" en <b>{1}</b>",
|
||||
"cba_title": "Colores del autor",
|
||||
"oo_login": "Por favor accede o regístrate para mejorar el rendimiento de las hojas de cálculo.",
|
||||
"cba_hide": "Esconder los colores del autor",
|
||||
"cba_show": "Mostrar los colores del autor",
|
||||
"cba_disable": "Limpiar y desactivar",
|
||||
"cba_enable": "Activar",
|
||||
"cba_hint": "Esta configuración será recordada cuando crees tu próximo documento.",
|
||||
"cba_properties": "Colores de autor (experimental)",
|
||||
"cba_writtenBy": "Escrito por: {0}",
|
||||
"canvas_select": "Seleccionar",
|
||||
"canvas_brush": "Pincel",
|
||||
"admin_openFilesHint": "Número de descriptores de archivo actualmente abiertos en el servidor.",
|
||||
"admin_openFilesTitle": "Abrir archivos",
|
||||
"profile_copyKey": "Copiar llave pública",
|
||||
"oo_isLocked": "sincronizando los cambios, por favor espere",
|
||||
"kanban_editBoard": "Editar este tablero",
|
||||
"kanban_editCard": "Editar esta tarjeta",
|
||||
"kanban_clearFilter": "Limpiar filtro",
|
||||
"kanban_conflicts": "Actualmente editando:",
|
||||
"kanban_noTags": "Sin etiquetas",
|
||||
"kanban_tags": "Filtrar por etiqueta",
|
||||
"kanban_delete": "Eliminar",
|
||||
"kanban_color": "Color",
|
||||
"kanban_body": "Contenido",
|
||||
"kanban_title": "Título",
|
||||
"teams": "Equipos",
|
||||
"allow_text": "Usar una lista de acceso significa que solo los/as usuarios/as seleccionados/as y propietarios/as podrán acceder a este documento.",
|
||||
"logoutEverywhere": "Cerrar sesión en todos lados",
|
||||
"owner_text": "El/los/as propietario/a/s de un documento son los/as únicos/as usuarios/as autorizados/as para: añadir/expulsar propietarios/as, restringir acceso al documento con una lista de acceso, o eliminar el documento.",
|
||||
"access_muteRequests": "Silenciar solicitudes de acceso para este documento",
|
||||
"allow_label": "Lista de acceso: {0}",
|
||||
"allow_disabled": "desactivado",
|
||||
"allow_enabled": "activado",
|
||||
"allow_checkbox": "Activar lista de acceso",
|
||||
"access_noContact": "No hay otro contacto que añadir",
|
||||
"contacts": "Contactos",
|
||||
"restrictedError": "No estás autorizado/a para acceder a este documento",
|
||||
"accessButton": "Acceso",
|
||||
"access_allow": "Lista",
|
||||
"access_main": "Acceso",
|
||||
"copy_title": "{0} (copiar)",
|
||||
"makeACopy": "Hacer una copia",
|
||||
"settings_trimHistoryHint": "Ahorra espacio de almacenamiento al borrar el historial de tu disco y notificaciones. Esto no afectará el historial de tus documentos. Puedes borrar el historial de los documentos en su diálogo de propiedades.",
|
||||
"settings_trimHistoryTitle": "Borrar historial",
|
||||
"trimHistory_noHistory": "No hay historial que pueda ser borrado",
|
||||
"trimHistory_currentSize": "Tamaño del historial actual: <b>{0}</b>",
|
||||
"trimHistory_needMigration": "Porfavor <a>actualize su CryptDrive</a> para activar esta función.",
|
||||
"trimHistory_success": "El historial ha sido borrado",
|
||||
"trimHistory_error": "Ha habido un error al borrar el historial",
|
||||
"trimHistory_getSizeError": "Ha habido un error mientras se calculaba el tamaño del historial de tu disco",
|
||||
"trimHistory_button": "Borrar historial",
|
||||
"historyTrim_contentsSize": "Contenidos: {0}",
|
||||
"historyTrim_historySize": "Historial: {0}",
|
||||
"areYouSure": "¿Estás seguro/a?",
|
||||
"settings_safeLinksHint": "CryptPad incluye las llaves para desencriptar tus documentos en sus links. Cualquiera con acceso a tu historial de búsqueda puede potencialmente leer tus datos. Esto incluye a extensiones del navegador intrusivas y navegadores que sincronizan tu historial de búsqueda entre dispositivos. Activar \"links seguros\" previene que las llaves entren a tu historial de búsqueda o que sean mostradas en la barra de direcciones cuando sea posible. Recomendamos encarecidamente que actives esta función y usar el {0} menú Compartir para generar links compartibles.",
|
||||
"profile_login": "Necesita acceder para poder añadir a este usuario/a a tus contactos",
|
||||
"dontShowAgain": "No mostrar de nuevo",
|
||||
"safeLinks_error": "Este link fue copiado directamente desde la barra de direcciones del navegador y no provee acceso al documento. Porfavor use el menú <i></i> <b>Compartir</b> para compartir directamente con contactos o copiar el link. <a> Leer más acerca de la función links seguros</a>.",
|
||||
"settings_safeLinksCheckbox": "Activar links seguros",
|
||||
"settings_safeLinksTitle": "Links seguros",
|
||||
"settings_cat_security": "Confidencialidad",
|
||||
"imprint": "Aviso legal",
|
||||
"oo_sheetMigration_anonymousEditor": "Este documento requiere una actualización. La edición está desactivada para espectadores/as hasta que un/a usuario/a registrado/a lo abra.",
|
||||
"oo_sheetMigration_complete": "Versión actualizada disponible, presione OK para recargar.",
|
||||
"admin_consentToContactTitle": "Consentir a contacto",
|
||||
"admin_checkupButton": "Ejecutar diagnóstico",
|
||||
"admin_checkupHint": "Cryptopad incluye una página que automáticamente diagnostica errores comunes y sugiere cómo corregirlos si fuera necesario.",
|
||||
"admin_checkupTitle": "Valide la configuración de la instancia",
|
||||
"admin_updateAvailableButton": "Ver las notas de lanzamiento",
|
||||
"admin_updateAvailableHint": "Una versión nueva de CryptPad está disponible",
|
||||
"admin_updateAvailableTitle": "Nuevas versiones",
|
||||
"admin_cat_network": "Red",
|
||||
"mdToolbar_embed": "Incrustar archivo",
|
||||
"restrictedLoginPrompt": "No estás autorizado/a a acceder a este documento. <a>Accede</a> si crees que tu cuenta debería poder accederlo.",
|
||||
"copyToClipboard": "Copiar al portapapeles",
|
||||
"settings_driveRedirect": "Redirigirme automáticamente",
|
||||
"settings_driveRedirectHint": "La redirección automática desde la página de inicio al disco cuando ya accedió ya no está activada por defecto. El comportamiento de legado puede ser activado abajo.",
|
||||
"settings_driveRedirectTitle": "Redirección a la página de inicio",
|
||||
"form_page": "Página {0}/{1}",
|
||||
"form_clear": "Limpiar",
|
||||
"form_addMultipleHint": "Añadir múltiples fechas y tiempos",
|
||||
"form_addMultiple": "Añadir todo",
|
||||
"form_anonymous_blocked": "Las respuestas de invitados/a están bloqueadas para este formulario. Debes <a href=\"/login/\">acceder</a> o <a href=\"/register/\">registrarte</a> para enviar respuestas.",
|
||||
"form_add_item": "Añadir ítem",
|
||||
"form_add_option": "Añadir opción",
|
||||
"form_newItem": "Nuevo ítem",
|
||||
"form_newOption": "Nueva opción",
|
||||
"form_defaultItem": "Ítem {0}",
|
||||
"form_defaultOption": "Opción {0}",
|
||||
"form_anonymous_off": "Bloqueado",
|
||||
"form_anonymous_on": "Permitido",
|
||||
"form_anonymous": "Acceso de invitado/a (sin acceder)",
|
||||
"oo_sheetMigration_loading": "Actualizando tu documento a la última versión. Porfavor espera aproximadamente 1 minuto.",
|
||||
"oo_exportInProgress": "Exportación en progreso",
|
||||
"oo_importInProgress": "Importación en progreso",
|
||||
"oo_invalidFormat": "Este archivo no puede ser importado",
|
||||
"burnAfterReading_warningDeleted": "Este documento ha sido eliminado permanentemente, cuando cierres esta ventana no podrás acceder a el otra vez.",
|
||||
"burnAfterReading_proceed": "ver y eliminar",
|
||||
"burnAfterReading_warningAccess": "Este documento se va a autodestruir. Cuando presiones el botón de abajo verás el contenido una vez antes de que sea eliminado permanentemente. Cuando cierres esta ventana no vas a poder acceder a este otra vez. Si no estás listo/a para proceder puedes cerrar esta ventana y volver más tarde.",
|
||||
"burnAfterReading_generateLink": "Presiona el botón de abajo para generar un link.",
|
||||
"burnAfterReading_warningLink": "Has configurado este documento para autodestruir. Cuando el/la recibidor/a visíte el link, podrán ver el documento una vez antes de que sea eliminado permanentemente.",
|
||||
"burnAfterReading_linkBurnAfterReading": "Ver una vez y autodestruir",
|
||||
"team_inviteLinkError": "Ha habido un error mientras se creaba el link.",
|
||||
"team_inviteInvalidLinkError": "Este link de invitación no es válido.",
|
||||
"team_links": "Links de invitación",
|
||||
"team_cat_link": "Link de invitación",
|
||||
"team_inviteGetData": "Obteniendo datos del equipo",
|
||||
"team_inviteTitle": "Invitación de equipo",
|
||||
"team_inviteJoin": "Unirse al equipo",
|
||||
"team_invitePasswordLoading": "Desencriptando invitación",
|
||||
"team_inviteEnterPassword": "Porfavor ingrese la contraseña de invitación para continuar.",
|
||||
"team_invitePleaseLogin": "Porfavor accede o regístrate para aceptar esta invitación.",
|
||||
"team_inviteFromMsg": "{0} te ha invitado a que te unas al equipo <b>{1}</b>",
|
||||
"admin_conflictExplanation": "Existen dos versiones de este documento. Restaurar la versión archivada sobreescribirá la versión activa. Archivar la versión activa sobreescribirá la versión archivada. Ninguna acción puedes ser deshecha.",
|
||||
"admin_documentConflict": "Archivar/restaurar",
|
||||
"og_encryptedAppType": "Encriptado {0}",
|
||||
"ui_jsRequired": "JavaScript debe estar activado para realizar la encriptación en tu navegador",
|
||||
"og_features": "{0} Funciones",
|
||||
"og_pricing": "{0} Precio",
|
||||
"og_contact": "{0} Contacto",
|
||||
"og_register": "Registrar una cuenta en {0}",
|
||||
"og_login": "Acceder hacia {0}",
|
||||
"og_default": "CryptPad: suite de colaboración encriptada de extremo a extremo",
|
||||
"og_teamDrive": "Disco del equipo",
|
||||
"admin_getRawMetadata": "Historial de metadatos",
|
||||
"admin_reportContent": "Reportar contenido",
|
||||
"admin_planlimit": "Límite de almacenamiento",
|
||||
"admin_restoreDocument": "Restaurar documento",
|
||||
"admin_archiveDocument": "Archivar documento",
|
||||
"admin_restoreArchivedPins": "Restaurar registro archivado de pin",
|
||||
"admin_archivePinLog": "Archivar el registro de pin de esta cuenta",
|
||||
"admin_getPinList": "Lista de pin actual",
|
||||
"admin_archiveBlock": "Archivar bloqueo",
|
||||
"admin_restoreBlock": "Restaurar bloqueo archivado",
|
||||
"admin_blockArchived": "Bloqueo está archivado",
|
||||
"admin_blockAvailable": "Bloqueo está disponible",
|
||||
"admin_blockKey": "Bloquear llave pública",
|
||||
"admin_pinLogArchived": "El registro de pin está archivado",
|
||||
"admin_pinLogAvailable": "El registro de pin está disponible",
|
||||
"admin_fileCount": "Número de archivos",
|
||||
"admin_channelCount": "Número de documentos",
|
||||
"admin_storageUsage": "Datos guardados",
|
||||
"admin_note": "Nota del plan",
|
||||
"admin_planName": "Nombre del plan",
|
||||
"admin_currentlyOnline": "Está actualmente en línea",
|
||||
"admin_lastPinTime": "Tiempo de actividad del último pin",
|
||||
"admin_firstPinTime": "Tiempo de actividad del primer pin",
|
||||
"admin_accountMetadataPlaceholder": "Id del usuario/a (llave de firma pública)",
|
||||
"admin_blockMetadataPlaceholder": "URL de bloqueo absoluta o relativa",
|
||||
"admin_blockMetadataHint": "El bloqueo de acceso es lo que permite a una cuenta acceder a CryptPad con la combinación de usuario/a + contraseña",
|
||||
"admin_blockMetadataTitle": "Información del bloqueo de acceso",
|
||||
"admin_documentMetadataPlaceholder": "URL o id del documento",
|
||||
"admin_channelArchived": "Archivado",
|
||||
"admin_channelAvailable": "Disponible",
|
||||
"admin_currentlyOpen": "Abierto actualmente",
|
||||
"admin_documentModifiedTime": "Última modificación",
|
||||
"admin_documentCreationTime": "Creado",
|
||||
"admin_documentMetadata": "Metadatos actuales",
|
||||
"admin_documentSize": "Tamaño del documento",
|
||||
"admin_documentMetadataHint": "Consulta por un documento o archivo vía su id o URL",
|
||||
"admin_documentMetadataTitle": "Información del documento",
|
||||
"admin_accountMetadataHint": "Ingresa la llave pública de un/a usuario/a para buscar datos acerca de su cuenta.",
|
||||
"admin_accountMetadataTitle": "Información de la cuenta",
|
||||
"admin_restoreReason": "Por favor especifique la razón para la restauración y confirme que le gustaría proceder",
|
||||
"admin_archiveReason": "Por favor especifique la razón para archivar y confirme que le gustaría proceder",
|
||||
"ui_archive": "Archivar",
|
||||
"ui_confirm": "Confirmar",
|
||||
"ui_fetch": "Buscar",
|
||||
"ui_success": "Éxito",
|
||||
"ui_generateReport": "Generar reporte",
|
||||
"ui_none": "ninguno",
|
||||
"ui_undefined": "desconocido",
|
||||
"ui_false": "falso",
|
||||
"ui_true": "verdadero",
|
||||
"admin_generatedAt": "Reportar marca de tiempo",
|
||||
"admin_cat_database": "Base de datos",
|
||||
"admin_uptimeHint": "Fecha y tiempo en el cuál el servidor fue lanzado",
|
||||
"admin_uptimeTitle": "Tiempo de lanzamiento",
|
||||
"register_instance": "Creando una nueva cuenta en {0}",
|
||||
"login_instance": "Conecta tu cuenta en {0}",
|
||||
"home_morestorage": "Para más espacio de almacenamiento:",
|
||||
"home_location": "Los datos encriptados están alojados en {0}",
|
||||
"footer_website": "Sitio web del proyecto",
|
||||
"admin_noticeHint": "Un mensaje opcional para mostrar en la página de inicio",
|
||||
"admin_noticeTitle": "Aviso de la página de inicio",
|
||||
"ui_experimental": "Esta función es considerada experimental.",
|
||||
"error_evalPermitted": "Abortando por que la evaluación no debería estar permitida.\n\nEste error esta ligado a encabezados de Contenido-Seguridad-Política, se puede deber a: un navegador obsoleto que no los soporta, extensiones del navegador que interfieren con su comportamiento correcto, o una configuración incorrecta de esta instancia de CryptPad.",
|
||||
"error_incorrectAccess": "Esta página solo puede ser accedida vía {0}.",
|
||||
"error_embeddingDisabledSpecific": "La incrustación está desactivada para esta aplicación de CryptPad.",
|
||||
"error_embeddingDisabled": "La incrustación está desactivada para esta instancia de CryptPad",
|
||||
"admin_enableembedsHint": "Permitir que los documentos y multimedia de esta instancia sean incrustados en otros sitios web. Esto añadirá un opción \"Incrustar\" en el menú Compartir. Por razones de seguridad las aplicaciones que usan OnlyOffice (Hojas, Documentos, Presentación) no pueden ser incrustadas incluso si la configuración está activada.",
|
||||
"admin_enableembedsTitle": "Activar incrustación remota",
|
||||
"ui_ms": "milisegundos",
|
||||
"admin_setDuration": "Establecer duración",
|
||||
"admin_bytesWrittenHint": "Si tienes activada las mediciones de rendimiento del disco entoces la duración de la ventana puede ser configurada abajo.",
|
||||
"admin_bytesWrittenTitle": "Ventana de medición del rendimiento del disco",
|
||||
"admin_enableDiskMeasurementsHint": "Si se activa, un terminal API JSON será expuesto bajo <code>/api/profiling</code>. Esto mantiene una medición funcionando del E/S de disco en la ventana de tiempo puesta abajo. Esta configuración puede impactar el rendimiento del servidor y puede revelar datos sensibles. Es recomendado que dejes esta configuración desactivada a menos que sepas lo que estás haciendo.",
|
||||
"admin_enableDiskMeasurementsTitle": "Medir rendimiento del disco",
|
||||
"admin_infoNotice2": "Ver la pestaña 'Red' para más detalles.",
|
||||
"admin_infoNotice1": "Usa los siguientes campos para describir tu instancia. Esta información es usada en la página principal de la instancia. También es enviada como parte de la telemetría del servidos si optas para que sea incluida en la lista de instancias públicas de CryptPad.",
|
||||
"admin_reviewCheckupNotice": "Es recomendado revisar la página de <a>chequeo</a> para confirmar que esta intancia esta configurada correctamente.",
|
||||
"admin_cacheEvictionRequired": "Este servidor ha sido actualizado con la nueva configuración. Por favor usa el botón <b>Vaciar caché</b> para asegurarse de que este cambio se vuelva visible para todos/as los/as usuarios/as.",
|
||||
"fivehundred_internalServerError": "Error interno del servidor",
|
||||
"support_debuggingDataHint": "La siguiente información está incluida en los tickets de soporte que envíes. Ninguno de estos permite a los/as administradores/as a acceder o desencriptar tus documentos. Esta información es encriptada tal que solo los/as administradores/as puedan leerla.",
|
||||
"support_debuggingDataTitle": "Información de depuración de la cuenta",
|
||||
"support_cat_debugging": "Depurar datos",
|
||||
"ui_openDirectly": "Esta funcionalidad no está disponible cuando CryptPad esta incrustado en otro sitio. ¿Abrir este documento en una nueva pestaña?",
|
||||
"support_cat_abuse": "Reportar abuso",
|
||||
"support_cat_document": "Documento",
|
||||
"support_cat_drives": "Disco o equipo",
|
||||
"support_warning_other": "¿Cuál es la naturaleza de tu consulta? Por favor provee cuanta información relevante sea posible para hacer más fácil para nosotros/as resolver tu problema rápidamente",
|
||||
"support_warning_abuse": "Por favor reporta contenido que viole los <a>Términos de servicio</a>. Por favor provee links hacia los documentos ofensivos o perfiles de usuario/a y describe como están violando los términos. Cualquier información adicional acerca del contexto en el cual descubriste el contenido o comportamiento puede ayudar a los/as administradores/as a prevenir futuras violaciones",
|
||||
"support_warning_bug": "Por favor especifica en que navegador ocurre el problema y si hay instalada cualquier extensión. Por favor provee cuantos detalles sean posibles acerca del problema y los pasos necesarios para reproducirlo",
|
||||
"support_warning_document": "Por favor especifica que tipo de documento está causando el problema y provee un <a>identificador de documento</a> o un link",
|
||||
"support_warning_drives": "Ten en cuenta que los/as administradores/as no pueden identificar carpetas y documentos por nombre. Para carpetas compartidas, por favor provee un <a>identificador de documento</a>",
|
||||
"support_warning_account": "Por favor ten en cuenta que los/as administradores/as no pueden restaurar contraseñas. Si has perdido las credenciales para tu cuenta pero sigues con la sesión iniciada, puedes <a>migrar tus datos a una nueva cuenta</a>",
|
||||
"support_warning_prompt": "Por favor escoge la categoría más relevante para tu problema. Esto ayuda a los/as administradores/as a triajar y proveer más sugerencias acerca de que información proveer.",
|
||||
"info_sourceFlavour": "<a>Código fuente</a> para CryptPad",
|
||||
"info_termsFlavour": "<a>Términos de servicio</a> para esta instancia",
|
||||
"footer_source": "Código fuente",
|
||||
"admin_jurisdictionHint": "El país donde los datos encriptados de esta instancia están alojados",
|
||||
"admin_jurisdictionTitle": "Localización de alojamiento",
|
||||
"admin_descriptionHint": "El texto descriptivo mostrado para esta instancia en la lista de instancias públicas en cryptpad.org",
|
||||
"admin_descriptionTitle": "Descripción de la instancia",
|
||||
"ui_saved": "{0} guardado",
|
||||
"admin_nameHint": "El nombre mostrado para esta instancia en el listado de instancias públicas en cryptpad.org",
|
||||
"admin_nameTitle": "Nombre de la instancia",
|
||||
"admin_archiveNote": "Nota",
|
||||
"bounce_danger": "El link que presionaste no dirige hacia una página web per hacia algún código o datos que podría ser malicioso.\n\n(\"{0}\")\n\nCryptPad bloquea estos por razones de seguridad. Presionar OK cerrará esta pestaña.",
|
||||
"bounce_confirm": "Estás a punto de dejar: {0}\n\n¿Estás seguro/a de que quieres visitar? \"{1}\"?",
|
||||
"form_exportSheet": "Exportar a hoja",
|
||||
"premiumAccess": "Como un/a suscriptor/a en {0}, puedes crear nuevos documentos en esta aplicación de acceso anticipado. Por favor esté al tanto de que es experimental y no debería ser confiado todavía con datos importantes.",
|
||||
"earlyAccessBlocked": "Esta aplicación no está disponible todavía en esta instancia",
|
||||
"premiumOnly": "Crear nuevos documentos en esta aplicación actualmente está limitado a suscriptores/as en {0}. Esta es una aplicación experimental de acceso anticipado para propósitos de prueba. Pronto estará disponible para todos/as en {0}.",
|
||||
"download_step3": "Convirtiendo...",
|
||||
"fc_openIn": "Abrir en {0}",
|
||||
"creation_new": "Nuevo {0}",
|
||||
"form_conditional_hint": "Para hacer esta sección condicional, por favor añade una pregunta de elección o casilla de verificación encima de esta",
|
||||
"form_colors": "Tema del color",
|
||||
"userlist_visitProfile": "Visitar perfil",
|
||||
"form_conditional_addAnd": "Añadir condición Y",
|
||||
"form_conditional_add": "Añadir condición O",
|
||||
"form_conditional": "Solo mostrar esta sección cuando:",
|
||||
"form_condition_hasnot": "no ha",
|
||||
"form_condition_has": "ha",
|
||||
"form_condition_isnot": "no es",
|
||||
"form_condition_is": "es",
|
||||
"form_condition_v": "Escoge un valor",
|
||||
"form_condition_q": "Escoge una pregunta",
|
||||
"form_type_section": "Sección condicional",
|
||||
"form_editable": "Edición después del envío",
|
||||
"form_makeAnon": "Anonimizar las respuestas",
|
||||
"form_responseMsg": "Este mensaje será mostrado después que los/as participantes envíen el formulario.",
|
||||
"form_addMsg": "Añadir mensaje de envío",
|
||||
"form_updateMsg": "Actualizar mensaje de envío",
|
||||
"toolbar_preview": "Previsualizar",
|
||||
"form_geturl": "Copiar link",
|
||||
"form_corruptAnswers": "Este formulario ya tiene respuestas. Cambiar este tipo de pregunta puede invalidar los datos previos de respuesta.",
|
||||
"form_changeTypeConfirm": "Selecciona el nuevo tipo de pregunta.",
|
||||
"form_preview": "Previsualizar formulario",
|
||||
"form_required_off": "Opcional",
|
||||
"form_authAnswer": "Este formulario no puede ser enviado anónimamente",
|
||||
"form_anonAnswer": "Las respuestas a este formulario son anónimas",
|
||||
"form_viewAllAnswers": "Ver todas las respuestas ({0})",
|
||||
"form_viewAnswer": "Ver mis respuestas",
|
||||
"form_preview_button": "Previsualización",
|
||||
"form_template_poll": "Encuesta de programación rápida",
|
||||
"upload_addOptionalAlt": "Añadir texto descriptivo (opcional)",
|
||||
"upload_modal_alt": "Texto alternativo",
|
||||
"profile_defaultAlt": "Foto de perfil predeterminada",
|
||||
"toolbar_expand": "Expandir barra de herramientas",
|
||||
"toolbar_collapse": "Colapsar barra de herramientas",
|
||||
"support_premiumLink": "Ver opciones de suscripción",
|
||||
"support_premiumPriority": "Los/as usuarios/as premium ayudan a financiar mejoras a la usabilidad de CryptPad y se benefician de respuestas priorizadas a sus tickets de soporte.",
|
||||
"form_totalResponses": "Respuestas totales: {0}",
|
||||
"ui_expand": "Expandir",
|
||||
"ui_collapse": "Colapsar",
|
||||
"fm_link_invalid": "URL inválida",
|
||||
"fm_link_warning": "Advertencia: la URL excede los 200 carácteres",
|
||||
"form_anonName": "Tu nombre",
|
||||
"notification_linkShared": "{0} ha compartido un link contigo: <b>{1}</b>",
|
||||
"fm_link_name_placeholder": "Mí link",
|
||||
"fm_link_url": "URL",
|
||||
"fm_link_name": "Nombre del link",
|
||||
"fm_link_type": "Link",
|
||||
"fm_link_new": "Nuevo link",
|
||||
"notification_openLink": "Has recibido un link <b>{0}</b> de {1}:",
|
||||
"form_exportCSV": "Exportar a CSV",
|
||||
"team_leaveOwner": "Por favor degradate del rol de propietario/a antes de dejar el equipo. Ten en cuenta que los equipos deben tener al menos un/a propietario/a, por favor añade uno/a antes de proceder si actualmente eres el único/a propietario/a.",
|
||||
"admin_instancePurposeHint": "¿Porqué diriges esta instancia? Tu respuesta será usada para informar al plan de desarrollo si su telemetría esta activada.",
|
||||
"admin_purpose_business": "Para una empresa u organización comercial",
|
||||
"admin_purpose_public": "Para proveer un servicio gratuito al público",
|
||||
"admin_purpose_education": "Para una escuela, colegio o universidad",
|
||||
"admin_purpose_org": "Para una organización sin ánimos de lucro o un grupo de defensa",
|
||||
"admin_purpose_personal": "Para mí, familia, o amigos/as",
|
||||
"admin_purpose_experiment": "Para probar la plataforma o desarrollar nuevas funciones",
|
||||
"admin_purpose_noanswer": "Prefiero no decirlo",
|
||||
"admin_instancePurposeTitle": "Propósito de la instancia",
|
||||
"resources_learnWhy": "Conoce por qué fue bloqueado",
|
||||
"resources_openInNewTab": "Abrirlo en una nueva pestaña",
|
||||
"resources_imageBlocked": "CryptPad bloqueó una imágen remota",
|
||||
"fc_open_formro": "Abrir (como participante)",
|
||||
"form_poll_hint": "<i></i>: Si, <i></i>: No, <i></i>: Aceptable",
|
||||
"admin_provideAggregateStatisticsLabel": "Proveer estadísticas adicionales",
|
||||
"admin_provideAggregateStatisticsHint": "Puedes optar por incluir mediciones de uso adicionales para los/as desarrolladores/as, tal como el número aproximado de usuarios/as diarios y registrados/as para tu instancia.",
|
||||
"admin_provideAggregateStatisticsTitle": "Agregación estadística",
|
||||
"admin_blockDailyCheckLabel": "Desactivar telemetría del servidor",
|
||||
"admin_blockDailyCheckHint": "Las instancias de CryptPad envian un mensaje al servidor de los/as desarrolladores/as cuando son lanzadas y una vez por día a partir de entonces. Esto les permite mantenerse al tanto de cuantos servidores están funcionando con que versiones del software. Puedes salirte de esta medición abajo. Los contenidos de este mensaje pueden ser encontrados en el registro de la aplicación del servidor para tu revisión.",
|
||||
"admin_blockDailyCheckTitle": "Telemetría del servidor",
|
||||
"admin_removeDonateButtonLabel": "No publicar las campañas de financiación colectiva",
|
||||
"admin_removeDonateButtonHint": "El desarrollo de CryptPad es financiado parcialmente por subvenciones públicas y donaciones. Publicar nuestros esfuerzos de financiación colectiva en tu instancia ayuda a los/as desarrolladores/as a continuar mejorando la plataforma para todos/as, pero puedes desactivar estos abisos si los encuentras inapropiados.",
|
||||
"admin_removeDonateButtonTitle": "Participación en la financiación colectiva",
|
||||
"admin_listMyInstanceLabel": "Listar esta instancia",
|
||||
"admin_listMyInstanceHint": "Si tu instancia es adecuada para el uso público puedes consentir a que sea enlistada en los directorios de la red. La telemetría del servidor debe estar activada para que esto tenga algún efecto.",
|
||||
"admin_listMyInstanceTitle": "Listar mi instancia en los directorios públicos",
|
||||
"admin_consentToContactLabel": "Consiento",
|
||||
"admin_consentToContactHint": "La telemetría del servidor incluye el correo de contacto del administrador/a para que así los/as desarrolladores/as puedan notificarte de problemas serios con el software o tu configuración. Nunca será compartido, vendido, o usado por razones de marketing. Consiente al contacto si te gustaría estar informado/a de problemas críticos en tu servidor."
|
||||
}
|
||||
|
|
|
@ -119,17 +119,17 @@
|
|||
"error": "Errorea",
|
||||
"loading": "Kargatzen...",
|
||||
"newVersionError": "CryptPad bertsio berri bat dago erabilgarri.<br><a href='#'>Birkargatu</a> bertsio berria erabiltzeko, edo sakatu Esc zure edukia <b>konexiorik gabeko moduan</b> atzitzeko.",
|
||||
"errorRedirectToHome": "Sakatu <em>Esc</em> zure CryptDrive-ra birbideratzeko.",
|
||||
"errorCopy": " Uneko bertsioa oraindik erabili dezakezu irakurtzeko moduan <em>Esc</em> sakatuta.",
|
||||
"errorRedirectToHome": "Sakatu Esc zure CryptDrive-ra birbideratzeko.",
|
||||
"errorCopy": " Uneko bertsioa oraindik erabili dezakezu irakurtzeko moduan Esc sakatuta.",
|
||||
"invalidHashError": "Eskatu duzun dokumentua baliogabeko URLa du.",
|
||||
"chainpadError": "Errore larri bat gertatu da zure edukia eguneratzean. Orrialde hau irakurtzeko moduan dago zure lana galduko ez duzula ziurtatzeko.<br>Sakatu <em>Esc</em> dokumentua ikusten jarraitzeko, edo kargatu berriro editatzen saiatzeko.",
|
||||
"chainpadError": "Errore larri bat gertatu da zure edukia eguneratzean. Orrialde hau irakurtzeko moduan dago zure lana galduko ez duzula ziurtatzeko.<br>Sakatu Esc dokumentua ikusten jarraitzeko, edo kargatu berriro editatzen saiatzeko.",
|
||||
"inactiveError": "Dokumentu hau ezabatu da aktibitate faltagatik. Sakatu Esc dokumentu berri bat sortzeko.",
|
||||
"deletedError": "Dokumentu hau ezabatu da eta ezin ezingo da gehiago erabili.",
|
||||
"expiredError": "Dokumentu hau iraungitze-datara iritsi da eta ezin izango da gehiago erabili.",
|
||||
"anonymousStoreDisabled": "CryptPad instantzia honen administratzaileak gonbidatuek gordetzea galarazi du. Hasi saioa zure CryptDrive propiora sartzeko.",
|
||||
"padNotPinnedVariable": "Dokumentu hau {4} egun barru iraungiko da aktibitaterik ez badago, {0}saioa hasi{1} edo {2}erregistratu{3} mantentzeko.",
|
||||
"padNotPinned": "Dokumentu hau 3 hilabete barru iraungiko da aktibitaterik ez badu, {0}saioa hasi{1} edo {2}erregistratu{3} mantentzeko.",
|
||||
"onLogout": "Saiotik kanpo zaude, {0}egin klik hemen{1} saioa hasteko<br>edo sakatu <em>Esc</em> zure dokumentua irakurtzeko moduan ikusteko.",
|
||||
"onLogout": "Saiotik kanpo zaude, {0}egin klik hemen{1} saioa hasteko<br>edo sakatu Esc zure dokumentua irakurtzeko moduan ikusteko.",
|
||||
"typeError": "Dokumentu hau ez da bateragarria hautatutako aplikazioarekin",
|
||||
"common_connectionLost": "<b>Zerbitzariaren konexioa galdu da</b><br>Konexioa berreskuratu arte irakurtzeko moduan zaude.",
|
||||
"type": {
|
||||
|
@ -330,7 +330,7 @@
|
|||
"contacts_confirmRemove": "Ziur zaude <em>{0}</em> zure kontaktuetatik kendu nahi duzula?",
|
||||
"contacts_remove": "Kendu kontaktu hau",
|
||||
"contacts_send": "Bidali",
|
||||
"contacts_request": "<em>{0}</em> erabiltzaileak kontaktu gisa gehitu nahi zaitu. <b>Onartu<b>?",
|
||||
"contacts_request": "<em>{0}</em> erabiltzaileak kontaktu gisa gehitu nahi zaitu. <b>Onartu</b>?",
|
||||
"contacts_rejected": "Kontaktu-gonbidapena baztertu da",
|
||||
"contacts_added": "Kontaktu-gonbidapena onartu da.",
|
||||
"contacts_title": "Kontaktuak",
|
||||
|
@ -778,14 +778,14 @@
|
|||
"admin_diskUsageButton": "Sortu txostena",
|
||||
"admin_diskUsageHint": "CryptPad baliabide ezberdinek kontsumitzen duten biltegiratze-espazioa",
|
||||
"admin_diskUsageTitle": "Diskoaren erabilera",
|
||||
"timeoutError": "Errore batek zerbitzariarekiko konexioa hautsi du. <br>Sakatu <em>Esc</em> orria berriro kargatzeko.",
|
||||
"timeoutError": "Errore batek zerbitzariarekiko konexioa hautsi du. <br>Sakatu Esc orria berriro kargatzeko.",
|
||||
"contact_email": "Posta elektronikoa",
|
||||
"contact_chat": "Txata",
|
||||
"contact_bug": "Akats-txostena",
|
||||
"contact_devHint": "Eginbideen eskaerak, erabilgarritasuna hobetzeko edo eskerrak emateko.",
|
||||
"contact_dev": "Kontaktatu garatzaileekin",
|
||||
"contact_adminHint": "Zure kontuarekin, biltegiratze mugarekin edo zerbitzuaren erabilgarritasunarekin lotutako edozein arazotarako.\n",
|
||||
"contact_admin": "Kontaktuan jarri administratzaileekin honetarako: [0]",
|
||||
"contact_admin": "Kontaktuan jarri administratzaileekin honetarako: {0}",
|
||||
"footer_donate": "Diruz lagundu",
|
||||
"admin_flushCacheDone": "Cachea behar bezala garbitu da",
|
||||
"admin_flushCacheButton": "Garbitu cachea",
|
||||
|
@ -1113,9 +1113,6 @@
|
|||
"pad_settings_width_small": "Orrialde modua",
|
||||
"pad_settings_info": "Dokumentu honen ezarpen lehenetsiak. Erabiltzaile berriek dokumentu hau bisitatzen dutenean aplikatuko dira.",
|
||||
"pad_settings_title": "Dokumentuen ezarpenak",
|
||||
"admin_getquotaButton": "Egiaztatu",
|
||||
"admin_getquotaHint": "Egiaztatu gako publikoa kontuan hartuta erabiltzaile edo talde baten kuotarekin zenbatutako elementuen guztizko tamaina.",
|
||||
"admin_getquotaTitle": "Egiaztatu kontuaren biltegiratzea",
|
||||
"settings_colorthemeTitle": "Itxuraren kolorea",
|
||||
"settings_colorthemeHint": "Aldatu CryptPad-en kolore orokorrak gailu honetan.",
|
||||
"settings_colortheme_default": "Sistemak lehenetsia ({0})",
|
||||
|
@ -1167,15 +1164,12 @@
|
|||
"allowNotifications": "Gaitu jakinarazpenak",
|
||||
"archivedFromServer": "Dokumentua artxibatu da",
|
||||
"restoredFromServer": "Dokumentua berreskuratu da",
|
||||
"admin_archiveInval": "Dokumentu baliogabea",
|
||||
"admin_archiveInput2": "Dokumentuaren pasahitza",
|
||||
"admin_archiveInput": "Dokumentuaren URLa",
|
||||
"admin_unarchiveButton": "Berreskuratu",
|
||||
"admin_unarchiveHint": "Leheneratu aurretik artxibatuta zegoen dokumentu bat",
|
||||
"admin_unarchiveTitle": "Berreskuratu dokumentuak",
|
||||
"admin_archiveButton": "Artxibo",
|
||||
"admin_archiveHint": "Egin dokumentu bat ez-erabilgarri behin betiko ezabatu gabe. 'Artxibo' direktorio batean jarriko da eta egun batzuen buruan ezabatuko da (zerbitzariaren ezarpenen fitxategian konfigura daiteke).",
|
||||
"admin_archiveTitle": "Dokumentuak gordetzea",
|
||||
"errorPopupBlocked": "CryptPad-ek fitxa berriak ireki ahal izan behar ditu funtzionatzeko. Baimendu popup-leihoak zure nabigatzailean. Leiho hauek ez dira inoiz erabiliko zuri publizitatea erakusteko.",
|
||||
"unableToDisplay": "Ezin da dokumentua erakutsi. Sakatu Esc orria berriro kargatzeko. Arazoak jarraitzen badu, jarri harremanetan laguntzarekin.",
|
||||
"documentID": "Dokumentua identifikatzea",
|
||||
|
@ -1306,7 +1300,6 @@
|
|||
"form_defaultOption": "{0} aukera",
|
||||
"form_anonymous_off": "Blokeatua",
|
||||
"form_anonymous_on": "Baimenduta",
|
||||
"form_anonymous": "Inprimaki hau {0} egunean itxiko da",
|
||||
"form_willClose": "Inprimaki hau {0} egunean itxiko da",
|
||||
"form_isClosed": "Inprimaki hau {0} egunean itxi zen",
|
||||
"form_isOpen": "Inprimaki hau irekita dago",
|
||||
|
@ -1439,5 +1432,55 @@
|
|||
"footer_website": "Proiektuaren webgunea",
|
||||
"admin_noticeHint": "Hasierako orrian bistaratzeko aukerako mezua",
|
||||
"admin_noticeTitle": "Hasierako orrialdearen berri",
|
||||
"ui_experimental": "Tresna hau esperimentaltzat hartzen da."
|
||||
"ui_experimental": "Tresna hau esperimentaltzat hartzen da.",
|
||||
"ui_restore": "Berreskuratu",
|
||||
"ui_archive": "Artxibo",
|
||||
"ui_undefined": "ezezaguna",
|
||||
"admin_documentType": "Dokumentu mota",
|
||||
"admin_getRawMetadata": "Metadatuen historia",
|
||||
"admin_planlimit": "Biltegiratze muga",
|
||||
"admin_archiveDocument": "Artxibatu dokumentua",
|
||||
"admin_restoreDocument": "Berreskuratu dokumentua",
|
||||
"admin_restoreArchivedPins": "Berreskuratu artxibatutako saioa hasteko pin-a",
|
||||
"admin_archivePinLog": "Artxibatu kontu honen saioa hasteko pin-a",
|
||||
"admin_getPinList": "Uneko pin-en zerrenda",
|
||||
"admin_restoreBlock": "Berreskuratu artxibatutako blokea",
|
||||
"admin_archiveBlock": "Artxibatu blokea",
|
||||
"admin_blockArchived": "Blokea artxibatuta dago",
|
||||
"admin_blockAvailable": "Blokea eskuragarri dago",
|
||||
"admin_blockKey": "Blokearen gako publikoa",
|
||||
"admin_pinLogArchived": "Saioa hasteko pin-a artxibatuta dago",
|
||||
"admin_pinLogAvailable": "Saioa hasteko pin-a eskuragarri dago",
|
||||
"admin_fileCount": "Fitxategien kopurua",
|
||||
"admin_channelCount": "Kanalen kopurua",
|
||||
"admin_storageUsage": "Biltegiratutako datuak",
|
||||
"admin_note": "Planaren oharra",
|
||||
"admin_planName": "Planaren izena",
|
||||
"admin_currentlyOnline": "Une honetan sarean dago",
|
||||
"admin_documentMetadataPlaceholder": "Dokumentuaren URLa edo IDa",
|
||||
"admin_accountMetadataPlaceholder": "Erabiltzailearen IDa (sinatzeko gako publikoa)",
|
||||
"admin_blockMetadataPlaceholder": "Blokearen URL absolutua edo erlatiboa",
|
||||
"admin_blockMetadataHint": "Saioa hasteko blokea CryptPad-en saioa hasteko aukera ematen duen erabiltzaile-izena + pasahitzaren konbinazioa",
|
||||
"admin_blockMetadataTitle": "Saioa hasteko blokearen informazioa",
|
||||
"admin_channelArchived": "Kanala artxibatuta dago",
|
||||
"admin_channelAvailable": "Kanala eskuragarri dago",
|
||||
"admin_currentlyOpen": "Une honetan zabalik",
|
||||
"admin_documentCreationTime": "Sortze-data",
|
||||
"admin_documentModifiedTime": "Azken aldaketa",
|
||||
"admin_documentMetadata": "Uneko metadatuak",
|
||||
"admin_documentSize": "Dokumentuaren tamaina",
|
||||
"admin_documentMetadataHint": "Kontsultatu kanal edo fitxategi bat bere id edo URL bidez",
|
||||
"admin_documentMetadataTitle": "Dokumentuaren informazioa",
|
||||
"admin_accountMetadataHint": "Sartu erabiltzailearen gako publikoa bere kontuari buruzko datuak eskuratzeko.",
|
||||
"admin_accountMetadataTitle": "Kontuaren informazioa",
|
||||
"admin_restoreReason": "Mesedez, zehaztu lehengoratzearen arrazoia eta berretsi aurrera jarraitu nahi duzula",
|
||||
"ui_confirm": "Berretsi",
|
||||
"admin_archiveReason": "Mesedez, zehaztu artxiboaren arrazoia eta berretsi aurrera jarraitu nahi duzula",
|
||||
"ui_fetch": "Eskuratu",
|
||||
"ui_success": "Arrakasta",
|
||||
"ui_generateReport": "Sortu txostena",
|
||||
"ui_none": "bat ere ez",
|
||||
"admin_uptimeTitle": "Abiarazte ordua",
|
||||
"admin_cat_database": "Datu-basea",
|
||||
"admin_uptimeHint": "Zerbitzaria abiarazi den data eta ordua"
|
||||
}
|
||||
|
|
|
@ -17,19 +17,19 @@
|
|||
},
|
||||
"common_connectionLost": "<b>Yhteys palvelimelle katkennut</b><br>Sovellus on vain luku-tilassa, kunnes yhteys palaa.",
|
||||
"typeError": "Tämä padi ei ole yhteensopiva valitun sovelluksen kanssa",
|
||||
"onLogout": "Olet kirjautunut ulos, {0}napsauta tästä{1} kirjautuaksesi sisään tai paina <em>Esc-näppäintä</em> käyttääksesi padia vain luku-tilassa.",
|
||||
"padNotPinned": "Tämä padi vanhenee kolmen kuukauden käyttämättömyyden jälkeen, {0}kirjaudu sisään{1} tai [2}rekisteröidy{3} säilyttääksesi sen.",
|
||||
"onLogout": "Olet kirjautunut ulos, {0}napsauta tästä{1} kirjautuaksesi sisään<br>tai paina Esc-näppäintä käyttääksesi padia vain luku-tilassa.",
|
||||
"padNotPinned": "Tämä padi vanhenee kolmen kuukauden käyttämättömyyden jälkeen, {0}kirjaudu sisään{1} tai {2}rekisteröidy{3} säilyttääksesi sen.",
|
||||
"padNotPinnedVariable": "Tämä padi vanhenee {4} päivän käyttämättömyyden jälkeen, {0}kirjaudu sisään{1} tai {2}rekisteröidy{3} säilyttääksesi sen.",
|
||||
"anonymousStoreDisabled": "Tämän CryptPad-instanssin ylläpitäjä on estänyt anonyymien käyttäjien pääsyn tallennustilaan. Kirjaudu sisään käyttääksesi CryptDrivea.",
|
||||
"expiredError": "Tämä padi on vanhentunut, eikä se ole enää saatavilla.",
|
||||
"deletedError": "Tämä padi on poistettu, eikä se ole enää saatavilla.",
|
||||
"inactiveError": "Tämä padi on poistettu käyttämättömyyden vuoksi. Paina Esc-näppäintä luodaksesi uuden padin.",
|
||||
"chainpadError": "Sisältöä päivitettäessä tapahtui vakava virhe. Tämä sivu on vain luku-tilassa, jotta tekemäsi muutokset eivät katoaisi.<br>Paina <em>Esc-näppäintä</em> jatkaaksesi padin katselua vain luku-tilassa, tai lataa sivu uudelleen yrittääksesi muokkaamista.",
|
||||
"chainpadError": "Sisältöä päivitettäessä tapahtui vakava virhe. Tämä sivu on vain luku-tilassa, jotta tekemäsi muutokset eivät katoaisi.<br>Paina Esc-näppäintä jatkaaksesi padin katselua vain luku-tilassa, tai lataa sivu uudelleen yrittääksesi muokkaamista.",
|
||||
"invalidHashError": "Pyytämäsi asiakirjan URL-osoite on virheellinen.",
|
||||
"main_title": "CryptPad: Reaaliaikaista, kollaboratiivista editointia nollatietoperiaatteella",
|
||||
"errorCopy": " Voit yhä käyttää nykyistä versiota vain luku-tilassa painamalla <em>Esc</em>-näppäintä.",
|
||||
"errorRedirectToHome": "Paina<em>Esc</em>-näppäintä ohjautuaksesi CryptDriveen.",
|
||||
"newVersionError": "Uusi versio CryptPadista on saatavilla.<br><a href='#'>Lataa sivu uudelleen</a> siirtyäksesi uuteen versioon, tai paina <em>Esc</em>-näppäintä käyttääksesi sisältöäsi <b>offline-tilassa</b>.",
|
||||
"errorCopy": " Voit yhä käyttää nykyistä versiota vain luku-tilassa painamalla Esc-näppäintä.",
|
||||
"errorRedirectToHome": "Paina Esc-näppäintä ohjautuaksesi CryptDriveen.",
|
||||
"newVersionError": "Uusi versio CryptPadista on saatavilla.<br><a href='#'>Lataa sivu uudelleen</a> siirtyäksesi uuteen versioon, tai paina Esc-näppäintä käyttääksesi sisältöäsi <b>offline-tilassa</b>.",
|
||||
"loading": "Ladataan...",
|
||||
"error": "Virhe",
|
||||
"saved": "Tallennettu",
|
||||
|
@ -93,7 +93,7 @@
|
|||
"saveTemplateButton": "Tallenna mallipohjaksi",
|
||||
"saveTemplatePrompt": "Valitse otsikko mallipohjalle",
|
||||
"templateSaved": "Mallipohja tallennettu!",
|
||||
"selectTemplate": "Valitse mallipohja tai paina <em>Esc</em>-näppäintä",
|
||||
"selectTemplate": "Valitse mallipohja tai paina Esc-näppäintä",
|
||||
"useTemplate": "Haluatko käyttää mallipohjaa?",
|
||||
"useTemplateOK": "Valitse mallipohja (Enter)",
|
||||
"useTemplateCancel": "Aloita alusta (Esc)",
|
||||
|
@ -462,7 +462,7 @@
|
|||
"upload_notEnoughSpace": "CryptDrivessasi ei ole tarpeeksi vapaata tallennustilaa tälle tiedostolle.",
|
||||
"upload_notEnoughSpaceBrief": "Tallennustila ei riitä",
|
||||
"upload_tooLarge": "Tiedoston koko ylittää suurimman käyttäjätilillesi sallitun latauskoon.",
|
||||
"upload_tooLargeBrief": "Tiedoston koko ylittää [0}MB rajan",
|
||||
"upload_tooLargeBrief": "Tiedoston koko ylittää {0}MB rajan",
|
||||
"upload_choose": "Valitse tiedosto",
|
||||
"upload_pending": "Odottaa",
|
||||
"upload_cancelled": "Keskeytetty",
|
||||
|
@ -872,14 +872,13 @@
|
|||
"admin_diskUsageButton": "Luo raportti",
|
||||
"admin_diskUsageHint": "CryptPad-resurssien käyttämä tallennustila",
|
||||
"admin_diskUsageTitle": "Tallennustilan käyttö",
|
||||
"timeoutError": "Virhe on katkaissut yhteytesi palvelimelle. <br> Paina <em>Esc</em> ladataksesi sivun uudelleen.",
|
||||
"timeoutError": "Virhe on katkaissut yhteytesi palvelimelle. <br> Paina Esc ladataksesi sivun uudelleen.",
|
||||
"contact_email": "Sähköposti",
|
||||
"contact_chat": "Keskustelu",
|
||||
"contact_bug": "Virheraportti",
|
||||
"contact_devHint": "Ominaisuuspyyntöjä, käytettävyysparannuksia tai kiitoksia varten.",
|
||||
"contact_dev": "Ota yhteyttä kehittäjiin",
|
||||
"contact_adminHint": "Käyttäjätiliin, tallennustilaan tai palvelun saatavuuteen liittyviä ongelmia varten.\n",
|
||||
"contact_admin": "Ota yhteyttä ylläpitäjiin",
|
||||
"footer_donate": "Lahjoita",
|
||||
"admin_flushCacheDone": "Välimuisti tyhjennetty onnistuneesti",
|
||||
"admin_flushCacheButton": "Tyhjennä välimuisti",
|
||||
|
@ -1059,15 +1058,12 @@
|
|||
"allowNotifications": "Salli ilmoitukset",
|
||||
"archivedFromServer": "Asiakirja arkistoitu",
|
||||
"restoredFromServer": "Asiakirja palautettu",
|
||||
"admin_archiveInval": "Virheellinen asiakirja",
|
||||
"admin_archiveInput2": "Asiakirjan salasana",
|
||||
"admin_archiveInput": "Asiakirjan URL",
|
||||
"admin_unarchiveButton": "Palauta",
|
||||
"admin_unarchiveHint": "Palauta aiemmin arkistoitu asiakirja",
|
||||
"admin_unarchiveTitle": "Palauta asiakirjoja",
|
||||
"admin_archiveButton": "Arkistoi",
|
||||
"admin_archiveHint": "Estä asiakirjan käyttö poistamatta sitä lopullisesti. Asiakirja sijoitetaan arkistokansioon ja poistetaan sieltä muutaman päivän kuluttua (poistoaika säädettävissä palvelimen konfiguraatiotiedostosta).",
|
||||
"admin_archiveTitle": "Arkistoi asiakirjoja",
|
||||
"errorPopupBlocked": "CryptPadin täytyy pystyä avaamaan uusia välilehtiä toimiakseen. Ole hyvä ja salli ponnahdusikkunat selaimesi osoitekentästä. Ponnahdusikkunoita ei koskaan käytetä mainostamiseen.",
|
||||
"unableToDisplay": "Asiakirjan näyttäminen epäonnistui. Paina Esc-näppäintä ladataksesi sivun uudelleen. Jos ongelma ei ratkea, ota yhteyttä käyttäjätukeen.",
|
||||
"documentID": "Asiakirjan tunniste",
|
||||
|
@ -1075,5 +1071,9 @@
|
|||
"register_notes": "<ul class=\"cp-notes-list\"><li>Salasanasi on avain, joka salaa kaikki asiakirjasti.<span class=\"red\">Jos kadotat salasanasi, emme voi palauttaa tietojasi.</span></li><li>Jos käytät jaettua tietokonetta,<span class=\"red\">muista kirjautua ulos</span> lopettaessasi. Pelkkä selainikkunan sulkeminen jättää käyttäjätunnuksesi haavoittuvaiseksi.</li><li>Säilyttääksesi kirjautumattomana tekemäsi tai tallentamasi asiakirjat, valitse \"Tuo asiakirjat anonyymistä istunnosta\".</li></ul>",
|
||||
"settings_padOpenLinkLabel": "Ota käyttöön suora linkkien avaus",
|
||||
"settings_padOpenLinkHint": "Tämä asetus avaa upotetut linkit suoraan napsauttamalla ilman esikatseluikkunaa",
|
||||
"settings_padOpenLinkTitle": "Avaa linkit ensimmäisellä napsautuksella"
|
||||
"settings_padOpenLinkTitle": "Avaa linkit ensimmäisellä napsautuksella",
|
||||
"ui_restore": "Palauta",
|
||||
"ui_archive": "Arkistoi",
|
||||
"ui_undefined": "tuntematon",
|
||||
"admin_documentType": "Tyyppi"
|
||||
}
|
||||
|
|
|
@ -20,16 +20,16 @@
|
|||
},
|
||||
"common_connectionLost": "<b>Connexion au serveur perdue</b><br>Vous êtes désormais en mode lecture seule jusqu'au retour de la connexion.",
|
||||
"typeError": "Ce document n'est pas compatible avec l'application sélectionnée",
|
||||
"onLogout": "Vous êtes déconnecté de votre compte utilisateur, {0}cliquez ici{1} pour vous authentifier<br>ou appuyez sur <em>Échap</em> pour accéder au document en mode lecture seule.",
|
||||
"onLogout": "Vous êtes déconnecté de votre compte utilisateur, {0}cliquez ici{1} pour vous authentifier<br>ou appuyez sur Échap pour accéder au document en mode lecture seule.",
|
||||
"padNotPinned": "Ce document va expirer après 3 mois d'inactivité, {0}connectez-vous{1} ou {2}enregistrez-vous{3} pour le préserver.",
|
||||
"anonymousStoreDisabled": "L'administrateur de cette instance de CryptPad a désactivé le stockage pour les utilisateurs non enregistrés. Vous devez vous connecter pour pouvoir utiliser votre propre CryptDrive.",
|
||||
"expiredError": "Ce document a atteint sa date d'expiration est n'est donc plus disponible.",
|
||||
"deletedError": "Ce document a été supprimé et n'est plus disponible.",
|
||||
"inactiveError": "Ce document a été supprimé en raison de son inactivité. Appuyez sur Échap pour créer un nouveau pad.",
|
||||
"chainpadError": "Une erreur critique est survenue lors de la mise à jour du contenu. Le document est désormais en mode lecture seule afin de s'assurer que vous ne perdiez pas davantage de données.<br>Appuyez sur <em>Échap</em> pour voir le document ou rechargez la page pour pouvoir le modifier à nouveau.",
|
||||
"chainpadError": "Une erreur critique est survenue lors de la mise à jour du contenu. Le document est désormais en mode lecture seule afin de s'assurer que vous ne perdiez pas davantage de données.<br>Appuyez sur Échap pour voir le document ou rechargez la page pour pouvoir le modifier à nouveau.",
|
||||
"invalidHashError": "L'URL du document demandé n'est pas valide.",
|
||||
"errorCopy": " Vous pouvez toujours utiliser la version actuelle en mode lecture seule en appuyant sur <em>Échap</em>.",
|
||||
"errorRedirectToHome": "Appuyez sur <em>Échap</em> pour retourner vers votre CryptDrive.",
|
||||
"errorCopy": " Vous pouvez toujours utiliser la version actuelle en mode lecture seule en appuyant sur Échap.",
|
||||
"errorRedirectToHome": "Appuyez sur Échap pour retourner vers votre CryptDrive.",
|
||||
"newVersionError": "Une nouvelle version de CryptPad est disponible.<br><a href='#'>Rechargez la page</a> pour utiliser la nouvelle version, ou appuyez sur Échap pour accéder au contenu actuel en <b>mode hors-ligne</b>.",
|
||||
"loading": "Chargement...",
|
||||
"error": "Erreur",
|
||||
|
@ -218,7 +218,7 @@
|
|||
"contacts_title": "Contacts",
|
||||
"contacts_added": "Invitation de contact acceptée.",
|
||||
"contacts_rejected": "Invitation de contact rejetée",
|
||||
"contacts_request": "<em>{0}</em> souhaite vous ajouter en tant que contact. <b>Accepter<b> ?",
|
||||
"contacts_request": "<em>{0}</em> souhaite vous ajouter en tant que contact. <b>Accepter</b> ?",
|
||||
"contacts_send": "Envoyer",
|
||||
"contacts_remove": "Supprimer ce contact",
|
||||
"contacts_confirmRemove": "Êtes-vous sûr de vouloir supprimer <em>{0}</em> de vos contacts ?",
|
||||
|
@ -626,7 +626,7 @@
|
|||
"contact_bug": "Rapport de bug",
|
||||
"contact_chat": "Chat",
|
||||
"contact_email": "Email",
|
||||
"timeoutError": "Une erreur a coupé la connexion au serveur. <br>Appuyez sur <em>Échap</em> pour recharger la page.",
|
||||
"timeoutError": "Une erreur a coupé la connexion au serveur. <br>Appuyez sur Échap pour recharger la page.",
|
||||
"admin_diskUsageTitle": "Utilisation du disque",
|
||||
"admin_diskUsageHint": "Quantité d'espace de stockage utilisé par la base de données de CryptPad",
|
||||
"admin_diskUsageButton": "Générer le rapport",
|
||||
|
@ -982,7 +982,7 @@
|
|||
"infobar_versionHash": "Vous consultez une ancienne version de ce document ({0}).",
|
||||
"history_restoreDriveDone": "CryptDrive restauré",
|
||||
"history_restoreDrivePrompt": "Êtes-vous sûr de vouloir remplacer la version actuelle du CryptDrive par la version affichée ?",
|
||||
"history_restoreDriveTitle": "Restaurer la version du CrytpDrive sélectionnée",
|
||||
"history_restoreDriveTitle": "Restaurer la version du CryptDrive sélectionnée",
|
||||
"history_userNext": "Auteur suivant",
|
||||
"history_fastNext": "Session suivante",
|
||||
"history_userPrev": "Auteur précédent",
|
||||
|
@ -1049,15 +1049,12 @@
|
|||
"allowNotifications": "Autoriser les notifications",
|
||||
"archivedFromServer": "Document archivé",
|
||||
"restoredFromServer": "Document restauré",
|
||||
"admin_archiveInval": "Document invalide",
|
||||
"admin_archiveInput2": "Mot de passe du document",
|
||||
"admin_archiveInput": "URL du document",
|
||||
"admin_unarchiveButton": "Restaurer",
|
||||
"admin_unarchiveHint": "Restaurer un document qui avait été précédemment archivé",
|
||||
"admin_unarchiveTitle": "Restaurer les documents",
|
||||
"admin_archiveButton": "Archiver",
|
||||
"admin_archiveHint": "Rendre un document indisponible sans le supprimer définitivement. Il sera placé dans un répertoire \"archive\" et supprimé après quelques jours (configurable dans le fichier de configuration du serveur).",
|
||||
"admin_archiveTitle": "Archiver les documents",
|
||||
"mediatag_loadButton": "Charger la pièce jointe",
|
||||
"history_trimPrompt": "Ce document a accumulé {0} d'historique qui peut ralentir le temps de chargement. Envisagez de supprimer l'historique s'il n'est pas nécessaire.",
|
||||
"contacts_confirmCancel": "Êtes-vous sûr de vouloir annuler votre demande de contact avec <b>{0}</b> ?",
|
||||
|
@ -1091,9 +1088,6 @@
|
|||
"pad_settings_width_small": "Mode page",
|
||||
"pad_settings_info": "Paramètres par défaut pour ce document. Ils seront appliqués lorsque de nouveaux utilisateurs visiteront ce document.",
|
||||
"pad_settings_title": "Paramètres du document",
|
||||
"admin_getquotaButton": "Vérifier",
|
||||
"admin_getquotaHint": "Vérifier la taille totale des documents comptabilisés dans le quota d'un utilisateur ou d'une équipe, en fonction de leur clé publique.",
|
||||
"admin_getquotaTitle": "Vérifier le stockage d'un compte",
|
||||
"settings_colorthemeTitle": "Thème",
|
||||
"settings_colorthemeHint": "Changer les couleurs de CryptPad sur cet appareil.",
|
||||
"settings_colortheme_default": "Défaut système ({0})",
|
||||
|
@ -1423,7 +1417,7 @@
|
|||
"admin_enableDiskMeasurementsHint": "Si ce réglage est activé, un point d'accès API JSON sera exposé à <code>/api/profiling</code>. Cela permet de conserver une mesure courante des I/O du disque dans la fenêtre de temps définie ci-dessous. Ce paramètre peut avoir un impact sur les performances du serveur et peut révéler des données confidentielles. Il est recommandé de laisser ce paramètre désactivé si vous n'en avez pas le besoin spécifique.",
|
||||
"admin_enableDiskMeasurementsTitle": "Mesurer la performance du disque",
|
||||
"admin_infoNotice2": "Consultez l'onglet \"Réseau\" pour plus de détails.",
|
||||
"admin_infoNotice1": "Utilisez les champs ci-dessous pour décrire votre instance. Ces informations seront utilisées sur la page d'accueil de l'instance dans une future version de CryptPad. Elles sont envoyées avec les données télémétriques du serveur seulement si vous avez choisi d'être inclus dans la liste des instances publiques de CryptPad.",
|
||||
"admin_infoNotice1": "Utilisez les champs ci-dessous pour décrire votre instance. Ces informations sont utilisées sur la page d'accueil de l'instance. Elles sont aussi envoyées avec les données télémétriques du serveur si vous avez choisi d'être inclus dans la liste des instances publiques de CryptPad.",
|
||||
"admin_reviewCheckupNotice": "Il est recommandé de consulter la page <a>checkup</a> pour vérifier que cette instance est configurée correctement.",
|
||||
"admin_cacheEvictionRequired": "Le serveur a été mis à jour avec le nouveau réglage. Veuillez utiliser le bouton <b>Vider le cache</b> pour que ce changement soit visible pour tous les utilisateurs.",
|
||||
"fivehundred_internalServerError": "Erreur interne du serveur",
|
||||
|
@ -1439,5 +1433,72 @@
|
|||
"home_location": "Hébergement des données chiffrées : {0}",
|
||||
"footer_website": "Site du projet",
|
||||
"admin_noticeHint": "Un message optionnel à afficher sur la page d'accueil",
|
||||
"admin_noticeTitle": "Notice sur la page d'accueil"
|
||||
"admin_noticeTitle": "Notice sur la page d'accueil",
|
||||
"ui_restore": "Restaurer",
|
||||
"ui_archive": "Archiver",
|
||||
"ui_undefined": "inconnu",
|
||||
"admin_documentType": "Type",
|
||||
"ui_jsRequired": "JavaScript doit être activé pour effectuer le chiffrement dans votre navigateur",
|
||||
"admin_uptimeTitle": "Temps de lancement",
|
||||
"admin_uptimeHint": "Date et heure auxquelles le serveur a été lancé",
|
||||
"admin_cat_database": "Base de données",
|
||||
"admin_generatedAt": "Horodatage du rapport",
|
||||
"ui_true": "vrai",
|
||||
"ui_false": "faux",
|
||||
"ui_none": "aucun",
|
||||
"ui_generateReport": "Générer un rapport",
|
||||
"ui_success": "Succès",
|
||||
"ui_fetch": "Charger",
|
||||
"ui_confirm": "Confirmer",
|
||||
"admin_archiveReason": "Veuillez préciser la raison de l'archivage et confirmer que vous souhaitez poursuivre",
|
||||
"admin_restoreReason": "Veuillez préciser la raison de la restitution et confirmer que vous souhaitez poursuivre",
|
||||
"admin_accountMetadataTitle": "Informations sur un compte",
|
||||
"admin_accountMetadataHint": "Saisissez la clé publique d'un utilisateur pour récupérer des données sur son compte.",
|
||||
"admin_documentMetadataTitle": "Informations sur un document",
|
||||
"admin_documentMetadataHint": "Informations sur un document ou un fichier depuis son id ou son URL",
|
||||
"admin_documentSize": "Taille du document",
|
||||
"admin_documentMetadata": "Métadonnées actuelles",
|
||||
"admin_documentCreationTime": "Créé",
|
||||
"admin_documentModifiedTime": "Dernière modification",
|
||||
"admin_currentlyOpen": "Actuellement ouvert",
|
||||
"admin_channelAvailable": "Disponible",
|
||||
"admin_channelArchived": "Archivé",
|
||||
"admin_documentMetadataPlaceholder": "URL ou id du document",
|
||||
"admin_blockMetadataTitle": "Informations sur le blocage",
|
||||
"admin_blockMetadataHint": "Le bloc de connexion est ce qui permet à un compte de se connecter à CryptPad avec la combinaison de nom d'utilisateur et de mot de passe",
|
||||
"admin_blockMetadataPlaceholder": "URL absolue ou logique",
|
||||
"admin_accountMetadataPlaceholder": "Utilisateur id (clé publique de signature)",
|
||||
"admin_firstPinTime": "Première durée d'activité de la broche",
|
||||
"admin_lastPinTime": "Dernière période d'activité de la broche",
|
||||
"admin_currentlyOnline": "Est actuellement en ligne",
|
||||
"admin_planName": "Nom du plan",
|
||||
"admin_note": "Note de plan",
|
||||
"admin_storageUsage": "Données stockées",
|
||||
"admin_channelCount": "Nombre de documents",
|
||||
"admin_fileCount": "Nombre de fichiers",
|
||||
"admin_pinLogAvailable": "Liste des documents est disponible",
|
||||
"admin_pinLogArchived": "Liste des documents est archivée",
|
||||
"admin_blockKey": "Clé publique de bloc",
|
||||
"admin_blockAvailable": "Le bloc est disponible",
|
||||
"admin_blockArchived": "Le bloc est archivé",
|
||||
"admin_archiveBlock": "Archiver le bloc",
|
||||
"admin_restoreBlock": "Restaurer le bloc archivé",
|
||||
"admin_getPinList": "Liste des documents stockés",
|
||||
"admin_archivePinLog": "Archiver la liste des documents",
|
||||
"admin_restoreArchivedPins": "Restaurer la liste des documents",
|
||||
"admin_archiveDocument": "Archiver le document",
|
||||
"admin_restoreDocument": "Restaurer le document",
|
||||
"admin_planlimit": "Limite de stockage",
|
||||
"admin_reportContent": "Contenu du rapport",
|
||||
"admin_getRawMetadata": "Historique des métadonnées",
|
||||
"og_teamDrive": "Circulation d'équipe",
|
||||
"og_default": "CryptPad : suite de collaboration chiffrée de bout en bout",
|
||||
"og_login": "Connectez-vous à {0}",
|
||||
"og_register": "Enregistrer un compte à {0}",
|
||||
"og_contact": "{0} Contact",
|
||||
"og_pricing": "{0} Tarification",
|
||||
"og_features": "{0} Fonctionnalités",
|
||||
"og_encryptedAppType": "Chiffré {0}",
|
||||
"admin_conflictExplanation": "Il existe deux versions de ce document. La restauration de la version archivée va écraser la version courante. L'archivage de la version courante va écraser le document archivé. Aucune de ces actions ne peut être annulée.",
|
||||
"admin_documentConflict": "Archiver/restaurer"
|
||||
}
|
||||
|
|
|
@ -19,12 +19,12 @@
|
|||
},
|
||||
"typeError": "Dokumen ini tidak sesuai dengan aplikasi yang dipilih",
|
||||
"common_connectionLost": "<b>Koneksi Server Terputus</b><br>Kau sekarang di mode baca hingga koneksi kembali.",
|
||||
"main_title": "Cryptpad: Informasi Aman, Kolaborasi Waktu Nyata",
|
||||
"fc_open_ro": "Buka (<i>read-only</i>)",
|
||||
"main_title": "CryptPad: Informasi Aman, Kolaborasi Waktu Nyata",
|
||||
"fc_open_ro": "Buka (read-only)",
|
||||
"fc_open": "Buka",
|
||||
"exportButton": "Ekspor",
|
||||
"invalidHashError": "URL dari dokumen yang ada minta tidaklah valid.",
|
||||
"errorRedirectToHome": "Tekan <em>Esc</em> untuk diarahkan ke CryptDrive anda.",
|
||||
"errorRedirectToHome": "Tekan Esc untuk diarahkan ke CryptDrive anda.",
|
||||
"inactiveError": "Dokumen ini telah dihapus karena tidak ada aktivitas. Tekan Esc untuk membuat dokumen baru.",
|
||||
"deletedError": "Dokumen ini telah dihapus dan tidak lagi tersedia."
|
||||
}
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
"code": "Codice",
|
||||
"poll": "Sondaggio",
|
||||
"kanban": "Kanban",
|
||||
"slide": "Presentazione",
|
||||
"slide": "Presentazioni in Markdown",
|
||||
"drive": "CryptDrive",
|
||||
"whiteboard": "Lavagna",
|
||||
"file": "File",
|
||||
|
@ -13,26 +13,29 @@
|
|||
"todo": "Promemoria",
|
||||
"contacts": "Contatti",
|
||||
"sheet": "Fogli",
|
||||
"teams": "Teams"
|
||||
"teams": "Teams",
|
||||
"presentation": "Presentazione",
|
||||
"doc": "Documento",
|
||||
"form": "Modulo"
|
||||
},
|
||||
"common_connectionLost": "<b>Connessione al server persa</b><br>Rimarrai in modalità solo lettura finché la connessione non sarà ripristinata.",
|
||||
"typeError": "Questo pad non è compatibile con l'applicazione selezionata",
|
||||
"onLogout": "Sei uscito, {0}clicca qui{1} per entrare<br>o premi <em>Esc</em> per accedere al tuo pad in modalità di sola lettura.",
|
||||
"padNotPinned": "Questo pad scadrà dopo 3 mesi di inattività, {0}accedi{1} o {2}registrati{3} per conservarlo.",
|
||||
"typeError": "Questo documento non è compatibile con l'applicazione selezionata",
|
||||
"onLogout": "Sei uscito, {0}clicca qui{1} per entrare<br>o premi Esc per accedere al tuo documento in modalità di sola lettura.",
|
||||
"padNotPinned": "Questo documento scadrà dopo 3 mesi di inattività, {0}accedi{1} o {2}registrati{3} per conservarlo.",
|
||||
"anonymousStoreDisabled": "L'amministratore di questa istanza di CryptPad ha disabilitato il drive per gli ospiti. Accedi per poter usare il tuo CryptDrive.",
|
||||
"expiredError": "Questo pad ha raggiunto la sua data di scadenza e non è più disponibile.",
|
||||
"expiredError": "Questo documento ha raggiunto la sua data di scadenza e non è più disponibile.",
|
||||
"deletedError": "Questo documento è stato cancellato dal suo autore e non è più disponibile.",
|
||||
"inactiveError": "Questo pad è stato cancellato per inattività. Premi Esc per creare un nuovo pad.",
|
||||
"chainpadError": "Si è verificato un errore critico nell'aggiornamento del tuo contenuto. Questa pagina è in modalità solo lettura per assicurarci che non perderai il tuo lavoro.<br>Premi <em>Esc</em> per continuare a visualizzare questo pad, o ricarica la pagina per provare a modificarlo di nuovo.",
|
||||
"inactiveError": "Questo documento è stato cancellato per inattività. Premi Esc per creare un nuovo documento.",
|
||||
"chainpadError": "Si è verificato un errore critico nell'aggiornamento del tuo contenuto. Questa pagina è in modalità di sola lettura per assicurarci che non perderai il tuo lavoro.<br>Premi Esc per continuare a visualizzare questo documento, o ricarica la pagina per provare a modificarlo di nuovo.",
|
||||
"invalidHashError": "Il documento richiesto ha un URL non valido.",
|
||||
"errorCopy": " Puoi ancora accedere al contenuto premendo <em>Esc</em>.<br>Una volta chiusa questa finestra non sarà possibile accedervi nuovamente.",
|
||||
"errorRedirectToHome": "Premi <em>Esc</em> per essere reindirizzato al tuo CryptDrive.",
|
||||
"errorCopy": " Puoi ancora utilizzare la versione attuale in modalità di sola lettura premendo Esc.",
|
||||
"errorRedirectToHome": "Premi Esc per essere reindirizzato al tuo CryptDrive.",
|
||||
"newVersionError": "Una nuova versione di CryptPad è disponibile. <br><a href='#'>Ricarica</a> per usare la nuova versione, o premi Esc per accedere al tuo contenuto in <b>modalità offline</b>.",
|
||||
"loading": "Caricamento in corso...",
|
||||
"error": "Errore",
|
||||
"saved": "Salvato",
|
||||
"deleted": "Eliminato",
|
||||
"deletedFromServer": "Pad eliminato dal server",
|
||||
"deletedFromServer": "Documento distrutto",
|
||||
"mustLogin": "Devi essere connesso per accedere a questa pagina",
|
||||
"disabledApp": "Questa applicazione è stata disattivata. Contatta l'amministratore di questo CryptPad per ulteriori informazioni.",
|
||||
"realtime_unrecoverableError": "Si è verificato un errore critico. Premi OK per ricaricare.",
|
||||
|
@ -44,7 +47,7 @@
|
|||
"forgotten": "Spostato nel cestino",
|
||||
"errorState": "Errore critico: {0}",
|
||||
"readonly": "Sola lettura",
|
||||
"anonymous": "Anonimo",
|
||||
"anonymous": "Ospite",
|
||||
"users": "Utenti",
|
||||
"viewer": "visualizzatore",
|
||||
"viewers": "visualizzatori",
|
||||
|
@ -60,14 +63,14 @@
|
|||
"formattedGB": "{0} GB",
|
||||
"formattedKB": "{0} KB",
|
||||
"pinLimitReached": "Hai raggiunto il limite di spazio",
|
||||
"pinLimitReachedAlert": "Hai raggiunto il limite di spazio. I nuovi pad non saranno salvati nel tuo CryptDrive.<br>Puoi rimuovere dei pad dal tuo CryptDrive o <a>sottoscrivere un'offerta premium</a> per incrementare il tuo limite.",
|
||||
"pinLimitReachedAlert": "Hai raggiunto il limite di spazio. I nuovi documenti non saranno salvati nel tuo CryptDrive.<br>Puoi rimuovere dei documenti dal tuo CryptDrive oppure <a>sottoscrivere un'offerta premium</a> per incrementare il tuo limite.",
|
||||
"pinLimitReachedAlertNoAccounts": "Hai raggiunto il limite di spazio",
|
||||
"pinLimitNotPinned": "Hai raggiunto il limite di spazio.<br>Questo pad non è salvato nel tuo CryptDrive.",
|
||||
"pinLimitDrive": "Hai raggiunto il limite di spazio.<br>Non puoi creare nuovi pad.",
|
||||
"pinLimitNotPinned": "Hai raggiunto il limite di spazio.<br>Questo documento non è salvato nel tuo CryptDrive.",
|
||||
"pinLimitDrive": "Hai raggiunto il limite di spazio.<br>Non puoi creare nuovi documenti.",
|
||||
"importButton": "Importa",
|
||||
"importButtonTitle": "Importa un pad da un file locale",
|
||||
"importButtonTitle": "Importa un documento da un file locale",
|
||||
"exportButton": "Esporta",
|
||||
"exportButtonTitle": "Esporta questo pad in un file locale",
|
||||
"exportButtonTitle": "Esporta questo documento in un file locale",
|
||||
"exportPrompt": "Che nome vuoi dare al tuo file?",
|
||||
"user_rename": "Cambia il nome mostrato",
|
||||
"user_displayName": "Nome mostrato",
|
||||
|
@ -75,17 +78,17 @@
|
|||
"clickToEdit": "Clicca per modificare",
|
||||
"saveTitle": "Salva il titolo (Invio)",
|
||||
"forgetButton": "Elimina",
|
||||
"forgetPrompt": "Cliccando OK questo pad sarà spostato nel cestino. Sei sicuro?",
|
||||
"movedToTrash": "Questo pad è stato spostato nel cestino. <br><a>Accedi al mio Drive</a>",
|
||||
"forgetPrompt": "Cliccando OK questo documento sarà spostato nel cestino. Sei sicuro?",
|
||||
"movedToTrash": "Questo documento è stato spostato nel cestino. <br><a>Accedi al mio Drive</a>",
|
||||
"shareButton": "Condividi",
|
||||
"shareSuccess": "Link copiato negli appunti",
|
||||
"userListButton": "Elenco degli utenti",
|
||||
"chatButton": "Chat",
|
||||
"userAccountButton": "Il tuo account",
|
||||
"userAccountButton": "Menu dell'utente",
|
||||
"newButton": "Nuovo",
|
||||
"newButtonTitle": "Crea un nuovo pad",
|
||||
"newButtonTitle": "Crea un nuovo documento",
|
||||
"uploadButton": "Carica file",
|
||||
"uploadButtonTitle": "Carica un nuovo file nella cartella corrente",
|
||||
"uploadButtonTitle": "Carica un nuovo file nel tuo CryptDrive",
|
||||
"saveTemplateButton": "Salva come modello",
|
||||
"saveTemplatePrompt": "Scegli un titolo per il modello",
|
||||
"templateSaved": "Modello salvato!",
|
||||
|
@ -100,14 +103,14 @@
|
|||
"backgroundButtonTitle": "Cambia il colore di sfondo della presentazione",
|
||||
"colorButtonTitle": "Cambia il colore del testo nella modalità presentazione",
|
||||
"propertiesButton": "Proprietà",
|
||||
"propertiesButtonTitle": "Mostra proprietà del pad",
|
||||
"propertiesButtonTitle": "Mostra proprietà del documento",
|
||||
"printText": "Stampa",
|
||||
"printButton": "Stampa (Invio)",
|
||||
"printButtonTitle2": "Stampa il tuo documento o esportalo come file PDF",
|
||||
"printOptions": "Opzioni di layout",
|
||||
"printSlideNumber": "Mostra il numero della slide",
|
||||
"printDate": "Mostra la data",
|
||||
"printTitle": "Mostra il titolo del pad",
|
||||
"printTitle": "Mostra il titolo del documento",
|
||||
"printCSS": "Personalizza lo stile (CSS):",
|
||||
"printTransition": "Attiva le animazioni di transizione",
|
||||
"printBackground": "Usa un'immagine di sfondo",
|
||||
|
@ -120,10 +123,10 @@
|
|||
"filePicker_description": "Scegli un file dal tuo CryptDrive da incorporare o caricane uno nuovo",
|
||||
"filePicker_filter": "Filtra i file per nome",
|
||||
"tags_title": "Tag (mostrati solo a te)",
|
||||
"tags_add": "Aggiorna i tag di questa pagina",
|
||||
"tags_add": "Aggiorna i tag per i documenti selezionati",
|
||||
"tags_notShared": "I tuoi tag non sono condivisi con altri utenti",
|
||||
"tags_duplicate": "Duplica tag: {0}",
|
||||
"tags_noentry": "Non puoi taggare un pad eliminato!",
|
||||
"tags_noentry": "Non puoi taggare un documento eliminato",
|
||||
"slideOptionsText": "Opzioni",
|
||||
"slideOptionsTitle": "Personalizza la presentazione",
|
||||
"slide_invalidLess": "Stile personalizzato non valido",
|
||||
|
@ -133,7 +136,7 @@
|
|||
"themeButtonTitle": "Seleziona il colore del tema da usare per l'editor del codice e delle presentazioni",
|
||||
"editShare": "Link per la modifica",
|
||||
"viewShare": "Link per sola lettura",
|
||||
"viewEmbedTag": "Per incorporare questo pad, includi questo iframe nella tua pagina dovunque tu voglia. Puoi modificarne lo stile con gli attributi HTML o CSS.",
|
||||
"viewEmbedTag": "Per incorporare questo documento, includi questo iframe nella tua pagina dovunque tu voglia. Puoi modificarne lo stile con gli attributi HTML o CSS.",
|
||||
"fileEmbedScript": "Per incorporare questo file, includi questo script una volta nella tua pagina per caricare il Media Tag:",
|
||||
"fileEmbedTag": "Quindi posiziona il Media Tag dovunque tu voglia nella tua pagina per incorporarlo:",
|
||||
"notifyJoined": "{0} si è unito alla sessione collaborativa",
|
||||
|
@ -147,8 +150,8 @@
|
|||
"help_button": "Guida",
|
||||
"historyText": "Cronologia",
|
||||
"historyButton": "Mostra la cronologia del documento",
|
||||
"history_next": "Versione più recente",
|
||||
"history_prev": "Versione meno recente",
|
||||
"history_next": "Prossima versione",
|
||||
"history_prev": "Versione precedente",
|
||||
"history_loadMore": "Carica più cronologia",
|
||||
"history_closeTitle": "Chiudi la cronologia",
|
||||
"history_restoreTitle": "Ripristina la versione selezionata del documento",
|
||||
|
@ -214,12 +217,12 @@
|
|||
"contacts_title": "Contatti",
|
||||
"contacts_added": "Invito ai contatti accettato.",
|
||||
"contacts_rejected": "Invito ai contatti rifiutato",
|
||||
"contacts_request": "<em>{0}</em> vorrebbe aggiungerti ai contatti. <b>Accettare<b>?",
|
||||
"contacts_request": "<em>{0}</em> vorrebbe aggiungerti ai contatti. <b>Accettare</b>?",
|
||||
"contacts_send": "Invia",
|
||||
"contacts_remove": "Rimuovi questo contatto",
|
||||
"contacts_confirmRemove": "Sei sicuro di voler rimuovere <em>{0}</em> dai tuoi contatti?",
|
||||
"contacts_typeHere": "Scrivi un messaggio qui...",
|
||||
"contacts_warning": "Tutto ciò che scrivi qui è permanente e disponibile a tutti gli utenti esistenti e futuri di questo pad. Sii prudente con le tue informazioni personali!",
|
||||
"contacts_warning": "Tutto ciò che scrivi qui è permanente e disponibile a tutti gli utenti esistenti e futuri di questo documento. Sii prudente con le tue informazioni personali!",
|
||||
"contacts_padTitle": "Chat",
|
||||
"contacts_info1": "Questi sono i tuoi contatti. Da qui, puoi:",
|
||||
"contacts_info2": "Clicca sull'icona di un contatto per chattare con lui",
|
||||
|
@ -232,20 +235,20 @@
|
|||
"contacts_rooms": "Stanze",
|
||||
"contacts_leaveRoom": "Esci da questa stanza",
|
||||
"contacts_online": "Un altro utente di questa stanza è online",
|
||||
"fm_rootName": "Documenti",
|
||||
"fm_rootName": "Drive",
|
||||
"fm_trashName": "Cestino",
|
||||
"fm_filesDataName": "Tutti i file",
|
||||
"fm_templateName": "Modelli",
|
||||
"fm_searchName": "Cerca",
|
||||
"fm_recentPadsName": "Pad recenti",
|
||||
"fm_recentPadsName": "Recenti",
|
||||
"fm_ownedPadsName": "posseduto",
|
||||
"fm_tagsName": "Tag",
|
||||
"fm_sharedFolderName": "Cartella condivisa",
|
||||
"fm_searchPlaceholder": "Cerca...",
|
||||
"fm_newButton": "Nuovo",
|
||||
"fm_newButtonTitle": "Crea un nuovo pad o cartella, importa un file nella cartella corrente",
|
||||
"fm_newButtonTitle": "Crea un nuovo documento o cartella, importa un file nella cartella corrente.",
|
||||
"fm_newFolder": "Nuova cartella",
|
||||
"fm_newFile": "Nuovo pad",
|
||||
"fm_newFile": "Nuovo documento",
|
||||
"fm_folder": "Cartella",
|
||||
"fm_sharedFolder": "Cartella condivisa",
|
||||
"fm_folderName": "Nome della cartella",
|
||||
|
@ -260,33 +263,33 @@
|
|||
"fm_openParent": "Mostra nella cartella",
|
||||
"fm_noname": "Documento senza titolo",
|
||||
"fm_emptyTrashDialog": "Sei sicuro di voler svuotare il cestino?",
|
||||
"fm_removeSeveralPermanentlyDialog": "Sei sicuro di voler rimuovere permanentemente questi {0} elementi dal tuo CryptDrive?",
|
||||
"fm_removePermanentlyDialog": "Sei sicuro di voler rimuovere permanentemente questo elemento dal tuo CryptDrive?",
|
||||
"fm_deleteOwnedPad": "Sei sicuro di voler rimuovere permanentemente questo pad dal server?",
|
||||
"fm_deleteOwnedPads": "Sei sicuro di voler rimuovere permanentemente questi pad dal server?",
|
||||
"fm_removeSeveralPermanentlyDialog": "Sei sicuro di voler rimuovere questi {0} elementi dal tuo drive? Essi rimarranno sui drive degli utenti che li hanno memorizzati.",
|
||||
"fm_removePermanentlyDialog": "Sei sicuro di voler rimuovere questo elemento dal tuo drive? Esso rimarrà nei drive degli altri utenti che lo hanno memorizzato.",
|
||||
"fm_deleteOwnedPad": "Sei sicuro di voler distruggere questo documento?",
|
||||
"fm_deleteOwnedPads": "Sei sicuro di voler distruggere questi documenti?",
|
||||
"fm_restoreDialog": "Sei sicuro di voler ripristinare {0} nella sua precedente posizione?",
|
||||
"fm_unknownFolderError": "La directory selezionata o visitata precedentemente non esiste più. Apertura della cartella superiore in corso...",
|
||||
"fm_contextMenuError": "Impossibile aprire il menu contestuale per questo elemento. Se il problema persiste, prova a ricaricare la pagina.",
|
||||
"fm_selectError": "Impossibile selezionare l'elemento desiderato. Se il problema persiste, prova a ricaricare la pagina.",
|
||||
"fm_categoryError": "Impossibile aprire la categoria selezionata, mostro Documenti.",
|
||||
"fm_info_root": "Crea tutte le sottocartelle che desideri per organizzare i tuoi file.",
|
||||
"fm_info_template": "Contiene tutti i pad salvati come modelli e che puoi riutilizzare per creare nuovi pad.",
|
||||
"fm_info_recent": "Questi pad sono stati recentemente aperti o modificati da te o da persone con le quali tu collabori.",
|
||||
"fm_info_template": "Questi documenti sono salvati come modelli. Puoi riutilizzarli per creare nuovi documenti.",
|
||||
"fm_info_recent": "Questi documenti sono stati recentemente aperti o modificati da te o da persone con le quali tu collabori.",
|
||||
"fm_info_trash": "Svuota il tuo cestino per liberare spazio nel tuo CryptDrive.",
|
||||
"fm_info_anonymous": "Non hai effettuato l'accesso, quindi i tuoi pad scadranno fra tre mesi. Sono conservati nel tuo browser, quindi cancellando la cronologia potresti farli scomparire.<br><a href=\"/register/\">Registrati</a> o <a href=\"/login/\">Accedi</a> per conservarli permanentemente.<br>",
|
||||
"fm_info_anonymous": "Non hai effettuato l'accesso, quindi i tuoi documenti scadranno tra {0} giorni. Cancellando la cronologia potresti farli scomparire.<br><a href=\"/register/\">Registrati</a> (non sono richieste informazioni personali) oppure <a href=\"/login/\">Accedi</a> per conservarli permanentemente nel tuo drive. <a href=\"#docs\">Leggi di più sugli account registrati</a>.",
|
||||
"fm_info_sharedFolder": "Questa è una cartella condivisa. Non hai effettuato l'accesso, quindi puoi visualizzarla solo in modalità di sola lettura.<br><a href=\"/register/\">Registrati</a> o <a href=\"/login/\">Accedi</a> per poterla importare nel tuo CryptDrive e per modificarla.",
|
||||
"fm_info_owned": "Sei il proprietario dei pad mostrati qui. Questo significa che puoi rimuoverli permanentemente dal server quando lo desideri. Se lo fai, gli altri utenti non potranno più accedervi.",
|
||||
"fm_info_owned": "Sei il proprietario dei documenti mostrati qui. Questo significa che puoi rimuoverli permanentemente dal server quando lo desideri. Se lo fai, gli altri utenti non potranno più accedervi.",
|
||||
"fm_error_cantPin": "Errore interno del server. Ricarica la pagina e prova di nuovo.",
|
||||
"fm_viewListButton": "Visualizzazione elenco",
|
||||
"fm_viewGridButton": "Visualizzazione griglia",
|
||||
"fm_renamedPad": "Hai impostato un nome personalizzato per questo pad. Il suo titolo condiviso è: <br><b>{0}</b>",
|
||||
"fm_renamedPad": "Hai impostato un nome personalizzato per questo documento. Il suo titolo condiviso è: <br><b>{0}</b>",
|
||||
"fm_canBeShared": "Questa cartella può essere condivisa",
|
||||
"fm_prop_tagsList": "Tag",
|
||||
"fm_burnThisDriveButton": "Elimina tutte le informazioni salvate da CryptPad nel tuo browser",
|
||||
"fm_burnThisDrive": "Sei sicuro di voler rimuovere tutti i dati salvati da CryptPad nel tuo browser?<br>Questo rimuoverà il tuo CryptDrive e la sua cronologia dal tuo browser, ma i tuoi pad continueranno a esistere (criptati) nel nostro server.",
|
||||
"fm_padIsOwned": "Sei il proprietario di questo pad",
|
||||
"fm_padIsOwnedOther": "Questo pad è di proprietà di un altro utente",
|
||||
"fm_deletedPads": "Questi pad non esistono più sul server, sono stati rimossi dal tuo CryptDrive: {0}",
|
||||
"fm_burnThisDrive": "Sei sicuro di voler rimuovere tutti i dati salvati da CryptPad nel tuo browser?<br>Questo rimuoverà il tuo CryptDrive e la sua cronologia dal tuo browser, ma i tuoi documenti continueranno a esistere (criptati) nel nostro server.",
|
||||
"fm_padIsOwned": "Sei il proprietario di questo documento",
|
||||
"fm_padIsOwnedOther": "Questo documento è di proprietà di un altro utente",
|
||||
"fm_deletedPads": "Questi documenti non esistono più sul server, sono stati rimossi dal tuo CryptDrive: {0}",
|
||||
"fm_tags_name": "Nome del tag",
|
||||
"fm_tags_used": "Numero di utilizzi",
|
||||
"fm_restoreDrive": "Ripristina il tuo drive ad uno stato precedente. Per i migliori risultati, evita di fare cambiamenti al tuo drive sinché questo processo non sarà completato.",
|
||||
|
@ -298,9 +301,9 @@
|
|||
"fc_open": "Apri",
|
||||
"fc_open_ro": "Apri (sola lettura)",
|
||||
"fc_delete": "Sposta nel cestino",
|
||||
"fc_delete_owned": "Elimina dal server",
|
||||
"fc_delete_owned": "Elimina",
|
||||
"fc_restore": "Ripristina",
|
||||
"fc_remove": "Rimuovi dal tuo CryptDrive",
|
||||
"fc_remove": "Rimuovi",
|
||||
"fc_remove_sharedfolder": "Rimuovi",
|
||||
"fc_empty": "Svuota il cestino",
|
||||
"fc_prop": "Proprietà",
|
||||
|
@ -321,16 +324,16 @@
|
|||
"login_invalUser": "Nome utente richiesto",
|
||||
"login_invalPass": "Password richiesta",
|
||||
"login_unhandledError": "Si è verificato un errore inaspettato :(",
|
||||
"register_importRecent": "Importa i pad dalla tua sessione anonima",
|
||||
"register_importRecent": "Importa i documenti dalla tua sessione ospite",
|
||||
"register_acceptTerms": "Accetto <a>i termini del servizio</a>",
|
||||
"register_passwordsDontMatch": "Le password non corrispondono!",
|
||||
"register_passwordTooShort": "Le password devono essere lunghe almeno {0} caratteri.",
|
||||
"register_mustAcceptTerms": "Devi accettare i termini del servizio.",
|
||||
"register_whyRegister": "Perché registrarsi?",
|
||||
"register_header": "Benvenuto su CryptPad",
|
||||
"register_header": "Registrati",
|
||||
"register_writtenPassword": "Ho annotato il mio nome utente e la mia password, procedi",
|
||||
"register_cancel": "Torna indietro",
|
||||
"register_warning": "Zero Knowledge significa che non possiamo recuperare i tuoi dati se perdi la tua password.",
|
||||
"register_cancel": "Annulla",
|
||||
"register_warning": "Avvertimento",
|
||||
"register_alreadyRegistered": "Questo utente esiste già, vuoi accedere?",
|
||||
"settings_cat_account": "Account",
|
||||
"settings_cat_drive": "CryptDrive",
|
||||
|
@ -341,15 +344,15 @@
|
|||
"settings_title": "Impostazioni",
|
||||
"settings_save": "Salva",
|
||||
"settings_backupCategory": "Backup",
|
||||
"settings_backupHint": "Effettua il backup o ripristina tutto il contenuto del tuo CryptDrive. Non conterrà il contenuto dei tuoi pad, solo le chiavi per potervi accedere.",
|
||||
"settings_backupHint": "Effettua il backup o ripristina tutto il contenuto del tuo CryptDrive. Non conterrà il contenuto dei tuoi documenti, solo le chiavi per potervi accedere.",
|
||||
"settings_backup": "Backup",
|
||||
"settings_restore": "Ripristina",
|
||||
"settings_backupHint2": "Scarica il contenuto corrente dei tuoi pad. I pad saranno scaricati in un formato leggibile, se possibile.",
|
||||
"settings_backupHint2": "Scarica il contenuto dei tuoi documenti nel tuo drive. I documenti saranno scaricati in un formato leggibile da altre applicazioni, se possibile. Quando non sarà possibile, i documenti verranno scaricati in formati leggibili da CryptPad.",
|
||||
"settings_backup2": "Scarica il mio CryptDrive",
|
||||
"settings_backup2Confirm": "Questo scaricherà tutti i tuoi pad e file dal tuo CryptDrive. Se vuoi continuare, scegli un nome e premi OK",
|
||||
"settings_backup2Confirm": "Questo scaricherà tutti i tuoi documenti e file dal tuo CryptDrive. Se vuoi continuare, scegli un nome e premi OK",
|
||||
"settings_exportTitle": "Esporta il tuo CryptDrive",
|
||||
"settings_exportDescription": "Per favore attendi mentre scarichiamo e decriptiamo i tuoi documenti. Potrebbe richiedere qualche minuto. Chiudere la scheda interromperà il processo.",
|
||||
"settings_exportFailed": "Se un pad richiede più di un minuto per essere scaricato, non sarà incluso nell'esportazione. Un link a qualsiasi pad non esportato sarà mostrato.",
|
||||
"settings_exportFailed": "Se un documento richiede più di un minuto per essere scaricato, non sarà incluso nell'esportazione. Un link a qualsiasi documento non esportato sarà mostrato.",
|
||||
"settings_exportWarning": "Nota bene: questo strumento è ancora in versione beta e può presentare problemi di scalabilità. Per migliorare le prestazioni, è consigliabile lasciare attiva questa scheda.",
|
||||
"settings_exportCancel": "Sei sicuro di voler annullare l'esportazione? Dovrai iniziare da capo la prossima volta.",
|
||||
"settings_export_reading": "Lettura del tuo CryptDrive in corso...",
|
||||
|
@ -364,7 +367,7 @@
|
|||
"settings_resetNewTitle": "Pulisci CryptDrive",
|
||||
"settings_resetButton": "Rimuovi",
|
||||
"settings_reset": "Rimuovi tutti i file e le cartelle dal tuo CryptDrive",
|
||||
"settings_resetPrompt": "Questa azione eliminerà tutti i pad dal tuo drive.<br>Sei sicuro di voler continuare?<br>Digita “<em>I love CryptPad</em>” per confermare.",
|
||||
"settings_resetPrompt": "Questa azione eliminerà tutti i documenti dal tuo drive.<br>Sei sicuro di voler continuare?<br>Digita “<em>I love CryptPad</em>” per confermare.",
|
||||
"settings_resetDone": "Il tuo drive adesso è vuoto!",
|
||||
"settings_resetError": "Testo di verifica errato. Il tuo CryptDrive non è stato modificato.",
|
||||
"settings_resetTipsAction": "Ripristinare",
|
||||
|
@ -373,21 +376,21 @@
|
|||
"settings_resetTipsDone": "Ora tutti i suggerimenti sono di nuovo visibili.",
|
||||
"settings_thumbnails": "Miniature",
|
||||
"settings_disableThumbnailsAction": "Disattiva la creazione di miniature nel tuo CryptDrive",
|
||||
"settings_disableThumbnailsDescription": "Le miniature sono create automaticamente e conservate nel tuo browser quando visiti un nuovo pad. Qui puoi disattivare questa funzione.",
|
||||
"settings_disableThumbnailsDescription": "Le miniature sono create automaticamente e conservate nel tuo browser quando visiti un nuovo documento. Qui puoi disattivare questa funzione.",
|
||||
"settings_resetThumbnailsAction": "Pulire",
|
||||
"settings_resetThumbnailsDescription": "Pulisci tutte le miniature dei pad conservate nel tuo browser.",
|
||||
"settings_resetThumbnailsDescription": "Pulisci tutte le miniature dei documenti conservate nel tuo browser.",
|
||||
"settings_resetThumbnailsDone": "Tutte le miniature sono state eliminate.",
|
||||
"settings_import": "Importa",
|
||||
"settings_importConfirm": "Sei sicuro di voler importare i tuoi pad recenti da questo browser sul tuo account CryptDrive?",
|
||||
"settings_importConfirm": "Sei sicuro di voler importare i tuoi documenti recenti da questo browser sul tuo account CryptDrive?",
|
||||
"settings_autostoreMaybe": "Manuale (chiedi sempre)",
|
||||
"settings_userFeedbackTitle": "Feedback",
|
||||
"settings_userFeedbackHint1": "CryptPad fornisce solo alcuni feedback basilari al server, per aiutarci a migliorare la tua esperienza. ",
|
||||
"settings_userFeedbackHint2": "Il contenuto del tuo pad non sarà mai condiviso con il server.",
|
||||
"settings_userFeedbackHint2": "Il contenuto dei tuoi documenti non sarà mai condiviso con il server.",
|
||||
"settings_userFeedback": "Abilita feedback dell'utente",
|
||||
"settings_deleteTitle": "Cancellazione account",
|
||||
"settings_deleteHint": "La cancellazione dell'account è permanente. Il tuo CryptDrive e il tuo elenco di pad saranno cancellati dal server. Il resto dei tuoi pad sarà eliminato in 90 giorni se nessun altro li ha salvati nel suo CryptDrive.",
|
||||
"settings_deleteHint": "La cancellazione dell'account è permanente. Il tuo CryptDrive e il tuo elenco di documenti saranno cancellati dal server. Il resto dei tuoi documenti sarà eliminato in 90 giorni se nessun altro li ha salvati nel suo CryptDrive.",
|
||||
"settings_deleteButton": "Cancella il tuo account",
|
||||
"padNotPinnedVariable": "Questo pad scadrà dopo {4} giorni di inattività, {0}accedi{1} o {2}registrati{3} per conservarlo.",
|
||||
"padNotPinnedVariable": "Questo documento 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>",
|
||||
"uploadFolderButton": "Carica cartella",
|
||||
"ui_more": "Altro",
|
||||
|
@ -395,34 +398,34 @@
|
|||
"fc_expandAll": "Espandi tutto",
|
||||
"fc_collapseAll": "Comprimi tutto",
|
||||
"register_emailWarning0": "Sembra che tu abbia inserito la tua email come nome utente.",
|
||||
"settings_driveDuplicateHint": "Quando sposti i tuoi pad in una cartella condivisa, una copia è conservata nel tuo CryptDrive per assicurartene il controllo. Puoi nascondere i file duplicati. Soltanto la versione condivisa verrà mostrata, a meno che non venga eliminata, in tal caso il file originale verrà mostrato nella sua posizione precedente.",
|
||||
"settings_driveDuplicateHint": "Quando sposti i tuoi documenti in una cartella condivisa, una copia è conservata nel tuo CryptDrive per assicurartene il controllo. Puoi nascondere i file duplicati. Soltanto la versione condivisa verrà mostrata, a meno che non venga eliminata, in tal caso il file originale verrà mostrato nella sua posizione precedente.",
|
||||
"settings_codeIndentation": "Indentazione dell'editor di codice (spazi)",
|
||||
"settings_codeFontSize": "Dimensione del carattere nell'editor di codice",
|
||||
"uploadFolder_modal_filesPassword": "Password dei file",
|
||||
"uploadFolder_modal_owner": "File posseduti",
|
||||
"uploadFolder_modal_forceSave": "Conserva i file nel tuo CryptDrive",
|
||||
"upload_mustLogin": "Devi eseguire l'accesso per poter caricare file",
|
||||
"pad_base64": "Questo pad contiene immagini conservate in maniera inefficiente. Queste immagini aumenteranno significativamente le dimensioni del pad nel tuo CryptDrive, e lo renderanno più lento da caricare. Puoi convertire questi file in un nuovo formato che verrà conservato separatamente nel tuo CryptDrive. Vuoi convertire queste immagini ora?",
|
||||
"pad_base64": "Questo documento contiene immagini conservate in maniera inefficiente. Queste immagini aumenteranno significativamente le dimensioni del documento nel tuo CryptDrive, e lo renderanno più lento da caricare. Puoi convertire questi file in un nuovo formato che verrà conservato separatamente nel tuo CryptDrive. Vuoi convertire queste immagini ora?",
|
||||
"mdToolbar_code": "Codice",
|
||||
"home_host": "Questa è un'istanza di CryptPad gestita indipendentemente dalla community.",
|
||||
"features_f_file0": "Apri i file",
|
||||
"home_host": "Questa è un'istanza di CryptPad gestita in modo indipendente dalla community.",
|
||||
"features_f_file0": "Apri i documenti",
|
||||
"help_genericMore": "Impara di più su cosa può fare CryptPad per te leggendo le nostre <a>FAQ</a>",
|
||||
"settings_codeSpellcheckLabel": "Abilita il controllo ortografico nell'editor di codice",
|
||||
"team_inviteLinkError": "Si è verificato un errore durante la creazione del link.",
|
||||
"register_emailWarning1": "Puoi farlo se vuoi, ma non verrà inviato ai nostri server.",
|
||||
"register_emailWarning2": "Non sarai in grado di resettare la tua password usando la tua email, a differenza di come puoi fare con molti altri servizi.",
|
||||
"register_emailWarning3": "Se hai capito, ma intendi comunque usare la tua email come nome utente, clicca OK.",
|
||||
"oo_sheetMigration_anonymousEditor": "Le modifiche da parte di utenti anonimi a questo foglio di calcolo sono disabilitate finché un utente registrato non lo aggiorna all'ultima versione.",
|
||||
"oo_sheetMigration_anonymousEditor": "Questo documento richiede un aggiornamento. La modifica è disabilitata per gli ospiti fino a quando un utente registrato non apre il documento.",
|
||||
"features_f_support": "Supporto più rapido",
|
||||
"features_f_register": "Registrati gratuitamente",
|
||||
"features_f_file1_note": "Condividi file con i tuoi contatti o incorporali nei tuoi pad",
|
||||
"features_f_file1_note": "Archivia i file nel tuo CryptDrive: immagini, PDF, video e altro. Condividili con i tuoi contatti o incorporali nei tuoi documenti. (fino a {0}MB)",
|
||||
"features_f_file1": "Carica e condividi file",
|
||||
"features_f_social": "Applicazioni social",
|
||||
"features_premium": "Utente premium",
|
||||
"features_registered": "Utente registrato",
|
||||
"features_anon": "Utente anonimo",
|
||||
"features_f_social": "Funzionalità social",
|
||||
"features_premium": "Premium",
|
||||
"features_registered": "Registrato",
|
||||
"features_anon": "Ospite",
|
||||
"contact": "Contatti",
|
||||
"privacy": "Privacy",
|
||||
"privacy": "Privacy Policy",
|
||||
"about": "Info",
|
||||
"mdToolbar_toc": "Indice",
|
||||
"mdToolbar_list": "Elenco puntato",
|
||||
|
@ -439,7 +442,7 @@
|
|||
"upload_size": "Dimensione",
|
||||
"upload_pending": "In attesa",
|
||||
"upload_choose": "Scegli un file",
|
||||
"upload_tooLargeBrief": "File troppo grande",
|
||||
"upload_tooLargeBrief": "Il file supera il limite di {0}MB di questo drive",
|
||||
"upload_notEnoughSpaceBrief": "Spazio insufficiente",
|
||||
"upload_uploadPending": "Stai già effettuando un caricamento. Vuoi annullarlo e caricare il tuo nuovo file?",
|
||||
"upload_modal_title": "Opzioni di caricamento file",
|
||||
|
@ -461,36 +464,36 @@
|
|||
"settings_logoutEverywhereTitle": "Chiudi le sessioni remote",
|
||||
"settings_logoutEverywhereButton": "Esci",
|
||||
"settings_importDone": "Importazione completata",
|
||||
"features_f_subscribe_note": "Devi prima accedere a CryptPad",
|
||||
"features_f_subscribe": "Abbonati alla versione Premium",
|
||||
"features_f_supporter_note": "Aiutaci a dimostrare che i software che proteggono la privacy devono essere la norma",
|
||||
"features_f_supporter": "Diventa un supporter della privacy",
|
||||
"features_f_support_note": "Supporto email professionale con il piano Team",
|
||||
"features_f_storage2_note": "Da 5GB a 50GB in funzione del piano selezionato",
|
||||
"features_f_subscribe_note": "Account necessario per iscriversi",
|
||||
"features_f_subscribe": "Abbonati",
|
||||
"features_f_supporter_note": "Aiuta CryptPad a diventare finanziariamente sostenibile e a dimostrare che i software che proteggono la privacy, finanziati volontariamente da utenti, devono essere la norma",
|
||||
"features_f_supporter": "Supporta la privacy",
|
||||
"features_f_support_note": "Risposta prioritaria dagli amministratori via email e sistema di ticket integrato",
|
||||
"features_f_storage2_note": "Da 5GB a 50GB in funzione del piano selezionato, limite aumentato di {0}MB per i caricamenti di file",
|
||||
"features_f_storage2": "Spazio d'archiviazione supplementare",
|
||||
"features_f_reg_note": "Ed aiutare lo sviluppo di CryptPad",
|
||||
"features_f_reg_note": "Con ulteriori vantaggi",
|
||||
"features_f_reg": "Tutte le funzionalità degli utenti registrati",
|
||||
"features_f_storage1_note": "I pad conservati nel tuo CryptDrive non saranno mai eliminati per inattività",
|
||||
"features_f_storage1": "Archivio permanente (50MB)",
|
||||
"features_f_social_note": "Crea un profilo, usa un avatar, chatta con i contatti",
|
||||
"features_f_storage1_note": "I documenti conservati nel tuo CryptDrive non saranno eliminati per inattività",
|
||||
"features_f_storage1": "Archivio personale ({0})",
|
||||
"features_f_social_note": "Aggiungi contatti per una collaborazione sicura, crea un profilo, controlli dettagliati sugli accessi",
|
||||
"features_f_devices_note": "Accesso al tuo CryptDrive dovunque con il tuo account utente",
|
||||
"features_f_devices": "I tuoi pad su tutti i tuoi dispositivi",
|
||||
"features_f_devices": "I tuoi documenti su tutti i tuoi dispositivi",
|
||||
"features_f_cryptdrive1_note": "Cartelle, cartelle condivise, modelli, tag",
|
||||
"features_f_cryptdrive1": "Funzionalità complete di CryptDrive",
|
||||
"features_f_anon_note": "Con migliore usabilità e più controllo sui tuoi pad",
|
||||
"features_f_anon": "Tutte le funzionalità degli utenti anonimi",
|
||||
"features_f_storage0_note": "I pad creati rischiano la cancellazione dopo 3 mesi di inattività",
|
||||
"features_f_anon_note": "Con funzionalità aggiuntive",
|
||||
"features_f_anon": "Tutte le funzionalità degli utenti ospiti",
|
||||
"features_f_storage0_note": "I documenti creati saranno eliminati dopo {0} giorni di inattività",
|
||||
"features_f_storage0": "Tempo di conservazione limitato",
|
||||
"features_f_cryptdrive0_note": "Conservazione nel browser dei pad visitati per ritrovarli più tardi",
|
||||
"features_f_cryptdrive0_note": "Conservazione nel browser dei documenti visitati per poter riaprirli più tardi",
|
||||
"features_f_cryptdrive0": "Accesso limitato a CryptDrive",
|
||||
"features_f_file0_note": "Guarda e scarica file condivisi da altri utenti",
|
||||
"features_f_file0_note": "Guarda e scarica documenti condivisi da altri utenti",
|
||||
"features_f_core_note": "Modifica, Importa & Esporta, Cronologia, Elenco utenti, Chat",
|
||||
"features_title": "Confronto delle funzionalità",
|
||||
"features_f_core": "Funzioni comuni delle applicazioni",
|
||||
"features_f_apps": "Accesso alle applicazioni principali",
|
||||
"features_title": "Funzionalità",
|
||||
"features_f_core": "Funzionalità comuni",
|
||||
"features_f_apps": "Accesso a tutte le applicazioni",
|
||||
"features": "Funzionalità",
|
||||
"terms": "Termini",
|
||||
"main_catch_phrase": "Il cloud Zero Knowledge",
|
||||
"main_catch_phrase": "Suite di collaborazione<br>open source e crittografata end-to-end",
|
||||
"mdToolbar_check": "Elenco delle attività",
|
||||
"mdToolbar_heading": "Titolo",
|
||||
"mdToolbar_strikethrough": "Barrato",
|
||||
|
@ -520,25 +523,25 @@
|
|||
"settings_ownDrivePending": "Il tuo account è stato aggiornato. Non chiudere o ricaricare questa pagina prima che sia stato completato il processo.",
|
||||
"settings_ownDriveConfirm": "Aggiornare il tuo account potrebbe richiedere tempo. Dovrai accedere nuovamente su tutti i tuoi dispositivi. Vuoi continuare?",
|
||||
"settings_ownDriveHint": "Gli account più vecchi non hanno accesso alle ultime funzioni, per motivi tecnici. Un aggiornamento gratuito permetterà di attivare le funzioni attuali e preparare il tuo CryptDrive per futuri aggiornamenti.",
|
||||
"settings_padSpellcheckLabel": "Attiva il controllo ortografico nei pad di testo",
|
||||
"settings_padSpellcheckLabel": "Attiva il controllo ortografico nei documenti di testo",
|
||||
"settings_padSpellcheckHint": "Questa opzione permette di attivare il controllo ortografico nell'editor di testo. Gli errori saranno sottolineati in rosso e le correzioni saranno disponibili cliccando con il tasto destro del mouse e premendo il tasto Ctrl o Meta.",
|
||||
"settings_padSpellcheckTitle": "Controllo ortografico",
|
||||
"settings_padWidthLabel": "Ridurre la larghezza dell'editor",
|
||||
"settings_padWidthHint": "Passa dalla modalità a foglio (predefinita) che limita la larghezza dell'editor di testo, a quella che ti permette di usare tutta la larghezza dello schermo.",
|
||||
"settings_padWidth": "Massima larghezza dell'editor",
|
||||
"settings_codeUseTabs": "Indentare usando le tabulazioni (al posto degli spazi)",
|
||||
"settings_driveDuplicateTitle": "Duplicati dei pad posseduti",
|
||||
"settings_driveDuplicateTitle": "Duplicati dei documenti posseduti",
|
||||
"settings_logoutEverywhereConfirm": "Sei sicuro? Dovrai accedere su tutti i tuoi dispositivi.",
|
||||
"settings_logoutEverywhere": "Forza l'uscita da tutte le altre sessioni web",
|
||||
"settings_publicSigningKey": "Firma digitale pubblica",
|
||||
"settings_anonymous": "Non sei connesso. Queste impostazioni sono specifiche per questo browser.",
|
||||
"settings_deleted": "Il tuo account utente è stato cancellato. Premi OK per tornare alla home page.",
|
||||
"settings_deleteModal": "Condividi le seguenti informazioni con il tuo amministratore CryptPad per far rimuovere i tuoi dati dal server.",
|
||||
"settings_autostoreHint": "<b>Automatico</b> Tutti i pad che visiti sono conservati nel tuo CryptDrive.<br><b>Manuale (chiedi sempre)</b> Se non hai ancora conservato alcun pad ti verrà chiesto se vuoi conservarli nel tuo CryptDrive.<br><b>Manuale (non chiedere mai)</b> I pads non sono conservati automaticamente nel tuo CryptDrive. L'opzione di conservarli sarà nascosta.",
|
||||
"settings_autostoreHint": "<b>Automatico</b> Tutti i documenti che visiti sono conservati nel tuo CryptDrive.<br><b>Manuale (chiedi sempre)</b> Se non hai ancora conservato alcun documento ti verrà chiesto se vuoi conservarli nel tuo CryptDrive.<br><b>Manuale (non chiedere mai)</b> I documenti non sono conservati automaticamente nel tuo CryptDrive. L'opzione di conservarli sarà nascosta.",
|
||||
"settings_autostoreNo": "Manuale (non chiedere mai)",
|
||||
"settings_autostoreYes": "Automatico",
|
||||
"settings_autostoreTitle": "Conservazione pad nel CryptDrive",
|
||||
"settings_importTitle": "Importa i pad recenti di questo browser nel tuo CryptDrive",
|
||||
"settings_importTitle": "Importa i documenti recenti di questo browser nel tuo CryptDrive",
|
||||
"kanban_noTags": "Nessun tag",
|
||||
"kanban_tags": "Filtra per tag",
|
||||
"kanban_delete": "Elimina",
|
||||
|
@ -598,13 +601,13 @@
|
|||
"owner_removePendingText": "In attesa",
|
||||
"owner_removeText": "Proprietari",
|
||||
"features_emailRequired": "Indirizzo email richiesto",
|
||||
"features_pricing": "Tra {0} e {2}€ al mese",
|
||||
"features_pricing": "Da {0} a {2}€ al mese",
|
||||
"features_noData": "Nessuna informazione personale richiesta",
|
||||
"homePage": "Home page",
|
||||
"requestEdit_sent": "Richiesta inviata",
|
||||
"requestEdit_request": "{1} vuole modificare il pad <b>{0}</b>",
|
||||
"requestEdit_request": "{1} vuole modificare il documento <b>{0}</b>",
|
||||
"later": "Decidi più tardi",
|
||||
"requestEdit_viewPad": "Apri il pad in una nuova scheda",
|
||||
"requestEdit_viewPad": "Apri il documento in una nuova scheda",
|
||||
"notifications_cat_pads": "Condivisi con me",
|
||||
"notifications_cat_all": "Tutte",
|
||||
"openNotificationsApp": "Apri il pannello delle notifiche",
|
||||
|
@ -622,7 +625,7 @@
|
|||
"share_filterFriend": "Cerca per nome",
|
||||
"notification_folderShared": "{0} ha condiviso una cartella con te: <b>{1}</b>",
|
||||
"notification_fileShared": "{0} ha condiviso un pad con te: <b>{1}</b>",
|
||||
"notification_padShared": "{0} ha condiviso un pad con te: <b>{1}</b>",
|
||||
"notification_padShared": "{0} ha condiviso un documento con te: <b>{1}</b>",
|
||||
"isNotContact": "{0} <b>non</b> è uno dei tuoi contatti",
|
||||
"isContact": "{0} è uno dei tuoi contatti",
|
||||
"profile_friendRequestSent": "Richiesta di contatto in attesa...",
|
||||
|
@ -642,10 +645,10 @@
|
|||
"contact_email": "Email",
|
||||
"contact_chat": "Chat",
|
||||
"contact_dev": "Contatta gli sviluppatori",
|
||||
"contact_admin": "Contatta gli amministratori",
|
||||
"contact_admin": "Contatta gli amministratori per: {0}",
|
||||
"footer_donate": "Dona",
|
||||
"admin_registeredTitle": "Utenti registrati",
|
||||
"admin_activePadsTitle": "Pad attivi",
|
||||
"admin_activePadsTitle": "Documenti attivi",
|
||||
"admin_activeSessionsTitle": "Connessioni attive",
|
||||
"adminPage": "Amministrazione",
|
||||
"admin_cat_stats": "Statistiche",
|
||||
|
@ -658,14 +661,14 @@
|
|||
"autostore_file": "file",
|
||||
"sharedFolders_create_name": "Nome della cartella",
|
||||
"share_contactCategory": "Contatti",
|
||||
"share_linkCopy": "Copia",
|
||||
"share_linkOpen": "Anteprima",
|
||||
"share_linkCopy": "Copia il link",
|
||||
"share_linkOpen": "Apri il link",
|
||||
"header_homeTitle": "Vai alla homepage di CryptPad",
|
||||
"header_logoTitle": "Vai al tuo CryptDrive",
|
||||
"four04_pageNotFound": "Non riusciamo a trovare la pagina che stai cercando.",
|
||||
"support_close": "Chiudi il ticket",
|
||||
"profile_login": "Devi accedere per aggiungere questo utente ai tuoi contatti",
|
||||
"creation_404": "Questo pad non esiste più. Usa il modulo seguente per creare un nuovo pad.",
|
||||
"creation_404": "Questo documento non esiste più. Usa il modulo seguente per creare un nuovo documento.",
|
||||
"historyTrim_historySize": "Cronologia: {0}",
|
||||
"trimHistory_button": "Elimina cronologia",
|
||||
"trimHistory_success": "La cronologia è stata eliminata",
|
||||
|
@ -689,7 +692,7 @@
|
|||
"share_linkFriends": "Condividi con i contatti",
|
||||
"admin_cat_support": "Supporto",
|
||||
"support_cat_new": "Nuovo ticket",
|
||||
"support_formTitle": "Titolo del ticket",
|
||||
"support_formTitle": "Nuovo ticket",
|
||||
"support_cat_tickets": "Ticket esistenti",
|
||||
"support_listTitle": "Ticket di supporto",
|
||||
"support_showData": "Mostra/nascondi i dati dell'utente",
|
||||
|
@ -708,10 +711,10 @@
|
|||
"share_linkAccess": "Diritti d'accesso",
|
||||
"sharedFolders_create": "Crea una cartella condivisa",
|
||||
"settings_codeSpellcheckTitle": "Controllo ortografico",
|
||||
"drive_activeOld": "Pad meno recenti",
|
||||
"drive_activeOld": "Meno recenti",
|
||||
"supportPage": "Supporto",
|
||||
"admin_supportAddKey": "Aggiungi chiave privata",
|
||||
"support_formHint": "Questo modulo può essere usato per creare un nuovo ticket per il supporto. Usalo per contattare gli amministratori per risolvere problemi o fare domande in modo sicuro. Non creare un nuovo ticket se hai già un ticket aperto per lo stesso problema ma usa il pulsante rispondi per fornire maggiori informazioni.",
|
||||
"support_formHint": "Usa questo modulo per contattare gli amministratori in modo sicuro riguardo problemi e domande.<br>Nota che alcuni problemi/domande potrebbero già avere una risposta nella <a>Guida di CryptPad per gli Utenti</a>. Per favore, non creare un nuovo ticket se ne hai precedentemente aperto uno per lo stesso problema: in questo caso rispondi al tuo messaggio originale con ulteriori informazioni.",
|
||||
"support_remove": "Rimuovi il ticket",
|
||||
"support_closed": "Il ticket è stato chiuso",
|
||||
"notifications_cat_archived": "Cronologia",
|
||||
|
@ -725,42 +728,42 @@
|
|||
"burnAfterReading_proceed": "visualizza ed elimina",
|
||||
"oo_sheetMigration_complete": "Versione aggiornata disponibile, premi OK per ricaricare.",
|
||||
"view": "visualizza",
|
||||
"timeoutError": "Un errore ha interrotto la tua connessione al server. <br>Premi <em>Esc</em> per ricaricare la pagina.",
|
||||
"timeoutError": "Un errore ha interrotto la tua connessione al server. <br>Premi Esc per ricaricare la pagina.",
|
||||
"support_disabledTitle": "Il supporto non è abilitato",
|
||||
"support_listHint": "Qui c'è l'elenco dei ticket inviati agli amministratori e delle loro risposte. Un ticket chiuso non può essere riaperto ma puoi farne uno nuovo. Puoi nascondere i ticket che sono stati chiusi.",
|
||||
"creation_expireDays": "Giorno(i)",
|
||||
"creation_expireMonths": "Mese(i)",
|
||||
"creation_password": "Aggiungi una password",
|
||||
"creation_noTemplate": "Nessun modello",
|
||||
"creation_password": "Password\n",
|
||||
"creation_noTemplate": "Documento vuoto",
|
||||
"creation_newTemplate": "Nuovo modello",
|
||||
"creation_owners": "Proprietari",
|
||||
"pricing": "Prezzi",
|
||||
"creation_expireHours": "Ora(e)",
|
||||
"creation_create": "Crea",
|
||||
"convertFolderToSF_confirm": "Questa cartella deve essere convertita in una cartella condivisa perché altri possano vederla. Continuare?",
|
||||
"creation_expire": "Pad effimero",
|
||||
"creation_newPadModalDescription": "Clicca su un tipo di pad per crearlo. Puoi anche premere <b>Tab</b> per selezionare il tipo e premere <b>Invio</b> per confermare.",
|
||||
"password_info": "Il pad che stai cercando di aprire non esiste più o è protetto con una password. Inserisci la password corretta per accedere al suo contenuto.",
|
||||
"creation_expire": "Documento effimero",
|
||||
"creation_newPadModalDescription": "Clicca su un'app per creare un nuovo documento. Puoi anche premere <b>Tab</b> per selezionare l'app e premere <b>Invio</b> per confermare.",
|
||||
"password_info": "Il documento che stai cercando di aprire non esiste più oppure è protetto con una password nuova. Inserisci la password corretta per accedere al contenuto.",
|
||||
"access_main": "Accesso",
|
||||
"creation_expireFalse": "Illimitato",
|
||||
"creation_expiration": "Scadenza",
|
||||
"password_error": "Pad non trovato!<br>Questo errore può essere causato da due fattori: o la password è sbagliata o il pad è stato eliminato dal server.",
|
||||
"creation_expiration": "Data di scadenza",
|
||||
"password_error": "Documento non trovato<br>Questo errore può essere causato da due fattori: la password è sbagliata oppure il documento è stato distrutto.",
|
||||
"feedback_privacy": "Ci teniamo alla tua privacy e contemporaneamente vogliamo che CryptPad sia molto facile da usare. Usiamo questo file per capire quali caratteristiche dell'interfaccia utente contano per i nostri utenti, richiedendolo insieme a un parametro che specifica quale azione sia stata intrapresa.",
|
||||
"creation_owned": "Pad di proprietà",
|
||||
"creation_owned1": "Un pad <b>di proprietà</b> può essere eliminato dal server quando il proprietario vuole. Eliminando un pad lo si rimuove anche dai CryptDrive degli altri utenti.",
|
||||
"feedback_about": "Se stai leggendo questo, probabilmente sei curioso di sapere perché CryptPad richieda pagine internet quando attivi certe azioni",
|
||||
"creation_owned": "Documento di proprietà",
|
||||
"creation_owned1": "Un elemento <b>di proprietà</b> può essere distrutto quando il proprietario vuole. Se si distrugge un elemento, lo si rende non disponibile anche nei CryptDrive degli altri utenti.",
|
||||
"feedback_about": "Se stai leggendo questo, probabilmente sei curioso di sapere perché CryptPad richieda pagine internet quando attivi certe azioni.",
|
||||
"feedback_optout": "Se vuoi evitare di fornire questi dati visita <a>la tua pagina delle impostazioni</a>, dove trovi una casella di controllo per abilitare o disabilitare il feedback utente.",
|
||||
"properties_confirmNew": "Sei sicuro? Aggiungendo una password modificherai l'URL di questo pad e rimuoverai la sua cronologia. Gli utenti che non hanno la password perderanno l'accesso a questo pad",
|
||||
"properties_confirmChange": "Sei sicuro? Modificando la password rimuoverai la sua cronologia. Gli utenti che non hanno la nuova password perderanno l'accesso a questo pad",
|
||||
"properties_confirmNew": "Sei sicuro? Aggiungendo una password modificherai l'URL di questo documento e rimuoverai la sua cronologia. Gli utenti che non hanno la password perderanno l'accesso a questo documento",
|
||||
"properties_confirmChange": "Sei sicuro? Modificando la password rimuoverai la sua cronologia. Gli utenti che non hanno la nuova password perderanno l'accesso a questo documento",
|
||||
"properties_passwordSuccess": "La password è stata modificata con successo.<br>Premi OK per ricaricare ed aggiornare i tuoi diritti d'accesso.",
|
||||
"sharedFolders_forget": "Questo pad è conservato solo in una cartella condivisa, non puoi spostarlo nel cestino. Puoi usare il tuo CryptPad se vuoi eliminarlo.",
|
||||
"sharedFolders_forget": "Questo documento è conservato solo in una cartella condivisa, quindi non puoi spostarlo nel cestino. Puoi usare il tuo CryptDrive se vuoi eliminarlo.",
|
||||
"convertFolderToSF_SFParent": "Questa cartella non può essere convertita in una cartella condivisa nella sua posizione attuale. Spostala fuori dalla cartella condivisa che la contiene per continuare.",
|
||||
"convertFolderToSF_SFChildren": "Questa cartella non può essere convertita in una cartella condivisa perché contiene già delle cartelle condivise. Sposta quelle cartelle condivise altrove per continuare.",
|
||||
"autostore_notstored": "Questo {0} non è nel tuo CryptDrive. Vuoi archiviarlo adesso?",
|
||||
"autostore_store": "Archivia",
|
||||
"autostore_error": "Errore inaspettato: impossibile archiviare questo pad, riprova.",
|
||||
"autostore_settings": "Puoi abilitare l'archiviazione automatica dei pad nella tua pagina delle <a>Impostazioni</a>!",
|
||||
"autostore_saved": "Questo pad è stato archiviato con successo nel tuo CryptDrive!",
|
||||
"autostore_error": "Errore inaspettato: impossibile archiviare questo documento, riprova.",
|
||||
"autostore_settings": "Puoi abilitare l'archiviazione automatica dei documenti nella tua pagina delle <a>Impostazioni</a>.",
|
||||
"autostore_saved": "Questo documento è stato archiviato con successo nel tuo CryptDrive!",
|
||||
"sharedFolders_create_owned": "Cartella di proprietà",
|
||||
"autostore_hide": "Non archiviare",
|
||||
"autostore_forceSave": "Archivia il file nel tuo CryptDrive",
|
||||
|
@ -768,7 +771,7 @@
|
|||
"canvas_brush": "Pennello",
|
||||
"kanban_editBoard": "Modifica questa lavagna",
|
||||
"access_noContact": "Nessun altro contatto da aggiungere",
|
||||
"settings_trimHistoryHint": "Risparmia spazio eliminando la cronologia del tuo drive e le notifiche. Questo non avrà effetti sulla cronologia dei tuoi pad. Puoi cancellare la cronologia dei pad nella loro finestra di dialogo Proprietà.",
|
||||
"settings_trimHistoryHint": "Risparmia spazio eliminando la cronologia del tuo drive e le notifiche. Questo non avrà effetti sulla cronologia dei tuoi documenti. Puoi cancellare la cronologia dei documenti nella loro finestra di dialogo Proprietà.",
|
||||
"historyTrim_contentsSize": "Contenuti: {0}",
|
||||
"trimHistory_getSizeError": "Errore durante il calcolo della dimensione della cronologia del tuo drive",
|
||||
"trimHistory_error": "Errore durante l'eliminazione della cronologia",
|
||||
|
@ -777,33 +780,33 @@
|
|||
"allow_enabled": "attivato",
|
||||
"allow_disabled": "disattivato",
|
||||
"allow_label": "Lista d'accesso: {0}",
|
||||
"access_muteRequests": "Richiesta di accesso silenziato per questo pad",
|
||||
"owner_text": "Il(i) proprietario (proprietari) di un pad sono i soli utenti autorizzati a: aggiungere/rimuovere proprietari, limitare l'accesso al pad con una lista d'accesso o cancellare il pad.",
|
||||
"access_muteRequests": "Richieste di accesso silenziate per questo documento",
|
||||
"owner_text": "Il/i proprietario/i di un documento sono i soli utenti autorizzati a: aggiungere/rimuovere proprietari, limitare l'accesso al documento con una lista d'accesso o cancellare il documento.",
|
||||
"allow_checkbox": "Attiva la lista d'accesso",
|
||||
"allow_text": "Usare una lista d'accesso significa che solo utenti selezionati e proprietari possono accedere a questo documento.",
|
||||
"kanban_clearFilter": "Pulisci filtro",
|
||||
"kanban_editCard": "Modifica questa carta",
|
||||
"oo_isLocked": "Sincronizzazione in corso, attendere prego",
|
||||
"password_error_seed": "Pad non trovato!<br>Questo errore può essere causato da due fattori: la password è stata aggiunta/cambiata oppure il pad è stato eliminato dal server .",
|
||||
"password_error_seed": "Documento non trovato!<br>Questo errore può essere causato da due fattori: la password è stata aggiunta/cambiata oppure il documento è stato eliminato dal server.",
|
||||
"settings_safeLinksTitle": "Link sicuri",
|
||||
"settings_safeLinksCheckbox": "Attiva link sicuri",
|
||||
"safeLinks_error": "Questo link non ti dà accesso al documento",
|
||||
"settings_safeLinksHint": "CryptPad include le chiavi per decriptare i tuoi pad nei loro link. Chiunque abbia accesso alla tua cronologia browser può potenzialmente leggere i tuoi dati. Questo include estensioni di browser intrusivi e i navigatori che sincronizzano la tua cronologia nei dispositivi. L'attivazione di \"link sicuri\" impedisce alle chiavi di entrare nella tua cronologia browser oppure evita che vengano mostrate nella tua barra degli indirizzi quando possibile. Ti raccomandiamo vivamente di attivare questa funzione e usare il {0} menu Condividi.",
|
||||
"burnAfterReading_warningDeleted": "Questo pad è stato definitivamente eliminato, una volta chiusa questa finestra non sarà possibile accedervi di nuovo.",
|
||||
"safeLinks_error": "Questo link è stato copiato dalla barra degli indirizzi del browser e non ti permette di accedere al documento. Utilizza il menu <i></i> <b>Condividi</b> per condividere direttamente con i contatti o per copiare il link. <a> Ulteriori informazioni sulla funzione Link Sicuri</a>.",
|
||||
"settings_safeLinksHint": "CryptPad include le chiavi per decriptare i tuoi documenti nei loro link. Chiunque abbia accesso alla tua cronologia browser può potenzialmente leggere i tuoi dati. Questo include estensioni di browser intrusivi e i navigatori che sincronizzano la tua cronologia nei dispositivi. L'attivazione di \"link sicuri\" impedisce alle chiavi di entrare nella tua cronologia browser oppure evita che vengano mostrate nella tua barra degli indirizzi quando possibile. Ti raccomandiamo vivamente di attivare questa funzione e usare il {0} menu Condividi per generare link condivisibili.",
|
||||
"burnAfterReading_warningDeleted": "Questo documento è stato definitivamente eliminato, una volta chiusa questa finestra non sarà possibile accedervi di nuovo.",
|
||||
"burnAfterReading_warningAccess": "Questo documento si autodistruggerà. Quando cliccherai sul pulsante sottostante vedrai il contenuto una sola volta prima che venga definitivamente eliminato. Quando chiuderai questa finestra non potrai più accedervi. Se non sei sicuro di continuare puoi chiudere questa finestra e ritornare più tardi.",
|
||||
"burnAfterReading_warningLink": "Hai scelto di autodistruggere questo pad. Quando il tuo destinatario visiterà questo link potrà vedere il pad una sola volta prima che questo sia definitivamente eliminato.",
|
||||
"burnAfterReading_warningLink": "Hai scelto di autodistruggere questo documento. Quando il tuo destinatario visiterà questo link potrà vedere il documento una sola volta prima che questo sia definitivamente eliminato.",
|
||||
"team_inviteLinkErrorName": "Aggiungi un nome della persona che stai invitando. Puoi cambiarlo più tardi. ",
|
||||
"team_inviteLinkNoteMsg": "Questo messaggio verrà mostrato prima che il destinatario decida di raggiungere questo team.",
|
||||
"share_noContactsNotLoggedIn": "Accedi o registrati per vedere i tuoi contatti esistenti e aggiungi quelli nuovi.",
|
||||
"share_noContactsLoggedIn": "Non sei ancora connesso con nessuno su CryptPad. Condividi il link del tuo profilo per ricevere richieste di contatto.",
|
||||
"share_embedPasswordAlert": "Questo elemento è protetto da una password. Quando incorpori questo pad sarà richiesta la password ai visualizzatori.",
|
||||
"share_embedPasswordAlert": "Questo elemento è protetto da una password. Quando incorpori questo documento sarà richiesta la password ai visualizzatori.",
|
||||
"share_linkPasswordAlert": "Questo elemento è protetto da una password. Quando spedirai il link il destinatario dovrà inserire la password.",
|
||||
"share_linkWarning": "Questo link contiene la chiave per il tuo documento. I destinatari avranno un accesso non revocabile al tuo contenuto.",
|
||||
"teams_table_specificHint": "Queste cartelle sono state già condivise prima e i visualizzatori hanno ancora il permesso di modificare i pad esistenti. I pad creati o copiati in queste cartelle avranno permessi standard.",
|
||||
"teams_table_specificHint": "Queste cartelle sono state già condivise in precedenza e i visualizzatori hanno ancora il permesso di modificare i documenti esistenti. I documenti creati o copiati in queste cartelle avranno permessi standard.",
|
||||
"teams_table_generic_own": "Gestisci il Team: cambia il nome e l'avatar del team, aggiungi o rimuovi Proprietari, cambia iscrizione del team, cancella il team.",
|
||||
"teams_table_generic_edit": "Modifica: crea, modifica ed elimina cartelle e pad.",
|
||||
"teams_table_generic_view": "Vedi: accesso a cartelle e pad (solo lettura).",
|
||||
"driveOfflineError": "La tua connessione a CryptPad è stata persa. Le modifiche a questo pad non saranno salvate nel tuo CryptDrive. Chiudi tutte le tue schede CryptPad e riprova in una nuova finestra. ",
|
||||
"teams_table_generic_edit": "Modifica: crea, modifica ed elimina cartelle e documenti.",
|
||||
"teams_table_generic_view": "Vedi: accesso a cartelle e documenti (solo lettura).",
|
||||
"driveOfflineError": "La tua connessione a CryptPad è stata persa. Le modifiche a questo documento non saranno salvate nel tuo CryptDrive. Chiudi tutte le tue schede CryptPad e riprova in una nuova finestra. ",
|
||||
"properties_confirmNewFile": "Sei sicuro? Aggiungere una password cambierà l'URL di questo file. Gli utenti senza password perderanno l'accesso al file.",
|
||||
"properties_confirmChangeFile": "Sei sicuro? Gli utenti senza la nuova password perderanno l'accesso al file.",
|
||||
"drive_sfPassword": "La tua cartella condivisa {0} non è più disponibile. È stata cancellata dal suo proprietario oppure è ora protetta da una nuova password. Puoi rimuovere questa cartella dal tuo CryptDrive o recuperare l'accesso usando la nuova password.",
|
||||
|
@ -833,18 +836,18 @@
|
|||
"team_inviteGetData": "Ricezione di dati del team",
|
||||
"team_inviteTitle": "Invito al team",
|
||||
"burnAfterReading_linkBurnAfterReading": "Vedere una sola volta e autodistruggere",
|
||||
"oo_sheetMigration_loading": "Aggiornamento del tuo foglio di calcolo all'ultima versione",
|
||||
"oo_sheetMigration_loading": "Aggiornamento del tuo documento all'ultima versione. Per favore, aspetta un minuto.",
|
||||
"settings_cat_security": "Riservatezza",
|
||||
"imprint": "Nota legale",
|
||||
"support_disabledHint": "Questa istanza di CryptPad non è ancora configurata per utilizzare un modulo di supporto.",
|
||||
"sharedFolders_share": "Condividi questo link con altri utenti registrati per dare loro accesso alla cartella condivisa. Una volta che aprono questo link, la cartella condivisa sarà aggiunta al loro CryptDrive.",
|
||||
"autostore_notAvailable": "Devi archiviare questo pad nel tuo CryptDrive prima di poter utilizzare questa funzionalità.",
|
||||
"autostore_notAvailable": "Devi archiviare questo documento nel tuo CryptDrive prima di poter utilizzare questa funzionalità.",
|
||||
"admin_registeredHint": "Numero di utenti registrati nella tua istanza",
|
||||
"admin_updateLimitDone": "Aggiornamento completato con successo",
|
||||
"requestEdit_button": "Richiedi i diritti di modifica",
|
||||
"requestEdit_accepted": "{1} ti ha concesso i diritti di modifica per il pad <b>{0}</b>",
|
||||
"sharedFolders_duplicate": "Alcuni dei pad che stai tentando di spostare sono già condivisi nella cartella di destinazione.",
|
||||
"crowdfunding_button2": "Aiuta CryptPad",
|
||||
"requestEdit_accepted": "{1} ti ha concesso i diritti di modifica per il documento <b>{0}</b>",
|
||||
"sharedFolders_duplicate": "Alcuni dei documenti che stai tentando di spostare sono già condivisi nella cartella di destinazione.",
|
||||
"crowdfunding_button2": "Dona",
|
||||
"markdown_toc": "Contenuti",
|
||||
"fm_expirablePad": "Scade: {0}",
|
||||
"admin_authError": "Solo gli amministratori possono accedere a questa pagina",
|
||||
|
@ -859,11 +862,11 @@
|
|||
"team_cat_drive": "Drive",
|
||||
"team_declineInvitation": "{0} ha rifiutato la tua offerta di raggiungere il team: <b>{1}</b>",
|
||||
"team_invitedToTeam": "{0} ti ha invitato a raggiungere il suo team: <b>{1}</b>",
|
||||
"team_pcsSelectHelp": "Creare un pad di proprietà nel drive del tuo team lo rende proprietario del pad.",
|
||||
"team_pcsSelectHelp": "Creare un documento di proprietà nel drive del tuo team lo rende proprietario.",
|
||||
"team_pickFriends": "Scegli i contatti da invitare a questo team",
|
||||
"owner_removed": "{0} ha rimosso la tua proprietà di <b>{1}</b>",
|
||||
"owner_request_declined": "{0} ha rifiutato la tua offerta di diventare proprietario di <b>{1}</b>",
|
||||
"owner_add": "{0} vuole che tu sia proprietario del pad <b>{1}</b> Vuoi accettare?",
|
||||
"owner_add": "{0} vuole che tu sia proprietario del documento <b>{1}</b> Vuoi accettare?",
|
||||
"owner_request_accepted": "{0} ha accettato la tua offerta di diventare proprietario di <b>{1}</b>",
|
||||
"share_linkTeam": "Aggiungi al drive del team",
|
||||
"owner_removedPending": "{0} ha cancellato la tua offerta di proprietà per <b>{1}</b>",
|
||||
|
@ -872,10 +875,10 @@
|
|||
"team_infoLabel": "Info team",
|
||||
"team_rosterKick": "Espelli dal team",
|
||||
"team_rosterPromote": "Promuovi",
|
||||
"team_inviteButton": "Invita contatti",
|
||||
"team_inviteButton": "Invita membri",
|
||||
"owner_request": "{0} vuole che tu sia proprietario di <b>{1}</b>",
|
||||
"team_cat_general": "Info",
|
||||
"properties_passwordWarning": "La password è stata cambiata ma non siamo in grado di aggiornare il tuo CryptDrive con i nuovi dati. Devi rimuovere i vecchi pad manualmente.<br>Premi OK per ricaricare ed aggiornare i tuoi diritti di accesso.",
|
||||
"properties_passwordWarning": "La password è stata cambiata, ma non siamo in grado di aggiornare il tuo CryptDrive con i nuovi dati. Devi rimuovere i vecchi documenti manualmente.<br>Premi OK per ricaricare e aggiornare i tuoi diritti di accesso.",
|
||||
"share_embedCategory": "Incorporamento",
|
||||
"chrome68": "Sembra che tu stia usando il browser Chrome o Chromium versione 68. Contiene un bug che si manifesta nella pagina che diventa completamente bianca dopo alcuni secondi o smette di rispondere ai clic. Per risolvere il problema puoi passare ad un'altra scheda e tornare a questa, o provare a scorrere la pagina. Questo problema sarà risolto nella prossima versione del tuo browser.",
|
||||
"crowdfunding_popup_text": "<h3>Abbiamo bisogno del tuo aiuto!</h3>Per garantire che CryptPad sia attivamente sviluppato, valuta se aiutare il progetto sulla pagina OpenCollective, dove potrai vedere la nostra <b>Roadmap</b> e gli <b>obiettivi di finanziamento</b>.",
|
||||
|
@ -889,7 +892,7 @@
|
|||
"admin_supportInitPrivate": "La tua installazione CryptPad è configurata per usare una mailbox di supporto ma il tuo account non ha la chiave privata corretta per accedervi. Usa il modulo che segue per aggiungere o aggiornare la chiave privata del tuo account.",
|
||||
"admin_supportInitHint": "Puoi configurare una mailbox di supporto per dare agli utenti del tuo CryptPad un modo per contattarti in maniera sicura se hanno problemi con i loro account.",
|
||||
"admin_supportListHint": "Questa è la lista dei ticket inviati dagli utenti alla mailbox di supporto. Tutti gli amministratori possono vedere i messaggi e le risposte. Un ticket chiuso non può essere riaperto. Puoi solo rimuovere (nascondere) i ticket chiusi, ma i ticket rimossi rimangono visibili agli altri amministratori.",
|
||||
"requestEdit_confirm": "{1} ha richiesto la possibilità di modificare il pad <b>{0}</b>. Vuoi fornirgli l'accesso?",
|
||||
"requestEdit_confirm": "{1} ha richiesto la possibilità di modificare il documento <b>{0}</b>. Vuoi fornirgli l'accesso?",
|
||||
"owner_removeConfirm": "Sei sicuro di voler rimuovere la proprietà agli utenti selezionati? A loro sarà notificata questa azione.",
|
||||
"owner_removeMeConfirm": "Stai per abbandonare i tuoi diritti di proprietà. Non sarai in grado di annullare questa azione. Sei sicuro?",
|
||||
"owner_addConfirm": "I comproprietari saranno in grado di cambiare il contenuto e rimuoverti come proprietario. Sei sicuro?",
|
||||
|
@ -902,7 +905,7 @@
|
|||
"admin_updateLimitTitle": "Aggiorna lo spazio utente",
|
||||
"admin_updateLimitButton": "Aggiorna lo spazio",
|
||||
"admin_flushCacheDone": "La cache è stata svuotata con successo",
|
||||
"contact_adminHint": "Per qualsiasi questione legata al tuo account, limite di memoria, o disponibilità dei loro servizi.",
|
||||
"contact_adminHint": "Per qualsiasi questione legata al tuo account, limite di memoria, o disponibilità dei servizi.\n",
|
||||
"contact_bug": "Report errori",
|
||||
"admin_diskUsageButton": "Genera il report",
|
||||
"admin_supportInitTitle": "Inizializzazione della mailbox di supporto",
|
||||
|
@ -914,14 +917,13 @@
|
|||
"cba_show": "Mostra i colori degli autori",
|
||||
"cba_disable": "Pulisci e disabilita",
|
||||
"cba_enable": "Abilita",
|
||||
"cba_hint": "Questa impostazione sarà ricordata la prossima volta che crei un pad.",
|
||||
"cba_hint": "Questa impostazione sarà ricordata la prossima volta che crei un documento.",
|
||||
"cba_properties": "Colori degli autori (sperimentale)",
|
||||
"cba_writtenBy": "Scritto da: {0}",
|
||||
"pad_mediatagOpen": "Apri file",
|
||||
"mediatag_saveButton": "Salva",
|
||||
"download_zip_file": "File {0}/{1}",
|
||||
"allowNotifications": "Permetti notifiche",
|
||||
"admin_archiveInval": "Documento non valido",
|
||||
"admin_archiveInput": "URL del documento",
|
||||
"tag_edit": "Modifica",
|
||||
"tag_add": "Aggiungi",
|
||||
|
@ -953,5 +955,134 @@
|
|||
"comments_error": "Impossibile aggiungere un commento qui",
|
||||
"comments_reply": "Rispondi",
|
||||
"comments_submit": "Invia",
|
||||
"comments_deleted": "Commento eliminato dal suo autore"
|
||||
"comments_deleted": "Commento eliminato dal suo autore",
|
||||
"fm_noResult": "Nessun risultato trovato",
|
||||
"fm_restricted": "Non hai accesso",
|
||||
"fm_emptyTrashOwned": "Il cestino contiene documenti che possiedi. Puoi <b>rimuoverli</b> solo dal tuo disco o <b>distruggerli</b> per tutti gli utenti.",
|
||||
"oo_refresh": "Aggiorna",
|
||||
"notification_folderSharedTeam": "{0} ha condiviso una cartella con il team {2}: <b>{1}</b>",
|
||||
"notification_fileSharedTeam": "{0} ha condiviso un file con il team {2}: <b>{1}</b>",
|
||||
"notification_padSharedTeam": "{0} ha condiviso un documento con il team {2}: <b>{1}</b>",
|
||||
"support_cat_all": "Tutto",
|
||||
"support_cat_bug": "Report di bug",
|
||||
"support_cat_data": "Perdita di contenuto",
|
||||
"info_privacyFlavour": "<a>Privacy Policy</a> per questa istanza",
|
||||
"info_imprintFlavour": "<a>Informazioni legali</a> sugli amministratori di questa istanza",
|
||||
"settings_safeLinkDefault": "I collegamenti sicuri ora sono attivati per impostazione predefinita. Utilizza il menu <i></i> <b>Condividi</b> per copiare i link anziché la barra degli indirizzi del browser.",
|
||||
"code_editorTheme": "Tema dell'editor",
|
||||
"todo_move": "La tua lista todo è ora nel kanban <b>{0}</b> nel tuo Drive.",
|
||||
"settings_padNotifCheckbox": "Disabilita le notifiche per i commenti",
|
||||
"settings_padNotifHint": "Ignora le notifiche quando qualcuno risponde a uno dei tuoi commenti",
|
||||
"settings_padNotifTitle": "Notifiche dei commenti",
|
||||
"comments_comment": "Commenta",
|
||||
"comments_resolve": "Risolvi",
|
||||
"comments_edited": "Modificato",
|
||||
"mentions_notification": "{0} ti ha menzionato in <b>{1}</b>",
|
||||
"unknownPad": "Documento sconosciuto",
|
||||
"comments_notification": "Risposte al tuo commento \"{0}\" in <b>{1}</b>",
|
||||
"settings_padOpenLinkLabel": "Abilita l'apertura diretta del collegamento",
|
||||
"settings_padOpenLinkHint": "Con questa opzione, puoi aprire i collegamenti incorporati con un clic senza il popup di anteprima",
|
||||
"settings_padOpenLinkTitle": "Apri i link al primo clic",
|
||||
"settings_cacheButton": "Svuota la cache esistente",
|
||||
"settings_cacheCheckbox": "Abilita la cache su questo dispositivo",
|
||||
"settings_cacheHint": "CryptPad memorizza parti dei tuoi documenti nella memoria del browser per risparmiare l'utilizzo della rete e migliorare i tempi di caricamento. Puoi disabilitare la cache se il tuo dispositivo non ha molto spazio di archiviazione libero. Per motivi di sicurezza, la cache viene sempre svuotata quando ci si disconnette, ma è possibile cancellarla manualmente se si desidera recuperare spazio di archiviazione sulla macchina.",
|
||||
"settings_cacheTitle": "Cache",
|
||||
"docs_link": "Documentazione",
|
||||
"creation_helperText": "Apri nella documentazione",
|
||||
"creation_expiresIn": "Scade tra",
|
||||
"register_warning_note": "A causa della natura crittografata di CryptPad, gli amministratori del servizio non saranno in grado di recuperare i dati nel caso in cui dimentichi il tuo nome utente e/o password. Si prega di salvarli in un luogo sicuro.",
|
||||
"register_notes": "<ul class=\"cp-notes-list\"><li>La tua password è la chiave segreta che crittografa tutti i tuoi documenti. <span class=\"red\">Se la perdi, non potremo recuperare i tuoi dati.</span></li><li>Se stai utilizzando un computer condiviso, <span class=\"red\">ricorda di disconnetterti</span> quando hai finito. Se chiudi solo la finestra del browser lascerai il tuo account esposto. </li><li>Per conservare i documenti che hai creato e/o archiviato senza account, seleziona \"Importa documenti dalla tua sessione ospite\". </li></ul>",
|
||||
"register_notes_title": "Note importanti",
|
||||
"offlineError": "Impossibile sincronizzare i dati più recenti, questa pagina non può essere visualizzata in questo momento. Il caricamento continuerà quando verrà ripristinata la connessione al servizio.",
|
||||
"share_noContactsOffline": "Attualmente sei offline. I contatti non sono disponibili.",
|
||||
"access_offline": "Attualmente sei offline. La gestione degli accessi non è disponibile.",
|
||||
"admin_support_last": "Aggiornato il: ",
|
||||
"admin_support_first": "Creato il: ",
|
||||
"admin_support_collapse": "Riduci",
|
||||
"admin_support_open": "Mostra",
|
||||
"admin_support_closed": "Ticket chiusi:",
|
||||
"admin_support_answered": "Ticket con risposta:",
|
||||
"admin_support_normal": "Ticket senza risposta:",
|
||||
"admin_support_premium": "Ticket premium:",
|
||||
"contacts_confirmCancel": "Sei sicuro di voler annullare la tua richiesta di contatto con <b>{0}</b>?",
|
||||
"history_trimPrompt": "Questo documento ha accumulato {0} di cronologia che potrebbe rallentare il tempo di caricamento. Prendi in considerazione l'eliminazione della cronologia se non è necessaria.",
|
||||
"mediatag_loadButton": "Carica allegato",
|
||||
"settings_mediatagSizeHint": "Dimensione massima in megabyte (MB) per il caricamento automatico di elementi multimediali (immagini, video, pdf) incorporati nei documenti. Gli elementi più grandi della dimensione specificata possono essere caricati manualmente. Utilizzare \"-1\" per caricare sempre automaticamente gli elementi multimediali.",
|
||||
"settings_mediatagSizeTitle": "Limite di download automatico",
|
||||
"mediatag_notReady": "Si prega di completare il download",
|
||||
"pad_mediatagShare": "Condividi file",
|
||||
"Offline": "Disconnesso",
|
||||
"download_zip": "Creazione del file ZIP…",
|
||||
"fileTableHeader": "Download e caricamenti",
|
||||
"archivedFromServer": "Documento archiviato",
|
||||
"restoredFromServer": "Documento ripristinato",
|
||||
"admin_archiveInput2": "Password del documento",
|
||||
"admin_unarchiveButton": "Ripristina",
|
||||
"admin_unarchiveHint": "Ripristina un documento che era stato precedentemente archiviato",
|
||||
"admin_archiveButton": "Archivio",
|
||||
"admin_archiveHint": "Rendi un documento non disponibile senza eliminarlo definitivamente. Verrà inserito in una cartella 'archivio' e cancellato dopo alcuni giorni (configurabile nel file di configurazione del server).",
|
||||
"errorPopupBlocked": "CryptPad deve essere in grado di aprire nuove schede per funzionare. Si prega di consentire le finestre popup nella barra degli indirizzi del browser. Queste finestre non verranno mai utilizzate per mostrarti pubblicità.",
|
||||
"unableToDisplay": "Impossibile visualizzare il documento. Premi Esc per ricaricare la pagina. Se il problema persiste, contatta l'assistenza.",
|
||||
"documentID": "Identificatore del documento",
|
||||
"error_unhelpfulScriptError": "Errore di script: vedi la console del browser per i dettagli",
|
||||
"loading_state_5": "Ricostruisci documento",
|
||||
"loading_state_4": "Carica Teams",
|
||||
"loading_state_3": "Carica cartelle condivise",
|
||||
"loading_state_2": "Aggiorna contenuto",
|
||||
"loading_state_1": "Carica drive",
|
||||
"loading_state_0": "Crea interfaccia",
|
||||
"fm_shareFolderPassword": "Proteggi questa cartella con una password (facoltativo)",
|
||||
"access_destroyPad": "Distruggi questo documento o cartella in modo permanente",
|
||||
"fm_deletedFolder": "Cartella eliminata",
|
||||
"team_exportButton": "Scarica",
|
||||
"team_exportHint": "Scarica tutti i documenti nel drive di questo team. I documenti verranno scaricati in formati leggibili da altre applicazioni se sarà possibile. Quando non sarà possibile, i documenti verranno scaricati in un formato leggibile da CryptPad.",
|
||||
"team_exportTitle": "Scarica il drive del team",
|
||||
"admin_cat_quota": "Spazio di archiviazione per utente",
|
||||
"admin_invalLimit": "Valore limite non valido",
|
||||
"admin_setlimitTitle": "Applica un limite personalizzato",
|
||||
"admin_setlimitHint": "Imposta limiti personalizzati per gli utenti utilizzando la loro chiave pubblica. Puoi aggiornare o rimuovere un limite esistente.",
|
||||
"admin_limitNote": "Note: {0}",
|
||||
"admin_limitPlan": "Piano: {0}",
|
||||
"admin_getlimitsTitle": "Limiti personalizzati",
|
||||
"admin_getlimitsHint": "Elenca tutti i limiti di archiviazione personalizzati applicati alla tua istanza.",
|
||||
"admin_limit": "Limite attuale: {0}",
|
||||
"admin_setlimitButton": "Imposta limite",
|
||||
"admin_defaultlimitTitle": "Limite di archiviazione (MB)",
|
||||
"admin_defaultlimitHint": "Limite massimo di archiviazione per i CryptDrive (utenti e team) quando non viene applicata alcuna regola personalizzata",
|
||||
"admin_registrationTitle": "Chiudi la registrazione",
|
||||
"admin_registrationHint": "Non consentire a nuovi utenti di registrarsi",
|
||||
"snapshots_cantMake": "Impossibile creare lo snapshot. Sei disconnesso.",
|
||||
"snapshots_notFound": "Questa istantanea non esiste più perché la cronologia del documento è stata eliminata.",
|
||||
"snapshot_error_exists": "C'è già un'istantanea di questa versione",
|
||||
"snapshots_ooPickVersion": "È necessario selezionare una versione prima di creare uno snapshot",
|
||||
"oo_version_latest": "Più recente",
|
||||
"oo_deletedVersion": "Questa versione non esiste più nella cronologia.",
|
||||
"snapshots_restore": "Ripristina",
|
||||
"snapshots_placeholder": "Titolo dell'istantanea",
|
||||
"snapshots_new": "Nuova istantanea",
|
||||
"snapshots_button": "Istantanee",
|
||||
"snaphot_title": "Istantanea",
|
||||
"infobar_versionHash": "Stai visualizzando una versione precedente di questo documento ({0}).",
|
||||
"history_restoreDriveDone": "CryptDrive ripristinato",
|
||||
"history_restoreDrivePrompt": "Sei sicuro di voler sostituire la versione corrente di CryptDrive con la versione visualizzata?",
|
||||
"history_restoreDriveTitle": "Ripristina la versione selezionata di CryptDrive",
|
||||
"history_userNext": "Prossimo autore",
|
||||
"history_fastNext": "Prossima sessione di modifica",
|
||||
"history_userPrev": "Autore precedente",
|
||||
"history_fastPrev": "Sessione di modifica precedente",
|
||||
"share_versionHash": "Stai per condividere la versione selezionata del documento in modalità di sola lettura. Ciò consentirà inoltre di <b>accedere alla visualizzazione</b> di tutte le versioni del documento.",
|
||||
"history_shareTitle": "Condividi un link a questa versione",
|
||||
"history_cantRestore": "Ripristino fallito. Sei disconnesso.",
|
||||
"history_close": "Chiudi",
|
||||
"history_restore": "Ripristina",
|
||||
"share_bar": "Crea collegamento",
|
||||
"settings_cat_kanban": "Kanban",
|
||||
"settings_kanbanTagsOr": "O",
|
||||
"settings_kanbanTagsAnd": "E",
|
||||
"settings_kanbanTagsHint": "Seleziona come vuoi che agisca il filtro dei tag quando selezioni più tag: mostra solo le schede contenenti tutti i tag selezionati (E) o mostra le schede contenenti uno qualsiasi dei tag selezionati (O)",
|
||||
"settings_kanbanTagsTitle": "Filtro tag",
|
||||
"ui_restore": "Ripristina",
|
||||
"ui_archive": "Archivio",
|
||||
"ui_undefined": "sconosciuto",
|
||||
"admin_documentType": "Tipo"
|
||||
}
|
||||
|
|
|
@ -400,7 +400,7 @@
|
|||
"settings_disableThumbnailsAction": "CryptDriveでのサムネイルの作成を無効にする",
|
||||
"settings_resetError": "入力した確認文が正しくありません。CryptDriveのデータは消去されていません。",
|
||||
"settings_resetDone": "データが消去されました!",
|
||||
"settings_resetPrompt": "あなたのドライブからのドキュメントを削除します。<br>本当に続けてよろしいですか?<br>続けるには「I love CryptPad」と入力してください。",
|
||||
"settings_resetPrompt": "あなたのドライブからのドキュメントを削除します。<br>本当に続けてよろしいですか?<br>続けるには「<em>I love CryptPad</em>」と入力してください。",
|
||||
"settings_reset": "CryptDriveの全てのファイルとフォルダを削除",
|
||||
"settings_exportErrorOther": "ドキュメントのエクスポート中にエラーが発生しました: {0}",
|
||||
"drive_activeOld": "以前のドキュメント",
|
||||
|
@ -461,11 +461,8 @@
|
|||
"allowNotifications": "通知を許可",
|
||||
"archivedFromServer": "ドキュメントがアーカイブされました",
|
||||
"restoredFromServer": "ドキュメントが復元されました",
|
||||
"admin_archiveInval": "無効なドキュメント",
|
||||
"admin_archiveInput2": "ドキュメントのパスワード",
|
||||
"admin_archiveInput": "ドキュメントのURL",
|
||||
"admin_unarchiveTitle": "ドキュメントを復元",
|
||||
"admin_archiveTitle": "ドキュメントをアーカイブ",
|
||||
"fm_deletedFolder": "削除されたフォルダ",
|
||||
"history_restoreDriveDone": "CryptDriveが復元されました",
|
||||
"share_bar": "リンクを作成",
|
||||
|
@ -733,18 +730,18 @@
|
|||
"realtime_unrecoverableError": "回復不能なエラーが発生しました。OKをクリックして再読み込みを行ってください。",
|
||||
"disabledApp": "このアプリケーションは無効になっています。詳細については、このCryptPadの管理者にお問い合わせください。",
|
||||
"deletedFromServer": "ドキュメントが破棄されました",
|
||||
"newVersionError": "新しいバージョンのCryptPadがあります。<br><a href='#'>リロードする</a>と新しいバージョンを読み込みます。<em>Esc</em>キーを押すと<b>オフラインモード</b>でコンテンツにアクセスします。",
|
||||
"errorRedirectToHome": "<em>Esc</em>キーを押すとCryptDriveにリダイレクトします。",
|
||||
"errorCopy": " <em>Esc</em>キーを押すと、閲覧モードで引き続きコンテンツにアクセスできます。",
|
||||
"newVersionError": "新しいバージョンのCryptPadがあります。<br><a href='#'>リロードする</a>と新しいバージョンを読み込みます。Escキーを押すと<b>オフラインモード</b>でコンテンツにアクセスします。",
|
||||
"errorRedirectToHome": "Escキーを押すとCryptDriveにリダイレクトします。",
|
||||
"errorCopy": " Escキーを押すと、閲覧モードで引き続きコンテンツにアクセスできます。",
|
||||
"invalidHashError": "要求したドキュメントのURLが無効です。",
|
||||
"chainpadError": "コンテンツを更新する際に重大なエラーが発生しました。コンテンツが失われないよう、閲覧モードで表示されています。<br>このドキュメントの表示を続けるには<em>Esc</em>キーを押し、再度編集を試みるにはリロードをしてください。",
|
||||
"chainpadError": "コンテンツを更新する際に重大なエラーが発生しました。コンテンツが失われないよう、閲覧モードで表示されています。<br>このドキュメントの表示を続けるにはEscキーを押し、再度編集を試みるにはリロードをしてください。",
|
||||
"inactiveError": "このドキュメントは利用されていなかったため削除されました。Escキーを押すと新しいパドキュメントを作成します。",
|
||||
"deletedError": "このドキュメントは削除されたため、利用できなくなりました。",
|
||||
"expiredError": "このドキュメントは利用期限を過ぎてしまったため、利用できなくなりました。",
|
||||
"anonymousStoreDisabled": "このCryptPadのインスタンスの管理者は、ゲストによる保存を無効に設定しています。あなたのCryptDriveにアクセスするにはログインが必要です。",
|
||||
"padNotPinnedVariable": "このドキュメントは{4}日間利用しないと有効期限が切れます。{0}ログイン{1}するか{2}登録{3}して保存してください。",
|
||||
"padNotPinned": "このドキュメントは3か月間利用しないと有効期限が切れます。{0}ログイン{1}するか{2}登録{3}して保存してください。",
|
||||
"onLogout": "ログアウトしました。{0}ここをクリック{1}するか<br><em>Escape</em>キーを押すと、閲覧モードでドキュメントにアクセスできます。",
|
||||
"onLogout": "ログアウトしました。{0}ここをクリック{1}するか<br>Escキーを押すと、閲覧モードでドキュメントにアクセスできます。",
|
||||
"typeError": "このドキュメントは選択したアプリケーションと互換性がありません",
|
||||
"form_type_page": "ページ分割",
|
||||
"form_description_default": "ここにテキストを入力",
|
||||
|
@ -811,9 +808,7 @@
|
|||
"pad_settings_width_small": "ページモード",
|
||||
"pad_settings_info": "このドキュメントの既定の設定です。新しいユーザーがドキュメントを閲覧したときに適用されます。",
|
||||
"pad_settings_title": "ドキュメントの設定",
|
||||
"admin_getquotaTitle": "アカウントのストレージを確認",
|
||||
"settings_colorthemeTitle": "テーマ色",
|
||||
"admin_getquotaButton": "確認",
|
||||
"fm_cantUploadHere": "ここにはファイルをアップロードできません",
|
||||
"settings_resetTipsDone": "全てのヒントが表示されます。",
|
||||
"settings_resetTipsButton": "利用可能なCryptDriveのヒントをリセット",
|
||||
|
@ -979,7 +974,7 @@
|
|||
"useTemplateCancel": "新しく開始(Esc)",
|
||||
"fm_originalPath": "本来のパス",
|
||||
"contacts_online": "このルームの別のユーザーがオンラインです",
|
||||
"contacts_request": "<em>{0}</em>があなたを連絡先に追加しようとしています。<b>承諾しますか<b>?",
|
||||
"contacts_request": "<em>{0}</em>があなたを連絡先に追加しようとしています。<b>承諾しますか</b>?",
|
||||
"contacts_rejected": "連絡先の招待が拒否されました",
|
||||
"contacts_added": "連絡先の招待が承諾されました。",
|
||||
"profile_uploadTypeError": "エラー: あなたのアバターの種類は許可されていません。許可されている種類: {0}",
|
||||
|
@ -1010,7 +1005,7 @@
|
|||
"register_emailWarning0": "ユーザー名にメールアドレスが入力されています。",
|
||||
"fm_tags_used": "使用数",
|
||||
"fm_deletedPads": "これらのドキュメントはサーバーにありません。あなたのCryptDriveから削除されています: {0}",
|
||||
"fm_renamedPad": "このドキュメントにユーザー定義の名前を設定しました。共有のファイル名は「<b>{0}</b>」です",
|
||||
"fm_renamedPad": "このドキュメントにユーザー定義の名前を設定しました。<br>共有のファイル名は「<b>{0}</b>」です",
|
||||
"fm_ownedPadsName": "所有",
|
||||
"burnAfterReading_generateLink": "下のボタンをクリックするとリンクを生成します。",
|
||||
"fm_restricted": "アクセス権がありません",
|
||||
|
@ -1075,7 +1070,7 @@
|
|||
"contact_adminHint": "アカウントに関連した問題、ストレージの制限、サービスの運用状況に関して。\n",
|
||||
"contact_devHint": "機能のリクエスト、ユーザビリティの改善、もしくはお礼については、以下よりお願いします。",
|
||||
"contact_dev": "開発者に連絡",
|
||||
"contact_admin": "管理者に連絡",
|
||||
"contact_admin": "管理者に連絡。理由: {0}",
|
||||
"admin_flushCacheDone": "キャッシュを消去しました",
|
||||
"admin_flushCacheTitle": "HTTPキャッシュを消去",
|
||||
"admin_updateLimitDone": "アップデートが完了しました",
|
||||
|
@ -1164,7 +1159,7 @@
|
|||
"friendRequest_received": "<b>{0}</b>が連絡先への追加を希望しています",
|
||||
"friendRequest_declined": "<b>{0}</b>が連絡先のリクエストを拒否しました",
|
||||
"admin_diskUsageHint": "CryptPadのリソースが消費しているストレージ容量",
|
||||
"timeoutError": "エラーが発生してサーバーへの接続が切断されました。<br><em>Esc</em>キーを押してページを再読み込みしてください。",
|
||||
"timeoutError": "エラーが発生してサーバーへの接続が切断されました。<br>Escキーを押してページを再読み込みしてください。",
|
||||
"admin_updateLimitHint": "ユーザーのストレージ制限の強制アップデートはいつでも可能です。エラーが発生したときは必須となります",
|
||||
"admin_cat_general": "全般",
|
||||
"poll_bookmarked_col": "列をブックマークしました。常に編集可能な仕方で左端に表示されます。",
|
||||
|
@ -1269,7 +1264,6 @@
|
|||
"admin_registrationTitle": "登録を締め切る",
|
||||
"admin_defaultlimitHint": "ユーザー定義のルールが適用されていない際の最大のストレージ容量(ユーザーとチームについて)を設定できます",
|
||||
"admin_limit": "現在の制限: {0}",
|
||||
"admin_getquotaHint": "ユーザーもしくはチームの公開鍵を入力して、設定されているクォータに対するストレージの使用量を確認できます。",
|
||||
"admin_openFilesHint": "サーバー上で現在開いているファイル記述子の数",
|
||||
"admin_support_premium": "プレミアムチケット:",
|
||||
"admin_maintenanceHint": "このインスタンスのメンテナンスの日程を設定し、ユーザーに通知を送ることができます。メンテナンスの日程を複数設定することはできません。",
|
||||
|
@ -1424,7 +1418,7 @@
|
|||
"admin_enableDiskMeasurementsHint": "有効にすると、JSON APIのエンドポイントが<code>/api/profiling</code>にて公開されます。以下の時間設定にあわせて、ディスクのI/Oを継続的に計測します。この設定はサーバーのパフォーマンスに影響を与えるおそれがあり、また、機密情報が漏洩する可能性があります。この設定の意味を理解していない場合は、この設定を無効にしておくことを推奨します。",
|
||||
"admin_enableDiskMeasurementsTitle": "ディスクのパフォーマンスを計測",
|
||||
"admin_infoNotice2": "詳細は「ネットワーク」タブからご確認ください。",
|
||||
"admin_infoNotice1": "以下にインスタンスの説明文を記入してください。今後のCryptPadのバージョンで、インスタンスのフロントページに表示されます。CryptPadの公開インスタンスのリストに表示する場合にのみ、サーバーのテレメトリーの一部として送信されます。",
|
||||
"admin_infoNotice1": "以下にインスタンスの説明を記入してください。記入した情報はインスタンスのフロントページに表示されます。CryptPadの公開インスタンスのリストに表示する場合、サーバーのテレメトリーの一部としても送信されます。",
|
||||
"admin_reviewCheckupNotice": "<a>チェック</a>用のページを確認して、このインスタンスが正しく設定されていることをご確認ください。",
|
||||
"admin_cacheEvictionRequired": "サーバーは新しい設定でアップデートされました。<b>キャッシュの消去</b>ボタンを使用して、この変更を全てのユーザーに適用してください。",
|
||||
"fivehundred_internalServerError": "内部サーバーエラー",
|
||||
|
@ -1435,5 +1429,71 @@
|
|||
"login_instance": "{0}のアカウントと接続",
|
||||
"home_location": "暗号化されたデータは{0}に保存されています。",
|
||||
"footer_website": "プロジェクトのウェブサイト",
|
||||
"ui_experimental": "この機能は試験中です。"
|
||||
"ui_experimental": "この機能は試験中です。",
|
||||
"ui_restore": "復元",
|
||||
"ui_archive": "アーカイブ",
|
||||
"ui_undefined": "不明",
|
||||
"admin_documentType": "ドキュメントの種類",
|
||||
"admin_documentMetadataTitle": "ドキュメントの情報",
|
||||
"admin_documentMetadataHint": "IDもしくはURLでドキュメントあるいはファイルを検索",
|
||||
"admin_documentModifiedTime": "最新更新日時",
|
||||
"admin_accountMetadataPlaceholder": "ユーザーID(署名用の公開鍵)",
|
||||
"admin_storageUsage": "保存されたデータ",
|
||||
"admin_planName": "プラン名",
|
||||
"admin_currentlyOnline": "は現在オンラインです",
|
||||
"admin_channelCount": "ドキュメント数",
|
||||
"admin_fileCount": "ファイル数",
|
||||
"admin_archiveDocument": "ドキュメントをアーカイブ",
|
||||
"admin_restoreDocument": "ドキュメントを復元",
|
||||
"admin_planlimit": "ストレージの制限",
|
||||
"admin_documentMetadataPlaceholder": "ドキュメントのURLあるいはID",
|
||||
"admin_channelArchived": "アーカイブ済",
|
||||
"admin_channelAvailable": "利用可能",
|
||||
"admin_documentCreationTime": "作成",
|
||||
"admin_documentMetadata": "現在のメタデータ",
|
||||
"admin_documentSize": "ドキュメントのサイズ",
|
||||
"admin_accountMetadataTitle": "アカウントの情報",
|
||||
"ui_fetch": "取得",
|
||||
"ui_none": "無し",
|
||||
"ui_false": "偽",
|
||||
"ui_true": "真",
|
||||
"ui_confirm": "確認",
|
||||
"ui_success": "成功",
|
||||
"ui_generateReport": "レポートを生成",
|
||||
"admin_generatedAt": "レポートのタイムスタンプ",
|
||||
"admin_cat_database": "データベース",
|
||||
"admin_uptimeHint": "サーバーが起動した日時",
|
||||
"admin_uptimeTitle": "起動時間",
|
||||
"home_morestorage": "より多くのストレージ容量が必要な場合:",
|
||||
"admin_noticeTitle": "トップページでの通知",
|
||||
"admin_noticeHint": "トップページに表示するメッセージ(オプション)",
|
||||
"error_evalPermitted": "evalが許可されないため、中止します。\n\nこのエラーはContent-Security-Policyのヘッダーに関係しています。理由は、ヘッダーをサポートしない旧バージョンのブラウザー、適切な動作を防ぐブラウザーの拡張機能のため、もしくは、このCryptPadのインスタンスが適切に設定されていないことが考えられます。",
|
||||
"admin_pinLogAvailable": "ピンのログは利用可能です",
|
||||
"admin_pinLogArchived": "ピンのログはアーカイブされています",
|
||||
"admin_blockMetadataHint": "ログインブロックは、CryptPadにログインするためのユーザー名とパスワードの組み合わせのことです",
|
||||
"admin_blockMetadataTitle": "ログインブロックに関する情報",
|
||||
"admin_accountMetadataHint": "ユーザーの公開鍵を入力すると、ユーザーのアカウントに関するデータを取得できます。",
|
||||
"admin_reportContent": "内容を報告",
|
||||
"admin_getRawMetadata": "メタデータの履歴",
|
||||
"admin_restoreArchivedPins": "アーカイブ済のピンログを復元",
|
||||
"admin_archivePinLog": "このアカウントのピンログをアーカイブ",
|
||||
"admin_getPinList": "現在のピンリスト",
|
||||
"admin_note": "プランのメモ",
|
||||
"og_encryptedAppType": "暗号化された {0}",
|
||||
"og_features": "{0} 機能",
|
||||
"og_pricing": "{0} 料金",
|
||||
"og_contact": "{0} 連絡先",
|
||||
"ui_jsRequired": "ブラウザーで暗号化を行うにはJavaScriptが有効になっている必要があります",
|
||||
"og_register": "{0}でアカウントを登録",
|
||||
"og_login": "{0}にログイン",
|
||||
"og_default": "CryptPad:エンドツーエンド暗号化コラボレーションスイート",
|
||||
"og_teamDrive": "チームドライブ",
|
||||
"admin_restoreBlock": "アーカイブ済のブロックを復元",
|
||||
"admin_archiveBlock": "ブロックをアーカイブ",
|
||||
"admin_blockArchived": "ブロックはアーカイブされています",
|
||||
"admin_blockAvailable": "ブロックは利用可能です",
|
||||
"admin_blockKey": "ブロックの公開鍵",
|
||||
"admin_blockMetadataPlaceholder": "ブロックの絶対または相対URL",
|
||||
"admin_restoreReason": "復元の理由を指定し、確認して続行してください",
|
||||
"admin_archiveReason": "アーカイブの理由を指定し、確認して続行してください"
|
||||
}
|
||||
|
|
|
@ -20,17 +20,17 @@
|
|||
},
|
||||
"common_connectionLost": "<b>Server Connection Lost</b><br>You're now in read-only mode until the connection is back.",
|
||||
"typeError": "This document is not compatible with the selected application",
|
||||
"onLogout": "You are logged out, {0}click here{1} to log in<br>or press <em>Escape</em> to access your document in read-only mode.",
|
||||
"onLogout": "You are logged out, {0}click here{1} to log in<br>or press Esc to access your document in read-only mode.",
|
||||
"padNotPinned": "This document will expire after 3 months of inactivity, {0}login{1} or {2}register{3} to preserve it.",
|
||||
"padNotPinnedVariable": "This document will expire after {4} days of inactivity, {0}login{1} or {2}register{3} to preserve it.",
|
||||
"anonymousStoreDisabled": "The administrator of this CryptPad instance has disabled storage for guests. Log in to access your own CryptDrive.",
|
||||
"expiredError": "This document has reached its expiration time and is no longer available.",
|
||||
"deletedError": "This document has been deleted and is no longer available.",
|
||||
"inactiveError": "This document has been deleted due to inactivity. Press Esc to create a new document.",
|
||||
"chainpadError": "A critical error occurred when updating your content. This page is in read-only mode to make sure you won't lose your work.<br>Hit <em>Esc</em> to continue to view this document, or reload to try editing again.",
|
||||
"chainpadError": "A critical error occurred when updating your content. This page is in read-only mode to make sure you won't lose your work.<br>Hit Esc to continue to view this document, or reload to try editing again.",
|
||||
"invalidHashError": "The document you've requested has an invalid URL.",
|
||||
"errorCopy": " You can still use the current version in read-only mode by pressing <em>Esc</em>.",
|
||||
"errorRedirectToHome": "Press <em>Esc</em> to be redirected to your CryptDrive.",
|
||||
"errorCopy": " You can still use the current version in read-only mode by pressing Esc.",
|
||||
"errorRedirectToHome": "Press Esc to be redirected to your CryptDrive.",
|
||||
"newVersionError": "A new version of CryptPad is available.<br><a href='#'>Reload</a> to use the new version, or press escape to access your content in <b>offline mode</b>.",
|
||||
"loading": "Loading...",
|
||||
"error": "Error",
|
||||
|
@ -220,7 +220,7 @@
|
|||
"contacts_title": "Contacts",
|
||||
"contacts_added": "Contact invite accepted.",
|
||||
"contacts_rejected": "Contact invite rejected",
|
||||
"contacts_request": "<em>{0}</em> would like to add you as a contact. <b>Accept<b>?",
|
||||
"contacts_request": "<em>{0}</em> would like to add you as a contact. <b>Accept</b>?",
|
||||
"contacts_send": "Send",
|
||||
"contacts_remove": "Remove this contact",
|
||||
"contacts_confirmRemove": "Are you sure you want to remove <em>{0}</em> from your contacts?",
|
||||
|
@ -645,7 +645,7 @@
|
|||
"contact_bug": "Bug report",
|
||||
"contact_chat": "Chat",
|
||||
"contact_email": "Email",
|
||||
"timeoutError": "An error has broken your connection to the server. <br>Hit <em>Esc</em> to reload the page.",
|
||||
"timeoutError": "An error has broken your connection to the server. <br>Hit Esc to reload the page.",
|
||||
"admin_diskUsageTitle": "Disk usage",
|
||||
"admin_diskUsageHint": "Amount of storage space consumed by various CryptPad resources",
|
||||
"admin_diskUsageButton": "Generate report",
|
||||
|
@ -1039,15 +1039,12 @@
|
|||
"documentID": "Document identifier",
|
||||
"unableToDisplay": "Unable to display the document. Please press Esc to reload the page. If the problem persists, please contact support.",
|
||||
"errorPopupBlocked": "CryptPad needs to be able to open new tabs to operate. Please allow popup windows in your browser's address bar. These windows will never be used to show you advertising.",
|
||||
"admin_archiveTitle": "Archive documents",
|
||||
"admin_archiveHint": "Make a document unavailable without deleting it permanently. It will be placed in an 'archive' directory and deleted after a few days (configurable in the server configuration file).",
|
||||
"admin_archiveButton": "Archive",
|
||||
"admin_unarchiveTitle": "Restore documents",
|
||||
"admin_unarchiveHint": "Restore a document that had previously been archived",
|
||||
"admin_unarchiveButton": "Restore",
|
||||
"admin_archiveInput": "Document URL",
|
||||
"admin_archiveInput2": "Document password",
|
||||
"admin_archiveInval": "Invalid document",
|
||||
"restoredFromServer": "Document restored",
|
||||
"archivedFromServer": "Document archived",
|
||||
"allowNotifications": "Allow notifications",
|
||||
|
@ -1099,9 +1096,6 @@
|
|||
"settings_colortheme_default": "System default ({0})",
|
||||
"settings_colorthemeHint": "Change the overall colors of CryptPad on this device.",
|
||||
"settings_colorthemeTitle": "Color theme",
|
||||
"admin_getquotaTitle": "Check account storage",
|
||||
"admin_getquotaHint": "Check the total size of items counted against a user or team's quota given their public key.",
|
||||
"admin_getquotaButton": "Check",
|
||||
"pad_settings_title": "Document Settings",
|
||||
"pad_settings_info": "Default settings for this document. These will be applied when new users visit this document.",
|
||||
"pad_settings_width_small": "Page mode",
|
||||
|
@ -1418,7 +1412,7 @@
|
|||
"fivehundred_internalServerError": "Internal server error",
|
||||
"admin_cacheEvictionRequired": "The server has been updated with the new setting. Please use the <b>Flush Cache</b> button to ensure this change becomes visible to all users.",
|
||||
"admin_reviewCheckupNotice": "It is recommended to review the <a>checkup</a> page to confirm that this instance is configured correctly.",
|
||||
"admin_infoNotice1": "Use the following fields to describe your instance. This information will be used on the instance front page in a future version of CryptPad. It is sent as part of the server telemetry only if you opt in to be included in the list of public CryptPad instances.",
|
||||
"admin_infoNotice1": "Use the following fields to describe your instance. This information is used on the instance front page. It is also sent as part of the server telemetry if you opt in to be included in the list of public CryptPad instances.",
|
||||
"admin_infoNotice2": "See the 'Network' tab for more details.",
|
||||
"admin_enableDiskMeasurementsTitle": "Measure disk performance",
|
||||
"admin_enableDiskMeasurementsHint": "If enabled, a JSON API endpoint will be exposed under <code>/api/profiling</code>. This keeps a running measurement of disk I/O within the time window set below. This setting can impact server performance and may reveal sensitive data. It is recommended that you leave this setting disabled unless you know what you are doing.",
|
||||
|
@ -1439,5 +1433,72 @@
|
|||
"home_location": "Encrypted data is hosted in {0}",
|
||||
"home_morestorage": "For more storage space:",
|
||||
"login_instance": "Connect to your account on {0}",
|
||||
"register_instance": "Creating a new account on {0}"
|
||||
"register_instance": "Creating a new account on {0}",
|
||||
"admin_uptimeTitle": "Launch time",
|
||||
"admin_uptimeHint": "Date and time at which the server was launched",
|
||||
"admin_cat_database": "Database",
|
||||
"admin_generatedAt": "Report timestamp",
|
||||
"ui_true": "true",
|
||||
"ui_false": "false",
|
||||
"ui_undefined": "unknown",
|
||||
"ui_none": "none",
|
||||
"ui_generateReport": "Generate report",
|
||||
"ui_success": "Success",
|
||||
"ui_restore": "Restore",
|
||||
"ui_fetch": "Fetch",
|
||||
"ui_confirm": "Confirm",
|
||||
"ui_archive": "Archive",
|
||||
"admin_archiveReason": "Please specify the reason for archival and confirm that you would like to proceed",
|
||||
"admin_restoreReason": "Please specify the reason for restoration and confirm that you would like to proceed",
|
||||
"admin_accountMetadataTitle": "Account information",
|
||||
"admin_accountMetadataHint": "Enter a user's public key to fetch data about their account.",
|
||||
"admin_documentMetadataTitle": "Document information",
|
||||
"admin_documentMetadataHint": "Query a document or file via its id or URL",
|
||||
"admin_documentType": "Document type",
|
||||
"admin_documentSize": "Document size",
|
||||
"admin_documentMetadata": "Current metadata",
|
||||
"admin_documentCreationTime": "Created",
|
||||
"admin_documentModifiedTime": "Last modified",
|
||||
"admin_currentlyOpen": "Currently open",
|
||||
"admin_channelAvailable": "Available",
|
||||
"admin_channelArchived": "Archived",
|
||||
"admin_documentMetadataPlaceholder": "Document URL or id",
|
||||
"admin_blockMetadataTitle": "Login-block information",
|
||||
"admin_blockMetadataHint": "The login block is what allows an account to log in to CryptPad with the combination of username + password",
|
||||
"admin_blockMetadataPlaceholder": "Absolute or relative block URL",
|
||||
"admin_accountMetadataPlaceholder": "User id (public signing key)",
|
||||
"admin_firstPinTime": "First pin activity time",
|
||||
"admin_lastPinTime": "Last pin activity time",
|
||||
"admin_currentlyOnline": "Is currently online",
|
||||
"admin_planName": "Plan name",
|
||||
"admin_note": "Plan note",
|
||||
"admin_storageUsage": "Data stored",
|
||||
"admin_channelCount": "Number of documents",
|
||||
"admin_fileCount": "Number of files",
|
||||
"admin_pinLogAvailable": "Pin log is available",
|
||||
"admin_pinLogArchived": "Pin log is archived",
|
||||
"admin_blockKey": "Block public key",
|
||||
"admin_blockAvailable": "Block is available",
|
||||
"admin_blockArchived": "Block is archived",
|
||||
"admin_archiveBlock": "Archive block",
|
||||
"admin_restoreBlock": "Restore archived block",
|
||||
"admin_getPinList": "Current pin list",
|
||||
"admin_archivePinLog": "Archive this account's pin log",
|
||||
"admin_restoreArchivedPins": "Restore archived pin log",
|
||||
"admin_archiveDocument": "Archive document",
|
||||
"admin_restoreDocument": "Restore document",
|
||||
"admin_planlimit": "Storage limit",
|
||||
"admin_reportContent": "Report content",
|
||||
"admin_getRawMetadata": "Metadata history",
|
||||
"og_teamDrive": "Team drive",
|
||||
"og_default": "CryptPad: end-to-end encrypted collaboration suite",
|
||||
"og_login": "Log in to {0}",
|
||||
"og_register": "Register an account on {0}",
|
||||
"og_contact": "{0} Contact",
|
||||
"og_pricing": "{0} Pricing",
|
||||
"og_features": "{0} Features",
|
||||
"ui_jsRequired": "JavaScript must be enabled to perform encryption in your browser",
|
||||
"og_encryptedAppType": "Encrypted {0}",
|
||||
"admin_documentConflict": "Archive/restore",
|
||||
"admin_conflictExplanation": "Two versions of this document exist. Restoring the archived version will overwrite the live version. Archiving the live version will overwrite the archived version. Neither action can be undone."
|
||||
}
|
||||
|
|
|
@ -71,20 +71,20 @@
|
|||
"saved": "Užsaugota",
|
||||
"error": "Klaida",
|
||||
"loading": "Kraunasi...",
|
||||
"newVersionError": "Yra nauja „CryptPad“ versija. <br> <a href='#'> Perkraukite iš naujo </a>, jei norite naudoti naują versiją, arba paspauskite „Escape“, kad pasiektumėte savo turinį <b> offline režimu </b>.",
|
||||
"errorRedirectToHome": "Paspauskite <em> Esc </em>, kad būtumėte nukreipti į „CryptDrive“.",
|
||||
"errorCopy": " Vis dar galite naudoti dabartinę versiją tik skaitymo režimu paspausdami <em> Esc </em>.",
|
||||
"newVersionError": "Yra nauja „CryptPad“ versija. <br> <a href='#'> Perkraukite iš naujo </a>, jei norite naudoti naują versiją, arba paspauskite „Esc“, kad pasiektumėte savo turinį <b> offline režimu </b>.",
|
||||
"errorRedirectToHome": "Paspauskite Esc, kad būtumėte nukreipti į „CryptDrive“.",
|
||||
"errorCopy": " Vis dar galite naudoti dabartinę versiją tik skaitymo režimu paspausdami Esc.",
|
||||
"invalidHashError": "Prašytame dokumente yra neteisingas URL.",
|
||||
"chainpadError": "Atnaujinant turinį įvyko kritinė klaida. Šis puslapis veikia tik skaitymo režimu, kad neprarastumėte savo darbo. <br> Jei norite toliau peržiūrėti šį padą, paspauskite <em> Esc </em> arba įkelkite iš naujo, jei norite bandyti redaguoti dar kartą.",
|
||||
"chainpadError": "Atnaujinant turinį įvyko kritinė klaida. Šis puslapis veikia tik skaitymo režimu, kad neprarastumėte savo darbo. <br> Jei norite toliau peržiūrėti šį padą, paspauskite Esc arba įkelkite iš naujo, jei norite bandyti redaguoti dar kartą.",
|
||||
"inactiveError": "Šis padas buvo ištrintas dėl neveiklumo. Paspauskite Esc, kad sukurtumėte naują padą.",
|
||||
"deletedError": "Šis dokumentas ištrintas ir jo nebėra.",
|
||||
"expiredError": "Šis Padas nebegalioja ir yra ištrintas.",
|
||||
"anonymousStoreDisabled": "Šios instancijos nepalaiko anoniminio vartojimo. Jūs turite prisiregistruoti, kad galėtumete naudoti CryptDrive.",
|
||||
"padNotPinnedVariable": "Šis padas nustos galioti po {4} neaktyvių dienų, {0}prisijungti{1} arba {2}registruotis{3} kad užsaugoti.",
|
||||
"padNotPinned": "Nenaudojamas padas nustos galioti po 3mėn, {0}prisijungti{1} arba {2} registruotis{3} kad užsaugoti.",
|
||||
"onLogout": "Jūs esate prisijungęs, {0}Spausti čia{1}Prisjungti čia<br>arba spausti <em>Escape</em> pasiekti savo pad tik skaityti.",
|
||||
"onLogout": "Jūs esate prisijungęs, {0}Spausti čia{1}Prisjungti čia<br>arba spausti Esc pasiekti savo pad tik skaityti.",
|
||||
"typeError": "Šis Pad nesuderinama su pasirinkta programa",
|
||||
"common_connectionLost": "<b> serverio sujungimas prarastas<b><br> Tik skaitymo rėžimas kol sujungimas atsiras.",
|
||||
"common_connectionLost": "<b> serverio sujungimas prarastas</b><br> Tik skaitymo rėžimas kol sujungimas atsiras.",
|
||||
"type": {
|
||||
"form": "Forma",
|
||||
"teams": "Komandos",
|
||||
|
@ -196,5 +196,8 @@
|
|||
"poll_userPlaceholder": "Vardas",
|
||||
"poll_optionPlaceholder": "Pasirinkimai",
|
||||
"poll_commit": "Pateikti",
|
||||
"poll_create_option": "Pridėti naują parinktį"
|
||||
"poll_create_option": "Pridėti naują parinktį",
|
||||
"error_unhelpfulScriptError": "Scenarijaus klaida: daugiau informacijos rasite naršyklės konsolėje",
|
||||
"tag_edit": "Pakeisti",
|
||||
"tag_add": "Pridėti"
|
||||
}
|
||||
|
|
|
@ -17,16 +17,16 @@
|
|||
},
|
||||
"common_connectionLost": "<b>Tjener frakoblet</b><br>I lesemodus til tilkoblingen gjenopprettes.",
|
||||
"typeError": "Dette dokumentet er ikke kompatibelt med det valgte programmet",
|
||||
"onLogout": "Du er utlogget, {0}klikk her{1} for å logge inn<br>eller trykk <em>Esc</em> for å se dokumentet i lesemodus.",
|
||||
"onLogout": "Du er utlogget, {0}klikk her{1} for å logge inn<br>eller trykk Esc for å se dokumentet i lesemodus.",
|
||||
"padNotPinned": "Dette dokumentet vil automatisk utløpe etter 3 måneder uten aktivitet, {0}logg inn{1} eller {2}registrer deg{3} for å ta vare på det.",
|
||||
"anonymousStoreDisabled": "Beklager, denne CryptPad-dokumentet er ikke tilgjengelig for anonyme brukere. Logg inn for å bruke CryptDrive.",
|
||||
"expiredError": "Dette dokumentet har utløpt, og er ikke tilgjengelig.",
|
||||
"deletedError": "Dette dokumentet er slettet, og dermed ikke lenger tilgjengelig.",
|
||||
"inactiveError": "Dette dokumentet har blitt har blitt slettet pga. inaktivitet. Trykk «Esc» for å lage en nytt dokument.",
|
||||
"chainpadError": "En kritisk feil oppstod under oppdatering av innholdet. Denne siden er i lesemodus slik at du ikke mister arbeidet.<br>Trykk <em>Esc</em> for å fortsette, eller forsøk å laste inn siden på nytt.",
|
||||
"chainpadError": "En kritisk feil oppstod under oppdatering av innholdet. Denne siden er i lesemodus slik at du ikke mister arbeidet.<br>Trykk Esc for å fortsette, eller forsøk å laste inn siden på nytt.",
|
||||
"invalidHashError": "Dokumentet du ba om har en ugyldig nettadresse.",
|
||||
"errorCopy": " Du kan fremdeles bruke nåværende versjon i lesemodus ved å trykke <em>Esc</em>.",
|
||||
"errorRedirectToHome": "Trykk <em>Esc</em> for bli videresendt til din CryptDrive.",
|
||||
"errorCopy": " Du kan fremdeles bruke nåværende versjon i lesemodus ved å trykke Esc.",
|
||||
"errorRedirectToHome": "Trykk Esc for bli videresendt til din CryptDrive.",
|
||||
"newVersionError": "En ny versjon av CryptPad er her.<br><a href='#'>Gjeninnlast siden</a> eller trykk «Esc» for å redigere innholdet i <b>frakoblet modus</b>.",
|
||||
"loading": "Laster …",
|
||||
"error": "Feil",
|
||||
|
@ -175,7 +175,7 @@
|
|||
"admin_flushCacheButton": "Tøm hurtiglager",
|
||||
"admin_flushCacheDone": "Hurtiglager tømt",
|
||||
"footer_donate": "Doner",
|
||||
"contact_admin": "Kontakt administratorne",
|
||||
"contact_admin": "Kontakt administratorne for {0}",
|
||||
"contact_adminHint": "For problemer med kontoen, lagringsgrenser eller tjenestetilgang.\n",
|
||||
"contact_dev": "Kontakt utviklerne",
|
||||
"contact_devHint": "For å sende inn forslag, forbedringer eller takk.",
|
||||
|
@ -189,7 +189,7 @@
|
|||
"contacts_title": "Kontakter",
|
||||
"contacts_added": "Kontaktinvitasjon godtatt.",
|
||||
"contacts_rejected": "Kontaktinvitasjonen avvist",
|
||||
"contacts_request": "<em>{0}</em> vil legge deg til som kontakt. <b>Aksepter<b>?",
|
||||
"contacts_request": "<em>{0}</em> vil legge deg til som kontakt. <b>Aksepter</b>?",
|
||||
"contacts_remove": "Fjern denne kontakten",
|
||||
"contacts_confirmRemove": "Fjern <em>{0}</em> fra kontaktlisten din?",
|
||||
"contacts_typeHere": "Skriv en melding her …",
|
||||
|
@ -254,7 +254,7 @@
|
|||
"formattedGB": "{0} GB",
|
||||
"formattedMB": "{0} MB",
|
||||
"storageStatus": "Lagringsplass:<br><b>{0}</b> brukt, av <b>{1}</b>",
|
||||
"padNotPinnedVariable": "Denne dokumentet utløper etter {4] dager med inaktivitet, {0}logg inn{1} eller {2}registrer deg{3} for å bevare det.",
|
||||
"padNotPinnedVariable": "Denne dokumentet utløper etter {4} dager med inaktivitet, {0}logg inn{1} eller {2}registrer deg{3} for å bevare det.",
|
||||
"history_restoreTitle": "Gjenopprett den valgte dokumentversjonen",
|
||||
"history_closeTitle": "Lukk historikken",
|
||||
"history_loadMore": "Vis mer historikk",
|
||||
|
@ -435,7 +435,6 @@
|
|||
"pad_settings_hide": "Skjul",
|
||||
"pad_settings_width_large": "Full bredde",
|
||||
"pad_settings_title": "Dokumentinnstillinger",
|
||||
"admin_getquotaButton": "Sjekk",
|
||||
"settings_colorthemeTitle": "Fargedrakt",
|
||||
"settings_colortheme_light": "Lys",
|
||||
"settings_colortheme_dark": "Mørk",
|
||||
|
@ -463,7 +462,6 @@
|
|||
"allowNotifications": "Tillat merknader",
|
||||
"archivedFromServer": "Dokument arkivert",
|
||||
"restoredFromServer": "Dokument gjenopprettet",
|
||||
"admin_archiveInval": "Ugyldig dokument",
|
||||
"admin_archiveInput2": "Dokumentpassord",
|
||||
"admin_unarchiveButton": "Gjenopprett",
|
||||
"admin_archiveInput": "Dokument-nettadresse",
|
||||
|
@ -631,7 +629,6 @@
|
|||
"creation_helperText": "Åpne i dokumentasjon",
|
||||
"creation_expiresIn": "Utløper om",
|
||||
"mediatag_loadButton": "Last inn vedlegg",
|
||||
"admin_unarchiveTitle": "Gjenopprett dokumenter",
|
||||
"documentID": "Dokumentidentifikator",
|
||||
"loading_state_5": "Rekonstruer dokument",
|
||||
"loading_state_4": "Last inn lag",
|
||||
|
@ -785,5 +782,8 @@
|
|||
"fo_moveUnsortedError": "Du kan ikke flytte en mappe til mal-listen",
|
||||
"oo_cantUpload": "Opplasting tillates ikke når andre brukere er tilstede.",
|
||||
"kanban_addBoard": "Legg til en tavle",
|
||||
"kanban_newBoard": "Ny tavle"
|
||||
"kanban_newBoard": "Ny tavle",
|
||||
"ui_restore": "Gjenopprett",
|
||||
"ui_undefined": "ukjent",
|
||||
"admin_documentType": "Type"
|
||||
}
|
||||
|
|
|
@ -15,7 +15,7 @@
|
|||
"code": "Code"
|
||||
},
|
||||
"padNotPinned": "Deze werkomgeving wordt na 3 maanden gewist als hij niet wordt gebruikt. {0}Log in{1} of {2}registreer{3} om deze te behouden.",
|
||||
"onLogout": "U bent uitgelogd. {0}Klik hier{1} om in te loggen<br>of druk op <em>Escape</em> om uw werkomgeving te openen in alleen-lezenmodus.",
|
||||
"onLogout": "U bent uitgelogd. {0}Klik hier{1} om in te loggen<br>of druk op Esc om uw werkomgeving te openen in alleen-lezenmodus.",
|
||||
"typeError": "Deze werkomgeving kan niet worden gebruikt met het gekozen programma",
|
||||
"common_connectionLost": "<b>Serververbinding verbroken</b><br>De alleen-lezenmodus is ingeschakeld tot de verbinding hersteld wordt.",
|
||||
"padNotPinnedVariable": "Deze werkomgeving wordt na {4} dagen gewist als hij niet wordt gebruikt. {0}Log in{1} of {2}registreer{3} om deze te behouden.",
|
||||
|
@ -156,10 +156,10 @@
|
|||
"settings_ownDriveConfirm": "Uw account upgraden kan enkele minuten duren. U zult op all uw apparaten opnieuw moeten inloggen. Weet u dit zeker?",
|
||||
"settings_ownDriveButton": "Upgrade uw account",
|
||||
"settings_ownDriveHint": "Oude accounts hebben geen toegang tot de nieuwste functies. Een gratis update zal nieuwe functies inschakelen en jouw Drive voor toekomstige updates voorbereiden.",
|
||||
"errorRedirectToHome": "Druk op <em>Esc</em> om door te gaan naar uw CryptDrive.",
|
||||
"errorCopy": " U kunt nog altijd toegang krijgen tot de inhoud als u op <em>Esc</em> drukt.<br>Als u dit venster sluit, kunt u er geen toegang meer tot krijgen.",
|
||||
"errorRedirectToHome": "Druk op Esc om door te gaan naar uw CryptDrive.",
|
||||
"errorCopy": "U kunt nog altijd toegang krijgen tot de inhoud als u op Esc drukt.",
|
||||
"invalidHashError": "De url van het opgevraagde document is ongeldig.",
|
||||
"chainpadError": "Er is een kritieke fout opgetreden tijdens het bijwerken van uw inhoud. Deze pagina bevindt zich nu in alleen-lezenmodus zodat u uw werk niet kwijtraakt. <br>Druk op <em>Esc</em> om door te gaan met het bekijken van deze werkomgeving of herlaad de pagina om te trachten deze werkomgeving weer aan te kunnen passen.",
|
||||
"chainpadError": "Er is een kritieke fout opgetreden tijdens het bijwerken van uw inhoud. Deze pagina bevindt zich nu in alleen-lezenmodus zodat u uw werk niet kwijtraakt. <br>Druk op Esc om door te gaan met het bekijken van deze werkomgeving of herlaad de pagina om te trachten deze werkomgeving weer aan te kunnen passen.",
|
||||
"inactiveError": "Deze werkomgeving is verwijderd wegens gebrek aan activiteit. Druk op Esc om een nieuwe werkomgeving samen te stellen.",
|
||||
"deletedError": "Deze werkomgeving is verwijderd door de eigenaar en niet meer beschikbaar.",
|
||||
"main_title": "CryptPad: werk samen aan documenten - geen kennis benodigd",
|
||||
|
@ -223,7 +223,7 @@
|
|||
"contacts_title": "Contacten",
|
||||
"contacts_added": "Contactuitnodiging geaccepteerd.",
|
||||
"contacts_rejected": "Contactuitnodiging afgewezen",
|
||||
"contacts_request": "<em>{0}</em> wilt u toevoegen als contactpersoon. <b>Accepteren<b>?",
|
||||
"contacts_request": "<em>{0}</em> wilt u toevoegen als contactpersoon. <b>Accepteren</b>?",
|
||||
"contacts_send": "Verzenden",
|
||||
"contacts_remove": "Verwijder deze contactpersoon",
|
||||
"contacts_confirmRemove": "Weet u zeker dat u <em>{0}</em> wilt verwijderen uit uw contacten?",
|
||||
|
@ -416,5 +416,7 @@
|
|||
"fm_lastAccess": "Laatste toegang",
|
||||
"fm_ownedPadsName": "Eigendom",
|
||||
"poll_descriptionHint": "Beschrijf uw enquête en gebruik de ✓ (publiceer) knop als u klaar bent.\nDe beschrijving kan met markdown-syntax geschreven worden en u kunt media elementen integreren van uw CryptDrive.\nIedereen met de link kan de beschrijving veranderen, maar dit raden wij af.",
|
||||
"mdToolbar_tutorial": "https://www.markdowntutorial.com/nl/"
|
||||
"mdToolbar_tutorial": "https://www.markdowntutorial.com/nl/",
|
||||
"ui_restore": "Herstellen",
|
||||
"admin_documentType": "Type"
|
||||
}
|
||||
|
|
|
@ -18,7 +18,6 @@
|
|||
"whiteboard": "Tablica",
|
||||
"drive": "CryptDrive"
|
||||
},
|
||||
"common_connectionLost": "Przerwano połączenie z serwerem",
|
||||
"disconnected": "Rozłączony",
|
||||
"synchronizing": "Synchronizacja",
|
||||
"reconnecting": "Wznawianie połączenia...",
|
||||
|
@ -68,25 +67,25 @@
|
|||
"saved": "Zapisano",
|
||||
"error": "Błąd",
|
||||
"loading": "Ładowanie...",
|
||||
"newVersionError": "Nowa wersja CryptPad jest dostępna.<br><a href='#'>Odśwież</a> aby korzystać z nowej wersji lub wciśnij klawisz <em>ESC</em> aby pracować w trybie <b>offline</b>.",
|
||||
"errorRedirectToHome": "Wciśnij <em>ESC</em> aby być przeniesionym do swojego CryptDrive.",
|
||||
"errorCopy": " Możesz korzystać z aktualnej wersji w trybie odczytu, klikając <em>ESC</em>.",
|
||||
"newVersionError": "Nowa wersja CryptPad jest dostępna.<br><a href='#'>Odśwież</a> aby korzystać z nowej wersji lub wciśnij klawisz Esc aby pracować w trybie <b>offline</b>.",
|
||||
"errorRedirectToHome": "Wciśnij Esc aby być przeniesionym do swojego CryptDrive.",
|
||||
"errorCopy": " Możesz korzystać z aktualnej wersji w trybie odczytu, klikając Esc.",
|
||||
"invalidHashError": "Dokument, który chcesz zobaczyć ma błędny adres URL.",
|
||||
"chainpadError": "Podczas ładowania zawartości, wystąpił krytyczny błąd. Dostępny jest wyłącznie odczyt, aby dać szansę na odzyskanie dokumentu.<br>Wciśnij klawisz <em>ESC</em> aby przejrzeć dokument lub odśwież stronę aby spróbować włączyć tryb edycji.",
|
||||
"inactiveError": "Ten dokument został usunięty z powodu braku aktywności. Wciśnij klawisz ESC, aby stworzyć nowy dokument.",
|
||||
"chainpadError": "Podczas ładowania zawartości, wystąpił krytyczny błąd. Dostępny jest wyłącznie odczyt, aby dać szansę na odzyskanie dokumentu.<br>Wciśnij klawisz Esc aby przejrzeć dokument lub odśwież stronę aby spróbować włączyć tryb edycji.",
|
||||
"inactiveError": "Ten dokument został usunięty z powodu braku aktywności. Wciśnij klawisz Esc, aby stworzyć nowy dokument.",
|
||||
"deletedError": "Ten dokument został usunięty.",
|
||||
"expiredError": "Ten dokument wygasł i nie jest już dostępny.",
|
||||
"anonymousStoreDisabled": "Administrator wyłączył zapisywanie danych dla niezalogowanych użytkowników. Musisz się zalogować aby otrzymać dostęp do aplikacji.",
|
||||
"padNotPinnedVariable": "Dokument zostanie usunięty po {4} dniach braku aktywności, {0}zaloguj się{1} lub {2}zarejestruj{3} aby go zachować.",
|
||||
"padNotPinned": "Ten dokument zostanie usunięty po 3 miesiącach braku aktywności, {0}zaloguj się{1} lub {2}zarejestruj{3} aby go zachować.",
|
||||
"onLogout": "Jesteś wylogowany, {0}kliknij tutaj{1} aby się zalogować<br>lub użyj klawisza <em>ESC</em> aby odczytać swój dokument (bez możliwości edycji).",
|
||||
"onLogout": "Jesteś wylogowany, {0}kliknij tutaj{1} aby się zalogować<br>lub użyj klawisza Esc aby odczytać swój dokument (bez możliwości edycji).",
|
||||
"typeError": "Dokument nie jest kompatybilny z wybraną aplikacją",
|
||||
"template_empty": "Brak szablonów",
|
||||
"template_import": "Zaimportuj szablon",
|
||||
"useTemplateCancel": "Rozpocznij od nowa (Esc)",
|
||||
"useTemplateOK": "Wybierz szablon (Enter)",
|
||||
"useTemplate": "Dodać nowy szablon?",
|
||||
"selectTemplate": "Wybierz szablon lub naciśnij klawisz Escape",
|
||||
"selectTemplate": "Wybierz szablon lub naciśnij klawisz Esc",
|
||||
"templateSaved": "Szablon zapisany!",
|
||||
"saveTemplatePrompt": "Wybierz nazwę dla szablonu",
|
||||
"saveTemplateButton": "Zapisz jako szablon",
|
||||
|
@ -106,10 +105,10 @@
|
|||
"user_rename": "Zmień nazwę wyświetlaną",
|
||||
"exportButton": "Eksportuj",
|
||||
"importButton": "Importuj",
|
||||
"pinLimitDrive": "Osiągnięto limit przestrzeni dyskowej. Nie możesz utworzyć nowych dokumentów.",
|
||||
"pinLimitNotPinned": "Osiągnięto limit przestrzeni dyskowej. Ten dokument nie jest zapisany w CryptDrive.",
|
||||
"pinLimitDrive": "Osiągnięto limit przestrzeni dyskowej.<br> Nie możesz utworzyć nowych dokumentów.",
|
||||
"pinLimitNotPinned": "Osiągnięto limit przestrzeni dyskowej.<br> Ten dokument nie jest zapisany w CryptDrive.",
|
||||
"pinLimitReachedAlertNoAccounts": "Osiągnięto limit przestrzeni dyskowej",
|
||||
"pinLimitReachedAlert": "Osiągnięto limit przestrzeni dyskowej. Nowe dokumenty nie będą przechowywane w Twoim CryptDrive. Możesz usunąć dokumenty z Twojego CryptDrive'a lub skorzystać z oferty premium.",
|
||||
"pinLimitReachedAlert": "Osiągnięto limit przestrzeni dyskowej. Nowe dokumenty nie będą przechowywane w Twoim CryptDrive.<br>Możesz usunąć dokumenty z Twojego CryptDrive'a lub <a>skorzystać z oferty premium</a>.",
|
||||
"pinLimitReached": "Osiągnięto limit przestrzeni dyskowej",
|
||||
"formattedKB": "{0} KB",
|
||||
"formattedGB": "{0} GB",
|
||||
|
@ -181,7 +180,7 @@
|
|||
"contacts_confirmRemove": "Czy na pewno chcesz usunąć <em>{0}</em> ze swoich kontaktów?",
|
||||
"contacts_remove": "Usuń ten kontakt",
|
||||
"contacts_send": "Wyślij",
|
||||
"contacts_request": "<em>{0}</em> chciałby dodać Cię jako kontakt. <b>Akceptujesz<b>?",
|
||||
"contacts_request": "<em>{0}</em> chciałby dodać Cię jako kontakt. <b>Akceptujesz</b>?",
|
||||
"contacts_rejected": "Zaproszenie do kontaktu odrzucone",
|
||||
"contacts_added": "Zaproszenie do kontaktu przyjęte.",
|
||||
"contacts_title": "Kontakty",
|
||||
|
@ -261,7 +260,7 @@
|
|||
"slideOptionsTitle": "Dostosuj swoje slajdy",
|
||||
"slideOptionsText": "Opcje",
|
||||
"tags_noentry": "Nie możesz oznaczyć usuniętego dokumentu",
|
||||
"tags_duplicate": "Duplikat tagu",
|
||||
"tags_duplicate": "Duplikat tagu: {0}",
|
||||
"tags_notShared": "Twoje tagi nie są udostępniane innym użytkownikom",
|
||||
"tags_add": "Aktualizuj tagi dla wybranych dokumentów",
|
||||
"tags_title": "Tagi (tylko dla Ciebie)",
|
||||
|
@ -491,7 +490,7 @@
|
|||
"admin_diskUsageButton": "Wygeneruj raport",
|
||||
"admin_diskUsageHint": "Ilość przestrzeni dyskowej zużywanej przez różne zasoby CryptPada",
|
||||
"admin_diskUsageTitle": "Wykorzystanie dysku",
|
||||
"timeoutError": "Wystąpił błąd, który przerwał połączenie z serwerem.Naciśnij <em>Esc</em>, aby przeładować stronę.",
|
||||
"timeoutError": "Wystąpił błąd, który przerwał połączenie z serwerem.<br> Naciśnij Esc, aby przeładować stronę.",
|
||||
"contact_email": "E-mail",
|
||||
"team_cat_chat": "Czat",
|
||||
"contact_chat": "Czat",
|
||||
|
@ -499,7 +498,7 @@
|
|||
"contact_devHint": "Na prośby o funkcje, poprawę użyteczności lub podziękowania.",
|
||||
"contact_dev": "Skontaktuj się z twórcami",
|
||||
"contact_adminHint": "W przypadku jakichkolwiek problemów związanych z kontem użytkownika, limitem pamięci lub dostępnością usługi.\n",
|
||||
"contact_admin": "Skontaktuj się z administratorami",
|
||||
"contact_admin": "Skontaktuj się z administratorami w celu: {0}",
|
||||
"footer_donate": "Przekaż darowiznę",
|
||||
"admin_flushCacheDone": "Pamięć podręczna wyczyszczona pomyślnie",
|
||||
"admin_flushCacheButton": "Wyczyść pamięć podręczną",
|
||||
|
@ -524,7 +523,7 @@
|
|||
"survey": "Ankieta CryptPada",
|
||||
"crowdfunding_popup_no": "Nie teraz",
|
||||
"crowdfunding_popup_text": "<h3>Potrzebujemy Twojej pomocy!</h3>Aby zapewnić, że CryptPad jest aktywnie rozwijany, rozważ wsparcie projektu poprzez stronę OpenCollective, gdzie możesz zobaczyć nasze nasz <b>Plan działania</b> i <b>Cele Finansowania</b>.",
|
||||
"crowdfunding_button2": "Pomóż CryptPad",
|
||||
"crowdfunding_button2": "Wspomóż",
|
||||
"crowdfunding_button": "Wspieraj CryptPad",
|
||||
"autostore_notAvailable": "Aby móc korzystać z tej funkcji, musisz zapisać ten dokument w swoim CryptDrive.",
|
||||
"autostore_hide": "Nie zapisuj",
|
||||
|
@ -612,7 +611,7 @@
|
|||
"features_f_reg": "Wszystkie funkcje zarejestrowanego użytkownika",
|
||||
"features_f_register": "Zarejestruj się bezpłatnie",
|
||||
"features_f_storage1_note": "Dokumenty przechowywane w CryptDrive nie są usuwane w przypadku braku aktywności",
|
||||
"features_f_storage1": "Własne miejsce przechowywania danych",
|
||||
"features_f_storage1": "Własne miejsce przechowywania danych: {0}",
|
||||
"features_f_file1_note": "Przechowuj pliki w swoim CryptDrive: obrazy, pliki PDF, wideo i inne. Udostępniaj je swoim kontaktom lub osadzaj w swoich dokumentach. (do {0}MB)",
|
||||
"features_f_file1": "Przesyłaj i udostępniaj pliki",
|
||||
"features_f_social_note": "Dodawanie kontaktów w celu bezpiecznej współpracy, tworzenie profilu, precyzyjna kontrola dostępu",
|
||||
|
@ -672,7 +671,7 @@
|
|||
"upload_cancelled": "Anulowane",
|
||||
"upload_pending": "W trakcie realizacji",
|
||||
"upload_choose": "Wybierz plik",
|
||||
"upload_tooLargeBrief": "Plik przekracza limit {0}MB",
|
||||
"upload_tooLargeBrief": "Plik przekracza limit {0}MB dla tego dysku",
|
||||
"upload_tooLarge": "Ten plik przekracza maksymalny rozmiar przesyłania dozwolony dla Twojego konta.",
|
||||
"upload_notEnoughSpaceBrief": "Niewystarczająca ilość miejsca",
|
||||
"upload_notEnoughSpace": "Nie ma wystarczającej ilości miejsca na ten plik w Twoim CryptDrive.",
|
||||
|
@ -894,7 +893,7 @@
|
|||
"reminder_minutes": "<b>{0}</b> rozpocznie się za {1} minut(y)",
|
||||
"reminder_inProgressAllDay": "Dzisiaj: <b>{0}</b>",
|
||||
"reminder_inProgress": "<b>{0}</b> rozpoczął się w {1}",
|
||||
"reminder_now": "<b>{0}</b> miało miejsce w dniu {1}",
|
||||
"reminder_now": "<b>{0}</b> miało miejsce w dniu",
|
||||
"reminder_missed": "<b>{0}</b> miało miejsce w dniu {1}",
|
||||
"calendar_more": "{0} więcej",
|
||||
"calendar_days": "Dni",
|
||||
|
@ -966,9 +965,6 @@
|
|||
"pad_settings_width_small": "Tryb strony",
|
||||
"pad_settings_info": "Domyślne ustawienia dla tego dokumentu. Zostaną one zastosowane, gdy nowi użytkownicy będą odwiedzać ten dokument.",
|
||||
"pad_settings_title": "Ustawienia dokumentu",
|
||||
"admin_getquotaButton": "Sprawdź",
|
||||
"admin_getquotaHint": "Sprawdzanie całkowitego rozmiaru elementów wliczanych do limitu użytkownika lub zespołu na podstawie jego klucza publicznego.",
|
||||
"admin_getquotaTitle": "Sprawdź miejsce do przechowywania danych na koncie",
|
||||
"settings_colorthemeTitle": "Motyw kolorystyczny",
|
||||
"settings_colorthemeHint": "Zmień kolory CryptPada na tym urządzeniu.",
|
||||
"settings_colortheme_default": "Domyślne ustawienie systemowe ({0})",
|
||||
|
@ -1022,15 +1018,12 @@
|
|||
"allowNotifications": "Zezwól na powiadomienia",
|
||||
"archivedFromServer": "Zarchiwizowany dokument",
|
||||
"restoredFromServer": "Przywrócony dokument",
|
||||
"admin_archiveInval": "Nieprawidłowy dokument",
|
||||
"admin_archiveInput2": "Hasło do dokumentu",
|
||||
"admin_archiveInput": "Adres URL dokumentu",
|
||||
"admin_unarchiveButton": "Przywróc",
|
||||
"admin_unarchiveHint": "Przywróć dokument, który został wcześniej zarchiwizowany",
|
||||
"admin_unarchiveTitle": "Przywróć dokumenty",
|
||||
"admin_archiveButton": "Archiwizuj",
|
||||
"admin_archiveHint": "Oznacz dokument jako niedostępny bez usuwania go na stałe. Zostanie on umieszczony w katalogu 'archiwum' i usunięty po kilku dniach (można tę opcję zmienić w pliku konfiguracyjnym serwera).",
|
||||
"admin_archiveTitle": "Archiwizuj dokumenty",
|
||||
"errorPopupBlocked": "CryptPad musi mieć możliwość otwierania nowych kart, aby mógł działać. Proszę pozwolić na otwieranie wyskakujących okienek w pasku adresu Twojej przeglądarki. Te okna nigdy nie będą używane do pokazywania Ci reklam.",
|
||||
"unableToDisplay": "Nie można wyświetlić dokumentu. Naciśnij Esc, aby ponownie załadować stronę. Jeśli problem będzie się powtarzał, skontaktuj się z działem pomocy technicznej.",
|
||||
"documentID": "Identyfikator dokumentu",
|
||||
|
@ -1117,7 +1110,7 @@
|
|||
"support_cat_bug": "Zgłoszenie błędu",
|
||||
"support_cat_data": "Utrata zawartości",
|
||||
"support_cat_account": "Konto użytkownika",
|
||||
"info_privacyFlavour": "Nasza <a>polityka prywatności</a> opisuje, w jaki sposób traktujemy Twoje dane.",
|
||||
"info_privacyFlavour": "<a>polityka prywatności</a> w tym przypadku",
|
||||
"user_about": "O CryptPad",
|
||||
"settings_safeLinkDefault": "Bezpieczne łącza są teraz domyślnie włączone. Do kopiowania linków proszę używać menu <i></i> <b>Udostępnij</b> , a nie paska adresu przeglądarki.",
|
||||
"support_languagesPreamble": "Zespół wsparcia technicznego posługuje się następującymi językami:",
|
||||
|
@ -1389,5 +1382,20 @@
|
|||
"requestEdit_accepted": "{1} przyznał Ci prawa do edycji dokumentu <b>{0}</b>",
|
||||
"requestEdit_request": "{1} chce edytować dokument <b>{0}</b>",
|
||||
"later": "Zdecyduj później",
|
||||
"requestEdit_viewPad": "Otwórz dokument w nowej karcie"
|
||||
"requestEdit_viewPad": "Otwórz dokument w nowej karcie",
|
||||
"ui_restore": "Przywróc",
|
||||
"ui_archive": "Archiwizuj",
|
||||
"ui_undefined": "nieznany",
|
||||
"admin_documentType": "Typ",
|
||||
"support_warning_prompt": "Proszę wybrać kategorię najbardziej pasującą do twojego problemu. To pomoże administratorom w selekcji oraz zapewni dalsze wskazówki, jakiego typu informacje są potrzebne",
|
||||
"info_sourceFlavour": "<a>Kod źródłowy</a> CryptPad",
|
||||
"info_termsFlavour": "<a>Warunki korzystania z usługi</a>dla tego urządzenia",
|
||||
"footer_source": "Kod źródłowy",
|
||||
"admin_jurisdictionHint": "Kraj, w którym są udostępniane zaszyfrowane dane tego urządzenia",
|
||||
"admin_jurisdictionTitle": "Lokalizacja hostingu",
|
||||
"admin_descriptionHint": "Opisowy tekst wyświetlany dla tego urządzenia w postaci listy publicznych instancji na stronie cryptpad.org",
|
||||
"admin_descriptionTitle": "Opis istancji",
|
||||
"ui_saved": "{0} zapisano",
|
||||
"admin_nameHint": "Wyświetlana nazwa dla tego urządzenia z listy publicznych instacji na stronie cryptpad.org",
|
||||
"admin_archiveNote": "Notatka"
|
||||
}
|
||||
|
|
|
@ -20,7 +20,7 @@
|
|||
},
|
||||
"common_connectionLost": "<b>Conexão com o Servidor Perdida</b><br>Você agora está em modo somente leitura até a conexão ser restaurada.",
|
||||
"typeError": "Este documento não é compatível com a aplicação selecionada",
|
||||
"onLogout": "Você foi desconectado, {0}clique aqui{1} para se conectar, <br>ou pressione <em>ESC</em> para acessar seu documento em modo somente leitura.",
|
||||
"onLogout": "Você foi desconectado, {0}clique aqui{1} para se conectar, <br>ou pressione Esc para acessar seu documento em modo somente leitura.",
|
||||
"loading": "Carregando...",
|
||||
"error": "Erro",
|
||||
"saved": "Salvo",
|
||||
|
@ -54,7 +54,7 @@
|
|||
"user_accountName": "Nome da Conta",
|
||||
"clickToEdit": "Clique para Editar",
|
||||
"forgetPrompt": "Clicando OK, você irá mover este documento para a lixeira. Você tem certeza?",
|
||||
"movedToTrash": "Esse documento foi movido para a lixeira.<br>a>Acessar meu Drive</a>",
|
||||
"movedToTrash": "Esse documento foi movido para a lixeira.<br><a>Acessar meu Drive</a>",
|
||||
"shareButton": "Compartilhar",
|
||||
"shareSuccess": "Endereço copiado para o clipboard",
|
||||
"newButton": "Novo",
|
||||
|
@ -62,7 +62,7 @@
|
|||
"saveTemplateButton": "Salvar como modelo",
|
||||
"saveTemplatePrompt": "Escolha o nome do modelo",
|
||||
"templateSaved": "Modelo salvo!",
|
||||
"selectTemplate": "Selecione um modelo ou pressione ESC",
|
||||
"selectTemplate": "Selecione um modelo ou pressione Esc",
|
||||
"previewButtonTitle": "Mostrar ou esconder o modo de visualização markdown",
|
||||
"presentButtonTitle": "Entrar no modo apresentação",
|
||||
"backgroundButtonTitle": "Mudar cor do fundo da apresentação",
|
||||
|
@ -82,7 +82,7 @@
|
|||
"notifyLeft": "{0} deixou essa sessão colaborativa",
|
||||
"okButton": "OK (Enter)",
|
||||
"cancel": "Cancelar",
|
||||
"cancelButton": "Cancelar (ESC)",
|
||||
"cancelButton": "Cancelar (Esc)",
|
||||
"historyButton": "Exibir histórico do documento",
|
||||
"history_next": "Próxima versão",
|
||||
"history_prev": "Versão anterior",
|
||||
|
@ -218,10 +218,10 @@
|
|||
"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.",
|
||||
"inactiveError": "Este documento foi apagado devido à inatividade. Pressione Esc para criar um novo documento.",
|
||||
"chainpadError": "Ocorreu um erro crítico ao atualizar seu conteúdo. Esta página está em modo somente leitura para que você não perca seu trabalho.<br>Pressione <em>Esc</em> para continuar a visualizar este documento, ou recarregue para tentar editar novamente.",
|
||||
"chainpadError": "Ocorreu um erro crítico ao atualizar seu conteúdo. Esta página está em modo somente leitura para que você não perca seu trabalho.<br>Pressione Esc para continuar a visualizar este documento, ou recarregue para tentar editar novamente.",
|
||||
"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>.",
|
||||
"errorRedirectToHome": "Tecle <em>Esc</em> para ser redirecionado para seu CryptDrive.",
|
||||
"errorCopy": " Você pode continuar usando esta versão em modo somente leitura pressionando Esc.",
|
||||
"errorRedirectToHome": "Tecle Esc para ser redirecionado para seu CryptDrive.",
|
||||
"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",
|
||||
"mustLogin": "Você precisa estar logado para acessar esta página",
|
||||
|
@ -350,7 +350,7 @@
|
|||
"settings_autostoreNo": "Manual (nunca perguntar)",
|
||||
"settings_autostoreMaybe": "Manual (sempre perguntar)",
|
||||
"settings_autostoreYes": "Automático",
|
||||
"settings_autostoreHint": "<b>Automatico</b> Todos os documentos que você visitou estão armazenados em seu CryptDrive.<br><b>Manual (sempre pergunta)<b> Se você ainda não armazenou documentos, será questionado se deseja armazená-los em seu CryptDrive.<br><b>Manual (nunca pergunta)</b> Os documentos não são armazenados automaticamente em seu CryptDrive. A opção para armazená-los estará escondida.",
|
||||
"settings_autostoreHint": "<b>Automatico</b> Todos os documentos que você visitou estão armazenados em seu CryptDrive.<br><b>Manual (sempre pergunta)</b> Se você ainda não armazenou documentos, será questionado se deseja armazená-los em seu CryptDrive.<br><b>Manual (nunca pergunta)</b> Os documentos não são armazenados automaticamente em seu CryptDrive. A opção para armazená-los estará escondida.",
|
||||
"settings_autostoreTitle": "Bloco armazenado no CryptDrive",
|
||||
"settings_resetThumbnailsDone": "Todas as miniaturas foram apagadas.",
|
||||
"settings_resetThumbnailsDescription": "Limpar todas as miniaturas de documentos armazenadas em seu navegador.",
|
||||
|
@ -443,7 +443,7 @@
|
|||
"contacts_confirmRemove": "Tem certeza de que quer remover <em>{0}</em> dos seus contatos?",
|
||||
"contacts_remove": "Remover este contato",
|
||||
"contacts_send": "Enviar",
|
||||
"contacts_request": "<em>{0}</em> quer te adicionar como contato. <b>Aceitar<b>?",
|
||||
"contacts_request": "<em>{0}</em> quer te adicionar como contato. <b>Aceitar</b>?",
|
||||
"contacts_rejected": "Convite de contato rejeitado",
|
||||
"contacts_added": "Convite de contato aceito.",
|
||||
"contacts_title": "Contatos",
|
||||
|
@ -804,14 +804,14 @@
|
|||
"admin_diskUsageButton": "Gerar relatório",
|
||||
"admin_diskUsageHint": "Quantidade de espaço de armazenamento consumido por vários recursos do CryptPad",
|
||||
"admin_diskUsageTitle": "Uso de disco",
|
||||
"timeoutError": "Um erro interrompeu sua conexão com o servidor. <br> Pressione <em> Esc </em> para recarregar a página.",
|
||||
"timeoutError": "Um erro interrompeu sua conexão com o servidor. <br> Pressione Esc para recarregar a página.",
|
||||
"contact_email": "Email",
|
||||
"contact_chat": "Bate-papo",
|
||||
"contact_bug": "Reportar Bug",
|
||||
"contact_devHint": "Para solicitações de recursos, melhorias de usabilidade ou para dizer obrigado.",
|
||||
"contact_dev": "Contate os desenvolvedores",
|
||||
"contact_adminHint": "Para quaisquer problemas relacionados à sua conta, limite de armazenamento ou disponibilidade do serviço.\n",
|
||||
"contact_admin": "Contate os administradores",
|
||||
"contact_admin": "Contate os administradore de: {0}",
|
||||
"footer_donate": "Doe",
|
||||
"admin_flushCacheDone": "Cache limpo com sucesso",
|
||||
"admin_flushCacheButton": "Limpar cache",
|
||||
|
@ -1144,15 +1144,12 @@
|
|||
"allowNotifications": "Permitir notificações",
|
||||
"archivedFromServer": "Documento arquivado",
|
||||
"restoredFromServer": "Documento restaurado",
|
||||
"admin_archiveInval": "Documento inválido",
|
||||
"admin_archiveInput2": "Senha do documento",
|
||||
"admin_archiveInput": "URL do documento",
|
||||
"admin_unarchiveButton": "Restaurar",
|
||||
"admin_unarchiveHint": "Restaurar um documento arquivado",
|
||||
"admin_unarchiveTitle": "Restaurar documentos",
|
||||
"admin_archiveButton": "Arquivar",
|
||||
"admin_archiveHint": "Tornar um documento indisponível sem apagá-lo permanentemente. Ele será colocado em um diretório de 'arquivo' e excluído após alguns dias (configurável no arquivo de configuração do servidor).",
|
||||
"admin_archiveTitle": "Arquivar documentos",
|
||||
"errorPopupBlocked": "O CryptPad precisa ser capaz de abrir novas abas para operar. Por favor, permita janelas popup na barra de endereços do seu navegador. Estas janelas nunca serão usadas para mostrar publicidade.",
|
||||
"unableToDisplay": "Incapaz de exibir o documento. Por favor, pressione Esc para recarregar a página. Se o problema persistir, favor contatar o suporte.",
|
||||
"documentID": "Identificador do documento",
|
||||
|
@ -1201,7 +1198,6 @@
|
|||
"form_pollYourAnswers": "Suas respostas",
|
||||
"form_pollTotal": "Total",
|
||||
"userlist_visitProfile": "Visitar perfil",
|
||||
"admin_getquotaButton": "Checar",
|
||||
"settings_colortheme_light": "Claro",
|
||||
"settings_colortheme_dark": "Escuro",
|
||||
"settings_cat_style": "Aparência",
|
||||
|
@ -1336,8 +1332,6 @@
|
|||
"admin_surveyTitle": "Pesquisa",
|
||||
"toolbar_degraded": "Mais de {0} editores estão atualmente presentes neste documento. A lista de usuários e o chat estão desativados para melhorar o desempenho.",
|
||||
"pad_settings_title": "Configurações do documento",
|
||||
"admin_getquotaHint": "Verifique o tamanho total dos itens contados em relação à cota de um usuário ou equipe, dada sua chave pública.",
|
||||
"admin_getquotaTitle": "Verificar o armazenamento da conta",
|
||||
"settings_colorthemeTitle": "Tema da cor",
|
||||
"settings_colorthemeHint": "Mude as cores gerais do CryptPad neste dispositivo.",
|
||||
"settings_colortheme_default": "Padrão do sistema ({0})",
|
||||
|
@ -1381,5 +1375,9 @@
|
|||
"admin_broadcastTitle": "Transmitir mensagem",
|
||||
"admin_surveyActive": "Abrir pesquisa",
|
||||
"pad_settings_width_small": "Modo de página",
|
||||
"register_notes": "<ul class=\"cp-notes-list\"><li>Sua senha é a chave secreta que criptografa todos os seus documentos. <span class=\"red\">Se você perdê-la, não haverá como recuperar seus dados.</span></li><li>Se você estiver usando um computador compartilhado, <span class=\"red\">lembre-se de fazer log out</span> quando terminar. Apenas fechar a janela do navegador deixa sua conta exposta.</li><li>Para manter os documentos que você criou e / ou armazenou sem estar logado, marque \"Importar documentos da sua sessão de visitante\".</li></ul>"
|
||||
"register_notes": "<ul class=\"cp-notes-list\"><li>Sua senha é a chave secreta que criptografa todos os seus documentos. <span class=\"red\">Se você perdê-la, não haverá como recuperar seus dados.</span></li><li>Se você estiver usando um computador compartilhado, <span class=\"red\">lembre-se de fazer log out</span> quando terminar. Apenas fechar a janela do navegador deixa sua conta exposta.</li><li>Para manter os documentos que você criou e / ou armazenou sem estar logado, marque \"Importar documentos da sua sessão de visitante\".</li></ul>",
|
||||
"ui_restore": "Restaurar",
|
||||
"ui_archive": "Arquivar",
|
||||
"ui_undefined": "desconhecido",
|
||||
"admin_documentType": "Tipo"
|
||||
}
|
||||
|
|
|
@ -20,7 +20,7 @@
|
|||
},
|
||||
"common_connectionLost": "<b>A conexão com o Servidor foi Perdida</b><br> Está agora em modo só de leitura até restaurar a conexão.",
|
||||
"typeError": "Este documento não é compatível com a aplicação selecionada",
|
||||
"onLogout": "A sua sessão foi encerrada, {0}clique aqui{1} para iniciar sessão <br>ou pressione <em>ESC</em> para aceder ao seu documento em modo só de leitura.",
|
||||
"onLogout": "A sua sessão foi encerrada, {0}clique aqui{1} para iniciar sessão <br>ou pressione Esc para aceder ao seu documento em modo só de leitura.",
|
||||
"loading": "Carregando...",
|
||||
"error": "Erro",
|
||||
"saved": "Guardar",
|
||||
|
@ -54,7 +54,7 @@
|
|||
"user_accountName": "Nome da Conta",
|
||||
"clickToEdit": "Clique para editar",
|
||||
"forgetPrompt": "Ao clicar OK, irá mover este documento para o lixo. Tem a certeza?",
|
||||
"movedToTrash": "O documento foi movido para o lixo.<br>a>Aceder ao meu Drive</a>",
|
||||
"movedToTrash": "O documento foi movido para o lixo.<br><a>Aceder ao meu Drive</a>",
|
||||
"shareButton": "Partilhar",
|
||||
"shareSuccess": "Endereço copiado para o clipboard",
|
||||
"newButton": "Novo",
|
||||
|
@ -62,7 +62,7 @@
|
|||
"saveTemplateButton": "Guardar como modelo",
|
||||
"saveTemplatePrompt": "Escolha o nome do modelo",
|
||||
"templateSaved": "Modelo guardado!",
|
||||
"selectTemplate": "Selecione um modelo ou pressione ESC",
|
||||
"selectTemplate": "Selecione um modelo ou pressione Esc",
|
||||
"previewButtonTitle": "Mostrar ou esconder o modo de visualização markdown",
|
||||
"presentButtonTitle": "Entrar em modo apresentação",
|
||||
"backgroundButtonTitle": "Mudar a cor do fundo da apresentação",
|
||||
|
@ -82,7 +82,7 @@
|
|||
"notifyLeft": "{0} saiu da sessão colaborativa",
|
||||
"okButton": "OK (Enter)",
|
||||
"cancel": "Cancelar",
|
||||
"cancelButton": "Cancelar (ESC)",
|
||||
"cancelButton": "Cancelar (Esc)",
|
||||
"historyButton": "Exibir o histórico do documento",
|
||||
"history_next": "Próxima versão",
|
||||
"history_prev": "Versão anterior",
|
||||
|
@ -218,10 +218,10 @@
|
|||
"expiredError": "Este documento atingiu seu prazo de validade e não está mais disponível.",
|
||||
"deletedError": "Este documento foi eliminado e não está mais disponível.",
|
||||
"inactiveError": "Este documento foi apagado devido a inatividade. Pressione Esc para criar um novo documento.",
|
||||
"chainpadError": "Ocorreu um erro crítico ao atualizar o seu conteúdo. Esta página está em modo só de leitura para garantir que não perde o seu trabalho.<br>Pressione <em>Esc</em> para continuar a visualizar este documento, ou recarregue-o para tentar editar novamente.",
|
||||
"chainpadError": "Ocorreu um erro crítico ao atualizar o seu conteúdo. Esta página está em modo só de leitura para garantir que não perde o seu trabalho.<br>Pressione Esc para continuar a visualizar este documento, ou recarregue-o para tentar editar novamente.",
|
||||
"invalidHashError": "O documento que pediu apresenta um URL inválido.",
|
||||
"errorCopy": " Pode continuar a usar esta versão em modo só de leitura pressionando <em>Esc</em>.",
|
||||
"errorRedirectToHome": "Pressione <em>Esc</em> para ser redirecionado para seu CryptDrive.",
|
||||
"errorCopy": " Pode continuar a usar esta versão em modo só de leitura pressionando Esc.",
|
||||
"errorRedirectToHome": "Pressione Esc para ser redirecionado para seu CryptDrive.",
|
||||
"newVersionError": "Uma nova versão do CryptPad está disponível.<br><a href='#'>Recarregue</a> para usar a nova versão, ou pressione Esc para aceder ao seu conteúdo em <b>modo offline</b>.",
|
||||
"deletedFromServer": "Documento destruído",
|
||||
"mustLogin": "Precisa de ter sessão iniciada para aceder a esta página",
|
||||
|
@ -350,7 +350,7 @@
|
|||
"settings_autostoreNo": "Manual (nunca perguntar)",
|
||||
"settings_autostoreMaybe": "Manual (sempre perguntar)",
|
||||
"settings_autostoreYes": "Automático",
|
||||
"settings_autostoreHint": "<b>Automatico</b> Todos os documentos que você visitou estão armazenados em seu CryptDrive.<br><b>Manual (sempre pergunta)<b> Se você ainda não armazenou documentos, será questionado se deseja armazená-los em seu CryptDrive.<br><b>Manual (nunca pergunta)</b> Os documentos não são armazenados automaticamente em seu CryptDrive. A opção para armazená-los estará escondida.",
|
||||
"settings_autostoreHint": "<b>Automatico</b> Todos os documentos que você visitou estão armazenados em seu CryptDrive.<br><b>Manual (sempre pergunta)</b> Se você ainda não armazenou documentos, será questionado se deseja armazená-los em seu CryptDrive.<br><b>Manual (nunca pergunta)</b> Os documentos não são armazenados automaticamente em seu CryptDrive. A opção para armazená-los estará escondida.",
|
||||
"settings_autostoreTitle": "Bloco armazenado no CryptDrive",
|
||||
"settings_resetThumbnailsDone": "Todas as miniaturas foram apagadas.",
|
||||
"settings_resetThumbnailsDescription": "Limpar todas as miniaturas de documentos armazenadas em seu navegador.",
|
||||
|
@ -443,7 +443,7 @@
|
|||
"contacts_confirmRemove": "Tem certeza de que quer remover <em>{0}</em> dos seus contactos?",
|
||||
"contacts_remove": "Remover este contacto",
|
||||
"contacts_send": "Enviar",
|
||||
"contacts_request": "<em>{0}</em> quer adiciona-lo como contacto. <b>Aceitar<b>?",
|
||||
"contacts_request": "<em>{0}</em> quer adiciona-lo como contacto. <b>Aceitar</b>?",
|
||||
"contacts_rejected": "Convite de contacto rejeitado",
|
||||
"contacts_added": "Convite de contacto aceite.",
|
||||
"contacts_title": "Contactos",
|
||||
|
@ -804,14 +804,14 @@
|
|||
"admin_diskUsageButton": "Gerar relatório",
|
||||
"admin_diskUsageHint": "Quantidade de espaço de armazenamento consumido por vários recursos do CryptPad",
|
||||
"admin_diskUsageTitle": "Uso de disco",
|
||||
"timeoutError": "Um erro interrompeu sua conexão com o servidor. <br> Pressione <em> Esc </em> para recarregar a página.",
|
||||
"timeoutError": "Um erro interrompeu sua conexão com o servidor. <br> Pressione Esc para recarregar a página.",
|
||||
"contact_email": "Email",
|
||||
"contact_chat": "Bate-papo",
|
||||
"contact_bug": "Reportar Bug",
|
||||
"contact_devHint": "Para solicitações de recursos, melhorias de usabilidade ou para dizer obrigado.",
|
||||
"contact_dev": "Contate os desenvolvedores",
|
||||
"contact_adminHint": "Para quaisquer problemas relacionados à sua conta, limite de armazenamento ou disponibilidade do serviço.\n",
|
||||
"contact_admin": "Contate os administradores",
|
||||
"contact_admin": "Contate os administradores de {0}",
|
||||
"footer_donate": "Doe",
|
||||
"admin_flushCacheDone": "Cache limpo com sucesso",
|
||||
"admin_flushCacheButton": "Limpar cache",
|
||||
|
@ -1144,15 +1144,12 @@
|
|||
"allowNotifications": "Permitir notificações",
|
||||
"archivedFromServer": "Documento arquivado",
|
||||
"restoredFromServer": "Documento restaurado",
|
||||
"admin_archiveInval": "Documento inválido",
|
||||
"admin_archiveInput2": "Senha do documento",
|
||||
"admin_archiveInput": "URL do documento",
|
||||
"admin_unarchiveButton": "Restaurar",
|
||||
"admin_unarchiveHint": "Restaurar um documento arquivado",
|
||||
"admin_unarchiveTitle": "Restaurar documentos",
|
||||
"admin_archiveButton": "Arquivar",
|
||||
"admin_archiveHint": "Tornar um documento indisponível sem apagá-lo permanentemente. Ele será colocado em um diretório de 'arquivo' e excluído após alguns dias (configurável no arquivo de configuração do servidor).",
|
||||
"admin_archiveTitle": "Arquivar documentos",
|
||||
"errorPopupBlocked": "O CryptPad precisa ser capaz de abrir novas abas para operar. Por favor, permita janelas popup na barra de endereços do seu navegador. Estas janelas nunca serão usadas para mostrar publicidade.",
|
||||
"unableToDisplay": "Incapaz de exibir o documento. Por favor, pressione Esc para recarregar a página. Se o problema persistir, favor contatar o suporte.",
|
||||
"documentID": "Identificador do documento",
|
||||
|
@ -1201,7 +1198,6 @@
|
|||
"form_pollYourAnswers": "Suas respostas",
|
||||
"form_pollTotal": "Total",
|
||||
"userlist_visitProfile": "Visitar perfil",
|
||||
"admin_getquotaButton": "Checar",
|
||||
"settings_colortheme_light": "Claro",
|
||||
"settings_colortheme_dark": "Escuro",
|
||||
"settings_cat_style": "Aparência",
|
||||
|
@ -1336,8 +1332,6 @@
|
|||
"admin_surveyTitle": "Pesquisa",
|
||||
"toolbar_degraded": "Mais de {0} editores estão atualmente presentes neste documento. A lista de usuários e o chat estão desativados para melhorar o desempenho.",
|
||||
"pad_settings_title": "Configurações do documento",
|
||||
"admin_getquotaHint": "Verifique o tamanho total dos itens contados em relação à cota de um usuário ou equipe, dada sua chave pública.",
|
||||
"admin_getquotaTitle": "Verificar o armazenamento da conta",
|
||||
"settings_colorthemeTitle": "Tema da cor",
|
||||
"settings_colorthemeHint": "Mude as cores gerais do CryptPad neste dispositivo.",
|
||||
"settings_colortheme_default": "Padrão do sistema ({0})",
|
||||
|
@ -1384,5 +1378,9 @@
|
|||
"register_notes": "<ul class=\"cp-notes-list\"><li>Sua senha é a chave secreta que criptografa todos os seus documentos. <span class=\"red\">Se você perdê-la, não haverá como recuperar seus dados.</span></li><li>Se você estiver usando um computador compartilhado, <span class=\"red\">lembre-se de fazer log out</span> quando terminar. Apenas fechar a janela do navegador deixa sua conta exposta.</li><li>Para manter os documentos que você criou e / ou armazenou sem estar logado, marque \"Importar documentos da sua sessão de visitante\".</li></ul>",
|
||||
"form_editMaxLength": "Número máximo de caracteres",
|
||||
"admin_limitPlan": "Plano: {0}",
|
||||
"todo_move": "A sua lista de tarefas está agora no kanban <b>{0}</b> na sua Drive."
|
||||
"todo_move": "A sua lista de tarefas está agora no kanban <b>{0}</b> na sua Drive.",
|
||||
"ui_restore": "Restaurar",
|
||||
"ui_archive": "Arquivar",
|
||||
"ui_undefined": "desconhecido",
|
||||
"admin_documentType": "Tipo"
|
||||
}
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
"main_title": "CryptPad: Zero Knowledge, Colaborare în timp real",
|
||||
"common_connectionLost": "<b>S-a pierdut conexiunea la server</b><br>Până la restabilirea conexiunii, vei fi în modul citire",
|
||||
"typeError": "Această filă nu este compatibilă cu aplicația aleasă",
|
||||
"onLogout": "Nu mai ești autentificat, {0}apasă aici{1} să te autentifici<br>sau apasă <em>Escape</em>să accesezi fila în modul citire.",
|
||||
"onLogout": "Nu mai ești autentificat, {0}apasă aici{1} să te autentifici<br>sau apasă Esc să accesezi fila în modul citire.",
|
||||
"loading": "Se încarcă...",
|
||||
"error": "Eroare",
|
||||
"saved": "Salvat",
|
||||
|
@ -20,7 +20,7 @@
|
|||
"upgrade": "Actualizare",
|
||||
"MB": "MB",
|
||||
"pinLimitReached": "Ai atins limita de stocare",
|
||||
"pinLimitReachedAlert": "Ai atins limita de stocare. Noile pad-uri nu vor mai fi stocate în CryptDrive.<br>Pentru a rezolva această problemă, poți să înlături pad-uri din CryptDrive-ul tău (incluzând gunoiul) sau să subscrii la un pachet premium pentru a-ți extinde spațiul de stocare.",
|
||||
"pinLimitReachedAlert": "Ai atins limita de stocare. Noile pad-uri nu vor mai fi stocate în CryptDrive.<br>Pentru a rezolva această problemă, poți să înlături pad-uri din CryptDrive-ul tău (incluzând gunoiul) sau să <a>subscrii la un pachet premium</a> pentru a-ți extinde spațiul de stocare.",
|
||||
"pinLimitNotPinned": "Ai atins limita de stocare.<br>Acest pad nu va fi stocat în CryptDrive-ul tău.",
|
||||
"pinLimitDrive": "Ai atins limita de stocare.<br>Nu poți să creezi alte pad-uri.",
|
||||
"importButtonTitle": "Importă un pad dintr-un fișier local",
|
||||
|
@ -112,7 +112,7 @@
|
|||
"fm_info_root": "Crează câte foldere tip cuib ai nevoie pentru a-ți sorta fișierele.",
|
||||
"fm_info_template": "Conține toate pad-urile stocate ca șabloane și pe care le poți refolosi atunci când creezi un nou pad.",
|
||||
"fm_info_trash": "Fișierele șterse din gunoi vor fi șterse și din \"Toate fișierele\", făcând imposibilă recuperarea fișierelor din managerul de fișiere.",
|
||||
"fm_info_anonymous": "Nu ești logat cu un cont valid așa că aceste pad-uri vor fi șterse. <a href=\"/register/\">Înscrie-te</a> sau <a href=\"/login/\">Loghează-te</a> pentru a le salva.",
|
||||
"fm_info_anonymous": "Nu ești logat cu un cont valid așa că aceste pad-uri vor fi șterse după {0} zile.<br><a href=\"/register/\">Înscrie-te</a> sau <a href=\"/login/\">Loghează-te</a> pentru a le salva. <a href=\"#docs\">Citiți mai multe despre conturile înregistrate</a>.",
|
||||
"fc_newfolder": "Folder nou",
|
||||
"fc_rename": "Redenumește",
|
||||
"fc_open": "Deschide",
|
||||
|
@ -202,10 +202,10 @@
|
|||
"expiredError": "Această filă a expirat și nu mai este disponibilă.",
|
||||
"deletedError": "Această filă a fost ștearsă de către proprietarul ei și nu mai este disponibilă.",
|
||||
"inactiveError": "Această filă a fost ștersă din motive de inactivitate. Apasă Esc pentru a crea una nouă.",
|
||||
"chainpadError": "O eroare critică a apărut in timpul updatării conținutului. Pagina rămâne în modul citire pentru a ne asigura ca nu vei pierde conținutul.<br>Apasă <em>Esc</em> pentru a continua vizualizarea acestei file sau reîncarcă pagina pentru a încerca să o editezi din nou.",
|
||||
"chainpadError": "O eroare critică a apărut in timpul updatării conținutului. Pagina rămâne în modul citire pentru a ne asigura ca nu vei pierde conținutul.<br>Apasă Esc pentru a continua vizualizarea acestei file sau reîncarcă pagina pentru a încerca să o editezi din nou.",
|
||||
"invalidHashError": "Documentul solicitat are un URL invalid.",
|
||||
"errorCopy": " Încă mai poți copia conținutul într-o altă locație prin apăsarea butonului <em>Esc</em>.<br>După ce vei părăsi această pagină ea va dispărea!",
|
||||
"errorRedirectToHome": "Apasă <em>1Esc</em>2 pentru a fi redirecționat spre CryptDrive-ul tău.",
|
||||
"errorCopy": " Încă mai poți copia conținutul într-o altă locație prin apăsarea butonului Esc.",
|
||||
"errorRedirectToHome": "Apasă Esc pentru a fi redirecționat spre CryptDrive-ul tău.",
|
||||
"newVersionError": "O nouă versiune CryptPad este disponibilă.<br><a href='#'>Reîncarcă pagina</a> pentru a folosi noua versiune, sau apasă escape pentru a-ți accesa conținutul în <b>modul offline</b>.",
|
||||
"deletedFromServer": "Pad șters de pe server",
|
||||
"mustLogin": "Trebuie să fii logat pentru a accesa această pagină.",
|
||||
|
@ -318,7 +318,7 @@
|
|||
"contacts_title": "Contacte",
|
||||
"contacts_added": "Invitația din partea contactului acceptată",
|
||||
"contacts_rejected": "Invitația din partea contactului refuzată",
|
||||
"contacts_request": "<em>{0}</em> ar dori să vă adauge la lista de contacte. <b>Acceptati<b>?",
|
||||
"contacts_request": "<em>{0}</em> ar dori să vă adauge la lista de contacte. <b>Acceptati</b>?",
|
||||
"contacts_send": "Trimite",
|
||||
"contacts_remove": "Șterge acest contact",
|
||||
"contacts_confirmRemove": "Ești sigur ca vrei să-l ștergi pe <em>1{0}</em>2 din lista de contacte?",
|
||||
|
@ -369,7 +369,7 @@
|
|||
"register_passwordTooShort": "Parolele trebuie să aibă o lungime de cel putin {0} caractere.",
|
||||
"register_whyRegister": "De ce să te înscrii?",
|
||||
"settings_cat_account": "Cont",
|
||||
"settings_cat_drive": "CrytpDrive",
|
||||
"settings_cat_drive": "CryptDrive",
|
||||
"settings_cat_cursor": "Cursor",
|
||||
"settings_cat_code": "Cod",
|
||||
"settings_cat_pad": "Rich text",
|
||||
|
@ -480,7 +480,8 @@
|
|||
"upload_cancelled": "Anulat",
|
||||
"upload_pending": "În așteptare",
|
||||
"upload_choose": "Alegeți un fișier",
|
||||
"upload_tooLargeBrief": "Fișier prea mare",
|
||||
"upload_tooLarge": "Acest fișier depășește dimensiunea maximă de încărcare permisă pentru contul dumneavoastră.",
|
||||
"upload_notEnoughSpaceBrief": "Spațiu insuficient"
|
||||
"upload_notEnoughSpaceBrief": "Spațiu insuficient",
|
||||
"ui_restore": "Restaurează",
|
||||
"admin_documentType": "Tip"
|
||||
}
|
||||
|
|
|
@ -20,16 +20,16 @@
|
|||
},
|
||||
"common_connectionLost": "<b>Нет соединения с сервером</b><br>Пока оно не восстановится, вы можете только читать.",
|
||||
"typeError": "Этот документ несовместим с выбранным приложением",
|
||||
"onLogout": "Вы вышли из учётной записи, {0}нажмите сюда{1} чтобы войти<br>или нажмите клавишу <em>Escape</em> что бы просто читать ваш документ.",
|
||||
"onLogout": "Вы вышли из учётной записи, {0}нажмите сюда{1} чтобы войти<br>или нажмите клавишу Esc что бы просто читать ваш документ.",
|
||||
"padNotPinned": "Этот документ исчезнет через 3 месяца неактивности, {0}войдите{1} или {2}зарегистируйтесь{3} чтобы сохранить его.",
|
||||
"anonymousStoreDisabled": "Администратор этого сервера CryptPad отключил хранилище для анонимных пользователей. Войдите, чтобы использовать личный CryptDrive.",
|
||||
"expiredError": "Этот документ устарел и более недоступен.",
|
||||
"deletedError": "Этот документ был удалён и более недоступен.",
|
||||
"inactiveError": "Этот документ был удалён из-за длительной неактивности. Нажмите Esc чтобы создать новый.",
|
||||
"chainpadError": "Во время обновления вашей информации произошла критическая ошибка. Документ пока доступен только для чтения, чтобы вы не потеряли свою информацию.<br>Нажмите <em>Esc</em> чтобы продолжить чтение или перезагрузите страницу и начните заново.",
|
||||
"chainpadError": "Во время обновления вашей информации произошла критическая ошибка. Документ пока доступен только для чтения, чтобы вы не потеряли свою информацию.<br>Нажмите Esc чтобы продолжить чтение или перезагрузите страницу и начните заново.",
|
||||
"invalidHashError": "Запрошенный вами документ имеет неправильный адрес URL.",
|
||||
"errorCopy": " Вы все еще можете читать текущую версию, нажав <em>Esc</em>.",
|
||||
"errorRedirectToHome": "Нажмите <em>Esc</em> чтобы перейти к вашему хранилищу.",
|
||||
"errorCopy": " Вы все еще можете читать текущую версию, нажав Esc.",
|
||||
"errorRedirectToHome": "Нажмите Esc чтобы перейти к вашему хранилищу.",
|
||||
"newVersionError": "Доступна новая версия CryptPad.<br><a href='#'>Перезагрузите</a> чтобы использовать новую версию или нажмите Esc, чтобы использовать вашу информацию в <b>оффлайн-режиме</b>.",
|
||||
"loading": "Загрузка...",
|
||||
"error": "Ошибка",
|
||||
|
@ -293,7 +293,7 @@
|
|||
"printCSS": "Пользовательские настройки вида (CSS):",
|
||||
"viewEmbedTag": "Чтобы встроить данный документ, вставьте этот iframe в нужную страницу. Вы можете настроить внешний вид используя CSS и HTML атрибуты.",
|
||||
"fm_ownedPadsName": "Собственный",
|
||||
"fm_info_anonymous": "Вы не вошли в учетную запись, поэтому срок действия ваших документов истечет через {0} дней. Они хранятся в вашем браузере, поэтому очистка истории может привести к их исчезновению.<br><a href=\"/register/\">Зарегистрируйтесь</a> или <a href=\"/login/\">Войдитеn</a> чтобы сохранить их.",
|
||||
"fm_info_anonymous": "Вы не вошли в учетную запись, поэтому срок действия ваших документов истечет через {0} дней. Они хранятся в вашем браузере, поэтому очистка истории может привести к их исчезновению.<br><a href=\"/register/\">Зарегистрируйтесь</a> или <a href=\"/login/\">Войдитеn</a> чтобы сохранить их. <a href=\"#docs\">Подробнее о зарегистрированных аккаунтах</a>.",
|
||||
"fm_burnThisDriveButton": "Удалить всю информацию, хранящуюся от CryptPad в браузере",
|
||||
"fm_tags_used": "Количество использований",
|
||||
"fm_restoreDrive": "Восстановление прежнего состояния диска. Для достижения наилучших результатов не вносите изменения в диск, пока этот процесс не будет завершен.",
|
||||
|
@ -357,7 +357,7 @@
|
|||
"settings_exportCancel": "Вы уверены, что хотите отменить экспорт? В следующий раз вам придется начинать все сначала.",
|
||||
"settings_export_reading": "Читаем ваше хранилище...",
|
||||
"settings_export_download": "Скачиваем и расшифровываем ваши документы...",
|
||||
"contacts_request": "<em>{0}</em> хотел бы добавить вас в список контактов. <b>Принять <b>?",
|
||||
"contacts_request": "<em>{0}</em> хотел бы добавить вас в список контактов. <b>Принять </b>?",
|
||||
"contacts_confirmRemove": "Вы уверены, что хотите удалить <em>1{0}</em>2 из ваших контактов?",
|
||||
"register_acceptTerms": "Я принимаю <a>условия использования</a>",
|
||||
"register_warning": "Внимание",
|
||||
|
@ -543,13 +543,10 @@
|
|||
"loading_state_3": "Загрузка общих папок",
|
||||
"documentID": "Идентификатор документа",
|
||||
"unableToDisplay": "Не могу открыть документ. Пожалуйста, нажмите Esc для обновления страницы. Если проблема сохранится, пожалуйста, обратитесь в поддержку.",
|
||||
"admin_archiveTitle": "Архивирование документов",
|
||||
"admin_archiveButton": "Архивировать",
|
||||
"admin_unarchiveTitle": "Восстановить документы",
|
||||
"admin_unarchiveHint": "Восстановить ранее архивированный документ",
|
||||
"admin_unarchiveButton": "Восстановить",
|
||||
"admin_archiveInput": "URL документа",
|
||||
"admin_archiveInval": "Неверный документ",
|
||||
"admin_archiveInput2": "Пароль документа",
|
||||
"restoredFromServer": "Документ восстановлен",
|
||||
"archivedFromServer": "Документ архивирован",
|
||||
|
@ -919,12 +916,12 @@
|
|||
"admin_diskUsageButton": "Создать отчет",
|
||||
"admin_diskUsageHint": "Объем дискового пространства, используемого различными ресурсами CryptPad",
|
||||
"admin_diskUsageTitle": "Использование диска",
|
||||
"timeoutError": "Произошла ошибка, разорвавшая ваше соединение с сервером. <br>Нажмите <em>Esc</em>, чтобы перезагрузить страницу.",
|
||||
"timeoutError": "Произошла ошибка, разорвавшая ваше соединение с сервером. <br>Нажмите Esc, чтобы перезагрузить страницу.",
|
||||
"contact_bug": "Сообщить об ошибке",
|
||||
"contact_devHint": "Для запросов новых функций, улучшений удобства использования или для того, чтобы поблагодарить.",
|
||||
"contact_dev": "Связаться с разработчиками",
|
||||
"contact_adminHint": "По любым вопросам, связанным с Вашей учетной записью, лимитом хранилища или доступностью службы.\n",
|
||||
"contact_admin": "Связаться с администраторами",
|
||||
"contact_admin": "Связаться с администраторами {0}",
|
||||
"admin_flushCacheDone": "Кеш успешно очищен",
|
||||
"admin_flushCacheButton": "Очистить кеш",
|
||||
"admin_flushCacheHint": "Заставьте пользователей скачать последние клиентские ресурсы (только если ваш сервер находится в обновлённом режиме)",
|
||||
|
@ -1098,9 +1095,6 @@
|
|||
"pad_settings_width_small": "По ширине страницы",
|
||||
"pad_settings_info": "Настройки по умолчанию для этого документа. Они будут применяться, когда новые пользователи посетят этот документ.",
|
||||
"pad_settings_title": "Параметры документа",
|
||||
"admin_getquotaButton": "Проверить",
|
||||
"admin_getquotaHint": "Проверьте общий размер элементов, посчитанных по квоте пользователя или команды с учетом их открытого ключа.",
|
||||
"admin_getquotaTitle": "Проверить хранилище аккаунта",
|
||||
"settings_colorthemeTitle": "Цветовая тема",
|
||||
"settings_colorthemeHint": "Измените общие цвета CryptPad на этом устройстве.",
|
||||
"settings_colortheme_default": "Системное значение по умолчанию ({0})",
|
||||
|
@ -1389,5 +1383,9 @@
|
|||
"broadcast_maintenance": "Техническое обслуживание запланировано между <b>{0}</b> и <b>{1}</b>. CryptPad может быть недоступен в это время.",
|
||||
"bounce_danger": "Ссылка, на которую Вы нажали, не ведёт на веб-страницу, а несёт какой-то код или данные, которые могут быть злонамеренными.\n\n(\"{0}\")\n\nCryptPad блокирует такие ссылки из соображений безопасности. Нажав OK Вы закроете данную вкладку.",
|
||||
"comments_resolve": "Пометить решённым",
|
||||
"bounce_confirm": "Вы покинете: {0}\n\nВы точно хотите перейти к \"{1}\"?"
|
||||
"bounce_confirm": "Вы покинете: {0}\n\nВы точно хотите перейти к \"{1}\"?",
|
||||
"ui_restore": "Восстановить",
|
||||
"ui_archive": "Архивировать",
|
||||
"ui_undefined": "неизвестный",
|
||||
"admin_documentType": "Тип"
|
||||
}
|
||||
|
|
|
@ -14,7 +14,7 @@
|
|||
"login_password": "Heslo",
|
||||
"login_username": "Uživatelské jméno",
|
||||
"padNotPinned": "Tento dokument expiruje za 3 měsíce neaktivity, {0}přihlašte se{1} nebo {2}se registrujte{3} pro jeho uchování.",
|
||||
"onLogout": "Jste odhlášení, {0}klikněte zde{1} pro přihlášení<br>nebo zmáčkněte <em>Escape</em> pro čtení dokumentu.",
|
||||
"onLogout": "Jste odhlášení, {0}klikněte zde{1} pro přihlášení<br>nebo zmáčkněte Esc pro čtení dokumentu.",
|
||||
"typeError": "Tento dokument není kompatibilní s vybranou aplikací",
|
||||
"common_connectionLost": "<b>Spojení se serverem ztraceno</b><br>Nyní jste v režimu čtení, dokud nebude spojení obnoveno.",
|
||||
"type": {
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue