Compare commits

...
101 Commits
Author SHA1 Message Date
Lauri Ojansivu 47e64c269c v2.89 2019-06-21 20:58:30 +03:00
Lauri Ojansivu cd69b03ac1 Update translations. 2019-06-21 20:55:36 +03:00
Lauri Ojansivu 5afaa5bce6 Update changelog. 2019-06-21 20:53:58 +03:00
Lauri Ojansivu 60d62a6ae3 - Sandstorm Wekan: Set everyone as Admin. Please test does this help with
[Problem with the user management: can't add users or give wekan admin rights](https://github.com/wekan/wekan/issues/2405).

Thanks to xet7 !

Related #2405
2019-06-21 20:46:05 +03:00
Lauri Ojansivu 4f46adc389 - If board does not exist, redirect to All Boards page, at all Wekan platforms.
So now at Sandstorm when loading Wekan grain, if first Sandstorm board is found,
  it is opened. If first Sandstorm board is not found (it's deleted or archived),
  then redirect automatically to All Boards page.

Closes #3132
2019-06-21 20:09:18 +03:00
Lauri Ojansivu d2dfcf36d9 v2.88 2019-06-21 18:11:19 +03:00
Lauri Ojansivu 353768b4b5 Update translations. 2019-06-21 18:07:45 +03:00
Lauri Ojansivu 4f3e83b363 v2.87 2019-06-21 12:50:13 +03:00
Lauri Ojansivu 263ec64453 Update changelog. 2019-06-21 12:46:19 +03:00
Lauri Ojansivu 140dc6db25 Update translations. 2019-06-21 12:22:29 +03:00
Lauri Ojansivu 47a7097044 Merge pull request #2508 from road42/bug/card_move_to_top_bottom_fix
Inferface: Can move cardToTop/Bottom. Fixes #2289
2019-06-21 11:54:01 +03:00
Lauri Ojansivu b8e774107a Merge pull request #2507 from road42/bug/english_language_fix_card_trigger
English language update. Fixes #2456
2019-06-21 11:53:44 +03:00
Lauri Ojansivu 3d3c78260b Merge pull request #2506 from road42/feature/rule_card_action_setdate
Adds rule feature: cardAction - SetDate #2504
2019-06-21 11:53:20 +03:00
Christoph Jahn e8f4c4d8b8 Inferface: Can move cardToTop/Bottom. Fixes #2289 2019-06-21 10:11:40 +02:00
Christoph Jahn 2156b28445 English language fixed #2456 2019-06-21 09:11:42 +02:00
Christoph Jahn a9fc74a9b4 Adds rule feature: cardAction - SetDate #2504 2019-06-21 07:24:21 +02:00
Lauri Ojansivu 02de9164f0 v2.86 2019-06-19 22:56:46 +03:00
Lauri Ojansivu 140a2d7915 Update changelog. 2019-06-19 22:50:49 +03:00
Lauri Ojansivu 17c4c96c29 - [Fix Wekan unable to Select Text from Description edit box](https://github.com/wekan/wekan/issues/2451)
by removing feature of card description submit on click outside. This is because when selecting text
  and dragging up did trigger submit of description, so description was closed and selecting text failed.
  This did affect all Chromium-based browsers: Chrome, Chromium, Chromium Edge.

Thanks to xet7 !

Closes #2451
2019-06-19 22:39:29 +03:00
Lauri Ojansivu 56e5585730 v2.85 2019-06-19 11:41:59 +03:00
Lauri Ojansivu 51a0dd8861 [Fixed bug: rule doesn't move card to top/bottom](https://github.com/wekan/wekan/pull/2502).
Thanks to road42 !

Closes #2501
2019-06-19 11:36:13 +03:00
Lauri Ojansivu 8bfd94474a Merge pull request #2502 from road42/bug/rule_action_card_move_fix
Fixed bug (rule doesn't move card to top/bottom) #2501
2019-06-19 11:33:34 +03:00
Christoph Jahn 6789e8564a Fixed bug #2501
card.move needs boardId as first parameter
2019-06-19 06:57:58 +02:00
Lauri Ojansivu b48c6a5b9c v2.84 2019-06-18 23:43:49 +03:00
Lauri Ojansivu b39b9f5463 Update changelog. 2019-06-18 21:28:32 +03:00
Lauri Ojansivu e72f186a36 Merge branch 'road42-devel' into devel 2019-06-18 21:25:33 +03:00
Christoph Jahn c3d495e7c6 Show buttons for isBoardAdmin 2019-06-17 21:05:21 +02:00
Lauri Ojansivu 98c6ea467a v2.83 2019-06-17 21:55:16 +03:00
Lauri Ojansivu 6e73abde50 Update changelog. 2019-06-17 21:51:59 +03:00
Lauri Ojansivu 7ff6f24a90 Fix Bug: Unable to click board submenu on mobile.
Thanks to xet7 !

Closes #2261
2019-06-17 21:47:02 +03:00
Lauri Ojansivu 8368461b57 v2.82 2019-06-14 16:30:34 +03:00
Lauri Ojansivu 7dc8a2d659 [Fix OIDC Docker login. Empty string results to empty array at wekan/server/authentication.js](https://github.com/wekan/wekan/commit/bddbaa7bc2f3cfe8553a2265e168231ab51876f3).
Thanks to xet7 !

Closes #2206
2019-06-14 16:27:40 +03:00
Lauri Ojansivu bddbaa7bc2 - Fix OIDC Docker login. Empty string results to empty array at wekan/server/authentication.js
Thanks to xet7 !

Closes #2206
2019-06-14 16:23:18 +03:00
Lauri Ojansivu f9abfe5244 v2.81 2019-06-13 19:29:41 +03:00
Lauri Ojansivu 97d57b05ad Update changelog. 2019-06-13 19:28:08 +03:00
Lauri Ojansivu 4334fbbb9d - Change OAuth2 whitelist default to empty string at snap, so it would be used as array on wekan/server/authentication.js.
Thanks to xet7 !
2019-06-13 19:24:50 +03:00
Lauri Ojansivu 595c657b57 Add missing text. 2019-06-13 19:00:18 +03:00
Lauri Ojansivu ed04769947 v2.80 2019-06-13 18:21:51 +03:00
Lauri Ojansivu 44dbd462b1 Default whitelist array, not string.
Thanks to xet7 !
2019-06-13 18:18:03 +03:00
Lauri Ojansivu 291797b238 v2.79 2019-06-13 18:14:43 +03:00
Lauri Ojansivu 1178a48e68 Add back [OAuth2 idTokenWhitelistFields default empty array](https://github.com/wekan/wekan/commit/8b31c0768c34fc4557b54cec936a0b4288a8e722#commitcomment-33921882).
Thanks to moserben16 !
2019-06-13 11:03:45 +03:00
Lauri Ojansivu 34b7bfd19c Update translations. 2019-06-12 19:07:31 +03:00
Lauri Ojansivu 02c418f4bb Update changelog. 2019-06-12 19:05:29 +03:00
Lauri Ojansivu ae3b061d4c Merge pull request #2488 from DominikPf/fix-dockerfile-oauth2-typo
fix oauth2 typos in dockerfile & compose
2019-06-12 18:44:50 +03:00
Dominik Pfeifer eb49bb5e10 fix oauth2 typos in dockerfile & compose 2019-06-12 13:41:10 +02:00
Lauri Ojansivu 79745d1892 v2.78 2019-06-12 06:34:46 +03:00
Lauri Ojansivu 8b31c0768c Try to fix OIDC login.
Thanks to xet7 !
2019-06-12 06:29:57 +03:00
Lauri Ojansivu 25e294fd92 v2.77 2019-06-11 20:27:17 +03:00
Lauri Ojansivu 017d2deeee Fix Snap build.
Thanks to xet7 !
2019-06-11 20:20:29 +03:00
Lauri Ojansivu e1e20275a6 v2.76 2019-06-11 17:03:01 +03:00
Lauri Ojansivu 3c4f8f6796 Support scopes in OAuth2, so Authentication via OAuth2 with Google is now possible.
Thanks to moserben16 !

Closes #2454
2019-06-11 16:56:45 +03:00
Lauri Ojansivu 406a9492fd Merge branch 'moserben16-patch-1' into devel 2019-06-11 16:51:36 +03:00
Lauri Ojansivu c859cd2278 Merge branch 'patch-1' of https://github.com/moserben16/wekan into moserben16-patch-1 2019-06-11 16:36:14 +03:00
Lauri Ojansivu cd70d9d09e Update changelog. 2019-06-11 16:34:36 +03:00
Lauri Ojansivu 86e7e1c600 More CORS headers settings related to https://github.com/wekan/wekan/pull/2429
Thanks to xet7 !
2019-06-11 16:32:42 +03:00
Lauri Ojansivu e540148d09 Update changelog. 2019-06-11 16:10:34 +03:00
Lauri Ojansivu 30b108ab36 Merge pull request #2442 from Jason-Cooke/patch-1
docs: fix typo
2019-06-11 16:07:58 +03:00
Lauri Ojansivu ec535aaa9c Update changelog. 2019-06-11 16:02:53 +03:00
Lauri Ojansivu bb108b2144 Merge branch 'road42-devel' into edge 2019-06-11 16:00:44 +03:00
Lauri Ojansivu f3c76ac60b Update ChangeLog. 2019-06-11 15:56:41 +03:00
Lauri Ojansivu 23ccb3b991 Show attachment name in Outgoing Webhook when attachment is removed from card.
Thanks to xet7 !

Related #2285
2019-06-11 13:11:35 +03:00
Lauri Ojansivu 992ecfefa2 Show attachment name in Outgoing Webhook when attachment is added to card.
Thanks to xet7 !

Related #2285
2019-06-11 10:53:50 +03:00
benji fd390d2560 Update oidc_server.js
with this fix, Authentication via OAuth2 with Google is possible.
1.) token endpoint and userinfo-endpoint in Google are different, so you have to check that,
2.) request the scopes of the environment variable "process.env.OAUTH2_REQUEST_PERMISSIONS"
with this small little fix the login with google in oauth2-protocol gets possible :-)
I would be very happy about a master-merge

thank you in advance
2019-06-11 09:23:12 +02:00
Lauri Ojansivu 3f1ac6b5db Update translations. 2019-06-10 18:57:07 +03:00
Lauri Ojansivu d8f112278b Additional CORS headers settings, added earlier. In progress. 2019-06-10 18:29:33 +03:00
Christoph Jahn 0704cfb8b6 isAdmin and isBoardAdmin should add rules 2019-06-08 22:04:09 +02:00
Jason Cooke 5e806c3879 docs: fix typo 2019-06-01 09:57:45 +12:00
Christoph Jahn 27b0fd35b4 Allow BoardAdmin to create board rules. #2431 2019-05-28 17:41:39 +02:00
Lauri Ojansivu 5c1818fc9a Update changelog. 2019-05-24 22:38:23 +03:00
Lauri Ojansivu a7fb9662e3 Merge branch 'risacher-master' into edge 2019-05-24 22:35:35 +03:00
Daniel Risacher cb00cfc1b7 Add support for more CORS headers 2019-05-24 12:39:54 -04:00
Lauri Ojansivu d7bc8d100d Update changelog. 2019-05-23 11:47:50 +03:00
Lauri Ojansivu d067b3976c Merge pull request #2427 from DominikPf/OAuth2-fix
Fix Scope parsing Issue for OAuth2 Login with simple String
2019-05-23 11:43:10 +03:00
DominikPf 892ee60527 Fix Scope parsing Issue for OAuth2 Login 2019-05-23 10:28:08 +02:00
Lauri Ojansivu d83cb75f95 v2.75 2019-05-22 21:47:49 +03:00
Lauri Ojansivu 697aaa895d Update translations. 2019-05-22 21:44:23 +03:00
Lauri Ojansivu 8add28d328 Update changelog. 2019-05-22 21:42:59 +03:00
Lauri Ojansivu 634df8f6f2 - Fix: OAuth2 Requested Scopes are wrong / cannot be configured.
Thanks to DominikPf and xet7 !

Closes #2412
2019-05-22 21:37:01 +03:00
Lauri Ojansivu d194cc7a5a - [CAS allowed LDAP groups](https://github.com/wekan/meteor-accounts-cas/pull/4).
Thanks to ppoulard !

Please test.

Related #2356
2019-05-22 20:15:24 +03:00
Lauri Ojansivu 0834f6ed1e v2.74 2019-05-14 21:33:12 +03:00
Lauri Ojansivu 9d5e288bca Update changelog. 2019-05-14 21:29:46 +03:00
Lauri Ojansivu 0fe40ad9ec - Add missing [wekan-ldap#40](https://github.com/wekan/wekan-ldap/pull/40) code about LDAP_SYNC_ADMIN_STATUS.
Thanks to JulianJacobi, n-st, chirrut2 and xet7 !

Closes #2351
2019-05-14 21:24:11 +03:00
Lauri Ojansivu 0765278195 v2.73 2019-05-14 16:48:18 +03:00
Lauri Ojansivu f782b9c298 Update translations (fi). 2019-05-14 16:42:05 +03:00
Lauri Ojansivu e611685e50 Fix lint errors. 2019-05-14 16:37:41 +03:00
Lauri Ojansivu 3edef95c4e - [Few fixes for Dockerfile](https://github.com/wekan/wekan/pulls/2407).
Thanks to bentiss !
2019-05-14 16:31:13 +03:00
Lauri Ojansivu 9b902e1ca0 Merge pull request #2407 from bentiss/dockerfile-fixes
Few fixes for Dockerfile
2019-05-14 16:28:51 +03:00
Lauri Ojansivu fc835815d8 - [Card count placement and export API functionality back](https://github.com/wekan/wekan/pulls/2406).
Thanks to bentiss.

Closes #2403,
closes #2328
2019-05-14 16:27:15 +03:00
Lauri Ojansivu da083c2e20 Merge pull request #2406 from bentiss/fixes
card count placement and export API functionality back
2019-05-14 16:25:05 +03:00
Lauri Ojansivu 6ee17ab080 - Fixed [#2338](https://github.com/wekan/wekan/issues/2338) -> [Slow opening of big boards with too many archived items](https://github.com/wekan/wekan/pull/2402).
If some Wekan users see errors with this, please empty your browser cache.
  Thanks to nerminator.

Closes #2338
2019-05-14 16:23:52 +03:00
Benjamin Tissoires 1e34585548 Dockerfile: no need to change the permissions once again
we carefully used gosu where needed, so there is no need to re-run a
check on the permissions.
2019-05-14 10:33:41 +02:00
Benjamin Tissoires 76cd5a2844 Dockerfile: use gosu for creating the openapi files 2019-05-14 10:33:41 +02:00
Benjamin Tissoires ffd1b93abf Dockerfile: bump api2html to version 0.3.3 2019-05-14 10:33:41 +02:00
Benjamin Tissoires 1eea102f26 openAPI: also handle export statement in the scripts
The files are actually modules, not plain scripts, and thus we are allowed
to use `export`. Without `parseModule`, the script would silently fail
when parsing `export.js` and the export function will not be present.
2019-05-14 10:10:21 +02:00
Benjamin Tissoires 94c1367684 Restore export API
Commit 477d71e0b9 was based on an older version of export.js, which
means it reverted a few changes that were made previously.

Fixes #2328
2019-05-14 09:37:56 +02:00
Benjamin Tissoires 9bf19f81a4 Fix card count position
When introducing markdown in the title (b795115042), the card
count got pushed outside of the List Header.

Add its own style (by manually merge small and quiet), and restore its
original placement.

Fixes #2403
2019-05-14 09:37:34 +02:00
Lauri Ojansivu 21de0ec396 Merge pull request #2402 from nerminator/feature/performance_archive
Fixed #2338 -> Slow opening of big boards with too many archived items
2019-05-13 12:56:12 +03:00
wekan ab4fec0f3c Fixed #2338 -> Slow opening of big boards with too many archived items 2019-05-13 11:01:50 +02:00
Lauri Ojansivu b983479476 v2.72 2019-05-13 10:49:41 +03:00
Lauri Ojansivu f6e5e514ef Merge pull request #2401 from guyzyl/devel
Added BIDI support to "Add Card" #884
2019-05-13 10:42:42 +03:00
Guy Zylberberg ddd828083e Added BIDI support to "Add Card" #884 2019-05-13 00:37:40 +03:00
97 changed files with 1701 additions and 644 deletions

No files matched your search

+210
View File
@@ -1,3 +1,213 @@
# v2.89 2019-06-21 Wekan release
This release adds the following Sandstorm features:
- [Sandstorm Wekan: Set everyone as Admin](https://github.com/wekan/wekan/commit/60d62a6ae3a79059e68b2cd1d554d67b7d50b6aa).
Please test does this help with [Problem with the user management: can't add users or give wekan admin rights](https://github.com/wekan/wekan/issues/2405).
Thanks to xet7.
- [If board does not exist, redirect to All Boards page, at all Wekan platforms](https://github.com/wekan/wekan/commit/4f46adc389126597266d71110f9754841f86857c).
So now at Sandstorm when loading Wekan grain, if first Sandstorm board is found,
it is opened. If first Sandstorm board is not found (it's deleted or archived),
then redirect automatically to All Boards page. [Closes #3132](https://github.com/wekan/wekan/issues/3132).
Thanks to xet7.
Thanks to above GitHub users for their contributions and translators for their translations.
# v2.88 2019-06-21 Wekan release
This release adds the following updates:
- Update translations.
Thanks to translators for their translations.
# v2.87 2019-06-21 Wekan release
This release adds the following new features:
- [Rule cardAction - SetDate](https://github.com/wekan/wekan/pull/2506).
Thanks to road42.
and fixes the following bugs:
- [Fix Move card to top/bottom of list](https://github.com/wekan/wekan/pull/2508).
Thanks to road42.
- [Translation fixes](https://github.com/wekan/wekan/pull/2507).
Thanks to road42.
Thanks to above GitHub users for their contributions and translators for their translations.
# v2.86 2019-06-19 Wekan release
This release fixes the following bugs:
- [Fix Wekan unable to Select Text from Description edit box](https://github.com/wekan/wekan/issues/2451)
by removing feature of card description submit on click outside. This is because when selecting text
and dragging up did trigger submit of description, so description was closed and selecting text failed.
This did affect all Chromium-based browsers: Chrome, Chromium, Chromium Edge.
Thanks to xet7.
Thanks to above GitHub users for their contributions and translators for their translations.
# v2.85 2019-06-19 Wekan release
This release fixes the following bugs:
- [Fixed bug: rule doesn't move card to top/bottom](https://github.com/wekan/wekan/pull/2502).
Thanks to road42.
Thanks to above GitHub users for their contributions and translators for their translations.
# v2.84 2019-06-18 Wekan release
This release fixes the following bugs:
- [Buttons for adding rules to a board where missing for isBoardAdmin](https://github.com/wekan/wekan/pull/2500).
Thanks to road42.
Thanks to above GitHub users for their contributions and translators for their translations.
# v2.83 2019-06-17 Wekan release
This release fixes the following bugs:
- [Fix Bug: Unable to click board submenu on mobile](https://github.com/wekan/wekan/commit/7ff6f24a90374ae95edbb87b37e0c235e7aee434).
Thanks to xet7.
Thanks to above GitHub users for their contributions and translators for their translations.
# v2.82 2019-06-14 Wekan release
This release fixes the following bugs:
- [Fix OIDC Docker login. Empty string results to empty array at wekan/server/authentication.js](https://github.com/wekan/wekan/commit/bddbaa7bc2f3cfe8553a2265e168231ab51876f3).
Thanks to xet7.
Thanks to above GitHub users for their contributions and translators for their translations.
# v2.81 2019-06-13 Wekan release
This release fixes the following bugs:
- [Change OAuth2 whitelist default to empty string at snap, so it would be used as array on
wekan/server/authentication.js](https://github.com/wekan/wekan/commit/4334fbbb9dacf45b0262019526a9697b015049a1).
Thanks to xet7.
Thanks to above GitHub users for their contributions and translators for their translations.
# v2.80 2019-06-13 Wekan release
This release fixes the following bugs:
- [Fix OAuth2 typos in snap-src/bin/config](https://github.com/wekan/wekan/commit/44dbd462b19e613fcb47161d44e4046d5d91a319).
Thanks to xet7.
Thanks to above GitHub users for their contributions and translators for their translations.
# v2.79 2019-06-13 Wekan release
This release fixes the following bugs:
- [Fix OAuth2 typos in Dockerfile and docker-compose.yml](https://github.com/wekan/wekan/pull/2488).
Thanks to DominikPf.
Thanks to above GitHub users for their contributions and translators for their translations.
# v2.78 2019-06-12 Wekan release
This release fixes the following bugs:
- [Try to fix OIDC login](https://github.com/wekan/wekan/commit/8b31c0768c34fc4557b54cec936a0b4288a8e722).
Thanks to xet7.
Thanks to above GitHub users for their contributions and translators for their translations.
# v2.77 2019-06-11 Wekan release
This release fixes the following bugs:
- [Fix Snap build](https://github.com/wekan/wekan/commit/e1e20275a673d3065c6cf239db8d2f1a505baa69).
Thanks to xet7.
Thanks to above GitHub users for their contributions and translators for their translations.
# v2.76 2019-06-11 Wekan release
This release adds the following new features:
- [Add support for CORS headers "Access-control-allow-headers" and
"Access-control-expose-headers"](https://github.com/wekan/wekan/pull/2429).
Thanks to risacher and xet7.
- [Support scopes in OAuth2, so that Authentication via OAuth2 with Google is now possible](https://github.com/wekan/wekan/pull/2483).
Thanks to moserben16.
and fixes the following bugs:
- [Fix Scope parsing Issue for OAuth2 Login with simple String](https://github.com/wekan/wekan/pulls/2427).
Thanks to DominikPf.
- [Show attachment name in Outgoing Webhook when attachment is added to card](https://github.com/wekan/wekan/commit/992ecfefa2e46ee7321ec9b8bfc3400532e5645e).
Thanks to xet7. Related [#2285](https://github.com/wekan/wekan/issues/2285).
- [Show attachment name in Outgoing Webhook when attachment is removed from card](https://github.com/wekan/wekan/commit/23ccb3b991be6d7196e59f7d68df17b8949df049).
Thanks to xet7. Related [#2285](https://github.com/wekan/wekan/issues/2285).
- [Allow BoardAdmin to create board rules](https://github.com/wekan/wekan/pull/2433).
Thanks to road42.
- [Fix typo](https://github.com/wekan/wekan/pull/2442).
Thanks to Jason-Cooke.
Thanks to above GitHub users for their contributions and translators for their translations.
# v2.75 2019-05-22 Wekan release
This release adds the following new features:
- [CAS allowed LDAP groups](https://github.com/wekan/meteor-accounts-cas/pull/4).
Thanks to ppoulard. Please test. Related [#2356](https://github.com/wekan/wekan/issues/2356).
and fixes the following bugs:
- [Fix](https://github.com/wekan/wekan/commit/634df8f6f26a7a7a2df6f87a705d322d88638425):
[OAuth2 Requested Scopes are wrong / cannot be configured](https://github.com/wekan/wekan/issues/2412).
Thanks to DominikPf and xet7. Please test.
Thanks to above GitHub users for their contributions and translators for their translations.
# v2.74 2019-05-14 Wekan release
This release fixes the following bugs:
- Add missing [wekan-ldap#40](https://github.com/wekan/wekan-ldap/pull/40) code about
[LDAP_SYNC_ADMIN_STATUS](https://github.com/wekan/wekan/commit/0fe40ad9ec82ef2045578f4cc1e2ebb6cc80d47a).
Thanks to JulianJacobi, n-st, chirrut2 and xet7.
Thanks to above GitHub users for their contributions and translators for their translations.
# v2.73 2019-05-14 Wekan release
This release fixes the following bugs with Apache I-CLA:
- [Card count placement and export API functionality back](https://github.com/wekan/wekan/pulls/2406).
Thanks to bentiss.
- [Few fixes for Dockerfile](https://github.com/wekan/wekan/pulls/2407).
Thanks to bentiss.
and fixes the following bugs:
- Fixed [#2338](https://github.com/wekan/wekan/issues/2338) -> [Slow opening of big boards with too many archived items](https://github.com/wekan/wekan/pull/2402).
If some Wekan users see errors with this, please empty your browser cache.
Thanks to nerminator.
Thanks to above GitHub users for their contributions and translators for their translations.
# v2.72 2019-05-13 Wekan release
This release adds the following new features:
- [Added BIDI support to "Add Card"](https://github.com/wekan/wekan/pull/2401).
Related [#884](https://github.com/wekan/wekan/issues/884).
Thanks to guyzyl.
Thanks to above GitHub users for their contributions and translators for their translations.
# v2.71 2019-05-12 Wekan release
This release adds the following new features:
+9 -5
View File
@@ -40,6 +40,8 @@ ENV BUILD_DEPS="apt-utils bsdtar gnupg gosu wget curl bzip2 build-essential pyth
OAUTH2_ID_MAP="" \
OAUTH2_USERNAME_MAP="" \
OAUTH2_FULLNAME_MAP="" \
OAUTH2_ID_TOKEN_WHITELIST_FIELDS="" \
OAUTH2_REQUEST_PERMISSIONS='openid profile email' \
OAUTH2_EMAIL_MAP="" \
LDAP_ENABLE=false \
LDAP_PORT=389 \
@@ -97,6 +99,8 @@ ENV BUILD_DEPS="apt-utils bsdtar gnupg gosu wget curl bzip2 build-essential pyth
LOGOUT_ON_HOURS="" \
LOGOUT_ON_MINUTES="" \
CORS="" \
CORS_ALLOW_HEADERS="" \
CORS_EXPOSE_HEADERS="" \
DEFAULT_AUTHENTICATION_METHOD=""
# Copy the app to the image
@@ -194,7 +198,7 @@ RUN \
\
# Get additional packages
#mkdir -p /home/wekan/app/packages && \
chown wekan:wekan --recursive /home/wekan && \
#chown wekan:wekan --recursive /home/wekan && \
# REPOS BELOW ARE INCLUDED TO WEKAN REPO
#cd /home/wekan/app/packages && \
#gosu wekan:wekan git clone --depth 1 -b master https://github.com/wekan/flow-router.git kadira-flow-router && \
@@ -212,7 +216,7 @@ RUN \
gosu wekan:wekan /home/wekan/.meteor/meteor -- help; \
\
# extract the OpenAPI specification
npm install -g api2html@0.3.0 && \
npm install -g api2html@0.3.3 && \
mkdir -p /home/wekan/python && \
chown wekan:wekan --recursive /home/wekan/python && \
cd /home/wekan/python && \
@@ -220,9 +224,9 @@ RUN \
cd /home/wekan/python/esprima-python && \
python3 setup.py install --record files.txt && \
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/logo-header.png -o ./public/api/wekan.html ./public/api/wekan.yml; \
gosu wekan:wekan mkdir -p ./public/api && \
gosu wekan:wekan python3 ./openapi/generate_openapi.py --release $(git describe --tags --abbrev=0) > ./public/api/wekan.yml && \
gosu wekan:wekan /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 && \
+2 -2
View File
@@ -61,7 +61,7 @@ that by providing one-click installation on various platforms.
- 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.
- 1 GB RAM minimum free for Wekan. Production server should have minimum 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.
@@ -136,4 +136,4 @@ with [Meteor](https://www.meteor.com).
[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)
[![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)
+1 -1
View File
@@ -1,5 +1,5 @@
appId: wekan-public/apps/77b94f60-dec9-0136-304e-16ff53095928
appVersion: "v2.71.0"
appVersion: "v2.89.0"
files:
userUploads:
- README.md
+2 -1
View File
@@ -7,7 +7,8 @@ template(name="board")
+boardBody
else
//- XXX We need a better error message in case the board has been archived
+message(label="board-not-found")
//+message(label="board-not-found")
{{goHome}}
else
+spinner
+5 -1
View File
@@ -14,7 +14,7 @@ BlazeComponent.extendComponent({
const currentBoardId = Session.get('currentBoard');
if (!currentBoardId)
return;
const handle = subManager.subscribe('board', currentBoardId);
const handle = subManager.subscribe('board', currentBoardId, false);
Tracker.nonreactive(() => {
Tracker.autorun(() => {
this.isBoardReady.set(handle.ready());
@@ -27,6 +27,10 @@ BlazeComponent.extendComponent({
return Utils.isMiniScreen() && Session.get('currentCard');
},
goHome() {
FlowRouter.go('home');
},
}).register('board');
BlazeComponent.extendComponent({
@@ -85,10 +85,15 @@ template(name="boardHeaderBar")
if Filter.isActive
a.board-header-btn-close.js-filter-reset(title="{{_ 'filter-clear'}}")
i.fa.fa-times-thin
if currentUser.isAdmin
a.board-header-btn.js-open-rules-view(title="{{_ 'rules'}}")
i.fa.fa-magic
span {{_ 'rules'}}
else if currentUser.isBoardAdmin
a.board-header-btn.js-open-rules-view(title="{{_ 'rules'}}")
i.fa.fa-magic
span {{_ 'rules'}}
a.board-header-btn.js-open-search-view(title="{{_ 'search'}}")
i.fa.fa-search
+2 -2
View File
@@ -33,12 +33,12 @@ BlazeComponent.extendComponent({
},
hasOvertimeCards() {
subManager.subscribe('board', this.currentData()._id);
subManager.subscribe('board', this.currentData()._id, false);
return this.currentData().hasOvertimeCards();
},
hasSpentTimeCards() {
subManager.subscribe('board', this.currentData()._id);
subManager.subscribe('board', this.currentData()._id, false);
return this.currentData().hasSpentTimeCards();
},
+5 -5
View File
@@ -345,12 +345,12 @@ Template.cardDetailsActionsPopup.events({
'click .js-move-card-to-top' (evt) {
evt.preventDefault();
const minOrder = _.min(this.list().cards(this.swimlaneId).map((c) => c.sort));
this.move(this.swimlaneId, this.listId, minOrder - 1);
this.move(this.boardId, this.swimlaneId, this.listId, minOrder - 1);
},
'click .js-move-card-to-bottom' (evt) {
evt.preventDefault();
const maxOrder = _.max(this.list().cards(this.swimlaneId).map((c) => c.sort));
this.move(this.swimlaneId, this.listId, maxOrder + 1);
this.move(this.boardId, this.swimlaneId, this.listId, maxOrder + 1);
},
'click .js-archive' (evt) {
evt.preventDefault();
@@ -424,7 +424,7 @@ Template.moveCardPopup.events({
});
BlazeComponent.extendComponent({
onCreated() {
subManager.subscribe('board', Session.get('currentBoard'));
subManager.subscribe('board', Session.get('currentBoard'), false);
this.selectedBoardId = new ReactiveVar(Session.get('currentBoard'));
},
@@ -453,7 +453,7 @@ BlazeComponent.extendComponent({
return [{
'change .js-select-boards'(evt) {
this.selectedBoardId.set($(evt.currentTarget).val());
subManager.subscribe('board', this.selectedBoardId.get());
subManager.subscribe('board', this.selectedBoardId.get(), false);
},
}];
},
@@ -676,7 +676,7 @@ BlazeComponent.extendComponent({
if (selection === 'none') {
this.parentBoard.set(null);
} else {
subManager.subscribe('board', $(evt.currentTarget).val());
subManager.subscribe('board', $(evt.currentTarget).val(), false);
this.parentBoard.set(selection);
list.prop('disabled', false);
}
+4
View File
@@ -99,6 +99,10 @@
.highlight
color: #ce1414
.cardCount
color: #8c8c8c
font-size: 0.8em
.list-body
flex: 1 1 auto
flex-direction: column
+2 -2
View File
@@ -39,7 +39,7 @@ template(name="addCardForm")
.minicard-labels
each getLabels
.minicard-label(class="card-label-{{color}}" title="{{name}}")
textarea.minicard-composer-textarea.js-card-title(autofocus)
textarea.minicard-composer-textarea.js-card-title(autofocus dir="auto")
if members.get
.minicard-members.js-minicard-composer-members
each members.get
@@ -96,7 +96,7 @@ template(name="searchElementPopup")
form
label
| {{_ 'title'}}
input.js-element-title(type="text" placeholder="{{_ 'title'}}" autofocus required)
input.js-element-title(type="text" placeholder="{{_ 'title'}}" autofocus required dir="auto")
unless isTemplateSearch
label {{_ 'boards'}}:
.link-board-wrapper
+6 -6
View File
@@ -348,7 +348,7 @@ BlazeComponent.extendComponent({
this.boardId = Session.get('currentBoard');
// In order to get current board info
subManager.subscribe('board', this.boardId);
subManager.subscribe('board', this.boardId, false);
this.board = Boards.findOne(this.boardId);
// List where to insert card
const list = $(Popup._getTopStack().openerElement).closest('.js-list');
@@ -414,7 +414,7 @@ BlazeComponent.extendComponent({
events() {
return [{
'change .js-select-boards'(evt) {
subManager.subscribe('board', $(evt.currentTarget).val());
subManager.subscribe('board', $(evt.currentTarget).val(), false);
this.selectedBoardId.set($(evt.currentTarget).val());
},
'change .js-select-swimlanes'(evt) {
@@ -500,13 +500,13 @@ BlazeComponent.extendComponent({
}
const boardId = board._id;
// Subscribe to this board
subManager.subscribe('board', boardId);
subManager.subscribe('board', boardId, false);
this.selectedBoardId = new ReactiveVar(boardId);
if (!this.isBoardTemplateSearch) {
this.boardId = Session.get('currentBoard');
// In order to get current board info
subManager.subscribe('board', this.boardId);
subManager.subscribe('board', this.boardId, false);
this.swimlaneId = '';
// Swimlane where to insert card
const swimlane = $(Popup._getTopStack().openerElement).parents('.js-swimlane');
@@ -547,7 +547,7 @@ BlazeComponent.extendComponent({
} else if (this.isBoardTemplateSearch) {
const boards = board.searchBoards(this.term.get());
boards.forEach((board) => {
subManager.subscribe('board', board.linkedId);
subManager.subscribe('board', board.linkedId, false);
});
return boards;
} else {
@@ -558,7 +558,7 @@ BlazeComponent.extendComponent({
events() {
return [{
'change .js-select-boards'(evt) {
subManager.subscribe('board', $(evt.currentTarget).val());
subManager.subscribe('board', $(evt.currentTarget).val(), false);
this.selectedBoardId.set($(evt.currentTarget).val());
},
'submit .js-search-term-form'(evt) {
+1 -1
View File
@@ -19,7 +19,7 @@ template(name="listHeader")
if showCardsCountForList cards.count
| 
p.quiet.small {{cardsCount}} {{_ 'cards-count'}}
span(class="cardCount") {{cardsCount}} {{_ 'cards-count'}}
if isMiniScreen
if currentList
if isWatching
@@ -1,11 +1,44 @@
template(name="cardActions")
div.trigger-item
div.trigger-content
div.trigger-dropdown
select(id="setdate-action")
option(value="setDate") {{{_'r-set'}}}
option(value="updateDate") {{{_'r-update'}}}
div.trigger-text
| {{{_'r-datefield'}}}
div.trigger-dropdown
select(id="setdate-datefield")
option(value="startAt") {{{_'r-df-start-at'}}}
option(value="dueAt") {{{_'r-df-due-at'}}}
option(value="endAt") {{{_'r-df-end-at'}}}
option(value="receivedAt") {{{_'r-df-received-at'}}}
div.trigger-text
| {{{_'r-to-current-datetime'}}}
div.trigger-button.js-set-date-action.js-goto-rules
i.fa.fa-plus
div.trigger-item
div.trigger-content
div.trigger-text
| {{{_'r-remove-value-from'}}}
| {{{_'r-datefield'}}}
div.trigger-dropdown
select(id="setdate-removedatefieldvalue")
option(value="startAt") {{{_'r-df-start-at'}}}
option(value="dueAt") {{{_'r-df-due-at'}}}
option(value="endAt") {{{_'r-df-end-at'}}}
option(value="receivedAt") {{{_'r-df-received-at'}}}
div.trigger-button.js-remove-datevalue-action.js-goto-rules
i.fa.fa-plus
div.trigger-item
div.trigger-content
div.trigger-dropdown
select(id="label-action")
option(value="add") {{{_'r-add'}}}
option(value="remove") {{{_'r-remove'}}}
div.trigger-text
div.trigger-text
| {{{_'r-label'}}}
div.trigger-dropdown
select(id="label-id")
@@ -21,16 +54,16 @@ template(name="cardActions")
select(id="member-action")
option(value="add") {{{_'r-add'}}}
option(value="remove") {{{_'r-remove'}}}
div.trigger-text
div.trigger-text
| {{{_'r-member'}}}
div.trigger-dropdown
input(id="member-name",type=text,placeholder="{{{_'r-name'}}}")
input(id="member-name",type=text,placeholder="{{{_'r-name'}}}")
div.trigger-button.js-add-member-action.js-goto-rules
i.fa.fa-plus
div.trigger-item
div.trigger-content
div.trigger-text
div.trigger-text
| {{{_'r-remove-all'}}}
div.trigger-button.js-add-removeall-action.js-goto-rules
i.fa.fa-plus
@@ -29,6 +29,54 @@ BlazeComponent.extendComponent({
events() {
return [{
'click .js-set-date-action' (event) {
const ruleName = this.data().ruleName.get();
const trigger = this.data().triggerVar.get();
const triggerId = Triggers.insert(trigger);
const actionSelected = this.find('#setdate-action').value;
const dateFieldSelected = this.find('#setdate-datefield').value;
const boardId = Session.get('currentBoard');
const desc = Utils.getTriggerActionDesc(event, this);
const actionId = Actions.insert({
actionType: actionSelected,
dateField: dateFieldSelected,
boardId,
desc,
});
Rules.insert({
title: ruleName,
triggerId,
actionId,
boardId,
desc,
});
},
'click .js-remove-datevalue-action' (event) {
const ruleName = this.data().ruleName.get();
const trigger = this.data().triggerVar.get();
const triggerId = Triggers.insert(trigger);
const dateFieldSelected = this.find('#setdate-removedatefieldvalue').value;
const boardId = Session.get('currentBoard');
const desc = Utils.getTriggerActionDesc(event, this);
const actionId = Actions.insert({
actionType: 'removeDate',
dateField: dateFieldSelected,
boardId,
desc,
});
Rules.insert({
title: ruleName,
triggerId,
actionId,
boardId,
desc,
});
},
'click .js-add-label-action' (event) {
const ruleName = this.data().ruleName.get();
const trigger = this.data().triggerVar.get();
+11 -1
View File
@@ -17,6 +17,10 @@ template(name="rulesList")
button.js-delete-rule
i.fa.fa-trash-o
| {{{_ 'r-delete-rule'}}}
else if currentUser.isBoardAdmin
button.js-delete-rule
i.fa.fa-trash-o
| {{{_ 'r-delete-rule'}}}
else
li.no-items-message {{{_ 'r-no-rules' }}}
if currentUser.isAdmin
@@ -24,4 +28,10 @@ template(name="rulesList")
button.js-goto-trigger
i.fa.fa-plus
| {{{_ 'r-add-rule'}}}
input(type=text,placeholder="{{{_ 'r-new-rule-name' }}}",id="ruleTitle")
input(type=text,placeholder="{{{_ 'r-new-rule-name' }}}",id="ruleTitle")
else if currentUser.isBoardAdmin
div.rules-add
button.js-goto-trigger
i.fa.fa-plus
| {{{_ 'r-add-rule'}}}
input(type=text,placeholder="{{{_ 'r-new-rule-name' }}}",id="ruleTitle")
@@ -22,7 +22,7 @@ template(name="cardTriggers")
div.trigger-item
div.trigger-content
div.trigger-text
| {{_'r-when-the-label-is'}}
| {{_'r-when-the-label'}}
div.trigger-dropdown
select(id="spec-label")
each labels
+2 -2
View File
@@ -10,8 +10,8 @@ template(name="sidebar")
i.fa.fa-keyboard-o
span {{_ 'keyboard-shortcuts' }}
.sidebar-content.js-board-sidebar-content.js-perfect-scrollbar
a.hide-btn.js-hide-sidebar
i.fa.fa-navicon
//a.hide-btn.js-hide-sidebar
// i.fa.fa-navicon
unless isDefaultView
h2
a.fa.fa-chevron-left.js-back-home
+49 -47
View File
@@ -1,54 +1,56 @@
template(name="archivesSidebar")
+basicTabs(tabs=tabs)
+tabContent(slug="cards")
p.quiet
a.js-restore-all-cards {{_ 'restore-all'}}
| -
a.js-delete-all-cards {{_ 'delete-all'}}
each archivedCards
.minicard-wrapper.js-minicard
+minicard(this)
if currentUser.isBoardMember
if isArchiveReady.get
+basicTabs(tabs=tabs)
+tabContent(slug="cards")
p.quiet
a.js-restore-card {{_ 'restore'}}
a.js-restore-all-cards {{_ 'restore-all'}}
| -
a.js-delete-card {{_ 'delete'}}
if cardIsInArchivedList
p.quiet.small ({{_ 'warn-list-archived'}})
else
p.no-items-message {{_ 'no-archived-cards'}}
+tabContent(slug="lists")
p.quiet
a.js-restore-all-lists {{_ 'restore-all'}}
| -
a.js-delete-all-lists {{_ 'delete-all'}}
ul.archived-lists
each archivedLists
li.archived-lists-item
= title
a.js-delete-all-cards {{_ 'delete-all'}}
each archivedCards
.minicard-wrapper.js-minicard
+minicard(this)
if currentUser.isBoardMember
p.quiet
a.js-restore-list {{_ 'restore'}}
a.js-restore-card {{_ 'restore'}}
| -
a.js-delete-list {{_ 'delete'}}
else
li.no-items-message {{_ 'no-archived-lists'}}
a.js-delete-card {{_ 'delete'}}
if cardIsInArchivedList
p.quiet.small ({{_ 'warn-list-archived'}})
else
p.no-items-message {{_ 'no-archived-cards'}}
+tabContent(slug="swimlanes")
p.quiet
a.js-restore-all-swimlanes {{_ 'restore-all'}}
| -
a.js-delete-all-swimlanes {{_ 'delete-all'}}
ul.archived-lists
each archivedSwimlanes
li.archived-lists-item
= title
if currentUser.isBoardMember
p.quiet
a.js-restore-swimlane {{_ 'restore'}}
| -
a.js-delete-swimlane {{_ 'delete'}}
else
li.no-items-message {{_ 'no-archived-swimlanes'}}
+tabContent(slug="lists")
p.quiet
a.js-restore-all-lists {{_ 'restore-all'}}
| -
a.js-delete-all-lists {{_ 'delete-all'}}
ul.archived-lists
each archivedLists
li.archived-lists-item
= title
if currentUser.isBoardMember
p.quiet
a.js-restore-list {{_ 'restore'}}
| -
a.js-delete-list {{_ 'delete'}}
else
li.no-items-message {{_ 'no-archived-lists'}}
+tabContent(slug="swimlanes")
p.quiet
a.js-restore-all-swimlanes {{_ 'restore-all'}}
| -
a.js-delete-all-swimlanes {{_ 'delete-all'}}
ul.archived-lists
each archivedSwimlanes
li.archived-lists-item
= title
if currentUser.isBoardMember
p.quiet
a.js-restore-swimlane {{_ 'restore'}}
| -
a.js-delete-swimlane {{_ 'delete'}}
else
li.no-items-message {{_ 'no-archived-swimlanes'}}
else
+spinner
@@ -1,4 +1,26 @@
const subManager = new SubsManager();
BlazeComponent.extendComponent({
onCreated() {
this.isArchiveReady = new ReactiveVar(false);
// The pattern we use to manually handle data loading is described here:
// https://kadira.io/academy/meteor-routing-guide/content/subscriptions-and-data-management/using-subs-manager
// XXX The boardId should be readed from some sort the component "props",
// unfortunatly, Blaze doesn't have this notion.
this.autorun(() => {
const currentBoardId = Session.get('currentBoard');
if (!currentBoardId)
return;
const handle = subManager.subscribe('board', currentBoardId, true);
Tracker.nonreactive(() => {
Tracker.autorun(() => {
this.isArchiveReady.set( handle.ready() );
});
});
});
},
tabs() {
return [
{ name: TAPi18n.__('cards'), slug: 'cards' },
+8 -8
View File
@@ -80,11 +80,11 @@ EscapeActions.register('inlinedForm',
);
// submit on click outside
document.addEventListener('click', function(evt) {
const openedForm = currentlyOpenedForm.get();
const isClickOutside = $(evt.target).closest('.js-inlined-form').length === 0;
if (openedForm && isClickOutside) {
$('.js-inlined-form button[type=submit]').click();
openedForm.close();
}
}, true);
//document.addEventListener('click', function(evt) {
// const openedForm = currentlyOpenedForm.get();
// const isClickOutside = $(evt.target).closest('.js-inlined-form').length === 0;
// if (openedForm && isClickOutside) {
// $('.js-inlined-form button[type=submit]').click();
// openedForm.close();
// }
//}, true);
+8
View File
@@ -239,6 +239,10 @@ services:
# ==== CORS =====
# CORS: Set Access-Control-Allow-Origin header.
#- CORS=*
# CORS_ALLOW_HEADERS: Set Access-Control-Allow-Headers header. "Authorization,Content-Type" is required for cross-origin use of the API.
#- CORS_ALLOW_HEADERS=Authorization,Content-Type
# CORS_EXPOSE_HEADERS: Set Access-Control-Expose-Headers header. This is not needed for typical CORS situations
#- CORS_EXPOSE_HEADERS=*
#-----------------------------------------------------------------
# ==== MATOMO INTEGRATION ====
# Optional: Integration with Matomo https://matomo.org that is installed to your server
@@ -324,6 +328,10 @@ services:
#- OAUTH2_USERINFO_ENDPOINT=/oauth/userinfo
# OAuth2 Token Endpoint.
#- OAUTH2_TOKEN_ENDPOINT=/oauth/token
# OAUTH2 ID Token Whitelist Fields.
#- OAUTH2_ID_TOKEN_WHITELIST_FIELDS=""
# OAUTH2 Request Permissions.
#- OAUTH2_REQUEST_PERMISSIONS=openid profile email
# OAuth2 ID Mapping
#- OAUTH2_ID_MAP=
# OAuth2 Username Mapping
+10 -1
View File
@@ -596,7 +596,7 @@
"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-when-the-label": "When the label",
"r-list-name": "list name",
"r-when-a-member": "When a member is",
"r-when-the-member": "When the member",
@@ -669,6 +669,15 @@
"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-set": "Set",
"r-update": "Update",
"r-datefield": "date field",
"r-df-start-at": "start",
"r-df-due-at": "due",
"r-df-end-at": "end",
"r-df-received-at": "received",
"r-to-current-datetime": "to current date/time",
"r-remove-value-from": "Remove value from",
"ldap": "LDAP",
"oauth2": "OAuth2",
"cas": "CAS",
+10 -1
View File
@@ -596,7 +596,7 @@
"r-unarchived": "Възстановено от Архива",
"r-a-card": "карта",
"r-when-a-label-is": "When a label is",
"r-when-the-label-is": "When the label is",
"r-when-the-label": "When the label",
"r-list-name": "list name",
"r-when-a-member": "When a member is",
"r-when-the-member": "When the member",
@@ -669,6 +669,15 @@
"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-set": "Set",
"r-update": "Update",
"r-datefield": "date field",
"r-df-start-at": "start",
"r-df-due-at": "due",
"r-df-end-at": "end",
"r-df-received-at": "received",
"r-to-current-datetime": "to current date/time",
"r-remove-value-from": "Remove value from",
"ldap": "LDAP",
"oauth2": "OAuth2",
"cas": "CAS",
+10 -1
View File
@@ -596,7 +596,7 @@
"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-when-the-label": "When the label",
"r-list-name": "list name",
"r-when-a-member": "When a member is",
"r-when-the-member": "When the member",
@@ -669,6 +669,15 @@
"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-set": "Set",
"r-update": "Update",
"r-datefield": "date field",
"r-df-start-at": "start",
"r-df-due-at": "due",
"r-df-end-at": "end",
"r-df-received-at": "received",
"r-to-current-datetime": "to current date/time",
"r-remove-value-from": "Remove value from",
"ldap": "LDAP",
"oauth2": "OAuth2",
"cas": "CAS",
+10 -1
View File
@@ -596,7 +596,7 @@
"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-when-the-label": "When the label",
"r-list-name": "list name",
"r-when-a-member": "When a member is",
"r-when-the-member": "When the member",
@@ -669,6 +669,15 @@
"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-set": "Set",
"r-update": "Update",
"r-datefield": "date field",
"r-df-start-at": "start",
"r-df-due-at": "due",
"r-df-end-at": "end",
"r-df-received-at": "received",
"r-to-current-datetime": "to current date/time",
"r-remove-value-from": "Remove value from",
"ldap": "LDAP",
"oauth2": "OAuth2",
"cas": "CAS",
+11 -2
View File
@@ -432,7 +432,7 @@
"shortcut-show-shortcuts": "Otevřít tento seznam odkazů",
"shortcut-toggle-filterbar": "Přepnout lištu filtrování",
"shortcut-toggle-sidebar": "Přepnout lištu tabla",
"show-cards-minimum-count": "Zobrazit počet karet pokud sloupec obsahuje více než ",
"show-cards-minimum-count": "Zobrazit počet karet pokud sloupec obsahuje více než",
"sidebar-open": "Otevřít boční panel",
"sidebar-close": "Zavřít boční panel",
"signupPopup-title": "Vytvořit účet",
@@ -596,7 +596,7 @@
"r-unarchived": "Obnoveno z archivu",
"r-a-card": "karta",
"r-when-a-label-is": "Pokud nějaký štítek je",
"r-when-the-label-is": "Pokud tento štítek je",
"r-when-the-label": "Pokud tento štítek je",
"r-list-name": "název seznamu",
"r-when-a-member": "Pokud nějaký člen je",
"r-when-the-member": "Pokud tento člen je",
@@ -669,6 +669,15 @@
"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": "Když je karta přesunuta do jiného sloupce",
"r-set": "Set",
"r-update": "Update",
"r-datefield": "date field",
"r-df-start-at": "start",
"r-df-due-at": "due",
"r-df-end-at": "end",
"r-df-received-at": "received",
"r-to-current-datetime": "to current date/time",
"r-remove-value-from": "Remove value from",
"ldap": "LDAP",
"oauth2": "OAuth2",
"cas": "CAS",
+10 -1
View File
@@ -596,7 +596,7 @@
"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-when-the-label": "When the label",
"r-list-name": "list name",
"r-when-a-member": "When a member is",
"r-when-the-member": "When the member",
@@ -669,6 +669,15 @@
"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-set": "Set",
"r-update": "Update",
"r-datefield": "date field",
"r-df-start-at": "start",
"r-df-due-at": "due",
"r-df-end-at": "end",
"r-df-received-at": "received",
"r-to-current-datetime": "to current date/time",
"r-remove-value-from": "Remove value from",
"ldap": "LDAP",
"oauth2": "OAuth2",
"cas": "CAS",
+10 -1
View File
@@ -596,7 +596,7 @@
"r-unarchived": "aus dem Archiv wiederhergestellt",
"r-a-card": "einer Karte",
"r-when-a-label-is": "Wenn ein Label",
"r-when-the-label-is": " Wenn das Label",
"r-when-the-label": "Wenn das Label",
"r-list-name": "Listenname",
"r-when-a-member": "Wenn ein Mitglied",
"r-when-the-member": "Wenn das Mitglied",
@@ -669,6 +669,15 @@
"r-board-note": "Hinweis: Lassen Sie ein Feld leer, um alle möglichen Werte zu finden.",
"r-checklist-note": "Hinweis: Die Elemente der Checkliste müssen als kommagetrennte Werte geschrieben werden.",
"r-when-a-card-is-moved": "Wenn eine Karte in eine andere Liste verschoben wird",
"r-set": "Setze",
"r-update": "Aktualisiere",
"r-datefield": "Datumsfeld",
"r-df-start-at": "Start",
"r-df-due-at": "Fällig",
"r-df-end-at": "Ende",
"r-df-received-at": "Empfangen",
"r-to-current-datetime": "auf das aktuelle Datum/Zeit",
"r-remove-value-from": "Entferne Wert von",
"ldap": "LDAP",
"oauth2": "OAuth2",
"cas": "CAS",
+10 -1
View File
@@ -596,7 +596,7 @@
"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-when-the-label": "When the label",
"r-list-name": "list name",
"r-when-a-member": "When a member is",
"r-when-the-member": "When the member",
@@ -669,6 +669,15 @@
"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-set": "Set",
"r-update": "Update",
"r-datefield": "date field",
"r-df-start-at": "start",
"r-df-due-at": "due",
"r-df-end-at": "end",
"r-df-received-at": "received",
"r-to-current-datetime": "to current date/time",
"r-remove-value-from": "Remove value from",
"ldap": "LDAP",
"oauth2": "OAuth2",
"cas": "CAS",
+10 -1
View File
@@ -596,7 +596,7 @@
"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-when-the-label": "When the label",
"r-list-name": "list name",
"r-when-a-member": "When a member is",
"r-when-the-member": "When the member",
@@ -669,6 +669,15 @@
"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-set": "Set",
"r-update": "Update",
"r-datefield": "date field",
"r-df-start-at": "start",
"r-df-due-at": "due",
"r-df-end-at": "end",
"r-df-received-at": "received",
"r-to-current-datetime": "to current date/time",
"r-remove-value-from": "Remove value from",
"ldap": "LDAP",
"oauth2": "OAuth2",
"cas": "CAS",
+10 -1
View File
@@ -596,7 +596,7 @@
"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-when-the-label": "When the label",
"r-list-name": "list name",
"r-when-a-member": "When a member is",
"r-when-the-member": "When the member",
@@ -672,6 +672,15 @@
"r-checklist-note": "Note: checklist's items have to be written as comma separated values.",
"r-added-to": "added to",
"r-when-a-card-is-moved": "When a card is moved to another list",
"r-set": "Set",
"r-update": "Update",
"r-datefield": "date field",
"r-df-start-at": "start",
"r-df-due-at": "due",
"r-df-end-at": "end",
"r-df-received-at": "received",
"r-to-current-datetime": "to current date/time",
"r-remove-value-from": "Remove value from",
"ldap": "LDAP",
"oauth2": "OAuth2",
"cas": "CAS",
+10 -1
View File
@@ -596,7 +596,7 @@
"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-when-the-label": "When the label",
"r-list-name": "list name",
"r-when-a-member": "When a member is",
"r-when-the-member": "When the member",
@@ -669,6 +669,15 @@
"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-set": "Set",
"r-update": "Update",
"r-datefield": "date field",
"r-df-start-at": "start",
"r-df-due-at": "due",
"r-df-end-at": "end",
"r-df-received-at": "received",
"r-to-current-datetime": "to current date/time",
"r-remove-value-from": "Remove value from",
"ldap": "LDAP",
"oauth2": "OAuth2",
"cas": "CAS",
+10 -1
View File
@@ -596,7 +596,7 @@
"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-when-the-label": "When the label",
"r-list-name": "list name",
"r-when-a-member": "When a member is",
"r-when-the-member": "When the member",
@@ -669,6 +669,15 @@
"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-set": "Set",
"r-update": "Update",
"r-datefield": "date field",
"r-df-start-at": "start",
"r-df-due-at": "due",
"r-df-end-at": "end",
"r-df-received-at": "received",
"r-to-current-datetime": "to current date/time",
"r-remove-value-from": "Remove value from",
"ldap": "LDAP",
"oauth2": "OAuth2",
"cas": "CAS",
+14 -5
View File
@@ -59,7 +59,7 @@
"activity-checked-item": "marcado %s en la lista de verificación %s de %s",
"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-removed": "eliminada una lista de verificación desde %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",
@@ -504,7 +504,7 @@
"error-notAuthorized": "No estás autorizado a ver esta página.",
"outgoing-webhooks": "Webhooks salientes",
"outgoingWebhooksPopup-title": "Webhooks salientes",
"boardCardTitlePopup-title": "Filtro de títulos de tarjeta ",
"boardCardTitlePopup-title": "Filtro de títulos de tarjeta",
"new-outgoing-webhook": "Nuevo webhook saliente",
"no-name": "(Desconocido)",
"Node_version": "Versión de Node",
@@ -596,7 +596,7 @@
"r-unarchived": "Restaurado del archivo",
"r-a-card": "una tarjeta",
"r-when-a-label-is": "Cuando una etiqueta es",
"r-when-the-label-is": "Cuando la etiqueta es",
"r-when-the-label": "Cuando la etiqueta es",
"r-list-name": "Nombre de lista",
"r-when-a-member": "Cuando un miembro es",
"r-when-the-member": "Cuando el miembro",
@@ -649,7 +649,7 @@
"r-d-remove-label": "Eliminar etiqueta",
"r-create-card": "Crear nueva tarjeta",
"r-in-list": "en la lista",
"r-in-swimlane": "en carril ",
"r-in-swimlane": "en carril",
"r-d-add-member": "Añadir miembro",
"r-d-remove-member": "Eliminar miembro",
"r-d-remove-all-member": "Eliminar todos los miembros",
@@ -669,6 +669,15 @@
"r-board-note": "Nota: deje un campo vacío para que coincida con todos los valores posibles",
"r-checklist-note": "Nota: los ítems de la lista tienen que escribirse como valores separados por coma.",
"r-when-a-card-is-moved": "Cuando una tarjeta es movida a otra lista",
"r-set": "Cambiar",
"r-update": "Actualizar",
"r-datefield": "campo de fecha",
"r-df-start-at": "comienza",
"r-df-due-at": "vencimiento",
"r-df-end-at": "finalizado",
"r-df-received-at": "recibido",
"r-to-current-datetime": "a la fecha/hora actual",
"r-remove-value-from": "Eliminar el valor de",
"ldap": "LDAP",
"oauth2": "OAuth2",
"cas": "CAS",
@@ -677,7 +686,7 @@
"custom-product-name": "Nombre de producto personalizado",
"layout": "Diseño",
"hide-logo": "Ocultar logo",
"add-custom-html-after-body-start": "Añade HTML personalizado después de <body> ",
"add-custom-html-after-body-start": "Añade HTML personalizado después de <body>",
"add-custom-html-before-body-end": "Añade HTML personalizado después de </body>",
"error-undefined": "Algo no está bien",
"error-ldap-login": "Ocurrió un error al intentar acceder",
+10 -1
View File
@@ -596,7 +596,7 @@
"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-when-the-label": "When the label",
"r-list-name": "list name",
"r-when-a-member": "When a member is",
"r-when-the-member": "When the member",
@@ -669,6 +669,15 @@
"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-set": "Set",
"r-update": "Update",
"r-datefield": "date field",
"r-df-start-at": "start",
"r-df-due-at": "due",
"r-df-end-at": "end",
"r-df-received-at": "received",
"r-to-current-datetime": "to current date/time",
"r-remove-value-from": "Remove value from",
"ldap": "LDAP",
"oauth2": "OAuth2",
"cas": "CAS",
+11 -2
View File
@@ -507,7 +507,7 @@
"boardCardTitlePopup-title": "فیلتر موضوع کارت",
"new-outgoing-webhook": "New Outgoing Webhook",
"no-name": "(ناشناخته)",
"Node_version": "نسخه Node ",
"Node_version": "نسخه Node",
"OS_Arch": "OS Arch",
"OS_Cpus": "OS CPU Count",
"OS_Freemem": "OS Free Memory",
@@ -596,7 +596,7 @@
"r-unarchived": "بازگردانی از آرشیو",
"r-a-card": "کارت",
"r-when-a-label-is": "زمانی که لیبل هست",
"r-when-the-label-is": "زمانی که لیبل هست",
"r-when-the-label": "زمانی که لیبل هست",
"r-list-name": "نام لیست",
"r-when-a-member": "زمانی که کاربر هست",
"r-when-the-member": "زمانی که کاربر",
@@ -669,6 +669,15 @@
"r-board-note": "نکته: برای نمایش موارد ممکن کادر را خالی بگذارید.",
"r-checklist-note": "نکته: چک‌لیست‌ها باید توسط کاما از یک‌دیگر جدا شوند.",
"r-when-a-card-is-moved": "دمانی که یک کارت به لیست دیگری منتقل شد",
"r-set": "Set",
"r-update": "Update",
"r-datefield": "date field",
"r-df-start-at": "start",
"r-df-due-at": "due",
"r-df-end-at": "end",
"r-df-received-at": "received",
"r-to-current-datetime": "to current date/time",
"r-remove-value-from": "Remove value from",
"ldap": "LDAP",
"oauth2": "OAuth2",
"cas": "CAS",
+80 -71
View File
@@ -83,7 +83,7 @@
"added": "Lisätty",
"addMemberPopup-title": "Jäsenet",
"admin": "Ylläpitäjä",
"admin-desc": "Voi nähfä ja muokata kortteja, poistaa jäseniä, ja muuttaa taulun asetuksia.",
"admin-desc": "Voi nähdä ja muokata kortteja, poistaa jäseniä, ja muuttaa taulun asetuksia.",
"admin-announcement": "Ilmoitus",
"admin-announcement-active": "Aktiivinen järjestelmänlaajuinen ilmoitus",
"admin-announcement-title": "Ilmoitus ylläpitäjältä",
@@ -103,7 +103,7 @@
"archived-items": "Arkisto",
"archived-boards": "Taulut Arkistossa",
"restore-board": "Palauta taulu",
"no-archived-boards": "Ei tauluja Arkistossa",
"no-archived-boards": "Ei tauluja Arkistossa.",
"archives": "Arkisto",
"template": "Malli",
"templates": "Mallit",
@@ -114,7 +114,7 @@
"attachmentDeletePopup-title": "Poista liitetiedosto?",
"attachments": "Liitetiedostot",
"auto-watch": "Automaattisesti seuraa tauluja kun ne on luotu",
"avatar-too-big": "Profiilikuva on liian suuri (70KB maksimi)",
"avatar-too-big": "Profiilikuva on liian suuri (enintään 70 kt)",
"back": "Takaisin",
"board-change-color": "Muokkaa väriä",
"board-nb-stars": "%s tähteä",
@@ -125,9 +125,9 @@
"boardChangeTitlePopup-title": "Nimeä taulu uudelleen",
"boardChangeVisibilityPopup-title": "Muokkaa näkyvyyttä",
"boardChangeWatchPopup-title": "Muokkaa seuraamista",
"boardMenuPopup-title": "Taulu asetukset",
"boardMenuPopup-title": "Tauluasetukset",
"boards": "Taulut",
"board-view": "Taulu näkymä",
"board-view": "Taulunäkymä",
"board-view-cal": "Kalenteri",
"board-view-swimlanes": "Swimlanet",
"board-view-lists": "Listat",
@@ -136,8 +136,8 @@
"card-archived": "Tämä kortti on siirretty Arkistoon.",
"board-archived": "Tämä taulu on siirretty Arkistoon.",
"card-comments-title": "Tässä kortissa on %s kommenttia.",
"card-delete-notice": "Poistaminen on lopullista. Menetät kaikki toimet jotka on liitetty tähän korttiin.",
"card-delete-pop": "Kaikki toimet poistetaan toimintasyötteestä ja et tule pystymään uudelleenavaamaan korttia. Tätä ei voi peruuttaa.",
"card-delete-notice": "Poistaminen on lopullista. Menetät kaikki tähän korttiin liitetyt toimet.",
"card-delete-pop": "Kaikki toimet poistetaan toimintasyötteestä, etkä pysty avata korttia uudelleen. Tätä ei voi peruuttaa.",
"card-delete-suggest-archive": "Voit siirtää kortin Arkistoon poistaaksesi sen taululta ja säilyttääksesi toimintalokin.",
"card-due": "Erääntyy",
"card-due-on": "Erääntyy",
@@ -154,14 +154,14 @@
"cardCustomField-datePopup-title": "Muokkaa päivää",
"cardCustomFieldsPopup-title": "Muokkaa mukautettuja kenttiä",
"cardDeletePopup-title": "Poista kortti?",
"cardDetailsActionsPopup-title": "Kortti toimet",
"cardDetailsActionsPopup-title": "Korttitoimet",
"cardLabelsPopup-title": "Tunnisteet",
"cardMembersPopup-title": "Jäsenet",
"cardMorePopup-title": "Lisää",
"cardTemplatePopup-title": "Luo malli",
"cards": "Kortit",
"cards-count": "korttia",
"casSignIn": "CAS kirjautuminen",
"casSignIn": "CAS-kirjautuminen",
"cardType-card": "Kortti",
"cardType-linkedCard": "Linkitetty kortti",
"cardType-linkedBoard": "Linkitetty taulu",
@@ -182,7 +182,7 @@
"clipboard": "Leikepöytä tai raahaa ja pudota",
"close": "Sulje",
"close-board": "Sulje taulu",
"close-board-pop": "Voit palauttaa taulun klikkaamalla “Arkisto” painiketta taululistan yläpalkista.",
"close-board-pop": "Voit palauttaa taulun klikkaamalla “Arkisto”-painiketta taululistan yläpalkista.",
"color-black": "musta",
"color-blue": "sininen",
"color-crimson": "karmiininpunainen",
@@ -216,14 +216,14 @@
"no-comments": "Ei kommentteja",
"no-comments-desc": "Ei voi nähdä kommentteja ja toimintaa.",
"computer": "Tietokone",
"confirm-subtask-delete-dialog": "Oletko varma että haluat poistaa alitehtävän?",
"confirm-checklist-delete-dialog": "Oletko varma että haluat poistaa tarkistuslistan?",
"confirm-subtask-delete-dialog": "Haluatko varmasti poistaa alitehtävän?",
"confirm-checklist-delete-dialog": "Haluatko varmasti poistaa tarkistuslistan?",
"copy-card-link-to-clipboard": "Kopioi kortin linkki leikepöydälle",
"linkCardPopup-title": "Linkitä kortti",
"searchElementPopup-title": "Etsi",
"copyCardPopup-title": "Kopioi kortti",
"copyChecklistToManyCardsPopup-title": "Kopioi tarkistuslistan malli monille korteille",
"copyChecklistToManyCardsPopup-instructions": "Kohde korttien otsikot ja kuvaukset JSON muodossa",
"copyChecklistToManyCardsPopup-instructions": "Kohde korttien otsikot ja kuvaukset JSON-muodossa",
"copyChecklistToManyCardsPopup-format": "[ {\"title\": \"Ensimmäisen kortin otsikko\", \"description\":\"Ensimmäisen kortin kuvaus\"}, {\"title\":\"Toisen kortin otsikko\",\"description\":\"Toisen kortin kuvaus\"},{\"title\":\"Viimeisen kortin otsikko\",\"description\":\"Viimeisen kortin kuvaus\"} ]",
"create": "Luo",
"createBoardPopup-title": "Luo taulu",
@@ -237,7 +237,7 @@
"custom-field-date": "Päivämäärä",
"custom-field-dropdown": "Pudotusvalikko",
"custom-field-dropdown-none": "(ei mitään)",
"custom-field-dropdown-options": "Luettelon vaihtoehdot",
"custom-field-dropdown-options": "Listan vaihtoehdot",
"custom-field-dropdown-options-placeholder": "Paina Enter lisätäksesi lisää vaihtoehtoja",
"custom-field-dropdown-unknown": "(tuntematon)",
"custom-field-number": "Numero",
@@ -245,13 +245,13 @@
"custom-fields": "Mukautetut kentät",
"date": "Päivämäärä",
"decline": "Kieltäydy",
"default-avatar": "Oletus profiilikuva",
"default-avatar": "Oletusprofiilikuva",
"delete": "Poista",
"deleteCustomFieldPopup-title": "Poista mukautettu kenttä?",
"deleteLabelPopup-title": "Poista tunniste?",
"description": "Kuvaus",
"disambiguateMultiLabelPopup-title": "Yksikäsitteistä tunniste toiminta",
"disambiguateMultiMemberPopup-title": "Yksikäsitteistä jäsen toiminta",
"disambiguateMultiLabelPopup-title": "Yksikäsitteistä tunnistetoiminta",
"disambiguateMultiMemberPopup-title": "Yksikäsitteistä jäsentoiminta",
"discard": "Hylkää",
"done": "Valmis",
"download": "Lataa",
@@ -259,7 +259,7 @@
"edit-avatar": "Muokkaa profiilikuvaa",
"edit-profile": "Muokkaa profiilia",
"edit-wip-limit": "Muokkaa WIP-rajaa",
"soft-wip-limit": "Pehmeä WIP raja",
"soft-wip-limit": "Pehmeä WIP-raja",
"editCardStartDatePopup-title": "Muokkaa aloituspäivää",
"editCardDueDatePopup-title": "Muokkaa eräpäivää",
"editCustomFieldPopup-title": "Muokkaa kenttää",
@@ -268,25 +268,25 @@
"editNotificationPopup-title": "Muokkaa ilmoituksia",
"editProfilePopup-title": "Muokkaa profiilia",
"email": "Sähköposti",
"email-enrollAccount-subject": "An account created for you on __siteName__",
"email-enrollAccount-text": "Hei __user__,\n\nAlkaaksesi käyttämään palvelua, klikkaa allaolevaa linkkiä.\n\n__url__\n\nKiitos.",
"email-enrollAccount-subject": "Sinulle on luotu tili palveluun __siteName__",
"email-enrollAccount-text": "Hei __user__,\n\nKlikkaa alla olevaa linkkiä aloittaaksesi palvelun käytön.\n\n__url__\n\nKiitos.",
"email-fail": "Sähköpostin lähettäminen epäonnistui",
"email-fail-text": "Virhe yrittäessä lähettää sähköpostia",
"email-invalid": "Virheellinen sähköposti",
"email-invite": "Kutsu sähköpostilla",
"email-invite-subject": "__inviter__ lähetti sinulle kutsun",
"email-invite-text": "Hyvä __user__,\n\n__inviter__ kutsuu sinut liittymään taululle \"__board__\" yhteistyötä varten.\n\nOle hyvä ja seuraa allaolevaa linkkiä:\n\n__url__\n\nKiitos.",
"email-resetPassword-subject": "Reset your password on __siteName__",
"email-resetPassword-text": "Hei __user__,\n\nNollataksesi salasanasi, klikkaa allaolevaa linkkiä.\n\n__url__\n\nKiitos.",
"email-invite-text": "Hyvä __user__,\n\n__inviter__ kutsuu sinut liittymään taululle \"__board__\" yhteistyötä varten.\n\nOle hyvä ja seuraa alla olevaa linkkiä:\n\n__url__\n\nKiitos.",
"email-resetPassword-subject": "Nollaa salasanasi palvelussa __siteName__",
"email-resetPassword-text": "Hei __user__,\n\nNollataksesi salasanasi, klikkaa alla olevaa linkkiä.\n\n__url__\n\nKiitos.",
"email-sent": "Sähköposti lähetetty",
"email-verifyEmail-subject": "Varmista sähköpostiosoitteesi osoitteessa __url__",
"email-verifyEmail-text": "Hei __user__,\n\nvahvistaaksesi sähköpostiosoitteesi, klikkaa allaolevaa linkkiä.\n\n__url__\n\nKiitos.",
"email-verifyEmail-text": "Hei __user__,\n\nvahvistaaksesi sähköpostiosoitteesi, klikkaa alla olevaa linkkiä.\n\n__url__\n\nKiitos.",
"enable-wip-limit": "Ota käyttöön WIP-raja",
"error-board-doesNotExist": "Tämä taulu ei ole olemassa",
"error-board-doesNotExist": "Tätä taulua ei ole olemassa",
"error-board-notAdmin": "Tehdäksesi tämän sinun täytyy olla tämän taulun ylläpitäjä",
"error-board-notAMember": "Tehdäksesi tämän sinun täytyy olla tämän taulun jäsen",
"error-json-malformed": "Tekstisi ei ole kelvollisessa JSON muodossa",
"error-json-schema": "JSON tietosi ei sisällä oikeaa tietoa oikeassa muodossa",
"error-json-malformed": "Tekstisi ei ole kelvollisessa JSON-muodossa",
"error-json-schema": "JSON-tietosi ei sisällä oikeaa tietoa oikeassa muodossa",
"error-list-doesNotExist": "Tätä listaa ei ole olemassa",
"error-user-doesNotExist": "Tätä käyttäjää ei ole olemassa",
"error-user-notAllowSelf": "Et voi kutsua itseäsi",
@@ -316,14 +316,14 @@
"import-board-c": "Tuo taulu",
"import-board-title-trello": "Tuo taulu Trellosta",
"import-board-title-wekan": "Tuo taulu edellisestä viennistä",
"import-sandstorm-backup-warning": "Älä poista tietoja joita toit alkuperäisestä viennistä tai Trellosta ennenkuin tarkistat onnistuuko sulkea ja avata tämä jyvä uudelleen, vai näkyykö Board not found virhe, joka tarkoittaa tietojen häviämistä.",
"import-sandstorm-warning": "Tuotu taulu poistaa kaikki olemassaolevan taulun tiedot ja korvaa ne tuodulla taululla.",
"import-sandstorm-backup-warning": "Älä poista tietoja joita toit alkuperäisestä viennistä tai Trellosta ennen kuin tarkistat onnistuuko sulkea ja avata tämä jyvä uudelleen, vai näkyykö Board not found -virhe, joka tarkoittaa tietojen häviämistä.",
"import-sandstorm-warning": "Tuotu taulu poistaa kaikki olemassa olevan taulun tiedot ja korvaa ne tuodulla taululla.",
"from-trello": "Trellosta",
"from-wekan": "Edellisestä viennistä",
"import-board-instruction-trello": "Trello taulullasi, mene 'Menu', sitten 'More', 'Print and Export', 'Export JSON', ja kopioi tuloksena saamasi teksti",
"import-board-instruction-trello": "Mene Trello-taulullasi 'Menu', sitten 'More', 'Print and Export', 'Export JSON', ja kopioi tuloksena saamasi teksti",
"import-board-instruction-wekan": "Taulullasi, mene 'Valikko', sitten 'Vie taulu', ja kopioi teksti ladatusta tiedostosta.",
"import-board-instruction-about-errors": "Jos virheitä tulee taulua tuotaessa, joskus tuonti silti toimii, ja taulu on Kaikki taulut sivulla.",
"import-json-placeholder": "Liitä kelvollinen JSON tietosi tähän",
"import-json-placeholder": "Liitä kelvollinen JSON-tietosi tähän",
"import-map-members": "Vastaavat jäsenet",
"import-members-map": "Tuomallasi taululla on muutamia jäseniä. Ole hyvä ja valitse tuomiasi jäseniä vastaavat käyttäjäsi",
"import-show-user-mapping": "Tarkasta vastaavat jäsenet",
@@ -345,17 +345,17 @@
"last-admin-desc": "Et voi vaihtaa rooleja koska täytyy olla olemassa ainakin yksi ylläpitäjä.",
"leave-board": "Jää pois taululta",
"leave-board-pop": "Haluatko varmasti poistua taululta __boardTitle__? Sinut poistetaan kaikista tämän taulun korteista.",
"leaveBoardPopup-title": "Jää pois taululta ?",
"leaveBoardPopup-title": "Poistu taululta?",
"link-card": "Linkki tähän korttiin",
"list-archive-cards": "Siirrä kaikki tämän listan kortit Arkistoon",
"list-archive-cards-pop": "Tämä poistaa kaikki tämän listan kortit taululta. Nähdäksesi Arkistossa olevat kortit ja tuodaksesi ne takaisin taululle, klikkaa “Valikko” > “Arkisto”.",
"list-move-cards": "Siirrä kaikki kortit tässä listassa",
"list-select-cards": "Valitse kaikki kortit tässä listassa",
"set-color-list": "Aseta väri",
"listActionPopup-title": "Listaa toimet",
"swimlaneActionPopup-title": "Swimlane toimet",
"listActionPopup-title": "Listatoimet",
"swimlaneActionPopup-title": "Swimlane-toimet",
"swimlaneAddPopup-title": "Lisää Swimlane alle",
"listImportCardPopup-title": "Tuo Trello kortti",
"listImportCardPopup-title": "Tuo Trello-kortti",
"listMorePopup-title": "Lisää",
"link-list": "Linkki tähän listaan",
"list-delete-pop": "Kaikki toimet poistetaan toimintasyötteestä ja listan poistaminen on lopullista. Tätä ei pysty peruuttamaan.",
@@ -365,7 +365,7 @@
"log-out": "Kirjaudu ulos",
"log-in": "Kirjaudu sisään",
"loginPopup-title": "Kirjaudu sisään",
"memberMenuPopup-title": "Jäsen asetukset",
"memberMenuPopup-title": "Jäsenasetukset",
"members": "Jäsenet",
"menu": "Valikko",
"move-selection": "Siirrä valinta",
@@ -390,7 +390,7 @@
"notify-watch": "Vastaanota päivityksiä kaikilta tauluilta, listoilta tai korteilta joita seuraat.",
"optional": "valinnainen",
"or": "tai",
"page-maybe-private": "Tämä sivu voi olla yksityinen. Voit ehkä pystyä näkemään sen <a href='%s'>kirjautumalla sisään</a>.",
"page-maybe-private": "Tämä sivu voi olla yksityinen. Saatat nähdä sen <a href='%s'>kirjautumalla sisään</a>.",
"page-not-found": "Sivua ei löytynyt.",
"password": "Salasana",
"paste-or-dragdrop": "liittääksesi, tai vedä & pudota kuvatiedosto siihen (vain kuva)",
@@ -407,7 +407,7 @@
"remove-cover": "Poista kansi",
"remove-from-board": "Poista taululta",
"remove-label": "Poista tunniste",
"listDeletePopup-title": "Poista lista ?",
"listDeletePopup-title": "Poista lista?",
"remove-member": "Poista jäsen",
"remove-member-from-card": "Poista kortilta",
"remove-member-pop": "Poista __name__ (__username__) taululta __boardTitle__? Jäsen poistetaan kaikilta taulun korteilta. Heille lähetetään ilmoitus.",
@@ -419,7 +419,7 @@
"search": "Etsi",
"rules": "Säännöt",
"search-cards": "Etsi korttien otsikoista ja kuvauksista tällä taululla",
"search-example": "Teksti jota etsitään?",
"search-example": "Etsittävä teksti?",
"select-color": "Valitse väri",
"set-wip-limit-value": "Aseta tämän listan tehtävien enimmäismäärä",
"setWipLimitPopup-title": "Aseta WIP-raja",
@@ -429,9 +429,9 @@
"shortcut-clear-filters": "Poista kaikki suodattimet",
"shortcut-close-dialog": "Sulje valintaikkuna",
"shortcut-filter-my-cards": "Suodata korttini",
"shortcut-show-shortcuts": "Tuo esiin tämä pikavalinta lista",
"shortcut-toggle-filterbar": "Muokkaa suodatus sivupalkin näkyvyyttä",
"shortcut-toggle-sidebar": "Muokkaa taulu sivupalkin näkyvyyttä",
"shortcut-show-shortcuts": "Tuo esiin tämä pikavalintalista",
"shortcut-toggle-filterbar": "Muokkaa suodatussivupalkin näkyvyyttä",
"shortcut-toggle-sidebar": "Muokkaa taulusivupalkin näkyvyyttä",
"show-cards-minimum-count": "Näytä korttien lukumäärä jos lista sisältää enemmän kuin",
"sidebar-open": "Avaa sivupalkki",
"sidebar-close": "Sulje sivupalkki",
@@ -446,8 +446,8 @@
"spent-time-hours": "Käytetty aika (tuntia)",
"overtime-hours": "Ylityö (tuntia)",
"overtime": "Ylityö",
"has-overtime-cards": "Sisältää ylityö kortteja",
"has-spenttime-cards": "Sisältää käytetty aika kortteja",
"has-overtime-cards": "Sisältää ylityökortteja",
"has-spenttime-cards": "Sisältää käytetty aika -kortteja",
"time": "Aika",
"title": "Otsikko",
"tracking": "Ilmoitukset",
@@ -465,13 +465,13 @@
"watch": "Seuraa",
"watching": "Seurataan",
"watching-info": "Sinulle ilmoitetaan tämän taulun muutoksista",
"welcome-board": "Tervetuloa taulu",
"welcome-board": "Tervetuloa-taulu",
"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",
"card-templates-swimlane": "Korttimallit",
"list-templates-swimlane": "Listamallit",
"board-templates-swimlane": "Taulumallit",
"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.",
@@ -480,36 +480,36 @@
"settings": "Asetukset",
"people": "Ihmiset",
"registration": "Rekisteröinti",
"disable-self-registration": "Poista käytöstä itse-rekisteröityminen",
"disable-self-registration": "Poista käytöstä itserekisteröityminen",
"invite": "Kutsu",
"invite-people": "Kutsu ihmisiä",
"to-boards": "Taulu(i)lle",
"email-addresses": "Sähköpostiosoite",
"smtp-host-description": "SMTP palvelimen osoite jolla sähköpostit lähetetään.",
"smtp-port-description": "Portti jota STMP palvelimesi käyttää lähteville sähköposteille.",
"smtp-tls-description": "Ota käyttöön TLS tuki SMTP palvelimelle",
"smtp-host": "SMTP isäntä",
"smtp-port": "SMTP portti",
"smtp-host-description": "SMTP-palvelimen osoite jolla sähköpostit lähetetään.",
"smtp-port-description": "STMP-palvelimesi käyttämä lähteville sähköposteille tarkoitettu portti.",
"smtp-tls-description": "Ota käyttöön TLS-tuki SMTP-palvelimelle",
"smtp-host": "SMTP-isäntä",
"smtp-port": "SMTP-portti",
"smtp-username": "Käyttäjätunnus",
"smtp-password": "Salasana",
"smtp-tls": "TLS tuki",
"smtp-tls": "TLS-tuki",
"send-from": "Lähettäjä",
"send-smtp-test": "Lähetä testi sähköposti itsellesi",
"send-smtp-test": "Lähetä testisähköposti itsellesi",
"invitation-code": "Kutsukoodi",
"email-invite-register-subject": "__inviter__ lähetti sinulle kutsun",
"email-invite-register-text": "Hei __user__,\n\n__inviter__ kutsuu sinut mukaan kanban taulun käyttöön.\n\nOle hyvä ja seuraa allaolevaa linkkiä:\n__url__\n\nJa kutsukoodisi on: __icode__\n\nKiitos.",
"email-smtp-test-subject": "SMTP testi sähköposti",
"email-invite-register-text": "Hei __user__,\n\n__inviter__ kutsuu sinut mukaan kanban-taulun käyttöön.\n\nOle hyvä ja seuraa alla olevaa linkkiä:\n__url__\n\nKutsukoodisi on: __icode__\n\nKiitos.",
"email-smtp-test-subject": "SMTP-testisähköposti",
"email-smtp-test-text": "Olet onnistuneesti lähettänyt sähköpostin",
"error-invitation-code-not-exist": "Kutsukoodi ei ole olemassa",
"error-invitation-code-not-exist": "Kutsukoodia ei ole olemassa",
"error-notAuthorized": "Sinulla ei ole oikeutta tarkastella tätä sivua.",
"outgoing-webhooks": "Lähtevät Webkoukut",
"outgoingWebhooksPopup-title": "Lähtevät Webkoukut",
"boardCardTitlePopup-title": "Kortin otsikko suodatin",
"boardCardTitlePopup-title": "Kortin otsikkosuodatin",
"new-outgoing-webhook": "Uusi lähtevä Webkoukku",
"no-name": "(Tuntematon)",
"Node_version": "Node versio",
"Node_version": "Node-versio",
"OS_Arch": "Käyttöjärjestelmän arkkitehtuuri",
"OS_Cpus": "Käyttöjärjestelmän CPU määrä",
"OS_Cpus": "Käyttöjärjestelmän CPU-määrä",
"OS_Freemem": "Käyttöjärjestelmän vapaa muisti",
"OS_Loadavg": "Käyttöjärjestelmän kuorman keskiarvo",
"OS_Platform": "Käyttöjärjestelmäalusta",
@@ -548,13 +548,13 @@
"delete-board-confirm-popup": "Kaikki listat, kortit, tunnisteet ja toimet poistetaan ja et pysty palauttamaan taulun sisältöä. Tätä ei voi peruuttaa.",
"boardDeletePopup-title": "Poista taulu?",
"delete-board": "Poista taulu",
"default-subtasks-board": "Alitehtävät __board__ taululle",
"default-subtasks-board": "Alitehtävät taululle __board__",
"default": "Oletus",
"queue": "Jono",
"subtask-settings": "Alitehtävä asetukset",
"boardSubtaskSettingsPopup-title": "Taulu alitehtävien asetukset",
"subtask-settings": "Alitehtävä-asetukset",
"boardSubtaskSettingsPopup-title": "Taulualitehtävien asetukset",
"show-subtasks-field": "Korteilla voi olla alitehtäviä",
"deposit-subtasks-board": "Tallenta alitehtävät tälle taululle:",
"deposit-subtasks-board": "Talleta alitehtävät tälle taululle:",
"deposit-subtasks-list": "Laskeutumislista alatehtäville tallennettu tänne:",
"show-parent-in-minicard": "Näytä ylätehtävä minikortilla:",
"prefix-with-full-path": "Etuliite koko polulla",
@@ -562,7 +562,7 @@
"subtext-with-full-path": "Aliteksti koko polulla",
"subtext-with-parent": "Aliteksti ylätehtävällä",
"change-card-parent": "Muuta kortin ylätehtävää",
"parent-card": "Ylätehtävä kortti",
"parent-card": "Ylätehtäväkortti",
"source-board": "Lähdetaulu",
"no-parent": "Älä näytä ylätehtävää",
"activity-added-label": "lisätty tunniste '%s' kohteeseen %s",
@@ -576,7 +576,7 @@
"r-rule": "Sääntö",
"r-add-trigger": "Lisää liipaisin",
"r-add-action": "Lisää toimi",
"r-board-rules": "Taulu säännöt",
"r-board-rules": "Taulusäännöt",
"r-add-rule": "Lisää sääntö",
"r-view-rule": "Näytä sääntö",
"r-delete-rule": "Poista sääntö",
@@ -596,7 +596,7 @@
"r-unarchived": "Palautettu Arkistosta",
"r-a-card": "kortti",
"r-when-a-label-is": "Kun tunniste on",
"r-when-the-label-is": "Kun tunniste on",
"r-when-the-label": "Kun tunniste on",
"r-list-name": "listan nimi",
"r-when-a-member": "Kun jäsen on",
"r-when-the-member": "Kun käyttäjä",
@@ -669,6 +669,15 @@
"r-board-note": "Huom: jätä kenttä tyhjäksi täsmätäksesi jokaiseen mahdolliseen arvoon.",
"r-checklist-note": "Huom: tarkistuslistan kohteet täytyy kirjoittaa pilkulla eroteltuina.",
"r-when-a-card-is-moved": "Kun kortti on siirretty toiseen listaan",
"r-set": "Aseta",
"r-update": "Päivitä",
"r-datefield": "päivämäärä kenttä",
"r-df-start-at": "alkaa",
"r-df-due-at": "erääntyy",
"r-df-end-at": "loppuu",
"r-df-received-at": "vastaanotettu",
"r-to-current-datetime": "nykyiseen päivään/aikaan",
"r-remove-value-from": "Poista arvo kohteesta",
"ldap": "LDAP",
"oauth2": "OAuth2",
"cas": "CAS",
@@ -682,10 +691,10 @@
"error-undefined": "Jotain meni pieleen",
"error-ldap-login": "Virhe tapahtui yrittäessä kirjautua sisään",
"display-authentication-method": "Näytä kirjautumistapa",
"default-authentication-method": "Oletus kirjautumistapa",
"default-authentication-method": "Oletuskirjautumistapa",
"duplicate-board": "Tee kaksoiskappale taulusta",
"people-number": "Ihmisten määrä on:",
"swimlaneDeletePopup-title": "Poista Swimlane ?",
"swimlaneDeletePopup-title": "Poista Swimlane?",
"swimlane-delete-pop": "Kaikki toimet poistetaan toimintasyötteestä ja swimlanen poistaminen on lopullista. Tätä ei pysty peruuttamaan.",
"restore-all": "Palauta kaikki",
"delete-all": "Poista kaikki",
+10 -1
View File
@@ -596,7 +596,7 @@
"r-unarchived": "Restauré depuis l'Archive",
"r-a-card": "carte",
"r-when-a-label-is": "Quand une étiquette est",
"r-when-the-label-is": "Quand l'étiquette est",
"r-when-the-label": "Quand l'étiquette est",
"r-list-name": "Nom de la liste",
"r-when-a-member": "Quand un participant est",
"r-when-the-member": "Quand le participant",
@@ -669,6 +669,15 @@
"r-board-note": "Note : laisser le champ vide pour faire correspondre avec toutes les valeurs possibles.",
"r-checklist-note": "Note : les items de la checklist doivent être séparés par des virgules.",
"r-when-a-card-is-moved": "Quand une carte est déplacée vers une autre liste",
"r-set": "Définir",
"r-update": "Mettre à jour",
"r-datefield": "champ date",
"r-df-start-at": "début",
"r-df-due-at": "échéance",
"r-df-end-at": "fin",
"r-df-received-at": "reçu",
"r-to-current-datetime": "à la date/heure courante",
"r-remove-value-from": "Supprimer la valeur de",
"ldap": "LDAP",
"oauth2": "OAuth2",
"cas": "CAS",
+10 -1
View File
@@ -596,7 +596,7 @@
"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-when-the-label": "When the label",
"r-list-name": "list name",
"r-when-a-member": "When a member is",
"r-when-the-member": "When the member",
@@ -669,6 +669,15 @@
"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-set": "Set",
"r-update": "Update",
"r-datefield": "date field",
"r-df-start-at": "start",
"r-df-due-at": "due",
"r-df-end-at": "end",
"r-df-received-at": "received",
"r-to-current-datetime": "to current date/time",
"r-remove-value-from": "Remove value from",
"ldap": "LDAP",
"oauth2": "OAuth2",
"cas": "CAS",
+14 -5
View File
@@ -213,7 +213,7 @@
"comment-placeholder": "כתיבת הערה",
"comment-only": "הערה בלבד",
"comment-only-desc": "ניתן להגיב על כרטיסים בלבד.",
"no-comments": " אין הערות",
"no-comments": "אין הערות",
"no-comments-desc": "לא ניתן לצפות בתגובות ובפעילויות.",
"computer": "מחשב",
"confirm-subtask-delete-dialog": "למחוק את תת המשימה?",
@@ -371,7 +371,7 @@
"move-selection": "העברת הבחירה",
"moveCardPopup-title": "העברת כרטיס",
"moveCardToBottom-title": "העברה לתחתית הרשימה",
"moveCardToTop-title": "העברה לראש הרשימה ",
"moveCardToTop-title": "העברה לראש הרשימה",
"moveSelectionPopup-title": "העברת בחירה",
"multi-selection": "בחירה מרובה",
"multi-selection-on": "בחירה מרובה פועלת",
@@ -497,7 +497,7 @@
"send-smtp-test": "שליחת דוא״ל בדיקה לעצמך",
"invitation-code": "קוד הזמנה",
"email-invite-register-subject": "נשלחה אליך הזמנה מאת __inviter__",
"email-invite-register-text": " __user__, יקר/ה\n\n__inviter__ מזמין/ה אתכם לשיתוף פעולה בלוח הקנבן.\n\nאנא לחצו על הקישור הבא:\n__url__\n\nקוד ההזמנה הוא: __icode__\n\nתודה.",
"email-invite-register-text": "__user__, יקר/ה\n\n__inviter__ מזמין/ה אתכם לשיתוף פעולה בלוח הקנבן.\n\nאנא לחצו על הקישור הבא:\n__url__\n\nקוד ההזמנה הוא: __icode__\n\nתודה.",
"email-smtp-test-subject": "דוא״ל לבדיקת SMTP",
"email-smtp-test-text": "שלחת הודעת דוא״ל בהצלחה",
"error-invitation-code-not-exist": "קוד ההזמנה אינו קיים",
@@ -511,7 +511,7 @@
"OS_Arch": "ארכיטקטורת מערכת הפעלה",
"OS_Cpus": "מספר מעבדים",
"OS_Freemem": "זיכרון (RAM) פנוי",
"OS_Loadavg": "עומס ממוצע ",
"OS_Loadavg": "עומס ממוצע",
"OS_Platform": "מערכת הפעלה",
"OS_Release": "גרסת מערכת הפעלה",
"OS_Totalmem": "סך כל הזיכרון (RAM)",
@@ -596,7 +596,7 @@
"r-unarchived": "הוחזר מהארכיון",
"r-a-card": "כרטיס",
"r-when-a-label-is": "כאשר תווית",
"r-when-the-label-is": "כאשר התווית היא",
"r-when-the-label": "כאשר התווית היא",
"r-list-name": "שם הרשימה",
"r-when-a-member": "כאשר חבר הוא",
"r-when-the-member": "כאשר חבר",
@@ -669,6 +669,15 @@
"r-board-note": "לתשומת לבך: ניתן להשאיר את השדה ריק כדי ללכוד כל ערך אפשרי.",
"r-checklist-note": "לתשומת לבך: את פריטי רשימת הביצוע יש לכתוב בתצורת רשימה של ערכים המופרדים בפסיקים.",
"r-when-a-card-is-moved": "כאשר כרטיס מועבר לרשימה אחרת",
"r-set": "הגדרה",
"r-update": "עדכון",
"r-datefield": "שדה תאריך",
"r-df-start-at": "התחלה",
"r-df-due-at": "תפוגה",
"r-df-end-at": "סיום",
"r-df-received-at": "התקבל",
"r-to-current-datetime": "לתאריך/שעה הנוכחיים",
"r-remove-value-from": "הסרת ערך מתוך",
"ldap": "LDAP",
"oauth2": "OAuth2",
"cas": "CAS",
+10 -1
View File
@@ -596,7 +596,7 @@
"r-unarchived": "Restored from Archive",
"r-a-card": "a कार्ड",
"r-when-a-label-is": "जब एक नामपत्र है",
"r-when-the-label-is": "जब नामपत्र है",
"r-when-the-label": "जब नामपत्र है",
"r-list-name": "list name",
"r-when-a-member": "जब एक सदस्य is",
"r-when-the-member": "जब the सदस्य",
@@ -669,6 +669,15 @@
"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": "जब एक कार्ड is स्थानांतरित तक another list",
"r-set": "Set",
"r-update": "Update",
"r-datefield": "date field",
"r-df-start-at": "start",
"r-df-due-at": "due",
"r-df-end-at": "end",
"r-df-received-at": "received",
"r-to-current-datetime": "to current date/time",
"r-remove-value-from": "Remove value from",
"ldap": "LDAP",
"oauth2": "OAuth2",
"cas": "CAS",
+10 -1
View File
@@ -596,7 +596,7 @@
"r-unarchived": "Helyreállítva az archívumból",
"r-a-card": "a card",
"r-when-a-label-is": "When a label is",
"r-when-the-label-is": "When the label is",
"r-when-the-label": "When the label",
"r-list-name": "list name",
"r-when-a-member": "When a member is",
"r-when-the-member": "When the member",
@@ -669,6 +669,15 @@
"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": "Amikor egy kártya másik listába kerül",
"r-set": "Set",
"r-update": "Update",
"r-datefield": "date field",
"r-df-start-at": "start",
"r-df-due-at": "due",
"r-df-end-at": "end",
"r-df-received-at": "received",
"r-to-current-datetime": "to current date/time",
"r-remove-value-from": "Remove value from",
"ldap": "LDAP",
"oauth2": "OAuth2",
"cas": "CAS",
+10 -1
View File
@@ -596,7 +596,7 @@
"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-when-the-label": "When the label",
"r-list-name": "list name",
"r-when-a-member": "When a member is",
"r-when-the-member": "When the member",
@@ -669,6 +669,15 @@
"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-set": "Set",
"r-update": "Update",
"r-datefield": "date field",
"r-df-start-at": "start",
"r-df-due-at": "due",
"r-df-end-at": "end",
"r-df-received-at": "received",
"r-to-current-datetime": "to current date/time",
"r-remove-value-from": "Remove value from",
"ldap": "LDAP",
"oauth2": "OAuth2",
"cas": "CAS",
+10 -1
View File
@@ -596,7 +596,7 @@
"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-when-the-label": "When the label",
"r-list-name": "list name",
"r-when-a-member": "When a member is",
"r-when-the-member": "When the member",
@@ -669,6 +669,15 @@
"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-set": "Set",
"r-update": "Update",
"r-datefield": "date field",
"r-df-start-at": "start",
"r-df-due-at": "due",
"r-df-end-at": "end",
"r-df-received-at": "received",
"r-to-current-datetime": "to current date/time",
"r-remove-value-from": "Remove value from",
"ldap": "LDAP",
"oauth2": "OAuth2",
"cas": "CAS",
+10 -1
View File
@@ -596,7 +596,7 @@
"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-when-the-label": "When the label",
"r-list-name": "list name",
"r-when-a-member": "When a member is",
"r-when-the-member": "When the member",
@@ -669,6 +669,15 @@
"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-set": "Set",
"r-update": "Update",
"r-datefield": "date field",
"r-df-start-at": "start",
"r-df-due-at": "due",
"r-df-end-at": "end",
"r-df-received-at": "received",
"r-to-current-datetime": "to current date/time",
"r-remove-value-from": "Remove value from",
"ldap": "LDAP",
"oauth2": "OAuth2",
"cas": "CAS",
+24 -15
View File
@@ -56,7 +56,7 @@
"activity-sent": "inviato %s a %s",
"activity-unjoined": "ha abbandonato %s",
"activity-subtask-added": "aggiunto il sottocompito a 1%s",
"activity-checked-item": " selezionata %s nella checklist %s di %s",
"activity-checked-item": "selezionata %s nella checklist %s di %s",
"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",
@@ -348,7 +348,7 @@
"leaveBoardPopup-title": "Abbandona Bacheca?",
"link-card": "Link a questa scheda",
"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-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": "Imposta un colore",
@@ -473,9 +473,9 @@
"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. ",
"wipLimitErrorPopup-dialog-pt2": "Per favore, sposta alcuni dei compiti fuori da questa lista, oppure imposta un limite di work in progress più alto. ",
"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.",
"wipLimitErrorPopup-dialog-pt2": "Per favore, sposta alcuni dei compiti fuori da questa lista, oppure imposta un limite di work in progress più alto.",
"admin-panel": "Pannello dell'Amministratore",
"settings": "Impostazioni",
"people": "Persone",
@@ -510,13 +510,13 @@
"Node_version": "Versione di Node",
"OS_Arch": "Architettura del sistema operativo",
"OS_Cpus": "Conteggio della CPU del sistema operativo",
"OS_Freemem": "Memoria libera del sistema operativo ",
"OS_Loadavg": "Carico medio del sistema operativo ",
"OS_Freemem": "Memoria libera del sistema operativo",
"OS_Loadavg": "Carico medio del sistema operativo",
"OS_Platform": "Piattaforma del sistema operativo",
"OS_Release": "Versione di rilascio del sistema operativo",
"OS_Totalmem": "Memoria totale del sistema operativo ",
"OS_Type": "Tipo di sistema operativo ",
"OS_Uptime": "Tempo di attività del sistema operativo. ",
"OS_Totalmem": "Memoria totale del sistema operativo",
"OS_Type": "Tipo di sistema operativo",
"OS_Uptime": "Tempo di attività del sistema operativo.",
"days": "giorni",
"hours": "ore",
"minutes": "minuti",
@@ -585,18 +585,18 @@
"r-when-a-card": "Quando una scheda",
"r-is": "è",
"r-is-moved": "viene spostata",
"r-added-to": "Aggiunto/a a ",
"r-added-to": "Aggiunto/a a",
"r-removed-from": "Rimosso da",
"r-the-board": "La bacheca",
"r-list": "lista",
"set-filter": "Imposta un filtro",
"r-moved-to": "Spostato/a a ",
"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-when-the-label": "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",
@@ -669,6 +669,15 @@
"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",
"r-set": "Set",
"r-update": "Update",
"r-datefield": "date field",
"r-df-start-at": "start",
"r-df-due-at": "due",
"r-df-end-at": "end",
"r-df-received-at": "received",
"r-to-current-datetime": "to current date/time",
"r-remove-value-from": "Remove value from",
"ldap": "LDAP",
"oauth2": "Oauth2",
"cas": "CAS",
@@ -685,9 +694,9 @@
"default-authentication-method": "Metodo di autenticazione predefinito",
"duplicate-board": "Duplica bacheca",
"people-number": "Il numero di persone è:",
"swimlaneDeletePopup-title": "Delete Swimlane ?",
"swimlaneDeletePopup-title": "Cancella diagramma swimlane ?",
"swimlane-delete-pop": "All actions will be removed from the activity feed and you won't be able to recover the swimlane. There is no undo.",
"restore-all": "Restore all",
"delete-all": "Delete all",
"delete-all": "Cancella tutto",
"loading": "Loading, please wait."
}
+10 -1
View File
@@ -596,7 +596,7 @@
"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-when-the-label": "When the label",
"r-list-name": "list name",
"r-when-a-member": "When a member is",
"r-when-the-member": "When the member",
@@ -669,6 +669,15 @@
"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": "カードが別のリストに移動したとき",
"r-set": "Set",
"r-update": "Update",
"r-datefield": "date field",
"r-df-start-at": "start",
"r-df-due-at": "due",
"r-df-end-at": "end",
"r-df-received-at": "received",
"r-to-current-datetime": "to current date/time",
"r-remove-value-from": "Remove value from",
"ldap": "LDAP",
"oauth2": "OAuth2",
"cas": "CAS",
+10 -1
View File
@@ -596,7 +596,7 @@
"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-when-the-label": "When the label",
"r-list-name": "list name",
"r-when-a-member": "When a member is",
"r-when-the-member": "When the member",
@@ -669,6 +669,15 @@
"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-set": "Set",
"r-update": "Update",
"r-datefield": "date field",
"r-df-start-at": "start",
"r-df-due-at": "due",
"r-df-end-at": "end",
"r-df-received-at": "received",
"r-to-current-datetime": "to current date/time",
"r-remove-value-from": "Remove value from",
"ldap": "LDAP",
"oauth2": "OAuth2",
"cas": "CAS",
+10 -1
View File
@@ -596,7 +596,7 @@
"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-when-the-label": "When the label",
"r-list-name": "list name",
"r-when-a-member": "When a member is",
"r-when-the-member": "When the member",
@@ -669,6 +669,15 @@
"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-set": "Set",
"r-update": "Update",
"r-datefield": "date field",
"r-df-start-at": "start",
"r-df-due-at": "due",
"r-df-end-at": "end",
"r-df-received-at": "received",
"r-to-current-datetime": "to current date/time",
"r-remove-value-from": "Remove value from",
"ldap": "LDAP",
"oauth2": "OAuth2",
"cas": "CAS",
+10 -1
View File
@@ -596,7 +596,7 @@
"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-when-the-label": "When the label",
"r-list-name": "list name",
"r-when-a-member": "When a member is",
"r-when-the-member": "When the member",
@@ -669,6 +669,15 @@
"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-set": "Set",
"r-update": "Update",
"r-datefield": "date field",
"r-df-start-at": "start",
"r-df-due-at": "due",
"r-df-end-at": "end",
"r-df-received-at": "received",
"r-to-current-datetime": "to current date/time",
"r-remove-value-from": "Remove value from",
"ldap": "LDAP",
"oauth2": "OAuth2",
"cas": "CAS",
+10 -1
View File
@@ -596,7 +596,7 @@
"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-when-the-label": "When the label",
"r-list-name": "list name",
"r-when-a-member": "When a member is",
"r-when-the-member": "When the member",
@@ -669,6 +669,15 @@
"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-set": "Set",
"r-update": "Update",
"r-datefield": "date field",
"r-df-start-at": "start",
"r-df-due-at": "due",
"r-df-end-at": "end",
"r-df-received-at": "received",
"r-to-current-datetime": "to current date/time",
"r-remove-value-from": "Remove value from",
"ldap": "LDAP",
"oauth2": "OAuth2",
"cas": "CAS",
+10 -1
View File
@@ -596,7 +596,7 @@
"r-unarchived": "Възстановено от Архива",
"r-a-card": "карта",
"r-when-a-label-is": "When a label is",
"r-when-the-label-is": "When the label is",
"r-when-the-label": "When the label",
"r-list-name": "list name",
"r-when-a-member": "When a member is",
"r-when-the-member": "When the member",
@@ -669,6 +669,15 @@
"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-set": "Set",
"r-update": "Update",
"r-datefield": "date field",
"r-df-start-at": "start",
"r-df-due-at": "due",
"r-df-end-at": "end",
"r-df-received-at": "received",
"r-to-current-datetime": "to current date/time",
"r-remove-value-from": "Remove value from",
"ldap": "LDAP",
"oauth2": "OAuth2",
"cas": "CAS",
+10 -1
View File
@@ -596,7 +596,7 @@
"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-when-the-label": "When the label",
"r-list-name": "list name",
"r-when-a-member": "When a member is",
"r-when-the-member": "When the member",
@@ -669,6 +669,15 @@
"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-set": "Set",
"r-update": "Update",
"r-datefield": "date field",
"r-df-start-at": "start",
"r-df-due-at": "due",
"r-df-end-at": "end",
"r-df-received-at": "received",
"r-to-current-datetime": "to current date/time",
"r-remove-value-from": "Remove value from",
"ldap": "LDAP",
"oauth2": "OAuth2",
"cas": "CAS",
+10 -1
View File
@@ -596,7 +596,7 @@
"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-when-the-label": "When the label",
"r-list-name": "list name",
"r-when-a-member": "When a member is",
"r-when-the-member": "When the member",
@@ -669,6 +669,15 @@
"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-set": "Set",
"r-update": "Update",
"r-datefield": "date field",
"r-df-start-at": "start",
"r-df-due-at": "due",
"r-df-end-at": "end",
"r-df-received-at": "received",
"r-to-current-datetime": "to current date/time",
"r-remove-value-from": "Remove value from",
"ldap": "LDAP",
"oauth2": "OAuth2",
"cas": "CAS",
+10 -1
View File
@@ -596,7 +596,7 @@
"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-when-the-label": "When the label",
"r-list-name": "list name",
"r-when-a-member": "When a member is",
"r-when-the-member": "When the member",
@@ -669,6 +669,15 @@
"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-set": "Set",
"r-update": "Update",
"r-datefield": "date field",
"r-df-start-at": "start",
"r-df-due-at": "due",
"r-df-end-at": "end",
"r-df-received-at": "received",
"r-to-current-datetime": "to current date/time",
"r-remove-value-from": "Remove value from",
"ldap": "LDAP",
"oauth2": "OAuth2",
"cas": "CAS",
+10 -1
View File
@@ -596,7 +596,7 @@
"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-when-the-label": "When the label",
"r-list-name": "list name",
"r-when-a-member": "When a member is",
"r-when-the-member": "When the member",
@@ -669,6 +669,15 @@
"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-set": "Set",
"r-update": "Update",
"r-datefield": "date field",
"r-df-start-at": "start",
"r-df-due-at": "due",
"r-df-end-at": "end",
"r-df-received-at": "received",
"r-to-current-datetime": "to current date/time",
"r-remove-value-from": "Remove value from",
"ldap": "LDAP",
"oauth2": "OAuth2",
"cas": "CAS",
+12 -3
View File
@@ -42,7 +42,7 @@
"activities": "Ostatnia aktywność",
"activity": "Aktywność",
"activity-added": "dodał(a) %s z %s",
"activity-archived": "%s została przeniesiona do Archiwum ",
"activity-archived": "%s została przeniesiona do Archiwum",
"activity-attached": "załączono %s z %s",
"activity-created": "utworzono %s",
"activity-customfield-created": "utworzono niestandardowe pole %s",
@@ -139,7 +139,7 @@
"card-delete-notice": "Usunięcie jest trwałe. Stracisz wszystkie akcje powiązane z tą kartą.",
"card-delete-pop": "Wszystkie akcje będą usunięte z widoku aktywności, nie można będzie ponownie otworzyć karty. Usunięcie jest nieodwracalne.",
"card-delete-suggest-archive": "Możesz przenieść kartę do Archiwum, a następnie usunąć ją z tablicy i zachować ją w Aktywności.",
"card-due": "Ukończenie\n",
"card-due": "Ukończenie",
"card-due-on": "Ukończenie w",
"card-spent": "Spędzony czas",
"card-edit-attachments": "Edytuj załączniki",
@@ -596,7 +596,7 @@
"r-unarchived": "Przywrócone z Archiwum",
"r-a-card": "karta",
"r-when-a-label-is": "Gdy etykieta jest",
"r-when-the-label-is": "Gdy etykieta jest",
"r-when-the-label": "Gdy etykieta jest",
"r-list-name": "nazwa listy",
"r-when-a-member": "Gdy członek jest",
"r-when-the-member": "Gdy członek jest",
@@ -669,6 +669,15 @@
"r-board-note": "Uwaga: pozostaw pole puste, aby każda wartość była brana pod uwagę.",
"r-checklist-note": "Uwaga: wartości elementów listy muszą być oddzielone przecinkami.",
"r-when-a-card-is-moved": "Gdy karta jest przeniesiona do innej listy",
"r-set": "Set",
"r-update": "Update",
"r-datefield": "date field",
"r-df-start-at": "start",
"r-df-due-at": "due",
"r-df-end-at": "end",
"r-df-received-at": "received",
"r-to-current-datetime": "to current date/time",
"r-remove-value-from": "Remove value from",
"ldap": "LDAP",
"oauth2": "OAuth2",
"cas": "CAS",
+13 -4
View File
@@ -31,7 +31,7 @@
"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-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__",
@@ -354,7 +354,7 @@
"set-color-list": "Definir Cor",
"listActionPopup-title": "Listar Ações",
"swimlaneActionPopup-title": "Ações de Raia",
"swimlaneAddPopup-title": "Adicionar uma Raia abaixo ",
"swimlaneAddPopup-title": "Adicionar uma Raia abaixo",
"listImportCardPopup-title": "Importe um cartão do Trello",
"listMorePopup-title": "Mais",
"link-list": "Vincular a esta lista",
@@ -585,7 +585,7 @@
"r-when-a-card": "Quando um cartão",
"r-is": "é",
"r-is-moved": "é movido",
"r-added-to": "adicionado à ",
"r-added-to": "adicionado à",
"r-removed-from": "Removido de",
"r-the-board": "o quadro",
"r-list": "lista",
@@ -596,7 +596,7 @@
"r-unarchived": "Restaurado do Arquivo-morto",
"r-a-card": "um cartão",
"r-when-a-label-is": "Quando uma etiqueta é",
"r-when-the-label-is": "Quando a etiqueta é",
"r-when-the-label": "Quando a etiqueta é",
"r-list-name": "listar nome",
"r-when-a-member": "Quando um membro é",
"r-when-the-member": "Quando o membro",
@@ -669,6 +669,15 @@
"r-board-note": "Nota: deixe o campo vazio para corresponder à todos os valores possíveis",
"r-checklist-note": "Nota: itens de Checklists devem ser escritos separados por vírgulas",
"r-when-a-card-is-moved": "Quando um cartão é movido de outra lista",
"r-set": "Definir",
"r-update": "Atualizar",
"r-datefield": "campo data",
"r-df-start-at": "início",
"r-df-due-at": "data fim",
"r-df-end-at": "fim",
"r-df-received-at": "recebido",
"r-to-current-datetime": "para data/hora atuais",
"r-remove-value-from": "Remover valores do",
"ldap": "LDAP",
"oauth2": "OAuth2",
"cas": "CAS",
+325 -316
View File
@@ -1,160 +1,160 @@
{
"accept": "Aceitar",
"act-activity-notify": "Notificação de Actividade",
"act-addAttachment": "adicionado anexo __attachment__ ao cartão __card__ na lista __list__ em pista __swimlane__ no quadro __board__",
"act-deleteAttachment": "excluido anexo __attachment__ do cartão __card__ na lista __list__ em pista __swimlane__ no quadro __board__",
"act-addSubtask": "adicionada sub-tarefa __subtask__ ao cartão __card__ na lista __list__ em pista __swimlane__ no quadro __board__",
"act-addLabel": "Adicionada etiqueta __label__ ao cartão __card__ na lista __list__ em pista __swimlane__ no quadro __board__",
"act-addedLabel": "Adicionada etiqueta __label__ ao cartão __card__ na lista __list__ em pista __swimlane__ no quadro __board__",
"act-removeLabel": "Removida etiqueta __label__ do cartão __card__ na lista __list__ em pista __swimlane__ no quadro __board__",
"act-removedLabel": "Removida etiqueta __label__ do cartão __card__ na lista __list__ em pista __swimlane__ no quadro __board__",
"act-addChecklist": "adicionada lista de verificação __checklist__ ao cartão __card__ na lista __list__ em pista __swimlane__ no quadro __board__",
"act-addChecklistItem": "adicionado o item __checklistItem__ a lista de verificação__checklist__ no cartão __card__ na lista __list__ em pista __swimlane__ no quadro __board__",
"act-removeChecklist": "emovida a lista de verificação __checklist__ do cartão __card__ na lista __list__ em pista __swimlane__ no quadro __board__",
"act-removeChecklistItem": "removido item __checklistItem__ da lista de verificação __checkList__ no cartão __card__ na lista __list__ em pista __swimlane__ no quadro __board__",
"act-checkedItem": "marcado __checklistItem__ na lista de verificação __checklist__ no cartão __card__ na lista __list__ em pista __swimlane__ no quadro __board__",
"act-uncheckedItem": "desmarcado __checklistItem__ na lista __checklist__ no cartão __card__ na lista __list__ em pista __swimlane__ no quadro __board__",
"act-completeChecklist": "completada a lista de verificação __checklist__ no cartão __card__ na lista __list__ em pista __swimlane__ no quadro __board__",
"act-uncompleteChecklist": "lista de verificação incompleta __checklist__ no cartão __card__ na lista __list__ em pista __swimlane__ no quadro __board__",
"act-addComment": "comentou no cartão __card__: __comment__ na lista __list__ em pista __swimlane__ no quadro __board__",
"act-createBoard": "criado quadro __board__",
"act-createSwimlane": "criada a pista __swimlane__ no quadro __board__",
"act-createCard": "criado cartão __card__ na lista __list__ em pista __swimlane__ no quadro __board__",
"act-createCustomField": "criado campo personalizado __customField__ no cartão __card__ na lista __list__ em pista __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 pista __swimlane__ no quadro __board__ foi Arquivado",
"act-archivedList": "Lista __list__ em pista __swimlane__ no quadro __board__ foi Arquivada",
"act-archivedSwimlane": "Pista __swimlane__ no quadro __board__ foi Arquivada",
"act-importBoard": "importado quadro __board__",
"act-importCard": "importado cartão __card__ para lista __list__ em pista __swimlane__ no quadro __board__",
"act-importList": "importada lista __list__ para pista __swimlane__ no quadro __board__",
"act-joinMember": "adicionado membro __member__ ao cartão __card__ na lista __list__ em pista __swimlane__ no quadro __board__",
"act-moveCard": "movido cartão __card__ do quadro __board__ da pista __oldSwimlane__ da lista __oldList__ para a pista __swimlane__ na lista __list__",
"act-moveCardToOtherBoard": "movido cartão __card__ da lista __oldList__ em pista __oldSwimlane__ no quadro __oldBoard__ para lista __list__ em pista __swimlane__ no quadro __board__",
"act-removeBoardMember": "removido membro __member__ do quadro __board__",
"act-restoredCard": "restaurado cartão __card__ a lista __list__ em pista __swimlane__ no quadro __board__",
"act-unjoinMember": "removido membro __member__ do cartão __card__ na lista __list__ em pista __swimlane__ no quadro __board__",
"act-addAttachment": "adicionou o anexo __attachment__ ao cartão __card__ na lista __list__ na pista __swimlane__ no quadro __board__",
"act-deleteAttachment": "apagou o anexo __attachment__ do cartão __card__ na lista __list__ na pista __swimlane__ no quadro __board__",
"act-addSubtask": "adicionou a sub-tarefa __subtask__ ao cartão __card__ na lista __list__ na pista __swimlane__ no quadro __board__",
"act-addLabel": "Adicionou a etiqueta __label__ ao cartão __card__ na lista __list__ na pista __swimlane__ no quadro __board__",
"act-addedLabel": "Adicionou a etiqueta __label__ ao cartão __card__ na lista __list__ na pista __swimlane__ no quadro __board__",
"act-removeLabel": "Removeu a etiqueta __label__ do cartão __card__ na lista __list__ na pista __swimlane__ no quadro __board__",
"act-removedLabel": "Removeu a etiqueta __label__ do cartão __card__ na lista __list__ na pista __swimlane__ no quadro __board__",
"act-addChecklist": "adicionoua lista de verificação __checklist__ ao cartão __card__ na lista __list__ na pista __swimlane__ no quadro __board__",
"act-addChecklistItem": "adicionou o item __checklistItem__ à lista de verificação __checklist__ no cartão __card__ na lista __list__ na pista __swimlane__ no quadro __board__",
"act-removeChecklist": "removeu a lista de verificação __checklist__ do cartão __card__ na lista __list__ na pista __swimlane__ no quadro __board__",
"act-removeChecklistItem": "removeu o item __checklistItem__ da lista de verificação __checkList__ no cartão __card__ na lista __list__ na pista __swimlane__ no quadro __board__",
"act-checkedItem": "marcou __checklistItem__ na lista de verificação __checklist__ no cartão __card__ na lista __list__ na pista __swimlane__ no quadro __board__",
"act-uncheckedItem": "desmarcou __checklistItem__ na lista de verificação __checklist__ no cartão __card__ na lista __list__ na pista __swimlane__ no quadro __board__",
"act-completeChecklist": "completou a lista de verificação __checklist__ no cartão __card__ na lista __list__ na pista __swimlane__ no quadro __board__",
"act-uncompleteChecklist": "descompletou a lista de verificação __checklist__ no cartão __card__ na lista __list__ na pista __swimlane__ no quadro __board__",
"act-addComment": "comentou no cartão __card__: __comment__ na lista __list__ na pista __swimlane__ no quadro __board__",
"act-createBoard": "criou o quadro __board__",
"act-createSwimlane": "criou a pista __swimlane__ no quadro __board__",
"act-createCard": "criou o cartão __card__ na lista __list__ na pista __swimlane__ no quadro __board__",
"act-createCustomField": "criou o campo personalizado __customField__ no cartão __card__ na lista __list__ na pista __swimlane__ no quadro __board__",
"act-createList": "adicionou a lista __list__ ao quadro __board__",
"act-addBoardMember": "adicionou o membro __member__ ao quadro __board__",
"act-archivedBoard": "O quadro __board__ foi movido para o Arquivo",
"act-archivedCard": "O cartão __card__ na lista __list__ na pista __swimlane__ no quadro __board__ foi movido para o Arquivo",
"act-archivedList": "A lista __list__ na pista __swimlane__ no quadro __board__ foi movida para o Arquivo",
"act-archivedSwimlane": "A pista __swimlane__ no quadro __board__ foi movida para o Arquivo",
"act-importBoard": "importou o quadro __board__",
"act-importCard": "importou o cartão __card__ para a lista __list__ na pista __swimlane__ no quadro __board__",
"act-importList": "importou a lista __list__ para pista __swimlane__ no quadro __board__",
"act-joinMember": "adicionou o membro __member__ ao cartão __card__ na lista __list__ na pista __swimlane__ no quadro __board__",
"act-moveCard": "moveu o cartão __card__ do quadro __board__ da pista __oldSwimlane__ da lista __oldList__ para a pista __swimlane__ na lista __list__",
"act-moveCardToOtherBoard": "moveuo cartão __card__ da lista __oldList__ na pista __oldSwimlane__ no quadro __oldBoard__ para a lista __list__ na pista __swimlane__ no quadro __board__",
"act-removeBoardMember": "removeuo membro __member__ do quadro __board__",
"act-restoredCard": "restaurou o cartão __card__ para a lista __list__ na pista __swimlane__ no quadro __board__",
"act-unjoinMember": "removeu o membro __member__ do cartão __card__ na lista __list__ na pista __swimlane__ no quadro __board__",
"act-withBoardTitle": "__board__",
"act-withCardTitle": "[__board__] __card__",
"actions": "Ações",
"activities": "Atividades",
"activity": "Atividade",
"actions": "Acções",
"activities": "Actividades",
"activity": "Actividade",
"activity-added": "adicionou %s a %s",
"activity-archived": "%s foi Arquivado",
"activity-archived": "%s foi movido para o Arquivo",
"activity-attached": "anexou %s a %s",
"activity-created": "criou %s",
"activity-customfield-created": "criado campo personalizado %s",
"activity-customfield-created": "criado o campo personalizado %s",
"activity-excluded": "excluiu %s de %s",
"activity-imported": "importado %s em %s de %s",
"activity-imported-board": "importado %s de %s",
"activity-imported": "importou %s para %s de %s",
"activity-imported-board": "importou %s de %s",
"activity-joined": "juntou-se a %s",
"activity-moved": "moveu %s de %s para %s",
"activity-on": "em %s",
"activity-removed": "removeu %s de %s",
"activity-sent": "enviou %s de %s",
"activity-sent": "enviou %s para %s",
"activity-unjoined": "saiu de %s",
"activity-subtask-added": "Adicionar sub-tarefa à",
"activity-checked-item": "marcado %s na lista de verificação %s de %s",
"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 __checklist__ no cartão __card__ na lista __list__ em pista __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": "marcado %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 __checklist__ no cartão __card__ na lista __list__ em pista __swimlane__ no quadro __board__",
"activity-checklist-uncompleted-card": "não-completada a lista de verificação %s",
"add-attachment": "Adicionar Anexos",
"activity-subtask-added": "adicionou a sub-tarefa a",
"activity-checked-item": "marcou %s na lista de verificação %s de %s",
"activity-unchecked-item": "desmarcou %s na lista de verificação %s de %s",
"activity-checklist-added": "adicionou a lista de verificação a %s",
"activity-checklist-removed": "removeu a lista de verificação de %s",
"activity-checklist-completed": "completou a lista de verificação __checklist__ no cartão __card__ na lista __list__ na pista __swimlane__ no quadro __board__",
"activity-checklist-uncompleted": "descompletou a lista de verificação %s de %s",
"activity-checklist-item-added": "adicionou o item a '%s' em %s",
"activity-checklist-item-removed": "removeu o item de '%s' na %s",
"add": "Adicionar",
"activity-checked-item-card": "marcou %s na lista de verificação %s",
"activity-unchecked-item-card": "desmarcou %s na lista de verificação %s",
"activity-checklist-completed-card": "completou a lista de verificação __checklist__ no cartão __card__ na lista __list__ na pista __swimlane__ no quadro __board__",
"activity-checklist-uncompleted-card": "descompletou a lista de verificação %s",
"add-attachment": "Adicionar Anexo",
"add-board": "Adicionar Quadro",
"add-card": "Adicionar Cartão",
"add-swimlane": "Adicionar Pista",
"add-subtask": "Adicionar sub-tarefa",
"add-checklist": "Adicionar lista de verificação",
"add-subtask": "Adicionar Sub-tarefa",
"add-checklist": "Adicionar Lista de Verificação",
"add-checklist-item": "Adicionar um item à lista de verificação",
"add-cover": "Adicionar Capa",
"add-label": "Adicionar Etiqueta",
"add-list": "Adicionar Lista",
"add-members": "Adicionar Membros",
"added": "Criado",
"added": "Adicionado",
"addMemberPopup-title": "Membros",
"admin": "Administrador",
"admin-desc": "Pode ver e editar cartões, remover membros e alterar configurações do quadro.",
"admin-announcement": "Anúncio",
"admin-announcement-active": "Anúncio ativo em todo o sistema",
"admin-announcement-active": "Anúncio Activo em Todo o Sistema",
"admin-announcement-title": "Anúncio do Administrador",
"all-boards": "Todos os quadros",
"and-n-other-card": "E __count__ outro cartão",
"and-n-other-card_plural": "E __count__ outros cartões",
"apply": "Aplicar",
"app-is-offline": "A carregar, por favor espere. Atualizar a página causará perda de dados. Se a carga não funcionar, por favor verifique se o servidor não caiu.",
"app-is-offline": "A carregar, por favor aguarde. Actualizar a página causará perda de dados. Se o carregamento não funcionar, por favor verifique se o servidor não parou.",
"archive": "Mover para o Arquivo",
"archive-all": "Mover Tudo para o Arquivo",
"archive-board": "Mover Quadro para o Arquivo",
"archive-card": "Mover Cartão para o Arquivo",
"archive-list": "Mover Lista para o Arquivo",
"archive-swimlane": "Mover Pista para Arquivo",
"archive-selection": "Mover seleção para o Arquivo",
"archiveBoardPopup-title": "Mover Quadro para o Arquivo?",
"archive-board": "Mover o Quadro para o Arquivo",
"archive-card": "Mover o Cartão para o Arquivo",
"archive-list": "Mover a Lista para o Arquivo",
"archive-swimlane": "Mover a Pista para o Arquivo",
"archive-selection": "Mover a selecção para o Arquivo",
"archiveBoardPopup-title": "Mover o Quadro para o Arquivo?",
"archived-items": "Arquivo",
"archived-boards": "Quadros no Arquivo",
"restore-board": "Restaurar Quadro",
"no-archived-boards": "Sem Quadros no Arquivo.",
"archives": "Arquivos",
"archives": "Arquivo",
"template": "Modelo",
"templates": "Modelos",
"assign-member": "Atribuir Membro",
"attached": "anexado",
"attachment": "Anexo",
"attachment-delete-pop": "Excluir um anexo é permanente. Não será possível recuperá-lo.",
"attachmentDeletePopup-title": "Excluir Anexo?",
"attachment-delete-pop": "Apagar um anexo é permanente. Não será possível recuperá-lo.",
"attachmentDeletePopup-title": "Apagar Anexo?",
"attachments": "Anexos",
"auto-watch": "Veja automaticamente os boards que são criados",
"avatar-too-big": "O avatar é muito grande (70KB max)",
"auto-watch": "Observar automaticamente os quadros quando são criados",
"avatar-too-big": "O avatar é muito grande (70KB máx)",
"back": "Voltar",
"board-change-color": "Alterar cor",
"board-nb-stars": "%s estrelas",
"board-not-found": "Quadro não encontrado",
"board-private-info": "Este quadro será <strong>privado</strong>.",
"board-public-info": "Este quadro será <strong>público</strong>.",
"boardChangeColorPopup-title": "Alterar Tela de Fundo",
"boardChangeColorPopup-title": "Alterar Imagem de Fundo do Quadro",
"boardChangeTitlePopup-title": "Renomear Quadro",
"boardChangeVisibilityPopup-title": "Alterar Visibilidade",
"boardChangeWatchPopup-title": "Alterar observação",
"boardMenuPopup-title": "Configurações do quadro",
"boardChangeWatchPopup-title": "Alterar Observação",
"boardMenuPopup-title": "Configurações do Quadro",
"boards": "Quadros",
"board-view": "Visão de quadro",
"board-view": "Visão do Quadro",
"board-view-cal": "Calendário",
"board-view-swimlanes": "Pistas",
"board-view-lists": "Listas",
"bucket-example": "\"Bucket List\", por exemplo",
"bucket-example": "\"Lista de Desejos\", por exemplo",
"cancel": "Cancelar",
"card-archived": "Este cartão está Arquivado.",
"board-archived": "Este quadro está Arquivado.",
"card-comments-title": "Este cartão possui %s comentários.",
"card-delete-notice": "A exclusão será permanente. Perderá todas as ações associadas a este cartão.",
"card-delete-pop": "Todas as ações serão excluídas da lista de Atividades e não poderá reabrir o cartão. Não há como desfazer.",
"card-archived": "Este cartão no Arquivo.",
"board-archived": "Este quadro está no Arquivo.",
"card-comments-title": "Este cartão possui %s comentário.",
"card-delete-notice": "A remoção será permanente. Perderá todas as acções associadas a este cartão.",
"card-delete-pop": "Todas as acções serão removidas do feed de Actividade e não poderá reabrir o cartão. Não há como desfazer.",
"card-delete-suggest-archive": "Pode mover um cartão para o Arquivo para removê-lo do quadro e preservar a atividade.",
"card-due": "Data fim",
"card-due-on": "Finaliza em",
"card-due": "Data limite",
"card-due-on": "Data limite em",
"card-spent": "Tempo Gasto",
"card-edit-attachments": "Editar anexos",
"card-edit-custom-fields": "Editar campos personalizados",
"card-edit-labels": "Editar etiquetas",
"card-edit-members": "Editar membros",
"card-labels-title": "Alterar etiquetas do cartão.",
"card-labels-title": "Alterar as etiquetas do cartão.",
"card-members-title": "Acrescentar ou remover membros do quadro deste cartão.",
"card-start": "Data início",
"card-start-on": "Começa em",
"card-start": "Data de início",
"card-start-on": "Inicia em",
"cardAttachmentsPopup-title": "Anexar a partir de",
"cardCustomField-datePopup-title": "Mudar data",
"cardCustomField-datePopup-title": "Alterar a data",
"cardCustomFieldsPopup-title": "Editar campos personalizados",
"cardDeletePopup-title": "Excluir Cartão?",
"cardDetailsActionsPopup-title": "Ações do cartão",
"cardDeletePopup-title": "Apagar Cartão?",
"cardDetailsActionsPopup-title": "Acções do Cartão",
"cardLabelsPopup-title": "Etiquetas",
"cardMembersPopup-title": "Membros",
"cardMorePopup-title": "Mais",
@@ -163,25 +163,25 @@
"cards-count": "Cartões",
"casSignIn": "Entrar com CAS",
"cardType-card": "Cartão",
"cardType-linkedCard": "Cartão ligado",
"cardType-linkedBoard": "Quadro ligado",
"cardType-linkedCard": "Cartão Ligado",
"cardType-linkedBoard": "Quadro Ligado",
"change": "Alterar",
"change-avatar": "Alterar Avatar",
"change-password": "Alterar Senha",
"change-permissions": "Alterar permissões",
"change-settings": "Altera configurações",
"changeAvatarPopup-title": "Alterar Avatar",
"changeLanguagePopup-title": "Alterar Idioma",
"changePasswordPopup-title": "Alterar Senha",
"changePermissionsPopup-title": "Alterar Permissões",
"changeSettingsPopup-title": "Altera configurações",
"change-avatar": "Alterar o Avatar",
"change-password": "Alterar a Senha",
"change-permissions": "Alterar as permissões",
"change-settings": "Alterar as Configurações",
"changeAvatarPopup-title": "Alterar o Avatar",
"changeLanguagePopup-title": "Alterar o Idioma",
"changePasswordPopup-title": "Alterar a Senha",
"changePermissionsPopup-title": "Alterar as Permissões",
"changeSettingsPopup-title": "Alterar as Configurações",
"subtasks": "Sub-tarefas",
"checklists": "Listas de verificação",
"click-to-star": "Marcar quadro como favorito.",
"click-to-unstar": "Remover quadro dos favoritos.",
"click-to-star": "Clique para marcar este quadro como favorito.",
"click-to-unstar": "Clique para remover este quadro dos favoritos.",
"clipboard": "Área de Transferência ou arraste e solte",
"close": "Fechar",
"close-board": "Fechar Quadro",
"close-board": "Fechar o Quadro",
"close-board-pop": "Poderá restaurar o quadro clicando no botão “Arquivo” a partir do cabeçalho do Início.",
"color-black": "preto",
"color-blue": "azul",
@@ -209,105 +209,105 @@
"color-white": "branco",
"color-yellow": "amarelo",
"unset-color": "Remover",
"comment": "Comentário",
"comment-placeholder": "Escrever Comentário",
"comment-only": "Somente comentários",
"comment": "Comentar",
"comment-placeholder": "Escrever o Comentário",
"comment-only": "Apenas comentários",
"comment-only-desc": "Pode comentar apenas em cartões.",
"no-comments": "Sem comentários",
"no-comments-desc": "Sem visualização de comentários e atividades.",
"no-comments-desc": "Não pode ver comentários nem actividades.",
"computer": "Computador",
"confirm-subtask-delete-dialog": "Tem certeza que deseja excluir a sub-tarefa?",
"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",
"confirm-subtask-delete-dialog": "Tem certeza que deseja apagar a sub-tarefa?",
"confirm-checklist-delete-dialog": "Tem certeza que quer apagar a lista de verificação?",
"copy-card-link-to-clipboard": "Copiar a ligação do cartão para a área de transferência",
"linkCardPopup-title": "Ligar Cartão",
"searchElementPopup-title": "Buscar",
"searchElementPopup-title": "Procurar",
"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",
"copyChecklistToManyCardsPopup-title": "Copiar o Modelo de Lista de Verificação para Vários Cartões",
"copyChecklistToManyCardsPopup-instructions": "Títulos e Descrições de Cartões de Destino neste formato JSON",
"copyChecklistToManyCardsPopup-format": "[ {\"title\": \"Título do primeiro cartão\", \"description\":\"Descrição do primeiro cartão\"}, {\"title\":\"Título do segundo cartão\",\"description\":\"Descrição do segundo cartão\"},{\"title\":\"Título do último cartão\",\"description\":\"Descrição do último cartão\"} ]",
"create": "Criar",
"createBoardPopup-title": "Criar Quadro",
"chooseBoardSourcePopup-title": "Importar quadro",
"createLabelPopup-title": "Criar Etiqueta",
"createCustomField": "Criar campo",
"createCustomFieldPopup-title": "Criar campo",
"current": "atual",
"custom-field-delete-pop": "Não existe desfazer. Isso irá excluir o campo personalizado de todos os cartões e destruir seu histórico",
"custom-field-checkbox": "Caixa de seleção",
"createCustomField": "Criar Campo",
"createCustomFieldPopup-title": "Criar Campo",
"current": "actual",
"custom-field-delete-pop": "Não existe desfazer. Isto irá remover este campo personalizado de todos os cartões e destruir o seu histórico",
"custom-field-checkbox": "Caixa de selecção",
"custom-field-date": "Data",
"custom-field-dropdown": "Lista suspensa",
"custom-field-dropdown": "Lista Suspensa",
"custom-field-dropdown-none": "(nada)",
"custom-field-dropdown-options": "Lista de opções",
"custom-field-dropdown-options": "Opções da Lista",
"custom-field-dropdown-options-placeholder": "Pressione enter para adicionar mais opções",
"custom-field-dropdown-unknown": "(desconhecido)",
"custom-field-number": "Número",
"custom-field-text": "Texto",
"custom-fields": "Campos personalizados",
"custom-fields": "Campos Personalizados",
"date": "Data",
"decline": "Rejeitar",
"default-avatar": "Avatar padrão",
"delete": "Excluir",
"deleteCustomFieldPopup-title": "Excluir campo personalizado?",
"deleteLabelPopup-title": "Excluir Etiqueta?",
"default-avatar": "Avatar por omissão",
"delete": "Apagar",
"deleteCustomFieldPopup-title": "Apagar o Campo Personalizado?",
"deleteLabelPopup-title": "Apagar a Etiqueta?",
"description": "Descrição",
"disambiguateMultiLabelPopup-title": "Desambiguar ações de etiquetas",
"disambiguateMultiMemberPopup-title": "Desambiguar ações de membros",
"disambiguateMultiLabelPopup-title": "Desambiguar Acção da Etiqueta",
"disambiguateMultiMemberPopup-title": "Desambiguar Acção do Membro",
"discard": "Descartar",
"done": "Feito",
"download": "Baixar",
"download": "Descarregar",
"edit": "Editar",
"edit-avatar": "Alterar Avatar",
"edit-profile": "Editar Perfil",
"edit-wip-limit": "Editar Limite WIP",
"soft-wip-limit": "Limite de WIP",
"editCardStartDatePopup-title": "Altera data de início",
"editCardDueDatePopup-title": "Altera data fim",
"editCustomFieldPopup-title": "Editar campo",
"editCardSpentTimePopup-title": "Editar tempo gasto",
"editLabelPopup-title": "Alterar Etiqueta",
"editNotificationPopup-title": "Editar Notificações",
"editProfilePopup-title": "Editar Perfil",
"edit-avatar": "Alterar o Avatar",
"edit-profile": "Editar o Perfil",
"edit-wip-limit": "Editar o Limite WIP",
"soft-wip-limit": "Limite Suave de WIP",
"editCardStartDatePopup-title": "Alterar a data de início",
"editCardDueDatePopup-title": "Alterar a data limite",
"editCustomFieldPopup-title": "Editar Campo",
"editCardSpentTimePopup-title": "Alterar o tempo gasto",
"editLabelPopup-title": "Alterar a Etiqueta",
"editNotificationPopup-title": "Editar a Notificação",
"editProfilePopup-title": "Editar o Perfil",
"email": "E-mail",
"email-enrollAccount-subject": "Uma conta foi criada para si em __siteName__",
"email-enrollAccount-text": "Olá __user__\npara começar a utilizar o serviço basta clicar no link abaixo.\n__url__\nMuito Obrigado.",
"email-fail": "Falhou ao enviar e-mail",
"email-fail-text": "Erro ao tentar enviar e-mail",
"email-enrollAccount-text": "Olá __user__\nPara começar a utilizar o serviço, basta clicar na ligação abaixo.\n__url__\nObrigado.",
"email-fail": "Falhou a enviar o e-mail",
"email-fail-text": "Erro a tentar enviar o e-mail",
"email-invalid": "E-mail inválido",
"email-invite": "Convite via E-mail",
"email-invite-subject": "__inviter__ lhe enviou um convite",
"email-invite-text": "Caro __user__\n__inviter__ convidou-o para se juntar ao quadro \"__board__\" como colaborador.\nPor favor prossiga através do link abaixo:\n__url__\nMuito obrigado.",
"email-invite": "Convidar via E-mail",
"email-invite-subject": "__inviter__ enviou-lhe um convite",
"email-invite-text": "Caro __user__\n__inviter__ convidou-o para se juntar ao quadro \"__board__\" para colaborar.\nPor favor prossiga através da ligação abaixo:\n__url__\nObrigado.",
"email-resetPassword-subject": "Redefina sua senha em __siteName__",
"email-resetPassword-text": "Olá __user__\nPara redefinir sua senha, por favor clique no link abaixo.\n__url__\nMuito obrigado.",
"email-resetPassword-text": "Olá __user__\nPara redefinir a sua senha, por favor clique na ligação abaixo.\n__url__\nObrigado.",
"email-sent": "E-mail enviado",
"email-verifyEmail-subject": "Verifique seu endereço de e-mail em __siteName__",
"email-verifyEmail-text": "Olá __user__\nPara verificar sua conta de e-mail, clique no link abaixo.\n__url__\nObrigado.",
"email-verifyEmail-subject": "Verifique o seu endereço de e-mail em __siteName__",
"email-verifyEmail-text": "Olá __user__\nPara verificar a sua conta de e-mail, clique na ligação abaixo.\n__url__\nObrigado.",
"enable-wip-limit": "Ativar Limite WIP",
"error-board-doesNotExist": "Este quadro não existe",
"error-board-notAdmin": "Precisa ser administrador desse quadro para fazer isto",
"error-board-notAMember": "Precisa ser um membro desse quadro para fazer isto",
"error-json-malformed": "Seu texto não é um JSON válido",
"error-json-schema": "Seu JSON não inclui as informações no formato correto",
"error-board-notAdmin": "Precisa de ser administrador deste quadro para fazer isso",
"error-board-notAMember": "Precisa de ser um membro deste quadro para fazer isso",
"error-json-malformed": "O seu texto não é um JSON válido",
"error-json-schema": "O seu JSON não inclui as informações apropriadas no formato correto",
"error-list-doesNotExist": "Esta lista não existe",
"error-user-doesNotExist": "Este utilizador não existe",
"error-user-notAllowSelf": "Não pode convidar a si mesmo",
"error-user-notAllowSelf": "Não se pode convidar a si mesmo",
"error-user-notCreated": "Este utilizador não foi criado",
"error-username-taken": "Esse nome de utilizador já existe",
"error-email-taken": "E-mail já está em uso",
"error-email-taken": "Endereço de e-mail já está em uso",
"export-board": "Exportar quadro",
"filter": "Filtrar",
"filter-cards": "Filtrar Cartões",
"filter-clear": "Limpar filtro",
"filter-no-label": "Sem etiquetas",
"filter-no-member": "Sem membros",
"filter-no-custom-fields": "Não há campos personalizados",
"filter-on": "Filtro está ativo",
"filter-no-custom-fields": "Sem Campos Personalizados",
"filter-on": "Filtro está activo",
"filter-on-desc": "Está a filtrar cartões neste quadro. Clique aqui para editar o filtro.",
"filter-to-selection": "Filtrar esta seleção",
"advanced-filter-label": "Filtro avançado",
"advanced-filter-description": "Filtros avançados permitem escrever uma \"string\" contendo os seguintes operadores: == != <= >= && || (). Um espaço é utilizado como separador entre os operadores. Pode filtrar para todos os campos personalizados escrevendo os nomes e valores. Exemplo: Campo1 == Valor1. Nota^Se o campo ou valor tiver espaços precisa encapsular eles em citações sozinhas. Exemplo: Campo1 == Eu\\sou. Também pode combinar múltiplas condições. Exemplo: C1 == V1 || C1 == V2. Normalmente todos os operadores são interpretados da esquerda para direita. Pode alterar a ordem colocando parênteses - como na expressão matemática. Exemplo: C1 == V1 && (C2 == V2 || C2 == V3). Também pode pesquisar campos de texto usando regex: C1 == /Tes.*/i",
"filter-to-selection": "Filtrar esta selecção",
"advanced-filter-label": "Filtro Avançado",
"advanced-filter-description": "Filtro Avançado permite escrever uma \"string\" contendo os seguintes operadores: == != <= >= && || ( ). Um espaço é usado como separador entre Operadores. Pode filtrar em todos os Campos Personalizados escreventos os seus nomes e valores. Por Exemplo: Campo1 == Valor1. Nota: Se os campos ou valores contiverem espaços, tem de os encapsular em apóstrofes. Por Exemplo: 'Campo 1' == 'Valor 1'. Para que caracteres de controlo únicos (' \\/) sejam ignorados, pode usar \\. Por exemplo: Campo1 == I\\'m. Pode também combinar múltiplas condições. Por Exemplo: F1 == V1 || F1 == V2. Normalmente todos os operadores são interpretados da esquerda para a direita. Pode alterar a ordem inserindo parênteses. Por Exemplo: F1 == V1 && ( F2 == V2 || F2 == V3 ). Pode também procurar em campos de texto utilizando uma expressão regular: F1 == /Tes.*/i",
"fullname": "Nome Completo",
"header-logo-title": "Voltar para a lista de quadros.",
"hide-system-messages": "Esconde mensagens de sistema",
"header-logo-title": "Voltar para a sua lista de quadros.",
"hide-system-messages": "Esconder mensagens de sistema",
"headerBarCreateBoardPopup-title": "Criar Quadro",
"home": "Início",
"import": "Importar",
@@ -316,67 +316,67 @@
"import-board-c": "Importar quadro",
"import-board-title-trello": "Importar quadro do Trello",
"import-board-title-wekan": "Importar quadro a partir de exportação prévia",
"import-sandstorm-backup-warning": "Não exclua os dados importados do quadro original exportado ou do Trello antes de verificar se esse item fecha e abre novamente, ou se receber o erro Quadro não encontrado, que significa perda de dados.",
"import-sandstorm-warning": "O quadro importado irá excluir todos os dados existentes no quadro e irá sobrescrever com o quadro importado.",
"import-sandstorm-backup-warning": "Não apague os dados importados do quadro original exportado ou do Trello antes de verificar se esse item fecha e abre novamente, ou se receber o erro Quadro não encontrado, que significa perda de dados.",
"import-sandstorm-warning": "O quadro importado irá apagar todos os dados existentes no quadro e irá sobrescrever com o quadro importado.",
"from-trello": "Do Trello",
"from-wekan": "A partir de exportação prévia",
"import-board-instruction-trello": "No seu quadro do Trello, vá em 'Menu', depois em 'Mais', 'Imprimir e Exportar', 'Exportar JSON', então copie o texto emitido",
"import-board-instruction-wekan": "Em seu quadro vá para 'Menu', depois 'Exportar quadro' e copie o texto no arquivo baixado.",
"import-board-instruction-trello": "No seu quadro do Trello, vá em 'Menu', depois em 'Mais', 'Imprimir e Exportar', 'Exportar JSON', e copie o texto resultante.",
"import-board-instruction-wekan": "No seu quadro vá para 'Menu', depois 'Exportar quadro' e copie o texto no ficheiro descarregado.",
"import-board-instruction-about-errors": "Se receber erros ao importar o quadro, às vezes a importação ainda funciona e o quadro está na página Todos os Quadros.",
"import-json-placeholder": "Cole seus dados JSON válidos aqui",
"import-map-members": "Mapear membros",
"import-members-map": "Seu quadro importado possui alguns membros. Por favor, mapeie os membros que deseja importar para seus utilizadors",
"import-show-user-mapping": "Revisar mapeamento dos membros",
"import-members-map": "O seu quadro importado possui alguns membros. Por favor, mapeie os membros que deseja importar para seus utilizadores",
"import-show-user-mapping": "Rever mapeamento dos membros",
"import-user-select": "Escolha um utilizador existente que deseja usar como esse membro",
"importMapMembersAddPopup-title": "Selecione membro",
"importMapMembersAddPopup-title": "Seleccione membro",
"info": "Versão",
"initials": "Iniciais",
"invalid-date": "Data inválida",
"invalid-time": "Hora inválida",
"invalid-user": "Utilizador inválido",
"joined": "juntou-se",
"just-invited": "Já foi convidado para este quadro",
"just-invited": "Acabou de ser convidado para este quadro",
"keyboard-shortcuts": "Atalhos do teclado",
"label-create": "Criar Etiqueta",
"label-default": "%s etiqueta (padrão)",
"label-delete-pop": "Não será possível recuperá-la. A etiqueta será excluída de todos os cartões e seu histórico será destruído.",
"label-default": "%s etiqueta (omissão)",
"label-delete-pop": "Não há como desfazer. A etiqueta será apagada de todos os cartões e o seu histórico será destruído.",
"labels": "Etiquetas",
"language": "Idioma",
"last-admin-desc": "Não pode alterar funções porque deve existir pelo menos um administrador.",
"leave-board": "Sair do Quadro",
"leave-board-pop": "Tem a certeza de que pretende sair de __boardTitle__? Será removido de todos os cartões neste quadro.",
"leaveBoardPopup-title": "Sair do Quadro?",
"link-card": "Vincular a este cartão",
"leaveBoardPopup-title": "Sair do Quadro ?",
"link-card": "Ligar a este cartão",
"list-archive-cards": "Move todos os cartões nesta lista para o Arquivo",
"list-archive-cards-pop": "Isto removerá todos os cartões desta lista para o quadro. Para visualizar cartões arquivados e trazê-los de volta para o quadro, clique em “Menu” > “Arquivo”.",
"list-move-cards": "Mover todos os cartões desta lista",
"list-select-cards": "Selecionar todos os cartões nesta lista",
"list-archive-cards-pop": "Isto irá remover todos os cartões nesta lista do quadro. Para ver os cartões no Arquivo e trazê-los de volta para o quadro, clique em “Menu” > “Arquivo”.",
"list-move-cards": "Mover todos os cartões nesta lista",
"list-select-cards": "Seleccionar todos os cartões nesta lista",
"set-color-list": "Definir Cor",
"listActionPopup-title": "Listar Ações",
"swimlaneActionPopup-title": "Ações de Pista",
"swimlaneActionPopup-title": "Acções de Pista",
"swimlaneAddPopup-title": "Adicionar uma Pista abaixo",
"listImportCardPopup-title": "Importe um cartão do Trello",
"listMorePopup-title": "Mais",
"link-list": "Vincular a esta lista",
"list-delete-pop": "Todas as ações serão excluídas da lista de atividades e não poderá recuperar a lista. Não há como desfazer.",
"list-delete-suggest-archive": "Pode mover uma lista para o Arquivo para removê-la do quadro e preservar a atividade.",
"link-list": "Ligar a esta lista",
"list-delete-pop": "Todas as acções serão removidas do feed de actividade e não poderá recuperar a lista. Não há como desfazer.",
"list-delete-suggest-archive": "Pode mover uma lista para o Arquivo para a remover do quadro e preservar a actividade.",
"lists": "Listas",
"swimlanes": "Pistas",
"log-out": "Sair",
"log-out": "Terminar a Sessão",
"log-in": "Entrar",
"loginPopup-title": "Entrar",
"memberMenuPopup-title": "Configuração de Membros",
"memberMenuPopup-title": "Configuração dos Membros",
"members": "Membros",
"menu": "Menu",
"move-selection": "Mover seleção",
"moveCardPopup-title": "Mover Cartão",
"moveCardToBottom-title": "Mover para o final",
"moveCardToTop-title": "Mover para o topo",
"moveSelectionPopup-title": "Mover seleção",
"multi-selection": "Multi-Seleção",
"multi-selection-on": "Multi-seleção está ativo",
"muted": "Silenciar",
"muted-info": "Nunca receberá qualquer notificação desse quadro",
"move-selection": "Mover a selecção",
"moveCardPopup-title": "Mover o Cartão",
"moveCardToBottom-title": "Mover para o Fundo",
"moveCardToTop-title": "Mover para o Topo",
"moveSelectionPopup-title": "Mover a selecção",
"multi-selection": "Selecção Múltipla",
"multi-selection-on": "Selecção Múltipla está activa",
"muted": "Silenciado",
"muted-info": "Nunca será notificado de quaisquer alterações neste quadro",
"my-boards": "Meus Quadros",
"name": "Nome",
"no-archived-cards": "Sem cartões no Arquivo.",
@@ -385,29 +385,29 @@
"no-results": "Nenhum resultado.",
"normal": "Normal",
"normal-desc": "Pode ver e editar cartões. Não pode alterar configurações.",
"not-accepted-yet": "Convite ainda não aceito",
"notify-participate": "Receber atualizações de qualquer cartão que criar ou participar como membro",
"notify-watch": "Receber atualizações de qualquer quadro, lista ou cartões que estiver a observar",
"not-accepted-yet": "Convite ainda não aceite",
"notify-participate": "Receber actualizações de qualquer cartão que criar ou participar como membro",
"notify-watch": "Receber actualizações de qualquer quadro, lista ou cartões que estiver a observar",
"optional": "opcional",
"or": "ou",
"page-maybe-private": "Esta página pode ser privada. Poderá vê-la se estiver <a href='%s'>logado</a>.",
"page-maybe-private": "Esta página pode ser privada. Poderá vê-la se <a href='%s'>iniciar a sessão</a>.",
"page-not-found": "Página não encontrada.",
"password": "Senha",
"paste-or-dragdrop": "para colar, ou arraste e solte o arquivo da imagem para cá (somente imagens)",
"paste-or-dragdrop": "para colar, ou arrastar e soltar o ficheiro da imagem para lá (somente imagens)",
"participating": "Participando",
"preview": "Pré-visualizar",
"previewAttachedImagePopup-title": "Pré-visualizar",
"previewClipboardImagePopup-title": "Pré-visualizar",
"private": "Privado",
"private-desc": "Este quadro é privado. Apenas seus membros podem acessar e editá-lo.",
"private-desc": "Este quadro é privado. Apenas o membros do quadro o podem visualizar e editar.",
"profile": "Perfil",
"public": "Público",
"public-desc": "Este quadro é público. Ele é visível a qualquer pessoa com o link e será exibido em motores de busca como o Google. Apenas os seus membros podem editá-lo.",
"quick-access-description": "Clique na estrela para adicionar um atalho nesta barra.",
"public-desc": "Este quadro é público. Está visível para qualquer pessoa com a ligação e será exibido em motores de busca como o Google. Apenas os membros do quadro o podem editar.",
"quick-access-description": "Clique na estrela de um quadro para adicionar um atalho nesta barra.",
"remove-cover": "Remover Capa",
"remove-from-board": "Remover do Quadro",
"remove-label": "Remover Etiqueta",
"listDeletePopup-title": "Excluir Lista?",
"listDeletePopup-title": "Apagar Lista ?",
"remove-member": "Remover Membro",
"remove-member-from-card": "Remover do Cartão",
"remove-member-pop": "Remover __name__ (__username__) de __boardTitle__? O membro será removido de todos os cartões neste quadro e será notificado.",
@@ -415,63 +415,63 @@
"rename": "Renomear",
"rename-board": "Renomear Quadro",
"restore": "Restaurar",
"save": "Salvar",
"search": "Buscar",
"save": "Guardar",
"search": "Procurar",
"rules": "Regras",
"search-cards": "Pesquisa em títulos e descrições de cartões neste quadro",
"search-example": "Texto para procurar",
"select-color": "Selecionar Cor",
"search-cards": "Pesquisar nos títulos e descrições dos cartões deste quadro",
"search-example": "Texto a procurar?",
"select-color": "Seleccionar Cor",
"set-wip-limit-value": "Defina um limite máximo para o número de tarefas nesta lista",
"setWipLimitPopup-title": "Definir Limite WIP",
"shortcut-assign-self": "Atribuir a si o cartão atual",
"shortcut-assign-self": "Atribuir a si o cartão actual",
"shortcut-autocomplete-emoji": "Autocompletar emoji",
"shortcut-autocomplete-members": "Preenchimento automático de membros",
"shortcut-clear-filters": "Limpar todos filtros",
"shortcut-close-dialog": "Fechar dialogo",
"shortcut-filter-my-cards": "Filtrar meus cartões",
"shortcut-show-shortcuts": "Mostrar lista de atalhos",
"shortcut-toggle-filterbar": "Alternar barra de filtro",
"shortcut-toggle-sidebar": "Fechar barra lateral.",
"show-cards-minimum-count": "Mostrar contador de cartões se a lista tiver mais de",
"sidebar-open": "Abrir barra lateral",
"sidebar-close": "Fechar barra lateral",
"shortcut-autocomplete-members": "Autocompletar membros",
"shortcut-clear-filters": "Limpar todos os filtros",
"shortcut-close-dialog": "Fechar Caixa de Dialogo",
"shortcut-filter-my-cards": "Filtrar os meus cartões",
"shortcut-show-shortcuts": "Mostrar esta lista de atalhos",
"shortcut-toggle-filterbar": "Alternar a Barra Lateral de Filtros",
"shortcut-toggle-sidebar": "Alternar a Barra Lateral do Quadro",
"show-cards-minimum-count": "Mostrar contagem de cartões se a lista tiver mais de",
"sidebar-open": "Abrir a Barra Lateral",
"sidebar-close": "Fechar a Barra Lateral",
"signupPopup-title": "Criar uma Conta",
"star-board-title": "Clique para marcar este quadro como favorito. Ele aparecerá no topo na lista dos seus quadros.",
"star-board-title": "Clique para marcar este quadro como favorito. O quadro irá aparecer no topo da sua lista de quadros.",
"starred-boards": "Quadros Favoritos",
"starred-boards-description": "Quadros favoritos aparecem no topo da lista dos seus quadros.",
"subscribe": "Acompanhar",
"team": "Equipe",
"starred-boards-description": "Os quadros favoritos aparecem no topo da sua lista de quadros.",
"subscribe": "Subscrever",
"team": "Equipa",
"this-board": "este quadro",
"this-card": "este cartão",
"spent-time-hours": "Tempo gasto (Horas)",
"overtime-hours": "Tempo extras (Horas)",
"overtime": "Tempo extras",
"has-overtime-cards": "Tem cartões de horas extras",
"has-spenttime-cards": "Gastou cartões de tempo",
"spent-time-hours": "Tempo gasto (horas)",
"overtime-hours": "Horas extra (horas)",
"overtime": "Horas extra",
"has-overtime-cards": "Tem cartões com horas extra",
"has-spenttime-cards": "Tem cartões com tempo gasto",
"time": "Tempo",
"title": "Título",
"tracking": "Rastreamento",
"tracking-info": "Será notificado se houver qualquer alteração em cartões em que é o criador ou membro",
"tracking": "A seguir",
"tracking-info": "Será notificado de quaisquer alterações em cartões em que é o criador ou membro.",
"type": "Tipo",
"unassign-member": "Membro não associado",
"unsaved-description": "Possui uma descrição não salva",
"unassign-member": "Desatribuir membro",
"unsaved-description": "Possui uma descrição não guardada.",
"unwatch": "Deixar de observar",
"upload": "Carregar",
"upload-avatar": "Carregar um avatar",
"uploaded-avatar": "Avatar carregado",
"upload": "Enviar",
"upload-avatar": "Enviar um avatar",
"uploaded-avatar": "Enviado um avatar",
"username": "Nome de utilizador",
"view-it": "Visualizar",
"warn-list-archived": "aviso: este cartão está em uma lista no Arquivo",
"view-it": "Visualizá-lo",
"warn-list-archived": "aviso: este cartão está numa lista no Arquivo",
"watch": "Observar",
"watching": "Observando",
"watching-info": "Será notificado de qualquer alteração neste quadro",
"watching-info": "Será notificado de quaisquer alterações neste quadro",
"welcome-board": "Quadro de Boas Vindas",
"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",
"card-templates-swimlane": "Modelos de Cartão",
"list-templates-swimlane": "Modelos de Lista",
"board-templates-swimlane": "Modelos de Quadro",
"what-to-do": "O que gostaria de fazer?",
"wipLimitErrorPopup-title": "Limite WIP Inválido",
"wipLimitErrorPopup-dialog-pt1": "O número de tarefas nesta lista excede o limite WIP definido.",
@@ -480,14 +480,14 @@
"settings": "Configurações",
"people": "Pessoas",
"registration": "Registo",
"disable-self-registration": "Desabilitar Cadastrar-se",
"invite": "Convite",
"invite-people": "Convide Pessoas",
"to-boards": "Para o/os quadro(s)",
"email-addresses": "Endereço de E-mail",
"smtp-host-description": "O endereço do servidor SMTP que envia seus e-mails.",
"disable-self-registration": "Desabilitar Auto-Registo",
"invite": "Convidar",
"invite-people": "Convidar Pessoas",
"to-boards": "Para o(s) quadro(s)",
"email-addresses": "Endereços de E-mail",
"smtp-host-description": "O endereço do servidor SMTP que envia os seus e-mails.",
"smtp-port-description": "A porta que o servidor SMTP usa para enviar os e-mails.",
"smtp-tls-description": "Habilitar suporte TLS para servidor SMTP",
"smtp-tls-description": "Habilitar suporte TLS para o servidor SMTP",
"smtp-host": "Servidor SMTP",
"smtp-port": "Porta SMTP",
"smtp-username": "Nome de utilizador",
@@ -496,20 +496,20 @@
"send-from": "De",
"send-smtp-test": "Enviar um e-mail de teste para si mesmo",
"invitation-code": "Código do Convite",
"email-invite-register-subject": "__inviter__ lhe enviou um convite",
"email-invite-register-text": "Caro __user__,\n\n__inviter__ convida-o para o quadro Kanban para colaborações.\n\nPor favor, siga o link abaixo:\n__url__ \n\nE seu código de convite é: __icode__\n\nObrigado.",
"email-smtp-test-subject": "E-mail de teste via SMTP",
"email-invite-register-subject": "__inviter__ enviou-lhe um convite",
"email-invite-register-text": "Caro __user__,\n\n__inviter__ convida-o para o quadro Kanban para colaborações.\n\nPor favor, siga a ligação abaixo:\n__url__ \n\nE seu código de convite é: __icode__\n\nObrigado.",
"email-smtp-test-subject": "E-mail de Teste de SMTP",
"email-smtp-test-text": "Enviou um e-mail com sucesso",
"error-invitation-code-not-exist": "O código do convite não existe",
"error-notAuthorized": "Não está autorizado à ver esta página.",
"outgoing-webhooks": "Webhook de saída",
"outgoingWebhooksPopup-title": "Webhook de saída",
"error-notAuthorized": "Não tem autorização para ver esta página.",
"outgoing-webhooks": "Webhooks de saída",
"outgoingWebhooksPopup-title": "Webhooks de saída",
"boardCardTitlePopup-title": "Filtro do Título do Cartão",
"new-outgoing-webhook": "Novo Webhook de saída",
"no-name": "(Desconhecido)",
"Node_version": "Versão do Node",
"OS_Arch": "Arquitetura do SO",
"OS_Cpus": "Quantidade de CPUS do SO",
"OS_Arch": "Arquitectura do SO",
"OS_Cpus": "Quantidade de CPUs do SO",
"OS_Freemem": "Memória Disponível do SO",
"OS_Loadavg": "Carga Média do SO",
"OS_Platform": "Plataforma do SO",
@@ -527,94 +527,94 @@
"yes": "Sim",
"no": "Não",
"accounts": "Contas",
"accounts-allowEmailChange": "Permitir Mudança de e-mail",
"accounts-allowUserNameChange": "Permitir alteração de nome de utilizador",
"accounts-allowEmailChange": "Permitir Alteração do E-mail",
"accounts-allowUserNameChange": "Permitir Alteração de Nome de Utilizador",
"createdAt": "Criado em",
"verified": "Verificado",
"active": "Ativo",
"active": "Activo",
"card-received": "Recebido",
"card-received-on": "Recebido em",
"card-end": "Fim",
"card-end-on": "Termina em",
"editCardReceivedDatePopup-title": "Modificar data de recebimento",
"editCardEndDatePopup-title": "Mudar data de fim",
"editCardReceivedDatePopup-title": "Alterar data de recebimento",
"editCardEndDatePopup-title": "Alterar data de fim",
"setCardColorPopup-title": "Definir cor",
"setCardActionsColorPopup-title": "Escolha uma cor",
"setSwimlaneColorPopup-title": "Escolha uma cor",
"setListColorPopup-title": "Escolha uma cor",
"assigned-by": "Atribuído por",
"requested-by": "Solicitado por",
"board-delete-notice": "Excluir é permanente. Irá perder todas as listas, cartões e ações associados nesse quadro.",
"delete-board-confirm-popup": "Todas as listas, cartões, etiquetas e atividades serão excluídos e não poderá recuperar o conteúdo do quadro. Não há como desfazer.",
"boardDeletePopup-title": "Excluir quadro?",
"delete-board": "Excluir quadro",
"default-subtasks-board": "Sub-tarefas para quadro __board__",
"default": "Padrão",
"assigned-by": "Atribuído Por",
"requested-by": "Solicitado Por",
"board-delete-notice": "Apagar é permanente. Irá perder todas as listas, cartões e acções associadas a este quadro.",
"delete-board-confirm-popup": "Todas as listas, cartões, etiquetas e actividades serão apagadas e não poderá recuperar o conteúdo do quadro. Não há como desfazer.",
"boardDeletePopup-title": "Apagar Quadro?",
"delete-board": "Apagar Quadro",
"default-subtasks-board": "Sub-tarefas para o quadro __board__",
"default": "Omissão",
"queue": "Fila",
"subtask-settings": "Configurações de sub-tarefas",
"boardSubtaskSettingsPopup-title": "Configurações das sub-tarefas do quadro",
"subtask-settings": "Configurações de Sub-tarefas",
"boardSubtaskSettingsPopup-title": "Configurações das Sub-tarefas do Quadro",
"show-subtasks-field": "Cartões podem ter sub-tarefas",
"deposit-subtasks-board": "Inserir sub-tarefas a este quadro:",
"deposit-subtasks-list": "Listas de sub-tarefas inseridas aqui:",
"show-parent-in-minicard": "Mostrar Pai do mini cartão:",
"prefix-with-full-path": "Prefixo com caminho completo",
"prefix-with-parent": "Prefixo com Pai",
"subtext-with-full-path": "Sub-texto com caminho completo",
"subtext-with-parent": "Sub-texto com Pai",
"change-card-parent": "Mudar Pai do cartão",
"deposit-subtasks-board": "Depositar sub-tarefas neste quadro:",
"deposit-subtasks-list": "Lista de destino para sub-tarefas depositadas aqui:",
"show-parent-in-minicard": "Mostrar pai no mini-cartão:",
"prefix-with-full-path": "Prefixar com o caminho completo",
"prefix-with-parent": "Prefixar com o pai",
"subtext-with-full-path": "Sub-texto com o caminho completo",
"subtext-with-parent": "Sub-texto com o pai",
"change-card-parent": "Alterar o pai do cartão",
"parent-card": "Pai do cartão",
"source-board": "Fonte do quadro",
"no-parent": "Não mostrar Pai",
"activity-added-label": "adicionada etiqueta '%s' para %s",
"activity-removed-label": "removida etiqueta '%s' de %s",
"activity-delete-attach": "excluído um anexo de %s",
"activity-added-label-card": "adicionada etiqueta '%s'",
"activity-removed-label-card": "removida etiqueta '%s'",
"activity-delete-attach-card": "excluído um anexo",
"activity-set-customfield": "definir campo personalizado '%s' para '%s' em %s",
"activity-unset-customfield": "redefinir campo personalizado '%s' em %s",
"source-board": "Quadro fonte",
"no-parent": "Não mostrar o pai",
"activity-added-label": "adicionou a etiqueta '%s' a %s",
"activity-removed-label": "removeu a etiqueta '%s' de %s",
"activity-delete-attach": "apagou um anexo de %s",
"activity-added-label-card": "adicionou a etiqueta '%s'",
"activity-removed-label-card": "removeu a etiqueta '%s'",
"activity-delete-attach-card": "apagou um anexo",
"activity-set-customfield": "definiu o campo personalizado '%s' para '%s' em %s",
"activity-unset-customfield": "removeu o campo personalizado '%s' de %s",
"r-rule": "Regra",
"r-add-trigger": "Adicionar gatilho",
"r-add-action": "Adicionar ação",
"r-board-rules": "Quadro de regras",
"r-add-action": "Adicionar acção",
"r-board-rules": "Regras do quadro",
"r-add-rule": "Adicionar regra",
"r-view-rule": "Ver regra",
"r-delete-rule": "Excluir regra",
"r-delete-rule": "Apagar regra",
"r-new-rule-name": "Título da nova regra",
"r-no-rules": "Sem regras",
"r-when-a-card": "Quando um cartão",
"r-is": "é",
"r-is-moved": "é movido",
"r-added-to": "adicionado à",
"r-added-to": "adicionado a",
"r-removed-from": "Removido de",
"r-the-board": "o quadro",
"r-list": "lista",
"set-filter": "Inserir Filtro",
"set-filter": "Definir Filtro",
"r-moved-to": "Movido para",
"r-moved-from": "Movido de",
"r-archived": "Movido para o Arquivo",
"r-unarchived": "Restaurado do Arquivo",
"r-a-card": "um cartão",
"r-when-a-label-is": "Quando uma etiqueta é",
"r-when-the-label-is": "Quando a etiqueta é",
"r-list-name": "listar nome",
"r-when-the-label": "Quando a etiqueta é",
"r-list-name": "listar o nome",
"r-when-a-member": "Quando um membro é",
"r-when-the-member": "Quando o membro",
"r-name": "nome",
"r-when-a-attach": "Quando um anexo",
"r-when-a-checklist": "Quando a lista de verificação é",
"r-when-the-checklist": "Quando a lista de verificação",
"r-completed": "Completado",
"r-made-incomplete": "Feito incompleto",
"r-when-a-item": "Quando o item da lista de verificação é",
"r-completed": "Completada",
"r-made-incomplete": "Tornado incompleta",
"r-when-a-item": "Quando um item de uma lista de verificação é",
"r-when-the-item": "Quando o item da lista de verificação",
"r-checked": "Marcado",
"r-unchecked": "Desmarcado",
"r-move-card-to": "Mover cartão para",
"r-top-of": "Topo de",
"r-bottom-of": "Final de",
"r-its-list": "é lista",
"r-archive": "Mover para Arquivo",
"r-bottom-of": "Fundo de",
"r-its-list": "a sua lista",
"r-archive": "Mover para o Arquivo",
"r-unarchive": "Restaurar do Arquivo",
"r-card": "cartão",
"r-add": "Novo",
@@ -622,7 +622,7 @@
"r-label": "etiqueta",
"r-member": "membro",
"r-remove-all": "Remover todos os membros do cartão",
"r-set-color": "Definir cor para",
"r-set-color": "Definir a cor para",
"r-checklist": "lista de verificação",
"r-check-all": "Marcar todos",
"r-uncheck-all": "Desmarcar todos",
@@ -637,13 +637,13 @@
"r-rule-details": "Detalhes da regra",
"r-d-move-to-top-gen": "Mover cartão para o topo da sua lista",
"r-d-move-to-top-spec": "Mover cartão para o topo da lista",
"r-d-move-to-bottom-gen": "Mover cartão para o final da sua lista",
"r-d-move-to-bottom-spec": "Mover cartão para final da lista",
"r-d-move-to-bottom-gen": "Mover cartão para o fundo da sua lista",
"r-d-move-to-bottom-spec": "Mover cartão para fundo da lista",
"r-d-send-email": "Enviar e-mail",
"r-d-send-email-to": "para",
"r-d-send-email-subject": "assunto",
"r-d-send-email-message": "mensagem",
"r-d-archive": "Mover cartão para Arquivo",
"r-d-archive": "Mover cartão para o Arquivo",
"r-d-unarchive": "Restaurar cartão do Arquivo",
"r-d-add-label": "Adicionar etiqueta",
"r-d-remove-label": "Remover etiqueta",
@@ -665,10 +665,19 @@
"r-with-items": "com os itens",
"r-items-list": "item1,item2,item3",
"r-add-swimlane": "Adicionar pista",
"r-swimlane-name": "Nome da pista",
"r-board-note": "Nota: deixe o campo vazio para corresponder à todos os valores possíveis",
"r-checklist-note": "Nota: itens de Checklists devem ser escritos separados por vírgulas",
"r-swimlane-name": "nome da pista",
"r-board-note": "Nota: deixe o campo vazio para corresponder a todos os valores possíveis.",
"r-checklist-note": "Nota: itens de listas de verificação devem ser escritos separados por vírgulas.",
"r-when-a-card-is-moved": "Quando um cartão é movido de outra lista",
"r-set": "Set",
"r-update": "Update",
"r-datefield": "date field",
"r-df-start-at": "start",
"r-df-due-at": "due",
"r-df-end-at": "end",
"r-df-received-at": "received",
"r-to-current-datetime": "to current date/time",
"r-remove-value-from": "Remove value from",
"ldap": "LDAP",
"oauth2": "OAuth2",
"cas": "CAS",
@@ -680,14 +689,14 @@
"add-custom-html-after-body-start": "Adicionar HTML Personalizado depois do início do <body>",
"add-custom-html-before-body-end": "Adicionar HTML Personalizado antes do fim do </body>",
"error-undefined": "Ocorreu um erro",
"error-ldap-login": "Um erro ocorreu enquanto tentava entrar",
"error-ldap-login": "Ocorreu um erro ocorreu enquanto tentava entrar",
"display-authentication-method": "Mostrar Método de Autenticação",
"default-authentication-method": "Método de Autenticação Padrão",
"default-authentication-method": "Método de Autenticação por Omissão",
"duplicate-board": "Duplicar Quadro",
"people-number": "O número de pessoas é:",
"swimlaneDeletePopup-title": "Delete Swimlane ?",
"swimlane-delete-pop": "All actions will be removed from the activity feed and you won't be able to recover the swimlane. There is no undo.",
"restore-all": "Restore all",
"delete-all": "Delete all",
"loading": "Loading, please wait."
"swimlaneDeletePopup-title": "Apagar Pista ?",
"swimlane-delete-pop": "Todas as acções serão removidas do feed de actividade e não será possível recuperar a pista. Não há como desfazer.",
"restore-all": "Restaurar todos",
"delete-all": "Apagar todos",
"loading": "A carregar, por favor aguarde."
}
+10 -1
View File
@@ -596,7 +596,7 @@
"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-when-the-label": "When the label",
"r-list-name": "list name",
"r-when-a-member": "When a member is",
"r-when-the-member": "When the member",
@@ -669,6 +669,15 @@
"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-set": "Set",
"r-update": "Update",
"r-datefield": "date field",
"r-df-start-at": "start",
"r-df-due-at": "due",
"r-df-end-at": "end",
"r-df-received-at": "received",
"r-to-current-datetime": "to current date/time",
"r-remove-value-from": "Remove value from",
"ldap": "LDAP",
"oauth2": "OAuth2",
"cas": "CAS",
+14 -5
View File
@@ -20,7 +20,7 @@
"act-createBoard": "создал доску __board__",
"act-createSwimlane": "создал дорожку __swimlane__ на доске __board__",
"act-createCard": "создал карточку __card__ в списке __list__ на дорожке __swimlane__ доски __board__",
"act-createCustomField": "создал поле __customField__ в карточке __card__ в списке __list__ на дорожке __swimlane__ доски __board__\n",
"act-createCustomField": "создал поле __customField__ в карточке __card__ в списке __list__ на дорожке __swimlane__ доски __board__",
"act-createList": "добавил список __list__ на доску __board__",
"act-addBoardMember": "добавил участника __member__ на доску __board__",
"act-archivedBoard": "Доска __board__ перемещена в Архив",
@@ -258,7 +258,7 @@
"edit": "Редактировать",
"edit-avatar": "Изменить аватар",
"edit-profile": "Изменить профиль",
"edit-wip-limit": " Изменить лимит на кол-во задач",
"edit-wip-limit": "Изменить лимит на кол-во задач",
"soft-wip-limit": "Мягкий лимит",
"editCardStartDatePopup-title": "Изменить дату начала",
"editCardDueDatePopup-title": "Изменить дату выполнения",
@@ -548,7 +548,7 @@
"delete-board-confirm-popup": "Все списки, карточки, метки и действия будут удалены, и вы не сможете восстановить содержимое доски. Отменить нельзя.",
"boardDeletePopup-title": "Удалить доску?",
"delete-board": "Удалить доску",
"default-subtasks-board": "Подзадача для доски __board__ ",
"default-subtasks-board": "Подзадача для доски __board__",
"default": "По умолчанию",
"queue": "Очередь",
"subtask-settings": "Настройки подзадач",
@@ -596,7 +596,7 @@
"r-unarchived": "Восстановлена из архива",
"r-a-card": "карточку",
"r-when-a-label-is": "Когда метка",
"r-when-the-label-is": "Когда метка",
"r-when-the-label": "Когда метка",
"r-list-name": "имя",
"r-when-a-member": "Когда участник",
"r-when-the-member": "Когда участник",
@@ -669,6 +669,15 @@
"r-board-note": "Примечание: пустое поле соответствует любым возможным значениям.",
"r-checklist-note": "Примечание: пункты контрольных списков при перечислении разделяются запятыми.",
"r-when-a-card-is-moved": "Когда карточка перемещена в другой список",
"r-set": "Set",
"r-update": "Update",
"r-datefield": "date field",
"r-df-start-at": "start",
"r-df-due-at": "due",
"r-df-end-at": "end",
"r-df-received-at": "received",
"r-to-current-datetime": "to current date/time",
"r-remove-value-from": "Remove value from",
"ldap": "LDAP",
"oauth2": "OAuth2",
"cas": "CAS",
@@ -677,7 +686,7 @@
"custom-product-name": "Собственное наименование",
"layout": "Внешний вид",
"hide-logo": "Скрыть логотип",
"add-custom-html-after-body-start": "Добавить HTML после начала <body> ",
"add-custom-html-after-body-start": "Добавить HTML после начала <body>",
"add-custom-html-before-body-end": "Добавить HTML до завершения </body>",
"error-undefined": "Что-то пошло не так",
"error-ldap-login": "Ошибка при попытке авторизации",
+10 -1
View File
@@ -596,7 +596,7 @@
"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-when-the-label": "When the label",
"r-list-name": "list name",
"r-when-a-member": "When a member is",
"r-when-the-member": "When the member",
@@ -669,6 +669,15 @@
"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-set": "Set",
"r-update": "Update",
"r-datefield": "date field",
"r-df-start-at": "start",
"r-df-due-at": "due",
"r-df-end-at": "end",
"r-df-received-at": "received",
"r-to-current-datetime": "to current date/time",
"r-remove-value-from": "Remove value from",
"ldap": "LDAP",
"oauth2": "OAuth2",
"cas": "CAS",
+13 -4
View File
@@ -330,7 +330,7 @@
"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 ",
"initials": "Initialer",
"invalid-date": "Ogiltigt datum",
"invalid-time": "Ogiltig tid",
"invalid-user": "Ogiltig användare",
@@ -361,7 +361,7 @@
"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": "Du kan flytta en lista till Arkiv för att ta bort den från anslagstavlan och bevara aktiviteten.",
"lists": "Listor",
"swimlanes": "Simbanor ",
"swimlanes": "Simbanor",
"log-out": "Logga ut",
"log-in": "Logga in",
"loginPopup-title": "Logga in",
@@ -476,7 +476,7 @@
"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.",
"wipLimitErrorPopup-dialog-pt2": "Flytta några uppgifter ur listan, eller ställ in en högre WIP-gräns.",
"admin-panel": "Administratörspanel ",
"admin-panel": "Administratörspanel",
"settings": "Inställningar",
"people": "Personer",
"registration": "Registrering",
@@ -596,7 +596,7 @@
"r-unarchived": "Återställd från Arkiv",
"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-when-the-label": "När etiketten är",
"r-list-name": "listnamn",
"r-when-a-member": "När en medlem är",
"r-when-the-member": "När medlemmen",
@@ -669,6 +669,15 @@
"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",
"r-set": "Set",
"r-update": "Update",
"r-datefield": "date field",
"r-df-start-at": "start",
"r-df-due-at": "due",
"r-df-end-at": "end",
"r-df-received-at": "received",
"r-to-current-datetime": "to current date/time",
"r-remove-value-from": "Remove value from",
"ldap": "LDAP",
"oauth2": "OAuth2",
"cas": "CAS",
+10 -1
View File
@@ -596,7 +596,7 @@
"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-when-the-label": "When the label",
"r-list-name": "list name",
"r-when-a-member": "When a member is",
"r-when-the-member": "When the member",
@@ -669,6 +669,15 @@
"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-set": "Set",
"r-update": "Update",
"r-datefield": "date field",
"r-df-start-at": "start",
"r-df-due-at": "due",
"r-df-end-at": "end",
"r-df-received-at": "received",
"r-to-current-datetime": "to current date/time",
"r-remove-value-from": "Remove value from",
"ldap": "LDAP",
"oauth2": "OAuth2",
"cas": "CAS",
+10 -1
View File
@@ -596,7 +596,7 @@
"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-when-the-label": "When the label",
"r-list-name": "list name",
"r-when-a-member": "When a member is",
"r-when-the-member": "When the member",
@@ -669,6 +669,15 @@
"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-set": "Set",
"r-update": "Update",
"r-datefield": "date field",
"r-df-start-at": "start",
"r-df-due-at": "due",
"r-df-end-at": "end",
"r-df-received-at": "received",
"r-to-current-datetime": "to current date/time",
"r-remove-value-from": "Remove value from",
"ldap": "LDAP",
"oauth2": "OAuth2",
"cas": "CAS",
+10 -1
View File
@@ -596,7 +596,7 @@
"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-when-the-label": "When the label",
"r-list-name": "list name",
"r-when-a-member": "When a member is",
"r-when-the-member": "When the member",
@@ -669,6 +669,15 @@
"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-set": "Set",
"r-update": "Update",
"r-datefield": "date field",
"r-df-start-at": "start",
"r-df-due-at": "due",
"r-df-end-at": "end",
"r-df-received-at": "received",
"r-to-current-datetime": "to current date/time",
"r-remove-value-from": "Remove value from",
"ldap": "LDAP",
"oauth2": "OAuth2",
"cas": "CAS",
+12 -3
View File
@@ -596,7 +596,7 @@
"r-unarchived": "Arşivden geri çıkarıldı",
"r-a-card": "Kart",
"r-when-a-label-is": "When a label is",
"r-when-the-label-is": "When the label is",
"r-when-the-label": "When the label",
"r-list-name": "liste adı",
"r-when-a-member": "When a member is",
"r-when-the-member": "When the member",
@@ -669,6 +669,15 @@
"r-board-note": "Not: Her olası değere uyması için bir alanı boş bırakın.",
"r-checklist-note": "Not: kontrol listesindeki öğelerin virgülle ayrılmış değerler olarak yazılması gerekir.",
"r-when-a-card-is-moved": "Bir kart başka bir listeye taşındığında",
"r-set": "Set",
"r-update": "Update",
"r-datefield": "date field",
"r-df-start-at": "start",
"r-df-due-at": "due",
"r-df-end-at": "end",
"r-df-received-at": "received",
"r-to-current-datetime": "to current date/time",
"r-remove-value-from": "Remove value from",
"ldap": "LDAP",
"oauth2": "Oauth2",
"cas": "CAS",
@@ -687,7 +696,7 @@
"people-number": "The number of people is:",
"swimlaneDeletePopup-title": "Kulvar silinsin mi?",
"swimlane-delete-pop": "All actions will be removed from the activity feed and you won't be able to recover the swimlane. There is no undo.",
"restore-all": "Restore all",
"restore-all": "Her şeyi eski haline getir",
"delete-all": "Hepsini sil",
"loading": "Loading, please wait."
"loading": "Yükleniyor, lütfen bekleyiniz"
}
+27 -18
View File
@@ -1,6 +1,6 @@
{
"accept": "Прийняти",
"act-activity-notify": "Сповіщення діяльності",
"act-activity-notify": "Сповіщення активності",
"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__",
@@ -17,7 +17,7 @@
"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-createBoard": "Дошку __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__",
@@ -39,26 +39,26 @@
"act-withBoardTitle": "__board__",
"act-withCardTitle": "[__board__] __card__",
"actions": "Дії",
"activities": "Діяльність",
"activity": "Активність",
"activity-added": "додав %s до %s",
"activities": "Діяльності",
"activity": "Діяльність",
"activity-added": "%s додано до %s",
"activity-archived": "%s перенесено до архіву",
"activity-attached": "прикріпив %s до %s",
"activity-created": "створив %s",
"activity-customfield-created": "створив налаштовуване поле",
"activity-excluded": "виключено %s з %s",
"activity-imported": "імпортовано %s до %s з %s",
"activity-imported-board": "імпортовано %s з %s",
"activity-joined": "приєднався %s",
"activity-moved": "переміщений %s з %s до %s",
"activity-attached": "%s прикріплено до %s",
"activity-created": "%sстворено",
"activity-customfield-created": "Створено спеціальне поле",
"activity-excluded": "%s виключено з %s",
"activity-imported": "%s імпортовано до %s з %s",
"activity-imported-board": "%s імпортовано з %s",
"activity-joined": "%s приєднано",
"activity-moved": "%s переміщено з %s до %s",
"activity-on": "%s",
"activity-removed": "видалив %s з %s",
"activity-sent": "відправив %s до %s",
"activity-removed": "%s видалено з %s",
"activity-sent": "%s відправлено до %s",
"activity-unjoined": "unjoined %s",
"activity-subtask-added": "додав підзадачу до %s",
"activity-subtask-added": "Додано підзадачу до %s",
"activity-checked-item": "checked %s in checklist %s of %s",
"activity-unchecked-item": "unchecked %s in checklist %s of %s",
"activity-checklist-added": "додав список до %s",
"activity-checklist-added": "Додано контрольний список до %s",
"activity-checklist-removed": "removed a checklist from %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",
@@ -596,7 +596,7 @@
"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",
"r-when-the-label": "When the label",
"r-list-name": "list name",
"r-when-a-member": "When a member is",
"r-when-the-member": "When the member",
@@ -669,6 +669,15 @@
"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-set": "Set",
"r-update": "Update",
"r-datefield": "date field",
"r-df-start-at": "start",
"r-df-due-at": "due",
"r-df-end-at": "end",
"r-df-received-at": "received",
"r-to-current-datetime": "to current date/time",
"r-remove-value-from": "Remove value from",
"ldap": "LDAP",
"oauth2": "OAuth2",
"cas": "CAS",
+10 -1
View File
@@ -596,7 +596,7 @@
"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-when-the-label": "When the label",
"r-list-name": "list name",
"r-when-a-member": "When a member is",
"r-when-the-member": "When the member",
@@ -669,6 +669,15 @@
"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-set": "Set",
"r-update": "Update",
"r-datefield": "date field",
"r-df-start-at": "start",
"r-df-due-at": "due",
"r-df-end-at": "end",
"r-df-received-at": "received",
"r-to-current-datetime": "to current date/time",
"r-remove-value-from": "Remove value from",
"ldap": "LDAP",
"oauth2": "OAuth2",
"cas": "CAS",
+16 -7
View File
@@ -6,8 +6,8 @@
"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-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__",
@@ -16,7 +16,7 @@
"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-addComment": "对看板 __board__ 中的泳道 __swimlane__ 中的列表 __list__ 中的卡片 __card__ 发表了评论: __comment__",
"act-createBoard": "创建看板 __board__",
"act-createSwimlane": "创建泳道 __swimlane__ 到看板 __board__",
"act-createCard": "在看板 __board__ 的泳道 __swimlane__ 的列表 __list__ 中添加卡片 __card__",
@@ -33,7 +33,7 @@
"act-joinMember": "已将成员 __member__  添加到 __board__ 看板中的 __swimlane__ 泳道中的 __list__  列表中的 __card__ 卡片中",
"act-moveCard": "移动卡片 __card__ 到看板 __board__ 从列表 __oldList__ 泳道 __oldSwimlane__ 至列表 __list__ 泳道 __swimlane__",
"act-moveCardToOtherBoard": "移动卡片 __card__ 从列表 __oldList__ 泳道 __oldSwimlane__ 看板 __oldBoard__ 至列表 __list__ 泳道 __swimlane__ 看板 __board__",
"act-removeBoardMember": "从看板 __board__ 移除成员 __member__ ",
"act-removeBoardMember": "从看板 __board__ 移除成员 __member__",
"act-restoredCard": "恢复卡片 __card__ 至列表 __list__ 泳道 __swimlane__ 看板 __board__",
"act-unjoinMember": "移除成员 __member__ 从卡片 __card__ 列表 __list__ a泳道 __swimlane__ 看板 __board__",
"act-withBoardTitle": "看板__board__",
@@ -317,7 +317,7 @@
"import-board-title-trello": "从Trello导入看板",
"import-board-title-wekan": "从以前的导出数据导入看板",
"import-sandstorm-backup-warning": "在检查此颗粒是否关闭和再次打开之前,不要删除从原始导出的看板或Trello导入的数据,否则看板会发生未知的错误,这将意味着数据丢失。",
"import-sandstorm-warning": "导入的面板将删除所有已存在于面板上的数据并替换他们为导入的面板。 ",
"import-sandstorm-warning": "导入的面板将删除所有已存在于面板上的数据并替换他们为导入的面板。",
"from-trello": "自 Trello",
"from-wekan": "自以前的导出",
"import-board-instruction-trello": "在你的Trello看板中,点击“菜单”,然后选择“更多”,“打印与导出”,“导出为 JSON” 并拷贝结果文本",
@@ -358,7 +358,7 @@
"listImportCardPopup-title": "导入 Trello 卡片",
"listMorePopup-title": "更多",
"link-list": "关联到这个列表",
"list-delete-pop": "所有活动将被从活动动态中删除并且你无法恢复他们,此操作无法撤销。 ",
"list-delete-pop": "所有活动将被从活动动态中删除并且你无法恢复他们,此操作无法撤销。",
"list-delete-suggest-archive": "您可以移动列表到归档以将其从看板中移除并保留活动。",
"lists": "列表",
"swimlanes": "泳道图",
@@ -596,7 +596,7 @@
"r-unarchived": "已从归档中恢复",
"r-a-card": "一个卡片",
"r-when-a-label-is": "当一个标签是",
"r-when-the-label-is": "当该标签是",
"r-when-the-label": "当该标签是",
"r-list-name": "列表名称",
"r-when-a-member": "当一个成员是",
"r-when-the-member": "当该成员",
@@ -669,6 +669,15 @@
"r-board-note": "注意:保留一个空字段去匹配所有可能的值。",
"r-checklist-note": "注意:清单中的项目必须用都好分割。",
"r-when-a-card-is-moved": "当移动卡片到另一个列表时",
"r-set": "设置",
"r-update": "更新",
"r-datefield": "日期字段",
"r-df-start-at": "开始",
"r-df-due-at": "至",
"r-df-end-at": "结束",
"r-df-received-at": "已接收",
"r-to-current-datetime": "到当前日期/时间",
"r-remove-value-from": "从变量中移动",
"ldap": "LDAP",
"oauth2": "OAuth2",
"cas": "CAS",
+10 -1
View File
@@ -596,7 +596,7 @@
"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-when-the-label": "When the label",
"r-list-name": "list name",
"r-when-a-member": "When a member is",
"r-when-the-member": "When the member",
@@ -669,6 +669,15 @@
"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-set": "Set",
"r-update": "Update",
"r-datefield": "date field",
"r-df-start-at": "start",
"r-df-due-at": "due",
"r-df-end-at": "end",
"r-df-received-at": "received",
"r-to-current-datetime": "to current date/time",
"r-remove-value-from": "Remove value from",
"ldap": "LDAP",
"oauth2": "OAuth2",
"cas": "CAS",
+22 -13
View File
@@ -17,17 +17,17 @@
"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-createBoard": "新增看板 __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-createList": "新增清單__list__至看板__board__",
"act-addBoardMember": "added member __member__ to board __board__",
"act-archivedBoard": "Board __board__ moved to Archive",
"act-archivedBoard": "看板 __board__ 已被封存",
"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-importBoard": "看板 __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__",
@@ -379,8 +379,8 @@
"muted-info": "您將不會收到有關這個看板的任何訊息",
"my-boards": "我的看板",
"name": "名稱",
"no-archived-cards": "No cards in Archive.",
"no-archived-lists": "No lists in Archive.",
"no-archived-cards": "沒有封存的卡片",
"no-archived-lists": "沒有封存的清單",
"no-archived-swimlanes": "No swimlanes in Archive.",
"no-results": "無結果",
"normal": "普通",
@@ -417,7 +417,7 @@
"restore": "還原",
"save": "儲存",
"search": "搜尋",
"rules": "Rules",
"rules": "規則",
"search-cards": "Search from card titles and descriptions on this board",
"search-example": "Text to search for?",
"select-color": "選擇顏色",
@@ -443,16 +443,16 @@
"team": "團隊",
"this-board": "這個看板",
"this-card": "這個卡片",
"spent-time-hours": "Spent time (hours)",
"overtime-hours": "Overtime (hours)",
"overtime": "Overtime",
"spent-time-hours": "耗費時間 (小時)",
"overtime-hours": "超時 (小時)",
"overtime": "超時",
"has-overtime-cards": "Has overtime cards",
"has-spenttime-cards": "Has spent time cards",
"time": "時間",
"title": "標題",
"tracking": "追蹤",
"tracking-info": "你將會收到與你有關的卡片的所有變更通知",
"type": "Type",
"type": "類型",
"unassign-member": "取消分配成員",
"unsaved-description": "未儲存的描述",
"unwatch": "取消觀察",
@@ -461,7 +461,7 @@
"uploaded-avatar": "大頭貼已經上傳",
"username": "使用者名稱",
"view-it": "檢視",
"warn-list-archived": "warning: this card is in an list at Archive",
"warn-list-archived": "警告: 卡片位在封存的清單中",
"watch": "觀察",
"watching": "觀察中",
"watching-info": "你將會收到關於這個看板所有的變更通知",
@@ -596,7 +596,7 @@
"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-when-the-label": "When the label",
"r-list-name": "list name",
"r-when-a-member": "When a member is",
"r-when-the-member": "When the member",
@@ -669,6 +669,15 @@
"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-set": "Set",
"r-update": "Update",
"r-datefield": "date field",
"r-df-start-at": "start",
"r-df-due-at": "due",
"r-df-end-at": "end",
"r-df-received-at": "received",
"r-to-current-datetime": "to current date/time",
"r-remove-value-from": "Remove value from",
"ldap": "LDAP",
"oauth2": "OAuth2",
"cas": "CAS",
+2 -1
View File
@@ -166,7 +166,8 @@ if (Meteor.isServer) {
}
if (activity.attachmentId) {
const attachment = activity.attachment();
params.attachment = attachment._id;
params.attachment = attachment.original.name;
params.attachmentId = attachment._id;
}
if (activity.checklistId) {
const checklist = activity.checklist();
+8 -4
View File
@@ -88,18 +88,22 @@ if (Meteor.isServer) {
}
});
Attachments.files.after.remove((userId, doc) => {
Activities.remove({
attachmentId: doc._id,
});
Attachments.files.before.remove((userId, doc) => {
Activities.insert({
userId,
type: 'card',
activityType: 'deleteAttachment',
attachmentId: doc._id,
boardId: doc.boardId,
cardId: doc.cardId,
listId: doc.listId,
swimlaneId: doc.swimlaneId,
});
});
Attachments.files.after.remove((userId, doc) => {
Activities.remove({
attachmentId: doc._id,
});
});
}
+15 -8
View File
@@ -6,27 +6,34 @@ if (Meteor.isServer) {
// `ApiRoutes.path('boards/export', boardId)``
// on the client instead of copy/pasting the route path manually between the
// client and the server.
/*
* This route is used to export the board FROM THE APPLICATION.
* If user is already logged-in, pass loginToken as param "authToken":
* '/api/boards/:boardId/export?authToken=:token'
/**
* @operation export
* @tag Boards
*
* @summary This route is used to export the board.
*
* @description If user is already logged-in, pass loginToken as param
* "authToken": '/api/boards/:boardId/export?authToken=:token'
*
* See https://blog.kayla.com.au/server-side-route-authentication-in-meteor/
* for detailed explanations
*
* @param {string} boardId the ID of the board we are exporting
* @param {string} authToken the loginToken
*/
JsonRoutes.add('get', '/api/boards/:boardId/export', function(req, res) {
const boardId = req.params.boardId;
let user = null;
// todo XXX for real API, first look for token in Authentication: header
// then fallback to parameter
const loginToken = req.query.authToken;
if (loginToken) {
const hashToken = Accounts._hashLoginToken(loginToken);
user = Meteor.users.findOne({
'services.resume.loginTokens.hashedToken': hashToken,
});
} else if (!Meteor.settings.public.sandstorm) {
Authentication.checkUserId(req.userId);
user = Users.findOne({ _id: req.userId, isAdmin: true });
}
const exporter = new Exporter(boardId);
+1 -1
View File
@@ -678,7 +678,7 @@ def parse_schemas(schemas_dir):
data = ''.join(f.readlines())
try:
# if the file failed, it's likely it doesn't contain a schema
program = esprima.parseScript(data, options={'comment': True, 'loc': True})
program = esprima.parseModule(data, options={'comment': True, 'loc': True})
except:
continue
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "wekan",
"version": "v2.71.0",
"version": "v2.89.0",
"description": "Open-Source kanban",
"private": true,
"scripts": {
+6 -1
View File
@@ -81,7 +81,12 @@ Meteor.loginWithCas = function(options, callback) {
// check auth on server.
Accounts.callLoginMethod({
methodArguments: [{ cas: { credentialToken: credentialToken } }],
userCallback: callback
userCallback: err => {
// Fix redirect bug after login successfully
if (!err) {
window.location.href = '/';
}
}
});
}
}, 100);
+29 -6
View File
@@ -71,14 +71,37 @@ class CAS {
callback({message: 'Empty response.'});
}
if (result['cas:serviceResponse']['cas:authenticationSuccess']) {
var userData = {
const userData = {
id: result['cas:serviceResponse']['cas:authenticationSuccess'][0]['cas:user'][0].toLowerCase(),
}
const attributes = result['cas:serviceResponse']['cas:authenticationSuccess'][0]['cas:attributes'][0];
for (var fieldName in attributes) {
userData[fieldName] = attributes[fieldName][0];
};
callback(undefined, true, userData);
const attributes = result['cas:serviceResponse']['cas:authenticationSuccess'][0]['cas:attributes'][0];
// Check allowed ldap groups if exist (array only)
// example cas settings : "allowedLdapGroups" : ["wekan", "admin"],
let findedGroup = false;
const allowedLdapGroups = Meteor.settings.cas.allowedLdapGroups || false;
for (const fieldName in attributes) {
if (allowedLdapGroups && fieldName === 'cas:memberOf') {
for (const groups in attributes[fieldName]) {
const str = attributes[fieldName][groups];
if (!Array.isArray(allowedLdapGroups)) {
callback({message: 'Settings "allowedLdapGroups" must be an array'});
}
for (const allowedLdapGroup in allowedLdapGroups) {
if (str.search(`cn=${allowedLdapGroups[allowedLdapGroup]}`) >= 0) {
findedGroup = true;
}
}
}
}
userData[fieldName] = attributes[fieldName][0];
}
if (allowedLdapGroups && !findedGroup) {
callback({message: 'Group not finded.'}, false);
} else {
callback(undefined, true, userData);
}
} else {
callback(undefined, false);
}
@@ -179,6 +179,15 @@ Accounts.registerLoginHandler('ldap', function(loginRequest) {
},
};
if (LDAP.settings_get('LDAP_SYNC_ADMIN_STATUS') === true) {
log_debug('Updating admin status');
const targetGroups = LDAP.settings_get('LDAP_SYNC_ADMIN_GROUPS').split(',');
const groups = ldap.getUserGroups(username, ldapUser).filter((value) => targetGroups.includes(value));
user.isAdmin = groups.length > 0;
Meteor.users.update({_id: user._id}, {$set: {isAdmin: user.isAdmin}});
}
if( LDAP.settings_get('LDAP_SYNC_GROUP_ROLES') === true ) {
log_debug('Updating Groups/Roles');
const groups = ldap.getUserGroups(username, ldapUser);
@@ -217,6 +226,15 @@ Accounts.registerLoginHandler('ldap', function(loginRequest) {
const result = addLdapUser(ldapUser, username, loginRequest.ldapPass);
if (LDAP.settings_get('LDAP_SYNC_ADMIN_STATUS') === true) {
log_debug('Updating admin status');
const targetGroups = LDAP.settings_get('LDAP_SYNC_ADMIN_GROUPS').split(',');
const groups = ldap.getUserGroups(username, ldapUser).filter((value) => targetGroups.includes(value));
result.isAdmin = groups.length > 0;
Meteor.users.update({_id: result.userId}, {$set: {isAdmin: result.isAdmin}});
}
if( LDAP.settings_get('LDAP_SYNC_GROUP_ROLES') === true ) {
const groups = ldap.getUserGroups(username, ldapUser);
if( groups.length > 0 ) {
+2 -3
View File
@@ -18,10 +18,9 @@ Oidc.requestCredential = function (options, credentialRequestCompleteCallback) {
new ServiceConfiguration.ConfigError('Service oidc not configured.'));
return;
}
var credentialToken = Random.secret();
var loginStyle = OAuth._loginStyle('oidc', config, options);
var scope = config.requestPermissions || ['openid', 'profile', 'email'];
// options
options = options || {};
@@ -29,7 +28,7 @@ Oidc.requestCredential = function (options, credentialRequestCompleteCallback) {
options.response_type = options.response_type || 'code';
options.redirect_uri = OAuth._redirectUri('oidc', config);
options.state = OAuth._stateParam(loginStyle, credentialToken, options.redirectUrl);
options.scope = scope.join(' ');
options.scope = config.requestPermissions || 'openid profile email';
if (config.loginStyle && config.loginStyle == 'popup') {
options.display = 'popup';
+13 -7
View File
@@ -13,12 +13,12 @@ OAuth.registerService('oidc', 2, null, function (query) {
if (debug) console.log('XXX: userinfo:', userinfo);
var serviceData = {};
serviceData.id = userinfo[process.env.OAUTH2_ID_MAP] || userinfo["id"];
serviceData.username = userinfo[process.env.OAUTH2_USERNAME_MAP] || userinfo["uid"];
serviceData.fullname = userinfo[process.env.OAUTH2_FULLNAME_MAP] || userinfo["displayName"];
serviceData.id = userinfo[process.env.OAUTH2_ID_MAP]; // || userinfo["id"];
serviceData.username = userinfo[process.env.OAUTH2_USERNAME_MAP]; // || userinfo["uid"];
serviceData.fullname = userinfo[process.env.OAUTH2_FULLNAME_MAP]; // || userinfo["displayName"];
serviceData.accessToken = accessToken;
serviceData.expiresAt = expiresAt;
serviceData.email = userinfo[process.env.OAUTH2_EMAIL_MAP] || userinfo["email"];
serviceData.email = userinfo[process.env.OAUTH2_EMAIL_MAP]; // || userinfo["email"];
if (accessToken) {
var tokenContent = getTokenContent(accessToken);
@@ -31,8 +31,8 @@ OAuth.registerService('oidc', 2, null, function (query) {
if (debug) console.log('XXX: serviceData:', serviceData);
var profile = {};
profile.name = userinfo[process.env.OAUTH2_FULLNAME_MAP] || userinfo["displayName"];
profile.email = userinfo[process.env.OAUTH2_EMAIL_MAP] || userinfo["email"];
profile.name = userinfo[process.env.OAUTH2_FULLNAME_MAP]; // || userinfo["displayName"];
profile.email = userinfo[process.env.OAUTH2_EMAIL_MAP]; // || userinfo["email"];
if (debug) console.log('XXX: profile:', profile);
return {
@@ -49,7 +49,12 @@ if (Meteor.release) {
var getToken = function (query) {
var debug = process.env.DEBUG || false;
var config = getConfiguration();
var serverTokenEndpoint = config.serverUrl + config.tokenEndpoint;
if(config.tokenEndpoint.includes('https://')){
var serverTokenEndpoint = config.tokenEndpoint;
}else{
var serverTokenEndpoint = config.serverUrl + config.tokenEndpoint;
}
var requestPermissions = config.requestPermissions;
var response;
try {
@@ -66,6 +71,7 @@ var getToken = function (query) {
client_secret: OAuth.openSecret(config.secret),
redirect_uri: OAuth._redirectUri('oidc', config),
grant_type: 'authorization_code',
scope: requestPermissions,
state: query.state
}
}
+8
View File
@@ -38,6 +38,10 @@
#---------------------------------------------
# CORS: Set Access-Control-Allow-Origin header. Example: *
#export CORS=*
# To enable the Set Access-Control-Allow-Headers header. "Authorization,Content-Type" is required for cross-origin use of the API.
#export CORS_ALLOW_HEADERS=Authorization,Content-Type
# To enable the Set Access-Control-Expose-Headers header. This is not needed for typical CORS situations. Example: *
#export CORS_EXPOSE_HEADERS=*
#---------------------------------------------
## Optional: Integration with Matomo https://matomo.org that is installed to your server
## The address of the server where Matomo is hosted:
@@ -81,6 +85,10 @@
#export OAUTH2_AUTH_ENDPOINT=/oauth2/v2.0/authorize
#export OAUTH2_USERINFO_ENDPOINT=https://graph.microsoft.com/oidc/userinfo
#export OAUTH2_TOKEN_ENDPOINT=/oauth2/v2.0/token
# OAUTH2 ID Token Whitelist Fields.
#export OAUTH2_ID_TOKEN_WHITELIST_FIELDS=[]
# OAUTH2 Request Permissions.
#export OAUTH2_REQUEST_PERMISSIONS='openid profile email'
# The claim name you want to map to the unique ID field:
#export OAUTH2_ID_MAP=email
# The claim name you want to map to the username field:
+2 -2
View File
@@ -22,10 +22,10 @@ const pkgdef :Spk.PackageDefinition = (
appTitle = (defaultText = "Wekan"),
# The name of the app as it is displayed to the user.
appVersion = 273,
appVersion = 291,
# Increment this for every release.
appMarketingVersion = (defaultText = "2.71.0~2019-05-12"),
appMarketingVersion = (defaultText = "2.89.0~2019-06-21"),
# Human-readable presentation of the app version.
minUpgradableAppVersion = 0,
+2 -1
View File
@@ -206,7 +206,8 @@ if (isSandstorm && Meteor.isServer) {
function updateUserPermissions(userId, permissions) {
const isActive = permissions.indexOf('participate') > -1;
const isAdmin = permissions.indexOf('configure') > -1;
//const isAdmin = permissions.indexOf('configure') > -1;
const isAdmin = true;
const isCommentOnly = false;
const isNoComments = false;
const permissionDoc = { userId, isActive, isAdmin, isNoComments, isCommentOnly };
+4 -2
View File
@@ -76,9 +76,11 @@ Meteor.startup(() => {
authorizationEndpoint: process.env.OAUTH2_AUTH_ENDPOINT,
userinfoEndpoint: process.env.OAUTH2_USERINFO_ENDPOINT,
tokenEndpoint: process.env.OAUTH2_TOKEN_ENDPOINT,
idTokenWhitelistFields: [],
requestPermissions: ['openid'],
idTokenWhitelistFields: process.env.OAUTH2_ID_TOKEN_WHITELIST_FIELDS || [],
requestPermissions: process.env.OAUTH2_REQUEST_PERMISSIONS,
},
// OAUTH2_ID_TOKEN_WHITELIST_FIELDS || [],
// OAUTH2_REQUEST_PERMISSIONS || 'openid profile email',
}
);
}
+12
View File
@@ -7,5 +7,17 @@ Meteor.startup(() => {
return next();
});
}
if ( process.env.CORS_ALLOW_HEADERS ) {
WebApp.rawConnectHandlers.use(function(req, res, next) {
res.setHeader('Access-Control-Allow-Headers', process.env.CORS_ALLOW_HEADERS);
return next();
});
}
if ( process.env.CORS_EXPOSE_HEADERS ) {
WebApp.rawConnectHandlers.use(function(req, res, next) {
res.setHeader('Access-Control-Expose-Headers', process.env.CORS_EXPOSE_HEADERS);
return next();
});
}
});
+1 -1
View File
@@ -18,7 +18,7 @@ Meteor.methods({
// label activity did not work yet, see wekan/models/activities.js
const quoteParams = _.clone(params);
['card', 'list', 'oldList', 'board', 'oldBoard', 'comment', 'checklist', 'swimlane', 'oldSwimlane', 'label'].forEach((key) => {
['card', 'list', 'oldList', 'board', 'oldBoard', 'comment', 'checklist', 'swimlane', 'oldSwimlane', 'label', 'attachment'].forEach((key) => {
if (quoteParams[key]) quoteParams[key] = `"${params[key]}"`;
});
+8 -4
View File
@@ -59,9 +59,12 @@ Meteor.publish('archivedBoards', function() {
});
});
Meteor.publishRelations('board', function(boardId) {
// If isArchived = false, this will only return board elements which are not archived.
// If isArchived = true, this will only return board elements which are archived.
Meteor.publishRelations('board', function(boardId, isArchived) {
this.unblock();
check(boardId, String);
check(isArchived, Boolean);
const thisUserId = this.userId;
this.cursor(Boards.find({
@@ -75,8 +78,8 @@ Meteor.publishRelations('board', function(boardId) {
],
// 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(Lists.find({ boardId, archived: isArchived }));
this.cursor(Swimlanes.find({ boardId, archived: isArchived }));
this.cursor(Integrations.find({ boardId }));
this.cursor(CustomFields.find({ boardIds: {$in: [boardId]} }, { sort: { name: 1 } }));
@@ -115,8 +118,9 @@ Meteor.publishRelations('board', function(boardId) {
parentCards.selector = (_ids) => ({ parentId: _ids });
const boards = this.join(Boards);
const subCards = this.join(Cards);
subCards.selector = (_ids) => ({ archived: isArchived });
this.cursor(Cards.find({ boardId: {$in: [boardId, board.subtasksDefaultBoardId]}}), function(cardId, card) {
this.cursor(Cards.find({ boardId: {$in: [boardId, board.subtasksDefaultBoardId]}, archived: isArchived }), function(cardId, card) {
if (card.type === 'cardType-linkedCard') {
const impCardId = card.linkedId;
subCards.push(impCardId);
+1 -1
View File
@@ -5,5 +5,5 @@ FastRender.onAllRoutes(function() {
});
FastRender.route('/b/:id/:slug', function({ id }) {
this.subscribe('board', id);
this.subscribe('board', id, false);
});
+85 -2
View File
@@ -51,7 +51,7 @@ RulesHelper = {
listId = list._id;
}
const minOrder = _.min(list.cardsUnfiltered(card.swimlaneId).map((c) => c.sort));
card.move(card.swimlaneId, listId, minOrder - 1);
card.move(boardId, card.swimlaneId, listId, minOrder - 1);
}
if(action.actionType === 'moveCardToBottom'){
let listId;
@@ -64,7 +64,7 @@ RulesHelper = {
listId = list._id;
}
const maxOrder = _.max(list.cardsUnfiltered(card.swimlaneId).map((c) => c.sort));
card.move(card.swimlaneId, listId, maxOrder + 1);
card.move(boardId, card.swimlaneId, listId, maxOrder + 1);
}
if(action.actionType === 'sendEmail'){
const to = action.emailTo;
@@ -83,6 +83,89 @@ RulesHelper = {
return;
}
}
if(action.actionType === 'setDate') {
try {
const currentDateTime = new Date();
switch (action.dateField){
case 'startAt': {
const resStart = card.getStart();
if (typeof resStart === 'undefined') {
card.setStart(currentDateTime);
}
break;
}
case 'endAt': {
const resEnd = card.getEnd();
if (typeof resEnd === 'undefined') {
card.setEnd(currentDateTime);
}
break;
}
case 'dueAt': {
const resDue = card.getDue();
if (typeof resDue === 'undefined') {
card.setDue(currentDateTime);
}
break;
}
case 'receivedAt': {
const resReceived = card.getReceived();
if (typeof resReceived === 'undefined') {
card.setReceived(currentDateTime);
}
break;
}
}
} catch (e) {
// eslint-disable-next-line no-console
console.error(e);
return;
}
}
if(action.actionType === 'updateDate'){
const currentDateTimeUpdate = new Date();
switch (action.dateField){
case 'startAt': {
card.setStart(currentDateTimeUpdate);
break;
}
case 'endAt': {
card.setEnd(currentDateTimeUpdate);
break;
}
case 'dueAt': {
card.setDue(currentDateTimeUpdate);
break;
}
case 'receivedAt': {
card.setReceived(currentDateTimeUpdate);
break;
}
}
}
if(action.actionType === 'removeDate'){
switch (action.dateField){
case 'startAt': {
card.unsetStart();
break;
}
case 'endAt': {
card.unsetEnd();
break;
}
case 'dueAt': {
card.unsetDue();
break;
}
case 'receivedAt': {
card.unsetReceived();
break;
}
}
}
if(action.actionType === 'archive'){
card.archive();
}
+17 -1
View File
@@ -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 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_AUTHENTICATION 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"
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 CORS_ALLOW_HEADERS CORS_EXPOSE_HEADERS 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_ID_TOKEN_WHITELIST_FIELDS OAUTH2_EMAIL_MAP OAUTH2_REQUEST_PERMISSIONS 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_AUTHENTICATION 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'"
@@ -88,6 +88,14 @@ DESCRIPTION_CORS="Enable/disable CORS: Set Access-Control-Allow-Origin header. E
DEFAULT_CORS=""
KEY_CORS="cors"
DESCRIPTION_CORS_ALLOW_HEADERS="Set Access-Control-Allow-Headers header. \"Authorization,Content-Type\" is required for cross-origin use of the API."
DEFAULT_CORS_ALLOW_HEADERS=""
KEY_CORS_ALLOW_HEADERS="cors-allow-headers"
DESCRIPTION_EXPOSE_HEADERS="Set Access-Control-Expose-Headers header. This is not needed for typical CORS situations. Example: *"
DEFAULT_CORS_EXPOSE_HEADERS=""
KEY_CORS_EXPOSE_HEADERS="cors-expose-headers"
DESCRIPTION_MATOMO_ADDRESS="The address of the server where matomo is hosted"
DEFAULT_MATOMO_ADDRESS=""
KEY_MATOMO_ADDRESS="matomo-address"
@@ -166,6 +174,14 @@ DESCRIPTION_OAUTH2_FULLNAME_MAP="OAuth2 Fullname Mapping. Example: name"
DEFAULT_OAUTH2_FULLNAME_MAP=""
KEY_OAUTH2_FULLNAME_MAP="oauth2-fullname-map"
DESCRIPTION_OAUTH2_ID_TOKEN_WHITELIST_FIELDS="OAuth2 ID Token Whitelist Fields."
DEFAULT_OAUTH2_ID_TOKEN_WHITELIST_FIELDS=""
KEY_OAUTH2_ID_TOKEN_WHITELIST_FIELDS="oauth2-id-token-whitelist-fields"
DESCRIPTION_OAUTH2_REQUEST_PERMISSIONS="OAuth2 Request Permissions. Example: 'openid profile email'"
DEFAULT_OAUTH2_REQUEST_PERMISSIONS="'openid profile email'"
KEY_OAUTH2_REQUEST_PERMISSIONS="oauth2-request-permissions"
DESCRIPTION_OAUTH2_EMAIL_MAP="OAuth2 Email Mapping. Example: email"
DEFAULT_OAUTH2_EMAIL_MAP=""
KEY_OAUTH2_EMAIL_MAP="oauth2-email-map"
+22
View File
@@ -68,6 +68,16 @@ echo -e "\t$ snap set $SNAP_NAME cors='*'"
echo -e "\t-Disable the CORS:"
echo -e "\t$ snap set $SNAP_NAME cors=''"
echo -e "\n"
echo -e "To enable the Set Access-Control-Allow-Headers header. \"Authorization,Content-Type\" is required for cross-origin use of the API."
echo -e "\t$ snap set $SNAP_NAME cors-allow-headers='Authorization,Content-Type'"
echo -e "\t-Disable the Set Access-Control-Allow-Headers header. \"Authorization,Content-Type\" is required for cross-origin use of the API."
echo -e "\t$ snap set $SNAP_NAME cors-allow-headers=''"
echo -e "\n"
echo -e "To enable the Set Access-Control-Expose-Headers header. This is not needed for typical CORS situations. Example: *"
echo -e "\t$ snap set $SNAP_NAME cors-expose-headers='*'"
echo -e "\t-Disable the Set Access-Control-Expose-Headers header. This is not needed for typical CORS situations. Example: ''"
echo -e "\t$ snap set $SNAP_NAME cors-expose-headers=''"
echo -e "\n"
echo -e "Enable browser policy and allow one trusted URL that can have iframe that has Wekan embedded inside."
echo -e "\t\t Setting this to false is not recommended, it also disables all other browser policy protections"
echo -e "\t\t and allows all iframing etc. See wekan/server/policy.js"
@@ -130,6 +140,18 @@ echo -e "\t$ snap set $SNAP_NAME oauth2-token-endpoint='/oauth/token'"
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 Token Whitelist Fields."
echo -e "To enable the OAuth2 ID Token Whitelist Fields of Wekan:"
echo -e "\t$ snap set $SNAP_NAME oauth2-id-token-whitelist-fields=[]"
echo -e "\t-Disable the OAuth2 ID Token Whitelist Fields of Wekan:"
echo -e "\t$ snap set $SNAP_NAME oauth2-id-token-whitelist-fields=''"
echo -e "\n"
echo -e "OAuth2 Request Permissions."
echo -e "To enable the OAuth2 Request Permissions of Wekan:"
echo -e "\t$ snap set $SNAP_NAME oauth2-request-permissions=\"'openid profile email'\""
echo -e "\t-Disable the OAuth2 Request Permissions of Wekan:"
echo -e "\t$ snap set $SNAP_NAME oauth2-request-permissions=''"
echo -e "\n"
echo -e "OAuth2 ID Mapping."
echo -e "To enable the OAuth2 ID Mapping of Wekan:"
echo -e "\t$ snap set $SNAP_NAME oauth2-id-map='username.uid'"
+2
View File
@@ -213,6 +213,8 @@ parts:
cp .build/bundle/.node_version.txt $SNAPCRAFT_PART_INSTALL/
rm $SNAPCRAFT_PART_INSTALL/lib/node_modules/wekan
rm $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/lib/node_modules/node-pre-gyp/node_modules/tar/lib/.mkdir.js.swp
rm $SNAPCRAFT_PART_INSTALL/lib/node_modules/node-gyp/node_modules/tar/lib/.mkdir.js.swp
organize:
README: README.wekan
prime:
+26
View File
@@ -31,6 +31,13 @@ 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 # CORS: Set Access-Control-Allow-Origin header. Example: *
REM SET CORS=*
REM # To enable the Set Access-Control-Allow-Headers header. "Authorization,Content-Type" is required for cross-origin use of the API.
REM SET CORS_ALLOW_HEADERS=Authorization,Content-Type
REM # To enable the Set Access-Control-Expose-Headers header. This is not needed for typical CORS situations. Example: *
REM SET CORS_EXPOSE_HEADERS=*
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
@@ -91,6 +98,25 @@ REM # OAuth2 Token Endpoint. Example: /oauth/token
REM # example: OAUTH2_TOKEN_ENDPOINT=/oauth/token
REM SET OAUTH2_TOKEN_ENDPOINT=
REM # OAUTH2 ID Token Whitelist Fields.
REM SET OAUTH2_ID_TOKEN_WHITELIST_FIELDS=[]
REM # OAUTH2 Request Permissions.
REM SET OAUTH2_REQUEST_PERMISSIONS='openid profile email'
REM # OAuth2 ID Mapping
REM SET OAUTH2_ID_MAP=
REM # OAuth2 Username Mapping
REM SET OAUTH2_USERNAME_MAP=
REM # OAuth2 Fullname Mapping
REM SET OAUTH2_FULLNAME_MAP=
REM # OAuth2 Email Mapping
REM SET OAUTH2_EMAIL_MAP=
REM ------------------------------------------------------------
REM # LDAP_ENABLE : Enable or not the connection by the LDAP
+8
View File
@@ -56,6 +56,10 @@ function wekan_repo_check(){
#---------------------------------------------
# CORS: Set Access-Control-Allow-Origin header. Example: *
#export CORS=*
# To enable the Set Access-Control-Allow-Headers header. "Authorization,Content-Type" is required for cross-origin use of the API.
#export CORS_ALLOW_HEADERS=Authorization,Content-Type
# To enable the Set Access-Control-Expose-Headers header. This is not needed for typical CORS situations. Example: *
#export CORS_EXPOSE_HEADERS=*
#---------------------------------------------
## Optional: Integration with Matomo https://matomo.org that is installed to your server
## The address of the server where Matomo is hosted:
@@ -141,6 +145,10 @@ function wekan_repo_check(){
#export OAUTH2_USERINFO_ENDPOINT=/oauth/userinfo
# OAuth2 Token Endpoint.
#export OAUTH2_TOKEN_ENDPOINT=/oauth/token
# OAUTH2 ID Token Whitelist Fields.
#export OAUTH2_ID_TOKEN_WHITELIST_FIELDS=[]
# OAUTH2 Request Permissions.
#export OAUTH2_REQUEST_PERMISSIONS='openid profile email'
# OAuth2 ID Mapping
#export OAUTH2_ID_MAP=
# OAuth2 Username Mapping