diff --git a/.gitignore b/.gitignore index 4f315224..a3dd9f3b 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,6 @@ node_modules settings.json +!settings.json.template APIKEY.txt bin/abiword.exe bin/node.exe @@ -12,3 +13,5 @@ src/static/js/jquery.js npm-debug.log *.DS_Store .ep_initialized +*.crt +*.key diff --git a/CHANGELOG.md b/CHANGELOG.md index a2f7586f..31cd7756 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,22 @@ +# 1.2.2 + * More translations and better language support. See https://translatewiki.net/wiki/Translating:Etherpad_lite for more details + * Add a checkToken Method to the API + * Bugfix for Internal Caching issue that was causing some 404s on images. + * Bugfix for IE Import + * Bugfix for Node 0.6 compatibility + * Bugfix for multiple cookie support + * Bugfix for API when requireAuth is enabled. + * Plugin page now shows plugin version # + * Show color of Author in Chat messages + * Allow plugin search by description + * Allow for different socket IO transports + * Allow for custom favicon path + * Control S now does Create new Revision functionality + * Focus on password when required + * Frontend Timeslider test + * Allow for basic HTML etc. import without abiword + * Native HTTPS support + # 1.2.1 * Allow ! in urls inside the editor (Not Pad urls) * Allow comments in language files diff --git a/README.md b/README.md index 71ce8e77..754e67f7 100644 --- a/README.md +++ b/README.md @@ -28,8 +28,9 @@ documented codebase makes it easier for developers to improve the code and contr Etherpad Lite is designed to be easily embeddable and provides a [HTTP API](https://github.com/ether/etherpad-lite/wiki/HTTP-API) -that allows your web application to manage pads, users and groups. It is recommended to use the client implementations available for this API, listed on [this wiki page](https://github.com/ether/etherpad-lite/wiki/HTTP-API-client-libraries). -There is also a [jQuery plugin](https://github.com/johnyma22/etherpad-lite-jquery-plugin) that helps you to embed Pads into your website +that allows your web application to manage pads, users and groups. It is recommended to use the [available client implementations]((https://github.com/ether/etherpad-lite/wiki/HTTP-API-client-libraries) in order to interact with this API. There is also a [jQuery plugin](https://github.com/johnyma22/etherpad-lite-jquery-plugin) that helps you to embed Pads into your website. +There's also a full-featured plugin framework, allowing you to easily add your own features. +Finally, Etherpad Lite comes with translations into tons of different languages! **Visit [beta.etherpad.org](http://beta.etherpad.org) to test it live** diff --git a/bin/loadTesting/README b/bin/loadTesting/README index 297756f9..6a778664 100644 --- a/bin/loadTesting/README +++ b/bin/loadTesting/README @@ -3,7 +3,7 @@ This load tester is extremely useful for testing how many dormant clients can co TODO: Emulate characters being typed into a pad -HOW TO USE (from @mjd75) proper formatting at: https://github.com/Pita/etherpad-lite/issues/360 +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 diff --git a/doc/api/http_api.md b/doc/api/http_api.md index 990d1b49..8ce50081 100644 --- a/doc/api/http_api.md +++ b/doc/api/http_api.md @@ -9,7 +9,7 @@ The API gives another web application control of the pads. The basic functions a 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. -Take a look at [HTTP API client libraries](https://github.com/Pita/etherpad-lite/wiki/HTTP-API-client-libraries) to see if a library in your favorite language. +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. ## Examples @@ -60,9 +60,12 @@ Portal submits content into new blog post ## Usage +### API version +The latest version is `1.2` + ### Request Format -The API is accessible via HTTP. HTTP Requests are in the format /api/$APIVERSION/$FUNCTIONNAME. Parameters are transmitted via HTTP GET. $APIVERSION depends on the endpoints you want to use. The latest version is `1.1` +The API is accessible via HTTP. HTTP Requests are in the format /api/$APIVERSION/$FUNCTIONNAME. Parameters are transmitted via HTTP GET. $APIVERSION depends on the endpoints you want to use. ### Response Format Responses are valid JSON in the following format: @@ -407,3 +410,12 @@ sends a custom message of type `msg` to the pad *Example returns:* * `{code: 0, message:"ok", data: {}}` * `{code: 1, message:"padID does not exist", data: null}` + +#### checkToken() + * API >= 1.2 + +returns ok when api token is valid + +*Example returns:* + * `{"code":0,"message":"ok","data":null}` + * `{"code":4,"message":"no or wrong API Key","data":null}` diff --git a/doc/localization.md b/doc/localization.md index 3f0901ca..182197d9 100644 --- a/doc/localization.md +++ b/doc/localization.md @@ -1,19 +1,94 @@ # 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. + ## Translating -`/src/locales` contains files for all supported languages which contain the translated strings. To add support for a new language, copy the English language file named `en.ini` and translate it. -Translation files are simply `*.ini` files and look like this: +We rely on http://translatewiki.net to handle the translation process for us, so if you'd like to help... -``` -pad.modals.connected = Connect. -pad.modals.uderdup = Ouvrir dans une nouvelle fentre. -pad.toolbar.unindent.title = Dsindenter -pad.toolbar.undo.title = Annuler (Ctrl-Z) -timeslider.pageTitle = {{appTitle}} Curseur temporel +1. sign up at http://translatewiki.net +2. Visit our [TWN project page](https://translatewiki.net/wiki/Translating:Etherpad_lite) +3. Click on `Translate Etherpad lite interface` +4. Choose a target language, you'd like to translate our interface to, and hit `Fetch` +5. Start translating! + +Translations will be send back to us regularly and will eventually appear in the next release. + +## Implementation + +### Server-side +`/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 fentre." +, "pad.toolbar.unindent.title": "Dsindenter" +, "pad.toolbar.undo.title": "Annuler (Ctrl-Z)" +, "timeslider.pageTitle": "{{appTitle}} Curseur temporel" +, ... +} ``` -There must be only one translation per line. Each translation consists of a key (the id of the string that is to be translated), an equal sign and the translated string. Anything after the equa sign will be used as the translated string (you may put some spaces after `=` for better readability, though). Terms in curly braces must not be touched but left as they are, since they represent a dynamically changing part of the string like a variable. Imagine a message welcoming a user: `Welcome, {{userName}}!` would be translated as `Ahoy, {{userName}}!` in pirate. +Each translation consists of a key (the id of the string that is to be translated) and the translated string. Terms in curly braces must not be touched but left as they are, since they represent a dynamically changing part of the string like a variable. Imagine a message welcoming a user: `Welcome, {{userName}}!` would be translated as `Ahoy, {{userName}}!` in pirate. -## Under the hood -We use a `language` cookie to save your language settings if you change them. If you don't, we autodetect your locale using information from your browser. Now, that we know your preferred language this information is feeded into a very nice library called [webL10n](https://github.com/fabi1cazenave/webL10n), which loads the appropriate translations and applies them to our templates, providing translation params, pluralization, include rules and even a nice javascript API along the way. \ No newline at end of file +### Client-side +We use a `language` cookie to save your language settings if you change them. If you don't, we autodetect your locale using information from your browser. Now, that we know your preferred language this information is feeded into a very nice library called [html10n.js](https://github.com/marcelklehr/html10n.js), which loads the appropriate translations and applies them to our templates, providing translation params, pluralization, include rules and even a nice javascript API along the way. + + + +## Localizing plugins + +### 1. Mark the strings to translate + +In the template files of your plugin, change all hardcoded messages/strings... + +from: +```html + +``` +to: +```html + +``` + +In the javascript files of your plugin, chaneg all hardcoded messages/strings... + +from: +```js +alert ('Chat'); +``` +to: +```js +alert(window._('pad.chat')); +``` +### 2. Create translate files in the locales directory of your plugin + +* The name of the file must be the language code of the language it contains translations for (see [supported lang codes](http://joker-x.github.com/languages4translatewiki/test/); e.g. en ? English, es ? Spanish...) +* The extension of the file must be `.json` +* The default language is English, so your plugin should always provide `en.json` +* In order to avoid naming conflicts, your message keys should start with the name of your plugin followed by a dot (see below) + +*ep_your-plugin/locales/en.json* +``` +{ "ep_your-plugin.h1": "Heading 1" +} +``` + +*ep_your-plugin/locales/es.json* +``` +{ "ep_your-plugin.h1": "Ttulo 1" +} +``` + +Everytime the http server is started, it will auto-detect your messages and merge them automatically with the core messages. + +### Overwrite core messages + +You can overwrite Etherpad Lite'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* +``` +{ "ep_your-plugin.h1": "Heading 1" +, "pad.chat": "Notes" +} +``` \ No newline at end of file diff --git a/doc/plugins.md b/doc/plugins.md index 3717c111..afa01316 100644 --- a/doc/plugins.md +++ b/doc/plugins.md @@ -11,12 +11,13 @@ A basic plugin usually has the following folder structure: ep_/ | static/ | templates/ + | locales/ + ep.json + package.json ``` -If your plugin includes client-side hooks, put them in `static/js/`. If you're adding in CSS or image files, you should put those files in `static/css/ `and `static/image/`, respectively, and templates go into `templates/`. +If your plugin includes client-side hooks, put them in `static/js/`. If you're adding in CSS or image files, you should put those files in `static/css/ `and `static/image/`, respectively, and templates go into `templates/`. Translations go into `locales/` -A Standard directory structure like this makes it easier to navigate through your code. That said, do note, that this is not actually *required* to make your plugin run. +A Standard directory structure like this makes it easier to navigate through your code. That said, do note, that this is not actually *required* to make your plugin run. If you want to make use of our i18n system, you need to put your translations into `locales/`, though, in order to have them intergated. (See "Localization" for more info on how to localize your plugin) ## Plugin definition Your plugin definition goes into `ep.json`. In this file you register your hooks, indicate the parts of your plugin and the order of execution. (A documentation of all available events to hook into can be found in chapter [hooks](#all_hooks).) diff --git a/settings.json.template b/settings.json.template index 66192e4b..e37bc450 100644 --- a/settings.json.template +++ b/settings.json.template @@ -11,10 +11,24 @@ // alternatively, set up a fully specified Url to your own favicon "favicon": "favicon.ico", - //Ip and port which etherpad should bind at + //IP and port which etherpad should bind at "ip": "0.0.0.0", "port" : 9001, - + + /* + // Node native SSL support + // this is disabled by default + // + // make sure to have the minimum and correct file access permissions set + // so that the Etherpad server can access them + + "ssl" : { + "key" : "/path-to-your/epl-server.key", + "cert" : "/path-to-your/epl-server.crt" + }, + + */ + //The Type of the database. You can choose between dirty, postgres, sqlite and mysql //You shouldn't use "dirty" for for anything else than testing or development "dbType" : "dirty", @@ -51,7 +65,7 @@ "maxAge" : 21600, // 60 * 60 * 6 = 6 hours /* This is the path to the Abiword executable. Setting it to null, disables abiword. - Abiword is needed to enable the import/export of pads*/ + Abiword is needed to advanced import/export features of pads*/ "abiword" : null, /* This setting is used if you require authentication of all users. @@ -77,5 +91,8 @@ */ /* The log level we are using, can be: DEBUG, INFO, WARN, ERROR */ - "loglevel": "INFO" + "loglevel": "INFO", + + // restrict socket.io transport methods + "socketTransportProtocols" : ['xhr-polling', 'jsonp-polling', 'htmlfile'] } diff --git a/src/locales/af.json b/src/locales/af.json new file mode 100644 index 00000000..01f47d4a --- /dev/null +++ b/src/locales/af.json @@ -0,0 +1 @@ +{"index.newPad":"Nuwe pad","index.createOpenPad":"of skep/open 'n pad met die naam:","pad.toolbar.bold.title":"Vet (Ctrl-B)","pad.toolbar.italic.title":"Kursief (Ctrl-I)","pad.toolbar.underline.title":"Onderstreep (Ctrl-U)","pad.toolbar.strikethrough.title":"Deurgehaal","pad.toolbar.ol.title":"Geordende lys","pad.toolbar.ul.title":"Ongeordende lys","pad.toolbar.indent.title":"Indenteer","pad.toolbar.unindent.title":"Verklein indentering","pad.toolbar.undo.title":"Ongedaan maak (Ctrl-Z)","pad.toolbar.redo.title":"Herdoen (Ctrl-Y)","pad.toolbar.settings.title":"Voorkeure","pad.colorpicker.save":"Stoor","pad.colorpicker.cancel":"Kanselleer","pad.loading":"Laai...","pad.settings.myView":"My oorsig","pad.settings.fontType.normal":"Normaal","pad.settings.fontType.monospaced":"Monospasie","pad.importExport.exporthtml":"HTML","pad.importExport.exportpdf":"PDF","pad.importExport.exportdokuwiki":"DokuWiki","pad.modals.userdup.advice":"Maak weer 'n verbinding as u die venster wil gebruik.","pad.modals.unauth":"Nie toegestaan","pad.modals.looping":"Verbinding verbreek.","pad.modals.deleted":"Geskrap.","pad.share":"Deel die pad","pad.share.readonly":"Lees-alleen","pad.share.link":"Skakel","pad.share.emebdcode":"Inbed URL","pad.chat":"Klets","pad.chat.title":"Maak kletsblad vir die pad oop","timeslider.toolbar.returnbutton":"Terug na pad","timeslider.toolbar.authors":"Outeurs:","timeslider.toolbar.authorsList":"Geen outeurs","timeslider.exportCurrent":"Huidige weergawe eksporteer as:","timeslider.version":"Weergawe {{version}}","timeslider.saved":"Gestoor op {{day}} {{month}} {{year}}","timeslider.dateformat":"{{year}}-{{month}}-{{day}} {{hours}}:{{minutes}}:{{seconds}}","timeslider.month.january":"Januarie","timeslider.month.february":"Februarie","timeslider.month.march":"Maart","timeslider.month.april":"April","timeslider.month.may":"Mei","timeslider.month.june":"Junie","timeslider.month.july":"Julie","timeslider.month.august":"Augustus","timeslider.month.september":"September","timeslider.month.october":"Oktober","timeslider.month.november":"November","timeslider.month.december":"Desember","pad.userlist.entername":"Verskaf u naam","pad.userlist.unnamed":"sonder naam","pad.userlist.guest":"Gas","pad.userlist.deny":"Keur af","pad.userlist.approve":"Keur goed","pad.impexp.importbutton":"Voer nou in","pad.impexp.importing":"Besig met invoer...","pad.impexp.importfailed":"Invoer het gefaal"} \ No newline at end of file diff --git a/src/locales/ar.json b/src/locales/ar.json new file mode 100644 index 00000000..a6202505 --- /dev/null +++ b/src/locales/ar.json @@ -0,0 +1 @@ +{"pad.toolbar.bold.title":"سميك (Ctrl-B)","pad.toolbar.italic.title":"مائل (Ctrl-I)","pad.toolbar.underline.title":"تسطير (Ctrl-U)","pad.toolbar.strikethrough.title":"شطب","pad.toolbar.ol.title":"قائمة مرتبة","pad.toolbar.ul.title":"قائمة غير مرتبة","pad.toolbar.indent.title":"إزاحة","pad.toolbar.unindent.title":"حذف الإزاحة","pad.toolbar.undo.title":"فك (Ctrl-Z)","pad.toolbar.redo.title":"تكرار (Ctrl-Y)","pad.toolbar.import_export.title":"استيراد/تصدير من/إلى تنسيقات ملفات مختلفة","pad.toolbar.timeslider.title":"متصفح التاريخ","pad.toolbar.savedRevision.title":"التنقيحات المحفوظة","pad.toolbar.settings.title":"الإعدادات","pad.colorpicker.save":"تسجيل","pad.colorpicker.cancel":"إلغاء","pad.loading":"جاري التحميل...","pad.settings.stickychat":"الدردشة دائما على الشاشة","pad.settings.linenocheck":"أرقام الأسطر","pad.settings.fontType":"نوع الخط:","pad.settings.fontType.normal":"عادي","pad.settings.fontType.monospaced":"ثابت العرض","pad.settings.language":"اللغة:","pad.importExport.import_export":"استيراد/تصدير","pad.importExport.import":"تحميل أي ملف نصي أو وثيقة","pad.importExport.exporthtml":"إتش تي إم إل","pad.importExport.exportplain":"نص عادي","pad.importExport.exportword":"مايكروسوفت وورد","pad.importExport.exportpdf":"صيغة المستندات المحمولة","pad.importExport.exportopen":"ODF (نسق المستند المفتوح)","pad.importExport.exportdokuwiki":"دوکوويكي","pad.modals.connected":"متصل.","pad.modals.forcereconnect":"فرض إعادة الاتصال","pad.modals.uderdup":"مفتوح في نافذة أخرى","pad.modals.unauth":"غير مخول","pad.modals.looping":"تم قطع الاتصال.","pad.modals.initsocketfail":"لا يمكن الوصول إلى الخادم","pad.modals.initsocketfail.explanation":"تعذر الاتصال بخادم المزامنة.","pad.modals.slowcommit":"تم قطع الاتصال.","pad.modals.slowcommit.explanation":"الخادم لا يستجيب.","pad.modals.slowcommit.cause":"يمكن أن يكون هذا بسبب مشاكل في الاتصال بالشبكة.","pad.modals.deleted":"محذوف.","pad.modals.disconnected":"لم تعد متّصل.","pad.modals.disconnected.explanation":"تم فقدان الإتصال بالخادم","pad.modals.disconnected.cause":"قد يكون الخادم غير متوفر. الرجاء إعلامنا إذا تكرر هذا.","pad.share.readonly":"للقراءة فقط","pad.share.link":"رابط","pad.chat":"دردشة","timeslider.toolbar.authors":"المؤلفون:","timeslider.toolbar.authorsList":"بدون مؤلفين","timeslider.exportCurrent":"تصدير النسخة الحالية ك:","timeslider.version":"إصدار {{version}}","timeslider.month.january":"يناير","timeslider.month.february":"فبراير","timeslider.month.march":"مارس","timeslider.month.april":"أبريل","timeslider.month.may":"مايو","timeslider.month.june":"يونيو","timeslider.month.july":"يوليو","timeslider.month.august":"أغسطس","timeslider.month.september":"سبتمبر","timeslider.month.october":"أكتوبر","timeslider.month.november":"نوفمبر","timeslider.month.december":"ديسمبر"} \ No newline at end of file diff --git a/src/locales/ast.json b/src/locales/ast.json new file mode 100644 index 00000000..0635524a --- /dev/null +++ b/src/locales/ast.json @@ -0,0 +1 @@ +{"index.newPad":"Nuevu bloc","index.createOpenPad":"o crear/abrir un bloc col nome:","pad.toolbar.bold.title":"Negrina (Ctrl-B)","pad.toolbar.italic.title":"Cursiva (Ctrl-I)","pad.toolbar.underline.title":"Sorrayáu (Ctrl-U)","pad.toolbar.strikethrough.title":"Tacháu","pad.toolbar.ol.title":"Llista ordenada","pad.toolbar.ul.title":"Llista ensin ordenar","pad.toolbar.indent.title":"Sangría","pad.toolbar.unindent.title":"Sangría inversa","pad.toolbar.undo.title":"Desfacer (Ctrl-Z)","pad.toolbar.redo.title":"Refacer (Ctrl-Y)","pad.toolbar.clearAuthorship.title":"Llimpiar los colores d'autoría","pad.toolbar.import_export.title":"Importar/Esportar ente distintos formatos de ficheru","pad.toolbar.timeslider.title":"Eslizador de tiempu","pad.toolbar.savedRevision.title":"Revisiones guardaes","pad.toolbar.settings.title":"Configuración","pad.toolbar.embed.title":"Incrustar esti bloc","pad.toolbar.showusers.title":"Amosar los usuarios d'esti bloc","pad.colorpicker.save":"Guardar","pad.colorpicker.cancel":"Encaboxar","pad.loading":"Cargando...","pad.passwordRequired":"Necesites una contraseña pa entrar a esti bloc","pad.permissionDenied":"Nun tienes permisu pa entrar a esti bloc","pad.wrongPassword":"La contraseña era incorreuta","pad.settings.padSettings":"Configuración del bloc","pad.settings.myView":"la mio vista","pad.settings.stickychat":"Alderique en pantalla siempres","pad.settings.colorcheck":"Colores d'autoría","pad.settings.linenocheck":"Númberos de llinia","pad.settings.fontType":"Tipografía:","pad.settings.fontType.normal":"Normal","pad.settings.fontType.monospaced":"Monoespaciada","pad.settings.globalView":"Vista global","pad.settings.language":"Llingua:","pad.importExport.import_export":"Importar/Esportar","pad.importExport.import":"Xubir cualquier ficheru o documentu de testu","pad.importExport.importSuccessful":"¡Correuto!","pad.importExport.export":"Esportar el bloc actual como:","pad.importExport.exporthtml":"HTML","pad.importExport.exportplain":"Testu simple","pad.importExport.exportword":"Microsoft Word","pad.importExport.exportpdf":"PDF","pad.importExport.exportopen":"ODF (Open Document Format)","pad.importExport.exportdokuwiki":"DokuWiki","pad.importExport.abiword.innerHTML":"Sólo se pue importar dende los formatos de testu planu o html. Pa carauterístiques d'importación más avanzaes instala abiword.","pad.modals.connected":"Coneutáu.","pad.modals.reconnecting":"Reconeutando col to bloc...","pad.modals.forcereconnect":"Forzar la reconexón","pad.modals.uderdup":"Abiertu n'otra ventana","pad.modals.userdup.explanation":"Esti bloc paez que ta abiertu en más d'una ventana del navegador d'esti ordenador.","pad.modals.userdup.advice":"Reconeutar pa usar esta ventana.","pad.modals.unauth":"Non autorizáu.","pad.modals.unauth.explanation":"Los tos permisos camudaron mientres vies esta páxina. Intenta volver a coneutar.","pad.modals.looping":"Desconeutáu.","pad.modals.looping.explanation":"Hai problemes de comunicación col sirvidor de sincronización.","pad.modals.looping.cause":"Pues tar coneutáu per un torgafueos o un proxy incompatibles.","pad.modals.initsocketfail":"Sirvidor incalcanzable.","pad.modals.initsocketfail.explanation":"Nun se pudo coneutar col sirvidor de sincronización.","pad.modals.initsocketfail.cause":"Probablemente ye por aciu d'un problema col navegador o cola to conexón a internet.","pad.modals.slowcommit":"Desconeutáu.","pad.modals.slowcommit.explanation":"El sirvidor nun respuende.","pad.modals.slowcommit.cause":"Pue ser por problemes de coneutividá de la rede.","pad.modals.deleted":"Desaniciáu","pad.modals.deleted.explanation":"Esti bloc se desanició.","pad.modals.disconnected":"Te desconeutasti.","pad.modals.disconnected.explanation":"Perdióse la conexón col sirvidor","pad.modals.disconnected.cause":"El sirvidor podría nun tar disponible. Por favor, avisanos si sigue pasando esto.","pad.share":"Compartir esti bloc","pad.share.readonly":"Sólo llectura","pad.share.link":"Enllaz","pad.share.emebdcode":"Incrustar URL","pad.chat":"Chat","pad.chat.title":"Abrir el chat d'esti bloc.","timeslider.pageTitle":"Eslizador de tiempu de {{appTitle}}","timeslider.toolbar.returnbutton":"Tornar al bloc","timeslider.toolbar.authors":"Autores:","timeslider.toolbar.authorsList":"Nun hai autores","timeslider.exportCurrent":"Esportar la versión actual como:","timeslider.version":"Versión {{version}}","timeslider.saved":"Guardáu el {{day}} de {{month}} de {{year}}","timeslider.dateformat":"{{day}}/{{month}}/{{year}} {{hours}}:{{minutes}}:{{seconds}}","timeslider.month.january":"de xineru","timeslider.month.february":"de febreru","timeslider.month.march":"de marzu","timeslider.month.april":"d'abril","timeslider.month.may":"de mayu","timeslider.month.june":"de xunu","timeslider.month.july":"de xunetu","timeslider.month.august":"d'agostu","timeslider.month.september":"de setiembre","timeslider.month.october":"d'ochobre","timeslider.month.november":"de payares","timeslider.month.december":"d'avientu","pad.savedrevs.marked":"Esta revisión marcose como revisión guardada","pad.userlist.entername":"Escribi'l to nome","pad.userlist.unnamed":"ensin nome","pad.userlist.guest":"Invitáu","pad.userlist.deny":"Refugar","pad.userlist.approve":"Aprobar","pad.editbar.clearcolors":"¿Llimpiar los colores d'autoría nel documentu ensembre?","pad.impexp.importbutton":"Importar agora","pad.impexp.importing":"Importando...","pad.impexp.confirmimport":"La importación d'un ficheru sustituirá'l testu actual del bloc. ¿Seguro que quies siguir?","pad.impexp.convertFailed":"Nun pudimos importar esti ficheru. Por favor,usa otru formatu de ficheru diferente o copia y pega manualmente.","pad.impexp.uploadFailed":"Falló la carga del ficheru, intentalo otra vuelta","pad.impexp.importfailed":"Falló la importación","pad.impexp.copypaste":"Por favor, copia y apega","pad.impexp.exportdisabled":"La esportación en formatu {{type}} ta desactivada. Por favor, comunica col alministrador del sistema pa más detalles."} \ No newline at end of file diff --git a/src/locales/az.json b/src/locales/az.json new file mode 100644 index 00000000..54230d34 --- /dev/null +++ b/src/locales/az.json @@ -0,0 +1 @@ +{"index.newPad":"Yeni Pad","index.createOpenPad":"və ya Pad-ı adı ilə yarat/aç:","pad.toolbar.bold.title":"Qalın (Ctrl-B)","pad.toolbar.italic.title":"Kursiv (Ctrl-I)","pad.toolbar.underline.title":"Altından xətt çəkmə (Ctrl-U)","pad.toolbar.strikethrough.title":"Pozulma","pad.toolbar.ol.title":"Qaydaya salınmış siyahı","pad.toolbar.ul.title":"Qaydaya salınmamış siyahı","pad.toolbar.indent.title":"Abzas","pad.toolbar.unindent.title":"Çıxıntı","pad.toolbar.undo.title":"Geri Al (Ctrl-Z)","pad.toolbar.redo.title":"Qaytarmaq (Ctrl-Y)","pad.toolbar.clearAuthorship.title":"Müəlliflik Rənglərini Təmizlə","pad.toolbar.import_export.title":"Müxtəlif fayl formatların(a/dan) idxal/ixrac","pad.toolbar.timeslider.title":"Vaxt cədvəli","pad.toolbar.savedRevision.title":"Saxlanılan Düzəlişlər","pad.toolbar.settings.title":"Tənzimləmələr","pad.toolbar.embed.title":"Bu pad-ı yayımla","pad.toolbar.showusers.title":"Pad-da istifadəçiləri göstər","pad.colorpicker.save":"Saxla","pad.colorpicker.cancel":"İmtina","pad.loading":"Yüklənir...","pad.passwordRequired":"Bu pad-a daxil olmaq üçün parol lazımdır","pad.permissionDenied":"Bu pad-a daxil olmaq üçün icazəniz yoxdur","pad.wrongPassword":"Sizin parolunuz səhvdir","pad.settings.padSettings":"Pad Tənzimləmələri","pad.settings.myView":"Mənim Görüntüm","pad.settings.stickychat":"Söhbət həmişə ekranda","pad.settings.colorcheck":"Müəlliflik rəngləri","pad.settings.linenocheck":"Sətir nömrələri","pad.settings.fontType":"Şriftin tipi:","pad.settings.fontType.normal":"Normal","pad.settings.globalView":"Ümumi görünüş","pad.settings.language":"Dil:","pad.importExport.import_export":"İdxal/İxrac","pad.importExport.import":"Hər hansı bir mətn faylı və ya sənəd yüklə","pad.importExport.importSuccessful":"Uğurlu!","pad.importExport.export":"Hazırki pad-ı ixrac etmək kimi:","pad.importExport.exporthtml":"HTML","pad.importExport.exportplain":"Adi mətn","pad.importExport.exportword":"Microsoft Word","pad.importExport.exportpdf":"PDF","pad.importExport.exportopen":"ODF (Açıq Sənəd Formatı)","pad.importExport.exportdokuwiki":"DokuWiki","pad.modals.connected":"Bağlandı.","pad.modals.reconnecting":"Sizin pad yenidən qoşulur..","pad.modals.forcereconnect":"Məcbur təkrarən bağlan","pad.modals.uderdup":"Başqa pəncərədə aç","pad.modals.userdup.advice":"Bu pəncərədən istifadəylə yenidən qoşulun.","pad.modals.unauth":"İcazəli deyil","pad.modals.looping":"Əlaqə kəsildi.","pad.modals.initsocketfail":"Server əlçatmazdır.","pad.modals.initsocketfail.explanation":"Sinxronlaşdırma serverinə qoşulma mümkünsüzdür.","pad.modals.slowcommit":"Əlaqə kəsildi.","pad.modals.slowcommit.explanation":"Server cavab vermir.","pad.modals.slowcommit.cause":"Bu şəbəkə bağlantısında problemlər yarana bilər.","pad.modals.deleted":"Silindi.","pad.modals.deleted.explanation":"Bu pad silindi.","pad.modals.disconnected":"Əlaqə kəsilib.","pad.modals.disconnected.explanation":"Serverə qoşulma itirilib","pad.modals.disconnected.cause":"Server istifadə olunmur. Əgər problem təkrarlanacaqsa, bizə bildirin.","pad.share":"Bu pad-ı yayımla","pad.share.readonly":"Yalnız oxuyun","pad.share.link":"Keçid","pad.share.emebdcode":"URL-ni yayımla","pad.chat":"Söhbət","pad.chat.title":"Bu pad üçün chat açın.","timeslider.pageTitle":"{{appTitle}} Vaxt cədvəli","timeslider.toolbar.returnbutton":"Pad-a qayıt","timeslider.toolbar.authors":"Müəlliflər:","timeslider.toolbar.authorsList":"Müəllif yoxdur","timeslider.exportCurrent":"Cari versiyanı ixrac etmək kimi:","timeslider.version":"Versiya {{versiya}}","timeslider.saved":"Saxlanıldı {{ay}} {{gün}}, {{il}}","timeslider.dateformat":"{{ay}}/{{gün}}/{{il}} {{saat}}:{{dəqiqə}}:{{saniyə}}","timeslider.month.january":"Yanvar","timeslider.month.february":"Fevral","timeslider.month.march":"Mart","timeslider.month.april":"Aprel","timeslider.month.may":"May","timeslider.month.june":"İyun","timeslider.month.july":"İyul","timeslider.month.august":"Avqust","timeslider.month.september":"Sentyabr","timeslider.month.october":"Oktyabr","timeslider.month.november":"Noyabr","timeslider.month.december":"Dekabr","pad.userlist.entername":"Adınızı daxil et","pad.userlist.unnamed":"adsız","pad.userlist.guest":"Qonaq","pad.userlist.deny":"İnkar etmək","pad.userlist.approve":"Təsdiqləmək","pad.editbar.clearcolors":"Bütün sənədlərdə müəlliflik rənglərini təmizlə?","pad.impexp.importbutton":"İndi idxal edin","pad.impexp.importing":"İdxal...","pad.impexp.convertFailed":"Biz bu fayl idxal etmək mümkün deyil idi. Xahiş olunur müxtəlif sənəddən istifadə edin və ya kopyalayıb yapışdırmaq yolundan istifadə edin","pad.impexp.uploadFailed":"Yükləmədə səhv, xahiş olunur yenə cəhd edin","pad.impexp.importfailed":"İdxal zamanı səhv","pad.impexp.copypaste":"Xahiş edirik kopyalayıb yapışdırın"} \ No newline at end of file diff --git a/src/locales/azb.json b/src/locales/azb.json new file mode 100644 index 00000000..cbcf18ad --- /dev/null +++ b/src/locales/azb.json @@ -0,0 +1 @@ +{"index.newPad":"یئنی یادداشت دفترچه سی","index.createOpenPad":"یا دا ایجاد /بیر پد آدلا برابر آچماق:","pad.toolbar.bold.title":"بویوت","pad.toolbar.italic.title":"مورب","pad.toolbar.underline.title":"خطدین آلتی","pad.toolbar.strikethrough.title":"خط یئمیش","pad.toolbar.ol.title":"جوتدنمیش فهرست","pad.toolbar.ul.title":"جوتدنممیش فهرست","pad.toolbar.indent.title":"ایچری باتدیگی","pad.toolbar.unindent.title":"ائشیگه چیخدیگی","pad.toolbar.undo.title":"باطل ائتمک","pad.toolbar.redo.title":"یئنی دن","pad.toolbar.clearAuthorship.title":"یازیچی رنگ لری پوزماق","pad.toolbar.import_export.title":"آیری قالیب لردن /ایچری توکمه / ائشیگه توکمه","pad.toolbar.timeslider.title":"زمان اسلایدی","pad.toolbar.savedRevision.title":"ساخلانمیش نسخه لر","pad.toolbar.settings.title":"تنظیملر","pad.toolbar.embed.title":"بو یادداشت دفترچه سین یئرلتمک","pad.toolbar.showusers.title":"بو دفترچه یادداشت دا اولان کاربرلری گوستر","pad.colorpicker.save":"قئید ائت","pad.colorpicker.cancel":"لغو ائت","pad.loading":"یوکلنیر...","pad.settings.padSettings":"یادداشت دفترچه سینین تنظیملر","pad.settings.myView":"منیم گورنتوم","pad.settings.stickychat":"نمایش صفحه سینده همیشه چت اولسون","pad.settings.colorcheck":"یازیچی رنگ لری","pad.settings.linenocheck":"خطوط شماره سی","pad.settings.fontType":"قلم نوعی","pad.settings.fontType.normal":"نورمال","pad.settings.fontType.monospaced":"مونو اسپئیس","pad.settings.globalView":"سراسر گورونتو","pad.settings.language":"دیل","pad.importExport.import_export":"ایچری توکمه /ائشیگه توکمه","pad.importExport.import":"سند یا دا متنی پرونده یوکله","pad.importExport.export":"بو یادداشت دفترچه سی عنوانا ایچری توکمه","pad.importExport.exporthtml":"اچ تی ام ال","pad.importExport.exportplain":"ساده متن","pad.importExport.exportword":"مایکروسافت وورد","pad.importExport.exportpdf":"پی دی اف","pad.importExport.exportopen":"او دی اف","pad.importExport.exportdokuwiki":"دوکو ویکی","pad.modals.connected":"متصل اولدی","pad.modals.reconnecting":"سیزین یادداشت دفترچه سینه یئنی دن متصیل اولدی","pad.modals.forcereconnect":"یئنی اتصال اوچون زورلاما","pad.modals.uderdup":"یئنی پنجرده آچیلدی","pad.modals.userdup.advice":"بو پئنجره دن ایستفاده ائتمک اوچون یئنی دن متصیل اول","pad.modals.unauth":"اولماز","pad.modals.unauth.explanation":"سیزین ال چتما مسئله سی بو صفحه نین گورونوش زمانیندا دییشیلیب دیر .","pad.modals.looping":"اتیصال قطع اولدی","pad.modals.looping.explanation":"ارتیباطی موشکیل بیر ائتمه سرور ده وار دیر","pad.modals.looping.cause":"بلکه سیز دوز دئمیین بیر فایروال یادا پروکسی طریقی ایله متصیل اولوب سینیز","pad.modals.initsocketfail":"دسترسی اولمویان سرور دیر","pad.modals.initsocketfail.explanation":"بیرلشدیریلمه سرور لرینه متصیل اولا بیلمه دی","pad.modals.deleted":"سیلیندی.","pad.modals.deleted.explanation":"بو یادداشت دفترچه سی سیلینیب دیر.","pad.modals.disconnected":"سیزین اتصالینیز قطع اولوب دور.","pad.modals.disconnected.explanation":"سروره اتصال قطع اولوب دور.","pad.share.readonly":"اوخومالی فقط","pad.share.link":"باغلانتی","pad.share.emebdcode":"نشانی نی یئرلتمک","pad.chat":"چت","pad.chat.title":"بو یادداشت دفترچه نی چت اوچون آچ","timeslider.pageTitle":"{{appTitle}}زمان اسلایدری","timeslider.toolbar.returnbutton":"یادداشت دفترچه سینه قاییت","timeslider.toolbar.authors":"یازیچیلار","timeslider.toolbar.authorsList":"یازیچی سیز"} \ No newline at end of file diff --git a/src/locales/bn.ini b/src/locales/bn.ini deleted file mode 100644 index 7eca9e38..00000000 --- a/src/locales/bn.ini +++ /dev/null @@ -1,32 +0,0 @@ -; Exported from translatewiki.net -; Author: Nasir8891 -[bn] -index.newPad = নতুন প্যাড -index.createOpenPad = অথবা নাম লিখে প্যাড খুলুন/তৈরী করুন: -pad.toolbar.bold.title = গাড় করা (Ctrl-B) -pad.toolbar.italic.title = বাঁকা করা (Ctrl-I) -pad.toolbar.settings.title = সেটিং -pad.colorpicker.save = সংরক্ষণ -pad.colorpicker.cancel = বাতিল -pad.loading = লোডিং... -pad.settings.language = ভাষা: -pad.importExport.successful = সফল! -; Fuzzy -pad.importExport.export = এই প্যাডটি এক্সপোর্ট করুন -pad.importExport.exporthtml = এইচটিএমএল -pad.importExport.exportplain = সাধারণ লেখা -pad.importExport.exportword = মাইক্রোসফট ওয়ার্ড -pad.importExport.exportpdf = পিডিএফ -pad.importExport.exportopen = ওডিএফ (ওপেন ডকুমেন্ট ফরম্যাট) -pad.modals.deleted = অপসারিত। -pad.modals.deleted.explanation = এই প্যাডটি অপসারণ করা হয়েছে। -pad.modals.disconnected.explanation = সার্ভারের সাথে যোগাযোগ করা যাচ্ছে না -pad.share = শেয়ার করুন -pad.share.link = লিংক -pad.share.emebdcode = ইউআরএল সংযোজন -pad.chat = চ্যাট -pad.chat.title = এই প্যাডের জন্য চ্যাট চালু করুন। -timeslider.toolbar.returnbutton = প্যাডে ফিরে যাও -timeslider.toolbar.authors = লেখকগণ: -timeslider.toolbar.authorsList = কোনো লেখক নেই -timeslider.exportCurrent = বর্তমান সংস্করণটি এক্সপোর্ট করুন: diff --git a/src/locales/bn.json b/src/locales/bn.json new file mode 100644 index 00000000..130a6b93 --- /dev/null +++ b/src/locales/bn.json @@ -0,0 +1 @@ +{"index.newPad":"নতুন প্যাড","index.createOpenPad":"অথবা নাম লিখে প্যাড খুলুন/তৈরী করুন:","pad.toolbar.bold.title":"গাড় করা (Ctrl-B)","pad.toolbar.italic.title":"বাঁকা করা (Ctrl-I)","pad.toolbar.indent.title":"প্রান্তিককরণ","pad.toolbar.settings.title":"সেটিং","pad.colorpicker.save":"সংরক্ষণ","pad.colorpicker.cancel":"বাতিল","pad.loading":"লোডিং...","pad.settings.fontType.normal":"সাধারণ","pad.settings.language":"ভাষা:","pad.importExport.export":"এই প্যাডটি এক্সপোর্ট করুন","pad.importExport.exporthtml":"এইচটিএমএল","pad.importExport.exportplain":"সাধারণ লেখা","pad.importExport.exportword":"মাইক্রোসফট ওয়ার্ড","pad.importExport.exportpdf":"পিডিএফ","pad.importExport.exportopen":"ওডিএফ (ওপেন ডকুমেন্ট ফরম্যাট)","pad.modals.deleted":"অপসারিত।","pad.modals.deleted.explanation":"এই প্যাডটি অপসারণ করা হয়েছে।","pad.modals.disconnected.explanation":"সার্ভারের সাথে যোগাযোগ করা যাচ্ছে না","pad.share":"শেয়ার করুন","pad.share.link":"লিংক","pad.share.emebdcode":"ইউআরএল সংযোজন","pad.chat":"চ্যাট","pad.chat.title":"এই প্যাডের জন্য চ্যাট চালু করুন।","timeslider.toolbar.returnbutton":"প্যাডে ফিরে যাও","timeslider.toolbar.authors":"লেখকগণ:","timeslider.toolbar.authorsList":"কোনো লেখক নেই","timeslider.exportCurrent":"বর্তমান সংস্করণটি এক্সপোর্ট করুন:","timeslider.month.january":"জানুয়ারি","timeslider.month.february":"ফেব্রুয়ারি","timeslider.month.march":"মার্চ","timeslider.month.april":"এপ্রিল","timeslider.month.may":"মে","timeslider.month.june":"জুন","timeslider.month.july":"জুলাই","timeslider.month.august":"আগস্ট","timeslider.month.september":"সেপ্টেম্বর","timeslider.month.october":"অক্টোবর","timeslider.month.november":"নভেম্বর","timeslider.month.december":"ডিসেম্বর"} \ No newline at end of file diff --git a/src/locales/ca.json b/src/locales/ca.json new file mode 100644 index 00000000..e4140f57 --- /dev/null +++ b/src/locales/ca.json @@ -0,0 +1 @@ +{"pad.toolbar.bold.title":"Negreta (Ctrl-B)","pad.toolbar.italic.title":"Cursiva (Ctrl-I)","pad.toolbar.ol.title":"Llista ordenada","pad.toolbar.ul.title":"Llista sense ordenar","pad.toolbar.undo.title":"Desfés (Ctrl-Z)","pad.toolbar.redo.title":"Refés (Ctrl-Y)","pad.toolbar.settings.title":"Configuració","pad.colorpicker.save":"Desa","pad.colorpicker.cancel":"Cancel·la","pad.loading":"S'està carregant...","pad.settings.fontType":"Tipus de lletra:","pad.settings.fontType.normal":"Normal","pad.settings.language":"Llengua:","pad.importExport.import_export":"Importació/exportació","pad.importExport.exporthtml":"HTML","pad.importExport.exportplain":"Text net","pad.modals.looping":"Desconnectat.","pad.modals.slowcommit.explanation":"El servidor no respon.","pad.share.readonly":"Només de lectura","pad.share.link":"Enllaç","pad.chat":"Xat","timeslider.toolbar.authors":"Autors:","timeslider.toolbar.authorsList":"No hi ha autors","timeslider.month.january":"Gener","timeslider.month.february":"Febrer","timeslider.month.march":"Març","timeslider.month.april":"Abril","timeslider.month.may":"Maig","timeslider.month.june":"Juny","timeslider.month.july":"Juliol","timeslider.month.august":"Agost","timeslider.month.september":"Setembre","timeslider.month.october":"Octubre","timeslider.month.november":"Novembre","timeslider.month.december":"Desembre","pad.userlist.deny":"Refusa","pad.userlist.approve":"Aprova","pad.impexp.importbutton":"Importa ara","pad.impexp.importing":"Important...","pad.impexp.convertFailed":"No és possible d'importar aquest fitxer. Si us plau, podeu provar d'utilitzar un format diferent o copiar i enganxar manualment.","pad.impexp.importfailed":"Ha fallat la importació","pad.impexp.copypaste":"Si us plau, copieu i enganxeu"} \ No newline at end of file diff --git a/src/locales/cs.json b/src/locales/cs.json new file mode 100644 index 00000000..a2a67892 --- /dev/null +++ b/src/locales/cs.json @@ -0,0 +1 @@ +{"index.newPad":"Nový Pad","index.createOpenPad":"nebo vytvořit/otevřít Pad jménem:","pad.toolbar.bold.title":"Tučné (Ctrl-B)","pad.toolbar.italic.title":"Kurzíva (Ctrl-I)","pad.toolbar.underline.title":"Podtržení (Ctrl-U)","pad.toolbar.strikethrough.title":"Přeskrtnuté","pad.toolbar.ol.title":"Číslovaný seznam","pad.toolbar.ul.title":"Nečíslovaný seznam","pad.toolbar.indent.title":"Odsazení","pad.toolbar.unindent.title":"Předsazení","pad.toolbar.undo.title":"Zpět (Ctrl-Z)","pad.toolbar.redo.title":"Opakovat (Ctrl-Y)","pad.toolbar.clearAuthorship.title":"Vymazat barvy autorství","pad.toolbar.import_export.title":"Importovat/Exportovat z/do jiných formátů","pad.toolbar.timeslider.title":"Osa času","pad.toolbar.savedRevision.title":"Uložené revize","pad.toolbar.settings.title":"Nastavení","pad.toolbar.embed.title":"Umístit tento Pad","pad.toolbar.showusers.title":"Zobrazit uživatele u tohoto Padu","pad.colorpicker.save":"Uložit","pad.colorpicker.cancel":"Zrušit","pad.loading":"Načítání...","pad.passwordRequired":"Potřebuješ zadat heslo pro přístup k tomuto Padu","pad.permissionDenied":"Nemáš přístupové oprávnění k tomuto Padu","pad.wrongPassword":"Tvé heslo je špatné","pad.settings.padSettings":"Nastavení Padu","pad.settings.myView":"Vlastní pohled","pad.settings.stickychat":"Chat vždy na obrazovce","pad.settings.colorcheck":"Barvy autorství","pad.settings.linenocheck":"Čísla řádků","pad.settings.fontType":"Typ písma:","pad.settings.fontType.normal":"Normální","pad.settings.fontType.monospaced":"Monospace","pad.settings.globalView":"Globální pohled","pad.settings.language":"Jazyk:","pad.importExport.import_export":"Import/Export","pad.importExport.import":"Nahrát libovolný textový soubor nebo dokument","pad.importExport.export":"Exportovat stávající Pad jako:","pad.importExport.exporthtml":"HTML","pad.importExport.exportplain":"Prostý 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":"Importovat můžeš pouze prostý text nebo HTML formátování. Pro pokročilejší funkce importu, prosím, nainstaluj „abiword“.","pad.modals.connected":"Připojeno.","pad.modals.reconnecting":"Znovupřipojování k tvému Padu…","pad.modals.forcereconnect":"Vynutit znovupřipojení","pad.modals.uderdup":"Otevřeno v jiném okně","pad.modals.userdup.explanation":"Zdá se, že tento Pad je na tomto počítači otevřen ve více než jednom okně.","pad.modals.userdup.advice":"Pro použití tohoto okna se musíš znovu připojit.","pad.modals.unauth":"Nemáte autorizaci","pad.modals.unauth.explanation":"Vaše oprávnění se změnila, zatímco jste si prohlížel/a toto okno. Zkuste se znovu připojit.","pad.modals.looping":"Odpojeno.","pad.modals.looping.explanation":"Nastaly problémy při komunikaci se synchronizačním serverem.","pad.modals.looping.cause":"Možná jste připojeni přes nekompaktní firewall nebo proxy.","pad.modals.initsocketfail":"Server je nedostupný.","pad.modals.initsocketfail.explanation":"Nepodařilo se připojit k synchronizačnímu serveru.","pad.modals.initsocketfail.cause":"Toto je pravděpodobně způsobeno vaším prohlížečem nebo připojením k internetu.","pad.modals.slowcommit":"Odpojeno.","pad.modals.slowcommit.explanation":"Server neodpovídá.","pad.modals.slowcommit.cause":"Může to být způsobeno problémy s internetovým připojením.","pad.modals.deleted":"Odstraněno.","pad.modals.deleted.explanation":"Tento Pad byl odebrán.","pad.modals.disconnected":"Byl jsi odpojen.","pad.modals.disconnected.explanation":"Připojení k serveru bylo přerušeno","pad.modals.disconnected.cause":"Server může být nedostupný. Prosím, upozorni nás, pokud bude tento problém přetrvávat.","pad.share":"Sdílet tento Pad","pad.share.readonly":"Jen pro čtení","pad.share.link":"Odkaz","pad.share.emebdcode":"Vložit URL","pad.chat":"Chat","pad.chat.title":"Otevřít chat tohoto Padu.","timeslider.pageTitle":"Osa času {{appTitle}}","timeslider.toolbar.returnbutton":"Návrat do Padu","timeslider.toolbar.authors":"Autoři:","timeslider.toolbar.authorsList":"Bez autorů","timeslider.exportCurrent":"Exportovat nynější verzi jako:","timeslider.version":"Verze {{version}}","timeslider.saved":"Uloženo {{day}} {{month}} {{year}}","timeslider.dateformat":"{{day}} {{month}} {{year}} {{hours}}:{{minutes}}:{{seconds}}","timeslider.month.january":"leden","timeslider.month.february":"únor","timeslider.month.march":"březen","timeslider.month.april":"duben","timeslider.month.may":"květen","timeslider.month.june":"červen","timeslider.month.july":"červenec","timeslider.month.august":"srpen","timeslider.month.september":"září","timeslider.month.october":"říjen","timeslider.month.november":"listopad","timeslider.month.december":"prosinec"} \ No newline at end of file diff --git a/src/locales/da.json b/src/locales/da.json new file mode 100644 index 00000000..efb43a76 --- /dev/null +++ b/src/locales/da.json @@ -0,0 +1 @@ +{"index.newPad":"Ny Pad","index.createOpenPad":"eller opret/åbn en Pad med navnet:","pad.toolbar.bold.title":"Fed (Ctrl-B)","pad.toolbar.italic.title":"Kursiv (Ctrl-I)","pad.toolbar.underline.title":"Understregning (Ctrl-U)","pad.toolbar.strikethrough.title":"Gennemstregning","pad.toolbar.ol.title":"Sorteret liste","pad.toolbar.ul.title":"Usorteret liste","pad.toolbar.indent.title":"Indrykning","pad.toolbar.unindent.title":"Ryk ud","pad.toolbar.undo.title":"Fortryd (Ctrl-Z)","pad.toolbar.redo.title":"Annuller Fortryd (Ctrl-Y)","pad.toolbar.clearAuthorship.title":"Fjern farver for forfatterskab","pad.toolbar.import_export.title":"Import/eksport fra/til forskellige filformater","pad.toolbar.timeslider.title":"Timeslider","pad.toolbar.savedRevision.title":"Gemte revisioner","pad.toolbar.settings.title":"Indstillinger","pad.toolbar.embed.title":"Integrer denne pad","pad.toolbar.showusers.title":"Vis brugere på denne pad","pad.colorpicker.save":"Gem","pad.colorpicker.cancel":"Afbryd","pad.loading":"Indlæser ...","pad.passwordRequired":"Du skal bruge en adgangskode for at få adgang til denne pad","pad.permissionDenied":"Du har ikke tilladelse til at få adgang til denne pad.","pad.wrongPassword":"Din adgangskode er forkert","pad.settings.padSettings":"Pad indstillinger","pad.settings.myView":"Min visning","pad.settings.stickychat":"Chat altid på skærmen","pad.settings.colorcheck":"Forfatterskabsfarver","pad.settings.linenocheck":"Linjenumre","pad.settings.fontType":"Skrifttype:","pad.settings.fontType.normal":"Normal","pad.settings.fontType.monospaced":"Fastbredde","pad.settings.globalView":"Global visning","pad.settings.language":"Sprog:","pad.importExport.import_export":"Import/Eksport","pad.importExport.import":"Uploade en tekstfil eller dokument","pad.importExport.importSuccessful":"Vellykket!","pad.importExport.export":"Eksporter aktuelle pad som:","pad.importExport.exporthtml":"HTML","pad.importExport.exportplain":"Almindelig tekst","pad.importExport.exportword":"Microsoft Word","pad.importExport.exportpdf":"PDF","pad.importExport.exportopen":"ODF (Open Document Format)","pad.importExport.exportdokuwiki":"DokuWiki","pad.importExport.abiword.innerHTML":"Du kan kun importere fra almindelig tekst eller HTML-formater. For mere avancerede importfunktioner, installer venligst abiword.","pad.modals.connected":"Forbundet.","pad.modals.reconnecting":"Genopretter forbindelsen til din pad...","pad.modals.forcereconnect":"Gennemtving genoprettelse af forbindelsen","pad.modals.uderdup":"Åbnet i et andet vindue","pad.modals.userdup.explanation":"Denne pad synes at være åbnet i mere end ét browservindue på denne computer.","pad.modals.userdup.advice":"Tilslut igen for at bruge dette vindue i stedet.","pad.modals.unauth":"Ikke tilladt","pad.modals.unauth.explanation":"Dine rettigheder er ændret mens du ser på denne side. Prøv at oprette forbindelsen igen.","pad.modals.looping":"Forbindelse afbrudt.","pad.modals.looping.explanation":"Der er kommunikationsproblemer med synkroniseringsserveren.","pad.modals.looping.cause":"Måske tilsluttede du via en inkompatibel firewall eller proxy.","pad.modals.initsocketfail":"Serveren er ikke tilgængelig.","pad.modals.initsocketfail.explanation":"Kunne ikke oprette forbindelse til synkroniseringsserveren.","pad.modals.initsocketfail.cause":"Det skyldes sandsynligvis et problem med din browser eller din internetforbindelse.","pad.modals.slowcommit":"Forbindelse afbrudt.","pad.modals.slowcommit.explanation":"Serveren svarer ikke.","pad.modals.slowcommit.cause":"Det kan skyldes problemer med netværksforbindelsen.","pad.modals.deleted":"Slettet.","pad.modals.deleted.explanation":"Denne pad er blevet fjernet.","pad.modals.disconnected":"Du har fået afbrudt forbindelsen.","pad.modals.disconnected.explanation":"Forbindelsen til serveren blev afbrudt","pad.modals.disconnected.cause":"Serveren er muligvis ikke tilgængelig. Gør os venligst opmærksom på hvis dette fortsætter med at ske.","pad.share":"Del denne pad","pad.share.readonly":"Skrivebeskyttet","pad.share.link":"Link","pad.share.emebdcode":"Integrerings URL","pad.chat":"Chat","pad.chat.title":"Åben chat for denne pad.","timeslider.pageTitle":"{{appTitle}} Timeslider","timeslider.toolbar.returnbutton":"Tilbage til pad","timeslider.toolbar.authors":"Forfattere:","timeslider.toolbar.authorsList":"Ingen forfattere","timeslider.exportCurrent":"Eksporter aktuelle version som:","timeslider.version":"Version {{version}}","timeslider.saved":"Gemt den {{day}}.{{month}} {{year}}","timeslider.dateformat":"{{day}}/{{month}}/{{year}} {{hours}}:{{minutes}}:{{seconds}}","timeslider.month.january":"januar","timeslider.month.february":"februar","timeslider.month.march":"marts","timeslider.month.april":"april","timeslider.month.may":"maj","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":"december","pad.savedrevs.marked":"Denne revision er nu markeret som en gemt revision","pad.userlist.entername":"Indtast dit navn","pad.userlist.unnamed":"ikke-navngivet","pad.userlist.guest":"Gæst","pad.userlist.deny":"Nægt","pad.userlist.approve":"Godkend","pad.editbar.clearcolors":"Fjern farver for ophavsmand i hele dokumentet?","pad.impexp.importbutton":"Importer nu","pad.impexp.importing":"Importerer...","pad.impexp.confirmimport":"At importere en fil, vil overskrives den aktuelle pad tekst. Er du sikker på du vil fortsætte?","pad.impexp.convertFailed":"Vi var ikke i stand til at importere denne fil. Brug et andet dokument-format eller kopier og sæt ind manuelt","pad.impexp.uploadFailed":"Upload mislykkedes, prøv igen","pad.impexp.importfailed":"Importen mislykkedes","pad.impexp.copypaste":"Venligst kopier og sæt ind","pad.impexp.exportdisabled":"Eksportere i {{type}} format er deaktiveret. Kontakt din systemadministrator for mere information."} \ No newline at end of file diff --git a/src/locales/de.ini b/src/locales/de.ini deleted file mode 100644 index 177746a5..00000000 --- a/src/locales/de.ini +++ /dev/null @@ -1,78 +0,0 @@ -; Exported from translatewiki.net -[de] -index.newPad = Neues Pad -index.createOpenPad = Pad mit folgendem Namen öffnen -pad.toolbar.bold.title = Fett (Strg-B) -pad.toolbar.italic.title = Kursiv (Strg-I) -pad.toolbar.underline.title = Unterstrichen (Strg-U) -pad.toolbar.strikethrough.title = Durchgestrichen -pad.toolbar.ol.title = Nummerierte Liste -pad.toolbar.ul.title = Ungeordnete Liste -pad.toolbar.indent.title = Einrücken -pad.toolbar.unindent.title = Ausrücken -pad.toolbar.undo.title = Rückgängig (Strg-Z) -pad.toolbar.redo.title = Wiederholen (Strg-Y) -pad.toolbar.clearAuthorship.title = Autorenfarben zurücksetzen -pad.toolbar.import_export.title = Import/Export von verschiedenen Dateiformaten -pad.toolbar.timeslider.title = Pad-Geschichte anzeigen -pad.toolbar.savedRevision.title = Diese Revision markieren -pad.toolbar.settings.title = Einstellungen -pad.toolbar.embed.title = Dieses Pad teilen oder einbetten -pad.toolbar.showusers.title = Verbundene Benutzer anzeigen -pad.colorpicker.save = Speichern -pad.colorpicker.cancel = Abbrechen -pad.loading = Laden... -pad.settings.padSettings = Pad Einstellungen -pad.settings.myView = Eigene Ansicht -pad.settings.stickychat = Chat immer anzeigen -pad.settings.colorcheck = Autorenfarben anzeigen -pad.settings.linenocheck = Zeilennummern -pad.settings.fontType = Schriftart: -pad.settings.fontType.normal = Normal -pad.settings.fontType.monospaced = Monospace -pad.settings.globalView = Gemeinsame Ansicht -pad.settings.language = Sprache: -pad.importExport.import_export = Import/Export -pad.importExport.import = Datei oder Dokument hochladen -pad.importExport.successful = Erfolgreich! -; Fuzzy -pad.importExport.export = Dieses Pad exportieren -pad.importExport.exporthtml = HTML -pad.importExport.exportplain = Reiner Text -pad.importExport.exportword = Microsoft Word -pad.importExport.exportpdf = PDf -pad.importExport.exportopen = ODF (Open Document Format) -pad.importExport.exportdokuwiki = DokuWiki -pad.modals.connected = Verbunden. -pad.modals.reconnecting = Wiederherstellen der Verbindung... -pad.modals.forcereconnect = Erneut Verbinden -pad.modals.uderdup = In einem anderen Fenster geöffnet -pad.modals.userdup.explanation = Dieses Pad scheint in mehr als einem Browser-Fenster auf diesem Computer geöffnet zu sein. -pad.modals.userdup.advice = Um dieses Fenster zu benutzen, verbinden Sie bitte erneut. -pad.modals.unauth = Nicht Authorisiert. -pad.modals.unauth.explanation = Ihre Befugnisse auf dieses Pad zuzugreifen haben sich geädert. Versuchen Sie, erneut zu verbinden. -pad.modals.looping = Verbindung unterbrochen. -pad.modals.looping.explanation = Es gibt Probleme bei der Kommunikation mit dem Synchronisationsserver. -pad.modals.looping.cause = Möglicherweise verläuft Ihre Verbindung durch eine inkompatible Firewall oder einen inkompatiblen Proxy. -pad.modals.initsocketfail = Server nicht erreichbar. -pad.modals.initsocketfail.explanation = Es konnte keine Verbindung zum Synchronisationsserver hergestellt werden. -pad.modals.initsocketfail.cause = Dies könnte an Ihrem Browser oder Ihrer Internet-Verbindung liegen. -pad.modals.slowcommit = Verbindung unterbrochen. -pad.modals.slowcommit.explanation = Der Server reagiert nicht. -pad.modals.slowcommit.cause = Dies könnte an Problemen mit Netzwerk-Konnektivität liegen. Möglicherweise ist der Server aber auch überlastet. -pad.modals.deleted = Entfernt. -pad.modals.deleted.explanation = Dieses Pad wurde entfernt. -pad.modals.disconnected = Verbindung unterbrochen. -pad.modals.disconnected.explanation = Die Verbindung zum Synchronisationsserver wurde unterbrochen. -pad.modals.disconnected.cause = Möglicherweise ist der Server nicht erreichbar. Bitte benachrichtigen Sie uns, falls dies weiterhin passiert. -pad.share = Dieses Pad teilen -pad.share.readonly = Eingeschränkter zugriff (Nur lesen) -pad.share.link = Link -pad.share.emebdcode = In Webseite einbetten -pad.chat = Chat -pad.chat.title = Den Chat für dieses Pad öffnen -timeslider.pageTitle = {{appTitle}} Pad-Geschichte -timeslider.toolbar.returnbutton = Zurück zum Pad -timeslider.toolbar.authors = Autoren: -timeslider.toolbar.authorsList = keine Autoren -timeslider.exportCurrent = Exportiere diese Version als: diff --git a/src/locales/de.json b/src/locales/de.json new file mode 100644 index 00000000..8a4eea66 --- /dev/null +++ b/src/locales/de.json @@ -0,0 +1 @@ +{"index.newPad":"Neues Pad","index.createOpenPad":"Pad mit folgendem Namen öffnen:","pad.toolbar.bold.title":"Fett (Strg-B)","pad.toolbar.italic.title":"Kursiv (Strg-I)","pad.toolbar.underline.title":"Unterstrichen (Strg-U)","pad.toolbar.strikethrough.title":"Durchgestrichen","pad.toolbar.ol.title":"Nummerierte Liste","pad.toolbar.ul.title":"Ungeordnete Liste","pad.toolbar.indent.title":"Einrücken","pad.toolbar.unindent.title":"Ausrücken","pad.toolbar.undo.title":"Rückgängig (Strg-Z)","pad.toolbar.redo.title":"Wiederholen (Strg-Y)","pad.toolbar.clearAuthorship.title":"Autorenfarben zurücksetzen","pad.toolbar.import_export.title":"Import/Export in verschiedenen Dateiformaten","pad.toolbar.timeslider.title":"Pad-Versionsgeschichte anzeigen","pad.toolbar.savedRevision.title":"Diese Revision markieren","pad.toolbar.settings.title":"Einstellungen","pad.toolbar.embed.title":"Dieses Pad teilen oder einbetten","pad.toolbar.showusers.title":"Aktuell verbundene Benutzer anzeigen","pad.colorpicker.save":"Speichern","pad.colorpicker.cancel":"Abbrechen","pad.loading":"Laden...","pad.passwordRequired":"Sie benötigen ein Passwort, um auf dieses Pad zuzugreifen","pad.permissionDenied":"Sie haben keine Berechtigung, um auf dieses Pad zuzugreifen","pad.wrongPassword":"Ihr Passwort war falsch","pad.settings.padSettings":"Pad Einstellungen","pad.settings.myView":"Eigene Ansicht","pad.settings.stickychat":"Chat immer anzeigen","pad.settings.colorcheck":"Autorenfarben anzeigen","pad.settings.linenocheck":"Zeilennummern","pad.settings.fontType":"Schriftart:","pad.settings.fontType.normal":"Normal","pad.settings.fontType.monospaced":"Monospace","pad.settings.globalView":"Gemeinsame Ansicht","pad.settings.language":"Sprache:","pad.importExport.import_export":"Import/Export","pad.importExport.import":"Datei oder Dokument hochladen","pad.importExport.importSuccessful":"Erfolgreich!","pad.importExport.export":"Aktuelles Pad exportieren als:","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":"Sie können nur aus Klartext oder HTML-Formaten importieren. Für mehr erweiterte Importfunktionen installieren Sie bitte abiword.","pad.modals.connected":"Verbunden.","pad.modals.reconnecting":"Wiederherstellen der Verbindung...","pad.modals.forcereconnect":"Erneut Verbinden","pad.modals.uderdup":"In einem anderen Fenster geöffnet","pad.modals.userdup.explanation":"Dieses Pad scheint in mehr als einem Browser-Fenster auf diesem Computer geöffnet zu sein.","pad.modals.userdup.advice":"Um dieses Fenster zu benutzen, verbinden Sie bitte erneut.","pad.modals.unauth":"Nicht authorisiert.","pad.modals.unauth.explanation":"Ihre Zugriffsberechtigung für dieses Pad hat sich zwischenzeitlich geändert. Bitte versuchen Sie, das Pad erneut aufzurufen.","pad.modals.looping":"Verbindung unterbrochen.","pad.modals.looping.explanation":"Es gibt Probleme bei der Kommunikation mit dem Pad-Server.","pad.modals.looping.cause":"Möglicherweise sind Sie durch eine inkompatible Firewall oder über einen inkompatiblen Proxy mit dem Padserver verbunden.","pad.modals.initsocketfail":"Pad-Server nicht erreichbar.","pad.modals.initsocketfail.explanation":"Es konnte keine Verbindung zum Pad-Server hergestellt werden.","pad.modals.initsocketfail.cause":"Dies könnte an Ihrem Browser oder Ihrer Internet-Verbindung liegen.","pad.modals.slowcommit":"Verbindung unterbrochen.","pad.modals.slowcommit.explanation":"Der Pad-Server reagiert nicht.","pad.modals.slowcommit.cause":"Dies könnte ein Netzwerkverbindungsproblem sein oder eine momentane Überlastung des Pad-Servers.","pad.modals.deleted":"Gelöscht.","pad.modals.deleted.explanation":"Dieses Pad wurde gelöscht.","pad.modals.disconnected":"Verbindung unterbrochen.","pad.modals.disconnected.explanation":"Die Verbindung zum Pad-Server wurde unterbrochen.","pad.modals.disconnected.cause":"Möglicherweise ist der Pad-Server nicht erreichbar. Bitte benachrichtigen Sie uns, falls dies weiterhin passiert.","pad.share":"Dieses Pad anderen mitteilen","pad.share.readonly":"Eingeschränkter Nur-Lese-Zugriff","pad.share.link":"Link","pad.share.emebdcode":"In Webseite einbetten","pad.chat":"Chat","pad.chat.title":"Den Chat dieses Pads öffnen","timeslider.pageTitle":"{{appTitle}} Pad-Versionsgeschichte","timeslider.toolbar.returnbutton":"Zurück zum Pad","timeslider.toolbar.authors":"Autoren:","timeslider.toolbar.authorsList":"keine Autoren","timeslider.exportCurrent":"Exportiere diese Version als:","timeslider.version":"Version {{version}}","timeslider.saved":"Gespeichert am {{day}}.{{month}}.{{year}}","timeslider.dateformat":"{{day}}.{{month}}.{{year}} {{hours}}:{{minutes}}:{{seconds}}","timeslider.month.january":"Januar","timeslider.month.february":"Februar","timeslider.month.march":"März","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","pad.savedrevs.marked":"Diese Version wurde jetzt als gespeicherte Version gekennzeichnet","pad.userlist.entername":"Geben Sie Ihren Namen ein","pad.userlist.unnamed":"unbenannt","pad.userlist.guest":"Gast","pad.userlist.deny":"Verweigern","pad.userlist.approve":"Genehmigen","pad.editbar.clearcolors":"Autorenfarben im gesamten Dokument zurücksetzen?","pad.impexp.importbutton":"Jetzt importieren","pad.impexp.importing":"Importiere …","pad.impexp.confirmimport":"Das Importieren einer Datei überschreibt den aktuellen Text des Pads. Wollen Sie wirklich fortfahren?","pad.impexp.convertFailed":"Wir können diese Datei nicht importieren. Bitte verwenden Sie ein anderes Dokumentenformat oder übertragen Sie den Text manuell.","pad.impexp.uploadFailed":"Der Upload ist fehlgeschlagen. Bitte versuchen Sie es erneut.","pad.impexp.importfailed":"Import fehlgeschlagen","pad.impexp.copypaste":"Bitte kopieren und einfügen","pad.impexp.exportdisabled":"Der Export im {{type}}-Format ist deaktiviert. Für Einzelheiten kontaktieren Sie bitte Ihren Systemadministrator."} \ No newline at end of file diff --git a/src/locales/diq.json b/src/locales/diq.json new file mode 100644 index 00000000..f3c0427a --- /dev/null +++ b/src/locales/diq.json @@ -0,0 +1 @@ +{"index.newPad":"Pedo newe","pad.toolbar.bold.title":"Qalın (Ctrl-B)","pad.toolbar.italic.title":"Namıte (Ctrl-I)","pad.toolbar.underline.title":"Bın xizkerden (Ctrl-U)","pad.toolbar.strikethrough.title":"Serê cı xizın","pad.toolbar.ol.title":"Lista ratnayi","pad.toolbar.indent.title":"Serinya satır","pad.toolbar.unindent.title":"Vıcente","pad.toolbar.undo.title":"Peyser bê (Ctrl-Z)","pad.toolbar.redo.title":"Ver şo (Ctrl-Y)","pad.toolbar.clearAuthorship.title":"Pak Rengê Nuştoğey","pad.toolbar.timeslider.title":"Ğızagê zemani","pad.toolbar.savedRevision.title":"Rewizyonê Qeydbiyayey","pad.toolbar.settings.title":"Sazkerdışi","pad.toolbar.embed.title":"Na ped degusnayiya","pad.colorpicker.save":"Qeyd ke","pad.colorpicker.cancel":"Bıterkne","pad.loading":"Bar beno...","pad.settings.padSettings":"Sazkerdışê Pedi","pad.settings.myView":"Asayışê mı","pad.settings.colorcheck":"Rengê nuştekariye","pad.settings.linenocheck":"Nımreyê xeter","pad.settings.fontType":"Babeta nuşti:","pad.settings.fontType.normal":"Normal","pad.settings.fontType.monospaced":"Yewca","pad.settings.globalView":"Asayışo Global","pad.settings.language":"Zıwan:","pad.importExport.import_export":"Zeredayış/Teberdayış","pad.importExport.exporthtml":"HTML","pad.importExport.exportplain":"Duz metin","pad.importExport.exportword":"Microsoft Word","pad.importExport.exportpdf":"PDF","pad.importExport.exportopen":"ODF (Open Document Format)","pad.importExport.exportdokuwiki":"DokuWiki","pad.modals.connected":"Gredeya","pad.modals.unauth":"Selahiyetdar niyo","pad.modals.looping":"Bêgıreyın.","pad.modals.initsocketfail":"Nêresneyêno ciyageyroği.","pad.modals.slowcommit":"Bêgıreyın.","pad.modals.deleted":"Esteriya.","pad.modals.deleted.explanation":"Ena ped wedariye","pad.share":"Na ped vıla ke","pad.share.readonly":"Tenya bıwane","pad.share.link":"Gıre","pad.share.emebdcode":"Degusnaye URL","pad.chat":"Mıhebet","pad.chat.title":"Qandê ena ped mıhebet ake.","timeslider.pageTitle":"Ğızagê zemani {{appTitle}}","timeslider.toolbar.returnbutton":"Peyser şo ped","timeslider.toolbar.authors":"Nuştoği:","timeslider.toolbar.authorsList":"Nuştoği çıniyê","timeslider.exportCurrent":"Versiyonê enewki teber de:","timeslider.version":"Versiyonê {{version}}","timeslider.saved":"{{day}} {{month}}, {{year}} de biyo qeyd","timeslider.dateformat":"{{month}}/{{day}}/{{year}} {{hours}}:{{minutes}}:{{seconds}}","timeslider.month.january":"Çele","timeslider.month.february":"Şıbate","timeslider.month.march":"Adar","timeslider.month.april":"Nisane","timeslider.month.may":"Gulane","timeslider.month.june":"Heziran","timeslider.month.july":"Temuze","timeslider.month.august":"Tebaxe","timeslider.month.september":"Keşkelun","timeslider.month.october":"Tışrino Verên","timeslider.month.november":"Tışrino Peyên","timeslider.month.december":"Kanun"} \ No newline at end of file diff --git a/src/locales/el.json b/src/locales/el.json new file mode 100644 index 00000000..b2978646 --- /dev/null +++ b/src/locales/el.json @@ -0,0 +1 @@ +{"index.newPad":"Νέο Pad","index.createOpenPad":"ή δημιουργία/άνοιγμα ενός Pad με το όνομα:","pad.toolbar.bold.title":"Έντονα (Ctrl-B)","pad.toolbar.italic.title":"Πλάγια (Ctrl-I)","pad.toolbar.underline.title":"Υπογράμμιση (Ctrl-U)","pad.toolbar.strikethrough.title":"Διακριτή διαγραφή","pad.toolbar.ol.title":"Ταξινομημένη λίστα","pad.toolbar.ul.title":"Λίστα χωρίς σειρά","pad.toolbar.indent.title":"Εσοχή","pad.toolbar.unindent.title":"Εσοχή","pad.toolbar.undo.title":"Αναίρεση (Ctrl-Z)","pad.toolbar.redo.title":"Επανάληψη (Ctrl-Y)","pad.toolbar.clearAuthorship.title":"Καθαρισμός Χρωμάτων Συντακτών","pad.toolbar.import_export.title":"Εισαγωγή/Εξαγωγή από/σε διαφορετικούς τύπους αρχείων","pad.toolbar.timeslider.title":"Χρονοδιάγραμμα","pad.toolbar.savedRevision.title":"Αποθηκευμένες Εκδόσεις","pad.toolbar.settings.title":"Ρυθμίσεις","pad.toolbar.embed.title":"Ενσωματώστε αυτό το pad","pad.toolbar.showusers.title":"Εμφάνιση των χρηστών αυτού του pad","pad.colorpicker.save":"Αποθήκευση","pad.colorpicker.cancel":"Άκυρο","pad.loading":"Φόρτωση...","pad.settings.padSettings":"Ρυθμίσεις Pad","pad.settings.myView":"Η προβολή μου","pad.settings.stickychat":"Η Συνομιλία να είναι πάντα ορατή","pad.settings.colorcheck":"Χρώματα συντάκτη","pad.settings.linenocheck":"Αριθμοί γραμμής","pad.settings.fontType":"Τύπος γραμματοσειράς:","pad.settings.fontType.normal":"Κανονική","pad.settings.fontType.monospaced":"Καθορισμένου πλάτους","pad.settings.globalView":"Καθολική Προβολή","pad.settings.language":"Γλώσσα:","pad.importExport.import_export":"Εισαγωγή/Εξαγωγή","pad.importExport.import":"Αποστολή οποιουδήποτε αρχείου κειμένου ή εγγράφου","pad.importExport.export":"Εξαγωγή τρέχοντος pad ως:","pad.importExport.exporthtml":"HTML","pad.importExport.exportplain":"Απλό κείμενο","pad.importExport.exportword":"Microsoft Word","pad.importExport.exportpdf":"PDF","pad.importExport.exportopen":"ODF (Open Document Format)","pad.importExport.exportdokuwiki":"DokuWiki","pad.importExport.abiword.innerHTML":"Μπορείτε να κάνετε εισαγωγή απλού κειμένου ή μορφής html. Για πιο προηγμένες δυνατότητες εισαγωγής παρακαλώ εγκαταστήστε το abiword.","pad.modals.connected":"Συνδεμένοι.","pad.modals.reconnecting":"Επανασύνδεση στο pad σας...","pad.modals.forcereconnect":"Επιβολή επανασύνδεσης","pad.modals.uderdup":"Ανοιγμένο σε άλλο παράθυρο","pad.modals.userdup.explanation":"Αυτό το pad φαίνεται να είναι ανοιχτό σε περισσότερα από ένα παράθυρο του προγράμματος περιήγησης σε αυτόν τον υπολογιστή.","pad.modals.userdup.advice":"Επανασύνδεση για να χρησιμοποιήσετε αυτό το παράθυρο.","pad.modals.unauth":"Δεν επιτρέπεται","pad.modals.unauth.explanation":"Τα δικαιώματά σας άλλαξαν όσο βλέπατε αυτήν τη σελίδα. Δοκιμάστε να επανασυνδεθείτε.","pad.modals.looping":"Αποσυνδέθηκε.","pad.modals.looping.explanation":"Υπάρχουν προβλήματα επικοινωνίας με το διακομιστή συγχρονισμού.","pad.modals.looping.cause":"Ίσως συνδεθήκατε μέσω ενός μη συμβατού τείχους προστασίας ή διακομιστή μεσολάβησης.","pad.modals.initsocketfail":"Αδύνατη ή επικοινωνία με τον διακομιστή.","pad.modals.initsocketfail.explanation":"Δεν ήταν δυνατή η σύνδεση με τον διακομιστή συγχρονισμού.","pad.modals.initsocketfail.cause":"Αυτό οφείλεται πιθανώς σε πρόβλημα με το πρόγραμμα περιήγησης ή της σύνδεσής σας στο διαδίκτυο.","pad.modals.slowcommit":"Αποσυνδέθηκε.","pad.modals.slowcommit.explanation":"Ο διακομιστής δεν αποκρίνεται.","pad.modals.slowcommit.cause":"Αυτό μπορεί να οφείλεται σε προβλήματα σύνδεσης δικτύου.","pad.modals.deleted":"Διεγράφη.","pad.modals.deleted.explanation":"Αυτό το pad έχει καταργηθεί.","pad.modals.disconnected":"Έχετε αποσυνδεθεί.","pad.modals.disconnected.explanation":"Χάθηκε η σύνδεση με το διακομιστή","pad.modals.disconnected.cause":"Ο διακομιστής μπορεί να μην είναι διαθέσιμος. Παρακαλώ ειδοποιήστε μας εάν αυτό εξακολουθεί να συμβαίνει.","pad.share":"Μοιραστείτε αυτό το pad","pad.share.readonly":"Μόνο για ανάγνωση","pad.share.link":"Σύνδεσμος","pad.share.emebdcode":"Ενσωματώστε URL","pad.chat":"Συνομιλία","pad.chat.title":"Άνοιγμα της συνομιλίας για αυτό το pad.","timeslider.pageTitle":"{{appTitle}} Χρονοδιάγραμμα","timeslider.toolbar.returnbutton":"Επιστροφή στο pad","timeslider.toolbar.authors":"Συντάκτες:","timeslider.toolbar.authorsList":"Κανένας Συντάκτης","timeslider.exportCurrent":"Εξαγωγή τρέχουσας έκδοσης ως:","timeslider.version":"Έκδοση {{έκδοση}}","timeslider.saved":"Αποθηκευμένος {{μήνας}} {{ημέρα}}, {{έτος}}","timeslider.dateformat":"{{μήνας}}/{{ημέρα}}/{{έτος}} {{ώρες}}:{{λεπτά}}:{{δευτερόλεπτα}}","timeslider.month.january":"Ιανουάριος","timeslider.month.february":"Φεβρουάριος","timeslider.month.march":"Μάρτιος","timeslider.month.april":"Απρίλιος","timeslider.month.may":"Μάιος","timeslider.month.june":"Ιούνιος","timeslider.month.july":"Ιούλιος","timeslider.month.august":"Αύγουστος","timeslider.month.september":"Σεπτέμβριος","timeslider.month.october":"Οκτώβριος","timeslider.month.november":"Νοέμβριος","timeslider.month.december":"Δεκέμβριος"} \ No newline at end of file diff --git a/src/locales/en.ini b/src/locales/en.ini deleted file mode 100644 index a110583e..00000000 --- a/src/locales/en.ini +++ /dev/null @@ -1,77 +0,0 @@ -[*] -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) -pad.toolbar.strikethrough.title = Strikethrough -pad.toolbar.ol.title = Ordered list -pad.toolbar.ul.title = Unordered List -pad.toolbar.indent.title = Indent -pad.toolbar.unindent.title = Outdent -pad.toolbar.undo.title = Undo (Ctrl-Z) -pad.toolbar.redo.title = Redo (Ctrl-Y) -pad.toolbar.clearAuthorship.title = Clear Authorship Colors -pad.toolbar.import_export.title = Import/Export from/to different file formats -pad.toolbar.timeslider.title = Timeslider -pad.toolbar.savedRevision.title = Saved Revisions -pad.toolbar.settings.title = Settings -pad.toolbar.embed.title = 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.settings.padSettings = Pad Settings -pad.settings.myView = My View -pad.settings.stickychat = Chat always on screen -pad.settings.colorcheck = Authorship colors -pad.settings.linenocheck = Line numbers -pad.settings.fontType = Font type: -pad.settings.fontType.normal = Normal -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.successful = Successful! -pad.importExport.export = Export current pad as: -pad.importExport.exporthtml = HTML -pad.importExport.exportplain = Plain text -pad.importExport.exportword = Microsoft Word -pad.importExport.exportpdf = PDF -pad.importExport.exportopen = ODF (Open Document Format) -pad.importExport.exportdokuwiki = DokuWiki -pad.modals.connected = Connected. -pad.modals.reconnecting = Reconnecting to your pad.. -pad.modals.forcereconnect = Force reconnect -pad.modals.uderdup = 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.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.share = Share this pad -pad.share.readonly = Read only -pad.share.link = Link -pad.share.emebdcode = Embed URL -pad.chat = Chat -pad.chat.title = Open the chat for this pad. - -timeslider.pageTitle = {{appTitle}} Timeslider -timeslider.toolbar.returnbutton = Return to pad -timeslider.toolbar.authors = Authors: -timeslider.toolbar.authorsList = No Authors -timeslider.exportCurrent = Export current version as: \ No newline at end of file diff --git a/src/locales/en.json b/src/locales/en.json new file mode 100644 index 00000000..c3ab8c58 --- /dev/null +++ b/src/locales/en.json @@ -0,0 +1 @@ +{"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)","pad.toolbar.strikethrough.title":"Strikethrough","pad.toolbar.ol.title":"Ordered list","pad.toolbar.ul.title":"Unordered List","pad.toolbar.indent.title":"Indent","pad.toolbar.unindent.title":"Outdent","pad.toolbar.undo.title":"Undo (Ctrl-Z)","pad.toolbar.redo.title":"Redo (Ctrl-Y)","pad.toolbar.clearAuthorship.title":"Clear Authorship Colors","pad.toolbar.import_export.title":"Import/Export from/to different file formats","pad.toolbar.timeslider.title":"Timeslider","pad.toolbar.savedRevision.title":"Saved Revisions","pad.toolbar.settings.title":"Settings","pad.toolbar.embed.title":"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","pad.settings.colorcheck":"Authorship colors","pad.settings.linenocheck":"Line numbers","pad.settings.fontType":"Font type:","pad.settings.fontType.normal":"Normal","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!","pad.importExport.export":"Export current pad as:","pad.importExport.exporthtml":"HTML","pad.importExport.exportplain":"Plain 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":"You only can import from plain text or html formats. For more advanced import features please install abiword.","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.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.share":"Share this pad","pad.share.readonly":"Read only","pad.share.link":"Link","pad.share.emebdcode":"Embed URL","pad.chat":"Chat","pad.chat.title":"Open the chat for this pad.","timeslider.pageTitle":"{{appTitle}} Timeslider","timeslider.toolbar.returnbutton":"Return to pad","timeslider.toolbar.authors":"Authors:","timeslider.toolbar.authorsList":"No Authors","timeslider.toolbar.exportlink.title":"Export","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","timeslider.month.march":"March","timeslider.month.april":"April","timeslider.month.may":"May","timeslider.month.june":"June","timeslider.month.july":"July","timeslider.month.august":"August","timeslider.month.september":"September","timeslider.month.october":"October","timeslider.month.november":"November","timeslider.month.december":"December","pad.savedrevs.marked":"This revision is now marked as a saved revision","pad.userlist.entername":"Enter your name","pad.userlist.unnamed":"unnamed","pad.userlist.guest":"Guest","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?","pad.impexp.convertFailed":"We were not able to import this file. Please use a different document format or copy paste manually","pad.impexp.uploadFailed":"The upload failed, please try again","pad.impexp.importfailed":"Import failed","pad.impexp.copypaste":"Please copy paste","pad.impexp.exportdisabled":"Exporting as {{type}} format is disabled. Please contact your system administrator for details."} \ No newline at end of file diff --git a/src/locales/es.ini b/src/locales/es.ini deleted file mode 100644 index acb6a5cf..00000000 --- a/src/locales/es.ini +++ /dev/null @@ -1,78 +0,0 @@ -; Exported from translatewiki.net -[es] -index.newPad = Nuevo Pad -index.createOpenPad = o puedes crear/abrir un Pad con el nombre: -pad.toolbar.bold.title = Negrita (Ctrl-B) -pad.toolbar.italic.title = Cursiva (Ctrl-I) -pad.toolbar.underline.title = Subrayado (Ctrl-U) -pad.toolbar.strikethrough.title = Tachado -pad.toolbar.ol.title = Lista ordenada -pad.toolbar.ul.title = Lista desordenada -pad.toolbar.indent.title = Sangrar -pad.toolbar.unindent.title = Desangrar -pad.toolbar.undo.title = Deshacer (Ctrl-Z) -pad.toolbar.redo.title = Rehacer (Ctrl-Y) -pad.toolbar.clearAuthorship.title = Eliminar los colores de los autores -pad.toolbar.import_export.title = Importar/Exportar a diferentes formatos de archivos -pad.toolbar.timeslider.title = Línea de tiempo -pad.toolbar.savedRevision.title = Revisiones guardadas -pad.toolbar.settings.title = Configuración -pad.toolbar.embed.title = Incrustar este pad -pad.toolbar.showusers.title = Mostrar los usuarios de este pad -pad.colorpicker.save = Guardar -pad.colorpicker.cancel = Cancelar -pad.loading = Cargando... -pad.settings.padSettings = Configuración del Pad -pad.settings.myView = Mi vista -pad.settings.stickychat = Chat siempre encima -pad.settings.colorcheck = Color de autoría -pad.settings.linenocheck = Números de línea -pad.settings.fontType = Tipografía: -pad.settings.fontType.normal = Normal -pad.settings.fontType.monospaced = Monoespacio -pad.settings.globalView = Vista global -pad.settings.language = Idioma: -pad.importExport.import_export = Importar/Exportar -pad.importExport.import = Subir cualquier texto o documento -pad.importExport.successful = ¡Operación exitosa! -; Fuzzy -pad.importExport.export = Exporta el pad actual como -pad.importExport.exporthtml = HTML -pad.importExport.exportplain = Texto plano -pad.importExport.exportword = Microsoft Word -pad.importExport.exportpdf = PDF -pad.importExport.exportopen = ODF (Open Document Format) -pad.importExport.exportdokuwiki = DokuWiki -pad.modals.connected = Conectado. -pad.modals.reconnecting = Reconectando a tu pad.. -pad.modals.forcereconnect = Reconexión forzosa -pad.modals.uderdup = Abrir en otra ventana -pad.modals.userdup.explanation = Este pad parece estar abierto en más de una ventana de tu navegador. -pad.modals.userdup.advice = Reconectar para usar esta ventana. -pad.modals.unauth = No autorizado. -pad.modals.unauth.explanation = Los permisos han cambiado mientras estabas viendo esta página. Intenta reconectar de nuevo. -pad.modals.looping = Desconectado. -pad.modals.looping.explanation = Estamos teniendo problemas con la sincronización en el servidor. -pad.modals.looping.cause = Quizás su conexión fluya a través de un proxy o un cortafuegos incompatible. -pad.modals.initsocketfail = Servidor incalcanzable. -pad.modals.initsocketfail.explanation = No se pudo conectar al sevidor de sincronización. -pad.modals.initsocketfail.cause = Puede ser a causa de tu navegador o de una caída en tu conexión de Internet. -pad.modals.slowcommit = Desconectado. -pad.modals.slowcommit.explanation = El servidor no responde. -pad.modals.slowcommit.cause = Puede deberse a problemas con tu conexión de red. -pad.modals.deleted = Borrado. -pad.modals.deleted.explanation = Este pad ha sido borrado. -pad.modals.disconnected = Has sido desconectado. -pad.modals.disconnected.explanation = Se perdió la conexión con el servidor -pad.modals.disconnected.cause = El servidor podría no estar disponible. Contacte con nosotros si esto continúa sucediendo. -pad.share = Compatir el pad -pad.share.readonly = Sólo lectura -pad.share.link = Enlace -pad.share.emebdcode = Incrustar URL -pad.chat = Chat -pad.chat.title = Abrir el chat para este pad. -timeslider.pageTitle = {{appTitle}} Línea de tiempo -timeslider.toolbar.returnbutton = Volver al pad -timeslider.toolbar.authors = Autores: -timeslider.toolbar.authorsList = Sin autores -timeslider.exportCurrent = Exportar la versión actual como: diff --git a/src/locales/es.json b/src/locales/es.json new file mode 100644 index 00000000..1e9ea74c --- /dev/null +++ b/src/locales/es.json @@ -0,0 +1 @@ +{"index.newPad":"Nuevo Pad","index.createOpenPad":"o crea/abre un Pad con el nombre:","pad.toolbar.bold.title":"Negrita (Ctrl-B)","pad.toolbar.italic.title":"Cursiva (Ctrl-I)","pad.toolbar.underline.title":"Subrayado (Ctrl-U)","pad.toolbar.strikethrough.title":"Tachado","pad.toolbar.ol.title":"Lista ordenada","pad.toolbar.ul.title":"Lista desordenada","pad.toolbar.indent.title":"Sangrar","pad.toolbar.unindent.title":"Desangrar","pad.toolbar.undo.title":"Deshacer (Ctrl-Z)","pad.toolbar.redo.title":"Rehacer (Ctrl-Y)","pad.toolbar.clearAuthorship.title":"Eliminar los colores de los autores","pad.toolbar.import_export.title":"Importar/Exportar a diferentes formatos de archivos","pad.toolbar.timeslider.title":"Línea de tiempo","pad.toolbar.savedRevision.title":"Revisiones guardadas","pad.toolbar.settings.title":"Configuración","pad.toolbar.embed.title":"Incrustar este pad","pad.toolbar.showusers.title":"Mostrar los usuarios de este pad","pad.colorpicker.save":"Guardar","pad.colorpicker.cancel":"Cancelar","pad.loading":"Cargando...","pad.passwordRequired":"Necesitas una contraseña para acceder a este documento","pad.permissionDenied":"No tienes permiso para acceder a esta página","pad.wrongPassword":"La contraseña era incorrecta","pad.settings.padSettings":"Configuración del Pad","pad.settings.myView":"Preferencias personales","pad.settings.stickychat":"Chat siempre encima","pad.settings.colorcheck":"Color de autoría","pad.settings.linenocheck":"Números de línea","pad.settings.fontType":"Tipografía:","pad.settings.fontType.normal":"Normal","pad.settings.fontType.monospaced":"Monoespacio","pad.settings.globalView":"Preferencias globales","pad.settings.language":"Idioma:","pad.importExport.import_export":"Importar/Exportar","pad.importExport.import":"Subir cualquier texto o documento","pad.importExport.importSuccessful":"¡Operación realizada con éxito!","pad.importExport.export":"Exporta el pad actual como:","pad.importExport.exporthtml":"HTML","pad.importExport.exportplain":"Texto plano","pad.importExport.exportword":"Microsoft Word","pad.importExport.exportpdf":"PDF","pad.importExport.exportopen":"ODF (Open Document Format)","pad.importExport.exportdokuwiki":"DokuWiki","pad.importExport.abiword.innerHTML":"Sólo puede importar formatos de texto plano o html. Para funciones más avanzadas instale abiword.","pad.modals.connected":"Conectado.","pad.modals.reconnecting":"Reconectando a tu pad..","pad.modals.forcereconnect":"Reconexión forzosa","pad.modals.uderdup":"Abierto en otra ventana","pad.modals.userdup.explanation":"Este pad parece estar abierto en más de una ventana de tu navegador.","pad.modals.userdup.advice":"Reconectar para usar esta ventana.","pad.modals.unauth":"No autorizado.","pad.modals.unauth.explanation":"Los permisos han cambiado mientras estabas viendo esta página. Intenta reconectar de nuevo.","pad.modals.looping":"Desconectado.","pad.modals.looping.explanation":"Estamos teniendo problemas con la sincronización en el servidor.","pad.modals.looping.cause":"Puede deberse a que te conectes a través de un proxy o un cortafuegos incompatible.","pad.modals.initsocketfail":"Servidor incalcanzable.","pad.modals.initsocketfail.explanation":"No se pudo conectar al servidor de sincronización.","pad.modals.initsocketfail.cause":"Puede ser a causa de tu navegador o de una caída en tu conexión de Internet.","pad.modals.slowcommit":"Desconectado.","pad.modals.slowcommit.explanation":"El servidor no responde.","pad.modals.slowcommit.cause":"Puede deberse a problemas con tu conexión de red.","pad.modals.deleted":"Borrado.","pad.modals.deleted.explanation":"Este pad ha sido borrado.","pad.modals.disconnected":"Has sido desconectado.","pad.modals.disconnected.explanation":"Se perdió la conexión con el servidor","pad.modals.disconnected.cause":"El servidor podría no estar disponible. Contacte con nosotros si esto continúa sucediendo.","pad.share":"Compatir el pad","pad.share.readonly":"Sólo lectura","pad.share.link":"Enlace","pad.share.emebdcode":"Incrustar URL","pad.chat":"Chat","pad.chat.title":"Abrir el chat para este pad.","timeslider.pageTitle":"{{appTitle}} Línea de tiempo","timeslider.toolbar.returnbutton":"Volver al pad","timeslider.toolbar.authors":"Autores:","timeslider.toolbar.authorsList":"Sin autores","timeslider.exportCurrent":"Exportar la versión actual como:","timeslider.version":"Versión {{version}}","timeslider.saved":"Guardado el {{day}} de {{month}} de {{year}}","timeslider.dateformat":"{{day}}/{{month}}/{{year}} {{hours}}:{{minutes}}:{{seconds}}","timeslider.month.january":"Enero","timeslider.month.february":"Febrero","timeslider.month.march":"Marzo","timeslider.month.april":"Abril","timeslider.month.may":"Mayo","timeslider.month.june":"Junio","timeslider.month.july":"Julio","timeslider.month.august":"Agosto","timeslider.month.september":"Septiembre","timeslider.month.october":"Octubre","timeslider.month.november":"Noviembre","timeslider.month.december":"Diciembre","pad.savedrevs.marked":"Revisión guardada","pad.userlist.entername":"Escribe tu nombre","pad.userlist.unnamed":"anónimo","pad.userlist.guest":"Invitado","pad.userlist.deny":"Denegar","pad.userlist.approve":"Aprobar","pad.editbar.clearcolors":"¿Desea borrar el color de los autores en todo el documento?","pad.impexp.importbutton":"Importar","pad.impexp.importing":"Importando...","pad.impexp.confirmimport":"Al importar un fichero se borrará el contenido actual del documento. ¿Quiere continuar?","pad.impexp.convertFailed":"No pudimos importar este fichero. Intentalo con otro formato diferente o copia y pega manualmente.","pad.impexp.uploadFailed":"El envío del fichero falló. Intentelo de nuevo.","pad.impexp.importfailed":"Fallo al importar","pad.impexp.copypaste":"Intente copiar y pegar","pad.impexp.exportdisabled":"La exportación al formato {{type}} format está desactivada. Contacte con su administrador de sistemas."} \ No newline at end of file diff --git a/src/locales/fa.json b/src/locales/fa.json new file mode 100644 index 00000000..fc516b49 --- /dev/null +++ b/src/locales/fa.json @@ -0,0 +1 @@ +{"index.newPad":"دفترچه یادداشت جدید","index.createOpenPad":"یا ایجاد/بازکردن یک پد با نام:","pad.toolbar.bold.title":"پررنگ (Ctrl-B)","pad.toolbar.italic.title":"مورب (Ctrl-I)","pad.toolbar.underline.title":"زیرخط (Ctrl-U)","pad.toolbar.strikethrough.title":"خط‌خورده","pad.toolbar.ol.title":"فهرست مرتب‌شده","pad.toolbar.ul.title":"فهرست مرتب‌نشده","pad.toolbar.indent.title":"تورفتگی","pad.toolbar.unindent.title":"بیرون‌رفتگی","pad.toolbar.undo.title":"باطل‌کردن (Ctrl-Z)","pad.toolbar.redo.title":"از نو (Ctrl-Y)","pad.toolbar.clearAuthorship.title":"پاک‌کردن رنگ‌های نویسندگی","pad.toolbar.import_export.title":"درون‌ریزی/برون‌ریزی از/به قالب‌های مختلف","pad.toolbar.timeslider.title":"اسلایدر زمان","pad.toolbar.savedRevision.title":"نسخه‌های ذخیره‌شده","pad.toolbar.settings.title":"تنظیمات","pad.toolbar.embed.title":"جاسازی این دفترچه یادداشت","pad.toolbar.showusers.title":"نمایش کاربران در این دفترچه یادداشت","pad.colorpicker.save":"ذخیره","pad.colorpicker.cancel":"لغو","pad.loading":"در حال بارگیری...","pad.settings.padSettings":"تنظیمات دفترچه یادداشت","pad.settings.myView":"نمای من","pad.settings.stickychat":"چت همیشه روی صفحه نمایش","pad.settings.colorcheck":"رنگ‌های نویسندگی","pad.settings.linenocheck":"شمارهٔ خطوط","pad.settings.fontType":"نوع قلم:","pad.settings.fontType.normal":"عادی","pad.settings.fontType.monospaced":"مونواسپیس","pad.settings.globalView":"نمای سراسری","pad.settings.language":"زبان:","pad.importExport.import_export":"درون‌ریزی/برون‌ریزی","pad.importExport.import":"برگذاری پروندهٔ متنی یا سند","pad.importExport.export":"برون‌ریزی این دفترچه یادداشت به عنوان:","pad.importExport.exporthtml":"اچ‌تی‌ام‌ال","pad.importExport.exportplain":"متنی ساده","pad.importExport.exportword":"مایکروسافت ورد","pad.importExport.exportpdf":"پی‌دی‌اف","pad.importExport.exportopen":"اودی‌اف (قالب سند باز)","pad.importExport.exportdokuwiki":"دوکوویکی (DokuWiki)","pad.modals.connected":"متصل شد.","pad.modals.reconnecting":"اتصال مجدد به دفترچه یادداشت شما..","pad.modals.forcereconnect":"اجبار به اتصال مجدد","pad.modals.uderdup":"در پنجرهٔ دیگری باز شد","pad.modals.userdup.explanation":"به نظر می‌رسد این دفترچه یادداشت در بیش از یک پنجرهٔ مرورگر از این رایانه باز شده‌است.","pad.modals.userdup.advice":"اتصال مجدد برای استفاده از این پنجره","pad.modals.unauth":"مجاز نیست","pad.modals.unauth.explanation":"دسترسی شما در حین مشاهدهٔ این صفحه تغییر یافته‌است.","pad.modals.looping":"اتصال قطع شد.","pad.modals.looping.explanation":"مشکلاتی ارتباطی با سرور همگام‌سازی وجود دارد.","pad.modals.looping.cause":"شاید شما از طریق یک فایروال یا پروکسی ناسازگار متصل شده‌اید.","pad.modals.initsocketfail":"سرور غیر قابل دسترسی است.","pad.modals.initsocketfail.explanation":"نتوانست به سرور همگام‌سازی متصل شود.","pad.modals.initsocketfail.cause":"این احتمالاً به خاطر مشکلی در مرورگر یا اتصال اینترنتی‌تان است.","pad.modals.slowcommit":"اتصال قطع شد.","pad.modals.slowcommit.explanation":"سرور پاسخ نمی‌دهد.","pad.modals.slowcommit.cause":"این می‌تواند به خاطر مشکلاتی در اتصال به شبکه باشد.","pad.modals.deleted":"حذف شد.","pad.modals.deleted.explanation":"این دفترچه یادداشت حذف شده‌است.","pad.modals.disconnected":"اتصال شما قطع شده‌است.","pad.modals.disconnected.explanation":"اتصال به سرور قطع شده‌است.","pad.modals.disconnected.cause":"سرور ممکن است غیر قابل دسترس باشد. اگر این مشکل باز هم رخ داد لطفاً به ما اطلاع دهید.","pad.share":"به‌اشتراک‌گذاری این دفترچه یادداشت","pad.share.readonly":"فقط خواندنی","pad.share.link":"پیوند","pad.share.emebdcode":"جاسازی نشانی","pad.chat":"چت","pad.chat.title":"بازکردن چت برای این دفترچه یادداشت","timeslider.pageTitle":"{{appTitle}} اسلایدر زمان","timeslider.toolbar.returnbutton":"بازگشت به دفترچه یادداشت","timeslider.toolbar.authors":"نویسندگان:","timeslider.toolbar.authorsList":"بدون نویسنده","timeslider.exportCurrent":"برون‌ریزی نسخهٔ کنونی به عنوان:","timeslider.month.january":"ژانویه","timeslider.month.february":"فوریه","timeslider.month.march":"مارس","timeslider.month.april":"آوریل","timeslider.month.may":"مه","timeslider.month.june":"ژوئن","timeslider.month.july":"ژوئیه","timeslider.month.august":"اوت","timeslider.month.september":"سپتامبر","timeslider.month.october":"اکتبر","timeslider.month.november":"نوامبر","timeslider.month.december":"دسامبر"} \ No newline at end of file diff --git a/src/locales/fi.ini b/src/locales/fi.ini deleted file mode 100644 index cbaea885..00000000 --- a/src/locales/fi.ini +++ /dev/null @@ -1,49 +0,0 @@ -; Exported from translatewiki.net -; Author: Nike -[fi] -index.newPad = Uusi muistio -index.createOpenPad = tai avaa muistio nimellä: -pad.toolbar.bold.title = Lihavointi (Ctrl-B) -pad.toolbar.italic.title = Kursivointi (Ctrl-I) -pad.toolbar.underline.title = Alleviivaus (Ctrl-U) -pad.toolbar.strikethrough.title = Yliviivaus -pad.toolbar.ol.title = Numeroitu lista -pad.toolbar.ul.title = Numeroimaton lista -pad.toolbar.indent.title = Sisennä -pad.toolbar.unindent.title = Ulonna -pad.toolbar.undo.title = Kumoa (Ctrl-Z) -pad.toolbar.redo.title = Tee uudelleen (Ctrl-Y) -pad.toolbar.clearAuthorship.title = Poista kirjoittavärit -pad.toolbar.import_export.title = Tuo tai vie eri muotoihin -pad.toolbar.savedRevision.title = Tallennetut versiot -pad.toolbar.settings.title = Asetukset -pad.toolbar.embed.title = Upota muistio -pad.toolbar.showusers.title = Näytä muistion käyttäjät -pad.colorpicker.save = Tallenna -pad.colorpicker.cancel = Peru -pad.loading = Ladataan… -pad.settings.padSettings = Muistion asetukset -pad.settings.myView = Oma näkymä -pad.settings.stickychat = Keskustelu aina näkyvissä -pad.settings.colorcheck = Kirjoittavärit -pad.settings.linenocheck = Rivinumerot -pad.settings.fontType = Kirjasintyyppi: -pad.settings.fontType.normal = normaali -pad.settings.fontType.monospaced = tasalevyinen -pad.settings.language = Kieli: -pad.importExport.import_export = Tuonti/vienti -pad.importExport.exporthtml = HTML -pad.importExport.exportplain = Muotoilematon teksti -pad.importExport.exportword = Microsoft Word -pad.importExport.exportpdf = PDF -pad.importExport.exportopen = ODF (Open Document Format) -pad.importExport.exportdokuwiki = DokuWiki -pad.modals.connected = Yhdistetty. -pad.modals.reconnecting = Herätellään yhteyttä muistioon... -pad.modals.forcereconnect = Pakota uudelleenyhdistäminen -pad.share = Jaa muistio -pad.share.readonly = Vain luku -pad.share.link = Linkki -pad.share.emebdcode = Upotusosoite -pad.chat = Keskustelu -timeslider.toolbar.returnbutton = Palaa muistioon diff --git a/src/locales/fi.json b/src/locales/fi.json new file mode 100644 index 00000000..5ef9c8cd --- /dev/null +++ b/src/locales/fi.json @@ -0,0 +1 @@ +{"index.newPad":"Uusi muistio","index.createOpenPad":"tai luo tai avaa muistio nimellä:","pad.toolbar.bold.title":"Lihavointi (Ctrl-B)","pad.toolbar.italic.title":"Kursivointi (Ctrl-I)","pad.toolbar.underline.title":"Alleviivaus (Ctrl-U)","pad.toolbar.strikethrough.title":"Yliviivaus","pad.toolbar.ol.title":"Numeroitu lista","pad.toolbar.ul.title":"Numeroimaton lista","pad.toolbar.indent.title":"Sisennä","pad.toolbar.unindent.title":"Ulonna","pad.toolbar.undo.title":"Kumoa (Ctrl-Z)","pad.toolbar.redo.title":"Tee uudelleen (Ctrl-Y)","pad.toolbar.clearAuthorship.title":"Poista kirjoittajavärit","pad.toolbar.import_export.title":"Tuo tai vie eri tiedostomuodoista tai -muotoihin","pad.toolbar.timeslider.title":"Aikajana","pad.toolbar.savedRevision.title":"Tallennetut versiot","pad.toolbar.settings.title":"Asetukset","pad.toolbar.embed.title":"Upota muistio","pad.toolbar.showusers.title":"Näytä muistion käyttäjät","pad.colorpicker.save":"Tallenna","pad.colorpicker.cancel":"Peruuta","pad.loading":"Ladataan…","pad.passwordRequired":"Tämä muistio on suojattu salasanalla.","pad.permissionDenied":"Käyttöoikeutesi eivät riitä tämän muistion käyttämiseen.","pad.wrongPassword":"Väärä salasana","pad.settings.padSettings":"Muistion asetukset","pad.settings.myView":"Oma näkymä","pad.settings.stickychat":"Keskustelu aina näkyvissä","pad.settings.colorcheck":"Kirjoittajavärit","pad.settings.linenocheck":"Rivinumerot","pad.settings.fontType":"Kirjasintyyppi:","pad.settings.fontType.normal":"normaali","pad.settings.fontType.monospaced":"tasalevyinen","pad.settings.globalView":"Yleisnäkymä","pad.settings.language":"Kieli:","pad.importExport.import_export":"Tuonti/vienti","pad.importExport.import":"Lähetä mikä tahansa tekstitiedosto tai asiakirja","pad.importExport.export":"Vie muistio muodossa:","pad.importExport.exporthtml":"HTML","pad.importExport.exportplain":"Muotoilematon teksti","pad.importExport.exportword":"Microsoft Word","pad.importExport.exportpdf":"PDF","pad.importExport.exportopen":"ODF (Open Document Format)","pad.importExport.exportdokuwiki":"DokuWiki","pad.modals.connected":"Yhdistetty.","pad.modals.reconnecting":"Muodostetaan yhteyttä muistioon uudelleen...","pad.modals.forcereconnect":"Pakota yhdistämään uudelleen","pad.modals.uderdup":"Avattu toisessa ikkunassa","pad.modals.userdup.explanation":"Tämä muistio vaikuttaa olevan avoinna useammassa eri selainikkunassa tällä koneella.","pad.modals.userdup.advice":"Yhdistä uudelleen, jos haluat käyttää tätä ikkunaa.","pad.modals.unauth":"Oikeudet eivät riitä","pad.modals.unauth.explanation":"Käyttöoikeutesi ovat muuttuneet katsellessasi tätä sivua. Yritä yhdistää uudelleen.","pad.modals.looping":"Yhteys katkaistu.","pad.modals.looping.explanation":"Synkronointipalvelimen kanssa on yhteysongelmia.","pad.modals.looping.cause":"Yhteytesi on mahdollisesti muodostettu yhteensopimattoman palomuurin tai välityspalvelimen kautta.","pad.modals.initsocketfail":"Palvelimeen ei saada yhteyttä.","pad.modals.initsocketfail.explanation":"Synkronointipalvelimeen ei saatu yhteyttä.","pad.modals.initsocketfail.cause":"Tämä johtuu mitä luultavimmin selaimestasi tai verkkoyhteydestäsi.","pad.modals.slowcommit":"Yhteys katkaistu.","pad.modals.slowcommit.explanation":"Palvelin ei vastaa.","pad.modals.slowcommit.cause":"Tämä saattaa johtua verkkoyhteyden ongelmista.","pad.modals.deleted":"Poistettu.","pad.modals.deleted.explanation":"Tämä muistio on poistettu.","pad.modals.disconnected":"Yhteytesi on katkaistu.","pad.modals.disconnected.explanation":"Yhteys palvelimeen katkesi","pad.modals.disconnected.cause":"Palvelin saattaa olla käyttämättömissä. Ilmoitathan meille, jos tämä ongelma toistuu.","pad.share":"Jaa muistio","pad.share.readonly":"Vain luku","pad.share.link":"Linkki","pad.share.emebdcode":"Upotusosoite","pad.chat":"Keskustelu","pad.chat.title":"Avaa keskustelu nykyisestä muistiosta.","timeslider.pageTitle":"{{appTitle}} -aikajana","timeslider.toolbar.returnbutton":"Palaa muistioon","timeslider.toolbar.authors":"Tekijät:","timeslider.toolbar.authorsList":"Ei tekijöitä","timeslider.exportCurrent":"Vie nykyinen versio muodossa:","timeslider.version":"Versio {{version}}","timeslider.saved":"Tallennettu {{day}}. {{month}}ta {{year}}","timeslider.dateformat":"{{day}}.{{month}}.{{year}} {{hours}}:{{minutes}}:{{seconds}}","timeslider.month.january":"tammikuu","timeslider.month.february":"helmikuu","timeslider.month.march":"maaliskuu","timeslider.month.april":"huhtikuu","timeslider.month.may":"toukokuu","timeslider.month.june":"kesäkuu","timeslider.month.july":"heinäkuu","timeslider.month.august":"elokuu","timeslider.month.september":"syyskuu","timeslider.month.october":"lokakuu","timeslider.month.november":"marraskuu","timeslider.month.december":"joulukuu"} \ No newline at end of file diff --git a/src/locales/fr.ini b/src/locales/fr.ini deleted file mode 100644 index a80ff205..00000000 --- a/src/locales/fr.ini +++ /dev/null @@ -1,78 +0,0 @@ -; Exported from translatewiki.net -[fr] -index.newPad = Nouveau Pad -index.createOpenPad = ou créer/ouvrir un Pad intitulé -pad.toolbar.bold.title = Gras (Ctrl-B) -pad.toolbar.italic.title = Italique (Ctrl-I) -pad.toolbar.underline.title = Souligner (Ctrl-U) -pad.toolbar.strikethrough.title = Barrer -pad.toolbar.ol.title = Liste ordonnée -pad.toolbar.ul.title = Liste non-ordonnée -pad.toolbar.indent.title = Indenter -pad.toolbar.unindent.title = Désindenter -pad.toolbar.undo.title = Annuler (Ctrl-Z) -pad.toolbar.redo.title = Rétablir (Ctrl-Y) -pad.toolbar.clearAuthorship.title = Effacer les couleurs identifiant les auteurs -pad.toolbar.import_export.title = Importer/Exporter de/vers un format de fichier différent -pad.toolbar.timeslider.title = Navigateur d'historique -pad.toolbar.savedRevision.title = Versions enregistrées -pad.toolbar.settings.title = Paramètres -pad.toolbar.embed.title = Intégrer ce Pad -pad.toolbar.showusers.title = Afficher les utilisateurs du Pad -pad.colorpicker.save = Sauver -pad.colorpicker.cancel = Annuler -pad.loading = Chargement... -pad.settings.padSettings = Paramètres du Pad -pad.settings.myView = Ma vue -pad.settings.stickychat = Messagerie toujours affichée -pad.settings.colorcheck = Couleurs d'identification -pad.settings.linenocheck = Numéros des lignes -pad.settings.fontType = Type de police: -pad.settings.fontType.normal = Normal -pad.settings.fontType.monospaced = Monospace -pad.settings.globalView = Vue d'ensemble -pad.settings.language = Langue: -pad.importExport.import_export = Importer/Exporter -pad.importExport.import = Charger un texte ou un document -pad.importExport.successful = Traitement effectué! -; Fuzzy -pad.importExport.export = Exporter ce Pad vers -pad.importExport.exporthtml = HTML -pad.importExport.exportplain = Texte brut -pad.importExport.exportword = Microsoft Word -pad.importExport.exportpdf = PDf -pad.importExport.exportopen = ODF (Open Document Format) -pad.importExport.exportdokuwiki = DokuWiki -pad.modals.connected = Connecté. -pad.modals.reconnecting = Reconnexion vers votre Pad... -pad.modals.forcereconnect = Forcer la reconnexion. -pad.modals.uderdup = Ouvrir dans une nouvelle fenêtre -pad.modals.userdup.explanation = Ce Pad semble avoir été ouvert dans plusieurs fenêtres de votre fureteur sur cet ordinateur. -pad.modals.userdup.advice = Se reconnecter en utilisant cette fenêtre. -pad.modals.unauth = Not authorized Non authorisé -pad.modals.unauth.explanation = Vos permissions ont été changées lors de la visualisation de cette page. Essayer de vous reconnecter. -pad.modals.looping = Disconnected. Déconnecté. -pad.modals.looping.explanation = Nous éprouvons un problème de communication au serveur de synchronisation. -pad.modals.looping.cause = Il est possible que leur connection soit protégée par un pare-feu incompatible ou un serveur proxy incompatible. -pad.modals.initsocketfail = Le serveur est introuvable. -pad.modals.initsocketfail.explanation = Impossible de se connecter au serveur de synchronisation. -pad.modals.initsocketfail.cause = La cause de ce problème peut être liée à votre fureteur web. -pad.modals.slowcommit = Disconnected. Déconnecté -pad.modals.slowcommit.explanation = Le serveur ne répond pas. -pad.modals.slowcommit.cause = La cause de ce problème peut être liée à une erreur de connectivité du réseau. -pad.modals.deleted = Supprimé. -pad.modals.deleted.explanation = Ce Pad a été supprimé. -pad.modals.disconnected = Vous avez été déconnecté. -pad.modals.disconnected.explanation = La connexion au serveur a échoué. -pad.modals.disconnected.cause = Ce serveur est possiblement hors-ligne. Veuillez nous joindre si le problème persiste. -pad.share = Partager ce Pad -pad.share.readonly = Lecture seule -pad.share.link = Lien -pad.share.emebdcode = Lien à intégrer -pad.chat = Messagerie -pad.chat.title = Ouvrir la messagerie liée au Pad. -timeslider.pageTitle = {{appTitle}} Curseur temporel -timeslider.toolbar.returnbutton = Retour à ce Pad. -timeslider.toolbar.authors = Auteurs: -timeslider.toolbar.authorsList = Aucun auteurs -timeslider.exportCurrent = Exporter version actuelle vers: diff --git a/src/locales/fr.json b/src/locales/fr.json new file mode 100644 index 00000000..7ccb3e43 --- /dev/null +++ b/src/locales/fr.json @@ -0,0 +1 @@ +{"index.newPad":"Nouveau Pad","index.createOpenPad":"ou créer/ouvrir un Pad intitulé :","pad.toolbar.bold.title":"Gras (Ctrl-B)","pad.toolbar.italic.title":"Italique (Ctrl-I)","pad.toolbar.underline.title":"Souligner (Ctrl-U)","pad.toolbar.strikethrough.title":"Barrer","pad.toolbar.ol.title":"Liste ordonnée","pad.toolbar.ul.title":"Liste non ordonnée","pad.toolbar.indent.title":"Indenter","pad.toolbar.unindent.title":"Désindenter","pad.toolbar.undo.title":"Annuler (Ctrl-Z)","pad.toolbar.redo.title":"Rétablir (Ctrl-Y)","pad.toolbar.clearAuthorship.title":"Effacer les couleurs identifiant les auteurs","pad.toolbar.import_export.title":"Importer/Exporter de/vers un format de fichier différent","pad.toolbar.timeslider.title":"Historique dynamique","pad.toolbar.savedRevision.title":"Versions enregistrées","pad.toolbar.settings.title":"Paramètres","pad.toolbar.embed.title":"Intégrer ce Pad","pad.toolbar.showusers.title":"Afficher les utilisateurs du Pad","pad.colorpicker.save":"Enregistrer","pad.colorpicker.cancel":"Annuler","pad.loading":"Chargement…","pad.passwordRequired":"Vous avez besoin d'un mot de passe pour accéder à ce Pad","pad.permissionDenied":"Il ne vous est pas permis d’accéder à ce Pad","pad.wrongPassword":"Mot de passe incorrect","pad.settings.padSettings":"Paramètres du Pad","pad.settings.myView":"Ma vue","pad.settings.stickychat":"Toujours afficher le chat","pad.settings.colorcheck":"Couleurs d’identification","pad.settings.linenocheck":"Numéros de lignes","pad.settings.fontType":"Type de police :","pad.settings.fontType.normal":"Normal","pad.settings.fontType.monospaced":"Monospace","pad.settings.globalView":"Vue d’ensemble","pad.settings.language":"Langue :","pad.importExport.import_export":"Importer/Exporter","pad.importExport.import":"Charger un texte ou un document","pad.importExport.importSuccessful":"Réussi!","pad.importExport.export":"Exporter le Pad actuel comme :","pad.importExport.exporthtml":"HTML","pad.importExport.exportplain":"Texte brut","pad.importExport.exportword":"Microsoft Word","pad.importExport.exportpdf":"PDF","pad.importExport.exportopen":"ODF (Open Document Format)","pad.importExport.exportdokuwiki":"DokuWiki","pad.importExport.abiword.innerHTML":"Vous ne pouvez importer que des formats texte brut ou html. Pour des fonctionnalités d'importation plus évoluées, veuillez installer abiword.","pad.modals.connected":"Connecté.","pad.modals.reconnecting":"Reconnexion vers votre Pad...","pad.modals.forcereconnect":"Forcer la reconnexion.","pad.modals.uderdup":"Ouvert dans une autre fenêtre","pad.modals.userdup.explanation":"Il semble que ce Pad soit ouvert dans plusieurs fenêtres de votre navigateur sur cet ordinateur.","pad.modals.userdup.advice":"Se reconnecter en utilisant cette fenêtre.","pad.modals.unauth":"Non autorisé","pad.modals.unauth.explanation":"Vos permissions ont été changées lors de l'affichage de cette page. Essayez de vous reconnecter.","pad.modals.looping":"Déconnecté.","pad.modals.looping.explanation":"Nous éprouvons un problème de communication au serveur de synchronisation.","pad.modals.looping.cause":"Il est possible que votre connexion soit protégée par un pare-feu incompatible ou un serveur proxy 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ème peut venir de votre navigateur web ou de votre connexion Internet.","pad.modals.slowcommit":"Déconnecté.","pad.modals.slowcommit.explanation":"Le serveur ne répond pas.","pad.modals.slowcommit.cause":"Ce problème peut venir d'une mauvaise connectivité au réseau.","pad.modals.deleted":"Supprimé.","pad.modals.deleted.explanation":"Ce Pad a été supprimé.","pad.modals.disconnected":"Vous avez été déconnecté.","pad.modals.disconnected.explanation":"La connexion au serveur a échoué.","pad.modals.disconnected.cause":"Il se peut que le serveur soit indisponible. Veuillez nous en informer si le problème persiste.","pad.share":"Partager ce Pad","pad.share.readonly":"Lecture seule","pad.share.link":"Lien","pad.share.emebdcode":"Lien à intégrer","pad.chat":"Chat","pad.chat.title":"Ouvrir le chat associé à ce pad.","timeslider.pageTitle":"Historique dynamique de {{appTitle}}","timeslider.toolbar.returnbutton":"Retour à ce Pad.","timeslider.toolbar.authors":"Auteurs :","timeslider.toolbar.authorsList":"Aucun auteur","timeslider.exportCurrent":"Exporter la version actuelle en :","timeslider.version":"Version {{version}}","timeslider.saved":"Enregistré le {{jour}} {{mois}} {{année}}","timeslider.dateformat":"{{j}}/{{mois}}/{{année}} {{h}}:{{minutes}}:{{secondes}}","timeslider.month.january":"Janvier","timeslider.month.february":"Février","timeslider.month.march":"Mars","timeslider.month.april":"Avril","timeslider.month.may":"Mai","timeslider.month.june":"Juin","timeslider.month.july":"Juillet","timeslider.month.august":"Août","timeslider.month.september":"Septembre","timeslider.month.october":"Octobre","timeslider.month.november":"Novembre","timeslider.month.december":"Décembre","pad.savedrevs.marked":"Cette révision est maintenant marquée comme révision enregistrée","pad.userlist.entername":"Entrez votre nom","pad.userlist.unnamed":"sans nom","pad.userlist.guest":"Invité","pad.userlist.deny":"Refuser","pad.userlist.approve":"Approuver","pad.editbar.clearcolors":"Effacer les couleurs de paternité dans tout le document?","pad.impexp.importbutton":"Importer maintenant","pad.impexp.importing":"Import en cours...","pad.impexp.confirmimport":"Importer un fichier écrasera le texte actuel du bloc. Êtes-vous sûr 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éléchargement a échoué, veuillez réessayer","pad.impexp.importfailed":"Échec de l'importation","pad.impexp.copypaste":"Veuillez copier/coller","pad.impexp.exportdisabled":"Exporter au format {{type}} est désactivé. Veuillez contacter votre administrateur système pour plus de détails."} \ No newline at end of file diff --git a/src/locales/gl.json b/src/locales/gl.json new file mode 100644 index 00000000..6a452d3f --- /dev/null +++ b/src/locales/gl.json @@ -0,0 +1 @@ +{"index.newPad":"Novo documento","index.createOpenPad":"ou cree/abra un documento co nome:","pad.toolbar.bold.title":"Negra (Ctrl-B)","pad.toolbar.italic.title":"Cursiva (Ctrl-I)","pad.toolbar.underline.title":"Subliñar (Ctrl-U)","pad.toolbar.strikethrough.title":"Riscar","pad.toolbar.ol.title":"Lista ordenada","pad.toolbar.ul.title":"Lista sen ordenar","pad.toolbar.indent.title":"Sangría","pad.toolbar.unindent.title":"Sen sangría","pad.toolbar.undo.title":"Desfacer (Ctrl-Z)","pad.toolbar.redo.title":"Refacer (Ctrl-Y)","pad.toolbar.clearAuthorship.title":"Limpar as cores de identificación dos autores","pad.toolbar.import_export.title":"Importar/Exportar desde/a diferentes formatos de ficheiro","pad.toolbar.timeslider.title":"Liña do tempo","pad.toolbar.savedRevision.title":"Revisións gardadas","pad.toolbar.settings.title":"Configuracións","pad.toolbar.embed.title":"Incorporar este documento","pad.toolbar.showusers.title":"Mostrar os usuarios deste documento","pad.colorpicker.save":"Gardar","pad.colorpicker.cancel":"Cancelar","pad.loading":"Cargando...","pad.passwordRequired":"Cómpre un contrasinal para acceder a este documento","pad.permissionDenied":"Non ten permiso para acceder a este documento","pad.wrongPassword":"O contrasinal era incorrecto","pad.settings.padSettings":"Configuracións do documento","pad.settings.myView":"A miña vista","pad.settings.stickychat":"Chat sempre visible","pad.settings.colorcheck":"Cores de identificación","pad.settings.linenocheck":"Números de liña","pad.settings.fontType":"Tipo de letra:","pad.settings.fontType.normal":"Normal","pad.settings.fontType.monospaced":"Monoespazada","pad.settings.globalView":"Vista global","pad.settings.language":"Lingua:","pad.importExport.import_export":"Importar/Exportar","pad.importExport.import":"Cargar un ficheiro de texto ou documento","pad.importExport.importSuccessful":"Correcto!","pad.importExport.export":"Exportar o documento actual en formato:","pad.importExport.exporthtml":"HTML","pad.importExport.exportplain":"Texto simple","pad.importExport.exportword":"Microsoft Word","pad.importExport.exportpdf":"PDF","pad.importExport.exportopen":"ODF (Open Document Format)","pad.importExport.exportdokuwiki":"DokuWiki","pad.importExport.abiword.innerHTML":"Só pode importar texto simple ou formatos HTML. Para obter máis información sobre as características de importación avanzadas instale abiword.","pad.modals.connected":"Conectado.","pad.modals.reconnecting":"Reconectando co seu documento...","pad.modals.forcereconnect":"Forzar a reconexión","pad.modals.uderdup":"Aberto noutra ventá","pad.modals.userdup.explanation":"Semella que este documento está aberto en varias ventás do navegador neste ordenador.","pad.modals.userdup.advice":"Reconectar para usar esta ventá.","pad.modals.unauth":"Non autorizado","pad.modals.unauth.explanation":"Os seus permisos cambiaron mentres estaba nesta páxina. Intente a reconexión.","pad.modals.looping":"Desconectado.","pad.modals.looping.explanation":"Hai un problema de comunicación co servidor de sincronización.","pad.modals.looping.cause":"Seica a súa conexión pasa a través dun firewall ou proxy incompatible.","pad.modals.initsocketfail":"Non se pode alcanzar o servidor.","pad.modals.initsocketfail.explanation":"Non se pode conectar co servidor de sincronización.","pad.modals.initsocketfail.cause":"Isto acontece probablemente debido a un problema co navegador ou coa conexión á internet.","pad.modals.slowcommit":"Desconectado.","pad.modals.slowcommit.explanation":"O servidor non responde.","pad.modals.slowcommit.cause":"Isto pode deberse a un problema de conexión á rede.","pad.modals.deleted":"Borrado.","pad.modals.deleted.explanation":"Este documento foi eliminado.","pad.modals.disconnected":"Foi desconectado.","pad.modals.disconnected.explanation":"Perdeuse a conexión co servidor","pad.modals.disconnected.cause":"O servidor non está dispoñible. Póñase en contacto con nós se o problema continúa.","pad.share":"Compartir este documento","pad.share.readonly":"Lectura só","pad.share.link":"Ligazón","pad.share.emebdcode":"Incorporar o URL","pad.chat":"Chat","pad.chat.title":"Abrir o chat deste documento.","timeslider.pageTitle":"Liña do tempo de {{appTitle}}","timeslider.toolbar.returnbutton":"Volver ao documento","timeslider.toolbar.authors":"Autores:","timeslider.toolbar.authorsList":"Ningún autor","timeslider.exportCurrent":"Exportar a versión actual en formato:","timeslider.version":"Versión {{version}}","timeslider.saved":"Gardado o {{day}} de {{month}} de {{year}}","timeslider.dateformat":"{{day}}/{{month}}/{{year}} {{hours}}:{{minutes}}:{{seconds}}","timeslider.month.january":"xaneiro","timeslider.month.february":"febreiro","timeslider.month.march":"marzo","timeslider.month.april":"abril","timeslider.month.may":"maio","timeslider.month.june":"xuño","timeslider.month.july":"xullo","timeslider.month.august":"agosto","timeslider.month.september":"setembro","timeslider.month.october":"outubro","timeslider.month.november":"novembro","timeslider.month.december":"decembro","pad.savedrevs.marked":"Esta revisión está agora marcada como revisión gardada","pad.userlist.entername":"Insira o seu nome","pad.userlist.unnamed":"anónimo","pad.userlist.guest":"Convidado","pad.userlist.deny":"Rexeitar","pad.userlist.approve":"Aprobar","pad.editbar.clearcolors":"Quere limpar as cores de identificación dos autores en todo o documento?","pad.impexp.importbutton":"Importar agora","pad.impexp.importing":"Importando...","pad.impexp.confirmimport":"A importación dun ficheiro ha sobrescribir o texto actual do documento. Está seguro de querer continuar?","pad.impexp.convertFailed":"Non somos capaces de importar o ficheiro. Utilice un formato de documento diferente ou copie e pegue manualmente","pad.impexp.uploadFailed":"Houbo un erro ao cargar o ficheiro; inténteo de novo","pad.impexp.importfailed":"Fallou a importación","pad.impexp.copypaste":"Copie e pegue","pad.impexp.exportdisabled":"A exportación en formato {{type}} está desactivada. Póñase en contacto co administrador do sistema se quere máis detalles."} \ No newline at end of file diff --git a/src/locales/he.json b/src/locales/he.json new file mode 100644 index 00000000..439bc63e --- /dev/null +++ b/src/locales/he.json @@ -0,0 +1 @@ +{"index.newPad":"פנקס חדש","index.createOpenPad":"או יצירה או פתיחה של פנקס עם בשם:","pad.toolbar.bold.title":"בולט (Ctrl-B)","pad.toolbar.italic.title":"נטוי (Ctrl-I)","pad.toolbar.underline.title":"קו תחתי (Ctrl-U)","pad.toolbar.strikethrough.title":"קו מוחק","pad.toolbar.ol.title":"רשימה ממוספרת","pad.toolbar.ul.title":"רשימה","pad.toolbar.indent.title":"הזחה","pad.toolbar.unindent.title":"צמצום הזחה","pad.toolbar.undo.title":"ביטול (Ctrl-Z)","pad.toolbar.redo.title":"ביצוע מחדש","pad.toolbar.clearAuthorship.title":"ניקוי צבעים","pad.toolbar.import_export.title":"ייבוא/ייצא בתסדירי קבצים שונים","pad.toolbar.timeslider.title":"גולל זמן","pad.toolbar.savedRevision.title":"גרסאות שמורות","pad.toolbar.settings.title":"הגדרות","pad.toolbar.embed.title":"הטמעת הפנקס הזה","pad.toolbar.showusers.title":"הצגת המשתמשים בפנקס הזה","pad.colorpicker.save":"שמירה","pad.colorpicker.cancel":"ביטול","pad.loading":"טעינה...","pad.passwordRequired":"דרושה ססמה כדי לגשת לפנקס הזה","pad.permissionDenied":"אין לך הרשאה לגשת לפנקס הזה","pad.wrongPassword":"ססמתך הייתה שגויה","pad.settings.padSettings":"הגדרות פנקס","pad.settings.myView":"התצוגה שלי","pad.settings.stickychat":"השיחה תמיד על המסך","pad.settings.colorcheck":"צביעה לפי מחבר","pad.settings.linenocheck":"מספרי שורות","pad.settings.fontType":"סוג גופן:","pad.settings.fontType.normal":"רגיל","pad.settings.fontType.monospaced":"ברוחב קבוע","pad.settings.globalView":"תצוגה לכל המשתמשים","pad.settings.language":"שפה:","pad.importExport.import_export":"ייבוא/ייצוא","pad.importExport.import":"העלאת כל קובץ טקסט או מסמך","pad.importExport.export":"ייצוא הפנקס הנוכחי בתור:","pad.importExport.exporthtml":"HTML","pad.importExport.exportplain":"טקסט רגיל","pad.importExport.exportword":"מיקרוסופט וורד","pad.importExport.exportpdf":"PDF","pad.importExport.exportopen":"ODF (Open Document Format)","pad.importExport.exportdokuwiki":"DokuWiki","pad.importExport.abiword.innerHTML":"באפשרותך לייבא מטקסט פשוט או מ־HTML. לאפשרויות ייבוא מתקדמות יותר יש להתקין את abiword.","pad.modals.connected":"מחובכר.","pad.modals.reconnecting":"מתבצע חיבור מחדש...","pad.modals.forcereconnect":"חיבור כפוי מחדש","pad.modals.uderdup":"פתוח בחלון אחר","pad.modals.userdup.explanation":"נראה שהפנקס הזה פתוח ביותר מחלון דפדפן אחד במחשב הזה.","pad.modals.userdup.advice":"להתחבר מחדש באמצעות החלון הזה.","pad.modals.unauth":"אין הרשאה","pad.modals.unauth.explanation":"ההרשאות שלך השתנו בזמן שניסית להתחבר. נא לנסות להתחבר מחדש.","pad.modals.looping":"לא מחובר.","pad.modals.looping.explanation":"יש בעיות חיבור עם השרת המתאם.","pad.modals.looping.cause":"ייתכן שהתחברת דרך חומת־אש או שרת מתווך שאינם מתאימים.","pad.modals.initsocketfail":"אין תקשורות לשרת.","pad.modals.initsocketfail.explanation":"התחברות לשרת המתאם לא הצליחה.","pad.modals.initsocketfail.cause":"אולי זה בגלל הדפדפן שלך או חיבור האינטרנט שלך.","pad.modals.slowcommit":"מנותק.","pad.modals.slowcommit.explanation":"השרת אינו מגיב.","pad.modals.slowcommit.cause":"אולי זה בגלל בעיות עם תקשורת לרשת.","pad.modals.deleted":"נמחק.","pad.modals.deleted.explanation":"הפנקס הזה הוסר.","pad.modals.disconnected":"נותקת.","pad.modals.disconnected.explanation":"התקשורת לשרת אבדה","pad.modals.disconnected.cause":"ייתכן שהשרת אינו זמין. נא להוסיע לנו אם זה ממשיך לקרות.","pad.share":"שיתוף הפנקס הזה","pad.share.readonly":"קישור","pad.share.link":"קישור","pad.share.emebdcode":"הטמעת קישור","pad.chat":"שיחה","pad.chat.title":"פתיחת השיחה של הפנקס הזה.","timeslider.pageTitle":"גולל זמן של {{appTitle}}","timeslider.toolbar.returnbutton":"חזרה אל הפנקס","timeslider.toolbar.authors":"כותבים:","timeslider.toolbar.authorsList":"אין כותבים","timeslider.exportCurrent":"ייצוא הכרסה הנוכחית בתור:","timeslider.version":"גרסה {{version}}","timeslider.saved":"נשמרה ב־{{day}} ב{{month}} {{year}}","timeslider.dateformat":"{{year}}-{{month}}-{{day}} {{hours}}:{{minutes}}:{{seconds}}","timeslider.month.january":"ינואר","timeslider.month.february":"פברואר","timeslider.month.march":"מרץ","timeslider.month.april":"אפריל","timeslider.month.may":"מאי","timeslider.month.june":"יוני","timeslider.month.july":"יולי","timeslider.month.august":"אוגוסט","timeslider.month.september":"ספטמבר","timeslider.month.october":"אוקטובר","timeslider.month.november":"נובמבר","timeslider.month.december":"דצמבר"} \ No newline at end of file diff --git a/src/locales/hu.json b/src/locales/hu.json new file mode 100644 index 00000000..ba0313a4 --- /dev/null +++ b/src/locales/hu.json @@ -0,0 +1 @@ +{"index.newPad":"Új notesz","index.createOpenPad":"vagy notesz létrehozása ezen a néven:","pad.toolbar.bold.title":"Félkövér (Ctrl-B)","pad.toolbar.italic.title":"Dőlt (Ctrl-I)","pad.toolbar.underline.title":"Aláhúzás (Ctrl-U)","pad.toolbar.strikethrough.title":"Áthúzás","pad.toolbar.ol.title":"Számozott lista","pad.toolbar.ul.title":"Számozatlan lista","pad.toolbar.indent.title":"Behúzás növelése","pad.toolbar.unindent.title":"Behúzás csökkentése","pad.toolbar.undo.title":"Vissza (Ctrl-Z)","pad.toolbar.redo.title":"Újra (Ctrl-Y)","pad.toolbar.clearAuthorship.title":"Szerzők színezésének kikapcsolása","pad.toolbar.import_export.title":"Importálás/exportálás különböző fájlformátumokból/ba","pad.toolbar.timeslider.title":"Időcsúszka","pad.toolbar.savedRevision.title":"Mentett állapotok","pad.toolbar.settings.title":"Beállítások","pad.toolbar.embed.title":"Notesz beágyazása","pad.toolbar.showusers.title":"Notesz felhasználóinak megmutatása","pad.colorpicker.save":"Mentés","pad.colorpicker.cancel":"Mégsem","pad.loading":"Betöltés…","pad.settings.padSettings":"Notesz beállításai","pad.settings.myView":"Az én nézetem","pad.settings.stickychat":"Mindig mutasd a csevegés-dobozt","pad.settings.colorcheck":"Szerzők színei","pad.settings.linenocheck":"Sorok számozása","pad.settings.fontType":"Betűtípus:","pad.settings.fontType.normal":"Szokásos","pad.settings.fontType.monospaced":"Írógépes","pad.settings.globalView":"Globális nézet","pad.settings.language":"Nyelv:","pad.importExport.import_export":"Import/export","pad.importExport.import":"Tetszőleges szövegfájl vagy dokumentum feltöltése","pad.importExport.export":"Jelenlegi notesz exportálása így:","pad.importExport.exporthtml":"HTML","pad.importExport.exportplain":"Sima szöveg","pad.importExport.exportword":"Microsoft Word","pad.importExport.exportpdf":"PDF","pad.importExport.exportopen":"ODF (Open Document formátum)","pad.importExport.exportdokuwiki":"DokuWiki","pad.modals.connected":"Kapcsolódva.","pad.modals.reconnecting":"Újrakapcsolódás a noteszhez...","pad.modals.forcereconnect":"Újrakapcsolódás kényszerítése","pad.modals.uderdup":"Megnyitva másik ablakban","pad.modals.userdup.explanation":"Úgy tűnik, ez a notesz több különböző böngészőablakban is meg van nyitva a számítógépeden.","pad.modals.userdup.advice":"Kapcsolódj újra, ha ezt az ablakot akarod használni.","pad.modals.unauth":"Nincs rá jogosultságod","pad.modals.unauth.explanation":"A jogosultságaid változtak, miközben nézted ezt az oldalt. Próbálj újrakapcsolódni.","pad.modals.looping":"Kapcsolat bontva.","pad.modals.looping.explanation":"Nem sikerült a kommunikáció a szinkronizációs szerverrel.","pad.modals.looping.cause":"Talán egy túl szigorú tűzfalon vagy proxyn keresztül kapcsolódtál az internetre.","pad.modals.initsocketfail":"A szerver nem érhető el.","pad.modals.initsocketfail.explanation":"Nem sikerült kapcsolódni a szinkronizációs szerverhez.","pad.modals.initsocketfail.cause":"Valószínűleg a böngésződdel vagy az internetkapcsolatoddal van probléma.","pad.modals.slowcommit":"Megszakadt a kapcsolat.","pad.modals.slowcommit.explanation":"A szerver nem válaszol.","pad.modals.slowcommit.cause":"Valószínűleg az internetkapcsolattal van probléma.","pad.modals.deleted":"Törölve.","pad.modals.deleted.explanation":"Ez a notesz el lett távolítva.","pad.modals.disconnected":"Kapcsolat bontva.","pad.modals.disconnected.explanation":"A szerverrel való kapcsolat megszűnt.","pad.modals.disconnected.cause":"Lehet, hogy a szerver nem elérhető. Kérlek, értesíts minket, ha a probléma tartósan fennáll.","pad.share":"Notesz megosztása","pad.share.readonly":"Csak olvasható","pad.share.link":"Hivatkozás","pad.share.emebdcode":"URL beágyazása","pad.chat":"Csevegés","pad.chat.title":"A noteszhez tartozó csevegés megnyitása.","timeslider.pageTitle":"{{appTitle}} időcsúszka","timeslider.toolbar.returnbutton":"Vissza a noteszhez","timeslider.toolbar.authors":"Szerzők:","timeslider.toolbar.authorsList":"Nincsenek szerzők","timeslider.exportCurrent":"Jelenlegi változat exportálása így:","timeslider.month.january":"január","timeslider.month.february":"február","timeslider.month.march":"március","timeslider.month.april":"április","timeslider.month.may":"május","timeslider.month.june":"június","timeslider.month.july":"július","timeslider.month.august":"augusztus","timeslider.month.september":"szeptember","timeslider.month.october":"október","timeslider.month.november":"november","timeslider.month.december":"december"} \ No newline at end of file diff --git a/src/locales/ia.json b/src/locales/ia.json new file mode 100644 index 00000000..08a1c2a0 --- /dev/null +++ b/src/locales/ia.json @@ -0,0 +1 @@ +{"index.newPad":"Nove pad","index.createOpenPad":"o crear/aperir un pad con le nomine:","pad.toolbar.bold.title":"Grasse (Ctrl-B)","pad.toolbar.italic.title":"Italic (Ctrl-I)","pad.toolbar.underline.title":"Sublinear (Ctrl-U)","pad.toolbar.strikethrough.title":"Cancellar","pad.toolbar.ol.title":"Lista ordinate","pad.toolbar.ul.title":"Lista non ordinate","pad.toolbar.indent.title":"Indentar","pad.toolbar.unindent.title":"Disindentar","pad.toolbar.undo.title":"Disfacer (Ctrl-Z)","pad.toolbar.redo.title":"Refacer (Ctrl-Y)","pad.toolbar.clearAuthorship.title":"Rader colores de autor","pad.toolbar.import_export.title":"Importar/exportar in differente formatos de file","pad.toolbar.timeslider.title":"Glissa-tempore","pad.toolbar.savedRevision.title":"Versiones salveguardate","pad.toolbar.settings.title":"Configuration","pad.toolbar.embed.title":"Incorporar iste pad","pad.toolbar.showusers.title":"Monstrar le usatores de iste pad","pad.colorpicker.save":"Salveguardar","pad.colorpicker.cancel":"Cancellar","pad.loading":"Cargamento…","pad.settings.padSettings":"Configuration del pad","pad.settings.myView":"Mi vista","pad.settings.stickychat":"Chat sempre visibile","pad.settings.colorcheck":"Colores de autor","pad.settings.linenocheck":"Numeros de linea","pad.settings.fontType":"Typo de litteras:","pad.settings.fontType.normal":"Normal","pad.settings.fontType.monospaced":"Monospatial","pad.settings.globalView":"Vista global","pad.settings.language":"Lingua:","pad.importExport.import_export":"Importar/Exportar","pad.importExport.import":"Incargar qualcunque file de texto o documento","pad.importExport.export":"Exportar le pad actual como:","pad.importExport.exporthtml":"HTML","pad.importExport.exportplain":"Texto simple","pad.importExport.exportword":"Microsoft Word","pad.importExport.exportpdf":"PDF","pad.importExport.exportopen":"ODF (Open Document Format)","pad.importExport.exportdokuwiki":"DokuWiki","pad.modals.connected":"Connectite.","pad.modals.reconnecting":"Reconnecte a tu pad…","pad.modals.forcereconnect":"Fortiar reconnexion","pad.modals.uderdup":"Aperte in un altere fenestra","pad.modals.userdup.explanation":"Iste pad pare esser aperte in plus de un fenestra de navigator in iste computator.","pad.modals.userdup.advice":"Reconnecte pro usar iste fenestra.","pad.modals.unauth":"Non autorisate","pad.modals.unauth.explanation":"Tu permissiones ha cambiate durante que tu legeva iste pagina. Tenta reconnecter.","pad.modals.looping":"Disconnectite.","pad.modals.looping.explanation":"Il ha problemas de communication con le servitor de synchronisation.","pad.modals.looping.cause":"Il es possibile que tu connexion passa per un firewall o proxy incompatibile.","pad.modals.initsocketfail":"Le servitor es inattingibile.","pad.modals.initsocketfail.explanation":"Impossibile connecter al servitor de synchronisation.","pad.modals.initsocketfail.cause":"Isto es probabilemente causate per un problema con tu navigator o connexion a internet.","pad.modals.slowcommit":"Disconnectite.","pad.modals.slowcommit.explanation":"Le servitor non responde.","pad.modals.slowcommit.cause":"Isto pote esser causate per problemas con le connexion al rete.","pad.modals.deleted":"Delite.","pad.modals.deleted.explanation":"Iste pad ha essite removite.","pad.modals.disconnected":"Tu ha essite disconnectite.","pad.modals.disconnected.explanation":"Le connexion al servitor ha essite perdite.","pad.modals.disconnected.cause":"Le servitor pote esser indisponibile. Per favor notifica nos si isto continua a producer se.","pad.share":"Diffunder iste pad","pad.share.readonly":"Lectura solmente","pad.share.link":"Ligamine","pad.share.emebdcode":"Codice de incorporation","pad.chat":"Chat","pad.chat.title":"Aperir le chat pro iste pad.","timeslider.pageTitle":"Glissa-tempore pro {{appTitle}}","timeslider.toolbar.returnbutton":"Retornar al pad","timeslider.toolbar.authors":"Autores:","timeslider.toolbar.authorsList":"Nulle autor","timeslider.exportCurrent":"Exportar le version actual como:","timeslider.month.january":"januario","timeslider.month.february":"februario","timeslider.month.march":"martio","timeslider.month.april":"april","timeslider.month.may":"maio","timeslider.month.june":"junio","timeslider.month.july":"julio","timeslider.month.august":"augusto","timeslider.month.september":"septembre","timeslider.month.october":"octobre","timeslider.month.november":"novembre","timeslider.month.december":"decembre"} \ No newline at end of file diff --git a/src/locales/it.json b/src/locales/it.json new file mode 100644 index 00000000..52baecef --- /dev/null +++ b/src/locales/it.json @@ -0,0 +1 @@ +{"index.newPad":"Nuovo Pad","index.createOpenPad":"o creare o aprire un Pad con il nome:","pad.toolbar.bold.title":"Grassetto (Ctrl-B)","pad.toolbar.italic.title":"Corsivo (Ctrl-I)","pad.toolbar.underline.title":"Sottolinea (Ctrl-U)","pad.toolbar.strikethrough.title":"Barrato","pad.toolbar.ol.title":"Elenco ordinato","pad.toolbar.ul.title":"Elenco non ordinato","pad.toolbar.indent.title":"Rientro","pad.toolbar.unindent.title":"Riduci rientro","pad.toolbar.undo.title":"Annulla (Ctrl-Z)","pad.toolbar.redo.title":"Ripeti (Ctrl-Y)","pad.toolbar.clearAuthorship.title":"Elimina i colori che indicano gli autori","pad.toolbar.import_export.title":"Importa/esporta da/a diversi formati di file","pad.toolbar.timeslider.title":"Presentazione cronologia","pad.toolbar.savedRevision.title":"Revisioni salvate","pad.toolbar.settings.title":"Impostazioni","pad.toolbar.embed.title":"Incorpora questo pad","pad.toolbar.showusers.title":"Visualizza gli utenti su questo pad","pad.colorpicker.save":"Salva","pad.colorpicker.cancel":"Annulla","pad.loading":"Caricamento in corso…","pad.passwordRequired":"Devi fornire una password per accedere a questo pad","pad.permissionDenied":"Non si dispone dei permessi necessari per accedere a questo pad.","pad.wrongPassword":"La password è sbagliata","pad.settings.padSettings":"Impostazioni del Pad","pad.settings.myView":"Mia visualizzazione","pad.settings.stickychat":"Chat sempre sullo schermo","pad.settings.colorcheck":"Colori che indicano gli autori","pad.settings.linenocheck":"Numeri di riga","pad.settings.fontType":"Tipo di carattere:","pad.settings.fontType.normal":"Normale","pad.settings.fontType.monospaced":"Monospace","pad.settings.globalView":"Visualizzazione globale","pad.settings.language":"Lingua:","pad.importExport.import_export":"Importazione/esportazione","pad.importExport.import":"Carica qualsiasi file di testo o documento","pad.importExport.importSuccessful":"Riuscito!","pad.importExport.export":"Esportare il pad corrente come:","pad.importExport.exporthtml":"HTML","pad.importExport.exportplain":"Solo testo","pad.importExport.exportword":"Microsoft Word","pad.importExport.exportpdf":"PDF","pad.importExport.exportopen":"ODF (Open Document Format)","pad.importExport.exportdokuwiki":"DokuWiki","pad.importExport.abiword.innerHTML":"È possibile importare solo i formati di testo semplice o HTML. Per metodi più avanzati di importazione installa Abiword.","pad.modals.connected":"Connesso.","pad.modals.reconnecting":"Riconnessione al tuo pad in corso...","pad.modals.forcereconnect":"Forza la riconnessione","pad.modals.uderdup":"Aperto in un'altra finestra","pad.modals.userdup.explanation":"Questo pad sembra essere aperto in più di una finestra del browser su questo computer.","pad.modals.userdup.advice":"Riconnettiti per utilizzare invece questa finestra.","pad.modals.unauth":"Non autorizzato","pad.modals.unauth.explanation":"Le tue autorizzazioni sono state modificate durante la visualizzazione di questa pagina. Prova a riconnetterti.","pad.modals.looping":"Disconnesso.","pad.modals.looping.explanation":"Ci sono problemi di comunicazione con il server di sincronizzazione.","pad.modals.looping.cause":"Forse sei connesso attraverso un firewall o un server proxy non compatibili.","pad.modals.initsocketfail":"Il server non è raggiungibile.","pad.modals.initsocketfail.explanation":"Impossibile connettersi al server di sincronizzazione.","pad.modals.initsocketfail.cause":"Questo è probabilmente dovuto a un problema con il tuo browser o con la tua connessione a internet.","pad.modals.slowcommit":"Disconnesso.","pad.modals.slowcommit.explanation":"Il server non risponde.","pad.modals.slowcommit.cause":"Questo potrebbe essere dovuto a problemi con la connettività di rete.","pad.modals.deleted":"Cancellato.","pad.modals.deleted.explanation":"Questo pad è stato rimosso.","pad.modals.disconnected":"Sei stato disconnesso.","pad.modals.disconnected.explanation":"La connessione al server è stata persa","pad.modals.disconnected.cause":"Il server potrebbe essere non disponibile. Per favore, fateci sapere se il problema persiste.","pad.share":"Condividi questo pad","pad.share.readonly":"Sola lettura","pad.share.link":"Link","pad.share.emebdcode":"Incorpora URL","pad.chat":"Chat","pad.chat.title":"Apri la chat per questo pad.","timeslider.pageTitle":"Cronologia {{appTitle}}","timeslider.toolbar.returnbutton":"Ritorna al pad","timeslider.toolbar.authors":"Autori:","timeslider.toolbar.authorsList":"Nessun autore","timeslider.exportCurrent":"Esporta la versione corrente come:","timeslider.version":"Versione {{version}}","timeslider.saved":"Salvato {{day}} {{month}} {{year}}","timeslider.dateformat":"{{day}}/{{month}}/{{year}} {{hours}}:{{minutes}}:{{seconds}}","timeslider.month.january":"gennaio","timeslider.month.february":"febbraio","timeslider.month.march":"marzo","timeslider.month.april":"aprile","timeslider.month.may":"maggio","timeslider.month.june":"giugno","timeslider.month.july":"luglio","timeslider.month.august":"agosto","timeslider.month.september":"settembre","timeslider.month.october":"ottobre","timeslider.month.november":"novembre","timeslider.month.december":"dicembre","pad.savedrevs.marked":"Questa versione è ora contrassegnata come una versione salvata","pad.userlist.entername":"Inserisci il tuo nome","pad.userlist.unnamed":"senza nome","pad.userlist.guest":"Ospite","pad.userlist.deny":"Nega","pad.userlist.approve":"Approva","pad.impexp.importbutton":"Importa ora","pad.impexp.importing":"Sto importando...","pad.impexp.confirmimport":"L'importazione del file sovrascriverà il testo attuale del pad. Sei sicuro di voler procedere?","pad.impexp.uploadFailed":"Caricamento non riuscito, riprova","pad.impexp.importfailed":"Importazione fallita"} \ No newline at end of file diff --git a/src/locales/ja.json b/src/locales/ja.json new file mode 100644 index 00000000..75fa6240 --- /dev/null +++ b/src/locales/ja.json @@ -0,0 +1 @@ +{"index.newPad":"新規作成","index.createOpenPad":"または作成/編集するパッド名を入力:","pad.toolbar.bold.title":"太字 (Ctrl-B)","pad.toolbar.italic.title":"斜体 (Ctrl-I)","pad.toolbar.underline.title":"下線 (Ctrl-U)","pad.toolbar.strikethrough.title":"取り消し線","pad.toolbar.ol.title":"番号付きリスト","pad.toolbar.ul.title":"番号なしリスト","pad.toolbar.indent.title":"インデント","pad.toolbar.unindent.title":"インデント解除","pad.toolbar.undo.title":"元に戻す (Ctrl-Z)","pad.toolbar.redo.title":"やり直し (Ctrl-Y)","pad.toolbar.clearAuthorship.title":"作者の色分けを消去","pad.toolbar.import_export.title":"他の形式のファイルのインポート/エクスポート","pad.toolbar.timeslider.title":"タイムスライダー","pad.toolbar.savedRevision.title":"保存済みの版","pad.toolbar.settings.title":"設定","pad.toolbar.embed.title":"このパッドを埋め込む","pad.toolbar.showusers.title":"このパッドのユーザーを表示","pad.colorpicker.save":"保存","pad.colorpicker.cancel":"キャンセル","pad.loading":"読み込み中...","pad.passwordRequired":"このパッドにアクセスするにはパスワードが必要です","pad.permissionDenied":"あなたにはこのパッドへのアクセス許可がありません","pad.wrongPassword":"パスワードが間違っています","pad.settings.padSettings":"パッドの設定","pad.settings.myView":"個人設定","pad.settings.stickychat":"画面にチャットを常に表示","pad.settings.colorcheck":"作者の色分け","pad.settings.linenocheck":"行番号","pad.settings.fontType":"フォントの種類:","pad.settings.fontType.normal":"通常","pad.settings.fontType.monospaced":"固定幅","pad.settings.globalView":"グローバル設定","pad.settings.language":"言語:","pad.importExport.import_export":"インポート/エクスポート","pad.importExport.import":"あらゆるテキストファイルや文書をアップロードできます","pad.importExport.importSuccessful":"完了しました。","pad.importExport.export":"現在のパッドをエクスポートする形式:","pad.importExport.exporthtml":"HTML","pad.importExport.exportplain":"プレーンテキスト","pad.importExport.exportword":"Microsoft Word","pad.importExport.exportpdf":"PDF","pad.importExport.exportopen":"ODF (Open Document Format)","pad.importExport.exportdokuwiki":"DokuWiki","pad.importExport.abiword.innerHTML":"プレーンテキストまたは HTML ファイルからのみインポートできます。より高度なインポート機能を使用するには、abiword をインストールしてください。","pad.modals.connected":"接続されました。","pad.modals.reconnecting":"パッドに再接続中...","pad.modals.forcereconnect":"強制的に再接続","pad.modals.uderdup":"別のウィンドウで開かれています","pad.modals.userdup.explanation":"このコンピューターの複数のブラウザーウィンドウで、このパッドを開いているようです。","pad.modals.userdup.advice":"代わりにこのウィンドウを再接続します。","pad.modals.unauth":"権限がありません","pad.modals.unauth.explanation":"このページの閲覧中にあなたの権限が変更されました。再接続をお試しください。","pad.modals.looping":"切断されました。","pad.modals.looping.explanation":"同期サーバーとの通信に問題点があります。","pad.modals.looping.cause":"ご使用中のファイアウォールまたはプロキシとは互換性がない可能性があります。","pad.modals.initsocketfail":"サーバーに到達できません。","pad.modals.initsocketfail.explanation":"同期サーバーに接続できませんでした。","pad.modals.initsocketfail.cause":"これはご使用中のブラウザーやインターネット接続の問題が原因である可能性があります。","pad.modals.slowcommit":"切断されました。","pad.modals.slowcommit.explanation":"サーバーが応答しません。","pad.modals.slowcommit.cause":"これはネットワーク接続の問題が原因である可能性があります。","pad.modals.deleted":"削除されました。","pad.modals.deleted.explanation":"このパッドは削除されました。","pad.modals.disconnected":"切断されました。","pad.modals.disconnected.explanation":"サーバーとの接続が失われました","pad.modals.disconnected.cause":"サーバーに到達できない可能性があります。この問題が解決しない場合はお知らせください。","pad.share":"このパッドを共有","pad.share.readonly":"読み取り専用","pad.share.link":"リンク","pad.share.emebdcode":"埋め込み用 URL","pad.chat":"チャット","pad.chat.title":"このパッドのチャットを開きます。","timeslider.pageTitle":"{{appTitle}} タイムスライダー","timeslider.toolbar.returnbutton":"パッドに戻る","timeslider.toolbar.authors":"作者:","timeslider.toolbar.authorsList":"作者なし","timeslider.exportCurrent":"現在の版をエクスポートする形式:","timeslider.version":"バージョン {{version}}","timeslider.saved":"| {{year}}年{{month}}{{day}}日に保存","timeslider.dateformat":"{{year}}年{{month}}{{day}}日 {{hours}}:{{minutes}}:{{seconds}}","timeslider.month.january":"1月","timeslider.month.february":"2月","timeslider.month.march":"3月","timeslider.month.april":"4月","timeslider.month.may":"5月","timeslider.month.june":"6月","timeslider.month.july":"7月","timeslider.month.august":"8月","timeslider.month.september":"9月","timeslider.month.october":"10月","timeslider.month.november":"11月","timeslider.month.december":"12月","pad.savedrevs.marked":"この版を、保存済みの版としてマークしました。","pad.userlist.entername":"名前を入力","pad.userlist.unnamed":"名前なし","pad.userlist.guest":"ゲスト","pad.userlist.deny":"拒否","pad.userlist.approve":"承認","pad.editbar.clearcolors":"文書全体の作者の色分けを消去しますか?","pad.impexp.importbutton":"インポートする","pad.impexp.importing":"インポート中...","pad.impexp.confirmimport":"ファイルをインポートすると、パッドの現在のテキストが上書きされます。本当に続行しますか?","pad.impexp.convertFailed":"このファイルをインポートできませんでした。他の文書形式を使用するか、手作業でコピー & ペーストしてください","pad.impexp.uploadFailed":"アップロードに失敗しました。もう一度お試しください","pad.impexp.importfailed":"インポートに失敗しました","pad.impexp.copypaste":"コピー & ペーストしてください","pad.impexp.exportdisabled":"{{type}}形式でのエクスポートは無効になっています。詳細はシステム管理者にお問い合わせください。"} \ No newline at end of file diff --git a/src/locales/ko.json b/src/locales/ko.json new file mode 100644 index 00000000..53832644 --- /dev/null +++ b/src/locales/ko.json @@ -0,0 +1 @@ +{"index.newPad":"새 패드","index.createOpenPad":"또는 다음 이름으로 패드 만들기/열기:","pad.toolbar.bold.title":"굵게 (Ctrl-B)","pad.toolbar.italic.title":"기울임 (Ctrl-I)","pad.toolbar.underline.title":"밑줄 (Ctrl-U)","pad.toolbar.strikethrough.title":"취소선","pad.toolbar.ol.title":"순서 있는 목록","pad.toolbar.ul.title":"순서 없는 목록","pad.toolbar.indent.title":"들여쓰기","pad.toolbar.unindent.title":"내어쓰기","pad.toolbar.undo.title":"실행 취소 (Ctrl-Z)","pad.toolbar.redo.title":"다시 실행 (Ctrl-Y)","pad.toolbar.clearAuthorship.title":"저자의 색 지우기","pad.toolbar.import_export.title":"다른 파일 형식 가져오기/내보내기","pad.toolbar.timeslider.title":"시간슬라이더","pad.toolbar.savedRevision.title":"저장한 판","pad.toolbar.settings.title":"설정","pad.toolbar.embed.title":"이 패드 포함","pad.toolbar.showusers.title":"이 패드에 사용자 보기","pad.colorpicker.save":"저장","pad.colorpicker.cancel":"취소","pad.loading":"불러오는 중...","pad.passwordRequired":"이 패드에 접근하려면 비밀번호가 필요합니다","pad.permissionDenied":"이 패드에 접근할 권한이 없습니다","pad.wrongPassword":"비밀번호가 잘못되었습니다","pad.settings.padSettings":"패드 설정","pad.settings.myView":"내 보기","pad.settings.stickychat":"화면에 항상 대화 보기","pad.settings.colorcheck":"저자 색","pad.settings.linenocheck":"줄 번호","pad.settings.fontType":"글꼴 종류:","pad.settings.fontType.normal":"보통","pad.settings.fontType.monospaced":"고정 폭","pad.settings.globalView":"전역 보기","pad.settings.language":"언어:","pad.importExport.import_export":"가져오기/내보내기","pad.importExport.import":"텍스트 파일이나 문서 올리기","pad.importExport.importSuccessful":"성공!","pad.importExport.export":"다음으로 현재 패드 내보내기:","pad.importExport.exporthtml":"HTML","pad.importExport.exportplain":"일반 텍스트","pad.importExport.exportword":"Microsoft Word","pad.importExport.exportpdf":"PDF","pad.importExport.exportopen":"ODF (Open Document Format)","pad.importExport.exportdokuwiki":"DokuWiki","pad.importExport.abiword.innerHTML":"일반 텍스트나 html 형식으로만 가져올 수 있습니다. 고급 가져오기 기능에 대해서는 abiword를 설치하세요.","pad.modals.connected":"연결했습니다.","pad.modals.reconnecting":"패드에 다시 연결 중..","pad.modals.forcereconnect":"강제로 다시 연결","pad.modals.uderdup":"다른 창에서 열리고 있음","pad.modals.userdup.explanation":"이 패드는 이 컴퓨터에 하나보다 많이 브라우저 창에서 열린 것 같습니다.","pad.modals.userdup.advice":"대신 이 창을 사용해 다시 연결합니다.","pad.modals.unauth":"권한이 없음","pad.modals.unauth.explanation":"이 문서를 보는 동안 권한이 바뀌었습니다. 다시 연결을 시도하세요.","pad.modals.looping":"연결이 끊어졌습니다.","pad.modals.looping.explanation":"동기 서버와의 통신 문제가 있습니다.","pad.modals.looping.cause":"아마 호환되지 않는 방화벽이나 프록시를 통해 연결되어 있습니다.","pad.modals.initsocketfail":"서버에 연결할 수 없습니다.","pad.modals.initsocketfail.explanation":"동기 서버에 연결할 수 없습니다.","pad.modals.initsocketfail.cause":"아마도 브라우저나 인터넷 연결에 문제가 있기 때문일 수 있습니다.","pad.modals.slowcommit":"연결이 끊어졌습니다.","pad.modals.slowcommit.explanation":"서버가 응답하지 않습니다.","pad.modals.slowcommit.cause":"네트워크 연결에 문제가 있기 때문일 수 있습니다.","pad.modals.deleted":"삭제되었습니다.","pad.modals.deleted.explanation":"이 패드를 제거했습니다.","pad.modals.disconnected":"연결이 끊어졌습니다.","pad.modals.disconnected.explanation":"서버에서 연결을 잃었습니다","pad.modals.disconnected.cause":"서버를 사용할 수 없습니다. 이 문제가 계속 발생하면 알려주시기 바랍니다.","pad.share":"이 패드 공유하기","pad.share.readonly":"읽기 전용","pad.share.link":"링크","pad.share.emebdcode":"URL 포함","pad.chat":"대화","pad.chat.title":"이 패드에 대화를 엽니다.","timeslider.pageTitle":"{{appTitle}} 시간슬라이더","timeslider.toolbar.returnbutton":"패드로 돌아가기","timeslider.toolbar.authors":"저자:","timeslider.toolbar.authorsList":"저자 없음","timeslider.exportCurrent":"현재 버전으로 내보내기:","timeslider.version":"버전 {{version}}","timeslider.saved":"{{year}}년 {{month}} {{day}}일에 저장함","timeslider.dateformat":"{{year}}년/{{month}}/{{day}}일 {{hours}}:{{minutes}}:{{seconds}}","timeslider.month.january":"1월","timeslider.month.february":"2월","timeslider.month.march":"3월","timeslider.month.april":"4월","timeslider.month.may":"5월","timeslider.month.june":"6월","timeslider.month.july":"7월","timeslider.month.august":"8월","timeslider.month.september":"9월","timeslider.month.october":"10월","timeslider.month.november":"11월","timeslider.month.december":"12월","pad.savedrevs.marked":"이 판은 이제 저장한 판으로 표시합니다.","pad.userlist.entername":"이름을 입력하세요","pad.userlist.unnamed":"이름없음","pad.userlist.guest":"손님","pad.userlist.deny":"거부","pad.userlist.approve":"승인","pad.editbar.clearcolors":"전체 문서의 저자 색을 지우시겠습니까?","pad.impexp.importbutton":"지금 가져오기","pad.impexp.importing":"가져오는 중...","pad.impexp.confirmimport":"파일을 가져오면 패드의 현재 텍스트를 덮어쓰게 됩니다. 진행하시겠습니까?","pad.impexp.convertFailed":"이 파일을 가져올 수 없습니다. 다른 문서 형식을 사용하거나 수동으로 복사하여 붙여넣으세요","pad.impexp.uploadFailed":"올리기를 실패했습니다. 다시 시도하세요","pad.impexp.importfailed":"가져오기를 실패했습니다","pad.impexp.copypaste":"복사하여 붙여넣으세요","pad.impexp.exportdisabled":"{{type}} 형식으로 내보내기가 비활성화되어 있습니다. 자세한 내용은 시스템 관리자에게 문의하시기 바랍니다."} \ No newline at end of file diff --git a/src/locales/ksh.json b/src/locales/ksh.json new file mode 100644 index 00000000..cb900493 --- /dev/null +++ b/src/locales/ksh.json @@ -0,0 +1 @@ +{"index.newPad":"Neu Padd","index.createOpenPad":"udder maach e Padd op med däm Naame:","pad.toolbar.bold.title":"Fättschreff (Strg-B)","pad.toolbar.italic.title":"Scheive Schreff (Strg-I)","pad.toolbar.underline.title":"Ongerstresche (Strg-U)","pad.toolbar.strikethrough.title":"Dorschjeschtresche","pad.toolbar.ol.title":"Leß met Nommere","pad.toolbar.ul.title":"Leß met Pongkte","pad.toolbar.indent.title":"Enjerök","pad.toolbar.unindent.title":"Ußjerök","pad.toolbar.undo.title":"Retuur nämme (Strg-Z)","pad.toolbar.redo.title":"Norrens (Strg-Y)","pad.toolbar.clearAuthorship.title":"dä Schriiver ier Färve fottnämme","pad.toolbar.import_export.title":"Vun ongerscheidlijje Dattei_Fommaate empotteere udder äxpotteere","pad.toolbar.timeslider.title":"Verjangeheid afschpelle","pad.toolbar.savedRevision.title":"Faßjehallde Versione","pad.toolbar.settings.title":"Enschtällonge","pad.toolbar.embed.title":"Donn dat Padd enbenge","pad.toolbar.showusers.title":"Verbonge Metschriiver aanzeije","pad.colorpicker.save":"Faßhallde","pad.colorpicker.cancel":"Ophüüre","pad.loading":"Aam Laade …","pad.settings.padSettings":"Dam Pädd sin Enschtällonge","pad.settings.myView":"Anseesch","pad.settings.stickychat":"Donn der Klaaf emmer aanzeije","pad.settings.colorcheck":"Färve för de Schriiver","pad.settings.linenocheck":"Nommere för de Reije","pad.settings.fontType":"Zoot Schreff","pad.settings.fontType.normal":"Nomaal","pad.settings.fontType.monospaced":"einheidlesch brejde Zeische","pad.settings.globalView":"Et Ußsin för Alle","pad.settings.language":"Schprooch:","pad.importExport.import_export":"Empoot/Äxpoot","pad.importExport.import":"Donn jeede Täx udder jeede Zoot Dokemänt huhlaade","pad.importExport.export":"Don dat Pädd äxpoteere alß:","pad.importExport.exporthtml":"HTML","pad.importExport.exportplain":"Eijfach Täx","pad.importExport.exportword":"Microsoft Word","pad.importExport.exportpdf":"PDF (Poteerbaa Dokemänte Fommaat)","pad.importExport.exportopen":"ODF (Offe Dokemänte-Fommaat)","pad.importExport.exportdokuwiki":"DokuWiki","pad.modals.connected":"Verbonge.","pad.modals.reconnecting":"Ben wider aam Verbenge …","pad.modals.forcereconnect":"Wider verbenge","pad.modals.uderdup":"En enem andere Finster en Ärbeid","pad.modals.userdup.explanation":"Heh dat Padd schingk en mieh wi einem Finster vun enem Brauser op heh däm Rääschner op ze sin.","pad.modals.userdup.advice":"En heh däm Finster wider verbenge.","pad.modals.unauth":"Nit berääschtesch","pad.modals.unauth.explanation":"Ding Berääschtejong hät sesch jeändert, derwiehl De di Sigg aam beloore wohrß. Versöhk en neu Verbendong ze maache.","pad.modals.looping":"De Verbendong es fott.","pad.modals.looping.explanation":"Et jitt Probleeme met dä Verbendong mem ẞööver för de Schriiver ier Aandeile zesamme_ze_bränge.","pad.modals.looping.cause":"Künnt sin, Ding Verbendong jeiht dorj_ene onzopaß proxy-ẞööver udder firewall.","pad.modals.initsocketfail":"Dä ẞööver es nit ze äreische.","pad.modals.initsocketfail.explanation":"Kein Verbendong met däm ẞööver ze krijje.","pad.modals.initsocketfail.cause":"Dat künnt aam Brauser udder aan däm singer Verbendong övver et Internet lijje.","pad.modals.slowcommit":"De Verbendong es fott.","pad.modals.slowcommit.explanation":"Dä ẞööver antwoot nit.","pad.modals.slowcommit.cause":"Dat künnt aan Probleeme met Verbendonge em Näzwärrek lijje.","pad.modals.deleted":"Fottjeschmeße.","pad.modals.deleted.explanation":"Dat Pädd es fottjeschmeße woode.","pad.modals.disconnected":"Do bes nit mieh verbonge.","pad.modals.disconnected.explanation":"De Verbendong mem ẞööver es fott.","pad.modals.disconnected.cause":"Dä ẞööver künnt nit loufe.","pad.share":"Maach heh dat Padd öffentlesch","pad.share.readonly":"Nor zom Lässe","pad.share.link":"Lengk","pad.share.emebdcode":"URL enboue","pad.chat":"Klaaf","pad.chat.title":"Maach dä Klaaf för heh dat Pädd op","timeslider.pageTitle":"{{appTitle}} - Verjangeheid affschpelle","timeslider.toolbar.returnbutton":"Jangk retuur nohm Pädd","timeslider.toolbar.authors":"Schriiver:","timeslider.toolbar.authorsList":"Kein Schriivere","timeslider.exportCurrent":"Donn de meußte Väsjohn äxpotteere alß:","timeslider.version":"Väsjon {{version}}","timeslider.saved":"Faßjehallde aam {{day}}. {{month}} {{year}}","timeslider.dateformat":"amm {{day}}. {{month}} {{year}} öm {{hours}}:{{minutes}}:{{seconds}}","timeslider.month.january":"Jannewaa","timeslider.month.february":"Fääbrowaa","timeslider.month.march":"Määz","timeslider.month.april":"Apprell","timeslider.month.may":"Mai","timeslider.month.june":"Juuni","timeslider.month.july":"Juuli","timeslider.month.august":"Oujoß","timeslider.month.september":"Säptämber","timeslider.month.october":"Oktoober","timeslider.month.november":"Novämber","timeslider.month.december":"Dezämber"} \ No newline at end of file diff --git a/src/locales/mk.json b/src/locales/mk.json new file mode 100644 index 00000000..b6565f36 --- /dev/null +++ b/src/locales/mk.json @@ -0,0 +1 @@ +{"index.newPad":"Нова тетратка","index.createOpenPad":"или направете/отворете тетратка со името:","pad.toolbar.bold.title":"Задебелено (Ctrl-B)","pad.toolbar.italic.title":"Косо (Ctrl-I)","pad.toolbar.underline.title":"Подвлечено (Ctrl-U)","pad.toolbar.strikethrough.title":"Прецртано","pad.toolbar.ol.title":"Подреден список","pad.toolbar.ul.title":"Неподреден список","pad.toolbar.indent.title":"Вовлекување","pad.toolbar.unindent.title":"Отстап","pad.toolbar.undo.title":"Врати (Ctrl-Z)","pad.toolbar.redo.title":"Повтори (Ctrl-Y)","pad.toolbar.clearAuthorship.title":"Поништи ги авторските бои","pad.toolbar.import_export.title":"Увоз/Извоз од/во разни податотечни формати","pad.toolbar.timeslider.title":"Историски преглед","pad.toolbar.savedRevision.title":"Зачувани ревизии","pad.toolbar.settings.title":"Поставки","pad.toolbar.embed.title":"Вметни ја тетраткава","pad.toolbar.showusers.title":"Прикаж. корисниците на тетраткава","pad.colorpicker.save":"Зачувај","pad.colorpicker.cancel":"Откажи","pad.loading":"Вчитувам...","pad.passwordRequired":"Потребна е лозинка за пристап","pad.permissionDenied":"За овде не е потребна дозвола за пристап","pad.wrongPassword":"Погрешна лозинка","pad.settings.padSettings":"Поставки на тетратката","pad.settings.myView":"Мој поглед","pad.settings.stickychat":"Разговорите секогаш на екранот","pad.settings.colorcheck":"Авторски бои","pad.settings.linenocheck":"Броеви на редовите","pad.settings.fontType":"Тип на фонт:","pad.settings.fontType.normal":"Нормален","pad.settings.fontType.monospaced":"Непропорционален","pad.settings.globalView":"Гобален поглед","pad.settings.language":"Јазик:","pad.importExport.import_export":"Увоз/Извоз","pad.importExport.import":"Подигање на било каква текстуална податотека или документ","pad.importExport.importSuccessful":"Успешно!","pad.importExport.export":"Извези ја тековната тетратка како","pad.importExport.exporthtml":"HTML","pad.importExport.exportplain":"Прост текст","pad.importExport.exportword":"Microsoft Word","pad.importExport.exportpdf":"PDF","pad.importExport.exportopen":"ODF (Open Document Format)","pad.importExport.exportdokuwiki":"DokuWiki","pad.importExport.abiword.innerHTML":"Можете да увезувате само од прост текст и html-формат. Понапредни можности за увоз ќе добиете ако инсталирате AbiWord.","pad.modals.connected":"Поврзано.","pad.modals.reconnecting":"Ве преповрзувам со тетратката...","pad.modals.forcereconnect":"Наметни преповрзување","pad.modals.uderdup":"Отворено во друг прозорец","pad.modals.userdup.explanation":"Оваа тетратка е отворена на повеќе од еден прозорец (во прелистувач) на сметачот.","pad.modals.userdup.advice":"Преповрзете се за да го користите овој прозорец.","pad.modals.unauth":"Неовластено","pad.modals.unauth.explanation":"Вашите дозволи се имаат изменето додека ја гледавте страницава. Обидете се да се преповрзете.","pad.modals.looping":"Врската е прекината.","pad.modals.looping.explanation":"Се јавија проблеми со врската со усогласителниот опслужувач.","pad.modals.looping.cause":"Можеби сте поврзани преку нескладен огнен ѕид или застапник.","pad.modals.initsocketfail":"Опслужувачот е недостапен.","pad.modals.initsocketfail.explanation":"Не можев да се поврзам со усогласителниот опслужувач.","pad.modals.initsocketfail.cause":"Ова веројатно се должи на проблем со вашиот прелистувач или врската со интернет.","pad.modals.slowcommit":"Прекинато.","pad.modals.slowcommit.explanation":"Опслужувачот не се одѕива.","pad.modals.slowcommit.cause":"Ова може да се должи на проблеми со мрежното поврзување.","pad.modals.deleted":"Избришано.","pad.modals.deleted.explanation":"Оваа тетратка е отстранета.","pad.modals.disconnected":"Врската е прекината.","pad.modals.disconnected.explanation":"Врската со опслужувачот е прекината","pad.modals.disconnected.cause":"Опслужувачот може да е недостапен. Известете нè ако ова продолжи да ви се случува.","pad.share":"Сподели ја тетраткава","pad.share.readonly":"Само читање","pad.share.link":"Врска","pad.share.emebdcode":"Вметни URL","pad.chat":"Разговор","pad.chat.title":"Отвори го разговорот за оваа тетратка.","timeslider.pageTitle":"{{appTitle}} Историски преглед","timeslider.toolbar.returnbutton":"Назад на тетратката","timeslider.toolbar.authors":"Автори:","timeslider.toolbar.authorsList":"Нема автори","timeslider.exportCurrent":"Извези ја тековната верзија како:","timeslider.version":"Верзија {{version}}","timeslider.saved":"Зачувано на {{day}} {{month}} {{year}} г.","timeslider.dateformat":"{{day}}/{{month}}/{{year}} {{hours}}:{{minutes}}:{{seconds}}","timeslider.month.january":"јануари","timeslider.month.february":"февруари","timeslider.month.march":"март","timeslider.month.april":"април","timeslider.month.may":"мај","timeslider.month.june":"јуни","timeslider.month.july":"јули","timeslider.month.august":"август","timeslider.month.september":"септември","timeslider.month.october":"октомври","timeslider.month.november":"ноември","timeslider.month.december":"декември","pad.savedrevs.marked":"Оваа ревизија сега е означена како зачувана","pad.userlist.entername":"Внесете го вашето име","pad.userlist.unnamed":"без име","pad.userlist.guest":"Гостин","pad.userlist.deny":"Одбиј","pad.userlist.approve":"Одобри","pad.editbar.clearcolors":"Да ги отстранам авторските бои од целиот документ?","pad.impexp.importbutton":"Увези сега","pad.impexp.importing":"Увезувам...","pad.impexp.confirmimport":"Увезувајќи ја податотеката ќе го замените целиот досегашен текст во тетратката. Дали сте сигурни дека сакате да продолжите?","pad.impexp.convertFailed":"Не можев да ја увезам податотеката. Послужете се со поинаков формат или прекопирајте го текстот рачно.","pad.impexp.uploadFailed":"Подигањето не успеа. Обидете се повторно.","pad.impexp.importfailed":"Увозот не успеа","pad.impexp.copypaste":"Прекопирајте","pad.impexp.exportdisabled":"Извозот во форматот {{type}} е оневозможен. Ако сакате да дознаете повеќе за ова, обратете се кај системскиот администратор."} \ No newline at end of file diff --git a/src/locales/ml.json b/src/locales/ml.json new file mode 100644 index 00000000..b2e9017f --- /dev/null +++ b/src/locales/ml.json @@ -0,0 +1 @@ +{"index.newPad":"പുതിയ പാഡ്","index.createOpenPad":"അല്ലെങ്കിൽ പേരുപയോഗിച്ച് പാഡ് സൃഷ്ടിക്കുക/തുറക്കുക:","pad.toolbar.bold.title":"കട്ടികൂട്ടിയെഴുതുക (Ctrl-B)","pad.toolbar.italic.title":"ചെരിച്ചെഴുതുക (Ctrl-I)","pad.toolbar.underline.title":"അടിവരയിടുക (Ctrl-U)","pad.toolbar.strikethrough.title":"വെട്ടുക","pad.toolbar.ol.title":"ക്രമത്തിലുള്ള പട്ടിക","pad.toolbar.ul.title":"ക്രമരഹിത പട്ടിക","pad.toolbar.indent.title":"വലത്തേക്ക് തള്ളുക","pad.toolbar.unindent.title":"ഇടത്തേക്ക് തള്ളുക","pad.toolbar.undo.title":"തിരസ്കരിക്കുക (Ctrl-Z)","pad.toolbar.redo.title":"വീണ്ടും ചെയ്യുക (Ctrl-Y)","pad.toolbar.clearAuthorship.title":"രചയിതാക്കൾക്കുള്ള നിറം കളയുക","pad.toolbar.import_export.title":"വ്യത്യസ്ത ഫയൽ തരങ്ങളിലേക്ക്/തരങ്ങളിൽ നിന്ന് ഇറക്കുമതി/കയറ്റുമതി ചെയ്യുക","pad.toolbar.timeslider.title":"സമയരേഖ","pad.toolbar.savedRevision.title":"സേവ് ചെയ്തിട്ടുള്ള നാൾപ്പതിപ്പുകൾ","pad.toolbar.settings.title":"സജ്ജീകരണങ്ങൾ","pad.toolbar.embed.title":"ഈ പാഡ് എംബെഡ് ചെയ്യുക","pad.toolbar.showusers.title":"ഈ പാഡിലുള്ള ഉപയോക്താക്കളെ പ്രദർശിപ്പിക്കുക","pad.colorpicker.save":"സേവ് ചെയ്യുക","pad.colorpicker.cancel":"റദ്ദാക്കുക","pad.loading":"ശേഖരിക്കുന്നു...","pad.settings.padSettings":"പാഡ് സജ്ജീകരണങ്ങൾ","pad.settings.myView":"എന്റെ കാഴ്ച","pad.settings.stickychat":"തത്സമയം സംവാദം എപ്പോഴും സ്ക്രീനിൽ കാണിക്കുക","pad.settings.colorcheck":"എഴുത്തുകാർക്കുള്ള നിറങ്ങൾ","pad.settings.linenocheck":"എണ്ണമിട്ട വരികൾ","pad.settings.fontType":"ഫോണ്ട് തരം:","pad.settings.fontType.normal":"സാധാരണം","pad.settings.fontType.monospaced":"മോണോസ്പേസ്","pad.settings.globalView":"മൊത്തക്കാഴ്ച","pad.settings.language":"ഭാഷ:","pad.importExport.import_export":"ഇറക്കുമതി/കയറ്റുമതി ചെയ്യുക","pad.importExport.import":"എന്തെങ്കിലും എഴുത്തു പ്രമാണമോ രേഖയോ അപ്‌ലോഡ് ചെയ്യുക","pad.importExport.export":"ഇപ്പോഴത്തെ പാഡ് ഇങ്ങനെ കയറ്റുമതി ചെയ്യുക:","pad.importExport.exporthtml":"എച്ച്.റ്റി.എം.എൽ.","pad.importExport.exportplain":"വെറും എഴുത്ത്","pad.importExport.exportword":"മൈക്രോസോഫ്റ്റ് വേഡ്","pad.importExport.exportpdf":"പി.ഡി.എഫ്.","pad.importExport.exportopen":"ഒ.ഡി.എഫ്. (ഓപ്പൺ ഡോക്യുമെന്റ് ഫോർമാറ്റ്)","pad.importExport.exportdokuwiki":"ഡോകുവിക്കി","pad.modals.connected":"ബന്ധിപ്പിച്ചിരിക്കുന്നു.","pad.modals.reconnecting":"താങ്കളുടെ പാഡിലേയ്ക്ക് വീണ്ടും ബന്ധിപ്പിക്കുന്നു...","pad.modals.forcereconnect":"എന്തായാലും ബന്ധിപ്പിക്കുക","pad.modals.uderdup":"മറ്റൊരു ജാലകത്തിൽ തുറന്നു","pad.modals.userdup.explanation":"ഈ കമ്പ്യൂട്ടറിൽ ഈ പാഡ് ഒന്നിലധികം ബ്രൗസർ ജാലകങ്ങളിൽ തുറന്നതായി കാണുന്നു.","pad.modals.userdup.advice":"ഈ ജാലകം തന്നെ ഉപയോഗിക്കാനായി ബന്ധിപ്പിക്കുക","pad.modals.unauth":"അനുവാദമില്ല","pad.modals.unauth.explanation":"ഈ താൾ കണ്ടുകൊണ്ടിരിക്കെ താങ്കൾക്കുള്ള അനുമതികളിൽ മാറ്റമുണ്ടായി. വീണ്ടും ബന്ധപ്പെടാൻ ശ്രമിക്കുക.","pad.modals.looping":"വേർപെട്ടു.","pad.modals.looping.explanation":"സിംക്രണൈസേഷൻ സെർവറുമായുള്ള ആശയവിനിമയത്തിൽ പ്രശ്നങ്ങളുണ്ട്.","pad.modals.looping.cause":"ഒരുപക്ഷേ പൊരുത്തപ്പെടാത്ത ഫയർവാളിലൂടെയോ പ്രോക്സിയിലൂടെയോ ആകാം താങ്കൾ ബന്ധിച്ചിരുന്നത്.","pad.modals.initsocketfail":"സെർവറിലെത്താൻ പറ്റുന്നില്ല.","pad.modals.initsocketfail.explanation":"സിംക്രണൈസേഷൻ സെർവറുമായി ബന്ധപ്പെടാൻ കഴിഞ്ഞില്ല.","pad.modals.initsocketfail.cause":"ഇന്റർനെറ്റ് കണക്ഷന്റെയോ ബ്രൗസറിന്റെയോ പ്രശ്നമാകാം","pad.modals.slowcommit":"വേർപെട്ടു.","pad.modals.slowcommit.explanation":"സെർവർ പ്രതികരിക്കുന്നില്ല.","pad.modals.slowcommit.cause":"നെറ്റ്‌വർക്ക് പ്രശ്നം കാരണമാകാം.","pad.modals.deleted":"മായ്ച്ചു","pad.modals.deleted.explanation":"ഈ പാഡ് നീക്കം ചെയ്തു.","pad.modals.disconnected":"താങ്കൾ വേർപെട്ടിരിക്കുന്നു.","pad.modals.disconnected.explanation":"സെർവറുമായുള്ള ബന്ധം നഷ്ടപ്പെട്ടു","pad.modals.disconnected.cause":"സെർവർ ലഭ്യമല്ലായിരിക്കാം. ഇത് തുടർച്ചയായി സംഭവിക്കുന്നുണ്ടെങ്കിൽ ദയവായി ഞങ്ങളെ അറിയിക്കുക.","pad.share":"ഈ പാഡ് പങ്കിടുക","pad.share.readonly":"വായിക്കൽ മാത്രം","pad.share.link":"കണ്ണി","pad.share.emebdcode":"എംബെഡ് യു.ആർ.എൽ.","pad.chat":"തത്സമയസംവാദം","pad.chat.title":"ഈ പാഡിന്റെ തത്സമയസംവാദം തുറക്കുക.","timeslider.pageTitle":"{{appTitle}} സമയരേഖ","timeslider.toolbar.returnbutton":"പാഡിലേക്ക് തിരിച്ചുപോവുക","timeslider.toolbar.authors":"രചയിതാക്കൾ:","timeslider.toolbar.authorsList":"ആരും എഴുതിയിട്ടില്ല","timeslider.exportCurrent":"ഈ പതിപ്പ് ഇങ്ങനെ എടുക്കുക:","timeslider.version":"പതിപ്പ് {{version}}","timeslider.saved":"സേവ് ചെയ്തത് {{month}} {{day}}, {{year}}","timeslider.month.january":"ജനുവരി","timeslider.month.february":"ഫെബ്രുവരി","timeslider.month.march":"മാർച്ച്","timeslider.month.april":"ഏപ്രിൽ","timeslider.month.may":"മേയ്","timeslider.month.june":"ജൂൺ","timeslider.month.july":"ജൂലൈ","timeslider.month.august":"ഓഗസ്റ്റ്","timeslider.month.september":"സെപ്റ്റംബർ","timeslider.month.october":"ഒക്ടോബർ","timeslider.month.november":"നവംബർ","timeslider.month.december":"ഡിസംബർ"} \ No newline at end of file diff --git a/src/locales/ms.json b/src/locales/ms.json new file mode 100644 index 00000000..bafb9f29 --- /dev/null +++ b/src/locales/ms.json @@ -0,0 +1 @@ +{"index.newPad":"Pad baru","index.createOpenPad":"atau cipta/buka Pad yang bernama:","pad.toolbar.bold.title":"Tebal (Ctrl-B)","pad.toolbar.italic.title":"Miring (Ctrl-I)","pad.toolbar.underline.title":"Garis bawah (Ctrl-U)","pad.toolbar.strikethrough.title":"Garis lorek","pad.toolbar.ol.title":"Senarai tertib","pad.toolbar.ul.title":"Senarai tak tertib","pad.toolbar.indent.title":"Engsot ke dalam","pad.toolbar.unindent.title":"Engsot ke luar","pad.toolbar.undo.title":"Buat asal (Ctrl-Z)","pad.toolbar.redo.title":"Buat semula (Ctrl-Y)","pad.toolbar.clearAuthorship.title":"Padamkan Warna Pengarang","pad.toolbar.import_export.title":"Import/Eksport dari/ke format-format fail berbeza","pad.toolbar.timeslider.title":"Gelangsar masa","pad.toolbar.savedRevision.title":"Semakan Tersimpan","pad.toolbar.settings.title":"Tetapan","pad.toolbar.embed.title":"Benamkan pad ini","pad.toolbar.showusers.title":"Tunjukkan pengguna pada pad ini","pad.colorpicker.save":"Simpan","pad.colorpicker.cancel":"Batalkan","pad.loading":"Sedang dimuatkan...","pad.passwordRequired":"Anda memerlukan kata laluan untuk mengakses pad ini","pad.permissionDenied":"Anda tiada kebenaran untuk mengakses pad ini","pad.wrongPassword":"Kata laluan anda salah","pad.settings.padSettings":"Tetapan Pad","pad.settings.myView":"Paparan Saya","pad.settings.stickychat":"Sentiasa bersembang pada skrin","pad.settings.colorcheck":"Warna pengarang","pad.settings.linenocheck":"Nombor baris","pad.settings.fontType":"Jenis fon:","pad.settings.fontType.normal":"Normal","pad.settings.fontType.monospaced":"Monospace","pad.settings.globalView":"Paparan Sejagat","pad.settings.language":"Bahasa:","pad.importExport.import_export":"Import/Eksport","pad.importExport.import":"Muat naik sebarang fail teks atau dokumen","pad.importExport.importSuccessful":"Berjaya!","pad.importExport.export":"Eksport pad semasa sebagai:","pad.importExport.exporthtml":"HTML","pad.importExport.exportplain":"Teks biasa","pad.importExport.exportword":"Microsoft Word","pad.importExport.exportpdf":"PDF","pad.importExport.exportopen":"ODF (Open Document Format)","pad.importExport.exportdokuwiki":"DokuWiki","pad.importExport.abiword.innerHTML":"Anda hanya boleh mengimport dari format teks biasa atau html. Untuk ciri-ciri import yang lebih maju, sila memasang abiword.","pad.modals.connected":"Bersambung.","pad.modals.reconnecting":"Bersambung semula dengan pad anda...","pad.modals.forcereconnect":"Sambung semula secara paksa","pad.modals.uderdup":"Dibuka di tetingkap lain","pad.modals.userdup.explanation":"Pad ini nampaknya telah dibuka di lebih daripada satu tetingkap pelayar pada komputer ini.","pad.modals.userdup.advice":"Sambung semula untuk menggunakan tetingkap ini pula.","pad.modals.unauth":"Tidak dibenarkan","pad.modals.unauth.explanation":"Kebenaran anda telah berubah sewaktu memaparkan halaman ini. Cuba bersambung semula.","pad.modals.looping":"Terputus.","pad.modals.looping.explanation":"Terdapat masalah komunikasi dengan pelayan penyegerakan.","pad.modals.looping.cause":"Mungkin anda telah bersambung melalui tembok api atau proksi yang tidak serasi.","pad.modals.initsocketfail":"Pelayan tidak boleh dicapai.","pad.modals.initsocketfail.explanation":"Tidak dapat bersambung dengan pelayar penyegerakan.","pad.modals.initsocketfail.cause":"Ini mungkin disebabkan oleh masalah dengan pelayar atau sambungan internet anda.","pad.modals.slowcommit":"Terputus.","pad.modals.slowcommit.explanation":"Pelayan tidak membalas.","pad.modals.slowcommit.cause":"Ini mungkin disebabkan oleh masalah dengan kesambungan rangkaian anda.","pad.modals.deleted":"Dihapuskan.","pad.modals.deleted.explanation":"Pad ini telah dibuang.","pad.modals.disconnected":"Sambungan anda telah diputuskan.","pad.modals.disconnected.explanation":"Sambungan ke pelayan terputus","pad.modals.disconnected.cause":"Pelayan mungkin tidak dapat dicapai. Sila beritahu kami jika masalah ini berterusan.","pad.share":"Kongsikan pad ini","pad.share.readonly":"Baca sahaja","pad.share.link":"Pautan","pad.share.emebdcode":"Benamkan URL","pad.chat":"Sembang","pad.chat.title":"Buka ruang sembang untuk pad ini.","timeslider.pageTitle":"Gelangsar Masa {{appTitle}}","timeslider.toolbar.returnbutton":"Kembali ke pad","timeslider.toolbar.authors":"Pengarang:","timeslider.toolbar.authorsList":"Tiada Pengarang","timeslider.exportCurrent":"Eksport versi semasa sebagai:","timeslider.version":"Versi {{version}}","timeslider.saved":"Disimpan pada {{day}} {{month}} {{year}}","timeslider.dateformat":"{{day}}/{{month}}/{{year}} {{hours}}:{{minutes}}:{{seconds}}","timeslider.month.january":"Januari","timeslider.month.february":"Februari","timeslider.month.march":"Mac","timeslider.month.april":"April","timeslider.month.may":"Mei","timeslider.month.june":"Jun","timeslider.month.july":"Julai","timeslider.month.august":"Ogos","timeslider.month.september":"September","timeslider.month.october":"Oktober","timeslider.month.november":"November","timeslider.month.december":"Disember","pad.savedrevs.marked":"Semakan ini telah ditandai sebagai semakan tersimpan","pad.userlist.entername":"Taipkan nama anda","pad.userlist.unnamed":"tanpa nama","pad.userlist.guest":"Tetamu","pad.userlist.deny":"Tolak","pad.userlist.approve":"Terima","pad.editbar.clearcolors":"Padamkan warna pengarang pada seluruh dokumen?","pad.impexp.importbutton":"Import Sekarang","pad.impexp.importing":"Sedang mengimport...","pad.impexp.confirmimport":"Mengimport fail akan menulis ganti teks semasa pada pad ini. Adakah anda benar-benar ingin teruskan?","pad.impexp.convertFailed":"Fail tidak dapat diimport. Sila gunakan format dokumen yang lain atau salin tampal secara manual","pad.impexp.uploadFailed":"Muat naik gagal, sila cuba lagi","pad.impexp.importfailed":"Import gagal","pad.impexp.copypaste":"Sila salin tampal","pad.impexp.exportdisabled":"Mengeksport dalam format {{type}} dilarang. Sila hubungi pentadbir sistem anda untuk keterangan lanjut."} \ No newline at end of file diff --git a/src/locales/nl.ini b/src/locales/nl.ini deleted file mode 100644 index 87eaeb13..00000000 --- a/src/locales/nl.ini +++ /dev/null @@ -1,79 +0,0 @@ -; Exported from translatewiki.net -; Author: Siebrand -[nl] -index.newPad = Nieuw pad -index.createOpenPad = Maak of open pad met de naam: -pad.toolbar.bold.title = Vet (Ctrl-B) -pad.toolbar.italic.title = Cursief (Ctrl-I) -pad.toolbar.underline.title = Onderstrepen (Ctrl-U) -pad.toolbar.strikethrough.title = Doorhalen -pad.toolbar.ol.title = Geordende lijst -pad.toolbar.ul.title = Ongeordende lijst -pad.toolbar.indent.title = Inspringen -pad.toolbar.unindent.title = Inspringing verkleinen -pad.toolbar.undo.title = Ongedaan maken (Ctrl-Z) -pad.toolbar.redo.title = Opnieuw uitvoeren (Ctrl-Y) -pad.toolbar.clearAuthorship.title = Kleuren auteurs wissen -pad.toolbar.import_export.title = Naar/van andere opmaak exporteren/importeren -pad.toolbar.timeslider.title = Tijdlijn -pad.toolbar.savedRevision.title = Opgeslagen versies -pad.toolbar.settings.title = Instellingen -pad.toolbar.embed.title = Pad insluiten -pad.toolbar.showusers.title = Gebruikers van dit pad weergeven -pad.colorpicker.save = Opslaan -pad.colorpicker.cancel = Annuleren -pad.loading = Bezig met laden… -pad.settings.padSettings = Padinstellingen -pad.settings.myView = Mijn overzicht -pad.settings.stickychat = Chat altijd zichtbaar -pad.settings.colorcheck = Kleuren auteurs -pad.settings.linenocheck = Regelnummers -pad.settings.fontType = Lettertype: -pad.settings.fontType.normal = Normaal -pad.settings.fontType.monospaced = Monospace -pad.settings.globalView = Globaal overzicht -pad.settings.language = Taal: -pad.importExport.import_export = Importeren/exporteren -pad.importExport.import = Upload een tekstbestand of document -pad.importExport.successful = Afgerond -; Fuzzy -pad.importExport.export = Huidige pad exporteren als -pad.importExport.exporthtml = HTML -pad.importExport.exportplain = Tekst zonder opmaak -pad.importExport.exportword = Microsoft Word -pad.importExport.exportpdf = PDF -pad.importExport.exportopen = ODF (Open Document Format) -pad.importExport.exportdokuwiki = DokuWiki -pad.modals.connected = Verbonden. -pad.modals.reconnecting = Opnieuw verbinding maken met uw pad... -pad.modals.forcereconnect = Opnieuw verbinden -pad.modals.uderdup = Openen in ander venster -pad.modals.userdup.explanation = Dit pad is meer dan één keer geopend in een browservenster op deze computer. -pad.modals.userdup.advice = Opnieuw verbinden en dit venster gebruiken. -pad.modals.unauth = Niet toegestaan -pad.modals.unauth.explanation = Uw rechten zijn gewijzigd terwijl u de pagina aan het bekijken was. Probeer opnieuw te verbinden. -pad.modals.looping = Verbinding verbroken. -pad.modals.looping.explanation = Er is een probleem opgetreden tijdens de communicatie met de synchronisatieserver. -pad.modals.looping.cause = Mogelijk gebruikt de server een niet compatibele firewall of proxy server. -pad.modals.initsocketfail = Server is niet bereikbaar. -pad.modals.initsocketfail.explanation = Het was niet mogelijk te verbinden met de synchronisatieserver. -pad.modals.initsocketfail.cause = Mogelijk komt dit door uw browser of internetverbinding. -pad.modals.slowcommit = Verbinding verbroken. -pad.modals.slowcommit.explanation = De server reageert niet. -pad.modals.slowcommit.cause = Dit komt mogelijk door netwerkproblemen. -pad.modals.deleted = Verwijderd. -pad.modals.deleted.explanation = Dit pad is verwijderd. -pad.modals.disconnected = Uw verbinding is verbroken. -pad.modals.disconnected.explanation = De verbinding met de server is verbroken -pad.modals.disconnected.cause = De server is mogelijk niet beschikbaar. Stel alstublieft de beheerder op de hoogte. -pad.share = Pad delen -pad.share.readonly = Alleen-lezen -pad.share.link = Verwijzing -pad.share.emebdcode = URL insluiten -pad.chat = Chatten -pad.chat.title = Chat voor dit pad opnenen -timeslider.pageTitle = Tijdlijn voor {{appTitle}} -timeslider.toolbar.returnbutton = Terug naar pad -timeslider.toolbar.authors = Auteurs: -timeslider.toolbar.authorsList = Geen auteurs -timeslider.exportCurrent = Huidige versie exporteren als: diff --git a/src/locales/nl.json b/src/locales/nl.json new file mode 100644 index 00000000..f240e912 --- /dev/null +++ b/src/locales/nl.json @@ -0,0 +1 @@ +{"index.newPad":"Nieuw pad","index.createOpenPad":"Maak of open pad met de naam:","pad.toolbar.bold.title":"Vet (Ctrl-B)","pad.toolbar.italic.title":"Cursief (Ctrl-I)","pad.toolbar.underline.title":"Onderstrepen (Ctrl-U)","pad.toolbar.strikethrough.title":"Doorhalen","pad.toolbar.ol.title":"Geordende lijst","pad.toolbar.ul.title":"Ongeordende lijst","pad.toolbar.indent.title":"Inspringen","pad.toolbar.unindent.title":"Inspringing verkleinen","pad.toolbar.undo.title":"Ongedaan maken (Ctrl-Z)","pad.toolbar.redo.title":"Opnieuw uitvoeren (Ctrl-Y)","pad.toolbar.clearAuthorship.title":"Kleuren auteurs wissen","pad.toolbar.import_export.title":"Naar/van andere opmaak exporteren/importeren","pad.toolbar.timeslider.title":"Tijdlijn","pad.toolbar.savedRevision.title":"Opgeslagen versies","pad.toolbar.settings.title":"Instellingen","pad.toolbar.embed.title":"Pad insluiten","pad.toolbar.showusers.title":"Gebruikers van dit pad weergeven","pad.colorpicker.save":"Opslaan","pad.colorpicker.cancel":"Annuleren","pad.loading":"Bezig met laden…","pad.passwordRequired":"U hebt een wachtwoord nodig om toegang te krijgen tot deze pad","pad.permissionDenied":"U hebt geen rechten om deze pad te bekijken","pad.wrongPassword":"U hebt een onjuist wachtwoord ingevoerd","pad.settings.padSettings":"Padinstellingen","pad.settings.myView":"Mijn overzicht","pad.settings.stickychat":"Chat altijd zichtbaar","pad.settings.colorcheck":"Kleuren auteurs","pad.settings.linenocheck":"Regelnummers","pad.settings.fontType":"Lettertype:","pad.settings.fontType.normal":"Normaal","pad.settings.fontType.monospaced":"Monospace","pad.settings.globalView":"Globaal overzicht","pad.settings.language":"Taal:","pad.importExport.import_export":"Importeren/exporteren","pad.importExport.import":"Upload een tekstbestand of document","pad.importExport.importSuccessful":"Afgerond","pad.importExport.export":"Huidige pad exporteren als","pad.importExport.exporthtml":"HTML","pad.importExport.exportplain":"Tekst zonder opmaak","pad.importExport.exportword":"Microsoft Word","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. Installeer abiword om meer geavanceerde importmogelijkheden te krijgen.","pad.modals.connected":"Verbonden.","pad.modals.reconnecting":"Opnieuw verbinding maken met uw pad...","pad.modals.forcereconnect":"Opnieuw verbinden","pad.modals.uderdup":"In een ander venster geopend","pad.modals.userdup.explanation":"Dit pad is meer dan één keer geopend in een browservenster op deze computer.","pad.modals.userdup.advice":"Maak opnieuw verbinding als u dit venster wilt gebruiken.","pad.modals.unauth":"Niet toegestaan","pad.modals.unauth.explanation":"Uw rechten zijn gewijzigd terwijl u de pagina aan het bekijken was. Probeer opnieuw te verbinden.","pad.modals.looping":"Verbinding verbroken.","pad.modals.looping.explanation":"Er is een probleem opgetreden tijdens de communicatie met de synchronisatieserver.","pad.modals.looping.cause":"Mogelijk gebruikt de server een niet compatibele firewall of proxy server.","pad.modals.initsocketfail":"Server is niet bereikbaar.","pad.modals.initsocketfail.explanation":"Het was niet mogelijk te verbinden met de synchronisatieserver.","pad.modals.initsocketfail.cause":"Mogelijk komt dit door uw browser of internetverbinding.","pad.modals.slowcommit":"Verbinding verbroken.","pad.modals.slowcommit.explanation":"De server reageert niet.","pad.modals.slowcommit.cause":"Dit komt mogelijk door netwerkproblemen.","pad.modals.deleted":"Verwijderd.","pad.modals.deleted.explanation":"Dit pad is verwijderd.","pad.modals.disconnected":"Uw verbinding is verbroken.","pad.modals.disconnected.explanation":"De verbinding met de server is verbroken","pad.modals.disconnected.cause":"De server is mogelijk niet beschikbaar. Stel alstublieft de beheerder op de hoogte.","pad.share":"Pad delen","pad.share.readonly":"Alleen-lezen","pad.share.link":"Verwijzing","pad.share.emebdcode":"URL insluiten","pad.chat":"Chatten","pad.chat.title":"Chat voor dit pad opnenen","timeslider.pageTitle":"Tijdlijn voor {{appTitle}}","timeslider.toolbar.returnbutton":"Terug naar pad","timeslider.toolbar.authors":"Auteurs:","timeslider.toolbar.authorsList":"Geen auteurs","timeslider.exportCurrent":"Huidige versie exporteren als:","timeslider.version":"Versie {{version}}","timeslider.saved":"Opgeslagen op {{day}} {{month}} {{year}}","timeslider.dateformat":"{{year}}-{{month}}-{{day}} {{hours}}:{{minutes}}:{{seconds}}","timeslider.month.january":"januari","timeslider.month.february":"februari","timeslider.month.march":"maart","timeslider.month.april":"april","timeslider.month.may":"mei","timeslider.month.june":"juni","timeslider.month.july":"juli","timeslider.month.august":"augustus","timeslider.month.september":"september","timeslider.month.october":"oktober","timeslider.month.november":"november","timeslider.month.december":"december","pad.savedrevs.marked":"Deze versie is nu gemarkeerd als opgeslagen versie","pad.userlist.entername":"Geef uw naam op","pad.userlist.unnamed":"zonder naam","pad.userlist.guest":"Gast","pad.userlist.deny":"Weigeren","pad.userlist.approve":"Goedkeuren","pad.editbar.clearcolors":"Auteurskleuren voor het hele document wissen?","pad.impexp.importbutton":"Nu importeren","pad.impexp.importing":"Bezig met importeren…","pad.impexp.confirmimport":"Door een bestand te importeren overschrijft u de huidige tekst van de pad. Wilt u echt doorgaan?","pad.impexp.convertFailed":"Het was niet mogelijk dit bestand te importeren. Gebruik een andere documentopmaak of kopieer en plak de inhoud handmatig","pad.impexp.uploadFailed":"Het uploaden is mislukt. Probeer het opnieuw","pad.impexp.importfailed":"Importeren is mislukt","pad.impexp.copypaste":"Gebruik kopiëren en plakken","pad.impexp.exportdisabled":"Exporteren als {{type}} is uitgeschakeld. Neem contact op met de systeembeheerder voor details."} \ No newline at end of file diff --git a/src/locales/nn.json b/src/locales/nn.json new file mode 100644 index 00000000..31ea2951 --- /dev/null +++ b/src/locales/nn.json @@ -0,0 +1 @@ +{"index.newPad":"Ny blokk","index.createOpenPad":"eller opprett/opna ei blokk med namnet:","pad.toolbar.bold.title":"Feit (Ctrl-B)","pad.toolbar.italic.title":"Kursiv (Ctrl-I)","pad.toolbar.underline.title":"Understreking (Ctrl-U)","pad.toolbar.strikethrough.title":"Gjennomstreking","pad.toolbar.ol.title":"Nummerert liste","pad.toolbar.ul.title":"Punktliste","pad.toolbar.indent.title":"Innrykk","pad.toolbar.unindent.title":"Rykk ut","pad.toolbar.undo.title":"Angra (Ctrl-Z)","pad.toolbar.redo.title":"Gjer om (Ctrl-Y)","pad.toolbar.clearAuthorship.title":"Fjern forfattarfargar","pad.toolbar.import_export.title":"Importer/eksporter til/frå ulike filformat","pad.toolbar.timeslider.title":"Tidslinje","pad.toolbar.savedRevision.title":"Lagra utgåver","pad.toolbar.settings.title":"Innstillingar","pad.toolbar.embed.title":"Bygg inn blokka i ei nettside","pad.toolbar.showusers.title":"Syn brukarane på blokka","pad.colorpicker.save":"Lagra","pad.colorpicker.cancel":"Avbryt","pad.loading":"Lastar …","pad.passwordRequired":"Du treng eit passord for å opna denne blokka","pad.permissionDenied":"Du har ikkje tilgang til denne blokka","pad.wrongPassword":"Feil passord","pad.settings.padSettings":"Blokkinnstillingar","pad.settings.myView":"Mi visning","pad.settings.stickychat":"Prat alltid synleg","pad.settings.colorcheck":"Forfattarfargar","pad.settings.linenocheck":"Linjenummer","pad.settings.fontType":"Skrifttype:","pad.settings.fontType.normal":"Vanleg","pad.settings.fontType.monospaced":"Fast breidd","pad.settings.globalView":"Global visning","pad.settings.language":"Språk:","pad.importExport.import_export":"Importer/eksporter","pad.importExport.import":"Last opp tekstfiler eller dokument","pad.importExport.importSuccessful":"Vellukka!","pad.importExport.export":"Eksporter blokka som:","pad.importExport.exporthtml":"HTML","pad.importExport.exportplain":"Rein tekst","pad.importExport.exportword":"Microsoft Word","pad.importExport.exportpdf":"PDF","pad.importExport.exportopen":"ODF (Open Document Format)","pad.importExport.exportdokuwiki":"DokuWiki","pad.importExport.abiword.innerHTML":"Du kan berre importera frå rein tekst- eller HTML-format. Ver venleg og installer Abiword om du treng meir avanserte importfunksjonar.","pad.modals.connected":"Tilkopla.","pad.modals.reconnecting":"Gjenopprettar tilkoplinga til blokka di …","pad.modals.forcereconnect":"Tving gjentilkopling","pad.modals.uderdup":"Opna i eit anna vindauge","pad.modals.userdup.explanation":"Det ser ut som om denne blokka er open i meir enn eitt nettlesarvindauge på denne maskinen.","pad.modals.userdup.advice":"Kopla til om att for å bruka dette vinduage i staden.","pad.modals.unauth":"Ikkje tillate","pad.modals.unauth.explanation":"Rettane dine blei endra under visning av denne sida. Prøv å kopla til på nytt.","pad.modals.looping":"Fråkopla.","pad.modals.looping.explanation":"Det oppstod kommunikasjonsproblem med synkroniseringstenaren.","pad.modals.looping.cause":"Kanskje du kopla til gjennom ein inkompatibel brannmur eller mellomtenar.","pad.modals.initsocketfail":"Klarte ikkje å nå tenaren.","pad.modals.initsocketfail.explanation":"Klarte ikkje å kopla til synkroniseringstenaren.","pad.modals.initsocketfail.cause":"Dette er sannsynlegvis på grunn av eit problem med nettlesaren eller internettilkoplinga di.","pad.modals.slowcommit":"Fråkopla.","pad.modals.slowcommit.explanation":"Tenaren svarer ikkje.","pad.modals.slowcommit.cause":"Dette kan vera på grunn av problem med nettilkoplinga.","pad.modals.deleted":"Sletta.","pad.modals.deleted.explanation":"Denne blokka er fjerna.","pad.modals.disconnected":"Du blei fråkopla.","pad.modals.disconnected.explanation":"Mista tilkoplinga til tenaren","pad.modals.disconnected.cause":"Tenaren er ikkje tilgjengeleg. Ver venleg og gi oss ei melding om dette skjer fleire gonger.","pad.share":"Del denne blokka","pad.share.readonly":"Skriveverna","pad.share.link":"Lenkje","pad.share.emebdcode":"URL for innebygging","pad.chat":"Prat","pad.chat.title":"Opna pratepanelet for denne blokka.","timeslider.pageTitle":"Tidslinje for {{appTitle}}","timeslider.toolbar.returnbutton":"Attende til blokka","timeslider.toolbar.authors":"Forfattarar:","timeslider.toolbar.authorsList":"Ingen forfattarar","timeslider.exportCurrent":"Eksporter denne utgåva som:","timeslider.version":"Utgåve {{version}}","timeslider.saved":"Lagra {{day}}. {{month}}, {{year}}","timeslider.dateformat":"{{day}}/{{month}}/{{year}} {{hours}}.{{minutes}}.{{seconds}}","timeslider.month.january":"januar","timeslider.month.february":"februar","timeslider.month.march":"mars","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":"desember","pad.savedrevs.marked":"Denne utgåva er no merkt som ei lagra utgåve","pad.userlist.entername":"Skriv namnet ditt","pad.userlist.unnamed":"utan namn","pad.userlist.guest":"Gjest","pad.userlist.deny":"Nekt","pad.userlist.approve":"Godkjenn","pad.editbar.clearcolors":"Fjern forfattarfargar i heile dokumentet?","pad.impexp.importbutton":"Importer no","pad.impexp.importing":"Importerer …","pad.impexp.confirmimport":"Viss du importerer ei fil, vil denne blokka bli overskriven. Er du sikker på at du vil fortsetja?","pad.impexp.convertFailed":"Me klarte ikkje å importera denne fila. Ver venleg og bruk eit anna dokumentformat, eller kopier og lim inn for hand.","pad.impexp.uploadFailed":"Feil ved opplasting, ver venleg og prøv om att","pad.impexp.importfailed":"Feil ved importering","pad.impexp.copypaste":"Ver venleg og kopier og lim inn","pad.impexp.exportdisabled":"Eksport av {{type}} er skrudd av. Ver venleg og ta kontakt med systemadministrator for meir informasjon."} \ No newline at end of file diff --git a/src/locales/pl.json b/src/locales/pl.json new file mode 100644 index 00000000..f03d80f8 --- /dev/null +++ b/src/locales/pl.json @@ -0,0 +1 @@ +{"index.newPad":"Nowy Dokument","index.createOpenPad":"lub stwórz/otwórz dokument o nazwie:","pad.toolbar.bold.title":"Pogrubienie (Ctrl-B)","pad.toolbar.italic.title":"Kursywa (Ctrl-I)","pad.toolbar.underline.title":"Podkreślenie (Ctrl-U)","pad.toolbar.strikethrough.title":"Przekreślenie","pad.toolbar.ol.title":"Lista uporządkowana","pad.toolbar.ul.title":"Lista nieuporządkowana","pad.toolbar.indent.title":"Wcięcie","pad.toolbar.unindent.title":"Zmniejsz wcięcie","pad.toolbar.undo.title":"Cofnij (Ctrl-Z)","pad.toolbar.redo.title":"Ponów (Ctrl-Y)","pad.toolbar.clearAuthorship.title":"Usuń kolory autorów","pad.toolbar.import_export.title":"Import/eksport z/do różnych formatów plików","pad.toolbar.timeslider.title":"Oś czasu","pad.toolbar.savedRevision.title":"Zapisane wersje","pad.toolbar.settings.title":"Ustawienia","pad.toolbar.embed.title":"Umieść ten Notatnik","pad.toolbar.showusers.title":"Pokaż użytkowników","pad.colorpicker.save":"Zapisz","pad.colorpicker.cancel":"Anuluj","pad.loading":"Ładowanie...","pad.passwordRequired":"Musisz podać hasło aby uzyskać dostęp do tego dokumentu","pad.permissionDenied":"Nie masz uprawnień dostępu do tego dokumentu","pad.wrongPassword":"Nieprawidłowe hasło","pad.settings.padSettings":"Ustawienia dokumentu","pad.settings.myView":"Mój widok","pad.settings.stickychat":"Czat zawsze na ekranie","pad.settings.colorcheck":"Kolory autorstwa","pad.settings.linenocheck":"Numery linii","pad.settings.fontType":"Rodzaj czcionki:","pad.settings.fontType.normal":"Normalna","pad.settings.fontType.monospaced":"Monospace","pad.settings.globalView":"Widok ogólny","pad.settings.language":"Język:","pad.importExport.import_export":"Import/eksport","pad.importExport.import":"Prześlij dowolny plik tekstowy lub dokument","pad.importExport.importSuccessful":"Sukces!","pad.importExport.export":"Eksportuj bieżący dokument jako:","pad.importExport.exporthtml":"HTML","pad.importExport.exportplain":"Zwykły tekst","pad.importExport.exportword":"Microsoft Word","pad.importExport.exportpdf":"PDF","pad.importExport.exportopen":"ODF (Open Document Format)","pad.importExport.exportdokuwiki":"DokuWiki","pad.importExport.abiword.innerHTML":"Możesz importować pliki tylko w formacie zwykłego tekstu lub html. Aby umożliwić bardziej zaawansowane funkcje importu, zainstaluj abiword.","pad.modals.connected":"Połączony.","pad.modals.reconnecting":"Ponowne łączenie z dokumentem...","pad.modals.forcereconnect":"Wymuś ponowne połączenie","pad.modals.uderdup":"Otwarty w innym oknie","pad.modals.userdup.explanation":"Ten dokument prawdopodobnie został otwarty w więcej niż jednym oknie przeglądarki.","pad.modals.userdup.advice":"Połącz ponownie przy użyciu tego okna.","pad.modals.unauth":"Brak autoryzacji","pad.modals.unauth.explanation":"Twoje uprawnienia uległy zmianie podczas przeglądania tej strony. Spróbuj ponownie się połączyć.","pad.modals.looping":"Rozłączony.","pad.modals.looping.explanation":"Wystąpiły problemy z komunikacją z serwerem synchronizacji.","pad.modals.looping.cause":"Być może jesteś połączony przez niezgodną zaporę lub serwer proxy.","pad.modals.initsocketfail":"Serwer jest nieosiągalny.","pad.modals.initsocketfail.explanation":"Nie udało się połączyć z serwerem synchronizacji.","pad.modals.initsocketfail.cause":"Przyczyną są prawdopodobnie problemy z przeglądarka lub połączeniem z internetem.","pad.modals.slowcommit":"Rozłączony.","pad.modals.slowcommit.explanation":"Serwer nie odpowiada.","pad.modals.slowcommit.cause":"Może być to spowodowane problemami z Twoim połączeniem z siecią.","pad.modals.deleted":"Usunięto.","pad.modals.deleted.explanation":"Ten dokument został usunięty.","pad.modals.disconnected":"Zostałeś rozłączony.","pad.modals.disconnected.explanation":"Utracono połączenie z serwerem","pad.modals.disconnected.cause":"Serwer może być niedostępny. Poinformuj nas jeżeli problem będzie się powtarzał.","pad.share":"Udostępnij ten dokument","pad.share.readonly":"Tylko do odczytu","pad.share.link":"Link","pad.share.emebdcode":"Kod do umieszczenia","pad.chat":"Czat","pad.chat.title":"Otwórz czat dla tego dokumentu.","timeslider.pageTitle":"Oś czasu {{appTitle}}","timeslider.toolbar.returnbutton":"Powróć do dokumentu","timeslider.toolbar.authors":"Autorzy:","timeslider.toolbar.authorsList":"Brak autorów","timeslider.exportCurrent":"Eksportuj bieżącą wersję jako:","timeslider.version":"Wersja {{version}}","timeslider.saved":"Zapisano {{day}} {{month}} {{year}}","timeslider.dateformat":"{{year}}-{{month}}-{{day}} {{hours}}:{{minutes}}:{{seconds}}","timeslider.month.january":"Styczeń","timeslider.month.february":"Luty","timeslider.month.march":"Marzec","timeslider.month.april":"Kwiecień","timeslider.month.may":"Maj","timeslider.month.june":"Czerwiec","timeslider.month.july":"Lipiec","timeslider.month.august":"Sierpień","timeslider.month.september":"Wrzesień","timeslider.month.october":"Październik","timeslider.month.november":"Listopad","timeslider.month.december":"Grudzień","pad.savedrevs.marked":"Ta wersja została właśnie oznaczona jako zapisana.","pad.userlist.entername":"Wprowadź swoją nazwę","pad.userlist.unnamed":"bez nazwy","pad.userlist.guest":"Gość","pad.userlist.deny":"Zabroń","pad.userlist.approve":"Akceptuj","pad.editbar.clearcolors":"Wyczyścić kolory autorstwa w całym dokumencie?","pad.impexp.importbutton":"Importuj teraz","pad.impexp.importing":"Importowanie...","pad.impexp.confirmimport":"Importowanie pliku spowoduje zastąpienie bieżącego tekstu. Czy na pewno chcesz kontynuować?","pad.impexp.convertFailed":"Nie byliśmy w stanie zaimportować tego pliku. Proszę użyć innego formatu dokumentu lub skopiować i wkleić ręcznie","pad.impexp.uploadFailed":"Przesyłanie nie powiodło się, proszę spróbować jeszcze raz","pad.impexp.importfailed":"Importowanie nie powiodło się","pad.impexp.copypaste":"Proszę skopiować i wkleić","pad.impexp.exportdisabled":"Eksport do formatu {{type}} jest wyłączony. Proszę skontaktować się z administratorem aby uzyskać więcej szczegółów."} \ No newline at end of file diff --git a/src/locales/ps.json b/src/locales/ps.json new file mode 100644 index 00000000..574fb1ad --- /dev/null +++ b/src/locales/ps.json @@ -0,0 +1 @@ +{"pad.toolbar.bold.title":"زغرد (Ctrl-B)","pad.toolbar.italic.title":"رېوند (Ctrl-I)","pad.toolbar.undo.title":"ناکړل (Ctrl-Z)","pad.toolbar.redo.title":"بياکړل (Ctrl-Y)","pad.toolbar.settings.title":"امستنې","pad.colorpicker.save":"خوندي کول","pad.colorpicker.cancel":"ناګارل","pad.loading":"برسېرېدنې کې دی...","pad.settings.myView":"زما کتنه","pad.settings.fontType":"ليکبڼې ډول:","pad.settings.fontType.normal":"نورمال","pad.settings.fontType.monospaced":"مونوسپېس","pad.settings.language":"ژبه:","pad.importExport.exporthtml":"اچ ټي ام اېل","pad.importExport.exportplain":"ساده متن","pad.importExport.exportword":"مايکروسافټ ورډ","pad.importExport.exportpdf":"پي ډي اېف","pad.importExport.exportopen":"ODF (اوپن ډاکومنټ فارمټ)","pad.modals.deleted":"ړنګ شو.","pad.share.readonly":"يوازې لوستنه","pad.share.link":"تړنه","pad.share.emebdcode":"يو آر اېل ټومبل","pad.chat":"بانډار","timeslider.toolbar.authors":"ليکوال:","timeslider.month.january":"جنوري","timeslider.month.february":"فبروري","timeslider.month.march":"مارچ","timeslider.month.april":"اپرېل","timeslider.month.may":"مۍ","timeslider.month.june":"جون","timeslider.month.july":"جولای","timeslider.month.august":"اګسټ","timeslider.month.september":"سېپتمبر","timeslider.month.october":"اکتوبر","timeslider.month.november":"نومبر","timeslider.month.december":"ډيسمبر"} \ No newline at end of file diff --git a/src/locales/pt.json b/src/locales/pt.json new file mode 100644 index 00000000..e96cb77e --- /dev/null +++ b/src/locales/pt.json @@ -0,0 +1 @@ +{"index.newPad":"Novo Pad","index.createOpenPad":"ou criar/abrir um Pad com o nome:","pad.toolbar.bold.title":"Negrito (Ctrl-B)","pad.toolbar.italic.title":"Itálico (Ctrl-I)","pad.toolbar.underline.title":"Sublinhado (Ctrl-U)","pad.toolbar.ol.title":"Lista numerada","pad.toolbar.ul.title":"Lista","pad.toolbar.undo.title":"Desfazer (Ctrl-Z)","pad.toolbar.redo.title":"Refazer (Ctrl-Y)","pad.toolbar.clearAuthorship.title":"Limpar cores de autoria","pad.toolbar.import_export.title":"Importar/exportar de/para diferentes formatos de ficheiro","pad.toolbar.timeslider.title":"Linha de tempo","pad.toolbar.savedRevision.title":"Versões gravadas","pad.toolbar.settings.title":"Configurações","pad.toolbar.embed.title":"Incorporar este Pad","pad.toolbar.showusers.title":"Mostrar os utilizadores neste Pad","pad.colorpicker.save":"Gravar","pad.colorpicker.cancel":"Cancelar","pad.loading":"A carregar…","pad.settings.padSettings":"Configurações do Pad","pad.settings.myView":"Minha vista","pad.settings.colorcheck":"Cores de autoria","pad.settings.linenocheck":"Números de linha","pad.settings.fontType":"Tipo de letra:","pad.settings.fontType.normal":"Normal","pad.settings.fontType.monospaced":"Monoespaçada","pad.settings.globalView":"Vista global","pad.settings.language":"Língua:","pad.importExport.import_export":"Importar/Exportar","pad.importExport.import":"Carregar qualquer ficheiro de texto ou documento","pad.importExport.export":"Exportar o Pad actual como:","pad.importExport.exporthtml":"HTML","pad.importExport.exportplain":"Texto simples","pad.importExport.exportword":"Microsoft Word","pad.importExport.exportpdf":"PDF","pad.importExport.exportopen":"ODF (Open Document Format)","pad.importExport.exportdokuwiki":"DokuWiki","pad.modals.connected":"Ligado.","pad.modals.reconnecting":"Reconectando-se ao seu bloco…","pad.modals.forcereconnect":"Forçar reconexão","pad.modals.uderdup":"Aberto noutra janela","timeslider.month.january":"Janeiro","timeslider.month.february":"Fevereiro","timeslider.month.march":"Março","timeslider.month.april":"Abril��","timeslider.month.may":"Maio","timeslider.month.june":"Junho","timeslider.month.july":"Julho","timeslider.month.august":"Agosto","timeslider.month.september":"Setembro","timeslider.month.october":"Outubro","timeslider.month.november":"Novembro","timeslider.month.december":"Dezembro"} \ No newline at end of file diff --git a/src/locales/ru.json b/src/locales/ru.json new file mode 100644 index 00000000..6fa4880b --- /dev/null +++ b/src/locales/ru.json @@ -0,0 +1 @@ +{"index.newPad":"Создать","index.createOpenPad":"или создать/открыть документ с именем:","pad.toolbar.bold.title":"полужирный (Ctrl-B)","pad.toolbar.italic.title":"курсив (Ctrl-I)","pad.toolbar.underline.title":"подчеркивание (Ctrl-U)","pad.toolbar.strikethrough.title":"зачеркивание","pad.toolbar.ol.title":"Упорядоченный список","pad.toolbar.ul.title":"Неупорядоченный список","pad.toolbar.indent.title":"Отступ","pad.toolbar.unindent.title":"Выступ","pad.toolbar.undo.title":"Отменить (Ctrl-Z)","pad.toolbar.redo.title":"Вернуть (Ctrl-Y)","pad.toolbar.clearAuthorship.title":"Очистить цвета документа","pad.toolbar.import_export.title":"Импорт/экспорт с использованием различных форматов файлов","pad.toolbar.timeslider.title":"Шкала времени","pad.toolbar.savedRevision.title":"Сохраненные версии","pad.toolbar.settings.title":"Настройки","pad.toolbar.embed.title":"Встроить этот документ","pad.toolbar.showusers.title":"Показать пользователей в документе","pad.colorpicker.save":"Сохранить","pad.colorpicker.cancel":"Отмена","pad.loading":"Загрузка...","pad.wrongPassword":"Неправильный пароль","pad.settings.padSettings":"Настройки документа","pad.settings.myView":"Мой вид","pad.settings.stickychat":"Всегда отображать чат","pad.settings.colorcheck":"Цвета документа","pad.settings.linenocheck":"Номера строк","pad.settings.fontType":"Тип шрифта:","pad.settings.fontType.normal":"Обычный","pad.settings.fontType.monospaced":"Моноширинный","pad.settings.globalView":"Общий вид","pad.settings.language":"Язык:","pad.importExport.import_export":"Импорт/экспорт","pad.importExport.import":"Загрузить любой текстовый файл или документ","pad.importExport.importSuccessful":"Успешно!","pad.importExport.export":"Экспортировать текущий документ как:","pad.importExport.exporthtml":"HTML","pad.importExport.exportplain":"Обычный текст","pad.importExport.exportword":"Microsoft Word","pad.importExport.exportpdf":"PDF","pad.importExport.exportopen":"ODF (документ OpenOffice)","pad.importExport.exportdokuwiki":"DokuWiki","pad.modals.connected":"Подключен.","pad.modals.reconnecting":"Повторное подключение к вашему документу","pad.modals.forcereconnect":"Принудительное переподключение","pad.modals.uderdup":"Открыто в другом окне","pad.modals.userdup.explanation":"Документ, возможно, открыт более чем в одном окне браузера на этом компьютере.","pad.modals.userdup.advice":"Повторно подключить с использованием этого окна.","pad.modals.unauth":"Не авторизован","pad.modals.unauth.explanation":"Ваши разрешения были изменены во время просмотра этой страницы. Попробуйте подключиться повторно.","pad.modals.looping":"Отключен.","pad.modals.looping.explanation":"Проблемы связи с сервером синхронизации.","pad.modals.looping.cause":"Возможно, вы подключились через несовместимый брандмауэр или прокси.","pad.modals.initsocketfail":"Сервер недоступен.","pad.modals.initsocketfail.explanation":"Не удалось подключиться к серверу синхронизации.","pad.modals.initsocketfail.cause":"Вероятно, это вызвано проблемами с вашим браузером или интернет-соединением.","pad.modals.slowcommit":"Отключен.","pad.modals.slowcommit.explanation":"Сервер не отвечает.","pad.modals.slowcommit.cause":"Это может быть вызвано проблемами с сетевым подключением.","pad.modals.deleted":"Удален.","pad.modals.deleted.explanation":"Этот документ был удален.","pad.modals.disconnected":"Соединение разорвано.","pad.modals.disconnected.explanation":"Подключение к серверу потеряно","pad.modals.disconnected.cause":"Сервер, возможно, недоступен. Сообщите нам, если проблема повторится.","pad.share":"Поделиться","pad.share.readonly":"Только чтение","pad.share.link":"Ссылка","pad.share.emebdcode":"Вставить URL","pad.chat":"Чат","pad.chat.title":"Открыть чат для этого документа.","timeslider.pageTitle":"Временная шкала {{appTitle}}","timeslider.toolbar.returnbutton":"К документу","timeslider.toolbar.authors":"Авторы:","timeslider.toolbar.authorsList":"Нет авторов","timeslider.exportCurrent":"Экспортировать текущую версию как:","timeslider.version":"Версия {{version}}","timeslider.saved":"Сохранено {{day}}.{{month}}.{{year}}","pad.userlist.entername":"Введите ваше имя","pad.userlist.guest":"Гость","pad.impexp.importbutton":"Импортировать сейчас","pad.impexp.importing":"Импортирование…","pad.impexp.uploadFailed":"Загрузка не удалась, пожалуйста, попробуйте ещё раз","pad.impexp.importfailed":"Ошибка при импортировании"} \ No newline at end of file diff --git a/src/locales/sq.json b/src/locales/sq.json new file mode 100644 index 00000000..6c64c053 --- /dev/null +++ b/src/locales/sq.json @@ -0,0 +1 @@ +{"index.newPad":"Bllok i Ri","index.createOpenPad":"ose krijoni/hapni një Bllok me emrin:","pad.toolbar.bold.title":"Të trasha (Ctrl-B)","pad.toolbar.italic.title":"Të pjerrëta (Ctrl-I)","pad.toolbar.underline.title":"Të nënvizuara (Ctrl-U)","pad.toolbar.strikethrough.title":"Hequrvije","pad.toolbar.ol.title":"Listë e renditur","pad.toolbar.ul.title":"Listë e parenditur","pad.toolbar.indent.title":"Brendazi","pad.toolbar.unindent.title":"Jashtazi","pad.toolbar.undo.title":"Zhbëje (Ctrl-Z)","pad.toolbar.redo.title":"Ribëje (Ctrl-Y)","pad.toolbar.clearAuthorship.title":"Hiq Ngjyra Autorësish","pad.toolbar.import_export.title":"Importoni/Eksportoni nga/në formate të tjera kartelash","pad.toolbar.timeslider.title":"Rrjedha kohore","pad.toolbar.savedRevision.title":"Rishikime të Ruajtura","pad.toolbar.settings.title":"Rregullime","pad.toolbar.embed.title":"Trupëzojeni këtë bllok","pad.toolbar.showusers.title":"Shfaq përdoruesit në këtë bllok","pad.colorpicker.save":"Ruaje","pad.colorpicker.cancel":"Anuloje","pad.loading":"Po ngarkohet...","pad.passwordRequired":"Ju duhet një fjalëkalim që të mund të përdorni këtë bllok","pad.permissionDenied":"Nuk keni leje të hyni në këtë bllok","pad.wrongPassword":"Fjalëkalimi juaj qe gabim","pad.settings.padSettings":"Rregullime blloku","pad.settings.myView":"Pamja Ime","pad.settings.stickychat":"Fjalosje përherë në ekran","pad.settings.colorcheck":"Ngjyra autorësish","pad.settings.linenocheck":"Numra rreshtash","pad.settings.fontType":"Lloj shkronjash:","pad.settings.fontType.normal":"Normale","pad.settings.fontType.monospaced":"Monospace","pad.settings.globalView":"Pamje Globale","pad.settings.language":"Gjuhë:","pad.importExport.import_export":"Import/Eksport","pad.importExport.import":"Ngarkoni cilëndo kartelë teksti ose dokument","pad.importExport.importSuccessful":"Me sukses!","pad.importExport.export":"Eksportojeni bllokun e tanishëm si:","pad.importExport.exporthtml":"HTML","pad.importExport.exportplain":"Tekst të thjeshtë","pad.importExport.exportword":"Microsoft Word","pad.importExport.exportpdf":"PDF","pad.importExport.exportopen":"ODF (Open Document Format)","pad.importExport.exportdokuwiki":"DokuWiki","pad.importExport.abiword.innerHTML":"Mund të importoni vetëm prej formati tekst i thjeshtë ose html. Për veçori më të përparuara importimi, ju lutemi, instaloni Abiword-in.","pad.modals.connected":"I lidhur.","pad.modals.reconnecting":"Po rilidheni te blloku juaj..","pad.modals.forcereconnect":"Rilidhje e detyruar","pad.modals.uderdup":"I hapur në një tjetër dritare","pad.modals.userdup.explanation":"Ky bllok duket se gjendet i hapur në më shumë se një dritare shfletuesi në këtë kompjuter.","pad.modals.userdup.advice":"Rilidhu që të përdoret kjo dritare, më mirë.","pad.modals.unauth":"I paautorizuar","pad.modals.unauth.explanation":"Ndërkohë që shihnit këtë dritare, lejet tuaja kanë ndryshuar. Provoni të rilidheni.","pad.modals.looping":"I shkëputur.","pad.modals.looping.explanation":"Ka probleme komunikimi me shërbyesin e njëkohësimit.","pad.modals.looping.cause":"Ndoshta jeni lidhur përmes një firewall-i ose ndërmjetësi të papërputhshëm.","pad.modals.initsocketfail":"Nuk kapet dot shërbyesi.","pad.modals.initsocketfail.explanation":"Nuk u lidh dot te shërbyesi i njëkohësimit.","pad.modals.initsocketfail.cause":"Ka gjasa që kjo vjen për shkak të një problemi me shfletuesin tuaj ose lidhjen tuaj në internet.","pad.modals.slowcommit":"I shkëputur.","pad.modals.slowcommit.explanation":"Shërbyesi nuk po përgjigjet.","pad.modals.slowcommit.cause":"Kjo mund të vijë për shkak problemesh lidhjeje me rrjetin.","pad.modals.deleted":"I fshirë.","pad.modals.deleted.explanation":"Ky bllok është hequr.","pad.modals.disconnected":"Jeni shkëputur.","pad.modals.disconnected.explanation":"U pre lidhja me shërbyesin","pad.modals.disconnected.cause":"Shërbyesi mund të mos jetë në punë. Ju lutemi, na njoftoni, nëse kjo vazhdon të ndodhë.","pad.share":"Ndajeni këtë bllok me të tjerët","pad.share.readonly":"Vetëm për lexim","pad.share.link":"Lidhje","pad.share.emebdcode":"URL trupëzimi","pad.chat":"Fjalosje","pad.chat.title":"Hapni fjalosjen për këtë bllok.","timeslider.pageTitle":"Rrjedhë kohore e {{appTitle}}","timeslider.toolbar.returnbutton":"Rikthehuni te blloku","timeslider.toolbar.authors":"Autorë:","timeslider.toolbar.authorsList":"Pa Autorë","timeslider.exportCurrent":"Eksportojeni versionin e tanishëm si:","timeslider.version":"Versioni {{version}}","timeslider.saved":"Ruajtur më {{month}} {{day}}, {{year}}","timeslider.dateformat":"{{month}}/{{day}}/{{year}} {{hours}}:{{minutes}}:{{seconds}}","timeslider.month.january":"Janar","timeslider.month.february":"Shkurt","timeslider.month.march":"Mars","timeslider.month.april":"Prill","timeslider.month.may":"Maj","timeslider.month.june":"Qershor","timeslider.month.july":"Korrik","timeslider.month.august":"Gusht","timeslider.month.september":"Shtator","timeslider.month.october":"Tetor","timeslider.month.november":"Nëntor","timeslider.month.december":"Dhjetor","pad.savedrevs.marked":"Ky rishikim tani është shënuar si rishikim i ruajtur","pad.userlist.entername":"Jepni emrin tuaj","pad.userlist.unnamed":"pa emër","pad.userlist.guest":"Vizitor","pad.userlist.deny":"Mohoje","pad.userlist.approve":"Miratoje","pad.editbar.clearcolors":"Të hiqen ngjyra autorësish në krejt dokumentin?","pad.impexp.importbutton":"Importoje Tani","pad.impexp.importing":"Po importohet...","pad.impexp.confirmimport":"Importimi i një kartele do të mbishkruajë tekstin e tanishëm të bllokut. Jeni i sigurt se doni të vazhdohet?","pad.impexp.convertFailed":"Nuk qemë në gjendje ta importonim këtë kartelë. Ju lutemi, përdorni një format tjetër dokumentesh ose kopjojeni dhe hidheni dorazi","pad.impexp.uploadFailed":"Ngarkimi dështoi, ju lutemi, riprovoni","pad.impexp.importfailed":"Importimi dështoi","pad.impexp.copypaste":"Ju lutemi, kopjojeni dhe ngjiteni","pad.impexp.exportdisabled":"Eksportimi në formatin {{type}} është i çaktivizuar. Për hollësi, ju lutemi, lidhuni me administratorin e sistemit."} \ No newline at end of file diff --git a/src/locales/sv.json b/src/locales/sv.json new file mode 100644 index 00000000..46731a1c --- /dev/null +++ b/src/locales/sv.json @@ -0,0 +1 @@ +{"index.newPad":"Nytt block","index.createOpenPad":"eller skapa/öppna ett block med namnet:","pad.toolbar.bold.title":"Fet (Ctrl-B)","pad.toolbar.italic.title":"Kursiv (Ctrl-I)","pad.toolbar.underline.title":"Understruken (Ctrl-U)","pad.toolbar.strikethrough.title":"Genomstruken","pad.toolbar.ol.title":"Numrerad lista","pad.toolbar.ul.title":"Ta bort numrerad lista","pad.toolbar.indent.title":"Öka indrag","pad.toolbar.unindent.title":"Minska indrag","pad.toolbar.undo.title":"Ångra (Ctrl-Z)","pad.toolbar.redo.title":"Gör om (Ctrl-Y)","pad.toolbar.clearAuthorship.title":"Rensa författarfärger","pad.toolbar.import_export.title":"Importera/exportera från/till olika filformat","pad.toolbar.timeslider.title":"Tidsreglage","pad.toolbar.savedRevision.title":"Sparade revisioner","pad.toolbar.settings.title":"Inställningar","pad.toolbar.embed.title":"Bädda in detta block","pad.toolbar.showusers.title":"Visa användarna på detta block","pad.colorpicker.save":"Spara","pad.colorpicker.cancel":"Avbryt","pad.loading":"Läser in...","pad.passwordRequired":"Du behöver ett lösenord för att få tillgång till detta block","pad.permissionDenied":"Du har inte behörighet att få tillgång till detta block","pad.wrongPassword":"Ditt lösenord är fel","pad.settings.padSettings":"Blockinställningar","pad.settings.myView":"Min vy","pad.settings.stickychat":"Chatten alltid på skärmen","pad.settings.colorcheck":"Författarskapsfärger","pad.settings.linenocheck":"Radnummer","pad.settings.fontType":"Typsnitt:","pad.settings.fontType.normal":"Normal","pad.settings.fontType.monospaced":"Fast breddsteg","pad.settings.globalView":"Global vy","pad.settings.language":"Språk:","pad.importExport.import_export":"Importera/exportera","pad.importExport.import":"Ladda upp en textfil eller dokument","pad.importExport.importSuccessful":"Åtgärden slutfördes!","pad.importExport.export":"Export aktuellt block som:","pad.importExport.exporthtml":"HTML","pad.importExport.exportplain":"Oformaterad 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":"Du kan endast importera från oformaterad text eller html-format. För mer avancerade importeringsfunktioner, var god installera abiword.","pad.modals.connected":"Ansluten.","pad.modals.reconnecting":"Återansluter till ditt block...","pad.modals.forcereconnect":"Tvinga återanslutning","pad.modals.uderdup":"Öppnas i ett nytt fönster","pad.modals.userdup.explanation":"Detta block verkar vara öppet i mer än ett fönster på denna dator.","pad.modals.userdup.advice":"Återanslut för att använda detta fönster istället.","pad.modals.unauth":"Inte godkänd","pad.modals.unauth.explanation":"Din behörighet ändrades medan du visar denna sida. Försök att återansluta.","pad.modals.looping":"Frånkopplad.","pad.modals.looping.explanation":"Kommunikationsproblem med synkroniseringsservern har uppstått.","pad.modals.looping.cause":"Kanske du är ansluten via en inkompatibel brandvägg eller proxy.","pad.modals.initsocketfail":"Servern inte kan nås.","pad.modals.initsocketfail.explanation":"Det gick inte att ansluta till synkroniseringsservern.","pad.modals.initsocketfail.cause":"Detta är beror troligen på ett problem med din webbläsare eller din internetanslutning.","pad.modals.slowcommit":"Frånkopplad.","pad.modals.slowcommit.explanation":"Servern svarar inte.","pad.modals.slowcommit.cause":"Detta kan bero på problem med nätverksanslutningen.","pad.modals.deleted":"Raderad.","pad.modals.deleted.explanation":"Detta block har tagits bort.","pad.modals.disconnected":"Du har kopplats från.","pad.modals.disconnected.explanation":"Anslutningen till servern avbröts","pad.modals.disconnected.cause":"Servern kanske inte är tillgänglig. Var god meddela oss om detta fortsätter att hända.","pad.share":"Dela detta block","pad.share.readonly":"Skrivskyddad","pad.share.link":"Länk","pad.share.emebdcode":"Bädda in URL","pad.chat":"Chatt","pad.chat.title":"Öppna chatten för detta block.","timeslider.pageTitle":"Tidsreglage för {{appTitle}}","timeslider.toolbar.returnbutton":"Återvänd till blocket","timeslider.toolbar.authors":"Författare:","timeslider.toolbar.authorsList":"Ingen författare","timeslider.exportCurrent":"Exportera aktuell version som:","timeslider.version":"Version {{version}}","timeslider.saved":"Sparades den {{day}} {{month}} {{year}}","timeslider.dateformat":"{{day}}/{{month}}/{{year}} {{hours}}:{{minutes}}:{{seconds}}","timeslider.month.january":"januari","timeslider.month.february":"februari","timeslider.month.march":"mars","timeslider.month.april":"april","timeslider.month.may":"maj","timeslider.month.june":"juni","timeslider.month.july":"juli","timeslider.month.august":"augusti","timeslider.month.september":"september","timeslider.month.october":"oktober","timeslider.month.november":"november","timeslider.month.december":"december","pad.savedrevs.marked":"Denna revision är nu markerad som en sparad revision","pad.userlist.entername":"Ange ditt namn","pad.userlist.unnamed":"namnlös","pad.userlist.guest":"Gäst","pad.userlist.deny":"Neka","pad.userlist.approve":"Godkänn","pad.editbar.clearcolors":"Rensa författarfärger på hela dokumentet?","pad.impexp.importbutton":"Importera nu","pad.impexp.importing":"Importerar...","pad.impexp.confirmimport":"Att importera en fil kommer att skriva över den aktuella texten i blocket. Är du säker på att du vill fortsätta?","pad.impexp.convertFailed":"Vi kunde inte importera denna fil. Var god använd ett annat dokumentformat eller kopiera och klistra in den manuellt","pad.impexp.uploadFailed":"Uppladdningen misslyckades, var god försök igen","pad.impexp.importfailed":"Importering misslyckades","pad.impexp.copypaste":"Var god kopiera och klistra in","pad.impexp.exportdisabled":"Exportering av formatet {{type}} är inaktiverad. Var god kontakta din systemadministratör för mer information."} \ No newline at end of file diff --git a/src/locales/te.json b/src/locales/te.json new file mode 100644 index 00000000..a84d4780 --- /dev/null +++ b/src/locales/te.json @@ -0,0 +1 @@ +{"index.newPad":"కొత్త పలక","index.createOpenPad":"ఒక పేరుతో పలకని సృష్టించండి లేదా అదే పేరుతో ఉన్న పలకని తెరవండి","pad.toolbar.bold.title":"మందం","pad.toolbar.italic.title":"వాలు అక్షరాలు","pad.toolbar.underline.title":"క్రిందగీత","pad.toolbar.strikethrough.title":"కొట్టివేత","pad.toolbar.ol.title":"నిర్ధేశింపబడిన జాబితా","pad.toolbar.ul.title":"అనిర్దేశిత జాబితా, ( క్రమపద్ధతి లేని జాబితా )","pad.toolbar.undo.title":"చేయవద్దు","pad.toolbar.redo.title":"తిరిగిచెయ్యి","pad.toolbar.clearAuthorship.title":"మూలకర్తపు వర్ణాలను తీసివేయండి","pad.toolbar.import_export.title":"భిన్నమైన రూపలావన్యాలను బయట నుండి దిగుమతి లేదా బయటకు ఎగుమతి చేయండి","pad.toolbar.timeslider.title":"పనిసమయ సూచిక పరికరం","pad.toolbar.savedRevision.title":"దాచిన పునరుచ్చరణలు","pad.toolbar.settings.title":"అమరికలు","pad.toolbar.embed.title":"ఈ పలకని పొదగించండి","pad.toolbar.showusers.title":"ఈ పలక యొక్క వినియోగదారులను చూపించు","pad.colorpicker.save":"భద్రపరచు","pad.colorpicker.cancel":"రద్దుచేయి","pad.loading":"లోడవుతోంది...","pad.settings.padSettings":"పలక అమరికలు","pad.settings.myView":"నా ఉద్దేశ్యము","pad.settings.stickychat":"తెరపైనే మాటామంతిని ఎల్లపుడు చేయుము","pad.settings.colorcheck":"రచయితలకు రంగులు","pad.settings.linenocheck":"వరుస సంఖ్యలు","pad.settings.fontType":"అక్షరశైలి రకం:","pad.settings.fontType.normal":"సాధారణ","pad.settings.fontType.monospaced":"మోనోస్పేస్","pad.settings.globalView":"బయటకి దర్శనం","pad.settings.language":"భాష","pad.importExport.import_export":"దిగుమతి/ఎగుమతి","pad.importExport.import":"పాఠము దస్త్రము లేదా పత్రమును దిగుమతి చేయుము","pad.importExport.export":"ప్రస్తుత పలకని ఈ విధముగా ఎగుమతి చేయుము:","pad.importExport.exporthtml":"హెచ్ టి ఎం ఎల్","pad.importExport.exportplain":"సాదా పాఠ్యం","pad.importExport.exportword":"మైక్రోసాఫ్ట్ వర్డ్","pad.importExport.exportpdf":"పీ డి ఎఫ్","pad.importExport.exportopen":"ఓ డి ఎఫ్ (ఓపెన్ డాక్యుమెంట్ ఫార్మాట్)","pad.importExport.exportdokuwiki":"డాక్యువికి","pad.modals.connected":"సంబంధం కుదిరింది.","pad.modals.reconnecting":"మీ పలకకు మరల సంబంధం కలుపుతుంది...","pad.modals.forcereconnect":"బలవంతంగానైనా సంబంధం కుదిరించు","pad.modals.uderdup":"మరో గవాక్షములో తెరుచుకుంది","pad.modals.userdup.explanation":"ఈ పలక, ఈ కంప్యూటర్లో ఒకటికన్న ఎక్కువ గవాక్షములలో తెరుచుకున్నట్లు అనిపిస్తుంది.","pad.modals.userdup.advice":"బదులుగా ఈ గవాక్షమును వాడడానికి మరల సంబంధం కలపండి","pad.modals.unauth":"అధికారం లేదు","pad.modals.unauth.explanation":"మీరు ఈ పుటను చూస్తూన్నప్పుడు మీ అనుమతులు మారాయి. మరల సంబంధం కలపడానికి ప్రయత్నించండి.","pad.modals.looping":"సంబంధం కోల్పోయింది.","pad.modals.slowcommit":"సంబంధం కోల్పోయింది.","pad.modals.deleted":"తొలగించబడింది ( తొలగించినది )","pad.share":"ఈ పలకను పంచుకొను","pad.share.readonly":"చదువుటకు మాత్రమే","pad.share.link":"లంకె","pad.share.emebdcode":"యు ఆర్ ఎల్ ను పొదగించండి","pad.chat":"మాటామంతి","pad.chat.title":"ఈ పలకకు మాటామంతిని తెరిచి ఉంచండి.","timeslider.pageTitle":"{{appTitle}} పనిసమయ సూచిక పరికరం","timeslider.toolbar.returnbutton":"పలకకి తిరిగి వెళ్ళండి","timeslider.toolbar.authors":"రచయితలు:","timeslider.toolbar.authorsList":"రచయితలు లేరు","timeslider.exportCurrent":"ప్రస్తుత అవతారాన్ని ఈ విధంగా ఎగుమతి చేయుము:","timeslider.month.january":"జనవరి","timeslider.month.february":"ఫిబ్రవరి","timeslider.month.march":"మార్చి","timeslider.month.april":"ఏప్రిల్","timeslider.month.may":"మే","timeslider.month.june":"జూన్","timeslider.month.july":"జూలై","timeslider.month.august":"ఆగష్టు","timeslider.month.september":"సెప్టెంబరు","timeslider.month.october":"అక్టోబరు","timeslider.month.november":"నవంబరు","timeslider.month.december":"డిసెంబరు"} \ No newline at end of file diff --git a/src/locales/uk.json b/src/locales/uk.json new file mode 100644 index 00000000..12584a5d --- /dev/null +++ b/src/locales/uk.json @@ -0,0 +1 @@ +{"index.newPad":"Створити","index.createOpenPad":"або створити/відкрити документ з назвою:","pad.toolbar.bold.title":"Напівжирний (Ctrl-B)","pad.toolbar.italic.title":"Курсив (Ctrl-I)","pad.toolbar.underline.title":"Підкреслення (Ctrl-U)","pad.toolbar.strikethrough.title":"Закреслення","pad.toolbar.ol.title":"Упорядкований список","pad.toolbar.ul.title":"Неупорядкований список","pad.toolbar.indent.title":"Відступ","pad.toolbar.unindent.title":"Виступ","pad.toolbar.undo.title":"Скасувати (Ctrl-Z)","pad.toolbar.redo.title":"Повторити (Ctrl-Y)","pad.toolbar.clearAuthorship.title":"Очистити кольори документу","pad.toolbar.import_export.title":"Імпорт/Експорт з використанням різних форматів файлів","pad.toolbar.timeslider.title":"Шкала часу","pad.toolbar.savedRevision.title":"Збережені версії","pad.toolbar.settings.title":"Налаштування","pad.toolbar.embed.title":"Вбудувати цей документ","pad.toolbar.showusers.title":"Показати користувачів цього документу","pad.colorpicker.save":"Зберегти","pad.colorpicker.cancel":"Скасувати","pad.loading":"Завантаження…","pad.passwordRequired":"Вам необхідний пароль для доступу до цього документу","pad.permissionDenied":"Ви не має дозволу для доступу до цього документу","pad.wrongPassword":"Неправильний пароль","pad.settings.padSettings":"Налаштування документу","pad.settings.myView":"Мій Вигляд","pad.settings.stickychat":"Завжди відображувати чат","pad.settings.colorcheck":"Кольори документу","pad.settings.linenocheck":"Номери рядків","pad.settings.fontType":"Тип шрифту:","pad.settings.fontType.normal":"Звичайний","pad.settings.fontType.monospaced":"Моноширинний","pad.settings.globalView":"Загальний вигляд","pad.settings.language":"Мова:","pad.importExport.import_export":"Імпорт/Експорт","pad.importExport.import":"Завантажити будь-який текстовий файл або документ","pad.importExport.importSuccessful":"Успішно!","pad.importExport.export":"Експортувати поточний документ як:","pad.importExport.exporthtml":"HTML","pad.importExport.exportplain":"Звичайний текст","pad.importExport.exportword":"Microsoft Word","pad.importExport.exportpdf":"PDF","pad.importExport.exportopen":"ODF (документ OpenOffice)","pad.importExport.exportdokuwiki":"DokuWiki","pad.importExport.abiword.innerHTML":"Ви можете імпортувати лище формати простого тексту або html. Для більш просунутих способів імпорту встановіть abiword.","pad.modals.connected":"З'єднано.","pad.modals.reconnecting":"Перепідлючення до Вашого документу..","pad.modals.forcereconnect":"Примусове перепідключення","pad.modals.uderdup":"Відкрито у іншому вікні","pad.modals.userdup.explanation":"Документ, можливо, відкрито більш ніж в одному вікні браузера на цьому комп'ютері.","pad.modals.userdup.advice":"Перепідключитись використовуючи це вікно.","pad.modals.unauth":"Не авторизовано","pad.modals.unauth.explanation":"Ваші права було змінено під час перегляду цієї сторінк. Спробуйте перепідключитись.","pad.modals.looping":"Від'єднано.","pad.modals.looping.explanation":"Проблеми зв'єзку з сервером синхронізації.","pad.modals.looping.cause":"Можливо, підключились через несумісний брандмауер або проксі-сервер.","pad.modals.initsocketfail":"Сервер недоступний.","pad.modals.initsocketfail.explanation":"Не вдалося підключитися до сервера синхронізації.","pad.modals.initsocketfail.cause":"Ймовірно, це пов'язано з Вашим браузером або інтернет-з'єднанням.","pad.modals.slowcommit":"Від'єднано.","pad.modals.slowcommit.explanation":"Сервер не відповідає.","pad.modals.slowcommit.cause":"Це може бути через проблем з підключенням до мережі.","pad.modals.deleted":"Вилучено.","pad.modals.deleted.explanation":"Цей документ було вилучено.","pad.modals.disconnected":"Вас було від'єднано.","pad.modals.disconnected.explanation":"З'єднання з сервером втрачено","pad.modals.disconnected.cause":"Сервер, можливо, недоступний. Будь ласка, повідомте нам, якщо це повторюватиметься.","pad.share":"Поділитись","pad.share.readonly":"Тільки читання","pad.share.link":"Посилання","pad.share.emebdcode":"Вставити URL","pad.chat":"Чат","pad.chat.title":"Відкрити чат для цього документу.","timeslider.pageTitle":"Часова шкала {{appTitle}}","timeslider.toolbar.returnbutton":"Повернутись до документу","timeslider.toolbar.authors":"Автори:","timeslider.toolbar.authorsList":"Немає авторів","timeslider.exportCurrent":"Експортувати поточну версію як:","timeslider.version":"Версія {{version}}","timeslider.saved":"Збережено {{month}} {{day}}, {{year}}","timeslider.dateformat":"{{month}}/{{day}}/{{year}} {{hours}}:{{minutes}}:{{seconds}}","timeslider.month.january":"Січень","timeslider.month.february":"Лютий","timeslider.month.march":"Березень","timeslider.month.april":"Квітень","timeslider.month.may":"Травень","timeslider.month.june":"Червень","timeslider.month.july":"Липень","timeslider.month.august":"Серпень","timeslider.month.september":"Вересень","timeslider.month.october":"Жовтень","timeslider.month.november":"Листопад","timeslider.month.december":"Грудень","pad.savedrevs.marked":"Цю версію помічено збереженою версією","pad.userlist.entername":"Введіть Ваше ім'я","pad.userlist.unnamed":"безіменний","pad.userlist.guest":"Гість","pad.userlist.deny":"Заборонити","pad.userlist.approve":"Підтвердити","pad.editbar.clearcolors":"Очистити кольори у всьому документі?","pad.impexp.importbutton":"Імпортувати зараз","pad.impexp.importing":"Імпорт...","pad.impexp.confirmimport":"Імпортування файлу перезапише поточний текст документу. Ви дійсно хочете продовжити?","pad.impexp.convertFailed":"Ми не можемо імпортувати цей файл. Будь ласка, використайте інший формат документу, або прямо скопіюйте та вставте","pad.impexp.uploadFailed":"Завантаження не вдалось, будь ласка, спробуйте знову","pad.impexp.importfailed":"Помилка при імпортуванні","pad.impexp.copypaste":"Будь ласка, скопіюйте та вставте","pad.impexp.exportdisabled":"Експорт у формат {{type}} вимкнено. Будь ласка, зв'яжіться із Вашим системним адміністратором за деталями."} \ No newline at end of file diff --git a/src/locales/zh-hant.json b/src/locales/zh-hant.json new file mode 100644 index 00000000..f253b9bb --- /dev/null +++ b/src/locales/zh-hant.json @@ -0,0 +1 @@ +{"index.newPad":"新Pad","index.createOpenPad":"或創建/開啟以下名稱的pad:","pad.toolbar.bold.title":"粗體(Ctrl-B)","pad.toolbar.italic.title":"斜體(Ctrl-I)","pad.toolbar.underline.title":"底線(Ctrl-U)","pad.toolbar.strikethrough.title":"刪除線","pad.toolbar.ol.title":"有序清單","pad.toolbar.ul.title":"無序清單","pad.toolbar.indent.title":"縮排","pad.toolbar.unindent.title":"凸排","pad.toolbar.undo.title":"撤銷(Ctrl-Z)","pad.toolbar.redo.title":"重做(Ctrl-Y)","pad.toolbar.clearAuthorship.title":"清除作名顏色","pad.toolbar.import_export.title":"以其他檔案格式導入/匯出","pad.toolbar.timeslider.title":"時間軸","pad.toolbar.savedRevision.title":"已儲存的修訂","pad.toolbar.settings.title":"設定","pad.toolbar.embed.title":"嵌入此pad","pad.toolbar.showusers.title":"顯示此pad的用戶","pad.colorpicker.save":"儲存","pad.colorpicker.cancel":"取消","pad.loading":"載入中...","pad.passwordRequired":"您需要密碼才能訪問這個pad","pad.permissionDenied":"你沒有訪問這個pad的權限","pad.wrongPassword":"密碼錯誤","pad.settings.padSettings":"Pad設定","pad.settings.myView":"我的視窗","pad.settings.stickychat":"永遠在屏幕上顯示聊天","pad.settings.colorcheck":"作者顏色","pad.settings.linenocheck":"行號","pad.settings.fontType":"字體類型:","pad.settings.fontType.normal":"正常","pad.settings.fontType.monospaced":"等寬","pad.settings.globalView":"所有人的視窗","pad.settings.language":"語言:","pad.importExport.import_export":"導入/匯出","pad.importExport.import":"上載任何文字檔或文檔","pad.importExport.importSuccessful":"完成!","pad.importExport.export":"匯出當前pad為:","pad.importExport.exporthtml":"HTML","pad.importExport.exportplain":"純文字","pad.importExport.exportword":"Microsoft Word","pad.importExport.exportpdf":"PDF","pad.importExport.exportopen":"ODF(開放文件格式)","pad.importExport.exportdokuwiki":"DokuWiki","pad.importExport.abiword.innerHTML":"您只可以純文字或html格式檔匯入。安裝abiword取得更多進階的匯入功能。","pad.modals.connected":"已連線。","pad.modals.reconnecting":"重新連接到您的pad...","pad.modals.forcereconnect":"強制重新連線","pad.modals.uderdup":"在另一個視窗中開啟","pad.modals.userdup.explanation":"此pad似乎在此電腦上的多個瀏覽器視窗中開啟。","pad.modals.userdup.advice":"重新連接到此視窗。","pad.modals.unauth":"未授權","pad.modals.unauth.explanation":"您的權限在查看此頁時發生更改。請嘗試重新連接。","pad.modals.looping":"已離線。","pad.modals.looping.explanation":"與同步伺服器間有通信問題。","pad.modals.looping.cause":"也許您通過一個不相容的防火牆或代理伺服器連接。","pad.modals.initsocketfail":"無法訪問伺服器。","pad.modals.initsocketfail.explanation":"無法連接到同步伺服器。","pad.modals.initsocketfail.cause":"可能是由於您的瀏覽器或您的互聯網連接的問題。","pad.modals.slowcommit":"已離線。","pad.modals.slowcommit.explanation":"伺服器沒有回應。","pad.modals.slowcommit.cause":"可能是由於網路連接問題。","pad.modals.deleted":"已刪除。","pad.modals.deleted.explanation":"此pad已被移除。","pad.modals.disconnected":"您已中斷連線。","pad.modals.disconnected.explanation":"伺服器連接曾中斷","pad.modals.disconnected.cause":"伺服器可能無法使用。若此情況持續發生,請通知我們。","pad.share":"分享此pad","pad.share.readonly":"唯讀","pad.share.link":"連結","pad.share.emebdcode":"嵌入網址","pad.chat":"聊天","pad.chat.title":"打開此pad的聊天。","timeslider.pageTitle":"{{appTitle}}時間軸","timeslider.toolbar.returnbutton":"返回到pad","timeslider.toolbar.authors":"作者:","timeslider.toolbar.authorsList":"無作者","timeslider.exportCurrent":"匯出當前版本為:","timeslider.version":"版本{{version}}","timeslider.saved":"{{year}}{{month}}{{day}}保存","timeslider.dateformat":"{{year}}{{month}}{{day}} {{hours}}:{{minutes}}:{{seconds}}","timeslider.month.january":"1月","timeslider.month.february":"2月","timeslider.month.march":"3月","timeslider.month.april":"4月","timeslider.month.may":"5月","timeslider.month.june":"6月","timeslider.month.july":"7月","timeslider.month.august":"8月","timeslider.month.september":"9月","timeslider.month.october":"10月","timeslider.month.november":"11月","timeslider.month.december":"12月","pad.savedrevs.marked":"此修訂已標記為已保存。","pad.userlist.entername":"輸入您的姓名","pad.userlist.unnamed":"未命名","pad.userlist.guest":"訪客","pad.userlist.deny":"拒絕","pad.userlist.approve":"批准","pad.editbar.clearcolors":"清除整個文檔的作者顏色嗎?","pad.impexp.importbutton":"現在匯入","pad.impexp.importing":"匯入中...","pad.impexp.confirmimport":"匯入的檔案將會覆蓋pad內目前的文字。您確定要繼續嗎?","pad.impexp.convertFailed":"未能匯入此檔案。請以其他檔案格式或手動複製貼上匯入。","pad.impexp.uploadFailed":"上載失敗,請重試","pad.impexp.importfailed":"匯入失敗","pad.impexp.copypaste":"請複製貼上","pad.impexp.exportdisabled":"{{type}}格式的匯出被禁用。有關詳情,請與您的系統管理員聯繫。"} \ No newline at end of file diff --git a/src/node/db/API.js b/src/node/db/API.js index 4979e8c6..ea58d859 100644 --- a/src/node/db/API.js +++ b/src/node/db/API.js @@ -548,6 +548,19 @@ exports.sendClientsMessage = function (padID, msg, callback) { } ); } +/** +checkToken() returns ok when api token is valid + +Example returns: + +{"code":0,"message":"ok","data":null} +{"code":4,"message":"no or wrong API Key","data":null} +*/ +exports.checkToken = function(callback) +{ + callback(); +} + /******************************/ /** INTERNAL HELPER FUNCTIONS */ diff --git a/src/node/db/SecurityManager.js b/src/node/db/SecurityManager.js index 59e27b55..4289e39c 100644 --- a/src/node/db/SecurityManager.js +++ b/src/node/db/SecurityManager.js @@ -25,7 +25,7 @@ var async = require("async"); var authorManager = require("./AuthorManager"); var padManager = require("./PadManager"); var sessionManager = require("./SessionManager"); -var settings = require("../utils/Settings") +var settings = require("../utils/Settings"); var randomString = require('ep_etherpad-lite/static/js/pad_utils').randomString; /** @@ -83,7 +83,7 @@ exports.checkAccess = function (padID, sessionCookie, token, password, callback) // grant access, with author of token callback(null, statusObject); } - }) + }); //don't continue return; @@ -133,10 +133,16 @@ exports.checkAccess = function (padID, sessionCookie, token, password, callback) var now = Math.floor(new Date().getTime()/1000); //is it for this group? - if(sessionInfo.groupID != groupID) return; + if(sessionInfo.groupID != groupID) { + callback(); + return; + } //is validUntil still ok? - if(sessionInfo.validUntil <= now) return; + if(sessionInfo.validUntil <= now){ + callback(); + return; + } // There is a valid session validSession = true; @@ -282,4 +288,4 @@ exports.checkAccess = function (padID, sessionCookie, token, password, callback) if(ERR(err, callback)) return; callback(null, statusObject); }); -} +}; diff --git a/src/node/eejs/index.js b/src/node/eejs/index.js index 7b43de63..48185d80 100644 --- a/src/node/eejs/index.js +++ b/src/node/eejs/index.js @@ -28,18 +28,25 @@ var resolve = require("resolve"); exports.info = { buf_stack: [], block_stack: [], - blocks: {}, file_stack: [], args: [] }; +function getCurrentFile() { + return exports.info.file_stack[exports.info.file_stack.length-1]; +} + +function createBlockId(name) { + return getCurrentFile().path + '|' + name; +} + exports._init = function (b, recursive) { exports.info.buf_stack.push(exports.info.buf); exports.info.buf = b; } exports._exit = function (b, recursive) { - exports.info.file_stack[exports.info.file_stack.length-1].inherit.forEach(function (item) { + getCurrentFile().inherit.forEach(function (item) { exports._require(item.name, item.args); }); exports.info.buf = exports.info.buf_stack.pop(); @@ -59,29 +66,17 @@ exports.end_capture = function () { } exports.begin_define_block = function (name) { - if (typeof exports.info.blocks[name] == "undefined") - exports.info.blocks[name] = {}; exports.info.block_stack.push(name); exports.begin_capture(); } -exports.super = function () { - exports.info.buf.push(''); -} - exports.end_define_block = function () { content = exports.end_capture(); - var name = exports.info.block_stack.pop(); - if (typeof exports.info.blocks[name].content == "undefined") - exports.info.blocks[name].content = content; - else if (typeof exports.info.blocks[name].content.indexOf('')) - exports.info.blocks[name].content = exports.info.blocks[name].content.replace('', content); - - return exports.info.blocks[name].content; + return content; } exports.end_block = function () { - var name = exports.info.block_stack[exports.info.block_stack.length-1]; + var name = exports.info.block_stack.pop(); var renderContext = exports.info.args[exports.info.args.length-1]; var args = {content: exports.end_define_block(), renderContext: renderContext}; hooks.callAll("eejsBlock_" + name, args); @@ -91,7 +86,7 @@ exports.end_block = function () { exports.begin_block = exports.begin_define_block; exports.inherit = function (name, args) { - exports.info.file_stack[exports.info.file_stack.length-1].inherit.push({name:name, args:args}); + getCurrentFile().inherit.push({name:name, args:args}); } exports.require = function (name, args, mod) { @@ -101,7 +96,7 @@ exports.require = function (name, args, mod) { var paths = []; if (exports.info.file_stack.length) { - basedir = path.dirname(exports.info.file_stack[exports.info.file_stack.length-1].path); + basedir = path.dirname(getCurrentFile().path); } if (mod) { basedir = path.dirname(mod.filename); diff --git a/src/node/handler/APIHandler.js b/src/node/handler/APIHandler.js index f99762ce..0bcd5f0c 100644 --- a/src/node/handler/APIHandler.js +++ b/src/node/handler/APIHandler.js @@ -103,6 +103,41 @@ var version = , "sendClientsMessage" : ["padID", "msg"] , "listAllGroups" : [] } +, "1.2": + { "createGroup" : [] + , "createGroupIfNotExistsFor" : ["groupMapper"] + , "deleteGroup" : ["groupID"] + , "listPads" : ["groupID"] + , "createPad" : ["padID", "text"] + , "createGroupPad" : ["groupID", "padName", "text"] + , "createAuthor" : ["name"] + , "createAuthorIfNotExistsFor": ["authorMapper" , "name"] + , "listPadsOfAuthor" : ["authorID"] + , "createSession" : ["groupID", "authorID", "validUntil"] + , "deleteSession" : ["sessionID"] + , "getSessionInfo" : ["sessionID"] + , "listSessionsOfGroup" : ["groupID"] + , "listSessionsOfAuthor" : ["authorID"] + , "getText" : ["padID", "rev"] + , "setText" : ["padID", "text"] + , "getHTML" : ["padID", "rev"] + , "setHTML" : ["padID", "html"] + , "getRevisionsCount" : ["padID"] + , "getLastEdited" : ["padID"] + , "deletePad" : ["padID"] + , "getReadOnlyID" : ["padID"] + , "setPublicStatus" : ["padID", "publicStatus"] + , "getPublicStatus" : ["padID"] + , "setPassword" : ["padID", "password"] + , "isPasswordProtected" : ["padID"] + , "listAuthorsOfPad" : ["padID"] + , "padUsersCount" : ["padID"] + , "getAuthorName" : ["authorID"] + , "padUsers" : ["padID"] + , "sendClientsMessage" : ["padID", "msg"] + , "listAllGroups" : [] + , "checkToken" : [] + } }; /** diff --git a/src/node/handler/ImportHandler.js b/src/node/handler/ImportHandler.js index 788706ce..5ec07390 100644 --- a/src/node/handler/ImportHandler.js +++ b/src/node/handler/ImportHandler.js @@ -4,6 +4,7 @@ /* * 2011 Peter 'Pita' Martischka (Primary Technology Ltd) + * 2012 Iván Eixarch * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -18,26 +19,23 @@ * limitations under the License. */ -var ERR = require("async-stacktrace"); -var padManager = require("../db/PadManager"); -var padMessageHandler = require("./PadMessageHandler"); -var async = require("async"); -var fs = require("fs"); -var settings = require('../utils/Settings'); -var formidable = require('formidable'); -var os = require("os"); +var ERR = require("async-stacktrace") + , padManager = require("../db/PadManager") + , padMessageHandler = require("./PadMessageHandler") + , async = require("async") + , fs = require("fs") + , path = require("path") + , settings = require('../utils/Settings') + , formidable = require('formidable') + , os = require("os") + , importHtml = require("../utils/ImportHtml"); //load abiword only if its enabled if(settings.abiword != null) var abiword = require("../utils/Abiword"); -var tempDirectory = "/tmp/"; - -//tempDirectory changes if the operating system is windows -if(os.type().indexOf("Windows") > -1) -{ - tempDirectory = process.env.TEMP; -} +//for node 0.6 compatibily, os.tmpDir() only works from 0.8 +var tmpDirectory = process.env.TEMP || process.env.TMPDIR || process.env.TMP || '/tmp'; /** * do a requested import @@ -45,32 +43,28 @@ if(os.type().indexOf("Windows") > -1) exports.doImport = function(req, res, padId) { //pipe to a file - //convert file to text via abiword - //set text in the pad + //convert file to html via abiword + //set html in the pad - var srcFile, destFile; - var pad; - var text; + var srcFile, destFile + , pad + , text; async.series([ //save the uploaded file to /tmp - function(callback) - { + function(callback) { var form = new formidable.IncomingForm(); form.keepExtensions = true; - form.uploadDir = tempDirectory; + form.uploadDir = tmpDirectory; - form.parse(req, function(err, fields, files) - { + form.parse(req, function(err, fields, files) { //the upload failed, stop at this point - if(err || files.file === undefined) - { + if(err || files.file === undefined) { console.warn("Uploading Error: " + err.stack); callback("uploadFailed"); } //everything ok, continue - else - { + else { //save the path of the uploaded file srcFile = files.file.path; callback(); @@ -80,57 +74,48 @@ exports.doImport = function(req, res, padId) //ensure this is a file ending we know, else we change the file ending to .txt //this allows us to accept source code files like .c or .java - function(callback) - { - var fileEnding = (srcFile.split(".")[1] || "").toLowerCase(); - var knownFileEndings = ["txt", "doc", "docx", "pdf", "odt", "html", "htm"]; - - //find out if this is a known file ending - var fileEndingKnown = false; - for(var i in knownFileEndings) - { - if(fileEnding == knownFileEndings[i]) - { - fileEndingKnown = true; - } - } + function(callback) { + var fileEnding = path.extname(srcFile).toLowerCase() + , knownFileEndings = [".txt", ".doc", ".docx", ".pdf", ".odt", ".html", ".htm"] + , fileEndingKnown = (knownFileEndings.indexOf(fileEnding) > -1); //if the file ending is known, continue as normal - if(fileEndingKnown) - { + if(fileEndingKnown) { callback(); } //we need to rename this file with a .txt ending - else - { + else { var oldSrcFile = srcFile; - srcFile = srcFile.split(".")[0] + ".txt"; + srcFile = path.join(path.dirname(srcFile),path.basename(srcFile, fileEnding)+".txt"); fs.rename(oldSrcFile, srcFile, callback); } }, - //convert file to text - function(callback) - { + //convert file to html + function(callback) { var randNum = Math.floor(Math.random()*0xFFFFFFFF); - destFile = tempDirectory + "eplite_import_" + randNum + ".txt"; - abiword.convertFile(srcFile, destFile, "txt", function(err){ - //catch convert errors - if(err){ - console.warn("Converting Error:", err); - return callback("convertFailed"); - } else { - callback(); - } - }); + destFile = path.join(tmpDirectory, "eplite_import_" + randNum + ".htm"); + + if (abiword) { + abiword.convertFile(srcFile, destFile, "htm", function(err) { + //catch convert errors + if(err) { + console.warn("Converting Error:", err); + return callback("convertFailed"); + } else { + callback(); + } + }); + } else { + // if no abiword only rename + fs.rename(srcFile, destFile, callback); + } }, //get the pad object - function(callback) - { - padManager.getPad(padId, function(err, _pad) - { + function(callback) { + padManager.getPad(padId, function(err, _pad){ if(ERR(err, callback)) return; pad = _pad; callback(); @@ -138,52 +123,47 @@ exports.doImport = function(req, res, padId) }, //read the text - function(callback) - { - fs.readFile(destFile, "utf8", function(err, _text) - { + function(callback) { + fs.readFile(destFile, "utf8", function(err, _text){ if(ERR(err, callback)) return; text = _text; //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) - { - setTimeout(function() - { - callback(); - }, 100); - } - else - { - callback(); - } + if(os.type().indexOf("Windows") > -1){ + setTimeout(function() {callback();}, 100); + } else { + callback(); + } }); }, //change text of the pad and broadcast the changeset - function(callback) - { - pad.setText(text); + function(callback) { + var fileEnding = path.extname(srcFile).toLowerCase(); + if (abiword || fileEnding == ".htm" || fileEnding == ".html") { + importHtml.setPadHTML(pad, text); + } else { + pad.setText(text); + } padMessageHandler.updatePadClients(pad, callback); }, //clean up temporary files - function(callback) - { + function(callback) { + //for node < 0.7 compatible + var fileExists = fs.exists || path.exists; async.parallel([ - function(callback) - { - fs.unlink(srcFile, callback); + function(callback){ + fileExists (srcFile, function(exist) { (exist)? fs.unlink(srcFile, callback): callback(); }); }, - function(callback) - { - fs.unlink(destFile, callback); + function(callback){ + fileExists (destFile, function(exist) { (exist)? fs.unlink(destFile, callback): callback(); }); } ], callback); } - ], function(err) - { + ], function(err) { + var status = "ok"; //check for known errors and replace the status @@ -196,6 +176,7 @@ exports.doImport = function(req, res, padId) ERR(err); //close the connection - res.send("", 200); + res.send("", 200); }); } + diff --git a/src/node/hooks/express.js b/src/node/hooks/express.js index eb3f6188..34baca40 100644 --- a/src/node/hooks/express.js +++ b/src/node/hooks/express.js @@ -1,5 +1,4 @@ var hooks = require("ep_etherpad-lite/static/js/pluginfw/hooks"); -var http = require('http'); var express = require('express'); var settings = require('../utils/Settings'); var fs = require('fs'); @@ -26,9 +25,9 @@ exports.createServer = function () { { console.warn("Can't get git version for server header\n" + e.message) } - console.log("Report bugs at https://github.com/Pita/etherpad-lite/issues") + console.log("Report bugs at https://github.com/ether/etherpad-lite/issues") - serverName = "Etherpad-Lite " + version + " (http://j.mp/ep-lite)"; + serverName = "Etherpad-Lite " + version + " (http://etherpad.org)"; exports.restartServer(); @@ -50,7 +49,26 @@ exports.restartServer = function () { } var app = express(); // New syntax for express v3 - server = http.createServer(app); + + if (settings.ssl) { + + console.log( "SSL -- enabled"); + console.log( "SSL -- server key file: " + settings.ssl.key ); + console.log( "SSL -- Certificate Authority's certificate file: " + settings.ssl.cert ); + + options = { + key: fs.readFileSync( settings.ssl.key ), + cert: fs.readFileSync( settings.ssl.cert ) + }; + + var https = require('https'); + server = https.createServer(options, app); + + } else { + + var http = require('http'); + server = http.createServer(app); + } app.use(function (req, res, next) { res.header("Server", serverName); diff --git a/src/node/hooks/express/importexport.js b/src/node/hooks/express/importexport.js index 9e78f34d..9754ffa6 100644 --- a/src/node/hooks/express/importexport.js +++ b/src/node/hooks/express/importexport.js @@ -28,12 +28,6 @@ exports.expressCreateServer = function (hook_name, args, cb) { //handle import requests args.app.post('/p/:pad/import', function(req, res, next) { - //if abiword is disabled, skip handling this request - if(settings.abiword == null) { - next(); - return; - } - hasPadAccess(req, res, function() { importHandler.doImport(req, res, req.params.pad); }); diff --git a/src/node/hooks/express/socketio.js b/src/node/hooks/express/socketio.js index 546ba2af..524bab3d 100644 --- a/src/node/hooks/express/socketio.js +++ b/src/node/hooks/express/socketio.js @@ -36,13 +36,10 @@ exports.expressCreateServer = function (hook_name, args, cb) { }); }); - // the following has been successfully tested with the following browsers - // works also behind reverse proxy - // Firefox 14.0.1 - // IE8 with Native XMLHTTP support - // IE8 without Native XMLHTTP support - // Chrome 21.0.1180.79 - io.set('transports', ['jsonp-polling']); + // there shouldn't be a browser that isn't compatible to all + // transports in this list at once + // e.g. XHR is disabled in IE by default, so in IE it should use jsonp-polling + io.set('transports', settings.socketTransportProtocols ); var socketIOLogger = log4js.getLogger("socket.io"); io.set('logger', { diff --git a/src/node/hooks/express/webaccess.js b/src/node/hooks/express/webaccess.js index 41bf3880..50323ef6 100644 --- a/src/node/hooks/express/webaccess.js +++ b/src/node/hooks/express/webaccess.js @@ -15,8 +15,8 @@ exports.basicAuth = function (req, res, next) { } var authorize = function (cb) { - // Do not require auth for static paths...this could be a bit brittle - if (req.path.match(/^\/(static|javascripts|pluginfw)/)) return cb(true); + // Do not require auth for static paths and the API...this could be a bit brittle + if (req.path.match(/^\/(static|javascripts|pluginfw|api)/)) return cb(true); if (req.path.indexOf('/admin') != 0) { if (!settings.requireAuthentication) return cb(true); diff --git a/src/node/hooks/i18n.js b/src/node/hooks/i18n.js index 4d42de04..2d10fd5b 100644 --- a/src/node/hooks/i18n.js +++ b/src/node/hooks/i18n.js @@ -1,35 +1,103 @@ -var languages = require('languages') +var languages = require('languages4translatewiki') , fs = require('fs') , path = require('path') , express = require('express') + , _ = require('underscore') + , npm = require('npm') + , plugins = require('ep_etherpad-lite/static/js/pluginfw/plugins.js').plugins +; -var localesPath = __dirname+"/../../locales"; -// Serve English strings directly with /locales.ini -var localeIndex = fs.readFileSync(localesPath+'/en.ini')+'\r\n'; +// returns all existing messages merged together and grouped by langcode +// {es: {"foo": "string"}, en:...} +function getAllLocales() { + var locales2paths = {}; -// add language base 'en' to availableLangs -exports.availableLangs = {en: languages.getLanguageInfo('en')} + // Puts the paths of all locale files contained in a given directory + // into `locales2paths` (files from various dirs are grouped by lang code) + // (only json files with valid language code as name) + function extractLangs(dir) { + if(!fs.existsSync(dir)) return; + var stat = fs.lstatSync(dir); + if (!stat.isDirectory() || stat.isSymbolicLink()) return; -fs.readdir(localesPath, function(er, files) { - files.forEach(function(locale) { - locale = locale.split('.')[0] - if(locale.toLowerCase() == 'en') return; + fs.readdirSync(dir).forEach(function(file) { + file = path.resolve(dir, file); + stat = fs.lstatSync(file); + if (stat.isDirectory() || stat.isSymbolicLink()) return; + + var ext = path.extname(file) + , locale = path.basename(file, ext).toLowerCase(); + + if ((ext == '.json') && languages.isValid(locale)) { + if(!locales2paths[locale]) locales2paths[locale] = []; + locales2paths[locale].push(file); + } + }); + } + + //add core supported languages first + extractLangs(npm.root+"/ep_etherpad-lite/locales"); + + //add plugins languages (if any) + for(var pluginName in plugins) extractLangs(path.join(npm.root, pluginName, 'locales')); + + // Build a locale index (merge all locale data) + var locales = {} + _.each (locales2paths, function(files, langcode) { + locales[langcode]={}; + + files.forEach(function(file) { + var fileContents = JSON.parse(fs.readFileSync(file,'utf8')); + _.extend(locales[langcode], fileContents); + }); + }); + + return locales; +} + +// returns a hash of all available languages availables with nativeName and direction +// e.g. { es: {nativeName: "español", direction: "ltr"}, ... } +function getAvailableLangs(locales) { + var result = {}; + _.each(_.keys(locales), function(langcode) { + result[langcode] = languages.getLanguageInfo(langcode); + }); + return result; +} + +// returns locale index that will be served in /locales.json +var generateLocaleIndex = function (locales) { + var result = _.clone(locales) // keep English strings + _.each(_.keys(locales), function(langcode) { + if (langcode != 'en') result[langcode]='locales/'+langcode+'.json'; + }); + return JSON.stringify(result); +} - // build locale index - localeIndex += '['+locale+']\r\n@import url(locales/'+locale+'.ini)\r\n' - - // add info language {name, nativeName, direction} to availableLangs - exports.availableLangs[locale]=languages.getLanguageInfo(locale); - }) -}) exports.expressCreateServer = function(n, args) { - args.app.use('/locales', express.static(localesPath)); + //regenerate locales on server restart + var locales = getAllLocales(); + var localeIndex = generateLocaleIndex(locales); + exports.availableLangs = getAvailableLangs(locales); + + args.app.get ('/locales/:locale', function(req, res) { + //works with /locale/en and /locale/en.json requests + var locale = req.params.locale.split('.')[0]; + if (exports.availableLangs.hasOwnProperty(locale)) { + res.setHeader('Content-Type', 'application/json; charset=utf-8'); + res.send('{"'+locale+'":'+JSON.stringify(locales[locale])+'}'); + } else { + res.send(404, 'Language not available'); + } + }) - args.app.get('/locales.ini', function(req, res) { + args.app.get('/locales.json', function(req, res) { + res.setHeader('Content-Type', 'application/json; charset=utf-8'); res.send(localeIndex); }) } + diff --git a/src/node/utils/Settings.js b/src/node/utils/Settings.js index 2ed76d0b..bed5a9a0 100644 --- a/src/node/utils/Settings.js +++ b/src/node/utils/Settings.js @@ -38,6 +38,8 @@ exports.title = "Etherpad Lite"; * The app favicon fully specified url, visible e.g. in the browser window */ exports.favicon = "favicon.ico"; +exports.faviconPad = "../" + exports.favicon; +exports.faviconTimeslider = "../../" + exports.favicon; /** * The IP ep-lite should listen to @@ -48,6 +50,18 @@ exports.ip = "0.0.0.0"; * The Port ep-lite should listen to */ exports.port = process.env.PORT || 9001; + +/** + * The SSL signed server key and the Certificate Authority's own certificate + * default case: ep-lite does *not* use SSL. A signed server key is not required in this case. + */ +exports.ssl = false; + +/** + * socket.io transport methods + **/ +exports.socketTransportProtocols = ['xhr-polling', 'jsonp-polling', 'htmlfile']; + /* * The Type of the database */ diff --git a/src/package.json b/src/package.json index 8c95c4d3..02073ea1 100644 --- a/src/package.json +++ b/src/package.json @@ -1,7 +1,7 @@ { "name" : "ep_etherpad-lite", "description" : "A Etherpad based on node.js", - "homepage" : "https://github.com/Pita/etherpad-lite", + "homepage" : "https://github.com/ether/etherpad-lite", "keywords" : ["etherpad", "realtime", "collaborative", "editor"], "author" : "Peter 'Pita' Martischka - Primary Technology Ltd", "contributors" : [ @@ -11,32 +11,32 @@ { "name": "Marcel Klehr" } ], "dependencies" : { - "yajsml" : "1.1.6", - "request" : "2.9.100", - "require-kernel" : "1.0.5", - "resolve" : "0.2.x", - "socket.io" : "0.9.x", - "ueberDB" : "0.1.8", - "async" : "0.1.x", - "express" : "3.x", - "connect" : "2.4.x", - "clean-css" : "0.3.2", - "uglify-js" : "1.2.5", - "formidable" : "1.0.9", - "log4js" : "0.5.x", - "jsdom-nocontextifiy" : "0.2.10", - "async-stacktrace" : "0.0.2", - "npm" : "1.1.x", - "npm-registry-client" : "0.2.10", - "ejs" : "0.6.1", - "graceful-fs" : "1.1.5", - "slide" : "1.1.3", - "semver" : "1.0.13", - "security" : "1.0.0", - "tinycon" : "0.0.1", - "underscore" : "1.3.1", - "unorm" : "1.0.0", - "languages" : "0.1.1" + "yajsml" : "1.1.6", + "request" : "2.9.100", + "require-kernel" : "1.0.5", + "resolve" : "0.2.x", + "socket.io" : "0.9.x", + "ueberDB" : "0.1.8", + "async" : "0.1.x", + "express" : "3.x", + "connect" : "2.4.x", + "clean-css" : "0.3.2", + "uglify-js" : "1.2.5", + "formidable" : "1.0.9", + "log4js" : "0.5.x", + "jsdom-nocontextifiy" : "0.2.10", + "async-stacktrace" : "0.0.2", + "npm" : "1.1.x", + "npm-registry-client" : "0.2.10", + "ejs" : "0.6.1", + "graceful-fs" : "1.1.5", + "slide" : "1.1.3", + "semver" : "1.0.13", + "security" : "1.0.0", + "tinycon" : "0.0.1", + "underscore" : "1.3.1", + "unorm" : "1.0.0", + "languages4translatewiki" : "0.1.3" }, "bin": { "etherpad-lite": "./node/server.js" }, "devDependencies": { @@ -46,5 +46,5 @@ "engines" : { "node" : ">=0.6.0", "npm" : ">=1.0" }, - "version" : "1.2.1" + "version" : "1.2.2" } diff --git a/src/static/css/pad.css b/src/static/css/pad.css index 64f9f0d4..bb8da99b 100644 --- a/src/static/css/pad.css +++ b/src/static/css/pad.css @@ -22,6 +22,7 @@ iframe { .readonly .acl-write { display: none; } + #users { background: #f7f7f7; background: -webkit-linear-gradient( #F7F7F7,#EEE); @@ -190,6 +191,19 @@ a img { height: 30px; z-index: 100; } + +#editorloadingbox .passForm{ + padding:10px; +} + +#editorloadingbox input{ + padding:10px; +} + +#editorloadingbox button{ + padding:10px; +} + #editorcontainerbox { position: absolute; bottom: 0; @@ -571,15 +585,20 @@ table#otheruserstable { #exportdokuwiki { background-position: 0px -459px } -#importstatusball { - display: none + +/* hidden element */ +#importstatusball, +#importarrow, +#importmessagesuccess, +#importmessageabiword { + display: none; } -#importarrow { - display: none -} -#importmessagesuccess { - display: none + +#importmessageabiword { + color: #900; + font-size: small; } + #importsubmitinput { height: 25px; width: 85px; @@ -755,7 +774,7 @@ input[type=checkbox] { border-radius: 3px; border: 1px solid #ccc; outline: none; - min-width: 105px; + width: 120px; } .column { float: left; @@ -878,3 +897,15 @@ input[type=checkbox] { line-height: 24px } } + +#passwordRequired{ + display:none; +} + +#permissionDenied{ + display:none; +} + +#wrongPassword{ + display:none; +} diff --git a/src/static/css/timeslider.css b/src/static/css/timeslider.css index 1dd0ca91..d786d89b 100644 --- a/src/static/css/timeslider.css +++ b/src/static/css/timeslider.css @@ -113,7 +113,7 @@ background-position: -29px -22px; right: 5px; top: 20px; - width: 29px; + width: 30px; } #timeslider .star { background-image: url(../../static/img/star.png); diff --git a/src/static/js/AttributePool.js b/src/static/js/AttributePool.js index f5990c07..96ea9b0d 100644 --- a/src/static/js/AttributePool.js +++ b/src/static/js/AttributePool.js @@ -3,7 +3,7 @@ * 90% of the code is still like in the original Etherpad * Look at https://github.com/ether/pad/blob/master/infrastructure/ace/www/easysync2.js * You can find a explanation what a attribute pool is here: - * https://github.com/Pita/etherpad-lite/blob/master/doc/easysync/easysync-notes.txt + * https://github.com/ether/etherpad-lite/blob/master/doc/easysync/easysync-notes.txt */ /* diff --git a/src/static/js/ace2_inner.js b/src/static/js/ace2_inner.js index 2e56b950..da8dea85 100644 --- a/src/static/js/ace2_inner.js +++ b/src/static/js/ace2_inner.js @@ -166,10 +166,12 @@ function Ace2Inner(){ } var dynamicCSS = null; + var parentDynamicCSS = null; function initDynamicCSS() { dynamicCSS = makeCSSManager("dynamicsyntax"); + parentDynamicCSS = makeCSSManager("dynamicsyntax", true); } var changesetTracker = makeChangesetTracker(scheduler, rep.apool, { @@ -217,6 +219,7 @@ function Ace2Inner(){ if (dynamicCSS) { dynamicCSS.removeSelectorStyle(getAuthorColorClassSelector(getAuthorClassName(author))); + parentDynamicCSS.removeSelectorStyle(getAuthorColorClassSelector(getAuthorClassName(author))); } } else @@ -234,18 +237,23 @@ function Ace2Inner(){ var authorStyle = dynamicCSS.selectorStyle(getAuthorColorClassSelector( getAuthorClassName(author))); + var parentAuthorStyle = parentDynamicCSS.selectorStyle(getAuthorColorClassSelector( + getAuthorClassName(author))); var anchorStyle = dynamicCSS.selectorStyle(getAuthorColorClassSelector( getAuthorClassName(author))+' > a') // author color authorStyle.backgroundColor = bgcolor; + parentAuthorStyle.backgroundColor = bgcolor; // text contrast if(colorutils.luminosity(colorutils.css2triple(bgcolor)) < 0.5) { authorStyle.color = '#ffffff'; + parentAuthorStyle.color = '#ffffff'; }else{ authorStyle.color = null; + parentAuthorStyle.color = null; } // anchor text contrast @@ -333,14 +341,6 @@ function Ace2Inner(){ return colorutils.triple2css(color); } - function doAlert(str) - { - scheduler.setTimeout(function() - { - alert(str); - }, 0); - } - editorInfo.ace_getRep = function() { return rep; @@ -1624,7 +1624,7 @@ function Ace2Inner(){ if (linesWrapped > 0) { - doAlert("Editor warning: " + linesWrapped + " long line" + (linesWrapped == 1 ? " was" : "s were") + " hard-wrapped into " + ccData.numLinesAfter + " lines."); + // console.log("Editor warning: " + linesWrapped + " long line" + (linesWrapped == 1 ? " was" : "s were") + " hard-wrapped into " + ccData.numLinesAfter + " lines."); } if (ss[0] >= 0) selStart = [ss[0] + a + netNumLinesChangeSoFar, ss[1]]; @@ -3266,7 +3266,7 @@ function Ace2Inner(){ } } //hide the dropdownso - if(window.parent.parent.padeditbar){ // required in case its in an iframe should probably use parent.. See Issue 327 https://github.com/Pita/etherpad-lite/issues/327 + if(window.parent.parent.padeditbar){ // required in case its in an iframe should probably use parent.. See Issue 327 https://github.com/ether/etherpad-lite/issues/327 window.parent.parent.padeditbar.toggleDropDown("none"); } } @@ -3569,7 +3569,6 @@ function Ace2Inner(){ inCallStackIfNecessary("handleKeyEvent", function() { - if (type == "keypress" || (isTypeForSpecialKey && keyCode == 13 /*return*/ )) { // in IE, special keys don't send keypress, the keydown does the action @@ -3583,7 +3582,6 @@ function Ace2Inner(){ { outsideKeyDown(evt); } - if (!stopped) { var specialHandledInHook = hooks.callAll('aceKeyEvent', { @@ -3622,6 +3620,12 @@ function Ace2Inner(){ }, 0); specialHandled = true; } + if ((!specialHandled) && isTypeForCmdKey && String.fromCharCode(which).toLowerCase() == "s" && (evt.metaKey || evt.ctrlKey)) /* Do a saved revision on ctrl S */ + { + evt.preventDefault(); + parent.parent.pad.collabClient.sendMessage({"type":"SAVE_REVISION"}); /* The parent.parent part of this is BAD and I feel bad.. It may break something */ + specialHandled = true; + } if ((!specialHandled) && isTypeForSpecialKey && keyCode == 9 && !(evt.metaKey || evt.ctrlKey)) { // tab diff --git a/src/static/js/admin/plugins.js b/src/static/js/admin/plugins.js index 93acf6ea..61852028 100644 --- a/src/static/js/admin/plugins.js +++ b/src/static/js/admin/plugins.js @@ -113,10 +113,15 @@ $(document).ready(function () { for (plugin_name in data.results) { var plugin = data.results[plugin_name]; var row = widget.find(".template tr").clone(); + var version = '0.0.0'; + // hack to access "versions" property of the npm package object + for (version in data.results[plugin_name].versions) break; for (attr in plugin) { row.find("." + attr).html(plugin[attr]); } + row.find(".version").html(version); + widget.find(".results").append(row); } diff --git a/src/static/js/broadcast.js b/src/static/js/broadcast.js index 86e63f93..05e4c174 100644 --- a/src/static/js/broadcast.js +++ b/src/static/js/broadcast.js @@ -304,7 +304,14 @@ function loadBroadcastJS(socket, sendSocketMsg, fireWhenAllScriptsAreLoaded, Bro var hours = zpad(date.getHours(), 2); var minutes = zpad(date.getMinutes(), 2); var seconds = zpad(date.getSeconds(), 2); - return ([month, '/', day, '/', year, ' ', hours, ':', minutes, ':', seconds].join("")); + return (html10n.get("timeslider.dateformat", { + "day": day, + "month": month, + "year": year, + "hours": hours, + "minutes": minutes, + "seconds": seconds + })); } @@ -313,7 +320,24 @@ function loadBroadcastJS(socket, sendSocketMsg, fireWhenAllScriptsAreLoaded, Bro $('#timer').html(dateFormat()); - var revisionDate = ["Saved", ["Jan", "Feb", "March", "April", "May", "June", "July", "Aug", "Sept", "Oct", "Nov", "Dec"][date.getMonth()], date.getDate() + ",", date.getFullYear()].join(" ") + var revisionDate = html10n.get("timeslider.saved", { + "day": date.getDate(), + "month": [ + html10n.get("timeslider.month.january"), + html10n.get("timeslider.month.february"), + html10n.get("timeslider.month.march"), + html10n.get("timeslider.month.april"), + html10n.get("timeslider.month.may"), + html10n.get("timeslider.month.june"), + html10n.get("timeslider.month.july"), + html10n.get("timeslider.month.august"), + html10n.get("timeslider.month.september"), + html10n.get("timeslider.month.october"), + html10n.get("timeslider.month.november"), + html10n.get("timeslider.month.december") + ][date.getMonth()], + "year": date.getFullYear() + }); $('#revision_date').html(revisionDate) } diff --git a/src/static/js/broadcast_slider.js b/src/static/js/broadcast_slider.js index fed9f2e7..d4fbef81 100644 --- a/src/static/js/broadcast_slider.js +++ b/src/static/js/broadcast_slider.js @@ -112,7 +112,7 @@ function loadBroadcastSliderJS(fireWhenAllScriptsAreLoaded) { $(this).attr('href', $(this).attr('thref').replace("%revision%", newpos)); }); - $("#revision_label").html("Version " + newpos); + $("#revision_label").html(html10n.get("timeslider.version", { "version": newpos})); if (newpos == 0) { @@ -215,7 +215,7 @@ function loadBroadcastSliderJS(fireWhenAllScriptsAreLoaded) } if (authors.length == 0) { - authorsList.append("No Authors"); + authorsList.append(html10n.get("timeslider.toolbar.authorsList")); } fixPadHeight(); @@ -346,7 +346,7 @@ function loadBroadcastSliderJS(fireWhenAllScriptsAreLoaded) var newloc = self.currentLoc + (evt2.clientX - self.startLoc); if (newloc < 0) newloc = 0; if (newloc > ($("#ui-slider-bar").width() - 2)) newloc = ($("#ui-slider-bar").width() - 2); - $("#revision_label").html("Version " + Math.floor(newloc * sliderLength / ($("#ui-slider-bar").width() - 2))); + $("#revision_label").html(html10n.get("timeslider.version", { "version": Math.floor(newloc * sliderLength / ($("#ui-slider-bar").width() - 2))})); $(self).css('left', newloc); if (getSliderPosition() != Math.floor(newloc * sliderLength / ($("#ui-slider-bar").width() - 2))) _callSliderCallbacks(Math.floor(newloc * sliderLength / ($("#ui-slider-bar").width() - 2))) }); diff --git a/src/static/js/chat.js b/src/static/js/chat.js index 4493ed15..79224e80 100644 --- a/src/static/js/chat.js +++ b/src/static/js/chat.js @@ -109,7 +109,7 @@ var chat = (function() } /* End of new action */ - var authorName = msg.userName == null ? "unnamed" : padutils.escapeHtml(msg.userName); + var authorName = msg.userName == null ? _('pad.userlist.unnamed') : padutils.escapeHtml(msg.userName); var html = "

" + authorName + ":" + timeStr + " " + text + "

"; $("#chattext").append(html); diff --git a/src/static/js/cssmanager.js b/src/static/js/cssmanager.js index e2007449..62f17496 100644 --- a/src/static/js/cssmanager.js +++ b/src/static/js/cssmanager.js @@ -20,12 +20,13 @@ * limitations under the License. */ -function makeCSSManager(emptyStylesheetTitle) +function makeCSSManager(emptyStylesheetTitle, parentCss) { function getSheetByTitle(title) { - var allSheets = document.styleSheets; + if (parentCss) var allSheets = window.parent.parent.document.styleSheets; + else var allSheets = document.styleSheets; for (var i = 0; i < allSheets.length; i++) { @@ -38,7 +39,7 @@ function makeCSSManager(emptyStylesheetTitle) return null; } - var browserSheet = getSheetByTitle(emptyStylesheetTitle); + var browserSheet = getSheetByTitle(emptyStylesheetTitle, parentCss); function browserRules() { diff --git a/src/static/js/html10n.js b/src/static/js/html10n.js new file mode 100644 index 00000000..dc583967 --- /dev/null +++ b/src/static/js/html10n.js @@ -0,0 +1,874 @@ +/** + * Copyright (c) 2012 Marcel Klehr + * Copyright (c) 2011-2012 Fabien Cazenave, Mozilla + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to + * deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + */ +window.html10n = (function(window, document, undefined) { + var consoleLog = console? console.log : function() {} + , consoleWarn = console? console.warn : function() {} + + /** + * MicroEvent - to make any js object an event emitter (server or browser) + */ + + var MicroEvent = function(){} + MicroEvent.prototype = { + bind : function(event, fct){ + this._events = this._events || {}; + this._events[event] = this._events[event] || []; + this._events[event].push(fct); + }, + unbind : function(event, fct){ + this._events = this._events || {}; + if( event in this._events === false ) return; + this._events[event].splice(this._events[event].indexOf(fct), 1); + }, + trigger : function(event /* , args... */){ + this._events = this._events || {}; + if( event in this._events === false ) return; + for(var i = 0; i < this._events[event].length; i++){ + this._events[event][i].apply(this, Array.prototype.slice.call(arguments, 1)) + } + } + }; + /** + * mixin will delegate all MicroEvent.js function in the destination object + * @param {Object} the object which will support MicroEvent + */ + MicroEvent.mixin = function(destObject){ + var props = ['bind', 'unbind', 'trigger']; + if(!destObject) return; + for(var i = 0; i < props.length; i ++){ + destObject[props[i]] = MicroEvent.prototype[props[i]]; + } + } + + /** + * Loader + * The loader is responsible for loading + * and caching all necessary resources + */ + function Loader(resources) { + this.resources = resources + this.cache = {} // file => contents + this.langs = {} // lang => strings + } + + Loader.prototype.load = function(lang, cb) { + if(this.langs[lang]) return cb() + + if (this.resources.length > 0) { + var reqs = 0; + for (var i=0, n=this.resources.length; i < n; i++) { + this.fetch(this.resources[i], lang, function(e) { + reqs++; + if(e) return setTimeout(function(){ throw e }, 0) + + if (reqs < n) return;// Call back once all reqs are completed + cb && cb() + }) + } + } + } + + Loader.prototype.fetch = function(href, lang, cb) { + var that = this + + if (this.cache[href]) { + this.parse(lang, href, this.cache[href], cb) + return; + } + + var xhr = new XMLHttpRequest() + xhr.open('GET', href, /*async: */true) + if (xhr.overrideMimeType) { + xhr.overrideMimeType('application/json; charset=utf-8'); + } + xhr.onreadystatechange = function() { + if (xhr.readyState == 4) { + if (xhr.status == 200 || xhr.status === 0) { + var data = JSON.parse(xhr.responseText) + that.cache[href] = data + // Pass on the contents for parsing + that.parse(lang, href, data, cb) + } else { + cb(new Error('Failed to load '+href)) + } + } + }; + xhr.send(null); + } + + Loader.prototype.parse = function(lang, currHref, data, cb) { + if ('object' != typeof data) { + cb(new Error('A file couldn\'t be parsed as json.')) + return + } + + if (!data[lang]) lang = lang.substr(0, lang.indexOf('-') == -1? lang.length : lang.indexOf('-')) + if (!data[lang]) { + cb(new Error('Couldn\'t find translations for '+lang)) + return + } + + if ('string' == typeof data[lang]) { + // Import rule + + // absolute path + var importUrl = data[lang] + + // relative path + if(data[lang].indexOf("http") != 0 && data[lang].indexOf("/") != 0) { + importUrl = currHref+"/../"+data[lang] + } + + this.fetch(importUrl, lang, cb) + return + } + + if ('object' != typeof data[lang]) { + cb(new Error('Translations should be specified as JSON objects!')) + return + } + + this.langs[lang] = data[lang] + // TODO: Also store accompanying langs + cb() + } + + + /** + * The html10n object + */ + var html10n = + { language : null + } + MicroEvent.mixin(html10n) + + html10n.macros = {} + + html10n.rtl = ["ar","dv","fa","ha","he","ks","ku","ps","ur","yi"] + + /** + * Get rules for plural forms (shared with JetPack), see: + * http://unicode.org/repos/cldr-tmp/trunk/diff/supplemental/language_plural_rules.html + * https://github.com/mozilla/addon-sdk/blob/master/python-lib/plural-rules-generator.p + * + * @param {string} lang + * locale (language) used. + * + * @return {Function} + * returns a function that gives the plural form name for a given integer: + * var fun = getPluralRules('en'); + * fun(1) -> 'one' + * fun(0) -> 'other' + * fun(1000) -> 'other'. + */ + function getPluralRules(lang) { + var locales2rules = { + 'af': 3, + 'ak': 4, + 'am': 4, + 'ar': 1, + 'asa': 3, + 'az': 0, + 'be': 11, + 'bem': 3, + 'bez': 3, + 'bg': 3, + 'bh': 4, + 'bm': 0, + 'bn': 3, + 'bo': 0, + 'br': 20, + 'brx': 3, + 'bs': 11, + 'ca': 3, + 'cgg': 3, + 'chr': 3, + 'cs': 12, + 'cy': 17, + 'da': 3, + 'de': 3, + 'dv': 3, + 'dz': 0, + 'ee': 3, + 'el': 3, + 'en': 3, + 'eo': 3, + 'es': 3, + 'et': 3, + 'eu': 3, + 'fa': 0, + 'ff': 5, + 'fi': 3, + 'fil': 4, + 'fo': 3, + 'fr': 5, + 'fur': 3, + 'fy': 3, + 'ga': 8, + 'gd': 24, + 'gl': 3, + 'gsw': 3, + 'gu': 3, + 'guw': 4, + 'gv': 23, + 'ha': 3, + 'haw': 3, + 'he': 2, + 'hi': 4, + 'hr': 11, + 'hu': 0, + 'id': 0, + 'ig': 0, + 'ii': 0, + 'is': 3, + 'it': 3, + 'iu': 7, + 'ja': 0, + 'jmc': 3, + 'jv': 0, + 'ka': 0, + 'kab': 5, + 'kaj': 3, + 'kcg': 3, + 'kde': 0, + 'kea': 0, + 'kk': 3, + 'kl': 3, + 'km': 0, + 'kn': 0, + 'ko': 0, + 'ksb': 3, + 'ksh': 21, + 'ku': 3, + 'kw': 7, + 'lag': 18, + 'lb': 3, + 'lg': 3, + 'ln': 4, + 'lo': 0, + 'lt': 10, + 'lv': 6, + 'mas': 3, + 'mg': 4, + 'mk': 16, + 'ml': 3, + 'mn': 3, + 'mo': 9, + 'mr': 3, + 'ms': 0, + 'mt': 15, + 'my': 0, + 'nah': 3, + 'naq': 7, + 'nb': 3, + 'nd': 3, + 'ne': 3, + 'nl': 3, + 'nn': 3, + 'no': 3, + 'nr': 3, + 'nso': 4, + 'ny': 3, + 'nyn': 3, + 'om': 3, + 'or': 3, + 'pa': 3, + 'pap': 3, + 'pl': 13, + 'ps': 3, + 'pt': 3, + 'rm': 3, + 'ro': 9, + 'rof': 3, + 'ru': 11, + 'rwk': 3, + 'sah': 0, + 'saq': 3, + 'se': 7, + 'seh': 3, + 'ses': 0, + 'sg': 0, + 'sh': 11, + 'shi': 19, + 'sk': 12, + 'sl': 14, + 'sma': 7, + 'smi': 7, + 'smj': 7, + 'smn': 7, + 'sms': 7, + 'sn': 3, + 'so': 3, + 'sq': 3, + 'sr': 11, + 'ss': 3, + 'ssy': 3, + 'st': 3, + 'sv': 3, + 'sw': 3, + 'syr': 3, + 'ta': 3, + 'te': 3, + 'teo': 3, + 'th': 0, + 'ti': 4, + 'tig': 3, + 'tk': 3, + 'tl': 4, + 'tn': 3, + 'to': 0, + 'tr': 0, + 'ts': 3, + 'tzm': 22, + 'uk': 11, + 'ur': 3, + 've': 3, + 'vi': 0, + 'vun': 3, + 'wa': 4, + 'wae': 3, + 'wo': 0, + 'xh': 3, + 'xog': 3, + 'yo': 0, + 'zh': 0, + 'zu': 3 + }; + + // utility functions for plural rules methods + function isIn(n, list) { + return list.indexOf(n) !== -1; + } + function isBetween(n, start, end) { + return start <= n && n <= end; + } + + // list of all plural rules methods: + // map an integer to the plural form name to use + var pluralRules = { + '0': function(n) { + return 'other'; + }, + '1': function(n) { + if ((isBetween((n % 100), 3, 10))) + return 'few'; + if (n === 0) + return 'zero'; + if ((isBetween((n % 100), 11, 99))) + return 'many'; + if (n == 2) + return 'two'; + if (n == 1) + return 'one'; + return 'other'; + }, + '2': function(n) { + if (n !== 0 && (n % 10) === 0) + return 'many'; + if (n == 2) + return 'two'; + if (n == 1) + return 'one'; + return 'other'; + }, + '3': function(n) { + if (n == 1) + return 'one'; + return 'other'; + }, + '4': function(n) { + if ((isBetween(n, 0, 1))) + return 'one'; + return 'other'; + }, + '5': function(n) { + if ((isBetween(n, 0, 2)) && n != 2) + return 'one'; + return 'other'; + }, + '6': function(n) { + if (n === 0) + return 'zero'; + if ((n % 10) == 1 && (n % 100) != 11) + return 'one'; + return 'other'; + }, + '7': function(n) { + if (n == 2) + return 'two'; + if (n == 1) + return 'one'; + return 'other'; + }, + '8': function(n) { + if ((isBetween(n, 3, 6))) + return 'few'; + if ((isBetween(n, 7, 10))) + return 'many'; + if (n == 2) + return 'two'; + if (n == 1) + return 'one'; + return 'other'; + }, + '9': function(n) { + if (n === 0 || n != 1 && (isBetween((n % 100), 1, 19))) + return 'few'; + if (n == 1) + return 'one'; + return 'other'; + }, + '10': function(n) { + if ((isBetween((n % 10), 2, 9)) && !(isBetween((n % 100), 11, 19))) + return 'few'; + if ((n % 10) == 1 && !(isBetween((n % 100), 11, 19))) + return 'one'; + return 'other'; + }, + '11': function(n) { + if ((isBetween((n % 10), 2, 4)) && !(isBetween((n % 100), 12, 14))) + return 'few'; + if ((n % 10) === 0 || + (isBetween((n % 10), 5, 9)) || + (isBetween((n % 100), 11, 14))) + return 'many'; + if ((n % 10) == 1 && (n % 100) != 11) + return 'one'; + return 'other'; + }, + '12': function(n) { + if ((isBetween(n, 2, 4))) + return 'few'; + if (n == 1) + return 'one'; + return 'other'; + }, + '13': function(n) { + if ((isBetween((n % 10), 2, 4)) && !(isBetween((n % 100), 12, 14))) + return 'few'; + if (n != 1 && (isBetween((n % 10), 0, 1)) || + (isBetween((n % 10), 5, 9)) || + (isBetween((n % 100), 12, 14))) + return 'many'; + if (n == 1) + return 'one'; + return 'other'; + }, + '14': function(n) { + if ((isBetween((n % 100), 3, 4))) + return 'few'; + if ((n % 100) == 2) + return 'two'; + if ((n % 100) == 1) + return 'one'; + return 'other'; + }, + '15': function(n) { + if (n === 0 || (isBetween((n % 100), 2, 10))) + return 'few'; + if ((isBetween((n % 100), 11, 19))) + return 'many'; + if (n == 1) + return 'one'; + return 'other'; + }, + '16': function(n) { + if ((n % 10) == 1 && n != 11) + return 'one'; + return 'other'; + }, + '17': function(n) { + if (n == 3) + return 'few'; + if (n === 0) + return 'zero'; + if (n == 6) + return 'many'; + if (n == 2) + return 'two'; + if (n == 1) + return 'one'; + return 'other'; + }, + '18': function(n) { + if (n === 0) + return 'zero'; + if ((isBetween(n, 0, 2)) && n !== 0 && n != 2) + return 'one'; + return 'other'; + }, + '19': function(n) { + if ((isBetween(n, 2, 10))) + return 'few'; + if ((isBetween(n, 0, 1))) + return 'one'; + return 'other'; + }, + '20': function(n) { + if ((isBetween((n % 10), 3, 4) || ((n % 10) == 9)) && !( + isBetween((n % 100), 10, 19) || + isBetween((n % 100), 70, 79) || + isBetween((n % 100), 90, 99) + )) + return 'few'; + if ((n % 1000000) === 0 && n !== 0) + return 'many'; + if ((n % 10) == 2 && !isIn((n % 100), [12, 72, 92])) + return 'two'; + if ((n % 10) == 1 && !isIn((n % 100), [11, 71, 91])) + return 'one'; + return 'other'; + }, + '21': function(n) { + if (n === 0) + return 'zero'; + if (n == 1) + return 'one'; + return 'other'; + }, + '22': function(n) { + if ((isBetween(n, 0, 1)) || (isBetween(n, 11, 99))) + return 'one'; + return 'other'; + }, + '23': function(n) { + if ((isBetween((n % 10), 1, 2)) || (n % 20) === 0) + return 'one'; + return 'other'; + }, + '24': function(n) { + if ((isBetween(n, 3, 10) || isBetween(n, 13, 19))) + return 'few'; + if (isIn(n, [2, 12])) + return 'two'; + if (isIn(n, [1, 11])) + return 'one'; + return 'other'; + } + }; + + // return a function that gives the plural form name for a given integer + var index = locales2rules[lang.replace(/-.*$/, '')]; + if (!(index in pluralRules)) { + consoleWarn('plural form unknown for [' + lang + ']'); + return function() { return 'other'; }; + } + return pluralRules[index]; + } + + /** + * pre-defined 'plural' macro + */ + html10n.macros.plural = function(translations, key, str, param) { + var n = parseFloat(param); + if (isNaN(n)) + return str; + + // initialize _pluralRules + if (!this._pluralRules) + this._pluralRules = getPluralRules(html10n.language); + 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]; + } + + return str; + }; + + /** + * Localize a document + * @param langs An array of lang codes defining fallbacks + */ + html10n.localize = function(langs) { + var that = this + // if only one string => create an array + if ('string' == typeof langs) langs = [langs] + + this.build(langs, function(er, translations) { + html10n.translations = translations + html10n.translateElement(translations) + that.trigger('localized') + }) + } + + /** + * Triggers the translation process + * for an element + * @param translations A hash of all translation strings + * @param element A DOM element, if omitted, the document element will be used + */ + html10n.translateElement = function(translations, element) { + element = element || document.documentElement + + var children = element? getTranslatableChildren(element) : document.childNodes; + for (var i=0, n=children.length; i < n; i++) { + this.translateNode(translations, children[i]) + } + + // translate element itself if necessary + this.translateNode(translations, element) + } + + function asyncForEach(list, iterator, cb) { + var i = 0 + , n = list.length + iterator(list[i], i, function each(err) { + if(err) consoleLog(err) + i++ + if (i < n) return iterator(list[i],i, each); + cb() + }) + } + + function getTranslatableChildren(element) { + if(!document.querySelectorAll) { + if (!element) return [] + var nodes = element.getElementsByTagName('*') + , l10nElements = [] + for (var i=0, n=nodes.length; i < n; i++) { + if (nodes[i].getAttribute('data-l10n-id')) + l10nElements.push(nodes[i]); + } + return l10nElements + } + return element.querySelectorAll('*[data-l10n-id]') + } + + html10n.get = function(id, args) { + var translations = html10n.translations + 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) + + // 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) + } + + return str + } + + // 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; + + // a macro has been found + // Note: at the moment, only one parameter is supported + var macroName = reMatch[1] + , paramName = reMatch[2] + + if (!(macroName in gMacros)) return str + + var param + if (args && paramName in args) { + param = args[paramName] + } else if (paramName in translations) { + param = translations[paramName] + } + + // there's no macro parser yet: it has to be defined in gMacros + var macro = html10n.macros[macroName] + str = macro(translations, key, str, param) + return str + } + } + + /** + * Applies translations to a DOM node (recursive) + */ + html10n.translateNode = function(translations, node) { + var str = {} + + // get id + str.id = node.getAttribute('data-l10n-id') + if (!str.id) return + + if(!translations[str.id]) return consoleWarn('Couldn\'t find translation key '+str.id) + + // get args + if(window.JSON) { + str.args = JSON.parse(node.getAttribute('data-l10n-args')) + }else{ + try{ + str.args = eval(node.getAttribute('data-l10n-args')) + }catch(e) { + consoleWarn('Couldn\'t parse args for '+str.id) + } + } + + str.str = html10n.get(str.id, str.args) + + // get attribute name to apply str to + var prop + , index = str.id.lastIndexOf('.') + , attrList = // allowed attributes + { "title": 1 + , "innerHTML": 1 + , "alt": 1 + , "textContent": 1 + } + if (index > 0 && str.id.substr(index + 1) in attrList) { // an attribute has been specified + prop = str.id.substr(index + 1) + } else { // no attribute: assuming text content by default + prop = document.body.textContent ? 'textContent' : 'innerText' + } + + // Apply translation + if (node.children.length === 0 || prop != 'textContent') { + node[prop] = str.str + } else { + var children = node.childNodes, + found = false + for (var i=0, n=children.length; i < n; i++) { + if (children[i].nodeType === 3 && /\S/.test(children[i].textContent)) { + if (!found) { + children[i].nodeValue = str.str + found = true + } else { + children[i].nodeValue = '' + } + } + } + if (!found) { + consoleWarn('Unexpected error: could not translate element content for key '+str.id, node) + } + } + } + + /** + * Builds a translation object from a list of langs (loads the necessary translations) + * @param langs Array - a list of langs sorted by priority (default langs should go last) + */ + html10n.build = function(langs, cb) { + var that = this + , build = {} + + asyncForEach(langs, function (lang, i, next) { + if(!lang) return next(); + that.loader.load(lang, next) + }, function() { + var lang + langs.reverse() + + // loop through priority array... + for (var i=0, n=langs.length; i < n; i++) { + lang = langs[i] + + if(!lang || !(lang in that.loader.langs)) continue; + + // ... and apply all strings of the current lang in the list + // to our build object + for (var string in that.loader.langs[lang]) { + build[string] = that.loader.langs[lang][string] + } + + // the last applied lang will be exposed as the + // lang the page was translated to + that.language = lang + } + cb(null, build) + }) + } + + /** + * Returns the language that was last applied to the translations hash + * thus overriding most of the formerly applied langs + */ + html10n.getLanguage = function() { + return this.language; + } + + /** + * Returns the direction of the language returned be html10n#getLanguage + */ + html10n.getDirection = function() { + var langCode = this.language.indexOf('-') == -1? this.language : this.language.substr(0, this.language.indexOf('-')) + return html10n.rtl.indexOf(langCode) == -1? 'ltr' : 'rtl' + } + + /** + * Index all s + */ + html10n.index = function () { + // Find all s + var links = document.getElementsByTagName('link') + , resources = [] + for (var i=0, n=links.length; i < n; i++) { + if (links[i].type != 'application/l10n+json') + continue; + resources.push(links[i].href) + } + this.loader = new Loader(resources) + this.trigger('indexed') + } + + if (document.addEventListener) // modern browsers and IE9+ + document.addEventListener('DOMContentLoaded', function() { + html10n.index() + }, false) + else if (window.attachEvent) + document.attachEvent('onload', function() { + html10n.index() + }, false) + + // gettext-like shortcut + if (window._ === undefined) + window._ = html10n.get; + + return html10n +})(window, document) \ No newline at end of file diff --git a/src/static/js/l10n.js b/src/static/js/l10n.js index ef8218d3..a67a7c1a 100644 --- a/src/static/js/l10n.js +++ b/src/static/js/l10n.js @@ -1,1028 +1,14 @@ -/** Copyright (c) 2011-2012 Fabien Cazenave, Mozilla. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - * IN THE SOFTWARE. - */ -/*jshint browser: true, devel: true, es5: true, globalstrict: true */ -'use strict'; - -document.webL10n = (function(window, document, undefined) { - var gL10nData = {}; - var gTextData = ''; - var gTextProp = 'textContent'; - var gLanguage = ''; - var gMacros = {}; - var gReadyState = 'loading'; - - // read-only setting -- we recommend to load l10n resources synchronously - var gAsyncResourceLoading = true; - - // debug helpers - var gDEBUG = false; - function consoleLog(message) { - if (gDEBUG) - console.log('[l10n] ' + message); - }; - function consoleWarn(message) { - if (gDEBUG) - console.warn('[l10n] ' + message); - }; - - /** - * DOM helpers for the so-called "HTML API". - * - * These functions are written for modern browsers. For old versions of IE, - * they're overridden in the 'startup' section at the end of this file. - */ - - function getL10nResourceLinks() { - return document.querySelectorAll('link[type="application/l10n"]'); - } - - function getTranslatableChildren(element) { - return element ? element.querySelectorAll('*[data-l10n-id]') : []; - } - - function getL10nAttributes(element) { - if (!element) - return {}; - - var l10nId = element.getAttribute('data-l10n-id'); - var l10nArgs = element.getAttribute('data-l10n-args'); - var args = {}; - if (l10nArgs) { - try { - args = JSON.parse(l10nArgs); - } catch (e) { - consoleWarn('could not parse arguments for #' + l10nId); - } - } - return { id: l10nId, args: args }; - } - - function fireL10nReadyEvent(lang) { - var evtObject = document.createEvent('Event'); - evtObject.initEvent('localized', false, false); - evtObject.language = lang; - window.dispatchEvent(evtObject); - } - - - /** - * l10n resource parser: - * - reads (async XHR) the l10n resource matching `lang'; - * - imports linked resources (synchronously) when specified; - * - parses the text data (fills `gL10nData' and `gTextData'); - * - triggers success/failure callbacks when done. - * - * @param {string} href - * URL of the l10n resource to parse. - * - * @param {string} lang - * locale (language) to parse. - * - * @param {Function} successCallback - * triggered when the l10n resource has been successully parsed. - * - * @param {Function} failureCallback - * triggered when the an error has occured. - * - * @return {void} - * uses the following global variables: gL10nData, gTextData, gTextProp. - */ - - function parseResource(href, lang, successCallback, failureCallback) { - var baseURL = href.replace(/\/[^\/]*$/, '/'); - - // handle escaped characters (backslashes) in a string - function evalString(text) { - if (text.lastIndexOf('\\') < 0) - return text; - return text.replace(/\\\\/g, '\\') - .replace(/\\n/g, '\n') - .replace(/\\r/g, '\r') - .replace(/\\t/g, '\t') - .replace(/\\b/g, '\b') - .replace(/\\f/g, '\f') - .replace(/\\{/g, '{') - .replace(/\\}/g, '}') - .replace(/\\"/g, '"') - .replace(/\\'/g, "'"); - } - - // parse *.properties text data into an l10n dictionary - function parseProperties(text) { - var dictionary = {}; - - // token expressions - var reBlank = /^\s*|\s*$/; - var reComment = /^\s*;|^\s*$/;// Use ; for comments! - var reSection = /^\s*\[(.*)\]\s*$/; - var reImport = /^\s*@import\s+url\((.*)\)\s*$/i; - var reSplit = /^([^=\s]*)\s*=\s*(.+)$/; // TODO: escape EOLs with '\' - - // parse the *.properties file into an associative array - function parseRawLines(rawText, extendedSyntax) { - var entries = rawText.replace(reBlank, '').split(/[\r\n]+/); - var currentLang = '*'; - var genericLang = lang.replace(/-[a-z]+$/i, ''); - var skipLang = false; - var match = ''; - - for (var i = 0; i < entries.length; i++) { - var line = entries[i]; - - // comment or blank line? - if (reComment.test(line)) - continue; - - // the extended syntax supports [lang] sections and @import rules - if (extendedSyntax) { - if (reSection.test(line)) { // section start? - match = reSection.exec(line); - currentLang = match[1]; - skipLang = (currentLang !== '*') && - (currentLang !== lang) && (currentLang !== genericLang); - continue; - } else if (skipLang) { - continue; - } - if (reImport.test(line)) { // @import rule? - match = reImport.exec(line); - loadImport(baseURL + match[1]); // load the resource synchronously - } - } - - // key-value pair - consoleLog(tmp) - var tmp = line.match(reSplit); - if (tmp && tmp.length == 3) - dictionary[tmp[1]] = evalString(tmp[2]); - } - } - - // import another *.properties file - function loadImport(url) { - loadResource(url, function(content) { - parseRawLines(content, false); // don't allow recursive imports - }, false, false); // load synchronously - } - - // fill the dictionary - parseRawLines(text, true); - return dictionary; - } - - // load the specified resource file - function loadResource(url, onSuccess, onFailure, asynchronous) { - var xhr = new XMLHttpRequest(); - xhr.open('GET', url, asynchronous); - if (xhr.overrideMimeType) { - xhr.overrideMimeType('text/plain; charset=utf-8'); - } - xhr.onreadystatechange = function() { - if (xhr.readyState == 4) { - if (xhr.status == 200 || xhr.status === 0) { - if (onSuccess) - onSuccess(xhr.responseText); - } else { - if (onFailure) - onFailure(); - } - } - }; - xhr.send(null); - } - - // load and parse l10n data (warning: global variables are used here) - loadResource(href, function(response) { - gTextData += response; // mostly for debug - - // parse *.properties text data into an l10n dictionary - var data = parseProperties(response); - - // allowed attributes - var attrList = - { "title": 1 - , "innerHTML": 1 - , "alt": 1 - , "textContent": 1 - } - - // find attribute descriptions, if any - for (var key in data) { - var id, prop, index = key.lastIndexOf('.'); - if (index > 0 && key.substr(index + 1) in attrList) { // an attribute has been specified - id = key.substring(0, index); - prop = key.substr(index + 1); - } else { // no attribute: assuming text content by default - id = key; - prop = gTextProp; - } - if (!gL10nData[id]) { - gL10nData[id] = {}; - } - gL10nData[id][prop] = data[key]; - } - - // trigger callback - if (successCallback) - successCallback(); - }, failureCallback, gAsyncResourceLoading); - }; - - // load and parse all resources for the specified locale - function loadLocale(lang, callback) { - clear(); - gLanguage = lang; - - // check all nodes - // and load the resource files - var langLinks = getL10nResourceLinks(); - var langCount = langLinks.length; - if (langCount == 0) { - consoleLog('no resource to load, early way out'); - fireL10nReadyEvent(lang); - gReadyState = 'complete'; - return; - } - - // start the callback when all resources are loaded - var onResourceLoaded = null; - var gResourceCount = 0; - onResourceLoaded = function() { - gResourceCount++; - if (gResourceCount >= langCount) { - if (callback) // execute the [optional] callback - callback(); - fireL10nReadyEvent(lang); - gReadyState = 'complete'; - } - }; - - // load all resource files - function l10nResourceLink(link) { - var href = link.href; - var type = link.type; - this.load = function(lang, callback) { - var applied = lang; - parseResource(href, lang, callback, function() { - consoleWarn(href + ' not found.'); - applied = ''; - }); - return applied; // return lang if found, an empty string if not found - }; - } - - for (var i = 0; i < langCount; i++) { - var resource = new l10nResourceLink(langLinks[i]); - var rv = resource.load(lang, onResourceLoaded); - if (rv != lang) { // lang not found, used default resource instead - consoleWarn('"' + lang + '" resource not found'); - gLanguage = ''; - } - } - } - - // clear all l10n data - function clear() { - gL10nData = {}; - gTextData = ''; - gLanguage = ''; - // TODO: clear all non predefined macros. - // There's no such macro /yet/ but we're planning to have some... - } - - - /** - * Get rules for plural forms (shared with JetPack), see: - * http://unicode.org/repos/cldr-tmp/trunk/diff/supplemental/language_plural_rules.html - * https://github.com/mozilla/addon-sdk/blob/master/python-lib/plural-rules-generator.p - * - * @param {string} lang - * locale (language) used. - * - * @return {Function} - * returns a function that gives the plural form name for a given integer: - * var fun = getPluralRules('en'); - * fun(1) -> 'one' - * fun(0) -> 'other' - * fun(1000) -> 'other'. - */ - - function getPluralRules(lang) { - var locales2rules = { - 'af': 3, - 'ak': 4, - 'am': 4, - 'ar': 1, - 'asa': 3, - 'az': 0, - 'be': 11, - 'bem': 3, - 'bez': 3, - 'bg': 3, - 'bh': 4, - 'bm': 0, - 'bn': 3, - 'bo': 0, - 'br': 20, - 'brx': 3, - 'bs': 11, - 'ca': 3, - 'cgg': 3, - 'chr': 3, - 'cs': 12, - 'cy': 17, - 'da': 3, - 'de': 3, - 'dv': 3, - 'dz': 0, - 'ee': 3, - 'el': 3, - 'en': 3, - 'eo': 3, - 'es': 3, - 'et': 3, - 'eu': 3, - 'fa': 0, - 'ff': 5, - 'fi': 3, - 'fil': 4, - 'fo': 3, - 'fr': 5, - 'fur': 3, - 'fy': 3, - 'ga': 8, - 'gd': 24, - 'gl': 3, - 'gsw': 3, - 'gu': 3, - 'guw': 4, - 'gv': 23, - 'ha': 3, - 'haw': 3, - 'he': 2, - 'hi': 4, - 'hr': 11, - 'hu': 0, - 'id': 0, - 'ig': 0, - 'ii': 0, - 'is': 3, - 'it': 3, - 'iu': 7, - 'ja': 0, - 'jmc': 3, - 'jv': 0, - 'ka': 0, - 'kab': 5, - 'kaj': 3, - 'kcg': 3, - 'kde': 0, - 'kea': 0, - 'kk': 3, - 'kl': 3, - 'km': 0, - 'kn': 0, - 'ko': 0, - 'ksb': 3, - 'ksh': 21, - 'ku': 3, - 'kw': 7, - 'lag': 18, - 'lb': 3, - 'lg': 3, - 'ln': 4, - 'lo': 0, - 'lt': 10, - 'lv': 6, - 'mas': 3, - 'mg': 4, - 'mk': 16, - 'ml': 3, - 'mn': 3, - 'mo': 9, - 'mr': 3, - 'ms': 0, - 'mt': 15, - 'my': 0, - 'nah': 3, - 'naq': 7, - 'nb': 3, - 'nd': 3, - 'ne': 3, - 'nl': 3, - 'nn': 3, - 'no': 3, - 'nr': 3, - 'nso': 4, - 'ny': 3, - 'nyn': 3, - 'om': 3, - 'or': 3, - 'pa': 3, - 'pap': 3, - 'pl': 13, - 'ps': 3, - 'pt': 3, - 'rm': 3, - 'ro': 9, - 'rof': 3, - 'ru': 11, - 'rwk': 3, - 'sah': 0, - 'saq': 3, - 'se': 7, - 'seh': 3, - 'ses': 0, - 'sg': 0, - 'sh': 11, - 'shi': 19, - 'sk': 12, - 'sl': 14, - 'sma': 7, - 'smi': 7, - 'smj': 7, - 'smn': 7, - 'sms': 7, - 'sn': 3, - 'so': 3, - 'sq': 3, - 'sr': 11, - 'ss': 3, - 'ssy': 3, - 'st': 3, - 'sv': 3, - 'sw': 3, - 'syr': 3, - 'ta': 3, - 'te': 3, - 'teo': 3, - 'th': 0, - 'ti': 4, - 'tig': 3, - 'tk': 3, - 'tl': 4, - 'tn': 3, - 'to': 0, - 'tr': 0, - 'ts': 3, - 'tzm': 22, - 'uk': 11, - 'ur': 3, - 've': 3, - 'vi': 0, - 'vun': 3, - 'wa': 4, - 'wae': 3, - 'wo': 0, - 'xh': 3, - 'xog': 3, - 'yo': 0, - 'zh': 0, - 'zu': 3 - }; - - // utility functions for plural rules methods - function isIn(n, list) { - return list.indexOf(n) !== -1; - } - function isBetween(n, start, end) { - return start <= n && n <= end; - } - - // list of all plural rules methods: - // map an integer to the plural form name to use - var pluralRules = { - '0': function(n) { - return 'other'; - }, - '1': function(n) { - if ((isBetween((n % 100), 3, 10))) - return 'few'; - if (n === 0) - return 'zero'; - if ((isBetween((n % 100), 11, 99))) - return 'many'; - if (n == 2) - return 'two'; - if (n == 1) - return 'one'; - return 'other'; - }, - '2': function(n) { - if (n !== 0 && (n % 10) === 0) - return 'many'; - if (n == 2) - return 'two'; - if (n == 1) - return 'one'; - return 'other'; - }, - '3': function(n) { - if (n == 1) - return 'one'; - return 'other'; - }, - '4': function(n) { - if ((isBetween(n, 0, 1))) - return 'one'; - return 'other'; - }, - '5': function(n) { - if ((isBetween(n, 0, 2)) && n != 2) - return 'one'; - return 'other'; - }, - '6': function(n) { - if (n === 0) - return 'zero'; - if ((n % 10) == 1 && (n % 100) != 11) - return 'one'; - return 'other'; - }, - '7': function(n) { - if (n == 2) - return 'two'; - if (n == 1) - return 'one'; - return 'other'; - }, - '8': function(n) { - if ((isBetween(n, 3, 6))) - return 'few'; - if ((isBetween(n, 7, 10))) - return 'many'; - if (n == 2) - return 'two'; - if (n == 1) - return 'one'; - return 'other'; - }, - '9': function(n) { - if (n === 0 || n != 1 && (isBetween((n % 100), 1, 19))) - return 'few'; - if (n == 1) - return 'one'; - return 'other'; - }, - '10': function(n) { - if ((isBetween((n % 10), 2, 9)) && !(isBetween((n % 100), 11, 19))) - return 'few'; - if ((n % 10) == 1 && !(isBetween((n % 100), 11, 19))) - return 'one'; - return 'other'; - }, - '11': function(n) { - if ((isBetween((n % 10), 2, 4)) && !(isBetween((n % 100), 12, 14))) - return 'few'; - if ((n % 10) === 0 || - (isBetween((n % 10), 5, 9)) || - (isBetween((n % 100), 11, 14))) - return 'many'; - if ((n % 10) == 1 && (n % 100) != 11) - return 'one'; - return 'other'; - }, - '12': function(n) { - if ((isBetween(n, 2, 4))) - return 'few'; - if (n == 1) - return 'one'; - return 'other'; - }, - '13': function(n) { - if ((isBetween((n % 10), 2, 4)) && !(isBetween((n % 100), 12, 14))) - return 'few'; - if (n != 1 && (isBetween((n % 10), 0, 1)) || - (isBetween((n % 10), 5, 9)) || - (isBetween((n % 100), 12, 14))) - return 'many'; - if (n == 1) - return 'one'; - return 'other'; - }, - '14': function(n) { - if ((isBetween((n % 100), 3, 4))) - return 'few'; - if ((n % 100) == 2) - return 'two'; - if ((n % 100) == 1) - return 'one'; - return 'other'; - }, - '15': function(n) { - if (n === 0 || (isBetween((n % 100), 2, 10))) - return 'few'; - if ((isBetween((n % 100), 11, 19))) - return 'many'; - if (n == 1) - return 'one'; - return 'other'; - }, - '16': function(n) { - if ((n % 10) == 1 && n != 11) - return 'one'; - return 'other'; - }, - '17': function(n) { - if (n == 3) - return 'few'; - if (n === 0) - return 'zero'; - if (n == 6) - return 'many'; - if (n == 2) - return 'two'; - if (n == 1) - return 'one'; - return 'other'; - }, - '18': function(n) { - if (n === 0) - return 'zero'; - if ((isBetween(n, 0, 2)) && n !== 0 && n != 2) - return 'one'; - return 'other'; - }, - '19': function(n) { - if ((isBetween(n, 2, 10))) - return 'few'; - if ((isBetween(n, 0, 1))) - return 'one'; - return 'other'; - }, - '20': function(n) { - if ((isBetween((n % 10), 3, 4) || ((n % 10) == 9)) && !( - isBetween((n % 100), 10, 19) || - isBetween((n % 100), 70, 79) || - isBetween((n % 100), 90, 99) - )) - return 'few'; - if ((n % 1000000) === 0 && n !== 0) - return 'many'; - if ((n % 10) == 2 && !isIn((n % 100), [12, 72, 92])) - return 'two'; - if ((n % 10) == 1 && !isIn((n % 100), [11, 71, 91])) - return 'one'; - return 'other'; - }, - '21': function(n) { - if (n === 0) - return 'zero'; - if (n == 1) - return 'one'; - return 'other'; - }, - '22': function(n) { - if ((isBetween(n, 0, 1)) || (isBetween(n, 11, 99))) - return 'one'; - return 'other'; - }, - '23': function(n) { - if ((isBetween((n % 10), 1, 2)) || (n % 20) === 0) - return 'one'; - return 'other'; - }, - '24': function(n) { - if ((isBetween(n, 3, 10) || isBetween(n, 13, 19))) - return 'few'; - if (isIn(n, [2, 12])) - return 'two'; - if (isIn(n, [1, 11])) - return 'one'; - return 'other'; - } - }; - - // return a function that gives the plural form name for a given integer - var index = locales2rules[lang.replace(/-.*$/, '')]; - if (!(index in pluralRules)) { - consoleWarn('plural form unknown for [' + lang + ']'); - return function() { return 'other'; }; - } - return pluralRules[index]; - } - - // pre-defined 'plural' macro - gMacros.plural = function(str, param, key, prop) { - var n = parseFloat(param); - if (isNaN(n)) - return str; - - // TODO: support other properties (l20n still doesn't...) - if (prop != gTextProp) - return str; - - // initialize _pluralRules - if (!gMacros._pluralRules) - gMacros._pluralRules = getPluralRules(gLanguage); - var index = '[' + gMacros._pluralRules(n) + ']'; - - // try to find a [zero|one|two] key if it's defined - if (n === 0 && (key + '[zero]') in gL10nData) { - str = gL10nData[key + '[zero]'][prop]; - } else if (n == 1 && (key + '[one]') in gL10nData) { - str = gL10nData[key + '[one]'][prop]; - } else if (n == 2 && (key + '[two]') in gL10nData) { - str = gL10nData[key + '[two]'][prop]; - } else if ((key + index) in gL10nData) { - str = gL10nData[key + index][prop]; - } - - return str; - }; - - - /** - * l10n dictionary functions - */ - - // fetch an l10n object, warn if not found, apply `args' if possible - function getL10nData(key, args) { - var data = gL10nData[key]; - if (!data) { - consoleWarn('#' + key + ' missing for [' + gLanguage + ']'); - } - - /** This is where l10n expressions should be processed. - * The plan is to support C-style expressions from the l20n project; - * until then, only two kinds of simple expressions are supported: - * {[ index ]} and {{ arguments }}. - */ - var rv = {}; - for (var prop in data) { - var str = data[prop]; - str = substIndexes(str, args, key, prop); - str = substArguments(str, args); - rv[prop] = str; - } - return rv; - } - - // replace {[macros]} with their values - function substIndexes(str, args, key, prop) { - var reIndex = /\{\[\s*([a-zA-Z]+)\(([a-zA-Z]+)\)\s*\]\}/; - var reMatch = reIndex.exec(str); - if (!reMatch || !reMatch.length) - return str; - - // an index/macro has been found - // Note: at the moment, only one parameter is supported - var macroName = reMatch[1]; - var paramName = reMatch[2]; - var param; - if (args && paramName in args) { - param = args[paramName]; - } else if (paramName in gL10nData) { - param = gL10nData[paramName]; - } - - // there's no macro parser yet: it has to be defined in gMacros - if (macroName in gMacros) { - var macro = gMacros[macroName]; - str = macro(str, param, key, prop); - } - return str; - } - - // replace {{arguments}} with their values - function substArguments(str, args) { - var reArgs = /\{\{\s*([a-zA-Z\.]+)\s*\}\}/; - var match = reArgs.exec(str); - while (match) { - if (!match || match.length < 2) - return str; // argument key not found - - var arg = match[1]; - var sub = ''; - if (arg in args) { - sub = args[arg]; - } else if (arg in gL10nData) { - sub = gL10nData[arg][gTextProp]; - } else { - consoleWarn('could not find argument {{' + arg + '}}'); - return str; - } - - str = str.substring(0, match.index) + sub + - str.substr(match.index + match[0].length); - match = reArgs.exec(str); - } - return str; - } - - // translate an HTML element - function translateElement(element) { - var l10n = getL10nAttributes(element); - if (!l10n.id) - return; - - // get the related l10n object - var data = getL10nData(l10n.id, l10n.args); - if (!data) { - consoleWarn('#' + l10n.id + ' missing for [' + gLanguage + ']'); - return; - } - - // translate element (TODO: security checks?) - // for the node content, replace the content of the first child textNode - // and clear other child textNodes - if (data[gTextProp]) { // XXX - if (element.children.length === 0) { - element[gTextProp] = data[gTextProp]; - } else { - var children = element.childNodes, - found = false; - for (var i = 0, l = children.length; i < l; i++) { - if (children[i].nodeType === 3 && - /\S/.test(children[i].textContent)) { // XXX - // using nodeValue seems cross-browser - if (found) { - children[i].nodeValue = ''; - } else { - children[i].nodeValue = data[gTextProp]; - found = true; - } - } - } - if (!found) { - consoleWarn('unexpected error, could not translate element content'); - } - } - delete data[gTextProp]; - } - - for (var k in data) { - element[k] = data[k]; - } - } - - // translate an HTML subtree - function translateFragment(element) { - element = element || document.documentElement; - - // check all translatable children (= w/ a `data-l10n-id' attribute) - var children = getTranslatableChildren(element); - var elementCount = children.length; - for (var i = 0; i < elementCount; i++) { - translateElement(children[i]); - } - - // translate element itself if necessary - translateElement(element); - } - - - /** - * Startup & Public API - * - * Warning: this part of the code contains browser-specific chunks -- - * that's where obsolete browsers, namely IE8 and earlier, are handled. - * - * Unlike the rest of the lib, this section is not shared with FirefoxOS/Gaia. - */ - - // browser-specific startup - if (document.addEventListener) { // modern browsers and IE9+ - document.addEventListener('DOMContentLoaded', function() { - var lang = document.documentElement.lang || navigator.language || navigator.userLanguage || 'en'; - loadLocale(lang, translateFragment); - }, false); - } else if (window.attachEvent) { // IE8 and before (= oldIE) - // TODO: check if jQuery is loaded (CSS selector + JSON + events) - - // dummy `console.log' and `console.warn' functions - if (!window.console) { - consoleLog = function(message) {}; // just ignore console.log calls - consoleWarn = function(message) { - if (gDEBUG) - alert('[l10n] ' + message); // vintage debugging, baby! - }; - } - - // worst hack ever for IE6 and IE7 - if (!window.JSON) { - consoleWarn('[l10n] no JSON support'); - - getL10nAttributes = function(element) { - if (!element) - return {}; - var l10nId = element.getAttribute('data-l10n-id'), - l10nArgs = element.getAttribute('data-l10n-args'), - args = {}; - if (l10nArgs) try { - args = eval(l10nArgs); // XXX yeah, I know... - } catch (e) { - consoleWarn('[l10n] could not parse arguments for #' + l10nId); - } - return { id: l10nId, args: args }; - }; - } - - // override `getTranslatableChildren' and `getL10nResourceLinks' - if (!document.querySelectorAll) { - consoleWarn('[l10n] no "querySelectorAll" support'); - - getTranslatableChildren = function(element) { - if (!element) - return []; - var nodes = element.getElementsByTagName('*'), - l10nElements = [], - n = nodes.length; - for (var i = 0; i < n; i++) { - if (nodes[i].getAttribute('data-l10n-id')) - l10nElements.push(nodes[i]); - } - return l10nElements; - }; - - getL10nResourceLinks = function() { - var links = document.getElementsByTagName('link'), - l10nLinks = [], - n = links.length; - for (var i = 0; i < n; i++) { - if (links[i].type == 'application/l10n') - l10nLinks.push(links[i]); - } - return l10nLinks; - }; - } - - // fire non-standard `localized' DOM events - if (document.createEventObject && !document.createEvent) { - fireL10nReadyEvent = function(lang) { - // hack to simulate a custom event in IE: - // to catch this event, add an event handler to `onpropertychange' - document.documentElement.localized = 1; - }; - } - - // startup for IE<9 - window.attachEvent('onload', function() { - gTextProp = document.body.textContent ? 'textContent' : 'innerText'; - var lang = document.documentElement.lang || navigator.language || navigator.userLanguage || 'en'; - loadLocale(lang, translateFragment); - }); - } - - // cross-browser API (sorry, oldIE doesn't support getters & setters) - return { - // get a localized string - get: function(key, args, fallback) { - var data = getL10nData(key, args) || fallback; - if (data) { // XXX double-check this - return 'textContent' in data ? data.textContent : ''; - } - return '{{' + key + '}}'; - }, - - // debug - getData: function() { return gL10nData; }, - getText: function() { return gTextData; }, - - // get|set the document language - getLanguage: function() { return gLanguage; }, - setLanguage: function(lang) { loadLocale(lang, translateFragment); }, - - // get the direction (ltr|rtl) of the current language - getDirection: function() { - // http://www.w3.org/International/questions/qa-scripts - // Arabic, Hebrew, Farsi, Pashto, Urdu - var rtlList = ['ar', 'he', 'fa', 'ps', 'ur']; - return (rtlList.indexOf(gLanguage) >= 0) ? 'rtl' : 'ltr'; - }, - - // translate an element or document fragment - translate: translateFragment, - - // this can be used to prevent race conditions - getReadyState: function() { return gReadyState; } - }; - -}) (window, document); - -// gettext-like shortcut for navigator.webL10n.get -if (window._ === undefined) - var _ = document.webL10n.get; - -// CommonJS -try { - exports = document.webL10n; -}catch(e){} \ No newline at end of file +(function(document) { + // Set language for l10n + var language = document.cookie.match(/language=((\w{2,3})(-w+)?)/); + if(language) language = language[1]; + + html10n.bind('indexed', function() { + html10n.localize([language, navigator.language, navigator.userLanguage, 'en']) + }) + + html10n.bind('localized', function() { + document.documentElement.lang = html10n.getLanguage() + document.documentElement.dir = html10n.getDirection() + }) +})(document) \ No newline at end of file diff --git a/src/static/js/pad.js b/src/static/js/pad.js index b665c2fb..a02d7abb 100644 --- a/src/static/js/pad.js +++ b/src/static/js/pad.js @@ -51,18 +51,20 @@ var randomString = require('./pad_utils').randomString; var hooks = require('./pluginfw/hooks'); -function createCookie(name, value, days, path) -{ +function createCookie(name, value, days, path){ /* Warning Internet Explorer doesn't use this it uses the one from pad_utils.js */ if (days) { var date = new Date(); date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000)); var expires = "; expires=" + date.toGMTString(); } - else var expires = ""; + else{ + var expires = ""; + } - if(!path) + if(!path){ // If the path isn't set then just whack the cookie on the root path path = "/"; + } //Check if the browser is IE and if so make sure the full path is set in the cookie if(navigator.appName=='Microsoft Internet Explorer'){ @@ -178,7 +180,7 @@ function getParams() { if(lang !== "") { - document.webL10n.setLanguage(lang); + window.html10n.localize([lang, 'en']); } } } @@ -202,6 +204,7 @@ function savePassword() createCookie("password",$("#passwordinput").val(),null,document.location.pathname); //reload document.location=document.location; + return false; } function handshake() @@ -298,21 +301,25 @@ function handshake() //the access was not granted, give the user a message if(!receivedClientVars && obj.accessStatus) { + $('.passForm').submit(require(module.id).savePassword); + if(obj.accessStatus == "deny") { - $("#editorloadingbox").html("You do not have permission to access this pad"); + $('#loading').hide(); + $("#permissionDenied").show(); } else if(obj.accessStatus == "needPassword") { - $("#editorloadingbox").html("You need a password to access this pad
" + - ""+ - ""); + $('#loading').hide(); + $('#passwordRequired').show(); + $("#passwordinput").focus(); } else if(obj.accessStatus == "wrongPassword") { - $("#editorloadingbox").html("You're password was wrong
" + - ""+ - ""); + $('#loading').hide(); + $('#wrongPassword').show(); + $('#passwordRequired').show(); + $("#passwordinput").focus(); } } diff --git a/src/static/js/pad_editbar.js b/src/static/js/pad_editbar.js index 24dd3d6f..91a07bf9 100644 --- a/src/static/js/pad_editbar.js +++ b/src/static/js/pad_editbar.js @@ -169,7 +169,7 @@ var padeditbar = (function() { if ((!(ace.ace_getRep().selStart && ace.ace_getRep().selEnd)) || ace.ace_isCaret()) { - if (window.confirm("Clear authorship colors on entire document?")) + if (window.confirm(html10n.get("pad.editbar.clearcolors"))) { ace.ace_performDocumentApplyAttributesToCharRange(0, ace.ace_getRep().alltext.length, [ ['author', ''] diff --git a/src/static/js/pad_editor.js b/src/static/js/pad_editor.js index 690dde37..f4778802 100644 --- a/src/static/js/pad_editor.js +++ b/src/static/js/pad_editor.js @@ -75,10 +75,14 @@ var padeditor = (function() { pad.changeViewOption('useMonospaceFont', $("#viewfontmenu").val() == 'monospace'); }); - $("#languagemenu").val(document.webL10n.getLanguage()); + + html10n.bind('localized', function() { + $("#languagemenu").val(html10n.getLanguage()); + }) + $("#languagemenu").val(html10n.getLanguage()); $("#languagemenu").change(function() { pad.createCookie("language",$("#languagemenu").val(),null,'/'); - document.webL10n.setLanguage($("#languagemenu").val()); + window.html10n.localize([$("#languagemenu").val(), 'en']); }); }, setViewOptions: function(newOptions) diff --git a/src/static/js/pad_impexp.js b/src/static/js/pad_impexp.js index 08dd4293..c7a26fbe 100644 --- a/src/static/js/pad_impexp.js +++ b/src/static/js/pad_impexp.js @@ -69,7 +69,7 @@ var padimpexp = (function() function fileInputSubmit() { $('#importmessagefail').fadeOut("fast"); - var ret = window.confirm("Importing a file will overwrite the current text of the pad." + " Are you sure you want to proceed?"); + var ret = window.confirm(html10n.get("pad.impexp.confirmimport")); if (ret) { hidePanelCall = paddocbar.hideLaterIfNoOtherInteraction(); @@ -85,7 +85,8 @@ var padimpexp = (function() $('#importsubmitinput').attr( { disabled: true - }).val("Importing..."); + }).val(html10n.get("pad.impexp.importing")); + window.setTimeout(function() { $('#importfileinput').attr( @@ -106,7 +107,7 @@ var padimpexp = (function() function importDone() { - $('#importsubmitinput').removeAttr('disabled').val("Import Now"); + $('#importsubmitinput').removeAttr('disabled').val(html10n.get("pad.impexp.importbutton")); window.setTimeout(function() { $('#importfileinput').removeAttr('disabled'); @@ -130,14 +131,14 @@ var padimpexp = (function() var msg=""; if(status === "convertFailed"){ - msg = "We were not able to import this file. Please use a different document format or copy paste manually"; + msg = html10n.get("pad.impexp.convertFailed"); } else if(status === "uploadFailed"){ - msg = "The upload failed, please try again"; + msg = html10n.get("pad.impexp.uploadFailed"); } function showError(fade) { - $('#importmessagefail').html('Import failed: ' + (msg || 'Please copy paste'))[(fade ? "fadeIn" : "show")](); + $('#importmessagefail').html(''+html10n.get('pad.impexp.importfailed')+': ' + (msg || html10n.get('pad.impexp.copypaste','')))[(fade ? "fadeIn" : "show")](); } if ($('#importexport .importmessage').is(':visible')) @@ -198,7 +199,7 @@ var padimpexp = (function() { type = "this file"; } - alert("Exporting as " + type + " format is disabled. Please contact your" + " system administrator for details."); + alert(html10n.get("pad.impexp.exportdisabled", {type:type})); return false; } @@ -214,10 +215,19 @@ var padimpexp = (function() //get http://example.com/p/padname var pad_root_url = document.location.href.replace(document.location.pathname, pad_root_path) + //i10l buttom import + $('#importsubmitinput').val(html10n.get("pad.impexp.importbutton")); + html10n.bind('localized', function() { + $('#importsubmitinput').val(html10n.get("pad.impexp.importbutton")); + }) + // build the export links $("#exporthtmla").attr("href", pad_root_path + "/export/html"); $("#exportplaina").attr("href", pad_root_path + "/export/txt"); $("#exportdokuwikia").attr("href", pad_root_path + "/export/dokuwiki"); + + // activate action to import in the form + $("#importform").attr('action', pad_root_url + "/import"); //hide stuff thats not avaible if abiword is disabled if(clientVars.abiwordAvailable == "no") @@ -225,8 +235,8 @@ var padimpexp = (function() $("#exportworda").remove(); $("#exportpdfa").remove(); $("#exportopena").remove(); - $(".importformdiv").remove(); - $("#import").html("Import is not available. To enable import please install abiword"); + + $("#importmessageabiword").show(); } else if(clientVars.abiwordAvailable == "withoutPDF") { @@ -237,16 +247,12 @@ var padimpexp = (function() $("#importexport").css({"height":"142px"}); $("#importexportline").css({"height":"142px"}); - - $("#importform").attr('action', pad_root_url + "/import"); } else { $("#exportworda").attr("href", pad_root_path + "/export/doc"); $("#exportpdfa").attr("href", pad_root_path + "/export/pdf"); $("#exportopena").attr("href", pad_root_path + "/export/odt"); - - $("#importform").attr('action', pad_root_path + "/import"); } $("#impexp-close").click(function() diff --git a/src/static/js/pad_savedrevs.js b/src/static/js/pad_savedrevs.js index bf4f941c..e1552c27 100644 --- a/src/static/js/pad_savedrevs.js +++ b/src/static/js/pad_savedrevs.js @@ -18,7 +18,7 @@ var pad; exports.saveNow = function(){ pad.collabClient.sendMessage({"type": "SAVE_REVISION"}); - alert("This revision is now marked as a saved revision"); + alert(_("pad.savedrevs.marked")); } exports.init = function(_pad){ diff --git a/src/static/js/pad_userlist.js b/src/static/js/pad_userlist.js index 474f9b0e..40e87a4f 100644 --- a/src/static/js/pad_userlist.js +++ b/src/static/js/pad_userlist.js @@ -113,12 +113,12 @@ var paduserlist = (function() nameHtml = padutils.escapeHtml(data.name); if (isGuest && pad.getIsProPad()) { - nameHtml += ' (Guest)'; + nameHtml += ' ('+_(pad.userlist.guest)+')'; } } else { - nameHtml = ''; + nameHtml = ''; } return ['
 
', '', nameHtml, '', '', padutils.escapeHtml(data.activity), ''].join(''); @@ -374,7 +374,7 @@ var paduserlist = (function() if (!newName) { jnode.addClass("editempty"); - jnode.val("unnamed"); + jnode.val(_('pad.userlist.unnamed')); } else { @@ -662,13 +662,13 @@ var paduserlist = (function() if (box.length == 0) { // make guest prompt box - box = $('
Guest: ' + padutils.escapeHtml(displayName) + '
'); + box = $('
'+_('pad.userlist.guest')+': ' + padutils.escapeHtml(displayName) + '
'); $("#guestprompts").append(box); } else { // update display name - box.find(".guestname").html('Guest: ' + padutils.escapeHtml(displayName)); + box.find(".guestname").html(''+_('pad.userlist.guest')+': ' + padutils.escapeHtml(displayName)); } var hideLater = padutils.getCancellableAction(actionName, function() { @@ -715,7 +715,7 @@ var paduserlist = (function() } else { - $("#myusernameedit").addClass("editempty").val("Enter your name"); + $("#myusernameedit").addClass("editempty").val(_("pad.userlist.entername")); } if (colorPickerOpen) { diff --git a/src/static/js/pad_utils.js b/src/static/js/pad_utils.js index 83ee9aae..82f7fcad 100644 --- a/src/static/js/pad_utils.js +++ b/src/static/js/pad_utils.js @@ -39,20 +39,29 @@ function randomString(len) return randomstring; } -function createCookie(name, value, days, path) -{ +function createCookie(name, value, days, path){ /* Used by IE */ if (days) { var date = new Date(); date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000)); var expires = "; expires=" + date.toGMTString(); } - else var expires = ""; + else{ + var expires = ""; + } - if(!path) + if(!path){ // IF the Path of the cookie isn't set then just create it on root path = "/"; + } + + //Check if the browser is IE and if so make sure the full path is set in the cookie + if(navigator.appName=='Microsoft Internet Explorer'){ + document.cookie = name + "=" + value + expires + "; path=/"; /* Note this bodge fix for IE is temporary until auth is rewritten */ + } + else{ + document.cookie = name + "=" + value + expires + "; path=" + path; + } - document.cookie = name + "=" + value + expires + "; path=" + path; } function readCookie(name) diff --git a/src/static/js/pluginfw/installer.js b/src/static/js/pluginfw/installer.js index d668e549..e491f077 100644 --- a/src/static/js/pluginfw/installer.js +++ b/src/static/js/pluginfw/installer.js @@ -91,9 +91,12 @@ exports.search = function(query, cache, cb) { if (er) return cb(er); var res = {}; var i = 0; - for (key in data) { + for (key in data) { // for every plugin in the data from npm if ( key.indexOf(plugins.prefix) == 0 - && key.indexOf(query.pattern) != -1) { + && key.indexOf(query.pattern) != -1 + || key.indexOf(plugins.prefix) == 0 + && data[key].description.indexOf(query.pattern) != -1 + ) { // If the name contains ep_ and the search string is in the name or description i++; if (i > query.offset && i <= query.offset + query.limit) { diff --git a/src/templates/admin/plugins-info.html b/src/templates/admin/plugins-info.html index 22f87073..94f94e2a 100644 --- a/src/templates/admin/plugins-info.html +++ b/src/templates/admin/plugins-info.html @@ -14,17 +14,17 @@

Installed plugins

-
<%= plugins.formatPlugins() %>
+
<%- plugins.formatPlugins().replace(", ","\n") %>

Installed parts

<%= plugins.formatParts() %>

Installed hooks

Server side hooks

-
<%= plugins.formatHooks() %>
+
<%- plugins.formatHooks() %>

Client side hooks

-
<%= plugins.formatHooks("client_hooks") %>
+
<%- plugins.formatHooks("client_hooks") %>
diff --git a/src/templates/admin/plugins.html b/src/templates/admin/plugins.html index 3dad3bd0..394cf0e0 100644 --- a/src/templates/admin/plugins.html +++ b/src/templates/admin/plugins.html @@ -30,6 +30,7 @@ Name Description + Version @@ -37,6 +38,7 @@ + @@ -58,6 +60,7 @@ Name Description + Version @@ -65,6 +68,7 @@ + diff --git a/src/templates/index.html b/src/templates/index.html index 9fd33a26..668b7abe 100644 --- a/src/templates/index.html +++ b/src/templates/index.html @@ -31,17 +31,11 @@ - - - - + + + +