Merge branch 'release/1.2.12'

Conflicts:
	README.md
This commit is contained in:
Marcel Klehr 2013-10-12 20:38:51 +02:00
commit 76bd25ac21
107 changed files with 1359 additions and 608 deletions

View File

@ -1,3 +1,31 @@
# 1.2.12
* NEW: Add explanations for more disconnect scenarios
* NEW: export sessioninfos so plugins can access it
* NEW: pass pad in postAceInit hook
* NEW: Add trustProxy setting. ALlows to make ep use X-forwarded-for as remoteAddress
* NEW: userLeave hook (UNDOCUMENTED)
* NEW: Plural macro for translations
* NEW: backlinks to main page in Admin pages
* NEW: New translations from translatewiki.net
* SECURITY FIX: Filter author data sent to clients
* FIX: Never keep processing a changeset if it's corrupted
* FIX: Some client-side performance fixes for webkit browsers
* FIX: Only execute listAllPads query on demand (not on start-up)
* FIX: HTML import (don't crash on malformed or blank HTML input; strip title out of html during import)
* FIX: check if uploaded file only contains ascii chars when abiword disabled
* FIX: Plugin search in /admin/plugins
* FIX: Don't create new pad if a non-existant read-only pad is accessed
* FIX: Drop messages from unknown connections (would lead to a crash after a restart)
* FIX: API: fix createGroupFor endpoint, if mapped group is deleted
* FIX: Import form for other locales
* FIX: Don't stop processing changeset queue if there is an error
* FIX: Caret movement. Chrome detects blank rows line heights as incorrect
* FIX: allow colons in password
* FIX: Polish logging of client-side errors on the server
* FIX: Username url param
* FIX: Make start script POSIX ompatible
# 1.2.11
* NEW: New Hook for outer_ace dynamic css manager and author style hook
* NEW: Bump log4js for improved logging

View File

@ -2,11 +2,11 @@
(Please talk to people on the mailing list before you change this page, see our section on [how to get in touch](https://github.com/ether/etherpad-lite#get-in-touch))
## Important note for pull requests
**Pull requests should issued against the develop branch**. We never pull directly into master.
**Pull requests should be issued against the develop branch**. We never pull directly into master.
**Our goal is to iterate in small steps. Release often, release early. Evolution instead of a revolution**
## General goals of Etherpad Lite
## General goals of Etherpad
To make sure everybody is going in the same direction:
* easy to install for admins and easy to use for people
* easy to integrate into other apps, but also usable as standalone
@ -63,3 +63,6 @@ The docs are in the `doc/` folder in the git repository, so people can easily fi
Documentation should be kept up-to-date. This means, whenever you add a new API method, add a new hook or change the database model, pack the relevant changes to the docs in the same pull request.
You can build the docs e.g. produce html, using `make docs`. At some point in the future we will provide an online documentation. The current documentation in the github wiki should always reflect the state of `master` (!), since there are no docs in master, yet.
## Testing
Front-end tests are found in the `tests/frontend/` folder in the repository. Run them by pointing your browser to `<yourdomainhere>/tests/frontend`.

View File

@ -1,4 +1,3 @@
Apache License
Version 2.0, January 2004
http://www.apache.org/licenses/
@ -187,7 +186,7 @@
same "printed page" as the copyright notice for easier
identification within third-party archives.
Copyright 2012 THE ETHERPAD FOUNDATION
Copyright 2013 THE ETHERPAD FOUNDATION
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.

View File

@ -15,7 +15,8 @@ There's also a full-featured plugin framework, allowing you to easily add your o
Finally, Etherpad comes with translations into most languages! Users are automatically delivered the correct language for their local settings.
**Visit [beta.etherpad.org](http://beta.etherpad.org) to test it live. Hosted by [Joyent](http://joyent.com)**
**Visit [beta.etherpad.org](http://beta.etherpad.org) to test it live.**
Also, check out the **[FAQ](https://github.com/ether/etherpad-lite/wiki/FAQ)**, really!
@ -51,13 +52,13 @@ Update to the latest version with `git pull origin`, then run `bin\installOnWind
You'll need gzip, git, curl, libssl develop libraries, python and gcc.
*For Debian/Ubuntu*: `apt-get install gzip git-core curl python libssl-dev pkg-config build-essential`
*For Fedora/CentOS*: `yum install gzip git-core curl python openssl-devel && yum groupinstall "Development Tools"`
*For FreeBSD*: `portinstall node node, npm and git (optional)`
*For FreeBSD*: `portinstall node, npm, git (optional)`
Additionally, you'll need [node.js](http://nodejs.org) installed, Ideally the latest stable version, be careful of installing nodejs from apt.
**As any user (we recommend creating a separate user called etherpad-lite):**
**As any user (we recommend creating a separate user called etherpad):**
1. Move to a folder where you want to install Etherpad Lite. Clone the git repository `git clone git://github.com/ether/etherpad-lite.git`
1. Move to a folder where you want to install Etherpad. Clone the git repository `git clone git://github.com/ether/etherpad-lite.git`
2. Change into the new directory containing the cloned source code `cd etherpad-lite`
Now, run `bin/run.sh` and open <http://127.0.0.1:9001> in your browser.

View File

@ -67,4 +67,4 @@ mv etherpad-lite-win.zip $START_FOLDER
echo "clean up..."
rm -rf /tmp/etherpad-lite-win
echo "Finished. You can find the zip in the Etherpad Lite root folder, it's called etherpad-lite-win.zip"
echo "Finished. You can find the zip in the Etherpad root folder, it's called etherpad-lite-win.zip"

View File

@ -337,7 +337,7 @@ function convertPad(padId, callback)
var oldName2newName = {};
//replace the authors with generated authors
// we need to do that cause etherpad saves pad local authors, etherpad lite uses them global
// we need to do that cause where the original etherpad saves pad local authors, the new (lite) etherpad uses them global
for(var i in apool.numToAttrib)
{
var key = apool.numToAttrib[i][0];

View File

@ -8,7 +8,7 @@ cmd /C node -e "" || ( echo "Please install node.js ( http://nodejs.org )" && ex
echo _
echo Checking node version...
set check_version="if(['8','10'].indexOf(process.version.split('.')[1].toString()) === -1) { console.log('You are running a wrong version of Node. Etherpad Lite requires v0.8.x or v0.10.x'); process.exit(1) }"
set check_version="if(['8','10'].indexOf(process.version.split('.')[1].toString()) === -1) { console.log('You are running a wrong version of Node. Etherpad requires v0.8.x or v0.10.x'); process.exit(1) }"
cmd /C node -e %check_version% || exit /B 1
echo _

View File

@ -2,7 +2,7 @@ This is the new load testing file: https://bitbucket.org/rbraakman/etherpad-stre
BELOW is the original load testing file.
This load tester is extremely useful for testing how many dormant clients can connect to etherpad lite.
This load tester is extremely useful for testing how many dormant clients can connect to etherpad.
TODO:
Emulate characters being typed into a pad
@ -10,7 +10,7 @@ Emulate characters being typed into a pad
HOW TO USE (from @mjd75) proper formatting at: https://github.com/ether/etherpad-lite/issues/360
Server 1:
Installed Node.js (etc), EtherPad Lite and MySQL
Installed Node.js (etc), EtherPad and MySQL
Server 2:
Installed Xvfb and PhantomJS

View File

@ -11,17 +11,17 @@ fi
ignoreRoot=0
for ARG in $*
do
if [ $ARG == '--root' ]; then
if [ "$ARG" = "--root" ]; then
ignoreRoot=1
fi
done
#Stop the script if its started as root
if [ "$(id -u)" -eq 0 ] && [ $ignoreRoot -eq 0 ]; then
echo "You shouldn't start Etherpad-Lite as root!"
echo "Please type 'Etherpad Lite rocks my socks' or supply the '--root' argument if you still want to start it as root"
echo "You shouldn't start Etherpad as root!"
echo "Please type 'Etherpad rocks my socks' or supply the '--root' argument if you still want to start it as root"
read rocks
if [ ! $rocks = "Etherpad Lite rocks my socks" ]
if [ ! $rocks = "Etherpad rocks my socks" ]
then
echo "Your input was incorrect"
exit 1

View File

@ -126,6 +126,7 @@ Called from: src/static/js/pad.js
Things in context:
1. ace - the ace object that is applied to this editor.
2. pad - the pad object of the current pad.
There doesn't appear to be any example available of this particular hook being used, but it gets fired after the editor is all set up.

View File

@ -7,7 +7,7 @@ The API gives another web application control of the pads. The basic functions a
* grant/forbid access to pads
* get/set pad content
The API is designed in a way, so you can reuse your existing user system with their permissions, and map it to etherpad lite. Means: Your web application still has to do authentication, but you can tell etherpad lite via the api, which visitors should get which permissions. This allows etherpad lite to fit into any web application and extend it with real-time functionality. You can embed the pads via an iframe into your website.
The API is designed in a way, so you can reuse your existing user system with their permissions, and map it to Etherpad. Means: Your web application still has to do authentication, but you can tell Etherpad via the api, which visitors should get which permissions. This allows Etherpad to fit into any web application and extend it with real-time functionality. You can embed the pads via an iframe into your website.
Take a look at [HTTP API client libraries](https://github.com/ether/etherpad-lite/wiki/HTTP-API-client-libraries) to see if a library in your favorite language.
@ -103,7 +103,7 @@ Responses are valid JSON in the following format:
### Authentication
Authentication works via a token that is sent with each request as a post parameter. There is a single token per Etherpad-Lite deployment. This token will be random string, generated by Etherpad-Lite at the first start. It will be saved in APIKEY.txt in the root folder of Etherpad Lite. Only Etherpad Lite and the requesting application knows this key. Token management will not be exposed through this API.
Authentication works via a token that is sent with each request as a post parameter. There is a single token per Etherpad deployment. This token will be random string, generated by Etherpad at the first start. It will be saved in APIKEY.txt in the root folder of Etherpad. Only Etherpad and the requesting application knows this key. Token management will not be exposed through this API.
### Node Interoperability
@ -132,7 +132,7 @@ creates a new group
#### createGroupIfNotExistsFor(groupMapper)
* API >= 1
this functions helps you to map your application group ids to etherpad lite group ids
this functions helps you to map your application group ids to Etherpad group ids
*Example returns:*
* `{code: 0, message:"ok", data: {groupID: g.s8oes9dhwrvt0zif}}`
@ -188,7 +188,7 @@ creates a new author
#### createAuthorIfNotExistsFor(authorMapper [, name])
* API >= 1
this functions helps you to map your application author ids to etherpad lite author ids
this functions helps you to map your application author ids to Etherpad author ids
*Example returns:*
* `{code: 0, message:"ok", data: {authorID: "a.s8oes9dhwrvt0zif"}}`

View File

@ -1,5 +1,5 @@
# Custom static files
Etherpad Lite allows you to include your own static files in the browser, by modifying the files in `static/custom`.
Etherpad allows you to include your own static files in the browser, by modifying the files in `static/custom`.
* `index.js` Javascript that'll be run in `/`
* `index.css` Stylesheet affecting `/`

View File

@ -2,7 +2,7 @@
<!-- type=misc -->
The goal of this documentation is to comprehensively explain Etherpad-Lite,
The goal of this documentation is to comprehensively explain Etherpad,
both from a reference as well as a conceptual point of view.
Where appropriate, property types, method arguments, and the arguments

View File

@ -1,2 +1,2 @@
# About this folder
We put all documentations we found about the old Etherpad together in this folder. Most of this is still valid for Etherpad Lite
We put all documentations we found about the original Etherpad together in this folder. Most of this is still valid for the current (node.js based) Etherpad.

View File

@ -1,5 +1,5 @@
# Localization
Etherpad lite provides a multi-language user interface, that's apart from your users' content, so users from different countries can collaborate on a single document, while still having the user interface displayed in their mother tongue.
Etherpad provides a multi-language user interface, that's apart from your users' content, so users from different countries can collaborate on a single document, while still having the user interface displayed in their mother tongue.
## Translating
@ -19,9 +19,9 @@ Translations will be send back to us regularly and will eventually appear in the
`/src/locales` contains files for all supported languages which contain the translated strings. Translation files are simple `*.json` files and look like this:
```json
{ "pad.modals.connected": "Connecté."
, "pad.modals.uderdup": "Ouvrir dans une nouvelle fenêtre."
, "pad.toolbar.unindent.title": "Désindenter"
{ "pad.modals.connected": "Connecté."
, "pad.modals.uderdup": "Ouvrir dans une nouvelle fenêtre."
, "pad.toolbar.unindent.title": "Dèsindenter"
, "pad.toolbar.undo.title": "Annuler (Ctrl-Z)"
, "timeslider.pageTitle": "{{appTitle}} Curseur temporel"
, ...
@ -50,7 +50,7 @@ to:
<option data-l10n-id="ep_heading.h1" value="0"></option>
```
In the javascript files of your plugin, chaneg all hardcoded messages/strings...
In the javascript files of your plugin, change all hardcoded messages/strings...
from:
```js
@ -75,7 +75,7 @@ alert(window._('pad.chat'));
*ep_your-plugin/locales/es.json*
```
{ "ep_your-plugin.h1": "Título 1"
{ "ep_your-plugin.h1": "Título 1"
}
```
@ -83,7 +83,7 @@ Everytime the http server is started, it will auto-detect your messages and merg
### Overwrite core messages
You can overwrite Etherpad Lite's core messages in your plugin's locale files.
You can overwrite Etherpad's core messages in your plugin's locale files.
For example, if you want to replace `Chat` with `Notes`, simply add...
*ep_your-plugin/locales/en.json*
@ -91,4 +91,4 @@ For example, if you want to replace `Chat` with `Notes`, simply add...
{ "ep_your-plugin.h1": "Heading 1"
, "pad.chat": "Notes"
}
```
```

View File

@ -1,5 +1,5 @@
# Plugins
Etherpad-Lite allows you to extend its functionality with plugins. A plugin registers hooks (functions) for certain events (thus certain features) in Etherpad-lite to execute its own functionality based on these events.
Etherpad allows you to extend its functionality with plugins. A plugin registers hooks (functions) for certain events (thus certain features) in Etherpad-lite to execute its own functionality based on these events.
Publicly available plugins can be found in the npm registry (see <http://npmjs.org>). Etherpad-lite's naming convention for plugins is to prefix your plugins with `ep_`. So, e.g. it's `ep_flubberworms`. Thus you can install plugins from npm, using `npm install ep_flubberworm` in etherpad-lite's root directory.
@ -104,7 +104,7 @@ Your plugin must also contain a [package definition file](http://npmjs.org/doc/j
```
## Templates
If your plugin adds or modifies the front end HTML (e.g. adding buttons or changing their functions), you should put the necessary HTML code for such operations in `templates/`, in files of type ".ejs", since Etherpad-Lite uses EJS for HTML templating. See the following link for more information about EJS: <https://github.com/visionmedia/ejs>.
If your plugin adds or modifies the front end HTML (e.g. adding buttons or changing their functions), you should put the necessary HTML code for such operations in `templates/`, in files of type ".ejs", since Etherpad uses EJS for HTML templating. See the following link for more information about EJS: <https://github.com/visionmedia/ejs>.
## Writing and running front-end tests for your plugin

View File

@ -2,12 +2,12 @@
<html lang="en">
<head>
<meta charset="utf-8">
<title>__SECTION__ - Etherpad Lite v__VERSION__ Manual &amp; Documentation</title>
<title>__SECTION__ - Etherpad v__VERSION__ Manual &amp; Documentation</title>
<link rel="stylesheet" href="assets/style.css">
</head>
<body class="apidoc" id="api-section-__FILENAME__">
<header id="header">
<h1>Etherpad-Lite v__VERSION__ Manual &amp; Documentation</h1>
<h1>Etherpad v__VERSION__ Manual &amp; Documentation</h1>
</header>
<div id="toc">

View File

@ -78,7 +78,10 @@
/* Require authorization by a module, or a user with is_admin set, see below. */
"requireAuthorization": false,
/*when you use NginX or another proxy/ load-balancer set this to true*/
"trustProxy": false,
/* Users for basic authentication. is_admin = true gives access to /admin.
If you do not uncomment this, /admin will not be available! */
/*

View File

@ -21,7 +21,7 @@
"pad.toolbar.timeslider.title": "Eslizador de tiempu",
"pad.toolbar.savedRevision.title": "Guardar revisi\u00f3n",
"pad.toolbar.settings.title": "Configuraci\u00f3n",
"pad.toolbar.embed.title": "Incrustar esti bloc",
"pad.toolbar.embed.title": "Compartir ya incrustar esti bloc",
"pad.toolbar.showusers.title": "Amosar los usuarios d'esti bloc",
"pad.colorpicker.save": "Guardar",
"pad.colorpicker.cancel": "Encaboxar",
@ -101,8 +101,7 @@
"timeslider.month.october": "d'ochobre",
"timeslider.month.november": "de payares",
"timeslider.month.december": "d'avientu",
"timeslider.unnamedauthor": "{{num}} autor an\u00f3nimu",
"timeslider.unnamedauthors": "{{num}} autores an\u00f3nimos",
"timeslider.unnamedauthors": "{{num}} {[plural(num) one: autor an\u00f3nimu, other: autores an\u00f3nimos]}",
"pad.savedrevs.marked": "Esta revisi\u00f3n marcose como revisi\u00f3n guardada",
"pad.userlist.entername": "Escribi'l to nome",
"pad.userlist.unnamed": "ensin nome",

View File

@ -101,7 +101,6 @@
"timeslider.month.october": "Oktyabr",
"timeslider.month.november": "Noyabr",
"timeslider.month.december": "Dekabr",
"timeslider.unnamedauthor": "{{num}} ads\u0131z m\u00fc\u0259llif",
"timeslider.unnamedauthors": "{{num}} ads\u0131z m\u00fc\u0259llifl\u0259r",
"pad.savedrevs.marked": "Bu versiya indi yadda\u015fa saxlanm\u0131\u015f kimi ni\u015fanland\u0131",
"pad.userlist.entername": "Ad\u0131n\u0131z\u0131 daxil et",

View File

@ -24,7 +24,7 @@
"pad.toolbar.timeslider.title": "Istor dinamek",
"pad.toolbar.savedRevision.title": "Doareo\u00f9 enrollet",
"pad.toolbar.settings.title": "Arventenno\u00f9",
"pad.toolbar.embed.title": "Enframma\u00f1 ar pad-ma\u00f1",
"pad.toolbar.embed.title": "Ranna\u00f1 hag enframma\u00f1 ar pad-ma\u00f1",
"pad.toolbar.showusers.title": "Diskwelet implijerien ar Pad",
"pad.colorpicker.save": "Enrolla\u00f1",
"pad.colorpicker.cancel": "Nulla\u00f1",
@ -104,8 +104,7 @@
"timeslider.month.october": "Here",
"timeslider.month.november": "Du",
"timeslider.month.december": "Kerzu",
"timeslider.unnamedauthor": "{{niver}} aozer dianav",
"timeslider.unnamedauthors": "Aozerien dianav",
"timeslider.unnamedauthors": "{{num}} dianav {[plural(num) one: aozer, other: aozerien ]}",
"pad.savedrevs.marked": "Merket eo an adweladenn-ma\u00f1 evel adweladenn gwiriet",
"pad.userlist.entername": "Ebarzhit hoc'h anv",
"pad.userlist.unnamed": "dizanv",

View File

@ -103,8 +103,7 @@
"timeslider.month.october": "Octubre",
"timeslider.month.november": "Novembre",
"timeslider.month.december": "Desembre",
"timeslider.unnamedauthor": "{{num}} autor sense nom",
"timeslider.unnamedauthors": "{{num}} autors sense noms",
"timeslider.unnamedauthors": "{{num}} {[plural(num) one: autor, other: autors ]} sense nom",
"pad.savedrevs.marked": "Aquesta revisi\u00f3 est\u00e0 marcada ara com a revisi\u00f3 desada",
"pad.userlist.entername": "Introdu\u00efu el vostre nom",
"pad.userlist.unnamed": "sense nom",

View File

@ -1,15 +1,17 @@
{
"@metadata": {
"authors": [
"Jakubt",
"Jezevec",
"Leanes",
"Quinn"
]
},
"index.newPad": "Nov\u00fd Pad",
"index.createOpenPad": "nebo vytvo\u0159it/otev\u0159\u00edt Pad jm\u00e9nem:",
"index.newPad": "Zalo\u017e nov\u00fd Pad",
"index.createOpenPad": "nebo vytvo\u0159/otev\u0159i Pad s n\u00e1zvem:",
"pad.toolbar.bold.title": "Tu\u010dn\u00e9 (Ctrl-B)",
"pad.toolbar.italic.title": "Kurz\u00edva (Ctrl-I)",
"pad.toolbar.underline.title": "Podtr\u017een\u00ed (Ctrl-U)",
"pad.toolbar.underline.title": "Podtr\u017een\u00e9 (Ctrl-U)",
"pad.toolbar.strikethrough.title": "P\u0159eskrtnut\u00e9",
"pad.toolbar.ol.title": "\u010c\u00edslovan\u00fd seznam",
"pad.toolbar.ul.title": "Ne\u010d\u00edslovan\u00fd seznam",
@ -17,28 +19,28 @@
"pad.toolbar.unindent.title": "P\u0159edsazen\u00ed",
"pad.toolbar.undo.title": "Zp\u011bt (Ctrl-Z)",
"pad.toolbar.redo.title": "Opakovat (Ctrl-Y)",
"pad.toolbar.clearAuthorship.title": "Vymazat barvy autorstv\u00ed",
"pad.toolbar.clearAuthorship.title": "Vymazat barvy autor\u016f",
"pad.toolbar.import_export.title": "Importovat/Exportovat z/do jin\u00fdch form\u00e1t\u016f",
"pad.toolbar.timeslider.title": "Osa \u010dasu",
"pad.toolbar.timeslider.title": "\u010casov\u00e1 osa",
"pad.toolbar.savedRevision.title": "Ulo\u017eit revizi",
"pad.toolbar.settings.title": "Nastaven\u00ed",
"pad.toolbar.embed.title": "Um\u00edstit a nasd\u00edlet tento Pad",
"pad.toolbar.embed.title": "Sd\u00edlet a um\u00edstit tento Pad",
"pad.toolbar.showusers.title": "Zobrazit u\u017eivatele u tohoto Padu",
"pad.colorpicker.save": "Ulo\u017eit",
"pad.colorpicker.cancel": "Zru\u0161it",
"pad.loading": "Na\u010d\u00edt\u00e1n\u00ed...",
"pad.passwordRequired": "Pot\u0159ebuje\u0161 zadat heslo pro p\u0159\u00edstup k tomuto Padu",
"pad.permissionDenied": "Nem\u00e1\u0161 p\u0159\u00edstupov\u00e9 opr\u00e1vn\u011bn\u00ed k tomuto Padu",
"pad.wrongPassword": "Tv\u00e9 heslo je \u0161patn\u00e9",
"pad.passwordRequired": "Pro p\u0159\u00edstup k tomuto Padu je t\u0159eba zn\u00e1t heslo",
"pad.permissionDenied": "Nem\u00e1te opr\u00e1vn\u011bn\u00ed pro p\u0159\u00edstup k tomuto Padu",
"pad.wrongPassword": "Nespr\u00e1vn\u00e9 heslo",
"pad.settings.padSettings": "Nastaven\u00ed Padu",
"pad.settings.myView": "Vlastn\u00ed pohled",
"pad.settings.stickychat": "Chat v\u017edy na obrazovce",
"pad.settings.colorcheck": "Barvy autorstv\u00ed",
"pad.settings.colorcheck": "Barvy autor\u016f",
"pad.settings.linenocheck": "\u010c\u00edsla \u0159\u00e1dk\u016f",
"pad.settings.rtlcheck": "\u010c\u00edst obsah zprava doleva?",
"pad.settings.fontType": "Typ p\u00edsma:",
"pad.settings.fontType.normal": "Norm\u00e1ln\u00ed",
"pad.settings.fontType.monospaced": "Monospace",
"pad.settings.fontType.monospaced": "Nepropor\u010dn\u00ed",
"pad.settings.globalView": "Glob\u00e1ln\u00ed pohled",
"pad.settings.language": "Jazyk:",
"pad.importExport.import_export": "Import/Export",
@ -53,11 +55,11 @@
"pad.importExport.exportdokuwiki": "DokuWiki",
"pad.importExport.abiword.innerHTML": "Importovat m\u016f\u017ee\u0161 pouze prost\u00fd text nebo HTML form\u00e1tov\u00e1n\u00ed. Pro pokro\u010dilej\u0161\u00ed funkce importu, pros\u00edm, nainstaluj \u201e\u003Ca href=\"https://github.com/ether/etherpad-lite/wiki/How-to-enable-importing-and-exporting-different-file-formats-in-Ubuntu-or-OpenSuse-or-SLES-with-AbiWord\"\u003Eabiword\u003C/a\u003E\u201c.",
"pad.modals.connected": "P\u0159ipojeno.",
"pad.modals.reconnecting": "Znovup\u0159ipojov\u00e1n\u00ed k tv\u00e9mu Padu\u2026",
"pad.modals.reconnecting": "Znovup\u0159ipojov\u00e1n\u00ed k Padu\u2026",
"pad.modals.forcereconnect": "Vynutit znovup\u0159ipojen\u00ed",
"pad.modals.userdup": "Otev\u0159eno v jin\u00e9m okn\u011b",
"pad.modals.userdup.explanation": "Zd\u00e1 se, \u017ee tento Pad je na tomto po\u010d\u00edta\u010di otev\u0159en ve v\u00edce ne\u017e jednom okn\u011b.",
"pad.modals.userdup.advice": "Pro pou\u017eit\u00ed tohoto okna se mus\u00ed\u0161 znovu p\u0159ipojit.",
"pad.modals.userdup.advice": "Pro pou\u017eit\u00ed tohoto okna je t\u0159eba se znovu p\u0159ipojit.",
"pad.modals.unauth": "Nem\u00e1te autorizaci",
"pad.modals.unauth.explanation": "Va\u0161e opr\u00e1vn\u011bn\u00ed se zm\u011bnila, zat\u00edmco jste si prohl\u00ed\u017eel/a toto okno. Zkuste se znovu p\u0159ipojit.",
"pad.modals.looping": "Odpojeno.",
@ -71,9 +73,9 @@
"pad.modals.slowcommit.cause": "M\u016f\u017ee to b\u00fdt zp\u016fsobeno probl\u00e9my s internetov\u00fdm p\u0159ipojen\u00edm.",
"pad.modals.deleted": "Odstran\u011bno.",
"pad.modals.deleted.explanation": "Tento Pad byl odebr\u00e1n.",
"pad.modals.disconnected": "Byl jsi odpojen.",
"pad.modals.disconnected": "Byl jste odpojen.",
"pad.modals.disconnected.explanation": "P\u0159ipojen\u00ed k serveru bylo p\u0159eru\u0161eno",
"pad.modals.disconnected.cause": "Server m\u016f\u017ee b\u00fdt nedostupn\u00fd. Pros\u00edm, upozorni n\u00e1s, pokud bude tento probl\u00e9m p\u0159etrv\u00e1vat.",
"pad.modals.disconnected.cause": "Server m\u016f\u017ee b\u00fdt nedostupn\u00fd. Pros\u00edme o upozorn\u011bn\u00ed, pokud by tento probl\u00e9m trval del\u0161\u00ed dobu.",
"pad.share": "Sd\u00edlet tento Pad",
"pad.share.readonly": "Jen pro \u010dten\u00ed",
"pad.share.link": "Odkaz",
@ -81,7 +83,7 @@
"pad.chat": "Chat",
"pad.chat.title": "Otev\u0159\u00edt chat tohoto Padu.",
"pad.chat.loadmessages": "Na\u010d\u00edst v\u00edce zpr\u00e1v",
"timeslider.pageTitle": "Osa \u010dasu {{appTitle}}",
"timeslider.pageTitle": "\u010casov\u00e1 osa {{appTitle}}",
"timeslider.toolbar.returnbutton": "N\u00e1vrat do Padu",
"timeslider.toolbar.authors": "Auto\u0159i:",
"timeslider.toolbar.authorsList": "Bez autor\u016f",
@ -102,15 +104,14 @@
"timeslider.month.october": "\u0159\u00edjen",
"timeslider.month.november": "listopad",
"timeslider.month.december": "prosinec",
"timeslider.unnamedauthor": "{{num}} nejmenovan\u00fd autor",
"timeslider.unnamedauthors": "{{num}} nejmenovan\u00fdch autor\u016f",
"timeslider.unnamedauthors": "{{num}} {[ plural(num) one: nejmenovan\u00fd Autor, few: nejmenovan\u00ed Auto\u0159i, other: nejmenovan\u00fdch Autor\u016f ]}",
"pad.savedrevs.marked": "Tato revize je nyn\u00ed ozna\u010dena jako ulo\u017een\u00e1",
"pad.userlist.entername": "Zadejte sv\u00e9 jm\u00e9no",
"pad.userlist.unnamed": "nejmenovan\u00fd",
"pad.userlist.guest": "Host",
"pad.userlist.deny": "Zak\u00e1zat",
"pad.userlist.approve": "Povolit",
"pad.editbar.clearcolors": "Odstranit autorsk\u00e9 barvy z cel\u00e9ho dokumentu?",
"pad.editbar.clearcolors": "Odstranit barvy autor\u016f z cel\u00e9ho dokumentu?",
"pad.impexp.importbutton": "Importovat",
"pad.impexp.importing": "Importov\u00e1n\u00ed\u2026",
"pad.impexp.confirmimport": "Import souboru p\u0159ep\u00ed\u0161e aktu\u00e1ln\u00ed text v padu. Opravdu chcete tuto akci prov\u00e9st?",

View File

@ -23,7 +23,7 @@
"pad.toolbar.timeslider.title": "Timeslider",
"pad.toolbar.savedRevision.title": "Gem Revision",
"pad.toolbar.settings.title": "Indstillinger",
"pad.toolbar.embed.title": "Integrer denne pad",
"pad.toolbar.embed.title": "Del og integrer denne pad",
"pad.toolbar.showusers.title": "Vis brugere p\u00e5 denne pad",
"pad.colorpicker.save": "Gem",
"pad.colorpicker.cancel": "Afbryd",
@ -103,8 +103,7 @@
"timeslider.month.october": "oktober",
"timeslider.month.november": "november",
"timeslider.month.december": "december",
"timeslider.unnamedauthor": "{{num}} unavngiven forfatter",
"timeslider.unnamedauthors": "{{num}} unavngivne forfattere",
"timeslider.unnamedauthors": "{{num}} {[plural(num) one: unavngiven forfatter, other: unavngivne forfattere]}",
"pad.savedrevs.marked": "Denne revision er nu markeret som en gemt revision",
"pad.userlist.entername": "Indtast dit navn",
"pad.userlist.unnamed": "ikke-navngivet",

View File

@ -104,8 +104,7 @@
"timeslider.month.october": "Oktober",
"timeslider.month.november": "November",
"timeslider.month.december": "Dezember",
"timeslider.unnamedauthor": "{{num}} unbenannter Autor",
"timeslider.unnamedauthors": "{{num}} unbenannte Autoren",
"timeslider.unnamedauthors": "{{num}} {[plural(num) one: unbenannter Autor, other: unbenannte Autoren ]}",
"pad.savedrevs.marked": "Diese Version wurde jetzt als gespeicherte Version gekennzeichnet",
"pad.userlist.entername": "Geben Sie Ihren Namen ein",
"pad.userlist.unnamed": "unbenannt",

View File

@ -2,6 +2,7 @@
"@metadata": {
"authors": [
"Evropi",
"Geraki",
"Glavkos",
"Monopatis",
"Protnet"
@ -104,8 +105,7 @@
"timeslider.month.october": "\u039f\u03ba\u03c4\u03c9\u03b2\u03c1\u03af\u03bf\u03c5",
"timeslider.month.november": "\u039d\u03bf\u03b5\u03bc\u03b2\u03c1\u03af\u03bf\u03c5",
"timeslider.month.december": "\u0394\u03b5\u03ba\u03b5\u03bc\u03b2\u03c1\u03af\u03bf\u03c5",
"timeslider.unnamedauthor": "{{num}} \u03b1\u03bd\u03ce\u03bd\u03c5\u03bc\u03bf\u03c2 \u03c3\u03c5\u03b3\u03b3\u03c1\u03b1\u03c6\u03ad\u03b1\u03c2",
"timeslider.unnamedauthors": "{{num}} \u03b1\u03bd\u03ce\u03bd\u03c5\u03bc\u03bf\u03b9 \u03c3\u03c5\u03b3\u03b3\u03c1\u03b1\u03c6\u03b5\u03af\u03c2",
"timeslider.unnamedauthors": "{{num}} {[plural(num) one: \u03b1\u03bd\u03ce\u03bd\u03c5\u03bc\u03bf\u03c2 \u03c3\u03c5\u03bd\u03c4\u03ac\u03ba\u03c4\u03b7\u03c2, other: \u03b1\u03bd\u03ce\u03bd\u03c5\u03bc\u03bf\u03b9 \u03c3\u03c5\u03bd\u03c4\u03ac\u03ba\u03c4\u03b5\u03c2]}",
"pad.savedrevs.marked": "\u0391\u03c5\u03c4\u03ae \u03b7 \u03ad\u03ba\u03b4\u03bf\u03c3\u03b7 \u03b5\u03c0\u03b9\u03c3\u03b7\u03bc\u03ac\u03bd\u03b8\u03b7\u03ba\u03b5 \u03c9\u03c2 \u03b1\u03c0\u03bf\u03b8\u03b7\u03ba\u03b5\u03c5\u03bc\u03ad\u03bd\u03b7 \u03ad\u03ba\u03b4\u03bf\u03c3\u03b7",
"pad.userlist.entername": "\u0395\u03b9\u03c3\u03ac\u03b3\u03b5\u03c4\u03b5 \u03c4\u03bf \u03cc\u03bd\u03bf\u03bc\u03ac \u03c3\u03b1\u03c2",
"pad.userlist.unnamed": "\u03b1\u03bd\u03ce\u03bd\u03c5\u03bc\u03bf\u03c2",

View File

@ -1,6 +1,7 @@
{
"index.newPad": "New Pad",
"index.createOpenPad": "or create/open a Pad with the name:",
"pad.toolbar.bold.title": "Bold (Ctrl-B)",
"pad.toolbar.italic.title": "Italic (Ctrl-I)",
"pad.toolbar.underline.title": "Underline (Ctrl-U)",
@ -18,12 +19,15 @@
"pad.toolbar.settings.title": "Settings",
"pad.toolbar.embed.title": "Share and Embed this pad",
"pad.toolbar.showusers.title": "Show the users on this pad",
"pad.colorpicker.save": "Save",
"pad.colorpicker.cancel": "Cancel",
"pad.loading": "Loading...",
"pad.passwordRequired": "You need a password to access this pad",
"pad.permissionDenied": "You do not have permission to access this pad",
"pad.wrongPassword": "Your password was wrong",
"pad.settings.padSettings": "Pad Settings",
"pad.settings.myView": "My View",
"pad.settings.stickychat": "Chat always on screen",
@ -35,6 +39,7 @@
"pad.settings.fontType.monospaced": "Monospace",
"pad.settings.globalView": "Global View",
"pad.settings.language": "Language:",
"pad.importExport.import_export": "Import/Export",
"pad.importExport.import": "Upload any text file or document",
"pad.importExport.importSuccessful": "Successful!",
@ -45,29 +50,42 @@
"pad.importExport.exportpdf": "PDF",
"pad.importExport.exportopen": "ODF (Open Document Format)",
"pad.importExport.exportdokuwiki": "DokuWiki",
"pad.importExport.abiword.innerHTML": "You only can import from plain text or html formats. For more advanced import features please <a href=\"https://github.com/ether/etherpad-lite/wiki/How-to-enable-importing-and-exporting-different-file-formats-in-Ubuntu-or-OpenSuse-or-SLES-with-AbiWord\">install abiword</a>.",
"pad.importExport.abiword.innerHTML": "You only can import from plain text or HTML formats. For more advanced import features please <a href=\"https://github.com/ether/etherpad-lite/wiki/How-to-enable-importing-and-exporting-different-file-formats-in-Ubuntu-or-OpenSuse-or-SLES-with-AbiWord\">install abiword</a>.",
"pad.modals.connected": "Connected.",
"pad.modals.reconnecting": "Reconnecting to your pad..",
"pad.modals.forcereconnect": "Force reconnect",
"pad.modals.userdup": "Opened in another window",
"pad.modals.userdup.explanation": "This pad seems to be opened in more than one browser window on this computer.",
"pad.modals.userdup.advice": "Reconnect to use this window instead.",
"pad.modals.unauth": "Not authorized",
"pad.modals.unauth.explanation": "Your permissions have changed while viewing this page. Try to reconnect.",
"pad.modals.looping": "Disconnected.",
"pad.modals.looping.explanation": "There are communication problems with the synchronization server.",
"pad.modals.looping.cause": "Perhaps you connected through an incompatible firewall or proxy.",
"pad.modals.initsocketfail": "Server is unreachable.",
"pad.modals.initsocketfail.explanation": "Couldn't connect to the synchronization server.",
"pad.modals.initsocketfail.cause": "This is probably due to a problem with your browser or your internet connection.",
"pad.modals.slowcommit": "Disconnected.",
"pad.modals.slowcommit.explanation": "The server is not responding.",
"pad.modals.slowcommit.cause": "This could be due to problems with network connectivity.",
"pad.modals.badChangeset.explanation": "An edit you have made was classified illegal by the synchronization server.",
"pad.modals.badChangeset.cause": "This could be due to a wrong server configuration or some other unexpected behaviour. Please contact the service administrator, if you feel this is an error. Try to reconnect in order to continue editing.",
"pad.modals.corruptPad.explanation": "The pad you are trying to access is corrupt.",
"pad.modals.corruptPad.cause": "This may be due to a wrong server configuration or some other unexpected behaviour. Please contact the service administrator.",
"pad.modals.deleted": "Deleted.",
"pad.modals.deleted.explanation": "This pad has been removed.",
"pad.modals.disconnected": "You have been disconnected.",
"pad.modals.disconnected.explanation": "The connection to the server was lost",
"pad.modals.disconnected.cause": "The server may be unavailable. Please notify us if this continues to happen.",
"pad.modals.disconnected.cause": "The server may be unavailable. Please notify the service administrator if this continues to happen.",
"pad.share": "Share this pad",
"pad.share.readonly": "Read only",
"pad.share.link": "Link",
@ -75,6 +93,7 @@
"pad.chat": "Chat",
"pad.chat.title": "Open the chat for this pad.",
"pad.chat.loadmessages": "Load more messages",
"timeslider.pageTitle": "{{appTitle}} Timeslider",
"timeslider.toolbar.returnbutton": "Return to pad",
"timeslider.toolbar.authors": "Authors:",
@ -83,6 +102,7 @@
"timeslider.exportCurrent": "Export current version as:",
"timeslider.version": "Version {{version}}",
"timeslider.saved": "Saved {{month}} {{day}}, {{year}}",
"timeslider.dateformat": "{{month}}/{{day}}/{{year}} {{hours}}:{{minutes}}:{{seconds}}",
"timeslider.month.january": "January",
"timeslider.month.february": "February",
@ -96,8 +116,8 @@
"timeslider.month.october": "October",
"timeslider.month.november": "November",
"timeslider.month.december": "December",
"timeslider.unnamedauthor": "{{num}} unnamed author",
"timeslider.unnamedauthors": "{{num}} unnamed authors",
"timeslider.unnamedauthors": "{{num}} unnamed {[plural(num) one: author, other: authors ]}",
"pad.savedrevs.marked": "This revision is now marked as a saved revision",
"pad.userlist.entername": "Enter your name",
"pad.userlist.unnamed": "unnamed",
@ -105,6 +125,7 @@
"pad.userlist.deny": "Deny",
"pad.userlist.approve": "Approve",
"pad.editbar.clearcolors": "Clear authorship colors on entire document?",
"pad.impexp.importbutton": "Import Now",
"pad.impexp.importing": "Importing...",
"pad.impexp.confirmimport": "Importing a file will overwrite the current text of the pad. Are you sure you want to proceed?",

View File

@ -5,9 +5,10 @@
"1": "Jacobo",
"2": "Joker",
"3": "Larjona",
"4": "Rubenwap",
"6": "Vivaelcelta",
"7": "Xuacu"
"4": "Mklehr",
"5": "Rubenwap",
"7": "Vivaelcelta",
"8": "Xuacu"
}
},
"index.newPad": "Nuevo Pad",
@ -107,8 +108,7 @@
"timeslider.month.october": "Octubre",
"timeslider.month.november": "Noviembre",
"timeslider.month.december": "Diciembre",
"timeslider.unnamedauthor": "{{num}} autor desconocido",
"timeslider.unnamedauthors": "{{num}} autores desconocidos",
"timeslider.unnamedauthors": "{{num}} {[ plural(num) one: autor desconocido, other: autores desconocidos]}",
"pad.savedrevs.marked": "Revisi\u00f3n guardada",
"pad.userlist.entername": "Escribe tu nombre",
"pad.userlist.unnamed": "an\u00f3nimo",

View File

@ -101,7 +101,6 @@
"timeslider.month.october": "Urria",
"timeslider.month.november": "Azaroa",
"timeslider.month.december": "Abendua",
"timeslider.unnamedauthor": "{{num}} izenik gabeko egilea",
"timeslider.unnamedauthors": "{{num}} izenik gabeko egileak",
"pad.savedrevs.marked": "Berrikuspen hau markatua dago gordetako berrikuspen gisa",
"pad.userlist.entername": "Sartu zure erabiltzaile izena",

View File

@ -4,8 +4,9 @@
"0": "BMRG14",
"1": "Dalba",
"2": "Ebraminio",
"4": "ZxxZxxZ",
"5": "\u0627\u0644\u0646\u0627\u0632"
"3": "Reza1615",
"5": "ZxxZxxZ",
"6": "\u0627\u0644\u0646\u0627\u0632"
}
},
"index.newPad": "\u062f\u0641\u062a\u0631\u0686\u0647 \u06cc\u0627\u062f\u062f\u0627\u0634\u062a \u062a\u0627\u0632\u0647",
@ -25,7 +26,7 @@
"pad.toolbar.timeslider.title": "\u0627\u0633\u0644\u0627\u06cc\u062f\u0631 \u0632\u0645\u0627\u0646",
"pad.toolbar.savedRevision.title": "\u0630\u062e\u06cc\u0631\u0647\u200c\u0633\u0627\u0632\u06cc \u0646\u0633\u062e\u0647",
"pad.toolbar.settings.title": "\u062a\u0646\u0638\u06cc\u0645\u0627\u062a",
"pad.toolbar.embed.title": "\u062c\u0627\u0633\u0627\u0632\u06cc \u0627\u06cc\u0646 \u062f\u0641\u062a\u0631\u0686\u0647 \u06cc\u0627\u062f\u062f\u0627\u0634\u062a",
"pad.toolbar.embed.title": "\u0627\u0634\u062a\u0631\u0627\u06a9 \u0648 \u062c\u0627\u0633\u0627\u0632\u06cc \u0627\u06cc\u0646 \u062f\u0641\u062a\u0631\u0686\u0647 \u06cc\u0627\u062f\u062f\u0627\u0634\u062a",
"pad.toolbar.showusers.title": "\u0646\u0645\u0627\u06cc\u0634 \u06a9\u0627\u0631\u0628\u0631\u0627\u0646 \u062f\u0631 \u0627\u06cc\u0646 \u062f\u0641\u062a\u0631\u0686\u0647 \u06cc\u0627\u062f\u062f\u0627\u0634\u062a",
"pad.colorpicker.save": "\u0630\u062e\u06cc\u0631\u0647",
"pad.colorpicker.cancel": "\u0644\u063a\u0648",
@ -105,7 +106,6 @@
"timeslider.month.october": "\u0627\u06a9\u062a\u0628\u0631",
"timeslider.month.november": "\u0646\u0648\u0627\u0645\u0628\u0631",
"timeslider.month.december": "\u062f\u0633\u0627\u0645\u0628\u0631",
"timeslider.unnamedauthor": "{{num}} \u0646\u0648\u06cc\u0633\u0646\u062f\u0647\u0654 \u0628\u06cc\u200c\u0646\u0627\u0645",
"timeslider.unnamedauthors": "{{num}} \u0646\u0648\u06cc\u0633\u0646\u062f\u0647\u0654 \u0628\u06cc\u200c\u0646\u0627\u0645",
"pad.savedrevs.marked": "\u0627\u06cc\u0646 \u0628\u0627\u0632\u0646\u0648\u06cc\u0633\u06cc \u0647\u0645 \u0627\u06a9\u0646\u0648\u0646 \u0628\u0647 \u0639\u0646\u0648\u0627\u0646 \u0630\u062e\u06cc\u0631\u0647 \u0634\u062f\u0647 \u0639\u0644\u0627\u0645\u062a\u200c\u06af\u0630\u0627\u0631\u06cc \u0634\u062f",
"pad.userlist.entername": "\u0646\u0627\u0645 \u062e\u0648\u062f \u0631\u0627 \u0628\u0646\u0648\u06cc\u0633\u06cc\u062f",

View File

@ -107,8 +107,7 @@
"timeslider.month.october": "lokakuu",
"timeslider.month.november": "marraskuu",
"timeslider.month.december": "joulukuu",
"timeslider.unnamedauthor": "{{num}} nimet\u00f6n tekij\u00e4",
"timeslider.unnamedauthors": "{{num}} nimet\u00f6nt\u00e4 tekij\u00e4\u00e4",
"timeslider.unnamedauthors": "{{num}} {[plural(num) one: nimet\u00f6n tekij\u00e4, other: nimet\u00f6nt\u00e4 tekij\u00e4\u00e4 ]}",
"pad.savedrevs.marked": "T\u00e4m\u00e4 versio on nyt merkitty tallennetuksi versioksi",
"pad.userlist.entername": "Kirjoita nimesi",
"pad.userlist.unnamed": "nimet\u00f6n",

View File

@ -86,8 +86,7 @@
"timeslider.month.october": "October",
"timeslider.month.november": "November",
"timeslider.month.december": "Desember",
"timeslider.unnamedauthor": "{{num}} \u00f3nevndur h\u00f8vundur",
"timeslider.unnamedauthors": "{{num}} \u00f3nevndir h\u00f8vundar",
"timeslider.unnamedauthors": "{{num}} {[plural(num) one: \u00f3nevndur rith\u00f8vundur, other: \u00f3nevndir rith\u00f8vundar ]}",
"pad.savedrevs.marked": "Henda endursko\u00f0anin er n\u00fa merkt sum ein goymd endursko\u00f0an",
"pad.userlist.entername": "Skriva t\u00edtt navn",
"pad.userlist.unnamed": "ikki-navngivi\u00f0",

View File

@ -13,18 +13,19 @@
"9": "Od1n",
"10": "Peter17",
"11": "Quenenni",
"13": "Stephane Cottin",
"14": "Tux-tn"
"12": "Rastus Vernon",
"14": "Stephane Cottin",
"15": "Tux-tn"
}
},
"index.newPad": "Nouveau Pad",
"index.createOpenPad": "ou cr\u00e9er/ouvrir un Pad intitul\u00e9 :",
"index.newPad": "Nouveau pad",
"index.createOpenPad": "ou cr\u00e9er/ouvrir un pad intitul\u00e9 :",
"pad.toolbar.bold.title": "Gras (Ctrl-B)",
"pad.toolbar.italic.title": "Italique (Ctrl-I)",
"pad.toolbar.underline.title": "Soulign\u00e9 (Ctrl-U)",
"pad.toolbar.strikethrough.title": "Barr\u00e9",
"pad.toolbar.ol.title": "Liste ordonn\u00e9e",
"pad.toolbar.ul.title": "Liste \u00e0 puces",
"pad.toolbar.ul.title": "Liste non ordonn\u00e9e",
"pad.toolbar.indent.title": "Indenter",
"pad.toolbar.unindent.title": "D\u00e9sindenter",
"pad.toolbar.undo.title": "Annuler (Ctrl-Z)",
@ -34,15 +35,15 @@
"pad.toolbar.timeslider.title": "Historique dynamique",
"pad.toolbar.savedRevision.title": "Enregistrer la r\u00e9vision",
"pad.toolbar.settings.title": "Param\u00e8tres",
"pad.toolbar.embed.title": "Partager et int\u00e9grer ce Pad",
"pad.toolbar.showusers.title": "Afficher les utilisateurs du Pad",
"pad.toolbar.embed.title": "Partager et int\u00e9grer ce pad",
"pad.toolbar.showusers.title": "Afficher les utilisateurs du pad",
"pad.colorpicker.save": "Enregistrer",
"pad.colorpicker.cancel": "Annuler",
"pad.loading": "Chargement\u2026",
"pad.passwordRequired": "Vous avez besoin d'un mot de passe pour acc\u00e9der \u00e0 ce Pad",
"pad.permissionDenied": "Il ne vous est pas permis d\u2019acc\u00e9der \u00e0 ce Pad",
"pad.wrongPassword": "Mot de passe incorrect",
"pad.settings.padSettings": "Param\u00e8tres du Pad",
"pad.passwordRequired": "Vous avez besoin d'un mot de passe pour acc\u00e9der \u00e0 ce pad",
"pad.permissionDenied": "Il ne vous est pas permis d\u2019acc\u00e9der \u00e0 ce pad",
"pad.wrongPassword": "Votre mot de passe est incorrect",
"pad.settings.padSettings": "Param\u00e8tres du pad",
"pad.settings.myView": "Ma vue",
"pad.settings.stickychat": "Toujours afficher le chat",
"pad.settings.colorcheck": "Couleurs d\u2019identification",
@ -56,7 +57,7 @@
"pad.importExport.import_export": "Importer/Exporter",
"pad.importExport.import": "Charger un texte ou un document",
"pad.importExport.importSuccessful": "R\u00e9ussi!",
"pad.importExport.export": "Exporter le Pad actuel comme :",
"pad.importExport.export": "Exporter le pad actuel comme :",
"pad.importExport.exporthtml": "HTML",
"pad.importExport.exportplain": "Texte brut",
"pad.importExport.exportword": "Microsoft Word",
@ -65,36 +66,36 @@
"pad.importExport.exportdokuwiki": "DokuWiki",
"pad.importExport.abiword.innerHTML": "Vous ne pouvez importer que des formats texte brut ou html. Pour des fonctionnalit\u00e9s d'importation plus \u00e9volu\u00e9es, veuillez \u003Ca href=\"https://github.com/ether/etherpad-lite/wiki/How-to-enable-importing-and-exporting-different-file-formats-in-Ubuntu-or-OpenSuse-or-SLES-with-AbiWord\"\u003Einstaller abiword\u003C/a\u003E.",
"pad.modals.connected": "Connect\u00e9.",
"pad.modals.reconnecting": "Reconnexion vers votre Pad...",
"pad.modals.forcereconnect": "Forcer la reconnexion.",
"pad.modals.reconnecting": "Reconnexion vers votre pad...",
"pad.modals.forcereconnect": "Forcer la reconnexion",
"pad.modals.userdup": "Ouvert dans une autre fen\u00eatre",
"pad.modals.userdup.explanation": "Il semble que ce Pad soit ouvert dans plusieurs fen\u00eatres de votre navigateur sur cet ordinateur.",
"pad.modals.userdup.explanation": "Ce pad semble \u00eatre ouvert dans plus d'une fen\u00eatre de navigateur sur cet ordinateur.",
"pad.modals.userdup.advice": "Se reconnecter en utilisant cette fen\u00eatre.",
"pad.modals.unauth": "Non autoris\u00e9",
"pad.modals.unauth.explanation": "Vos permissions ont \u00e9t\u00e9 chang\u00e9es lors de l'affichage de cette page. Essayez de vous reconnecter.",
"pad.modals.looping": "D\u00e9connect\u00e9.",
"pad.modals.looping.explanation": "Nous \u00e9prouvons un probl\u00e8me de communication au serveur de synchronisation.",
"pad.modals.looping.cause": "Il est possible que votre connexion soit prot\u00e9g\u00e9e par un pare-feu incompatible ou un serveur proxy incompatible.",
"pad.modals.looping.cause": "Il est possible que votre connexion soit prot\u00e9g\u00e9e par un pare-feu ou un serveur mandataire incompatible.",
"pad.modals.initsocketfail": "Le serveur est introuvable.",
"pad.modals.initsocketfail.explanation": "Impossible de se connecter au serveur de synchronisation.",
"pad.modals.initsocketfail.cause": "Le probl\u00e8me peut venir de votre navigateur web ou de votre connexion Internet.",
"pad.modals.initsocketfail.cause": "Ceci est probablement d\u00fb \u00e0 un probl\u00e8me avec votre navigateur ou votre connexion internet.",
"pad.modals.slowcommit": "D\u00e9connect\u00e9.",
"pad.modals.slowcommit.explanation": "Le serveur ne r\u00e9pond pas.",
"pad.modals.slowcommit.cause": "Ce probl\u00e8me peut venir d'une mauvaise connectivit\u00e9 au r\u00e9seau.",
"pad.modals.deleted": "Supprim\u00e9.",
"pad.modals.deleted.explanation": "Ce Pad a \u00e9t\u00e9 supprim\u00e9.",
"pad.modals.deleted.explanation": "Ce pad a \u00e9t\u00e9 supprim\u00e9.",
"pad.modals.disconnected": "Vous avez \u00e9t\u00e9 d\u00e9connect\u00e9.",
"pad.modals.disconnected.explanation": "La connexion au serveur a \u00e9chou\u00e9.",
"pad.modals.disconnected.cause": "Il se peut que le serveur soit indisponible. Si le probl\u00e8me persiste, veuillez nous en informer.",
"pad.share": "Partager ce Pad",
"pad.share": "Partager ce pad",
"pad.share.readonly": "Lecture seule",
"pad.share.link": "Lien",
"pad.share.emebdcode": "Lien \u00e0 int\u00e9grer",
"pad.share.emebdcode": "Incorporer un lien",
"pad.chat": "Chat",
"pad.chat.title": "Ouvrir le chat associ\u00e9 \u00e0 ce pad.",
"pad.chat.loadmessages": "Charger davantage de messages",
"timeslider.pageTitle": "Historique dynamique de {{appTitle}}",
"timeslider.toolbar.returnbutton": "Retour au Pad.",
"timeslider.toolbar.returnbutton": "Retourner au pad",
"timeslider.toolbar.authors": "Auteurs :",
"timeslider.toolbar.authorsList": "Aucun auteur",
"timeslider.toolbar.exportlink.title": "Exporter",
@ -114,8 +115,7 @@
"timeslider.month.october": "Octobre",
"timeslider.month.november": "Novembre",
"timeslider.month.december": "D\u00e9cembre",
"timeslider.unnamedauthor": "{{num}} auteur anonyme",
"timeslider.unnamedauthors": "{{num}} auteurs anonymes",
"timeslider.unnamedauthors": "{{num}} {[plural(num) one: auteur anonyme, other: auteurs anonymes ]}",
"pad.savedrevs.marked": "Cette r\u00e9vision est maintenant marqu\u00e9e comme r\u00e9vision enregistr\u00e9e",
"pad.userlist.entername": "Entrez votre nom",
"pad.userlist.unnamed": "anonyme",
@ -125,7 +125,7 @@
"pad.editbar.clearcolors": "Effacer les couleurs de paternit\u00e9 dans tout le document ?",
"pad.impexp.importbutton": "Importer maintenant",
"pad.impexp.importing": "Import en cours...",
"pad.impexp.confirmimport": "Importer un fichier \u00e9crasera le texte actuel du bloc. \u00cates-vous s\u00fbr de vouloir le faire?",
"pad.impexp.confirmimport": "Importer un fichier \u00e9crasera le texte actuel du pad. \u00cates-vous s\u00fbr de vouloir le faire?",
"pad.impexp.convertFailed": "Nous ne pouvons pas importer ce fichier. Veuillez utiliser un autre format de document ou faire un copier/coller manuel",
"pad.impexp.uploadFailed": "Le t\u00e9l\u00e9chargement a \u00e9chou\u00e9, veuillez r\u00e9essayer",
"pad.impexp.importfailed": "\u00c9chec de l'importation",

View File

@ -21,7 +21,7 @@
"pad.toolbar.timeslider.title": "Li\u00f1a do tempo",
"pad.toolbar.savedRevision.title": "Gardar a revisi\u00f3n",
"pad.toolbar.settings.title": "Configuraci\u00f3ns",
"pad.toolbar.embed.title": "Incorporar este documento",
"pad.toolbar.embed.title": "Compartir e incorporar este documento",
"pad.toolbar.showusers.title": "Mostrar os usuarios deste documento",
"pad.colorpicker.save": "Gardar",
"pad.colorpicker.cancel": "Cancelar",
@ -101,8 +101,7 @@
"timeslider.month.october": "outubro",
"timeslider.month.november": "novembro",
"timeslider.month.december": "decembro",
"timeslider.unnamedauthor": "{{num}} autor an\u00f3nimo",
"timeslider.unnamedauthors": "{{num}} autores an\u00f3nimos",
"timeslider.unnamedauthors": "{{num}} {[plural(num) one: autor an\u00f3nimo, other: autores an\u00f3nimos ]}",
"pad.savedrevs.marked": "Esta revisi\u00f3n est\u00e1 agora marcada como revisi\u00f3n gardada",
"pad.userlist.entername": "Insira o seu nome",
"pad.userlist.unnamed": "an\u00f3nimo",

View File

@ -3,7 +3,8 @@
"authors": {
"0": "Amire80",
"1": "Ofrahod",
"3": "\u05ea\u05d5\u05de\u05e8 \u05d8"
"3": "YaronSh",
"4": "\u05ea\u05d5\u05de\u05e8 \u05d8"
}
},
"index.newPad": "\u05e4\u05e0\u05e7\u05e1 \u05d7\u05d3\u05e9",
@ -103,8 +104,7 @@
"timeslider.month.october": "\u05d0\u05d5\u05e7\u05d8\u05d5\u05d1\u05e8",
"timeslider.month.november": "\u05e0\u05d5\u05d1\u05de\u05d1\u05e8",
"timeslider.month.december": "\u05d3\u05e6\u05de\u05d1\u05e8",
"timeslider.unnamedauthor": "\u05db\u05d5\u05ea\u05d1 \u05d7\u05e1\u05e8\u05be\u05e9\u05dd \u05d0\u05d7\u05d3",
"timeslider.unnamedauthors": "{{num}} \u05db\u05d5\u05ea\u05d1\u05d9\u05dd \u05d7\u05e1\u05e8\u05d9\u05be\u05e9\u05dd",
"timeslider.unnamedauthors": "{[plural(num) one: \u05d9\u05d5\u05e6\u05e8 \u05d0\u05d7\u05d3, other: {{num}} \u05d9\u05d5\u05e6\u05e8\u05d9\u05dd ]} \u05dc\u05dc\u05d0 \u05e9\u05dd",
"pad.savedrevs.marked": "\u05d2\u05e8\u05e1\u05d4 \u05d6\u05d5 \u05de\u05e1\u05d5\u05de\u05e0\u05ea \u05db\u05d2\u05e8\u05e1\u05d4 \u05e9\u05de\u05d5\u05e8\u05d4",
"pad.userlist.entername": "\u05e0\u05d0 \u05dc\u05d4\u05d6\u05d9\u05df \u05d0\u05ea \u05e9\u05de\u05da",
"pad.userlist.unnamed": "\u05dc\u05dc\u05d0 \u05e9\u05dd",

View File

@ -21,7 +21,7 @@
"pad.toolbar.timeslider.title": "Glissa-tempore",
"pad.toolbar.savedRevision.title": "Version salveguardate",
"pad.toolbar.settings.title": "Configuration",
"pad.toolbar.embed.title": "Incorporar iste pad",
"pad.toolbar.embed.title": "Divider e incorporar iste pad",
"pad.toolbar.showusers.title": "Monstrar le usatores de iste pad",
"pad.colorpicker.save": "Salveguardar",
"pad.colorpicker.cancel": "Cancellar",
@ -101,8 +101,7 @@
"timeslider.month.october": "octobre",
"timeslider.month.november": "novembre",
"timeslider.month.december": "decembre",
"timeslider.unnamedauthor": "{{num}} autor sin nomine",
"timeslider.unnamedauthors": "{{num}} autores sin nomine",
"timeslider.unnamedauthors": "{{num}} {[plural(num) one: autor, other: autores ]} sin nomine",
"pad.savedrevs.marked": "Iste version es ora marcate como version salveguardate",
"pad.userlist.entername": "Entra tu nomine",
"pad.userlist.unnamed": "sin nomine",

View File

@ -104,8 +104,7 @@
"timeslider.month.october": "ottobre",
"timeslider.month.november": "novembre",
"timeslider.month.december": "dicembre",
"timeslider.unnamedauthor": "{{num}} autore senza nome",
"timeslider.unnamedauthors": "{{num}} autori senza nome",
"timeslider.unnamedauthors": "{{num}} {[plural(num) one: autore, other: autori ]} senza nome",
"pad.savedrevs.marked": "Questa revisione \u00e8 ora contrassegnata come una versione salvata",
"pad.userlist.entername": "Inserisci il tuo nome",
"pad.userlist.unnamed": "senza nome",

View File

@ -101,8 +101,7 @@
"timeslider.month.october": "10\u6708",
"timeslider.month.november": "11\u6708",
"timeslider.month.december": "12\u6708",
"timeslider.unnamedauthor": "{{num}} \u4eba\u306e\u533f\u540d\u306e\u4f5c\u8005",
"timeslider.unnamedauthors": "{{num}} \u4eba\u306e\u533f\u540d\u306e\u4f5c\u8005",
"timeslider.unnamedauthors": "{{num}} \u4eba\u306e\u533f\u540d\u306e{[plural(num) other: \u4f5c\u8005 ]}",
"pad.savedrevs.marked": "\u3053\u306e\u7248\u3092\u3001\u4fdd\u5b58\u6e08\u307f\u306e\u7248\u3068\u3057\u3066\u30de\u30fc\u30af\u3057\u307e\u3057\u305f\u3002",
"pad.userlist.entername": "\u540d\u524d\u3092\u5165\u529b",
"pad.userlist.unnamed": "\u540d\u524d\u306a\u3057",

View File

@ -21,7 +21,7 @@
"pad.toolbar.timeslider.title": "\uc2dc\uac04\uc2ac\ub77c\uc774\ub354",
"pad.toolbar.savedRevision.title": "\ud310 \uc800\uc7a5",
"pad.toolbar.settings.title": "\uc124\uc815",
"pad.toolbar.embed.title": "\uc774 \ud328\ub4dc \ud3ec\ud568\ud558\uae30",
"pad.toolbar.embed.title": "\uc774 \ud328\ub4dc\ub97c \uacf5\uc720\ud558\uace0 \ud3ec\ud568\ud558\uae30",
"pad.toolbar.showusers.title": "\uc774 \ud328\ub4dc\uc5d0 \uc0ac\uc6a9\uc790 \ubcf4\uae30",
"pad.colorpicker.save": "\uc800\uc7a5",
"pad.colorpicker.cancel": "\ucde8\uc18c",
@ -101,8 +101,7 @@
"timeslider.month.october": "10\uc6d4",
"timeslider.month.november": "11\uc6d4",
"timeslider.month.december": "12\uc6d4",
"timeslider.unnamedauthor": "\uc774\ub984 \uc5c6\ub294 \uc800\uc790 {{num}}\uba85",
"timeslider.unnamedauthors": "\uc774\ub984 \uc5c6\ub294 \uc800\uc790 {{num}}\uba85",
"timeslider.unnamedauthors": "\uc774\ub984 \uc5c6\ub294 {[plural(num) one: \uc800\uc790, other: \uc800\uc790 ]} {{num}}\uba85",
"pad.savedrevs.marked": "\uc774 \ud310\uc740 \uc774\uc81c \uc800\uc7a5\ud55c \ud310\uc73c\ub85c \ud45c\uc2dc\ud569\ub2c8\ub2e4.",
"pad.userlist.entername": "\uc774\ub984\uc744 \uc785\ub825\ud558\uc138\uc694",
"pad.userlist.unnamed": "\uc774\ub984\uc5c6\uc74c",

View File

@ -101,8 +101,7 @@
"timeslider.month.october": "Oktoober",
"timeslider.month.november": "Nov\u00e4mber",
"timeslider.month.december": "Dez\u00e4mber",
"timeslider.unnamedauthor": "{{num}} naameloose Schriever",
"timeslider.unnamedauthors": "{{num}} naameloose Schriever",
"timeslider.unnamedauthors": "{[plural(num) one: eine, other: {{num}} ]} naameloose Schriever",
"pad.savedrevs.marked": "Heh di V\u00e4sjohn es j\u00e4z fa\u00dfjehallde.",
"pad.userlist.entername": "Jif Dinge Naame en",
"pad.userlist.unnamed": "naamelo\u00df\u00df",

View File

@ -1,8 +1,9 @@
{
"@metadata": {
"authors": [
"Robby"
]
"authors": {
"0": "Robby",
"2": "Soued031"
}
},
"index.newPad": "Neie Pad",
"pad.toolbar.ol.title": "Numer\u00e9iert L\u00ebscht",
@ -14,7 +15,7 @@
"pad.colorpicker.save": "Sp\u00e4icheren",
"pad.colorpicker.cancel": "Ofbriechen",
"pad.loading": "Lueden...",
"pad.wrongPassword": "\u00c4rt Passwuert ass falsch",
"pad.wrongPassword": "\u00c4ert Passwuert ass falsch",
"pad.settings.fontType.normal": "Normal",
"pad.settings.language": "Sprooch:",
"pad.importExport.importSuccessful": "Erfollegr\u00e4ich",

View File

@ -1,6 +1,7 @@
{
"@metadata": {
"authors": [
"Eitvys200",
"Mantak111"
]
},
@ -14,7 +15,10 @@
"pad.colorpicker.save": "I\u0161saugoti",
"pad.colorpicker.cancel": "At\u0161aukti",
"pad.loading": "\u012ekraunama...",
"pad.settings.myView": "Mano Vaizdas",
"pad.settings.fontType": "\u0160rifto tipas:",
"pad.settings.fontType.normal": "Normalus",
"pad.settings.globalView": "Bendras Vaizdas",
"pad.settings.language": "Kalba:",
"pad.importExport.import_export": "Importuoti/Eksportuoti",
"pad.importExport.import": "\u012ekelkite bet kok\u012f tekstin\u012f fail\u0105 arba dokument\u0105",
@ -57,7 +61,6 @@
"timeslider.month.october": "Spalis",
"timeslider.month.november": "Lapkritis",
"timeslider.month.december": "Gruodis",
"timeslider.unnamedauthor": "{{num}} bevardis autorius",
"timeslider.unnamedauthors": "{{num}} bevard\u017eiai(-i\u0173) autoriai(-i\u0173)",
"pad.userlist.entername": "\u012eveskite savo vard\u0105",
"pad.userlist.unnamed": "bevardis",

View File

@ -1,7 +1,9 @@
{
"@metadata": {
"authors": [
"Admresdeserv."
"Admresdeserv.",
"Jmg.cmdi",
"Papuass"
]
},
"pad.toolbar.bold.title": "Treknrakst\u0101 (CTRL + B)",
@ -16,19 +18,28 @@
"pad.toolbar.redo.title": "Atcelt atsauk\u0161anu (CTRL + Y)",
"pad.toolbar.clearAuthorship.title": "Not\u012brit autoru kr\u0101sas",
"pad.toolbar.import_export.title": "Import\u0113\u0161anas/eksport\u0113\u0161anas no un uz citu failu form\u0101tiem",
"pad.toolbar.savedRevision.title": "Saglab\u0101t p\u0101rskat\u012b\u0161anu",
"pad.toolbar.settings.title": "Iestat\u012bjumi",
"pad.toolbar.embed.title": "Koplietot un iegut \u0161o pad",
"pad.toolbar.showusers.title": "Par\u0101d\u012bt \u0161o padu lietot\u0101jus",
"pad.colorpicker.save": "Saglab\u0101t",
"pad.colorpicker.cancel": "Atcelt",
"pad.loading": "Iel\u0101d\u0113\u2026",
"pad.passwordRequired": "Ir nepiecie\u0161ama parole, lai piek\u013c\u016btu \u0161im pad",
"pad.permissionDenied": "Atvaino, bet tev nav pieejas \u0161im pad.",
"pad.wrongPassword": "J\u016bsu parole bija nepareiza",
"pad.settings.padSettings": "Pad Iestatijumi",
"pad.settings.myView": "Mans viedoklis",
"pad.settings.stickychat": "\u010cats vienm\u0113r ekr\u0101n\u0101",
"pad.settings.colorcheck": "Autor\u012bbas kr\u0101sas",
"pad.settings.linenocheck": "Rindi\u0146u numurus",
"pad.settings.rtlcheck": "Las\u012bt saturu no lab\u0101s puses uz kreiso?",
"pad.settings.fontType": "Fonta tips:",
"pad.settings.fontType.normal": "Norm\u0101ls",
"pad.settings.globalView": "Glob\u0101lu skat\u012bjumu",
"pad.settings.language": "Valoda:",
"pad.importExport.import_export": "Importet/Eksportet",
"pad.importExport.import": "Aug\u0161upiel\u0101d\u0113t jebkuru teksta failu vai dokumentu",
"pad.importExport.importSuccessful": "Veiksm\u012bgi!",
"pad.importExport.exporthtml": "HTML",
"pad.importExport.exportplain": "Vienk\u0101r\u0161a teksta",
@ -50,5 +61,26 @@
"pad.modals.disconnected.cause": "Iesp\u0113jams, ka serveris nav pieejams. L\u016bgums pazi\u0146ot mums, ja tas turpina notikt.",
"pad.share": "Koplietot \u0161o pad",
"pad.share.readonly": "Tikai las\u0101ms",
"pad.share.link": "Saite"
"pad.share.link": "Saite",
"timeslider.toolbar.authors": "Autori:",
"timeslider.toolbar.authorsList": "Nav autoru",
"timeslider.toolbar.exportlink.title": "Eksport\u0113t",
"timeslider.month.january": "Janv\u0101ris",
"timeslider.month.february": "Febru\u0101ris",
"timeslider.month.march": "Marts",
"timeslider.month.april": "Apr\u012blis",
"timeslider.month.may": "Maijs",
"timeslider.month.june": "J\u016bnijs",
"timeslider.month.july": "J\u016blijs",
"timeslider.month.august": "Augusts",
"timeslider.month.september": "Septembris",
"timeslider.month.october": "Oktobris",
"timeslider.month.november": "Novembris",
"timeslider.month.december": "Decembris",
"pad.userlist.entername": "Ievadiet savu v\u0101rdu",
"pad.userlist.unnamed": "nenosaukts",
"pad.userlist.guest": "Viesis",
"pad.impexp.importbutton": "Import\u0113t t\u016bl\u012bt",
"pad.impexp.importing": "Import\u0113...",
"pad.impexp.importfailed": "Imports neizdev\u0101s"
}

120
src/locales/map-bms.json Normal file
View File

@ -0,0 +1,120 @@
{
"@metadata": {
"authors": [
"StefanusRA"
]
},
"index.newPad": "Pad Anyar",
"index.createOpenPad": "utawa gawe/bukak Pad nganggo jeneng:",
"pad.toolbar.bold.title": "Kandhel (Ctrl-B)",
"pad.toolbar.italic.title": "Miring (Ctrl-I)",
"pad.toolbar.underline.title": "Garisngisor (Ctrl-U)",
"pad.toolbar.strikethrough.title": "Corettengaeh",
"pad.toolbar.ol.title": "Daftar nganggo nomer",
"pad.toolbar.ul.title": "Daftar ora nganggo nomer",
"pad.toolbar.indent.title": "Nggantung",
"pad.toolbar.unindent.title": "nggantung njaba",
"pad.toolbar.undo.title": "Batalna (Ctrl-Z)",
"pad.toolbar.redo.title": "Baleni (Ctrl-Y)",
"pad.toolbar.clearAuthorship.title": "Busek ''Authorship Colors''",
"pad.toolbar.import_export.title": "Impor/Ekspor sekang/maring format berkas sejen",
"pad.toolbar.timeslider.title": "Timeslider",
"pad.toolbar.savedRevision.title": "Simpen revisi",
"pad.toolbar.settings.title": "Pangaturan",
"pad.toolbar.embed.title": "Sebarna lan ''embed'' pad kiye",
"pad.toolbar.showusers.title": "Tidokna panganggo-panganggo nang pad kiye",
"pad.colorpicker.save": "Simpen",
"pad.colorpicker.cancel": "Batalna",
"pad.loading": "Muatna...",
"pad.passwordRequired": "Rika perlu tembung sandhi kanggo ngakses pad kiye",
"pad.permissionDenied": "Rika ora duwe idin kanggo ngakses pad kiye",
"pad.wrongPassword": "Tembung sandhine Rika salah",
"pad.settings.padSettings": "Pangaturan Pad",
"pad.settings.myView": "Delengane Inyong",
"pad.settings.stickychat": "Dopokan mesti nang layar",
"pad.settings.colorcheck": "Authorship colors",
"pad.settings.linenocheck": "Nomer baris",
"pad.settings.rtlcheck": "Waca isi sekang tengen maring kiwe?",
"pad.settings.fontType": "Tipe Font:",
"pad.settings.fontType.normal": "Normal",
"pad.settings.fontType.monospaced": "Monospace",
"pad.settings.globalView": "Global View",
"pad.settings.language": "Basa:",
"pad.importExport.import_export": "Impor/Ekspor",
"pad.importExport.import": "Unggahna berkas teks utawa dokumen",
"pad.importExport.importSuccessful": "Sukses!",
"pad.importExport.export": "Ekspor pad kiye dadi:",
"pad.importExport.exporthtml": "HTML",
"pad.importExport.exportplain": "t",
"pad.importExport.exportword": "Microsoft Word",
"pad.importExport.exportpdf": "PDF",
"pad.importExport.exportopen": "ODF (Open Document Format)",
"pad.importExport.exportdokuwiki": "DokuWiki",
"pad.importExport.abiword.innerHTML": "Rika mung teyeng impor sekang format plain text utawa HTML. Kanggo fitur impor sing lewih maju monggo \u003Ca href=\"https://github.com/ether/etherpad-lite/wiki/How-to-enable-importing-and-exporting-different-file-formats-in-Ubuntu-or-OpenSuse-or-SLES-with-AbiWord\"\u003Emasang abiword\u003C/a\u003E.",
"pad.modals.connected": "Nyambung.",
"pad.modals.reconnecting": "Mbaleli nyambung ming pad Rika...",
"pad.modals.forcereconnect": "Maksa nyambung maning",
"pad.modals.userdup": "Bukak nang jendela sejen",
"pad.modals.userdup.explanation": "Pad kiye kayane dibukak nang lewih sekang siji browser nang komputer kiye.",
"pad.modals.userdup.advice": "Nyambung maning nganggo jendela kiye baen.",
"pad.modals.unauth": "Not authorized",
"pad.modals.unauth.explanation": "Idin-e Rika wis diowahi dong lagi ndeleng kaca kiye. Jajal nyambung maning.",
"pad.modals.looping": "Pedot sambungane.",
"pad.modals.looping.explanation": "Pra ana masalah komunikasi karo server sinkronisasi.",
"pad.modals.looping.cause": "Ndeyan Rika gole nyambung nganggo firewall utawa proksi sing ora pas.",
"pad.modals.initsocketfail": "Server ora teyeng dihubungi.",
"pad.modals.initsocketfail.explanation": "Ora teyeng nyambung maring sinkronisasi server.",
"pad.modals.initsocketfail.cause": "Kiye ndeyan ana masalah karo perambanne Rika utawa sambungan internete Rika.",
"pad.modals.slowcommit": "Pedot sambungane.",
"pad.modals.slowcommit.explanation": "Server ora respon.",
"pad.modals.slowcommit.cause": "Kiye ndeyan ana masalah karo sambungan jaringan.",
"pad.modals.deleted": "Dibusek.",
"pad.modals.deleted.explanation": "Pad kiye wis dibusek.",
"pad.modals.disconnected": "Rika wis dipedot sambungane.",
"pad.modals.disconnected.explanation": "Sambungan maring server wis ilang",
"pad.modals.disconnected.cause": "Servere ndeyan ora ana. Monggo tidokna inyong angger kahanan kiye terus kedaden maning.",
"pad.share": "Sebarna pad kiye",
"pad.share.readonly": "Waca thok",
"pad.share.link": "Pranala",
"pad.share.emebdcode": "Embed URL",
"pad.chat": "Dopokan",
"pad.chat.title": "Buka dopokan kanggo pad kiye.",
"pad.chat.loadmessages": "Muatna pesen lewih akeh",
"timeslider.pageTitle": "{{appTitle}} Timeslider",
"timeslider.toolbar.returnbutton": "Mbalik ming pad",
"timeslider.toolbar.authors": "Penulise:",
"timeslider.toolbar.authorsList": "Ora ana penulise",
"timeslider.toolbar.exportlink.title": "Ekspor",
"timeslider.exportCurrent": "Ekspor versi sekiye dadi:",
"timeslider.version": "Versi {{version}}",
"timeslider.saved": "Simpen {{day}} {{month}} {{year}}",
"timeslider.dateformat": "{{day}}/{{month}}/{{year}} {{hours}}:{{minutes}}:{{seconds}}",
"timeslider.month.january": "Januari",
"timeslider.month.february": "Februari",
"timeslider.month.march": "Maret",
"timeslider.month.april": "April",
"timeslider.month.may": "Mei",
"timeslider.month.june": "Juni",
"timeslider.month.july": "Juli",
"timeslider.month.august": "Agustus",
"timeslider.month.september": "September",
"timeslider.month.october": "Oktober",
"timeslider.month.november": "November",
"timeslider.month.december": "Desember",
"timeslider.unnamedauthors": "{{num}} durung dijenengi {[plural(num) one: author, other: authors ]}",
"pad.savedrevs.marked": "Revisi kiye sekiye ditandani dadi revisi sing wis disimpen",
"pad.userlist.entername": "Lebokna jenenge Rika",
"pad.userlist.unnamed": "durungdijenengi",
"pad.userlist.guest": "Dayoh",
"pad.userlist.deny": "Ora olih",
"pad.userlist.approve": "Sarujuk",
"pad.editbar.clearcolors": "Busek ''authorship colors'' nang kabeh dokumen?",
"pad.impexp.importbutton": "Impor Sekiye",
"pad.impexp.importing": "Lagi ngimpor...",
"pad.impexp.confirmimport": "Ngimpor berkas bakal dadi nindih teks sekiye nang pad. Apa Rika wis mantep arep mroses kiye?",
"pad.impexp.convertFailed": "Inyong ora teyeng ngimpor berkas kiye. Jajal nganggo format dokumen sejen utawa salin-tempel manual.",
"pad.impexp.uploadFailed": "Gole ngunggah gagal, monggo dijajal maning",
"pad.impexp.importfailed": "Gole ngimpor gagal",
"pad.impexp.copypaste": "Monggo salin-tempel",
"pad.impexp.exportdisabled": "Ngekspor maring format {{type}} ora olih. Monggo takon maring administrator sisteme Rika kanggo detile."
}

View File

@ -102,8 +102,7 @@
"timeslider.month.october": "\u043e\u043a\u0442\u043e\u043c\u0432\u0440\u0438",
"timeslider.month.november": "\u043d\u043e\u0435\u043c\u0432\u0440\u0438",
"timeslider.month.december": "\u0434\u0435\u043a\u0435\u043c\u0432\u0440\u0438",
"timeslider.unnamedauthor": "{{num}} \u043d\u0435\u0438\u043c\u0435\u043d\u0443\u0432\u0430\u043d \u0430\u0432\u0442\u043e\u0440",
"timeslider.unnamedauthors": "{{num}} \u043d\u0435\u0438\u043c\u0435\u043d\u0443\u0432\u0430\u043d\u0438 \u0430\u0432\u0442\u043e\u0440\u0438",
"timeslider.unnamedauthors": "{{num}} {[plural(num) one: \u043d\u0435\u0438\u043c\u0435\u043d\u0443\u0432\u0430\u043d \u0430\u0432\u0442\u043e\u0440, other: \u043d\u0435\u0438\u043c\u0435\u043d\u0443\u0432\u0430\u043d\u0438 \u0430\u0432\u0442\u043e\u0440\u0438 ]}",
"pad.savedrevs.marked": "\u041e\u0432\u0430\u0430 \u0440\u0435\u0432\u0438\u0437\u0438\u0458\u0430 \u0441\u0435\u0433\u0430 \u0435 \u043e\u0437\u043d\u0430\u0447\u0435\u043d\u0430 \u043a\u0430\u043a\u043e \u0437\u0430\u0447\u0443\u0432\u0430\u043d\u0430",
"pad.userlist.entername": "\u0412\u043d\u0435\u0441\u0435\u0442\u0435 \u0433\u043e \u0432\u0430\u0448\u0435\u0442\u043e \u0438\u043c\u0435",
"pad.userlist.unnamed": "\u0431\u0435\u0437 \u0438\u043c\u0435",

View File

@ -1,6 +1,7 @@
{
"@metadata": {
"authors": [
"Akhilan",
"Hrishikesh.kb",
"Praveenp",
"Santhosh.thottingal"
@ -8,7 +9,7 @@
},
"index.newPad": "\u0d2a\u0d41\u0d24\u0d3f\u0d2f \u0d2a\u0d3e\u0d21\u0d4d",
"index.createOpenPad": "\u0d05\u0d32\u0d4d\u0d32\u0d46\u0d19\u0d4d\u0d15\u0d3f\u0d7d \u0d2a\u0d47\u0d30\u0d41\u0d2a\u0d2f\u0d4b\u0d17\u0d3f\u0d1a\u0d4d\u0d1a\u0d4d \u0d2a\u0d3e\u0d21\u0d4d \u0d38\u0d43\u0d37\u0d4d\u0d1f\u0d3f\u0d15\u0d4d\u0d15\u0d41\u0d15/\u0d24\u0d41\u0d31\u0d15\u0d4d\u0d15\u0d41\u0d15:",
"pad.toolbar.bold.title": "\u0d15\u0d1f\u0d4d\u0d1f\u0d3f\u0d15\u0d42\u0d1f\u0d4d\u0d1f\u0d3f\u0d2f\u0d46\u0d34\u0d41\u0d24\u0d41\u0d15 (Ctrl-B)",
"pad.toolbar.bold.title": "\u0d15\u0d1f\u0d41\u0d2a\u0d4d\u0d2a\u0d24\u0d4d\u0d24\u0d3f\u0d7d (Ctrl-B)",
"pad.toolbar.italic.title": "\u0d1a\u0d46\u0d30\u0d3f\u0d1a\u0d4d\u0d1a\u0d46\u0d34\u0d41\u0d24\u0d41\u0d15 (Ctrl-I)",
"pad.toolbar.underline.title": "\u0d05\u0d1f\u0d3f\u0d35\u0d30\u0d2f\u0d3f\u0d1f\u0d41\u0d15 (Ctrl-U)",
"pad.toolbar.strikethrough.title": "\u0d35\u0d46\u0d1f\u0d4d\u0d1f\u0d41\u0d15",
@ -103,8 +104,7 @@
"timeslider.month.october": "\u0d12\u0d15\u0d4d\u0d1f\u0d4b\u0d2c\u0d7c",
"timeslider.month.november": "\u0d28\u0d35\u0d02\u0d2c\u0d7c",
"timeslider.month.december": "\u0d21\u0d3f\u0d38\u0d02\u0d2c\u0d7c",
"timeslider.unnamedauthor": "{{num}} \u0d2a\u0d47\u0d30\u0d3f\u0d32\u0d4d\u0d32\u0d3e\u0d24\u0d4d\u0d24 \u0d30\u0d1a\u0d2f\u0d3f\u0d24\u0d3e\u0d35\u0d4d",
"timeslider.unnamedauthors": "{{num}} \u0d2a\u0d47\u0d30\u0d3f\u0d32\u0d4d\u0d32\u0d3e\u0d24\u0d4d\u0d24 \u0d30\u0d1a\u0d2f\u0d3f\u0d24\u0d3e\u0d15\u0d4d\u0d15\u0d7e",
"timeslider.unnamedauthors": "{{num}} \u0d2a\u0d47\u0d30\u0d3f\u0d32\u0d4d\u0d32\u0d3e\u0d24\u0d4d\u0d24 {[plural(num) one: \u0d30\u0d1a\u0d2f\u0d3f\u0d24\u0d3e\u0d35\u0d4d, other: \u0d30\u0d1a\u0d2f\u0d3f\u0d24\u0d3e\u0d15\u0d4d\u0d15\u0d7e }}",
"pad.savedrevs.marked": "\u0d08 \u0d28\u0d3e\u0d7e\u0d2a\u0d4d\u0d2a\u0d24\u0d3f\u0d2a\u0d4d\u0d2a\u0d4d \u0d38\u0d47\u0d35\u0d4d \u0d1a\u0d46\u0d2f\u0d4d\u0d24\u0d3f\u0d1f\u0d4d\u0d1f\u0d41\u0d33\u0d4d\u0d33 \u0d28\u0d3e\u0d7e\u0d2a\u0d4d\u0d2a\u0d24\u0d3f\u0d2a\u0d4d\u0d2a\u0d3e\u0d2f\u0d3f \u0d05\u0d1f\u0d2f\u0d3e\u0d33\u0d2a\u0d4d\u0d2a\u0d46\u0d1f\u0d41\u0d24\u0d4d\u0d24\u0d3f\u0d2f\u0d3f\u0d30\u0d3f\u0d15\u0d4d\u0d15\u0d41\u0d28\u0d4d\u0d28\u0d41",
"pad.userlist.entername": "\u0d24\u0d3e\u0d19\u0d4d\u0d15\u0d33\u0d41\u0d1f\u0d46 \u0d2a\u0d47\u0d30\u0d4d \u0d28\u0d7d\u0d15\u0d41\u0d15",
"pad.userlist.unnamed": "\u0d2a\u0d47\u0d30\u0d3f\u0d32\u0d4d\u0d32\u0d3e\u0d24\u0d4d\u0d24\u0d35",

59
src/locales/mr.json Normal file
View File

@ -0,0 +1,59 @@
{
"@metadata": {
"authors": [
"Ganeshgiram",
"V.narsikar",
"Ydyashad"
]
},
"index.newPad": "\u0928\u0935 \u092a\u093e\u0928",
"pad.toolbar.bold.title": "\u0920\u0933\u0915 (Ctrl-B)",
"pad.toolbar.italic.title": "\u0924\u093f\u0930\u092a\u0940 \u092e\u0941\u0926\u094d\u0930\u093e\u0915\u094d\u0937\u0930\u0947 (Ctrl-I)",
"pad.toolbar.underline.title": "\u0905\u0927\u094b\u0930\u0947\u0916\u0928 (Ctrl-U)",
"pad.toolbar.strikethrough.title": "\u0905\u0915\u094d\u0937\u0930\u093e\u0902\u0935\u0930 \u0915\u093e\u091f",
"pad.toolbar.savedRevision.title": "\u0906\u0935\u0943\u0924\u094d\u0924\u0940 \u091c\u0924\u0928 \u0915\u0930\u093e",
"pad.toolbar.settings.title": "\u0938\u0902\u0930\u091a\u0928\u093e",
"pad.colorpicker.save": "\u091c\u0924\u0928 \u0915\u0930\u093e",
"pad.colorpicker.cancel": "\u0930\u0926\u094d\u0926 \u0915\u0930\u093e",
"pad.loading": "\u092a\u094d\u0930\u092d\u093e\u0930\u0923 \u0915\u0930\u0940\u0924 \u0906\u0939\u0947",
"pad.wrongPassword": "\u0906\u092a\u0932\u093e \u092a\u0930\u0935\u0932\u0940\u091a\u093e \u0936\u092c\u094d\u0926 \u091a\u0942\u0915 \u0939\u094b\u0924\u093e",
"pad.settings.myView": "\u092e\u093e\u091d\u0947 \u0926\u0943\u0936\u094d\u092f",
"pad.settings.linenocheck": "\u0930\u0947\u0937\u093e\u0902\u091a\u0947 \u0915\u094d\u0930\u092e\u093e\u0902\u0915",
"pad.settings.language": "\u092d\u093e\u0937\u093e",
"pad.importExport.import_export": "\u0906\u092f\u093e\u0924/\u0928\u093f\u0930\u094d\u092f\u093e\u0924",
"pad.importExport.importSuccessful": "\u092f\u0936\u0938\u094d\u0935\u0940!",
"pad.importExport.exportplain": "\u0938\u093e\u0927\u093e \u092e\u091c\u0915\u0942\u0930",
"pad.importExport.exportword": "\u092e\u093e\u092f\u0915\u094d\u0930\u094b\u0938\u0949\u092b\u094d\u091f \u0935\u0930\u094d\u0921",
"pad.importExport.exportpdf": "\u092a\u0940\u0921\u0940\u090f\u092b",
"pad.importExport.exportopen": "\u0913\u0921\u0940\u090f\u092b(\u0913\u092a\u0928 \u0921\u0949\u0915\u094d\u092f\u0942\u092e\u0947\u0902\u091f \u092b\u0949\u0930\u092e\u0945\u091f)",
"pad.importExport.exportdokuwiki": "\u0921\u0941\u0915\u0941\u0935\u093f\u0915\u093f",
"pad.modals.connected": "\u0905\u0928\u0941\u092c\u0902\u0927\u093f\u0924",
"pad.modals.looping": "\u0905\u0928-\u0905\u0928\u0941\u092c\u0902\u0927\u093f\u0924",
"pad.modals.initsocketfail": "\u0935\u093f\u0926\u093e\u0917\u093e\u0930\u093e\u0938 \u092a\u094b\u091a \u0928\u093e\u0939\u0940.",
"pad.modals.slowcommit": "\u0905\u0928-\u0905\u0928\u0941\u092c\u0902\u0927\u093f\u0924.",
"pad.modals.deleted": "\u0935\u0917\u0933\u0932\u0947.",
"pad.modals.disconnected.cause": "\u092c\u0939\u0941\u0924\u0947\u0915 \u0938\u0930\u0935\u0930 \u0909\u092a\u0932\u092c\u094d\u0927 \u0939\u094b\u0923\u093e\u0930 \u0928\u093e\u0939\u0940\u0964 \u0905\u0938 \u0935\u093e\u0930\u0902\u0935\u093e\u0930 \u091d\u093e\u0932\u094d\u092f\u093e\u0938 \u0915\u0943\u092a\u092f\u093e \u0906\u092e\u094d\u0939\u093e\u0932\u093e \u0915\u0933\u0935\u093e\u0964",
"pad.share.link": "\u0926\u0941\u0935\u093e",
"pad.chat": "\u0917\u092a\u094d\u092a\u093e",
"timeslider.toolbar.authorsList": "\u0932\u0947\u0916\u0915 \u0928\u093e\u0939\u0940",
"timeslider.month.january": "\u091c\u093e\u0928\u0947\u0935\u093e\u0930\u0940",
"timeslider.month.february": "\u092b\u0947\u092c\u094d\u0930\u0941\u0935\u093e\u0930\u0940",
"timeslider.month.march": "\u092e\u093e\u0930\u094d\u091a",
"timeslider.month.april": "\u090f\u092a\u094d\u0930\u093f\u0932",
"timeslider.month.may": "\u092e\u0947",
"timeslider.month.june": "\u091c\u0942\u0928",
"timeslider.month.july": "\u091c\u0941\u0932\u0948",
"timeslider.month.august": "\u0911\u0917\u0938\u094d\u091f",
"timeslider.month.september": "\u0938\u092a\u094d\u091f\u0947\u0902\u092c\u0930",
"timeslider.month.october": "\u0911\u0915\u094d\u091f\u094b\u092c\u0930",
"timeslider.month.november": "\u0928\u094b\u0935\u094d\u0939\u0947\u0902\u092c\u0930",
"timeslider.month.december": "\u0921\u093f\u0938\u0947\u0902\u092c\u0930",
"pad.userlist.entername": "\u0906\u092a\u0932\u0947 \u0928\u093e\u0935 \u091f\u093e\u0915\u093e",
"pad.userlist.unnamed": "\u0928\u093f\u0928\u093e\u0935\u0940",
"pad.userlist.guest": "\u092a\u093e\u0939\u0942\u0923\u093e",
"pad.userlist.approve": "\u092e\u0902\u091c\u0942\u0930 \u0915\u0930\u093e",
"pad.impexp.importbutton": "\u0906\u0924\u093e \u0906\u092f\u093e\u0924 \u0915\u0930\u093e",
"pad.impexp.importing": "\u0906\u092f\u093e\u0924 \u0915\u0930\u0940\u0924 \u0906\u0939\u0947...",
"pad.impexp.importfailed": "\u0906\u092f\u093e\u0924 \u0905\u092f\u0936\u0938\u094d\u0935\u0940",
"pad.impexp.copypaste": "\u0915\u0943\u092a\u092f\u093e \u0928\u0915\u0932-\u0921\u0915\u0935\u093e"
}

View File

@ -21,7 +21,7 @@
"pad.toolbar.timeslider.title": "Gelangsar masa",
"pad.toolbar.savedRevision.title": "Simpan Semakan",
"pad.toolbar.settings.title": "Tetapan",
"pad.toolbar.embed.title": "Benamkan pad ini",
"pad.toolbar.embed.title": "Kongsikan dan Terapkan pad ini",
"pad.toolbar.showusers.title": "Tunjukkan pengguna pada pad ini",
"pad.colorpicker.save": "Simpan",
"pad.colorpicker.cancel": "Batalkan",
@ -101,8 +101,7 @@
"timeslider.month.october": "Oktober",
"timeslider.month.november": "November",
"timeslider.month.december": "Disember",
"timeslider.unnamedauthor": "{{num}} orang pengarang awanama",
"timeslider.unnamedauthors": "{{num}} orang pengarang awanama",
"timeslider.unnamedauthors": "{{num}} orang {[plural(num) other: pengarang]} awanama",
"pad.savedrevs.marked": "Semakan ini telah ditandai sebagai semakan tersimpan",
"pad.userlist.entername": "Taipkan nama anda",
"pad.userlist.unnamed": "tanpa nama",

View File

@ -101,7 +101,6 @@
"timeslider.month.october": "oktober",
"timeslider.month.november": "november",
"timeslider.month.december": "desember",
"timeslider.unnamedauthor": "{{num}} navnl\u00f8se forfattere",
"timeslider.unnamedauthors": "{{num}} navnl\u00f8se forfattere",
"pad.savedrevs.marked": "Denne revisjonen er n\u00e5 markert som en lagret revisjon",
"pad.userlist.entername": "Skriv inn ditt navn",

121
src/locales/nds.json Normal file
View File

@ -0,0 +1,121 @@
{
"@metadata": {
"authors": [
"Gthoele",
"Joachim Mos"
]
},
"index.newPad": "Nee'et Pad",
"index.createOpenPad": "oder Pad mit d\u00fcssen Naam apen maken:",
"pad.toolbar.bold.title": "Fett (Strg-B)",
"pad.toolbar.italic.title": "Kursiv (Strg-I)",
"pad.toolbar.underline.title": "Mit Streek dor \u00fcnner (Strg-U)",
"pad.toolbar.strikethrough.title": "Mit Streek dor d\u00f6r",
"pad.toolbar.ol.title": "List na Nummern",
"pad.toolbar.ul.title": "List ahn Nummern",
"pad.toolbar.indent.title": "Text na rechts",
"pad.toolbar.unindent.title": "Text na links",
"pad.toolbar.undo.title": "Een Stapp retuur (Strg-Z)",
"pad.toolbar.redo.title": "Noch mal (Strg-Y)",
"pad.toolbar.clearAuthorship.title": "Kl\u00f6\u00f6r vun den Schriever wegnehmen",
"pad.toolbar.import_export.title": "Rinhalen/Rutgeven in verscheden Dateiformate",
"pad.toolbar.timeslider.title": "Geschicht vun de Pad-Faten wiesen",
"pad.toolbar.savedRevision.title": "Faten sekern",
"pad.toolbar.settings.title": "Instellungen",
"pad.toolbar.embed.title": "D\u00fct Pad verdelen oder annerswo ringeven",
"pad.toolbar.showusers.title": "Wokeen is online?",
"pad.colorpicker.save": "Spiekern",
"pad.colorpicker.cancel": "Afbreken",
"pad.loading": "L\u00e4\u00e4dt\u2026",
"pad.passwordRequired": "Du bruukst en Passwoort, wenn du in d\u00fct Pad rinwullt",
"pad.permissionDenied": "In d\u00fct Pad dr\u00f6ffst du nich rin",
"pad.wrongPassword": "Dien Passwoort weer nich richtig",
"pad.settings.padSettings": "So is dat Pad instellt",
"pad.settings.myView": "So heff ik dat instellt",
"pad.settings.stickychat": "Chat j\u00fcmmers wiesen",
"pad.settings.colorcheck": "Kl\u00f6ren vun de Schrievers wiesen",
"pad.settings.linenocheck": "Nummer vun de Reeg",
"pad.settings.rtlcheck": "Lees Pad vun rechts nach links",
"pad.settings.fontType": "Schriftoort:",
"pad.settings.fontType.normal": "Normaal",
"pad.settings.fontType.monospaced": "Monospace",
"pad.settings.globalView": "Ansicht f\u00f6r all",
"pad.settings.language": "Spraak:",
"pad.importExport.import_export": "Rinhalen/Rutgeven",
"pad.importExport.import": "Datei oder Dokument hoochladen",
"pad.importExport.importSuccessful": "Hett slumpt!",
"pad.importExport.export": "D\u00fct Pad rutgeven as:",
"pad.importExport.exporthtml": "HTML",
"pad.importExport.exportplain": "Textdatei",
"pad.importExport.exportword": "Microsoft Word",
"pad.importExport.exportpdf": "PDF",
"pad.importExport.exportopen": "ODF (Open Document Format)",
"pad.importExport.exportdokuwiki": "DokuWiki",
"pad.importExport.abiword.innerHTML": "Se k\u00f6\u00f6nt blots wat vun Kloortext oder HTML-St\u00fccken r\u00f6verhalen. Mit \u003Ca href=\"https://github.com/ether/etherpad-lite/wiki/How-to-enable-importing-and-exporting-different-file-formats-in-Ubuntu-or-OpenSuse-or-SLES-with-AbiWord\"\u003E k\u00f6\u00f6nt Se ok anner Saken r\u00f6verhalen. Dorf\u00f6r m\u00f6\u00f6t Se bidde abiword inrichten\u003C/a\u003E.",
"pad.modals.connected": "Verbindung steiht.",
"pad.modals.reconnecting": "En Verbindung wedder opboen ...",
"pad.modals.forcereconnect": "Noch mal verbinnen",
"pad.modals.userdup": "In en anner Fenster op",
"pad.modals.userdup.explanation": "Dat lett, d\u00fct Pat is op d\u00fcssen Reekner in mehr as een Browser-Fenster op.",
"pad.modals.userdup.advice": "Wullt du d\u00fct Fenster bruken, bidde noch mal de Verbindung opboen.",
"pad.modals.unauth": "Nich freegeven.",
"pad.modals.unauth.explanation": "Du hest nu anner Rechten f\u00f6r d\u00fct Pad. Maak dat bidde noch mal wedder nee op.",
"pad.modals.looping": "Verbindung steiht nich mehr.",
"pad.modals.looping.explanation": "Dat gifft Kummer bi de Verbindung mit den Pad-Server.",
"pad.modals.looping.cause": "Mag ween un du hest Verbindung mit den Padserver \u00f6ver en Firewall, de nich passt, oder en Proxy, de nich passt.",
"pad.modals.initsocketfail": "Wi k\u00f6\u00f6nt den Pad-Server nich faat kriegen.",
"pad.modals.initsocketfail.explanation": "De Verbindung mit den Pad-Server hett nich klappt.",
"pad.modals.initsocketfail.cause": "Mag ween un dat liggt an dien Browser oder an dien Internet-Verbindung.",
"pad.modals.slowcommit": "Verbindung steiht nich mehr.",
"pad.modals.slowcommit.explanation": "De Pad-Server gifft keen Antwoort.",
"pad.modals.slowcommit.cause": "Kunn wenn un dat liggt an dat Nettwark, oder dor arbeidt j\u00fcst to veel L\u00fc\u00fcd op den Pad-Server.",
"pad.modals.deleted": "Weg is dat!",
"pad.modals.deleted.explanation": "D\u00fct Pad is nu weg.",
"pad.modals.disconnected": "De Kuntakt is afreten.",
"pad.modals.disconnected.explanation": "De Kuntakt mit den Pad-Server is afreten.",
"pad.modals.disconnected.cause": "Mag ween un wi k\u00f6\u00f6nt den Pad-Server j\u00fcst nich faat kriegen. Schull dat so wiedergahn, segg man Bescheed.",
"pad.share": "D\u00fct Pad ok anner L\u00fc\u00fcd wiesen",
"pad.share.readonly": "Se k\u00f6\u00f6nt hier j\u00fcst blots lesen",
"pad.share.link": "Link",
"pad.share.emebdcode": "In Websiet ringeven",
"pad.chat": "Chat",
"pad.chat.title": "Den Chat vun d\u00fct Pad apen maken",
"pad.chat.loadmessages": "Mehr Narichten laden",
"timeslider.pageTitle": "{{appTitle}} \u00d6llere Faten vun dat Pad",
"timeslider.toolbar.returnbutton": "Retuur na dat Pad",
"timeslider.toolbar.authors": "Schrievers:",
"timeslider.toolbar.authorsList": "keen Schrievers",
"timeslider.toolbar.exportlink.title": "Rutschicken",
"timeslider.exportCurrent": "Schick d\u00fcsse Faten rut as:",
"timeslider.version": "Faten {{version}}",
"timeslider.saved": "Sekert an den {{day}}.{{month}}.{{year}}",
"timeslider.dateformat": "{{day}}.{{month}}.{{year}} {{hours}}:{{minutes}}:{{seconds}}",
"timeslider.month.january": "Januar",
"timeslider.month.february": "Februar",
"timeslider.month.march": "M\u00e4rz",
"timeslider.month.april": "April",
"timeslider.month.may": "Mai",
"timeslider.month.june": "Juni",
"timeslider.month.july": "Juli",
"timeslider.month.august": "August",
"timeslider.month.september": "September",
"timeslider.month.october": "Oktober",
"timeslider.month.november": "November",
"timeslider.month.december": "Dezember",
"timeslider.unnamedauthors": "{{num}} Schriever ohn Naam {[plural(num) one: Schriever, other: Schrievers ]}",
"pad.savedrevs.marked": "D\u00fcsse Faten hett nu dat Teken: sekerte Faten",
"pad.userlist.entername": "Schriev dien Naam",
"pad.userlist.unnamed": "hett keen Naam",
"pad.userlist.guest": "Bes\u00f6ker",
"pad.userlist.deny": "Deit uns Leed, wieder geiht dat nich",
"pad.userlist.approve": "Man to!",
"pad.editbar.clearcolors": "Kl\u00f6ren vun de Schrievers in dat ganze Dokument tor\u00fcchsetten?",
"pad.impexp.importbutton": "Nu rinhalen",
"pad.impexp.importing": "Haal dat rin \u2026",
"pad.impexp.confirmimport": "Wenn du nu en Datei rinhaalst, warrt de Text in dat Pad \u00f6verschreven. Wullt du w\u00fcrklich wieder maken?",
"pad.impexp.convertFailed": "Wi k\u00f6\u00f6nt d\u00fcsse Datei nich rinhalen. \u00c4nnert Se bidde dat Format vun dat Dokument oder haalt Se den Text mit de Hand rin.",
"pad.impexp.uploadFailed": "Dat Hoochladen hett nich slumpt. Vers\u00f6\u00f6k dat man noch mal.",
"pad.impexp.importfailed": "Dat Rinhalen hett nich slumpt",
"pad.impexp.copypaste": "Bidde koperen un rinsetten",
"pad.impexp.exportdisabled": "Du kannst dat nich in dat {{type}}-Format rutschicken. Wenn du mehr weten wullt, fraag man den Systemadministrator."
}

View File

@ -47,7 +47,7 @@
"pad.importExport.exporthtml": "HTML",
"pad.importExport.exportplain": "Tekst zonder opmaak",
"pad.importExport.exportword": "Microsoft Word",
"pad.importExport.exportpdf": "PDF",
"pad.importExport.exportpdf": "Pdf",
"pad.importExport.exportopen": "ODF (Open Document Format)",
"pad.importExport.exportdokuwiki": "DokuWiki",
"pad.importExport.abiword.innerHTML": "U kunt alleen importeren vanuit platte tekst of een HTML-opmaak. \u003Ca href=\"https://github.com/ether/etherpad-lite/wiki/How-to-enable-importing-and-exporting-different-file-formats-in-Ubuntu-or-OpenSuse-or-SLES-with-AbiWord\"\u003EInstalleer abiword\u003C/a\u003E om meer geavanceerde importmogelijkheden te krijgen.",
@ -101,8 +101,7 @@
"timeslider.month.october": "oktober",
"timeslider.month.november": "november",
"timeslider.month.december": "december",
"timeslider.unnamedauthor": "{{num}} onbekende auteur",
"timeslider.unnamedauthors": "{{num}} onbekende auteurs",
"timeslider.unnamedauthors": "{{num}} onbekende {[plural(num) one: auteur, other: auteurs ]}",
"pad.savedrevs.marked": "Deze versie is nu gemarkeerd als opgeslagen versie",
"pad.userlist.entername": "Geef uw naam op",
"pad.userlist.unnamed": "zonder naam",

View File

@ -101,8 +101,7 @@
"timeslider.month.october": "Octobre",
"timeslider.month.november": "Novembre",
"timeslider.month.december": "Decembre",
"timeslider.unnamedauthor": "{{num}} autor anonime",
"timeslider.unnamedauthors": "{{num}} autors anonimes",
"timeslider.unnamedauthors": "{{num}} {[plural(num) one: autor anonim, other: autors anonims ]}",
"pad.savedrevs.marked": "Aquesta revision es ara marcada coma revision enregistrada",
"pad.userlist.entername": "Entratz v\u00f2stre nom",
"pad.userlist.unnamed": "sens nom",

View File

@ -101,7 +101,6 @@
"timeslider.month.october": "\u043e\u043a\u0442\u044f\u0431\u0440\u044c",
"timeslider.month.november": "\u043d\u043e\u044f\u0431\u0440\u044c",
"timeslider.month.december": "\u0434\u0435\u043a\u0430\u0431\u0440\u044c",
"timeslider.unnamedauthor": "{{num}} \u04d5\u043d\u04d5\u043d\u043e\u043c \u0444\u044b\u0441\u0441\u04d5\u0433",
"timeslider.unnamedauthors": "{{num}} \u04d5\u043d\u04d5\u043d\u043e\u043c \u0444\u044b\u0441\u0441\u04d5\u0434\u0436\u044b",
"pad.savedrevs.marked": "\u0410\u0446\u044b \u0444\u04d5\u043b\u0442\u04d5\u0440 \u043d\u044b\u0440 \u043a\u0443\u044b\u0434 \u04d5\u0432\u04d5\u0440\u0434 \u0444\u04d5\u043b\u0442\u04d5\u0440 \u043d\u044b\u0441\u0430\u043d\u0433\u043e\u043d\u0434 \u04d5\u0440\u0446\u044b\u0434",
"pad.userlist.entername": "\u0414\u04d5 \u043d\u043e\u043c \u0431\u0430\u0444\u044b\u0441\u0441",

View File

@ -90,7 +90,6 @@
"timeslider.month.october": "\u0a05\u0a15\u0a24\u0a42\u0a2c\u0a30",
"timeslider.month.november": "\u0a28\u0a35\u0a70\u0a2c\u0a30",
"timeslider.month.december": "\u0a26\u0a38\u0a70\u0a2c\u0a30",
"timeslider.unnamedauthor": "{{num}} \u0a2c\u0a47\u0a28\u0a3e\u0a2e \u0a32\u0a47\u0a16\u0a15",
"timeslider.unnamedauthors": "{{num}} \u0a2c\u0a47\u0a28\u0a3e\u0a2e \u0a32\u0a47\u0a16\u0a15",
"pad.savedrevs.marked": "\u0a07\u0a39 \u0a30\u0a40\u0a35\u0a3f\u0a1c\u0a3c\u0a28 \u0a28\u0a42\u0a70 \u0a39\u0a41\u0a23 \u0a38\u0a70\u0a2d\u0a3e\u0a32\u0a47 \u0a39\u0a4b\u0a0f \u0a30\u0a40\u0a35\u0a3f\u0a1c\u0a3c\u0a28 \u0a35\u0a1c\u0a4b\u0a02 \u0a2e\u0a70\u0a28\u0a3f\u0a06 \u0a17\u0a3f\u0a06 \u0a39\u0a48",
"pad.userlist.entername": "\u0a06\u0a2a\u0a23\u0a3e \u0a28\u0a3e\u0a02 \u0a26\u0a3f\u0a09",

View File

@ -104,8 +104,7 @@
"timeslider.month.october": "Pa\u017adziernik",
"timeslider.month.november": "Listopad",
"timeslider.month.december": "Grudzie\u0144",
"timeslider.unnamedauthor": "{{num}} nienazwany autor",
"timeslider.unnamedauthors": "{{num}} autor\u00f3w bez nazw",
"timeslider.unnamedauthors": "{{num}} {[plural(num) one: autor, other: autor\u00f3w ]} bez nazw",
"pad.savedrevs.marked": "Ta wersja zosta\u0142a w\u0142a\u015bnie oznaczona jako zapisana.",
"pad.userlist.entername": "Wprowad\u017a swoj\u0105 nazw\u0119",
"pad.userlist.unnamed": "bez nazwy",

View File

@ -32,7 +32,7 @@
"pad.importExport.exportword": "\u0645\u0627\u064a\u06a9\u0631\u0648\u0633\u0627\u0641\u067c \u0648\u0631\u0689",
"pad.importExport.exportpdf": "\u067e\u064a \u0689\u064a \u0627\u06d0\u0641",
"pad.importExport.exportopen": "ODF (\u0627\u0648\u067e\u0646 \u0689\u0627\u06a9\u0648\u0645\u0646\u067c \u0641\u0627\u0631\u0645\u067c)",
"pad.modals.deleted": "\u0693\u0646\u06ab \u0634\u0648.",
"pad.modals.deleted": "\u0693\u0646\u06af \u0634\u0648.",
"pad.share.readonly": "\u064a\u0648\u0627\u0632\u06d0 \u0644\u0648\u0633\u062a\u0646\u0647",
"pad.share.link": "\u062a\u0693\u0646\u0647",
"pad.share.emebdcode": "\u064a\u0648 \u0622\u0631 \u0627\u06d0\u0644 \u067c\u0648\u0645\u0628\u0644",
@ -56,9 +56,8 @@
"timeslider.month.october": "\u0627\u06a9\u062a\u0648\u0628\u0631",
"timeslider.month.november": "\u0646\u0648\u0645\u0628\u0631",
"timeslider.month.december": "\u0689\u064a\u0633\u0645\u0628\u0631",
"timeslider.unnamedauthor": "{{num}} \u0628\u06d0\u0646\u0648\u0645 \u0644\u064a\u06a9\u0648\u0627\u0644",
"timeslider.unnamedauthors": "{{num}} \u0628\u06d0\u0646\u0648\u0645\u0647 \u0644\u064a\u06a9\u0648\u0627\u0644\u0627\u0646",
"pad.savedrevs.marked": "\u0627\u0648\u0633 \u062f\u0627 \u0645\u062e\u06a9\u062a\u0646\u0647 \u062f \u064a\u0648\u06d0 \u062e\u0648\u0646\u062f\u064a \u0634\u0648\u06d0 \u0645\u062e\u06a9\u062a\u0646\u06d0 \u067e\u0647 \u062a\u0648\u06ab\u0647 \u067e\u0647 \u0646\u069a\u0647 \u0634\u0648\u0647",
"pad.savedrevs.marked": "\u0627\u0648\u0633 \u062f\u0627 \u0645\u062e\u06a9\u062a\u0646\u0647 \u062f \u064a\u0648\u06d0 \u062e\u0648\u0646\u062f\u064a \u0634\u0648\u06d0 \u0645\u062e\u06a9\u062a\u0646\u06d0 \u067e\u0647 \u062a\u0648\u06af\u0647 \u067e\u0647 \u0646\u069a\u0647 \u0634\u0648\u0647",
"pad.userlist.entername": "\u0646\u0648\u0645 \u0645\u0648 \u0648\u0631\u06a9\u0693\u06cd",
"pad.userlist.unnamed": "\u0628\u06d0 \u0646\u0648\u0645\u0647",
"pad.userlist.guest": "\u0645\u06d0\u0644\u0645\u0647",

View File

@ -104,8 +104,7 @@
"timeslider.month.october": "Outubro",
"timeslider.month.november": "Novembro",
"timeslider.month.december": "Dezembro",
"timeslider.unnamedauthor": "{{num}} autor desconhecido",
"timeslider.unnamedauthors": "{{num}} autores desconhecidos",
"timeslider.unnamedauthors": "{{num}} {[plural(num) one: autor an\u00f4nimo, other: autores an\u00f4nimos ]}",
"pad.savedrevs.marked": "Esta revis\u00e3o foi marcada como salva",
"pad.userlist.entername": "Insira o seu nome",
"pad.userlist.unnamed": "Sem t\u00edtulo",

View File

@ -25,7 +25,7 @@
"pad.toolbar.settings.title": "Configura\u00e7\u00f5es",
"pad.toolbar.embed.title": "Incorporar este Pad",
"pad.toolbar.showusers.title": "Mostrar os utilizadores nesta Nota",
"pad.colorpicker.save": "Gravar",
"pad.colorpicker.save": "Salvar",
"pad.colorpicker.cancel": "Cancelar",
"pad.loading": "A carregar\u2026",
"pad.settings.padSettings": "Configura\u00e7\u00f5es da Nota",

View File

@ -24,7 +24,7 @@
"pad.toolbar.timeslider.title": "\u0428\u043a\u0430\u043b\u0430 \u0432\u0440\u0435\u043c\u0435\u043d\u0438",
"pad.toolbar.savedRevision.title": "\u0421\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0432\u0435\u0440\u0441\u0438\u044e",
"pad.toolbar.settings.title": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438",
"pad.toolbar.embed.title": "\u0412\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u044d\u0442\u043e\u0442 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442",
"pad.toolbar.embed.title": "\u041f\u043e\u0434\u0435\u043b\u0438\u0442\u044c\u0441\u044f \u0438 \u0432\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u044d\u0442\u043e\u0442 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442",
"pad.toolbar.showusers.title": "\u041f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439 \u0432 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0435",
"pad.colorpicker.save": "\u0421\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c",
"pad.colorpicker.cancel": "\u041e\u0442\u043c\u0435\u043d\u0430",
@ -104,8 +104,7 @@
"timeslider.month.october": "\u043e\u043a\u0442\u044f\u0431\u0440\u044c",
"timeslider.month.november": "\u043d\u043e\u044f\u0431\u0440\u044c",
"timeslider.month.december": "\u0434\u0435\u043a\u0430\u0431\u0440\u044c",
"timeslider.unnamedauthor": "{{num}} \u0431\u0435\u0437\u044b\u043c\u044f\u043d\u043d\u044b\u0439 \u0430\u0432\u0442\u043e\u0440",
"timeslider.unnamedauthors": "\u0431\u0435\u0437\u044b\u043c\u044f\u043d\u043d\u044b\u0445 \u0430\u0432\u0442\u043e\u0440\u043e\u0432: {{num}}",
"timeslider.unnamedauthors": "{{num}} {[plural(num) one: \u0431\u0435\u0437\u044b\u043c\u044f\u043d\u043d\u044b\u0439 \u0430\u0432\u0442\u043e\u0440, few: \u0431\u0435\u0437\u044b\u043c\u044f\u043d\u043d\u044b\u0445 \u0430\u0432\u0442\u043e\u0440\u0430, many: \u0431\u0435\u0437\u044b\u043c\u044f\u043d\u043d\u044b\u0445 \u0430\u0432\u0442\u043e\u0440\u043e\u0432, other: \u0431\u0435\u0437\u044b\u043c\u044f\u043d\u043d\u044b\u0445 \u0430\u0432\u0442\u043e\u0440\u043e\u0432]}",
"pad.savedrevs.marked": "\u042d\u0442\u0430 \u0432\u0435\u0440\u0441\u0438\u044f \u0442\u0435\u043f\u0435\u0440\u044c \u043f\u043e\u043c\u0435\u0447\u0435\u043d\u0430 \u043a\u0430\u043a \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u043d\u0430\u044f",
"pad.userlist.entername": "\u0412\u0432\u0435\u0434\u0438\u0442\u0435 \u0432\u0430\u0448\u0435 \u0438\u043c\u044f",
"pad.userlist.unnamed": "\u0431\u0435\u0437\u044b\u043c\u044f\u043d\u043d\u044b\u0439",

120
src/locales/sk.json Normal file
View File

@ -0,0 +1,120 @@
{
"@metadata": {
"authors": [
"Teslaton"
]
},
"index.newPad": "Nov\u00fd Pad",
"index.createOpenPad": "alebo vytvori\u0165/otvori\u0165 Pad s n\u00e1zvom:",
"pad.toolbar.bold.title": "Tu\u010dn\u00e9 (Ctrl-B)",
"pad.toolbar.italic.title": "Kurz\u00edva (Ctrl-I)",
"pad.toolbar.underline.title": "Pod\u010diarknut\u00e9 (Ctrl-U)",
"pad.toolbar.strikethrough.title": "Pre\u010diarknut\u00e9",
"pad.toolbar.ol.title": "\u010c\u00edslovan\u00fd zoznam",
"pad.toolbar.ul.title": "Odr\u00e1\u017ekov\u00fd zoznam",
"pad.toolbar.indent.title": "Zv\u00e4\u010d\u0161i\u0165 odsadenie",
"pad.toolbar.unindent.title": "Zmen\u0161i\u0165 odsadenie",
"pad.toolbar.undo.title": "Sp\u00e4\u0165 (Ctrl-Z)",
"pad.toolbar.redo.title": "Znova (Ctrl-Y)",
"pad.toolbar.clearAuthorship.title": "Odstr\u00e1ni\u0165 farby autorstva",
"pad.toolbar.import_export.title": "Import/export z/do r\u00f4znych form\u00e1tov s\u00faborov",
"pad.toolbar.timeslider.title": "\u010casov\u00e1 os",
"pad.toolbar.savedRevision.title": "Ulo\u017ei\u0165 rev\u00edziu",
"pad.toolbar.settings.title": "Nastavenia",
"pad.toolbar.embed.title": "Zdie\u013ea\u0165 alebo vlo\u017ei\u0165 tento Pad",
"pad.toolbar.showusers.title": "Zobrazi\u0165 pou\u017e\u00edvate\u013eov tohoto Padu",
"pad.colorpicker.save": "Ulo\u017ei\u0165",
"pad.colorpicker.cancel": "Zru\u0161i\u0165",
"pad.loading": "Na\u010d\u00edtava sa...",
"pad.passwordRequired": "Pr\u00edstup k tomuto Padu je chr\u00e1nen\u00fd heslom",
"pad.permissionDenied": "\u013dutujeme, nem\u00e1te opr\u00e1vnenie pristupova\u0165 k tomuto Padu",
"pad.wrongPassword": "Nespr\u00e1vne heslo",
"pad.settings.padSettings": "Nastavenia Padu",
"pad.settings.myView": "Vlastn\u00fd poh\u013ead",
"pad.settings.stickychat": "Chat st\u00e1le na obrazovke",
"pad.settings.colorcheck": "Farby autorstva",
"pad.settings.linenocheck": "\u010c\u00edsla riadkov",
"pad.settings.rtlcheck": "\u010c\u00edta\u0165 obsah sprava do\u013eava?",
"pad.settings.fontType": "Typ p\u00edsma:",
"pad.settings.fontType.normal": "Norm\u00e1lne",
"pad.settings.fontType.monospaced": "Strojov\u00e9",
"pad.settings.globalView": "Glob\u00e1lny poh\u013ead",
"pad.settings.language": "Jazyk:",
"pad.importExport.import_export": "Import/Export",
"pad.importExport.import": "Nahra\u0165 \u013eubovo\u013en\u00fd textov\u00fd s\u00fabor alebo dokument",
"pad.importExport.importSuccessful": "Import \u00faspe\u0161n\u00fd!",
"pad.importExport.export": "Exportova\u0165 aktu\u00e1lny Pad ako:",
"pad.importExport.exporthtml": "HTML",
"pad.importExport.exportplain": "\u010cist\u00fd text",
"pad.importExport.exportword": "Microsoft Word",
"pad.importExport.exportpdf": "PDF",
"pad.importExport.exportopen": "ODF (Open Document Format)",
"pad.importExport.exportdokuwiki": "DokuWiki",
"pad.importExport.abiword.innerHTML": "Importova\u0165 m\u00f4\u017eete len \u010dist\u00fd text alebo HTML. Pre pokro\u010dilej\u0161ie funkcie importu pros\u00edm nain\u0161talujte \u201e\u003Ca href=\"https://github.com/ether/etherpad-lite/wiki/How-to-enable-importing-and-exporting-different-file-formats-in-Ubuntu-or-OpenSuse-or-SLES-with-AbiWord\"\u003EAbiword\u003C/a\u003E\u201c.",
"pad.modals.connected": "Pripojen\u00e9.",
"pad.modals.reconnecting": "Op\u00e4tovn\u00e9 prip\u00e1janie k v\u00e1\u0161mu Padu...",
"pad.modals.forcereconnect": "Vyn\u00fati\u0165 znovupripojenie",
"pad.modals.userdup": "Otvoren\u00e9 v inom okne",
"pad.modals.userdup.explanation": "Zd\u00e1 sa, \u017ee tento Pad je na tomto po\u010d\u00edta\u010di otvoren\u00fd vo viacer\u00fdch okn\u00e1ch prehliada\u010da.",
"pad.modals.userdup.advice": "Pre pou\u017eitie tohoto okna se mus\u00edte znovu pripoji\u0165.",
"pad.modals.unauth": "Nie ste autorizovan\u00fd",
"pad.modals.unauth.explanation": "Va\u0161e opr\u00e1vnenia sa po\u010das prehliadania tejto str\u00e1nky zmenili. Sk\u00faste sa pripoji\u0165 znovu.",
"pad.modals.looping": "Odpojen\u00e9.",
"pad.modals.looping.explanation": "Nastali probl\u00e9my pri komunik\u00e1cii so synchroniza\u010dn\u00fdm serverom.",
"pad.modals.looping.cause": "Mo\u017eno ste pripojen\u00ed cez nekompatibiln\u00fd firewall alebo proxy server.",
"pad.modals.initsocketfail": "Server je nedostupn\u00fd.",
"pad.modals.initsocketfail.explanation": "Nepodarilo sa pripoji\u0165 k synchroniza\u010dn\u00e9mu serveru.",
"pad.modals.initsocketfail.cause": "Pr\u00ed\u010dinou je pravdepodobne probl\u00e9m s prehliada\u010dom alebo internetov\u00fdm pripojen\u00edm.",
"pad.modals.slowcommit": "Odpojen\u00e9.",
"pad.modals.slowcommit.explanation": "Server neodpoved\u00e1.",
"pad.modals.slowcommit.cause": "Pr\u00ed\u010dinou m\u00f4\u017ee by\u0165 probl\u00e9m so sie\u0165ov\u00fdm pripojen\u00edm.",
"pad.modals.deleted": "Odstr\u00e1nen\u00e9.",
"pad.modals.deleted.explanation": "Tento Pad bol odstr\u00e1nen\u00fd.",
"pad.modals.disconnected": "Boli ste odpojen\u00ed.",
"pad.modals.disconnected.explanation": "Spojenie so serverom sa preru\u0161ilo",
"pad.modals.disconnected.cause": "Server m\u00f4\u017ee by\u0165 nedostupn\u00fd. Ak by probl\u00e9m pretrv\u00e1val, informujte n\u00e1s pros\u00edm.",
"pad.share": "Zdie\u013ea\u0165 tento Pad",
"pad.share.readonly": "Len na \u010d\u00edtanie",
"pad.share.link": "Odkaz",
"pad.share.emebdcode": "Vlo\u017ei\u0165 URL",
"pad.chat": "Chat",
"pad.chat.title": "Otvori\u0165 chat tohoto Padu.",
"pad.chat.loadmessages": "Na\u010d\u00edta\u0165 \u010fal\u0161ie spr\u00e1vy",
"timeslider.pageTitle": "\u010casov\u00e1 os {{appTitle}}",
"timeslider.toolbar.returnbutton": "N\u00e1vrat do Padu",
"timeslider.toolbar.authors": "Autori:",
"timeslider.toolbar.authorsList": "Bez autorov",
"timeslider.toolbar.exportlink.title": "Export",
"timeslider.exportCurrent": "Exportova\u0165 aktu\u00e1lnu verziu ako:",
"timeslider.version": "Verzia {{version}}",
"timeslider.saved": "Ulo\u017een\u00e9 {{day}}. {{month}} {{year}}",
"timeslider.dateformat": "{{day}}. {{month}} {{year}} {{hours}}:{{minutes}}:{{seconds}}",
"timeslider.month.january": "janu\u00e1ra",
"timeslider.month.february": "febru\u00e1ra",
"timeslider.month.march": "marca",
"timeslider.month.april": "apr\u00edla",
"timeslider.month.may": "m\u00e1ja",
"timeslider.month.june": "j\u00fana",
"timeslider.month.july": "j\u00fala",
"timeslider.month.august": "augusta",
"timeslider.month.september": "septembra",
"timeslider.month.october": "okt\u00f3bra",
"timeslider.month.november": "novembra",
"timeslider.month.december": "decembra",
"timeslider.unnamedauthors": "{{num}} {[ plural(num) one: nemenovan\u00fd autor, few: nemenovan\u00ed autori, other: nemenovan\u00fdch autorov ]}",
"pad.savedrevs.marked": "T\u00e1to rev\u00edzia bola ozna\u010den\u00e1 ako ulo\u017een\u00e1",
"pad.userlist.entername": "Zadajte svoje meno",
"pad.userlist.unnamed": "nemenovan\u00fd",
"pad.userlist.guest": "Hos\u0165",
"pad.userlist.deny": "Zak\u00e1za\u0165",
"pad.userlist.approve": "Schv\u00e1li\u0165",
"pad.editbar.clearcolors": "Skuto\u010dne odstr\u00e1ni\u0165 autorsk\u00e9 farby z cel\u00e9ho dokumentu?",
"pad.impexp.importbutton": "Importova\u0165",
"pad.impexp.importing": "Prebieha import...",
"pad.impexp.confirmimport": "Import s\u00faboru prep\u00ed\u0161e cel\u00fd s\u00fa\u010dasn\u00fd obsah Padu. Skuto\u010dne si \u017eel\u00e1te vykona\u0165 t\u00fato akciu?",
"pad.impexp.convertFailed": "Tento s\u00fabor nie je mo\u017en\u00e9 importova\u0165. Pou\u017eite pros\u00edm in\u00fd form\u00e1t s\u00faboru alebo nakop\u00edrujte text manu\u00e1lne",
"pad.impexp.uploadFailed": "Nahr\u00e1vanie zlyhalo, sk\u00faste to pros\u00edm znovu",
"pad.impexp.importfailed": "Import zlyhal",
"pad.impexp.copypaste": "Vlo\u017ete pros\u00edm k\u00f3piu cez schr\u00e1nku",
"pad.impexp.exportdisabled": "Export do form\u00e1tu {{type}} nie je povolen\u00fd. Kontaktujte pros\u00edm administr\u00e1tora pre zistenie detailov."
}

View File

@ -1,6 +1,7 @@
{
"@metadata": {
"authors": [
"Dbc334",
"Mateju"
]
},
@ -21,7 +22,7 @@
"pad.toolbar.timeslider.title": "Drsnik zgodovine",
"pad.toolbar.savedRevision.title": "Shrani predelavo",
"pad.toolbar.settings.title": "Nastavitve",
"pad.toolbar.embed.title": "Vstavi dokument",
"pad.toolbar.embed.title": "Deli in vklju\u010di dokument",
"pad.toolbar.showusers.title": "Poka\u017ei uporabnike dokumenta",
"pad.colorpicker.save": "Shrani",
"pad.colorpicker.cancel": "Prekli\u010di",
@ -101,8 +102,7 @@
"timeslider.month.october": "Oktober",
"timeslider.month.november": "November",
"timeslider.month.december": "December",
"timeslider.unnamedauthor": "neimenovani avtor {{num}}",
"timeslider.unnamedauthors": "{{num}} neimenovani avtorji",
"timeslider.unnamedauthors": "{{num}} {[plural(num) one: neimenovan avtor, plural(num) two: neimenovana avtorja, plural(num) few: neimenovani avtorji, other: neimenovanih avtorjev ]}",
"pad.savedrevs.marked": "Ta predelava je ozna\u010dena kot shranjena predelava.",
"pad.userlist.entername": "Vpi\u0161ite ime",
"pad.userlist.unnamed": "neimenovana oseba",

View File

@ -1,7 +1,8 @@
{
"@metadata": {
"authors": {
"1": "WikiPhoenix"
"0": "Lokal Profil",
"2": "WikiPhoenix"
}
},
"index.newPad": "Nytt block",
@ -21,14 +22,14 @@
"pad.toolbar.timeslider.title": "Tidsreglage",
"pad.toolbar.savedRevision.title": "Spara revision",
"pad.toolbar.settings.title": "Inst\u00e4llningar",
"pad.toolbar.embed.title": "B\u00e4dda in detta block",
"pad.toolbar.embed.title": "Dela och b\u00e4dda in detta block",
"pad.toolbar.showusers.title": "Visa anv\u00e4ndarna p\u00e5 detta block",
"pad.colorpicker.save": "Spara",
"pad.colorpicker.cancel": "Avbryt",
"pad.loading": "L\u00e4ser in...",
"pad.passwordRequired": "Du beh\u00f6ver ett l\u00f6senord f\u00f6r att f\u00e5 tillg\u00e5ng till detta block",
"pad.permissionDenied": "Du har inte beh\u00f6righet att f\u00e5 tillg\u00e5ng till detta block",
"pad.wrongPassword": "Ditt l\u00f6senord \u00e4r fel",
"pad.wrongPassword": "Ditt l\u00f6senord var fel",
"pad.settings.padSettings": "Blockinst\u00e4llningar",
"pad.settings.myView": "Min vy",
"pad.settings.stickychat": "Chatten alltid p\u00e5 sk\u00e4rmen",
@ -40,7 +41,7 @@
"pad.settings.fontType.monospaced": "Fast breddsteg",
"pad.settings.globalView": "Global vy",
"pad.settings.language": "Spr\u00e5k:",
"pad.importExport.import_export": "Importera/exportera",
"pad.importExport.import_export": "Importera/Exportera",
"pad.importExport.import": "Ladda upp en textfil eller dokument",
"pad.importExport.importSuccessful": "\u00c5tg\u00e4rden slutf\u00f6rdes!",
"pad.importExport.export": "Export aktuellt block som:",
@ -83,7 +84,7 @@
"timeslider.pageTitle": "Tidsreglage f\u00f6r {{appTitle}}",
"timeslider.toolbar.returnbutton": "\u00c5terv\u00e4nd till blocket",
"timeslider.toolbar.authors": "F\u00f6rfattare:",
"timeslider.toolbar.authorsList": "Ingen f\u00f6rfattare",
"timeslider.toolbar.authorsList": "Inga f\u00f6rfattare",
"timeslider.toolbar.exportlink.title": "Exportera",
"timeslider.exportCurrent": "Exportera aktuell version som:",
"timeslider.version": "Version {{version}}",
@ -101,8 +102,7 @@
"timeslider.month.october": "oktober",
"timeslider.month.november": "november",
"timeslider.month.december": "december",
"timeslider.unnamedauthor": "{{num}} namnl\u00f6s f\u00f6rfattare",
"timeslider.unnamedauthors": "{{num}} namnl\u00f6sa f\u00f6rfattare",
"timeslider.unnamedauthors": "{{num}} {[plural(num) one: namnl\u00f6s f\u00f6rfattare, other: namnl\u00f6sa f\u00f6rfattare]}",
"pad.savedrevs.marked": "Denna revision \u00e4r nu markerad som en sparad revision",
"pad.userlist.entername": "Ange ditt namn",
"pad.userlist.unnamed": "namnl\u00f6s",

View File

@ -1,9 +1,11 @@
{
"@metadata": {
"authors": {
"0": "Base",
"1": "Olvin",
"3": "Steve.rusyn"
"0": "Andriykopanytsia",
"1": "Base",
"2": "Olvin",
"4": "Steve.rusyn",
"5": "SteveR"
}
},
"index.newPad": "\u0421\u0442\u0432\u043e\u0440\u0438\u0442\u0438",
@ -103,8 +105,7 @@
"timeslider.month.october": "\u0416\u043e\u0432\u0442\u0435\u043d\u044c",
"timeslider.month.november": "\u041b\u0438\u0441\u0442\u043e\u043f\u0430\u0434",
"timeslider.month.december": "\u0413\u0440\u0443\u0434\u0435\u043d\u044c",
"timeslider.unnamedauthor": "{{num}} \u0431\u0435\u0437\u0456\u043c\u0435\u043d\u043d\u0438\u0439 \u0430\u0432\u0442\u043e\u0440",
"timeslider.unnamedauthors": "\u0431\u0435\u0437\u0456\u043c\u0435\u043d\u043d\u0438\u0445 \u0430\u0432\u0442\u043e\u0440\u043e\u0432: {{num}}",
"timeslider.unnamedauthors": "{{num}} {[plural(num) one: \u0431\u0435\u0437\u0456\u043c\u0435\u043d\u043d\u0438\u0439 \u0430\u0432\u0442\u043e\u0440, few: \u0431\u0435\u0437\u0456\u043c\u0435\u043d\u043d\u0456 \u0430\u0432\u0442\u043e\u0440\u0438, many: \u0431\u0435\u0437\u0456\u043c\u0435\u043d\u043d\u0438\u0445 \u0430\u0432\u0442\u043e\u0440\u0456\u0432, other: \u0431\u0435\u0437\u0456\u043c\u0435\u043d\u043d\u0438\u0445 \u0430\u0432\u0442\u043e\u0440\u0456\u0432]}",
"pad.savedrevs.marked": "\u0426\u044e \u0432\u0435\u0440\u0441\u0456\u044e \u043f\u043e\u043c\u0456\u0447\u0435\u043d\u043e \u0437\u0431\u0435\u0440\u0435\u0436\u0435\u043d\u043e\u044e \u0432\u0435\u0440\u0441\u0456\u0454\u044e",
"pad.userlist.entername": "\u0412\u0432\u0435\u0434\u0456\u0442\u044c \u0412\u0430\u0448\u0435 \u0456\u043c'\u044f",
"pad.userlist.unnamed": "\u0431\u0435\u0437\u0456\u043c\u0435\u043d\u043d\u0438\u0439",

View File

@ -1,6 +1,7 @@
{
"@metadata": {
"authors": [
"Minh Nguyen",
"Tuankiet65"
]
},
@ -9,7 +10,7 @@
"pad.toolbar.bold.title": "In \u0111\u1eadm (Ctrl-B)",
"pad.toolbar.italic.title": "In nghi\u00eang (Ctrl-I)",
"pad.toolbar.underline.title": "G\u1ea1ch ch\u00e2n (Ctrl-U)",
"pad.toolbar.strikethrough.title": "G\u1ea1ch b\u1ecf",
"pad.toolbar.strikethrough.title": "G\u1ea1ch ngang",
"pad.toolbar.ol.title": "Danh s\u00e1ch C\u00f3 \u0110\u00e1nh s\u1ed1",
"pad.toolbar.ul.title": "Danh s\u00e1ch Kh\u00f4ng \u0110\u00e1nh s\u1ed1",
"pad.toolbar.indent.title": "T\u0103ng l\u1ec1",
@ -101,7 +102,6 @@
"timeslider.month.october": "Th\u00e1ng M\u01b0\u1eddi",
"timeslider.month.november": "Th\u00e1ng M\u01b0\u1eddi M\u1ed9t",
"timeslider.month.december": "Th\u00e1ng M\u01b0\u1eddi Hai",
"timeslider.unnamedauthor": "{{num}} t\u00e1c gi\u1ea3 kh\u00f4ng t\u00ean",
"timeslider.unnamedauthors": "{{num}} t\u00e1c gi\u1ea3 kh\u00f4ng t\u00ean",
"pad.savedrevs.marked": "Phi\u00ean b\u1ea3n n\u00e0y \u0111\u00e3 \u0111\u01b0\u1ee3c \u0111\u00e1nh d\u1ea5u l\u00e0 m\u1ed9t phi\u00ean b\u1ea3n \u0111\u00e3 l\u01b0u",
"pad.userlist.entername": "Nh\u1eadp t\u00ean c\u1ee7a b\u1ea1n",

View File

@ -3,65 +3,73 @@
"authors": [
"Dimension",
"Hydra",
"Liuxinyu970226",
"Qiyue2001",
"Shangkuanlc",
"Shizhao",
"Yfdyh000",
"\u4e4c\u62c9\u8de8\u6c2a",
"\u71c3\u7389"
]
},
"index.newPad": "\u65b0\u8bb0\u4e8b\u672c",
"index.createOpenPad": "\u6216\u8005\u521b\u5efa/\u6253\u5f00\u5e26\u540d\u5b57\u7684\u8bb0\u4e8b\u672c\uff1a",
"pad.toolbar.bold.title": "\u7c97\u4f53\uff08Ctrl-B\uff09",
"pad.toolbar.italic.title": "\u659c\u4f53 (Ctrl-I)",
"pad.toolbar.underline.title": "\u5e95\u7ebf\uff08Ctrl-U\uff09",
"pad.toolbar.underline.title": "\u4e0b\u5212\u7ebf\uff08Ctrl-U\uff09",
"pad.toolbar.strikethrough.title": "\u5220\u9664\u7ebf",
"pad.toolbar.ol.title": "\u6709\u5e8f\u5217\u8868",
"pad.toolbar.ul.title": "\u65e0\u5e8f\u5217\u8868",
"pad.toolbar.indent.title": "\u7f29\u6392",
"pad.toolbar.unindent.title": "\u51f8\u6392",
"pad.toolbar.indent.title": "\u589e\u52a0\u7f29\u8fdb",
"pad.toolbar.unindent.title": "\u51cf\u5c11\u7f29\u8fdb",
"pad.toolbar.undo.title": "\u64a4\u6d88 (Ctrl-Z)",
"pad.toolbar.redo.title": "\u91cd\u505a (Ctrl-Y)",
"pad.toolbar.clearAuthorship.title": "\u6e05\u9664\u4f5c\u540d\u989c\u8272",
"pad.toolbar.import_export.title": "\u4ee5\u5176\u4ed6\u6587\u4ef6\u683c\u5f0f\u5bfc\u5165/\u5bfc\u51fa",
"pad.toolbar.clearAuthorship.title": "\u6e05\u9664\u4f5c\u8005\u989c\u8272",
"pad.toolbar.import_export.title": "\u4ece\u4e0d\u540c\u7684\u6587\u4ef6\u683c\u5f0f\u5bfc\u5165/\u5bfc\u51fa",
"pad.toolbar.timeslider.title": "\u65f6\u95f4\u8f74",
"pad.toolbar.savedRevision.title": "\u4fdd\u5b58\u4fee\u8ba2",
"pad.toolbar.settings.title": "\u8bbe\u7f6e",
"pad.toolbar.embed.title": "\u5d4c\u5165\u6b64\u8bb0\u4e8b\u672c",
"pad.toolbar.showusers.title": "\u663e\u793a\u6b64\u8bb0\u4e8b\u672c\u7684\u7528\u6237",
"pad.toolbar.embed.title": "\u5171\u4eab\u5e76\u5d4c\u5165\u6b64\u8bb0\u4e8b\u672c",
"pad.toolbar.showusers.title": "\u663e\u793a\u6b64\u8bb0\u4e8b\u672c\u4e0a\u7684\u7528\u6237",
"pad.colorpicker.save": "\u4fdd\u5b58",
"pad.colorpicker.cancel": "\u53d6\u6d88",
"pad.loading": "\u8f7d\u5165\u4e2d\u2026\u2026",
"pad.passwordRequired": "\u60a8\u9700\u8981\u4e00\u4e2a\u89c2\u770b\u8fd9\u4e2a\u8bb0\u4e8b\u672c\u7684\u5bc6\u7801",
"pad.permissionDenied": "\u60a8\u6ca1\u6709\u89c2\u770b\u8fd9\u4e2a\u8bb0\u4e8b\u672c\u7684\u6743\u9650",
"pad.passwordRequired": "\u60a8\u9700\u8981\u5bc6\u7801\u624d\u80fd\u8bbf\u95ee\u8fd9\u4e2a\u8bb0\u4e8b\u672c",
"pad.permissionDenied": "\u60a8\u6ca1\u6709\u8bbf\u95ee\u8fd9\u4e2a\u8bb0\u4e8b\u672c\u7684\u6743\u9650",
"pad.wrongPassword": "\u60a8\u7684\u5bc6\u7801\u9519\u4e86",
"pad.settings.padSettings": "\u8bb0\u4e8b\u672c\u8bbe\u7f6e",
"pad.settings.myView": "\u6211\u7684\u89c6\u7a97",
"pad.settings.stickychat": "\u603b\u662f\u5728\u5c4f\u5e55\u4e0a\u663e\u793a\u804a\u5929",
"pad.settings.stickychat": "\u603b\u662f\u663e\u793a\u804a\u5929\u5c4f\u5e55",
"pad.settings.colorcheck": "\u4f5c\u8005\u989c\u8272",
"pad.settings.linenocheck": "\u884c\u53f7",
"pad.settings.rtlcheck": "\u4ece\u53f3\u5230\u5de6\u7684\u8bfb\u53d6\u5185\u5bb9\u5417\uff1f",
"pad.settings.rtlcheck": "\u4ece\u53f3\u5230\u5de6\u9605\u8bfb\u5185\u5bb9\u5417\uff1f",
"pad.settings.fontType": "\u5b57\u4f53\u7c7b\u578b\uff1a",
"pad.settings.fontType.normal": "\u6b63\u5e38",
"pad.settings.fontType.monospaced": "\u7b49\u5bbd\u5b57\u4f53",
"pad.settings.globalView": "\u6240\u6709\u4eba\u7684\u89c6\u7a97",
"pad.settings.globalView": "\u6240\u6709\u4eba\u89c6\u7a97",
"pad.settings.language": "\u8bed\u8a00\uff1a",
"pad.importExport.import_export": "\u5bfc\u5165/\u5bfc\u51fa",
"pad.importExport.import": "\u4e0a\u8f7d\u4efb\u4f55\u6587\u5b57\u6863\u6216\u6587\u6863",
"pad.importExport.import": "\u4e0a\u8f7d\u4efb\u4f55\u6587\u672c\u6587\u4ef6\u6216\u6863\u6848",
"pad.importExport.importSuccessful": "\u6210\u529f\uff01",
"pad.importExport.export": "\u5bfc\u51fa\u76ee\u524d\u7684\u8bb0\u4e8b\u7c3f\u4e3a\uff1a",
"pad.importExport.export": "\u5f53\u524d\u8bb0\u4e8b\u672c\u5bfc\u51fa\u4e3a\uff1a",
"pad.importExport.exporthtml": "HTML",
"pad.importExport.exportplain": "\u7eaf\u6587\u672c",
"pad.importExport.exportword": "Microsoft Word",
"pad.importExport.exportpdf": "PDF",
"pad.importExport.exportopen": "ODF\uff08\u5f00\u653e\u6587\u6863\u683c\u5f0f\uff09",
"pad.importExport.exportdokuwiki": "DokuWiki",
"pad.importExport.abiword.innerHTML": "\u60a8\u53ea\u80fd\u5bfc\u5165\u7eaf\u6587\u672c\u6216HTML\u683c\u5f0f\u3002\u003Ca href=\"https://github.com/ether/etherpad-lite/wiki/How-to-enable-importing-and-exporting-different-file-formats-in-Ubuntu-or-OpenSuse-or-SLES-with-AbiWord\"\u003E\u5b89\u88ddabiword\u003C/a\u003E\u53d6\u5f97\u66f4\u591a\u9ad8\u7ea7\u7684\u5bfc\u5165\u529f\u80fd\u3002",
"pad.modals.connected": "\u5df2\u8fde\u63a5\u3002",
"pad.modals.reconnecting": "\u91cd\u65b0\u8fde\u63a5\u5230\u60a8\u7684\u8bb0\u4e8b\u7c3f...",
"pad.modals.reconnecting": "\u91cd\u65b0\u8fde\u63a5\u5230\u60a8\u7684\u8bb0\u4e8b\u672c...",
"pad.modals.forcereconnect": "\u5f3a\u5236\u91cd\u65b0\u8fde\u63a5",
"pad.modals.userdup": "\u5728\u53e6\u4e00\u4e2a\u89c6\u7a97\u4e2d\u6253\u5f00",
"pad.modals.userdup.explanation": "\u6b64\u8bb0\u4e8b\u7c3f\u4f3c\u4e4e\u5728\u6b64\u7535\u8111\u4e0a\u5728\u591a\u4e2a\u6d4f\u89c8\u5668\u89c6\u7a97\u4e2d\u6253\u5f00\u3002",
"pad.modals.userdup.advice": "\u91cd\u65b0\u8fde\u63a5\u5230\u6b64\u89c6\u7a97\u3002",
"pad.modals.userdup": "\u5728\u53e6\u4e00\u4e2a\u7a97\u53e3\u4e2d\u6253\u5f00",
"pad.modals.userdup.explanation": "\u6b64\u8bb0\u4e8b\u672c\u4f3c\u4e4e\u5728\u672c\u7535\u8111\u4e0a\u7684\u591a\u4e2a\u6d4f\u89c8\u5668\u7a97\u53e3\u4e2d\u6253\u5f00\u3002",
"pad.modals.userdup.advice": "\u91cd\u65b0\u8fde\u63a5\uff0c\u4f7f\u7528\u6b64\u7a97\u53e3\u3002",
"pad.modals.unauth": "\u672a\u6388\u6743",
"pad.modals.unauth.explanation": "\u60a8\u7684\u6743\u9650\u5728\u67e5\u770b\u6b64\u9875\u9762\u65f6\u5df2\u6539\u53d8\u3002\u5c1d\u8bd5\u91cd\u65b0\u8fde\u63a5\u3002",
"pad.modals.looping": "\u5df2\u79bb\u7ebf\u3002",
"pad.modals.looping.explanation": "\u4e0e\u540c\u6b65\u670d\u52a1\u5668\u7684\u901a\u4fe1\u51fa\u73b0\u95ee\u9898\u3002",
"pad.modals.looping.cause": "\u4e5f\u8bb8\u60a8\u662f\u901a\u8fc7\u4e0d\u517c\u5bb9\u7684\u9632\u706b\u5899\u6216\u4ee3\u7406\u670d\u52a1\u5668\u8fde\u63a5\u3002",
"pad.modals.initsocketfail": "\u65e0\u6cd5\u8bbf\u95ee\u670d\u52a1\u5668\u3002",
"pad.modals.initsocketfail.explanation": "\u65e0\u6cd5\u8fde\u63a5\u5230\u540c\u6b65\u670d\u52a1\u5668\u3002",
"pad.modals.initsocketfail.cause": "\u8fd9\u53ef\u80fd\u662f\u7531\u4e8e\u60a8\u7684\u6d4f\u89c8\u5668\u6216\u60a8\u7684\u4e92\u8054\u7f51\u8fde\u63a5\u7684\u95ee\u9898\u3002",
@ -70,24 +78,25 @@
"pad.modals.slowcommit.cause": "\u8fd9\u53ef\u80fd\u662f\u7531\u4e8e\u7f51\u7edc\u8fde\u63a5\u95ee\u9898\u3002",
"pad.modals.deleted": "\u5df2\u522a\u9664\u3002",
"pad.modals.deleted.explanation": "\u6b64\u8bb0\u4e8b\u672c\u5df2\u88ab\u79fb\u9664\u3002",
"pad.modals.disconnected": "\u60a8\u5df2\u88ab\u79bb\u7ebf\u3002",
"pad.modals.disconnected": "\u4f60\u5df2\u65ad\u5f00\u8fde\u63a5\u3002",
"pad.modals.disconnected.explanation": "\u5230\u670d\u52a1\u5668\u7684\u8fde\u63a5\u5df2\u4e22\u5931",
"pad.modals.disconnected.cause": "\u670d\u52a1\u5668\u53ef\u80fd\u65e0\u6cd5\u4f7f\u7528\u3002\u82e5\u6b64\u60c5\u51b5\u6301\u7eed\u53d1\u751f\uff0c\u8bf7\u901a\u77e5\u6211\u4eec\u3002",
"pad.share": "\u5206\u4eab\u6b64\u8bb0\u4e8b\u672c",
"pad.share.readonly": "\u53ea\u80fd\u8bfb",
"pad.share.readonly": "\u53ea\u8bfb",
"pad.share.link": "\u94fe\u63a5",
"pad.share.emebdcode": "\u5d4c\u5165\u7f51\u5740",
"pad.chat": "\u804a\u5929",
"pad.chat.title": "\u6253\u5f00\u6b64\u8bb0\u4e8b\u7c3f\u7684\u804a\u5929\u3002",
"pad.chat.title": "\u6253\u5f00\u6b64\u8bb0\u4e8b\u672c\u7684\u804a\u5929\u7a97\u53e3\u3002",
"pad.chat.loadmessages": "\u52a0\u8f7d\u66f4\u591a\u4fe1\u606f",
"timeslider.pageTitle": "{{appTitle}} \u65f6\u95f4\u8f74",
"timeslider.toolbar.returnbutton": "\u8fd4\u56de\u8bb0\u4e8b\u672c",
"timeslider.toolbar.authors": "\u4f5c\u8005\uff1a",
"timeslider.toolbar.authorsList": "\u6ca1\u6709\u4f5c\u8005",
"timeslider.toolbar.exportlink.title": "\u5bfc\u51fa",
"timeslider.exportCurrent": "\u5bfc\u51fa\u76ee\u524d\u7248\u672c\u4e3a\uff1a",
"timeslider.version": "\u7b2c {{version}} \u7248\u672c",
"timeslider.exportCurrent": "\u5f53\u524d\u7248\u672c\u5bfc\u51fa\u4e3a\uff1a",
"timeslider.version": "\u7248\u672c {{version}}",
"timeslider.saved": "\u5728{{year}}\u5e74{{month}}{{day}}\u65e5\u4fdd\u5b58",
"timeslider.dateformat": "{{year}} \u5e74 {{month}} \u6708 {{day}} \u65e5 {{hours}}\u65f6:{{minutes}}\u5206:{{seconds}}\u79d2",
"timeslider.dateformat": "{{year}}\u5e74{{month}}{{day}}\u65e5 {{hours}}\u65f6:{{minutes}}\u5206:{{seconds}}\u79d2",
"timeslider.month.january": "\u4e00\u6708",
"timeslider.month.february": "\u4e8c\u6708",
"timeslider.month.march": "\u4e09\u6708",
@ -100,17 +109,17 @@
"timeslider.month.october": "\u5341\u6708",
"timeslider.month.november": "\u5341\u4e00\u6708",
"timeslider.month.december": "\u5341\u4e8c\u6708",
"timeslider.unnamedauthor": "{{num}}\u533f\u540d\u4f5c\u8005",
"timeslider.unnamedauthors": "{{num}}\u533f\u540d\u4f5c\u8005",
"pad.savedrevs.marked": "\u6b64\u4fee\u8ba2\u5df2\u6807\u8bb0\u4e3a\u4fdd\u5b58\u4fee\u8ba2",
"timeslider.unnamedauthors": "{{num}}\u4e2a\u533f\u540d\u4f5c\u8005",
"pad.savedrevs.marked": "\u8fd9\u4e00\u4fee\u8ba2\u73b0\u5728\u88ab\u6807\u8bb0\u4e3a\u5df2\u4fdd\u5b58\u7684\u4fee\u8ba2\u7248\u672c",
"pad.userlist.entername": "\u8f93\u5165\u60a8\u7684\u59d3\u540d",
"pad.userlist.unnamed": "\u65e0\u540d",
"pad.userlist.unnamed": "\u533f\u540d",
"pad.userlist.guest": "\u8bbf\u5ba2",
"pad.userlist.deny": "\u62d2\u7edd",
"pad.userlist.approve": "\u6279\u51c6",
"pad.editbar.clearcolors": "\u6e05\u9664\u6574\u4e2a\u6587\u6863\u7684\u4f5c\u8005\u989c\u8272\u5417\uff1f",
"pad.impexp.importbutton": "\u73b0\u5728\u5bfc\u5165",
"pad.impexp.importing": "\u6b63\u5728\u5bfc\u5165...",
"pad.impexp.confirmimport": "\u5bfc\u5165\u7684\u6587\u4ef6\u5c06\u8986\u76d6\u8bb0\u4e8b\u672c\u7684\u5f53\u524d\u6587\u672c\u3002\u4f60\u786e\u5b9a\u8981\u7ee7\u7eed\u5417\uff1f",
"pad.impexp.convertFailed": "\u6211\u4eec\u65e0\u6cd5\u5bfc\u5165\u6b64\u6587\u6863\u3002\u8bf7\u4f7f\u7528\u4ed6\u6587\u6863\u683c\u5f0f\u6216\u624b\u52a8\u590d\u5236\u8d34\u4e0a\u3002",
"pad.impexp.uploadFailed": "\u4e0a\u8f7d\u5931\u8d25\uff0c\u8bf7\u91cd\u8bd5",
"pad.impexp.importfailed": "\u5bfc\u5165\u5931\u8d25",

View File

@ -103,7 +103,6 @@
"timeslider.month.october": "10\u6708",
"timeslider.month.november": "11\u6708",
"timeslider.month.december": "12\u6708",
"timeslider.unnamedauthor": "{{num}} \u533f\u540d\u5354\u4f5c\u8005",
"timeslider.unnamedauthors": "{{num}} \u533f\u540d\u5354\u4f5c\u8005",
"pad.savedrevs.marked": "\u6a19\u8a18\u6b64\u4fee\u8a02\u7248\u672c\u70ba\u5df2\u5132\u5b58\u4fee\u8a02\u7248\u672c\u3002",
"pad.userlist.entername": "\u8f38\u5165\u60a8\u7684\u59d3\u540d",

View File

@ -778,7 +778,7 @@ createDiffHTML(padID, startRev, endRev) returns an object of diffs from 2 points
Example returns:
{"code":0,"message":"ok","data":{"html":"<style>\n.authora_HKIv23mEbachFYfH {background-color: #a979d9}\n.authora_n4gEeMLsv1GivNeh {background-color: #a9b5d9}\n.removed {text-decoration: line-through; -ms-filter:'progid:DXImageTransform.Microsoft.Alpha(Opacity=80)'; filter: alpha(opacity=80); opacity: 0.8; }\n</style>Welcome to Etherpad Lite!<br><br>This pad text is synchronized as you type, so that everyone viewing this page sees the same text. This allows you to collaborate seamlessly on documents!<br><br>Get involved with Etherpad at <a href=\"http&#x3a;&#x2F;&#x2F;etherpad&#x2e;org\">http:&#x2F;&#x2F;etherpad.org</a><br><span class=\"authora_HKIv23mEbachFYfH\">aw</span><br><br>","authors":["a.HKIv23mEbachFYfH",""]}}
{"code":0,"message":"ok","data":{"html":"<style>\n.authora_HKIv23mEbachFYfH {background-color: #a979d9}\n.authora_n4gEeMLsv1GivNeh {background-color: #a9b5d9}\n.removed {text-decoration: line-through; -ms-filter:'progid:DXImageTransform.Microsoft.Alpha(Opacity=80)'; filter: alpha(opacity=80); opacity: 0.8; }\n</style>Welcome to Etherpad!<br><br>This pad text is synchronized as you type, so that everyone viewing this page sees the same text. This allows you to collaborate seamlessly on documents!<br><br>Get involved with Etherpad at <a href=\"http&#x3a;&#x2F;&#x2F;etherpad&#x2e;org\">http:&#x2F;&#x2F;etherpad.org</a><br><span class=\"authora_HKIv23mEbachFYfH\">aw</span><br><br>","authors":["a.HKIv23mEbachFYfH",""]}}
{"code":4,"message":"no or wrong API Key","data":null}
*/
exports.createDiffHTML = function(padID, startRev, endRev, callback){

View File

@ -22,6 +22,7 @@
var ERR = require("async-stacktrace");
var db = require("./DB").db;
var async = require("async");
var customError = require("../utils/customError");
var randomString = require('ep_etherpad-lite/static/js/pad_utils').randomString;
exports.getColorPalette = function(){
@ -272,4 +273,4 @@ exports.removePad = function (authorID, padID)
db.set("globalAuthor:" + authorID, author);
}
});
}
}

View File

@ -215,25 +215,32 @@ exports.createGroupIfNotExistsFor = function(groupMapper, callback)
{
if(ERR(err, callback)) return;
// there is a group for this mapper
if(groupID) {
exports.doesGroupExist(groupID, function(err, exists) {
if(ERR(err, callback)) return;
if(exists) return callback(null, {groupID: groupID});
// hah, the returned group doesn't exist, let's create one
createGroupForMapper(callback)
})
}
//there is no group for this mapper, let's create a group
if(groupID == null)
{
else {
createGroupForMapper(callback)
}
function createGroupForMapper(cb) {
exports.createGroup(function(err, responseObj)
{
if(ERR(err, callback)) return;
if(ERR(err, cb)) return;
//create the mapper entry for this group
db.set("mapper2group:"+groupMapper, responseObj.groupID);
callback(null, responseObj);
cb(null, responseObj);
});
}
//there is a group for this mapper, let's return it
else
{
if(ERR(err, callback)) return;
callback(null, {groupID: groupID});
}
});
}

View File

@ -37,6 +37,11 @@ var globalPads = {
set: function (name, value)
{
this[':'+name] = value;
if(!padList.list.length == 0){ // If we haven't populated the padList.list yet
padList.init();
}
padList.addPad(name);
},
remove: function (name) { delete this[':'+name]; }
@ -85,7 +90,6 @@ var padList = {
}
};
//initialises the allknowing data structure
padList.init();
/**
* An array of padId transformations. These represent changes in pad name policy over
@ -159,6 +163,9 @@ exports.getPad = function(id, text, callback)
exports.listAllPads = function(callback)
{
if(!padList.list.length == 0){ // If we haven't populated the padList.list yet
padList.init();
}
if(callback != null){
callback(null,{padIDs: padList.getPads()});
}else{
@ -224,6 +231,9 @@ exports.isValidPadId = function(padId)
* Removes the pad from database and unloads it.
*/
exports.removePad = function(padId){
if(!padList.list.length == 0){ // If we haven't populated the padList.list yet
padList.init();
}
db.remove("pad:"+padId);
exports.unloadPad(padId);
padList.removePad(padId);

View File

@ -77,28 +77,22 @@ exports.getPadId = function(readOnlyId, callback)
* returns a the padId and readonlyPadId in an object for any id
* @param {String} padIdOrReadonlyPadId read only id or real pad id
*/
exports.getIds = function(padIdOrReadonlyPadId, callback) {
var handleRealPadId = function () {
exports.getReadOnlyId(padIdOrReadonlyPadId, function (err, value) {
exports.getIds = function(id, callback) {
if (id.indexOf("r.") == 0)
exports.getPadId(id, function (err, value) {
if(ERR(err, callback)) return;
callback(null, {
readOnlyPadId: id,
padId: value, // Might be null, if this is an unknown read-only id
readonly: true
});
});
else
exports.getReadOnlyId(id, function (err, value) {
callback(null, {
readOnlyPadId: value,
padId: padIdOrReadonlyPadId,
padId: id,
readonly: false
});
});
}
if (padIdOrReadonlyPadId.indexOf("r.") != 0)
return handleRealPadId();
exports.getPadId(padIdOrReadonlyPadId, function (err, value) {
if(ERR(err, callback)) return;
if (value == null)
return handleRealPadId();
callback(null, {
readOnlyPadId: padIdOrReadonlyPadId,
padId: value,
readonly: true
});
});
}

View File

@ -41,6 +41,11 @@ var authLogger = log4js.getLogger("auth");
exports.checkAccess = function (padID, sessionCookie, token, password, callback)
{
var statusObject;
if(!padID) {
callback(null, {accessStatus: "deny"});
return;
}
// a valid session is required (api-only mode)
if(settings.requireSession)

View File

@ -28,7 +28,9 @@ var ERR = require("async-stacktrace")
, settings = require('../utils/Settings')
, formidable = require('formidable')
, os = require("os")
, importHtml = require("../utils/ImportHtml");
, importHtml = require("../utils/ImportHtml")
, log4js = require('log4js');
//load abiword only if its enabled
if(settings.abiword != null)
@ -42,6 +44,8 @@ var tmpDirectory = process.env.TEMP || process.env.TMPDIR || process.env.TMP ||
*/
exports.doImport = function(req, res, padId)
{
var apiLogger = log4js.getLogger("ImportHandler");
//pipe to a file
//convert file to html via abiword
//set html in the pad
@ -113,6 +117,30 @@ exports.doImport = function(req, res, padId)
}
},
function(callback) {
if (!abiword) {
// Read the file with no encoding for raw buffer access.
fs.readFile(destFile, function(err, buf) {
if (err) throw err;
var isAscii = true;
// Check if there are only ascii chars in the uploaded file
for (var i=0, len=buf.length; i<len; i++) {
if (buf[i] > 240) {
isAscii=false;
break;
}
}
if (isAscii) {
callback();
} else {
callback("uploadFailed");
}
});
} else {
callback();
}
},
//get the pad object
function(callback) {
padManager.getPad(padId, function(err, _pad){
@ -127,7 +155,10 @@ exports.doImport = function(req, res, padId)
fs.readFile(destFile, "utf8", function(err, _text){
if(ERR(err, callback)) return;
text = _text;
// Title needs to be stripped out else it appends it to the pad..
text = text.replace("<title>", "<!-- <title>");
text = text.replace("</title>-->");
//node on windows has a delay on releasing of the file lock.
//We add a 100ms delay to work around this
if(os.type().indexOf("Windows") > -1){
@ -142,7 +173,11 @@ exports.doImport = function(req, res, padId)
function(callback) {
var fileEnding = path.extname(srcFile).toLowerCase();
if (abiword || fileEnding == ".htm" || fileEnding == ".html") {
importHtml.setPadHTML(pad, text);
try{
importHtml.setPadHTML(pad, text);
}catch(e){
apiLogger.warn("Error importing, possibly caused by malformed HTML");
}
} else {
pad.setText(text);
}

View File

@ -48,6 +48,7 @@ var channels = require("channels");
* author = the author name of this session
*/
var sessioninfos = {};
exports.sessioninfos = sessioninfos;
/**
* A changeset queue per pad that is processed by handleUserChanges()
@ -143,15 +144,16 @@ exports.handleDisconnect = function(client)
*/
exports.handleMessage = function(client, message)
{
if(message == null)
{
messageLogger.warn("Message is null!");
return;
}
if(!message.type)
{
messageLogger.warn("Message has no type attribute!");
return;
}
if(!sessioninfos[client.id]) {
messageLogger.warn("Dropped message from an unknown connection.")
return;
}
@ -593,7 +595,7 @@ function handleUserChanges(data, cb)
// defined in the accompanying attribute pool.
Changeset.eachAttribNumber(changeset, function(n) {
if (! wireApool.getAttrib(n)) {
throw "Attribute pool is missing attribute "+n+" for changeset "+changeset;
throw new Error("Attribute pool is missing attribute "+n+" for changeset "+changeset);
}
});
@ -607,23 +609,22 @@ function handleUserChanges(data, cb)
if(!attr) return
attr = wireApool.getAttrib(attr)
if(!attr) return
if('author' == attr[0] && attr[1] != thisSession.author) throw "Trying to submit changes as another author"
if('author' == attr[0] && attr[1] != thisSession.author) throw new Error("Trying to submit changes as another author in changeset "+changeset);
})
}
//ex. adoptChangesetAttribs
//Afaik, it copies the new attributes from the changeset, to the global Attribute Pool
changeset = Changeset.moveOpsToNewPool(changeset, wireApool, pad.pool);
}
catch(e)
{
// There is an error in this changeset, so just refuse it
console.warn("Can't apply USER_CHANGES "+changeset+", because: "+e);
client.json.send({disconnect:"badChangeset"});
return;
return callback(new Error("Can't apply USER_CHANGES, because "+e.message));
}
//ex. adoptChangesetAttribs
//Afaik, it copies the new attributes from the changeset, to the global Attribute Pool
changeset = Changeset.moveOpsToNewPool(changeset, wireApool, pad.pool);
//ex. applyUserChanges
apool = pad.pool;
r = baseRev;
@ -650,9 +651,8 @@ function handleUserChanges(data, cb)
{
changeset = Changeset.follow(c, changeset, false, apool);
}catch(e){
console.warn("Can't apply USER_CHANGES "+changeset+", possibly because of mismatched follow error");
client.json.send({disconnect:"badChangeset"});
return;
return callback(new Error("Can't apply USER_CHANGES, because "+e.message));
}
if ((r - baseRev) % 200 == 0) { // don't let the stack get too deep
@ -673,10 +673,8 @@ function handleUserChanges(data, cb)
if (Changeset.oldLen(changeset) != prevText.length)
{
console.warn("Can't apply USER_CHANGES "+changeset+" with oldLen " + Changeset.oldLen(changeset) + " to document of length " + prevText.length);
client.json.send({disconnect:"badChangeset"});
callback();
return;
return callback(new Error("Can't apply USER_CHANGES "+changeset+" with oldLen " + Changeset.oldLen(changeset) + " to document of length " + prevText.length));
}
pad.appendRevision(changeset, thisSession.author);
@ -700,7 +698,7 @@ function handleUserChanges(data, cb)
], function(err)
{
cb();
ERR(err);
if(err) console.warn(err.stack || err)
});
}
@ -953,8 +951,7 @@ function handleClientReady(client, message)
authorManager.getAuthor(authorId, function(err, author)
{
if(ERR(err, callback)) return;
delete author.timestamp;
historicalAuthorData[authorId] = author;
historicalAuthorData[authorId] = {name: author.name, colorId: author.colorId}; // Filter author attribs (e.g. don't send author's pads to all clients)
callback();
});
}, callback);
@ -1007,11 +1004,17 @@ function handleClientReady(client, message)
//This is a normal first connect
else
{
//prepare all values for the wire
var atext = Changeset.cloneAText(pad.atext);
var attribsForWire = Changeset.prepareForWire(atext.attribs, pad.pool);
var apool = attribsForWire.pool.toJsonable();
atext.attribs = attribsForWire.translated;
//prepare all values for the wire, there'S a chance that this throws, if the pad is corrupted
try {
var atext = Changeset.cloneAText(pad.atext);
var attribsForWire = Changeset.prepareForWire(atext.attribs, pad.pool);
var apool = attribsForWire.pool.toJsonable();
atext.attribs = attribsForWire.translated;
}catch(e) {
console.error(e.stack || e)
client.json.send({disconnect:"corruptPad"});// pull the breaks
return callback();
}
// Warning: never ever send padIds.padId to the client. If the
// client is read only you would open a security hole 1 swedish
@ -1520,6 +1523,7 @@ exports.padUsers = function (padID, callback) {
author.id = s.author;
result.push(author);
callback();
});
}
}, function(err) {

View File

@ -23,6 +23,7 @@ var ERR = require("async-stacktrace");
var log4js = require('log4js');
var messageLogger = log4js.getLogger("message");
var securityManager = require("../db/SecurityManager");
var settings = require('../utils/Settings');
/**
* Saves all components
@ -52,8 +53,14 @@ exports.setSocketIO = function(_socket) {
//save this socket internaly
socket = _socket;
socket.sockets.on('connection', function(client) {
client.set('remoteAddress', client.handshake.address.address);
socket.sockets.on('connection', function(client)
{
if(settings.trustProxy && client.handshake.headers['x-forwarded-for'] !== undefined){
client.set('remoteAddress', client.handshake.headers['x-forwarded-for']);
}
else{
client.set('remoteAddress', client.handshake.address.address);
}
var clientAuthorized = false;
//wrap the original send function to log the messages

View File

@ -19,7 +19,7 @@ exports.createServer = function () {
var refPath = rootPath + "/.git/" + ref.substring(5, ref.indexOf("\n"));
version = fs.readFileSync(refPath, "utf-8");
version = version.substring(0, 7);
console.log("Your Etherpad Lite git version is " + version);
console.log("Your Etherpad git version is " + version);
}
catch(e)
{
@ -27,11 +27,11 @@ exports.createServer = function () {
}
console.log("Report bugs at https://github.com/ether/etherpad-lite/issues")
serverName = "Etherpad-Lite " + version + " (http://etherpad.org)";
serverName = "Etherpad " + version + " (http://etherpad.org)";
exports.restartServer();
console.log("You can access your Etherpad-Lite instance at http://" + settings.ip + ":" + settings.port + "/");
console.log("You can access your Etherpad instance at http://" + settings.ip + ":" + settings.port + "/");
if(!_.isEmpty(settings.users)){
console.log("The plugin admin page is at http://" + settings.ip + ":" + settings.port + "/admin/plugins");
}
@ -75,6 +75,10 @@ exports.restartServer = function () {
next();
});
if(settings.trustProxy){
app.enable('trust proxy');
}
app.configure(function() {
hooks.callAll("expressConfigure", {"app": app});
});

View File

@ -1,5 +1,6 @@
var log4js = require('log4js');
var apiLogger = log4js.getLogger("API");
var clientLogger = log4js.getLogger("client");
var formidable = require('formidable');
var apiHandler = require('../../handler/APIHandler');
@ -42,10 +43,10 @@ exports.expressCreateServer = function (hook_name, args, cb) {
});
});
//The Etherpad client side sends information about how a disconnect happen
//The Etherpad client side sends information about how a disconnect happened
args.app.post('/ep/pad/connection-diagnostic-info', function(req, res) {
new formidable.IncomingForm().parse(req, function(err, fields, files) {
console.log("DIAGNOSTIC-INFO: " + fields.diagnosticInfo);
clientLogger.info("DIAGNOSTIC-INFO: " + fields.diagnosticInfo);
res.end("OK");
});
});
@ -53,7 +54,12 @@ exports.expressCreateServer = function (hook_name, args, cb) {
//The Etherpad client side sends information about client side javscript errors
args.app.post('/jserror', function(req, res) {
new formidable.IncomingForm().parse(req, function(err, fields, files) {
console.error("CLIENT SIDE JAVASCRIPT ERROR: " + fields.errorInfo);
try {
var data = JSON.parse(fields.errorInfo)
}catch(e){
return res.end()
}
clientLogger.warn(data.msg+' --', data);
res.end("OK");
});
});

View File

@ -15,7 +15,7 @@ exports.expressCreateServer = function (hook_name, args, cb) {
//if abiword is disabled, and this is a format we only support with abiword, output a message
if (settings.abiword == null &&
["odt", "pdf", "doc"].indexOf(req.params.type) !== -1) {
res.send("Abiword is not enabled at this Etherpad Lite instance. Set the path to Abiword in settings.json to enable this feature");
res.send("Abiword is not enabled at this Etherpad instance. Set the path to Abiword in settings.json to enable this feature");
return;
}

View File

@ -86,7 +86,7 @@ var API = {
},
"createIfNotExistsFor" : {
"func": "createGroupIfNotExistsFor",
"description": "this functions helps you to map your application group ids to etherpad lite group ids",
"description": "this functions helps you to map your application group ids to Etherpad group ids",
"response": {"groupID":{"type":"string"}}
},
"delete" : {
@ -124,7 +124,7 @@ var API = {
},
"createIfNotExistsFor": {
"func": "createAuthorIfNotExistsFor",
"description": "this functions helps you to map your application author ids to etherpad lite author ids",
"description": "this functions helps you to map your application author ids to Etherpad author ids",
"response": {"authorID":{"type":"string"}}
},
"listPads": {

View File

@ -32,8 +32,8 @@ exports.basicAuth = function (req, res, next) {
// If auth headers are present use them to authenticate...
if (req.headers.authorization && req.headers.authorization.search('Basic ') === 0) {
var userpass = new Buffer(req.headers.authorization.split(' ')[1], 'base64').toString().split(":")
var username = userpass[0];
var password = userpass[1];
var username = userpass.shift();
var password = userpass.join(':');
if (settings.users[username] != undefined && settings.users[username].password == password) {
settings.users[username].username = username;

View File

@ -100,7 +100,7 @@ else
{
//add data to buffer
stdoutBuffer+=data.toString();
//we're searching for the prompt, cause this means everything we need is in the buffer
if(stdoutBuffer.search("AbiWord:>") != -1)
{

View File

@ -31,7 +31,13 @@ function setPadHTML(pad, html, callback)
var padText = pad.text();
// Parse the incoming HTML with jsdom
var doc = jsdom(html.replace(/>\n+</g, '><'));
try{
var doc = jsdom(html.replace(/>\n+</g, '><'));
}catch(e){
apiLogger.warn("Error importing, possibly caused by malformed HTML");
var doc = jsdom("<html><body><div>Error during import, possibly malformed HTML</div></body></html>");
}
apiLogger.debug('html:');
apiLogger.debug(html);

View File

@ -35,7 +35,7 @@ exports.root = path.normalize(path.join(npm.dir, ".."));
/**
* The app title, visible e.g. in the browser window
*/
exports.title = "Etherpad Lite";
exports.title = "Etherpad";
/**
* The app favicon fully specified url, visible e.g. in the browser window
@ -77,7 +77,7 @@ exports.dbSettings = { "filename" : path.join(exports.root, "dirty.db") };
/**
* The default Text of a new pad
*/
exports.defaultPadText = "Welcome to Etherpad Lite!\n\nThis pad text is synchronized as you type, so that everyone viewing this page sees the same text. This allows you to collaborate seamlessly on documents!\n\nEtherpad Lite on Github: http:\/\/j.mp/ep-lite\n";
exports.defaultPadText = "Welcome to Etherpad!\n\nThis pad text is synchronized as you type, so that everyone viewing this page sees the same text. This allows you to collaborate seamlessly on documents!\n\nEtherpad on Github: http:\/\/j.mp/ep-lite\n";
/**
* A flag that requires any user to have a valid session (via the api) before accessing a pad
@ -119,6 +119,11 @@ exports.logconfig = { appenders: [{ type: "console" }]};
*/
exports.sessionKey = false;
/*
* Trust Proxy, whether or not trust the x-forwarded-for header.
*/
exports.trustProxy = false;
/* This setting is used if you need authentication and/or
* authorization. Note: /admin always requires authentication, and
* either authorization by a module, or a user with is_admin set */

View File

@ -47,5 +47,8 @@
"engines" : { "node" : ">=0.6.3",
"npm" : ">=1.0"
},
"version" : "1.2.11"
"repository" : { "type" : "git",
"url" : "http://github.com/ether/etherpad-lite.git"
},
"version" : "1.2.12"
}

View File

@ -142,11 +142,13 @@ td, th {
width:100%;
}
.messages td>* {
.messages {
height: 5em;
}
.messages * {
display: none;
text-align: center;
}
.messages .fetching {
display: block;
}
@ -162,7 +164,7 @@ td, th {
#search-progress.progress {
padding-top: 20%;
background: rgba(255,255,255,0.7);
background: rgba(255,255,255,0.3);
}
.progress * {

View File

@ -168,9 +168,9 @@ a img {
}
#editorcontainer {
position: absolute;
width: 100%;
top: 37px; /* + 1px border */
left: 0px;
right: 0px;
bottom: 0px;
z-index: 1;
}
@ -585,6 +585,9 @@ table#otheruserstable {
margin-right: 3px;
margin-top: 2px;
}
#exportColumn{
margin-top:20px;
}
.exporttype {
margin-top: 4px;
background-repeat: no-repeat;
@ -592,6 +595,7 @@ table#otheruserstable {
background-image: url("../../static/img/etherpad_lite_icons.png");
color: #333;
text-decoration: none;
padding-bottom:2px;
}
#exporthtml {
background-position: 0px -299px
@ -626,9 +630,8 @@ table#otheruserstable {
}
#importsubmitinput {
height: 25px;
width: 85px;
margin-top: 12px;
padding:2px 4px 2px 4px;
}
#importstatusball {
height: 50px
@ -746,8 +749,9 @@ input[type=checkbox] {
float: right
}
.popup {
font-size: 14px;
width: 450px;
font-size: 12px;
width: 80%;
max-width: 500px;
padding: 10px;
border-radius: 0 0 6px 6px;
border: 1px solid #ccc;
@ -804,7 +808,6 @@ input[type=checkbox] {
}
.column {
float: left;
width: 50%;
}
#settings,
#importexport,

View File

@ -42,15 +42,15 @@ exports.error = function error(msg) {
};
/**
* This method is user for assertions with Messages
* if assert fails, the error function called.
* This method is used for assertions with Messages
* if assert fails, the error function is called.
* @param b {boolean} assertion condition
* @param msgParts {string} error to be passed if it fails
*/
exports.assert = function assert(b, msgParts) {
if (!b) {
var msg = Array.prototype.slice.call(arguments, 1).join('');
exports.error("exports: " + msg);
exports.error("Failed assertion: " + msg);
}
};
@ -281,7 +281,7 @@ exports.checkRep = function (cs) {
assem.endDocument();
var normalized = exports.pack(oldLen, calcNewLen, assem.toString(), charBank);
exports.assert(normalized == cs, normalized, ' != ', cs);
exports.assert(normalized == cs, 'Invalid changeset (checkRep failed)');
return cs;
}
@ -1296,7 +1296,7 @@ exports.compose = function (cs1, cs2, pool) {
var unpacked2 = exports.unpack(cs2);
var len1 = unpacked1.oldLen;
var len2 = unpacked1.newLen;
exports.assert(len2 == unpacked2.oldLen, "mismatched composition");
exports.assert(len2 == unpacked2.oldLen, "mismatched composition of two changesets");
var len3 = unpacked2.newLen;
var bankIter1 = exports.stringIterator(unpacked1.charBank);
var bankIter2 = exports.stringIterator(unpacked2.charBank);
@ -1504,6 +1504,7 @@ exports.moveOpsToNewPool = function (cs, oldPool, newPool) {
return upToDollar.replace(/\*([0-9a-z]+)/g, function (_, a) {
var oldNum = exports.parseNum(a);
var pair = oldPool.getAttrib(oldNum);
if(!pair) exports.error('Can\'t copy unknown attrib (reference attrib string to non-existant pool entry). Inconsistent attrib state!');
var newNum = newPool.putAttrib(pair);
return '*' + exports.numToString(newNum);
}) + fromDollar;
@ -2010,7 +2011,7 @@ exports.follow = function (cs1, cs2, reverseInsertOrder, pool) {
var unpacked2 = exports.unpack(cs2);
var len1 = unpacked1.oldLen;
var len2 = unpacked2.oldLen;
exports.assert(len1 == len2, "mismatched follow");
exports.assert(len1 == len2, "mismatched follow - cannot transform cs1 on top of cs2");
var chars1 = exports.stringIterator(unpacked1.charBank);
var chars2 = exports.stringIterator(unpacked2.charBank);
@ -2190,7 +2191,7 @@ exports.composeWithDeletions = function (cs1, cs2, pool) {
var unpacked2 = exports.unpack(cs2);
var len1 = unpacked1.oldLen;
var len2 = unpacked1.newLen;
exports.assert(len2 == unpacked2.oldLen, "mismatched composition");
exports.assert(len2 == unpacked2.oldLen, "mismatched composition of two changesets");
var len3 = unpacked2.newLen;
var bankIter1 = exports.stringIterator(unpacked1.charBank);
var bankIter2 = exports.stringIterator(unpacked2.charBank);

View File

@ -3745,6 +3745,7 @@ function Ace2Inner(){
doDeleteKey();
specialHandled = true;
}
if((evt.which == 36 && evt.ctrlKey == true)){ setScrollY(0); } // Control Home send to Y = 0
if((evt.which == 33 || evt.which == 34) && type == 'keydown'){
evt.preventDefault(); // This is required, browsers will try to do normal default behavior on page up / down and the default behavior SUCKS
@ -3793,21 +3794,35 @@ function Ace2Inner(){
}, 200);
}
/* Attempt to apply some sanity to cursor handling in Chrome after a copy / paste event
We have to do this the way we do because rep. doesn't hold the value for keyheld events IE if the user
presses and holds the arrow key */
presses and holds the arrow key .. Sorry if this is ugly, blame Chrome's weird handling of viewports after new content is added*/
if((evt.which == 37 || evt.which == 38 || evt.which == 39 || evt.which == 40) && $.browser.chrome){
var viewport = getViewPortTopBottom();
var myselection = document.getSelection(); // get the current caret selection, can't use rep. here because that only gives us the start position not the current
var caretOffsetTop = myselection.focusNode.parentNode.offsetTop; // get the carets selection offset in px IE 214
var lineHeight = $(myselection.focusNode.parentNode).parent().height(); // get the line height of the caret line
var caretOffsetTop = myselection.focusNode.parentNode.offsetTop || myselection.focusNode.offsetTop; // get the carets selection offset in px IE 214
var lineHeight = $(myselection.focusNode.parentNode).parent("div").height(); // get the line height of the caret line
// top.console.log("offsetTop", myselection.focusNode.parentNode.parentNode.offsetTop);
try {
lineHeight = $(myselection.focusNode).height() // needed for how chrome handles line heights of null objects
// console.log("lineHeight now", lineHeight);
}catch(e){}
var caretOffsetTopBottom = caretOffsetTop + lineHeight;
var visibleLineRange = getVisibleLineRange(); // the visible lines IE 1,10
if(caretOffsetTop){ // sometimes caretOffsetTop bugs out and returns 0, not sure why, possible Chrome bug? Either way if it does we don't wanna mess with it
var caretIsNotVisible = (caretOffsetTop <= viewport.top || caretOffsetTopBottom >= viewport.bottom); // Is the Caret Visible to the user?
// top.console.log(caretOffsetTop, viewport.top, caretOffsetTopBottom, viewport.bottom);
var caretIsNotVisible = (caretOffsetTop < viewport.top || caretOffsetTopBottom >= viewport.bottom); // Is the Caret Visible to the user?
// Expect some weird behavior caretOffsetTopBottom is greater than viewport.bottom on a keypress down
var offsetTopSamePlace = caretOffsetTop == viewport.top; // sometimes moving key left & up leaves the caret at the same point as the viewport.top, technically the caret is visible but it's not fully visible so we should move to it
if(offsetTopSamePlace && (evt.which == 37 || evt.which == 38)){
var newY = caretOffsetTop;
setScrollY(newY);
}
if(caretIsNotVisible){ // is the cursor no longer visible to the user?
// top.console.log("Caret is NOT visible to the user");
// top.console.log(caretOffsetTop,viewport.top,caretOffsetTopBottom,viewport.bottom);
// Oh boy the caret is out of the visible area, I need to scroll the browser window to lineNum.
if(evt.which == 37 || evt.which == 38){ // If left or up arrow
var newY = caretOffsetTop; // That was easy!
@ -3816,19 +3831,11 @@ function Ace2Inner(){
// only move the viewport if we're at the bottom of the viewport, if we hit down any other time the viewport shouldn't change
// NOTE: This behavior only fires if Chrome decides to break the page layout after a paste, it's annoying but nothing I can do
var selection = getSelection();
// top.console.log("line #", rep.selStart[0]); // the line our caret is on
// top.console.log("firstvisible", visibleLineRange[0]); // the first visiblel ine
// top.console.log("lastVisible", visibleLineRange[1]); // the last visible line
// Holding down arrow after a paste can lose the cursor -- This is the best fix I can find
if(rep.selStart[0] >= visibleLineRange[1] || rep.selStart[0] < visibleLineRange[0] ){ // if we're not at the bottom of the viewport
// top.console.log(viewport, lineHeight, myselection);
// TODO: Make it so chrome doesnt need to redraw the page by only applying this technique if required
var newY = caretOffsetTop;
}else{ // we're at the bottom of the viewport so snap to a "new viewport"
// top.console.log(viewport, lineHeight, myselection);
var newY = caretOffsetTopBottom; // Allow continuous holding of down arrow to redraw the screen so we can see what we are going to highlight
}
top.console.log("line #", rep.selStart[0]); // the line our caret is on
top.console.log("firstvisible", visibleLineRange[0]); // the first visiblel ine
top.console.log("lastVisible", visibleLineRange[1]); // the last visible line
top.console.log(rep.selStart[0], visibleLineRange[1], rep.selStart[0], visibleLineRange[0]);
var newY = viewport.top + lineHeight;
}
if(newY){
setScrollY(newY); // set the scrollY offset of the viewport on the document
@ -3855,7 +3862,7 @@ function Ace2Inner(){
}
else if (type == "keyup")
{
var wait = 200;
var wait = 0;
idleWorkTimer.atLeast(wait);
idleWorkTimer.atMost(wait);
}
@ -3875,7 +3882,7 @@ function Ace2Inner(){
if ((!specialHandled) && (!thisKeyDoesntTriggerNormalize) && (!inInternationalComposition))
{
if (type != "keyup" || !incorpIfQuick())
if (type != "keyup")
{
observeChangesAroundSelection();
}

View File

@ -22,22 +22,29 @@ $(document).ready(function () {
search.searchTerm = searchTerm;
socket.emit("search", {searchTerm: searchTerm, offset:search.offset, limit: limit, sortBy: search.sortBy, sortDir: search.sortDir});
search.offset += limit;
$('#search-progress').show()
search.messages.show('fetching')
storeScrollPosition()
search.searching = true
}
search.searching = false;
search.offset = 0;
search.limit = 12;
search.limit = 25;
search.results = [];
search.sortBy = 'name';
search.sortDir = /*DESC?*/true;
search.end = true;// have we received all results already?
search.messages = {
show: function(msg) {
$('.search-results .messages').show()
//$('.search-results .messages').show()
$('.search-results .messages .'+msg+'').show()
$('.search-results .messages .'+msg+' *').show()
},
hide: function(msg) {
$('.search-results .messages').hide()
//$('.search-results .messages').hide()
$('.search-results .messages .'+msg+'').hide()
$('.search-results .messages .'+msg+' *').hide()
}
}
@ -97,13 +104,25 @@ $(document).ready(function () {
}
// Infinite scroll
var scrollPosition
function storeScrollPosition() {
scrollPosition = $(window).scrollTop()
}
function restoreScrollPosition() {
setTimeout(function() {
$(window).scrollTop(scrollPosition)
}, 0)
}
$(window).scroll(checkInfiniteScroll)
function checkInfiniteScroll() {
if(search.end) return;// don't keep requesting if there are no more results
try{
var top = $('.search-results .results > tr:last').offset().top
if($(window).scrollTop()+$(window).height() > top) search(search.searchTerm)
}catch(e){}
if(search.end || search.searching) return;// don't keep requesting if there are no more results
setTimeout(function() {
try{
var top = $('.results>tr:last').offset().top
if($(window).scrollTop()+$(window).height() > top) search(search.searchTerm)
}catch(e){}
}, 1)
}
function updateHandlers() {
@ -181,8 +200,11 @@ $(document).ready(function () {
}else {
search.messages.show('nothing-found')
}
search.messages.hide('fetching')
$('#search-progress').hide()
restoreScrollPosition()
checkInfiniteScroll()
search.searching = false
});
socket.on('results:installed', function (data) {

View File

@ -198,11 +198,7 @@ function loadBroadcastSliderJS(fireWhenAllScriptsAreLoaded)
});
if (numAnonymous > 0)
{
var anonymousAuthorString;
if(numAnonymous == 1)
anonymousAuthorString = html10n.get("timeslider.unnamedauthor", { num: numAnonymous });
else
anonymousAuthorString = html10n.get("timeslider.unnamedauthors", { num: numAnonymous });
var anonymousAuthorString = html10n.get("timeslider.unnamedauthors", { num: numAnonymous });
if (numNamed !== 0){
authorsList.append(' + ' + anonymousAuthorString);

View File

@ -42,13 +42,13 @@ var chat = (function()
padcookie.setPref("chatAlwaysVisible", true);
$('#chatbox').addClass("stickyChat");
$('#chattext').css({"top":"0px"});
$('#editorcontainer').css({"right":"192px", "width":"auto"});
$('#editorcontainer').css({"right":"192px"});
isStuck = true;
} else { // Unstick it
padcookie.setPref("chatAlwaysVisible", false);
$('#chatbox').removeClass("stickyChat");
$('#chattext').css({"top":"25px"});
$('#editorcontainer').css({"right":"0px", "width":"100%"});
$('#editorcontainer').css({"right":"0px"});
isStuck = false;
}
},

View File

@ -46,7 +46,20 @@ window.html10n = (function(window, document, undefined) {
, consoleError = interceptConsole('warn')
// fix Array.prototype.instanceOf in, guess what, IE! <3
// fix Array#forEach in IE
// taken from https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach
if (!Array.prototype.forEach) {
Array.prototype.forEach = function(fn, scope) {
for(var i = 0, len = this.length; i < len; ++i) {
if (i in this) {
fn.call(scope, this[i], i, this);
}
}
};
}
// fix Array#indexOf in, guess what, IE! <3
// taken from https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/indexOf
if (!Array.prototype.indexOf) {
Array.prototype.indexOf = function (searchElement /*, fromIndex */ ) {
"use strict";
@ -79,15 +92,6 @@ window.html10n = (function(window, document, undefined) {
return -1;
}
}
// fix Array.prototype.forEach in IE
if (!('forEach' in Array.prototype)) {
Array.prototype.forEach= function(action, that /*opt*/) {
for (var i= 0, n= this.length; i<n; i++)
if (i in this)
action.call(that, this[i], i, this);
};
}
/**
* MicroEvent - to make any js object an event emitter (server or browser)
@ -643,25 +647,26 @@ window.html10n = (function(window, document, undefined) {
/**
* pre-defined 'plural' macro
*/
html10n.macros.plural = function(translations, key, str, param) {
var n = parseFloat(param);
html10n.macros.plural = function(key, param, opts) {
var str
, n = parseFloat(param);
if (isNaN(n))
return str;
return;
// initialize _pluralRules
if (!this._pluralRules)
this._pluralRules = getPluralRules(html10n.language);
var index = '[' + this._pluralRules(n) + ']';
var index = this._pluralRules(n);
// try to find a [zero|one|two] key if it's defined
if (n === 0 && (key + '[zero]') in translations) {
str = translations[key + '[zero]'];
} else if (n == 1 && (key + '[one]') in translations) {
str = translations[key + '[one]'];
} else if (n == 2 && (key + '[two]') in translations) {
str = translations[key + '[two]'];
} else if ((key + index) in translations) {
str = translations[key + index][prop];
if (n === 0 && ('zero') in opts) {
str = opts['zero'];
} else if (n == 1 && ('one') in opts) {
str = opts['one'];
} else if (n == 2 && ('two') in opts) {
str = opts['two'];
} else if (index in opts) {
str = opts[index];
}
return str;
@ -739,65 +744,81 @@ window.html10n = (function(window, document, undefined) {
if(!translations) return consoleWarn('No translations available (yet)')
if(!translations[id]) return consoleWarn('Could not find string '+id)
// apply args
var str = substArguments(translations[id], args)
// apply macros
return substMacros(id, str, args)
var str = translations[id]
// replace {{arguments}} with their values or the
// associated translation string (based on its key)
function substArguments(str, args) {
var reArgs = /\{\{\s*([a-zA-Z\.]+)\s*\}\}/
, match
while (match = reArgs.exec(str)) {
if (!match || match.length < 2)
return str // argument key not found
str = substMacros(id, str, args)
// apply args
str = substArguments(str, args)
return str
}
// replace {{arguments}} with their values or the
// associated translation string (based on its key)
function substArguments(str, args) {
var reArgs = /\{\{\s*([a-zA-Z\.]+)\s*\}\}/
, match
while (match = reArgs.exec(str)) {
if (!match || match.length < 2)
return str // argument key not found
var arg = match[1]
, sub = ''
if (arg in args) {
sub = args[arg]
} else if (arg in translations) {
sub = translations[arg]
} else {
consoleWarn('Could not find argument {{' + arg + '}}')
return str
}
str = str.substring(0, match.index) + sub + str.substr(match.index + match[0].length)
var arg = match[1]
, sub = ''
if (arg in args) {
sub = args[arg]
} else if (arg in translations) {
sub = translations[arg]
} else {
consoleWarn('Could not find argument {{' + arg + '}}')
return str
}
return str
str = str.substring(0, match.index) + sub + str.substr(match.index + match[0].length)
}
// replace {[macros]} with their values
function substMacros(key, str, args) {
var regex = /\{\[\s*([a-zA-Z]+):([a-zA-Z]+)\s*\]\}/
, match = regex.exec(str);
if (!match || !match.length)
return str;
return str
}
// replace {[macros]} with their values
function substMacros(key, str, args) {
var regex = /\{\[\s*([a-zA-Z]+)\(([a-zA-Z]+)\)((\s*([a-zA-Z]+)\: ?([ a-zA-Z{}]+),?)+)*\s*\]\}/ //.exec('{[ plural(n) other: are {{n}}, one: is ]}')
, match
while(match = regex.exec(str)) {
// a macro has been found
// Note: at the moment, only one parameter is supported
var macroName = reMatch[1]
, paramName = reMatch[2]
var macroName = match[1]
, paramName = match[2]
, optv = match[3]
, opts = {}
if (!(macroName in gMacros)) return str
if (!(macroName in html10n.macros)) continue
if(optv) {
optv.match(/(?=\s*)([a-zA-Z]+)\: ?([ a-zA-Z{}]+)(?=,?)/g).forEach(function(arg) {
var parts = arg.split(':')
, name = parts[0]
, value = parts[1].trim()
opts[name] = value
})
}
var param
if (args && paramName in args) {
param = args[paramName]
} else if (paramName in translations) {
} else if (paramName in html10n.translations) {
param = translations[paramName]
}
// there's no macro parser yet: it has to be defined in gMacros
// there's no macro parser: it has to be defined in html10n.macros
var macro = html10n.macros[macroName]
str = macro(translations, key, str, param)
return str
str = str.substr(0, match.index) + macro(key, param, opts) + str.substr(match.index+match[0].length)
}
return str
}
/**

View File

@ -334,7 +334,7 @@ function handshake()
{
pad.notifyChangeName(settings.globalUserName); // Notifies the server
pad.myUserInfo.name = settings.globalUserName;
$('#myusernameedit').attr({"value":settings.globalUserName}); // Updates the current users UI
$('#myusernameedit').val(settings.globalUserName); // Updates the current users UI
}
if (settings.globalUserColor !== false && colorutils.isCssHex(settings.globalUserColor))
{
@ -524,7 +524,7 @@ var pad = {
if(padcookie.getPref("showAuthorshipColors") == false){
pad.changeViewOption('showAuthorColors', false);
}
hooks.aCallAll("postAceInit", {ace: padeditor.ace});
hooks.aCallAll("postAceInit", {ace: padeditor.ace, pad: pad});
}
},
dispose: function()

View File

@ -66,11 +66,11 @@ var padconnectionstatus = (function()
};
var k = String(msg).toLowerCase(); // known reason why
if (!(k == 'userdup' || k == 'deleted' || k == 'looping' || k == 'slowcommit' || k == 'initsocketfail' || k == 'unauth'))
if (!(k == 'userdup' || k == 'deleted' || k == 'looping' || k == 'slowcommit' || k == 'initsocketfail' || k == 'unauth' || k == 'badChangeset' || k == 'corruptPad'))
{
k = 'disconnected';
}
padmodals.showModal(k);
padmodals.showOverlay();
},

View File

@ -633,6 +633,9 @@ var paduserlist = (function()
otherUsersInfo.splice(newExistingIndex, 1);
otherUsersData.splice(newExistingIndex, 1);
rowManager.removeRow(newExistingIndex);
hooks.callAll('userLeave', {
userInfo: info
});
updateInviteNotice();
}
}

View File

@ -519,7 +519,7 @@ function setupGlobalExceptionHandler() {
//show javascript errors to the user
$("#editorloadingbox").css("padding", "10px");
$("#editorloadingbox").css("padding-top", "45px");
$("#editorloadingbox").html("<div style='text-align:left;color:red;font-size:16px;'><b>An error occured</b><br>The error was reported with the following id: '" + errorId + "'<br><br><span style='color:black;font-weight:bold;font-size:16px'>Please send this error message to us: </span><div style='color:black;font-size:14px'>'"
$("#editorloadingbox").html("<div style='text-align:left;color:red;font-size:16px;'><b>An error occured</b><br>The error was reported with the following id: '" + errorId + "'<br><br><span style='color:black;font-weight:bold;font-size:16px'>Please press and hold Ctrl and press F5 to reload this page, if the problem persists please send this error message to your webmaster: </span><div style='color:black;font-size:14px'>'"
+ "ErrorId: " + errorId + "<br>URL: " + window.location.href + "<br>UserAgent: " + navigator.userAgent + "<br>" + msg + " in " + url + " at line " + linenumber + "'</div></div>");
}

View File

@ -79,10 +79,12 @@ exports.search = function(searchTerm, maxCacheAge, cb) {
exports.getAvailablePlugins(maxCacheAge, function(er, results) {
if(er) return cb && cb(er);
var res = {};
searchTerm = searchTerm.toLowerCase();
if (searchTerm)
searchTerm = searchTerm.toLowerCase();
for (var pluginName in results) { // for every available plugin
if (pluginName.indexOf(plugins.prefix) != 0) continue; // TODO: Also search in keywords here!
if(pluginName.indexOf(searchTerm) < 0 && results[pluginName].description.indexOf(searchTerm) < 0) continue;
if(searchTerm && !~pluginName.toLowerCase().indexOf(searchTerm) && !~results[pluginName].description.toLowerCase().indexOf(searchTerm)) continue;
res[pluginName] = results[pluginName];
}
cb && cb(null, res)

View File

@ -1,24 +1,24 @@
<!doctype html>
<html>
<head>
<title>Admin Dashboard - Etherpad</title>
<meta name="viewport" content="width=device-width">
<link rel="stylesheet" href="../static/css/admin.css">
<script src="../static/js/jquery.js"></script>
<script src="../socket.io/socket.io.js"></script>
</head>
<body>
<div id="wrapper">
<div class="menu">
<h1>Etherpad</h1>
<ul>
<% e.begin_block("adminMenu"); %>
<li><a href="plugins">Plugin manager</a> </li>
<li><a href="settings">Settings</a> </li>
<li><a href="plugins/info">Troubleshooting information</a> </li>
<% e.end_block(); %>
</ul>
</div>
</div>
</body>
</html>
<!doctype html>
<html>
<head>
<title>Admin Dashboard - Etherpad</title>
<meta name="viewport" content="width=device-width">
<link rel="stylesheet" href="../static/css/admin.css">
<script src="../static/js/jquery.js"></script>
<script src="../socket.io/socket.io.js"></script>
</head>
<body>
<div id="wrapper">
<div class="menu">
<h1><a href="../../">Etherpad</a></h1>
<ul>
<% e.begin_block("adminMenu"); %>
<li><a href="plugins">Plugin manager</a> </li>
<li><a href="settings">Settings</a> </li>
<li><a href="plugins/info">Troubleshooting information</a> </li>
<% e.end_block(); %>
</ul>
</div>
</div>
</body>
</html>

View File

@ -1,7 +1,7 @@
<%
var plugins = require("ep_etherpad-lite/static/js/pluginfw/plugins");
%>
<!doctype html>
<!doctype html>
<html>
<head>
<title>Plugin information - Etherpad</title>
@ -11,7 +11,7 @@
<body>
<div id="wrapper">
<div class="menu">
<h1>Etherpad</h1>
<h1><a href="../../../">Etherpad</a></h1>
<ul>
<% e.begin_block("adminMenu"); %>
<li><a href="../plugins">Plugin manager</a> </li>
@ -35,7 +35,7 @@
<h3>Client side hooks</h3>
<div><%- plugins.formatHooks("client_hooks") %></div>
</div>
</div>
</body>

View File

@ -1,112 +1,114 @@
<!doctype html>
<html>
<head>
<title>Plugin manager - Etherpad</title>
<meta name="viewport" content="width=device-width">
<link rel="stylesheet" href="../static/css/admin.css">
<script src="../static/js/jquery.js"></script>
<script src="../socket.io/socket.io.js"></script>
<script src="../static/js/admin/plugins.js"></script>
</head>
<body>
<div id="wrapper">
<% if (errors.length) { %>
<div class="errors">
<% errors.forEach(function (item) { %>
<div class="error"><%= item.toString() %></div>
<% }) %>
</div>
<% } %>
<div class="menu">
<h1>Etherpad</h1>
<ul>
<% e.begin_block("adminMenu"); %>
<li><a href="plugins">Plugin manager</a> </li>
<li><a href="settings">Settings</a> </li>
<li><a href="plugins/info">Troubleshooting information</a> </li>
<% e.end_block(); %>
</ul>
</div>
<div class="innerwrapper">
<h2>Installed plugins</h2>
<table class="installed-results">
<thead>
<tr>
<th>Name</th>
<th>Description</th>
<th>Version</th>
<td></td>
</tr>
</thead>
<tbody class="template">
<tr id="installed-plugin-template">
<td class="name" data-label="Name"></td>
<td class="description" data-label="Description"></td>
<td class="version" data-label="Version"></td>
<td>
<div class="actions">
<input type="button" value="Uninstall" class="do-uninstall">
<div class="progress"><p><img src="../static/img/loading.gif"/></p><p><span class="message"></span></p></div>
</div>
</td>
</tr>
</tbody>
<tbody id="installed-plugins">
</tbody>
<tbody class="messages">
<tr><td></td><td>
<p class="nothing-installed">You haven't installed any plugins yet.</p>
<p class="fetching"><img src="../static/img/loading.gif"/><br/>Fetching installed plugins...</p>
</td><td></td></tr>
</tbody>
</table>
<div class="paged listing search-results">
<div class="separator"></div>
<h2>Available plugins</h2>
<form>
<input type="text" name="search" disabled placeholder="Search for plugins to install" id="search-query">
</form>
<table>
<thead>
<tr>
<th class="sort up" data-label="name">Name</th>
<th class="sort none" data-label="description">Description</th>
<th class="sort none" data-label="version">Version</th>
<td></td>
</tr>
</thead>
<tbody class="template">
<tr>
<td class="name" data-label="Name"></td>
<td class="description" data-label="Description"></td>
<td class="version" data-label="Version"></td>
<td>
<div class="actions">
<input type="button" value="Install" class="do-install">
<div class="progress"><p><img src="../static/img/loading.gif"/></p><p><span class="message"></span></p></div>
</div>
</td>
</tr>
</tbody>
<tbody class="results">
</tbody>
<tbody class="messages">
<tr><td></td><td>
<div class="search-progress" class="progress"><img src="../static/img/loading.gif"/></div>
<p class="nothing-found">No plugins found.</p>
<p class="fetching"><img src="../static/img/loading.gif"/><br/>Fetching catalogue...</p>
</td><td></td></tr>
</tbody>
</table>
</div>
</div>
</div>
</body>
</html>
<!doctype html>
<html>
<head>
<title>Plugin manager - Etherpad</title>
<meta name="viewport" content="width=device-width">
<link rel="stylesheet" href="../static/css/admin.css">
<script src="../static/js/jquery.js"></script>
<script src="../socket.io/socket.io.js"></script>
<script src="../static/js/admin/plugins.js"></script>
</head>
<body>
<div id="wrapper">
<% if (errors.length) { %>
<div class="errors">
<% errors.forEach(function (item) { %>
<div class="error"><%= item.toString() %></div>
<% }) %>
</div>
<% } %>
<div class="menu">
<h1><a href="../../">Etherpad</a></h1>
<ul>
<% e.begin_block("adminMenu"); %>
<li><a href="plugins">Plugin manager</a> </li>
<li><a href="settings">Settings</a> </li>
<li><a href="plugins/info">Troubleshooting information</a> </li>
<% e.end_block(); %>
</ul>
</div>
<div class="innerwrapper">
<h2>Installed plugins</h2>
<table class="installed-results">
<thead>
<tr>
<th>Name</th>
<th>Description</th>
<th>Version</th>
<td></td>
</tr>
</thead>
<tbody class="template">
<tr id="installed-plugin-template">
<td class="name" data-label="Name"></td>
<td class="description" data-label="Description"></td>
<td class="version" data-label="Version"></td>
<td>
<div class="actions">
<input type="button" value="Uninstall" class="do-uninstall">
<div class="progress"><p><img src="../static/img/loading.gif"/></p><p><span class="message"></span></p></div>
</div>
</td>
</tr>
</tbody>
<tbody id="installed-plugins">
</tbody>
<tbody class="messages">
<tr><td></td><td>
<p class="nothing-installed">You haven't installed any plugins yet.</p>
<p class="fetching"><img src="../static/img/loading.gif"/><br/>Fetching installed plugins...</p>
</td><td></td></tr>
</tbody>
</table>
<div class="paged listing search-results">
<div class="separator"></div>
<h2>Available plugins</h2>
<form>
<input type="text" name="search" disabled placeholder="Search for plugins to install" id="search-query">
</form>
<table>
<thead>
<tr>
<th class="sort up" data-label="name">Name</th>
<th class="sort none" data-label="description">Description</th>
<th class="sort none" data-label="version">Version</th>
<td></td>
</tr>
</thead>
<tbody class="template">
<tr>
<td class="name" data-label="Name"></td>
<td class="description" data-label="Description"></td>
<td class="version" data-label="Version"></td>
<td>
<div class="actions">
<input type="button" value="Install" class="do-install">
<div class="progress"><p><img src="../static/img/loading.gif"/></p><p><span class="message"></span></p></div>
</div>
</td>
</tr>
</tbody>
<tbody class="results">
</tbody>
<tbody>
<tr><td></td><td>
<div class="messages">
<div id="search-progress" class="progress"><p>&nbsp;</p></div>
<p class="nothing-found">No plugins found.</p>
<p class="fetching"><img src="../static/img/loading.gif"/><br/>Fetching...</p>
</div>
</td><td></td></tr>
</tbody>
</table>
</div>
</div>
</div>
</body>
</html>

Some files were not shown because too many files have changed in this diff Show More