summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--.meteor/packages10
-rw-r--r--.meteor/versions8
-rw-r--r--CHANGELOG.md453
-rw-r--r--Dockerfile107
-rw-r--r--README.md63
-rw-r--r--Stackerfile.yml2
-rw-r--r--client/components/activities/activities.jade15
-rw-r--r--client/components/activities/activities.js26
-rw-r--r--client/components/boards/boardArchive.js6
-rw-r--r--client/components/boards/boardBody.jade11
-rw-r--r--client/components/boards/boardHeader.jade256
-rw-r--r--client/components/boards/boardHeader.js175
-rw-r--r--client/components/boards/boardsList.jade3
-rw-r--r--client/components/boards/boardsList.js21
-rw-r--r--client/components/boards/miniboard.jade8
-rw-r--r--client/components/cards/cardDetails.jade28
-rw-r--r--client/components/cards/cardDetails.js119
-rw-r--r--client/components/cards/cardDetails.styl3
-rw-r--r--client/components/lists/list.js12
-rw-r--r--client/components/lists/list.styl4
-rw-r--r--client/components/lists/listBody.jade91
-rw-r--r--client/components/lists/listBody.js299
-rw-r--r--client/components/lists/minilist.jade8
-rwxr-xr-xclient/components/main/editor.js4
-rw-r--r--client/components/main/header.jade70
-rw-r--r--client/components/main/layouts.jade22
-rw-r--r--client/components/settings/connectionMethod.jade7
-rw-r--r--client/components/settings/connectionMethod.js3
-rw-r--r--client/components/settings/settingBody.jade6
-rw-r--r--client/components/settings/settingBody.js2
-rw-r--r--client/components/settings/settingBody.styl4
-rw-r--r--client/components/settings/settingHeader.jade31
-rw-r--r--client/components/sidebar/sidebar.jade156
-rw-r--r--client/components/sidebar/sidebar.js224
-rw-r--r--client/components/sidebar/sidebarCustomFields.js16
-rw-r--r--client/components/swimlanes/miniswimlane.jade8
-rw-r--r--client/components/swimlanes/swimlaneHeader.jade36
-rw-r--r--client/components/swimlanes/swimlaneHeader.js3
-rw-r--r--client/components/swimlanes/swimlanes.jade18
-rw-r--r--client/components/swimlanes/swimlanes.js18
-rw-r--r--client/components/users/userHeader.jade20
-rw-r--r--client/components/users/userHeader.js9
-rw-r--r--client/lib/popup.js2
-rw-r--r--docker-compose.yml223
-rw-r--r--helm/wekan/.helmignore22
-rw-r--r--helm/wekan/Chart.yaml13
-rw-r--r--helm/wekan/OWNERS4
-rw-r--r--helm/wekan/README.md58
-rw-r--r--helm/wekan/charts/.gitkeep1
-rw-r--r--helm/wekan/requirements.yaml5
-rw-r--r--helm/wekan/templates/NOTES.txt19
-rw-r--r--helm/wekan/templates/_helpers.tpl82
-rw-r--r--helm/wekan/templates/deployment.yaml58
-rw-r--r--helm/wekan/templates/hpa.yaml18
-rw-r--r--helm/wekan/templates/ingress.yaml40
-rw-r--r--helm/wekan/templates/secrets.yaml14
-rw-r--r--helm/wekan/templates/service.yaml25
-rw-r--r--helm/wekan/templates/serviceaccount.yaml12
-rw-r--r--helm/wekan/templates/tests/test-cloudserver.yaml27
-rw-r--r--helm/wekan/values.yaml110
-rw-r--r--i18n/ar.i18n.json73
-rw-r--r--i18n/bg.i18n.json73
-rw-r--r--i18n/br.i18n.json73
-rw-r--r--i18n/ca.i18n.json73
-rw-r--r--i18n/cs.i18n.json143
-rw-r--r--i18n/da.i18n.json73
-rw-r--r--i18n/de.i18n.json83
-rw-r--r--i18n/el.i18n.json73
-rw-r--r--i18n/en-GB.i18n.json73
-rw-r--r--i18n/en.i18n.json73
-rw-r--r--i18n/eo.i18n.json73
-rw-r--r--i18n/es-AR.i18n.json73
-rw-r--r--i18n/es.i18n.json97
-rw-r--r--i18n/eu.i18n.json73
-rw-r--r--i18n/fa.i18n.json157
-rw-r--r--i18n/fi.i18n.json73
-rw-r--r--i18n/fr.i18n.json157
-rw-r--r--i18n/gl.i18n.json73
-rw-r--r--i18n/he.i18n.json71
-rw-r--r--i18n/hi.i18n.json127
-rw-r--r--i18n/hu.i18n.json115
-rw-r--r--i18n/hy.i18n.json73
-rw-r--r--i18n/id.i18n.json73
-rw-r--r--i18n/ig.i18n.json73
-rw-r--r--i18n/it.i18n.json365
-rw-r--r--i18n/ja.i18n.json73
-rw-r--r--i18n/ka.i18n.json73
-rw-r--r--i18n/km.i18n.json73
-rw-r--r--i18n/ko.i18n.json73
-rw-r--r--i18n/lv.i18n.json73
-rw-r--r--i18n/mk.i18n.json287
-rw-r--r--i18n/mn.i18n.json73
-rw-r--r--i18n/nb.i18n.json73
-rw-r--r--i18n/nl.i18n.json73
-rw-r--r--i18n/oc.i18n.json686
-rw-r--r--i18n/pl.i18n.json71
-rw-r--r--i18n/pt-BR.i18n.json75
-rw-r--r--i18n/pt.i18n.json89
-rw-r--r--i18n/ro.i18n.json73
-rw-r--r--i18n/ru.i18n.json73
-rw-r--r--i18n/sr.i18n.json73
-rw-r--r--i18n/sv.i18n.json225
-rw-r--r--i18n/sw.i18n.json73
-rw-r--r--i18n/ta.i18n.json187
-rw-r--r--i18n/th.i18n.json73
-rw-r--r--i18n/tr.i18n.json85
-rw-r--r--i18n/uk.i18n.json115
-rw-r--r--i18n/vi.i18n.json73
-rw-r--r--i18n/zh-CN.i18n.json69
-rw-r--r--i18n/zh-TW.i18n.json73
-rw-r--r--models/activities.js47
-rw-r--r--models/attachments.js4
-rw-r--r--models/boards.js115
-rw-r--r--models/cardComments.js6
-rw-r--r--models/cards.js248
-rw-r--r--models/checklistItems.js25
-rw-r--r--models/checklists.js13
-rw-r--r--models/customFields.js75
-rw-r--r--models/export.js2
-rw-r--r--models/import.js8
-rw-r--r--models/integrations.js4
-rw-r--r--models/lists.js58
-rw-r--r--models/settings.js2
-rw-r--r--models/swimlanes.js76
-rw-r--r--models/users.js87
-rw-r--r--models/wekanCreator.js8
-rw-r--r--openapi/README.md2
-rw-r--r--package.json2
-rw-r--r--public/logo-header.png (renamed from public/wekan-logo-header.png)bin1827 -> 1827 bytes
-rw-r--r--public/old-wekan-logo.pngbin8433 -> 0 bytes
-rw-r--r--public/wekan-logo-150.png (renamed from public/wekan-150.png)bin3634 -> 3634 bytes
-rw-r--r--public/wekan-logo-150.svg (renamed from public/wekan-150.svg)0
-rw-r--r--public/wekan-logo.pngbin10342 -> 8433 bytes
-rw-r--r--public/wekan-manifest.json6
-rw-r--r--rebuild-wekan.bat7
-rwxr-xr-xrebuild-wekan.sh7
-rwxr-xr-xreleases/rebuild-release.sh13
-rwxr-xr-xreleases/rebuild-wekan.sh135
-rwxr-xr-xreleases/release-sandstorm.sh3
-rwxr-xr-xreleases/release-snap.sh3
-rwxr-xr-xreleases/release.sh6
-rwxr-xr-xreleases/translations/pull-translations.sh3
-rwxr-xr-xreleases/virtualbox/rebuild-wekan.sh5
-rwxr-xr-xreleases/virtualbox/start-wekan.sh42
-rw-r--r--sandstorm-pkgdef.capnp4
-rw-r--r--sandstorm.js18
-rw-r--r--server/accounts-lockout.js16
-rw-r--r--server/authentication.js2
-rw-r--r--server/header-login.js10
-rw-r--r--server/lib/utils.js6
-rw-r--r--server/migrations.js116
-rw-r--r--server/notifications/email.js2
-rw-r--r--server/notifications/outgoing.js3
-rw-r--r--server/publications/boards.js55
-rw-r--r--server/rulesHelper.js14
-rwxr-xr-xsnap-src/bin/config76
-rwxr-xr-xsnap-src/bin/wekan-help103
-rw-r--r--snapcraft.yaml16
-rwxr-xr-xstacksmith/user-scripts/build.sh9
-rwxr-xr-x[-rw-r--r--]start-wekan.bat46
-rwxr-xr-xstart-wekan.sh47
161 files changed, 7128 insertions, 3012 deletions
diff --git a/.meteor/packages b/.meteor/packages
index 88a0cae6..9a3f9bca 100644
--- a/.meteor/packages
+++ b/.meteor/packages
@@ -31,7 +31,9 @@ kenton:accounts-sandstorm
service-configuration@1.0.11
useraccounts:unstyled
useraccounts:flow-routing
-salleman:accounts-oidc
+wekan:wekan-ldap
+wekan:accounts-cas
+wekan-accounts-oidc
# Utilities
check@1.2.5
@@ -80,13 +82,13 @@ staringatlights:fast-render
mixmax:smart-disconnect
accounts-password@1.5.0
cfs:gridfs
-eluck:accounts-lockout
rzymek:fullcalendar
momentjs:moment@2.22.2
browser-policy-framing
mquandalle:moment
msavin:usercache
-wekan:wekan-ldap
-wekan:accounts-cas
wekan-scrollbar
mquandalle:perfect-scrollbar
+mdg:meteor-apm-agent
+meteorhacks:unblock
+lucasantoniassi:accounts-lockout
diff --git a/.meteor/versions b/.meteor/versions
index 15e2f8b9..390cda63 100644
--- a/.meteor/versions
+++ b/.meteor/versions
@@ -60,7 +60,6 @@ ecmascript-runtime@0.5.0
ecmascript-runtime-client@0.5.0
ecmascript-runtime-server@0.5.0
ejson@1.1.0
-eluck:accounts-lockout@0.9.0
email@1.2.3
es5-shim@4.6.15
fastclick@1.0.13
@@ -82,8 +81,10 @@ launch-screen@1.1.1
livedata@1.0.18
localstorage@1.2.0
logging@1.1.19
+lucasantoniassi:accounts-lockout@1.0.0
matb33:collection-hooks@0.8.4
matteodem:easy-search@1.6.4
+mdg:meteor-apm-agent@3.1.2
mdg:validation-error@0.5.1
meteor@1.8.2
meteor-base@1.2.0
@@ -93,6 +94,7 @@ meteorhacks:collection-utils@1.2.0
meteorhacks:meteorx@1.4.1
meteorhacks:picker@1.0.3
meteorhacks:subs-manager@1.6.4
+meteorhacks:unblock@1.1.0
meteorspark:util@0.2.0
minifier-css@1.2.16
minifier-js@2.2.2
@@ -143,8 +145,6 @@ reload@1.1.11
retry@1.0.9
routepolicy@1.0.12
rzymek:fullcalendar@3.8.0
-salleman:accounts-oidc@1.0.10
-salleman:oidc@1.0.12
service-configuration@1.0.11
session@1.1.7
sha@1.0.9
@@ -179,6 +179,8 @@ useraccounts:unstyled@1.14.2
verron:autosize@3.0.8
webapp@1.4.0
webapp-hashing@1.0.9
+wekan-accounts-oidc@1.0.10
+wekan-oidc@1.0.12
wekan-scrollbar@3.1.3
wekan:accounts-cas@0.1.0
wekan:wekan-ldap@0.0.2
diff --git a/CHANGELOG.md b/CHANGELOG.md
index ed2af4de..a90a8aa2 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,456 @@
+# Upcoming Wekan release
+
+This release fixes the following bugs:
+
+- [Add proper variables for unjoin card](https://github.com/wekan/wekan/pull/2313).
+ Thanks to chotaire.
+- [Center reduce left margin in card view on mobile browser](https://github.com/wekan/wekan/pull/2314).
+ Thanks to hupptechnologies.
+- [Remove not needed ARGS from Dockerfile to reduce amount of Docker layers](https://github.com/wekan/wekan/issues/2301).
+ Thanks to folhabranca.
+
+Thanks to above GitHub users for their contributions and translators for their translations.
+
+# v2.57 2019-04-02 Wekan release
+
+This release fixes the following bugs, thanks to justinr1234:
+
+- [Add proper variables for join card](https://github.com/wekan/wekan/commit/289f1fe1340c85eb2af19825f4972e9057a86b7a),
+ fixes [Incorrect variable replacement on email notifications](https://github.com/wekan/wekan/issues/2295).
+
+and fixes the following bugs with Apache I-CLA, thanks to bentiss:
+
+- [List: Do not use IntersectionObserver to reduce CPU usage](https://github.com/wekan/wekan/pull/2302).
+
+Thanks to above GitHub users for their contributions and translators for their translations.
+
+# v2.56 2019-03-27 Wekan release
+
+This release [fixes the following bugs](https://github.com/wekan/wekan/pull/2287), thanks to bentiss with Apache I-CLA:
+
+- [#2250 -> the spinner could be shown on startup and never goes away](https://github.com/wekan/wekan/issues/2250).
+- The code will now only load extra cards that will be in the current viewport.
+- When 2 users were interacting on the same board, there was a situation where the spinner could show up on the other user, without being able to load the extra cards.
+- The code is now much simpler, thanks to the IntersectionObserver, and all of this for fewer lines of code :)
+
+Thanks to above GitHub users for their contributions and translators for their translations.
+
+# v2.55 2019-03-25 Wekan release
+
+This release fixes the following bugs, thanks to bentiss with Apache I-CLA:
+
+- [Use older api2html@0.3.0](https://github.com/wekan/wekan/commit/625682a4dab43c525494af10121edbfd547786d7)
+ to fix [broken snap and docker build](https://github.com/wekan/wekan/issues/2286),
+ because newer api2html caused
+ [breaking change](https://github.com/tobilg/api2html/commit/a9a41bca18db3f9ec61395d7262eff071a995783)
+ at api2html/bin/api2html.js:23 has error about "php": "PHP".
+
+Thanks to above GitHub users for their contributions and translators for their translations.
+
+# v2.54 2019-03-25 Wekan release
+
+This release fixes the following bugs:
+
+- Fix typos.
+- [Fix Outgoing Webhook message about created new swimlane](https://github.com/wekan/wekan/issues/1969).
+
+Thanks to above GitHub users for their contributions and translators for their translations.
+
+# v2.53 2019-03-23 Wekan release
+
+This release fixes the following bugs:
+
+- [Fix filename and URLs](https://github.com/wekan/wekan/ccommit/994314cfa339e52a2ad124194af4e89f57ddd213).
+ Thanks to xet7.
+
+Thanks to above GitHub users for their contributions and translators for their translations.
+
+# v2.52 2019-03-22 Wekan release
+
+This release adds the following new features:
+
+- [More whitelabeling: Hide Wekan logo and title by default, and don't show separate option to hide logo at
+ Admin Panel/Layout](https://github.com/wekan/wekan/commit/2969161afbe60a1aa2e7da6cedc3ab48941faf3e).
+ Thanks to xet7.
+- Added and then reverted option to redirect OIDC OAuth2 login [part1](https://github.com/wekan/wekan-ldap/commit/82a894ac20ba9e7c6fdf053cff1721cab709bf8a),
+ [part 2](https://github.com/wekan/wekan-ldap/commit/36900cc360d0d406f8fba5e43378f85c92747870) and
+ [part3](https://github.com/wekan/wekan/commit/7919ae362866c0cacf2a486bf91b12e4d25807d7).
+ This does not work yet. In Progress.
+ Thanks to xet7.
+- [Add LDAP config example, remove extra text](https://github.com/wekan/wekan/commit/506acda70b5e78737c52455e5eee9c8758243196).
+ Thanks to xet7.
+
+and fixes the following bugs:
+
+- [Fix IFTTT email sending](https://github.com/wekan/wekan/pull/2279).
+ Thanks to justinr1234.
+
+Thanks to above GitHub users for their contributions.
+
+# v2.51 2019-03-21 Wekan release
+
+This release fixes the following bugs:
+
+- [Fix Unable to change board card title (=Board name) at Templates page](https://github.com/wekan/wekan/issues/2275).
+ and [Unable to change card title in Template](https://github.com/wekan/wekan/issues/2268) part 2.
+ Thanks to andresmanelli.
+
+Thanks to above GitHub users for their contributions.
+
+# v2.50 2019-03-21 Wekan release
+
+This release fixes the following bugs:
+
+- [Fix](https://github.com/wekan/wekan/pull/2269) [Unable to change card title in Template](https://github.com/wekan/wekan/issues/2268)
+ and [Fix Unable to create a new board from a template](https://github.com/wekan/wekan/issues/2267).
+ Thanks to andresmanelli.
+
+Thanks to above GitHub users for their contributions.
+
+# v2.49 2019-03-21 Wekan release
+
+This release fixes the following bugs:
+
+- [The invitation code doesn't exist - case-sensitive eMail](https://github.com/wekan/wekan/issues/1384). Thanks to neurolabs.
+- [Don't swallow email errors](https://github.com/wekan/wekan/pull/2272). Thanks to justinr1234.
+- [Migrate customFields model](https://github.com/wekan/wekan/pull/2264).
+ Modifies the customFields model to keep an array of boardIds where the customField can be used.
+ Adds name matching for labels when copying/moving cards between boards.
+ This way, customFields are not lost when copying/moving a card. Particularly useful when templates have customFields or labels with specific names (not tested for templates yet).
+ Thanks to andresmanelli.
+- [Fix dissapearing subtasks](https://github.com/wekan/wekan/pull/2265). Thanks to andresmanelli.
+- [Cards disappear when rearranged on template board](https://github.com/wekan/wekan/issues/2266). Thanks to andresmanelli.
+
+Thanks to above GitHub users for their contributions and translators for their translations.
+
+# v2.48 2019-03-15 Wekan release
+
+This release fixes the following bugs, thanks to GitHub user xet7:
+
+- [Fix LDAP login](https://github.com/wekan/wekan/commit/216b3cfe0121aa026139536c383aa27db0353411).
+
+Thanks to above GitHub users for their contributions and translators for their translations.
+
+# v2.47 2019-03-14 Wekan release
+
+This release fixes the following bugs, thanks to GitHub user xet7:
+
+- [Remove ordering of cards by starred/color/description, so that cards would not reorder all the time](https://github.com/wekan/wekan/issues/2241).
+- Try to fix [LDAP Login: "Login forbidden", ReferenceError: req is not defined](https://github.com/wekan/wekan-ldap/44).
+
+# v2.46 2019-03-13 Wekan release
+
+This release fixes the following bugs:
+
+- [Fix watchers undefined](https://github.com/wekan/wekan/pull/2253).
+ Thanks to justinr1234.
+- [Revert hiding of Subtask boards](https://github.com/wekan/wekan/commit/1968b7da31d75757fd6383417d729ff6af6bbc5b)
+ because of feedback from Wekan users, that need Subtask boards to be visible.
+ Thanks to xet7.
+
+Thanks to above GitHub users for their contributions and translators for their translations.
+
+# v2.45 2019-03-11 Wekan release
+
+This release fixes the following bugs, thanks to andresmanelli:
+
+- [Rename circular card migration to re run the fix](https://github.com/wekan/wekan/commit/a347ae367654258b7768e7571831ed8f75fb5b84).
+
+# v2.44 2019-03-11 Wekan release
+
+This release adds the following new features and fixes with Apache I-CLA, thanks to bentiss:
+
+- [Activities: register customFields changes in the activities](https://github.com/wekan/wekan/pull/2239).
+- [customFields: fix leftover from lint](https://github.com/wekan/wekan/commit/4c72479d1206850d436261dc5c6a4127f246f6da).
+ Looks like I forgot to use the camelCase notation here, and this leads to an exception while updating a custom field.
+- [Fix imports](https://github.com/wekan/wekan/pull/2245).
+
+and adds the following new features:
+
+- Add language: Occitan. Thanks to translators.
+
+and fixes the following bugs:
+
+- [Fix removed checklistItem activity => dangling activities created](https://github.com/wekan/wekan/commit/2ec1664408d9515b5ca77fbb46ef99208eb8cff0).
+ Closes #2240. Thanks to andresmanelli.
+- [Avoid set self as parent card to cause circular reference, for real](https://github.com/wekan/commit/97822f35fd6365e5631c5488e8ee595f76ab4e34).
+ Thanks to andresmanelli.
+- Try to fix [Order All Boards by starred, color, board name and board description. Part 2](https://github.com/wekan/wekan/commit/8f337f17e45f8af8d96b6043d54466e5878b7e0b).
+ Works on new Wekan install. Could still have boards keeping reording happening all the time on old Wekan installs.
+ Thanks to xet7. Note: Ordering by starred/color/description was removed at Wekan v2.47.
+- [Changed brute force protection package from eluck:accounts-lockout to lucasantoniassi:accounts-lockout that is maintained and works.
+ Added Snap/Docker/Source settings](https://github.com/wekan/wekan/commit/b7c000b78b9af253fb115bbfa5ef0d4c0681abbb).
+ Thanks to xet7.
+
+Thanks to above Wekan contributors for their contributions.
+
+# v2.43 2019-03-08 Wekan release
+
+This release adds the following new features, thanks to xet7:
+
+- [Hide Subtask boards from All Boards](https://github.com/wekan/wekan/issues/1990). This was reverted in Wekan v2.46 to make Subtask boards visible again.
+- [Order All Boards by Starred, Color, Title and Description](https://github.com/wekan/wekan/commit/856872815292590e0c4eff2848ea1b857a318dc4).
+ This was removed at Wekan v2.47.
+- [HTTP header automatic login](https://github.com/wekan/wekan/commit/ff825d6123ecfd033ccb08ce97c11cefee676104)
+ for [3rd party authentication server method](https://github.com/wekan/wekan/issues/2019) like siteminder, and any webserver that
+ handles authentication and based on it adds HTTP headers to be used for login. Please test.
+
+and adds the following partial fix, thanks to andresmanelli:
+
+- [Add migration to fix circular references](https://github.com/wekan/wekan/commit/a338e937e508568d1f6a15c5464126d30ef69a7d).
+ This [runs only once](https://github.com/wekan/wekan/issues/2209#issuecomment-470445989),
+ so later there will be another fix to make it run every time.
+
+and reverts the following change of v2.42, because they did not fix anything, thanks to xet7:
+
+- [Revert: Tried to fix snap mongodb-control not starting database](https://github.com/wekan/wekan/commit/4055f451fdadfbfdef9a10be29a0eb6aed91182c).
+
+Thanks to above GitHub users for their contributions, and translators for their translations.
+
+# v2.42 2019-03-07 Wekan release
+
+This release tried to fix the following bugs:
+
+- [Tried to fix snap mongodb-control not starting database](https://github.com/wekan/wekan/commit/2c5628b5fbcc25427021d0b22e74577a71149c21).
+ Reverted in v2.43, because it did not fix anything.
+
+Thanks to xet7 and qurqar[m] at IRC #wekan.
+
+# v2.41 2019-03-07 Wekan release
+
+This release tried to fix the following bugs:
+
+- [Partial Fix: Card was selected as parent card (circular reference) and now board can be not opened anymore](https://github.com/wekan/wekan/issues/2202)
+ with [Avoid setting same card as parentCard. Avoid listing templates board in copy/move/more menus](https://github.com/wekan/wekan/commit/745f39ed20169f56b99c0339f2043f8c4ed43873).
+ This does not fully work yet, it will be fixed later.
+ Thanks to andresmanelli.
+
+Thanks to above GitHub users for their contributions, and translators for their translations.
+
+# v2.40 2019-03-06 Wekan release
+
+This release fixes the following bugs:
+
+- Part 2: [Fix](https://github.com/wekan/wekan/commit/e845fe3e7130d111be4c3a73e2551738c980ff7b)
+ [manifest](https://github.com/wekan/wekan/issues/2168) and
+ [icon](https://github.com/wekan/wekan/issues/1692) paths. Thanks to xet7.
+
+Thanks to above GitHub users for their contributions, and translators for their translations.
+
+# v2.39 2019-03-06 Wekan release
+
+This release fixes the following bugs:
+
+- [Fix](https://github.com/wekan/wekan/commit/e845fe3e7130d111be4c3a73e2551738c980ff7b)
+ [manifest](https://github.com/wekan/wekan/issues/2168) and
+ [icon](https://github.com/wekan/wekan/issues/1692) paths. Thanks to xet7.
+
+Thanks to above GitHub users for their contributions, and translators for their translations.
+
+# v2.38 2019-03-06 Wekan release
+
+This release adds the following new features:
+
+- [Added a Helm Chart to the project](https://github.com/wekan/wekan/pull/2227), thanks to TechnoTaff.
+- [Added support for LDAP admin status sync](https://github.com/wekan/wekan-ldap/pull/40).
+ Examples: [LDAP_SYNC_ADMIN_STATUS=true, LDAP_SYNC_ADMIN_GROUP=group1,group2](https://github.com/wekan/wekan/commit/7e451d9033eb6162cd37de3e5ffabdc22e272948).
+ Thanks to JulianJacobi and xet7.
+
+and fixes the following bugs:
+
+- [Fix card deletion from archive](https://github.com/wekan/wekan/commit/77754cf32f28498e550a46325d90eb41f08f8552). Thanks to andresmanelli.
+- [Fix card move with wrong swimlaneId](https://github.com/wekan/wekan/commit/1bef3a3f8ff4eac43bf97cc8b86d85e618b0e2ef). Thanks to andresmanelli.
+ NOTE: This does not yet fix card move [with Custom Field](https://github.com/wekan/wekan/issues/2233), it will be fixed later.
+- [Fix: LDAP Authentication with Recursive Group Filtering Does Not Work on Snap](https://github.com/wekan/wekan/issues/2228). Thanks to apages2.
+- [Use ubuntu:cosmic base in Dockerfile](https://github.com/wekan/wekan/commit/df00776e6ca47080435eca9a31a16fd24c0770ed). Thanks to xet7.
+- [Remove phantomjs binary from Docker/Snap/Stackerfile to reduce size](https://github.com/wekan/wekan/issues/2229). Thanks to soohwa.
+
+Thanks to above GitHub users for their contributions, and translators for their translations.
+
+# v2.37 2019-03-04 Wekan release
+
+This release fixes the following bugs:
+
+- [Fix Adding Labels to cards is not possible anymore](https://github.com/wekan/wekan/issues/2223).
+
+Thanks to GitHub user xet7 for contributions.
+
+# v2.36 2019-03-03 Wekan release
+
+This release adds the following UI changes:
+
+- [Combine hamburger menus at right](https://github.com/wekan/wekan/issues/2219):
+ - Hamburger button open sidebar;
+ - Sidebar has at top right Cog icon that opens Board Settings;
+ - Hide sidebar arrows.
+
+and fixes the following bugs:
+
+- [Add more Webhook translations](https://github.com/wekan/wekan/issues/1969).
+ In progress.
+
+and moved the following code around:
+
+- [Forked salleman-oidc](https://github.com/wekan/wekan/commit/8867bec8e65f1ef6be0c731918e8eefcacb7acb0)
+ to https://github.com/wekan/meteor-accounts-oidc where salleman also has write access,
+ xet7 can make changes directly and GitHub issues are enabled.
+
+Thanks to GitHub user xet7 for contributions.
+
+# v2.35 2019-03-01 Wekan release
+
+This release fixes the following bugs:
+
+- [Add Filter fix back](https://github.com/wekan/wekan/issues/2213),
+ because there was no bug in filter fix.
+
+Thanks to GitHub user xet7 for contributions.
+
+# v2.34 2019-03-01 Wekan release
+
+This release tried to fix following bugs, but did not fix anything:
+
+- Revert [Filter fix](https://github.com/wekan/wekan/issues/2213) because of
+ [mongodb data tampered](https://github.com/wekan/wekan-snap/issues/83).
+ This was added back at Wekan v2.35.
+
+Thanks to GitHub user xet7 for contributions.
+
+# v2.33 2019-02-28 Wekan release
+
+This release adds the following upgrades:
+
+- [Upgrade Node.js to v8.15.1](https://github.com/wekan/wekan/commit/5cafdd9878ab4b6123024ec33279ccdae75f554f).
+
+Thanks to Node.js developers and GitHub user xet7 for contributions.
+
+# v2.32 2019-02-28 Wekan release
+
+This release adds the following [performance improvements](https://github.com/wekan/wekan/pull/2214), thanks to justinr1234:
+
+- New indexes for queries that were missing an index;
+- Bulk querying documents to reduce the number of mongo queries when loading a board;
+- Ensure oplog is being used to query the database by providing a `sort` key when `limit` is used querying the `boards` collection.
+
+and fixes the following bugs related to [Template features](https://github.com/wekan/wekan/issues/2209), thanks to andresmanelli:
+
+- [Fix filtering in swimlane view](https://github.com/wekan/wekan/commit/49229e1723de14cdc66dc6480624bba426d35e36) that was [broken since v2.29](https://github.com/wekan/wekan/issues/2213).
+
+Thanks to above GitHub users for their contributions.
+
+# v2.31 2019-02-28 Wekan release
+
+This release fixes the following bugs related to [Template features](https://github.com/wekan/wekan/issues/2209), thanks to GitHub user andresmanelli:
+
+- [Fix copy card](https://github.com/wekan/wekan/issues/2210).
+
+# v2.30 2019-02-28 Wekan release
+
+This release adds the following new [Template features](https://github.com/wekan/wekan/issues/2209), thanks to GitHub user andresmanelli:
+
+- [Fix popup title. Add element title modification](https://github.com/wekan/wekan/commit/888e1ad5d3e32be53283aa32198057f669f3d706);
+- [Copy template attachments](https://github.com/wekan/wekan/commit/abb71083215462d91b084c4de13af0b130638e4d);
+- [Standarize copy functions. Match labels by name](https://github.com/wekan/wekan/commit/da21a2a410c9b905de89d66236748e0c8f5357ea).
+
+# v2.29 2019-02-27 Wekan release
+
+This release adds the following new features:
+
+- Swimlane/List/Board/Card templates. In Progress, please test and [add comment if you find not listed bugs](https://github.com/wekan/wekan/issues/2165).
+ Thanks to GitHub user andresmanelli.
+
+# v2.28 2019-02-27 Wekan release
+
+This release adds the following new Sandstorm features and fixes:
+
+- All Boards page [so it's possible to go back from subtask board](https://github.com/wekan/wekan/issues/2082).
+- Board favorites.
+- New Sandstorm board first user is Admin and [has IFTTT Rules](https://github.com/wekan/wekan/issues/2125) and Standalone Wekan Admin Panel.
+ Probably some Admin Panel features do not work yet. Please keep backup of your grains before testing Admin Panel.
+- Linked Cards and Linked Boards.
+- Some not needed options like Logout etc have been hidden from top bar right menu.
+- [Import board now works. "Board not found" is not problem anymore](https://github.com/wekan/wekan/issues/1430), because you can go to All Boards page to change to imported board.
+
+and removes the following features:
+
+- Remove Welcome Board from Standalone Wekan, [to fix Welcome board not translated](https://github.com/wekan/wekan/issues/1601).
+ Sandstorm Wekan does not have Welcome Board.
+
+Thanks to GitHub user xet7 for contributions.
+
+# v2.27 2019-02-27 Wekan release
+
+This release fixes the following bugs:
+
+- [Fix OIDC error "a.join is not a function"](https://github.com/wekan/wekan/issues/2206)
+ by reverting configurable OAUTH2_ID_TOKEN_WHITELIST_FIELDS and
+ OAUTH2_REQUEST_PERMISSIONS from Wekan v2.22-2.26.
+ Thanks to GitHub user xet7.
+
+# v2.26 2019-02-25 Wekan release
+
+This release adds the following new features:
+
+- Add setting [EMAIL_NOTIFICATION_TIMEOUT](https://github.com/wekan/wekan/issues/2203).
+ Defaut 30000 ms (30s). Thanks to GitHub users ngru and xet7.
+
+and fixes the following bugs:
+
+- REVERTED in v2.27 ([Fix OAuth2 requestPermissions](https://github.com/wekan/wekan/commit/5e238bfbfea16940ae29647ae347bbdc0d78efb0).
+ This makes [Auth0 login possible](https://github.com/wekan/wekan/issues/1722)
+ with [OIDC](https://github.com/wekan/wekan/wiki/OAuth2#auth0). Needs testing.
+ Thanks to GitHub user xet7.)
+
+# v2.25 2019-02-23 Wekan release
+
+This release fixes the following bugs:
+
+- Revert file permission changes from v2.24 LDAP changes that
+ caused snap version to not build.
+
+Thanks to GitHub user xet7 for contributions.
+
+# v2.24 2019-02-23 Wekan release
+
+This release adds the following new features:
+
+- [Add LDAP email] matching support](https://github.com/wekan/wekan-ldap/pull/39) and
+ [related env variables](https://github.com/wekan/wekan/pull/2198).
+ Thanks to GitHub user stevenpwaters.
+
+and fixes the following bugs:
+
+- REVERTED in v2.27 ([Add missing text .env to wekan/server/authentication.js](https://github.com/wekan/wekan/commit/4e6e78ccd216045e6ad41bcdab4e524f715a7eb5).
+ Thanks to Vanila Chat user .gitignore.)
+
+Thanks to above contributors, and translators for their translation.
+
+# v2.23 2019-02-17 Wekan relase
+
+This release fixes the following bugs:
+
+- [Fix authentication dropdown](https://github.com/wekan/wekan/pull/2191).
+ Thanks to Akuket.
+
+Thanks to above GitHub users for their contributions, and translators for their translations.
+
+# v2.22 2019-02-13 Wekan release
+
+This release adds the following new features:
+
+- [Kadira integration](https://github.com/wekan/wekan/issues/2152). Thanks to GavinLilly.
+- REVERTED in v2.27 (Add [configurable](https://github.com/wekan/wekan/issues/1874#issuecomment-462759627)
+ settings [OAUTH2_ID_TOKEN_WHITELIST_FIELDS and
+ OAUTH2_REQUEST_PERMISSIONS](https://github.com/wekan/wekan/commit/b66f471e530d41a3f12e4bfc29548313e9a73c35).
+ Thanks to xet7.)
+
+and fixes the following bugs:
+
+- [Fix: Remove overlap of side bar button with card/list menu button on
+ mobile browser](https://github.com/wekan/wekan/issues/2183). Thanks to xet7.
+
+Thanks to above GitHub users for their contributions, and translators for their translations.
+
# v2.21 2019-02-12 Wekan release
This release adds the following new features:
diff --git a/Dockerfile b/Dockerfile
index 283cc853..73f8e4bc 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -1,88 +1,12 @@
-FROM debian:buster-slim
+FROM ubuntu:cosmic
LABEL maintainer="wekan"
-# Declare Arguments
-ARG DEBUG
-ARG NODE_VERSION
-ARG METEOR_RELEASE
-ARG METEOR_EDGE
-ARG USE_EDGE
-ARG NPM_VERSION
-ARG FIBERS_VERSION
-ARG ARCHITECTURE
-ARG SRC_PATH
-ARG WITH_API
-ARG MATOMO_ADDRESS
-ARG MATOMO_SITE_ID
-ARG MATOMO_DO_NOT_TRACK
-ARG MATOMO_WITH_USERNAME
-ARG BROWSER_POLICY_ENABLED
-ARG TRUSTED_URL
-ARG WEBHOOKS_ATTRIBUTES
-ARG OAUTH2_ENABLED
-ARG OAUTH2_CLIENT_ID
-ARG OAUTH2_SECRET
-ARG OAUTH2_SERVER_URL
-ARG OAUTH2_AUTH_ENDPOINT
-ARG OAUTH2_USERINFO_ENDPOINT
-ARG OAUTH2_TOKEN_ENDPOINT
-ARG OAUTH2_ID_MAP
-ARG OAUTH2_USERNAME_MAP
-ARG OAUTH2_FULLNAME_MAP
-ARG OAUTH2_EMAIL_MAP
-ARG LDAP_ENABLE
-ARG LDAP_PORT
-ARG LDAP_HOST
-ARG LDAP_BASEDN
-ARG LDAP_LOGIN_FALLBACK
-ARG LDAP_RECONNECT
-ARG LDAP_TIMEOUT
-ARG LDAP_IDLE_TIMEOUT
-ARG LDAP_CONNECT_TIMEOUT
-ARG LDAP_AUTHENTIFICATION
-ARG LDAP_AUTHENTIFICATION_USERDN
-ARG LDAP_AUTHENTIFICATION_PASSWORD
-ARG LDAP_LOG_ENABLED
-ARG LDAP_BACKGROUND_SYNC
-ARG LDAP_BACKGROUND_SYNC_INTERVAL
-ARG LDAP_BACKGROUND_SYNC_KEEP_EXISTANT_USERS_UPDATED
-ARG LDAP_BACKGROUND_SYNC_IMPORT_NEW_USERS
-ARG LDAP_ENCRYPTION
-ARG LDAP_CA_CERT
-ARG LDAP_REJECT_UNAUTHORIZED
-ARG LDAP_USER_SEARCH_FILTER
-ARG LDAP_USER_SEARCH_SCOPE
-ARG LDAP_USER_SEARCH_FIELD
-ARG LDAP_SEARCH_PAGE_SIZE
-ARG LDAP_SEARCH_SIZE_LIMIT
-ARG LDAP_GROUP_FILTER_ENABLE
-ARG LDAP_GROUP_FILTER_OBJECTCLASS
-ARG LDAP_GROUP_FILTER_GROUP_ID_ATTRIBUTE
-ARG LDAP_GROUP_FILTER_GROUP_MEMBER_ATTRIBUTE
-ARG LDAP_GROUP_FILTER_GROUP_MEMBER_FORMAT
-ARG LDAP_GROUP_FILTER_GROUP_NAME
-ARG LDAP_UNIQUE_IDENTIFIER_FIELD
-ARG LDAP_UTF8_NAMES_SLUGIFY
-ARG LDAP_USERNAME_FIELD
-ARG LDAP_FULLNAME_FIELD
-ARG LDAP_MERGE_EXISTING_USERS
-ARG LDAP_SYNC_USER_DATA
-ARG LDAP_SYNC_USER_DATA_FIELDMAP
-ARG LDAP_SYNC_GROUP_ROLES
-ARG LDAP_DEFAULT_DOMAIN
-ARG LOGOUT_WITH_TIMER
-ARG LOGOUT_IN
-ARG LOGOUT_ON_HOURS
-ARG LOGOUT_ON_MINUTES
-ARG CORS
-ARG DEFAULT_AUTHENTICATION_METHOD
-
# Set the environment variables (defaults where required)
# DOES NOT WORK: paxctl fix for alpine linux: https://github.com/wekan/wekan/issues/1303
# ENV BUILD_DEPS="paxctl"
ENV BUILD_DEPS="apt-utils bsdtar gnupg gosu wget curl bzip2 build-essential python python3 python3-distutils git ca-certificates gcc-7" \
DEBUG=false \
- NODE_VERSION=v8.15.0 \
+ NODE_VERSION=v8.15.1 \
METEOR_RELEASE=1.6.0.1 \
USE_EDGE=false \
METEOR_EDGE=1.5-beta.17 \
@@ -91,6 +15,13 @@ ENV BUILD_DEPS="apt-utils bsdtar gnupg gosu wget curl bzip2 build-essential pyth
ARCHITECTURE=linux-x64 \
SRC_PATH=./ \
WITH_API=true \
+ ACCOUNTS_LOCKOUT_KNOWN_USERS_FAILURES_BEFORE=3 \
+ ACCOUNTS_LOCKOUT_KNOWN_USERS_PERIOD=60 \
+ ACCOUNTS_LOCKOUT_KNOWN_USERS_FAILURE_WINDOW=15 \
+ ACCOUNTS_LOCKOUT_UNKNOWN_USERS_FAILURES_BERORE=3 \
+ ACCOUNTS_LOCKOUT_UNKNOWN_USERS_LOCKOUT_PERIOD=60 \
+ ACCOUNTS_LOCKOUT_UNKNOWN_USERS_FAILURE_WINDOW=15 \
+ EMAIL_NOTIFICATION_TIMEOUT=30000 \
MATOMO_ADDRESS="" \
MATOMO_SITE_ID="" \
MATOMO_DO_NOT_TRACK=true \
@@ -99,6 +30,7 @@ ENV BUILD_DEPS="apt-utils bsdtar gnupg gosu wget curl bzip2 build-essential pyth
TRUSTED_URL="" \
WEBHOOKS_ATTRIBUTES="" \
OAUTH2_ENABLED=false \
+ OAUTH2_LOGIN_STYLE=redirect \
OAUTH2_CLIENT_ID="" \
OAUTH2_SECRET="" \
OAUTH2_SERVER_URL="" \
@@ -145,10 +77,20 @@ ENV BUILD_DEPS="apt-utils bsdtar gnupg gosu wget curl bzip2 build-essential pyth
LDAP_USERNAME_FIELD="" \
LDAP_FULLNAME_FIELD="" \
LDAP_MERGE_EXISTING_USERS=false \
+ LDAP_EMAIL_FIELD="" \
+ LDAP_EMAIL_MATCH_ENABLE=false \
+ LDAP_EMAIL_MATCH_REQUIRE=false \
+ LDAP_EMAIL_MATCH_VERIFIED=false \
LDAP_SYNC_USER_DATA=false \
LDAP_SYNC_USER_DATA_FIELDMAP="" \
LDAP_SYNC_GROUP_ROLES="" \
LDAP_DEFAULT_DOMAIN="" \
+ LDAP_SYNC_ADMIN_STATUS="" \
+ LDAP_SYNC_ADMIN_GROUPS="" \
+ HEADER_LOGIN_ID="" \
+ HEADER_LOGIN_FIRSTNAME="" \
+ HEADER_LOGIN_LASTNAME="" \
+ HEADER_LOGIN_EMAIL="" \
LOGOUT_WITH_TIMER=false \
LOGOUT_IN="" \
LOGOUT_ON_HOURS="" \
@@ -257,12 +199,16 @@ RUN \
gosu wekan:wekan git clone --depth 1 -b master git://github.com/wekan/meteor-accounts-cas.git && \
gosu wekan:wekan git clone --depth 1 -b master git://github.com/wekan/wekan-ldap.git && \
gosu wekan:wekan git clone --depth 1 -b master git://github.com/wekan/wekan-scrollbar.git && \
+ gosu wekan:wekan git clone --depth 1 -b master git://github.com/wekan/meteor-accounts-oidc.git && \
+ gosu wekan:wekan mv meteor-accounts-oidc/packages/switch_accounts-oidc wekan_accounts-oidc && \
+ gosu wekan:wekan mv meteor-accounts-oidc/packages/switch_oidc wekan_oidc && \
+ gosu wekan:wekan rm -rf meteor-accounts-oidc && \
sed -i 's/api\.versionsFrom/\/\/api.versionsFrom/' /home/wekan/app/packages/meteor-useraccounts-core/package.js && \
cd /home/wekan/.meteor && \
gosu wekan:wekan /home/wekan/.meteor/meteor -- help; \
\
# extract the OpenAPI specification
- npm install -g api2html && \
+ npm install -g api2html@0.3.0 && \
mkdir -p /home/wekan/python && \
chown wekan:wekan --recursive /home/wekan/python && \
cd /home/wekan/python && \
@@ -272,13 +218,14 @@ RUN \
cd /home/wekan/app &&\
mkdir -p ./public/api && \
python3 ./openapi/generate_openapi.py --release $(git describe --tags --abbrev=0) > ./public/api/wekan.yml && \
- /opt/nodejs/bin/api2html -c ./public/wekan-logo-header.png -o ./public/api/wekan.html ./public/api/wekan.yml; \
+ /opt/nodejs/bin/api2html -c ./public/logo-header.png -o ./public/api/wekan.html ./public/api/wekan.yml; \
# Build app
cd /home/wekan/app && \
gosu wekan:wekan /home/wekan/.meteor/meteor add standard-minifier-js && \
gosu wekan:wekan /home/wekan/.meteor/meteor npm install && \
gosu wekan:wekan /home/wekan/.meteor/meteor build --directory /home/wekan/app_build && \
cp /home/wekan/app/fix-download-unicode/cfs_access-point.txt /home/wekan/app_build/bundle/programs/server/packages/cfs_access-point.js && \
+ rm /home/wekan/app_build/bundle/programs/server/npm/node_modules/meteor/rajit_bootstrap3-datepicker/lib/bootstrap-datepicker/node_modules/phantomjs-prebuilt/lib/phantom/bin/phantomjs && \
chown wekan:wekan /home/wekan/app_build/bundle/programs/server/packages/cfs_access-point.js && \
#Removed binary version of bcrypt because of security vulnerability that is not fixed yet.
#https://github.com/wekan/wekan/commit/4b2010213907c61b0e0482ab55abb06f6a668eac
diff --git a/README.md b/README.md
index 02caa7ea..324d310b 100644
--- a/README.md
+++ b/README.md
@@ -9,6 +9,7 @@
[![Code Climate](https://codeclimate.com/github/wekan/wekan/badges/gpa.svg "Code Climate")](https://codeclimate.com/github/wekan/wekan)
[![Project Dependencies](https://david-dm.org/wekan/wekan.svg "Project Dependencies")](https://david-dm.org/wekan/wekan)
[![Code analysis at Open Hub](https://img.shields.io/badge/code%20analysis-at%20Open%20Hub-brightgreen.svg "Code analysis at Open Hub")](https://www.openhub.net/p/wekan)
+[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fwekan%2Fwekan.svg?type=shield)](https://app.fossa.io/projects/git%2Bgithub.com%2Fwekan%2Fwekan?ref=badge_shield)
## [Translate Wekan at Transifex](https://transifex.com/wekan/wekan)
@@ -22,9 +23,8 @@ It's better than at chat where details get lost when chat scrolls up.
## Chat
-[![Wekan Vanila Chat][vanila_badge]][vanila_chat] - Most Wekan community and developers are here at #wekan chat channel.
-Use webbrowser to register, and after that you can also alternatively use mobile app Rocket.Chat by Rocket.Chat with
-address https://chat.vanila.io and same username and password.
+[![Wekan Chat][vanila_badge]][wekan_chat] - Most Wekan community and developers are here. Works on webbrowser
+and PWA app that can be added as icon on Android and bookmark on iOS, used like native app.
[Wekan IRC FAQ](https://github.com/wekan/wekan/wiki/IRC-FAQ)
@@ -39,33 +39,55 @@ address https://chat.vanila.io and same username and password.
Wekan is an completely [Open Source][open_source] and [Free software][free_software]
collaborative kanban board application with MIT license.
-Whether you’re maintaining a personal todo list, planning your holidays with some friends, or working in a team on your next revolutionary idea, Kanban 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.
+Whether you’re maintaining a personal todo list, planning your holidays with some friends,
+or working in a team on your next revolutionary idea, Kanban 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.
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 various platforms.
-- [Features][features]: Wekan has real-time user interface. Not all features are implemented, yet.
-- [Platforms][platforms]: Wekan supports many platforms and plan is to add more. This will be the first place to look if you want to **install** it, test out and learn more in depth.
+- Wekan is used in [most countries of the world](https://snapcraft.io/wekan).
+- Wekan largest user has 13k users using Wekan in their company.
+- Wekan has been [translated](https://transifex.com/wekan/wekan) to about 50 languages.
+- [Features][features]: Wekan has real-time user interface.
+- [Platforms][platforms]: Wekan supports many platforms.
+ Wekan is critical part of new platforms Wekan is currently being integrated to.
- [Integrations][integrations]: Current possible integrations and future plans.
-- [Team](https://github.com/wekan/wekan/wiki/Team): The people who spends their time and make Wekan into what it is right now.
-## Roadmap
-
-[Roadmap](https://github.com/wekan/wekan/wiki/Roadmap)
-
-Upcoming Wekan App Development Platform will make possible many use cases. If you don't find your feature or integration in
-GitHub issues and [Features][features] or [Integrations][integrations] page at wiki, please add them.
+## Requirements
+
+- 64bit: Linux [Snap](https://github.com/wekan/wekan-snap/wiki/Install) or [Sandstorm](https://sandstorm.io) /
+ [Mac](https://github.com/wekan/wekan/wiki/Mac) / [Windows](https://github.com/wekan/wekan/wiki/Install-Wekan-from-source-on-Windows).
+ [More Platforms](https://github.com/wekan/wekan/wiki/Platforms). [ARM progress](https://github.com/wekan/wekan/issues/1053#issuecomment-410919264).
+- 1 GB RAM minimum free for Wekan. Production server should have miminum total 4 GB RAM.
+ For thousands of users, for example with [Docker](https://github.com/wekan/wekan/blob/devel/docker-compose.yml): 3 frontend servers,
+ each having 2 CPU and 2 wekan-app containers. One backend wekan-db server with many CPUs.
+- Enough disk space and alerts about low disk space. If you run out disk space, MongoDB database gets corrupted.
+- SECURITY: Updating to newest Wekan version very often. Please check you do not have automatic updates of Sandstorm or Snap turned off.
+ Old versions have security issues because of old versions Node.js etc. Only newest Wekan is supported.
+ Wekan on Sandstorm is not usually affected by any Standalone Wekan (Snap/Docker/Source) security issues.
+- [Reporting all new bugs immediately](https://github.com/wekan/wekan/issues).
+ New features and fixes are added to Wekan [many times a day](https://github.com/wekan/wekan/blob/devel/CHANGELOG.md).
+- [Backups](https://github.com/wekan/wekan/wiki/Backup) of Wekan database once a day miminum.
+ Bugs, updates, users deleting list or card, harddrive full, harddrive crash etc can eat your data. There is no undo yet.
+ Some bug can cause Wekan board to not load at all, requiring manual fixing of database content.
-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.
+## Roadmap
-We also welcome sponsors for features and bugfixes. By working directly with Wekan you get the benefit of active maintenance and new features added by growing Wekan developer community.
+[Roadmap Milestones](https://github.com/wekan/wekan/milestones)
-Actual work happens at [Wekan GitHub issues][wekan_issues].
+[Developer Documentation][dev_docs]
-See [Development links on Wekan wiki](https://github.com/wekan/wekan/wiki#Development) bottom of the page for more info.
+- There is many companies and individuals contributing code to Wekan, to add features and bugfixes
+ [many times a day](https://github.com/wekan/wekan/blob/devel/CHANGELOG.md).
+- [Please add Add new Feature Requests and Bug Reports immediately](https://github.com/wekan/wekan/issues).
+- [Commercial Support](https://wekan.team).
+- [Bounties](https://wekan.team/bounties/index.html).
-If you want to know what is going on exactly this moment, you can check out the [project page](https://github.com/wekan/wekan/projects/2).
+We also welcome sponsors for features and bugfixes.
+By working directly with Wekan you get the benefit of active maintenance and new features added by growing Wekan developer community.
## Demo
@@ -111,4 +133,7 @@ with [Meteor](https://www.meteor.com).
[open_source]: https://en.wikipedia.org/wiki/Open-source_software
[free_software]: https://en.wikipedia.org/wiki/Free_software
[vanila_badge]: https://vanila.io/img/join-chat-button2.png
-[vanila_chat]: https://chat.vanila.io/channel/wekan
+[wekan_chat]: https://community.vanila.io/wekan
+
+
+[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fwekan%2Fwekan.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fwekan%2Fwekan?ref=badge_large) \ No newline at end of file
diff --git a/Stackerfile.yml b/Stackerfile.yml
index 536a2690..0b53ab88 100644
--- a/Stackerfile.yml
+++ b/Stackerfile.yml
@@ -1,5 +1,5 @@
appId: wekan-public/apps/77b94f60-dec9-0136-304e-16ff53095928
-appVersion: "v2.21.0"
+appVersion: "v2.57.0"
files:
userUploads:
- README.md
diff --git a/client/components/activities/activities.jade b/client/components/activities/activities.jade
index bddc4dad..54066da8 100644
--- a/client/components/activities/activities.jade
+++ b/client/components/activities/activities.jade
@@ -99,6 +99,9 @@ template(name="boardActivities")
else
| {{{_ 'activity-added' memberLink cardLink}}}.
+ if($eq activityType 'moveCardBoard')
+ | {{{_ 'activity-moved' cardLink oldBoardName boardName}}}.
+
if($eq activityType 'moveCard')
| {{{_ 'activity-moved' cardLink oldList.title list.title}}}.
@@ -114,6 +117,12 @@ template(name="boardActivities")
if($eq activityType 'removedLabel')
| {{{_ 'activity-removed-label' lastLabel cardLink}}}.
+ if($eq activityType 'setCustomField')
+ | {{{_ 'activity-set-customfield' lastCustomField lastCustomFieldValue cardLink}}}.
+
+ if($eq activityType 'unsetCustomField')
+ | {{{_ 'activity-unset-customfield' lastCustomField cardLink}}}.
+
if($eq activityType 'unjoinMember')
if($eq user._id member._id)
| {{{_ 'activity-unjoined' cardLink}}}.
@@ -129,7 +138,7 @@ template(name="cardActivities")
p.activity-desc
+memberName(user=user)
if($eq activityType 'createCard')
- | {{_ 'activity-added' cardLabel list.title}}.
+ | {{_ 'activity-added' cardLabel listName}}.
if($eq activityType 'importCard')
| {{{_ 'activity-imported' cardLabel list.title sourceLink}}}.
if($eq activityType 'joinMember')
@@ -170,6 +179,10 @@ template(name="cardActivities")
| {{_ 'activity-sent' cardLabel boardLabel}}.
if($eq activityType 'moveCard')
| {{_ 'activity-moved' cardLabel oldList.title list.title}}.
+
+ if($eq activityType 'moveCardBoard')
+ | {{{_ 'activity-moved' cardLink oldBoardName boardName}}}.
+
if($eq activityType 'addAttachment')
| {{{_ 'activity-attached' attachmentLink cardLabel}}}.
if attachment.isImage
diff --git a/client/components/activities/activities.js b/client/components/activities/activities.js
index b3fe8f50..0476897f 100644
--- a/client/components/activities/activities.js
+++ b/client/components/activities/activities.js
@@ -74,6 +74,8 @@ BlazeComponent.extendComponent({
lastLabel(){
const lastLabelId = this.currentData().labelId;
+ if (!lastLabelId)
+ return null;
const lastLabel = Boards.findOne(Session.get('currentBoard')).getLabelById(lastLabelId);
if(lastLabel.name === undefined || lastLabel.name === ''){
return lastLabel.color;
@@ -82,6 +84,28 @@ BlazeComponent.extendComponent({
}
},
+ lastCustomField(){
+ const lastCustomField = CustomFields.findOne(this.currentData().customFieldId);
+ if (!lastCustomField)
+ return null;
+ return lastCustomField.name;
+ },
+
+ lastCustomFieldValue(){
+ const lastCustomField = CustomFields.findOne(this.currentData().customFieldId);
+ if (!lastCustomField)
+ return null;
+ const value = this.currentData().value;
+ if (lastCustomField.settings.dropdownItems && lastCustomField.settings.dropdownItems.length > 0) {
+ const dropDownValue = _.find(lastCustomField.settings.dropdownItems, (item) => {
+ return item._id === value;
+ });
+ if (dropDownValue)
+ return dropDownValue.name;
+ }
+ return value;
+ },
+
listLabel() {
return this.currentData().list().title;
},
@@ -117,6 +141,8 @@ BlazeComponent.extendComponent({
customField() {
const customField = this.currentData().customField();
+ if (!customField)
+ return null;
return customField.name;
},
diff --git a/client/components/boards/boardArchive.js b/client/components/boards/boardArchive.js
index 8f4d5434..c8bbb341 100644
--- a/client/components/boards/boardArchive.js
+++ b/client/components/boards/boardArchive.js
@@ -1,9 +1,3 @@
-Template.boardListHeaderBar.events({
- 'click .js-open-archived-board'() {
- Modal.open('archivedBoards');
- },
-});
-
BlazeComponent.extendComponent({
onCreated() {
this.subscribe('archivedBoards');
diff --git a/client/components/boards/boardBody.jade b/client/components/boards/boardBody.jade
index 3a40921d..32f8629f 100644
--- a/client/components/boards/boardBody.jade
+++ b/client/components/boards/boardBody.jade
@@ -20,12 +20,15 @@ template(name="boardBody")
class="{{#if draggingActive.get}}is-dragging-active{{/if}}")
if showOverlay.get
.board-overlay
- if isViewSwimlanes
+ if currentBoard.isTemplatesBoard
each currentBoard.swimlanes
+swimlane(this)
- if isViewLists
- +listsGroup
- if isViewCalendar
+ else if isViewSwimlanes
+ each currentBoard.swimlanes
+ +swimlane(this)
+ else if isViewLists
+ +listsGroup(currentBoard)
+ else if isViewCalendar
+calendarView
template(name="calendarView")
diff --git a/client/components/boards/boardHeader.jade b/client/components/boards/boardHeader.jade
index 75b2f02b..823bd806 100644
--- a/client/components/boards/boardHeader.jade
+++ b/client/components/boards/boardHeader.jade
@@ -7,71 +7,69 @@ template(name="boardHeaderBar")
.board-header-btns.left
unless isMiniScreen
- unless isSandstorm
- if currentBoard
- if currentUser
- a.board-header-btn.js-star-board(class="{{#if isStarred}}is-active{{/if}}"
- title="{{#if isStarred}}{{_ 'click-to-unstar'}}{{else}}{{_ 'click-to-star'}}{{/if}} {{_ 'starred-boards-description'}}")
- i.fa(class="fa-star{{#unless isStarred}}-o{{/unless}}")
- if showStarCounter
- span
- = currentBoard.stars
-
- a.board-header-btn(
- class="{{#if currentUser.isBoardAdmin}}js-change-visibility{{else}}is-disabled{{/if}}"
- title="{{_ currentBoard.permission}}")
- i.fa(class="{{#if currentBoard.isPublic}}fa-globe{{else}}fa-lock{{/if}}")
- span {{_ currentBoard.permission}}
-
- a.board-header-btn.js-watch-board(
- title="{{_ watchLevel }}")
- if $eq watchLevel "watching"
- i.fa.fa-eye
- if $eq watchLevel "tracking"
- i.fa.fa-bell
- if $eq watchLevel "muted"
- i.fa.fa-bell-slash
- span {{_ watchLevel}}
+ if currentBoard
+ if currentUser
+ a.board-header-btn.js-star-board(class="{{#if isStarred}}is-active{{/if}}"
+ title="{{#if isStarred}}{{_ 'click-to-unstar'}}{{else}}{{_ 'click-to-star'}}{{/if}} {{_ 'starred-boards-description'}}")
+ i.fa(class="fa-star{{#unless isStarred}}-o{{/unless}}")
+ if showStarCounter
+ span
+ = currentBoard.stars
+
+ a.board-header-btn(
+ class="{{#if currentUser.isBoardAdmin}}js-change-visibility{{else}}is-disabled{{/if}}"
+ title="{{_ currentBoard.permission}}")
+ i.fa(class="{{#if currentBoard.isPublic}}fa-globe{{else}}fa-lock{{/if}}")
+ span {{_ currentBoard.permission}}
+
+ a.board-header-btn.js-watch-board(
+ title="{{_ watchLevel }}")
+ if $eq watchLevel "watching"
+ i.fa.fa-eye
+ if $eq watchLevel "tracking"
+ i.fa.fa-bell
+ if $eq watchLevel "muted"
+ i.fa.fa-bell-slash
+ span {{_ watchLevel}}
- else
- a.board-header-btn.js-log-in(
- title="{{_ 'log-in'}}")
- i.fa.fa-sign-in
- span {{_ 'log-in'}}
+ else
+ a.board-header-btn.js-log-in(
+ title="{{_ 'log-in'}}")
+ i.fa.fa-sign-in
+ span {{_ 'log-in'}}
.board-header-btns.right
if currentBoard
if isMiniScreen
- unless isSandstorm
- if currentUser
- a.board-header-btn.js-star-board(class="{{#if isStarred}}is-active{{/if}}"
- title="{{#if isStarred}}{{_ 'click-to-unstar'}}{{else}}{{_ 'click-to-star'}}{{/if}} {{_ 'starred-boards-description'}}")
- i.fa(class="fa-star{{#unless isStarred}}-o{{/unless}}")
- if showStarCounter
- span
- = currentBoard.stars
-
- a.board-header-btn(
- class="{{#if currentUser.isBoardAdmin}}js-change-visibility{{else}}is-disabled{{/if}}"
- title="{{_ currentBoard.permission}}")
- i.fa(class="{{#if currentBoard.isPublic}}fa-globe{{else}}fa-lock{{/if}}")
- span {{_ currentBoard.permission}}
-
- a.board-header-btn.js-watch-board(
- title="{{_ watchLevel }}")
- if $eq watchLevel "watching"
- i.fa.fa-eye
- if $eq watchLevel "tracking"
- i.fa.fa-bell
- if $eq watchLevel "muted"
- i.fa.fa-bell-slash
- span {{_ watchLevel}}
+ if currentUser
+ a.board-header-btn.js-star-board(class="{{#if isStarred}}is-active{{/if}}"
+ title="{{#if isStarred}}{{_ 'click-to-unstar'}}{{else}}{{_ 'click-to-star'}}{{/if}} {{_ 'starred-boards-description'}}")
+ i.fa(class="fa-star{{#unless isStarred}}-o{{/unless}}")
+ if showStarCounter
+ span
+ = currentBoard.stars
+
+ a.board-header-btn(
+ class="{{#if currentUser.isBoardAdmin}}js-change-visibility{{else}}is-disabled{{/if}}"
+ title="{{_ currentBoard.permission}}")
+ i.fa(class="{{#if currentBoard.isPublic}}fa-globe{{else}}fa-lock{{/if}}")
+ span {{_ currentBoard.permission}}
+
+ a.board-header-btn.js-watch-board(
+ title="{{_ watchLevel }}")
+ if $eq watchLevel "watching"
+ i.fa.fa-eye
+ if $eq watchLevel "tracking"
+ i.fa.fa-bell
+ if $eq watchLevel "muted"
+ i.fa.fa-bell-slash
+ span {{_ watchLevel}}
- else
- a.board-header-btn.js-log-in(
- title="{{_ 'log-in'}}")
- i.fa.fa-sign-in
- span {{_ 'log-in'}}
+ else
+ a.board-header-btn.js-log-in(
+ title="{{_ 'log-in'}}")
+ i.fa.fa-sign-in
+ span {{_ 'log-in'}}
if isSandstorm
if currentUser
@@ -96,10 +94,11 @@ template(name="boardHeaderBar")
i.fa.fa-search
span {{_ 'search'}}
- a.board-header-btn.js-toggle-board-view(
- title="{{_ 'board-view'}}")
- i.fa.fa-th-large
- span {{_ currentUser.profile.boardView}}
+ unless currentBoard.isTemplatesBoard
+ a.board-header-btn.js-toggle-board-view(
+ title="{{_ 'board-view'}}")
+ i.fa.fa-th-large
+ span {{_ currentUser.profile.boardView}}
if canModifyBoard
a.board-header-btn.js-multiselection-activate(
@@ -112,40 +111,8 @@ template(name="boardHeaderBar")
i.fa.fa-times-thin
.separator
- a.board-header-btn.js-open-board-menu(title="{{_ 'boardMenuPopup-title'}}")
- i.board-header-btn-icon.fa.fa-navicon
-
-template(name="boardMenuPopup")
- ul.pop-over-list
- li: a.js-custom-fields {{_ 'custom-fields'}}
- li: a.js-open-archives {{_ 'archived-items'}}
- if currentUser.isBoardAdmin
- li: a.js-change-board-color {{_ 'board-change-color'}}
- //-
- XXX Language should be handled by sandstorm, but for now display a
- language selection link in the board menu. This link is normally present
- in the header bar that is not displayed on sandstorm.
- if isSandstorm
- li: a.js-change-language {{_ 'language'}}
- unless isSandstorm
- if currentUser.isBoardAdmin
- hr
- ul.pop-over-list
- li: a(href="{{exportUrl}}", download="{{exportFilename}}") {{_ 'export-board'}}
- li: a.js-archive-board {{_ 'archive-board'}}
- li: a.js-outgoing-webhooks {{_ 'outgoing-webhooks'}}
- hr
- ul.pop-over-list
- li: a.js-subtask-settings {{_ 'subtask-settings'}}
-
- if isSandstorm
- hr
- ul.pop-over-list
- li: a(href="{{exportUrl}}", download="{{exportFilename}}") {{_ 'export-board'}}
- li: a.js-import-board {{_ 'import-board-c'}}
- hr
- ul.pop-over-list
- li: a.js-subtask-settings {{_ 'subtask-settings'}}
+ a.board-header-btn.js-toggle-sidebar
+ i.fa.fa-navicon
template(name="boardVisibilityList")
ul.pop-over-list
@@ -196,64 +163,6 @@ template(name="boardChangeWatchPopup")
i.fa.fa-check
span.sub-name {{_ 'muted-info'}}
-template(name="boardChangeColorPopup")
- .board-backgrounds-list.clearfix
- each backgroundColors
- .board-background-select.js-select-background
- span.background-box(class="board-color-{{this}}")
- if isSelected
- i.fa.fa-check
-
-template(name="boardSubtaskSettingsPopup")
- form.board-subtask-settings
- h3 {{_ 'show-parent-in-minicard'}}
- a#prefix-with-full-path.flex.js-field-show-parent-in-minicard(class="{{#if $eq presentParentTask 'prefix-with-full-path'}}is-checked{{/if}}")
- .materialCheckBox(class="{{#if $eq presentParentTask 'prefix-with-full-path'}}is-checked{{/if}}")
- span {{_ 'prefix-with-full-path'}}
- a#prefix-with-parent.flex.js-field-show-parent-in-minicard(class="{{#if $eq presentParentTask 'prefix-with-parent'}}is-checked{{/if}}")
- .materialCheckBox(class="{{#if $eq presentParentTask 'prefix-with-parent'}}is-checked{{/if}}")
- span {{_ 'prefix-with-parent'}}
- a#subtext-with-full-path.flex.js-field-show-parent-in-minicard(class="{{#if $eq presentParentTask 'subtext-with-full-path'}}is-checked{{/if}}")
- .materialCheckBox(class="{{#if $eq presentParentTask 'subtext-with-full-path'}}is-checked{{/if}}")
- span {{_ 'subtext-with-full-path'}}
- a#subtext-with-parent.flex.js-field-show-parent-in-minicard(class="{{#if $eq presentParentTask 'subtext-with-parent'}}is-checked{{/if}}")
- .materialCheckBox(class="{{#if $eq presentParentTask 'subtext-with-parent'}}is-checked{{/if}}")
- span {{_ 'subtext-with-parent'}}
- a#no-parent.flex.js-field-show-parent-in-minicard(class="{{#if $eq presentParentTask 'no-parent'}}is-checked{{/if}}")
- .materialCheckBox(class="{{#if $eq presentParentTask 'no-parent'}}is-checked{{/if}}")
- span {{_ 'no-parent'}}
- div
- hr
-
- div.check-div
- a.flex.js-field-has-subtasks(class="{{#if allowsSubtasks}}is-checked{{/if}}")
- .materialCheckBox(class="{{#if allowsSubtasks}}is-checked{{/if}}")
- span {{_ 'show-subtasks-field'}}
-
- label
- | {{_ 'deposit-subtasks-board'}}
- select.js-field-deposit-board(disabled="{{#unless allowsSubtasks}}disabled{{/unless}}")
- each boards
- if isBoardSelected
- option(value=_id selected="selected") {{title}}
- else
- option(value=_id) {{title}}
- if isNullBoardSelected
- option(value='null' selected="selected") {{_ 'custom-field-dropdown-none'}}
- else
- option(value='null') {{_ 'custom-field-dropdown-none'}}
- div
- hr
-
- label
- | {{_ 'deposit-subtasks-list'}}
- select.js-field-deposit-list(disabled="{{#unless hasLists}}disabled{{/unless}}")
- each lists
- if isListSelected
- option(value=_id selected="selected") {{title}}
- else
- option(value=_id) {{title}}
-
template(name="createBoard")
form
label
@@ -275,14 +184,10 @@ template(name="createBoard")
input.primary.wide(type="submit" value="{{_ 'create'}}")
span.quiet
| {{_ 'or'}}
- a.js-import-board {{_ 'import-board'}}
-
-template(name="chooseBoardSource")
- ul.pop-over-list
- li
- a(href="{{pathFor '/import/trello'}}") {{_ 'from-trello'}}
- li
- a(href="{{pathFor '/import/wekan'}}") {{_ 'from-wekan'}}
+ a.js-import-board {{_ 'import'}}
+ span.quiet
+ | /
+ a.js-board-template {{_ 'template'}}
template(name="boardChangeTitlePopup")
form
@@ -297,28 +202,3 @@ template(name="boardChangeTitlePopup")
template(name="boardCreateRulePopup")
p {{_ 'close-board-pop'}}
button.js-confirm.negate.full(type="submit") {{_ 'archive'}}
-
-
-template(name="archiveBoardPopup")
- p {{_ 'close-board-pop'}}
- button.js-confirm.negate.full(type="submit") {{_ 'archive'}}
-
-template(name="outgoingWebhooksPopup")
- each integrations
- form.integration-form
- if title
- h4 {{title}}
- else
- h4 {{_ 'no-name'}}
- label
- | URL
- input.js-outgoing-webhooks-url(type="text" name="url" value=url)
- input(type="hidden" value=_id name="id")
- input.primary.wide(type="submit" value="{{_ 'save'}}")
- form.integration-form
- h4
- | {{_ 'new-outgoing-webhook'}}
- label
- | URL
- input.js-outgoing-webhooks-url(type="text" name="url" autofocus)
- input.primary.wide(type="submit" value="{{_ 'save'}}")
diff --git a/client/components/boards/boardHeader.js b/client/components/boards/boardHeader.js
index 89f686ab..86fbebb3 100644
--- a/client/components/boards/boardHeader.js
+++ b/client/components/boards/boardHeader.js
@@ -97,6 +97,9 @@ BlazeComponent.extendComponent({
currentUser.setBoardView('board-view-lists');
}
},
+ 'click .js-toggle-sidebar'() {
+ Sidebar.toggle();
+ },
'click .js-open-filter-view'() {
Sidebar.setView('filter');
},
@@ -135,124 +138,6 @@ Template.boardHeaderBar.helpers({
},
});
-BlazeComponent.extendComponent({
- backgroundColors() {
- return Boards.simpleSchema()._schema.color.allowedValues;
- },
-
- isSelected() {
- const currentBoard = Boards.findOne(Session.get('currentBoard'));
- return currentBoard.color === this.currentData().toString();
- },
-
- events() {
- return [{
- 'click .js-select-background'(evt) {
- const currentBoard = Boards.findOne(Session.get('currentBoard'));
- const newColor = this.currentData().toString();
- currentBoard.setColor(newColor);
- evt.preventDefault();
- },
- }];
- },
-}).register('boardChangeColorPopup');
-
-BlazeComponent.extendComponent({
- onCreated() {
- this.currentBoard = Boards.findOne(Session.get('currentBoard'));
- },
-
- allowsSubtasks() {
- return this.currentBoard.allowsSubtasks;
- },
-
- isBoardSelected() {
- return this.currentBoard.subtasksDefaultBoardId === this.currentData()._id;
- },
-
- isNullBoardSelected() {
- return (this.currentBoard.subtasksDefaultBoardId === null) || (this.currentBoard.subtasksDefaultBoardId === undefined);
- },
-
- boards() {
- return Boards.find({
- archived: false,
- 'members.userId': Meteor.userId(),
- }, {
- sort: ['title'],
- });
- },
-
- lists() {
- return Lists.find({
- boardId: this.currentBoard._id,
- archived: false,
- }, {
- sort: ['title'],
- });
- },
-
- hasLists() {
- return this.lists().count() > 0;
- },
-
- isListSelected() {
- return this.currentBoard.subtasksDefaultBoardId === this.currentData()._id;
- },
-
- presentParentTask() {
- let result = this.currentBoard.presentParentTask;
- if ((result === null) || (result === undefined)) {
- result = 'no-parent';
- }
- return result;
- },
-
- events() {
- return [{
- 'click .js-field-has-subtasks'(evt) {
- evt.preventDefault();
- this.currentBoard.allowsSubtasks = !this.currentBoard.allowsSubtasks;
- this.currentBoard.setAllowsSubtasks(this.currentBoard.allowsSubtasks);
- $('.js-field-has-subtasks .materialCheckBox').toggleClass('is-checked', this.currentBoard.allowsSubtasks);
- $('.js-field-has-subtasks').toggleClass('is-checked', this.currentBoard.allowsSubtasks);
- $('.js-field-deposit-board').prop('disabled', !this.currentBoard.allowsSubtasks);
- },
- 'change .js-field-deposit-board'(evt) {
- let value = evt.target.value;
- if (value === 'null') {
- value = null;
- }
- this.currentBoard.setSubtasksDefaultBoardId(value);
- evt.preventDefault();
- },
- 'change .js-field-deposit-list'(evt) {
- this.currentBoard.setSubtasksDefaultListId(evt.target.value);
- evt.preventDefault();
- },
- 'click .js-field-show-parent-in-minicard'(evt) {
- const value = evt.target.id || $(evt.target).parent()[0].id || $(evt.target).parent()[0].parent()[0].id;
- const options = [
- 'prefix-with-full-path',
- 'prefix-with-parent',
- 'subtext-with-full-path',
- 'subtext-with-parent',
- 'no-parent'];
- options.forEach(function(element) {
- if (element !== value) {
- $(`#${element} .materialCheckBox`).toggleClass('is-checked', false);
- $(`#${element}`).toggleClass('is-checked', false);
- }
- });
- $(`#${value} .materialCheckBox`).toggleClass('is-checked', true);
- $(`#${value}`).toggleClass('is-checked', true);
- this.currentBoard.setPresentParentTask(value);
- evt.preventDefault();
- },
- }];
- },
-}).register('boardSubtaskSettingsPopup');
-
const CreateBoard = BlazeComponent.extendComponent({
template() {
return 'createBoard';
@@ -304,16 +189,11 @@ const CreateBoard = BlazeComponent.extendComponent({
'click .js-import': Popup.open('boardImportBoard'),
submit: this.onSubmit,
'click .js-import-board': Popup.open('chooseBoardSource'),
+ 'click .js-board-template': Popup.open('searchElement'),
}];
},
}).register('createBoardPopup');
-BlazeComponent.extendComponent({
- template() {
- return 'chooseBoardSource';
- },
-}).register('chooseBoardSourcePopup');
-
(class HeaderBarCreateBoard extends CreateBoard {
onSubmit(evt) {
super.onSubmit(evt);
@@ -363,50 +243,3 @@ BlazeComponent.extendComponent({
}];
},
}).register('boardChangeWatchPopup');
-
-BlazeComponent.extendComponent({
- integrations() {
- const boardId = Session.get('currentBoard');
- return Integrations.find({ boardId: `${boardId}` }).fetch();
- },
-
- integration(id) {
- const boardId = Session.get('currentBoard');
- return Integrations.findOne({ _id: id, boardId: `${boardId}` });
- },
-
- events() {
- return [{
- 'submit'(evt) {
- evt.preventDefault();
- const url = evt.target.url.value;
- const boardId = Session.get('currentBoard');
- let id = null;
- let integration = null;
- if (evt.target.id) {
- id = evt.target.id.value;
- integration = this.integration(id);
- if (url) {
- Integrations.update(integration._id, {
- $set: {
- url: `${url}`,
- },
- });
- } else {
- Integrations.remove(integration._id);
- }
- } else if (url) {
- Integrations.insert({
- userId: Meteor.userId(),
- enabled: true,
- type: 'outgoing-webhooks',
- url: `${url}`,
- boardId: `${boardId}`,
- activities: ['all'],
- });
- }
- Popup.close();
- },
- }];
- },
-}).register('outgoingWebhooksPopup');
diff --git a/client/components/boards/boardsList.jade b/client/components/boards/boardsList.jade
index 753724fc..abb009f7 100644
--- a/client/components/boards/boardsList.jade
+++ b/client/components/boards/boardsList.jade
@@ -36,3 +36,6 @@ template(name="boardListHeaderBar")
a.board-header-btn.js-open-archived-board
i.fa.fa-archive
span {{_ 'archives'}}
+ a.board-header-btn(href="{{pathFor 'board' id=templatesBoardId slug=templatesBoardSlug}}")
+ i.fa.fa-clone
+ span {{_ 'templates'}}
diff --git a/client/components/boards/boardsList.js b/client/components/boards/boardsList.js
index 68f4a1dc..ad28fee8 100644
--- a/client/components/boards/boardsList.js
+++ b/client/components/boards/boardsList.js
@@ -1,5 +1,20 @@
const subManager = new SubsManager();
+Template.boardListHeaderBar.events({
+ 'click .js-open-archived-board'() {
+ Modal.open('archivedBoards');
+ },
+});
+
+Template.boardListHeaderBar.helpers({
+ templatesBoardId() {
+ return Meteor.user().getTemplatesBoardId();
+ },
+ templatesBoardSlug() {
+ return Meteor.user().getTemplatesBoardSlug();
+ },
+});
+
BlazeComponent.extendComponent({
onCreated() {
Meteor.subscribe('setting');
@@ -9,11 +24,9 @@ BlazeComponent.extendComponent({
return Boards.find({
archived: false,
'members.userId': Meteor.userId(),
- }, {
- sort: ['title'],
- });
+ type: 'board',
+ }, { sort: ['title'] });
},
-
isStarred() {
const user = Meteor.user();
return user && user.hasStarred(this.currentData()._id);
diff --git a/client/components/boards/miniboard.jade b/client/components/boards/miniboard.jade
new file mode 100644
index 00000000..d1fb0b07
--- /dev/null
+++ b/client/components/boards/miniboard.jade
@@ -0,0 +1,8 @@
+template(name="miniboard")
+ .minicard(
+ class="minicard-{{colorClass}}")
+ .minicard-title
+ .handle
+ .fa.fa-arrows
+ +viewer
+ = title
diff --git a/client/components/cards/cardDetails.jade b/client/components/cards/cardDetails.jade
index 25316d04..5fd7b748 100644
--- a/client/components/cards/cardDetails.jade
+++ b/client/components/cards/cardDetails.jade
@@ -19,16 +19,14 @@ template(name="cardDetails")
a.js-parent-card(href=linkForCard) {{title}}
// else
{{_ 'top-level-card'}}
- unless isSandstorm
- if isLinkedCard
- h3.linked-card-location
- +viewer
- | {{getBoardTitle}} > {{getTitle}}
+ if isLinkedCard
+ h3.linked-card-location
+ +viewer
+ | {{getBoardTitle}} > {{getTitle}}
if getArchived
if isLinkedBoard
- unless isSandstorm
- p.warning {{_ 'board-archived'}}
+ p.warning {{_ 'board-archived'}}
else
p.warning {{_ 'card-archived'}}
@@ -192,11 +190,9 @@ template(name="cardDetails")
unless currentUser.isNoComments
if isLoaded.get
if isLinkedCard
- unless isSandstorm
- +activities(card=this mode="linkedcard")
+ +activities(card=this mode="linkedcard")
else if isLinkedBoard
- unless isSandstorm
- +activities(card=this mode="linkedboard")
+ +activities(card=this mode="linkedboard")
else
+activities(card=this mode="card")
@@ -310,27 +306,27 @@ template(name="cardMorePopup")
h2 {{_ 'change-card-parent'}}
label {{_ 'source-board'}}:
select.js-field-parent-board
+ if isTopLevel
+ option(value="none" selected) {{_ 'custom-field-dropdown-none'}}
+ else
+ option(value="none") {{_ 'custom-field-dropdown-none'}}
each boards
if isParentBoard
option(value="{{_id}}" selected) {{title}}
else
option(value="{{_id}}") {{title}}
- if isTopLevel
- option(value="none" selected) {{_ 'custom-field-dropdown-none'}}
- else
- option(value="none") {{_ 'custom-field-dropdown-none'}}
label {{_ 'parent-card'}}:
select.js-field-parent-card
if isTopLevel
option(value="none" selected) {{_ 'custom-field-dropdown-none'}}
else
+ option(value="none") {{_ 'custom-field-dropdown-none'}}
each cards
if isParentCard
option(value="{{_id}}" selected) {{title}}
else
option(value="{{_id}}") {{title}}
- option(value="none") {{_ 'custom-field-dropdown-none'}}
br
| {{_ 'added'}}
span.date(title=card.createdAt) {{ moment createdAt 'LLL' }}
diff --git a/client/components/cards/cardDetails.js b/client/components/cards/cardDetails.js
index a571e21a..79e9e311 100644
--- a/client/components/cards/cardDetails.js
+++ b/client/components/cards/cardDetails.js
@@ -412,11 +412,13 @@ Template.moveCardPopup.events({
// XXX We should *not* get the currentCard from the global state, but
// instead from a “component” state.
const card = Cards.findOne(Session.get('currentCard'));
+ const bSelect = $('.js-select-boards')[0];
+ const boardId = bSelect.options[bSelect.selectedIndex].value;
const lSelect = $('.js-select-lists')[0];
- const newListId = lSelect.options[lSelect.selectedIndex].value;
+ const listId = lSelect.options[lSelect.selectedIndex].value;
const slSelect = $('.js-select-swimlanes')[0];
- card.swimlaneId = slSelect.options[slSelect.selectedIndex].value;
- card.move(card.swimlaneId, newListId, 0);
+ const swimlaneId = slSelect.options[slSelect.selectedIndex].value;
+ card.move(boardId, swimlaneId, listId, 0);
Popup.close();
},
});
@@ -430,6 +432,7 @@ BlazeComponent.extendComponent({
const boards = Boards.find({
archived: false,
'members.userId': Meteor.userId(),
+ _id: {$ne: Meteor.user().getTemplatesBoardId()},
}, {
sort: ['title'],
});
@@ -456,32 +459,15 @@ BlazeComponent.extendComponent({
},
}).register('boardsAndLists');
-
-function cloneCheckList(_id, checklist) {
- 'use strict';
- const checklistId = checklist._id;
- checklist.cardId = _id;
- checklist._id = null;
- const newChecklistId = Checklists.insert(checklist);
- ChecklistItems.find({checklistId}).forEach(function(item) {
- item._id = null;
- item.checklistId = newChecklistId;
- item.cardId = _id;
- ChecklistItems.insert(item);
- });
-}
-
Template.copyCardPopup.events({
'click .js-done'() {
const card = Cards.findOne(Session.get('currentCard'));
- const oldId = card._id;
- card._id = null;
const lSelect = $('.js-select-lists')[0];
- card.listId = lSelect.options[lSelect.selectedIndex].value;
+ listId = lSelect.options[lSelect.selectedIndex].value;
const slSelect = $('.js-select-swimlanes')[0];
- card.swimlaneId = slSelect.options[slSelect.selectedIndex].value;
+ const swimlaneId = slSelect.options[slSelect.selectedIndex].value;
const bSelect = $('.js-select-boards')[0];
- card.boardId = bSelect.options[bSelect.selectedIndex].value;
+ const boardId = bSelect.options[bSelect.selectedIndex].value;
const textarea = $('#copy-card-title');
const title = textarea.val().trim();
// insert new card to the bottom of new list
@@ -490,38 +476,13 @@ Template.copyCardPopup.events({
if (title) {
card.title = title;
card.coverId = '';
- const _id = Cards.insert(card);
+ const _id = card.copy(boardId, swimlaneId, listId);
// In case the filter is active we need to add the newly inserted card in
// the list of exceptions -- cards that are not filtered. Otherwise the
// card will disappear instantly.
// See https://github.com/wekan/wekan/issues/80
Filter.addException(_id);
- // copy checklists
- let cursor = Checklists.find({cardId: oldId});
- cursor.forEach(function() {
- cloneCheckList(_id, arguments[0]);
- });
-
- // copy subtasks
- cursor = Cards.find({parentId: oldId});
- cursor.forEach(function() {
- 'use strict';
- const subtask = arguments[0];
- subtask.parentId = _id;
- subtask._id = null;
- /* const newSubtaskId = */ Cards.insert(subtask);
- });
-
- // copy card comments
- cursor = CardComments.find({cardId: oldId});
- cursor.forEach(function () {
- 'use strict';
- const comment = arguments[0];
- comment.cardId = _id;
- comment._id = null;
- CardComments.insert(comment);
- });
Popup.close();
}
},
@@ -558,9 +519,8 @@ Template.copyChecklistToManyCardsPopup.events({
Filter.addException(_id);
// copy checklists
- let cursor = Checklists.find({cardId: oldId});
- cursor.forEach(function() {
- cloneCheckList(_id, arguments[0]);
+ Checklists.find({cardId: oldId}).forEach((ch) => {
+ ch.copy(_id);
});
// copy subtasks
@@ -574,13 +534,8 @@ Template.copyChecklistToManyCardsPopup.events({
});
// copy card comments
- cursor = CardComments.find({cardId: oldId});
- cursor.forEach(function () {
- 'use strict';
- const comment = arguments[0];
- comment.cardId = _id;
- comment._id = null;
- CardComments.insert(comment);
+ CardComments.find({cardId: oldId}).forEach((cmt) => {
+ cmt.copy(_id);
});
}
Popup.close();
@@ -625,11 +580,14 @@ BlazeComponent.extendComponent({
BlazeComponent.extendComponent({
onCreated() {
this.currentCard = this.currentData();
+ this.parentBoard = new ReactiveVar(null);
this.parentCard = this.currentCard.parentCard();
if (this.parentCard) {
- this.parentBoard = this.parentCard.board();
+ const list = $('.js-field-parent-card');
+ list.val(this.parentCard._id);
+ this.parentBoard.set(this.parentCard.board()._id);
} else {
- this.parentBoard = null;
+ this.parentBoard.set(null);
}
},
@@ -637,6 +595,9 @@ BlazeComponent.extendComponent({
const boards = Boards.find({
archived: false,
'members.userId': Meteor.userId(),
+ _id: {
+ $ne: Meteor.user().getTemplatesBoardId(),
+ },
}, {
sort: ['title'],
});
@@ -644,8 +605,12 @@ BlazeComponent.extendComponent({
},
cards() {
- if (this.parentBoard) {
- return this.parentBoard.cards();
+ const currentId = Session.get('currentCard');
+ if (this.parentBoard.get()) {
+ return Cards.find({
+ boardId: this.parentBoard.get(),
+ _id: {$ne: currentId},
+ });
} else {
return [];
}
@@ -653,8 +618,8 @@ BlazeComponent.extendComponent({
isParentBoard() {
const board = this.currentData();
- if (this.parentBoard) {
- return board._id === this.parentBoard;
+ if (this.parentBoard.get()) {
+ return board._id === this.parentBoard.get();
}
return false;
},
@@ -668,11 +633,10 @@ BlazeComponent.extendComponent({
},
setParentCardId(cardId) {
- if (cardId === 'null') {
- cardId = null;
- this.parentCard = null;
- } else {
+ if (cardId) {
this.parentCard = Cards.findOne(cardId);
+ } else {
+ this.parentCard = null;
}
this.currentCard.setParentId(cardId);
},
@@ -709,23 +673,14 @@ BlazeComponent.extendComponent({
'change .js-field-parent-board'(evt) {
const selection = $(evt.currentTarget).val();
const list = $('.js-field-parent-card');
- list.empty();
if (selection === 'none') {
- this.parentBoard = null;
- list.prop('disabled', true);
+ this.parentBoard.set(null);
} else {
- this.parentBoard = Boards.findOne(selection);
- this.parentBoard.cards().forEach(function(card) {
- list.append(
- $('<option></option>').val(card._id).html(card.title)
- );
- });
+ subManager.subscribe('board', $(evt.currentTarget).val());
+ this.parentBoard.set(selection);
list.prop('disabled', false);
}
- list.append(
- `<option value='none' selected='selected'>${TAPi18n.__('custom-field-dropdown-none')}</option>`
- );
- this.setParentCardId('null');
+ this.setParentCardId(null);
},
'change .js-field-parent-card'(evt) {
const selection = $(evt.currentTarget).val();
diff --git a/client/components/cards/cardDetails.styl b/client/components/cards/cardDetails.styl
index bf50c071..c1d6b7e1 100644
--- a/client/components/cards/cardDetails.styl
+++ b/client/components/cards/cardDetails.styl
@@ -133,7 +133,8 @@ input[type="submit"].attachment-add-link-submit
.card-details-canvas
width: 100%
-
+ padding-left: 0px;
+
.card-details-header
.close-card-details
margin-right: 0px
diff --git a/client/components/lists/list.js b/client/components/lists/list.js
index 043cb77c..12932a82 100644
--- a/client/components/lists/list.js
+++ b/client/components/lists/list.js
@@ -67,7 +67,13 @@ BlazeComponent.extendComponent({
const nCards = MultiSelection.isActive() ? MultiSelection.count() : 1;
const sortIndex = calculateIndex(prevCardDom, nextCardDom, nCards);
const listId = Blaze.getData(ui.item.parents('.list').get(0))._id;
- const swimlaneId = Blaze.getData(ui.item.parents('.swimlane').get(0))._id;
+ const currentBoard = Boards.findOne(Session.get('currentBoard'));
+ let swimlaneId = '';
+ const boardView = Meteor.user().profile.boardView;
+ if (boardView === 'board-view-swimlanes' || currentBoard.isTemplatesBoard())
+ swimlaneId = Blaze.getData(ui.item.parents('.swimlane').get(0))._id;
+ else if ((boardView === 'board-view-lists') || (boardView === 'board-view-cal'))
+ swimlaneId = currentBoard.getDefaultSwimline()._id;
// Normally the jquery-ui sortable library moves the dragged DOM element
// to its new position, which disrupts Blaze reactive updates mechanism
@@ -80,12 +86,12 @@ BlazeComponent.extendComponent({
if (MultiSelection.isActive()) {
Cards.find(MultiSelection.getMongoSelector()).forEach((card, i) => {
- card.move(swimlaneId, listId, sortIndex.base + i * sortIndex.increment);
+ card.move(currentBoard._id, swimlaneId, listId, sortIndex.base + i * sortIndex.increment);
});
} else {
const cardDomElement = ui.item.get(0);
const card = Blaze.getData(cardDomElement);
- card.move(swimlaneId, listId, sortIndex.base);
+ card.move(currentBoard._id, swimlaneId, listId, sortIndex.base);
}
boardComponent.setIsDragging(false);
},
diff --git a/client/components/lists/list.styl b/client/components/lists/list.styl
index 70502083..7e4550a4 100644
--- a/client/components/lists/list.styl
+++ b/client/components/lists/list.styl
@@ -84,6 +84,7 @@
padding-left: 10px
color: #a6a6a6
+
.list-header-menu
position: absolute
padding: 27px 19px
@@ -155,6 +156,9 @@
float: left
@media screen and (max-width: 800px)
+ .list-header-menu
+ margin-right: 30px
+
.mini-list
flex: 0 0 60px
height: 60px
diff --git a/client/components/lists/listBody.jade b/client/components/lists/listBody.jade
index f030833b..61fec93a 100644
--- a/client/components/lists/listBody.jade
+++ b/client/components/lists/listBody.jade
@@ -13,14 +13,7 @@ template(name="listBody")
class="{{#if MultiSelection.isSelected _id}}is-checked{{/if}}")
+minicard(this)
if (showSpinner (idOrNull ../../_id))
- .sk-spinner.sk-spinner-wave.sk-spinner-list(
- class=currentBoard.colorClass
- id="showMoreResults")
- .sk-rect1
- .sk-rect2
- .sk-rect3
- .sk-rect4
- .sk-rect5
+ +spinnerList
if canSeeAddCard
+inlinedForm(autoclose=false position="bottom")
@@ -30,6 +23,16 @@ template(name="listBody")
i.fa.fa-plus
| {{_ 'add-card'}}
+template(name="spinnerList")
+ .sk-spinner.sk-spinner-wave.sk-spinner-list(
+ class=currentBoard.colorClass
+ id="showMoreResults")
+ .sk-rect1
+ .sk-rect2
+ .sk-rect3
+ .sk-rect4
+ .sk-rect5
+
template(name="addCardForm")
.minicard.minicard-composer.js-composer
if getLabels
@@ -44,14 +47,19 @@ template(name="addCardForm")
.add-controls.clearfix
button.primary.confirm(type="submit") {{_ 'add'}}
- unless isSandstorm
- span.quiet
- | {{_ 'or'}}
- a.js-link {{_ 'link'}}
- span.quiet
- | &nbsp;
- | /
- a.js-search {{_ 'search'}}
+ unless currentBoard.isTemplatesBoard
+ unless currentBoard.isTemplateBoard
+ span.quiet
+ | {{_ 'or'}}
+ a.js-link {{_ 'link'}}
+ span.quiet
+ | &nbsp;
+ | /
+ a.js-search {{_ 'search'}}
+ span.quiet
+ | &nbsp;
+ | /
+ a.js-card-template {{_ 'template'}}
template(name="autocompleteLabelLine")
.minicard-label(class="card-label-{{colorName}}" title=labelName)
@@ -61,11 +69,9 @@ template(name="linkCardPopup")
label {{_ 'boards'}}:
.link-board-wrapper
select.js-select-boards
+ option(value="")
each boards
- if $eq _id currentBoard._id
- option(value="{{_id}}" selected) {{_ 'current'}}
- else
- option(value="{{_id}}") {{title}}
+ option(value="{{_id}}") {{title}}
input.primary.confirm.js-link-board(type="button" value="{{_ 'link'}}")
label {{_ 'swimlanes'}}:
@@ -84,22 +90,41 @@ template(name="linkCardPopup")
option(value="{{getId}}") {{getTitle}}
.edit-controls.clearfix
- unless isSandstorm
- input.primary.confirm.js-done(type="button" value="{{_ 'link'}}")
+ input.primary.confirm.js-done(type="button" value="{{_ 'link'}}")
-template(name="searchCardPopup")
- label {{_ 'boards'}}:
- .link-board-wrapper
- select.js-select-boards
- each boards
- if $eq _id currentBoard._id
- option(value="{{_id}}" selected) {{_ 'current'}}
- else
+template(name="searchElementPopup")
+ form
+ label
+ | {{_ 'title'}}
+ input.js-element-title(type="text" placeholder="{{_ 'title'}}" autofocus required)
+ unless isTemplateSearch
+ label {{_ 'boards'}}:
+ .link-board-wrapper
+ select.js-select-boards
+ option(value="")
+ each boards
option(value="{{_id}}") {{title}}
form.js-search-term-form
input(type="text" name="searchTerm" placeholder="{{_ 'search-example'}}" autofocus)
.list-body.js-perfect-scrollbar.search-card-results
.minicards.clearfix.js-minicards
- each results
- a.minicard-wrapper.js-minicard
- +minicard(this)
+ if isBoardTemplateSearch
+ each results
+ a.minicard-wrapper.js-minicard
+ +miniboard(this)
+ if isListTemplateSearch
+ each results
+ a.minicard-wrapper.js-minicard
+ +minilist(this)
+ if isSwimlaneTemplateSearch
+ each results
+ a.minicard-wrapper.js-minicard
+ +miniswimlane(this)
+ if isCardTemplateSearch
+ each results
+ a.minicard-wrapper.js-minicard
+ +minicard(this)
+ unless isTemplateSearch
+ each results
+ a.minicard-wrapper.js-minicard
+ +minicard(this)
diff --git a/client/components/lists/listBody.js b/client/components/lists/listBody.js
index 0f5caac5..43619890 100644
--- a/client/components/lists/listBody.js
+++ b/client/components/lists/listBody.js
@@ -7,28 +7,6 @@ BlazeComponent.extendComponent({
this.cardlimit = new ReactiveVar(InfiniteScrollIter);
},
- onRendered() {
- const domElement = this.find('.js-perfect-scrollbar');
-
- this.$(domElement).on('scroll', () => this.updateList(domElement));
- $(window).on(`resize.${this.data().listId}`, () => this.updateList(domElement));
-
- // we add a Mutation Observer to allow propagations of cardlimit
- // when the spinner stays in the current view (infinite scrolling)
- this.mutationObserver = new MutationObserver(() => this.updateList(domElement));
-
- this.mutationObserver.observe(domElement, {
- childList: true,
- });
-
- this.updateList(domElement);
- },
-
- onDestroyed() {
- $(window).off(`resize.${this.data().listId}`);
- this.mutationObserver.disconnect();
- },
-
mixins() {
return [Mixins.PerfectScrollbar];
},
@@ -67,25 +45,47 @@ BlazeComponent.extendComponent({
const labelIds = formComponent.labels.get();
const customFields = formComponent.customFields.get();
- const boardId = this.data().board();
+ const board = this.data().board();
+ let linkedId = '';
let swimlaneId = '';
const boardView = Meteor.user().profile.boardView;
- if (boardView === 'board-view-swimlanes')
- swimlaneId = this.parentComponent().parentComponent().data()._id;
- else if ((boardView === 'board-view-lists') || (boardView === 'board-view-cal'))
- swimlaneId = boardId.getDefaultSwimline()._id;
-
+ let cardType = 'cardType-card';
if (title) {
+ if (board.isTemplatesBoard()) {
+ swimlaneId = this.parentComponent().parentComponent().data()._id; // Always swimlanes view
+ const swimlane = Swimlanes.findOne(swimlaneId);
+ // If this is the card templates swimlane, insert a card template
+ if (swimlane.isCardTemplatesSwimlane())
+ cardType = 'template-card';
+ // If this is the board templates swimlane, insert a board template and a linked card
+ else if (swimlane.isBoardTemplatesSwimlane()) {
+ linkedId = Boards.insert({
+ title,
+ permission: 'private',
+ type: 'template-board',
+ });
+ Swimlanes.insert({
+ title: TAPi18n.__('default'),
+ boardId: linkedId,
+ });
+ cardType = 'cardType-linkedBoard';
+ }
+ } else if (boardView === 'board-view-swimlanes')
+ swimlaneId = this.parentComponent().parentComponent().data()._id;
+ else if ((boardView === 'board-view-lists') || (boardView === 'board-view-cal'))
+ swimlaneId = board.getDefaultSwimline()._id;
+
const _id = Cards.insert({
title,
members,
labelIds,
customFields,
listId: this.data()._id,
- boardId: boardId._id,
+ boardId: board._id,
sort: sortIndex,
swimlaneId,
- type: 'cardType-card',
+ type: cardType,
+ linkedId,
});
// if the displayed card count is less than the total cards in the list,
@@ -127,9 +127,9 @@ BlazeComponent.extendComponent({
const methodName = evt.shiftKey ? 'toggleRange' : 'toggle';
MultiSelection[methodName](this.currentData()._id);
- // If the card is already selected, we want to de-select it.
- // XXX We should probably modify the minicard href attribute instead of
- // overwriting the event in case the card is already selected.
+ // If the card is already selected, we want to de-select it.
+ // XXX We should probably modify the minicard href attribute instead of
+ // overwriting the event in case the card is already selected.
} else if (Session.equals('currentCard', this.currentData()._id)) {
evt.stopImmediatePropagation();
evt.preventDefault();
@@ -149,7 +149,8 @@ BlazeComponent.extendComponent({
idOrNull(swimlaneId) {
const currentUser = Meteor.user();
- if (currentUser.profile.boardView === 'board-view-swimlanes')
+ if (currentUser.profile.boardView === 'board-view-swimlanes' ||
+ this.data().board().isTemplatesBoard())
return swimlaneId;
return undefined;
},
@@ -168,38 +169,11 @@ BlazeComponent.extendComponent({
});
},
- spinnerInView(container) {
- const parentViewHeight = container.clientHeight;
- const bottomViewPosition = container.scrollTop + parentViewHeight;
-
- const spinner = this.find('.sk-spinner-list');
-
- const threshold = spinner.offsetTop;
-
- return bottomViewPosition > threshold;
- },
-
showSpinner(swimlaneId) {
const list = Template.currentData();
return list.cards(swimlaneId).count() > this.cardlimit.get();
},
- updateList(container) {
- // first, if the spinner is not rendered, we have reached the end of
- // the list of cards, so skip and disable firing the events
- const target = this.find('.sk-spinner-list');
- if (!target) {
- this.$(container).off('scroll');
- $(window).off(`resize.${this.data().listId}`);
- return;
- }
-
- if (this.spinnerInView(container)) {
- this.cardlimit.set(this.cardlimit.get() + InfiniteScrollIter);
- Ps.update(container);
- }
- },
-
canSeeAddCard() {
return !this.reachedWipLimit() && Meteor.user() && Meteor.user().isBoardMember() && !Meteor.user().isCommentOnly();
},
@@ -269,8 +243,8 @@ BlazeComponent.extendComponent({
// work.
$form.find('button[type=submit]').click();
- // Pressing Tab should open the form of the next column, and Maj+Tab go
- // in the reverse order
+ // Pressing Tab should open the form of the next column, and Maj+Tab go
+ // in the reverse order
} else if (evt.keyCode === 9) {
evt.preventDefault();
const isReverse = evt.shiftKey;
@@ -292,7 +266,8 @@ BlazeComponent.extendComponent({
return [{
keydown: this.pressKey,
'click .js-link': Popup.open('linkCard'),
- 'click .js-search': Popup.open('searchCard'),
+ 'click .js-search': Popup.open('searchElement'),
+ 'click .js-card-template': Popup.open('searchElement'),
}];
},
@@ -330,7 +305,7 @@ BlazeComponent.extendComponent({
const currentBoard = Boards.findOne(Session.get('currentBoard'));
callback($.map(currentBoard.labels, (label) => {
if (label.name.indexOf(term) > -1 ||
- label.color.indexOf(term) > -1) {
+ label.color.indexOf(term) > -1) {
return label;
}
return null;
@@ -367,17 +342,7 @@ BlazeComponent.extendComponent({
BlazeComponent.extendComponent({
onCreated() {
- // Prefetch first non-current board id
- const boardId = Boards.findOne({
- archived: false,
- 'members.userId': Meteor.userId(),
- _id: {$ne: Session.get('currentBoard')},
- }, {
- sort: ['title'],
- })._id;
- // Subscribe to this board
- subManager.subscribe('board', boardId);
- this.selectedBoardId = new ReactiveVar(boardId);
+ this.selectedBoardId = new ReactiveVar('');
this.selectedSwimlaneId = new ReactiveVar('');
this.selectedListId = new ReactiveVar('');
@@ -403,6 +368,7 @@ BlazeComponent.extendComponent({
archived: false,
'members.userId': Meteor.userId(),
_id: {$ne: Session.get('currentBoard')},
+ type: 'board',
}, {
sort: ['title'],
});
@@ -410,7 +376,7 @@ BlazeComponent.extendComponent({
},
swimlanes() {
- if (!this.selectedBoardId) {
+ if (!this.selectedBoardId.get()) {
return [];
}
const swimlanes = Swimlanes.find({boardId: this.selectedBoardId.get()});
@@ -420,7 +386,7 @@ BlazeComponent.extendComponent({
},
lists() {
- if (!this.selectedBoardId) {
+ if (!this.selectedBoardId.get()) {
return [];
}
const lists = Lists.find({boardId: this.selectedBoardId.get()});
@@ -441,6 +407,7 @@ BlazeComponent.extendComponent({
archived: false,
linkedId: {$nin: ownCardsIds},
_id: {$nin: ownCardsIds},
+ type: {$nin: ['template-card']},
});
},
@@ -508,12 +475,25 @@ BlazeComponent.extendComponent({
},
onCreated() {
- // Prefetch first non-current board id
- let board = Boards.findOne({
- archived: false,
- 'members.userId': Meteor.userId(),
- _id: {$ne: Session.get('currentBoard')},
- });
+ this.isCardTemplateSearch = $(Popup._getTopStack().openerElement).hasClass('js-card-template');
+ this.isListTemplateSearch = $(Popup._getTopStack().openerElement).hasClass('js-list-template');
+ this.isSwimlaneTemplateSearch = $(Popup._getTopStack().openerElement).hasClass('js-open-add-swimlane-menu');
+ this.isBoardTemplateSearch = $(Popup._getTopStack().openerElement).hasClass('js-add-board');
+ this.isTemplateSearch = this.isCardTemplateSearch ||
+ this.isListTemplateSearch ||
+ this.isSwimlaneTemplateSearch ||
+ this.isBoardTemplateSearch;
+ let board = {};
+ if (this.isTemplateSearch) {
+ board = Boards.findOne(Meteor.user().profile.templatesBoardId);
+ } else {
+ // Prefetch first non-current board id
+ board = Boards.findOne({
+ archived: false,
+ 'members.userId': Meteor.userId(),
+ _id: {$nin: [Session.get('currentBoard'), Meteor.user().profile.templatesBoardId]},
+ });
+ }
if (!board) {
Popup.close();
return;
@@ -523,20 +503,21 @@ BlazeComponent.extendComponent({
subManager.subscribe('board', boardId);
this.selectedBoardId = new ReactiveVar(boardId);
- this.boardId = Session.get('currentBoard');
- // In order to get current board info
- subManager.subscribe('board', this.boardId);
- board = Boards.findOne(this.boardId);
- // List where to insert card
- const list = $(Popup._getTopStack().openerElement).closest('.js-list');
- this.listId = Blaze.getData(list[0])._id;
- // Swimlane where to insert card
- const swimlane = $(Popup._getTopStack().openerElement).closest('.js-swimlane');
- this.swimlaneId = '';
- if (board.view === 'board-view-swimlanes')
- this.swimlaneId = Blaze.getData(swimlane[0])._id;
- else
- this.swimlaneId = Swimlanes.findOne({boardId: this.boardId})._id;
+ if (!this.isBoardTemplateSearch) {
+ this.boardId = Session.get('currentBoard');
+ // In order to get current board info
+ subManager.subscribe('board', this.boardId);
+ this.swimlaneId = '';
+ // Swimlane where to insert card
+ const swimlane = $(Popup._getTopStack().openerElement).parents('.js-swimlane');
+ if (Meteor.user().profile.boardView === 'board-view-swimlanes')
+ this.swimlaneId = Blaze.getData(swimlane[0])._id;
+ else
+ this.swimlaneId = Swimlanes.findOne({boardId: this.boardId})._id;
+ // List where to insert card
+ const list = $(Popup._getTopStack().openerElement).closest('.js-list');
+ this.listId = Blaze.getData(list[0])._id;
+ }
this.term = new ReactiveVar('');
},
@@ -545,6 +526,7 @@ BlazeComponent.extendComponent({
archived: false,
'members.userId': Meteor.userId(),
_id: {$ne: Session.get('currentBoard')},
+ type: 'board',
}, {
sort: ['title'],
});
@@ -556,7 +538,21 @@ BlazeComponent.extendComponent({
return [];
}
const board = Boards.findOne(this.selectedBoardId.get());
- return board.searchCards(this.term.get(), false);
+ if (!this.isTemplateSearch || this.isCardTemplateSearch) {
+ return board.searchCards(this.term.get(), false);
+ } else if (this.isListTemplateSearch) {
+ return board.searchLists(this.term.get());
+ } else if (this.isSwimlaneTemplateSearch) {
+ return board.searchSwimlanes(this.term.get());
+ } else if (this.isBoardTemplateSearch) {
+ const boards = board.searchBoards(this.term.get());
+ boards.forEach((board) => {
+ subManager.subscribe('board', board.linkedId);
+ });
+ return boards;
+ } else {
+ return [];
+ }
},
events() {
@@ -570,20 +566,99 @@ BlazeComponent.extendComponent({
this.term.set(evt.target.searchTerm.value);
},
'click .js-minicard'(evt) {
- // LINK CARD
- const card = Blaze.getData(evt.currentTarget);
- const _id = Cards.insert({
- title: card.title, //dummy
- listId: this.listId,
- swimlaneId: this.swimlaneId,
- boardId: this.boardId,
- sort: Lists.findOne(this.listId).cards().count(),
- type: 'cardType-linkedCard',
- linkedId: card.linkedId || card._id,
- });
- Filter.addException(_id);
+ // 0. Common
+ const title = $('.js-element-title').val().trim();
+ if (!title)
+ return;
+ const element = Blaze.getData(evt.currentTarget);
+ element.title = title;
+ let _id = '';
+ if (!this.isTemplateSearch || this.isCardTemplateSearch) {
+ // Card insertion
+ // 1. Common
+ element.sort = Lists.findOne(this.listId).cards().count();
+ // 1.A From template
+ if (this.isTemplateSearch) {
+ element.type = 'cardType-card';
+ element.linkedId = '';
+ _id = element.copy(this.boardId, this.swimlaneId, this.listId);
+ // 1.B Linked card
+ } else {
+ delete element._id;
+ element.type = 'cardType-linkedCard';
+ element.linkedId = element.linkedId || element._id;
+ _id = Cards.insert(element);
+ }
+ Filter.addException(_id);
+ // List insertion
+ } else if (this.isListTemplateSearch) {
+ element.sort = Swimlanes.findOne(this.swimlaneId).lists().count();
+ element.type = 'list';
+ _id = element.copy(this.boardId, this.swimlaneId);
+ } else if (this.isSwimlaneTemplateSearch) {
+ element.sort = Boards.findOne(this.boardId).swimlanes().count();
+ element.type = 'swimlalne';
+ _id = element.copy(this.boardId);
+ } else if (this.isBoardTemplateSearch) {
+ board = Boards.findOne(element.linkedId);
+ board.sort = Boards.find({archived: false}).count();
+ board.type = 'board';
+ board.title = element.title;
+ delete board.slug;
+ _id = board.copy();
+ }
Popup.close();
},
}];
},
-}).register('searchCardPopup');
+}).register('searchElementPopup');
+
+BlazeComponent.extendComponent({
+ onCreated() {
+ this.cardlimit = this.parentComponent().cardlimit;
+
+ this.listId = this.parentComponent().data()._id;
+ this.swimlaneId = '';
+
+ const boardView = Meteor.user().profile.boardView;
+ if (boardView === 'board-view-swimlanes')
+ this.swimlaneId = this.parentComponent().parentComponent().parentComponent().data()._id;
+ },
+
+ onRendered() {
+ this.spinner = this.find('.sk-spinner-list');
+ this.container = this.$(this.spinner).parents('.js-perfect-scrollbar')[0];
+
+ $(this.container).on(`scroll.spinner_${this.swimlaneId}_${this.listId}`, () => this.updateList());
+ $(window).on(`resize.spinner_${this.swimlaneId}_${this.listId}`, () => this.updateList());
+
+ this.updateList();
+ },
+
+ onDestroyed() {
+ $(this.container).off(`scroll.spinner_${this.swimlaneId}_${this.listId}`);
+ $(window).off(`resize.spinner_${this.swimlaneId}_${this.listId}`);
+ },
+
+ updateList() {
+ if (this.spinnerInView()) {
+ this.cardlimit.set(this.cardlimit.get() + InfiniteScrollIter);
+ window.requestIdleCallback(() => this.updateList());
+ }
+ },
+
+ spinnerInView() {
+ const parentViewHeight = this.container.clientHeight;
+ const bottomViewPosition = this.container.scrollTop + parentViewHeight;
+
+ const threshold = this.spinner.offsetTop;
+
+ // spinner deleted
+ if (!this.spinner.offsetTop) {
+ return false;
+ }
+
+ return bottomViewPosition > threshold;
+ },
+
+}).register('spinnerList');
diff --git a/client/components/lists/minilist.jade b/client/components/lists/minilist.jade
new file mode 100644
index 00000000..e34214c4
--- /dev/null
+++ b/client/components/lists/minilist.jade
@@ -0,0 +1,8 @@
+template(name="minilist")
+ .minicard(
+ class="minicard-{{colorClass}}")
+ .minicard-title
+ .handle
+ .fa.fa-arrows
+ +viewer
+ = title
diff --git a/client/components/main/editor.js b/client/components/main/editor.js
index 20ece562..88d8abf0 100755
--- a/client/components/main/editor.js
+++ b/client/components/main/editor.js
@@ -36,7 +36,10 @@ import sanitizeXss from 'xss';
const at = HTML.CharRef({html: '&commat;', str: '@'});
Blaze.Template.registerHelper('mentions', new Template('mentions', function() {
const view = this;
+ let content = Blaze.toHTML(view.templateContentBlock);
const currentBoard = Boards.findOne(Session.get('currentBoard'));
+ if (!currentBoard)
+ return HTML.Raw(sanitizeXss(content));
const knowedUsers = currentBoard.members.map((member) => {
const u = Users.findOne(member.userId);
if(u){
@@ -45,7 +48,6 @@ Blaze.Template.registerHelper('mentions', new Template('mentions', function() {
return member;
});
const mentionRegex = /\B@([\w.]*)/gi;
- let content = Blaze.toHTML(view.templateContentBlock);
let currentMention;
while ((currentMention = mentionRegex.exec(content)) !== null) {
diff --git a/client/components/main/header.jade b/client/components/main/header.jade
index e21ce096..75e84c0c 100644
--- a/client/components/main/header.jade
+++ b/client/components/main/header.jade
@@ -4,39 +4,38 @@ template(name="header")
list all starred boards with a link to go there. This is inspired by the
Reddit "subreddit" bar.
The first link goes to the boards page.
- unless isSandstorm
- if currentUser
- #header-quick-access(class=currentBoard.colorClass)
- if isMiniScreen
- ul
- li
- a(href="{{pathFor 'home'}}")
- span.fa.fa-home
+ if currentUser
+ #header-quick-access(class=currentBoard.colorClass)
+ if isMiniScreen
+ ul
+ li
+ a(href="{{pathFor 'home'}}")
+ span.fa.fa-home
- if currentList
- each currentBoard.lists
- li(class="{{#if $.Session.equals 'currentList' _id}}current{{/if}}")
- a.js-select-list
- = title
- #header-new-board-icon
- else
- ul
- li
- a(href="{{pathFor 'home'}}")
- span.fa.fa-home
- | {{_ 'all-boards'}}
- each currentUser.starredBoards
- li.separator -
- li(class="{{#if $.Session.equals 'currentBoard' _id}}current{{/if}}")
- a(href="{{pathFor 'board' id=_id slug=slug}}")
+ if currentList
+ each currentBoard.lists
+ li(class="{{#if $.Session.equals 'currentList' _id}}current{{/if}}")
+ a.js-select-list
= title
- else
- li.current {{_ 'quick-access-description'}}
+ #header-new-board-icon
+ else
+ ul
+ li
+ a(href="{{pathFor 'home'}}")
+ span.fa.fa-home
+ | {{_ 'all-boards'}}
+ each currentUser.starredBoards
+ li.separator -
+ li(class="{{#if $.Session.equals 'currentBoard' _id}}current{{/if}}")
+ a(href="{{pathFor 'board' id=_id slug=slug}}")
+ = title
+ else
+ li.current {{_ 'quick-access-description'}}
- a#header-new-board-icon.js-create-board
- i.fa.fa-plus(title="Create a new board")
+ a#header-new-board-icon.js-create-board
+ i.fa.fa-plus(title="Create a new board")
- +headerUserBar
+ +headerUserBar
#header(class=currentBoard.colorClass)
//-
@@ -46,19 +45,16 @@ template(name="header")
#header-main-bar(class="{{#if wrappedHeader}}wrapper{{/if}}")
+Template.dynamic(template=headerBar)
- unless hideLogo
+ //unless hideLogo
//-
On sandstorm, the logo shouldn't be clickable, because we only have one
page/document on it, and we don't want to see the home page containing
the list of all boards.
- if isSandstorm
- .wekan-logo
- img(src="{{pathFor '/wekan-logo-header.png'}}" alt="Wekan")
- else
- unless currentSetting.hideLogo
- a.wekan-logo(href="{{pathFor 'home'}}" title="{{_ 'header-logo-title'}}")
- img(src="{{pathFor '/wekan-logo-header.png'}}" alt="Wekan")
+
+ // unless currentSetting.hideLogo
+ // a.wekan-logo(href="{{pathFor 'home'}}" title="{{_ 'header-logo-title'}}")
+ // img(src="{{pathFor '/logo-header.png'}}" alt="")
if appIsOffline
+offlineWarning
diff --git a/client/components/main/layouts.jade b/client/components/main/layouts.jade
index a6115ec1..ac2e4bf3 100644
--- a/client/components/main/layouts.jade
+++ b/client/components/main/layouts.jade
@@ -1,5 +1,5 @@
head
- title Wekan
+ title
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")
@@ -7,24 +7,20 @@ head
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
packages.
- link(rel="shortcut icon" href="/public/wekan-favicon.png")
- link(rel="apple-touch-icon" href="/public/wekan-favicon.png")
- link(rel="mask-icon" href="/public/wekan-150.svg")
- link(rel="manifest" href="/public/wekan-manifest.json")
+ link(rel="shortcut icon" href="/wekan-favicon.png")
+ link(rel="apple-touch-icon" href="/wekan-favicon.png")
+ link(rel="mask-icon" href="/wekan-logo-150.svg")
+ link(rel="manifest" href="/wekan-manifest.json")
template(name="userFormsLayout")
section.auth-layout
- unless currentSetting.hideLogo
- h1.at-form-landing-logo
- img(src="{{pathFor '/wekan-logo.png'}}" alt="Wekan")
- if currentSetting.hideLogo
- h1
- br
- br
+ h1
+ br
+ br
section.auth-dialog
+Template.dynamic(template=content)
if currentSetting.displayAuthenticationMethod
- +connectionMethod
+ +connectionMethod(authenticationMethod=currentSetting.defaultAuthenticationMethod)
div.at-form-lang
select.select-lang.js-userform-set-language
each languages
diff --git a/client/components/settings/connectionMethod.jade b/client/components/settings/connectionMethod.jade
index ac4c8c64..d191929f 100644
--- a/client/components/settings/connectionMethod.jade
+++ b/client/components/settings/connectionMethod.jade
@@ -2,5 +2,8 @@ template(name='connectionMethod')
div.at-form-authentication
label {{_ 'authentication-method'}}
select.select-authentication
- each authentications
- option(value="{{value}}") {{_ value}}
+ each authentications
+ if isSelected value
+ option(value="{{value}}" selected) {{_ value}}
+ else
+ option(value="{{value}}") {{_ value}} \ No newline at end of file
diff --git a/client/components/settings/connectionMethod.js b/client/components/settings/connectionMethod.js
index 9fe8f382..db9da25f 100644
--- a/client/components/settings/connectionMethod.js
+++ b/client/components/settings/connectionMethod.js
@@ -31,4 +31,7 @@ Template.connectionMethod.helpers({
authentications() {
return Template.instance().authenticationMethods.get();
},
+ isSelected(match) {
+ return Template.instance().data.authenticationMethod === match;
+ },
});
diff --git a/client/components/settings/settingBody.jade b/client/components/settings/settingBody.jade
index 220dbb50..89911e09 100644
--- a/client/components/settings/settingBody.jade
+++ b/client/components/settings/settingBody.jade
@@ -134,7 +134,7 @@ template(name='announcementSettings')
template(name='layoutSettings')
ul#layout-setting.setting-detail
- li.layout-form
+ //li.layout-form
.title {{_ 'hide-logo'}}
.form-group.flex
input.form-control#hide-logo(type="radio" name="hideLogo" value="true" checked="{{#if currentSetting.hideLogo}}checked{{/if}}")
@@ -154,7 +154,7 @@ template(name='layoutSettings')
li.layout-form
.title {{_ 'custom-product-name'}}
.form-group
- input.form-control#product-name(type="text", placeholder="Wekan" value="{{currentSetting.productName}}")
+ input.form-control#product-name(type="text", placeholder="" value="{{currentSetting.productName}}")
li.layout-form
.title {{_ 'add-custom-html-after-body-start'}}
textarea#customHTMLafterBodyStart.form-control= currentSetting.customHTMLafterBodyStart
@@ -171,4 +171,4 @@ template(name='selectAuthenticationMethod')
if isSelected value
option(value="{{value}}" selected) {{_ value}}
else
- option(value="{{value}}") {{_ value}} \ No newline at end of file
+ option(value="{{value}}") {{_ value}}
diff --git a/client/components/settings/settingBody.js b/client/components/settings/settingBody.js
index 2f58d551..8279a092 100644
--- a/client/components/settings/settingBody.js
+++ b/client/components/settings/settingBody.js
@@ -90,7 +90,7 @@ BlazeComponent.extendComponent({
},
inviteThroughEmail() {
- const emails = $('#email-to-invite').val().trim().split('\n').join(',').split(',');
+ const emails = $('#email-to-invite').val().toLowerCase().trim().split('\n').join(',').split(',');
const boardsToInvite = [];
$('.js-toggle-board-choose .materialCheckBox.is-checked').each(function () {
boardsToInvite.push($(this).data('id'));
diff --git a/client/components/settings/settingBody.styl b/client/components/settings/settingBody.styl
index 7f8bd4c0..dbf91a6c 100644
--- a/client/components/settings/settingBody.styl
+++ b/client/components/settings/settingBody.styl
@@ -52,6 +52,10 @@
.main-body
padding: 0.1em 1em
+ -webkit-user-select: auto // Safari 3.1+
+ -moz-user-select: auto // Firefox 2+
+ -ms-user-select: auto // IE 10+
+ user-select: auto // Standard syntax
ul
li
diff --git a/client/components/settings/settingHeader.jade b/client/components/settings/settingHeader.jade
index c2d4db3a..221c1b79 100644
--- a/client/components/settings/settingHeader.jade
+++ b/client/components/settings/settingHeader.jade
@@ -4,22 +4,21 @@ template(name="settingHeaderBar")
.setting-header-btns.left
unless isMiniScreen
- unless isSandstorm
- if currentUser
- a.setting-header-btn.settings(href="{{pathFor 'setting'}}")
- i.fa(class="fa-cog")
- span {{_ 'settings'}}
+ if currentUser
+ a.setting-header-btn.settings(href="{{pathFor 'setting'}}")
+ i.fa(class="fa-cog")
+ span {{_ 'settings'}}
- a.setting-header-btn.people(href="{{pathFor 'people'}}")
- i.fa(class="fa-users")
- span {{_ 'people'}}
+ a.setting-header-btn.people(href="{{pathFor 'people'}}")
+ i.fa(class="fa-users")
+ span {{_ 'people'}}
- a.setting-header-btn.informations(href="{{pathFor 'information'}}")
- i.fa(class="fa-info-circle")
- span {{_ 'info'}}
+ a.setting-header-btn.informations(href="{{pathFor 'information'}}")
+ i.fa(class="fa-info-circle")
+ span {{_ 'info'}}
- else
- a.setting-header-btn.js-log-in(
- title="{{_ 'log-in'}}")
- i.fa.fa-sign-in
- span {{_ 'log-in'}}
+ else
+ a.setting-header-btn.js-log-in(
+ title="{{_ 'log-in'}}")
+ i.fa.fa-sign-in
+ span {{_ 'log-in'}}
diff --git a/client/components/sidebar/sidebar.jade b/client/components/sidebar/sidebar.jade
index ec88ce7e..4e4d355c 100644
--- a/client/components/sidebar/sidebar.jade
+++ b/client/components/sidebar/sidebar.jade
@@ -1,9 +1,9 @@
template(name="sidebar")
.board-sidebar.sidebar(class="{{#if isOpen}}is-open{{/if}}")
- a.sidebar-tongue.js-toggle-sidebar(
- class="{{#if isTongueHidden}}is-hidden{{/if}}",
- title="{{showTongueTitle}}")
- i.fa.fa-angle-left
+ //a.sidebar-tongue.js-toggle-sidebar(
+ // class="{{#if isTongueHidden}}is-hidden{{/if}}",
+ // title="{{showTongueTitle}}")
+ // i.fa.fa-navicon
.sidebar-shadow
.sidebar-content.sidebar-shortcuts
a.board-header-btn.js-shortcuts
@@ -11,7 +11,7 @@ template(name="sidebar")
span {{_ 'keyboard-shortcuts' }}
.sidebar-content.js-board-sidebar-content.js-perfect-scrollbar
a.hide-btn.js-hide-sidebar
- i.fa.fa-angle-right
+ i.fa.fa-navicon
unless isDefaultView
h2
a.fa.fa-chevron-left.js-back-home
@@ -34,6 +34,9 @@ template(name="membersWidget")
h3
i.fa.fa-user
| {{_ 'members'}}
+ a.board-header-btn.js-open-board-menu(title="{{_ 'boardMenuPopup-title'}}").right
+ i.board-header-btn-icon.fa.fa-cog
+
.board-widget-content
each currentBoard.activeMembers
+userAvatar(userId=this.userId showStatus=true)
@@ -53,6 +56,130 @@ template(name="membersWidget")
button.js-member-invite-accept.primary {{_ 'accept'}}
button.js-member-invite-decline {{_ 'decline'}}
+template(name="boardChangeColorPopup")
+ .board-backgrounds-list.clearfix
+ each backgroundColors
+ .board-background-select.js-select-background
+ span.background-box(class="board-color-{{this}}")
+ if isSelected
+ i.fa.fa-check
+
+template(name="boardSubtaskSettingsPopup")
+ form.board-subtask-settings
+ h3 {{_ 'show-parent-in-minicard'}}
+ a#prefix-with-full-path.flex.js-field-show-parent-in-minicard(class="{{#if $eq presentParentTask 'prefix-with-full-path'}}is-checked{{/if}}")
+ .materialCheckBox(class="{{#if $eq presentParentTask 'prefix-with-full-path'}}is-checked{{/if}}")
+ span {{_ 'prefix-with-full-path'}}
+ a#prefix-with-parent.flex.js-field-show-parent-in-minicard(class="{{#if $eq presentParentTask 'prefix-with-parent'}}is-checked{{/if}}")
+ .materialCheckBox(class="{{#if $eq presentParentTask 'prefix-with-parent'}}is-checked{{/if}}")
+ span {{_ 'prefix-with-parent'}}
+ a#subtext-with-full-path.flex.js-field-show-parent-in-minicard(class="{{#if $eq presentParentTask 'subtext-with-full-path'}}is-checked{{/if}}")
+ .materialCheckBox(class="{{#if $eq presentParentTask 'subtext-with-full-path'}}is-checked{{/if}}")
+ span {{_ 'subtext-with-full-path'}}
+ a#subtext-with-parent.flex.js-field-show-parent-in-minicard(class="{{#if $eq presentParentTask 'subtext-with-parent'}}is-checked{{/if}}")
+ .materialCheckBox(class="{{#if $eq presentParentTask 'subtext-with-parent'}}is-checked{{/if}}")
+ span {{_ 'subtext-with-parent'}}
+ a#no-parent.flex.js-field-show-parent-in-minicard(class="{{#if $eq presentParentTask 'no-parent'}}is-checked{{/if}}")
+ .materialCheckBox(class="{{#if $eq presentParentTask 'no-parent'}}is-checked{{/if}}")
+ span {{_ 'no-parent'}}
+ div
+ hr
+
+ div.check-div
+ a.flex.js-field-has-subtasks(class="{{#if allowsSubtasks}}is-checked{{/if}}")
+ .materialCheckBox(class="{{#if allowsSubtasks}}is-checked{{/if}}")
+ span {{_ 'show-subtasks-field'}}
+
+ label
+ | {{_ 'deposit-subtasks-board'}}
+ select.js-field-deposit-board(disabled="{{#unless allowsSubtasks}}disabled{{/unless}}")
+ each boards
+ if isBoardSelected
+ option(value=_id selected="selected") {{title}}
+ else
+ option(value=_id) {{title}}
+ if isNullBoardSelected
+ option(value='null' selected="selected") {{_ 'custom-field-dropdown-none'}}
+ else
+ option(value='null') {{_ 'custom-field-dropdown-none'}}
+ div
+ hr
+
+ label
+ | {{_ 'deposit-subtasks-list'}}
+ select.js-field-deposit-list(disabled="{{#unless hasLists}}disabled{{/unless}}")
+ each lists
+ if isListSelected
+ option(value=_id selected="selected") {{title}}
+ else
+ option(value=_id) {{title}}
+
+template(name="chooseBoardSource")
+ ul.pop-over-list
+ li
+ a(href="{{pathFor '/import/trello'}}") {{_ 'from-trello'}}
+ li
+ a(href="{{pathFor '/import/wekan'}}") {{_ 'from-wekan'}}
+
+template(name="archiveBoardPopup")
+ p {{_ 'close-board-pop'}}
+ button.js-confirm.negate.full(type="submit") {{_ 'archive'}}
+
+template(name="outgoingWebhooksPopup")
+ each integrations
+ form.integration-form
+ if title
+ h4 {{title}}
+ else
+ h4 {{_ 'no-name'}}
+ label
+ | URL
+ input.js-outgoing-webhooks-url(type="text" name="url" value=url)
+ input(type="hidden" value=_id name="id")
+ input.primary.wide(type="submit" value="{{_ 'save'}}")
+ form.integration-form
+ h4
+ | {{_ 'new-outgoing-webhook'}}
+ label
+ | URL
+ input.js-outgoing-webhooks-url(type="text" name="url" autofocus)
+ input.primary.wide(type="submit" value="{{_ 'save'}}")
+
+template(name="boardMenuPopup")
+ ul.pop-over-list
+ li: a.js-custom-fields {{_ 'custom-fields'}}
+ li: a.js-open-archives {{_ 'archived-items'}}
+ if currentUser.isBoardAdmin
+ li: a.js-change-board-color {{_ 'board-change-color'}}
+ //-
+ XXX Language should be handled by sandstorm, but for now display a
+ language selection link in the board menu. This link is normally present
+ in the header bar that is not displayed on sandstorm.
+ if isSandstorm
+ li: a.js-change-language {{_ 'language'}}
+ unless isSandstorm
+ if currentUser.isBoardAdmin
+ hr
+ ul.pop-over-list
+ li: a(href="{{exportUrl}}", download="{{exportFilename}}") {{_ 'export-board'}}
+ unless currentBoard.isTemplatesBoard
+ li: a.js-archive-board {{_ 'archive-board'}}
+ li: a.js-outgoing-webhooks {{_ 'outgoing-webhooks'}}
+ hr
+ ul.pop-over-list
+ li: a.js-subtask-settings {{_ 'subtask-settings'}}
+
+ if isSandstorm
+ hr
+ ul.pop-over-list
+ li: a(href="{{exportUrl}}", download="{{exportFilename}}") {{_ 'export-board'}}
+ li: a.js-import-board {{_ 'import-board-c'}}
+ li: a.js-archive-board {{_ 'archive-board'}}
+ li: a.js-outgoing-webhooks {{_ 'outgoing-webhooks'}}
+ hr
+ ul.pop-over-list
+ li: a.js-subtask-settings {{_ 'subtask-settings'}}
+
template(name="labelsWidget")
.board-widget.board-widget-labels
h3
@@ -83,17 +210,16 @@ template(name="memberPopup")
ul.pop-over-list
li
a.js-filter-member {{_ 'filter-cards'}}
- unless isSandstorm
- if currentUser.isBoardAdmin
- li
- a.js-change-role
- | {{_ 'change-permissions'}}
- span.quiet (#{memberType})
+ if currentUser.isBoardAdmin
li
- if $eq currentUser._id userId
- a.js-leave-member {{_ 'leave-board'}}
- else if currentUser.isBoardAdmin
- a.js-remove-member {{_ 'remove-from-board'}}
+ a.js-change-role
+ | {{_ 'change-permissions'}}
+ span.quiet (#{memberType})
+ li
+ if $eq currentUser._id userId
+ a.js-leave-member {{_ 'leave-board'}}
+ else if currentUser.isBoardAdmin
+ a.js-remove-member {{_ 'remove-from-board'}}
template(name="removeMemberPopup")
diff --git a/client/components/sidebar/sidebar.js b/client/components/sidebar/sidebar.js
index 83b12666..e8de3c96 100644
--- a/client/components/sidebar/sidebar.js
+++ b/client/components/sidebar/sidebar.js
@@ -142,6 +142,52 @@ Template.memberPopup.helpers({
},
});
+Template.boardMenuPopup.events({
+ 'click .js-rename-board': Popup.open('boardChangeTitle'),
+ 'click .js-custom-fields'() {
+ Sidebar.setView('customFields');
+ Popup.close();
+ },
+ 'click .js-open-archives'() {
+ Sidebar.setView('archives');
+ Popup.close();
+ },
+ 'click .js-change-board-color': Popup.open('boardChangeColor'),
+ 'click .js-change-language': Popup.open('changeLanguage'),
+ 'click .js-archive-board ': Popup.afterConfirm('archiveBoard', function() {
+ const currentBoard = Boards.findOne(Session.get('currentBoard'));
+ currentBoard.archive();
+ // XXX We should have some kind of notification on top of the page to
+ // confirm that the board was successfully archived.
+ FlowRouter.go('home');
+ }),
+ 'click .js-delete-board': Popup.afterConfirm('deleteBoard', function() {
+ const currentBoard = Boards.findOne(Session.get('currentBoard'));
+ Popup.close();
+ Boards.remove(currentBoard._id);
+ FlowRouter.go('home');
+ }),
+ 'click .js-outgoing-webhooks': Popup.open('outgoingWebhooks'),
+ 'click .js-import-board': Popup.open('chooseBoardSource'),
+ 'click .js-subtask-settings': Popup.open('boardSubtaskSettings'),
+});
+
+Template.boardMenuPopup.helpers({
+ exportUrl() {
+ const params = {
+ boardId: Session.get('currentBoard'),
+ };
+ const queryParams = {
+ authToken: Accounts._storedLoginToken(),
+ };
+ return FlowRouter.path('/api/boards/:boardId/export', params, queryParams);
+ },
+ exportFilename() {
+ const boardId = Session.get('currentBoard');
+ return `wekan-export-board-${boardId}.json`;
+ },
+});
+
Template.memberPopup.events({
'click .js-filter-member'() {
Filter.members.toggle(this.userId);
@@ -190,7 +236,14 @@ Template.membersWidget.helpers({
Template.membersWidget.events({
'click .js-member': Popup.open('member'),
+ 'click .js-open-board-menu': Popup.open('boardMenu'),
'click .js-manage-board-members': Popup.open('addMember'),
+ 'click .js-import': Popup.open('boardImportBoard'),
+ submit: this.onSubmit,
+ 'click .js-import-board': Popup.open('chooseBoardSource'),
+ 'click .js-open-archived-board'() {
+ Modal.open('archivedBoards');
+ },
'click .sandstorm-powerbox-request-identity'() {
window.sandstormRequestIdentity();
},
@@ -209,6 +262,59 @@ Template.membersWidget.events({
},
});
+BlazeComponent.extendComponent({
+ integrations() {
+ const boardId = Session.get('currentBoard');
+ return Integrations.find({ boardId: `${boardId}` }).fetch();
+ },
+
+ integration(id) {
+ const boardId = Session.get('currentBoard');
+ return Integrations.findOne({ _id: id, boardId: `${boardId}` });
+ },
+
+ events() {
+ return [{
+ 'submit'(evt) {
+ evt.preventDefault();
+ const url = evt.target.url.value;
+ const boardId = Session.get('currentBoard');
+ let id = null;
+ let integration = null;
+ if (evt.target.id) {
+ id = evt.target.id.value;
+ integration = this.integration(id);
+ if (url) {
+ Integrations.update(integration._id, {
+ $set: {
+ url: `${url}`,
+ },
+ });
+ } else {
+ Integrations.remove(integration._id);
+ }
+ } else if (url) {
+ Integrations.insert({
+ userId: Meteor.userId(),
+ enabled: true,
+ type: 'outgoing-webhooks',
+ url: `${url}`,
+ boardId: `${boardId}`,
+ activities: ['all'],
+ });
+ }
+ Popup.close();
+ },
+ }];
+ },
+}).register('outgoingWebhooksPopup');
+
+BlazeComponent.extendComponent({
+ template() {
+ return 'chooseBoardSource';
+ },
+}).register('chooseBoardSourcePopup');
+
Template.labelsWidget.events({
'click .js-label': Popup.open('editLabel'),
'click .js-add-label': Popup.open('createLabel'),
@@ -259,6 +365,124 @@ Template.membersWidget.onRendered(draggableMembersLabelsWidgets);
Template.labelsWidget.onRendered(draggableMembersLabelsWidgets);
BlazeComponent.extendComponent({
+ backgroundColors() {
+ return Boards.simpleSchema()._schema.color.allowedValues;
+ },
+
+ isSelected() {
+ const currentBoard = Boards.findOne(Session.get('currentBoard'));
+ return currentBoard.color === this.currentData().toString();
+ },
+
+ events() {
+ return [{
+ 'click .js-select-background'(evt) {
+ const currentBoard = Boards.findOne(Session.get('currentBoard'));
+ const newColor = this.currentData().toString();
+ currentBoard.setColor(newColor);
+ evt.preventDefault();
+ },
+ }];
+ },
+}).register('boardChangeColorPopup');
+
+BlazeComponent.extendComponent({
+ onCreated() {
+ this.currentBoard = Boards.findOne(Session.get('currentBoard'));
+ },
+
+ allowsSubtasks() {
+ return this.currentBoard.allowsSubtasks;
+ },
+
+ isBoardSelected() {
+ return this.currentBoard.subtasksDefaultBoardId === this.currentData()._id;
+ },
+
+ isNullBoardSelected() {
+ return (this.currentBoard.subtasksDefaultBoardId === null) || (this.currentBoard.subtasksDefaultBoardId === undefined);
+ },
+
+ boards() {
+ return Boards.find({
+ archived: false,
+ 'members.userId': Meteor.userId(),
+ }, {
+ sort: ['title'],
+ });
+ },
+
+ lists() {
+ return Lists.find({
+ boardId: this.currentBoard._id,
+ archived: false,
+ }, {
+ sort: ['title'],
+ });
+ },
+
+ hasLists() {
+ return this.lists().count() > 0;
+ },
+
+ isListSelected() {
+ return this.currentBoard.subtasksDefaultBoardId === this.currentData()._id;
+ },
+
+ presentParentTask() {
+ let result = this.currentBoard.presentParentTask;
+ if ((result === null) || (result === undefined)) {
+ result = 'no-parent';
+ }
+ return result;
+ },
+
+ events() {
+ return [{
+ 'click .js-field-has-subtasks'(evt) {
+ evt.preventDefault();
+ this.currentBoard.allowsSubtasks = !this.currentBoard.allowsSubtasks;
+ this.currentBoard.setAllowsSubtasks(this.currentBoard.allowsSubtasks);
+ $('.js-field-has-subtasks .materialCheckBox').toggleClass('is-checked', this.currentBoard.allowsSubtasks);
+ $('.js-field-has-subtasks').toggleClass('is-checked', this.currentBoard.allowsSubtasks);
+ $('.js-field-deposit-board').prop('disabled', !this.currentBoard.allowsSubtasks);
+ },
+ 'change .js-field-deposit-board'(evt) {
+ let value = evt.target.value;
+ if (value === 'null') {
+ value = null;
+ }
+ this.currentBoard.setSubtasksDefaultBoardId(value);
+ evt.preventDefault();
+ },
+ 'change .js-field-deposit-list'(evt) {
+ this.currentBoard.setSubtasksDefaultListId(evt.target.value);
+ evt.preventDefault();
+ },
+ 'click .js-field-show-parent-in-minicard'(evt) {
+ const value = evt.target.id || $(evt.target).parent()[0].id || $(evt.target).parent()[0].parent()[0].id;
+ const options = [
+ 'prefix-with-full-path',
+ 'prefix-with-parent',
+ 'subtext-with-full-path',
+ 'subtext-with-parent',
+ 'no-parent'];
+ options.forEach(function(element) {
+ if (element !== value) {
+ $(`#${element} .materialCheckBox`).toggleClass('is-checked', false);
+ $(`#${element}`).toggleClass('is-checked', false);
+ }
+ });
+ $(`#${value} .materialCheckBox`).toggleClass('is-checked', true);
+ $(`#${value}`).toggleClass('is-checked', true);
+ this.currentBoard.setPresentParentTask(value);
+ evt.preventDefault();
+ },
+ }];
+ },
+}).register('boardSubtaskSettingsPopup');
+
+BlazeComponent.extendComponent({
onCreated() {
this.error = new ReactiveVar('');
this.loading = new ReactiveVar(false);
diff --git a/client/components/sidebar/sidebarCustomFields.js b/client/components/sidebar/sidebarCustomFields.js
index ccc8ffb9..28af973b 100644
--- a/client/components/sidebar/sidebarCustomFields.js
+++ b/client/components/sidebar/sidebarCustomFields.js
@@ -2,7 +2,7 @@ BlazeComponent.extendComponent({
customFields() {
return CustomFields.find({
- boardId: Session.get('currentBoard'),
+ boardIds: {$in: [Session.get('currentBoard')]},
});
},
@@ -103,7 +103,6 @@ const CreateCustomFieldPopup = BlazeComponent.extendComponent({
evt.preventDefault();
const data = {
- boardId: Session.get('currentBoard'),
name: this.find('.js-field-name').value.trim(),
type: this.type.get(),
settings: this.getSettings(),
@@ -114,6 +113,7 @@ const CreateCustomFieldPopup = BlazeComponent.extendComponent({
// insert or update
if (!this.data()._id) {
+ data.boardIds = [Session.get('currentBoard')];
CustomFields.insert(data);
} else {
CustomFields.update(this.data()._id, {$set: data});
@@ -122,8 +122,16 @@ const CreateCustomFieldPopup = BlazeComponent.extendComponent({
Popup.back();
},
'click .js-delete-custom-field': Popup.afterConfirm('deleteCustomField', function() {
- const customFieldId = this._id;
- CustomFields.remove(customFieldId);
+ const customField = CustomFields.findOne(this._id);
+ if (customField.boardIds.length > 1) {
+ CustomFields.update(customField._id, {
+ $pull: {
+ boardIds: Session.get('currentBoard'),
+ },
+ });
+ } else {
+ CustomFields.remove(customField._id);
+ }
Popup.close();
}),
}];
diff --git a/client/components/swimlanes/miniswimlane.jade b/client/components/swimlanes/miniswimlane.jade
new file mode 100644
index 00000000..d4be8599
--- /dev/null
+++ b/client/components/swimlanes/miniswimlane.jade
@@ -0,0 +1,8 @@
+template(name="miniswimlane")
+ .minicard(
+ class="minicard-{{colorClass}}")
+ .minicard-title
+ .handle
+ .fa.fa-arrows
+ +viewer
+ = title
diff --git a/client/components/swimlanes/swimlaneHeader.jade b/client/components/swimlanes/swimlaneHeader.jade
index 33eb5731..de9621d5 100644
--- a/client/components/swimlanes/swimlaneHeader.jade
+++ b/client/components/swimlanes/swimlaneHeader.jade
@@ -1,15 +1,21 @@
template(name="swimlaneHeader")
.swimlane-header-wrap.js-swimlane-header(class='{{#if colorClass}}swimlane-{{colorClass}}{{/if}}')
- +inlinedForm
- +editSwimlaneTitleForm
+ if this.isTemplateContainer
+ +swimlaneFixedHeader(this)
else
- .swimlane-header(
- class="{{#if currentUser.isBoardMember}}js-open-inlined-form is-editable{{/if}}")
- = title
- .swimlane-header-menu
- unless currentUser.isCommentOnly
- a.fa.fa-plus.js-open-add-swimlane-menu.swimlane-header-plus-icon
- a.fa.fa-navicon.js-open-swimlane-menu
+ +inlinedForm
+ +editSwimlaneTitleForm
+ else
+ +swimlaneFixedHeader(this)
+
+template(name="swimlaneFixedHeader")
+ .swimlane-header(
+ class="{{#if currentUser.isBoardMember}}js-open-inlined-form is-editable{{/if}}")
+ = title
+ .swimlane-header-menu
+ unless currentUser.isCommentOnly
+ a.fa.fa-plus.js-open-add-swimlane-menu.swimlane-header-plus-icon
+ a.fa.fa-navicon.js-open-swimlane-menu
template(name="editSwimlaneTitleForm")
.list-composer
@@ -22,9 +28,10 @@ template(name="swimlaneActionPopup")
unless currentUser.isCommentOnly
ul.pop-over-list
li: a.js-set-swimlane-color {{_ 'select-color'}}
- hr
- ul.pop-over-list
- li: a.js-close-swimlane {{_ 'archive-swimlane'}}
+ unless this.isTemplateContainer
+ hr
+ ul.pop-over-list
+ li: a.js-close-swimlane {{_ 'archive-swimlane'}}
template(name="swimlaneAddPopup")
unless currentUser.isCommentOnly
@@ -33,6 +40,11 @@ template(name="swimlaneAddPopup")
autocomplete="off" autofocus)
.edit-controls.clearfix
button.primary.confirm(type="submit") {{_ 'add'}}
+ unless currentBoard.isTemplatesBoard
+ unless currentBoard.isTemplateBoard
+ span.quiet
+ | {{_ 'or'}}
+ a.js-swimlane-template {{_ 'template'}}
template(name="setSwimlaneColorPopup")
form.edit-label
diff --git a/client/components/swimlanes/swimlaneHeader.js b/client/components/swimlanes/swimlaneHeader.js
index 1004cb25..e7f3cc76 100644
--- a/client/components/swimlanes/swimlaneHeader.js
+++ b/client/components/swimlanes/swimlaneHeader.js
@@ -47,12 +47,14 @@ BlazeComponent.extendComponent({
const titleInput = this.find('.swimlane-name-input');
const title = titleInput.value.trim();
const sortValue = calculateIndexData(this.currentSwimlane, nextSwimlane, 1);
+ const swimlaneType = (currentBoard.isTemplatesBoard())?'template-swimlane':'swimlane';
if (title) {
Swimlanes.insert({
title,
boardId: Session.get('currentBoard'),
sort: sortValue.base,
+ type: swimlaneType,
});
titleInput.value = '';
@@ -63,6 +65,7 @@ BlazeComponent.extendComponent({
// with a minimum of interactions
Popup.close();
},
+ 'click .js-swimlane-template': Popup.open('searchElement'),
}];
},
}).register('swimlaneAddPopup');
diff --git a/client/components/swimlanes/swimlanes.jade b/client/components/swimlanes/swimlanes.jade
index 34177a02..c56834df 100644
--- a/client/components/swimlanes/swimlanes.jade
+++ b/client/components/swimlanes/swimlanes.jade
@@ -3,15 +3,15 @@ template(name="swimlane")
+swimlaneHeader
.swimlane.js-lists.js-swimlane
if isMiniScreen
- if currentList
+ if currentListIsInThisSwimlane _id
+list(currentList)
- else
- each currentBoard.lists
+ unless currentList
+ each lists
+miniList(this)
if currentUser.isBoardMember
+addListForm
else
- each currentBoard.lists
+ each lists
+list(this)
if currentCardIsInThisList _id ../_id
+cardDetails(currentCard)
@@ -24,12 +24,12 @@ template(name="listsGroup")
if currentList
+list(currentList)
else
- each currentBoard.lists
+ each lists
+miniList(this)
if currentUser.isBoardMember
+addListForm
else
- each currentBoard.lists
+ each lists
+list(this)
if currentCardIsInThisList _id null
+cardDetails(currentCard)
@@ -44,7 +44,11 @@ template(name="addListForm")
autocomplete="off" autofocus)
.edit-controls.clearfix
button.primary.confirm(type="submit") {{_ 'save'}}
- a.fa.fa-times-thin.js-close-inlined-form
+ unless currentBoard.isTemplatesBoard
+ unless currentBoard.isTemplateBoard
+ span.quiet
+ | {{_ 'or'}}
+ a.js-list-template {{_ 'template'}}
else
a.open-list-composer.js-open-inlined-form
i.fa.fa-plus
diff --git a/client/components/swimlanes/swimlanes.js b/client/components/swimlanes/swimlanes.js
index ce327f54..519b00d2 100644
--- a/client/components/swimlanes/swimlanes.js
+++ b/client/components/swimlanes/swimlanes.js
@@ -1,5 +1,10 @@
const { calculateIndex, enableClickOnTouch } = Utils;
+function currentListIsInThisSwimlane(swimlaneId) {
+ const currentList = Lists.findOne(Session.get('currentList'));
+ return currentList && (currentList.swimlaneId === swimlaneId || currentList.swimlaneId === '');
+}
+
function currentCardIsInThisList(listId, swimlaneId) {
const currentCard = Cards.findOne(Session.get('currentCard'));
const currentUser = Meteor.user();
@@ -114,6 +119,10 @@ BlazeComponent.extendComponent({
return currentCardIsInThisList(listId, swimlaneId);
},
+ currentListIsInThisSwimlane(swimlaneId) {
+ return currentListIsInThisSwimlane(swimlaneId);
+ },
+
events() {
return [{
// Click-and-drag action
@@ -153,6 +162,12 @@ BlazeComponent.extendComponent({
}).register('swimlane');
BlazeComponent.extendComponent({
+ onCreated() {
+ this.currentBoard = Boards.findOne(Session.get('currentBoard'));
+ this.isListTemplatesSwimlane = this.currentBoard.isTemplatesBoard() && this.currentData().isListTemplatesSwimlane();
+ this.currentSwimlane = this.currentData();
+ },
+
// Proxy
open() {
this.childComponents('inlinedForm')[0].open();
@@ -169,12 +184,15 @@ BlazeComponent.extendComponent({
title,
boardId: Session.get('currentBoard'),
sort: $('.list').length,
+ type: (this.isListTemplatesSwimlane)?'template-list':'list',
+ swimlaneId: (this.currentBoard.isTemplatesBoard())?this.currentSwimlane._id:'',
});
titleInput.value = '';
titleInput.focus();
}
},
+ 'click .js-list-template': Popup.open('searchElement'),
}];
},
}).register('addListForm');
diff --git a/client/components/users/userHeader.jade b/client/components/users/userHeader.jade
index b6e10d8a..c55b65c2 100644
--- a/client/components/users/userHeader.jade
+++ b/client/components/users/userHeader.jade
@@ -4,10 +4,11 @@ template(name="headerUserBar")
.header-user-bar-avatar
+userAvatar(userId=currentUser._id)
unless isMiniScreen
- if currentUser.profile.fullname
- = currentUser.profile.fullname
- else
- = currentUser.username
+ unless isSandstorm
+ if currentUser.profile.fullname
+ = currentUser.profile.fullname
+ else
+ = currentUser.username
template(name="memberMenuPopup")
ul.pop-over-list
@@ -15,13 +16,18 @@ template(name="memberMenuPopup")
li: a.js-edit-profile {{_ 'edit-profile'}}
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'}}
+ unless isSandstorm
+ li: a.js-change-password {{_ 'changePasswordPopup-title'}}
+ li: a.js-change-language {{_ 'changeLanguagePopup-title'}}
if currentUser.isAdmin
li: a.js-go-setting(href="{{pathFor 'setting'}}") {{_ 'admin-panel'}}
hr
ul.pop-over-list
- li: a.js-logout {{_ 'log-out'}}
+ li: a(href="{{pathFor 'board' id=templatesBoardId slug=templatesBoardSlug}}") {{_ 'templates'}}
+ unless isSandstorm
+ hr
+ ul.pop-over-list
+ li: a.js-logout {{_ 'log-out'}}
template(name="editProfilePopup")
form
diff --git a/client/components/users/userHeader.js b/client/components/users/userHeader.js
index 63cbb14f..6a2397a4 100644
--- a/client/components/users/userHeader.js
+++ b/client/components/users/userHeader.js
@@ -3,6 +3,15 @@ Template.headerUserBar.events({
'click .js-change-avatar': Popup.open('changeAvatar'),
});
+Template.memberMenuPopup.helpers({
+ templatesBoardId() {
+ return Meteor.user().getTemplatesBoardId();
+ },
+ templatesBoardSlug() {
+ return Meteor.user().getTemplatesBoardSlug();
+ },
+});
+
Template.memberMenuPopup.events({
'click .js-edit-profile': Popup.open('editProfile'),
'click .js-change-settings': Popup.open('changeSettings'),
diff --git a/client/lib/popup.js b/client/lib/popup.js
index 5b640f50..9abe48aa 100644
--- a/client/lib/popup.js
+++ b/client/lib/popup.js
@@ -184,7 +184,7 @@ window.Popup = new class {
// positives.
const title = TAPi18n.__(translationKey);
// when popup showed as full of small screen, we need a default header to clearly see [X] button
- const defaultTitle = Utils.isMiniScreen() ? 'Wekan' : false;
+ const defaultTitle = Utils.isMiniScreen() ? '' : false;
return title !== translationKey ? title : defaultTitle;
};
}
diff --git a/docker-compose.yml b/docker-compose.yml
index 869415a8..720d5c70 100644
--- a/docker-compose.yml
+++ b/docker-compose.yml
@@ -90,8 +90,8 @@ services:
wekandb:
#-------------------------------------------------------------------------------------
# ==== MONGODB AND METEOR VERSION ====
- # a) CURRENTLY BROKEN: For Wekan Meteor 1.8.x version at meteor-1.8 branch, use mongo 4.x
- # image: mongo:4.0.4
+ # a) For Wekan Meteor 1.8.x version at meteor-1.8 branch, use mongo 4.x
+ #image: mongo:4.0.4
# b) For Wekan Meteor 1.6.x version at master/devel/edge branches.
# Only for Snap and Sandstorm while they are not upgraded yet to Meteor 1.8.x
image: mongo:3.2.21
@@ -110,12 +110,12 @@ services:
wekan:
#-------------------------------------------------------------------------------------
# ==== MONGODB AND METEOR VERSION ====
- # a) CURRENTLY BROKEN: For Wekan Meteor 1.8.x version at meteor-1.8 branch,
+ # a) For Wekan Meteor 1.8.x version at meteor-1.8 branch,
# using https://quay.io/wekan/wekan automatic builds
- # image: quay.io/wekan/wekan:meteor-1.8
+ #image: quay.io/wekan/wekan:meteor-1.8
# b) For Wekan Meteor 1.6.x version at master/devel/edge branches.
# Only for Snap and Sandstorm while they are not upgraded yet to Meteor 1.8.x
- image: quay.io/wekan/wekan
+ image: quay.io/wekan/wekan:master
# c) Using specific Meteor 1.6.x version tag:
# image: quay.io/wekan/wekan:v1.95
# c) Using Docker Hub automatic builds https://hub.docker.com/r/wekanteam/wekan
@@ -169,8 +169,9 @@ services:
# For SSL in email, change smtp:// to smtps://
# NOTE: Special characters need to be url-encoded in MAIL_URL.
# You can encode those characters for example at: https://www.urlencoder.org
- - MAIL_URL=smtp://user:pass@mailserver.example.com:25/
- - MAIL_FROM='Example Wekan Support <support@example.com>'
+ #- MAIL_URL=smtp://user:pass@mailserver.example.com:25/
+ - MAIL_URL='smtp://<mail_url>:25/?ignoreTLS=true&tls={rejectUnauthorized:false}'
+ - MAIL_FROM='Wekan Notifications <noreply.wekan@mydomain.com>'
#---------------------------------------------------------------
# ==== OPTIONAL: MONGO OPLOG SETTINGS =====
# https://github.com/wekan/wekan-mongodb/issues/2#issuecomment-378343587
@@ -191,9 +192,12 @@ services:
# - MONGO_OPLOG_URL=mongodb://<username>:<password>@<mongoDbURL>/local?authSource=admin&replicaSet=rsWekan
#---------------------------------------------------------------
# ==== OPTIONAL: KADIRA PERFORMANCE MONITORING FOR METEOR ====
- # https://github.com/smeijer/kadira
+ # https://github.com/edemaine/kadira-compose
+ # https://github.com/meteor/meteor-apm-agent
# https://blog.meteor.com/kadira-apm-is-now-open-source-490469ffc85f
- # - export KADIRA_OPTIONS_ENDPOINT=http://127.0.0.1:11011
+ #- APM_OPTIONS_ENDPOINT=http://<kadira-ip>:11011
+ #- APM_APP_ID=
+ #- APM_APP_SECRET=
#---------------------------------------------------------------
# ==== OPTIONAL: LOGS AND STATS ====
# https://github.com/wekan/wekan/wiki/Logs
@@ -217,6 +221,20 @@ services:
# https://github.com/wekan/wekan-gogs
# If you disable Wekan API with false, Export Board does not work.
- WITH_API=true
+ #---------------------------------------------------------------
+ # ==== PASSWORD BRUTE FORCE PROTECTION ====
+ #https://atmospherejs.com/lucasantoniassi/accounts-lockout
+ #Defaults below. Uncomment to change. wekan/server/accounts-lockout.js
+ #- ACCOUNTS_LOCKOUT_KNOWN_USERS_FAILURES_BEFORE=3
+ #- ACCOUNTS_LOCKOUT_KNOWN_USERS_PERIOD=60
+ #- ACCOUNTS_LOCKOUT_KNOWN_USERS_FAILURE_WINDOW=15
+ #- ACCOUNTS_LOCKOUT_UNKNOWN_USERS_FAILURES_BERORE=3
+ #- ACCOUNTS_LOCKOUT_UNKNOWN_USERS_LOCKOUT_PERIOD=60
+ #- ACCOUNTS_LOCKOUT_UNKNOWN_USERS_FAILURE_WINDOW=15
+ #---------------------------------------------------------------
+ # ==== EMAIL NOTIFICATION TIMEOUT, ms =====
+ # Defaut: 30000 ms = 30s
+ #- EMAIL_NOTIFICATION_TIMEOUT=30000
#-----------------------------------------------------------------
# ==== CORS =====
# CORS: Set Access-Control-Allow-Origin header.
@@ -255,6 +273,8 @@ services:
# 2) Configure the environment variables. This differs slightly
# by installation type, but make sure you have the following:
#- OAUTH2_ENABLED=true
+ # OAuth2 login style: popup or redirect.
+ #- OAUTH2_LOGIN_STYLE=redirect
# Application GUID captured during app registration:
#- OAUTH2_CLIENT_ID=xxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx
# Secret key generated during app registration:
@@ -275,6 +295,8 @@ services:
# ==== OAUTH2 KEYCLOAK ====
# https://github.com/wekan/wekan/wiki/Keycloak <== MAPPING INFO, REQUIRED
#- OAUTH2_ENABLED=true
+ # OAuth2 login style: popup or redirect.
+ #- OAUTH2_LOGIN_STYLE=redirect
#- OAUTH2_CLIENT_ID=<Keycloak create Client ID>
#- OAUTH2_SERVER_URL=<Keycloak server name>/auth
#- OAUTH2_AUTH_ENDPOINT=/realms/<keycloak realm>/protocol/openid-connect/auth
@@ -288,6 +310,8 @@ services:
# Enable the OAuth2 connection
#- OAUTH2_ENABLED=true
# OAuth2 docs: https://github.com/wekan/wekan/wiki/OAuth2
+ # OAuth2 login style: popup or redirect.
+ #- OAUTH2_LOGIN_STYLE=redirect
# OAuth2 Client ID.
#- OAUTH2_CLIENT_ID=abcde12345
# OAuth2 Secret.
@@ -309,175 +333,150 @@ services:
# OAuth2 Email Mapping
#- OAUTH2_EMAIL_MAP=
#-----------------------------------------------------------------
- # ==== LDAP ====
+ # ==== LDAP: UNCOMMENT ALL TO ENABLE LDAP ====
# https://github.com/wekan/wekan/wiki/LDAP
# For Snap settings see https://github.com/wekan/wekan-snap/wiki/Supported-settings-keys
# Most settings work both on Snap and Docker below.
# Note: Do not add single quotes '' to variables. Having spaces still works without quotes where required.
#
- # DEFAULT_AUTHENTICATION_METHOD : The default authentication method used if a user does not exist to create and authenticate. Can be set as ldap.
- # example : DEFAULT_AUTHENTICATION_METHOD=ldap
- #- DEFAULT_AUTHENTICATION_METHOD=
+ # The default authentication method used if a user does not exist to create and authenticate. Can be set as ldap.
+ #- DEFAULT_AUTHENTICATION_METHOD=ldap
#
- # LDAP_ENABLE : Enable or not the connection by the LDAP
- # example : LDAP_ENABLE=true
- #- LDAP_ENABLE=false
+ # Enable or not the connection by the LDAP
+ #- LDAP_ENABLE=true
#
- # LDAP_PORT : The port of the LDAP server
- # example : LDAP_PORT=389
+ # The port of the LDAP server
#- LDAP_PORT=389
#
- # LDAP_HOST : The host server for the LDAP server
- # example : LDAP_HOST=localhost
- #- LDAP_HOST=
+ # The host server for the LDAP server
+ #- LDAP_HOST=localhost
#
- # LDAP_BASEDN : The base DN for the LDAP Tree
- # example : LDAP_BASEDN=ou=user,dc=example,dc=org
- #- LDAP_BASEDN=
+ # The base DN for the LDAP Tree
+ #- LDAP_BASEDN=ou=user,dc=example,dc=org
#
- # LDAP_LOGIN_FALLBACK : Fallback on the default authentication method
- # example : LDAP_LOGIN_FALLBACK=true
+ # Fallback on the default authentication method
#- LDAP_LOGIN_FALLBACK=false
#
- # LDAP_RECONNECT : Reconnect to the server if the connection is lost
- # example : LDAP_RECONNECT=false
+ # Reconnect to the server if the connection is lost
#- LDAP_RECONNECT=true
#
- # LDAP_TIMEOUT : Overall timeout, in milliseconds
- # example : LDAP_TIMEOUT=12345
+ # Overall timeout, in milliseconds
#- LDAP_TIMEOUT=10000
#
- # LDAP_IDLE_TIMEOUT : Specifies the timeout for idle LDAP connections in milliseconds
- # example : LDAP_IDLE_TIMEOUT=12345
+ # Specifies the timeout for idle LDAP connections in milliseconds
#- LDAP_IDLE_TIMEOUT=10000
#
- # LDAP_CONNECT_TIMEOUT : Connection timeout, in milliseconds
- # example : LDAP_CONNECT_TIMEOUT=12345
+ # Connection timeout, in milliseconds
#- LDAP_CONNECT_TIMEOUT=10000
#
- # LDAP_AUTHENTIFICATION : If the LDAP needs a user account to search
- # example : LDAP_AUTHENTIFICATION=true
- #- LDAP_AUTHENTIFICATION=false
+ # If the LDAP needs a user account to search
+ #- LDAP_AUTHENTIFICATION=true
#
- # LDAP_AUTHENTIFICATION_USERDN : The search user DN
- # example : LDAP_AUTHENTIFICATION_USERDN=cn=admin,dc=example,dc=org
- #- LDAP_AUTHENTIFICATION_USERDN=
+ # The search user DN
+ #- LDAP_AUTHENTIFICATION_USERDN=cn=wekan_adm,ou=serviceaccounts,ou=admin,ou=prod,dc=mydomain,dc=com
#
- # LDAP_AUTHENTIFICATION_PASSWORD : The password for the search user
- # example : AUTHENTIFICATION_PASSWORD=admin
- #- LDAP_AUTHENTIFICATION_PASSWORD=
+ # The password for the search user
+ #- LDAP_AUTHENTIFICATION_PASSWORD=pwd
#
- # LDAP_LOG_ENABLED : Enable logs for the module
- # example : LDAP_LOG_ENABLED=true
- #- LDAP_LOG_ENABLED=false
+ # Enable logs for the module
+ #- LDAP_LOG_ENABLED=true
#
- # LDAP_BACKGROUND_SYNC : If the sync of the users should be done in the background
- # example : LDAP_BACKGROUND_SYNC=true
+ # If the sync of the users should be done in the background
#- LDAP_BACKGROUND_SYNC=false
#
- # LDAP_BACKGROUND_SYNC_INTERVAL : At which interval does the background task sync in milliseconds
- # example : LDAP_BACKGROUND_SYNC_INTERVAL=12345
+ # At which interval does the background task sync in milliseconds
#- LDAP_BACKGROUND_SYNC_INTERVAL=100
#
- # LDAP_BACKGROUND_SYNC_KEEP_EXISTANT_USERS_UPDATED :
- # example : LDAP_BACKGROUND_SYNC_KEEP_EXISTANT_USERS_UPDATED=true
#- LDAP_BACKGROUND_SYNC_KEEP_EXISTANT_USERS_UPDATED=false
#
- # LDAP_BACKGROUND_SYNC_IMPORT_NEW_USERS :
- # example : LDAP_BACKGROUND_SYNC_IMPORT_NEW_USERS=true
#- LDAP_BACKGROUND_SYNC_IMPORT_NEW_USERS=false
#
- # LDAP_ENCRYPTION : If using LDAPS
- # example : LDAP_ENCRYPTION=ssl
+ # If using LDAPS: LDAP_ENCRYPTION=ssl
#- LDAP_ENCRYPTION=false
#
- # LDAP_CA_CERT : The certification for the LDAPS server. Certificate needs to be included in this docker-compose.yml file.
- # example : LDAP_CA_CERT=-----BEGIN CERTIFICATE-----MIIE+zCCA+OgAwIBAgIkAhwR/6TVLmdRY6hHxvUFWc0+Enmu/Hu6cj+G2FIdAgIC...-----END CERTIFICATE-----
- #- LDAP_CA_CERT=
+ # The certification for the LDAPS server. Certificate needs to be included in this docker-compose.yml file.
+ #- LDAP_CA_CERT=-----BEGIN CERTIFICATE-----MIIE+G2FIdAgIC...-----END CERTIFICATE-----
#
- # LDAP_REJECT_UNAUTHORIZED : Reject Unauthorized Certificate
- # example : LDAP_REJECT_UNAUTHORIZED=true
+ # Reject Unauthorized Certificate
#- LDAP_REJECT_UNAUTHORIZED=false
#
- # LDAP_USER_SEARCH_FILTER : Optional extra LDAP filters. Don't forget the outmost enclosing parentheses if needed
- # example : LDAP_USER_SEARCH_FILTER=
+ # Optional extra LDAP filters. Don't forget the outmost enclosing parentheses if needed
#- LDAP_USER_SEARCH_FILTER=
#
- # LDAP_USER_SEARCH_SCOPE : base (search only in the provided DN), one (search only in the provided DN and one level deep), or sub (search the whole subtree)
- # example : LDAP_USER_SEARCH_SCOPE=one
- #- LDAP_USER_SEARCH_SCOPE=
+ # base (search only in the provided DN), one (search only in the provided DN and one level deep), or sub (search the whole subtree)
+ #- LDAP_USER_SEARCH_SCOPE=one
#
- # LDAP_USER_SEARCH_FIELD : Which field is used to find the user
- # example : LDAP_USER_SEARCH_FIELD=uid
- #- LDAP_USER_SEARCH_FIELD=
+ # Which field is used to find the user, like uid / sAMAccountName
+ #- LDAP_USER_SEARCH_FIELD=sAMAccountName
#
- # LDAP_SEARCH_PAGE_SIZE : Used for pagination (0=unlimited)
- # example : LDAP_SEARCH_PAGE_SIZE=12345
+ # Used for pagination (0=unlimited)
#- LDAP_SEARCH_PAGE_SIZE=0
#
- # LDAP_SEARCH_SIZE_LIMIT : The limit number of entries (0=unlimited)
- # example : LDAP_SEARCH_SIZE_LIMIT=12345
+ # The limit number of entries (0=unlimited)
#- LDAP_SEARCH_SIZE_LIMIT=0
#
- # LDAP_GROUP_FILTER_ENABLE : Enable group filtering
- # example : LDAP_GROUP_FILTER_ENABLE=true
+ # Enable group filtering
#- LDAP_GROUP_FILTER_ENABLE=false
#
- # LDAP_GROUP_FILTER_OBJECTCLASS : The object class for filtering
- # example : LDAP_GROUP_FILTER_OBJECTCLASS=group
+ # The object class for filtering. Example: group
#- LDAP_GROUP_FILTER_OBJECTCLASS=
#
- # LDAP_GROUP_FILTER_GROUP_ID_ATTRIBUTE :
- # example :
#- LDAP_GROUP_FILTER_GROUP_ID_ATTRIBUTE=
#
- # LDAP_GROUP_FILTER_GROUP_MEMBER_ATTRIBUTE :
- # example :
#- LDAP_GROUP_FILTER_GROUP_MEMBER_ATTRIBUTE=
#
- # LDAP_GROUP_FILTER_GROUP_MEMBER_FORMAT :
- # example :
#- LDAP_GROUP_FILTER_GROUP_MEMBER_FORMAT=
#
- # LDAP_GROUP_FILTER_GROUP_NAME :
- # example :
#- LDAP_GROUP_FILTER_GROUP_NAME=
#
- # LDAP_UNIQUE_IDENTIFIER_FIELD : This field is sometimes class GUID (Globally Unique Identifier)
- # example : LDAP_UNIQUE_IDENTIFIER_FIELD=guid
+ # LDAP_UNIQUE_IDENTIFIER_FIELD : This field is sometimes class GUID (Globally Unique Identifier). Example: guid
#- LDAP_UNIQUE_IDENTIFIER_FIELD=
#
# LDAP_UTF8_NAMES_SLUGIFY : Convert the username to utf8
- # example : LDAP_UTF8_NAMES_SLUGIFY=false
#- LDAP_UTF8_NAMES_SLUGIFY=true
#
- # LDAP_USERNAME_FIELD : Which field contains the ldap username
- # example : LDAP_USERNAME_FIELD=username
- #- LDAP_USERNAME_FIELD=
+ # LDAP_USERNAME_FIELD : Which field contains the ldap username. username / sAMAccountName
+ #- LDAP_USERNAME_FIELD=sAMAccountName
#
- # LDAP_FULLNAME_FIELD : Which field contains the ldap fullname
- # example : LDAP_FULLNAME_FIELD=fullname
- #- LDAP_FULLNAME_FIELD=
+ # LDAP_FULLNAME_FIELD : Which field contains the ldap fullname. fullname / sAMAccountName
+ #- LDAP_FULLNAME_FIELD=fullname
#
- # LDAP_MERGE_EXISTING_USERS :
- # example : LDAP_MERGE_EXISTING_USERS=true
#- LDAP_MERGE_EXISTING_USERS=false
+ #
+ # Allow existing account matching by e-mail address when username does not match
+ #- LDAP_EMAIL_MATCH_ENABLE=true
+ #
+ # LDAP_EMAIL_MATCH_REQUIRE : require existing account matching by e-mail address when username does match
+ #- LDAP_EMAIL_MATCH_REQUIRE=true
+ #
+ # LDAP_EMAIL_MATCH_VERIFIED : require existing account email address to be verified for matching
+ #- LDAP_EMAIL_MATCH_VERIFIED=true
+ #
+ # LDAP_EMAIL_FIELD : which field contains the LDAP e-mail address
+ #- LDAP_EMAIL_FIELD=mail
#-----------------------------------------------------------------
- # LDAP_SYNC_USER_DATA :
- # example : LDAP_SYNC_USER_DATA=true
#- LDAP_SYNC_USER_DATA=false
#
- # LDAP_SYNC_USER_DATA_FIELDMAP :
- # example : LDAP_SYNC_USER_DATA_FIELDMAP={"cn":"name", "mail":"email"}
- #- LDAP_SYNC_USER_DATA_FIELDMAP=
+ #- LDAP_SYNC_USER_DATA_FIELDMAP={"cn":"name", "mail":"email"}
#
- # LDAP_SYNC_GROUP_ROLES :
- # example :
- #- LDAP_SYNC_GROUP_ROLES=
+ #- LDAP_SYNC_GROUP_ROLES=''
#
- # LDAP_DEFAULT_DOMAIN : The default domain of the ldap it is used to create email if the field is not map correctly with the LDAP_SYNC_USER_DATA_FIELDMAP
+ # The default domain of the ldap it is used to create email if the field is not map correctly with the LDAP_SYNC_USER_DATA_FIELDMAP
# example :
- #- LDAP_DEFAULT_DOMAIN=
+ #- LDAP_DEFAULT_DOMAIN=mydomain.com
+ #
+ # Enable/Disable syncing of admin status based on ldap groups:
+ #- LDAP_SYNC_ADMIN_STATUS=true
+ #
+ # Comma separated list of admin group names to sync.
+ #- LDAP_SYNC_ADMIN_GROUPS=group1,group2
+ #---------------------------------------------------------------------
+ # Login to LDAP automatically with HTTP header.
+ # In below example for siteminder, at right side of = is header name.
+ #- HEADER_LOGIN_ID=BNPPUID
+ #- HEADER_LOGIN_FIRSTNAME=BNPPFIRSTNAME
+ #- HEADER_LOGIN_LASTNAME=BNPPLASTNAME
+ #- HEADER_LOGIN_EMAIL=BNPPEMAILADDRESS
#---------------------------------------------------------------------
# ==== LOGOUT TIMER, probably does not work yet ====
# LOGOUT_WITH_TIMER : Enables or not the option logout with timer
@@ -539,9 +538,15 @@ services:
# - 80:80
# - 443:443
# volumes:
-# - ./nginx/ssl:/etc/nginx/ssl/
-# - ./nginx/nginx.conf:/etc/nginx/nginx.conf
-
+# - ./nginx/ssl:/etc/nginx/ssl/:ro
+# - ./nginx/nginx.conf:/etc/nginx/nginx.conf:ro
+## Alternative volume config:
+## volumes:
+## - ./nginx/nginx.conf:/etc/nginx/conf.d/default.conf:ro
+## - ./nginx/ssl/ssl.conf:/etc/nginx/conf.d/ssl/ssl.conf:ro
+## - ./nginx/ssl/testvm-ehu.crt:/etc/nginx/conf.d/ssl/certs/mycert.crt:ro
+## - ./nginx/ssl/testvm-ehu.key:/etc/nginx/conf.d/ssl/certs/mykey.key:ro
+## - ./nginx/ssl/pphrase:/etc/nginx/conf.d/ssl/pphrase:ro
volumes:
wekan-db:
diff --git a/helm/wekan/.helmignore b/helm/wekan/.helmignore
new file mode 100644
index 00000000..7c04072e
--- /dev/null
+++ b/helm/wekan/.helmignore
@@ -0,0 +1,22 @@
+# Patterns to ignore when building packages.
+# This supports shell glob matching, relative path matching, and
+# negation (prefixed with !). Only one pattern per line.
+.DS_Store
+# Common VCS dirs
+.git/
+.gitignore
+.bzr/
+.bzrignore
+.hg/
+.hgignore
+.svn/
+# Common backup files
+*.swp
+*.bak
+*.tmp
+*~
+# Various IDEs
+.project
+.idea/
+*.tmproj
+OWNERS
diff --git a/helm/wekan/Chart.yaml b/helm/wekan/Chart.yaml
new file mode 100644
index 00000000..ffd164bf
--- /dev/null
+++ b/helm/wekan/Chart.yaml
@@ -0,0 +1,13 @@
+name: wekan
+version: 1.0.0
+appVersion: 2.x.x
+kubeVersion: "^1.8.0-0"
+description: Open Source kanban
+home: https://wekan.github.io/
+icon: https://wekan.github.io/wekan-logo.svg
+sources:
+ - https://github.com/wekan/wekan
+maintainers:
+ - name: technotaff
+ email: github@randall.cc
+engine: gotpl
diff --git a/helm/wekan/OWNERS b/helm/wekan/OWNERS
new file mode 100644
index 00000000..08f7d5dd
--- /dev/null
+++ b/helm/wekan/OWNERS
@@ -0,0 +1,4 @@
+approvers:
+- technotaff
+reviewers:
+- technotaff
diff --git a/helm/wekan/README.md b/helm/wekan/README.md
new file mode 100644
index 00000000..d3af930c
--- /dev/null
+++ b/helm/wekan/README.md
@@ -0,0 +1,58 @@
+# Helm Chart for Wekan
+
+## Features
+
+o Uses a MongoDB replica set by default - this allows fault-tolerant
+ and scalable MongoDB deployment (or just set the replicas to 1 for
+ a single server install)
+
+o Optional Horizontal Pod Autoscaler (HPA), so that your Wekan pods
+ will scale automatically with increased CPU load.
+
+## The configurable values (values.yaml)
+
+Scaling Wekan:
+
+```yaml
+## Configuration for wekan component
+##
+
+replicaCount: 1
+```
+**replicaCount** Will set the initial number of replicas for the Wekan pod (and container)
+
+```yaml
+## Configure an horizontal pod autoscaler
+##
+autoscaling:
+ enabled: true
+ config:
+ minReplicas: 1
+ maxReplicas: 16
+ ## Note: when setting this, a `resources.request.cpu` is required. You
+ ## likely want to set it to `1` or some lower value.
+ ##
+ targetCPUUtilizationPercentage: 80
+```
+This section (if *enabled* is set to **true**) will enable the Kubernetes Horizontal Pod Autoscaler (HPA).
+
+**minReplicas:** this is the minimum number of pods to scale down to (We recommend setting this to the same value as **replicaCount**).
+
+**maxReplicas:** this is the maximum number of pods to scale up to.
+
+**targetCPUUtilizationPercentage:** This is the CPU at which the HPA will scale-out the number of Wekan pods.
+
+```yaml
+mongodb-replicaset:
+ enabled: true
+ replicas: 3
+ replicaSetName: rs0
+ securityContext:
+ runAsUser: 1000
+ fsGroup: 1000
+ runAsNonRoot: true
+```
+
+This section controls the scale of the MongoDB redundant Replica Set.
+
+**replicas:** This is the number of MongoDB instances to include in the set. You can set this to 1 for a single server - this will still allow you to scale-up later with a helm upgrade.
diff --git a/helm/wekan/charts/.gitkeep b/helm/wekan/charts/.gitkeep
new file mode 100644
index 00000000..8b137891
--- /dev/null
+++ b/helm/wekan/charts/.gitkeep
@@ -0,0 +1 @@
+
diff --git a/helm/wekan/requirements.yaml b/helm/wekan/requirements.yaml
new file mode 100644
index 00000000..e2492a91
--- /dev/null
+++ b/helm/wekan/requirements.yaml
@@ -0,0 +1,5 @@
+dependencies:
+- name: mongodb-replicaset
+ version: 3.6.x
+ repository: "https://kubernetes-charts.storage.googleapis.com/"
+ condition: mongodb-replicaset.enabled
diff --git a/helm/wekan/templates/NOTES.txt b/helm/wekan/templates/NOTES.txt
new file mode 100644
index 00000000..8aa2e27b
--- /dev/null
+++ b/helm/wekan/templates/NOTES.txt
@@ -0,0 +1,19 @@
+1. Get the application URL by running these commands:
+{{- if .Values.ingress.enabled }}
+{{- range .Values.ingress.hosts }}
+ http{{ if $.Values.ingress.tls }}s{{ end }}://{{ . }}{{ $.Values.ingress.path }}
+{{- end }}
+{{- else if contains "NodePort" .Values.service.type }}
+ export NODE_PORT=$(kubectl get --namespace {{ .Release.Namespace }} -o jsonpath="{.spec.ports[0].nodePort}" services {{ template "wekan.fullname" . }})
+ export NODE_IP=$(kubectl get nodes --namespace {{ .Release.Namespace }} -o jsonpath="{.items[0].status.addresses[0].address}")
+ echo http://$NODE_IP:$NODE_PORT
+{{- else if contains "LoadBalancer" .Values.service.type }}
+ NOTE: It may take a few minutes for the LoadBalancer IP to be available.
+ You can watch the status of by running 'kubectl get svc -w {{ template "wekan.fullname" . }}'
+ export SERVICE_IP=$(kubectl get svc --namespace {{ .Release.Namespace }} {{ template "wekan.fullname" . }} -o jsonpath='{.status.loadBalancer.ingress[0].ip}')
+ echo http://$SERVICE_IP:{{ .Values.service.port }}
+{{- else if contains "ClusterIP" .Values.service.type }}
+ export POD_NAME=$(kubectl get pods --namespace {{ .Release.Namespace }} -l "app={{ template "wekan.name" . }},release={{ .Release.Name }}" -o jsonpath="{.items[0].metadata.name}")
+ echo "Visit http://127.0.0.1:8080 to use your application"
+ kubectl port-forward $POD_NAME 8080:8080
+{{- end }}
diff --git a/helm/wekan/templates/_helpers.tpl b/helm/wekan/templates/_helpers.tpl
new file mode 100644
index 00000000..68f71ef7
--- /dev/null
+++ b/helm/wekan/templates/_helpers.tpl
@@ -0,0 +1,82 @@
+{{/* vim: set filetype=mustache: */}}
+{{/*
+Expand the name of the chart.
+*/}}
+{{- define "wekan.name" -}}
+{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" -}}
+{{- end -}}
+
+{{/*
+Create a default fully qualified app name.
+We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec).
+If release name contains chart name it will be used as a full name.
+*/}}
+{{- define "wekan.fullname" -}}
+{{- if .Values.fullnameOverride -}}
+{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" -}}
+{{- else -}}
+{{- $name := default .Chart.Name .Values.nameOverride -}}
+{{- if contains $name .Release.Name -}}
+{{- .Release.Name | trunc 63 | trimSuffix "-" -}}
+{{- else -}}
+{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" -}}
+{{- end -}}
+{{- end -}}
+{{- end -}}
+
+{{/*
+Create a default fully qualified name for the wekan data app.
+We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec).
+*/}}
+{{- define "wekan.localdata.fullname" -}}
+{{- if .Values.localdata.fullnameOverride -}}
+{{- .Values.localdata.fullnameOverride | trunc 63 | trimSuffix "-" -}}
+{{- else -}}
+{{- $name := default .Chart.Name .Values.nameOverride -}}
+{{- if contains $name .Release.Name -}}
+{{- printf "%s-localdata" .Release.Name | trunc 63 | trimSuffix "-" -}}
+{{- else -}}
+{{- printf "%s-%s-localdata" .Release.Name $name | trunc 63 | trimSuffix "-" -}}
+{{- end -}}
+{{- end -}}
+{{- end -}}
+{{/*
+Create chart name and version as used by the chart label.
+*/}}
+{{- define "wekan.chart" -}}
+{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" -}}
+{{- end -}}
+
+{{/*
+Create the name of the service account to use for the api component
+*/}}
+{{- define "wekan.serviceAccountName" -}}
+{{- if .Values.serviceAccounts.create -}}
+ {{ default (include "wekan.fullname" .) .Values.serviceAccounts.name }}
+{{- else -}}
+ {{ default "default" .Values.serviceAccounts.name }}
+{{- end -}}
+{{- end -}}
+
+{{/*
+Create a default fully qualified mongodb-replicaset name.
+We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec).
+*/}}
+{{- define "wekan.mongodb-replicaset.fullname" -}}
+{{- $name := default "mongodb-replicaset" (index .Values "mongodb-replicaset" "nameOverride") -}}
+{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" -}}
+{{- end -}}
+
+{{/*
+Create the MongoDB URL. If MongoDB is installed as part of this chart, use k8s service discovery,
+else use user-provided URL.
+*/}}
+{{- define "mongodb-replicaset.url" -}}
+{{- if (index .Values "mongodb-replicaset" "enabled") -}}
+{{- $count := (int (index .Values "mongodb-replicaset" "replicas")) -}}
+{{- $release := .Release.Name -}}
+mongodb://{{- range $v := until $count }}{{ $release }}-mongodb-replicaset-{{ $v }}.{{ $release }}-mongodb-replicaset:27017{{ if ne $v (sub $count 1) }},{{- end -}}{{- end -}}?replicaSet={{ index .Values "mongodb-replicaset" "replicaSetName" }}
+{{- else -}}
+{{- index .Values "mongodb-replicaset" "url" -}}
+{{- end -}}
+{{- end -}}
diff --git a/helm/wekan/templates/deployment.yaml b/helm/wekan/templates/deployment.yaml
new file mode 100644
index 00000000..e5bf2018
--- /dev/null
+++ b/helm/wekan/templates/deployment.yaml
@@ -0,0 +1,58 @@
+apiVersion: apps/v1
+kind: Deployment
+metadata:
+ name: {{ template "wekan.fullname" . }}
+ labels:
+ app: {{ template "wekan.name" . }}
+ chart: {{ template "wekan.chart" . }}
+ component: wekan
+ release: {{ .Release.Name }}
+ heritage: {{ .Release.Service }}
+spec:
+ replicas: {{ .Values.replicaCount }}
+ selector:
+ matchLabels:
+ app: {{ template "wekan.name" . }}
+ component: wekan
+ release: {{ .Release.Name }}
+ template:
+ metadata:
+ annotations:
+ labels:
+ app: {{ template "wekan.name" . }}
+ component: wekan
+ release: {{ .Release.Name }}
+ spec:
+ serviceAccountName: {{ template "wekan.serviceAccountName" . }}
+ containers:
+ - name: {{ .Chart.Name }}
+ image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"
+ imagePullPolicy: {{ .Values.image.pullPolicy }}
+ terminationMessagePolicy: FallbackToLogsOnError
+ ports:
+ - name: http
+ containerPort: 8080
+ env:
+ - name: ROOT_URL
+ value: {{ .Values.root_url | default "https://wekan.local" | quote }}
+ - name: MONGO_URL
+ value: "{{ template "mongodb-replicaset.url" . }}"
+ livenessProbe:
+ httpGet:
+ path: /
+ port: 8080
+ initialDelaySeconds: 60
+ resources:
+{{ toYaml .Values.resources | indent 12 }}
+ {{- with .Values.nodeSelector }}
+ nodeSelector:
+{{ toYaml . | indent 8 }}
+ {{- end }}
+{{- if .Values.affinity }}
+ affinity:
+{{ toYaml .Values.affinity | indent 8 }}
+ {{- end }}
+ {{- with .Values.tolerations }}
+ tolerations:
+{{ toYaml . | indent 8 }}
+ {{- end }}
diff --git a/helm/wekan/templates/hpa.yaml b/helm/wekan/templates/hpa.yaml
new file mode 100644
index 00000000..5c8017c3
--- /dev/null
+++ b/helm/wekan/templates/hpa.yaml
@@ -0,0 +1,18 @@
+{{- if .Values.autoscaling.enabled -}}
+apiVersion: autoscaling/v1
+kind: HorizontalPodAutoscaler
+metadata:
+ name: {{ template "wekan.fullname" . }}
+ labels:
+ app: {{ template "wekan.name" . }}
+ chart: {{ template "wekan.chart" . }}
+ component: wekan
+ heritage: {{ .Release.Service }}
+ release: {{ .Release.Name }}
+spec:
+ scaleTargetRef:
+ apiVersion: apps/v1
+ kind: Deployment
+ name: {{ template "wekan.fullname" . }}
+{{ toYaml .Values.autoscaling.config | indent 2 }}
+{{- end -}}
diff --git a/helm/wekan/templates/ingress.yaml b/helm/wekan/templates/ingress.yaml
new file mode 100644
index 00000000..d63c21c3
--- /dev/null
+++ b/helm/wekan/templates/ingress.yaml
@@ -0,0 +1,40 @@
+{{- if .Values.ingress.enabled -}}
+{{- $fullName := include "wekan.fullname" . -}}
+{{- $servicePort := .Values.service.port -}}
+{{- $ingressPath := .Values.ingress.path -}}
+apiVersion: extensions/v1beta1
+kind: Ingress
+metadata:
+ name: {{ $fullName }}
+ labels:
+ app: {{ template "wekan.name" . }}
+ chart: {{ template "wekan.chart" . }}
+ component: wekan
+ heritage: {{ .Release.Service }}
+ release: {{ .Release.Name }}
+{{- with .Values.ingress.annotations }}
+ annotations:
+{{ toYaml . | indent 4 }}
+{{- end }}
+spec:
+{{- if .Values.ingress.tls }}
+ tls:
+ {{- range .Values.ingress.tls }}
+ - hosts:
+ {{- range .hosts }}
+ - {{ . }}
+ {{- end }}
+ secretName: {{ .secretName }}
+ {{- end }}
+{{- end }}
+ rules:
+ {{- range .Values.ingress.hosts }}
+ - host: {{ . }}
+ http:
+ paths:
+ - path: {{ $ingressPath }}
+ backend:
+ serviceName: {{ $fullName }}
+ servicePort: http
+ {{- end }}
+{{- end }}
diff --git a/helm/wekan/templates/secrets.yaml b/helm/wekan/templates/secrets.yaml
new file mode 100644
index 00000000..79ae3d48
--- /dev/null
+++ b/helm/wekan/templates/secrets.yaml
@@ -0,0 +1,14 @@
+apiVersion: v1
+kind: Secret
+metadata:
+ name: {{ template "wekan.fullname" . }}
+ labels:
+ app: {{ template "wekan.name" . }}
+ chart: {{ template "wekan.chart" . }}
+ component: wekan
+ heritage: {{ .Release.Service }}
+ release: {{ .Release.Name }}
+type: Opaque
+data:
+ accessKey: {{ .Values.credentials.accessKey | b64enc }}
+ secretKey: {{ .Values.credentials.secretKey | b64enc }}
diff --git a/helm/wekan/templates/service.yaml b/helm/wekan/templates/service.yaml
new file mode 100644
index 00000000..6099faec
--- /dev/null
+++ b/helm/wekan/templates/service.yaml
@@ -0,0 +1,25 @@
+apiVersion: v1
+kind: Service
+metadata:
+ {{- if .Values.service.annotations }}
+ annotations:
+{{ toYaml .Values.service.annotations | indent 4 }}
+ {{- end }}
+ name: {{ template "wekan.fullname" . }}
+ labels:
+ app: {{ template "wekan.name" . }}
+ chart: {{ template "wekan.chart" . }}
+ component: wekan
+ heritage: {{ .Release.Service }}
+ release: {{ .Release.Name }}
+spec:
+ type: {{ .Values.service.type }}
+ ports:
+ - port: {{ .Values.service.port }}
+ targetPort: http
+ protocol: TCP
+ name: http
+ selector:
+ app: {{ template "wekan.name" . }}
+ component: wekan
+ release: {{ .Release.Name }}
diff --git a/helm/wekan/templates/serviceaccount.yaml b/helm/wekan/templates/serviceaccount.yaml
new file mode 100644
index 00000000..58696cb6
--- /dev/null
+++ b/helm/wekan/templates/serviceaccount.yaml
@@ -0,0 +1,12 @@
+{{- if .Values.serviceAccounts.create }}
+apiVersion: v1
+kind: ServiceAccount
+metadata:
+ labels:
+ app: {{ template "wekan.name" . }}
+ chart: {{ template "wekan.chart" . }}
+ component: wekan
+ heritage: {{ .Release.Service }}
+ release: {{ .Release.Name }}
+ name: {{ template "wekan.serviceAccountName" . }}
+{{- end }}
diff --git a/helm/wekan/templates/tests/test-cloudserver.yaml b/helm/wekan/templates/tests/test-cloudserver.yaml
new file mode 100644
index 00000000..a1db7289
--- /dev/null
+++ b/helm/wekan/templates/tests/test-cloudserver.yaml
@@ -0,0 +1,27 @@
+apiVersion: v1
+kind: Pod
+metadata:
+ name: {{ template "wekan.fullname" . }}-test
+ annotations:
+ "helm.sh/hook": test-success
+spec:
+ containers:
+ - name: {{ template "wekan.fullname" . }}-test
+ imagePullPolicy: IfNotPresent
+ image: "docker.io/mesosphere/aws-cli:1.14.5"
+ command:
+ - sh
+ - -c
+ - aws s3 --endpoint-url=http://{{ include "wekan.fullname" . }} --region=us-east-1 ls
+ env:
+ - name: AWS_ACCESS_KEY_ID
+ valueFrom:
+ secretKeyRef:
+ name: {{ template "wekan.fullname" . }}
+ key: accessKey
+ - name: AWS_SECRET_ACCESS_KEY
+ valueFrom:
+ secretKeyRef:
+ name: {{ template "wekan.fullname" . }}
+ key: secretKey
+ restartPolicy: Never
diff --git a/helm/wekan/values.yaml b/helm/wekan/values.yaml
new file mode 100644
index 00000000..adc2c855
--- /dev/null
+++ b/helm/wekan/values.yaml
@@ -0,0 +1,110 @@
+# ------------------------------------------------------------------------------
+# Wekan:
+# ------------------------------------------------------------------------------
+
+## Define serviceAccount names to create or use. Defaults to component's fully
+## qualified name.
+##
+serviceAccounts:
+ create: true
+ name: ""
+
+## Wekan image configuration
+##
+image:
+ repository: quay.io/wekan/wekan
+ tag: latest
+ pullPolicy: IfNotPresent
+
+## Configuration for wekan component
+##
+
+replicaCount: 1
+
+## Specify wekan credentials
+##
+credentials:
+ accessKey: access-key
+ secretKey: secret-key
+
+## Specify additional environmental variables for the Deployment
+##
+env: {}
+
+service:
+ type: NodePort
+ port: 80
+ annotations: {}
+ # prometheus.io/scrape: "true"
+ # prometheus.io/port: "8000"
+ # prometheus.io/path: "/_/monitoring/metrics"
+
+## Comma-separated string of allowed virtual hosts for external access.
+## This should match the ingress hosts
+##
+endpoint: wekan.local
+
+ingress:
+ enabled: true
+ annotations: {}
+ # kubernetes.io/ingress.class: nginx
+ # kubernetes.io/tls-acme: "true"
+ path: /*
+ # This must match 'endpoint', unless your client supports different
+ # hostnames.
+ hosts: [ wekan.local ]
+ # - wekan.local
+ tls: []
+ # - secretName: wekan-example-tls
+ # hosts:
+ # - wekan-example.local
+
+resources:
+ requests:
+ memory: 128Mi
+ cpu: 300m
+ limits:
+ memory: 1Gi
+ cpu: 500m
+
+## Node labels for pod assignment
+## ref: https://kubernetes.io/docs/user-guide/node-selection/
+##
+nodeSelector: {}
+
+## Tolerations for pod assignment
+## ref: https://kubernetes.io/docs/concepts/configuration/taint-and-toleration/
+##
+tolerations: []
+
+## Affinity for pod assignment
+## ref: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/#affinity-and-anti-affinity
+##
+affinity: {}
+
+## Configure an horizontal pod autoscaler
+##
+autoscaling:
+ enabled: true
+ config:
+ minReplicas: 1
+ maxReplicas: 16
+ ## Note: when setting this, a `resources.request.cpu` is required. You
+ ## likely want to set it to `1` or some lower value.
+ ##
+ targetCPUUtilizationPercentage: 80
+
+# ------------------------------------------------------------------------------
+# MongoDB:
+# ------------------------------------------------------------------------------
+
+mongodb-replicaset:
+ enabled: true
+ replicas: 3
+ replicaSetName: rs0
+ securityContext:
+ runAsUser: 1000
+ fsGroup: 1000
+ runAsNonRoot: true
+ #image:
+ # tag: 3.2.21
diff --git a/i18n/ar.i18n.json b/i18n/ar.i18n.json
index 3a1b171f..926e04ff 100644
--- a/i18n/ar.i18n.json
+++ b/i18n/ar.i18n.json
@@ -1,28 +1,41 @@
{
"accept": "قبول",
"act-activity-notify": "اشعارات النشاط",
- "act-addAttachment": "ربط __المرفق__ الى __بطاقة__",
- "act-addSubtask": "تمة اضافة فرع المهمة __ قائمة التدقيق __ الى __ بطاقة",
- "act-addChecklist": "تمة اضافة قائمة التدقيق __ قائمة التدقيق __ الى __ بطاقة",
- "act-addChecklistItem": "تمة اضافة عنصر قائمة التدقيق __الى قائمة التدقيق __ قائمة التدقيق __ في __ بطاقة",
- "act-addComment": "علق على __بطاقة__ : __تعليق__",
- "act-createBoard": "احدث __لوحة__",
- "act-createCard": "تمة اضافة __بطاقة__ الى __قائمة__",
- "act-createCustomField": "احدث حقل مخصص __ حقل مخصص__",
- "act-createList": "اضاف __قائمة__ الى __لوحة__",
- "act-addBoardMember": "اضاف __member__ الى __board__",
- "act-archivedBoard": "__ لوح __ انتقل إلى الأرشيف",
- "act-archivedCard": "__ بطاقة __ انتقلت إلى الأرشيف",
- "act-archivedList": "__ القائمة __ انتقلت إلى الأرشيف",
- "act-archivedSwimlane": "__خط السباحة__انتقل إلى الأرشيف",
- "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-addAttachment": "added attachment __attachment__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-deleteAttachment": "deleted attachment __attachment__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-addSubtask": "added subtask __subtask__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-addLabel": "Added label __label__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-addedLabel": "Added label __label__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-removeLabel": "Removed label __label__ from card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-removedLabel": "Removed label __label__ from card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-addChecklist": "added checklist __checklist__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-addChecklistItem": "added checklist item __checklistItem__ to checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-removeChecklist": "removed checklist __checklist__ from card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-removeChecklistItem": "removed checklist item __checklistItem__ from checklist __checkList__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-checkedItem": "checked __checklistItem__ of checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-uncheckedItem": "unchecked __checklistItem__ of checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-completeChecklist": "completed checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-uncompleteChecklist": "uncompleted checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-addComment": "commented on card __card__: __comment__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-createBoard": "created board __board__",
+ "act-createSwimlane": "created swimlane __swimlane__ to board __board__",
+ "act-createCard": "created card __card__ to list __list__ at swimlane __swimlane__ at board __board__",
+ "act-createCustomField": "created custom field __customField__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-createList": "added list __list__ to board __board__",
+ "act-addBoardMember": "added member __member__ to board __board__",
+ "act-archivedBoard": "Board __board__ moved to Archive",
+ "act-archivedCard": "Card __card__ at list __list__ at swimlane __swimlane__ at board __board__ moved to Archive",
+ "act-archivedList": "List __list__ at swimlane __swimlane__ at board __board__ moved to Archive",
+ "act-archivedSwimlane": "Swimlane __swimlane__ at board __board__ moved to Archive",
+ "act-importBoard": "imported board __board__",
+ "act-importCard": "imported card __card__ to list __list__ at swimlane __swimlane__ at board __board__",
+ "act-importList": "imported list __list__ to swimlane __swimlane__ at board __board__",
+ "act-joinMember": "added member __member__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-moveCard": "moved card __card__ at board __board__ from list __oldList__ at swimlane __oldSwimlane__ to list __list__ at swimlane __swimlane__",
+ "act-moveCardToOtherBoard": "moved card __card__ from list __oldList__ at swimlane __oldSwimlane__ at board __oldBoard__ to list __list__ at swimlane __swimlane__ at board __board__",
+ "act-removeBoardMember": "removed member __member__ from board __board__",
+ "act-restoredCard": "restored card __card__ to list __list__ at swimlane __swimlane__ at board __board__",
+ "act-unjoinMember": "removed member __member__ from card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
"act-withBoardTitle": "__لوح__",
"act-withCardTitle": "[__board__] __card__",
"actions": "الإجراءات",
@@ -47,14 +60,14 @@
"activity-unchecked-item": "ازالة تحقق %s من قائمة التحقق %s من %s",
"activity-checklist-added": "أضاف قائمة تحقق إلى %s",
"activity-checklist-removed": "ازالة قائمة التحقق من %s",
- "activity-checklist-completed": "تم انجاز قائمة التحقق %s من %s",
+ "activity-checklist-completed": "completed checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
"activity-checklist-uncompleted": "لم يتم انجاز قائمة التحقق %s من %s",
"activity-checklist-item-added": "تم اضافة عنصر قائمة التحقق الى '%s' في %s",
"activity-checklist-item-removed": "تم ازالة عنصر قائمة التحقق الى '%s' في %s",
"add": "أضف",
"activity-checked-item-card": "checked %s in checklist %s",
"activity-unchecked-item-card": "unchecked %s in checklist %s",
- "activity-checklist-completed-card": "completed the checklist %s",
+ "activity-checklist-completed-card": "completed checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
"activity-checklist-uncompleted-card": "uncompleted the checklist %s",
"add-attachment": "إضافة مرفق",
"add-board": "إضافة لوحة",
@@ -92,6 +105,8 @@
"restore-board": "استعادة اللوحة",
"no-archived-boards": "لا توجد لوحات في الأرشيف.",
"archives": "أرشيف",
+ "template": "Template",
+ "templates": "Templates",
"assign-member": "تعيين عضو",
"attached": "أُرفق)",
"attachment": "مرفق",
@@ -110,7 +125,7 @@
"boardChangeTitlePopup-title": "إعادة تسمية اللوحة",
"boardChangeVisibilityPopup-title": "تعديل وضوح الرؤية",
"boardChangeWatchPopup-title": "تغيير المتابعة",
- "boardMenuPopup-title": "قائمة اللوحة",
+ "boardMenuPopup-title": "Board Settings",
"boards": "لوحات",
"board-view": "عرض اللوحات",
"board-view-cal": "التقويم",
@@ -143,6 +158,7 @@
"cardLabelsPopup-title": "علامات",
"cardMembersPopup-title": "أعضاء",
"cardMorePopup-title": "المزيد",
+ "cardTemplatePopup-title": "Create template",
"cards": "بطاقات",
"cards-count": "بطاقات",
"casSignIn": "تسجيل الدخول مع CAS",
@@ -204,7 +220,7 @@
"confirm-checklist-delete-dialog": "Are you sure you want to delete checklist?",
"copy-card-link-to-clipboard": "نسخ رابط البطاقة إلى الحافظة",
"linkCardPopup-title": "ربط البطاقة",
- "searchCardPopup-title": "Search Card",
+ "searchElementPopup-title": "بحث",
"copyCardPopup-title": "نسخ البطاقة",
"copyChecklistToManyCardsPopup-title": "Copy Checklist Template to Many Cards",
"copyChecklistToManyCardsPopup-instructions": "Destination Card Titles and Descriptions in this JSON format",
@@ -453,6 +469,9 @@
"welcome-swimlane": "Milestone 1",
"welcome-list1": "المبادئ",
"welcome-list2": "متقدم",
+ "card-templates-swimlane": "Card Templates",
+ "list-templates-swimlane": "List Templates",
+ "board-templates-swimlane": "Board Templates",
"what-to-do": "ماذا تريد أن تنجز?",
"wipLimitErrorPopup-title": "Invalid WIP Limit",
"wipLimitErrorPopup-dialog-pt1": "The number of tasks in this list is higher than the WIP limit you've defined.",
@@ -552,6 +571,8 @@
"activity-added-label-card": "added label '%s'",
"activity-removed-label-card": "removed label '%s'",
"activity-delete-attach-card": "deleted an attachment",
+ "activity-set-customfield": "set custom field '%s' to '%s' in %s",
+ "activity-unset-customfield": "unset custom field '%s' in %s",
"r-rule": "Rule",
"r-add-trigger": "Add trigger",
"r-add-action": "Add action",
diff --git a/i18n/bg.i18n.json b/i18n/bg.i18n.json
index 96e0195d..1592bc08 100644
--- a/i18n/bg.i18n.json
+++ b/i18n/bg.i18n.json
@@ -1,28 +1,41 @@
{
"accept": "Приемам",
"act-activity-notify": "Activity Notification",
- "act-addAttachment": "прикачи __attachment__ към __card__",
- "act-addSubtask": "добави задача __checklist__ към __card__",
- "act-addChecklist": "добави списък със задачи __checklist__ към __card__",
- "act-addChecklistItem": "добави __checklistItem__ към списък със задачи __checklist__ в __card__",
- "act-addComment": "Коментира в __card__: __comment__",
- "act-createBoard": "създаде __board__",
- "act-createCard": "добави __card__ към __list__",
- "act-createCustomField": "създаде собствено поле __customField__",
- "act-createList": "добави __list__ към __board__",
- "act-addBoardMember": "добави __member__ към __board__",
- "act-archivedBoard": "__board__ е преместен в Архива",
- "act-archivedCard": "__card__ е преместена в Архива",
- "act-archivedList": "__list__ е преместен в Архива",
- "act-archivedSwimlane": "__swimlane__ е преместен в Архива",
- "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-addAttachment": "added attachment __attachment__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-deleteAttachment": "deleted attachment __attachment__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-addSubtask": "added subtask __subtask__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-addLabel": "Added label __label__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-addedLabel": "Added label __label__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-removeLabel": "Removed label __label__ from card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-removedLabel": "Removed label __label__ from card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-addChecklist": "added checklist __checklist__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-addChecklistItem": "added checklist item __checklistItem__ to checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-removeChecklist": "removed checklist __checklist__ from card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-removeChecklistItem": "removed checklist item __checklistItem__ from checklist __checkList__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-checkedItem": "checked __checklistItem__ of checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-uncheckedItem": "unchecked __checklistItem__ of checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-completeChecklist": "completed checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-uncompleteChecklist": "uncompleted checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-addComment": "commented on card __card__: __comment__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-createBoard": "created board __board__",
+ "act-createSwimlane": "created swimlane __swimlane__ to board __board__",
+ "act-createCard": "created card __card__ to list __list__ at swimlane __swimlane__ at board __board__",
+ "act-createCustomField": "created custom field __customField__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-createList": "added list __list__ to board __board__",
+ "act-addBoardMember": "added member __member__ to board __board__",
+ "act-archivedBoard": "Board __board__ moved to Archive",
+ "act-archivedCard": "Card __card__ at list __list__ at swimlane __swimlane__ at board __board__ moved to Archive",
+ "act-archivedList": "List __list__ at swimlane __swimlane__ at board __board__ moved to Archive",
+ "act-archivedSwimlane": "Swimlane __swimlane__ at board __board__ moved to Archive",
+ "act-importBoard": "imported board __board__",
+ "act-importCard": "imported card __card__ to list __list__ at swimlane __swimlane__ at board __board__",
+ "act-importList": "imported list __list__ to swimlane __swimlane__ at board __board__",
+ "act-joinMember": "added member __member__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-moveCard": "moved card __card__ at board __board__ from list __oldList__ at swimlane __oldSwimlane__ to list __list__ at swimlane __swimlane__",
+ "act-moveCardToOtherBoard": "moved card __card__ from list __oldList__ at swimlane __oldSwimlane__ at board __oldBoard__ to list __list__ at swimlane __swimlane__ at board __board__",
+ "act-removeBoardMember": "removed member __member__ from board __board__",
+ "act-restoredCard": "restored card __card__ to list __list__ at swimlane __swimlane__ at board __board__",
+ "act-unjoinMember": "removed member __member__ from card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
"act-withBoardTitle": "__board__ ",
"act-withCardTitle": "[__board__] __card__",
"actions": "Действия",
@@ -47,14 +60,14 @@
"activity-unchecked-item": "размаркира %s от списък със задачи %s на %s",
"activity-checklist-added": "добави списък със задачи към %s",
"activity-checklist-removed": "премахна списък със задачи от %s",
- "activity-checklist-completed": "завърши списък със задачи %s на %s",
+ "activity-checklist-completed": "completed checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
"activity-checklist-uncompleted": "\"отзавърши\" чеклистта %s в %s",
"activity-checklist-item-added": "добави точка към '%s' в/във %s",
"activity-checklist-item-removed": "премахна точка от '%s' в %s",
"add": "Добави",
"activity-checked-item-card": "отбеляза %s в чеклист %s",
"activity-unchecked-item-card": "размаркира %s в чеклист %s",
- "activity-checklist-completed-card": "завърши чеклиста %s",
+ "activity-checklist-completed-card": "completed checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
"activity-checklist-uncompleted-card": "\"отзавърши\" чеклистта %s",
"add-attachment": "Добави прикачен файл",
"add-board": "Добави Табло",
@@ -92,6 +105,8 @@
"restore-board": "Възстанови Таблото",
"no-archived-boards": "Няма Табла в Архива.",
"archives": "Архив",
+ "template": "Template",
+ "templates": "Templates",
"assign-member": "Възложи на член от екипа",
"attached": "прикачен",
"attachment": "Прикаченн файл",
@@ -110,7 +125,7 @@
"boardChangeTitlePopup-title": "Промени името на Таблото",
"boardChangeVisibilityPopup-title": "Change Visibility",
"boardChangeWatchPopup-title": "Промени наблюдаването",
- "boardMenuPopup-title": "Меню на Таблото",
+ "boardMenuPopup-title": "Board Settings",
"boards": "Табла",
"board-view": "Board View",
"board-view-cal": "Календар",
@@ -143,6 +158,7 @@
"cardLabelsPopup-title": "Етикети",
"cardMembersPopup-title": "Членове",
"cardMorePopup-title": "Още",
+ "cardTemplatePopup-title": "Create template",
"cards": "Карти",
"cards-count": "Карти",
"casSignIn": "Sign In with CAS",
@@ -204,7 +220,7 @@
"confirm-checklist-delete-dialog": "Сигурни ли сте, че искате да изтриете този чеклист?",
"copy-card-link-to-clipboard": "Копирай връзката на картата в клипборда",
"linkCardPopup-title": "Свържи картата",
- "searchCardPopup-title": "Търсене на карта",
+ "searchElementPopup-title": "Търсене",
"copyCardPopup-title": "Копирай картата",
"copyChecklistToManyCardsPopup-title": "Копирай чеклисти в други карти",
"copyChecklistToManyCardsPopup-instructions": "Destination Card Titles and Descriptions in this JSON format",
@@ -453,6 +469,9 @@
"welcome-swimlane": "Milestone 1",
"welcome-list1": "Basics",
"welcome-list2": "Advanced",
+ "card-templates-swimlane": "Card Templates",
+ "list-templates-swimlane": "List Templates",
+ "board-templates-swimlane": "Board Templates",
"what-to-do": "What do you want to do?",
"wipLimitErrorPopup-title": "Невалиден WIP лимит",
"wipLimitErrorPopup-dialog-pt1": "The number of tasks in this list is higher than the WIP limit you've defined.",
@@ -552,6 +571,8 @@
"activity-added-label-card": "добави етикет '%s'",
"activity-removed-label-card": "премахна етикет '%s'",
"activity-delete-attach-card": "изтри прикачения файл",
+ "activity-set-customfield": "set custom field '%s' to '%s' in %s",
+ "activity-unset-customfield": "unset custom field '%s' in %s",
"r-rule": "Правило",
"r-add-trigger": "Добави спусък",
"r-add-action": "Добави действие",
diff --git a/i18n/br.i18n.json b/i18n/br.i18n.json
index b6ffe2db..065c1fa5 100644
--- a/i18n/br.i18n.json
+++ b/i18n/br.i18n.json
@@ -1,28 +1,41 @@
{
"accept": "Asantiñ",
"act-activity-notify": "Activity Notification",
- "act-addAttachment": "attached __attachment__ to __card__",
- "act-addSubtask": "added subtask __checklist__ to __card__",
- "act-addChecklist": "added checklist __checklist__ to __card__",
- "act-addChecklistItem": "added __checklistItem__ to checklist __checklist__ on __card__",
- "act-addComment": "commented on __card__: __comment__",
- "act-createBoard": "created __board__",
- "act-createCard": "added __card__ to __list__",
- "act-createCustomField": "created custom field __customField__",
- "act-createList": "added __list__ to __board__",
- "act-addBoardMember": "added __member__ to __board__",
- "act-archivedBoard": "__board__ moved to Archive",
- "act-archivedCard": "__card__ moved to Archive",
- "act-archivedList": "__list__ moved to Archive",
- "act-archivedSwimlane": "__swimlane__ moved to Archive",
- "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-addAttachment": "added attachment __attachment__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-deleteAttachment": "deleted attachment __attachment__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-addSubtask": "added subtask __subtask__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-addLabel": "Added label __label__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-addedLabel": "Added label __label__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-removeLabel": "Removed label __label__ from card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-removedLabel": "Removed label __label__ from card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-addChecklist": "added checklist __checklist__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-addChecklistItem": "added checklist item __checklistItem__ to checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-removeChecklist": "removed checklist __checklist__ from card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-removeChecklistItem": "removed checklist item __checklistItem__ from checklist __checkList__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-checkedItem": "checked __checklistItem__ of checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-uncheckedItem": "unchecked __checklistItem__ of checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-completeChecklist": "completed checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-uncompleteChecklist": "uncompleted checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-addComment": "commented on card __card__: __comment__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-createBoard": "created board __board__",
+ "act-createSwimlane": "created swimlane __swimlane__ to board __board__",
+ "act-createCard": "created card __card__ to list __list__ at swimlane __swimlane__ at board __board__",
+ "act-createCustomField": "created custom field __customField__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-createList": "added list __list__ to board __board__",
+ "act-addBoardMember": "added member __member__ to board __board__",
+ "act-archivedBoard": "Board __board__ moved to Archive",
+ "act-archivedCard": "Card __card__ at list __list__ at swimlane __swimlane__ at board __board__ moved to Archive",
+ "act-archivedList": "List __list__ at swimlane __swimlane__ at board __board__ moved to Archive",
+ "act-archivedSwimlane": "Swimlane __swimlane__ at board __board__ moved to Archive",
+ "act-importBoard": "imported board __board__",
+ "act-importCard": "imported card __card__ to list __list__ at swimlane __swimlane__ at board __board__",
+ "act-importList": "imported list __list__ to swimlane __swimlane__ at board __board__",
+ "act-joinMember": "added member __member__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-moveCard": "moved card __card__ at board __board__ from list __oldList__ at swimlane __oldSwimlane__ to list __list__ at swimlane __swimlane__",
+ "act-moveCardToOtherBoard": "moved card __card__ from list __oldList__ at swimlane __oldSwimlane__ at board __oldBoard__ to list __list__ at swimlane __swimlane__ at board __board__",
+ "act-removeBoardMember": "removed member __member__ from board __board__",
+ "act-restoredCard": "restored card __card__ to list __list__ at swimlane __swimlane__ at board __board__",
+ "act-unjoinMember": "removed member __member__ from card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
"act-withBoardTitle": "__board__",
"act-withCardTitle": "[__board__] __card__",
"actions": "Oberoù",
@@ -47,14 +60,14 @@
"activity-unchecked-item": "unchecked %s in checklist %s of %s",
"activity-checklist-added": "added checklist to %s",
"activity-checklist-removed": "removed a checklist from %s",
- "activity-checklist-completed": "completed the checklist %s of %s",
+ "activity-checklist-completed": "completed checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
"activity-checklist-uncompleted": "uncompleted the checklist %s of %s",
"activity-checklist-item-added": "added checklist item to '%s' in %s",
"activity-checklist-item-removed": "removed a checklist item from '%s' in %s",
"add": "Ouzhpenn",
"activity-checked-item-card": "checked %s in checklist %s",
"activity-unchecked-item-card": "unchecked %s in checklist %s",
- "activity-checklist-completed-card": "completed the checklist %s",
+ "activity-checklist-completed-card": "completed checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
"activity-checklist-uncompleted-card": "uncompleted the checklist %s",
"add-attachment": "Add Attachment",
"add-board": "Add Board",
@@ -92,6 +105,8 @@
"restore-board": "Restore Board",
"no-archived-boards": "No Boards in Archive.",
"archives": "Archive",
+ "template": "Template",
+ "templates": "Templates",
"assign-member": "Assign member",
"attached": "attached",
"attachment": "Attachment",
@@ -110,7 +125,7 @@
"boardChangeTitlePopup-title": "Rename Board",
"boardChangeVisibilityPopup-title": "Change Visibility",
"boardChangeWatchPopup-title": "Change Watch",
- "boardMenuPopup-title": "Board Menu",
+ "boardMenuPopup-title": "Board Settings",
"boards": "Boards",
"board-view": "Board View",
"board-view-cal": "Calendar",
@@ -143,6 +158,7 @@
"cardLabelsPopup-title": "Labels",
"cardMembersPopup-title": "Izili",
"cardMorePopup-title": "Muioc’h",
+ "cardTemplatePopup-title": "Create template",
"cards": "Kartennoù",
"cards-count": "Kartennoù",
"casSignIn": "Sign In with CAS",
@@ -204,7 +220,7 @@
"confirm-checklist-delete-dialog": "Are you sure you want to delete checklist?",
"copy-card-link-to-clipboard": "Copy card link to clipboard",
"linkCardPopup-title": "Link Card",
- "searchCardPopup-title": "Search Card",
+ "searchElementPopup-title": "Search",
"copyCardPopup-title": "Copy Card",
"copyChecklistToManyCardsPopup-title": "Copy Checklist Template to Many Cards",
"copyChecklistToManyCardsPopup-instructions": "Destination Card Titles and Descriptions in this JSON format",
@@ -453,6 +469,9 @@
"welcome-swimlane": "Milestone 1",
"welcome-list1": "Basics",
"welcome-list2": "Advanced",
+ "card-templates-swimlane": "Card Templates",
+ "list-templates-swimlane": "List Templates",
+ "board-templates-swimlane": "Board Templates",
"what-to-do": "What do you want to do?",
"wipLimitErrorPopup-title": "Invalid WIP Limit",
"wipLimitErrorPopup-dialog-pt1": "The number of tasks in this list is higher than the WIP limit you've defined.",
@@ -552,6 +571,8 @@
"activity-added-label-card": "added label '%s'",
"activity-removed-label-card": "removed label '%s'",
"activity-delete-attach-card": "deleted an attachment",
+ "activity-set-customfield": "set custom field '%s' to '%s' in %s",
+ "activity-unset-customfield": "unset custom field '%s' in %s",
"r-rule": "Rule",
"r-add-trigger": "Add trigger",
"r-add-action": "Add action",
diff --git a/i18n/ca.i18n.json b/i18n/ca.i18n.json
index 3ec05181..f93a60c9 100644
--- a/i18n/ca.i18n.json
+++ b/i18n/ca.i18n.json
@@ -1,28 +1,41 @@
{
"accept": "Accepta",
"act-activity-notify": "Notificació d'activitat",
- "act-addAttachment": "afegit__adjunt__ a la __fitxa__",
- "act-addSubtask": "added subtask __checklist__ to __card__",
- "act-addChecklist": "afegida la checklist _checklist__ a __card__",
- "act-addChecklistItem": "afegit __checklistItem__ a la checklist __checklist__ on __card__",
- "act-addComment": "comentat a __card__: __comment__",
- "act-createBoard": "nou __tauler__",
- "act-createCard": "afegit/da __card__ a __list__",
- "act-createCustomField": "created custom field __customField__",
- "act-createList": "llista __afegida__ al __tauler__",
- "act-addBoardMember": "usuari __afegit__ al __tauler__",
- "act-archivedBoard": "__tauler__ mogut al Arxiu",
- "act-archivedCard": "__fitxa__ moguda al Arxiu",
- "act-archivedList": "__llista__ mogud al Arxiu",
- "act-archivedSwimlane": "__swimlane__ moved to Archive",
- "act-importBoard": "tauler __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 __usuari__ del __tauler__",
- "act-restoredCard": "fitxa __restaurada__ al __tauler__",
- "act-unjoinMember": "elimina __member__ de __card__",
+ "act-addAttachment": "added attachment __attachment__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-deleteAttachment": "deleted attachment __attachment__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-addSubtask": "added subtask __subtask__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-addLabel": "Added label __label__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-addedLabel": "Added label __label__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-removeLabel": "Removed label __label__ from card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-removedLabel": "Removed label __label__ from card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-addChecklist": "added checklist __checklist__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-addChecklistItem": "added checklist item __checklistItem__ to checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-removeChecklist": "removed checklist __checklist__ from card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-removeChecklistItem": "removed checklist item __checklistItem__ from checklist __checkList__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-checkedItem": "checked __checklistItem__ of checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-uncheckedItem": "unchecked __checklistItem__ of checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-completeChecklist": "completed checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-uncompleteChecklist": "uncompleted checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-addComment": "commented on card __card__: __comment__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-createBoard": "created board __board__",
+ "act-createSwimlane": "created swimlane __swimlane__ to board __board__",
+ "act-createCard": "created card __card__ to list __list__ at swimlane __swimlane__ at board __board__",
+ "act-createCustomField": "created custom field __customField__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-createList": "added list __list__ to board __board__",
+ "act-addBoardMember": "added member __member__ to board __board__",
+ "act-archivedBoard": "Board __board__ moved to Archive",
+ "act-archivedCard": "Card __card__ at list __list__ at swimlane __swimlane__ at board __board__ moved to Archive",
+ "act-archivedList": "List __list__ at swimlane __swimlane__ at board __board__ moved to Archive",
+ "act-archivedSwimlane": "Swimlane __swimlane__ at board __board__ moved to Archive",
+ "act-importBoard": "imported board __board__",
+ "act-importCard": "imported card __card__ to list __list__ at swimlane __swimlane__ at board __board__",
+ "act-importList": "imported list __list__ to swimlane __swimlane__ at board __board__",
+ "act-joinMember": "added member __member__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-moveCard": "moved card __card__ at board __board__ from list __oldList__ at swimlane __oldSwimlane__ to list __list__ at swimlane __swimlane__",
+ "act-moveCardToOtherBoard": "moved card __card__ from list __oldList__ at swimlane __oldSwimlane__ at board __oldBoard__ to list __list__ at swimlane __swimlane__ at board __board__",
+ "act-removeBoardMember": "removed member __member__ from board __board__",
+ "act-restoredCard": "restored card __card__ to list __list__ at swimlane __swimlane__ at board __board__",
+ "act-unjoinMember": "removed member __member__ from card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
"act-withBoardTitle": "__tauler__",
"act-withCardTitle": "[__tauler__] __fitxa__",
"actions": "Accions",
@@ -47,14 +60,14 @@
"activity-unchecked-item": "unchecked %s in checklist %s of %s",
"activity-checklist-added": "Checklist afegida a %s",
"activity-checklist-removed": "removed a checklist from %s",
- "activity-checklist-completed": "completed the checklist %s of %s",
+ "activity-checklist-completed": "completed checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
"activity-checklist-uncompleted": "uncompleted the checklist %s of %s",
"activity-checklist-item-added": "afegida entrada de checklist de '%s' a %s",
"activity-checklist-item-removed": "removed a checklist item from '%s' in %s",
"add": "Afegeix",
"activity-checked-item-card": "checked %s in checklist %s",
"activity-unchecked-item-card": "unchecked %s in checklist %s",
- "activity-checklist-completed-card": "completed the checklist %s",
+ "activity-checklist-completed-card": "completed checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
"activity-checklist-uncompleted-card": "uncompleted the checklist %s",
"add-attachment": "Afegeix adjunt",
"add-board": "Afegeix Tauler",
@@ -92,6 +105,8 @@
"restore-board": "Restaura Tauler",
"no-archived-boards": "No hi han Taulers al Arxiu.",
"archives": "Desa",
+ "template": "Template",
+ "templates": "Templates",
"assign-member": "Assignar membre",
"attached": "adjuntat",
"attachment": "Adjunt",
@@ -110,7 +125,7 @@
"boardChangeTitlePopup-title": "Canvia el nom tauler",
"boardChangeVisibilityPopup-title": "Canvia visibilitat",
"boardChangeWatchPopup-title": "Canvia seguiment",
- "boardMenuPopup-title": "Menú del tauler",
+ "boardMenuPopup-title": "Board Settings",
"boards": "Taulers",
"board-view": "Visió del tauler",
"board-view-cal": "Calendari",
@@ -143,6 +158,7 @@
"cardLabelsPopup-title": "Etiquetes",
"cardMembersPopup-title": "Membres",
"cardMorePopup-title": "Més",
+ "cardTemplatePopup-title": "Create template",
"cards": "Fitxes",
"cards-count": "Fitxes",
"casSignIn": "Sign In with CAS",
@@ -204,7 +220,7 @@
"confirm-checklist-delete-dialog": "Are you sure you want to delete checklist?",
"copy-card-link-to-clipboard": "Copia l'enllaç de la ftixa al porta-retalls",
"linkCardPopup-title": "Link Card",
- "searchCardPopup-title": "Buscar Fitxa",
+ "searchElementPopup-title": "Cerca",
"copyCardPopup-title": "Copia la fitxa",
"copyChecklistToManyCardsPopup-title": "Copy Checklist Template to Many Cards",
"copyChecklistToManyCardsPopup-instructions": "Títols de fitxa i Descripcions de destí en aquest format JSON",
@@ -453,6 +469,9 @@
"welcome-swimlane": "Objectiu 1",
"welcome-list1": "Bàsics",
"welcome-list2": "Avançades",
+ "card-templates-swimlane": "Card Templates",
+ "list-templates-swimlane": "List Templates",
+ "board-templates-swimlane": "Board Templates",
"what-to-do": "Què vols fer?",
"wipLimitErrorPopup-title": "Límit de Treball en Progrès invàlid",
"wipLimitErrorPopup-dialog-pt1": "El nombre de tasques en esta llista és superior al límit de Treball en Progrès que heu definit.",
@@ -552,6 +571,8 @@
"activity-added-label-card": "added label '%s'",
"activity-removed-label-card": "removed label '%s'",
"activity-delete-attach-card": "deleted an attachment",
+ "activity-set-customfield": "set custom field '%s' to '%s' in %s",
+ "activity-unset-customfield": "unset custom field '%s' in %s",
"r-rule": "Rule",
"r-add-trigger": "Add trigger",
"r-add-action": "Add action",
diff --git a/i18n/cs.i18n.json b/i18n/cs.i18n.json
index 3e5f8b49..c3a3eb05 100644
--- a/i18n/cs.i18n.json
+++ b/i18n/cs.i18n.json
@@ -1,28 +1,41 @@
{
"accept": "Přijmout",
"act-activity-notify": "Notifikace aktivit",
- "act-addAttachment": "přiložen __attachment__ do __card__",
- "act-addSubtask": "přidán podúkol __checklist__ do __card__",
- "act-addChecklist": "přidán checklist __checklist__ do __card__",
- "act-addChecklistItem": "přidán __checklistItem__ do checklistu __checklist__ v __card__",
- "act-addComment": "komentář k __card__: __comment__",
- "act-createBoard": "přidání __board__",
- "act-createCard": "přidání __card__ do __list__",
- "act-createCustomField": "vytvořeno vlastní pole __customField__",
- "act-createList": "přidání __list__ do __board__",
- "act-addBoardMember": "přidání __member__ do __board__",
- "act-archivedBoard": "__board__ byl přesunut do archivu",
- "act-archivedCard": "__card__ byla přesunuta do archivu",
- "act-archivedList": "__list__ byl přesunut do archivu",
- "act-archivedSwimlane": "__swimlane__ bylo přesunuto do archivu",
- "act-importBoard": "import __board__",
- "act-importCard": "import __card__",
- "act-importList": "import __list__",
- "act-joinMember": "přidání __member__ do __card__",
- "act-moveCard": "přesun __card__ z __oldList__ do __list__",
- "act-removeBoardMember": "odstranění __member__ z __board__",
- "act-restoredCard": "obnovení __card__ do __board__",
- "act-unjoinMember": "odstranění __member__ z __card__",
+ "act-addAttachment": "přidal(a) přílohu __attachment__ na kartu __card__ ve sloupci __list__ ve swimlane __swimlane__ na tablu __board__",
+ "act-deleteAttachment": "smazal(a) přílohu __attachment__ na kartě __card__ ve sloupci __list__ ve swimlane __swimlane__ na tablu __board__",
+ "act-addSubtask": "přidal(a) podúkol __subtask__ na kartu __card__ ve sloupci __list__ ve swimlane __swimlane__ na tablu __board__",
+ "act-addLabel": "Přídán štítek __label__ na kartu __card__ ve sloupci __list__ ve swimlane __swimlane__ na tablu __board__",
+ "act-addedLabel": "Přídán štítek __label__ na kartu __card__ ve sloupci __list__ ve swimlane __swimlane__ na tablu __board__",
+ "act-removeLabel": "Odstraněn štítek __label__ na kartě __card__ ve sloupci __list__ ve swimlane __swimlane__ na tablu __board__",
+ "act-removedLabel": "Odstraněn štítek __label__ na kartě __card__ ve sloupci __list__ ve swimlane __swimlane__ na tablu __board__",
+ "act-addChecklist": "přidal(a) zaškrtávací seznam __checklist__ na kartu __card__ ve sloupci __list__ ve swimlane __swimlane__ na tablu __board__",
+ "act-addChecklistItem": "přidal(a) položku zaškrtávacího seznamu __checklistItem__ do zaškrtávacího seznamu __checklist__ na kartě __card__ ve sloupci __list__ ve swimlane __swimlane__ na tablu __board__",
+ "act-removeChecklist": "smazal(a) zaškrtávací seznam __checklist__ na kartě __card__ ve sloupci __list__ ve swimlane __swimlane__ na tablu __board__",
+ "act-removeChecklistItem": "smazal(a) položku zaškrtávacího seznamu __checklistItem__ ze zaškrtávacího seznamu __checklist__ na kartě __card__ ve sloupci __list__ ve swimlane __swimlane__ na tablu __board__",
+ "act-checkedItem": "zaškrtl(a) __checklistItem__ na zaškrtávacím seznamu __checklist__ na kartě __card__ ve sloupci __list__ ve swimlane __swimlane__ na tablu __board__",
+ "act-uncheckedItem": "zrušil(a) zaškrtnutí __checklistItem__ na zaškrtávacím seznamu __checklist__ na kartě __card__ ve sloupci __list__ ve swimlane __swimlane__ na tablu __board__",
+ "act-completeChecklist": "dokončil(a) zaškrtávací seznam __checklist__ na kartě __card__ ve sloupci __list__ ve swimlane __swimlane__ na tablu __board__",
+ "act-uncompleteChecklist": "zrušil(a) dokončení zaškrtávacího seznamu __checklist__ na kartě __card__ ve sloupci __list__ ve swimlane __swimlane__ na tablu __board__",
+ "act-addComment": "přidal(a) komentář na kartě __card__: __comment__ ve sloupci __list__ ve swimlane __swimlane__ na tablu __board__",
+ "act-createBoard": "přidal(a) tablo __board__",
+ "act-createSwimlane": "created swimlane __swimlane__ to board __board__",
+ "act-createCard": "přidal(a) kartu __card__ do sloupce __list__ ve swimlane __swimlane__ na tablu __board__",
+ "act-createCustomField": "vytvořil(a) vlastní pole __customField__ na kartu __card__ do sloupce __list__ ve swimlane __swimlane__ na tablu __board__",
+ "act-createList": "přidal(a) sloupec __list__ do tabla __board__",
+ "act-addBoardMember": "přidal(a) člena __member__ do tabla __board__",
+ "act-archivedBoard": "Tablo __board__ přesunuto do Archivu",
+ "act-archivedCard": "Karta __card__ ve sloupci __list__ ve swimlane __swimlane__ na tablu __board__ přesunuta do Archivu",
+ "act-archivedList": "Sloupec __list__ ve swimlane __swimlane__ na tablu __board__ přesunut do Archivu",
+ "act-archivedSwimlane": "Swimlane __swimlane__ na tablu __board__ přesunut do Archivu",
+ "act-importBoard": "importoval(a) tablo __board__",
+ "act-importCard": "importoval(a) karta __card__ do sloupce __list__ ve swimlane __swimlane__ na tablu __board__",
+ "act-importList": "importoval(a) sloupec __list__ do swimlane __swimlane__ na tablu __board__",
+ "act-joinMember": "přidal(a) člena __member__ na kartu __card__ v seznamu __list__ ve swimlane __swimlane__ na tablu __board__",
+ "act-moveCard": "moved card __card__ at board __board__ from list __oldList__ at swimlane __oldSwimlane__ to list __list__ at swimlane __swimlane__",
+ "act-moveCardToOtherBoard": "přesunul(a) kartu __card__ ze sloupce __oldList__ ve swimlane __oldSwimlane__ na tablu __oldBoard__ do sloupce __list__ ve swimlane __swimlane__ na tablu __board__",
+ "act-removeBoardMember": "odstranil(a) člena __member__ z tabla __board__",
+ "act-restoredCard": "obnovil(a) kartu __card__ do sloupce __list__ ve swimlane __swimlane__ na tablu __board__",
+ "act-unjoinMember": "odstranil(a) člena __member__ z karty __card__ ve sloupci __list__ ve swimlane __swimlane__ na tablu __board__",
"act-withBoardTitle": "__board__",
"act-withCardTitle": "[__board__] __card__",
"actions": "Akce",
@@ -43,19 +56,19 @@
"activity-sent": "%s posláno na %s",
"activity-unjoined": "odpojen %s",
"activity-subtask-added": "podúkol přidán do %s",
- "activity-checked-item": "checked %s in checklist %s of %s",
- "activity-unchecked-item": "unchecked %s in checklist %s of %s",
+ "activity-checked-item": "dokončen %s v seznamu %s z %s",
+ "activity-unchecked-item": "nedokončen %s v seznamu %s z %s",
"activity-checklist-added": "přidán checklist do %s",
"activity-checklist-removed": "odstraněn checklist z %s",
- "activity-checklist-completed": "dokončen checklist %s z %s",
- "activity-checklist-uncompleted": "uncompleted the checklist %s of %s",
+ "activity-checklist-completed": "dokončil(a) zaškrtávací seznam __checklist__ na kartě __card__ ve sloupci __list__ ve swimlane __swimlane__ na tablu __board__",
+ "activity-checklist-uncompleted": "nedokončen seznam %s z %s",
"activity-checklist-item-added": "přidána položka checklist do '%s' v %s",
- "activity-checklist-item-removed": "removed a checklist item from '%s' in %s",
+ "activity-checklist-item-removed": "odstraněna položka seznamu do '%s' v %s",
"add": "Přidat",
- "activity-checked-item-card": "checked %s in checklist %s",
- "activity-unchecked-item-card": "unchecked %s in checklist %s",
- "activity-checklist-completed-card": "dokončen checklist %s",
- "activity-checklist-uncompleted-card": "uncompleted the checklist %s",
+ "activity-checked-item-card": "dokončen %s v seznamu %s",
+ "activity-unchecked-item-card": "nedokončen %s v seznamu %s",
+ "activity-checklist-completed-card": "dokončil(a) zaškrtávací seznam __checklist__ na kartě __card__ ve sloupci __list__ ve swimlane __swimlane__ na tablu __board__",
+ "activity-checklist-uncompleted-card": "nedokončený seznam %s",
"add-attachment": "Přidat přílohu",
"add-board": "Přidat tablo",
"add-card": "Přidat kartu",
@@ -92,6 +105,8 @@
"restore-board": "Obnovit tablo",
"no-archived-boards": "V archivu nejsou žádná tabla.",
"archives": "Archiv",
+ "template": "Šablona",
+ "templates": "Šablony",
"assign-member": "Přiřadit člena",
"attached": "přiloženo",
"attachment": "Příloha",
@@ -110,7 +125,7 @@
"boardChangeTitlePopup-title": "Přejmenovat tablo",
"boardChangeVisibilityPopup-title": "Upravit viditelnost",
"boardChangeWatchPopup-title": "Změnit sledování",
- "boardMenuPopup-title": "Menu tabla",
+ "boardMenuPopup-title": "Nastavení Tabla",
"boards": "Tabla",
"board-view": "Náhled tabla",
"board-view-cal": "Kalendář",
@@ -143,6 +158,7 @@
"cardLabelsPopup-title": "Štítky",
"cardMembersPopup-title": "Členové",
"cardMorePopup-title": "Více",
+ "cardTemplatePopup-title": "Vytvořit šablonu",
"cards": "Karty",
"cards-count": "Karty",
"casSignIn": "Přihlásit pomocí CAS",
@@ -166,33 +182,33 @@
"clipboard": "Schránka nebo potáhnout a pustit",
"close": "Zavřít",
"close-board": "Zavřít tablo",
- "close-board-pop": "You will be able to restore the board by clicking the “Archive” button from the home header.",
+ "close-board-pop": "Budete moci obnovit tablo kliknutím na tlačítko \"Archiv\" v hlavním menu.",
"color-black": "černá",
"color-blue": "modrá",
- "color-crimson": "crimson",
- "color-darkgreen": "darkgreen",
- "color-gold": "gold",
- "color-gray": "gray",
+ "color-crimson": "karmínová",
+ "color-darkgreen": "tmavě zelená",
+ "color-gold": "zlatá",
+ "color-gray": "šedá",
"color-green": "zelená",
"color-indigo": "indigo",
"color-lime": "světlezelená",
- "color-magenta": "magenta",
+ "color-magenta": "purpurová",
"color-mistyrose": "mistyrose",
- "color-navy": "navy",
+ "color-navy": "tmavě modrá",
"color-orange": "oranžová",
"color-paleturquoise": "paleturquoise",
"color-peachpuff": "peachpuff",
"color-pink": "růžová",
- "color-plum": "plum",
+ "color-plum": "švestková",
"color-purple": "fialová",
"color-red": "červená",
"color-saddlebrown": "saddlebrown",
- "color-silver": "silver",
+ "color-silver": "stříbrná",
"color-sky": "nebeská",
"color-slateblue": "slateblue",
- "color-white": "white",
+ "color-white": "bílá",
"color-yellow": "žlutá",
- "unset-color": "Unset",
+ "unset-color": "Nenastaveno",
"comment": "Komentář",
"comment-placeholder": "Text komentáře",
"comment-only": "Pouze komentáře",
@@ -204,7 +220,7 @@
"confirm-checklist-delete-dialog": "Opravdu chcete smazat tento checklist?",
"copy-card-link-to-clipboard": "Kopírovat adresu karty do mezipaměti",
"linkCardPopup-title": "Propojit kartu",
- "searchCardPopup-title": "Hledat Kartu",
+ "searchElementPopup-title": "Hledat",
"copyCardPopup-title": "Kopírovat kartu",
"copyChecklistToManyCardsPopup-title": "Kopírovat checklist do více karet",
"copyChecklistToManyCardsPopup-instructions": "Názvy a popisy cílové karty v tomto formátu JSON",
@@ -332,13 +348,13 @@
"leaveBoardPopup-title": "Opustit tablo?",
"link-card": "Odkázat na tuto kartu",
"list-archive-cards": "Přesunout všechny karty v tomto seznamu do archivu.",
- "list-archive-cards-pop": "This will remove all the cards in this list from the board. To view cards in Archive and bring them back to the board, click “Menu” > “Archive”.",
+ "list-archive-cards-pop": "Toto odstraní z tabla všechny karty z tohoto seznamu. Pro zobrazení karet v Archivu a jejich opětovné obnovení, klikni v \"Menu\" > \"Archiv\".",
"list-move-cards": "Přesunout všechny karty v tomto sloupci",
"list-select-cards": "Vybrat všechny karty v tomto sloupci",
- "set-color-list": "Set Color",
+ "set-color-list": "Nastavit barvu",
"listActionPopup-title": "Vypsat akce",
"swimlaneActionPopup-title": "Akce swimlane",
- "swimlaneAddPopup-title": "Add a Swimlane below",
+ "swimlaneAddPopup-title": "Přidat swimlane dolů",
"listImportCardPopup-title": "Importovat Trello kartu",
"listMorePopup-title": "Více",
"link-list": "Odkaz na tento sloupec",
@@ -453,6 +469,9 @@
"welcome-swimlane": "Milník 1",
"welcome-list1": "Základní",
"welcome-list2": "Pokročilé",
+ "card-templates-swimlane": "Šablony Karty",
+ "list-templates-swimlane": "Šablony Sloupce",
+ "board-templates-swimlane": "Šablony Tabla",
"what-to-do": "Co chcete dělat?",
"wipLimitErrorPopup-title": "Neplatný WIP Limit",
"wipLimitErrorPopup-dialog-pt1": "Počet úkolů v tomto sloupci je vyšší než definovaný WIP limit.",
@@ -498,7 +517,7 @@
"OS_Totalmem": "OS Celková paměť",
"OS_Type": "Typ OS",
"OS_Uptime": "OS Doba běhu systému",
- "days": "days",
+ "days": "dní",
"hours": "hodin",
"minutes": "minut",
"seconds": "sekund",
@@ -519,10 +538,10 @@
"card-end-on": "Končí v",
"editCardReceivedDatePopup-title": "Změnit datum přijetí",
"editCardEndDatePopup-title": "Změnit datum konce",
- "setCardColorPopup-title": "Set color",
- "setCardActionsColorPopup-title": "Choose a color",
- "setSwimlaneColorPopup-title": "Choose a color",
- "setListColorPopup-title": "Choose a color",
+ "setCardColorPopup-title": "Nastav barvu",
+ "setCardActionsColorPopup-title": "Vyber barvu",
+ "setSwimlaneColorPopup-title": "Vyber barvu",
+ "setListColorPopup-title": "Vyber barvu",
"assigned-by": "Přidělil(a)",
"requested-by": "Vyžádal(a)",
"board-delete-notice": "Smazání je trvalé. Přijdete o všechny sloupce, karty a akce spojené s tímto tablem.",
@@ -535,7 +554,7 @@
"subtask-settings": "Nastavení podúkolů",
"boardSubtaskSettingsPopup-title": "Nastavení podúkolů tabla",
"show-subtasks-field": "Karty mohou mít podúkoly",
- "deposit-subtasks-board": "Deposit subtasks to this board:",
+ "deposit-subtasks-board": "Vložit podúkoly do tohoto tabla",
"deposit-subtasks-list": "Landing list for subtasks deposited here:",
"show-parent-in-minicard": "Ukázat předka na minikartě",
"prefix-with-full-path": "Prefix s celou cestou",
@@ -552,6 +571,8 @@
"activity-added-label-card": "přidán štítek '%s'",
"activity-removed-label-card": "odstraněn štítek '%s'",
"activity-delete-attach-card": "odstraněna příloha",
+ "activity-set-customfield": "set custom field '%s' to '%s' in %s",
+ "activity-unset-customfield": "unset custom field '%s' in %s",
"r-rule": "Pravidlo",
"r-add-trigger": "Přidat spoštěč",
"r-add-action": "Přidat akci",
@@ -590,8 +611,8 @@
"r-checked": "Zaškrtnuto",
"r-unchecked": "Odškrtnuto",
"r-move-card-to": "Přesunout kartu do",
- "r-top-of": "Top of",
- "r-bottom-of": "Bottom of",
+ "r-top-of": "Začátek",
+ "r-bottom-of": "Spodek",
"r-its-list": "toho sloupce",
"r-archive": "Přesunout do archivu",
"r-unarchive": "Obnovit z archivu",
@@ -601,7 +622,7 @@
"r-label": "štítek",
"r-member": "člen",
"r-remove-all": "Odstranit všechny členy z této karty",
- "r-set-color": "Set color to",
+ "r-set-color": "Nastav barvu na",
"r-checklist": "zaškrtávací seznam",
"r-check-all": "Zaškrtnout vše",
"r-uncheck-all": "Odškrtnout vše",
@@ -654,12 +675,12 @@
"authentication-method": "Metoda autentizace",
"authentication-type": "Typ autentizace",
"custom-product-name": "Vlastní název produktu",
- "layout": "uspořádání",
+ "layout": "Uspořádání",
"hide-logo": "Skrýt logo",
- "add-custom-html-after-body-start": "Add Custom HTML after <body> start",
- "add-custom-html-before-body-end": "Add Custom HTML before </body> end",
+ "add-custom-html-after-body-start": "Přidej vlastní HTML za <body>",
+ "add-custom-html-before-body-end": "Přidej vlastní HTML před </body>",
"error-undefined": "Něco se pokazilo",
"error-ldap-login": "Během přihlašování nastala chyba",
- "display-authentication-method": "Display Authentication Method",
- "default-authentication-method": "Default Authentication Method"
+ "display-authentication-method": "Zobraz způsob ověřování",
+ "default-authentication-method": "Zobraz způsob ověřování"
} \ No newline at end of file
diff --git a/i18n/da.i18n.json b/i18n/da.i18n.json
index 656de729..00df0fdb 100644
--- a/i18n/da.i18n.json
+++ b/i18n/da.i18n.json
@@ -1,28 +1,41 @@
{
"accept": "Accepter",
"act-activity-notify": "Activity Notification",
- "act-addAttachment": "tilføjede__vedhæftet fil__ til __kort__",
- "act-addSubtask": "tilføjede delopgave __tjekliste__ til __kort__",
- "act-addChecklist": "tilføjede tjekliste__tjekliste__ til __kort__",
- "act-addChecklistItem": "tilføjede__tjeklistePunkt__ til tjekliste__tjekliste__ til__kort__",
- "act-addComment": "commented on __card__: __comment__",
- "act-createBoard": "created __board__",
- "act-createCard": "added __card__ to __list__",
- "act-createCustomField": "created custom field __customField__",
- "act-createList": "added __list__ to __board__",
- "act-addBoardMember": "added __member__ to __board__",
- "act-archivedBoard": "__board__ moved to Archive",
- "act-archivedCard": "__card__ moved to Archive",
- "act-archivedList": "__list__ moved to Archive",
- "act-archivedSwimlane": "__swimlane__ moved to Archive",
- "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-addAttachment": "added attachment __attachment__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-deleteAttachment": "deleted attachment __attachment__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-addSubtask": "added subtask __subtask__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-addLabel": "Added label __label__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-addedLabel": "Added label __label__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-removeLabel": "Removed label __label__ from card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-removedLabel": "Removed label __label__ from card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-addChecklist": "added checklist __checklist__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-addChecklistItem": "added checklist item __checklistItem__ to checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-removeChecklist": "removed checklist __checklist__ from card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-removeChecklistItem": "removed checklist item __checklistItem__ from checklist __checkList__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-checkedItem": "checked __checklistItem__ of checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-uncheckedItem": "unchecked __checklistItem__ of checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-completeChecklist": "completed checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-uncompleteChecklist": "uncompleted checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-addComment": "commented on card __card__: __comment__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-createBoard": "created board __board__",
+ "act-createSwimlane": "created swimlane __swimlane__ to board __board__",
+ "act-createCard": "created card __card__ to list __list__ at swimlane __swimlane__ at board __board__",
+ "act-createCustomField": "created custom field __customField__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-createList": "added list __list__ to board __board__",
+ "act-addBoardMember": "added member __member__ to board __board__",
+ "act-archivedBoard": "Board __board__ moved to Archive",
+ "act-archivedCard": "Card __card__ at list __list__ at swimlane __swimlane__ at board __board__ moved to Archive",
+ "act-archivedList": "List __list__ at swimlane __swimlane__ at board __board__ moved to Archive",
+ "act-archivedSwimlane": "Swimlane __swimlane__ at board __board__ moved to Archive",
+ "act-importBoard": "imported board __board__",
+ "act-importCard": "imported card __card__ to list __list__ at swimlane __swimlane__ at board __board__",
+ "act-importList": "imported list __list__ to swimlane __swimlane__ at board __board__",
+ "act-joinMember": "added member __member__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-moveCard": "moved card __card__ at board __board__ from list __oldList__ at swimlane __oldSwimlane__ to list __list__ at swimlane __swimlane__",
+ "act-moveCardToOtherBoard": "moved card __card__ from list __oldList__ at swimlane __oldSwimlane__ at board __oldBoard__ to list __list__ at swimlane __swimlane__ at board __board__",
+ "act-removeBoardMember": "removed member __member__ from board __board__",
+ "act-restoredCard": "restored card __card__ to list __list__ at swimlane __swimlane__ at board __board__",
+ "act-unjoinMember": "removed member __member__ from card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
"act-withBoardTitle": "__board__",
"act-withCardTitle": "[__board__] __card__",
"actions": "Actions",
@@ -47,14 +60,14 @@
"activity-unchecked-item": "unchecked %s in checklist %s of %s",
"activity-checklist-added": "added checklist to %s",
"activity-checklist-removed": "removed a checklist from %s",
- "activity-checklist-completed": "completed the checklist %s of %s",
+ "activity-checklist-completed": "completed checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
"activity-checklist-uncompleted": "uncompleted the checklist %s of %s",
"activity-checklist-item-added": "added checklist item to '%s' in %s",
"activity-checklist-item-removed": "removed a checklist item from '%s' in %s",
"add": "Add",
"activity-checked-item-card": "checked %s in checklist %s",
"activity-unchecked-item-card": "unchecked %s in checklist %s",
- "activity-checklist-completed-card": "completed the checklist %s",
+ "activity-checklist-completed-card": "completed checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
"activity-checklist-uncompleted-card": "uncompleted the checklist %s",
"add-attachment": "Add Attachment",
"add-board": "Add Board",
@@ -92,6 +105,8 @@
"restore-board": "Restore Board",
"no-archived-boards": "No Boards in Archive.",
"archives": "Archive",
+ "template": "Template",
+ "templates": "Templates",
"assign-member": "Assign member",
"attached": "attached",
"attachment": "Attachment",
@@ -110,7 +125,7 @@
"boardChangeTitlePopup-title": "Rename Board",
"boardChangeVisibilityPopup-title": "Change Visibility",
"boardChangeWatchPopup-title": "Change Watch",
- "boardMenuPopup-title": "Board Menu",
+ "boardMenuPopup-title": "Board Settings",
"boards": "Boards",
"board-view": "Board View",
"board-view-cal": "Calendar",
@@ -143,6 +158,7 @@
"cardLabelsPopup-title": "Labels",
"cardMembersPopup-title": "Members",
"cardMorePopup-title": "More",
+ "cardTemplatePopup-title": "Create template",
"cards": "Cards",
"cards-count": "Cards",
"casSignIn": "Sign In with CAS",
@@ -204,7 +220,7 @@
"confirm-checklist-delete-dialog": "Are you sure you want to delete checklist?",
"copy-card-link-to-clipboard": "Copy card link to clipboard",
"linkCardPopup-title": "Link Card",
- "searchCardPopup-title": "Search Card",
+ "searchElementPopup-title": "Search",
"copyCardPopup-title": "Copy Card",
"copyChecklistToManyCardsPopup-title": "Copy Checklist Template to Many Cards",
"copyChecklistToManyCardsPopup-instructions": "Destination Card Titles and Descriptions in this JSON format",
@@ -453,6 +469,9 @@
"welcome-swimlane": "Milestone 1",
"welcome-list1": "Basics",
"welcome-list2": "Advanced",
+ "card-templates-swimlane": "Card Templates",
+ "list-templates-swimlane": "List Templates",
+ "board-templates-swimlane": "Board Templates",
"what-to-do": "What do you want to do?",
"wipLimitErrorPopup-title": "Invalid WIP Limit",
"wipLimitErrorPopup-dialog-pt1": "The number of tasks in this list is higher than the WIP limit you've defined.",
@@ -552,6 +571,8 @@
"activity-added-label-card": "added label '%s'",
"activity-removed-label-card": "removed label '%s'",
"activity-delete-attach-card": "deleted an attachment",
+ "activity-set-customfield": "set custom field '%s' to '%s' in %s",
+ "activity-unset-customfield": "unset custom field '%s' in %s",
"r-rule": "Rule",
"r-add-trigger": "Add trigger",
"r-add-action": "Add action",
diff --git a/i18n/de.i18n.json b/i18n/de.i18n.json
index 84141731..babd12c9 100644
--- a/i18n/de.i18n.json
+++ b/i18n/de.i18n.json
@@ -1,28 +1,41 @@
{
"accept": "Akzeptieren",
"act-activity-notify": "Aktivitätsbenachrichtigung",
- "act-addAttachment": "hat __attachment__ an __card__ angehängt",
- "act-addSubtask": "hat die Teilaufgabe __checklist__ zu __card__ hinzugefügt",
- "act-addChecklist": "hat die Checkliste __checklist__ zu __card__ hinzugefügt",
- "act-addChecklistItem": "hat __checklistItem__ zur Checkliste __checklist__ in __card__ hinzugefügt",
- "act-addComment": "hat __card__ kommentiert: __comment__",
- "act-createBoard": "hat __board__ erstellt",
- "act-createCard": "hat __card__ zu __list__ hinzugefügt",
- "act-createCustomField": "benutzerdefiniertes Feld __customField__ angelegt",
- "act-createList": "hat __list__ zu __board__ hinzugefügt",
- "act-addBoardMember": "hat __member__ zu __board__ hinzugefügt",
- "act-archivedBoard": "__board__ ins Archiv verschoben",
- "act-archivedCard": "__card__ ins Archiv verschoben",
- "act-archivedList": "__list__ ins Archiv verschoben",
- "act-archivedSwimlane": "__swimlane__ ins Archiv verschoben",
- "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-addAttachment": "hat Anhang __attachment__ zur Karte __card__ auf der Liste __list__ in Swimlane __swimlane__ in Board __board__ hinzugefügt",
+ "act-deleteAttachment": "hat Anhang __attachment__ von Karte __card__ auf der Liste __list__ in Swimlane __swimlane__ in Board __board__ gelöscht",
+ "act-addSubtask": "hat Teilaufgabe __subtask__ zur Karte __card__ auf der Liste __list__ in Swimlane __swimlane__ in Board __board__ hinzugefügt",
+ "act-addLabel": "hat Label __label__ zur Karte __card__ auf der Liste __list__ in Swimlane __swimlane__ in Board __board__ hinzugefügt",
+ "act-addedLabel": "hat Label __label__ zur Karte __card__ auf der Liste __list__ in Swimlane __swimlane__ in Board __board__ hinzugefügt",
+ "act-removeLabel": "hat Label __label__ von Karte __card__ auf der Liste __list__ in Swimlane __swimlane__ in Board __board__ entfernt",
+ "act-removedLabel": "hat Label __label__ von Karte __card__ auf der Liste __list__ in Swimlane __swimlane__ in Board __board__ entfernt",
+ "act-addChecklist": "hat Checkliste __checklist__ zur Karte __card__ auf der Liste __list__ in Swimlane __swimlane__ in Board __board__ hinzugefügt",
+ "act-addChecklistItem": "hat Checklistenposition __checklistItem__ zu Checkliste __checkList__ auf der Karte __card__ auf der Liste __list__ in Swimlane __swimlane__ in Board __board__ hinzugefügt",
+ "act-removeChecklist": "hat Checkliste __checklist__ von Karte __card__ auf der Liste __list__ in Swimlane __swimlane__ in Board __board__ entfernt",
+ "act-removeChecklistItem": "hat Checklistenposition __checklistItem__ von Checkliste __checkList__ auf der Karte __card__ auf der Liste __list__ in Swimlane __swimlane__ in Board __board__ entfernt",
+ "act-checkedItem": "hat __checklistItem__ der Checkliste __checklist__ der Karte __card__ auf der Liste __list__ in Swimlane __swimlane__ in Board __board__ abgehakt",
+ "act-uncheckedItem": "hat Haken von __checklistItem__ der Checkliste __checklist__ der Karte __card__ auf der Liste __list__ in Swimlane __swimlane__ in Board __board__ entfernt",
+ "act-completeChecklist": "hat Checkliste __checklist__ der Karte __card__ auf der Liste __list__ in Swimlane __swimlane__ in Board __board__ vervollständigt",
+ "act-uncompleteChecklist": "hat Checkliste __checklist__ der Karte __card__ auf der Liste __list__ in Swimlane __swimlane__ in Board __board__ unvervollständigt",
+ "act-addComment": "hat Karte __card__ auf der Liste __list__ in Swimlane __swimlane__ in Board __board__ kommentiert: __comment__",
+ "act-createBoard": "hat Board __board__ erstellt",
+ "act-createSwimlane": "hat Swimlane __swimlane__ in Board __board__ erstellt",
+ "act-createCard": "hat Karte __card__ auf der Liste __list__ in Swimlane __swimlane__ in Board __board__ erstellt",
+ "act-createCustomField": "hat das benutzerdefinierte Feld __customField__ auf Karte __card__ auf der Liste __list__ in Swimlane __swimlane__ in Board __board__ erstellt",
+ "act-createList": "hat Liste __list__ zu Board __board__ hinzugefügt",
+ "act-addBoardMember": "hat Mitglied __member__ zu Board __board__ hinzugefügt",
+ "act-archivedBoard": "hat Board __board__ ins Archiv verschoben",
+ "act-archivedCard": "hat Karte __card__ von der Liste __list__ in Swimlane __swimlane__ in Board __board__ ins Archiv verschoben",
+ "act-archivedList": "hat Liste __list__ in Swimlane __swimlane__ in Board __board__ ins Archiv verschoben",
+ "act-archivedSwimlane": "hat Swimlane __swimlane__ von Board __board__ ins Archiv verschoben",
+ "act-importBoard": "hat Board __board__ importiert",
+ "act-importCard": "hat Karte __card__ in Liste __list__ in Swimlane __swimlane__ in Board __board__ importiert",
+ "act-importList": "hat Liste __list__ in Swimlane __swimlane__ in Board __board__ importiert",
+ "act-joinMember": "hat Mitglied __member__ zur Karte __card__ auf der Liste __list__ in Swimlane __swimlane__ in Board __board__ hinzugefügt",
+ "act-moveCard": "hat Karte __card__ in Board __board__ von Liste __oldList__ in Swimlane __oldSwimlane__ zu Liste __list__ in Swimlane __swimlane__ verschoben",
+ "act-moveCardToOtherBoard": "hat Karte __card__ von Liste __oldList__ in Swimlane __oldSwimlane__ in Board __oldBoard__ zu Liste __list__ in Swimlane __swimlane__ in Board __board__ verschoben",
+ "act-removeBoardMember": "hat Mitglied __member__ von Board __board__ entfernt",
+ "act-restoredCard": "hat Karte __card__ auf der Liste __list__ in Swimlane __swimlane__ in Board __board__ wiederhergestellt",
+ "act-unjoinMember": "hat Mitglied __member__ von Karte __card__ auf der Liste __list__ in Swimlane __swimlane__ in Board __board__ entfernt",
"act-withBoardTitle": "__board__",
"act-withCardTitle": "[__board__] __card__",
"actions": "Aktionen",
@@ -43,18 +56,18 @@
"activity-sent": "hat %s an %s gesendet",
"activity-unjoined": "hat %s verlassen",
"activity-subtask-added": "Teilaufgabe zu %s hinzugefügt",
- "activity-checked-item": "markierte %s in Checkliste %svon %s",
+ "activity-checked-item": "markierte %s in Checkliste %s von %s",
"activity-unchecked-item": "hat %s in Checkliste %s von %s abgewählt",
"activity-checklist-added": "hat eine Checkliste zu %s hinzugefügt",
"activity-checklist-removed": "entfernte eine Checkliste von %s",
- "activity-checklist-completed": "vervollständigte die Checkliste %s von %s",
+ "activity-checklist-completed": "hat Checkliste __checklist__ der Karte __card__ auf der Liste __list__ in Swimlane __swimlane__ in Board __board__ vervollständigt",
"activity-checklist-uncompleted": "unvervollständigte die Checkliste %s von %s",
"activity-checklist-item-added": "hat ein Checklistenelement zu '%s' in %s hinzugefügt",
"activity-checklist-item-removed": "hat ein Checklistenelement von '%s' in %s entfernt",
"add": "Hinzufügen",
"activity-checked-item-card": "markiere %s in Checkliste %s",
"activity-unchecked-item-card": "hat %s in Checkliste %s abgewählt",
- "activity-checklist-completed-card": "vervollständigte die Checkliste %s",
+ "activity-checklist-completed-card": "hat Checkliste __checklist__ der Karte __card__ auf der Liste __list__ in Swimlane __swimlane__ in Board __board__ vervollständigt",
"activity-checklist-uncompleted-card": "unvervollständigte die Checkliste %s",
"add-attachment": "Datei anhängen",
"add-board": "neues Board",
@@ -92,6 +105,8 @@
"restore-board": "Board wiederherstellen",
"no-archived-boards": "Keine Boards im Archiv.",
"archives": "Archiv",
+ "template": "Vorlage",
+ "templates": "Vorlagen",
"assign-member": "Mitglied zuweisen",
"attached": "angehängt",
"attachment": "Anhang",
@@ -110,7 +125,7 @@
"boardChangeTitlePopup-title": "Board umbenennen",
"boardChangeVisibilityPopup-title": "Sichtbarkeit ändern",
"boardChangeWatchPopup-title": "Beobachtung ändern",
- "boardMenuPopup-title": "Boardmenü",
+ "boardMenuPopup-title": "Boardeinstellungen",
"boards": "Boards",
"board-view": "Boardansicht",
"board-view-cal": "Kalender",
@@ -143,6 +158,7 @@
"cardLabelsPopup-title": "Labels",
"cardMembersPopup-title": "Mitglieder",
"cardMorePopup-title": "Mehr",
+ "cardTemplatePopup-title": "Vorlage erstellen",
"cards": "Karten",
"cards-count": "Karten",
"casSignIn": "Mit CAS anmelden",
@@ -204,7 +220,7 @@
"confirm-checklist-delete-dialog": "Wollen Sie die Checkliste wirklich löschen?",
"copy-card-link-to-clipboard": "Kopiere Link zur Karte in die Zwischenablage",
"linkCardPopup-title": "Karte verknüpfen",
- "searchCardPopup-title": "Karte suchen",
+ "searchElementPopup-title": "Suche",
"copyCardPopup-title": "Karte kopieren",
"copyChecklistToManyCardsPopup-title": "Checklistenvorlage in mehrere Karten kopieren",
"copyChecklistToManyCardsPopup-instructions": "Titel und Beschreibungen der Zielkarten im folgenden JSON-Format",
@@ -453,6 +469,9 @@
"welcome-swimlane": "Meilenstein 1",
"welcome-list1": "Grundlagen",
"welcome-list2": "Fortgeschritten",
+ "card-templates-swimlane": "Kartenvorlagen",
+ "list-templates-swimlane": "Listenvorlagen",
+ "board-templates-swimlane": "Boardvorlagen",
"what-to-do": "Was wollen Sie tun?",
"wipLimitErrorPopup-title": "Ungültiges WIP-Limit",
"wipLimitErrorPopup-dialog-pt1": "Die Anzahl von Aufgaben in dieser Liste ist größer als das von Ihnen definierte WIP-Limit.",
@@ -552,19 +571,21 @@
"activity-added-label-card": "Label hinzugefügt '%s'",
"activity-removed-label-card": "Label entfernt '%s'",
"activity-delete-attach-card": "hat einen Anhang gelöscht",
+ "activity-set-customfield": "setze benutzerdefiniertes Feld '%s' zu '%s' in %s",
+ "activity-unset-customfield": "entferne benutzerdefiniertes Feld '%s' in %s",
"r-rule": "Regel",
"r-add-trigger": "Auslöser hinzufügen",
"r-add-action": "Aktion hinzufügen",
- "r-board-rules": "Board Regeln",
+ "r-board-rules": "Boardregeln",
"r-add-rule": "Regel hinzufügen",
"r-view-rule": "Regel anzeigen",
"r-delete-rule": "Regel löschen",
"r-new-rule-name": "Neuer Regeltitel",
"r-no-rules": "Keine Regeln",
- "r-when-a-card": "Wenn eine Karte",
- "r-is": "ist",
+ "r-when-a-card": "Wenn Karte",
+ "r-is": "wird",
"r-is-moved": "verschoben wird",
- "r-added-to": "hinzugefügt wird zu",
+ "r-added-to": "hinzugefügt zu",
"r-removed-from": "Entfernt von",
"r-the-board": "das Board",
"r-list": "Liste",
diff --git a/i18n/el.i18n.json b/i18n/el.i18n.json
index adfd19f2..2f619693 100644
--- a/i18n/el.i18n.json
+++ b/i18n/el.i18n.json
@@ -1,28 +1,41 @@
{
"accept": "Accept",
"act-activity-notify": "Activity Notification",
- "act-addAttachment": "attached __attachment__ to __card__",
- "act-addSubtask": "added subtask __checklist__ to __card__",
- "act-addChecklist": "added checklist __checklist__ to __card__",
- "act-addChecklistItem": "added __checklistItem__ to checklist __checklist__ on __card__",
- "act-addComment": "commented on __card__: __comment__",
- "act-createBoard": "created __board__",
- "act-createCard": "added __card__ to __list__",
- "act-createCustomField": "created custom field __customField__",
- "act-createList": "added __list__ to __board__",
- "act-addBoardMember": "added __member__ to __board__",
- "act-archivedBoard": "__board__ moved to Archive",
- "act-archivedCard": "__card__ moved to Archive",
- "act-archivedList": "__list__ moved to Archive",
- "act-archivedSwimlane": "__swimlane__ moved to Archive",
- "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-addAttachment": "added attachment __attachment__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-deleteAttachment": "deleted attachment __attachment__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-addSubtask": "added subtask __subtask__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-addLabel": "Added label __label__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-addedLabel": "Added label __label__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-removeLabel": "Removed label __label__ from card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-removedLabel": "Removed label __label__ from card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-addChecklist": "added checklist __checklist__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-addChecklistItem": "added checklist item __checklistItem__ to checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-removeChecklist": "removed checklist __checklist__ from card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-removeChecklistItem": "removed checklist item __checklistItem__ from checklist __checkList__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-checkedItem": "checked __checklistItem__ of checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-uncheckedItem": "unchecked __checklistItem__ of checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-completeChecklist": "completed checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-uncompleteChecklist": "uncompleted checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-addComment": "commented on card __card__: __comment__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-createBoard": "created board __board__",
+ "act-createSwimlane": "created swimlane __swimlane__ to board __board__",
+ "act-createCard": "created card __card__ to list __list__ at swimlane __swimlane__ at board __board__",
+ "act-createCustomField": "created custom field __customField__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-createList": "added list __list__ to board __board__",
+ "act-addBoardMember": "added member __member__ to board __board__",
+ "act-archivedBoard": "Board __board__ moved to Archive",
+ "act-archivedCard": "Card __card__ at list __list__ at swimlane __swimlane__ at board __board__ moved to Archive",
+ "act-archivedList": "List __list__ at swimlane __swimlane__ at board __board__ moved to Archive",
+ "act-archivedSwimlane": "Swimlane __swimlane__ at board __board__ moved to Archive",
+ "act-importBoard": "imported board __board__",
+ "act-importCard": "imported card __card__ to list __list__ at swimlane __swimlane__ at board __board__",
+ "act-importList": "imported list __list__ to swimlane __swimlane__ at board __board__",
+ "act-joinMember": "added member __member__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-moveCard": "moved card __card__ at board __board__ from list __oldList__ at swimlane __oldSwimlane__ to list __list__ at swimlane __swimlane__",
+ "act-moveCardToOtherBoard": "moved card __card__ from list __oldList__ at swimlane __oldSwimlane__ at board __oldBoard__ to list __list__ at swimlane __swimlane__ at board __board__",
+ "act-removeBoardMember": "removed member __member__ from board __board__",
+ "act-restoredCard": "restored card __card__ to list __list__ at swimlane __swimlane__ at board __board__",
+ "act-unjoinMember": "removed member __member__ from card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
"act-withBoardTitle": "__board__",
"act-withCardTitle": "[__board__] __card__",
"actions": "Actions",
@@ -47,14 +60,14 @@
"activity-unchecked-item": "unchecked %s in checklist %s of %s",
"activity-checklist-added": "added checklist to %s",
"activity-checklist-removed": "removed a checklist from %s",
- "activity-checklist-completed": "completed the checklist %s of %s",
+ "activity-checklist-completed": "completed checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
"activity-checklist-uncompleted": "uncompleted the checklist %s of %s",
"activity-checklist-item-added": "added checklist item to '%s' in %s",
"activity-checklist-item-removed": "removed a checklist item from '%s' in %s",
"add": "Προσθήκη",
"activity-checked-item-card": "checked %s in checklist %s",
"activity-unchecked-item-card": "unchecked %s in checklist %s",
- "activity-checklist-completed-card": "completed the checklist %s",
+ "activity-checklist-completed-card": "completed checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
"activity-checklist-uncompleted-card": "uncompleted the checklist %s",
"add-attachment": "Add Attachment",
"add-board": "Add Board",
@@ -92,6 +105,8 @@
"restore-board": "Restore Board",
"no-archived-boards": "No Boards in Archive.",
"archives": "Archive",
+ "template": "Template",
+ "templates": "Templates",
"assign-member": "Assign member",
"attached": "attached",
"attachment": "Attachment",
@@ -110,7 +125,7 @@
"boardChangeTitlePopup-title": "Rename Board",
"boardChangeVisibilityPopup-title": "Change Visibility",
"boardChangeWatchPopup-title": "Change Watch",
- "boardMenuPopup-title": "Board Menu",
+ "boardMenuPopup-title": "Board Settings",
"boards": "Boards",
"board-view": "Board View",
"board-view-cal": "Calendar",
@@ -143,6 +158,7 @@
"cardLabelsPopup-title": "Ετικέτες",
"cardMembersPopup-title": "Μέλοι",
"cardMorePopup-title": "Περισσότερα",
+ "cardTemplatePopup-title": "Create template",
"cards": "Κάρτες",
"cards-count": "Κάρτες",
"casSignIn": "Sign In with CAS",
@@ -204,7 +220,7 @@
"confirm-checklist-delete-dialog": "Are you sure you want to delete checklist?",
"copy-card-link-to-clipboard": "Copy card link to clipboard",
"linkCardPopup-title": "Link Card",
- "searchCardPopup-title": "Search Card",
+ "searchElementPopup-title": "Αναζήτηση",
"copyCardPopup-title": "Copy Card",
"copyChecklistToManyCardsPopup-title": "Copy Checklist Template to Many Cards",
"copyChecklistToManyCardsPopup-instructions": "Destination Card Titles and Descriptions in this JSON format",
@@ -453,6 +469,9 @@
"welcome-swimlane": "Milestone 1",
"welcome-list1": "Basics",
"welcome-list2": "Advanced",
+ "card-templates-swimlane": "Card Templates",
+ "list-templates-swimlane": "List Templates",
+ "board-templates-swimlane": "Board Templates",
"what-to-do": "What do you want to do?",
"wipLimitErrorPopup-title": "Invalid WIP Limit",
"wipLimitErrorPopup-dialog-pt1": "The number of tasks in this list is higher than the WIP limit you've defined.",
@@ -552,6 +571,8 @@
"activity-added-label-card": "added label '%s'",
"activity-removed-label-card": "removed label '%s'",
"activity-delete-attach-card": "deleted an attachment",
+ "activity-set-customfield": "set custom field '%s' to '%s' in %s",
+ "activity-unset-customfield": "unset custom field '%s' in %s",
"r-rule": "Rule",
"r-add-trigger": "Add trigger",
"r-add-action": "Add action",
diff --git a/i18n/en-GB.i18n.json b/i18n/en-GB.i18n.json
index 04bb2bac..00b76869 100644
--- a/i18n/en-GB.i18n.json
+++ b/i18n/en-GB.i18n.json
@@ -1,28 +1,41 @@
{
"accept": "Accept",
"act-activity-notify": "Activity Notification",
- "act-addAttachment": "attached _ attachment _ to _ card _",
- "act-addSubtask": "added subtask __checklist__ to __card__",
- "act-addChecklist": "added checklist __checklist__ to __card__",
- "act-addChecklistItem": "added __checklistItem__ to checklist __checklist__ on __card__",
- "act-addComment": "commented on __card__: __comment__",
- "act-createBoard": "created __board__",
- "act-createCard": "added __card__ to __list__",
- "act-createCustomField": "created custom field __customField__",
- "act-createList": "added __list__ to __board__",
- "act-addBoardMember": "added __member__ to __board__",
- "act-archivedBoard": "__board__ moved to Archive",
- "act-archivedCard": "__card__ moved to Archive",
- "act-archivedList": "__list__ moved to Archive",
- "act-archivedSwimlane": "__swimlane__ moved to Archive",
- "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-addAttachment": "added attachment __attachment__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-deleteAttachment": "deleted attachment __attachment__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-addSubtask": "added subtask __subtask__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-addLabel": "Added label __label__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-addedLabel": "Added label __label__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-removeLabel": "Removed label __label__ from card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-removedLabel": "Removed label __label__ from card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-addChecklist": "added checklist __checklist__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-addChecklistItem": "added checklist item __checklistItem__ to checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-removeChecklist": "removed checklist __checklist__ from card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-removeChecklistItem": "removed checklist item __checklistItem__ from checklist __checkList__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-checkedItem": "checked __checklistItem__ of checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-uncheckedItem": "unchecked __checklistItem__ of checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-completeChecklist": "completed checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-uncompleteChecklist": "uncompleted checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-addComment": "commented on card __card__: __comment__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-createBoard": "created board __board__",
+ "act-createSwimlane": "created swimlane __swimlane__ to board __board__",
+ "act-createCard": "created card __card__ to list __list__ at swimlane __swimlane__ at board __board__",
+ "act-createCustomField": "created custom field __customField__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-createList": "added list __list__ to board __board__",
+ "act-addBoardMember": "added member __member__ to board __board__",
+ "act-archivedBoard": "Board __board__ moved to Archive",
+ "act-archivedCard": "Card __card__ at list __list__ at swimlane __swimlane__ at board __board__ moved to Archive",
+ "act-archivedList": "List __list__ at swimlane __swimlane__ at board __board__ moved to Archive",
+ "act-archivedSwimlane": "Swimlane __swimlane__ at board __board__ moved to Archive",
+ "act-importBoard": "imported board __board__",
+ "act-importCard": "imported card __card__ to list __list__ at swimlane __swimlane__ at board __board__",
+ "act-importList": "imported list __list__ to swimlane __swimlane__ at board __board__",
+ "act-joinMember": "added member __member__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-moveCard": "moved card __card__ at board __board__ from list __oldList__ at swimlane __oldSwimlane__ to list __list__ at swimlane __swimlane__",
+ "act-moveCardToOtherBoard": "moved card __card__ from list __oldList__ at swimlane __oldSwimlane__ at board __oldBoard__ to list __list__ at swimlane __swimlane__ at board __board__",
+ "act-removeBoardMember": "removed member __member__ from board __board__",
+ "act-restoredCard": "restored card __card__ to list __list__ at swimlane __swimlane__ at board __board__",
+ "act-unjoinMember": "removed member __member__ from card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
"act-withBoardTitle": "__board__",
"act-withCardTitle": "[__board__] __card__",
"actions": "Actions",
@@ -47,14 +60,14 @@
"activity-unchecked-item": "unchecked %s in checklist %s of %s",
"activity-checklist-added": "added checklist to %s",
"activity-checklist-removed": "removed a checklist from %s",
- "activity-checklist-completed": "completed the checklist %s of %s",
+ "activity-checklist-completed": "completed checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
"activity-checklist-uncompleted": "uncompleted the checklist %s of %s",
"activity-checklist-item-added": "added checklist item to '%s' in %s",
"activity-checklist-item-removed": "removed a checklist item from '%s' in %s",
"add": "Add",
"activity-checked-item-card": "checked %s in checklist %s",
"activity-unchecked-item-card": "unchecked %s in checklist %s",
- "activity-checklist-completed-card": "completed the checklist %s",
+ "activity-checklist-completed-card": "completed checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
"activity-checklist-uncompleted-card": "uncompleted the checklist %s",
"add-attachment": "Add Attachment",
"add-board": "Add Board",
@@ -92,6 +105,8 @@
"restore-board": "Restore Board",
"no-archived-boards": "No Boards in Archive.",
"archives": "Archive",
+ "template": "Template",
+ "templates": "Templates",
"assign-member": "Assign member",
"attached": "attached",
"attachment": "Attachment",
@@ -110,7 +125,7 @@
"boardChangeTitlePopup-title": "Rename Board",
"boardChangeVisibilityPopup-title": "Change Visibility",
"boardChangeWatchPopup-title": "Change Watch",
- "boardMenuPopup-title": "Board Menu",
+ "boardMenuPopup-title": "Board Settings",
"boards": "Boards",
"board-view": "Board View",
"board-view-cal": "Calendar",
@@ -143,6 +158,7 @@
"cardLabelsPopup-title": "Labels",
"cardMembersPopup-title": "Members",
"cardMorePopup-title": "More",
+ "cardTemplatePopup-title": "Create template",
"cards": "Cards",
"cards-count": "Cards",
"casSignIn": "Sign In with CAS",
@@ -204,7 +220,7 @@
"confirm-checklist-delete-dialog": "Are you sure you want to delete checklist?",
"copy-card-link-to-clipboard": "Copy card link to clipboard",
"linkCardPopup-title": "Link Card",
- "searchCardPopup-title": "Search Card",
+ "searchElementPopup-title": "Search",
"copyCardPopup-title": "Copy Card",
"copyChecklistToManyCardsPopup-title": "Copy Checklist Template to Many Cards",
"copyChecklistToManyCardsPopup-instructions": "Destination Card Titles and Descriptions in this JSON format",
@@ -453,6 +469,9 @@
"welcome-swimlane": "Milestone 1",
"welcome-list1": "Basics",
"welcome-list2": "Advanced",
+ "card-templates-swimlane": "Card Templates",
+ "list-templates-swimlane": "List Templates",
+ "board-templates-swimlane": "Board Templates",
"what-to-do": "What do you want to do?",
"wipLimitErrorPopup-title": "Invalid WIP Limit",
"wipLimitErrorPopup-dialog-pt1": "The number of tasks in this list is higher than the WIP limit you've defined.",
@@ -552,6 +571,8 @@
"activity-added-label-card": "added label '%s'",
"activity-removed-label-card": "removed label '%s'",
"activity-delete-attach-card": "deleted an attachment",
+ "activity-set-customfield": "set custom field '%s' to '%s' in %s",
+ "activity-unset-customfield": "unset custom field '%s' in %s",
"r-rule": "Rule",
"r-add-trigger": "Add trigger",
"r-add-action": "Add action",
diff --git a/i18n/en.i18n.json b/i18n/en.i18n.json
index 84975fde..5217127e 100644
--- a/i18n/en.i18n.json
+++ b/i18n/en.i18n.json
@@ -1,28 +1,41 @@
{
"accept": "Accept",
"act-activity-notify": "Activity Notification",
- "act-addAttachment": "attached __attachment__ to __card__",
- "act-addSubtask": "added subtask __checklist__ to __card__",
- "act-addChecklist": "added checklist __checklist__ to __card__",
- "act-addChecklistItem": "added __checklistItem__ to checklist __checklist__ on __card__",
- "act-addComment": "commented on __card__: __comment__",
- "act-createBoard": "created __board__",
- "act-createCard": "added __card__ to __list__",
- "act-createCustomField": "created custom field __customField__",
- "act-createList": "added __list__ to __board__",
- "act-addBoardMember": "added __member__ to __board__",
- "act-archivedBoard": "__board__ moved to Archive",
- "act-archivedCard": "__card__ moved to Archive",
- "act-archivedList": "__list__ moved to Archive",
- "act-archivedSwimlane": "__swimlane__ moved to Archive",
- "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-addAttachment": "added attachment __attachment__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-deleteAttachment": "deleted attachment __attachment__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-addSubtask": "added subtask __subtask__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-addLabel": "Added label __label__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-addedLabel": "Added label __label__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-removeLabel": "Removed label __label__ from card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-removedLabel": "Removed label __label__ from card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-addChecklist": "added checklist __checklist__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-addChecklistItem": "added checklist item __checklistItem__ to checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-removeChecklist": "removed checklist __checklist__ from card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-removeChecklistItem": "removed checklist item __checklistItem__ from checklist __checkList__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-checkedItem": "checked __checklistItem__ of checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-uncheckedItem": "unchecked __checklistItem__ of checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-completeChecklist": "completed checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-uncompleteChecklist": "uncompleted checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-addComment": "commented on card __card__: __comment__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-createBoard": "created board __board__",
+ "act-createSwimlane": "created swimlane __swimlane__ to board __board__",
+ "act-createCard": "created card __card__ to list __list__ at swimlane __swimlane__ at board __board__",
+ "act-createCustomField": "created custom field __customField__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-createList": "added list __list__ to board __board__",
+ "act-addBoardMember": "added member __member__ to board __board__",
+ "act-archivedBoard": "Board __board__ moved to Archive",
+ "act-archivedCard": "Card __card__ at list __list__ at swimlane __swimlane__ at board __board__ moved to Archive",
+ "act-archivedList": "List __list__ at swimlane __swimlane__ at board __board__ moved to Archive",
+ "act-archivedSwimlane": "Swimlane __swimlane__ at board __board__ moved to Archive",
+ "act-importBoard": "imported board __board__",
+ "act-importCard": "imported card __card__ to list __list__ at swimlane __swimlane__ at board __board__",
+ "act-importList": "imported list __list__ to swimlane __swimlane__ at board __board__",
+ "act-joinMember": "added member __member__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-moveCard": "moved card __card__ at board __board__ from list __oldList__ at swimlane __oldSwimlane__ to list __list__ at swimlane __swimlane__",
+ "act-moveCardToOtherBoard": "moved card __card__ from list __oldList__ at swimlane __oldSwimlane__ at board __oldBoard__ to list __list__ at swimlane __swimlane__ at board __board__",
+ "act-removeBoardMember": "removed member __member__ from board __board__",
+ "act-restoredCard": "restored card __card__ to list __list__ at swimlane __swimlane__ at board __board__",
+ "act-unjoinMember": "removed member __member__ from card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
"act-withBoardTitle": "__board__",
"act-withCardTitle": "[__board__] __card__",
"actions": "Actions",
@@ -47,14 +60,14 @@
"activity-unchecked-item": "unchecked %s in checklist %s of %s",
"activity-checklist-added": "added checklist to %s",
"activity-checklist-removed": "removed a checklist from %s",
- "activity-checklist-completed": "completed the checklist %s of %s",
+ "activity-checklist-completed": "completed checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
"activity-checklist-uncompleted": "uncompleted the checklist %s of %s",
"activity-checklist-item-added": "added checklist item to '%s' in %s",
"activity-checklist-item-removed": "removed a checklist item from '%s' in %s",
"add": "Add",
"activity-checked-item-card": "checked %s in checklist %s",
"activity-unchecked-item-card": "unchecked %s in checklist %s",
- "activity-checklist-completed-card": "completed the checklist %s",
+ "activity-checklist-completed-card": "completed checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
"activity-checklist-uncompleted-card": "uncompleted the checklist %s",
"add-attachment": "Add Attachment",
"add-board": "Add Board",
@@ -92,6 +105,8 @@
"restore-board": "Restore Board",
"no-archived-boards": "No Boards in Archive.",
"archives": "Archive",
+ "template": "Template",
+ "templates": "Templates",
"assign-member": "Assign member",
"attached": "attached",
"attachment": "Attachment",
@@ -110,7 +125,7 @@
"boardChangeTitlePopup-title": "Rename Board",
"boardChangeVisibilityPopup-title": "Change Visibility",
"boardChangeWatchPopup-title": "Change Watch",
- "boardMenuPopup-title": "Board Menu",
+ "boardMenuPopup-title": "Board Settings",
"boards": "Boards",
"board-view": "Board View",
"board-view-cal": "Calendar",
@@ -143,6 +158,7 @@
"cardLabelsPopup-title": "Labels",
"cardMembersPopup-title": "Members",
"cardMorePopup-title": "More",
+ "cardTemplatePopup-title": "Create template",
"cards": "Cards",
"cards-count": "Cards",
"casSignIn" : "Sign In with CAS",
@@ -204,7 +220,7 @@
"confirm-checklist-delete-dialog": "Are you sure you want to delete checklist?",
"copy-card-link-to-clipboard": "Copy card link to clipboard",
"linkCardPopup-title": "Link Card",
- "searchCardPopup-title": "Search Card",
+ "searchElementPopup-title": "Search",
"copyCardPopup-title": "Copy Card",
"copyChecklistToManyCardsPopup-title": "Copy Checklist Template to Many Cards",
"copyChecklistToManyCardsPopup-instructions": "Destination Card Titles and Descriptions in this JSON format",
@@ -453,6 +469,9 @@
"welcome-swimlane": "Milestone 1",
"welcome-list1": "Basics",
"welcome-list2": "Advanced",
+ "card-templates-swimlane": "Card Templates",
+ "list-templates-swimlane": "List Templates",
+ "board-templates-swimlane": "Board Templates",
"what-to-do": "What do you want to do?",
"wipLimitErrorPopup-title": "Invalid WIP Limit",
"wipLimitErrorPopup-dialog-pt1": "The number of tasks in this list is higher than the WIP limit you've defined.",
@@ -552,6 +571,8 @@
"activity-added-label-card": "added label '%s'",
"activity-removed-label-card": "removed label '%s'",
"activity-delete-attach-card": "deleted an attachment",
+ "activity-set-customfield": "set custom field '%s' to '%s' in %s",
+ "activity-unset-customfield": "unset custom field '%s' in %s",
"r-rule": "Rule",
"r-add-trigger": "Add trigger",
"r-add-action": "Add action",
diff --git a/i18n/eo.i18n.json b/i18n/eo.i18n.json
index da1e9697..933f2a58 100644
--- a/i18n/eo.i18n.json
+++ b/i18n/eo.i18n.json
@@ -1,28 +1,41 @@
{
"accept": "Akcepti",
"act-activity-notify": "Activity Notification",
- "act-addAttachment": "attached __attachment__ to __card__",
- "act-addSubtask": "added subtask __checklist__ to __card__",
- "act-addChecklist": "added checklist __checklist__ to __card__",
- "act-addChecklistItem": "added __checklistItem__ to checklist __checklist__ on __card__",
- "act-addComment": "commented on __card__: __comment__",
- "act-createBoard": "Kreiis __board__",
- "act-createCard": "Aldonis __card__ al __list__",
- "act-createCustomField": "created custom field __customField__",
- "act-createList": "Aldonis __card__ al __board__",
- "act-addBoardMember": "Aldonis __member__ al __board__",
- "act-archivedBoard": "__board__ moved to Archive",
- "act-archivedCard": "__card__ moved to Archive",
- "act-archivedList": "__list__ moved to Archive",
- "act-archivedSwimlane": "__swimlane__ moved to Archive",
- "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-addAttachment": "added attachment __attachment__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-deleteAttachment": "deleted attachment __attachment__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-addSubtask": "added subtask __subtask__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-addLabel": "Added label __label__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-addedLabel": "Added label __label__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-removeLabel": "Removed label __label__ from card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-removedLabel": "Removed label __label__ from card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-addChecklist": "added checklist __checklist__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-addChecklistItem": "added checklist item __checklistItem__ to checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-removeChecklist": "removed checklist __checklist__ from card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-removeChecklistItem": "removed checklist item __checklistItem__ from checklist __checkList__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-checkedItem": "checked __checklistItem__ of checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-uncheckedItem": "unchecked __checklistItem__ of checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-completeChecklist": "completed checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-uncompleteChecklist": "uncompleted checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-addComment": "commented on card __card__: __comment__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-createBoard": "created board __board__",
+ "act-createSwimlane": "created swimlane __swimlane__ to board __board__",
+ "act-createCard": "created card __card__ to list __list__ at swimlane __swimlane__ at board __board__",
+ "act-createCustomField": "created custom field __customField__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-createList": "added list __list__ to board __board__",
+ "act-addBoardMember": "added member __member__ to board __board__",
+ "act-archivedBoard": "Board __board__ moved to Archive",
+ "act-archivedCard": "Card __card__ at list __list__ at swimlane __swimlane__ at board __board__ moved to Archive",
+ "act-archivedList": "List __list__ at swimlane __swimlane__ at board __board__ moved to Archive",
+ "act-archivedSwimlane": "Swimlane __swimlane__ at board __board__ moved to Archive",
+ "act-importBoard": "imported board __board__",
+ "act-importCard": "imported card __card__ to list __list__ at swimlane __swimlane__ at board __board__",
+ "act-importList": "imported list __list__ to swimlane __swimlane__ at board __board__",
+ "act-joinMember": "added member __member__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-moveCard": "moved card __card__ at board __board__ from list __oldList__ at swimlane __oldSwimlane__ to list __list__ at swimlane __swimlane__",
+ "act-moveCardToOtherBoard": "moved card __card__ from list __oldList__ at swimlane __oldSwimlane__ at board __oldBoard__ to list __list__ at swimlane __swimlane__ at board __board__",
+ "act-removeBoardMember": "removed member __member__ from board __board__",
+ "act-restoredCard": "restored card __card__ to list __list__ at swimlane __swimlane__ at board __board__",
+ "act-unjoinMember": "removed member __member__ from card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
"act-withBoardTitle": "__board__",
"act-withCardTitle": "[__board__] __card__",
"actions": "Akcioj",
@@ -47,14 +60,14 @@
"activity-unchecked-item": "unchecked %s in checklist %s of %s",
"activity-checklist-added": "added checklist to %s",
"activity-checklist-removed": "removed a checklist from %s",
- "activity-checklist-completed": "completed the checklist %s of %s",
+ "activity-checklist-completed": "completed checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
"activity-checklist-uncompleted": "uncompleted the checklist %s of %s",
"activity-checklist-item-added": "added checklist item to '%s' in %s",
"activity-checklist-item-removed": "removed a checklist item from '%s' in %s",
"add": "Aldoni",
"activity-checked-item-card": "checked %s in checklist %s",
"activity-unchecked-item-card": "unchecked %s in checklist %s",
- "activity-checklist-completed-card": "completed the checklist %s",
+ "activity-checklist-completed-card": "completed checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
"activity-checklist-uncompleted-card": "uncompleted the checklist %s",
"add-attachment": "Add Attachment",
"add-board": "Add Board",
@@ -92,6 +105,8 @@
"restore-board": "Restore Board",
"no-archived-boards": "No Boards in Archive.",
"archives": "Arkivi",
+ "template": "Template",
+ "templates": "Templates",
"assign-member": "Assign member",
"attached": "attached",
"attachment": "Attachment",
@@ -110,7 +125,7 @@
"boardChangeTitlePopup-title": "Rename Board",
"boardChangeVisibilityPopup-title": "Change Visibility",
"boardChangeWatchPopup-title": "Change Watch",
- "boardMenuPopup-title": "Board Menu",
+ "boardMenuPopup-title": "Board Settings",
"boards": "Boards",
"board-view": "Board View",
"board-view-cal": "Calendar",
@@ -143,6 +158,7 @@
"cardLabelsPopup-title": "Etikedoj",
"cardMembersPopup-title": "Membroj",
"cardMorePopup-title": "Pli",
+ "cardTemplatePopup-title": "Create template",
"cards": "Kartoj",
"cards-count": "Kartoj",
"casSignIn": "Sign In with CAS",
@@ -204,7 +220,7 @@
"confirm-checklist-delete-dialog": "Are you sure you want to delete checklist?",
"copy-card-link-to-clipboard": "Copy card link to clipboard",
"linkCardPopup-title": "Link Card",
- "searchCardPopup-title": "Search Card",
+ "searchElementPopup-title": "Serĉi",
"copyCardPopup-title": "Copy Card",
"copyChecklistToManyCardsPopup-title": "Copy Checklist Template to Many Cards",
"copyChecklistToManyCardsPopup-instructions": "Destination Card Titles and Descriptions in this JSON format",
@@ -453,6 +469,9 @@
"welcome-swimlane": "Milestone 1",
"welcome-list1": "Basics",
"welcome-list2": "Advanced",
+ "card-templates-swimlane": "Card Templates",
+ "list-templates-swimlane": "List Templates",
+ "board-templates-swimlane": "Board Templates",
"what-to-do": "Kion vi volas fari?",
"wipLimitErrorPopup-title": "Invalid WIP Limit",
"wipLimitErrorPopup-dialog-pt1": "The number of tasks in this list is higher than the WIP limit you've defined.",
@@ -552,6 +571,8 @@
"activity-added-label-card": "added label '%s'",
"activity-removed-label-card": "removed label '%s'",
"activity-delete-attach-card": "deleted an attachment",
+ "activity-set-customfield": "set custom field '%s' to '%s' in %s",
+ "activity-unset-customfield": "unset custom field '%s' in %s",
"r-rule": "Rule",
"r-add-trigger": "Add trigger",
"r-add-action": "Add action",
diff --git a/i18n/es-AR.i18n.json b/i18n/es-AR.i18n.json
index 95c2f086..a5c1fa96 100644
--- a/i18n/es-AR.i18n.json
+++ b/i18n/es-AR.i18n.json
@@ -1,28 +1,41 @@
{
"accept": "Aceptar",
"act-activity-notify": "Notificación de Actividad",
- "act-addAttachment": "adjunto __attachment__ a __card__",
- "act-addSubtask": "lista de ítems __checklist__ agregada a __card__",
- "act-addChecklist": "lista de ítems __checklist__ agregada a __card__",
- "act-addChecklistItem": " __checklistItem__ agregada a lista de ítems __checklist__ en __card__",
- "act-addComment": "comentado en __card__: __comment__",
- "act-createBoard": "__board__ creado",
- "act-createCard": "agregada __card__ a __list__",
- "act-createCustomField": "created custom field __customField__",
- "act-createList": "agregada __list__ a __board__",
- "act-addBoardMember": "agregado __member__ a __board__",
- "act-archivedBoard": "__board__ moved to Archive",
- "act-archivedCard": "__card__ moved to Archive",
- "act-archivedList": "__list__ moved to Archive",
- "act-archivedSwimlane": "__swimlane__ moved to Archive",
- "act-importBoard": "__board__ importado",
- "act-importCard": "__card__ importada",
- "act-importList": "__list__ importada",
- "act-joinMember": "__member__ agregado a __card__",
- "act-moveCard": "__card__ movida de __oldList__ a __list__",
- "act-removeBoardMember": "__member__ removido de __board__",
- "act-restoredCard": "__card__ restaurada a __board__",
- "act-unjoinMember": "__member__ removido de __card__",
+ "act-addAttachment": "added attachment __attachment__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-deleteAttachment": "deleted attachment __attachment__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-addSubtask": "added subtask __subtask__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-addLabel": "Added label __label__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-addedLabel": "Added label __label__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-removeLabel": "Removed label __label__ from card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-removedLabel": "Removed label __label__ from card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-addChecklist": "added checklist __checklist__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-addChecklistItem": "added checklist item __checklistItem__ to checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-removeChecklist": "removed checklist __checklist__ from card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-removeChecklistItem": "removed checklist item __checklistItem__ from checklist __checkList__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-checkedItem": "checked __checklistItem__ of checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-uncheckedItem": "unchecked __checklistItem__ of checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-completeChecklist": "completed checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-uncompleteChecklist": "uncompleted checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-addComment": "commented on card __card__: __comment__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-createBoard": "created board __board__",
+ "act-createSwimlane": "created swimlane __swimlane__ to board __board__",
+ "act-createCard": "created card __card__ to list __list__ at swimlane __swimlane__ at board __board__",
+ "act-createCustomField": "created custom field __customField__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-createList": "added list __list__ to board __board__",
+ "act-addBoardMember": "added member __member__ to board __board__",
+ "act-archivedBoard": "Board __board__ moved to Archive",
+ "act-archivedCard": "Card __card__ at list __list__ at swimlane __swimlane__ at board __board__ moved to Archive",
+ "act-archivedList": "List __list__ at swimlane __swimlane__ at board __board__ moved to Archive",
+ "act-archivedSwimlane": "Swimlane __swimlane__ at board __board__ moved to Archive",
+ "act-importBoard": "imported board __board__",
+ "act-importCard": "imported card __card__ to list __list__ at swimlane __swimlane__ at board __board__",
+ "act-importList": "imported list __list__ to swimlane __swimlane__ at board __board__",
+ "act-joinMember": "added member __member__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-moveCard": "moved card __card__ at board __board__ from list __oldList__ at swimlane __oldSwimlane__ to list __list__ at swimlane __swimlane__",
+ "act-moveCardToOtherBoard": "moved card __card__ from list __oldList__ at swimlane __oldSwimlane__ at board __oldBoard__ to list __list__ at swimlane __swimlane__ at board __board__",
+ "act-removeBoardMember": "removed member __member__ from board __board__",
+ "act-restoredCard": "restored card __card__ to list __list__ at swimlane __swimlane__ at board __board__",
+ "act-unjoinMember": "removed member __member__ from card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
"act-withBoardTitle": "__board__",
"act-withCardTitle": "__card__ [__board__] ",
"actions": "Acciones",
@@ -47,14 +60,14 @@
"activity-unchecked-item": "unchecked %s in checklist %s of %s",
"activity-checklist-added": "agregada lista de tareas a %s",
"activity-checklist-removed": "removed a checklist from %s",
- "activity-checklist-completed": "completed the checklist %s of %s",
+ "activity-checklist-completed": "completed checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
"activity-checklist-uncompleted": "uncompleted the checklist %s of %s",
"activity-checklist-item-added": "agregado item de lista de tareas a '%s' en %s",
"activity-checklist-item-removed": "removed a checklist item from '%s' in %s",
"add": "Agregar",
"activity-checked-item-card": "checked %s in checklist %s",
"activity-unchecked-item-card": "unchecked %s in checklist %s",
- "activity-checklist-completed-card": "completed the checklist %s",
+ "activity-checklist-completed-card": "completed checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
"activity-checklist-uncompleted-card": "uncompleted the checklist %s",
"add-attachment": "Agregar Adjunto",
"add-board": "Agregar Tablero",
@@ -92,6 +105,8 @@
"restore-board": "Restaurar Tablero",
"no-archived-boards": "No Boards in Archive.",
"archives": "Archivar",
+ "template": "Template",
+ "templates": "Templates",
"assign-member": "Asignar miembro",
"attached": "adjunto(s)",
"attachment": "Adjunto",
@@ -110,7 +125,7 @@
"boardChangeTitlePopup-title": "Renombrar Tablero",
"boardChangeVisibilityPopup-title": "Cambiar Visibilidad",
"boardChangeWatchPopup-title": "Alternar Seguimiento",
- "boardMenuPopup-title": "Menú del Tablero",
+ "boardMenuPopup-title": "Board Settings",
"boards": "Tableros",
"board-view": "Vista de Tablero",
"board-view-cal": "Calendar",
@@ -143,6 +158,7 @@
"cardLabelsPopup-title": "Etiquetas",
"cardMembersPopup-title": "Miembros",
"cardMorePopup-title": "Mas",
+ "cardTemplatePopup-title": "Create template",
"cards": "Tarjetas",
"cards-count": "Tarjetas",
"casSignIn": "Sign In with CAS",
@@ -204,7 +220,7 @@
"confirm-checklist-delete-dialog": "Are you sure you want to delete checklist?",
"copy-card-link-to-clipboard": "Copiar enlace a tarjeta en el portapapeles",
"linkCardPopup-title": "Link Card",
- "searchCardPopup-title": "Search Card",
+ "searchElementPopup-title": "Buscar",
"copyCardPopup-title": "Copiar Tarjeta",
"copyChecklistToManyCardsPopup-title": "Copiar Plantilla Checklist a Muchas Tarjetas",
"copyChecklistToManyCardsPopup-instructions": "Títulos y Descripciones de la Tarjeta Destino en este formato JSON",
@@ -453,6 +469,9 @@
"welcome-swimlane": "Hito 1",
"welcome-list1": "Básicos",
"welcome-list2": "Avanzado",
+ "card-templates-swimlane": "Card Templates",
+ "list-templates-swimlane": "List Templates",
+ "board-templates-swimlane": "Board Templates",
"what-to-do": "¿Qué querés hacer?",
"wipLimitErrorPopup-title": "Límite TEP Inválido",
"wipLimitErrorPopup-dialog-pt1": " El número de tareas en esta lista es mayor que el límite TEP que definiste.",
@@ -552,6 +571,8 @@
"activity-added-label-card": "added label '%s'",
"activity-removed-label-card": "removed label '%s'",
"activity-delete-attach-card": "deleted an attachment",
+ "activity-set-customfield": "set custom field '%s' to '%s' in %s",
+ "activity-unset-customfield": "unset custom field '%s' in %s",
"r-rule": "Rule",
"r-add-trigger": "Add trigger",
"r-add-action": "Add action",
diff --git a/i18n/es.i18n.json b/i18n/es.i18n.json
index dad03bf6..e09c68bb 100644
--- a/i18n/es.i18n.json
+++ b/i18n/es.i18n.json
@@ -1,28 +1,41 @@
{
"accept": "Aceptar",
"act-activity-notify": "Notificación de actividad",
- "act-addAttachment": "ha adjuntado __attachment__ a __card__",
- "act-addSubtask": "ha añadido la subtarea __checklist__ a __card__",
- "act-addChecklist": "ha añadido la lista de verificación __checklist__ a __card__",
- "act-addChecklistItem": "ha añadido __checklistItem__ a la lista de verificación __checklist__ en __card__",
- "act-addComment": "ha comentado en __card__: __comment__",
- "act-createBoard": "ha creado __board__",
- "act-createCard": "ha añadido __card__ a __list__",
- "act-createCustomField": "creado el campo personalizado __customField__",
- "act-createList": "ha añadido __list__ a __board__",
- "act-addBoardMember": "ha añadido a __member__ a __board__",
- "act-archivedBoard": "__board__ movido al Archivo",
- "act-archivedCard": "__card__ movida al Archivo",
- "act-archivedList": "__list__ movida a Archivo",
- "act-archivedSwimlane": "__swimlane__ movido a Archivo",
- "act-importBoard": "ha importado __board__",
- "act-importCard": "ha importado __card__",
- "act-importList": "ha importado __list__",
- "act-joinMember": "ha añadido a __member__ a __card__",
- "act-moveCard": "ha movido __card__ desde __oldList__ a __list__",
- "act-removeBoardMember": "ha eliminado a __member__ de __board__",
- "act-restoredCard": "ha restaurado __card__ en __board__",
- "act-unjoinMember": "ha eliminado a __member__ de __card__",
+ "act-addAttachment": "añadido el adjunto __attachment__ a la tarjeta __card__ de la lista __list__ del carril __swimlane__ del tablero __board__",
+ "act-deleteAttachment": "eliminado el adjunto __attachment__ de la tarjeta __card__ de la lista __list__ del carril __swimlane__ del tablero __board__",
+ "act-addSubtask": "añadida la subtarea __subtask__ a la tarjeta __card__ de la lista __list__ del carril __swimlane__ del tablero __board__",
+ "act-addLabel": "añadida la etiqueta __label__ a la tarjeta __card__ de la lista __list__ del carril __swimlane__ del tablero __board__",
+ "act-addedLabel": "añadida la etiqueta __label__ a la tarjeta __card__ de la lista __list__ del carril __swimlane__ del tablero __board__",
+ "act-removeLabel": "eliminada la etiqueta __label__ de la tarjeta __card__ de la lista __list__ del carril __swimlane__ del tablero __board__",
+ "act-removedLabel": "eliminada la etiqueta __label__ de la tarjeta __card__ de la lista __list__ del carril __swimlane__ del tablero __board__",
+ "act-addChecklist": "añadida la lista de verificación __checklist__ a la tarjeta __card__ de la lista __list__ del carril __swimlane__ del tablero __board__",
+ "act-addChecklistItem": "añadido el elemento __checklistItem__ a la lista de verificación __checklist__ de la tarjeta __card__ de la lista __list__ del carril __swimlane__ del tablero __board__",
+ "act-removeChecklist": "eliminada la lista de verificación __checklist__ de la tarjeta __card__ de la lista __list__ del carril __swimlane__ del tablero __board__",
+ "act-removeChecklistItem": "eliminado el elemento __checklistItem__ de la lista de verificación __checkList__ de la tarjeta __card__ de la lista __list__ del carril __swimlane__ del tablero __board__",
+ "act-checkedItem": "marcado el elemento __checklistItem__ de la lista de verificación __checklist__ de la tarjeta __card__ de la lista __list__ del carril __swimlane__ del tablero __board__",
+ "act-uncheckedItem": "desmarcado el elemento __checklistItem__ de la lista de verificación __checklist__ de la tarjeta __card__ de la lista __list__ del carril __swimlane__ del tablero __board__",
+ "act-completeChecklist": "completada la lista de verificación __checklist__ de la tarjeta __card__ de la lista __list__ del carril __swimlane__ del tablero __board__",
+ "act-uncompleteChecklist": "no completada la lista de verificación __checklist__ de la tarjeta __card__ de la lista __list__ del carril __swimlane__ del tablero __board__",
+ "act-addComment": "comentario en la tarjeta__card__: __comment__ de la lista __list__ del carril __swimlane__ del tablero __board__",
+ "act-createBoard": "creó el tablero __board__",
+ "act-createSwimlane": "creó el carril de flujo __swimlane__ en el tablero __board__",
+ "act-createCard": "creada la tarjeta __card__ de la lista __list__ del carril __swimlane__ del tablero __board__",
+ "act-createCustomField": "creó el campo personalizado __customField__ en la tarjeta __card__ de la lista __list__ del carril __swimlane__ del tablero __board__",
+ "act-createList": "añadida la lista __list__ al tablero __board__",
+ "act-addBoardMember": "añadido el mimbro __member__ al tablero __board__",
+ "act-archivedBoard": "El tablero __board__ se ha movido a Archivo",
+ "act-archivedCard": "La tarjeta __card__ de la lista __list__ del carril __swimlane__ del tablero __board__ se ha movido a Archivo",
+ "act-archivedList": "La lista __list__ del carril __swimlane__ del tablero __board__ se ha movido a Archivo",
+ "act-archivedSwimlane": "El carril __swimlane__ del tablero __board__ se ha movido a Archivo",
+ "act-importBoard": "importado el tablero __board__",
+ "act-importCard": "importada la tarjeta __card__ a la lista __list__ del carrril __swimlane__ del tablero __board__",
+ "act-importList": "importada la lista __list__ al carril __swimlane__ del tablero __board__",
+ "act-joinMember": "añadido el miembro __member__ a la tarjeta __card__ de la lista __list__ del carril __swimlane__ del tablero __board__",
+ "act-moveCard": "movida la tarjeta __card__ del tablero __board__ de la lista __oldList__ del carril __oldSwimlane__ a la lista __list__ del carril __swimlane__",
+ "act-moveCardToOtherBoard": "movida la tarjeta __card__ de la lista __oldList__ del carril __oldSwimlane__ del tablero __oldBoard__ a la lista __list__ del carril __swimlane__ del tablero __board__",
+ "act-removeBoardMember": "eliminado el miembro __member__ del tablero __board__",
+ "act-restoredCard": "restaurada la tarjeta __card__ a la lista __list__ del carril __swimlane__ del tablero __board__",
+ "act-unjoinMember": "eliminado el miembro __member__ de la tarjeta __card__ de la lista __list__ del carril __swimlane__ del tablero __board__",
"act-withBoardTitle": "__board__",
"act-withCardTitle": "[__board__] __card__",
"actions": "Acciones",
@@ -32,7 +45,7 @@
"activity-archived": "%s movido a Archivo",
"activity-attached": "ha adjuntado %s a %s",
"activity-created": "ha creado %s",
- "activity-customfield-created": "creado el campo personalizado %s",
+ "activity-customfield-created": "creó el campo personalizado %s",
"activity-excluded": "ha excluido %s de %s",
"activity-imported": "ha importado %s a %s desde %s",
"activity-imported-board": "ha importado %s desde %s",
@@ -47,14 +60,14 @@
"activity-unchecked-item": "desmarcado %s en lista %s de %s",
"activity-checklist-added": "ha añadido una lista de verificación a %s",
"activity-checklist-removed": "eliminada una lista de verificación desde %s ",
- "activity-checklist-completed": "completada la lista %s de %s",
+ "activity-checklist-completed": "completada la lista de verificación __checklist__ de la tarjeta __card__ de la lista __list__ del carril __swimlane__ del tablero __board__",
"activity-checklist-uncompleted": "no completado la lista %s de %s",
"activity-checklist-item-added": "ha añadido el elemento de la lista de verificación a '%s' en %s",
"activity-checklist-item-removed": "eliminado un elemento de la lista de verificación desde '%s' en %s",
"add": "Añadir",
"activity-checked-item-card": "marcado %s en la lista de verificación %s",
"activity-unchecked-item-card": "desmarcado %s en la lista de verificación %s",
- "activity-checklist-completed-card": "completó la lista de verificación %s",
+ "activity-checklist-completed-card": "completada la lista de verificación __checklist__ de la tarjeta __card__ de la lista __list__ del carril __swimlane__ del tablero __board__",
"activity-checklist-uncompleted-card": "no completó la lista de verificación %s",
"add-attachment": "Añadir adjunto",
"add-board": "Añadir tablero",
@@ -70,7 +83,7 @@
"added": "Añadida el",
"addMemberPopup-title": "Miembros",
"admin": "Administrador",
- "admin-desc": "Puedes ver y editar tarjetas, eliminar miembros, y cambiar los ajustes del tablero",
+ "admin-desc": "Puedes ver y editar tarjetas, eliminar miembros, y cambiar las preferencias del tablero",
"admin-announcement": "Aviso",
"admin-announcement-active": "Activar el aviso para todo el sistema",
"admin-announcement-title": "Aviso del administrador",
@@ -92,6 +105,8 @@
"restore-board": "Restaurar el tablero",
"no-archived-boards": "No hay Tableros en el Archivo",
"archives": "Archivar",
+ "template": "Plantilla",
+ "templates": "Plantillas",
"assign-member": "Asignar miembros",
"attached": "adjuntado",
"attachment": "Adjunto",
@@ -110,7 +125,7 @@
"boardChangeTitlePopup-title": "Renombrar el tablero",
"boardChangeVisibilityPopup-title": "Cambiar visibilidad",
"boardChangeWatchPopup-title": "Cambiar vigilancia",
- "boardMenuPopup-title": "Menú del tablero",
+ "boardMenuPopup-title": "Preferencias del tablero",
"boards": "Tableros",
"board-view": "Vista del tablero",
"board-view-cal": "Calendario",
@@ -143,6 +158,7 @@
"cardLabelsPopup-title": "Etiquetas",
"cardMembersPopup-title": "Miembros",
"cardMorePopup-title": "Más",
+ "cardTemplatePopup-title": "Crear plantilla",
"cards": "Tarjetas",
"cards-count": "Tarjetas",
"casSignIn": "Iniciar sesión con CAS",
@@ -204,7 +220,7 @@
"confirm-checklist-delete-dialog": "¿Seguro que quieres eliminar la lista de verificación?",
"copy-card-link-to-clipboard": "Copiar el enlace de la tarjeta al portapapeles",
"linkCardPopup-title": "Enlazar tarjeta",
- "searchCardPopup-title": "Buscar tarjeta",
+ "searchElementPopup-title": "Buscar",
"copyCardPopup-title": "Copiar la tarjeta",
"copyChecklistToManyCardsPopup-title": "Copiar la plantilla de la lista de verificación en varias tarjetas",
"copyChecklistToManyCardsPopup-instructions": "Títulos y descripciones de las tarjetas de destino en formato JSON",
@@ -231,7 +247,7 @@
"decline": "Declinar",
"default-avatar": "Avatar por defecto",
"delete": "Eliminar",
- "deleteCustomFieldPopup-title": "¿Borrar el campo personalizado?",
+ "deleteCustomFieldPopup-title": "¿Eliminar el campo personalizado?",
"deleteLabelPopup-title": "¿Eliminar la etiqueta?",
"description": "Descripción",
"disambiguateMultiLabelPopup-title": "Desambiguar la acción de etiqueta",
@@ -405,8 +421,8 @@
"search-cards": "Buscar entre los títulos y las descripciones de las tarjetas en este tablero.",
"search-example": "¿Texto a buscar?",
"select-color": "Seleccionar el color",
- "set-wip-limit-value": "Fija un límite para el número máximo de tareas en esta lista.",
- "setWipLimitPopup-title": "Fija el límite del trabajo en proceso",
+ "set-wip-limit-value": "Cambiar el límite para el número máximo de tareas en esta lista.",
+ "setWipLimitPopup-title": "Cambiar el límite del trabajo en proceso",
"shortcut-assign-self": "Asignarte a ti mismo a la tarjeta actual",
"shortcut-autocomplete-emoji": "Autocompletar emoji",
"shortcut-autocomplete-members": "Autocompletar miembros",
@@ -453,12 +469,15 @@
"welcome-swimlane": "Hito 1",
"welcome-list1": "Básicos",
"welcome-list2": "Avanzados",
+ "card-templates-swimlane": "Plantilla de tarjeta",
+ "list-templates-swimlane": "Listar plantillas",
+ "board-templates-swimlane": "Plantilla de tablero",
"what-to-do": "¿Qué deseas hacer?",
"wipLimitErrorPopup-title": "El límite del trabajo en proceso no es válido.",
"wipLimitErrorPopup-dialog-pt1": "El número de tareas en esta lista es mayor que el límite del trabajo en proceso que has definido.",
"wipLimitErrorPopup-dialog-pt2": "Por favor, mueve algunas tareas fuera de esta lista, o fija un límite del trabajo en proceso más alto.",
"admin-panel": "Panel del administrador",
- "settings": "Ajustes",
+ "settings": "Preferencias",
"people": "Personas",
"registration": "Registro",
"disable-self-registration": "Deshabilitar autoregistro",
@@ -527,13 +546,13 @@
"requested-by": "Solicitado por",
"board-delete-notice": "Se eliminarán todas las listas, tarjetas y acciones asociadas a este tablero. Esta acción no puede deshacerse.",
"delete-board-confirm-popup": "Se eliminarán todas las listas, tarjetas, etiquetas y actividades, y no podrás recuperar los contenidos del tablero. Esta acción no puede deshacerse.",
- "boardDeletePopup-title": "¿Borrar el tablero?",
- "delete-board": "Borrar el tablero",
+ "boardDeletePopup-title": "¿Eliminar el tablero?",
+ "delete-board": "Eliminar el tablero",
"default-subtasks-board": "Subtareas para el tablero __board__",
"default": "Por defecto",
"queue": "Cola",
- "subtask-settings": "Subtareas del tablero",
- "boardSubtaskSettingsPopup-title": "Configuración de las subtareas del tablero",
+ "subtask-settings": "Preferencias de las subtareas",
+ "boardSubtaskSettingsPopup-title": "Preferencias de las subtareas del tablero",
"show-subtasks-field": "Las tarjetas pueden tener subtareas",
"deposit-subtasks-board": "Depositar subtareas en este tablero:",
"deposit-subtasks-list": "Lista de destino para subtareas depositadas aquí:",
@@ -548,10 +567,12 @@
"no-parent": "No mostrar la tarjeta padre",
"activity-added-label": "añadida etiqueta %s a %s",
"activity-removed-label": "eliminada etiqueta '%s' desde %s",
- "activity-delete-attach": "borrado un adjunto desde %s",
+ "activity-delete-attach": "eliminado un adjunto desde %s",
"activity-added-label-card": "añadida etiqueta '%s'",
"activity-removed-label-card": "eliminada etiqueta '%s'",
- "activity-delete-attach-card": "borrado un adjunto",
+ "activity-delete-attach-card": "eliminado un adjunto",
+ "activity-set-customfield": "Cambiar el campo personalizado '%s' a '%s' en %s",
+ "activity-unset-customfield": "Desmarcar el campo personalizado '%s' en %s",
"r-rule": "Regla",
"r-add-trigger": "Añadir disparador",
"r-add-action": "Añadir acción",
diff --git a/i18n/eu.i18n.json b/i18n/eu.i18n.json
index 4d34b6ca..7a3c5319 100644
--- a/i18n/eu.i18n.json
+++ b/i18n/eu.i18n.json
@@ -1,28 +1,41 @@
{
"accept": "Onartu",
"act-activity-notify": "Activity Notification",
- "act-addAttachment": "__attachment__ __card__ txartelera erantsita",
- "act-addSubtask": "added subtask __checklist__ to __card__",
- "act-addChecklist": "gehituta checklist __checklist__ __card__ -ri",
- "act-addChecklistItem": "gehituta __checklistItem__ checklist __checklist__ on __card__ -ri",
- "act-addComment": "__card__ txartelean iruzkina: __comment__",
- "act-createBoard": "__board__ sortuta",
- "act-createCard": "__card__ __list__ zerrrendara gehituta",
- "act-createCustomField": "created custom field __customField__",
- "act-createList": "__list__ __board__ arbelera gehituta",
- "act-addBoardMember": "__member__ __board__ arbelera gehituta",
- "act-archivedBoard": "__board__ moved to Archive",
- "act-archivedCard": "__card__ moved to Archive",
- "act-archivedList": "__list__ moved to Archive",
- "act-archivedSwimlane": "__swimlane__ moved to Archive",
- "act-importBoard": "__board__ inportatuta",
- "act-importCard": "__card__ inportatuta",
- "act-importList": "__list__ inportatuta",
- "act-joinMember": "__member__ __card__ txartelera gehituta",
- "act-moveCard": "__card__ __oldList__ zerrendartik __list__ zerrendara eraman da",
- "act-removeBoardMember": "__member__ __board__ arbeletik kendu da",
- "act-restoredCard": "__card__ __board__ arbelean berrezarri da",
- "act-unjoinMember": "__member__ __card__ txarteletik kendu da",
+ "act-addAttachment": "added attachment __attachment__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-deleteAttachment": "deleted attachment __attachment__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-addSubtask": "added subtask __subtask__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-addLabel": "Added label __label__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-addedLabel": "Added label __label__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-removeLabel": "Removed label __label__ from card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-removedLabel": "Removed label __label__ from card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-addChecklist": "added checklist __checklist__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-addChecklistItem": "added checklist item __checklistItem__ to checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-removeChecklist": "removed checklist __checklist__ from card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-removeChecklistItem": "removed checklist item __checklistItem__ from checklist __checkList__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-checkedItem": "checked __checklistItem__ of checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-uncheckedItem": "unchecked __checklistItem__ of checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-completeChecklist": "completed checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-uncompleteChecklist": "uncompleted checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-addComment": "commented on card __card__: __comment__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-createBoard": "created board __board__",
+ "act-createSwimlane": "created swimlane __swimlane__ to board __board__",
+ "act-createCard": "created card __card__ to list __list__ at swimlane __swimlane__ at board __board__",
+ "act-createCustomField": "created custom field __customField__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-createList": "added list __list__ to board __board__",
+ "act-addBoardMember": "added member __member__ to board __board__",
+ "act-archivedBoard": "Board __board__ moved to Archive",
+ "act-archivedCard": "Card __card__ at list __list__ at swimlane __swimlane__ at board __board__ moved to Archive",
+ "act-archivedList": "List __list__ at swimlane __swimlane__ at board __board__ moved to Archive",
+ "act-archivedSwimlane": "Swimlane __swimlane__ at board __board__ moved to Archive",
+ "act-importBoard": "imported board __board__",
+ "act-importCard": "imported card __card__ to list __list__ at swimlane __swimlane__ at board __board__",
+ "act-importList": "imported list __list__ to swimlane __swimlane__ at board __board__",
+ "act-joinMember": "added member __member__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-moveCard": "moved card __card__ at board __board__ from list __oldList__ at swimlane __oldSwimlane__ to list __list__ at swimlane __swimlane__",
+ "act-moveCardToOtherBoard": "moved card __card__ from list __oldList__ at swimlane __oldSwimlane__ at board __oldBoard__ to list __list__ at swimlane __swimlane__ at board __board__",
+ "act-removeBoardMember": "removed member __member__ from board __board__",
+ "act-restoredCard": "restored card __card__ to list __list__ at swimlane __swimlane__ at board __board__",
+ "act-unjoinMember": "removed member __member__ from card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
"act-withBoardTitle": "__board__",
"act-withCardTitle": "[__board__] __card__",
"actions": "Ekintzak",
@@ -47,14 +60,14 @@
"activity-unchecked-item": "unchecked %s in checklist %s of %s",
"activity-checklist-added": "egiaztaketa zerrenda %s(e)ra gehituta",
"activity-checklist-removed": "removed a checklist from %s",
- "activity-checklist-completed": "completed the checklist %s of %s",
+ "activity-checklist-completed": "completed checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
"activity-checklist-uncompleted": "uncompleted the checklist %s of %s",
"activity-checklist-item-added": "egiaztaketa zerrendako elementuak '%s'(e)ra gehituta %s(e)n",
"activity-checklist-item-removed": "removed a checklist item from '%s' in %s",
"add": "Gehitu",
"activity-checked-item-card": "checked %s in checklist %s",
"activity-unchecked-item-card": "unchecked %s in checklist %s",
- "activity-checklist-completed-card": "completed the checklist %s",
+ "activity-checklist-completed-card": "completed checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
"activity-checklist-uncompleted-card": "uncompleted the checklist %s",
"add-attachment": "Gehitu eranskina",
"add-board": "Gehitu arbela",
@@ -92,6 +105,8 @@
"restore-board": "Berreskuratu arbela",
"no-archived-boards": "No Boards in Archive.",
"archives": "Artxibatu",
+ "template": "Template",
+ "templates": "Templates",
"assign-member": "Esleitu kidea",
"attached": "erantsita",
"attachment": "Eranskina",
@@ -110,7 +125,7 @@
"boardChangeTitlePopup-title": "Aldatu izena arbelari",
"boardChangeVisibilityPopup-title": "Aldatu ikusgaitasuna",
"boardChangeWatchPopup-title": "Aldatu ikuskatzea",
- "boardMenuPopup-title": "Arbelaren menua",
+ "boardMenuPopup-title": "Board Settings",
"boards": "Arbelak",
"board-view": "Board View",
"board-view-cal": "Calendar",
@@ -143,6 +158,7 @@
"cardLabelsPopup-title": "Etiketak",
"cardMembersPopup-title": "Kideak",
"cardMorePopup-title": "Gehiago",
+ "cardTemplatePopup-title": "Create template",
"cards": "Txartelak",
"cards-count": "Txartelak",
"casSignIn": "Sign In with CAS",
@@ -204,7 +220,7 @@
"confirm-checklist-delete-dialog": "Are you sure you want to delete checklist?",
"copy-card-link-to-clipboard": "Kopiatu txartela arbelera",
"linkCardPopup-title": "Link Card",
- "searchCardPopup-title": "Search Card",
+ "searchElementPopup-title": "Bilatu",
"copyCardPopup-title": "Kopiatu txartela",
"copyChecklistToManyCardsPopup-title": "Copy Checklist Template to Many Cards",
"copyChecklistToManyCardsPopup-instructions": "Destination Card Titles and Descriptions in this JSON format",
@@ -453,6 +469,9 @@
"welcome-swimlane": "Milestone 1",
"welcome-list1": "Oinarrizkoa",
"welcome-list2": "Aurreratua",
+ "card-templates-swimlane": "Card Templates",
+ "list-templates-swimlane": "List Templates",
+ "board-templates-swimlane": "Board Templates",
"what-to-do": "Zer egin nahi duzu?",
"wipLimitErrorPopup-title": "Baliogabeko WIP muga",
"wipLimitErrorPopup-dialog-pt1": "Zerrenda honetako atazen muga, WIP-en ezarritakoa baina handiagoa da",
@@ -552,6 +571,8 @@
"activity-added-label-card": "added label '%s'",
"activity-removed-label-card": "removed label '%s'",
"activity-delete-attach-card": "deleted an attachment",
+ "activity-set-customfield": "set custom field '%s' to '%s' in %s",
+ "activity-unset-customfield": "unset custom field '%s' in %s",
"r-rule": "Rule",
"r-add-trigger": "Add trigger",
"r-add-action": "Add action",
diff --git a/i18n/fa.i18n.json b/i18n/fa.i18n.json
index c1ef3401..5f794527 100644
--- a/i18n/fa.i18n.json
+++ b/i18n/fa.i18n.json
@@ -1,28 +1,41 @@
{
"accept": "پذیرش",
"act-activity-notify": "اعلان فعالیت",
- "act-addAttachment": "پیوست __attachment__ به __card__",
- "act-addSubtask": "زیر وظیفه __checklist__ به __card__ اضافه شد",
- "act-addChecklist": "سیاهه __checklist__ به __card__ افزوده شد",
- "act-addChecklistItem": "__checklistItem__ به سیاهه __checklist__ در __card__ افزوده شد",
- "act-addComment": "درج نظر برای __card__: __comment__",
- "act-createBoard": "__board__ ایجاد شد",
- "act-createCard": "__card__ به __list__ اضافه شد",
- "act-createCustomField": "فیلد __customField__ ایجاد شد",
- "act-createList": "__list__ به __board__ اضافه شد",
- "act-addBoardMember": "__member__ به __board__ اضافه شد",
- "act-archivedBoard": "__board__ به آرشیو انتقال یافت",
- "act-archivedCard": "__card__ به آرشیو انتقال یافت",
- "act-archivedList": "__list__ به آرشیو انتقال یافت",
- "act-archivedSwimlane": "__swimlane__ به آرشیو انتقال یافت",
- "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-addAttachment": "added attachment __attachment__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-deleteAttachment": "deleted attachment __attachment__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-addSubtask": "added subtask __subtask__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-addLabel": "Added label __label__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-addedLabel": "Added label __label__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-removeLabel": "Removed label __label__ from card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-removedLabel": "Removed label __label__ from card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-addChecklist": "added checklist __checklist__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-addChecklistItem": "added checklist item __checklistItem__ to checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-removeChecklist": "removed checklist __checklist__ from card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-removeChecklistItem": "removed checklist item __checklistItem__ from checklist __checkList__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-checkedItem": "checked __checklistItem__ of checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-uncheckedItem": "unchecked __checklistItem__ of checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-completeChecklist": "completed checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-uncompleteChecklist": "uncompleted checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-addComment": "commented on card __card__: __comment__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-createBoard": "created board __board__",
+ "act-createSwimlane": "created swimlane __swimlane__ to board __board__",
+ "act-createCard": "created card __card__ to list __list__ at swimlane __swimlane__ at board __board__",
+ "act-createCustomField": "created custom field __customField__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-createList": "added list __list__ to board __board__",
+ "act-addBoardMember": "added member __member__ to board __board__",
+ "act-archivedBoard": "Board __board__ moved to Archive",
+ "act-archivedCard": "Card __card__ at list __list__ at swimlane __swimlane__ at board __board__ moved to Archive",
+ "act-archivedList": "List __list__ at swimlane __swimlane__ at board __board__ moved to Archive",
+ "act-archivedSwimlane": "Swimlane __swimlane__ at board __board__ moved to Archive",
+ "act-importBoard": "imported board __board__",
+ "act-importCard": "imported card __card__ to list __list__ at swimlane __swimlane__ at board __board__",
+ "act-importList": "imported list __list__ to swimlane __swimlane__ at board __board__",
+ "act-joinMember": "added member __member__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-moveCard": "moved card __card__ at board __board__ from list __oldList__ at swimlane __oldSwimlane__ to list __list__ at swimlane __swimlane__",
+ "act-moveCardToOtherBoard": "moved card __card__ from list __oldList__ at swimlane __oldSwimlane__ at board __oldBoard__ to list __list__ at swimlane __swimlane__ at board __board__",
+ "act-removeBoardMember": "removed member __member__ from board __board__",
+ "act-restoredCard": "restored card __card__ to list __list__ at swimlane __swimlane__ at board __board__",
+ "act-unjoinMember": "removed member __member__ from card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
"act-withBoardTitle": "__board__",
"act-withCardTitle": "[__board__] __card__",
"actions": "اعمال",
@@ -47,14 +60,14 @@
"activity-unchecked-item": "چک نشده %s در چک لیست %s از %s",
"activity-checklist-added": "سیاهه به %s اضافه شد",
"activity-checklist-removed": "از چک لیست حذف گردید",
- "activity-checklist-completed": "تمام شده ها در چک لیست %s از %s",
+ "activity-checklist-completed": "completed checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
"activity-checklist-uncompleted": "تمام نشده ها در چک لیست %s از %s",
"activity-checklist-item-added": "added checklist item to '%s' in %s",
"activity-checklist-item-removed": "حذف شده از چک لیست '%s' در %s",
"add": "افزودن",
"activity-checked-item-card": "چک شده %s در چک لیست %s",
"activity-unchecked-item-card": "چک نشده %s در چک لیست %s",
- "activity-checklist-completed-card": "چک لیست تمام شده %s",
+ "activity-checklist-completed-card": "completed checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
"activity-checklist-uncompleted-card": "چک لیست تمام نشده %s",
"add-attachment": "افزودن ضمیمه",
"add-board": "افزودن برد",
@@ -92,6 +105,8 @@
"restore-board": "بازیابی تخته",
"no-archived-boards": "هیچ بردی داخل آرشیو نیست",
"archives": "بایگانی",
+ "template": "Template",
+ "templates": "Templates",
"assign-member": "تعیین عضو",
"attached": "ضمیمه شده",
"attachment": "ضمیمه",
@@ -110,7 +125,7 @@
"boardChangeTitlePopup-title": "تغییر نام تخته",
"boardChangeVisibilityPopup-title": "تغییر وضعیت نمایش",
"boardChangeWatchPopup-title": "تغییر دیده بانی",
- "boardMenuPopup-title": "منوی تخته",
+ "boardMenuPopup-title": "Board Settings",
"boards": "تخته‌ها",
"board-view": "نمایش تخته",
"board-view-cal": "تقویم",
@@ -143,6 +158,7 @@
"cardLabelsPopup-title": "برچسب ها",
"cardMembersPopup-title": "اعضا",
"cardMorePopup-title": "بیشتر",
+ "cardTemplatePopup-title": "Create template",
"cards": "کارت‌ها",
"cards-count": "کارت‌ها",
"casSignIn": "ورود با استفاده از CAS",
@@ -169,30 +185,30 @@
"close-board-pop": "شما می توانید با کلیک کردن بر روی دکمه «بایگانی» از صفحه هدر، صفحه را بازگردانید.",
"color-black": "مشکی",
"color-blue": "آبی",
- "color-crimson": "crimson",
- "color-darkgreen": "darkgreen",
- "color-gold": "gold",
- "color-gray": "gray",
+ "color-crimson": "قرمز",
+ "color-darkgreen": "سبز تیره",
+ "color-gold": "طلایی",
+ "color-gray": "خاکستری",
"color-green": "سبز",
- "color-indigo": "indigo",
+ "color-indigo": "نیلی",
"color-lime": "لیمویی",
- "color-magenta": "magenta",
- "color-mistyrose": "mistyrose",
- "color-navy": "navy",
+ "color-magenta": "ارغوانی",
+ "color-mistyrose": "صورتی روشن",
+ "color-navy": "لاجوردی",
"color-orange": "نارنجی",
- "color-paleturquoise": "paleturquoise",
- "color-peachpuff": "peachpuff",
+ "color-paleturquoise": "فیروزه‌ای کدر",
+ "color-peachpuff": "هلویی",
"color-pink": "صورتی",
- "color-plum": "plum",
+ "color-plum": "بنفش کدر",
"color-purple": "بنفش",
"color-red": "قرمز",
- "color-saddlebrown": "saddlebrown",
- "color-silver": "silver",
+ "color-saddlebrown": "کاکائویی",
+ "color-silver": "نقره‌ای",
"color-sky": "آبی آسمانی",
- "color-slateblue": "slateblue",
- "color-white": "white",
+ "color-slateblue": "آبی فولادی",
+ "color-white": "سفید",
"color-yellow": "زرد",
- "unset-color": "Unset",
+ "unset-color": "بازنشانی",
"comment": "نظر",
"comment-placeholder": "درج نظر",
"comment-only": "فقط نظر",
@@ -204,7 +220,7 @@
"confirm-checklist-delete-dialog": "مطمئنا چک لیست پاک شود؟",
"copy-card-link-to-clipboard": "درج پیوند کارت در حافظه",
"linkCardPopup-title": "ارتباط دادن کارت",
- "searchCardPopup-title": "جستجوی کارت",
+ "searchElementPopup-title": "جستجو",
"copyCardPopup-title": "کپی کارت",
"copyChecklistToManyCardsPopup-title": "کپی قالب کارت به کارت‌های متعدد",
"copyChecklistToManyCardsPopup-instructions": "عنوان و توضیحات کارت مقصد در این قالب JSON",
@@ -335,10 +351,10 @@
"list-archive-cards-pop": "این کارتباعث حذف تمامی کارت های این لیست از برد می شود . برای مشاهده کارت ها در آرشیو و برگرداندن آنها به برد بر بروی \"Menu\">\"Archive\" کلیک نمایید",
"list-move-cards": "انتقال تمام کارت های این لیست",
"list-select-cards": "انتخاب تمام کارت های این لیست",
- "set-color-list": "Set Color",
+ "set-color-list": "انتخاب رنگ",
"listActionPopup-title": "لیست اقدامات",
"swimlaneActionPopup-title": "Swimlane Actions",
- "swimlaneAddPopup-title": "Add a Swimlane below",
+ "swimlaneAddPopup-title": "اضافه کردن مسیر شناور",
"listImportCardPopup-title": "وارد کردن کارت Trello",
"listMorePopup-title": "بیشتر",
"link-list": "پیوند به این فهرست",
@@ -453,6 +469,9 @@
"welcome-swimlane": "Milestone 1",
"welcome-list1": "پایه ای ها",
"welcome-list2": "پیشرفته",
+ "card-templates-swimlane": "Card Templates",
+ "list-templates-swimlane": "List Templates",
+ "board-templates-swimlane": "Board Templates",
"what-to-do": "چه کاری می خواهید انجام دهید؟",
"wipLimitErrorPopup-title": "Invalid WIP Limit",
"wipLimitErrorPopup-dialog-pt1": "The number of tasks in this list is higher than the WIP limit you've defined.",
@@ -485,7 +504,7 @@
"error-notAuthorized": "شما مجاز به دیدن این صفحه نیستید.",
"outgoing-webhooks": "Outgoing Webhooks",
"outgoingWebhooksPopup-title": "Outgoing Webhooks",
- "boardCardTitlePopup-title": "Card Title Filter",
+ "boardCardTitlePopup-title": "فیلتر موضوع کارت",
"new-outgoing-webhook": "New Outgoing Webhook",
"no-name": "(ناشناخته)",
"Node_version": "نسخه Node ",
@@ -498,7 +517,7 @@
"OS_Totalmem": "OS Total Memory",
"OS_Type": "OS Type",
"OS_Uptime": "OS Uptime",
- "days": "days",
+ "days": "روزه‌ها",
"hours": "ساعت",
"minutes": "دقیقه",
"seconds": "ثانیه",
@@ -519,10 +538,10 @@
"card-end-on": "پایان در",
"editCardReceivedDatePopup-title": "تغییر تاریخ رسید",
"editCardEndDatePopup-title": "تغییر تاریخ پایان",
- "setCardColorPopup-title": "Set color",
- "setCardActionsColorPopup-title": "Choose a color",
- "setSwimlaneColorPopup-title": "Choose a color",
- "setListColorPopup-title": "Choose a color",
+ "setCardColorPopup-title": "انتخاب رنگ",
+ "setCardActionsColorPopup-title": "انتخاب کردن رنگ",
+ "setSwimlaneColorPopup-title": "انتخاب کردن رنگ",
+ "setListColorPopup-title": "انتخاب کردن رنگ",
"assigned-by": "محول شده توسط",
"requested-by": "تقاضا شده توسط",
"board-delete-notice": "حذف دائمی است شما تمام لیست ها، کارت ها و اقدامات مرتبط با این برد را از دست خواهید داد.",
@@ -552,6 +571,8 @@
"activity-added-label-card": "افزودن لیبل '%s'",
"activity-removed-label-card": "حذف لیبل '%s'",
"activity-delete-attach-card": "حذف ضمیمه",
+ "activity-set-customfield": "set custom field '%s' to '%s' in %s",
+ "activity-unset-customfield": "unset custom field '%s' in %s",
"r-rule": "نقش",
"r-add-trigger": "افزودن گیره",
"r-add-action": "افزودن عملیات",
@@ -561,14 +582,14 @@
"r-delete-rule": "حذف قانون",
"r-new-rule-name": "تیتر قانون جدید",
"r-no-rules": "بدون قانون",
- "r-when-a-card": "When a card",
+ "r-when-a-card": "زمانی که کارت",
"r-is": "هست",
- "r-is-moved": "is moved",
- "r-added-to": "added to",
+ "r-is-moved": "جابه‌جا شده",
+ "r-added-to": "اضافه شد به",
"r-removed-from": "حذف از",
"r-the-board": "برد",
"r-list": "لیست",
- "set-filter": "Set Filter",
+ "set-filter": "اضافه کردن فیلتر",
"r-moved-to": "انتقال به",
"r-moved-from": "انتقال از",
"r-archived": "انتقال به آرشیو",
@@ -576,7 +597,7 @@
"r-a-card": "کارت",
"r-when-a-label-is": "زمانی که لیبل هست",
"r-when-the-label-is": "زمانی که لیبل هست",
- "r-list-name": "list name",
+ "r-list-name": "نام لیست",
"r-when-a-member": "زمانی که کاربر هست",
"r-when-the-member": "زمانی که کاربر",
"r-name": "نام",
@@ -601,7 +622,7 @@
"r-label": "برچسب",
"r-member": "عضو",
"r-remove-all": "حذف همه کاربران از کارت",
- "r-set-color": "Set color to",
+ "r-set-color": "انتخاب رنگ به",
"r-checklist": "چک لیست",
"r-check-all": "انتخاب همه",
"r-uncheck-all": "لغو انتخاب همه",
@@ -626,9 +647,9 @@
"r-d-unarchive": "بازگردانی کارت از آرشیو",
"r-d-add-label": "افزودن برچسب",
"r-d-remove-label": "حذف برچسب",
- "r-create-card": "Create new card",
- "r-in-list": "in list",
- "r-in-swimlane": "in swimlane",
+ "r-create-card": "ساخت کارت جدید",
+ "r-in-list": "در لیست",
+ "r-in-swimlane": "در مسیرِ شناور",
"r-d-add-member": "افزودن عضو",
"r-d-remove-member": "حذف عضو",
"r-d-remove-all-member": "حذف تمامی کاربران",
@@ -639,14 +660,14 @@
"r-d-check-of-list": "از چک لیست",
"r-d-add-checklist": "افزودن چک لیست",
"r-d-remove-checklist": "حذف چک لیست",
- "r-by": "by",
+ "r-by": "توسط",
"r-add-checklist": "افزودن چک لیست",
- "r-with-items": "with items",
- "r-items-list": "item1,item2,item3",
- "r-add-swimlane": "Add swimlane",
- "r-swimlane-name": "swimlane name",
- "r-board-note": "Note: leave a field empty to match every possible value.",
- "r-checklist-note": "Note: checklist's items have to be written as comma separated values.",
+ "r-with-items": "با موارد",
+ "r-items-list": "مورد۱،مورد۲،مورد۳",
+ "r-add-swimlane": "اضافه کردن مسیر شناور",
+ "r-swimlane-name": "نام مسیر شناور",
+ "r-board-note": "نکته: برای نمایش موارد ممکن کادر را خالی بگذارید.",
+ "r-checklist-note": "نکته: چک‌لیست‌ها باید توسط کاما از یک‌دیگر جدا شوند.",
"r-when-a-card-is-moved": "دمانی که یک کارت به لیست دیگری منتقل شد",
"ldap": "LDAP",
"oauth2": "OAuth2",
@@ -660,6 +681,6 @@
"add-custom-html-before-body-end": "افزودن کد های HTML قبل از </body> پایان",
"error-undefined": "یک اشتباه رخ داده شده است",
"error-ldap-login": "هنگام تلاش برای ورود به یک خطا رخ داد",
- "display-authentication-method": "Display Authentication Method",
- "default-authentication-method": "Default Authentication Method"
+ "display-authentication-method": "نمایش نوع اعتبارسنجی",
+ "default-authentication-method": "نوع اعتبارسنجی پیشفرض"
} \ No newline at end of file
diff --git a/i18n/fi.i18n.json b/i18n/fi.i18n.json
index 7e2c4d3b..72ff4ef6 100644
--- a/i18n/fi.i18n.json
+++ b/i18n/fi.i18n.json
@@ -1,28 +1,41 @@
{
"accept": "Hyväksy",
"act-activity-notify": "Toimintailmoitus",
- "act-addAttachment": "liitetty __attachment__ kortille __card__",
- "act-addSubtask": "lisätty alitehtävä __checklist__ kortille __card__",
- "act-addChecklist": "lisätty tarkistuslista __checklist__ kortille __card__",
- "act-addChecklistItem": "lisätty kohta __checklistItem__ tarkistuslistaan __checklist__ kortilla __card__",
- "act-addComment": "kommentoitu __card__: __comment__",
- "act-createBoard": "luotu __board__",
- "act-createCard": "lisätty __card__ listalle __list__",
- "act-createCustomField": "luotu mukautettu kenttä __customField__",
- "act-createList": "lisätty __list__ taululle __board__",
- "act-addBoardMember": "lisätty __member__ taululle __board__",
- "act-archivedBoard": "__board__ siirretty Arkistoon",
- "act-archivedCard": "__card__ siirretty Arkistoon",
- "act-archivedList": "__list__ siirretty Arkistoon",
- "act-archivedSwimlane": "__swimlane__ siirretty Arkistoon",
- "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-addAttachment": "lisätty liite __attachment__ kortille __card__ listalla __list__ swimlanella __swimlane__ taululla __board__",
+ "act-deleteAttachment": "poistettu liite __attachment__ kortilla __card__ listalla __list__ swimlanella __swimlane__ taululla __board__",
+ "act-addSubtask": "lisätty alitehtävä __subtask__ kortille __card__ listalla __list__ swimlanella __swimlane__ taululla __board__",
+ "act-addLabel": "Lisätty tunniste __label__ kortille __card__ listalla __list__ swimlanella __swimlane__ taululla __board__",
+ "act-addedLabel": "Lisätty tunniste __label__ kortille __card__ listalla __list__ swimlanella __swimlane__ taululla __board__",
+ "act-removeLabel": "Poistettu tunniste __label__ kortilta __card__ listalla __list__ swimlanella __swimlane__ taululla __board__",
+ "act-removedLabel": "Poistettu tunniste __label__ kortilta __card__ listalla __list__ swimlanella __swimlane__ taululla __board__",
+ "act-addChecklist": "lisätty tarkistuslista __checklist__ kortille __card__ listalla __list__ swimlanella __swimlane__ taululla __board__",
+ "act-addChecklistItem": "lisätty tarkistuslistan kohta __checklistItem__ tarkistuslistalle __checklist__ kortilla __card__ listalla __list__ swimlanella __swimlane__ taululla __board__",
+ "act-removeChecklist": "poistettu tarkistuslista __checklist__ kortilta __card__ listalla __list__ swimlanella __swimlane__ taululla __board__",
+ "act-removeChecklistItem": "poistettu tarkistuslistan kohta __checklistItem__ tarkistuslistalta __checklist__ kortilla __card__ listalla __list__ swimlanella __swimlane__ taululla __board__",
+ "act-checkedItem": "ruksattu __checklistItem__ tarkistuslistalla __checklist__ kortilla __card__ listalla __list__ swimlanella __swimlane__ taululla __board__",
+ "act-uncheckedItem": "poistettu ruksi __checklistItem__ tarkistuslistalta __checklist__ kortilla __card__ listalla __list__ swimlanella __swimlane__ taululla __board__",
+ "act-completeChecklist": "valmistui tarkistuslista __checklist__ kortilla __card__ listalla __list__ swimlanella __swimlane__ taululla __board__",
+ "act-uncompleteChecklist": "tehty ei valmistuneeksi tarkistuslista __checklist__ kortilla __card__ listalla __list__ swimlanella __swimlane__ taululla __board__",
+ "act-addComment": "kommentoitu kortilla __card__: __comment__ listalla __list__ swimlanella __swimlane__ taululla __board__",
+ "act-createBoard": "luotu taulu __board__",
+ "act-createSwimlane": "loi swimlanen __swimlane__ taululle __board__",
+ "act-createCard": "luotu kortti __card__ listalle __list__ swimlanella __swimlane__ taululla __board__",
+ "act-createCustomField": "luotu mukautettu kenttä __customField__ kortille __card__ listalla __list__ swimlanella __swimlane__ taululla __board__",
+ "act-createList": "lisätty lista __list__ taululle __board__",
+ "act-addBoardMember": "lisätty jäsen __member__ taululle __board__",
+ "act-archivedBoard": "Taulu __board__ siirretty Arkistoon",
+ "act-archivedCard": "Kortti __card__ listalla __list__ swimlanella __swimlane__ taululla __board__ siirretty Arkistoon",
+ "act-archivedList": "Lista __list__ swimlanella __swimlane__ taululla __board__ siirretty Arkistoon",
+ "act-archivedSwimlane": "Swimlane __swimlane__ taululla __board__ siirretty Arkistoon",
+ "act-importBoard": "tuotu taulu __board__",
+ "act-importCard": "tuotu kortti __card__ listalle __list__ swimlanella __swimlane__ taululla __board__",
+ "act-importList": "tuotu lista __list__ swimlanelle __swimlane__ taululla __board__",
+ "act-joinMember": "lisätty jäsen __member__ kortille __card__ listalla __list__ swimlanella __swimlane__ taululla __board__",
+ "act-moveCard": "siirsi kortin __card__ taululla __board__ listasta __oldList__ swimlanelta __oldSwimlane__ listalle __list__ swimlanelle __swimlane__",
+ "act-moveCardToOtherBoard": "siirretty kortti __card__ listasta __oldList__ swimlanella __oldSwimlane__ taululla __oldBoard__ listalle __list__ swimlanella __swimlane__ taululla __board__",
+ "act-removeBoardMember": "poistettu jäsen __member__ taululta __board__",
+ "act-restoredCard": "palautettu kortti __card__ listalle __list__ swimlanella __swimlane__ taululla __board__",
+ "act-unjoinMember": "poistettu jäsen __member__ kortilta __card__ listalla __list__ swimlanella __swimlane__ taululla __board__",
"act-withBoardTitle": "__board__",
"act-withCardTitle": "[__board__] __card__",
"actions": "Toimet",
@@ -47,14 +60,14 @@
"activity-unchecked-item": "poistettu ruksi %s tarkistuslistassa %s / %s",
"activity-checklist-added": "lisätty tarkistuslista kortille %s",
"activity-checklist-removed": "poistettu tarkistuslista kohteesta %s",
- "activity-checklist-completed": "saatu valmiíksi tarkistuslista %s / %s",
+ "activity-checklist-completed": "valmistui tarkistuslista __checklist__ kortilla __card__ listalla __list__ swimlanella __swimlane__ taululla __board__",
"activity-checklist-uncompleted": "ei saatu valmiiksi tarkistuslista %s / %s",
"activity-checklist-item-added": "lisäsi kohdan tarkistuslistaan '%s' kortilla %s",
"activity-checklist-item-removed": "poistettu tarkistuslistan kohta '%s' / %s",
"add": "Lisää",
"activity-checked-item-card": "ruksattu %s tarkistuslistassa %s",
"activity-unchecked-item-card": "poistettu ruksi %s tarkistuslistassa %s",
- "activity-checklist-completed-card": "valmistui tarkistuslista %s",
+ "activity-checklist-completed-card": "valmistui tarkistuslista __checklist__ kortilla __card__ listalla __list__ swimlanella __swimlane__ taululla __board__",
"activity-checklist-uncompleted-card": "ei valmistunut tarkistuslista %s",
"add-attachment": "Lisää liite",
"add-board": "Lisää taulu",
@@ -92,6 +105,8 @@
"restore-board": "Palauta taulu",
"no-archived-boards": "Ei tauluja Arkistossa",
"archives": "Arkisto",
+ "template": "Malli",
+ "templates": "Mallit",
"assign-member": "Valitse jäsen",
"attached": "liitetty",
"attachment": "Liitetiedosto",
@@ -110,7 +125,7 @@
"boardChangeTitlePopup-title": "Nimeä taulu uudelleen",
"boardChangeVisibilityPopup-title": "Muokkaa näkyvyyttä",
"boardChangeWatchPopup-title": "Muokkaa seuraamista",
- "boardMenuPopup-title": "Taulu valikko",
+ "boardMenuPopup-title": "Taulu asetukset",
"boards": "Taulut",
"board-view": "Taulu näkymä",
"board-view-cal": "Kalenteri",
@@ -143,6 +158,7 @@
"cardLabelsPopup-title": "Tunnisteet",
"cardMembersPopup-title": "Jäsenet",
"cardMorePopup-title": "Lisää",
+ "cardTemplatePopup-title": "Luo malli",
"cards": "Kortit",
"cards-count": "korttia",
"casSignIn": "CAS kirjautuminen",
@@ -204,7 +220,7 @@
"confirm-checklist-delete-dialog": "Oletko varma että haluat poistaa tarkistuslistan?",
"copy-card-link-to-clipboard": "Kopioi kortin linkki leikepöydälle",
"linkCardPopup-title": "Linkitä kortti",
- "searchCardPopup-title": "Etsi kortti",
+ "searchElementPopup-title": "Etsi",
"copyCardPopup-title": "Kopioi kortti",
"copyChecklistToManyCardsPopup-title": "Kopioi tarkistuslistan malli monille korteille",
"copyChecklistToManyCardsPopup-instructions": "Kohde korttien otsikot ja kuvaukset JSON muodossa",
@@ -453,6 +469,9 @@
"welcome-swimlane": "Merkkipaalu 1",
"welcome-list1": "Perusasiat",
"welcome-list2": "Edistynyt",
+ "card-templates-swimlane": "Kortti mallit",
+ "list-templates-swimlane": "Lista mallit",
+ "board-templates-swimlane": "Taulu mallit",
"what-to-do": "Mitä haluat tehdä?",
"wipLimitErrorPopup-title": "Virheellinen WIP-raja",
"wipLimitErrorPopup-dialog-pt1": "Tässä listassa olevien tehtävien määrä on korkeampi kuin asettamasi WIP-raja.",
@@ -552,6 +571,8 @@
"activity-added-label-card": "lisätty tunniste '%s'",
"activity-removed-label-card": "poistettu tunniste '%s'",
"activity-delete-attach-card": "poistettu liitetiedosto",
+ "activity-set-customfield": "asetettu mukautettu kentän '%s' sisällöksi '%s' kortilla %s",
+ "activity-unset-customfield": "poistettu mukautettu kenttä '%s' kortilla %s",
"r-rule": "Sääntö",
"r-add-trigger": "Lisää liipaisin",
"r-add-action": "Lisää toimi",
diff --git a/i18n/fr.i18n.json b/i18n/fr.i18n.json
index ff4b2146..f5b3faab 100644
--- a/i18n/fr.i18n.json
+++ b/i18n/fr.i18n.json
@@ -1,28 +1,41 @@
{
"accept": "Accepter",
"act-activity-notify": "Notification d'activité",
- "act-addAttachment": "a joint __attachment__ à __card__",
- "act-addSubtask": "a ajouté une sous-tâche __checklist__ à __card__",
- "act-addChecklist": "a ajouté la checklist __checklist__ à __card__",
- "act-addChecklistItem": "a ajouté l'élément __checklistItem__ à la checklist __checklist__ de __card__",
- "act-addComment": "a commenté __card__ : __comment__",
- "act-createBoard": "a créé __board__",
- "act-createCard": "a ajouté __card__ à __list__",
- "act-createCustomField": "a créé le champ personnalisé __customField__",
- "act-createList": "a ajouté __list__ à __board__",
- "act-addBoardMember": "a ajouté __member__ à __board__",
- "act-archivedBoard": "__board__ a été archivé",
- "act-archivedCard": "__card__ a été archivé",
- "act-archivedList": "__list__ a été archivé",
- "act-archivedSwimlane": "__ swimlane__ a été archivé",
- "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 __board__",
- "act-unjoinMember": "a retiré __member__ de __card__",
+ "act-addAttachment": "a ajouté la pièce jointe __attachment__ à la carte __card__ de la liste __list__ du couloir __swimlane__ du tableau __board__",
+ "act-deleteAttachment": "a supprimé la pièce jointe __attachment__ de la carte __card__ de la liste __list__ du couloir __swimlane__ du tableau __board__",
+ "act-addSubtask": "a ajouté la sous-tâche __checklist__ à la carte __card__ de la liste __list__ du couloir __swimlane__ du tableau __board__",
+ "act-addLabel": "a ajouté l'étiquette __label__ à la carte __card__ de la liste __list__ du couloir __swimlane__ du tableau __board__",
+ "act-addedLabel": "a ajouté l'étiquette __label__ à la carte __card__ de la liste __list__ du couloir __swimlane__ du tableau __board__",
+ "act-removeLabel": "a enlevé l'étiquette __label__ de la carte __card__ de la liste __list__ du couloir __swimlane__ du tableau __board__",
+ "act-removedLabel": "a enlevé l'étiquette __label__ de la carte __card__ de la liste __list__ du couloir __swimlane__ du tableau __board__",
+ "act-addChecklist": "a ajouté la checklist __checklist__ à la carte __card__ de la liste __list__ du couloir __swimlane__ du tableau __board__",
+ "act-addChecklistItem": "a ajouté l'élément __checklistItem__ à la checklist __checklist__ de la carte __card__ de la liste __list__ du couloir __swimlane__ du tableau __board__",
+ "act-removeChecklist": "a supprimé la checklist __checklist__ de la carte __card__ de la liste __list__ du couloir __swimlane__ du tableau __board__",
+ "act-removeChecklistItem": "a supprimé l'élément __checklistItem__ de la checklist __checklist__ de la carte __card__ de la liste __list__ du couloir __swimlane__ du tableau __board__",
+ "act-checkedItem": "a coché __checklistItem__ de la checklist __checklist__ de la carte __card__ de la liste __list__ du couloir __swimlane__ du tableau __board__",
+ "act-uncheckedItem": "a décoché __checklistItem__ de la checklist __checklist__ de la carte __card__ de la liste __list__ du couloir __swimlane__ du tableau __board__",
+ "act-completeChecklist": "a complété la checklist __checklist__ de la carte __card__ de la liste __list__ du couloir __swimlane__ du tableau __board__",
+ "act-uncompleteChecklist": "a rendu incomplet la checklist __checklist__ de la carte __card__ de la liste __list__ du couloir __swimlane__ du tableau __board__",
+ "act-addComment": "a commenté la carte __card__ : __comment__ dans la liste __list__ du couloir __swimlane__ du tableau __board__",
+ "act-createBoard": "a créé le tableau __board__",
+ "act-createSwimlane": "a créé le couloir __swimlane__ dans le tableau __board__",
+ "act-createCard": "a créé la carte __card__ de la liste __list__ du couloir __swimlane__ du tableau __board__",
+ "act-createCustomField": "a créé le champ personnalisé __customField__ pour la carte __card__ de la liste __list__ du couloir __swimlane__ du tableau __board__",
+ "act-createList": "a ajouté la liste __list__ au tableau __board__",
+ "act-addBoardMember": "a ajouté le participant __member__ au tableau __board__",
+ "act-archivedBoard": "Le tableau __board__ a été déplacé vers les archives",
+ "act-archivedCard": "Carte __card__ de la liste __list__ du couloir __swimlane__ du tableau __board__ archivée",
+ "act-archivedList": "Liste __list__ du couloir __swimlane__ du tableau __board__ archivée",
+ "act-archivedSwimlane": "Couloir __swimlane__ du tableau __board__ archivé",
+ "act-importBoard": "a importé le tableau __board__",
+ "act-importCard": "a importé la carte __card__ de la liste __list__ du couloir __swimlane__ du tableau __board__",
+ "act-importList": "a importé la liste __list__ du couloir __swimlane__ du tableau __board__",
+ "act-joinMember": "a ajouté le participant __member__ à la carte __card__ de la liste __list__ du couloir __swimlane__ du tableau __board__",
+ "act-moveCard": "a déplacé la carte __card__ du tableau __board__ de la liste __oldList__ du couloir __oldSwimlane__ vers la liste __list__ du couloir __swimlane__",
+ "act-moveCardToOtherBoard": "a déplacé la carte __card__ de la liste __oldList__ du couloir __oldSwimlane__ du tableau __oldBoard__ vers la liste __list__ du couloir __swimlane__ du tableau __board__",
+ "act-removeBoardMember": "a supprimé le participant __member__ du tableau __board__",
+ "act-restoredCard": "a restauré la carte __card__ de la liste __list__ du couloir __swimlane__ du tableau __board__",
+ "act-unjoinMember": "a supprimé le participant __member__ de la carte __card__ de la liste __list__ du couloir __swimlane__ du tableau __board__",
"act-withBoardTitle": "__board__",
"act-withCardTitle": "[__board__] __card__",
"actions": "Actions",
@@ -47,14 +60,14 @@
"activity-unchecked-item": "a décoché %s dans la checklist %s de %s",
"activity-checklist-added": "a ajouté une checklist à %s",
"activity-checklist-removed": "a supprimé une checklist de %s",
- "activity-checklist-completed": "a complété la checklist %s de %s",
+ "activity-checklist-completed": "a complété la checklist __checklist__ de la carte __card__ de la liste __list__ du couloir __swimlane__ du tableau __board__",
"activity-checklist-uncompleted": "a rendu incomplète la checklist %s de %s",
"activity-checklist-item-added": "a ajouté un élément à la checklist '%s' dans %s",
"activity-checklist-item-removed": "a supprimé une checklist de '%s' dans %s",
"add": "Ajouter",
"activity-checked-item-card": "a coché %s dans la checklist %s",
"activity-unchecked-item-card": "a décoché %s dans la checklist %s",
- "activity-checklist-completed-card": "a complété la checklist %s",
+ "activity-checklist-completed-card": "a complété la checklist __checklist__ de la carte __card__ de la liste __list__ du couloir __swimlane__ du tableau __board__",
"activity-checklist-uncompleted-card": "a rendu incomplète la checklist %s",
"add-attachment": "Ajouter une pièce jointe",
"add-board": "Ajouter un tableau",
@@ -66,11 +79,11 @@
"add-cover": "Ajouter la couverture",
"add-label": "Ajouter une étiquette",
"add-list": "Ajouter une liste",
- "add-members": "Assigner des membres",
+ "add-members": "Assigner des participants",
"added": "Ajouté le",
- "addMemberPopup-title": "Membres",
+ "addMemberPopup-title": "Participants",
"admin": "Admin",
- "admin-desc": "Peut voir et éditer les cartes, supprimer des membres et changer les paramètres du tableau.",
+ "admin-desc": "Peut voir et éditer les cartes, supprimer des participants et changer les paramètres du tableau.",
"admin-announcement": "Annonce",
"admin-announcement-active": "Annonce destinée à tous",
"admin-announcement-title": "Annonce de l'administrateur",
@@ -92,7 +105,9 @@
"restore-board": "Restaurer le tableau",
"no-archived-boards": "Aucun tableau archivé.",
"archives": "Archiver",
- "assign-member": "Affecter un membre",
+ "template": "Modèle",
+ "templates": "Modèles",
+ "assign-member": "Affecter un participant",
"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.",
@@ -110,7 +125,7 @@
"boardChangeTitlePopup-title": "Renommer le tableau",
"boardChangeVisibilityPopup-title": "Changer la visibilité",
"boardChangeWatchPopup-title": "Modifier le suivi",
- "boardMenuPopup-title": "Menu du tableau",
+ "boardMenuPopup-title": "Paramètres du tableau",
"boards": "Tableaux",
"board-view": "Vue du tableau",
"board-view-cal": "Calendrier",
@@ -130,9 +145,9 @@
"card-edit-attachments": "Modifier les pièces jointes",
"card-edit-custom-fields": "Éditer les champs personnalisés",
"card-edit-labels": "Gérer les étiquettes",
- "card-edit-members": "Gérer les membres",
+ "card-edit-members": "Gérer les participants",
"card-labels-title": "Modifier les étiquettes de la carte.",
- "card-members-title": "Ajouter ou supprimer des membres à la carte.",
+ "card-members-title": "Assigner ou supprimer des participants à la carte.",
"card-start": "Début",
"card-start-on": "Commence le",
"cardAttachmentsPopup-title": "Ajouter depuis",
@@ -141,8 +156,9 @@
"cardDeletePopup-title": "Supprimer la carte ?",
"cardDetailsActionsPopup-title": "Actions sur la carte",
"cardLabelsPopup-title": "Étiquettes",
- "cardMembersPopup-title": "Membres",
+ "cardMembersPopup-title": "Participants",
"cardMorePopup-title": "Plus",
+ "cardTemplatePopup-title": "Créer un modèle",
"cards": "Cartes",
"cards-count": "Cartes",
"casSignIn": "Se connecter avec CAS",
@@ -204,7 +220,7 @@
"confirm-checklist-delete-dialog": "Êtes-vous sûr de vouloir supprimer la checklist ?",
"copy-card-link-to-clipboard": "Copier le lien vers la carte dans le presse-papier",
"linkCardPopup-title": "Lier une Carte",
- "searchCardPopup-title": "Chercher une Carte",
+ "searchElementPopup-title": "Chercher",
"copyCardPopup-title": "Copier la carte",
"copyChecklistToManyCardsPopup-title": "Copier le modèle de checklist vers plusieurs cartes",
"copyChecklistToManyCardsPopup-instructions": "Titres et descriptions des cartes de destination dans ce format JSON",
@@ -235,7 +251,7 @@
"deleteLabelPopup-title": "Supprimer l'étiquette ?",
"description": "Description",
"disambiguateMultiLabelPopup-title": "Préciser l'action sur l'étiquette",
- "disambiguateMultiMemberPopup-title": "Préciser l'action sur le membre",
+ "disambiguateMultiMemberPopup-title": "Préciser l'action sur le participant",
"discard": "Mettre à la corbeille",
"done": "Fait",
"download": "Télécharger",
@@ -251,13 +267,13 @@
"editLabelPopup-title": "Modifier l'étiquette",
"editNotificationPopup-title": "Modifier la notification",
"editProfilePopup-title": "Modifier le profil",
- "email": "Email",
+ "email": "E-mail",
"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-fail-text": "Une erreur est survenue en tentant d'envoyer l'email",
- "email-invalid": "Adresse email incorrecte.",
- "email-invite": "Inviter par email",
+ "email-invalid": "Adresse e-mail incorrecte.",
+ "email-invite": "Inviter par e-mail",
"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 votre mot de passe sur __siteName__",
@@ -268,7 +284,7 @@
"enable-wip-limit": "Activer la limite WIP",
"error-board-doesNotExist": "Ce tableau n'existe pas",
"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-board-notAMember": "Vous devez être participant 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",
@@ -282,7 +298,7 @@
"filter-cards": "Filtrer les cartes",
"filter-clear": "Supprimer les filtres",
"filter-no-label": "Aucune étiquette",
- "filter-no-member": "Aucun membre",
+ "filter-no-member": "Aucun participant",
"filter-no-custom-fields": "Pas de champs personnalisés",
"filter-on": "Le filtre est actif",
"filter-on-desc": "Vous êtes en train de filtrer les cartes sur ce tableau. Cliquez ici pour modifier les filtres.",
@@ -298,9 +314,9 @@
"link": "Lien",
"import-board": "importer un tableau",
"import-board-c": "Importer un tableau",
- "import-board-title-trello": "Importer le tableau depuis Trello",
- "import-board-title-wekan": "Importer le tableau depuis l'export précédent",
- "import-sandstorm-backup-warning": "Ne supprimez pas les données que vous importez du tableau exporté d'origine ou de Trello avant de vérifier que la graine peut se fermer et s'ouvrir à nouveau, ou qu'une erreur \"Tableau introuvable\" survient, sinon vous perdrez vos données.",
+ "import-board-title-trello": "Importer un tableau depuis Trello",
+ "import-board-title-wekan": "Importer un tableau depuis un export précédent",
+ "import-sandstorm-backup-warning": "Ne supprimez pas les données que vous importez d'un tableau exporté d'origine ou de Trello avant de vérifier que la graine peut se fermer et s'ouvrir à nouveau ou qu'une erreur \"Tableau introuvable\" survient, sinon vous perdrez vos données.",
"import-sandstorm-warning": "Le tableau importé supprimera toutes les données du tableau et les remplacera avec celles du tableau importé.",
"from-trello": "Depuis Trello",
"from-wekan": "Depuis un export précédent",
@@ -308,15 +324,15 @@
"import-board-instruction-wekan": "Dans votre tableau, allez dans 'Menu', puis 'Exporter un tableau', et copier le texte du fichier téléchargé.",
"import-board-instruction-about-errors": "Si une erreur survient en important le tableau, il se peut que l'import ait fonctionné, et que le tableau se trouve sur la page \"Tous les tableaux\".",
"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 à vos utilisateurs.",
- "import-show-user-mapping": "Contrôler l'association des membres",
- "import-user-select": "Sélectionnez l'utilisateur existant que vous voulez associer à ce membre",
- "importMapMembersAddPopup-title": "Sélectionner le membre",
+ "import-map-members": "Assigner des participants",
+ "import-members-map": "Le tableau que vous venez d'importer contient des participants. Veuillez assigner les participants que vous souhaitez importer à vos utilisateurs.",
+ "import-show-user-mapping": "Contrôler l'assignation des participants",
+ "import-user-select": "Sélectionnez l'utilisateur existant que vous voulez associer à ce participant",
+ "importMapMembersAddPopup-title": "Sélectionner le participant",
"info": "Version",
"initials": "Initiales",
"invalid-date": "Date invalide",
- "invalid-time": "Temps invalide",
+ "invalid-time": "Heure invalide",
"invalid-user": "Utilisateur invalide",
"joined": "a rejoint",
"just-invited": "Vous venez d'être invité à ce tableau",
@@ -342,15 +358,15 @@
"listImportCardPopup-title": "Importer une carte Trello",
"listMorePopup-title": "Plus",
"link-list": "Lien vers cette liste",
- "list-delete-pop": "Toutes les actions seront supprimées du fil d'activité et il ne sera plus possible de les récupérer. Cette action ne peut pas être annulée.",
+ "list-delete-pop": "Toutes les actions seront supprimées du fil d'activité et il ne sera plus possible de les récupérer. Cette action est irréversible.",
"list-delete-suggest-archive": "Vous pouvez archiver une liste pour l'enlever du tableau tout en conservant son activité.",
"lists": "Listes",
"swimlanes": "Couloirs",
"log-out": "Déconnexion",
"log-in": "Connexion",
"loginPopup-title": "Connexion",
- "memberMenuPopup-title": "Préférence de membre",
- "members": "Membres",
+ "memberMenuPopup-title": "Préférence du participant",
+ "members": "Participants",
"menu": "Menu",
"move-selection": "Déplacer la sélection",
"moveCardPopup-title": "Déplacer la carte",
@@ -370,7 +386,7 @@
"normal": "Normal",
"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-participate": "Recevoir les mises à jour de toutes les cartes auxquelles vous participez en tant que créateur ou que participant ",
"notify-watch": "Recevoir les mises à jour de tous les tableaux, listes ou cartes que vous suivez",
"optional": "optionnel",
"or": "ou",
@@ -392,10 +408,10 @@
"remove-from-board": "Retirer du tableau",
"remove-label": "Retirer l'étiquette",
"listDeletePopup-title": "Supprimer la liste ?",
- "remove-member": "Supprimer le membre",
+ "remove-member": "Supprimer le participant",
"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.",
- "removeMemberPopup-title": "Supprimer le membre ?",
+ "remove-member-pop": "Supprimer __name__ (__username__) de __boardTitle__ ? Ce participant sera supprimé de toutes les cartes du tableau et recevra une notification.",
+ "removeMemberPopup-title": "Supprimer le participant ?",
"rename": "Renommer",
"rename-board": "Renommer le tableau",
"restore": "Restaurer",
@@ -409,13 +425,13 @@
"setWipLimitPopup-title": "Définir la limite WIP",
"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-autocomplete-members": "Auto-complétion des participants",
"shortcut-clear-filters": "Retirer tous les filtres",
"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",
+ "shortcut-toggle-filterbar": "Afficher/Masquer la barre latérale des filtres",
+ "shortcut-toggle-sidebar": "Afficher/Masquer 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",
@@ -435,9 +451,9 @@
"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.",
+ "tracking-info": "Vous serez notifié de toute modification concernant les cartes pour lesquelles vous êtes impliqué en tant que créateur ou participant.",
"type": "Type",
- "unassign-member": "Retirer le membre",
+ "unassign-member": "Retirer le participant",
"unsaved-description": "Vous avez une description non sauvegardée",
"unwatch": "Arrêter de suivre",
"upload": "Télécharger",
@@ -453,6 +469,9 @@
"welcome-swimlane": "Jalon 1",
"welcome-list1": "Basiques",
"welcome-list2": "Avancés",
+ "card-templates-swimlane": "Modèles de cartes",
+ "list-templates-swimlane": "Modèles de listes",
+ "board-templates-swimlane": "Modèles de tableaux",
"what-to-do": "Que voulez-vous faire ?",
"wipLimitErrorPopup-title": "Limite WIP invalide",
"wipLimitErrorPopup-dialog-pt1": "Le nombre de cartes de cette liste est supérieur à la limite WIP que vous avez définie.",
@@ -465,7 +484,7 @@
"invite": "Inviter",
"invite-people": "Inviter une personne",
"to-boards": "Au(x) tableau(x)",
- "email-addresses": "Adresses email",
+ "email-addresses": "Adresses mail",
"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-tls-description": "Activer la gestion de TLS sur le serveur SMTP",
@@ -479,7 +498,7 @@
"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 le tableau kanban pour collaborer.\n\nVeuillez suivre le lien ci-dessous :\n__url__\n\nVotre code d'invitation est : __icode__\n\nMerci.",
- "email-smtp-test-subject": "Email de test SMTP",
+ "email-smtp-test-subject": "E-mail de test SMTP",
"email-smtp-test-text": "Vous avez envoyé un mail avec succès",
"error-invitation-code-not-exist": "Ce code d'invitation n'existe pas.",
"error-notAuthorized": "Vous n'êtes pas autorisé à accéder à cette page.",
@@ -552,6 +571,8 @@
"activity-added-label-card": "a ajouté l'étiquette '%s'",
"activity-removed-label-card": "a supprimé l'étiquette '%s'",
"activity-delete-attach-card": "a supprimé une pièce jointe",
+ "activity-set-customfield": "a défini le champ personnalisé '%s' à '%s' dans %s",
+ "activity-unset-customfield": "a effacé le champ personnalisé '%s' dans %s",
"r-rule": "Règle",
"r-add-trigger": "Ajouter un déclencheur",
"r-add-action": "Ajouter une action",
@@ -577,8 +598,8 @@
"r-when-a-label-is": "Quand une étiquette est",
"r-when-the-label-is": "Quand l'étiquette est",
"r-list-name": "Nom de la liste",
- "r-when-a-member": "Quand un membre est",
- "r-when-the-member": "Quand le membre",
+ "r-when-a-member": "Quand un participant est",
+ "r-when-the-member": "Quand le participant",
"r-name": "nom",
"r-when-a-attach": "Quand une pièce jointe",
"r-when-a-checklist": "Quand une checklist est",
@@ -599,7 +620,7 @@
"r-add": "Ajouter",
"r-remove": "Supprimer",
"r-label": "étiquette",
- "r-member": "membre",
+ "r-member": "participant",
"r-remove-all": "Supprimer tous les membres de la carte",
"r-set-color": "Définir la couleur à",
"r-checklist": "checklist",
@@ -629,9 +650,9 @@
"r-create-card": "Créer une nouvelle carte",
"r-in-list": "dans la liste",
"r-in-swimlane": "Dans le couloir",
- "r-d-add-member": "Ajouter un membre",
- "r-d-remove-member": "Supprimer un membre",
- "r-d-remove-all-member": "Supprimer tous les membres",
+ "r-d-add-member": "Ajouter un participant",
+ "r-d-remove-member": "Supprimer un participant",
+ "r-d-remove-all-member": "Supprimer tous les participants",
"r-d-check-all": "Cocher tous les éléments d'une liste",
"r-d-uncheck-all": "Décocher tous les éléments d'une liste",
"r-d-check-one": "Cocher l'élément",
diff --git a/i18n/gl.i18n.json b/i18n/gl.i18n.json
index 9c310c78..47fbe947 100644
--- a/i18n/gl.i18n.json
+++ b/i18n/gl.i18n.json
@@ -1,28 +1,41 @@
{
"accept": "Aceptar",
"act-activity-notify": "Activity Notification",
- "act-addAttachment": "attached __attachment__ to __card__",
- "act-addSubtask": "added subtask __checklist__ to __card__",
- "act-addChecklist": "added checklist __checklist__ to __card__",
- "act-addChecklistItem": "added __checklistItem__ to checklist __checklist__ on __card__",
- "act-addComment": "commented on __card__: __comment__",
- "act-createBoard": "created __board__",
- "act-createCard": "added __card__ to __list__",
- "act-createCustomField": "created custom field __customField__",
- "act-createList": "added __list__ to __board__",
- "act-addBoardMember": "added __member__ to __board__",
- "act-archivedBoard": "__board__ moved to Archive",
- "act-archivedCard": "__card__ moved to Archive",
- "act-archivedList": "__list__ moved to Archive",
- "act-archivedSwimlane": "__swimlane__ moved to Archive",
- "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-addAttachment": "added attachment __attachment__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-deleteAttachment": "deleted attachment __attachment__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-addSubtask": "added subtask __subtask__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-addLabel": "Added label __label__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-addedLabel": "Added label __label__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-removeLabel": "Removed label __label__ from card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-removedLabel": "Removed label __label__ from card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-addChecklist": "added checklist __checklist__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-addChecklistItem": "added checklist item __checklistItem__ to checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-removeChecklist": "removed checklist __checklist__ from card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-removeChecklistItem": "removed checklist item __checklistItem__ from checklist __checkList__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-checkedItem": "checked __checklistItem__ of checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-uncheckedItem": "unchecked __checklistItem__ of checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-completeChecklist": "completed checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-uncompleteChecklist": "uncompleted checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-addComment": "commented on card __card__: __comment__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-createBoard": "created board __board__",
+ "act-createSwimlane": "created swimlane __swimlane__ to board __board__",
+ "act-createCard": "created card __card__ to list __list__ at swimlane __swimlane__ at board __board__",
+ "act-createCustomField": "created custom field __customField__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-createList": "added list __list__ to board __board__",
+ "act-addBoardMember": "added member __member__ to board __board__",
+ "act-archivedBoard": "Board __board__ moved to Archive",
+ "act-archivedCard": "Card __card__ at list __list__ at swimlane __swimlane__ at board __board__ moved to Archive",
+ "act-archivedList": "List __list__ at swimlane __swimlane__ at board __board__ moved to Archive",
+ "act-archivedSwimlane": "Swimlane __swimlane__ at board __board__ moved to Archive",
+ "act-importBoard": "imported board __board__",
+ "act-importCard": "imported card __card__ to list __list__ at swimlane __swimlane__ at board __board__",
+ "act-importList": "imported list __list__ to swimlane __swimlane__ at board __board__",
+ "act-joinMember": "added member __member__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-moveCard": "moved card __card__ at board __board__ from list __oldList__ at swimlane __oldSwimlane__ to list __list__ at swimlane __swimlane__",
+ "act-moveCardToOtherBoard": "moved card __card__ from list __oldList__ at swimlane __oldSwimlane__ at board __oldBoard__ to list __list__ at swimlane __swimlane__ at board __board__",
+ "act-removeBoardMember": "removed member __member__ from board __board__",
+ "act-restoredCard": "restored card __card__ to list __list__ at swimlane __swimlane__ at board __board__",
+ "act-unjoinMember": "removed member __member__ from card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
"act-withBoardTitle": "__board__",
"act-withCardTitle": "[__board__] __card__",
"actions": "Accións",
@@ -47,14 +60,14 @@
"activity-unchecked-item": "unchecked %s in checklist %s of %s",
"activity-checklist-added": "added checklist to %s",
"activity-checklist-removed": "removed a checklist from %s",
- "activity-checklist-completed": "completed the checklist %s of %s",
+ "activity-checklist-completed": "completed checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
"activity-checklist-uncompleted": "uncompleted the checklist %s of %s",
"activity-checklist-item-added": "added checklist item to '%s' in %s",
"activity-checklist-item-removed": "removed a checklist item from '%s' in %s",
"add": "Engadir",
"activity-checked-item-card": "checked %s in checklist %s",
"activity-unchecked-item-card": "unchecked %s in checklist %s",
- "activity-checklist-completed-card": "completed the checklist %s",
+ "activity-checklist-completed-card": "completed checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
"activity-checklist-uncompleted-card": "uncompleted the checklist %s",
"add-attachment": "Engadir anexo",
"add-board": "Engadir taboleiro",
@@ -92,6 +105,8 @@
"restore-board": "Restaurar taboleiro",
"no-archived-boards": "No Boards in Archive.",
"archives": "Arquivar",
+ "template": "Template",
+ "templates": "Templates",
"assign-member": "Assign member",
"attached": "attached",
"attachment": "Anexo",
@@ -110,7 +125,7 @@
"boardChangeTitlePopup-title": "Rename Board",
"boardChangeVisibilityPopup-title": "Change Visibility",
"boardChangeWatchPopup-title": "Change Watch",
- "boardMenuPopup-title": "Board Menu",
+ "boardMenuPopup-title": "Board Settings",
"boards": "Taboleiros",
"board-view": "Board View",
"board-view-cal": "Calendar",
@@ -143,6 +158,7 @@
"cardLabelsPopup-title": "Etiquetas",
"cardMembersPopup-title": "Membros",
"cardMorePopup-title": "Máis",
+ "cardTemplatePopup-title": "Create template",
"cards": "Tarxetas",
"cards-count": "Tarxetas",
"casSignIn": "Sign In with CAS",
@@ -204,7 +220,7 @@
"confirm-checklist-delete-dialog": "Are you sure you want to delete checklist?",
"copy-card-link-to-clipboard": "Copy card link to clipboard",
"linkCardPopup-title": "Link Card",
- "searchCardPopup-title": "Search Card",
+ "searchElementPopup-title": "Search",
"copyCardPopup-title": "Copy Card",
"copyChecklistToManyCardsPopup-title": "Copy Checklist Template to Many Cards",
"copyChecklistToManyCardsPopup-instructions": "Destination Card Titles and Descriptions in this JSON format",
@@ -453,6 +469,9 @@
"welcome-swimlane": "Milestone 1",
"welcome-list1": "Fundamentos",
"welcome-list2": "Avanzado",
+ "card-templates-swimlane": "Card Templates",
+ "list-templates-swimlane": "List Templates",
+ "board-templates-swimlane": "Board Templates",
"what-to-do": "Que desexa facer?",
"wipLimitErrorPopup-title": "Invalid WIP Limit",
"wipLimitErrorPopup-dialog-pt1": "The number of tasks in this list is higher than the WIP limit you've defined.",
@@ -552,6 +571,8 @@
"activity-added-label-card": "added label '%s'",
"activity-removed-label-card": "removed label '%s'",
"activity-delete-attach-card": "deleted an attachment",
+ "activity-set-customfield": "set custom field '%s' to '%s' in %s",
+ "activity-unset-customfield": "unset custom field '%s' in %s",
"r-rule": "Rule",
"r-add-trigger": "Add trigger",
"r-add-action": "Add action",
diff --git a/i18n/he.i18n.json b/i18n/he.i18n.json
index 939f2002..489b4f61 100644
--- a/i18n/he.i18n.json
+++ b/i18n/he.i18n.json
@@ -1,28 +1,41 @@
{
"accept": "אישור",
"act-activity-notify": "הודעת פעילות",
- "act-addAttachment": " __attachment__ צורף לכרטיס __card__",
- "act-addSubtask": "נוספה תת־משימה __checklist__ אל __card__",
- "act-addChecklist": "רשימת משימות __checklist__ נוספה ל __card__",
- "act-addChecklistItem": " __checklistItem__ נוסף לרשימת משימות __checklist__ בכרטיס __card__",
- "act-addComment": "התקבלה תגובה על הכרטיס __card__:‏ __comment__",
+ "act-addAttachment": "הקובץ __attachment__ צורף אל הכרטיס __card__ ברשימה __list__ למסלול __swimlane__ שבלוח __board__",
+ "act-deleteAttachment": "הקובץ __attachment__ נמחק מהכרטיס __card__ ברשימה __list__ מהמסלול __swimlane__ שבלוח __board__",
+ "act-addSubtask": "תת־משימה __attachment__ נוספה אל הכרטיס __card__ ברשימה __list__ למסלול __swimlane__ שבלוח __board__",
+ "act-addLabel": "התווית __label__ נוספה לכרטיס __card__ ברשימה __list__ למסלול __swimlane__ שבלוח __board__",
+ "act-addedLabel": "התווית __label__ נוספה לכרטיס __card__ ברשימה __list__ למסלול __swimlane__ שבלוח __board__",
+ "act-removeLabel": "התווית __label__ הוסרה מהכרטיס __card__ ברשימה __list__ מהמסלול __swimlane__ שבלוח __board__",
+ "act-removedLabel": "התווית __label__ הוסרה מהכרטיס __card__ ברשימה __list__ מהמסלול __swimlane__ שבלוח __board__",
+ "act-addChecklist": "נוספה רשימת מטלות __checklist__ לכרטיס __card__ ברשימה __list__ שבמסלול __swimlane__ בלוח __board__",
+ "act-addChecklistItem": "נוסף פריט סימון __checklistItem__ לרשימת המטלות __checklist__ לכרטיס __card__ ברשימה __list__ במסלול __swimlane__ בלוח __board__",
+ "act-removeChecklist": "הוסרה רשימת מטלות __checklist__ מהכרטיס __card__ ברשימה __list__ שבמסלול __swimlane__ בלוח __board__",
+ "act-removeChecklistItem": "removed checklist item __checklistItem__ from checklist __checkList__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-checkedItem": "checked __checklistItem__ of checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-uncheckedItem": "unchecked __checklistItem__ of checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-completeChecklist": "completed checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-uncompleteChecklist": "uncompleted checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-addComment": "commented on card __card__: __comment__ at list __list__ at swimlane __swimlane__ at board __board__",
"act-createBoard": "הלוח __board__ נוצר",
- "act-createCard": "הכרטיס __card__ התווסף לרשימה __list__",
- "act-createCustomField": "נוצר שדה בהתאמה אישית __customField__",
- "act-createList": "הרשימה __list__ התווספה ללוח __board__",
- "act-addBoardMember": "המשתמש __member__ נוסף ללוח __board__",
- "act-archivedBoard": "__board__ הועבר לארכיון",
- "act-archivedCard": "__card__ הועבר לארכיון",
- "act-archivedList": "__list__ הועבר לארכיון",
- "act-archivedSwimlane": "__swimlane__ הועבר לארכיון",
- "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-createSwimlane": "נוצר מסלול __swimlane__ בלוח __board__",
+ "act-createCard": "הכרטיס __card__ נוצר ברשימה __list__ במסלול __swimlane__ שבלוח __board__",
+ "act-createCustomField": "נוצר שדה בהתאמה אישית __customField__ בכרטיס __card__ שברשימה __list__ במסלול __swimlane__ שבלוח __board__",
+ "act-createList": "הרשימה __list__ נוספה ללוח __board__",
+ "act-addBoardMember": "החבר __member__ נוסף אל __board__",
+ "act-archivedBoard": "הלוח __board__ הועבר לארכיון",
+ "act-archivedCard": "הכרטיס __card__ ברשימה __list__ במסלול __swimlane__ בלוח __board__ הועבר לארכיון",
+ "act-archivedList": "הרשימה __list__ במסלול __swimlane__ בלוח __board__ הועברה לארכיון",
+ "act-archivedSwimlane": "המסלול __swimlane__ בלוח __board__ הועבר לארכיון",
+ "act-importBoard": "הייבוא של הלוח __board__ הושלם",
+ "act-importCard": "הייבוא של הכרטיס __card__ לרשימה __list__ למסלול __swimlane__ ללוח __board__ הושלם",
+ "act-importList": "הרשימה __list__ ייובאה למסלול __swimlane__ שבלוח __board__",
+ "act-joinMember": "החבר __member__ נוסף לכרטיס __card__ לרשימה __list__ במסלול __swimlane__ בלוח __board__",
+ "act-moveCard": "moved card __card__ at board __board__ from list __oldList__ at swimlane __oldSwimlane__ to list __list__ at swimlane __swimlane__",
+ "act-moveCardToOtherBoard": "הכרטיס __card__ הועבר מהרשימה __oldList__ במסלול __oldSwimlane__ בלוח __oldBoard__ לרשימה __list__ במסלול __swimlane__ בלוח __board__",
+ "act-removeBoardMember": "החבר __member__ הוסר מהלוח __board__",
+ "act-restoredCard": "הכרטיס __card__ שוחזר לרשימה __list__ למסלול __swimlane__ ללוח __board__",
+ "act-unjoinMember": "החבר __member__ הוסר מהכרטיס __card__ ברשימה __list__ במסלול __swimlane__ בלוח __board__",
"act-withBoardTitle": "__board__",
"act-withCardTitle": "[__board__] __card__",
"actions": "פעולות",
@@ -47,14 +60,14 @@
"activity-unchecked-item": "בוטל הסימון של %s ברשימת המשימות %s מתוך %s",
"activity-checklist-added": "נוספה רשימת משימות אל %s",
"activity-checklist-removed": "הוסרה רשימת משימות מ־%s",
- "activity-checklist-completed": "רשימת המשימות %s מתוך %s הושלמה",
+ "activity-checklist-completed": "completed checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
"activity-checklist-uncompleted": "רשימת המשימות %s מתוך %s סומנה כבלתי מושלמת",
"activity-checklist-item-added": "נוסף פריט רשימת משימות אל ‚%s‘ תחת %s",
"activity-checklist-item-removed": "הוסר פריט מרשימת המשימות ‚%s’ תחת %s",
"add": "הוספה",
"activity-checked-item-card": "סומן %s ברשימת המשימות %s",
"activity-unchecked-item-card": "הסימון של %s בוטל ברשימת המשימות %s",
- "activity-checklist-completed-card": "רשימת המשימות %s הושלמה",
+ "activity-checklist-completed-card": "completed checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
"activity-checklist-uncompleted-card": "רשימת המשימות %s סומנה כבלתי מושלמת",
"add-attachment": "הוספת קובץ מצורף",
"add-board": "הוספת לוח",
@@ -92,6 +105,8 @@
"restore-board": "שחזור לוח",
"no-archived-boards": "לא נשמרו לוחות בארכיון.",
"archives": "להעביר לארכיון",
+ "template": "תבנית",
+ "templates": "תבניות",
"assign-member": "הקצאת חבר",
"attached": "מצורף",
"attachment": "קובץ מצורף",
@@ -110,7 +125,7 @@
"boardChangeTitlePopup-title": "שינוי שם הלוח",
"boardChangeVisibilityPopup-title": "שינוי מצב הצגה",
"boardChangeWatchPopup-title": "שינוי הגדרת המעקב",
- "boardMenuPopup-title": "תפריט לוח",
+ "boardMenuPopup-title": "הגדרות לוח",
"boards": "לוחות",
"board-view": "תצוגת לוח",
"board-view-cal": "לוח שנה",
@@ -143,6 +158,7 @@
"cardLabelsPopup-title": "תוויות",
"cardMembersPopup-title": "חברים",
"cardMorePopup-title": "עוד",
+ "cardTemplatePopup-title": "יצירת תבנית",
"cards": "כרטיסים",
"cards-count": "כרטיסים",
"casSignIn": "כניסה עם CAS",
@@ -204,7 +220,7 @@
"confirm-checklist-delete-dialog": "למחוק את רשימת המשימות?",
"copy-card-link-to-clipboard": "העתקת קישור הכרטיס ללוח הגזירים",
"linkCardPopup-title": "קישור כרטיס",
- "searchCardPopup-title": "חיפוש כרטיס",
+ "searchElementPopup-title": "חיפוש",
"copyCardPopup-title": "העתק כרטיס",
"copyChecklistToManyCardsPopup-title": "העתקת תבנית רשימת מטלות למגוון כרטיסים",
"copyChecklistToManyCardsPopup-instructions": "כותרות ותיאורים של כרטיסי יעד בתצורת JSON זו",
@@ -453,6 +469,9 @@
"welcome-swimlane": "ציון דרך 1",
"welcome-list1": "יסודות",
"welcome-list2": "מתקדם",
+ "card-templates-swimlane": "תבניות כרטיסים",
+ "list-templates-swimlane": "תבניות רשימות",
+ "board-templates-swimlane": "תבניות לוחות",
"what-to-do": "מה ברצונך לעשות?",
"wipLimitErrorPopup-title": "מגבלת „בעבודה” שגויה",
"wipLimitErrorPopup-dialog-pt1": "מספר המשימות ברשימה זו גדולה ממגבלת הפריטים „בעבודה” שהגדרת.",
@@ -552,6 +571,8 @@
"activity-added-label-card": "התווית ‚%s’ נוספה",
"activity-removed-label-card": "התווית ‚%s’ הוסרה",
"activity-delete-attach-card": "קובץ מצורף נמחק",
+ "activity-set-customfield": "הגדרת שדה בהתאמה אישית ‚%s’ לערך ‚%s’ תחת %s",
+ "activity-unset-customfield": "ביטול הגדרת שדה בהתאמה אישית ‚%s’ תחת %s",
"r-rule": "כלל",
"r-add-trigger": "הוספת הקפצה",
"r-add-action": "הוספת פעולה",
diff --git a/i18n/hi.i18n.json b/i18n/hi.i18n.json
index 8f5028d6..514dfa2f 100644
--- a/i18n/hi.i18n.json
+++ b/i18n/hi.i18n.json
@@ -1,35 +1,48 @@
{
"accept": "स्वीकार",
- "act-activity-notify": "Activity Notification",
- "act-addAttachment": "जुड़ा __attachment__ से __card__",
- "act-addSubtask": "जोड़ा उप कार्य __checklist__ से __card__",
- "act-addChecklist": "जोड़ा चेक सूची __checklist__ से __card__",
- "act-addChecklistItem": "जोड़ा __checklistItem__ से चिह्नांकन-सूची __checklist__ पर __card__",
- "act-addComment": "समीक्षा की है __card__: __comment__",
- "act-createBoard": "बनाया __board__",
- "act-createCard": "जोड़ा __card__ से __list__",
- "act-createCustomField": "बनाया रिवाज क्षेत्र __customField__",
- "act-createList": "जोड़ा __list__ से __board__",
- "act-addBoardMember": "जोड़ा __member__ से __board__",
- "act-archivedBoard": "__board__ moved to Archive",
- "act-archivedCard": "__card__ moved to Archive",
- "act-archivedList": "__list__ moved to Archive",
- "act-archivedSwimlane": "__swimlane__ moved to Archive",
- "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-activity-notify": "गतिविधि अधिसूचना",
+ "act-addAttachment": "अनुलग्नक जोड़ा __attachment__ कार्ड के लिए __card__ सूचि मेें __list__ तैराक में __swimlane__ बोर्ड पर __board__",
+ "act-deleteAttachment": "हटाए गए अनुलग्नक __attachment__ कार्ड पर __card__ सूचि मेें __list__ तैराक में __swimlane__ बोर्ड पर __board__",
+ "act-addSubtask": "जोड़ा उपकार्य __checklist__ को __card__ सूचि मेें __list__ तैराक में __swimlane__ बोर्ड पर __board__",
+ "act-addLabel": "जोड़ा गया लेबल __label__ कार्ड के लिए __card__ सूचि मेें __list__ तैराक में __swimlane__ बोर्ड पर __board__",
+ "act-addedLabel": "जोड़ा गया लेबल __label__ कार्ड के लिए __card__ सूचि मेें __list__ तैराक में __swimlane__ बोर्ड पर __board__",
+ "act-removeLabel": "Removed label __label__ from card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-removedLabel": "Removed label __label__ from card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-addChecklist": "added checklist __checklist__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-addChecklistItem": "added checklist item __checklistItem__ to checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-removeChecklist": "removed checklist __checklist__ from card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-removeChecklistItem": "removed checklist item __checklistItem__ from checklist __checkList__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-checkedItem": "checked __checklistItem__ of checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-uncheckedItem": "unchecked __checklistItem__ of checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-completeChecklist": "completed checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-uncompleteChecklist": "uncompleted checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-addComment": "commented on card __card__: __comment__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-createBoard": "created board __board__",
+ "act-createSwimlane": "created swimlane __swimlane__ to board __board__",
+ "act-createCard": "created card __card__ to list __list__ at swimlane __swimlane__ at board __board__",
+ "act-createCustomField": "created custom field __customField__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-createList": "added list __list__ to board __board__",
+ "act-addBoardMember": "added member __member__ to board __board__",
+ "act-archivedBoard": "Board __board__ moved to Archive",
+ "act-archivedCard": "Card __card__ at list __list__ at swimlane __swimlane__ at board __board__ moved to Archive",
+ "act-archivedList": "List __list__ at swimlane __swimlane__ at board __board__ moved to Archive",
+ "act-archivedSwimlane": "Swimlane __swimlane__ at board __board__ moved to Archive",
+ "act-importBoard": "imported board __board__",
+ "act-importCard": "imported card __card__ to list __list__ at swimlane __swimlane__ at board __board__",
+ "act-importList": "imported list __list__ to swimlane __swimlane__ at board __board__",
+ "act-joinMember": "added member __member__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-moveCard": "moved card __card__ at board __board__ from list __oldList__ at swimlane __oldSwimlane__ to list __list__ at swimlane __swimlane__",
+ "act-moveCardToOtherBoard": "moved card __card__ from list __oldList__ at swimlane __oldSwimlane__ at board __oldBoard__ to list __list__ at swimlane __swimlane__ at board __board__",
+ "act-removeBoardMember": "removed member __member__ from board __board__",
+ "act-restoredCard": "restored card __card__ to list __list__ at swimlane __swimlane__ at board __board__",
+ "act-unjoinMember": "removed member __member__ from card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
"act-withBoardTitle": "__board__",
"act-withCardTitle": "[__board__] __card__",
"actions": "कार्रवाई",
"activities": "गतिविधि",
"activity": "क्रियाएँ",
"activity-added": "जोड़ा गया %s से %s",
- "activity-archived": "%s moved to Archive",
+ "activity-archived": "%sसंग्रह में ले जाया गया",
"activity-attached": "संलग्न %s से %s",
"activity-created": "बनाया %s",
"activity-customfield-created": "बनाया रिवाज क्षेत्र %s",
@@ -47,14 +60,14 @@
"activity-unchecked-item": "अचिह्नित %s अंदर में चिह्नांकन-सूची %s of %s",
"activity-checklist-added": "संकलित चिह्नांकन-सूची तक %s",
"activity-checklist-removed": "हटा दिया एक चिह्नांकन-सूची से %s",
- "activity-checklist-completed": "पूर्ण चिह्नांकन-सूची %s of %s",
+ "activity-checklist-completed": "completed checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
"activity-checklist-uncompleted": "अपूर्ण चिह्नांकन-सूची %s of %s",
"activity-checklist-item-added": "संकलित चिह्नांकन-सूची विषय तक '%s' अंदर में %s",
"activity-checklist-item-removed": "हटा दिया एक चिह्नांकन-सूची विषय से '%s' अंदर में %s",
"add": "जोड़ें",
"activity-checked-item-card": "चिह्नित %s अंदर में चिह्नांकन-सूची %s",
"activity-unchecked-item-card": "अचिह्नित %s अंदर में चिह्नांकन-सूची %s",
- "activity-checklist-completed-card": "पूर्ण चिह्नांकन-सूची %s",
+ "activity-checklist-completed-card": "completed checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
"activity-checklist-uncompleted-card": "अपूर्ण चिह्नांकन-सूची %s",
"add-attachment": "संलग्न करें",
"add-board": "बोर्ड जोड़ें",
@@ -78,20 +91,22 @@
"and-n-other-card": "और __count__ other कार्ड",
"and-n-other-card_plural": "और __count__ other कार्ड",
"apply": "Apply",
- "app-is-offline": "Loading, please wait. Refreshing the page will cause data loss. If loading does not work, please check that server has not stopped.",
- "archive": "Move to Archive",
- "archive-all": "Move All to Archive",
- "archive-board": "Move Board to Archive",
- "archive-card": "Move Card to Archive",
- "archive-list": "Move List to Archive",
- "archive-swimlane": "Move Swimlane to Archive",
- "archive-selection": "Move selection to Archive",
- "archiveBoardPopup-title": "Move Board to Archive?",
- "archived-items": "पुरालेख",
- "archived-boards": "Boards in Archive",
- "restore-board": "Restore बोर्ड",
- "no-archived-boards": "No Boards in Archive.",
+ "app-is-offline": "लोड हो रहा है, कृपया प्रतीक्षा करें । पृष्ठ को ताज़ा करना डेटा की हानि का कारण होगा । यदि लोड करना कार्य नहीं करता है, तो कृपया जांचें कि सर्वर बंद नहीं हुआ है ।",
+ "archive": "संग्रह में ले जाएं",
+ "archive-all": "सभी को संग्रह में ले जाएं",
+ "archive-board": "संग्रह करने के लिए बोर्ड ले जाएँ",
+ "archive-card": "कार्ड को संग्रह में ले जाएं",
+ "archive-list": "सूची को संग्रह में ले जाएं",
+ "archive-swimlane": "संग्रह करने के लिए स्विमलेन ले जाएँ",
+ "archive-selection": "चयन को संग्रह में ले जाएं",
+ "archiveBoardPopup-title": "बोर्ड को संग्रह में स्थानांतरित करें?",
+ "archived-items": "संग्रह",
+ "archived-boards": "संग्रह में बोर्ड",
+ "restore-board": "पुनर्स्थापना बोर्ड",
+ "no-archived-boards": "संग्रह में कोई बोर्ड नहीं ।",
"archives": "पुरालेख",
+ "template": "खाका",
+ "templates": "खाका",
"assign-member": "आवंटित सदस्य",
"attached": "संलग्न",
"attachment": "संलग्नक",
@@ -110,7 +125,7 @@
"boardChangeTitlePopup-title": "बोर्ड का नाम बदलें",
"boardChangeVisibilityPopup-title": "दृश्यता बदलें",
"boardChangeWatchPopup-title": "बदलें वॉच",
- "boardMenuPopup-title": "बोर्ड मेनू",
+ "boardMenuPopup-title": "बोर्ड सेटिंग्स",
"boards": "बोर्डों",
"board-view": "बोर्ड दृष्टिकोण",
"board-view-cal": "तिथि-पत्र",
@@ -118,12 +133,12 @@
"board-view-lists": "सूचियाँ",
"bucket-example": "उदाहरण के लिए “बाल्टी सूची” की तरह",
"cancel": "रद्द करें",
- "card-archived": "This card is moved to Archive.",
- "board-archived": "This board is moved to Archive.",
+ "card-archived": "यह कार्ड संग्रह करने के लिए ले जाया गया है ।",
+ "board-archived": "यह बोर्ड संग्रह करने के लिए ले जाया जाता है ।",
"card-comments-title": "इस कार्ड में %s टिप्पणी है।",
"card-delete-notice": "हटाना स्थायी है। आप इस कार्ड से जुड़े सभी कार्यों को खो देंगे।",
"card-delete-pop": "सभी कार्रवाइयां गतिविधि फ़ीड से निकाल दी जाएंगी और आप कार्ड को फिर से खोलने में सक्षम नहीं होंगे । कोई पूर्ववत् नहीं है ।",
- "card-delete-suggest-archive": "You can move a card to Archive to remove it from the board and preserve the activity.",
+ "card-delete-suggest-archive": "आप एक कार्ड को बोर्ड से हटाने और गतिविधि को संरक्षित करने के लिए संग्रह में ले जा सकते हैं ।",
"card-due": "नियत",
"card-due-on": "पर नियत",
"card-spent": "समय बिताया",
@@ -143,6 +158,7 @@
"cardLabelsPopup-title": "नामपत्र",
"cardMembersPopup-title": "सदस्य",
"cardMorePopup-title": "अतिरिक्त",
+ "cardTemplatePopup-title": "खाका बनाएं",
"cards": "कार्ड्स",
"cards-count": "कार्ड्स",
"casSignIn": "सीएएस के साथ साइन इन करें",
@@ -166,18 +182,18 @@
"clipboard": "क्लिपबोर्ड या खींचें और छोड़ें",
"close": "बंद करे",
"close-board": "बोर्ड बंद करे",
- "close-board-pop": "You will be able to restore the board by clicking the “Archive” button from the home header.",
+ "close-board-pop": "आप होम हेडर से \"संग्रह\" बटन पर क्लिक करके बोर्ड को पुनर्स्थापित करने में सक्षम होंगे।",
"color-black": "काला",
"color-blue": "नीला",
- "color-crimson": "crimson",
- "color-darkgreen": "darkgreen",
- "color-gold": "gold",
- "color-gray": "gray",
+ "color-crimson": "गहरा लाल",
+ "color-darkgreen": "गहरा हरा",
+ "color-gold": "स्वर्ण",
+ "color-gray": "भूरे",
"color-green": "हरा",
- "color-indigo": "indigo",
+ "color-indigo": "नील",
"color-lime": "हल्का हरा",
- "color-magenta": "magenta",
- "color-mistyrose": "mistyrose",
+ "color-magenta": "मैजंटा",
+ "color-mistyrose": "हल्का गुलाबी",
"color-navy": "navy",
"color-orange": "नारंगी",
"color-paleturquoise": "paleturquoise",
@@ -204,7 +220,7 @@
"confirm-checklist-delete-dialog": "क्या आप वाकई जांचसूची हटाना चाहते हैं?",
"copy-card-link-to-clipboard": "कॉपी कार्ड क्लिपबोर्ड करने के लिए लिंक",
"linkCardPopup-title": "कार्ड कड़ी",
- "searchCardPopup-title": "कार्ड खोज",
+ "searchElementPopup-title": "Search",
"copyCardPopup-title": "कार्ड प्रतिलिपि",
"copyChecklistToManyCardsPopup-title": "कई कार्ड के लिए जांचसूची खाके की प्रतिलिपि बनाएँ",
"copyChecklistToManyCardsPopup-instructions": "इस JSON प्रारूप में गंतव्य कार्ड शीर्षक और विवरण",
@@ -453,6 +469,9 @@
"welcome-swimlane": "Milestone 1",
"welcome-list1": "Basics",
"welcome-list2": "Advanced",
+ "card-templates-swimlane": "कार्ड का खाका",
+ "list-templates-swimlane": "सूची का खाका",
+ "board-templates-swimlane": "बोर्ड का खाका",
"what-to-do": "What do you want तक do?",
"wipLimitErrorPopup-title": "Invalid WIP Limit",
"wipLimitErrorPopup-dialog-pt1": "The number of tasks अंदर में यह सूची is higher than the WIP limit you've defined.",
@@ -552,6 +571,8 @@
"activity-added-label-card": "संकलित label '%s'",
"activity-removed-label-card": "हटा दिया label '%s'",
"activity-delete-attach-card": "deleted an संलग्नक",
+ "activity-set-customfield": "set custom field '%s' to '%s' in %s",
+ "activity-unset-customfield": "unset custom field '%s' in %s",
"r-rule": "Rule",
"r-add-trigger": "जोड़ें trigger",
"r-add-action": "जोड़ें action",
@@ -593,7 +614,7 @@
"r-top-of": "Top of",
"r-bottom-of": "Bottom of",
"r-its-list": "its list",
- "r-archive": "Move to Archive",
+ "r-archive": "संग्रह में ले जाएं",
"r-unarchive": "Restore from Archive",
"r-card": "कार्ड",
"r-add": "जोड़ें",
diff --git a/i18n/hu.i18n.json b/i18n/hu.i18n.json
index 18b5b0a1..229c9fb4 100644
--- a/i18n/hu.i18n.json
+++ b/i18n/hu.i18n.json
@@ -1,28 +1,41 @@
{
"accept": "Elfogadás",
- "act-activity-notify": "Activity Notification",
- "act-addAttachment": "__attachment__ mellékletet csatolt a kártyához: __card__",
- "act-addSubtask": "added subtask __checklist__ to __card__",
- "act-addChecklist": "__checklist__ ellenőrzőlistát adott hozzá a kártyához: __card__",
- "act-addChecklistItem": "__checklistItem__ elemet adott hozzá a(z) __checklist__ ellenőrzőlistához ezen a kártyán: __card__",
- "act-addComment": "hozzászólt a(z) __card__ kártyán: __comment__",
- "act-createBoard": "létrehozta a táblát: __board__",
- "act-createCard": "__card__ kártyát adott hozzá a listához: __list__",
- "act-createCustomField": "létrehozta a(z) __customField__ egyéni listát",
- "act-createList": "__list__ listát adott hozzá a táblához: __board__",
- "act-addBoardMember": "__member__ tagot hozzáadta a táblához: __board__",
- "act-archivedBoard": "__board__ moved to Archive",
- "act-archivedCard": "__card__ moved to Archive",
- "act-archivedList": "__list__ moved to Archive",
- "act-archivedSwimlane": "__swimlane__ moved to Archive",
- "act-importBoard": "importálta a táblát: __board__",
- "act-importCard": "importálta a kártyát: __card__",
- "act-importList": "importálta a listát: __list__",
- "act-joinMember": "__member__ tagot hozzáadta a kártyához: __card__",
- "act-moveCard": "áthelyezte a(z) __card__ kártyát: __oldList__ → __list__",
- "act-removeBoardMember": "eltávolította __member__ tagot a tábláról: __board__",
- "act-restoredCard": "visszaállította a(z) __card__ kártyát ide: __board__",
- "act-unjoinMember": "eltávolította __member__ tagot a kártyáról: __card__",
+ "act-activity-notify": "Tevékenység értesítés",
+ "act-addAttachment": "added attachment __attachment__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-deleteAttachment": "deleted attachment __attachment__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-addSubtask": "added subtask __subtask__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-addLabel": "Added label __label__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-addedLabel": "Added label __label__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-removeLabel": "Removed label __label__ from card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-removedLabel": "Removed label __label__ from card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-addChecklist": "added checklist __checklist__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-addChecklistItem": "added checklist item __checklistItem__ to checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-removeChecklist": "removed checklist __checklist__ from card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-removeChecklistItem": "removed checklist item __checklistItem__ from checklist __checkList__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-checkedItem": "checked __checklistItem__ of checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-uncheckedItem": "unchecked __checklistItem__ of checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-completeChecklist": "completed checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-uncompleteChecklist": "uncompleted checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-addComment": "commented on card __card__: __comment__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-createBoard": "created board __board__",
+ "act-createSwimlane": "created swimlane __swimlane__ to board __board__",
+ "act-createCard": "created card __card__ to list __list__ at swimlane __swimlane__ at board __board__",
+ "act-createCustomField": "created custom field __customField__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-createList": "added list __list__ to board __board__",
+ "act-addBoardMember": "added member __member__ to board __board__",
+ "act-archivedBoard": "Board __board__ moved to Archive",
+ "act-archivedCard": "Card __card__ at list __list__ at swimlane __swimlane__ at board __board__ moved to Archive",
+ "act-archivedList": "List __list__ at swimlane __swimlane__ at board __board__ moved to Archive",
+ "act-archivedSwimlane": "Swimlane __swimlane__ at board __board__ moved to Archive",
+ "act-importBoard": "imported board __board__",
+ "act-importCard": "imported card __card__ to list __list__ at swimlane __swimlane__ at board __board__",
+ "act-importList": "imported list __list__ to swimlane __swimlane__ at board __board__",
+ "act-joinMember": "added member __member__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-moveCard": "moved card __card__ at board __board__ from list __oldList__ at swimlane __oldSwimlane__ to list __list__ at swimlane __swimlane__",
+ "act-moveCardToOtherBoard": "moved card __card__ from list __oldList__ at swimlane __oldSwimlane__ at board __oldBoard__ to list __list__ at swimlane __swimlane__ at board __board__",
+ "act-removeBoardMember": "removed member __member__ from board __board__",
+ "act-restoredCard": "restored card __card__ to list __list__ at swimlane __swimlane__ at board __board__",
+ "act-unjoinMember": "removed member __member__ from card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
"act-withBoardTitle": "__board__",
"act-withCardTitle": "[__board__] __card__",
"actions": "Műveletek",
@@ -47,14 +60,14 @@
"activity-unchecked-item": "unchecked %s in checklist %s of %s",
"activity-checklist-added": "ellenőrzőlista hozzáadva ehhez: %s",
"activity-checklist-removed": "removed a checklist from %s",
- "activity-checklist-completed": "completed the checklist %s of %s",
+ "activity-checklist-completed": "completed checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
"activity-checklist-uncompleted": "uncompleted the checklist %s of %s",
"activity-checklist-item-added": "ellenőrzőlista elem hozzáadva ehhez: „%s”, ebben: %s",
"activity-checklist-item-removed": "removed a checklist item from '%s' in %s",
"add": "Hozzáadás",
"activity-checked-item-card": "checked %s in checklist %s",
"activity-unchecked-item-card": "unchecked %s in checklist %s",
- "activity-checklist-completed-card": "completed the checklist %s",
+ "activity-checklist-completed-card": "completed checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
"activity-checklist-uncompleted-card": "uncompleted the checklist %s",
"add-attachment": "Melléklet hozzáadása",
"add-board": "Tábla hozzáadása",
@@ -92,6 +105,8 @@
"restore-board": "Tábla visszaállítása",
"no-archived-boards": "No Boards in Archive.",
"archives": "Archiválás",
+ "template": "Template",
+ "templates": "Templates",
"assign-member": "Tag hozzárendelése",
"attached": "csatolva",
"attachment": "Melléklet",
@@ -110,7 +125,7 @@
"boardChangeTitlePopup-title": "Tábla átnevezése",
"boardChangeVisibilityPopup-title": "Láthatóság megváltoztatása",
"boardChangeWatchPopup-title": "Megfigyelés megváltoztatása",
- "boardMenuPopup-title": "Tábla menü",
+ "boardMenuPopup-title": "Board Settings",
"boards": "Táblák",
"board-view": "Tábla nézet",
"board-view-cal": "Calendar",
@@ -143,6 +158,7 @@
"cardLabelsPopup-title": "Címkék",
"cardMembersPopup-title": "Tagok",
"cardMorePopup-title": "Több",
+ "cardTemplatePopup-title": "Create template",
"cards": "Kártyák",
"cards-count": "Kártyák",
"casSignIn": "Sign In with CAS",
@@ -204,7 +220,7 @@
"confirm-checklist-delete-dialog": "Are you sure you want to delete checklist?",
"copy-card-link-to-clipboard": "Kártya hivatkozásának másolása a vágólapra",
"linkCardPopup-title": "Link Card",
- "searchCardPopup-title": "Search Card",
+ "searchElementPopup-title": "Keresés",
"copyCardPopup-title": "Kártya másolása",
"copyChecklistToManyCardsPopup-title": "Ellenőrzőlista sablon másolása több kártyára",
"copyChecklistToManyCardsPopup-instructions": "A célkártyák címe és a leírások ebben a JSON formátumban",
@@ -453,6 +469,9 @@
"welcome-swimlane": "1. mérföldkő",
"welcome-list1": "Alapok",
"welcome-list2": "Speciális",
+ "card-templates-swimlane": "Card Templates",
+ "list-templates-swimlane": "List Templates",
+ "board-templates-swimlane": "Board Templates",
"what-to-do": "Mit szeretne tenni?",
"wipLimitErrorPopup-title": "Érvénytelen WIP korlát",
"wipLimitErrorPopup-dialog-pt1": "A listán lévő feladatok száma magasabb a meghatározott WIP korlátnál.",
@@ -552,6 +571,8 @@
"activity-added-label-card": "added label '%s'",
"activity-removed-label-card": "removed label '%s'",
"activity-delete-attach-card": "deleted an attachment",
+ "activity-set-customfield": "set custom field '%s' to '%s' in %s",
+ "activity-unset-customfield": "unset custom field '%s' in %s",
"r-rule": "Rule",
"r-add-trigger": "Add trigger",
"r-add-action": "Add action",
@@ -609,7 +630,7 @@
"r-check": "Check",
"r-uncheck": "Uncheck",
"r-item": "item",
- "r-of-checklist": "of checklist",
+ "r-of-checklist": "ellenőrzőlistából",
"r-send-email": "Send an email",
"r-to": "to",
"r-subject": "subject",
@@ -634,32 +655,32 @@
"r-d-remove-all-member": "Remove all member",
"r-d-check-all": "Check all items of a list",
"r-d-uncheck-all": "Uncheck all items of a list",
- "r-d-check-one": "Check item",
+ "r-d-check-one": "Elem ellenőrzése",
"r-d-uncheck-one": "Uncheck item",
- "r-d-check-of-list": "of checklist",
- "r-d-add-checklist": "Add checklist",
- "r-d-remove-checklist": "Remove checklist",
- "r-by": "by",
- "r-add-checklist": "Add checklist",
- "r-with-items": "with items",
+ "r-d-check-of-list": "ellenőrzőlistából",
+ "r-d-add-checklist": "Ellenőrzőlista hozzáadása",
+ "r-d-remove-checklist": "Ellenőrzőlista eltávolítása",
+ "r-by": "által",
+ "r-add-checklist": "Ellenőrzőlista hozzáadása",
+ "r-with-items": "elemekkel",
"r-items-list": "item1,item2,item3",
"r-add-swimlane": "Add swimlane",
"r-swimlane-name": "swimlane name",
"r-board-note": "Note: leave a field empty to match every possible value.",
"r-checklist-note": "Note: checklist's items have to be written as comma separated values.",
- "r-when-a-card-is-moved": "When a card is moved to another list",
+ "r-when-a-card-is-moved": "Amikor egy kártya másik listába kerül",
"ldap": "LDAP",
"oauth2": "OAuth2",
"cas": "CAS",
- "authentication-method": "Authentication method",
- "authentication-type": "Authentication type",
- "custom-product-name": "Custom Product Name",
- "layout": "Layout",
- "hide-logo": "Hide Logo",
- "add-custom-html-after-body-start": "Add Custom HTML after <body> start",
- "add-custom-html-before-body-end": "Add Custom HTML before </body> end",
- "error-undefined": "Something went wrong",
- "error-ldap-login": "An error occurred while trying to login",
- "display-authentication-method": "Display Authentication Method",
- "default-authentication-method": "Default Authentication Method"
+ "authentication-method": "Hitelesítési mód",
+ "authentication-type": "Hitelesítés típusa",
+ "custom-product-name": "Saját terméknév",
+ "layout": "Elrendezés",
+ "hide-logo": "Logo elrejtése",
+ "add-custom-html-after-body-start": "Egyedi HTML hozzáadása <body> után",
+ "add-custom-html-before-body-end": "1",
+ "error-undefined": "Valami hiba történt",
+ "error-ldap-login": "Hiba történt bejelentkezés közben",
+ "display-authentication-method": "Hitelelesítési mód mutatása",
+ "default-authentication-method": "Alapértelmezett hitelesítési mód"
} \ No newline at end of file
diff --git a/i18n/hy.i18n.json b/i18n/hy.i18n.json
index fe53857b..e15b7c37 100644
--- a/i18n/hy.i18n.json
+++ b/i18n/hy.i18n.json
@@ -1,28 +1,41 @@
{
"accept": "Ընդունել",
"act-activity-notify": "Activity Notification",
- "act-addAttachment": "attached __attachment__ to __card__",
- "act-addSubtask": "added subtask __checklist__ to __card__",
- "act-addChecklist": "added checklist __checklist__ to __card__",
- "act-addChecklistItem": "ավելացրել է __checklistItem__ __checklist__ on __card__-ին",
- "act-addComment": "մեկնաբանել է __card__: __comment__",
- "act-createBoard": "created __board__",
- "act-createCard": "added __card__ to __list__",
- "act-createCustomField": "created custom field __customField__",
- "act-createList": "added __list__ to __board__",
- "act-addBoardMember": "added __member__ to __board__",
- "act-archivedBoard": "__board__ moved to Archive",
- "act-archivedCard": "__card__ moved to Archive",
- "act-archivedList": "__list__ moved to Archive",
- "act-archivedSwimlane": "__swimlane__ moved to Archive",
- "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-addAttachment": "added attachment __attachment__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-deleteAttachment": "deleted attachment __attachment__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-addSubtask": "added subtask __subtask__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-addLabel": "Added label __label__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-addedLabel": "Added label __label__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-removeLabel": "Removed label __label__ from card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-removedLabel": "Removed label __label__ from card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-addChecklist": "added checklist __checklist__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-addChecklistItem": "added checklist item __checklistItem__ to checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-removeChecklist": "removed checklist __checklist__ from card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-removeChecklistItem": "removed checklist item __checklistItem__ from checklist __checkList__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-checkedItem": "checked __checklistItem__ of checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-uncheckedItem": "unchecked __checklistItem__ of checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-completeChecklist": "completed checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-uncompleteChecklist": "uncompleted checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-addComment": "commented on card __card__: __comment__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-createBoard": "created board __board__",
+ "act-createSwimlane": "created swimlane __swimlane__ to board __board__",
+ "act-createCard": "created card __card__ to list __list__ at swimlane __swimlane__ at board __board__",
+ "act-createCustomField": "created custom field __customField__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-createList": "added list __list__ to board __board__",
+ "act-addBoardMember": "added member __member__ to board __board__",
+ "act-archivedBoard": "Board __board__ moved to Archive",
+ "act-archivedCard": "Card __card__ at list __list__ at swimlane __swimlane__ at board __board__ moved to Archive",
+ "act-archivedList": "List __list__ at swimlane __swimlane__ at board __board__ moved to Archive",
+ "act-archivedSwimlane": "Swimlane __swimlane__ at board __board__ moved to Archive",
+ "act-importBoard": "imported board __board__",
+ "act-importCard": "imported card __card__ to list __list__ at swimlane __swimlane__ at board __board__",
+ "act-importList": "imported list __list__ to swimlane __swimlane__ at board __board__",
+ "act-joinMember": "added member __member__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-moveCard": "moved card __card__ at board __board__ from list __oldList__ at swimlane __oldSwimlane__ to list __list__ at swimlane __swimlane__",
+ "act-moveCardToOtherBoard": "moved card __card__ from list __oldList__ at swimlane __oldSwimlane__ at board __oldBoard__ to list __list__ at swimlane __swimlane__ at board __board__",
+ "act-removeBoardMember": "removed member __member__ from board __board__",
+ "act-restoredCard": "restored card __card__ to list __list__ at swimlane __swimlane__ at board __board__",
+ "act-unjoinMember": "removed member __member__ from card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
"act-withBoardTitle": "__board__",
"act-withCardTitle": "[__board__] __card__",
"actions": "Actions",
@@ -47,14 +60,14 @@
"activity-unchecked-item": "unchecked %s in checklist %s of %s",
"activity-checklist-added": "added checklist to %s",
"activity-checklist-removed": "removed a checklist from %s",
- "activity-checklist-completed": "completed the checklist %s of %s",
+ "activity-checklist-completed": "completed checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
"activity-checklist-uncompleted": "uncompleted the checklist %s of %s",
"activity-checklist-item-added": "added checklist item to '%s' in %s",
"activity-checklist-item-removed": "removed a checklist item from '%s' in %s",
"add": "Add",
"activity-checked-item-card": "checked %s in checklist %s",
"activity-unchecked-item-card": "unchecked %s in checklist %s",
- "activity-checklist-completed-card": "completed the checklist %s",
+ "activity-checklist-completed-card": "completed checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
"activity-checklist-uncompleted-card": "uncompleted the checklist %s",
"add-attachment": "Add Attachment",
"add-board": "Add Board",
@@ -92,6 +105,8 @@
"restore-board": "Restore Board",
"no-archived-boards": "No Boards in Archive.",
"archives": "Archive",
+ "template": "Template",
+ "templates": "Templates",
"assign-member": "Assign member",
"attached": "attached",
"attachment": "Attachment",
@@ -110,7 +125,7 @@
"boardChangeTitlePopup-title": "Rename Board",
"boardChangeVisibilityPopup-title": "Change Visibility",
"boardChangeWatchPopup-title": "Change Watch",
- "boardMenuPopup-title": "Board Menu",
+ "boardMenuPopup-title": "Board Settings",
"boards": "Boards",
"board-view": "Board View",
"board-view-cal": "Calendar",
@@ -143,6 +158,7 @@
"cardLabelsPopup-title": "Labels",
"cardMembersPopup-title": "Members",
"cardMorePopup-title": "More",
+ "cardTemplatePopup-title": "Create template",
"cards": "Cards",
"cards-count": "Cards",
"casSignIn": "Sign In with CAS",
@@ -204,7 +220,7 @@
"confirm-checklist-delete-dialog": "Are you sure you want to delete checklist?",
"copy-card-link-to-clipboard": "Copy card link to clipboard",
"linkCardPopup-title": "Link Card",
- "searchCardPopup-title": "Search Card",
+ "searchElementPopup-title": "Search",
"copyCardPopup-title": "Copy Card",
"copyChecklistToManyCardsPopup-title": "Copy Checklist Template to Many Cards",
"copyChecklistToManyCardsPopup-instructions": "Destination Card Titles and Descriptions in this JSON format",
@@ -453,6 +469,9 @@
"welcome-swimlane": "Milestone 1",
"welcome-list1": "Basics",
"welcome-list2": "Advanced",
+ "card-templates-swimlane": "Card Templates",
+ "list-templates-swimlane": "List Templates",
+ "board-templates-swimlane": "Board Templates",
"what-to-do": "What do you want to do?",
"wipLimitErrorPopup-title": "Invalid WIP Limit",
"wipLimitErrorPopup-dialog-pt1": "The number of tasks in this list is higher than the WIP limit you've defined.",
@@ -552,6 +571,8 @@
"activity-added-label-card": "added label '%s'",
"activity-removed-label-card": "removed label '%s'",
"activity-delete-attach-card": "deleted an attachment",
+ "activity-set-customfield": "set custom field '%s' to '%s' in %s",
+ "activity-unset-customfield": "unset custom field '%s' in %s",
"r-rule": "Rule",
"r-add-trigger": "Add trigger",
"r-add-action": "Add action",
diff --git a/i18n/id.i18n.json b/i18n/id.i18n.json
index 2f363bb9..4d64b735 100644
--- a/i18n/id.i18n.json
+++ b/i18n/id.i18n.json
@@ -1,28 +1,41 @@
{
"accept": "Terima",
"act-activity-notify": "Activity Notification",
- "act-addAttachment": "Lampirkan__attachment__ke__kartu__",
- "act-addSubtask": "added subtask __checklist__ to __card__",
- "act-addChecklist": "added checklist __checklist__ to __card__",
- "act-addChecklistItem": "added __checklistItem__ to checklist __checklist__ on __card__",
- "act-addComment": "Dikomentari di__kartu__:__comment__",
- "act-createBoard": "Panel__dibuat__",
- "act-createCard": "Kartu__dilampirkan__ke__Daftar",
- "act-createCustomField": "created custom field __customField__",
- "act-createList": "Daftar__ditambahkan__ke__Panel",
- "act-addBoardMember": "Partisipan__ditambahkan__ke__Kartu",
- "act-archivedBoard": "__board__ moved to Archive",
- "act-archivedCard": "__card__ moved to Archive",
- "act-archivedList": "__list__ moved to Archive",
- "act-archivedSwimlane": "__swimlane__ moved to Archive",
- "act-importBoard": "Panel__diimpor",
- "act-importCard": "Kartu__diimpor__",
- "act-importList": "Daftar__diimpor__",
- "act-joinMember": "Partisipan__ditambahkan__ke__kartu",
- "act-moveCard": "Pindahkan__kartu__dari__daftarlama__ke__daftar",
- "act-removeBoardMember": "Hapus__partisipan__dari__panel",
- "act-restoredCard": "Kembalikan__kartu__ke__panel",
- "act-unjoinMember": "hapus__partisipan__dari__kartu__",
+ "act-addAttachment": "added attachment __attachment__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-deleteAttachment": "deleted attachment __attachment__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-addSubtask": "added subtask __subtask__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-addLabel": "Added label __label__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-addedLabel": "Added label __label__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-removeLabel": "Removed label __label__ from card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-removedLabel": "Removed label __label__ from card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-addChecklist": "added checklist __checklist__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-addChecklistItem": "added checklist item __checklistItem__ to checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-removeChecklist": "removed checklist __checklist__ from card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-removeChecklistItem": "removed checklist item __checklistItem__ from checklist __checkList__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-checkedItem": "checked __checklistItem__ of checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-uncheckedItem": "unchecked __checklistItem__ of checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-completeChecklist": "completed checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-uncompleteChecklist": "uncompleted checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-addComment": "commented on card __card__: __comment__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-createBoard": "created board __board__",
+ "act-createSwimlane": "created swimlane __swimlane__ to board __board__",
+ "act-createCard": "created card __card__ to list __list__ at swimlane __swimlane__ at board __board__",
+ "act-createCustomField": "created custom field __customField__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-createList": "added list __list__ to board __board__",
+ "act-addBoardMember": "added member __member__ to board __board__",
+ "act-archivedBoard": "Board __board__ moved to Archive",
+ "act-archivedCard": "Card __card__ at list __list__ at swimlane __swimlane__ at board __board__ moved to Archive",
+ "act-archivedList": "List __list__ at swimlane __swimlane__ at board __board__ moved to Archive",
+ "act-archivedSwimlane": "Swimlane __swimlane__ at board __board__ moved to Archive",
+ "act-importBoard": "imported board __board__",
+ "act-importCard": "imported card __card__ to list __list__ at swimlane __swimlane__ at board __board__",
+ "act-importList": "imported list __list__ to swimlane __swimlane__ at board __board__",
+ "act-joinMember": "added member __member__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-moveCard": "moved card __card__ at board __board__ from list __oldList__ at swimlane __oldSwimlane__ to list __list__ at swimlane __swimlane__",
+ "act-moveCardToOtherBoard": "moved card __card__ from list __oldList__ at swimlane __oldSwimlane__ at board __oldBoard__ to list __list__ at swimlane __swimlane__ at board __board__",
+ "act-removeBoardMember": "removed member __member__ from board __board__",
+ "act-restoredCard": "restored card __card__ to list __list__ at swimlane __swimlane__ at board __board__",
+ "act-unjoinMember": "removed member __member__ from card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
"act-withBoardTitle": "__board__",
"act-withCardTitle": "__kartu__[__Panel__]",
"actions": "Daftar Tindakan",
@@ -47,14 +60,14 @@
"activity-unchecked-item": "unchecked %s in checklist %s of %s",
"activity-checklist-added": "daftar periksa ditambahkan ke %s",
"activity-checklist-removed": "removed a checklist from %s",
- "activity-checklist-completed": "completed the checklist %s of %s",
+ "activity-checklist-completed": "completed checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
"activity-checklist-uncompleted": "uncompleted the checklist %s of %s",
"activity-checklist-item-added": "added checklist item to '%s' in %s",
"activity-checklist-item-removed": "removed a checklist item from '%s' in %s",
"add": "Tambah",
"activity-checked-item-card": "checked %s in checklist %s",
"activity-unchecked-item-card": "unchecked %s in checklist %s",
- "activity-checklist-completed-card": "completed the checklist %s",
+ "activity-checklist-completed-card": "completed checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
"activity-checklist-uncompleted-card": "uncompleted the checklist %s",
"add-attachment": "Add Attachment",
"add-board": "Add Board",
@@ -92,6 +105,8 @@
"restore-board": "Restore Board",
"no-archived-boards": "No Boards in Archive.",
"archives": "Arsip",
+ "template": "Template",
+ "templates": "Templates",
"assign-member": "Tugaskan anggota",
"attached": "terlampir",
"attachment": "Lampiran",
@@ -110,7 +125,7 @@
"boardChangeTitlePopup-title": "Ganti Nama Panel",
"boardChangeVisibilityPopup-title": "Ubah Penampakan",
"boardChangeWatchPopup-title": "Ubah Pengamatan",
- "boardMenuPopup-title": "Menu Panel",
+ "boardMenuPopup-title": "Board Settings",
"boards": "Panel",
"board-view": "Board View",
"board-view-cal": "Calendar",
@@ -143,6 +158,7 @@
"cardLabelsPopup-title": "Daftar Label",
"cardMembersPopup-title": "Daftar Anggota",
"cardMorePopup-title": "Lainnya",
+ "cardTemplatePopup-title": "Create template",
"cards": "Daftar Kartu",
"cards-count": "Daftar Kartu",
"casSignIn": "Sign In with CAS",
@@ -204,7 +220,7 @@
"confirm-checklist-delete-dialog": "Are you sure you want to delete checklist?",
"copy-card-link-to-clipboard": "Copy card link to clipboard",
"linkCardPopup-title": "Link Card",
- "searchCardPopup-title": "Search Card",
+ "searchElementPopup-title": "Cari",
"copyCardPopup-title": "Copy Card",
"copyChecklistToManyCardsPopup-title": "Copy Checklist Template to Many Cards",
"copyChecklistToManyCardsPopup-instructions": "Destination Card Titles and Descriptions in this JSON format",
@@ -453,6 +469,9 @@
"welcome-swimlane": "Milestone 1",
"welcome-list1": "Tingkat dasar",
"welcome-list2": "Tingkat lanjut",
+ "card-templates-swimlane": "Card Templates",
+ "list-templates-swimlane": "List Templates",
+ "board-templates-swimlane": "Board Templates",
"what-to-do": "Apa yang mau Anda lakukan?",
"wipLimitErrorPopup-title": "Invalid WIP Limit",
"wipLimitErrorPopup-dialog-pt1": "The number of tasks in this list is higher than the WIP limit you've defined.",
@@ -552,6 +571,8 @@
"activity-added-label-card": "added label '%s'",
"activity-removed-label-card": "removed label '%s'",
"activity-delete-attach-card": "deleted an attachment",
+ "activity-set-customfield": "set custom field '%s' to '%s' in %s",
+ "activity-unset-customfield": "unset custom field '%s' in %s",
"r-rule": "Rule",
"r-add-trigger": "Add trigger",
"r-add-action": "Add action",
diff --git a/i18n/ig.i18n.json b/i18n/ig.i18n.json
index 27cee963..8603ec13 100644
--- a/i18n/ig.i18n.json
+++ b/i18n/ig.i18n.json
@@ -1,28 +1,41 @@
{
"accept": "Kwere",
"act-activity-notify": "Activity Notification",
- "act-addAttachment": "attached __attachment__ to __card__",
- "act-addSubtask": "added subtask __checklist__ to __card__",
- "act-addChecklist": "added checklist __checklist__ to __card__",
- "act-addChecklistItem": "added __checklistItem__ to checklist __checklist__ on __card__",
- "act-addComment": "commented on __card__: __comment__",
- "act-createBoard": "created __board__",
- "act-createCard": "added __card__ to __list__",
- "act-createCustomField": "created custom field __customField__",
- "act-createList": "added __list__ to __board__",
- "act-addBoardMember": "added __member__ to __board__",
- "act-archivedBoard": "__board__ moved to Archive",
- "act-archivedCard": "__card__ moved to Archive",
- "act-archivedList": "__list__ moved to Archive",
- "act-archivedSwimlane": "__swimlane__ moved to Archive",
- "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-addAttachment": "added attachment __attachment__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-deleteAttachment": "deleted attachment __attachment__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-addSubtask": "added subtask __subtask__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-addLabel": "Added label __label__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-addedLabel": "Added label __label__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-removeLabel": "Removed label __label__ from card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-removedLabel": "Removed label __label__ from card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-addChecklist": "added checklist __checklist__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-addChecklistItem": "added checklist item __checklistItem__ to checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-removeChecklist": "removed checklist __checklist__ from card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-removeChecklistItem": "removed checklist item __checklistItem__ from checklist __checkList__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-checkedItem": "checked __checklistItem__ of checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-uncheckedItem": "unchecked __checklistItem__ of checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-completeChecklist": "completed checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-uncompleteChecklist": "uncompleted checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-addComment": "commented on card __card__: __comment__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-createBoard": "created board __board__",
+ "act-createSwimlane": "created swimlane __swimlane__ to board __board__",
+ "act-createCard": "created card __card__ to list __list__ at swimlane __swimlane__ at board __board__",
+ "act-createCustomField": "created custom field __customField__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-createList": "added list __list__ to board __board__",
+ "act-addBoardMember": "added member __member__ to board __board__",
+ "act-archivedBoard": "Board __board__ moved to Archive",
+ "act-archivedCard": "Card __card__ at list __list__ at swimlane __swimlane__ at board __board__ moved to Archive",
+ "act-archivedList": "List __list__ at swimlane __swimlane__ at board __board__ moved to Archive",
+ "act-archivedSwimlane": "Swimlane __swimlane__ at board __board__ moved to Archive",
+ "act-importBoard": "imported board __board__",
+ "act-importCard": "imported card __card__ to list __list__ at swimlane __swimlane__ at board __board__",
+ "act-importList": "imported list __list__ to swimlane __swimlane__ at board __board__",
+ "act-joinMember": "added member __member__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-moveCard": "moved card __card__ at board __board__ from list __oldList__ at swimlane __oldSwimlane__ to list __list__ at swimlane __swimlane__",
+ "act-moveCardToOtherBoard": "moved card __card__ from list __oldList__ at swimlane __oldSwimlane__ at board __oldBoard__ to list __list__ at swimlane __swimlane__ at board __board__",
+ "act-removeBoardMember": "removed member __member__ from board __board__",
+ "act-restoredCard": "restored card __card__ to list __list__ at swimlane __swimlane__ at board __board__",
+ "act-unjoinMember": "removed member __member__ from card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
"act-withBoardTitle": "__board__",
"act-withCardTitle": "[__board__] __card__",
"actions": "Actions",
@@ -47,14 +60,14 @@
"activity-unchecked-item": "unchecked %s in checklist %s of %s",
"activity-checklist-added": "added checklist to %s",
"activity-checklist-removed": "removed a checklist from %s",
- "activity-checklist-completed": "completed the checklist %s of %s",
+ "activity-checklist-completed": "completed checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
"activity-checklist-uncompleted": "uncompleted the checklist %s of %s",
"activity-checklist-item-added": "added checklist item to '%s' in %s",
"activity-checklist-item-removed": "removed a checklist item from '%s' in %s",
"add": "Tinye",
"activity-checked-item-card": "checked %s in checklist %s",
"activity-unchecked-item-card": "unchecked %s in checklist %s",
- "activity-checklist-completed-card": "completed the checklist %s",
+ "activity-checklist-completed-card": "completed checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
"activity-checklist-uncompleted-card": "uncompleted the checklist %s",
"add-attachment": "Add Attachment",
"add-board": "Add Board",
@@ -92,6 +105,8 @@
"restore-board": "Restore Board",
"no-archived-boards": "No Boards in Archive.",
"archives": "Archive",
+ "template": "Template",
+ "templates": "Templates",
"assign-member": "Assign member",
"attached": "attached",
"attachment": "Attachment",
@@ -110,7 +125,7 @@
"boardChangeTitlePopup-title": "Rename Board",
"boardChangeVisibilityPopup-title": "Change Visibility",
"boardChangeWatchPopup-title": "Change Watch",
- "boardMenuPopup-title": "Board Menu",
+ "boardMenuPopup-title": "Board Settings",
"boards": "Boards",
"board-view": "Board View",
"board-view-cal": "Calendar",
@@ -143,6 +158,7 @@
"cardLabelsPopup-title": "Aha",
"cardMembersPopup-title": "Ndị otu",
"cardMorePopup-title": "More",
+ "cardTemplatePopup-title": "Create template",
"cards": "Cards",
"cards-count": "Cards",
"casSignIn": "Sign In with CAS",
@@ -204,7 +220,7 @@
"confirm-checklist-delete-dialog": "Are you sure you want to delete checklist?",
"copy-card-link-to-clipboard": "Copy card link to clipboard",
"linkCardPopup-title": "Link Card",
- "searchCardPopup-title": "Search Card",
+ "searchElementPopup-title": "Search",
"copyCardPopup-title": "Copy Card",
"copyChecklistToManyCardsPopup-title": "Copy Checklist Template to Many Cards",
"copyChecklistToManyCardsPopup-instructions": "Destination Card Titles and Descriptions in this JSON format",
@@ -453,6 +469,9 @@
"welcome-swimlane": "Milestone 1",
"welcome-list1": "Basics",
"welcome-list2": "Advanced",
+ "card-templates-swimlane": "Card Templates",
+ "list-templates-swimlane": "List Templates",
+ "board-templates-swimlane": "Board Templates",
"what-to-do": "What do you want to do?",
"wipLimitErrorPopup-title": "Invalid WIP Limit",
"wipLimitErrorPopup-dialog-pt1": "The number of tasks in this list is higher than the WIP limit you've defined.",
@@ -552,6 +571,8 @@
"activity-added-label-card": "added label '%s'",
"activity-removed-label-card": "removed label '%s'",
"activity-delete-attach-card": "deleted an attachment",
+ "activity-set-customfield": "set custom field '%s' to '%s' in %s",
+ "activity-unset-customfield": "unset custom field '%s' in %s",
"r-rule": "Rule",
"r-add-trigger": "Add trigger",
"r-add-action": "Add action",
diff --git a/i18n/it.i18n.json b/i18n/it.i18n.json
index 82187722..38176677 100644
--- a/i18n/it.i18n.json
+++ b/i18n/it.i18n.json
@@ -1,28 +1,41 @@
{
"accept": "Accetta",
"act-activity-notify": "Notifica attività ",
- "act-addAttachment": "ha allegato __attachment__ a __card__",
- "act-addSubtask": "ha aggiunto il sotto compito__checklist__in_card__",
- "act-addChecklist": "aggiunta checklist __checklist__ a __card__",
- "act-addChecklistItem": "aggiunto __checklistItem__ alla checklist __checklist__ di __card__",
- "act-addComment": "ha commentato su __card__: __comment__",
- "act-createBoard": "ha creato __board__",
- "act-createCard": "ha aggiunto __card__ a __list__",
- "act-createCustomField": "campo personalizzato __customField__ creato",
- "act-createList": "ha aggiunto __list__ a __board__",
- "act-addBoardMember": "ha aggiunto __member__ a __board__",
- "act-archivedBoard": "__board__ spostata nell'archivio ",
- "act-archivedCard": "__card__ spostata nell'archivio",
- "act-archivedList": "__list__ spostato nell'archivio",
- "act-archivedSwimlane": "__swimlane__ spostato nell'archivio",
- "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__ a __board__",
- "act-restoredCard": "ha ripristinato __card__ su __board__",
- "act-unjoinMember": "ha rimosso __member__ da __card__",
+ "act-addAttachment": "aggiunto allegato __attachment__ alla scheda __card__ della lista __list__ della corsia __swimlane__  nella bacheca __board__",
+ "act-deleteAttachment": "eliminato allegato __attachment__ dalla scheda __card__ della lista __list__ della corsia __swimlane__  nella bacheca __board__",
+ "act-addSubtask": "aggiunto sottotask __subtask__ alla scheda __card__ della lista __list__ della corsia __swimlane__  nella bacheca __board__",
+ "act-addLabel": "aggiunta etichetta __label__ alla scheda __card__ della lista __list__ della corsia __swimlane__  nella bacheca __board__",
+ "act-addedLabel": "aggiunta etichetta __label__ alla scheda __card__ della lista __list__ della corsia __swimlane__  nella bacheca __board__",
+ "act-removeLabel": "rimossa etichetta __label__ dalla scheda __card__ della lista __list__ della corsia __swimlane__  nella bacheca __board__",
+ "act-removedLabel": "rimossa etichetta __label__ dalla scheda __card__ della lista __list__ della corsia __swimlane__  nella bacheca __board__",
+ "act-addChecklist": "aggiunta lista di controllo __label__ alla scheda __card__ della lista __list__ della corsia __swimlane__  nella bacheca __board__",
+ "act-addChecklistItem": "aggiunto elemento __checklistItem__ alla lista di controllo __checklist__ della scheda __card__ della lista __list__ della corsia __swimlane__  nella bacheca __board__",
+ "act-removeChecklist": "rimossa lista di controllo __checklist__ dalla scheda __card__ della lista __list__ della corsia __swimlane__  nella bacheca __board__",
+ "act-removeChecklistItem": "rimosso elemento __checklistitem__ dalla lista di controllo __checkList__ della scheda __card__ della lista __list__ della corsia __swimlane__  nella bacheca __board__",
+ "act-checkedItem": "attivato __checklistitem__ nella lista di controllo __checklist__ della scheda __card__ della lista __list__ della corsia __swimlane__ nella bacheca __board__",
+ "act-uncheckedItem": "disattivato __checklistItem__ della lista di controllo __checklist__ dalla scheda __card__ della lista __list__ della corsia __swimlane__ nella bacheca __board__",
+ "act-completeChecklist": "completata lista di controllo __checklist__ nella scheda __card__ della lista __list__ della corsia __swimlane__ nella bacheca __board__",
+ "act-uncompleteChecklist": "lista di controllo __checklist__ incompleta nella scheda __card__ della lista __list__ in corsia __swimlane__ della bacheca __board__",
+ "act-addComment": "commento sulla scheda __card__: __comment__ nella lista __list__ della corsia __swimlane__ della bacheca __board__",
+ "act-createBoard": "bacheca __board__ creata",
+ "act-createSwimlane": "created swimlane __swimlane__ to board __board__",
+ "act-createCard": "scheda __card__ creata nella lista __list__ della corsia __swimlane__ della bacheca __board__",
+ "act-createCustomField": "campo personalizzato __customField__ creato nella scheda __card__ della lista __list__ in corsia __swimlane__ della bacheca __board__",
+ "act-createList": "aggiunta lista __list__ alla bacheca __board__",
+ "act-addBoardMember": "aggiunto membro __member__ alla bacheca __board__",
+ "act-archivedBoard": "Bacheca __board__ archiviata",
+ "act-archivedCard": "Scheda __card__ della lista __list__ della corsia __swimlane__ della bacheca __board__ archiviata",
+ "act-archivedList": "Lista __list__ della corsia __swimlane__ della bacheca __board__ archiviata",
+ "act-archivedSwimlane": "Corsia __swimlane__ della bacheca __board__ archiviata",
+ "act-importBoard": "Bacheca __board__ importata",
+ "act-importCard": "scheda importata __card__ nella lista __list__ della corsia __swimlane__ della bacheca __board__",
+ "act-importList": "lista __list__ importata nella corsia __swimlane__ della bacheca __board__",
+ "act-joinMember": "aggiunto membro __member__ alla scheda __card__ della list __list__ nella corsia __swimlane__ della bacheca __board__",
+ "act-moveCard": "spostata scheda __card__ della bacheca __board__ dalla lista __oldList__ della corsia __oldSwimlane__ alla lista __list__ della corsia __swimlane__",
+ "act-moveCardToOtherBoard": "postata scheda __card__ dalla lista __oldList__ della corsia __oldSwimlane__ della bacheca __oldBoard__ alla lista __list__ nella corsia __swimlane__ della bacheca __board__",
+ "act-removeBoardMember": "rimosso membro __member__ dalla bacheca __board__",
+ "act-restoredCard": "scheda ripristinata __card__ della lista __list__ nella corsia __swimlane__ della bacheca __board__",
+ "act-unjoinMember": "rimosso membro __member__ dalla scheda __card__ della lista __list__ della corsia __swimlane__ nella bacheca __board__",
"act-withBoardTitle": "__board__",
"act-withCardTitle": "[__board__] __card__",
"actions": "Azioni",
@@ -32,7 +45,7 @@
"activity-archived": "%s spostato nell'archivio",
"activity-attached": "allegato %s a %s",
"activity-created": "creato %s",
- "activity-customfield-created": "Campo personalizzato creato",
+ "activity-customfield-created": "%s creato come campo personalizzato",
"activity-excluded": "escluso %s da %s",
"activity-imported": "importato %s in %s da %s",
"activity-imported-board": "importato %s da %s",
@@ -47,19 +60,19 @@
"activity-unchecked-item": "disattivato %s nella checklist %s di %s",
"activity-checklist-added": "aggiunta checklist a %s",
"activity-checklist-removed": "È stata rimossa una checklist da%s",
- "activity-checklist-completed": "completed the checklist %s of %s",
- "activity-checklist-uncompleted": "uncompleted the checklist %s of %s",
+ "activity-checklist-completed": "checklist __checklist__ completata nella scheda __card__ della lista __list__ della corsia __swimlane__  nella bacheca __board__",
+ "activity-checklist-uncompleted": "La checklist non è stata completata",
"activity-checklist-item-added": "Aggiunto l'elemento checklist a '%s' in %s",
- "activity-checklist-item-removed": "removed a checklist item from '%s' in %s",
+ "activity-checklist-item-removed": "è stato rimosso un elemento della checklist da '%s' in %s",
"add": "Aggiungere",
- "activity-checked-item-card": "checked %s in checklist %s",
- "activity-unchecked-item-card": "unchecked %s in checklist %s",
- "activity-checklist-completed-card": "completed the checklist %s",
- "activity-checklist-uncompleted-card": "uncompleted the checklist %s",
+ "activity-checked-item-card": "%s è stato selezionato nella checklist %s",
+ "activity-unchecked-item-card": "%s è stato deselezionato nella checklist %s",
+ "activity-checklist-completed-card": "checklist __label__ completata nella scheda __card__ della lista __list__ della corsia __swimlane__  nella bacheca __board__",
+ "activity-checklist-uncompleted-card": "La checklist %s non è completa",
"add-attachment": "Aggiungi Allegato",
"add-board": "Aggiungi Bacheca",
"add-card": "Aggiungi Scheda",
- "add-swimlane": "Aggiungi Corsia",
+ "add-swimlane": "Aggiungi Diagramma Swimlane",
"add-subtask": "Aggiungi sotto-compito",
"add-checklist": "Aggiungi Checklist",
"add-checklist-item": "Aggiungi un elemento alla checklist",
@@ -78,20 +91,22 @@
"and-n-other-card": "E __count__ altra scheda",
"and-n-other-card_plural": "E __count__ altre schede",
"apply": "Applica",
- "app-is-offline": "Loading, please wait. Refreshing the page will cause data loss. If loading does not work, please check that server has not stopped.",
- "archive": "Move to Archive",
- "archive-all": "Move All to Archive",
- "archive-board": "Move Board to Archive",
- "archive-card": "Move Card to Archive",
- "archive-list": "Move List to Archive",
- "archive-swimlane": "Move Swimlane to Archive",
- "archive-selection": "Move selection to Archive",
- "archiveBoardPopup-title": "Move Board to Archive?",
+ "app-is-offline": "Caricamento, attendere prego. Aggiornare la pagina porterà ad una perdita dei dati. Se il caricamento non dovesse funzionare, per favore controlla che il server non sia stato fermato.",
+ "archive": "Sposta nell'Archivio",
+ "archive-all": "Sposta tutto nell'Archivio",
+ "archive-board": "Sposta la bacheca nell'Archivio",
+ "archive-card": "Sposta la scheda nell'Archivio",
+ "archive-list": "Sposta elenco nell'Archivio",
+ "archive-swimlane": "Sposta diagramma nell'Archivio",
+ "archive-selection": "Sposta la selezione nell'archivio",
+ "archiveBoardPopup-title": "Spostare al bacheca nell'archivio?",
"archived-items": "Archivia",
- "archived-boards": "Boards in Archive",
+ "archived-boards": "Bacheche nell'archivio",
"restore-board": "Ripristina Bacheca",
- "no-archived-boards": "No Boards in Archive.",
+ "no-archived-boards": "Nessuna bacheca presente nell'archivio",
"archives": "Archivia",
+ "template": "Template",
+ "templates": "Templates",
"assign-member": "Aggiungi membro",
"attached": "allegato",
"attachment": "Allegato",
@@ -110,20 +125,20 @@
"boardChangeTitlePopup-title": "Rinomina bacheca",
"boardChangeVisibilityPopup-title": "Cambia visibilità",
"boardChangeWatchPopup-title": "Cambia faccia",
- "boardMenuPopup-title": "Menu bacheca",
+ "boardMenuPopup-title": "Impostazioni bacheca",
"boards": "Bacheche",
"board-view": "Visualizza bacheca",
"board-view-cal": "Calendario",
- "board-view-swimlanes": "Corsie",
+ "board-view-swimlanes": "Diagramma Swimlane",
"board-view-lists": "Liste",
"bucket-example": "Per esempio come \"una lista di cose da fare\"",
"cancel": "Cancella",
- "card-archived": "This card is moved to Archive.",
- "board-archived": "This board is moved to Archive.",
+ "card-archived": "Questa scheda è stata spostata nell'archivio",
+ "board-archived": "Questa bacheca è stata spostata nell'archivio",
"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": "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": "You can move a card to Archive to remove it from the board and preserve the activity.",
+ "card-delete-suggest-archive": "Puoi spostare una scheda nell'archivio per rimuoverla dalla bacheca e mantenere la sua attività",
"card-due": "Scadenza",
"card-due-on": "Scade",
"card-spent": "Tempo trascorso",
@@ -143,6 +158,7 @@
"cardLabelsPopup-title": "Etichette",
"cardMembersPopup-title": "Membri",
"cardMorePopup-title": "Altro",
+ "cardTemplatePopup-title": "Crea un template",
"cards": "Schede",
"cards-count": "Schede",
"casSignIn": "Entra con CAS",
@@ -166,33 +182,33 @@
"clipboard": "Clipboard o drag & drop",
"close": "Chiudi",
"close-board": "Chiudi bacheca",
- "close-board-pop": "You will be able to restore the board by clicking the “Archive” button from the home header.",
+ "close-board-pop": "Potrai ripristinare la bacheca cliccando sul tasto \"Archivio\" presente nell'intestazione della home.",
"color-black": "nero",
"color-blue": "blu",
- "color-crimson": "crimson",
- "color-darkgreen": "darkgreen",
- "color-gold": "gold",
- "color-gray": "gray",
+ "color-crimson": "Rosso cremisi",
+ "color-darkgreen": "Verde scuro",
+ "color-gold": "Dorato",
+ "color-gray": "Grigio",
"color-green": "verde",
- "color-indigo": "indigo",
+ "color-indigo": "Indaco",
"color-lime": "lime",
- "color-magenta": "magenta",
- "color-mistyrose": "mistyrose",
- "color-navy": "navy",
+ "color-magenta": "Magenta",
+ "color-mistyrose": "Mistyrose",
+ "color-navy": "Navy",
"color-orange": "arancione",
- "color-paleturquoise": "paleturquoise",
- "color-peachpuff": "peachpuff",
+ "color-paleturquoise": "Turchese chiaro",
+ "color-peachpuff": "Pesca",
"color-pink": "rosa",
- "color-plum": "plum",
+ "color-plum": "Prugna",
"color-purple": "viola",
"color-red": "rosso",
- "color-saddlebrown": "saddlebrown",
- "color-silver": "silver",
+ "color-saddlebrown": "Saddlebrown",
+ "color-silver": "Argento",
"color-sky": "azzurro",
- "color-slateblue": "slateblue",
- "color-white": "white",
+ "color-slateblue": "Ardesia",
+ "color-white": "Bianco",
"color-yellow": "giallo",
- "unset-color": "Unset",
+ "unset-color": "Non impostato",
"comment": "Commento",
"comment-placeholder": "Scrivi Commento",
"comment-only": "Solo commenti",
@@ -204,7 +220,7 @@
"confirm-checklist-delete-dialog": "Sei sicuro di voler eliminare la checklist?",
"copy-card-link-to-clipboard": "Copia link della scheda sulla clipboard",
"linkCardPopup-title": "Collega scheda",
- "searchCardPopup-title": "Cerca scheda",
+ "searchElementPopup-title": "Cerca",
"copyCardPopup-title": "Copia Scheda",
"copyChecklistToManyCardsPopup-title": "Copia template checklist su più schede",
"copyChecklistToManyCardsPopup-instructions": "Titolo e la descrizione della scheda di destinazione in questo formato JSON",
@@ -220,7 +236,7 @@
"custom-field-checkbox": "Casella di scelta",
"custom-field-date": "Data",
"custom-field-dropdown": "Lista a discesa",
- "custom-field-dropdown-none": "(nessun)",
+ "custom-field-dropdown-none": "(niente)",
"custom-field-dropdown-options": "Lista opzioni",
"custom-field-dropdown-options-placeholder": "Premi invio per aggiungere altre opzioni",
"custom-field-dropdown-unknown": "(sconosciuto)",
@@ -299,20 +315,20 @@
"import-board": "Importa bacheca",
"import-board-c": "Importa bacheca",
"import-board-title-trello": "Importa una bacheca da Trello",
- "import-board-title-wekan": "Import board from previous export",
- "import-sandstorm-backup-warning": "Do not delete data you import from original exported board or Trello before checking does this grain close and open again, or do you get Board not found error, that means data loss.",
+ "import-board-title-wekan": "Importa bacheca dall'esportazione precedente",
+ "import-sandstorm-backup-warning": "Non cancellare i dati che importi dalla bacheca esportata in origine o da Trello prima che il controllo finisca e si riapra ancora, altrimenti otterrai un messaggio di errore Bacheca non trovata, che significa che i dati sono perduti.",
"import-sandstorm-warning": "La bacheca importata cancellerà tutti i dati esistenti su questa bacheca e li rimpiazzerà con quelli della bacheca importata.",
"from-trello": "Da Trello",
- "from-wekan": "From previous export",
+ "from-wekan": "Dall'esportazione precedente",
"import-board-instruction-trello": "Nella tua bacheca Trello vai a 'Menu', poi 'Altro', 'Stampa ed esporta', 'Esporta JSON', e copia il testo che compare.",
- "import-board-instruction-wekan": "In your board, go to 'Menu', then 'Export board', and copy the text in the downloaded file.",
- "import-board-instruction-about-errors": "If you get errors when importing board, sometimes importing still works, and board is at All Boards page.",
+ "import-board-instruction-wekan": "Nella tua bacheca vai su \"Menu\", poi \"Esporta la bacheca\", e copia il testo nel file scaricato",
+ "import-board-instruction-about-errors": "Se hai degli errori quando importi una bacheca, qualche volta l'importazione funziona comunque, e la bacheca si trova nella pagina \"Tutte le bacheche\"",
"import-json-placeholder": "Incolla un JSON valido qui",
"import-map-members": "Mappatura dei membri",
- "import-members-map": "Your imported board has some members. Please map the members you want to import to your users",
+ "import-members-map": "La bacheca che hai importato contiene alcuni membri. Per favore scegli i membri che vuoi importare tra i tuoi utenti",
"import-show-user-mapping": "Rivedi la mappatura dei membri",
- "import-user-select": "Pick your existing user you want to use as this member",
- "importMapMembersAddPopup-title": "Select member",
+ "import-user-select": "Scegli l'utente che vuoi venga utilizzato come questo membro",
+ "importMapMembersAddPopup-title": "Scegli membro",
"info": "Versione",
"initials": "Iniziali",
"invalid-date": "Data non valida",
@@ -331,21 +347,21 @@
"leave-board-pop": "Sei sicuro di voler abbandonare __boardTitle__? Sarai rimosso da tutte le schede in questa bacheca.",
"leaveBoardPopup-title": "Abbandona Bacheca?",
"link-card": "Link a questa scheda",
- "list-archive-cards": "Move all cards in this list to Archive",
- "list-archive-cards-pop": "This will remove all the cards in this list from the board. To view cards in Archive and bring them back to the board, click “Menu” > “Archive”.",
+ "list-archive-cards": "Sposta tutte le schede in questo elenco nell'Archivio",
+ "list-archive-cards-pop": "Questo rimuoverà tutte le schede nell'elenco dalla bacheca. Per vedere le schede nell'archivio e portarle dov'erano nella bacheca, clicca su \"Menu\" > \"Archivio\". ",
"list-move-cards": "Sposta tutte le schede in questa lista",
"list-select-cards": "Selezione tutte le schede in questa lista",
- "set-color-list": "Set Color",
+ "set-color-list": "Imposta un colore",
"listActionPopup-title": "Azioni disponibili",
- "swimlaneActionPopup-title": "Azioni corsia",
- "swimlaneAddPopup-title": "Add a Swimlane below",
+ "swimlaneActionPopup-title": "Azioni diagramma Swimlane",
+ "swimlaneAddPopup-title": "Aggiungi un diagramma Swimlane di seguito",
"listImportCardPopup-title": "Importa una scheda di Trello",
"listMorePopup-title": "Altro",
"link-list": "Link a questa lista",
"list-delete-pop": "Tutte le azioni saranno rimosse dal flusso attività e non sarai in grado di recuperare la lista. Non potrai tornare indietro.",
- "list-delete-suggest-archive": "You can move a list to Archive to remove it from the board and preserve the activity.",
+ "list-delete-suggest-archive": "Puoi spostare un elenco nell'archivio per rimuoverlo dalla bacheca e mantentere la sua attività.",
"lists": "Liste",
- "swimlanes": "Corsie",
+ "swimlanes": "Diagramma Swimlane",
"log-out": "Log Out",
"log-in": "Log In",
"loginPopup-title": "Log In",
@@ -363,9 +379,9 @@
"muted-info": "Non sarai mai notificato delle modifiche in questa bacheca",
"my-boards": "Le mie bacheche",
"name": "Nome",
- "no-archived-cards": "No cards in Archive.",
- "no-archived-lists": "No lists in Archive.",
- "no-archived-swimlanes": "No swimlanes in Archive.",
+ "no-archived-cards": "Non ci sono schede nell'archivio.",
+ "no-archived-lists": "Non ci sono elenchi nell'archivio.",
+ "no-archived-swimlanes": "Non ci sono diagrammi Swimlane nell'archivio.",
"no-results": "Nessun risultato",
"normal": "Normale",
"normal-desc": "Può visionare e modificare le schede. Non può cambiare le impostazioni.",
@@ -401,7 +417,7 @@
"restore": "Ripristina",
"save": "Salva",
"search": "Cerca",
- "rules": "Rules",
+ "rules": "Regole",
"search-cards": "Ricerca per titolo e descrizione scheda su questa bacheca",
"search-example": "Testo da ricercare?",
"select-color": "Seleziona Colore",
@@ -445,7 +461,7 @@
"uploaded-avatar": "Avatar caricato",
"username": "Username",
"view-it": "Vedi",
- "warn-list-archived": "warning: this card is in an list at Archive",
+ "warn-list-archived": "Attenzione:questa scheda si trova in un elenco dell'archivio",
"watch": "Segui",
"watching": "Stai seguendo",
"watching-info": "Sarai notificato per tutte le modifiche in questa bacheca",
@@ -453,6 +469,9 @@
"welcome-swimlane": "Pietra miliare 1",
"welcome-list1": "Basi",
"welcome-list2": "Avanzate",
+ "card-templates-swimlane": "Template scheda",
+ "list-templates-swimlane": "Elenca i template",
+ "board-templates-swimlane": "Bacheca dei template",
"what-to-do": "Cosa vuoi fare?",
"wipLimitErrorPopup-title": "Limite work in progress non valido. ",
"wipLimitErrorPopup-dialog-pt1": "Il numero di compiti in questa lista è maggiore del limite di work in progress che hai definito in precedenza. ",
@@ -464,7 +483,7 @@
"disable-self-registration": "Disabilita Auto-registrazione",
"invite": "Invita",
"invite-people": "Invita persone",
- "to-boards": "Alla(e) bacheche(a)",
+ "to-boards": "Alla(e) bacheca",
"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.",
@@ -478,14 +497,14 @@
"send-smtp-test": "Invia un'email di test a te stesso",
"invitation-code": "Codice d'invito",
"email-invite-register-subject": "__inviter__ ti ha inviato un invito",
- "email-invite-register-text": "Dear __user__,\n\n__inviter__ invites you to kanban board for collaborations.\n\nPlease follow the link below:\n__url__\n\nAnd your invitation code is: __icode__\n\nThanks.",
- "email-smtp-test-subject": "SMTP Test Email",
+ "email-invite-register-text": "Gentile __user__,\n\n__inviter__ ti ha invitato a partecipare a questa bacheca kanban per collaborare.\n\nPer favore segui il collegamento qui sotto:\n__url__\n\nIl tuo codice di invito è: __icode__\n\nGrazie.",
+ "email-smtp-test-subject": "E-Mail di prova SMTP",
"email-smtp-test-text": "Hai inviato un'email con successo",
"error-invitation-code-not-exist": "Il codice d'invito non esiste",
"error-notAuthorized": "Non sei autorizzato ad accedere a questa pagina.",
"outgoing-webhooks": "Server esterni",
"outgoingWebhooksPopup-title": "Server esterni",
- "boardCardTitlePopup-title": "Card Title Filter",
+ "boardCardTitlePopup-title": "Filtro per Titolo Scheda",
"new-outgoing-webhook": "Nuovo webhook in uscita",
"no-name": "(Sconosciuto)",
"Node_version": "Versione di Node",
@@ -498,13 +517,13 @@
"OS_Totalmem": "Memoria totale del sistema operativo ",
"OS_Type": "Tipo di sistema operativo ",
"OS_Uptime": "Tempo di attività del sistema operativo. ",
- "days": "days",
+ "days": "giorni",
"hours": "ore",
"minutes": "minuti",
"seconds": "secondi",
"show-field-on-card": "Visualizza questo campo sulla scheda",
- "automatically-field-on-card": "Auto create field to all cards",
- "showLabel-field-on-card": "Show field label on minicard",
+ "automatically-field-on-card": "Crea automaticamente i campi per tutte le schede",
+ "showLabel-field-on-card": "Mostra l'etichetta di campo su minischeda",
"yes": "Sì",
"no": "No",
"accounts": "Profili",
@@ -519,10 +538,10 @@
"card-end-on": "Termina il",
"editCardReceivedDatePopup-title": "Cambia data ricezione",
"editCardEndDatePopup-title": "Cambia data finale",
- "setCardColorPopup-title": "Set color",
- "setCardActionsColorPopup-title": "Choose a color",
- "setSwimlaneColorPopup-title": "Choose a color",
- "setListColorPopup-title": "Choose a color",
+ "setCardColorPopup-title": "Imposta il colore",
+ "setCardActionsColorPopup-title": "Scegli un colore",
+ "setSwimlaneColorPopup-title": "Scegli un colore",
+ "setListColorPopup-title": "Scegli un colore",
"assigned-by": "Assegnato da",
"requested-by": "Richiesto da",
"board-delete-notice": "L'eliminazione è permanente. Tutte le azioni, liste e schede associate a questa bacheca andranno perse.",
@@ -546,89 +565,91 @@
"parent-card": "Scheda genitore",
"source-board": "Bacheca d'origine",
"no-parent": "Non mostrare i genitori",
- "activity-added-label": "added label '%s' to %s",
- "activity-removed-label": "removed label '%s' from %s",
- "activity-delete-attach": "deleted an attachment from %s",
+ "activity-added-label": "L' etichetta '%s' è stata aggiunta a %s",
+ "activity-removed-label": "L'etichetta '%s' è stata rimossa da %s",
+ "activity-delete-attach": "Rimosso un allegato da %s",
"activity-added-label-card": "aggiunta etichetta '%s'",
- "activity-removed-label-card": "removed label '%s'",
+ "activity-removed-label-card": "L' etichetta '%s' è stata rimossa.",
"activity-delete-attach-card": "Cancella un allegato",
+ "activity-set-customfield": "imposta campo personalizzato '%s' a '%s' in %s",
+ "activity-unset-customfield": "campo personalizzato non impostato '%s' in %s",
"r-rule": "Ruolo",
"r-add-trigger": "Aggiungi trigger",
"r-add-action": "Aggiungi azione",
- "r-board-rules": "Regole del cruscotto",
+ "r-board-rules": "Regole della bacheca",
"r-add-rule": "Aggiungi regola",
"r-view-rule": "Visualizza regola",
"r-delete-rule": "Cancella regola",
"r-new-rule-name": "Titolo nuova regola",
"r-no-rules": "Nessuna regola",
- "r-when-a-card": "When a card",
- "r-is": "is",
- "r-is-moved": "is moved",
- "r-added-to": "added to",
+ "r-when-a-card": "Quando una scheda",
+ "r-is": "è",
+ "r-is-moved": "viene spostata",
+ "r-added-to": "Aggiunto/a a ",
"r-removed-from": "Rimosso da",
- "r-the-board": "Il cruscotto",
+ "r-the-board": "La bacheca",
"r-list": "lista",
- "set-filter": "Set Filter",
- "r-moved-to": "Moved to",
- "r-moved-from": "Moved from",
- "r-archived": "Moved to Archive",
- "r-unarchived": "Restored from Archive",
- "r-a-card": "a card",
- "r-when-a-label-is": "When a label is",
- "r-when-the-label-is": "When the label is",
- "r-list-name": "list name",
- "r-when-a-member": "When a member is",
- "r-when-the-member": "When the member",
- "r-name": "name",
- "r-when-a-attach": "When an attachment",
- "r-when-a-checklist": "When a checklist is",
- "r-when-the-checklist": "When the checklist",
- "r-completed": "Completed",
- "r-made-incomplete": "Made incomplete",
- "r-when-a-item": "When a checklist item is",
- "r-when-the-item": "When the checklist item",
- "r-checked": "Checked",
- "r-unchecked": "Unchecked",
- "r-move-card-to": "Move card to",
- "r-top-of": "Top of",
- "r-bottom-of": "Bottom of",
- "r-its-list": "its list",
- "r-archive": "Move to Archive",
- "r-unarchive": "Restore from Archive",
- "r-card": "card",
+ "set-filter": "Imposta un filtro",
+ "r-moved-to": "Spostato/a a ",
+ "r-moved-from": "Spostato/a da",
+ "r-archived": "Spostato/a nell'archivio",
+ "r-unarchived": "Ripristinato/a dall'archivio",
+ "r-a-card": "una scheda",
+ "r-when-a-label-is": "Quando un'etichetta viene",
+ "r-when-the-label-is": "Quando l'etichetta viene",
+ "r-list-name": "Nome dell'elenco",
+ "r-when-a-member": "Quando un membro viene",
+ "r-when-the-member": "Quando un membro viene",
+ "r-name": "nome",
+ "r-when-a-attach": "Quando un allegato",
+ "r-when-a-checklist": "Quando una checklist è",
+ "r-when-the-checklist": "Quando la checklist",
+ "r-completed": "Completato/a",
+ "r-made-incomplete": "Rendi incompleto",
+ "r-when-a-item": "Quando un elemento della checklist è",
+ "r-when-the-item": "Quando un elemento della checklist",
+ "r-checked": "Selezionato",
+ "r-unchecked": "Deselezionato",
+ "r-move-card-to": "Sposta scheda a",
+ "r-top-of": "Al di sopra di",
+ "r-bottom-of": "Al di sotto di",
+ "r-its-list": "il suo elenco",
+ "r-archive": "Sposta nell'Archivio",
+ "r-unarchive": "Ripristina dall'archivio",
+ "r-card": "scheda",
"r-add": "Aggiungere",
- "r-remove": "Remove",
- "r-label": "label",
- "r-member": "member",
- "r-remove-all": "Remove all members from the card",
- "r-set-color": "Set color to",
+ "r-remove": "Rimuovi",
+ "r-label": "etichetta",
+ "r-member": "membro",
+ "r-remove-all": "Rimuovi tutti i membri dalla scheda",
+ "r-set-color": "Imposta il colore a",
"r-checklist": "checklist",
- "r-check-all": "Check all",
- "r-uncheck-all": "Uncheck all",
- "r-items-check": "items of checklist",
- "r-check": "Check",
- "r-uncheck": "Uncheck",
- "r-item": "item",
+ "r-check-all": "Spunta tutti",
+ "r-uncheck-all": "Togli la spunta a tutti",
+ "r-items-check": "Elementi della checklist",
+ "r-check": "Spunta",
+ "r-uncheck": "Togli la spunta",
+ "r-item": "elemento",
"r-of-checklist": "della lista di cose da fare",
- "r-send-email": "Send an email",
- "r-to": "to",
+ "r-send-email": "Invia un e-mail",
+ "r-to": "a",
"r-subject": "soggetto",
- "r-rule-details": "Rule details",
- "r-d-move-to-top-gen": "Move card to top of its list",
- "r-d-move-to-top-spec": "Move card to top of list",
+ "r-rule-details": "Dettagli della regola",
+ "r-d-move-to-top-gen": "Sposta la scheda al di sopra del suo elenco",
+ "r-d-move-to-top-spec": "Sposta la scheda la di sopra dell'elenco",
"r-d-move-to-bottom-gen": "Sposta la scheda in fondo alla sua lista",
"r-d-move-to-bottom-spec": "Muovi la scheda in fondo alla lista",
"r-d-send-email": "Spedisci email",
- "r-d-send-email-to": "to",
+ "r-d-send-email-to": "a",
"r-d-send-email-subject": "soggetto",
"r-d-send-email-message": "Messaggio",
- "r-d-archive": "Move card to Archive",
- "r-d-unarchive": "Restore card from Archive",
+ "r-d-archive": "Sposta la scheda nell'archivio",
+ "r-d-unarchive": "Ripristina la scheda dall'archivio",
"r-d-add-label": "Aggiungi etichetta",
"r-d-remove-label": "Rimuovi Etichetta",
- "r-create-card": "Create new card",
- "r-in-list": "in list",
- "r-in-swimlane": "in swimlane",
+ "r-create-card": "Crea una nuova scheda",
+ "r-in-list": "in elenco",
+ "r-in-swimlane": "nel diagramma swimlane",
"r-d-add-member": "Aggiungi membro",
"r-d-remove-member": "Rimuovi membro",
"r-d-remove-all-member": "Rimouvi tutti i membri",
@@ -639,27 +660,27 @@
"r-d-check-of-list": "della lista di cose da fare",
"r-d-add-checklist": "Aggiungi lista di cose da fare",
"r-d-remove-checklist": "Rimuovi check list",
- "r-by": "by",
+ "r-by": "da",
"r-add-checklist": "Aggiungi lista di cose da fare",
- "r-with-items": "with items",
- "r-items-list": "item1,item2,item3",
- "r-add-swimlane": "Add swimlane",
- "r-swimlane-name": "swimlane name",
- "r-board-note": "Note: leave a field empty to match every possible value.",
- "r-checklist-note": "Note: checklist's items have to be written as comma separated values.",
+ "r-with-items": "con elementi",
+ "r-items-list": "elemento1,elemento2,elemento3",
+ "r-add-swimlane": "Aggiungi un diagramma swimlane",
+ "r-swimlane-name": "Nome diagramma swimlane",
+ "r-board-note": "Nota: Lascia un campo vuoto per abbinare ogni possibile valore",
+ "r-checklist-note": "Nota: Gli elementi della checklist devono essere scritti come valori separati dalla virgola",
"r-when-a-card-is-moved": "Quando una scheda viene spostata su un'altra lista",
"ldap": "LDAP",
"oauth2": "Oauth2",
"cas": "CAS",
"authentication-method": "Metodo di Autenticazione",
"authentication-type": "Tipo Autenticazione",
- "custom-product-name": "Custom Product Name",
+ "custom-product-name": "Nome prodotto personalizzato",
"layout": "Layout",
- "hide-logo": "Hide Logo",
- "add-custom-html-after-body-start": "Add Custom HTML after <body> start",
- "add-custom-html-before-body-end": "Add Custom HTML before </body> end",
- "error-undefined": "Something went wrong",
- "error-ldap-login": "An error occurred while trying to login",
- "display-authentication-method": "Display Authentication Method",
- "default-authentication-method": "Default Authentication Method"
+ "hide-logo": "Nascondi il logo",
+ "add-custom-html-after-body-start": "Aggiungi codice HTML personalizzato dopo <body> inzio",
+ "add-custom-html-before-body-end": "Aggiunti il codice HTML prima di </body> fine",
+ "error-undefined": "Qualcosa è andato storto",
+ "error-ldap-login": "C'è stato un errore mentre provavi ad effettuare il login",
+ "display-authentication-method": "Mostra il metodo di autenticazione",
+ "default-authentication-method": "Metodo di autenticazione predefinito"
} \ No newline at end of file
diff --git a/i18n/ja.i18n.json b/i18n/ja.i18n.json
index 59db5a82..945d48eb 100644
--- a/i18n/ja.i18n.json
+++ b/i18n/ja.i18n.json
@@ -1,28 +1,41 @@
{
"accept": "受け入れ",
"act-activity-notify": "Activity Notification",
- "act-addAttachment": "__card__ に __attachment__ を添付しました",
- "act-addSubtask": "added subtask __checklist__ to __card__",
- "act-addChecklist": "__card__ に __checklist__ を追加しました",
- "act-addChecklistItem": "__checklist__ on __card__ に __checklistItem__ を追加しました",
- "act-addComment": "__card__: __comment__ をコメントしました",
- "act-createBoard": "__board__ を作成しました",
- "act-createCard": "__list__ に __card__ を追加しました",
- "act-createCustomField": "__customField__ を作成しました",
- "act-createList": "__board__ に __list__ を追加しました",
- "act-addBoardMember": "__board__ に __member__ を追加しました",
- "act-archivedBoard": "__board__ moved to Archive",
- "act-archivedCard": "__card__ moved to Archive",
- "act-archivedList": "__list__ moved to Archive",
- "act-archivedSwimlane": "__swimlane__ moved to Archive",
- "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-addAttachment": "added attachment __attachment__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-deleteAttachment": "deleted attachment __attachment__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-addSubtask": "added subtask __subtask__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-addLabel": "Added label __label__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-addedLabel": "Added label __label__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-removeLabel": "Removed label __label__ from card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-removedLabel": "Removed label __label__ from card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-addChecklist": "added checklist __checklist__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-addChecklistItem": "added checklist item __checklistItem__ to checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-removeChecklist": "removed checklist __checklist__ from card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-removeChecklistItem": "removed checklist item __checklistItem__ from checklist __checkList__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-checkedItem": "checked __checklistItem__ of checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-uncheckedItem": "unchecked __checklistItem__ of checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-completeChecklist": "completed checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-uncompleteChecklist": "uncompleted checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-addComment": "commented on card __card__: __comment__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-createBoard": "created board __board__",
+ "act-createSwimlane": "created swimlane __swimlane__ to board __board__",
+ "act-createCard": "created card __card__ to list __list__ at swimlane __swimlane__ at board __board__",
+ "act-createCustomField": "created custom field __customField__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-createList": "added list __list__ to board __board__",
+ "act-addBoardMember": "added member __member__ to board __board__",
+ "act-archivedBoard": "Board __board__ moved to Archive",
+ "act-archivedCard": "Card __card__ at list __list__ at swimlane __swimlane__ at board __board__ moved to Archive",
+ "act-archivedList": "List __list__ at swimlane __swimlane__ at board __board__ moved to Archive",
+ "act-archivedSwimlane": "Swimlane __swimlane__ at board __board__ moved to Archive",
+ "act-importBoard": "imported board __board__",
+ "act-importCard": "imported card __card__ to list __list__ at swimlane __swimlane__ at board __board__",
+ "act-importList": "imported list __list__ to swimlane __swimlane__ at board __board__",
+ "act-joinMember": "added member __member__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-moveCard": "moved card __card__ at board __board__ from list __oldList__ at swimlane __oldSwimlane__ to list __list__ at swimlane __swimlane__",
+ "act-moveCardToOtherBoard": "moved card __card__ from list __oldList__ at swimlane __oldSwimlane__ at board __oldBoard__ to list __list__ at swimlane __swimlane__ at board __board__",
+ "act-removeBoardMember": "removed member __member__ from board __board__",
+ "act-restoredCard": "restored card __card__ to list __list__ at swimlane __swimlane__ at board __board__",
+ "act-unjoinMember": "removed member __member__ from card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
"act-withBoardTitle": "__board__",
"act-withCardTitle": "[__board__] __card__",
"actions": "操作",
@@ -47,14 +60,14 @@
"activity-unchecked-item": "unchecked %s in checklist %s of %s",
"activity-checklist-added": "%s にチェックリストを追加しました",
"activity-checklist-removed": "removed a checklist from %s",
- "activity-checklist-completed": "completed the checklist %s of %s",
+ "activity-checklist-completed": "completed checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
"activity-checklist-uncompleted": "uncompleted the checklist %s of %s",
"activity-checklist-item-added": "added checklist item to '%s' in %s",
"activity-checklist-item-removed": "removed a checklist item from '%s' in %s",
"add": "追加",
"activity-checked-item-card": "checked %s in checklist %s",
"activity-unchecked-item-card": "unchecked %s in checklist %s",
- "activity-checklist-completed-card": "completed the checklist %s",
+ "activity-checklist-completed-card": "completed checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
"activity-checklist-uncompleted-card": "uncompleted the checklist %s",
"add-attachment": "添付ファイルを追加",
"add-board": "ボードを追加",
@@ -92,6 +105,8 @@
"restore-board": "ボードをリストア",
"no-archived-boards": "No Boards in Archive.",
"archives": "アーカイブ",
+ "template": "Template",
+ "templates": "Templates",
"assign-member": "メンバーの割当",
"attached": "添付されました",
"attachment": "添付ファイル",
@@ -110,7 +125,7 @@
"boardChangeTitlePopup-title": "ボード名の変更",
"boardChangeVisibilityPopup-title": "公開範囲の変更",
"boardChangeWatchPopup-title": "ウォッチの変更",
- "boardMenuPopup-title": "ボードメニュー",
+ "boardMenuPopup-title": "Board Settings",
"boards": "ボード",
"board-view": "Board View",
"board-view-cal": "Calendar",
@@ -143,6 +158,7 @@
"cardLabelsPopup-title": "ラベル",
"cardMembersPopup-title": "メンバー",
"cardMorePopup-title": "さらに見る",
+ "cardTemplatePopup-title": "Create template",
"cards": "カード",
"cards-count": "カード",
"casSignIn": "Sign In with CAS",
@@ -204,7 +220,7 @@
"confirm-checklist-delete-dialog": "Are you sure you want to delete checklist?",
"copy-card-link-to-clipboard": "カードへのリンクをクリップボードにコピー",
"linkCardPopup-title": "Link Card",
- "searchCardPopup-title": "Search Card",
+ "searchElementPopup-title": "検索",
"copyCardPopup-title": "カードをコピー",
"copyChecklistToManyCardsPopup-title": "Copy Checklist Template to Many Cards",
"copyChecklistToManyCardsPopup-instructions": "Destination Card Titles and Descriptions in this JSON format",
@@ -453,6 +469,9 @@
"welcome-swimlane": "Milestone 1",
"welcome-list1": "基本",
"welcome-list2": "高度",
+ "card-templates-swimlane": "Card Templates",
+ "list-templates-swimlane": "List Templates",
+ "board-templates-swimlane": "Board Templates",
"what-to-do": "何をしたいですか?",
"wipLimitErrorPopup-title": "Invalid WIP Limit",
"wipLimitErrorPopup-dialog-pt1": "The number of tasks in this list is higher than the WIP limit you've defined.",
@@ -552,6 +571,8 @@
"activity-added-label-card": "added label '%s'",
"activity-removed-label-card": "removed label '%s'",
"activity-delete-attach-card": "deleted an attachment",
+ "activity-set-customfield": "set custom field '%s' to '%s' in %s",
+ "activity-unset-customfield": "unset custom field '%s' in %s",
"r-rule": "Rule",
"r-add-trigger": "Add trigger",
"r-add-action": "Add action",
diff --git a/i18n/ka.i18n.json b/i18n/ka.i18n.json
index 76ee2ffe..be5819dd 100644
--- a/i18n/ka.i18n.json
+++ b/i18n/ka.i18n.json
@@ -1,28 +1,41 @@
{
"accept": "დათანხმება",
"act-activity-notify": "Activity Notification",
- "act-addAttachment": "მიბმულია__მიბმა __ბარათზე__",
- "act-addSubtask": "დამატებულია ქვესაქმიანობა__ჩამონათვალი__ ბარათზე__",
- "act-addChecklist": "დაამატა ჩამონათვალი__ჩამონათვალი__ ბარათზე__",
- "act-addChecklistItem": "დაამატა __ჩამონათვალის ელემენტი__ ჩამონათვალში __ჩამონათვალი __ბარათზე__",
- "act-addComment": "დააკომენტარა__ბარათზე__: __კომენტარი__",
- "act-createBoard": "შექმნილია __დაფა__",
- "act-createCard": "დაამატა __ბარათი__ ჩამონათვალში__",
- "act-createCustomField": "შექმნა სტანდარტული ველი __სტანდარტული ველი__",
- "act-createList": "დაამატა __ჩამონათვალი__ დაფაზე__",
- "act-addBoardMember": "დაამატა __წევრი__ დაფაზე__",
- "act-archivedBoard": "__board__ moved to Archive",
- "act-archivedCard": "__card__ moved to Archive",
- "act-archivedList": "__list__ moved to Archive",
- "act-archivedSwimlane": "__swimlane__ moved to Archive",
- "act-importBoard": "იმპორტირებულია__დაფა__",
- "act-importCard": "იმპორტირებულია __ბარათი__",
- "act-importList": "იმპორტირებულია __სია__",
- "act-joinMember": "დაამატა __წევრი__ ბარათზე__",
- "act-moveCard": "გადაიტანა __ბარათი __oldList__ დან__ ჩამონათვალ__ში__",
- "act-removeBoardMember": "წაშალა__წევრი__ დაფიდან__",
- "act-restoredCard": "აღადგინა __ბარათი __დაფა__ზე__",
- "act-unjoinMember": "წაშალა__წევრი__ ბარათი __დან__",
+ "act-addAttachment": "added attachment __attachment__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-deleteAttachment": "deleted attachment __attachment__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-addSubtask": "added subtask __subtask__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-addLabel": "Added label __label__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-addedLabel": "Added label __label__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-removeLabel": "Removed label __label__ from card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-removedLabel": "Removed label __label__ from card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-addChecklist": "added checklist __checklist__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-addChecklistItem": "added checklist item __checklistItem__ to checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-removeChecklist": "removed checklist __checklist__ from card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-removeChecklistItem": "removed checklist item __checklistItem__ from checklist __checkList__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-checkedItem": "checked __checklistItem__ of checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-uncheckedItem": "unchecked __checklistItem__ of checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-completeChecklist": "completed checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-uncompleteChecklist": "uncompleted checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-addComment": "commented on card __card__: __comment__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-createBoard": "created board __board__",
+ "act-createSwimlane": "created swimlane __swimlane__ to board __board__",
+ "act-createCard": "created card __card__ to list __list__ at swimlane __swimlane__ at board __board__",
+ "act-createCustomField": "created custom field __customField__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-createList": "added list __list__ to board __board__",
+ "act-addBoardMember": "added member __member__ to board __board__",
+ "act-archivedBoard": "Board __board__ moved to Archive",
+ "act-archivedCard": "Card __card__ at list __list__ at swimlane __swimlane__ at board __board__ moved to Archive",
+ "act-archivedList": "List __list__ at swimlane __swimlane__ at board __board__ moved to Archive",
+ "act-archivedSwimlane": "Swimlane __swimlane__ at board __board__ moved to Archive",
+ "act-importBoard": "imported board __board__",
+ "act-importCard": "imported card __card__ to list __list__ at swimlane __swimlane__ at board __board__",
+ "act-importList": "imported list __list__ to swimlane __swimlane__ at board __board__",
+ "act-joinMember": "added member __member__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-moveCard": "moved card __card__ at board __board__ from list __oldList__ at swimlane __oldSwimlane__ to list __list__ at swimlane __swimlane__",
+ "act-moveCardToOtherBoard": "moved card __card__ from list __oldList__ at swimlane __oldSwimlane__ at board __oldBoard__ to list __list__ at swimlane __swimlane__ at board __board__",
+ "act-removeBoardMember": "removed member __member__ from board __board__",
+ "act-restoredCard": "restored card __card__ to list __list__ at swimlane __swimlane__ at board __board__",
+ "act-unjoinMember": "removed member __member__ from card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
"act-withBoardTitle": "__board__",
"act-withCardTitle": "[__დაფა__] __ბარათი__",
"actions": "მოქმედებები",
@@ -47,14 +60,14 @@
"activity-unchecked-item": "unchecked %s in checklist %s of %s",
"activity-checklist-added": "დაემატა ჩამონათვალი %s-ს",
"activity-checklist-removed": "removed a checklist from %s",
- "activity-checklist-completed": "completed the checklist %s of %s",
+ "activity-checklist-completed": "completed checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
"activity-checklist-uncompleted": "uncompleted the checklist %s of %s",
"activity-checklist-item-added": "დამატებულია ჩამონათვალის ელემენტები '%s' %s-ში",
"activity-checklist-item-removed": "removed a checklist item from '%s' in %s",
"add": "დამატება",
"activity-checked-item-card": "checked %s in checklist %s",
"activity-unchecked-item-card": "unchecked %s in checklist %s",
- "activity-checklist-completed-card": "completed the checklist %s",
+ "activity-checklist-completed-card": "completed checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
"activity-checklist-uncompleted-card": "uncompleted the checklist %s",
"add-attachment": "მიბმული ფაილის დამატება",
"add-board": "დაფის დამატება",
@@ -92,6 +105,8 @@
"restore-board": "ბარათის აღდგენა",
"no-archived-boards": "No Boards in Archive.",
"archives": "Archive",
+ "template": "Template",
+ "templates": "Templates",
"assign-member": "უფლებამოსილი წევრი",
"attached": "მიბმული",
"attachment": "მიბმული ფიალი",
@@ -110,7 +125,7 @@
"boardChangeTitlePopup-title": "დაფის სახელის ცვლილება",
"boardChangeVisibilityPopup-title": "ხილვადობის შეცვლა",
"boardChangeWatchPopup-title": "საათის შეცვლა",
- "boardMenuPopup-title": "დაფის მენიუ",
+ "boardMenuPopup-title": "Board Settings",
"boards": "დაფები",
"board-view": "დაფის ნახვა",
"board-view-cal": "კალენდარი",
@@ -143,6 +158,7 @@
"cardLabelsPopup-title": "ნიშნები",
"cardMembersPopup-title": "წევრები",
"cardMorePopup-title": "მეტი",
+ "cardTemplatePopup-title": "Create template",
"cards": "ბარათები",
"cards-count": "ბარათები",
"casSignIn": "შესვლა CAS-ით",
@@ -204,7 +220,7 @@
"confirm-checklist-delete-dialog": "დარწმუნებული ხართ, რომ გსურთ კატალოგის წაშლა ? ",
"copy-card-link-to-clipboard": "დააკოპირეთ ბარათის ბმული clipboard-ზე",
"linkCardPopup-title": "Link Card",
- "searchCardPopup-title": "Search Card",
+ "searchElementPopup-title": "ძებნა",
"copyCardPopup-title": "ბარათის ასლი",
"copyChecklistToManyCardsPopup-title": "Copy Checklist Template to Many Cards",
"copyChecklistToManyCardsPopup-instructions": "Destination Card Titles and Descriptions in this JSON format",
@@ -453,6 +469,9 @@
"welcome-swimlane": "ეტაპი 1 ",
"welcome-list1": "ბაზისური ",
"welcome-list2": "დაწინაურებული",
+ "card-templates-swimlane": "Card Templates",
+ "list-templates-swimlane": "List Templates",
+ "board-templates-swimlane": "Board Templates",
"what-to-do": "რისი გაკეთება გსურთ? ",
"wipLimitErrorPopup-title": "არასწორი WIP ლიმიტი",
"wipLimitErrorPopup-dialog-pt1": "The number of tasks in this list is higher than the WIP limit you've defined.",
@@ -552,6 +571,8 @@
"activity-added-label-card": "added label '%s'",
"activity-removed-label-card": "removed label '%s'",
"activity-delete-attach-card": "deleted an attachment",
+ "activity-set-customfield": "set custom field '%s' to '%s' in %s",
+ "activity-unset-customfield": "unset custom field '%s' in %s",
"r-rule": "Rule",
"r-add-trigger": "Add trigger",
"r-add-action": "Add action",
diff --git a/i18n/km.i18n.json b/i18n/km.i18n.json
index 5f3b2dd4..ba8bcb3e 100644
--- a/i18n/km.i18n.json
+++ b/i18n/km.i18n.json
@@ -1,28 +1,41 @@
{
"accept": "យល់ព្រម",
"act-activity-notify": "Activity Notification",
- "act-addAttachment": "attached __attachment__ to __card__",
- "act-addSubtask": "added subtask __checklist__ to __card__",
- "act-addChecklist": "added checklist __checklist__ to __card__",
- "act-addChecklistItem": "added __checklistItem__ to checklist __checklist__ on __card__",
- "act-addComment": "commented on __card__: __comment__",
- "act-createBoard": "created __board__",
- "act-createCard": "added __card__ to __list__",
- "act-createCustomField": "created custom field __customField__",
- "act-createList": "added __list__ to __board__",
- "act-addBoardMember": "added __member__ to __board__",
- "act-archivedBoard": "__board__ moved to Archive",
- "act-archivedCard": "__card__ moved to Archive",
- "act-archivedList": "__list__ moved to Archive",
- "act-archivedSwimlane": "__swimlane__ moved to Archive",
- "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-addAttachment": "added attachment __attachment__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-deleteAttachment": "deleted attachment __attachment__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-addSubtask": "added subtask __subtask__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-addLabel": "Added label __label__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-addedLabel": "Added label __label__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-removeLabel": "Removed label __label__ from card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-removedLabel": "Removed label __label__ from card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-addChecklist": "added checklist __checklist__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-addChecklistItem": "added checklist item __checklistItem__ to checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-removeChecklist": "removed checklist __checklist__ from card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-removeChecklistItem": "removed checklist item __checklistItem__ from checklist __checkList__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-checkedItem": "checked __checklistItem__ of checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-uncheckedItem": "unchecked __checklistItem__ of checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-completeChecklist": "completed checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-uncompleteChecklist": "uncompleted checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-addComment": "commented on card __card__: __comment__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-createBoard": "created board __board__",
+ "act-createSwimlane": "created swimlane __swimlane__ to board __board__",
+ "act-createCard": "created card __card__ to list __list__ at swimlane __swimlane__ at board __board__",
+ "act-createCustomField": "created custom field __customField__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-createList": "added list __list__ to board __board__",
+ "act-addBoardMember": "added member __member__ to board __board__",
+ "act-archivedBoard": "Board __board__ moved to Archive",
+ "act-archivedCard": "Card __card__ at list __list__ at swimlane __swimlane__ at board __board__ moved to Archive",
+ "act-archivedList": "List __list__ at swimlane __swimlane__ at board __board__ moved to Archive",
+ "act-archivedSwimlane": "Swimlane __swimlane__ at board __board__ moved to Archive",
+ "act-importBoard": "imported board __board__",
+ "act-importCard": "imported card __card__ to list __list__ at swimlane __swimlane__ at board __board__",
+ "act-importList": "imported list __list__ to swimlane __swimlane__ at board __board__",
+ "act-joinMember": "added member __member__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-moveCard": "moved card __card__ at board __board__ from list __oldList__ at swimlane __oldSwimlane__ to list __list__ at swimlane __swimlane__",
+ "act-moveCardToOtherBoard": "moved card __card__ from list __oldList__ at swimlane __oldSwimlane__ at board __oldBoard__ to list __list__ at swimlane __swimlane__ at board __board__",
+ "act-removeBoardMember": "removed member __member__ from board __board__",
+ "act-restoredCard": "restored card __card__ to list __list__ at swimlane __swimlane__ at board __board__",
+ "act-unjoinMember": "removed member __member__ from card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
"act-withBoardTitle": "__board__",
"act-withCardTitle": "[__board__] __card__",
"actions": "Actions",
@@ -47,14 +60,14 @@
"activity-unchecked-item": "unchecked %s in checklist %s of %s",
"activity-checklist-added": "added checklist to %s",
"activity-checklist-removed": "removed a checklist from %s",
- "activity-checklist-completed": "completed the checklist %s of %s",
+ "activity-checklist-completed": "completed checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
"activity-checklist-uncompleted": "uncompleted the checklist %s of %s",
"activity-checklist-item-added": "added checklist item to '%s' in %s",
"activity-checklist-item-removed": "removed a checklist item from '%s' in %s",
"add": "Add",
"activity-checked-item-card": "checked %s in checklist %s",
"activity-unchecked-item-card": "unchecked %s in checklist %s",
- "activity-checklist-completed-card": "completed the checklist %s",
+ "activity-checklist-completed-card": "completed checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
"activity-checklist-uncompleted-card": "uncompleted the checklist %s",
"add-attachment": "Add Attachment",
"add-board": "Add Board",
@@ -92,6 +105,8 @@
"restore-board": "Restore Board",
"no-archived-boards": "No Boards in Archive.",
"archives": "Archive",
+ "template": "Template",
+ "templates": "Templates",
"assign-member": "Assign member",
"attached": "attached",
"attachment": "Attachment",
@@ -110,7 +125,7 @@
"boardChangeTitlePopup-title": "Rename Board",
"boardChangeVisibilityPopup-title": "Change Visibility",
"boardChangeWatchPopup-title": "Change Watch",
- "boardMenuPopup-title": "Board Menu",
+ "boardMenuPopup-title": "Board Settings",
"boards": "Boards",
"board-view": "Board View",
"board-view-cal": "Calendar",
@@ -143,6 +158,7 @@
"cardLabelsPopup-title": "Labels",
"cardMembersPopup-title": "Members",
"cardMorePopup-title": "More",
+ "cardTemplatePopup-title": "Create template",
"cards": "Cards",
"cards-count": "Cards",
"casSignIn": "Sign In with CAS",
@@ -204,7 +220,7 @@
"confirm-checklist-delete-dialog": "Are you sure you want to delete checklist?",
"copy-card-link-to-clipboard": "Copy card link to clipboard",
"linkCardPopup-title": "Link Card",
- "searchCardPopup-title": "Search Card",
+ "searchElementPopup-title": "Search",
"copyCardPopup-title": "Copy Card",
"copyChecklistToManyCardsPopup-title": "Copy Checklist Template to Many Cards",
"copyChecklistToManyCardsPopup-instructions": "Destination Card Titles and Descriptions in this JSON format",
@@ -453,6 +469,9 @@
"welcome-swimlane": "Milestone 1",
"welcome-list1": "Basics",
"welcome-list2": "Advanced",
+ "card-templates-swimlane": "Card Templates",
+ "list-templates-swimlane": "List Templates",
+ "board-templates-swimlane": "Board Templates",
"what-to-do": "What do you want to do?",
"wipLimitErrorPopup-title": "Invalid WIP Limit",
"wipLimitErrorPopup-dialog-pt1": "The number of tasks in this list is higher than the WIP limit you've defined.",
@@ -552,6 +571,8 @@
"activity-added-label-card": "added label '%s'",
"activity-removed-label-card": "removed label '%s'",
"activity-delete-attach-card": "deleted an attachment",
+ "activity-set-customfield": "set custom field '%s' to '%s' in %s",
+ "activity-unset-customfield": "unset custom field '%s' in %s",
"r-rule": "Rule",
"r-add-trigger": "Add trigger",
"r-add-action": "Add action",
diff --git a/i18n/ko.i18n.json b/i18n/ko.i18n.json
index 1f7066cb..d1cf878f 100644
--- a/i18n/ko.i18n.json
+++ b/i18n/ko.i18n.json
@@ -1,28 +1,41 @@
{
"accept": "확인",
"act-activity-notify": "Activity Notification",
- "act-addAttachment": "__attachment__를 __card__에 첨부",
- "act-addSubtask": "added subtask __checklist__ to __card__",
- "act-addChecklist": "added checklist __checklist__ to __card__",
- "act-addChecklistItem": "added __checklistItem__ to checklist __checklist__ on __card__",
- "act-addComment": "__card__에 내용 추가 : __comment__",
- "act-createBoard": "__board__ 생성",
- "act-createCard": "__list__에 __card__ 추가",
- "act-createCustomField": "created custom field __customField__",
- "act-createList": "__board__에 __list__ 추가",
- "act-addBoardMember": "__board__에 __member__ 추가",
- "act-archivedBoard": "__board__ moved to Archive",
- "act-archivedCard": "__card__ moved to Archive",
- "act-archivedList": "__list__ moved to Archive",
- "act-archivedSwimlane": "__swimlane__ moved to Archive",
- "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-addAttachment": "added attachment __attachment__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-deleteAttachment": "deleted attachment __attachment__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-addSubtask": "added subtask __subtask__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-addLabel": "Added label __label__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-addedLabel": "Added label __label__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-removeLabel": "Removed label __label__ from card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-removedLabel": "Removed label __label__ from card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-addChecklist": "added checklist __checklist__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-addChecklistItem": "added checklist item __checklistItem__ to checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-removeChecklist": "removed checklist __checklist__ from card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-removeChecklistItem": "removed checklist item __checklistItem__ from checklist __checkList__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-checkedItem": "checked __checklistItem__ of checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-uncheckedItem": "unchecked __checklistItem__ of checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-completeChecklist": "completed checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-uncompleteChecklist": "uncompleted checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-addComment": "commented on card __card__: __comment__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-createBoard": "created board __board__",
+ "act-createSwimlane": "created swimlane __swimlane__ to board __board__",
+ "act-createCard": "created card __card__ to list __list__ at swimlane __swimlane__ at board __board__",
+ "act-createCustomField": "created custom field __customField__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-createList": "added list __list__ to board __board__",
+ "act-addBoardMember": "added member __member__ to board __board__",
+ "act-archivedBoard": "Board __board__ moved to Archive",
+ "act-archivedCard": "Card __card__ at list __list__ at swimlane __swimlane__ at board __board__ moved to Archive",
+ "act-archivedList": "List __list__ at swimlane __swimlane__ at board __board__ moved to Archive",
+ "act-archivedSwimlane": "Swimlane __swimlane__ at board __board__ moved to Archive",
+ "act-importBoard": "imported board __board__",
+ "act-importCard": "imported card __card__ to list __list__ at swimlane __swimlane__ at board __board__",
+ "act-importList": "imported list __list__ to swimlane __swimlane__ at board __board__",
+ "act-joinMember": "added member __member__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-moveCard": "moved card __card__ at board __board__ from list __oldList__ at swimlane __oldSwimlane__ to list __list__ at swimlane __swimlane__",
+ "act-moveCardToOtherBoard": "moved card __card__ from list __oldList__ at swimlane __oldSwimlane__ at board __oldBoard__ to list __list__ at swimlane __swimlane__ at board __board__",
+ "act-removeBoardMember": "removed member __member__ from board __board__",
+ "act-restoredCard": "restored card __card__ to list __list__ at swimlane __swimlane__ at board __board__",
+ "act-unjoinMember": "removed member __member__ from card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
"act-withBoardTitle": "__board__",
"act-withCardTitle": "[__board__] __card__",
"actions": "동작",
@@ -47,14 +60,14 @@
"activity-unchecked-item": "unchecked %s in checklist %s of %s",
"activity-checklist-added": "%s에 체크리스트를 추가함",
"activity-checklist-removed": "removed a checklist from %s",
- "activity-checklist-completed": "completed the checklist %s of %s",
+ "activity-checklist-completed": "completed checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
"activity-checklist-uncompleted": "uncompleted the checklist %s of %s",
"activity-checklist-item-added": "added checklist item to '%s' in %s",
"activity-checklist-item-removed": "removed a checklist item from '%s' in %s",
"add": "추가",
"activity-checked-item-card": "checked %s in checklist %s",
"activity-unchecked-item-card": "unchecked %s in checklist %s",
- "activity-checklist-completed-card": "completed the checklist %s",
+ "activity-checklist-completed-card": "completed checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
"activity-checklist-uncompleted-card": "uncompleted the checklist %s",
"add-attachment": "첨부파일 추가",
"add-board": "보드 추가",
@@ -92,6 +105,8 @@
"restore-board": "보드 복구",
"no-archived-boards": "No Boards in Archive.",
"archives": "보관",
+ "template": "Template",
+ "templates": "Templates",
"assign-member": "멤버 지정",
"attached": "첨부됨",
"attachment": "첨부 파일",
@@ -110,7 +125,7 @@
"boardChangeTitlePopup-title": "보드 이름 바꾸기",
"boardChangeVisibilityPopup-title": "표시 여부 변경",
"boardChangeWatchPopup-title": "감시상태 변경",
- "boardMenuPopup-title": "보드 메뉴",
+ "boardMenuPopup-title": "Board Settings",
"boards": "보드",
"board-view": "Board View",
"board-view-cal": "Calendar",
@@ -143,6 +158,7 @@
"cardLabelsPopup-title": "라벨",
"cardMembersPopup-title": "멤버",
"cardMorePopup-title": "더보기",
+ "cardTemplatePopup-title": "Create template",
"cards": "카드",
"cards-count": "카드",
"casSignIn": "Sign In with CAS",
@@ -204,7 +220,7 @@
"confirm-checklist-delete-dialog": "Are you sure you want to delete checklist?",
"copy-card-link-to-clipboard": "클립보드에 카드의 링크가 복사되었습니다.",
"linkCardPopup-title": "Link Card",
- "searchCardPopup-title": "Search Card",
+ "searchElementPopup-title": "검색",
"copyCardPopup-title": "카드 복사",
"copyChecklistToManyCardsPopup-title": "Copy Checklist Template to Many Cards",
"copyChecklistToManyCardsPopup-instructions": "Destination Card Titles and Descriptions in this JSON format",
@@ -453,6 +469,9 @@
"welcome-swimlane": "Milestone 1",
"welcome-list1": "신규",
"welcome-list2": "진행",
+ "card-templates-swimlane": "Card Templates",
+ "list-templates-swimlane": "List Templates",
+ "board-templates-swimlane": "Board Templates",
"what-to-do": "무엇을 하고 싶으신가요?",
"wipLimitErrorPopup-title": "Invalid WIP Limit",
"wipLimitErrorPopup-dialog-pt1": "The number of tasks in this list is higher than the WIP limit you've defined.",
@@ -552,6 +571,8 @@
"activity-added-label-card": "added label '%s'",
"activity-removed-label-card": "removed label '%s'",
"activity-delete-attach-card": "deleted an attachment",
+ "activity-set-customfield": "set custom field '%s' to '%s' in %s",
+ "activity-unset-customfield": "unset custom field '%s' in %s",
"r-rule": "Rule",
"r-add-trigger": "Add trigger",
"r-add-action": "Add action",
diff --git a/i18n/lv.i18n.json b/i18n/lv.i18n.json
index b5c62aae..158f1f1c 100644
--- a/i18n/lv.i18n.json
+++ b/i18n/lv.i18n.json
@@ -1,28 +1,41 @@
{
"accept": "Piekrist",
"act-activity-notify": "Activity Notification",
- "act-addAttachment": "pievienots __attachment__ to __card__",
- "act-addSubtask": "added subtask __checklist__ to __card__",
- "act-addChecklist": "pievienots checklist __checklist__ to __card__",
- "act-addChecklistItem": "pievienots __checklistItem__ to checklist __checklist__ on __card__",
- "act-addComment": "komentēja __card__: __comment__",
- "act-createBoard": "izveidoja __board__",
- "act-createCard": "pievienoja __card__ to __list__",
- "act-createCustomField": "created custom field __customField__",
- "act-createList": "pievienoja __list__ to __board__",
- "act-addBoardMember": "pievienoja __member__ to __board__",
- "act-archivedBoard": "__board__ moved to Archive",
- "act-archivedCard": "__card__ moved to Archive",
- "act-archivedList": "__list__ moved to Archive",
- "act-archivedSwimlane": "__swimlane__ moved to Archive",
- "act-importBoard": "importēja __board__",
- "act-importCard": "importēja __card__",
- "act-importList": "importēja __list__",
- "act-joinMember": "pievienoja __member__ to __card__",
- "act-moveCard": "pārvietoja __card__ from __oldList__ to __list__",
- "act-removeBoardMember": "noņēma __member__ from __board__",
- "act-restoredCard": "atjaunoja __card__ to __board__",
- "act-unjoinMember": "noņēma __member__ from __card__",
+ "act-addAttachment": "added attachment __attachment__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-deleteAttachment": "deleted attachment __attachment__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-addSubtask": "added subtask __subtask__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-addLabel": "Added label __label__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-addedLabel": "Added label __label__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-removeLabel": "Removed label __label__ from card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-removedLabel": "Removed label __label__ from card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-addChecklist": "added checklist __checklist__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-addChecklistItem": "added checklist item __checklistItem__ to checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-removeChecklist": "removed checklist __checklist__ from card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-removeChecklistItem": "removed checklist item __checklistItem__ from checklist __checkList__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-checkedItem": "checked __checklistItem__ of checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-uncheckedItem": "unchecked __checklistItem__ of checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-completeChecklist": "completed checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-uncompleteChecklist": "uncompleted checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-addComment": "commented on card __card__: __comment__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-createBoard": "created board __board__",
+ "act-createSwimlane": "created swimlane __swimlane__ to board __board__",
+ "act-createCard": "created card __card__ to list __list__ at swimlane __swimlane__ at board __board__",
+ "act-createCustomField": "created custom field __customField__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-createList": "added list __list__ to board __board__",
+ "act-addBoardMember": "added member __member__ to board __board__",
+ "act-archivedBoard": "Board __board__ moved to Archive",
+ "act-archivedCard": "Card __card__ at list __list__ at swimlane __swimlane__ at board __board__ moved to Archive",
+ "act-archivedList": "List __list__ at swimlane __swimlane__ at board __board__ moved to Archive",
+ "act-archivedSwimlane": "Swimlane __swimlane__ at board __board__ moved to Archive",
+ "act-importBoard": "imported board __board__",
+ "act-importCard": "imported card __card__ to list __list__ at swimlane __swimlane__ at board __board__",
+ "act-importList": "imported list __list__ to swimlane __swimlane__ at board __board__",
+ "act-joinMember": "added member __member__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-moveCard": "moved card __card__ at board __board__ from list __oldList__ at swimlane __oldSwimlane__ to list __list__ at swimlane __swimlane__",
+ "act-moveCardToOtherBoard": "moved card __card__ from list __oldList__ at swimlane __oldSwimlane__ at board __oldBoard__ to list __list__ at swimlane __swimlane__ at board __board__",
+ "act-removeBoardMember": "removed member __member__ from board __board__",
+ "act-restoredCard": "restored card __card__ to list __list__ at swimlane __swimlane__ at board __board__",
+ "act-unjoinMember": "removed member __member__ from card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
"act-withBoardTitle": "__board__",
"act-withCardTitle": "[__board__] __card__",
"actions": "Darbības",
@@ -47,14 +60,14 @@
"activity-unchecked-item": "unchecked %s in checklist %s of %s",
"activity-checklist-added": "added checklist to %s",
"activity-checklist-removed": "removed a checklist from %s",
- "activity-checklist-completed": "completed the checklist %s of %s",
+ "activity-checklist-completed": "completed checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
"activity-checklist-uncompleted": "uncompleted the checklist %s of %s",
"activity-checklist-item-added": "added checklist item to '%s' in %s",
"activity-checklist-item-removed": "removed a checklist item from '%s' in %s",
"add": "Add",
"activity-checked-item-card": "checked %s in checklist %s",
"activity-unchecked-item-card": "unchecked %s in checklist %s",
- "activity-checklist-completed-card": "completed the checklist %s",
+ "activity-checklist-completed-card": "completed checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
"activity-checklist-uncompleted-card": "uncompleted the checklist %s",
"add-attachment": "Add Attachment",
"add-board": "Add Board",
@@ -92,6 +105,8 @@
"restore-board": "Restore Board",
"no-archived-boards": "No Boards in Archive.",
"archives": "Archive",
+ "template": "Template",
+ "templates": "Templates",
"assign-member": "Assign member",
"attached": "attached",
"attachment": "Attachment",
@@ -110,7 +125,7 @@
"boardChangeTitlePopup-title": "Rename Board",
"boardChangeVisibilityPopup-title": "Change Visibility",
"boardChangeWatchPopup-title": "Change Watch",
- "boardMenuPopup-title": "Board Menu",
+ "boardMenuPopup-title": "Board Settings",
"boards": "Boards",
"board-view": "Board View",
"board-view-cal": "Calendar",
@@ -143,6 +158,7 @@
"cardLabelsPopup-title": "Labels",
"cardMembersPopup-title": "Members",
"cardMorePopup-title": "More",
+ "cardTemplatePopup-title": "Create template",
"cards": "Cards",
"cards-count": "Cards",
"casSignIn": "Sign In with CAS",
@@ -204,7 +220,7 @@
"confirm-checklist-delete-dialog": "Are you sure you want to delete checklist?",
"copy-card-link-to-clipboard": "Copy card link to clipboard",
"linkCardPopup-title": "Link Card",
- "searchCardPopup-title": "Search Card",
+ "searchElementPopup-title": "Search",
"copyCardPopup-title": "Copy Card",
"copyChecklistToManyCardsPopup-title": "Copy Checklist Template to Many Cards",
"copyChecklistToManyCardsPopup-instructions": "Destination Card Titles and Descriptions in this JSON format",
@@ -453,6 +469,9 @@
"welcome-swimlane": "Milestone 1",
"welcome-list1": "Basics",
"welcome-list2": "Advanced",
+ "card-templates-swimlane": "Card Templates",
+ "list-templates-swimlane": "List Templates",
+ "board-templates-swimlane": "Board Templates",
"what-to-do": "What do you want to do?",
"wipLimitErrorPopup-title": "Invalid WIP Limit",
"wipLimitErrorPopup-dialog-pt1": "The number of tasks in this list is higher than the WIP limit you've defined.",
@@ -552,6 +571,8 @@
"activity-added-label-card": "added label '%s'",
"activity-removed-label-card": "removed label '%s'",
"activity-delete-attach-card": "deleted an attachment",
+ "activity-set-customfield": "set custom field '%s' to '%s' in %s",
+ "activity-unset-customfield": "unset custom field '%s' in %s",
"r-rule": "Rule",
"r-add-trigger": "Add trigger",
"r-add-action": "Add action",
diff --git a/i18n/mk.i18n.json b/i18n/mk.i18n.json
index 5481cc70..10489c66 100644
--- a/i18n/mk.i18n.json
+++ b/i18n/mk.i18n.json
@@ -1,35 +1,48 @@
{
- "accept": "Приемам",
+ "accept": "Прифати",
"act-activity-notify": "Activity Notification",
- "act-addAttachment": "прикачи __attachment__ към __card__",
- "act-addSubtask": "добави задача __checklist__ към __card__",
- "act-addChecklist": "добави списък със задачи __checklist__ към __card__",
- "act-addChecklistItem": "добави __checklistItem__ към списък със задачи __checklist__ в __card__",
- "act-addComment": "Коментира в __card__: __comment__",
- "act-createBoard": "създаде __board__",
- "act-createCard": "добави __card__ към __list__",
- "act-createCustomField": "създаде собствено поле __customField__",
- "act-createList": "добави __list__ към __board__",
- "act-addBoardMember": "добави __member__ към __board__",
- "act-archivedBoard": "__board__ е преместен в Архива",
- "act-archivedCard": "__card__ е преместена в Архива",
- "act-archivedList": "__list__ е преместен в Архива",
- "act-archivedSwimlane": "__swimlane__ е преместен в Архива",
- "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-addAttachment": "added attachment __attachment__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-deleteAttachment": "deleted attachment __attachment__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-addSubtask": "added subtask __subtask__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-addLabel": "Added label __label__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-addedLabel": "Added label __label__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-removeLabel": "Removed label __label__ from card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-removedLabel": "Removed label __label__ from card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-addChecklist": "added checklist __checklist__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-addChecklistItem": "added checklist item __checklistItem__ to checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-removeChecklist": "removed checklist __checklist__ from card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-removeChecklistItem": "removed checklist item __checklistItem__ from checklist __checkList__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-checkedItem": "checked __checklistItem__ of checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-uncheckedItem": "unchecked __checklistItem__ of checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-completeChecklist": "completed checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-uncompleteChecklist": "uncompleted checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-addComment": "commented on card __card__: __comment__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-createBoard": "created board __board__",
+ "act-createSwimlane": "created swimlane __swimlane__ to board __board__",
+ "act-createCard": "created card __card__ to list __list__ at swimlane __swimlane__ at board __board__",
+ "act-createCustomField": "created custom field __customField__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-createList": "added list __list__ to board __board__",
+ "act-addBoardMember": "added member __member__ to board __board__",
+ "act-archivedBoard": "Board __board__ moved to Archive",
+ "act-archivedCard": "Card __card__ at list __list__ at swimlane __swimlane__ at board __board__ moved to Archive",
+ "act-archivedList": "List __list__ at swimlane __swimlane__ at board __board__ moved to Archive",
+ "act-archivedSwimlane": "Swimlane __swimlane__ at board __board__ moved to Archive",
+ "act-importBoard": "imported board __board__",
+ "act-importCard": "imported card __card__ to list __list__ at swimlane __swimlane__ at board __board__",
+ "act-importList": "imported list __list__ to swimlane __swimlane__ at board __board__",
+ "act-joinMember": "added member __member__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-moveCard": "moved card __card__ at board __board__ from list __oldList__ at swimlane __oldSwimlane__ to list __list__ at swimlane __swimlane__",
+ "act-moveCardToOtherBoard": "moved card __card__ from list __oldList__ at swimlane __oldSwimlane__ at board __oldBoard__ to list __list__ at swimlane __swimlane__ at board __board__",
+ "act-removeBoardMember": "removed member __member__ from board __board__",
+ "act-restoredCard": "restored card __card__ to list __list__ at swimlane __swimlane__ at board __board__",
+ "act-unjoinMember": "removed member __member__ from card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
"act-withBoardTitle": "__board__",
"act-withCardTitle": "[__board__] __card__",
- "actions": "Действия",
- "activities": "Действия",
- "activity": "Дейности",
+ "actions": "Акции",
+ "activities": "Активности",
+ "activity": "Активност",
"activity-added": "добави %s към %s",
- "activity-archived": "%s е преместена в Архива",
+ "activity-archived": "%s е преместена во Архива",
"activity-attached": "прикачи %s към %s",
"activity-created": "създаде %s",
"activity-customfield-created": "създаде собствено поле %s",
@@ -47,132 +60,135 @@
"activity-unchecked-item": "размаркира %s от списък със задачи %s на %s",
"activity-checklist-added": "добави списък със задачи към %s",
"activity-checklist-removed": "премахна списък със задачи от %s",
- "activity-checklist-completed": "завърши списък със задачи %s на %s",
+ "activity-checklist-completed": "completed checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
"activity-checklist-uncompleted": "\"отзавърши\" чеклистта %s в %s",
"activity-checklist-item-added": "добави точка към '%s' в/във %s",
"activity-checklist-item-removed": "премахна точка от '%s' в %s",
"add": "Добави",
"activity-checked-item-card": "отбеляза %s в чеклист %s",
"activity-unchecked-item-card": "размаркира %s в чеклист %s",
- "activity-checklist-completed-card": "завърши чеклиста %s",
+ "activity-checklist-completed-card": "completed checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
"activity-checklist-uncompleted-card": "\"отзавърши\" чеклистта %s",
- "add-attachment": "Добави прикачен файл",
- "add-board": "Добави Табло",
- "add-card": "Добави карта",
- "add-swimlane": "Добави коридор",
- "add-subtask": "Добави подзадача",
- "add-checklist": "Добави списък със задачи",
- "add-checklist-item": "Добави точка към списъка със задачи",
- "add-cover": "Добави корица",
- "add-label": "Добави етикет",
- "add-list": "Добави списък",
- "add-members": "Добави членове",
- "added": "Добавено",
- "addMemberPopup-title": "Членове",
+ "add-attachment": "Додај прилог",
+ "add-board": "Додади Табла",
+ "add-card": "Додади Картичка",
+ "add-swimlane": "Додади Коридор",
+ "add-subtask": "Додади подзадача",
+ "add-checklist": "Додади список на задачи",
+ "add-checklist-item": "Додади точка во списокот со задачи",
+ "add-cover": "Додади корица",
+ "add-label": "Додади етикета",
+ "add-list": "Додади листа",
+ "add-members": "Додави членови",
+ "added": "Додадено",
+ "addMemberPopup-title": "Членови",
"admin": "Администратор",
"admin-desc": "Can view and edit cards, remove members, and change settings for the board.",
"admin-announcement": "Съобщение",
"admin-announcement-active": "Active System-Wide Announcement",
- "admin-announcement-title": "Съобщение от администратора",
- "all-boards": "Всички табла",
- "and-n-other-card": "И __count__ друга карта",
- "and-n-other-card_plural": "И __count__ други карти",
+ "admin-announcement-title": "Announcement from Administrator",
+ "all-boards": "Сите табли",
+ "and-n-other-card": "And __count__ other card",
+ "and-n-other-card_plural": "And __count__ other cards",
"apply": "Приложи",
"app-is-offline": "Loading, please wait. Refreshing the page will cause data loss. If loading does not work, please check that server has not stopped.",
- "archive": "Премести в Архива",
- "archive-all": "Премести всички в Архива",
- "archive-board": "Премести Таблото в Архива",
- "archive-card": "Премести Картата в Архива",
- "archive-list": "Премести Списъка в Архива",
- "archive-swimlane": "Премести Коридора в Архива",
- "archive-selection": "Премести избраното в Архива",
- "archiveBoardPopup-title": "Да преместя ли Таблото в Архива?",
- "archived-items": "Архив",
- "archived-boards": "Табла в Архива",
+ "archive": "Премести во Архива",
+ "archive-all": "Премести всички во Архива",
+ "archive-board": "Премести Таблото во Архива",
+ "archive-card": "Премести Картата во Архива",
+ "archive-list": "Премести Списъка во Архива",
+ "archive-swimlane": "Премести Коридора во Архива",
+ "archive-selection": "Премести избраното во Архива",
+ "archiveBoardPopup-title": "Да преместя ли Таблото во Архива?",
+ "archived-items": "Архива",
+ "archived-boards": "Табла во Архива",
"restore-board": "Възстанови Таблото",
- "no-archived-boards": "Няма Табла в Архива.",
- "archives": "Архив",
+ "no-archived-boards": "Няма Табла во Архива.",
+ "archives": "Архива",
+ "template": "Template",
+ "templates": "Templates",
"assign-member": "Възложи на член от екипа",
"attached": "прикачен",
- "attachment": "Прикаченн файл",
- "attachment-delete-pop": "Изтриването на прикачен файл е завинаги. Няма как да бъде възстановен.",
- "attachmentDeletePopup-title": "Желаете ли да изтриете прикачения файл?",
- "attachments": "Прикачени файлове",
+ "attachment": "Прикаченн датотека",
+ "attachment-delete-pop": "Изтриването на прикачен датотека е завинаги. Няма как да бъде възстановен.",
+ "attachmentDeletePopup-title": "Желаете ли да изтриете прикачения датотека?",
+ "attachments": "Прикачени датотеки",
"auto-watch": "Автоматично наблюдаване на таблата, когато са създадени",
"avatar-too-big": "Аватарът е прекалено голям (максимум 70KB)",
"back": "Назад",
- "board-change-color": "Промени цвета",
+ "board-change-color": "Промени боја",
"board-nb-stars": "%s звезди",
- "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": "Промени името на Таблото",
"boardChangeVisibilityPopup-title": "Change Visibility",
"boardChangeWatchPopup-title": "Промени наблюдаването",
- "boardMenuPopup-title": "Меню на Таблото",
- "boards": "Табла",
+ "boardMenuPopup-title": "Board Settings",
+ "boards": "Табли",
"board-view": "Board View",
"board-view-cal": "Календар",
"board-view-swimlanes": "Коридори",
- "board-view-lists": "Списъци",
+ "board-view-lists": "Листи",
"bucket-example": "Like “Bucket List” for example",
- "cancel": "Cancel",
- "card-archived": "Тази карта е преместена в Архива.",
- "board-archived": "Това табло е преместено в Архива.",
+ "cancel": "Откажи",
+ "card-archived": "Тази карта е преместена во Архива.",
+ "board-archived": "Това табло е преместено во Архива.",
"card-comments-title": "Тази карта има %s коментар.",
"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": "Можете да преместите картата в Архива, за да я премахнете от Таблото и така да запазите активността в него.",
+ "card-delete-suggest-archive": "Можете да преместите картата во Архива, за да я премахнете от Таблото и така да запазите активността в него.",
"card-due": "Готова за",
"card-due-on": "Готова за",
"card-spent": "Изработено време",
- "card-edit-attachments": "Промени прикачените файлове",
+ "card-edit-attachments": "Промени прикачените датотеки",
"card-edit-custom-fields": "Промени собствените полета",
"card-edit-labels": "Промени етикетите",
"card-edit-members": "Промени членовете",
"card-labels-title": "Промени етикетите за картата.",
"card-members-title": "Добави или премахни членове на Таблото от тази карта.",
- "card-start": "Начало",
- "card-start-on": "Започва на",
+ "card-start": "Започнува",
+ "card-start-on": "Започнува на",
"cardAttachmentsPopup-title": "Прикачи от",
"cardCustomField-datePopup-title": "Промени датата",
"cardCustomFieldsPopup-title": "Промени собствените полета",
"cardDeletePopup-title": "Желаете да изтриете картата?",
"cardDetailsActionsPopup-title": "Опции",
"cardLabelsPopup-title": "Етикети",
- "cardMembersPopup-title": "Членове",
- "cardMorePopup-title": "Още",
- "cards": "Карти",
- "cards-count": "Карти",
+ "cardMembersPopup-title": "Членови",
+ "cardMorePopup-title": "Повеќе",
+ "cardTemplatePopup-title": "Create template",
+ "cards": "Картички",
+ "cards-count": "Картички",
"casSignIn": "Sign In with CAS",
"cardType-card": "Карта",
- "cardType-linkedCard": "Свързана карта",
+ "cardType-linkedCard": "Поврзана карта",
"cardType-linkedBoard": "Свързано табло",
"change": "Промени",
"change-avatar": "Промени аватара",
- "change-password": "Промени паролата",
- "change-permissions": "Промени правата",
- "change-settings": "Промени настройките",
- "changeAvatarPopup-title": "Промени аватара",
- "changeLanguagePopup-title": "Промени езика",
- "changePasswordPopup-title": "Промени паролата",
- "changePermissionsPopup-title": "Промени правата",
- "changeSettingsPopup-title": "Промяна на настройките",
+ "change-password": "Промени лозинка",
+ "change-permissions": "Промени права",
+ "change-settings": "Промени параметри",
+ "changeAvatarPopup-title": "Промени аватар",
+ "changeLanguagePopup-title": "Промени јазик",
+ "changePasswordPopup-title": "Промени лозинка",
+ "changePermissionsPopup-title": "Промени права",
+ "changeSettingsPopup-title": "Промени параметри",
"subtasks": "Подзадачи",
"checklists": "Списъци със задачи",
"click-to-star": "Click to star this board.",
"click-to-unstar": "Натиснете, за да премахнете това табло от любими.",
"clipboard": "Клипборда или с драг & дроп",
"close": "Затвори",
- "close-board": "Затвори Таблото",
- "close-board-pop": "Ще можете да възстановите Таблото като натиснете на бутона \"Архив\" в началото на хедъра.",
- "color-black": "черно",
- "color-blue": "синьо",
+ "close-board": "Затвори Табла",
+ "close-board-pop": "Ще можете да възстановите Таблото като натиснете на бутона \"Архива\" в началото на хедъра.",
+ "color-black": "црно",
+ "color-blue": "сино",
"color-crimson": "crimson",
"color-darkgreen": "darkgreen",
- "color-gold": "gold",
- "color-gray": "gray",
+ "color-gold": "златно",
+ "color-gray": "сиво",
"color-green": "зелено",
"color-indigo": "indigo",
"color-lime": "лайм",
@@ -193,28 +209,28 @@
"color-white": "бяло",
"color-yellow": "жълто",
"unset-color": "Unset",
- "comment": "Коментирай",
+ "comment": "Коментирај",
"comment-placeholder": "Напиши коментар",
- "comment-only": "Само коментар",
+ "comment-only": "Само коментари",
"comment-only-desc": "Може да коментира само в карти.",
- "no-comments": "Няма коментари",
+ "no-comments": "Нема коментари",
"no-comments-desc": "Can not see comments and activities.",
- "computer": "Компютър",
- "confirm-subtask-delete-dialog": "Сигурен ли сте, че искате да изтриете подзадачата?",
- "confirm-checklist-delete-dialog": "Сигурни ли сте, че искате да изтриете този чеклист?",
+ "computer": "Компјутер",
+ "confirm-subtask-delete-dialog": "Сигурен ли сте, дека сакате да изтриете подзадачата?",
+ "confirm-checklist-delete-dialog": "Сигурни ли сте, дека сакате да изтриете този чеклист?",
"copy-card-link-to-clipboard": "Копирай връзката на картата в клипборда",
- "linkCardPopup-title": "Свържи картата",
- "searchCardPopup-title": "Търсене на карта",
- "copyCardPopup-title": "Копирай картата",
+ "linkCardPopup-title": "Поврзи картичка",
+ "searchElementPopup-title": "Барај",
+ "copyCardPopup-title": "Копирај картичка",
"copyChecklistToManyCardsPopup-title": "Копирай чеклисти в други карти",
"copyChecklistToManyCardsPopup-instructions": "Destination Card Titles and Descriptions in this JSON format",
"copyChecklistToManyCardsPopup-format": "[ {\"title\": \"First card title\", \"description\":\"First card description\"}, {\"title\":\"Second card title\",\"description\":\"Second card description\"},{\"title\":\"Last card title\",\"description\":\"Last card description\"} ]",
- "create": "Създай",
- "createBoardPopup-title": "Създай Табло",
+ "create": "Креирај",
+ "createBoardPopup-title": "Креирај Табло",
"chooseBoardSourcePopup-title": "Импортирай Табло",
- "createLabelPopup-title": "Създай Табло",
- "createCustomField": "Създай Поле",
- "createCustomFieldPopup-title": "Създай Поле",
+ "createLabelPopup-title": "Креирај Табло",
+ "createCustomField": "Креирај Поле",
+ "createCustomFieldPopup-title": "Креирај Поле",
"current": "сегашен",
"custom-field-delete-pop": "There is no undo. This will remove this custom field from all cards and destroy its history.",
"custom-field-checkbox": "Чекбокс",
@@ -224,13 +240,13 @@
"custom-field-dropdown-options": "List Options",
"custom-field-dropdown-options-placeholder": "Press enter to add more options",
"custom-field-dropdown-unknown": "(unknown)",
- "custom-field-number": "Номер",
+ "custom-field-number": "Број",
"custom-field-text": "Текст",
"custom-fields": "Собствени полета",
"date": "Дата",
- "decline": "Отказ",
+ "decline": "Откажи",
"default-avatar": "Основен аватар",
- "delete": "Изтрий",
+ "delete": "Избриши",
"deleteCustomFieldPopup-title": "Изтриване на Собственото поле?",
"deleteLabelPopup-title": "Желаете да изтриете етикета?",
"description": "Описание",
@@ -256,8 +272,8 @@
"email-enrollAccount-text": "Hello __user__,\n\nTo start using the service, simply click the link below.\n\n__url__\n\nThanks.",
"email-fail": "Неуспешно изпращане на имейла",
"email-fail-text": "Възникна грешка при изпращането на имейла",
- "email-invalid": "Невалиден имейл",
- "email-invite": "Покани чрез имейл",
+ "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__",
@@ -278,7 +294,7 @@
"error-username-taken": "Това потребителско име е вече заето",
"error-email-taken": "Имейлът е вече зает",
"export-board": "Експортиране на Табло",
- "filter": "Филтър",
+ "filter": "Филтер",
"filter-cards": "Филтрирай картите",
"filter-clear": "Премахване на филтрите",
"filter-no-label": "без етикет",
@@ -287,15 +303,15 @@
"filter-on": "Има приложени филтри",
"filter-on-desc": "В момента филтрирате картите в това табло. Моля, натиснете тук, за да промените филтъра.",
"filter-to-selection": "Филтрирай избраните",
- "advanced-filter-label": "Advanced Filter",
+ "advanced-filter-label": "Напреден филтер",
"advanced-filter-description": "Advanced Filter allows to write a string containing following operators: == != <= >= && || ( ) A space is used as a separator between the Operators. You can filter for all Custom Fields by typing their names and values. For Example: Field1 == Value1. Note: If fields or values contains spaces, you need to encapsulate them into single quotes. For Example: 'Field 1' == 'Value 1'. For single control characters (' \\/) to be skipped, you can use \\. For example: Field1 == I\\'m. Also you can combine multiple conditions. For Example: F1 == V1 || F1 == V2. Normally all operators are interpreted from left to right. You can change the order by placing brackets. For Example: F1 == V1 && ( F2 == V2 || F2 == V3 ). Also you can search text fields using regex: F1 == /Tes.*/i",
"fullname": "Име",
"header-logo-title": "Назад към страницата с Вашите табла.",
"hide-system-messages": "Скриване на системните съобщения",
- "headerBarCreateBoardPopup-title": "Създай Табло",
- "home": "Начало",
+ "headerBarCreateBoardPopup-title": "Креирај Табло",
+ "home": "Почетна",
"import": "Импорт",
- "link": "Връзка",
+ "link": "Врска",
"import-board": "Импортирай Табло",
"import-board-c": "Импортирай Табло",
"import-board-title-trello": "Импорт на табло от Trello",
@@ -321,7 +337,7 @@
"joined": "присъедини",
"just-invited": "Бяхте поканени в това табло",
"keyboard-shortcuts": "Преки пътища с клавиатурата",
- "label-create": "Създай етикет",
+ "label-create": "Креирај етикет",
"label-default": "%s етикет (по подразбиране)",
"label-delete-pop": "There is no undo. This will remove this label from all cards and destroy its history.",
"labels": "Етикети",
@@ -331,8 +347,8 @@
"leave-board-pop": "Are you sure you want to leave __boardTitle__? You will be removed from all cards on this board.",
"leaveBoardPopup-title": "Leave Board ?",
"link-card": "Връзка към тази карта",
- "list-archive-cards": "Премести всички карти от този списък в Архива",
- "list-archive-cards-pop": "Това ще премахне всички карти от този Списък от Таблото. За да видите картите в Архива и да ги върнете натиснете на \"Меню\" > \"Архив\".",
+ "list-archive-cards": "Премести всички карти от този списък во Архива",
+ "list-archive-cards-pop": "Това ще премахне всички карти от този Списък от Таблото. За да видите картите во Архива и да ги върнете натиснете на \"Меню\" > \"Архива\".",
"list-move-cards": "Премести всички карти в този списък",
"list-select-cards": "Избери всички карти в този списък",
"set-color-list": "Set Color",
@@ -343,7 +359,7 @@
"listMorePopup-title": "Още",
"link-list": "Връзка към този списък",
"list-delete-pop": "All actions will be removed from the activity feed and you won't be able to recover the list. There is no undo.",
- "list-delete-suggest-archive": "Можете да преместите списъка в Архива, за да го премахнете от Таблото и така да запазите активността в него.",
+ "list-delete-suggest-archive": "Можете да преместите списъка во Архива, за да го премахнете от Таблото и така да запазите активността в него.",
"lists": "Списъци",
"swimlanes": "Коридори",
"log-out": "Изход",
@@ -363,9 +379,9 @@
"muted-info": "You will never be notified of any changes in this board",
"my-boards": "Моите табла",
"name": "Име",
- "no-archived-cards": "Няма карти в Архива.",
- "no-archived-lists": "Няма списъци в Архива.",
- "no-archived-swimlanes": "Няма коридори в Архива.",
+ "no-archived-cards": "Няма карти во Архива.",
+ "no-archived-lists": "Няма списъци во Архива.",
+ "no-archived-swimlanes": "Няма коридори во Архива.",
"no-results": "No results",
"normal": "Normal",
"normal-desc": "Can view and edit cards. Can't change settings.",
@@ -385,7 +401,7 @@
"private": "Private",
"private-desc": "This board is private. Only people added to the board can view and edit it.",
"profile": "Профил",
- "public": "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",
@@ -445,7 +461,7 @@
"uploaded-avatar": "Качихте аватар",
"username": "Потребителско име",
"view-it": "View it",
- "warn-list-archived": "внимание: тази карта е в списък в Архива",
+ "warn-list-archived": "внимание: тази карта е в списък во Архива",
"watch": "Наблюдавай",
"watching": "Наблюдава",
"watching-info": "You will be notified of any change in this board",
@@ -453,6 +469,9 @@
"welcome-swimlane": "Milestone 1",
"welcome-list1": "Basics",
"welcome-list2": "Advanced",
+ "card-templates-swimlane": "Card Templates",
+ "list-templates-swimlane": "List Templates",
+ "board-templates-swimlane": "Board Templates",
"what-to-do": "What do you want to do?",
"wipLimitErrorPopup-title": "Невалиден WIP лимит",
"wipLimitErrorPopup-dialog-pt1": "The number of tasks in this list is higher than the WIP limit you've defined.",
@@ -475,12 +494,12 @@
"smtp-password": "Парола",
"smtp-tls": "TLS поддръжка",
"send-from": "От",
- "send-smtp-test": "Изпрати тестов имейл на себе си",
+ "send-smtp-test": "Изпрати тестов е-маил на себе си",
"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 kanban board for collaborations.\n\nPlease follow the link below:\n__url__\n\nAnd your invitation code is: __icode__\n\nThanks.",
"email-smtp-test-subject": "SMTP Test Email",
- "email-smtp-test-text": "Успешно изпратихте имейл",
+ "email-smtp-test-text": "Успешно изпратихте е-маил",
"error-invitation-code-not-exist": "Invitation code doesn't exist",
"error-notAuthorized": "You are not authorized to view this page.",
"outgoing-webhooks": "Outgoing Webhooks",
@@ -548,10 +567,12 @@
"no-parent": "Не показвай източника",
"activity-added-label": "добави етикет '%s' към %s",
"activity-removed-label": "премахна етикет '%s' от %s",
- "activity-delete-attach": "изтри прикачен файл от %s",
+ "activity-delete-attach": "изтри прикачен датотека от %s",
"activity-added-label-card": "добави етикет '%s'",
"activity-removed-label-card": "премахна етикет '%s'",
- "activity-delete-attach-card": "изтри прикачения файл",
+ "activity-delete-attach-card": "изтри прикачения датотека",
+ "activity-set-customfield": "set custom field '%s' to '%s' in %s",
+ "activity-unset-customfield": "unset custom field '%s' in %s",
"r-rule": "Правило",
"r-add-trigger": "Добави спусък",
"r-add-action": "Добави действие",
@@ -571,7 +592,7 @@
"set-filter": "Set Filter",
"r-moved-to": "Moved to",
"r-moved-from": "Moved from",
- "r-archived": "Преместено в Архива",
+ "r-archived": "Преместено во Архива",
"r-unarchived": "Възстановено от Архива",
"r-a-card": "карта",
"r-when-a-label-is": "When a label is",
@@ -593,7 +614,7 @@
"r-top-of": "началото на",
"r-bottom-of": "края на",
"r-its-list": "списъка й",
- "r-archive": "Премести в Архива",
+ "r-archive": "Премести во Архива",
"r-unarchive": "Възстанови от Архива",
"r-card": "карта",
"r-add": "Добави",
@@ -622,7 +643,7 @@
"r-d-send-email-to": "to",
"r-d-send-email-subject": "subject",
"r-d-send-email-message": "message",
- "r-d-archive": "Премести картата в Архива",
+ "r-d-archive": "Премести картата во Архива",
"r-d-unarchive": "Възстанови картата от Архива",
"r-d-add-label": "Add label",
"r-d-remove-label": "Remove label",
diff --git a/i18n/mn.i18n.json b/i18n/mn.i18n.json
index 012dea07..9c4932b5 100644
--- a/i18n/mn.i18n.json
+++ b/i18n/mn.i18n.json
@@ -1,28 +1,41 @@
{
"accept": "Зөвшөөрөх",
"act-activity-notify": "Activity Notification",
- "act-addAttachment": "_attachment__ хавсралтыг __card__-д хавсаргав",
- "act-addSubtask": "added subtask __checklist__ to __card__",
- "act-addChecklist": "added checklist __checklist__ to __card__",
- "act-addChecklistItem": "added __checklistItem__ to checklist __checklist__ on __card__",
- "act-addComment": "commented on __card__: __comment__",
- "act-createBoard": "created __board__",
- "act-createCard": "added __card__ to __list__",
- "act-createCustomField": "created custom field __customField__",
- "act-createList": "added __list__ to __board__",
- "act-addBoardMember": "added __member__ to __board__",
- "act-archivedBoard": "__board__ moved to Archive",
- "act-archivedCard": "__card__ moved to Archive",
- "act-archivedList": "__list__ moved to Archive",
- "act-archivedSwimlane": "__swimlane__ moved to Archive",
- "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-addAttachment": "added attachment __attachment__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-deleteAttachment": "deleted attachment __attachment__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-addSubtask": "added subtask __subtask__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-addLabel": "Added label __label__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-addedLabel": "Added label __label__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-removeLabel": "Removed label __label__ from card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-removedLabel": "Removed label __label__ from card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-addChecklist": "added checklist __checklist__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-addChecklistItem": "added checklist item __checklistItem__ to checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-removeChecklist": "removed checklist __checklist__ from card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-removeChecklistItem": "removed checklist item __checklistItem__ from checklist __checkList__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-checkedItem": "checked __checklistItem__ of checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-uncheckedItem": "unchecked __checklistItem__ of checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-completeChecklist": "completed checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-uncompleteChecklist": "uncompleted checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-addComment": "commented on card __card__: __comment__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-createBoard": "created board __board__",
+ "act-createSwimlane": "created swimlane __swimlane__ to board __board__",
+ "act-createCard": "created card __card__ to list __list__ at swimlane __swimlane__ at board __board__",
+ "act-createCustomField": "created custom field __customField__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-createList": "added list __list__ to board __board__",
+ "act-addBoardMember": "added member __member__ to board __board__",
+ "act-archivedBoard": "Board __board__ moved to Archive",
+ "act-archivedCard": "Card __card__ at list __list__ at swimlane __swimlane__ at board __board__ moved to Archive",
+ "act-archivedList": "List __list__ at swimlane __swimlane__ at board __board__ moved to Archive",
+ "act-archivedSwimlane": "Swimlane __swimlane__ at board __board__ moved to Archive",
+ "act-importBoard": "imported board __board__",
+ "act-importCard": "imported card __card__ to list __list__ at swimlane __swimlane__ at board __board__",
+ "act-importList": "imported list __list__ to swimlane __swimlane__ at board __board__",
+ "act-joinMember": "added member __member__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-moveCard": "moved card __card__ at board __board__ from list __oldList__ at swimlane __oldSwimlane__ to list __list__ at swimlane __swimlane__",
+ "act-moveCardToOtherBoard": "moved card __card__ from list __oldList__ at swimlane __oldSwimlane__ at board __oldBoard__ to list __list__ at swimlane __swimlane__ at board __board__",
+ "act-removeBoardMember": "removed member __member__ from board __board__",
+ "act-restoredCard": "restored card __card__ to list __list__ at swimlane __swimlane__ at board __board__",
+ "act-unjoinMember": "removed member __member__ from card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
"act-withBoardTitle": "__board__",
"act-withCardTitle": "[__board__] __card__",
"actions": "Actions",
@@ -47,14 +60,14 @@
"activity-unchecked-item": "unchecked %s in checklist %s of %s",
"activity-checklist-added": "added checklist to %s",
"activity-checklist-removed": "removed a checklist from %s",
- "activity-checklist-completed": "completed the checklist %s of %s",
+ "activity-checklist-completed": "completed checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
"activity-checklist-uncompleted": "uncompleted the checklist %s of %s",
"activity-checklist-item-added": "added checklist item to '%s' in %s",
"activity-checklist-item-removed": "removed a checklist item from '%s' in %s",
"add": "Нэмэх",
"activity-checked-item-card": "checked %s in checklist %s",
"activity-unchecked-item-card": "unchecked %s in checklist %s",
- "activity-checklist-completed-card": "completed the checklist %s",
+ "activity-checklist-completed-card": "completed checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
"activity-checklist-uncompleted-card": "uncompleted the checklist %s",
"add-attachment": "Хавсралт нэмэх",
"add-board": "Самбар нэмэх",
@@ -92,6 +105,8 @@
"restore-board": "Restore Board",
"no-archived-boards": "No Boards in Archive.",
"archives": "Archive",
+ "template": "Template",
+ "templates": "Templates",
"assign-member": "Assign member",
"attached": "attached",
"attachment": "Attachment",
@@ -110,7 +125,7 @@
"boardChangeTitlePopup-title": "Rename Board",
"boardChangeVisibilityPopup-title": "Change Visibility",
"boardChangeWatchPopup-title": "Change Watch",
- "boardMenuPopup-title": "Board Menu",
+ "boardMenuPopup-title": "Board Settings",
"boards": "Boards",
"board-view": "Board View",
"board-view-cal": "Calendar",
@@ -143,6 +158,7 @@
"cardLabelsPopup-title": "Labels",
"cardMembersPopup-title": "Гишүүд",
"cardMorePopup-title": "More",
+ "cardTemplatePopup-title": "Create template",
"cards": "Cards",
"cards-count": "Cards",
"casSignIn": "Sign In with CAS",
@@ -204,7 +220,7 @@
"confirm-checklist-delete-dialog": "Are you sure you want to delete checklist?",
"copy-card-link-to-clipboard": "Copy card link to clipboard",
"linkCardPopup-title": "Link Card",
- "searchCardPopup-title": "Search Card",
+ "searchElementPopup-title": "Search",
"copyCardPopup-title": "Copy Card",
"copyChecklistToManyCardsPopup-title": "Copy Checklist Template to Many Cards",
"copyChecklistToManyCardsPopup-instructions": "Destination Card Titles and Descriptions in this JSON format",
@@ -453,6 +469,9 @@
"welcome-swimlane": "Milestone 1",
"welcome-list1": "Basics",
"welcome-list2": "Advanced",
+ "card-templates-swimlane": "Card Templates",
+ "list-templates-swimlane": "List Templates",
+ "board-templates-swimlane": "Board Templates",
"what-to-do": "What do you want to do?",
"wipLimitErrorPopup-title": "Invalid WIP Limit",
"wipLimitErrorPopup-dialog-pt1": "The number of tasks in this list is higher than the WIP limit you've defined.",
@@ -552,6 +571,8 @@
"activity-added-label-card": "added label '%s'",
"activity-removed-label-card": "removed label '%s'",
"activity-delete-attach-card": "deleted an attachment",
+ "activity-set-customfield": "set custom field '%s' to '%s' in %s",
+ "activity-unset-customfield": "unset custom field '%s' in %s",
"r-rule": "Rule",
"r-add-trigger": "Add trigger",
"r-add-action": "Add action",
diff --git a/i18n/nb.i18n.json b/i18n/nb.i18n.json
index 1427e263..f61dd08a 100644
--- a/i18n/nb.i18n.json
+++ b/i18n/nb.i18n.json
@@ -1,28 +1,41 @@
{
"accept": "Godta",
"act-activity-notify": "Activity Notification",
- "act-addAttachment": "la ved __attachment__ til __card__",
- "act-addSubtask": "added subtask __checklist__ to __card__",
- "act-addChecklist": "added checklist __checklist__ to __card__",
- "act-addChecklistItem": "added __checklistItem__ to checklist __checklist__ on __card__",
- "act-addComment": "kommenterte til __card__: __comment__",
- "act-createBoard": "opprettet __board__",
- "act-createCard": "la __card__ til __list__",
- "act-createCustomField": "created custom field __customField__",
- "act-createList": "la __list__ til __board__",
- "act-addBoardMember": "la __member__ til __board__",
- "act-archivedBoard": "__board__ moved to Archive",
- "act-archivedCard": "__card__ moved to Archive",
- "act-archivedList": "__list__ moved to Archive",
- "act-archivedSwimlane": "__swimlane__ moved to Archive",
- "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-addAttachment": "added attachment __attachment__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-deleteAttachment": "deleted attachment __attachment__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-addSubtask": "added subtask __subtask__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-addLabel": "Added label __label__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-addedLabel": "Added label __label__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-removeLabel": "Removed label __label__ from card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-removedLabel": "Removed label __label__ from card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-addChecklist": "added checklist __checklist__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-addChecklistItem": "added checklist item __checklistItem__ to checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-removeChecklist": "removed checklist __checklist__ from card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-removeChecklistItem": "removed checklist item __checklistItem__ from checklist __checkList__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-checkedItem": "checked __checklistItem__ of checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-uncheckedItem": "unchecked __checklistItem__ of checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-completeChecklist": "completed checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-uncompleteChecklist": "uncompleted checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-addComment": "commented on card __card__: __comment__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-createBoard": "created board __board__",
+ "act-createSwimlane": "created swimlane __swimlane__ to board __board__",
+ "act-createCard": "created card __card__ to list __list__ at swimlane __swimlane__ at board __board__",
+ "act-createCustomField": "created custom field __customField__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-createList": "added list __list__ to board __board__",
+ "act-addBoardMember": "added member __member__ to board __board__",
+ "act-archivedBoard": "Board __board__ moved to Archive",
+ "act-archivedCard": "Card __card__ at list __list__ at swimlane __swimlane__ at board __board__ moved to Archive",
+ "act-archivedList": "List __list__ at swimlane __swimlane__ at board __board__ moved to Archive",
+ "act-archivedSwimlane": "Swimlane __swimlane__ at board __board__ moved to Archive",
+ "act-importBoard": "imported board __board__",
+ "act-importCard": "imported card __card__ to list __list__ at swimlane __swimlane__ at board __board__",
+ "act-importList": "imported list __list__ to swimlane __swimlane__ at board __board__",
+ "act-joinMember": "added member __member__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-moveCard": "moved card __card__ at board __board__ from list __oldList__ at swimlane __oldSwimlane__ to list __list__ at swimlane __swimlane__",
+ "act-moveCardToOtherBoard": "moved card __card__ from list __oldList__ at swimlane __oldSwimlane__ at board __oldBoard__ to list __list__ at swimlane __swimlane__ at board __board__",
+ "act-removeBoardMember": "removed member __member__ from board __board__",
+ "act-restoredCard": "restored card __card__ to list __list__ at swimlane __swimlane__ at board __board__",
+ "act-unjoinMember": "removed member __member__ from card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
"act-withBoardTitle": "__board__",
"act-withCardTitle": "[__board__] __card__",
"actions": "Actions",
@@ -47,14 +60,14 @@
"activity-unchecked-item": "unchecked %s in checklist %s of %s",
"activity-checklist-added": "la til sjekkliste til %s",
"activity-checklist-removed": "removed a checklist from %s",
- "activity-checklist-completed": "completed the checklist %s of %s",
+ "activity-checklist-completed": "completed checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
"activity-checklist-uncompleted": "uncompleted the checklist %s of %s",
"activity-checklist-item-added": "added checklist item to '%s' in %s",
"activity-checklist-item-removed": "removed a checklist item from '%s' in %s",
"add": "Legg til",
"activity-checked-item-card": "checked %s in checklist %s",
"activity-unchecked-item-card": "unchecked %s in checklist %s",
- "activity-checklist-completed-card": "completed the checklist %s",
+ "activity-checklist-completed-card": "completed checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
"activity-checklist-uncompleted-card": "uncompleted the checklist %s",
"add-attachment": "Add Attachment",
"add-board": "Add Board",
@@ -92,6 +105,8 @@
"restore-board": "Restore Board",
"no-archived-boards": "No Boards in Archive.",
"archives": "Arkiv",
+ "template": "Template",
+ "templates": "Templates",
"assign-member": "Tildel medlem",
"attached": "la ved",
"attachment": "Vedlegg",
@@ -110,7 +125,7 @@
"boardChangeTitlePopup-title": "Endre navn på tavlen",
"boardChangeVisibilityPopup-title": "Endre synlighet",
"boardChangeWatchPopup-title": "Endre overvåkning",
- "boardMenuPopup-title": "Tavlemeny",
+ "boardMenuPopup-title": "Board Settings",
"boards": "Tavler",
"board-view": "Board View",
"board-view-cal": "Calendar",
@@ -143,6 +158,7 @@
"cardLabelsPopup-title": "Etiketter",
"cardMembersPopup-title": "Medlemmer",
"cardMorePopup-title": "Mer",
+ "cardTemplatePopup-title": "Create template",
"cards": "Kort",
"cards-count": "Kort",
"casSignIn": "Sign In with CAS",
@@ -204,7 +220,7 @@
"confirm-checklist-delete-dialog": "Are you sure you want to delete checklist?",
"copy-card-link-to-clipboard": "Copy card link to clipboard",
"linkCardPopup-title": "Link Card",
- "searchCardPopup-title": "Search Card",
+ "searchElementPopup-title": "Search",
"copyCardPopup-title": "Copy Card",
"copyChecklistToManyCardsPopup-title": "Copy Checklist Template to Many Cards",
"copyChecklistToManyCardsPopup-instructions": "Destination Card Titles and Descriptions in this JSON format",
@@ -453,6 +469,9 @@
"welcome-swimlane": "Milestone 1",
"welcome-list1": "Basics",
"welcome-list2": "Advanced",
+ "card-templates-swimlane": "Card Templates",
+ "list-templates-swimlane": "List Templates",
+ "board-templates-swimlane": "Board Templates",
"what-to-do": "What do you want to do?",
"wipLimitErrorPopup-title": "Invalid WIP Limit",
"wipLimitErrorPopup-dialog-pt1": "The number of tasks in this list is higher than the WIP limit you've defined.",
@@ -552,6 +571,8 @@
"activity-added-label-card": "added label '%s'",
"activity-removed-label-card": "removed label '%s'",
"activity-delete-attach-card": "deleted an attachment",
+ "activity-set-customfield": "set custom field '%s' to '%s' in %s",
+ "activity-unset-customfield": "unset custom field '%s' in %s",
"r-rule": "Rule",
"r-add-trigger": "Add trigger",
"r-add-action": "Add action",
diff --git a/i18n/nl.i18n.json b/i18n/nl.i18n.json
index 24370c09..598aed99 100644
--- a/i18n/nl.i18n.json
+++ b/i18n/nl.i18n.json
@@ -1,28 +1,41 @@
{
"accept": "Accepteren",
"act-activity-notify": "Activity Notification",
- "act-addAttachment": "__attachment__ als bijlage toegevoegd aan __card__",
- "act-addSubtask": "added subtask __checklist__ to __card__",
- "act-addChecklist": "__checklist__ toegevoegd aan __card__",
- "act-addChecklistItem": "__checklistItem__ aan checklist toegevoegd aan __checklist__ op __card__",
- "act-addComment": "gereageerd op __card__:__comment__",
- "act-createBoard": "aangemaakte __bord__",
- "act-createCard": "toegevoegd __kaart__ aan __lijst__",
- "act-createCustomField": "created custom field __customField__",
- "act-createList": "toegevoegd __lijst__ aan __bord__",
- "act-addBoardMember": "__member__ aan __board__ toegevoegd",
- "act-archivedBoard": "__board__ moved to Archive",
- "act-archivedCard": "__card__ moved to Archive",
- "act-archivedList": "__list__ moved to Archive",
- "act-archivedSwimlane": "__swimlane__ moved to Archive",
- "act-importBoard": " __board__ geïmporteerd",
- "act-importCard": "__card__ geïmporteerd",
- "act-importList": "__list__ geïmporteerd",
- "act-joinMember": "__member__ aan __card__ toegevoegd",
- "act-moveCard": "verplaatst __card__ van __oldList__ naar __list__",
- "act-removeBoardMember": "verwijderd __member__ van __board__",
- "act-restoredCard": "hersteld __card__ naar __board__",
- "act-unjoinMember": "verwijderd __member__ van __card__",
+ "act-addAttachment": "added attachment __attachment__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-deleteAttachment": "deleted attachment __attachment__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-addSubtask": "added subtask __subtask__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-addLabel": "Added label __label__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-addedLabel": "Added label __label__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-removeLabel": "Removed label __label__ from card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-removedLabel": "Removed label __label__ from card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-addChecklist": "added checklist __checklist__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-addChecklistItem": "added checklist item __checklistItem__ to checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-removeChecklist": "removed checklist __checklist__ from card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-removeChecklistItem": "removed checklist item __checklistItem__ from checklist __checkList__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-checkedItem": "checked __checklistItem__ of checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-uncheckedItem": "unchecked __checklistItem__ of checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-completeChecklist": "completed checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-uncompleteChecklist": "uncompleted checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-addComment": "commented on card __card__: __comment__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-createBoard": "created board __board__",
+ "act-createSwimlane": "created swimlane __swimlane__ to board __board__",
+ "act-createCard": "created card __card__ to list __list__ at swimlane __swimlane__ at board __board__",
+ "act-createCustomField": "created custom field __customField__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-createList": "added list __list__ to board __board__",
+ "act-addBoardMember": "added member __member__ to board __board__",
+ "act-archivedBoard": "Board __board__ moved to Archive",
+ "act-archivedCard": "Card __card__ at list __list__ at swimlane __swimlane__ at board __board__ moved to Archive",
+ "act-archivedList": "List __list__ at swimlane __swimlane__ at board __board__ moved to Archive",
+ "act-archivedSwimlane": "Swimlane __swimlane__ at board __board__ moved to Archive",
+ "act-importBoard": "imported board __board__",
+ "act-importCard": "imported card __card__ to list __list__ at swimlane __swimlane__ at board __board__",
+ "act-importList": "imported list __list__ to swimlane __swimlane__ at board __board__",
+ "act-joinMember": "added member __member__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-moveCard": "moved card __card__ at board __board__ from list __oldList__ at swimlane __oldSwimlane__ to list __list__ at swimlane __swimlane__",
+ "act-moveCardToOtherBoard": "moved card __card__ from list __oldList__ at swimlane __oldSwimlane__ at board __oldBoard__ to list __list__ at swimlane __swimlane__ at board __board__",
+ "act-removeBoardMember": "removed member __member__ from board __board__",
+ "act-restoredCard": "restored card __card__ to list __list__ at swimlane __swimlane__ at board __board__",
+ "act-unjoinMember": "removed member __member__ from card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
"act-withBoardTitle": "__board__",
"act-withCardTitle": "[__board__] __card__",
"actions": "Acties",
@@ -47,14 +60,14 @@
"activity-unchecked-item": "unchecked %s in checklist %s of %s",
"activity-checklist-added": "checklist toegevoegd aan %s",
"activity-checklist-removed": "removed a checklist from %s",
- "activity-checklist-completed": "completed the checklist %s of %s",
+ "activity-checklist-completed": "completed checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
"activity-checklist-uncompleted": "uncompleted the checklist %s of %s",
"activity-checklist-item-added": "checklist punt toegevoegd aan '%s' in '%s'",
"activity-checklist-item-removed": "removed a checklist item from '%s' in %s",
"add": "Toevoegen",
"activity-checked-item-card": "checked %s in checklist %s",
"activity-unchecked-item-card": "unchecked %s in checklist %s",
- "activity-checklist-completed-card": "completed the checklist %s",
+ "activity-checklist-completed-card": "completed checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
"activity-checklist-uncompleted-card": "uncompleted the checklist %s",
"add-attachment": "Voeg Bijlage Toe",
"add-board": "Voeg Bord Toe",
@@ -92,6 +105,8 @@
"restore-board": "Herstel Bord",
"no-archived-boards": "No Boards in Archive.",
"archives": "Archiveren",
+ "template": "Template",
+ "templates": "Templates",
"assign-member": "Wijs lid aan",
"attached": "bijgevoegd",
"attachment": "Bijlage",
@@ -110,7 +125,7 @@
"boardChangeTitlePopup-title": "Hernoem bord",
"boardChangeVisibilityPopup-title": "Verander zichtbaarheid",
"boardChangeWatchPopup-title": "Verander naar 'Watch'",
- "boardMenuPopup-title": "Bord menu",
+ "boardMenuPopup-title": "Board Settings",
"boards": "Borden",
"board-view": "Bord overzicht",
"board-view-cal": "Calendar",
@@ -143,6 +158,7 @@
"cardLabelsPopup-title": "Labels",
"cardMembersPopup-title": "Leden",
"cardMorePopup-title": "Meer",
+ "cardTemplatePopup-title": "Create template",
"cards": "Kaarten",
"cards-count": "Kaarten",
"casSignIn": "Sign In with CAS",
@@ -204,7 +220,7 @@
"confirm-checklist-delete-dialog": "Are you sure you want to delete checklist?",
"copy-card-link-to-clipboard": "Kopieer kaart link naar klembord",
"linkCardPopup-title": "Link Card",
- "searchCardPopup-title": "Search Card",
+ "searchElementPopup-title": "Zoek",
"copyCardPopup-title": "Kopieer kaart",
"copyChecklistToManyCardsPopup-title": "Checklist sjabloon kopiëren naar meerdere kaarten",
"copyChecklistToManyCardsPopup-instructions": "Doel kaart titels en omschrijvingen in dit JSON formaat",
@@ -453,6 +469,9 @@
"welcome-swimlane": "Mijlpaal 1",
"welcome-list1": "Basis",
"welcome-list2": "Geadvanceerd",
+ "card-templates-swimlane": "Card Templates",
+ "list-templates-swimlane": "List Templates",
+ "board-templates-swimlane": "Board Templates",
"what-to-do": "Wat wil je doen?",
"wipLimitErrorPopup-title": "Ongeldige WIP limiet",
"wipLimitErrorPopup-dialog-pt1": "Het aantal taken in deze lijst is groter dan de gedefinieerde WIP limiet ",
@@ -552,6 +571,8 @@
"activity-added-label-card": "added label '%s'",
"activity-removed-label-card": "removed label '%s'",
"activity-delete-attach-card": "deleted an attachment",
+ "activity-set-customfield": "set custom field '%s' to '%s' in %s",
+ "activity-unset-customfield": "unset custom field '%s' in %s",
"r-rule": "Rule",
"r-add-trigger": "Add trigger",
"r-add-action": "Add action",
diff --git a/i18n/oc.i18n.json b/i18n/oc.i18n.json
new file mode 100644
index 00000000..6b62bbd1
--- /dev/null
+++ b/i18n/oc.i18n.json
@@ -0,0 +1,686 @@
+{
+ "accept": "Acceptar",
+ "act-activity-notify": "Notificacion d'activitat",
+ "act-addAttachment": "as apondut una pèça joncha __astacament__ de la carta __card__ a la tièra __list__ del corredor __swimlane__ del tablèu __board__",
+ "act-deleteAttachment": "as tirat una pèça joncha __astacament__ de la carta __card__ de la tièra __list__ del corredor __swimlane__ del tablèu __board__",
+ "act-addSubtask": "as apondut una jos-tasca __subtask__ de la carta __card__ de la tièra __list__ del corredor __swimlane__ del tablèu __board__",
+ "act-addLabel": "as apondut una etiqueta__label__ de la carta __card__ a la tièra __list__ del corredor __swimlane__ del tablèu __board__",
+ "act-addedLabel": "as apondut una etiqueta__label__ de la carta __card__ a la tièra __list__ del corredor __swimlane__ del tablèu __board__",
+ "act-removeLabel": "as tirat l'etiqueta__label__ de la carta __card__ de la tièra __list__ del corredor __swimlane__ del tablèu __board__",
+ "act-removedLabel": "as tirat l'etiqueta__label__ de la carta __card__ de la tièra __list__ del corredor __swimlane__ del tablèu __board__",
+ "act-addChecklist": "as apondut la checklist __checklist__ de la carta __card__ de la tièra __list__ del corredor __swimlane__ del tablèu __board__",
+ "act-addChecklistItem": " as apondut l'element __checklistItem__ de la checklist __checklist__ de la carta __card__ de la tièra __list__ del corredor __swimlane__ del tablèu __board__",
+ "act-removeChecklist": "as tirat la checklist __checklist__ de la carta __card__ de la tièra __list__ del corredor __swimlane__ del tablèu __board__",
+ "act-removeChecklistItem": " as tirat l'element __checklistItem__ de la checklist __checklist__ de la carta __card__ de la tièra __list__ del corredor __swimlane__ del tablèu __board__",
+ "act-checkedItem": "as croiat __checklistItem__ de la checklist __checklist__ de la carta __card__ de la tièra __list__ del corredor __swimlane__ del tablèu __board__",
+ "act-uncheckedItem": "as descroiar __checklistItem__ de la checklist __checklist__ de la carta __card__ de la tièra __list__ del corredor __swimlane__ del tablèu __board__",
+ "act-completeChecklist": "as completat la checklist __checklist__ de la carta __card__ de la tièra __list__ del corredor __swimlane__ del tablèu __board__",
+ "act-uncompleteChecklist": "as rendut incomplet la checklist __checklist__ de la carta __card__ de la tièra __list__ del corredor __swimlane__ del tablèu __board__",
+ "act-addComment": "as comentat la carta __card__: __comment__ de la tièra __list__ del corredor __swimlane__ del tablèu __board__",
+ "act-createBoard": "as creat lo tablèu __board__",
+ "act-createSwimlane": "created swimlane __swimlane__ to board __board__",
+ "act-createCard": "as creat la carta __card__ de la tièra __list__ del corredor __swimlane__ del tablèu __board__",
+ "act-createCustomField": "as creat lo camp personalizat __customField__ a la carta __card__ de la tièra __list__ del corredor __swimlane__ del tablèu __board__",
+ "act-createList": "as apondut la tièra __list__ al tablèu __board__",
+ "act-addBoardMember": "as apondut un participant __member__ al tablèu __board__",
+ "act-archivedBoard": "Lo tablèu __board__ es estat desplaçar cap a Archius",
+ "act-archivedCard": "La carta __card__ de la tièra __list__ del corredor __swimlane__ del tablèu __board__ es estat desplaçar cap a Archiu",
+ "act-archivedList": "La tièra __list__ del corredor __swimlane__ del tablèu __board__ es estat desplaçar cap a Archius",
+ "act-archivedSwimlane": "Lo corredor __swimlane__ del tablèu __board__ es estat desplaçar cap a Archius",
+ "act-importBoard": "as importat lo tablèu __board__",
+ "act-importCard": "as importat la carta __card__ de la tièra __list__ del corredor __swimlane__ del tablèu __board__",
+ "act-importList": "as importat la tièra __list__ del corredor __swimlane__ del tablèu __board__",
+ "act-joinMember": "as apondut un participant __member__ a la carta __card__ de la tièra __list__ del corredor __swimlane__ del tablèu __board__",
+ "act-moveCard": "moved card __card__ at board __board__ from list __oldList__ at swimlane __oldSwimlane__ to list __list__ at swimlane __swimlane__",
+ "act-moveCardToOtherBoard": "as desplaçat la carta __card__ de la tièra __oldList__ del corredor __oldSwimlane__ del tablèu __oldBoard__ cap a la tièra __list__ del corredor __swimlane__ del tablèu __board__",
+ "act-removeBoardMember": "as tirat lo participant __member__ del tablèu __board__",
+ "act-restoredCard": "as restorat la carta __card__ de la tièra __list__ del corredor __swimlane__ del tablèu __board__",
+ "act-unjoinMember": "as tirat lo participant __member__ de la carta __card__ de la tièra __list__ del corredor __swimlane__ del tablèu __board__",
+ "act-withBoardTitle": "__tablèu__",
+ "act-withCardTitle": "[__board__] __card__",
+ "actions": "Accions",
+ "activities": "Activitats",
+ "activity": "Activitat",
+ "activity-added": "as apondut %s a %s",
+ "activity-archived": "%s desplaçat cap a Archius",
+ "activity-attached": "as ligat %s a %s",
+ "activity-created": "as creat %s",
+ "activity-customfield-created": "as creat lo camp personalizat %s",
+ "activity-excluded": "as exclús %s de %s",
+ "activity-imported": "as importat %s cap a %s dempuèi %s",
+ "activity-imported-board": "as importat %s dempuèi %s",
+ "activity-joined": "as rejonch %s",
+ "activity-moved": "as desplaçat %s dempuèi %s cap a %s",
+ "activity-on": "sus %s",
+ "activity-removed": "as tirat %s de %s",
+ "activity-sent": "as mandat %s cap a %s",
+ "activity-unjoined": "as quitat %s",
+ "activity-subtask-added": "as apondut una jos-tasca a %s",
+ "activity-checked-item": "as croiat %s dins la checklist %s de %s",
+ "activity-unchecked-item": "as descroiat %s dins la checklist %s de %s",
+ "activity-checklist-added": "as apondut a checklist a %s",
+ "activity-checklist-removed": "as tirat la checklist de %s",
+ "activity-checklist-completed": "as acabat la checklist __checklist__ de la carta __card__ de la tièra __list__ del corredor __swimlane__ del tablèu __board__",
+ "activity-checklist-uncompleted": "as rendut incomplet la checklist %s de %s",
+ "activity-checklist-item-added": "as apondut un element a la checklist '%s' dins %s",
+ "activity-checklist-item-removed": "as tirat un element a la checklist '%s' dins %s",
+ "add": "Apondre",
+ "activity-checked-item-card": "as croiat %s dins la checklist %s",
+ "activity-unchecked-item-card": "as descroiat %s dins la checklist %s",
+ "activity-checklist-completed-card": "as acabat la checklist__checklist__ de la carta __card__ de la tièra __list__ del corredor __swimlane__ del tablèu __board__",
+ "activity-checklist-uncompleted-card": "as rendut incomplet la checklist %s",
+ "add-attachment": "Apondre una pèça joncha",
+ "add-board": "Apondre un tablèu",
+ "add-card": "Apondre una carta",
+ "add-swimlane": "Apondre un corredor",
+ "add-subtask": "Apondre una jos-tasca",
+ "add-checklist": "Apondre una checklist",
+ "add-checklist-item": "Apondre un element a la checklist",
+ "add-cover": "Apondre una cobèrta",
+ "add-label": "Apondre una etiqueta",
+ "add-list": "Apondre una tièra",
+ "add-members": "Apondre un participant",
+ "added": "Apondut lo",
+ "addMemberPopup-title": "Participants",
+ "admin": "Administartor",
+ "admin-desc": "As lo drech de legir e modificar las cartas, tirar de participants, e modificar las opcions del tablèu.",
+ "admin-announcement": "Anóncia",
+ "admin-announcement-active": "Activar l'anóncia globala",
+ "admin-announcement-title": "Anóncia de l'administrator",
+ "all-boards": "Totes los tablèus",
+ "and-n-other-card": "E __comptar__ carta de mai",
+ "and-n-other-card_plural": "E __comptar__ cartas de mai",
+ "apply": "Aplicar",
+ "app-is-offline": "Cargament, vos cal esperar. Refrescar la pagina vos va far perdre vòstre trabalh. Se lo cargament es tròp long, vos cal agachar se lo servidor es pas blocat/arrestat.",
+ "archive": "Archivar",
+ "archive-all": "Archivar tot",
+ "archive-board": "Archivar lo tablèu",
+ "archive-card": "Archivar la carta",
+ "archive-list": "Archivar la tièra",
+ "archive-swimlane": "Archivar lo corredor",
+ "archive-selection": "Archivar la seleccion",
+ "archiveBoardPopup-title": "Archivar lo tablèu?",
+ "archived-items": "Archius",
+ "archived-boards": "Tablèu archivat",
+ "restore-board": "Restaurar lo tablèu",
+ "no-archived-boards": "Pas de tablèu archivat.",
+ "archives": "Archivar",
+ "template": "Modèl",
+ "templates": "Modèls",
+ "assign-member": "Affectar un participant",
+ "attached": "jónher",
+ "attachment": "pèça joncha",
+ "attachment-delete-pop": "Tirar una pèça joncha es defenitiu.",
+ "attachmentDeletePopup-title": "Tirar la pèça joncha ?",
+ "attachments": "Pèças jonchas",
+ "auto-watch": "Survelhar automaticament lo tablèu un còp creat",
+ "avatar-too-big": "L'imatge es tròp pesuc (70KB max)",
+ "back": "Tornar",
+ "board-change-color": "Cambiar de color",
+ "board-nb-stars": "%s estèla",
+ "board-not-found": "Tablèu pas trapat",
+ "board-private-info": "Aqueste tablèu serà <strong>privat</strong>.",
+ "board-public-info": "Aqueste tablèu serà <strong>public</strong>.",
+ "boardChangeColorPopup-title": "Cambiar lo fons del tablèu",
+ "boardChangeTitlePopup-title": "Tornar nomenar lo tablèu",
+ "boardChangeVisibilityPopup-title": "Cambiar la visibilitat",
+ "boardChangeWatchPopup-title": "Cambiar lo seguit",
+ "boardMenuPopup-title": "Opcions del tablèu",
+ "boards": "Tablèus",
+ "board-view": "Presentacion del tablèu",
+ "board-view-cal": "Calendièr",
+ "board-view-swimlanes": "Corredor",
+ "board-view-lists": "Tièras",
+ "bucket-example": "Coma \"Tota la tièra\" per exemple",
+ "cancel": "Tornar",
+ "card-archived": "Aquesta carta es desplaçada dins Archius",
+ "board-archived": "Aqueste tablèu esdesplaçat dins Archius",
+ "card-comments-title": "Aquesta carta a %s de comentaris.",
+ "card-delete-notice": "Un còp tirat, pas de posibilitat de tornar enrè",
+ "card-delete-pop": "Totes las accions van èsser quitadas del seguit d'activitat e poiretz pas mai utilizar aquesta carta.",
+ "card-delete-suggest-archive": "Podètz desplaçar una carta dins Archius per la quitar del tablèu e gardar las activitats.",
+ "card-due": "Esperat",
+ "card-due-on": "Esperat lo",
+ "card-spent": "Temps passat",
+ "card-edit-attachments": "Cambiar las pèças jonchas",
+ "card-edit-custom-fields": "Cambiar los camps personalizats",
+ "card-edit-labels": "Cambiar los labèls",
+ "card-edit-members": "Cambiar los participants",
+ "card-labels-title": "Cambiar l'etiqueta de la carta.",
+ "card-members-title": "Apondre o quitar de participants a la carta. ",
+ "card-start": "Debuta",
+ "card-start-on": "Debuta lo",
+ "cardAttachmentsPopup-title": "Apondut dempuèi",
+ "cardCustomField-datePopup-title": "Cambiar la data",
+ "cardCustomFieldsPopup-title": "Cambiar los camps personalizats",
+ "cardDeletePopup-title": "Suprimir la carta?",
+ "cardDetailsActionsPopup-title": "Accions sus la carta",
+ "cardLabelsPopup-title": "Etiquetas",
+ "cardMembersPopup-title": "Participants",
+ "cardMorePopup-title": "Mai",
+ "cardTemplatePopup-title": "Crear un modèl",
+ "cards": "Cartas",
+ "cards-count": "Cartas",
+ "casSignIn": "Vos connectar amb CAS",
+ "cardType-card": "Carta",
+ "cardType-linkedCard": "Carta ligada",
+ "cardType-linkedBoard": "Tablèu ligat",
+ "change": "Cambiar",
+ "change-avatar": "Cambiar la fòto",
+ "change-password": "Cambiar lo mot de Santa-Clara",
+ "change-permissions": "Cambiar las permissions",
+ "change-settings": "Cambiar los paramètres",
+ "changeAvatarPopup-title": "Cambiar la fòto",
+ "changeLanguagePopup-title": "Cambiar la lenga",
+ "changePasswordPopup-title": "Cambiar lo mot de Santa-Clara",
+ "changePermissionsPopup-title": "Cambiar las permissions",
+ "changeSettingsPopup-title": "Cambiar los paramètres",
+ "subtasks": "Jos-tasca",
+ "checklists": "Checklists",
+ "click-to-star": "Apondre lo tablèu als favorits",
+ "click-to-unstar": "Quitar lo tablèu dels favorits",
+ "clipboard": "Copiar o far limpar",
+ "close": "Tampar",
+ "close-board": "Tampar lo tablèu",
+ "close-board-pop": "Podètz tornar activar lo tablèu dempuèi la pagina d'acuèlh.",
+ "color-black": "negre",
+ "color-blue": "blau",
+ "color-crimson": "purple clar",
+ "color-darkgreen": "verd fonçat",
+ "color-gold": "aur",
+ "color-gray": "gris",
+ "color-green": "verd",
+ "color-indigo": "indi",
+ "color-lime": "jaune clar",
+ "color-magenta": "magenta",
+ "color-mistyrose": "ròse clar",
+ "color-navy": "blau marin",
+ "color-orange": "irange",
+ "color-paleturquoise": "turqués",
+ "color-peachpuff": "persèc",
+ "color-pink": "ròsa",
+ "color-plum": "pruna",
+ "color-purple": "violet",
+ "color-red": "roge",
+ "color-saddlebrown": "castanh",
+ "color-silver": "argent",
+ "color-sky": "blau clar",
+ "color-slateblue": "blau lausa",
+ "color-white": "blanc",
+ "color-yellow": "jaune",
+ "unset-color": "pas reglat",
+ "comment": "Comentari",
+ "comment-placeholder": "Escrire un comentari",
+ "comment-only": "Comentari solament",
+ "comment-only-desc": "Comentari sus las cartas solament.",
+ "no-comments": "Pas cap de comentari",
+ "no-comments-desc": "Podèts pas veire ni los comentaris ni las activitats",
+ "computer": "Ordenator",
+ "confirm-subtask-delete-dialog": "Sètz segur de voler quitar aquesta jos-tasca?",
+ "confirm-checklist-delete-dialog": "Sètz segur de voler quitar aquesta checklist?",
+ "copy-card-link-to-clipboard": "Còpia del ligam de la carta",
+ "linkCardPopup-title": "Ligam de la carta",
+ "searchElementPopup-title": "Cèrca",
+ "copyCardPopup-title": "Còpia de la carta",
+ "copyChecklistToManyCardsPopup-title": "Còpia del modèl de checklist cap a mai d'una carta",
+ "copyChecklistToManyCardsPopup-instructions": "Un compte es estat creat per vos sus ",
+ "copyChecklistToManyCardsPopup-format": "[ {\"title\": \"Títol de la primièra carta\", \"description\":\"Descripcion de la primièra carta\"}, {\"title\":\"Títol de la segonda carta\",\"description\":\"Descripcion de la segonda carta\"},{\"title\":\"Títol de la darrièra carta\",\"description\":\"Descripcion de la darrièra carta\"} ]",
+ "create": "Crear",
+ "createBoardPopup-title": "Crear un tablèu",
+ "chooseBoardSourcePopup-title": "Importar un tablèu",
+ "createLabelPopup-title": "Crear una etiqueta",
+ "createCustomField": "Crear un camp",
+ "createCustomFieldPopup-title": "Crear un camp",
+ "current": "actual",
+ "custom-field-delete-pop": "There is no undo. This will remove this custom field from all cards and destroy its history.",
+ "custom-field-checkbox": "Casa de croiar",
+ "custom-field-date": "Data",
+ "custom-field-dropdown": "Tièra de causidas",
+ "custom-field-dropdown-none": "(pas res)",
+ "custom-field-dropdown-options": "Opcions de la tièra",
+ "custom-field-dropdown-options-placeholder": "Apiejar sus \"Enter\" per apondre d'opcions",
+ "custom-field-dropdown-unknown": "(desconegut)",
+ "custom-field-number": "Nombre",
+ "custom-field-text": "Tèxte",
+ "custom-fields": "Camps personalizats",
+ "date": "Data",
+ "decline": "Refusar",
+ "default-avatar": "Fòto per defaut",
+ "delete": "Suprimir",
+ "deleteCustomFieldPopup-title": "Tirar lo camp personalizat?",
+ "deleteLabelPopup-title": "Tirar l'etiqueta?",
+ "description": "Descripcion",
+ "disambiguateMultiLabelPopup-title": "Precisar l'accion de l'etiqueta",
+ "disambiguateMultiMemberPopup-title": "Precisar l'accion del participant",
+ "discard": "Botar dins l'escobilha",
+ "done": "Acabat",
+ "download": "Telecargar",
+ "edit": "Modificar",
+ "edit-avatar": "Cambiar la fòto",
+ "edit-profile": "Modificar lo perfil",
+ "edit-wip-limit": "Modificar la WIP limit",
+ "soft-wip-limit": "Leugièr WIP limit",
+ "editCardStartDatePopup-title": "Cambiar la data de debuta",
+ "editCardDueDatePopup-title": "Cambiar la data de fin",
+ "editCustomFieldPopup-title": "Modificar los camps",
+ "editCardSpentTimePopup-title": "Cambiar lo temp passat",
+ "editLabelPopup-title": "Cambiar l'etiqueta",
+ "editNotificationPopup-title": "Modificar la notificacion",
+ "editProfilePopup-title": "Modificar lo perfil",
+ "email": "Corrièl",
+ "email-enrollAccount-subject": "Vòstre compte es ara activat pel sit __siteName__",
+ "email-enrollAccount-text": "Adieu __user__,\n\nPer comença d'utilizar lo servici, vos cal clicar sul ligam.\n\n__url__\n\nMercé.",
+ "email-fail": "Pas possible de mandar lo corrièl",
+ "email-fail-text": "Error per mandar lo corrièl",
+ "email-invalid": "L'adreça corrièl es pas valida",
+ "email-invite": "Convidar per corrièl",
+ "email-invite-subject": "__inviter__ vos as mandat un convit",
+ "email-invite-text": "Car __user__,\n\n__inviter__ vos a convidat per jónher lo tablèu \"__board__\".\n\nVos cal clicar sul ligam:\n\n__url__\n\nMercé.",
+ "email-resetPassword-subject": "Tornar inicializar vòstre mot de Santa-Clara de sit __siteName__",
+ "email-resetPassword-text": "Adieu __user__,\n\nPer tornar inicializar vòstre mot de Santa-Clara vos cal clicar sul ligam :\n\n__url__\n\nMercé.",
+ "email-sent": "Mail mandat",
+ "email-verifyEmail-subject": "Vos cal verificar vòstra adreça corrièl del sit __siteName__",
+ "email-verifyEmail-text": "Adieu __user__,\n\nPer verificar vòstra adreça corrièl, vos cal clicar sul ligam :\n\n__url__\n\nMercé.",
+ "enable-wip-limit": "Activar la WIP limit",
+ "error-board-doesNotExist": "Aqueste tablèu existís pas",
+ "error-board-notAdmin": "Devètz èsser un administrator del tablèu per far aquò ",
+ "error-board-notAMember": "Devètz èsser un participant del tablèu per far aquò",
+ "error-json-malformed": "Vòstre tèxte es pas valid JSON",
+ "error-json-schema": "Vòstre JSON es pas al format correct ",
+ "error-list-doesNotExist": "Aqueste tièra existís pas",
+ "error-user-doesNotExist": "Aqueste utilizator existís pas",
+ "error-user-notAllowSelf": "Vos podètz pas convidar vautres meteisses",
+ "error-user-notCreated": "Aqueste utilizator es pas encara creat",
+ "error-username-taken": "Lo nom es ja pres",
+ "error-email-taken": "Lo corrièl es ja pres ",
+ "export-board": "Exportar lo tablèu",
+ "filter": "Filtre",
+ "filter-cards": "Filtre cartas",
+ "filter-clear": "Escafar lo filtre",
+ "filter-no-label": "Pas cap d'etiqueta",
+ "filter-no-member": "Pas cap de participant",
+ "filter-no-custom-fields": "Pas de camp personalizat",
+ "filter-on": "Lo filtre es activat",
+ "filter-on-desc": "Filtratz las cartas dins aqueste tablèu. Picar aquí per editar los filtres",
+ "filter-to-selection": "Filtrar la seleccion",
+ "advanced-filter-label": "Filtre avançat",
+ "advanced-filter-description": "Advanced Filter allows to write a string containing following operators: == != <= >= && || ( ) A space is used as a separator between the Operators. You can filter for all Custom Fields by typing their names and values. For Example: Field1 == Value1. Note: If fields or values contains spaces, you need to encapsulate them into single quotes. For Example: 'Field 1' == 'Value 1'. For single control characters (' \\/) to be skipped, you can use \\. For example: Field1 == I\\'m. Also you can combine multiple conditions. For Example: F1 == V1 || F1 == V2. Normally all operators are interpreted from left to right. You can change the order by placing brackets. For Example: F1 == V1 && ( F2 == V2 || F2 == V3 ). Also you can search text fields using regex: F1 == /Tes.*/i",
+ "fullname": "Nom complet",
+ "header-logo-title": "Retorn a vòstra pagina de tablèus",
+ "hide-system-messages": "Amagar los messatges sistèm",
+ "headerBarCreateBoardPopup-title": "Crear un tablèu",
+ "home": "Acuèlh",
+ "import": "Importar",
+ "link": "Ligar",
+ "import-board": "Importar un tablèu",
+ "import-board-c": "Importar un tablèu",
+ "import-board-title-trello": "Importar un tablèu dempuèi Trello",
+ "import-board-title-wekan": "Importar un tablèu dempuèi un export passat",
+ "import-sandstorm-backup-warning": "Do not delete data you import from original exported board or Trello before checking does this grain close and open again, or do you get Board not found error, that means data loss.",
+ "import-sandstorm-warning": "Importar lo tablèu va quitar totes las donadas del tablèu e lo va remplaçar amb las donadas del tablèu importat.",
+ "from-trello": "Dempuèi Trello",
+ "from-wekan": "Dempuèi un export passat",
+ "import-board-instruction-trello": "Dins vòstre tablèu Trello, vos cal anar dins \"Menut\", puèi \"Mai\", \"Export\", \"Export JSON\", e copiar lo tèxte balhat.",
+ "import-board-instruction-wekan": "Dins vòstre tablèu, vos cal anar dins \"Menut\", puèi \"Exportar lo tablèu\", e de copiar lo tèxte del fichièr telecargat.",
+ "import-board-instruction-about-errors": "Se avètz de errors al moment d'importar un tablèu, es possible que l'importacion as fonccionat, lo tablèu es belèu a la pagina \"Totes los tablèus\".",
+ "import-json-placeholder": "Pegar las donadas del fichièr JSON aicí",
+ "import-map-members": "Mapa dels participants",
+ "import-members-map": "Lo tablèu qu'avètz importat as ja de participants, vos cal far la migracion amb los utilizators actual",
+ "import-show-user-mapping": "Review members mapping",
+ "import-user-select": "Pick your existing user you want to use as this member",
+ "importMapMembersAddPopup-title": "Seleccionar un participant",
+ "info": "Vesion",
+ "initials": "Iniciala",
+ "invalid-date": "Data invalida",
+ "invalid-time": "Temps invalid",
+ "invalid-user": "Participant invalid",
+ "joined": "Jónher",
+ "just-invited": "Sètz just convidat dins aqueste tablèu",
+ "keyboard-shortcuts": "Keyboard shortcuts",
+ "label-create": "Crear una etiqueta",
+ "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": "Etiquetas",
+ "language": "Lenga",
+ "last-admin-desc": "You can’t change roles because there must be at least one admin.",
+ "leave-board": "Leave Board",
+ "leave-board-pop": "Are you sure you want to leave __boardTitle__? You will be removed from all cards on this board.",
+ "leaveBoardPopup-title": "Leave Board ?",
+ "link-card": "Ligam per aquesta carta",
+ "list-archive-cards": "Mandar totas las cartas d'aquesta tièra dins Archius",
+ "list-archive-cards-pop": "This will remove all the cards in this list from the board. To view cards in Archive and bring them back to the board, click “Menu” > “Archive”.",
+ "list-move-cards": "Mandar totas las cartas dins aquesta tièra",
+ "list-select-cards": "Seleccionar totas las cartas dins aquesta tièra",
+ "set-color-list": "Set Color",
+ "listActionPopup-title": "Tièra de las accions",
+ "swimlaneActionPopup-title": "Swimlane Actions",
+ "swimlaneAddPopup-title": "Add a Swimlane below",
+ "listImportCardPopup-title": "Importar una carta de Trello",
+ "listMorePopup-title": "Mai",
+ "link-list": "Ligam d'aquesta tièra",
+ "list-delete-pop": "All actions will be removed from the activity feed and you won't be able to recover the list. There is no undo.",
+ "list-delete-suggest-archive": "You can move a list to Archive to remove it from the board and preserve the activity.",
+ "lists": "Tièras",
+ "swimlanes": "Corredor",
+ "log-out": "Desconnexion",
+ "log-in": "Connexion",
+ "loginPopup-title": "Connexion",
+ "memberMenuPopup-title": "Paramètres dels participants",
+ "members": "Participants",
+ "menu": "Menut",
+ "move-selection": "Bolegar la seleccion",
+ "moveCardPopup-title": "Bolegar la carta",
+ "moveCardToBottom-title": "Bolegar cap al bas",
+ "moveCardToTop-title": "Bolegar cap al naut",
+ "moveSelectionPopup-title": "Bolegar la seleccion",
+ "multi-selection": "Multi-seleccion",
+ "multi-selection-on": "Multi-Selection is on",
+ "muted": "Silenciós",
+ "muted-info": "You will never be notified of any changes in this board",
+ "my-boards": "Mon tablèu",
+ "name": "Nom",
+ "no-archived-cards": "Pas cap de carta dins Archius",
+ "no-archived-lists": "Pas cap de tièra dins Archius",
+ "no-archived-swimlanes": "Pas cap de corredor dins Archius",
+ "no-results": "Pas brica de resultat",
+ "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": "opcional",
+ "or": "o",
+ "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": "Pagina pas trapada",
+ "password": "Mot de Santa-Clara",
+ "paste-or-dragdrop": "to paste, or drag & drop image file to it (image only)",
+ "participating": "Participating",
+ "preview": "Apercebut",
+ "previewAttachedImagePopup-title": "Apercebut",
+ "previewClipboardImagePopup-title": "Apercebut",
+ "private": "Privat",
+ "private-desc": "Aqueste tablèu es privat. Solament las personas apondudas a aquete tablèu lo pòdon veire e editar.",
+ "profile": "Perfil",
+ "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": "Quitar lo tablèu",
+ "remove-label": "Quitar l'etiqueta",
+ "listDeletePopup-title": "Quitar la tièra ?",
+ "remove-member": "Quitar lo participant",
+ "remove-member-from-card": "Quitar aquesta carta",
+ "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": "Tornar nomenar",
+ "rename-board": "Tornar nomenar lo tablèu",
+ "restore": "Restore",
+ "save": "Salvar",
+ "search": "Cèrca",
+ "rules": "Règlas",
+ "search-cards": "Search from card titles and descriptions on this board",
+ "search-example": "Text to search for?",
+ "select-color": "Color causida",
+ "set-wip-limit-value": "Set a limit for the maximum number of tasks in this list",
+ "setWipLimitPopup-title": "Set WIP Limit",
+ "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": "Tampar lo dialòg",
+ "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": "Còla",
+ "this-board": "Aqueste tablèu",
+ "this-card": "aquesta carta",
+ "spent-time-hours": "Spent time (hours)",
+ "overtime-hours": "Overtime (hours)",
+ "overtime": "Overtime",
+ "has-overtime-cards": "Has overtime cards",
+ "has-spenttime-cards": "Has spent time cards",
+ "time": "Temps",
+ "title": "Títol",
+ "tracking": "Tracking",
+ "tracking-info": "You will be notified of any changes to those cards you are involved as creator or member.",
+ "type": "Mena",
+ "unassign-member": "Unassign member",
+ "unsaved-description": "You have an unsaved description.",
+ "unwatch": "Unwatch",
+ "upload": "Telecargar",
+ "upload-avatar": "Telecargar un avatar",
+ "uploaded-avatar": "Avatar telecargat",
+ "username": "Username",
+ "view-it": "View it",
+ "warn-list-archived": "warning: this card is in an list at Archive",
+ "watch": "Seguit",
+ "watching": "Agachat",
+ "watching-info": "You will be notified of any change in this board",
+ "welcome-board": "Tablèu de benvenguda",
+ "welcome-swimlane": "Milestone 1",
+ "welcome-list1": "Basics",
+ "welcome-list2": "Advanced",
+ "card-templates-swimlane": "Card Templates",
+ "list-templates-swimlane": "List Templates",
+ "board-templates-swimlane": "Board Templates",
+ "what-to-do": "What do you want to do?",
+ "wipLimitErrorPopup-title": "Invalid WIP Limit",
+ "wipLimitErrorPopup-dialog-pt1": "The number of tasks in this list is higher than the WIP limit you've defined.",
+ "wipLimitErrorPopup-dialog-pt2": "Please move some tasks out of this list, or set a higher WIP limit.",
+ "admin-panel": "Admin Panel",
+ "settings": "Paramètres",
+ "people": "Personas",
+ "registration": "Registration",
+ "disable-self-registration": "Disable Self-Registration",
+ "invite": "Convidar",
+ "invite-people": "Convidat",
+ "to-boards": "To board(s)",
+ "email-addresses": "Adreça corrièl",
+ "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-tls-description": "Enable TLS support for SMTP server",
+ "smtp-host": "SMTP Host",
+ "smtp-port": "SMTP Port",
+ "smtp-username": "Username",
+ "smtp-password": "Mot de Santa-Clara",
+ "smtp-tls": "TLS support",
+ "send-from": "From",
+ "send-smtp-test": "Se mandar un corrièl d'ensag",
+ "invitation-code": "Còde de convit",
+ "email-invite-register-subject": "__inviter__ vos a mandat un convit",
+ "email-invite-register-text": "Dear __user__,\n\n__inviter__ invites you to kanban board for collaborations.\n\nPlease follow the link below:\n__url__\n\nAnd your invitation code is: __icode__\n\nThanks.",
+ "email-smtp-test-subject": "SMTP Test Email",
+ "email-smtp-test-text": "As capitat de mandar un corrièl",
+ "error-invitation-code-not-exist": "Lo còde de convit existís pas",
+ "error-notAuthorized": "Sès pas autorizat a agachar aquesta pagina",
+ "outgoing-webhooks": "Outgoing Webhooks",
+ "outgoingWebhooksPopup-title": "Outgoing Webhooks",
+ "boardCardTitlePopup-title": "Card Title Filter",
+ "new-outgoing-webhook": "New Outgoing Webhook",
+ "no-name": "(Desconegut)",
+ "Node_version": "Node version",
+ "OS_Arch": "OS Arch",
+ "OS_Cpus": "OS CPU Count",
+ "OS_Freemem": "OS Free Memory",
+ "OS_Loadavg": "OS Load Average",
+ "OS_Platform": "OS Platform",
+ "OS_Release": "OS Release",
+ "OS_Totalmem": "OS Total Memory",
+ "OS_Type": "OS Type",
+ "OS_Uptime": "OS Uptime",
+ "days": "jorns",
+ "hours": "oras",
+ "minutes": "minutas",
+ "seconds": "segondas",
+ "show-field-on-card": "Show this field on card",
+ "automatically-field-on-card": "Auto create field to all cards",
+ "showLabel-field-on-card": "Show field label on minicard",
+ "yes": "Òc",
+ "no": "Non",
+ "accounts": "Accounts",
+ "accounts-allowEmailChange": "Allow Email Change",
+ "accounts-allowUserNameChange": "Allow Username Change",
+ "createdAt": "Created at",
+ "verified": "Verificat",
+ "active": "Avtivat",
+ "card-received": "Recebut",
+ "card-received-on": "Received on",
+ "card-end": "Fin",
+ "card-end-on": "Ends on",
+ "editCardReceivedDatePopup-title": "Change received date",
+ "editCardEndDatePopup-title": "Change end date",
+ "setCardColorPopup-title": "Color seleccionada",
+ "setCardActionsColorPopup-title": "Causir una color",
+ "setSwimlaneColorPopup-title": "Causir una color",
+ "setListColorPopup-title": "Causir una color",
+ "assigned-by": "Assigned By",
+ "requested-by": "Requested By",
+ "board-delete-notice": "Deleting is permanent. You will lose all lists, cards and actions associated with this board.",
+ "delete-board-confirm-popup": "All lists, cards, labels, and activities will be deleted and you won't be able to recover the board contents. There is no undo.",
+ "boardDeletePopup-title": "Suprimir lo tablèu ?",
+ "delete-board": "Tablèu suprimit",
+ "default-subtasks-board": "Subtasks for __board__ board",
+ "default": "Default",
+ "queue": "Queue",
+ "subtask-settings": "Subtasks Settings",
+ "boardSubtaskSettingsPopup-title": "Board Subtasks Settings",
+ "show-subtasks-field": "Cards can have subtasks",
+ "deposit-subtasks-board": "Deposit subtasks to this board:",
+ "deposit-subtasks-list": "Landing list for subtasks deposited here:",
+ "show-parent-in-minicard": "Show parent in minicard:",
+ "prefix-with-full-path": "Prefix with full path",
+ "prefix-with-parent": "Prefix with parent",
+ "subtext-with-full-path": "Subtext with full path",
+ "subtext-with-parent": "Subtext with parent",
+ "change-card-parent": "Change card's parent",
+ "parent-card": "Parent card",
+ "source-board": "Source board",
+ "no-parent": "Don't show parent",
+ "activity-added-label": "added label '%s' to %s",
+ "activity-removed-label": "removed label '%s' from %s",
+ "activity-delete-attach": "deleted an attachment from %s",
+ "activity-added-label-card": "added label '%s'",
+ "activity-removed-label-card": "removed label '%s'",
+ "activity-delete-attach-card": "deleted an attachment",
+ "activity-set-customfield": "set custom field '%s' to '%s' in %s",
+ "activity-unset-customfield": "unset custom field '%s' in %s",
+ "r-rule": "Rule",
+ "r-add-trigger": "Add trigger",
+ "r-add-action": "Add action",
+ "r-board-rules": "Board rules",
+ "r-add-rule": "Add rule",
+ "r-view-rule": "View rule",
+ "r-delete-rule": "Delete rule",
+ "r-new-rule-name": "New rule title",
+ "r-no-rules": "No rules",
+ "r-when-a-card": "When a card",
+ "r-is": "is",
+ "r-is-moved": "is moved",
+ "r-added-to": "added to",
+ "r-removed-from": "Removed from",
+ "r-the-board": "the board",
+ "r-list": "list",
+ "set-filter": "Set Filter",
+ "r-moved-to": "Moved to",
+ "r-moved-from": "Moved from",
+ "r-archived": "Moved to Archive",
+ "r-unarchived": "Restored from Archive",
+ "r-a-card": "a card",
+ "r-when-a-label-is": "When a label is",
+ "r-when-the-label-is": "When the label is",
+ "r-list-name": "list name",
+ "r-when-a-member": "When a member is",
+ "r-when-the-member": "When the member",
+ "r-name": "name",
+ "r-when-a-attach": "When an attachment",
+ "r-when-a-checklist": "When a checklist is",
+ "r-when-the-checklist": "When the checklist",
+ "r-completed": "Completed",
+ "r-made-incomplete": "Made incomplete",
+ "r-when-a-item": "When a checklist item is",
+ "r-when-the-item": "When the checklist item",
+ "r-checked": "Checked",
+ "r-unchecked": "Unchecked",
+ "r-move-card-to": "Move card to",
+ "r-top-of": "Top of",
+ "r-bottom-of": "Bottom of",
+ "r-its-list": "its list",
+ "r-archive": "Desplaçar cap a Archius",
+ "r-unarchive": "Restore from Archive",
+ "r-card": "card",
+ "r-add": "Apondre",
+ "r-remove": "Remove",
+ "r-label": "label",
+ "r-member": "member",
+ "r-remove-all": "Remove all members from the card",
+ "r-set-color": "Set color to",
+ "r-checklist": "checklist",
+ "r-check-all": "Check all",
+ "r-uncheck-all": "Uncheck all",
+ "r-items-check": "items of checklist",
+ "r-check": "Check",
+ "r-uncheck": "Uncheck",
+ "r-item": "item",
+ "r-of-checklist": "of checklist",
+ "r-send-email": "Send an email",
+ "r-to": "to",
+ "r-subject": "subject",
+ "r-rule-details": "Rule details",
+ "r-d-move-to-top-gen": "Move card to top of its list",
+ "r-d-move-to-top-spec": "Move card to top of list",
+ "r-d-move-to-bottom-gen": "Move card to bottom of its list",
+ "r-d-move-to-bottom-spec": "Move card to bottom of list",
+ "r-d-send-email": "Send email",
+ "r-d-send-email-to": "to",
+ "r-d-send-email-subject": "subject",
+ "r-d-send-email-message": "message",
+ "r-d-archive": "Move card to Archive",
+ "r-d-unarchive": "Restore card from Archive",
+ "r-d-add-label": "Add label",
+ "r-d-remove-label": "Remove label",
+ "r-create-card": "Create new card",
+ "r-in-list": "in list",
+ "r-in-swimlane": "in swimlane",
+ "r-d-add-member": "Add member",
+ "r-d-remove-member": "Remove member",
+ "r-d-remove-all-member": "Remove all member",
+ "r-d-check-all": "Check all items of a list",
+ "r-d-uncheck-all": "Uncheck all items of a list",
+ "r-d-check-one": "Check item",
+ "r-d-uncheck-one": "Uncheck item",
+ "r-d-check-of-list": "of checklist",
+ "r-d-add-checklist": "Add checklist",
+ "r-d-remove-checklist": "Remove checklist",
+ "r-by": "by",
+ "r-add-checklist": "Add checklist",
+ "r-with-items": "with items",
+ "r-items-list": "item1,item2,item3",
+ "r-add-swimlane": "Add swimlane",
+ "r-swimlane-name": "swimlane name",
+ "r-board-note": "Note: leave a field empty to match every possible value.",
+ "r-checklist-note": "Note: checklist's items have to be written as comma separated values.",
+ "r-when-a-card-is-moved": "When a card is moved to another list",
+ "ldap": "LDAP",
+ "oauth2": "OAuth2",
+ "cas": "CAS",
+ "authentication-method": "Authentication method",
+ "authentication-type": "Authentication type",
+ "custom-product-name": "Custom Product Name",
+ "layout": "Layout",
+ "hide-logo": "Hide Logo",
+ "add-custom-html-after-body-start": "Add Custom HTML after <body> start",
+ "add-custom-html-before-body-end": "Add Custom HTML before </body> end",
+ "error-undefined": "Something went wrong",
+ "error-ldap-login": "An error occurred while trying to login",
+ "display-authentication-method": "Display Authentication Method",
+ "default-authentication-method": "Default Authentication Method"
+} \ No newline at end of file
diff --git a/i18n/pl.i18n.json b/i18n/pl.i18n.json
index 99a1af9f..b8235f13 100644
--- a/i18n/pl.i18n.json
+++ b/i18n/pl.i18n.json
@@ -1,28 +1,41 @@
{
"accept": "Akceptuj",
"act-activity-notify": "Powiadomienia aktywności",
- "act-addAttachment": "dodano załącznik __attachement__ do __card__",
- "act-addSubtask": "dodał podzadanie __checklist__ do __card__",
- "act-addChecklist": "dodał listę zadań __checklist__ to __card__",
- "act-addChecklistItem": "dodał __checklistItem__ do listy zadań __checklist__ na karcie __card__",
- "act-addComment": "skomentowano __card__: __comment__",
- "act-createBoard": "utworzono __board__",
- "act-createCard": "dodał(a) __card__ do __list__",
- "act-createCustomField": "dodano niestandardowe pole __customField__",
- "act-createList": "dodał(a) __list__ do __board__",
- "act-addBoardMember": "dodał(a) __member__ do __board__",
+ "act-addAttachment": "Dodano załącznik __attachment__ do karty __card__ na liście __list__ w diagramie czynności __swimlane__ na tablicy __board__",
+ "act-deleteAttachment": "Usunięto załącznik __attachment__ na karcie __card__ na liście __list__ w diagramie czynności __swimlane__ na tablicy __board__",
+ "act-addSubtask": "Dodane podzadanie __subtask__ na karcie __card__ na liście __list__ w diagramie czynności __swimlane__ na tablicy __board__",
+ "act-addLabel": "Dodano etykietę __label__ do karty __card__ na liście __list__ w diagramie czynności __swimlane__ na tablicy __board__",
+ "act-addedLabel": "Dodano etykietę __label__ do karty __card__ na liście __list__ w diagramie czynności __swimlane__ na tablicy __board__",
+ "act-removeLabel": "Usunięto etykietę __label__ z karty __card__ na liście __list__ w diagramie czynności __swimlane__ na tablicy __board__",
+ "act-removedLabel": "Usunięto etykietę __label__ z karty __card__ na liście __list__ w diagramie czynności __swimlane__ na tablicy __board__",
+ "act-addChecklist": "Dodano listę zadań __checklist__ do karty __card__ na liście __list__ w diagramie czynności __swimlane__ na tablicy __board__",
+ "act-addChecklistItem": "Dodano element listy zadań __checklistItem__ do listy zadań __checklist__ na karcie __card__ na liście __list__ na diagramie czynności __swimlane__ na tablicy __board__",
+ "act-removeChecklist": "Usunięto listę zadań __checklist__ z karty __card__ na liście __list__ na diagramie czynności __swimlane__ na tablicy __board__",
+ "act-removeChecklistItem": "Usunięto element listy zadań __checklistItem__ z listy zadań __checkList__ na karcie __card__ na liście __list__ na diagramie czynności __swimlane__ na tablicy __board__",
+ "act-checkedItem": "Zaznaczono __checklistItem__ na liście zadań __checklist__ na karcie __card__ na liście __list__ na diagramie czynności __swimlane__ na tablicy __board__",
+ "act-uncheckedItem": "Odznaczono __checklistItem__ na liście __checklist__ na karcie __card__ na liście __list__ na diagramie czynności __swimlane__ na tablicy __board__",
+ "act-completeChecklist": "Wykonano wszystkie zadania z listy __checklist__ na karcie __card__ na liście __list__ na diagramie czynności__ na tablicy __board__",
+ "act-uncompleteChecklist": "Wycofano ukończenie wykonania listy __checklist__ na karcie __card__ na liście __list__ na diagramie czynności__ na tablicy __board__",
+ "act-addComment": "Dodano komentarz na karcie __card__: __comment__ na liście __list__ na diagramie czynności __swimlane__ na tablicy __board__",
+ "act-createBoard": "Utworzono tablicę __board__",
+ "act-createSwimlane": "utworzono diagram czynności __swimlane__ na tablicy __board__",
+ "act-createCard": "Utworzono kartę __card__ na liście __list__ na diagramie czynności __swimlane__ na tablicy __board__",
+ "act-createCustomField": "Utworzono niestandardowe pole __customField__ na karcie __card__ na liście __list__ na diagramie czynności__ na tablicy __board__",
+ "act-createList": "Dodano listę __list__ do tablicy __board__",
+ "act-addBoardMember": "Dodano użytykownika __member__ do tablicy __board__",
"act-archivedBoard": "Tablica __board__ została przeniesiona do Archiwum",
- "act-archivedCard": "Karta __card__ została przeniesiona do Archiwum",
- "act-archivedList": "Lista __list__ została przeniesiona do Archiwum",
- "act-archivedSwimlane": "Diagram czynności __swimlane__ został przeniesiony do Archiwum",
- "act-importBoard": "zaimportowano __board__",
- "act-importCard": "zaimportowano __card__",
- "act-importList": "zaimportowano __list__",
- "act-joinMember": "dodał(a) __member__ do __card__",
- "act-moveCard": "przeniósł/przeniosła __card__ z __oldList__ do __list__",
- "act-removeBoardMember": "usunął/usunęła __member__ z __board__",
- "act-restoredCard": "przywrócono __card__ do __board__",
- "act-unjoinMember": "usunął/usunęła __member__ z __card__",
+ "act-archivedCard": "Karta __card__ na liście __list__ na diagramie czynności __swimlane__ na tablicy __board__ została przeniesiona do Archiwum",
+ "act-archivedList": "Lista __list__ na diagramie czynności __swimlane__ na tablicy __board__ została przeniesiona do Archiwum",
+ "act-archivedSwimlane": "Diagram czynności __swimlane__ na tablicy __board__ został przeniesiony do Archiwum",
+ "act-importBoard": "Zaimportowano tablicę __board__",
+ "act-importCard": "Zaimportowano kartę __card__ do listy __list__ na diagramie czynności __swimlane__ na tablicy __board__",
+ "act-importList": "Zaimportowano listę __list__ na diagram czynności __swimlane__ do tablicy __board__",
+ "act-joinMember": "Dodano użytkownika __member__ do karty __card__ na liście __list__ na diagramie czynności __swimlane__ na tablicy __board__",
+ "act-moveCard": "przeniesiono kartę __card__ na tablicy __board__ z listy __oldList__ na diagramie czynności __oldSwimlane__ na listę __list__ na diagramie czynności __swimlane__",
+ "act-moveCardToOtherBoard": "Przeniesiono kartę __card__ z listy __oldList__ na diagramie czynności __oldSwimlane__ na tablicy __oldBoard__ do listy __listy__ na diagramie czynności __swimlane__ na tablicy __board__",
+ "act-removeBoardMember": "Usunięto użytkownika __member__ z tablicy __board__",
+ "act-restoredCard": "Przywrócono kartę __card__ na listę __list__ na diagram czynności__ na tablicy __board__",
+ "act-unjoinMember": "Usunięto użytkownika __member__ z karty __card__ na liście __list__ na diagramie czynności __swimlane__ na tablicy __board__",
"act-withBoardTitle": "__board__",
"act-withCardTitle": "[__board__] __card__",
"actions": "Akcje",
@@ -47,14 +60,14 @@
"activity-unchecked-item": "odznaczono %s w liście zadań %s z %s",
"activity-checklist-added": "dodał(a) listę zadań do %s",
"activity-checklist-removed": "usunięto listę zadań z %s",
- "activity-checklist-completed": "ukończono listę zadań %s z %s",
+ "activity-checklist-completed": "Wykonano wszystkie zadania z listy __checklist__ na karcie __card__ na liście __list__ na diagramie czynności__ na tablicy __board__",
"activity-checklist-uncompleted": "nieukończono listy zadań %s z %s",
"activity-checklist-item-added": "dodał(a) zadanie '%s' do %s",
"activity-checklist-item-removed": "usunięto element z listy zadań '%s' w %s",
"add": "Dodaj",
"activity-checked-item-card": "zaznaczono %s w liście zadań %s",
"activity-unchecked-item-card": "odznaczono %s w liście zadań %s",
- "activity-checklist-completed-card": "ukończono listę zadań %s",
+ "activity-checklist-completed-card": "Wykonano wszystkie zadania z listy __checklist__ na karcie __card__ na liście __list__ na diagramie czynności__ na tablicy __board__",
"activity-checklist-uncompleted-card": "nieukończono listy zadań %s",
"add-attachment": "Dodaj załącznik",
"add-board": "Dodaj tablicę",
@@ -92,6 +105,8 @@
"restore-board": "Przywróć tablicę",
"no-archived-boards": "Brak tablic w Archiwum.",
"archives": "Zarchiwizuj",
+ "template": "Szablon",
+ "templates": "Szablony",
"assign-member": "Dodaj członka",
"attached": "załączono",
"attachment": "Załącznik",
@@ -110,7 +125,7 @@
"boardChangeTitlePopup-title": "Zmień nazwę tablicy",
"boardChangeVisibilityPopup-title": "Zmień widoczność tablicy",
"boardChangeWatchPopup-title": "Zmień sposób powiadamiania",
- "boardMenuPopup-title": "Menu tablicy",
+ "boardMenuPopup-title": "Ustawienia tablicy",
"boards": "Tablice",
"board-view": "Widok tablicy",
"board-view-cal": "Kalendarz",
@@ -143,6 +158,7 @@
"cardLabelsPopup-title": "Etykiety",
"cardMembersPopup-title": "Członkowie",
"cardMorePopup-title": "Więcej",
+ "cardTemplatePopup-title": "Utwórz szablon",
"cards": "Karty",
"cards-count": "Karty",
"casSignIn": "Zaloguj się poprzez CAS",
@@ -204,7 +220,7 @@
"confirm-checklist-delete-dialog": "Czy jesteś pewien, że chcesz usunąć listę zadań?",
"copy-card-link-to-clipboard": "Skopiuj łącze karty do schowka",
"linkCardPopup-title": "Podepnij kartę",
- "searchCardPopup-title": "Znajdź kartę",
+ "searchElementPopup-title": "Wyszukaj",
"copyCardPopup-title": "Skopiuj kartę",
"copyChecklistToManyCardsPopup-title": "Kopiuj szablon listy zadań do wielu kart",
"copyChecklistToManyCardsPopup-instructions": "Docelowe tytuły i opisy kart są w formacie JSON",
@@ -453,6 +469,9 @@
"welcome-swimlane": "Kamień milowy 1",
"welcome-list1": "Podstawy",
"welcome-list2": "Zaawansowane",
+ "card-templates-swimlane": "Utwórz szablony",
+ "list-templates-swimlane": "Wyświetl szablony",
+ "board-templates-swimlane": "Szablony tablic",
"what-to-do": "Co chcesz zrobić?",
"wipLimitErrorPopup-title": "Nieprawidłowy limit kart na liście",
"wipLimitErrorPopup-dialog-pt1": "Aktualna ilość kart na tej liście jest większa niż aktualny zdefiniowany limit kart.",
@@ -552,6 +571,8 @@
"activity-added-label-card": "dodał(a) etykietę '%s'",
"activity-removed-label-card": "usunięto etykietę '%s'",
"activity-delete-attach-card": "usunięto załącznik",
+ "activity-set-customfield": "ustawiono niestandardowe pole '%s' do '%s' na '%s'",
+ "activity-unset-customfield": "wyczyszczono niestandardowe pole '%s' na '%s'",
"r-rule": "Reguła",
"r-add-trigger": "Dodaj przełącznik",
"r-add-action": "Dodaj czynność",
diff --git a/i18n/pt-BR.i18n.json b/i18n/pt-BR.i18n.json
index 49c2eea3..5d82d841 100644
--- a/i18n/pt-BR.i18n.json
+++ b/i18n/pt-BR.i18n.json
@@ -1,28 +1,41 @@
{
"accept": "Aceitar",
"act-activity-notify": "Notificação de atividade",
- "act-addAttachment": "anexo __attachment__ de __card__",
- "act-addSubtask": "Subtarefa adicionada __checklist__ ao __cartão",
- "act-addChecklist": "adicionada lista de verificação __checklist__ no __card__",
- "act-addChecklistItem": "adicionado __checklistitem__ para a lista de verificação __checklist__ em __card__",
- "act-addComment": "comentou em __card__: __comment__",
- "act-createBoard": "criou __board__",
- "act-createCard": "__card__ adicionado à __list__",
- "act-createCustomField": "criado campo customizado __customField__",
- "act-createList": "__list__ adicionada à __board__",
- "act-addBoardMember": "__member__ adicionado à __board__",
- "act-archivedBoard": "__board__ foi arquivada",
- "act-archivedCard": "__card__ foi Arquivado",
- "act-archivedList": "__list__ foi Arquivado",
- "act-archivedSwimlane": "__swimlane__ foi Arquivado",
- "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-addAttachment": "adicionado anexo __attachment__ ao cartão __card__ na lista __list__ em raia __swimlane__ no quadro __board__",
+ "act-deleteAttachment": "excluido anexo __attachment__ do cartão __card__ na lista __list__ em raia __swimlane__ no quadro __board__",
+ "act-addSubtask": "adicionada subtarefa __subtask__ ao cartão __card__ na lista __list__ em raia __swimlane__ no quadro __board__",
+ "act-addLabel": "Adicionada etiqueta __label__ ao cartão __card__ na lista __list__ em raia __swimlane__ no quadro __board__",
+ "act-addedLabel": "Adicionada etiqueta __label__ ao cartão __card__ na lista __list__ em raia __swimlane__ no quadro __board__",
+ "act-removeLabel": "Removida etiqueta __label__ do cartão __card__ na lista __list__ em raia __swimlane__ no quadro __board__",
+ "act-removedLabel": "Removida etiqueta __label__ do cartão __card__ na lista __list__ em raia __swimlane__ no quadro __board__",
+ "act-addChecklist": "adicionada lista de verificação __checklist__ ao cartão __card__ na lista __list__ em raia __swimlane__ no quadro __board__",
+ "act-addChecklistItem": "adicionado o item __checklistItem__ a lista de verificação__checklist__ no cartão __card__ na lista __list__ em raia __swimlane__ no quadro __board__",
+ "act-removeChecklist": "emovida a lista de verificação __checklist__ do cartão __card__ na lista __list__ em raia __swimlane__ no quadro __board__",
+ "act-removeChecklistItem": "removido item __checklistItem__ da lista de verificação __checkList__ no cartão __card__ na lista __list__ em raia __swimlane__ no quadro __board__",
+ "act-checkedItem": "marcado __checklistItem__ na lista de verificação __checklist__ no cartão __card__ na lista __list__ em raia __swimlane__ no quadro __board__",
+ "act-uncheckedItem": "desmarcado __checklistItem__ na lista __checklist__ no cartão __card__ na lista __list__ em raia __swimlane__ no quadro __board__",
+ "act-completeChecklist": "completada a lista de verificação __checklist__ no cartão __card__ na lista __list__ em raia __swimlane__ no quadro __board__",
+ "act-uncompleteChecklist": "lista de verificação incompleta __checklist__ no cartão __card__ na lista __list__ em raia __swimlane__ no quadro __board__",
+ "act-addComment": "comentou no cartão __card__: __comment__ na lista __list__ em raia __swimlane__ no quadro __board__",
+ "act-createBoard": "criado quadro__board__",
+ "act-createSwimlane": "criada a raia __swimlane__ no quadro __board__",
+ "act-createCard": "criado cartão __card__ na lista __list__ em raia __swimlane__ no quadro __board__",
+ "act-createCustomField": "criado campo customizado __customField__ no cartão __card__ na lista __list__ em raia __swimlane__ no quadro __board__",
+ "act-createList": "adicionada lista __list__ ao quadro __board__",
+ "act-addBoardMember": "adicionado membro __member__ ao quadro __board__",
+ "act-archivedBoard": "Quadro __board__ foi Arquivado",
+ "act-archivedCard": "Cartão __card__ na lista __list__ em raia __swimlane__ no quadro __board__ foi Arquivado",
+ "act-archivedList": "Lista __list__ em raia __swimlane__ no quadro __board__ foi Arquivada",
+ "act-archivedSwimlane": "Raia __swimlane__ no quadro __board__ foi Arquivada",
+ "act-importBoard": "importado quadro __board__",
+ "act-importCard": "importado cartão __card__ para lista __list__ em raia __swimlane__ no quadro __board__",
+ "act-importList": "importada lista __list__ para raia __swimlane__ no quadro __board__",
+ "act-joinMember": "adicionado membro __member__ ao cartão __card__ na lista __list__ em raia __swimlane__ no quadro __board__",
+ "act-moveCard": "movido cartão __card__ do quadro __board__ da raia __oldSwimlane__ da lista __oldList__ para a raia __swimlane__ na lista __list__ ",
+ "act-moveCardToOtherBoard": "movido cartão __card__ da lista __oldList__ em raia __oldSwimlane__ no quadro __oldBoard__ para lista __list__ em raia __swimlane__ no quadro __board__",
+ "act-removeBoardMember": "removido membro __member__ do quadro __board__",
+ "act-restoredCard": "restaurado cartão __card__ a lista __list__ em raia __swimlane__ no quadro __board__",
+ "act-unjoinMember": "removido membro __member__ do cartão __card__ na lista __list__ em raia __swimlane__ no quadro __board__",
"act-withBoardTitle": "__board__",
"act-withCardTitle": "[__board__] __card__",
"actions": "Ações",
@@ -47,14 +60,14 @@
"activity-unchecked-item": "desmarcado %s na lista de verificação %s de %s",
"activity-checklist-added": "Adicionada lista de verificação a %s",
"activity-checklist-removed": "removida a lista de verificação de %s",
- "activity-checklist-completed": "completada a lista de verificação %s de %s",
+ "activity-checklist-completed": "completada a lista de verificação __checklist__ no cartão __card__ na lista __list__ em raia __swimlane__ no quadro __board__",
"activity-checklist-uncompleted": "não-completada a lista de verificação %s de %s",
"activity-checklist-item-added": "adicionado o item de lista de verificação para '%s' em %s",
"activity-checklist-item-removed": "removida o item de lista de verificação de '%s' na %s",
"add": "Novo",
"activity-checked-item-card": "marcaddo %s na lista de verificação %s",
"activity-unchecked-item-card": "desmarcado %s na lista de verificação %s",
- "activity-checklist-completed-card": "completada a lista de verificação %s",
+ "activity-checklist-completed-card": "completada a lista de verificação __checklist__ no cartão __card__ na lista __list__ em raia __swimlane__ no quadro __board__",
"activity-checklist-uncompleted-card": "não-completada a lista de verificação %s",
"add-attachment": "Adicionar Anexos",
"add-board": "Adicionar Quadro",
@@ -92,6 +105,8 @@
"restore-board": "Restaurar Quadro",
"no-archived-boards": "Sem Quadros no Arquivo-morto.",
"archives": "Arquivos-morto",
+ "template": "Modelo",
+ "templates": "Modelos",
"assign-member": "Atribuir Membro",
"attached": "anexado",
"attachment": "Anexo",
@@ -110,7 +125,7 @@
"boardChangeTitlePopup-title": "Renomear Quadro",
"boardChangeVisibilityPopup-title": "Alterar Visibilidade",
"boardChangeWatchPopup-title": "Alterar observação",
- "boardMenuPopup-title": "Menu do Quadro",
+ "boardMenuPopup-title": "Configurações do quadro",
"boards": "Quadros",
"board-view": "Visão de quadro",
"board-view-cal": "Calendário",
@@ -143,6 +158,7 @@
"cardLabelsPopup-title": "Etiquetas",
"cardMembersPopup-title": "Membros",
"cardMorePopup-title": "Mais",
+ "cardTemplatePopup-title": "Criar Modelo",
"cards": "Cartões",
"cards-count": "Cartões",
"casSignIn": "Entrar com CAS",
@@ -204,7 +220,7 @@
"confirm-checklist-delete-dialog": "Tem certeza que quer excluir a lista de verificação?",
"copy-card-link-to-clipboard": "Copiar link do cartão para a área de transferência",
"linkCardPopup-title": "Ligar Cartão",
- "searchCardPopup-title": "Procurar Cartão",
+ "searchElementPopup-title": "Buscar",
"copyCardPopup-title": "Copiar o cartão",
"copyChecklistToManyCardsPopup-title": "Copiar modelo de lista de verificação para vários cartões",
"copyChecklistToManyCardsPopup-instructions": "Títulos e descrições do cartão de destino neste formato JSON",
@@ -453,6 +469,9 @@
"welcome-swimlane": "Marco 1",
"welcome-list1": "Básico",
"welcome-list2": "Avançado",
+ "card-templates-swimlane": "Modelos de cartão",
+ "list-templates-swimlane": "Modelos de lista",
+ "board-templates-swimlane": "Modelos de quadro",
"what-to-do": "O que você gostaria de fazer?",
"wipLimitErrorPopup-title": "Limite WIP Inválido",
"wipLimitErrorPopup-dialog-pt1": "O número de tarefas nesta lista excede o limite WIP definido.",
@@ -552,6 +571,8 @@
"activity-added-label-card": "adicionada etiqueta '%s'",
"activity-removed-label-card": "removida etiqueta '%s'",
"activity-delete-attach-card": "excluido um anexo",
+ "activity-set-customfield": "definir campo personalizado '%s' para '%s' em %s",
+ "activity-unset-customfield": "redefinir campo personalizado '%s' em %s",
"r-rule": "Regra",
"r-add-trigger": "Adicionar gatilho",
"r-add-action": "Adicionar ação",
@@ -654,7 +675,7 @@
"authentication-method": "Método de autenticação",
"authentication-type": "Tipo de autenticação",
"custom-product-name": "Nome Customizado do Produto",
- "layout": "Leiaute",
+ "layout": "Layout",
"hide-logo": "Esconder Logo",
"add-custom-html-after-body-start": "Adicionar HTML Customizado depois do início do <body>",
"add-custom-html-before-body-end": "Adicionar HTML Customizado antes do fim do </body>",
diff --git a/i18n/pt.i18n.json b/i18n/pt.i18n.json
index b5870960..225b5adb 100644
--- a/i18n/pt.i18n.json
+++ b/i18n/pt.i18n.json
@@ -1,28 +1,41 @@
{
"accept": "Aceitar",
"act-activity-notify": "Notificação de Actividade",
- "act-addAttachment": "anexado __attachment__ ao __card__",
- "act-addSubtask": "adicionou sub-tarefa __checklist__ ao __card__",
- "act-addChecklist": "adicionou checklist __checklist__ ao __card__",
- "act-addChecklistItem": "adicionou __checklistItem__ à checklist __checklist__ no __card__",
- "act-addComment": "comentou em __card__: __comment__",
- "act-createBoard": "criou __board__",
- "act-createCard": "adicionou __card__ à __list__",
- "act-createCustomField": "criou o campo customizado __customField__",
- "act-createList": "adicionou __list__ a __board__",
- "act-addBoardMember": "adicionou __member__ a __board__",
- "act-archivedBoard": "__board__ arquivado",
- "act-archivedCard": "__card__ arquivado",
- "act-archivedList": "__list__ arquivada",
- "act-archivedSwimlane": "__swimlane__ arquivada",
- "act-importBoard": "__board__ importado",
- "act-importCard": "__card__ importado",
- "act-importList": "__list__ importada",
- "act-joinMember": "__member__ adicionado ao __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-addAttachment": "added attachment __attachment__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-deleteAttachment": "deleted attachment __attachment__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-addSubtask": "added subtask __subtask__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-addLabel": "Added label __label__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-addedLabel": "Added label __label__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-removeLabel": "Removed label __label__ from card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-removedLabel": "Removed label __label__ from card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-addChecklist": "added checklist __checklist__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-addChecklistItem": "added checklist item __checklistItem__ to checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-removeChecklist": "removed checklist __checklist__ from card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-removeChecklistItem": "removed checklist item __checklistItem__ from checklist __checkList__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-checkedItem": "checked __checklistItem__ of checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-uncheckedItem": "unchecked __checklistItem__ of checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-completeChecklist": "completed checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-uncompleteChecklist": "uncompleted checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-addComment": "commented on card __card__: __comment__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-createBoard": "created board __board__",
+ "act-createSwimlane": "created swimlane __swimlane__ to board __board__",
+ "act-createCard": "created card __card__ to list __list__ at swimlane __swimlane__ at board __board__",
+ "act-createCustomField": "created custom field __customField__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-createList": "added list __list__ to board __board__",
+ "act-addBoardMember": "added member __member__ to board __board__",
+ "act-archivedBoard": "Board __board__ moved to Archive",
+ "act-archivedCard": "Card __card__ at list __list__ at swimlane __swimlane__ at board __board__ moved to Archive",
+ "act-archivedList": "List __list__ at swimlane __swimlane__ at board __board__ moved to Archive",
+ "act-archivedSwimlane": "Swimlane __swimlane__ at board __board__ moved to Archive",
+ "act-importBoard": "imported board __board__",
+ "act-importCard": "imported card __card__ to list __list__ at swimlane __swimlane__ at board __board__",
+ "act-importList": "imported list __list__ to swimlane __swimlane__ at board __board__",
+ "act-joinMember": "added member __member__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-moveCard": "moved card __card__ at board __board__ from list __oldList__ at swimlane __oldSwimlane__ to list __list__ at swimlane __swimlane__",
+ "act-moveCardToOtherBoard": "moved card __card__ from list __oldList__ at swimlane __oldSwimlane__ at board __oldBoard__ to list __list__ at swimlane __swimlane__ at board __board__",
+ "act-removeBoardMember": "removed member __member__ from board __board__",
+ "act-restoredCard": "restored card __card__ to list __list__ at swimlane __swimlane__ at board __board__",
+ "act-unjoinMember": "removed member __member__ from card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
"act-withBoardTitle": "__board__",
"act-withCardTitle": "[__board__] __card__",
"actions": "Ações",
@@ -47,29 +60,29 @@
"activity-unchecked-item": "desmarcado %s na checklist %s de %s",
"activity-checklist-added": "checklist adicionada a %s",
"activity-checklist-removed": "checklist removida de %s",
- "activity-checklist-completed": "checklist %s de %s foi completada",
+ "activity-checklist-completed": "completed checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
"activity-checklist-uncompleted": "checklist %s de %s foi marcada como não completada",
"activity-checklist-item-added": "added checklist item to '%s' in %s",
"activity-checklist-item-removed": "removed a checklist item from '%s' in %s",
"add": "Adicionar",
"activity-checked-item-card": "checked %s in checklist %s",
"activity-unchecked-item-card": "unchecked %s in checklist %s",
- "activity-checklist-completed-card": "completed the checklist %s",
+ "activity-checklist-completed-card": "completed checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
"activity-checklist-uncompleted-card": "uncompleted the checklist %s",
- "add-attachment": "Add Attachment",
+ "add-attachment": "Adicionar Anexo",
"add-board": "Add Board",
- "add-card": "Add Card",
+ "add-card": "Adicionar Cartão",
"add-swimlane": "Add Swimlane",
- "add-subtask": "Add Subtask",
+ "add-subtask": "Adicionar Sub-tarefa",
"add-checklist": "Add Checklist",
"add-checklist-item": "Add an item to checklist",
"add-cover": "Add Cover",
- "add-label": "Add Label",
- "add-list": "Add List",
- "add-members": "Add Members",
- "added": "Added",
+ "add-label": "Adicionar Etiqueta",
+ "add-list": "Adicionar Lista",
+ "add-members": "Adicionar Membro",
+ "added": "Adicionado",
"addMemberPopup-title": "Membros",
- "admin": "Admin",
+ "admin": "Administrador",
"admin-desc": "Can view and edit cards, remove members, and change settings for the board.",
"admin-announcement": "Announcement",
"admin-announcement-active": "Active System-Wide Announcement",
@@ -92,6 +105,8 @@
"restore-board": "Restore Board",
"no-archived-boards": "No Boards in Archive.",
"archives": "Archive",
+ "template": "Template",
+ "templates": "Templates",
"assign-member": "Assign member",
"attached": "attached",
"attachment": "Attachment",
@@ -110,7 +125,7 @@
"boardChangeTitlePopup-title": "Renomear Quadro",
"boardChangeVisibilityPopup-title": "Change Visibility",
"boardChangeWatchPopup-title": "Change Watch",
- "boardMenuPopup-title": "Board Menu",
+ "boardMenuPopup-title": "Board Settings",
"boards": "Boards",
"board-view": "Board View",
"board-view-cal": "Calendar",
@@ -143,6 +158,7 @@
"cardLabelsPopup-title": "Etiquetas",
"cardMembersPopup-title": "Membros",
"cardMorePopup-title": "Mais",
+ "cardTemplatePopup-title": "Create template",
"cards": "Cartões",
"cards-count": "Cartões",
"casSignIn": "Sign In with CAS",
@@ -204,7 +220,7 @@
"confirm-checklist-delete-dialog": "Are you sure you want to delete checklist?",
"copy-card-link-to-clipboard": "Copy card link to clipboard",
"linkCardPopup-title": "Link Card",
- "searchCardPopup-title": "Search Card",
+ "searchElementPopup-title": "Search",
"copyCardPopup-title": "Copy Card",
"copyChecklistToManyCardsPopup-title": "Copy Checklist Template to Many Cards",
"copyChecklistToManyCardsPopup-instructions": "Destination Card Titles and Descriptions in this JSON format",
@@ -453,6 +469,9 @@
"welcome-swimlane": "Milestone 1",
"welcome-list1": "Basics",
"welcome-list2": "Advanced",
+ "card-templates-swimlane": "Card Templates",
+ "list-templates-swimlane": "List Templates",
+ "board-templates-swimlane": "Board Templates",
"what-to-do": "What do you want to do?",
"wipLimitErrorPopup-title": "Invalid WIP Limit",
"wipLimitErrorPopup-dialog-pt1": "The number of tasks in this list is higher than the WIP limit you've defined.",
@@ -552,6 +571,8 @@
"activity-added-label-card": "added label '%s'",
"activity-removed-label-card": "removed label '%s'",
"activity-delete-attach-card": "deleted an attachment",
+ "activity-set-customfield": "set custom field '%s' to '%s' in %s",
+ "activity-unset-customfield": "unset custom field '%s' in %s",
"r-rule": "Rule",
"r-add-trigger": "Add trigger",
"r-add-action": "Add action",
diff --git a/i18n/ro.i18n.json b/i18n/ro.i18n.json
index dd3938d4..33564db8 100644
--- a/i18n/ro.i18n.json
+++ b/i18n/ro.i18n.json
@@ -1,28 +1,41 @@
{
"accept": "Accept",
"act-activity-notify": "Activity Notification",
- "act-addAttachment": "attached __attachment__ to __card__",
- "act-addSubtask": "added subtask __checklist__ to __card__",
- "act-addChecklist": "added checklist __checklist__ to __card__",
- "act-addChecklistItem": "added __checklistItem__ to checklist __checklist__ on __card__",
- "act-addComment": "commented on __card__: __comment__",
- "act-createBoard": "created __board__",
- "act-createCard": "added __card__ to __list__",
- "act-createCustomField": "created custom field __customField__",
- "act-createList": "added __list__ to __board__",
- "act-addBoardMember": "added __member__ to __board__",
- "act-archivedBoard": "__board__ moved to Archive",
- "act-archivedCard": "__card__ moved to Archive",
- "act-archivedList": "__list__ moved to Archive",
- "act-archivedSwimlane": "__swimlane__ moved to Archive",
- "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-addAttachment": "added attachment __attachment__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-deleteAttachment": "deleted attachment __attachment__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-addSubtask": "added subtask __subtask__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-addLabel": "Added label __label__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-addedLabel": "Added label __label__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-removeLabel": "Removed label __label__ from card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-removedLabel": "Removed label __label__ from card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-addChecklist": "added checklist __checklist__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-addChecklistItem": "added checklist item __checklistItem__ to checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-removeChecklist": "removed checklist __checklist__ from card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-removeChecklistItem": "removed checklist item __checklistItem__ from checklist __checkList__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-checkedItem": "checked __checklistItem__ of checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-uncheckedItem": "unchecked __checklistItem__ of checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-completeChecklist": "completed checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-uncompleteChecklist": "uncompleted checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-addComment": "commented on card __card__: __comment__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-createBoard": "created board __board__",
+ "act-createSwimlane": "created swimlane __swimlane__ to board __board__",
+ "act-createCard": "created card __card__ to list __list__ at swimlane __swimlane__ at board __board__",
+ "act-createCustomField": "created custom field __customField__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-createList": "added list __list__ to board __board__",
+ "act-addBoardMember": "added member __member__ to board __board__",
+ "act-archivedBoard": "Board __board__ moved to Archive",
+ "act-archivedCard": "Card __card__ at list __list__ at swimlane __swimlane__ at board __board__ moved to Archive",
+ "act-archivedList": "List __list__ at swimlane __swimlane__ at board __board__ moved to Archive",
+ "act-archivedSwimlane": "Swimlane __swimlane__ at board __board__ moved to Archive",
+ "act-importBoard": "imported board __board__",
+ "act-importCard": "imported card __card__ to list __list__ at swimlane __swimlane__ at board __board__",
+ "act-importList": "imported list __list__ to swimlane __swimlane__ at board __board__",
+ "act-joinMember": "added member __member__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-moveCard": "moved card __card__ at board __board__ from list __oldList__ at swimlane __oldSwimlane__ to list __list__ at swimlane __swimlane__",
+ "act-moveCardToOtherBoard": "moved card __card__ from list __oldList__ at swimlane __oldSwimlane__ at board __oldBoard__ to list __list__ at swimlane __swimlane__ at board __board__",
+ "act-removeBoardMember": "removed member __member__ from board __board__",
+ "act-restoredCard": "restored card __card__ to list __list__ at swimlane __swimlane__ at board __board__",
+ "act-unjoinMember": "removed member __member__ from card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
"act-withBoardTitle": "__board__",
"act-withCardTitle": "[__board__] __card__",
"actions": "Actions",
@@ -47,14 +60,14 @@
"activity-unchecked-item": "unchecked %s in checklist %s of %s",
"activity-checklist-added": "added checklist to %s",
"activity-checklist-removed": "removed a checklist from %s",
- "activity-checklist-completed": "completed the checklist %s of %s",
+ "activity-checklist-completed": "completed checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
"activity-checklist-uncompleted": "uncompleted the checklist %s of %s",
"activity-checklist-item-added": "added checklist item to '%s' in %s",
"activity-checklist-item-removed": "removed a checklist item from '%s' in %s",
"add": "Add",
"activity-checked-item-card": "checked %s in checklist %s",
"activity-unchecked-item-card": "unchecked %s in checklist %s",
- "activity-checklist-completed-card": "completed the checklist %s",
+ "activity-checklist-completed-card": "completed checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
"activity-checklist-uncompleted-card": "uncompleted the checklist %s",
"add-attachment": "Add Attachment",
"add-board": "Add Board",
@@ -92,6 +105,8 @@
"restore-board": "Restore Board",
"no-archived-boards": "No Boards in Archive.",
"archives": "Archive",
+ "template": "Template",
+ "templates": "Templates",
"assign-member": "Assign member",
"attached": "attached",
"attachment": "Ataşament",
@@ -110,7 +125,7 @@
"boardChangeTitlePopup-title": "Rename Board",
"boardChangeVisibilityPopup-title": "Change Visibility",
"boardChangeWatchPopup-title": "Change Watch",
- "boardMenuPopup-title": "Board Menu",
+ "boardMenuPopup-title": "Board Settings",
"boards": "Boards",
"board-view": "Board View",
"board-view-cal": "Calendar",
@@ -143,6 +158,7 @@
"cardLabelsPopup-title": "Labels",
"cardMembersPopup-title": "Members",
"cardMorePopup-title": "More",
+ "cardTemplatePopup-title": "Create template",
"cards": "Cards",
"cards-count": "Cards",
"casSignIn": "Sign In with CAS",
@@ -204,7 +220,7 @@
"confirm-checklist-delete-dialog": "Are you sure you want to delete checklist?",
"copy-card-link-to-clipboard": "Copy card link to clipboard",
"linkCardPopup-title": "Link Card",
- "searchCardPopup-title": "Search Card",
+ "searchElementPopup-title": "Caută",
"copyCardPopup-title": "Copy Card",
"copyChecklistToManyCardsPopup-title": "Copy Checklist Template to Many Cards",
"copyChecklistToManyCardsPopup-instructions": "Destination Card Titles and Descriptions in this JSON format",
@@ -453,6 +469,9 @@
"welcome-swimlane": "Milestone 1",
"welcome-list1": "Basics",
"welcome-list2": "Advanced",
+ "card-templates-swimlane": "Card Templates",
+ "list-templates-swimlane": "List Templates",
+ "board-templates-swimlane": "Board Templates",
"what-to-do": "Ce ai vrea sa faci?",
"wipLimitErrorPopup-title": "Invalid WIP Limit",
"wipLimitErrorPopup-dialog-pt1": "The number of tasks in this list is higher than the WIP limit you've defined.",
@@ -552,6 +571,8 @@
"activity-added-label-card": "added label '%s'",
"activity-removed-label-card": "removed label '%s'",
"activity-delete-attach-card": "deleted an attachment",
+ "activity-set-customfield": "set custom field '%s' to '%s' in %s",
+ "activity-unset-customfield": "unset custom field '%s' in %s",
"r-rule": "Rule",
"r-add-trigger": "Add trigger",
"r-add-action": "Add action",
diff --git a/i18n/ru.i18n.json b/i18n/ru.i18n.json
index 16bbb6e7..c677bd87 100644
--- a/i18n/ru.i18n.json
+++ b/i18n/ru.i18n.json
@@ -1,28 +1,41 @@
{
"accept": "Принять",
"act-activity-notify": "Уведомление о действиях участников",
- "act-addAttachment": "прикрепил __attachment__ в __card__",
- "act-addSubtask": "добавил подзадачу __checklist__ в __card__",
- "act-addChecklist": "добавил контрольный список __checklist__ в __card__",
- "act-addChecklistItem": "добавил __checklistItem__ в контрольный список __checklist__ в __card__",
- "act-addComment": "прокомментировал __card__: __comment__",
- "act-createBoard": "создал __board__",
- "act-createCard": "добавил __card__ в __list__",
- "act-createCustomField": "создано настраиваемое поле __customField__",
- "act-createList": "добавил __list__ на __board__",
- "act-addBoardMember": "добавил __member__ на __board__",
- "act-archivedBoard": "Доска __board__ перемещена в архив",
- "act-archivedCard": "Карточка __card__ перемещена в Архив",
- "act-archivedList": "Список __list__ перемещён в архив",
- "act-archivedSwimlane": "Дорожка __swimlane__ перемещена в архив",
- "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-addAttachment": "прикрепил вложение __attachment__ в карточку __card__ в списке __list__ на дорожке __swimlane__ доски __board__",
+ "act-deleteAttachment": "удалил вложение __attachment__ из карточки __card__ в списке __list__ на дорожке __swimlane__ доски __board__",
+ "act-addSubtask": "добавил подзадачу __subtask__ для карточки __card__ в списке __list__ на дорожке __swimlane__ доски __board__",
+ "act-addLabel": "Добавлена метка __label__ в карточку __card__ в списке __list__ на дорожке __swimlane__ доски __board__",
+ "act-addedLabel": "Добавлена метка __label__ в карточку __card__ в списке __list__ на дорожке __swimlane__ доски __board__",
+ "act-removeLabel": "Снята метка __label__ с карточки __card__ в списке __list__ на дорожке __swimlane__ доски __board__",
+ "act-removedLabel": "Снята метка __label__ с карточки __card__ в списке __list__ на дорожке __swimlane__ доски __board__",
+ "act-addChecklist": "добавил контрольный список __checklist__ в карточку __card__ в списке __list__ на дорожке __swimlane__ доски __board__",
+ "act-addChecklistItem": "добавил пункт __checklistItem__ в контрольный список __checklist__ в карточке __card__ в списке __list__ на дорожке __swimlane__ доски __board__",
+ "act-removeChecklist": "удалил контрольный список __checklist__ из карточки __card__ в списке __list__ на дорожке __swimlane__ доски __board__",
+ "act-removeChecklistItem": "удалил пункт __checklistItem__ из контрольного списка __checkList__ в карточке __card__ в списке __list__ на дорожке __swimlane__ доски __board__",
+ "act-checkedItem": "отметил __checklistItem__ в контрольном списке __checklist__ в карточке __card__ в списке __list__ на дорожке __swimlane__ доски __board__",
+ "act-uncheckedItem": "снял __checklistItem__ в контрольном списке __checklist__ в карточке __card__ в списке __list__ на дорожке __swimlane__ доски __board__",
+ "act-completeChecklist": "завершил контрольный список __checklist__ в карточке __card__ в списке __list__ на дорожке __swimlane__ доски __board__",
+ "act-uncompleteChecklist": "вновь открыл контрольный список __checklist__ в карточке __card__ в списке __list__ на дорожке __swimlane__ доски __board__",
+ "act-addComment": "написал в карточке __card__: __comment__ в списке __list__ на дорожке __swimlane__ доски __board__",
+ "act-createBoard": "создал доску __board__",
+ "act-createSwimlane": "создал дорожку __swimlane__ на доске __board__",
+ "act-createCard": "создал карточку __card__ в списке __list__ на дорожке __swimlane__ доски __board__",
+ "act-createCustomField": "создал поле __customField__ в карточке __card__ в списке __list__ на дорожке __swimlane__ доски __board__\n",
+ "act-createList": "добавил список __list__ на доску __board__",
+ "act-addBoardMember": "добавил участника __member__ на доску __board__",
+ "act-archivedBoard": "Доска __board__ перемещена в Архив",
+ "act-archivedCard": "Карточка __card__ из списка __list__ с дорожки __swimlane__ доски __board__ перемещена в Архив",
+ "act-archivedList": "Список __list__ на дорожке __swimlane__ доски __board__ перемещен в Архив",
+ "act-archivedSwimlane": "Дорожка __swimlane__ на доске __board__ перемещена в Архив",
+ "act-importBoard": "импортировал доску __board__",
+ "act-importCard": "импортировал карточку __card__ в список __list__ на дорожку __swimlane__ доски __board__",
+ "act-importList": "импортировал список __list__ на дорожку __swimlane__ доски __board__",
+ "act-joinMember": "добавил участника __member__ в карточку __card__ в списке __list__ на дорожке __swimlane__ доски __board__",
+ "act-moveCard": "переместил карточку __card__ на доске __board__ из списка __oldList__ с дорожки __oldSwimlane__ в список __list__ на дорожку __swimlane__",
+ "act-moveCardToOtherBoard": "переместил карточку __card__ из списка __oldList__ с дорожки __oldSwimlane__ доски __oldBoard__ в список __list__ на дорожку __swimlane__ доски __board__",
+ "act-removeBoardMember": "удалил участника __member__ с доски __board__",
+ "act-restoredCard": "восстановил карточку __card__ в список __list__ на дорожку __swimlane__ доски __board__",
+ "act-unjoinMember": "удалил участника __member__ из карточки __card__ в списке __list__ на дорожке __swimlane__ доски __board__",
"act-withBoardTitle": "__board__",
"act-withCardTitle": "[__board__] __card__",
"actions": "Действия",
@@ -47,14 +60,14 @@
"activity-unchecked-item": "снял %s в контрольном списке %s в %s",
"activity-checklist-added": "добавил контрольный список в %s",
"activity-checklist-removed": "удалил контрольный список из %s",
- "activity-checklist-completed": "завершил контрольный список %s в %s",
+ "activity-checklist-completed": "завершил контрольный список __checklist__ в карточке __card__ в списке __list__ на дорожке __swimlane__ доски __board__",
"activity-checklist-uncompleted": "вновь открыл контрольный список %s в %s",
"activity-checklist-item-added": "добавил пункт в контрольный список '%s' в карточке %s",
"activity-checklist-item-removed": "удалил пункт из контрольного списка '%s' в карточке %s",
"add": "Создать",
"activity-checked-item-card": "отметил %s в контрольном списке %s",
"activity-unchecked-item-card": "снял %s в контрольном списке %s",
- "activity-checklist-completed-card": "завершил контрольный список %s",
+ "activity-checklist-completed-card": "завершил контрольный список __checklist__ в карточку __card__ в списке __list__ на дорожке __swimlane__ доски __board__",
"activity-checklist-uncompleted-card": "вновь открыл контрольный список %s",
"add-attachment": "Добавить вложение",
"add-board": "Добавить доску",
@@ -92,6 +105,8 @@
"restore-board": "Востановить доску",
"no-archived-boards": "Нет досок в архиве.",
"archives": "Архив",
+ "template": "Шаблон",
+ "templates": "Шаблоны",
"assign-member": "Назначить участника",
"attached": "прикреплено",
"attachment": "Вложение",
@@ -110,7 +125,7 @@
"boardChangeTitlePopup-title": "Переименовать доску",
"boardChangeVisibilityPopup-title": "Изменить настройки видимости",
"boardChangeWatchPopup-title": "Режимы оповещения",
- "boardMenuPopup-title": "Меню доски",
+ "boardMenuPopup-title": "Настройки доски",
"boards": "Доски",
"board-view": "Вид доски",
"board-view-cal": "Календарь",
@@ -143,6 +158,7 @@
"cardLabelsPopup-title": "Метки",
"cardMembersPopup-title": "Участники",
"cardMorePopup-title": "Поделиться",
+ "cardTemplatePopup-title": "Создать шаблон",
"cards": "Карточки",
"cards-count": "Карточки",
"casSignIn": "Войти через CAS",
@@ -204,7 +220,7 @@
"confirm-checklist-delete-dialog": "Вы уверены, что хотите удалить контрольный список?",
"copy-card-link-to-clipboard": "Копировать ссылку на карточку в буфер обмена",
"linkCardPopup-title": "Карточка-ссылка",
- "searchCardPopup-title": "Найти карточку",
+ "searchElementPopup-title": "Поиск",
"copyCardPopup-title": "Копировать карточку",
"copyChecklistToManyCardsPopup-title": "Копировать шаблон контрольного списка в несколько карточек",
"copyChecklistToManyCardsPopup-instructions": "Названия и описания целевых карт в формате JSON",
@@ -453,6 +469,9 @@
"welcome-swimlane": "Этап 1",
"welcome-list1": "Основы",
"welcome-list2": "Расширенно",
+ "card-templates-swimlane": "Шаблоны карточек",
+ "list-templates-swimlane": "Шаблоны списков",
+ "board-templates-swimlane": "Шаблоны досок",
"what-to-do": "Что вы хотите сделать?",
"wipLimitErrorPopup-title": "Некорректный лимит на кол-во задач",
"wipLimitErrorPopup-dialog-pt1": "Количество задач в этом списке превышает установленный вами лимит",
@@ -552,6 +571,8 @@
"activity-added-label-card": "добавил метку '%s'",
"activity-removed-label-card": "удалил метку '%s'",
"activity-delete-attach-card": "удалил вложение",
+ "activity-set-customfield": "сменил значение поля '%s' на '%s' в карточке %s",
+ "activity-unset-customfield": "очистил поле '%s' в карточке %s",
"r-rule": "Правило",
"r-add-trigger": "Задать условие",
"r-add-action": "Задать действие",
diff --git a/i18n/sr.i18n.json b/i18n/sr.i18n.json
index 83bdc3a6..0244a0e4 100644
--- a/i18n/sr.i18n.json
+++ b/i18n/sr.i18n.json
@@ -1,28 +1,41 @@
{
"accept": "Prihvati",
"act-activity-notify": "Activity Notification",
- "act-addAttachment": "attached __attachment__ to __card__",
- "act-addSubtask": "added subtask __checklist__ to __card__",
- "act-addChecklist": "added checklist __checklist__ to __card__",
- "act-addChecklistItem": "added __checklistItem__ to checklist __checklist__ on __card__",
- "act-addComment": "commented on __card__: __comment__",
- "act-createBoard": "created __board__",
- "act-createCard": "added __card__ to __list__",
- "act-createCustomField": "created custom field __customField__",
- "act-createList": "added __list__ to __board__",
- "act-addBoardMember": "added __member__ to __board__",
- "act-archivedBoard": "__board__ moved to Archive",
- "act-archivedCard": "__card__ moved to Archive",
- "act-archivedList": "__list__ moved to Archive",
- "act-archivedSwimlane": "__swimlane__ moved to Archive",
- "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-addAttachment": "added attachment __attachment__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-deleteAttachment": "deleted attachment __attachment__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-addSubtask": "added subtask __subtask__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-addLabel": "Added label __label__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-addedLabel": "Added label __label__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-removeLabel": "Removed label __label__ from card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-removedLabel": "Removed label __label__ from card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-addChecklist": "added checklist __checklist__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-addChecklistItem": "added checklist item __checklistItem__ to checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-removeChecklist": "removed checklist __checklist__ from card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-removeChecklistItem": "removed checklist item __checklistItem__ from checklist __checkList__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-checkedItem": "checked __checklistItem__ of checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-uncheckedItem": "unchecked __checklistItem__ of checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-completeChecklist": "completed checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-uncompleteChecklist": "uncompleted checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-addComment": "commented on card __card__: __comment__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-createBoard": "created board __board__",
+ "act-createSwimlane": "created swimlane __swimlane__ to board __board__",
+ "act-createCard": "created card __card__ to list __list__ at swimlane __swimlane__ at board __board__",
+ "act-createCustomField": "created custom field __customField__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-createList": "added list __list__ to board __board__",
+ "act-addBoardMember": "added member __member__ to board __board__",
+ "act-archivedBoard": "Board __board__ moved to Archive",
+ "act-archivedCard": "Card __card__ at list __list__ at swimlane __swimlane__ at board __board__ moved to Archive",
+ "act-archivedList": "List __list__ at swimlane __swimlane__ at board __board__ moved to Archive",
+ "act-archivedSwimlane": "Swimlane __swimlane__ at board __board__ moved to Archive",
+ "act-importBoard": "imported board __board__",
+ "act-importCard": "imported card __card__ to list __list__ at swimlane __swimlane__ at board __board__",
+ "act-importList": "imported list __list__ to swimlane __swimlane__ at board __board__",
+ "act-joinMember": "added member __member__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-moveCard": "moved card __card__ at board __board__ from list __oldList__ at swimlane __oldSwimlane__ to list __list__ at swimlane __swimlane__",
+ "act-moveCardToOtherBoard": "moved card __card__ from list __oldList__ at swimlane __oldSwimlane__ at board __oldBoard__ to list __list__ at swimlane __swimlane__ at board __board__",
+ "act-removeBoardMember": "removed member __member__ from board __board__",
+ "act-restoredCard": "restored card __card__ to list __list__ at swimlane __swimlane__ at board __board__",
+ "act-unjoinMember": "removed member __member__ from card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
"act-withBoardTitle": "__board__",
"act-withCardTitle": "[__board__] __card__",
"actions": "Akcije",
@@ -47,14 +60,14 @@
"activity-unchecked-item": "unchecked %s in checklist %s of %s",
"activity-checklist-added": "lista je dodata u %s",
"activity-checklist-removed": "removed a checklist from %s",
- "activity-checklist-completed": "completed the checklist %s of %s",
+ "activity-checklist-completed": "completed checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
"activity-checklist-uncompleted": "uncompleted the checklist %s of %s",
"activity-checklist-item-added": "added checklist item to '%s' in %s",
"activity-checklist-item-removed": "removed a checklist item from '%s' in %s",
"add": "Dodaj",
"activity-checked-item-card": "checked %s in checklist %s",
"activity-unchecked-item-card": "unchecked %s in checklist %s",
- "activity-checklist-completed-card": "completed the checklist %s",
+ "activity-checklist-completed-card": "completed checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
"activity-checklist-uncompleted-card": "uncompleted the checklist %s",
"add-attachment": "Add Attachment",
"add-board": "Add Board",
@@ -92,6 +105,8 @@
"restore-board": "Restore Board",
"no-archived-boards": "No Boards in Archive.",
"archives": "Arhiviraj",
+ "template": "Template",
+ "templates": "Templates",
"assign-member": "Dodeli člana",
"attached": "Prikačeno",
"attachment": "Prikačeni dokument",
@@ -110,7 +125,7 @@
"boardChangeTitlePopup-title": "Preimenuj tablu",
"boardChangeVisibilityPopup-title": "Promeni Vidljivost",
"boardChangeWatchPopup-title": "Change Watch",
- "boardMenuPopup-title": "Meni table",
+ "boardMenuPopup-title": "Board Settings",
"boards": "Table",
"board-view": "Board View",
"board-view-cal": "Calendar",
@@ -143,6 +158,7 @@
"cardLabelsPopup-title": "Labels",
"cardMembersPopup-title": "Članovi",
"cardMorePopup-title": "More",
+ "cardTemplatePopup-title": "Create template",
"cards": "Cards",
"cards-count": "Cards",
"casSignIn": "Sign In with CAS",
@@ -204,7 +220,7 @@
"confirm-checklist-delete-dialog": "Are you sure you want to delete checklist?",
"copy-card-link-to-clipboard": "Copy card link to clipboard",
"linkCardPopup-title": "Link Card",
- "searchCardPopup-title": "Search Card",
+ "searchElementPopup-title": "Pretraga",
"copyCardPopup-title": "Copy Card",
"copyChecklistToManyCardsPopup-title": "Copy Checklist Template to Many Cards",
"copyChecklistToManyCardsPopup-instructions": "Destination Card Titles and Descriptions in this JSON format",
@@ -453,6 +469,9 @@
"welcome-swimlane": "Milestone 1",
"welcome-list1": "Osnove",
"welcome-list2": "Napredno",
+ "card-templates-swimlane": "Card Templates",
+ "list-templates-swimlane": "List Templates",
+ "board-templates-swimlane": "Board Templates",
"what-to-do": "Šta želiš da uradiš ?",
"wipLimitErrorPopup-title": "Invalid WIP Limit",
"wipLimitErrorPopup-dialog-pt1": "The number of tasks in this list is higher than the WIP limit you've defined.",
@@ -552,6 +571,8 @@
"activity-added-label-card": "added label '%s'",
"activity-removed-label-card": "removed label '%s'",
"activity-delete-attach-card": "deleted an attachment",
+ "activity-set-customfield": "set custom field '%s' to '%s' in %s",
+ "activity-unset-customfield": "unset custom field '%s' in %s",
"r-rule": "Rule",
"r-add-trigger": "Add trigger",
"r-add-action": "Add action",
diff --git a/i18n/sv.i18n.json b/i18n/sv.i18n.json
index c93862bb..bd9c3a50 100644
--- a/i18n/sv.i18n.json
+++ b/i18n/sv.i18n.json
@@ -1,28 +1,41 @@
{
"accept": "Acceptera",
"act-activity-notify": "Aktivitetsnotifikation",
- "act-addAttachment": "bifogade __attachment__ till __card__",
- "act-addSubtask": "lade till deluppgift __checklist__ till __card__",
- "act-addChecklist": "lade till checklist __checklist__ till __card__",
- "act-addChecklistItem": "lade till __checklistItem__ till checklistan __checklist__ on __card__",
- "act-addComment": "kommenterade __card__: __comment__",
- "act-createBoard": "skapade __board__",
- "act-createCard": "lade till __card__ to __list__",
- "act-createCustomField": "skapa anpassat fält __customField__",
- "act-createList": "lade till __list__ to __board__",
- "act-addBoardMember": "lade till __member__ till __board__",
- "act-archivedBoard": "__board__ flyttades till Arkiv",
- "act-archivedCard": "__card__ flyttades till Arkiv",
- "act-archivedList": "__list__ flyttades till Arkiv",
- "act-archivedSwimlane": "__swimlane__ flyttades till Arkiv",
- "act-importBoard": "importerade __board__",
- "act-importCard": "importerade __card__",
- "act-importList": "importerade __list__",
- "act-joinMember": "lade __member__ till __card__",
- "act-moveCard": "flyttade __card__ från __oldList__ till __list__",
- "act-removeBoardMember": "tog bort __member__ från __board__",
- "act-restoredCard": "återställde __card__ to __board__",
- "act-unjoinMember": "tog bort __member__ from __card__",
+ "act-addAttachment": "la till bifogad fil __attachment__ på kort __card__ i lista __list__ i simbana __swimlane__ på tavla __board__",
+ "act-deleteAttachment": "raderade bifogad fil __attachment__ från kort __card__ i lista __list__ i simbana __swimlane__ på tavla __board__",
+ "act-addSubtask": "la till underaktivitet __subtask__ på kort __card__ i lista __list__ i simbana __swimlane__ på tavla __board__",
+ "act-addLabel": "la till etikett __label__ på kort __card__ i lista __list__ i simbana __swimlane__ på tavla __board__",
+ "act-addedLabel": "la till etikett __label__ på kort __card__ i lista __list__ i simbana __swimlane__ på tavla __board__",
+ "act-removeLabel": "Tog bort etikett __label__ från kort __card__ i lista __list__ i simbana __swimlane__ på tavla __board__",
+ "act-removedLabel": "Tog bort etikett __label__ från kort __card__ i lista __list__ i simbana __swimlane__ på tavla __board__",
+ "act-addChecklist": "la till checklista __checklist__ på kort __card__ i lista __list__ i simbana __swimlane__ på tavla __board__",
+ "act-addChecklistItem": "la till checklistobjekt __checklistItem__ till checklista __checklist__ på kort __card__ i lista __list__ i simbana __swimlane__ på tavla __board__",
+ "act-removeChecklist": "tag bort checklista __checklist__ från kort __card__ i lista __list__ i simbana __swimlane__ på tavla __board__",
+ "act-removeChecklistItem": "tog bort checklistobjekt __checklistItem__ från __checklist__ på kort __card__ i lista __list__ i simbana __swimlane__ på tavla __board__",
+ "act-checkedItem": "bockade av __checklistItem__ från checklista __checklist__ på kort __card__ i lista __list__ i simbana __swimlane__ på tavla __board__",
+ "act-uncheckedItem": "avmarkerade __checklistItem__ från checklista __checklist__ på kort __card__ i lista __list__ i simbana __swimlane__ på tavla __board__",
+ "act-completeChecklist": "slutförde checklista __checklist__ i kort __card__ i lista __list__ i simbana __swimlane__ på tavla __board__",
+ "act-uncompleteChecklist": "ofullbordade checklista __checklist__ på kort __card__ i lista __list__ i simbana __swimlane__ på tavla __board__",
+ "act-addComment": "kommenterade på kort __card__: __comment__ i lista __list__ i simbana __swimlane__ på tavla __board__",
+ "act-createBoard": "skapade tavla __board__",
+ "act-createSwimlane": "created swimlane __swimlane__ to board __board__",
+ "act-createCard": "skapade kort __card__ i lista __list__ i simbana __swimlane__ på tavla __board__",
+ "act-createCustomField": "skapade anpassat fält __customField__ på kort __card__ i lista __list__ i simbana __swimlane__ på tavla __board__",
+ "act-createList": "la till lista __list__ på tavla __board__",
+ "act-addBoardMember": "la till medlem __member__ på tavla __board__",
+ "act-archivedBoard": "Tavla__board__ flyttad till arkivet",
+ "act-archivedCard": "Kort __card__ i lista __list__ i simbana __swimlane__ på tavla __board__ flyttad till arkivet",
+ "act-archivedList": "Lista __list__ i simbana __swimlane__ på tavla __board__ flyttad till arkivet",
+ "act-archivedSwimlane": "Simbana __swimlane__ på tavla __board__ flyttad till arkivet",
+ "act-importBoard": "importerade board __board__",
+ "act-importCard": "importerade kort __card__ i lista __list__ i simbana __swimlane__ på tavla __board__",
+ "act-importList": "importerade lista __list__ i simbana __swimlane__ på tavla __board__",
+ "act-joinMember": "la till medlem __member__ på kort __card__ i lista __list__ i simbana __swimlane__ på tavla __board__",
+ "act-moveCard": "moved card __card__ at board __board__ from list __oldList__ at swimlane __oldSwimlane__ to list __list__ at swimlane __swimlane__",
+ "act-moveCardToOtherBoard": "flyttade kort __card__ från lista __oldList__ i simbana __oldSwimlane__ på tavla __oldBoard__ till lista __list__ i simbana __swimlane__ på tavla __board__",
+ "act-removeBoardMember": "borttagen medlem __member__  från tavla __board__",
+ "act-restoredCard": "återställde kort __card__ till lista __lis__ i simbana __swimlane__ på tavla __board__",
+ "act-unjoinMember": "tog bort medlem __member__ från kort __card__ i lista __list__ i simbana __swimlane__ på tavla __board__",
"act-withBoardTitle": "_tavla_",
"act-withCardTitle": "[__board__] __card__",
"actions": "Åtgärder",
@@ -47,14 +60,14 @@
"activity-unchecked-item": "okryssad %s i checklistan %s av %s",
"activity-checklist-added": "lade kontrollista till %s",
"activity-checklist-removed": "tog bort en checklista från %s",
- "activity-checklist-completed": "slutfört checklistan %s av %s",
+ "activity-checklist-completed": "slutförde checklista __checklist__ i kort __card__ i lista __list__ i simbana __swimlane__ på tavla __board__",
"activity-checklist-uncompleted": "inte slutfört checklistan %s av %s",
"activity-checklist-item-added": "lade checklista objekt till '%s' i %s",
"activity-checklist-item-removed": "tog bort en checklista objekt från \"%s\" i %s",
"add": "Lägg till",
"activity-checked-item-card": "kryssad %s i checklistan %s",
"activity-unchecked-item-card": "okryssad %s i checklistan %s",
- "activity-checklist-completed-card": "slutfört checklistan %s",
+ "activity-checklist-completed-card": "slutförde checklista __checklist__ i kort __card__ i lista __list__ i simbana __swimlane__ på tavla __board__",
"activity-checklist-uncompleted-card": "icke slutfört checklistan %s",
"add-attachment": "Lägg till bilaga",
"add-board": "Lägg till anslagstavla",
@@ -78,20 +91,22 @@
"and-n-other-card": "Och __count__ annat kort",
"and-n-other-card_plural": "Och __count__ andra kort",
"apply": "Tillämpa",
- "app-is-offline": "Loading, please wait. Refreshing the page will cause data loss. If loading does not work, please check that server has not stopped.",
+ "app-is-offline": "Läser in, vänligen vänta. Uppdatering av sidan kommer att orsaka förlust av data. Om inläsningen inte fungerar, kontrollera att servern inte har stoppats.",
"archive": "Flytta till Arkiv",
"archive-all": "Flytta alla till Arkiv",
"archive-board": "Flytta Anslagstavla till Arkiv",
"archive-card": "Flytta Kort till Arkiv",
"archive-list": "Flytta Lista till Arkiv",
- "archive-swimlane": "Move Swimlane to Archive",
+ "archive-swimlane": "Flytta simbanan till arkivet",
"archive-selection": "Flytta markerade till Arkiv",
- "archiveBoardPopup-title": "Move Board to Archive?",
+ "archiveBoardPopup-title": "Flytta Anslagstavla till Arkiv?",
"archived-items": "Arkiv",
- "archived-boards": "Boards in Archive",
+ "archived-boards": "Anslagstavlor i Arkiv",
"restore-board": "Återställ anslagstavla",
- "no-archived-boards": "No Boards in Archive.",
+ "no-archived-boards": "Inga anslagstavlor i Arkiv.",
"archives": "Arkiv",
+ "template": "Mall",
+ "templates": "Mallar",
"assign-member": "Tilldela medlem",
"attached": "bifogad",
"attachment": "Bilaga",
@@ -110,7 +125,7 @@
"boardChangeTitlePopup-title": "Byt namn på anslagstavla",
"boardChangeVisibilityPopup-title": "Ändra synlighet",
"boardChangeWatchPopup-title": "Ändra bevaka",
- "boardMenuPopup-title": "Anslagstavla meny",
+ "boardMenuPopup-title": "Tavlans inställningar",
"boards": "Anslagstavlor",
"board-view": "Anslagstavelsvy",
"board-view-cal": "Kalender",
@@ -123,7 +138,7 @@
"card-comments-title": "Detta kort har %s kommentar.",
"card-delete-notice": "Ta bort är permanent. Du kommer att förlora alla åtgärder i samband med detta kort.",
"card-delete-pop": "Alla åtgärder kommer att tas bort från aktivitetsflöde och du kommer inte att kunna öppna kortet igen. Det går inte att ångra.",
- "card-delete-suggest-archive": "You can move a card to Archive to remove it from the board and preserve the activity.",
+ "card-delete-suggest-archive": "Du kan flytta ett kort för att Arkiv för att ta bort det från anslagstavlan och bevara aktiviteten.",
"card-due": "Förfaller",
"card-due-on": "Förfaller på",
"card-spent": "Spenderad tid",
@@ -143,6 +158,7 @@
"cardLabelsPopup-title": "Etiketter",
"cardMembersPopup-title": "Medlemmar",
"cardMorePopup-title": "Mera",
+ "cardTemplatePopup-title": "Skapa mall",
"cards": "Kort",
"cards-count": "Kort",
"casSignIn": "Logga in med CAS",
@@ -166,10 +182,10 @@
"clipboard": "Urklipp eller dra och släpp",
"close": "Stäng",
"close-board": "Stäng anslagstavla",
- "close-board-pop": "You will be able to restore the board by clicking the “Archive” button from the home header.",
+ "close-board-pop": "Du kommer att kunna återställa anslagstavlan genom att klicka på knappen \"Arkiv\" från hemrubriken.",
"color-black": "svart",
"color-blue": "blå",
- "color-crimson": "crimson",
+ "color-crimson": "mörkröd",
"color-darkgreen": "mörkgrön",
"color-gold": "guld",
"color-gray": "grå",
@@ -177,22 +193,22 @@
"color-indigo": "indigo",
"color-lime": "lime",
"color-magenta": "magenta",
- "color-mistyrose": "mistyrose",
- "color-navy": "navy",
+ "color-mistyrose": "ljusrosa",
+ "color-navy": "marinblå",
"color-orange": "orange",
- "color-paleturquoise": "paleturquoise",
- "color-peachpuff": "peachpuff",
+ "color-paleturquoise": "turkos",
+ "color-peachpuff": "ersika",
"color-pink": "rosa",
- "color-plum": "plum",
+ "color-plum": "lila",
"color-purple": "lila",
"color-red": "röd",
"color-saddlebrown": "sadelbrun",
"color-silver": "silver",
"color-sky": "himmel",
- "color-slateblue": "slateblue",
+ "color-slateblue": "skifferblå",
"color-white": "vit",
"color-yellow": "gul",
- "unset-color": "Unset",
+ "unset-color": "Urkoppla",
"comment": "Kommentera",
"comment-placeholder": "Skriv kommentar",
"comment-only": "Kommentera endast",
@@ -204,7 +220,7 @@
"confirm-checklist-delete-dialog": "Är du säker på att du vill radera checklista?",
"copy-card-link-to-clipboard": "Kopiera kortlänk till urklipp",
"linkCardPopup-title": "Länka kort",
- "searchCardPopup-title": "Sök kort",
+ "searchElementPopup-title": "Sök",
"copyCardPopup-title": "Kopiera kort",
"copyChecklistToManyCardsPopup-title": "Kopiera checklist-mallen till flera kort",
"copyChecklistToManyCardsPopup-instructions": "Destinationskorttitlar och beskrivningar i detta JSON-format",
@@ -299,19 +315,19 @@
"import-board": "importera anslagstavla",
"import-board-c": "Importera anslagstavla",
"import-board-title-trello": "Importera anslagstavla från Trello",
- "import-board-title-wekan": "Import board from previous export",
- "import-sandstorm-backup-warning": "Do not delete data you import from original exported board or Trello before checking does this grain close and open again, or do you get Board not found error, that means data loss.",
+ "import-board-title-wekan": "Importera anslagstavla från tidigare export",
+ "import-sandstorm-backup-warning": "Ta inte bort data som du importerar från exporterad original-tavla eller Trello innan du kontrollerar att det här spannet stänger och öppnas igen, eller får du felmeddelandet Tavla hittades inte, det vill säga dataförlust.",
"import-sandstorm-warning": "Importerad anslagstavla raderar all befintlig data på anslagstavla och ersätter den med importerat anslagstavla.",
"from-trello": "Från Trello",
"from-wekan": "Från tidigare export",
"import-board-instruction-trello": "I din Trello-anslagstavla, gå till 'Meny', sedan 'Mera', 'Skriv ut och exportera', 'Exportera JSON' och kopiera den resulterande text.",
- "import-board-instruction-wekan": "In your board, go to 'Menu', then 'Export board', and copy the text in the downloaded file.",
+ "import-board-instruction-wekan": "På din anslagstavla, gå till \"Meny\", sedan \"Exportera anslagstavla\" och kopiera texten i den hämtade filen.",
"import-board-instruction-about-errors": "Om du får fel vid import av anslagstavla, ibland importerar fortfarande fungerar, och styrelsen är på alla sidor för anslagstavlor.",
"import-json-placeholder": "Klistra in giltigt JSON data här",
"import-map-members": "Kartlägg medlemmar",
- "import-members-map": "Your imported board has some members. Please map the members you want to import to your users",
+ "import-members-map": "Din importerade anslagstavla har några medlemmar. Vänligen kartlägg medlemmarna du vill importera till dina användare",
"import-show-user-mapping": "Granska medlemskartläggning",
- "import-user-select": "Pick your existing user you want to use as this member",
+ "import-user-select": "Välj din befintliga användare du vill använda som den här medlemmen",
"importMapMembersAddPopup-title": "Välj medlem",
"info": "Version",
"initials": "Initialer ",
@@ -332,18 +348,18 @@
"leaveBoardPopup-title": "Lämna anslagstavla ?",
"link-card": "Länka till detta kort",
"list-archive-cards": "Flytta alla kort i den här listan till Arkiv",
- "list-archive-cards-pop": "This will remove all the cards in this list from the board. To view cards in Archive and bring them back to the board, click “Menu” > “Archive”.",
+ "list-archive-cards-pop": "Detta kommer att ta bort alla kort i denna lista från anslagstavlan. För att visa kort i Arkiv och få dem tillbaka till anslagstavlan, klicka på \"Meny\" > \"Arkiv\".",
"list-move-cards": "Flytta alla kort i denna lista",
"list-select-cards": "Välj alla kort i denna lista",
- "set-color-list": "Set Color",
+ "set-color-list": "Ange färg",
"listActionPopup-title": "Liståtgärder",
"swimlaneActionPopup-title": "Simbana-åtgärder",
- "swimlaneAddPopup-title": "Add a Swimlane below",
+ "swimlaneAddPopup-title": "Lägg till en simbana nedan",
"listImportCardPopup-title": "Importera ett Trello kort",
"listMorePopup-title": "Mera",
"link-list": "Länk till den här listan",
"list-delete-pop": "Alla åtgärder kommer att tas bort från aktivitetsmatningen och du kommer inte att kunna återställa listan. Det går inte att ångra.",
- "list-delete-suggest-archive": "You can move a list to Archive to remove it from the board and preserve the activity.",
+ "list-delete-suggest-archive": "Du kan flytta en lista till Arkiv för att ta bort den från anslagstavlan och bevara aktiviteten.",
"lists": "Listor",
"swimlanes": "Simbanor ",
"log-out": "Logga ut",
@@ -365,7 +381,7 @@
"name": "Namn",
"no-archived-cards": "Inga kort i Arkiv.",
"no-archived-lists": "Inga listor i Arkiv.",
- "no-archived-swimlanes": "No swimlanes in Archive.",
+ "no-archived-swimlanes": "Inga simbanor i arkivet.",
"no-results": "Inga reslutat",
"normal": "Normal",
"normal-desc": "Kan se och redigera kort. Kan inte ändra inställningar.",
@@ -453,6 +469,9 @@
"welcome-swimlane": "Milstolpe 1",
"welcome-list1": "Grunderna",
"welcome-list2": "Avancerad",
+ "card-templates-swimlane": "Kortmallar",
+ "list-templates-swimlane": "Listmalla",
+ "board-templates-swimlane": "Tavelmallar",
"what-to-do": "Vad vill du göra?",
"wipLimitErrorPopup-title": "Ogiltig WIP-gräns",
"wipLimitErrorPopup-dialog-pt1": "Antalet uppgifter i den här listan är högre än WIP-gränsen du har definierat.",
@@ -478,14 +497,14 @@
"send-smtp-test": "Skicka ett prov e-postmeddelande till dig själv",
"invitation-code": "Inbjudningskod",
"email-invite-register-subject": "__inviter__ skickade dig en inbjudan",
- "email-invite-register-text": "Dear __user__,\n\n__inviter__ invites you to kanban board for collaborations.\n\nPlease follow the link below:\n__url__\n\nAnd your invitation code is: __icode__\n\nThanks.",
- "email-smtp-test-subject": "SMTP Test Email",
+ "email-invite-register-text": "Kära__user__,\n\n__inviter__ bjuder in dig att samarbeta på kanban-tavlan.\n\nFölj länken nedan:\n__url__\n\nDin inbjudningskod är: __icode__\n\nTack!",
+ "email-smtp-test-subject": "SMTP test-email",
"email-smtp-test-text": "Du har skickat ett e-postmeddelande",
"error-invitation-code-not-exist": "Inbjudningskod finns inte",
"error-notAuthorized": "Du är inte behörig att se den här sidan.",
"outgoing-webhooks": "Utgående Webhookar",
"outgoingWebhooksPopup-title": "Utgående Webhookar",
- "boardCardTitlePopup-title": "Card Title Filter",
+ "boardCardTitlePopup-title": "Korttitelfiler",
"new-outgoing-webhook": "Ny utgående webhook",
"no-name": "(Okänd)",
"Node_version": "Nodversion",
@@ -537,23 +556,25 @@
"show-subtasks-field": "Kort kan ha deluppgifter",
"deposit-subtasks-board": "Insättnings deluppgifter på denna anslagstavla:",
"deposit-subtasks-list": "Landningslista för deluppgifter deponerade här:",
- "show-parent-in-minicard": "Show parent in minicard:",
+ "show-parent-in-minicard": "Visa förälder i minikort:",
"prefix-with-full-path": "Prefix med fullständig sökväg",
- "prefix-with-parent": "Prefix with parent",
+ "prefix-with-parent": "Prefix med förälder",
"subtext-with-full-path": "Undertext med fullständig sökväg",
- "subtext-with-parent": "Subtext with parent",
- "change-card-parent": "Change card's parent",
- "parent-card": "Parent card",
+ "subtext-with-parent": "Undertext med förälder",
+ "change-card-parent": "Ändra kortets förälder",
+ "parent-card": "Föräldrakort",
"source-board": "Källa för anslagstavla",
- "no-parent": "Don't show parent",
+ "no-parent": "Visa inte förälder",
"activity-added-label": "lade till etiketten '%s' till %s",
"activity-removed-label": "tog bort etiketten '%s' från %s",
"activity-delete-attach": "raderade en bilaga från %s",
"activity-added-label-card": "lade till etiketten \"%s\"",
"activity-removed-label-card": "tog bort etiketten \"%s\"",
"activity-delete-attach-card": "tog bort en bilaga",
+ "activity-set-customfield": "ställ in anpassat fält '%s' till '%s' i %s",
+ "activity-unset-customfield": "Koppla bort anpassat fält '%s' i %s",
"r-rule": "Regel",
- "r-add-trigger": "Add trigger",
+ "r-add-trigger": "Lägg till utlösare",
"r-add-action": "Lägg till åtgärd",
"r-board-rules": "Regler för anslagstavla",
"r-add-rule": "Lägg till regel",
@@ -568,7 +589,7 @@
"r-removed-from": "Borttagen från",
"r-the-board": "anslagstavlan",
"r-list": "lista",
- "set-filter": "Set Filter",
+ "set-filter": "Ställ in filter",
"r-moved-to": "Flyttad till",
"r-moved-from": "Flyttad från",
"r-archived": "Flyttad till Arkiv",
@@ -576,23 +597,23 @@
"r-a-card": "ett kort",
"r-when-a-label-is": "När en etikett är",
"r-when-the-label-is": "När etiketten är",
- "r-list-name": "list name",
+ "r-list-name": "listnamn",
"r-when-a-member": "När en medlem är",
"r-when-the-member": "När medlemmen",
"r-name": "namn",
- "r-when-a-attach": "When an attachment",
- "r-when-a-checklist": "When a checklist is",
- "r-when-the-checklist": "When the checklist",
+ "r-when-a-attach": "När en bilaga",
+ "r-when-a-checklist": "När en checklista är",
+ "r-when-the-checklist": "När checklistan",
"r-completed": "Avslutad",
- "r-made-incomplete": "Made incomplete",
- "r-when-a-item": "When a checklist item is",
- "r-when-the-item": "When the checklist item",
+ "r-made-incomplete": "Gjord ofullständig",
+ "r-when-a-item": "När ett checklistobjekt ä",
+ "r-when-the-item": "När checklistans objekt",
"r-checked": "Kryssad",
"r-unchecked": "Okryssad",
"r-move-card-to": "Flytta kort till",
- "r-top-of": "Top of",
- "r-bottom-of": "Bottom of",
- "r-its-list": "its list",
+ "r-top-of": "Överst på",
+ "r-bottom-of": "Nederst av",
+ "r-its-list": "sin lista",
"r-archive": "Flytta till Arkiv",
"r-unarchive": "Återställ från Arkiv",
"r-card": "kort",
@@ -600,24 +621,24 @@
"r-remove": "Ta bort",
"r-label": "etikett",
"r-member": "medlem",
- "r-remove-all": "Remove all members from the card",
- "r-set-color": "Set color to",
+ "r-remove-all": "Ta bort alla medlemmar från kortet",
+ "r-set-color": "Ställ in färg till",
"r-checklist": "checklista",
- "r-check-all": "Check all",
- "r-uncheck-all": "Uncheck all",
+ "r-check-all": "Kryssa alla",
+ "r-uncheck-all": "Avkryssa alla",
"r-items-check": "objekt på checklistan",
- "r-check": "Check",
- "r-uncheck": "Uncheck",
+ "r-check": "Kryssa",
+ "r-uncheck": "Avkryssa",
"r-item": "objekt",
- "r-of-checklist": "of checklist",
+ "r-of-checklist": "av checklistan",
"r-send-email": "Skicka ett e-postmeddelande",
"r-to": "till",
"r-subject": "änme",
"r-rule-details": "Regeldetaljer",
- "r-d-move-to-top-gen": "Move card to top of its list",
- "r-d-move-to-top-spec": "Move card to top of list",
- "r-d-move-to-bottom-gen": "Move card to bottom of its list",
- "r-d-move-to-bottom-spec": "Move card to bottom of list",
+ "r-d-move-to-top-gen": "Flytta kort till toppen av sin lista",
+ "r-d-move-to-top-spec": "Flytta kort till toppen av listan",
+ "r-d-move-to-bottom-gen": "Flytta kort till botten av sin lista",
+ "r-d-move-to-bottom-spec": "Flytta kort till botten av listan",
"r-d-send-email": "Skicka e-post",
"r-d-send-email-to": "till",
"r-d-send-email-subject": "ämne",
@@ -626,28 +647,28 @@
"r-d-unarchive": "Återställ kortet från Arkiv",
"r-d-add-label": "Lägg till etikett",
"r-d-remove-label": "Ta bort etikett",
- "r-create-card": "Create new card",
- "r-in-list": "in list",
- "r-in-swimlane": "in swimlane",
+ "r-create-card": "Skapa nytt kort",
+ "r-in-list": "i listan",
+ "r-in-swimlane": "i simbana",
"r-d-add-member": "Lägg till medlem",
"r-d-remove-member": "Ta bort medlem",
"r-d-remove-all-member": "Ta bort alla medlemmar",
- "r-d-check-all": "Check all items of a list",
- "r-d-uncheck-all": "Uncheck all items of a list",
- "r-d-check-one": "Check item",
- "r-d-uncheck-one": "Uncheck item",
- "r-d-check-of-list": "of checklist",
+ "r-d-check-all": "Kryssa alla objekt i en lista",
+ "r-d-uncheck-all": "Avkryssa alla objekt i en lista",
+ "r-d-check-one": "Kryssa objekt",
+ "r-d-uncheck-one": "Avkryssa objekt",
+ "r-d-check-of-list": "av checklistan",
"r-d-add-checklist": "Lägg till checklista",
"r-d-remove-checklist": "Ta bort checklista",
"r-by": "av",
"r-add-checklist": "Lägg till checklista",
- "r-with-items": "with items",
- "r-items-list": "item1,item2,item3",
- "r-add-swimlane": "Add swimlane",
- "r-swimlane-name": "swimlane name",
- "r-board-note": "Note: leave a field empty to match every possible value.",
- "r-checklist-note": "Note: checklist's items have to be written as comma separated values.",
- "r-when-a-card-is-moved": "When a card is moved to another list",
+ "r-with-items": "med objekt",
+ "r-items-list": "objekt1,objekt2,objekt3",
+ "r-add-swimlane": "Lägg till simbana",
+ "r-swimlane-name": "Simbanans namn",
+ "r-board-note": "Notera: lämna ett fält tomt för att matcha alla möjliga värden.",
+ "r-checklist-note": "Notera: Objekt i en checklista måste skrivas som kommaseparerade objekt",
+ "r-when-a-card-is-moved": "När ett kort flyttas till en annan lista",
"ldap": "LDAP",
"oauth2": "OAuth2",
"cas": "CAS",
@@ -656,10 +677,10 @@
"custom-product-name": "Anpassat produktnamn",
"layout": "Layout",
"hide-logo": "Dölj logotypen",
- "add-custom-html-after-body-start": "Add Custom HTML after <body> start",
- "add-custom-html-before-body-end": "Add Custom HTML before </body> end",
+ "add-custom-html-after-body-start": "Lägg till anpassad HTML efter <body> start",
+ "add-custom-html-before-body-end": "Lägg till anpassad HTML före </body> slut",
"error-undefined": "Något gick fel",
"error-ldap-login": "Ett fel uppstod när du försökte logga in",
- "display-authentication-method": "Display Authentication Method",
- "default-authentication-method": "Default Authentication Method"
+ "display-authentication-method": "Visa autentiseringsmetod",
+ "default-authentication-method": "Standard autentiseringsmetod"
} \ No newline at end of file
diff --git a/i18n/sw.i18n.json b/i18n/sw.i18n.json
index 1ffffddb..b82240fa 100644
--- a/i18n/sw.i18n.json
+++ b/i18n/sw.i18n.json
@@ -1,28 +1,41 @@
{
"accept": "Kubali",
"act-activity-notify": "Activity Notification",
- "act-addAttachment": "attached __attachment__ to __card__",
- "act-addSubtask": "added subtask __checklist__ to __card__",
- "act-addChecklist": "added checklist __checklist__ to __card__",
- "act-addChecklistItem": "added __checklistItem__ to checklist __checklist__ on __card__",
- "act-addComment": "commented on __card__: __comment__",
- "act-createBoard": "created __board__",
- "act-createCard": "added __card__ to __list__",
- "act-createCustomField": "created custom field __customField__",
- "act-createList": "added __list__ to __board__",
- "act-addBoardMember": "added __member__ to __board__",
- "act-archivedBoard": "__board__ moved to Archive",
- "act-archivedCard": "__card__ moved to Archive",
- "act-archivedList": "__list__ moved to Archive",
- "act-archivedSwimlane": "__swimlane__ moved to Archive",
- "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-addAttachment": "added attachment __attachment__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-deleteAttachment": "deleted attachment __attachment__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-addSubtask": "added subtask __subtask__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-addLabel": "Added label __label__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-addedLabel": "Added label __label__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-removeLabel": "Removed label __label__ from card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-removedLabel": "Removed label __label__ from card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-addChecklist": "added checklist __checklist__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-addChecklistItem": "added checklist item __checklistItem__ to checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-removeChecklist": "removed checklist __checklist__ from card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-removeChecklistItem": "removed checklist item __checklistItem__ from checklist __checkList__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-checkedItem": "checked __checklistItem__ of checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-uncheckedItem": "unchecked __checklistItem__ of checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-completeChecklist": "completed checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-uncompleteChecklist": "uncompleted checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-addComment": "commented on card __card__: __comment__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-createBoard": "created board __board__",
+ "act-createSwimlane": "created swimlane __swimlane__ to board __board__",
+ "act-createCard": "created card __card__ to list __list__ at swimlane __swimlane__ at board __board__",
+ "act-createCustomField": "created custom field __customField__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-createList": "added list __list__ to board __board__",
+ "act-addBoardMember": "added member __member__ to board __board__",
+ "act-archivedBoard": "Board __board__ moved to Archive",
+ "act-archivedCard": "Card __card__ at list __list__ at swimlane __swimlane__ at board __board__ moved to Archive",
+ "act-archivedList": "List __list__ at swimlane __swimlane__ at board __board__ moved to Archive",
+ "act-archivedSwimlane": "Swimlane __swimlane__ at board __board__ moved to Archive",
+ "act-importBoard": "imported board __board__",
+ "act-importCard": "imported card __card__ to list __list__ at swimlane __swimlane__ at board __board__",
+ "act-importList": "imported list __list__ to swimlane __swimlane__ at board __board__",
+ "act-joinMember": "added member __member__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-moveCard": "moved card __card__ at board __board__ from list __oldList__ at swimlane __oldSwimlane__ to list __list__ at swimlane __swimlane__",
+ "act-moveCardToOtherBoard": "moved card __card__ from list __oldList__ at swimlane __oldSwimlane__ at board __oldBoard__ to list __list__ at swimlane __swimlane__ at board __board__",
+ "act-removeBoardMember": "removed member __member__ from board __board__",
+ "act-restoredCard": "restored card __card__ to list __list__ at swimlane __swimlane__ at board __board__",
+ "act-unjoinMember": "removed member __member__ from card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
"act-withBoardTitle": "__board__",
"act-withCardTitle": "[__board__] __card__",
"actions": "Actions",
@@ -47,14 +60,14 @@
"activity-unchecked-item": "unchecked %s in checklist %s of %s",
"activity-checklist-added": "added checklist to %s",
"activity-checklist-removed": "removed a checklist from %s",
- "activity-checklist-completed": "completed the checklist %s of %s",
+ "activity-checklist-completed": "completed checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
"activity-checklist-uncompleted": "uncompleted the checklist %s of %s",
"activity-checklist-item-added": "added checklist item to '%s' in %s",
"activity-checklist-item-removed": "removed a checklist item from '%s' in %s",
"add": "Add",
"activity-checked-item-card": "checked %s in checklist %s",
"activity-unchecked-item-card": "unchecked %s in checklist %s",
- "activity-checklist-completed-card": "completed the checklist %s",
+ "activity-checklist-completed-card": "completed checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
"activity-checklist-uncompleted-card": "uncompleted the checklist %s",
"add-attachment": "Add Attachment",
"add-board": "Add Board",
@@ -92,6 +105,8 @@
"restore-board": "Restore Board",
"no-archived-boards": "No Boards in Archive.",
"archives": "Archive",
+ "template": "Template",
+ "templates": "Templates",
"assign-member": "Assign member",
"attached": "attached",
"attachment": "Attachment",
@@ -110,7 +125,7 @@
"boardChangeTitlePopup-title": "Rename Board",
"boardChangeVisibilityPopup-title": "Change Visibility",
"boardChangeWatchPopup-title": "Change Watch",
- "boardMenuPopup-title": "Board Menu",
+ "boardMenuPopup-title": "Board Settings",
"boards": "Boards",
"board-view": "Board View",
"board-view-cal": "Calendar",
@@ -143,6 +158,7 @@
"cardLabelsPopup-title": "Labels",
"cardMembersPopup-title": "Members",
"cardMorePopup-title": "More",
+ "cardTemplatePopup-title": "Create template",
"cards": "Cards",
"cards-count": "Cards",
"casSignIn": "Sign In with CAS",
@@ -204,7 +220,7 @@
"confirm-checklist-delete-dialog": "Are you sure you want to delete checklist?",
"copy-card-link-to-clipboard": "Copy card link to clipboard",
"linkCardPopup-title": "Link Card",
- "searchCardPopup-title": "Search Card",
+ "searchElementPopup-title": "Search",
"copyCardPopup-title": "Copy Card",
"copyChecklistToManyCardsPopup-title": "Copy Checklist Template to Many Cards",
"copyChecklistToManyCardsPopup-instructions": "Destination Card Titles and Descriptions in this JSON format",
@@ -453,6 +469,9 @@
"welcome-swimlane": "Milestone 1",
"welcome-list1": "Basics",
"welcome-list2": "Advanced",
+ "card-templates-swimlane": "Card Templates",
+ "list-templates-swimlane": "List Templates",
+ "board-templates-swimlane": "Board Templates",
"what-to-do": "What do you want to do?",
"wipLimitErrorPopup-title": "Invalid WIP Limit",
"wipLimitErrorPopup-dialog-pt1": "The number of tasks in this list is higher than the WIP limit you've defined.",
@@ -552,6 +571,8 @@
"activity-added-label-card": "added label '%s'",
"activity-removed-label-card": "removed label '%s'",
"activity-delete-attach-card": "deleted an attachment",
+ "activity-set-customfield": "set custom field '%s' to '%s' in %s",
+ "activity-unset-customfield": "unset custom field '%s' in %s",
"r-rule": "Rule",
"r-add-trigger": "Add trigger",
"r-add-action": "Add action",
diff --git a/i18n/ta.i18n.json b/i18n/ta.i18n.json
index ab803752..9473d194 100644
--- a/i18n/ta.i18n.json
+++ b/i18n/ta.i18n.json
@@ -1,28 +1,41 @@
{
- "accept": "Accept",
+ "accept": "ஏற்றுக்கொள்",
"act-activity-notify": "Activity Notification",
- "act-addAttachment": "attached __attachment__ to __card__",
- "act-addSubtask": "added subtask __checklist__ to __card__",
- "act-addChecklist": "added checklist __checklist__ to __card__",
- "act-addChecklistItem": "added __checklistItem__ to checklist __checklist__ on __card__",
- "act-addComment": "commented on __card__: __comment__",
- "act-createBoard": "created __board__",
- "act-createCard": "added __card__ to __list__",
- "act-createCustomField": "created custom field __customField__",
- "act-createList": "added __list__ to __board__",
- "act-addBoardMember": "added __member__ to __board__",
- "act-archivedBoard": "__board__ moved to Archive",
- "act-archivedCard": "__card__ moved to Archive",
- "act-archivedList": "__list__ moved to Archive",
- "act-archivedSwimlane": "__swimlane__ moved to Archive",
- "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-addAttachment": "added attachment __attachment__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-deleteAttachment": "deleted attachment __attachment__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-addSubtask": "added subtask __subtask__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-addLabel": "Added label __label__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-addedLabel": "Added label __label__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-removeLabel": "Removed label __label__ from card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-removedLabel": "Removed label __label__ from card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-addChecklist": "added checklist __checklist__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-addChecklistItem": "added checklist item __checklistItem__ to checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-removeChecklist": "removed checklist __checklist__ from card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-removeChecklistItem": "removed checklist item __checklistItem__ from checklist __checkList__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-checkedItem": "checked __checklistItem__ of checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-uncheckedItem": "unchecked __checklistItem__ of checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-completeChecklist": "completed checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-uncompleteChecklist": "uncompleted checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-addComment": "commented on card __card__: __comment__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-createBoard": "created board __board__",
+ "act-createSwimlane": "created swimlane __swimlane__ to board __board__",
+ "act-createCard": "created card __card__ to list __list__ at swimlane __swimlane__ at board __board__",
+ "act-createCustomField": "created custom field __customField__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-createList": "added list __list__ to board __board__",
+ "act-addBoardMember": "added member __member__ to board __board__",
+ "act-archivedBoard": "Board __board__ moved to Archive",
+ "act-archivedCard": "Card __card__ at list __list__ at swimlane __swimlane__ at board __board__ moved to Archive",
+ "act-archivedList": "List __list__ at swimlane __swimlane__ at board __board__ moved to Archive",
+ "act-archivedSwimlane": "Swimlane __swimlane__ at board __board__ moved to Archive",
+ "act-importBoard": "imported board __board__",
+ "act-importCard": "imported card __card__ to list __list__ at swimlane __swimlane__ at board __board__",
+ "act-importList": "imported list __list__ to swimlane __swimlane__ at board __board__",
+ "act-joinMember": "added member __member__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-moveCard": "moved card __card__ at board __board__ from list __oldList__ at swimlane __oldSwimlane__ to list __list__ at swimlane __swimlane__",
+ "act-moveCardToOtherBoard": "moved card __card__ from list __oldList__ at swimlane __oldSwimlane__ at board __oldBoard__ to list __list__ at swimlane __swimlane__ at board __board__",
+ "act-removeBoardMember": "removed member __member__ from board __board__",
+ "act-restoredCard": "restored card __card__ to list __list__ at swimlane __swimlane__ at board __board__",
+ "act-unjoinMember": "removed member __member__ from card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
"act-withBoardTitle": "__board__",
"act-withCardTitle": "[__board__] __card__",
"actions": "Actions",
@@ -31,30 +44,30 @@
"activity-added": "added %s to %s",
"activity-archived": "%s moved to Archive",
"activity-attached": "attached %s to %s",
- "activity-created": "created %s",
+ "activity-created": "உருவாக்கப்பட்டது ",
"activity-customfield-created": "created custom field %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-joined": "சேர்ந்தது ",
"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-unjoined": "பிரிக்கப்பட்டது ",
"activity-subtask-added": "added subtask to %s",
"activity-checked-item": "checked %s in checklist %s of %s",
"activity-unchecked-item": "unchecked %s in checklist %s of %s",
"activity-checklist-added": "added checklist to %s",
"activity-checklist-removed": "removed a checklist from %s",
- "activity-checklist-completed": "completed the checklist %s of %s",
+ "activity-checklist-completed": "completed checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
"activity-checklist-uncompleted": "uncompleted the checklist %s of %s",
"activity-checklist-item-added": "added checklist item to '%s' in %s",
"activity-checklist-item-removed": "removed a checklist item from '%s' in %s",
- "add": "Add",
+ "add": "சேர் ",
"activity-checked-item-card": "checked %s in checklist %s",
"activity-unchecked-item-card": "unchecked %s in checklist %s",
- "activity-checklist-completed-card": "completed the checklist %s",
+ "activity-checklist-completed-card": "completed checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
"activity-checklist-uncompleted-card": "uncompleted the checklist %s",
"add-attachment": "Add Attachment",
"add-board": "Add Board",
@@ -92,16 +105,18 @@
"restore-board": "Restore Board",
"no-archived-boards": "No Boards in Archive.",
"archives": "Archive",
+ "template": "Template",
+ "templates": "Templates",
"assign-member": "Assign member",
"attached": "attached",
- "attachment": "Attachment",
+ "attachment": "இணைப்பு ",
"attachment-delete-pop": "Deleting an attachment is permanent. There is no undo.",
"attachmentDeletePopup-title": "Delete Attachment?",
- "attachments": "Attachments",
+ "attachments": "இணைப்புகள் ",
"auto-watch": "Automatically watch boards when they are created",
"avatar-too-big": "The avatar is too large (70KB max)",
- "back": "Back",
- "board-change-color": "Change color",
+ "back": "பின்செல் ",
+ "board-change-color": "நிறம் மாற்று ",
"board-nb-stars": "%s stars",
"board-not-found": "Board not found",
"board-private-info": "This board will be <strong>private</strong>.",
@@ -110,10 +125,10 @@
"boardChangeTitlePopup-title": "Rename Board",
"boardChangeVisibilityPopup-title": "Change Visibility",
"boardChangeWatchPopup-title": "Change Watch",
- "boardMenuPopup-title": "Board Menu",
+ "boardMenuPopup-title": "Board Settings",
"boards": "Boards",
"board-view": "Board View",
- "board-view-cal": "Calendar",
+ "board-view-cal": "நாள்கட்டி ",
"board-view-swimlanes": "Swimlanes",
"board-view-lists": "Lists",
"bucket-example": "Like “Bucket List” for example",
@@ -142,7 +157,8 @@
"cardDetailsActionsPopup-title": "Card Actions",
"cardLabelsPopup-title": "Labels",
"cardMembersPopup-title": "Members",
- "cardMorePopup-title": "More",
+ "cardMorePopup-title": "மேலும் ",
+ "cardTemplatePopup-title": "Create template",
"cards": "Cards",
"cards-count": "Cards",
"casSignIn": "Sign In with CAS",
@@ -151,12 +167,12 @@
"cardType-linkedBoard": "Linked Board",
"change": "Change",
"change-avatar": "Change Avatar",
- "change-password": "Change Password",
+ "change-password": "கடவுச்சொல்லை மாற்று ",
"change-permissions": "Change permissions",
"change-settings": "Change Settings",
"changeAvatarPopup-title": "Change Avatar",
"changeLanguagePopup-title": "Change Language",
- "changePasswordPopup-title": "Change Password",
+ "changePasswordPopup-title": "கடவுச்சொல்லை மாற்றுக ",
"changePermissionsPopup-title": "Change Permissions",
"changeSettingsPopup-title": "Change Settings",
"subtasks": "Subtasks",
@@ -170,46 +186,46 @@
"color-black": "black",
"color-blue": "blue",
"color-crimson": "crimson",
- "color-darkgreen": "darkgreen",
- "color-gold": "gold",
+ "color-darkgreen": "அடர் பச்சை ",
+ "color-gold": "தங்கம் ",
"color-gray": "gray",
- "color-green": "green",
+ "color-green": "பச்சை ",
"color-indigo": "indigo",
- "color-lime": "lime",
+ "color-lime": "வெளிர் பச்சை ",
"color-magenta": "magenta",
"color-mistyrose": "mistyrose",
"color-navy": "navy",
- "color-orange": "orange",
+ "color-orange": "ஆரஞ்சு ",
"color-paleturquoise": "paleturquoise",
"color-peachpuff": "peachpuff",
"color-pink": "pink",
"color-plum": "plum",
"color-purple": "purple",
- "color-red": "red",
+ "color-red": "சிகப்பு ",
"color-saddlebrown": "saddlebrown",
- "color-silver": "silver",
- "color-sky": "sky",
+ "color-silver": "வெள்ளி ",
+ "color-sky": "வாணம் ",
"color-slateblue": "slateblue",
- "color-white": "white",
- "color-yellow": "yellow",
+ "color-white": "வெள்ளை ",
+ "color-yellow": "மஞ்சள் ",
"unset-color": "Unset",
- "comment": "Comment",
+ "comment": "கருத்து ",
"comment-placeholder": "Write Comment",
- "comment-only": "Comment only",
+ "comment-only": "கருத்து மட்டும் ",
"comment-only-desc": "Can comment on cards only.",
- "no-comments": "No comments",
+ "no-comments": "கருத்து இல்லை ",
"no-comments-desc": "Can not see comments and activities.",
- "computer": "Computer",
+ "computer": "கணினி ",
"confirm-subtask-delete-dialog": "Are you sure you want to delete subtask?",
"confirm-checklist-delete-dialog": "Are you sure you want to delete checklist?",
"copy-card-link-to-clipboard": "Copy card link to clipboard",
"linkCardPopup-title": "Link Card",
- "searchCardPopup-title": "Search Card",
+ "searchElementPopup-title": "தேடு ",
"copyCardPopup-title": "Copy Card",
"copyChecklistToManyCardsPopup-title": "Copy Checklist Template to Many Cards",
"copyChecklistToManyCardsPopup-instructions": "Destination Card Titles and Descriptions in this JSON format",
"copyChecklistToManyCardsPopup-format": "[ {\"title\": \"First card title\", \"description\":\"First card description\"}, {\"title\":\"Second card title\",\"description\":\"Second card description\"},{\"title\":\"Last card title\",\"description\":\"Last card description\"} ]",
- "create": "Create",
+ "create": "உருவாக்கு ",
"createBoardPopup-title": "Create Board",
"chooseBoardSourcePopup-title": "Import board",
"createLabelPopup-title": "Create Label",
@@ -218,16 +234,16 @@
"current": "current",
"custom-field-delete-pop": "There is no undo. This will remove this custom field from all cards and destroy its history.",
"custom-field-checkbox": "Checkbox",
- "custom-field-date": "Date",
+ "custom-field-date": "நாள் ",
"custom-field-dropdown": "Dropdown List",
"custom-field-dropdown-none": "(none)",
"custom-field-dropdown-options": "List Options",
"custom-field-dropdown-options-placeholder": "Press enter to add more options",
"custom-field-dropdown-unknown": "(unknown)",
- "custom-field-number": "Number",
+ "custom-field-number": "எண் ",
"custom-field-text": "Text",
"custom-fields": "Custom Fields",
- "date": "Date",
+ "date": "நாள் ",
"decline": "Decline",
"default-avatar": "Default avatar",
"delete": "Delete",
@@ -238,8 +254,8 @@
"disambiguateMultiMemberPopup-title": "Disambiguate Member Action",
"discard": "Discard",
"done": "Done",
- "download": "Download",
- "edit": "Edit",
+ "download": "பதிவிறக்கம் ",
+ "edit": "திருத்து ",
"edit-avatar": "Change Avatar",
"edit-profile": "Edit Profile",
"edit-wip-limit": "Edit WIP Limit",
@@ -251,7 +267,7 @@
"editLabelPopup-title": "Change Label",
"editNotificationPopup-title": "Edit Notification",
"editProfilePopup-title": "Edit Profile",
- "email": "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",
@@ -289,20 +305,20 @@
"filter-to-selection": "Filter to selection",
"advanced-filter-label": "Advanced Filter",
"advanced-filter-description": "Advanced Filter allows to write a string containing following operators: == != <= >= && || ( ) A space is used as a separator between the Operators. You can filter for all Custom Fields by typing their names and values. For Example: Field1 == Value1. Note: If fields or values contains spaces, you need to encapsulate them into single quotes. For Example: 'Field 1' == 'Value 1'. For single control characters (' \\/) to be skipped, you can use \\. For example: Field1 == I\\'m. Also you can combine multiple conditions. For Example: F1 == V1 || F1 == V2. Normally all operators are interpreted from left to right. You can change the order by placing brackets. For Example: F1 == V1 && ( F2 == V2 || F2 == V3 ). Also you can search text fields using regex: F1 == /Tes.*/i",
- "fullname": "Full Name",
+ "fullname": "முழு பெயர் ",
"header-logo-title": "Go back to your boards page.",
"hide-system-messages": "Hide system messages",
"headerBarCreateBoardPopup-title": "Create Board",
- "home": "Home",
- "import": "Import",
- "link": "Link",
+ "home": "தொடக்கம் ",
+ "import": "பதிவேற்றம் ",
+ "link": "இணை ",
"import-board": "import board",
"import-board-c": "Import board",
"import-board-title-trello": "Import board from Trello",
"import-board-title-wekan": "Import board from previous export",
"import-sandstorm-backup-warning": "Do not delete data you import from original exported board or Trello before checking does this grain close and open again, or do you get Board not found error, that means data loss.",
"import-sandstorm-warning": "Imported board will delete all existing data on board and replace it with imported board.",
- "from-trello": "From Trello",
+ "from-trello": "Trello ல் இருந்து ",
"from-wekan": "From previous export",
"import-board-instruction-trello": "In your Trello board, go to 'Menu', then 'More', 'Print and Export', 'Export JSON', and copy the resulting text.",
"import-board-instruction-wekan": "In your board, go to 'Menu', then 'Export board', and copy the text in the downloaded file.",
@@ -325,7 +341,7 @@
"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",
+ "language": "மொழி ",
"last-admin-desc": "You can’t change roles because there must be at least one admin.",
"leave-board": "Leave Board",
"leave-board-pop": "Are you sure you want to leave __boardTitle__? You will be removed from all cards on this board.",
@@ -335,12 +351,12 @@
"list-archive-cards-pop": "This will remove all the cards in this list from the board. To view cards in Archive and bring them back to the board, click “Menu” > “Archive”.",
"list-move-cards": "Move all cards in this list",
"list-select-cards": "Select all cards in this list",
- "set-color-list": "Set Color",
+ "set-color-list": "நிறத்தை மாற்று ",
"listActionPopup-title": "List Actions",
"swimlaneActionPopup-title": "Swimlane Actions",
"swimlaneAddPopup-title": "Add a Swimlane below",
"listImportCardPopup-title": "Import a Trello card",
- "listMorePopup-title": "More",
+ "listMorePopup-title": "மேலும் ",
"link-list": "Link to this list",
"list-delete-pop": "All actions will be removed from the activity feed and you won't be able to recover the list. There is no undo.",
"list-delete-suggest-archive": "You can move a list to Archive to remove it from the board and preserve the activity.",
@@ -362,7 +378,7 @@
"muted": "Muted",
"muted-info": "You will never be notified of any changes in this board",
"my-boards": "My Boards",
- "name": "Name",
+ "name": "பெயர் ",
"no-archived-cards": "No cards in Archive.",
"no-archived-lists": "No lists in Archive.",
"no-archived-swimlanes": "No swimlanes in Archive.",
@@ -376,16 +392,16 @@
"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",
+ "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": "தனியார் ",
"private-desc": "This board is private. Only people added to the board can view and edit it.",
"profile": "Profile",
- "public": "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",
@@ -396,11 +412,11 @@
"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": "பெயர்மாற்றம் ",
"rename-board": "Rename Board",
"restore": "Restore",
- "save": "Save",
- "search": "Search",
+ "save": "சேமி ",
+ "search": "தேடு ",
"rules": "Rules",
"search-cards": "Search from card titles and descriptions on this board",
"search-example": "Text to search for?",
@@ -423,8 +439,8 @@
"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",
+ "subscribe": "சந்தா ",
+ "team": "குழு ",
"this-board": "this board",
"this-card": "this card",
"spent-time-hours": "Spent time (hours)",
@@ -453,6 +469,9 @@
"welcome-swimlane": "Milestone 1",
"welcome-list1": "Basics",
"welcome-list2": "Advanced",
+ "card-templates-swimlane": "Card Templates",
+ "list-templates-swimlane": "List Templates",
+ "board-templates-swimlane": "Board Templates",
"what-to-do": "What do you want to do?",
"wipLimitErrorPopup-title": "Invalid WIP Limit",
"wipLimitErrorPopup-dialog-pt1": "The number of tasks in this list is higher than the WIP limit you've defined.",
@@ -462,7 +481,7 @@
"people": "People",
"registration": "Registration",
"disable-self-registration": "Disable Self-Registration",
- "invite": "Invite",
+ "invite": "அழைப்பு ",
"invite-people": "Invite People",
"to-boards": "To board(s)",
"email-addresses": "Email Addresses",
@@ -472,10 +491,10 @@
"smtp-host": "SMTP Host",
"smtp-port": "SMTP Port",
"smtp-username": "Username",
- "smtp-password": "Password",
+ "smtp-password": "கடவுச்சொல் ",
"smtp-tls": "TLS support",
- "send-from": "From",
- "send-smtp-test": "Send a test email to yourself",
+ "send-from": "அனுப்புனர் ",
+ "send-smtp-test": "சோதனை மின்னஞ்சல் அணுப்புக ",
"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 kanban board for collaborations.\n\nPlease follow the link below:\n__url__\n\nAnd your invitation code is: __icode__\n\nThanks.",
@@ -515,7 +534,7 @@
"active": "Active",
"card-received": "Received",
"card-received-on": "Received on",
- "card-end": "End",
+ "card-end": "முடிவு ",
"card-end-on": "Ends on",
"editCardReceivedDatePopup-title": "Change received date",
"editCardEndDatePopup-title": "Change end date",
@@ -552,6 +571,8 @@
"activity-added-label-card": "added label '%s'",
"activity-removed-label-card": "removed label '%s'",
"activity-delete-attach-card": "deleted an attachment",
+ "activity-set-customfield": "set custom field '%s' to '%s' in %s",
+ "activity-unset-customfield": "unset custom field '%s' in %s",
"r-rule": "Rule",
"r-add-trigger": "Add trigger",
"r-add-action": "Add action",
@@ -596,7 +617,7 @@
"r-archive": "Move to Archive",
"r-unarchive": "Restore from Archive",
"r-card": "card",
- "r-add": "Add",
+ "r-add": "சேர் ",
"r-remove": "Remove",
"r-label": "label",
"r-member": "member",
diff --git a/i18n/th.i18n.json b/i18n/th.i18n.json
index a748773e..17a54304 100644
--- a/i18n/th.i18n.json
+++ b/i18n/th.i18n.json
@@ -1,28 +1,41 @@
{
"accept": "ยอมรับ",
"act-activity-notify": "Activity Notification",
- "act-addAttachment": "แนบไฟล์ __attachment__ ไปยัง __card__",
- "act-addSubtask": "added subtask __checklist__ to __card__",
- "act-addChecklist": "added checklist __checklist__ to __card__",
- "act-addChecklistItem": "added __checklistItem__ to checklist __checklist__ on __card__",
- "act-addComment": "ออกความเห็นที่ __card__: __comment__",
- "act-createBoard": "สร้าง __board__",
- "act-createCard": "เพิ่ม __card__ ไปยัง __list__",
- "act-createCustomField": "created custom field __customField__",
- "act-createList": "เพิ่ม __list__ ไปยัง __board__",
- "act-addBoardMember": "เพิ่ม __member__ ไปยัง __board__",
- "act-archivedBoard": "__board__ moved to Archive",
- "act-archivedCard": "__card__ moved to Archive",
- "act-archivedList": "__list__ moved to Archive",
- "act-archivedSwimlane": "__swimlane__ moved to Archive",
- "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-addAttachment": "added attachment __attachment__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-deleteAttachment": "deleted attachment __attachment__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-addSubtask": "added subtask __subtask__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-addLabel": "Added label __label__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-addedLabel": "Added label __label__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-removeLabel": "Removed label __label__ from card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-removedLabel": "Removed label __label__ from card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-addChecklist": "added checklist __checklist__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-addChecklistItem": "added checklist item __checklistItem__ to checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-removeChecklist": "removed checklist __checklist__ from card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-removeChecklistItem": "removed checklist item __checklistItem__ from checklist __checkList__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-checkedItem": "checked __checklistItem__ of checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-uncheckedItem": "unchecked __checklistItem__ of checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-completeChecklist": "completed checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-uncompleteChecklist": "uncompleted checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-addComment": "commented on card __card__: __comment__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-createBoard": "created board __board__",
+ "act-createSwimlane": "created swimlane __swimlane__ to board __board__",
+ "act-createCard": "created card __card__ to list __list__ at swimlane __swimlane__ at board __board__",
+ "act-createCustomField": "created custom field __customField__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-createList": "added list __list__ to board __board__",
+ "act-addBoardMember": "added member __member__ to board __board__",
+ "act-archivedBoard": "Board __board__ moved to Archive",
+ "act-archivedCard": "Card __card__ at list __list__ at swimlane __swimlane__ at board __board__ moved to Archive",
+ "act-archivedList": "List __list__ at swimlane __swimlane__ at board __board__ moved to Archive",
+ "act-archivedSwimlane": "Swimlane __swimlane__ at board __board__ moved to Archive",
+ "act-importBoard": "imported board __board__",
+ "act-importCard": "imported card __card__ to list __list__ at swimlane __swimlane__ at board __board__",
+ "act-importList": "imported list __list__ to swimlane __swimlane__ at board __board__",
+ "act-joinMember": "added member __member__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-moveCard": "moved card __card__ at board __board__ from list __oldList__ at swimlane __oldSwimlane__ to list __list__ at swimlane __swimlane__",
+ "act-moveCardToOtherBoard": "moved card __card__ from list __oldList__ at swimlane __oldSwimlane__ at board __oldBoard__ to list __list__ at swimlane __swimlane__ at board __board__",
+ "act-removeBoardMember": "removed member __member__ from board __board__",
+ "act-restoredCard": "restored card __card__ to list __list__ at swimlane __swimlane__ at board __board__",
+ "act-unjoinMember": "removed member __member__ from card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
"act-withBoardTitle": "__board__",
"act-withCardTitle": "[__board__] __card__",
"actions": "ปฎิบัติการ",
@@ -47,14 +60,14 @@
"activity-unchecked-item": "unchecked %s in checklist %s of %s",
"activity-checklist-added": "รายการถูกเพิ่มไป %s",
"activity-checklist-removed": "removed a checklist from %s",
- "activity-checklist-completed": "completed the checklist %s of %s",
+ "activity-checklist-completed": "completed checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
"activity-checklist-uncompleted": "uncompleted the checklist %s of %s",
"activity-checklist-item-added": "added checklist item to '%s' in %s",
"activity-checklist-item-removed": "removed a checklist item from '%s' in %s",
"add": "เพิ่ม",
"activity-checked-item-card": "checked %s in checklist %s",
"activity-unchecked-item-card": "unchecked %s in checklist %s",
- "activity-checklist-completed-card": "completed the checklist %s",
+ "activity-checklist-completed-card": "completed checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
"activity-checklist-uncompleted-card": "uncompleted the checklist %s",
"add-attachment": "Add Attachment",
"add-board": "Add Board",
@@ -92,6 +105,8 @@
"restore-board": "Restore Board",
"no-archived-boards": "No Boards in Archive.",
"archives": "เอกสารที่เก็บไว้",
+ "template": "Template",
+ "templates": "Templates",
"assign-member": "กำหนดสมาชิก",
"attached": "แนบมาด้วย",
"attachment": "สิ่งที่แนบมา",
@@ -110,7 +125,7 @@
"boardChangeTitlePopup-title": "เปลี่ยนชื่อบอร์ด",
"boardChangeVisibilityPopup-title": "เปลี่ยนการเข้าถึง",
"boardChangeWatchPopup-title": "เปลี่ยนการเฝ้าดู",
- "boardMenuPopup-title": "เมนูบอร์ด",
+ "boardMenuPopup-title": "Board Settings",
"boards": "บอร์ด",
"board-view": "Board View",
"board-view-cal": "Calendar",
@@ -143,6 +158,7 @@
"cardLabelsPopup-title": "ป้ายกำกับ",
"cardMembersPopup-title": "สมาชิก",
"cardMorePopup-title": "เพิ่มเติม",
+ "cardTemplatePopup-title": "Create template",
"cards": "การ์ด",
"cards-count": "การ์ด",
"casSignIn": "Sign In with CAS",
@@ -204,7 +220,7 @@
"confirm-checklist-delete-dialog": "Are you sure you want to delete checklist?",
"copy-card-link-to-clipboard": "Copy card link to clipboard",
"linkCardPopup-title": "Link Card",
- "searchCardPopup-title": "Search Card",
+ "searchElementPopup-title": "ค้นหา",
"copyCardPopup-title": "Copy Card",
"copyChecklistToManyCardsPopup-title": "Copy Checklist Template to Many Cards",
"copyChecklistToManyCardsPopup-instructions": "Destination Card Titles and Descriptions in this JSON format",
@@ -453,6 +469,9 @@
"welcome-swimlane": "Milestone 1",
"welcome-list1": "พื้นฐาน",
"welcome-list2": "ก้าวหน้า",
+ "card-templates-swimlane": "Card Templates",
+ "list-templates-swimlane": "List Templates",
+ "board-templates-swimlane": "Board Templates",
"what-to-do": "ต้องการทำอะไร",
"wipLimitErrorPopup-title": "Invalid WIP Limit",
"wipLimitErrorPopup-dialog-pt1": "The number of tasks in this list is higher than the WIP limit you've defined.",
@@ -552,6 +571,8 @@
"activity-added-label-card": "added label '%s'",
"activity-removed-label-card": "removed label '%s'",
"activity-delete-attach-card": "deleted an attachment",
+ "activity-set-customfield": "set custom field '%s' to '%s' in %s",
+ "activity-unset-customfield": "unset custom field '%s' in %s",
"r-rule": "Rule",
"r-add-trigger": "Add trigger",
"r-add-action": "Add action",
diff --git a/i18n/tr.i18n.json b/i18n/tr.i18n.json
index 5bac9e4f..6f626453 100644
--- a/i18n/tr.i18n.json
+++ b/i18n/tr.i18n.json
@@ -1,28 +1,41 @@
{
"accept": "Kabul Et",
"act-activity-notify": "Etkinlik Bildirimi",
- "act-addAttachment": "__card__ kartına __attachment__ dosyasını ekledi",
- "act-addSubtask": "added subtask __checklist__ to __card__",
- "act-addChecklist": "__card__ kartında __checklist__ yapılacak listesini ekledi",
- "act-addChecklistItem": "__checklistItem__ öğesini __card__ kartındaki __checklist__ yapılacak listesine ekledi",
- "act-addComment": "__card__ kartına bir yorum bıraktı: __comment__",
- "act-createBoard": "__board__ panosunu oluşturdu",
- "act-createCard": "__card__ kartını ___list__ listesine ekledi",
- "act-createCustomField": "__customField__ adlı özel alan yaratıldı",
- "act-createList": "__list__ listesini __board__ panosuna ekledi",
- "act-addBoardMember": "__member__ kullanıcısını __board__ panosuna ekledi",
- "act-archivedBoard": "__board__ arşive taşındı",
- "act-archivedCard": "__card__ Arşive taşındı",
- "act-archivedList": "__list__ Arşive taşındı",
- "act-archivedSwimlane": "__swimlane__ Arşive taşındı",
- "act-importBoard": "__board__ panosunu içe aktardı",
- "act-importCard": "__card__ kartını içe aktardı",
- "act-importList": "__list__ listesini içe 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 getirdi",
- "act-unjoinMember": "__member__ kullanıcısnı __card__ kartından çıkarttı",
+ "act-addAttachment": "added attachment __attachment__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-deleteAttachment": "deleted attachment __attachment__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-addSubtask": "added subtask __subtask__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-addLabel": "Added label __label__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-addedLabel": "Added label __label__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-removeLabel": "Removed label __label__ from card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-removedLabel": "Removed label __label__ from card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-addChecklist": "added checklist __checklist__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-addChecklistItem": "added checklist item __checklistItem__ to checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-removeChecklist": "removed checklist __checklist__ from card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-removeChecklistItem": "removed checklist item __checklistItem__ from checklist __checkList__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-checkedItem": "checked __checklistItem__ of checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-uncheckedItem": "unchecked __checklistItem__ of checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-completeChecklist": "completed checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-uncompleteChecklist": "uncompleted checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-addComment": "commented on card __card__: __comment__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-createBoard": "__board__ panosu oluşturuldu",
+ "act-createSwimlane": "__board__ panosuna __swimlane__ kulvarı oluşturuldu",
+ "act-createCard": "__board__ panosunun __swimlane__ kulvarının __list__ listesinin __card__ kartı oluşturuldu",
+ "act-createCustomField": "created custom field __customField__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-createList": "added list __list__ to board __board__",
+ "act-addBoardMember": "__board__ panosuna __member__ kullanıcısı eklendi",
+ "act-archivedBoard": "__board__ panosu Arşiv'e taşındı",
+ "act-archivedCard": "Card __card__ at list __list__ at swimlane __swimlane__ at board __board__ moved to Archive",
+ "act-archivedList": "List __list__ at swimlane __swimlane__ at board __board__ moved to Archive",
+ "act-archivedSwimlane": "Swimlane __swimlane__ at board __board__ moved to Archive",
+ "act-importBoard": "__board__ panosu içeriye aktarıldı",
+ "act-importCard": "imported card __card__ to list __list__ at swimlane __swimlane__ at board __board__",
+ "act-importList": "imported list __list__ to swimlane __swimlane__ at board __board__",
+ "act-joinMember": "added member __member__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-moveCard": "moved card __card__ at board __board__ from list __oldList__ at swimlane __oldSwimlane__ to list __list__ at swimlane __swimlane__",
+ "act-moveCardToOtherBoard": "moved card __card__ from list __oldList__ at swimlane __oldSwimlane__ at board __oldBoard__ to list __list__ at swimlane __swimlane__ at board __board__",
+ "act-removeBoardMember": "removed member __member__ from board __board__",
+ "act-restoredCard": "restored card __card__ to list __list__ at swimlane __swimlane__ at board __board__",
+ "act-unjoinMember": "removed member __member__ from card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
"act-withBoardTitle": "__board__",
"act-withCardTitle": "[__board__] __card__",
"actions": "İşlemler",
@@ -42,19 +55,19 @@
"activity-removed": "%s i %s ten kaldırdı",
"activity-sent": "%s i %s e gönderdi",
"activity-unjoined": "%s içinden ayrıldı",
- "activity-subtask-added": "Alt-görev 1%s'e eklendi",
+ "activity-subtask-added": "Alt-görev %s'e eklendi",
"activity-checked-item": "checked %s in checklist %s of %s",
"activity-unchecked-item": "unchecked %s in checklist %s of %s",
"activity-checklist-added": "%s içine yapılacak listesi ekledi",
"activity-checklist-removed": "removed a checklist from %s",
- "activity-checklist-completed": "completed the checklist %s of %s",
+ "activity-checklist-completed": "completed checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
"activity-checklist-uncompleted": "uncompleted the checklist %s of %s",
"activity-checklist-item-added": "%s içinde %s yapılacak listesine öğe ekledi",
"activity-checklist-item-removed": "removed a checklist item from '%s' in %s",
"add": "Ekle",
"activity-checked-item-card": "checked %s in checklist %s",
"activity-unchecked-item-card": "unchecked %s in checklist %s",
- "activity-checklist-completed-card": "completed the checklist %s",
+ "activity-checklist-completed-card": "completed checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
"activity-checklist-uncompleted-card": "uncompleted the checklist %s",
"add-attachment": "Ek Ekle",
"add-board": "Pano Ekle",
@@ -92,6 +105,8 @@
"restore-board": "Panoyu Geri Getir",
"no-archived-boards": "Arşivde Pano Yok.",
"archives": "Arşivle",
+ "template": "Template",
+ "templates": "Templates",
"assign-member": "Üye ata",
"attached": "dosya(sı) eklendi",
"attachment": "Ek Dosya",
@@ -110,7 +125,7 @@
"boardChangeTitlePopup-title": "Panonun Adını Değiştir",
"boardChangeVisibilityPopup-title": "Görünebilirliği Değiştir",
"boardChangeWatchPopup-title": "İzleme Durumunu Değiştir",
- "boardMenuPopup-title": "Pano menüsü",
+ "boardMenuPopup-title": "Pano Ayarları",
"boards": "Panolar",
"board-view": "Pano Görünümü",
"board-view-cal": "Takvim",
@@ -143,6 +158,7 @@
"cardLabelsPopup-title": "Etiketler",
"cardMembersPopup-title": "Üyeler",
"cardMorePopup-title": "Daha",
+ "cardTemplatePopup-title": "Create template",
"cards": "Kartlar",
"cards-count": "Kartlar",
"casSignIn": "CAS ile giriş yapın",
@@ -204,7 +220,7 @@
"confirm-checklist-delete-dialog": "Kontrol listesini silmek istediğinden emin misin?",
"copy-card-link-to-clipboard": "Kartın linkini kopyala",
"linkCardPopup-title": "Bağlantı kartı",
- "searchCardPopup-title": "Kart Ara",
+ "searchElementPopup-title": "Arama",
"copyCardPopup-title": "Kartı Kopyala",
"copyChecklistToManyCardsPopup-title": "Yapılacaklar Listesi şemasını birden çok karta kopyala",
"copyChecklistToManyCardsPopup-instructions": "Hedef Kart Başlıkları ve Açıklamaları bu JSON formatında",
@@ -402,7 +418,7 @@
"save": "Kaydet",
"search": "Arama",
"rules": "Kurallar",
- "search-cards": "Bu tahta da ki kart başlıkları ve açıklamalarında arama yap",
+ "search-cards": "Bu panoda kart başlıkları ve açıklamalarında arama yap",
"search-example": "Aranılacak metin?",
"select-color": "Renk Seç",
"set-wip-limit-value": "Bu listedeki en fazla öğe sayısı için bir sınır belirleyin",
@@ -453,6 +469,9 @@
"welcome-swimlane": "Kilometre taşı",
"welcome-list1": "Temel",
"welcome-list2": "Gelişmiş",
+ "card-templates-swimlane": "Card Templates",
+ "list-templates-swimlane": "List Templates",
+ "board-templates-swimlane": "Board Templates",
"what-to-do": "Ne yapmak istiyorsunuz?",
"wipLimitErrorPopup-title": "Geçersiz Devam Eden İş Sınırı",
"wipLimitErrorPopup-dialog-pt1": "Bu listedeki iş sayısı belirlediğiniz sınırdan daha fazla.",
@@ -519,10 +538,10 @@
"card-end-on": "Bitiş zamanı",
"editCardReceivedDatePopup-title": "Giriş tarihini değiştir",
"editCardEndDatePopup-title": "Bitiş tarihini değiştir",
- "setCardColorPopup-title": "renk ayarla",
- "setCardActionsColorPopup-title": "Choose a color",
- "setSwimlaneColorPopup-title": "Choose a color",
- "setListColorPopup-title": "Choose a color",
+ "setCardColorPopup-title": "Renk ayarla",
+ "setCardActionsColorPopup-title": "Renk seçimi yap",
+ "setSwimlaneColorPopup-title": "Renk seçimi yap",
+ "setListColorPopup-title": "Renk seçimi yap",
"assigned-by": "Atamayı yapan",
"requested-by": "Talep Eden",
"board-delete-notice": "Silme kalıcıdır. Bu kartla ilişkili tüm listeleri, kartları ve işlemleri kaybedeceksiniz.",
@@ -552,6 +571,8 @@
"activity-added-label-card": "etiket eklendi '%s'",
"activity-removed-label-card": "removed label '%s'",
"activity-delete-attach-card": "Ek silindi",
+ "activity-set-customfield": "set custom field '%s' to '%s' in %s",
+ "activity-unset-customfield": "unset custom field '%s' in %s",
"r-rule": "Kural",
"r-add-trigger": "Tetikleyici ekle",
"r-add-action": "Eylem ekle",
diff --git a/i18n/uk.i18n.json b/i18n/uk.i18n.json
index a7a85d40..79eec847 100644
--- a/i18n/uk.i18n.json
+++ b/i18n/uk.i18n.json
@@ -1,28 +1,41 @@
{
"accept": "Прийняти",
"act-activity-notify": "Сповіщення діяльності",
- "act-addAttachment": "__attachment__ додане до __card__",
- "act-addSubtask": "додав підзадачу __checklist__ до __card__",
- "act-addChecklist": "додав список __checklist__ до __card__",
- "act-addChecklistItem": "додав __checklistItem__ до списку __checklist__ в __card__",
- "act-addComment": "прокоментував __card__: __comment__",
- "act-createBoard": "створив __board__",
- "act-createCard": "додав __card__ до __list__",
- "act-createCustomField": "створено налаштовуване поле __customField__",
- "act-createList": "додав __list__ до __board__",
- "act-addBoardMember": "додав __member__ до __board__",
- "act-archivedBoard": "__board__ перенесена до архіву",
- "act-archivedCard": "__card__ перенесена до архіву",
- "act-archivedList": "__list__ перенесений до архіву",
- "act-archivedSwimlane": "__swimlane__ перенесений до архіву",
- "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-addAttachment": "added attachment __attachment__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-deleteAttachment": "deleted attachment __attachment__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-addSubtask": "added subtask __subtask__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-addLabel": "Added label __label__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-addedLabel": "Added label __label__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-removeLabel": "Removed label __label__ from card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-removedLabel": "Removed label __label__ from card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-addChecklist": "added checklist __checklist__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-addChecklistItem": "added checklist item __checklistItem__ to checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-removeChecklist": "removed checklist __checklist__ from card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-removeChecklistItem": "removed checklist item __checklistItem__ from checklist __checkList__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-checkedItem": "checked __checklistItem__ of checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-uncheckedItem": "unchecked __checklistItem__ of checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-completeChecklist": "completed checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-uncompleteChecklist": "uncompleted checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-addComment": "commented on card __card__: __comment__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-createBoard": "Створити Коробко",
+ "act-createSwimlane": "created swimlane __swimlane__ to board __board__",
+ "act-createCard": "created card __card__ to list __list__ at swimlane __swimlane__ at board __board__",
+ "act-createCustomField": "created custom field __customField__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-createList": "added list __list__ to board __board__",
+ "act-addBoardMember": "added member __member__ to board __board__",
+ "act-archivedBoard": "Board __board__ moved to Archive",
+ "act-archivedCard": "Card __card__ at list __list__ at swimlane __swimlane__ at board __board__ moved to Archive",
+ "act-archivedList": "List __list__ at swimlane __swimlane__ at board __board__ moved to Archive",
+ "act-archivedSwimlane": "Swimlane __swimlane__ at board __board__ moved to Archive",
+ "act-importBoard": "imported board __board__",
+ "act-importCard": "imported card __card__ to list __list__ at swimlane __swimlane__ at board __board__",
+ "act-importList": "imported list __list__ to swimlane __swimlane__ at board __board__",
+ "act-joinMember": "added member __member__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-moveCard": "moved card __card__ at board __board__ from list __oldList__ at swimlane __oldSwimlane__ to list __list__ at swimlane __swimlane__",
+ "act-moveCardToOtherBoard": "moved card __card__ from list __oldList__ at swimlane __oldSwimlane__ at board __oldBoard__ to list __list__ at swimlane __swimlane__ at board __board__",
+ "act-removeBoardMember": "removed member __member__ from board __board__",
+ "act-restoredCard": "restored card __card__ to list __list__ at swimlane __swimlane__ at board __board__",
+ "act-unjoinMember": "removed member __member__ from card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
"act-withBoardTitle": "__board__",
"act-withCardTitle": "[__board__] __card__",
"actions": "Дії",
@@ -47,14 +60,14 @@
"activity-unchecked-item": "unchecked %s in checklist %s of %s",
"activity-checklist-added": "додав список до %s",
"activity-checklist-removed": "removed a checklist from %s",
- "activity-checklist-completed": "completed the checklist %s of %s",
+ "activity-checklist-completed": "completed checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
"activity-checklist-uncompleted": "uncompleted the checklist %s of %s",
"activity-checklist-item-added": "added checklist item to '%s' in %s",
"activity-checklist-item-removed": "removed a checklist item from '%s' in %s",
"add": "Додати",
"activity-checked-item-card": "checked %s in checklist %s",
"activity-unchecked-item-card": "unchecked %s in checklist %s",
- "activity-checklist-completed-card": "completed the checklist %s",
+ "activity-checklist-completed-card": "completed checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
"activity-checklist-uncompleted-card": "uncompleted the checklist %s",
"add-attachment": "Add Attachment",
"add-board": "Додати дошку",
@@ -92,6 +105,8 @@
"restore-board": "Відновити дошку",
"no-archived-boards": "Немає дошок в архіві",
"archives": "Архів",
+ "template": "Template",
+ "templates": "Templates",
"assign-member": "Assign member",
"attached": "доданно",
"attachment": "Додаток",
@@ -110,7 +125,7 @@
"boardChangeTitlePopup-title": "Перейменувати дошку",
"boardChangeVisibilityPopup-title": "Change Visibility",
"boardChangeWatchPopup-title": "Change Watch",
- "boardMenuPopup-title": "Board Menu",
+ "boardMenuPopup-title": "Board Settings",
"boards": "Дошки",
"board-view": "Board View",
"board-view-cal": "Календар",
@@ -143,6 +158,7 @@
"cardLabelsPopup-title": "Labels",
"cardMembersPopup-title": "Користувачі",
"cardMorePopup-title": "More",
+ "cardTemplatePopup-title": "Create template",
"cards": "Картки",
"cards-count": "Картки",
"casSignIn": "Sign In with CAS",
@@ -204,7 +220,7 @@
"confirm-checklist-delete-dialog": "Are you sure you want to delete checklist?",
"copy-card-link-to-clipboard": "Скопіювати посилання на картку в буфер обміну",
"linkCardPopup-title": "Link Card",
- "searchCardPopup-title": "Search Card",
+ "searchElementPopup-title": "Search",
"copyCardPopup-title": "Copy Card",
"copyChecklistToManyCardsPopup-title": "Copy Checklist Template to Many Cards",
"copyChecklistToManyCardsPopup-instructions": "Destination Card Titles and Descriptions in this JSON format",
@@ -453,6 +469,9 @@
"welcome-swimlane": "Milestone 1",
"welcome-list1": "Basics",
"welcome-list2": "Advanced",
+ "card-templates-swimlane": "Card Templates",
+ "list-templates-swimlane": "List Templates",
+ "board-templates-swimlane": "Board Templates",
"what-to-do": "What do you want to do?",
"wipLimitErrorPopup-title": "Invalid WIP Limit",
"wipLimitErrorPopup-dialog-pt1": "Кількість завдань у цьому списку перевищує встановлений вами ліміт",
@@ -552,27 +571,29 @@
"activity-added-label-card": "added label '%s'",
"activity-removed-label-card": "removed label '%s'",
"activity-delete-attach-card": "deleted an attachment",
- "r-rule": "Rule",
+ "activity-set-customfield": "set custom field '%s' to '%s' in %s",
+ "activity-unset-customfield": "unset custom field '%s' in %s",
+ "r-rule": "Правило",
"r-add-trigger": "Add trigger",
"r-add-action": "Add action",
- "r-board-rules": "Board rules",
+ "r-board-rules": "Дошка правил",
"r-add-rule": "Add rule",
- "r-view-rule": "View rule",
- "r-delete-rule": "Delete rule",
- "r-new-rule-name": "New rule title",
+ "r-view-rule": "Переглянути правило",
+ "r-delete-rule": "Видалити правило",
+ "r-new-rule-name": "Заголовок нового правила\n",
"r-no-rules": "No rules",
"r-when-a-card": "When a card",
"r-is": "is",
"r-is-moved": "is moved",
"r-added-to": "added to",
- "r-removed-from": "Removed from",
- "r-the-board": "the board",
+ "r-removed-from": "Видалити з",
+ "r-the-board": "Дошка",
"r-list": "list",
"set-filter": "Set Filter",
- "r-moved-to": "Moved to",
- "r-moved-from": "Moved from",
- "r-archived": "Moved to Archive",
- "r-unarchived": "Restored from Archive",
+ "r-moved-to": "переміщено до",
+ "r-moved-from": "переміщено з",
+ "r-archived": "переміщено до Архіву",
+ "r-unarchived": "Відновлено з Архіву",
"r-a-card": "a card",
"r-when-a-label-is": "When a label is",
"r-when-the-label-is": "When the label is",
@@ -595,12 +616,12 @@
"r-its-list": "its list",
"r-archive": "Move to Archive",
"r-unarchive": "Restore from Archive",
- "r-card": "card",
+ "r-card": "Картка",
"r-add": "Додати",
- "r-remove": "Remove",
+ "r-remove": "Видалити\n",
"r-label": "label",
- "r-member": "member",
- "r-remove-all": "Remove all members from the card",
+ "r-member": "Користувач",
+ "r-remove-all": "Видалити усіх учасників картки",
"r-set-color": "Set color to",
"r-checklist": "checklist",
"r-check-all": "Check all",
@@ -612,16 +633,16 @@
"r-of-checklist": "of checklist",
"r-send-email": "Send an email",
"r-to": "to",
- "r-subject": "subject",
+ "r-subject": "Об'єкт",
"r-rule-details": "Rule details",
"r-d-move-to-top-gen": "Move card to top of its list",
"r-d-move-to-top-spec": "Move card to top of list",
"r-d-move-to-bottom-gen": "Move card to bottom of its list",
"r-d-move-to-bottom-spec": "Move card to bottom of list",
- "r-d-send-email": "Send email",
+ "r-d-send-email": "Відправити email",
"r-d-send-email-to": "to",
- "r-d-send-email-subject": "subject",
- "r-d-send-email-message": "message",
+ "r-d-send-email-subject": "Об'єкт",
+ "r-d-send-email-message": "повідомлення",
"r-d-archive": "Move card to Archive",
"r-d-unarchive": "Restore card from Archive",
"r-d-add-label": "Add label",
@@ -629,8 +650,8 @@
"r-create-card": "Create new card",
"r-in-list": "in list",
"r-in-swimlane": "in swimlane",
- "r-d-add-member": "Add member",
- "r-d-remove-member": "Remove member",
+ "r-d-add-member": "Додати користувача",
+ "r-d-remove-member": "Видалити користувача",
"r-d-remove-all-member": "Remove all member",
"r-d-check-all": "Check all items of a list",
"r-d-uncheck-all": "Uncheck all items of a list",
diff --git a/i18n/vi.i18n.json b/i18n/vi.i18n.json
index 96223df8..9d180021 100644
--- a/i18n/vi.i18n.json
+++ b/i18n/vi.i18n.json
@@ -1,28 +1,41 @@
{
"accept": "Chấp nhận",
"act-activity-notify": "Activity Notification",
- "act-addAttachment": "đã đính kèm __attachment__ vào __card__",
- "act-addSubtask": "added subtask __checklist__ to __card__",
- "act-addChecklist": "added checklist __checklist__ to __card__",
- "act-addChecklistItem": "added __checklistItem__ to checklist __checklist__ on __card__",
- "act-addComment": "đã bình luận trong __card__: __comment__",
- "act-createBoard": "đã tạo __board__",
- "act-createCard": "đã thêm __card__ vào __list__",
- "act-createCustomField": "created custom field __customField__",
- "act-createList": "đã thêm __list__ vào __board__",
- "act-addBoardMember": "đã thêm __member__ vào __board__",
- "act-archivedBoard": "__board__ moved to Archive",
- "act-archivedCard": "__card__ moved to Archive",
- "act-archivedList": "__list__ moved to Archive",
- "act-archivedSwimlane": "__swimlane__ moved to Archive",
- "act-importBoard": "đã nạp bảng __board__",
- "act-importCard": "đã nạp thẻ __card__",
- "act-importList": "đã nạp danh sách __list__",
- "act-joinMember": "đã thêm thành viên __member__ vào __card__",
- "act-moveCard": "đã chuyển thẻ __card__ từ __oldList__ sang __list__",
- "act-removeBoardMember": "đã xóa thành viên __member__ khỏi __board__",
- "act-restoredCard": "đã khôi phục thẻ __card__ vào bảng __board__",
- "act-unjoinMember": "đã xóa thành viên __member__ khỏi thẻ __card__",
+ "act-addAttachment": "added attachment __attachment__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-deleteAttachment": "deleted attachment __attachment__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-addSubtask": "added subtask __subtask__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-addLabel": "Added label __label__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-addedLabel": "Added label __label__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-removeLabel": "Removed label __label__ from card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-removedLabel": "Removed label __label__ from card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-addChecklist": "added checklist __checklist__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-addChecklistItem": "added checklist item __checklistItem__ to checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-removeChecklist": "removed checklist __checklist__ from card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-removeChecklistItem": "removed checklist item __checklistItem__ from checklist __checkList__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-checkedItem": "checked __checklistItem__ of checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-uncheckedItem": "unchecked __checklistItem__ of checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-completeChecklist": "completed checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-uncompleteChecklist": "uncompleted checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-addComment": "commented on card __card__: __comment__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-createBoard": "created board __board__",
+ "act-createSwimlane": "created swimlane __swimlane__ to board __board__",
+ "act-createCard": "created card __card__ to list __list__ at swimlane __swimlane__ at board __board__",
+ "act-createCustomField": "created custom field __customField__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-createList": "added list __list__ to board __board__",
+ "act-addBoardMember": "added member __member__ to board __board__",
+ "act-archivedBoard": "Board __board__ moved to Archive",
+ "act-archivedCard": "Card __card__ at list __list__ at swimlane __swimlane__ at board __board__ moved to Archive",
+ "act-archivedList": "List __list__ at swimlane __swimlane__ at board __board__ moved to Archive",
+ "act-archivedSwimlane": "Swimlane __swimlane__ at board __board__ moved to Archive",
+ "act-importBoard": "imported board __board__",
+ "act-importCard": "imported card __card__ to list __list__ at swimlane __swimlane__ at board __board__",
+ "act-importList": "imported list __list__ to swimlane __swimlane__ at board __board__",
+ "act-joinMember": "added member __member__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-moveCard": "moved card __card__ at board __board__ from list __oldList__ at swimlane __oldSwimlane__ to list __list__ at swimlane __swimlane__",
+ "act-moveCardToOtherBoard": "moved card __card__ from list __oldList__ at swimlane __oldSwimlane__ at board __oldBoard__ to list __list__ at swimlane __swimlane__ at board __board__",
+ "act-removeBoardMember": "removed member __member__ from board __board__",
+ "act-restoredCard": "restored card __card__ to list __list__ at swimlane __swimlane__ at board __board__",
+ "act-unjoinMember": "removed member __member__ from card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
"act-withBoardTitle": "__board__",
"act-withCardTitle": "[__board__] __card__",
"actions": "Hành Động",
@@ -47,14 +60,14 @@
"activity-unchecked-item": "unchecked %s in checklist %s of %s",
"activity-checklist-added": "đã thêm checklist vào %s",
"activity-checklist-removed": "removed a checklist from %s",
- "activity-checklist-completed": "completed the checklist %s of %s",
+ "activity-checklist-completed": "completed checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
"activity-checklist-uncompleted": "uncompleted the checklist %s of %s",
"activity-checklist-item-added": "added checklist item to '%s' in %s",
"activity-checklist-item-removed": "removed a checklist item from '%s' in %s",
"add": "Thêm",
"activity-checked-item-card": "checked %s in checklist %s",
"activity-unchecked-item-card": "unchecked %s in checklist %s",
- "activity-checklist-completed-card": "completed the checklist %s",
+ "activity-checklist-completed-card": "completed checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
"activity-checklist-uncompleted-card": "uncompleted the checklist %s",
"add-attachment": "Thêm Bản Đính Kèm",
"add-board": "Thêm Bảng",
@@ -92,6 +105,8 @@
"restore-board": "Khôi Phục Bảng",
"no-archived-boards": "No Boards in Archive.",
"archives": "Lưu Trữ",
+ "template": "Template",
+ "templates": "Templates",
"assign-member": "Chỉ định thành viên",
"attached": "đã đính kèm",
"attachment": "Phần đính kèm",
@@ -110,7 +125,7 @@
"boardChangeTitlePopup-title": "Đổi tên bảng",
"boardChangeVisibilityPopup-title": "Đổi cách hiển thị",
"boardChangeWatchPopup-title": "Đổi cách xem",
- "boardMenuPopup-title": "Board Menu",
+ "boardMenuPopup-title": "Board Settings",
"boards": "Bảng",
"board-view": "Board View",
"board-view-cal": "Calendar",
@@ -143,6 +158,7 @@
"cardLabelsPopup-title": "Labels",
"cardMembersPopup-title": "Thành Viên",
"cardMorePopup-title": "More",
+ "cardTemplatePopup-title": "Create template",
"cards": "Cards",
"cards-count": "Cards",
"casSignIn": "Sign In with CAS",
@@ -204,7 +220,7 @@
"confirm-checklist-delete-dialog": "Are you sure you want to delete checklist?",
"copy-card-link-to-clipboard": "Copy card link to clipboard",
"linkCardPopup-title": "Link Card",
- "searchCardPopup-title": "Search Card",
+ "searchElementPopup-title": "Search",
"copyCardPopup-title": "Copy Card",
"copyChecklistToManyCardsPopup-title": "Copy Checklist Template to Many Cards",
"copyChecklistToManyCardsPopup-instructions": "Destination Card Titles and Descriptions in this JSON format",
@@ -453,6 +469,9 @@
"welcome-swimlane": "Milestone 1",
"welcome-list1": "Basics",
"welcome-list2": "Advanced",
+ "card-templates-swimlane": "Card Templates",
+ "list-templates-swimlane": "List Templates",
+ "board-templates-swimlane": "Board Templates",
"what-to-do": "What do you want to do?",
"wipLimitErrorPopup-title": "Invalid WIP Limit",
"wipLimitErrorPopup-dialog-pt1": "The number of tasks in this list is higher than the WIP limit you've defined.",
@@ -552,6 +571,8 @@
"activity-added-label-card": "added label '%s'",
"activity-removed-label-card": "removed label '%s'",
"activity-delete-attach-card": "deleted an attachment",
+ "activity-set-customfield": "set custom field '%s' to '%s' in %s",
+ "activity-unset-customfield": "unset custom field '%s' in %s",
"r-rule": "Rule",
"r-add-trigger": "Add trigger",
"r-add-action": "Add action",
diff --git a/i18n/zh-CN.i18n.json b/i18n/zh-CN.i18n.json
index 71bb3ac3..1fde84fb 100644
--- a/i18n/zh-CN.i18n.json
+++ b/i18n/zh-CN.i18n.json
@@ -1,28 +1,41 @@
{
"accept": "接受",
"act-activity-notify": "活动通知",
- "act-addAttachment": "添加附件 __attachment__ 至卡片 __card__",
- "act-addSubtask": "添加子任务 __checklist__ 到__card__",
- "act-addChecklist": "添加清单 __checklist__ 到 __card__",
- "act-addChecklistItem": "向 __card__ 中的清单 __checklist__ 添加 __checklistItem__",
- "act-addComment": "在 __card__ 发布评论: __comment__",
+ "act-addAttachment": "添加附件 __attachment__ 到看板 __board__ 中的泳道 __swimlane__ 中的列表 __list__ 中的卡片 __card__ 中",
+ "act-deleteAttachment": "删除看板 __board__ 中的泳道 __swimlane__ 中的列表 __list__ 中的卡片 __card__ 中的附件 __attachment__",
+ "act-addSubtask": "添加子任务 __subtask__ 到看板 __board__ 中的泳道 __swimlane__ 中的列表 __list__ 中的卡片 __card__ 中",
+ "act-addLabel": "添加标签 __label__ 到看板 __board__ 中的泳道 __swimlane__ 中的列表 __list__ 中的卡片 __card__ 中",
+ "act-addedLabel": "添加标签 __label__ 到看板 __board__ 中的泳道 __swimlane__ 中的列表 __list__ 中的卡片 __card__ 中",
+ "act-removeLabel": "移除看板 __board__ 中的泳道 __swimlane__ 中的列表 __list__ 中的卡片 __card__ 中的标签 __label__ ",
+ "act-removedLabel": "移除看板 __board__ 中的泳道 __swimlane__ 中的列表 __list__ 中的卡片 __card__ 中的标签 __label__ ",
+ "act-addChecklist": "添加清单 __checklist__ 到看板 __board__ 中的泳道 __swimlane__ 中的列表 __list__ 中的卡片 __card__ 中",
+ "act-addChecklistItem": "添加清单项 __checklistItem__ 到看板 __board__ 中的泳道 __swimlane__ 中的列表 __list__ 中的卡片 __card__ 中的清单 __checklist__",
+ "act-removeChecklist": "移除看板 __board__ 中的泳道 __swimlane__ 中的列表 __list__ 中的卡片 __card__ 中的清单 __checklist__",
+ "act-removeChecklistItem": "移除看板 __board__ 中的泳道 __swimlane__ 中的列表 __list__ 中的卡片 __card__ 中的清单 __checklist__ 清单项 __checklistItem__",
+ "act-checkedItem": "选中看板 __board__ 中的泳道 __swimlane__ 中的列表 __list__ 中的卡片 __card__ 中的清单 __checklist__ 的清单项 __checklistItem__",
+ "act-uncheckedItem": "反选看板 __board__ 中的泳道 __swimlane__ 中的列表 __list__ 中的卡片 __card__ 中的清单 __checklist__ 的清单项 __checklistItem__",
+ "act-completeChecklist": "完成检查列表__checklist__ 卡片 __card__ 列表 __list__ 泳道 __swimlane__ 看板 __board__",
+ "act-uncompleteChecklist": "看板 __board__ 中的泳道 __swimlane__ 中的列表 __list__ 中的卡片 __card__ 中的清单 __checklist__ 未完成",
+ "act-addComment": "对看板 __board__ 中的泳道 __swimlane__ 中的列表 __list__ 中的卡片 __card__ 发表了评论: __comment__ ",
"act-createBoard": "创建看板 __board__",
- "act-createCard": "添加卡片 __card__ 至列表 __list__",
- "act-createCustomField": "创建了自定义字段 __customField__",
- "act-createList": "添加列表 __list__ 至看板 __board__",
- "act-addBoardMember": "添加成员 __member__ 至看板 __board__",
- "act-archivedBoard": "__board__ 已被移入归档",
- "act-archivedCard": "__card__ 已被移入归档",
- "act-archivedList": "__list__ 已被移入归档",
- "act-archivedSwimlane": "__swimlane__ 已被移入归档",
+ "act-createSwimlane": "created swimlane __swimlane__ to board __board__",
+ "act-createCard": "created card __card__ to list __list__ at swimlane __swimlane__ at board __board__",
+ "act-createCustomField": "created custom field __customField__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-createList": "添加列表 __list__ 至看板 __board__",
+ "act-addBoardMember": "added member __member__ to board __board__",
+ "act-archivedBoard": "看板 __board__ 已被移入归档",
+ "act-archivedCard": "Card __card__ at list __list__ at swimlane __swimlane__ at board __board__ moved to Archive",
+ "act-archivedList": "看板 __board__ 中的泳道 __swimlane__ 中的列表 __list__ 已被移入归档",
+ "act-archivedSwimlane": "看板 __board__ 中的泳道 __swimlane__ 已被移入归档",
"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-importCard": "imported card __card__ to list __list__ at swimlane __swimlane__ at board __board__",
+ "act-importList": "imported list __list__ to swimlane __swimlane__ at board __board__",
+ "act-joinMember": "added member __member__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-moveCard": "moved card __card__ at board __board__ from list __oldList__ at swimlane __oldSwimlane__ to list __list__ at swimlane __swimlane__",
+ "act-moveCardToOtherBoard": "移动卡片 __card__ 从列表 __oldList__ 泳道 __oldSwimlane__ 看板 __oldBoard__ 至列表 __list__ 泳道 __swimlane__ 看板 __board__",
+ "act-removeBoardMember": "从看板 __board__ 移除成员 __member__ ",
+ "act-restoredCard": "恢复卡片 __card__ 至列表 __list__ 泳道 __swimlane__ 看板 __board__",
+ "act-unjoinMember": "移除成员 __member__ 从卡片 __card__ 列表 __list__ a泳道 __swimlane__ 看板 __board__",
"act-withBoardTitle": "看板__board__",
"act-withCardTitle": "[看板 __board__] 卡片 __card__",
"actions": "操作",
@@ -47,14 +60,14 @@
"activity-unchecked-item": "未勾选 %s 于清单 %s 共 %s",
"activity-checklist-added": "已经将清单添加到 %s",
"activity-checklist-removed": "已从%s移除待办清单",
- "activity-checklist-completed": "已完成清单 %s 共 %s",
+ "activity-checklist-completed": "完成检查列表__checklist__ 卡片 __card__ 列表 __list__ 泳道 __swimlane__ 看板 __board__",
"activity-checklist-uncompleted": "未完成清单 %s 共 %s",
"activity-checklist-item-added": "添加清单项至'%s' 于 %s",
"activity-checklist-item-removed": "已从 '%s' 于 %s中 移除一个清单项",
"add": "添加",
"activity-checked-item-card": "勾选 %s 与清单 %s 中",
"activity-unchecked-item-card": "取消勾选 %s 于清单 %s中",
- "activity-checklist-completed-card": "已完成清单 %s",
+ "activity-checklist-completed-card": "完成检查列表 __checklist__ 卡片 __card__ 列表 __list__ 泳道 __swimlane__ 看板 __board__",
"activity-checklist-uncompleted-card": "未完成清单 %s",
"add-attachment": "添加附件",
"add-board": "添加看板",
@@ -92,6 +105,8 @@
"restore-board": "还原看板",
"no-archived-boards": "没有归档的看板。",
"archives": "归档",
+ "template": "模板",
+ "templates": "模板",
"assign-member": "分配成员",
"attached": "附加",
"attachment": "附件",
@@ -110,7 +125,7 @@
"boardChangeTitlePopup-title": "重命名看板",
"boardChangeVisibilityPopup-title": "更改可视级别",
"boardChangeWatchPopup-title": "更改关注状态",
- "boardMenuPopup-title": "看板菜单",
+ "boardMenuPopup-title": "看板设置",
"boards": "看板",
"board-view": "看板视图",
"board-view-cal": "日历",
@@ -143,6 +158,7 @@
"cardLabelsPopup-title": "标签",
"cardMembersPopup-title": "成员",
"cardMorePopup-title": "更多",
+ "cardTemplatePopup-title": "新建模板",
"cards": "卡片",
"cards-count": "卡片",
"casSignIn": "用CAS登录",
@@ -204,7 +220,7 @@
"confirm-checklist-delete-dialog": "确定要删除清单吗?",
"copy-card-link-to-clipboard": "复制卡片链接到剪贴板",
"linkCardPopup-title": "链接卡片",
- "searchCardPopup-title": "搜索卡片",
+ "searchElementPopup-title": "搜索",
"copyCardPopup-title": "复制卡片",
"copyChecklistToManyCardsPopup-title": "复制清单模板至多个卡片",
"copyChecklistToManyCardsPopup-instructions": "以JSON格式表示目标卡片的标题和描述",
@@ -453,6 +469,9 @@
"welcome-swimlane": "里程碑 1",
"welcome-list1": "基本",
"welcome-list2": "高阶",
+ "card-templates-swimlane": "卡片模板",
+ "list-templates-swimlane": "列表模板",
+ "board-templates-swimlane": "看板模板",
"what-to-do": "要做什么?",
"wipLimitErrorPopup-title": "无效的最大任务数",
"wipLimitErrorPopup-dialog-pt1": "此列表中的任务数量已经超过了设置的最大任务数。",
@@ -552,6 +571,8 @@
"activity-added-label-card": "已添加标签 '%s'",
"activity-removed-label-card": "已移除标签 '%s'",
"activity-delete-attach-card": "已删除附件",
+ "activity-set-customfield": "设置自定义字段 '%s' 至 '%s' 于 %s",
+ "activity-unset-customfield": "未设置自定义字段 '%s' 于 %s",
"r-rule": "规则",
"r-add-trigger": "添加触发器",
"r-add-action": "添加行动",
diff --git a/i18n/zh-TW.i18n.json b/i18n/zh-TW.i18n.json
index 29f47c29..0f14c4a9 100644
--- a/i18n/zh-TW.i18n.json
+++ b/i18n/zh-TW.i18n.json
@@ -1,28 +1,41 @@
{
"accept": "接受",
"act-activity-notify": "活動通知",
- "act-addAttachment": "已新增附件 __attachment__ 到 __card__",
- "act-addSubtask": "已新增子任務 __checklist__ 到 __card__",
- "act-addChecklist": "已新增待辦清單 __checklist__ 到 __card__",
- "act-addChecklistItem": "已新增 __checklistItem__ 到 __card__ 中的待辦清單 __checklist__",
- "act-addComment": "已評論 __card__: __comment__",
- "act-createBoard": "已新增 __board__",
- "act-createCard": "已將 __card__ 加入 __list__",
- "act-createCustomField": "已新增自訂欄位 __customField__",
- "act-createList": "已新增 __list__ 到 __board__",
- "act-addBoardMember": "已在 __board__ 中新增成員 __member__",
- "act-archivedBoard": "__board__ 已被移到封存",
- "act-archivedCard": "__card__ 已被移到封存",
- "act-archivedList": "__list__ 已被移到封存",
- "act-archivedSwimlane": "__swimlane__ 已被移到封存",
- "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-addAttachment": "added attachment __attachment__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-deleteAttachment": "deleted attachment __attachment__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-addSubtask": "added subtask __subtask__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-addLabel": "Added label __label__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-addedLabel": "Added label __label__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-removeLabel": "Removed label __label__ from card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-removedLabel": "Removed label __label__ from card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-addChecklist": "added checklist __checklist__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-addChecklistItem": "added checklist item __checklistItem__ to checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-removeChecklist": "removed checklist __checklist__ from card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-removeChecklistItem": "removed checklist item __checklistItem__ from checklist __checkList__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-checkedItem": "checked __checklistItem__ of checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-uncheckedItem": "unchecked __checklistItem__ of checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-completeChecklist": "completed checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-uncompleteChecklist": "uncompleted checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-addComment": "commented on card __card__: __comment__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-createBoard": "created board __board__",
+ "act-createSwimlane": "created swimlane __swimlane__ to board __board__",
+ "act-createCard": "created card __card__ to list __list__ at swimlane __swimlane__ at board __board__",
+ "act-createCustomField": "created custom field __customField__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-createList": "added list __list__ to board __board__",
+ "act-addBoardMember": "added member __member__ to board __board__",
+ "act-archivedBoard": "Board __board__ moved to Archive",
+ "act-archivedCard": "Card __card__ at list __list__ at swimlane __swimlane__ at board __board__ moved to Archive",
+ "act-archivedList": "List __list__ at swimlane __swimlane__ at board __board__ moved to Archive",
+ "act-archivedSwimlane": "Swimlane __swimlane__ at board __board__ moved to Archive",
+ "act-importBoard": "imported board __board__",
+ "act-importCard": "imported card __card__ to list __list__ at swimlane __swimlane__ at board __board__",
+ "act-importList": "imported list __list__ to swimlane __swimlane__ at board __board__",
+ "act-joinMember": "added member __member__ to card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
+ "act-moveCard": "moved card __card__ at board __board__ from list __oldList__ at swimlane __oldSwimlane__ to list __list__ at swimlane __swimlane__",
+ "act-moveCardToOtherBoard": "moved card __card__ from list __oldList__ at swimlane __oldSwimlane__ at board __oldBoard__ to list __list__ at swimlane __swimlane__ at board __board__",
+ "act-removeBoardMember": "removed member __member__ from board __board__",
+ "act-restoredCard": "restored card __card__ to list __list__ at swimlane __swimlane__ at board __board__",
+ "act-unjoinMember": "removed member __member__ from card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
"act-withBoardTitle": "__board__",
"act-withCardTitle": "[__board__] __card__",
"actions": "操作",
@@ -47,14 +60,14 @@
"activity-unchecked-item": "unchecked %s in checklist %s of %s",
"activity-checklist-added": "已新增待辦清單到 %s",
"activity-checklist-removed": "removed a checklist from %s",
- "activity-checklist-completed": "completed the checklist %s of %s",
+ "activity-checklist-completed": "completed checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
"activity-checklist-uncompleted": "uncompleted the checklist %s of %s",
"activity-checklist-item-added": "新增待辦清單項目從 %s 到 %s",
"activity-checklist-item-removed": "removed a checklist item from '%s' in %s",
"add": "新增",
"activity-checked-item-card": "checked %s in checklist %s",
"activity-unchecked-item-card": "unchecked %s in checklist %s",
- "activity-checklist-completed-card": "completed the checklist %s",
+ "activity-checklist-completed-card": "completed checklist __checklist__ at card __card__ at list __list__ at swimlane __swimlane__ at board __board__",
"activity-checklist-uncompleted-card": "uncompleted the checklist %s",
"add-attachment": "新增附件",
"add-board": "新增看板",
@@ -92,6 +105,8 @@
"restore-board": "還原看板",
"no-archived-boards": "封存中沒有看板。",
"archives": "封存",
+ "template": "Template",
+ "templates": "Templates",
"assign-member": "分配成員",
"attached": "附加",
"attachment": "附件",
@@ -110,7 +125,7 @@
"boardChangeTitlePopup-title": "重新命名看板",
"boardChangeVisibilityPopup-title": "改變觀看權限",
"boardChangeWatchPopup-title": "更改觀察",
- "boardMenuPopup-title": "看板選單",
+ "boardMenuPopup-title": "Board Settings",
"boards": "看板",
"board-view": "看板視圖",
"board-view-cal": "行事曆",
@@ -143,6 +158,7 @@
"cardLabelsPopup-title": "標籤",
"cardMembersPopup-title": "成員",
"cardMorePopup-title": "更多",
+ "cardTemplatePopup-title": "Create template",
"cards": "卡片",
"cards-count": "卡片",
"casSignIn": "以 CAS 登入",
@@ -204,7 +220,7 @@
"confirm-checklist-delete-dialog": "你確定要刪除待辦清單嗎?",
"copy-card-link-to-clipboard": "將卡片連結複製到剪貼簿",
"linkCardPopup-title": "連結卡片",
- "searchCardPopup-title": "搜尋卡片",
+ "searchElementPopup-title": "搜尋",
"copyCardPopup-title": "複製卡片",
"copyChecklistToManyCardsPopup-title": "複製待辦清單的樣板到多個卡片",
"copyChecklistToManyCardsPopup-instructions": "使用此 JSON 格式來表示目標卡片的標題和描述",
@@ -453,6 +469,9 @@
"welcome-swimlane": "Milestone 1",
"welcome-list1": "基本",
"welcome-list2": "進階",
+ "card-templates-swimlane": "Card Templates",
+ "list-templates-swimlane": "List Templates",
+ "board-templates-swimlane": "Board Templates",
"what-to-do": "要做什麼?",
"wipLimitErrorPopup-title": "Invalid WIP Limit",
"wipLimitErrorPopup-dialog-pt1": "The number of tasks in this list is higher than the WIP limit you've defined.",
@@ -552,6 +571,8 @@
"activity-added-label-card": "added label '%s'",
"activity-removed-label-card": "removed label '%s'",
"activity-delete-attach-card": "deleted an attachment",
+ "activity-set-customfield": "set custom field '%s' to '%s' in %s",
+ "activity-unset-customfield": "unset custom field '%s' in %s",
"r-rule": "Rule",
"r-add-trigger": "Add trigger",
"r-add-action": "Add action",
diff --git a/models/activities.js b/models/activities.js
index 47e3ff1e..1e97895d 100644
--- a/models/activities.js
+++ b/models/activities.js
@@ -14,6 +14,9 @@ Activities.helpers({
board() {
return Boards.findOne(this.boardId);
},
+ oldBoard() {
+ return Boards.findOne(this.oldBoardId);
+ },
user() {
return Users.findOne(this.userId);
},
@@ -26,6 +29,9 @@ Activities.helpers({
swimlane() {
return Swimlanes.findOne(this.swimlaneId);
},
+ oldSwimlane() {
+ return Swimlanes.findOne(this.oldSwimlaneId);
+ },
oldList() {
return Lists.findOne(this.oldListId);
},
@@ -50,20 +56,22 @@ Activities.helpers({
customField() {
return CustomFields.findOne(this.customFieldId);
},
+ // Label activity did not work yet, unable to edit labels when tried this.
+ //label() {
+ // return Cards.findOne(this.labelId);
+ //},
});
Activities.before.insert((userId, doc) => {
doc.createdAt = new Date();
});
-
Activities.after.insert((userId, doc) => {
const activity = Activities._transform(doc);
RulesHelper.executeRules(activity);
});
-
if (Meteor.isServer) {
// For efficiency create indexes on the date of creation, and on the date of
// creation in conjunction with the card or board id, as corresponding views
@@ -75,6 +83,9 @@ if (Meteor.isServer) {
Activities._collection._ensureIndex({ commentId: 1 }, { partialFilterExpression: { commentId: { $exists: true } } });
Activities._collection._ensureIndex({ attachmentId: 1 }, { partialFilterExpression: { attachmentId: { $exists: true } } });
Activities._collection._ensureIndex({ customFieldId: 1 }, { partialFilterExpression: { customFieldId: { $exists: true } } });
+ // Label activity did not work yet, unable to edit labels when tried this.
+ //Activities._collection._dropIndex({ labelId: 1 }, { "indexKey": -1 });
+ //Activities._collection._dropIndex({ labelId: 1 }, { partialFilterExpression: { labelId: { $exists: true } } });
});
Activities.after.insert((userId, doc) => {
@@ -100,6 +111,14 @@ if (Meteor.isServer) {
params.url = board.absoluteUrl();
params.boardId = activity.boardId;
}
+ if (activity.oldBoardId) {
+ const oldBoard = activity.oldBoard();
+ if (oldBoard) {
+ watchers = _.union(watchers, oldBoard.watchers || []);
+ params.oldBoard = oldBoard.title;
+ params.oldBoardId = activity.oldBoardId;
+ }
+ }
if (activity.memberId) {
participants = _.union(participants, [activity.memberId]);
params.member = activity.member().getName();
@@ -112,9 +131,19 @@ if (Meteor.isServer) {
}
if (activity.oldListId) {
const oldList = activity.oldList();
- watchers = _.union(watchers, oldList.watchers || []);
- params.oldList = oldList.title;
- params.oldListId = activity.oldListId;
+ if (oldList) {
+ watchers = _.union(watchers, oldList.watchers || []);
+ params.oldList = oldList.title;
+ params.oldListId = activity.oldListId;
+ }
+ }
+ if (activity.oldSwimlaneId) {
+ const oldSwimlane = activity.oldSwimlane();
+ if (oldSwimlane) {
+ watchers = _.union(watchers, oldSwimlane.watchers || []);
+ params.oldSwimlane = oldSwimlane.title;
+ params.oldSwimlaneId = activity.oldSwimlaneId;
+ }
}
if (activity.cardId) {
const card = activity.card();
@@ -126,6 +155,8 @@ if (Meteor.isServer) {
params.cardId = activity.cardId;
}
if (activity.swimlaneId) {
+ const swimlane = activity.swimlane();
+ params.swimlane = swimlane.title;
params.swimlaneId = activity.swimlaneId;
}
if (activity.commentId) {
@@ -149,6 +180,12 @@ if (Meteor.isServer) {
const customField = activity.customField();
params.customField = customField.name;
}
+ // Label activity did not work yet, unable to edit labels when tried this.
+ //if (activity.labelId) {
+ // const label = activity.label();
+ // params.label = label.name;
+ // params.labelId = activity.labelId;
+ //}
if (board) {
const watchingUsers = _.pluck(_.where(board.watchers, {level: 'watching'}), 'userId');
const trackingUsers = _.pluck(_.where(board.watchers, {level: 'tracking'}), 'userId');
diff --git a/models/attachments.js b/models/attachments.js
index 3da067de..f870861b 100644
--- a/models/attachments.js
+++ b/models/attachments.js
@@ -27,6 +27,10 @@ Attachments = new FS.Collection('attachments', {
if (Meteor.isServer) {
+ Meteor.startup(() => {
+ Attachments.files._ensureIndex({ cardId: 1 });
+ });
+
Attachments.allow({
insert(userId, doc) {
return allowIsBoardMember(userId, Boards.findOne(doc.boardId));
diff --git a/models/boards.js b/models/boards.js
index 71831a63..36651d54 100644
--- a/models/boards.js
+++ b/models/boards.js
@@ -304,10 +304,31 @@ Boards.attachSchema(new SimpleSchema({
defaultValue: false,
optional: true,
},
+ type: {
+ /**
+ * The type of board
+ */
+ type: String,
+ defaultValue: 'board',
+ },
}));
Boards.helpers({
+ copy() {
+ const oldId = this._id;
+ delete this._id;
+ const _id = Boards.insert(this);
+
+ // Copy all swimlanes in board
+ Swimlanes.find({
+ boardId: oldId,
+ archived: false,
+ }).forEach((swimlane) => {
+ swimlane.type = 'swimlane';
+ swimlane.copy(_id);
+ });
+ },
/**
* Is supplied user authorized to view this board?
*/
@@ -445,7 +466,7 @@ Boards.helpers({
},
customFields() {
- return CustomFields.find({ boardId: this._id }, { sort: { name: 1 } });
+ return CustomFields.find({ boardIds: {$in: [this._id]} }, { sort: { name: 1 } });
},
// XXX currently mutations return no value so we have an issue when using addLabel in import
@@ -456,6 +477,75 @@ Boards.helpers({
return _id;
},
+ searchBoards(term) {
+ check(term, Match.OneOf(String, null, undefined));
+
+ const query = { boardId: this._id };
+ query.type = 'cardType-linkedBoard';
+ query.archived = false;
+
+ const projection = { limit: 10, sort: { createdAt: -1 } };
+
+ if (term) {
+ const regex = new RegExp(term, 'i');
+
+ query.$or = [
+ { title: regex },
+ { description: regex },
+ ];
+ }
+
+ return Cards.find(query, projection);
+ },
+
+ searchSwimlanes(term) {
+ check(term, Match.OneOf(String, null, undefined));
+
+ const query = { boardId: this._id };
+ if (this.isTemplatesBoard()) {
+ query.type = 'template-swimlane';
+ query.archived = false;
+ } else {
+ query.type = {$nin: ['template-swimlane']};
+ }
+ const projection = { limit: 10, sort: { createdAt: -1 } };
+
+ if (term) {
+ const regex = new RegExp(term, 'i');
+
+ query.$or = [
+ { title: regex },
+ { description: regex },
+ ];
+ }
+
+ return Swimlanes.find(query, projection);
+ },
+
+ searchLists(term) {
+ check(term, Match.OneOf(String, null, undefined));
+
+ const query = { boardId: this._id };
+ if (this.isTemplatesBoard()) {
+ query.type = 'template-list';
+ query.archived = false;
+ } else {
+ query.type = {$nin: ['template-list']};
+ }
+ const projection = { limit: 10, sort: { createdAt: -1 } };
+
+ if (term) {
+ const regex = new RegExp(term, 'i');
+
+ query.$or = [
+ { title: regex },
+ { description: regex },
+ ];
+ }
+
+ return Lists.find(query, projection);
+ },
+
searchCards(term, excludeLinked) {
check(term, Match.OneOf(String, null, undefined));
@@ -463,6 +553,12 @@ Boards.helpers({
if (excludeLinked) {
query.linkedId = null;
}
+ if (this.isTemplatesBoard()) {
+ query.type = 'template-card';
+ query.archived = false;
+ } else {
+ query.type = {$nin: ['template-card']};
+ }
const projection = { limit: 10, sort: { createdAt: -1 } };
if (term) {
@@ -509,9 +605,7 @@ Boards.helpers({
title: TAPi18n.__('queue'),
boardId: this._id,
});
- Boards.update(this._id, {$set: {
- subtasksDefaultListId: this.subtasksDefaultListId,
- }});
+ this.setSubtasksDefaultListId(this.subtasksDefaultListId);
}
return this.subtasksDefaultListId;
},
@@ -559,6 +653,13 @@ Boards.helpers({
});
},
+ isTemplateBoard() {
+ return this.type === 'template-board';
+ },
+
+ isTemplatesBoard() {
+ return this.type === 'template-container';
+ },
});
@@ -907,7 +1008,7 @@ if (Meteor.isServer) {
* @param {string} userId the ID of the user to retrieve the data
* @return_type [{_id: string,
title: string}]
- */
+ */
JsonRoutes.add('GET', '/api/users/:userId/boards', function (req, res) {
try {
Authentication.checkLoggedIn(req.userId);
@@ -944,7 +1045,7 @@ if (Meteor.isServer) {
*
* @return_type [{_id: string,
title: string}]
- */
+ */
JsonRoutes.add('GET', '/api/boards', function (req, res) {
try {
Authentication.checkUserId(req.userId);
@@ -1015,7 +1116,7 @@ if (Meteor.isServer) {
*
* @return_type {_id: string,
defaultSwimlaneId: string}
- */
+ */
JsonRoutes.add('POST', '/api/boards', function (req, res) {
try {
Authentication.checkUserId(req.userId);
diff --git a/models/cardComments.js b/models/cardComments.js
index 974c5ec9..fcb97104 100644
--- a/models/cardComments.js
+++ b/models/cardComments.js
@@ -67,6 +67,12 @@ CardComments.allow({
});
CardComments.helpers({
+ copy(newCardId) {
+ this.cardId = newCardId;
+ delete this._id;
+ CardComments.insert(this);
+ },
+
user() {
return Users.findOne(this.userId);
},
diff --git a/models/cards.js b/models/cards.js
index 9b93bd7c..6de95123 100644
--- a/models/cards.js
+++ b/models/cards.js
@@ -246,7 +246,7 @@ Cards.attachSchema(new SimpleSchema({
* type of the card
*/
type: String,
- defaultValue: '',
+ defaultValue: 'cardType-card',
},
linkedId: {
/**
@@ -272,6 +272,68 @@ Cards.allow({
});
Cards.helpers({
+ copy(boardId, swimlaneId, listId) {
+ const oldBoard = Boards.findOne(this.boardId);
+ const oldBoardLabels = oldBoard.labels;
+ // Get old label names
+ const oldCardLabels = _.pluck(_.filter(oldBoardLabels, (label) => {
+ return _.contains(this.labelIds, label._id);
+ }), 'name');
+
+ const newBoard = Boards.findOne(boardId);
+ const newBoardLabels = newBoard.labels;
+ const newCardLabels = _.pluck(_.filter(newBoardLabels, (label) => {
+ return _.contains(oldCardLabels, label.name);
+ }), '_id');
+
+ const oldId = this._id;
+ const oldCard = Cards.findOne(oldId);
+
+ // Copy Custom Fields
+ if (oldBoard._id !== boardId) {
+ CustomFields.find({
+ _id: {$in: oldCard.customFields.map((cf) => { return cf._id; })},
+ }).forEach((cf) => {
+ if (!_.contains(cf.boardIds, boardId))
+ cf.addBoard(boardId);
+ });
+ }
+
+ delete this._id;
+ delete this.labelIds;
+ this.labelIds = newCardLabels;
+ this.boardId = boardId;
+ this.swimlaneId = swimlaneId;
+ this.listId = listId;
+ const _id = Cards.insert(this);
+
+ // Copy attachments
+ oldCard.attachments().forEach((att) => {
+ att.cardId = _id;
+ delete att._id;
+ return Attachments.insert(att);
+ });
+
+ // copy checklists
+ Checklists.find({cardId: oldId}).forEach((ch) => {
+ ch.copy(_id);
+ });
+
+ // copy subtasks
+ Cards.find({parentId: oldId}).forEach((subtask) => {
+ subtask.parentId = _id;
+ subtask._id = null;
+ Cards.insert(subtask);
+ });
+
+ // copy card comments
+ CardComments.find({cardId: oldId}).forEach((cmt) => {
+ cmt.copy(_id);
+ });
+
+ return _id;
+ },
+
list() {
return Lists.findOne(this.listId);
},
@@ -421,7 +483,7 @@ Cards.helpers({
// get all definitions
const definitions = CustomFields.find({
- boardId: this.boardId,
+ boardIds: {$in: [this.boardId]},
}).fetch();
// match right definition to each field
@@ -430,6 +492,9 @@ Cards.helpers({
const definition = definitions.find((definition) => {
return definition._id === customField._id;
});
+ if (!definition) {
+ return {};
+ }
//search for "True Value" which is for DropDowns other then the Value (which is the id)
let trueValue = customField.value;
if (definition.settings.dropdownItems && definition.settings.dropdownItems.length > 0) {
@@ -930,6 +995,10 @@ Cards.helpers({
return this.assignedBy;
}
},
+
+ isTemplateCard() {
+ return this.type === 'template-card';
+ },
});
Cards.mutations({
@@ -963,50 +1032,41 @@ Cards.mutations({
};
},
- setTitle(title) {
- return {
- $set: {
- title,
- },
- };
- },
+ move(boardId, swimlaneId, listId, sort) {
+ // Copy Custom Fields
+ if (this.boardId !== boardId) {
+ CustomFields.find({
+ _id: {$in: this.customFields.map((cf) => { return cf._id; })},
+ }).forEach((cf) => {
+ if (!_.contains(cf.boardIds, boardId))
+ cf.addBoard(boardId);
+ });
+ }
- setDescription(description) {
- return {
- $set: {
- description,
- },
- };
- },
+ // Get label names
+ const oldBoard = Boards.findOne(this.boardId);
+ const oldBoardLabels = oldBoard.labels;
+ const oldCardLabels = _.pluck(_.filter(oldBoardLabels, (label) => {
+ return _.contains(this.labelIds, label._id);
+ }), 'name');
- setRequestedBy(requestedBy) {
- return {
- $set: {
- requestedBy,
- },
- };
- },
+ const newBoard = Boards.findOne(boardId);
+ const newBoardLabels = newBoard.labels;
+ const newCardLabelIds = _.pluck(_.filter(newBoardLabels, (label) => {
+ return label.name && _.contains(oldCardLabels, label.name);
+ }), '_id');
- setAssignedBy(assignedBy) {
- return {
- $set: {
- assignedBy,
- },
- };
- },
-
- move(swimlaneId, listId, sortIndex) {
- const list = Lists.findOne(listId);
const mutatedFields = {
+ boardId,
swimlaneId,
listId,
- boardId: list.boardId,
- sort: sortIndex,
+ sort,
+ labelIds: newCardLabelIds,
};
- return {
+ Cards.update(this._id, {
$set: mutatedFields,
- };
+ });
},
addLabel(labelId) {
@@ -1228,9 +1288,48 @@ Cards.mutations({
//FUNCTIONS FOR creation of Activities
-function cardMove(userId, doc, fieldNames, oldListId, oldSwimlaneId) {
- if ((_.contains(fieldNames, 'listId') && doc.listId !== oldListId) ||
- (_.contains(fieldNames, 'swimlaneId') && doc.swimlaneId !== oldSwimlaneId)){
+function updateActivities(doc, fieldNames, modifier) {
+ if (_.contains(fieldNames, 'labelIds') && _.contains(fieldNames, 'boardId')) {
+ Activities.find({
+ activityType: 'addedLabel',
+ cardId: doc._id,
+ }).forEach((a) => {
+ const lidx = doc.labelIds.indexOf(a.labelId);
+ if (lidx !== -1 && modifier.$set.labelIds.length > lidx) {
+ Activities.update(a._id, {
+ $set: {
+ labelId: modifier.$set.labelIds[doc.labelIds.indexOf(a.labelId)],
+ boardId: modifier.$set.boardId,
+ },
+ });
+ } else {
+ Activities.remove(a._id);
+ }
+ });
+ } else if (_.contains(fieldNames, 'boardId')) {
+ Activities.remove({
+ activityType: 'addedLabel',
+ cardId: doc._id,
+ });
+ }
+}
+
+function cardMove(userId, doc, fieldNames, oldListId, oldSwimlaneId, oldBoardId) {
+ if (_.contains(fieldNames, 'boardId') && (doc.boardId !== oldBoardId)) {
+ Activities.insert({
+ userId,
+ activityType: 'moveCardBoard',
+ boardName: Boards.findOne(doc.boardId).title,
+ boardId: doc.boardId,
+ oldBoardId,
+ oldBoardName: Boards.findOne(oldBoardId).title,
+ cardId: doc._id,
+ swimlaneName: Swimlanes.findOne(doc.swimlaneId).title,
+ swimlaneId: doc.swimlaneId,
+ oldSwimlaneId,
+ });
+ } else if ((_.contains(fieldNames, 'listId') && doc.listId !== oldListId) ||
+ (_.contains(fieldNames, 'swimlaneId') && doc.swimlaneId !== oldSwimlaneId)){
Activities.insert({
userId,
oldListId,
@@ -1286,6 +1385,9 @@ function cardMembers(userId, doc, fieldNames, modifier) {
activityType: 'joinMember',
boardId: doc.boardId,
cardId: doc._id,
+ memberId,
+ listId: doc.listId,
+ swimlaneId: doc.swimlaneId,
});
}
}
@@ -1302,6 +1404,9 @@ function cardMembers(userId, doc, fieldNames, modifier) {
activityType: 'unjoinMember',
boardId: doc.boardId,
cardId: doc._id,
+ memberId,
+ listId: doc.listId,
+ swimlaneId: doc.swimlaneId,
});
}
}
@@ -1342,6 +1447,56 @@ function cardLabels(userId, doc, fieldNames, modifier) {
}
}
+function cardCustomFields(userId, doc, fieldNames, modifier) {
+ if (!_.contains(fieldNames, 'customFields'))
+ return;
+
+ // Say hello to the new customField value
+ if (modifier.$set) {
+ _.each(modifier.$set, (value, key) => {
+ if (key.startsWith('customFields')) {
+ const dotNotation = key.split('.');
+
+ // only individual changes are registered
+ if (dotNotation.length > 1) {
+ const customFieldId = doc.customFields[dotNotation[1]]._id;
+ const act = {
+ userId,
+ customFieldId,
+ value,
+ activityType: 'setCustomField',
+ boardId: doc.boardId,
+ cardId: doc._id,
+ };
+ Activities.insert(act);
+ }
+ }
+ });
+ }
+
+ // Say goodbye to the former customField value
+ if (modifier.$unset) {
+ _.each(modifier.$unset, (value, key) => {
+ if (key.startsWith('customFields')) {
+ const dotNotation = key.split('.');
+
+ // only individual changes are registered
+ if (dotNotation.length > 1) {
+ const customFieldId = doc.customFields[dotNotation[1]]._id;
+ const act = {
+ userId,
+ customFieldId,
+ activityType: 'unsetCustomField',
+ boardId: doc.boardId,
+ cardId: doc._id,
+ };
+ Activities.insert(act);
+ }
+ }
+ });
+ }
+}
+
function cardCreation(userId, doc) {
Activities.insert({
userId,
@@ -1363,8 +1518,8 @@ function cardRemover(userId, doc) {
Checklists.remove({
cardId: doc._id,
});
- Subtasks.remove({
- cardId: doc._id,
+ Cards.remove({
+ parentId: doc._id,
});
CardComments.remove({
cardId: doc._id,
@@ -1400,12 +1555,14 @@ if (Meteor.isServer) {
Cards.after.update(function(userId, doc, fieldNames) {
const oldListId = this.previous.listId;
const oldSwimlaneId = this.previous.swimlaneId;
- cardMove(userId, doc, fieldNames, oldListId, oldSwimlaneId);
+ const oldBoardId = this.previous.boardId;
+ cardMove(userId, doc, fieldNames, oldListId, oldSwimlaneId, oldBoardId);
});
// Add a new activity if we add or remove a member to the card
Cards.before.update((userId, doc, fieldNames, modifier) => {
cardMembers(userId, doc, fieldNames, modifier);
+ updateActivities(doc, fieldNames, modifier);
});
// Add a new activity if we add or remove a label to the card
@@ -1413,6 +1570,11 @@ if (Meteor.isServer) {
cardLabels(userId, doc, fieldNames, modifier);
});
+ // Add a new activity if we edit a custom field
+ Cards.before.update((userId, doc, fieldNames, modifier) => {
+ cardCustomFields(userId, doc, fieldNames, modifier);
+ });
+
// Remove all activities associated with a card if we remove the card
// Remove also card_comments / checklists / attachments
Cards.after.remove((userId, doc) => {
diff --git a/models/checklistItems.js b/models/checklistItems.js
index 35b18ed7..c46fe9bd 100644
--- a/models/checklistItems.js
+++ b/models/checklistItems.js
@@ -99,17 +99,6 @@ function itemCreation(userId, doc) {
}
function itemRemover(userId, doc) {
- const card = Cards.findOne(doc.cardId);
- const boardId = card.boardId;
- Activities.insert({
- userId,
- activityType: 'removedChecklistItem',
- cardId: doc.cardId,
- boardId,
- checklistId: doc.checklistId,
- checklistItemId: doc._id,
- checklistItemName:doc.title,
- });
Activities.remove({
checklistItemId: doc._id,
});
@@ -189,6 +178,7 @@ function publishChekListUncompleted(userId, doc){
if (Meteor.isServer) {
Meteor.startup(() => {
ChecklistItems._collection._ensureIndex({ checklistId: 1 });
+ ChecklistItems._collection._ensureIndex({ cardId: 1 });
});
ChecklistItems.after.update((userId, doc, fieldNames) => {
@@ -205,8 +195,19 @@ if (Meteor.isServer) {
itemCreation(userId, doc);
});
- ChecklistItems.after.remove((userId, doc) => {
+ ChecklistItems.before.remove((userId, doc) => {
itemRemover(userId, doc);
+ const card = Cards.findOne(doc.cardId);
+ const boardId = card.boardId;
+ Activities.insert({
+ userId,
+ activityType: 'removedChecklistItem',
+ cardId: doc.cardId,
+ boardId,
+ checklistId: doc.checklistId,
+ checklistItemId: doc._id,
+ checklistItemName:doc.title,
+ });
});
}
diff --git a/models/checklists.js b/models/checklists.js
index a372fafa..9e763f1a 100644
--- a/models/checklists.js
+++ b/models/checklists.js
@@ -48,6 +48,19 @@ Checklists.attachSchema(new SimpleSchema({
}));
Checklists.helpers({
+ copy(newCardId) {
+ const oldChecklistId = this._id;
+ this._id = null;
+ this.cardId = newCardId;
+ const newChecklistId = Checklists.insert(this);
+ ChecklistItems.find({checklistId: oldChecklistId}).forEach((item) => {
+ item._id = null;
+ item.checklistId = newChecklistId;
+ item.cardId = newCardId;
+ ChecklistItems.insert(item);
+ });
+ },
+
itemCount() {
return ChecklistItems.find({ checklistId: this._id }).count();
},
diff --git a/models/customFields.js b/models/customFields.js
index 3e8aa250..a67ddb7d 100644
--- a/models/customFields.js
+++ b/models/customFields.js
@@ -4,11 +4,11 @@ CustomFields = new Mongo.Collection('customFields');
* A custom field on a card in the board
*/
CustomFields.attachSchema(new SimpleSchema({
- boardId: {
+ boardIds: {
/**
* the ID of the board
*/
- type: String,
+ type: [String],
},
name: {
/**
@@ -72,17 +72,37 @@ CustomFields.attachSchema(new SimpleSchema({
},
}));
+CustomFields.mutations({
+ addBoard(boardId) {
+ if (boardId) {
+ return {
+ $push: {
+ boardIds: boardId,
+ },
+ };
+ } else {
+ return null;
+ }
+ },
+});
+
CustomFields.allow({
insert(userId, doc) {
- return allowIsBoardMember(userId, Boards.findOne(doc.boardId));
+ return allowIsAnyBoardMember(userId, Boards.find({
+ _id: {$in: doc.boardIds},
+ }).fetch());
},
update(userId, doc) {
- return allowIsBoardMember(userId, Boards.findOne(doc.boardId));
+ return allowIsAnyBoardMember(userId, Boards.find({
+ _id: {$in: doc.boardIds},
+ }).fetch());
},
remove(userId, doc) {
- return allowIsBoardMember(userId, Boards.findOne(doc.boardId));
+ return allowIsAnyBoardMember(userId, Boards.find({
+ _id: {$in: doc.boardIds},
+ }).fetch());
},
- fetch: ['userId', 'boardId'],
+ fetch: ['userId', 'boardIds'],
});
// not sure if we need this?
@@ -92,27 +112,48 @@ function customFieldCreation(userId, doc){
Activities.insert({
userId,
activityType: 'createCustomField',
- boardId: doc.boardId,
+ boardId: doc.boardIds[0], // We are creating a customField, it has only one boardId
customFieldId: doc._id,
});
}
if (Meteor.isServer) {
- /*Meteor.startup(() => {
- CustomFields._collection._ensureIndex({ boardId: 1});
- });*/
+ Meteor.startup(() => {
+ CustomFields._collection._ensureIndex({ boardIds: 1 });
+ });
CustomFields.after.insert((userId, doc) => {
customFieldCreation(userId, doc);
});
- CustomFields.after.remove((userId, doc) => {
+ CustomFields.before.update((userId, doc, fieldNames, modifier) => {
+ if (_.contains(fieldNames, 'boardIds') && modifier.$pull) {
+ Cards.update(
+ {boardId: modifier.$pull.boardIds, 'customFields._id': doc._id},
+ {$pull: {'customFields': {'_id': doc._id}}},
+ {multi: true}
+ );
+ Activities.remove({
+ customFieldId: doc._id,
+ boardId: modifier.$pull.boardIds,
+ });
+ } else if (_.contains(fieldNames, 'boardIds') && modifier.$push) {
+ Activities.insert({
+ userId,
+ activityType: 'createCustomField',
+ boardId: modifier.$push.boardIds,
+ customFieldId: doc._id,
+ });
+ }
+ });
+
+ CustomFields.before.remove((userId, doc) => {
Activities.remove({
customFieldId: doc._id,
});
Cards.update(
- {'boardId': doc.boardId, 'customFields._id': doc._id},
+ {boardId: {$in: doc.boardIds}, 'customFields._id': doc._id},
{$pull: {'customFields': {'_id': doc._id}}},
{multi: true}
);
@@ -135,7 +176,7 @@ if (Meteor.isServer) {
const paramBoardId = req.params.boardId;
JsonRoutes.sendResult(res, {
code: 200,
- data: CustomFields.find({ boardId: paramBoardId }).map(function (cf) {
+ data: CustomFields.find({ boardIds: {$in: [paramBoardId]} }).map(function (cf) {
return {
_id: cf._id,
name: cf.name,
@@ -159,7 +200,7 @@ if (Meteor.isServer) {
const paramCustomFieldId = req.params.customFieldId;
JsonRoutes.sendResult(res, {
code: 200,
- data: CustomFields.findOne({ _id: paramCustomFieldId, boardId: paramBoardId }),
+ data: CustomFields.findOne({ _id: paramCustomFieldId, boardIds: {$in: [paramBoardId]} }),
});
});
@@ -186,10 +227,10 @@ if (Meteor.isServer) {
showOnCard: req.body.showOnCard,
automaticallyOnCard: req.body.automaticallyOnCard,
showLabelOnMiniCard: req.body.showLabelOnMiniCard,
- boardId: paramBoardId,
+ boardIds: {$in: [paramBoardId]},
});
- const customField = CustomFields.findOne({_id: id, boardId: paramBoardId });
+ const customField = CustomFields.findOne({_id: id, boardIds: {$in: [paramBoardId]} });
customFieldCreation(req.body.authorId, customField);
JsonRoutes.sendResult(res, {
@@ -214,7 +255,7 @@ if (Meteor.isServer) {
Authentication.checkUserId( req.userId);
const paramBoardId = req.params.boardId;
const id = req.params.customFieldId;
- CustomFields.remove({ _id: id, boardId: paramBoardId });
+ CustomFields.remove({ _id: id, boardIds: {$in: [paramBoardId]} });
JsonRoutes.sendResult(res, {
code: 200,
data: {
diff --git a/models/export.js b/models/export.js
index f7f2b713..d402efe3 100644
--- a/models/export.js
+++ b/models/export.js
@@ -68,7 +68,7 @@ export class Exporter {
result.lists = Lists.find(byBoard, noBoardId).fetch();
result.cards = Cards.find(byBoardNoLinked, noBoardId).fetch();
result.swimlanes = Swimlanes.find(byBoard, noBoardId).fetch();
- result.customFields = CustomFields.find(byBoard, noBoardId).fetch();
+ result.customFields = CustomFields.find({boardIds: {$in: [this.boardId]}}, {fields: {boardId: 0}}).fetch();
result.comments = CardComments.find(byBoard, noBoardId).fetch();
result.activities = Activities.find(byBoard, noBoardId).fetch();
result.rules = Rules.find(byBoard, noBoardId).fetch();
diff --git a/models/import.js b/models/import.js
index bf3a863e..f7099282 100644
--- a/models/import.js
+++ b/models/import.js
@@ -5,10 +5,10 @@ import wekanMembersMapper from './wekanmapper';
Meteor.methods({
importBoard(board, data, importSource, currentBoard) {
- //check(board, Object);
- //check(data, Object);
- //check(importSource, String);
- //check(currentBoard, Match.Maybe(String));
+ check(board, Object);
+ check(data, Object);
+ check(importSource, String);
+ check(currentBoard, Match.Maybe(String));
let creator;
switch (importSource) {
case 'trello':
diff --git a/models/integrations.js b/models/integrations.js
index 1c473b57..65a7af63 100644
--- a/models/integrations.js
+++ b/models/integrations.js
@@ -88,6 +88,10 @@ Integrations.allow({
//INTEGRATIONS REST API
if (Meteor.isServer) {
+ Meteor.startup(() => {
+ Integrations._collection._ensureIndex({ boardId: 1 });
+ });
+
/**
* @operation get_all_integrations
* @summary Get all integrations in board
diff --git a/models/lists.js b/models/lists.js
index 54e7d037..a8e597ee 100644
--- a/models/lists.js
+++ b/models/lists.js
@@ -27,6 +27,13 @@ Lists.attachSchema(new SimpleSchema({
*/
type: String,
},
+ swimlaneId: {
+ /**
+ * the swimlane associated to this list. Used for templates
+ */
+ type: String,
+ defaultValue: '',
+ },
createdAt: {
/**
* creation date
@@ -107,6 +114,13 @@ Lists.attachSchema(new SimpleSchema({
'saddlebrown', 'paleturquoise', 'mistyrose', 'indigo',
],
},
+ type: {
+ /**
+ * The type of list
+ */
+ type: String,
+ defaultValue: 'list',
+ },
}));
Lists.allow({
@@ -123,6 +137,36 @@ Lists.allow({
});
Lists.helpers({
+ copy(boardId, swimlaneId) {
+ const oldId = this._id;
+ const oldSwimlaneId = this.swimlaneId || null;
+ this.boardId = boardId;
+ this.swimlaneId = swimlaneId;
+
+ let _id = null;
+ existingListWithSameName = Lists.findOne({
+ boardId,
+ title: this.title,
+ archived: false,
+ });
+ if (existingListWithSameName) {
+ _id = existingListWithSameName._id;
+ } else {
+ delete this._id;
+ delete this.swimlaneId;
+ _id = Lists.insert(this);
+ }
+
+ // Copy all cards in list
+ Cards.find({
+ swimlaneId: oldSwimlaneId,
+ listId: oldId,
+ archived: false,
+ }).forEach((card) => {
+ card.copy(boardId, swimlaneId, _id);
+ });
+ },
+
cards(swimlaneId) {
const selector = {
listId: this._id,
@@ -169,6 +213,10 @@ Lists.helpers({
return this.color;
return '';
},
+
+ isTemplateList() {
+ return this.type === 'template-list';
+ },
});
Lists.mutations({
@@ -177,10 +225,20 @@ Lists.mutations({
},
archive() {
+ if (this.isTemplateList()) {
+ this.cards().forEach((card) => {
+ return card.archive();
+ });
+ }
return { $set: { archived: true } };
},
restore() {
+ if (this.isTemplateList()) {
+ this.allCards().forEach((card) => {
+ return card.restore();
+ });
+ }
return { $set: { archived: false } };
},
diff --git a/models/settings.js b/models/settings.js
index 4fcc36ac..e0f94fca 100644
--- a/models/settings.js
+++ b/models/settings.js
@@ -231,7 +231,7 @@ if (Meteor.isServer) {
const setting = Settings.findOne({});
if (!setting.productName) {
return {
- productName: 'Wekan',
+ productName: '',
};
} else {
return {
diff --git a/models/swimlanes.js b/models/swimlanes.js
index e2c3925c..9da4afb5 100644
--- a/models/swimlanes.js
+++ b/models/swimlanes.js
@@ -78,6 +78,13 @@ Swimlanes.attachSchema(new SimpleSchema({
}
},
},
+ type: {
+ /**
+ * The type of swimlane
+ */
+ type: String,
+ defaultValue: 'swimlane',
+ },
}));
Swimlanes.allow({
@@ -94,6 +101,30 @@ Swimlanes.allow({
});
Swimlanes.helpers({
+ copy(boardId) {
+ const oldId = this._id;
+ const oldBoardId = this.boardId;
+ this.boardId = boardId;
+ delete this._id;
+ const _id = Swimlanes.insert(this);
+
+ const query = {
+ swimlaneId: {$in: [oldId, '']},
+ archived: false,
+ };
+ if (oldBoardId) {
+ query.boardId = oldBoardId;
+ }
+
+ // Copy all lists in swimlane
+ Lists.find(query).forEach((list) => {
+ list.type = 'list';
+ list.swimlaneId = oldId;
+ list.boardId = boardId;
+ list.copy(boardId, _id);
+ });
+ },
+
cards() {
return Cards.find(Filter.mongoSelector({
swimlaneId: this._id,
@@ -101,6 +132,18 @@ Swimlanes.helpers({
}), { sort: ['sort'] });
},
+ lists() {
+ return Lists.find({
+ boardId: this.boardId,
+ swimlaneId: {$in: [this._id, '']},
+ archived: false,
+ }, { sort: ['sort'] });
+ },
+
+ myLists() {
+ return Lists.find({ swimlaneId: this._id });
+ },
+
allCards() {
return Cards.find({ swimlaneId: this._id });
},
@@ -114,6 +157,29 @@ Swimlanes.helpers({
return this.color;
return '';
},
+
+ isTemplateSwimlane() {
+ return this.type === 'template-swimlane';
+ },
+
+ isTemplateContainer() {
+ return this.type === 'template-container';
+ },
+
+ isListTemplatesSwimlane() {
+ const user = Users.findOne(Meteor.userId());
+ return user.profile.listTemplatesSwimlaneId === this._id;
+ },
+
+ isCardTemplatesSwimlane() {
+ const user = Users.findOne(Meteor.userId());
+ return user.profile.cardTemplatesSwimlaneId === this._id;
+ },
+
+ isBoardTemplatesSwimlane() {
+ const user = Users.findOne(Meteor.userId());
+ return user.profile.boardTemplatesSwimlaneId === this._id;
+ },
});
Swimlanes.mutations({
@@ -122,10 +188,20 @@ Swimlanes.mutations({
},
archive() {
+ if (this.isTemplateSwimlane()) {
+ this.myLists().forEach((list) => {
+ return list.archive();
+ });
+ }
return { $set: { archived: true } };
},
restore() {
+ if (this.isTemplateSwimlane()) {
+ this.myLists().forEach((list) => {
+ return list.restore();
+ });
+ }
return { $set: { archived: false } };
},
diff --git a/models/users.js b/models/users.js
index 0fdf21a8..0dd9c1d6 100644
--- a/models/users.js
+++ b/models/users.js
@@ -159,6 +159,34 @@ Users.attachSchema(new SimpleSchema({
'board-view-cal',
],
},
+ 'profile.templatesBoardId': {
+ /**
+ * Reference to the templates board
+ */
+ type: String,
+ defaultValue: '',
+ },
+ 'profile.cardTemplatesSwimlaneId': {
+ /**
+ * Reference to the card templates swimlane Id
+ */
+ type: String,
+ defaultValue: '',
+ },
+ 'profile.listTemplatesSwimlaneId': {
+ /**
+ * Reference to the list templates swimlane Id
+ */
+ type: String,
+ defaultValue: '',
+ },
+ 'profile.boardTemplatesSwimlaneId': {
+ /**
+ * Reference to the board templates swimlane Id
+ */
+ type: String,
+ defaultValue: '',
+ },
services: {
/**
* services field of the user
@@ -328,6 +356,14 @@ Users.helpers({
const profile = this.profile || {};
return profile.language || 'en';
},
+
+ getTemplatesBoardId() {
+ return this.profile.templatesBoardId;
+ },
+
+ getTemplatesBoardSlug() {
+ return Boards.findOne(this.profile.templatesBoardId).slug;
+ },
});
Users.mutations({
@@ -559,7 +595,7 @@ if (Meteor.isServer) {
});
Accounts.onCreateUser((options, user) => {
const userCount = Users.find().count();
- if (!isSandstorm && userCount === 0) {
+ if (userCount === 0) {
user.isAdmin = true;
return user;
}
@@ -675,7 +711,6 @@ if (Meteor.isServer) {
CollectionHooks.getUserId = () => {
return fakeUserId.get() || getUserId();
};
-
if (!isSandstorm) {
Users.after.insert((userId, doc) => {
const fakeUser = {
@@ -685,6 +720,7 @@ if (Meteor.isServer) {
};
fakeUserId.withValue(doc._id, () => {
+ /*
// Insert the Welcome Board
Boards.insert({
title: TAPi18n.__('welcome-board'),
@@ -701,6 +737,53 @@ if (Meteor.isServer) {
Lists.insert({title: TAPi18n.__(title), boardId, sort: titleIndex}, fakeUser);
});
});
+ */
+
+ Boards.insert({
+ title: TAPi18n.__('templates'),
+ permission: 'private',
+ type: 'template-container',
+ }, fakeUser, (err, boardId) => {
+
+ // Insert the reference to our templates board
+ Users.update(fakeUserId.get(), {$set: {'profile.templatesBoardId': boardId}});
+
+ // Insert the card templates swimlane
+ Swimlanes.insert({
+ title: TAPi18n.__('card-templates-swimlane'),
+ boardId,
+ sort: 1,
+ type: 'template-container',
+ }, fakeUser, (err, swimlaneId) => {
+
+ // Insert the reference to out card templates swimlane
+ Users.update(fakeUserId.get(), {$set: {'profile.cardTemplatesSwimlaneId': swimlaneId}});
+ });
+
+ // Insert the list templates swimlane
+ Swimlanes.insert({
+ title: TAPi18n.__('list-templates-swimlane'),
+ boardId,
+ sort: 2,
+ type: 'template-container',
+ }, fakeUser, (err, swimlaneId) => {
+
+ // Insert the reference to out list templates swimlane
+ Users.update(fakeUserId.get(), {$set: {'profile.listTemplatesSwimlaneId': swimlaneId}});
+ });
+
+ // Insert the board templates swimlane
+ Swimlanes.insert({
+ title: TAPi18n.__('board-templates-swimlane'),
+ boardId,
+ sort: 3,
+ type: 'template-container',
+ }, fakeUser, (err, swimlaneId) => {
+
+ // Insert the reference to out board templates swimlane
+ Users.update(fakeUserId.get(), {$set: {'profile.boardTemplatesSwimlaneId': swimlaneId}});
+ });
+ });
});
});
}
diff --git a/models/wekanCreator.js b/models/wekanCreator.js
index acf77734..d0494a76 100644
--- a/models/wekanCreator.js
+++ b/models/wekanCreator.js
@@ -323,6 +323,10 @@ export class WekanCreator {
cardToCreate.members = wekanMembers;
}
}
+ // set color
+ if (card.color) {
+ cardToCreate.color = card.color;
+ }
// insert card
const cardId = Cards.direct.insert(cardToCreate);
// keep track of Wekan id => Wekan id
@@ -509,6 +513,10 @@ export class WekanCreator {
title: swimlane.title,
sort: swimlane.sort ? swimlane.sort : swimlaneIndex,
};
+ // set color
+ if (swimlane.color) {
+ swimlaneToCreate.color = swimlane.color;
+ }
const swimlaneId = Swimlanes.direct.insert(swimlaneToCreate);
Swimlanes.direct.update(swimlaneId, {
$set: {
diff --git a/openapi/README.md b/openapi/README.md
index c353ffd4..e3fb7fd9 100644
--- a/openapi/README.md
+++ b/openapi/README.md
@@ -20,7 +20,7 @@ Now that we have the OpenAPI, it's easy enough to convert the YAML file into som
[shins](https://github.com/Mermade/shins) and [api2html](https://github.com/tobilg/api2html),
or even [ReDoc](https://github.com/Rebilly/ReDoc):
- api2html -c ../public/wekan-logo-header.png -o api.html ../public/wekan_api.yml
+ api2html -c ../public/logo-header.png -o api.html ../public/wekan_api.yml
or
diff --git a/package.json b/package.json
index 182feb88..690b5cc3 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "wekan",
- "version": "v2.21.0",
+ "version": "v2.57.0",
"description": "Open-Source kanban",
"private": true,
"scripts": {
diff --git a/public/wekan-logo-header.png b/public/logo-header.png
index 16ffa102..16ffa102 100644
--- a/public/wekan-logo-header.png
+++ b/public/logo-header.png
Binary files differ
diff --git a/public/old-wekan-logo.png b/public/old-wekan-logo.png
deleted file mode 100644
index 6a2740f2..00000000
--- a/public/old-wekan-logo.png
+++ /dev/null
Binary files differ
diff --git a/public/wekan-150.png b/public/wekan-logo-150.png
index e8e89c62..e8e89c62 100644
--- a/public/wekan-150.png
+++ b/public/wekan-logo-150.png
Binary files differ
diff --git a/public/wekan-150.svg b/public/wekan-logo-150.svg
index 51d4eede..51d4eede 100644
--- a/public/wekan-150.svg
+++ b/public/wekan-logo-150.svg
diff --git a/public/wekan-logo.png b/public/wekan-logo.png
index b553239e..6a2740f2 100644
--- a/public/wekan-logo.png
+++ b/public/wekan-logo.png
Binary files differ
diff --git a/public/wekan-manifest.json b/public/wekan-manifest.json
index a1c18518..ee223e8c 100644
--- a/public/wekan-manifest.json
+++ b/public/wekan-manifest.json
@@ -1,16 +1,16 @@
{
"name": "Wekan",
"short_name": "Wekan",
- "description": "The open-source Trello-like kanban",
+ "description": "The open-source kanban",
"lang": "en-US",
"icons": [
{
- "src": "/wekan-150.png",
+ "src": "/wekan-logo-150.png",
"type": "image/png",
"sizes": "150x150"
},
{
- "src": "/wekan-150.svg",
+ "src": "/wekan-logo-150.svg",
"type": "image/svg+xml",
"sizes": "150x150"
}
diff --git a/rebuild-wekan.bat b/rebuild-wekan.bat
index 48ef393b..ca4d7f61 100644
--- a/rebuild-wekan.bat
+++ b/rebuild-wekan.bat
@@ -1,6 +1,7 @@
@ECHO OFF
-REM IN PROGRESS: Build on Windows.
+REM NOTE: THIS .BAT DOES NOT WORK !!
+REM Use instead this webpage instructions to build on Windows:
REM https://github.com/wekan/wekan/wiki/Install-Wekan-from-source-on-Windows
REM Please add fix PRs, like config of MongoDB etc.
@@ -34,6 +35,10 @@ git clone --depth 1 -b master https://github.com/meteor-useraccounts/core.git me
git clone --depth 1 -b master https://github.com/wekan/meteor-accounts-cas.git
git clone --depth 1 -b master https://github.com/wekan/wekan-ldap.git
git clone --depth 1 -b master https://github.com/wekan/wekan-scrollbar.git
+git clone --depth 1 -b master https://github.com/wekan/meteor-accounts-oidc.git
+move meteor-accounts-oidc/packages/switch_accounts-oidc wekan_accounts-oidc
+move meteor-accounts-oidc/packages/switch_oidc wekan_oidc
+del /S /F /Q meteor-accounts-oidc
REM sed -i 's/api\.versionsFrom/\/\/api.versionsFrom/' ~/repos/wekan/packages/meteor-useraccounts-core/package.js
cd ..
REM del /S /F /Q node_modules
diff --git a/rebuild-wekan.sh b/rebuild-wekan.sh
index 1b2016d0..21254918 100755
--- a/rebuild-wekan.sh
+++ b/rebuild-wekan.sh
@@ -72,8 +72,9 @@ do
if [[ "$OSTYPE" == "linux-gnu" ]]; then
echo "Linux";
# Debian, Ubuntu, Mint
- sudo apt-get install -y build-essential git curl wget
+ sudo apt-get install -y build-essential gcc g++ make git curl wget
curl -sL https://deb.nodesource.com/setup_8.x | sudo -E bash -
+ sudo apt-get install -y nodejs
elif [[ "$OSTYPE" == "darwin"* ]]; then
echo "macOS";
pause '1) Install XCode 2) Install Node 8.x from https://nodejs.org/en/ 3) Press [Enter] key to continue.'
@@ -118,6 +119,10 @@ do
git clone --depth 1 -b master https://github.com/wekan/meteor-accounts-cas.git
git clone --depth 1 -b master https://github.com/wekan/wekan-ldap.git
git clone --depth 1 -b master https://github.com/wekan/wekan-scrollbar.git
+ git clone --depth 1 -b master https://github.com/wekan/meteor-accounts-oidc.git
+ mv meteor-accounts-oidc/packages/switch_accounts-oidc wekan_accounts-oidc
+ mv meteor-accounts-oidc/packages/switch_oidc wekan_oidc
+ rm -rf meteor-accounts-oidc
if [[ "$OSTYPE" == "darwin"* ]]; then
echo "sed at macOS";
sed -i '' 's/api\.versionsFrom/\/\/api.versionsFrom/' ~/repos/wekan/packages/meteor-useraccounts-core/package.js
diff --git a/releases/rebuild-release.sh b/releases/rebuild-release.sh
index 9000334b..ce3d445d 100755
--- a/releases/rebuild-release.sh
+++ b/releases/rebuild-release.sh
@@ -5,11 +5,14 @@
rm -rf packages
mkdir -p ~/repos/wekan/packages
cd ~/repos/wekan/packages
- git clone --depth 1 -b master https://github.com/wekan/flow-router.git kadira-flow-router
- git clone --depth 1 -b master https://github.com/meteor-useraccounts/core.git meteor-useraccounts-core
- git clone --depth 1 -b master https://github.com/wekan/meteor-accounts-cas.git
- git clone --depth 1 -b master https://github.com/wekan/wekan-ldap.git
- git clone --depth 1 -b master https://github.com/wekan/wekan-scrollbar.git
+ git clone --depth 1 -b master https://github.com/wekan/flow-router.git kadira-flow-router
+ git clone --depth 1 -b master https://github.com/meteor-useraccounts/core.git meteor-useraccounts-core
+ git clone --depth 1 -b master https://github.com/wekan/meteor-accounts-cas.git
+ git clone --depth 1 -b master https://github.com/wekan/wekan-ldap.git
+ git clone --depth 1 -b master https://github.com/wekan/wekan-scrollbar.git
+ git clone --depth 1 -b master https://github.com/wekan/meteor-accounts-oidc.git
+ mv meteor-accounts-oidc/packages/switch_accounts-oidc wekan_accounts-oidc
+ mv meteor-accounts-oidc/packages/switch_oidc wekan_oidc
if [[ "$OSTYPE" == "darwin"* ]]; then
echo "sed at macOS";
diff --git a/releases/rebuild-wekan.sh b/releases/rebuild-wekan.sh
new file mode 100755
index 00000000..bee5a228
--- /dev/null
+++ b/releases/rebuild-wekan.sh
@@ -0,0 +1,135 @@
+#!/bin/bash
+
+echo "Note: If you use other locale than en_US.UTF-8 , you need to additionally install en_US.UTF-8"
+echo " with 'sudo dpkg-reconfigure locales' , so that MongoDB works correctly."
+echo " You can still use any other locale as your main locale."
+
+X64NODE="https://releases.wekan.team/node-v8.11.3-linux-x64.tar.gz"
+
+function pause(){
+ read -p "$*"
+}
+
+echo
+PS3='Please enter your choice: '
+options=("Install Wekan dependencies" "Build Wekan" "Quit")
+select opt in "${options[@]}"
+do
+ case $opt in
+ "Install Wekan dependencies")
+
+ if [[ "$OSTYPE" == "linux-gnu" ]]; then
+ echo "Linux";
+
+ if [ "$(grep -Ei 'buntu|mint' /etc/*release)" ]; then
+ sudo apt install -y build-essential git curl wget
+# sudo apt -y install nodejs npm
+# sudo npm -g install n
+# sudo n 8.11.3
+ fi
+
+# if [ "$(grep -Ei 'debian' /etc/*release)" ]; then
+# sudo apt install -y build-essential git curl wget
+# echo "Debian, or Debian on Windows Subsystem for Linux"
+# curl -sL https://deb.nodesource.com/setup_8.x | sudo -E bash -
+# sudo apt install -y nodejs
+# fi
+
+ # TODO: Add Sandstorm for version of Node.js install
+ #MACHINE_TYPE=`uname -m`
+ #if [ ${MACHINE_TYPE} == 'x86_64' ]; then
+ # # 64-bit stuff here
+ # wget ${X64NODE}
+ # sudo tar -C /usr/local --strip-components 1 -xzf ${X64NODE}
+ #elif [ ${MACHINE_TYPE} == '32bit' ]; then
+ # echo "TODO: 32-bit Linux install here"
+ # exit
+ #fi
+ elif [[ "$OSTYPE" == "darwin"* ]]; then
+ echo "macOS";
+ pause '1) Install XCode 2) Install Node 8.x from https://nodejs.org/en/ 3) Press [Enter] key to continue.'
+ elif [[ "$OSTYPE" == "cygwin" ]]; then
+ # POSIX compatibility layer and Linux environment emulation for Windows
+ echo "TODO: Add Cygwin";
+ exit;
+ elif [[ "$OSTYPE" == "msys" ]]; then
+ # Lightweight shell and GNU utilities compiled for Windows (part of MinGW)
+ echo "TODO: Add msys on Windows";
+ exit;
+ elif [[ "$OSTYPE" == "win32" ]]; then
+ # I'm not sure this can happen.
+ echo "TODO: Add Windows";
+ exit;
+ elif [[ "$OSTYPE" == "freebsd"* ]]; then
+ echo "TODO: Add FreeBSD";
+ exit;
+ else
+ echo "Unknown"
+ echo ${OSTYPE}
+ exit;
+ fi
+
+ ## Latest npm with Meteor 1.6
+ sudo npm -g install npm
+ sudo npm -g install node-gyp
+ # Latest fibers for Meteor 1.6
+ sudo npm -g install fibers@2.0.0
+ # Install Meteor, if it's not yet installed
+ curl https://install.meteor.com | bash
+# mkdir ~/repos
+# cd ~/repos
+# git clone https://github.com/wekan/wekan.git
+# cd wekan
+# git checkout devel
+ break
+ ;;
+ "Build Wekan")
+ echo "Building Wekan."
+ cd ~/repos/wekan
+ rm -rf packages
+ mkdir -p ~/repos/wekan/packages
+ cd ~/repos/wekan/packages
+ git clone --depth 1 -b master https://github.com/wekan/flow-router.git kadira-flow-router
+ git clone --depth 1 -b master https://github.com/meteor-useraccounts/core.git meteor-useraccounts-core
+ git clone --depth 1 -b master https://github.com/wekan/meteor-accounts-cas.git
+ git clone --depth 1 -b master https://github.com/wekan/wekan-ldap.git
+ git clone --depth 1 -b master https://github.com/wekan/wekan-scrollbar.git
+ git clone --depth 1 -b master https://github.com/wekan/meteor-accounts-oidc.git
+ mv meteor-accounts-oidc/packages/switch_accounts-oidc wekan_accounts-oidc
+ mv meteor-accounts-oidc/packages/switch_oidc wekan_oidc
+ rm -rf meteor-accounts-oidc
+
+ if [[ "$OSTYPE" == "darwin"* ]]; then
+ echo "sed at macOS";
+ sed -i '' 's/api\.versionsFrom/\/\/api.versionsFrom/' ~/repos/wekan/packages/meteor-useraccounts-core/package.js
+ else
+ echo "sed at ${OSTYPE}"
+ sed -i 's/api\.versionsFrom/\/\/api.versionsFrom/' ~/repos/wekan/packages/meteor-useraccounts-core/package.js
+ fi
+
+ cd ~/repos/wekan
+ rm -rf node_modules
+ meteor npm install
+ rm -rf .build
+ meteor build .build --directory
+ cp -f fix-download-unicode/cfs_access-point.txt .build/bundle/programs/server/packages/cfs_access-point.js
+ #Removed binary version of bcrypt because of security vulnerability that is not fixed yet.
+ #https://github.com/wekan/wekan/commit/4b2010213907c61b0e0482ab55abb06f6a668eac
+ #https://github.com/wekan/wekan/commit/7eeabf14be3c63fae2226e561ef8a0c1390c8d3c
+ #cd ~/repos/wekan/.build/bundle/programs/server/npm/node_modules/meteor/npm-bcrypt
+ #rm -rf node_modules/bcrypt
+ #meteor npm install bcrypt
+ cd ~/repos/wekan/.build/bundle/programs/server
+ rm -rf node_modules
+ meteor npm install
+ #meteor npm install bcrypt
+ cd ~/repos
+ echo Done.
+ break
+ ;;
+ "Quit")
+ break
+ ;;
+ *) echo invalid option;;
+ esac
+done
diff --git a/releases/release-sandstorm.sh b/releases/release-sandstorm.sh
index e696eab4..89dfc4fc 100755
--- a/releases/release-sandstorm.sh
+++ b/releases/release-sandstorm.sh
@@ -12,7 +12,8 @@ cd ~/repos
cd ~/repos/wekan
meteor-spk pack wekan-$1.spk
spk publish wekan-$1.spk
-scp wekan-$1.spk x2:/var/snap/wekan/common/releases.wekan.team/
+#scp wekan-$1.spk x2:/var/snap/wekan/common/releases.wekan.team/
+scp wekan-$1.spk x2:/var/www/releases.wekan.team/
mv wekan-$1.spk ..
# Delete old stuff
diff --git a/releases/release-snap.sh b/releases/release-snap.sh
index 127334c3..6ef37bff 100755
--- a/releases/release-snap.sh
+++ b/releases/release-snap.sh
@@ -22,5 +22,6 @@ cd ~/repos/wekan
sudo snap install --dangerous wekan_$1_amd64.snap
echo "Now you can test local installed snap."
snapcraft push wekan_$1_amd64.snap
-scp wekan_$1_amd64.snap x2:/var/snap/wekan/common/releases.wekan.team/
+#scp wekan_$1_amd64.snap x2:/var/snap/wekan/common/releases.wekan.team/
+scp wekan_$1_amd64.snap x2:/var/www/releases.wekan.team/
mv wekan_$1_amd64.snap ..
diff --git a/releases/release.sh b/releases/release.sh
index 85c60b17..3206b7f1 100755
--- a/releases/release.sh
+++ b/releases/release.sh
@@ -1,9 +1,7 @@
# Usage: ./release.sh 1.36
# Build Sandstorm
-cd ~/repos/wekan
-./releases/release-sandstorm.sh $1
+./release-sandstorm.sh $1
# Build Snap
-cd ~/repos/wekan
-./releases/release-snap.sh $1
+./release-snap.sh $1
diff --git a/releases/translations/pull-translations.sh b/releases/translations/pull-translations.sh
index bea4d0cb..4639149f 100755
--- a/releases/translations/pull-translations.sh
+++ b/releases/translations/pull-translations.sh
@@ -99,6 +99,9 @@ tx pull -f -l nl
echo "Norwegian:"
tx pull -f -l no
+echo "Occitan:"
+tx pull -f -l oc
+
echo "Polish:"
tx pull -f -l pl
diff --git a/releases/virtualbox/rebuild-wekan.sh b/releases/virtualbox/rebuild-wekan.sh
index 7501cee1..546e9d1e 100755
--- a/releases/virtualbox/rebuild-wekan.sh
+++ b/releases/virtualbox/rebuild-wekan.sh
@@ -71,7 +71,10 @@ do
git clone --depth 1 -b master https://github.com/wekan/meteor-accounts-cas.git
git clone --depth 1 -b master https://github.com/wekan/wekan-ldap.git
git clone --depth 1 -b master https://github.com/wekan/wekan-scrollbar.git
-
+ git clone --depth 1 -b master https://github.com/wekan/meteor-accounts-oidc.git
+ mv meteor-accounts-oidc/packages/switch_accounts-oidc wekan_accounts-oidc
+ mv meteor-accounts-oidc/packages/switch_oidc wekan_oidc
+ rm -rf meteor-accounts-oidc
if [[ "$OSTYPE" == "darwin"* ]]; then
echo "sed at macOS";
sed -i '' 's/api\.versionsFrom/\/\/api.versionsFrom/' ~/repos/wekan/packages/meteor-useraccounts-core/package.js
diff --git a/releases/virtualbox/start-wekan.sh b/releases/virtualbox/start-wekan.sh
index 31d4df58..77fbdd54 100755
--- a/releases/virtualbox/start-wekan.sh
+++ b/releases/virtualbox/start-wekan.sh
@@ -25,6 +25,16 @@
# Wekan Export Board works when WITH_API='true'.
# If you disable Wekan API, Export Board does not work.
export WITH_API='true'
+ #---------------------------------------------------------------
+ # ==== PASSWORD BRUTE FORCE PROTECTION ====
+ #https://atmospherejs.com/lucasantoniassi/accounts-lockout
+ #Defaults below. Uncomment to change. wekan/server/accounts-lockout.js
+ #export ACCOUNTS_LOCKOUT_KNOWN_USERS_FAILURES_BEFORE=3
+ #export ACCOUNTS_LOCKOUT_KNOWN_USERS_PERIOD=60
+ #export ACCOUNTS_LOCKOUT_KNOWN_USERS_FAILURE_WINDOW=15
+ #export ACCOUNTS_LOCKOUT_UNKNOWN_USERS_FAILURES_BERORE=3
+ #export ACCOUNTS_LOCKOUT_UNKNOWN_USERS_LOCKOUT_PERIOD=60
+ #export ACCOUNTS_LOCKOUT_UNKNOWN_USERS_FAILURE_WINDOW=15
#---------------------------------------------
# CORS: Set Access-Control-Allow-Origin header. Example: *
#export CORS=*
@@ -61,6 +71,8 @@
# 2) Configure the environment variables. This differs slightly
# by installation type, but make sure you have the following:
#export OAUTH2_ENABLED=true
+ # OAuth2 login style: popup or redirect.
+ #export OAUTH2_LOGIN_STYLE=redirect
# Application GUID captured during app registration:
#export OAUTH2_CLIENT_ID=xxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx
# Secret key generated during app registration:
@@ -81,6 +93,8 @@
# ==== OAUTH2 KEYCLOAK ====
# https://github.com/wekan/wekan/wiki/Keycloak <== MAPPING INFO, REQUIRED
#export OAUTH2_ENABLED=true
+ # OAuth2 login style: popup or redirect.
+ #export OAUTH2_LOGIN_STYLE=redirect
#export OAUTH2_CLIENT_ID=<Keycloak create Client ID>
#export OAUTH2_SERVER_URL=<Keycloak server name>/auth
#export OAUTH2_AUTH_ENDPOINT=/realms/<keycloak realm>/protocol/openid-connect/auth
@@ -89,11 +103,13 @@
#export OAUTH2_SECRET=<keycloak client secret>
#-----------------------------------------------------------------
# ==== OAUTH2 DOORKEEPER ====
+ # OAuth2 docs: https://github.com/wekan/wekan/wiki/OAuth2
# https://github.com/wekan/wekan/issues/1874
# https://github.com/wekan/wekan/wiki/OAuth2
# Enable the OAuth2 connection
#export OAUTH2_ENABLED=true
- # OAuth2 docs: https://github.com/wekan/wekan/wiki/OAuth2
+ # OAuth2 login style: popup or redirect.
+ #export OAUTH2_LOGIN_STYLE=redirect
# OAuth2 Client ID.
#export OAUTH2_CLIENT_ID=abcde12345
# OAuth2 Secret.
@@ -223,6 +239,18 @@
# LDAP_MERGE_EXISTING_USERS :
# example : export LDAP_MERGE_EXISTING_USERS=true
#export LDAP_MERGE_EXISTING_USERS=false
+ # LDAP_EMAIL_MATCH_ENABLE : allow existing account matching by e-mail address when username does not match
+ # example: LDAP_EMAIL_MATCH_ENABLE=true
+ #export LDAP_EMAIL_MATCH_ENABLE=false
+ # LDAP_EMAIL_MATCH_REQUIRE : require existing account matching by e-mail address when username does match
+ # example: LDAP_EMAIL_MATCH_REQUIRE=true
+ #export LDAP_EMAIL_MATCH_REQUIRE=false
+ # LDAP_EMAIL_MATCH_VERIFIED : require existing account email address to be verified for matching
+ # example: LDAP_EMAIL_MATCH_VERIFIED=true
+ #export LDAP_EMAIL_MATCH_VERIFIED=false
+ # LDAP_EMAIL_FIELD : which field contains the LDAP e-mail address
+ # example: LDAP_EMAIL_FIELD=mail
+ #export LDAP_EMAIL_FIELD=
# LDAP_SYNC_USER_DATA :
# example : export LDAP_SYNC_USER_DATA=true
#export LDAP_SYNC_USER_DATA=false
@@ -235,6 +263,18 @@
# LDAP_DEFAULT_DOMAIN : The default domain of the ldap it is used to create email if the field is not map correctly with the LDAP_SYNC_USER_DATA_FIELDMAP
# example :
#export LDAP_DEFAULT_DOMAIN=
+ # Enable/Disable syncing of admin status based on ldap groups:
+ #export LDAP_SYNC_ADMIN_STATUS=true
+ # Comma separated list of admin group names.
+ #export LDAP_SYNC_ADMIN_GROUPS=group1,group2
+ #---------------------------------------------------------------------
+ # Login to LDAP automatically with HTTP header.
+ # In below example for siteminder, at right side of = is header name.
+ #export HEADER_LOGIN_ID=BNPPUID
+ #export HEADER_LOGIN_FIRSTNAME=BNPPFIRSTNAME
+ #export HEADER_LOGIN_LASTNAME=BNPPLASTNAME
+ #export HEADER_LOGIN_EMAIL=BNPPEMAILADDRESS
+ #---------------------------------------------------------------------
# LOGOUT_WITH_TIMER : Enables or not the option logout with timer
# example : LOGOUT_WITH_TIMER=true
#export LOGOUT_WITH_TIMER=
diff --git a/sandstorm-pkgdef.capnp b/sandstorm-pkgdef.capnp
index c224f649..7a3b55d8 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 = 223,
+ appVersion = 259,
# Increment this for every release.
- appMarketingVersion = (defaultText = "2.21.0~2019-02-12"),
+ appMarketingVersion = (defaultText = "2.57.0~2019-04-02"),
# Human-readable presentation of the app version.
minUpgradableAppVersion = 0,
diff --git a/sandstorm.js b/sandstorm.js
index 37dced92..de003a6f 100644
--- a/sandstorm.js
+++ b/sandstorm.js
@@ -435,12 +435,12 @@ if (isSandstorm && Meteor.isClient) {
//
// XXX Hack. The home route is already defined at this point so we need to
// add the redirection trigger to the internal route object.
- FlowRouter._routesMap.home._triggersEnter.push((context, redirect) => {
- redirect(FlowRouter.path('board', {
- id: sandstormBoard._id,
- slug: sandstormBoard.slug,
- }));
- });
+ //FlowRouter._routesMap.home._triggersEnter.push((context, redirect) => {
+ // redirect(FlowRouter.path('board', {
+ // id: sandstormBoard._id,
+ // slug: sandstormBoard.slug,
+ // }));
+ //});
// XXX Hack. `Meteor.absoluteUrl` doesn't work in Sandstorm, since every
// session has a different URL whereas Meteor computes absoluteUrl based on
@@ -457,9 +457,9 @@ if (isSandstorm && Meteor.isClient) {
// 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);
- };
+ //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/accounts-lockout.js b/server/accounts-lockout.js
new file mode 100644
index 00000000..a9b9e311
--- /dev/null
+++ b/server/accounts-lockout.js
@@ -0,0 +1,16 @@
+// https://atmospherejs.com/lucasantoniassi/accounts-lockout
+// server
+import { AccountsLockout } from 'meteor/lucasantoniassi:accounts-lockout';
+
+(new AccountsLockout({
+ knownUsers: {
+ failuresBeforeLockout: process.env.ACCOUNTS_LOCKOUT_KNOWN_USERS_FAILURES_BEFORE || 3,
+ lockoutPeriod: process.env.ACCOUNTS_LOCKOUT_KNOWN_USERS_PERIOD || 60,
+ failureWindow: process.env.ACCOUNTS_LOCKOUT_KNOWN_USERS_FAILURE_WINDOW || 15,
+ },
+ unknownUsers: {
+ failuresBeforeLockout: process.env.ACCOUNTS_LOCKOUT_UNKNOWN_USERS_FAILURES_BERORE || 3,
+ lockoutPeriod: process.env.ACCOUNTS_LOCKOUT_UNKNOWN_USERS_LOCKOUT_PERIOD || 60,
+ failureWindow: process.env.ACCOUNTS_LOCKOUT_UNKNOWN_USERS_FAILURE_WINDOW || 15,
+ },
+})).startup();
diff --git a/server/authentication.js b/server/authentication.js
index 4d3cc53e..5ca45b68 100644
--- a/server/authentication.js
+++ b/server/authentication.js
@@ -69,7 +69,7 @@ Meteor.startup(() => {
{ service: 'oidc' },
{
$set: {
- loginStyle: 'redirect',
+ loginStyle: process.env.OAUTH2_LOGIN_STYLE,
clientId: process.env.OAUTH2_CLIENT_ID,
secret: process.env.OAUTH2_SECRET,
serverUrl: process.env.OAUTH2_SERVER_URL,
diff --git a/server/header-login.js b/server/header-login.js
new file mode 100644
index 00000000..51144c2d
--- /dev/null
+++ b/server/header-login.js
@@ -0,0 +1,10 @@
+Meteor.startup(() => {
+
+ if ( process.env.HEADER_LOGIN_ID ) {
+ Meteor.settings.public.headerLoginId = process.env.HEADER_LOGIN_ID;
+ Meteor.settings.public.headerLoginEmail = process.env.HEADER_LOGIN_EMAIL;
+ Meteor.settings.public.headerLoginFirstname = process.env.HEADER_LOGIN_FIRSTNAME;
+ Meteor.settings.public.headerLoginLastname = process.env.HEADER_LOGIN_LASTNAME;
+ }
+
+});
diff --git a/server/lib/utils.js b/server/lib/utils.js
index ee925847..3b4412fe 100644
--- a/server/lib/utils.js
+++ b/server/lib/utils.js
@@ -6,6 +6,12 @@ allowIsBoardMember = function(userId, board) {
return board && board.hasMember(userId);
};
+allowIsAnyBoardMember = function(userId, boards) {
+ return _.some(boards, (board) => {
+ return board && board.hasMember(userId);
+ });
+};
+
allowIsBoardMemberCommentOnly = function(userId, board) {
return board && board.hasMember(userId) && !board.hasCommentOnly(userId);
};
diff --git a/server/migrations.js b/server/migrations.js
index 8dcd892a..09852495 100644
--- a/server/migrations.js
+++ b/server/migrations.js
@@ -422,3 +422,119 @@ Migrations.add('add-defaultAuthenticationMethod', () => {
},
}, noValidateMulti);
});
+
+Migrations.add('add-templates', () => {
+ Boards.update({
+ type: {
+ $exists: false,
+ },
+ }, {
+ $set: {
+ type: 'board',
+ },
+ }, noValidateMulti);
+ Swimlanes.update({
+ type: {
+ $exists: false,
+ },
+ }, {
+ $set: {
+ type: 'swimlane',
+ },
+ }, noValidateMulti);
+ Lists.update({
+ type: {
+ $exists: false,
+ },
+ swimlaneId: {
+ $exists: false,
+ },
+ }, {
+ $set: {
+ type: 'list',
+ swimlaneId: '',
+ },
+ }, noValidateMulti);
+ Users.find({
+ 'profile.templatesBoardId': {
+ $exists: false,
+ },
+ }).forEach((user) => {
+ // Create board and swimlanes
+ Boards.insert({
+ title: TAPi18n.__('templates'),
+ permission: 'private',
+ type: 'template-container',
+ members: [
+ {
+ userId: user._id,
+ isAdmin: true,
+ isActive: true,
+ isNoComments: false,
+ isCommentOnly: false,
+ },
+ ],
+ }, (err, boardId) => {
+
+ // Insert the reference to our templates board
+ Users.update(user._id, {$set: {'profile.templatesBoardId': boardId}});
+
+ // Insert the card templates swimlane
+ Swimlanes.insert({
+ title: TAPi18n.__('card-templates-swimlane'),
+ boardId,
+ sort: 1,
+ type: 'template-container',
+ }, (err, swimlaneId) => {
+
+ // Insert the reference to out card templates swimlane
+ Users.update(user._id, {$set: {'profile.cardTemplatesSwimlaneId': swimlaneId}});
+ });
+
+ // Insert the list templates swimlane
+ Swimlanes.insert({
+ title: TAPi18n.__('list-templates-swimlane'),
+ boardId,
+ sort: 2,
+ type: 'template-container',
+ }, (err, swimlaneId) => {
+
+ // Insert the reference to out list templates swimlane
+ Users.update(user._id, {$set: {'profile.listTemplatesSwimlaneId': swimlaneId}});
+ });
+
+ // Insert the board templates swimlane
+ Swimlanes.insert({
+ title: TAPi18n.__('board-templates-swimlane'),
+ boardId,
+ sort: 3,
+ type: 'template-container',
+ }, (err, swimlaneId) => {
+
+ // Insert the reference to out board templates swimlane
+ Users.update(user._id, {$set: {'profile.boardTemplatesSwimlaneId': swimlaneId}});
+ });
+ });
+ });
+});
+
+Migrations.add('fix-circular-reference_', () => {
+ Cards.find().forEach((card) => {
+ if (card.parentId === card._id) {
+ Cards.update(card._id, {$set: {parentId: ''}}, noValidateMulti);
+ }
+ });
+});
+
+Migrations.add('mutate-boardIds-in-customfields', () => {
+ CustomFields.find().forEach((cf) => {
+ CustomFields.update(cf, {
+ $set: {
+ boardIds: [cf.boardId],
+ },
+ $unset: {
+ boardId: '',
+ },
+ }, noValidateMulti);
+ });
+});
diff --git a/server/notifications/email.js b/server/notifications/email.js
index b2b7fab8..857c5d70 100644
--- a/server/notifications/email.js
+++ b/server/notifications/email.js
@@ -36,7 +36,7 @@ Meteor.startup(() => {
} catch (e) {
return;
}
- }, 30000);
+ }, process.env.EMAIL_NOTIFICATION_TIMEOUT || 30000);
});
});
diff --git a/server/notifications/outgoing.js b/server/notifications/outgoing.js
index aac8749e..30744555 100644
--- a/server/notifications/outgoing.js
+++ b/server/notifications/outgoing.js
@@ -16,8 +16,9 @@ Meteor.methods({
check(description, String);
check(params, Object);
+ // label activity did not work yet, see wekan/models/activities.js
const quoteParams = _.clone(params);
- ['card', 'list', 'oldList', 'board', 'comment'].forEach((key) => {
+ ['card', 'list', 'oldList', 'board', 'oldBoard', 'comment', 'checklist', 'swimlane', 'oldSwimlane', 'label'].forEach((key) => {
if (quoteParams[key]) quoteParams[key] = `"${params[key]}"`;
});
diff --git a/server/publications/boards.js b/server/publications/boards.js
index fb4c8c84..144eabb8 100644
--- a/server/publications/boards.js
+++ b/server/publications/boards.js
@@ -32,6 +32,7 @@ Meteor.publish('boards', function() {
color: 1,
members: 1,
permission: 1,
+ type: 1,
},
});
});
@@ -59,6 +60,7 @@ Meteor.publish('archivedBoards', function() {
});
Meteor.publishRelations('board', function(boardId) {
+ this.unblock();
check(boardId, String);
const thisUserId = this.userId;
@@ -71,11 +73,12 @@ Meteor.publishRelations('board', function(boardId) {
{ permission: 'public' },
{ members: { $elemMatch: { userId: this.userId, isActive: true }}},
],
- }, { limit: 1 }), function(boardId, board) {
+ // Sort required to ensure oplog usage
+ }, { limit: 1, sort: { _id: 1 } }), function(boardId, board) {
this.cursor(Lists.find({ boardId }));
this.cursor(Swimlanes.find({ boardId }));
this.cursor(Integrations.find({ boardId }));
- this.cursor(CustomFields.find({ boardId }, { sort: { name: 1 } }));
+ this.cursor(CustomFields.find({ boardIds: {$in: [boardId]} }, { sort: { name: 1 } }));
// Cards and cards comments
// XXX Originally we were publishing the card documents as a child of the
@@ -98,24 +101,48 @@ Meteor.publishRelations('board', function(boardId) {
//
// And in the meantime our code below works pretty well -- it's not even a
// hack!
- this.cursor(Cards.find({ boardId }), function(cardId, card) {
+
+ // Gather queries and send in bulk
+ const cardComments = this.join(CardComments);
+ cardComments.selector = (_ids) => ({ cardId: _ids });
+ const attachments = this.join(Attachments);
+ attachments.selector = (_ids) => ({ cardId: _ids });
+ const checklists = this.join(Checklists);
+ checklists.selector = (_ids) => ({ cardId: _ids });
+ const checklistItems = this.join(ChecklistItems);
+ checklistItems.selector = (_ids) => ({ cardId: _ids });
+ const parentCards = this.join(Cards);
+ parentCards.selector = (_ids) => ({ parentId: _ids });
+ const boards = this.join(Boards);
+ const subCards = this.join(Cards);
+
+ this.cursor(Cards.find({ boardId: {$in: [boardId, board.subtasksDefaultBoardId]}}), function(cardId, card) {
if (card.type === 'cardType-linkedCard') {
const impCardId = card.linkedId;
- this.cursor(Cards.find({ _id: impCardId }));
- this.cursor(CardComments.find({ cardId: impCardId }));
- this.cursor(Attachments.find({ cardId: impCardId }));
- this.cursor(Checklists.find({ cardId: impCardId }));
- this.cursor(ChecklistItems.find({ cardId: impCardId }));
+ subCards.push(impCardId);
+ cardComments.push(impCardId);
+ attachments.push(impCardId);
+ checklists.push(impCardId);
+ checklistItems.push(impCardId);
} else if (card.type === 'cardType-linkedBoard') {
- this.cursor(Boards.find({ _id: card.linkedId}));
+ boards.push(card.linkedId);
}
- this.cursor(CardComments.find({ cardId }));
- this.cursor(Attachments.find({ cardId }));
- this.cursor(Checklists.find({ cardId }));
- this.cursor(ChecklistItems.find({ cardId }));
- this.cursor(Cards.find({ parentId: cardId }));
+ cardComments.push(cardId);
+ attachments.push(cardId);
+ checklists.push(cardId);
+ checklistItems.push(cardId);
+ parentCards.push(cardId);
});
+ // Send bulk queries for all found ids
+ subCards.send();
+ cardComments.send();
+ attachments.send();
+ checklists.send();
+ checklistItems.send();
+ boards.send();
+ parentCards.send();
+
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
diff --git a/server/rulesHelper.js b/server/rulesHelper.js
index 5bad7c2e..4c8ec4fa 100644
--- a/server/rulesHelper.js
+++ b/server/rulesHelper.js
@@ -67,17 +67,19 @@ RulesHelper = {
card.move(card.swimlaneId, listId, maxOrder + 1);
}
if(action.actionType === 'sendEmail'){
- const emailTo = action.emailTo;
- const emailMsg = action.emailMsg;
- const emailSubject = action.emailSubject;
+ const to = action.emailTo;
+ const text = action.emailMsg || '';
+ const subject = action.emailSubject || '';
try {
Email.send({
- emailTo,
+ to,
from: Accounts.emailTemplates.from,
- emailSubject,
- emailMsg,
+ subject,
+ text,
});
} catch (e) {
+ // eslint-disable-next-line no-console
+ console.error(e);
return;
}
}
diff --git a/snap-src/bin/config b/snap-src/bin/config
index 31605b2f..7d68e26d 100755
--- a/snap-src/bin/config
+++ b/snap-src/bin/config
@@ -3,7 +3,7 @@
# All supported keys are defined here together with descriptions and default values
# list of supported keys
-keys="DEBUG MONGODB_BIND_UNIX_SOCKET MONGODB_BIND_IP MONGODB_PORT MAIL_URL MAIL_FROM ROOT_URL PORT DISABLE_MONGODB CADDY_ENABLED CADDY_BIND_PORT WITH_API CORS MATOMO_ADDRESS MATOMO_SITE_ID MATOMO_DO_NOT_TRACK MATOMO_WITH_USERNAME BROWSER_POLICY_ENABLED TRUSTED_URL WEBHOOKS_ATTRIBUTES OAUTH2_ENABLED OAUTH2_CLIENT_ID OAUTH2_SECRET OAUTH2_SERVER_URL OAUTH2_AUTH_ENDPOINT OAUTH2_USERINFO_ENDPOINT OAUTH2_TOKEN_ENDPOINT OAUTH2_ID_MAP OAUTH2_USERNAME_MAP OAUTH2_FULLNAME_MAP OAUTH2_EMAIL_MAP LDAP_ENABLE LDAP_PORT LDAP_HOST LDAP_BASEDN LDAP_LOGIN_FALLBACK LDAP_RECONNECT LDAP_TIMEOUT LDAP_IDLE_TIMEOUT LDAP_CONNECT_TIMEOUT LDAP_AUTHENTIFICATION LDAP_AUTHENTIFICATION_USERDN LDAP_AUTHENTIFICATION_PASSWORD LDAP_LOG_ENABLED LDAP_BACKGROUND_SYNC LDAP_BACKGROUND_SYNC_INTERVAL LDAP_BACKGROUND_SYNC_KEEP_EXISTANT_USERS_UPDATED LDAP_BACKGROUND_SYNC_IMPORT_NEW_USERS LDAP_ENCRYPTION LDAP_CA_CERT LDAP_REJECT_UNAUTHORIZED LDAP_USER_SEARCH_FILTER LDAP_USER_SEARCH_SCOPE LDAP_USER_SEARCH_FIELD LDAP_SEARCH_PAGE_SIZE LDAP_SEARCH_SIZE_LIMIT LDAP_GROUP_FILTER_ENABLE LDAP_GROUP_FILTER_OBJECTCLASS LDAP_GROUP_FILTER_GROUP_ID_ATTRIBUTE LDAP_GROUP_FILTER_GROUP_MEMBER_ATTRIBUTE LDAP_GROUP_FILTER_GROUP_MEMBER_FORMAT LDAP_GROUP_FILTER_GROUP_NAME LDAP_UNIQUE_IDENTIFIER_FIELD LDAP_UTF8_NAMES_SLUGIFY LDAP_USERNAME_FIELD LDAP_FULLNAME_FIELD LDAP_MERGE_EXISTING_USERS LDAP_SYNC_USER_DATA LDAP_SYNC_USER_DATA_FIELDMAP LDAP_SYNC_GROUP_ROLES LDAP_DEFAULT_DOMAIN LOGOUT_WITH_TIMER LOGOUT_IN LOGOUT_ON_HOURS LOGOUT_ON_MINUTES DEFAULT_AUTHENTICATION_METHOD"
+keys="DEBUG MONGODB_BIND_UNIX_SOCKET MONGODB_BIND_IP MONGODB_PORT MAIL_URL MAIL_FROM ROOT_URL PORT DISABLE_MONGODB CADDY_ENABLED CADDY_BIND_PORT WITH_API ACCOUNTS_LOCKOUT_KNOWN_USERS_FAILURES_BEFORE ACCOUNTS_LOCKOUT_KNOWN_USERS_PERIOD ACCOUNTS_LOCKOUT_KNOWN_USERS_FAILURE_WINDOW ACCOUNTS_LOCKOUT_UNKNOWN_USERS_FAILURES_BERORE ACCOUNTS_LOCKOUT_UNKNOWN_USERS_LOCKOUT_PERIOD ACCOUNTS_LOCKOUT_UNKNOWN_USERS_FAILURE_WINDOW EMAIL_NOTIFICATION_TIMEOUT CORS MATOMO_ADDRESS MATOMO_SITE_ID MATOMO_DO_NOT_TRACK MATOMO_WITH_USERNAME BROWSER_POLICY_ENABLED TRUSTED_URL WEBHOOKS_ATTRIBUTES OAUTH2_ENABLED OAUTH2_LOGIN_STYLE OAUTH2_CLIENT_ID OAUTH2_SECRET OAUTH2_SERVER_URL OAUTH2_AUTH_ENDPOINT OAUTH2_USERINFO_ENDPOINT OAUTH2_TOKEN_ENDPOINT OAUTH2_ID_MAP OAUTH2_USERNAME_MAP OAUTH2_FULLNAME_MAP OAUTH2_EMAIL_MAP LDAP_ENABLE LDAP_PORT LDAP_HOST LDAP_BASEDN LDAP_LOGIN_FALLBACK LDAP_RECONNECT LDAP_TIMEOUT LDAP_IDLE_TIMEOUT LDAP_CONNECT_TIMEOUT LDAP_AUTHENTIFICATION LDAP_AUTHENTIFICATION_USERDN LDAP_AUTHENTIFICATION_PASSWORD LDAP_LOG_ENABLED LDAP_BACKGROUND_SYNC LDAP_BACKGROUND_SYNC_INTERVAL LDAP_BACKGROUND_SYNC_KEEP_EXISTANT_USERS_UPDATED LDAP_BACKGROUND_SYNC_IMPORT_NEW_USERS LDAP_ENCRYPTION LDAP_CA_CERT LDAP_REJECT_UNAUTHORIZED LDAP_USER_SEARCH_FILTER LDAP_USER_SEARCH_SCOPE LDAP_USER_SEARCH_FIELD LDAP_SEARCH_PAGE_SIZE LDAP_SEARCH_SIZE_LIMIT LDAP_GROUP_FILTER_ENABLE LDAP_GROUP_FILTER_OBJECTCLASS LDAP_GROUP_FILTER_GROUP_ID_ATTRIBUTE LDAP_GROUP_FILTER_GROUP_MEMBER_ATTRIBUTE LDAP_GROUP_FILTER_GROUP_MEMBER_FORMAT LDAP_GROUP_FILTER_GROUP_NAME LDAP_UNIQUE_IDENTIFIER_FIELD LDAP_UTF8_NAMES_SLUGIFY LDAP_USERNAME_FIELD LDAP_FULLNAME_FIELD LDAP_MERGE_EXISTING_USERS LDAP_SYNC_USER_DATA LDAP_SYNC_USER_DATA_FIELDMAP LDAP_SYNC_GROUP_ROLES LDAP_DEFAULT_DOMAIN LDAP_EMAIL_MATCH_ENABLE LDAP_EMAIL_MATCH_REQUIRE LDAP_EMAIL_MATCH_VERIFIED LDAP_EMAIL_FIELD LDAP_SYNC_ADMIN_STATUS LDAP_SYNC_ADMIN_GROUPS HEADER_LOGIN_ID HEADER_LOGIN_FIRSTNAME HEADER_LOGIN_LASTNAME HEADER_LOGIN_EMAIL LOGOUT_WITH_TIMER LOGOUT_IN LOGOUT_ON_HOURS LOGOUT_ON_MINUTES DEFAULT_AUTHENTICATION_METHOD"
# default values
DESCRIPTION_DEBUG="Debug OIDC OAuth2 etc. Example: sudo snap set wekan debug='true'"
@@ -56,6 +56,34 @@ DESCRIPTION_WITH_API="Enable/disable the api of wekan"
DEFAULT_WITH_API="true"
KEY_WITH_API="with-api"
+DESCRIPTION_ACCOUNTS_LOCKOUT_KNOWN_USERS_FAILURES_BEFORE="Accounts lockout known users failures before, greater than 0. Default: 3"
+DEFAULT_ACCOUNTS_LOCKOUT_KNOWN_USERS_FAILURES_BEFORE="3"
+KEY_ACCOUNTS_LOCKOUT_KNOWN_USERS_FAILURES_BEFORE="accounts-lockout-known-users-failures-before"
+
+DESCRIPTION_ACCOUNTS_LOCKOUT_KNOWN_USERS_PERIOD="Accounts lockout know users period, in seconds. Default: 60"
+DEFAULT_ACCOUNTS_LOCKOUT_KNOWN_USERS_PERIOD="60"
+KEY_ACCOUNTS_LOCKOUT_KNOWN_USERS_PERIOD="accounts-lockout-known-users-period"
+
+DESCRIPTION_ACCOUNTS_LOCKOUT_KNOWN_USERS_FAILURE_WINDOW="Accounts lockout unknown failure window, in seconds. Default: 15"
+DEFAULT_ACCOUNTS_LOCKOUT_KNOWN_USERS_FAILURE_WINDOW="15"
+KEY_ACCOUNTS_LOCKOUT_KNOWN_USERS_FAILURE_WINDOW="accounts-lockout-known-users-failure-window"
+
+DESCRIPTION_ACCOUNTS_LOCKOUT_UNKNOWN_USERS_FAILURES_BERORE="Accounts lockout unknown users failures before, greater than 0. Default: 3"
+DEFAULT_ACCOUNTS_LOCKOUT_UNKNOWN_USERS_FAILURES_BERORE="3"
+KEY_ACCOUNTS_LOCKOUT_UNKNOWN_USERS_FAILURES_BERORE="accounts-lockout-unknown-users-failures-before"
+
+DESCRIPTION_ACCOUNTS_LOCKOUT_UNKNOWN_USERS_LOCKOUT_PERIOD="Accounts lockout unknown users lockout period, in seconds. Default: 60"
+DEFAULT_ACCOUNTS_LOCKOUT_UNKNOWN_USERS_LOCKOUT_PERIOD="60"
+KEY_ACCOUNTS_LOCKOUT_UNKNOWN_USERS_LOCKOUT_PERIOD="accounts-lockout-unknown-users-lockout-period"
+
+DESCRIPTION_ACCOUNTS_LOCKOUT_UNKNOWN_USERS_FAILURE_WINDOW="Accounts lockout unknown users failure window, in seconds. Default: 15"
+DEFAULT_ACCOUNTS_LOCKOUT_UNKNOWN_USERS_FAILURE_WINDOW="15"
+KEY_ACCOUNTS_LOCKOUT_UNKNOWN_USERS_FAILURE_WINDOW="accounts-lockout-unknown-users-failure-window"
+
+DESCRIPTION_EMAIL_NOTIFICATION_TIMEOUT="Email notification timeout, ms. Default: 30000 (=30s)."
+DEFAULT_EMAIL_NOTIFICATION_TIMEOUT="30000"
+KEY_EMAIL_NOTIFICATION_TIMEOUT="email-notification-timeout"
+
DESCRIPTION_CORS="Enable/disable CORS: Set Access-Control-Allow-Origin header. Example: *"
DEFAULT_CORS=""
KEY_CORS="cors"
@@ -94,6 +122,10 @@ DESCRIPTION_OAUTH2_ENABLED="Enable the OAuth2 connection"
DEFAULT_OAUTH2_ENABLED="false"
KEY_OAUTH2_ENABLED="oauth2-enabled"
+DESCRIPTION_OAUTH2_LOGIN_STYLE="OAuth2 login style: popup or redirect. Default: redirect"
+DEFAULT_OAUTH2_LOGIN_STYLE="redirect"
+KEY_OAUTH2_LOGIN_STYLE="oauth2-login-style"
+
DESCRIPTION_OAUTH2_CLIENT_ID="OAuth2 Client ID, for example from Rocket.Chat. Example: abcde12345"
DEFAULT_OAUTH2_CLIENT_ID=""
KEY_OAUTH2_CLIENT_ID="oauth2-client-id"
@@ -260,7 +292,7 @@ KEY_LDAP_GROUP_FILTER_GROUP_MEMBER_FORMAT="ldap-group-filter-member-format"
DESCRIPTION_LDAP_GROUP_FILTER_GROUP_NAME="ldap-group-filter-group-name. Default: ''"
DEFAULT_LDAP_GROUP_FILTER_GROUP_NAME=""
-KEY_LDAP_GROUP_FILTER_GROUP_NAME="ldap-group-filter-member-format"
+KEY_LDAP_GROUP_FILTER_GROUP_NAME="ldap-group-filter-member-name"
DESCRIPTION_LDAP_UNIQUE_IDENTIFIER_FIELD="This field is sometimes class GUID (Globally Unique Identifier)"
DEFAULT_LDAP_UNIQUE_IDENTIFIER_FIELD=""
@@ -282,6 +314,22 @@ DESCRIPTION_LDAP_MERGE_EXISTING_USERS="ldap-merge-existing-users . Default: fals
DEFAULT_LDAP_MERGE_EXISTING_USERS="false"
KEY_LDAP_MERGE_EXISTING_USERS="ldap-merge-existing-users"
+DESCRIPTION_LDAP_EMAIL_MATCH_ENABLE="ldap-email-match-enable . Default: false"
+DEFAULT_LDAP_EMAIL_MATCH_ENABLE="false"
+KEY_LDAP_EMAIL_MATCH_ENABLE="ldap-email-match-enable"
+
+DESCRIPTION_LDAP_EMAIL_MATCH_REQUIRE="ldap-email-match-require . Default: false"
+DEFAULT_LDAP_EMAIL_MATCH_REQUIRE="false"
+KEY_LDAP_EMAIL_MATCH_REQUIRE="ldap-email-match-require"
+
+DESCRIPTION_LDAP_EMAIL_MATCH_VERIFIED="ldap-email-match-verified . Default: false"
+DEFAULT_LDAP_EMAIL_MATCH_VERIFIED="false"
+KEY_LDAP_EMAIL_MATCH_VERIFIED="ldap-email-match-verified"
+
+DESCRIPTION_LDAP_EMAIL_FIELD="Which field contains the ldap e-mail address"
+DEFAULT_LDAP_EMAIL_FIELD=""
+KEY_LDAP_EMAIL_FIELD="ldap-email-field"
+
DESCRIPTION_LDAP_SYNC_USER_DATA="ldap-sync-user-data . Default: false"
DEFAULT_LDAP_SYNC_USER_DATA="false"
KEY_LDAP_SYNC_USER_DATA="ldap-sync-user-data"
@@ -294,10 +342,34 @@ DESCRIPTION_LDAP_SYNC_GROUP_ROLES="ldap-sync-group-roles . Default: '' (empty)."
DEFAULT_LDAP_SYNC_GROUP_ROLES=""
KEY_LDAP_SYNC_GROUP_ROLES="ldap-sync-group-roles"
+DESCRIPTION_LDAP_SYNC_ADMIN_STATUS="Enable/Disable syncing of admin status based on LDAP groups. Example: true"
+DEFAULT_LDAP_SYNC_ADMIN_STATUS=""
+KEY_LDAP_SYNC_ADMIN_STATUS="ldap-sync-admin-status"
+
+DESCRIPTION_LDAP_SYNC_ADMIN_GROUPS="Comma separated list of admin group names to sync. Example: group1, group2"
+DEFAULT_LDAP_SYNC_ADMIN_GROUPS=""
+KEY_LDAP_SYNC_ADMIN_GROUPS="ldap-sync-admin-groups"
+
DESCRIPTION_LDAP_DEFAULT_DOMAIN="The default domain of the ldap it is used to create email if the field is not map correctly with the LDAP_SYNC_USER_DATA_FIELDMAP"
DEFAULT_LDAP_DEFAULT_DOMAIN=""
KEY_LDAP_DEFAULT_DOMAIN="ldap-default-domain"
+DESCRIPTION_HEADER_LOGIN_ID="Header login ID. Example for siteminder: BNPPUID"
+DEFAULT_HEADER_LOGIN_ID=""
+KEY_HEADER_LOGIN_ID="header-login-id"
+
+DESCRIPTION_HEADER_LOGIN_FIRSTNAME="Header login firstname. Example for siteminder: BNPPFIRSTNAME"
+DEFAULT_HEADER_LOGIN_FIRSTNAME="Header login firstname. Example for siteminder: BNPPFIRSTNAME"
+KEY_HEADER_LOGIN_FIRSTNAME="header-login-firstname"
+
+DESCRIPTION_HEADER_LOGIN_LASTNAME="Header login lastname. Example for siteminder: BNPPLASTNAME"
+DEFAULT_HEADER_LOGIN_LASTNAME="Header login firstname. Example for siteminder: BNPPLASTNAME"
+KEY_HEADER_LOGIN_LASTNAME="header-login-lastname"
+
+DESCRIPTION_HEADER_LOGIN_EMAIL="Header login email. Example for siteminder: BNPPEMAILADDRESS"
+DEFAULT_HEADER_LOGIN_EMAIL="Header login email. Example for siteminder: BNPPEMAILADDRESS"
+KEY_HEADER_LOGIN_EMAIL="header-login-email"
+
DESCRIPTION_LOGOUT_WITH_TIMER="Enables or not the option logout with timer"
DEFAULT_LOGOUT_WITH_TIMER="false"
KEY_LOGOUT_WITH_TIMER="logout-with-timer"
diff --git a/snap-src/bin/wekan-help b/snap-src/bin/wekan-help
index 431be029..d1eeaccd 100755
--- a/snap-src/bin/wekan-help
+++ b/snap-src/bin/wekan-help
@@ -40,6 +40,29 @@ echo -e "\t$ snap set $SNAP_NAME with-api='true'"
echo -e "\t-Disable the API:"
echo -e "\t$ snap set $SNAP_NAME with-api='false'"
echo -e "\n"
+echo -e "Accounts lockout known users failures before, greater than 0. Default: 3"
+echo -e "\t$ snap set $SNAP_NAME accounts-lockout-known-users-failures-before='3'"
+echo -e "\n"
+echo -e "Accounts lockout know users period, in seconds. Default: 60"
+echo -e "\t$ snap set $SNAP_NAME accounts-lockout-known-users-period='60'"
+echo -e "\n"
+echo -e "Accounts lockout unknown failure window, in seconds. Default: 15"
+echo -e "\t$ snap set $SNAP_NAME accounts-lockout-known-users-failure-window='15'"
+echo -e "\n"
+echo -e "Accounts lockout unknown users failures before, greater than 0. Default: 3"
+echo -e "\t$ snap set $SNAP_NAME accounts-lockout-unknown-users-failures-before='3'"
+echo -e "\n"
+echo -e "Accounts lockout unknown users lockout period, in seconds. Default: 60"
+echo -e "\t$ snap set $SNAP_NAME accounts-lockout-unknown-users-lockout-period='60'"
+echo -e "\n"
+echo -e "Accounts lockout unknown users failure window, in seconds. Default: 15"
+echo -e "\t$ snap set $SNAP_NAME accounts-lockout-unknown-users-failure-window='15'"
+echo -e "\n"
+echo -e "To enable the Email Notification Timeout of wekan in ms, default 30000 (=30s):"
+echo -e "\t$ snap set $SNAP_NAME email-notification-timeout='10000'"
+echo -e "\t-Disable the Email Notification Timeout of Wekan:"
+echo -e "\t$ snap set $SNAP_NAME email-notification-timeout='30000'"
+echo -e "\n"
echo -e "To enable the CORS of wekan, to set Access-Control-Allow-Origin header:"
echo -e "\t$ snap set $SNAP_NAME cors='*'"
echo -e "\t-Disable the CORS:"
@@ -71,6 +94,12 @@ echo -e "\t$ snap set $SNAP_NAME oauth2-client-id='54321abcde'"
echo -e "\t-Disable the OAuth2 Client ID of Wekan:"
echo -e "\t$ snap set $SNAP_NAME oauth2-client-id=''"
echo -e "\n"
+echo -e "OAuth2 login style: popup or redirect. Default: redirect"
+echo -e "To enable the OAuth2 login style popup of Wekan:"
+echo -e "\t$ snap set $SNAP_NAME oauth2-login-style='popup'"
+echo -e "\t-Disable the OAuth2 login style popup of Wekan:"
+echo -e "\t$ snap set $SNAP_NAME oauth2-login-style='redirect'"
+echo -e "\n"
echo -e "OAuth2 Secret."
echo -e "To enable the OAuth2 Secret of Wekan:"
echo -e "\t$ snap set $SNAP_NAME oauth2-secret='54321abcde'"
@@ -102,27 +131,27 @@ echo -e "\t-Disable the OAuth2 Token Endpoint of Wekan:"
echo -e "\t$ snap set $SNAP_NAME oauth2-token-endpoint=''"
echo -e "\n"
echo -e "OAuth2 ID Mapping."
-echo -e "To enable the ID Mapping of Wekan:"
+echo -e "To enable the OAuth2 ID Mapping of Wekan:"
echo -e "\t$ snap set $SNAP_NAME oauth2-id-map='username.uid'"
-echo -e "\t-Disable the ID Mapping of Wekan:"
+echo -e "\t-Disable the OAuth2 ID Mapping of Wekan:"
echo -e "\t$ snap set $SNAP_NAME oauth2-id-map=''"
echo -e "\n"
echo -e "OAuth2 Username Mapping."
-echo -e "To enable the Username Mapping of Wekan:"
+echo -e "To enable the OAuth2 Username Mapping of Wekan:"
echo -e "\t$ snap set $SNAP_NAME oauth2-username-map='username'"
-echo -e "\t-Disable the Username Mapping of Wekan:"
+echo -e "\t-Disable the OAuth2 Username Mapping of Wekan:"
echo -e "\t$ snap set $SNAP_NAME oauth2-username-map=''"
echo -e "\n"
echo -e "OAuth2 Fullname Mapping."
-echo -e "To enable the Fullname Mapping of Wekan:"
+echo -e "To enable the OAuth2 Fullname Mapping of Wekan:"
echo -e "\t$ snap set $SNAP_NAME oauth2-fullname-map='fullname'"
-echo -e "\t-Disable the Fullname Mapping of Wekan:"
+echo -e "\t-Disable the OAuth2 Fullname Mapping of Wekan:"
echo -e "\t$ snap set $SNAP_NAME oauth2-fullname-map=''"
echo -e "\n"
echo -e "OAuth2 Email Mapping."
-echo -e "To enable the Email Mapping of Wekan:"
+echo -e "To enable the OAuth2 Email Mapping of Wekan:"
echo -e "\t$ snap set $SNAP_NAME oauth2-email-map='email'"
-echo -e "\t-Disable the Email Mapping of Wekan:"
+echo -e "\t-Disable the OAuth2 Email Mapping of Wekan:"
echo -e "\t$ snap set $SNAP_NAME oauth2-email-map=''"
echo -e "\n"
echo -e "Ldap Enable."
@@ -264,6 +293,19 @@ echo -e "\n"
echo -e "Ldap Merge Existing Users."
echo -e "\t$ snap set $SNAP_NAME ldap-merge-existing-users='true'"
echo -e "\n"
+echo -e "Ldap Email Match Enable."
+echo -e "\t$ snap set $SNAP_NAME ldap-email-match-enable='true'"
+echo -e "\n"
+echo -e "Ldap Email Match Require."
+echo -e "\t$ snap set $SNAP_NAME ldap-email-match-require='true'"
+echo -e "\n"
+echo -e "Ldap Email Match Verified."
+echo -e "\t$ snap set $SNAP_NAME ldap-email-match-verfied='false'"
+echo -e "\n"
+echo -e "Ldap Fullname Field."
+echo -e "Which field contains the ldap email address:"
+echo -e "\t$ snap set $SNAP_NAME ldap-fullname-field='fullname'"
+echo -e "\n"
echo -e "Ldap Sync User Data."
echo -e "Enable synchronization of user data:"
echo -e "\t$ snap set $SNAP_NAME ldap-sync-user-data='true'"
@@ -279,22 +321,35 @@ echo -e "Ldap Default Domain."
echo -e "The default domain of the ldap it is used to create email if the field is not map correctly with the LDAP_SYNC_USER_DATA_FIELDMAP:"
echo -e "\t$ snap set $SNAP_NAME ldap-default-domain=''"
echo -e "\n"
-# echo -e "Logout with timer."
-# echo -e "Enable or not the option that allows to disconnect an user after a given time:"
-# echo -e "\t$ snap set $SNAP_NAME logout-with-timer='true'"
-# echo -e "\n"
-# echo -e "Logout in."
-# echo -e "Logout in how many days:"
-# echo -e "\t$ snap set $SNAP_NAME logout-in='1'"
-# echo -e "\n"
-# echo -e "Logout on hours."
-# echo -e "Logout in how many hours:"
-# echo -e "\t$ snap set $SNAP_NAME logout-on-hours='9'"
-# echo -e "\n"
-# echo -e "Logout on minutes."
-# echo -e "Logout in how many minutes:"
-# echo -e "\t$ snap set $SNAP_NAME logout-on-minutes='5'"
-# echo -e "\n"
+echo -e "Enable/Disable syncing of admin status based on LDAP groups."
+echo -e "\t$ snap set $SNAP_NAME ldap-sync-admin-status='true'"
+echo -e "\n"
+echo -e "Comma separated list of admin group names to sync."
+echo -e "\t$ snap set $SNAP_NAME ldap-sync-admin-groups='group1,group2'"
+echo -e "\n"
+echo -e "Logout with timer."
+echo -e "Enable or not the option that allows to disconnect an user after a given time:"
+echo -e "\t$ snap set $SNAP_NAME logout-with-timer='true'"
+echo -e "\n"
+echo -e "Login to LDAP automatically with HTTP header."
+echo -e "In below example for siteminder, at right side of = is header name."
+echo -e "\t$ snap set $SNAP_NAME header-login-id='BNPPUID'"
+echo -e "\t$ snap set $SNAP_NAME header-login-firstname='BNPPFIRSTNAME'"
+echo -e "\t$ snap set $SNAP_NAME header-login-lastname='BNPPLASTNAME'"
+echo -e "\t$ snap set $SNAP_NAME header-login-email='BNPPEMAILADDRESS'"
+echo -e "\n"
+echo -e "Logout in."
+echo -e "Logout in how many days:"
+echo -e "\t$ snap set $SNAP_NAME logout-in='1'"
+echo -e "\n"
+echo -e "Logout on hours."
+echo -e "Logout in how many hours:"
+echo -e "\t$ snap set $SNAP_NAME logout-on-hours='9'"
+echo -e "\n"
+echo -e "Logout on minutes."
+echo -e "Logout in how many minutes:"
+echo -e "\t$ snap set $SNAP_NAME logout-on-minutes='5'"
+echo -e "\n"
echo -e "Default authentication method."
echo -e "The default authentication method used if a user does not exist to create and authenticate. Method can be password or ldap."
echo -e "\t$ snap set $SNAP_NAME default-authentication-method='ldap'"
diff --git a/snapcraft.yaml b/snapcraft.yaml
index b2b3dfd2..e4b765a5 100644
--- a/snapcraft.yaml
+++ b/snapcraft.yaml
@@ -81,7 +81,7 @@ parts:
wekan:
source: .
plugin: nodejs
- node-engine: 8.15.0
+ node-engine: 8.15.1
node-packages:
- node-gyp
- node-pre-gyp
@@ -113,9 +113,9 @@ parts:
mkdir -p ./public/api
python3 ./openapi/generate_openapi.py --release $(git describe --tags --abbrev=0) > ./public/api/wekan.yml
# we temporary need api2html and mkdirp
- npm install -g api2html
+ npm install -g api2html@0.3.0
npm install -g mkdirp
- api2html -c ./public/wekan-logo-header.png -o ./public/api/wekan.html ./public/api/wekan.yml
+ api2html -c ./public/logo-header.png -o ./public/api/wekan.html ./public/api/wekan.yml
npm uninstall -g mkdirp
npm uninstall -g api2html
# Node Fibers 100% CPU usage issue:
@@ -176,6 +176,14 @@ parts:
git clone --depth 1 -b master https://github.com/wekan/wekan-scrollbar.git
cd ..
fi
+ if [ ! -d "packages/wekan_accounts-oidc" ]; then
+ cd packages
+ git clone --depth 1 -b master https://github.com/wekan/meteor-accounts-oidc.git
+ mv meteor-accounts-oidc/packages/switch_accounts-oidc wekan_accounts-oidc
+ mv meteor-accounts-oidc/packages/switch_oidc wekan_oidc
+ rm -rf meteor-accounts-oidc
+ cd ..
+ fi
rm -rf package-lock.json .build
meteor add standard-minifier-js --allow-superuser
meteor npm install --allow-superuser
@@ -198,7 +206,7 @@ parts:
cp -r .build/bundle/* $SNAPCRAFT_PART_INSTALL/
cp .build/bundle/.node_version.txt $SNAPCRAFT_PART_INSTALL/
rm $SNAPCRAFT_PART_INSTALL/lib/node_modules/wekan
- execstack --clear-execstack $SNAPCRAFT_PART_INSTALL/programs/server/npm/node_modules/meteor/rajit_bootstrap3-datepicker/lib/bootstrap-datepicker/node_modules/phantomjs-prebuilt/lib/phantom/bin/phantomjs
+ rm $SNAPCRAFT_PART_INSTALL/programs/server/npm/node_modules/meteor/rajit_bootstrap3-datepicker/lib/bootstrap-datepicker/node_modules/phantomjs-prebuilt/lib/phantom/bin/phantomjs
organize:
README: README.wekan
prime:
diff --git a/stacksmith/user-scripts/build.sh b/stacksmith/user-scripts/build.sh
index 10823ab1..86283202 100755
--- a/stacksmith/user-scripts/build.sh
+++ b/stacksmith/user-scripts/build.sh
@@ -2,7 +2,7 @@
set -euxo pipefail
BUILD_DEPS="bsdtar gnupg wget curl bzip2 python git ca-certificates perl-Digest-SHA"
-NODE_VERSION=v8.15.0
+NODE_VERSION=v8.15.1
#METEOR_RELEASE=1.6.0.1 - for Stacksmith, meteor-1.8 branch that could have METEOR@1.8.1-beta.8 or newer
USE_EDGE=false
METEOR_EDGE=1.5-beta.17
@@ -75,6 +75,12 @@ sudo -u wekan git clone --depth 1 -b master git://github.com/wekan/flow-router.g
sudo -u wekan git clone --depth 1 -b master git://github.com/meteor-useraccounts/core.git meteor-useraccounts-core
sudo -u wekan git clone --depth 1 -b master git://github.com/wekan/meteor-accounts-cas.git
sudo -u wekan git clone --depth 1 -b master git://github.com/wekan/wekan-ldap.git
+sudo -u wekan git clone --depth 1 -b master git://github.com/wekan/wekan-scrollbar.git
+sudo -u wekan git clone --depth 1 -b master git://github.com/wekan/meteor-accounts-oidc.git
+sudo -u wekan mv meteor-accounts-oidc/packages/switch_accounts-oidc wekan_accounts-oidc
+sudo -u wekan mv meteor-accounts-oidc/packages/switch_oidc wekan_oidc
+sudo -u wekan rm -rf meteor-accounts-oidc
+
sudo sed -i 's/api\.versionsFrom/\/\/api.versionsFrom/' /home/wekan/app/packages/meteor-useraccounts-core/package.js
sudo -u wekan /home/wekan/.meteor/meteor -- help
@@ -86,6 +92,7 @@ sudo -u wekan ${meteor} npm install
sudo -u wekan ${meteor} build --directory /home/wekan/app_build
sudo cp /home/wekan/app/fix-download-unicode/cfs_access-point.txt /home/wekan/app_build/bundle/programs/server/packages/cfs_access-point.js
sudo chown wekan:wekan /home/wekan/app_build/bundle/programs/server/packages/cfs_access-point.js
+sudo rm /home/wekan/app_build/bundle/programs/server/npm/node_modules/meteor/rajit_bootstrap3-datepicker/lib/bootstrap-datepicker/node_modules/phantomjs-prebuilt/lib/phantom/bin/phantomjs
cd /home/wekan/app_build/bundle/programs/server/
sudo npm install
sudo chown -R wekan:wekan ./node_modules
diff --git a/start-wekan.bat b/start-wekan.bat
index 02e9258e..cd56af28 100644..100755
--- a/start-wekan.bat
+++ b/start-wekan.bat
@@ -1,5 +1,12 @@
REM ------------------------------------------------------------
+REM NOTE: THIS .BAT DOES NOT WORK !!
+REM Use instead this webpage instructions to build on Windows:
+REM https://github.com/wekan/wekan/wiki/Install-Wekan-from-source-on-Windows
+REM Please add fix PRs, like config of MongoDB etc.
+
+REM ------------------------------------------------------------
+
REM # Debug OIDC OAuth2 etc.
REM SET DEBUG=true
@@ -14,6 +21,16 @@ SET PORT=2000
REM # If you disable Wekan API with false, Export Board does not work.
SET WITH_API=true
+REM # ==== PASSWORD BRUTE FORCE PROTECTION ====
+REM #https://atmospherejs.com/lucasantoniassi/accounts-lockout
+REM #Defaults below. Uncomment to change. wekan/server/accounts-lockout.js
+REM SET ACCOUNTS_LOCKOUT_KNOWN_USERS_FAILURES_BEFORE=3
+REM SET ACCOUNTS_LOCKOUT_KNOWN_USERS_PERIOD=60
+REM SET ACCOUNTS_LOCKOUT_KNOWN_USERS_FAILURE_WINDOW=15
+REM SET ACCOUNTS_LOCKOUT_UNKNOWN_USERS_FAILURES_BERORE=3
+REM SET ACCOUNTS_LOCKOUT_UNKNOWN_USERS_LOCKOUT_PERIOD=60
+REM SET ACCOUNTS_LOCKOUT_UNKNOWN_USERS_FAILURE_WINDOW=15
+
REM # Optional: Integration with Matomo https://matomo.org that is installed to your server
REM # The address of the server where Matomo is hosted.
REM # example: - MATOMO_ADDRESS=https://example.com/matomo
@@ -216,6 +233,22 @@ REM # LDAP_MERGE_EXISTING_USERS :
REM # example : LDAP_MERGE_EXISTING_USERS=true
REM SET LDAP_MERGE_EXISTING_USERS=false
+REM # LDAP_EMAIL_MATCH_ENABLE : allow existing account matching by e-mail address when username does not match
+REM # example: LDAP_EMAIL_MATCH_ENABLE=true
+REM SET LDAP_EMAIL_MATCH_ENABLE=false
+
+REM # LDAP_EMAIL_MATCH_REQUIRE : require existing account matching by e-mail address when username does match
+REM # example: LDAP_EMAIL_MATCH_REQUIRE=true
+REM SET LDAP_EMAIL_MATCH_REQUIRE=false
+
+REM # LDAP_EMAIL_MATCH_VERIFIED : require existing account email address to be verified for matching
+REM # example: LDAP_EMAIL_MATCH_VERIFIED=true
+REM SET LDAP_EMAIL_MATCH_VERIFIED=false
+
+REM # LDAP_EMAIL_FIELD : which field contains the LDAP e-mail address
+REM # example: LDAP_EMAIL_FIELD=mail
+REM SET LDAP_EMAIL_FIELD=
+
REM # LDAP_SYNC_USER_DATA :
REM # example : LDAP_SYNC_USER_DATA=true
REM SET LDAP_SYNC_USER_DATA=false
@@ -232,6 +265,19 @@ REM # LDAP_DEFAULT_DOMAIN : The default domain of the ldap it is used to create
REM # example :
REM SET LDAP_DEFAULT_DOMAIN=
+REM # Enable/Disable syncing of admin status based on ldap groups:
+REM SET LDAP_SYNC_ADMIN_STATUS=true
+
+REM # Comma separated list of admin group names to sync.
+REM SET LDAP_SYNC_ADMIN_GROUPS=group1,group2
+
+REM # Login to LDAP automatically with HTTP header.
+REM # In below example for siteminder, at right side of = is header name.
+REM SET HEADER_LOGIN_ID=BNPPUID
+REM SET HEADER_LOGIN_FIRSTNAME=BNPPFIRSTNAME
+REM SET HEADER_LOGIN_LASTNAME=BNPPLASTNAME
+REM SET HEADER_LOGIN_EMAIL=BNPPEMAILADDRESS
+
REM ------------------------------------------------
REM # LOGOUT_WITH_TIMER : Enables or not the option logout with timer
diff --git a/start-wekan.sh b/start-wekan.sh
index dd639aae..4e7f930c 100755
--- a/start-wekan.sh
+++ b/start-wekan.sh
@@ -43,6 +43,16 @@ function wekan_repo_check(){
# Wekan Export Board works when WITH_API=true.
# If you disable Wekan API with false, Export Board does not work.
export WITH_API='true'
+ #---------------------------------------------------------------
+ # ==== PASSWORD BRUTE FORCE PROTECTION ====
+ #https://atmospherejs.com/lucasantoniassi/accounts-lockout
+ #Defaults below. Uncomment to change. wekan/server/accounts-lockout.js
+ #export ACCOUNTS_LOCKOUT_KNOWN_USERS_FAILURES_BEFORE=3
+ #export ACCOUNTS_LOCKOUT_KNOWN_USERS_PERIOD=60
+ #export ACCOUNTS_LOCKOUT_KNOWN_USERS_FAILURE_WINDOW=15
+ #export ACCOUNTS_LOCKOUT_UNKNOWN_USERS_FAILURES_BERORE=3
+ #export ACCOUNTS_LOCKOUT_UNKNOWN_USERS_LOCKOUT_PERIOD=60
+ #export ACCOUNTS_LOCKOUT_UNKNOWN_USERS_FAILURE_WINDOW=15
#---------------------------------------------
# CORS: Set Access-Control-Allow-Origin header. Example: *
#export CORS=*
@@ -72,13 +82,16 @@ function wekan_repo_check(){
# Example: export WEBHOOKS_ATTRIBUTES=cardId,listId,oldListId,boardId,comment,user,card,commentId
export WEBHOOKS_ATTRIBUTES=''
#---------------------------------------------
- # ==== OAUTH2 AZURE ====
+ # ==== OAUTH2 AZURE ====
# https://github.com/wekan/wekan/wiki/Azure
# 1) Register the application with Azure. Make sure you capture
# the application ID as well as generate a secret key.
# 2) Configure the environment variables. This differs slightly
# by installation type, but make sure you have the following:
#export OAUTH2_ENABLED=true
+ # OAuth2 docs: https://github.com/wekan/wekan/wiki/OAuth2
+ # OAuth2 login style: popup or redirect.
+ #export OAUTH2_LOGIN_STYLE=redirect
# Application GUID captured during app registration:
#export OAUTH2_CLIENT_ID=xxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx
# Secret key generated during app registration:
@@ -93,12 +106,14 @@ function wekan_repo_check(){
#export OAUTH2_USERNAME_MAP=email
# The claim name you want to map to the full name field:
#export OAUTH2_FULLNAME_MAP=name
- # Tthe claim name you want to map to the email field:
+ # The claim name you want to map to the email field:
#export OAUTH2_EMAIL_MAP=email
#-----------------------------------------------------------------
# ==== OAUTH2 KEYCLOAK ====
# https://github.com/wekan/wekan/wiki/Keycloak <== MAPPING INFO, REQUIRED
#export OAUTH2_ENABLED=true
+ # OAuth2 login style: popup or redirect.
+ #export OAUTH2_LOGIN_STYLE=redirect
#export OAUTH2_CLIENT_ID=<Keycloak create Client ID>
#export OAUTH2_SERVER_URL=<Keycloak server name>/auth
#export OAUTH2_AUTH_ENDPOINT=/realms/<keycloak realm>/protocol/openid-connect/auth
@@ -107,11 +122,13 @@ function wekan_repo_check(){
#export OAUTH2_SECRET=<keycloak client secret>
#-----------------------------------------------------------------
# ==== OAUTH2 DOORKEEPER ====
+ # OAuth2 docs: https://github.com/wekan/wekan/wiki/OAuth2
# https://github.com/wekan/wekan/issues/1874
# https://github.com/wekan/wekan/wiki/OAuth2
# Enable the OAuth2 connection
#export OAUTH2_ENABLED=true
- # OAuth2 docs: https://github.com/wekan/wekan/wiki/OAuth2
+ # OAuth2 login style: popup or redirect.
+ #export OAUTH2_LOGIN_STYLE=redirect
# OAuth2 Client ID.
#export OAUTH2_CLIENT_ID=abcde12345
# OAuth2 Secret.
@@ -241,6 +258,18 @@ function wekan_repo_check(){
# LDAP_MERGE_EXISTING_USERS :
# example : export LDAP_MERGE_EXISTING_USERS=true
#export LDAP_MERGE_EXISTING_USERS=false
+ # LDAP_EMAIL_MATCH_ENABLE : allow existing account matching by e-mail address when username does not match
+ # example: LDAP_EMAIL_MATCH_ENABLE=true
+ #export LDAP_EMAIL_MATCH_ENABLE=false
+ # LDAP_EMAIL_MATCH_REQUIRE : require existing account matching by e-mail address when username does match
+ # example: LDAP_EMAIL_MATCH_REQUIRE=true
+ #export LDAP_EMAIL_MATCH_REQUIRE=false
+ # LDAP_EMAIL_MATCH_VERIFIED : require existing account email address to be verified for matching
+ # example: LDAP_EMAIL_MATCH_VERIFIED=true
+ #export LDAP_EMAIL_MATCH_VERIFIED=false
+ # LDAP_EMAIL_FIELD : which field contains the LDAP e-mail address
+ # example: LDAP_EMAIL_FIELD=mail
+ #export LDAP_EMAIL_FIELD=
# LDAP_SYNC_USER_DATA :
# example : export LDAP_SYNC_USER_DATA=true
#export LDAP_SYNC_USER_DATA=false
@@ -253,6 +282,18 @@ function wekan_repo_check(){
# LDAP_DEFAULT_DOMAIN : The default domain of the ldap it is used to create email if the field is not map correctly with the LDAP_SYNC_USER_DATA_FIELDMAP
# example :
#export LDAP_DEFAULT_DOMAIN=
+ # Enable/Disable syncing of admin status based on ldap groups:
+ #export LDAP_SYNC_ADMIN_STATUS=true
+ # Comma separated list of admin group names to sync.
+ #export LDAP_SYNC_ADMIN_GROUPS=group1,group2
+ #---------------------------------------------------------------------
+ # Login to LDAP automatically with HTTP header.
+ # In below example for siteminder, at right side of = is header name.
+ #export HEADER_LOGIN_ID=BNPPUID
+ #export HEADER_LOGIN_FIRSTNAME=BNPPFIRSTNAME
+ #export HEADER_LOGIN_LASTNAME=BNPPLASTNAME
+ #export HEADER_LOGIN_EMAIL=BNPPEMAILADDRESS
+ #---------------------------------------------------------------------
# LOGOUT_WITH_TIMER : Enables or not the option logout with timer
# example : LOGOUT_WITH_TIMER=true
#export LOGOUT_WITH_TIMER=