Merge branch 'release/1.2.11'

This commit is contained in:
John McLear 2013-06-24 13:36:41 +01:00
commit b1b6289eb3
45 changed files with 1124 additions and 309 deletions

View file

@ -4,20 +4,17 @@ node_js:
install:
- "bin/installDeps.sh"
- "export GIT_HASH=$(cat .git/HEAD | head -c 7)"
before_script:
before_script:
- "tests/frontend/travis/sauce_tunnel.sh"
script:
- "tests/frontend/travis/runner.sh"
env:
global:
- secure: "OxZ2s724S96xu02746LUN+4lBckAe1BOICJjfA4jnFPNpiNU6XoMH52f+LgG\nZzAwu6xMTv+NsaLGp6Avm3cx4GZ+jIiHe4NB9XOgYPa0r0TBIi3ueWYPDyVv\nCniS/4qX68DoFNV4lh7zMBXn0IIPxT4Wppm3desBpjWDP/SdoRs="
- SAUCE_USER=etherpad
- secure: "WMGxFkOeTTlhWB+ChMucRtIqVmMbwzYdNHuHQjKCcj8HBEPdZLfCuK/kf4rG\nVLcLQiIsyllqzNhBGVHG1nyqWr0/LTm8JRqSCDDVIhpyzp9KpCJQQJG2Uwjk\n6/HIJJh/wbxsEdLNV2crYU/EiVO3A4Bq0YTHUlbhUqG3mSCr5Ec="
- secure: "gejXUAHYscbR6Bodw35XexpToqWkv2ifeECsbeEmjaLkYzXmUUNWJGknKSu7\nEUsSfQV8w+hxApr1Z+jNqk9aX3K1I4btL3cwk2trnNI8XRAvu1c1Iv60eerI\nkE82Rsd5lwUaMEh+/HoL8ztFCZamVndoNgX7HWp5J/NRZZMmh4g="
jdk:
- oraclejdk6
notifications:
email:
- petermartischka@googlemail.com
- contact@etherpad.org
irc:
channels:
- "irc.freenode.org#etherpad-lite-dev"

View file

@ -1,3 +1,16 @@
# 1.2.11
* NEW: New Hook for outer_ace dynamic css manager and author style hook
* NEW: Bump log4js for improved logging
* Fix: Remove URL schemes which don't have RFC standard
* Fix: Fix safeRun subsequent restarts issue
* Fix: Allow safeRun to pass arguements to run.sh
* Fix: Include script for more efficient import
* Fix: Fix sysv comptibile script
* Fix: Fix client side changeset spamming
* Fix: Don't crash on no-auth
* Fix: Fix some IE8 errors
* Fix: Fix authorship sanitation
# 1.2.10
* NEW: Broadcast slider is exposed in timeslider so plugins can interact with it
* Fix: IE issue where pads wouldn't load due to missing console from i18n

View file

@ -21,7 +21,7 @@ Also, check out the **[FAQ](https://github.com/ether/etherpad-lite/wiki/FAQ)**,
# Installation
Etherpad works with node v0.8 and v0.10, only. (We don't suppot v0.6)
Etherpad works with node v0.8 and v0.10, only. (We don't support v0.6)
## Windows
@ -81,7 +81,7 @@ Documentation can be found in `docs/`.
# Development
## Things you should know
Read this [git guide](http://learn.github.com/p/intro.html) and watch this [video on getting started with Etherpad Development](http://youtu.be/67-Q26YH97E).
Read this [git guide](http://learn.github.com/p/index.html) and watch this [video on getting started with Etherpad Development](http://youtu.be/67-Q26YH97E).
If you're new to node.js, start with Ryan Dahl's [Introduction to Node.js](http://youtu.be/jo_B4LTHi3I).

View file

@ -16,6 +16,7 @@ TIME_BETWEEN_EMAILS=600 # 10 minutes
# DON'T EDIT AFTER THIS LINE
LAST_EMAIL_SEND=0
LOG="$1"
#Move to the folder where ep-lite is installed
cd `dirname $0`
@ -26,26 +27,27 @@ if [ -d "../bin" ]; then
fi
#check if a logfile parameter is set
if [ -z "$1" ]; then
if [ -z "${LOG}" ]; then
echo "Set a logfile as the first parameter"
exit 1
fi
shift
while [ 1 ]
do
#try to touch the file if it doesn't exist
if [ ! -f $1 ]; then
touch $1 || ( echo "Logfile '$1' is not writeable" && exit 1 )
if [ ! -f ${LOG} ]; then
touch ${LOG} || ( echo "Logfile '${LOG}' is not writeable" && exit 1 )
fi
#check if the file is writeable
if [ ! -w $1 ]; then
echo "Logfile '$1' is not writeable"
if [ ! -w ${LOG} ]; then
echo "Logfile '${LOG}' is not writeable"
exit 1
fi
#start the application
bin/run.sh >>$1 2>>$1
bin/run.sh $@ >>${LOG} 2>>${LOG}
#Send email
if [ $ERROR_HANDLING = 1 ]; then
@ -53,13 +55,13 @@ do
TIME_SINCE_LAST_SEND=$(($TIME_NOW - $LAST_EMAIL_SEND))
if [ $TIME_SINCE_LAST_SEND -gt $TIME_BETWEEN_EMAILS ]; then
printf "Server was restared at: $(date)\nThe last 50 lines of the log before the error happens:\n $(tail -n 50 $1)" | mail -s "Pad Server was restarted" $EMAIL_ADDRESS
printf "Server was restared at: $(date)\nThe last 50 lines of the log before the error happens:\n $(tail -n 50 ${LOG})" | mail -s "Pad Server was restarted" $EMAIL_ADDRESS
LAST_EMAIL_SEND=$TIME_NOW
fi
fi
echo "RESTART!" >>$1
echo "RESTART!" >>${LOG}
#Sleep 10 seconds before restart
sleep 10

View file

@ -261,3 +261,18 @@ This hook is provided to allow whether a given line should be deliniated with mu
Multiple authors in one line cause the creation of magic span lines. This might not suit you and
now you can disable it and handle your own deliniation.
The return value should be either true(disable) or false.
## aceSetAuthorStyle
Called from: src/static/js/ace2_inner.js
Things in context:
1. dynamicCSS - css manger for inner ace
2. outerDynamicCSS - css manager for outer ace
3. parentDynamicCSS - css manager for parent document
4. info - author style info
5. author - author info
6. authorSelector - css selector for author span in inner ace
This hook is provided to allow author highlight style to be modified.
Registered hooks should return 1 if the plugin handles highlighting. If no plugin returns 1, the core will use the default background-based highlighting.

View file

@ -5,6 +5,8 @@
"Tux-tn"
]
},
"index.newPad": "\u0628\u0627\u062f \u062c\u062f\u064a\u062f",
"index.createOpenPad": "\u0623\u0648 \u0635\u0646\u0639/\u0641\u062a\u062d \u0628\u0627\u062f \u0628\u0648\u0636\u0639 \u0625\u0633\u0645\u0647:",
"pad.toolbar.bold.title": "\u0633\u0645\u064a\u0643 (Ctrl-B)",
"pad.toolbar.italic.title": "\u0645\u0627\u0626\u0644 (Ctrl-I)",
"pad.toolbar.underline.title": "\u062a\u0633\u0637\u064a\u0631 (Ctrl-U)",
@ -17,20 +19,31 @@
"pad.toolbar.redo.title": "\u062a\u0643\u0631\u0627\u0631 (Ctrl-Y)",
"pad.toolbar.import_export.title": "\u0627\u0633\u062a\u064a\u0631\u0627\u062f/\u062a\u0635\u062f\u064a\u0631 \u0645\u0646/\u0625\u0644\u0649 \u062a\u0646\u0633\u064a\u0642\u0627\u062a \u0645\u0644\u0641\u0627\u062a \u0645\u062e\u062a\u0644\u0641\u0629",
"pad.toolbar.timeslider.title": "\u0645\u062a\u0635\u0641\u062d \u0627\u0644\u062a\u0627\u0631\u064a\u062e",
"pad.toolbar.savedRevision.title": "\u0627\u0644\u062a\u0646\u0642\u064a\u062d\u0627\u062a \u0627\u0644\u0645\u062d\u0641\u0648\u0638\u0629",
"pad.toolbar.savedRevision.title": "\u062d\u0641\u0638 \u0627\u0644\u0645\u0631\u0627\u062c\u0639\u0629",
"pad.toolbar.settings.title": "\u0627\u0644\u0625\u0639\u062f\u0627\u062f\u0627\u062a",
"pad.toolbar.embed.title": "\u062a\u0628\u0627\u062f\u0644 \u0648 \u062a\u0636\u0645\u064a\u0646 \u0647\u0630\u0627 \u0627\u0644\u0628\u0627\u062f",
"pad.toolbar.showusers.title": "\u0639\u0631\u0636 \u0627\u0644\u0645\u0633\u062a\u062e\u062f\u0645\u064a\u0646 \u0639\u0644\u0649 \u0647\u0630\u0627 \u0627\u0644\u0628\u0627\u062f",
"pad.colorpicker.save": "\u062a\u0633\u062c\u064a\u0644",
"pad.colorpicker.cancel": "\u0625\u0644\u063a\u0627\u0621",
"pad.loading": "\u062c\u0627\u0631\u064a \u0627\u0644\u062a\u062d\u0645\u064a\u0644...",
"pad.passwordRequired": "\u062a\u062d\u062a\u0627\u062c \u0625\u0644\u0649 \u0643\u0644\u0645\u0629 \u0645\u0631\u0648\u0631 \u0644\u0644\u0648\u0635\u0648\u0644 \u0625\u0644\u0649 \u0647\u0630\u0627 \u0627\u0644\u0628\u0627\u062f",
"pad.permissionDenied": "\u0644\u064a\u0633 \u0644\u062f\u064a\u0643 \u0625\u0630\u0646 \u0644\u062f\u062e\u0648\u0644 \u0647\u0630\u0627 \u0627\u0644\u0628\u0627\u062f",
"pad.wrongPassword": "\u0643\u0627\u0646\u062a \u0643\u0644\u0645\u0629 \u0627\u0644\u0645\u0631\u0648\u0631 \u062e\u0627\u0637\u0626\u0629",
"pad.settings.padSettings": "\u0625\u0639\u062f\u0627\u062f\u0627\u062a \u0627\u0644\u0628\u0627\u062f",
"pad.settings.myView": "\u0631\u0624\u064a\u062a\u064a",
"pad.settings.stickychat": "\u0627\u0644\u062f\u0631\u062f\u0634\u0629 \u062f\u0627\u0626\u0645\u0627 \u0639\u0644\u0649 \u0627\u0644\u0634\u0627\u0634\u0629",
"pad.settings.colorcheck": "\u0623\u0644\u0648\u0627\u0646 \u0627\u0644\u062a\u0623\u0644\u064a\u0641",
"pad.settings.linenocheck": "\u0623\u0631\u0642\u0627\u0645 \u0627\u0644\u0623\u0633\u0637\u0631",
"pad.settings.rtlcheck": "\u0642\u0631\u0627\u0621\u0629 \u0627\u0644\u0645\u062d\u062a\u0648\u064a\u0627\u062a \u0645\u0646 \u0627\u0644\u064a\u0645\u064a\u0646 \u0625\u0644\u0649 \u0627\u0644\u064a\u0633\u0627\u0631\u061f",
"pad.settings.fontType": "\u0646\u0648\u0639 \u0627\u0644\u062e\u0637:",
"pad.settings.fontType.normal": "\u0639\u0627\u062f\u064a",
"pad.settings.fontType.monospaced": "\u062b\u0627\u0628\u062a \u0627\u0644\u0639\u0631\u0636",
"pad.settings.globalView": "\u0627\u0644\u0631\u0624\u064a\u0629 \u0627\u0644\u0634\u0627\u0645\u0644\u0629",
"pad.settings.language": "\u0627\u0644\u0644\u063a\u0629:",
"pad.importExport.import_export": "\u0627\u0633\u062a\u064a\u0631\u0627\u062f/\u062a\u0635\u062f\u064a\u0631",
"pad.importExport.import": "\u062a\u062d\u0645\u064a\u0644 \u0623\u064a \u0645\u0644\u0641 \u0646\u0635\u064a \u0623\u0648 \u0648\u062b\u064a\u0642\u0629",
"pad.importExport.importSuccessful": "\u0646\u0627\u062c\u062d!",
"pad.importExport.export": "\u062a\u0635\u062f\u064a\u0631 \u0627\u0644\u0628\u0627\u062f \u0627\u0644\u062d\u0627\u0644\u064a \u0628\u0635\u0641\u0629:",
"pad.importExport.exporthtml": "\u0625\u062a\u0634 \u062a\u064a \u0625\u0645 \u0625\u0644",
"pad.importExport.exportplain": "\u0646\u0635 \u0639\u0627\u062f\u064a",
"pad.importExport.exportword": "\u0645\u0627\u064a\u0643\u0631\u0648\u0633\u0648\u0641\u062a \u0648\u0648\u0631\u062f",
@ -38,7 +51,11 @@
"pad.importExport.exportopen": "ODF (\u0646\u0633\u0642 \u0627\u0644\u0645\u0633\u062a\u0646\u062f \u0627\u0644\u0645\u0641\u062a\u0648\u062d)",
"pad.importExport.exportdokuwiki": "\u062f\u0648\u06a9\u0648\u0648\u064a\u0643\u064a",
"pad.modals.connected": "\u0645\u062a\u0635\u0644.",
"pad.modals.reconnecting": "\u0625\u0639\u0627\u062f\u0629 \u0627\u0644\u0627\u062a\u0635\u0627\u0644 \u0628\u0628\u0627\u062f\u0643",
"pad.modals.forcereconnect": "\u0641\u0631\u0636 \u0625\u0639\u0627\u062f\u0629 \u0627\u0644\u0627\u062a\u0635\u0627\u0644",
"pad.modals.userdup": "\u0645\u0641\u062a\u0648\u062d \u0641\u064a \u0646\u0627\u0641\u0630\u0629 \u0623\u062e\u0631\u0649",
"pad.modals.userdup.explanation": "\u064a\u0628\u062f\u0648 \u0623\u0646 \u0647\u0630\u0627 \u0627\u0644\u0628\u0627\u062f \u062a\u0645 \u0641\u062a\u062d\u0647 \u0641\u064a \u0623\u0643\u062b\u0631 \u0645\u0646 \u0646\u0627\u0641\u0630\u0629 \u0645\u062a\u0635\u0641\u062d \u0641\u064a \u0647\u0630\u0627 \u0627\u0644\u062d\u0627\u0633\u0648\u0628.",
"pad.modals.userdup.advice": "\u0625\u0639\u0627\u062f\u0629 \u0627\u0644\u0627\u062a\u0635\u0627\u0644 \u0644\u0625\u0633\u062a\u0639\u0645\u0627\u0644 \u0647\u0630\u0647 \u0627\u0644\u0646\u0627\u0641\u0630\u0629 \u0628\u062f\u0644\u0627\u064b \u0645\u0646 \u0627\u0644\u0627\u062e\u0631\u0649.",
"pad.modals.unauth": "\u063a\u064a\u0631 \u0645\u062e\u0648\u0644",
"pad.modals.looping": "\u062a\u0645 \u0642\u0637\u0639 \u0627\u0644\u0627\u062a\u0635\u0627\u0644.",
"pad.modals.initsocketfail": "\u0644\u0627 \u064a\u0645\u0643\u0646 \u0627\u0644\u0648\u0635\u0648\u0644 \u0625\u0644\u0649 \u0627\u0644\u062e\u0627\u062f\u0645",
@ -47,16 +64,24 @@
"pad.modals.slowcommit.explanation": "\u0627\u0644\u062e\u0627\u062f\u0645 \u0644\u0627 \u064a\u0633\u062a\u062c\u064a\u0628.",
"pad.modals.slowcommit.cause": "\u064a\u0645\u0643\u0646 \u0623\u0646 \u064a\u0643\u0648\u0646 \u0647\u0630\u0627 \u0628\u0633\u0628\u0628 \u0645\u0634\u0627\u0643\u0644 \u0641\u064a \u0627\u0644\u0627\u062a\u0635\u0627\u0644 \u0628\u0627\u0644\u0634\u0628\u0643\u0629.",
"pad.modals.deleted": "\u0645\u062d\u0630\u0648\u0641.",
"pad.modals.deleted.explanation": "\u062a\u0645\u062a \u0625\u0632\u0627\u0644\u0629 \u0647\u0630\u0627 \u0627\u0644\u0628\u0627\u062f",
"pad.modals.disconnected": "\u0644\u0645 \u062a\u0639\u062f \u0645\u062a\u0651\u0635\u0644.",
"pad.modals.disconnected.explanation": "\u062a\u0645 \u0641\u0642\u062f\u0627\u0646 \u0627\u0644\u0625\u062a\u0635\u0627\u0644 \u0628\u0627\u0644\u062e\u0627\u062f\u0645",
"pad.modals.disconnected.cause": "\u0642\u062f \u064a\u0643\u0648\u0646 \u0627\u0644\u062e\u0627\u062f\u0645 \u063a\u064a\u0631 \u0645\u062a\u0648\u0641\u0631. \u0627\u0644\u0631\u062c\u0627\u0621 \u0625\u0639\u0644\u0627\u0645\u0646\u0627 \u0625\u0630\u0627 \u062a\u0643\u0631\u0631 \u0647\u0630\u0627.",
"pad.share.readonly": "\u0644\u0644\u0642\u0631\u0627\u0621\u0629 \u0641\u0642\u0637",
"pad.share.link": "\u0631\u0627\u0628\u0637",
"pad.share.emebdcode": "URL \u0644\u0644\u062a\u0636\u0645\u064a\u0646",
"pad.chat": "\u062f\u0631\u062f\u0634\u0629",
"pad.chat.title": "\u0641\u062a\u062d \u0627\u0644\u062f\u0631\u062f\u0634\u0629 \u0644\u0647\u0630\u0627 \u0627\u0644\u0628\u0627\u062f",
"pad.chat.loadmessages": "\u062a\u062d\u0645\u064a\u0644 \u0627\u0644\u0645\u0632\u064a\u062f \u0645\u0646 \u0627\u0644\u0631\u0633\u0627\u0626\u0644",
"timeslider.toolbar.returnbutton": "\u0627\u0644\u0639\u0648\u062f\u0629 \u0625\u0644\u0649 \u0627\u0644\u0628\u0627\u062f",
"timeslider.toolbar.authors": "\u0627\u0644\u0645\u0624\u0644\u0641\u0648\u0646:",
"timeslider.toolbar.authorsList": "\u0628\u062f\u0648\u0646 \u0645\u0624\u0644\u0641\u064a\u0646",
"timeslider.toolbar.exportlink.title": "\u062a\u0635\u062f\u064a\u0631",
"timeslider.exportCurrent": "\u062a\u0635\u062f\u064a\u0631 \u0627\u0644\u0646\u0633\u062e\u0629 \u0627\u0644\u062d\u0627\u0644\u064a\u0629 \u0643:",
"timeslider.version": "\u0625\u0635\u062f\u0627\u0631 {{version}}",
"timeslider.saved": "\u0645\u062d\u0641\u0648\u0638 {{month}} {{day}}, {{year}}",
"timeslider.dateformat": "{{day}}/{{month}}/{{year}} {{hours}}:{{minutes}}:{{seconds}}",
"timeslider.month.january": "\u064a\u0646\u0627\u064a\u0631",
"timeslider.month.february": "\u0641\u0628\u0631\u0627\u064a\u0631",
"timeslider.month.march": "\u0645\u0627\u0631\u0633",
@ -73,5 +98,10 @@
"pad.userlist.unnamed": "\u063a\u064a\u0631 \u0645\u0633\u0645\u0649",
"pad.userlist.guest": "\u0636\u064a\u0641",
"pad.userlist.deny": "\u0631\u0641\u0636",
"pad.userlist.approve": "\u0645\u0648\u0627\u0641\u0642\u0629"
"pad.userlist.approve": "\u0645\u0648\u0627\u0641\u0642\u0629",
"pad.impexp.importbutton": "\u0627\u0644\u0627\u0633\u062a\u064a\u0631\u0627\u062f \u0627\u0644\u0622\u0646",
"pad.impexp.importing": "\u0627\u0644\u0627\u0633\u062a\u064a\u0631\u0627\u062f...",
"pad.impexp.uploadFailed": "\u0641\u0634\u0644 \u0627\u0644\u062a\u062d\u0645\u064a\u0644\u060c \u0627\u0644\u0631\u062c\u0627\u0621 \u0627\u0644\u0645\u062d\u0627\u0648\u0644\u0629 \u0645\u0631\u0629 \u0623\u062e\u0631\u0649",
"pad.impexp.importfailed": "\u0641\u0634\u0644 \u0627\u0644\u0627\u0633\u062a\u064a\u0631\u0627\u062f",
"pad.impexp.copypaste": "\u0627\u0644\u0631\u062c\u0627\u0621 \u0646\u0633\u062e/\u0644\u0635\u0642"
}

View file

@ -23,7 +23,7 @@
"pad.toolbar.timeslider.title": "L\u00ednia temporal",
"pad.toolbar.savedRevision.title": "Desa la revisi\u00f3",
"pad.toolbar.settings.title": "Configuraci\u00f3",
"pad.toolbar.embed.title": "Incrusta aquest pad",
"pad.toolbar.embed.title": "Comparteix i incrusta aquest pad",
"pad.toolbar.showusers.title": "Mostra els usuaris d\u2019aquest pad",
"pad.colorpicker.save": "Desa",
"pad.colorpicker.cancel": "Cancel\u00b7la",

View file

@ -1,6 +1,7 @@
{
"@metadata": {
"authors": [
"Jezevec",
"Quinn"
]
},
@ -19,9 +20,9 @@
"pad.toolbar.clearAuthorship.title": "Vymazat barvy autorstv\u00ed",
"pad.toolbar.import_export.title": "Importovat/Exportovat z/do jin\u00fdch form\u00e1t\u016f",
"pad.toolbar.timeslider.title": "Osa \u010dasu",
"pad.toolbar.savedRevision.title": "Ulo\u017een\u00e9 revize",
"pad.toolbar.savedRevision.title": "Ulo\u017eit revizi",
"pad.toolbar.settings.title": "Nastaven\u00ed",
"pad.toolbar.embed.title": "Um\u00edstit tento Pad",
"pad.toolbar.embed.title": "Um\u00edstit a nasd\u00edlet tento Pad",
"pad.toolbar.showusers.title": "Zobrazit u\u017eivatele u tohoto Padu",
"pad.colorpicker.save": "Ulo\u017eit",
"pad.colorpicker.cancel": "Zru\u0161it",
@ -34,6 +35,7 @@
"pad.settings.stickychat": "Chat v\u017edy na obrazovce",
"pad.settings.colorcheck": "Barvy autorstv\u00ed",
"pad.settings.linenocheck": "\u010c\u00edsla \u0159\u00e1dk\u016f",
"pad.settings.rtlcheck": "\u010c\u00edst obsah zprava doleva?",
"pad.settings.fontType": "Typ p\u00edsma:",
"pad.settings.fontType.normal": "Norm\u00e1ln\u00ed",
"pad.settings.fontType.monospaced": "Monospace",
@ -41,6 +43,7 @@
"pad.settings.language": "Jazyk:",
"pad.importExport.import_export": "Import/Export",
"pad.importExport.import": "Nahr\u00e1t libovoln\u00fd textov\u00fd soubor nebo dokument",
"pad.importExport.importSuccessful": "\u00dasp\u011bch!",
"pad.importExport.export": "Exportovat st\u00e1vaj\u00edc\u00ed Pad jako:",
"pad.importExport.exporthtml": "HTML",
"pad.importExport.exportplain": "Prost\u00fd text",
@ -52,6 +55,7 @@
"pad.modals.connected": "P\u0159ipojeno.",
"pad.modals.reconnecting": "Znovup\u0159ipojov\u00e1n\u00ed k tv\u00e9mu Padu\u2026",
"pad.modals.forcereconnect": "Vynutit znovup\u0159ipojen\u00ed",
"pad.modals.userdup": "Otev\u0159eno v jin\u00e9m okn\u011b",
"pad.modals.userdup.explanation": "Zd\u00e1 se, \u017ee tento Pad je na tomto po\u010d\u00edta\u010di otev\u0159en ve v\u00edce ne\u017e jednom okn\u011b.",
"pad.modals.userdup.advice": "Pro pou\u017eit\u00ed tohoto okna se mus\u00ed\u0161 znovu p\u0159ipojit.",
"pad.modals.unauth": "Nem\u00e1te autorizaci",
@ -76,10 +80,12 @@
"pad.share.emebdcode": "Vlo\u017eit URL",
"pad.chat": "Chat",
"pad.chat.title": "Otev\u0159\u00edt chat tohoto Padu.",
"pad.chat.loadmessages": "Na\u010d\u00edst v\u00edce zpr\u00e1v",
"timeslider.pageTitle": "Osa \u010dasu {{appTitle}}",
"timeslider.toolbar.returnbutton": "N\u00e1vrat do Padu",
"timeslider.toolbar.authors": "Auto\u0159i:",
"timeslider.toolbar.authorsList": "Bez autor\u016f",
"timeslider.toolbar.exportlink.title": "Exportovat",
"timeslider.exportCurrent": "Exportovat nyn\u011bj\u0161\u00ed verzi jako:",
"timeslider.version": "Verze {{version}}",
"timeslider.saved": "Ulo\u017eeno {{day}} {{month}} {{year}}",
@ -95,5 +101,22 @@
"timeslider.month.september": "z\u00e1\u0159\u00ed",
"timeslider.month.october": "\u0159\u00edjen",
"timeslider.month.november": "listopad",
"timeslider.month.december": "prosinec"
"timeslider.month.december": "prosinec",
"timeslider.unnamedauthor": "{{num}} nejmenovan\u00fd autor",
"timeslider.unnamedauthors": "{{num}} nejmenovan\u00fdch autor\u016f",
"pad.savedrevs.marked": "Tato revize je nyn\u00ed ozna\u010dena jako ulo\u017een\u00e1",
"pad.userlist.entername": "Zadejte sv\u00e9 jm\u00e9no",
"pad.userlist.unnamed": "nejmenovan\u00fd",
"pad.userlist.guest": "Host",
"pad.userlist.deny": "Zak\u00e1zat",
"pad.userlist.approve": "Povolit",
"pad.editbar.clearcolors": "Odstranit autorsk\u00e9 barvy z cel\u00e9ho dokumentu?",
"pad.impexp.importbutton": "Importovat",
"pad.impexp.importing": "Importov\u00e1n\u00ed\u2026",
"pad.impexp.confirmimport": "Import souboru p\u0159ep\u00ed\u0161e aktu\u00e1ln\u00ed text v padu. Opravdu chcete tuto akci prov\u00e9st?",
"pad.impexp.convertFailed": "Tento soubor nelze importovat. Pou\u017eijte pros\u00edm jin\u00fd form\u00e1t dokumentu nebo nakop\u00edrujte text ru\u010dn\u011b",
"pad.impexp.uploadFailed": "Nahr\u00e1v\u00e1n\u00ed selhalo, zkuste to znovu",
"pad.impexp.importfailed": "Import selhal",
"pad.impexp.copypaste": "Vlo\u017ete pros\u00edm kopii",
"pad.impexp.exportdisabled": "Export do form\u00e1tu {{type}} je zak\u00e1z\u00e1n. Kontaktujte sv\u00e9ho administr\u00e1tora pro zji\u0161t\u011bn\u00ed detail\u016f."
}

View file

@ -24,7 +24,7 @@
"pad.toolbar.timeslider.title": "Pad-Versionsgeschichte anzeigen",
"pad.toolbar.savedRevision.title": "Version speichern",
"pad.toolbar.settings.title": "Einstellungen",
"pad.toolbar.embed.title": "Dieses Pad teilen oder einbetten",
"pad.toolbar.embed.title": "Dieses Pad teilen und einbetten",
"pad.toolbar.showusers.title": "Aktuell verbundene Benutzer anzeigen",
"pad.colorpicker.save": "Speichern",
"pad.colorpicker.cancel": "Abbrechen",

View file

@ -24,7 +24,7 @@
"pad.toolbar.timeslider.title": "\u03a7\u03c1\u03bf\u03bd\u03bf\u03b4\u03b9\u03ac\u03b3\u03c1\u03b1\u03bc\u03bc\u03b1",
"pad.toolbar.savedRevision.title": "\u0391\u03c0\u03bf\u03b8\u03ae\u03ba\u03b5\u03c5\u03c3\u03b7 \u0391\u03bd\u03b1\u03b8\u03b5\u03ce\u03c1\u03b7\u03c3\u03b7\u03c2",
"pad.toolbar.settings.title": "\u03a1\u03c5\u03b8\u03bc\u03af\u03c3\u03b5\u03b9\u03c2",
"pad.toolbar.embed.title": "\u0395\u03bd\u03c3\u03c9\u03bc\u03ac\u03c4\u03c9\u03c3\u03b7 \u03c4\u03bf\u03c5 pad",
"pad.toolbar.embed.title": "\u0394\u03b9\u03b1\u03bc\u03bf\u03af\u03c1\u03b1\u03c3\u03b7 \u03ba\u03b1\u03b9 \u0395\u03bd\u03c3\u03c9\u03bc\u03ac\u03c4\u03c9\u03c3\u03b7 \u03b1\u03c5\u03c4\u03bf\u03cd \u03c4\u03bf\u03c5 pad",
"pad.toolbar.showusers.title": "\u0395\u03bc\u03c6\u03ac\u03bd\u03b9\u03c3\u03b7 \u03c4\u03c9\u03bd \u03c7\u03c1\u03b7\u03c3\u03c4\u03ce\u03bd \u03b1\u03c5\u03c4\u03bf\u03cd \u03c4\u03bf\u03c5 pad",
"pad.colorpicker.save": "\u0391\u03c0\u03bf\u03b8\u03ae\u03ba\u03b5\u03c5\u03c3\u03b7",
"pad.colorpicker.cancel": "\u0386\u03ba\u03c5\u03c1\u03bf",

121
src/locales/eu.json Normal file
View file

@ -0,0 +1,121 @@
{
"@metadata": {
"authors": [
"Theklan"
]
},
"index.newPad": "Pad berria",
"index.createOpenPad": "edo sortu/ireki Pad bat honako izenarekin:",
"pad.toolbar.bold.title": "Lodia (Ctrl-B)",
"pad.toolbar.italic.title": "Etzana (Ctrl-I)",
"pad.toolbar.underline.title": "Azpimarratua (Ctrl-U)",
"pad.toolbar.strikethrough.title": "Ezabatua",
"pad.toolbar.ol.title": "Zerrenda ordenatua",
"pad.toolbar.ul.title": "Zerrenda ez-ordenatua",
"pad.toolbar.indent.title": "Koska",
"pad.toolbar.unindent.title": "Koska kendu",
"pad.toolbar.undo.title": "Desegin (Ctrl-Z)",
"pad.toolbar.redo.title": "Berregin (Ctrl-Y)",
"pad.toolbar.clearAuthorship.title": "Ezabatu Egiletza Koloreak",
"pad.toolbar.import_export.title": "Inportatu/Esportatu fitxategi formatu ezberdinetara/ezberdinetatik",
"pad.toolbar.timeslider.title": "Denbora lerroa",
"pad.toolbar.savedRevision.title": "Gorde berrikuspena",
"pad.toolbar.settings.title": "Hobespenak",
"pad.toolbar.embed.title": "Partekatu eta Txertatu pad hau",
"pad.toolbar.showusers.title": "Erakutsi pad honetako erabiltzaileak",
"pad.colorpicker.save": "Gorde",
"pad.colorpicker.cancel": "Utzi",
"pad.loading": "Kargatzen...",
"pad.passwordRequired": "Pasahitza behar duzu pad honetara sartzeko",
"pad.permissionDenied": "Ez duzu bamienik pad honetara sartzeko",
"pad.wrongPassword": "Zure pasahitza oker zegoen",
"pad.settings.padSettings": "Pad hobespenak",
"pad.settings.myView": "Nire ikusmoldea",
"pad.settings.stickychat": "Txata beti pantailan",
"pad.settings.colorcheck": "Egiletzaren koloreak",
"pad.settings.linenocheck": "Lerro zenbakiak",
"pad.settings.rtlcheck": "Edukia eskubitik ezkerrera irakurri?",
"pad.settings.fontType": "Tipografia:",
"pad.settings.fontType.normal": "Arrunta",
"pad.settings.fontType.monospaced": "Monospace",
"pad.settings.globalView": "Ikuspegi Globala",
"pad.settings.language": "Hizkuntza:",
"pad.importExport.import_export": "Inportatu/Esportatu",
"pad.importExport.import": "Igo edozein testu fitxategi edo dokumentu",
"pad.importExport.importSuccessful": "Arrakastatsua!",
"pad.importExport.export": "Oraingo pad hau honela esportatu:",
"pad.importExport.exporthtml": "HTML",
"pad.importExport.exportplain": "Testu laua",
"pad.importExport.exportword": "Microsoft Word",
"pad.importExport.exportpdf": "PDF",
"pad.importExport.exportopen": "ODF (Open Document Format)",
"pad.importExport.exportdokuwiki": "DocuWiki",
"pad.importExport.abiword.innerHTML": "Testu laua edo html formatudun testuak bakarrik inporta ditzakezu. Aurreratuagoak diren inportazio aukerak izateko \u003Ca href=\"https://github.com/ether/etherpad-lite/wiki/How-to-enable-importing-and-exporting-different-file-formats-in-Ubuntu-or-OpenSuse-or-SLES-with-AbiWord\"\u003Eabiword instala ezazu\u003C/a\u003E.",
"pad.modals.connected": "Konektatuta.",
"pad.modals.reconnecting": "Zure pad-era birkonektatu...",
"pad.modals.forcereconnect": "Berkonexioa fortzatu",
"pad.modals.userdup": "Beste leiho batean ireki da",
"pad.modals.userdup.explanation": "Pad hau zure nabigatzailearen beste leiho batean irekita dagoela ematen du.",
"pad.modals.userdup.advice": "Berriro konektatu beste leiho hau erabiltzeko.",
"pad.modals.unauth": "Baimenik gabe",
"pad.modals.unauth.explanation": "Orrialdea ikusten ari zinela zure baimenak aldatu dira. Saia zaitez berriro konektatzen.",
"pad.modals.looping": "Deskonektatua.",
"pad.modals.looping.explanation": "Sinkronizazio zerbitzariarekin komunikazioa arazoak daude.",
"pad.modals.looping.cause": "Agian firewall edo proxy ez-bateragarri baten bidez konektatu zara.",
"pad.modals.initsocketfail": "Zerbitzarira ezin da iritsi.",
"pad.modals.initsocketfail.explanation": "Ezin izan da konektatu sinkronizazio zerbitzarira.",
"pad.modals.initsocketfail.cause": "Ziurrenik hau zure nabigatzailea edo internet konexioaren arazo bat dela eta izango da.",
"pad.modals.slowcommit": "Deskonektatu.",
"pad.modals.slowcommit.explanation": "Zerbitzariak ez du erantzuten.",
"pad.modals.slowcommit.cause": "Baliteke hau sarearen konexio arazoak direla eta izatea.",
"pad.modals.deleted": "Ezabatua.",
"pad.modals.deleted.explanation": "Pad hau ezabatua izan da.",
"pad.modals.disconnected": "Deskonektatua izan zara.",
"pad.modals.disconnected.explanation": "Zerbitzariaren konexioa galdu da",
"pad.modals.disconnected.cause": "Baliteke zerbitzaria irisgarria ez izatea. Mesedez, esaiguzu hau gertatzen jarraitzen badu.",
"pad.share": "Pad hau partekatu",
"pad.share.readonly": "Irakurtzeko bakarrik",
"pad.share.link": "Lotura",
"pad.share.emebdcode": "URLa txertatu",
"pad.chat": "Txata",
"pad.chat.title": "Pad honetarako txata ireki.",
"pad.chat.loadmessages": "Mezu gehiago kargatu",
"timeslider.pageTitle": "{{appTitle}} denbora lerroa",
"timeslider.toolbar.returnbutton": "Padera itzuli",
"timeslider.toolbar.authors": "Egileak:",
"timeslider.toolbar.authorsList": "Egilerik gabe",
"timeslider.toolbar.exportlink.title": "Esportatu",
"timeslider.exportCurrent": "Gorde bertsio hau honela:",
"timeslider.version": "Bertsioa {{version}}",
"timeslider.saved": "{{year}}ko {{month}}ren {{day}}an gordeta",
"timeslider.dateformat": "{{year}}/{{month}}/{{day}} {{hours}}:{{minutes}}:{{seconds}}",
"timeslider.month.january": "Urtarrila",
"timeslider.month.february": "Otsaila",
"timeslider.month.march": "Martxoa",
"timeslider.month.april": "Apirila",
"timeslider.month.may": "Maiatza",
"timeslider.month.june": "Ekaina",
"timeslider.month.july": "Uztaila",
"timeslider.month.august": "Abuztua",
"timeslider.month.september": "Iraila",
"timeslider.month.october": "Urria",
"timeslider.month.november": "Azaroa",
"timeslider.month.december": "Abendua",
"timeslider.unnamedauthor": "{{num}} izenik gabeko egilea",
"timeslider.unnamedauthors": "{{num}} izenik gabeko egileak",
"pad.savedrevs.marked": "Berrikuspen hau markatua dago gordetako berrikuspen gisa",
"pad.userlist.entername": "Sartu zure erabiltzaile izena",
"pad.userlist.unnamed": "izenik gabe",
"pad.userlist.guest": "Gonbidatua",
"pad.userlist.deny": "Ukatu",
"pad.userlist.approve": "Onartu",
"pad.editbar.clearcolors": "Ezabatu egile koloreak dokumentu osoan?",
"pad.impexp.importbutton": "Inportatu orain",
"pad.impexp.importing": "Inportatzen...",
"pad.impexp.confirmimport": "Fitxategi bat inportatzen baduzu oraingo pad honen testua ezabatuko da. Ziur zaude jarraitu nahi duzula?",
"pad.impexp.convertFailed": "Ez gara gai fitxategi hau inportatzeko. Erabil ezazu, mesedez, beste dokumentu formatu bat edo kopiatu eta itsasi eskuz.",
"pad.impexp.uploadFailed": "Igotzean akatsa egon da, saia zaitez berriro",
"pad.impexp.importfailed": "Inportazioak akatsa egin du",
"pad.impexp.copypaste": "Mesedez kopiatu eta pegatu",
"pad.impexp.exportdisabled": "{{type}} formatuarekin esportatzea desgaituta dago. Kontakta ezazu administratzailea detaile gehiagorako."
}

View file

@ -3,8 +3,9 @@
"authors": {
"0": "BMRG14",
"1": "Dalba",
"3": "ZxxZxxZ",
"4": "\u0627\u0644\u0646\u0627\u0632"
"2": "Ebraminio",
"4": "ZxxZxxZ",
"5": "\u0627\u0644\u0646\u0627\u0632"
}
},
"index.newPad": "\u062f\u0641\u062a\u0631\u0686\u0647 \u06cc\u0627\u062f\u062f\u0627\u0634\u062a \u062a\u0627\u0632\u0647",
@ -22,7 +23,7 @@
"pad.toolbar.clearAuthorship.title": "\u067e\u0627\u06a9 \u06a9\u0631\u062f\u0646 \u0631\u0646\u06af\u200c\u0647\u0627\u06cc \u0646\u0648\u06cc\u0633\u0646\u062f\u06af\u06cc",
"pad.toolbar.import_export.title": "\u062f\u0631\u0648\u0646\u200c\u0631\u06cc\u0632\u06cc/\u0628\u0631\u0648\u0646\u200c\u0631\u06cc\u0632\u06cc \u0627\u0632/\u0628\u0647 \u0642\u0627\u0644\u0628\u200c\u0647\u0627\u06cc \u0645\u062e\u062a\u0644\u0641",
"pad.toolbar.timeslider.title": "\u0627\u0633\u0644\u0627\u06cc\u062f\u0631 \u0632\u0645\u0627\u0646",
"pad.toolbar.savedRevision.title": "\u0630\u062e\u06cc\u0631\u0647\u200c\u06cc \u0628\u0627\u0632\u0646\u0648\u06cc\u0633\u06cc",
"pad.toolbar.savedRevision.title": "\u0630\u062e\u06cc\u0631\u0647\u200c\u0633\u0627\u0632\u06cc \u0646\u0633\u062e\u0647",
"pad.toolbar.settings.title": "\u062a\u0646\u0638\u06cc\u0645\u0627\u062a",
"pad.toolbar.embed.title": "\u062c\u0627\u0633\u0627\u0632\u06cc \u0627\u06cc\u0646 \u062f\u0641\u062a\u0631\u0686\u0647 \u06cc\u0627\u062f\u062f\u0627\u0634\u062a",
"pad.toolbar.showusers.title": "\u0646\u0645\u0627\u06cc\u0634 \u06a9\u0627\u0631\u0628\u0631\u0627\u0646 \u062f\u0631 \u0627\u06cc\u0646 \u062f\u0641\u062a\u0631\u0686\u0647 \u06cc\u0627\u062f\u062f\u0627\u0634\u062a",

97
src/locales/fo.json Normal file
View file

@ -0,0 +1,97 @@
{
"@metadata": {
"authors": [
"EileenSanda"
]
},
"index.newPad": "N\u00fdggjur teldil",
"pad.toolbar.bold.title": "Vi\u00f0 feitum (Ctrl-B)",
"pad.toolbar.italic.title": "Skr\u00e1skrift (Ctrl-I)",
"pad.toolbar.underline.title": "Undirstrika\u00f0 (Ctrl-U)",
"pad.toolbar.strikethrough.title": "Gj\u00f8gnumstrika\u00f0",
"pad.toolbar.ol.title": "B\u00edleggingarlisti",
"pad.toolbar.undo.title": "Angra (Ctrl-Z)",
"pad.toolbar.redo.title": "Ger umaftur (Ctrl-Y)",
"pad.toolbar.import_export.title": "Innflyt/\u00datflyt fr\u00e1/til ymiskar f\u00edlust\u00f8ddir",
"pad.toolbar.savedRevision.title": "Goym Endursko\u00f0an",
"pad.toolbar.settings.title": "Innstillingar",
"pad.toolbar.embed.title": "Deil og Innset henda pad'in",
"pad.toolbar.showusers.title": "V\u00eds br\u00fakarar \u00e1 hesum paddi",
"pad.colorpicker.save": "Goym",
"pad.colorpicker.cancel": "\u00d3gilda",
"pad.loading": "L\u00f8\u00f0ir...",
"pad.passwordRequired": "T\u00fa hevur br\u00fak fyri einum loynior\u00f0i fyri at f\u00e1a atgongd til henda paddin",
"pad.permissionDenied": "T\u00fa hevur ikki loyvi til at f\u00e1a atgongd til henda paddin",
"pad.wrongPassword": "T\u00edtt loynior\u00f0 var skeivt",
"pad.settings.padSettings": "Pad innstillingar",
"pad.settings.myView": "M\u00edn s\u00fdning",
"pad.settings.stickychat": "Kjatta alt\u00ed\u00f0 \u00e1 skerminum",
"pad.settings.colorcheck": "Litir hj\u00e1 rith\u00f8vundaskapinum",
"pad.settings.linenocheck": "Linjunummur",
"pad.settings.rtlcheck": "Vil t\u00fa lesa innihaldi\u00f0 fr\u00e1 h\u00f8gru til vinstu?",
"pad.settings.fontType": "Skriftslag:",
"pad.settings.fontType.normal": "Vanligt",
"pad.settings.fontType.monospaced": "F\u00f8st breidd",
"pad.settings.globalView": "Global s\u00fdning",
"pad.settings.language": "M\u00e1l:",
"pad.importExport.import_export": "Innflyt/\u00datflyt",
"pad.importExport.import": "Legg \u00fat onkra tekstf\u00edlu ella dokument",
"pad.importExport.importSuccessful": "Ta\u00f0 eydna\u00f0ist!",
"pad.importExport.export": "\u00datflyt verandi pad sum:",
"pad.importExport.exporthtml": "HTML",
"pad.importExport.exportplain": "Einfaldur tekstur",
"pad.importExport.exportword": "Microsoft Word",
"pad.importExport.exportpdf": "PDF",
"pad.importExport.exportopen": "ODF (Opi\u00f0 Dokument Format)",
"pad.importExport.exportdokuwiki": "DokuWiki",
"pad.importExport.abiword.innerHTML": "T\u00fa kanst bert innflyta fr\u00e1 einf\u00f8ldum teksti ella html formatum. Fyri funksj\u00f3nir til innflytan fyri v\u00ed\u00f0arikomin vinarliga \u003Ca href=\"https://github.com/ether/etherpad-lite/wiki/How-to-enable-importing-and-exporting-different-file-formats-in-Ubuntu-or-OpenSuse-or-SLES-with-AbiWord\"\u003Einstallera abiword\u003C/a\u003E.",
"pad.modals.connected": "T\u00fa hevur samband.",
"pad.modals.reconnecting": "Roynir aftur at f\u00e1a samband vi\u00f0 t\u00edn pad..",
"pad.modals.forcereconnect": "Tvinga endurstovnan av sambandi.",
"pad.modals.userdup": "Er lati\u00f0 upp \u00ed \u00f8\u00f0rum vindeyga",
"pad.modals.userdup.explanation": "Ta\u00f0 s\u00e6r \u00fat til at hesin paddurin er latin upp \u00ed meira enn einum brovsara vindeyga \u00e1 hesari telduni.",
"pad.modals.userdup.advice": "Endurstovna sambandi fyri at n\u00fdta hetta vindeyga \u00ed sta\u00f0in.",
"pad.modals.unauth": "Er ikki loyvt",
"pad.modals.unauth.explanation": "T\u00edni loyvi eru broytt, me\u00f0an t\u00fa hevur hugt at hesi s\u00ed\u00f0uni. Royn og endurstovna sambandi.",
"pad.modals.looping": "T\u00fa misti sambandi.",
"pad.modals.initsocketfail": "Amb\u00e6tarin er \u00f3atkomuligur.",
"pad.modals.initsocketfail.cause": "Hetta skyldast mest sannl\u00edkt ein trupulleika vi\u00f0 t\u00ednum kaga/brovsara ella vi\u00f0 t\u00ednum internetsambandi.",
"pad.modals.slowcommit": "T\u00fa misti sambandi.",
"pad.modals.slowcommit.explanation": "Amb\u00e6tarin (servarin) svarar ikki.",
"pad.modals.slowcommit.cause": "Hetta kann skyldast trupulleikar vi\u00f0 netverkssambandinum.",
"pad.modals.deleted": "Er strika\u00f0.",
"pad.modals.deleted.explanation": "Hesin paddurin er fluttur.",
"pad.modals.disconnected": "T\u00fa hevur mist sambandi.",
"pad.modals.disconnected.explanation": "Sambandi\u00f0 til amb\u00e6tarin er avbroti\u00f0",
"pad.share": "Deil henda paddin",
"pad.share.readonly": "Vart fyri skriving",
"pad.share.link": "Sl\u00f3\u00f0",
"timeslider.toolbar.returnbutton": "Vend aftur til pad'in",
"timeslider.toolbar.authors": "H\u00f8vundar:",
"timeslider.toolbar.authorsList": "Ongir h\u00f8vundar",
"timeslider.toolbar.exportlink.title": "\u00datflyt",
"timeslider.exportCurrent": "\u00datflyt hesa versj\u00f3na sum:",
"timeslider.version": "Versj\u00f3n {{version}}",
"timeslider.saved": "Goymt {{month}} {{day}}, {{year}}",
"timeslider.dateformat": "{{month}}/{{day}}/{{year}} {{hours}}:{{minutes}}:{{seconds}}",
"timeslider.month.january": "Januar",
"timeslider.month.february": "Februar",
"timeslider.month.march": "Mars",
"timeslider.month.april": "Apr\u00edl",
"timeslider.month.may": "Mai",
"timeslider.month.june": "Juni",
"timeslider.month.july": "Juli",
"timeslider.month.august": "August",
"timeslider.month.september": "September",
"timeslider.month.october": "October",
"timeslider.month.november": "November",
"timeslider.month.december": "Desember",
"timeslider.unnamedauthor": "{{num}} \u00f3nevndur h\u00f8vundur",
"timeslider.unnamedauthors": "{{num}} \u00f3nevndir h\u00f8vundar",
"pad.savedrevs.marked": "Henda endursko\u00f0anin er n\u00fa merkt sum ein goymd endursko\u00f0an",
"pad.userlist.entername": "Skriva t\u00edtt navn",
"pad.userlist.unnamed": "ikki-navngivi\u00f0",
"pad.userlist.guest": "Gestur",
"pad.userlist.deny": "Nokta",
"pad.userlist.approve": "G\u00f3\u00f0kenn"
}

View file

@ -9,9 +9,12 @@
"5": "Jean-Fr\u00e9d\u00e9ric",
"6": "Leviathan",
"7": "McDutchie",
"8": "Od1n",
"9": "Peter17",
"11": "Tux-tn"
"8": "Metroitendo",
"9": "Od1n",
"10": "Peter17",
"11": "Quenenni",
"13": "Stephane Cottin",
"14": "Tux-tn"
}
},
"index.newPad": "Nouveau Pad",
@ -44,8 +47,8 @@
"pad.settings.stickychat": "Toujours afficher le chat",
"pad.settings.colorcheck": "Couleurs d\u2019identification",
"pad.settings.linenocheck": "Num\u00e9ros de lignes",
"pad.settings.rtlcheck": "Lire le contenu de la droite vers la gauche ?",
"pad.settings.fontType": "Type de police :",
"pad.settings.rtlcheck": "Lecture de droite \u00e0 gauche",
"pad.settings.fontType": "Police :",
"pad.settings.fontType.normal": "Normal",
"pad.settings.fontType.monospaced": "Monospace",
"pad.settings.globalView": "Vue d\u2019ensemble",
@ -82,7 +85,7 @@
"pad.modals.deleted.explanation": "Ce Pad a \u00e9t\u00e9 supprim\u00e9.",
"pad.modals.disconnected": "Vous avez \u00e9t\u00e9 d\u00e9connect\u00e9.",
"pad.modals.disconnected.explanation": "La connexion au serveur a \u00e9chou\u00e9.",
"pad.modals.disconnected.cause": "Il se peut que le serveur soit indisponible. Veuillez nous en informer si le probl\u00e8me persiste.",
"pad.modals.disconnected.cause": "Il se peut que le serveur soit indisponible. Si le probl\u00e8me persiste, veuillez nous en informer.",
"pad.share": "Partager ce Pad",
"pad.share.readonly": "Lecture seule",
"pad.share.link": "Lien",
@ -91,14 +94,14 @@
"pad.chat.title": "Ouvrir le chat associ\u00e9 \u00e0 ce pad.",
"pad.chat.loadmessages": "Charger davantage de messages",
"timeslider.pageTitle": "Historique dynamique de {{appTitle}}",
"timeslider.toolbar.returnbutton": "Retour \u00e0 ce Pad.",
"timeslider.toolbar.returnbutton": "Retour au Pad.",
"timeslider.toolbar.authors": "Auteurs :",
"timeslider.toolbar.authorsList": "Aucun auteur",
"timeslider.toolbar.exportlink.title": "Exporter",
"timeslider.exportCurrent": "Exporter la version actuelle en\u00a0:",
"timeslider.version": "Version {{version}}",
"timeslider.saved": "Enregistr\u00e9 le {{day}} {{month}} {{year}}",
"timeslider.dateformat": "{{day}} {{month}} {{year}} {{hours}}:{{minutes}}:{{secondes}}",
"timeslider.dateformat": "{{day}}/{{month}}/{{year}} {{hours}}:{{minutes}}:{{seconds}}",
"timeslider.month.january": "Janvier",
"timeslider.month.february": "F\u00e9vrier",
"timeslider.month.march": "Mars",
@ -115,7 +118,7 @@
"timeslider.unnamedauthors": "{{num}} auteurs anonymes",
"pad.savedrevs.marked": "Cette r\u00e9vision est maintenant marqu\u00e9e comme r\u00e9vision enregistr\u00e9e",
"pad.userlist.entername": "Entrez votre nom",
"pad.userlist.unnamed": "sans nom",
"pad.userlist.unnamed": "anonyme",
"pad.userlist.guest": "Invit\u00e9",
"pad.userlist.deny": "Refuser",
"pad.userlist.approve": "Approuver",

52
src/locales/km.json Normal file
View file

@ -0,0 +1,52 @@
{
"@metadata": {
"authors": [
"\u179c\u17d0\u178e\u1790\u17b6\u179a\u17b7\u1791\u17d2\u1792"
]
},
"index.newPad": "\u1795\u17c1\u178f\u1790\u17d2\u1798\u17b8",
"index.createOpenPad": "\u17ac\u1794\u1784\u17d2\u1780\u17be\u178f/\u1794\u17be\u1780\u1795\u17c1\u178f\u178a\u17c2\u179b\u1798\u17b6\u1793\u1788\u17d2\u1798\u17c4\u17c7\u17d6",
"pad.toolbar.bold.title": "\u178a\u17b7\u178f (Ctrl-B)",
"pad.toolbar.italic.title": "\u1791\u17d2\u179a\u17c1\u178f (Ctrl-I)",
"pad.toolbar.underline.title": "\u1782\u17bc\u179f\u1794\u1793\u17d2\u1791\u17b6\u178f\u17cb (Ctrl-U)",
"pad.toolbar.strikethrough.title": "\u1786\u17bc\u178f\u1785\u17c4\u179b",
"pad.toolbar.ol.title": "\u1794\u1789\u17d2\u1787\u17b8\u178f\u17b6\u1798\u178f\u1798\u17d2\u179a\u17c0\u1794",
"pad.toolbar.ul.title": "\u1794\u1789\u17d2\u1787\u17b8\u1798\u17b7\u1793\u178f\u17b6\u1798\u178f\u1798\u17d2\u179a\u17c0\u1794",
"pad.toolbar.indent.title": "\u1781\u17b7\u178f\u1785\u17bc\u179b\u1780\u17d2\u1793\u17bb\u1784",
"pad.toolbar.unindent.title": "\u1781\u17b7\u178f\u1785\u17c1\u1789\u1780\u17d2\u179a\u17c5",
"pad.toolbar.undo.title": "\u17a2\u17b6\u1793\u17cb\u178c\u17bc (Ctrl-Z)",
"pad.toolbar.redo.title": "\u179a\u17b8\u178c\u17bc (Ctrl-Y)",
"pad.toolbar.import_export.title": "\u1793\u17b6\u17c6\u1785\u17bc\u179b/\u1793\u17b6\u17c6\u1785\u17c1\u1789 \u1796\u17b8/\u1791\u17c5\u1794\u17d2\u179a\u1797\u17c1\u1791\u17af\u1780\u179f\u17b6\u179a\u1795\u17d2\u179f\u17c1\u1784\u1791\u17c0\u178f",
"pad.toolbar.settings.title": "\u1780\u17b6\u179a\u1780\u17c6\u178e\u178f\u17cb\u200b",
"pad.colorpicker.save": "\u179a\u1780\u17d2\u179f\u17b6\u1791\u17bb\u1780",
"pad.colorpicker.cancel": "\u1794\u17c4\u17c7\u1794\u1784\u17cb",
"pad.loading": "\u1780\u17c6\u1796\u17bb\u1784\u1795\u17d2\u1791\u17bb\u1780\u2026",
"pad.settings.fontType": "\u1794\u17d2\u179a\u1797\u17c1\u1791\u1796\u17bb\u1798\u17d2\u1796\u17a2\u1780\u17d2\u179f\u179a\u17d6",
"pad.settings.fontType.normal": "\u1792\u1798\u17d2\u1798\u178f\u17b6",
"pad.settings.language": "\u1797\u17b6\u179f\u17b6\u17d6",
"pad.importExport.import_export": "\u1793\u17b6\u17c6\u1785\u17bc\u179b/\u1793\u17b6\u17c6\u1785\u17c1\u1789",
"pad.importExport.importSuccessful": "\u178a\u17c4\u1799\u1787\u17c4\u1782\u1787\u17d0\u1799!",
"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": "\u1794\u17b6\u1793\u200b\u178f\u1797\u17d2\u1787\u17b6\u1794\u17cb\u200b\u17d4",
"pad.share.link": "\u178f\u17c6\u178e\u200b\u1797\u17d2\u1787\u17b6\u1794\u17cb",
"timeslider.month.january": "\u1798\u1780\u179a\u17b6",
"timeslider.month.february": "\u1780\u17bb\u1798\u17d2\u1797\u17c8",
"timeslider.month.march": "\u1798\u17b7\u1793\u17b6",
"timeslider.month.april": "\u1798\u17c1\u179f\u17b6",
"timeslider.month.may": "\u17a7\u179f\u1797\u17b6",
"timeslider.month.june": "\u1798\u17b7\u1790\u17bb\u1793\u17b6\u200b",
"timeslider.month.july": "\u1780\u1780\u17d2\u178a\u178a\u17b6\u200b",
"timeslider.month.august": "\u179f\u17b8\u17a0\u17b6",
"timeslider.month.september": "\u1780\u1789\u17d2\u1789\u17b6",
"timeslider.month.october": "\u178f\u17bb\u179b\u17b6",
"timeslider.month.november": "\u179c\u17b7\u1785\u17d2\u1786\u17b7\u1780\u17b6",
"timeslider.month.december": "\u1792\u17d2\u1793\u17bc",
"pad.userlist.guest": "\u1797\u17d2\u1789\u17c0\u179c",
"pad.impexp.importbutton": "\u1793\u17b6\u17c6\u1785\u17bc\u179b\u17a5\u17a1\u17bc\u179c\u1793\u17c1\u17c7",
"pad.impexp.importing": "\u1780\u17c6\u1796\u17bb\u1784\u1793\u17b6\u17c6\u1785\u17bc\u179b\u200b..."
}

View file

@ -1,4 +1,9 @@
{
"@metadata": {
"authors": [
"Robby"
]
},
"index.newPad": "Neie Pad",
"pad.toolbar.ol.title": "Numer\u00e9iert L\u00ebscht",
"pad.toolbar.ul.title": "Net-numer\u00e9iert L\u00ebscht",
@ -44,10 +49,5 @@
"pad.userlist.entername": "Gitt \u00c4ren Numm an",
"pad.userlist.guest": "Gaascht",
"pad.impexp.importbutton": "Elo import\u00e9ieren",
"pad.impexp.importing": "Import\u00e9ieren...",
"@metadata": {
"authors": [
"Robby"
]
}
"pad.impexp.importing": "Import\u00e9ieren..."
}

72
src/locales/lt.json Normal file
View file

@ -0,0 +1,72 @@
{
"@metadata": {
"authors": [
"Mantak111"
]
},
"pad.toolbar.bold.title": "Pary\u0161kintasis (Ctrl-B)",
"pad.toolbar.italic.title": "Pasvirasis (Ctrl-I)",
"pad.toolbar.underline.title": "Pabraukimas (Ctrl-U)",
"pad.toolbar.undo.title": "Anuliuoti (Ctrl-Z)",
"pad.toolbar.redo.title": "Perdaryti (Ctrl-Y)",
"pad.toolbar.clearAuthorship.title": "Tvarkyti autoryst\u0117s spalvas",
"pad.toolbar.settings.title": "Nustatymai",
"pad.colorpicker.save": "I\u0161saugoti",
"pad.colorpicker.cancel": "At\u0161aukti",
"pad.loading": "\u012ekraunama...",
"pad.settings.fontType.normal": "Normalus",
"pad.settings.language": "Kalba:",
"pad.importExport.import_export": "Importuoti/Eksportuoti",
"pad.importExport.import": "\u012ekelkite bet kok\u012f tekstin\u012f fail\u0105 arba dokument\u0105",
"pad.importExport.importSuccessful": "Pavyko!",
"pad.importExport.exporthtml": "HTML",
"pad.importExport.exportplain": "Paprastasis tekstas",
"pad.importExport.exportword": "Microsoft Word",
"pad.importExport.exportpdf": "PDF",
"pad.importExport.exportopen": "ODF (Atvirasis dokumento formatas)",
"pad.importExport.exportdokuwiki": "DokuWiki",
"pad.modals.connected": "Prisijungta.",
"pad.modals.unauth": "Neleid\u017eiama",
"pad.modals.looping": "Atjungtas.",
"pad.modals.initsocketfail": "Serveris yra nepasiekiamas.",
"pad.modals.slowcommit": "Atjungtas.",
"pad.modals.slowcommit.explanation": "Serveris neatsako.",
"pad.modals.deleted": "I\u0161trintas.",
"pad.modals.disconnected": "J\u016bs atsijung\u0117te.",
"pad.share.readonly": "Tik skaityti",
"pad.share.link": "Nuoroda",
"pad.share.emebdcode": "\u012eterptasis URL",
"pad.chat": "Pokalbiai",
"pad.chat.loadmessages": "\u012ekrauti daugiau prane\u0161im\u0173",
"timeslider.toolbar.authors": "Autoriai:",
"timeslider.toolbar.authorsList": "N\u0117ra autori\u0173",
"timeslider.toolbar.exportlink.title": "Eksportuoti",
"timeslider.exportCurrent": "Eksportuoti dabartin\u0119 versij\u0105 kaip:",
"timeslider.version": "Versija {{version}}",
"timeslider.saved": "I\u0161saugota {{year}},{{month}} {{day}}",
"timeslider.dateformat": "{{year}}-{{month}}-{{day}} {{hours}}:{{minutes}}:{{seconds}}",
"timeslider.month.january": "Sausis",
"timeslider.month.february": "Vasaris",
"timeslider.month.march": "Kovas",
"timeslider.month.april": "Balandis",
"timeslider.month.may": "Gegu\u017e\u0117",
"timeslider.month.june": "Bir\u017eelis",
"timeslider.month.july": "Liepa",
"timeslider.month.august": "Rugpj\u016btis",
"timeslider.month.september": "Rugs\u0117jis",
"timeslider.month.october": "Spalis",
"timeslider.month.november": "Lapkritis",
"timeslider.month.december": "Gruodis",
"timeslider.unnamedauthor": "{{num}} bevardis autorius",
"timeslider.unnamedauthors": "{{num}} bevard\u017eiai(-i\u0173) autoriai(-i\u0173)",
"pad.userlist.entername": "\u012eveskite savo vard\u0105",
"pad.userlist.unnamed": "bevardis",
"pad.userlist.guest": "Sve\u010dias",
"pad.userlist.deny": "Neigti",
"pad.userlist.approve": "Patvirtinti",
"pad.impexp.importbutton": "Importuoti dabar",
"pad.impexp.importing": "Importuojama...",
"pad.impexp.uploadFailed": "\u012ek\u0117limas nepavyko, bandykite dar kart\u0105",
"pad.impexp.importfailed": "Importuoti nepavyko",
"pad.impexp.copypaste": "Pra\u0161ome nukopijuoti ir \u012fklijuoti"
}

54
src/locales/lv.json Normal file
View file

@ -0,0 +1,54 @@
{
"@metadata": {
"authors": [
"Admresdeserv."
]
},
"pad.toolbar.bold.title": "Treknrakst\u0101 (CTRL + B)",
"pad.toolbar.italic.title": "Sl\u012bpraksta (Ctrl-es)",
"pad.toolbar.underline.title": "Pasv\u012btrojuma (CTRL + U)",
"pad.toolbar.strikethrough.title": "P\u0101rsv\u012btrojums",
"pad.toolbar.ol.title": "Sak\u0101rtots saraksts",
"pad.toolbar.ul.title": "Nesak\u0101rtots saraksts",
"pad.toolbar.indent.title": "Atk\u0101pe",
"pad.toolbar.unindent.title": "Izk\u0101pe",
"pad.toolbar.undo.title": "Atsaukt (CTRL + Z)",
"pad.toolbar.redo.title": "Atcelt atsauk\u0161anu (CTRL + Y)",
"pad.toolbar.clearAuthorship.title": "Not\u012brit autoru kr\u0101sas",
"pad.toolbar.import_export.title": "Import\u0113\u0161anas/eksport\u0113\u0161anas no un uz citu failu form\u0101tiem",
"pad.toolbar.settings.title": "Iestat\u012bjumi",
"pad.colorpicker.save": "Saglab\u0101t",
"pad.colorpicker.cancel": "Atcelt",
"pad.loading": "Iel\u0101d\u0113\u2026",
"pad.passwordRequired": "Ir nepiecie\u0161ama parole, lai piek\u013c\u016btu \u0161im pad",
"pad.permissionDenied": "Atvaino, bet tev nav pieejas \u0161im pad.",
"pad.wrongPassword": "J\u016bsu parole bija nepareiza",
"pad.settings.linenocheck": "Rindi\u0146u numurus",
"pad.settings.rtlcheck": "Las\u012bt saturu no lab\u0101s puses uz kreiso?",
"pad.settings.fontType": "Fonta tips:",
"pad.settings.fontType.normal": "Norm\u0101ls",
"pad.settings.globalView": "Glob\u0101lu skat\u012bjumu",
"pad.settings.language": "Valoda:",
"pad.importExport.importSuccessful": "Veiksm\u012bgi!",
"pad.importExport.exporthtml": "HTML",
"pad.importExport.exportplain": "Vienk\u0101r\u0161a teksta",
"pad.importExport.exportword": "Programma Microsoft Word",
"pad.importExport.exportpdf": "PDF",
"pad.importExport.exportopen": "ODF (Open dokumenta form\u0101ts)",
"pad.importExport.exportdokuwiki": "DokuWiki",
"pad.modals.userdup": "Atv\u0113rts cit\u0101 log\u0101",
"pad.modals.unauth": "Nav at\u013cauts",
"pad.modals.looping": "Atvienots.",
"pad.modals.looping.explanation": "Past\u0101v sakaru probl\u0113mas ar sinhroniz\u0101cijas servera.",
"pad.modals.initsocketfail": "Serveris nav sasniedzams.",
"pad.modals.initsocketfail.explanation": "Nevar\u0113ja izveidot savienojumu ar sinhroniz\u0101cijas serveri.",
"pad.modals.slowcommit": "Atvienots.",
"pad.modals.slowcommit.explanation": "Serveris nerea\u0123\u0113.",
"pad.modals.deleted": "Dz\u0113sts",
"pad.modals.disconnected": "J\u016bs esat atvienots.",
"pad.modals.disconnected.explanation": "Tika zaud\u0113ts savienojums ar serveri",
"pad.modals.disconnected.cause": "Iesp\u0113jams, ka serveris nav pieejams. L\u016bgums pazi\u0146ot mums, ja tas turpina notikt.",
"pad.share": "Koplietot \u0161o pad",
"pad.share.readonly": "Tikai las\u0101ms",
"pad.share.link": "Saite"
}

View file

@ -22,7 +22,7 @@
"pad.toolbar.timeslider.title": "\u0418\u0441\u0442\u043e\u0440\u0438\u0441\u043a\u0438 \u043f\u0440\u0435\u0433\u043b\u0435\u0434",
"pad.toolbar.savedRevision.title": "\u0417\u0430\u0447\u0443\u0432\u0430\u0458 \u0440\u0435\u0432\u0438\u0437\u0438\u0458\u0430",
"pad.toolbar.settings.title": "\u041f\u043e\u0441\u0442\u0430\u0432\u043a\u0438",
"pad.toolbar.embed.title": "\u0412\u043c\u0435\u0442\u043d\u0438 \u0458\u0430 \u0442\u0435\u0442\u0440\u0430\u0442\u043a\u0430\u0432\u0430",
"pad.toolbar.embed.title": "\u0421\u043f\u043e\u0434\u0435\u043b\u0435\u0442\u0435 \u0438 \u0432\u043c\u0435\u0442\u043d\u0435\u0442\u0435 \u0458\u0430 \u0442\u0435\u0442\u0440\u0430\u0442\u043a\u0430\u0432\u0430",
"pad.toolbar.showusers.title": "\u041f\u0440\u0438\u043a\u0430\u0436. \u043a\u043e\u0440\u0438\u0441\u043d\u0438\u0446\u0438\u0442\u0435 \u043d\u0430 \u0442\u0435\u0442\u0440\u0430\u0442\u043a\u0430\u0432\u0430",
"pad.colorpicker.save": "\u0417\u0430\u0447\u0443\u0432\u0430\u0458",
"pad.colorpicker.cancel": "\u041e\u0442\u043a\u0430\u0436\u0438",

View file

@ -23,7 +23,7 @@
"pad.toolbar.timeslider.title": "\u0d38\u0d2e\u0d2f\u0d30\u0d47\u0d16",
"pad.toolbar.savedRevision.title": "\u0d28\u0d3e\u0d7e\u0d2a\u0d4d\u0d2a\u0d24\u0d3f\u0d2a\u0d4d\u0d2a\u0d4d \u0d38\u0d47\u0d35\u0d4d \u0d1a\u0d46\u0d2f\u0d4d\u0d2f\u0d41\u0d15",
"pad.toolbar.settings.title": "\u0d38\u0d1c\u0d4d\u0d1c\u0d40\u0d15\u0d30\u0d23\u0d19\u0d4d\u0d19\u0d7e",
"pad.toolbar.embed.title": "\u0d08 \u0d2a\u0d3e\u0d21\u0d4d \u0d0e\u0d02\u0d2c\u0d46\u0d21\u0d4d \u0d1a\u0d46\u0d2f\u0d4d\u0d2f\u0d41\u0d15",
"pad.toolbar.embed.title": "\u0d08 \u0d2a\u0d3e\u0d21\u0d4d \u0d2a\u0d19\u0d4d\u0d15\u0d4d \u0d35\u0d46\u0d2f\u0d4d\u0d15\u0d4d\u0d15\u0d41\u0d15, \u0d0e\u0d02\u0d2c\u0d46\u0d21\u0d4d \u0d1a\u0d46\u0d2f\u0d4d\u0d2f\u0d41\u0d15",
"pad.toolbar.showusers.title": "\u0d08 \u0d2a\u0d3e\u0d21\u0d3f\u0d32\u0d41\u0d33\u0d4d\u0d33 \u0d09\u0d2a\u0d2f\u0d4b\u0d15\u0d4d\u0d24\u0d3e\u0d15\u0d4d\u0d15\u0d33\u0d46 \u0d2a\u0d4d\u0d30\u0d26\u0d7c\u0d36\u0d3f\u0d2a\u0d4d\u0d2a\u0d3f\u0d15\u0d4d\u0d15\u0d41\u0d15",
"pad.colorpicker.save": "\u0d38\u0d47\u0d35\u0d4d \u0d1a\u0d46\u0d2f\u0d4d\u0d2f\u0d41\u0d15",
"pad.colorpicker.cancel": "\u0d31\u0d26\u0d4d\u0d26\u0d3e\u0d15\u0d4d\u0d15\u0d41\u0d15",
@ -107,7 +107,7 @@
"timeslider.unnamedauthors": "{{num}} \u0d2a\u0d47\u0d30\u0d3f\u0d32\u0d4d\u0d32\u0d3e\u0d24\u0d4d\u0d24 \u0d30\u0d1a\u0d2f\u0d3f\u0d24\u0d3e\u0d15\u0d4d\u0d15\u0d7e",
"pad.savedrevs.marked": "\u0d08 \u0d28\u0d3e\u0d7e\u0d2a\u0d4d\u0d2a\u0d24\u0d3f\u0d2a\u0d4d\u0d2a\u0d4d \u0d38\u0d47\u0d35\u0d4d \u0d1a\u0d46\u0d2f\u0d4d\u0d24\u0d3f\u0d1f\u0d4d\u0d1f\u0d41\u0d33\u0d4d\u0d33 \u0d28\u0d3e\u0d7e\u0d2a\u0d4d\u0d2a\u0d24\u0d3f\u0d2a\u0d4d\u0d2a\u0d3e\u0d2f\u0d3f \u0d05\u0d1f\u0d2f\u0d3e\u0d33\u0d2a\u0d4d\u0d2a\u0d46\u0d1f\u0d41\u0d24\u0d4d\u0d24\u0d3f\u0d2f\u0d3f\u0d30\u0d3f\u0d15\u0d4d\u0d15\u0d41\u0d28\u0d4d\u0d28\u0d41",
"pad.userlist.entername": "\u0d24\u0d3e\u0d19\u0d4d\u0d15\u0d33\u0d41\u0d1f\u0d46 \u0d2a\u0d47\u0d30\u0d4d \u0d28\u0d7d\u0d15\u0d41\u0d15",
"pad.userlist.unnamed": "\u0d2a\u0d47\u0d30\u0d3f\u0d32\u0d4d\u0d32\u0d3e\u0d24\u0d4d\u0d24",
"pad.userlist.unnamed": "\u0d2a\u0d47\u0d30\u0d3f\u0d32\u0d4d\u0d32\u0d3e\u0d24\u0d4d\u0d24\u0d35",
"pad.userlist.guest": "\u0d05\u0d24\u0d3f\u0d25\u0d3f",
"pad.userlist.deny": "\u0d28\u0d3f\u0d30\u0d38\u0d3f\u0d15\u0d4d\u0d15\u0d41\u0d15",
"pad.userlist.approve": "\u0d05\u0d02\u0d17\u0d40\u0d15\u0d30\u0d3f\u0d15\u0d4d\u0d15\u0d41\u0d15",

View file

@ -19,9 +19,9 @@
"pad.toolbar.clearAuthorship.title": "Escafar las colors qu'identifican los autors",
"pad.toolbar.import_export.title": "Importar/Exportar de/cap a un format de fichi\u00e8r diferent",
"pad.toolbar.timeslider.title": "Istoric dinamic",
"pad.toolbar.savedRevision.title": "Versions enregistradas",
"pad.toolbar.savedRevision.title": "Enregistrar la revision",
"pad.toolbar.settings.title": "Param\u00e8tres",
"pad.toolbar.embed.title": "Integrar aqueste Pad",
"pad.toolbar.embed.title": "Partejar e integrar aqueste Pad",
"pad.toolbar.showusers.title": "Afichar los utilizaires del Pad",
"pad.colorpicker.save": "Enregistrar",
"pad.colorpicker.cancel": "Anullar",
@ -34,6 +34,7 @@
"pad.settings.stickychat": "Afichar totjorn lo chat",
"pad.settings.colorcheck": "Colors d\u2019identificacion",
"pad.settings.linenocheck": "Num\u00e8ros de linhas",
"pad.settings.rtlcheck": "Lectura de drecha a esqu\u00e8rra",
"pad.settings.fontType": "Tipe de poli\u00e7a :",
"pad.settings.fontType.normal": "Normal",
"pad.settings.fontType.monospaced": "Monospace",
@ -100,6 +101,8 @@
"timeslider.month.october": "Octobre",
"timeslider.month.november": "Novembre",
"timeslider.month.december": "Decembre",
"timeslider.unnamedauthor": "{{num}} autor anonime",
"timeslider.unnamedauthors": "{{num}} autors anonimes",
"pad.savedrevs.marked": "Aquesta revision es ara marcada coma revision enregistrada",
"pad.userlist.entername": "Entratz v\u00f2stre nom",
"pad.userlist.unnamed": "sens nom",

View file

@ -21,7 +21,7 @@
"pad.toolbar.timeslider.title": "\u0420\u04d5\u0441\u0442\u04d5\u0434\u0436\u044b \u0445\u0430\u0445\u0445",
"pad.toolbar.savedRevision.title": "\u0424\u04d5\u043b\u0442\u04d5\u0440 \u0431\u0430\u0432\u04d5\u0440\u044b\u043d\u04d5\u043d",
"pad.toolbar.settings.title": "\u0423\u0430\u0433\u04d5\u0432\u04d5\u0440\u0434\u0442\u04d5",
"pad.toolbar.embed.title": "\u0410\u0446\u044b \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442 \u0431\u0430\u0444\u0442\u0430\u0443\u044b\u043d",
"pad.toolbar.embed.title": "\u0410\u0446\u044b \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442 \u0431\u0430\u0444\u0442\u0430\u0443 \u00e6\u043c\u00e6 \u0439\u00e6 \u0442\u044b\u0445\u0445\u00e6\u0439 \u0430\u0445\u044a\u00e6\u0440 \u043a\u00e6\u043d",
"pad.toolbar.showusers.title": "\u0410\u0446\u044b \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u044b \u0430\u0440\u0445\u0430\u0439\u0434\u0436\u044b\u0442\u044b \u0440\u0430\u0432\u0434\u0438\u0441\u044b\u043d",
"pad.colorpicker.save": "\u041d\u044b\u0432\u00e6\u0440\u044b\u043d",
"pad.colorpicker.cancel": "\u041d\u044b\u0443\u0443\u0430\u0434\u0437\u044b\u043d",

107
src/locales/pa.json Normal file
View file

@ -0,0 +1,107 @@
{
"@metadata": {
"authors": [
"Aalam"
]
},
"index.newPad": "\u0a28\u0a35\u0a3e\u0a02 \u0a2a\u0a48\u0a21",
"index.createOpenPad": "\u0a1c\u0a3e\u0a02 \u0a28\u0a3e\u0a02 \u0a28\u0a3e\u0a32 \u0a28\u0a35\u0a3e\u0a02 \u0a2a\u0a48\u0a21 \u0a2c\u0a23\u0a3e\u0a13/\u0a16\u0a4b\u0a32\u0a4d\u0a39\u0a4b:",
"pad.toolbar.bold.title": "\u0a17\u0a42\u0a5c\u0a4d\u0a39\u0a3e (Ctrl-B)",
"pad.toolbar.italic.title": "\u0a24\u0a3f\u0a30\u0a1b\u0a3e (Ctrl-I)",
"pad.toolbar.underline.title": "\u0a39\u0a47\u0a20\u0a3e\u0a02-\u0a30\u0a47\u0a16\u0a3e (Ctrl-U)",
"pad.toolbar.strikethrough.title": "\u0a35\u0a3f\u0a70\u0a28\u0a4d\u0a39\u0a4b \u0a35\u0a3f\u0a28\u0a4b",
"pad.toolbar.ol.title": "\u0a32\u0a5c\u0a40\u0a35\u0a3e\u0a30 \u0a32\u0a3f\u0a38\u0a1f",
"pad.toolbar.ul.title": "\u0a2c\u0a3f\u0a28-\u0a32\u0a5c\u0a40\u0a2c\u0a71\u0a27 \u0a38\u0a42\u0a1a\u0a40",
"pad.toolbar.indent.title": "\u0a39\u0a3e\u0a38\u0a3c\u0a40\u0a0f \u0a24\u0a4b\u0a02 \u0a26\u0a42\u0a30",
"pad.toolbar.undo.title": "\u0a35\u0a3e\u0a2a\u0a38 (Ctrl-Z)",
"pad.toolbar.redo.title": "\u0a2a\u0a30\u0a24\u0a3e\u0a13 (Ctrl-Y)",
"pad.toolbar.clearAuthorship.title": "\u0a2a\u0a30\u0a2e\u0a3e\u0a23\u0a15\u0a3f\u0a24\u0a3e \u0a30\u0a70\u0a17 \u0a38\u0a3e\u0a2b\u0a3c \u0a15\u0a30\u0a4b",
"pad.toolbar.import_export.title": "\u0a35\u0a71\u0a16-\u0a35\u0a71\u0a16 \u0a2b\u0a3e\u0a07\u0a32 \u0a2b\u0a3e\u0a30\u0a2e\u0a48\u0a1f \u0a24\u0a4b\u0a02/\u0a35\u0a3f\u0a71\u0a1a \u0a07\u0a70\u0a2a\u0a4b\u0a30\u0a1f/\u0a10\u0a15\u0a38\u0a2a\u0a4b\u0a30\u0a1f \u0a15\u0a30\u0a4b",
"pad.toolbar.timeslider.title": "\u0a38\u0a2e\u0a3e\u0a02-\u0a32\u0a15\u0a40\u0a30",
"pad.toolbar.savedRevision.title": "\u0a30\u0a40\u0a35\u0a3f\u0a1c\u0a3c\u0a28 \u0a38\u0a70\u0a2d\u0a3e\u0a32\u0a4b",
"pad.toolbar.settings.title": "\u0a38\u0a48\u0a1f\u0a3f\u0a70\u0a17",
"pad.toolbar.embed.title": "\u0a07\u0a39 \u0a2a\u0a48\u0a21 \u0a38\u0a3e\u0a02\u0a1d\u0a3e \u0a24\u0a47 \u0a07\u0a70\u0a2c\u0a48\u0a71\u0a21 \u0a15\u0a30\u0a4b",
"pad.toolbar.showusers.title": "\u0a07\u0a39 \u0a2a\u0a48\u0a21 \u0a09\u0a71\u0a24\u0a47 \u0a2f\u0a42\u0a1c\u0a3c\u0a30 \u0a35\u0a47\u0a16\u0a3e\u0a13",
"pad.colorpicker.save": "\u0a38\u0a70\u0a2d\u0a3e\u0a32\u0a4b",
"pad.colorpicker.cancel": "\u0a30\u0a71\u0a26 \u0a15\u0a30\u0a4b",
"pad.loading": "\u2026\u0a32\u0a4b\u0a21 \u0a15\u0a40\u0a24\u0a3e \u0a1c\u0a3e \u0a30\u0a3f\u0a39\u0a3e \u0a39\u0a48",
"pad.passwordRequired": "\u0a07\u0a39 \u0a2a\u0a48\u0a21 \u0a26\u0a40 \u0a35\u0a30\u0a24\u0a4b\u0a02 \u0a15\u0a30\u0a28 \u0a32\u0a08 \u0a24\u0a41\u0a39\u0a3e\u0a28\u0a42\u0a70 \u0a2a\u0a3e\u0a38\u0a35\u0a30\u0a21 \u0a1a\u0a3e\u0a39\u0a40\u0a26\u0a3e \u0a39\u0a48",
"pad.permissionDenied": "\u0a07\u0a39 \u0a2a\u0a48\u0a21 \u0a35\u0a30\u0a24\u0a28 \u0a32\u0a08 \u0a24\u0a41\u0a39\u0a3e\u0a28\u0a42\u0a70 \u0a05\u0a27\u0a3f\u0a15\u0a3e\u0a30 \u0a28\u0a39\u0a40\u0a02 \u0a39\u0a28",
"pad.wrongPassword": "\u0a24\u0a41\u0a39\u0a3e\u0a21\u0a3e \u0a2a\u0a3e\u0a38\u0a35\u0a30\u0a21 \u0a17\u0a32\u0a24\u0a40 \u0a38\u0a40",
"pad.settings.padSettings": "\u0a2a\u0a48\u0a21 \u0a38\u0a48\u0a1f\u0a3f\u0a70\u0a17",
"pad.settings.myView": "\u0a2e\u0a47\u0a30\u0a40 \u0a1d\u0a32\u0a15",
"pad.settings.stickychat": "\u0a39\u0a2e\u0a47\u0a38\u0a3c\u0a3e \u0a38\u0a15\u0a30\u0a40\u0a28 \u0a09\u0a71\u0a24\u0a47 \u0a17\u0a71\u0a32 \u0a15\u0a30\u0a4b",
"pad.settings.linenocheck": "\u0a32\u0a3e\u0a08\u0a28 \u0a28\u0a70\u0a2c\u0a30",
"pad.settings.rtlcheck": "\u0a38\u0a2e\u0a71\u0a17\u0a30\u0a40 \u0a38\u0a71\u0a1c\u0a47 \u0a24\u0a4b\u0a02 \u0a16\u0a71\u0a2c\u0a47 \u0a2a\u0a5c\u0a4d\u0a39\u0a28\u0a40 \u0a39\u0a48?",
"pad.settings.fontType": "\u0a2b\u0a4b\u0a02\u0a1f \u0a15\u0a3f\u0a38\u0a2e:",
"pad.settings.fontType.normal": "\u0a38\u0a27\u0a3e\u0a30\u0a28",
"pad.settings.fontType.monospaced": "\u0a2e\u0a4b\u0a28\u0a4b\u0a38\u0a2a\u0a47\u0a38",
"pad.settings.globalView": "\u0a17\u0a32\u0a4b\u0a2c\u0a32 \u0a1d\u0a32\u0a15",
"pad.settings.language": "\u0a2d\u0a3e\u0a38\u0a3c\u0a3e:",
"pad.importExport.import_export": "\u0a07\u0a70\u0a2a\u0a4b\u0a30\u0a1f/\u0a10\u0a15\u0a38\u0a2a\u0a4b\u0a30\u0a1f",
"pad.importExport.import": "\u0a15\u0a4b\u0a08 \u0a35\u0a40 \u0a1f\u0a48\u0a15\u0a38\u0a1f \u0a2b\u0a3e\u0a07\u0a32 \u0a1c\u0a3e\u0a02 \u0a26\u0a38\u0a24\u0a3e\u0a35\u0a47\u0a1c\u0a3c \u0a05\u0a71\u0a2a\u0a32\u0a4b\u0a21 \u0a15\u0a30\u0a4b",
"pad.importExport.importSuccessful": "\u0a38\u0a2b\u0a3c\u0a32!",
"pad.importExport.export": "\u0a2e\u0a4c\u0a1c\u0a42\u0a26\u0a3e \u0a2a\u0a48\u0a21 \u0a28\u0a42\u0a70 \u0a10\u0a15\u0a38\u0a2a\u0a4b\u0a30\u0a1f \u0a15\u0a30\u0a4b:",
"pad.importExport.exporthtml": "HTML",
"pad.importExport.exportplain": "\u0a38\u0a27\u0a3e\u0a30\u0a28 \u0a1f\u0a48\u0a15\u0a38\u0a1f",
"pad.importExport.exportword": "\u0a2e\u0a3e\u0a08\u0a15\u0a30\u0a4b\u0a38\u0a3e\u0a2b\u0a1f \u0a35\u0a30\u0a21",
"pad.importExport.exportpdf": "\u0a2a\u0a40\u0a21\u0a40\u0a10\u0a2b",
"pad.importExport.exportopen": "ODF (\u0a13\u0a2a\u0a28 \u0a21\u0a4c\u0a15\u0a42\u0a2e\u0a48\u0a02\u0a1f \u0a2b\u0a3e\u0a30\u0a2e\u0a48\u0a1f)",
"pad.importExport.exportdokuwiki": "DokuWiki",
"pad.modals.connected": "\u0a15\u0a41\u0a28\u0a48\u0a15\u0a1f \u0a39\u0a48\u0964",
"pad.modals.reconnecting": "..\u0a24\u0a41\u0a39\u0a3e\u0a21\u0a47 \u0a2a\u0a48\u0a21 \u0a28\u0a3e\u0a32 \u0a2e\u0a41\u0a5c-\u0a15\u0a41\u0a28\u0a48\u0a15\u0a1f \u0a15\u0a40\u0a24\u0a3e \u0a1c\u0a3e \u0a30\u0a3f\u0a39\u0a3e \u0a39\u0a48",
"pad.modals.forcereconnect": "\u0a27\u0a71\u0a15\u0a47 \u0a28\u0a3e\u0a32 \u0a2e\u0a41\u0a5c-\u0a15\u0a41\u0a28\u0a48\u0a15\u0a1f \u0a15\u0a30\u0a4b",
"pad.modals.userdup": "\u0a39\u0a4b\u0a30 \u0a35\u0a3f\u0a70\u0a21\u0a4b \u0a35\u0a3f\u0a71\u0a1a \u0a16\u0a41\u0a71\u0a32\u0a4d\u0a39\u0a3f\u0a06 \u0a39\u0a48",
"pad.modals.unauth": "\u0a2a\u0a30\u0a2e\u0a3e\u0a23\u0a3f\u0a24 \u0a28\u0a39\u0a40\u0a02 \u0a39\u0a48",
"pad.modals.looping": "\u0a15\u0a41\u0a28\u0a15\u0a48\u0a1f \u0a16\u0a24\u0a2e \u0a39\u0a4b\u0a07\u0a06\u0964",
"pad.modals.initsocketfail": "\u0a38\u0a30\u0a35\u0a30 \u0a2a\u0a39\u0a41\u0a70\u0a1a \u0a35\u0a3f\u0a71\u0a1a \u0a28\u0a39\u0a40\u0a02 \u0a39\u0a48\u0964",
"pad.modals.slowcommit": "\u0a15\u0a41\u0a28\u0a15\u0a48\u0a1f \u0a16\u0a24\u0a2e \u0a39\u0a4b\u0a07\u0a06\u0964",
"pad.modals.slowcommit.explanation": "\u0a38\u0a30\u0a35\u0a30 \u0a1c\u0a35\u0a3e\u0a2c \u0a28\u0a39\u0a40\u0a02 \u0a26\u0a47 \u0a30\u0a3f\u0a39\u0a3e \u0a39\u0a48\u0964",
"pad.modals.slowcommit.cause": "\u0a07\u0a39 \u0a28\u0a48\u0a71\u0a1f\u0a35\u0a30\u0a15 \u0a15\u0a41\u0a28\u0a48\u0a15\u0a38\u0a3c\u0a28 \u0a28\u0a3e\u0a32 \u0a38\u0a2e\u0a71\u0a38\u0a3f\u0a06 \u0a15\u0a30\u0a15\u0a47 \u0a39\u0a4b \u0a38\u0a15\u0a26\u0a3e \u0a39\u0a48\u0964",
"pad.modals.deleted": "\u0a39\u0a1f\u0a3e\u0a07\u0a06\u0964",
"pad.modals.deleted.explanation": "\u0a07\u0a39 \u0a2a\u0a48\u0a21 \u0a39\u0a1f\u0a3e\u0a07\u0a06 \u0a1c\u0a3e \u0a1a\u0a41\u0a71\u0a15\u0a3e \u0a39\u0a48\u0964",
"pad.modals.disconnected": "\u0a24\u0a41\u0a38\u0a40\u0a02 \u0a21\u0a3f\u0a38-\u0a15\u0a41\u0a28\u0a48\u0a15\u0a1f \u0a39\u0a4b \u0a1a\u0a41\u0a71\u0a15\u0a47 \u0a39\u0a4b\u0964",
"pad.modals.disconnected.explanation": "\u0a38\u0a30\u0a35\u0a30 \u0a28\u0a3e\u0a32 \u0a15\u0a41\u0a28\u0a48\u0a15\u0a38\u0a3c\u0a28 \u0a16\u0a24\u0a2e \u0a39\u0a4b\u0a07\u0a06 \u0a39\u0a48",
"pad.share": "\u0a07\u0a39 \u0a2a\u0a48\u0a21 \u0a38\u0a3e\u0a02\u0a1d\u0a3e \u0a15\u0a30\u0a4b",
"pad.share.readonly": "\u0a15\u0a47\u0a35\u0a32 \u0a2a\u0a5c\u0a4d\u0a39\u0a28 \u0a32\u0a08",
"pad.share.link": "\u0a32\u0a3f\u0a70\u0a15",
"pad.share.emebdcode": "\u0a07\u0a70\u0a2c\u0a48\u0a71\u0a21 URL",
"pad.chat": "\u0a17\u0a71\u0a32\u0a2c\u0a3e\u0a24",
"pad.chat.title": "\u0a07\u0a39 \u0a2a\u0a48\u0a21 \u0a32\u0a08 \u0a17\u0a71\u0a32\u0a2c\u0a3e\u0a24 \u0a16\u0a4b\u0a32\u0a4d\u0a39\u0a4b\u0964",
"pad.chat.loadmessages": "\u0a39\u0a4b\u0a30 \u0a38\u0a41\u0a28\u0a47\u0a39\u0a47 \u0a32\u0a4b\u0a21 \u0a15\u0a30\u0a4b",
"timeslider.pageTitle": "{{appTitle}} \u0a38\u0a2e\u0a3e\u0a02-\u0a32\u0a15\u0a40\u0a30",
"timeslider.toolbar.returnbutton": "\u0a2a\u0a48\u0a21 \u0a09\u0a71\u0a24\u0a47 \u0a35\u0a3e\u0a2a\u0a38",
"timeslider.toolbar.authors": "\u0a32\u0a47\u0a16\u0a15:",
"timeslider.toolbar.authorsList": "\u0a15\u0a4b\u0a08 \u0a32\u0a47\u0a16\u0a15 \u0a28\u0a39\u0a40\u0a02",
"timeslider.toolbar.exportlink.title": "\u0a10\u0a15\u0a38\u0a2a\u0a4b\u0a30\u0a1f",
"timeslider.exportCurrent": "\u0a2e\u0a4c\u0a1c\u0a42\u0a26\u0a3e \u0a35\u0a30\u0a1c\u0a28 \u0a07\u0a70\u0a1d \u0a10\u0a15\u0a38\u0a2a\u0a4b\u0a30\u0a1f \u0a15\u0a30\u0a4b:",
"timeslider.version": "\u0a35\u0a30\u0a1c\u0a28 {{version}}",
"timeslider.saved": "{{day}} {{month}} {{year}} \u0a28\u0a42\u0a70 \u0a38\u0a70\u0a2d\u0a3e\u0a32\u0a3f\u0a06",
"timeslider.dateformat": "{{day}}/{{month}}/{{year}} {{hours}}:{{minutes}}:{{seconds}}",
"timeslider.month.january": "\u0a1c\u0a28\u0a35\u0a30\u0a40",
"timeslider.month.february": "\u0a2b\u0a3c\u0a30\u0a35\u0a30\u0a40",
"timeslider.month.march": "\u0a2e\u0a3e\u0a30\u0a1a",
"timeslider.month.april": "\u0a05\u0a2a\u0a30\u0a48\u0a32",
"timeslider.month.may": "\u0a2e\u0a08",
"timeslider.month.june": "\u0a1c\u0a42\u0a28",
"timeslider.month.july": "\u0a1c\u0a41\u0a32\u0a3e\u0a08",
"timeslider.month.august": "\u0a05\u0a17\u0a38\u0a24",
"timeslider.month.september": "\u0a38\u0a24\u0a70\u0a2c\u0a30",
"timeslider.month.october": "\u0a05\u0a15\u0a24\u0a42\u0a2c\u0a30",
"timeslider.month.november": "\u0a28\u0a35\u0a70\u0a2c\u0a30",
"timeslider.month.december": "\u0a26\u0a38\u0a70\u0a2c\u0a30",
"timeslider.unnamedauthor": "{{num}} \u0a2c\u0a47\u0a28\u0a3e\u0a2e \u0a32\u0a47\u0a16\u0a15",
"timeslider.unnamedauthors": "{{num}} \u0a2c\u0a47\u0a28\u0a3e\u0a2e \u0a32\u0a47\u0a16\u0a15",
"pad.savedrevs.marked": "\u0a07\u0a39 \u0a30\u0a40\u0a35\u0a3f\u0a1c\u0a3c\u0a28 \u0a28\u0a42\u0a70 \u0a39\u0a41\u0a23 \u0a38\u0a70\u0a2d\u0a3e\u0a32\u0a47 \u0a39\u0a4b\u0a0f \u0a30\u0a40\u0a35\u0a3f\u0a1c\u0a3c\u0a28 \u0a35\u0a1c\u0a4b\u0a02 \u0a2e\u0a70\u0a28\u0a3f\u0a06 \u0a17\u0a3f\u0a06 \u0a39\u0a48",
"pad.userlist.entername": "\u0a06\u0a2a\u0a23\u0a3e \u0a28\u0a3e\u0a02 \u0a26\u0a3f\u0a09",
"pad.userlist.unnamed": "\u0a2c\u0a47\u0a28\u0a3e\u0a2e",
"pad.userlist.guest": "\u0a2e\u0a39\u0a3f\u0a2e\u0a3e\u0a28",
"pad.userlist.deny": "\u0a2a\u0a3e\u0a2c\u0a70\u0a26\u0a40",
"pad.userlist.approve": "\u0a2e\u0a28\u0a1c\u0a3c\u0a42\u0a30",
"pad.editbar.clearcolors": "\u0a2a\u0a42\u0a30\u0a47 \u0a26\u0a38\u0a3e\u0a24\u0a35\u0a47\u0a1c\u0a3c \u0a09\u0a71\u0a24\u0a47 \u0a2a\u0a30\u0a2e\u0a3e\u0a23\u0a15\u0a3f\u0a24\u0a3e \u0a30\u0a70\u0a17 \u0a38\u0a3e\u0a2b\u0a3c \u0a15\u0a30\u0a28\u0a47 \u0a39\u0a28?",
"pad.impexp.importbutton": "\u0a39\u0a41\u0a23\u0a47 \u0a07\u0a70\u0a2a\u0a4b\u0a30\u0a1f \u0a15\u0a30\u0a4b",
"pad.impexp.importing": "...\u0a07\u0a70\u0a2a\u0a4b\u0a30\u0a1f \u0a15\u0a40\u0a24\u0a3e \u0a1c\u0a3e \u0a30\u0a3f\u0a39\u0a3e \u0a39\u0a48",
"pad.impexp.uploadFailed": "\u0a05\u0a71\u0a2a\u0a32\u0a4b\u0a21 \u0a32\u0a08 \u0a2b\u0a47\u0a32\u0a4d\u0a39 \u0a39\u0a48, \u0a2b\u0a47\u0a30 \u0a15\u0a4b\u0a38\u0a3c\u0a3f\u0a38\u0a3c \u0a15\u0a30\u0a4b \u0a1c\u0a40\u0964",
"pad.impexp.importfailed": "\u0a07\u0a70\u0a2a\u0a4b\u0a30\u0a1f \u0a2b\u0a47\u0a32\u0a4d\u0a39 \u0a39\u0a48",
"pad.impexp.copypaste": "\u0a15\u0a3e\u0a2a\u0a40 \u0a15\u0a30\u0a4b \u0a1a\u0a47\u0a2a\u0a4b \u0a1c\u0a40"
}

View file

@ -79,7 +79,7 @@
"pad.share": "Udost\u0119pnij ten dokument",
"pad.share.readonly": "Tylko do odczytu",
"pad.share.link": "Link",
"pad.share.emebdcode": "Kod do umieszczenia",
"pad.share.emebdcode": "URL do umieszczenia",
"pad.chat": "Czat",
"pad.chat.title": "Otw\u00f3rz czat dla tego dokumentu.",
"pad.chat.loadmessages": "Za\u0142aduj wi\u0119cej wiadomo\u015bci",

View file

@ -4,16 +4,23 @@
"Ahmed-Najib-Biabani-Ibrahimkhel"
]
},
"index.newPad": "\u0646\u0648\u06d0 \u0644\u064a\u06a9\u0686\u0647",
"index.createOpenPad": "\u064a\u0627 \u067e\u0647 \u0647\u0645\u062f\u06d0 \u0646\u0648\u0645 \u064a\u0648\u0647 \u0646\u0648\u06d0 \u0644\u064a\u06a9\u0686\u0647 \u062c\u0648\u0693\u0648\u0644/\u067e\u0631\u0627\u0646\u064a\u0633\u062a\u0644:",
"pad.toolbar.bold.title": "\u0632\u063a\u0631\u062f (Ctrl-B)",
"pad.toolbar.italic.title": "\u0631\u06d0\u0648\u0646\u062f (Ctrl-I)",
"pad.toolbar.undo.title": "\u0646\u0627\u06a9\u0693\u0644 (Ctrl-Z)",
"pad.toolbar.redo.title": "\u0628\u064a\u0627\u06a9\u0693\u0644 (Ctrl-Y)",
"pad.toolbar.clearAuthorship.title": "\u062f \u0644\u064a\u06a9\u0648\u0627\u0644\u06cd \u0631\u0646\u06ab\u0648\u0646\u0647 \u0633\u067e\u064a\u0646\u0648\u0644",
"pad.toolbar.savedRevision.title": "\u0645\u062e\u06a9\u062a\u0646\u0647 \u062e\u0648\u0646\u062f\u064a \u06a9\u0648\u0644",
"pad.toolbar.settings.title": "\u0627\u0645\u0633\u062a\u0646\u06d0",
"pad.colorpicker.save": "\u062e\u0648\u0646\u062f\u064a \u06a9\u0648\u0644",
"pad.colorpicker.cancel": "\u0646\u0627\u06ab\u0627\u0631\u0644",
"pad.loading": "\u0628\u0631\u0633\u06d0\u0631\u06d0\u062f\u0646\u06d0 \u06a9\u06d0 \u062f\u06cc...",
"pad.passwordRequired": "\u062f\u06d0 \u0644\u064a\u06a9\u0686\u06d0 \u062a\u0647 \u062f \u0644\u0627\u0633\u0631\u0633\u064a \u0644\u067e\u0627\u0631\u0647 \u062a\u0627\u0633\u06d0 \u064a\u0648 \u067e\u067c\u0646\u0648\u0645 \u062a\u0647 \u0627\u0693\u062a\u064a\u0627 \u0644\u0631\u06cd",
"pad.wrongPassword": "\u067e\u067c\u0646\u0648\u0645 \u0645\u0648 \u0633\u0645 \u0646\u0647 \u0648",
"pad.settings.padSettings": "\u062f \u0644\u064a\u06a9\u0686\u06d0 \u0627\u0645\u0633\u062a\u0646\u06d0",
"pad.settings.myView": "\u0632\u0645\u0627 \u06a9\u062a\u0646\u0647",
"pad.settings.colorcheck": "\u062f \u0644\u064a\u06a9\u0648\u0627\u0644\u06cd \u0631\u0646\u06ab\u0648\u0646\u0647",
"pad.settings.fontType": "\u0644\u064a\u06a9\u0628\u06bc\u06d0 \u0689\u0648\u0644:",
"pad.settings.fontType.normal": "\u0646\u0648\u0631\u0645\u0627\u0644",
"pad.settings.fontType.monospaced": "\u0645\u0648\u0646\u0648\u0633\u067e\u06d0\u0633",
@ -33,6 +40,10 @@
"pad.chat.loadmessages": "\u0646\u0648\u0631 \u067e\u064a\u063a\u0627\u0645\u0648\u0646\u0647 \u0628\u0631\u0633\u06d0\u0631\u0648\u0644",
"timeslider.toolbar.authors": "\u0644\u064a\u06a9\u0648\u0627\u0644:",
"timeslider.toolbar.authorsList": "\u0628\u06d0 \u0644\u064a\u06a9\u0648\u0627\u0644\u0647",
"timeslider.toolbar.exportlink.title": "\u0635\u0627\u062f\u0631\u0648\u0644",
"timeslider.version": "\u0628\u06bc\u0647 {{version}}",
"timeslider.saved": "\u062e\u0648\u0646\u062f\u064a \u0634\u0648 {{month}} {{day}}, {{year}}",
"timeslider.dateformat": "{{month}}/{{day}}/{{year}} {{hours}}:{{minutes}}:{{seconds}}",
"timeslider.month.january": "\u062c\u0646\u0648\u0631\u064a",
"timeslider.month.february": "\u0641\u0628\u0631\u0648\u0631\u064a",
"timeslider.month.march": "\u0645\u0627\u0631\u0686",
@ -45,6 +56,9 @@
"timeslider.month.october": "\u0627\u06a9\u062a\u0648\u0628\u0631",
"timeslider.month.november": "\u0646\u0648\u0645\u0628\u0631",
"timeslider.month.december": "\u0689\u064a\u0633\u0645\u0628\u0631",
"timeslider.unnamedauthor": "{{num}} \u0628\u06d0\u0646\u0648\u0645 \u0644\u064a\u06a9\u0648\u0627\u0644",
"timeslider.unnamedauthors": "{{num}} \u0628\u06d0\u0646\u0648\u0645\u0647 \u0644\u064a\u06a9\u0648\u0627\u0644\u0627\u0646",
"pad.savedrevs.marked": "\u0627\u0648\u0633 \u062f\u0627 \u0645\u062e\u06a9\u062a\u0646\u0647 \u062f \u064a\u0648\u06d0 \u062e\u0648\u0646\u062f\u064a \u0634\u0648\u06d0 \u0645\u062e\u06a9\u062a\u0646\u06d0 \u067e\u0647 \u062a\u0648\u06ab\u0647 \u067e\u0647 \u0646\u069a\u0647 \u0634\u0648\u0647",
"pad.userlist.entername": "\u0646\u0648\u0645 \u0645\u0648 \u0648\u0631\u06a9\u0693\u06cd",
"pad.userlist.unnamed": "\u0628\u06d0 \u0646\u0648\u0645\u0647",
"pad.userlist.guest": "\u0645\u06d0\u0644\u0645\u0647",

View file

@ -2,6 +2,8 @@
"@metadata": {
"authors": [
"Gusta",
"Luckas",
"TheGabrielZaum",
"Tuliouel"
]
},
@ -22,7 +24,7 @@
"pad.toolbar.timeslider.title": "Linha do tempo",
"pad.toolbar.savedRevision.title": "Salvar revis\u00e3o",
"pad.toolbar.settings.title": "Configura\u00e7\u00f5es",
"pad.toolbar.embed.title": "Compartilhar e mencionar esta nota",
"pad.toolbar.embed.title": "Compartilhar e incorporar esta nota",
"pad.toolbar.showusers.title": "Mostrar os usuarios nesta Nota",
"pad.colorpicker.save": "Salvar",
"pad.colorpicker.cancel": "Cancelar",
@ -60,7 +62,7 @@
"pad.modals.userdup.advice": "Reconectar para usar esta janela.",
"pad.modals.unauth": "N\u00e3o autorizado",
"pad.modals.unauth.explanation": "Suas permiss\u00f5es foram mudadas enquanto visualizava esta p\u00e1gina. Tente reconectar.",
"pad.modals.looping": "Reconectado.",
"pad.modals.looping": "Desconectado.",
"pad.modals.looping.explanation": "H\u00e1 problemas de comunica\u00e7\u00e3o com o servidor de sincroniza\u00e7\u00e3o.",
"pad.modals.looping.cause": "Talvez voc\u00ea tenha conectado por um firewall ou proxy incompat\u00edvel.",
"pad.modals.initsocketfail": "Servidor \u00e9 inalcan\u00e7\u00e1vel.",

View file

@ -1,11 +1,13 @@
{
"@metadata": {
"authors": {
"1": "Waldir"
"0": "Luckas",
"2": "Tuliouel",
"3": "Waldir"
}
},
"index.newPad": "Novo Pad",
"index.createOpenPad": "ou criar/abrir um Pad com o nome:",
"index.newPad": "Nova Nota",
"index.createOpenPad": "ou crie/abra uma Nota com o nome:",
"pad.toolbar.bold.title": "Negrito (Ctrl-B)",
"pad.toolbar.italic.title": "It\u00e1lico (Ctrl-I)",
"pad.toolbar.underline.title": "Sublinhado (Ctrl-U)",
@ -19,14 +21,14 @@
"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\u00f5es gravadas",
"pad.toolbar.savedRevision.title": "Salvar revis\u00e3o",
"pad.toolbar.settings.title": "Configura\u00e7\u00f5es",
"pad.toolbar.embed.title": "Incorporar este Pad",
"pad.toolbar.showusers.title": "Mostrar os utilizadores neste Pad",
"pad.toolbar.showusers.title": "Mostrar os utilizadores nesta Nota",
"pad.colorpicker.save": "Gravar",
"pad.colorpicker.cancel": "Cancelar",
"pad.loading": "A carregar\u2026",
"pad.settings.padSettings": "Configura\u00e7\u00f5es do Pad",
"pad.settings.padSettings": "Configura\u00e7\u00f5es da Nota",
"pad.settings.myView": "Minha vista",
"pad.settings.colorcheck": "Cores de autoria",
"pad.settings.linenocheck": "N\u00fameros de linha",
@ -37,7 +39,7 @@
"pad.settings.language": "L\u00edngua:",
"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.export": "Exportar a Nota atual como:",
"pad.importExport.exporthtml": "HTML",
"pad.importExport.exportplain": "Texto simples",
"pad.importExport.exportword": "Microsoft Word",
@ -47,6 +49,12 @@
"pad.modals.connected": "Ligado.",
"pad.modals.reconnecting": "Reconectando-se ao seu bloco\u2026",
"pad.modals.forcereconnect": "For\u00e7ar reconex\u00e3o",
"pad.modals.unauth": "N\u00e3o autorizado",
"pad.modals.looping": "Desconectado.",
"pad.modals.slowcommit": "Desconectado.",
"pad.modals.slowcommit.explanation": "O servidor n\u00e3o est\u00e1 respondendo.",
"timeslider.toolbar.authors": "Autores:",
"timeslider.toolbar.exportlink.title": "Exportar",
"timeslider.month.january": "Janeiro",
"timeslider.month.february": "Fevereiro",
"timeslider.month.march": "Mar\u00e7o",
@ -58,5 +66,12 @@
"timeslider.month.september": "Setembro",
"timeslider.month.october": "Outubro",
"timeslider.month.november": "Novembro",
"timeslider.month.december": "Dezembro"
"timeslider.month.december": "Dezembro",
"pad.userlist.entername": "Insira o seu nome",
"pad.userlist.unnamed": "sem nome",
"pad.userlist.guest": "Convidado",
"pad.userlist.deny": "Negar",
"pad.userlist.approve": "Aprovar",
"pad.impexp.importbutton": "Importar agora",
"pad.impexp.importing": "Importando..."
}

121
src/locales/vi.json Normal file
View file

@ -0,0 +1,121 @@
{
"@metadata": {
"authors": [
"Tuankiet65"
]
},
"index.newPad": "T\u1ea1o m\u1ed9t Pad m\u1edbi",
"index.createOpenPad": "hay t\u1ea1o/m\u1edf m\u1ed9t Pad v\u1edbi t\u00ean:",
"pad.toolbar.bold.title": "In \u0111\u1eadm (Ctrl-B)",
"pad.toolbar.italic.title": "In nghi\u00eang (Ctrl-I)",
"pad.toolbar.underline.title": "G\u1ea1ch ch\u00e2n (Ctrl-U)",
"pad.toolbar.strikethrough.title": "G\u1ea1ch b\u1ecf",
"pad.toolbar.ol.title": "Danh s\u00e1ch C\u00f3 \u0110\u00e1nh s\u1ed1",
"pad.toolbar.ul.title": "Danh s\u00e1ch Kh\u00f4ng \u0110\u00e1nh s\u1ed1",
"pad.toolbar.indent.title": "T\u0103ng l\u1ec1",
"pad.toolbar.unindent.title": "Gi\u1ea3m l\u1ec1",
"pad.toolbar.undo.title": "Ho\u00e0n t\u00e1c (Ctrl-Z)",
"pad.toolbar.redo.title": "L\u00e0m l\u1ea1i (Ctrl-Y)",
"pad.toolbar.clearAuthorship.title": "X\u00f3a M\u00e0u ch\u1ec9 T\u00e1c gi\u1ea3",
"pad.toolbar.import_export.title": "Xu\u1ea5t/Nh\u1eadp t\u1eeb/\u0111\u1ebfn c\u00e1c \u0111\u1ecbnh d\u1ea1ng file kh\u00e1c nhau",
"pad.toolbar.timeslider.title": "Thanh th\u1eddi gian",
"pad.toolbar.savedRevision.title": "L\u01b0u Phi\u00ean b\u1ea3n",
"pad.toolbar.settings.title": "Thi\u1ebft l\u1eadp",
"pad.toolbar.embed.title": "Chia s\u1ebb v\u00e0 Nh\u00fang pad n\u00e0y",
"pad.toolbar.showusers.title": "Hi\u1ec7n c\u00e1c ng\u01b0\u1eddi d\u00f9ng tr\u00ean pad n\u00e0y",
"pad.colorpicker.save": "L\u01b0u",
"pad.colorpicker.cancel": "H\u1ee7y b\u1ecf",
"pad.loading": "\u0110ang t\u1ea3i\u2026",
"pad.passwordRequired": "B\u1ea1n c\u1ea7n m\u1eadt kh\u1ea9u \u0111\u1ec3 truy c\u1eadp pad n\u00e0y",
"pad.permissionDenied": "B\u1ea1n kh\u00f4ng c\u00f3 quy\u1ec1n truy c\u1eadp pad n\u00e0y.",
"pad.wrongPassword": "B\u1ea1n \u0111\u00e3 nh\u1eadp sai m\u1eadt kh\u1ea9u",
"pad.settings.padSettings": "T\u00f9y ch\u1ecdn Pad",
"pad.settings.myView": "Ch\u1ec9 c\u00f3 t\u00f4i",
"pad.settings.stickychat": "Lu\u00e2n hi\u1ec7n c\u1eeda s\u1ed5 tr\u00f2 chuy\u1ec7n tr\u00ean m\u00e0n h\u00ecnh",
"pad.settings.colorcheck": "M\u00e0u ch\u1ec9 t\u00e1c gi\u1ea3",
"pad.settings.linenocheck": "S\u1ed1 d\u00f2ng",
"pad.settings.rtlcheck": "\u0110\u1ecdc n\u1ed9i dung t\u1eeb ph\u1ea3i sang tr\u00e1i?",
"pad.settings.fontType": "Ki\u1ec3u ph\u00f4ng ch\u1eef:",
"pad.settings.fontType.normal": "Th\u01b0\u1eddng",
"pad.settings.fontType.monospaced": "Monospace",
"pad.settings.globalView": "To\u00e0n c\u1ea7u",
"pad.settings.language": "Ng\u00f4n ng\u1eef:",
"pad.importExport.import_export": "Xu\u1ea5t/Nh\u1eadp",
"pad.importExport.import": "T\u1ea3i l\u00ean b\u1ea5t k\u1ef3 t\u1eadp tin v\u0103n b\u1ea3n ho\u1eb7c t\u00e0i li\u1ec7u",
"pad.importExport.importSuccessful": "Th\u00e0nh c\u00f4ng!",
"pad.importExport.export": "Xu\u1ea5t pad hi\u1ec7n t\u1ea1i ra \u0111\u1ecbnh d\u1ea1ng:",
"pad.importExport.exporthtml": "HTML",
"pad.importExport.exportplain": "V\u0103n b\u1ea3n thu\u1ea7n t\u00fay",
"pad.importExport.exportword": "Microsoft Word",
"pad.importExport.exportpdf": "PDF",
"pad.importExport.exportopen": "ODF",
"pad.importExport.exportdokuwiki": "DokuWiki",
"pad.importExport.abiword.innerHTML": "B\u1ea1n ch\u1ec9 c\u00f3 th\u1ec3 nh\u1eadp v\u00e0o t\u1eeb v\u0103n b\u1ea3n thu\u1ea7n t\u00fay hay \u0111\u1ecbnh d\u1ea1ng HTML. N\u1ebfu mu\u1ed1n c\u00f3 nhi\u1ec1u ch\u1ee9c n\u0103ng nh\u1eadp h\u01a1n xin h\u00e3y \u003Ca href=\"https://github.com/ether/etherpad-lite/wiki/How-to-enable-importing-and-exporting-different-file-formats-in-Ubuntu-or-OpenSuse-or-SLES-with-AbiWord\"\u003Ec\u00e0i \u0111\u1eb7t abiword\u003C/a\u003E.",
"pad.modals.connected": "\u0110\u00e3 k\u1ebft n\u1ed1i l\u1ea1i.",
"pad.modals.reconnecting": "K\u1ebft n\u1ed1i l\u1ea1i t\u1edbi pad c\u1ee7a b\u1ea1n",
"pad.modals.forcereconnect": "\u00c9p k\u1ebft n\u1ed1i l\u1ea1i",
"pad.modals.userdup": "M\u1edf trong c\u1eeda s\u1ed5 kh\u00e1c",
"pad.modals.userdup.explanation": "Pad n\u00e0y d\u01b0\u1eddng nh\u01b0 \u0111\u01b0\u1ee3c m\u1edf tr\u00ean h\u01a1n m\u1ed9t c\u1eeda s\u1ed5 tr\u00ecnh duy\u1ec7t tr\u00ean m\u00e1y t\u00ednh n\u00e0y.",
"pad.modals.userdup.advice": "K\u1ebft n\u1ed1i l\u1ea1i \u0111\u1ec3 s\u1eed d\u1ee5ng c\u1eeda s\u1ed5 n\u00e0y.",
"pad.modals.unauth": "Kh\u00f4ng c\u00f3 quy\u1ec1n",
"pad.modals.unauth.explanation": "Quy\u1ec1n c\u1ee7a b\u1ea1n \u0111\u00e3 thay \u0111\u1ed5i trong khi b\u1ea1n \u0111ang xem trang n\u00e0y. H\u00e3y th\u1eed k\u1ebft n\u1ed1i l\u1ea1i.",
"pad.modals.looping": "\u0110\u00e3 ng\u1eaft k\u1ebft n\u1ed1i",
"pad.modals.looping.explanation": "C\u00f3 v\u1ea5n \u0111\u1ec1 khi giao ti\u1ebfp v\u1edbi m\u00e1y ch\u1ee7 \u0111\u1ed3ng b\u1ed9",
"pad.modals.looping.cause": "C\u00f3 th\u1ec3 b\u1ea1n \u0111\u00e3 k\u1ebft n\u1ed1i th\u00f4ng qua m\u1ed9t t\u01b0\u1eddng l\u1eeda hay proxy kh\u00f4ng th\u00edch h\u1ee3p",
"pad.modals.initsocketfail": "Kh\u00f4ng th\u1ec3 ti\u1ebfp c\u1eadn m\u00e1y ch\u1ee7",
"pad.modals.initsocketfail.explanation": "Kh\u00f4ng th\u1ec3 k\u1ebft n\u1ed1i \u0111\u1ebfn m\u00e1y ch\u1ee7 \u0111\u1ed3ng b\u1ed9.",
"pad.modals.initsocketfail.cause": "\u0110i\u1ec1u n\u00e0y c\u00f3 th\u1ec3 l\u00e0 do m\u1ed9t v\u1ea5n \u0111\u1ec1 v\u1edbi tr\u00ecnh duy\u1ec7t c\u1ee7a b\u1ea1n hay \u0111\u01b0\u1eddng truy\u1ec1n internet c\u1ee7a b\u1ea1n.",
"pad.modals.slowcommit": "\u0110\u00e3 ng\u1eaft k\u1ebft n\u1ed1i",
"pad.modals.slowcommit.explanation": "M\u00e1y ch\u1ee7 kh\u00f4ng ph\u1ea3n h\u1ed3i.",
"pad.modals.slowcommit.cause": "\u0110i\u1ec1u n\u00e0y c\u00f3 th\u1ec3 l\u00e0 do v\u1ea5n \u0111\u1ec1 v\u1ec1 k\u1ebft n\u1ed1i m\u1ea1ng.",
"pad.modals.deleted": "\u0110\u00e3 x\u00f3a",
"pad.modals.deleted.explanation": "Pad n\u00e0y \u0111\u00e3 \u0111\u01b0\u1ee3c g\u1ee1",
"pad.modals.disconnected": "B\u1ea1n \u0111\u00e3 ng\u1eaft k\u1ebft n\u1ed1i",
"pad.modals.disconnected.explanation": "K\u1ebft n\u1ed1i t\u1edbi m\u00e1y ch\u1ee7 \u0111\u00e3 b\u1ecb m\u1ea5t",
"pad.modals.disconnected.cause": "C\u00e1c m\u00e1y ch\u1ee7 c\u00f3 th\u1ec3 kh\u00f4ng s\u1eb5n d\u00f9ng. Xin vui l\u00f2ng th\u00f4ng b\u00e1o cho ch\u00fang t\u00f4i n\u1ebfu \u0111i\u1ec1u n\u00e0y ti\u1ebfp t\u1ee5c x\u1ea3y ra.",
"pad.share": "Chia s\u1ebb pad n\u00e0y",
"pad.share.readonly": "Ch\u1ec9 \u0111\u1ecdc",
"pad.share.link": "Li\u00ean k\u1ebft",
"pad.share.emebdcode": "URL nh\u00fang",
"pad.chat": "Tr\u00f2 chuy\u1ec7n",
"pad.chat.title": "M\u1edf tr\u00f2 chuy\u1ec7n cho pad n\u00e0y.",
"pad.chat.loadmessages": "T\u1ea3i th\u00eam tin nh\u1eafn",
"timeslider.pageTitle": "Thanh th\u1eddi gian c\u1ee7a {{appTitle}}",
"timeslider.toolbar.returnbutton": "Tr\u1edf v\u1ec1 pad",
"timeslider.toolbar.authors": "T\u00e1c gi\u1ea3:",
"timeslider.toolbar.authorsList": "Kh\u00f4ng c\u00f3 t\u00e1c gi\u1ea3",
"timeslider.toolbar.exportlink.title": "Xu\u1ea5t",
"timeslider.exportCurrent": "Xu\u1ea5t phi\u00ean b\u1ea3n hi\u1ec7n t\u1ea1i th\u00e0nh:",
"timeslider.version": "Phi\u00ean b\u1ea3n {{version}}",
"timeslider.saved": "\u0110\u00e3 l\u01b0u v\u00e0o ng\u00e0y {{day}} {{month}} n\u0103m {{year}}",
"timeslider.dateformat": "{{day}}/{{month}}/{{year}} {{hours}}:{{minutes}}:{{seconds}}",
"timeslider.month.january": "Th\u00e1ng Gi\u00eang",
"timeslider.month.february": "Th\u00e1ng Hai",
"timeslider.month.march": "Th\u00e1ng Ba",
"timeslider.month.april": "Th\u00e1ng T\u01b0",
"timeslider.month.may": "Th\u00e1ng N\u0103m",
"timeslider.month.june": "Th\u00e1ng S\u00e1u",
"timeslider.month.july": "Th\u00e1ng B\u1ea3y",
"timeslider.month.august": "Th\u00e1ng T\u00e1m",
"timeslider.month.september": "Th\u00e1ng Ch\u00edn",
"timeslider.month.october": "Th\u00e1ng M\u01b0\u1eddi",
"timeslider.month.november": "Th\u00e1ng M\u01b0\u1eddi M\u1ed9t",
"timeslider.month.december": "Th\u00e1ng M\u01b0\u1eddi Hai",
"timeslider.unnamedauthor": "{{num}} t\u00e1c gi\u1ea3 kh\u00f4ng t\u00ean",
"timeslider.unnamedauthors": "{{num}} t\u00e1c gi\u1ea3 kh\u00f4ng t\u00ean",
"pad.savedrevs.marked": "Phi\u00ean b\u1ea3n n\u00e0y \u0111\u00e3 \u0111\u01b0\u1ee3c \u0111\u00e1nh d\u1ea5u l\u00e0 m\u1ed9t phi\u00ean b\u1ea3n \u0111\u00e3 l\u01b0u",
"pad.userlist.entername": "Nh\u1eadp t\u00ean c\u1ee7a b\u1ea1n",
"pad.userlist.unnamed": "Kh\u00f4ng t\u00ean",
"pad.userlist.guest": "Kh\u00e1ch",
"pad.userlist.deny": "Ch\u1eb7n",
"pad.userlist.approve": "Ch\u1ea5p nh\u1eadn",
"pad.editbar.clearcolors": "X\u00f3a m\u00e0u ch\u1ec9 t\u00e1c gi\u1ea3 tr\u00ean to\u00e0n b\u1ed9 t\u00e0i li\u1ec7u?",
"pad.impexp.importbutton": "Nh\u1eadp ngay b\u00e2y gi\u1edd",
"pad.impexp.importing": "\u0110ang nh\u1eadp\u2026",
"pad.impexp.confirmimport": "Nh\u1eadp m\u1ed9t t\u1eadp tin s\u1ebd ghi \u0111\u00e8 n\u1ed9i dung hi\u1ec7n t\u1ea1i c\u1ee7a pad. B\u1ea1n c\u00f3 mu\u1ed1n l\u00e0m nh\u01b0 v\u1eady kh\u00f4ng?",
"pad.impexp.convertFailed": "Ch\u00fang t\u00f4i kh\u00f4ng th\u1ec3 nh\u1eadp t\u1eadp tin n\u00e0y. H\u00e3y s\u1eed d\u1ee5ng \u0111\u1ecbnh d\u1ea1ng t\u1eadp tin kh\u00e1c hay sao ch\u00e9o v\u00e0 d\u00e1n m\u1ed9t c\u00e1ch th\u1ee7 c\u00f4ng.",
"pad.impexp.uploadFailed": "T\u1ea3i l\u00ean kh\u00f4ng th\u00e0nh c\u00f4ng, vui l\u00f2ng th\u1eed l\u1ea1i",
"pad.impexp.importfailed": "Nh\u1eadp th\u1ea5t b\u1ea1i",
"pad.impexp.copypaste": "Xin vui l\u00f2ng sao ch\u00e9p v\u00e0 d\u00e1n",
"pad.impexp.exportdisabled": "Xu\u1ea5t ra \u0111\u1ecbnh d\u1ea1ng {{type}} \u0111\u00e3 b\u1ecb v\u00f4 hi\u1ec7u h\u00f3a. Xin h\u00e3y li\u00ean h\u1ec7 v\u1edbi qu\u1ea3n tr\u1ecb vi\u00ean h\u1ec7 th\u1ed1ng \u0111\u1ec3 bi\u1ebft th\u00eam th\u00f4ng tin chi ti\u1ebft."
}

View file

@ -3,6 +3,7 @@
"authors": [
"Dimension",
"Hydra",
"Shangkuanlc",
"Yfdyh000",
"\u4e4c\u62c9\u8de8\u6c2a",
"\u71c3\u7389"
@ -37,6 +38,7 @@
"pad.settings.stickychat": "\u603b\u662f\u5728\u5c4f\u5e55\u4e0a\u663e\u793a\u804a\u5929",
"pad.settings.colorcheck": "\u4f5c\u8005\u989c\u8272",
"pad.settings.linenocheck": "\u884c\u53f7",
"pad.settings.rtlcheck": "\u4ece\u53f3\u5230\u5de6\u7684\u8bfb\u53d6\u5185\u5bb9\u5417\uff1f",
"pad.settings.fontType": "\u5b57\u4f53\u7c7b\u578b\uff1a",
"pad.settings.fontType.normal": "\u6b63\u5e38",
"pad.settings.fontType.monospaced": "\u7b49\u5bbd\u5b57\u4f53",
@ -85,6 +87,7 @@
"timeslider.exportCurrent": "\u5bfc\u51fa\u76ee\u524d\u7248\u672c\u4e3a\uff1a",
"timeslider.version": "\u7b2c {{version}} \u7248\u672c",
"timeslider.saved": "\u5728{{year}}\u5e74{{month}}{{day}}\u65e5\u4fdd\u5b58",
"timeslider.dateformat": "{{year}} \u5e74 {{month}} \u6708 {{day}} \u65e5 {{hours}}\u65f6:{{minutes}}\u5206:{{seconds}}\u79d2",
"timeslider.month.january": "\u4e00\u6708",
"timeslider.month.february": "\u4e8c\u6708",
"timeslider.month.march": "\u4e09\u6708",

View file

@ -1,8 +1,9 @@
{
"@metadata": {
"authors": {
"0": "Shirayuki",
"2": "Simon Shek"
"0": "Shangkuanlc",
"1": "Shirayuki",
"3": "Simon Shek"
}
},
"index.newPad": "\u65b0Pad",
@ -17,8 +18,8 @@
"pad.toolbar.unindent.title": "\u51f8\u6392",
"pad.toolbar.undo.title": "\u64a4\u92b7\uff08Ctrl-Z\uff09",
"pad.toolbar.redo.title": "\u91cd\u505a\uff08Ctrl-Y\uff09",
"pad.toolbar.clearAuthorship.title": "\u6e05\u9664\u4f5c\u540d\u984f\u8272",
"pad.toolbar.import_export.title": "\u4ee5\u5176\u4ed6\u6a94\u6848\u683c\u5f0f\u5c0e\u5165\uff0f\u532f\u51fa",
"pad.toolbar.clearAuthorship.title": "\u6e05\u9664\u5354\u4f5c\u8005\u984f\u8272\u5340\u5225",
"pad.toolbar.import_export.title": "\u4ee5\u5176\u4ed6\u6a94\u6848\u683c\u5f0f\u532f\u5165\uff0f\u532f\u51fa",
"pad.toolbar.timeslider.title": "\u6642\u9593\u8ef8",
"pad.toolbar.savedRevision.title": "\u5132\u5b58\u4fee\u8a02",
"pad.toolbar.settings.title": "\u8a2d\u5b9a",
@ -33,7 +34,7 @@
"pad.settings.padSettings": "Pad\u8a2d\u5b9a",
"pad.settings.myView": "\u6211\u7684\u8996\u7a97",
"pad.settings.stickychat": "\u6c38\u9060\u5728\u5c4f\u5e55\u4e0a\u986f\u793a\u804a\u5929",
"pad.settings.colorcheck": "\u4f5c\u8005\u984f\u8272",
"pad.settings.colorcheck": "\u5354\u4f5c\u8005\u984f\u8272",
"pad.settings.linenocheck": "\u884c\u865f",
"pad.settings.rtlcheck": "\u5f9e\u53f3\u81f3\u5de6\u8b80\u53d6\u5167\u5bb9\uff1f",
"pad.settings.fontType": "\u5b57\u9ad4\u985e\u578b\uff1a",
@ -41,7 +42,7 @@
"pad.settings.fontType.monospaced": "\u7b49\u5bec",
"pad.settings.globalView": "\u6240\u6709\u4eba\u7684\u8996\u7a97",
"pad.settings.language": "\u8a9e\u8a00\uff1a",
"pad.importExport.import_export": "\u5c0e\u5165\uff0f\u532f\u51fa",
"pad.importExport.import_export": "\u532f\u5165\uff0f\u532f\u51fa",
"pad.importExport.import": "\u4e0a\u8f09\u4efb\u4f55\u6587\u5b57\u6a94\u6216\u6587\u6a94",
"pad.importExport.importSuccessful": "\u5b8c\u6210\uff01",
"pad.importExport.export": "\u532f\u51fa\u7576\u524dpad\u70ba\uff1a",
@ -62,13 +63,13 @@
"pad.modals.unauth.explanation": "\u60a8\u7684\u6b0a\u9650\u5728\u67e5\u770b\u6b64\u9801\u6642\u767c\u751f\u66f4\u6539\u3002\u8acb\u5617\u8a66\u91cd\u65b0\u9023\u63a5\u3002",
"pad.modals.looping": "\u5df2\u96e2\u7dda\u3002",
"pad.modals.looping.explanation": "\u8207\u540c\u6b65\u4f3a\u670d\u5668\u9593\u6709\u901a\u4fe1\u554f\u984c\u3002",
"pad.modals.looping.cause": "\u4e5f\u8a31\u60a8\u901a\u904e\u4e00\u500b\u4e0d\u76f8\u5bb9\u7684\u9632\u706b\u7246\u6216\u4ee3\u7406\u4f3a\u670d\u5668\u9023\u63a5\u3002",
"pad.modals.looping.cause": "\u4e5f\u8a31\u60a8\u662f\u901a\u904e\u4e0d\u76f8\u5bb9\u7684\u9632\u706b\u7246\u6216\u4ee3\u7406\u4f3a\u670d\u5668\u9023\u7dda\u3002",
"pad.modals.initsocketfail": "\u7121\u6cd5\u8a2a\u554f\u4f3a\u670d\u5668\u3002",
"pad.modals.initsocketfail.explanation": "\u7121\u6cd5\u9023\u63a5\u5230\u540c\u6b65\u4f3a\u670d\u5668\u3002",
"pad.modals.initsocketfail.cause": "\u53ef\u80fd\u662f\u7531\u65bc\u60a8\u7684\u700f\u89bd\u5668\u6216\u60a8\u7684\u4e92\u806f\u7db2\u9023\u63a5\u7684\u554f\u984c\u3002",
"pad.modals.initsocketfail.cause": "\u9019\u53ef\u80fd\u662f\u56e0\u70ba\u700f\u89bd\u5668\u6216\u7db2\u969b\u7db2\u8def\u9023\u7dda\u554f\u984c\u6240\u9020\u6210\u3002",
"pad.modals.slowcommit": "\u5df2\u96e2\u7dda\u3002",
"pad.modals.slowcommit.explanation": "\u4f3a\u670d\u5668\u6c92\u6709\u56de\u61c9\u3002",
"pad.modals.slowcommit.cause": "\u53ef\u80fd\u662f\u7531\u65bc\u7db2\u8def\u9023\u63a5\u554f\u984c\u3002",
"pad.modals.slowcommit.cause": "\u9019\u53ef\u80fd\u662f\u56e0\u70ba\u7db2\u8def\u9023\u7dda\u554f\u984c\u6240\u9020\u6210\u3002",
"pad.modals.deleted": "\u5df2\u522a\u9664\u3002",
"pad.modals.deleted.explanation": "\u6b64pad\u5df2\u88ab\u79fb\u9664\u3002",
"pad.modals.disconnected": "\u60a8\u5df2\u4e2d\u65b7\u9023\u7dda\u3002",
@ -78,17 +79,17 @@
"pad.share.readonly": "\u552f\u8b80",
"pad.share.link": "\u9023\u7d50",
"pad.share.emebdcode": "\u5d4c\u5165\u7db2\u5740",
"pad.chat": "\u804a\u5929",
"pad.chat.title": "\u6253\u958b\u6b64pad\u7684\u804a\u5929\u3002",
"pad.chat": "\u804a\u5929\u529f\u80fd",
"pad.chat.title": "\u6253\u958bpad\u804a\u5929\u529f\u80fd",
"pad.chat.loadmessages": "\u8f09\u5165\u66f4\u591a\u8a0a\u606f",
"timeslider.pageTitle": "{{appTitle}}\u6642\u9593\u8ef8",
"timeslider.toolbar.returnbutton": "\u8fd4\u56de\u5230pad",
"timeslider.toolbar.authors": "\u4f5c\u8005\uff1a",
"timeslider.toolbar.authorsList": "\u7121\u4f5c\u8005",
"timeslider.toolbar.authors": "\u5354\u4f5c\u8005\uff1a",
"timeslider.toolbar.authorsList": "\u7121\u5354\u4f5c\u8005",
"timeslider.toolbar.exportlink.title": "\u532f\u51fa",
"timeslider.exportCurrent": "\u532f\u51fa\u7576\u524d\u7248\u672c\u70ba\uff1a",
"timeslider.version": "\u7248\u672c{{version}}",
"timeslider.saved": "{{year}}\u5e74{{month}}{{day}}\u65e5\u4fdd\u5b58",
"timeslider.saved": "{{year}}\u5e74{{month}}\u6708{{day}}\u65e5\u5132\u5b58",
"timeslider.dateformat": "{{year}}\u5e74{{month}}\u6708{{day}}\u65e5 {{hours}}:{{minutes}}:{{seconds}}",
"timeslider.month.january": "1\u6708",
"timeslider.month.february": "2\u6708",
@ -102,15 +103,15 @@
"timeslider.month.october": "10\u6708",
"timeslider.month.november": "11\u6708",
"timeslider.month.december": "12\u6708",
"timeslider.unnamedauthor": "{{num}} \u533f\u540d\u4f5c\u8005",
"timeslider.unnamedauthors": "{{num}} \u533f\u540d\u4f5c\u8005",
"pad.savedrevs.marked": "\u6b64\u4fee\u8a02\u5df2\u6a19\u8a18\u70ba\u5df2\u4fdd\u5b58\u3002",
"timeslider.unnamedauthor": "{{num}} \u533f\u540d\u5354\u4f5c\u8005",
"timeslider.unnamedauthors": "{{num}} \u533f\u540d\u5354\u4f5c\u8005",
"pad.savedrevs.marked": "\u6a19\u8a18\u6b64\u4fee\u8a02\u7248\u672c\u70ba\u5df2\u5132\u5b58\u4fee\u8a02\u7248\u672c\u3002",
"pad.userlist.entername": "\u8f38\u5165\u60a8\u7684\u59d3\u540d",
"pad.userlist.unnamed": "\u672a\u547d\u540d",
"pad.userlist.guest": "\u8a2a\u5ba2",
"pad.userlist.deny": "\u62d2\u7d55",
"pad.userlist.approve": "\u6279\u51c6",
"pad.editbar.clearcolors": "\u6e05\u9664\u6574\u500b\u6587\u6a94\u7684\u4f5c\u8005\u984f\u8272\u55ce\uff1f",
"pad.editbar.clearcolors": "\u6e05\u9664\u6574\u500b\u6587\u6a94\u7684\u5354\u4f5c\u8005\u984f\u8272\u5340\u5225\u55ce\uff1f",
"pad.impexp.importbutton": "\u73fe\u5728\u532f\u5165",
"pad.impexp.importing": "\u532f\u5165\u4e2d...",
"pad.impexp.confirmimport": "\u532f\u5165\u7684\u6a94\u6848\u5c07\u6703\u8986\u84cbpad\u5167\u76ee\u524d\u7684\u6587\u5b57\u3002\u60a8\u78ba\u5b9a\u8981\u7e7c\u7e8c\u55ce\uff1f",

View file

@ -35,6 +35,7 @@ var messageLogger = log4js.getLogger("message");
var accessLogger = log4js.getLogger("access");
var _ = require('underscore');
var hooks = require("ep_etherpad-lite/static/js/pluginfw/hooks.js");
var channels = require("channels");
/**
* A associative array that saves informations about a session
@ -48,6 +49,11 @@ var hooks = require("ep_etherpad-lite/static/js/pluginfw/hooks.js");
*/
var sessioninfos = {};
/**
* A changeset queue per pad that is processed by handleUserChanges()
*/
var padChannels = new channels.channels(handleUserChanges);
/**
* Saves the Socket class we need to send and recieve data from the client
*/
@ -176,7 +182,7 @@ exports.handleMessage = function(client, message)
if (sessioninfos[client.id].readonly) {
messageLogger.warn("Dropped message, COLLABROOM for readonly pad");
} else if (message.data.type == "USER_CHANGES") {
handleUserChanges(client, message);
padChannels.emit(message.padId, {client: client, message: message});// add to pad queue
} else if (message.data.type == "USERINFO_UPDATE") {
handleUserInfoUpdate(client, message);
} else if (message.data.type == "CHAT_MESSAGE") {
@ -224,22 +230,30 @@ exports.handleMessage = function(client, message)
// FIXME: Call our "sessions" "connections".
// FIXME: Use a hook instead
// FIXME: Allow to override readwrite access with readonly
var auth = sessioninfos[client.id].auth;
securityManager.checkAccess(auth.padID, auth.sessionID, auth.token, auth.password, function(err, statusObject)
{
if(ERR(err, callback)) return;
//access was granted
if(statusObject.accessStatus == "grant")
// FIXME: A message might arrive but wont have an auth object, this is obviously bad so we should deny it
// Simulate using the load testing tool
if(!sessioninfos[client.id].auth){
console.error("Auth was never applied to a session. If you are using the stress-test tool then restart Etherpad and the Stress test tool.")
callback();
}else{
var auth = sessioninfos[client.id].auth;
securityManager.checkAccess(auth.padID, auth.sessionID, auth.token, auth.password, function(err, statusObject)
{
callback();
}
//no access, send the client a message that tell him why
else
{
client.json.send({accessStatus: statusObject.accessStatus})
}
});
if(ERR(err, callback)) return;
//access was granted
if(statusObject.accessStatus == "grant")
{
callback();
}
//no access, send the client a message that tell him why
else
{
client.json.send({accessStatus: statusObject.accessStatus})
}
});
}
},
finalHandler
]);
@ -522,23 +536,26 @@ function handleUserInfoUpdate(client, message)
* @param client the client that send this message
* @param message the message from the client
*/
function handleUserChanges(client, message)
function handleUserChanges(data, cb)
{
var client = data.client
, message = data.message
// Make sure all required fields are present
if(message.data.baseRev == null)
{
messageLogger.warn("Dropped message, USER_CHANGES Message has no baseRev!");
return;
return cb();
}
if(message.data.apool == null)
{
messageLogger.warn("Dropped message, USER_CHANGES Message has no apool!");
return;
return cb();
}
if(message.data.changeset == null)
{
messageLogger.warn("Dropped message, USER_CHANGES Message has no changeset!");
return;
return cb();
}
//get all Vars we need
@ -675,10 +692,14 @@ function handleUserChanges(client, message)
pad.appendRevision(nlChangeset);
}
exports.updatePadClients(pad, callback);
exports.updatePadClients(pad, function(er) {
ERR(er)
});
callback();
}
], function(err)
{
cb();
ERR(err);
});
}

View file

@ -48,88 +48,56 @@ exports.addComponent = function(moduleName, module)
/**
* sets the socket.io and adds event functions for routing
*/
exports.setSocketIO = function(_socket)
{
exports.setSocketIO = function(_socket) {
//save this socket internaly
socket = _socket;
socket.sockets.on('connection', function(client)
{
socket.sockets.on('connection', function(client) {
client.set('remoteAddress', client.handshake.address.address);
var clientAuthorized = false;
//wrap the original send function to log the messages
client._send = client.send;
client.send = function(message)
{
client.send = function(message) {
messageLogger.debug("to " + client.id + ": " + stringifyWithoutPassword(message));
client._send(message);
}
//tell all components about this connect
for(var i in components)
{
for(var i in components) {
components[i].handleConnect(client);
}
//try to handle the message of this client
function handleMessage(message)
{
if(message.component && components[message.component])
{
//check if component is registered in the components array
if(components[message.component])
{
messageLogger.debug("from " + client.id + ": " + stringifyWithoutPassword(message));
components[message.component].handleMessage(client, message);
}
}
else
{
messageLogger.error("Can't route the message:" + stringifyWithoutPassword(message));
}
}
}
client.on('message', function(message)
{
if(message.protocolVersion && message.protocolVersion != 2)
{
if(message.protocolVersion && message.protocolVersion != 2) {
messageLogger.warn("Protocolversion header is not correct:" + stringifyWithoutPassword(message));
return;
}
//client is authorized, everything ok
if(clientAuthorized)
{
handleMessage(message);
}
//try to authorize the client
else
{
//this message has everything to try an authorization
if(message.padId !== undefined && message.sessionID !== undefined && message.token !== undefined && message.password !== undefined)
{
securityManager.checkAccess (message.padId, message.sessionID, message.token, message.password, function(err, statusObject)
{
ERR(err);
//access was granted, mark the client as authorized and handle the message
if(statusObject.accessStatus == "grant")
{
clientAuthorized = true;
handleMessage(message);
if(clientAuthorized) {
handleMessage(client, message);
} else { //try to authorize the client
if(message.padId !== undefined && message.sessionID !== undefined && message.token !== undefined && message.password !== undefined) {
//this message has everything to try an authorization
securityManager.checkAccess (message.padId, message.sessionID, message.token, message.password,
function(err, statusObject) {
ERR(err);
//access was granted, mark the client as authorized and handle the message
if(statusObject.accessStatus == "grant") {
clientAuthorized = true;
handleMessage(client, message);
}
//no access, send the client a message that tell him why
else {
messageLogger.warn("Authentication try failed:" + stringifyWithoutPassword(message));
client.json.send({accessStatus: statusObject.accessStatus});
}
}
//no access, send the client a message that tell him why
else
{
messageLogger.warn("Authentication try failed:" + stringifyWithoutPassword(message));
client.json.send({accessStatus: statusObject.accessStatus});
}
});
}
//drop message
else
{
);
} else { //drop message
messageLogger.warn("Dropped message cause of bad permissions:" + stringifyWithoutPassword(message));
}
}
@ -146,6 +114,21 @@ exports.setSocketIO = function(_socket)
});
}
//try to handle the message of this client
function handleMessage(client, message)
{
if(message.component && components[message.component]) {
//check if component is registered in the components array
if(components[message.component]) {
messageLogger.debug("from " + client.id + ": " + stringifyWithoutPassword(message));
components[message.component].handleMessage(client, message);
}
} else {
messageLogger.error("Can't route the message:" + stringifyWithoutPassword(message));
}
}
//returns a stringified representation of a message, removes the password
//this ensures there are no passwords in the log
function stringifyWithoutPassword(message)

View file

@ -23,7 +23,7 @@
"clean-css" : "0.3.2",
"uglify-js" : "1.2.5",
"formidable" : "1.0.9",
"log4js" : "0.5.x",
"log4js" : "0.6.6",
"nodemailer" : "0.3.x",
"jsdom-nocontextifiy" : "0.2.10",
"async-stacktrace" : "0.0.2",
@ -37,7 +37,8 @@
"underscore" : "1.3.1",
"unorm" : "1.0.0",
"languages4translatewiki" : "0.1.3",
"swagger-node-express" : "1.2.3"
"swagger-node-express" : "1.2.3",
"channels" : "0.0.x"
},
"bin": { "etherpad-lite": "./node/server.js" },
"devDependencies": {
@ -46,5 +47,5 @@
"engines" : { "node" : ">=0.6.3",
"npm" : ">=1.0"
},
"version" : "1.2.10"
"version" : "1.2.11"
}

View file

@ -2105,7 +2105,9 @@ exports.follow = function (cs1, cs2, reverseInsertOrder, pool) {
exports.copyOp(op2, opOut);
op2.opcode = '';
} else if (!op2.opcode) {
exports.copyOp(op1, opOut);
// @NOTE: Critical bugfix for EPL issue #1625. We do not copy op1 here
// in order to prevent attributes from leaking into result changesets.
// exports.copyOp(op1, opOut);
op1.opcode = '';
} else {
// both keeps

View file

@ -1,5 +1,5 @@
/**
* This code is mostly from the old Etherpad. Please help us to comment this code.
* This code is mostly from the old Etherpad. Please help us to comment this code.
* This helps other people to understand this code better and helps them to improve it.
* TL;DR COMMENTS ON THIS FILE ARE HIGHLY APPRECIATED
*/
@ -86,7 +86,7 @@ function Ace2Editor()
});
actionsPendingInit = [];
}
ace2.registry[info.id] = info;
// The following functions (prefixed by 'ace_') are exposed by editor, but
@ -97,7 +97,7 @@ function Ace2Editor()
'applyChangesToBase', 'applyPreparedChangesetToBase',
'setUserChangeNotificationCallback', 'setAuthorInfo',
'setAuthorSelectionRange', 'callWithAce', 'execCommand', 'replaceRange'];
_.each(aceFunctionsPendingInit, function(fnName,i){
var prefix = 'ace_';
var name = prefix + fnName;
@ -105,18 +105,18 @@ function Ace2Editor()
info[prefix + fnName].apply(this, arguments);
});
});
editor.exportText = function()
{
if (!loaded) return "(awaiting init)\n";
return info.ace_exportText();
};
editor.getFrame = function()
{
return info.frame || null;
};
editor.getDebugProperty = function(prop)
{
return info.ace_getDebugProperty(prop);
@ -221,16 +221,16 @@ function Ace2Editor()
// calls to these functions ($$INCLUDE_...) are replaced when this file is processed
// and compressed, putting the compressed code from the named file directly into the
// source here.
// these lines must conform to a specific format because they are passed by the build script:
// these lines must conform to a specific format because they are passed by the build script:
var includedCSS = [];
var $$INCLUDE_CSS = function(filename) {includedCSS.push(filename)};
$$INCLUDE_CSS("../static/css/iframe_editor.css");
$$INCLUDE_CSS("../static/css/pad.css");
$$INCLUDE_CSS("../static/custom/pad.css");
var additionalCSS = _(hooks.callAll("aceEditorCSS")).map(function(path){ return '../static/plugins/' + path });
includedCSS = includedCSS.concat(additionalCSS);
pushStyleTagsFor(iframeHTML, includedCSS);
if (!Ace2Editor.EMBEDED && Ace2Editor.EMBEDED[KERNEL_SOURCE]) {
@ -304,16 +304,16 @@ window.onload = function () {\n\
$$INCLUDE_CSS("../static/css/iframe_editor.css");
$$INCLUDE_CSS("../static/css/pad.css");
$$INCLUDE_CSS("../static/custom/pad.css");
var additionalCSS = _(hooks.callAll("aceEditorCSS")).map(function(path){ return '../static/plugins/' + path });
includedCSS = includedCSS.concat(additionalCSS);
pushStyleTagsFor(outerHTML, includedCSS);
// bizarrely, in FF2, a file with no "external" dependencies won't finish loading properly
// (throbs busy while typing)
outerHTML.push('<link rel="stylesheet" type="text/css" href="data:text/css,"/>', scriptTag(outerScript), '</head><body id="outerdocbody"><div id="sidediv"><!-- --></div><div id="linemetricsdiv">x</div><div id="overlaysdiv"><!-- --></div></body></html>');
outerHTML.push('<style type="text/css" title="dynamicsyntax"></style>', '<link rel="stylesheet" type="text/css" href="data:text/css,"/>', scriptTag(outerScript), '</head><body id="outerdocbody"><div id="sidediv"><!-- --></div><div id="linemetricsdiv">x</div><div id="overlaysdiv"><!-- --></div></body></html>');
var outerFrame = document.createElement("IFRAME");
outerFrame.name = "ace_outer";

View file

@ -1,5 +1,5 @@
/**
* This code is mostly from the old Etherpad. Please help us to comment this code.
* This code is mostly from the old Etherpad. Please help us to comment this code.
* This helps other people to understand this code better and helps them to improve it.
* TL;DR COMMENTS ON THIS FILE ARE HIGHLY APPRECIATED
*/
@ -36,10 +36,10 @@ var isNodeText = Ace2Common.isNodeText,
htmlPrettyEscape = Ace2Common.htmlPrettyEscape,
noop = Ace2Common.noop;
var hooks = require('./pluginfw/hooks');
function Ace2Inner(){
var makeChangesetTracker = require('./changesettracker').makeChangesetTracker;
var colorutils = require('./colorutils').colorutils;
var makeContentCollector = require('./contentcollector').makeContentCollector;
@ -53,9 +53,9 @@ function Ace2Inner(){
var undoModule = require('./undomodule').undoModule;
var makeVirtualLineView = require('./virtual_lines').makeVirtualLineView;
var AttributeManager = require('./AttributeManager');
var DEBUG = false; //$$ build script replaces the string "var DEBUG=true;//$$" with "var DEBUG=false;"
// changed to false
// changed to false
var isSetUp = false;
var THE_TAB = ' '; //4
@ -83,9 +83,9 @@ function Ace2Inner(){
initLineNumbers();
var outsideKeyDown = noop;
var outsideKeyPress = function(){return true;};
var outsideNotifyDirty = noop;
// selFocusAtStart -- determines whether the selection extends "backwards", so that the focus
@ -101,7 +101,7 @@ function Ace2Inner(){
alines: [],
apool: new AttribPool()
};
// lines, alltext, alines, and DOM are set up in setup()
if (undoModule.enabled)
{
@ -113,7 +113,7 @@ function Ace2Inner(){
var doesWrap = true;
var hasLineNumbers = true;
var isStyled = true;
// space around the innermost iframe element
var iframePadLeft = MIN_LINEDIV_WIDTH + LINE_NUMBER_PADDING_RIGHT + EDIT_BODY_PADDING_LEFT;
var iframePadTop = EDIT_BODY_PADDING_TOP;
@ -122,7 +122,7 @@ function Ace2Inner(){
var console = (DEBUG && window.console);
var documentAttributeManager;
if (!window.console)
{
var names = ["log", "debug", "info", "warn", "error", "assert", "dir", "dirxml", "group", "groupEnd", "time", "timeEnd", "count", "trace", "profile", "profileEnd"];
@ -159,7 +159,7 @@ function Ace2Inner(){
var textFace = 'monospace';
var textSize = 12;
function textLineHeight()
{
@ -167,12 +167,14 @@ function Ace2Inner(){
}
var dynamicCSS = null;
var outerDynamicCSS = null;
var parentDynamicCSS = null;
function initDynamicCSS()
{
dynamicCSS = makeCSSManager("dynamicsyntax");
parentDynamicCSS = makeCSSManager("dynamicsyntax", true);
outerDynamicCSS = makeCSSManager("dynamicsyntax", "outer");
parentDynamicCSS = makeCSSManager("dynamicsyntax", "parent");
}
var changesetTracker = makeChangesetTracker(scheduler, rep.apool, {
@ -208,6 +210,72 @@ function Ace2Inner(){
};
editorInfo.ace_getAuthorInfos= getAuthorInfos;
function setAuthorStyle(author, info)
{
if (!dynamicCSS) {
return;
}
var authorSelector = getAuthorColorClassSelector(getAuthorClassName(author));
var authorStyleSet = hooks.callAll('aceSetAuthorStyle', {
dynamicCSS: dynamicCSS,
parentDynamicCSS: parentDynamicCSS,
outerDynamicCSS: outerDynamicCSS,
info: info,
author: author,
authorSelector: authorSelector,
});
// Prevent default behaviour if any hook says so
if (_.any(authorStyleSet, function(it) { return it }))
{
return
}
if (!info)
{
dynamicCSS.removeSelectorStyle(authorSelector);
parentDynamicCSS.removeSelectorStyle(authorSelector);
}
else
{
if (info.bgcolor)
{
var bgcolor = info.bgcolor;
if ((typeof info.fade) == "number")
{
bgcolor = fadeColor(bgcolor, info.fade);
}
var authorStyle = dynamicCSS.selectorStyle(authorSelector);
var parentAuthorStyle = parentDynamicCSS.selectorStyle(authorSelector);
var anchorStyle = dynamicCSS.selectorStyle(authorSelector + ' > 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
if(colorutils.luminosity(colorutils.css2triple(bgcolor)) < 0.55)
{
anchorStyle.color = colorutils.triple2css(colorutils.complementary(colorutils.css2triple(bgcolor)));
}else{
anchorStyle.color = null;
}
}
}
}
function setAuthorInfo(author, info)
{
if ((typeof author) != "string")
@ -217,56 +285,12 @@ function Ace2Inner(){
if (!info)
{
delete authorInfos[author];
if (dynamicCSS)
{
dynamicCSS.removeSelectorStyle(getAuthorColorClassSelector(getAuthorClassName(author)));
parentDynamicCSS.removeSelectorStyle(getAuthorColorClassSelector(getAuthorClassName(author)));
}
}
else
{
authorInfos[author] = info;
if (info.bgcolor)
{
if (dynamicCSS)
{
var bgcolor = info.bgcolor;
if ((typeof info.fade) == "number")
{
bgcolor = fadeColor(bgcolor, info.fade);
}
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
if(colorutils.luminosity(colorutils.css2triple(bgcolor)) < 0.55)
{
anchorStyle.color = colorutils.triple2css(colorutils.complementary(colorutils.css2triple(bgcolor)));
}else{
anchorStyle.color = null;
}
}
}
}
setAuthorStyle(author, info);
}
function getAuthorClassName(author)
@ -541,8 +565,8 @@ function Ace2Inner(){
{
return rep.lines.atOffset(charOffset).key;
}
function dispose()
{
disposed = true;
@ -897,14 +921,14 @@ function Ace2Inner(){
editorInfo.ace_doReturnKey = doReturnKey;
editorInfo.ace_isBlockElement = isBlockElement;
editorInfo.ace_getLineListType = getLineListType;
editorInfo.ace_callWithAce = function(fn, callStack, normalize)
{
var wrapper = function()
{
return fn(editorInfo);
};
if (normalize !== undefined)
{
var wrapper1 = wrapper;
@ -930,14 +954,14 @@ function Ace2Inner(){
// @param value the value to set to
editorInfo.ace_setProperty = function(key, value)
{
// Convinience function returning a setter for a class on an element
// Convinience function returning a setter for a class on an element
var setClassPresenceNamed = function(element, cls){
return function(value){
setClassPresence(element, cls, !! value)
}
};
// These properties are exposed
var setters = {
wraps: setWraps,
@ -952,7 +976,7 @@ function Ace2Inner(){
},
grayedout: setClassPresenceNamed(outerWin.document.body, "grayedout"),
dmesg: function(){ dmesg = window.dmesg = value; },
userauthor: function(value){
userauthor: function(value){
thisAuthor = String(value);
documentAttributeManager.author = thisAuthor;
},
@ -965,10 +989,10 @@ function Ace2Inner(){
document.documentElement.dir = value? 'rtl' : 'ltr'
}
};
var setter = setters[key.toLowerCase()];
// check if setter is present
// check if setter is present
if(setter !== undefined){
setter(value)
}
@ -1077,7 +1101,7 @@ function Ace2Inner(){
return false;
}
};
isTimeUp.elapsed = function()
{
return now() - startTime;
@ -1458,7 +1482,7 @@ function Ace2Inner(){
var p = PROFILER("getSelection", false);
var selection = getSelection();
p.end();
function topLevel(n)
{
if ((!n) || n == root) return null;
@ -1468,7 +1492,7 @@ function Ace2Inner(){
}
return n;
}
if (selection)
{
var node1 = topLevel(selection.startPoint.node);
@ -1726,7 +1750,7 @@ function Ace2Inner(){
root:root,
point:selection.startPoint,
documentAttributeManager: documentAttributeManager
});
});
selStart = (selStartFromHook==null||selStartFromHook.length==0)?getLineAndCharForPoint(selection.startPoint):selStartFromHook;
}
if (selection && !selEnd)
@ -1739,7 +1763,7 @@ function Ace2Inner(){
point:selection.endPoint,
documentAttributeManager: documentAttributeManager
});
selEnd = (selEndFromHook==null||selEndFromHook.length==0)?getLineAndCharForPoint(selection.endPoint):selEndFromHook;
selEnd = (selEndFromHook==null||selEndFromHook.length==0)?getLineAndCharForPoint(selection.endPoint):selEndFromHook;
}
// selection from content collection can, in various ways, extend past final
@ -1760,7 +1784,7 @@ function Ace2Inner(){
// update rep if we have a new selection
// NOTE: IE loses the selection when you click stuff in e.g. the
// editbar, so removing the selection when it's lost is not a good
// idea.
// idea.
if (selection) repSelectionChange(selStart, selEnd, selection && selection.focusAtStart);
// update browser selection
p.mark("browsel");
@ -1895,19 +1919,19 @@ function Ace2Inner(){
return rep.selStart[0];
}
editorInfo.ace_caretLine = caretLine;
function caretColumn()
{
return rep.selStart[1];
}
editorInfo.ace_caretColumn = caretColumn;
function caretDocChar()
{
return rep.lines.offsetOfIndex(caretLine()) + caretColumn();
}
editorInfo.ace_caretDocChar = caretDocChar;
function handleReturnIndentation()
{
// on return, indent to level of previous line
@ -2336,8 +2360,8 @@ function Ace2Inner(){
documentAttributeManager.setAttributesOnRange(lineAndColumnFromChar(start), lineAndColumnFromChar(end), attribs);
}
editorInfo.ace_performDocumentApplyAttributesToCharRange = performDocumentApplyAttributesToCharRange;
function setAttributeOnSelection(attributeName, attributeValue)
{
if (!(rep.selStart && rep.selEnd)) return;
@ -2900,7 +2924,7 @@ function Ace2Inner(){
{
if (lineClass !== null) lineElem.className = lineClass;
};
result.prepareForAdd = writeClass;
result.finishUpdate = writeClass;
result.getInnerHTML = function()
@ -3262,7 +3286,7 @@ function Ace2Inner(){
{
return (n.tagName || '').toLowerCase() == "a" && n.href;
}
// only want to catch left-click
if ((!evt.ctrlKey) && (evt.button != 2) && (evt.button != 3))
{
@ -3298,7 +3322,7 @@ function Ace2Inner(){
{
return;
}
var lineNum = rep.selStart[0];
var listType = getLineListType(lineNum);
@ -3423,9 +3447,9 @@ function Ace2Inner(){
var thisLineListType = getLineListType(theLine);
var prevLineEntry = (theLine > 0 && rep.lines.atIndex(theLine - 1));
var prevLineBlank = (prevLineEntry && prevLineEntry.text.length == prevLineEntry.lineMarker);
var thisLineHasMarker = documentAttributeManager.lineHasMarker(theLine);
if (thisLineListType)
{
// this line is a list
@ -3500,7 +3524,7 @@ function Ace2Inner(){
return !!REGEX_WORDCHAR.exec(c);
}
editorInfo.ace_isWordChar = isWordChar;
function isSpaceChar(c)
{
return !!REGEX_SPACE.exec(c);
@ -4130,7 +4154,7 @@ function Ace2Inner(){
maxIndex: tn.nodeValue.length
};
};
var selection = {};
if (origSelectionRange.compareEndPoints("StartToEnd", origSelectionRange) === 0)
{
@ -4234,7 +4258,7 @@ function Ace2Inner(){
selection.startPoint = pointFromRangeBound(range.startContainer, range.startOffset);
selection.endPoint = pointFromRangeBound(range.endContainer, range.endOffset);
selection.focusAtStart = (((range.startContainer != range.endContainer) || (range.startOffset != range.endOffset)) && browserSelection.anchorNode && (browserSelection.anchorNode == range.endContainer) && (browserSelection.anchorOffset == range.endOffset));
if(selection.startPoint.node.ownerDocument !== window.document){
return null;
}
@ -4999,9 +5023,9 @@ function Ace2Inner(){
}
}
}
var listAttributeName = 'list';
function getLineListType(lineNum)
{
return documentAttributeManager.getAttributeOnLine(lineNum, listAttributeName)
@ -5014,7 +5038,7 @@ function Ace2Inner(){
}else{
documentAttributeManager.setAttributeOnLine(lineNum, listAttributeName, listType);
}
//if the list has been removed, it is necessary to renumber
//starting from the *next* line because the list may have been
//separated. If it returns null, it means that the list was not cut, try
@ -5024,7 +5048,7 @@ function Ace2Inner(){
renumberList(lineNum);
}
}
function renumberList(lineNum){
//1-check we are in a list
var type = getLineListType(lineNum);
@ -5037,7 +5061,7 @@ function Ace2Inner(){
{
return null;
}
//2-find the first line of the list
while(lineNum-1 >= 0 && (type=getLineListType(lineNum-1)))
{
@ -5046,7 +5070,7 @@ function Ace2Inner(){
break;
lineNum--;
}
//3-renumber every list item of the same level from the beginning, level 1
//IMPORTANT: never skip a level because there imbrication may be arbitrary
var builder = Changeset.builder(rep.lines.totalWidth());
@ -5073,7 +5097,7 @@ function Ace2Inner(){
ChangesetUtils.buildKeepRange(rep, builder, loc, (loc = [line, 1]), [
['start', position]
], rep.apool);
position++;
line++;
}
@ -5088,19 +5112,19 @@ function Ace2Inner(){
}
return line;
}
applyNumberList(lineNum, 1);
var cs = builder.toString();
if (!Changeset.isIdentity(cs))
{
performDocumentApplyChangeset(cs);
}
//4-apply the modifications
}
function doInsertList(type)
{
@ -5138,7 +5162,7 @@ function Ace2Inner(){
var t = getLineListType(n);
mods.push([n, allLinesAreList ? 'indent' + level : (t ? type + level : type + '1')]);
}
_.each(mods, function(mod){
setLineListType(mod[0], mod[1]);
});
@ -5152,7 +5176,7 @@ function Ace2Inner(){
}
editorInfo.ace_doInsertUnorderedList = doInsertUnorderedList;
editorInfo.ace_doInsertOrderedList = doInsertOrderedList;
var lineNumbersShown;
var sideDivInner;
@ -5168,11 +5192,11 @@ function Ace2Inner(){
var newNumLines = rep.lines.length();
if (newNumLines < 1) newNumLines = 1;
//update height of all current line numbers
var a = sideDivInner.firstChild;
var b = doc.body.firstChild;
var n = 0;
if (currentCallStack && currentCallStack.domClean)
{
@ -5201,8 +5225,8 @@ function Ace2Inner(){
b = b.nextSibling;
n++;
}
}
}
if (newNumLines != lineNumbersShown)
{
var container = sideDivInner;
@ -5212,27 +5236,27 @@ function Ace2Inner(){
{
lineNumbersShown++;
var n = lineNumbersShown;
var div = odoc.createElement("DIV");
var div = odoc.createElement("DIV");
//calculate height for new line number
if(b){
var h = (b.clientHeight || b.offsetHeight);
if (b.nextSibling){
h = b.nextSibling.offsetTop - b.offsetTop;
}
}
if(h){ // apply style to div
div.style.height = h +"px";
}
div.appendChild(odoc.createTextNode(String(n)));
fragment.appendChild(div);
if(b){
b = b.nextSibling;
}
}
container.appendChild(fragment);
while (lineNumbersShown > newNumLines)
{
@ -5241,8 +5265,8 @@ function Ace2Inner(){
}
}
}
// Init documentAttributeManager
documentAttributeManager = new AttributeManager(rep, performDocumentApplyChangeset);
editorInfo.ace_performDocumentApplyAttributesToRange = function () {
@ -5288,13 +5312,13 @@ function Ace2Inner(){
bindTheEventHandlers();
});
hooks.callAll('aceInitialized', {
editorInfo: editorInfo,
rep: rep,
documentAttributeManager: documentAttributeManager
});
scheduler.setTimeout(function()
{
parent.readyFunc(); // defined in code that sets up the inner iframe

View file

@ -57,6 +57,7 @@ function makeChangesetTracker(scheduler, apool, aceCallbacksProvider)
{
changeCallback();
}
catch(pseudoError) {}
finally
{
changeCallbackTimeout = null;
@ -161,21 +162,32 @@ function makeChangesetTracker(scheduler, apool, aceCallbacksProvider)
}
else
{
// add forEach function to Array.prototype for IE8
if (!('forEach' in Array.prototype)) {
Array.prototype.forEach= function(action, that /*opt*/) {
for (var i= 0, n= this.length; i<n; i++)
if (i in this)
action.call(that, this[i], i, this);
};
}
// Get my authorID
var authorId = parent.parent.pad.myUserInfo.userId;
// Rewrite apool authors with my author information
// We need to replace all new author attribs with thisSession.author, in case someone copy/pasted or otherwise inserted other peoples changes
// Sanitize authorship
// We need to replace all author attribs with thisSession.author, in case they copy/pasted or otherwise inserted other peoples changes
if(apool.numToAttrib){
for (var attr in apool.numToAttrib){
if (apool.numToAttrib[attr][0] == 'author' && apool.numToAttrib[attr][1] == authorId) authorAttr = attr
if (apool.numToAttrib[attr][0] == 'author' && apool.numToAttrib[attr][1] == authorId) authorAttr = Number(attr).toString(36)
}
// Replace all added 'author' attribs with the value of the current user
var cs = Changeset.unpack(userChangeset)
, iterator = Changeset.opIterator(cs.ops)
, op
, assem = Changeset.mergingOpAssembler();
while(iterator.hasNext()) {
op = iterator.next()
if(op.opcode == '+') {
@ -183,13 +195,13 @@ function makeChangesetTracker(scheduler, apool, aceCallbacksProvider)
op.attribs.split('*').forEach(function(attrNum) {
if(!attrNum) return
attr = apool.getAttrib(attrNum)
var attr = apool.getAttrib(parseInt(attrNum, 36))
if(!attr) return
if('author' == attr[0] && !~newAttrs.indexOf(authorAttr)) {
if('author' == attr[0]) {
// replace that author with the current one
newAttrs += '*'+authorAttr;
// console.log('replacing author attribute ', attrNum, '(', attr[1], ') with', authorAttr)
}
else newAttrs += '*'+attrNum
else newAttrs += '*'+attrNum // overtake all other attribs as is
})
op.attribs = newAttrs
}

View file

@ -311,7 +311,6 @@ function makeContentCollector(collectStyles, browser, apool, domInterface, class
['insertorder', 'first']
].concat(
_.map(state.lineAttributes,function(value,key){
if (typeof(window)!= 'undefined' && window.console) console.log([key, value])
return [key, value];
})
);

View file

@ -1,5 +1,5 @@
/**
* This code is mostly from the old Etherpad. Please help us to comment this code.
* This code is mostly from the old Etherpad. Please help us to comment this code.
* This helps other people to understand this code better and helps them to improve it.
* TL;DR COMMENTS ON THIS FILE ARE HIGHLY APPRECIATED
*/
@ -20,14 +20,32 @@
* limitations under the License.
*/
function makeCSSManager(emptyStylesheetTitle, parentCss)
function makeCSSManager(emptyStylesheetTitle, doc)
{
if (doc === true)
{
doc = 'parent';
} else if (!doc) {
doc = 'inner';
}
function getSheetByTitle(title)
{
if (parentCss) var allSheets = window.parent.parent.document.styleSheets;
else var allSheets = document.styleSheets;
if (doc === 'parent')
{
win = window.parent.parent;
}
else if (doc === 'inner') {
win = window;
}
else if (doc === 'outer') {
win = window.parent;
}
else {
throw "Unknown dynamic style container";
}
var allSheets = win.document.styleSheets;
for (var i = 0; i < allSheets.length; i++)
{
var s = allSheets[i];
@ -38,8 +56,8 @@ function makeCSSManager(emptyStylesheetTitle, parentCss)
}
return null;
}
var browserSheet = getSheetByTitle(emptyStylesheetTitle, parentCss);
var browserSheet = getSheetByTitle(emptyStylesheetTitle);
function browserRules()
{

View file

@ -79,6 +79,15 @@ window.html10n = (function(window, document, undefined) {
return -1;
}
}
// fix Array.prototype.forEach in IE
if (!('forEach' in Array.prototype)) {
Array.prototype.forEach= function(action, that /*opt*/) {
for (var i= 0, n= this.length; i<n; i++)
if (i in this)
action.call(that, this[i], i, this);
};
}
/**
* MicroEvent - to make any js object an event emitter (server or browser)

View file

@ -260,7 +260,7 @@ linestylefilter.getRegexpFilter = function(regExp, tag)
linestylefilter.REGEX_WORDCHAR = /[\u0030-\u0039\u0041-\u005A\u0061-\u007A\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u00FF\u0100-\u1FFF\u3040-\u9FFF\uF900-\uFDFF\uFE70-\uFEFE\uFF10-\uFF19\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFDC]/;
linestylefilter.REGEX_URLCHAR = new RegExp('(' + /[-:@a-zA-Z0-9_.,~%+\/\\?=&#!;()$]/.source + '|' + linestylefilter.REGEX_WORDCHAR.source + ')');
linestylefilter.REGEX_URL = new RegExp(/(?:(?:https?|s?ftp|ftps|file|smb|afp|nfs|(x-)?man|gopher|txmt):\/\/|mailto:|www\.)/.source + linestylefilter.REGEX_URLCHAR.source + '*(?![:.,;])' + linestylefilter.REGEX_URLCHAR.source, 'g');
linestylefilter.REGEX_URL = new RegExp(/(?:(?:https?|s?ftp|ftps|file|nfs):\/\/|mailto:|www\.)/.source + linestylefilter.REGEX_URLCHAR.source + '*(?![:.,;])' + linestylefilter.REGEX_URLCHAR.source, 'g');
linestylefilter.getURLFilter = linestylefilter.getRegexpFilter(
linestylefilter.REGEX_URL, 'url');

View file

@ -463,7 +463,7 @@ var pad = {
{
try
{
doc.execCommand("BackgroundImageCache", false, true);
document.execCommand("BackgroundImageCache", false, true);
}
catch (e)
{}

View file

@ -176,7 +176,7 @@ var padutils = {
// copied from ACE
var _REGEX_WORDCHAR = /[\u0030-\u0039\u0041-\u005A\u0061-\u007A\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u00FF\u0100-\u1FFF\u3040-\u9FFF\uF900-\uFDFF\uFE70-\uFEFE\uFF10-\uFF19\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFDC]/;
var _REGEX_URLCHAR = new RegExp('(' + /[-:@a-zA-Z0-9_.,~%+\/?=&#;()$]/.source + '|' + _REGEX_WORDCHAR.source + ')');
var _REGEX_URL = new RegExp(/(?:(?:https?|s?ftp|ftps|file|smb|afp|nfs|(x-)?man|gopher|txmt):\/\/|mailto:)/.source + _REGEX_URLCHAR.source + '*(?![:.,;])' + _REGEX_URLCHAR.source, 'g');
var _REGEX_URL = new RegExp(/(?:(?:https?|s?ftp|ftps|file|nfs):\/\/|mailto:)/.source + _REGEX_URLCHAR.source + '*(?![:.,;])' + _REGEX_URLCHAR.source, 'g');
// returns null if no URLs, or [[startIndex1, url1], [startIndex2, url2], ...]

View file

@ -6,7 +6,7 @@ var config = {
host: "ondemand.saucelabs.com"
, port: 80
, username: process.env.SAUCE_USER
, accessKey: process.env.SAUCE_KEY
, accessKey: process.env.SAUCE_ACCESS_KEY
}
var allTestsPassed = true;

View file

@ -4,7 +4,7 @@ curl http://saucelabs.com/downloads/Sauce-Connect-latest.zip > /tmp/sauce.zip
unzip /tmp/sauce.zip -d /tmp
# start the sauce connector in background and make sure it doesn't output the secret key
(java -jar /tmp/Sauce-Connect.jar $SAUCE_USER $SAUCE_KEY -f /tmp/tunnel > /dev/null )&
(java -jar /tmp/Sauce-Connect.jar $SAUCE_USERNAME $SAUCE_ACCESS_KEY -f /tmp/tunnel > /dev/null )&
# save the sauce pid in a file
echo $! > /tmp/sauce.pid