summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--.eslintrc.json7
-rw-r--r--.gitignore2
-rw-r--r--.gitmodules3
-rw-r--r--.meteor/packages3
-rw-r--r--.meteor/versions1
-rw-r--r--.travis.yml21
-rw-r--r--.tx/config2
-rw-r--r--[-rwxr-xr-x]CHANGELOG.md245
-rw-r--r--Contributing.md61
-rw-r--r--Dockerfile104
-rw-r--r--README.md203
-rwxr-xr-xapp.env3
-rw-r--r--app.json2
-rw-r--r--client/components/activities/activities.jade14
-rw-r--r--client/components/activities/activities.js4
-rw-r--r--client/components/activities/activities.styl8
-rw-r--r--client/components/boards/boardBody.jade2
-rw-r--r--client/components/boards/boardBody.js6
-rw-r--r--client/components/boards/boardHeader.jade8
-rw-r--r--client/components/boards/boardHeader.js32
-rw-r--r--client/components/cards/cardDate.jade26
-rw-r--r--client/components/cards/cardDate.js234
-rw-r--r--client/components/cards/cardDate.styl58
-rw-r--r--client/components/cards/cardDetails.jade58
-rw-r--r--client/components/cards/cardDetails.js13
-rw-r--r--client/components/cards/cardDetails.styl7
-rw-r--r--client/components/cards/checklists.jade71
-rw-r--r--client/components/cards/checklists.js99
-rw-r--r--client/components/cards/checklists.styl68
-rw-r--r--client/components/cards/minicard.jade13
-rw-r--r--client/components/cards/minicard.styl22
-rw-r--r--client/components/lists/list.js6
-rw-r--r--client/components/lists/listBody.jade2
-rw-r--r--client/components/lists/listBody.js7
-rw-r--r--client/components/lists/listHeader.jade24
-rw-r--r--client/components/lists/listHeader.js14
-rw-r--r--client/components/main/header.js2
-rw-r--r--client/components/main/layouts.jade1
-rw-r--r--client/components/main/layouts.js2
-rw-r--r--client/components/main/layouts.styl10
-rw-r--r--client/components/settings/invitationCode.jade5
-rw-r--r--client/components/settings/invitationCode.js6
-rw-r--r--client/components/settings/settingBody.jade71
-rw-r--r--client/components/settings/settingBody.js128
-rw-r--r--client/components/settings/settingBody.styl112
-rw-r--r--client/components/settings/settingHeader.jade21
-rw-r--r--client/components/settings/settingHeader.styl25
-rw-r--r--client/components/sidebar/sidebar.jade43
-rw-r--r--client/components/sidebar/sidebar.js44
-rw-r--r--client/components/sidebar/sidebar.styl23
-rw-r--r--client/components/sidebar/sidebarFilters.jade13
-rw-r--r--client/components/users/userHeader.jade26
-rw-r--r--client/components/users/userHeader.js42
-rw-r--r--client/config/blazeHelpers.js4
-rw-r--r--client/lib/escapeActions.js2
-rw-r--r--client/lib/filter.js25
-rw-r--r--client/lib/i18n.js37
-rw-r--r--client/lib/utils.js2
-rw-r--r--config/accounts.js20
-rw-r--r--config/router.js20
-rw-r--r--docker-compose.yml74
-rw-r--r--[-rwxr-xr-x]i18n/ar.i18n.json100
-rw-r--r--i18n/br.i18n.json349
-rw-r--r--[-rwxr-xr-x]i18n/ca.i18n.json102
-rw-r--r--i18n/cs.i18n.json102
-rw-r--r--[-rwxr-xr-x]i18n/de.i18n.json294
-rw-r--r--[-rwxr-xr-x]i18n/en.i18n.json59
-rw-r--r--i18n/eo.i18n.json349
-rw-r--r--i18n/es-ES.i18n.json100
-rw-r--r--[-rwxr-xr-x]i18n/es.i18n.json182
-rw-r--r--i18n/fa.i18n.json349
-rw-r--r--[-rwxr-xr-x]i18n/fi.i18n.json136
-rw-r--r--[-rwxr-xr-x]i18n/fr.i18n.json212
-rw-r--r--i18n/he.i18n.json108
-rw-r--r--[-rwxr-xr-x]i18n/it.i18n.json476
-rw-r--r--[-rwxr-xr-x]i18n/ja.i18n.json276
-rw-r--r--[-rwxr-xr-x]i18n/ko.i18n.json384
-rw-r--r--i18n/no.i18n.json349
-rw-r--r--i18n/pl.i18n.json102
-rw-r--r--[-rwxr-xr-x]i18n/pt-BR.i18n.json100
-rw-r--r--i18n/ro.i18n.json349
-rw-r--r--[-rwxr-xr-x]i18n/ru.i18n.json123
-rw-r--r--i18n/sr.i18n.json349
-rw-r--r--i18n/th.i18n.json349
-rw-r--r--[-rwxr-xr-x]i18n/tr.i18n.json414
-rw-r--r--[-rwxr-xr-x]i18n/zh-CN.i18n.json142
-rw-r--r--i18n/zh-TW.i18n.json112
-rw-r--r--meta/dwrensha-pgp-sigbin0 -> 430 bytes
-rw-r--r--meta/keyringbin3357 -> 4892 bytes
-rw-r--r--meta/screenshots/board-view.jpgbin33060 -> 0 bytes
-rwxr-xr-xmeta/screenshots/board_view_01.pngbin0 -> 129922 bytes
-rwxr-xr-xmeta/screenshots/board_view_02.pngbin0 -> 111954 bytes
-rw-r--r--models/activities.js9
-rw-r--r--models/boards.js15
-rw-r--r--models/cardComments.js6
-rw-r--r--models/cards.js83
-rw-r--r--models/checklists.js168
-rw-r--r--models/import.js42
-rw-r--r--models/invitationCodes.js45
-rw-r--r--models/lists.js17
-rw-r--r--models/settings.js139
-rw-r--r--models/unsavedEdits.js3
-rw-r--r--models/users.js176
-rw-r--r--package.json8
m---------packages/kadira:flow-router0
-rw-r--r--sandstorm-pkgdef.capnp68
-rw-r--r--sandstorm.js305
-rw-r--r--server/lib/utils.js9
-rw-r--r--server/notifications/email.js20
-rw-r--r--server/publications/activities.js8
-rw-r--r--server/publications/boards.js35
-rw-r--r--server/publications/settings.js13
-rw-r--r--server/publications/users.js8
113 files changed, 8045 insertions, 1310 deletions
diff --git a/.eslintrc.json b/.eslintrc.json
index 87c2e2cf..416548eb 100644
--- a/.eslintrc.json
+++ b/.eslintrc.json
@@ -117,6 +117,11 @@
"Notifications": true,
"allowIsBoardAdmin": true,
"allowIsBoardMember": true,
- "Emoji": true
+ "allowIsBoardMemberByCard": true,
+ "allowIsBoardMemberNonComment": true,
+ "Emoji": true,
+ "Checklists": true,
+ "Settings": true,
+ "InvitationCodes": true
}
}
diff --git a/.gitignore b/.gitignore
index 564db75d..257d8a85 100644
--- a/.gitignore
+++ b/.gitignore
@@ -4,3 +4,5 @@
*.sublime-workspace
tmp/
node_modules/
+.vscode/
+.build/* \ No newline at end of file
diff --git a/.gitmodules b/.gitmodules
new file mode 100644
index 00000000..3db61f5f
--- /dev/null
+++ b/.gitmodules
@@ -0,0 +1,3 @@
+[submodule "packages/kadira:flow-router"]
+ path = packages/kadira:flow-router
+ url = https://github.com/wekan/flow-router.git
diff --git a/.meteor/packages b/.meteor/packages
index e57bdb19..7ede4008 100644
--- a/.meteor/packages
+++ b/.meteor/packages
@@ -50,7 +50,6 @@ arillo:flow-router-helpers
audit-argument-checks
kadira:blaze-layout
kadira:dochead
-kadira:flow-router
meteorhacks:fast-render
meteorhacks:picker
meteorhacks:subs-manager
@@ -75,3 +74,5 @@ seriousm:emoji-continued
templates:tabs
verron:autosize
simple:json-routes
+rajit:bootstrap3-datepicker
+kadira:flow-router
diff --git a/.meteor/versions b/.meteor/versions
index e1c0b9cf..4ca2f780 100644
--- a/.meteor/versions
+++ b/.meteor/versions
@@ -121,6 +121,7 @@ perak:markdown@1.0.5
promise@0.7.3
raix:eventemitter@0.1.3
raix:handlebar-helpers@0.2.5
+rajit:bootstrap3-datepicker@1.5.1
random@1.0.10
rate-limit@1.0.5
reactive-dict@1.1.8
diff --git a/.travis.yml b/.travis.yml
index a8724631..9a760beb 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -1,8 +1,25 @@
-sudo: false
+sudo: required
+
+env:
+ DOCKER_COMPOSE_VERSION: 1.11.2
+
+before_install:
+ - sudo curl -fsSL https://get.docker.com/ | sh
+ - if [ -e /usr/local/bin/docker-compose ]; then sudo rm /usr/local/bin/docker-compose; fi
+ - sudo curl -L https://github.com/docker/compose/releases/download/${DOCKER_COMPOSE_VERSION}/docker-compose-`uname -s`-`uname -m` > docker-compose
+ - sudo chmod +x docker-compose
+ - sudo mv docker-compose /usr/local/bin
+ - sudo docker-compose build --no-cache --force-rm
+ - sudo docker-compose up && docker ps -a
+ - sudo docker run wekan-app /bin/sh -c "npm test"
+
language: node_js
+
node_js:
- - "0.10.40"
+ - "0.10.48"
+
install:
- "npm install"
+
script:
- "npm test"
diff --git a/.tx/config b/.tx/config
index 9238fdd3..95855893 100644
--- a/.tx/config
+++ b/.tx/config
@@ -39,7 +39,7 @@ host = https://www.transifex.com
# tap:i18n requires us to use `-` separator in the language identifiers whereas
# Transifex uses a `_` separator, without an option to customize it on one side
# or the other, so we need to do a Manual mapping.
-lang_map = es_ES: es-ES, fi_FI:fi, pt_BR:pt-BR, zh_CN:zh-CN, zh_TW: zh-TW
+lang_map = es_ES:es-ES, fa_IR:fa, fi_FI:fi, hu_HU:hu, pt_BR:pt-BR, ro_RO:ro, zh_CN:zh-CN, zh_TW:zh-TW
[wekan.application]
file_filter = i18n/<lang>.i18n.json
diff --git a/CHANGELOG.md b/CHANGELOG.md
index fa4f3b02..a919cca7 100755..100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,4 +1,236 @@
-# v0.11
+# Upcoming Wekan release
+
+Known bugs:
+
+* https://github.com/wekan/wekan/issues/784
+
+This release adds the following new features:
+
+* [Comment permissions](https://github.com/wekan/wekan/issues/870);
+* Add bigger screenshots for Sandstorm.
+
+and fixes the following bugs:
+
+* Dockerfile fix for local packages;
+* Don't send emails if missing smtp host;
+* Remove invitation code if email sending failed;
+* Show customized error msg while invitaion code is wrong during registration;
+* Fix "internal error" while registration is done;
+* Fix "cannot access disableRegistration of undefined" error;
+* Add high available server for getting the gpg keys - suppose it should lead
+ to fewer failures on getting the gpg keys leading to some rare build failures;
+* Add a docker build to the .travis.yml - this will help determine if pull
+ requests need further review before merging into devel.
+
+Thanks to GitHub users JamborJan, lkisme, rhelsing, Serubi, stephenmoloney
+and Zokormazo for their contributions.
+
+# v0.17 2017-03-25 Wekan release
+
+Known bugs:
+
+* https://github.com/wekan/wekan/issues/784
+
+This release fixes the following bugs:
+
+* Double slash problem on card pop-ups;
+* No need for Array.prototype if using rest operator;
+* Fix default font so Chinese is shown correctly.
+ Still looking for better solution for #914 although
+ commit had wrong number #707.
+
+Thanks to GitHub users mo-han, Serubin and vuxor for
+their contributions.
+
+# v0.16 2017-03-15 Wekan release
+
+Added missing changelog updates.
+
+# v0.15 2017-03-15 Wekan release
+
+Updated translations.
+
+# v0.14 2017-03-15 Wekan release
+
+Known bugs:
+
+* https://github.com/wekan/wekan/issues/785
+* https://github.com/wekan/wekan/issues/784
+
+This release fixes the following bug:
+
+* Set IE compatibility mode to Edge to so that
+ Wekan board loads correctly.
+
+Thanks to GitHub users immertroll and REJack for
+their contributions.
+
+# v0.13 2017-03-12 Wekan release
+
+Known bugs:
+
+* https://github.com/wekan/wekan/issues/785
+* https://github.com/wekan/wekan/issues/784
+
+This release fixes the following bug:
+
+* Admin Panel: Set mail-from to environment immediately after changed,
+ allow user set a blank username and password pair in SMTP setting.
+
+Thanks to GitHub user lkisme for contributions.
+
+# v0.12 2017-03-05 Wekan release
+
+Known bugs:
+
+* https://github.com/wekan/wekan/issues/785
+* https://github.com/wekan/wekan/issues/784
+
+This release adds the following new features:
+
+* Import Checklists from Trello;
+* Simplified release numbers of Wekan.
+
+Thanks to GitHub users whodafly and xet7 for
+their contributions.
+
+# v0.11.1-rc2 2017-03-05 Wekan prerelease
+
+Known bugs:
+
+* https://github.com/wekan/wekan/issues/785
+* https://github.com/wekan/wekan/issues/784
+
+This release adds the following supported platforms:
+
+* [Docker environment for Wekan development](https://github.com/wekan/wekan-dev);
+* [Wekan <=> MongoDB <=> ToroDB => PostgreSQL read-only
+ mirroring](https://github.com/wekan/wekan-postgresql)
+ for SQL access with any programming language
+ or Office package that has PostgreSQL support, like
+ newest LibreOffice 3.5;
+* [Install from source on
+ Windows](https://github.com/wekan/wekan/wiki/Install-Wekan-from-source-on-Windows).
+
+and adds the following new features:
+
+* Admin Panel:
+```
+ 1) Disable Self-Registration and invite users
+ 2) SMTP settings.
+
+ Adding Admin user in mongo cli:
+ 1) Use database that has wekan data, for example:
+ use admin;
+ 2) Add Admin rights to some Wekan username:
+ db.users.update({username:'admin-username-here'},{$set:{isAdmin:true}})
+ Hiding Admin panel by removing Admin rights:
+ use admin;
+ db.settings.remove({});
+```
+* Make Due Date layout nicer on minicard;
+* Added tooltip for board menu and sidebar buttons;
+* [Wekan database cleanup script](https://github.com/wekan/wekan-cleanup);
+* [Daily export script of Wekan changes as JSON to Logstash and
+ ElasticSearch / Kibana (ELK)](https://github.com/wekan/wekan-logstash);
+* [Wekan stats script](https://github.com/wekan/wekan-stats).
+
+and fixes the following bugs:
+
+* Dockerfile was missing EXPOSE $PORT;
+* Bug when removing user from board that generate activity for
+ all cards of the board. Add check before user is one owner
+ of the card before adding activity;
+* All new boards are automatically starred. Fixed to
+ only star header-bar new-boards;
+* Orphan documents were created when cards were deleted;
+* Improve Wekan performance by adding indexes to MongoDB;
+* Invite user with lower case email;
+* Typos.
+
+Thanks to GitHub users eemeli, entrptaher, fmonthel, jLouzado, lkisme,
+maulal, pra85, vuxor, whittssg2 and xet7 for their contributions.
+
+# v0.11.1-rc1 2017-02-10 Wekan prerelease
+
+2017-01-29 mquandalle gave Wekan access to xet7,
+so at 2017-01-31 xet7 started merging Wefork back to Wekan.
+At 2017-02-03 all Wefork code and pull requests are now
+merged back to Wekan.
+
+Known bugs:
+* https://github.com/wekan/wekan/issues/785
+* https://github.com/wekan/wekan/issues/784
+
+This release adds the following supported platforms:
+
+* Docker;
+* Docker on SLES12SP1;
+* Install from source.
+
+and adds the following new features:
+
+* Checklists;
+* Remove a list;
+* Admin of board can leave board if he/she
+ is not last admin in the board;
+* Shortcuts popup, link to it on
+ bottom right corner;
+* Links are now underlined and change
+ link color on hover;
+* Added YuGothic and Meiryo fonts to show
+ non-English text correctly.
+
+and fixes the following bugs:
+
+* Update xss to v0.3.3;
+* Typos in boards.js and boardHeader.js;
+* Build warning in jade template;
+* New MongoDB version breaks uploading files
+ and avatars, so using older version;
+* Tweaked .gitignore to exclude .build/*;
+* Fix executeUpTo label when dragging cards,
+ popup was not in the predefined hierarchy.
+
+and adds the following new documentation:
+
+* Developer Documentation;
+* Docker;
+* and others.
+
+Thanks to GitHub users AlexanderR, BaobabCoder, jLouzado, kamijin-fanta,
+lkisme, mario-orlicky, martingabelmann, mquandalle, stephenmoloney,
+umbertooo, xet7 and qge for their contributions.
+
+# v0.11.0 2016-12-16 Wekan fork first release
+
+This release adds the following new features:
+
+* Start- and Duedate for cards;
+* Allow IE 11 to work;
+* Option to hide system messages in the card;
+* Option to setup minimum limit to show cards count
+ for each list in board;
+* Option 'filter by empty' to filter by cards by 'no member'
+ and 'no label' properties;
+* Speedup: Added MongoDB index on CardId into Comments collection.
+* Translation updates
+
+and fixes the following bugs:
+
+* Sandstorm: username handling, restore identity, eslint regressions,
+ board not found;
+* Failure to load when navigator.language is Chinese or Finnish;
+* Hover background for labels in filter sidebar. Now correctly
+ centered;
+* Display message when user wants to choose existing username;
+* Client sometimes fails to receive current user's profile;
+* Old users could see broken presence indicators on new users.
+
+Thanks to GitHub users dwrencha, fmonthel, mario-orlicky, pierreozoux,
+shoetten, and xet7 for their contributions.
+
+# v0.11.0-rc2 2016-07-21
This release adds the following new features:
@@ -10,6 +242,7 @@ This release adds the following new features:
* Add a warning indicator when the application is offline;
* A new log-in button on the public board view to sign in, even if the board
is published;
+* New link to the keyboard shortcuts in the board sidebar;
and fixes the following bugs:
@@ -27,25 +260,25 @@ and fixes the following bugs:
Thanks to GitHub users alayek, AlexanderS, choclin, floatinghotpot, ForNeVeR,
PeterDaveHello, seschwar, and TheElf for their contributions.
-# v0.10.1
+# v0.10.1 2015-12-30
This patch release fixes two bugs on Sandstorm:
* Drag and drop was broken;
* Avatars weren’t working.
-# v0.10
+# v0.10 2015-12-22
This release features:
* Trello boards importation, including card history, assigned members, labels,
comments, and attachments;
-* Invite new users to a board using a email address;
+* Invite new users to a board using an email address;
* Autocompletion in the minicard editor. Start with <kbd>@</kbd> to start a
board member autocompletion, or <kbd>#</kbd> for a label;
* Improve the user interface on small screens so that Wekan could be used on the
mobile web;
-* Accelerate the initial page rendering by sending the data on the intial HTTP
+* Accelerate the initial page rendering by sending the data on the initial HTTP
response instead of waiting for the DDP connection to open;
* Support images attachments copy pasting;
* On Sandstorm, expose the Wekan grain title and URL to the Sandstorm shell;
@@ -56,7 +289,7 @@ New languages supported: Arabic, Catalan, Italian, and Russian.
Thanks to GitHub users AlexanderS, fisle, floatinghotpot, FuzzyWuzzie, mnutt,
ndarilek, SirCmpwn, and xavierpriour for their contributions.
-# v0.9
+# v0.9 2015-09-10
This release is a large re-write of the previous code base. This release marks
the beginning of our new user interface and continues to improve the overall
diff --git a/Contributing.md b/Contributing.md
index a6da0cb0..82440260 100644
--- a/Contributing.md
+++ b/Contributing.md
@@ -1,62 +1,5 @@
# Contributing
-We’re glad you’re interested in helping the Wekan project! We welcome bug
-reports, enhancement ideas, and pull requests, in our GitHub bug tracker. Before
-opening a new thread please verify that your issue hasn’t already been reported.
+Please see wiki for all documentation:
-<https://github.com/wekan/wekan>
-
-## Security Disclosure
-
-Security is very important to us. If discover any issue regarding security,
-please disclose the information responsibly by sending an email to
-security@wekan.io and not by creating a GitHub issue.
-
-## Translations
-
-You are encouraged to translate (or improve the translation of) Wekan in your
-locale language. For that purpose we rely on
-[Transifex](https://www.transifex.com/projects/p/wekan). So the first step is to
-create a Transifex account if you don’t have one already. You can then send a
-request to join one of the translation teams. If there we will create a new one.
-
-Once you are in a team you can start translating the application. Please take a
-look at the glossary so you can agree with other (present and future)
-contributors on words to use to translate key concepts in the application like
-“boards” and “cards”.
-
-The original application is written in English, and if you want to contribute to
-the application itself, you are asked to fill the `i18n/en.i18n.json` file. When
-you do that the new strings of text to translate automatically appears on
-Transifex to be translated (the refresh may take a few hours).
-
-We pull all translations from Transifex before every new Wekan release
-candidate, ask the translators to review the app, and pull all translations
-again for the final release.
-
-## Installation
-
-Wekan is made with [Meteor](https://www.meteor.com). Thus the easiest way to
-start hacking is by installing the framework, cloning the git repository, and
-launching the application:
-
-```bash
-$ curl https://install.meteor.com/ | sh # On Mac or Linux
-$ git clone https://github.com/wekan/wekan.git
-$ cd wekan
-$ meteor
-```
-
-As for any Meteor application, Wekan is automatically refreshed when you change
-any file of the source code, just play with it to see how it behaves!
-
-## Style guide
-
-We follow the
-[meteor style guide](https://github.com/meteor/meteor/wiki/Meteor-Style-Guide).
-
-Please read the meteor style guide before making any significant contribution.
-
-## Code organisation
-
-TODO
+<https://github.com/wekan/wekan/wiki>
diff --git a/Dockerfile b/Dockerfile
index 591d8ca2..4d67e5ee 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -1,7 +1,99 @@
-FROM meteorhacks/meteord:onbuild
-MAINTAINER Maxime Quandalle <mquandalle@wekan.io>
+FROM debian:wheezy
+MAINTAINER wekan
-# Run as you wish!
-# docker run -d --name wekan-db mongo
-# docker run -d --link "wekan-db:db" -e "MONGO_URL=mongodb://db" \
-# -e "ROOT_URL=http://example.com" -p 8080:80 mquandalle/wekan
+# Declare Arguments
+ARG NODE_VERSION
+ARG METEOR_RELEASE
+ARG NPM_VERSION
+ARG ARCHITECTURE
+ARG SRC_PATH
+
+# Set the environment variables (defaults where required)
+ENV BUILD_DEPS="wget curl bzip2 build-essential python git ca-certificates"
+ENV GOSU_VERSION=1.10
+ENV NODE_VERSION ${NODE_VERSION:-v0.10.48}
+ENV METEOR_RELEASE ${METEOR_RELEASE:-1.3.5.1}
+ENV NPM_VERSION ${NPM_VERSION:-4.2.0}
+ENV ARCHITECTURE ${ARCHITECTURE:-linux-x64}
+ENV SRC_PATH ${SRC_PATH:-./}
+
+# Copy the app to the image
+COPY ${SRC_PATH} /home/wekan/app
+
+RUN \
+ # Add non-root user wekan
+ useradd --user-group --system --home-dir /home/wekan wekan && \
+ \
+ # OS dependencies
+ apt-get update -y && apt-get install -y --no-install-recommends ${BUILD_DEPS} && \
+ \
+ # Gosu installation
+ GOSU_ARCHITECTURE="$(dpkg --print-architecture | awk -F- '{ print $NF }')" && \
+ wget -O /usr/local/bin/gosu "https://github.com/tianon/gosu/releases/download/${GOSU_VERSION}/gosu-${GOSU_ARCHITECTURE}" && \
+ wget -O /usr/local/bin/gosu.asc "https://github.com/tianon/gosu/releases/download/${GOSU_VERSION}/gosu-${GOSU_ARCHITECTURE}.asc" && \
+ export GNUPGHOME="$(mktemp -d)" && \
+ gpg --keyserver ha.pool.sks-keyservers.net --recv-keys B42F6819007F00F88E364FD4036A9C25BF357DD4 && \
+ gpg --batch --verify /usr/local/bin/gosu.asc /usr/local/bin/gosu && \
+ rm -R "$GNUPGHOME" /usr/local/bin/gosu.asc && \
+ chmod +x /usr/local/bin/gosu && \
+ \
+ # Download nodejs
+ wget https://nodejs.org/dist/${NODE_VERSION}/node-${NODE_VERSION}-${ARCHITECTURE}.tar.gz && \
+ wget https://nodejs.org/dist/${NODE_VERSION}/SHASUMS256.txt.asc && \
+ \
+ # Verify nodejs authenticity
+ grep ${NODE_VERSION}-${ARCHITECTURE}.tar.gz SHASUMS256.txt.asc | shasum -a 256 -c - && \
+ export GNUPGHOME="$(mktemp -d)" && \
+ gpg --keyserver ha.pool.sks-keyservers.net --recv-keys 9554F04D7259F04124DE6B476D5A82AC7E37093B && \
+ gpg --keyserver ha.pool.sks-keyservers.net --recv-keys 94AE36675C464D64BAFA68DD7434390BDBE9B9C5 && \
+ gpg --keyserver ha.pool.sks-keyservers.net --recv-keys FD3A5288F042B6850C66B31F09FE44734EB7990E && \
+ gpg --keyserver ha.pool.sks-keyservers.net --recv-keys 71DCFD284A79C3B38668286BC97EC7A07EDE3FC1 && \
+ gpg --keyserver ha.pool.sks-keyservers.net --recv-keys DD8F2338BAE7501E3DD5AC78C273792F7D83545D && \
+ gpg --keyserver ha.pool.sks-keyservers.net --recv-keys C4F0DFFF4E8C1A8236409D08E73BC641CC11F4C8 && \
+ gpg --keyserver ha.pool.sks-keyservers.net --recv-keys B9AE9905FFD7803F25714661B63B535A4C206CA9 && \
+ gpg --refresh-keys ha.pool.sks-keyservers.net && \
+ gpg --verify SHASUMS256.txt.asc && \
+ rm -R "$GNUPGHOME" SHASUMS256.txt.asc && \
+ \
+ # Install Node
+ tar xvzf node-${NODE_VERSION}-${ARCHITECTURE}.tar.gz && \
+ rm node-${NODE_VERSION}-${ARCHITECTURE}.tar.gz && \
+ mv node-${NODE_VERSION}-${ARCHITECTURE} /opt/nodejs && \
+ ln -s /opt/nodejs/bin/node /usr/bin/node && \
+ ln -s /opt/nodejs/bin/npm /usr/bin/npm && \
+ \
+ # Install Node dependencies
+ npm install npm@${NPM_VERSION} -g && \
+ npm install -g node-gyp && \
+ npm install -g fibers && \
+ \
+ # Change user to wekan and install meteor
+ cd /home/wekan/ && \
+ chown wekan:wekan --recursive /home/wekan && \
+ curl https://install.meteor.com -o ./install_meteor.sh && \
+ sed -i "s|RELEASE=.*|RELEASE=${METEOR_RELEASE}\"\"|g" ./install_meteor.sh && \
+ echo "Starting meteor ${METEOR_RELEASE} installation... \n" && \
+ chown wekan:wekan ./install_meteor.sh && \
+ gosu wekan:wekan sh ./install_meteor.sh && \
+ \
+ # Build app
+ cd /home/wekan/app && \
+ gosu wekan /home/wekan/.meteor/meteor npm install --save xss && \
+ gosu wekan /home/wekan/.meteor/meteor build --directory /home/wekan/app_build && \
+ cd /home/wekan/app_build/bundle/programs/server/ && \
+ gosu wekan npm install && \
+ mv /home/wekan/app_build/bundle /build && \
+ \
+ # Cleanup
+ apt-get remove --purge -y ${BUILD_DEPS} && \
+ apt-get autoremove -y && \
+ rm -R /var/lib/apt/lists/* && \
+ rm -R /home/wekan/.meteor && \
+ rm -R /home/wekan/app && \
+ rm -R /home/wekan/app_build && \
+ rm /home/wekan/install_meteor.sh
+
+ENV PORT=80
+EXPOSE $PORT
+
+CMD ["node", "/build/main.js"]
diff --git a/README.md b/README.md
index 7b3eea26..45540a86 100644
--- a/README.md
+++ b/README.md
@@ -1,6 +1,18 @@
# Wekan
-[![Join the chat][gitter_badge]][gitter_chat]
+[![Wekan Build Status][travis_badge]][travis_status]
+
+[![Wekan chat][vanila_badge]][vanila_chat]
+
+2017-02-08 News: All of Wefork is now merged and moved back to official
+Wekan. Wefork will not accept any new issues and pull requests.
+All development happens on Wekan.
+
+[Wefork announcement and merging back][fork_announcement]
+
+[Wefork FAQ][fork_faq]
+
+[Translate Wekan at Transifex][translate_wekan]
Wekan is an open-source and collaborative kanban board application.
@@ -10,33 +22,171 @@ boards are an unbeatable tool to keep your things organized. They give you a
visual overview of the current state of your project, and make you productive by
allowing you to focus on the few items that matter the most.
-[![Our roadmap is self-hosted on Wekan][screenshot]][roadmap]
-
Wekan supports most features you would expect of it including a real-time user
-interface, cards comments, member assignations, customizable labels, filtered
-views, and more.
+interface, import from Trello (on standalone Wekan), cards comments, checklists,
+member assignations, customizable labels, closing lists, filtered views, and more.
+
+SSO options like LDAP, passwordless email, SAML, GitHub and Google Auth are
+already available on Sandstorm, not standalone Wekan. Sandstorm is Enterprise
+scale highly secure platform with grains, logging, admin settings,
+server clustering, App Market and it's now fully Open Source. Sandstorm is
+preferred platform for Wekan, as it would take a lot of work to reimplement
+everything in standalone Wekan.
+
+You don’t have to trust us with your data and can install Wekan on your own
+computer or server. In fact we encourage you to do that by providing
+one-click installation on various platforms.
+
+## Roadmap
+
+Upcoming Wekan App Development Platform will make possible
+many use cases like kanban workflows, dependencies, gantt charts,
+WIP limits, time tracking, managing website, Rocket.Chat support
+and custom apps with themes by providing Teams/Organizations,
+APIs, admin interface, custom fields, calendar view, time tracking,
+vote on cards, move cards to another board and board templates.
+Some of these don't even have feature requests in Wekan issues,
+so we do need detailed descriptions, screenshots and links to
+videos how these should work.
+
+We are very welcoming to new developers and teams to submit new pull
+requests to devel branch to make this Wekan App Development Platform possible
+faster. Please see [Developer Documentation][dev_docs] to get started.
+We also welcome sponsors for features. By working directly with Wekan you
+get the benefit of active maintenance and new features added by
+growing Wekan developer community.
+
+[Roadmap is self-hosted on Wekan][roadmap_wefork]
+
+At roadmap there is links to [Wekan GitHub issues][wekan_issues] where actual
+work happens. If you don't see your feature request at GitHub issues,
+please add it. Not all feature requests have been added to roadmap board yet.
-Since it is a free software, you don’t have to trust us with your data and can
+## Screenshot
+
+[![Screenshot of Wekan][screenshot_wefork]][roadmap_wefork]
+
+Content is being copied from [old Wekan roadmap][roadmap_wekan] to
+new one in process of merging Wefork back to Wekan.
+
+Since Wekan is a free software, you don’t have to trust us with your data and can
install Wekan on your own computer or server. In fact we encourage you to do
-that by providing one-click installation on Heroku or [Sandstorm]
-[sandstorm_market] platforms and verified [Docker][docker_image] images. You can
-also install Wekan on the following Platforms:
+that by providing one-click installation on various platforms.
+
+## Supported Platforms
+
+Automatic generated newest builds are available for Docker, and some others that
+install directly from this repo. Automatic builds will be added later for more
+platforms.
+
+[Wekan database cleanup script][wekan_cleanup]
+
+[Daily export of Wekan changes as JSON to Logstash and
+ElasticSearch / Kibana (ELK)][wekan_logstash]
+
+[Wekan stats][wekan_stats]
+
+### Docker: [Docker image][docker_image], [Docs at wiki][wekan_wiki]
+
+Docker example, running latest Wekan using docker-compose:
+
+#### Running from remote dockerhub images
+
+Recommended:
+
+* [Wekan <=> MongoDB][wekan_mongodb] - contains the only required Docker Compose file
+
+Development:
+
+* Clone this wekan repo and run from dockerhub without building:
+
+```
+sudo docker-compose up -d --nobuild
+```
+
+#### PostgreSQL read-only mirroring using dockerhub images
+
+[Wekan <=> MongoDB <=> ToroDB => PostgreSQL read-only mirroring][wekan_postgresql]
+for SQL access with any programming language or Office package that has PostgreSQL support, like
+newest LibreOffice 3.5.
+
+#### Running from locally built dockerhub images
+```
+sudo docker-compose up -d --build
+```
+
+#### Running from locally built dockerhub images and modified `ARG` variables (not recommended)
+```
+echo 'NODE_VERSION=v6.6.0' >> .env && \
+echo 'METEOR_RELEASE=1.4.2.3' >> .env && \
+echo 'NPM_VERSION=4.1.2' >> .env && \
+echo 'ARCHITECTURE=linux-x64' >> .env && \
+echo 'SRC_PATH=./' >> .env && \
+sudo docker-compose up -d --build
+```
+
+Docker example, running latest Wekan using docker run commands alone:
+```
+docker run -d --restart=always --name wekan-db mongo:3.2.11
+
+docker run -d --restart=always --name wekan --link "wekan-db:db" -e "MONGO_URL=mongodb://db" -e "ROOT_URL=http://localhost:8080" -p 8080:80 mquandalle/wekan:latest
+```
+
+[Docker on SUSE Linux Enterprise Server 12 SP1][sles]
+
+[Docker environment for Wekan development][wekan_dev]
+
+[Install from source][install_source]
+
+[Install from source on Windows][installsource_windows]
+
+[VirtualBox][virtualbox]
+
+[Debian Wheezy 64bit][debian_wheezy]
[![Deploy][heroku_button]][heroku_deploy]
[![SignUp][indiehosters_button]][indiehosters_saas]
[![Deploy to Scalingo][scalingo_button]][scalingo_deploy]
[![Install on Cloudron][cloudron_button]][cloudron_install]
+[![Try on Sandstorm][sandstorm_button]][sandstorm_appdemo]
+
+
+## Upcoming Platforms
+
+[Autoinstall script][autoinstall] based on [this issue][autoinstall_issue]
+
+[Create Sandstorm .spk file from source][sandstorm_spk]
+
+Email to work on already working Heroku: Use 3rd party
+email like SendGrid, update process.env.MAIL_URL ,
+change from email at Accounts.emailTeamplates.from ,
+new file in server folder called smtp.js on code
+`Meteor.startup(function () });` .
+TODO: Test and find a way to use API keys instead.
+
+Azure: Install from source. Azure endpoint needs to be added. Not tested yet.
+
+OpenShift: Not tested yet.
+
+Google Cloud: Needs info how to enable websockets.
+
+## License
Wekan is released under the very permissive [MIT license](LICENSE), and made
with [Meteor](https://www.meteor.com).
-[Our roadmap is self-hosted on Wekan][roadmap]
-
-[screenshot]: http://i.imgur.com/cI4jW2h.png
-[gitter_badge]: https://badges.gitter.im/Join%20Chat.svg
-[gitter_chat]: https://gitter.im/wekan/wekan
-[roadmap]: http://try.wekan.io/b/MeSsFJaSqeuo9M6bs/wekan-roadmap
-[sandstorm_market]: https://oasis.sandstorm.io/appdemo/m86q05rdvj14yvn78ghaxynqz7u2svw6rnttptxx49g1785cdv1h
+[vanila_badge]: https://vanila.io/img/join-chat-button2.png
+[vanila_chat]: https://chat.vanila.io/channel/wekan
+[fork_faq]: https://github.com/wefork/wekan/wiki/FAQ
+[fork_announcement]: https://github.com/wekan/wekan/issues/640#issuecomment-276383458
+[screenshot_wekan]: http://i.imgur.com/cI4jW2h.png
+[screenshot_wefork]: http://i.imgur.com/lzvpeS9.png
+[roadmap_wekan]: http://try.wekan.io/b/MeSsFJaSqeuo9M6bs/wekan-roadmap
+[roadmap_wefork]: https://wekan.indie.host/b/t2YaGmyXgNkppcFBq/wekan-fork-roadmap
+[wekan_issues]: https://github.com/wekan/wekan/issues
+[wefork_issues]: https://github.com/wefork/wekan/issues
+[sandstorm_button]: https://img.shields.io/badge/try-Wekan%20on%20Sandstorm-783189.svg
+[sandstorm_appdemo]: https://demo.sandstorm.io/appdemo/m86q05rdvj14yvn78ghaxynqz7u2svw6rnttptxx49g1785cdv1h
[docker_image]: https://hub.docker.com/r/mquandalle/wekan/
[heroku_button]: https://www.herokucdn.com/deploy/button.png
[heroku_deploy]: https://heroku.com/deploy?template=https://github.com/wekan/wekan/tree/master
@@ -46,3 +196,24 @@ with [Meteor](https://www.meteor.com).
[scalingo_deploy]: https://my.scalingo.com/deploy?source=https://github.com/wekan/wekan#master
[cloudron_button]: https://cloudron.io/img/button.svg
[cloudron_install]: https://cloudron.io/button.html?app=io.wekan.cloudronapp
+[debian_wheezy]: https://github.com/soohwa/sps/blob/master/example/docs/1/wekan.md
+[travis_badge]: https://travis-ci.org/wekan/wekan.svg?branch=devel
+[travis_status]: https://travis-ci.org/wekan/wekan
+[install_source]: https://github.com/wekan/wekan/wiki/Install-and-Update#install-manually-from-source
+[installsource_windows]: https://github.com/wekan/wekan/wiki/Install-Wekan-from-source-on-Windows
+[sles]: https://github.com/wekan/wekan/wiki/Install-Wekan-Docker-on-SUSE-Linux-Enterprise-Server-12-SP1
+[virtualbox]: https://github.com/wekan/wekan/wiki/virtual-appliance
+[sandstorm_spk]: https://github.com/wekan/wekan/issues/823
+[docker_image]: https://hub.docker.com/r/mquandalle/wekan/
+[wekan_wiki]: https://github.com/wekan/wekan/wiki
+[translate_wekan]: https://www.transifex.com/wekan/wekan/
+[autoinstall]: https://github.com/wekan/wekan-autoinstall
+[autoinstall_issue]: https://github.com/anselal/wekan/issues/18
+[dev_docs]: https://github.com/wekan/wekan/wiki/Developer-Documentation
+[wekan_mongodb]: https://github.com/wekan/wekan-mongodb
+[wekan_postgresql]: https://github.com/wekan/wekan-postgresql
+[wekan_cleanup]: https://github.com/wekan/wekan-cleanup
+[wekan_logstash]: https://github.com/wekan/wekan-logstash
+[wekan_stats]: https://github.com/wekan/wekan-stats
+[wekan_dev]: https://github.com/wekan/wekan-dev
+[logstash_issue]: https://github.com/wekan/wekan/issues/855
diff --git a/app.env b/app.env
new file mode 100755
index 00000000..b047d258
--- /dev/null
+++ b/app.env
@@ -0,0 +1,3 @@
+#!/bin/bash
+
+export PACKAGE_DIRS="$(pwd)/packages"
diff --git a/app.json b/app.json
index 2bf5cf37..51bc4928 100644
--- a/app.json
+++ b/app.json
@@ -4,7 +4,7 @@
"repository": "https://github.com/wekan/wekan",
"logo": "https://raw.githubusercontent.com/wekan/wekan/master/meta/icons/wekan-150.png",
"keywords": ["productivity", "tool", "team", "kanban"],
- "website": "http://wekan.io",
+ "website": "https://wekan.io",
"env": {
"BUILDPACK_URL": "https://github.com/AdmitHub/meteor-buildpack-horse.git",
"ROOT_URL": {
diff --git a/client/components/activities/activities.jade b/client/components/activities/activities.jade
index 9ff73864..fad147fc 100644
--- a/client/components/activities/activities.jade
+++ b/client/components/activities/activities.jade
@@ -26,6 +26,12 @@ template(name="boardActivities")
+viewer
= comment.text
+ if($eq activityType 'addChecklist')
+ | {{{_ 'activity-checklist-added' cardLink}}}.
+ .activity-checklist(href="{{ card.absoluteUrl }}")
+ +viewer
+ = checklist.title
+
if($eq activityType 'archivedCard')
| {{{_ 'activity-archived' cardLink}}}.
@@ -41,6 +47,9 @@ template(name="boardActivities")
if($eq activityType 'createList')
| {{_ 'activity-added' list.title boardLabel}}.
+ if($eq activityType 'removeList')
+ | {{_ 'activity-removed' title boardLabel}}.
+
if($eq activityType 'importBoard')
| {{{_ 'activity-imported-board' boardLabel sourceLink}}}.
@@ -103,6 +112,11 @@ template(name="cardActivities")
| {{{_ 'activity-attached' attachmentLink cardLabel}}}.
if attachment.isImage
img.attachment-image-preview(src=attachment.url)
+ if($eq activityType 'addChecklist')
+ | {{{_ 'activity-checklist-added' cardLabel}}}.
+ .activity-checklist
+ +viewer
+ = checklist.title
if($eq activityType 'addComment')
+inlinedForm(classNames='js-edit-comment')
diff --git a/client/components/activities/activities.js b/client/components/activities/activities.js
index 0bd6a272..6600849c 100644
--- a/client/components/activities/activities.js
+++ b/client/components/activities/activities.js
@@ -12,10 +12,12 @@ BlazeComponent.extendComponent({
const capitalizedMode = Utils.capitalize(mode);
const id = Session.get(`current${capitalizedMode}`);
const limit = this.page.get() * activitiesPerPage;
+ const user = Meteor.user();
+ const hideSystem = user ? user.hasHiddenSystemMessages() : false;
if (id === null)
return;
- this.subscribe('activities', mode, id, limit, () => {
+ this.subscribe('activities', mode, id, limit, hideSystem, () => {
this.loadNextPageLocked = false;
// If the sibear peak hasn't increased, that mean that there are no more
diff --git a/client/components/activities/activities.styl b/client/components/activities/activities.styl
index 1f0494c7..2285fc0a 100644
--- a/client/components/activities/activities.styl
+++ b/client/components/activities/activities.styl
@@ -26,6 +26,14 @@
margin-top: 5px
padding: 5px
+ .activity-checklist
+ display: block
+ border-radius: 3px
+ background: white
+ text-decoration: none
+ box-shadow: 0 1px 2px rgba(0,0,0,.2)
+ margin-top: 5px
+ padding: 5px
.activity-meta
font-size: 0.8em
color: darken(white, 40%)
diff --git a/client/components/boards/boardBody.jade b/client/components/boards/boardBody.jade
index 288590da..fe10c921 100644
--- a/client/components/boards/boardBody.jade
+++ b/client/components/boards/boardBody.jade
@@ -25,7 +25,7 @@ template(name="boardBody")
+list(this)
if currentCardIsInThisList
+cardDetails(currentCard)
- if currentUser.isBoardMember
+ if canSeeAddList
+addListForm
template(name="addListForm")
diff --git a/client/components/boards/boardBody.js b/client/components/boards/boardBody.js
index 4703bc91..370db13b 100644
--- a/client/components/boards/boardBody.js
+++ b/client/components/boards/boardBody.js
@@ -204,3 +204,9 @@ BlazeComponent.extendComponent({
}];
},
}).register('addListForm');
+
+Template.boardBody.helpers({
+ canSeeAddList() {
+ return Meteor.user() && Meteor.user().isBoardMember() && !Meteor.user().isCommentOnly();
+ },
+});
diff --git a/client/components/boards/boardHeader.jade b/client/components/boards/boardHeader.jade
index 03768b36..e61aea35 100644
--- a/client/components/boards/boardHeader.jade
+++ b/client/components/boards/boardHeader.jade
@@ -65,7 +65,7 @@ template(name="boardHeaderBar")
if $eq watchLevel "muted"
i.fa.fa-bell-slash
span {{_ watchLevel}}
-
+
else
a.board-header-btn.js-log-in(
title="{{_ 'log-in'}}")
@@ -81,7 +81,7 @@ template(name="boardHeaderBar")
a.board-header-btn-close.js-filter-reset(title="{{_ 'filter-clear'}}")
i.fa.fa-times-thin
- if currentUser.isBoardMember
+ if canModifyBoard
a.board-header-btn.js-multiselection-activate(
title="{{#if MultiSelection.isActive}}{{_ 'multi-selection-on'}}{{else}}{{_ 'multi-selection'}}{{/if}}"
class="{{#if MultiSelection.isActive}}emphasis{{/if}}")
@@ -92,7 +92,7 @@ template(name="boardHeaderBar")
i.fa.fa-times-thin
.separator
- a.board-header-btn.js-open-board-menu
+ a.board-header-btn.js-open-board-menu(title="{{_ 'boardMenuPopup-title'}}")
i.board-header-btn-icon.fa.fa-navicon
template(name="boardMenuPopup")
@@ -170,7 +170,7 @@ template(name="boardChangeColorPopup")
if isSelected
i.fa.fa-check
-template(name="createBoardPopup")
+template(name="createBoard")
form
label
| {{_ 'title'}}
diff --git a/client/components/boards/boardHeader.js b/client/components/boards/boardHeader.js
index b72bb162..44532c3e 100644
--- a/client/components/boards/boardHeader.js
+++ b/client/components/boards/boardHeader.js
@@ -33,7 +33,7 @@ Template.boardChangeTitlePopup.events({
const newDesc = tpl.$('.js-board-desc').val().trim();
if (newTitle) {
this.rename(newTitle);
- this.setDesciption(newDesc);
+ this.setDescription(newDesc);
Popup.close();
}
evt.preventDefault();
@@ -97,6 +97,12 @@ BlazeComponent.extendComponent({
},
}).register('boardHeaderBar');
+Template.boardHeaderBar.helpers({
+ canModifyBoard() {
+ return Meteor.user() && Meteor.user().isBoardMember() && !Meteor.user().isCommentOnly();
+ },
+});
+
BlazeComponent.extendComponent({
backgroundColors() {
return Boards.simpleSchema()._schema.color.allowedValues;
@@ -119,10 +125,15 @@ BlazeComponent.extendComponent({
},
}).register('boardChangeColorPopup');
-BlazeComponent.extendComponent({
+const CreateBoard = BlazeComponent.extendComponent({
+ template() {
+ return 'createBoard';
+ },
+
onCreated() {
this.visibilityMenuIsOpen = new ReactiveVar(false);
this.visibility = new ReactiveVar('private');
+ this.boardId = new ReactiveVar('');
},
visibilityCheck() {
@@ -143,15 +154,12 @@ BlazeComponent.extendComponent({
const title = this.find('.js-new-board-title').value;
const visibility = this.visibility.get();
- const boardId = Boards.insert({
+ this.boardId.set(Boards.insert({
title,
permission: visibility,
- });
+ }));
- Utils.goBoardId(boardId);
-
- // Immediately star boards crated with the headerbar popup.
- Meteor.user().toggleBoardStar(boardId);
+ Utils.goBoardId(this.boardId.get());
},
events() {
@@ -166,6 +174,14 @@ BlazeComponent.extendComponent({
},
}).register('createBoardPopup');
+(class HeaderBarCreateBoard extends CreateBoard {
+ onSubmit(evt) {
+ super.onSubmit(evt);
+ // Immediately star boards crated with the headerbar popup.
+ Meteor.user().toggleBoardStar(this.boardId.get());
+ }
+}).register('headerBarCreateBoardPopup');
+
BlazeComponent.extendComponent({
visibilityCheck() {
const currentBoard = Boards.findOne(Session.get('currentBoard'));
diff --git a/client/components/cards/cardDate.jade b/client/components/cards/cardDate.jade
new file mode 100644
index 00000000..525f27ed
--- /dev/null
+++ b/client/components/cards/cardDate.jade
@@ -0,0 +1,26 @@
+template(name="editCardDate")
+ .edit-card-date
+ form.edit-date
+ .fields
+ .left
+ label(for="date") {{_ 'date'}}
+ input.js-date-field#date(type="text" name="date" value=showDate placeholder=dateFormat autofocus)
+ .right
+ label(for="time") {{_ 'time'}}
+ input.js-time-field#time(type="text" name="time" value=showTime placeholder=timeFormat)
+ .js-datepicker
+ if error.get
+ .warning {{_ error.get}}
+ button.primary.wide.left.js-submit-date(type="submit") {{_ 'save'}}
+ button.js-delete-date.negate.wide.right.js-delete-date {{_ 'delete'}}
+
+template(name="dateBadge")
+ if canModifyCard
+ a.js-edit-date.card-date(title="{{showTitle}}" class="{{classes}}")
+ time(datetime="{{showISODate}}")
+ | {{showDate}}
+ else
+ a.card-date(title="{{showTitle}}" class="{{classes}}")
+ time(datetime="{{showISODate}}")
+ | {{showDate}}
+
diff --git a/client/components/cards/cardDate.js b/client/components/cards/cardDate.js
new file mode 100644
index 00000000..3f69f384
--- /dev/null
+++ b/client/components/cards/cardDate.js
@@ -0,0 +1,234 @@
+// Edit start & due dates
+const EditCardDate = BlazeComponent.extendComponent({
+ template() {
+ return 'editCardDate';
+ },
+
+ onCreated() {
+ this.error = new ReactiveVar('');
+ this.card = this.data();
+ this.date = new ReactiveVar(moment.invalid());
+ },
+
+ onRendered() {
+ const $picker = this.$('.js-datepicker').datepicker({
+ todayHighlight: true,
+ todayBtn: 'linked',
+ language: TAPi18n.getLanguage(),
+ }).on('changeDate', function(evt) {
+ this.find('#date').value = moment(evt.date).format('L');
+ this.error.set('');
+ this.find('#time').focus();
+ }.bind(this));
+
+ if (this.date.get().isValid()) {
+ $picker.datepicker('update', this.date.get().toDate());
+ }
+ },
+
+ showDate() {
+ if (this.date.get().isValid())
+ return this.date.get().format('L');
+ return '';
+ },
+ showTime() {
+ if (this.date.get().isValid())
+ return this.date.get().format('LT');
+ return '';
+ },
+ dateFormat() {
+ return moment.localeData().longDateFormat('L');
+ },
+ timeFormat() {
+ return moment.localeData().longDateFormat('LT');
+ },
+
+ events() {
+ return [{
+ 'keyup .js-date-field'() {
+ // parse for localized date format in strict mode
+ const dateMoment = moment(this.find('#date').value, 'L', true);
+ if (dateMoment.isValid()) {
+ this.error.set('');
+ this.$('.js-datepicker').datepicker('update', dateMoment.toDate());
+ }
+ },
+ 'keyup .js-time-field'() {
+ // parse for localized time format in strict mode
+ const dateMoment = moment(this.find('#time').value, 'LT', true);
+ if (dateMoment.isValid()) {
+ this.error.set('');
+ }
+ },
+ 'submit .edit-date'(evt) {
+ evt.preventDefault();
+
+ // if no time was given, init with 12:00
+ const time = evt.target.time.value || moment(new Date().setHours(12, 0, 0)).format('LT');
+
+ const dateString = `${evt.target.date.value} ${time}`;
+ const newDate = moment(dateString, 'L LT', true);
+ if (newDate.isValid()) {
+ this._storeDate(newDate.toDate());
+ Popup.close();
+ }
+ else {
+ this.error.set('invalid-date');
+ evt.target.date.focus();
+ }
+ },
+ 'click .js-delete-date'(evt) {
+ evt.preventDefault();
+ this._deleteDate();
+ Popup.close();
+ },
+ }];
+ },
+});
+
+Template.dateBadge.helpers({
+ canModifyCard() {
+ return Meteor.user() && Meteor.user().isBoardMember() && !Meteor.user().isCommentOnly();
+ },
+});
+
+// editCardStartDatePopup
+(class extends EditCardDate {
+ onCreated() {
+ super.onCreated();
+ this.data().startAt && this.date.set(moment(this.data().startAt));
+ }
+
+ _storeDate(date) {
+ this.card.setStart(date);
+ }
+
+ _deleteDate() {
+ this.card.unsetStart();
+ }
+}).register('editCardStartDatePopup');
+
+// editCardDueDatePopup
+(class extends EditCardDate {
+ onCreated() {
+ super.onCreated();
+ this.data().dueAt && this.date.set(moment(this.data().dueAt));
+ }
+
+ onRendered() {
+ super.onRendered();
+ if (moment.isDate(this.card.startAt)) {
+ this.$('.js-datepicker').datepicker('setStartDate', this.card.startAt);
+ }
+ }
+
+ _storeDate(date) {
+ this.card.setDue(date);
+ }
+
+ _deleteDate() {
+ this.card.unsetDue();
+ }
+}).register('editCardDueDatePopup');
+
+
+// Display start & due dates
+const CardDate = BlazeComponent.extendComponent({
+ template() {
+ return 'dateBadge';
+ },
+
+ onCreated() {
+ const self = this;
+ self.date = ReactiveVar();
+ self.now = ReactiveVar(moment());
+ window.setInterval(() => {
+ self.now.set(moment());
+ }, 60000);
+ },
+
+ showDate() {
+ // this will start working once mquandalle:moment
+ // is updated to at least moment.js 2.10.5
+ // until then, the date is displayed in the "L" format
+ return this.date.get().calendar(null, {
+ sameElse: 'llll',
+ });
+ },
+
+ showISODate() {
+ return this.date.get().toISOString();
+ },
+});
+
+class CardStartDate extends CardDate {
+ onCreated() {
+ super.onCreated();
+ const self = this;
+ self.autorun(() => {
+ self.date.set(moment(self.data().startAt));
+ });
+ }
+
+ classes() {
+ if (this.date.get().isBefore(this.now.get(), 'minute') &&
+ this.now.get().isBefore(this.data().dueAt)) {
+ return 'current';
+ }
+ return '';
+ }
+
+ showTitle() {
+ return `${TAPi18n.__('card-start-on')} ${this.date.get().format('LLLL')}`;
+ }
+
+ events() {
+ return super.events().concat({
+ 'click .js-edit-date': Popup.open('editCardStartDate'),
+ });
+ }
+}
+CardStartDate.register('cardStartDate');
+
+class CardDueDate extends CardDate {
+ onCreated() {
+ super.onCreated();
+ const self = this;
+ self.autorun(() => {
+ self.date.set(moment(self.data().dueAt));
+ });
+ }
+
+ classes() {
+ if (this.now.get().diff(this.date.get(), 'days') >= 2)
+ return 'long-overdue';
+ else if (this.now.get().diff(this.date.get(), 'minute') >= 0)
+ return 'due';
+ else if (this.now.get().diff(this.date.get(), 'days') >= -1)
+ return 'almost-due';
+ return '';
+ }
+
+ showTitle() {
+ return `${TAPi18n.__('card-due-on')} ${this.date.get().format('LLLL')}`;
+ }
+
+ events() {
+ return super.events().concat({
+ 'click .js-edit-date': Popup.open('editCardDueDate'),
+ });
+ }
+}
+CardDueDate.register('cardDueDate');
+
+(class extends CardStartDate {
+ showDate() {
+ return this.date.get().format('l');
+ }
+}).register('minicardStartDate');
+
+(class extends CardDueDate {
+ showDate() {
+ return this.date.get().format('l');
+ }
+}).register('minicardDueDate');
diff --git a/client/components/cards/cardDate.styl b/client/components/cards/cardDate.styl
new file mode 100644
index 00000000..1631baa5
--- /dev/null
+++ b/client/components/cards/cardDate.styl
@@ -0,0 +1,58 @@
+.edit-card-date
+ .fields
+ .left
+ width: 56%
+ .right
+ width: 38%
+ .datepicker
+ width: 100%
+ table
+ width: 100%
+ border: none
+ border-spacing: 0
+ border-collapse: collapse
+ thead
+ background: none
+ td, th
+ box-sizing: border-box
+
+
+.card-date
+ display: block
+ border-radius: 4px
+ padding: 1px 3px
+
+ background-color: #dbdbdb
+ &:hover, &.is-active
+ background-color: #b3b3b3
+
+ &.current, &.almost-due, &.due, &.long-overdue
+ color: #fff
+
+ &.current
+ background-color: #5ba639
+ &:hover, &.is-active
+ background-color: darken(#5ba639, 10)
+
+ &.almost-due
+ background-color: #edc909
+ &:hover, &.is-active
+ background-color: darken(#edc909, 10)
+
+ &.due
+ background-color: #fa3f00
+ &:hover, &.is-active
+ background-color: darken(#fa3f00, 10)
+
+ &.long-overdue
+ background-color: #fd5d47
+ &:hover, &.is-active
+ background-color: darken(#fd5d47, 7)
+
+ time
+ &::before
+ font: normal normal normal 14px/1 FontAwesome
+ font-size: inherit
+ -webkit-font-smoothing: antialiased
+ content: "\f017" // clock symbol
+ margin-right: 0.3em \ No newline at end of file
diff --git a/client/components/cards/cardDetails.jade b/client/components/cards/cardDetails.jade
index 734fc7e3..9c95e92f 100644
--- a/client/components/cards/cardDetails.jade
+++ b/client/components/cards/cardDetails.jade
@@ -8,7 +8,7 @@ template(name="cardDetails")
if currentUser.isBoardMember
a.fa.fa-navicon.card-details-menu.js-open-card-details-menu
h2.card-details-title.js-card-title(
- class="{{#if currentUser.isBoardMember}}js-open-inlined-form is-editable{{/if}}")
+ class="{{#if canModifyCard}}js-open-inlined-form is-editable{{/if}}")
= title
if isWatching
i.fa.fa-eye.card-details-watch
@@ -22,21 +22,32 @@ template(name="cardDetails")
each members
+userAvatar(userId=this cardId=../_id)
| {{! XXX Hack to hide syntaxic coloration /// }}
- if currentUser.isBoardMember
+ if canModifyCard
a.member.add-member.card-details-item-add-button.js-add-members(title="{{_ 'card-members-title'}}")
i.fa.fa-plus
.card-details-item.card-details-item-labels
h3.card-details-item-title {{_ 'labels'}}
- a(class="{{#if currentUser.isBoardMember}}js-add-labels{{else}}is-disabled{{/if}}" title="{{_ 'card-labels-title'}}")
+ a(class="{{#if canModifyCard}}js-add-labels{{else}}is-disabled{{/if}}" title="{{_ 'card-labels-title'}}")
each labels
span.card-label(class="card-label-{{color}}" title=name)= name
- if currentUser.isBoardMember
+ if canModifyCard
a.card-label.add-label.js-add-labels(title="{{_ 'card-labels-title'}}")
i.fa.fa-plus
+ if startAt
+ .card-details-item.card-details-item-start
+ h3.card-details-item-title {{_ 'card-start'}}
+ +cardStartDate
+
+ if dueAt
+ .card-details-item.card-details-item-due
+ h3.card-details-item-title {{_ 'card-due'}}
+ +cardDueDate
+
+
//- XXX We should use "editable" to avoid repetiting ourselves
- if currentUser.isBoardMember
+ if canModifyCard
h3.card-details-item-title {{_ 'description'}}
+inlinedCardDescription(classNames="card-description js-card-description")
+editor(autofocus=true)
@@ -61,6 +72,10 @@ template(name="cardDetails")
h3.card-details-item-title {{_ 'description'}}
+viewer
= description
+
+ hr
+ +checklists(cardId = _id)
+
if attachments.count
hr
h2
@@ -86,21 +101,24 @@ template(name="editCardTitleForm")
template(name="cardDetailsActionsPopup")
ul.pop-over-list
li: a.js-toggle-watch-card {{#if isWatching}}{{_ 'unwatch'}}{{else}}{{_ 'watch'}}{{/if}}
- hr
- ul.pop-over-list
- li: a.js-members {{_ 'card-edit-members'}}
- li: a.js-labels {{_ 'card-edit-labels'}}
- li: a.js-attachments {{_ 'card-edit-attachments'}}
- hr
- ul.pop-over-list
- li: a.js-move-card-to-top {{_ 'moveCardToTop-title'}}
- li: a.js-move-card-to-bottom {{_ 'moveCardToBottom-title'}}
- hr
- ul.pop-over-list
- li: a.js-move-card {{_ 'moveCardPopup-title'}}
- unless archived
- li: a.js-archive {{_ 'archive-card'}}
- li: a.js-more {{_ 'cardMorePopup-title'}}
+ if canModifyCard
+ hr
+ ul.pop-over-list
+ li: a.js-members {{_ 'card-edit-members'}}
+ li: a.js-labels {{_ 'card-edit-labels'}}
+ li: a.js-attachments {{_ 'card-edit-attachments'}}
+ li: a.js-start-date {{_ 'editCardStartDatePopup-title'}}
+ li: a.js-due-date {{_ 'editCardDueDatePopup-title'}}
+ hr
+ ul.pop-over-list
+ li: a.js-move-card-to-top {{_ 'moveCardToTop-title'}}
+ li: a.js-move-card-to-bottom {{_ 'moveCardToBottom-title'}}
+ hr
+ ul.pop-over-list
+ li: a.js-move-card {{_ 'moveCardPopup-title'}}
+ unless archived
+ li: a.js-archive {{_ 'archive-card'}}
+ li: a.js-more {{_ 'cardMorePopup-title'}}
template(name="moveCardPopup")
+boardLists
diff --git a/client/components/cards/cardDetails.js b/client/components/cards/cardDetails.js
index b6f17c23..b39f8e59 100644
--- a/client/components/cards/cardDetails.js
+++ b/client/components/cards/cardDetails.js
@@ -28,6 +28,10 @@ BlazeComponent.extendComponent({
return card.findWatcher(Meteor.userId());
},
+ canModifyCard() {
+ return Meteor.user() && Meteor.user().isBoardMember() && !Meteor.user().isCommentOnly();
+ },
+
scrollParentContainer() {
const cardPanelWidth = 510;
const bodyBoardComponent = this.parentComponent();
@@ -65,6 +69,9 @@ BlazeComponent.extendComponent({
[`${CSSEvents.transitionend} .js-card-details`]() {
this.isLoaded.set(true);
},
+ [`${CSSEvents.animationend} .js-card-details`]() {
+ this.isLoaded.set(true);
+ },
};
return [{
@@ -137,12 +144,18 @@ Template.cardDetailsActionsPopup.helpers({
isWatching() {
return this.findWatcher(Meteor.userId());
},
+
+ canModifyCard() {
+ return Meteor.user() && Meteor.user().isBoardMember() && !Meteor.user().isCommentOnly();
+ },
});
Template.cardDetailsActionsPopup.events({
'click .js-members': Popup.open('cardMembers'),
'click .js-labels': Popup.open('cardLabels'),
'click .js-attachments': Popup.open('cardAttachments'),
+ 'click .js-start-date': Popup.open('editCardStartDate'),
+ 'click .js-due-date': Popup.open('editCardDueDate'),
'click .js-move-card': Popup.open('moveCard'),
'click .js-move-card-to-top'(evt) {
evt.preventDefault();
diff --git a/client/components/cards/cardDetails.styl b/client/components/cards/cardDetails.styl
index d7d29551..f209862c 100644
--- a/client/components/cards/cardDetails.styl
+++ b/client/components/cards/cardDetails.styl
@@ -73,8 +73,13 @@
margin: 15px 0
.card-details-item
+ margin-right: 0.5em
+ &:last-child
+ margin-right: 0
&.card-details-item-labels,
- &.card-details-item-members
+ &.card-details-item-members,
+ &.card-details-item-start,
+ &.card-details-item-due
width: 50%
flex-shrink: 1
diff --git a/client/components/cards/checklists.jade b/client/components/cards/checklists.jade
new file mode 100644
index 00000000..a0d89351
--- /dev/null
+++ b/client/components/cards/checklists.jade
@@ -0,0 +1,71 @@
+template(name="checklists")
+ h2 {{_ 'checklists'}}
+ .card-checklist-items
+ each checklist in currentCard.checklists
+ +checklistDetail(checklist = checklist)
+ if canModifyCard
+ +inlinedForm(classNames="js-add-checklist" cardId = cardId)
+ +addChecklistItemForm
+ else
+ a.js-open-inlined-form
+ i.fa.fa-plus
+ | {{_ 'add-checklist'}}...
+
+template(name="checklistDetail")
+ +inlinedForm(classNames="js-edit-checklist-title" checklist = checklist)
+ +editChecklistItemForm(checklist = checklist)
+ else
+ .checklist-title
+ .checkbox.fa.fa-check-square-o
+ if canModifyCard
+ a.js-delete-checklist {{_ "delete"}}...
+ span.checklist-stat(class="{{#if checklist.isFinished}}is-finished{{/if}}") {{checklist.finishedCount}}/{{checklist.itemCount}}
+ if canModifyCard
+ h2.title.js-open-inlined-form.is-editable {{checklist.title}}
+ else
+ h2.title {{checklist.title}}
+ +checklistItems(checklist = checklist)
+
+template(name="addChecklistItemForm")
+ textarea.js-add-checklist-item(rows='1' autofocus)
+ .edit-controls.clearfix
+ button.primary.confirm.js-submit-add-checklist-item-form(type="submit") {{_ 'save'}}
+ a.fa.fa-times-thin.js-close-inlined-form
+
+template(name="editChecklistItemForm")
+ textarea.js-edit-checklist-item(rows='1' autofocus)
+ if $eq type 'item'
+ = item.title
+ else
+ = checklist.title
+ .edit-controls.clearfix
+ button.primary.confirm.js-submit-edit-checklist-item-form(type="submit") {{_ 'save'}}
+ a.fa.fa-times-thin.js-close-inlined-form
+ span(title=createdAt) {{ moment createdAt }}
+ if canModifyCard
+ a.js-delete-checklist-item {{_ "delete"}}...
+
+template(name="checklistItems")
+ .checklist-items
+ each item in checklist.items
+ +inlinedForm(classNames="js-edit-checklist-item" item = item checklist = checklist)
+ +editChecklistItemForm(type = 'item' item = item checklist = checklist)
+ else
+ +itemDetail(item = item checklist = checklist)
+ if canModifyCard
+ +inlinedForm(classNames="js-add-checklist-item" checklist = checklist)
+ +addChecklistItemForm
+ else
+ a.add-checklist-item.js-open-inlined-form
+ i.fa.fa-plus
+ | {{_ 'add-checklist-item'}}...
+
+template(name='itemDetail')
+ .item
+ if canModifyCard
+ .check-box.materialCheckBox(class="{{#if item.isFinished }}is-checked{{/if}}")
+ .item-title.js-open-inlined-form.is-editable(class="{{#if item.isFinished }}is-checked{{/if}}") {{item.title}}
+ else
+ .materialCheckBox(class="{{#if item.isFinished }}is-checked{{/if}}")
+ .item-title(class="{{#if item.isFinished }}is-checked{{/if}}") {{item.title}}
+
diff --git a/client/components/cards/checklists.js b/client/components/cards/checklists.js
new file mode 100644
index 00000000..b8f5e443
--- /dev/null
+++ b/client/components/cards/checklists.js
@@ -0,0 +1,99 @@
+BlazeComponent.extendComponent({
+ addChecklist(event) {
+ event.preventDefault();
+ const textarea = this.find('textarea.js-add-checklist-item');
+ const title = textarea.value.trim();
+ const cardId = this.currentData().cardId;
+ Checklists.insert({
+ cardId,
+ title,
+ });
+ },
+
+ addChecklistItem(event) {
+ event.preventDefault();
+ const textarea = this.find('textarea.js-add-checklist-item');
+ const title = textarea.value.trim();
+ const checklist = this.currentData().checklist;
+ checklist.addItem(title);
+ },
+
+ editChecklist(event) {
+ event.preventDefault();
+ const textarea = this.find('textarea.js-edit-checklist-item');
+ const title = textarea.value.trim();
+ const checklist = this.currentData().checklist;
+ checklist.setTitle(title);
+ },
+
+ canModifyCard() {
+ return Meteor.user() && Meteor.user().isBoardMember() && !Meteor.user().isCommentOnly();
+ },
+
+ editChecklistItem(event) {
+ event.preventDefault();
+
+ const textarea = this.find('textarea.js-edit-checklist-item');
+ const title = textarea.value.trim();
+ const itemId = this.currentData().item._id;
+ const checklist = this.currentData().checklist;
+ checklist.editItem(itemId, title);
+ },
+
+ deleteItem() {
+ const checklist = this.currentData().checklist;
+ const item = this.currentData().item;
+ if (checklist && item && item._id) {
+ checklist.removeItem(item._id);
+ }
+ },
+
+ deleteChecklist() {
+ const checklist = this.currentData().checklist;
+ if (checklist && checklist._id) {
+ Checklists.remove(checklist._id);
+ }
+ },
+
+ pressKey(event) {
+ //If user press enter key inside a form, submit it, so user doesn't have to leave keyboard to submit a form.
+ if (event.keyCode === 13) {
+ event.preventDefault();
+ const $form = $(event.currentTarget).closest('form');
+ $form.find('button[type=submit]').click();
+ }
+ },
+
+ events() {
+ return [{
+ 'submit .js-add-checklist': this.addChecklist,
+ 'submit .js-edit-checklist-title': this.editChecklist,
+ 'submit .js-add-checklist-item': this.addChecklistItem,
+ 'submit .js-edit-checklist-item': this.editChecklistItem,
+ 'click .js-delete-checklist-item': this.deleteItem,
+ 'click .js-delete-checklist': this.deleteChecklist,
+ keydown: this.pressKey,
+ }];
+ },
+}).register('checklists');
+
+Template.itemDetail.helpers({
+ canModifyCard() {
+ return Meteor.user() && Meteor.user().isBoardMember() && !Meteor.user().isCommentOnly();
+ },
+});
+
+BlazeComponent.extendComponent({
+ toggleItem() {
+ const checklist = this.currentData().checklist;
+ const item = this.currentData().item;
+ if (checklist && item && item._id) {
+ checklist.toggleItem(item._id);
+ }
+ },
+ events() {
+ return [{
+ 'click .item .check-box': this.toggleItem,
+ }];
+ },
+}).register('itemDetail');
diff --git a/client/components/cards/checklists.styl b/client/components/cards/checklists.styl
new file mode 100644
index 00000000..885d7528
--- /dev/null
+++ b/client/components/cards/checklists.styl
@@ -0,0 +1,68 @@
+.js-add-checklist
+ color: #8c8c8c
+
+textarea.js-add-checklist-item, textarea.js-edit-checklist-item
+ overflow: hidden
+ word-wrap: break-word
+ resize: none
+ height: 34px
+
+.delete-text
+ color: #8c8c8c
+ text-decoration: underline
+ word-wrap: break-word
+ float: right
+ padding-top: 6px
+ &:hover
+ color: inherit
+
+.checklist-title
+ .checkbox
+ float: left
+ width: 30px
+ height 30px
+ font-size: 18px
+ line-height: 30px
+
+ .title
+ font-size: 18px
+ line-height: 30px
+
+ .checklist-stat
+ margin: 0 0.5em
+ float: right
+ padding-top: 6px
+ &.is-finished
+ color: #3cb500
+
+ .js-delete-checklist
+ @extends .delete-text
+
+.checklist-items
+ margin: 0 0 0.5em 1.33em
+
+ .item
+ line-height: 25px
+ font-size: 1.1em
+ margin-top: 3px
+ display: flex
+
+ .check-box
+ margin-top: 5px
+ &.is-checked
+ border-bottom: 2px solid #3cb500
+ border-right: 2px solid #3cb500
+
+ .item-title
+ padding-left: 10px;
+ &.is-checked
+ color: #8c8c8c
+ font-style: italic
+
+ .js-delete-checklist-item
+ @extends .delete-text
+ padding: 12px 0 0 0
+
+ .add-checklist-item
+ padding-top: 0.5em
+ display: inline-block
diff --git a/client/components/cards/minicard.jade b/client/components/cards/minicard.jade
index 1dfd2f8e..5409ec62 100644
--- a/client/components/cards/minicard.jade
+++ b/client/components/cards/minicard.jade
@@ -7,6 +7,13 @@ template(name="minicard")
each labels
.minicard-label(class="card-label-{{color}}" title="{{name}}")
.minicard-title= title
+ .dates
+ if startAt
+ .date
+ +minicardStartDate
+ if dueAt
+ .date
+ +minicardDueDate
if members
.minicard-members.js-minicard-members
each members
@@ -14,7 +21,7 @@ template(name="minicard")
.badges
if comments.count
.badge(title="{{_ 'card-comments-title' comments.count }}")
- span.badge-icon.fa.fa-comment-o
+ span.badge-icon.fa.fa-comment-o.badge-comment
span.badge-text= comments.count
if description
.badge.badge-state-image-only(title=description)
@@ -23,3 +30,7 @@ template(name="minicard")
.badge
span.badge-icon.fa.fa-paperclip
span.badge-text= attachments.count
+ if checklists.count
+ .badge(class="{{#if checklistFinished}}is-finished{{/if}}")
+ span.badge-icon.fa.fa-check-square-o
+ span.badge-text.check-list-text {{checklistFinishedCount}}/{{checklistItemCount}}
diff --git a/client/components/cards/minicard.styl b/client/components/cards/minicard.styl
index 0f6f8ad2..a6aad896 100644
--- a/client/components/cards/minicard.styl
+++ b/client/components/cards/minicard.styl
@@ -77,7 +77,12 @@
height: @width
border-radius: 2px
margin-left: 3px
-
+ .dates
+ display: flex;
+ flex-direction: row;
+ flex-wrap: wrap;
+ .date
+ margin-right: 3px
.badges
float: left
margin-top: 7px
@@ -91,15 +96,28 @@
margin-right: 11px
margin-bottom: 3px
font-size: 0.9em
+ &.is-finished
+ background: #3cb500
+ padding: 0px 3px
+ border-radius: 3px
+ color: white
+
+ &:last-of-type
+ margin-right: 0
.badge-icon,
.badge-text
- vertical-align: top
+ vertical-align: middle
+ &.badge-comment
+ margin-bottom: 0.1rem
.badge-text
font-size: 0.9em
padding-left: 2px
line-height: 14px
+ .check-list-text
+ padding-left: 0px
+ line-height: 12px
.minicard-members
float: right
diff --git a/client/components/lists/list.js b/client/components/lists/list.js
index e1909783..9c191348 100644
--- a/client/components/lists/list.js
+++ b/client/components/lists/list.js
@@ -44,7 +44,7 @@ BlazeComponent.extendComponent({
placeholder: 'minicard-wrapper placeholder',
start(evt, ui) {
ui.placeholder.height(ui.helper.height());
- EscapeActions.executeUpTo('popup');
+ EscapeActions.executeUpTo('popup-close');
boardComponent.setIsDragging(true);
},
stop(evt, ui) {
@@ -79,10 +79,10 @@ BlazeComponent.extendComponent({
});
function userIsMember() {
- return Meteor.user() && Meteor.user().isBoardMember();
+ return Meteor.user() && Meteor.user().isBoardMember() && !Meteor.user().isCommentOnly();
}
- // Disable drag-dropping if the current user is not a board member
+ // Disable drag-dropping if the current user is not a board member or is comment only
this.autorun(() => {
$cards.sortable('option', 'disabled', !userIsMember());
});
diff --git a/client/components/lists/listBody.jade b/client/components/lists/listBody.jade
index e659b179..01aa7179 100644
--- a/client/components/lists/listBody.jade
+++ b/client/components/lists/listBody.jade
@@ -12,7 +12,7 @@ template(name="listBody")
.materialCheckBox.multi-selection-checkbox.js-toggle-multi-selection(
class="{{#if MultiSelection.isSelected _id}}is-checked{{/if}}")
+minicard(this)
- if currentUser.isBoardMember
+ if canSeeAddCard
+inlinedForm(autoclose=false position="bottom")
+addCardForm(listId=_id position="bottom")
else
diff --git a/client/components/lists/listBody.js b/client/components/lists/listBody.js
index 34c2dcd6..bdc812c7 100644
--- a/client/components/lists/listBody.js
+++ b/client/components/lists/listBody.js
@@ -239,3 +239,10 @@ BlazeComponent.extendComponent({
});
},
}).register('addCardForm');
+
+
+Template.listBody.helpers({
+ canSeeAddCard() {
+ return Meteor.user() && Meteor.user().isBoardMember() && !Meteor.user().isCommentOnly();
+ },
+});
diff --git a/client/components/lists/listHeader.jade b/client/components/lists/listHeader.jade
index f9fe065f..3f6ce0eb 100644
--- a/client/components/lists/listHeader.jade
+++ b/client/components/lists/listHeader.jade
@@ -6,6 +6,10 @@ template(name="listHeader")
h2.list-header-name(
class="{{#if currentUser.isBoardMember}}js-open-inlined-form is-editable{{/if}}")
= title
+ if showCardsCountForList cards.count
+ = cards.count
+ span.lowercase
+ | {{_ 'cards'}}
if currentUser.isBoardMember
if isWatching
i.list-header-watch-icon.fa.fa-eye
@@ -21,14 +25,18 @@ template(name="editListTitleForm")
template(name="listActionPopup")
ul.pop-over-list
li: a.js-toggle-watch-list {{#if isWatching}}{{_ 'unwatch'}}{{else}}{{_ 'watch'}}{{/if}}
- hr
- ul.pop-over-list
- li: a.js-add-card {{_ 'add-card'}}
- if cards.count
- li: a.js-select-cards {{_ 'list-select-cards'}}
- hr
- ul.pop-over-list
- li: a.js-close-list {{_ 'archive-list'}}
+ unless currentUser.isCommentOnly
+ hr
+ ul.pop-over-list
+ li: a.js-add-card {{_ 'add-card'}}
+ if cards.count
+ li: a.js-select-cards {{_ 'list-select-cards'}}
+ hr
+ ul.pop-over-list
+ li: a.js-close-list {{_ 'archive-list'}}
+ hr
+ ul.pop-over-list
+ li: a.js-remove-list {{_ 'remove-list'}}
template(name="boardLists")
ul.pop-over-list
diff --git a/client/components/lists/listHeader.js b/client/components/lists/listHeader.js
index c7ae8e62..f352022d 100644
--- a/client/components/lists/listHeader.js
+++ b/client/components/lists/listHeader.js
@@ -13,6 +13,14 @@ BlazeComponent.extendComponent({
return list.findWatcher(Meteor.userId());
},
+ limitToShowCardsCount() {
+ return Meteor.user().getLimitToShowCardsCount();
+ },
+
+ showCardsCountForList(count) {
+ return count > this.limitToShowCardsCount();
+ },
+
events() {
return [{
'click .js-open-list-menu': Popup.open('listAction'),
@@ -52,4 +60,10 @@ Template.listActionPopup.events({
this.archive();
Popup.close();
},
+ 'click .js-remove-list'(evt) {
+ const currentList = this;
+ evt.preventDefault();
+ Lists.remove(currentList._id);
+ Popup.close();
+ },
});
diff --git a/client/components/main/header.js b/client/components/main/header.js
index 0337c72b..49acbfef 100644
--- a/client/components/main/header.js
+++ b/client/components/main/header.js
@@ -13,5 +13,5 @@ Template.header.helpers({
});
Template.header.events({
- 'click .js-create-board': Popup.open('createBoard'),
+ 'click .js-create-board': Popup.open('headerBarCreateBoard'),
});
diff --git a/client/components/main/layouts.jade b/client/components/main/layouts.jade
index 943ebe0f..12fac0a8 100644
--- a/client/components/main/layouts.jade
+++ b/client/components/main/layouts.jade
@@ -2,6 +2,7 @@ head
title Wekan
meta(name="viewport"
content="maximum-scale=1.0,width=device-width,initial-scale=1.0,user-scalable=0")
+ meta(http-equiv="X-UA-Compatible" content="IE=edge")
//- XXX We should use pathFor in the following `href` to support the case
where the application is deployed with a path prefix, but it seems to be
difficult to do that cleanly with Blaze -- at least without adding extra
diff --git a/client/components/main/layouts.js b/client/components/main/layouts.js
index 3df17f41..1e50b01a 100644
--- a/client/components/main/layouts.js
+++ b/client/components/main/layouts.js
@@ -1,4 +1,6 @@
Meteor.subscribe('boards');
+Meteor.subscribe('setting');
+Meteor.subscribe('user-admin');
BlazeLayout.setRoot('body');
diff --git a/client/components/main/layouts.styl b/client/components/main/layouts.styl
index 83d4d693..349ee743 100644
--- a/client/components/main/layouts.styl
+++ b/client/components/main/layouts.styl
@@ -351,6 +351,11 @@ a
background: darken(white, 13%)
overflow-y: auto
+ a
+ text-decoration: underline
+ &:hover
+ color: #333
+
.basicTabs-container .tabs-content-container
padding: 0
padding-top: 15px
@@ -374,3 +379,8 @@ a
.wrapper
height: 100%
margin: 0px
+
+.inline-input
+ height: 37px
+ margin: 8px 10px 0 0
+ width: 50px
diff --git a/client/components/settings/invitationCode.jade b/client/components/settings/invitationCode.jade
new file mode 100644
index 00000000..171a2663
--- /dev/null
+++ b/client/components/settings/invitationCode.jade
@@ -0,0 +1,5 @@
+template(name='invitationCode')
+ .at-input#invitationcode
+ label(for='at-field-code') {{_ 'invitation-code'}}
+
+ input#at-field-invitationcode(type="text" name='at-field-invitationcode' placeholder="{{_ 'invitation-code'}}")
diff --git a/client/components/settings/invitationCode.js b/client/components/settings/invitationCode.js
new file mode 100644
index 00000000..a403d8ab
--- /dev/null
+++ b/client/components/settings/invitationCode.js
@@ -0,0 +1,6 @@
+Template.invitationCode.onRendered(() => {
+ const setting = Settings.findOne();
+ if (!setting || !setting.disableRegistration) {
+ $('#invitationcode').hide();
+ }
+});
diff --git a/client/components/settings/settingBody.jade b/client/components/settings/settingBody.jade
new file mode 100644
index 00000000..fdab3173
--- /dev/null
+++ b/client/components/settings/settingBody.jade
@@ -0,0 +1,71 @@
+template(name="setting")
+ .setting-content
+ .content-title
+ span {{_ 'settings'}}
+ .content-body
+ .side-menu
+ ul
+ li.active
+ a.js-setting-menu(data-id="registration-setting") {{_ 'registration'}}
+ li
+ a.js-setting-menu(data-id="email-setting") {{_ 'email'}}
+ .main-body
+ if loading.get
+ +spinner
+ else if generalSetting.get
+ +general
+ else if emailSetting.get
+ +email
+
+template(name="general")
+ ul#registration-setting.setting-detail
+ li
+ a.flex.js-toggle-registration
+ .materialCheckBox(class="{{#if currentSetting.disableRegistration}}is-checked{{/if}}")
+
+ span {{_ 'disable-self-registration'}}
+ li
+ .invite-people(class="{{#if currentSetting.disableRegistration}}{{else}}hide{{/if}}")
+ ul
+ li
+ .title {{_ 'invite-people'}}
+ textarea#email-to-invite.form-control(rows='5', placeholder="{{_ 'email-addresses'}}")
+ li
+ .title {{_ 'to-boards'}}
+ .bg-white
+ each boards
+ a.option.flex.js-toggle-board-choose(id= _id)
+ .materialCheckBox(data-id= _id)
+
+ span= title
+
+ li
+ button.js-email-invite.primary {{_ 'invite'}}
+
+template(name='email')
+ ul#email-setting.setting-detail
+ li.smtp-form
+ .title {{_ 'smtp-host'}}
+ .description {{_ 'smtp-host-description'}}
+ .form-group
+ input.form-control#mail-server-host(type="text", placeholder="smtp.domain.com" value="{{currentSetting.mailServer.host}}")
+ li.smtp-form
+ .title {{_ 'smtp-port'}}
+ .description {{_ 'smtp-port-description'}}
+ .form-group
+ input.form-control#mail-server-port(type="text", placeholder="25" value="{{currentSetting.mailServer.port}}")
+ li.smtp-form
+ .title {{_ 'smtp-username'}}
+ .form-group
+ input.form-control#mail-server-username(type="text", placeholder="{{_ 'username'}}" value="{{currentSetting.mailServer.username}}")
+ li.smtp-form
+ .title {{_ 'smtp-password'}}
+ .form-group
+ input.form-control#mail-server-password(type="text", placeholder="{{_ 'password'}}" value="{{currentSetting.mailServer.password}}")
+ li.smtp-form
+ .title {{_ 'send-from'}}
+ .form-group
+ input.form-control#mail-server-from(type="email", placeholder="no-reply@domain.com" value="{{currentSetting.mailServer.from}}")
+
+ li
+ button.js-save.primary Save
diff --git a/client/components/settings/settingBody.js b/client/components/settings/settingBody.js
new file mode 100644
index 00000000..0dc3c5f0
--- /dev/null
+++ b/client/components/settings/settingBody.js
@@ -0,0 +1,128 @@
+Meteor.subscribe('setting');
+Meteor.subscribe('mailServer');
+
+BlazeComponent.extendComponent({
+ onCreated() {
+ this.error = new ReactiveVar('');
+ this.loading = new ReactiveVar(false);
+ this.generalSetting = new ReactiveVar(true);
+ this.emailSetting = new ReactiveVar(false);
+ },
+
+ setError(error) {
+ this.error.set(error);
+ },
+
+ setLoading(w) {
+ this.loading.set(w);
+ },
+
+ checkField(selector) {
+ const value = $(selector).val();
+ if(!value || value.trim() === ''){
+ $(selector).parents('li.smtp-form').addClass('has-error');
+ throw Error('blank field');
+ } else {
+ return value;
+ }
+ },
+
+ currentSetting(){
+ return Settings.findOne();
+ },
+
+ boards() {
+ return Boards.find({
+ archived: false,
+ 'members.userId': Meteor.userId(),
+ 'members.isAdmin': true,
+ }, {
+ sort: ['title'],
+ });
+ },
+ toggleRegistration(){
+ this.setLoading(true);
+ const registrationClosed = this.currentSetting().disableRegistration;
+ Settings.update(Settings.findOne()._id, {$set:{disableRegistration: !registrationClosed}});
+ this.setLoading(false);
+ if(registrationClosed){
+ $('.invite-people').slideUp();
+ }else{
+ $('.invite-people').slideDown();
+ }
+ },
+
+ switchMenu(event){
+ const target = $(event.target);
+ if(!target.hasClass('active')){
+ $('.side-menu li.active').removeClass('active');
+ target.parent().addClass('active');
+ const targetID = target.data('id');
+ this.generalSetting.set('registration-setting' === targetID);
+ this.emailSetting.set('email-setting' === targetID);
+ }
+ },
+
+ checkBoard(event){
+ let target = $(event.target);
+ if(!target.hasClass('js-toggle-board-choose')){
+ target = target.parent();
+ }
+ const checkboxId = target.attr('id');
+ $(`#${checkboxId} .materialCheckBox`).toggleClass('is-checked');
+ $(`#${checkboxId}`).toggleClass('is-checked');
+ },
+
+ inviteThroughEmail(){
+ const emails = $('#email-to-invite').val().trim().split('\n').join(',').split(',');
+ const boardsToInvite = [];
+ $('.js-toggle-board-choose .materialCheckBox.is-checked').each(function () {
+ boardsToInvite.push($(this).data('id'));
+ });
+ const validEmails = [];
+ emails.forEach((email) => {
+ if (email && SimpleSchema.RegEx.Email.test(email.trim())) {
+ validEmails.push(email.trim());
+ }
+ });
+ if (validEmails.length) {
+ this.setLoading(true);
+ Meteor.call('sendInvitation', validEmails, boardsToInvite, () => {
+ // if (!err) {
+ // TODO - show more info to user
+ // }
+ this.setLoading(false);
+ });
+ }
+ },
+
+ saveMailServerInfo(){
+ this.setLoading(true);
+ $('li').removeClass('has-error');
+
+ try{
+ const host = this.checkField('#mail-server-host');
+ const port = this.checkField('#mail-server-port');
+ const username = $('#mail-server-username').val().trim();
+ const password = $('#mail-server-password').val().trim();
+ const from = this.checkField('#mail-server-from');
+ Settings.update(Settings.findOne()._id, {$set:{'mailServer.host':host, 'mailServer.port': port, 'mailServer.username': username,
+ 'mailServer.password': password, 'mailServer.from': from}});
+ } catch (e) {
+ return;
+ } finally {
+ this.setLoading(false);
+ }
+
+ },
+
+ events(){
+ return [{
+ 'click a.js-toggle-registration': this.toggleRegistration,
+ 'click a.js-setting-menu': this.switchMenu,
+ 'click a.js-toggle-board-choose': this.checkBoard,
+ 'click button.js-email-invite': this.inviteThroughEmail,
+ 'click button.js-save': this.saveMailServerInfo,
+ }];
+ },
+}).register('setting');
diff --git a/client/components/settings/settingBody.styl b/client/components/settings/settingBody.styl
new file mode 100644
index 00000000..118d364c
--- /dev/null
+++ b/client/components/settings/settingBody.styl
@@ -0,0 +1,112 @@
+.flex
+ display: -webkit-box
+ display: -moz-box
+ display: -webkit-flex
+ display: -moz-flex
+ display: -ms-flexbox
+ display: flex
+
+.setting-content
+ padding 30px
+ color: #727479
+ background: #dedede
+ width 100%
+ height 100%
+ position: absolute;
+
+ .content-title
+ font-size 20px
+
+ .content-body
+ display flex
+ padding-top 15px
+ height 100%
+
+ .side-menu
+ background-color: #f7f7f7;
+ border: 1px solid #f0f0f0;
+ border-radius: 4px;
+ width: 250px;
+ box-shadow: inset -1px -1px 3px rgba(0,0,0,.05);
+
+ ul
+
+ li
+ margin: 0.1rem 0.2rem;
+
+ &.active
+ background #fff
+ box-shadow 0 1px 2px rgba(0,0,0,0.15);
+
+ &:hover
+ background #fff
+ box-shadow 0 1px 2px rgba(0,0,0,0.15);
+ a
+ @extends .flex
+ padding: 1rem 0 1rem 1rem
+ width: 100% - 5rem
+
+
+ span
+ font-size: 13px
+
+ .main-body
+ padding: 0.1em 1em
+
+ ul
+ li
+ padding: 0.5rem 0.5rem;
+
+ a
+ .is-checked
+ border-bottom: 2px solid #2980b9;
+ border-right: 2px solid #2980b9;
+
+ span
+ padding: 0 0.5rem
+
+ .invite-people
+ padding-left 20px;
+ li
+ min-width: 500px;
+
+ ul.no-margin-bottom
+ margin-bottom: 0;
+
+ .bg-white
+ a
+ background #f7f7f7
+ &.is-checked
+ background #fff
+
+
+.option
+ @extends .flex
+ -webkit-border-radius: 3px;
+ border-radius: 3px;
+ background: #fff;
+ text-decoration: none;
+ -webkit-box-shadow: 0 1px 2px rgba(0,0,0,0.2);
+ box-shadow: 0 1px 2px rgba(0,0,0,0.2);
+ margin-top: 5px;
+ padding: 5px;
+
+.title
+ font-weight 700;
+ margin-bottom 0.5rem;
+.description
+ margin-bottom 0.5rem;
+.bg-white
+ background #f9fbfc;
+
+.form-control.has-error
+ border-color: #a94442;
+ box-shadow: inset 0 1px 1px rgba(0,0,0,.075);
+
+li.has-error
+ color #a94442
+ .form-group
+ .form-control
+ border-color: #a94442;
+ box-shadow: inset 0 1px 1px rgba(0,0,0,.075);
+
diff --git a/client/components/settings/settingHeader.jade b/client/components/settings/settingHeader.jade
new file mode 100644
index 00000000..fb884056
--- /dev/null
+++ b/client/components/settings/settingHeader.jade
@@ -0,0 +1,21 @@
+template(name="settingHeaderBar")
+ h1.header-setting-menu
+ span {{_ 'admin-panel'}}
+
+ .setting-header-btns.left
+ unless isMiniScreen
+ unless isSandstorm
+ if currentUser
+ a.setting-header-btn.settings.active
+ i.fa(class="fa-cog")
+ span {{_ 'settings'}}
+//TODO
+// a.setting-header-btn.people
+// i.fa(class="fa-users")
+// span {{_ 'people'}}
+
+ else
+ a.setting-header-btn.js-log-in(
+ title="{{_ 'log-in'}}")
+ i.fa.fa-sign-in
+ span {{_ 'log-in'}}
diff --git a/client/components/settings/settingHeader.styl b/client/components/settings/settingHeader.styl
new file mode 100644
index 00000000..995ed26d
--- /dev/null
+++ b/client/components/settings/settingHeader.styl
@@ -0,0 +1,25 @@
+#header #header-main-bar .setting-header-btn
+ &.active,
+ &:hover:not(.is-disabled)
+ background: rgba(0, 0, 0, .15)
+ color: darken(white, 5%)
+ margin-left: 20px;
+ padding-right: 10px;
+ height: 28px;
+ font-size: 13px;
+ float: left;
+ overflow: hidden;
+ line-height: @height;
+ margin: 0 2px;
+
+ i.fa
+ float: left
+ display: block
+ line-height: 28px
+ color: darken(white, 5%)
+ margin: 0 10px
+
+ + span
+ display: inline-block
+ margin-top: 1px
+ margin-right: 10px \ No newline at end of file
diff --git a/client/components/sidebar/sidebar.jade b/client/components/sidebar/sidebar.jade
index 4f5586cb..6045b371 100644
--- a/client/components/sidebar/sidebar.jade
+++ b/client/components/sidebar/sidebar.jade
@@ -1,16 +1,22 @@
template(name="sidebar")
.board-sidebar.sidebar(class="{{#if isOpen}}is-open{{/if}}")
a.sidebar-tongue.js-toggle-sidebar(
- class="{{#if isTongueHidden}}is-hidden{{/if}}")
+ class="{{#if isTongueHidden}}is-hidden{{/if}}",
+ title="{{showTongueTitle}}")
i.fa.fa-angle-left
- .sidebar-content.js-board-sidebar-content.js-perfect-scrollbar
- a.hide-btn.js-hide-sidebar
- i.fa.fa-angle-right
- unless isDefaultView
- h2
- a.fa.fa-chevron-left.js-back-home
- = getViewTitle
- +Template.dynamic(template=getViewTemplate)
+ .sidebar-shadow
+ .sidebar-content.sidebar-shortcuts
+ a.board-header-btn.js-shortcuts
+ i.fa.fa-keyboard-o
+ span {{_ 'keyboard-shortcuts' }}
+ .sidebar-content.js-board-sidebar-content.js-perfect-scrollbar
+ a.hide-btn.js-hide-sidebar
+ i.fa.fa-angle-right
+ unless isDefaultView
+ h2
+ a.fa.fa-chevron-left.js-back-home
+ = getViewTitle
+ +Template.dynamic(template=getViewTemplate)
template(name='homeSidebar')
+membersWidget
@@ -30,10 +36,13 @@ template(name="membersWidget")
.board-widget-content
each currentBoard.activeMembers
+userAvatar(userId=this.userId showStatus=true)
- unless isSandstorm
- if currentUser.isBoardAdmin
- a.member.add-member.js-manage-board-members
+ if isSandstorm
+ if currentUser.isBoardMember
+ a.member.add-member.sandstorm-powerbox-request-identity
i.fa.fa-plus
+ else if currentUser.isBoardAdmin
+ a.member.add-member.js-manage-board-members
+ i.fa.fa-plus
.clearfix
if isInvited
hr
@@ -51,7 +60,7 @@ template(name="labelsWidget")
.board-widget-content
each currentBoard.labels
a.card-label(class="card-label-{{color}}"
- class="{{#if currentUser.isBoardMember}}js-label{{/if}}")
+ class="{{#if currentUser.isNotCommentOnly}}js-label{{/if}}")
span.card-label-name= name
if currentUser.isBoardAdmin
a.card-label.add-label.js-add-label
@@ -129,9 +138,15 @@ template(name="changePermissionsPopup")
li
a(class="{{#if isLastAdmin}}disabled{{else}}js-set-normal{{/if}}")
| {{_ 'normal'}}
- unless isAdmin
+ if isNormal
i.fa.fa-check
span.sub-name {{_ 'normal-desc'}}
+ li
+ a(class="{{#if isLastAdmin}}disabled{{else}}js-set-comment-only{{/if}}")
+ | {{_ 'comment-only'}}
+ if isCommentOnly
+ i.fa.fa-check
+ span.sub-name {{_ 'comment-only-desc'}}
if isLastAdmin
hr
p.quiet.bottom {{_ 'last-admin-desc'}}
diff --git a/client/components/sidebar/sidebar.js b/client/components/sidebar/sidebar.js
index 0af32f8f..1290fd13 100644
--- a/client/components/sidebar/sidebar.js
+++ b/client/components/sidebar/sidebar.js
@@ -89,11 +89,21 @@ BlazeComponent.extendComponent({
return TAPi18n.__(viewTitles[this.getView()]);
},
+ showTongueTitle() {
+ if (this.isOpen())
+ return `${TAPi18n.__('sidebar-close')}`;
+ else
+ return `${TAPi18n.__('sidebar-open')}`;
+ },
+
events() {
return [{
'click .js-hide-sidebar': this.hide,
'click .js-toggle-sidebar': this.toggle,
'click .js-back-home': this.setView,
+ 'click .js-shortcuts'() {
+ FlowRouter.go('shortcuts');
+ },
}];
},
}).register('sidebar');
@@ -111,7 +121,17 @@ Template.memberPopup.helpers({
},
memberType() {
const type = Users.findOne(this.userId).isBoardAdmin() ? 'admin' : 'normal';
- return TAPi18n.__(type).toLowerCase();
+ if(type === 'normal'){
+ const currentBoard = Boards.findOne(Session.get('currentBoard'));
+ const commentOnly = currentBoard.hasCommentOnly(this.userId);
+ if(commentOnly){
+ return TAPi18n.__('comment-only').toLowerCase();
+ } else {
+ return TAPi18n.__(type).toLowerCase();
+ }
+ } else {
+ return TAPi18n.__(type).toLowerCase();
+ }
},
isInvited() {
return Users.findOne(this.userId).isInvitedTo(Session.get('currentBoard'));
@@ -134,8 +154,8 @@ Template.memberPopup.events({
Popup.close();
}),
'click .js-leave-member'() {
- const currentBoard = Boards.findOne(Session.get('currentBoard'));
- Meteor.call('quitBoard', currentBoard, (err, ret) => {
+ const boardId = Session.get('currentBoard');
+ Meteor.call('quitBoard', boardId, (err, ret) => {
if (!ret && ret) {
Popup.close();
FlowRouter.go('home');
@@ -163,6 +183,9 @@ Template.membersWidget.helpers({
Template.membersWidget.events({
'click .js-member': Popup.open('member'),
'click .js-manage-board-members': Popup.open('addMember'),
+ 'click .sandstorm-powerbox-request-identity'() {
+ window.sandstormRequestIdentity();
+ },
'click .js-member-invite-accept'() {
const boardId = Session.get('currentBoard');
Meteor.user().removeInvite(boardId);
@@ -295,11 +318,12 @@ BlazeComponent.extendComponent({
}).register('addMemberPopup');
Template.changePermissionsPopup.events({
- 'click .js-set-admin, click .js-set-normal'(event) {
+ 'click .js-set-admin, click .js-set-normal, click .js-set-comment-only'(event) {
const currentBoard = Boards.findOne(Session.get('currentBoard'));
const memberId = this.userId;
const isAdmin = $(event.currentTarget).hasClass('js-set-admin');
- currentBoard.setMemberPermission(memberId, isAdmin);
+ const isCommentOnly = $(event.currentTarget).hasClass('js-set-comment-only');
+ currentBoard.setMemberPermission(memberId, isAdmin, isCommentOnly);
Popup.back(1);
},
});
@@ -310,6 +334,16 @@ Template.changePermissionsPopup.helpers({
return currentBoard.hasAdmin(this.userId);
},
+ isNormal() {
+ const currentBoard = Boards.findOne(Session.get('currentBoard'));
+ return !currentBoard.hasAdmin(this.userId) && !currentBoard.hasCommentOnly(this.userId);
+ },
+
+ isCommentOnly() {
+ const currentBoard = Boards.findOne(Session.get('currentBoard'));
+ return !currentBoard.hasAdmin(this.userId) && currentBoard.hasCommentOnly(this.userId);
+ },
+
isLastAdmin() {
const currentBoard = Boards.findOne(Session.get('currentBoard'));
return currentBoard.hasAdmin(this.userId) && (currentBoard.activeAdmins() === 1);
diff --git a/client/components/sidebar/sidebar.styl b/client/components/sidebar/sidebar.styl
index 9007af59..8f2f493e 100644
--- a/client/components/sidebar/sidebar.styl
+++ b/client/components/sidebar/sidebar.styl
@@ -6,11 +6,19 @@
bottom: 0
right: 0
- .sidebar-content
- padding: 12px
+ .sidebar-shadow
+ position: absolute
+ top: 0
+ bottom: 0
+ right: 0
+ left: 0
background: darken(white, 3%)
box-shadow: -10px 0px 5px -10px darken(white, 30%)
z-index: 10
+
+ .sidebar-content
+ padding: 12px
+ margin-bottom: 1.6em
position: absolute
top: 0
bottom: 0
@@ -51,6 +59,7 @@
.member, .card-label
margin-right: 7px
+ margin-top: 5px
.sidebar-list-item-description
flex: 1
@@ -72,6 +81,16 @@
i.fa
margin-right: 10px
+ .sidebar-shortcuts
+ margin: 0
+ padding: 0
+ top: auto
+ text-align: center
+ font-size: 0.8em
+ line-height: 1.6em
+ vertical-align: middle
+ color: darken(white, 40%)
+
.board-sidebar
width: 248px
right: -@width
diff --git a/client/components/sidebar/sidebarFilters.jade b/client/components/sidebar/sidebarFilters.jade
index 2b326493..9a9774bb 100644
--- a/client/components/sidebar/sidebarFilters.jade
+++ b/client/components/sidebar/sidebarFilters.jade
@@ -5,6 +5,12 @@
template(name="filterSidebar")
ul.sidebar-list
+ li(class="{{#if Filter.labelIds.isSelected undefined}}active{{/if}}")
+ a.name.js-toggle-label-filter
+ span.sidebar-list-item-description
+ | {{_ 'filter-no-label'}}
+ if Filter.labelIds.isSelected undefined
+ i.fa.fa-check
each currentBoard.labels
li
a.name.js-toggle-label-filter
@@ -18,6 +24,12 @@ template(name="filterSidebar")
i.fa.fa-check
hr
ul.sidebar-list
+ li(class="{{#if Filter.members.isSelected undefined}}active{{/if}}")
+ a.name.js-toggle-member-filter
+ span.sidebar-list-item-description
+ | {{_ 'filter-no-member'}}
+ if Filter.members.isSelected undefined
+ i.fa.fa-check
each currentBoard.activeMembers
with getUser userId
li(class="{{#if Filter.members.isSelected _id}}active{{/if}}")
@@ -86,4 +98,3 @@ template(name="disambiguateMultiMemberPopup")
template(name="moveSelectionPopup")
+boardLists
-
diff --git a/client/components/users/userHeader.jade b/client/components/users/userHeader.jade
index a71e7fc7..51b0888b 100644
--- a/client/components/users/userHeader.jade
+++ b/client/components/users/userHeader.jade
@@ -12,10 +12,13 @@ template(name="memberMenuPopup")
ul.pop-over-list
with currentUser
li: a.js-edit-profile {{_ 'edit-profile'}}
- li: a.js-change-avatar {{_ 'edit-avatar'}}
- li: a.js-change-password {{_ 'changePasswordPopup-title'}}
- li: a.js-change-language {{_ 'changeLanguagePopup-title'}}
- li: a.js-edit-notification {{_ 'editNotificationPopup-title'}}
+ li: a.js-change-settings {{_ 'change-settings'}}
+ li: a.js-change-avatar {{_ 'edit-avatar'}}
+ li: a.js-change-password {{_ 'changePasswordPopup-title'}}
+ li: a.js-change-language {{_ 'changeLanguagePopup-title'}}
+ li: a.js-edit-notification {{_ 'editNotificationPopup-title'}}
+ if currentUser.isAdmin
+ li: a.js-go-setting(href='/setting') {{_ 'admin-panel'}}
hr
ul.pop-over-list
li: a.js-logout {{_ 'log-out'}}
@@ -27,6 +30,8 @@ template(name="editProfilePopup")
input.js-profile-fullname(type="text" value=profile.fullname autofocus)
label
| {{_ 'username'}}
+ span.error.hide.username-taken
+ | {{_ 'error-username-taken'}}
input.js-profile-username(type="text" value=username)
label
| {{_ 'initials'}}
@@ -61,3 +66,16 @@ template(name="changeLanguagePopup")
= name
if isCurrentLanguage
i.fa.fa-check
+
+template(name="changeSettingsPopup")
+ ul.pop-over-list
+ li
+ a.js-toggle-system-messages
+ | {{_ 'hide-system-messages'}}
+ if hiddenSystemMessages
+ i.fa.fa-check
+ li
+ label.bold
+ | {{_ 'show-cards-minimum-count'}}
+ input#show-cards-count-at.inline-input.left(type="number" value="#{showCardsCountAt}" min="1" max="99" onkeydown="return false")
+ input.js-apply-show-cards-at.left(type="submit" value="{{_ 'apply'}}")
diff --git a/client/components/users/userHeader.js b/client/components/users/userHeader.js
index 10fdf699..73a11fc0 100644
--- a/client/components/users/userHeader.js
+++ b/client/components/users/userHeader.js
@@ -5,6 +5,7 @@ Template.headerUserBar.events({
Template.memberMenuPopup.events({
'click .js-edit-profile': Popup.open('editProfile'),
+ 'click .js-change-settings': Popup.open('changeSettings'),
'click .js-change-avatar': Popup.open('changeAvatar'),
'click .js-change-password': Popup.open('changePassword'),
'click .js-change-language': Popup.open('changeLanguage'),
@@ -14,6 +15,9 @@ Template.memberMenuPopup.events({
AccountsTemplates.logout();
},
+ 'click .js-go-setting'() {
+ Popup.close();
+ },
});
Template.editProfilePopup.events({
@@ -26,11 +30,18 @@ Template.editProfilePopup.events({
'profile.fullname': fullname,
'profile.initials': initials,
}});
- // XXX We should report the error to the user.
+
if (username !== Meteor.user().username) {
- Meteor.call('setUsername', username);
- }
- Popup.back();
+ Meteor.call('setUsername', username, function(error) {
+ const messageElement = tpl.$('.username-taken');
+ if (error) {
+ messageElement.show();
+ } else {
+ messageElement.hide();
+ Popup.back();
+ }
+ });
+ } else Popup.back();
},
});
@@ -82,3 +93,26 @@ Template.changeLanguagePopup.events({
evt.preventDefault();
},
});
+
+Template.changeSettingsPopup.helpers({
+ hiddenSystemMessages() {
+ return Meteor.user().hasHiddenSystemMessages();
+ },
+ showCardsCountAt() {
+ return Meteor.user().getLimitToShowCardsCount();
+ },
+});
+
+Template.changeSettingsPopup.events({
+ 'click .js-toggle-system-messages'() {
+ Meteor.call('toggleSystemMessages');
+ },
+ 'click .js-apply-show-cards-at'(evt, tpl) {
+ evt.preventDefault();
+ const minLimit = parseInt(tpl.$('#show-cards-count-at').val(), 10);
+ if (!isNaN(minLimit)) {
+ Meteor.call('changeLimitToShowCardsCount', minLimit);
+ Popup.back();
+ }
+ },
+});
diff --git a/client/config/blazeHelpers.js b/client/config/blazeHelpers.js
index ef075907..73ee24b6 100644
--- a/client/config/blazeHelpers.js
+++ b/client/config/blazeHelpers.js
@@ -18,6 +18,4 @@ Blaze.registerHelper('currentCard', () => {
Blaze.registerHelper('getUser', (userId) => Users.findOne(userId));
-Blaze.registerHelper('concat', function (...args) {
- return Array.prototype.slice.call(args, 0, -1).join('');
-});
+Blaze.registerHelper('concat', (...args) => args.slice(0, -1).join(''));
diff --git a/client/lib/escapeActions.js b/client/lib/escapeActions.js
index 49b80422..dc6b05b7 100644
--- a/client/lib/escapeActions.js
+++ b/client/lib/escapeActions.js
@@ -44,7 +44,7 @@ EscapeActions = {
executeLowest() {
return this._execute({
- multipleAction: false,
+ multipleActions: false,
});
},
diff --git a/client/lib/filter.js b/client/lib/filter.js
index 74305284..8129776b 100644
--- a/client/lib/filter.js
+++ b/client/lib/filter.js
@@ -63,6 +63,17 @@ class SetFilter {
this._dep.depend();
return { $in: this._selectedElements };
}
+
+ _getEmptySelector() {
+ this._dep.depend();
+ let includeEmpty = false;
+ this._selectedElements.forEach((el) => {
+ if (el === undefined) {
+ includeEmpty = true;
+ }
+ });
+ return includeEmpty ? { $eq: [] } : null;
+ }
}
// The global Filter object.
@@ -95,16 +106,26 @@ Filter = {
return {};
const filterSelector = {};
+ const emptySelector = {};
+ let includeEmptySelectors = false;
this._fields.forEach((fieldName) => {
const filter = this[fieldName];
- if (filter._isActive())
+ if (filter._isActive()) {
filterSelector[fieldName] = filter._getMongoSelector();
+ emptySelector[fieldName] = filter._getEmptySelector();
+ if (emptySelector[fieldName] !== null) {
+ includeEmptySelectors = true;
+ }
+ }
});
const exceptionsSelector = {_id: {$in: this._exceptions}};
this._exceptionsDep.depend();
- return {$or: [filterSelector, exceptionsSelector]};
+ if (includeEmptySelectors)
+ return {$or: [filterSelector, exceptionsSelector, emptySelector]};
+ else
+ return {$or: [filterSelector, exceptionsSelector]};
},
mongoSelector(additionalSelector) {
diff --git a/client/lib/i18n.js b/client/lib/i18n.js
index e49a0001..4c02211a 100644
--- a/client/lib/i18n.js
+++ b/client/lib/i18n.js
@@ -2,26 +2,25 @@
// the language reactively. If the user is not connected we use the language
// information provided by the browser, and default to english.
-Tracker.autorun(() => {
- const currentUser = Meteor.user();
- let language;
- if (currentUser) {
- language = currentUser.profile && currentUser.profile.language;
- }
-
- if (!language) {
- if(navigator.languages) {
- language = navigator.languages[0];
- } else {
- language = navigator.language || navigator.userLanguage;
+Meteor.startup(() => {
+ Tracker.autorun(() => {
+ const currentUser = Meteor.user();
+ let language;
+ if (currentUser) {
+ language = currentUser.profile && currentUser.profile.language;
}
- }
- if (language) {
- TAPi18n.setLanguage(language);
+ if (!language) {
+ if(navigator.languages) {
+ language = navigator.languages[0];
+ } else {
+ language = navigator.language || navigator.userLanguage;
+ }
+ }
- // XXX
- const shortLanguage = language.split('-')[0];
- T9n.setLanguage(shortLanguage);
- }
+ if (language) {
+ TAPi18n.setLanguage(language);
+ T9n.setLanguage(language);
+ }
+ });
});
diff --git a/client/lib/utils.js b/client/lib/utils.js
index 4f772a60..9a9ff654 100644
--- a/client/lib/utils.js
+++ b/client/lib/utils.js
@@ -27,7 +27,7 @@ Utils = {
// in fact, what we really care is screen size
// large mobile device like iPad or android Pad has a big screen, it should also behave like a desktop
// in a small window (even on desktop), Wekan run in compact mode.
- // we can easily debug with a small window of desktop broswer. :-)
+ // we can easily debug with a small window of desktop browser. :-)
isMiniScreen() {
this.windowResizeDep.depend();
return $(window).width() <= 800;
diff --git a/config/accounts.js b/config/accounts.js
index 9ab26b33..279325fb 100644
--- a/config/accounts.js
+++ b/config/accounts.js
@@ -1,19 +1,32 @@
const passwordField = AccountsTemplates.removeField('password');
const emailField = AccountsTemplates.removeField('email');
+
AccountsTemplates.addFields([{
_id: 'username',
type: 'text',
displayName: 'username',
required: true,
minLength: 2,
-}, emailField, passwordField]);
+}, emailField, passwordField, {
+ _id: 'invitationcode',
+ type: 'text',
+ displayName: 'Invitation Code',
+ required: false,
+ minLength: 6,
+ template: 'invitationCode',
+}]);
+
+let sendVerificationEmail = false;
+if (process.env.MAIL_URL) {
+ sendVerificationEmail = true;
+}
AccountsTemplates.configure({
defaultLayout: 'userFormsLayout',
defaultContentRegion: 'content',
confirmPassword: false,
enablePasswordChange: true,
- sendVerificationEmail: true,
+ sendVerificationEmail,
showForgotPasswordLink: true,
onLogoutHook() {
const homePage = 'home';
@@ -48,9 +61,6 @@ AccountsTemplates.configureRoute('changePwd', {
});
if (Meteor.isServer) {
- if (process.env.MAIL_FROM) {
- Accounts.emailTemplates.from = process.env.MAIL_FROM;
- }
['resetPassword-subject', 'resetPassword-text', 'verifyEmail-subject', 'verifyEmail-text', 'enrollAccount-subject', 'enrollAccount-text'].forEach((str) => {
const [templateName, field] = str.split('-');
diff --git a/config/router.js b/config/router.js
index 7194621b..72592bd6 100644
--- a/config/router.js
+++ b/config/router.js
@@ -99,6 +99,26 @@ FlowRouter.route('/import', {
},
});
+FlowRouter.route('/setting', {
+ name: 'setting',
+ triggersEnter: [
+ AccountsTemplates.ensureSignedIn,
+ () => {
+ Session.set('currentBoard', null);
+ Session.set('currentCard', null);
+
+ Filter.reset();
+ EscapeActions.executeAll();
+ },
+ ],
+ action() {
+ BlazeLayout.render('defaultLayout', {
+ headerBar: 'settingHeaderBar',
+ content: 'setting',
+ });
+ },
+});
+
FlowRouter.notFound = {
action() {
BlazeLayout.render('defaultLayout', { content: 'notFound' });
diff --git a/docker-compose.yml b/docker-compose.yml
index b9f02a48..35c5bfd1 100644
--- a/docker-compose.yml
+++ b/docker-compose.yml
@@ -1,31 +1,49 @@
-# You can read the Docker Compose documentation at:
-#
-# https://docs.docker.com/compose/
-#
-# Run with file with `docker-compose up -d`.
-#
-# We use two separate Docker containers: one for the database and one for the
-# Wekan application. The Wekan container doensn’t contain any mutable state
-# (all the user data, even uploads, are saved in the database) so updating it
-# is as simple as stoping the old version and starting the new one. If you want
-# to update the database you need to uncomment the volume section below.
+version: '2'
-wekandb:
- image: mongo
-# volumes:
-# - ./data/runtime/db:/data/db
-# - ./data/dump:/dump
- command: mongod --smallfiles --oplogSize 128
- ports:
- - 27017
+services:
-wekan:
- image: mquandalle/wekan
- links:
- - wekandb
- environment:
- - MONGO_URL=mongodb://wekandb/wekan
- - ROOT_URL=http://localhost:80
- ports:
- - 80:80
+ wekandb:
+ image: mongo:3.2.11
+ container_name: wekan-db
+ restart: always
+ command: mongod --smallfiles --oplogSize 128
+ networks:
+ - wekan-tier
+ expose:
+ - 27017
+ volumes:
+ - wekan-db:/data/db
+ - wekan-db-dump:/dump
+ wekan:
+ image: mquandalle/wekan:latest
+ container_name: wekan-app
+ restart: always
+ networks:
+ - wekan-tier
+ build:
+ context: .
+ dockerfile: Dockerfile
+ args:
+ - NODE_VERSION=${NODE_VERSION}
+ - METEOR_RELEASE=${METEOR_RELEASE}
+ - NPM_VERSION=${NPM_VERSION}
+ - ARCHITECTURE=${ARCHITECTURE}
+ - SRC_PATH=${SRC_PATH}
+ ports:
+ - 80:80
+ environment:
+ - MONGO_URL=mongodb://wekandb:27017/wekan
+ - ROOT_URL=http://localhost
+ depends_on:
+ - wekandb
+
+volumes:
+ wekan-db:
+ driver: local
+ wekan-db-dump:
+ driver: local
+
+networks:
+ wekan-tier:
+ driver: bridge
diff --git a/i18n/ar.i18n.json b/i18n/ar.i18n.json
index 225b0975..1dec6a93 100755..100644
--- a/i18n/ar.i18n.json
+++ b/i18n/ar.i18n.json
@@ -1,5 +1,25 @@
{
"accept": "Accept",
+ "act-activity-notify": "[Wekan] Activity Notification",
+ "act-addAttachment": "attached __attachment__ to __card__",
+ "act-addComment": "commented on __card__: __comment__",
+ "act-createBoard": "created __board__",
+ "act-createCard": "added __card__ to __list__",
+ "act-createList": "added __list__ to __board__",
+ "act-addBoardMember": "added __member__ to __board__",
+ "act-archivedBoard": "archived __board__",
+ "act-archivedCard": "archived __card__",
+ "act-archivedList": "archived __list__",
+ "act-importBoard": "imported __board__",
+ "act-importCard": "imported __card__",
+ "act-importList": "imported __list__",
+ "act-joinMember": "added __member__ to __card__",
+ "act-moveCard": "moved __card__ from __oldList__ to __list__",
+ "act-removeBoardMember": "removed __member__ from __board__",
+ "act-restoredCard": "restored __card__ to __board__",
+ "act-unjoinMember": "removed __member__ from __card__",
+ "act-withBoardTitle": "[Wekan] __board__",
+ "act-withCardTitle": "[__board__] __card__",
"actions": "الإجراءات",
"activities": "الأنشطة",
"activity": "النشاط",
@@ -16,10 +36,13 @@
"activity-removed": "حذف %s إلى %s",
"activity-sent": "إرسال %s إلى %s",
"activity-unjoined": "غادر %s",
+ "activity-checklist-added": "added checklist to %s",
"add": "أضف",
"add-attachment": "إرفاق ملف",
"add-board": "إضافة لوحة",
"add-card": "إضافة بطاقة",
+ "add-checklist": "Add a checklist",
+ "add-checklist-item": "Add an item to checklist",
"add-cover": "إضافة غلاف",
"add-label": "إضافة علامة",
"add-list": "إضافة قائمة",
@@ -31,6 +54,8 @@
"all-boards": "كل اللوحات",
"and-n-other-card": "And __count__ other بطاقة",
"and-n-other-card_plural": "And __count__ other بطاقات",
+ "apply": "Apply",
+ "app-is-offline": "The application is currently offline, refreshing the page will cause data loss.",
"archive": "أرشف",
"archive-all": "أرشف الكل",
"archive-board": "أرشف اللوحة",
@@ -46,6 +71,7 @@
"attachment-delete-pop": "حذف المرق هو حذف نهائي . لا يمكن التراجع إذا حذف.",
"attachmentDeletePopup-title": "تريد حذف المرفق ?",
"attachments": "المرفقات",
+ "auto-watch": "Automatically watch boards when create it",
"avatar-too-big": "حجم ملف الصورة الخاصة بك كبير . لا يمكن أن تتجاوز 70 كيلو أكتي",
"back": "رجوع",
"board-change-color": "تغيير اللومr",
@@ -56,7 +82,7 @@
"boardChangeColorPopup-title": "تعديل خلفية الشاشة",
"boardChangeTitlePopup-title": "إعادة تسمية اللوحة",
"boardChangeVisibilityPopup-title": "تعديل وضوح الرؤية",
- "boardImportBoardPopup-title": "Import board from Trello",
+ "boardChangeWatchPopup-title": "Change Watch",
"boardMenuPopup-title": "قائمة اللوحة",
"boards": "لوحات",
"bucket-example": "مثل « todo list » على سبيل المثال",
@@ -66,11 +92,15 @@
"card-delete-notice": "هذا حذف أبديّ . سوف تفقد كل الإجراءات المنوطة بهذه البطاقة",
"card-delete-pop": "سيتم إزالة جميع الإجراءات من تبعات النشاط، وأنك لن تكون قادرا على إعادة فتح البطاقة. لا يوجد التراجع.",
"card-delete-suggest-archive": "يمكنك أرشفة بطاقة لحذفها من اللوحة والمحافظة على النشاط.",
+ "card-due": "Due",
+ "card-due-on": "Due on",
"card-edit-attachments": "تعديل المرفقات",
"card-edit-labels": "تعديل العلامات",
"card-edit-members": "تعديل الأعضاء",
"card-labels-title": "تعديل علامات البطاقة.",
"card-members-title": "إضافة او حذف أعضاء للبطاقة.",
+ "card-start": "Start",
+ "card-start-on": "Starts on",
"cardAttachmentsPopup-title": "إرفاق من",
"cardDeletePopup-title": "حذف البطاقة ?",
"cardDetailsActionsPopup-title": "إجراءات على البطاقة",
@@ -82,10 +112,13 @@
"change-avatar": "تعديل الصورة الشخصية",
"change-password": "تغيير كلمة المرور",
"change-permissions": "تعديل الصلاحيات",
+ "change-settings": "Change Settings",
"changeAvatarPopup-title": "تعديل الصورة الشخصية",
"changeLanguagePopup-title": "تغيير اللغة",
"changePasswordPopup-title": "تغيير كلمة المرور",
"changePermissionsPopup-title": "تعديل الصلاحيات",
+ "changeSettingsPopup-title": "Change Settings",
+ "checklists": "Checklists",
"click-to-star": "اضغط لإضافة اللوحة للمفضلة.",
"click-to-unstar": "اضغط لحذف اللوحة من المفضلة.",
"clipboard": "Clipboard or drag & drop",
@@ -104,11 +137,14 @@
"color-yellow": "yellow",
"comment": "تعليق",
"comment-placeholder": "صياغة تعليق",
+ "comment-only": "Limited",
+ "comment-only-desc": "Can comment on cards only.",
"computer": "حاسوب",
"create": "إنشاء",
"createBoardPopup-title": "إنشاء لوحة",
"createLabelPopup-title": "إنشاء علامة",
"current": "الحالي",
+ "date": "Date",
"decline": "Decline",
"default-avatar": "صورة شخصية افتراضية",
"delete": "حذف",
@@ -122,7 +158,10 @@
"edit": "تعديل",
"edit-avatar": "تعديل الصورة الشخصية",
"edit-profile": "تعديل الملف الشخصي",
+ "editCardStartDatePopup-title": "Change start date",
+ "editCardDueDatePopup-title": "Change due date",
"editLabelPopup-title": "تعديل العلامة",
+ "editNotificationPopup-title": "Edit Notification",
"editProfilePopup-title": "تعديل الملف الشخصي",
"email": "البريد الإلكتروني",
"email-enrollAccount-subject": "An account created for you on __siteName__",
@@ -146,27 +185,34 @@
"error-user-doesNotExist": "This user does not exist",
"error-user-notAllowSelf": "This action on self is not allowed",
"error-user-notCreated": "This user is not created",
+ "error-username-taken": "This username is already taken",
"export-board": "Export board",
"filter": "تصفية",
"filter-cards": "تصفية البطاقات",
"filter-clear": "مسح التصفية",
+ "filter-no-label": "No label",
+ "filter-no-member": "No member",
"filter-on": "التصفية تشتغل",
"filter-on-desc": "أنت بصدد تصفية بطاقات هذه اللوحة. اضغط هنا لتعديل التصفية.",
"filter-to-selection": "تصفية بالتحديد",
"fullname": "الإسم الكامل",
"header-logo-title": "الرجوع إلى صفحة اللوحات",
+ "hide-system-messages": "Hide system messages",
+ "headerBarCreateBoardPopup-title": "إنشاء لوحة",
"home": "الرئيسية",
"import": "Import",
"import-board": "import from Trello",
+ "import-board-title": "Import board from Trello",
"import-board-trello-instruction": "In your Trello board, go to 'Menu', then 'More', 'Print and Export', 'Export JSON', and copy the resulting text",
- "import-card": "Import a Trello card",
- "import-card-trello-instruction": "Go to a Trello card, select 'Share and more...' then 'Export JSON' and copy the resulting text",
"import-json-placeholder": "Paste your valid JSON data here",
+ "import-map-members": "Map members",
"import-members-map": "Your imported board has some members. Please map the members you want to import to Wekan users",
"import-show-user-mapping": "Review members mapping",
"import-user-select": "Pick the Wekan user you want to use as this member",
+ "importMapMembersAddPopup-title": "Select Wekan member",
"info": "معلومات",
"initials": "أولية",
+ "invalid-date": "Invalid date",
"joined": "انضمّ",
"just-invited": "You are just invited to this board",
"keyboard-shortcuts": "اختصار لوحة المفاتيح",
@@ -186,17 +232,20 @@
"listImportCardPopup-title": "Import a Trello card",
"lists": "القائمات",
"log-out": "تسجيل الخروج",
+ "log-in": "تسجيل الدخول",
"loginPopup-title": "تسجيل الدخول",
- "mapMembersAddPopup-title": "Select Wekan member",
- "mapMembersPopup-title": "Map members",
"memberMenuPopup-title": "أفضليات الأعضاء",
"members": "أعضاء",
"menu": "القائمة",
"move-selection": "Move selection",
"moveCardPopup-title": "نقل البطاقة",
+ "moveCardToBottom-title": "Move to Bottom",
+ "moveCardToTop-title": "Move to Top",
"moveSelectionPopup-title": "Move selection",
"multi-selection": "تحديد أكثر من واحدة",
"multi-selection-on": "Multi-Selection is on",
+ "muted": "Muted",
+ "muted-info": "You will never be notified of any changes in this board",
"my-boards": "لوحاتي",
"name": "اسم",
"no-archived-cards": "لا يوجد بطاقة في الأرشيف.",
@@ -205,12 +254,15 @@
"normal": "عادي",
"normal-desc": "يمكن مشاهدة و تعديل البطاقات. لا يمكن تغيير إعدادات الضبط.",
"not-accepted-yet": "Invitation not accepted yet",
+ "notify-participate": "Receive updates to any cards you participate as creater or member",
+ "notify-watch": "Receive updates to any boards, lists, or cards you’re watching",
"optional": "اختياري",
"or": "or",
"page-maybe-private": "قدتكون هذه الصفحة خاصة . قد تستطيع مشاهدتها ب <a href='%s'>تسجيل الدخول</a>.",
"page-not-found": "صفحة غير موجودة",
"password": "كلمة المرور",
"paste-or-dragdrop": "to paste, or drag & drop image file to it (image only)",
+ "participating": "Participating",
"preview": "Preview",
"previewAttachedImagePopup-title": "Preview",
"previewClipboardImagePopup-title": "Preview",
@@ -223,6 +275,7 @@
"remove-cover": "حذف الغلاف",
"remove-from-board": "حذف من اللوحة",
"remove-label": "حذف هذه العلامة",
+ "remove-list": "Remove the list",
"remove-member": "حذف العضو",
"remove-member-from-card": "حذف من البطاقة",
"remove-member-pop": "حذف __name__ (__username__) من __boardTitle__ ? سيتم حذف هذا العضو من جميع بطاقة اللوحة مع إرسال إشعار له بذاك.",
@@ -242,6 +295,9 @@
"shortcut-show-shortcuts": "عرض قائمة الإختصارات ،تلك",
"shortcut-toggle-filterbar": "Toggle Filter Sidebar",
"shortcut-toggle-sidebar": "إظهار-إخفاء الشريط الجانبي للوحة",
+ "show-cards-minimum-count": "Show cards count if list contains more than",
+ "sidebar-open": "Open Sidebar",
+ "sidebar-close": "Close Sidebar",
"signupPopup-title": "إنشاء حساب",
"star-board-title": "اضغط لإضافة هذه اللوحة إلى المفضلة . سوف يتم إظهارها على رأس بقية اللوحات.",
"starred-boards": "اللوحات المفضلة",
@@ -250,14 +306,44 @@
"team": "فريق",
"this-board": "هذه اللوحة",
"this-card": "هذه البطاقة",
+ "time": "Time",
"title": "عنوان",
+ "tracking": "Tracking",
+ "tracking-info": "You will be notified of any changes to those cards you are involved as creator or member.",
"unassign-member": "إلغاء تعيين العضو",
"unsaved-description": "لديك وصف غير محفوظ",
+ "unwatch": "Unwatch",
"upload": "Upload",
"upload-avatar": "رفع صورة شخصية",
"uploaded-avatar": "تم رفع الصورة الشخصية",
"username": "اسم المستخدم",
"view-it": "شاهدها",
"warn-list-archived": "انتبه : هذه البطاقة في أرشيف القائمات",
- "what-to-do": "ماذا تريد أن تنجز?"
-}
+ "watch": "Watch",
+ "watching": "Watching",
+ "watching-info": "You will be notified of any change in this board",
+ "welcome-board": "Welcome Board",
+ "welcome-list1": "Basics",
+ "welcome-list2": "Advanced",
+ "what-to-do": "ماذا تريد أن تنجز?",
+ "admin-panel": "Admin Panel",
+ "settings": "Settings",
+ "people": "People",
+ "registration": "Registration",
+ "disable-self-registration": "Disable Self-Registration",
+ "invite": "Invite",
+ "invite-people": "Invite People",
+ "to-boards": "To board(s)",
+ "email-addresses": "Email Addresses",
+ "smtp-host-description": "The address of the SMTP server that handles your emails.",
+ "smtp-port-description": "The port your SMTP server uses for outgoing emails.",
+ "smtp-host": "SMTP Host",
+ "smtp-port": "SMTP Port",
+ "smtp-username": "اسم المستخدم",
+ "smtp-password": "كلمة المرور",
+ "send-from": "From",
+ "invitation-code": "Invitation Code",
+ "email-invite-register-subject": "__inviter__ sent you an invitation",
+ "email-invite-register-text": "Dear __user__,\n\n__inviter__ invites you to Wekan for collaborations.\n\nPlease follow the link below:\n__url__\n\nAnd your invitation code is: __icode__\n\nThanks.",
+ "error-invitation-code-not-exist": "Invitation code doesn't exist"
+} \ No newline at end of file
diff --git a/i18n/br.i18n.json b/i18n/br.i18n.json
new file mode 100644
index 00000000..7a85b212
--- /dev/null
+++ b/i18n/br.i18n.json
@@ -0,0 +1,349 @@
+{
+ "accept": "Asantiñ",
+ "act-activity-notify": "[Wekan] Activity Notification",
+ "act-addAttachment": "attached __attachment__ to __card__",
+ "act-addComment": "commented on __card__: __comment__",
+ "act-createBoard": "created __board__",
+ "act-createCard": "added __card__ to __list__",
+ "act-createList": "added __list__ to __board__",
+ "act-addBoardMember": "added __member__ to __board__",
+ "act-archivedBoard": "archived __board__",
+ "act-archivedCard": "archived __card__",
+ "act-archivedList": "archived __list__",
+ "act-importBoard": "imported __board__",
+ "act-importCard": "imported __card__",
+ "act-importList": "imported __list__",
+ "act-joinMember": "added __member__ to __card__",
+ "act-moveCard": "moved __card__ from __oldList__ to __list__",
+ "act-removeBoardMember": "removed __member__ from __board__",
+ "act-restoredCard": "restored __card__ to __board__",
+ "act-unjoinMember": "removed __member__ from __card__",
+ "act-withBoardTitle": "[Wekan] __board__",
+ "act-withCardTitle": "[__board__] __card__",
+ "actions": "Oberoù",
+ "activities": "Oberiantizoù",
+ "activity": "Oberiantiz",
+ "activity-added": "%s ouzhpennet da %s",
+ "activity-archived": "%s diellaouet",
+ "activity-attached": "%s liammet ouzh %s",
+ "activity-created": "%s krouet",
+ "activity-excluded": "excluded %s from %s",
+ "activity-imported": "%s enporzhiet eus %s da %s",
+ "activity-imported-board": "%s enporzhiet da %s",
+ "activity-joined": "joined %s",
+ "activity-moved": "moved %s from %s to %s",
+ "activity-on": "on %s",
+ "activity-removed": "removed %s from %s",
+ "activity-sent": "sent %s to %s",
+ "activity-unjoined": "unjoined %s",
+ "activity-checklist-added": "added checklist to %s",
+ "add": "Ouzhpenn",
+ "add-attachment": "Add an attachment",
+ "add-board": "Add a new board",
+ "add-card": "Ouzhpenn ur gartenn",
+ "add-checklist": "Add a checklist",
+ "add-checklist-item": "Add an item to checklist",
+ "add-cover": "Ouzphenn ur golo",
+ "add-label": "Ouzhpenn an titl",
+ "add-list": "Ouzhpenn ur roll",
+ "add-members": "Ouzhpenn izili",
+ "added": "Ouzhpennet",
+ "addMemberPopup-title": "Izili",
+ "admin": "Merour",
+ "admin-desc": "Can view and edit cards, remove members, and change settings for the board.",
+ "all-boards": "All boards",
+ "and-n-other-card": "And __count__ other card",
+ "and-n-other-card_plural": "And __count__ other cards",
+ "apply": "Apply",
+ "app-is-offline": "The application is currently offline, refreshing the page will cause data loss.",
+ "archive": "Archive",
+ "archive-all": "Archive All",
+ "archive-board": "Archive Board",
+ "archive-card": "Archive Card",
+ "archive-list": "Archive this list",
+ "archive-selection": "Archive selection",
+ "archiveBoardPopup-title": "Archive Board?",
+ "archived-items": "Archived Items",
+ "archives": "Archives",
+ "assign-member": "Assign member",
+ "attached": "attached",
+ "attachment": "Attachment",
+ "attachment-delete-pop": "Deleting an attachment is permanent. There is no undo.",
+ "attachmentDeletePopup-title": "Delete Attachment?",
+ "attachments": "Attachments",
+ "auto-watch": "Automatically watch boards when create it",
+ "avatar-too-big": "The avatar is too large (70Kb max)",
+ "back": "Back",
+ "board-change-color": "Kemmañ al liv",
+ "board-nb-stars": "%s stered",
+ "board-not-found": "Board not found",
+ "board-private-info": "This board will be <strong>private</strong>.",
+ "board-public-info": "This board will be <strong>public</strong>.",
+ "boardChangeColorPopup-title": "Change Board Background",
+ "boardChangeTitlePopup-title": "Rename Board",
+ "boardChangeVisibilityPopup-title": "Change Visibility",
+ "boardChangeWatchPopup-title": "Change Watch",
+ "boardMenuPopup-title": "Board Menu",
+ "boards": "Boards",
+ "bucket-example": "Like “Bucket List” for example",
+ "cancel": "Cancel",
+ "card-archived": "This card is archived.",
+ "card-comments-title": "This card has %s comment.",
+ "card-delete-notice": "Deleting is permanent. You will lose all actions associated with this card.",
+ "card-delete-pop": "All actions will be removed from the activity feed and you won't be able to re-open the card. There is no undo.",
+ "card-delete-suggest-archive": "You can archive a card to remove it from the board and preserve the activity.",
+ "card-due": "Due",
+ "card-due-on": "Due on",
+ "card-edit-attachments": "Edit attachments",
+ "card-edit-labels": "Edit labels",
+ "card-edit-members": "Edit members",
+ "card-labels-title": "Change the labels for the card.",
+ "card-members-title": "Add or remove members of the board from the card.",
+ "card-start": "Start",
+ "card-start-on": "Starts on",
+ "cardAttachmentsPopup-title": "Attach From",
+ "cardDeletePopup-title": "Diverkañ ar gartenn ?",
+ "cardDetailsActionsPopup-title": "Card Actions",
+ "cardLabelsPopup-title": "Labels",
+ "cardMembersPopup-title": "Izili",
+ "cardMorePopup-title": "Muioc’h",
+ "cards": "Kartennoù",
+ "change": "Change",
+ "change-avatar": "Change Avatar",
+ "change-password": "Kemmañ ger-tremen",
+ "change-permissions": "Change permissions",
+ "change-settings": "Change Settings",
+ "changeAvatarPopup-title": "Change Avatar",
+ "changeLanguagePopup-title": "Change Language",
+ "changePasswordPopup-title": "Kemmañ ger-tremen",
+ "changePermissionsPopup-title": "Change Permissions",
+ "changeSettingsPopup-title": "Change Settings",
+ "checklists": "Checklists",
+ "click-to-star": "Click to star this board.",
+ "click-to-unstar": "Click to unstar this board.",
+ "clipboard": "Clipboard or drag & drop",
+ "close": "Close",
+ "close-board": "Close Board",
+ "close-board-pop": "You will be able to restore the board by clicking the “Archives” button from the home header.",
+ "color-black": "du",
+ "color-blue": "glas",
+ "color-green": "gwer",
+ "color-lime": "melen sitroñs",
+ "color-orange": "orañjez",
+ "color-pink": "roz",
+ "color-purple": "mouk",
+ "color-red": "ruz",
+ "color-sky": "pers",
+ "color-yellow": "melen",
+ "comment": "Comment",
+ "comment-placeholder": "Write a comment",
+ "comment-only": "Limited",
+ "comment-only-desc": "Can comment on cards only.",
+ "computer": "Computer",
+ "create": "Krouiñ",
+ "createBoardPopup-title": "Create Board",
+ "createLabelPopup-title": "Create Label",
+ "current": "current",
+ "date": "Date",
+ "decline": "Decline",
+ "default-avatar": "Default avatar",
+ "delete": "Diverkañ",
+ "deleteLabelPopup-title": "Delete Label?",
+ "description": "Description",
+ "disambiguateMultiLabelPopup-title": "Disambiguate Label Action",
+ "disambiguateMultiMemberPopup-title": "Disambiguate Member Action",
+ "discard": "Discard",
+ "done": "Graet",
+ "download": "Download",
+ "edit": "Kemmañ",
+ "edit-avatar": "Change Avatar",
+ "edit-profile": "Edit Profile",
+ "editCardStartDatePopup-title": "Change start date",
+ "editCardDueDatePopup-title": "Change due date",
+ "editLabelPopup-title": "Change Label",
+ "editNotificationPopup-title": "Edit Notification",
+ "editProfilePopup-title": "Edit Profile",
+ "email": "Email",
+ "email-enrollAccount-subject": "An account created for you on __siteName__",
+ "email-enrollAccount-text": "Hello __user__,\n\nTo start using the service, simply click the link below.\n\n__url__\n\nThanks.",
+ "email-fail": "Sending email failed",
+ "email-invalid": "Invalid email",
+ "email-invite": "Invite via Email",
+ "email-invite-subject": "__inviter__ sent you an invitation",
+ "email-invite-text": "Dear __user__,\n\n__inviter__ invites you to join board \"__board__\" for collaborations.\n\nPlease follow the link below:\n\n__url__\n\nThanks.",
+ "email-resetPassword-subject": "Reset your password on __siteName__",
+ "email-resetPassword-text": "Hello __user__,\n\nTo reset your password, simply click the link below.\n\n__url__\n\nThanks.",
+ "email-sent": "Email sent",
+ "email-verifyEmail-subject": "Verify your email address on __siteName__",
+ "email-verifyEmail-text": "Hello __user__,\n\nTo verify your account email, simply click the link below.\n\n__url__\n\nThanks.",
+ "error-board-doesNotExist": "This board does not exist",
+ "error-board-notAdmin": "You need to be admin of this board to do that",
+ "error-board-notAMember": "You need to be a member of this board to do that",
+ "error-json-malformed": "Your text is not valid JSON",
+ "error-json-schema": "Your JSON data does not include the proper information in the correct format",
+ "error-list-doesNotExist": "This list does not exist",
+ "error-user-doesNotExist": "This user does not exist",
+ "error-user-notAllowSelf": "This action on self is not allowed",
+ "error-user-notCreated": "This user is not created",
+ "error-username-taken": "This username is already taken",
+ "export-board": "Export board",
+ "filter": "Filter",
+ "filter-cards": "Filter Cards",
+ "filter-clear": "Clear filter",
+ "filter-no-label": "No label",
+ "filter-no-member": "No member",
+ "filter-on": "Filter is on",
+ "filter-on-desc": "You are filtering cards on this board. Click here to edit filter.",
+ "filter-to-selection": "Filter to selection",
+ "fullname": "Full Name",
+ "header-logo-title": "Go back to your boards page.",
+ "hide-system-messages": "Hide system messages",
+ "headerBarCreateBoardPopup-title": "Create Board",
+ "home": "Home",
+ "import": "Import",
+ "import-board": "import from Trello",
+ "import-board-title": "Import board from Trello",
+ "import-board-trello-instruction": "In your Trello board, go to 'Menu', then 'More', 'Print and Export', 'Export JSON', and copy the resulting text",
+ "import-json-placeholder": "Paste your valid JSON data here",
+ "import-map-members": "Map members",
+ "import-members-map": "Your imported board has some members. Please map the members you want to import to Wekan users",
+ "import-show-user-mapping": "Review members mapping",
+ "import-user-select": "Pick the Wekan user you want to use as this member",
+ "importMapMembersAddPopup-title": "Select Wekan member",
+ "info": "Infos",
+ "initials": "Initials",
+ "invalid-date": "Invalid date",
+ "joined": "joined",
+ "just-invited": "You are just invited to this board",
+ "keyboard-shortcuts": "Keyboard shortcuts",
+ "label-create": "Create a new label",
+ "label-default": "%s label (default)",
+ "label-delete-pop": "There is no undo. This will remove this label from all cards and destroy its history.",
+ "labels": "Labels",
+ "language": "Yezh",
+ "last-admin-desc": "You can’t change roles because there must be at least one admin.",
+ "leave-board": "Leave Board",
+ "link-card": "Link to this card",
+ "list-archive-cards": "Archive all cards in this list",
+ "list-archive-cards-pop": "This will remove all the cards in this list from the board. To view archived cards and bring them back to the board, click “Menu” > “Archived Items”.",
+ "list-move-cards": "Move all cards in this list",
+ "list-select-cards": "Select all cards in this list",
+ "listActionPopup-title": "List Actions",
+ "listImportCardPopup-title": "Import a Trello card",
+ "lists": "Lists",
+ "log-out": "Log Out",
+ "log-in": "Log In",
+ "loginPopup-title": "Log In",
+ "memberMenuPopup-title": "Member Settings",
+ "members": "Izili",
+ "menu": "Menu",
+ "move-selection": "Move selection",
+ "moveCardPopup-title": "Move Card",
+ "moveCardToBottom-title": "Move to Bottom",
+ "moveCardToTop-title": "Move to Top",
+ "moveSelectionPopup-title": "Move selection",
+ "multi-selection": "Multi-Selection",
+ "multi-selection-on": "Multi-Selection is on",
+ "muted": "Muted",
+ "muted-info": "You will never be notified of any changes in this board",
+ "my-boards": "My Boards",
+ "name": "Name",
+ "no-archived-cards": "No archived cards.",
+ "no-archived-lists": "No archived lists.",
+ "no-results": "No results",
+ "normal": "Normal",
+ "normal-desc": "Can view and edit cards. Can't change settings.",
+ "not-accepted-yet": "Invitation not accepted yet",
+ "notify-participate": "Receive updates to any cards you participate as creater or member",
+ "notify-watch": "Receive updates to any boards, lists, or cards you’re watching",
+ "optional": "optional",
+ "or": "or",
+ "page-maybe-private": "This page may be private. You may be able to view it by <a href='%s'>logging in</a>.",
+ "page-not-found": "Page not found.",
+ "password": "Ger-tremen",
+ "paste-or-dragdrop": "to paste, or drag & drop image file to it (image only)",
+ "participating": "Participating",
+ "preview": "Preview",
+ "previewAttachedImagePopup-title": "Preview",
+ "previewClipboardImagePopup-title": "Preview",
+ "private": "Private",
+ "private-desc": "This board is private. Only people added to the board can view and edit it.",
+ "profile": "Profile",
+ "public": "Public",
+ "public-desc": "This board is public. It's visible to anyone with the link and will show up in search engines like Google. Only people added to the board can edit.",
+ "quick-access-description": "Star a board to add a shortcut in this bar.",
+ "remove-cover": "Remove Cover",
+ "remove-from-board": "Remove from Board",
+ "remove-label": "Remove the label",
+ "remove-list": "Remove the list",
+ "remove-member": "Remove Member",
+ "remove-member-from-card": "Remove from Card",
+ "remove-member-pop": "Remove __name__ (__username__) from __boardTitle__? The member will be removed from all cards on this board. They will receive a notification.",
+ "removeMemberPopup-title": "Remove Member?",
+ "rename": "Rename",
+ "rename-board": "Rename Board",
+ "restore": "Restore",
+ "save": "Save",
+ "search": "Search",
+ "select-color": "Select a color",
+ "shortcut-assign-self": "Assign yourself to current card",
+ "shortcut-autocomplete-emoji": "Autocomplete emoji",
+ "shortcut-autocomplete-members": "Autocomplete members",
+ "shortcut-clear-filters": "Clear all filters",
+ "shortcut-close-dialog": "Close Dialog",
+ "shortcut-filter-my-cards": "Filter my cards",
+ "shortcut-show-shortcuts": "Bring up this shortcuts list",
+ "shortcut-toggle-filterbar": "Toggle Filter Sidebar",
+ "shortcut-toggle-sidebar": "Toggle Board Sidebar",
+ "show-cards-minimum-count": "Show cards count if list contains more than",
+ "sidebar-open": "Open Sidebar",
+ "sidebar-close": "Close Sidebar",
+ "signupPopup-title": "Create an Account",
+ "star-board-title": "Click to star this board. It will show up at top of your boards list.",
+ "starred-boards": "Starred Boards",
+ "starred-boards-description": "Starred boards show up at the top of your boards list.",
+ "subscribe": "Subscribe",
+ "team": "Team",
+ "this-board": "this board",
+ "this-card": "this card",
+ "time": "Time",
+ "title": "Title",
+ "tracking": "Tracking",
+ "tracking-info": "You will be notified of any changes to those cards you are involved as creator or member.",
+ "unassign-member": "Unassign member",
+ "unsaved-description": "You have an unsaved description.",
+ "unwatch": "Unwatch",
+ "upload": "Upload",
+ "upload-avatar": "Upload an avatar",
+ "uploaded-avatar": "Uploaded an avatar",
+ "username": "Username",
+ "view-it": "View it",
+ "warn-list-archived": "warning: this card is in an archived list",
+ "watch": "Watch",
+ "watching": "Watching",
+ "watching-info": "You will be notified of any change in this board",
+ "welcome-board": "Welcome Board",
+ "welcome-list1": "Basics",
+ "welcome-list2": "Advanced",
+ "what-to-do": "What do you want to do?",
+ "admin-panel": "Admin Panel",
+ "settings": "Settings",
+ "people": "People",
+ "registration": "Registration",
+ "disable-self-registration": "Disable Self-Registration",
+ "invite": "Invite",
+ "invite-people": "Invite People",
+ "to-boards": "To board(s)",
+ "email-addresses": "Email Addresses",
+ "smtp-host-description": "The address of the SMTP server that handles your emails.",
+ "smtp-port-description": "The port your SMTP server uses for outgoing emails.",
+ "smtp-host": "SMTP Host",
+ "smtp-port": "SMTP Port",
+ "smtp-username": "Username",
+ "smtp-password": "Ger-tremen",
+ "send-from": "From",
+ "invitation-code": "Invitation Code",
+ "email-invite-register-subject": "__inviter__ sent you an invitation",
+ "email-invite-register-text": "Dear __user__,\n\n__inviter__ invites you to Wekan for collaborations.\n\nPlease follow the link below:\n__url__\n\nAnd your invitation code is: __icode__\n\nThanks.",
+ "error-invitation-code-not-exist": "Invitation code doesn't exist"
+} \ No newline at end of file
diff --git a/i18n/ca.i18n.json b/i18n/ca.i18n.json
index fa223d02..757d3e8e 100755..100644
--- a/i18n/ca.i18n.json
+++ b/i18n/ca.i18n.json
@@ -1,5 +1,25 @@
{
"accept": "Accepta",
+ "act-activity-notify": "[Wekan] Notificació d'activitat",
+ "act-addAttachment": "adjuntat __attachment__ a __card__",
+ "act-addComment": "comentat a __card__: __comment__",
+ "act-createBoard": "creat __board__",
+ "act-createCard": "afegit/da __card__ a __list__",
+ "act-createList": "afegit/da __list__ a __board__",
+ "act-addBoardMember": "afegit/da __member__ a __board__",
+ "act-archivedBoard": "__board__ arxivat",
+ "act-archivedCard": "__card__ arxivat/da",
+ "act-archivedList": "__list__ arxivat/da",
+ "act-importBoard": "__board__ importat",
+ "act-importCard": "__card__ importat",
+ "act-importList": "__list__ importat",
+ "act-joinMember": "afegit/da __member__ a __card__",
+ "act-moveCard": "mou __card__ de __oldList__ a __list__",
+ "act-removeBoardMember": "elimina __member__ de __board__",
+ "act-restoredCard": "recupera __card__ a __board__",
+ "act-unjoinMember": "elimina __member__ de __card__",
+ "act-withBoardTitle": "[Wekan] __board__",
+ "act-withCardTitle": "[__board__] __card__",
"actions": "Accions",
"activities": "Activitats",
"activity": "Activitat",
@@ -16,10 +36,13 @@
"activity-removed": "ha eliminat %s de %s",
"activity-sent": "ha enviat %s %s",
"activity-unjoined": "desassignat %s",
+ "activity-checklist-added": "Checklist afegida a %s",
"add": "Afegeix",
"add-attachment": "Afegeix arxiu adjunt",
"add-board": "Afegeix un nou tauler",
"add-card": "Afegeix fitxa",
+ "add-checklist": "Afegeix una checklist",
+ "add-checklist-item": "Afegeix un ítem",
"add-cover": "Afegeix coberta",
"add-label": "Afegeix etiqueta",
"add-list": "Afegeix llista",
@@ -31,6 +54,8 @@
"all-boards": "Tots els taulers",
"and-n-other-card": "And __count__ other card",
"and-n-other-card_plural": "And __count__ other cards",
+ "apply": "Aplica",
+ "app-is-offline": "L'aplicació éstà fora de línia. Si refresca la pàgina perdrà les dades.",
"archive": "Desa",
"archive-all": "Desa Tot",
"archive-board": "Arxiva tauler",
@@ -46,6 +71,7 @@
"attachment-delete-pop": "L'esborrat d'un arxiu adjunt és permanent. No es pot desfer.",
"attachmentDeletePopup-title": "Esborrar adjunt?",
"attachments": "Adjunts",
+ "auto-watch": "Veure els taulers automàticament després de crear-los",
"avatar-too-big": "L'avatar és massa gran (70Kb max)",
"back": "Enrere",
"board-change-color": "Canvia el color",
@@ -56,7 +82,7 @@
"boardChangeColorPopup-title": "Canvia fons",
"boardChangeTitlePopup-title": "Canvia el nom tauler",
"boardChangeVisibilityPopup-title": "Canvia visibilitat",
- "boardImportBoardPopup-title": "Importa tauler des de Trello",
+ "boardChangeWatchPopup-title": "Canvia seguiment",
"boardMenuPopup-title": "Menú del tauler",
"boards": "Taulers",
"bucket-example": "Igual que “Bucket List”, per exemple",
@@ -66,11 +92,15 @@
"card-delete-notice": "L'esborrat és permanent. Perdreu totes les accions associades a aquesta fitxa.",
"card-delete-pop": "Totes les accions s'eliminaran de l'activitat i no podreu tornar a obrir la fitxa. No es pot desfer.",
"card-delete-suggest-archive": "Podeu arxivar una fitxa per extreure-la del tauler i preservar l'activitat.",
+ "card-due": "Finalitza",
+ "card-due-on": "Finalitza a",
"card-edit-attachments": "Edita arxius adjunts",
"card-edit-labels": "Edita etiquetes",
"card-edit-members": "Edita membres",
"card-labels-title": "Canvia les etiquetes de la fitxa",
"card-members-title": "Afegeix o eliminar membres del tauler des de la fitxa.",
+ "card-start": "Comença",
+ "card-start-on": "Comença a",
"cardAttachmentsPopup-title": "Adjunta des de",
"cardDeletePopup-title": "Esborrar fitxa?",
"cardDetailsActionsPopup-title": "Accions de fitxes",
@@ -82,10 +112,13 @@
"change-avatar": "Canvia Avatar",
"change-password": "Canvia la clau",
"change-permissions": "Canvia permisos",
+ "change-settings": "Canvia configuració",
"changeAvatarPopup-title": "Canvia Avatar",
"changeLanguagePopup-title": "Canvia idioma",
"changePasswordPopup-title": "Canvia la contrasenya",
"changePermissionsPopup-title": "Canvia permisos",
+ "changeSettingsPopup-title": "Canvia configuració",
+ "checklists": "Checklists",
"click-to-star": "Fes clic per destacar aquest tauler.",
"click-to-unstar": "Fes clic per deixar de destacar aquest tauler.",
"clipboard": "Portaretalls o estirar i amollar",
@@ -104,11 +137,14 @@
"color-yellow": "groc",
"comment": "Comentari",
"comment-placeholder": "Escriu un comentari",
+ "comment-only": "Limited",
+ "comment-only-desc": "Can comment on cards only.",
"computer": "Ordinador",
"create": "Crea",
"createBoardPopup-title": "Crea tauler",
"createLabelPopup-title": "Crea etiqueta",
"current": "Actual",
+ "date": "Data",
"decline": "Declina",
"default-avatar": "Avatar per defecte",
"delete": "Esborra",
@@ -122,7 +158,10 @@
"edit": "Edita",
"edit-avatar": "Canvia Avatar",
"edit-profile": "Edita el teu Perfil",
+ "editCardStartDatePopup-title": "Canvia data d'inici",
+ "editCardDueDatePopup-title": "Canvia data de finalització",
"editLabelPopup-title": "Canvia etiqueta",
+ "editNotificationPopup-title": "Edita la notificació",
"editProfilePopup-title": "Edita teu Perfil",
"email": "Correu electrònic",
"email-enrollAccount-subject": "An account created for you on __siteName__",
@@ -146,27 +185,34 @@
"error-user-doesNotExist": "L'usuari no existeix",
"error-user-notAllowSelf": "Aquesta acció no està permesa",
"error-user-notCreated": "L'usuari no s'ha creat",
- "export-board": "Export board",
+ "error-username-taken": "Aquest usuari ja existeix",
+ "export-board": "Exporta tauler",
"filter": "Filtre",
"filter-cards": "Fitxes de filtre",
"filter-clear": "Elimina filtre",
+ "filter-no-label": "Sense etiqueta",
+ "filter-no-member": "Sense membres",
"filter-on": "Filtra per",
"filter-on-desc": "Estau filtrant fitxes en aquest tauler. Feu clic aquí per editar el filtre.",
"filter-to-selection": "Filtra selecció",
"fullname": "Nom complet",
"header-logo-title": "Torna a la teva pàgina de taulers",
+ "hide-system-messages": "Oculta missatges del sistema",
+ "headerBarCreateBoardPopup-title": "Crea tauler",
"home": "Inici",
"import": "importa",
"import-board": "Importa des de Trello",
+ "import-board-title": "Importa tauler des de Trello",
"import-board-trello-instruction": "En el teu tauler Trello, ves a 'Menú', 'Més'.' Imprimir i Exportar', 'Exportar JSON', i copia el text resultant.",
- "import-card": "Importa una fitxa de Trello",
- "import-card-trello-instruction": "Ves a la fitxa Trello, selecciona 'Compartir i més...' llavors 'Export JSON' i copia el text resultant",
"import-json-placeholder": "Aferra codi JSON vàlid aquí",
+ "import-map-members": "Mapeja el membres",
"import-members-map": "El tauler importat conté membres. Assigna els membres que vulguis importar a usuaris Wekan",
"import-show-user-mapping": "Revisa l'assignació de membres",
"import-user-select": "Selecciona l'usuari Wekan que vulguis associar a aquest membre",
+ "importMapMembersAddPopup-title": "Selecciona un membre de Wekan",
"info": "Informacions",
"initials": "Inicials",
+ "invalid-date": "Data invàlida",
"joined": "s'ha unit",
"just-invited": "Has estat convidat a aquest tauler",
"keyboard-shortcuts": "Dreceres de teclat",
@@ -186,17 +232,20 @@
"listImportCardPopup-title": "importa una fitxa de Trello",
"lists": "Llistes",
"log-out": "Finalitza la sessió",
+ "log-in": "Ingresa",
"loginPopup-title": "Inicia sessió",
- "mapMembersAddPopup-title": "Selecciona membre de Wekan",
- "mapMembersPopup-title": "Assigna membres",
"memberMenuPopup-title": "Configura membres",
"members": "Membres",
"menu": "Menú",
"move-selection": "Move selection",
"moveCardPopup-title": "Moure fitxa",
+ "moveCardToBottom-title": "Mou a la part inferior",
+ "moveCardToTop-title": "Mou a la part superior",
"moveSelectionPopup-title": "Move selection",
"multi-selection": "Multi-Selecció",
"multi-selection-on": "Multi-Selecció està activada",
+ "muted": "En silenci",
+ "muted-info": "No seràs notificat dels canvis en aquest tauler",
"my-boards": "Els meus taulers",
"name": "Nom",
"no-archived-cards": "No hi ha fitxes arxivades.",
@@ -205,12 +254,15 @@
"normal": "Normal",
"normal-desc": "Podeu veure i editar fitxes. No podeu canviar la configuració.",
"not-accepted-yet": "La invitació no ha esta acceptada encara",
+ "notify-participate": "Rebre actualitzacions per a cada fitxa de la qual n'ets creador o membre",
+ "notify-watch": "Rebre actualitzacions per qualsevol tauler, llista o fitxa en observació",
"optional": "opcional",
"or": "o",
"page-maybe-private": "Aquesta pàgina és privada. Per veure-la <a href='%s'> entra </a>.",
"page-not-found": "Pàgina no trobada.",
"password": "Contrasenya",
"paste-or-dragdrop": "aferra, o estira i amolla la imatge (només imatge)",
+ "participating": "Participant",
"preview": "Vista prèvia",
"previewAttachedImagePopup-title": "Vista prèvia",
"previewClipboardImagePopup-title": "Vista prèvia",
@@ -223,6 +275,7 @@
"remove-cover": "Elimina coberta",
"remove-from-board": "Elimina del tauler",
"remove-label": "Eliminia etiqueta",
+ "remove-list": "Elimina la llista",
"remove-member": "Elimina membre",
"remove-member-from-card": "Elimina de la fitxa",
"remove-member-pop": "Eliminar __name__ (__username__) de __boardTitle__ ? El membre serà eliminat de totes les fitxes d'aquest tauler. Ells rebran una notificació.",
@@ -242,6 +295,9 @@
"shortcut-show-shortcuts": "Mostra aquesta lista d'accessos directes",
"shortcut-toggle-filterbar": "Canvia la barra lateral del tauler",
"shortcut-toggle-sidebar": "Canvia Sidebar del Tauler",
+ "show-cards-minimum-count": "Mostra contador de fitxes si la llista en conté més de",
+ "sidebar-open": "Mostra barra lateral",
+ "sidebar-close": "Amaga barra lateral",
"signupPopup-title": "Crea un compte",
"star-board-title": "Fes clic per destacar aquest tauler. Es mostrarà a la part superior de la llista de taulers.",
"starred-boards": "Taulers destacats",
@@ -250,14 +306,44 @@
"team": "Equip",
"this-board": "aquest tauler",
"this-card": "aquesta fitxa",
+ "time": "Hora",
"title": "Títol",
+ "tracking": "En seguiment",
+ "tracking-info": "Seràs notificat per cada canvi a aquelles fitxes de les que n'eres creador o membre",
"unassign-member": "Desassignar membre",
"unsaved-description": "Tens una descripció sense desar.",
+ "unwatch": "Suprimeix observació",
"upload": "Puja",
"upload-avatar": "Actualitza avatar",
"uploaded-avatar": "Avatar actualitzat",
"username": "Nom d'Usuari",
"view-it": "Vist",
"warn-list-archived": "Avís: aquesta fitxa està en una llista arxivada",
- "what-to-do": "Què vols fer?"
-}
+ "watch": "Observa",
+ "watching": "En observació",
+ "watching-info": "Seràs notificat de cada canvi en aquest tauler",
+ "welcome-board": "Tauler de benvinguda",
+ "welcome-list1": "Bàsics",
+ "welcome-list2": "Avançades",
+ "what-to-do": "Què vols fer?",
+ "admin-panel": "Tauler d'administració",
+ "settings": "Configuració",
+ "people": "Persones",
+ "registration": "Registre",
+ "disable-self-registration": "Deshabilita Auto-Registre",
+ "invite": "Convida",
+ "invite-people": "Convida a persones",
+ "to-boards": "Al tauler(s)",
+ "email-addresses": "Adreça de correu",
+ "smtp-host-description": "L'adreça del vostre servidor SMTP.",
+ "smtp-port-description": "El port del vostre servidor SMTP.",
+ "smtp-host": "Servidor SMTP",
+ "smtp-port": "Port SMTP",
+ "smtp-username": "Nom d'Usuari",
+ "smtp-password": "Contrasenya",
+ "send-from": "De",
+ "invitation-code": "Codi d'invitació",
+ "email-invite-register-subject": "__inviter__ t'ha convidat",
+ "email-invite-register-text": " __user__,\n\n __inviter__ us ha convidat a col·laborar a Wekan.\n\n Clicau l'enllaç següent per acceptar l'invitació:\n __url__\n\n El vostre codi d'invitació és: __icode__\n\n Gràcies",
+ "error-invitation-code-not-exist": "El codi d'invitació no existeix"
+} \ No newline at end of file
diff --git a/i18n/cs.i18n.json b/i18n/cs.i18n.json
index 30c84748..b32495c8 100644
--- a/i18n/cs.i18n.json
+++ b/i18n/cs.i18n.json
@@ -1,5 +1,25 @@
{
"accept": "Přijmout",
+ "act-activity-notify": "[Wekan] Activity Notification",
+ "act-addAttachment": "attached __attachment__ to __card__",
+ "act-addComment": "commented on __card__: __comment__",
+ "act-createBoard": "created __board__",
+ "act-createCard": "added __card__ to __list__",
+ "act-createList": "added __list__ to __board__",
+ "act-addBoardMember": "added __member__ to __board__",
+ "act-archivedBoard": "archived __board__",
+ "act-archivedCard": "archived __card__",
+ "act-archivedList": "archived __list__",
+ "act-importBoard": "imported __board__",
+ "act-importCard": "imported __card__",
+ "act-importList": "imported __list__",
+ "act-joinMember": "added __member__ to __card__",
+ "act-moveCard": "moved __card__ from __oldList__ to __list__",
+ "act-removeBoardMember": "removed __member__ from __board__",
+ "act-restoredCard": "restored __card__ to __board__",
+ "act-unjoinMember": "removed __member__ from __card__",
+ "act-withBoardTitle": "[Wekan] __board__",
+ "act-withCardTitle": "[__board__] __card__",
"actions": "Akce",
"activities": "Aktivity",
"activity": "Aktivita",
@@ -16,10 +36,13 @@
"activity-removed": "odstraněn %s z %s",
"activity-sent": "%s posláno na %s",
"activity-unjoined": "odpojen %s",
+ "activity-checklist-added": "added checklist to %s",
"add": "Přidat",
"add-attachment": "Přidat přílohu",
"add-board": "Přidat nové tablo",
"add-card": "Přidat kartu",
+ "add-checklist": "Add a checklist",
+ "add-checklist-item": "Add an item to checklist",
"add-cover": "Přidat obal",
"add-label": "Přidat štítek",
"add-list": "Přidat seznam",
@@ -31,6 +54,8 @@
"all-boards": "Všechna tabla",
"and-n-other-card": "A __count__ další karta(y)",
"and-n-other-card_plural": "A __count__ dalších karet",
+ "apply": "Apply",
+ "app-is-offline": "The application is currently offline, refreshing the page will cause data loss.",
"archive": "Archiv",
"archive-all": "Archivovat vše",
"archive-board": "Archivovat tablo",
@@ -46,6 +71,7 @@
"attachment-delete-pop": "Smazání přílohy je trvalé. Nejde vrátit zpět.",
"attachmentDeletePopup-title": "Smazat přílohu?",
"attachments": "Přílohy",
+ "auto-watch": "Automatically watch boards when create it",
"avatar-too-big": "Avatar je příliš velký (70Kb max)",
"back": "Zpět",
"board-change-color": "Změnit barvu",
@@ -56,7 +82,7 @@
"boardChangeColorPopup-title": "Změnit pozadí tabla",
"boardChangeTitlePopup-title": "Přejmenovat tablo",
"boardChangeVisibilityPopup-title": "Upravit viditelnost",
- "boardImportBoardPopup-title": "Importovat tablo ze služby Trello",
+ "boardChangeWatchPopup-title": "Change Watch",
"boardMenuPopup-title": "Menu tabla",
"boards": "Tabla",
"bucket-example": "Například \"Než mě odvedou\"",
@@ -66,11 +92,15 @@
"card-delete-notice": "Smazání je trvalé. Přijdete o všechny akce asociované s touto kartou.",
"card-delete-pop": "Všechny akce budou odstraněny z kanálu aktivity a nebude možné kartu znovu otevřít. Toto nelze vrátit zpět.",
"card-delete-suggest-archive": "Kartu můžete archivovat a tím ji odstranit z tabla a přitom zachovat aktivity.",
+ "card-due": "Due",
+ "card-due-on": "Due on",
"card-edit-attachments": "Upravit přílohy",
"card-edit-labels": "Upravit štítky",
"card-edit-members": "Upravit členy",
"card-labels-title": "Změnit štítky karty.",
"card-members-title": "Přidat nebo odstranit členy tohoto tabla z karty.",
+ "card-start": "Start",
+ "card-start-on": "Starts on",
"cardAttachmentsPopup-title": "Přiložit formulář",
"cardDeletePopup-title": "Smazat kartu?",
"cardDetailsActionsPopup-title": "Akce karty",
@@ -82,10 +112,13 @@
"change-avatar": "Změnit avatar",
"change-password": "Změnit heslo",
"change-permissions": "Změnit oprávnění",
+ "change-settings": "Change Settings",
"changeAvatarPopup-title": "Změnit avatar",
"changeLanguagePopup-title": "Změnit jazyk",
"changePasswordPopup-title": "Změnit heslo",
"changePermissionsPopup-title": "Změnit oprávnění",
+ "changeSettingsPopup-title": "Change Settings",
+ "checklists": "Checklists",
"click-to-star": "Kliknutím přidat hvězdičku tomuto tablu.",
"click-to-unstar": "Kliknutím odebrat hvězdičku tomuto tablu.",
"clipboard": "Schránka nebo potáhnout a pustit",
@@ -104,11 +137,14 @@
"color-yellow": "žlutá",
"comment": "Komentář",
"comment-placeholder": "Zapsat komentář",
+ "comment-only": "Limited",
+ "comment-only-desc": "Can comment on cards only.",
"computer": "Počítač",
"create": "Vytvořit",
"createBoardPopup-title": "Vytvořit tablo",
"createLabelPopup-title": "Vytvořit štítek",
"current": "Aktuální",
+ "date": "Date",
"decline": "Zamítnout",
"default-avatar": "Výchozí avatar",
"delete": "Smazat",
@@ -122,7 +158,10 @@
"edit": "Upravit",
"edit-avatar": "Změnit avatar",
"edit-profile": "Upravit profil",
+ "editCardStartDatePopup-title": "Change start date",
+ "editCardDueDatePopup-title": "Change due date",
"editLabelPopup-title": "Změnit štítek",
+ "editNotificationPopup-title": "Edit Notification",
"editProfilePopup-title": "Upravit profil",
"email": "Email",
"email-enrollAccount-subject": "Byl vytvořen účet na __siteName__",
@@ -135,7 +174,7 @@
"email-resetPassword-subject": "Změň své heslo na __siteName__",
"email-resetPassword-text": "Ahoj __user__,\n\nPro změnu hesla klikni na odkaz níže.\n\n__url__\n\nDěkujeme.",
"email-sent": "Email byl odeslán",
- "email-verifyEmail-subject": "Ověř svou emailovou adresu na ",
+ "email-verifyEmail-subject": "Ověř svou emailovou adresu na",
"email-verifyEmail-text": "Ahoj __user__,\n\nPro ověření emailové adresy klikni na odkaz níže.\n\n__url__\n\nDěkujeme.",
"error-board-doesNotExist": "Toto tablo neexistuje",
"error-board-notAdmin": "K provedení změny musíš být administrátor tohoto tabla",
@@ -146,27 +185,34 @@
"error-user-doesNotExist": "Tento uživatel neexistuje",
"error-user-notAllowSelf": "Tato akce pro sebe sama není povolena",
"error-user-notCreated": "Tento uživatel není vytvořen",
+ "error-username-taken": "This username is already taken",
"export-board": "Exportovat tablo",
"filter": "Filtr",
"filter-cards": "Filtrovat karty",
"filter-clear": "Vyčistit filtr",
+ "filter-no-label": "No label",
+ "filter-no-member": "No member",
"filter-on": "Filtr je zapnut",
"filter-on-desc": "Filtrujete karty tohoto tabla. Pro úpravu filtru klikni sem.",
"filter-to-selection": "Filtrovat výběr",
"fullname": "Celé jméno",
"header-logo-title": "Jit zpět na stránku s tably.",
+ "hide-system-messages": "Hide system messages",
+ "headerBarCreateBoardPopup-title": "Vytvořit tablo",
"home": "Domů",
"import": "Import",
"import-board": "Importovat ze služby Trello",
+ "import-board-title": "Import board from Trello",
"import-board-trello-instruction": "Na svém Trello tablu, otevři 'Menu', pak 'More', 'Print and Export', 'Export JSON', a zkopíruj výsledný text",
- "import-card": "Importovat kartu ze služby Trello",
- "import-card-trello-instruction": "Přejdi na Trello kartu, vyber 'Share and more...' a pak 'Export JSON' a zkopíruj výsledný text",
"import-json-placeholder": "Sem vlož validní JSON data",
+ "import-map-members": "Map members",
"import-members-map": "Toto importované tablo obsahuje několik členů. Namapuj členy z importu na uživatelské účty Wekan.",
"import-show-user-mapping": "Zkontrolovat namapování členů",
"import-user-select": "Vyber uživatele Wekan, kterého chceš použít pro tohoto člena",
+ "importMapMembersAddPopup-title": "Select Wekan member",
"info": "Informace",
"initials": "Iniciály",
+ "invalid-date": "Invalid date",
"joined": "spojeno",
"just-invited": "Právě jsi byl pozván(a) do tohoto tabla",
"keyboard-shortcuts": "Klávesové zkratky",
@@ -186,17 +232,20 @@
"listImportCardPopup-title": "Importovat Trello kartu",
"lists": "Seznamy",
"log-out": "Odhlásit",
+ "log-in": "Přihlásit",
"loginPopup-title": "Přihlásit",
- "mapMembersAddPopup-title": "Vybrat Wekan uživatele",
- "mapMembersPopup-title": "Mapovat členy",
"memberMenuPopup-title": "Nastavení uživatele",
"members": "Členové",
"menu": "Menu",
"move-selection": "Přesunout výběr",
"moveCardPopup-title": "Přesunout kartu",
+ "moveCardToBottom-title": "Move to Bottom",
+ "moveCardToTop-title": "Move to Top",
"moveSelectionPopup-title": "Přesunout výběr",
"multi-selection": "Multi-výběr",
"multi-selection-on": "Multi-výběr je zapnut",
+ "muted": "Muted",
+ "muted-info": "You will never be notified of any changes in this board",
"my-boards": "Moje tabla",
"name": "Jméno",
"no-archived-cards": "Žádné archivované karty.",
@@ -205,12 +254,15 @@
"normal": "Normální",
"normal-desc": "Může zobrazovat a upravovat karty. Nemůže měnit nastavení.",
"not-accepted-yet": "Pozvánka ještě nebyla přijmuta",
+ "notify-participate": "Receive updates to any cards you participate as creater or member",
+ "notify-watch": "Receive updates to any boards, lists, or cards you’re watching",
"optional": "volitelný",
"or": "nebo",
"page-maybe-private": "Tato stránka může být soukromá. Můžete ji zobrazit po <a href='%s'>přihlášení</a>.",
"page-not-found": "Stránka nenalezena.",
"password": "Heslo",
"paste-or-dragdrop": "vložit, nebo přetáhnout a pustit soubor obrázku (pouze obrázek)",
+ "participating": "Participating",
"preview": "Náhled",
"previewAttachedImagePopup-title": "Náhled",
"previewClipboardImagePopup-title": "Náhled",
@@ -223,6 +275,7 @@
"remove-cover": "Odstranit obal",
"remove-from-board": "Odstranit z tabla",
"remove-label": "Odstranit štítek",
+ "remove-list": "Remove the list",
"remove-member": "Odebrat uživatele",
"remove-member-from-card": "Odstranit z karty",
"remove-member-pop": "Odstranit __name__ (__username__) z __boardTitle__? Uživatel bude odebrán ze všech karet na tomto tablu. Na tuto skutečnost bude upozorněn.",
@@ -234,7 +287,7 @@
"search": "Hledat",
"select-color": "Vybrat barvu",
"shortcut-assign-self": "Přiřadit sebe k aktuální kartě",
- "shortcut-autocomplete-emojies": "Automatický výběr emotikon",
+ "shortcut-autocomplete-emoji": "Autocomplete emoji",
"shortcut-autocomplete-members": "Automatický výběr uživatel",
"shortcut-clear-filters": "Vyčistit všechny filtry",
"shortcut-close-dialog": "Zavřít dialog",
@@ -242,6 +295,9 @@
"shortcut-show-shortcuts": "Otevřít tento seznam odkazů",
"shortcut-toggle-filterbar": "Přepnout lištu filtrování",
"shortcut-toggle-sidebar": "Přepnout lištu tabla",
+ "show-cards-minimum-count": "Show cards count if list contains more than",
+ "sidebar-open": "Open Sidebar",
+ "sidebar-close": "Close Sidebar",
"signupPopup-title": "Vytvořit účet",
"star-board-title": "Kliknutím přidat tablu hvězdičku. Poté bude zobrazeno navrchu seznamu.",
"starred-boards": "Tabla s hvězdičkou",
@@ -250,14 +306,44 @@
"team": "Tým",
"this-board": "toto tablo",
"this-card": "tuto kartu",
+ "time": "Time",
"title": "Název",
+ "tracking": "Tracking",
+ "tracking-info": "You will be notified of any changes to those cards you are involved as creator or member.",
"unassign-member": "Vyřadit člena",
"unsaved-description": "Popis neni uložen.",
+ "unwatch": "Unwatch",
"upload": "Nahrát",
"upload-avatar": "Nahrát avatar",
"uploaded-avatar": "Avatar nahrán",
"username": "Uživatelské jméno",
"view-it": "Zobrazit",
"warn-list-archived": "varování: tato karta je v archivovaném seznamu",
- "what-to-do": "Co chcete dělat?"
+ "watch": "Watch",
+ "watching": "Watching",
+ "watching-info": "You will be notified of any change in this board",
+ "welcome-board": "Welcome Board",
+ "welcome-list1": "Basics",
+ "welcome-list2": "Advanced",
+ "what-to-do": "Co chcete dělat?",
+ "admin-panel": "Admin Panel",
+ "settings": "Settings",
+ "people": "People",
+ "registration": "Registration",
+ "disable-self-registration": "Disable Self-Registration",
+ "invite": "Invite",
+ "invite-people": "Invite People",
+ "to-boards": "To board(s)",
+ "email-addresses": "Email Addresses",
+ "smtp-host-description": "The address of the SMTP server that handles your emails.",
+ "smtp-port-description": "The port your SMTP server uses for outgoing emails.",
+ "smtp-host": "SMTP Host",
+ "smtp-port": "SMTP Port",
+ "smtp-username": "Uživatelské jméno",
+ "smtp-password": "Heslo",
+ "send-from": "From",
+ "invitation-code": "Invitation Code",
+ "email-invite-register-subject": "__inviter__ odeslal pozvánku",
+ "email-invite-register-text": "Dear __user__,\n\n__inviter__ invites you to Wekan for collaborations.\n\nPlease follow the link below:\n__url__\n\nAnd your invitation code is: __icode__\n\nThanks.",
+ "error-invitation-code-not-exist": "Invitation code doesn't exist"
} \ No newline at end of file
diff --git a/i18n/de.i18n.json b/i18n/de.i18n.json
index 43e12d88..0c6e8b23 100755..100644
--- a/i18n/de.i18n.json
+++ b/i18n/de.i18n.json
@@ -1,5 +1,25 @@
{
- "accept": "Accept",
+ "accept": "Akzeptieren",
+ "act-activity-notify": "[Wekan] Aktivitätsbenachrichtigung",
+ "act-addAttachment": "hat __attachment__ an __card__ angehängt",
+ "act-addComment": "hat __card__ kommentiert: __comment__",
+ "act-createBoard": "hat __board__ erstellt",
+ "act-createCard": "hat __card__ zu __list__ hinzugefügt",
+ "act-createList": "hat __list__ zu __board__ hinzugefügt",
+ "act-addBoardMember": "hat __member__ zu __board__ hinzugefügt",
+ "act-archivedBoard": "hat __board__ archiviert",
+ "act-archivedCard": "hat __card__ archiviert",
+ "act-archivedList": "hat __list__ archiviert",
+ "act-importBoard": "hat __board__ importiert",
+ "act-importCard": "hat __card__ importiert",
+ "act-importList": "hat __list__ importiert",
+ "act-joinMember": "hat __member__ zu __card__ hinzugefügt",
+ "act-moveCard": "hat __card__ von __oldList__ nach __list__ verschoben",
+ "act-removeBoardMember": "hat __member__ von __board__ entfernt",
+ "act-restoredCard": "hat __card__ in __board__ wiederhergestellt",
+ "act-unjoinMember": "hat __member__ von __card__ entfernt",
+ "act-withBoardTitle": "[Wekan] __board__",
+ "act-withCardTitle": "[__board__] __card__",
"actions": "Aktionen",
"activities": "Aktivitäten",
"activity": "Aktivität",
@@ -8,45 +28,51 @@
"activity-attached": "hat %s an %s angehängt",
"activity-created": "hat %s erstellt",
"activity-excluded": "hat %s von %s ausgeschlossen",
- "activity-imported": "imported %s into %s from %s",
- "activity-imported-board": "imported %s from %s",
- "activity-joined": "hat %s beigetreten",
+ "activity-imported": "hat %s in %s von %s importiert",
+ "activity-imported-board": "hat %s von %s importiert",
+ "activity-joined": "ist %s beigetreten",
"activity-moved": "hat %s von %s nach %s verschoben",
- "activity-on": "on %s",
+ "activity-on": "in %s",
"activity-removed": "hat %s von %s entfernt",
"activity-sent": "hat %s an %s gesendet",
- "activity-unjoined": "unjoined %s",
+ "activity-unjoined": "hat %s verlassen",
+ "activity-checklist-added": "hat Checkliste zu %s hinzugefügt",
"add": "Hinzufügen",
"add-attachment": "Anhang hinzufügen",
"add-board": "Neues Board erstellen",
- "add-card": "Karte hinzufügen...",
+ "add-card": "Karte hinzufügen",
+ "add-checklist": "Checkliste hinzufügen",
+ "add-checklist-item": "Punkt zu einer Checkliste hinzufügen",
"add-cover": "Cover hinzufügen",
"add-label": "Label hinzufügen",
- "add-list": "Liste hinzufügen...",
- "add-members": "Mitglieder hinzufügen...",
+ "add-list": "Liste hinzufügen",
+ "add-members": "Mitglieder hinzufügen",
"added": "Hinzugefügt",
- "addMemberPopup-title": "Nutzer",
+ "addMemberPopup-title": "Mitglieder",
"admin": "Admin",
"admin-desc": "Kann Karten anschauen und bearbeiten, Mitglieder entfernen und Boardeinstellungen ändern.",
"all-boards": "Alle Boards",
"and-n-other-card": "und eine andere Karte",
"and-n-other-card_plural": "und __count__ andere Karten",
+ "apply": "Übernehmen",
+ "app-is-offline": "Die Anwendung ist derzeit offline. Aktualisieren der Seite führt zu Datenverlust.",
"archive": "Archiv",
"archive-all": "Alles archivieren",
"archive-board": "Board archivieren",
"archive-card": "Karte archivieren",
"archive-list": "Diese Liste archivieren",
"archive-selection": "Auswahl archivieren",
- "archiveBoardPopup-title": "Archive Board?",
+ "archiveBoardPopup-title": "Board archivieren?",
"archived-items": "Archivierte Einträge",
"archives": "Archive",
"assign-member": "Mitglied zuweisen",
"attached": "angehängt",
"attachment": "Anhang",
- "attachment-delete-pop": "Das Löschen des Anhangs ist endgültig und kann nicht wieder rückgängig gemacht werden.",
+ "attachment-delete-pop": "Das Löschen eines Anhangs kann nicht wieder rückgängig gemacht werden.",
"attachmentDeletePopup-title": "Anhang löschen?",
"attachments": "Anhänge",
- "avatar-too-big": "Das Profilbild ist zu groß (70Kb max)",
+ "auto-watch": "Neue Boards automatisch beobachten",
+ "avatar-too-big": "Das Profilbild ist zu groß (max. 70Kb)",
"back": "Zurück",
"board-change-color": "Farbe ändern",
"board-nb-stars": "%s Sterne",
@@ -56,21 +82,25 @@
"boardChangeColorPopup-title": "Boardfarbe ändern",
"boardChangeTitlePopup-title": "Board umbenennen",
"boardChangeVisibilityPopup-title": "Sichtbarkeit ändern",
- "boardImportBoardPopup-title": "Import board from Trello",
+ "boardChangeWatchPopup-title": "Beobachtung ändern",
"boardMenuPopup-title": "Boardmenü",
"boards": "Boards",
- "bucket-example": "Zum Beispiel \"Bucket List\"",
+ "bucket-example": "z.B. \"Löffelliste\"",
"cancel": "Abbrechen",
"card-archived": "Diese Karte wurde archiviert.",
"card-comments-title": "Diese Karte hat %s Kommentare.",
- "card-delete-notice": "Löschen ist irreversiebel. Alle Aktionen, die mit dieser Karte zu tun haben, werden ebenfalls gelöscht.",
- "card-delete-pop": "Alle Aktionen werden vom Aktivitätsfeed entfernt und du kannst die Karte nicht mehr öffnen. Es gibt keine Möglichkeit diese Aktion rückgängig zu machen.",
- "card-delete-suggest-archive": "Du kannst die Karte statdessen archivieren, um sie vom Bord zu entfernen und die Aktivitäten zu erhalten.",
- "card-edit-attachments": "Anhang ändern",
+ "card-delete-notice": "Löschen ist unwiderruflich. Alle Aktionen die dieser Karte zugeordnet sind werden ebenfalls gelöscht.",
+ "card-delete-pop": "Alle Aktionen werden vom Aktivitätsfeed entfernt und die Karte kann nicht mehr geöffnet werden. Das Löschen kann nicht widerrufen werden!",
+ "card-delete-suggest-archive": "Sie können eine Karte archivieren, um sie von dem Board zu entfernen und die Aktivitäten zu behalten.",
+ "card-due": "Ende",
+ "card-due-on": "Ende am",
+ "card-edit-attachments": "Anhänge ändern",
"card-edit-labels": "Labels ändern",
- "card-edit-members": "Nutzer ändern",
- "card-labels-title": "Label für diese Karte ändern.",
- "card-members-title": "Füge dem Board Nutzer hinzu oder entferne sie von der Karte.",
+ "card-edit-members": "Mitglieder ändern",
+ "card-labels-title": "Labels für diese Karte ändern.",
+ "card-members-title": "Der Karte Board-Mitglieder hinzufügen oder entfernen.",
+ "card-start": "Start",
+ "card-start-on": "Start am",
"cardAttachmentsPopup-title": "Anhängen von",
"cardDeletePopup-title": "Karte löschen?",
"cardDetailsActionsPopup-title": "Kartenaktionen",
@@ -78,20 +108,23 @@
"cardMembersPopup-title": "Mitglieder",
"cardMorePopup-title": "Mehr",
"cards": "Karten",
- "change": "Change",
+ "change": "Ändern",
"change-avatar": "Profilbild ändern",
"change-password": "Passwort ändern",
- "change-permissions": "Ändere Berechtigungen",
+ "change-permissions": "Berechtigungen ändern",
+ "change-settings": "Einstellungen ändern",
"changeAvatarPopup-title": "Profilbild ändern",
- "changeLanguagePopup-title": "Sprache ändern...",
+ "changeLanguagePopup-title": "Sprache ändern",
"changePasswordPopup-title": "Passwort ändern",
- "changePermissionsPopup-title": "Ändere Berechtigungen",
- "click-to-star": "Klicke, um dem Board einen Stern zu geben.",
- "click-to-unstar": "Klicke, um den Stern zu entfernen.",
- "clipboard": "Clipboard or drag & drop",
+ "changePermissionsPopup-title": "Berechtigungen ändern",
+ "changeSettingsPopup-title": "Einstellungen ändern",
+ "checklists": "Checklisten",
+ "click-to-star": "Klicken um dem Board einen Stern zu geben.",
+ "click-to-unstar": "Klicken um den Stern von dem Board zu entfernen.",
+ "clipboard": "Zwischenablage oder Drag & Drop",
"close": "Schließen",
"close-board": "Board schließen",
- "close-board-pop": "You will be able to restore the board by clicking the “Archives” button from the home header.",
+ "close-board-pop": "Sie können das Board wiederherstellen, indem Sie den \"Archiv\"-Button in der Kopfzeile der Startseite anklicken.",
"color-black": "schwarz",
"color-blue": "blau",
"color-green": "grün",
@@ -104,12 +137,15 @@
"color-yellow": "gelb",
"comment": "Kommentar",
"comment-placeholder": "Kommentar schreiben",
+ "comment-only": "Limited",
+ "comment-only-desc": "Can comment on cards only.",
"computer": "Computer",
"create": "Erstellen",
- "createBoardPopup-title": "Erstelle ein Board",
+ "createBoardPopup-title": "Board erstellen",
"createLabelPopup-title": "Label erstellen",
"current": "aktuell",
- "decline": "Decline",
+ "date": "Datum",
+ "decline": "Ablehnen",
"default-avatar": "Standard Profilbild",
"delete": "Löschen",
"deleteLabelPopup-title": "Label löschen?",
@@ -117,86 +153,99 @@
"disambiguateMultiLabelPopup-title": "Labels vereinheitlichen",
"disambiguateMultiMemberPopup-title": "Mitglieder vereinheitlichen",
"discard": "Verwerfen",
- "done": "Done",
- "download": "Download",
+ "done": "Erledigt",
+ "download": "Herunterladen",
"edit": "Bearbeiten",
"edit-avatar": "Profilbild ändern",
"edit-profile": "Profil ändern",
- "editLabelPopup-title": "Ändere Label",
+ "editCardStartDatePopup-title": "Startdatum ändern",
+ "editCardDueDatePopup-title": "Enddatum ändern",
+ "editLabelPopup-title": "Label ändern",
+ "editNotificationPopup-title": "Benachrichtigung ändern",
"editProfilePopup-title": "Profil ändern",
- "email": "Email",
- "email-enrollAccount-subject": "An account created for you on __siteName__",
- "email-enrollAccount-text": "Hello __user__,\n\nTo start using the service, simply click the link below.\n\n__url__\n\nThanks.",
- "email-fail": "Sending email failed",
- "email-invalid": "Invalid email",
- "email-invite": "Invite via Email",
- "email-invite-subject": "__inviter__ sent you an invitation",
- "email-invite-text": "Dear __user__,\n\n__inviter__ invites you to join board \"__board__\" for collaborations.\n\nPlease follow the link below:\n\n__url__\n\nThanks.",
- "email-resetPassword-subject": "Reset your password on __siteName__",
- "email-resetPassword-text": "Hello __user__,\n\nTo reset your password, simply click the link below.\n\n__url__\n\nThanks.",
- "email-sent": "Email sent",
- "email-verifyEmail-subject": "Verify your email address on __siteName__",
- "email-verifyEmail-text": "Hello __user__,\n\nTo verify your account email, simply click the link below.\n\n__url__\n\nThanks.",
- "error-board-doesNotExist": "This board does not exist",
- "error-board-notAdmin": "You need to be admin of this board to do that",
- "error-board-notAMember": "You need to be a member of this board to do that",
- "error-json-malformed": "Your text is not valid JSON",
- "error-json-schema": "Your JSON data does not include the proper information in the correct format",
- "error-list-doesNotExist": "This list does not exist",
- "error-user-doesNotExist": "This user does not exist",
- "error-user-notAllowSelf": "This action on self is not allowed",
- "error-user-notCreated": "This user is not created",
- "export-board": "Export board",
+ "email": "E-Mail",
+ "email-enrollAccount-subject": "Ihr Benutzerkonto auf __siteName__ wurde erstellt",
+ "email-enrollAccount-text": "Hallo __user__,\n\num den Dienst nutzen zu können, klicken Sie bitte auf folgenden Link:\n\n__url__\n\nDanke.",
+ "email-fail": "Senden der E-Mail fehlgeschlagen",
+ "email-invalid": "Ungültige E-Mail-Adresse",
+ "email-invite": "via E-Mail einladen",
+ "email-invite-subject": "__inviter__ hat Ihnen eine Einladung geschickt",
+ "email-invite-text": "Hallo __user__,\n\n__inviter__ hat Sie zu dem Board \"__board__\" eingeladen.\n\nBitte klicken Sie auf folgenden Link:\n\n__url__\n\nDanke.",
+ "email-resetPassword-subject": "Setzten Sie ihr Passwort auf __siteName__ zurück",
+ "email-resetPassword-text": "Hallo __user__,\n\num ihr Passwort zurückzusetzen, klicken Sie bitte auf folgenden Link:\n\n__url__\n\nDanke.",
+ "email-sent": "E-Mail gesendet",
+ "email-verifyEmail-subject": "Bestätigen Sie ihre E-Mail-Adresse auf __siteName__",
+ "email-verifyEmail-text": "Hallo __user__,\n\num ihre E-Mail-Adresse zu bestätigen, klicken Sie bitte auf folgenden Link:\n\n__url__\n\nDanke.",
+ "error-board-doesNotExist": "Dieses Board existiert nicht",
+ "error-board-notAdmin": "Um das zu tun, müssen Sie Administrator dieses Boards sein",
+ "error-board-notAMember": "Um das zu tun, müssen Sie Mitglied dieses Boards sein",
+ "error-json-malformed": "Ihre Eingabe ist kein gültiges JSON",
+ "error-json-schema": "Ihre JSON-Daten enthalten nicht die gewünschten Informationen im richtigen Format",
+ "error-list-doesNotExist": "Diese Liste existiert nicht",
+ "error-user-doesNotExist": "Dieser Nutzer existiert nicht",
+ "error-user-notAllowSelf": "Diese Aktion auf self ist nicht erlaubt",
+ "error-user-notCreated": "Dieser Nutzer ist nicht angelegt",
+ "error-username-taken": "Dieser Benutzername ist bereits vergeben",
+ "export-board": "Board exportieren",
"filter": "Filter",
"filter-cards": "Karten filtern",
"filter-clear": "Filter entfernen",
+ "filter-no-label": "Kein Label",
+ "filter-no-member": "Kein Mitglied",
"filter-on": "Filter ist aktiv",
- "filter-on-desc": "Du filterst die Karten auf diesem Board. Klicke hier, um die Filter zu bearbeiten.",
+ "filter-on-desc": "Sie filtern die Karten in diesem Board. Klicken um die Filter zu bearbeiten.",
"filter-to-selection": "Ergebnisse auswählen",
- "fullname": "Voller Name",
+ "fullname": "Vollständiger Name",
"header-logo-title": "Zurück zur Board Seite.",
+ "hide-system-messages": "Systemmeldungen ausblenden",
+ "headerBarCreateBoardPopup-title": "Board erstellen",
"home": "Home",
"import": "Importieren",
- "import-board": "import from Trello",
- "import-board-trello-instruction": "In your Trello board, go to 'Menu', then 'More', 'Print and Export', 'Export JSON', and copy the resulting text",
- "import-card": "Import a Trello card",
- "import-card-trello-instruction": "Go to a Trello card, select 'Share and more...' then 'Export JSON' and copy the resulting text",
- "import-json-placeholder": "Paste your valid JSON data here",
- "import-members-map": "Your imported board has some members. Please map the members you want to import to Wekan users",
- "import-show-user-mapping": "Review members mapping",
- "import-user-select": "Pick the Wekan user you want to use as this member",
+ "import-board": "von Trello importieren",
+ "import-board-title": "Board von Trello importieren",
+ "import-board-trello-instruction": "Gehen Sie in ihrem Trello-Board auf 'Menü', dann 'Mehr', 'Drucken und Exportieren', 'JSON-Export' und kopieren Sie den dort angezeigten Text",
+ "import-json-placeholder": "Fügen Sie die korrekten JSON-Daten hier ein",
+ "import-map-members": "Mitglieder zuordnen",
+ "import-members-map": "Das importierte Board hat einige Mitglieder. Bitte ordnen Sie die Mitglieder, die importiert werden sollen, Wekan-Nutzern zu",
+ "import-show-user-mapping": "Mitgliederzuordnung überprüfen",
+ "import-user-select": "Wählen Sie den Wekan-Nutzer aus, der dieses Mitglied sein soll",
+ "importMapMembersAddPopup-title": "Wekan-Nutzer auswählen",
"info": "Informationen",
- "initials": "Initialien",
+ "initials": "Initialen",
+ "invalid-date": "Ungültiges Datum",
"joined": "beigetreten",
- "just-invited": "You are just invited to this board",
+ "just-invited": "Sie wurden soeben zu diesem Board eingeladen",
"keyboard-shortcuts": "Tastaturkürzel",
- "label-create": "Neues Label erstellen.",
+ "label-create": "Neues Label erstellen",
"label-default": "%s Label (Standard)",
- "label-delete-pop": "Diese Aktion ist irreversiebel. Das Label wird von allen Karten entfernt und seine Historie gelöscht.",
+ "label-delete-pop": "Diese Aktion ist unwiderruflich. Das Label wird von allen Karten entfernt und seine Historie wird gelöscht.",
"labels": "Labels",
"language": "Sprache",
- "last-admin-desc": "Du kannst die Rolle nicht ändern, es muss mindestens einen Admin geben.",
+ "last-admin-desc": "Sie können keine Rollen ändern, weil es mindestens einen Administrator geben muss.",
"leave-board": "Board verlassen",
"link-card": "Link zu dieser Karte",
"list-archive-cards": "Alle Karten in dieser Liste archivieren",
- "list-archive-cards-pop": "Dies entfernt alle Karten in der Liste vom Board. Um archivierte Karten anzusehen und zurück zum Board zu bringen, klicke \"Menü\" > \"Archivierte Items\".",
+ "list-archive-cards-pop": "Alle Karten von dieser Liste werden vom Board entfernt. Um archivierte Karten anzuzeigen und wiederherzustellen, klicken Sie auf \"Menü\" > \"Archivierte Einträge\".",
"list-move-cards": "Alle Karten in dieser Liste verschieben",
"list-select-cards": "Alle Karten in dieser Liste auswählen",
"listActionPopup-title": "Listenaktionen",
- "listImportCardPopup-title": "Import a Trello card",
+ "listImportCardPopup-title": "Eine Trello-Karte importieren",
"lists": "Listen",
"log-out": "Ausloggen",
+ "log-in": "Einloggen",
"loginPopup-title": "Einloggen",
- "mapMembersAddPopup-title": "Select Wekan member",
- "mapMembersPopup-title": "Map members",
"memberMenuPopup-title": "Nutzereinstellungen",
- "members": "Mitglied",
+ "members": "Mitglieder",
"menu": "Menü",
- "move-selection": "Move selection",
+ "move-selection": "Auswahl verschieben",
"moveCardPopup-title": "Karte verschieben",
- "moveSelectionPopup-title": "Move selection",
+ "moveCardToBottom-title": "Zum Ende verschieben",
+ "moveCardToTop-title": "Zum Anfang verschieben",
+ "moveSelectionPopup-title": "Auswahl verschieben",
"multi-selection": "Mehrfachauswahl",
- "multi-selection-on": "Multi-Selection is on",
+ "multi-selection-on": "Mehrfachauswahl ist aktiv",
+ "muted": "Stumm",
+ "muted-info": "Sie werden über keine Änderung in diesem Board benachrichtigt",
"my-boards": "Meine Boards",
"name": "Name",
"no-archived-cards": "Keine archivierten Karten.",
@@ -204,60 +253,97 @@
"no-results": "Keine Ergebnisse",
"normal": "Normal",
"normal-desc": "Kann Karten anschauen und bearbeiten, aber keine Einstellungen ändern.",
- "not-accepted-yet": "Invitation not accepted yet",
+ "not-accepted-yet": "Die Einladung wurde noch nicht angenommen",
+ "notify-participate": "Benachrichtigungen über alle Karten erhalten, bei denen Sie als Ersteller oder Mitglied teilnehmen",
+ "notify-watch": "Benachrichtigungen über alle Boards, Listen oder Karten erhalten, die Sie beobachten",
"optional": "optional",
"or": "oder",
- "page-maybe-private": "Diese Seite könnte privat sein. Vielleicht kannst du sie sehen, wenn du dich <a href='%s'>einloggst</a>.",
+ "page-maybe-private": "Diese Seite könnte privat sein. Vielleicht können Sie sie sehen, wenn Sie sich <a href='%s'>einloggen</a>.",
"page-not-found": "Seite nicht gefunden.",
"password": "Passwort",
- "paste-or-dragdrop": "to paste, or drag & drop image file to it (image only)",
- "preview": "Preview",
- "previewAttachedImagePopup-title": "Preview",
- "previewClipboardImagePopup-title": "Preview",
+ "paste-or-dragdrop": "Einfügen oder Datei mit Drag & Drop ablegen (nur Bilder)",
+ "participating": "Teilnehmen",
+ "preview": "Vorschau",
+ "previewAttachedImagePopup-title": "Vorschau",
+ "previewClipboardImagePopup-title": "Vorschau",
"private": "Privat",
"private-desc": "Dieses Board ist privat. Nur Nutzer, die zu dem Board gehören, können es anschauen und bearbeiten.",
"profile": "Profil",
"public": "Öffentlich",
"public-desc": "Dieses Board ist öffentlich. Es ist für jeden, der den Link kennt, sichtbar und taucht in Suchmaschinen wie Google auf. Nur Nutzer, die zum Board hinzugefügt wurden, können es bearbeiten.",
- "quick-access-description": "Markiere ein Board mit einem Stern um eine Verknüpfung in diese Leise hinzuzufügen.",
+ "quick-access-description": "Markieren Sie ein Board mit einem Stern, um dieser Leiste eine Verknüpfung hinzuzufügen.",
"remove-cover": "Cover entfernen",
"remove-from-board": "Von Board entfernen",
"remove-label": "Label entfernen",
+ "remove-list": "Liste entfernen",
"remove-member": "Nutzer entfernen",
"remove-member-from-card": "Von Karte entfernen",
- "remove-member-pop": "Entferne __name__ (__username__) von __boardTitle__? Nutzer wird von allen Karten auf diesem Board entfernt werden. Er wird eine Benachrichtigung erhalten.",
- "removeMemberPopup-title": "Nutzer entfernen?",
+ "remove-member-pop": "__name__ (__username__) von __boardTitle__ entfernen? Das Mitglied wird von allen Karten auf diesem Board entfernt. Es erhält eine Benachrichtigung.",
+ "removeMemberPopup-title": "Mitglied entfernen?",
"rename": "Umbenennen",
"rename-board": "Board umbenennen",
"restore": "Wiederherstellen",
"save": "Speichern",
"search": "Suchen",
- "select-color": "Wähle eine Farbe aus",
- "shortcut-assign-self": "Assign yourself to current card",
- "shortcut-autocomplete-emoji": "Autovervollständige Emojis",
- "shortcut-autocomplete-members": "Autovervollständige Nutzer",
+ "select-color": "Farbe auswählen",
+ "shortcut-assign-self": "Fügen Sie sich zur aktuellen Karte hinzu",
+ "shortcut-autocomplete-emoji": "Emojis vervollständigen",
+ "shortcut-autocomplete-members": "Mitglieder vervollständigen",
"shortcut-clear-filters": "Alle Filter entfernen",
"shortcut-close-dialog": "Dialog schließen",
"shortcut-filter-my-cards": "Meine Karten filtern",
"shortcut-show-shortcuts": "Liste der Tastaturkürzel anzeigen",
- "shortcut-toggle-filterbar": "Toggle Filter Sidebar",
+ "shortcut-toggle-filterbar": "Filter-Seitenleiste ein-/ausblenden",
"shortcut-toggle-sidebar": "Seitenleiste ein-/ausblenden",
- "signupPopup-title": "Account erstellen",
- "star-board-title": "Klicke, um das Board mit einem Stern zu kennzeichnen. Es erscheint dann oben in deiner Boardliste.",
- "starred-boards": "Gekennzeichnete Boards",
- "starred-boards-description": "Gekennzeichnete Boards erscheinen oben in deiner Boardliste.",
+ "show-cards-minimum-count": "Zeigt die Kartenanzahl an, wenn die Liste mehr enthält als",
+ "sidebar-open": "Seitenleiste öffnen",
+ "sidebar-close": "Seitenleiste schließen",
+ "signupPopup-title": "Benutzerkonto erstellen",
+ "star-board-title": "Klicken um das Board mit einem Stern zu markieren. Es erscheint dann oben in ihrer Boardliste.",
+ "starred-boards": "Markierte Boards",
+ "starred-boards-description": "Markierte Boards erscheinen oben in ihrer Boardliste.",
"subscribe": "Abonnieren",
"team": "Team",
"this-board": "dieses Board",
"this-card": "diese Karte",
+ "time": "Zeit",
"title": "Titel",
- "unassign-member": "Mitglied abziehen",
- "unsaved-description": "Es gibt eine ungespeicherte Beschreibung.",
+ "tracking": "Folgen",
+ "tracking-info": "Sie werden über alle Änderungen an Karten benachrichtigt, an denen Sie als Ersteller oder Mitglied beteiligt sind.",
+ "unassign-member": "Mitglied entfernen",
+ "unsaved-description": "Sie haben eine nicht gespeicherte Änderung.",
+ "unwatch": "Beobachtung entfernen",
"upload": "Upload",
"upload-avatar": "Profilbild hochladen",
"uploaded-avatar": "Profilbild hochgeladen",
- "username": "Nutzername",
+ "username": "Benutzername",
"view-it": "Ansehen",
"warn-list-archived": "Warnung: Diese Karte befindet sich in einer archivierten Liste",
- "what-to-do": "Was willst du tun?"
-}
+ "watch": "Beobachten",
+ "watching": "Beobachten",
+ "watching-info": "Sie werden über alle Änderungen in diesem Board benachrichtigt",
+ "welcome-board": "Willkommen-Board",
+ "welcome-list1": "Grundlagen",
+ "welcome-list2": "Fortgeschritten",
+ "what-to-do": "Was wollen Sie tun?",
+ "admin-panel": "Administration",
+ "settings": "Einstellungen",
+ "people": "Nutzer",
+ "registration": "Registrierung",
+ "disable-self-registration": "Selbstregistrierung deaktivieren",
+ "invite": "Einladen",
+ "invite-people": "Nutzer einladen",
+ "to-boards": "In Board(s)",
+ "email-addresses": "E-Mail Adressen",
+ "smtp-host-description": "Die Adresse Ihres SMTP-Servers für ausgehende E-Mails.",
+ "smtp-port-description": "Der Port Ihres SMTP-Servers für ausgehende E-Mails.",
+ "smtp-host": "SMTP-Server",
+ "smtp-port": "SMTP-Port",
+ "smtp-username": "Benutzername",
+ "smtp-password": "Passwort",
+ "send-from": "Absender",
+ "invitation-code": "Einladungscode",
+ "email-invite-register-subject": "__inviter__ hat Ihnen eine Einladung geschickt",
+ "email-invite-register-text": "Hallo __user__,\n\n__inviter__ hat Sie für Ihre Zusammenarbeit zu Wekan eingeladen.\n\nBitte klicken Sie auf folgenden Link:\n__url__\n\nIhr Einladungscode lautet: __icode__\n\nDanke.",
+ "error-invitation-code-not-exist": "Ungültiger Einladungscode"
+} \ No newline at end of file
diff --git a/i18n/en.i18n.json b/i18n/en.i18n.json
index f9cf7e82..19734045 100755..100644
--- a/i18n/en.i18n.json
+++ b/i18n/en.i18n.json
@@ -36,10 +36,13 @@
"activity-removed": "removed %s from %s",
"activity-sent": "sent %s to %s",
"activity-unjoined": "unjoined %s",
+ "activity-checklist-added": "added checklist to %s",
"add": "Add",
"add-attachment": "Add an attachment",
"add-board": "Add a new board",
"add-card": "Add a card",
+ "add-checklist": "Add a checklist",
+ "add-checklist-item": "Add an item to checklist",
"add-cover": "Add Cover",
"add-label": "Add the label",
"add-list": "Add a list",
@@ -51,6 +54,7 @@
"all-boards": "All boards",
"and-n-other-card": "And __count__ other card",
"and-n-other-card_plural": "And __count__ other cards",
+ "apply": "Apply",
"app-is-offline": "The application is currently offline, refreshing the page will cause data loss.",
"archive": "Archive",
"archive-all": "Archive All",
@@ -88,11 +92,15 @@
"card-delete-notice": "Deleting is permanent. You will lose all actions associated with this card.",
"card-delete-pop": "All actions will be removed from the activity feed and you won't be able to re-open the card. There is no undo.",
"card-delete-suggest-archive": "You can archive a card to remove it from the board and preserve the activity.",
+ "card-due": "Due",
+ "card-due-on": "Due on",
"card-edit-attachments": "Edit attachments",
"card-edit-labels": "Edit labels",
"card-edit-members": "Edit members",
"card-labels-title": "Change the labels for the card.",
"card-members-title": "Add or remove members of the board from the card.",
+ "card-start": "Start",
+ "card-start-on": "Starts on",
"cardAttachmentsPopup-title": "Attach From",
"cardDeletePopup-title": "Delete Card?",
"cardDetailsActionsPopup-title": "Card Actions",
@@ -104,13 +112,16 @@
"change-avatar": "Change Avatar",
"change-password": "Change Password",
"change-permissions": "Change permissions",
+ "change-settings": "Change Settings",
"changeAvatarPopup-title": "Change Avatar",
"changeLanguagePopup-title": "Change Language",
"changePasswordPopup-title": "Change Password",
"changePermissionsPopup-title": "Change Permissions",
+ "changeSettingsPopup-title": "Change Settings",
+ "checklists": "Checklists",
"click-to-star": "Click to star this board.",
"click-to-unstar": "Click to unstar this board.",
- "clipboard" : "Clipboard or drag & drop",
+ "clipboard": "Clipboard or drag & drop",
"close": "Close",
"close-board": "Close Board",
"close-board-pop": "You will be able to restore the board by clicking the “Archives” button from the home header.",
@@ -126,11 +137,14 @@
"color-yellow": "yellow",
"comment": "Comment",
"comment-placeholder": "Write a comment",
+ "comment-only": "Limited",
+ "comment-only-desc": "Can comment on cards only.",
"computer": "Computer",
"create": "Create",
"createBoardPopup-title": "Create Board",
"createLabelPopup-title": "Create Label",
"current": "current",
+ "date": "Date",
"decline": "Decline",
"default-avatar": "Default avatar",
"delete": "Delete",
@@ -144,22 +158,24 @@
"edit": "Edit",
"edit-avatar": "Change Avatar",
"edit-profile": "Edit Profile",
+ "editCardStartDatePopup-title": "Change start date",
+ "editCardDueDatePopup-title": "Change due date",
"editLabelPopup-title": "Change Label",
"editNotificationPopup-title": "Edit Notification",
"editProfilePopup-title": "Edit Profile",
"email": "Email",
"email-enrollAccount-subject": "An account created for you on __siteName__",
- "email-enrollAccount-text": "Hello __user__,\n\nTo start using the service, simply click the link below.\n\n__url__\n\nThanks.\n",
+ "email-enrollAccount-text": "Hello __user__,\n\nTo start using the service, simply click the link below.\n\n__url__\n\nThanks.",
"email-fail": "Sending email failed",
"email-invalid": "Invalid email",
"email-invite": "Invite via Email",
"email-invite-subject": "__inviter__ sent you an invitation",
- "email-invite-text": "Dear __user__,\n\n__inviter__ invites you to join board \"__board__\" for collaborations.\n\nPlease follow the link below:\n\n__url__\n\nThanks.\n",
+ "email-invite-text": "Dear __user__,\n\n__inviter__ invites you to join board \"__board__\" for collaborations.\n\nPlease follow the link below:\n\n__url__\n\nThanks.",
"email-resetPassword-subject": "Reset your password on __siteName__",
- "email-resetPassword-text": "Hello __user__,\n\nTo reset your password, simply click the link below.\n\n__url__\n\nThanks.\n",
+ "email-resetPassword-text": "Hello __user__,\n\nTo reset your password, simply click the link below.\n\n__url__\n\nThanks.",
"email-sent": "Email sent",
"email-verifyEmail-subject": "Verify your email address on __siteName__",
- "email-verifyEmail-text": "Hello __user__,\n\nTo verify your account email, simply click the link below.\n\n__url__\n\nThanks.\n",
+ "email-verifyEmail-text": "Hello __user__,\n\nTo verify your account email, simply click the link below.\n\n__url__\n\nThanks.",
"error-board-doesNotExist": "This board does not exist",
"error-board-notAdmin": "You need to be admin of this board to do that",
"error-board-notAMember": "You need to be a member of this board to do that",
@@ -169,15 +185,20 @@
"error-user-doesNotExist": "This user does not exist",
"error-user-notAllowSelf": "This action on self is not allowed",
"error-user-notCreated": "This user is not created",
+ "error-username-taken": "This username is already taken",
"export-board": "Export board",
"filter": "Filter",
"filter-cards": "Filter Cards",
"filter-clear": "Clear filter",
+ "filter-no-label": "No label",
+ "filter-no-member": "No member",
"filter-on": "Filter is on",
"filter-on-desc": "You are filtering cards on this board. Click here to edit filter.",
"filter-to-selection": "Filter to selection",
"fullname": "Full Name",
"header-logo-title": "Go back to your boards page.",
+ "hide-system-messages": "Hide system messages",
+ "headerBarCreateBoardPopup-title": "Create Board",
"home": "Home",
"import": "Import",
"import-board": "import from Trello",
@@ -191,6 +212,7 @@
"importMapMembersAddPopup-title": "Select Wekan member",
"info": "Infos",
"initials": "Initials",
+ "invalid-date": "Invalid date",
"joined": "joined",
"just-invited": "You are just invited to this board",
"keyboard-shortcuts": "Keyboard shortcuts",
@@ -253,6 +275,7 @@
"remove-cover": "Remove Cover",
"remove-from-board": "Remove from Board",
"remove-label": "Remove the label",
+ "remove-list": "Remove the list",
"remove-member": "Remove Member",
"remove-member-from-card": "Remove from Card",
"remove-member-pop": "Remove __name__ (__username__) from __boardTitle__? The member will be removed from all cards on this board. They will receive a notification.",
@@ -272,6 +295,9 @@
"shortcut-show-shortcuts": "Bring up this shortcuts list",
"shortcut-toggle-filterbar": "Toggle Filter Sidebar",
"shortcut-toggle-sidebar": "Toggle Board Sidebar",
+ "show-cards-minimum-count": "Show cards count if list contains more than",
+ "sidebar-open": "Open Sidebar",
+ "sidebar-close": "Close Sidebar",
"signupPopup-title": "Create an Account",
"star-board-title": "Click to star this board. It will show up at top of your boards list.",
"starred-boards": "Starred Boards",
@@ -280,6 +306,7 @@
"team": "Team",
"this-board": "this board",
"this-card": "this card",
+ "time": "Time",
"title": "Title",
"tracking": "Tracking",
"tracking-info": "You will be notified of any changes to those cards you are involved as creator or member.",
@@ -298,5 +325,25 @@
"welcome-board": "Welcome Board",
"welcome-list1": "Basics",
"welcome-list2": "Advanced",
- "what-to-do": "What do you want to do?"
+ "what-to-do": "What do you want to do?",
+ "admin-panel": "Admin Panel",
+ "settings": "Settings",
+ "people": "People",
+ "registration": "Registration",
+ "disable-self-registration": "Disable Self-Registration",
+ "invite": "Invite",
+ "invite-people": "Invite People",
+ "to-boards": "To board(s)",
+ "email-addresses": "Email Addresses",
+ "smtp-host-description": "The address of the SMTP server that handles your emails.",
+ "smtp-port-description": "The port your SMTP server uses for outgoing emails.",
+ "smtp-host": "SMTP Host",
+ "smtp-port": "SMTP Port",
+ "smtp-username": "Username",
+ "smtp-password": "Password",
+ "send-from": "From",
+ "invitation-code": "Invitation Code",
+ "email-invite-register-subject": "__inviter__ sent you an invitation",
+ "email-invite-register-text": "Dear __user__,\n\n__inviter__ invites you to Wekan for collaborations.\n\nPlease follow the link below:\n__url__\n\nAnd your invitation code is: __icode__\n\nThanks.",
+ "error-invitation-code-not-exist": "Invitation code doesn't exist"
}
diff --git a/i18n/eo.i18n.json b/i18n/eo.i18n.json
new file mode 100644
index 00000000..206c7739
--- /dev/null
+++ b/i18n/eo.i18n.json
@@ -0,0 +1,349 @@
+{
+ "accept": "Akcepti",
+ "act-activity-notify": "[Wekan] Activity Notification",
+ "act-addAttachment": "attached __attachment__ to __card__",
+ "act-addComment": "commented on __card__: __comment__",
+ "act-createBoard": "kreiis __board__",
+ "act-createCard": "aldonis __card__ al __list__",
+ "act-createList": "aldonis __card__ al __board__",
+ "act-addBoardMember": "aldonis __member__ al __board__",
+ "act-archivedBoard": "archived __board__",
+ "act-archivedCard": "archived __card__",
+ "act-archivedList": "archived __list__",
+ "act-importBoard": "imported __board__",
+ "act-importCard": "imported __card__",
+ "act-importList": "imported __list__",
+ "act-joinMember": "aldonis __member__ al __card__",
+ "act-moveCard": "moved __card__ from __oldList__ to __list__",
+ "act-removeBoardMember": "removed __member__ from __board__",
+ "act-restoredCard": "restored __card__ to __board__",
+ "act-unjoinMember": "removed __member__ from __card__",
+ "act-withBoardTitle": "[Wekan] __board__",
+ "act-withCardTitle": "[__board__] __card__",
+ "actions": "Akcioj",
+ "activities": "Aktivaĵoj",
+ "activity": "Aktivaĵo",
+ "activity-added": "aldonis %s al %s",
+ "activity-archived": "archived %s",
+ "activity-attached": "attached %s to %s",
+ "activity-created": "kreiis %s",
+ "activity-excluded": "excluded %s from %s",
+ "activity-imported": "imported %s into %s from %s",
+ "activity-imported-board": "imported %s from %s",
+ "activity-joined": "joined %s",
+ "activity-moved": "moved %s from %s to %s",
+ "activity-on": "on %s",
+ "activity-removed": "removed %s from %s",
+ "activity-sent": "sendis %s al %s",
+ "activity-unjoined": "unjoined %s",
+ "activity-checklist-added": "added checklist to %s",
+ "add": "Aldoni",
+ "add-attachment": "Add an attachment",
+ "add-board": "Aldoni novan tavolo",
+ "add-card": "Aldoni karton",
+ "add-checklist": "Add a checklist",
+ "add-checklist-item": "Add an item to checklist",
+ "add-cover": "Add Cover",
+ "add-label": "Aldoni etikedo",
+ "add-list": "Aldoni liston",
+ "add-members": "Aldoni membrojn",
+ "added": "Aldonita",
+ "addMemberPopup-title": "Membroj",
+ "admin": "Admin",
+ "admin-desc": "Can view and edit cards, remove members, and change settings for the board.",
+ "all-boards": "All boards",
+ "and-n-other-card": "And __count__ other card",
+ "and-n-other-card_plural": "And __count__ other cards",
+ "apply": "Apliki",
+ "app-is-offline": "The application is currently offline, refreshing the page will cause data loss.",
+ "archive": "Arkivi",
+ "archive-all": "Arkivi ĉion",
+ "archive-board": "Archive Board",
+ "archive-card": "Arkivi karton",
+ "archive-list": "Arkivi liston",
+ "archive-selection": "Arkivi elekton",
+ "archiveBoardPopup-title": "Archive Board?",
+ "archived-items": "Archived Items",
+ "archives": "Arkivoj",
+ "assign-member": "Assign member",
+ "attached": "attached",
+ "attachment": "Attachment",
+ "attachment-delete-pop": "Deleting an attachment is permanent. There is no undo.",
+ "attachmentDeletePopup-title": "Delete Attachment?",
+ "attachments": "Attachments",
+ "auto-watch": "Automatically watch boards when create it",
+ "avatar-too-big": "The avatar is too large (70Kb max)",
+ "back": "Reen",
+ "board-change-color": "Ŝanĝi koloron",
+ "board-nb-stars": "%s stars",
+ "board-not-found": "Board not found",
+ "board-private-info": "This board will be <strong>private</strong>.",
+ "board-public-info": "This board will be <strong>public</strong>.",
+ "boardChangeColorPopup-title": "Change Board Background",
+ "boardChangeTitlePopup-title": "Rename Board",
+ "boardChangeVisibilityPopup-title": "Change Visibility",
+ "boardChangeWatchPopup-title": "Change Watch",
+ "boardMenuPopup-title": "Board Menu",
+ "boards": "Boards",
+ "bucket-example": "Like “Bucket List” for example",
+ "cancel": "Cancel",
+ "card-archived": "Karto arkivita.",
+ "card-comments-title": "This card has %s comment.",
+ "card-delete-notice": "Deleting is permanent. You will lose all actions associated with this card.",
+ "card-delete-pop": "All actions will be removed from the activity feed and you won't be able to re-open the card. There is no undo.",
+ "card-delete-suggest-archive": "You can archive a card to remove it from the board and preserve the activity.",
+ "card-due": "Due",
+ "card-due-on": "Due on",
+ "card-edit-attachments": "Edit attachments",
+ "card-edit-labels": "Redakti etikedojn",
+ "card-edit-members": "Redakti membroj",
+ "card-labels-title": "Change the labels for the card.",
+ "card-members-title": "Add or remove members of the board from the card.",
+ "card-start": "Komenco",
+ "card-start-on": "Komencas je ",
+ "cardAttachmentsPopup-title": "Attach From",
+ "cardDeletePopup-title": "Delete Card?",
+ "cardDetailsActionsPopup-title": "Card Actions",
+ "cardLabelsPopup-title": "Etikedoj",
+ "cardMembersPopup-title": "Membroj",
+ "cardMorePopup-title": "Pli",
+ "cards": "Karto",
+ "change": "Ŝanĝi",
+ "change-avatar": "Change Avatar",
+ "change-password": "Ŝangi pasvorton",
+ "change-permissions": "Change permissions",
+ "change-settings": "Ŝanĝi agordojn",
+ "changeAvatarPopup-title": "Change Avatar",
+ "changeLanguagePopup-title": "Ŝanĝi lingvon",
+ "changePasswordPopup-title": "Ŝangi pasvorton",
+ "changePermissionsPopup-title": "Change Permissions",
+ "changeSettingsPopup-title": "Ŝanĝi agordojn",
+ "checklists": "Checklists",
+ "click-to-star": "Click to star this board.",
+ "click-to-unstar": "Click to unstar this board.",
+ "clipboard": "Clipboard or drag & drop",
+ "close": "Fermi",
+ "close-board": "Close Board",
+ "close-board-pop": "You will be able to restore the board by clicking the “Archives” button from the home header.",
+ "color-black": "nigra",
+ "color-blue": "blua",
+ "color-green": "verda",
+ "color-lime": "lime",
+ "color-orange": "oranĝa",
+ "color-pink": "pink",
+ "color-purple": "purple",
+ "color-red": "ruĝa",
+ "color-sky": "sky",
+ "color-yellow": "flava",
+ "comment": "Komento",
+ "comment-placeholder": "Skribi komenton",
+ "comment-only": "Limited",
+ "comment-only-desc": "Can comment on cards only.",
+ "computer": "Komputilo",
+ "create": "Krei",
+ "createBoardPopup-title": "Krei ",
+ "createLabelPopup-title": "Create Label",
+ "current": "current",
+ "date": "Dato",
+ "decline": "Decline",
+ "default-avatar": "Default avatar",
+ "delete": "Delete",
+ "deleteLabelPopup-title": "Delete Label?",
+ "description": "Description",
+ "disambiguateMultiLabelPopup-title": "Disambiguate Label Action",
+ "disambiguateMultiMemberPopup-title": "Disambiguate Member Action",
+ "discard": "Discard",
+ "done": "Farite",
+ "download": "Elŝuti",
+ "edit": "Redakti",
+ "edit-avatar": "Change Avatar",
+ "edit-profile": "Redakti profilo",
+ "editCardStartDatePopup-title": "Redakti komencdato",
+ "editCardDueDatePopup-title": "Change due date",
+ "editLabelPopup-title": "Ŝanĝi etikedo",
+ "editNotificationPopup-title": "Edit Notification",
+ "editProfilePopup-title": "Redakti profilo",
+ "email": "Retpoŝtadreso",
+ "email-enrollAccount-subject": "An account created for you on __siteName__",
+ "email-enrollAccount-text": "Hello __user__,\n\nTo start using the service, simply click the link below.\n\n__url__\n\nThanks.",
+ "email-fail": "Malsukcese sendis retpoŝton",
+ "email-invalid": "Nevalida retpoŝtadreso",
+ "email-invite": "Inviti per retpoŝto",
+ "email-invite-subject": "__inviter__ sent you an invitation",
+ "email-invite-text": "Dear __user__,\n\n__inviter__ invites you to join board \"__board__\" for collaborations.\n\nPlease follow the link below:\n\n__url__\n\nThanks.",
+ "email-resetPassword-subject": "Reset your password on __siteName__",
+ "email-resetPassword-text": "Hello __user__,\n\nTo reset your password, simply click the link below.\n\n__url__\n\nThanks.",
+ "email-sent": "Sendis retpoŝton",
+ "email-verifyEmail-subject": "Verify your email address on __siteName__",
+ "email-verifyEmail-text": "Hello __user__,\n\nTo verify your account email, simply click the link below.\n\n__url__\n\nThanks.",
+ "error-board-doesNotExist": "This board does not exist",
+ "error-board-notAdmin": "You need to be admin of this board to do that",
+ "error-board-notAMember": "You need to be a member of this board to do that",
+ "error-json-malformed": "Via teksto estas nevalida JSON",
+ "error-json-schema": "Via JSON ne enhavas la ĝustajn informojn en ĝusta formato",
+ "error-list-doesNotExist": "Tio listo ne ekzistas",
+ "error-user-doesNotExist": "Tio uzanto ne ekzistas",
+ "error-user-notAllowSelf": "This action on self is not allowed",
+ "error-user-notCreated": "Uzanto ne kreita",
+ "error-username-taken": "Uzantnomo jam prenita",
+ "export-board": "Export board",
+ "filter": "Filter",
+ "filter-cards": "Filter Cards",
+ "filter-clear": "Clear filter",
+ "filter-no-label": "Nenia etikedo",
+ "filter-no-member": "Nenia membro",
+ "filter-on": "Filter is on",
+ "filter-on-desc": "You are filtering cards on this board. Click here to edit filter.",
+ "filter-to-selection": "Filter to selection",
+ "fullname": "Full Name",
+ "header-logo-title": "Go back to your boards page.",
+ "hide-system-messages": "Hide system messages",
+ "headerBarCreateBoardPopup-title": "Krei ",
+ "home": "Hejmo",
+ "import": "Importi",
+ "import-board": "Importi de Trello",
+ "import-board-title": "Import board from Trello",
+ "import-board-trello-instruction": "In your Trello board, go to 'Menu', then 'More', 'Print and Export', 'Export JSON', and copy the resulting text.",
+ "import-json-placeholder": "Paste your valid JSON data here",
+ "import-map-members": "Map members",
+ "import-members-map": "Your imported board has some members. Please map the members you want to import to Wekan users",
+ "import-show-user-mapping": "Review members mapping",
+ "import-user-select": "Pick the Wekan user you want to use as this member",
+ "importMapMembersAddPopup-title": "Select Wekan member",
+ "info": "Informoj",
+ "initials": "Initials",
+ "invalid-date": "Invalid date",
+ "joined": "joined",
+ "just-invited": "You are just invited to this board",
+ "keyboard-shortcuts": "Keyboard shortcuts",
+ "label-create": "Krei novan etikedo",
+ "label-default": "%s label (default)",
+ "label-delete-pop": "There is no undo. This will remove this label from all cards and destroy its history.",
+ "labels": "Etikedoj",
+ "language": "Lingvo",
+ "last-admin-desc": "You can’t change roles because there must be at least one admin.",
+ "leave-board": "Leave Board",
+ "link-card": "Ligi al ĉitiu karto",
+ "list-archive-cards": "Archive all cards in this list",
+ "list-archive-cards-pop": "This will remove all the cards in this list from the board. To view archived cards and bring them back to the board, click “Menu” > “Archived Items”.",
+ "list-move-cards": "Movu ĉiujn kartojn en tiu listo.",
+ "list-select-cards": "Elektu ĉiujn kartojn en tiu listo.",
+ "listActionPopup-title": "List Actions",
+ "listImportCardPopup-title": "Import a Trello card",
+ "lists": "Listoj",
+ "log-out": "Elsaluti",
+ "log-in": "Ensaluti",
+ "loginPopup-title": "Ensaluti",
+ "memberMenuPopup-title": "Membraj agordoj",
+ "members": "Membroj",
+ "menu": "Menuo",
+ "move-selection": "Movi elekton",
+ "moveCardPopup-title": "Movi karton",
+ "moveCardToBottom-title": "Movi suben",
+ "moveCardToTop-title": "Movi supren",
+ "moveSelectionPopup-title": "Movi elekton",
+ "multi-selection": "Multi-Selection",
+ "multi-selection-on": "Multi-Selection is on",
+ "muted": "Muted",
+ "muted-info": "You will never be notified of any changes in this board",
+ "my-boards": "My Boards",
+ "name": "Nomo",
+ "no-archived-cards": "No archived cards.",
+ "no-archived-lists": "No archived lists.",
+ "no-results": "Neniaj rezultoj",
+ "normal": "Normala",
+ "normal-desc": "Can view and edit cards. Can't change settings.",
+ "not-accepted-yet": "Invitation not accepted yet",
+ "notify-participate": "Receive updates to any cards you participate as creater or member",
+ "notify-watch": "Receive updates to any boards, lists, or cards you’re watching",
+ "optional": "optional",
+ "or": "aŭ",
+ "page-maybe-private": "This page may be private. You may be able to view it by <a href='%s'>logging in</a>.",
+ "page-not-found": "Netrovita paĝo.",
+ "password": "Pasvorto",
+ "paste-or-dragdrop": "to paste, or drag & drop image file to it (image only)",
+ "participating": "Participating",
+ "preview": "Preview",
+ "previewAttachedImagePopup-title": "Preview",
+ "previewClipboardImagePopup-title": "Preview",
+ "private": "Privata",
+ "private-desc": "This board is private. Only people added to the board can view and edit it.",
+ "profile": "Profilo",
+ "public": "Publika",
+ "public-desc": "This board is public. It's visible to anyone with the link and will show up in search engines like Google. Only people added to the board can edit.",
+ "quick-access-description": "Star a board to add a shortcut in this bar.",
+ "remove-cover": "Remove Cover",
+ "remove-from-board": "Remove from Board",
+ "remove-label": "Forigi etikedon",
+ "remove-list": "Forigi liston",
+ "remove-member": "Forigi membron",
+ "remove-member-from-card": "Forigi de karto",
+ "remove-member-pop": "Remove __name__ (__username__) from __boardTitle__? The member will be removed from all cards on this board. They will receive a notification.",
+ "removeMemberPopup-title": "Remove Member?",
+ "rename": "Renomi",
+ "rename-board": "Rename Board",
+ "restore": "Forigi",
+ "save": "Savi",
+ "search": "Serĉi",
+ "select-color": "Elektu koloron",
+ "shortcut-assign-self": "Assign yourself to current card",
+ "shortcut-autocomplete-emoji": "Autocomplete emoji",
+ "shortcut-autocomplete-members": "Autocomplete members",
+ "shortcut-clear-filters": "Clear all filters",
+ "shortcut-close-dialog": "Close Dialog",
+ "shortcut-filter-my-cards": "Filter my cards",
+ "shortcut-show-shortcuts": "Bring up this shortcuts list",
+ "shortcut-toggle-filterbar": "Toggle Filter Sidebar",
+ "shortcut-toggle-sidebar": "Toggle Board Sidebar",
+ "show-cards-minimum-count": "Show cards count if list contains more than",
+ "sidebar-open": "Open Sidebar",
+ "sidebar-close": "Close Sidebar",
+ "signupPopup-title": "Create an Account",
+ "star-board-title": "Click to star this board. It will show up at top of your boards list.",
+ "starred-boards": "Starred Boards",
+ "starred-boards-description": "Starred boards show up at the top of your boards list.",
+ "subscribe": "Subscribe",
+ "team": "Teamo",
+ "this-board": "this board",
+ "this-card": "this card",
+ "time": "Tempo",
+ "title": "Titolo",
+ "tracking": "Tracking",
+ "tracking-info": "You will be notified of any changes to those cards you are involved as creator or member.",
+ "unassign-member": "Unassign member",
+ "unsaved-description": "You have an unsaved description.",
+ "unwatch": "Unwatch",
+ "upload": "Alŝuti",
+ "upload-avatar": "Upload an avatar",
+ "uploaded-avatar": "Uploaded an avatar",
+ "username": "Uzantnomo",
+ "view-it": "View it",
+ "warn-list-archived": "warning: this card is in an archived list",
+ "watch": "Rigardi",
+ "watching": "Rigardante",
+ "watching-info": "You will be notified of any change in this board",
+ "welcome-board": "Welcome Board",
+ "welcome-list1": "Basics",
+ "welcome-list2": "Advanced",
+ "what-to-do": "Kion vi volas fari?",
+ "admin-panel": "Admin Panel",
+ "settings": "Settings",
+ "people": "People",
+ "registration": "Registration",
+ "disable-self-registration": "Disable Self-Registration",
+ "invite": "Invite",
+ "invite-people": "Invite People",
+ "to-boards": "To board(s)",
+ "email-addresses": "Email Addresses",
+ "smtp-host-description": "The address of the SMTP server that handles your emails.",
+ "smtp-port-description": "The port your SMTP server uses for outgoing emails.",
+ "smtp-host": "SMTP Host",
+ "smtp-port": "SMTP Port",
+ "smtp-username": "Uzantnomo",
+ "smtp-password": "Pasvorto",
+ "send-from": "From",
+ "invitation-code": "Invitation Code",
+ "email-invite-register-subject": "__inviter__ sent you an invitation",
+ "email-invite-register-text": "Dear __user__,\n\n__inviter__ invites you to Wekan for collaborations.\n\nPlease follow the link below:\n__url__\n\nAnd your invitation code is: __icode__\n\nThanks.",
+ "error-invitation-code-not-exist": "Invitation code doesn't exist"
+} \ No newline at end of file
diff --git a/i18n/es-ES.i18n.json b/i18n/es-ES.i18n.json
index 22aeb704..632a9394 100644
--- a/i18n/es-ES.i18n.json
+++ b/i18n/es-ES.i18n.json
@@ -1,5 +1,25 @@
{
"accept": "Aceptar",
+ "act-activity-notify": "[Wekan] Activity Notification",
+ "act-addAttachment": "attached __attachment__ to __card__",
+ "act-addComment": "commented on __card__: __comment__",
+ "act-createBoard": "created __board__",
+ "act-createCard": "added __card__ to __list__",
+ "act-createList": "added __list__ to __board__",
+ "act-addBoardMember": "added __member__ to __board__",
+ "act-archivedBoard": "archived __board__",
+ "act-archivedCard": "archived __card__",
+ "act-archivedList": "archived __list__",
+ "act-importBoard": "imported __board__",
+ "act-importCard": "imported __card__",
+ "act-importList": "imported __list__",
+ "act-joinMember": "added __member__ to __card__",
+ "act-moveCard": "moved __card__ from __oldList__ to __list__",
+ "act-removeBoardMember": "removed __member__ from __board__",
+ "act-restoredCard": "restored __card__ to __board__",
+ "act-unjoinMember": "removed __member__ from __card__",
+ "act-withBoardTitle": "[Wekan] __board__",
+ "act-withCardTitle": "[__board__] __card__",
"actions": "Acciones",
"activities": "Actividad",
"activity": "Actividad",
@@ -16,10 +36,13 @@
"activity-removed": "ha eliminado %s de %s",
"activity-sent": "ha enviado %s a %s",
"activity-unjoined": "ha abandonado %s",
+ "activity-checklist-added": "added checklist to %s",
"add": "Añadir",
"add-attachment": "Añadir archivo adjunto",
"add-board": "Añadir nuevo tablero",
"add-card": "Añadir tarjeta",
+ "add-checklist": "Add a checklist",
+ "add-checklist-item": "Add an item to checklist",
"add-cover": "Añadir cubierta",
"add-label": "Añadir etiqueta",
"add-list": "Añadir lista",
@@ -31,6 +54,8 @@
"all-boards": "Todos los tableros",
"and-n-other-card": "And __count__ other card",
"and-n-other-card_plural": "And __count__ other cards",
+ "apply": "Apply",
+ "app-is-offline": "The application is currently offline, refreshing the page will cause data loss.",
"archive": "Guardar",
"archive-all": "Guardar Todo",
"archive-board": "Archivar tablero",
@@ -46,6 +71,7 @@
"attachment-delete-pop": "El borrado de un archivo adjunto es permanente. No se puede deshacer.",
"attachmentDeletePopup-title": "¿Borrar adjunto?",
"attachments": "Adjuntos",
+ "auto-watch": "Automatically watch boards when create it",
"avatar-too-big": "El avatar es demasiado grande (70Kb max)",
"back": "Atrás",
"board-change-color": "Cambiar color",
@@ -56,7 +82,7 @@
"boardChangeColorPopup-title": "Cambiar fondo",
"boardChangeTitlePopup-title": "Renombrar tablero",
"boardChangeVisibilityPopup-title": "Cambiar visibilidad",
- "boardImportBoardPopup-title": "Importar tablero desde Trello",
+ "boardChangeWatchPopup-title": "Change Watch",
"boardMenuPopup-title": "Menú del tablero",
"boards": "Tableros",
"bucket-example": "Al igual que “Bucket List”, por ejemplo",
@@ -66,11 +92,15 @@
"card-delete-notice": "El borrado es permanente. Perderás todas las acciones asociadas a esta tarjeta.",
"card-delete-pop": "Todas las acciones se eliminarán de la alimentación de la actividad y no podrán volver a abrir la tarjeta. No se puede deshacer.",
"card-delete-suggest-archive": "Puedes archivar una tarjeta para quitarla del tablero y conservar la actividad.",
+ "card-due": "Due",
+ "card-due-on": "Due on",
"card-edit-attachments": "Editar archivos adjuntos",
"card-edit-labels": "Editar etiquetas",
"card-edit-members": "Editar miembros",
"card-labels-title": "Cambia las etiquetas de la tarjeta",
"card-members-title": "Añadir o eliminar miembros del tablero desde la tarjeta.",
+ "card-start": "Start",
+ "card-start-on": "Starts on",
"cardAttachmentsPopup-title": "Adjuntar desde",
"cardDeletePopup-title": "¿Borrar tarjeta?",
"cardDetailsActionsPopup-title": "Acciones de tarjeta",
@@ -82,10 +112,13 @@
"change-avatar": "Cambiar Avatar",
"change-password": "Cambiar la contraseña",
"change-permissions": "Cambiar permisos",
+ "change-settings": "Change Settings",
"changeAvatarPopup-title": "Cambiar Avatar",
"changeLanguagePopup-title": "Cambiar idioma",
"changePasswordPopup-title": "Cambiar la contraseña",
"changePermissionsPopup-title": "Cambiar permisos",
+ "changeSettingsPopup-title": "Change Settings",
+ "checklists": "Checklists",
"click-to-star": "Haz clic para destacar este tablero.",
"click-to-unstar": "Haz clic para dejar de destacar este tablero.",
"clipboard": "Portapapeles o drag & drop",
@@ -104,11 +137,14 @@
"color-yellow": "amarillo",
"comment": "Comentario",
"comment-placeholder": "Escribir un comentario",
+ "comment-only": "Limited",
+ "comment-only-desc": "Can comment on cards only.",
"computer": "Ordenador",
"create": "Crear",
"createBoardPopup-title": "Crear tablero",
"createLabelPopup-title": "Crear etiqueta",
"current": "actual",
+ "date": "Date",
"decline": "Denegar",
"default-avatar": "Avatar por defecto",
"delete": "Borrar",
@@ -122,7 +158,10 @@
"edit": "Editar",
"edit-avatar": "Cambiar Avatar",
"edit-profile": "Edita tu Perfil",
+ "editCardStartDatePopup-title": "Change start date",
+ "editCardDueDatePopup-title": "Change due date",
"editLabelPopup-title": "Cambiar etiqueta",
+ "editNotificationPopup-title": "Edit Notification",
"editProfilePopup-title": "Editar Perfil",
"email": "Correo electrónico",
"email-enrollAccount-subject": "Se ha creado un cuenta para ti en __siteName__",
@@ -146,27 +185,34 @@
"error-user-doesNotExist": "Este usuario no existe",
"error-user-notAllowSelf": "Esa acción en si misma no está permitida",
"error-user-notCreated": "Este usuario no se ha creado",
+ "error-username-taken": "This username is already taken",
"export-board": "Exportar tablero",
"filter": "Filtrar",
"filter-cards": "Filtrar Tarjetas",
"filter-clear": "Eliminar filtro",
+ "filter-no-label": "No label",
+ "filter-no-member": "No member",
"filter-on": "Filtrar por",
"filter-on-desc": "Estás filtrando tarjetas en este tablero. Haz clic aquí para editar el filtro.",
"filter-to-selection": "Filtrar selección",
"fullname": "Nombre Completo",
"header-logo-title": "Volver a tu página de tableros",
+ "hide-system-messages": "Hide system messages",
+ "headerBarCreateBoardPopup-title": "Crear tablero",
"home": "Inicio",
"import": "Importar",
"import-board": "Importar desde Trello",
+ "import-board-title": "Import board from Trello",
"import-board-trello-instruction": "En su tablero Trello, vaya a \"Menú\", luego \"Más\", \"Imprimir y exportar\", \"Exportación JSON ', y copia el texto que se muestre",
- "import-card": "Importar tarjeta de Trello",
- "import-card-trello-instruction": "Ve a la tarjeta Trello, selecciona 'Compartir y más...' y marca 'Export JSON' y copia el texto que obtengas",
"import-json-placeholder": "Pega aquí los datos JSON",
+ "import-map-members": "Map members",
"import-members-map": "El tablero importado tiene algunos miembros. Por favor, asigna los miembros que deseas importar a Wekan",
"import-show-user-mapping": "Revisar asignación de miembros",
"import-user-select": "Escoja el usuario Wekan que desea utilizar como miembro",
+ "importMapMembersAddPopup-title": "Select Wekan member",
"info": "Informaciones",
"initials": "Iniciales",
+ "invalid-date": "Invalid date",
"joined": "se ha unido",
"just-invited": "Has sido invitado a este tablero",
"keyboard-shortcuts": "Atajos de teclado",
@@ -186,17 +232,20 @@
"listImportCardPopup-title": "Importar tarjeta de Trello",
"lists": "Listas",
"log-out": "Finalizar la sesión",
+ "log-in": "Log In",
"loginPopup-title": "Iniciar sesión",
- "mapMembersAddPopup-title": "Selecciona un miembro de Wekan",
- "mapMembersPopup-title": "Asignar miembros",
"memberMenuPopup-title": "Configurar miembros",
"members": "Miembros",
"menu": "Menú",
"move-selection": "Mover selección",
"moveCardPopup-title": "Mover Tarjeta",
+ "moveCardToBottom-title": "Move to Bottom",
+ "moveCardToTop-title": "Move to Top",
"moveSelectionPopup-title": "Mover selección",
"multi-selection": "Multi-Selección",
"multi-selection-on": "Multi-selección activada",
+ "muted": "Muted",
+ "muted-info": "You will never be notified of any changes in this board",
"my-boards": "Mis Tableros",
"name": "Nombre",
"no-archived-cards": "No hay tarjetas archivadas.",
@@ -205,12 +254,15 @@
"normal": "Normal",
"normal-desc": "Puedes ver y editar tarjetas. No puedes cambiar la configuración.",
"not-accepted-yet": "Invitación no aceptada aún",
+ "notify-participate": "Receive updates to any cards you participate as creater or member",
+ "notify-watch": "Receive updates to any boards, lists, or cards you’re watching",
"optional": "opcional",
"or": "o",
"page-maybe-private": "Esta página es privada. Para verla tienes que <a href='%s'>entrar</a>.",
"page-not-found": "Página no encontrada.",
"password": "Contraseña",
"paste-or-dragdrop": "para pegar, o hacer drag & drop de un archivo (solo imágenes)",
+ "participating": "Participating",
"preview": "Vista previa",
"previewAttachedImagePopup-title": "Vista previa",
"previewClipboardImagePopup-title": "Vista previa",
@@ -223,6 +275,7 @@
"remove-cover": "Eliminar cubierta",
"remove-from-board": "Eliminar del tablero",
"remove-label": "Eliminar etiqueta",
+ "remove-list": "Remove the list",
"remove-member": "Eliminar Miembro",
"remove-member-from-card": "Eliminar de la Tarjeta",
"remove-member-pop": "Eliminar __name__ (__username__) de __boardTitle__? El miembro será eliminado de todas las tarjetas de este tablero. Ellos recibirán una notificación.",
@@ -234,7 +287,7 @@
"search": "Buscar",
"select-color": "Selecciona un color",
"shortcut-assign-self": "Asignarme la tarjeta actual",
- "shortcut-autocomplete-emojies": "Autocompletar emojies",
+ "shortcut-autocomplete-emoji": "Autocomplete emoji",
"shortcut-autocomplete-members": "Autocompletar miembros",
"shortcut-clear-filters": "Eliminar todos los filters",
"shortcut-close-dialog": "Cierra el Dialogo",
@@ -242,6 +295,9 @@
"shortcut-show-shortcuts": "Mostrar atajos de teclado",
"shortcut-toggle-filterbar": "Mostrar/Ocultar la barra lateral de filtrado",
"shortcut-toggle-sidebar": "Menú lateral del Tablero",
+ "show-cards-minimum-count": "Show cards count if list contains more than",
+ "sidebar-open": "Open Sidebar",
+ "sidebar-close": "Close Sidebar",
"signupPopup-title": "Crear una cuenta",
"star-board-title": "Haz clic para destacar este tablero. Se mostrará en la parte superior de tu lista de tableros.",
"starred-boards": "Tableros Destacados",
@@ -250,14 +306,44 @@
"team": "Equipo",
"this-board": "este tablero",
"this-card": "esta tarjeta",
+ "time": "Time",
"title": "Título",
+ "tracking": "Tracking",
+ "tracking-info": "You will be notified of any changes to those cards you are involved as creator or member.",
"unassign-member": "Desasignar miembro",
"unsaved-description": "Tienes una descripción sin guardar.",
+ "unwatch": "Unwatch",
"upload": "Subir",
"upload-avatar": "Subir avatar",
"uploaded-avatar": "Avatar actualizado",
"username": "Nombre de usuario",
"view-it": "Visto",
"warn-list-archived": "Aviso: esta tarjeta está en una lista archivada",
- "what-to-do": "¿Qué quieres hacer?"
+ "watch": "Watch",
+ "watching": "Watching",
+ "watching-info": "You will be notified of any change in this board",
+ "welcome-board": "Welcome Board",
+ "welcome-list1": "Basics",
+ "welcome-list2": "Advanced",
+ "what-to-do": "¿Qué quieres hacer?",
+ "admin-panel": "Admin Panel",
+ "settings": "Settings",
+ "people": "People",
+ "registration": "Registration",
+ "disable-self-registration": "Disable Self-Registration",
+ "invite": "Invite",
+ "invite-people": "Invite People",
+ "to-boards": "To board(s)",
+ "email-addresses": "Email Addresses",
+ "smtp-host-description": "The address of the SMTP server that handles your emails.",
+ "smtp-port-description": "The port your SMTP server uses for outgoing emails.",
+ "smtp-host": "SMTP Host",
+ "smtp-port": "SMTP Port",
+ "smtp-username": "Nombre de usuario",
+ "smtp-password": "Contraseña",
+ "send-from": "From",
+ "invitation-code": "Invitation Code",
+ "email-invite-register-subject": "__inviter__ te ha enviado una invitación",
+ "email-invite-register-text": "Dear __user__,\n\n__inviter__ invites you to Wekan for collaborations.\n\nPlease follow the link below:\n__url__\n\nAnd your invitation code is: __icode__\n\nThanks.",
+ "error-invitation-code-not-exist": "Invitation code doesn't exist"
} \ No newline at end of file
diff --git a/i18n/es.i18n.json b/i18n/es.i18n.json
index b4af8f5a..fe9a6682 100755..100644
--- a/i18n/es.i18n.json
+++ b/i18n/es.i18n.json
@@ -1,5 +1,25 @@
{
- "accept": "Accept",
+ "accept": "Aceptar",
+ "act-activity-notify": "[Wekan] Notificación de Actividad",
+ "act-addAttachment": "adjuntado __attachment__ a __card__",
+ "act-addComment": "comentado en __card__: __comment__",
+ "act-createBoard": "creado __board__",
+ "act-createCard": "añadido __card__ a __list__",
+ "act-createList": "añadido __list__ a __board__",
+ "act-addBoardMember": "añadido __member__ a __board__",
+ "act-archivedBoard": "__board__ archivado",
+ "act-archivedCard": "__card__ archivada",
+ "act-archivedList": "__list__ archivada",
+ "act-importBoard": "__board__ importado",
+ "act-importCard": "__card__ importada",
+ "act-importList": "__list__ importada",
+ "act-joinMember": "añadido __member__ to __card__",
+ "act-moveCard": "movida __card__ desde __oldList__ a __list__",
+ "act-removeBoardMember": "borrado __member__ de __board__",
+ "act-restoredCard": "restaurada __card__ en __board__",
+ "act-unjoinMember": "borrado __member__ de __card__",
+ "act-withBoardTitle": "[Wekan] __board__",
+ "act-withCardTitle": "[__board__] __card__",
"actions": "Acciones",
"activities": "Activities",
"activity": "Actividad",
@@ -16,10 +36,13 @@
"activity-removed": "eliminado %s de %s",
"activity-sent": "enviado %s a %s",
"activity-unjoined": "unjoined %s",
+ "activity-checklist-added": "added checklist to %s",
"add": "Añadir",
"add-attachment": "Añadir un adjunto",
"add-board": "Añadir un nuevo tablero",
"add-card": "Add a card",
+ "add-checklist": "Add a checklist",
+ "add-checklist-item": "Add an item to checklist",
"add-cover": "Añadir cubierta",
"add-label": "Add the label",
"add-list": "Add a list",
@@ -31,6 +54,8 @@
"all-boards": "Tableros",
"and-n-other-card": "And __count__ other card",
"and-n-other-card_plural": "And __count__ other cards",
+ "apply": "Aplicar",
+ "app-is-offline": "La aplicación esta actualmente fuera de servicio, refrescar la página causará pérdida de datos",
"archive": "Guardar",
"archive-all": "Guardar Todo",
"archive-board": "Archive Board",
@@ -40,12 +65,13 @@
"archiveBoardPopup-title": "Archive Board?",
"archived-items": "Items archivados",
"archives": "Archives",
- "assign-member": "Assign member",
+ "assign-member": "Asignar miembros",
"attached": "adjuntado",
"attachment": "Adjunto",
"attachment-delete-pop": "El borrado de un archivo adjunto es permanente. No se puede deshacer.",
"attachmentDeletePopup-title": "¿Borrar adjunto?",
"attachments": "Adjuntos",
+ "auto-watch": "Vigilar tableros automáticamente cuando se crean",
"avatar-too-big": "The avatar is too large (70Kb max)",
"back": "Atrás",
"board-change-color": "Cambiar color",
@@ -56,7 +82,7 @@
"boardChangeColorPopup-title": "Change Board Background",
"boardChangeTitlePopup-title": "Renombrar tablero",
"boardChangeVisibilityPopup-title": "Cambiar visibilidad",
- "boardImportBoardPopup-title": "Import board from Trello",
+ "boardChangeWatchPopup-title": "Cambiar Vigilancia",
"boardMenuPopup-title": "Board Menu",
"boards": "Tableros",
"bucket-example": "Like “Bucket List” for example",
@@ -66,11 +92,15 @@
"card-delete-notice": "El borrado es permanente. Perderás todas las acciones asociadas a esta ficha.",
"card-delete-pop": "All actions will be removed from the activity feed and you won't be able to re-open the card. There is no undo.",
"card-delete-suggest-archive": "You can archive a card to remove it from the board and preserve the activity.",
+ "card-due": "Motivo",
+ "card-due-on": "Debido a",
"card-edit-attachments": "Edit attachments",
"card-edit-labels": "Edit labels",
- "card-edit-members": "Edit members",
+ "card-edit-members": "Editar miembros",
"card-labels-title": "Cambia las etiquetas de la ficha",
"card-members-title": "Añadir o eliminar miembros del tablero desde la ficha.",
+ "card-start": "Empezar",
+ "card-start-on": "Empieza",
"cardAttachmentsPopup-title": "Attach From",
"cardDeletePopup-title": "¿Borrar ficha?",
"cardDetailsActionsPopup-title": "Card Actions",
@@ -82,12 +112,15 @@
"change-avatar": "Cambiar Avatar",
"change-password": "Cambiar la clave",
"change-permissions": "Cambiar permisos",
+ "change-settings": "Cambiar Preferencias",
"changeAvatarPopup-title": "Cambiar Avatar",
"changeLanguagePopup-title": "Cambiar idioma",
"changePasswordPopup-title": "Cambiar la clave",
"changePermissionsPopup-title": "Cambiar permisos",
- "click-to-star": "Haz clic para destacar este tablero. ",
- "click-to-unstar": "Haz clic para dejar de destacar este tablero. ",
+ "changeSettingsPopup-title": "Cambiar Preferencias",
+ "checklists": "Checklists",
+ "click-to-star": "Haz clic para destacar este tablero.",
+ "click-to-unstar": "Haz clic para dejar de destacar este tablero.",
"clipboard": "Clipboard or drag & drop",
"close": "Cerrar",
"close-board": "Cerrar el tablero",
@@ -104,11 +137,14 @@
"color-yellow": "yellow",
"comment": "Comentario",
"comment-placeholder": "Escribe un comentario",
+ "comment-only": "Limited",
+ "comment-only-desc": "Can comment on cards only.",
"computer": "Ordenador",
"create": "Crear",
"createBoardPopup-title": "Crear tablero",
"createLabelPopup-title": "Crear etiqueta",
"current": "actual",
+ "date": "Fecha",
"decline": "Decline",
"default-avatar": "Avatar por defecto",
"delete": "Borrar",
@@ -122,7 +158,10 @@
"edit": "Editar",
"edit-avatar": "Cambiar Avatar",
"edit-profile": "Edit Profile",
+ "editCardStartDatePopup-title": "Cambiar fecha de inicio",
+ "editCardDueDatePopup-title": "Cambiar fecha de motivo",
"editLabelPopup-title": "Cambiar etiqueta",
+ "editNotificationPopup-title": "Editar Notificación",
"editProfilePopup-title": "Edit Profile",
"email": "Correo electrónico",
"email-enrollAccount-subject": "An account created for you on __siteName__",
@@ -146,74 +185,87 @@
"error-user-doesNotExist": "This user does not exist",
"error-user-notAllowSelf": "This action on self is not allowed",
"error-user-notCreated": "This user is not created",
+ "error-username-taken": "Este nombre de usuario ya está en uso",
"export-board": "Export board",
"filter": "Filter",
"filter-cards": "Fichas de filtro",
"filter-clear": "Clear filter",
- "filter-on": "Filter is on",
+ "filter-no-label": "Sin etiqueta",
+ "filter-no-member": "Sin miembro",
+ "filter-on": "Filtro activo",
"filter-on-desc": "Estás filtrando fichas en este tablero. Haz clic aquí para editar el filtro.",
"filter-to-selection": "Filter to selection",
"fullname": "Nombre Completo",
"header-logo-title": "Volver a tu página de tableros",
+ "hide-system-messages": "Ocultar los mensajes del sistema",
+ "headerBarCreateBoardPopup-title": "Crear tablero",
"home": "Inicio",
- "import": "Import",
- "import-board": "import from Trello",
+ "import": "Importar",
+ "import-board": "importar desde Trello",
+ "import-board-title": "Importar tablero desde Trello",
"import-board-trello-instruction": "In your Trello board, go to 'Menu', then 'More', 'Print and Export', 'Export JSON', and copy the resulting text",
- "import-card": "Import a Trello card",
- "import-card-trello-instruction": "Go to a Trello card, select 'Share and more...' then 'Export JSON' and copy the resulting text",
"import-json-placeholder": "Paste your valid JSON data here",
+ "import-map-members": "Mapa de miembros",
"import-members-map": "Your imported board has some members. Please map the members you want to import to Wekan users",
"import-show-user-mapping": "Review members mapping",
"import-user-select": "Pick the Wekan user you want to use as this member",
+ "importMapMembersAddPopup-title": "Seleccionar un miembro de Wekan",
"info": "Informaciones",
- "initials": "Initials",
+ "initials": "Iniciales",
+ "invalid-date": "Fecha no Válida",
"joined": "se ha unido",
"just-invited": "You are just invited to this board",
- "keyboard-shortcuts": "Keyboard shortcuts",
- "label-create": "Crear una etiqueta nueva ",
+ "keyboard-shortcuts": "Atajos de teclado",
+ "label-create": "Crear una etiqueta nueva",
"label-default": "%s etiqueta (por Defecto)",
"label-delete-pop": "No se puede deshacer. Esto eliminará esta etiqueta de todas las fichas y destruirá su historia.",
"labels": "Etiquetas",
"language": "Idioma",
"last-admin-desc": "No puedes cambiar roles porque debe haber al menos un administrador.",
- "leave-board": "Leave Board",
+ "leave-board": "Dejar el Tablero",
"link-card": "Enlace a esta ficha",
"list-archive-cards": "Archive all cards in this list",
"list-archive-cards-pop": "Esto eliminara todas las fichas de esta lista del tablero. Para ver fichas archivadas y recuperarlas en el tablero, haz clic en \"Menu\" / \"Artículos Archivados\".",
"list-move-cards": "Move all cards in this list",
"list-select-cards": "Select all cards in this list",
"listActionPopup-title": "Acciones de la lista",
- "listImportCardPopup-title": "Import a Trello card",
- "lists": "Lists",
+ "listImportCardPopup-title": "Importar una tarjeta de Trello",
+ "lists": "Listas",
"log-out": "Finalizar la sesion",
+ "log-in": "Iniciar sesion",
"loginPopup-title": "Iniciar sesion",
- "mapMembersAddPopup-title": "Select Wekan member",
- "mapMembersPopup-title": "Map members",
- "memberMenuPopup-title": "Member Settings",
+ "memberMenuPopup-title": "Preferencias de Miembro",
"members": "Miembros",
"menu": "Menu",
- "move-selection": "Move selection",
+ "move-selection": "Mover selección",
"moveCardPopup-title": "Move Card",
- "moveSelectionPopup-title": "Move selection",
- "multi-selection": "Multi-Selection",
- "multi-selection-on": "Multi-Selection is on",
+ "moveCardToBottom-title": "Mover al Final",
+ "moveCardToTop-title": "Movel al Principio",
+ "moveSelectionPopup-title": "Mover selección",
+ "multi-selection": "Multi-Selección",
+ "multi-selection-on": "Multi-Selección activada",
+ "muted": "Silenciado",
+ "muted-info": "No serás notificado de ningún cambio en este tablero",
"my-boards": "Mis tableros",
"name": "Nombre",
- "no-archived-cards": "No archived cards.",
- "no-archived-lists": "No archived lists.",
+ "no-archived-cards": "No hay tarjetas archivadas.",
+ "no-archived-lists": "No hay listas archivadas.",
"no-results": "Sin resultados",
"normal": "Normal",
"normal-desc": "Puedes ver y editar fichas. No puedes cambiar la configuración.",
"not-accepted-yet": "Invitation not accepted yet",
+ "notify-participate": "Recibir actualizaciones de cualquier tarjeta en la que participas como creador o miembro",
+ "notify-watch": "Recibir actuaizaciones de cualquier tablero, lista o tarjeta que estés vigilando",
"optional": "opcional",
- "or": "or",
+ "or": "o",
"page-maybe-private": "Esta página puede ser privada. Puedes verla por <a href='%s'>logging in</a>.",
"page-not-found": "Página no encontrada.",
"password": "Clave",
"paste-or-dragdrop": "to paste, or drag & drop image file to it (image only)",
- "preview": "Preview",
- "previewAttachedImagePopup-title": "Preview",
- "previewClipboardImagePopup-title": "Preview",
+ "participating": "Participando",
+ "preview": "Previsualizar",
+ "previewAttachedImagePopup-title": "Previsualizar",
+ "previewClipboardImagePopup-title": "Previsualizar",
"private": "Privado",
"private-desc": "Este tablero es privado. Sólo las personas añadidas al tablero pueden verlo y editarlo.",
"profile": "Perfil",
@@ -221,43 +273,77 @@
"public-desc": "Este tablero es público. Es visible para cualquier persona con el enlace y se mostrará en los motores de búsqueda como Google. Sólo personas añadidas al tablero pueden editarlo.",
"quick-access-description": "Star a board to add a shortcut in this bar.",
"remove-cover": "Eliminar cubierta",
- "remove-from-board": "Remove from Board",
- "remove-label": "Remove the label",
+ "remove-from-board": "Borrar del Tablero",
+ "remove-label": "Borrar la etiqueta",
+ "remove-list": "Remove the list",
"remove-member": "Eliminar Miembro",
"remove-member-from-card": "Eliminar de la Ficha",
"remove-member-pop": "Eliminar __nombre__ (__usuario__) de __Título del tablero__? El miembro será eliminado de todas las tarjetas de este tablero. Ellos recibirán una notificación.",
"removeMemberPopup-title": "¿Eliminar miembro?",
"rename": "Renombrar",
"rename-board": "Renombrar tablero",
- "restore": "Restore",
+ "restore": "Restaurar",
"save": "Guardar",
"search": "Buscar",
"select-color": "Selecciona un color",
- "shortcut-assign-self": "Assign yourself to current card",
- "shortcut-autocomplete-emoji": "Autocomplete emoji",
- "shortcut-autocomplete-members": "Autocomplete members",
- "shortcut-clear-filters": "Clear all filters",
- "shortcut-close-dialog": "Close Dialog",
- "shortcut-filter-my-cards": "Filter my cards",
+ "shortcut-assign-self": "Asignarte a ti mismo a la tarjeta actual",
+ "shortcut-autocomplete-emoji": "Autocompletar emoji",
+ "shortcut-autocomplete-members": "Autocompletar miembros",
+ "shortcut-clear-filters": "Limpiar todos los filtros",
+ "shortcut-close-dialog": "Cerrar Diálogo",
+ "shortcut-filter-my-cards": "Filtrar mis tarjetas",
"shortcut-show-shortcuts": "Bring up this shortcuts list",
"shortcut-toggle-filterbar": "Toggle Filter Sidebar",
"shortcut-toggle-sidebar": "Toggle Board Sidebar",
+ "show-cards-minimum-count": "Mostrar recuento de tarjetas si la lista contiene más de",
+ "sidebar-open": "Open Sidebar",
+ "sidebar-close": "Close Sidebar",
"signupPopup-title": "Crear una Cuenta",
"star-board-title": "Haz clic para destacar este tablero. Se mostrará en la parte superior de tu lista de tableros.",
"starred-boards": "Tableros Destacados",
"starred-boards-description": "Los tableros destacados se mostrarán en la parte superior de tu lista de tableros.",
- "subscribe": "Suscribe",
+ "subscribe": "Suscribirse",
"team": "Equipo",
"this-board": "este tablero",
"this-card": "esta ficha",
+ "time": "Hora",
"title": "Título",
- "unassign-member": "Unassign member",
- "unsaved-description": "You have an unsaved description.",
- "upload": "Upload",
- "upload-avatar": "Upload an avatar",
- "uploaded-avatar": "Uploaded an avatar",
+ "tracking": "Seguimiento",
+ "tracking-info": "Serás notificado de cualquier cambio en las tarjetas que estás envuelto como creador o miembro.",
+ "unassign-member": "Desasignar miembro",
+ "unsaved-description": "Tienes unas descripción no guardada.",
+ "unwatch": "Dejar de vigilar",
+ "upload": "Cargar",
+ "upload-avatar": "Cargar un avatar",
+ "uploaded-avatar": "Avatar cargado",
"username": "Nombre de Usuario",
- "view-it": "View it",
+ "view-it": "Verlo",
"warn-list-archived": "warning: this card is in an archived list",
- "what-to-do": "What do you want to do?"
-}
+ "watch": "Vigilar",
+ "watching": "Vigilando",
+ "watching-info": "Serás notificado de cualquier cambio en este tablero",
+ "welcome-board": "Tablero de Bienvenida",
+ "welcome-list1": "Basicos",
+ "welcome-list2": "Avanzados",
+ "what-to-do": "What do you want to do?",
+ "admin-panel": "Admin Panel",
+ "settings": "Ajustes",
+ "people": "People",
+ "registration": "Registration",
+ "disable-self-registration": "Disable Self-Registration",
+ "invite": "Invite",
+ "invite-people": "Invite People",
+ "to-boards": "To board(s)",
+ "email-addresses": "Email Addresses",
+ "smtp-host-description": "The address of the SMTP server that handles your emails.",
+ "smtp-port-description": "The port your SMTP server uses for outgoing emails.",
+ "smtp-host": "SMTP Host",
+ "smtp-port": "SMTP Port",
+ "smtp-username": "Nombre de Usuario",
+ "smtp-password": "Clave",
+ "send-from": "From",
+ "invitation-code": "Invitation Code",
+ "email-invite-register-subject": "__inviter__ sent you an invitation",
+ "email-invite-register-text": "Dear __user__,\n\n__inviter__ invites you to Wekan for collaborations.\n\nPlease follow the link below:\n__url__\n\nAnd your invitation code is: __icode__\n\nThanks.",
+ "error-invitation-code-not-exist": "Invitation code doesn't exist"
+} \ No newline at end of file
diff --git a/i18n/fa.i18n.json b/i18n/fa.i18n.json
new file mode 100644
index 00000000..a1f4c965
--- /dev/null
+++ b/i18n/fa.i18n.json
@@ -0,0 +1,349 @@
+{
+ "accept": "تایید",
+ "act-activity-notify": "[Wekan] Activity Notification",
+ "act-addAttachment": "attached __attachment__ to __card__",
+ "act-addComment": "commented on __card__: __comment__",
+ "act-createBoard": "created __board__",
+ "act-createCard": "added __card__ to __list__",
+ "act-createList": "added __list__ to __board__",
+ "act-addBoardMember": "added __member__ to __board__",
+ "act-archivedBoard": "archived __board__",
+ "act-archivedCard": "archived __card__",
+ "act-archivedList": "archived __list__",
+ "act-importBoard": "imported __board__",
+ "act-importCard": "imported __card__",
+ "act-importList": "imported __list__",
+ "act-joinMember": "added __member__ to __card__",
+ "act-moveCard": "moved __card__ from __oldList__ to __list__",
+ "act-removeBoardMember": "removed __member__ from __board__",
+ "act-restoredCard": "restored __card__ to __board__",
+ "act-unjoinMember": "removed __member__ from __card__",
+ "act-withBoardTitle": "[Wekan] __board__",
+ "act-withCardTitle": "[__board__] __card__",
+ "actions": "اعمال",
+ "activities": "فعالیت ها",
+ "activity": "فعالیت",
+ "activity-added": "%s به %s اضافه شد",
+ "activity-archived": "%s بایگانی شد",
+ "activity-attached": "%s به %s پیوست شد",
+ "activity-created": "%s ایجاد شد",
+ "activity-excluded": "%s از %s مستثنی گردید",
+ "activity-imported": "%s از %s وارد %s شد",
+ "activity-imported-board": "%s از %s وارد شد",
+ "activity-joined": "اتصال به %s",
+ "activity-moved": "%s از %s به %s منتقل شد",
+ "activity-on": "%s",
+ "activity-removed": "%s از %s حذف شد",
+ "activity-sent": "ارسال %s به %s",
+ "activity-unjoined": "جداسازی %s",
+ "activity-checklist-added": "added checklist to %s",
+ "add": "افزودن",
+ "add-attachment": "افزودن ضمیمه",
+ "add-board": "افزودن برد جدید",
+ "add-card": "افزودن کارت",
+ "add-checklist": "Add a checklist",
+ "add-checklist-item": "Add an item to checklist",
+ "add-cover": "افزودن کاور",
+ "add-label": "افزودن برچسب",
+ "add-list": "افزودن لیست",
+ "add-members": "افزودن اعضا",
+ "added": "اضافه گردید",
+ "addMemberPopup-title": "اعضا",
+ "admin": "مدیر",
+ "admin-desc": "امکان دیدن و ویرایش کارتها،پاک کردن کاربران و تغییر تنظیمات برای تخته",
+ "all-boards": "تمام بردها",
+ "and-n-other-card": "و __count__ کارت دیگر",
+ "and-n-other-card_plural": "و __count__ کارت دیگر",
+ "apply": "Apply",
+ "app-is-offline": "The application is currently offline, refreshing the page will cause data loss.",
+ "archive": "آرشیو",
+ "archive-all": "تمامی آرشیوها",
+ "archive-board": "بایگانی برد",
+ "archive-card": "بایگانی کارت",
+ "archive-list": "بایگانی این لیست",
+ "archive-selection": "بایگانی موارد انتخاب شده ها",
+ "archiveBoardPopup-title": "آیا می خواهید بایگانی شود؟",
+ "archived-items": "آیتم های بایگانی شده",
+ "archives": "آرشیوها",
+ "assign-member": "تعیین عضو",
+ "attached": "وابسته",
+ "attachment": "ضمائم",
+ "attachment-delete-pop": "حذف پیوست دایمی خواهد بود، بدون بازگشت",
+ "attachmentDeletePopup-title": "آیا می خواهید ضمیمه را حذف کنید؟",
+ "attachments": "ضمائم",
+ "auto-watch": "Automatically watch boards when create it",
+ "avatar-too-big": "حجم تصویر انتخاب شده بیشتر از حد مجاز است .(حد مجاز 70Kb)",
+ "back": "بازگشت",
+ "board-change-color": "تغییر رنگ",
+ "board-nb-stars": "%s ستاره",
+ "board-not-found": "برد مورد نظر پیدا نشد",
+ "board-private-info": "این برد <strong>خصوصی</strong> خواهد بود.",
+ "board-public-info": "این برد <strong>عمومی</strong> خواهد بود.",
+ "boardChangeColorPopup-title": "تغییر پس زمینه برد",
+ "boardChangeTitlePopup-title": "تغییر نام برد",
+ "boardChangeVisibilityPopup-title": "تغغیر وضعیت نمایش",
+ "boardChangeWatchPopup-title": "Change Watch",
+ "boardMenuPopup-title": "منوی برد",
+ "boards": "بردها",
+ "bucket-example": "مانند \"لیست سبدها\" برای مثال",
+ "cancel": "انصراف",
+ "card-archived": "این کارت بایگانی شده است.",
+ "card-comments-title": "این کارت دارای %s نظر می باشد.",
+ "card-delete-notice": "پاک کردن بطور کامل. شما تمامی اقدامات مربوطه را از دست خواهید داد.",
+ "card-delete-pop": "همه اقدامات ازاین پردازه (خوراک) حذف خواهد شد و امکان بازگشا کردن کارت وجود نخواهد داشت. هیچ امکان بازگشتی!",
+ "card-delete-suggest-archive": "شما می توانید یک کارت را بایگانی کرده با حفظ فعالیت های آن.",
+ "card-due": "Due",
+ "card-due-on": "Due on",
+ "card-edit-attachments": "ویرایش ضمائم",
+ "card-edit-labels": "ویرایش برچسب",
+ "card-edit-members": "ویرایش اعضا",
+ "card-labels-title": "تغییر برچسب کارت",
+ "card-members-title": "افزودن یا حذف اعضا از کارت.",
+ "card-start": "Start",
+ "card-start-on": "Starts on",
+ "cardAttachmentsPopup-title": "ضمیمه از",
+ "cardDeletePopup-title": "آیا می خواهید کارت را حذف کنید؟",
+ "cardDetailsActionsPopup-title": "اعمال کارت",
+ "cardLabelsPopup-title": "برچسب ها",
+ "cardMembersPopup-title": "اعضا",
+ "cardMorePopup-title": "بیشتر",
+ "cards": "کارت ها",
+ "change": "تغییر",
+ "change-avatar": "تغییر آواتار",
+ "change-password": "تغییر کلمه عبور",
+ "change-permissions": "تغییر دسترسی ها",
+ "change-settings": "Change Settings",
+ "changeAvatarPopup-title": "تغییر آواتار",
+ "changeLanguagePopup-title": "تغییر زبان",
+ "changePasswordPopup-title": "تغییر کلمه عبور",
+ "changePermissionsPopup-title": "تغییر دسترسی ها",
+ "changeSettingsPopup-title": "Change Settings",
+ "checklists": "Checklists",
+ "click-to-star": "جهت افزودن ستاره کلیک کنید .",
+ "click-to-unstar": "جهت کاهش ستاره کلیک کنید.",
+ "clipboard": "ذخیره در حافظه ویا بکش-رهاکن",
+ "close": "بستن",
+ "close-board": "بستن برد",
+ "close-board-pop": "شما می توانید با کلیک بر دکمه \"بایگانی\" از قسمت بالای خانه، تخته را بازگذاری نمایید.",
+ "color-black": "مشکی",
+ "color-blue": "آبی",
+ "color-green": "سبز",
+ "color-lime": "لیمویی",
+ "color-orange": "نارنجی",
+ "color-pink": "صورتی",
+ "color-purple": "بنفش",
+ "color-red": "قرمز",
+ "color-sky": "آبی آسمانی",
+ "color-yellow": "زرد",
+ "comment": "نظر",
+ "comment-placeholder": "ثبت یک نظر",
+ "comment-only": "Limited",
+ "comment-only-desc": "Can comment on cards only.",
+ "computer": "کامپیوتر",
+ "create": "ایجاد",
+ "createBoardPopup-title": "ایجاد برد",
+ "createLabelPopup-title": "ایجاد برچسب",
+ "current": "جاری",
+ "date": "Date",
+ "decline": "رد",
+ "default-avatar": "آواتار پیش فرض",
+ "delete": "حذف",
+ "deleteLabelPopup-title": "آیا می خواهید برچسب را حذف کنید؟",
+ "description": "توضیحات",
+ "disambiguateMultiLabelPopup-title": "عمل ابهام زدایی از برچسب",
+ "disambiguateMultiMemberPopup-title": "عمل ابهام زدایی از کاربر",
+ "discard": "انصراف",
+ "done": "پایان",
+ "download": "دریافت",
+ "edit": "ویرایش",
+ "edit-avatar": "تغییر آواتار",
+ "edit-profile": "ویرایش پروفایل",
+ "editCardStartDatePopup-title": "Change start date",
+ "editCardDueDatePopup-title": "Change due date",
+ "editLabelPopup-title": "تغغیر برچسب",
+ "editNotificationPopup-title": "Edit Notification",
+ "editProfilePopup-title": "ویرایش پروفایل",
+ "email": "ایمیل",
+ "email-enrollAccount-subject": "یک حساب کاربری برای شما در __siteName__ ایجاد شد",
+ "email-enrollAccount-text": "سلام __user__ \nبرای شروع به استفاده از این سرویس برروی کلیک روی لینک زیر کلیک نمایید،با تشکر \n__url__.",
+ "email-fail": "عدم موفقیت در ارسال نامه الکترونیکی",
+ "email-invalid": "پست الکترونیکی نادرست",
+ "email-invite": "دعوت از طریق نامه الکترونیکی",
+ "email-invite-subject": "__inviter__ برای شما دعوت نامه ارسال کرده است",
+ "email-invite-text": "__User__ عزیز\n __inviter__ شما را به عضویت تخته \"__board__\" برای همکاری دعوت کرده است.\nلطفا لینک زیر را دنبال کنید، باتشکر:\n__url__",
+ "email-resetPassword-subject": "تنظیم مجدد کلمه عبور در __siteName__",
+ "email-resetPassword-text": "سلام __user__\nجهت تنظیم مجدد کلمه عبور لینک زیر را دنبال نمایید، باتشکر:\n__url__",
+ "email-sent": "نامه الکترونیکی فرستاده شد",
+ "email-verifyEmail-subject": "تایید آدرس الکترونیکی شما در __siteName__",
+ "email-verifyEmail-text": "سلام __user__\nبه منظور تایید آدرس الکترونیکی حساب خود، لینک زیر را دنبال نمایید، باتشکر:\n__url__.",
+ "error-board-doesNotExist": "تخته مورد نظر وجود ندارد",
+ "error-board-notAdmin": "شما جهت انجام آن باید مدیر تخته باشید",
+ "error-board-notAMember": "شما انجام آن ،باید عضو این تخته باشید.",
+ "error-json-malformed": "متن درغالب صحیح Json نمی باشد.",
+ "error-json-schema": "داده های Json شما، شامل اطلاعات صحیح در غالب درستی نمی باشد.",
+ "error-list-doesNotExist": "این لیست موجود نیست",
+ "error-user-doesNotExist": "این کاربر وجود ندارد",
+ "error-user-notAllowSelf": "این اقدامبروی خود، مجاز نمی باشد",
+ "error-user-notCreated": "این کاربر ایجاد نشده است",
+ "error-username-taken": "This username is already taken",
+ "export-board": "انتقال به بیرون تخته",
+ "filter": "فیلتر",
+ "filter-cards": "صافی کارتها",
+ "filter-clear": "حذف فیلتر",
+ "filter-no-label": "No label",
+ "filter-no-member": "No member",
+ "filter-on": "صافی روشن است",
+ "filter-on-desc": "شما صافی برای کارتهای تخته را روشن کرده اید. جهت ویرایش کلیک نمایید.",
+ "filter-to-selection": "صافی برای موارد انتخابی",
+ "fullname": "نام و نام خانوادگی",
+ "header-logo-title": "بازگشت به صفحه تخته.",
+ "hide-system-messages": "Hide system messages",
+ "headerBarCreateBoardPopup-title": "ایجاد برد",
+ "home": "خانه",
+ "import": "وارد کردن",
+ "import-board": "وارد کردن از ترلو",
+ "import-board-title": "Import board from Trello",
+ "import-board-trello-instruction": "در Trello-ی خود به 'Menu'، 'More'، 'Print'، 'Export to JSON رفته و متن نهایی را دراینجا وارد نمایید.",
+ "import-json-placeholder": "اطلاعات Json معتبر خود را اینجا وارد کنید.",
+ "import-map-members": "Map members",
+ "import-members-map": "تخته خود وارد شده دارای برخی از اعضا می باشد. لطفا کاربرانی که باید وارد نرم افزار بشوند را مشخص کنید.",
+ "import-show-user-mapping": "بررسی نقشه کاربران",
+ "import-user-select": "کاربری از نرم افزار را که می خواهید بعنوان این عضو جایگزین شود را انتخاب کنید.",
+ "importMapMembersAddPopup-title": "Select Wekan member",
+ "info": "اطلاعات",
+ "initials": "تخصیصات اولیه",
+ "invalid-date": "Invalid date",
+ "joined": "متصل",
+ "just-invited": "هم اکنون، شما به این تخته دعوت شده اید.",
+ "keyboard-shortcuts": "میانبر کلیدها",
+ "label-create": "ایجاد برچسب جدید",
+ "label-default": "%s برچسب(پیش فرض)",
+ "label-delete-pop": "بدون برگشت. این حذفبرچسب را از هر کارت پاک خواهد کردو تاریخچه آن را نیز ازبین می برد.",
+ "labels": "برچسب ها",
+ "language": "زبان",
+ "last-admin-desc": "شما نمی توانید نقش را تغییر دهید چراکه باید حداقل یک مدیری وجود داشته باشد.",
+ "leave-board": "خروج از برد",
+ "link-card": "ارجاع به این کارت",
+ "list-archive-cards": "بایگانی تمامی کارتهای این لیست",
+ "list-archive-cards-pop": "این همه کارت ها در این لیست از تخته راحذف خواهد کرد. جهت مشاهده کارت های بایگانی و بازگرداندن آنها ، \"Menu\",\"Archived Item\" را کلیک کنید.",
+ "list-move-cards": "انتقال تمام کارت ها در این لیست",
+ "list-select-cards": "انتخاب تمام کارت ها در این لیست",
+ "listActionPopup-title": "لیست اقدامات",
+ "listImportCardPopup-title": "وارد کردن کارت Trello",
+ "lists": "لیست ها",
+ "log-out": "خروج",
+ "log-in": "ورود",
+ "loginPopup-title": "ورود",
+ "memberMenuPopup-title": "تنظیمات اعضا",
+ "members": "اعضا",
+ "menu": "منو",
+ "move-selection": "حرکت مورد انتخاب شده",
+ "moveCardPopup-title": "حرکت کارت",
+ "moveCardToBottom-title": "Move to Bottom",
+ "moveCardToTop-title": "Move to Top",
+ "moveSelectionPopup-title": "حرکت مورد انتخاب شده",
+ "multi-selection": "چند انتخابی",
+ "multi-selection-on": "چند انتخابی روشن است",
+ "muted": "Muted",
+ "muted-info": "You will never be notified of any changes in this board",
+ "my-boards": "بردهای من",
+ "name": "نام",
+ "no-archived-cards": "کارتی در بایگانی نیست",
+ "no-archived-lists": "لیستی در بایگانی نیست",
+ "no-results": "نتیجه ای ندارد",
+ "normal": "عادی",
+ "normal-desc": "امکان نمایش و تنظیم کارت بدون امکان تغییر تنظیمات",
+ "not-accepted-yet": "دعوت هنوز پذیرفته نشده است",
+ "notify-participate": "Receive updates to any cards you participate as creater or member",
+ "notify-watch": "Receive updates to any boards, lists, or cards you’re watching",
+ "optional": "انتخابی",
+ "or": "یا",
+ "page-maybe-private": "این صفحه ممکن است خصوصی باشد.شما با<a href='%s'>ورود</a> می توانید آنرا ملاحظه نمایید.",
+ "page-not-found": "صفحه پیدا نشد.",
+ "password": "کلمه عبور",
+ "paste-or-dragdrop": "جهت چسباندن، یا کشیدن-رهاسازی فایل تصویر به آن (تصویر)",
+ "participating": "Participating",
+ "preview": "نمایش",
+ "previewAttachedImagePopup-title": "نمایش",
+ "previewClipboardImagePopup-title": "نمایش",
+ "private": "خصوصی",
+ "private-desc": "این تخته خصوصی است. فقط تنها افراد اضافه شده به آن می توانند مشاهده و ویرایش کنند.",
+ "profile": "پروفایل",
+ "public": "عمومی",
+ "public-desc": "این تخته عمومی است. برای هر کسی با لینک ویا جستجو درموتورها مانند گوگل قابل مشاهده است . فقط افرادی که به آن اضافه شده اند امکان ویرایش دارند.",
+ "quick-access-description": "جهت افزودن یک تخته به اینجا،آنرا ستاره دار نمایید.",
+ "remove-cover": "حذف کاور",
+ "remove-from-board": "حذف از برد",
+ "remove-label": "حذف برچسب",
+ "remove-list": "Remove the list",
+ "remove-member": "حذف عضو",
+ "remove-member-from-card": "حذف از کارت",
+ "remove-member-pop": "آیا می خواهید __Name__ (__username__) را از __boardTitle__ حذف کنید? کاربر از تمام کارت ها در این تخته حذف خواهد شد و به آنها اطلاع رسانی خواهد شد.",
+ "removeMemberPopup-title": "آیا می خواهید کاربر را حذف کنید؟",
+ "rename": "تغغیر نام",
+ "rename-board": "تغییر نام برد",
+ "restore": "بازیابی",
+ "save": "ذخیره",
+ "search": "جستجو",
+ "select-color": "انتخاب رنگ",
+ "shortcut-assign-self": "اختصاص خود به کارت فعلی",
+ "shortcut-autocomplete-emoji": "Autocomplete emoji",
+ "shortcut-autocomplete-members": "تکمیل خودکار کاربرها",
+ "shortcut-clear-filters": "حذف تمامی فیلترها",
+ "shortcut-close-dialog": "بستن دیالوگ",
+ "shortcut-filter-my-cards": "کارت های من",
+ "shortcut-show-shortcuts": "بالا آوردن میانبر این لیست",
+ "shortcut-toggle-filterbar": "ضامن نوار صافی",
+ "shortcut-toggle-sidebar": "ضامن نوار تخته",
+ "show-cards-minimum-count": "Show cards count if list contains more than",
+ "sidebar-open": "Open Sidebar",
+ "sidebar-close": "Close Sidebar",
+ "signupPopup-title": "ایجاد یک اکانت",
+ "star-board-title": "جهت ستاره دار کردن تخته کلیک نمایی.این در بالای لیست تخته های شما نمایش داده خواهد شد.",
+ "starred-boards": "تخته های ستاره دار",
+ "starred-boards-description": "تخته های ستاره دار در بالای لیست تخته ها نمایش داده می شود.",
+ "subscribe": "عضوشدن",
+ "team": "تیم",
+ "this-board": "این برد",
+ "this-card": "این کارت",
+ "time": "Time",
+ "title": "عنوان",
+ "tracking": "Tracking",
+ "tracking-info": "You will be notified of any changes to those cards you are involved as creator or member.",
+ "unassign-member": "عدم انتصاب کاربر",
+ "unsaved-description": "شما توضیحات ذخیره نشده دارید.",
+ "unwatch": "Unwatch",
+ "upload": "ارسال",
+ "upload-avatar": "ارسال یک آواتار",
+ "uploaded-avatar": "آواتار ارسال شد",
+ "username": "نام کاربری",
+ "view-it": "مشاهده",
+ "warn-list-archived": "هشدار: این کارت در یک لیست بایگانی شده است",
+ "watch": "Watch",
+ "watching": "Watching",
+ "watching-info": "You will be notified of any change in this board",
+ "welcome-board": "Welcome Board",
+ "welcome-list1": "Basics",
+ "welcome-list2": "Advanced",
+ "what-to-do": "چه کاری می خواهید انجام دهید؟",
+ "admin-panel": "Admin Panel",
+ "settings": "Settings",
+ "people": "People",
+ "registration": "Registration",
+ "disable-self-registration": "Disable Self-Registration",
+ "invite": "Invite",
+ "invite-people": "Invite People",
+ "to-boards": "To board(s)",
+ "email-addresses": "Email Addresses",
+ "smtp-host-description": "The address of the SMTP server that handles your emails.",
+ "smtp-port-description": "The port your SMTP server uses for outgoing emails.",
+ "smtp-host": "SMTP Host",
+ "smtp-port": "SMTP Port",
+ "smtp-username": "نام کاربری",
+ "smtp-password": "کلمه عبور",
+ "send-from": "From",
+ "invitation-code": "Invitation Code",
+ "email-invite-register-subject": "__inviter__ برای شما دعوت نامه ارسال کرده است",
+ "email-invite-register-text": "Dear __user__,\n\n__inviter__ invites you to Wekan for collaborations.\n\nPlease follow the link below:\n__url__\n\nAnd your invitation code is: __icode__\n\nThanks.",
+ "error-invitation-code-not-exist": "Invitation code doesn't exist"
+} \ No newline at end of file
diff --git a/i18n/fi.i18n.json b/i18n/fi.i18n.json
index caab4faf..c8984f9e 100755..100644
--- a/i18n/fi.i18n.json
+++ b/i18n/fi.i18n.json
@@ -1,5 +1,25 @@
{
"accept": "Hyväksy",
+ "act-activity-notify": "[Wekan] Toimintailmoitus",
+ "act-addAttachment": "liitetty __attachment__ kortille __card__",
+ "act-addComment": "kommentoitu __card__: __comment__",
+ "act-createBoard": "luotu __board__",
+ "act-createCard": "lisätty __card__ listalle __list__",
+ "act-createList": "lisätty __list__ taululle __board__",
+ "act-addBoardMember": "lisätty __member__ taululle __board__",
+ "act-archivedBoard": "arkistoitu __board__",
+ "act-archivedCard": "arkistoitu __card__",
+ "act-archivedList": "arkistoitu __list__",
+ "act-importBoard": "tuotu __board__",
+ "act-importCard": "tuotu __card__",
+ "act-importList": "tuotu __list__",
+ "act-joinMember": "lisätty __member__ kortille __card__",
+ "act-moveCard": "siirretty __card__ listalta __oldList__ listalle __list__",
+ "act-removeBoardMember": "poistettu __member__ taululta __board__",
+ "act-restoredCard": "palautettu __card__ taululle __board__",
+ "act-unjoinMember": "poistettu __member__ kortilta __card__",
+ "act-withBoardTitle": "[Wekan] __board__",
+ "act-withCardTitle": "[__board__] __card__",
"actions": "Toimet",
"activities": "Toimet",
"activity": "Toiminta",
@@ -15,11 +35,14 @@
"activity-on": "kohteessa %s",
"activity-removed": "poistettu %s kohteesta %s",
"activity-sent": "lähetetty %s kohteeseen %s",
- "activity-unjoined": "peruttu %s liityminen",
+ "activity-unjoined": "peruttu %s liittyminen",
+ "activity-checklist-added": "lisätty tarkistuslista kohteeseen %s",
"add": "Lisää",
"add-attachment": "Lisää liitetiedosto",
"add-board": "Lisää uusi taulu",
"add-card": "Lisää kortti",
+ "add-checklist": "Lisää tarkistuslista",
+ "add-checklist-item": "Lisää kohde tarkistuslistaan",
"add-cover": "Lisää kansi",
"add-label": "Lisää tunniste",
"add-list": "Lisää lista",
@@ -31,6 +54,8 @@
"all-boards": "Kaikki taulut",
"and-n-other-card": "Ja __count__ muu kortti",
"and-n-other-card_plural": "Ja __count__ muuta korttia",
+ "apply": "Käytä",
+ "app-is-offline": "Sovellus ei ole tällä hetkellä linjoilla, sivun lataaminen uudelleen voi aiheuttaa muutettujen tietojen menettämisen.",
"archive": "Arkistoi",
"archive-all": "Arkistoi kaikki",
"archive-board": "Arkistoi taulu",
@@ -46,17 +71,18 @@
"attachment-delete-pop": "Liitetiedoston poistaminen on lopullista. Tätä ei pysty peruuttamaan.",
"attachmentDeletePopup-title": "Poista liitetiedosto?",
"attachments": "Liitetiedostot",
+ "auto-watch": "Automaattisesti seuraa tauluja kun ne on luotu",
"avatar-too-big": "Profiilikuva on liian suuri (70Kb maksimi)",
"back": "Takaisin",
- "board-change-color": "Vaihda väri",
+ "board-change-color": "Muokkaa väriä",
"board-nb-stars": "%s tähteä",
"board-not-found": "Taulua ei löytynyt",
"board-private-info": "Tämä taulu tulee olemaan <strong>yksityinen</strong>.",
"board-public-info": "Tämä taulu tulee olemaan <strong>julkinen</strong>.",
- "boardChangeColorPopup-title": "Vaihda taulun tausta",
+ "boardChangeColorPopup-title": "Muokkaa taulun taustaa",
"boardChangeTitlePopup-title": "Nimeä taulu uudelleen",
- "boardChangeVisibilityPopup-title": "Vaihda näkyvyyttä",
- "boardImportBoardPopup-title": "Tuo taulu Trellosta",
+ "boardChangeVisibilityPopup-title": "Muokkaa näkyvyyttä",
+ "boardChangeWatchPopup-title": "Muokkaa seuraamista",
"boardMenuPopup-title": "Taulu valikko",
"boards": "Taulut",
"bucket-example": "Kuten “Laatikko lista” esimerkiksi",
@@ -66,11 +92,15 @@
"card-delete-notice": "Poistaminen on lopullista. Menetät kaikki toimet jotka on liitetty tähän korttiin.",
"card-delete-pop": "Kaikki toimet poistetaan toimintasyötteestä ja et tule pystymään uudelleenavaamaan korttia. Tätä ei voi peruuttaa.",
"card-delete-suggest-archive": "Voit arkistoida kortin poistaaksesi sen taululta ja säilyttääksesi toimet.",
+ "card-due": "Erääntyy",
+ "card-due-on": "Erääntyy",
"card-edit-attachments": "Muokkaa liitetiedostoja",
"card-edit-labels": "Muokkaa tunnisteita",
"card-edit-members": "Muokkaa jäseniä",
- "card-labels-title": "Vaihda kortin tunnisteita.",
+ "card-labels-title": "Muokkaa kortin tunnisteita.",
"card-members-title": "Lisää tai poista taulun jäseniä tältä kortilta.",
+ "card-start": "Alkaa",
+ "card-start-on": "Alkaa",
"cardAttachmentsPopup-title": "Liitä mistä",
"cardDeletePopup-title": "Poista kortti?",
"cardDetailsActionsPopup-title": "Kortti toimet",
@@ -78,14 +108,17 @@
"cardMembersPopup-title": "Jäsenet",
"cardMorePopup-title": "Lisää",
"cards": "Kortit",
- "change": "Muuta",
- "change-avatar": "Vaihda profiilikuva",
+ "change": "Muokkaa",
+ "change-avatar": "Muokkaa profiilikuvaa",
"change-password": "Vaihda salasana",
- "change-permissions": "Muuta oikeuksia",
- "changeAvatarPopup-title": "Vaihda profiilikuva",
+ "change-permissions": "Muokkaa oikeuksia",
+ "change-settings": "Muokkaa asetuksia",
+ "changeAvatarPopup-title": "Muokkaa profiilikuvaa",
"changeLanguagePopup-title": "Vaihda kieltä",
"changePasswordPopup-title": "Vaihda salasana",
- "changePermissionsPopup-title": "Vaihda oikeuksia",
+ "changePermissionsPopup-title": "Muokkaa oikeuksia",
+ "changeSettingsPopup-title": "Muokkaa asetuksia",
+ "checklists": "Tarkistuslistat",
"click-to-star": "Klikkaa merkataksesi tämä taulu tähdellä.",
"click-to-unstar": "Klikkaa poistaaksesi tähtimerkintä taululta.",
"clipboard": "Leikepöytä tai raahaa ja pudota",
@@ -104,11 +137,14 @@
"color-yellow": "keltainen",
"comment": "Kommentti",
"comment-placeholder": "Kirjoita kommentti",
+ "comment-only": "Limited",
+ "comment-only-desc": "Can comment on cards only.",
"computer": "Tietokone",
"create": "Luo",
"createBoardPopup-title": "Luo taulu",
"createLabelPopup-title": "Luo tunniste",
"current": "nykyinen",
+ "date": "Päivämäärä",
"decline": "Kieltäydy",
"default-avatar": "Oletus profiilikuva",
"delete": "Poista",
@@ -120,9 +156,12 @@
"done": "Valmis",
"download": "Lataa",
"edit": "Muokkaa",
- "edit-avatar": "Vaihda profiilikuva",
+ "edit-avatar": "Muokkaa profiilikuvaa",
"edit-profile": "Muokkaa profiilia",
- "editLabelPopup-title": "Vaihda tunniste",
+ "editCardStartDatePopup-title": "Muokkaa aloituspäivää",
+ "editCardDueDatePopup-title": "Muokkaa eräpäivää",
+ "editLabelPopup-title": "Muokkaa tunnistetta",
+ "editNotificationPopup-title": "Muokkaa ilmoituksia",
"editProfilePopup-title": "Muokkaa profiilia",
"email": "Sähköposti",
"email-enrollAccount-subject": "An account created for you on __siteName__",
@@ -135,7 +174,7 @@
"email-resetPassword-subject": "Reset your password on __siteName__",
"email-resetPassword-text": "Hei __user__,\n\nNollataksesi salasanasi, klikkaa allaolevaa linkkiä.\n\n__url__\n\nKiitos.",
"email-sent": "Sähköposti lähetetty",
- "email-verifyEmail-subject": "Verify your email address on __siteName__",
+ "email-verifyEmail-subject": "Varmista sähköpostiosoitteesi osoitteessa __url__",
"email-verifyEmail-text": "Hei __user__,\n\nvahvistaaksesi sähköpostiosoitteesi, klikkaa allaolevaa linkkiä.\n\n__url__\n\nKiitos.",
"error-board-doesNotExist": "Tämä taulu ei ole olemassa",
"error-board-notAdmin": "Tehdäksesi tämän sinun täytyy olla tämän taulun ylläpitäjä",
@@ -146,27 +185,34 @@
"error-user-doesNotExist": "Tätä käyttäjää ei ole olemassa",
"error-user-notAllowSelf": "Tämä toiminto itseäsi kohtaan ei ole sallittu",
"error-user-notCreated": "Tätä käyttäjää ei ole luotu",
- "export-board": "Export board",
+ "error-username-taken": "Tämä käyttäjätunnus on jo käytössä",
+ "export-board": "Vie taulu",
"filter": "Suodata",
"filter-cards": "Suodata kortit",
"filter-clear": "Poista suodatin",
+ "filter-no-label": "Ei tunnistetta",
+ "filter-no-member": "Ei jäseniä",
"filter-on": "Suodatus on päällä",
"filter-on-desc": "Suodatat kortteja tällä taululla. Klikkaa tästä muokataksesi suodatinta.",
"filter-to-selection": "Suodata valintaan",
"fullname": "Koko nimi",
"header-logo-title": "Palaa taulut sivullesi.",
+ "hide-system-messages": "Piilota järjestelmäviestit",
+ "headerBarCreateBoardPopup-title": "Luo taulu",
"home": "Koti",
"import": "Tuo",
"import-board": "tuo Trellosta",
+ "import-board-title": "Tuo taulu Trellosta",
"import-board-trello-instruction": "Trello taulullasi, mene 'Menu', sitten 'More', 'Print and Export', 'Export JSON', ja kopioi tuloksena saamasi teksti",
- "import-card": "Tuo Trello kortti",
- "import-card-trello-instruction": "Mene Trello kortille, valitse 'Share and more...' sitten 'Export JSON' ja kopioi tuloksena saamasi teksti",
"import-json-placeholder": "Liitä kelvollinen JSON tietosi tähän",
+ "import-map-members": "Vastaavat jäsenet",
"import-members-map": "Tuomallasi taululla on muutamia jäseniä. Ole hyvä ja valitse tuomiasi jäseniä vastaavat Wekan käyttäjät",
"import-show-user-mapping": "Tarkasta vastaavat jäsenet",
"import-user-select": "Valitse Wekan käyttäjä jota haluat käyttää tänä käyttäjänä",
+ "importMapMembersAddPopup-title": "Valitse Wekan käyttäjä",
"info": "Tietoja",
"initials": "Nimikirjaimet",
+ "invalid-date": "Virheellinen päivämäärä",
"joined": "liittyi",
"just-invited": "Sinut on juuri kutsuttu tälle taululle",
"keyboard-shortcuts": "Pikanäppäimet",
@@ -186,17 +232,20 @@
"listImportCardPopup-title": "Tuo Trello kortti",
"lists": "Listat",
"log-out": "Kirjaudu ulos",
+ "log-in": "Kirjaudu sisään",
"loginPopup-title": "Kirjaudu sisään",
- "mapMembersAddPopup-title": "Valitse Wekan käyttäjä",
- "mapMembersPopup-title": "Vastaavat jäsenet",
"memberMenuPopup-title": "Jäsen asetukset",
"members": "Jäsenet",
"menu": "Valikko",
- "move-selection": "Move selection",
+ "move-selection": "Siirrä valinta",
"moveCardPopup-title": "Siirrä kortti",
- "moveSelectionPopup-title": "Move selection",
+ "moveCardToBottom-title": "Siirrä alimmaiseksi",
+ "moveCardToTop-title": "Siirrä ylimmäiseksi",
+ "moveSelectionPopup-title": "Siirrä valinta",
"multi-selection": "Monivalinta",
"multi-selection-on": "Monivalinta on päällä",
+ "muted": "Vaimennettu",
+ "muted-info": "Et saa koskaan ilmoituksia tämän taulun muutoksista",
"my-boards": "Tauluni",
"name": "Nimi",
"no-archived-cards": "Ei arkistoituja kortteja.",
@@ -205,12 +254,15 @@
"normal": "Normaali",
"normal-desc": "Voi nähdä ja muokata kortteja. Ei voi muokata asetuksia.",
"not-accepted-yet": "Kutsua ei ole hyväksytty vielä",
+ "notify-participate": "Vastaanota päivityksiä kaikilta korteilta jotka olet tehnyt tai joihin osallistut.",
+ "notify-watch": "Vastaanota päivityksiä kaikilta tauluilta, listoilta tai korteilta joita seuraat.",
"optional": "valinnainen",
"or": "tai",
"page-maybe-private": "Tämä sivu voi olla yksityinen. Voit ehkä pystyä näkemään sen <a href='%s'>kirjautumalla sisään</a>.",
"page-not-found": "Sivua ei löytynyt.",
"password": "Salasana",
"paste-or-dragdrop": "liittääksesi, tai vedä & pudota kuvatiedosto siihen (vain kuva)",
+ "participating": "Osallistutaan",
"preview": "Esikatsele",
"previewAttachedImagePopup-title": "Esikatsele",
"previewClipboardImagePopup-title": "Esikatsele",
@@ -223,6 +275,7 @@
"remove-cover": "Poista kansi",
"remove-from-board": "Poista taululta",
"remove-label": "Poista tunniste",
+ "remove-list": "Poista lista",
"remove-member": "Poista jäsen",
"remove-member-from-card": "Poista kortilta",
"remove-member-pop": "Poista __name__ (__username__) taululta __boardTitle__? Jäsen poistetaan kaikilta taulun korteilta. Heille lähetetään ilmoitus.",
@@ -240,8 +293,11 @@
"shortcut-close-dialog": "Sulje valintaikkuna",
"shortcut-filter-my-cards": "Suodata korttini",
"shortcut-show-shortcuts": "Tuo esiin tämä pikavalinta lista",
- "shortcut-toggle-filterbar": "Vaihda suodatus sivupalkin näkyvyys",
- "shortcut-toggle-sidebar": "Vaihda taulu sivupalkin näkyvyys",
+ "shortcut-toggle-filterbar": "Muokkaa suodatus sivupalkin näkyvyyttä",
+ "shortcut-toggle-sidebar": "Muokkaa taulu sivupalkin näkyvyyttä",
+ "show-cards-minimum-count": "Näytä korttien lukumäärä jos lista sisältää enemmän kuin",
+ "sidebar-open": "Avaa sivupalkki",
+ "sidebar-close": "Sulje sivupalkki",
"signupPopup-title": "Luo tili",
"star-board-title": "Klikkaa merkataksesi taulu tähdellä. Se tulee näkymään ylimpänä taululistallasi.",
"starred-boards": "Tähdellä merkatut taulut",
@@ -250,14 +306,44 @@
"team": "Tiimi",
"this-board": "tämä taulu",
"this-card": "tämä kortti",
+ "time": "Aika",
"title": "Otsikko",
+ "tracking": "Ilmoitukset",
+ "tracking-info": "Sinulle ilmoitetaan muutoksista korteissa joihin olet osallistunut luojana tai jäsenenä.",
"unassign-member": "Peru jäsenvalinta",
"unsaved-description": "Sinulla on tallentamaton kuvaus.",
+ "unwatch": "Lopeta seuraaminen",
"upload": "Lähetä",
"upload-avatar": "Lähetä profiilikuva",
"uploaded-avatar": "Profiilikuva lähetetty",
"username": "Käyttäjänimi",
"view-it": "Näytä se",
"warn-list-archived": "varoitus: tämä kortti on arkistoitujen listalla",
- "what-to-do": "Mitä haluat tehdä?"
-}
+ "watch": "Seuraa",
+ "watching": "Seurataan",
+ "watching-info": "Sinulle ilmoitetaan tämän taulun muutoksista",
+ "welcome-board": "Tervetuloa taulu",
+ "welcome-list1": "Perusasiat",
+ "welcome-list2": "Edistynyt",
+ "what-to-do": "Mitä haluat tehdä?",
+ "admin-panel": "Hallintapaneeli",
+ "settings": "Asetukset",
+ "people": "Ihmiset",
+ "registration": "Rekisteröinti",
+ "disable-self-registration": "Poista käytöstä itse-rekisteröityminen",
+ "invite": "Kutsu",
+ "invite-people": "Kutsu ihmisiä",
+ "to-boards": "Taulu(i)lle",
+ "email-addresses": "Sähköpostiosoite",
+ "smtp-host-description": "SMTP palvelimen osoite jolla sähköpostit lähetetään.",
+ "smtp-port-description": "Portti jota STMP palvelimesi käyttää lähteville sähköposteille.",
+ "smtp-host": "SMTP isäntä",
+ "smtp-port": "SMTP portti",
+ "smtp-username": "Käyttäjänimi",
+ "smtp-password": "Salasana",
+ "send-from": "Lähettäjä",
+ "invitation-code": "Kutsukoodi",
+ "email-invite-register-subject": "__inviter__ lähetti sinulle kutsun",
+ "email-invite-register-text": "Hei __user__,\n\n__inviter__ kutsuu sinut mukaan Wekan ohjelman käyttöön.\n\nOle hyvä ja seuraa allaolevaa linkkiä:\n__url__\n\nJa kutsukoodisi on: __icode__\n\nKiitos.",
+ "error-invitation-code-not-exist": "Kutsukoodi ei ole olemassa"
+} \ No newline at end of file
diff --git a/i18n/fr.i18n.json b/i18n/fr.i18n.json
index adc4baa4..73225b23 100755..100644
--- a/i18n/fr.i18n.json
+++ b/i18n/fr.i18n.json
@@ -1,5 +1,25 @@
{
"accept": "Accepter",
+ "act-activity-notify": "[Wekan] Notification d'activité",
+ "act-addAttachment": "a joint __attachment__ à __card__",
+ "act-addComment": "a commenté __card__:__comment__",
+ "act-createBoard": "a créé __board__",
+ "act-createCard": "a ajouté __card__ à __list__",
+ "act-createList": "a ajouté __list__ à __board__",
+ "act-addBoardMember": "a ajouté __member__ à __board__",
+ "act-archivedBoard": "a archivé __board__",
+ "act-archivedCard": "a archivé __card__",
+ "act-archivedList": "a archivé __list__",
+ "act-importBoard": "a importé __board__",
+ "act-importCard": "a importé __card__",
+ "act-importList": "a importé __list__",
+ "act-joinMember": "a ajouté __member__ à __card__",
+ "act-moveCard": "a déplacé __card__ de __oldList__ à __list__",
+ "act-removeBoardMember": "a retiré __member__ de __board__",
+ "act-restoredCard": "a restauré __card__ dans __bord__",
+ "act-unjoinMember": "a retiré __member__ de __card__",
+ "act-withBoardTitle": "[Wekan] __board__",
+ "act-withCardTitle": "[__board__] __card__",
"actions": "Actions",
"activities": "Activités",
"activity": "Activité",
@@ -11,26 +31,31 @@
"activity-imported": "a importé %s vers %s depuis %s",
"activity-imported-board": "a importé %s depuis %s",
"activity-joined": "a rejoint %s",
- "activity-moved": "a déplacé %s depuis %s vers %s",
+ "activity-moved": "a déplacé %s de %s vers %s",
"activity-on": "sur %s",
- "activity-removed": "a supprimé %s vers %s",
+ "activity-removed": "a supprimé %s de %s",
"activity-sent": "a envoyé %s vers %s",
"activity-unjoined": "a quitté %s",
+ "activity-checklist-added": "a ajouté une liste de vérifications à %s",
"add": "Ajouter",
"add-attachment": "Joindre un fichier",
"add-board": "Ajouter un nouveau tableau",
"add-card": "Ajouter une carte",
+ "add-checklist": "Ajouter une liste de vérifications",
+ "add-checklist-item": "Ajouter un élément à la liste de vérifications",
"add-cover": "Ajouter la couverture",
"add-label": "Ajouter une étiquette",
"add-list": "Ajouter une liste",
"add-members": "Assigner des membres",
- "added": "Ajouté",
+ "added": "Ajouté le",
"addMemberPopup-title": "Membres",
"admin": "Admin",
"admin-desc": "Peut voir et éditer les cartes, supprimer des membres et changer les paramètres du tableau.",
"all-boards": "Tous les tableaux",
"and-n-other-card": "Et __count__ autre carte",
"and-n-other-card_plural": "Et __count__ autres cartes",
+ "apply": "Appliquer",
+ "app-is-offline": "L'application est actuellement déconnectée, recharger la page provoquera des pertes de données.",
"archive": "Archiver",
"archive-all": "Tout archiver",
"archive-board": "Archiver le tableau",
@@ -40,12 +65,13 @@
"archiveBoardPopup-title": "Archiver le tableau ?",
"archived-items": "Éléments archivés",
"archives": "Archives",
- "assign-member": "Assigner un membre",
+ "assign-member": "Affecter un membre",
"attached": "joint",
"attachment": "Pièce jointe",
"attachment-delete-pop": "La suppression d'une pièce jointe est définitive. Elle ne peut être annulée.",
"attachmentDeletePopup-title": "Supprimer la pièce jointe ?",
"attachments": "Pièces jointes",
+ "auto-watch": "Surveiller automatiquement les tableaux quand ils sont créés",
"avatar-too-big": "La taille du fichier de l’avatar est trop importante (70 Ko au maximum)",
"back": "Retour",
"board-change-color": "Changer la couleur",
@@ -53,10 +79,10 @@
"board-not-found": "Tableau non trouvé",
"board-private-info": "Ce tableau sera <strong>privé</strong>",
"board-public-info": "Ce tableau sera <strong>public</strong>.",
- "boardChangeColorPopup-title": "Change la fond du tableau",
+ "boardChangeColorPopup-title": "Change la couleur de fond du tableau",
"boardChangeTitlePopup-title": "Renommer le tableau",
"boardChangeVisibilityPopup-title": "Changer la visibilité",
- "boardImportBoardPopup-title": "Importer le tableau depuis Trello",
+ "boardChangeWatchPopup-title": "Modifier le suivi",
"boardMenuPopup-title": "Menu du tableau",
"boards": "Tableaux",
"bucket-example": "Comme « todo list » par exemple",
@@ -66,11 +92,15 @@
"card-delete-notice": "La suppression est permanente. Vous perdrez toutes les actions associées à cette carte.",
"card-delete-pop": "Toutes les actions vont être supprimées du suivi d'activités et vous ne pourrez plus utiliser cette carte. Cette action est irréversible.",
"card-delete-suggest-archive": "Vous pouvez archiver une carte pour la supprimer en préservant le suivi des activités.",
- "card-edit-attachments": "Editer les pièces jointes",
- "card-edit-labels": "Editer les étiquettes",
+ "card-due": "À échéance",
+ "card-due-on": "Échéance le",
+ "card-edit-attachments": "Modifier les pièces jointes",
+ "card-edit-labels": "Modifier les étiquettes",
"card-edit-members": "Modifier les membres",
"card-labels-title": "Modifier les étiquettes de la carte.",
"card-members-title": "Ajouter ou supprimer des membres à la carte.",
+ "card-start": "Début",
+ "card-start-on": "Commence le",
"cardAttachmentsPopup-title": "Joindre depuis",
"cardDeletePopup-title": "Supprimer la carte ?",
"cardDetailsActionsPopup-title": "Actions sur la carte",
@@ -78,14 +108,17 @@
"cardMembersPopup-title": "Membres",
"cardMorePopup-title": "Plus",
"cards": "Cartes",
- "change": "Changer",
- "change-avatar": "Changer l'avatar",
- "change-password": "Changer le mot de passe",
- "change-permissions": "Changer les permissions",
- "changeAvatarPopup-title": "Changer l'avatar",
- "changeLanguagePopup-title": "Changer la langue",
- "changePasswordPopup-title": "Changer le mot de passe",
- "changePermissionsPopup-title": "Changer les permissions",
+ "change": "Modifier",
+ "change-avatar": "Modifier l'avatar",
+ "change-password": "Modifier le mot de passe",
+ "change-permissions": "Modifier les permissions",
+ "change-settings": "Modifier les paramètres",
+ "changeAvatarPopup-title": "Modifier l'avatar",
+ "changeLanguagePopup-title": "Modifier la langue",
+ "changePasswordPopup-title": "Modifier le mot de passe",
+ "changePermissionsPopup-title": "Modifier les permissions",
+ "changeSettingsPopup-title": "Modifier les paramètres",
+ "checklists": "Listes de vérifications",
"click-to-star": "Cliquez pour ajouter ce tableau aux favoris.",
"click-to-unstar": "Cliquez pour retirer ce tableau des favoris.",
"clipboard": "Presse-papier ou glisser-déposer",
@@ -104,11 +137,14 @@
"color-yellow": "jaune",
"comment": "Commentaire",
"comment-placeholder": "Rédiger un commentaire",
+ "comment-only": "Limited",
+ "comment-only-desc": "Can comment on cards only.",
"computer": "Ordinateur",
"create": "Créer",
"createBoardPopup-title": "Créer un tableau",
- "createLabelPopup-title": "Créer un étiquette",
- "current": "courant",
+ "createLabelPopup-title": "Créer une étiquette",
+ "current": "actuel",
+ "date": "Date",
"decline": "Refuser",
"default-avatar": "Avatar par défaut",
"delete": "Supprimer",
@@ -119,110 +155,127 @@
"discard": "Mettre à la corbeille",
"done": "Fait",
"download": "Télécharger",
- "edit": "Éditer",
- "edit-avatar": "Changer l'avatar",
- "edit-profile": "Éditer le profil",
- "editLabelPopup-title": "Changer l'étiquette",
- "editProfilePopup-title": "Éditer le profil",
+ "edit": "Modifier",
+ "edit-avatar": "Modifier l'avatar",
+ "edit-profile": "Modifier le profil",
+ "editCardStartDatePopup-title": "Modifier la date de début",
+ "editCardDueDatePopup-title": "Modifier la date d'échéance",
+ "editLabelPopup-title": "Modifier l'étiquette",
+ "editNotificationPopup-title": "Modifier la notification",
+ "editProfilePopup-title": "Modifier le profil",
"email": "Email",
"email-enrollAccount-subject": "Un compte a été créé pour vous sur __siteName__",
"email-enrollAccount-text": "Bonjour __user__,\n\nPour commencer à utiliser ce service, il suffit de cliquer sur le lien ci-dessous.\n\n__url__\n\nMerci.",
"email-fail": "Échec de l’envoi du courriel.",
- "email-invalid": "Courriel incorrect.",
+ "email-invalid": "Adresse email incorrecte.",
"email-invite": "Inviter par email",
"email-invite-subject": "__inviter__ vous a envoyé une invitation",
"email-invite-text": "Cher __user__,\n\n__inviter__ vous invite à rejoindre le tableau \"__board__\" pour collaborer.\n\nVeuillez suivre le lien ci-dessous :\n\n__url__\n\nMerci.",
- "email-resetPassword-subject": "Réinitialiser le mot de passe sur __siteName__",
+ "email-resetPassword-subject": "Réinitialiser votre mot de passe sur __siteName__",
"email-resetPassword-text": "Bonjour __user__,\n\nPour réinitialiser votre mot de passe, cliquez sur le lien ci-dessous.\n\n__url__\n\nMerci.",
"email-sent": "Courriel envoyé",
"email-verifyEmail-subject": "Vérifier votre adresse de courriel sur __siteName__",
"email-verifyEmail-text": "Bonjour __user__,\n\nPour vérifier votre compte courriel, il suffit de cliquer sur le lien ci-dessous.\n\n__url__\n\nMerci.",
"error-board-doesNotExist": "Ce tableau n’existe pas",
- "error-board-notAdmin": "Vous devez être admin de ce tableau pour faire cela",
- "error-board-notAMember": "Vous devez être participant à ce tableau pour faire cela",
+ "error-board-notAdmin": "Vous devez être administrateur de ce tableau pour faire cela",
+ "error-board-notAMember": "Vous devez être membre de ce tableau pour faire cela",
"error-json-malformed": "Votre texte JSON n’est pas valide",
"error-json-schema": "Vos données JSON ne contiennent pas l’information appropriée dans un format correct",
"error-list-doesNotExist": "Cette liste n’existe pas",
"error-user-doesNotExist": "Cet utilisateur n’existe pas",
- "error-user-notAllowSelf": "This action on self is not allowed",
- "error-user-notCreated": "Cet utilisateur n’a pas encore été créé. ",
+ "error-user-notAllowSelf": "Cette action n'est pas autorisée pour soi-même",
+ "error-user-notCreated": "Cet utilisateur n’a pas encore été créé",
+ "error-username-taken": "Ce nom d'utilisateur est déjà utilisé",
"export-board": "Exporter le tableau",
"filter": "Filtrer",
"filter-cards": "Filtrer les cartes",
- "filter-clear": "Retirer les filtres",
+ "filter-clear": "Supprimer les filtres",
+ "filter-no-label": "Aucune étiquette",
+ "filter-no-member": "Aucun membre",
"filter-on": "Le filtre est actif",
- "filter-on-desc": "Vous êtes en train de filtrer les cartes sur ce tableau. Cliquez ici pour changer les filtres.",
+ "filter-on-desc": "Vous êtes en train de filtrer les cartes sur ce tableau. Cliquez ici pour modifier les filtres.",
"filter-to-selection": "Filtre vers la sélection",
"fullname": "Nom complet",
"header-logo-title": "Retourner à la page des tableaux",
+ "hide-system-messages": "Masquer les messages système",
+ "headerBarCreateBoardPopup-title": "Créer un tableau",
"home": "Accueil",
"import": "Importer",
"import-board": "Importer depuis Trello",
- "import-board-trello-instruction": "In your Trello board, go to 'Menu', then 'More', 'Print and Export', 'Export JSON', and copy the resulting text",
- "import-card": "Importer une carte Trello",
- "import-card-trello-instruction": "Go to a Trello card, select 'Share and more...' then 'Export JSON' and copy the resulting text",
- "import-json-placeholder": "Collez ici les données JSON valides. ",
- "import-members-map": "Le tableau que vous venez d’importer contient des participants. Veuillez associer les participants que vous souhaitez importer à des utilisateurs de Wekan. ",
- "import-show-user-mapping": "Review members mapping",
- "import-user-select": "Pick the Wekan user you want to use as this member",
+ "import-board-title": "Importer le tableau depuis Trello",
+ "import-board-trello-instruction": "Dans votre tableau Trello, allez sur 'Menu', puis sur 'Plus', 'Imprimer et exporter', 'Exporter en JSON' et copiez le texte du résultat",
+ "import-json-placeholder": "Collez ici les données JSON valides",
+ "import-map-members": "Faire correspondre aux membres",
+ "import-members-map": "Le tableau que vous venez d’importer contient des membres. Veuillez associer les membres que vous souhaitez importer à des utilisateurs de Wekan.",
+ "import-show-user-mapping": "Contrôler l'association des membres",
+ "import-user-select": "Sélectionnez l'utilisateur Wekan que vous voulez associer à ce membre",
+ "importMapMembersAddPopup-title": "Sélectionner le membre Wekan",
"info": "Infos",
"initials": "Initiales",
- "joined": "a joint",
- "just-invited": "You are just invited to this board",
+ "invalid-date": "Date invalide",
+ "joined": "a rejoint",
+ "just-invited": "Vous venez d'être invité à ce tableau",
"keyboard-shortcuts": "Raccourcis clavier",
"label-create": "Créer une nouvelle étiquette",
- "label-default": "%s label (default)",
+ "label-default": "étiquette %s (défaut)",
"label-delete-pop": "Cette action est irréversible. Elle supprimera cette étiquette de toutes les cartes ainsi que l'historique associé.",
"labels": "Étiquettes",
- "language": "Langage",
- "last-admin-desc": "Vous ne pouvez pas changer les rôles car il doit y avoir au moins un admin.",
+ "language": "Langue",
+ "last-admin-desc": "Vous ne pouvez pas changer les rôles car il doit y avoir au moins un administrateur.",
"leave-board": "Quitter le tableau",
- "link-card": "Lier cette carte",
- "list-archive-cards": "Archiver les cartes de cette liste",
- "list-archive-cards-pop": "Cela archivera toutes les cartes de cette liste. Pour voir les cartes archivées et les ramener vers le tableau, cliquez sur le « Menu » puis sur « Éléments archivés ».",
- "list-move-cards": "Déplacer les cartes de cette liste",
- "list-select-cards": "Sélectionner les cartes de cette liste",
- "listActionPopup-title": "Liste des actions",
+ "link-card": "Lier à cette carte",
+ "list-archive-cards": "Archiver toutes les cartes de cette liste",
+ "list-archive-cards-pop": "Cela archivera toutes les cartes de cette liste. Pour voir les cartes archivées et les ramener vers le tableau, cliquez sur « Menu » puis sur « Éléments archivés ».",
+ "list-move-cards": "Déplacer toutes les cartes de cette liste",
+ "list-select-cards": "Sélectionner toutes les cartes de cette liste",
+ "listActionPopup-title": "Actions sur la liste",
"listImportCardPopup-title": "Importer une carte Trello",
"lists": "Listes",
"log-out": "Déconnexion",
+ "log-in": "Connexion",
"loginPopup-title": "Connexion",
- "mapMembersAddPopup-title": "Sélectioner le membre Wekan",
- "mapMembersPopup-title": "Associer les membres",
"memberMenuPopup-title": "Préférence de membre",
"members": "Membres",
"menu": "Menu",
"move-selection": "Déplacer la sélection",
"moveCardPopup-title": "Déplacer la carte",
+ "moveCardToBottom-title": "Déplacer tout en bas",
+ "moveCardToTop-title": "Déplacer tout en haut",
"moveSelectionPopup-title": "Déplacer la sélection",
"multi-selection": "Sélection multiple",
"multi-selection-on": "Multi-Selection active",
+ "muted": "Silencieux",
+ "muted-info": "Vous ne serez jamais averti des modifications effectuées dans ce tableau",
"my-boards": "Mes tableaux",
"name": "Nom",
"no-archived-cards": "Pas de carte archivée.",
"no-archived-lists": "Pas de liste archivée.",
"no-results": "Pas de résultats",
"normal": "Normal",
- "normal-desc": "Peut voir et éditer les cartes. Ne peut pas changer les paramètres.",
+ "normal-desc": "Peut voir et modifier les cartes. Ne peut pas changer les paramètres.",
"not-accepted-yet": "L’invitation n’a pas encore été acceptée",
+ "notify-participate": "Recevoir les mises à jour de toutes les cartes auxquelles vous participez en tant que créateur ou que membre ",
+ "notify-watch": "Recevoir les mises à jour de tous les tableaux, listes ou cartes que vous suivez",
"optional": "optionnel",
"or": "ou",
"page-maybe-private": "Cette page est peut-être privée. Vous pourrez peut-être la voir en vous <a href='%s'>connectant</a>.",
"page-not-found": "Page non trouvée",
"password": "Mot de passe",
"paste-or-dragdrop": "pour coller, ou glissez-déposez une image ici (seulement une image)",
+ "participating": "Participant",
"preview": "Prévisualiser",
"previewAttachedImagePopup-title": "Prévisualiser",
"previewClipboardImagePopup-title": "Prévisualiser",
"private": "Privé",
- "private-desc": "Ce tableau est privé. Seul les membres peuvent y accéder.",
+ "private-desc": "Ce tableau est privé. Seuls les membres peuvent y accéder et le modifier.",
"profile": "Profil",
"public": "Public",
- "public-desc": "Ce tableau est public. Il est visible par toutes les personnes possédant le lien et visible dans les moteurs de recherche tels que Google. Seuls les membres peuvent l'éditer.",
- "quick-access-description": "Ajouter un tableau aux favoris pour créer un raccourci dans cette barre.",
- "remove-cover": "Enlever la couverture",
+ "public-desc": "Ce tableau est public. Il est accessible par toutes les personnes disposant du lien et apparaîtra dans les résultats des moteurs de recherche tels que Google. Seuls les membres peuvent le modifier.",
+ "quick-access-description": "Ajouter un tableau à vos favoris pour créer un raccourci dans cette barre.",
+ "remove-cover": "Enlever la page de présentation",
"remove-from-board": "Retirer du tableau",
"remove-label": "Retirer cette étiquette",
+ "remove-list": "Supprimer la liste",
"remove-member": "Supprimer le membre",
"remove-member-from-card": "Supprimer de la carte",
"remove-member-pop": "Supprimer __name__ (__username__) de __boardTitle__ ? Ce membre sera supprimé de toutes les cartes du tableau et recevra une notification.",
@@ -230,34 +283,67 @@
"rename": "Renommer",
"rename-board": "Renommer le tableau",
"restore": "Restaurer",
- "save": "Sauvegarder",
+ "save": "Enregistrer",
"search": "Chercher",
"select-color": "Choisissez une couleur",
- "shortcut-assign-self": "Assign yourself to current card",
- "shortcut-autocomplete-emojies": "Auto-complétion des emojies",
+ "shortcut-assign-self": "Affecter cette carte à vous-même",
+ "shortcut-autocomplete-emoji": "Auto-complétion des emoji",
"shortcut-autocomplete-members": "Auto-complétion des membres",
"shortcut-clear-filters": "Retirer tous les filtres",
- "shortcut-close-dialog": "Fermer le dialogue",
+ "shortcut-close-dialog": "Fermer la boîte de dialogue",
"shortcut-filter-my-cards": "Filtrer mes cartes",
"shortcut-show-shortcuts": "Afficher cette liste de raccourcis",
"shortcut-toggle-filterbar": "Afficher/Cacher la barre latérale des filtres",
"shortcut-toggle-sidebar": "Afficher/Cacher la barre latérale du tableau",
+ "show-cards-minimum-count": "Afficher le nombre de cartes si la liste en contient plus de ",
+ "sidebar-open": "Ouvrir le panneau",
+ "sidebar-close": "Fermer le panneau",
"signupPopup-title": "Créer un compe",
- "star-board-title": "Cliquer pour ajouter ce tableau aux favoris. Il sera affiché en haut de votre liste de tableaux.",
+ "star-board-title": "Cliquer pour ajouter ce tableau aux favoris. Il sera affiché en tête de votre liste de tableaux.",
"starred-boards": "Tableaux favoris",
- "starred-boards-description": "Les tableaux favoris s'affichent en haut de votre liste de tableaux.",
+ "starred-boards-description": "Les tableaux favoris s'affichent en tête de votre liste de tableaux.",
"subscribe": "Suivre",
"team": "Équipe",
"this-board": "ce tableau",
"this-card": "cette carte",
+ "time": "Temps",
"title": "Titre",
+ "tracking": "Suivi",
+ "tracking-info": "Vous serez notifié de toute modification concernant les cartes pour lesquelles vous êtes impliqué en tant que créateur ou membre.",
"unassign-member": "Retirer le membre",
"unsaved-description": "Vous avez une description non sauvegardée",
+ "unwatch": "Arrêter de suivre",
"upload": "Télécharger",
"upload-avatar": "Télécharger un avatar",
"uploaded-avatar": "Avatar téléchargé",
"username": "Nom d'utilisateur",
"view-it": "Le voir",
"warn-list-archived": "Attention : cette carte est dans une liste archivée",
- "what-to-do": "Que voulez-vous faire ?"
+ "watch": "Suivre",
+ "watching": "Suivi",
+ "watching-info": "Vous serez notifié de toute modification dans ce tableau",
+ "welcome-board": "Tableau de bienvenue",
+ "welcome-list1": "Basiques",
+ "welcome-list2": "Avancés",
+ "what-to-do": "Que voulez-vous faire ?",
+ "admin-panel": "Panneau d'administration",
+ "settings": "Paramètres",
+ "people": "Personne",
+ "registration": "Inscription",
+ "disable-self-registration": "Désactiver l'inscription",
+ "invite": "Inviter",
+ "invite-people": "Inviter une personne",
+ "to-boards": "Au(x) tableau(x)",
+ "email-addresses": "Adresses email",
+ "smtp-host-description": "L'adresse du serveur SMTP qui gère vos mails.",
+ "smtp-port-description": "Le port des mails sortants du serveur SMTP.",
+ "smtp-host": "Hôte SMTP",
+ "smtp-port": "Port SMTP",
+ "smtp-username": "Nom d'utilisateur",
+ "smtp-password": "Mot de passe",
+ "send-from": "De",
+ "invitation-code": "Code d'invitation",
+ "email-invite-register-subject": "__inviter__ vous a envoyé une invitation",
+ "email-invite-register-text": "Cher __user__,\n\n__inviter__ vous invite à le rejoindre sur Wekan pour collaborer.\n\nVeuillez suivre le lien ci-dessous :\n__url__\n\nVotre code d'invitation est : __icode__\n\nMerci.",
+ "error-invitation-code-not-exist": "Ce code d'invitation n'existe pas."
} \ No newline at end of file
diff --git a/i18n/he.i18n.json b/i18n/he.i18n.json
index f08f430b..28418910 100644
--- a/i18n/he.i18n.json
+++ b/i18n/he.i18n.json
@@ -1,10 +1,30 @@
{
"accept": "אישור",
+ "act-activity-notify": "[Wekan] הודעת פעילות",
+ "act-addAttachment": " __attachment__ שוייך ל- __card__",
+ "act-addComment": "תגובה לכרטיס __card__ :__comment__",
+ "act-createBoard": "הלוח __board__ נוצר",
+ "act-createCard": "הכרטיס __card__ התווסף לרשימה __list__",
+ "act-createList": "הרשימה __list__ התווספה ללוח __board__",
+ "act-addBoardMember": "המשתמש __member__ שויך ללוח __board__",
+ "act-archivedBoard": "הלוח __board__ הועבר לארכיון",
+ "act-archivedCard": "הכרטיס __card__ הועבר לארכיון",
+ "act-archivedList": "הרשימה __card__ הועברה לארכיון",
+ "act-importBoard": "הלוח __board__ יובא",
+ "act-importCard": "הכרטיס __card__ יובא",
+ "act-importList": "הרשימה __list__ יובאה",
+ "act-joinMember": "המשתמש __member__ שוייך לכרטיס __card__",
+ "act-moveCard": "הכרטיס __card__ הועבר מהרשימה __oldList__ לרשימה __list__",
+ "act-removeBoardMember": "המשתמש __member__ הוסר מהלוח __board__",
+ "act-restoredCard": "הכרטיס __card__ שוחזר ללוח __board__",
+ "act-unjoinMember": "המשתמש __member__ הוסר מהכרטיס __card__",
+ "act-withBoardTitle": "[Wekan] __board__",
+ "act-withCardTitle": "[__board__] __card__",
"actions": "פעולות",
"activities": "פעילויות",
"activity": "פעילות",
"activity-added": "%s נוסף ל%s",
- "activity-archived": "%s בארכיון",
+ "activity-archived": "%s הועבר לארכיון",
"activity-attached": "%s צורף ל%s",
"activity-created": "%s נוצר",
"activity-excluded": "%s לא נכלל ב%s",
@@ -16,10 +36,13 @@
"activity-removed": "%s הוסר מ%s",
"activity-sent": "%s נשלח ל%s",
"activity-unjoined": "בטל צירוף %s",
+ "activity-checklist-added": "רשימת משימות התווספה ל- %s",
"add": "הוסף",
"add-attachment": "הוסף קובץ",
"add-board": "הוסף לוח חדש",
"add-card": "הוסף כרטיס",
+ "add-checklist": "הוסף רשימת משימות",
+ "add-checklist-item": "הוסף פריט לרשימת משימות",
"add-cover": "הוסף כיסוי",
"add-label": "הוסף תווית",
"add-list": "הוסף רשימה",
@@ -31,6 +54,8 @@
"all-boards": "כל הלוחות",
"and-n-other-card": "ו __count__ כרטיס אחר",
"and-n-other-card_plural": "ו __count__ כרטיסים אחרים",
+ "apply": "אשר שינויים",
+ "app-is-offline": "המערכת למטה כרגע, ריענון של הדף יגרום לאבדן מידע",
"archive": "אחסן בארכיון",
"archive-all": "אחסן הכל בארכיון",
"archive-board": "אחסן לוח בארכיון",
@@ -46,6 +71,7 @@
"attachment-delete-pop": "מחיקת קובץ מצורף הינה סופית. אין דרך חזרה.",
"attachmentDeletePopup-title": "למחוק קובץ מצורף?",
"attachments": "קבצים מצורפים",
+ "auto-watch": "עקוב באופן אוטומטי אחרי לוחות אחרי שהם נוצרים",
"avatar-too-big": "האווטאר גדול מידי (מקס 70Kb)",
"back": "חזור",
"board-change-color": "שנה צבע",
@@ -56,7 +82,7 @@
"boardChangeColorPopup-title": "שנה רקע ללוח",
"boardChangeTitlePopup-title": "שנה שם ללוח",
"boardChangeVisibilityPopup-title": "שנה תצוגה",
- "boardImportBoardPopup-title": "ייבא לוח מטרלו",
+ "boardChangeWatchPopup-title": "שנה את הגדרת המעקב",
"boardMenuPopup-title": "תפריט לוח",
"boards": "לוחות",
"bucket-example": "כמו “Bucket List” לדוגמא",
@@ -66,11 +92,15 @@
"card-delete-notice": "מחיקה היא סופית. תאבדו את כל הפעולות המשויכות לכרטיס זה.",
"card-delete-pop": "כל הפעולות יוסרו מלוח הפעילות ולא תוכלו לפתוח מחדש את הכרטיס. אין דרך חזרה.",
"card-delete-suggest-archive": "באפשרותך לאחסן בארכיון כרטיס כדי להסירו מהלוח ולשמר את הפעילות.",
+ "card-due": "תאריך יעד",
+ "card-due-on": "תאריך יעד",
"card-edit-attachments": "ערוך קבצים מצורפים",
- "card-edit-labels": "ערוך תוויות ",
+ "card-edit-labels": "ערוך תוויות",
"card-edit-members": "ערוך חברים",
"card-labels-title": "שנה תוויות לכרטיס.",
"card-members-title": "הוסף או הסר את חברי הלוח מהכרטיס",
+ "card-start": "התחל",
+ "card-start-on": "מתחיל ב-",
"cardAttachmentsPopup-title": "צרף מ",
"cardDeletePopup-title": "למחוק כרטיס?",
"cardDetailsActionsPopup-title": "פעולות על הכרטיס",
@@ -82,13 +112,16 @@
"change-avatar": "שנה אווטאר",
"change-password": "שנה סיסמא",
"change-permissions": "שנה הרשאות",
+ "change-settings": "שנה הגדרות",
"changeAvatarPopup-title": "שנה אווטאר",
"changeLanguagePopup-title": "שנה שפה",
"changePasswordPopup-title": "שנה סיסמא",
"changePermissionsPopup-title": "שנה הרשאות",
+ "changeSettingsPopup-title": "שנה הגדרות",
+ "checklists": "רשימות",
"click-to-star": "לחץ להוספת הלוח למועדפים",
"click-to-unstar": "לחץ להסרת הלוח מהמועדפים.",
- "clipboard": "Clipboard or drag & drop",
+ "clipboard": "לוח עריכה או גרור ושחרר",
"close": "סגור",
"close-board": "סגור לוח",
"close-board-pop": "תוכלו לשחזר את הלוח בלחיצה על כפתור \"ארכיונים\" מהכותרת העליונה.",
@@ -104,13 +137,16 @@
"color-yellow": "צהוב",
"comment": "הערה",
"comment-placeholder": "כתוב הערה",
+ "comment-only": "Limited",
+ "comment-only-desc": "Can comment on cards only.",
"computer": "מחשב",
"create": "צור",
"createBoardPopup-title": "צור לוח",
"createLabelPopup-title": "צור תווית",
"current": "נוכחי",
+ "date": "תאריך",
"decline": "סרב",
- "default-avatar": "אווטאר דיפולטי",
+ "default-avatar": "אווטאר ברירת מחדל",
"delete": "מחק",
"deleteLabelPopup-title": "למחוק תווית?",
"description": "תיאור",
@@ -122,7 +158,10 @@
"edit": "ערוך",
"edit-avatar": "שנה אווטאר",
"edit-profile": "ערוך פרופיל",
+ "editCardStartDatePopup-title": "שנה זמן התחלה",
+ "editCardDueDatePopup-title": "שנה זמן סיום",
"editLabelPopup-title": "שנה תווית",
+ "editNotificationPopup-title": "שנה התראה",
"editProfilePopup-title": "ערוך פרופיל",
"email": "אמייל",
"email-enrollAccount-subject": "חשבון נוצר עבורך ב __siteName__",
@@ -146,27 +185,34 @@
"error-user-doesNotExist": "משתמש זה לא קיים",
"error-user-notAllowSelf": "פעולה זו איננה מותרת",
"error-user-notCreated": "משתמש זה לא נוצר",
+ "error-username-taken": "המשתמש כבר קיים במערכת",
"export-board": "ייצא לוח",
"filter": "מסנן",
"filter-cards": "סנן כרטיסים",
"filter-clear": "נקה מסנן",
+ "filter-no-label": "אין תווית",
+ "filter-no-member": "המשתמש לא קיים",
"filter-on": "מסנן פועל",
"filter-on-desc": "מסנן כרטיסים בלוח זה פועל. יש ללחוץ כאן לעריכת המסנן.",
"filter-to-selection": "סנן את הבחירה",
"fullname": "שם מלא",
"header-logo-title": "חזור לדף הלוחות שלך.",
+ "hide-system-messages": "הסתר הודעות מערכת",
+ "headerBarCreateBoardPopup-title": "צור לוח",
"home": "בית",
"import": "ייבא",
"import-board": "ייבא מטרלו",
+ "import-board-title": "ייבא לוח מטרלו",
"import-board-trello-instruction": "בלוח הטרלו שלך, עבור ל 'Menu', ואז ל 'More', 'Print and Export', 'Export JSON' והעתק את הטקסט שנוצר",
- "import-card": "ייבא כרטיס מטרלו",
- "import-card-trello-instruction": "עבור לכרטיס טרלו, בחר \"Share and more...\" ואז \"Export JSON\" והעתק את הטקסט שנוצר",
"import-json-placeholder": "הדבק נתוני JSON תקינים כאן",
+ "import-map-members": "מפֱה חברים",
"import-members-map": "הלוחות המיובאים שלך מכילים חברים. בבקשה מפה את החברים שתרצה לייבא כמשתמשים",
"import-show-user-mapping": "צפה במיפוי חברים",
"import-user-select": "בחר במשתמש עבור חבר זה",
+ "importMapMembersAddPopup-title": "בחר משתמש",
"info": "אינפורמציה",
"initials": "ראשי תיבות",
+ "invalid-date": "תאריך שגוי",
"joined": "הצטרף",
"just-invited": "הוזמנת ללוח זה",
"keyboard-shortcuts": "קיצורי מקלדת",
@@ -186,17 +232,20 @@
"listImportCardPopup-title": "ייבא כרטיס מטרלו",
"lists": "רשימות",
"log-out": "התנתק",
+ "log-in": "התחבר",
"loginPopup-title": "התחבר",
- "mapMembersAddPopup-title": "בחר חבר",
- "mapMembersPopup-title": "מפה חברים",
"memberMenuPopup-title": "הגדרות חבר",
"members": "חברים",
"menu": "תפריט",
"move-selection": "הזז בחירה",
"moveCardPopup-title": "הזז כרטיס",
+ "moveCardToBottom-title": "העבר כרטיס לתחתית הרשימה",
+ "moveCardToTop-title": "העבר כרטיס לראש הרשימה ",
"moveSelectionPopup-title": "הזז בחירה",
"multi-selection": "בחירה מרובה",
"multi-selection-on": "בחירה מרובה פועלת",
+ "muted": "השתק",
+ "muted-info": "מעתה אתה לא תקבל עוד התראות על שינויים בלוח זה",
"my-boards": "הלוחות שלי",
"name": "שם",
"no-archived-cards": "אין כרטיסים מאוחסנים בארכיון.",
@@ -205,12 +254,15 @@
"normal": "נורמלי",
"normal-desc": "יכול לצפות ולערוך כרטיסים. לא יכול לשנות הגדרות.",
"not-accepted-yet": "הזמנה לא התקבלה עדיין",
+ "notify-participate": "קבל התראות על שינויים בכרטיסים שיצרת או שבהם אתה חבר",
+ "notify-watch": "קבל התראות על עדכונים בכל לוח, רשימה או כרטיס שבהם אתה חבר",
"optional": "אופציונלי",
"or": "או",
"page-maybe-private": "יתכן שדף זה פרטי. תוכלו לצפות על ידי <a href='%s'>התחברות למערכת</a>",
"page-not-found": "דף לא נמצא.",
"password": "סיסמא",
"paste-or-dragdrop": "בכדי להדביק או drag & drop קובץ תמונה (תמונה בלבד)",
+ "participating": "משתתפים",
"preview": "תצוגה מקדימה",
"previewAttachedImagePopup-title": "תצוגה מקדימה",
"previewClipboardImagePopup-title": "תצוגה מקדימה",
@@ -223,6 +275,7 @@
"remove-cover": "הסר כיסוי",
"remove-from-board": "הסר מהלוח",
"remove-label": "הסר תווית",
+ "remove-list": "הסר מהרשימה",
"remove-member": "הסר חבר",
"remove-member-from-card": "הסר מהכרטיס",
"remove-member-pop": "הסר __name__ (__username__) מ __boardTitle__? החבר יוסר מכל הכרטיסים בלוח זה. הוא יקבל על כך הודעה.",
@@ -234,7 +287,7 @@
"search": "חפש",
"select-color": "בחר צבע",
"shortcut-assign-self": "הקצה את עצמך לכרטיס הנוכחי",
- "shortcut-autocomplete-emojies": "השלמה אוטומטית של אימוג'יז",
+ "shortcut-autocomplete-emoji": "השלמה אוטומטית לפרצופונים (Emoji)",
"shortcut-autocomplete-members": "השלמה אוטומטית של חברים",
"shortcut-clear-filters": "נקה את כל המסננים",
"shortcut-close-dialog": "סגור חלון",
@@ -242,6 +295,9 @@
"shortcut-show-shortcuts": "הבא רשימת קיצורי דרך זו",
"shortcut-toggle-filterbar": "החלף מצבי מסנן",
"shortcut-toggle-sidebar": "החלף מצבי מסנן",
+ "show-cards-minimum-count": "הצג מספר כרטיסים אם הרשימה מכיל יותר כרטיסים מ-",
+ "sidebar-open": "פתח סרגל צד",
+ "sidebar-close": "סגור סרגל צד",
"signupPopup-title": "צור חשבון",
"star-board-title": "בלחיצה על הכווכב של הלוח יתווסף הלוח לראש רשימת הלוחות שלך.",
"starred-boards": "לוחות שסומנו בכוכב",
@@ -250,14 +306,44 @@
"team": "צוות",
"this-board": "לוח זה",
"this-card": "כרטיס זה",
+ "time": "זמן",
"title": "כותרת",
+ "tracking": "עוקב",
+ "tracking-info": "אתה תקבל התראות על שינויים בכרטיסים שיצרת או שאתה חבר בהם",
"unassign-member": "בטל הקצאת חבר",
"unsaved-description": "יש לך תיאור לא שמור.",
+ "unwatch": "הספק מעקב",
"upload": "העלה/טען",
"upload-avatar": "העלה/ טען אווטאר",
"uploaded-avatar": "אווטאר הועלה/נטען",
"username": "שם משתמש",
"view-it": "צפה",
"warn-list-archived": "אזהרה: הכרטיס נמצא ברשימה שהועברה לארכיון",
- "what-to-do": "מה תרצה לעשות?"
+ "watch": "עקוב",
+ "watching": "עוקב",
+ "watching-info": "מעתה אתה תקבל התראות על עדכונים בלוח זה",
+ "welcome-board": "ברוך הבא ללוח",
+ "welcome-list1": "יסודות",
+ "welcome-list2": "מתקדם",
+ "what-to-do": "מה תרצה לעשות?",
+ "admin-panel": "מסך ניהול המערכת",
+ "settings": "הגדרות",
+ "people": "אנשים",
+ "registration": "הרשמה",
+ "disable-self-registration": "בטל הרשמה עצמית",
+ "invite": "הזמן",
+ "invite-people": "הזמן אנשים",
+ "to-boards": "ללוח(ות)",
+ "email-addresses": "כתובת דוא\"ל",
+ "smtp-host-description": "כתובת שרת ה-SMTP שמטפל במיילים שלך",
+ "smtp-port-description": "מספר הפורט בו שרת ה- SMTP שלך משתמש",
+ "smtp-host": "כתובת ה-SMTP",
+ "smtp-port": "פורט ה-SMTP",
+ "smtp-username": "שם משתמש",
+ "smtp-password": "סיסמא",
+ "send-from": "מ",
+ "invitation-code": "קוד הזמנה",
+ "email-invite-register-subject": "__inviter__ שלח לך הזמנה",
+ "email-invite-register-text": "__user__ יקר,\n\n__inviter__ מזמין אותך לשתף פעולה ב- Wekan.\n\nאנא לחץ על הקישור:\n__url__\n\nקוד ההזמנה שלך הוא: __icode__\n\nתודה.",
+ "error-invitation-code-not-exist": "קוד ההזמנה אינו תקין"
} \ No newline at end of file
diff --git a/i18n/it.i18n.json b/i18n/it.i18n.json
index 07026fd4..8845448b 100755..100644
--- a/i18n/it.i18n.json
+++ b/i18n/it.i18n.json
@@ -1,25 +1,48 @@
{
- "accept": "Accept",
+ "accept": "Accetta",
+ "act-activity-notify": "[Wekan] Notifiche attività",
+ "act-addAttachment": "ha allegato __attachment__ a __card__",
+ "act-addComment": "ha commentato su __card__: __comment__",
+ "act-createBoard": "ha creato __board__",
+ "act-createCard": "ha aggiunto __card__ a __list__",
+ "act-createList": "ha aggiunto __list__ a __board__",
+ "act-addBoardMember": "ha aggiunto __member__ a __board__",
+ "act-archivedBoard": "ha archiviato __board__",
+ "act-archivedCard": "ha archiviato __card__",
+ "act-archivedList": "ha archiviato __list__",
+ "act-importBoard": "ha importato __board__",
+ "act-importCard": "ha importato __card__",
+ "act-importList": "ha importato __list__",
+ "act-joinMember": "ha aggiunto __member__ a __card__",
+ "act-moveCard": "ha spostato __card__ da __oldList__ a __list__",
+ "act-removeBoardMember": "ha rimosso __member__ da __board__",
+ "act-restoredCard": "ha ripristinato __card__ su __board__",
+ "act-unjoinMember": "ha rimosso __member__ da __card__",
+ "act-withBoardTitle": "[Wekan] __board__",
+ "act-withCardTitle": "[__board__] __card__",
"actions": "Azioni",
"activities": "Attività",
"activity": "Attività",
- "activity-added": "aggiunto %s a %s",
+ "activity-added": "ha aggiunto %s a %s",
"activity-archived": "archiviato %s",
"activity-attached": "allegato %s a %s",
"activity-created": "creato %s",
"activity-excluded": "escluso %s da %s",
- "activity-imported": "imported %s into %s from %s",
- "activity-imported-board": "imported %s from %s",
- "activity-joined": "è stato unito %s",
+ "activity-imported": "importato %s in %s da %s",
+ "activity-imported-board": "importato %s da %s",
+ "activity-joined": "si è unito a %s",
"activity-moved": "spostato %s da %s a %s",
"activity-on": "su %s",
"activity-removed": "rimosso %s da %s",
"activity-sent": "inviato %s a %s",
- "activity-unjoined": "unjoined %s",
+ "activity-unjoined": "ha abbandonato %s",
+ "activity-checklist-added": "aggiunta checklist a %s",
"add": "Aggiungere",
"add-attachment": "Aggiungi allegato",
"add-board": "Aggiungi una nuova bachecha",
"add-card": "Aggiungi una scheda",
+ "add-checklist": "Aggiungi una checklist",
+ "add-checklist-item": "Aggiungi un elemento alla checklist",
"add-cover": "Aggiungi copertina",
"add-label": "Aggiungi l'etichetta",
"add-list": "Aggiungi una lista",
@@ -31,21 +54,24 @@
"all-boards": "Tutte le bacheche",
"and-n-other-card": "E __count__ altra scheda",
"and-n-other-card_plural": "E __count__ altre schede",
+ "apply": "Applica",
+ "app-is-offline": "L'applicazione è al momento offline, ricaricando la pagina perderai i dati.",
"archive": "Archivia",
"archive-all": "Archivia tutto",
"archive-board": "Archivia bacheca",
"archive-card": "Archivia scheda",
"archive-list": "Archivia questa lista",
"archive-selection": "Archivia selezione",
- "archiveBoardPopup-title": "Archive Board?",
+ "archiveBoardPopup-title": "Archivia Bacheca?",
"archived-items": "Elementi archiviati",
- "archives": "Archives",
- "assign-member": "Assegna membri",
+ "archives": "Archivi",
+ "assign-member": "Aggiungi membro",
"attached": "allegato",
"attachment": "Allegato",
"attachment-delete-pop": "L'eliminazione di un allegato è permanente. Non è possibile annullare.",
"attachmentDeletePopup-title": "Eliminare l'allegato?",
"attachments": "Allegati",
+ "auto-watch": "Segui automaticamente le bacheche quando le crei",
"avatar-too-big": "L'avatar è troppo grande (max 70Kb)",
"back": "Indietro",
"board-change-color": "Cambia colore",
@@ -56,208 +82,268 @@
"boardChangeColorPopup-title": "Cambia sfondo della bacheca",
"boardChangeTitlePopup-title": "Rinomina bacheca",
"boardChangeVisibilityPopup-title": "Cambia visibilità",
- "boardImportBoardPopup-title": "Import board from Trello",
+ "boardChangeWatchPopup-title": "Cambia faccia",
"boardMenuPopup-title": "Menu bacheca",
"boards": "Bacheche",
- "bucket-example": "Like “Bucket List” for example",
+ "bucket-example": "Per esempio come \"una lista di cose da fare\"",
"cancel": "Cancella",
"card-archived": "Questa scheda è archiviata.",
"card-comments-title": "Questa scheda ha %s commenti.",
"card-delete-notice": "L'eliminazione è permanente. Tutte le azioni associate a questa scheda andranno perse.",
- "card-delete-pop": "All actions will be removed from the activity feed and you won't be able to re-open the card. There is no undo.",
- "card-delete-suggest-archive": "You can archive a card to remove it from the board and preserve the activity.",
- "card-edit-attachments": "Edit attachments",
- "card-edit-labels": "Edit labels",
- "card-edit-members": "Edit members",
- "card-labels-title": "Change the labels for the card.",
- "card-members-title": "Add or remove members of the board from the card.",
- "cardAttachmentsPopup-title": "Attach From",
- "cardDeletePopup-title": "Delete Card?",
- "cardDetailsActionsPopup-title": "Card Actions",
- "cardLabelsPopup-title": "Labels",
- "cardMembersPopup-title": "Membr",
- "cardMorePopup-title": "More",
- "cards": "Cards",
- "change": "Change",
- "change-avatar": "Change Avatar",
- "change-password": "Change Password",
- "change-permissions": "Change permissions",
- "changeAvatarPopup-title": "Change Avatar",
- "changeLanguagePopup-title": "Change Language",
- "changePasswordPopup-title": "Change Password",
- "changePermissionsPopup-title": "Change Permissions",
- "click-to-star": "Click to star this board.",
- "click-to-unstar": "Click to unstar this board.",
- "clipboard": "Clipboard or drag & drop",
- "close": "Close",
- "close-board": "Close Board",
- "close-board-pop": "You will be able to restore the board by clicking the “Archives” button from the home header.",
- "color-black": "black",
- "color-blue": "blue",
- "color-green": "green",
+ "card-delete-pop": "Tutte le azioni saranno rimosse dal flusso attività e non sarai in grado di riaprire la scheda. Non potrai tornare indietro.",
+ "card-delete-suggest-archive": "Puoi archiviare una scheda per rimuoverla dalla bacheca e preservare la sua attività.",
+ "card-due": "Scadenza",
+ "card-due-on": "Scade",
+ "card-edit-attachments": "Modifica allegati",
+ "card-edit-labels": "Modifica etichette",
+ "card-edit-members": "Modifica membri",
+ "card-labels-title": "Cambia le etichette per questa scheda.",
+ "card-members-title": "Aggiungi o rimuovi membri della bacheca da questa scheda",
+ "card-start": "Inizio",
+ "card-start-on": "Inizia",
+ "cardAttachmentsPopup-title": "Allega da",
+ "cardDeletePopup-title": "Elimina scheda?",
+ "cardDetailsActionsPopup-title": "Azioni scheda",
+ "cardLabelsPopup-title": "Etichette",
+ "cardMembersPopup-title": "Membri",
+ "cardMorePopup-title": "Altro",
+ "cards": "Schede",
+ "change": "Cambia",
+ "change-avatar": "Cambia avatar",
+ "change-password": "Cambia password",
+ "change-permissions": "Cambia permessi",
+ "change-settings": "Cambia impostazioni",
+ "changeAvatarPopup-title": "Cambia avatar",
+ "changeLanguagePopup-title": "Cambia lingua",
+ "changePasswordPopup-title": "Cambia password",
+ "changePermissionsPopup-title": "Cambia permessi",
+ "changeSettingsPopup-title": "Cambia impostazioni",
+ "checklists": "Checklist",
+ "click-to-star": "Clicca per stellare questa bacheca",
+ "click-to-unstar": "Clicca per togliere la stella da questa bacheca",
+ "clipboard": "Clipboard o drag & drop",
+ "close": "Chiudi",
+ "close-board": "Chiudi bacheca",
+ "close-board-pop": "Sarai in grado di ripristinare la bacheca cliccando il tasto \"Archivi\" dall'intestazione della pagina principale.",
+ "color-black": "nero",
+ "color-blue": "blu",
+ "color-green": "verde",
"color-lime": "lime",
- "color-orange": "orange",
- "color-pink": "pink",
- "color-purple": "purple",
- "color-red": "red",
- "color-sky": "sky",
- "color-yellow": "yellow",
- "comment": "Comment",
- "comment-placeholder": "Write a comment",
+ "color-orange": "arancione",
+ "color-pink": "rosa",
+ "color-purple": "viola",
+ "color-red": "rosso",
+ "color-sky": "azzurro",
+ "color-yellow": "giallo",
+ "comment": "Commento",
+ "comment-placeholder": "Scrivi un commento",
+ "comment-only": "Limited",
+ "comment-only-desc": "Can comment on cards only.",
"computer": "Computer",
- "create": "Create",
- "createBoardPopup-title": "Create Board",
- "createLabelPopup-title": "Create Label",
- "current": "current",
- "decline": "Decline",
- "default-avatar": "Default avatar",
- "delete": "Delete",
- "deleteLabelPopup-title": "Delete Label?",
- "description": "Description",
- "disambiguateMultiLabelPopup-title": "Disambiguate Label Action",
- "disambiguateMultiMemberPopup-title": "Disambiguate Member Action",
- "discard": "Discard",
- "done": "Done",
+ "create": "Crea",
+ "createBoardPopup-title": "Crea bacheca",
+ "createLabelPopup-title": "Crea etichetta",
+ "current": "corrente",
+ "date": "Data",
+ "decline": "Declina",
+ "default-avatar": "Avatar predefinito",
+ "delete": "Elimina",
+ "deleteLabelPopup-title": "Eliminare etichetta?",
+ "description": "Descrizione",
+ "disambiguateMultiLabelPopup-title": "Disambiguare l'azione Etichetta",
+ "disambiguateMultiMemberPopup-title": "Disambiguare l'azione Membro",
+ "discard": "Scarta",
+ "done": "Fatto",
"download": "Download",
- "edit": "Edit",
- "edit-avatar": "Change Avatar",
- "edit-profile": "Edit Profile",
- "editLabelPopup-title": "Change Label",
- "editProfilePopup-title": "Edit Profile",
+ "edit": "Modifica",
+ "edit-avatar": "Cambia avatar",
+ "edit-profile": "Modifica profilo",
+ "editCardStartDatePopup-title": "Cambia data di inizio",
+ "editCardDueDatePopup-title": "Cambia data di scadenza",
+ "editLabelPopup-title": "Cambia etichetta",
+ "editNotificationPopup-title": "Modifica notifiche",
+ "editProfilePopup-title": "Modifica profilo",
"email": "Email",
- "email-enrollAccount-subject": "An account created for you on __siteName__",
- "email-enrollAccount-text": "Hello __user__,\n\nTo start using the service, simply click the link below.\n\n__url__\n\nThanks.",
- "email-fail": "Sending email failed",
- "email-invalid": "Invalid email",
- "email-invite": "Invite via Email",
- "email-invite-subject": "__inviter__ sent you an invitation",
- "email-invite-text": "Dear __user__,\n\n__inviter__ invites you to join board \"__board__\" for collaborations.\n\nPlease follow the link below:\n\n__url__\n\nThanks.",
- "email-resetPassword-subject": "Reset your password on __siteName__",
- "email-resetPassword-text": "Hello __user__,\n\nTo reset your password, simply click the link below.\n\n__url__\n\nThanks.",
- "email-sent": "Email sent",
- "email-verifyEmail-subject": "Verify your email address on __siteName__",
- "email-verifyEmail-text": "Hello __user__,\n\nTo verify your account email, simply click the link below.\n\n__url__\n\nThanks.",
- "error-board-doesNotExist": "This board does not exist",
- "error-board-notAdmin": "You need to be admin of this board to do that",
- "error-board-notAMember": "You need to be a member of this board to do that",
- "error-json-malformed": "Your text is not valid JSON",
- "error-json-schema": "Your JSON data does not include the proper information in the correct format",
- "error-list-doesNotExist": "This list does not exist",
- "error-user-doesNotExist": "This user does not exist",
- "error-user-notAllowSelf": "This action on self is not allowed",
- "error-user-notCreated": "This user is not created",
- "export-board": "Export board",
- "filter": "Filter",
- "filter-cards": "Filter Cards",
- "filter-clear": "Clear filter",
- "filter-on": "Filter is on",
- "filter-on-desc": "You are filtering cards on this board. Click here to edit filter.",
- "filter-to-selection": "Filter to selection",
- "fullname": "Full Name",
- "header-logo-title": "Go back to your boards page.",
+ "email-enrollAccount-subject": "Creato un account per te su __siteName__",
+ "email-enrollAccount-text": "Ciao __user__,\n\nPer iniziare ad usare il servizio, clicca sul link seguente:\n\n__url__\n\nGrazie.",
+ "email-fail": "Invio email fallito",
+ "email-invalid": "Email non valida",
+ "email-invite": "Invita via email",
+ "email-invite-subject": "__inviter__ ti ha inviato un invito",
+ "email-invite-text": "Caro __user__,\n\n__inviter__ ti ha invitato ad unirti alla bacheca \"__board__\" per le collaborazioni.\n\nPer favore clicca sul link seguente:\n\n__url__\n\nGrazie.",
+ "email-resetPassword-subject": "Ripristina la tua password su on __siteName__",
+ "email-resetPassword-text": "Ciao __user__,\n\nPer ripristinare la tua password, clicca sul link seguente:\n\n__url__\n\nGrazie.",
+ "email-sent": "Email inviata",
+ "email-verifyEmail-subject": "Verifica il tuo indirizzo email su on __siteName__",
+ "email-verifyEmail-text": "Ciao __user__,\n\nPer verificare il tuo account email, clicca sul link seguente:\n\n__url__\n\nGrazie.",
+ "error-board-doesNotExist": "Questa bacheca non esiste",
+ "error-board-notAdmin": "Devi essere admin di questa bacheca per poterlo fare",
+ "error-board-notAMember": "Devi essere un membro di questa bacheca per poterlo fare",
+ "error-json-malformed": "Il tuo testo non è un JSON valido",
+ "error-json-schema": "Il tuo file JSON non contiene le giuste informazioni nel formato corretto",
+ "error-list-doesNotExist": "Questa lista non esiste",
+ "error-user-doesNotExist": "Questo utente non esiste",
+ "error-user-notAllowSelf": "Questa azione su se stessa non è permessa",
+ "error-user-notCreated": "L'utente non è stato creato",
+ "error-username-taken": "Questo username è già utilizzato",
+ "export-board": "Esporta bacheca",
+ "filter": "Filtra",
+ "filter-cards": "Filtra schede",
+ "filter-clear": "Pulisci filtri",
+ "filter-no-label": "Nessuna etichetta",
+ "filter-no-member": "Nessun membro",
+ "filter-on": "Il filtro è attivo",
+ "filter-on-desc": "Stai filtrando le schede su questa bacheca. Clicca qui per modificare il filtro,",
+ "filter-to-selection": "Seleziona",
+ "fullname": "Nome completo",
+ "header-logo-title": "Torna alla tua bacheca.",
+ "hide-system-messages": "Nascondi i messaggi di sistema",
+ "headerBarCreateBoardPopup-title": "Crea bacheca",
"home": "Home",
- "import": "Import",
- "import-board": "import from Trello",
- "import-board-trello-instruction": "In your Trello board, go to 'Menu', then 'More', 'Print and Export', 'Export JSON', and copy the resulting text",
- "import-card": "Import a Trello card",
- "import-card-trello-instruction": "Go to a Trello card, select 'Share and more...' then 'Export JSON' and copy the resulting text",
- "import-json-placeholder": "Paste your valid JSON data here",
- "import-members-map": "Your imported board has some members. Please map the members you want to import to Wekan users",
- "import-show-user-mapping": "Review members mapping",
- "import-user-select": "Pick the Wekan user you want to use as this member",
- "info": "Infos",
- "initials": "Initials",
- "joined": "joined",
- "just-invited": "You are just invited to this board",
- "keyboard-shortcuts": "Keyboard shortcuts",
- "label-create": "Create a new label",
- "label-default": "%s label (default)",
- "label-delete-pop": "There is no undo. This will remove this label from all cards and destroy its history.",
- "labels": "Labels",
- "language": "Language",
- "last-admin-desc": "You can’t change roles because there must be at least one admin.",
- "leave-board": "Leave Board",
- "link-card": "Link to this card",
- "list-archive-cards": "Archive all cards in this list",
- "list-archive-cards-pop": "This will remove all the cards in this list from the board. To view archived cards and bring them back to the board, click “Menu” > “Archived Items”.",
- "list-move-cards": "Move all cards in this list",
- "list-select-cards": "Select all cards in this list",
- "listActionPopup-title": "List Actions",
- "listImportCardPopup-title": "Import a Trello card",
- "lists": "Lists",
+ "import": "Importa",
+ "import-board": "importa da Trello",
+ "import-board-title": "Importa una bacheca da Trello",
+ "import-board-trello-instruction": "Nella tua bacheca Trello vai a 'Menu', poi 'Altro', 'Stampa ed esporta', 'Esporta JSON', e copia il testo che compare.",
+ "import-json-placeholder": "Incolla un JSON valido qui",
+ "import-map-members": "Mappatura dei membri",
+ "import-members-map": "La bacheca che hai importato ha alcuni membri. Per favore scegli i membri che vuoi vengano importati negli utenti di Wekan",
+ "import-show-user-mapping": "Rivedi la mappatura dei membri",
+ "import-user-select": "Scegli l'utente Wekan che vuoi utilizzare come questo membro",
+ "importMapMembersAddPopup-title": "Seleziona i membri di Wekan",
+ "info": "Info",
+ "initials": "Iniziali",
+ "invalid-date": "Data non valida",
+ "joined": "si è unito a",
+ "just-invited": "Sei stato appena invitato a questa bacheca",
+ "keyboard-shortcuts": "Scorciatoie da tastiera",
+ "label-create": "Crea una nuova etichetta",
+ "label-default": "%s etichetta (default)",
+ "label-delete-pop": "Non potrai tornare indietro. Procedendo, rimuoverai questa etichetta da tutte le schede e distruggerai la sua cronologia.",
+ "labels": "Etichette",
+ "language": "Lingua",
+ "last-admin-desc": "Non puoi cambiare i ruoli perché deve esserci almeno un admin.",
+ "leave-board": "Abbandona bacheca",
+ "link-card": "Link a questa scheda",
+ "list-archive-cards": "Archivia tutte le schede in questa lista",
+ "list-archive-cards-pop": "Questo rimuoverà dalla bacheca tutte le schede in questa lista. Per vedere le schede archiviate e portarle indietro alla bacheca, clicca “Menu” > “Elementi archiviati”",
+ "list-move-cards": "Sposta tutte le schede in questa lista",
+ "list-select-cards": "Selezione tutte le schede in questa lista",
+ "listActionPopup-title": "Azioni disponibili",
+ "listImportCardPopup-title": "Importa una scheda di Trello",
+ "lists": "Liste",
"log-out": "Log Out",
+ "log-in": "Log In",
"loginPopup-title": "Log In",
- "mapMembersAddPopup-title": "Select Wekan member",
- "mapMembersPopup-title": "Map members",
- "memberMenuPopup-title": "Member Settings",
- "members": "Membr",
+ "memberMenuPopup-title": "Impostazioni membri",
+ "members": "Membri",
"menu": "Menu",
- "move-selection": "Move selection",
- "moveCardPopup-title": "Move Card",
- "moveSelectionPopup-title": "Move selection",
- "multi-selection": "Multi-Selection",
- "multi-selection-on": "Multi-Selection is on",
- "my-boards": "My Boards",
- "name": "Name",
- "no-archived-cards": "No archived cards.",
- "no-archived-lists": "No archived lists.",
- "no-results": "No results",
- "normal": "Normal",
- "normal-desc": "Can view and edit cards. Can't change settings.",
- "not-accepted-yet": "Invitation not accepted yet",
- "optional": "optional",
- "or": "or",
- "page-maybe-private": "This page may be private. You may be able to view it by <a href='%s'>logging in</a>.",
- "page-not-found": "Page not found.",
+ "move-selection": "Sposta selezione",
+ "moveCardPopup-title": "Sposta scheda",
+ "moveCardToBottom-title": "Sposta in fondo",
+ "moveCardToTop-title": "Sposta in alto",
+ "moveSelectionPopup-title": "Sposta selezione",
+ "multi-selection": "Multi-Selezione",
+ "multi-selection-on": "Multi-Selezione attiva",
+ "muted": "Silenziato",
+ "muted-info": "Non sarai mai notificato delle modifiche in questa bacheca",
+ "my-boards": "Le mie bacheche",
+ "name": "Nome",
+ "no-archived-cards": "Nessuna scheda archiviata.",
+ "no-archived-lists": "Nessuna lista archiviata.",
+ "no-results": "Nessun risultato",
+ "normal": "Normale",
+ "normal-desc": "Può visionare e modificare le schede. Non può cambiare le impostazioni.",
+ "not-accepted-yet": "Invitato non ancora accettato",
+ "notify-participate": "Ricevi aggiornamenti per qualsiasi scheda a cui partecipi come creatore o membro",
+ "notify-watch": "Ricevi aggiornamenti per tutte le bacheche, liste o schede che stai seguendo",
+ "optional": "opzionale",
+ "or": "o",
+ "page-maybe-private": "Questa pagina potrebbe essere privata. Potresti essere in grado di vederla <a href='%s'>facendo il log-in</a>.",
+ "page-not-found": "Pagina non trovata.",
"password": "Password",
- "paste-or-dragdrop": "to paste, or drag & drop image file to it (image only)",
- "preview": "Preview",
- "previewAttachedImagePopup-title": "Preview",
- "previewClipboardImagePopup-title": "Preview",
- "private": "Private",
- "private-desc": "This board is private. Only people added to the board can view and edit it.",
- "profile": "Profile",
- "public": "Public",
- "public-desc": "This board is public. It's visible to anyone with the link and will show up in search engines like Google. Only people added to the board can edit.",
- "quick-access-description": "Star a board to add a shortcut in this bar.",
- "remove-cover": "Remove Cover",
- "remove-from-board": "Remove from Board",
- "remove-label": "Remove the label",
- "remove-member": "Remove Member",
- "remove-member-from-card": "Remove from Card",
- "remove-member-pop": "Remove __name__ (__username__) from __boardTitle__? The member will be removed from all cards on this board. They will receive a notification.",
- "removeMemberPopup-title": "Remove Member?",
- "rename": "Rename",
+ "paste-or-dragdrop": "per incollare, oppure trascina & rilascia il file immagine (solo immagini)",
+ "participating": "Partecipando",
+ "preview": "Anteprima",
+ "previewAttachedImagePopup-title": "Anteprima",
+ "previewClipboardImagePopup-title": "Anteprima",
+ "private": "Privata",
+ "private-desc": "Questa bacheca è privata. Solo le persone aggiunte alla bacheca possono vederla e modificarla.",
+ "profile": "Profilo",
+ "public": "Pubblica",
+ "public-desc": "Questa bacheca è pubblica. È visibile a chiunque abbia il link e sarà mostrata dai motori di ricerca come Google. Solo le persone aggiunte alla bacheca possono modificarla.",
+ "quick-access-description": "Stella una bacheca per aggiungere una scorciatoia in questa barra.",
+ "remove-cover": "Rimuovi cover",
+ "remove-from-board": "Rimuovi dalla bacheca",
+ "remove-label": "Rimuovi l'etichetta",
+ "remove-list": "Rimuovi la lista",
+ "remove-member": "Rimuovi utente",
+ "remove-member-from-card": "Rimuovi dalla scheda",
+ "remove-member-pop": "Rimuovere __name__ (__username__) da __boardTitle__? L'utente sarà rimosso da tutte le schede in questa bacheca. Riceveranno una notifica.",
+ "removeMemberPopup-title": "Rimuovere membro?",
+ "rename": "Rinomina",
"rename-board": "Rinomina bacheca",
- "restore": "Restore",
- "save": "Save",
- "search": "Search",
- "select-color": "Select a color",
- "shortcut-assign-self": "Assign yourself to current card",
- "shortcut-autocomplete-emoji": "Autocomplete emoji",
- "shortcut-autocomplete-members": "Autocomplete members",
- "shortcut-clear-filters": "Clear all filters",
- "shortcut-close-dialog": "Close Dialog",
- "shortcut-filter-my-cards": "Filter my cards",
- "shortcut-show-shortcuts": "Bring up this shortcuts list",
- "shortcut-toggle-filterbar": "Toggle Filter Sidebar",
- "shortcut-toggle-sidebar": "Toggle Board Sidebar",
- "signupPopup-title": "Create an Account",
- "star-board-title": "Click to star this board. It will show up at top of your boards list.",
- "starred-boards": "Starred Boards",
- "starred-boards-description": "Starred boards show up at the top of your boards list.",
- "subscribe": "Subscribe",
+ "restore": "Ripristina",
+ "save": "Salva",
+ "search": "Cerca",
+ "select-color": "Seleziona un colore",
+ "shortcut-assign-self": "Aggiungi te stesso alla scheda corrente",
+ "shortcut-autocomplete-emoji": "Autocompletamento emoji",
+ "shortcut-autocomplete-members": "Autocompletamento membri",
+ "shortcut-clear-filters": "Pulisci tutti i filtri",
+ "shortcut-close-dialog": "Chiudi finestra di dialogo",
+ "shortcut-filter-my-cards": "Filtra le mie schede",
+ "shortcut-show-shortcuts": "Porta in alto questa lista di scorciatoie",
+ "shortcut-toggle-filterbar": "Attiva il filtro nella barra laterale",
+ "shortcut-toggle-sidebar": "Attiva la bacheca nella barra laterale",
+ "show-cards-minimum-count": "Mostra il contatore delle schede se la lista ne contiene più di",
+ "sidebar-open": "Apri Sidebar",
+ "sidebar-close": "Chiudi Sidebar",
+ "signupPopup-title": "Crea un account",
+ "star-board-title": "Clicca per stellare questa bacheca. Sarà mostrata all'inizio della tua lista bacheche.",
+ "starred-boards": "Bacheche stellate",
+ "starred-boards-description": "Le bacheche stellate vengono mostrato all'inizio della tua lista bacheche.",
+ "subscribe": "Sottoscrivi",
"team": "Team",
- "this-board": "this board",
- "this-card": "this card",
- "title": "Title",
- "unassign-member": "Unassign member",
- "unsaved-description": "You have an unsaved description.",
+ "this-board": "questa bacheca",
+ "this-card": "questa scheda",
+ "time": "Ora",
+ "title": "Titolo",
+ "tracking": "Monitoraggio",
+ "tracking-info": "Sarai notificato per tutte le modifiche alle schede delle quali sei creatore o membro.",
+ "unassign-member": "Rimuovi membro",
+ "unsaved-description": "Hai una descrizione non salvata",
+ "unwatch": "Non seguire",
"upload": "Upload",
- "upload-avatar": "Upload an avatar",
- "uploaded-avatar": "Uploaded an avatar",
+ "upload-avatar": "Carica un avatar",
+ "uploaded-avatar": "Avatar caricato",
"username": "Username",
- "view-it": "View it",
- "warn-list-archived": "warning: this card is in an archived list",
- "what-to-do": "What do you want to do?"
-}
+ "view-it": "Vedi",
+ "warn-list-archived": "attenzione: questa scheda è in una lista archiviata",
+ "watch": "Segui",
+ "watching": "Stai seguendo",
+ "watching-info": "Sarai notificato per tutte le modifiche in questa bacheca",
+ "welcome-board": "Bacheca di benvenuto",
+ "welcome-list1": "Basi",
+ "welcome-list2": "Avanzate",
+ "what-to-do": "Cosa vuoi fare?",
+ "admin-panel": "Pannello dell'Amministratore",
+ "settings": "Impostazioni",
+ "people": "Persone",
+ "registration": "Registrazione",
+ "disable-self-registration": "Disabilita Auto-registrazione",
+ "invite": "Invita",
+ "invite-people": "Invita persone",
+ "to-boards": "torna alle bacheche(a)",
+ "email-addresses": "Indirizzi email",
+ "smtp-host-description": "L'indirizzo del server SMTP che gestisce le tue email.",
+ "smtp-port-description": "La porta che il tuo server SMTP utilizza per le email in uscita.",
+ "smtp-host": "SMTP Host",
+ "smtp-port": "Porta SMTP",
+ "smtp-username": "Username",
+ "smtp-password": "Password",
+ "send-from": "Da",
+ "invitation-code": "Codice d'invito",
+ "email-invite-register-subject": "__inviter__ ti ha inviato un invito",
+ "email-invite-register-text": "Gentile __user__,\n\n__inviter__ ti ha invitato su Wekan per collaborare.\n\nPer favore segui il link qui sotto:\n__url__\n\nIl tuo codice d'invito è: __icode__\n\nGrazie.",
+ "error-invitation-code-not-exist": "Il codice d'invito non esiste"
+} \ No newline at end of file
diff --git a/i18n/ja.i18n.json b/i18n/ja.i18n.json
index 6cde68c6..c77aa5d0 100755..100644
--- a/i18n/ja.i18n.json
+++ b/i18n/ja.i18n.json
@@ -1,7 +1,27 @@
{
- "accept": "Accept",
+ "accept": "受け入れ",
+ "act-activity-notify": "[Wekan] Activity Notification",
+ "act-addAttachment": "attached __attachment__ to __card__",
+ "act-addComment": "commented on __card__: __comment__",
+ "act-createBoard": "created __board__",
+ "act-createCard": "added __card__ to __list__",
+ "act-createList": "added __list__ to __board__",
+ "act-addBoardMember": "added __member__ to __board__",
+ "act-archivedBoard": "archived __board__",
+ "act-archivedCard": "archived __card__",
+ "act-archivedList": "archived __list__",
+ "act-importBoard": "imported __board__",
+ "act-importCard": "imported __card__",
+ "act-importList": "imported __list__",
+ "act-joinMember": "added __member__ to __card__",
+ "act-moveCard": "moved __card__ from __oldList__ to __list__",
+ "act-removeBoardMember": "removed __member__ from __board__",
+ "act-restoredCard": "restored __card__ to __board__",
+ "act-unjoinMember": "removed __member__ from __card__",
+ "act-withBoardTitle": "[Wekan] __board__",
+ "act-withCardTitle": "[__board__] __card__",
"actions": "操作",
- "activities": "Activities",
+ "activities": "アクティビティ",
"activity": "アクティビティ",
"activity-added": "%s を %s に追加しました",
"activity-archived": "%s をアーカイブしました",
@@ -15,49 +35,55 @@
"activity-on": "%s",
"activity-removed": "%s を %s から削除しました",
"activity-sent": "%s を %s に送りました",
- "activity-unjoined": "unjoined %s",
+ "activity-unjoined": "%s への参加を止めました",
+ "activity-checklist-added": "%s にチェックリストを追加しました",
"add": "追加",
- "add-attachment": "Add an attachment",
+ "add-attachment": "添付ファイルの追加",
"add-board": "ボード追加",
- "add-card": "Add a card",
+ "add-card": "カードの追加",
+ "add-checklist": "チェックリストの追加",
+ "add-checklist-item": "チェックリストに項目を追加",
"add-cover": "カバーの追加",
- "add-label": "Add the label",
- "add-list": "Add a list",
- "add-members": "Add Members",
+ "add-label": "ラベルの追加",
+ "add-list": "リストの追加",
+ "add-members": "メンバーの追加",
"added": "追加しました",
"addMemberPopup-title": "メンバー",
"admin": "管理",
"admin-desc": "カードの閲覧と編集、メンバーの削除、ボードの設定変更が可能",
- "all-boards": "All boards",
+ "all-boards": "全てのボード",
"and-n-other-card": "And __count__ other card",
"and-n-other-card_plural": "And __count__ other cards",
+ "apply": "適用",
+ "app-is-offline": "現在オフラインです。ページを更新すると保存していないデータは失われます。",
"archive": "アーカイブ",
"archive-all": "すべてをアーカイブ",
- "archive-board": "Archive Board",
- "archive-card": "Archive Card",
+ "archive-board": "ボードをアーカイブ",
+ "archive-card": "カードをアーカイブ",
"archive-list": "このリストをアーカイブ",
- "archive-selection": "Archive selection",
- "archiveBoardPopup-title": "Archive Board?",
+ "archive-selection": "選択したものをアーカイブ",
+ "archiveBoardPopup-title": "ボードをアーカイブしますか?",
"archived-items": "アーカイブされたアイテム",
- "archives": "Archives",
- "assign-member": "Assign member",
+ "archives": "アーカイブ",
+ "assign-member": "メンバーの割当",
"attached": "添付されました",
"attachment": "添付ファイル",
"attachment-delete-pop": "添付ファイルの削除をすると取り消しできません。",
"attachmentDeletePopup-title": "添付ファイルを削除しますか?",
"attachments": "添付ファイル",
- "avatar-too-big": "The avatar is too large (70Kb max)",
+ "auto-watch": "作成したボードは自動的に監視する",
+ "avatar-too-big": "アバターが大きすぎます(最大70KB)",
"back": "戻る",
- "board-change-color": "Change color",
+ "board-change-color": "色の変更",
"board-nb-stars": "%s stars",
"board-not-found": "ボードが見つかりません",
"board-private-info": "This board will be <strong>private</strong>.",
"board-public-info": "ボードは公開されます。",
- "boardChangeColorPopup-title": "Change Board Background",
+ "boardChangeColorPopup-title": "ボードの背景を変更",
"boardChangeTitlePopup-title": "ボード名の変更",
"boardChangeVisibilityPopup-title": "公開範囲の変更",
- "boardImportBoardPopup-title": "Import board from Trello",
- "boardMenuPopup-title": "Board Menu",
+ "boardChangeWatchPopup-title": "Change Watch",
+ "boardMenuPopup-title": "ボードメニュー",
"boards": "ボード",
"bucket-example": "Like “Bucket List” for example",
"cancel": "キャンセル",
@@ -66,70 +92,83 @@
"card-delete-notice": "削除は取り消しできません。このカードに関係するすべてのアクションがなくなります。",
"card-delete-pop": "All actions will be removed from the activity feed and you won't be able to re-open the card. There is no undo.",
"card-delete-suggest-archive": "You can archive a card to remove it from the board and preserve the activity.",
- "card-edit-attachments": "Edit attachments",
- "card-edit-labels": "Edit labels",
- "card-edit-members": "Edit members",
+ "card-due": "期限",
+ "card-due-on": "Due on",
+ "card-edit-attachments": "添付ファイルの編集",
+ "card-edit-labels": "ラベルの編集",
+ "card-edit-members": "メンバーの編集",
"card-labels-title": "カードのラベルを変更する",
"card-members-title": "カードからボードメンバーを追加・削除する",
+ "card-start": "開始",
+ "card-start-on": "Starts on",
"cardAttachmentsPopup-title": "Attach From",
"cardDeletePopup-title": "カードを削除しますか?",
- "cardDetailsActionsPopup-title": "Card Actions",
+ "cardDetailsActionsPopup-title": "カード操作",
"cardLabelsPopup-title": "ラベル",
"cardMembersPopup-title": "メンバー",
"cardMorePopup-title": "さらに見る",
- "cards": "Cards",
- "change": "Change",
+ "cards": "カード",
+ "change": "変更",
"change-avatar": "アバターの変更",
"change-password": "パスワードの変更",
- "change-permissions": "Change permissions",
+ "change-permissions": "権限の変更",
+ "change-settings": "設定の変更",
"changeAvatarPopup-title": "アバターの変更",
"changeLanguagePopup-title": "言語の変更",
"changePasswordPopup-title": "パスワードの変更",
"changePermissionsPopup-title": "パーミッションの変更",
+ "changeSettingsPopup-title": "設定の変更",
+ "checklists": "チェックリスト",
"click-to-star": "ボードにスターをつける",
"click-to-unstar": "ボードからスターを外す",
- "clipboard": "Clipboard or drag & drop",
+ "clipboard": "クリップボードもしくはドラッグ&ドロップ",
"close": "閉じる",
- "close-board": "Close Board",
+ "close-board": "ボードを閉じる",
"close-board-pop": "You will be able to restore the board by clicking the “Archives” button from the home header.",
- "color-black": "black",
- "color-blue": "blue",
- "color-green": "green",
- "color-lime": "lime",
- "color-orange": "orange",
- "color-pink": "pink",
- "color-purple": "purple",
- "color-red": "red",
- "color-sky": "sky",
- "color-yellow": "yellow",
+ "color-black": "黒",
+ "color-blue": "青",
+ "color-green": "緑",
+ "color-lime": "ライム",
+ "color-orange": "オレンジ",
+ "color-pink": "ピンク",
+ "color-purple": "紫",
+ "color-red": "赤",
+ "color-sky": "空",
+ "color-yellow": "黄",
"comment": "コメント",
- "comment-placeholder": "Write a comment",
+ "comment-placeholder": "コメントを書く",
+ "comment-only": "Limited",
+ "comment-only-desc": "Can comment on cards only.",
"computer": "コンピューター",
"create": "作成",
"createBoardPopup-title": "ボードの作成",
"createLabelPopup-title": "ラベルの作成",
- "current": "current",
- "decline": "Decline",
- "default-avatar": "Default avatar",
+ "current": "現在",
+ "date": "日付",
+ "decline": "拒否",
+ "default-avatar": "デフォルトのアバター",
"delete": "削除",
"deleteLabelPopup-title": "ラベルを削除しますか?",
"description": "詳細",
"disambiguateMultiLabelPopup-title": "Disambiguate Label Action",
"disambiguateMultiMemberPopup-title": "Disambiguate Member Action",
- "discard": "Discard",
- "done": "Done",
+ "discard": "捨てる",
+ "done": "完了",
"download": "ダウンロード",
"edit": "編集",
"edit-avatar": "アバターの変更",
- "edit-profile": "Edit Profile",
+ "edit-profile": "プロフィールの編集",
+ "editCardStartDatePopup-title": "開始日の変更",
+ "editCardDueDatePopup-title": "期限の変更",
"editLabelPopup-title": "ラベルの変更",
- "editProfilePopup-title": "Edit Profile",
+ "editNotificationPopup-title": "通知の変更",
+ "editProfilePopup-title": "プロフィールの編集",
"email": "メールアドレス",
"email-enrollAccount-subject": "An account created for you on __siteName__",
"email-enrollAccount-text": "Hello __user__,\n\nTo start using the service, simply click the link below.\n\n__url__\n\nThanks.",
- "email-fail": "Sending email failed",
- "email-invalid": "Invalid email",
- "email-invite": "Invite via Email",
+ "email-fail": "メールの送信に失敗しました",
+ "email-invalid": "無効なメールアドレス",
+ "email-invite": "メールで招待",
"email-invite-subject": "__inviter__ sent you an invitation",
"email-invite-text": "Dear __user__,\n\n__inviter__ invites you to join board \"__board__\" for collaborations.\n\nPlease follow the link below:\n\n__url__\n\nThanks.",
"email-resetPassword-subject": "Reset your password on __siteName__",
@@ -137,83 +176,96 @@
"email-sent": "Email sent",
"email-verifyEmail-subject": "Verify your email address on __siteName__",
"email-verifyEmail-text": "Hello __user__,\n\nTo verify your account email, simply click the link below.\n\n__url__\n\nThanks.",
- "error-board-doesNotExist": "This board does not exist",
+ "error-board-doesNotExist": "ボードがありません",
"error-board-notAdmin": "You need to be admin of this board to do that",
"error-board-notAMember": "You need to be a member of this board to do that",
"error-json-malformed": "Your text is not valid JSON",
"error-json-schema": "Your JSON data does not include the proper information in the correct format",
"error-list-doesNotExist": "This list does not exist",
- "error-user-doesNotExist": "This user does not exist",
- "error-user-notAllowSelf": "This action on self is not allowed",
- "error-user-notCreated": "This user is not created",
- "export-board": "Export board",
- "filter": "Filter",
+ "error-user-doesNotExist": "ユーザーが存在しません",
+ "error-user-notAllowSelf": "この操作は許可されていません",
+ "error-user-notCreated": "ユーザーが作成されていません",
+ "error-username-taken": "このユーザ名は既に使用されています",
+ "export-board": "ボードのエクスポート",
+ "filter": "フィルター",
"filter-cards": "カードをフィルターする",
- "filter-clear": "Clear filter",
- "filter-on": "Filter is on",
+ "filter-clear": "フィルターの解除",
+ "filter-no-label": "ラベルなし",
+ "filter-no-member": "メンバーなし",
+ "filter-on": "フィルター有効",
"filter-on-desc": "このボードのカードをフィルターしています。フィルターを編集するにはこちらをクリックしてください。",
"filter-to-selection": "Filter to selection",
"fullname": "フルネーム",
"header-logo-title": "自分のボードページに戻る。",
+ "hide-system-messages": "システムメッセージを隠す",
+ "headerBarCreateBoardPopup-title": "ボードの作成",
"home": "ホーム",
- "import": "Import",
- "import-board": "import from Trello",
+ "import": "インポート",
+ "import-board": "Trelloからインポート",
+ "import-board-title": "Trelloからボードをインポート",
"import-board-trello-instruction": "In your Trello board, go to 'Menu', then 'More', 'Print and Export', 'Export JSON', and copy the resulting text",
- "import-card": "Import a Trello card",
- "import-card-trello-instruction": "Go to a Trello card, select 'Share and more...' then 'Export JSON' and copy the resulting text",
"import-json-placeholder": "Paste your valid JSON data here",
+ "import-map-members": "Map members",
"import-members-map": "Your imported board has some members. Please map the members you want to import to Wekan users",
"import-show-user-mapping": "Review members mapping",
"import-user-select": "Pick the Wekan user you want to use as this member",
+ "importMapMembersAddPopup-title": "Select Wekan member",
"info": "情報",
"initials": "Initials",
+ "invalid-date": "無効な日付",
"joined": "参加しました",
"just-invited": "You are just invited to this board",
- "keyboard-shortcuts": "Keyboard shortcuts",
+ "keyboard-shortcuts": "キーボード・ショートカット",
"label-create": "ラベル作成",
"label-default": "%s ラベル(デフォルト)",
"label-delete-pop": "この操作は取り消しできません。このラベルはすべてのカードから外され履歴からも見えなくなります。",
"labels": "ラベル",
"language": "言語",
"last-admin-desc": "最低でも1人以上の管理者が必要なためロールを変更できません。",
- "leave-board": "Leave Board",
+ "leave-board": "ボードから退出する",
"link-card": "このカードへのリンク",
- "list-archive-cards": "Archive all cards in this list",
+ "list-archive-cards": "リストの全カードをアーカイブする",
"list-archive-cards-pop": "ボードのこのリスト内のすべてのカードを取り除きます。アーカイブされたカードの確認やそれをボードに戻すには、メニューをクリックし、\"アーカイブされたアイテム\"をクリックしてください。",
- "list-move-cards": "Move all cards in this list",
- "list-select-cards": "Select all cards in this list",
+ "list-move-cards": "リストの全カードを移動する",
+ "list-select-cards": "リストの全カードを選択",
"listActionPopup-title": "操作一覧",
- "listImportCardPopup-title": "Import a Trello card",
- "lists": "Lists",
+ "listImportCardPopup-title": "Trelloのカードをインポート",
+ "lists": "リスト",
"log-out": "ログアウト",
+ "log-in": "ログイン",
"loginPopup-title": "ログイン",
- "mapMembersAddPopup-title": "Select Wekan member",
- "mapMembersPopup-title": "Map members",
- "memberMenuPopup-title": "Member Settings",
+ "memberMenuPopup-title": "メンバー設定",
"members": "メンバー",
"menu": "メニュー",
"move-selection": "Move selection",
- "moveCardPopup-title": "Move Card",
- "moveSelectionPopup-title": "Move selection",
- "multi-selection": "Multi-Selection",
- "multi-selection-on": "Multi-Selection is on",
+ "moveCardPopup-title": "カードの移動",
+ "moveCardToBottom-title": "最下部に移動",
+ "moveCardToTop-title": "先頭に移動",
+ "moveSelectionPopup-title": "選択箇所に移動",
+ "multi-selection": "複数選択",
+ "multi-selection-on": "複数選択有効",
+ "muted": "ミュート",
+ "muted-info": "このボードの変更は通知されません",
"my-boards": "自分のボード",
"name": "名前",
- "no-archived-cards": "No archived cards.",
- "no-archived-lists": "No archived lists.",
+ "no-archived-cards": "アーカイブされたボードはありません",
+ "no-archived-lists": "アーカイブされたリストはありません",
"no-results": "該当するものはありません",
"normal": "通常",
"normal-desc": "カードの閲覧と編集が可能。設定変更不可。",
- "not-accepted-yet": "Invitation not accepted yet",
+ "not-accepted-yet": "招待はアクセプトされていません",
+ "notify-participate": "Receive updates to any cards you participate as creater or member",
+ "notify-watch": "Receive updates to any boards, lists, or cards you’re watching",
"optional": "任意",
"or": "or",
"page-maybe-private": "このページはプライベートです。<a href='%s'>ログイン</a>して見てください。",
"page-not-found": "ページが見つかりません。",
"password": "パスワード",
"paste-or-dragdrop": "to paste, or drag & drop image file to it (image only)",
- "preview": "Preview",
- "previewAttachedImagePopup-title": "Preview",
- "previewClipboardImagePopup-title": "Preview",
+ "participating": "参加",
+ "preview": "プレビュー",
+ "previewAttachedImagePopup-title": "プレビュー",
+ "previewClipboardImagePopup-title": "プレビュー",
"private": "プライベート",
"private-desc": "このボードはプライベートです。ボードメンバーのみが閲覧・編集可能です。",
"profile": "プロフィール",
@@ -221,10 +273,11 @@
"public-desc": "このボードはパブリックです。リンクを知っていれば誰でもアクセス可能でGoogleのような検索エンジンの結果に表示されます。このボードに追加されている人だけがカード追加が可能です。",
"quick-access-description": "Star a board to add a shortcut in this bar.",
"remove-cover": "カバーの削除",
- "remove-from-board": "Remove from Board",
- "remove-label": "Remove the label",
+ "remove-from-board": "ボードから外す",
+ "remove-label": "ラベルを外す",
+ "remove-list": "リストの除去",
"remove-member": "メンバーを外す",
- "remove-member-from-card": "カードから取り除く",
+ "remove-member-from-card": "カードから外す",
"remove-member-pop": "__boardTitle__ から __name__ (__username__) を外しますか?メンバーはこのボードのすべてのカードから外れ、通知を受けます。",
"removeMemberPopup-title": "メンバーを外しますか?",
"rename": "名前変更",
@@ -233,15 +286,18 @@
"save": "保存",
"search": "検索",
"select-color": "色を選択",
- "shortcut-assign-self": "Assign yourself to current card",
+ "shortcut-assign-self": "自分をこのカードに割り当てる",
"shortcut-autocomplete-emoji": "Autocomplete emoji",
"shortcut-autocomplete-members": "Autocomplete members",
- "shortcut-clear-filters": "Clear all filters",
- "shortcut-close-dialog": "Close Dialog",
+ "shortcut-clear-filters": "すべてのフィルターを解除する",
+ "shortcut-close-dialog": "ダイアログを閉じる",
"shortcut-filter-my-cards": "Filter my cards",
"shortcut-show-shortcuts": "Bring up this shortcuts list",
- "shortcut-toggle-filterbar": "Toggle Filter Sidebar",
- "shortcut-toggle-sidebar": "Toggle Board Sidebar",
+ "shortcut-toggle-filterbar": "フィルターサイドバーの切り替え",
+ "shortcut-toggle-sidebar": "ボードサイドバーの切り替え",
+ "show-cards-minimum-count": "Show cards count if list contains more than",
+ "sidebar-open": "Open Sidebar",
+ "sidebar-close": "Close Sidebar",
"signupPopup-title": "アカウント作成",
"star-board-title": "ボードにスターをつけると自分のボード一覧のトップに表示されます。",
"starred-boards": "スターのついたボード",
@@ -250,14 +306,44 @@
"team": "チーム",
"this-board": "このボード",
"this-card": "このカード",
+ "time": "時間",
"title": "タイトル",
+ "tracking": "トラッキング",
+ "tracking-info": "You will be notified of any changes to those cards you are involved as creator or member.",
"unassign-member": "Unassign member",
"unsaved-description": "You have an unsaved description.",
- "upload": "Upload",
- "upload-avatar": "Upload an avatar",
- "uploaded-avatar": "Uploaded an avatar",
+ "unwatch": "アンウォッチ",
+ "upload": "アップロード",
+ "upload-avatar": "アバターのアップロード",
+ "uploaded-avatar": "アップロードされたアバター",
"username": "ユーザー名",
"view-it": "View it",
"warn-list-archived": "warning: this card is in an archived list",
- "what-to-do": "What do you want to do?"
-}
+ "watch": "ウォッチ",
+ "watching": "ウォッチしています",
+ "watching-info": "このボードの変更が通知されます",
+ "welcome-board": "ウェルカムボード",
+ "welcome-list1": "基本",
+ "welcome-list2": "高度",
+ "what-to-do": "何をしたいですか?",
+ "admin-panel": "Admin Panel",
+ "settings": "設定",
+ "people": "People",
+ "registration": "Registration",
+ "disable-self-registration": "Disable Self-Registration",
+ "invite": "Invite",
+ "invite-people": "Invite People",
+ "to-boards": "To board(s)",
+ "email-addresses": "Email Addresses",
+ "smtp-host-description": "The address of the SMTP server that handles your emails.",
+ "smtp-port-description": "The port your SMTP server uses for outgoing emails.",
+ "smtp-host": "SMTP Host",
+ "smtp-port": "SMTP Port",
+ "smtp-username": "ユーザー名",
+ "smtp-password": "パスワード",
+ "send-from": "From",
+ "invitation-code": "Invitation Code",
+ "email-invite-register-subject": "__inviter__ sent you an invitation",
+ "email-invite-register-text": "Dear __user__,\n\n__inviter__ invites you to Wekan for collaborations.\n\nPlease follow the link below:\n__url__\n\nAnd your invitation code is: __icode__\n\nThanks.",
+ "error-invitation-code-not-exist": "Invitation code doesn't exist"
+} \ No newline at end of file
diff --git a/i18n/ko.i18n.json b/i18n/ko.i18n.json
index 823a221d..fa8760e3 100755..100644
--- a/i18n/ko.i18n.json
+++ b/i18n/ko.i18n.json
@@ -1,7 +1,27 @@
{
- "accept": "Accept",
+ "accept": "확인",
+ "act-activity-notify": "[Wekan] 활동 알림",
+ "act-addAttachment": "__attachment__를 __card__에 첨부",
+ "act-addComment": "__card__에 내용 추가 : __comment__",
+ "act-createBoard": "__board__ 생성",
+ "act-createCard": "__list__에 __card__ 추가",
+ "act-createList": "__board__에 __list__ 추가",
+ "act-addBoardMember": "__board__에 __member__ 추가",
+ "act-archivedBoard": "보관 된 __board__",
+ "act-archivedCard": "보관 된 __card__",
+ "act-archivedList": "보관 된 __list__",
+ "act-importBoard": "가져온 __board__",
+ "act-importCard": "가져온 __card__",
+ "act-importList": "가져온 __list__",
+ "act-joinMember": "__card__에 __member__ 추가",
+ "act-moveCard": "__card__을 __oldList__에서 __list__로 이동",
+ "act-removeBoardMember": "__board__에서 __member__를 삭제",
+ "act-restoredCard": "__card__를 __board__에 복원했습니다.",
+ "act-unjoinMember": "__card__에서 __member__를 삭제",
+ "act-withBoardTitle": "[Wekan] __board__",
+ "act-withCardTitle": "[__board__] __card__",
"actions": "동작",
- "activities": "Activities",
+ "activities": "활동 내역",
"activity": "활동 상태",
"activity-added": "%s를 %s에 추가함",
"activity-archived": "%s 저장됨",
@@ -15,249 +35,315 @@
"activity-on": "%s에",
"activity-removed": "%s를 %s에서 삭제함",
"activity-sent": "%s를 %s로 보냄",
- "activity-unjoined": "unjoined %s",
+ "activity-unjoined": "%s에서 멤버 해제",
+ "activity-checklist-added": "%s에 체크리스트를 추가함",
"add": "추가",
- "add-attachment": "Add an attachment",
+ "add-attachment": "첨부 파일 추가",
"add-board": "새로운 보드를 추가",
- "add-card": "Add a card",
+ "add-card": "카드 추가",
+ "add-checklist": "체크리스트 추가",
+ "add-checklist-item": "체크리스트에 항목 추가",
"add-cover": "커버 추가",
- "add-label": "Add the label",
- "add-list": "Add a list",
- "add-members": "Add Members",
+ "add-label": "라벨 추가",
+ "add-list": "목록 추가",
+ "add-members": "멤버 추가",
"added": "추가됨",
"addMemberPopup-title": "멤버",
"admin": "관리자",
"admin-desc": "카드를 보거나 수정하고, 멤버를 삭제하고, 보드에 대한 설정을 수정할 수 있습니다.",
- "all-boards": "All boards",
- "and-n-other-card": "And __count__ other card",
- "and-n-other-card_plural": "And __count__ other cards",
+ "all-boards": "전체 보드",
+ "and-n-other-card": "__count__ 개의 다른 카드",
+ "and-n-other-card_plural": "__count__ 개의 다른 카드들",
+ "apply": "적용",
+ "app-is-offline": "현재 페이지는 오프라인 상태입니다. 저장되지 않은 데이터는 손실됩니다. 새로고침 하세요.",
"archive": "보관",
"archive-all": "모두 보관",
- "archive-board": "Archive Board",
- "archive-card": "Archive Card",
+ "archive-board": "보드 저장소 보관",
+ "archive-card": "카드 저장소 보관",
"archive-list": "이 목록 보관",
- "archive-selection": "Archive selection",
- "archiveBoardPopup-title": "Archive Board?",
+ "archive-selection": "저장소 선택",
+ "archiveBoardPopup-title": "보드를 저장소에 보관하시겠습니까?",
"archived-items": "보관된 아이템",
- "archives": "Archives",
- "assign-member": "Assign member",
+ "archives": "저장소",
+ "assign-member": "멤버 지정",
"attached": "첨부됨",
"attachment": "첨부 파일",
"attachment-delete-pop": "영구 첨부파일을 삭제합니다. 되돌릴 수 없습니다.",
"attachmentDeletePopup-title": "첨부 파일을 삭제합니까?",
"attachments": "첨부 파일",
- "avatar-too-big": "The avatar is too large (70Kb max)",
+ "auto-watch": "보드 생성 시 자동으로 감시합니다.",
+ "avatar-too-big": "아바타 파일이 너무 큽니다. (최대 70Kb)",
"back": "뒤로",
- "board-change-color": "Change color",
- "board-nb-stars": "%s stars",
+ "board-change-color": "보드 색 변경",
+ "board-nb-stars": "%s개의 별",
"board-not-found": "보드를 찾을 수 없습니다",
- "board-private-info": "This board will be <strong>private</strong>.",
+ "board-private-info": "이 보드는 <strong>비공개</strong>입니다.",
"board-public-info": "이 보드는 <strong>공개</strong>로 설정됩니다",
- "boardChangeColorPopup-title": "Change Board Background",
+ "boardChangeColorPopup-title": "보드 배경 변경",
"boardChangeTitlePopup-title": "보드 이름 바꾸기",
"boardChangeVisibilityPopup-title": "표시 여부 변경",
- "boardImportBoardPopup-title": "Import board from Trello",
- "boardMenuPopup-title": "Board Menu",
+ "boardChangeWatchPopup-title": "감시상태 변경",
+ "boardMenuPopup-title": "보드 메뉴",
"boards": "보드",
- "bucket-example": "Like “Bucket List” for example",
+ "bucket-example": "예: “프로젝트 이름“ 입력",
"cancel": "취소",
"card-archived": "이 카드를 보관합니다.",
"card-comments-title": "이 카드에 %s 코멘트가 있습니다.",
"card-delete-notice": "영구 삭제입니다. 이 카드와 관련된 모든 작업들을 잃게됩니다.",
- "card-delete-pop": "All actions will be removed from the activity feed and you won't be able to re-open the card. There is no undo.",
- "card-delete-suggest-archive": "You can archive a card to remove it from the board and preserve the activity.",
- "card-edit-attachments": "Edit attachments",
- "card-edit-labels": "Edit labels",
- "card-edit-members": "Edit members",
+ "card-delete-pop": "모든 작업이 활동 내역에서 제거되며 카드를 다시 열 수 없습니다. 복구가 안되니 주의하시기 바랍니다.",
+ "card-delete-suggest-archive": "카드를 보관하여 보드에서 제거하고 내용을 저장소에 보관 할 수 있습니다.",
+ "card-due": "종료일",
+ "card-due-on": "종료일",
+ "card-edit-attachments": "첨부 파일 수정",
+ "card-edit-labels": "라벨 수정",
+ "card-edit-members": "멤버 수정",
"card-labels-title": "카드의 라벨 변경.",
"card-members-title": "카드에서 보드의 멤버를 추가하거나 삭제합니다.",
- "cardAttachmentsPopup-title": "Attach From",
+ "card-start": "시작일",
+ "card-start-on": "시작일",
+ "cardAttachmentsPopup-title": "첨부 파일",
"cardDeletePopup-title": "카드를 삭제합니까?",
- "cardDetailsActionsPopup-title": "Card Actions",
+ "cardDetailsActionsPopup-title": "카드 액션",
"cardLabelsPopup-title": "라벨",
"cardMembersPopup-title": "멤버",
"cardMorePopup-title": "더보기",
- "cards": "Cards",
- "change": "Change",
+ "cards": "카드",
+ "change": "변경",
"change-avatar": "아바타 변경",
"change-password": "암호 변경",
- "change-permissions": "Change permissions",
+ "change-permissions": "권한 변경",
+ "change-settings": "설정 변경",
"changeAvatarPopup-title": "아바타 변경",
"changeLanguagePopup-title": "언어 변경",
"changePasswordPopup-title": "암호 변경",
"changePermissionsPopup-title": "권한 변경",
- "click-to-star": "보드 별 추가.",
- "click-to-unstar": "보드 별 삭제.",
- "clipboard": "Clipboard or drag & drop",
+ "changeSettingsPopup-title": "설정 변경",
+ "checklists": "체크리스트",
+ "click-to-star": "보드에 별 추가.",
+ "click-to-unstar": "보드에 별 삭제.",
+ "clipboard": "클립보드 또는 드래그 앤 드롭",
"close": "닫기",
- "close-board": "Close Board",
- "close-board-pop": "You will be able to restore the board by clicking the “Archives” button from the home header.",
- "color-black": "black",
- "color-blue": "blue",
- "color-green": "green",
- "color-lime": "lime",
- "color-orange": "orange",
- "color-pink": "pink",
- "color-purple": "purple",
- "color-red": "red",
- "color-sky": "sky",
- "color-yellow": "yellow",
- "comment": "코멘트",
- "comment-placeholder": "Write a comment",
+ "close-board": "보드 닫기",
+ "close-board-pop": "홈 화면에서 \"저장소\" 버튼을 클릭하여 보드를 복원 할 수 있습니다.",
+ "color-black": "블랙",
+ "color-blue": "블루",
+ "color-green": "그린",
+ "color-lime": "라임",
+ "color-orange": "오렌지",
+ "color-pink": "핑크",
+ "color-purple": "퍼플",
+ "color-red": "레드",
+ "color-sky": "스카이",
+ "color-yellow": "옐로우",
+ "comment": "댓글",
+ "comment-placeholder": "댓글 입력",
+ "comment-only": "Limited",
+ "comment-only-desc": "Can comment on cards only.",
"computer": "내 컴퓨터",
"create": "생성",
"createBoardPopup-title": "보드 생성",
"createLabelPopup-title": "라벨 생성",
- "current": "current",
- "decline": "Decline",
- "default-avatar": "Default avatar",
+ "current": "경향",
+ "date": "날짜",
+ "decline": "쇠퇴",
+ "default-avatar": "기본 아바타",
"delete": "삭제",
"deleteLabelPopup-title": "라벨을 삭제합니까?",
"description": "설명",
- "disambiguateMultiLabelPopup-title": "Disambiguate Label Action",
- "disambiguateMultiMemberPopup-title": "Disambiguate Member Action",
- "discard": "Discard",
- "done": "Done",
+ "disambiguateMultiLabelPopup-title": "라벨 액션의 모호성 제거",
+ "disambiguateMultiMemberPopup-title": "멤버 액션의 모호성 제거",
+ "discard": "포기",
+ "done": "완료",
"download": "다운로드",
"edit": "수정",
"edit-avatar": "아바타 변경",
- "edit-profile": "Edit Profile",
+ "edit-profile": "프로필 변경",
+ "editCardStartDatePopup-title": "시작일 변경",
+ "editCardDueDatePopup-title": "종료일 변경",
"editLabelPopup-title": "라벨 변경",
- "editProfilePopup-title": "Edit Profile",
+ "editNotificationPopup-title": "알림 수정",
+ "editProfilePopup-title": "프로필 변경",
"email": "이메일",
- "email-enrollAccount-subject": "An account created for you on __siteName__",
- "email-enrollAccount-text": "Hello __user__,\n\nTo start using the service, simply click the link below.\n\n__url__\n\nThanks.",
- "email-fail": "Sending email failed",
- "email-invalid": "Invalid email",
- "email-invite": "Invite via Email",
- "email-invite-subject": "__inviter__ sent you an invitation",
- "email-invite-text": "Dear __user__,\n\n__inviter__ invites you to join board \"__board__\" for collaborations.\n\nPlease follow the link below:\n\n__url__\n\nThanks.",
- "email-resetPassword-subject": "Reset your password on __siteName__",
- "email-resetPassword-text": "Hello __user__,\n\nTo reset your password, simply click the link below.\n\n__url__\n\nThanks.",
- "email-sent": "Email sent",
- "email-verifyEmail-subject": "Verify your email address on __siteName__",
- "email-verifyEmail-text": "Hello __user__,\n\nTo verify your account email, simply click the link below.\n\n__url__\n\nThanks.",
- "error-board-doesNotExist": "This board does not exist",
- "error-board-notAdmin": "You need to be admin of this board to do that",
- "error-board-notAMember": "You need to be a member of this board to do that",
- "error-json-malformed": "Your text is not valid JSON",
- "error-json-schema": "Your JSON data does not include the proper information in the correct format",
- "error-list-doesNotExist": "This list does not exist",
- "error-user-doesNotExist": "This user does not exist",
- "error-user-notAllowSelf": "This action on self is not allowed",
- "error-user-notCreated": "This user is not created",
- "export-board": "Export board",
- "filter": "Filter",
+ "email-enrollAccount-subject": "__siteName__에 계정 생성이 완료되었습니다.",
+ "email-enrollAccount-text": "안녕하세요. __user__님,\n\n시작하려면 아래링크를 클릭해 주세요.\n\n__url__\n\n감사합니다.",
+ "email-fail": "이메일 전송 실패",
+ "email-invalid": "잘못된 이메일 주소",
+ "email-invite": "이메일로 초대",
+ "email-invite-subject": "__inviter__님이 당신을 초대하였습니다.",
+ "email-invite-text": "__user__님,\n\n__inviter__님은 협업을 위해 \"__board__\"보드에 가입하도록 초대합니다.\n\n아래 링크를 따라주십시오.\n\n__url__\n\n감사합니다.",
+ "email-resetPassword-subject": "패스워드 초기화: __siteName__",
+ "email-resetPassword-text": "안녕하세요 __user__님,\n\n비밀번호를 재설정하려면 아래 링크를 클릭하십시오.\n\n__url__\n\n감사합니다.",
+ "email-sent": "이메일 전송",
+ "email-verifyEmail-subject": "이메일 인증: __siteName__",
+ "email-verifyEmail-text": "안녕하세요. __user__님,\n\n당신의 계정과 이메일을 활성하려면 아래 링크를 클릭하십시오.\n\n__url__\n\n감사합니다.",
+ "error-board-doesNotExist": "보드가 없습니다.",
+ "error-board-notAdmin": "이 작업은 보드의 관리자만 실행할 수 있습니다.",
+ "error-board-notAMember": "이 작업은 보드의 멤버만 실행할 수 있습니다.",
+ "error-json-malformed": "텍스트가 JSON 형식에 유효하지 않습니다.",
+ "error-json-schema": "JSON 데이터에 정보가 올바른 형식으로 포함되어 있지 않습니다.",
+ "error-list-doesNotExist": "목록이 없습니다.",
+ "error-user-doesNotExist": "멤버의 정보가 없습니다.",
+ "error-user-notAllowSelf": "이 작업은 자신에게 할수 없습니다.",
+ "error-user-notCreated": "유저가 생성되지 않았습니다.",
+ "error-username-taken": "중복된 아이디 입니다.",
+ "export-board": "보드 내보내기",
+ "filter": "필터",
"filter-cards": "카드 필터",
- "filter-clear": "Clear filter",
- "filter-on": "Filter is on",
+ "filter-clear": "필터 초기화",
+ "filter-no-label": "라벨 없음",
+ "filter-no-member": "멤버 없음",
+ "filter-on": "필터 사용",
"filter-on-desc": "보드에서 카드를 필터링합니다. 여기를 클릭하여 필터를 수정합니다.",
- "filter-to-selection": "Filter to selection",
- "fullname": "전체 이름",
+ "filter-to-selection": "선택 항목으로 필터링",
+ "fullname": "실명",
"header-logo-title": "보드 페이지로 돌아가기.",
+ "hide-system-messages": "시스템 메시지 숨기기",
+ "headerBarCreateBoardPopup-title": "보드 생성",
"home": "홈",
- "import": "Import",
- "import-board": "import from Trello",
- "import-board-trello-instruction": "In your Trello board, go to 'Menu', then 'More', 'Print and Export', 'Export JSON', and copy the resulting text",
- "import-card": "Import a Trello card",
- "import-card-trello-instruction": "Go to a Trello card, select 'Share and more...' then 'Export JSON' and copy the resulting text",
- "import-json-placeholder": "Paste your valid JSON data here",
- "import-members-map": "Your imported board has some members. Please map the members you want to import to Wekan users",
- "import-show-user-mapping": "Review members mapping",
- "import-user-select": "Pick the Wekan user you want to use as this member",
+ "import": "가져오기",
+ "import-board": "Trello에서 가져오기",
+ "import-board-title": "Trello에서 보드 가져오기",
+ "import-board-trello-instruction": "Trello 게시판에서 'Menu' -> 'More' -> 'Print and Export', 'Export JSON' 선택하여 텍스트 결과값 복사",
+ "import-json-placeholder": "유효한 JSON 데이터를 여기에 붙여 넣으십시오.",
+ "import-map-members": "보드 멤버들",
+ "import-members-map": "가져온 보드에는 멤버가 있습니다. 원하는 멤버를 Wekan 멤버로 매핑하세요.",
+ "import-show-user-mapping": "멤버 매핑 미리보기",
+ "import-user-select": "이 멤버로 사용하려는 Wekan 유저를 선택하십시오.",
+ "importMapMembersAddPopup-title": "Wekan 멤버 선택",
"info": "정보",
- "initials": "Initials",
+ "initials": "이니셜",
+ "invalid-date": "잘못된 날짜",
"joined": "참가함",
- "just-invited": "You are just invited to this board",
- "keyboard-shortcuts": "Keyboard shortcuts",
+ "just-invited": "보드에 방금 초대되었습니다.",
+ "keyboard-shortcuts": "키보드 단축키",
"label-create": "새로운 라벨 생성",
"label-default": "%s 라벨 (기본)",
"label-delete-pop": "되돌릴 수 없습니다. 모든 카드에서 라벨을 제거하고, 이력을 제거합니다.",
"labels": "라벨",
"language": "언어",
"last-admin-desc": "적어도 하나의 관리자가 필요하기에 이 역할을 변경할 수 없습니다.",
- "leave-board": "Leave Board",
+ "leave-board": "보드 멤버에서 나가기",
"link-card": "카드에대한 링크",
- "list-archive-cards": "Archive all cards in this list",
+ "list-archive-cards": "목록에 있는 모든 카드를 저장소에 보관",
"list-archive-cards-pop": "보드의 목록에서 모든 카드를 삭제합니다. 보관된 카드를 보거나 그것들을 보드로 되돌릴려면, \"메뉴\" > \"보관된 아이템\"을 클릭합니다.",
- "list-move-cards": "Move all cards in this list",
- "list-select-cards": "Select all cards in this list",
+ "list-move-cards": "목록에 있는 모든 카드를 이동",
+ "list-select-cards": "목록에 있는 모든 카드를 선택",
"listActionPopup-title": "동작 목록",
- "listImportCardPopup-title": "Import a Trello card",
- "lists": "Lists",
+ "listImportCardPopup-title": "Trello 카드 가져 오기",
+ "lists": "목록들",
"log-out": "로그아웃",
+ "log-in": "로그인",
"loginPopup-title": "로그인",
- "mapMembersAddPopup-title": "Select Wekan member",
- "mapMembersPopup-title": "Map members",
- "memberMenuPopup-title": "Member Settings",
+ "memberMenuPopup-title": "멤버 설정",
"members": "멤버",
"menu": "메뉴",
- "move-selection": "Move selection",
- "moveCardPopup-title": "Move Card",
- "moveSelectionPopup-title": "Move selection",
- "multi-selection": "Multi-Selection",
- "multi-selection-on": "Multi-Selection is on",
+ "move-selection": "선택 항목 이동",
+ "moveCardPopup-title": "카드 이동",
+ "moveCardToBottom-title": "최하단으로 이동",
+ "moveCardToTop-title": "최상단으로 이동",
+ "moveSelectionPopup-title": "선택 항목 이동",
+ "multi-selection": "다중 선택",
+ "multi-selection-on": "다중 선택 사용",
+ "muted": "알림 해제",
+ "muted-info": "보드의 변경된 사항들의 알림을 받지 않습니다.",
"my-boards": "내 보드",
"name": "이름",
- "no-archived-cards": "No archived cards.",
- "no-archived-lists": "No archived lists.",
+ "no-archived-cards": "보관된 카드가 없습니다.",
+ "no-archived-lists": "보관된 목록이 없습니다.",
"no-results": "결과 값 없음",
"normal": "표준",
"normal-desc": "카드를 보거나 수정할 수 있습니다. 설정값은 변경할 수 없습니다.",
- "not-accepted-yet": "Invitation not accepted yet",
- "optional": "옴션",
- "or": "or",
+ "not-accepted-yet": "초대장이 수락되지 않았습니다.",
+ "notify-participate": "보드 생성자 또는 멤버로 참여하는 모든 카드에 대한 변경사항 알림 받음",
+ "notify-watch": "감시중인 보드, 목록 또는 카드에 대한 변경사항 알림 받음",
+ "optional": "옵션",
+ "or": "또는",
"page-maybe-private": "이 페이지를 비공개일 수 있습니다. 이것을 보고 싶으면 <a href='%s'>로그인</a>을 하십시오.",
"page-not-found": "페이지를 찾지 못 했습니다",
"password": "암호",
- "paste-or-dragdrop": "to paste, or drag & drop image file to it (image only)",
- "preview": "Preview",
- "previewAttachedImagePopup-title": "Preview",
- "previewClipboardImagePopup-title": "Preview",
+ "paste-or-dragdrop": "이미지 파일을 붙여 넣거나 드래그 앤 드롭 (이미지 전용)",
+ "participating": "참여",
+ "preview": "미리보기",
+ "previewAttachedImagePopup-title": "미리보기",
+ "previewClipboardImagePopup-title": "미리보기",
"private": "비공개",
"private-desc": "비공개된 보드입니다. 오직 보드에 추가된 사람들만 보고 수정할 수 있습니다",
"profile": "프로파일",
"public": "공개",
"public-desc": "공개된 보드입니다. 링크를 가진 모든 사람과 구글과 같은 검색 엔진에서 찾아서 볼수 있습니다. 보드에 추가된 사람들만 수정이 가능합니다.",
- "quick-access-description": "Star a board to add a shortcut in this bar.",
+ "quick-access-description": "여기에 바로 가기를 추가하려면 보드에 별 표시를 체크하세요.",
"remove-cover": "커버 제거",
- "remove-from-board": "Remove from Board",
- "remove-label": "Remove the label",
+ "remove-from-board": "보드에서 제거",
+ "remove-label": "라벨 제거",
+ "remove-list": "목록 제거",
"remove-member": "멤버 제거",
"remove-member-from-card": "카드에서 제거",
- "remove-member-pop": "__boardTitle__에서 __name__(__username__) 을 제거합니까? 그 멤버는 이 보드의 모든 카드에서 제거됩니다. 그에대한 알람을 받게됩니다.",
+ "remove-member-pop": "__boardTitle__에서 __name__(__username__) 을 제거합니까? 이 보드의 모든 카드에서 제거됩니다. 해당 내용을 __name__(__username__) 은(는) 알림으로 받게됩니다.",
"removeMemberPopup-title": "멤버를 제거합니까?",
"rename": "새이름",
"rename-board": "보드 이름 바꾸기",
- "restore": "Restore",
+ "restore": "복구",
"save": "저장",
"search": "검색",
"select-color": "색 선택",
- "shortcut-assign-self": "Assign yourself to current card",
- "shortcut-autocomplete-emoji": "Autocomplete emoji",
- "shortcut-autocomplete-members": "Autocomplete members",
- "shortcut-clear-filters": "Clear all filters",
- "shortcut-close-dialog": "Close Dialog",
- "shortcut-filter-my-cards": "Filter my cards",
- "shortcut-show-shortcuts": "Bring up this shortcuts list",
- "shortcut-toggle-filterbar": "Toggle Filter Sidebar",
- "shortcut-toggle-sidebar": "Toggle Board Sidebar",
+ "shortcut-assign-self": "현재 카드에 자신을 지정하세요.",
+ "shortcut-autocomplete-emoji": "이모티콘 자동완성",
+ "shortcut-autocomplete-members": "멤버 자동완성",
+ "shortcut-clear-filters": "모든 필터 초기화",
+ "shortcut-close-dialog": "대화 상자 닫기",
+ "shortcut-filter-my-cards": "내 카드 필터링",
+ "shortcut-show-shortcuts": "바로가기 목록을 가져오십시오.",
+ "shortcut-toggle-filterbar": "토글 필터 사이드바",
+ "shortcut-toggle-sidebar": "보드 사이드바 토글",
+ "show-cards-minimum-count": "목록에 카드 수량 표시(입력된 수량 넘을 경우 표시)",
+ "sidebar-open": "사이드바 열기",
+ "sidebar-close": "사이드바 닫기",
"signupPopup-title": "계정 생성",
- "star-board-title": "보드에 별을 클릭합니다. 보드 목록에서 최상위로 둘 수 있습니다.",
+ "star-board-title": "보드에 별 표시를 클릭합니다. 보드 목록에서 최상위로 둘 수 있습니다.",
"starred-boards": "별표된 보드",
- "starred-boards-description": "별표된 보드들은 보드 목록의 최상단에서 보입니다.",
+ "starred-boards-description": "별 표시된 보드들은 보드 목록의 최상단에서 보입니다.",
"subscribe": "구독",
"team": "팀",
"this-board": "보드",
"this-card": "카드",
+ "time": "시간",
"title": "제목",
- "unassign-member": "Unassign member",
- "unsaved-description": "You have an unsaved description.",
- "upload": "Upload",
- "upload-avatar": "Upload an avatar",
- "uploaded-avatar": "Uploaded an avatar",
- "username": "사용자 이름",
- "view-it": "View it",
- "warn-list-archived": "warning: this card is in an archived list",
- "what-to-do": "What do you want to do?"
-}
+ "tracking": "추적",
+ "tracking-info": "보드 생성자 또는 멤버로 참여하는 모든 카드에 대한 변경사항 알림 받음",
+ "unassign-member": "멤버 할당 해제",
+ "unsaved-description": "저장되지 않은 설명이 있습니다.",
+ "unwatch": "감시 해제",
+ "upload": "업로드",
+ "upload-avatar": "아바타 업로드",
+ "uploaded-avatar": "업로드한 아바타",
+ "username": "아이디",
+ "view-it": "보기",
+ "warn-list-archived": "경고: 이 카드는 저장소 목록에 있습니다.",
+ "watch": "감시",
+ "watching": "감시 중",
+ "watching-info": "\"이 보드의 변경사항을 알림으로 받습니다.",
+ "welcome-board": "보드예제",
+ "welcome-list1": "신규",
+ "welcome-list2": "진행",
+ "what-to-do": "무엇을 하고 싶으신가요?",
+ "admin-panel": "관리자 패널",
+ "settings": "설정",
+ "people": "사람",
+ "registration": "회원가입",
+ "disable-self-registration": "일반 유저의 회원 가입 막기",
+ "invite": "초대",
+ "invite-people": "사람 초대",
+ "to-boards": "보드로 부터",
+ "email-addresses": "이메일 주소",
+ "smtp-host-description": "이메일을 처리하는 SMTP 서버의 주소입니다.",
+ "smtp-port-description": "SMTP 서버가 보내는 전자 메일에 사용하는 포트입니다.",
+ "smtp-host": "SMTP 호스트",
+ "smtp-port": "SMTP 포트",
+ "smtp-username": "사용자 이름",
+ "smtp-password": "암호",
+ "send-from": "보낸 사람",
+ "invitation-code": "초대 코드",
+ "email-invite-register-subject": "\"__inviter__ 님이 당신에게 초대장을 보냈습니다.",
+ "email-invite-register-text": "\"__user__ 님, \n\n__inviter__ 님이 Wekan 보드에 협업을 위하여 초대합니다.\n\n아래 링크를 클릭해주세요 : \n__url__\n\n그리고 초대 코드는 __icode__ 입니다.\n\n감사합니다.",
+ "error-invitation-code-not-exist": "초대 코드가 존재하지 않습니다."
+} \ No newline at end of file
diff --git a/i18n/no.i18n.json b/i18n/no.i18n.json
new file mode 100644
index 00000000..3ad3f788
--- /dev/null
+++ b/i18n/no.i18n.json
@@ -0,0 +1,349 @@
+{
+ "accept": "Godta",
+ "act-activity-notify": "[Wekan] Aktivitetsvarsel",
+ "act-addAttachment": "la ved __attachment__ til __card__",
+ "act-addComment": "kommenterte til __card__: __comment__",
+ "act-createBoard": "opprettet __board__",
+ "act-createCard": "la __card__ til __list__",
+ "act-createList": "la __list__ til __board__",
+ "act-addBoardMember": "la __member__ til __board__",
+ "act-archivedBoard": "arkiverte __board__",
+ "act-archivedCard": "arkiverte __card__",
+ "act-archivedList": "arkiverte __list__",
+ "act-importBoard": "importerte __board__",
+ "act-importCard": "importerte __card__",
+ "act-importList": "importerte __list__",
+ "act-joinMember": "la __member__ til __card__",
+ "act-moveCard": "flyttet __card__ fra __oldList__ til __list__",
+ "act-removeBoardMember": "fjernet __member__ fra __board__",
+ "act-restoredCard": "gjenopprettet __card__ til __board__",
+ "act-unjoinMember": "fjernet __member__ fra __card__",
+ "act-withBoardTitle": "[Wekan] __board__",
+ "act-withCardTitle": "[__board__] __card__",
+ "actions": "Actions",
+ "activities": "Aktiviteter",
+ "activity": "Aktivitet",
+ "activity-added": "la %s til %s",
+ "activity-archived": "arkiverte %s",
+ "activity-attached": "la %s til %s",
+ "activity-created": "opprettet %s",
+ "activity-excluded": "ekskluderte %s fra %s",
+ "activity-imported": "importerte %s til %s fra %s",
+ "activity-imported-board": "importerte %s fra %s",
+ "activity-joined": "ble med %s",
+ "activity-moved": "flyttet %s fra %s til %s",
+ "activity-on": "på %s",
+ "activity-removed": "fjernet %s fra %s",
+ "activity-sent": "sendte %s til %s",
+ "activity-unjoined": "forlot %s",
+ "activity-checklist-added": "la til sjekkliste til %s",
+ "add": "Legg til",
+ "add-attachment": "Legg til vedlegg",
+ "add-board": "Ny tavle",
+ "add-card": "Nytt kort",
+ "add-checklist": "Ny sjekkliste",
+ "add-checklist-item": "Nytt punkt på sjekklisten",
+ "add-cover": "Nytt omslag",
+ "add-label": "Legg til etiketten",
+ "add-list": "Legg til en liste",
+ "add-members": "Legg til medlemmer",
+ "added": "Lagt til",
+ "addMemberPopup-title": "Medlemmer",
+ "admin": "Admin",
+ "admin-desc": "Kan se og redigere kort, fjerne medlemmer, og endre innstillingene for tavlen.",
+ "all-boards": "Alle tavler",
+ "and-n-other-card": "Og __count__ andre kort",
+ "and-n-other-card_plural": "Og __count__ andre kort",
+ "apply": "Lagre",
+ "app-is-offline": "Programmet er ikke på nett, å laste siden på nytt vil medføre tap av data.",
+ "archive": "Arkiv",
+ "archive-all": "Arkiver alle",
+ "archive-board": "Arkiver tavle",
+ "archive-card": "Arkiver kort",
+ "archive-list": "Arkiver denne listen",
+ "archive-selection": "Arkiver merkede",
+ "archiveBoardPopup-title": "Arkivere tavle?",
+ "archived-items": "Arkiverte punkter",
+ "archives": "Arkiv",
+ "assign-member": "Tildel medlem",
+ "attached": "la ved",
+ "attachment": "Vedlegg",
+ "attachment-delete-pop": "Sletting av vedlegg er permanent og kan ikke angres",
+ "attachmentDeletePopup-title": "Slette vedlegg?",
+ "attachments": "Vedlegg",
+ "auto-watch": "Automatisk overvåke tavler når de opprettes",
+ "avatar-too-big": "Profilbildet er for stort (70Kb max)",
+ "back": "Tilbake",
+ "board-change-color": "Endre farge",
+ "board-nb-stars": "%s stjerner",
+ "board-not-found": "Kunne ikke finne tavlen",
+ "board-private-info": "Denne tavlen vil være <strong>privat</strong>.",
+ "board-public-info": "Denne tavlen vil være <strong>offentlig</strong>.",
+ "boardChangeColorPopup-title": "Ende tavlens bakgrunnsfarge",
+ "boardChangeTitlePopup-title": "Endre navn på tavlen",
+ "boardChangeVisibilityPopup-title": "Endre synlighet",
+ "boardChangeWatchPopup-title": "Endre overvåkning",
+ "boardMenuPopup-title": "Tavlemeny",
+ "boards": "Tavler",
+ "bucket-example": "Som \"Bucket List\" for eksempel",
+ "cancel": "Avbryt",
+ "card-archived": "Dette kortet er arkivert.",
+ "card-comments-title": "Dette kortet har %s kommentar.",
+ "card-delete-notice": "Sletting er permanent. Du vil miste alle hendelser knyttet til dette kortet.",
+ "card-delete-pop": "Alle handlinger vil fjernes fra feeden for aktiviteter og du vil ikke kunne åpne kortet på nytt. Det er ingen mulighet å angre.",
+ "card-delete-suggest-archive": "Du kan arkivere kortet for å fjerne det fra tavlen. All aktivitet vil beholdes.",
+ "card-due": "Frist",
+ "card-due-on": "Frist til",
+ "card-edit-attachments": "Rediger vedlegg",
+ "card-edit-labels": "Rediger etiketter",
+ "card-edit-members": "Endre medlemmer",
+ "card-labels-title": "Endre etiketter for kortet.",
+ "card-members-title": "Legg til eller fjern tavle-medlemmer fra dette kortet.",
+ "card-start": "Start",
+ "card-start-on": "Starter på",
+ "cardAttachmentsPopup-title": "Legg ved fra",
+ "cardDeletePopup-title": "Slett kort?",
+ "cardDetailsActionsPopup-title": "Kort-handlinger",
+ "cardLabelsPopup-title": "Etiketter",
+ "cardMembersPopup-title": "Medlemmer",
+ "cardMorePopup-title": "Mer",
+ "cards": "Kort",
+ "change": "Endre",
+ "change-avatar": "Endre avatar",
+ "change-password": "Endre passord",
+ "change-permissions": "Endre rettigheter",
+ "change-settings": "Endre innstillinger",
+ "changeAvatarPopup-title": "Endre Avatar",
+ "changeLanguagePopup-title": "Endre språk",
+ "changePasswordPopup-title": "Endre passord",
+ "changePermissionsPopup-title": "Endre tillatelser",
+ "changeSettingsPopup-title": "Endre innstillinger",
+ "checklists": "Sjekklister",
+ "click-to-star": "Click to star this board.",
+ "click-to-unstar": "Click to unstar this board.",
+ "clipboard": "Clipboard or drag & drop",
+ "close": "Close",
+ "close-board": "Close Board",
+ "close-board-pop": "You will be able to restore the board by clicking the “Archives” button from the home header.",
+ "color-black": "black",
+ "color-blue": "blue",
+ "color-green": "green",
+ "color-lime": "lime",
+ "color-orange": "orange",
+ "color-pink": "pink",
+ "color-purple": "purple",
+ "color-red": "red",
+ "color-sky": "sky",
+ "color-yellow": "yellow",
+ "comment": "Comment",
+ "comment-placeholder": "Write a comment",
+ "comment-only": "Limited",
+ "comment-only-desc": "Can comment on cards only.",
+ "computer": "Computer",
+ "create": "Create",
+ "createBoardPopup-title": "Create Board",
+ "createLabelPopup-title": "Create Label",
+ "current": "current",
+ "date": "Date",
+ "decline": "Decline",
+ "default-avatar": "Default avatar",
+ "delete": "Delete",
+ "deleteLabelPopup-title": "Delete Label?",
+ "description": "Description",
+ "disambiguateMultiLabelPopup-title": "Disambiguate Label Action",
+ "disambiguateMultiMemberPopup-title": "Disambiguate Member Action",
+ "discard": "Discard",
+ "done": "Done",
+ "download": "Download",
+ "edit": "Edit",
+ "edit-avatar": "Endre avatar",
+ "edit-profile": "Edit Profile",
+ "editCardStartDatePopup-title": "Change start date",
+ "editCardDueDatePopup-title": "Change due date",
+ "editLabelPopup-title": "Change Label",
+ "editNotificationPopup-title": "Edit Notification",
+ "editProfilePopup-title": "Edit Profile",
+ "email": "Email",
+ "email-enrollAccount-subject": "An account created for you on __siteName__",
+ "email-enrollAccount-text": "Hello __user__,\n\nTo start using the service, simply click the link below.\n\n__url__\n\nThanks.",
+ "email-fail": "Sending email failed",
+ "email-invalid": "Invalid email",
+ "email-invite": "Invite via Email",
+ "email-invite-subject": "__inviter__ sent you an invitation",
+ "email-invite-text": "Dear __user__,\n\n__inviter__ invites you to join board \"__board__\" for collaborations.\n\nPlease follow the link below:\n\n__url__\n\nThanks.",
+ "email-resetPassword-subject": "Reset your password on __siteName__",
+ "email-resetPassword-text": "Hello __user__,\n\nTo reset your password, simply click the link below.\n\n__url__\n\nThanks.",
+ "email-sent": "Email sent",
+ "email-verifyEmail-subject": "Verify your email address on __siteName__",
+ "email-verifyEmail-text": "Hello __user__,\n\nTo verify your account email, simply click the link below.\n\n__url__\n\nThanks.",
+ "error-board-doesNotExist": "This board does not exist",
+ "error-board-notAdmin": "You need to be admin of this board to do that",
+ "error-board-notAMember": "You need to be a member of this board to do that",
+ "error-json-malformed": "Your text is not valid JSON",
+ "error-json-schema": "Your JSON data does not include the proper information in the correct format",
+ "error-list-doesNotExist": "This list does not exist",
+ "error-user-doesNotExist": "This user does not exist",
+ "error-user-notAllowSelf": "This action on self is not allowed",
+ "error-user-notCreated": "This user is not created",
+ "error-username-taken": "This username is already taken",
+ "export-board": "Export board",
+ "filter": "Filter",
+ "filter-cards": "Filter Cards",
+ "filter-clear": "Clear filter",
+ "filter-no-label": "No label",
+ "filter-no-member": "No member",
+ "filter-on": "Filter is on",
+ "filter-on-desc": "You are filtering cards on this board. Click here to edit filter.",
+ "filter-to-selection": "Filter to selection",
+ "fullname": "Full Name",
+ "header-logo-title": "Go back to your boards page.",
+ "hide-system-messages": "Hide system messages",
+ "headerBarCreateBoardPopup-title": "Create Board",
+ "home": "Home",
+ "import": "Import",
+ "import-board": "import from Trello",
+ "import-board-title": "Import board from Trello",
+ "import-board-trello-instruction": "In your Trello board, go to 'Menu', then 'More', 'Print and Export', 'Export JSON', and copy the resulting text.",
+ "import-json-placeholder": "Paste your valid JSON data here",
+ "import-map-members": "Map members",
+ "import-members-map": "Your imported board has some members. Please map the members you want to import to Wekan users",
+ "import-show-user-mapping": "Review members mapping",
+ "import-user-select": "Pick the Wekan user you want to use as this member",
+ "importMapMembersAddPopup-title": "Select Wekan member",
+ "info": "Infos",
+ "initials": "Initials",
+ "invalid-date": "Invalid date",
+ "joined": "joined",
+ "just-invited": "You are just invited to this board",
+ "keyboard-shortcuts": "Keyboard shortcuts",
+ "label-create": "Create a new label",
+ "label-default": "%s label (default)",
+ "label-delete-pop": "There is no undo. This will remove this label from all cards and destroy its history.",
+ "labels": "Etiketter",
+ "language": "Language",
+ "last-admin-desc": "You can’t change roles because there must be at least one admin.",
+ "leave-board": "Leave Board",
+ "link-card": "Link to this card",
+ "list-archive-cards": "Archive all cards in this list",
+ "list-archive-cards-pop": "This will remove all the cards in this list from the board. To view archived cards and bring them back to the board, click “Menu” > “Archived Items”.",
+ "list-move-cards": "Move all cards in this list",
+ "list-select-cards": "Select all cards in this list",
+ "listActionPopup-title": "List Actions",
+ "listImportCardPopup-title": "Import a Trello card",
+ "lists": "Lists",
+ "log-out": "Log Out",
+ "log-in": "Log In",
+ "loginPopup-title": "Log In",
+ "memberMenuPopup-title": "Member Settings",
+ "members": "Medlemmer",
+ "menu": "Menu",
+ "move-selection": "Move selection",
+ "moveCardPopup-title": "Move Card",
+ "moveCardToBottom-title": "Move to Bottom",
+ "moveCardToTop-title": "Move to Top",
+ "moveSelectionPopup-title": "Move selection",
+ "multi-selection": "Multi-Selection",
+ "multi-selection-on": "Multi-Selection is on",
+ "muted": "Muted",
+ "muted-info": "You will never be notified of any changes in this board",
+ "my-boards": "My Boards",
+ "name": "Name",
+ "no-archived-cards": "No archived cards.",
+ "no-archived-lists": "No archived lists.",
+ "no-results": "No results",
+ "normal": "Normal",
+ "normal-desc": "Can view and edit cards. Can't change settings.",
+ "not-accepted-yet": "Invitation not accepted yet",
+ "notify-participate": "Receive updates to any cards you participate as creater or member",
+ "notify-watch": "Receive updates to any boards, lists, or cards you’re watching",
+ "optional": "optional",
+ "or": "or",
+ "page-maybe-private": "This page may be private. You may be able to view it by <a href='%s'>logging in</a>.",
+ "page-not-found": "Page not found.",
+ "password": "Password",
+ "paste-or-dragdrop": "to paste, or drag & drop image file to it (image only)",
+ "participating": "Participating",
+ "preview": "Preview",
+ "previewAttachedImagePopup-title": "Preview",
+ "previewClipboardImagePopup-title": "Preview",
+ "private": "Private",
+ "private-desc": "This board is private. Only people added to the board can view and edit it.",
+ "profile": "Profile",
+ "public": "Public",
+ "public-desc": "This board is public. It's visible to anyone with the link and will show up in search engines like Google. Only people added to the board can edit.",
+ "quick-access-description": "Star a board to add a shortcut in this bar.",
+ "remove-cover": "Remove Cover",
+ "remove-from-board": "Remove from Board",
+ "remove-label": "Remove the label",
+ "remove-list": "Remove the list",
+ "remove-member": "Remove Member",
+ "remove-member-from-card": "Remove from Card",
+ "remove-member-pop": "Remove __name__ (__username__) from __boardTitle__? The member will be removed from all cards on this board. They will receive a notification.",
+ "removeMemberPopup-title": "Remove Member?",
+ "rename": "Rename",
+ "rename-board": "Endre navn på tavlen",
+ "restore": "Restore",
+ "save": "Save",
+ "search": "Search",
+ "select-color": "Select a color",
+ "shortcut-assign-self": "Assign yourself to current card",
+ "shortcut-autocomplete-emoji": "Autocomplete emoji",
+ "shortcut-autocomplete-members": "Autocomplete members",
+ "shortcut-clear-filters": "Clear all filters",
+ "shortcut-close-dialog": "Close Dialog",
+ "shortcut-filter-my-cards": "Filter my cards",
+ "shortcut-show-shortcuts": "Bring up this shortcuts list",
+ "shortcut-toggle-filterbar": "Toggle Filter Sidebar",
+ "shortcut-toggle-sidebar": "Toggle Board Sidebar",
+ "show-cards-minimum-count": "Show cards count if list contains more than",
+ "sidebar-open": "Open Sidebar",
+ "sidebar-close": "Close Sidebar",
+ "signupPopup-title": "Create an Account",
+ "star-board-title": "Click to star this board. It will show up at top of your boards list.",
+ "starred-boards": "Starred Boards",
+ "starred-boards-description": "Starred boards show up at the top of your boards list.",
+ "subscribe": "Subscribe",
+ "team": "Team",
+ "this-board": "this board",
+ "this-card": "this card",
+ "time": "Time",
+ "title": "Title",
+ "tracking": "Tracking",
+ "tracking-info": "You will be notified of any changes to those cards you are involved as creator or member.",
+ "unassign-member": "Unassign member",
+ "unsaved-description": "You have an unsaved description.",
+ "unwatch": "Unwatch",
+ "upload": "Upload",
+ "upload-avatar": "Upload an avatar",
+ "uploaded-avatar": "Uploaded an avatar",
+ "username": "Username",
+ "view-it": "View it",
+ "warn-list-archived": "warning: this card is in an archived list",
+ "watch": "Watch",
+ "watching": "Watching",
+ "watching-info": "You will be notified of any change in this board",
+ "welcome-board": "Welcome Board",
+ "welcome-list1": "Basics",
+ "welcome-list2": "Advanced",
+ "what-to-do": "What do you want to do?",
+ "admin-panel": "Admin Panel",
+ "settings": "Settings",
+ "people": "People",
+ "registration": "Registration",
+ "disable-self-registration": "Disable Self-Registration",
+ "invite": "Invite",
+ "invite-people": "Invite People",
+ "to-boards": "To board(s)",
+ "email-addresses": "Email Addresses",
+ "smtp-host-description": "The address of the SMTP server that handles your emails.",
+ "smtp-port-description": "The port your SMTP server uses for outgoing emails.",
+ "smtp-host": "SMTP Host",
+ "smtp-port": "SMTP Port",
+ "smtp-username": "Username",
+ "smtp-password": "Password",
+ "send-from": "From",
+ "invitation-code": "Invitation Code",
+ "email-invite-register-subject": "__inviter__ sent you an invitation",
+ "email-invite-register-text": "Dear __user__,\n\n__inviter__ invites you to Wekan for collaborations.\n\nPlease follow the link below:\n__url__\n\nAnd your invitation code is: __icode__\n\nThanks.",
+ "error-invitation-code-not-exist": "Invitation code doesn't exist"
+} \ No newline at end of file
diff --git a/i18n/pl.i18n.json b/i18n/pl.i18n.json
index d44bccdb..a97d8016 100644
--- a/i18n/pl.i18n.json
+++ b/i18n/pl.i18n.json
@@ -1,5 +1,25 @@
{
"accept": "Akceptuj",
+ "act-activity-notify": "[Wekan] Activity Notification",
+ "act-addAttachment": "attached __attachment__ to __card__",
+ "act-addComment": "commented on __card__: __comment__",
+ "act-createBoard": "created __board__",
+ "act-createCard": "added __card__ to __list__",
+ "act-createList": "added __list__ to __board__",
+ "act-addBoardMember": "added __member__ to __board__",
+ "act-archivedBoard": "archived __board__",
+ "act-archivedCard": "archived __card__",
+ "act-archivedList": "archived __list__",
+ "act-importBoard": "imported __board__",
+ "act-importCard": "imported __card__",
+ "act-importList": "imported __list__",
+ "act-joinMember": "added __member__ to __card__",
+ "act-moveCard": "moved __card__ from __oldList__ to __list__",
+ "act-removeBoardMember": "removed __member__ from __board__",
+ "act-restoredCard": "restored __card__ to __board__",
+ "act-unjoinMember": "removed __member__ from __card__",
+ "act-withBoardTitle": "[Wekan] __board__",
+ "act-withCardTitle": "[__board__] __card__",
"actions": "Akcje",
"activities": "Aktywności",
"activity": "Aktywność",
@@ -16,10 +36,13 @@
"activity-removed": "usunięto %s z %s",
"activity-sent": "wysłano %s z %s",
"activity-unjoined": "odłączono %s",
+ "activity-checklist-added": "added checklist to %s",
"add": "Dodaj",
"add-attachment": "Dodaj załącznik",
"add-board": "Dodaj nową tablicę",
"add-card": "Dodaj kartę",
+ "add-checklist": "Add a checklist",
+ "add-checklist-item": "Add an item to checklist",
"add-cover": "Dodaj okładkę",
"add-label": "Dodaj etykietę",
"add-list": "Dodaj listę",
@@ -31,6 +54,8 @@
"all-boards": "Wszystkie tablice",
"and-n-other-card": "And __count__ other card",
"and-n-other-card_plural": "And __count__ other cards",
+ "apply": "Apply",
+ "app-is-offline": "The application is currently offline, refreshing the page will cause data loss.",
"archive": "Zarchiwizuj",
"archive-all": "Zarchiwizuj wszystkie",
"archive-board": "Zarchiwizuj tablicę",
@@ -46,6 +71,7 @@
"attachment-delete-pop": "Usunięcie załącznika jest nieodwracalne.",
"attachmentDeletePopup-title": "Usunąć załącznik?",
"attachments": "Załączniki",
+ "auto-watch": "Automatically watch boards when create it",
"avatar-too-big": "Avatar jest za duży (maksymalnie 70Kb)",
"back": "Wstecz",
"board-change-color": "Zmień kolor",
@@ -56,7 +82,7 @@
"boardChangeColorPopup-title": "Zmień tło tablicy",
"boardChangeTitlePopup-title": "Zmień nazwę tablicy",
"boardChangeVisibilityPopup-title": "Zmień widoczność",
- "boardImportBoardPopup-title": "Zaimportuj tablicę z Trello",
+ "boardChangeWatchPopup-title": "Change Watch",
"boardMenuPopup-title": "Menu tablicy",
"boards": "Tablice",
"bucket-example": "Like “Bucket List” for example",
@@ -64,13 +90,17 @@
"card-archived": "Ta karta jest zarchiwizowana.",
"card-comments-title": "Ta karta ma %s komentarzy.",
"card-delete-notice": "Usunięcie jest trwałe. Stracisz wszystkie akcje powiązane z tą kartą.",
- "card-delete-pop": "Wszystkie akcje będą usunięte z widoku aktywności, nie można będzie ponownie otworzyć karty. Usunięcie jest nieodwracalne. ",
+ "card-delete-pop": "Wszystkie akcje będą usunięte z widoku aktywności, nie można będzie ponownie otworzyć karty. Usunięcie jest nieodwracalne.",
"card-delete-suggest-archive": "Możesz zarchiwizować kartę w celu usunięcia jej z tablicy oraz zachowania jej aktywności.",
+ "card-due": "Due",
+ "card-due-on": "Due on",
"card-edit-attachments": "Edytuj załączniki",
"card-edit-labels": "Edytuj etykiety",
"card-edit-members": "Edytuj członków",
"card-labels-title": "Zmień etykiety karty",
"card-members-title": "Dodaj lub usuń członków tablicy z karty.",
+ "card-start": "Start",
+ "card-start-on": "Starts on",
"cardAttachmentsPopup-title": "Załącz z",
"cardDeletePopup-title": "Usunąć kartę?",
"cardDetailsActionsPopup-title": "Card Actions",
@@ -82,10 +112,13 @@
"change-avatar": "Zmień Avatar",
"change-password": "Zmień hasło",
"change-permissions": "Zmień uprawnienia",
+ "change-settings": "Change Settings",
"changeAvatarPopup-title": "Zmień Avatar",
"changeLanguagePopup-title": "Zmień język",
"changePasswordPopup-title": "Zmień hasło",
"changePermissionsPopup-title": "Zmień uprawnienia",
+ "changeSettingsPopup-title": "Change Settings",
+ "checklists": "Checklists",
"click-to-star": "Kliknij by odznaczyć tę tablicę.",
"click-to-unstar": "Kliknij by usunąć odznaczenie tej tablicy.",
"clipboard": "Schowek lub przeciągnij & upuść",
@@ -104,11 +137,14 @@
"color-yellow": "żółty",
"comment": "Komentarz",
"comment-placeholder": "Napisz komentarz",
+ "comment-only": "Limited",
+ "comment-only-desc": "Can comment on cards only.",
"computer": "Komputer",
"create": "Utwórz",
"createBoardPopup-title": "Utwórz tablicę",
"createLabelPopup-title": "Utwórz etykietę",
"current": "obecny",
+ "date": "Date",
"decline": "Odrzuć",
"default-avatar": "Domyślny avatar",
"delete": "Usuń",
@@ -122,7 +158,10 @@
"edit": "Edytuj",
"edit-avatar": "Zmień Avatar",
"edit-profile": "Edytuj profil",
+ "editCardStartDatePopup-title": "Change start date",
+ "editCardDueDatePopup-title": "Change due date",
"editLabelPopup-title": "Zmień etykietę",
+ "editNotificationPopup-title": "Edit Notification",
"editProfilePopup-title": "Edytuj profil",
"email": "Email",
"email-enrollAccount-subject": "Konto zostało utworzone na __siteName__",
@@ -146,27 +185,34 @@
"error-user-doesNotExist": "Ten użytkownik nie istnieje",
"error-user-notAllowSelf": "Ta akcje nie jest dozwolona",
"error-user-notCreated": "Ten użytkownik nie został stworzony",
+ "error-username-taken": "This username is already taken",
"export-board": "Eksportuj tablicę",
"filter": "Filtr",
"filter-cards": "Odfiltruj karty",
"filter-clear": "Usuń filter",
+ "filter-no-label": "No label",
+ "filter-no-member": "No member",
"filter-on": "Filtr jest włączony",
"filter-on-desc": "Filtrujesz karty na tej tablicy. Kliknij tutaj by edytować filtr.",
"filter-to-selection": "Odfiltruj zaznaczenie",
"fullname": "Full Name",
"header-logo-title": "Wróć do swojej strony z tablicami.",
+ "hide-system-messages": "Hide system messages",
+ "headerBarCreateBoardPopup-title": "Utwórz tablicę",
"home": "Strona główna",
"import": "Importu",
"import-board": "zaimportuj z Trello",
+ "import-board-title": "Import board from Trello",
"import-board-trello-instruction": "W twojej tablicy na Trello, idź do 'Menu', następnie 'More', 'Print and Export', 'Export JSON' i skopiuj wynik",
- "import-card": "Zaimportuj kartę z Trello",
- "import-card-trello-instruction": "Idź do karty Trello, wybierz 'Share and more...', następnie 'Export JSON' i skopiuj wynik",
"import-json-placeholder": "Wklej twój JSON tutaj",
+ "import-map-members": "Map members",
"import-members-map": "Twoje zaimportowane tablice mają kilku członków. Proszę wybierz członków których chcesz zaimportować do Wekan",
"import-show-user-mapping": "Przejrzyj wybranych członków",
"import-user-select": "Pick the Wekan user you want to use as this member",
+ "importMapMembersAddPopup-title": "Select Wekan member",
"info": "Informacje",
"initials": "Initials",
+ "invalid-date": "Invalid date",
"joined": "dołączył",
"just-invited": "Właśnie zostałeś zaproszony do tej tablicy",
"keyboard-shortcuts": "Skróty klawiaturowe",
@@ -186,17 +232,20 @@
"listImportCardPopup-title": "Zaimportuj kartę z Trello",
"lists": "Listy",
"log-out": "Wyloguj",
+ "log-in": "Zaloguj",
"loginPopup-title": "Zaloguj",
- "mapMembersAddPopup-title": "Wybierz członka Wekan",
- "mapMembersPopup-title": "Map members",
"memberMenuPopup-title": "Member Settings",
"members": "Członkowie",
"menu": "Menu",
"move-selection": "Przenieś zaznaczone",
"moveCardPopup-title": "Przenieś kartę",
+ "moveCardToBottom-title": "Move to Bottom",
+ "moveCardToTop-title": "Move to Top",
"moveSelectionPopup-title": "Przenieś zaznaczone",
"multi-selection": "Wielokrotne zaznaczenie",
"multi-selection-on": "Wielokrotne zaznaczenie jest włączone",
+ "muted": "Muted",
+ "muted-info": "You will never be notified of any changes in this board",
"my-boards": "Moje tablice",
"name": "Nazwa",
"no-archived-cards": "Brak zarchiwizowanych kart.",
@@ -205,12 +254,15 @@
"normal": "Normal",
"normal-desc": "Może widzieć i edytować karty. Nie może zmieniać ustawiań.",
"not-accepted-yet": "Zaproszenie jeszcze nie zaakceptowane",
+ "notify-participate": "Receive updates to any cards you participate as creater or member",
+ "notify-watch": "Receive updates to any boards, lists, or cards you’re watching",
"optional": "opcjonalny",
"or": "lub",
"page-maybe-private": "Ta strona może być prywatna. Możliwe, że możesz ją zobaczyć po <a href='%s'>zalogowaniu</a>.",
"page-not-found": "Strona nie znaleziona.",
"password": "Hasło",
"paste-or-dragdrop": "wklej lub przeciągnij & upuść obrazek",
+ "participating": "Participating",
"preview": "Podgląd",
"previewAttachedImagePopup-title": "Podgląd",
"previewClipboardImagePopup-title": "Podgląd",
@@ -223,6 +275,7 @@
"remove-cover": "Usuń okładkę",
"remove-from-board": "Usuń z tablicy",
"remove-label": "Usuń etykietę",
+ "remove-list": "Remove the list",
"remove-member": "Usuń członka",
"remove-member-from-card": "Usuń z karty",
"remove-member-pop": "Remove __name__ (__username__) from __boardTitle__? The member will be removed from all cards on this board. They will receive a notification.",
@@ -234,7 +287,7 @@
"search": "Wyszukaj",
"select-color": "Wybierz kolor",
"shortcut-assign-self": "Przypisz siebie do obecnej karty",
- "shortcut-autocomplete-emojies": "Autocomplete emojies",
+ "shortcut-autocomplete-emoji": "Autocomplete emoji",
"shortcut-autocomplete-members": "Autocomplete members",
"shortcut-clear-filters": "Usuń wszystkie filtry",
"shortcut-close-dialog": "Zamknij okno",
@@ -242,6 +295,9 @@
"shortcut-show-shortcuts": "Przypnij do listy skrótów",
"shortcut-toggle-filterbar": "Przełącz boczny pasek filtru",
"shortcut-toggle-sidebar": "Przełącz boczny pasek tablicy",
+ "show-cards-minimum-count": "Show cards count if list contains more than",
+ "sidebar-open": "Open Sidebar",
+ "sidebar-close": "Close Sidebar",
"signupPopup-title": "Utwórz konto",
"star-board-title": "Click to star this board. It will show up at top of your boards list.",
"starred-boards": "Odznaczone tablice",
@@ -250,14 +306,44 @@
"team": "Zespół",
"this-board": "ta tablica",
"this-card": "ta karta",
+ "time": "Time",
"title": "Tytuł",
+ "tracking": "Tracking",
+ "tracking-info": "You will be notified of any changes to those cards you are involved as creator or member.",
"unassign-member": "Nieprzypisany członek",
"unsaved-description": "You have an unsaved description.",
+ "unwatch": "Unwatch",
"upload": "Wyślij",
"upload-avatar": "Wyślij avatar",
"uploaded-avatar": "Wysłany avatar",
"username": "Nazwa użytkownika",
"view-it": "Zobacz",
"warn-list-archived": "ostrzeżenie: ta karta jest na zarchiwizowanej liście",
- "what-to-do": "Co chcesz zrobić?"
+ "watch": "Watch",
+ "watching": "Watching",
+ "watching-info": "You will be notified of any change in this board",
+ "welcome-board": "Welcome Board",
+ "welcome-list1": "Basics",
+ "welcome-list2": "Advanced",
+ "what-to-do": "Co chcesz zrobić?",
+ "admin-panel": "Admin Panel",
+ "settings": "Settings",
+ "people": "People",
+ "registration": "Registration",
+ "disable-self-registration": "Disable Self-Registration",
+ "invite": "Invite",
+ "invite-people": "Invite People",
+ "to-boards": "To board(s)",
+ "email-addresses": "Email Addresses",
+ "smtp-host-description": "The address of the SMTP server that handles your emails.",
+ "smtp-port-description": "The port your SMTP server uses for outgoing emails.",
+ "smtp-host": "SMTP Host",
+ "smtp-port": "SMTP Port",
+ "smtp-username": "Nazwa użytkownika",
+ "smtp-password": "Hasło",
+ "send-from": "From",
+ "invitation-code": "Invitation Code",
+ "email-invite-register-subject": "__inviter__ wysłał Ci zaproszenie",
+ "email-invite-register-text": "Dear __user__,\n\n__inviter__ invites you to Wekan for collaborations.\n\nPlease follow the link below:\n__url__\n\nAnd your invitation code is: __icode__\n\nThanks.",
+ "error-invitation-code-not-exist": "Invitation code doesn't exist"
} \ No newline at end of file
diff --git a/i18n/pt-BR.i18n.json b/i18n/pt-BR.i18n.json
index 189d4298..b9a85178 100755..100644
--- a/i18n/pt-BR.i18n.json
+++ b/i18n/pt-BR.i18n.json
@@ -1,5 +1,25 @@
{
"accept": "Aceitar",
+ "act-activity-notify": "[Wekan] Notificação de Atividade",
+ "act-addAttachment": "anexo __attachment__ de __card__",
+ "act-addComment": "comentado em __card__: __comment__",
+ "act-createBoard": "__board__ criado",
+ "act-createCard": "__card__ adicionado à __list__",
+ "act-createList": "__list__ adicionada à __board__",
+ "act-addBoardMember": "__member__ adicionado à __board__",
+ "act-archivedBoard": "__board__ arquivado",
+ "act-archivedCard": "__card__ arquivado",
+ "act-archivedList": "__list__ arquivada",
+ "act-importBoard": "__board__ importado",
+ "act-importCard": "__card__ importado",
+ "act-importList": "__list__ importada",
+ "act-joinMember": "__member__ adicionado à __card__",
+ "act-moveCard": "__card__ movido de __oldList__ para __list__",
+ "act-removeBoardMember": "__member__ removido de __board__",
+ "act-restoredCard": "__card__ restaurado para __board__",
+ "act-unjoinMember": "__member__ removido de __card__",
+ "act-withBoardTitle": "[Wekan] __board__",
+ "act-withCardTitle": "[__board__] __card__",
"actions": "Ações",
"activities": "Atividades",
"activity": "Atividade",
@@ -16,10 +36,13 @@
"activity-removed": "removeu %s de %s",
"activity-sent": "enviou %s de %s",
"activity-unjoined": "saiu de %s",
+ "activity-checklist-added": "Adicionado lista de verificação a %s",
"add": "Novo",
"add-attachment": "Adicionar um anexo",
"add-board": "Criar um quadro novo",
"add-card": "Adicionar um cartão",
+ "add-checklist": "Adicionar uma lista de verificação",
+ "add-checklist-item": "Adicionar um item à lista de verificação",
"add-cover": "Adicionar Capa",
"add-label": "Adicionar a Etiqueta",
"add-list": "Adicionar uma lista",
@@ -31,6 +54,8 @@
"all-boards": "Todos os quadros",
"and-n-other-card": "E __count__ outro cartão",
"and-n-other-card_plural": "E __count__ outros cartões",
+ "apply": "Aplicar",
+ "app-is-offline": "A aplicação está atualmente desligada, atualizando a página causará perda de dados.",
"archive": "Arquivar",
"archive-all": "Arquivar Tudo",
"archive-board": "Arquivar Quadro",
@@ -46,6 +71,7 @@
"attachment-delete-pop": "Excluir um anexo é permanente. Não será possível recuperá-lo.",
"attachmentDeletePopup-title": "Excluir Anexo?",
"attachments": "Anexos",
+ "auto-watch": "Observar automaticamente os boards quando forem criados",
"avatar-too-big": "Imagem de avatar muito grande (máx 70KB)",
"back": "Voltar",
"board-change-color": "Alterar cor",
@@ -56,7 +82,7 @@
"boardChangeColorPopup-title": "Alterar Tela de Fundo",
"boardChangeTitlePopup-title": "Renomear Quadro",
"boardChangeVisibilityPopup-title": "Alterar Visibilidade",
- "boardImportBoardPopup-title": "Importar quadro do Trello",
+ "boardChangeWatchPopup-title": "Alterar observação",
"boardMenuPopup-title": "Menu do Quadro",
"boards": "Quadros",
"bucket-example": "\"Bucket List\", por exemplo",
@@ -66,11 +92,15 @@
"card-delete-notice": "A exclusão será permanente. Você perderá todas as ações associadas a este cartão.",
"card-delete-pop": "Todas as ações serão removidas da lista de Atividades e vocês não poderá re-abrir o cartão. Não há como desfazer.",
"card-delete-suggest-archive": "Você pode arquivar um cartão para removê-lo do quadro e preservar suas atividades.",
+ "card-due": "Data fim",
+ "card-due-on": "Finaliza em",
"card-edit-attachments": "Editar anexos",
"card-edit-labels": "Editar etiquetas",
"card-edit-members": "Editar membros",
"card-labels-title": "Alterar etiquetas do cartão.",
"card-members-title": "Acrescentar ou remover membros do quadro deste cartão.",
+ "card-start": "Data início",
+ "card-start-on": "Começa em",
"cardAttachmentsPopup-title": "Anexar a partir de",
"cardDeletePopup-title": "Excluir Cartão?",
"cardDetailsActionsPopup-title": "Ações do cartão",
@@ -82,10 +112,13 @@
"change-avatar": "Alterar Avatar",
"change-password": "Alterar Senha",
"change-permissions": "Alterar permissões",
+ "change-settings": "Altera configurações",
"changeAvatarPopup-title": "Alterar Avatar",
"changeLanguagePopup-title": "Alterar Idioma",
"changePasswordPopup-title": "Alterar Senha",
"changePermissionsPopup-title": "Alterar Permissões",
+ "changeSettingsPopup-title": "Altera configurações",
+ "checklists": "Checklists",
"click-to-star": "Marcar quadro como favorito.",
"click-to-unstar": "Remover quadro dos favoritos.",
"clipboard": "Área de Transferência ou arraste e solte",
@@ -104,11 +137,14 @@
"color-yellow": "amarelo",
"comment": "Comentário",
"comment-placeholder": "Escrever um comentário",
+ "comment-only": "Limited",
+ "comment-only-desc": "Can comment on cards only.",
"computer": "Computador",
"create": "Criar",
"createBoardPopup-title": "Criar Quadro",
"createLabelPopup-title": "Criar Etiqueta",
"current": "atual",
+ "date": "Data",
"decline": "Rejeitar",
"default-avatar": "Avatar padrão",
"delete": "Excluir",
@@ -122,7 +158,10 @@
"edit": "Editar",
"edit-avatar": "Alterar Avatar",
"edit-profile": "Editar Perfil",
+ "editCardStartDatePopup-title": "Altera data de início",
+ "editCardDueDatePopup-title": "Altera data fim",
"editLabelPopup-title": "Alterar Etiqueta",
+ "editNotificationPopup-title": "Editar Notificações",
"editProfilePopup-title": "Editar Perfil",
"email": "E-mail",
"email-enrollAccount-subject": "Uma conta foi criada para você em __siteName__",
@@ -146,27 +185,34 @@
"error-user-doesNotExist": "Este usuário não existe",
"error-user-notAllowSelf": "Esta ação em você mesmo não é permitida",
"error-user-notCreated": "Este usuário não foi criado",
+ "error-username-taken": "Esse username já existe",
"export-board": "Exportar quadro",
"filter": "Filtrar",
"filter-cards": "Filtrar Cartões",
"filter-clear": "Limpar filtro",
+ "filter-no-label": "Sem labels",
+ "filter-no-member": "Sem membros",
"filter-on": "Filtro está ativo",
"filter-on-desc": "Você está filtrando cartões neste quadro. Clique aqui para editar o filtro.",
"filter-to-selection": "Filtrar esta seleção",
"fullname": "Nome Completo",
"header-logo-title": "Voltar para a lista de quadros.",
+ "hide-system-messages": "Esconde mensagens de sistema",
+ "headerBarCreateBoardPopup-title": "Criar Quadro",
"home": "Início",
"import": "Importar",
"import-board": "Importar do Trello",
+ "import-board-title": "Importar board do Trello",
"import-board-trello-instruction": "No seu quadro do Trello, vá em 'Menu', depois em 'Mais', 'Imprimir e Exportar', 'Exportar JSON', então copie o texto emitido",
- "import-card": "Importe um cartão do Trello",
- "import-card-trello-instruction": "Vá para um cartão do Trello, selecione 'Compartilhar e mais...' então 'Exporte JSON' e copie o texto resultante",
"import-json-placeholder": "Cole seus dados JSON válidos aqui",
+ "import-map-members": "Mapear membros",
"import-members-map": "O seu quadro importado tem alguns membros. Por favor determine os membros que você deseja importar para os usuários Wekan",
"import-show-user-mapping": "Revisar mapeamento dos membros",
"import-user-select": "Selecione o usuário Wekan que você gostaria de usar como este membro",
+ "importMapMembersAddPopup-title": "Seleciona um membro",
"info": "Informações",
"initials": "Iniciais",
+ "invalid-date": "Data inválida",
"joined": "juntou-se",
"just-invited": "Você já foi convidado para este quadro",
"keyboard-shortcuts": "Atalhos do teclado",
@@ -186,17 +232,20 @@
"listImportCardPopup-title": "Importe um cartão do Trello",
"lists": "Listas",
"log-out": "Sair",
+ "log-in": "Entrar",
"loginPopup-title": "Entrar",
- "mapMembersAddPopup-title": "Selecione um membro Wekan",
- "mapMembersPopup-title": "Mapear membros",
"memberMenuPopup-title": "Configuração de Membros",
"members": "Membros",
"menu": "Menu",
"move-selection": "Mover seleção",
"moveCardPopup-title": "Mover Cartão",
+ "moveCardToBottom-title": "Mover para o final",
+ "moveCardToTop-title": "Mover para o topo",
"moveSelectionPopup-title": "Mover seleção",
"multi-selection": "Multi-Seleção",
"multi-selection-on": "Multi-seleção está ativo",
+ "muted": "Silenciar",
+ "muted-info": "Você nunca receberá qualquer notificação desse board",
"my-boards": "Meus Quadros",
"name": "Nome",
"no-archived-cards": "Nenhum cartão arquivado",
@@ -205,12 +254,15 @@
"normal": "Normal",
"normal-desc": "Pode ver e editar cartões. Não pode alterar configurações.",
"not-accepted-yet": "Convite ainda não aceito",
+ "notify-participate": "Receber atualizações de qualquer card que você criar ou participar como membro",
+ "notify-watch": "Receber atualizações de qualquer board, lista ou cards que você estiver observando",
"optional": "opcional",
"or": "ou",
"page-maybe-private": "Esta página pode ser privada. Você poderá vê-la se estiver <a href='%s'>logado</a>.",
"page-not-found": "Página não encontrada.",
"password": "Senha",
"paste-or-dragdrop": "para colar, ou arraste e solte o arquivo da imagem para ca (somente imagens)",
+ "participating": "Participando",
"preview": "Previsualizar",
"previewAttachedImagePopup-title": "Previsualizar",
"previewClipboardImagePopup-title": "Previsualizar",
@@ -223,6 +275,7 @@
"remove-cover": "Remover Capa",
"remove-from-board": "Remover do Quadro",
"remove-label": "Remover Etiqueta",
+ "remove-list": "Remover da lista",
"remove-member": "Remover Membro",
"remove-member-from-card": "Remover do Cartão",
"remove-member-pop": "Remover __name__ (__username__) de __boardTitle__? O membro será removido de todos os cartões neste quadro e será notificado.",
@@ -234,7 +287,7 @@
"search": "Buscar",
"select-color": "Selecione uma cor",
"shortcut-assign-self": "Atribuir a si o cartão atual",
- "shortcut-autocomplete-emojies": "Preenchimento automático de emojies",
+ "shortcut-autocomplete-emoji": "Autocompletar emoji",
"shortcut-autocomplete-members": "Preenchimento automático de membros",
"shortcut-clear-filters": "Limpar todos filtros",
"shortcut-close-dialog": "Fechar dialogo",
@@ -242,6 +295,9 @@
"shortcut-show-shortcuts": "Mostrar lista de atalhos",
"shortcut-toggle-filterbar": "Alternar barra de filtro",
"shortcut-toggle-sidebar": "Fechar barra lateral.",
+ "show-cards-minimum-count": "Mostrar contador de cards se a lista tiver mais de",
+ "sidebar-open": "Abrir barra lateral",
+ "sidebar-close": "Fechar barra lateral",
"signupPopup-title": "Criar uma Conta",
"star-board-title": "Clique para marcar este quadro como favorito. Ele aparecerá no topo na lista dos seus quadros.",
"starred-boards": "Quadros Favoritos",
@@ -250,14 +306,44 @@
"team": "Equipe",
"this-board": "este quadro",
"this-card": "este cartão",
+ "time": "Tempo",
"title": "Título",
+ "tracking": "Tracking",
+ "tracking-info": "Você será notificado se houver qualquer alteração em cards em que você é o criador ou membro",
"unassign-member": "Membro não associado",
"unsaved-description": "Você possui uma descrição não salva",
+ "unwatch": "Deixar de observar",
"upload": "Upload",
"upload-avatar": "Carregar um avatar",
"uploaded-avatar": "Avatar carregado",
"username": "Nome de usuário",
"view-it": "Visualizar",
"warn-list-archived": "aviso: este cartão está em uma lista arquivada",
- "what-to-do": "O que você gostaria de fazer?"
+ "watch": "Observar",
+ "watching": "Observando",
+ "watching-info": "Você será notificado em qualquer alteração desse board",
+ "welcome-board": "Board de Boas Vindas",
+ "welcome-list1": "Básico",
+ "welcome-list2": "Avançado",
+ "what-to-do": "O que você gostaria de fazer?",
+ "admin-panel": "Painel Administrativo",
+ "settings": "Configurações",
+ "people": "Pessoas",
+ "registration": "Registro",
+ "disable-self-registration": "Desabilitar Cadastrar-se",
+ "invite": "Convite",
+ "invite-people": "Convide Pessoas",
+ "to-boards": "Para o/os quadro(s)",
+ "email-addresses": "Endereço de Email",
+ "smtp-host-description": "O endereço do servidor SMTP que envia seus emails.",
+ "smtp-port-description": "A porta que o servidor SMTP usa para enviar os emails.",
+ "smtp-host": "Servidor SMTP",
+ "smtp-port": "Porta SMTP",
+ "smtp-username": "Nome de usuário",
+ "smtp-password": "Senha",
+ "send-from": "De",
+ "invitation-code": "Código do Convite",
+ "email-invite-register-subject": "__inviter__ lhe enviou um convite",
+ "email-invite-register-text": "Caro __user__,\n\n__inviter__ convidou você para colaborar no Wekan.\n\nPor favor, vá no link abaixo:\n__url__\n\nE seu código de convite é: __icode__\n\nObrigado.",
+ "error-invitation-code-not-exist": "O código do convite não existe"
} \ No newline at end of file
diff --git a/i18n/ro.i18n.json b/i18n/ro.i18n.json
new file mode 100644
index 00000000..85a96d1e
--- /dev/null
+++ b/i18n/ro.i18n.json
@@ -0,0 +1,349 @@
+{
+ "accept": "Accept",
+ "act-activity-notify": "[Wekan] Activity Notification",
+ "act-addAttachment": "attached __attachment__ to __card__",
+ "act-addComment": "commented on __card__: __comment__",
+ "act-createBoard": "created __board__",
+ "act-createCard": "added __card__ to __list__",
+ "act-createList": "added __list__ to __board__",
+ "act-addBoardMember": "added __member__ to __board__",
+ "act-archivedBoard": "archived __board__",
+ "act-archivedCard": "archived __card__",
+ "act-archivedList": "archived __list__",
+ "act-importBoard": "imported __board__",
+ "act-importCard": "imported __card__",
+ "act-importList": "imported __list__",
+ "act-joinMember": "added __member__ to __card__",
+ "act-moveCard": "moved __card__ from __oldList__ to __list__",
+ "act-removeBoardMember": "removed __member__ from __board__",
+ "act-restoredCard": "restored __card__ to __board__",
+ "act-unjoinMember": "removed __member__ from __card__",
+ "act-withBoardTitle": "[Wekan] __board__",
+ "act-withCardTitle": "[__board__] __card__",
+ "actions": "Actions",
+ "activities": "Activities",
+ "activity": "Activity",
+ "activity-added": "added %s to %s",
+ "activity-archived": "archived %s",
+ "activity-attached": "attached %s to %s",
+ "activity-created": "created %s",
+ "activity-excluded": "excluded %s from %s",
+ "activity-imported": "imported %s into %s from %s",
+ "activity-imported-board": "imported %s from %s",
+ "activity-joined": "joined %s",
+ "activity-moved": "moved %s from %s to %s",
+ "activity-on": "on %s",
+ "activity-removed": "removed %s from %s",
+ "activity-sent": "sent %s to %s",
+ "activity-unjoined": "unjoined %s",
+ "activity-checklist-added": "added checklist to %s",
+ "add": "Add",
+ "add-attachment": "Add an attachment",
+ "add-board": "Add a new board",
+ "add-card": "Add a card",
+ "add-checklist": "Add a checklist",
+ "add-checklist-item": "Add an item to checklist",
+ "add-cover": "Add Cover",
+ "add-label": "Add the label",
+ "add-list": "Add a list",
+ "add-members": "Add Members",
+ "added": "Added",
+ "addMemberPopup-title": "Members",
+ "admin": "Admin",
+ "admin-desc": "Can view and edit cards, remove members, and change settings for the board.",
+ "all-boards": "All boards",
+ "and-n-other-card": "And __count__ other card",
+ "and-n-other-card_plural": "And __count__ other cards",
+ "apply": "Apply",
+ "app-is-offline": "The application is currently offline, refreshing the page will cause data loss.",
+ "archive": "Archive",
+ "archive-all": "Archive All",
+ "archive-board": "Archive Board",
+ "archive-card": "Archive Card",
+ "archive-list": "Archive this list",
+ "archive-selection": "Archive selection",
+ "archiveBoardPopup-title": "Archive Board?",
+ "archived-items": "Archived Items",
+ "archives": "Arhive",
+ "assign-member": "Assign member",
+ "attached": "attached",
+ "attachment": "Ataşament",
+ "attachment-delete-pop": "Deleting an attachment is permanent. There is no undo.",
+ "attachmentDeletePopup-title": "Delete Attachment?",
+ "attachments": "Ataşamente",
+ "auto-watch": "Automatically watch boards when create it",
+ "avatar-too-big": "The avatar is too large (70Kb max)",
+ "back": "Înapoi",
+ "board-change-color": "Change color",
+ "board-nb-stars": "%s stars",
+ "board-not-found": "Board not found",
+ "board-private-info": "This board will be <strong>private</strong>.",
+ "board-public-info": "This board will be <strong>public</strong>.",
+ "boardChangeColorPopup-title": "Change Board Background",
+ "boardChangeTitlePopup-title": "Rename Board",
+ "boardChangeVisibilityPopup-title": "Change Visibility",
+ "boardChangeWatchPopup-title": "Change Watch",
+ "boardMenuPopup-title": "Board Menu",
+ "boards": "Boards",
+ "bucket-example": "Like “Bucket List” for example",
+ "cancel": "Cancel",
+ "card-archived": "This card is archived.",
+ "card-comments-title": "This card has %s comment.",
+ "card-delete-notice": "Deleting is permanent. You will lose all actions associated with this card.",
+ "card-delete-pop": "All actions will be removed from the activity feed and you won't be able to re-open the card. There is no undo.",
+ "card-delete-suggest-archive": "You can archive a card to remove it from the board and preserve the activity.",
+ "card-due": "Due",
+ "card-due-on": "Due on",
+ "card-edit-attachments": "Edit attachments",
+ "card-edit-labels": "Edit labels",
+ "card-edit-members": "Edit members",
+ "card-labels-title": "Change the labels for the card.",
+ "card-members-title": "Add or remove members of the board from the card.",
+ "card-start": "Start",
+ "card-start-on": "Starts on",
+ "cardAttachmentsPopup-title": "Attach From",
+ "cardDeletePopup-title": "Delete Card?",
+ "cardDetailsActionsPopup-title": "Card Actions",
+ "cardLabelsPopup-title": "Labels",
+ "cardMembersPopup-title": "Members",
+ "cardMorePopup-title": "More",
+ "cards": "Cards",
+ "change": "Change",
+ "change-avatar": "Change Avatar",
+ "change-password": "Change Password",
+ "change-permissions": "Change permissions",
+ "change-settings": "Change Settings",
+ "changeAvatarPopup-title": "Change Avatar",
+ "changeLanguagePopup-title": "Change Language",
+ "changePasswordPopup-title": "Change Password",
+ "changePermissionsPopup-title": "Change Permissions",
+ "changeSettingsPopup-title": "Change Settings",
+ "checklists": "Checklists",
+ "click-to-star": "Click to star this board.",
+ "click-to-unstar": "Click to unstar this board.",
+ "clipboard": "Clipboard or drag & drop",
+ "close": "Închide",
+ "close-board": "Close Board",
+ "close-board-pop": "You will be able to restore the board by clicking the “Archives” button from the home header.",
+ "color-black": "black",
+ "color-blue": "blue",
+ "color-green": "green",
+ "color-lime": "lime",
+ "color-orange": "orange",
+ "color-pink": "pink",
+ "color-purple": "purple",
+ "color-red": "red",
+ "color-sky": "sky",
+ "color-yellow": "yellow",
+ "comment": "Comment",
+ "comment-placeholder": "Write a comment",
+ "comment-only": "Limited",
+ "comment-only-desc": "Can comment on cards only.",
+ "computer": "Computer",
+ "create": "Create",
+ "createBoardPopup-title": "Create Board",
+ "createLabelPopup-title": "Create Label",
+ "current": "current",
+ "date": "Date",
+ "decline": "Decline",
+ "default-avatar": "Default avatar",
+ "delete": "Delete",
+ "deleteLabelPopup-title": "Delete Label?",
+ "description": "Description",
+ "disambiguateMultiLabelPopup-title": "Disambiguate Label Action",
+ "disambiguateMultiMemberPopup-title": "Disambiguate Member Action",
+ "discard": "Discard",
+ "done": "Done",
+ "download": "Download",
+ "edit": "Edit",
+ "edit-avatar": "Change Avatar",
+ "edit-profile": "Edit Profile",
+ "editCardStartDatePopup-title": "Change start date",
+ "editCardDueDatePopup-title": "Change due date",
+ "editLabelPopup-title": "Change Label",
+ "editNotificationPopup-title": "Edit Notification",
+ "editProfilePopup-title": "Edit Profile",
+ "email": "Email",
+ "email-enrollAccount-subject": "An account created for you on __siteName__",
+ "email-enrollAccount-text": "Hello __user__,\n\nTo start using the service, simply click the link below.\n\n__url__\n\nThanks.",
+ "email-fail": "Sending email failed",
+ "email-invalid": "Invalid email",
+ "email-invite": "Invite via Email",
+ "email-invite-subject": "__inviter__ sent you an invitation",
+ "email-invite-text": "Dear __user__,\n\n__inviter__ invites you to join board \"__board__\" for collaborations.\n\nPlease follow the link below:\n\n__url__\n\nThanks.",
+ "email-resetPassword-subject": "Reset your password on __siteName__",
+ "email-resetPassword-text": "Hello __user__,\n\nTo reset your password, simply click the link below.\n\n__url__\n\nThanks.",
+ "email-sent": "Email sent",
+ "email-verifyEmail-subject": "Verify your email address on __siteName__",
+ "email-verifyEmail-text": "Hello __user__,\n\nTo verify your account email, simply click the link below.\n\n__url__\n\nThanks.",
+ "error-board-doesNotExist": "This board does not exist",
+ "error-board-notAdmin": "You need to be admin of this board to do that",
+ "error-board-notAMember": "You need to be a member of this board to do that",
+ "error-json-malformed": "Your text is not valid JSON",
+ "error-json-schema": "Your JSON data does not include the proper information in the correct format",
+ "error-list-doesNotExist": "This list does not exist",
+ "error-user-doesNotExist": "This user does not exist",
+ "error-user-notAllowSelf": "This action on self is not allowed",
+ "error-user-notCreated": "This user is not created",
+ "error-username-taken": "This username is already taken",
+ "export-board": "Export board",
+ "filter": "Filter",
+ "filter-cards": "Filter Cards",
+ "filter-clear": "Clear filter",
+ "filter-no-label": "No label",
+ "filter-no-member": "No member",
+ "filter-on": "Filter is on",
+ "filter-on-desc": "You are filtering cards on this board. Click here to edit filter.",
+ "filter-to-selection": "Filter to selection",
+ "fullname": "Full Name",
+ "header-logo-title": "Go back to your boards page.",
+ "hide-system-messages": "Hide system messages",
+ "headerBarCreateBoardPopup-title": "Create Board",
+ "home": "Home",
+ "import": "Import",
+ "import-board": "import from Trello",
+ "import-board-title": "Import board from Trello",
+ "import-board-trello-instruction": "In your Trello board, go to 'Menu', then 'More', 'Print and Export', 'Export JSON', and copy the resulting text",
+ "import-json-placeholder": "Paste your valid JSON data here",
+ "import-map-members": "Map members",
+ "import-members-map": "Your imported board has some members. Please map the members you want to import to Wekan users",
+ "import-show-user-mapping": "Review members mapping",
+ "import-user-select": "Pick the Wekan user you want to use as this member",
+ "importMapMembersAddPopup-title": "Select Wekan member",
+ "info": "Infos",
+ "initials": "Iniţiale",
+ "invalid-date": "Invalid date",
+ "joined": "joined",
+ "just-invited": "You are just invited to this board",
+ "keyboard-shortcuts": "Keyboard shortcuts",
+ "label-create": "Create a new label",
+ "label-default": "%s label (default)",
+ "label-delete-pop": "There is no undo. This will remove this label from all cards and destroy its history.",
+ "labels": "Labels",
+ "language": "Language",
+ "last-admin-desc": "You can’t change roles because there must be at least one admin.",
+ "leave-board": "Leave Board",
+ "link-card": "Link to this card",
+ "list-archive-cards": "Archive all cards in this list",
+ "list-archive-cards-pop": "This will remove all the cards in this list from the board. To view archived cards and bring them back to the board, click “Menu” > “Archived Items”.",
+ "list-move-cards": "Move all cards in this list",
+ "list-select-cards": "Select all cards in this list",
+ "listActionPopup-title": "List Actions",
+ "listImportCardPopup-title": "Import a Trello card",
+ "lists": "Liste",
+ "log-out": "Log Out",
+ "log-in": "Log In",
+ "loginPopup-title": "Log In",
+ "memberMenuPopup-title": "Member Settings",
+ "members": "Members",
+ "menu": "Meniu",
+ "move-selection": "Move selection",
+ "moveCardPopup-title": "Move Card",
+ "moveCardToBottom-title": "Move to Bottom",
+ "moveCardToTop-title": "Move to Top",
+ "moveSelectionPopup-title": "Move selection",
+ "multi-selection": "Multi-Selection",
+ "multi-selection-on": "Multi-Selection is on",
+ "muted": "Muted",
+ "muted-info": "You will never be notified of any changes in this board",
+ "my-boards": "My Boards",
+ "name": "Nume",
+ "no-archived-cards": "No archived cards.",
+ "no-archived-lists": "No archived lists.",
+ "no-results": "No results",
+ "normal": "Normal",
+ "normal-desc": "Can view and edit cards. Can't change settings.",
+ "not-accepted-yet": "Invitation not accepted yet",
+ "notify-participate": "Receive updates to any cards you participate as creater or member",
+ "notify-watch": "Receive updates to any boards, lists, or cards you’re watching",
+ "optional": "optional",
+ "or": "or",
+ "page-maybe-private": "This page may be private. You may be able to view it by <a href='%s'>logging in</a>.",
+ "page-not-found": "Page not found.",
+ "password": "Parolă",
+ "paste-or-dragdrop": "to paste, or drag & drop image file to it (image only)",
+ "participating": "Participating",
+ "preview": "Preview",
+ "previewAttachedImagePopup-title": "Preview",
+ "previewClipboardImagePopup-title": "Preview",
+ "private": "Privat",
+ "private-desc": "This board is private. Only people added to the board can view and edit it.",
+ "profile": "Profil",
+ "public": "Public",
+ "public-desc": "This board is public. It's visible to anyone with the link and will show up in search engines like Google. Only people added to the board can edit.",
+ "quick-access-description": "Star a board to add a shortcut in this bar.",
+ "remove-cover": "Remove Cover",
+ "remove-from-board": "Remove from Board",
+ "remove-label": "Remove the label",
+ "remove-list": "Remove the list",
+ "remove-member": "Remove Member",
+ "remove-member-from-card": "Remove from Card",
+ "remove-member-pop": "Remove __name__ (__username__) from __boardTitle__? The member will be removed from all cards on this board. They will receive a notification.",
+ "removeMemberPopup-title": "Remove Member?",
+ "rename": "Rename",
+ "rename-board": "Rename Board",
+ "restore": "Restore",
+ "save": "Salvează",
+ "search": "Caută",
+ "select-color": "Select a color",
+ "shortcut-assign-self": "Assign yourself to current card",
+ "shortcut-autocomplete-emoji": "Autocomplete emoji",
+ "shortcut-autocomplete-members": "Autocomplete members",
+ "shortcut-clear-filters": "Clear all filters",
+ "shortcut-close-dialog": "Close Dialog",
+ "shortcut-filter-my-cards": "Filter my cards",
+ "shortcut-show-shortcuts": "Bring up this shortcuts list",
+ "shortcut-toggle-filterbar": "Toggle Filter Sidebar",
+ "shortcut-toggle-sidebar": "Toggle Board Sidebar",
+ "show-cards-minimum-count": "Show cards count if list contains more than",
+ "sidebar-open": "Open Sidebar",
+ "sidebar-close": "Close Sidebar",
+ "signupPopup-title": "Create an Account",
+ "star-board-title": "Click to star this board. It will show up at top of your boards list.",
+ "starred-boards": "Starred Boards",
+ "starred-boards-description": "Starred boards show up at the top of your boards list.",
+ "subscribe": "Subscribe",
+ "team": "Team",
+ "this-board": "this board",
+ "this-card": "this card",
+ "time": "Time",
+ "title": "Titlu",
+ "tracking": "Tracking",
+ "tracking-info": "You will be notified of any changes to those cards you are involved as creator or member.",
+ "unassign-member": "Unassign member",
+ "unsaved-description": "You have an unsaved description.",
+ "unwatch": "Unwatch",
+ "upload": "Upload",
+ "upload-avatar": "Upload an avatar",
+ "uploaded-avatar": "Uploaded an avatar",
+ "username": "Username",
+ "view-it": "View it",
+ "warn-list-archived": "warning: this card is in an archived list",
+ "watch": "Watch",
+ "watching": "Watching",
+ "watching-info": "You will be notified of any change in this board",
+ "welcome-board": "Welcome Board",
+ "welcome-list1": "Basics",
+ "welcome-list2": "Advanced",
+ "what-to-do": "Ce ai vrea sa faci?",
+ "admin-panel": "Admin Panel",
+ "settings": "Settings",
+ "people": "People",
+ "registration": "Registration",
+ "disable-self-registration": "Disable Self-Registration",
+ "invite": "Invite",
+ "invite-people": "Invite People",
+ "to-boards": "To board(s)",
+ "email-addresses": "Email Addresses",
+ "smtp-host-description": "The address of the SMTP server that handles your emails.",
+ "smtp-port-description": "The port your SMTP server uses for outgoing emails.",
+ "smtp-host": "SMTP Host",
+ "smtp-port": "SMTP Port",
+ "smtp-username": "Username",
+ "smtp-password": "Parolă",
+ "send-from": "From",
+ "invitation-code": "Invitation Code",
+ "email-invite-register-subject": "__inviter__ sent you an invitation",
+ "email-invite-register-text": "Dear __user__,\n\n__inviter__ invites you to Wekan for collaborations.\n\nPlease follow the link below:\n__url__\n\nAnd your invitation code is: __icode__\n\nThanks.",
+ "error-invitation-code-not-exist": "Invitation code doesn't exist"
+} \ No newline at end of file
diff --git a/i18n/ru.i18n.json b/i18n/ru.i18n.json
index a2319a27..ffa3207e 100755..100644
--- a/i18n/ru.i18n.json
+++ b/i18n/ru.i18n.json
@@ -1,5 +1,25 @@
{
"accept": "Принять",
+ "act-activity-notify": "[Wekan] Activity Notification",
+ "act-addAttachment": "attached __attachment__ to __card__",
+ "act-addComment": "commented on __card__: __comment__",
+ "act-createBoard": "created __board__",
+ "act-createCard": "added __card__ to __list__",
+ "act-createList": "added __list__ to __board__",
+ "act-addBoardMember": "added __member__ to __board__",
+ "act-archivedBoard": "archived __board__",
+ "act-archivedCard": "archived __card__",
+ "act-archivedList": "archived __list__",
+ "act-importBoard": "imported __board__",
+ "act-importCard": "imported __card__",
+ "act-importList": "imported __list__",
+ "act-joinMember": "added __member__ to __card__",
+ "act-moveCard": "moved __card__ from __oldList__ to __list__",
+ "act-removeBoardMember": "removed __member__ from __board__",
+ "act-restoredCard": "restored __card__ to __board__",
+ "act-unjoinMember": "removed __member__ from __card__",
+ "act-withBoardTitle": "[Wekan] __board__",
+ "act-withCardTitle": "[__board__] __card__",
"actions": "Действия",
"activities": "История действия",
"activity": "Активность",
@@ -16,10 +36,13 @@
"activity-removed": "удалено %s из %s",
"activity-sent": "отправлено %s в %s",
"activity-unjoined": "вышел из %s",
+ "activity-checklist-added": "added checklist to %s",
"add": "Создать",
"add-attachment": "Добавить вложение",
"add-board": "Создать новую доску",
"add-card": "Добавить карточку",
+ "add-checklist": "Add a checklist",
+ "add-checklist-item": "Add an item to checklist",
"add-cover": "Прикрепить",
"add-label": "Добавить метку",
"add-list": "Добавить список",
@@ -31,6 +54,8 @@
"all-boards": "Все доски",
"and-n-other-card": "И __count__ другая карточка",
"and-n-other-card_plural": "И __count__ другие карточки",
+ "apply": "Apply",
+ "app-is-offline": "The application is currently offline, refreshing the page will cause data loss.",
"archive": "Архивировать",
"archive-all": "Архивировать все",
"archive-board": "Архивировать доску",
@@ -46,6 +71,7 @@
"attachment-delete-pop": "Если удалить вложение, его нельзя будет восстановить.",
"attachmentDeletePopup-title": "Удалить вложение?",
"attachments": "Вложения",
+ "auto-watch": "Automatically watch boards when create it",
"avatar-too-big": "Аватар слишком большой (максимум 70кб)",
"back": "Назад",
"board-change-color": "Изменить цвет",
@@ -56,7 +82,7 @@
"boardChangeColorPopup-title": "Изменить фон доски",
"boardChangeTitlePopup-title": "Переименовать доску",
"boardChangeVisibilityPopup-title": "Изменить настройки видимости",
- "boardImportBoardPopup-title": "Импортировать доску с Trello",
+ "boardChangeWatchPopup-title": "Change Watch",
"boardMenuPopup-title": "Меню доски",
"boards": "Доски",
"bucket-example": "Например “Список дел”",
@@ -66,11 +92,15 @@
"card-delete-notice": "Это действие невозможно будет отменить. Все изменения, которые вы вносили в карточку будут потеряны.",
"card-delete-pop": "Все действия будут удалены из ленты активности и вы не сможете заново открыть карточку. Действие необратимо",
"card-delete-suggest-archive": "Вы можете заархивировать карточку, чтобы удалить ее с доски и сохранить активность .",
+ "card-due": "Due",
+ "card-due-on": "Due on",
"card-edit-attachments": "Изменить вложения",
"card-edit-labels": "Изменить метку",
"card-edit-members": "Изменить пользователей",
"card-labels-title": "Редактировать метки.",
"card-members-title": "Добавить или удалить участника.",
+ "card-start": "Start",
+ "card-start-on": "Starts on",
"cardAttachmentsPopup-title": "Прикрепить из",
"cardDeletePopup-title": "Удалить карточку?",
"cardDetailsActionsPopup-title": "Действия в карточке",
@@ -82,33 +112,39 @@
"change-avatar": "Изменить аватар",
"change-password": "Изменить пароль",
"change-permissions": "Изменить права доступа",
+ "change-settings": "Change Settings",
"changeAvatarPopup-title": "Изменить аватар",
"changeLanguagePopup-title": "Сменить язык",
"changePasswordPopup-title": "Изменить пароль",
"changePermissionsPopup-title": "Изменить настройки доступа",
+ "changeSettingsPopup-title": "Change Settings",
+ "checklists": "Checklists",
"click-to-star": "Добавить в «Избранное»",
"click-to-unstar": "Удалить из «Избранного»",
"clipboard": "Буфер обмена или drag & drop",
"close": "Закрыть",
"close-board": "Закрыть доску",
"close-board-pop": "Вы можете восстановить доску, нажав “Архивы” в заголовке.",
+ "color-black": "черный",
+ "color-blue": "синий",
"color-green": "зеленый",
- "color-yellow": "желтый",
+ "color-lime": "лимоновый",
"color-orange": "оранджевый",
- "color-red": "красный",
+ "color-pink": "зорозвый",
"color-purple": "фиолетовый",
- "color-blue": "синий",
+ "color-red": "красный",
"color-sky": "голубой",
- "color-lime": "лимоновый",
- "color-pink": "зорозвый",
- "color-black": "черный",
+ "color-yellow": "желтый",
"comment": "Отправить",
"comment-placeholder": "Написать комментарий",
+ "comment-only": "Limited",
+ "comment-only-desc": "Can comment on cards only.",
"computer": "Загрузить с компьютера",
"create": "Создать",
"createBoardPopup-title": "Создать доску",
"createLabelPopup-title": "Создать метку",
"current": "Текущий",
+ "date": "Date",
"decline": "Понизить",
"default-avatar": "Стандартный аватар",
"delete": "Удалить",
@@ -122,7 +158,10 @@
"edit": "Редактировать",
"edit-avatar": "Изменить аватар",
"edit-profile": "Изменить профиль",
+ "editCardStartDatePopup-title": "Change start date",
+ "editCardDueDatePopup-title": "Change due date",
"editLabelPopup-title": "Редактирование метки",
+ "editNotificationPopup-title": "Edit Notification",
"editProfilePopup-title": "Изменить профиль",
"email": "Эл.почта",
"email-enrollAccount-subject": "Аккаунт создан для вас здесь __url__",
@@ -134,9 +173,9 @@
"email-invite-text": "Дорогой __user__,\n\n__inviter__ пригласил вас на доску \"__board__\" для сотрудничества.\n\nПожайлуйста проследуйте по ссылке:\n\n__url__\n\nСпасибо.",
"email-resetPassword-subject": "Перейдите по ссылке, чтобы сбросить пароль __url__",
"email-resetPassword-text": "Привет __user__,\n\nДля сброса пароля перейдите по ссылке.\n\n__url__\n\nThanks.",
+ "email-sent": "Email отправлен",
"email-verifyEmail-subject": "Подтвердите Email перейдя по ссылке __url__",
"email-verifyEmail-text": "Привет __user__,\n\nДля подтверждения Email перейдите по ссылке.\n\n__url__\n\nСпасибо.",
- "email-sent": "Email отправлен",
"error-board-doesNotExist": "Доска не найдена",
"error-board-notAdmin": "Вы должны обладать правами админстратора, чтобы сделать это",
"error-board-notAMember": "Вы должны быть пользователем доски, чтобы сделать это",
@@ -146,26 +185,34 @@
"error-user-doesNotExist": "Пользователь не найден",
"error-user-notAllowSelf": "Нельзя выполнить это действие на себе",
"error-user-notCreated": "Пользователь не создан",
+ "error-username-taken": "This username is already taken",
+ "export-board": "Export board",
"filter": "Фильтр",
"filter-cards": "Фильтр карточек",
"filter-clear": "Очистить фильтр",
+ "filter-no-label": "No label",
+ "filter-no-member": "No member",
"filter-on": "Filter is on",
"filter-on-desc": "Показываются карточки, соответствующие настройкам фильтра. Нажмите для редактирования.",
"filter-to-selection": "Filter to selection",
"fullname": "Полное имя",
"header-logo-title": "Вернуться к доскам.",
+ "hide-system-messages": "Hide system messages",
+ "headerBarCreateBoardPopup-title": "Создать доску",
"home": "Главная",
"import": "Импорт",
"import-board": "Импорт с Trello",
+ "import-board-title": "Import board from Trello",
"import-board-trello-instruction": "На вашей Trello доске нажмите “Menu” - “More” - “Print and export - “Export JSON” и скопируйте полученный текст",
- "import-card": "Импортировать карточку Trello",
- "import-card-trello-instruction": "Перейдите в карточку Trello, выбирите “Share and more” - “Export JSON” и скопируйте полученный текст",
"import-json-placeholder": "Вставьте JSON сюда",
- "import-members-map": "Вы ипортировали доску с пользователями. Пожалуйста, составьте карту пользователей, которых вы хотите импортировать в Wekan пользователей ",
+ "import-map-members": "Map members",
+ "import-members-map": "Вы ипортировали доску с пользователями. Пожалуйста, составьте карту пользователей, которых вы хотите импортировать в Wekan пользователей",
"import-show-user-mapping": "Пересмотреть карту пользователей",
"import-user-select": "Выберите Wekan-пользователя, которого вы хотите использовать в качестве пользователя",
+ "importMapMembersAddPopup-title": "Select Wekan member",
"info": "Информация",
"initials": "Инициалы",
+ "invalid-date": "Invalid date",
"joined": "вступил",
"just-invited": "Вы только пригласили на эту доску",
"keyboard-shortcuts": "Сочетания клавиш",
@@ -185,15 +232,20 @@
"listImportCardPopup-title": "Импортировать Trello карточку",
"lists": "Списки",
"log-out": "Выйти",
+ "log-in": "Войти",
"loginPopup-title": "Войти",
- "mapMembersPopup-title": "Карта пользователей",
- "mapMembersAddPopup-title": "Выбрать Wekan пользователя",
"memberMenuPopup-title": "Настройки пользователя",
"members": "Участники",
"menu": "Меню",
+ "move-selection": "Move selection",
"moveCardPopup-title": "Переместить карточку",
+ "moveCardToBottom-title": "Move to Bottom",
+ "moveCardToTop-title": "Move to Top",
+ "moveSelectionPopup-title": "Move selection",
"multi-selection": "Выбрать несколько",
"multi-selection-on": "Выбрать несколько из",
+ "muted": "Muted",
+ "muted-info": "You will never be notified of any changes in this board",
"my-boards": "Мои доски",
"name": "Имя",
"no-archived-cards": "Нет карточек в архиве.",
@@ -202,15 +254,18 @@
"normal": "Обычный",
"normal-desc": "Может редактировать карточки. Не может управлять настройками.",
"not-accepted-yet": "Приглашение еще не принято",
+ "notify-participate": "Receive updates to any cards you participate as creater or member",
+ "notify-watch": "Receive updates to any boards, lists, or cards you’re watching",
"optional": "не обязательно",
"or": "или",
"page-maybe-private": "Возможно, эта страница скрыта от незарегистрированных пользователей. Попробуйте <a href='%s'>войти на сайт</a>.",
"page-not-found": "Страница не найдена.",
"password": "Пароль",
"paste-or-dragdrop": "вставьте, или перетащите файл с изображением сюда (только графический фай)",
+ "participating": "Participating",
"preview": "Предпросмотр",
- "previewClipboardImagePopup-title": "Предпросмотр",
"previewAttachedImagePopup-title": "Предпросмотр",
+ "previewClipboardImagePopup-title": "Предпросмотр",
"private": "Закрытая",
"private-desc": "Эта доска с ограниченным доступом. Только участники могут работать с ней.",
"profile": "Профиль",
@@ -220,6 +275,7 @@
"remove-cover": "Открепить",
"remove-from-board": "Удалить с доски",
"remove-label": "Удалить метку",
+ "remove-list": "Remove the list",
"remove-member": "Удалить участника",
"remove-member-from-card": "Удалить из карточки",
"remove-member-pop": "Удалить участника __name__ (__username__) из доски __boardTitle__? Участник будет удален из всех карточек. Также он получит уведомление о совершаемом действии.",
@@ -239,22 +295,55 @@
"shortcut-show-shortcuts": "Поднять список ярлыков",
"shortcut-toggle-filterbar": "Переместить фильтр на бововую панель",
"shortcut-toggle-sidebar": "Переместить доску на боковую панель",
+ "show-cards-minimum-count": "Show cards count if list contains more than",
+ "sidebar-open": "Open Sidebar",
+ "sidebar-close": "Close Sidebar",
"signupPopup-title": "Создать учетную запись",
"star-board-title": "Добавить в «Избранное». Эта доска будет всегда на виду.",
"starred-boards": "Добавленные в «Избранное»",
- "starred-boards-description": "",
+ "starred-boards-description": "Starred boards show up at the top of your boards list.",
"subscribe": "Подписаться",
"team": "Участники",
"this-board": "эту доску",
"this-card": "текущая карточка",
+ "time": "Time",
"title": "Название",
+ "tracking": "Tracking",
+ "tracking-info": "You will be notified of any changes to those cards you are involved as creator or member.",
"unassign-member": "Отменить назначение пользователя",
"unsaved-description": "У вас есть несохраненное описание.",
+ "unwatch": "Unwatch",
"upload": "Загрзуить",
"upload-avatar": "Загрузить аватар",
"uploaded-avatar": "Загруженный аватар",
"username": "Имя пользователя",
"view-it": "Просмотреть",
"warn-list-archived": "Внимание: Данная карточка находится в списке архива",
- "what-to-do": "Что вы хотите сделать?"
-}
+ "watch": "Watch",
+ "watching": "Watching",
+ "watching-info": "You will be notified of any change in this board",
+ "welcome-board": "Welcome Board",
+ "welcome-list1": "Basics",
+ "welcome-list2": "Advanced",
+ "what-to-do": "Что вы хотите сделать?",
+ "admin-panel": "Admin Panel",
+ "settings": "Настройки",
+ "people": "People",
+ "registration": "Registration",
+ "disable-self-registration": "Disable Self-Registration",
+ "invite": "Invite",
+ "invite-people": "Invite People",
+ "to-boards": "To board(s)",
+ "email-addresses": "Email Addresses",
+ "smtp-host-description": "The address of the SMTP server that handles your emails.",
+ "smtp-port-description": "The port your SMTP server uses for outgoing emails.",
+ "smtp-host": "SMTP Host",
+ "smtp-port": "SMTP Port",
+ "smtp-username": "Имя пользователя",
+ "smtp-password": "Пароль",
+ "send-from": "From",
+ "invitation-code": "Invitation Code",
+ "email-invite-register-subject": "__inviter__ прислал вам приглашение",
+ "email-invite-register-text": "Dear __user__,\n\n__inviter__ invites you to Wekan for collaborations.\n\nPlease follow the link below:\n__url__\n\nAnd your invitation code is: __icode__\n\nThanks.",
+ "error-invitation-code-not-exist": "Invitation code doesn't exist"
+} \ No newline at end of file
diff --git a/i18n/sr.i18n.json b/i18n/sr.i18n.json
new file mode 100644
index 00000000..bd920013
--- /dev/null
+++ b/i18n/sr.i18n.json
@@ -0,0 +1,349 @@
+{
+ "accept": "Prihvati",
+ "act-activity-notify": "[Wekan] Obaveštenje o aktivnostima",
+ "act-addAttachment": "attached __attachment__ to __card__",
+ "act-addComment": "commented on __card__: __comment__",
+ "act-createBoard": "created __board__",
+ "act-createCard": "added __card__ to __list__",
+ "act-createList": "added __list__ to __board__",
+ "act-addBoardMember": "added __member__ to __board__",
+ "act-archivedBoard": "archived __board__",
+ "act-archivedCard": "archived __card__",
+ "act-archivedList": "archived __list__",
+ "act-importBoard": "imported __board__",
+ "act-importCard": "imported __card__",
+ "act-importList": "imported __list__",
+ "act-joinMember": "added __member__ to __card__",
+ "act-moveCard": "moved __card__ from __oldList__ to __list__",
+ "act-removeBoardMember": "removed __member__ from __board__",
+ "act-restoredCard": "restored __card__ to __board__",
+ "act-unjoinMember": "removed __member__ from __card__",
+ "act-withBoardTitle": "[Wekan] __board__",
+ "act-withCardTitle": "[__board__] __card__",
+ "actions": "Akcije",
+ "activities": "Aktivnosti",
+ "activity": "Aktivnost",
+ "activity-added": "dodao %s u %s",
+ "activity-archived": "arhivirao %s",
+ "activity-attached": "prikačio %s u %s",
+ "activity-created": "kreirao %s",
+ "activity-excluded": "izuzmi %s iz %s",
+ "activity-imported": "uvezao %s u %s iz %s",
+ "activity-imported-board": "uvezao %s iz %s",
+ "activity-joined": "spojio %s",
+ "activity-moved": "premestio %s iz %s u %s",
+ "activity-on": "na %s",
+ "activity-removed": "uklonio %s iz %s",
+ "activity-sent": "poslao %s %s-u",
+ "activity-unjoined": "rastavio %s",
+ "activity-checklist-added": "lista je dodata u %s",
+ "add": "Dodaj",
+ "add-attachment": "Dodaj dokument",
+ "add-board": "Dodaj novu tablu",
+ "add-card": "Dodaj karticu",
+ "add-checklist": "Dodaj listu",
+ "add-checklist-item": "Dodaj novu stavku u listu",
+ "add-cover": "Dodaj zaglavlje",
+ "add-label": "Dodaj natpis",
+ "add-list": "Dodaj listu",
+ "add-members": "Dodaj Članove",
+ "added": "Dodao",
+ "addMemberPopup-title": "Članovi",
+ "admin": "Administrator",
+ "admin-desc": "Može da pregleda i menja kartice, uklanja članove i menja podešavanja table",
+ "all-boards": "Sve table",
+ "and-n-other-card": "And __count__ other card",
+ "and-n-other-card_plural": "And __count__ other cards",
+ "apply": "Primeni",
+ "app-is-offline": "Aplikacija je trenutno van mreže, ponovno učitavanje stranice će dovesti do gubitka podataka.",
+ "archive": "Arhiviraj",
+ "archive-all": "Arhiviraj sve",
+ "archive-board": "Arhiviraj tablu",
+ "archive-card": "Arhiviraj karticu",
+ "archive-list": "Arhiviraj ovu listu",
+ "archive-selection": "Arhiviraj izabrano",
+ "archiveBoardPopup-title": "Da arhiviram tablu ?",
+ "archived-items": "Arhivirane stavke",
+ "archives": "Arhive",
+ "assign-member": "Dodeli člana",
+ "attached": "Prikačeno",
+ "attachment": "Prikačeni dokument",
+ "attachment-delete-pop": "Brisanje prikačenog dokumenta je trajno. Ne postoji vraćanje obrisanog.",
+ "attachmentDeletePopup-title": "Obrisati prikačeni dokument ?",
+ "attachments": "Prikačeni dokumenti",
+ "auto-watch": "Automatski prati tablu kad je kreiraš",
+ "avatar-too-big": "Avatar je prevelik (maksimum je 70Kb)",
+ "back": "Nazad",
+ "board-change-color": "Promeni boju",
+ "board-nb-stars": "%s zvezdice",
+ "board-not-found": "Tabla nije pronađena",
+ "board-private-info": "Ova tabla će biti <strong>privatna<strong>.",
+ "board-public-info": "Ova tabla će biti <strong>javna<strong>.",
+ "boardChangeColorPopup-title": "Promeni pozadinu table",
+ "boardChangeTitlePopup-title": "Preimenuj tablu",
+ "boardChangeVisibilityPopup-title": "Promeni Vidljivost",
+ "boardChangeWatchPopup-title": "Change Watch",
+ "boardMenuPopup-title": "Meni table",
+ "boards": "Table",
+ "bucket-example": "Na primer \"Lista zadataka\"",
+ "cancel": "Otkaži",
+ "card-archived": "Ova kartica je arhivirana",
+ "card-comments-title": "Ova kartica ima %s komentar.",
+ "card-delete-notice": "Brisanje je trajno. Izgubićeš sve akcije povezane sa ovom karticom.",
+ "card-delete-pop": "Sve akcije će biti uklonjene sa liste aktivnosti i kartica neće moći biti ponovo otvorena. Nema vraćanja unazad.",
+ "card-delete-suggest-archive": "You can archive a card to remove it from the board and preserve the activity.",
+ "card-due": "Krajnji datum",
+ "card-due-on": "Završava se",
+ "card-edit-attachments": "Uredi priloge",
+ "card-edit-labels": "Uredi natpise",
+ "card-edit-members": "Uredi članove",
+ "card-labels-title": "Promeni natpis na kartici.",
+ "card-members-title": "Dodaj ili ukloni članove table sa kartice.",
+ "card-start": "Početak",
+ "card-start-on": "Počinje",
+ "cardAttachmentsPopup-title": "Attach From",
+ "cardDeletePopup-title": "Delete Card?",
+ "cardDetailsActionsPopup-title": "Card Actions",
+ "cardLabelsPopup-title": "Labels",
+ "cardMembersPopup-title": "Članovi",
+ "cardMorePopup-title": "More",
+ "cards": "Cards",
+ "change": "Change",
+ "change-avatar": "Change Avatar",
+ "change-password": "Change Password",
+ "change-permissions": "Change permissions",
+ "change-settings": "Izmeni podešavanja",
+ "changeAvatarPopup-title": "Change Avatar",
+ "changeLanguagePopup-title": "Change Language",
+ "changePasswordPopup-title": "Change Password",
+ "changePermissionsPopup-title": "Change Permissions",
+ "changeSettingsPopup-title": "Izmeni podešavanja",
+ "checklists": "Liste",
+ "click-to-star": "Click to star this board.",
+ "click-to-unstar": "Click to unstar this board.",
+ "clipboard": "Clipboard or drag & drop",
+ "close": "Close",
+ "close-board": "Close Board",
+ "close-board-pop": "You will be able to restore the board by clicking the “Archives” button from the home header.",
+ "color-black": "black",
+ "color-blue": "blue",
+ "color-green": "green",
+ "color-lime": "lime",
+ "color-orange": "orange",
+ "color-pink": "pink",
+ "color-purple": "purple",
+ "color-red": "red",
+ "color-sky": "sky",
+ "color-yellow": "yellow",
+ "comment": "Comment",
+ "comment-placeholder": "Write a comment",
+ "comment-only": "Limited",
+ "comment-only-desc": "Can comment on cards only.",
+ "computer": "Computer",
+ "create": "Create",
+ "createBoardPopup-title": "Create Board",
+ "createLabelPopup-title": "Create Label",
+ "current": "current",
+ "date": "Datum",
+ "decline": "Decline",
+ "default-avatar": "Default avatar",
+ "delete": "Delete",
+ "deleteLabelPopup-title": "Delete Label?",
+ "description": "Description",
+ "disambiguateMultiLabelPopup-title": "Disambiguate Label Action",
+ "disambiguateMultiMemberPopup-title": "Disambiguate Member Action",
+ "discard": "Discard",
+ "done": "Done",
+ "download": "Download",
+ "edit": "Edit",
+ "edit-avatar": "Change Avatar",
+ "edit-profile": "Edit Profile",
+ "editCardStartDatePopup-title": "Izmeni početni datum",
+ "editCardDueDatePopup-title": "Izmeni krajnji datum",
+ "editLabelPopup-title": "Change Label",
+ "editNotificationPopup-title": "Izmeni notifikaciju",
+ "editProfilePopup-title": "Edit Profile",
+ "email": "Email",
+ "email-enrollAccount-subject": "An account created for you on __siteName__",
+ "email-enrollAccount-text": "Hello __user__,\n\nTo start using the service, simply click the link below.\n\n__url__\n\nThanks.",
+ "email-fail": "Sending email failed",
+ "email-invalid": "Invalid email",
+ "email-invite": "Invite via Email",
+ "email-invite-subject": "__inviter__ sent you an invitation",
+ "email-invite-text": "Dear __user__,\n\n__inviter__ invites you to join board \"__board__\" for collaborations.\n\nPlease follow the link below:\n\n__url__\n\nThanks.",
+ "email-resetPassword-subject": "Reset your password on __siteName__",
+ "email-resetPassword-text": "Hello __user__,\n\nTo reset your password, simply click the link below.\n\n__url__\n\nThanks.",
+ "email-sent": "Email sent",
+ "email-verifyEmail-subject": "Verify your email address on __siteName__",
+ "email-verifyEmail-text": "Hello __user__,\n\nTo verify your account email, simply click the link below.\n\n__url__\n\nThanks.",
+ "error-board-doesNotExist": "This board does not exist",
+ "error-board-notAdmin": "You need to be admin of this board to do that",
+ "error-board-notAMember": "You need to be a member of this board to do that",
+ "error-json-malformed": "Your text is not valid JSON",
+ "error-json-schema": "Your JSON data does not include the proper information in the correct format",
+ "error-list-doesNotExist": "This list does not exist",
+ "error-user-doesNotExist": "This user does not exist",
+ "error-user-notAllowSelf": "This action on self is not allowed",
+ "error-user-notCreated": "This user is not created",
+ "error-username-taken": "Korisničko ime je već zauzeto",
+ "export-board": "Export board",
+ "filter": "Filter",
+ "filter-cards": "Filter Cards",
+ "filter-clear": "Clear filter",
+ "filter-no-label": "Nema oznake",
+ "filter-no-member": "Nema člana",
+ "filter-on": "Filter is on",
+ "filter-on-desc": "You are filtering cards on this board. Click here to edit filter.",
+ "filter-to-selection": "Filter to selection",
+ "fullname": "Full Name",
+ "header-logo-title": "Go back to your boards page.",
+ "hide-system-messages": "Sakrij sistemske poruke",
+ "headerBarCreateBoardPopup-title": "Create Board",
+ "home": "Home",
+ "import": "Import",
+ "import-board": "import from Trello",
+ "import-board-title": "Uvezi tablu iz Trella",
+ "import-board-trello-instruction": "In your Trello board, go to 'Menu', then 'More', 'Print and Export', 'Export JSON', and copy the resulting text",
+ "import-json-placeholder": "Paste your valid JSON data here",
+ "import-map-members": "Mapiraj članove",
+ "import-members-map": "Your imported board has some members. Please map the members you want to import to Wekan users",
+ "import-show-user-mapping": "Review members mapping",
+ "import-user-select": "Pick the Wekan user you want to use as this member",
+ "importMapMembersAddPopup-title": "Izaberi člana Wekan-a",
+ "info": "Infos",
+ "initials": "Initials",
+ "invalid-date": "Neispravan datum",
+ "joined": "joined",
+ "just-invited": "You are just invited to this board",
+ "keyboard-shortcuts": "Keyboard shortcuts",
+ "label-create": "Create a new label",
+ "label-default": "%s label (default)",
+ "label-delete-pop": "There is no undo. This will remove this label from all cards and destroy its history.",
+ "labels": "Labels",
+ "language": "Language",
+ "last-admin-desc": "You can’t change roles because there must be at least one admin.",
+ "leave-board": "Leave Board",
+ "link-card": "Link to this card",
+ "list-archive-cards": "Archive all cards in this list",
+ "list-archive-cards-pop": "This will remove all the cards in this list from the board. To view archived cards and bring them back to the board, click “Menu” > “Archived Items”.",
+ "list-move-cards": "Move all cards in this list",
+ "list-select-cards": "Select all cards in this list",
+ "listActionPopup-title": "List Actions",
+ "listImportCardPopup-title": "Import a Trello card",
+ "lists": "Lists",
+ "log-out": "Log Out",
+ "log-in": "Log In",
+ "loginPopup-title": "Log In",
+ "memberMenuPopup-title": "Member Settings",
+ "members": "Članovi",
+ "menu": "Menu",
+ "move-selection": "Move selection",
+ "moveCardPopup-title": "Move Card",
+ "moveCardToBottom-title": "Premesti na dno",
+ "moveCardToTop-title": "Premesti na vrh",
+ "moveSelectionPopup-title": "Move selection",
+ "multi-selection": "Multi-Selection",
+ "multi-selection-on": "Multi-Selection is on",
+ "muted": "Utišano",
+ "muted-info": "Nećete biti obavešteni o promenama u ovoj tabli",
+ "my-boards": "My Boards",
+ "name": "Name",
+ "no-archived-cards": "No archived cards.",
+ "no-archived-lists": "No archived lists.",
+ "no-results": "Nema rezultata",
+ "normal": "Normalno",
+ "normal-desc": "Can view and edit cards. Can't change settings.",
+ "not-accepted-yet": "Invitation not accepted yet",
+ "notify-participate": "Receive updates to any cards you participate as creater or member",
+ "notify-watch": "Budite obavešteni o novim događajima u tablama, listama ili karticama koje pratite.",
+ "optional": "opciono",
+ "or": "ili",
+ "page-maybe-private": "This page may be private. You may be able to view it by <a href='%s'>logging in</a>.",
+ "page-not-found": "Stranica nije pronađena.",
+ "password": "Lozinka",
+ "paste-or-dragdrop": "to paste, or drag & drop image file to it (image only)",
+ "participating": "Učestvujem",
+ "preview": "Prikaz",
+ "previewAttachedImagePopup-title": "Prikaz",
+ "previewClipboardImagePopup-title": "Prikaz",
+ "private": "Privatno",
+ "private-desc": "This board is private. Only people added to the board can view and edit it.",
+ "profile": "Profil",
+ "public": "Javno",
+ "public-desc": "This board is public. It's visible to anyone with the link and will show up in search engines like Google. Only people added to the board can edit.",
+ "quick-access-description": "Star a board to add a shortcut in this bar.",
+ "remove-cover": "Remove Cover",
+ "remove-from-board": "Ukloni iz table",
+ "remove-label": "Ukloni natpis",
+ "remove-list": "Ukloni listu",
+ "remove-member": "Ukloni člana",
+ "remove-member-from-card": "Ukloni iz kartice",
+ "remove-member-pop": "Remove __name__ (__username__) from __boardTitle__? The member will be removed from all cards on this board. They will receive a notification.",
+ "removeMemberPopup-title": "Ukloni člana ?",
+ "rename": "Preimenuj",
+ "rename-board": "Preimenuj tablu",
+ "restore": "Oporavi",
+ "save": "Snimi",
+ "search": "Pretraga",
+ "select-color": "Izaberi boju",
+ "shortcut-assign-self": "Pridruži sebe trenutnoj kartici",
+ "shortcut-autocomplete-emoji": "Autocomplete emoji",
+ "shortcut-autocomplete-members": "Sam popuni članove",
+ "shortcut-clear-filters": "Očisti sve filtere",
+ "shortcut-close-dialog": "Zatvori dijalog",
+ "shortcut-filter-my-cards": "Filtriraj kartice",
+ "shortcut-show-shortcuts": "Prikaži ovu listu prečica",
+ "shortcut-toggle-filterbar": "Uključi ili isključi bočni meni filtera",
+ "shortcut-toggle-sidebar": "Uključi ili isključi bočni meni table",
+ "show-cards-minimum-count": "Show cards count if list contains more than",
+ "sidebar-open": "Open Sidebar",
+ "sidebar-close": "Close Sidebar",
+ "signupPopup-title": "Kreiraj nalog",
+ "star-board-title": "Klikni da označiš zvezdicom ovu tablu. Pokazaće se na vrhu tvoje liste tabli.",
+ "starred-boards": "Table sa zvezdicom",
+ "starred-boards-description": "Table sa zvezdicom se pokazuju na vrhu liste tabli.",
+ "subscribe": "Pretplati se",
+ "team": "Tim",
+ "this-board": "ova tabla",
+ "this-card": "ova kartica",
+ "time": "Vreme",
+ "title": "Naslov",
+ "tracking": "Praćenje",
+ "tracking-info": "You will be notified of any changes to those cards you are involved as creator or member.",
+ "unassign-member": "Unassign member",
+ "unsaved-description": "Imaš nesnimljen opis.",
+ "unwatch": "Ne posmatraj",
+ "upload": "Upload",
+ "upload-avatar": "Upload an avatar",
+ "uploaded-avatar": "Uploaded an avatar",
+ "username": "Korisničko ime",
+ "view-it": "Pregledaj je",
+ "warn-list-archived": "upozorenje: ova kartica je u arhiviranoj listi",
+ "watch": "Posmatraj",
+ "watching": "Posmatranje",
+ "watching-info": "Bićete obavešteni o promenama u ovoj tabli",
+ "welcome-board": "Tabla dobrodošlice",
+ "welcome-list1": "Osnove",
+ "welcome-list2": "Napredno",
+ "what-to-do": "Šta želiš da uradiš ?",
+ "admin-panel": "Admin Panel",
+ "settings": "Settings",
+ "people": "People",
+ "registration": "Registration",
+ "disable-self-registration": "Disable Self-Registration",
+ "invite": "Invite",
+ "invite-people": "Invite People",
+ "to-boards": "To board(s)",
+ "email-addresses": "Email Addresses",
+ "smtp-host-description": "The address of the SMTP server that handles your emails.",
+ "smtp-port-description": "The port your SMTP server uses for outgoing emails.",
+ "smtp-host": "SMTP Host",
+ "smtp-port": "SMTP Port",
+ "smtp-username": "Korisničko ime",
+ "smtp-password": "Lozinka",
+ "send-from": "From",
+ "invitation-code": "Invitation Code",
+ "email-invite-register-subject": "__inviter__ sent you an invitation",
+ "email-invite-register-text": "Dear __user__,\n\n__inviter__ invites you to Wekan for collaborations.\n\nPlease follow the link below:\n__url__\n\nAnd your invitation code is: __icode__\n\nThanks.",
+ "error-invitation-code-not-exist": "Invitation code doesn't exist"
+} \ No newline at end of file
diff --git a/i18n/th.i18n.json b/i18n/th.i18n.json
new file mode 100644
index 00000000..bd07a3b2
--- /dev/null
+++ b/i18n/th.i18n.json
@@ -0,0 +1,349 @@
+{
+ "accept": "ยอมรับ",
+ "act-activity-notify": "[Wekan] แจ้งกิจกรรม",
+ "act-addAttachment": "แนบไฟล์ __attachment__ ไปยัง __card__",
+ "act-addComment": "ออกความเห็นที่ __card__: __comment__",
+ "act-createBoard": "สร้าง __board__",
+ "act-createCard": "เพิ่ม __card__ ไปยัง __list__",
+ "act-createList": "เพิ่ม __list__ ไปยัง __board__",
+ "act-addBoardMember": "เพิ่ม __member__ ไปยัง __board__",
+ "act-archivedBoard": "เก็บ __board__ ไว้",
+ "act-archivedCard": "เก็บ __card__ ไว้",
+ "act-archivedList": "เก็บ __list__ ไว้",
+ "act-importBoard": "นำเข้า __board__",
+ "act-importCard": "นำเข้า __card__",
+ "act-importList": "นำเข้า __list__",
+ "act-joinMember": "เพิ่ม __member__ ไปยัง __card__",
+ "act-moveCard": "ย้าย __card__ จาก __oldList__ ไป __list__",
+ "act-removeBoardMember": "ลบ __member__ จาก __board__",
+ "act-restoredCard": "กู้คืน __card__ ไปยัง __board__",
+ "act-unjoinMember": "ลบ __member__ จาก __card__",
+ "act-withBoardTitle": "[Wekan] __board__",
+ "act-withCardTitle": "[__board__] __card__",
+ "actions": "ปฎิบัติการ",
+ "activities": "กิจกรรม",
+ "activity": "กิจกรรม",
+ "activity-added": "เพิ่ม %s ไปยัง %s",
+ "activity-archived": "เก็บ %s ไว้",
+ "activity-attached": "แนบ %s ไปยัง %s",
+ "activity-created": "สร้าง %s",
+ "activity-excluded": "ยกเว้น %s จาก %s",
+ "activity-imported": "ถูกนำเข้า %s ไปยัง %s จาก %s",
+ "activity-imported-board": "นำเข้า %s จาก %s",
+ "activity-joined": "เข้าร่วม %s",
+ "activity-moved": "ย้าย %s จาก %s ถึง %s",
+ "activity-on": "บน %s",
+ "activity-removed": "ลบ %s จาด %s",
+ "activity-sent": "ส่ง %s ถึง %s",
+ "activity-unjoined": "ยกเลิกเข้าร่วม %s",
+ "activity-checklist-added": "รายการถูกเพิ่มไป %s",
+ "add": "เพิ่ม",
+ "add-attachment": "เพิ่มสิ่งที่แนบ",
+ "add-board": "เพิ่มบอร์ดใหม่",
+ "add-card": "เพิ่มการ์ด",
+ "add-checklist": "เพิ่มรายการ",
+ "add-checklist-item": "เพิ่มรายการตรวจสอบ",
+ "add-cover": "เพิ่มหน้าปก",
+ "add-label": "เพิ่มป้ายกำกับ",
+ "add-list": "เพิ่มรายการ",
+ "add-members": "เพิ่มสมาชิก",
+ "added": "เพิ่ม",
+ "addMemberPopup-title": "สมาชิก",
+ "admin": "ผู้ดูแลระบบ",
+ "admin-desc": "สามารถดูและแก้ไขการ์ด ลบสมาชิก และเปลี่ยนการตั้งค่าบอร์ดได้",
+ "all-boards": "บอร์ดทั้งหมด",
+ "and-n-other-card": "และการ์ดอื่น __count__",
+ "and-n-other-card_plural": "และการ์ดอื่น ๆ __count__",
+ "apply": "นำมาใช้",
+ "app-is-offline": "ตอนนี้เว็บกำลังออฟไลน์, การรีเฟรชหน้าจะทำให้เกิดการสูญเสียข้อมูล",
+ "archive": "เอกสารที่เก็บไว้",
+ "archive-all": "เอกสารที่เก็บไว้ทั้งหมด",
+ "archive-board": "เอกสารบอร์ดที่เก็บไว้",
+ "archive-card": "เอกสารการ์ดที่เก็บไว้",
+ "archive-list": "เก็บเอกสารนี้",
+ "archive-selection": "คัดเลือกเอกสาร",
+ "archiveBoardPopup-title": "เก็บบอร์ดนี้หรือไม่",
+ "archived-items": "เก็บไว้ถาวร",
+ "archives": "เอกสารสำคัญ",
+ "assign-member": "กำหนดสมาชิก",
+ "attached": "แนบมาด้วย",
+ "attachment": "สิ่งที่แนบมา",
+ "attachment-delete-pop": "ลบสิ่งที่แนบมาถาวร ไม่สามารถเลิกทำได้",
+ "attachmentDeletePopup-title": "ลบสิ่งที่แนบมาหรือไม่",
+ "attachments": "สิ่งที่แนบมา",
+ "auto-watch": "ดูบอร์ดโดยปริยายเมื่อมันถูกสร้าง",
+ "avatar-too-big": "ภาพมีขนาดใหญ่เกินไป (สูงสุด 70Kb )",
+ "back": "ย้อนกลับ",
+ "board-change-color": "เปลี่ยนสี",
+ "board-nb-stars": "ติดดาว %s",
+ "board-not-found": "ไม่มีบอร์ด",
+ "board-private-info": "บอร์ดนี้จะเป็น <strong>ส่วนตัว</strong>.",
+ "board-public-info": "บอร์ดนี้จะเป็น <strong>สาธารณะ</strong>.",
+ "boardChangeColorPopup-title": "เปลี่ยนสีพื้นหลังบอร์ด",
+ "boardChangeTitlePopup-title": "เปลี่ยนชื่อบอร์ด",
+ "boardChangeVisibilityPopup-title": "เปลี่ยนการเข้าถึง",
+ "boardChangeWatchPopup-title": "เปลี่ยนการเฝ้าดู",
+ "boardMenuPopup-title": "เมนูบอร์ด",
+ "boards": "บอร์ด",
+ "bucket-example": "ตัวอย่างเช่น “ระบบที่ต้องทำ”",
+ "cancel": "ยกเลิก",
+ "card-archived": "การ์ดนี้ถูกเก็บไว้",
+ "card-comments-title": "การ์ดนี้มี %s ความเห็น.",
+ "card-delete-notice": "เป็นการลบถาวร คุณจะสูญเสียข้อมูลที่เกี่ยวข้องกับการ์ดนี้ทั้งหมด",
+ "card-delete-pop": "การดำเนินการทั้งหมดจะถูกลบจาก feed กิจกรรมและคุณไม่สามารถเปิดได้อีกครั้งหรือยกเลิกการทำ",
+ "card-delete-suggest-archive": "คุณสามารถเก็บการ์ดที่จะเอาออกจากบอร์ดนี้และยังคงเก็บกิจกรรม",
+ "card-due": "ครบกำหนด",
+ "card-due-on": "ครบกำหนดเมื่อ",
+ "card-edit-attachments": "แก้ไขสิ่งที่แนบมา",
+ "card-edit-labels": "แก้ไขป้ายกำกับ",
+ "card-edit-members": "แก้ไขสมาชิก",
+ "card-labels-title": "เปลี่ยนป้ายกำกับของการ์ด",
+ "card-members-title": "เพิ่มหรือลบสมาชิกของบอร์ดจากการ์ด",
+ "card-start": "เริ่ม",
+ "card-start-on": "เริ่มเมื่อ",
+ "cardAttachmentsPopup-title": "แนบจาก",
+ "cardDeletePopup-title": "ลบการ์ดนี้หรือไม่",
+ "cardDetailsActionsPopup-title": "การดำเนินการการ์ด",
+ "cardLabelsPopup-title": "ป้ายกำกับ",
+ "cardMembersPopup-title": "สมาชิก",
+ "cardMorePopup-title": "เพิ่มเติม",
+ "cards": "การ์ด",
+ "change": "เปลี่ยน",
+ "change-avatar": "เปลี่ยนภาพ",
+ "change-password": "เปลี่ยนรหัสผ่าน",
+ "change-permissions": "เปลี่ยนสิทธิ์",
+ "change-settings": "เปลี่ยนการตั้งค่า",
+ "changeAvatarPopup-title": "เปลี่ยนภาพ",
+ "changeLanguagePopup-title": "เปลี่ยนภาษา",
+ "changePasswordPopup-title": "เปลี่ยนรหัสผ่าน",
+ "changePermissionsPopup-title": "เปลี่ยนสิทธิ์",
+ "changeSettingsPopup-title": "เปลี่ยนการตั้งค่า",
+ "checklists": "รายการตรวจสอบ",
+ "click-to-star": "คลิกดาวบอร์ดนี้",
+ "click-to-unstar": "คลิกยกเลิกดาวบอร์ดนี้",
+ "clipboard": "Clipboard หรือลากและวาง",
+ "close": "ปิด",
+ "close-board": "ปิดบอร์ด",
+ "close-board-pop": "คุณสามารถเรียกคืนบอร์ดนี้ด้วยการคลิกปุ่ม “เอกสารสำคัญ” เมนูหน้าแรก",
+ "color-black": "ดำ",
+ "color-blue": "น้ำเงิน",
+ "color-green": "เขียว",
+ "color-lime": "เหลืองมะนาว",
+ "color-orange": "ส้ม",
+ "color-pink": "ชมพู",
+ "color-purple": "ม่วง",
+ "color-red": "แดง",
+ "color-sky": "ฟ้า",
+ "color-yellow": "เหลือง",
+ "comment": "คอมเม็นต์",
+ "comment-placeholder": "ออกความเห็น",
+ "comment-only": "Limited",
+ "comment-only-desc": "Can comment on cards only.",
+ "computer": "คอมพิวเตอร์",
+ "create": "สร้าง",
+ "createBoardPopup-title": "สร้างบอร์ด",
+ "createLabelPopup-title": "สร้างป้ายกำกับ",
+ "current": "ปัจจุบัน",
+ "date": "วันที่",
+ "decline": "ปฎิเสธ",
+ "default-avatar": "ภาพเริ่มต้น",
+ "delete": "ลบ",
+ "deleteLabelPopup-title": "ลบป้ายกำกับนี้หรือไม่",
+ "description": "คำอธิบาย",
+ "disambiguateMultiLabelPopup-title": "การดำเนินการกำกับป้ายชัดเจน",
+ "disambiguateMultiMemberPopup-title": "การดำเนินการสมาชิกชัดเจน",
+ "discard": "ทิ้ง",
+ "done": "เสร็จสิ้น",
+ "download": "ดาวน์โหลด",
+ "edit": "แก้ไข",
+ "edit-avatar": "เปลี่ยนภาพ",
+ "edit-profile": "แก้ไขโปรไฟล์",
+ "editCardStartDatePopup-title": "เปลี่ยนวันเริ่มต้น",
+ "editCardDueDatePopup-title": "เปลี่ยนวันครบกำหนด",
+ "editLabelPopup-title": "เปลี่ยนป้ายกำกับ",
+ "editNotificationPopup-title": "แก้ไขการแจ้งเตือน",
+ "editProfilePopup-title": "แก้ไขโปรไฟล์",
+ "email": "อีเมล์",
+ "email-enrollAccount-subject": "บัญชีคุณถูกสร้างใน __siteName__",
+ "email-enrollAccount-text": "สวัสดี __user__,\n\nเริ่มใช้บริการง่าย ๆ , ด้วยการคลิกลิงค์ด้านล่าง.\n\n__url__\n\n ขอบคุณค่ะ",
+ "email-fail": "การส่งอีเมล์ล้มเหลว",
+ "email-invalid": "อีเมล์ไม่ถูกต้อง",
+ "email-invite": "เชิญผ่านทางอีเมล์",
+ "email-invite-subject": "__inviter__ ส่งคำเชิญให้คุณ",
+ "email-invite-text": "สวัสดี __user__,\n\n__inviter__ ขอเชิญคุณเข้าร่วม \"__board__\" เพื่อขอความร่วมมือ \n\n โปรดคลิกตามลิงค์ข้างล่างนี้ \n\n__url__\n\n ขอบคุณ",
+ "email-resetPassword-subject": "ตั้งรหัสผ่่านใหม่ของคุณบน __siteName__",
+ "email-resetPassword-text": "สวัสดี __user__,\n\nในการรีเซ็ตรหัสผ่านของคุณ, คลิกตามลิงค์ด้านล่าง \n\n__url__\n\nขอบคุณค่ะ",
+ "email-sent": "ส่งอีเมล์",
+ "email-verifyEmail-subject": "ยืนยันที่อยู่อีเม์ของคุณบน __siteName__",
+ "email-verifyEmail-text": "สวัสดี __user__,\n\nตรวจสอบบัญชีอีเมล์ของคุณ ง่าย ๆ ตามลิงค์ด้านล่าง \n\n__url__\n\n ขอบคุณค่ะ",
+ "error-board-doesNotExist": "บอร์ดนี้ไม่มีอยู่แล้ว",
+ "error-board-notAdmin": "คุณจะต้องเป็นผู้ดูแลระบบถึงจะทำสิ่งเหล่านี้ได้",
+ "error-board-notAMember": "คุณต้องเป็นสมาชิกของบอร์ดนี้ถึงจะทำได้",
+ "error-json-malformed": "ข้อความของคุณไม่ใช่ JSON",
+ "error-json-schema": "รูปแบบข้้้อมูล JSON ของคุณไม่ถูกต้อง",
+ "error-list-doesNotExist": "รายการนี้ไม่มีอยู่",
+ "error-user-doesNotExist": "ผู้ใช้นี้ไม่มีอยู่",
+ "error-user-notAllowSelf": "การดำเนินการเกี่ยวกับเรื่องนี้ด้วยตัวเองไม่ได้รับอนุญาต",
+ "error-user-notCreated": "ผู้ใช้รายนี้ไม่ได้สร้าง",
+ "error-username-taken": "ชื่อนี้ถูกใช้งานแล้ว",
+ "export-board": "ส่งออกกระดาน",
+ "filter": "กรอง",
+ "filter-cards": "กรองการ์ด",
+ "filter-clear": "ล้างตัวกรอง",
+ "filter-no-label": "ไม่มีฉลาก",
+ "filter-no-member": "ไม่มีสมาชิก",
+ "filter-on": "กรองบน",
+ "filter-on-desc": "คุณกำลังกรองการ์ดในบอร์ดนี้ คลิกที่นี่เพื่อแก้ไขตัวกรอง",
+ "filter-to-selection": "กรองตัวเลือก",
+ "fullname": "ชื่อ นามสกุล",
+ "header-logo-title": "ย้อนกลับไปที่หน้าบอร์ดของคุณ",
+ "hide-system-messages": "ซ่อนข้อความของระบบ",
+ "headerBarCreateBoardPopup-title": "สร้างบอร์ด",
+ "home": "หน้าหลัก",
+ "import": "นำเข้า",
+ "import-board": "นำเข้าจาก Trello",
+ "import-board-title": "นำเข้าบอร์ดจาก Trello",
+ "import-board-trello-instruction": "ใน Trello ของคุณให้ไปที่ 'Menu' และไปที่ More -> Print and Export -> Export JSON และคัดลอกข้อความจากนั้น",
+ "import-json-placeholder": "วางข้อมูล JSON ที่ถูกต้องของคุณที่นี่",
+ "import-map-members": "แผนที่สมาชิก",
+ "import-members-map": "Your imported board has some members. Please map the members you want to import to Wekan users",
+ "import-show-user-mapping": "Review การทำแผนที่สมาชิก",
+ "import-user-select": "เลือกผู้ใช้ Wekan ที่คุณต้องการใช้เป็นเหมือนสมาชิกนี้",
+ "importMapMembersAddPopup-title": "เลือกสมาชิก",
+ "info": "ข่าวสาร",
+ "initials": "ชื่อย่อ",
+ "invalid-date": "วันที่ไม่ถูกต้อง",
+ "joined": "เข้าร่วม",
+ "just-invited": "คุณพึ่งได้รับเชิญบอร์ดนี้",
+ "keyboard-shortcuts": "แป้นพิมพ์ลัด",
+ "label-create": "สร้างป้ายกำกับใหม่",
+ "label-default": "ป้าย %s (ค่าเริ่มต้น)",
+ "label-delete-pop": "ไม่มีการยกเลิกการทำนี้ ลบป้ายกำกับนี้จากทุกการ์ดและล้างประวัติทิ้ง",
+ "labels": "ป้ายกำกับ",
+ "language": "ภาษา",
+ "last-admin-desc": "คุณไม่สามารถเปลี่ยนบทบาทเพราะต้องมีผู้ดูแลระบบหนึ่งคนเป็นอย่างน้อย",
+ "leave-board": "ทิ้งบอร์ด",
+ "link-card": "เชื่อมโยงไปยังการ์ดใบนี้",
+ "list-archive-cards": "เก็บการ์ดทั้งหมดไว้ในรายการนี้",
+ "list-archive-cards-pop": "ลบการ์ดทั้งหมดในบอร์ด มันจะถูกนำไปเก็บไว้ที่เอกสารสำคัญ สามารถนำกลับมาใหม่ได้ด้วยการคลิก “เมนูบอร์ด” > “เก็บไว้ถาวร”.",
+ "list-move-cards": "ย้ายการ์ดทั้งหมดในรายการนี้",
+ "list-select-cards": "เลือกการ์ดทั้งหมดในรายการนี้",
+ "listActionPopup-title": "รายการการดำเนิน",
+ "listImportCardPopup-title": "นำเข้าการ์ด Trello",
+ "lists": "รายการ",
+ "log-out": "ออกจากระบบ",
+ "log-in": "เข้าสู่ระบบ",
+ "loginPopup-title": "เข้าสู่ระบบ",
+ "memberMenuPopup-title": "การตั้งค่า",
+ "members": "สมาชิก",
+ "menu": "เมนู",
+ "move-selection": "ย้ายตัวเลือก",
+ "moveCardPopup-title": "ย้ายการ์ด",
+ "moveCardToBottom-title": "ย้ายไปล่าง",
+ "moveCardToTop-title": "ย้ายไปบน",
+ "moveSelectionPopup-title": "เลือกย้าย",
+ "multi-selection": "เลือกหลายรายการ",
+ "multi-selection-on": "เลือกหลายรายการเมื่อ",
+ "muted": "ไม่ออกเสียง",
+ "muted-info": "คุณจะไม่ได้รับแจ้งการเปลี่ยนแปลงใด ๆ ในบอร์ดนี้",
+ "my-boards": "บอร์ดของฉัน",
+ "name": "ชื่อ",
+ "no-archived-cards": "ไม่มีการ์ดที่ถูกเก็บ",
+ "no-archived-lists": "ไม่มีรายการที่ถูกเก็บ",
+ "no-results": "ไม่มีข้อมูล",
+ "normal": "ธรรมดา",
+ "normal-desc": "สามารถดูและแก้ไขการ์ดได้ แต่ไม่สามารถเปลี่ยนการตั้งค่าได้",
+ "not-accepted-yet": "ยังไม่ยอมรับคำเชิญ",
+ "notify-participate": "ได้รับการแจ้งปรับปรุงการ์ดอื่น ๆ ที่คุณมีส่วนร่วมในฐานะผู้สร้างหรือสมาชิก",
+ "notify-watch": "ได้รับการแจ้งปรับปรุงบอร์ด รายการหรือการ์ดที่คุณเฝ้าติดตาม",
+ "optional": "ไม่จำเป็น",
+ "or": "หรือ",
+ "page-maybe-private": "หน้านี้อาจจะเป็นส่วนตัว. คุณอาจจะสามารถดูจาก <a href='%s'>logging in</a>.",
+ "page-not-found": "ไม่พบหน้า",
+ "password": "รหัสผ่าน",
+ "paste-or-dragdrop": "วาง หรือลากและวาง ไฟล์ภาพ(ภาพเท่านั้น)",
+ "participating": "Participating",
+ "preview": "ภาพตัวอย่าง",
+ "previewAttachedImagePopup-title": "ตัวอย่าง",
+ "previewClipboardImagePopup-title": "ตัวอย่าง",
+ "private": "ส่วนตัว",
+ "private-desc": "บอร์ดนี้เป็นส่วนตัว. คนที่ถูกเพิ่มเข้าในบอร์ดเท่านั้นที่สามารถดูและแก้ไขได้",
+ "profile": "โปรไฟล์",
+ "public": "สาธารณะ",
+ "public-desc": "บอร์ดนี้เป็นสาธารณะ. ทุกคนสามารถเข้าถึงได้ผ่าน url นี้ แต่สามารถแก้ไขได้เฉพาะผู้ที่ถูกเพิ่มเข้าไปในการ์ดเท่านั้น",
+ "quick-access-description": "เพิ่มไว้ในนี้เพื่อเป็นทางลัด",
+ "remove-cover": "ลบหน้าปก",
+ "remove-from-board": "ลบจากบอร์ด",
+ "remove-label": "ลบป้ายกำกับ",
+ "remove-list": "ลบรายการ",
+ "remove-member": "ลบสมาชิก",
+ "remove-member-from-card": "ลบจากการ์ด",
+ "remove-member-pop": "ลบ __name__ (__username__) จาก __boardTitle__ หรือไม่ สมาชิกจะถูกลบออกจากการ์ดทั้งหมดบนบอร์ดนี้ และพวกเขาจะได้รับการแจ้งเตือน",
+ "removeMemberPopup-title": "ลบสมาชิกหรือไม่",
+ "rename": "ตั้งชื่อใหม่",
+ "rename-board": "ตั้งชื่อบอร์ดใหม่",
+ "restore": "กู้คืน",
+ "save": "บันทึก",
+ "search": "ค้นหา",
+ "select-color": "เลือกสี",
+ "shortcut-assign-self": "กำหนดตัวเองให้การ์ดนี้",
+ "shortcut-autocomplete-emoji": "เติม emoji อัตโนมัติ",
+ "shortcut-autocomplete-members": "เติมสมาชิกอัตโนมัติ",
+ "shortcut-clear-filters": "ล้างตัวกรองทั้งหมด",
+ "shortcut-close-dialog": "ปิดหน้าต่าง",
+ "shortcut-filter-my-cards": "กรองการ์ดฉัน",
+ "shortcut-show-shortcuts": "นำรายการทางลัดนี้ขึ้น",
+ "shortcut-toggle-filterbar": "สลับแถบกรองสไลด์ด้้านข้าง",
+ "shortcut-toggle-sidebar": "สลับโชว์แถบด้านข้าง",
+ "show-cards-minimum-count": "แสดงจำนวนของการ์ดถ้ารายการมีมากกว่า(เลื่อนกำหนดตัวเลข)",
+ "sidebar-open": "เปิดแถบเลื่อน",
+ "sidebar-close": "ปิดแถบเลื่อน",
+ "signupPopup-title": "สร้างบัญชี",
+ "star-board-title": "คลิกติดดาวบอร์ดนี้ มันจะแสดงอยู่บนสุดของรายการบอร์ดของคุณ",
+ "starred-boards": "ติดดาวบอร์ด",
+ "starred-boards-description": "ติดดาวบอร์ดและแสดงไว้บนสุดของรายการบอร์ด",
+ "subscribe": "บอกรับสมาชิก",
+ "team": "ทีม",
+ "this-board": "บอร์ดนี้",
+ "this-card": "การ์ดนี้",
+ "time": "เวลา",
+ "title": "หัวข้อ",
+ "tracking": "ติดตาม",
+ "tracking-info": "คุณจะได้รับแจ้งการเปลี่ยนแปลงใด ๆ กับการ์ดที่คุณมีส่วนร่วมในฐานะผู้สร้างหรือสมาชิก",
+ "unassign-member": "ยกเลิกสมาชิก",
+ "unsaved-description": "คุณมีคำอธิบายที่ไม่ได้บันทึก",
+ "unwatch": "เลิกเฝ้าดู",
+ "upload": "อัพโหลด",
+ "upload-avatar": "อัพโหลดรูปภาพ",
+ "uploaded-avatar": "ภาพอัพโหลดแล้ว",
+ "username": "ชื่อผู้ใช้งาน",
+ "view-it": "ดู",
+ "warn-list-archived": "คำเตือน: การ์ดใบนี้อยู่ในรายชื่อที่เก็บไว้",
+ "watch": "เฝ้าดู",
+ "watching": "เฝ้าดู",
+ "watching-info": "คุณจะได้รับแจ้งหากมีการเปลี่ยนแปลงใด ๆ ในบอร์ดนี้",
+ "welcome-board": "ยินดีต้อนรับสู่บอร์ด",
+ "welcome-list1": "พื้นฐาน",
+ "welcome-list2": "ก้าวหน้า",
+ "what-to-do": "ต้องการทำอะไร",
+ "admin-panel": "Admin Panel",
+ "settings": "Settings",
+ "people": "People",
+ "registration": "Registration",
+ "disable-self-registration": "Disable Self-Registration",
+ "invite": "Invite",
+ "invite-people": "Invite People",
+ "to-boards": "To board(s)",
+ "email-addresses": "Email Addresses",
+ "smtp-host-description": "The address of the SMTP server that handles your emails.",
+ "smtp-port-description": "The port your SMTP server uses for outgoing emails.",
+ "smtp-host": "SMTP Host",
+ "smtp-port": "SMTP Port",
+ "smtp-username": "ชื่อผู้ใช้งาน",
+ "smtp-password": "รหัสผ่าน",
+ "send-from": "From",
+ "invitation-code": "Invitation Code",
+ "email-invite-register-subject": "__inviter__ ส่งคำเชิญให้คุณ",
+ "email-invite-register-text": "Dear __user__,\n\n__inviter__ invites you to Wekan for collaborations.\n\nPlease follow the link below:\n__url__\n\nAnd your invitation code is: __icode__\n\nThanks.",
+ "error-invitation-code-not-exist": "Invitation code doesn't exist"
+} \ No newline at end of file
diff --git a/i18n/tr.i18n.json b/i18n/tr.i18n.json
index c05833bb..13147261 100755..100644
--- a/i18n/tr.i18n.json
+++ b/i18n/tr.i18n.json
@@ -1,263 +1,349 @@
{
- "accept": "Accept",
+ "accept": "Kabul Et",
+ "act-activity-notify": "[Wekan] Aktivite Bildirimi",
+ "act-addAttachment": "__card__ kartına __attachment__ dosyasını ekledi",
+ "act-addComment": "__card__ kartına bir yorum bırakıt: __comment__",
+ "act-createBoard": "__board__ panosunu oluşturdu",
+ "act-createCard": "__card__ kartını ___list__ listesine ekledi.",
+ "act-createList": "__list__ listesini __board__ panosuna ekledi",
+ "act-addBoardMember": "__member__ kullanıcısını __board__ panosuna ekledi",
+ "act-archivedBoard": "__board__ panosunu arşivledi",
+ "act-archivedCard": "__card__ kartını arşivledi",
+ "act-archivedList": "__list__ listesini arşivledi",
+ "act-importBoard": "__board__ panosunu aktardı",
+ "act-importCard": "__card__ kartını aktardı",
+ "act-importList": "__list__ listesini aktardı",
+ "act-joinMember": "__member__ kullanıcısnı __card__ kartına ekledi",
+ "act-moveCard": "__card__ kartını __oldList__ listesinden __list__ listesine taşıdı",
+ "act-removeBoardMember": "__board__ panosundan __member__ kullanıcısını çıkarttı",
+ "act-restoredCard": "__card__ kartını __board__ panosuna geri döndürdü",
+ "act-unjoinMember": "__member__ kullanıcısnı __card__ kartından çıkarttı",
+ "act-withBoardTitle": "[Wekan] __board__",
+ "act-withCardTitle": "[__board__] __card__",
"actions": "İşlemler",
"activities": "Aktiviteler",
"activity": "Etkinlik",
- "activity-added": "added %s to %s",
+ "activity-added": "%s içine %s ekledi",
"activity-archived": "%s arşivledi",
- "activity-attached": "attached %s to %s",
+ "activity-attached": "%s içine %s ekledi",
"activity-created": "%s oluşturdu",
- "activity-excluded": "excluded %s from %s",
- "activity-imported": "imported %s into %s from %s",
- "activity-imported-board": "imported %s from %s",
- "activity-joined": "joined %s",
- "activity-moved": "moved %s from %s to %s",
- "activity-on": "on %s",
- "activity-removed": "removed %s from %s",
- "activity-sent": "sent %s to %s",
- "activity-unjoined": "unjoined %s",
+ "activity-excluded": "%s içinden %s çıkarttı",
+ "activity-imported": "%s i %s içine taşıdı, kaynağı %s",
+ "activity-imported-board": "%s i %s içinden aktardı",
+ "activity-joined": "şuna katıldı: %s",
+ "activity-moved": "%s i %s içinden %s içine taşıdı",
+ "activity-on": "%s",
+ "activity-removed": "%s i %s ten kaldırdı",
+ "activity-sent": "%s i %s e gönderdi",
+ "activity-unjoined": "%s içinden ayrıldı",
+ "activity-checklist-added": "%s içine liste ekledi",
"add": "Ekle",
- "add-attachment": "Add an attachment",
+ "add-attachment": "Dosya ekle",
"add-board": "Yeni bir pano ekle",
- "add-card": "Add a card",
- "add-cover": "Add Cover",
- "add-label": "Add the label",
- "add-list": "Add a list",
- "add-members": "Add Members",
+ "add-card": "Yeni bir kart ekle",
+ "add-checklist": "Yeni bir liste ekle",
+ "add-checklist-item": "Listeye yeni bir eleman ekle",
+ "add-cover": "Kapak resmi ekle",
+ "add-label": "Etiket Ekle",
+ "add-list": "Liste ekle",
+ "add-members": "Üye ekle",
"added": "Eklendi",
"addMemberPopup-title": "Üyeler",
"admin": "Yönetici",
"admin-desc": "Kartları görüntüler ve düzenler, üyeleri çıkarır ve pano ayarlarını değiştirir.",
- "all-boards": "All boards",
- "and-n-other-card": "And __count__ other card",
- "and-n-other-card_plural": "And __count__ other cards",
- "archive": "Arşiv",
+ "all-boards": "Tüm panolar",
+ "and-n-other-card": "Ve __count__ diğer kart",
+ "and-n-other-card_plural": "Ve __count__ diğer kart",
+ "apply": "Uygula",
+ "app-is-offline": "Uygulama şu an çevrim dışı, saya yenilemek kaydedilmemiş veri kaybına yol açacaktır.",
+ "archive": "Arşivle",
"archive-all": "Tümünü Arşivle",
- "archive-board": "Archive Board",
- "archive-card": "Archive Card",
+ "archive-board": "Panoyu Arşivle",
+ "archive-card": "Kartı arşivle",
"archive-list": "Bu listeyi arşivle",
- "archive-selection": "Archive selection",
- "archiveBoardPopup-title": "Archive Board?",
+ "archive-selection": "Seçimi arşivle",
+ "archiveBoardPopup-title": "Pano arşivlensin mi?",
"archived-items": "Arşivlenmiş Öğeler",
"archives": "Arşiv",
- "assign-member": "Assign member",
+ "assign-member": "Üye ata",
"attached": "dosya eklendi",
"attachment": "Ek Dosya",
"attachment-delete-pop": "Ek dosya silme işlemi kalıcıdır. Geri dönüşü yok",
"attachmentDeletePopup-title": "Ek Dosya Silinsin Mi?",
"attachments": "Ek Dosyalar",
- "avatar-too-big": "The avatar is too large (70Kb max)",
+ "auto-watch": "Oluşan yeni panoları otomatik takip et",
+ "avatar-too-big": "Avatar resmi çok büyük (70Kb maksimum)",
"back": "Geri",
- "board-change-color": "Change color",
- "board-nb-stars": "%s stars",
+ "board-change-color": "Renk değiştir",
+ "board-nb-stars": "%s yıldız",
"board-not-found": "Pano bulunamadı",
- "board-private-info": "This board will be <strong>private</strong>.",
+ "board-private-info": "Bu pano <strong>gizli</strong> olacak.",
"board-public-info": "Bu pano <strong>genel</strong>e açılacaktır.",
- "boardChangeColorPopup-title": "Change Board Background",
+ "boardChangeColorPopup-title": "Pano arkaplan rengini değiştir",
"boardChangeTitlePopup-title": "Pano Adı Değiştirme",
"boardChangeVisibilityPopup-title": "Görünebilirliği Değiştir",
- "boardImportBoardPopup-title": "Import board from Trello",
- "boardMenuPopup-title": "Board Menu",
+ "boardChangeWatchPopup-title": "İzleme Durumunu Değiştir",
+ "boardMenuPopup-title": "Pano menüsü",
"boards": "Panolar",
- "bucket-example": "Like “Bucket List” for example",
+ "bucket-example": "Örn: \"Marketten Alacaklarım\"",
"cancel": "İptal",
"card-archived": "Bu kart arşivlendi.",
- "card-comments-title": "This card has %s comment.",
+ "card-comments-title": "Bu kartta %s yorum var.",
"card-delete-notice": "Silme işlemi kalıcıdır. Bu kartla ilişkili tüm eylemleri kaybedersiniz.",
- "card-delete-pop": "All actions will be removed from the activity feed and you won't be able to re-open the card. There is no undo.",
- "card-delete-suggest-archive": "You can archive a card to remove it from the board and preserve the activity.",
- "card-edit-attachments": "Edit attachments",
- "card-edit-labels": "Edit labels",
- "card-edit-members": "Edit members",
- "card-labels-title": "Change the labels for the card.",
- "card-members-title": "Add or remove members of the board from the card.",
- "cardAttachmentsPopup-title": "Attach From",
+ "card-delete-pop": "Son hareketler alanındaki tüm veriler silinecek, ayrıca bu kartı yeniden açamayacaksın. Bu işlemin geri dönüşü yok.",
+ "card-delete-suggest-archive": "Kartı panodan kaldırıp, buna rağmen aktivitelerini saklamak istiyorsan kartı arşivleyebilirsin.",
+ "card-due": "şu zamanda:",
+ "card-due-on": "şu zamanda:",
+ "card-edit-attachments": "Ek dosyasını düzenle",
+ "card-edit-labels": "Etiketleri düzenle",
+ "card-edit-members": "Üyeleri düzenle",
+ "card-labels-title": "Bu kart için etiketleri düzenle",
+ "card-members-title": "Karta pano içindeki üyeleri ekler veya çıkartır.",
+ "card-start": "Başlama",
+ "card-start-on": "Başlama:",
+ "cardAttachmentsPopup-title": "Eklenme",
"cardDeletePopup-title": "Kart Silinsin mi?",
- "cardDetailsActionsPopup-title": "Card Actions",
+ "cardDetailsActionsPopup-title": "Kart işlemleri",
"cardLabelsPopup-title": "Etiketler",
"cardMembersPopup-title": "Üyeler",
- "cardMorePopup-title": "More",
- "cards": "Cards",
- "change": "Change",
+ "cardMorePopup-title": "Daha",
+ "cards": "Kartlar",
+ "change": "Değiştir",
"change-avatar": "Avatar Değiştir",
"change-password": "Parola Değiştir",
- "change-permissions": "Change permissions",
+ "change-permissions": "İzinleri değiştir",
+ "change-settings": "Ayarları değiştir",
"changeAvatarPopup-title": "Avatar Değiştir",
"changeLanguagePopup-title": "Dil Değiştir",
"changePasswordPopup-title": "Parola Değiştir",
"changePermissionsPopup-title": "Yetkileri Değiştirme",
+ "changeSettingsPopup-title": "Ayarları değiştir",
+ "checklists": "Doğrulama Listeleri",
"click-to-star": "Bu panoyu yıldızlamak için tıkla.",
"click-to-unstar": "Bu panunun yıldızını kaldırmak için tıkla.",
- "clipboard": "Clipboard or drag & drop",
+ "clipboard": "Panodan (cliboard) veya sürükle ve bırak ile",
"close": "Kapat",
- "close-board": "Close Board",
+ "close-board": "Panoyu kapat",
"close-board-pop": "You will be able to restore the board by clicking the “Archives” button from the home header.",
- "color-black": "black",
- "color-blue": "blue",
- "color-green": "green",
- "color-lime": "lime",
- "color-orange": "orange",
- "color-pink": "pink",
- "color-purple": "purple",
- "color-red": "red",
- "color-sky": "sky",
- "color-yellow": "yellow",
+ "color-black": "siyah",
+ "color-blue": "mavi",
+ "color-green": "yeşil",
+ "color-lime": "çim",
+ "color-orange": "turuncu",
+ "color-pink": "pembe",
+ "color-purple": "mor",
+ "color-red": "kırmızı",
+ "color-sky": "açık mavi",
+ "color-yellow": "sarı",
"comment": "Yorum Gönder",
- "comment-placeholder": "Write a comment",
+ "comment-placeholder": "Bir yorum yaz",
+ "comment-only": "Limited",
+ "comment-only-desc": "Can comment on cards only.",
"computer": "Bilgisayar",
"create": "Oluştur",
"createBoardPopup-title": "Pano Oluşturma",
"createLabelPopup-title": "Etiket Oluşturma",
- "current": "current",
- "decline": "Decline",
- "default-avatar": "Default avatar",
+ "current": "mevcut",
+ "date": "Tarih",
+ "decline": "Reddet",
+ "default-avatar": "Varsayılan avatar",
"delete": "Sil",
"deleteLabelPopup-title": "Etiket Silinsin mi?",
"description": "Açıklama",
- "disambiguateMultiLabelPopup-title": "Disambiguate Label Action",
- "disambiguateMultiMemberPopup-title": "Disambiguate Member Action",
- "discard": "Discard",
- "done": "Done",
+ "disambiguateMultiLabelPopup-title": "Etiket işlemini izah et",
+ "disambiguateMultiMemberPopup-title": "Üye işlemini izah et",
+ "discard": "ıskartaya çıkart",
+ "done": "Tamam",
"download": "İndir",
"edit": "Düzenle",
"edit-avatar": "Avatar Değiştir",
"edit-profile": "Profili Düzenle",
- "editLabelPopup-title": "Etiket Değiştirme",
+ "editCardStartDatePopup-title": "Başlangıç tarihini değiştir",
+ "editCardDueDatePopup-title": "Bitiş tarihini değiştir",
+ "editLabelPopup-title": "Etiket Değiştir",
+ "editNotificationPopup-title": "Bildirimi değiştir",
"editProfilePopup-title": "Profili Düzenle",
"email": "E-posta",
- "email-enrollAccount-subject": "An account created for you on __siteName__",
- "email-enrollAccount-text": "Hello __user__,\n\nTo start using the service, simply click the link below.\n\n__url__\n\nThanks.",
- "email-fail": "Sending email failed",
- "email-invalid": "Invalid email",
- "email-invite": "Invite via Email",
- "email-invite-subject": "__inviter__ sent you an invitation",
- "email-invite-text": "Dear __user__,\n\n__inviter__ invites you to join board \"__board__\" for collaborations.\n\nPlease follow the link below:\n\n__url__\n\nThanks.",
- "email-resetPassword-subject": "Reset your password on __siteName__",
- "email-resetPassword-text": "Hello __user__,\n\nTo reset your password, simply click the link below.\n\n__url__\n\nThanks.",
- "email-sent": "Email sent",
- "email-verifyEmail-subject": "Verify your email address on __siteName__",
- "email-verifyEmail-text": "Hello __user__,\n\nTo verify your account email, simply click the link below.\n\n__url__\n\nThanks.",
- "error-board-doesNotExist": "This board does not exist",
- "error-board-notAdmin": "You need to be admin of this board to do that",
- "error-board-notAMember": "You need to be a member of this board to do that",
- "error-json-malformed": "Your text is not valid JSON",
- "error-json-schema": "Your JSON data does not include the proper information in the correct format",
- "error-list-doesNotExist": "This list does not exist",
- "error-user-doesNotExist": "This user does not exist",
- "error-user-notAllowSelf": "This action on self is not allowed",
- "error-user-notCreated": "This user is not created",
- "export-board": "Export board",
- "filter": "Filter",
- "filter-cards": "Kartları Süz",
- "filter-clear": "Clear filter",
- "filter-on": "Filter is on",
- "filter-on-desc": "Bu panodaki kartları süzüyorsunuz. Süzgeci düzenlemek için tıklayın.",
- "filter-to-selection": "Filter to selection",
+ "email-enrollAccount-subject": "__siteName__ üzerinde hesabın oluşturuldu",
+ "email-enrollAccount-text": "Merhaba __user__,\n\nBu servisi kullanmaya başlamak için aşağıdaki linke tıklamalısın\n\n__url__\n\nTeşekkürler.",
+ "email-fail": "E-posta gönderimi başarısız",
+ "email-invalid": "Geçersiz e-posta",
+ "email-invite": "E-posta ile davet et",
+ "email-invite-subject": "__inviter__ size bir davetiye gönderdi",
+ "email-invite-text": "Sevgili __user__,\n\n__inviter__ seni birlikte çalışmak için \"__board__\" panosuna davet ediyor.\n\nLütfen aşağıdaki linke tıkla:\n\n__url__\n\nTeşekkürler.",
+ "email-resetPassword-subject": "__siteName__ üzerinde parolanı sıfırla",
+ "email-resetPassword-text": "Merhaba __user__,\n\nParolanı sıfırlaman için aşağıdaki linke tıklaman yeterli.\n\n__url__\n\nTeşekkürler.",
+ "email-sent": "E-posta gönderildi",
+ "email-verifyEmail-subject": "__siteName__ üzerindeki e-posta adresini doğrulama",
+ "email-verifyEmail-text": "Merhaba __user__,\n\nHesap e-posta adresini doğrulamak için aşağıdaki linke tıklaman yeterli.\n\n__url__\n\nTeşekkürler.",
+ "error-board-doesNotExist": "Erişmeye çalıştığın pano bulunamadı",
+ "error-board-notAdmin": "Bu işlemi yapmak için pano yöneticisi olmalısın.",
+ "error-board-notAMember": "Bu işlemi yapmak için pano içindeki bir üye olmalısın.",
+ "error-json-malformed": "Girilen metin geçerli bir JSON formatında değil",
+ "error-json-schema": "Girdiğin JSON metni tüm bilgileri doğru biçimde barındırmıyor",
+ "error-list-doesNotExist": "Liste bulunamadı",
+ "error-user-doesNotExist": "Kullanıcı bulunamadı",
+ "error-user-notAllowSelf": "Bu işlemi kendi üzerinde yapamazsın",
+ "error-user-notCreated": "Bu üye oluşturulmadı",
+ "error-username-taken": "Kullanıcı adı zaten alınmış",
+ "export-board": "Panoyu dışarı aktar",
+ "filter": "Filtre",
+ "filter-cards": "Kartları Filtrele",
+ "filter-clear": "Süzgeci temizle",
+ "filter-no-label": "Etiket yok",
+ "filter-no-member": "Üye yok",
+ "filter-on": "Filtre aktif",
+ "filter-on-desc": "Bu panodaki kartları filtreliyorsunuz. Fitreyi düzenlemek için tıklayın.",
+ "filter-to-selection": "Seçime göre filtreleme yap",
"fullname": "Ad Soyad",
"header-logo-title": "Panolar sayfanıza geri dön.",
- "home": "Home",
- "import": "Import",
- "import-board": "import from Trello",
- "import-board-trello-instruction": "In your Trello board, go to 'Menu', then 'More', 'Print and Export', 'Export JSON', and copy the resulting text",
- "import-card": "Import a Trello card",
- "import-card-trello-instruction": "Go to a Trello card, select 'Share and more...' then 'Export JSON' and copy the resulting text",
- "import-json-placeholder": "Paste your valid JSON data here",
- "import-members-map": "Your imported board has some members. Please map the members you want to import to Wekan users",
- "import-show-user-mapping": "Review members mapping",
- "import-user-select": "Pick the Wekan user you want to use as this member",
- "info": "Infos",
- "initials": "Initials",
- "joined": "joined",
- "just-invited": "You are just invited to this board",
- "keyboard-shortcuts": "Keyboard shortcuts",
+ "hide-system-messages": "Sistem mesajlarını gizle",
+ "headerBarCreateBoardPopup-title": "Pano Oluşturma",
+ "home": "Ana Sayfa",
+ "import": "İçeri aktar",
+ "import-board": "Trello'dan içeri aktar",
+ "import-board-title": "Trello'dan panoları içeri aktarır",
+ "import-board-trello-instruction": "Trello panonuzda, 'Menü'ye gidip, ardıdan, 'daha fazlası' na tıklayın, 'Yazdır ve Çıktı al' sayfasından 'JSON biçiminde çıktı al' diyip, çıkan metni buraya kopyalayın.",
+ "import-json-placeholder": "Geçerli JSON verisini buraya yapıştırın",
+ "import-map-members": "Üyeleri eşleştirme",
+ "import-members-map": "İçe aktardığın panoda bazı kullanıcılar var. Lütfen bu kullanıcıları Wekan panosundaki kullanıcılarla eşleştirin.",
+ "import-show-user-mapping": "Üye eşleştirmesini kontrol et",
+ "import-user-select": "Bu üyenin sistemdeki hangi kullanıcı olduğunu seçin",
+ "importMapMembersAddPopup-title": "Üye seç",
+ "info": "Bilgiler",
+ "initials": "İlk Harfleri",
+ "invalid-date": "Geçersiz tarih",
+ "joined": "katılma",
+ "just-invited": "Bu panoya şimdi davet edildin.",
+ "keyboard-shortcuts": "Klavye kısayolları",
"label-create": "Yeni bir etiket oluştur",
"label-default": "%s etiket (varsayılan)",
"label-delete-pop": "Geri dönüşü yok. Tüm kartlardan bu etiket kaldırılacaktır ve geçmişini yok edecektir.",
"labels": "Etiketler",
"language": "Dil",
- "last-admin-desc": "Rolleri değiştiremezsiniz çünkü burada en az bir yönetici olmalıdır.",
- "leave-board": "Leave Board",
+ "last-admin-desc": "Rolleri değiştiremezsiniz, çünkü burada en az bir yönetici olmalıdır.",
+ "leave-board": "Panodan ayrıl",
"link-card": "Bu kartın bağlantısı",
- "list-archive-cards": "Archive all cards in this list",
- "list-archive-cards-pop": "This will remove all the cards in this list from the board. To view archived cards and bring them back to the board, click “Menu” > “Archived Items”.",
- "list-move-cards": "Move all cards in this list",
- "list-select-cards": "Select all cards in this list",
+ "list-archive-cards": "Bu liste içindeki tüm kartları arşivle",
+ "list-archive-cards-pop": "Bu işlem bu listedeki tüm kartları kaldıracak ve arşivleyecek. Arşivlenmiş kartları görmek ve panoya geri yüklemek için \"Menü\" altından \"Arşivlenmiş Öğeler\"e gidebilirsiniz.",
+ "list-move-cards": "Listedeki tüm kartları taşı",
+ "list-select-cards": "Listedeki tüm kartları seç",
"listActionPopup-title": "Liste İşlemleri",
- "listImportCardPopup-title": "Import a Trello card",
- "lists": "Lists",
+ "listImportCardPopup-title": "Bir Trello kartını içeri aktar",
+ "lists": "Listeler",
"log-out": "Oturum Kapat",
+ "log-in": "Oturum Aç",
"loginPopup-title": "Oturum Aç",
- "mapMembersAddPopup-title": "Select Wekan member",
- "mapMembersPopup-title": "Map members",
- "memberMenuPopup-title": "Member Settings",
+ "memberMenuPopup-title": "Üye ayarları",
"members": "Üyeler",
"menu": "Menü",
- "move-selection": "Move selection",
- "moveCardPopup-title": "Move Card",
- "moveSelectionPopup-title": "Move selection",
- "multi-selection": "Multi-Selection",
- "multi-selection-on": "Multi-Selection is on",
+ "move-selection": "Seçimi taşı",
+ "moveCardPopup-title": "Kartı taşı",
+ "moveCardToBottom-title": "Aşağı taşı",
+ "moveCardToTop-title": "Yukarı taşı",
+ "moveSelectionPopup-title": "Seçimi taşı",
+ "multi-selection": "Çoklu seçim",
+ "multi-selection-on": "Çoklu seçim açık",
+ "muted": "Sessiz",
+ "muted-info": "Bu panodaki değişiklikler hakkında bildirim almayacaksınız",
"my-boards": "Panolarım",
"name": "Adı",
- "no-archived-cards": "No archived cards.",
- "no-archived-lists": "No archived lists.",
+ "no-archived-cards": "Arşivlenmiş kart bulunamadı.",
+ "no-archived-lists": "Arşivlenmiş liste bulunamadı.",
"no-results": "Sonuç yok",
"normal": "Normal",
"normal-desc": "Kartları görüntüler ve düzenler. Ayarları değiştiremez.",
- "not-accepted-yet": "Invitation not accepted yet",
+ "not-accepted-yet": "Davetiye henüz kabul edilmemiş",
+ "notify-participate": "Oluşturduğunuz veya üye olduğunuz tüm kartlar hakkında bildirim alma",
+ "notify-watch": "Takip ettiğiniz tüm pano, liste ve kartlar hakkında bildirim alma",
"optional": "isteğe bağlı",
- "or": "or",
+ "or": "veya",
"page-maybe-private": "Bu sayfa özel olabilir. <a href='%s'>Oturum açarak</a> görülebilir.",
"page-not-found": "Sayda bulunamadı.",
"password": "Parola",
- "paste-or-dragdrop": "to paste, or drag & drop image file to it (image only)",
- "preview": "Preview",
- "previewAttachedImagePopup-title": "Preview",
- "previewClipboardImagePopup-title": "Preview",
+ "paste-or-dragdrop": "Dosya eklemek için yapıştırabilir, veya (eğer resimse) sürükle bırak yapabilirsiniz",
+ "participating": "Katılımcılar",
+ "preview": "Önizleme",
+ "previewAttachedImagePopup-title": "Önizleme",
+ "previewClipboardImagePopup-title": "Önizleme",
"private": "Özel",
"private-desc": "Bu pano özel. Sadece panoya ekli kişiler görüntüleyebilir ve düzenleyebilir.",
"profile": "Kullanıcı Sayfası",
"public": "Genel",
"public-desc": "Bu pano genel. Bağlantı adresi ile herhangi bir kimseye görünür ve Google gibi arama motorlarında gösterilecektir. Panoyu, sadece eklenen kişiler düzenleyebilir.",
- "quick-access-description": "Star a board to add a shortcut in this bar.",
- "remove-cover": "Remove Cover",
- "remove-from-board": "Remove from Board",
- "remove-label": "Remove the label",
+ "quick-access-description": "Bu bara kısayol olarak bir pano eklemek için panoyu yıldızlamalısınız",
+ "remove-cover": "Kapak resmini kaldır",
+ "remove-from-board": "Panodan kaldır",
+ "remove-label": "Etiketi kaldır",
+ "remove-list": "Listeden kaldır",
"remove-member": "Üyeyi Çıkar",
"remove-member-from-card": "Karttan Çıkar",
"remove-member-pop": "__boardTitle__ panosundan __name__ (__username__) çıkarılsın mı? Üye, bu panodaki tüm kartlardan çıkarılacak ve bir bildirim alacak.",
- "removeMemberPopup-title": "Üyeyi Çıkarmak mı?",
- "rename": "Ad değiştir",
+ "removeMemberPopup-title": "Üye çıkarılsın mı?",
+ "rename": "Yeniden adlandır",
"rename-board": "Pano Adı Değiştirme",
- "restore": "Restore",
+ "restore": "Geri yükleme",
"save": "Kaydet",
- "search": "Search",
+ "search": "Arama",
"select-color": "Bir renk seç",
- "shortcut-assign-self": "Assign yourself to current card",
- "shortcut-autocomplete-emoji": "Autocomplete emoji",
- "shortcut-autocomplete-members": "Autocomplete members",
- "shortcut-clear-filters": "Clear all filters",
- "shortcut-close-dialog": "Close Dialog",
- "shortcut-filter-my-cards": "Filter my cards",
- "shortcut-show-shortcuts": "Bring up this shortcuts list",
- "shortcut-toggle-filterbar": "Toggle Filter Sidebar",
- "shortcut-toggle-sidebar": "Toggle Board Sidebar",
+ "shortcut-assign-self": "Kendini karta ekle",
+ "shortcut-autocomplete-emoji": "Otomatik tamamlayan emoji yüz ifadeleri",
+ "shortcut-autocomplete-members": "Otomatik tamamlayan üye isimleri",
+ "shortcut-clear-filters": "Tüm filtreleri temizle",
+ "shortcut-close-dialog": "Diyaloğu kapat",
+ "shortcut-filter-my-cards": "Kartlarımı filtrele",
+ "shortcut-show-shortcuts": "Kısayollar listesini getir",
+ "shortcut-toggle-filterbar": "Filtre kenar çubuğunu aç/kapa",
+ "shortcut-toggle-sidebar": "Pano kenar çubuğunu aç/kapa",
+ "show-cards-minimum-count": "Eğer listede şu kadar sayıdan fazla şey varsa kart sayısını göster: ",
+ "sidebar-open": "Kenar çubuğunu aç",
+ "sidebar-close": "Kenar çubuğunu kapat",
"signupPopup-title": "Bir Hesap Oluştur",
"star-board-title": "Bu panoyu yıldızlamak için tıkla. Pano listesinin en üstünde gösterilir.",
"starred-boards": "Yıldızlı Panolar",
"starred-boards-description": "Yıldızlanmış panolar, pano listenin en üstünde gösterilir.",
- "subscribe": "Subscribe",
+ "subscribe": "Abone ol",
"team": "Takım",
"this-board": "bu panoyu",
"this-card": "bu kart",
+ "time": "Zaman",
"title": "Başlık",
- "unassign-member": "Unassign member",
- "unsaved-description": "You have an unsaved description.",
- "upload": "Upload",
- "upload-avatar": "Upload an avatar",
- "uploaded-avatar": "Uploaded an avatar",
+ "tracking": "Takp",
+ "tracking-info": "Oluşturduğunuz veya üyesi olduğunuz tüm kartlardaki değişiklikler size bildirim olarak gelecek.",
+ "unassign-member": "Üyeyi çıkart",
+ "unsaved-description": "Kaydedilmemiş bir açıklama metnin bulunmakta",
+ "unwatch": "Takibi bırak",
+ "upload": "Yükle",
+ "upload-avatar": "Avatar yükle",
+ "uploaded-avatar": "Avatar yüklendi",
"username": "Kullanıcı adı",
- "view-it": "View it",
- "warn-list-archived": "warning: this card is in an archived list",
- "what-to-do": "What do you want to do?"
-}
+ "view-it": "Görüntüle",
+ "warn-list-archived": "dikkat: bu kart arşivlenmiş bir liste içinde",
+ "watch": "Takip Et",
+ "watching": "Takip Ediliyor",
+ "watching-info": "Bu pano hakkındaki tüm değişiklikler hakkında tarafınıza bildirim gelecektir",
+ "welcome-board": "Panoya Hoş Geldiniz",
+ "welcome-list1": "Temel",
+ "welcome-list2": "Gelişmiş",
+ "what-to-do": "Ne yapmak istiyorsunuz?",
+ "admin-panel": "Yönetici Paneli",
+ "settings": "Ayarlar",
+ "people": "Kullanıcılar",
+ "registration": "Kayıt",
+ "disable-self-registration": "Ziyaretçilere kaydı kapa",
+ "invite": "Davet",
+ "invite-people": "Kullanıcı davet et",
+ "to-boards": "Şu pano(lar)a",
+ "email-addresses": "E-posta adresleri",
+ "smtp-host-description": "E-posta gönderimi yapan SMTP sunucu adresi",
+ "smtp-port-description": "E-posta gönderimi yapan SMTP sunucu portu",
+ "smtp-host": "SMTP sunucu adresi",
+ "smtp-port": "SMTP portu",
+ "smtp-username": "Kullanıcı adı",
+ "smtp-password": "Parola",
+ "send-from": "Gönderen",
+ "invitation-code": "Davetiye kodu",
+ "email-invite-register-subject": "__inviter__ size bir davetiye gönderdi",
+ "email-invite-register-text": "Sevgili __user__,\n\n__inviter__ Sizi koordine çalışabilmek için Wekan'a davet etti.\n\nLütfen aşağıdaki linke tıklayın:\n__url__\n\nDavetiye kodunuz: __icode__\n\nTeşekkürler.",
+ "error-invitation-code-not-exist": "Davetiye kodu bulunamadı"
+} \ No newline at end of file
diff --git a/i18n/zh-CN.i18n.json b/i18n/zh-CN.i18n.json
index 4cfd03f0..bd96e717 100755..100644
--- a/i18n/zh-CN.i18n.json
+++ b/i18n/zh-CN.i18n.json
@@ -1,28 +1,51 @@
{
"accept": "接受",
+ "act-activity-notify": "[Wekan] 活动通知",
+ "act-addAttachment": "添加附件 __attachment__ 至卡片 __card__",
+ "act-addComment": "在 __card__ 发布评论: __comment__",
+ "act-createBoard": "创建看板 __board__",
+ "act-createCard": "添加卡片 __card__ 至列表 __list__",
+ "act-createList": "添加列表 __list__ 至看板 __board__",
+ "act-addBoardMember": "添加成员 __member__ 至看板 __board__",
+ "act-archivedBoard": "归档看板 __board__",
+ "act-archivedCard": "归档卡片 __card__",
+ "act-archivedList": "归档列表 __list__",
+ "act-importBoard": "导入看板 __board__",
+ "act-importCard": "导入卡片 __card__",
+ "act-importList": "导入列表 __list__",
+ "act-joinMember": "添加成员 __member__ 至卡片 __card__",
+ "act-moveCard": "从列表 __oldList__ 移动卡片 __card__ 至列表 __list__",
+ "act-removeBoardMember": "从看板 __board__ 移除成员 __member__",
+ "act-restoredCard": "恢复卡片 __card__ 至看板 __board__",
+ "act-unjoinMember": "从卡片 __card__ 移除成员 __member__",
+ "act-withBoardTitle": "[Wekan] 看板 __board__",
+ "act-withCardTitle": "[看板 __board__] 卡片 __card__",
"actions": "操作",
"activities": "活动",
"activity": "活动",
"activity-added": "添加 %s 至 %s",
- "activity-archived": "删除 %s",
+ "activity-archived": "归档 %s",
"activity-attached": "添加附件 %s 至 %s",
"activity-created": "创建 %s",
"activity-excluded": "排除 %s 从 %s",
"activity-imported": "导入 %s 至 %s 从 %s 中",
"activity-imported-board": "已导入 %s 从 %s 中",
- "activity-joined": "关联 %s",
+ "activity-joined": "已关联 %s",
"activity-moved": "将 %s 从 %s 移动到 %s",
"activity-on": "在 %s",
- "activity-removed": "移除 %s 从 %s 中",
+ "activity-removed": "从 %s 中移除 %s",
"activity-sent": "发送 %s 至 %s",
- "activity-unjoined": "解除关联 %s",
+ "activity-unjoined": "已解除 %s 关联",
+ "activity-checklist-added": "已经将清单添加到 %s",
"add": "添加",
"add-attachment": "添加附件",
"add-board": "添加新看板",
"add-card": "添加卡片",
+ "add-checklist": "添加清单",
+ "add-checklist-item": "扩充清单",
"add-cover": "添加封面",
"add-label": "添加标签",
- "add-list": "添加清单",
+ "add-list": "添加列表",
"add-members": "添加成员",
"added": "添加",
"addMemberPopup-title": "成员",
@@ -31,11 +54,13 @@
"all-boards": "全部看板",
"and-n-other-card": "和其他 __count__ 个卡片",
"and-n-other-card_plural": "和其他 __count__ 个卡片",
+ "apply": "应用",
+ "app-is-offline": "处于离线状态,刷新页面将导致数据丢失。",
"archive": "归档",
"archive-all": "全部归档",
"archive-board": "归档看板",
"archive-card": "归档卡片",
- "archive-list": "归档该清单",
+ "archive-list": "归档该列表",
"archive-selection": "归档所选内容",
"archiveBoardPopup-title": "确定要归档看板吗?",
"archived-items": "已归档项目",
@@ -46,7 +71,8 @@
"attachment-delete-pop": "删除附件的操作不可逆。",
"attachmentDeletePopup-title": "删除附件?",
"attachments": "附件",
- "avatar-too-big": "头像太大 (最大 70 Kb)",
+ "auto-watch": "创建看板时自动关注",
+ "avatar-too-big": "头像文件过大 (上限 70 Kb)",
"back": "返回",
"board-change-color": "更改颜色",
"board-nb-stars": "%s 星标",
@@ -56,24 +82,28 @@
"boardChangeColorPopup-title": "修改看板背景",
"boardChangeTitlePopup-title": "重命名看板",
"boardChangeVisibilityPopup-title": "更改可视级别",
- "boardImportBoardPopup-title": "从 Trello 导入看板",
+ "boardChangeWatchPopup-title": "更改关注状态",
"boardMenuPopup-title": "看板菜单",
"boards": "看板",
- "bucket-example": "例如 “目标清单”",
+ "bucket-example": "例如 “遗愿清单”",
"cancel": "取消",
"card-archived": "该卡片已被归档",
"card-comments-title": "该卡片有 %s 条评论",
"card-delete-notice": "彻底删除的操作不可恢复,你将会丢失该卡片相关的所有操作记录。",
- "card-delete-pop": "所有的动作将从活动动态中被移除且您将无法重新打开该卡片。此操作无法撤销。",
+ "card-delete-pop": "所有的活动将从活动摘要中被移除且您将无法重新打开该卡片。此操作无法撤销。",
"card-delete-suggest-archive": "你可以将卡片从看板中归档至回收箱,但保留相关活动。",
+ "card-due": "到期",
+ "card-due-on": "期限",
"card-edit-attachments": "编辑附件",
"card-edit-labels": "编辑标签",
"card-edit-members": "编辑成员",
"card-labels-title": "更改该卡片上的标签",
"card-members-title": "在该卡片中添加或移除看板成员",
+ "card-start": "开始",
+ "card-start-on": "始于",
"cardAttachmentsPopup-title": "附件来源",
"cardDeletePopup-title": "彻底删除卡片?",
- "cardDetailsActionsPopup-title": "卡片动作",
+ "cardDetailsActionsPopup-title": "卡片操作",
"cardLabelsPopup-title": "标签",
"cardMembersPopup-title": "成员",
"cardMorePopup-title": "更多",
@@ -82,10 +112,13 @@
"change-avatar": "更改头像",
"change-password": "更改密码",
"change-permissions": "更改权限",
+ "change-settings": "更改设置",
"changeAvatarPopup-title": "更改头像",
"changeLanguagePopup-title": "更改语言",
"changePasswordPopup-title": "更改密码",
"changePermissionsPopup-title": "更改权限",
+ "changeSettingsPopup-title": "更改设置",
+ "checklists": "清单",
"click-to-star": "点此来标记该看板",
"click-to-unstar": "点此来去除该看板的标记",
"clipboard": "剪贴板或者拖放文件",
@@ -104,25 +137,31 @@
"color-yellow": "黄色",
"comment": "评论",
"comment-placeholder": "添加评论",
+ "comment-only": "Limited",
+ "comment-only-desc": "Can comment on cards only.",
"computer": "从本机上传",
"create": "创建",
"createBoardPopup-title": "创建看板",
"createLabelPopup-title": "创建标签",
"current": "当前",
+ "date": "日期",
"decline": "拒绝",
"default-avatar": "默认头像",
"delete": "删除",
"deleteLabelPopup-title": "删除标签?",
"description": "描述",
- "disambiguateMultiLabelPopup-title": "消除标签动作歧义",
- "disambiguateMultiMemberPopup-title": "消除会员动作歧义",
+ "disambiguateMultiLabelPopup-title": "标签消歧 [?]",
+ "disambiguateMultiMemberPopup-title": "成员消歧 [?]",
"discard": "放弃",
"done": "完成",
"download": "下载",
"edit": "编辑",
"edit-avatar": "更改头像",
"edit-profile": "编辑资料",
+ "editCardStartDatePopup-title": "修改起始日期",
+ "editCardDueDatePopup-title": "修改截止日期",
"editLabelPopup-title": "更改标签",
+ "editNotificationPopup-title": "编辑通知",
"editProfilePopup-title": "编辑资料",
"email": "邮箱",
"email-enrollAccount-subject": "已为您在 __siteName__ 创建帐号",
@@ -146,27 +185,34 @@
"error-user-doesNotExist": "该用户不存在",
"error-user-notAllowSelf": "不允许对自己执行此操作",
"error-user-notCreated": "该用户未能成功创建",
+ "error-username-taken": "此用户名已存在",
"export-board": "导出看板",
"filter": "过滤",
"filter-cards": "过滤卡片",
"filter-clear": "清空过滤器",
+ "filter-no-label": "无标签",
+ "filter-no-member": "无成员",
"filter-on": "过滤器启用",
"filter-on-desc": "你正在过滤该看板上的卡片,点此编辑过滤。",
"filter-to-selection": "要选择的过滤器",
"fullname": "全称",
"header-logo-title": "返回您的看板页",
+ "hide-system-messages": "隐藏系统消息",
+ "headerBarCreateBoardPopup-title": "创建看板",
"home": "首页",
"import": "导入",
"import-board": "从 Trello 导入",
+ "import-board-title": "从Trello导入看板",
"import-board-trello-instruction": "在你的Trello看板中,点击“菜单”,然后选择“更多”,“打印与导出”,“导出为 JSON” 并拷贝结果文本",
- "import-card": "导入 Trello 卡片",
- "import-card-trello-instruction": "进入一个 Trello 卡片,选择“分享与更多”,然后选择 “导出为 JSON” 并且拷贝结果文本",
"import-json-placeholder": "粘贴您有效的 JSON 数据至此",
+ "import-map-members": "映射成员",
"import-members-map": "您导入的看板有一些成员。请将您想导入的成员映射到 Wekan 用户。",
"import-show-user-mapping": "核对成员映射",
"import-user-select": "选择您想将此成员映射到的 Wekan 用户",
+ "importMapMembersAddPopup-title": "选择Wekan成员",
"info": "信息",
"initials": "缩写",
+ "invalid-date": "无效日期",
"joined": "关联",
"just-invited": "您刚刚被邀请加入此看板",
"keyboard-shortcuts": "键盘快捷键",
@@ -178,39 +224,45 @@
"last-admin-desc": "你不能更改角色,因为至少需要一名管理员。",
"leave-board": "离开看板",
"link-card": "关联至该卡片",
- "list-archive-cards": "归档清单中的所有卡片",
- "list-archive-cards-pop": "这将会从本看板中移除该清单中的所有卡片。如果需要浏览已归档的卡片并且将其恢复至看板,请点击\"菜单\">\"回收箱\"",
- "list-move-cards": "移动清单中的所有卡片",
- "list-select-cards": "选择清单中的所有卡片",
- "listActionPopup-title": "清单操作",
+ "list-archive-cards": "归档列表中的所有卡片",
+ "list-archive-cards-pop": "这将会从本看板中移除该列表中的所有卡片。如果需要浏览已归档的卡片并且将其恢复至看板,请点击 \"菜单\" > \"回收箱\"",
+ "list-move-cards": "移动列表中的所有卡片",
+ "list-select-cards": "选择列表中的所有卡片",
+ "listActionPopup-title": "列表操作",
"listImportCardPopup-title": "导入 Trello 卡片",
- "lists": "清单",
+ "lists": "列表",
"log-out": "登出",
+ "log-in": "登录",
"loginPopup-title": "登录",
- "mapMembersAddPopup-title": "选择 Wekan 成员",
- "mapMembersPopup-title": "映射成员",
"memberMenuPopup-title": "成员设置",
"members": "成员",
"menu": "菜单",
"move-selection": "移动选择",
"moveCardPopup-title": "移动卡片",
+ "moveCardToBottom-title": "移动至底端",
+ "moveCardToTop-title": "移动至顶端",
"moveSelectionPopup-title": "移动选择",
"multi-selection": "多选",
"multi-selection-on": "多选启用",
+ "muted": "静默",
+ "muted-info": "你将不会收到此看板的任何变更通知",
"my-boards": "我的看板",
"name": "名称",
"no-archived-cards": "没有已归档的卡片",
- "no-archived-lists": "没有已归档的清单",
+ "no-archived-lists": "没有已归档的列表。",
"no-results": "无结果",
"normal": "普通",
"normal-desc": "可以创建以及编辑卡片,无法更改设置。",
"not-accepted-yet": "邀请尚未接受",
+ "notify-participate": "接收以创建者或成员身份参与的卡片的更新",
+ "notify-watch": "接收所有关注的面板、列表、及卡片的更新",
"optional": "可选",
"or": "或",
"page-maybe-private": "本页面被设为私有. 您必须 <a href='%s'>登录</a>以浏览其中内容。",
"page-not-found": "页面不存在。",
"password": "密码",
"paste-or-dragdrop": "从剪贴板粘贴,或者拖放文件到它上面 (仅限于图片)",
+ "participating": "参与",
"preview": "预览",
"previewAttachedImagePopup-title": "预览",
"previewClipboardImagePopup-title": "预览",
@@ -223,6 +275,7 @@
"remove-cover": "移除封面",
"remove-from-board": "从看板中删除",
"remove-label": "移除标签",
+ "remove-list": "删除列表",
"remove-member": "移除成员",
"remove-member-from-card": "从该卡片中移除",
"remove-member-pop": "确定从 __boardTitle__ 中移除 __name__ (__username__) 吗? 该成员将被从该看板的所有卡片中移除,同时他会收到一条提醒。",
@@ -234,7 +287,7 @@
"search": "搜索",
"select-color": "选择颜色",
"shortcut-assign-self": "分配当前卡片给自己",
- "shortcut-autocomplete-emojies": "自动补全表情",
+ "shortcut-autocomplete-emoji": "表情符号自动补全",
"shortcut-autocomplete-members": "自动补全成员",
"shortcut-clear-filters": "清空全部过滤器",
"shortcut-close-dialog": "关闭对话框",
@@ -242,7 +295,10 @@
"shortcut-show-shortcuts": "显示此快捷键列表",
"shortcut-toggle-filterbar": "切换过滤器边栏",
"shortcut-toggle-sidebar": "切换面板边栏",
- "signupPopup-title": " 创建账户",
+ "show-cards-minimum-count": "当列表中的卡片多于此阈值时将显示数量",
+ "sidebar-open": "打开侧栏",
+ "sidebar-close": "打开侧栏",
+ "signupPopup-title": "创建账户",
"star-board-title": "点此来标记该看板,它将会出现在您的看板列表顶部。",
"starred-boards": "已标记看板",
"starred-boards-description": "已标记看板将会出现在您的看板列表顶部。",
@@ -250,14 +306,44 @@
"team": "团队",
"this-board": "该看板",
"this-card": "该卡片",
+ "time": "时间",
"title": "标题",
+ "tracking": "跟踪",
+ "tracking-info": "当任何包含您(作为创建者或成员)的卡片发生变更时,您将得到通知。",
"unassign-member": "取消分配成员",
"unsaved-description": "存在未保存的描述",
+ "unwatch": "取消关注",
"upload": "上传",
"upload-avatar": "上传头像",
"uploaded-avatar": "头像已经上传",
"username": "用户名",
"view-it": "查看",
- "warn-list-archived": "警告: 该卡片位于已归档清单中",
- "what-to-do": "要做什么?"
+ "warn-list-archived": "警告: 该卡片位于已归档的列表中",
+ "watch": "关注",
+ "watching": "关注",
+ "watching-info": "当此看板发生变更时会通知你",
+ "welcome-board": "“欢迎”看板",
+ "welcome-list1": "基本",
+ "welcome-list2": "高阶",
+ "what-to-do": "要做什么?",
+ "admin-panel": "管理面板",
+ "settings": "设置",
+ "people": "人员",
+ "registration": "注册",
+ "disable-self-registration": "禁止自助注册",
+ "invite": "邀请",
+ "invite-people": "邀请人员",
+ "to-boards": "邀请到看板 (可多选)",
+ "email-addresses": "电子邮箱地址",
+ "smtp-host-description": "用于发送邮件的SMTP服务器地址。",
+ "smtp-port-description": "SMTP服务器端口。",
+ "smtp-host": "SMTP服务器",
+ "smtp-port": "SMTP端口",
+ "smtp-username": "用户名",
+ "smtp-password": "密码",
+ "send-from": "发件人",
+ "invitation-code": "邀请码",
+ "email-invite-register-subject": "__inviter__ 向您发出邀请",
+ "email-invite-register-text": "亲爱的 __user__,\n\n__inviter__ 邀请您加入 Wekan 进行协作。\n\n请访问下面的链接︰\n__url__\n\n您的的邀请码是︰\n__icode__\n\n非常感谢。",
+ "error-invitation-code-not-exist": "邀请码不存在"
} \ No newline at end of file
diff --git a/i18n/zh-TW.i18n.json b/i18n/zh-TW.i18n.json
index 9479acd3..5b423c49 100644
--- a/i18n/zh-TW.i18n.json
+++ b/i18n/zh-TW.i18n.json
@@ -1,10 +1,30 @@
{
"accept": "接受",
+ "act-activity-notify": "[Wekan] 活動通知",
+ "act-addAttachment": "新增附件__attachment__至__card__",
+ "act-addComment": "評論__card__: __comment__",
+ "act-createBoard": "完成新增 __board__",
+ "act-createCard": "將__card__加入__list__",
+ "act-createList": "新增__list__至__board__",
+ "act-addBoardMember": "在__board__中新增成員__member__",
+ "act-archivedBoard": "封存__board__",
+ "act-archivedCard": "封存__card__",
+ "act-archivedList": "封存__list__",
+ "act-importBoard": "匯入__board__",
+ "act-importCard": "匯入__card__",
+ "act-importList": "匯入__list__",
+ "act-joinMember": "在__card__中新增成員__member__",
+ "act-moveCard": "將__card__從__oldList__移動至__list__",
+ "act-removeBoardMember": "從__board__中移除成員__member__",
+ "act-restoredCard": "將__card__回復至__board__",
+ "act-unjoinMember": "從__card__中移除成員__member__",
+ "act-withBoardTitle": "[Wekan] __board__",
+ "act-withCardTitle": "[__board__] __card__",
"actions": "操作",
"activities": "活動",
"activity": "活動",
"activity-added": "新增 %s 至 %s",
- "activity-archived": "刪除 %s",
+ "activity-archived": "封存 %s",
"activity-attached": "新增附件 %s 至 %s",
"activity-created": "建立 %s",
"activity-excluded": "排除 %s 從 %s",
@@ -16,10 +36,13 @@
"activity-removed": "移除 %s 從 %s 中",
"activity-sent": "寄送 %s 至 %s",
"activity-unjoined": "解除關聯 %s",
+ "activity-checklist-added": "新增待辦清單至 %s",
"add": "新增",
"add-attachment": "新增附件",
"add-board": "新增看板",
"add-card": "新增卡片",
+ "add-checklist": "新增待辦清單",
+ "add-checklist-item": "新增項目",
"add-cover": "新增封面",
"add-label": "新增標籤",
"add-list": "新增清單",
@@ -31,6 +54,8 @@
"all-boards": "全部看板",
"and-n-other-card": "和其他 __count__ 個卡片",
"and-n-other-card_plural": "和其他 __count__ 個卡片",
+ "apply": "送出",
+ "app-is-offline": "目前狀態為離線,若整重將會造成資料遺失",
"archive": "刪除",
"archive-all": "全部刪除",
"archive-board": "刪除看板",
@@ -38,14 +63,15 @@
"archive-list": "刪除該清單",
"archive-selection": "刪除所選內容",
"archiveBoardPopup-title": "確定要刪除看板嗎?",
- "archived-items": "回收筒",
- "archives": "回收筒",
+ "archived-items": "封存",
+ "archives": "封存",
"assign-member": "分配成員",
"attached": "附加",
"attachment": "附件",
"attachment-delete-pop": "刪除附件的操作無法還原。",
"attachmentDeletePopup-title": "刪除附件?",
"attachments": "附件",
+ "auto-watch": "新增看板時自動加入觀察",
"avatar-too-big": "大頭貼太大 (最大 70 Kb)",
"back": "返回",
"board-change-color": "更改顏色",
@@ -56,7 +82,7 @@
"boardChangeColorPopup-title": "修改看板背景",
"boardChangeTitlePopup-title": "重新命名看板",
"boardChangeVisibilityPopup-title": "更改可視級別",
- "boardImportBoardPopup-title": "從 Trello 匯入看板",
+ "boardChangeWatchPopup-title": "更改觀察",
"boardMenuPopup-title": "看板選單",
"boards": "看板",
"bucket-example": "例如 “目標清單”",
@@ -66,11 +92,15 @@
"card-delete-notice": "徹底刪除的操作不可復原,你將會遺失該卡片相關的所有操作記錄。",
"card-delete-pop": "所有的動作將從活動動態中被移除且您將無法重新打開該卡片。此操作無法復原。",
"card-delete-suggest-archive": "你可以將卡片從看板中刪除至回收筒,但保留相關活動。",
+ "card-due": "到期",
+ "card-due-on": "到期",
"card-edit-attachments": "編輯附件",
"card-edit-labels": "編輯標籤",
"card-edit-members": "編輯成員",
"card-labels-title": "更改該卡片上的標籤",
"card-members-title": "在該卡片中新增或移除看板成員",
+ "card-start": "開始",
+ "card-start-on": "開始",
"cardAttachmentsPopup-title": "附件來源",
"cardDeletePopup-title": "徹底刪除卡片?",
"cardDetailsActionsPopup-title": "卡片動作",
@@ -82,10 +112,13 @@
"change-avatar": "更改大頭貼",
"change-password": "更改密碼",
"change-permissions": "更改許可權",
+ "change-settings": "更改設定",
"changeAvatarPopup-title": "更改大頭貼",
"changeLanguagePopup-title": "更改語言",
"changePasswordPopup-title": "更改密碼",
- "changePermissionsPopup-title": "更改權限",
+ "changePermissionsPopup-title": "更改許可權",
+ "changeSettingsPopup-title": "更改設定",
+ "checklists": "待辦清單",
"click-to-star": "點此來標記該看板",
"click-to-unstar": "點此來去除該看板的標記",
"clipboard": "剪貼簿貼上或者拖曳檔案",
@@ -104,11 +137,14 @@
"color-yellow": "黃色",
"comment": "評論",
"comment-placeholder": "新增評論",
+ "comment-only": "Limited",
+ "comment-only-desc": "Can comment on cards only.",
"computer": "從本機上傳",
"create": "建立",
"createBoardPopup-title": "建立看板",
"createLabelPopup-title": "建立標籤",
"current": "目前",
+ "date": "日期",
"decline": "拒絕",
"default-avatar": "預設大頭貼",
"delete": "刪除",
@@ -122,7 +158,10 @@
"edit": "編輯",
"edit-avatar": "更改大頭貼",
"edit-profile": "編輯資料",
+ "editCardStartDatePopup-title": "更改開始日期",
+ "editCardDueDatePopup-title": "更改到期日期",
"editLabelPopup-title": "更改標籤",
+ "editNotificationPopup-title": "更改通知",
"editProfilePopup-title": "編輯資料",
"email": "電子郵件",
"email-enrollAccount-subject": "您在 __siteName__ 的帳號已經建立",
@@ -146,27 +185,34 @@
"error-user-doesNotExist": "該使用者不存在",
"error-user-notAllowSelf": "不允許對自己執行此操作",
"error-user-notCreated": "該使用者未能成功建立",
+ "error-username-taken": "這個使用者名稱已被使用",
"export-board": "Export board",
"filter": "過濾",
"filter-cards": "過濾卡片",
"filter-clear": "清空過濾條件",
+ "filter-no-label": "沒有標籤",
+ "filter-no-member": "沒有成員",
"filter-on": "過濾條件啟用",
"filter-on-desc": "你正在過濾該看板上的卡片,點此編輯過濾條件。",
"filter-to-selection": "要選擇的過濾條件",
"fullname": "全稱",
"header-logo-title": "返回您的看板頁面",
+ "hide-system-messages": "隱藏系統訊息",
+ "headerBarCreateBoardPopup-title": "建立看板",
"home": "首頁",
"import": "匯入",
- "import-board": "從 Trello 匯入",
+ "import-board": "匯入 Trello 資料",
+ "import-board-title": "匯入在 Trello 的看板",
"import-board-trello-instruction": "在你的Trello看板中,點選“功能表”,然後選擇“更多”,“列印與匯出”,“匯出為 JSON” 並拷貝結果文本",
- "import-card": "匯入 Trello 卡片",
- "import-card-trello-instruction": "進入一個 Trello 卡片,選擇“分享與更多”,然後選擇 “匯出為 JSON” 並且拷貝結果文本",
"import-json-placeholder": "貼上您有效的 JSON 資料至此",
+ "import-map-members": "複製成員",
"import-members-map": "您匯入的看板有一些成員。請將您想匯入的成員映射到 Wekan 使用者。",
"import-show-user-mapping": "核對成員映射",
"import-user-select": "選擇您想將此成員映射到的 Wekan 使用者",
+ "importMapMembersAddPopup-title": "選擇 Wekan 成員",
"info": "資訊",
"initials": "縮寫",
+ "invalid-date": "無效的日期",
"joined": "關聯",
"just-invited": "您剛剛被邀請加入此看板",
"keyboard-shortcuts": "鍵盤快速鍵",
@@ -186,17 +232,20 @@
"listImportCardPopup-title": "匯入 Trello 卡片",
"lists": "清單",
"log-out": "登出",
+ "log-in": "登入",
"loginPopup-title": "登入",
- "mapMembersAddPopup-title": "選擇 Wekan 成員",
- "mapMembersPopup-title": "映射成員",
"memberMenuPopup-title": "成員更改",
"members": "成員",
"menu": "選單",
"move-selection": "移動被選擇的項目",
"moveCardPopup-title": "移動卡片",
- "moveSelectionPopup-title": "Move selection",
+ "moveCardToBottom-title": "移至最下面",
+ "moveCardToTop-title": "移至最上面",
+ "moveSelectionPopup-title": "移動選取的項目",
"multi-selection": "多選",
"multi-selection-on": "多選啟用",
+ "muted": "靜音",
+ "muted-info": "您將不會收到有關這個看板的任何訊息",
"my-boards": "我的看板",
"name": "名稱",
"no-archived-cards": "沒有已刪除的卡片",
@@ -205,12 +254,15 @@
"normal": "普通",
"normal-desc": "可以建立以及編輯卡片,無法更改。",
"not-accepted-yet": "邀請尚未接受",
+ "notify-participate": "接收與你有關的卡片更新",
+ "notify-watch": "接收您關注的看板、清單或卡片的更新",
"optional": "選擇性的",
"or": "或",
"page-maybe-private": "本頁面被設為私有. 您必須 <a href='%s'>登入</a>以瀏覽其中內容。",
"page-not-found": "頁面不存在。",
"password": "密碼",
"paste-or-dragdrop": "從剪貼簿貼上,或者拖曳檔案到它上面 (僅限於圖片)",
+ "participating": "參與",
"preview": "預覽",
"previewAttachedImagePopup-title": "預覽",
"previewClipboardImagePopup-title": "預覽",
@@ -223,6 +275,7 @@
"remove-cover": "移除封面",
"remove-from-board": "從看板中刪除",
"remove-label": "移除標籤",
+ "remove-list": "移除清單",
"remove-member": "移除成員",
"remove-member-from-card": "從該卡片中移除",
"remove-member-pop": "確定從 __boardTitle__ 中移除 __name__ (__username__) 嗎? 該成員將被從該看板的所有卡片中移除,同時他會收到一則提醒。",
@@ -234,7 +287,7 @@
"search": "搜尋",
"select-color": "選擇顏色",
"shortcut-assign-self": "分配目前卡片給自己",
- "shortcut-autocomplete-emojies": "自動完成 emojis",
+ "shortcut-autocomplete-emoji": "自動完成表情符號",
"shortcut-autocomplete-members": "自動補齊成員",
"shortcut-clear-filters": "清空全部過濾條件",
"shortcut-close-dialog": "關閉對話方塊",
@@ -242,6 +295,9 @@
"shortcut-show-shortcuts": "顯示此快速鍵清單",
"shortcut-toggle-filterbar": "切換過濾程式邊欄",
"shortcut-toggle-sidebar": "切換面板邊欄",
+ "show-cards-minimum-count": "顯示卡片數量,當內容超過數量",
+ "sidebar-open": "開啟側邊欄",
+ "sidebar-close": "關閉側邊欄",
"signupPopup-title": "建立帳戶",
"star-board-title": "點此標記該看板,它將會出現在您的看板列表上方。",
"starred-boards": "已標記看板",
@@ -250,14 +306,44 @@
"team": "團隊",
"this-board": "這個看板",
"this-card": "這個卡片",
+ "time": "時間",
"title": "標題",
+ "tracking": "追蹤",
+ "tracking-info": "你將會收到與你有關的卡片的所有變更通知",
"unassign-member": "取消分配成員",
"unsaved-description": "未儲存的描述",
+ "unwatch": "取消觀察",
"upload": "上傳",
"upload-avatar": "上傳大頭貼",
"uploaded-avatar": "大頭貼已經上傳",
"username": "使用者名稱",
"view-it": "檢視",
"warn-list-archived": "警告: 該卡片位於已刪除的清單中",
- "what-to-do": "要做什麼?"
+ "watch": "觀察",
+ "watching": "觀察中",
+ "watching-info": "你將會收到關於這個看板所有的變更通知",
+ "welcome-board": "歡迎進入看板",
+ "welcome-list1": "基本",
+ "welcome-list2": "進階",
+ "what-to-do": "要做什麼?",
+ "admin-panel": "Admin Panel",
+ "settings": "Settings",
+ "people": "People",
+ "registration": "Registration",
+ "disable-self-registration": "Disable Self-Registration",
+ "invite": "Invite",
+ "invite-people": "Invite People",
+ "to-boards": "To board(s)",
+ "email-addresses": "Email Addresses",
+ "smtp-host-description": "The address of the SMTP server that handles your emails.",
+ "smtp-port-description": "The port your SMTP server uses for outgoing emails.",
+ "smtp-host": "SMTP Host",
+ "smtp-port": "SMTP Port",
+ "smtp-username": "使用者名稱",
+ "smtp-password": "密碼",
+ "send-from": "From",
+ "invitation-code": "Invitation Code",
+ "email-invite-register-subject": "__inviter__ 向您發出邀請",
+ "email-invite-register-text": "Dear __user__,\n\n__inviter__ invites you to Wekan for collaborations.\n\nPlease follow the link below:\n__url__\n\nAnd your invitation code is: __icode__\n\nThanks.",
+ "error-invitation-code-not-exist": "Invitation code doesn't exist"
} \ No newline at end of file
diff --git a/meta/dwrensha-pgp-sig b/meta/dwrensha-pgp-sig
new file mode 100644
index 00000000..0ee50fa4
--- /dev/null
+++ b/meta/dwrensha-pgp-sig
Binary files differ
diff --git a/meta/keyring b/meta/keyring
index e34b146d..b4d58533 100644
--- a/meta/keyring
+++ b/meta/keyring
Binary files differ
diff --git a/meta/screenshots/board-view.jpg b/meta/screenshots/board-view.jpg
deleted file mode 100644
index 6b8ffafe..00000000
--- a/meta/screenshots/board-view.jpg
+++ /dev/null
Binary files differ
diff --git a/meta/screenshots/board_view_01.png b/meta/screenshots/board_view_01.png
new file mode 100755
index 00000000..6151a17b
--- /dev/null
+++ b/meta/screenshots/board_view_01.png
Binary files differ
diff --git a/meta/screenshots/board_view_02.png b/meta/screenshots/board_view_02.png
new file mode 100755
index 00000000..2e745a7b
--- /dev/null
+++ b/meta/screenshots/board_view_02.png
Binary files differ
diff --git a/models/activities.js b/models/activities.js
index aa2ea3ec..9a41d4aa 100644
--- a/models/activities.js
+++ b/models/activities.js
@@ -35,6 +35,9 @@ Activities.helpers({
attachment() {
return Attachments.findOne(this.attachmentId);
},
+ checklist() {
+ return Checklists.findOne(this.checklistId);
+ },
});
Activities.before.insert((userId, doc) => {
@@ -49,6 +52,8 @@ if (Meteor.isServer) {
Activities._collection._ensureIndex({ createdAt: -1 });
Activities._collection._ensureIndex({ cardId: 1, createdAt: -1 });
Activities._collection._ensureIndex({ boardId: 1, createdAt: -1 });
+ Activities._collection._ensureIndex({ commentId: 1 }, { partialFilterExpression: { commentId: { $exists: true } } });
+ Activities._collection._ensureIndex({ attachmentId: 1 }, { partialFilterExpression: { attachmentId: { $exists: true } } });
});
Activities.after.insert((userId, doc) => {
@@ -102,6 +107,10 @@ if (Meteor.isServer) {
const attachment = activity.attachment();
params.attachment = attachment._id;
}
+ if (activity.checklistId) {
+ const checklist = activity.checklist();
+ params.checklist = checklist.title;
+ }
if (board) {
const watchingUsers = _.pluck(_.where(board.watchers, {level: 'watching'}), 'userId');
const trackingUsers = _.pluck(_.where(board.watchers, {level: 'tracking'}), 'userId');
diff --git a/models/boards.js b/models/boards.js
index 3051ef1e..f4296a6c 100644
--- a/models/boards.js
+++ b/models/boards.js
@@ -107,6 +107,7 @@ Boards.attachSchema(new SimpleSchema({
userId: this.userId,
isAdmin: true,
isActive: true,
+ isCommentOnly: false,
}];
}
},
@@ -120,6 +121,9 @@ Boards.attachSchema(new SimpleSchema({
'members.$.isActive': {
type: Boolean,
},
+ 'members.$.isCommentOnly': {
+ type: Boolean,
+ },
permission: {
type: String,
allowedValues: ['public', 'private'],
@@ -219,6 +223,10 @@ Boards.helpers({
return !!_.findWhere(this.members, {userId: memberId, isActive: true, isAdmin: true});
},
+ hasCommentOnly(memberId) {
+ return !!_.findWhere(this.members, {userId: memberId, isActive: true, isAdmin: false, isCommentOnly: true});
+ },
+
absoluteUrl() {
return FlowRouter.url('board', { id: this._id, slug: this.slug });
},
@@ -249,7 +257,7 @@ Boards.mutations({
return { $set: { title }};
},
- setDesciption(description) {
+ setDescription(description) {
return { $set: {description} };
},
@@ -306,6 +314,7 @@ Boards.mutations({
userId: memberId,
isAdmin: false,
isActive: true,
+ isCommentOnly: false,
},
},
};
@@ -332,7 +341,7 @@ Boards.mutations({
};
},
- setMemberPermission(memberId, isAdmin) {
+ setMemberPermission(memberId, isAdmin, isCommentOnly) {
const memberIndex = this.memberIndex(memberId);
// do not allow change permission of self
@@ -343,6 +352,7 @@ Boards.mutations({
return {
$set: {
[`members.${memberIndex}.isAdmin`]: isAdmin,
+ [`members.${memberIndex}.isCommentOnly`]: isCommentOnly,
},
};
},
@@ -414,6 +424,7 @@ if (Meteor.isServer) {
_id: 1,
'members.userId': 1,
}, { unique: true });
+ Boards._collection._ensureIndex({'members.userId': 1});
});
// Genesis: the first activity of the newly created board
diff --git a/models/cardComments.js b/models/cardComments.js
index ce6edf3c..070c148e 100644
--- a/models/cardComments.js
+++ b/models/cardComments.js
@@ -57,6 +57,12 @@ CardComments.helpers({
CardComments.hookOptions.after.update = { fetchPrevious: false };
if (Meteor.isServer) {
+ // Comments are often fetched within a card, so we create an index to make these
+ // queries more efficient.
+ Meteor.startup(() => {
+ CardComments._collection._ensureIndex({ cardId: 1, createdAt: -1 });
+ });
+
CardComments.after.insert((userId, doc) => {
Activities.insert({
userId,
diff --git a/models/cards.js b/models/cards.js
index 84fbb6c2..922fbecd 100644
--- a/models/cards.js
+++ b/models/cards.js
@@ -56,6 +56,14 @@ Cards.attachSchema(new SimpleSchema({
type: [String],
optional: true,
},
+ startAt: {
+ type: Date,
+ optional: true,
+ },
+ dueAt: {
+ type: Date,
+ optional: true,
+ },
// XXX Should probably be called `authorId`. Is it even needed since we have
// the `members` field?
userId: {
@@ -133,6 +141,36 @@ Cards.helpers({
return cover && cover.url() && cover;
},
+ checklists() {
+ return Checklists.find({ cardId: this._id }, { sort: { createdAt: 1 }});
+ },
+
+ checklistItemCount() {
+ const checklists = this.checklists().fetch();
+ return checklists.map((checklist) => {
+ return checklist.itemCount();
+ }).reduce((prev, next) => {
+ return prev + next;
+ }, 0);
+ },
+
+ checklistFinishedCount() {
+ const checklists = this.checklists().fetch();
+ return checklists.map((checklist) => {
+ return checklist.finishedCount();
+ }).reduce((prev, next) => {
+ return prev + next;
+ }, 0);
+ },
+
+ checklistFinished() {
+ return this.hasChecklist() && this.checklistItemCount() === this.checklistFinishedCount();
+ },
+
+ hasChecklist() {
+ return this.checklistItemCount() !== 0;
+ },
+
absoluteUrl() {
const board = this.board();
return FlowRouter.url('card', {
@@ -207,13 +245,29 @@ Cards.mutations({
unsetCover() {
return { $unset: { coverId: '' }};
},
+
+ setStart(startAt) {
+ return { $set: { startAt }};
+ },
+
+ unsetStart() {
+ return { $unset: { startAt: '' }};
+ },
+
+ setDue(dueAt) {
+ return { $set: { dueAt }};
+ },
+
+ unsetDue() {
+ return { $unset: { dueAt: '' }};
+ },
});
if (Meteor.isServer) {
// Cards are often fetched within a board, so we create an index to make these
// queries more efficient.
Meteor.startup(() => {
- Cards._collection._ensureIndex({ boardId: 1 });
+ Cards._collection._ensureIndex({ boardId: 1, createdAt: -1 });
});
Cards.after.insert((userId, doc) => {
@@ -286,20 +340,33 @@ if (Meteor.isServer) {
// Say goodbye to the former member
if (modifier.$pull && modifier.$pull.members) {
memberId = modifier.$pull.members;
- Activities.insert({
- userId,
- memberId,
- activityType: 'unjoinMember',
- boardId: doc.boardId,
- cardId: doc._id,
- });
+ // Check that the former member is member of the card
+ if (_.contains(doc.members, memberId)) {
+ Activities.insert({
+ userId,
+ memberId,
+ activityType: 'unjoinMember',
+ boardId: doc.boardId,
+ cardId: doc._id,
+ });
+ }
}
});
// Remove all activities associated with a card if we remove the card
+ // Remove also card_comments / checklists / attachments
Cards.after.remove((userId, doc) => {
Activities.remove({
cardId: doc._id,
});
+ Checklists.remove({
+ cardId: doc._id,
+ });
+ CardComments.remove({
+ cardId: doc._id,
+ });
+ Attachments.remove({
+ cardId: doc._id,
+ });
});
}
diff --git a/models/checklists.js b/models/checklists.js
new file mode 100644
index 00000000..3425f230
--- /dev/null
+++ b/models/checklists.js
@@ -0,0 +1,168 @@
+Checklists = new Mongo.Collection('checklists');
+
+Checklists.attachSchema(new SimpleSchema({
+ cardId: {
+ type: String,
+ },
+ title: {
+ type: String,
+ },
+ items: {
+ type: [Object],
+ defaultValue: [],
+ },
+ 'items.$._id': {
+ type: String,
+ },
+ 'items.$.title': {
+ type: String,
+ },
+ 'items.$.isFinished': {
+ type: Boolean,
+ defaultValue: false,
+ },
+ finishedAt: {
+ type: Date,
+ optional: true,
+ },
+ createdAt: {
+ type: Date,
+ denyUpdate: false,
+ },
+}));
+
+Checklists.helpers({
+ itemCount () {
+ return this.items.length;
+ },
+ finishedCount () {
+ return this.items.filter((item) => {
+ return item.isFinished;
+ }).length;
+ },
+ isFinished () {
+ return 0 !== this.itemCount() && this.itemCount() === this.finishedCount();
+ },
+ getItem (_id) {
+ return _.findWhere(this.items, { _id });
+ },
+ itemIndex(itemId) {
+ return _.pluck(this.items, '_id').indexOf(itemId);
+ },
+});
+
+Checklists.allow({
+ insert(userId, doc) {
+ return allowIsBoardMemberByCard(userId, Cards.findOne(doc.cardId));
+ },
+ update(userId, doc) {
+ return allowIsBoardMemberByCard(userId, Cards.findOne(doc.cardId));
+ },
+ remove(userId, doc) {
+ return allowIsBoardMemberByCard(userId, Cards.findOne(doc.cardId));
+ },
+ fetch: ['userId', 'cardId'],
+});
+
+Checklists.before.insert((userId, doc) => {
+ doc.createdAt = new Date();
+ if (!doc.userId) {
+ doc.userId = userId;
+ }
+});
+
+Checklists.mutations({
+ //for checklist itself
+ setTitle(title){
+ return { $set: { title }};
+ },
+ //for items in checklist
+ addItem(title) {
+ const itemCount = this.itemCount();
+ const _id = `${this._id}${itemCount}`;
+ return { $addToSet: {items: {_id, title, isFinished: false}} };
+ },
+ removeItem(itemId) {
+ return {$pull: {items: {_id : itemId}}};
+ },
+ editItem(itemId, title) {
+ if (this.getItem(itemId)) {
+ const itemIndex = this.itemIndex(itemId);
+ return {
+ $set: {
+ [`items.${itemIndex}.title`]: title,
+ },
+ };
+ }
+ return {};
+ },
+ finishItem(itemId) {
+ if (this.getItem(itemId)) {
+ const itemIndex = this.itemIndex(itemId);
+ return {
+ $set: {
+ [`items.${itemIndex}.isFinished`]: true,
+ },
+ };
+ }
+ return {};
+ },
+ resumeItem(itemId) {
+ if (this.getItem(itemId)) {
+ const itemIndex = this.itemIndex(itemId);
+ return {
+ $set: {
+ [`items.${itemIndex}.isFinished`]: false,
+ },
+ };
+ }
+ return {};
+ },
+ toggleItem(itemId) {
+ const item = this.getItem(itemId);
+ if (item) {
+ const itemIndex = this.itemIndex(itemId);
+ return {
+ $set: {
+ [`items.${itemIndex}.isFinished`]: !item.isFinished,
+ },
+ };
+ }
+ return {};
+ },
+});
+
+if (Meteor.isServer) {
+ Meteor.startup(() => {
+ Checklists._collection._ensureIndex({ cardId: 1, createdAt: 1 });
+ });
+
+ Checklists.after.insert((userId, doc) => {
+ Activities.insert({
+ userId,
+ activityType: 'addChecklist',
+ cardId: doc.cardId,
+ boardId: Cards.findOne(doc.cardId).boardId,
+ checklistId: doc._id,
+ });
+ });
+
+ //TODO: so there will be no activity for adding item into checklist, maybe will be implemented in the future.
+ // Checklists.after.update((userId, doc) => {
+ // console.log('update:', doc)
+ // Activities.insert({
+ // userId,
+ // activityType: 'addChecklist',
+ // boardId: doc.boardId,
+ // cardId: doc.cardId,
+ // checklistId: doc._id,
+ // });
+ // });
+
+ Checklists.before.remove((userId, doc) => {
+ const activity = Activities.findOne({ checklistId: doc._id });
+ if (activity) {
+ Activities.remove(activity._id);
+ }
+ });
+}
diff --git a/models/import.js b/models/import.js
index 86ef75b3..41c2204b 100644
--- a/models/import.js
+++ b/models/import.js
@@ -25,6 +25,8 @@ class TrelloCreator {
this.labels = {};
// Map of lists Trello ID => Wekan ID
this.lists = {};
+ // Map of cards Trello ID => Wekan ID
+ this.cards = {};
// The comments, indexed by Trello card id (to map when importing cards)
this.comments = {};
// the members, indexed by Trello member id => Wekan user ID
@@ -119,6 +121,18 @@ class TrelloCreator {
})]);
}
+ checkChecklists(trelloChecklists) {
+ check(trelloChecklists, [Match.ObjectIncluding({
+ idBoard: String,
+ idCard: String,
+ name: String,
+ checkItems: [Match.ObjectIncluding({
+ state: String,
+ name: String,
+ })],
+ })]);
+ }
+
// You must call parseActions before calling this one.
createBoardAndLabels(trelloBoard) {
const boardToCreate = {
@@ -241,6 +255,8 @@ class TrelloCreator {
}
// insert card
const cardId = Cards.direct.insert(cardToCreate);
+ // keep track of Trello id => WeKan id
+ this.cards[card.id] = cardId;
// log activity
Activities.direct.insert({
activityType: 'importCard',
@@ -280,7 +296,7 @@ class TrelloCreator {
createdAt: this._now(commentToCreate.createdAt),
// we attribute the addComment (not the import)
// to the original author - it is needed by some UI elements.
- userId: commentToCreate.userId,
+ userId: this._user(commentToCreate.userId),
});
});
}
@@ -365,6 +381,28 @@ class TrelloCreator {
});
}
+ createChecklists(trelloChecklists) {
+ trelloChecklists.forEach((checklist) => {
+ // Create the checklist
+ const checklistToCreate = {
+ cardId: this.cards[checklist.idCard],
+ title: checklist.name,
+ createdAt: this._now(),
+ };
+ const checklistId = Checklists.direct.insert(checklistToCreate);
+ // Now add the items to the checklist
+ const itemsToCreate = [];
+ checklist.checkItems.forEach((item) => {
+ itemsToCreate.push({
+ _id: checklistId + itemsToCreate.length,
+ title: item.name,
+ isFinished: item.state === 'complete',
+ });
+ });
+ Checklists.direct.update(checklistId, {$set: {items: itemsToCreate}});
+ });
+ }
+
getAdmin(trelloMemberType) {
return trelloMemberType === 'admin';
}
@@ -446,6 +484,7 @@ Meteor.methods({
trelloCreator.checkLabels(trelloBoard.labels);
trelloCreator.checkLists(trelloBoard.lists);
trelloCreator.checkCards(trelloBoard.cards);
+ trelloCreator.checkChecklists(trelloBoard.checklists);
} catch (e) {
throw new Meteor.Error('error-json-schema');
}
@@ -458,6 +497,7 @@ Meteor.methods({
const boardId = trelloCreator.createBoardAndLabels(trelloBoard);
trelloCreator.createLists(trelloBoard.lists, boardId);
trelloCreator.createCards(trelloBoard.cards, boardId);
+ trelloCreator.createChecklists(trelloBoard.checklists);
// XXX add members
return boardId;
},
diff --git a/models/invitationCodes.js b/models/invitationCodes.js
new file mode 100644
index 00000000..5761977a
--- /dev/null
+++ b/models/invitationCodes.js
@@ -0,0 +1,45 @@
+InvitationCodes = new Mongo.Collection('invitation_codes');
+
+InvitationCodes.attachSchema(new SimpleSchema({
+ code: {
+ type: String,
+ },
+ email: {
+ type: String,
+ unique: true,
+ regEx: SimpleSchema.RegEx.Email,
+ },
+ createdAt: {
+ type: Date,
+ denyUpdate: false,
+ },
+ // always be the admin if only one admin
+ authorId: {
+ type: String,
+ },
+ boardsToBeInvited: {
+ type: [String],
+ optional: true,
+ },
+ valid: {
+ type: Boolean,
+ defaultValue: true,
+ },
+}));
+
+InvitationCodes.helpers({
+ author(){
+ return Users.findOne(this.authorId);
+ },
+});
+
+// InvitationCodes.before.insert((userId, doc) => {
+ // doc.createdAt = new Date();
+ // doc.authorId = userId;
+// });
+
+if (Meteor.isServer) {
+ Boards.deny({
+ fetch: ['members'],
+ });
+}
diff --git a/models/lists.js b/models/lists.js
index 9ae2e4f7..0ae3ca5f 100644
--- a/models/lists.js
+++ b/models/lists.js
@@ -46,13 +46,13 @@ Lists.attachSchema(new SimpleSchema({
Lists.allow({
insert(userId, doc) {
- return allowIsBoardMember(userId, Boards.findOne(doc.boardId));
+ return allowIsBoardMemberNonComment(userId, Boards.findOne(doc.boardId));
},
update(userId, doc) {
- return allowIsBoardMember(userId, Boards.findOne(doc.boardId));
+ return allowIsBoardMemberNonComment(userId, Boards.findOne(doc.boardId));
},
remove(userId, doc) {
- return allowIsBoardMember(userId, Boards.findOne(doc.boardId));
+ return allowIsBoardMemberNonComment(userId, Boards.findOne(doc.boardId));
},
fetch: ['boardId'],
});
@@ -105,6 +105,17 @@ if (Meteor.isServer) {
});
});
+ Lists.before.remove((userId, doc) => {
+ Activities.insert({
+ userId,
+ type: 'list',
+ activityType: 'removeList',
+ boardId: doc.boardId,
+ listId: doc._id,
+ title: doc.title,
+ });
+ });
+
Lists.after.update((userId, doc) => {
if (doc.archived) {
Activities.insert({
diff --git a/models/settings.js b/models/settings.js
new file mode 100644
index 00000000..0c2da4d3
--- /dev/null
+++ b/models/settings.js
@@ -0,0 +1,139 @@
+Settings = new Mongo.Collection('settings');
+
+Settings.attachSchema(new SimpleSchema({
+ disableRegistration: {
+ type: Boolean,
+ },
+ 'mailServer.username': {
+ type: String,
+ optional: true,
+ },
+ 'mailServer.password': {
+ type: String,
+ optional: true,
+ },
+ 'mailServer.host': {
+ type: String,
+ optional: true,
+ },
+ 'mailServer.port': {
+ type: String,
+ optional: true,
+ },
+ 'mailServer.from': {
+ type: String,
+ optional: true,
+ defaultValue: 'Wekan',
+ },
+ createdAt: {
+ type: Date,
+ denyUpdate: true,
+ },
+ modifiedAt: {
+ type: Date,
+ },
+}));
+Settings.helpers({
+ mailUrl () {
+ if (!this.mailServer.host) {
+ return null;
+ }
+ if (!this.mailServer.username && !this.mailServer.password) {
+ return `smtp://${this.mailServer.host}:${this.mailServer.port}/`;
+ }
+ return `smtp://${this.mailServer.username}:${this.mailServer.password}@${this.mailServer.host}:${this.mailServer.port}/`;
+ },
+});
+Settings.allow({
+ update(userId) {
+ const user = Users.findOne(userId);
+ return user && user.isAdmin;
+ },
+});
+
+Settings.before.update((userId, doc, fieldNames, modifier) => {
+ modifier.$set = modifier.$set || {};
+ modifier.$set.modifiedAt = new Date();
+});
+
+if (Meteor.isServer) {
+ Meteor.startup(() => {
+ const setting = Settings.findOne({});
+ if(!setting){
+ const now = new Date();
+ const defaultSetting = {disableRegistration: false, mailServer: {
+ username: '', password:'', host: '', port:'', from: '',
+ }, createdAt: now, modifiedAt: now};
+ Settings.insert(defaultSetting);
+ }
+ const newSetting = Settings.findOne();
+ process.env.MAIL_URL = newSetting.mailUrl();
+ Accounts.emailTemplates.from = newSetting.mailServer.from;
+ });
+ Settings.after.update((userId, doc, fieldNames) => {
+ // assign new values to mail-from & MAIL_URL in environment
+ if (_.contains(fieldNames, 'mailServer') && _.contains(fieldNames, 'host')) {
+ if (!doc.mailServer.username && !doc.mailServer.password) {
+ process.env.MAIL_URL = `smtp://${doc.mailServer.host}:${doc.mailServer.port}/`;
+ } else {
+ process.env.MAIL_URL = `smtp://${doc.mailServer.username}:${doc.mailServer.password}@${doc.mailServer.host}:${doc.mailServer.port}/`;
+ }
+ Accounts.emailTemplates.from = doc.mailServer.from;
+ }
+ });
+
+ function getRandomNum (min, max) {
+ const range = max - min;
+ const rand = Math.random();
+ return (min + Math.round(rand * range));
+ }
+
+ function sendInvitationEmail (_id){
+ const icode = InvitationCodes.findOne(_id);
+ const author = Users.findOne(Meteor.userId());
+ try {
+ const params = {
+ email: icode.email,
+ inviter: Users.findOne(icode.authorId).username,
+ user: icode.email.split('@')[0],
+ icode: icode.code,
+ url: FlowRouter.url('sign-up'),
+ };
+ const lang = author.getLanguage();
+ if (Settings.findOne().mailUrl()) {
+ Email.send({
+ to: icode.email,
+ from: Accounts.emailTemplates.from,
+ subject: TAPi18n.__('email-invite-register-subject', params, lang),
+ text: TAPi18n.__('email-invite-register-text', params, lang),
+ });
+ }
+ } catch (e) {
+ InvitationCodes.remove(_id);
+ throw new Meteor.Error('email-fail', e.message);
+ }
+ }
+
+ Meteor.methods({
+ sendInvitation(emails, boards) {
+ check(emails, [String]);
+ check(boards, [String]);
+ const user = Users.findOne(Meteor.userId());
+ if(!user.isAdmin){
+ throw new Meteor.Error('not-allowed');
+ }
+ emails.forEach((email) => {
+ if (email && SimpleSchema.RegEx.Email.test(email)) {
+ const code = getRandomNum(100000, 999999);
+ InvitationCodes.insert({code, email, boardsToBeInvited: boards, createdAt: new Date(), authorId: Meteor.userId()}, function(err, _id){
+ if (!err && _id) {
+ sendInvitationEmail(_id);
+ } else {
+ throw new Meteor.Error('invitation-generated-fail', err.message);
+ }
+ });
+ }
+ });
+ },
+ });
+}
diff --git a/models/unsavedEdits.js b/models/unsavedEdits.js
index 25952fb5..d4f3616a 100644
--- a/models/unsavedEdits.js
+++ b/models/unsavedEdits.js
@@ -26,6 +26,9 @@ if (Meteor.isServer) {
function isAuthor(userId, doc, fieldNames = []) {
return userId === doc.userId && fieldNames.indexOf('userId') === -1;
}
+ Meteor.startup(() => {
+ UnsavedEditCollection._collection._ensureIndex({ userId: 1 });
+ });
UnsavedEditCollection.allow({
insert: isAuthor,
update: isAuthor,
diff --git a/models/users.js b/models/users.js
index 790ee0a1..edf1a203 100644
--- a/models/users.js
+++ b/models/users.js
@@ -1,3 +1,7 @@
+// Sandstorm context is detected using the METEOR_SETTINGS environment variable
+// in the package definition.
+const isSandstorm = Meteor.settings && Meteor.settings.public &&
+ Meteor.settings.public.sandstorm;
Users = Meteor.users;
Users.attachSchema(new SimpleSchema({
@@ -55,6 +59,10 @@ Users.attachSchema(new SimpleSchema({
type: String,
optional: true,
},
+ 'profile.hiddenSystemMessages': {
+ type: Boolean,
+ optional: true,
+ },
'profile.initials': {
type: String,
optional: true,
@@ -71,6 +79,10 @@ Users.attachSchema(new SimpleSchema({
type: [String],
optional: true,
},
+ 'profile.showCardsCountAt': {
+ type: Number,
+ optional: true,
+ },
'profile.starredBoards': {
type: [String],
optional: true,
@@ -79,6 +91,10 @@ Users.attachSchema(new SimpleSchema({
type: [String],
optional: true,
},
+ 'profile.icode': {
+ type: String,
+ optional: true,
+ },
services: {
type: Object,
optional: true,
@@ -105,6 +121,16 @@ if (Meteor.isClient) {
return board && board.hasMember(this._id);
},
+ isNotCommentOnly() {
+ const board = Boards.findOne(Session.get('currentBoard'));
+ return board && board.hasMember(this._id) && !board.hasCommentOnly(this._id);
+ },
+
+ isCommentOnly() {
+ const board = Boards.findOne(Session.get('currentBoard'));
+ return board && board.hasCommentOnly(this._id);
+ },
+
isBoardAdmin() {
const board = Boards.findOne(Session.get('currentBoard'));
return board && board.hasAdmin(this._id);
@@ -147,6 +173,11 @@ Users.helpers({
return _.contains(notifications, activityId);
},
+ hasHiddenSystemMessages() {
+ const profile = this.profile || {};
+ return profile.hiddenSystemMessages || false;
+ },
+
getEmailBuffer() {
const {emailBuffer = []} = this.profile;
return emailBuffer;
@@ -167,6 +198,11 @@ Users.helpers({
}
},
+ getLimitToShowCardsCount() {
+ const profile = this.profile || {};
+ return profile.showCardsCountAt;
+ },
+
getName() {
const profile = this.profile || {};
return profile.fullname || this.username;
@@ -227,6 +263,14 @@ Users.mutations({
this.addTag(tag);
},
+ toggleSystem(value = false) {
+ return {
+ $set: {
+ 'profile.hiddenSystemMessages': !value,
+ },
+ };
+ },
+
addNotification(activityId) {
return {
$addToSet: {
@@ -262,6 +306,10 @@ Users.mutations({
setAvatarUrl(avatarUrl) {
return { $set: { 'profile.avatarUrl': avatarUrl }};
},
+
+ setShowCardsCountAt(limit) {
+ return { $set: { 'profile.showCardsCountAt': limit } };
+ },
});
Meteor.methods({
@@ -274,6 +322,14 @@ Meteor.methods({
Users.update(this.userId, {$set: { username }});
}
},
+ toggleSystemMessages() {
+ const user = Meteor.user();
+ user.toggleSystem(user.hasHiddenSystemMessages());
+ },
+ changeLimitToShowCardsCount(limit) {
+ check(limit, Number);
+ Meteor.user().setShowCardsCountAt(limit);
+ },
});
if (Meteor.isServer) {
@@ -306,8 +362,9 @@ if (Meteor.isServer) {
if (user._id === inviter._id) throw new Meteor.Error('error-user-notAllowSelf');
} else {
if (posAt <= 0) throw new Meteor.Error('error-user-doesNotExist');
-
- const email = username;
+ if (Settings.findOne().disableRegistration) throw new Meteor.Error('error-user-notCreated');
+ // Set in lowercase email before creating account
+ const email = username.toLowerCase();
username = email.substring(0, posAt);
const newUserId = Accounts.createUser({ username, email });
if (!newUserId) throw new Meteor.Error('error-user-notCreated');
@@ -326,27 +383,51 @@ if (Meteor.isServer) {
board.addMember(user._id);
user.addInvite(boardId);
- try {
- const params = {
- user: user.username,
- inviter: inviter.username,
- board: board.title,
- url: board.absoluteUrl(),
- };
- const lang = user.getLanguage();
- Email.send({
- to: user.emails[0].address,
- from: Accounts.emailTemplates.from,
- subject: TAPi18n.__('email-invite-subject', params, lang),
- text: TAPi18n.__('email-invite-text', params, lang),
- });
- } catch (e) {
- throw new Meteor.Error('email-fail', e.message);
+ if (Settings.findOne().mailUrl()) {
+ try {
+ const params = {
+ user: user.username,
+ inviter: inviter.username,
+ board: board.title,
+ url: board.absoluteUrl(),
+ };
+ const lang = user.getLanguage();
+ Email.send({
+ to: user.emails[0].address.toLowerCase(),
+ from: Accounts.emailTemplates.from,
+ subject: TAPi18n.__('email-invite-subject', params, lang),
+ text: TAPi18n.__('email-invite-text', params, lang),
+ });
+ } catch (e) {
+ throw new Meteor.Error('email-fail', e.message);
+ }
}
-
return { username: user.username, email: user.emails[0].address };
},
});
+ Accounts.onCreateUser((options, user) => {
+ const userCount = Users.find().count();
+ if (userCount === 0){
+ user.isAdmin = true;
+ return user;
+ }
+ const disableRegistration = Settings.findOne().disableRegistration;
+ if (!disableRegistration) {
+ return user;
+ }
+
+ if (!options || !options.profile) {
+ throw new Meteor.Error('error-invitation-code-blank', 'The invitation code is required');
+ }
+ const invitationCode = InvitationCodes.findOne({code: options.profile.invitationcode, email: options.email, valid: true});
+ if (!invitationCode) {
+ throw new Meteor.Error('error-invitation-code-not-exist', 'The invitation code doesn\'t exist');
+ }else{
+ user.profile = {icode: options.profile.invitationcode};
+ }
+
+ return user;
+ });
}
if (Meteor.isServer) {
@@ -394,24 +475,49 @@ if (Meteor.isServer) {
return fakeUserId.get() || getUserId();
};
- Users.after.insert((userId, doc) => {
- const fakeUser = {
- extendAutoValueContext: {
- userId: doc._id,
- },
- };
-
- fakeUserId.withValue(doc._id, () => {
- // Insert the Welcome Board
- Boards.insert({
- title: TAPi18n.__('welcome-board'),
- permission: 'private',
- }, fakeUser, (err, boardId) => {
-
- ['welcome-list1', 'welcome-list2'].forEach((title) => {
- Lists.insert({ title: TAPi18n.__(title), boardId }, fakeUser);
+ if (!isSandstorm) {
+ Users.after.insert((userId, doc) => {
+ const fakeUser = {
+ extendAutoValueContext: {
+ userId: doc._id,
+ },
+ };
+
+ fakeUserId.withValue(doc._id, () => {
+ // Insert the Welcome Board
+ Boards.insert({
+ title: TAPi18n.__('welcome-board'),
+ permission: 'private',
+ }, fakeUser, (err, boardId) => {
+
+ ['welcome-list1', 'welcome-list2'].forEach((title) => {
+ Lists.insert({ title: TAPi18n.__(title), boardId }, fakeUser);
+ });
});
});
});
+ }
+
+ Users.after.insert((userId, doc) => {
+
+ //invite user to corresponding boards
+ const disableRegistration = Settings.findOne().disableRegistration;
+ if (disableRegistration) {
+ const invitationCode = InvitationCodes.findOne({code: doc.profile.icode, valid:true});
+ if (!invitationCode) {
+ throw new Meteor.Error('error-invitation-code-not-exist');
+ }else{
+ invitationCode.boardsToBeInvited.forEach((boardId) => {
+ const board = Boards.findOne(boardId);
+ board.addMember(doc._id);
+ });
+ if (!doc.profile) {
+ doc.profile = {};
+ }
+ doc.profile.invitedBoards = invitationCode.boardsToBeInvited;
+ Users.update(doc._id, {$set:{profile: doc.profile}});
+ InvitationCodes.update(invitationCode._id, {$set: {valid:false}});
+ }
+ }
});
}
diff --git a/package.json b/package.json
index 0a69681f..b4fdfbbe 100644
--- a/package.json
+++ b/package.json
@@ -1,10 +1,10 @@
{
"name": "wekan",
- "version": "0.10.1",
+ "version": "0.17.0",
"description": "The open-source Trello-like kanban",
"private": true,
"scripts": {
- "lint": "eslint .",
+ "lint": "eslint --ignore-pattern 'packages/*' .",
"test": "npm run --silent lint"
},
"repository": {
@@ -15,11 +15,11 @@
"bugs": {
"url": "https://github.com/wekan/wekan/issues"
},
- "homepage": "https://wekan.io",
+ "homepage": "https://wekan.github.io",
"devDependencies": {
"eslint": "^2.0.0"
},
"dependencies": {
- "xss": "^0.2.13"
+ "xss": "^0.3.3"
}
}
diff --git a/packages/kadira:flow-router b/packages/kadira:flow-router
new file mode 160000
+Subproject da8154738eddfe43a639bd6b5f400518a4142db
diff --git a/sandstorm-pkgdef.capnp b/sandstorm-pkgdef.capnp
index d9e7da3d..9c5d5438 100644
--- a/sandstorm-pkgdef.capnp
+++ b/sandstorm-pkgdef.capnp
@@ -22,10 +22,10 @@ const pkgdef :Spk.PackageDefinition = (
appTitle = (defaultText = "Wekan"),
# The name of the app as it is displayed to the user.
- appVersion = 12,
+ appVersion = 19,
# Increment this for every release.
- appMarketingVersion = (defaultText = "0.11.0-rc2"),
+ appMarketingVersion = (defaultText = "0.16.0~2017-03-21"),
# Human-readable presentation of the app version.
minUpgradableAppVersion = 0,
@@ -57,14 +57,15 @@ const pkgdef :Spk.PackageDefinition = (
market = (svg = embed "meta/icons/wekan-150.svg"),
),
- website = "https://wekan.io",
+ website = "https://wekan.github.io",
codeUrl = "https://github.com/wekan/wekan",
license = (openSource = mit),
categories = [productivity, office],
author = (
- contactEmail = "mquandalle@wekan.io",
- pgpSignature = embed "meta/mquandalle-pgp-sig",
+ upstreamAuthor = "Maxime Quandalle",
+ contactEmail = "david@sandstorm.io",
+ pgpSignature = embed "meta/dwrensha-pgp-sig",
),
pgpKeyring = embed "meta/keyring",
@@ -75,11 +76,15 @@ const pkgdef :Spk.PackageDefinition = (
screenshots = [
(
- width = 512,
- height = 330,
- jpeg = embed "meta/screenshots/board-view.jpg"
+ width = 1920,
+ height = 1133,
+ png = embed "meta/screenshots/board_view_01.png"
+ ),
+ (
+ width = 1920,
+ height = 1133,
+ png = embed "meta/screenshots/board_view_02.png"
),
- # XXX The screenshots should have a standard width and height.
],
changeLog = (
@@ -173,8 +178,48 @@ const pkgdef :Spk.PackageDefinition = (
#
# XXX Administrators configuration options aren’t implemented yet, so this
# role is currently useless.
- )]
- )
+ )],
+
+ eventTypes = [(
+ name = "addBoardMember",
+ verbPhrase = (defaultText = "added to board"),
+ ), (
+ name = "createList",
+ verbPhrase = (defaultText = "created new list"),
+ ), (
+ name = "archivedList",
+ verbPhrase = (defaultText = "archived list"),
+ ), (
+ name = "restoredList",
+ verbPhrase = (defaultText = "restored list"),
+ ), (
+ name = "createCard",
+ verbPhrase = (defaultText = "created new card"),
+ ), (
+ name = "moveCard",
+ verbPhrase = (defaultText = "moved card"),
+ ), (
+ name = "archivedCard",
+ verbPhrase = (defaultText = "archived card"),
+ ), (
+ name = "restoredCard",
+ verbPhrase = (defaultText = "restored card"),
+ ), (
+ name = "addComment",
+ verbPhrase = (defaultText = "added comment"),
+ ), (
+ name = "addAttachement",
+ verbPhrase = (defaultText = "added attachment"),
+ ), (
+ name = "joinMember",
+ verbPhrase = (defaultText = "added to card"),
+ ), (
+ name = "unjoinMember",
+ verbPhrase = (defaultText = "removed from card"),
+ ), ],
+ ),
+
+ saveIdentityCaps = true,
),
);
@@ -184,6 +229,7 @@ const myCommand :Spk.Manifest.Command = (
environ = [
# Note that this defines the *entire* environment seen by your app.
(key = "PATH", value = "/usr/local/bin:/usr/bin:/bin"),
+ (key = "SANDSTORM", value = "1"),
(key = "METEOR_SETTINGS", value = "{\"public\": {\"sandstorm\": true}}")
]
);
diff --git a/sandstorm.js b/sandstorm.js
index e7a67f76..3e04d79f 100644
--- a/sandstorm.js
+++ b/sandstorm.js
@@ -21,6 +21,187 @@ const sandstormBoard = {
};
if (isSandstorm && Meteor.isServer) {
+ const fs = require('fs');
+ const Capnp = require('capnp');
+ const Package = Capnp.importSystem('sandstorm/package.capnp');
+ const Powerbox = Capnp.importSystem('sandstorm/powerbox.capnp');
+ const Identity = Capnp.importSystem('sandstorm/identity.capnp');
+ const SandstormHttpBridge =
+ Capnp.importSystem('sandstorm/sandstorm-http-bridge.capnp').SandstormHttpBridge;
+
+ let httpBridge = null;
+ let capnpConnection = null;
+
+ const bridgeConfig = Capnp.parse(
+ Package.BridgeConfig,
+ fs.readFileSync('/sandstorm-http-bridge-config'));
+
+ function getHttpBridge() {
+ if (!httpBridge) {
+ capnpConnection = Capnp.connect('unix:/tmp/sandstorm-api');
+ httpBridge = capnpConnection.restore(null, SandstormHttpBridge);
+ }
+ return httpBridge;
+ }
+
+ Meteor.methods({
+ sandstormClaimIdentityRequest(token, descriptor) {
+ check(token, String);
+ check(descriptor, String);
+
+ const parsedDescriptor = Capnp.parse(
+ Powerbox.PowerboxDescriptor,
+ new Buffer(descriptor, 'base64'),
+ { packed: true });
+
+ const tag = Capnp.parse(Identity.Identity.PowerboxTag, parsedDescriptor.tags[0].value);
+ const permissions = [];
+ if (tag.permissions[1]) {
+ permissions.push('configure');
+ }
+
+ if (tag.permissions[0]) {
+ permissions.push('participate');
+ }
+
+ const sessionId = this.connection.sandstormSessionId();
+ const httpBridge = getHttpBridge();
+ const session = httpBridge.getSessionContext(sessionId).context;
+ const api = httpBridge.getSandstormApi(sessionId).api;
+
+ Meteor.wrapAsync((done) => {
+ session.claimRequest(token).then((response) => {
+ const identity = response.cap.castAs(Identity.Identity);
+ const promises = [api.getIdentityId(identity), identity.getProfile(),
+ httpBridge.saveIdentity(identity)];
+ return Promise.all(promises).then((responses) => {
+ const identityId = responses[0].id.toString('hex').slice(0, 32);
+ const profile = responses[1].profile;
+ return profile.picture.getUrl().then((response) => {
+ const sandstormInfo = {
+ id: identityId,
+ name: profile.displayName.defaultText,
+ permissions,
+ picture: `${response.protocol}://${response.hostPath}`,
+ preferredHandle: profile.preferredHandle,
+ pronouns: profile.pronouns,
+ };
+
+ const login = Accounts.updateOrCreateUserFromExternalService(
+ 'sandstorm', sandstormInfo,
+ { profile: { name: sandstormInfo.name } });
+
+ updateUserPermissions(login.userId, permissions);
+ done();
+ });
+ });
+ }).catch((e) => {
+ done(e, null);
+ });
+ })();
+ },
+ });
+
+ function reportActivity(sessionId, path, type, users, caption) {
+ const httpBridge = getHttpBridge();
+ const session = httpBridge.getSessionContext(sessionId).context;
+ Meteor.wrapAsync((done) => {
+ return Promise.all(users.map((user) => {
+ return httpBridge.getSavedIdentity(user.id).then((response) => {
+ // Call getProfile() to make sure that the identity successfully resolves.
+ // (In C++ we would instead call whenResolved() here.)
+ const identity = response.identity;
+ return identity.getProfile().then(() => {
+ return { identity,
+ mentioned: !!user.mentioned,
+ subscribed: !!user.subscribed,
+ };
+ });
+ }).catch(() => {
+ // Ignore identities that fail to restore. Either they were added before we set
+ // `saveIdentityCaps` to true, or they have lost access to the board.
+ });
+ })).then((maybeUsers) => {
+ const users = maybeUsers.filter((u) => !!u);
+ const event = { path, type, users };
+ if (caption) {
+ event.notification = { caption };
+ }
+
+ return session.activity(event);
+ }).then(() => done(),
+ (e) => done(e));
+ })();
+ }
+
+ Meteor.startup(() => {
+ Activities.after.insert((userId, doc) => {
+ // HACK: We need the connection that's making the request in order to read the
+ // Sandstorm session ID.
+ const invocation = DDP._CurrentInvocation.get(); // eslint-disable-line no-undef
+ if (invocation) {
+ const sessionId = invocation.connection.sandstormSessionId();
+
+ const eventTypes = bridgeConfig.viewInfo.eventTypes;
+
+ const defIdx = eventTypes.findIndex((def) => def.name === doc.activityType );
+ if (defIdx >= 0) {
+ const users = {};
+ function ensureUserListed(userId) {
+ if (!users[userId]) {
+ const user = Meteor.users.findOne(userId);
+ if (user) {
+ users[userId] = { id: user.services.sandstorm.id };
+ } else {
+ return false;
+ }
+ }
+ return true;
+ }
+
+ function mentionedUser(userId) {
+ if (ensureUserListed(userId)) {
+ users[userId].mentioned = true;
+ }
+ }
+
+ function subscribedUser(userId) {
+ if (ensureUserListed(userId)) {
+ users[userId].subscribed = true;
+ }
+ }
+
+ let path = '';
+ let caption = null;
+
+ if (doc.cardId) {
+ path = `b/sandstorm/libreboard/${doc.cardId}`;
+ Cards.findOne(doc.cardId).members.map(subscribedUser);
+ }
+
+ if (doc.memberId) {
+ mentionedUser(doc.memberId);
+ }
+
+ if (doc.activityType === 'addComment') {
+ const comment = CardComments.findOne(doc.commentId);
+ caption = { defaultText: comment.text };
+ const activeMembers =
+ _.pluck(Boards.findOne(sandstormBoard._id).activeMembers(), 'userId');
+ (comment.text.match(/\B@(\w*)/g) || []).forEach((username) => {
+ const user = Meteor.users.findOne({ username: username.slice(1)});
+ if (user && activeMembers.indexOf(user._id) !== -1) {
+ mentionedUser(user._id);
+ }
+ });
+ }
+
+ reportActivity(sessionId, path, defIdx, _.values(users), caption);
+ }
+ }
+ });
+ });
+
function updateUserPermissions(userId, permissions) {
const isActive = permissions.indexOf('participate') > -1;
const isAdmin = permissions.indexOf('configure') > -1;
@@ -58,29 +239,6 @@ if (isSandstorm && Meteor.isServer) {
Location: base + boardPath,
});
res.end();
-
- // `accounts-sandstorm` populate the Users collection when new users
- // accesses the document, but in case a already known user comes back, we
- // need to update his associated document to match the request HTTP headers
- // informations.
- // XXX We need to update this document even if the initial route is not `/`.
- // Unfortuanlty I wasn't able to make the Webapp.rawConnectHandlers solution
- // work.
- const user = Users.findOne({
- 'services.sandstorm.id': req.headers['x-sandstorm-user-id'],
- });
- if (user) {
- // XXX At this point the user.services.sandstorm credentials haven't been
- // updated, which mean that the user will have to restart the application
- // a second time to see its updated name and avatar.
- Users.update(user._id, {
- $set: {
- 'profile.fullname': user.services.sandstorm.name,
- 'profile.avatarUrl': user.services.sandstorm.picture,
- },
- });
- updateUserPermissions(user._id, user.services.sandstorm.permissions);
- }
});
// On the first launch of the instance a user is automatically created thanks
@@ -126,6 +284,29 @@ if (isSandstorm && Meteor.isServer) {
updateUserPermissions(doc._id, doc.services.sandstorm.permissions);
});
+ Meteor.startup(() => {
+ Users.find().observeChanges({
+ changed(userId, fields) {
+ const sandstormData = (fields.services || {}).sandstorm || {};
+ if (sandstormData.name) {
+ Users.update(userId, {
+ $set: { 'profile.fullname': sandstormData.name },
+ });
+ }
+
+ if (sandstormData.picture) {
+ Users.update(userId, {
+ $set: { 'profile.avatarUrl': sandstormData.picture },
+ });
+ }
+
+ if (sandstormData.permissions) {
+ updateUserPermissions(userId, sandstormData.permissions);
+ }
+ },
+ });
+ });
+
// Wekan v0.8 didn’t implement the Sandstorm sharing model and instead kept
// the visibility setting (“public” or “private”) in the UI as does the main
// Meteor application. We need to enforce “public” visibility as the sharing
@@ -137,6 +318,77 @@ if (isSandstorm && Meteor.isServer) {
}
if (isSandstorm && Meteor.isClient) {
+ let rpcCounter = 0;
+ const rpcs = {};
+
+ window.addEventListener('message', (event) => {
+ if (event.source === window) {
+ // Meteor likes to postmessage itself.
+ return;
+ }
+
+ if ((event.source !== window.parent) ||
+ typeof event.data !== 'object' ||
+ typeof event.data.rpcId !== 'number') {
+ throw new Error(`got unexpected postMessage: ${event}`);
+ }
+
+ const handler = rpcs[event.data.rpcId];
+ if (!handler) {
+ throw new Error(`no such rpc ID for event ${event}`);
+ }
+
+ delete rpcs[event.data.rpcId];
+ handler(event.data);
+ });
+
+ function sendRpc(name, message) {
+ const id = rpcCounter++;
+ message.rpcId = id;
+ const obj = {};
+ obj[name] = message;
+ window.parent.postMessage(obj, '*');
+ return new Promise((resolve, reject) => {
+ rpcs[id] = (response) => {
+ if (response.error) {
+ reject(new Error(response.error));
+ } else {
+ resolve(response);
+ }
+ };
+ });
+ }
+
+ const powerboxDescriptors = {
+ identity: 'EAhQAQEAABEBF1EEAQH_GN1RqXqYhMAAQAERAREBAQ',
+ // Generated using the following code:
+ //
+ // Capnp.serializePacked(
+ // Powerbox.PowerboxDescriptor,
+ // { tags: [ {
+ // id: "13872380404802116888",
+ // value: Capnp.serialize(Identity.PowerboxTag, { permissions: [true, false] })
+ // }]}).toString('base64')
+ // .replace(/\//g, "_")
+ // .replace(/\+/g, "-");
+ };
+
+ function doRequest(serializedPowerboxDescriptor, onSuccess) {
+ return sendRpc('powerboxRequest', {
+ query: [serializedPowerboxDescriptor],
+ }).then((response) => {
+ if (!response.canceled) {
+ onSuccess(response);
+ }
+ });
+ }
+
+ window.sandstormRequestIdentity = function () {
+ doRequest(powerboxDescriptors.identity, (response) => {
+ Meteor.call('sandstormClaimIdentityRequest', response.token, response.descriptor);
+ });
+ };
+
// Since the Sandstorm grain is displayed in an iframe of the Sandstorm shell,
// we need to explicitly expose meta data like the page title or the URL path
// so that they could appear in the browser window.
@@ -176,6 +428,13 @@ if (isSandstorm && Meteor.isClient) {
return url.replace(/^https?:\/\/127\.0\.0\.1:[0-9]{2,5}/, '');
};
Meteor.absoluteUrl.defaultOptions = _defaultOptions;
+
+ // XXX Hack to fix https://github.com/wefork/wekan/issues/27
+ // Sandstorm Wekan instances only ever have a single board, so there is no need
+ // to cache per-board subscriptions.
+ SubsManager.prototype.subscribe = function(...params) {
+ return Meteor.subscribe(...params);
+ };
}
// We use this blaze helper in the UI to hide some templates that does not make
diff --git a/server/lib/utils.js b/server/lib/utils.js
index b59671fb..c7763933 100644
--- a/server/lib/utils.js
+++ b/server/lib/utils.js
@@ -5,3 +5,12 @@ allowIsBoardAdmin = function(userId, board) {
allowIsBoardMember = function(userId, board) {
return board && board.hasMember(userId);
};
+
+allowIsBoardMemberNonComment = function(userId, board) {
+ return board && board.hasMember(userId) && !board.hasCommentOnly(userId);
+};
+
+allowIsBoardMemberByCard = function(userId, card) {
+ const board = card.board();
+ return board && board.hasMember(userId);
+};
diff --git a/server/notifications/email.js b/server/notifications/email.js
index 551d2923..cee874d9 100644
--- a/server/notifications/email.js
+++ b/server/notifications/email.js
@@ -26,15 +26,17 @@ Meteor.startup(() => {
const text = texts.join('\n\n');
user.clearEmailBuffer();
- try {
- Email.send({
- to: user.emails[0].address,
- from: Accounts.emailTemplates.from,
- subject: TAPi18n.__('act-activity-notify', {}, user.getLanguage()),
- text,
- });
- } catch (e) {
- return;
+ if (Settings.findOne().mailUrl()) {
+ try {
+ Email.send({
+ to: user.emails[0].address.toLowerCase(),
+ from: Accounts.emailTemplates.from,
+ subject: TAPi18n.__('act-activity-notify', {}, user.getLanguage()),
+ text,
+ });
+ } catch (e) {
+ return;
+ }
}
}, 30000);
});
diff --git a/server/publications/activities.js b/server/publications/activities.js
index 38c61ebf..14459bf8 100644
--- a/server/publications/activities.js
+++ b/server/publications/activities.js
@@ -3,16 +3,16 @@
// 2. The card activity tab
// We use this publication to paginate for these two publications.
-Meteor.publish('activities', (kind, id, limit) => {
+Meteor.publish('activities', (kind, id, limit, hideSystem) => {
check(kind, Match.Where((x) => {
return ['board', 'card'].indexOf(x) !== -1;
}));
check(id, String);
check(limit, Number);
+ check(hideSystem, Boolean);
- return Activities.find({
- [`${kind}Id`]: id,
- }, {
+ const selector = (hideSystem) ? {$and: [{activityType: 'addComment'}, {[`${kind}Id`]: id}]} : {[`${kind}Id`]: id};
+ return Activities.find(selector, {
limit,
sort: {createdAt: -1},
});
diff --git a/server/publications/boards.js b/server/publications/boards.js
index cd3ef238..133082dd 100644
--- a/server/publications/boards.js
+++ b/server/publications/boards.js
@@ -60,6 +60,7 @@ Meteor.publish('archivedBoards', function() {
Meteor.publishRelations('board', function(boardId) {
check(boardId, String);
+ const thisUserId = this.userId;
this.cursor(Boards.find({
_id: boardId,
@@ -97,22 +98,28 @@ Meteor.publishRelations('board', function(boardId) {
this.cursor(Cards.find({ boardId }), function(cardId) {
this.cursor(CardComments.find({ cardId }));
this.cursor(Attachments.find({ cardId }));
+ this.cursor(Checklists.find({ cardId }));
});
- // Board members. This publication also includes former board members that
- // aren't members anymore but may have some activities attached to them in
- // the history.
- //
- this.cursor(Users.find({
- _id: { $in: _.pluck(board.members, 'userId') },
- }, { fields: {
- 'username': 1,
- 'profile.fullname': 1,
- 'profile.avatarUrl': 1,
- }}), function(userId) {
- // Presence indicators
- this.cursor(presences.find({ userId }));
- });
+ if (board.members) {
+ // Board members. This publication also includes former board members that
+ // aren't members anymore but may have some activities attached to them in
+ // the history.
+ const memberIds = _.pluck(board.members, 'userId');
+
+ // We omit the current user because the client should already have that data,
+ // and sending it triggers a subtle bug:
+ // https://github.com/wefork/wekan/issues/15
+ this.cursor(Users.find({
+ _id: { $in: _.without(memberIds, thisUserId)},
+ }, { fields: {
+ 'username': 1,
+ 'profile.fullname': 1,
+ 'profile.avatarUrl': 1,
+ }}));
+
+ this.cursor(presences.find({ userId: { $in: memberIds } }));
+ }
});
return this.ready();
diff --git a/server/publications/settings.js b/server/publications/settings.js
new file mode 100644
index 00000000..c2d9fdff
--- /dev/null
+++ b/server/publications/settings.js
@@ -0,0 +1,13 @@
+Meteor.publish('setting', () => {
+ return Settings.find({}, {fields:{disableRegistration: 1}});
+});
+
+Meteor.publish('mailServer', function () {
+ if (!Match.test(this.userId, String))
+ return [];
+ const user = Users.findOne(this.userId);
+ if(user && user.isAdmin){
+ return Settings.find({}, {fields: {mailServer: 1}});
+ }
+ return [];
+});
diff --git a/server/publications/users.js b/server/publications/users.js
index 4321e32b..4fd98e13 100644
--- a/server/publications/users.js
+++ b/server/publications/users.js
@@ -9,3 +9,11 @@ Meteor.publish('user-miniprofile', function(userId) {
},
});
});
+
+Meteor.publish('user-admin', function() {
+ return Meteor.users.find(this.userId, {
+ fields: {
+ isAdmin: 1,
+ },
+ });
+});